-
Cancel
-
Proceed
+ const sid = typeof getSessionIdFromURL === "function" ? getSessionIdFromURL() : null;
+ const sessionParam = sid ? `?session_id=${encodeURIComponent(sid)}` : "";
+ let fileRows = "";
+ for (const f of files) {
+ const ext = f.slice(f.lastIndexOf(".")).toLowerCase();
+ const icon = ICONS[ext] || "\u{1F4C1}";
+ const label = LABELS[ext] ? LABELS[ext](f) : f;
+ fileRows += `
+
+
${icon}
+
+
${label}
+
${escapeHtml(f)}
+
+
Download
+
`;
+ }
+ content.innerHTML = `
+
+
+
\u2705
+
+
CV Generated
+
${escapeHtml(subtitle)}
+
+
+
+ ${fileRows}
+
+
+ Open Layout Review \u2192
`;
- document.body.appendChild(overlay);
- _focusedElementBeforeModal = document.activeElement;
- if (typeof trapFocus === "function") trapFocus("rerun-confirm-overlay");
- document.getElementById("rerun-proceed-btn").focus();
- const close = () => {
- overlay.remove();
- restoreFocus();
- };
- document.getElementById("rerun-cancel-btn").addEventListener("click", close);
- document.getElementById("rerun-proceed-btn").addEventListener("click", () => {
- close();
- onConfirm();
- });
- overlay.addEventListener("click", (e) => {
- if (e.target === overlay) close();
- });
- overlay.addEventListener("keydown", (e) => {
- if (e.key === "Escape") close();
- });
- }
- function confirmReRunPhase2(step) {
- _showReRunConfirmModal(step, "rerun", () => backToPhase(step));
- }
- function _getStepTooltip(step, isActive, isViewing, isBrowsingAway, isCompleted, isStale, isStaleCritical) {
- if (isStaleCritical) return isViewing ? "Critical changes \u2014 review required. Click \u21BB to rerun." : "Critical changes \u2014 review required.";
- if (isStale) return isViewing ? "Results may be outdated. Click \u21BB to rerun." : "Results may be outdated.";
- if (isBrowsingAway) return "Active step \u2014 click to return";
- if (isActive && isViewing) return "Current step";
- if (isCompleted && isViewing) return "Click \u21BB to rerun from here";
- if (isCompleted) return "Click to view";
- return "";
}
- function _updateViewingIndicator2(tabName) {
- const tabToStep = {
- "job": "job",
- "analysis": "analysis",
- "questions": "analysis",
- "exp-review": "customizations",
- "rewrite": "rewrite",
- "spell": "spell",
- "layout": "layout",
- "final_generate": "download",
- "download": "download",
- "cover-letter": "cover_letter",
- "screening": "screening",
- "interview-prep": "interview_prep",
- "thank-you": "thank_you",
- "harvest": "harvest"
- };
- const viewedStep = tabToStep[tabName] || null;
- let activeStep = null;
- _STEP_ORDER.forEach((step) => {
- const el = document.getElementById(`step-${step}`);
- if (el && el.classList.contains("active")) activeStep = step;
+ var _visitedCustomiseTabs = /* @__PURE__ */ new Set();
+ var _CUSTOMISE_TABS = /* @__PURE__ */ new Set(["goals", "questions", "exp-review", "ach-editor", "skills-review", "achievements-review", "tagline-review", "summary-review", "publications-review", "ats-score"]);
+ function _updateVisitedTabIndicators() {
+ _visitedCustomiseTabs.forEach((name) => {
+ const el = document.getElementById(`tab-${name}`);
+ if (el) el.classList.add("tab--visited");
});
- _STEP_ORDER.forEach((step) => {
- const el = document.getElementById(`step-${step}`);
- if (!el) return;
- const isViewing = step === viewedStep;
- const isActive = step === activeStep;
- const isBrowsingAway = isActive && !!viewedStep && viewedStep !== activeStep;
- const isCompleted = el.classList.contains("completed");
- const isStale = el.classList.contains("stale");
- const isStaleCritical = el.classList.contains("stale-critical");
- el.classList.toggle("viewing", isViewing);
- el.classList.toggle("browsing-away", isBrowsingAway);
- const tooltipText = _getStepTooltip(step, isActive, isViewing, isBrowsingAway, isCompleted, isStale, isStaleCritical);
- if (tooltipText) {
- el.setAttribute("data-bs-toggle", "tooltip");
- el.setAttribute("data-bs-placement", "bottom");
- el.setAttribute("data-bs-title", tooltipText);
- if (typeof bootstrap !== "undefined") {
- const tip = bootstrap.Tooltip.getInstance(el);
- if (tip) tip.setContent({ ".tooltip-inner": tooltipText });
- else new bootstrap.Tooltip(el);
- }
- } else {
- el.removeAttribute("data-bs-toggle");
- el.removeAttribute("data-bs-title");
- if (typeof bootstrap !== "undefined") {
- const tip = bootstrap.Tooltip.getInstance(el);
- if (tip) tip.dispose();
- }
+ }
+ function switchTab2(tab) {
+ if (typeof resetCardFocus === "function") resetCardFocus();
+ _saveDraftInputsForTab(stateManager2.getCurrentTab());
+ let _switchTabStage = null;
+ if (typeof getStageForTab === "function" && typeof updateTabBarForStage === "function") {
+ _switchTabStage = getStageForTab(tab);
+ if (_switchTabStage) {
+ updateTabBarForStage(_switchTabStage);
+ updateActionButtons(_switchTabStage);
}
+ }
+ if (typeof stateManager2?.getPhase === "function" && typeof updateWorkflowStepsClickable === "function") {
+ updateWorkflowStepsClickable(stateManager2.getPhase());
+ }
+ if (typeof toggleEarlyPreviewPanel === "function") toggleEarlyPreviewPanel(tab);
+ document.querySelectorAll(".tab").forEach((t) => {
+ t.classList.remove("active");
+ t.setAttribute("aria-selected", "false");
+ t.setAttribute("tabindex", "-1");
});
- }
- async function _showAnalysisClarificationAmendModal(onProceed) {
- const questions = window.postAnalysisQuestions || [];
- const answers = window.questionAnswers || {};
- if (!questions.length) {
- await onProceed();
- return;
+ const activeTab = document.getElementById(`tab-${tab}`);
+ if (activeTab) {
+ activeTab.classList.add("active");
+ activeTab.setAttribute("aria-selected", "true");
+ activeTab.setAttribute("tabindex", "0");
+ const tabpanel = document.getElementById("document-content");
+ if (tabpanel) tabpanel.setAttribute("aria-labelledby", `tab-${tab}`);
}
- const overlay = document.createElement("div");
- overlay.id = "clar-amend-overlay";
- overlay.style.cssText = "position:fixed;inset:0;background:rgba(0,0,0,0.5);z-index:10000;display:flex;align-items:center;justify-content:center;overflow-y:auto;";
- const formRows = questions.map((q2, i) => {
- const qtype = q2.type || `clarification_${i + 1}`;
- const qtext = escapeHtml(q2.question || "");
- const curAns = escapeHtml(answers[qtype] || "");
- const choices = Array.isArray(q2.choices) ? q2.choices : [];
- if (choices.length) {
- const radios = choices.map((c) => `
-
-
- ${escapeHtml(c)}
- `).join("");
- return `
-
- ${qtext}
- ${radios}
-
`;
+ stateManager2.setCurrentTab(tab);
+ if (_CUSTOMISE_TABS.has(tab)) {
+ _visitedCustomiseTabs.add(tab);
+ _updateVisitedTabIndicators();
+ }
+ const announcer = document.getElementById("workflow-stage-announcer");
+ if (announcer && activeTab) {
+ const stageLabel = _switchTabStage ? _STEP_DISPLAY[_switchTabStage] : null;
+ const tabLabel = activeTab.textContent.trim();
+ const message = stageLabel ? `Now viewing: ${stageLabel} \u2014 ${tabLabel}` : `Now viewing: ${tabLabel}`;
+ announcer.textContent = "";
+ setTimeout(() => {
+ announcer.textContent = message;
+ }, 50);
+ }
+ if (typeof _updateViewingIndicator === "function") _updateViewingIndicator(tab);
+ const content = document.getElementById("document-content");
+ content.classList.toggle("full-width", tab !== "generate");
+ loadTabContent(tab);
+ }
+ async function loadTabContent(tab) {
+ const content = document.getElementById("document-content");
+ const tabData2 = ensureTabDataState();
+ try {
+ switch (tab) {
+ case "job":
+ await populateJobTab();
+ break;
+ case "goals":
+ if (typeof populateGoalsTab === "function") await populateGoalsTab();
+ break;
+ case "analysis":
+ if (tabData2.analysis) {
+ populateAnalysisTab(tabData2.analysis);
+ } else {
+ content.innerHTML = '
\u{1F50D}
Job Analysis Click "Analyze Job" to generate analysis
';
+ }
+ break;
+ case "questions":
+ populateQuestionsTab();
+ break;
+ case "customizations":
+ switchTab2("exp-review");
+ return;
+ case "exp-review":
+ await populateReviewTab("experiences");
+ break;
+ case "ach-editor":
+ await buildAchievementsEditor();
+ break;
+ case "skills-review":
+ await populateReviewTab("skills");
+ break;
+ case "achievements-review":
+ await populateReviewTab("achievements");
+ break;
+ case "tagline-review":
+ await populateTaglineReviewTab();
+ break;
+ case "summary-review":
+ await populateReviewTab("summary");
+ break;
+ case "publications-review":
+ await populateReviewTab("publications");
+ break;
+ case "ats-score":
+ if (typeof populateAtsScoreTab === "function") await populateAtsScoreTab();
+ break;
+ case "rewrite":
+ if (window._rewritePanelCache) {
+ renderRewritePanel(
+ window._rewritePanelCache.rewrites,
+ window._rewritePanelCache.warnings
+ );
+ } else {
+ content.innerHTML = '
\u270F\uFE0F
Rewrites Loading rewrites\u2026
';
+ try {
+ const data = await apiCall("GET", "/api/rewrites");
+ if (data.rewrites) {
+ renderRewritePanel(data.rewrites, data.persuasion_warnings || []);
+ } else {
+ content.innerHTML = '
\u270F\uFE0F
Rewrites Complete customizations to reach this step
';
+ }
+ } catch (e) {
+ content.innerHTML = '
\u270F\uFE0F
Rewrites Complete customizations to reach this step
';
+ }
+ }
+ break;
+ case "editor":
+ await populateCVEditorTab();
+ break;
+ case "generate":
+ _populateGenerateTab(tabData2.cv, content);
+ break;
+ case "download":
+ if (tabData2.cv && Object.keys(tabData2.cv).length > 0) {
+ await populateDownloadTab(tabData2.cv);
+ } else {
+ content.innerHTML = '
\u2B07\uFE0F
Download Generate CV to enable downloads
';
+ }
+ break;
+ case "spell":
+ await populateSpellCheckTab();
+ break;
+ case "layout":
+ initiateLayoutInstructions();
+ break;
+ case "finalise":
+ await populateFinaliseTab();
+ break;
+ case "harvest":
+ if (typeof populateHarvestTab === "function") await populateHarvestTab();
+ break;
+ case "interview-prep":
+ if (typeof populateInterviewPrepTab === "function") await populateInterviewPrepTab();
+ break;
+ case "thank-you":
+ if (typeof populateThankYouTab === "function") await populateThankYouTab();
+ break;
+ case "master":
+ await populateMasterTab();
+ break;
+ case "cover-letter":
+ await populateCoverLetterTab();
+ break;
+ case "screening":
+ await populateScreeningTab();
+ break;
}
- return `
-
- ${qtext}
-
-
`;
- }).join("");
- overlay.innerHTML = `
-
-
\u21BB Amend Clarification Answers
-
- Update your answers before rerunning analysis, or keep them as-is.
-
-
-
- Cancel
- Keep Existing Answers
- Update & Rerun
-
-
`;
- document.body.appendChild(overlay);
- if (typeof _focusedElementBeforeModal !== "undefined") window._focusedElementBeforeModal = document.activeElement;
- if (typeof trapFocus === "function") trapFocus("clar-amend-overlay");
- overlay.querySelector("#clar-amend-save").focus();
- function closeModal2() {
- overlay.remove();
- if (typeof restoreFocus === "function") restoreFocus();
+ } catch (error) {
+ log6.error(`Error loading tab ${tab}:`, error);
+ const errorMessage = document.createElement("p");
+ errorMessage.style.cssText = "padding: 20px; color: #c41e3a;";
+ errorMessage.textContent = `Error loading content: ${error.message}`;
+ content.appendChild(errorMessage);
+ return;
}
- overlay.querySelector("#clar-amend-cancel").addEventListener("click", closeModal2);
- overlay.addEventListener("click", (e) => {
- if (e.target === overlay) closeModal2();
- });
- overlay.addEventListener("keydown", (e) => {
- if (e.key === "Escape") closeModal2();
- });
- overlay.querySelector("#clar-amend-keep").addEventListener("click", () => {
- closeModal2();
- onProceed();
- });
- overlay.querySelector("#clar-amend-save").addEventListener("click", async () => {
- const form = document.getElementById("clar-amend-form");
- const updated = {};
- questions.forEach((q2, i) => {
- const qtype = q2.type || `clarification_${i + 1}`;
- const el = form.querySelector(`[name="clar-${qtype}"]`);
- if (!el) return;
- if (el.type === "radio") {
- const checked = form.querySelector(`[name="clar-${qtype}"]:checked`);
- if (checked) updated[qtype] = checked.value;
- } else {
- const val = el.value.trim();
- if (val) updated[qtype] = val;
- }
- });
- closeModal2();
- try {
- await fetch("/api/post-analysis-responses", {
- method: "POST",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify({ questions, answers: updated })
- });
- window.questionAnswers = updated;
- } catch (_e2) {
- }
- await onProceed();
- });
+ _restoreDraftInputsForTab(tab);
}
- async function reRunPhase(step) {
- if (step === "analysis") {
- await _showAnalysisClarificationAmendModal(() => _executeReRunPhase("analysis"));
+ async function showTableBasedReview2() {
+ if (!window.pendingRecommendations) {
+ appendMessage("assistant", "No recommendations to review. Please generate customizations first.");
return;
}
- await _executeReRunPhase(step);
+ switchTab2("exp-review");
+ appendMessage("assistant", "\u2705 Customizations generated! Please review each section in the **Customizations** tab \u2014 Experiences, Achievements, Skills, Summary, and Publications. Select your preferences using the action buttons, then submit your decisions.");
}
- async function _executeReRunPhase(step) {
- const loadingMsg = appendLoadingMessage(`\u21BB Re-running ${step}\u2026`);
- setLoading(true, `Re-running ${step}\u2026`);
+ var _synonymMapCache = null;
+ async function _loadSynonymMap() {
+ if (_synonymMapCache) return _synonymMapCache;
try {
- const res = await fetch("/api/re-run-phase", {
- method: "POST",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify({ phase: step })
+ const sessionId2 = stateManager2.getSessionId && stateManager2.getSessionId();
+ const url = sessionId2 ? `/api/synonym-map?session_id=${encodeURIComponent(sessionId2)}` : "/api/synonym-map";
+ const res = await fetch(url);
+ if (!res.ok) return _synonymMapCache = {};
+ const raw = await res.json();
+ const aliasToCanon = {};
+ const canonToAliases = {};
+ Object.entries(raw).forEach(([alias, canon]) => {
+ aliasToCanon[alias.toLowerCase()] = canon;
+ const cl = canon.toLowerCase();
+ (canonToAliases[cl] = canonToAliases[cl] || []).push(alias);
});
- const data = await res.json();
- removeLoadingMessage(loadingMsg);
- setLoading(false);
- if (!res.ok || !data.ok) {
- appendRetryMessage("\u26A0 Re-run failed: " + (data.error || "Unknown error"), () => reRunPhase(step));
- return;
- }
- appendMessage("assistant", `\u2705 ${step} re-run complete. Review the updated results \u2014 changed items are highlighted.`);
- await fetchStatus();
- if (step === "spell") window._spellCheckCache = null;
- if (step === "rewrite") window._rewritePanelCache = null;
- const tabMap = {
- analysis: "analysis",
- customizations: "goals",
- rewrite: "rewrite",
- spell: "spell"
- };
- if (tabMap[step]) switchTab(tabMap[step]);
- if (data.prior_output && data.new_output) {
- setTimeout(() => _highlightChangedItems(step, data.prior_output, data.new_output), 300);
- }
- } catch (err) {
- removeLoadingMessage(loadingMsg);
- setLoading(false);
- appendRetryMessage("\u26A0 Network error in reRunPhase: " + err.message, () => reRunPhase(step));
+ _synonymMapCache = { aliasToCanon, canonToAliases };
+ } catch (_2) {
+ _synonymMapCache = {};
}
+ return _synonymMapCache;
}
- function _highlightChangedItems(step, priorOutput, newOutput) {
- if (step === "rewrite") {
- const priorIds = new Set((priorOutput.pending_rewrites || []).map((r) => String(r.id)));
- const newItems = newOutput.pending_rewrites || [];
- for (const item of newItems) {
- const id = String(item.id || "");
- const cardId = id.replace(/[^a-zA-Z0-9_-]/g, "_");
- const el = document.getElementById(`rw-card-${cardId}`);
- if (!el) continue;
- const isNew = !priorIds.has(id);
- const priorItem = (priorOutput.pending_rewrites || []).find((r) => String(r.id) === id);
- const changed = isNew || priorItem && priorItem.proposed !== item.proposed;
- if (changed) _markChanged(el);
+ function _kwSynonymAnnotation(kw, synMap) {
+ if (!synMap || !synMap.aliasToCanon && !synMap.canonToAliases) return "";
+ const kl = kw.toLowerCase();
+ if (synMap.aliasToCanon[kl]) return ` = ${synMap.aliasToCanon[kl]}`;
+ const aliases = synMap.canonToAliases && synMap.canonToAliases[kl];
+ if (aliases && aliases.length) return ` (${aliases.join(", ")})`;
+ return "";
+ }
+ async function populateAnalysisTab(result) {
+ const content = document.getElementById("document-content");
+ try {
+ let data;
+ if (result !== null && typeof result === "object") {
+ data = result;
+ } else {
+ const cleanResult = cleanJsonResponse(result);
+ data = typeof cleanResult === "string" ? JSON.parse(cleanResult) : cleanResult;
}
- return;
- }
- if (step === "customizations") {
- const priorExpIds = new Set(
- (priorOutput.customizations?.experience_recommendations || []).map((r) => String(r.id))
- );
- const newExpRecs = newOutput.customizations?.experience_recommendations || [];
- for (const rec of newExpRecs) {
- const id = String(rec.id || "");
- const el = document.querySelector(`tr[data-exp-id="${CSS.escape(id)}"]`);
- if (!el) continue;
- const prior = (priorOutput.customizations?.experience_recommendations || []).find((r) => String(r.id) === id);
- if (!priorExpIds.has(id) || prior && prior.recommendation !== rec.recommendation) {
- _markChanged(el);
+ stateManager2.setTabData("analysis", result);
+ saveTabData();
+ let html2 = '
';
+ html2 += '
';
+ html2 += `
${data.title || "Role"} `;
+ if (data.company) html2 += `
\u{1F3E2} ${data.company}
`;
+ html2 += '
';
+ if (data.domain) {
+ const conf = data.domain_confidence;
+ let confLabel = "";
+ let confTitle = "";
+ if (typeof conf === "number") {
+ if (conf >= 0.8) {
+ confLabel = "";
+ confTitle = `Domain confidence: High (${Math.round(conf * 100)}%)`;
+ } else if (conf >= 0.6) {
+ confLabel = " \u26A0";
+ confTitle = `Domain confidence: Medium (${Math.round(conf * 100)}%) \u2014 verify this is correct`;
+ } else {
+ confLabel = " \u26A0";
+ confTitle = `Domain confidence: Low (${Math.round(conf * 100)}%) \u2014 the JD spans multiple domains; consider overriding`;
+ }
+ }
+ html2 += `\u{1F52C} ${escapeHtml(data.domain)}${confLabel} `;
+ }
+ if (data.role_level) html2 += `\u{1F4CA} ${data.role_level} `;
+ if (data.suggested_summary) html2 += `\u{1F4AC} ${data.suggested_summary} `;
+ html2 += "
";
+ const requiredSkills = Array.isArray(data.required_skills) ? data.required_skills : [];
+ const masterSkills = window._masterSkills || [];
+ if (requiredSkills.length > 0 && masterSkills.length > 0) {
+ const missing = requiredSkills.filter(
+ (skill) => !masterSkills.some((ms) => ms.includes(skill.toLowerCase()) || skill.toLowerCase().includes(ms))
+ );
+ if (missing.length > 0) {
+ html2 += `
\u26A0 ${missing.length} required skill${missing.length > 1 ? "s" : ""} not found in your master CV: ${missing.join(", ")}
`;
}
}
- const priorSkills = new Set(
- (priorOutput.customizations?.skill_recommendations || []).map((r) => (r.skill || "").toLowerCase())
- );
- const newSkillRecs = newOutput.customizations?.skill_recommendations || [];
- for (const rec of newSkillRecs) {
- const name = (rec.skill || "").toLowerCase();
- const el = document.querySelector(`tr[data-skill="${CSS.escape(name)}"]`);
- if (!el) continue;
- const prior = (priorOutput.customizations?.skill_recommendations || []).find(
- (r) => (r.skill || "").toLowerCase() === name
- );
- if (!priorSkills.has(name) || prior && prior.recommendation !== rec.recommendation) {
- _markChanged(el);
- }
+ if (requiredSkills.length > 0) {
+ html2 += '
\u{1F3AF} Required Skills ';
+ requiredSkills.forEach((skill) => {
+ const isMissing = masterSkills.length > 0 && !masterSkills.some(
+ (ms) => ms.includes(skill.toLowerCase()) || skill.toLowerCase().includes(ms)
+ );
+ html2 += `${skill}${isMissing ? ' (not in master CV) ' : ""} `;
+ });
+ html2 += "
";
+ }
+ const preferred = [
+ ...Array.isArray(data.preferred_skills) ? data.preferred_skills : [],
+ ...Array.isArray(data.nice_to_have_requirements) ? data.nice_to_have_requirements : []
+ ];
+ if (preferred.length > 0) {
+ html2 += '
\u2B50 Preferred / Nice-to-Have ';
+ preferred.forEach((item) => {
+ html2 += `${item} `;
+ });
+ html2 += " ";
+ }
+ const atsKws = Array.isArray(data.ats_keywords) ? data.ats_keywords : [];
+ if (atsKws.length > 0) {
+ const synMap = await _loadSynonymMap();
+ html2 += '
\u{1F511} ATS Keywords (higher rank = higher priority) ';
+ atsKws.forEach((kw, idx) => {
+ const annotation = _kwSynonymAnnotation(kw, synMap);
+ const titleAttr = annotation ? ` title="Synonym: ${escapeHtml(kw + annotation)}"` : "";
+ const annotHtml = annotation ? `${escapeHtml(annotation)} ` : "";
+ html2 += `#${idx + 1} ${escapeHtml(kw)}${annotHtml} `;
+ });
+ html2 += "
";
+ }
+ const culture = Array.isArray(data.culture_indicators) ? data.culture_indicators : [];
+ if (culture.length > 0) {
+ html2 += '
\u{1F3E2} Culture Indicators ';
+ culture.forEach((c) => {
+ html2 += `${c} `;
+ });
+ html2 += " ";
+ }
+ const mustHave = Array.isArray(data.must_have_requirements) ? data.must_have_requirements : [];
+ if (mustHave.length > 0) {
+ html2 += '
\u2705 Must-Have Requirements ';
+ mustHave.forEach((r) => {
+ html2 += `${r} `;
+ });
+ html2 += " ";
}
- return;
+ html2 += `
Continue to Customizations \u2192
`;
+ html2 += "
";
+ content.innerHTML = html2;
+ } catch (e) {
+ log6.error("Analysis parsing error:", e, "Original result:", result);
+ content.innerHTML = `
\u274C
Analysis Error Could not parse analysis results: ${escapeHtml(e.message)}
Debug Info ${escapeHtml(JSON.stringify(result, null, 2))} `;
}
}
- function _markChanged(el) {
- el.setAttribute("data-changed", "true");
- setTimeout(() => el.removeAttribute("data-changed"), 2500);
- }
- async function showBulletReorder2(expId, expTitle) {
- let achievements = [];
- let proposedOrder = null;
- let hasJobAnalysis = false;
- let proposedReasoning = "";
- let proposedAtsImpact = "";
- let proposedPageImpact = "";
+ async function handleCustomizationResponse2(response) {
try {
- const detailsRes = await fetch("/api/experience-details", {
- method: "POST",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify({ experience_id: expId })
- });
- if (!detailsRes.ok) {
- let detailsErr = `HTTP ${detailsRes.status}`;
- try {
- const payload = await detailsRes.json();
- detailsErr = payload.error || payload.message || detailsErr;
- } catch (_2) {
- }
- throw new Error(detailsErr);
- }
- const detailsData = await detailsRes.json();
- achievements = detailsData.experience && detailsData.experience.achievements || [];
- const recRecord = _findExperienceRecommendationRecord(expId);
- const llmBulletOrder = recRecord && typeof recRecord.bullet_order === "object" ? recRecord.bullet_order : null;
- if (Array.isArray(llmBulletOrder?.order) && llmBulletOrder.order.length > 1) {
- proposedOrder = llmBulletOrder.order;
- hasJobAnalysis = true;
- proposedReasoning = String(llmBulletOrder.reasoning || "").trim();
- proposedAtsImpact = String(llmBulletOrder.ats_impact || "").trim();
- proposedPageImpact = String(llmBulletOrder.page_length_impact || "").trim();
+ const data = response !== null && typeof response === "object" ? response : extractFirstJsonObject(response);
+ if (!data) {
+ appendMessage("assistant", typeof response === "string" ? response : "");
+ return;
}
- if (!proposedOrder) {
- try {
- const proposedRes = await fetch(`/api/proposed-bullet-order?experience_id=${encodeURIComponent(expId)}`);
- if (proposedRes.ok) {
- const proposedData = await proposedRes.json();
- proposedOrder = proposedData.proposed_order || null;
- hasJobAnalysis = proposedData.has_job_analysis || false;
- } else {
- log6.warn("Could not load suggested bullet order:", proposedRes.status);
- }
- } catch (e) {
- log6.warn("Could not load suggested bullet order:", e);
+ if (data && (data.recommended_experiences || data.recommended_skills)) {
+ stateManager2.setTabData("customizations", data);
+ window.pendingRecommendations = data;
+ saveTabData();
+ if (!isReconnectInProgress()) {
+ appendMessage("assistant", "\u2705 Customizations generated! Please review each section in the **Customizations** tab \u2014 Experiences, Achievements, Skills, Summary, and Publications. Select your preferences using the action buttons, then submit your decisions.");
+ switchTab2("exp-review");
}
+ } else if (!isReconnectInProgress()) {
+ appendMessage("assistant", response);
}
} catch (e) {
- const errorText = e.message === "Failed to fetch" ? "Failed to fetch (server unavailable)." : e.message;
- appendRetryMessage("\u26A0 Could not load bullets: " + errorText, () => showBulletReorder2(expId, expTitle));
- return;
+ log6.error("Customization response error:", e);
+ if (!isReconnectInProgress()) {
+ appendMessage("assistant", response);
+ }
}
- if (!achievements.length) {
- appendMessage("system", "No bullet points found for this experience.");
+ }
+ async function populateReviewTab(pane) {
+ const content = document.getElementById("document-content");
+ const customizations = stateManager2.getTabData("customizations");
+ if (!window.pendingRecommendations || !customizations) {
+ content.innerHTML = '
\u2699\uFE0F
Review Customizations Click "Recommend Customizations" to generate recommendations.
';
return;
}
- if (typeof _focusedElementBeforeModal !== "undefined") {
- _focusedElementBeforeModal = document.activeElement;
- }
- const modal = document.createElement("div");
- modal.id = "bullet-reorder-modal";
- modal.setAttribute("role", "dialog");
- modal.setAttribute("aria-modal", "true");
- modal.setAttribute("aria-labelledby", "bullet-reorder-title");
- modal.style.cssText = `
- position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);
- z-index:9999;display:flex;align-items:center;justify-content:center;`;
- const suggestedBtn = hasJobAnalysis ? `
\u2728 Use Suggested Order ` : "";
- const suggestionMeta = proposedReasoning || proposedAtsImpact || proposedPageImpact ? `
- ${proposedReasoning ? `
AI rationale: ${escapeHtml(proposedReasoning)}
` : ""}
- ${proposedAtsImpact ? `
ATS impact: ${escapeHtml(proposedAtsImpact)}
` : ""}
- ${proposedPageImpact ? `
Page length impact: ${escapeHtml(proposedPageImpact)}
` : ""}
-
` : "";
- modal.innerHTML = `
-
-
-
-
\u2195 Reorder Bullets
-
${expTitle}
-
-
\u2715
-
-
- Use \u2191 \u2193 to reorder. Bullets higher in the list appear first on your CV.
- The most relevant bullet will be auto-ranked highest if you reset.
-
- ${suggestionMeta}
-
-
-
- ${suggestedBtn}
- \u21BA Reset to Auto
- Save Order
-
-
`;
- document.body.appendChild(modal);
- if (typeof trapFocus === "function") trapFocus("bullet-reorder-modal");
- if (typeof setInitialFocus === "function") setInitialFocus("bullet-reorder-modal");
- const escHandler = (e) => {
- if (e.key === "Escape") {
- e.preventDefault();
- restoreFocus();
- modal.remove();
- document.removeEventListener("keydown", escHandler);
- }
+ const paneConfig = {
+ experiences: { title: "", desc: "Sorted by date (most recent first). Click action buttons to override recommendations.", container: "experience-table-container" },
+ skills: { title: "\u{1F6E0}\uFE0F Skills", desc: "Sorted by relevance. Select how to feature each skill.", container: "skills-table-container" },
+ achievements: { title: "\u{1F3C6} Achievements", desc: "Select how to feature each key achievement. AI recommendations are pre-selected.", container: "achievements-table-container" },
+ summary: { title: "\u{1F4DD} Professional Summary", desc: "Select which professional summary to use. The AI's recommendation is pre-selected.", container: "summary-focus-container" },
+ publications: { title: "\u{1F4C4} Publications", desc: "All publications ranked by relevance. Accept or reject each for your CV.", container: "publications-table-container" }
};
- document.addEventListener("keydown", escHandler);
- const list = document.getElementById("bullet-reorder-list");
- achievements.forEach((ach, idx) => {
- const text2 = typeof ach === "object" ? ach.text || "" : String(ach);
- const li = document.createElement("li");
- li.dataset.origIndex = idx;
- li.style.cssText = `display:flex;align-items:flex-start;gap:8px;padding:8px;margin-bottom:6px;
- background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;`;
- li.innerHTML = `
-
- \u2191
- \u2193
-
-
${text2} `;
- list.appendChild(li);
- });
- _updateBulletArrows();
- if (hasJobAnalysis && proposedOrder) {
- document.getElementById("use-llm-order-btn")?.addEventListener("click", () => {
- _applyBulletOrder(proposedOrder);
- });
- }
- }
- function _applyBulletOrder(order) {
- const list = document.getElementById("bullet-reorder-list");
- if (!list) return;
- const items = Array.from(list.querySelectorAll("li"));
- const byOrig = {};
- items.forEach((li) => {
- byOrig[parseInt(li.dataset.origIndex, 10)] = li;
- });
- const listed = new Set(order.map(Number));
- order.forEach((idx) => {
- if (byOrig[idx]) list.appendChild(byOrig[idx]);
- });
- items.forEach((li) => {
- if (!listed.has(parseInt(li.dataset.origIndex, 10))) list.appendChild(li);
- });
- _updateBulletArrows();
- }
- function moveBullet(btn, direction) {
- const li = btn.closest("li");
- const list = li.parentNode;
- if (direction === -1 && li.previousElementSibling) {
- list.insertBefore(li, li.previousElementSibling);
- } else if (direction === 1 && li.nextElementSibling) {
- list.insertBefore(li.nextElementSibling, li);
+ const cfg = paneConfig[pane] || {};
+ const headerHtml = pane === "experiences" ? `
+
\u2699\uFE0F Review Customization Recommendations
+
Review the AI's recommendations. Use the action buttons to adjust each item, then save your decisions before generating the CV.
+
+
\u{1F4C4}
+
Estimated length: calculating\u2026
+
+
+ ` : cfg.title ? `
${cfg.title} ` : "";
+ const navBack = {
+ skills: `
\u2190 Back to Experience Bullets `,
+ achievements: `
\u2190 Back to Skills `,
+ publications: `
\u2190 Back to Summary `
+ };
+ const navContinue = {
+ experiences: `
Continue to Experience Bullets \u2192 `,
+ skills: `
Continue to Achievements \u2192 `,
+ achievements: `
Continue to Tagline \u2192 `,
+ publications: `
Continue to Rewrite \u2192 `
+ };
+ const navHtml = pane === "summary" ? "" : `
+
+ ${navBack[pane] || ""}
+ ${navContinue[pane] || ""}
+
`;
+ content.innerHTML = `
+ ${headerHtml}
+ ${cfg.desc ? `
${escapeHtml(cfg.desc)}
` : ""}
+
+ ${navHtml}
+ `;
+ window._activeReviewPane = pane;
+ switch (pane) {
+ case "experiences":
+ await buildExperienceReviewTable();
+ _updatePageEstimate2();
+ break;
+ case "skills":
+ await buildSkillsReviewTable();
+ break;
+ case "achievements":
+ await buildAchievementsReviewTable();
+ break;
+ case "summary":
+ await buildSummaryFocusSection();
+ break;
+ case "publications":
+ await buildPublicationsReviewTable();
+ break;
}
- _updateBulletArrows();
}
- function _updateBulletArrows() {
- const list = document.getElementById("bullet-reorder-list");
- if (!list) return;
- const items = list.querySelectorAll("li");
- items.forEach((li, idx) => {
- const [upBtn, downBtn] = li.querySelectorAll("button");
- upBtn.disabled = idx === 0;
- downBtn.disabled = idx === items.length - 1;
- upBtn.style.opacity = upBtn.disabled ? "0.3" : "1";
- downBtn.style.opacity = downBtn.disabled ? "0.3" : "1";
+ window._activeReviewPane = "experiences";
+ async function switchReviewSubtab(pane) {
+ document.querySelectorAll(".review-subtab").forEach((btn) => {
+ btn.classList.toggle("active", btn.dataset.pane === pane);
});
- }
- async function saveBulletOrder(expId) {
- const list = document.getElementById("bullet-reorder-list");
- const items = list ? list.querySelectorAll("li") : [];
- const order = Array.from(items).map((li) => parseInt(li.dataset.origIndex, 10));
- try {
- const res = await fetch("/api/reorder-bullets", {
- method: "POST",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify({ experience_id: expId, order })
- });
- const data = await res.json();
- if (!res.ok || !data.ok) {
- appendRetryMessage("\u26A0 Could not save bullet order: " + (data.error || "Unknown"), () => saveBulletOrder(expId));
- return;
- }
- appendMessage("assistant", "\u2195 Bullet order saved. It will apply when you generate the CV.");
- document.getElementById("bullet-reorder-modal")?.remove();
- } catch (e) {
- appendRetryMessage("\u26A0 Network error saving bullet order: " + e.message, () => saveBulletOrder(expId));
+ document.querySelectorAll(".review-pane").forEach((p) => p.style.display = "none");
+ const target = document.getElementById(`review-pane-${pane}`);
+ if (target) target.style.display = "block";
+ window._activeReviewPane = pane;
+ if (!window._reviewPaneLoaded || !window._reviewPaneLoaded[pane]) {
+ await _loadReviewPane(pane);
}
}
- async function resetBulletOrder(expId) {
+ async function _loadReviewPane(pane) {
+ if (!window._reviewPaneLoaded) window._reviewPaneLoaded = {};
try {
- const res = await fetch("/api/reorder-bullets", {
- method: "POST",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify({ experience_id: expId, order: [] })
- });
- const data = await res.json();
- if (!res.ok || !data.ok) {
- appendRetryMessage("\u26A0 Could not reset bullet order: " + (data.error || "Unknown"), () => resetBulletOrder(expId));
- return;
+ switch (pane) {
+ case "experiences":
+ await buildExperienceReviewTable();
+ break;
+ case "skills":
+ await buildSkillsReviewTable();
+ break;
+ case "achievements":
+ await buildAchievementsReviewTable();
+ break;
+ case "summary":
+ await buildSummaryFocusSection();
+ break;
+ case "publications":
+ await buildPublicationsReviewTable();
+ break;
+ default:
+ return;
}
- appendMessage("assistant", "\u21BA Bullet order reset. Relevance-based ordering will apply.");
- restoreFocus();
- document.getElementById("bullet-reorder-modal")?.remove();
- } catch (e) {
- appendRetryMessage("\u26A0 Network error resetting bullet order: " + e.message, () => resetBulletOrder(expId));
+ window._reviewPaneLoaded[pane] = true;
+ } catch (error) {
+ delete window._reviewPaneLoaded[pane];
+ throw error;
}
}
- var _PHASE_PROGRESSION = [
- "init",
- "job_analysis",
- "customization",
- "rewrite_review",
- "spell_check",
- "generation",
- "layout_review",
- "final_generation",
- "refinement"
- ];
- var _STEP_FWD_PHASE_MIN = {
- analysis: 1,
- // job_analysis
- customizations: 2,
- // customization
- rewrite: 3,
- // rewrite_review
- spell: 4,
- // spell_check
- layout: 5,
- // generation
- download: 7,
- // final_generation
- cover_letter: 7,
- screening: 7,
- interview_prep: 7,
- thank_you: 7,
- harvest: 7
- };
- function updateWorkflowSteps(status) {
- const UPCOMING = /* @__PURE__ */ new Set();
- const RE_RUN_STEPS = /* @__PURE__ */ new Set(["analysis", "customizations", "rewrite", "spell", "layout"]);
- const STEP_LABELS = {
- job: "\u{1F4E5} Job Input",
- analysis: "\u{1F50D} Analysis",
- customizations: "\u2699\uFE0F Customise",
- rewrite: "\u270F\uFE0F Rewrites",
- spell: "\u{1F524} Spell Check",
- layout: "\u{1F3A8} Layout Review",
- download: "\u2B07\uFE0F Download Files",
- cover_letter: "\u{1F4E9} Cover Letter",
- screening: "\u{1F4CB} Screening",
- interview_prep: "\u{1F3A4} Interview Prep",
- thank_you: "\u{1F64F} Thank You",
- harvest: "\u{1F33E} Harvest"
- };
- const phase = status.phase || "";
- const postLayout = phase === PHASES.FINAL_GENERATION || phase === PHASES.REFINEMENT;
- const done = {
- job: !!status.job_description,
- analysis: !!status.job_analysis,
- customizations: !!status.customizations,
- rewrite: phase !== PHASES.REWRITE_REVIEW && !!status.customizations,
- spell: phase === PHASES.GENERATION || phase === PHASES.LAYOUT_REVIEW || phase === PHASES.FINAL_GENERATION || phase === PHASES.REFINEMENT,
- layout: postLayout,
- download: postLayout,
- cover_letter: postLayout,
- screening: postLayout,
- interview_prep: postLayout,
- thank_you: postLayout,
- harvest: postLayout
- };
- const highestPhaseIdx = _PHASE_PROGRESSION.indexOf(status.highest_phase || "");
- const currentPhaseIdx = _PHASE_PROGRESSION.indexOf(phase);
- const phaseToStep = {
- "init": "job",
- "job_analysis": "analysis",
- "customization": "customizations",
- "rewrite_review": "rewrite",
- "spell_check": "spell",
- "generation": "layout",
- "layout_review": "layout",
- "final_generation": "download",
- "refinement": "download"
+ function _updatePageEstimate2() {
+ const widget = document.getElementById("page-estimate-widget");
+ if (!widget) return;
+ const label = document.getElementById("pe-label");
+ const fill = document.getElementById("pe-fill");
+ const icon = document.getElementById("pe-icon");
+ if (label) label.textContent = "Updating server layout estimate\u2026";
+ if (fill) fill.style.width = "0%";
+ if (icon) icon.textContent = "\u23F3";
+ const payload = {
+ experience_decisions: {
+ ...window._savedDecisions && window._savedDecisions.experience_decisions || {},
+ ...userSelections2.experiences || {}
+ },
+ skill_decisions: {
+ ...window._savedDecisions && window._savedDecisions.skill_decisions || {},
+ ...userSelections2.skills || {}
+ },
+ achievement_decisions: window._savedDecisions && window._savedDecisions.achievement_decisions || window.achievementDecisions || {},
+ publication_decisions: window._savedDecisions && window._savedDecisions.publication_decisions || window.publicationDecisions || {},
+ summary_focus_override: window.selectedSummaryKey || null
};
- const activeStep = phaseToStep[phase] || "job";
- const _phaseToStep2 = Object.assign({ "init": "job" }, phaseToStep);
- const reentryStep = status.iterating ? _phaseToStep2[status.reentry_phase] || status.reentry_phase || null : null;
- const stepIds = [
- "job",
- "analysis",
- "customizations",
- "rewrite",
- "spell",
- "layout",
- "download",
- "cover_letter",
- "screening",
- "interview_prep",
- "thank_you",
- "harvest"
- ];
- const staleSteps = new Set(status.stale_steps || []);
- stepIds.forEach((step) => {
- const el = document.getElementById(`step-${step}`);
- if (!el) return;
- if (UPCOMING.has(step)) return;
- el.classList.remove("active", "completed", "clickable", "upcoming", "stale", "forward-skip");
- let label = STEP_LABELS[step] || step;
- if (step === activeStep) {
- el.classList.add("active");
- if (status.iterating && reentryStep === step) {
- label += '
\u21BB Refining ';
+ const requestId = ++pageEstimateRequestId;
+ clearTimeout(pageEstimateTimer);
+ pageEstimateTimer = setTimeout(async () => {
+ try {
+ const response = await apiCall("POST", "/api/cv/layout-estimate", payload);
+ if (!response.ok) throw new Error(response.error || "estimate failed");
+ if (requestId !== pageEstimateRequestId) return;
+ const pages = Number(response.page_count_estimate || 0);
+ const pct = Math.min(100, pages / 3 * 100);
+ const confidence = Number(response.page_count_confidence || 0);
+ let cls = "ok";
+ let colour = "#22c55e";
+ let iconText = response.page_count_exact != null ? "\u2705" : "\u{1F4C4}";
+ if (response.page_length_warning) {
+ cls = pages > 3 ? "over" : "warn";
+ colour = pages > 3 ? "#ef4444" : "#f59e0b";
+ iconText = pages > 3 ? "\u{1F6A8}" : "\u26A0\uFE0F";
}
- } else if (done[step]) {
- el.classList.add("completed");
- el.classList.add("clickable");
- if (RE_RUN_STEPS.has(step)) {
- const rerunLabel = _STEP_DISPLAY[step] || step;
- label += `
\u21BB `;
+ const sourceLabel = response.page_count_exact != null ? `Exact: ${response.page_count_exact} page${response.page_count_exact === 1 ? "" : "s"}` : `Estimated: ${pages.toFixed(1)} pages`;
+ const confidenceLabel = response.page_count_exact != null ? "" : ` (${Math.round(confidence * 100)}% confidence)`;
+ const contributorText = Array.isArray(response.contributors) && response.contributors.length > 0 ? ` ${response.contributors[0]}.` : "";
+ const recheckText = response.page_count_needs_exact_recheck && response.page_count_exact == null ? " Exact recheck recommended." : "";
+ widget.className = `page-estimate ${cls}`;
+ if (label) {
+ label.textContent = `${sourceLabel}${confidenceLabel}.${contributorText}${recheckText}`.trim();
+ }
+ if (fill) {
+ fill.style.width = `${pct}%`;
+ fill.style.background = colour;
+ }
+ if (icon) icon.textContent = iconText;
+ stateManager2.setGenerationState({
+ pageCountEstimate: response.page_count_estimate ?? null,
+ pageCountExact: response.page_count_exact ?? null,
+ pageCountConfidence: response.page_count_confidence ?? null,
+ pageCountSource: response.page_count_source || null,
+ pageNeedsExactRecheck: Boolean(response.page_count_needs_exact_recheck),
+ pageWarning: Boolean(response.page_length_warning)
+ });
+ } catch (error) {
+ if (requestId !== pageEstimateRequestId) return;
+ widget.className = "page-estimate warn";
+ if (label) label.textContent = `Layout estimate unavailable: ${error.message}`;
+ if (fill) {
+ fill.style.width = "0%";
+ fill.style.background = "#f59e0b";
}
- } else if (highestPhaseIdx >= 0 && (_STEP_FWD_PHASE_MIN[step] ?? Infinity) <= highestPhaseIdx && highestPhaseIdx > currentPhaseIdx) {
- el.classList.add("forward-skip", "clickable");
- label += '
\u23E9 ';
+ if (icon) icon.textContent = "\u26A0\uFE0F";
}
- if (staleSteps.has(step)) el.classList.add("stale");
- const isStale = staleSteps.has(step);
- const isStaleCritical = el.classList.contains("stale-critical");
- const isActive = el.classList.contains("active");
- const isCompleted = el.classList.contains("completed");
- const isFwdSkip = el.classList.contains("forward-skip");
- const srState = isStaleCritical ? " (critical \u2014 review required)" : isStale ? " (stale \u2014 results may be outdated)" : isActive ? " (current step)" : isCompleted ? " (completed)" : isFwdSkip ? " (previously completed \u2014 click to jump ahead)" : "";
- if (srState) label += `
${srState} `;
- el.innerHTML = label;
+ }, 250);
+ }
+ function handleActionClick2(itemId, action, type) {
+ const row = type === "experience" ? document.querySelector(`tr[data-exp-id="${itemId}"]`) : document.querySelector(`tr[data-skill="${itemId}"]`);
+ const buttons = row.querySelectorAll(".icon-btn");
+ buttons.forEach((btn) => {
+ btn.classList.remove("active");
+ if (btn.hasAttribute("aria-pressed")) btn.setAttribute("aria-pressed", "false");
});
- applyLayoutFreshnessNavigationState();
- if (!document.getElementById("step-rerun-style")) {
- const s = document.createElement("style");
- s.id = "step-rerun-style";
- s.textContent = ".step.completed:hover .step-rerun, .step.completed:focus-within .step-rerun { opacity: 1 !important; } .step-rerun:focus-visible { outline: 2px solid #3b82f6; outline-offset: 2px; opacity: 1 !important; }";
- document.head.appendChild(s);
- }
- if (typeof updateTabBarForStage === "function") {
- updateTabBarForStage(activeStep);
+ const clickedBtn = row.querySelector(`[data-action="${action}"]`);
+ clickedBtn.classList.add("active");
+ if (clickedBtn.hasAttribute("aria-pressed")) clickedBtn.setAttribute("aria-pressed", "true");
+ if (type === "experience") {
+ userSelections2.experiences[itemId] = action;
+ window._explicitlyReviewed = window._explicitlyReviewed || { experiences: /* @__PURE__ */ new Set(), skills: /* @__PURE__ */ new Set() };
+ window._explicitlyReviewed.experiences.add(itemId);
+ } else {
+ userSelections2.skills[itemId] = action;
+ window._explicitlyReviewed = window._explicitlyReviewed || { experiences: /* @__PURE__ */ new Set(), skills: /* @__PURE__ */ new Set() };
+ window._explicitlyReviewed.skills.add(itemId);
}
- updateActionButtons(activeStep);
- _updateViewingIndicator2(stateManager2.getCurrentTab());
- }
- if (typeof window !== "undefined") {
- window.addEventListener(GENERATION_STATE_EVENT, applyLayoutFreshnessNavigationState);
- window.addEventListener(GENERATION_STATE_EVENT, applyDirtyPhaseNavigationState);
+ _updatePageEstimate2();
}
- function applyDirtyPhaseNavigationState() {
- const dirtyPhases = stateManager2.getDirtyPhases();
- const stepsToClear = [];
- stepsToClear.forEach((step) => {
- const el = document.getElementById(`step-${step}`);
- if (!el) return;
- const isDirty = dirtyPhases.includes(step);
- el.classList.toggle("stale", isDirty);
- const rerunHtml = el.querySelector(".step-rerun")?.outerHTML || "";
- const label = _STEP_DISPLAY[step] || step;
- const badge = isDirty ? '
Content changed ' : "";
- el.innerHTML = `${label}${badge}${rerunHtml ? ` ${rerunHtml}` : ""}`;
+ function bulkAction(action, type) {
+ const tableId = type === "experience" ? "#experience-review-table" : "#skills-review-table";
+ const data = window.pendingRecommendations || {};
+ const dt = $.fn.DataTable.isDataTable(tableId) ? $(tableId).DataTable() : null;
+ const rows = dt ? dt.rows({ search: "applied" }).nodes().toArray() : Array.from(document.querySelectorAll(`${tableId} tbody tr`));
+ rows.forEach((row) => {
+ const expId = row.dataset.expId;
+ const skillId = row.dataset.skill;
+ const itemId = expId || skillId;
+ if (!itemId) return;
+ let resolvedAction = action;
+ if (action === "recommended") {
+ resolvedAction = type === "experience" ? _resolvedExpAction(itemId, data) : _resolvedSkillAction(itemId, data);
+ }
+ row.querySelectorAll(".icon-btn").forEach((btn) => {
+ btn.classList.remove("active");
+ if (btn.hasAttribute("aria-pressed")) btn.setAttribute("aria-pressed", "false");
+ });
+ const target = row.querySelector(`[data-action="${resolvedAction}"]`);
+ if (target) {
+ target.classList.add("active");
+ if (target.hasAttribute("aria-pressed")) target.setAttribute("aria-pressed", "true");
+ }
+ if (type === "experience") {
+ userSelections2.experiences[itemId] = resolvedAction;
+ } else {
+ userSelections2.skills[itemId] = resolvedAction;
+ }
});
+ _updatePageEstimate2();
}
- function _doStepNavigate(step) {
- const stepToTab = {
- analysis: "analysis",
- customizations: "goals",
- rewrite: "rewrite",
- spell: "spell",
- layout: "layout",
- download: "final_generate",
- cover_letter: "cover-letter",
- screening: "screening",
- interview_prep: "interview-prep",
- thank_you: "thank-you",
- harvest: "harvest"
- };
- const tabName = stepToTab[step];
- if (!tabName) return;
- if (typeof updateTabBarForStage === "function") updateTabBarForStage(step);
- switchTab(tabName);
+ function _resolvedExpAction(expId, data) {
+ const rec = getExperienceRecommendation(expId, data);
+ if (rec === "Emphasize") return "emphasize";
+ if (rec === "Include") return "include";
+ if (rec === "De-emphasize") return "de-emphasize";
+ return "exclude";
}
- function handleStepClick(step) {
- const el = document.getElementById(`step-${step}`);
- if (!el) return;
- if (step === "job") {
- if (el.classList.contains("completed") || el.classList.contains("active")) {
- switchTab("job");
- } else {
- showLoadJobPanel();
- }
- return;
+ function _resolvedSkillAction(skillName, data) {
+ const rec = getSkillRecommendation(skillName, data);
+ if (rec === "Emphasize") return "emphasize";
+ if (rec === "Include") return "include";
+ if (rec === "De-emphasize") return "de-emphasize";
+ return "exclude";
+ }
+ async function populateTaglineReviewTab() {
+ const content = document.getElementById("document-content");
+ if (!content) return;
+ content.innerHTML = `
+
\u{1F3F7}\uFE0F Applicant Tagline
+
+ `;
+ if (typeof buildTaglineReviewSection === "function") {
+ await buildTaglineReviewSection();
}
- if (el.classList.contains("forward-skip")) {
- const label = _STEP_DISPLAY[step] || step;
- if (typeof confirmDialog === "function") {
- confirmDialog(
- `Jump ahead to ${label}?
+ }
-Intermediate stages may need re-running if you make changes here.`,
- { confirmLabel: "Jump ahead", cancelLabel: "Stay here" }
- ).then((confirmed) => {
- if (confirmed) _doStepNavigate(step);
- });
- } else {
- _doStepNavigate(step);
- }
- return;
- }
- if (!el.classList.contains("completed") && !el.classList.contains("active")) return;
- const hasUnansweredPostAnalysisQuestions = () => {
- const qs = Array.isArray(window.postAnalysisQuestions) ? window.postAnalysisQuestions : [];
- if (qs.length === 0) return false;
- const answers = window.questionAnswers && typeof window.questionAnswers === "object" ? window.questionAnswers : {};
- return qs.some((q2) => {
- const value = answers[q2.type];
- return !value || !String(value).trim();
- });
- };
- const stepToTab = {
- analysis: hasUnansweredPostAnalysisQuestions() ? "questions" : "analysis",
- customizations: "goals",
- rewrite: "rewrite",
- spell: "spell",
- layout: "layout",
- download: "final_generate",
- cover_letter: "cover-letter",
- screening: "screening",
- interview_prep: "interview-prep",
- thank_you: "thank-you",
- harvest: "harvest"
- };
- const tabName = stepToTab[step];
- if (!tabName) return;
- const doNavigate = () => {
- if (typeof updateTabBarForStage === "function") updateTabBarForStage(step);
- switchTab(tabName);
- };
- if (el.classList.contains("completed") && !el.classList.contains("active")) {
- const stepIdx = _STEP_ORDER.indexOf(step);
- const hasDownstreamCompleted = _STEP_ORDER.slice(stepIdx + 1).some((s) => {
- const downstream = document.getElementById(`step-${s}`);
- return downstream && downstream.classList.contains("completed");
- });
- if (hasDownstreamCompleted) {
- _showReRunConfirmModal(step, "back-nav", doNavigate);
- return;
- }
- }
- doNavigate();
+ // web/preview-render.js
+ function renderHtmlIntoIframe(iframeEl, html2) {
+ if (!iframeEl) return;
+ iframeEl.setAttribute("sandbox", "allow-same-origin");
+ iframeEl.setAttribute("referrerpolicy", "no-referrer");
+ iframeEl.srcdoc = html2;
}
// web/layout-instruction.js
@@ -5839,9 +5860,7 @@ Intermediate stages may need re-running if you make changes here.`,
if (!preview) return;
showPreviewLoading(false);
preview.onload = () => fitLayoutPreviewToPane(preview);
- preview.setAttribute("sandbox", "allow-same-origin");
- preview.setAttribute("referrerpolicy", "no-referrer");
- preview.srcdoc = html2;
+ renderHtmlIntoIframe(preview, html2);
const doc = preview.contentDocument || preview.contentWindow?.document;
if (doc?.readyState === "complete") {
fitLayoutPreviewToPane(preview);
@@ -11746,11 +11765,13 @@ ${helpMessage}`);
// web/questions-panel.js
var questions_panel_exports = {};
__export(questions_panel_exports, {
+ advanceQGroup: () => advanceQGroup,
askPostAnalysisQuestions: () => askPostAnalysisQuestions2,
draftQuestionResponse: () => draftQuestionResponse,
fetchPostAnalysisQuestionsFromApi: () => fetchPostAnalysisQuestionsFromApi,
finishPostAnalysisQuestions: () => finishPostAnalysisQuestions,
handleQuestionResponse: () => handleQuestionResponse2,
+ jumpToQGroup: () => jumpToQGroup,
onQInputChange: () => onQInputChange,
persistPostAnalysisState: () => persistPostAnalysisState,
populateQuestionsTab: () => populateQuestionsTab2,
@@ -11866,9 +11887,11 @@ ${helpMessage}`);
const isLastGroup = _currentGroup === numGroups - 1;
const existingAnswers = window.questionAnswers && typeof window.questionAnswers === "object" ? window.questionAnswers : {};
const groupLabel = numGroups > 1 ? `Group ${_currentGroup + 1} of ${numGroups}` : `${total} question${total > 1 ? "s" : ""}`;
+ const groupNavHtml = numGroups > 1 ? renderQGroupNav(numGroups, qs, existingAnswers) : "";
let panelHtml = `
\u{1F4AC} A few quick questions
-
${groupLabel} \u2014 answer each to continue.
`;
+
${groupLabel} \u2014 answer each to continue.
+ ${groupNavHtml}`;
groupQs.forEach((q2, localIdx) => {
const idx = groupStart + localIdx;
const savedAnswer = (existingAnswers[q2.type] || "").toString();
@@ -11909,6 +11932,57 @@ ${helpMessage}`);
});
updateQProgress();
}
+ function _isGroupFullyAnswered(groupIdx, qs, existingAnswers) {
+ const groupStart = groupIdx * GROUP_SIZE;
+ const groupEnd = Math.min(groupStart + GROUP_SIZE, qs.length);
+ for (let idx = groupStart; idx < groupEnd; idx++) {
+ const q2 = qs[idx];
+ if (!q2) continue;
+ if (!(existingAnswers[q2.type] || "").toString().trim()) return false;
+ }
+ return true;
+ }
+ function renderQGroupNav(numGroups, qs, existingAnswers) {
+ const dots = [];
+ for (let i = 0; i < numGroups; i++) {
+ const isActive = i === _currentGroup;
+ const isDone = !isActive && _isGroupFullyAnswered(i, qs, existingAnswers);
+ const cls = ["q-group-dot"];
+ if (isActive) cls.push("active");
+ if (isDone) cls.push("done");
+ const stateLabel = isActive ? "current" : isDone ? "completed" : "not yet answered";
+ const ariaLabel = `Review answers for Group ${i + 1}, ${stateLabel} \u2014 no resubmission, your draft is saved automatically`;
+ dots.push(
+ `
${isDone ? "\u2713" : i + 1} `
+ );
+ }
+ return `
${dots.join("")}
`;
+ }
+ function _flushCurrentGroupAnswers() {
+ const qs = window.postAnalysisQuestions || [];
+ const groupStart = _currentGroup * GROUP_SIZE;
+ const groupEnd = Math.min(groupStart + GROUP_SIZE, qs.length);
+ for (let idx = groupStart; idx < groupEnd; idx++) {
+ const q2 = qs[idx];
+ const ta = document.getElementById(`q-input-${idx}`);
+ if (q2 && ta && ta.value.trim()) {
+ if (!window.questionAnswers) window.questionAnswers = {};
+ window.questionAnswers[q2.type] = ta.value.trim();
+ }
+ }
+ }
+ function advanceQGroup() {
+ _flushCurrentGroupAnswers();
+ persistPostAnalysisState();
+ _currentGroup++;
+ renderQuestionsPanel();
+ }
+ function jumpToQGroup(targetGroup) {
+ _flushCurrentGroupAnswers();
+ persistPostAnalysisState();
+ _currentGroup = targetGroup;
+ renderQuestionsPanel();
+ }
async function draftQuestionResponse(idx) {
const qs = window.postAnalysisQuestions || [];
const q2 = qs[idx];
@@ -16221,8 +16295,8 @@ Proceed anyway?`,
Go back to refine an earlier step \u2014 all prior decisions and approvals are preserved.
-
- \u21BB Refine Customisations
+
+ \u21BB Refine Customise
\u21BB Refine Rewrites
@@ -19855,7 +19929,7 @@ Rejected (missing title, year, or author):
overlay.style.cssText = "position:fixed;inset:0;background:rgba(0,0,0,0.5);z-index:10000;display:flex;align-items:center;justify-content:center;";
const changedSections = sections.filter((s) => s.changed);
const rows = sections.map((s) => `
-
+
${escapeHtml(s.section)}
${s.current_count}
${s.new_count}
@@ -21681,6 +21755,93 @@ This will permanently write changes to your Master_CV_Data.json.`)));
}
}
+ // web/early-preview-panel.js
+ var early_preview_panel_exports = {};
+ __export(early_preview_panel_exports, {
+ initEarlyPreviewPanel: () => initEarlyPreviewPanel2,
+ toggleEarlyPreviewPanel: () => toggleEarlyPreviewPanel2
+ });
+ var EARLY_PREVIEW_TABS = /* @__PURE__ */ new Set([
+ "exp-review",
+ "ach-editor",
+ "skills-review",
+ "achievements-review",
+ "tagline-review",
+ "summary-review",
+ "publications-review",
+ // customizations
+ "rewrite",
+ "spell"
+ ]);
+ var _collapsed = false;
+ try {
+ _collapsed = localStorage.getItem(StorageKeys2.EARLY_PREVIEW_COLLAPSED) === "true";
+ } catch (_e2) {
+ }
+ function _setCollapsed(collapsed) {
+ _collapsed = collapsed;
+ try {
+ localStorage.setItem(StorageKeys2.EARLY_PREVIEW_COLLAPSED, String(collapsed));
+ } catch (_e2) {
+ }
+ const btn = document.getElementById("early-preview-toggle-btn");
+ if (btn) {
+ btn.textContent = collapsed ? "Show" : "Hide";
+ btn.setAttribute("aria-expanded", String(!collapsed));
+ }
+ }
+ async function _renderEarlyPreviewBody() {
+ const body = document.getElementById("early-preview-body");
+ const note = document.getElementById("early-preview-status-note");
+ if (!body) return;
+ if (_collapsed) {
+ body.style.display = "none";
+ return;
+ }
+ body.style.display = "";
+ let data;
+ try {
+ data = await apiCall2("GET", "/api/layout-html");
+ } catch (_e2) {
+ data = null;
+ }
+ if (data && data.ok && data.html) {
+ const freshness = typeof stateManager2?.getLayoutFreshness === "function" ? stateManager2.getLayoutFreshness() : { isStale: false };
+ body.innerHTML = '';
+ const iframe = document.getElementById("early-preview-iframe");
+ const stateLabel = freshness.isStale ? "stale" : "fresh";
+ iframe.title = `CV preview \u2014 ${stateLabel}`;
+ iframe.classList.toggle("early-preview-iframe-stale", Boolean(freshness.isStale));
+ renderHtmlIntoIframe(iframe, data.html);
+ if (note) {
+ note.textContent = freshness.isStale ? "Preview reflects an earlier version \u2014 visit Layout Review to refresh." : "";
+ }
+ return;
+ }
+ body.innerHTML = 'No CV preview yet \u2014 available after you reach Layout Review.
';
+ if (note) note.textContent = "";
+ }
+ async function toggleEarlyPreviewPanel2(tab) {
+ const panel = document.getElementById("early-preview-panel");
+ if (!panel) return;
+ if (!EARLY_PREVIEW_TABS.has(tab)) {
+ panel.style.display = "none";
+ return;
+ }
+ panel.style.display = "block";
+ await _renderEarlyPreviewBody();
+ }
+ function initEarlyPreviewPanel2() {
+ const btn = document.getElementById("early-preview-toggle-btn");
+ if (!btn) return;
+ btn.setAttribute("aria-expanded", String(!_collapsed));
+ btn.textContent = _collapsed ? "Show" : "Hide";
+ btn.addEventListener("click", () => {
+ _setCollapsed(!_collapsed);
+ _renderEarlyPreviewBody();
+ });
+ }
+
// web/session-switcher-ui.js
var session_switcher_ui_exports = {};
__export(session_switcher_ui_exports, {
@@ -22824,6 +22985,7 @@ Proceed anyway?`
document.getElementById("final-generate-proceed-btn").addEventListener("click", finalGenerationComplete);
document.getElementById("finalise-action-btn").addEventListener("click", () => switchTab("finalise"));
if (typeof initKeyboardShortcuts === "function") initKeyboardShortcuts();
+ if (typeof initEarlyPreviewPanel === "function") initEarlyPreviewPanel();
}
// web/src/main.js
@@ -22874,6 +23036,7 @@ Proceed anyway?`
interview_prep_exports,
thank_you_exports,
harvest_exports,
+ early_preview_panel_exports,
session_switcher_ui_exports,
keyboard_shortcuts_exports,
app_exports
@@ -22885,4 +23048,4 @@ Proceed anyway?`
dompurify/dist/purify.es.mjs:
(*! @license DOMPurify 3.3.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.3/LICENSE *)
*/
-//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL2xvZ2xldmVsL2xpYi9sb2dsZXZlbC5qcyIsICJsb2dnZXIuanMiLCAidXRpbHMuanMiLCAiYXBpLWNsaWVudC5qcyIsICJmZXRjaC11dGlscy5qcyIsICJzdGF0ZS1tYW5hZ2VyLmpzIiwgInByb3ZpZGVyLWluZm8uanMiLCAidWktY29yZS5qcyIsICJsYXlvdXQtaW5zdHJ1Y3Rpb24uanMiLCAiYXRzLXJlZmluZW1lbnQuanMiLCAibWVzc2FnZS1xdWV1ZS5qcyIsICJyZXZpZXctdGFibGUtYmFzZS5qcyIsICJ3b3JrZmxvdy1zdGVwcy5qcyIsICJ2YWxpZGF0b3JzLmpzIiwgInJlY29tbWVuZGF0aW9uLWhlbHBlcnMuanMiLCAidWktaGVscGVycy5qcyIsICJwcm9wb3NhbC1yZXZpZXcuanMiLCAibGxtLWxvZy5qcyIsICJhdXRoLXByb3ZpZGVyLmpzIiwgImF0cy1tb2RhbHMuanMiLCAic2Vzc2lvbi1hY3Rpb25zLmpzIiwgImpvYi1hbmFseXNpcy5qcyIsICJnb2Fscy5qcyIsICJzZXNzaW9uLW1hbmFnZXIuanMiLCAiam9iLWlucHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL2RlZmF1bHRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL3J1bGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL2hlbHBlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvVG9rZW5pemVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL0xleGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL1JlbmRlcmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL1RleHRSZW5kZXJlci50cyIsICIuLi9ub2RlX21vZHVsZXMvbWFya2VkL3NyYy9QYXJzZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvSG9va3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvSW5zdGFuY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvbWFya2VkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9kb21wdXJpZnkvc3JjL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9kb21wdXJpZnkvc3JjL3RhZ3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2RvbXB1cmlmeS9zcmMvYXR0cnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2RvbXB1cmlmeS9zcmMvcmVnZXhwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9kb21wdXJpZnkvc3JjL3B1cmlmeS50cyIsICJtZXNzYWdlLWRpc3BhdGNoLmpzIiwgInF1ZXN0aW9ucy1wYW5lbC5qcyIsICJyZXZpZXctaWNvbnMuanMiLCAiZXhwZXJpZW5jZS1yZXZpZXcuanMiLCAic2tpbGxzLXJldmlldy5qcyIsICJhY2hpZXZlbWVudHMtcmV2aWV3LmpzIiwgInRhZ2xpbmUtcmV2aWV3LmpzIiwgInN1bW1hcnktcmV2aWV3LmpzIiwgInB1YmxpY2F0aW9ucy1yZXZpZXcuanMiLCAicmV3cml0ZS1yZXZpZXcuanMiLCAic3BlbGwtY2hlY2suanMiLCAiZG93bmxvYWQtdGFiLmpzIiwgImZpbmFsLWdlbmVyYXRlLmpzIiwgIm1hc3Rlci1kYXRhLWFpLXVwZGF0ZS5qcyIsICJtYXN0ZXItY3YuanMiLCAiY292ZXItbGV0dGVyLmpzIiwgInNjcmVlbmluZy1xdWVzdGlvbnMuanMiLCAiZmluYWxpc2UuanMiLCAiaW50ZXJ2aWV3LXByZXAuanMiLCAidGhhbmsteW91LmpzIiwgImhhcnZlc3QuanMiLCAic2Vzc2lvbi1zd2l0Y2hlci11aS5qcyIsICJrZXlib2FyZC1zaG9ydGN1dHMuanMiLCAiYXBwLmpzIiwgInNyYy9tYWluLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKlxuKiBsb2dsZXZlbCAtIGh0dHBzOi8vZ2l0aHViLmNvbS9waW10ZXJyeS9sb2dsZXZlbFxuKlxuKiBDb3B5cmlnaHQgKGMpIDIwMTMgVGltIFBlcnJ5XG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiovXG4oZnVuY3Rpb24gKHJvb3QsIGRlZmluaXRpb24pIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShkZWZpbml0aW9uKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QubG9nID0gZGVmaW5pdGlvbigpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgLy8gU2xpZ2h0bHkgZHViaW91cyB0cmlja3MgdG8gY3V0IGRvd24gbWluaW1pemVkIGZpbGUgc2l6ZVxuICAgIHZhciBub29wID0gZnVuY3Rpb24oKSB7fTtcbiAgICB2YXIgdW5kZWZpbmVkVHlwZSA9IFwidW5kZWZpbmVkXCI7XG4gICAgdmFyIGlzSUUgPSAodHlwZW9mIHdpbmRvdyAhPT0gdW5kZWZpbmVkVHlwZSkgJiYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSB1bmRlZmluZWRUeXBlKSAmJiAoXG4gICAgICAgIC9UcmlkZW50XFwvfE1TSUUgLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KVxuICAgICk7XG5cbiAgICB2YXIgbG9nTWV0aG9kcyA9IFtcbiAgICAgICAgXCJ0cmFjZVwiLFxuICAgICAgICBcImRlYnVnXCIsXG4gICAgICAgIFwiaW5mb1wiLFxuICAgICAgICBcIndhcm5cIixcbiAgICAgICAgXCJlcnJvclwiXG4gICAgXTtcblxuICAgIHZhciBfbG9nZ2Vyc0J5TmFtZSA9IHt9O1xuICAgIHZhciBkZWZhdWx0TG9nZ2VyID0gbnVsbDtcblxuICAgIC8vIENyb3NzLWJyb3dzZXIgYmluZCBlcXVpdmFsZW50IHRoYXQgd29ya3MgYXQgbGVhc3QgYmFjayB0byBJRTZcbiAgICBmdW5jdGlvbiBiaW5kTWV0aG9kKG9iaiwgbWV0aG9kTmFtZSkge1xuICAgICAgICB2YXIgbWV0aG9kID0gb2JqW21ldGhvZE5hbWVdO1xuICAgICAgICBpZiAodHlwZW9mIG1ldGhvZC5iaW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gbWV0aG9kLmJpbmQob2JqKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmNhbGwobWV0aG9kLCBvYmopO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIE1pc3NpbmcgYmluZCBzaGltIG9yIElFOCArIE1vZGVybml6ciwgZmFsbGJhY2sgdG8gd3JhcHBpbmdcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuYXBwbHkobWV0aG9kLCBbb2JqLCBhcmd1bWVudHNdKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJhY2UoKSBkb2Vzbid0IHByaW50IHRoZSBtZXNzYWdlIGluIElFLCBzbyBmb3IgdGhhdCBjYXNlIHdlIG5lZWQgdG8gd3JhcCBpdFxuICAgIGZ1bmN0aW9uIHRyYWNlRm9ySUUoKSB7XG4gICAgICAgIGlmIChjb25zb2xlLmxvZykge1xuICAgICAgICAgICAgaWYgKGNvbnNvbGUubG9nLmFwcGx5KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSW4gb2xkIElFLCBuYXRpdmUgY29uc29sZSBtZXRob2RzIHRoZW1zZWx2ZXMgZG9uJ3QgaGF2ZSBhcHBseSgpLlxuICAgICAgICAgICAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5hcHBseShjb25zb2xlLmxvZywgW2NvbnNvbGUsIGFyZ3VtZW50c10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb25zb2xlLnRyYWNlKSBjb25zb2xlLnRyYWNlKCk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgdGhlIGJlc3QgbG9nZ2luZyBtZXRob2QgcG9zc2libGUgZm9yIHRoaXMgZW52XG4gICAgLy8gV2hlcmV2ZXIgcG9zc2libGUgd2Ugd2FudCB0byBiaW5kLCBub3Qgd3JhcCwgdG8gcHJlc2VydmUgc3RhY2sgdHJhY2VzXG4gICAgZnVuY3Rpb24gcmVhbE1ldGhvZChtZXRob2ROYW1lKSB7XG4gICAgICAgIGlmIChtZXRob2ROYW1lID09PSAnZGVidWcnKSB7XG4gICAgICAgICAgICBtZXRob2ROYW1lID0gJ2xvZyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09IHVuZGVmaW5lZFR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm8gbWV0aG9kIHBvc3NpYmxlLCBmb3Igbm93IC0gZml4ZWQgbGF0ZXIgYnkgZW5hYmxlTG9nZ2luZ1doZW5Db25zb2xlQXJyaXZlc1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICd0cmFjZScgJiYgaXNJRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRyYWNlRm9ySUU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29uc29sZVttZXRob2ROYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYmluZE1ldGhvZChjb25zb2xlLCBtZXRob2ROYW1lKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25zb2xlLmxvZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYmluZE1ldGhvZChjb25zb2xlLCAnbG9nJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9vcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZXNlIHByaXZhdGUgZnVuY3Rpb25zIGFsd2F5cyBuZWVkIGB0aGlzYCB0byBiZSBzZXQgcHJvcGVybHlcblxuICAgIGZ1bmN0aW9uIHJlcGxhY2VMb2dnaW5nTWV0aG9kcygpIHtcbiAgICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgICAgdmFyIGxldmVsID0gdGhpcy5nZXRMZXZlbCgpO1xuXG4gICAgICAgIC8vIFJlcGxhY2UgdGhlIGFjdHVhbCBtZXRob2RzLlxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvZ01ldGhvZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBtZXRob2ROYW1lID0gbG9nTWV0aG9kc1tpXTtcbiAgICAgICAgICAgIHRoaXNbbWV0aG9kTmFtZV0gPSAoaSA8IGxldmVsKSA/XG4gICAgICAgICAgICAgICAgbm9vcCA6XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRob2RGYWN0b3J5KG1ldGhvZE5hbWUsIGxldmVsLCB0aGlzLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmaW5lIGxvZy5sb2cgYXMgYW4gYWxpYXMgZm9yIGxvZy5kZWJ1Z1xuICAgICAgICB0aGlzLmxvZyA9IHRoaXMuZGVidWc7XG5cbiAgICAgICAgLy8gUmV0dXJuIGFueSBpbXBvcnRhbnQgd2FybmluZ3MuXG4gICAgICAgIGlmICh0eXBlb2YgY29uc29sZSA9PT0gdW5kZWZpbmVkVHlwZSAmJiBsZXZlbCA8IHRoaXMubGV2ZWxzLlNJTEVOVCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiTm8gY29uc29sZSBhdmFpbGFibGUgZm9yIGxvZ2dpbmdcIjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluIG9sZCBJRSB2ZXJzaW9ucywgdGhlIGNvbnNvbGUgaXNuJ3QgcHJlc2VudCB1bnRpbCB5b3UgZmlyc3Qgb3BlbiBpdC5cbiAgICAvLyBXZSBidWlsZCByZWFsTWV0aG9kKCkgcmVwbGFjZW1lbnRzIGhlcmUgdGhhdCByZWdlbmVyYXRlIGxvZ2dpbmcgbWV0aG9kc1xuICAgIGZ1bmN0aW9uIGVuYWJsZUxvZ2dpbmdXaGVuQ29uc29sZUFycml2ZXMobWV0aG9kTmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSB1bmRlZmluZWRUeXBlKSB7XG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvZ2dpbmdNZXRob2RzLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpc1ttZXRob2ROYW1lXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIHdlIHVzZSBjbG9zZWx5IGJvdW5kIHJlYWwgbWV0aG9kcyB3aGVyZXZlciBwb3NzaWJsZSwgYW5kXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdhaXQgZm9yIGEgY29uc29sZSB0byBhcHBlYXIsIGFuZCB0aGVuIHRyeSBhZ2Fpbi5cbiAgICBmdW5jdGlvbiBkZWZhdWx0TWV0aG9kRmFjdG9yeShtZXRob2ROYW1lLCBfbGV2ZWwsIF9sb2dnZXJOYW1lKSB7XG4gICAgICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gICAgICAgIHJldHVybiByZWFsTWV0aG9kKG1ldGhvZE5hbWUpIHx8XG4gICAgICAgICAgICAgICBlbmFibGVMb2dnaW5nV2hlbkNvbnNvbGVBcnJpdmVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9nZ2VyKG5hbWUsIGZhY3RvcnkpIHtcbiAgICAgIC8vIFByaXZhdGUgaW5zdGFuY2UgdmFyaWFibGVzLlxuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbGV2ZWwgaW5oZXJpdGVkIGZyb20gYSBwYXJlbnQgbG9nZ2VyIChvciBhIGdsb2JhbCBkZWZhdWx0KS4gV2VcbiAgICAgICAqIGNhY2hlIHRoaXMgaGVyZSByYXRoZXIgdGhhbiBkZWxlZ2F0aW5nIHRvIHRoZSBwYXJlbnQgc28gdGhhdCBpdCBzdGF5c1xuICAgICAgICogaW4gc3luYyB3aXRoIHRoZSBhY3R1YWwgbG9nZ2luZyBtZXRob2RzIHRoYXQgd2UgaGF2ZSBpbnN0YWxsZWQgKHRoZVxuICAgICAgICogcGFyZW50IGNvdWxkIGNoYW5nZSBsZXZlbHMgYnV0IHdlIG1pZ2h0IG5vdCBoYXZlIHJlYnVpbHQgdGhlIGxvZ2dlcnNcbiAgICAgICAqIGluIHRoaXMgY2hpbGQgeWV0KS5cbiAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgKi9cbiAgICAgIHZhciBpbmhlcml0ZWRMZXZlbDtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGRlZmF1bHQgbGV2ZWwgZm9yIHRoaXMgbG9nZ2VyLCBpZiBhbnkuIElmIHNldCwgdGhpcyBvdmVycmlkZXNcbiAgICAgICAqIGBpbmhlcml0ZWRMZXZlbGAuXG4gICAgICAgKiBAdHlwZSB7bnVtYmVyfG51bGx9XG4gICAgICAgKi9cbiAgICAgIHZhciBkZWZhdWx0TGV2ZWw7XG4gICAgICAvKipcbiAgICAgICAqIEEgdXNlci1zcGVjaWZpYyBsZXZlbCBmb3IgdGhpcyBsb2dnZXIuIElmIHNldCwgdGhpcyBvdmVycmlkZXNcbiAgICAgICAqIGBkZWZhdWx0TGV2ZWxgLlxuICAgICAgICogQHR5cGUge251bWJlcnxudWxsfVxuICAgICAgICovXG4gICAgICB2YXIgdXNlckxldmVsO1xuXG4gICAgICB2YXIgc3RvcmFnZUtleSA9IFwibG9nbGV2ZWxcIjtcbiAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzdG9yYWdlS2V5ICs9IFwiOlwiICsgbmFtZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgICAgc3RvcmFnZUtleSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcGVyc2lzdExldmVsSWZQb3NzaWJsZShsZXZlbE51bSkge1xuICAgICAgICAgIHZhciBsZXZlbE5hbWUgPSAobG9nTWV0aG9kc1tsZXZlbE51bV0gfHwgJ3NpbGVudCcpLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gdW5kZWZpbmVkVHlwZSB8fCAhc3RvcmFnZUtleSkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gVXNlIGxvY2FsU3RvcmFnZSBpZiBhdmFpbGFibGVcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlW3N0b3JhZ2VLZXldID0gbGV2ZWxOYW1lO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuXG4gICAgICAgICAgLy8gVXNlIHNlc3Npb24gY29va2llIGFzIGZhbGxiYWNrXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmNvb2tpZSA9XG4gICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0b3JhZ2VLZXkpICsgXCI9XCIgKyBsZXZlbE5hbWUgKyBcIjtcIjtcbiAgICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHt9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGdldFBlcnNpc3RlZExldmVsKCkge1xuICAgICAgICAgIHZhciBzdG9yZWRMZXZlbDtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSB1bmRlZmluZWRUeXBlIHx8ICFzdG9yYWdlS2V5KSByZXR1cm47XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzdG9yZWRMZXZlbCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2Vbc3RvcmFnZUtleV07XG4gICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuXG4gICAgICAgICAgLy8gRmFsbGJhY2sgdG8gY29va2llcyBpZiBsb2NhbCBzdG9yYWdlIGdpdmVzIHVzIG5vdGhpbmdcbiAgICAgICAgICBpZiAodHlwZW9mIHN0b3JlZExldmVsID09PSB1bmRlZmluZWRUeXBlKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY29va2llID0gd2luZG93LmRvY3VtZW50LmNvb2tpZTtcbiAgICAgICAgICAgICAgICAgIHZhciBjb29raWVOYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KHN0b3JhZ2VLZXkpO1xuICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gY29va2llLmluZGV4T2YoY29va2llTmFtZSArIFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdG9yZWRMZXZlbCA9IC9eKFteO10rKS8uZXhlYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2llLnNsaWNlKGxvY2F0aW9uICsgY29va2llTmFtZS5sZW5ndGggKyAxKVxuICAgICAgICAgICAgICAgICAgICAgIClbMV07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZSkge31cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJZiB0aGUgc3RvcmVkIGxldmVsIGlzIG5vdCB2YWxpZCwgdHJlYXQgaXQgYXMgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuICAgICAgICAgIGlmIChzZWxmLmxldmVsc1tzdG9yZWRMZXZlbF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBzdG9yZWRMZXZlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3RvcmVkTGV2ZWw7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNsZWFyUGVyc2lzdGVkTGV2ZWwoKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IHVuZGVmaW5lZFR5cGUgfHwgIXN0b3JhZ2VLZXkpIHJldHVybjtcblxuICAgICAgICAgIC8vIFVzZSBsb2NhbFN0b3JhZ2UgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHN0b3JhZ2VLZXkpO1xuICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZSkge31cblxuICAgICAgICAgIC8vIFVzZSBzZXNzaW9uIGNvb2tpZSBhcyBmYWxsYmFja1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5jb29raWUgPVxuICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdG9yYWdlS2V5KSArIFwiPTsgZXhwaXJlcz1UaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAwIFVUQ1wiO1xuICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZSkge31cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbm9ybWFsaXplTGV2ZWwoaW5wdXQpIHtcbiAgICAgICAgICB2YXIgbGV2ZWwgPSBpbnB1dDtcbiAgICAgICAgICBpZiAodHlwZW9mIGxldmVsID09PSBcInN0cmluZ1wiICYmIHNlbGYubGV2ZWxzW2xldmVsLnRvVXBwZXJDYXNlKCldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgbGV2ZWwgPSBzZWxmLmxldmVsc1tsZXZlbC50b1VwcGVyQ2FzZSgpXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBsZXZlbCA9PT0gXCJudW1iZXJcIiAmJiBsZXZlbCA+PSAwICYmIGxldmVsIDw9IHNlbGYubGV2ZWxzLlNJTEVOVCkge1xuICAgICAgICAgICAgICByZXR1cm4gbGV2ZWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxvZy5zZXRMZXZlbCgpIGNhbGxlZCB3aXRoIGludmFsaWQgbGV2ZWw6IFwiICsgaW5wdXQpO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAqXG4gICAgICAgKiBQdWJsaWMgbG9nZ2VyIEFQSSAtIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcGltdGVycnkvbG9nbGV2ZWwgZm9yIGRldGFpbHNcbiAgICAgICAqXG4gICAgICAgKi9cblxuICAgICAgc2VsZi5uYW1lID0gbmFtZTtcblxuICAgICAgc2VsZi5sZXZlbHMgPSB7IFwiVFJBQ0VcIjogMCwgXCJERUJVR1wiOiAxLCBcIklORk9cIjogMiwgXCJXQVJOXCI6IDMsXG4gICAgICAgICAgXCJFUlJPUlwiOiA0LCBcIlNJTEVOVFwiOiA1fTtcblxuICAgICAgc2VsZi5tZXRob2RGYWN0b3J5ID0gZmFjdG9yeSB8fCBkZWZhdWx0TWV0aG9kRmFjdG9yeTtcblxuICAgICAgc2VsZi5nZXRMZXZlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAodXNlckxldmVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB1c2VyTGV2ZWw7XG4gICAgICAgICAgfSBlbHNlIGlmIChkZWZhdWx0TGV2ZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRMZXZlbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGluaGVyaXRlZExldmVsO1xuICAgICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHNlbGYuc2V0TGV2ZWwgPSBmdW5jdGlvbiAobGV2ZWwsIHBlcnNpc3QpIHtcbiAgICAgICAgICB1c2VyTGV2ZWwgPSBub3JtYWxpemVMZXZlbChsZXZlbCk7XG4gICAgICAgICAgaWYgKHBlcnNpc3QgIT09IGZhbHNlKSB7ICAvLyBkZWZhdWx0cyB0byB0cnVlXG4gICAgICAgICAgICAgIHBlcnNpc3RMZXZlbElmUG9zc2libGUodXNlckxldmVsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBOT1RFOiBpbiB2MiwgdGhpcyBzaG91bGQgY2FsbCByZWJ1aWxkKCksIHdoaWNoIHVwZGF0ZXMgY2hpbGRyZW4uXG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2VMb2dnaW5nTWV0aG9kcy5jYWxsKHNlbGYpO1xuICAgICAgfTtcblxuICAgICAgc2VsZi5zZXREZWZhdWx0TGV2ZWwgPSBmdW5jdGlvbiAobGV2ZWwpIHtcbiAgICAgICAgICBkZWZhdWx0TGV2ZWwgPSBub3JtYWxpemVMZXZlbChsZXZlbCk7XG4gICAgICAgICAgaWYgKCFnZXRQZXJzaXN0ZWRMZXZlbCgpKSB7XG4gICAgICAgICAgICAgIHNlbGYuc2V0TGV2ZWwobGV2ZWwsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBzZWxmLnJlc2V0TGV2ZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXNlckxldmVsID0gbnVsbDtcbiAgICAgICAgICBjbGVhclBlcnNpc3RlZExldmVsKCk7XG4gICAgICAgICAgcmVwbGFjZUxvZ2dpbmdNZXRob2RzLmNhbGwoc2VsZik7XG4gICAgICB9O1xuXG4gICAgICBzZWxmLmVuYWJsZUFsbCA9IGZ1bmN0aW9uKHBlcnNpc3QpIHtcbiAgICAgICAgICBzZWxmLnNldExldmVsKHNlbGYubGV2ZWxzLlRSQUNFLCBwZXJzaXN0KTtcbiAgICAgIH07XG5cbiAgICAgIHNlbGYuZGlzYWJsZUFsbCA9IGZ1bmN0aW9uKHBlcnNpc3QpIHtcbiAgICAgICAgICBzZWxmLnNldExldmVsKHNlbGYubGV2ZWxzLlNJTEVOVCwgcGVyc2lzdCk7XG4gICAgICB9O1xuXG4gICAgICBzZWxmLnJlYnVpbGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRMb2dnZXIgIT09IHNlbGYpIHtcbiAgICAgICAgICAgICAgaW5oZXJpdGVkTGV2ZWwgPSBub3JtYWxpemVMZXZlbChkZWZhdWx0TG9nZ2VyLmdldExldmVsKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXBsYWNlTG9nZ2luZ01ldGhvZHMuY2FsbChzZWxmKTtcblxuICAgICAgICAgIGlmIChkZWZhdWx0TG9nZ2VyID09PSBzZWxmKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGNoaWxkTmFtZSBpbiBfbG9nZ2Vyc0J5TmFtZSkge1xuICAgICAgICAgICAgICAgIF9sb2dnZXJzQnlOYW1lW2NoaWxkTmFtZV0ucmVidWlsZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBhbGwgdGhlIGludGVybmFsIGxldmVscy5cbiAgICAgIGluaGVyaXRlZExldmVsID0gbm9ybWFsaXplTGV2ZWwoXG4gICAgICAgICAgZGVmYXVsdExvZ2dlciA/IGRlZmF1bHRMb2dnZXIuZ2V0TGV2ZWwoKSA6IFwiV0FSTlwiXG4gICAgICApO1xuICAgICAgdmFyIGluaXRpYWxMZXZlbCA9IGdldFBlcnNpc3RlZExldmVsKCk7XG4gICAgICBpZiAoaW5pdGlhbExldmVsICE9IG51bGwpIHtcbiAgICAgICAgICB1c2VyTGV2ZWwgPSBub3JtYWxpemVMZXZlbChpbml0aWFsTGV2ZWwpO1xuICAgICAgfVxuICAgICAgcmVwbGFjZUxvZ2dpbmdNZXRob2RzLmNhbGwoc2VsZik7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKlxuICAgICAqIFRvcC1sZXZlbCBBUElcbiAgICAgKlxuICAgICAqL1xuXG4gICAgZGVmYXVsdExvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuICAgIGRlZmF1bHRMb2dnZXIuZ2V0TG9nZ2VyID0gZnVuY3Rpb24gZ2V0TG9nZ2VyKG5hbWUpIHtcbiAgICAgICAgaWYgKCh0eXBlb2YgbmFtZSAhPT0gXCJzeW1ib2xcIiAmJiB0eXBlb2YgbmFtZSAhPT0gXCJzdHJpbmdcIikgfHwgbmFtZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHN1cHBseSBhIG5hbWUgd2hlbiBjcmVhdGluZyBhIGxvZ2dlci5cIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9nZ2VyID0gX2xvZ2dlcnNCeU5hbWVbbmFtZV07XG4gICAgICAgIGlmICghbG9nZ2VyKSB7XG4gICAgICAgICAgICBsb2dnZXIgPSBfbG9nZ2Vyc0J5TmFtZVtuYW1lXSA9IG5ldyBMb2dnZXIoXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TG9nZ2VyLm1ldGhvZEZhY3RvcnlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9O1xuXG4gICAgLy8gR3JhYiB0aGUgY3VycmVudCBnbG9iYWwgbG9nIHZhcmlhYmxlIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG4gICAgdmFyIF9sb2cgPSAodHlwZW9mIHdpbmRvdyAhPT0gdW5kZWZpbmVkVHlwZSkgPyB3aW5kb3cubG9nIDogdW5kZWZpbmVkO1xuICAgIGRlZmF1bHRMb2dnZXIubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gdW5kZWZpbmVkVHlwZSAmJlxuICAgICAgICAgICAgICAgd2luZG93LmxvZyA9PT0gZGVmYXVsdExvZ2dlcikge1xuICAgICAgICAgICAgd2luZG93LmxvZyA9IF9sb2c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmYXVsdExvZ2dlcjtcbiAgICB9O1xuXG4gICAgZGVmYXVsdExvZ2dlci5nZXRMb2dnZXJzID0gZnVuY3Rpb24gZ2V0TG9nZ2VycygpIHtcbiAgICAgICAgcmV0dXJuIF9sb2dnZXJzQnlOYW1lO1xuICAgIH07XG5cbiAgICAvLyBFUzYgZGVmYXVsdCBleHBvcnQsIGZvciBjb21wYXRpYmlsaXR5XG4gICAgZGVmYXVsdExvZ2dlclsnZGVmYXVsdCddID0gZGVmYXVsdExvZ2dlcjtcblxuICAgIHJldHVybiBkZWZhdWx0TG9nZ2VyO1xufSkpO1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvbG9nZ2VyLmpzXG4gKiBDZW50cmFsaXNlZCBsb2dnaW5nIHVzaW5nIHRoZSBsb2dsZXZlbCBsaWJyYXJ5LlxuICpcbiAqIFVzYWdlIChwZXItbW9kdWxlIG5hbWVkIGxvZ2dlcnMpOlxuICogICBpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG4gKiAgIGNvbnN0IGxvZyA9IGdldExvZ2dlcignYXBpLWNsaWVudCcpO1xuICogICBsb2cuaW5mbygncmVxdWVzdCBzdGFydGVkJywgZW5kcG9pbnQpO1xuICogICBsb2cud2Fybignc2Vzc2lvbiBjb25mbGljdCcpO1xuICogICBsb2cuZXJyb3IoJ2ZhdGFsJywgZXJyb3IpO1xuICpcbiAqIFJvb3QgbG9nZ2VyICh1bmNoYW5nZWQgZ2xvYmFsIGxldmVsKTpcbiAqICAgaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlci5qcyc7XG4gKiAgIGxvZy5zZXRMZXZlbCgnZGVidWcnKTsgICAvLyBsb3dlciB0aGUgZ2xvYmFsIG1pbmltdW1cbiAqXG4gKiBUaGUgZGVmYXVsdCBsZXZlbCBpcyAnd2FybicgaW4gcHJvZHVjdGlvbiBidWlsZHMgKE5PREVfRU5WPXByb2R1Y3Rpb24pIGFuZFxuICogJ2RlYnVnJyBpbiBkZXZlbG9wbWVudC4gIEluZGl2aWR1YWwgbW9kdWxlIGxldmVscyBjYW4gYmUgb3ZlcnJpZGRlbiBhdFxuICogcnVudGltZSB2aWEgdGhlIGJyb3dzZXIgY29uc29sZTpcbiAqICAgbG9nbGV2ZWwuZ2V0TG9nZ2VyKCdhcGktY2xpZW50Jykuc2V0TGV2ZWwoJ3RyYWNlJyk7XG4gKlxuICogREVQRU5ERU5DSUVTOiBsb2dsZXZlbCAobnBtKVxuICovXG5cbmltcG9ydCBsb2dsZXZlbCBmcm9tICdsb2dsZXZlbCc7XG5cbi8vIERlZmF1bHQgbGV2ZWw6IGRlYnVnIGluIGRldiwgd2FybiBpbiBwcm9kLlxuY29uc3QgREVGQVVMVF9MRVZFTCA9ICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJylcbiAgPyAnd2FybidcbiAgOiAnZGVidWcnO1xuXG5sb2dsZXZlbC5zZXREZWZhdWx0TGV2ZWwoREVGQVVMVF9MRVZFTCk7XG5cbi8qKlxuICogR2V0IChvciBjcmVhdGUpIGEgbmFtZWQgY2hpbGQgbG9nZ2VyLlxuICogTmFtZWQgbG9nZ2VycyBpbmhlcml0IHRoZSByb290IGRlZmF1bHQgbGV2ZWwgYnV0IGNhbiBiZSB0dW5lZCBpbmRlcGVuZGVudGx5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTW9kdWxlIG5hbWUsIGUuZy4gJ2FwaS1jbGllbnQnXG4gKiBAcmV0dXJucyB7aW1wb3J0KCdsb2dsZXZlbCcpLkxvZ2dlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcihuYW1lKSB7XG4gIHJldHVybiBsb2dsZXZlbC5nZXRMb2dnZXIobmFtZSk7XG59XG5cbi8vIEV4cG9zZSByb290IGxvZ2xldmVsIGluc3RhbmNlIG9uIGdsb2JhbFRoaXMgc28gdGhlIGJyb3dzZXIgY29uc29sZSBjYW5cbi8vIGFkanVzdCBsZXZlbHMgYXQgcnVudGltZSB3aXRob3V0IGEgYnVpbGQgc3RlcDpcbi8vICAgbG9nbGV2ZWwuc2V0TGV2ZWwoJ2RlYnVnJyk7XG4vLyAgIGxvZ2xldmVsLmdldExvZ2dlcignYXBpLWNsaWVudCcpLnNldExldmVsKCd0cmFjZScpO1xuaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJykge1xuICBnbG9iYWxUaGlzLmxvZ2xldmVsID0gbG9nbGV2ZWw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ2xldmVsO1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB1dGlscy5qc1xuICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRleHQgcHJvY2Vzc2luZywgZm9ybWF0dGluZywgYW5kIGRhdGEgbWFuaXB1bGF0aW9uLlxuICogTm8gZGVwZW5kZW5jaWVzIG9uIERPTSBvciBjb21wbGV4IHN0YXRlLiBQdXJlIGZ1bmN0aW9ucy5cbiAqL1xuXG4vKipcbiAqIE5vcm1hbGl6ZSB3aGl0ZXNwYWNlIGluIHRleHQ6XG4gKiAtIFJlbW92ZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2VcbiAqIC0gQ29sbGFwc2UgaW50ZXJuYWwgd2hpdGVzcGFjZSB0byBzaW5nbGUgc3BhY2VzXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRleHQodGV4dCkge1xuICByZXR1cm4gdGV4dFxuICAgIC50cmltKCkgIC8vIFJlbW92ZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2VcbiAgICAucmVwbGFjZSgvXFxzKy9nLCAnICcpICAvLyBDb2xsYXBzZSBpbnRlcm5hbCB3aGl0ZXNwYWNlXG4gICAgLnRyaW0oKTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgYSBVbml4IHRpbWVzdGFtcCBhcyBodW1hbi1yZWFkYWJsZSBkYXRlIHN0cmluZy5cbiAqIEV4YW1wbGU6IDE3MDkyMzY4MDAgXHUyMTkyIFwiTWFyIDEsIDIwMjRcIlxuICovXG5mdW5jdGlvbiBmbXREYXRlKHRzKSB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0cyAqIDEwMDApO1xuICByZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIHllYXI6ICdudW1lcmljJyB9KTtcbn1cblxuLyoqXG4gKiBDbGVhbiBKU09OIHJlc3BvbnNlIGJ5IHJlbW92aW5nIG1hcmtkb3duIGNvZGUgYmxvY2tzLlxuICogSGFuZGxlcyBjb21tb24gcGF0dGVybnM6XG4gKiAtIGBgYGpzb24gLi4uIGBgYFxuICogLSBgYGBcbiAqICAgLi4uXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY2xlYW5Kc29uUmVzcG9uc2UodGV4dCkge1xuICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSByZXR1cm4gdGV4dDtcbiAgbGV0IGNsZWFuZWQgPSB0ZXh0O1xuICAvLyBSZW1vdmUgYGBganNvbiB3cmFwcGVyXG4gIGNsZWFuZWQgPSBjbGVhbmVkLnJlcGxhY2UoL15gYGBqc29uXFxzKi9pLCAnJykucmVwbGFjZSgvYGBgXFxzKiQvaSwgJycpO1xuICAvLyBSZW1vdmUgYGBgIHdyYXBwZXJcbiAgY2xlYW5lZCA9IGNsZWFuZWQucmVwbGFjZSgvXmBgYFxccyovaSwgJycpLnJlcGxhY2UoL2BgYFxccyokL2ksICcnKTtcbiAgcmV0dXJuIGNsZWFuZWQudHJpbSgpO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgYW5kIHBhcnNlIHRoZSBmaXJzdCB2YWxpZCBKU09OIG9iamVjdCBlbWJlZGRlZCBpbiBmcmVlLWZvcm0gdGV4dC5cbiAqIFJldHVybnMgbnVsbCB3aGVuIG5vIGNvbXBsZXRlIHBhcnNlYWJsZSBvYmplY3QgaXMgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RGaXJzdEpzb25PYmplY3QodGV4dCkge1xuICBpZiAodGV4dCA9PSBudWxsIHx8IHR5cGVvZiB0ZXh0ICE9PSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY2xlYW5lZCA9IGNsZWFuSnNvblJlc3BvbnNlKHRleHQpO1xuXG4gIGZvciAobGV0IHN0YXJ0ID0gMDsgc3RhcnQgPCBjbGVhbmVkLmxlbmd0aDsgc3RhcnQgKz0gMSkge1xuICAgIGlmIChjbGVhbmVkW3N0YXJ0XSAhPT0gJ3snKSBjb250aW51ZTtcblxuICAgIGxldCBkZXB0aCA9IDA7XG4gICAgbGV0IGluU3RyaW5nID0gZmFsc2U7XG4gICAgbGV0IGlzRXNjYXBlZCA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSBzdGFydDsgaW5kZXggPCBjbGVhbmVkLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgY29uc3QgY2hhciA9IGNsZWFuZWRbaW5kZXhdO1xuXG4gICAgICBpZiAoaW5TdHJpbmcpIHtcbiAgICAgICAgaWYgKGlzRXNjYXBlZCkge1xuICAgICAgICAgIGlzRXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSAnXFxcXCcpIHtcbiAgICAgICAgICBpc0VzY2FwZWQgPSB0cnVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICAgICAgaW5TdHJpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT09ICdcIicpIHtcbiAgICAgICAgaW5TdHJpbmcgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT09ICd7Jykge1xuICAgICAgICBkZXB0aCArPSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgIT09ICd9JykgY29udGludWU7XG5cbiAgICAgIGRlcHRoIC09IDE7XG4gICAgICBpZiAoZGVwdGggIT09IDApIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBjYW5kaWRhdGUgPSBjbGVhbmVkLnNsaWNlKHN0YXJ0LCBpbmRleCArIDEpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY2FuZGlkYXRlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBFc2NhcGUgSFRNTCBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gcHJldmVudCBpbmplY3Rpb24uXG4gKiBDb252ZXJ0czogJiA8ID4gXCIgJ1xuICovXG5mdW5jdGlvbiBlc2NhcGVIdG1sKHRleHQpIHtcbiAgaWYgKHRleHQgPT0gbnVsbCkgcmV0dXJuICcnO1xuICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSByZXR1cm4gZXNjYXBlSHRtbChTdHJpbmcodGV4dCkpO1xuICBjb25zdCBtYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgIFwiJ1wiOiAnJiMwMzk7J1xuICB9O1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bJjw+XCInXS9nLCBtID0+IG1hcFttXSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aXRsZSBhbmQgY29tcGFueSBmcm9tIGpvYiBkZXNjcmlwdGlvbiB0ZXh0LlxuICogUGF0dGVybnM6XG4gKiAtIFwiVGl0bGUgfCBDb21wYW55XCJcbiAqIC0gXCJUaXRsZSBhdCBDb21wYW55XCJcbiAqIC0gRmlyc3QgbGluZSBjb250YWluaW5nIFwidGl0bGVcIiwgXCJwb3NpdGlvblwiLCBcInJvbGVcIiwgXCJhcmNoaXRlY3RcIiwgZXRjLlxuICovXG5mdW5jdGlvbiBleHRyYWN0VGl0bGVBbmRDb21wYW55RnJvbUpvYlRleHQoam9iVGV4dCkge1xuICBjb25zdCBsaW5lcyA9IGpvYlRleHQuc3BsaXQoJ1xcbicpLm1hcChsID0+IGwudHJpbSgpKS5maWx0ZXIobCA9PiBsLmxlbmd0aCA+IDApO1xuXG4gIC8vIExvb2sgZm9yIHBhdHRlcm5zOiBcIlRpdGxlIHwgQ29tcGFueVwiIG9yIFwiVGl0bGUgYXQgQ29tcGFueVwiXG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmIChsaW5lLmluY2x1ZGVzKCd8JykpIHtcbiAgICAgIGNvbnN0IFt0aXRsZSwgY29tcGFueV0gPSBsaW5lLnNwbGl0KCd8JykubWFwKHMgPT4gcy50cmltKCkpO1xuICAgICAgaWYgKHRpdGxlICYmIGNvbXBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHsgdGl0bGUsIGNvbXBhbnkgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGxpbmUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnIGF0ICcpKSB7XG4gICAgICBjb25zdCBbdGl0bGUsIGNvbXBhbnldID0gbGluZS5zcGxpdCgvXFxzK2F0XFxzKy9pKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gICAgICBpZiAodGl0bGUgJiYgY29tcGFueSkge1xuICAgICAgICByZXR1cm4geyB0aXRsZSwgY29tcGFueSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZhbGxiYWNrOiB1c2UgZmlyc3Qgbm9uLWVtcHR5IGxpbmUgYXMgdGl0bGVcbiAgY29uc3QgdGl0bGVMaW5lID0gbGluZXNbMF07XG4gIHJldHVybiB7XG4gICAgdGl0bGU6IHRpdGxlTGluZSB8fCAnVW50aXRsZWQgUG9zaXRpb24nLFxuICAgIGNvbXBhbnk6IGxpbmVzLmZpbmQobCA9PiBsLnRvTG93ZXJDYXNlKCkgIT09IHRpdGxlTGluZS50b0xvd2VyQ2FzZSgpKSB8fCAnVW5rbm93biBDb21wYW55J1xuICB9O1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBwb3NpdGlvbiBsYWJlbDpcbiAqIC0gQ2FwaXRhbGl6ZSBlYWNoIHdvcmRcbiAqIC0gUmVtb3ZlIHRyYWlsaW5nIFwicm9sZVwiLCBcInBvc2l0aW9uXCIsIFwidGl0bGVcIiwgXCJqb2JcIlxuICogRXhhbXBsZXM6XG4gKiAtIFwic2VuaW9yIGRhdGEgc2NpZW50aXN0XCIgXHUyMTkyIFwiU2VuaW9yIERhdGEgU2NpZW50aXN0XCJcbiAqIC0gXCJkaXJlY3RvciBvZiBlbmdpbmVlcmluZ1wiIFx1MjE5MiBcIkRpcmVjdG9yIG9mIEVuZ2luZWVyaW5nXCJcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUG9zaXRpb25MYWJlbCh0aXRsZSwgY29tcGFueSkge1xuICBsZXQgbm9ybWFsaXplZCA9IHRpdGxlXG4gICAgLnNwbGl0KCcgJylcbiAgICAubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSlcbiAgICAuam9pbignICcpO1xuXG4gIC8vIFJlbW92ZSBjb21tb24gc3VmZml4ZXNcbiAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWRcbiAgICAucmVwbGFjZSgvXFxzKyhyb2xlfHBvc2l0aW9ufHRpdGxlfGpvYilcXHMqJC9pLCAnJylcbiAgICAudHJpbSgpO1xuXG4gIHJldHVybiBub3JtYWxpemVkIHx8ICdQcm9mZXNzaW9uYWwgUm9sZSc7XG59XG5cbi8qKlxuICogU3RyaXAgSFRNTCB0YWdzIGZyb20gc3RyaW5nLlxuICogVXNlcyBhbiBpbmVydCB0ZW1wbGF0ZSBlbGVtZW50LCB0aGVuIHJlbW92ZXMgZXhlY3V0YWJsZS9ub24tdmlzaWJsZSBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gc3RyaXBIdG1sKGh0bWwpIHtcbiAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBTdHJpbmcoaHRtbCA/PyAnJyk7XG4gIHRlbXBsYXRlLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnc2NyaXB0LCBzdHlsZSwgbm9zY3JpcHQsIHRlbXBsYXRlJykuZm9yRWFjaChub2RlID0+IG5vZGUucmVtb3ZlKCkpO1xuICByZXR1cm4gdGVtcGxhdGUuY29udGVudC50ZXh0Q29udGVudCB8fCAnJztcbn1cblxuLyoqXG4gKiBUcnVuY2F0ZSB0ZXh0IHRvIG1heCBsZW5ndGggd2l0aCBlbGxpcHNpcy5cbiAqIFByZXNlcnZlcyB3b3JkIGJvdW5kYXJpZXMgd2hlbiBwb3NzaWJsZS5cbiAqL1xuZnVuY3Rpb24gdHJ1bmNhdGVUZXh0KHRleHQsIG1heExlbmd0aCA9IDEwMCkge1xuICBpZiAodGV4dC5sZW5ndGggPD0gbWF4TGVuZ3RoKSByZXR1cm4gdGV4dDtcblxuICAvLyBUcnVuY2F0ZSBhdCBtYXggbGVuZ3RoXG4gIGxldCB0cnVuY2F0ZWQgPSB0ZXh0LnN1YnN0cmluZygwLCBtYXhMZW5ndGgpO1xuXG4gIC8vIFRyeSB0byBmaW5kIHRoZSBsYXN0IHNwYWNlIHRvIGF2b2lkIGN1dHRpbmcgd29yZHNcbiAgY29uc3QgbGFzdFNwYWNlID0gdHJ1bmNhdGVkLmxhc3RJbmRleE9mKCcgJyk7XG4gIGlmIChsYXN0U3BhY2UgPiBNYXRoLmZsb29yKG1heExlbmd0aCAqIDAuNzUpKSB7XG4gICAgdHJ1bmNhdGVkID0gdHJ1bmNhdGVkLnN1YnN0cmluZygwLCBsYXN0U3BhY2UpO1xuICB9XG5cbiAgcmV0dXJuIHRydW5jYXRlZCArICdcdTIwMjYnO1xufVxuXG4vKipcbiAqIENhcGl0YWxpemUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZC5cbiAqL1xuZnVuY3Rpb24gY2FwaXRhbGl6ZVdvcmRzKHRleHQpIHtcbiAgcmV0dXJuIHRleHRcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKVxuICAgIC5qb2luKCcgJyk7XG59XG5cbi8qKlxuICogQ29uZGl0aW9uYWwgcGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKiBFeGFtcGxlOiBwbHVyYWxpemUoMSwgJ2l0ZW0nLCAnaXRlbXMnKSBcdTIxOTIgJ2l0ZW0nXG4gKiAgICAgICAgICBwbHVyYWxpemUoMywgJ2l0ZW0nLCAnaXRlbXMnKSBcdTIxOTIgJ2l0ZW1zJ1xuICovXG5mdW5jdGlvbiBwbHVyYWxpemUoY291bnQsIHNpbmd1bGFyLCBwbHVyYWwpIHtcbiAgcmV0dXJuIGNvdW50ID09PSAxID8gc2luZ3VsYXIgOiBwbHVyYWw7XG59XG5cbi8qKlxuICogSHVtYW4tcmVhZGFibGUgdGltZSBkdXJhdGlvbi5cbiAqIEV4YW1wbGU6IDUwMDAgXHUyMTkyIFwiNSBzZWNvbmRzXCIsIDY1MDAwIFx1MjE5MiBcIjEgbWludXRlXCJcbiAqL1xuZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obXMpIHtcbiAgY29uc3Qgc2Vjb25kcyA9IE1hdGguZmxvb3IobXMgLyAxMDAwKTtcbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKG1pbnV0ZXMgLyA2MCk7XG5cbiAgaWYgKGhvdXJzID4gMCkgcmV0dXJuIGAke2hvdXJzfWggJHttaW51dGVzICUgNjB9bWA7XG4gIGlmIChtaW51dGVzID4gMCkgcmV0dXJuIGAke21pbnV0ZXN9bSAke3NlY29uZHMgJSA2MH1zYDtcbiAgcmV0dXJuIGAke3NlY29uZHN9c2A7XG59XG5cbi8qKlxuICogT3JkaW5hbCBudW1iZXIgc3VmZml4LlxuICogRXhhbXBsZTogMSBcdTIxOTIgXCIxc3RcIiwgMiBcdTIxOTIgXCIybmRcIiwgMyBcdTIxOTIgXCIzcmRcIiwgNCBcdTIxOTIgXCI0dGhcIlxuICovXG5mdW5jdGlvbiBvcmRpbmFsKG4pIHtcbiAgY29uc3QgcyA9IFsndGgnLCAnc3QnLCAnbmQnLCAncmQnXTtcbiAgY29uc3QgdiA9IG4gJSAxMDA7XG4gIHJldHVybiBuICsgKHNbKHYgLSAyMCkgJSAxMF0gfHwgc1t2XSB8fCBzWzBdKTtcbn1cblxuLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHNlc3Npb24gbWFuYWdlbWVudCBhbmQgZm9ybWF0dGluZ1xuXG4vLyBGdWxsLWxlbmd0aCBwaGFzZSBsYWJlbHMgXHUyMDE0IHVzZWQgYnkgd29ya2Zsb3cgc3RlcCBkaXNwbGF5LCBzdGF0dXMgdGV4dCwgZXRjLlxuY29uc3QgU0VTU0lPTl9QSEFTRV9MQUJFTFMgPSB7XG4gIGluaXQ6ICAgICAgICAgICAgICdHZXR0aW5nIFN0YXJ0ZWQnLFxuICBqb2JfYW5hbHlzaXM6ICAgICAnSm9iIEFuYWx5c2lzJyxcbiAgY3VzdG9taXphdGlvbjogICAgJ0N1c3RvbWlzYXRpb24nLFxuICByZXdyaXRlX3JldmlldzogICAnUmV3cml0ZSBSZXZpZXcnLFxuICBzcGVsbF9jaGVjazogICAgICAnU3BlbGwgQ2hlY2snLFxuICBnZW5lcmF0aW9uOiAgICAgICAnR2VuZXJhdGlvbicsXG4gIGxheW91dF9yZXZpZXc6ICAgICdMYXlvdXQgUmV2aWV3JyxcbiAgcmVmaW5lbWVudDogICAgICAgJ0ZpbmFsaXNlJyxcbiAgZmluYWxfZ2VuZXJhdGlvbjogJ0ZpbmFsIEdlbmVyYXRpb24nLFxufTtcblxuLy8gQWJicmV2aWF0ZWQgcGhhc2UgbGFiZWxzIFx1MjAxNCB1c2VkIGJ5IHRoZSBjb21wYWN0IHNlc3Npb24tc3dpdGNoZXIgVUkuXG4vLyBJbnRlbnRpb25hbGx5IHNlcGFyYXRlIGZyb20gU0VTU0lPTl9QSEFTRV9MQUJFTFM6IHRoZSB0d28gc2V0cyBzZXJ2ZSBkaWZmZXJlbnRcbi8vIFVJIGNvbnRleHRzIChzcGFjZS1jb25zdHJhaW5lZCBoZWFkZXIgY2hpcCB2cy4gZnVsbCB3b3JrZmxvdyBzdGVwIGxhYmVsKS5cbmNvbnN0IFNFU1NJT05fUEhBU0VfTEFCRUxTX1NIT1JUID0ge1xuICBpbml0OiAgICAgICAgICAgICAnU2V0dXAnLFxuICBqb2JfYW5hbHlzaXM6ICAgICAnQW5hbHlzaXMnLFxuICBjdXN0b21pemF0aW9uOiAgICAnQ3VzdG9taXNpbmcnLFxuICByZXdyaXRlX3JldmlldzogICAnUmV3cml0ZXMnLFxuICBzcGVsbF9jaGVjazogICAgICAnU3BlbGwgQ2hlY2snLFxuICBnZW5lcmF0aW9uOiAgICAgICAnR2VuZXJhdGUnLFxuICBsYXlvdXRfcmV2aWV3OiAgICAnTGF5b3V0JyxcbiAgcmVmaW5lbWVudDogICAgICAgJ0ZpbmFsaXNlJyxcbiAgZmluYWxfZ2VuZXJhdGlvbjogJ0ZpbmFsIEdlbicsXG59O1xuXG4vKipcbiAqIEZvcm1hdCBzZXNzaW9uIHBoYXNlIGxhYmVscyAoZnVsbCBmb3JtKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwaGFzZSAtIFRoZSBwaGFzZSBzdHJpbmcgdG8gZm9ybWF0LlxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgZm9ybWF0dGVkIHBoYXNlIGxhYmVsLlxuICovXG5mdW5jdGlvbiBmb3JtYXRTZXNzaW9uUGhhc2VMYWJlbChwaGFzZSkge1xuICBpZiAoIXBoYXNlKSByZXR1cm4gJ2luaXQnO1xuICByZXR1cm4gU0VTU0lPTl9QSEFTRV9MQUJFTFNbcGhhc2VdIHx8IFN0cmluZyhwaGFzZSkucmVwbGFjZSgvXy9nLCAnICcpO1xufVxuXG4vKipcbiAqIEZvcm1hdCBzZXNzaW9uIHRpbWVzdGFtcHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGltZXN0YW1wIC0gVGhlIHRpbWVzdGFtcCB0byBmb3JtYXQuXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIEZvcm1hdHRpbmcgb3B0aW9ucy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaW5jbHVkZVRpbWU9dHJ1ZV0gLSBXaGV0aGVyIHRvIGluY2x1ZGUgdGltZSBpbiB0aGUgb3V0cHV0LlxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgZm9ybWF0dGVkIHRpbWVzdGFtcC5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0U2Vzc2lvblRpbWVzdGFtcCh0aW1lc3RhbXAsIHsgaW5jbHVkZVRpbWUgPSB0cnVlIH0gPSB7fSkge1xuICBpZiAoIXRpbWVzdGFtcCkgcmV0dXJuICdcdTIwMTQnO1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXApLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgIG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgeWVhcjogJ251bWVyaWMnLFxuICAgICAgLi4uKGluY2x1ZGVUaW1lID8geyBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJzItZGlnaXQnIH0gOiB7fSksXG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gU3RyaW5nKHRpbWVzdGFtcCkucmVwbGFjZSgnVCcsICcgJykuc2xpY2UoMCwgaW5jbHVkZVRpbWUgPyAxNiA6IDEwKTtcbiAgfVxufVxuXG4vLyBTdHJ1Y3R1cmVkIGxvZ2dpbmcgaGVscGVyIChnbG9iYWwgYW5kIHRlc3QtZnJpZW5kbHkpLlxuY29uc3QgTE9HX0xFVkVMUyA9IHsgZGVidWc6IDEwLCBpbmZvOiAyMCwgd2FybjogMzAsIGVycm9yOiA0MCB9O1xuY29uc3QgREVGQVVMVF9MT0dfTEVWRUwgPSAnaW5mbyc7XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvZ0VudHJ5KGxldmVsLCBtZXNzYWdlLCBtZXRhZGF0YSA9IHt9KSB7XG4gIGNvbnN0IGVudHJ5ID0ge1xuICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIGxldmVsLFxuICAgIG1lc3NhZ2U6IFN0cmluZyhtZXNzYWdlKSxcbiAgICAuLi5tZXRhZGF0YSxcbiAgfTtcbiAgcmV0dXJuIGVudHJ5O1xufVxuXG5jb25zdCBsb2dnZXIgPSB7XG4gIGxldmVsOiBERUZBVUxUX0xPR19MRVZFTCxcblxuICBzZXRMZXZlbChuZXdMZXZlbCkge1xuICAgIGlmIChMT0dfTEVWRUxTW25ld0xldmVsXSAhPSBudWxsKSB7XG4gICAgICB0aGlzLmxldmVsID0gbmV3TGV2ZWw7XG4gICAgfVxuICB9LFxuXG4gIHNob3VsZExvZyhsZXZlbCkge1xuICAgIGlmIChMT0dfTEVWRUxTW2xldmVsXSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIExPR19MRVZFTFNbbGV2ZWxdID49IExPR19MRVZFTFNbdGhpcy5sZXZlbF07XG4gIH0sXG5cbiAgbG9nKGxldmVsLCBtZXNzYWdlLCBtZXRhZGF0YSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLnNob3VsZExvZyhsZXZlbCkpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgZW50cnkgPSBjcmVhdGVMb2dFbnRyeShsZXZlbCwgbWVzc2FnZSwgbWV0YWRhdGEpO1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IEpTT04uc3RyaW5naWZ5KGVudHJ5KTtcblxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChsZXZlbCA9PT0gJ2Vycm9yJykgY29uc29sZS5lcnJvcihmb3JtYXR0ZWQpO1xuICAgICAgZWxzZSBpZiAobGV2ZWwgPT09ICd3YXJuJykgY29uc29sZS53YXJuKGZvcm1hdHRlZCk7XG4gICAgICBlbHNlIGNvbnNvbGUubG9nKGZvcm1hdHRlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudHJ5O1xuICB9LFxuXG4gIGRlYnVnKG1lc3NhZ2UsIG1ldGFkYXRhID0ge30pIHsgcmV0dXJuIHRoaXMubG9nKCdkZWJ1ZycsIG1lc3NhZ2UsIG1ldGFkYXRhKTsgfSxcbiAgaW5mbyhtZXNzYWdlLCBtZXRhZGF0YSA9IHt9KSB7IHJldHVybiB0aGlzLmxvZygnaW5mbycsIG1lc3NhZ2UsIG1ldGFkYXRhKTsgfSxcbiAgd2FybihtZXNzYWdlLCBtZXRhZGF0YSA9IHt9KSB7IHJldHVybiB0aGlzLmxvZygnd2FybicsIG1lc3NhZ2UsIG1ldGFkYXRhKTsgfSxcbiAgZXJyb3IobWVzc2FnZSwgbWV0YWRhdGEgPSB7fSkgeyByZXR1cm4gdGhpcy5sb2coJ2Vycm9yJywgbWVzc2FnZSwgbWV0YWRhdGEpOyB9LFxuXG4gIGV2ZW50KGFjdGlvbiwgbWV0YWRhdGEgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmluZm8oYGV2ZW50OiR7YWN0aW9ufWAsIHsgYWN0aW9uLCAuLi5tZXRhZGF0YSB9KTtcbiAgfSxcbn07XG5cbmlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgZ2xvYmFsVGhpcy5sb2dnZXIgPSBsb2dnZXI7XG59XG5cbmV4cG9ydCB7XG4gIG5vcm1hbGl6ZVRleHQsIGZtdERhdGUsIGNsZWFuSnNvblJlc3BvbnNlLCBleHRyYWN0Rmlyc3RKc29uT2JqZWN0LCBlc2NhcGVIdG1sLFxuICBleHRyYWN0VGl0bGVBbmRDb21wYW55RnJvbUpvYlRleHQsIG5vcm1hbGl6ZVBvc2l0aW9uTGFiZWwsXG4gIHN0cmlwSHRtbCwgdHJ1bmNhdGVUZXh0LCBjYXBpdGFsaXplV29yZHMsIHBsdXJhbGl6ZSxcbiAgZm9ybWF0RHVyYXRpb24sIG9yZGluYWwsXG4gIFNFU1NJT05fUEhBU0VfTEFCRUxTLCBTRVNTSU9OX1BIQVNFX0xBQkVMU19TSE9SVCxcbiAgZm9ybWF0U2Vzc2lvblBoYXNlTGFiZWwsXG4gIGxvZ2dlcixcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIGFwaS1jbGllbnQuanNcbiAqIENlbnRyYWxpemVkIEhUVFAgY29tbXVuaWNhdGlvbiBsYXllci4gQWxsIEFQSSBjYWxscyBnbyB0aHJvdWdoIGFwaUNhbGwoKS5cbiAqIFByb3ZpZGVzIGVycm9yIGhhbmRsaW5nLCBsb2dnaW5nLCBhbmQgcmV0cnkgbG9naWMuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgaGFuZGxlNDA5Q29uZmxpY3QgfSBmcm9tICcuL2ZldGNoLXV0aWxzLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcignYXBpLWNsaWVudCcpO1xuXG4vKipcbiAqIENlbnRyYWxpemVkIGxvY2FsU3RvcmFnZSBrZXkgbWFuYWdlbWVudCB0byBhdm9pZCBkdXBsaWNhdGlvblxuICovXG5jb25zdCBTdG9yYWdlS2V5cyA9IHtcbiAgU0VTU0lPTl9JRDogICAgICAgICAgICdjdi1idWlsZGVyLXNlc3Npb24taWQnLFxuICBTRVNTSU9OX1BBVEg6ICAgICAgICAgJ2N2LWJ1aWxkZXItc2Vzc2lvbi1wYXRoJyxcbiAgVEFCX0RBVEE6ICAgICAgICAgICAgICdjdi1idWlsZGVyLXRhYi1kYXRhJyxcbiAgQ1VSUkVOVF9UQUI6ICAgICAgICAgICdjdi1idWlsZGVyLWN1cnJlbnQtdGFiJyxcbiAgQ0hBVF9DT0xMQVBTRUQ6ICAgICAgICdjdi1idWlsZGVyLWNoYXQtY29sbGFwc2VkJyxcbiAgTExNX0RJU0NMT1NVUkVfU0hPV046ICdjdi1idWlsZGVyLWxsbS1kaXNjbG9zdXJlLXNob3duJyxcbn07XG5cbmNvbnN0IE9XTkVSX1RPS0VOX0tFWSA9ICdjdi1idWlsZGVyLW93bmVyLXRva2VuJztcblxuZnVuY3Rpb24gZ2V0U2Vzc2lvbklkRnJvbVVSTCgpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICF3aW5kb3cubG9jYXRpb24pIHJldHVybiBudWxsO1xuICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoJ3Nlc3Npb24nKTtcbn1cblxuZnVuY3Rpb24gZ2V0T3duZXJUb2tlbigpIHtcbiAgaWYgKHR5cGVvZiBzZXNzaW9uU3RvcmFnZSA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsO1xuICBsZXQgdG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKE9XTkVSX1RPS0VOX0tFWSk7XG4gIGlmICghdG9rZW4pIHtcbiAgICBpZiAodHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNyeXB0by5yYW5kb21VVUlEID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0b2tlbiA9IGNyeXB0by5yYW5kb21VVUlEKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRva2VuID0gYHRhYi0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc2xpY2UoMiwgMTApfWA7XG4gICAgfVxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oT1dORVJfVE9LRU5fS0VZLCB0b2tlbik7XG4gIH1cbiAgcmV0dXJuIHRva2VuO1xufVxuXG5mdW5jdGlvbiBnZXRTY29wZWRUYWJEYXRhU3RvcmFnZUtleShzZXNzaW9uSWQgPSBudWxsKSB7XG4gIGNvbnN0IHNjb3BlZFNlc3Npb25JZCA9IHNlc3Npb25JZCB8fCBnZXRTZXNzaW9uSWRGcm9tVVJMKCk7XG4gIHJldHVybiBzY29wZWRTZXNzaW9uSWRcbiAgICA/IGAke1N0b3JhZ2VLZXlzLlRBQl9EQVRBfS0ke3Njb3BlZFNlc3Npb25JZH1gXG4gICAgOiBTdG9yYWdlS2V5cy5UQUJfREFUQTtcbn1cblxuZnVuY3Rpb24gX2lzU2Vzc2lvbk1hbmFnZW1lbnRQYXRoKHBhdGhuYW1lKSB7XG4gIHJldHVybiBwYXRobmFtZSA9PT0gJy9hcGkvc2Vzc2lvbnMvbmV3J1xuICAgIHx8IHBhdGhuYW1lID09PSAnL2FwaS9zZXNzaW9ucy9jbGFpbSdcbiAgICB8fCBwYXRobmFtZSA9PT0gJy9hcGkvc2Vzc2lvbnMvdGFrZW92ZXInO1xufVxuXG5mdW5jdGlvbiBfYnVpbGRTZXNzaW9uQXdhcmVSZXF1ZXN0KGlucHV0LCBpbml0ID0ge30pIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICF3aW5kb3cubG9jYXRpb24pIHtcbiAgICByZXR1cm4gW2lucHV0LCBpbml0XTtcbiAgfVxuXG4gIGNvbnN0IHVybCA9IG5ldyBVUkwodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyA/IGlucHV0IDogaW5wdXQudXJsLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgaWYgKCF1cmwucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2FwaS8nKSkge1xuICAgIHJldHVybiBbaW5wdXQsIGluaXRdO1xuICB9XG5cbiAgY29uc3Qgb3duZXJUb2tlbiA9IGdldE93bmVyVG9rZW4oKTtcbiAgaWYgKCF1cmwuc2VhcmNoUGFyYW1zLmhhcygnb3duZXJfdG9rZW4nKSAmJiAhX2lzU2Vzc2lvbk1hbmFnZW1lbnRQYXRoKHVybC5wYXRobmFtZSkgJiYgb3duZXJUb2tlbikge1xuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdvd25lcl90b2tlbicsIG93bmVyVG9rZW4pO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvbklkID0gZ2V0U2Vzc2lvbklkRnJvbVVSTCgpO1xuICBpZiAoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBbdXJsLnRvU3RyaW5nKCksIGluaXRdO1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gKGluaXQubWV0aG9kIHx8ICdHRVQnKS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBuZXh0SW5pdCA9IHsgLi4uaW5pdCB9O1xuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5pdC5oZWFkZXJzIHx8IHt9KTtcblxuICBpZiAoIXVybC5zZWFyY2hQYXJhbXMuaGFzKCdzZXNzaW9uX2lkJykgJiYgIV9pc1Nlc3Npb25NYW5hZ2VtZW50UGF0aCh1cmwucGF0aG5hbWUpKSB7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3Nlc3Npb25faWQnLCBzZXNzaW9uSWQpO1xuICB9XG5cbiAgY29uc3QgbmVlZHNCb2R5Q29udGV4dCA9ICFbJ0dFVCcsICdIRUFEJ10uaW5jbHVkZXMobWV0aG9kKTtcbiAgY29uc3QgYm9keSA9IG5leHRJbml0LmJvZHk7XG4gIGNvbnN0IGlzRm9ybURhdGEgPSB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnICYmIGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YTtcbiAgY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyAmJiBib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xuICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSB8fCAnJztcblxuICBpZiAobmVlZHNCb2R5Q29udGV4dCAmJiAhaXNGb3JtRGF0YSAmJiAhaXNVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICBsZXQgcGF5bG9hZCA9IHt9O1xuICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgJiYgYm9keS50cmltKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBheWxvYWQgPSBKU09OLnBhcnNlKGJvZHkpO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICByZXR1cm4gW3VybC50b1N0cmluZygpLCBuZXh0SW5pdF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChib2R5ID09IG51bGwpIHtcbiAgICAgIHBheWxvYWQgPSB7fTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnb2JqZWN0Jykge1xuICAgICAgcGF5bG9hZCA9IHsgLi4uYm9keSB9O1xuICAgIH1cblxuICAgIGlmIChwYXlsb2FkLnNlc3Npb25faWQgPT0gbnVsbCAmJiAhX2lzU2Vzc2lvbk1hbmFnZW1lbnRQYXRoKHVybC5wYXRobmFtZSkpIHtcbiAgICAgIHBheWxvYWQuc2Vzc2lvbl9pZCA9IHNlc3Npb25JZDtcbiAgICB9XG4gICAgaWYgKHBheWxvYWQub3duZXJfdG9rZW4gPT0gbnVsbCAmJiAhX2lzU2Vzc2lvbk1hbmFnZW1lbnRQYXRoKHVybC5wYXRobmFtZSkpIHtcbiAgICAgIGlmIChvd25lclRva2VuKSBwYXlsb2FkLm93bmVyX3Rva2VuID0gb3duZXJUb2tlbjtcbiAgICB9XG5cbiAgICBuZXh0SW5pdC5ib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZCk7XG4gICAgaWYgKCFjb250ZW50VHlwZSkge1xuICAgICAgaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgfVxuICB9XG5cbiAgbmV4dEluaXQuaGVhZGVycyA9IGhlYWRlcnM7XG4gIHJldHVybiBbdXJsLnRvU3RyaW5nKCksIG5leHRJbml0XTtcbn1cblxuY29uc3QgX25hdGl2ZUZldGNoID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5mZXRjaCA9PT0gJ2Z1bmN0aW9uJ1xuICA/IHdpbmRvdy5mZXRjaC5iaW5kKHdpbmRvdylcbiAgOiAodHlwZW9mIGdsb2JhbFRoaXMuZmV0Y2ggPT09ICdmdW5jdGlvbicgPyBnbG9iYWxUaGlzLmZldGNoLmJpbmQoZ2xvYmFsVGhpcykgOiBudWxsKTtcblxuYXN5bmMgZnVuY3Rpb24gc2Vzc2lvbkF3YXJlRmV0Y2goaW5wdXQsIGluaXQgPSB7fSkge1xuICBpZiAoX25hdGl2ZUZldGNoID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZldGNoIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgfVxuICBjb25zdCBbbmV4dElucHV0LCBuZXh0SW5pdF0gPSBfYnVpbGRTZXNzaW9uQXdhcmVSZXF1ZXN0KGlucHV0LCBpbml0KTtcbiAgbGV0IHJlc3AgPSBhd2FpdCBfbmF0aXZlRmV0Y2gobmV4dElucHV0LCBuZXh0SW5pdCk7XG4gIGlmIChyZXNwLnN0YXR1cyA9PT0gNDA5KSB7XG4gICAgY29uc3Qgc2hvdWxkUmV0cnkgPSBhd2FpdCBoYW5kbGU0MDlDb25mbGljdChuZXh0SW5wdXQsIG5leHRJbml0LCByZXNwKTtcbiAgICBpZiAoc2hvdWxkUmV0cnkpIHJlc3AgPSBhd2FpdCBfbmF0aXZlRmV0Y2gobmV4dElucHV0LCBuZXh0SW5pdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3A7XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmZldGNoID09PSAnZnVuY3Rpb24nKSB7XG4gIHdpbmRvdy5mZXRjaCA9IHNlc3Npb25Bd2FyZUZldGNoO1xufVxuXG4vKipcbiAqIEJhc2UgQVBJIGNhbGwgZnVuY3Rpb24gd2l0aCBlcnJvciBoYW5kbGluZyBhbmQgbG9nZ2luZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgLSBIVFRQIG1ldGhvZCAoR0VULCBQT1NULCBldGMuKVxuICogQHBhcmFtIHtzdHJpbmd9IGVuZHBvaW50IC0gQVBJIGVuZHBvaW50IChlLmcuLCAnL2FwaS9zdGF0dXMnKVxuICogQHBhcmFtIHtvYmplY3R9IGRhdGEgLSBSZXF1ZXN0IGJvZHkgZGF0YSAoZm9yIFBPU1QvUFVUKVxuICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0Pn0gUGFyc2VkIEpTT04gcmVzcG9uc2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXBpQ2FsbChtZXRob2QsIGVuZHBvaW50LCBkYXRhID0gbnVsbCkge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIG1ldGhvZCxcbiAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfVxuICB9O1xuXG4gIGlmIChkYXRhICYmIChtZXRob2QgPT09ICdQT1NUJyB8fCBtZXRob2QgPT09ICdQVVQnKSkge1xuICAgIG9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNlc3Npb25Bd2FyZUZldGNoKGVuZHBvaW50LCBvcHRpb25zKTtcblxuICAgIC8vIEhhbmRsZSA0MDkgQ29uZmxpY3QgKHNlc3Npb24gYWxyZWFkeSBhY3RpdmUpXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA5KSB7XG4gICAgICBsb2cud2FybihgU2Vzc2lvbiBjb25mbGljdCBvbiAke2VuZHBvaW50fWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXNzaW9uIGFscmVhZHkgYWN0aXZlIGluIGFub3RoZXIgdGFiJyk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgbG9nLmVycm9yKGBBUEkgZXJyb3Igb24gJHttZXRob2R9ICR7ZW5kcG9pbnR9OmAsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gcmVzcG9uc2Uuc3RhdHVzVGV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGVycm9ySnNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgaWYgKGVycm9ySnNvbiAmJiB0eXBlb2YgZXJyb3JKc29uID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9ySnNvbi5lcnJvciB8fCBlcnJvckpzb24ubWVzc2FnZSB8fCBlcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHN0YXR1cyB0ZXh0IHdoZW4gcmVzcG9uc2UgaXMgbm90IEpTT04uXG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cmVzcG9uc2Uuc3RhdHVzfTogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgY29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICByZXR1cm4ganNvbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cuZXJyb3IoYEFQSSBjYWxsIGZhaWxlZDogJHttZXRob2R9ICR7ZW5kcG9pbnR9YCwgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09XG4vLyBTZXNzaW9uIE1hbmFnZW1lbnRcbi8vID09PT09PT09PT09PT09PT09PT09XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNlc3Npb24oKSB7XG4gIHJldHVybiBhcGlDYWxsKCdQT1NUJywgJy9hcGkvc2Vzc2lvbnMvbmV3Jyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoU3RhdHVzKCkge1xuICBjb25zdCBzdGF0dXMgPSBhd2FpdCBhcGlDYWxsKCdHRVQnLCAnL2FwaS9zdGF0dXMnKTtcblxuICAvLyBLZWVwIHByb3ZpZGVyL2F1dGggVUkgaW4gc3luYyB3aGVuZXZlciBzdGF0dXMgaXMgZmV0Y2hlZC5cbiAgY29uc3QgcHJvdmlkZXIgPSBzdGF0dXM/LmxsbV9wcm92aWRlciB8fCBudWxsO1xuICBpZiAocHJvdmlkZXIpIHtcbiAgICBnbG9iYWxUaGlzLmN1cnJlbnRQcm92aWRlciA9IHByb3ZpZGVyO1xuICB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy51cGRhdGVBdXRoQmFkZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICBnbG9iYWxUaGlzLnVwZGF0ZUF1dGhCYWRnZShzdGF0dXM/LmNvcGlsb3RfYXV0aCB8fCB7fSwgcHJvdmlkZXIpO1xuICB9XG5cbiAgLy8gVXBkYXRlIHdvcmtmbG93IHN0ZXAgYmFyIChjbGlja2FibGUvY29tcGxldGVkL2FjdGl2ZSBzdGF0ZSkgb24gZXZlcnkgc3RhdHVzIGZldGNoLlxuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMudXBkYXRlV29ya2Zsb3dTdGVwcyA9PT0gJ2Z1bmN0aW9uJyAmJiBzdGF0dXMgJiYgIXN0YXR1cy5fZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzLnVwZGF0ZVdvcmtmbG93U3RlcHMoc3RhdHVzKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0dXM7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09XG4vLyBTZXR0aW5nc1xuLy8gPT09PT09PT09PT09PT09PT09PT1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hTZXR0aW5ncygpIHtcbiAgcmV0dXJuIGFwaUNhbGwoJ0dFVCcsICcvYXBpL3NldHRpbmdzJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVNldHRpbmdzKHNldHRpbmdzKSB7XG4gIHJldHVybiBhcGlDYWxsKCdQVVQnLCAnL2FwaS9zZXR0aW5ncycsIHsgc2V0dGluZ3MgfSk7XG59XG5cbmV4cG9ydCB7XG4gIFN0b3JhZ2VLZXlzLFxuICBPV05FUl9UT0tFTl9LRVksXG4gIGFwaUNhbGwsXG4gIGdldFNlc3Npb25JZEZyb21VUkwsXG4gIGdldE93bmVyVG9rZW4sXG4gIGdldFNjb3BlZFRhYkRhdGFTdG9yYWdlS2V5LFxuICBzZXNzaW9uQXdhcmVGZXRjaCxcbiAgY3JlYXRlU2Vzc2lvbixcbiAgZmV0Y2hTdGF0dXMsXG4gIGZldGNoU2V0dGluZ3MsIHVwZGF0ZVNldHRpbmdzLFxufTtcblxuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvZmV0Y2gtdXRpbHMuanNcbiAqIEdsb2JhbCBmZXRjaCBpbnRlcmNlcHRvciwgNDA5LWNvbmZsaWN0IHJldHJ5IHF1ZXVlLCBMTE0gYnVzeSBvdmVybGF5LCBhbmRcbiAqIHRoZSBzZXRMb2FkaW5nIGhlbHBlciB0aGF0IGRyaXZlcyBidXR0b25zL3Byb2dyZXNzIGJhci9hYm9ydCBjb250cm9sbGVyLlxuICpcbiAqIERFUEVOREVOQ0lFUzogdWktY29yZS5qcyBleHBvcnRzICh0cmFwRm9jdXMgZXRjLikgYXZhaWxhYmxlIG9uIGdsb2JhbFRoaXMuXG4gKiAgICAgICAgICAgICAgIHNldExvYWRpbmcgY2FsbHMgX3VwZGF0ZUxMTU92ZXJsYXkgKGRlZmluZWQgaGVyZSkgYW5kXG4gKiAgICAgICAgICAgICAgIGFwcGVuZE1lc3NhZ2UgKGRlZmluZWQgaW4gbWVzc2FnZS1xdWV1ZS5qcywgb24gZ2xvYmFsVGhpcykuXG4gKi9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyA0MDkgQ29uZmxpY3QgcmV0cnkgcXVldWVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBfY29uZmxpY3RSZXRyeVF1ZXVlID0gW107XG5sZXQgICBfY29uZmxpY3RUaW1lcklkICAgID0gbnVsbDtcbmxldCAgIF9jb25mbGljdENvdW50ZG93biAgPSAwO1xuXG4vKiogUmV0dXJuIHRydWUgaWYgdGhpcyByZXF1ZXN0IHNob3VsZCBiZSBpbnRlcmNlcHRlZCBieSB0aGUgNDA5IGhhbmRsZXIuICovXG5mdW5jdGlvbiBfc2hvdWxkSGFuZGxlQnVzeUNvbmZsaWN0KGFyZ3MpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXdVcmwgPSB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgPyBhcmdzWzBdIDogYXJnc1swXT8udXJsO1xuICAgIGlmICghcmF3VXJsKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJhd1VybCwgd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgcmV0dXJuIHVybC5wYXRobmFtZSAhPT0gJy9hcGkvc2Vzc2lvbnMvY2xhaW0nICYmIHVybC5wYXRobmFtZSAhPT0gJy9hcGkvc2Vzc2lvbnMvdGFrZW92ZXInO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBIYW5kbGUgYSA0MDkgQ29uZmxpY3QgcmVzcG9uc2U6IHNob3cgdGhlIGFtYmVyIGJhbm5lciBhbmQgYXdhaXQgdXNlciBjaG9pY2UuXG4gKiBSZXR1cm5zIGEgUHJvbWlzZTxib29sZWFuPiBcdTIwMTQgdHJ1ZSBtZWFucyBcInJldHJ5XCIsIGZhbHNlIG1lYW5zIFwiZGlzbWlzc1wiLlxuICogQ2FsbGVkIGZyb20gYXBpLWNsaWVudC5qcyBpbnNpZGUgc2Vzc2lvbkF3YXJlRmV0Y2ggc28gdGhlIGZ1bGwgZmV0Y2ggcGlwZWxpbmVcbiAqIGlzIG93bmVkIGJ5IGEgc2luZ2xlIG1vZHVsZS1sZXZlbCB3aW5kb3cuZmV0Y2ggYXNzaWdubWVudCB0aGVyZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xSZXF1ZXN0fSBpbnB1dCAtIFRoZSByZXF1ZXN0IFVSTC9vYmplY3QgKHVzZWQgZm9yIHBhdGggZmlsdGVyaW5nKS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbml0IC0gVGhlIGZldGNoIGluaXQgb3B0aW9ucy5cbiAqIEBwYXJhbSB7UmVzcG9uc2V9IFtyZXNwb25zZV0gLSBUaGUgNDA5IHJlc3BvbnNlICh1c2VkIHRvIGNoZWNrIGNvbmZsaWN0X3R5cGUpLlxuICovXG5hc3luYyBmdW5jdGlvbiBoYW5kbGU0MDlDb25mbGljdChpbnB1dCwgaW5pdCwgcmVzcG9uc2UpIHtcbiAgaWYgKCFfc2hvdWxkSGFuZGxlQnVzeUNvbmZsaWN0KFtpbnB1dCwgaW5pdF0pKSByZXR1cm4gZmFsc2U7XG4gIGlmIChyZXNwb25zZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVzcG9uc2UuY2xvbmUoKS5qc29uKCk7XG4gICAgICBpZiAoYm9keSAmJiBib2R5LmNvbmZsaWN0X3R5cGUgJiYgYm9keS5jb25mbGljdF90eXBlICE9PSAnc2Vzc2lvbl9vd25lcnNoaXAnKSByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoXykgeyAvKiBub24tSlNPTiBib2R5IFx1MjAxNCBwcm9jZWVkIHRvIGJhbm5lciAqLyB9XG4gIH1cbiAgc2hvd1Nlc3Npb25Db25mbGljdEJhbm5lcigpO1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBfY29uZmxpY3RSZXRyeVF1ZXVlLnB1c2gocmVzb2x2ZSkpO1xufVxuXG5mdW5jdGlvbiBzaG93U2Vzc2lvbkNvbmZsaWN0QmFubmVyKCkge1xuICBjb25zdCBiYW5uZXIgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXNzaW9uLWNvbmZsaWN0LWJhbm5lcicpO1xuICBjb25zdCBiYW5uZXJUZXh0ICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25mbGljdC1iYW5uZXItdGV4dCcpO1xuICBjb25zdCBjb3VudGRvd25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25mbGljdC1jb3VudGRvd24nKTtcbiAgaWYgKCFiYW5uZXIpIHJldHVybjtcbiAgYmFubmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICBpZiAoX2NvbmZsaWN0VGltZXJJZCkgeyBjbGVhckludGVydmFsKF9jb25mbGljdFRpbWVySWQpOyBfY29uZmxpY3RUaW1lcklkID0gbnVsbDsgfVxuICBfY29uZmxpY3RDb3VudGRvd24gPSAzMDtcbiAgaWYgKGJhbm5lclRleHQpICBiYW5uZXJUZXh0LnRleHRDb250ZW50ICA9ICdcdTI2QTAgQW5vdGhlciBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MuIEF1dG8tcmV0cnlpbmcgaW4gJztcbiAgaWYgKGNvdW50ZG93bkVsKSBjb3VudGRvd25FbC50ZXh0Q29udGVudCA9IGAke19jb25mbGljdENvdW50ZG93bn1zXHUyMDI2YDtcbiAgX2NvbmZsaWN0VGltZXJJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICBfY29uZmxpY3RDb3VudGRvd24tLTtcbiAgICBpZiAoX2NvbmZsaWN0Q291bnRkb3duIDw9IDApIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoX2NvbmZsaWN0VGltZXJJZCk7IF9jb25mbGljdFRpbWVySWQgPSBudWxsO1xuICAgICAgY29uZmxpY3RSZXRyeU5vdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY291bnRkb3duRWwpIGNvdW50ZG93bkVsLnRleHRDb250ZW50ID0gYCR7X2NvbmZsaWN0Q291bnRkb3dufXNcdTIwMjZgO1xuICAgIH1cbiAgfSwgMTAwMCk7XG59XG5cbmZ1bmN0aW9uIGNvbmZsaWN0UmV0cnlOb3coKSB7XG4gIGlmIChfY29uZmxpY3RUaW1lcklkKSB7IGNsZWFySW50ZXJ2YWwoX2NvbmZsaWN0VGltZXJJZCk7IF9jb25mbGljdFRpbWVySWQgPSBudWxsOyB9XG4gIGNvbnN0IGJhbm5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXNzaW9uLWNvbmZsaWN0LWJhbm5lcicpO1xuICBpZiAoYmFubmVyKSBiYW5uZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgd2hpbGUgKF9jb25mbGljdFJldHJ5UXVldWUubGVuZ3RoKSBfY29uZmxpY3RSZXRyeVF1ZXVlLnNoaWZ0KCkodHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGNvbmZsaWN0RGlzbWlzcygpIHtcbiAgaWYgKF9jb25mbGljdFRpbWVySWQpIHsgY2xlYXJJbnRlcnZhbChfY29uZmxpY3RUaW1lcklkKTsgX2NvbmZsaWN0VGltZXJJZCA9IG51bGw7IH1cbiAgY29uc3QgYmFubmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nlc3Npb24tY29uZmxpY3QtYmFubmVyJyk7XG4gIGlmIChiYW5uZXIpIGJhbm5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB3aGlsZSAoX2NvbmZsaWN0UmV0cnlRdWV1ZS5sZW5ndGgpIF9jb25mbGljdFJldHJ5UXVldWUuc2hpZnQoKShmYWxzZSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTExNIGZldGNoIHdyYXBwZXIgKGF0dGFjaGVzIGFib3J0IHNpZ25hbClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBsbG1GZXRjaCh1cmwsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAod2luZG93Ll9jdXJyZW50QWJvcnRDb250cm9sbGVyKSB7XG4gICAgb3B0aW9ucy5zaWduYWwgPSB3aW5kb3cuX2N1cnJlbnRBYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICB9XG4gIHJldHVybiBmZXRjaCh1cmwsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBhYm9ydEN1cnJlbnRSZXF1ZXN0KCkge1xuICBpZiAod2luZG93Ll9jdXJyZW50QWJvcnRDb250cm9sbGVyKSB7XG4gICAgd2luZG93Ll9jdXJyZW50QWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgd2luZG93Ll9jdXJyZW50QWJvcnRDb250cm9sbGVyID0gbnVsbDtcbiAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICBpZiAodHlwZW9mIGFwcGVuZE1lc3NhZ2UgPT09ICdmdW5jdGlvbicpIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsICdcdTIzRjkgUmVxdWVzdCBzdG9wcGVkLicpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTExNIGJ1c3kgb3ZlcmxheVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmxldCBfbGxtRWxhcHNlZFRpbWVyID0gbnVsbDtcbmxldCBfbGxtU3RhcnRUaW1lICAgID0gbnVsbDtcblxuZnVuY3Rpb24gX3VwZGF0ZUxMTU92ZXJsYXkobG9hZGluZywgbGFiZWwpIHtcbiAgY29uc3Qgb3ZlcmxheSAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtLWJ1c3ktb3ZlcmxheScpO1xuICBjb25zdCBsYWJlbEVsICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG0tYnVzeS1sYWJlbCcpO1xuICBjb25zdCBlbGFwc2VkICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG0tYnVzeS1lbGFwc2VkJyk7XG4gIGlmICghb3ZlcmxheSkgcmV0dXJuO1xuXG4gIGlmIChsb2FkaW5nKSB7XG4gICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJyk7XG4gICAgb3ZlcmxheS5jbGFzc0xpc3QucmVtb3ZlKCdzbG93Jyk7XG4gICAgaWYgKGxhYmVsRWwpIGxhYmVsRWwudGV4dENvbnRlbnQgPSBsYWJlbCB8fCAnUmVhc29uaW5nXHUyMDI2JztcbiAgICBpZiAoZWxhcHNlZCkgIGVsYXBzZWQudGV4dENvbnRlbnQgPSAnMDowMCc7XG5cbiAgICBfbGxtU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjbGVhckludGVydmFsKF9sbG1FbGFwc2VkVGltZXIpO1xuICAgIF9sbG1FbGFwc2VkVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBzZWNzID0gTWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIF9sbG1TdGFydFRpbWUpIC8gMTAwMCk7XG4gICAgICBjb25zdCBtbSA9IFN0cmluZyhNYXRoLmZsb29yKHNlY3MgLyA2MCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICBjb25zdCBzcyA9IFN0cmluZyhzZWNzICUgNjApLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICBpZiAoZWxhcHNlZCkgZWxhcHNlZC50ZXh0Q29udGVudCA9IGAke21tfToke3NzfWA7XG4gICAgICBpZiAoc2VjcyA+PSAzMCAmJiAhb3ZlcmxheS5jbGFzc0xpc3QuY29udGFpbnMoJ3Nsb3cnKSkge1xuICAgICAgICBvdmVybGF5LmNsYXNzTGlzdC5hZGQoJ3Nsb3cnKTtcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfSBlbHNlIHtcbiAgICBjbGVhckludGVydmFsKF9sbG1FbGFwc2VkVGltZXIpO1xuICAgIF9sbG1FbGFwc2VkVGltZXIgPSBudWxsO1xuICAgIF9sbG1TdGFydFRpbWUgICAgPSBudWxsO1xuICAgIG92ZXJsYXkuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScsICdzbG93Jyk7XG4gICAgaWYgKGxhYmVsRWwpIGxhYmVsRWwudGV4dENvbnRlbnQgPSAnUmVhc29uaW5nXHUyMDI2JztcbiAgICBpZiAoZWxhcHNlZCkgIGVsYXBzZWQudGV4dENvbnRlbnQgPSAnMDowMCc7XG4gICAgX3JlZnJlc2hDb250ZXh0U3RhdHMoKTtcbiAgfVxufVxuXG4vLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciB0ZXN0cy9pbXBvcnRzIHRoYXQgc3RpbGwgcmVmZXJlbmNlIHRoZSBvbGQgbmFtZS5cbmZ1bmN0aW9uIF91cGRhdGVMTE1TdGF0dXNCYXIobG9hZGluZywgbGFiZWwpIHtcbiAgX3VwZGF0ZUxMTU92ZXJsYXkobG9hZGluZywgbGFiZWwpO1xuXG4gIGNvbnN0IGJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG0tc3RhdHVzLWJhcicpO1xuICBjb25zdCB0aGlua2luZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG0tdGhpbmtpbmcnKTtcbiAgY29uc3Qgc3RlcExhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbS1zdGVwLWxhYmVsJyk7XG4gIGNvbnN0IGFib3J0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbS1hYm9ydC1idG4nKTtcbiAgaWYgKCFiYXIpIHJldHVybjtcblxuICBpZiAobG9hZGluZykge1xuICAgIGJhci5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIGlmICh0aGlua2luZykgdGhpbmtpbmcuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICBpZiAoc3RlcExhYmVsKSBzdGVwTGFiZWwudGV4dENvbnRlbnQgPSBsYWJlbCB8fCAnUmVhc29uaW5nXHUyMDI2JztcbiAgICBpZiAoYWJvcnRCdG4pIHtcbiAgICAgIGFib3J0QnRuLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIGFib3J0QnRuLmRpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0aGlua2luZykgdGhpbmtpbmcuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBpZiAoYWJvcnRCdG4pIGFib3J0QnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgYmFyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3JlZnJlc2hDb250ZXh0U3RhdHMoKSB7XG4gIGNvbnN0IHRva2VuRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtLXRva2VuLWNvdW50Jyk7XG4gIGlmICghdG9rZW5FbCkgcmV0dXJuO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9jb250ZXh0LXN0YXRzJyk7XG4gICAgaWYgKCFyZXMub2spIHJldHVybjtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoIWRhdGEub2spIHJldHVybjtcbiAgICBjb25zdCBlc3QgICAgPSBkYXRhLmVzdGltYXRlZF90b2tlbnMgfHwgMDtcbiAgICBjb25zdCB3aW4gICAgPSBkYXRhLmNvbnRleHRfd2luZG93ICAgfHwgMTI4XzAwMDtcbiAgICBjb25zdCBleGFjdCAgPSBkYXRhLnRva2VuX3NvdXJjZSA9PT0gJ2V4YWN0JztcbiAgICBjb25zdCBwY3QgICAgPSBNYXRoLnJvdW5kKChlc3QgLyB3aW4pICogMTAwKTtcbiAgICBjb25zdCBlc3RTdHIgPSBlc3QgPj0gMTAwMCA/IGAkeyhlc3QgLyAxMDAwKS50b0ZpeGVkKDEpfUtgIDogYCR7ZXN0fWA7XG4gICAgY29uc3Qgd2luU3RyID0gd2luID49IDEwMDAgPyBgJHtNYXRoLnJvdW5kKHdpbiAvIDEwMDApfUtgICA6IGAke3dpbn1gO1xuICAgIHRva2VuRWwudGV4dENvbnRlbnQgPSBgJHtleGFjdCA/ICcnIDogJ34nfSR7ZXN0U3RyfSAvICR7d2luU3RyfSAoJHtwY3R9JSlgO1xuICB9IGNhdGNoIChfKSB7IC8qIHNpbGVudGx5IGlnbm9yZSAqLyB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTG9hZGluZyBzdGF0ZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHNldExvYWRpbmcobG9hZGluZywgbGFiZWwpIHtcbiAgaWYgKHR5cGVvZiBzdGF0ZU1hbmFnZXIgIT09ICd1bmRlZmluZWQnICYmIHN0YXRlTWFuYWdlcj8uc2V0TG9hZGluZykge1xuICAgIHN0YXRlTWFuYWdlci5zZXRMb2FkaW5nKGxvYWRpbmcpO1xuICB9XG5cbiAgaWYgKGxvYWRpbmcpIHtcbiAgICB3aW5kb3cuX2N1cnJlbnRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgLy8gRXhwYW5kIGNoYXQgcGFuZWwgaWYgY29sbGFwc2VkXG4gICAgY29uc3QgY2hhdEFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhdC1hcmVhJyk7XG4gICAgY29uc3Qgdmlld2VyQXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWV3ZXItYXJlYScpO1xuICAgIGNvbnN0IHRvZ2dsZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2dnbGUtY2hhdCcpO1xuICAgIGlmIChjaGF0QXJlYT8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb2xsYXBzZWQnKSkge1xuICAgICAgY2hhdEFyZWEuY2xhc3NMaXN0LnJlbW92ZSgnY29sbGFwc2VkJyk7XG4gICAgICB2aWV3ZXJBcmVhPy5jbGFzc0xpc3QucmVtb3ZlKCdleHBhbmRlZCcpO1xuICAgICAgaWYgKHRvZ2dsZUJ0bikgdG9nZ2xlQnRuLnRleHRDb250ZW50ID0gJ1x1MjVDMCc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5fY3VycmVudEFib3J0Q29udHJvbGxlciA9IG51bGw7XG4gIH1cblxuICBfdXBkYXRlTExNU3RhdHVzQmFyKGxvYWRpbmcsIGxhYmVsKTtcblxuICAvLyBPbmx5IGRpc2FibGUgYnV0dG9ucyBpbnNpZGUgdGhlIGNoYXQvaW50ZXJhY3Rpb24gYXJlYSBcdTIwMTQgbm90IHRoZSB3aG9sZSBwYWdlLlxuICBjb25zdCBjaGF0QXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0LWFyZWEnKTtcbiAgY29uc3Qgc2NvcGUgPSBjaGF0QXJlYSB8fCBkb2N1bWVudDtcbiAgc2NvcGUucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uJykuZm9yRWFjaChidG4gPT4geyBidG4uZGlzYWJsZWQgPSBsb2FkaW5nOyB9KTtcbiAgY29uc3Qgc3RvcEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG0tYnVzeS1zdG9wJyk7XG4gIGlmIChzdG9wQnRuKSBzdG9wQnRuLmRpc2FibGVkID0gZmFsc2U7XG5cbiAgbGV0IGJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2FkaW5nLXByb2dyZXNzLWJhcicpO1xuICBpZiAobG9hZGluZykge1xuICAgIGlmICghYmFyKSB7XG4gICAgICBiYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGJhci5pZCA9ICdsb2FkaW5nLXByb2dyZXNzLWJhcic7XG4gICAgICBkb2N1bWVudC5ib2R5LnByZXBlbmQoYmFyKTtcbiAgICB9XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsgYmFyLnN0eWxlLndpZHRoID0gJzcwJSc7IH0pO1xuICAgIGlmIChsYWJlbCkgYmFyLnRpdGxlID0gbGFiZWw7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJhcikge1xuICAgICAgYmFyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiBiYXIucmVtb3ZlKCksIDQwMCk7XG4gICAgfVxuICB9XG5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnN0ZXAuYWN0aXZlJykuZm9yRWFjaChlbCA9PiB7XG4gICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnbG9hZGluZy1zdGVwJywgbG9hZGluZyk7XG4gIH0pO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgRVMgbW9kdWxlIGV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICBoYW5kbGU0MDlDb25mbGljdCxcbiAgc2hvd1Nlc3Npb25Db25mbGljdEJhbm5lciwgY29uZmxpY3RSZXRyeU5vdywgY29uZmxpY3REaXNtaXNzLFxuICBsbG1GZXRjaCwgYWJvcnRDdXJyZW50UmVxdWVzdCxcbiAgX3VwZGF0ZUxMTVN0YXR1c0JhcixcbiAgX3VwZGF0ZUxMTU92ZXJsYXksIF9yZWZyZXNoQ29udGV4dFN0YXRzLFxuICBzZXRMb2FkaW5nLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogc3RhdGUtbWFuYWdlci5qc1xuICogTWFuYWdlcyBzZXNzaW9uIHN0YXRlLCBsb2NhbFN0b3JhZ2UgcGVyc2lzdGVuY2UsIGFuZCBzdGF0ZSBpbml0aWFsaXphdGlvbi5cbiAqIENlbnRyYWxpemVzIGFsbCBzdGF0ZSBtYW5hZ2VtZW50IGxvZ2ljIChjdXJyZW50VGFiLCBpbnRlcmFjdGl2ZVN0YXRlLCBzZXNzaW9uSWQsIGV0Yy4pXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdzdGF0ZS1tYW5hZ2VyJyk7XG5cbmltcG9ydCB7IFN0b3JhZ2VLZXlzIH0gZnJvbSAnLi9hcGktY2xpZW50LmpzJztcblxuLyoqXG4gKiBNaXJyb3Igb2YgdGhlIFB5dGhvbiBQaGFzZSBlbnVtIGluIHNjcmlwdHMvdXRpbHMvY29udmVyc2F0aW9uX21hbmFnZXIucHkuXG4gKiBQeXRob24gaXMgdGhlIFNPVVJDRSBPRiBUUlVUSCBcdTIwMTQgdXBkYXRlIGJvdGggZmlsZXMgdG9nZXRoZXIgd2hlbmV2ZXIgYWRkaW5nXG4gKiBvciByZW5hbWluZyBhIHBoYXNlLlxuICovXG5jb25zdCBQSEFTRVMgPSB7XG4gIElOSVQ6ICAgICAgICAgICAgICdpbml0JyxcbiAgSk9CX0FOQUxZU0lTOiAgICAgJ2pvYl9hbmFseXNpcycsXG4gIENVU1RPTUlaQVRJT046ICAgICdjdXN0b21pemF0aW9uJyxcbiAgUkVXUklURV9SRVZJRVc6ICAgJ3Jld3JpdGVfcmV2aWV3JyxcbiAgU1BFTExfQ0hFQ0s6ICAgICAgJ3NwZWxsX2NoZWNrJyxcbiAgR0VORVJBVElPTjogICAgICAgJ2dlbmVyYXRpb24nLFxuICBMQVlPVVRfUkVWSUVXOiAgICAnbGF5b3V0X3JldmlldycsXG4gIEZJTkFMX0dFTkVSQVRJT046ICdmaW5hbF9nZW5lcmF0aW9uJyxcbiAgUkVGSU5FTUVOVDogICAgICAgJ3JlZmluZW1lbnQnLFxufTtcblxuY29uc3QgUEhBU0VfVE9fU1RFUCA9IHtcbiAgW1BIQVNFUy5JTklUXTogICAgICAgICAgICAgJ2pvYicsXG4gIFtQSEFTRVMuSk9CX0FOQUxZU0lTXTogICAgICdhbmFseXNpcycsXG4gIFtQSEFTRVMuQ1VTVE9NSVpBVElPTl06ICAgICdjdXN0b21pemF0aW9ucycsXG4gIFtQSEFTRVMuUkVXUklURV9SRVZJRVddOiAgICdyZXdyaXRlJyxcbiAgW1BIQVNFUy5TUEVMTF9DSEVDS106ICAgICAgJ3NwZWxsJyxcbiAgW1BIQVNFUy5HRU5FUkFUSU9OXTogICAgICAgJ2xheW91dCcsXG4gIFtQSEFTRVMuTEFZT1VUX1JFVklFV106ICAgICdsYXlvdXQnLFxuICBbUEhBU0VTLkZJTkFMX0dFTkVSQVRJT05dOiAnZG93bmxvYWQnLFxuICBbUEhBU0VTLlJFRklORU1FTlRdOiAgICAgICAnZG93bmxvYWQnLFxufTtcblxuZnVuY3Rpb24gZ2V0V29ya2Zsb3dTdGVwRm9yUGhhc2UocGhhc2UpIHtcbiAgcmV0dXJuIFBIQVNFX1RPX1NURVBbcGhhc2VdIHx8ICdqb2InO1xufVxuXG4vKipcbiAqIFN0YWdlZCBnZW5lcmF0aW9uIHdvcmtmbG93IHBoYXNlcyAoR0FQLTIwIGltcGxlbWVudGF0aW9uKS5cbiAqIFRoZXNlIHRyYWNrIHRoZSBwcmV2aWV3L2xheW91dCByZXZpZXcgXHUyMTkyIGNvbmZpcm1lZCBcdTIxOTIgZmluYWwgcGlwZWxpbmVcbiAqIGluZGVwZW5kZW50bHkgb2YgdGhlIG1haW4gY29udmVyc2F0aW9uIFBIQVNFUyBhYm92ZS5cbiAqIEJhY2tlbmQgc291cmNlIG9mIHRydXRoIGlzIHNlc3Npb25fZGF0YVsnZ2VuZXJhdGlvbl9zdGF0ZSddWydwaGFzZSddLlxuICovXG5jb25zdCBHRU5FUkFUSU9OX1BIQVNFUyA9IHtcbiAgSURMRTogICAgICAgICAgICdpZGxlJyxcbiAgTEFZT1VUX1JFVklFVzogICdsYXlvdXRfcmV2aWV3JyxcbiAgQ09ORklSTUVEOiAgICAgICdjb25maXJtZWQnLFxuICBGSU5BTF9DT01QTEVURTogJ2ZpbmFsX2NvbXBsZXRlJyxcbn07XG5cbmNvbnN0IEdFTkVSQVRJT05fU1RBVEVfRVZFTlQgPSAnY3ZidWlsZGVyOmdlbmVyYXRpb24tc3RhdGUtY2hhbmdlZCc7XG5cbmZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRHZW5lcmF0aW9uU3RhdGUoKSB7XG4gIHJldHVybiB7XG4gICAgcGhhc2U6IEdFTkVSQVRJT05fUEhBU0VTLklETEUsXG4gICAgcHJldmlld0F2YWlsYWJsZTogZmFsc2UsXG4gICAgcHJldmlld091dHB1dHM6IG51bGwsXG4gICAgbGF5b3V0Q29uZmlybWVkOiBmYWxzZSxcbiAgICBwYWdlQ291bnRFc3RpbWF0ZTogbnVsbCxcbiAgICBwYWdlQ291bnRFeGFjdDogbnVsbCxcbiAgICBwYWdlQ291bnRDb25maWRlbmNlOiBudWxsLFxuICAgIHBhZ2VDb3VudFNvdXJjZTogbnVsbCxcbiAgICBwYWdlTmVlZHNFeGFjdFJlY2hlY2s6IGZhbHNlLFxuICAgIHBhZ2VXYXJuaW5nOiBmYWxzZSxcbiAgICBsYXlvdXRJbnN0cnVjdGlvbnNDb3VudDogMCxcbiAgICBmaW5hbEdlbmVyYXRlZEF0OiBudWxsLFxuICAgIHByZXZpZXdHZW5lcmF0ZWRBdDogbnVsbCxcbiAgICBwcmV2aWV3UmVxdWVzdElkOiBudWxsLFxuICAgIGNvbmZpcm1lZEF0OiBudWxsLFxuICAgIGNvbnRlbnRSZXZpc2lvbjogMCxcbiAgICBsYXN0UHJldmlld0NvbnRlbnRSZXZpc2lvbjogbnVsbCxcbiAgICBsYXN0RmluYWxDb250ZW50UmV2aXNpb246IG51bGwsXG4gICAgZGlydHlQaGFzZXM6IFtdLFxuICAgIGVhcmxpZXN0RGlydHlTdGVwOiBudWxsLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVSZXZpc2lvbih2YWx1ZSkge1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0TGFzdFJlbmRlcmVkQ29udGVudFJldmlzaW9uKHN0YXRlKSB7XG4gIGNvbnN0IHJldmlzaW9ucyA9IFtcbiAgICBub3JtYWxpemVSZXZpc2lvbihzdGF0ZS5sYXN0UHJldmlld0NvbnRlbnRSZXZpc2lvbiksXG4gICAgbm9ybWFsaXplUmV2aXNpb24oc3RhdGUubGFzdEZpbmFsQ29udGVudFJldmlzaW9uKSxcbiAgXS5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpO1xuICByZXR1cm4gcmV2aXNpb25zLmxlbmd0aCA+IDAgPyBNYXRoLm1heCguLi5yZXZpc2lvbnMpIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTZXNzaW9uSWQoKSB7XG4gIGNvbnN0IGNyeXB0b0FwaSA9IGdsb2JhbFRoaXMuY3J5cHRvO1xuICBpZiAoY3J5cHRvQXBpPy5yYW5kb21VVUlEKSB7XG4gICAgcmV0dXJuIGBzZXNzaW9uLSR7Y3J5cHRvQXBpLnJhbmRvbVVVSUQoKX1gO1xuICB9XG5cbiAgaWYgKGNyeXB0b0FwaT8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgY3J5cHRvQXBpLmdldFJhbmRvbVZhbHVlcyhieXRlcyk7XG4gICAgY29uc3QgdG9rZW4gPSBBcnJheS5mcm9tKGJ5dGVzLCBieXRlID0+IGJ5dGUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuICAgIHJldHVybiBgc2Vzc2lvbi0ke3Rva2VufWA7XG4gIH1cblxuICBsb2cud2FybignV2ViIENyeXB0byBBUEkgdW5hdmFpbGFibGU7IGZhbGxpbmcgYmFjayB0byB0aW1lc3RhbXAtcGx1cy1yYW5kb20gc2Vzc2lvbiBpZCBnZW5lcmF0aW9uLicpO1xuICByZXR1cm4gYHNlc3Npb24tJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMSl9YDtcbn1cblxuZnVuY3Rpb24gZ2V0TGF5b3V0RnJlc2huZXNzRnJvbVN0YXRlKHN0YXRlKSB7XG4gIGNvbnN0IHByZXZpZXdBdmFpbGFibGUgPSBCb29sZWFuKHN0YXRlLnByZXZpZXdBdmFpbGFibGUpO1xuICBjb25zdCBoYXNGaW5hbE91dHB1dHMgPSBCb29sZWFuKFxuICAgIHN0YXRlLmZpbmFsR2VuZXJhdGVkQXRcbiAgICAgIHx8IHN0YXRlLnBoYXNlID09PSBHRU5FUkFUSU9OX1BIQVNFUy5GSU5BTF9DT01QTEVURVxuICAgICAgfHwgbm9ybWFsaXplUmV2aXNpb24oc3RhdGUubGFzdEZpbmFsQ29udGVudFJldmlzaW9uKSAhPT0gbnVsbFxuICApO1xuXG4gIGlmICghcHJldmlld0F2YWlsYWJsZSkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93Q2hpcDogZmFsc2UsXG4gICAgICBpc1N0YWxlOiBmYWxzZSxcbiAgICAgIGlzQ3JpdGljYWw6IGZhbHNlLFxuICAgICAgaGFzRmluYWxPdXRwdXRzLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgYXJpYUxhYmVsOiAnJyxcbiAgICAgIHRvbmU6ICdoaWRkZW4nLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBjb250ZW50UmV2aXNpb24gPSBub3JtYWxpemVSZXZpc2lvbihzdGF0ZS5jb250ZW50UmV2aXNpb24pID8/IDA7XG4gIGNvbnN0IGxhc3RSZW5kZXJlZFJldmlzaW9uID0gZ2V0TGFzdFJlbmRlcmVkQ29udGVudFJldmlzaW9uKHN0YXRlKTtcbiAgY29uc3QgaXNTdGFsZSA9IGxhc3RSZW5kZXJlZFJldmlzaW9uICE9PSBudWxsICYmIGNvbnRlbnRSZXZpc2lvbiA+IGxhc3RSZW5kZXJlZFJldmlzaW9uO1xuICBjb25zdCBpc0NyaXRpY2FsID0gaXNTdGFsZSAmJiBoYXNGaW5hbE91dHB1dHM7XG5cbiAgaWYgKGlzQ3JpdGljYWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd0NoaXA6IHRydWUsXG4gICAgICBpc1N0YWxlLFxuICAgICAgaXNDcml0aWNhbCxcbiAgICAgIGhhc0ZpbmFsT3V0cHV0cyxcbiAgICAgIGxhYmVsOiAnRmlsZXMgb3V0ZGF0ZWQnLFxuICAgICAgYXJpYUxhYmVsOiAnRmlsZXMgb3V0ZGF0ZWQuIEFjdGl2YXRlIHRvIHJldmlldyBsYXlvdXQgYW5kIHJlZ2VuZXJhdGUgb3V0cHV0cy4nLFxuICAgICAgdG9uZTogJ2NyaXRpY2FsJyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGlzU3RhbGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd0NoaXA6IHRydWUsXG4gICAgICBpc1N0YWxlLFxuICAgICAgaXNDcml0aWNhbCxcbiAgICAgIGhhc0ZpbmFsT3V0cHV0cyxcbiAgICAgIGxhYmVsOiAnTGF5b3V0IG91dGRhdGVkJyxcbiAgICAgIGFyaWFMYWJlbDogJ0xheW91dCBvdXRkYXRlZC4gQWN0aXZhdGUgdG8gcmV2aWV3IGFuZCByZWdlbmVyYXRlIHByZXZpZXcuJyxcbiAgICAgIHRvbmU6ICdzdGFsZScsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2hvd0NoaXA6IHRydWUsXG4gICAgaXNTdGFsZSxcbiAgICBpc0NyaXRpY2FsLFxuICAgIGhhc0ZpbmFsT3V0cHV0cyxcbiAgICBsYWJlbDogJ0xheW91dCBjdXJyZW50JyxcbiAgICBhcmlhTGFiZWw6ICdMYXlvdXQgY3VycmVudC4gUHJldmlldyBtYXRjaGVzIGxhdGVzdCBjb250ZW50LicsXG4gICAgdG9uZTogJ2ZyZXNoJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1pdEdlbmVyYXRpb25TdGF0ZUNoYW5nZWQoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KEdFTkVSQVRJT05fU1RBVEVfRVZFTlQsIHtcbiAgICBkZXRhaWw6IHtcbiAgICAgIGdlbmVyYXRpb25TdGF0ZTogeyAuLi5nZW5lcmF0aW9uU3RhdGUgfSxcbiAgICAgIGxheW91dEZyZXNobmVzczogZ2V0TGF5b3V0RnJlc2huZXNzRnJvbVN0YXRlKGdlbmVyYXRpb25TdGF0ZSksXG4gICAgfSxcbiAgfSkpO1xufVxuXG4vLyBHbG9iYWwgc3RhdGUgdmFyaWFibGVzIChtb3ZlZCBpbnRvIG1vZHVsZSBmb3IgY2xhcml0eSlcbmxldCBjdXJyZW50VGFiID0gJ2pvYic7XG5sZXQgaXNMb2FkaW5nID0gZmFsc2U7XG5sZXQgdGFiRGF0YSA9IHtcbiAgYW5hbHlzaXM6IG51bGwsXG4gIGN1c3RvbWl6YXRpb25zOiBudWxsLFxuICBjdjogbnVsbFxufTtcbmxldCBpbnRlcmFjdGl2ZVN0YXRlID0ge1xuICBpc1Jldmlld2luZzogZmFsc2UsXG4gIGN1cnJlbnRJbmRleDogMCxcbiAgdHlwZTogbnVsbCwgLy8gJ2V4cGVyaWVuY2VzJyBvciAnc2tpbGxzJ1xuICBkYXRhOiBudWxsXG59O1xubGV0IHNlc3Npb25JZCA9IG51bGw7XG5sZXQgbGFzdEtub3duUGhhc2UgPSBQSEFTRVMuSU5JVDtcbmxldCBpc1JlY29ubmVjdGluZyA9IGZhbHNlO1xuY29uc3QgX3BoYXNlQ2hhbmdlTGlzdGVuZXJzID0gW107XG4vLyBDdXJyZW50IG1vZGVsL3Byb3ZpZGVyIHNlbGVjdGlvbiAocGVyc2lzdGVkIHRvIGxvY2FsU3RvcmFnZSlcbmxldCBjdXJyZW50TW9kZWxQcm92aWRlciA9IG51bGw7XG5sZXQgY3VycmVudE1vZGVsTmFtZSA9IG51bGw7XG5cblxuLy8gU3RhZ2VkIGdlbmVyYXRpb24gc3RhdGUgKEdBUC0yMCk6IHRyYWNrcyBwcmV2aWV3IFx1MjE5MiBjb25maXJtIFx1MjE5MiBmaW5hbCBwaXBlbGluZS5cbi8vIFN5bmNlZCBmcm9tIC9hcGkvY3YvZ2VuZXJhdGlvbi1zdGF0ZSBvbiBwYWdlIGxvYWQgYW5kIGFmdGVyIGtleSB0cmFuc2l0aW9ucy5cbmxldCBnZW5lcmF0aW9uU3RhdGUgPSBjcmVhdGVEZWZhdWx0R2VuZXJhdGlvblN0YXRlKCk7XG5cbi8vIEFUUyBzY29yZSBzdGF0ZSAoR0FQLTIxKTogY2FjaGVkIHNjb3JlIGZyb20gL2FwaS9jdi9hdHMtc2NvcmUuXG4vLyBOdWxsIHVudGlsIGZpcnN0IHNjb3JlIGlzIGZldGNoZWQuXG5sZXQgYXRzU2NvcmUgPSBudWxsO1xuXG4vLyBFeHBvcnQgc3RhdGUgZ2V0dGVycy9zZXR0ZXJzXG5jb25zdCBzdGF0ZU1hbmFnZXIgPSB7XG4gIC8vIFRhYiBzdGF0ZVxuICBnZXRDdXJyZW50VGFiOiAoKSA9PiBjdXJyZW50VGFiLFxuICBzZXRDdXJyZW50VGFiOiAodGFiKSA9PiB7IGN1cnJlbnRUYWIgPSB0YWI7IHNhdmVTdGF0ZVRvTG9jYWxTdG9yYWdlKCk7IH0sXG4gIGdldEN1cnJlbnRTdGFnZTogKCkgPT4gZ2V0V29ya2Zsb3dTdGVwRm9yUGhhc2UobGFzdEtub3duUGhhc2UpLFxuXG4gIC8vIExvYWRpbmcgc3RhdGVcbiAgaXNMb2FkaW5nOiAoKSA9PiBpc0xvYWRpbmcsXG4gIHNldExvYWRpbmc6IChsb2FkaW5nKSA9PiB7XG4gICAgaXNMb2FkaW5nID0gbG9hZGluZztcbiAgfSxcblxuICAvLyBUYWIgZGF0YSAoYW5hbHlzaXMsIGN1c3RvbWl6YXRpb25zLCBDVilcbiAgZ2V0VGFiRGF0YTogKHRhYikgPT4gdGFiRGF0YVt0YWJdLFxuICBnZXRBbGxUYWJEYXRhOiAoKSA9PiAoeyAuLi50YWJEYXRhIH0pLFxuICBzZXRUYWJEYXRhOiAodGFiLCBkYXRhKSA9PiB7IHRhYkRhdGFbdGFiXSA9IGRhdGE7IHNhdmVTdGF0ZVRvTG9jYWxTdG9yYWdlKCk7IH0sXG5cbiAgLy8gSW50ZXJhY3RpdmUgc3RhdGUgKGZvciBleHBlcmllbmNlL3NraWxsIHNlbGVjdGlvbiByZXZpZXcpXG4gIGdldEludGVyYWN0aXZlU3RhdGU6ICgpID0+IGludGVyYWN0aXZlU3RhdGUsXG4gIHNldEludGVyYWN0aXZlU3RhdGU6IChzdGF0ZSkgPT4geyBpbnRlcmFjdGl2ZVN0YXRlID0geyAuLi5pbnRlcmFjdGl2ZVN0YXRlLCAuLi5zdGF0ZSB9OyBzYXZlU3RhdGVUb0xvY2FsU3RvcmFnZSgpOyB9LFxuXG4gIC8vIFJlY29ubmVjdCBzdGF0ZVxuICBpc1JlY29ubmVjdGluZzogKCkgPT4gaXNSZWNvbm5lY3RpbmcsXG4gIHNldElzUmVjb25uZWN0aW5nOiAocmVjb25uZWN0aW5nKSA9PiB7IGlzUmVjb25uZWN0aW5nID0gQm9vbGVhbihyZWNvbm5lY3RpbmcpOyB9LFxuXG4gIC8vIFNlc3Npb24gbWFuYWdlbWVudFxuICBnZXRTZXNzaW9uSWQ6ICgpID0+IHNlc3Npb25JZCxcbiAgc2V0U2Vzc2lvbklkOiAoaWQpID0+IHsgc2Vzc2lvbklkID0gaWQ7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLlNFU1NJT05fSUQsIGlkKTsgfSxcblxuICAvLyBNb2RlbC9wcm92aWRlciBzZWxlY3Rpb25cbiAgZ2V0Q3VycmVudE1vZGVsUHJvdmlkZXI6ICgpID0+IGN1cnJlbnRNb2RlbFByb3ZpZGVyLFxuICBnZXRDdXJyZW50TW9kZWxOYW1lOiAoKSA9PiBjdXJyZW50TW9kZWxOYW1lLFxuICBzZXRDdXJyZW50TW9kZWw6IChwcm92aWRlciwgbW9kZWwpID0+IHsgY3VycmVudE1vZGVsUHJvdmlkZXIgPSBwcm92aWRlciB8fCBudWxsOyBjdXJyZW50TW9kZWxOYW1lID0gbW9kZWwgfHwgbnVsbDsgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKTsgfSxcblxuICAvLyBQaGFzZSB0cmFja2luZ1xuICBnZXRQaGFzZTogKCkgPT4gbGFzdEtub3duUGhhc2UsXG4gIHNldFBoYXNlOiAocGhhc2UpID0+IHtcbiAgICBsYXN0S25vd25QaGFzZSA9IHBoYXNlO1xuICAgIHNhdmVTdGF0ZVRvTG9jYWxTdG9yYWdlKCk7XG4gICAgX3BoYXNlQ2hhbmdlTGlzdGVuZXJzLmZvckVhY2goZm4gPT4geyB0cnkgeyBmbihwaGFzZSk7IH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH0gfSk7XG4gIH0sXG4gIG9uUGhhc2VDaGFuZ2U6IChmbikgPT4geyBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSBfcGhhc2VDaGFuZ2VMaXN0ZW5lcnMucHVzaChmbik7IH0sXG4gIGdldFdvcmtmbG93U3RlcDogKCkgPT4gZ2V0V29ya2Zsb3dTdGVwRm9yUGhhc2UobGFzdEtub3duUGhhc2UpLFxuXG4gIC8vIFBvc3QtYW5hbHlzaXMgcXVlc3Rpb25zXG4gIGdldFBvc3RBbmFseXNpc1F1ZXN0aW9uczogKCkgPT4gd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyB8fCBbXSxcbiAgc2V0UG9zdEFuYWx5c2lzUXVlc3Rpb25zOiAocXVlc3Rpb25zKSA9PiB7IHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgPSBxdWVzdGlvbnM7IH0sXG5cbiAgLy8gUXVlc3Rpb24gYW5zd2Vyc1xuICBnZXRRdWVzdGlvbkFuc3dlcnM6ICgpID0+IHdpbmRvdy5xdWVzdGlvbkFuc3dlcnMgfHwge30sXG4gIHNldFF1ZXN0aW9uQW5zd2VyczogKGFuc3dlcnMpID0+IHsgd2luZG93LnF1ZXN0aW9uQW5zd2VycyA9IGFuc3dlcnM7IH0sXG5cbiAgLy8gUGVuZGluZyByZWNvbW1lbmRhdGlvbnNcbiAgZ2V0UGVuZGluZ1JlY29tbWVuZGF0aW9uczogKCkgPT4gd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgfHwgbnVsbCxcbiAgc2V0UGVuZGluZ1JlY29tbWVuZGF0aW9uczogKHJlYykgPT4geyB3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucyA9IHJlYzsgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKTsgfSxcblxuICAvLyBBVFMgc2NvcmUgc3RhdGUgKEdBUC0yMSlcbiAgZ2V0QXRzU2NvcmU6ICgpID0+IGF0c1Njb3JlLFxuICBzZXRBdHNTY29yZTogKHNjb3JlKSA9PiB7IGF0c1Njb3JlID0gc2NvcmU7IHNhdmVTdGF0ZVRvTG9jYWxTdG9yYWdlKCk7IH0sXG4gIGNsZWFyQXRzU2NvcmU6ICgpID0+IHsgYXRzU2NvcmUgPSBudWxsOyBzYXZlU3RhdGVUb0xvY2FsU3RvcmFnZSgpOyB9LFxuXG4gIC8vIFN0YWdlZCBnZW5lcmF0aW9uIHN0YXRlIChHQVAtMjApXG4gIGdldEdlbmVyYXRpb25TdGF0ZTogKCkgPT4gZ2VuZXJhdGlvblN0YXRlLFxuICBnZXRMYXlvdXRGcmVzaG5lc3M6ICgpID0+IGdldExheW91dEZyZXNobmVzc0Zyb21TdGF0ZShnZW5lcmF0aW9uU3RhdGUpLFxuICBzZXRHZW5lcmF0aW9uU3RhdGU6ICh1cGRhdGUpID0+IHtcbiAgICBnZW5lcmF0aW9uU3RhdGUgPSB7IC4uLmdlbmVyYXRpb25TdGF0ZSwgLi4udXBkYXRlIH07XG4gICAgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgICBlbWl0R2VuZXJhdGlvblN0YXRlQ2hhbmdlZCgpO1xuICB9LFxuICBtYXJrQ29udGVudENoYW5nZWQ6ICgpID0+IHtcbiAgICBnZW5lcmF0aW9uU3RhdGUgPSB7XG4gICAgICAuLi5nZW5lcmF0aW9uU3RhdGUsXG4gICAgICBjb250ZW50UmV2aXNpb246IChub3JtYWxpemVSZXZpc2lvbihnZW5lcmF0aW9uU3RhdGUuY29udGVudFJldmlzaW9uKSA/PyAwKSArIDEsXG4gICAgfTtcbiAgICBzYXZlU3RhdGVUb0xvY2FsU3RvcmFnZSgpO1xuICAgIGVtaXRHZW5lcmF0aW9uU3RhdGVDaGFuZ2VkKCk7XG4gIH0sXG4gIG1hcmtQcmV2aWV3R2VuZXJhdGVkOiAodXBkYXRlID0ge30pID0+IHtcbiAgICBjb25zdCBjb250ZW50UmV2aXNpb24gPSBub3JtYWxpemVSZXZpc2lvbihnZW5lcmF0aW9uU3RhdGUuY29udGVudFJldmlzaW9uKSA/PyAwO1xuICAgIGdlbmVyYXRpb25TdGF0ZSA9IHtcbiAgICAgIC4uLmdlbmVyYXRpb25TdGF0ZSxcbiAgICAgIC4uLnVwZGF0ZSxcbiAgICAgIHBoYXNlOiBHRU5FUkFUSU9OX1BIQVNFUy5MQVlPVVRfUkVWSUVXLFxuICAgICAgcHJldmlld0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGxheW91dENvbmZpcm1lZDogZmFsc2UsXG4gICAgICBsYXN0UHJldmlld0NvbnRlbnRSZXZpc2lvbjogY29udGVudFJldmlzaW9uLFxuICAgIH07XG4gICAgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgICBlbWl0R2VuZXJhdGlvblN0YXRlQ2hhbmdlZCgpO1xuICB9LFxuICBtYXJrTGF5b3V0Q29uZmlybWVkOiAodXBkYXRlID0ge30pID0+IHtcbiAgICBnZW5lcmF0aW9uU3RhdGUgPSB7XG4gICAgICAuLi5nZW5lcmF0aW9uU3RhdGUsXG4gICAgICAuLi51cGRhdGUsXG4gICAgICBwaGFzZTogR0VORVJBVElPTl9QSEFTRVMuQ09ORklSTUVELFxuICAgICAgbGF5b3V0Q29uZmlybWVkOiB0cnVlLFxuICAgIH07XG4gICAgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgICBlbWl0R2VuZXJhdGlvblN0YXRlQ2hhbmdlZCgpO1xuICB9LFxuICBtYXJrRmluYWxHZW5lcmF0ZWQ6IChnZW5lcmF0ZWRBdCA9IG51bGwsIHVwZGF0ZSA9IHt9KSA9PiB7XG4gICAgY29uc3QgY29udGVudFJldmlzaW9uID0gbm9ybWFsaXplUmV2aXNpb24oZ2VuZXJhdGlvblN0YXRlLmNvbnRlbnRSZXZpc2lvbikgPz8gMDtcbiAgICBnZW5lcmF0aW9uU3RhdGUgPSB7XG4gICAgICAuLi5nZW5lcmF0aW9uU3RhdGUsXG4gICAgICAuLi51cGRhdGUsXG4gICAgICBwaGFzZTogR0VORVJBVElPTl9QSEFTRVMuRklOQUxfQ09NUExFVEUsXG4gICAgICBsYXlvdXRDb25maXJtZWQ6IHRydWUsXG4gICAgICBmaW5hbEdlbmVyYXRlZEF0OiBnZW5lcmF0ZWRBdCB8fCB1cGRhdGUuZmluYWxHZW5lcmF0ZWRBdCB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXN0RmluYWxDb250ZW50UmV2aXNpb246IGNvbnRlbnRSZXZpc2lvbixcbiAgICB9O1xuICAgIHNhdmVTdGF0ZVRvTG9jYWxTdG9yYWdlKCk7XG4gICAgZW1pdEdlbmVyYXRpb25TdGF0ZUNoYW5nZWQoKTtcbiAgfSxcbiAgcmVzZXRHZW5lcmF0aW9uU3RhdGU6ICgpID0+IHtcbiAgICBnZW5lcmF0aW9uU3RhdGUgPSBjcmVhdGVEZWZhdWx0R2VuZXJhdGlvblN0YXRlKCk7XG4gICAgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgICBlbWl0R2VuZXJhdGlvblN0YXRlQ2hhbmdlZCgpO1xuICB9LFxuICBzZXREaXJ0eVBoYXNlczogKHBoYXNlcywgZWFybGllc3RTdGVwKSA9PiB7XG4gICAgZ2VuZXJhdGlvblN0YXRlID0ge1xuICAgICAgLi4uZ2VuZXJhdGlvblN0YXRlLFxuICAgICAgZGlydHlQaGFzZXM6ICAgICAgIEFycmF5LmlzQXJyYXkocGhhc2VzKSA/IHBoYXNlcyA6IFtdLFxuICAgICAgZWFybGllc3REaXJ0eVN0ZXA6IGVhcmxpZXN0U3RlcCB8fCBudWxsLFxuICAgIH07XG4gICAgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgICBlbWl0R2VuZXJhdGlvblN0YXRlQ2hhbmdlZCgpO1xuICB9LFxuICBjbGVhckRpcnR5UGhhc2VzOiAoKSA9PiB7XG4gICAgZ2VuZXJhdGlvblN0YXRlID0ge1xuICAgICAgLi4uZ2VuZXJhdGlvblN0YXRlLFxuICAgICAgZGlydHlQaGFzZXM6ICAgICAgIFtdLFxuICAgICAgZWFybGllc3REaXJ0eVN0ZXA6IG51bGwsXG4gICAgfTtcbiAgICBzYXZlU3RhdGVUb0xvY2FsU3RvcmFnZSgpO1xuICAgIGVtaXRHZW5lcmF0aW9uU3RhdGVDaGFuZ2VkKCk7XG4gIH0sXG4gIGdldERpcnR5UGhhc2VzOiAgICAgICAoKSA9PiBnZW5lcmF0aW9uU3RhdGUuZGlydHlQaGFzZXMgfHwgW10sXG4gIGdldEVhcmxpZXN0RGlydHlTdGVwOiAoKSA9PiBnZW5lcmF0aW9uU3RhdGUuZWFybGllc3REaXJ0eVN0ZXAgfHwgbnVsbCxcbn07XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBmcmVzaCBzdGF0ZSBvYmplY3Qgd2l0aCBhbGwgZGVmYXVsdCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgY3VycmVudFRhYiA9ICdqb2InO1xuICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgdGFiRGF0YSA9IHtcbiAgICBhbmFseXNpczogbnVsbCxcbiAgICBjdXN0b21pemF0aW9uczogbnVsbCxcbiAgICBjdjogbnVsbFxuICB9O1xuICBpbnRlcmFjdGl2ZVN0YXRlID0ge1xuICAgIGlzUmV2aWV3aW5nOiBmYWxzZSxcbiAgICBjdXJyZW50SW5kZXg6IDAsXG4gICAgdHlwZTogbnVsbCxcbiAgICBkYXRhOiBudWxsXG4gIH07XG4gIHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgPSBbXTtcbiAgd2luZG93LnF1ZXN0aW9uQW5zd2VycyA9IHt9O1xuICBsYXN0S25vd25QaGFzZSA9IFBIQVNFUy5JTklUO1xuICBnZW5lcmF0aW9uU3RhdGUgPSBjcmVhdGVEZWZhdWx0R2VuZXJhdGlvblN0YXRlKCk7XG5cbiAgLy8gR2V0IG9yIGdlbmVyYXRlIHNlc3Npb24gSURcbiAgbGV0IHN0b3JlZElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU3RvcmFnZUtleXMuU0VTU0lPTl9JRCk7XG4gIGlmICghc3RvcmVkSWQpIHtcbiAgICBzdG9yZWRJZCA9IGdlbmVyYXRlU2Vzc2lvbklkKCk7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU3RvcmFnZUtleXMuU0VTU0lPTl9JRCwgc3RvcmVkSWQpO1xuICB9XG4gIHNlc3Npb25JZCA9IHN0b3JlZElkO1xuXG4gIHNhdmVTdGF0ZVRvTG9jYWxTdG9yYWdlKCk7XG4gIGVtaXRHZW5lcmF0aW9uU3RhdGVDaGFuZ2VkKCk7XG59XG5cbi8qKlxuICogTG9hZCBzdGF0ZSBmcm9tIGJyb3dzZXIgbG9jYWxTdG9yYWdlLlxuICovXG5mdW5jdGlvbiBsb2FkU3RhdGVGcm9tTG9jYWxTdG9yYWdlKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU3RvcmFnZUtleXMuVEFCX0RBVEEpO1xuICAgIGlmICghc2F2ZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHNhdmVkKTtcblxuICAgIC8vIE9ubHkgcmVzdG9yZSBpZiBkYXRhIGlzIHJlY2VudCAod2l0aGluIDI0IGhvdXJzKVxuICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSAoZGF0YS50aW1lc3RhbXAgfHwgMCk7XG4gICAgaWYgKGFnZSA+IDI0ICogNjAgKiA2MCAqIDEwMDApIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFN0b3JhZ2VLZXlzLlRBQl9EQVRBKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIHRhYiBkYXRhXG4gICAgaWYgKGRhdGEudGFiRGF0YSkge1xuICAgICAgdGFiRGF0YSA9IHsgLi4udGFiRGF0YSwgLi4uZGF0YS50YWJEYXRhIH07XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuY3VycmVudFRhYikge1xuICAgICAgY3VycmVudFRhYiA9IGRhdGEuY3VycmVudFRhYjtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIGludGVyYWN0aXZlIHN0YXRlXG4gICAgaWYgKGRhdGEuaW50ZXJhY3RpdmVTdGF0ZSkge1xuICAgICAgaW50ZXJhY3RpdmVTdGF0ZSA9IHsgLi4uaW50ZXJhY3RpdmVTdGF0ZSwgLi4uZGF0YS5pbnRlcmFjdGl2ZVN0YXRlIH07XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBwZW5kaW5nIHJlY29tbWVuZGF0aW9uc1xuICAgIGlmIChkYXRhLnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMpIHtcbiAgICAgIHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zID0gZGF0YS5wZW5kaW5nUmVjb21tZW5kYXRpb25zO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgc2F2ZWQgbW9kZWwvcHJvdmlkZXIgc2VsZWN0aW9uXG4gICAgaWYgKGRhdGEuY3VycmVudE1vZGVsUHJvdmlkZXIpIHtcbiAgICAgIGN1cnJlbnRNb2RlbFByb3ZpZGVyID0gZGF0YS5jdXJyZW50TW9kZWxQcm92aWRlcjtcbiAgICB9XG4gICAgaWYgKGRhdGEuY3VycmVudE1vZGVsTmFtZSkge1xuICAgICAgY3VycmVudE1vZGVsTmFtZSA9IGRhdGEuY3VycmVudE1vZGVsTmFtZTtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIHBvc3QtYW5hbHlzaXMgc3RhdGVcbiAgICBpZiAoZGF0YS5wb3N0QW5hbHlzaXNRdWVzdGlvbnMpIHtcbiAgICAgIHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgPSBkYXRhLnBvc3RBbmFseXNpc1F1ZXN0aW9ucztcbiAgICB9XG4gICAgaWYgKGRhdGEucXVlc3Rpb25BbnN3ZXJzKSB7XG4gICAgICB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzID0gZGF0YS5xdWVzdGlvbkFuc3dlcnM7XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBwaGFzZVxuICAgIGlmIChkYXRhLmxhc3RLbm93blBoYXNlKSB7XG4gICAgICBsYXN0S25vd25QaGFzZSA9IGRhdGEubGFzdEtub3duUGhhc2U7XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBzdGFnZWQgZ2VuZXJhdGlvbiBzdGF0ZVxuICAgIGlmIChkYXRhLmdlbmVyYXRpb25TdGF0ZSkge1xuICAgICAgZ2VuZXJhdGlvblN0YXRlID0geyAuLi5nZW5lcmF0aW9uU3RhdGUsIC4uLmRhdGEuZ2VuZXJhdGlvblN0YXRlIH07XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBBVFMgc2NvcmVcbiAgICBpZiAoZGF0YS5hdHNTY29yZSkge1xuICAgICAgYXRzU2NvcmUgPSBkYXRhLmF0c1Njb3JlO1xuICAgIH1cblxuICAgIGVtaXRHZW5lcmF0aW9uU3RhdGVDaGFuZ2VkKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLndhcm4oJ0ZhaWxlZCB0byBsb2FkIHN0YXRlIGZyb20gbG9jYWxTdG9yYWdlOicsIGVycm9yKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBTYXZlIGN1cnJlbnQgc3RhdGUgdG8gYnJvd3NlciBsb2NhbFN0b3JhZ2UuXG4gKi9cbmZ1bmN0aW9uIHNhdmVTdGF0ZVRvTG9jYWxTdG9yYWdlKCkge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFUb1NhdmUgPSB7XG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICB0YWJEYXRhLFxuICAgICAgaW50ZXJhY3RpdmVTdGF0ZSxcbiAgICAgIHBlbmRpbmdSZWNvbW1lbmRhdGlvbnM6IHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zLFxuICAgICAgcG9zdEFuYWx5c2lzUXVlc3Rpb25zOiB3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zLFxuICAgICAgcXVlc3Rpb25BbnN3ZXJzOiB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzLFxuICAgICAgbGFzdEtub3duUGhhc2UsXG4gICAgICBjdXJyZW50VGFiLFxuICAgICAgLy8gUGVyc2lzdCBsYXN0LXNlbGVjdGVkIG1vZGVsL3Byb3ZpZGVyIHNvIFVJIHNlbGVjdGlvbnMgc3Vydml2ZSByZWxvYWRzXG4gICAgICBjdXJyZW50TW9kZWxQcm92aWRlcixcbiAgICAgIGN1cnJlbnRNb2RlbE5hbWUsXG4gICAgICBnZW5lcmF0aW9uU3RhdGUsXG4gICAgICBhdHNTY29yZSxcbiAgICB9O1xuXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU3RvcmFnZUtleXMuVEFCX0RBVEEsIEpTT04uc3RyaW5naWZ5KGRhdGFUb1NhdmUpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cud2FybignRmFpbGVkIHRvIHNhdmUgc3RhdGUgdG8gbG9jYWxTdG9yYWdlOicsIGVycm9yKTtcbiAgfVxufVxuXG4vKipcbiAqIENsZWFyIGFsbCBzdGF0ZSAob24gbmV3IHNlc3Npb24gb3IgcmVzZXQgYWN0aW9uKS5cbiAqL1xuZnVuY3Rpb24gY2xlYXJTdGF0ZSgpIHtcbiAgaW5pdGlhbGl6ZVN0YXRlKCk7XG4gIE9iamVjdC52YWx1ZXMoU3RvcmFnZUtleXMpLmZvckVhY2goa2V5ID0+IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSkpO1xufVxuXG4vLyBUaGUgYXV0aG9yaXRhdGl2ZSByZXN0b3JlU2Vzc2lvbi9yZXN0b3JlQmFja2VuZFN0YXRlL2xvYWRTZXNzaW9uRmlsZVxuLy8gaW1wbGVtZW50YXRpb25zIGxpdmUgaW4gYHdlYi9hcHAuanNgLiBSZW1vdmUgZHVwbGljYXRlIGltcGxlbWVudGF0aW9uc1xuLy8gZnJvbSB0aGlzIG1vZHVsZSB0byBhdm9pZCBjb25mbGljdGluZyBiZWhhdmlvciBhbmQgZW5zdXJlIGEgc2luZ2xlXG4vLyByZXN0b3JlIHBhdGggaXMgdXNlZCBieSB0aGUgYXBwbGljYXRpb24uXG5cbmV4cG9ydCB7XG4gIFBIQVNFUyxcbiAgUEhBU0VfVE9fU1RFUCxcbiAgR0VORVJBVElPTl9QSEFTRVMsXG4gIEdFTkVSQVRJT05fU1RBVEVfRVZFTlQsXG4gIHN0YXRlTWFuYWdlcixcbiAgZ2V0V29ya2Zsb3dTdGVwRm9yUGhhc2UsXG4gIGluaXRpYWxpemVTdGF0ZSwgbG9hZFN0YXRlRnJvbUxvY2FsU3RvcmFnZSwgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UsXG4gIGNsZWFyU3RhdGUsXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvcHJvdmlkZXItaW5mby5qcyBcdTIwMTQgTExNIHByb3ZpZGVyIGRpc3BsYXkgbWV0YWRhdGEgY2xpZW50LlxuICpcbiAqIFByb3ZpZGVyIGRhdGEgaXMgbm93IHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGluIHNjcmlwdHMvdXRpbHMvcHJvdmlkZXJfcmVnaXN0cnkucHlcbiAqIGFuZCBzZXJ2ZWQgYnkgR0VUIC9hcGkvcHJvdmlkZXJzLiBUaGlzIG1vZHVsZSBmZXRjaGVzIGFuZCBjYWNoZXMgdGhhdCBkYXRhLlxuICpcbiAqIEFsbCBwcm92aWRlciBkZXNjcmlwdGlvbnMsIFVSTHMsIGFuZCB0aWVyL3ByaXZhY3kgZmxhZ3Mgc2hvdWxkIGJlIGVkaXRlZCBpblxuICogcHJvdmlkZXJfcmVnaXN0cnkucHkgcmF0aGVyIHRoYW4gaGVyZS5cbiAqXG4gKiBTZXJ2ZXIgZmllbGQgbmFtZXMgKHNuYWtlX2Nhc2UsIG1hdGNoaW5nIFB5dGhvbik6XG4gKiAgIGZyZWVfdGllciAgIFx1MjAxNCB3aGV0aGVyIGEgbm8tY29zdCBBUEkgZW50cnkgdGllciBpcyBhdmFpbGFibGVcbiAqICAgY29uZmlkZW50aWFsIFx1MjAxNCB3aGV0aGVyIHRoZSBwcm92aWRlciBjb21taXRzIG5vdCB0byB0cmFpbiBvbiBBUEkgcmVxdWVzdCBkYXRhXG4gKiAgIG5vdGUgICAgICAgIFx1MjAxNCBvbmUtc2VudGVuY2UgcGxhaW4tdGV4dCBkZXNjcmlwdGlvblxuICogICBob21lcGFnZSAgICBcdTIwMTQgcHJvdmlkZXIgbGFuZGluZyBwYWdlIFVSTCAobnVsbCBpZiBub3QgYXBwbGljYWJsZSlcbiAqICAgcHJpY2luZ191cmwgXHUyMDE0IHByaWNpbmcgLyBwbGFucyBwYWdlIFVSTCAobnVsbCBpZiBub3QgYXBwbGljYWJsZSlcbiAqICAgcHJpdmFjeV91cmwgXHUyMDE0IHByaXZhY3kgcG9saWN5IG9yIGRhdGEtdXNlIHBvbGljeSBVUkwgKG51bGwgaWYgbm90IGFwcGxpY2FibGUpXG4gKi9cblxuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIG9iamVjdD58bnVsbH0gKi9cbmxldCBfY2FjaGUgPSBudWxsO1xuXG4vKipcbiAqIEZldGNoIHByb3ZpZGVyIGRpc3BsYXkgbWV0YWRhdGEgZnJvbSB0aGUgc2VydmVyIGFuZCBjYWNoZSBpdC5cbiAqIFNhZmUgdG8gY2FsbCBtdWx0aXBsZSB0aW1lcyBcdTIwMTQgcmV0dXJucyB0aGUgY2FjaGUgaWYgcG9wdWxhdGVkLCByZXRyaWVzIGlmXG4gKiB0aGUgaW5pdGlhbCBmZXRjaCBmYWlsZWQgKG5vbi1mYXRhbCwgcG9wb3ZlcnMgd2lsbCBqdXN0IG5vdCBhcHBlYXIpLlxuICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgb2JqZWN0PnxudWxsPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRQcm92aWRlckluZm8oKSB7XG4gIGlmIChfY2FjaGUgIT09IG51bGwpIHJldHVybiBfY2FjaGU7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGZldGNoKCcvYXBpL3Byb3ZpZGVycycpO1xuICAgIGlmIChyZXNwLm9rKSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcC5qc29uKCk7XG4gICAgICBfY2FjaGUgPSBkYXRhLnByb3ZpZGVycyB8fCB7fTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5vbi1mYXRhbDogcG9wb3ZlcnMgc2ltcGx5IHdvbid0IGFwcGVhci5cbiAgfVxuICByZXR1cm4gX2NhY2hlO1xufVxuXG4vKipcbiAqIFJldHVybiBjYWNoZWQgZGlzcGxheSBpbmZvIGZvciBhIHByb3ZpZGVyLCBvciBudWxsIGlmIG5vdCBsb2FkZWQgLyB1bmtub3duLlxuICogQ2FsbCBsb2FkUHJvdmlkZXJJbmZvKCkgZmlyc3QgKGUuZy4gaW4gb3Blbk1vZGVsTW9kYWwpLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3ZpZGVyXG4gKiBAcmV0dXJucyB7b2JqZWN0fG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm92aWRlckluZm8ocHJvdmlkZXIpIHtcbiAgcmV0dXJuIF9jYWNoZSA/IChfY2FjaGVbcHJvdmlkZXJdIHx8IG51bGwpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgSFRNTCBjb250ZW50IHN0cmluZyBmb3IgYSBwcm92aWRlciBpbmZvIEJvb3RzdHJhcCA1IHBvcG92ZXIuXG4gKiBVc2VzIHNuYWtlX2Nhc2UgZmllbGQgbmFtZXMgYXMgcmV0dXJuZWQgYnkgR0VUIC9hcGkvcHJvdmlkZXJzLlxuICogQHBhcmFtIHtvYmplY3R9IGluZm8gLSBQcm92aWRlciBpbmZvIGVudHJ5IGZyb20gZ2V0UHJvdmlkZXJJbmZvKClcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEhUTUwgc3RyaW5nIChzYWZlIHRvIHBhc3MgdG8gQlM1IFBvcG92ZXIgd2l0aCBzYW5pdGl6ZTpmYWxzZSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVySW5mb1BvcG92ZXJDb250ZW50KGluZm8pIHtcbiAgY29uc3QgdGllckljb24gID0gaW5mby5mcmVlX3RpZXIgICAgPyAnJiMxMDAwMzsgRnJlZSB0aWVyIGF2YWlsYWJsZScgICAgOiAnJiMxMDAwNzsgUGFpZCBvbmx5IChubyBmcmVlIEFQSSB0aWVyKSc7XG4gIGNvbnN0IHByaXZJY29uICA9IGluZm8uY29uZmlkZW50aWFsID8gJyYjMTI4Mjc0OyBEYXRhIGNvbmZpZGVudGlhbCcgICAgIDogJyYjOTg4ODsmIzY1MDM5OyBEYXRhIG1heSBiZSByZXZpZXdlZC9yZXRhaW5lZCc7XG4gIGNvbnN0IHRpZXJDb2xvciA9IGluZm8uZnJlZV90aWVyICAgID8gJyMwNjVmNDYnIDogJyM5MjQwMGUnO1xuICBjb25zdCBwcml2Q29sb3IgPSBpbmZvLmNvbmZpZGVudGlhbCA/ICcjMWU0MGFmJyA6ICcjOTI0MDBlJztcblxuICBjb25zdCBsaW5rcyA9IFtcbiAgICBpbmZvLmhvbWVwYWdlICAgID8gYDxhIGhyZWY9XCIke2VzY2FwZUh0bWwoaW5mby5ob21lcGFnZSl9XCIgICAgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPkhvbWVwYWdlPC9hPmAgICAgICAgICAgIDogJycsXG4gICAgaW5mby5wcmljaW5nX3VybCA/IGA8YSBocmVmPVwiJHtlc2NhcGVIdG1sKGluZm8ucHJpY2luZ191cmwpfVwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5QcmljaW5nICZhbXA7IHBsYW5zPC9hPmAgOiAnJyxcbiAgICBpbmZvLnByaXZhY3lfdXJsID8gYDxhIGhyZWY9XCIke2VzY2FwZUh0bWwoaW5mby5wcml2YWN5X3VybCl9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlByaXZhY3kgcG9saWN5PC9hPmAgICAgICA6ICcnLFxuICBdLmZpbHRlcihCb29sZWFuKTtcblxuICByZXR1cm4gJzxkaXYgc3R5bGU9XCJtaW4td2lkdGg6MjIwcHg7bWF4LXdpZHRoOjMwMHB4O2ZvbnQtc2l6ZTowLjgyZW07bGluZS1oZWlnaHQ6MS41O1wiPidcbiAgICArIGA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTo2cHg7XCI+PHNwYW4gc3R5bGU9XCJjb2xvcjoke3RpZXJDb2xvcn07XCI+JHt0aWVySWNvbn08L3NwYW4+PC9kaXY+YFxuICAgICsgYDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjhweDtcIj48c3BhbiBzdHlsZT1cImNvbG9yOiR7cHJpdkNvbG9yfTtcIj4ke3ByaXZJY29ufTwvc3Bhbj48L2Rpdj5gXG4gICAgKyBgPHAgc3R5bGU9XCJtYXJnaW46MCAwIDhweDtjb2xvcjojMzc0MTUxO1wiPiR7ZXNjYXBlSHRtbChpbmZvLm5vdGUpfTwvcD5gXG4gICAgKyAobGlua3MubGVuZ3RoID8gJzx1bCBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmctbGVmdDoxNnB4O1wiPicgKyBsaW5rcy5tYXAobCA9PiBgPGxpPiR7bH08L2xpPmApLmpvaW4oJycpICsgJzwvdWw+JyA6ICcnKVxuICAgICsgJzwvZGl2Pic7XG59XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHVpLWNvcmUuanNcbiAqIENvcmUgVUkgcm91dGluZywgdGFiIG1hbmFnZW1lbnQsIG1vZGFsIG1hbmFnZW1lbnQsIGFuZCBwYWdlIGluaXRpYWxpemF0aW9uLlxuICogRW50cnkgcG9pbnQgZm9yIHRoZSBhcHBsaWNhdGlvbiAtIGxvYWRzIG9uIERPTUNvbnRlbnRMb2FkZWQuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCd1aS1jb3JlJyk7XG5cbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCB7IFN0b3JhZ2VLZXlzLCBhcGlDYWxsLCBmZXRjaFN0YXR1cywgZmV0Y2hTZXR0aW5ncywgdXBkYXRlU2V0dGluZ3MgfSBmcm9tICcuL2FwaS1jbGllbnQuanMnO1xuaW1wb3J0IHtcbiAgZ2V0V29ya2Zsb3dTdGVwRm9yUGhhc2UsXG4gIGluaXRpYWxpemVTdGF0ZSxcbiAgbG9hZFN0YXRlRnJvbUxvY2FsU3RvcmFnZSxcbiAgc3RhdGVNYW5hZ2VyLFxufSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbi8vIEFjY2Vzc2liaWxpdHk6IEZvY3VzIE1hbmFnZW1lbnQgZm9yIE1vZGFsc1xuLy8gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKiBTdGFjayBvZiBlbGVtZW50cyB0aGF0IG9wZW5lZCBlYWNoIG1vZGFsIChzdXBwb3J0cyBuZXN0ZWQgbW9kYWxzKS4gKi9cbmNvbnN0IF9mb2N1c1N0YWNrID0gW107XG5cbi8qKiBTdGFjayBvZiBmb2N1cy10cmFwIGxpc3RlbmVycyAob25lIHBlciBvcGVuIG1vZGFsKS4gKi9cbmNvbnN0IF9mb2N1c1RyYXBTdGFjayA9IFtdO1xubGV0IF9zZXR0aW5nc0RhdGEgPSBudWxsO1xuY29uc3QgUkVUUllfUE9MSUNZX1NUT1JBR0VfS0VZID0gJ2N2LWJ1aWxkZXItcmV0cnktcG9saWN5JztcblxuZnVuY3Rpb24gX2dldFJldHJ5UG9saWN5RnJvbVN0b3JhZ2UoKSB7XG4gIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgIGJhc2VNczogMTUwMCxcbiAgICBjYXBNczogNjAwMDAsXG4gICAgbWF4QXR0ZW1wdHM6IDYsXG4gICAgYXV0b1JldHJ5OiB0cnVlLFxuICB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFJFVFJZX1BPTElDWV9TVE9SQUdFX0tFWSk7XG4gICAgaWYgKCFyYXcpIHJldHVybiBkZWZhdWx0cztcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhc2VNczogTWF0aC5tYXgoMjAwLCBOdW1iZXIocGFyc2VkLmJhc2VNcyB8fCBkZWZhdWx0cy5iYXNlTXMpKSxcbiAgICAgIGNhcE1zOiBNYXRoLm1heCgxMDAwLCBOdW1iZXIocGFyc2VkLmNhcE1zIHx8IGRlZmF1bHRzLmNhcE1zKSksXG4gICAgICBtYXhBdHRlbXB0czogTWF0aC5tYXgoMSwgTnVtYmVyKHBhcnNlZC5tYXhBdHRlbXB0cyB8fCBkZWZhdWx0cy5tYXhBdHRlbXB0cykpLFxuICAgICAgYXV0b1JldHJ5OiBwYXJzZWQuYXV0b1JldHJ5ICE9PSBmYWxzZSxcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdHM7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3NhdmVSZXRyeVBvbGljeVRvU3RvcmFnZShwb2xpY3kpIHtcbiAgdHJ5IHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShSRVRSWV9QT0xJQ1lfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHBvbGljeSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy53YXJuKCdDb3VsZCBub3Qgc2F2ZSByZXRyeSBwb2xpY3kgcHJlZmVyZW5jZTonLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3NldHRpbmdzU291cmNlTGFiZWwobWV0YSwga2V5LCBydW50aW1lT3ZlcnJpZGVzID0gbnVsbCkge1xuICBpZiAocnVudGltZU92ZXJyaWRlcyAmJiBrZXkgaW4gcnVudGltZU92ZXJyaWRlcykge1xuICAgIHJldHVybiAnU291cmNlOiBydW50aW1lIHNlbGVjdGlvbic7XG4gIH1cbiAgY29uc3Qgc291cmNlID0gbWV0YT8uc291cmNlcz8uW2tleV0gfHwgJ2RlZmF1bHQnO1xuICBjb25zdCBlbnZLZXkgPSBtZXRhPy5lbnZfa2V5cz8uW2tleV0gfHwgbnVsbDtcbiAgaWYgKHNvdXJjZSA9PT0gJ2VudicpIHJldHVybiBgU291cmNlOiBlbnZpcm9ubWVudCB2YXJpYWJsZSAoJHtlbnZLZXkgfHwgJ2xvY2tlZCd9KWA7XG4gIGlmIChzb3VyY2UgPT09ICdkb3RlbnYnKSByZXR1cm4gYFNvdXJjZTogLmVudiAoJHtlbnZLZXkgfHwgJ2xvY2tlZCd9KWA7XG4gIGlmIChzb3VyY2UgPT09ICdjb25maWcnKSByZXR1cm4gJ1NvdXJjZTogY29uZmlnLnlhbWwnO1xuICByZXR1cm4gJ1NvdXJjZTogYnVpbHQtaW4gZGVmYXVsdCc7XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJTZXR0aW5nc1NvdXJjZXMobWV0YSwgcnVudGltZU92ZXJyaWRlcyA9IG51bGwpIHtcbiAgY29uc3Qgc291cmNlVGFyZ2V0cyA9IFtcbiAgICAnbGxtLmRlZmF1bHRfcHJvdmlkZXInLFxuICAgICdsbG0uZGVmYXVsdF9tb2RlbCcsXG4gICAgJ2xsbS5yZXF1ZXN0X3RpbWVvdXRfc2Vjb25kcycsXG4gICAgJ2xsbS50ZW1wZXJhdHVyZScsXG4gICAgJ2dlbmVyYXRpb24ubWF4X3NraWxscycsXG4gICAgJ2dlbmVyYXRpb24ubWF4X2FjaGlldmVtZW50cycsXG4gICAgJ2dlbmVyYXRpb24ubWF4X3B1YmxpY2F0aW9ucycsXG4gICAgJ2dlbmVyYXRpb24uc2tpbGxzX3NlY3Rpb25fdGl0bGUnLFxuICAgICdnZW5lcmF0aW9uLmZvcm1hdHMuYXRzX2RvY3gnLFxuICAgICdnZW5lcmF0aW9uLmZvcm1hdHMuaHVtYW5fcGRmJyxcbiAgICAnZ2VuZXJhdGlvbi5mb3JtYXRzLmh1bWFuX2RvY3gnLFxuICBdO1xuICBzb3VyY2VUYXJnZXRzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNvdXJjZS0ke2tleX1gKTtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgZWwudGV4dENvbnRlbnQgPSBfc2V0dGluZ3NTb3VyY2VMYWJlbChtZXRhLCBrZXksIHJ1bnRpbWVPdmVycmlkZXMpO1xuICAgIGNvbnN0IHJ1bnRpbWVLZXkgPSBydW50aW1lT3ZlcnJpZGVzICYmIGtleSBpbiBydW50aW1lT3ZlcnJpZGVzO1xuICAgIGNvbnN0IGlzTG9ja2VkID0gQm9vbGVhbihtZXRhPy5sb2NrZWQ/LltrZXldKTtcbiAgICBlbC5zdHlsZS5jb2xvciA9IHJ1bnRpbWVLZXkgPyAnIzFlNDBhZicgOiAoaXNMb2NrZWQgPyAnI2I0NTMwOScgOiAnIzY0NzQ4YicpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX3NldFNldHRpbmdzU3RhdHVzKG1lc3NhZ2UsIGtpbmQgPSAnaW5mbycpIHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3Mtc3RhdHVzLW1zZycpO1xuICBpZiAoIWVsKSByZXR1cm47XG4gIGVsLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgaWYgKGtpbmQgPT09ICdzdWNjZXNzJykge1xuICAgIGVsLnN0eWxlLmJhY2tncm91bmQgPSAnI2VjZmRmNSc7XG4gICAgZWwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjODZlZmFjJztcbiAgICBlbC5zdHlsZS5jb2xvciA9ICcjMTY2NTM0JztcbiAgfSBlbHNlIGlmIChraW5kID09PSAnZXJyb3InKSB7XG4gICAgZWwuc3R5bGUuYmFja2dyb3VuZCA9ICcjZmVmMmYyJztcbiAgICBlbC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNmZWNhY2EnO1xuICAgIGVsLnN0eWxlLmNvbG9yID0gJyM5OTFiMWInO1xuICB9IGVsc2Uge1xuICAgIGVsLnN0eWxlLmJhY2tncm91bmQgPSAnI2VmZjZmZic7XG4gICAgZWwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjYmZkYmZlJztcbiAgICBlbC5zdHlsZS5jb2xvciA9ICcjMWU0MGFmJztcbiAgfVxuICBlbC50ZXh0Q29udGVudCA9IG1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIF9jb2xsZWN0U2V0dGluZ3NQYXlsb2FkRnJvbUZvcm0oKSB7XG4gIHJldHVybiB7XG4gICAgbGxtOiB7XG4gICAgICBkZWZhdWx0X3Byb3ZpZGVyOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtbGxtLWRlZmF1bHQtcHJvdmlkZXInKT8udmFsdWU/LnRyaW0oKSB8fCBudWxsLFxuICAgICAgZGVmYXVsdF9tb2RlbDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLWxsbS1kZWZhdWx0LW1vZGVsJyk/LnZhbHVlPy50cmltKCkgfHwgbnVsbCxcbiAgICAgIHJlcXVlc3RfdGltZW91dF9zZWNvbmRzOiBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLWxsbS1yZXF1ZXN0LXRpbWVvdXQnKT8udmFsdWUgfHwgMTIwKSxcbiAgICAgIHRlbXBlcmF0dXJlOiBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLWxsbS10ZW1wZXJhdHVyZScpPy52YWx1ZSB8fCAwLjcpLFxuICAgIH0sXG4gICAgZ2VuZXJhdGlvbjoge1xuICAgICAgbWF4X3NraWxsczogTnVtYmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1nZW4tbWF4LXNraWxscycpPy52YWx1ZSB8fCAyMCksXG4gICAgICBtYXhfYWNoaWV2ZW1lbnRzOiBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLWdlbi1tYXgtYWNoaWV2ZW1lbnRzJyk/LnZhbHVlIHx8IDUpLFxuICAgICAgbWF4X3B1YmxpY2F0aW9uczogTnVtYmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1nZW4tbWF4LXB1YmxpY2F0aW9ucycpPy52YWx1ZSB8fCAxMCksXG4gICAgICBza2lsbHNfc2VjdGlvbl90aXRsZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLWdlbi1za2lsbHMtdGl0bGUnKT8udmFsdWU/LnRyaW0oKSB8fCAnU2tpbGxzJyxcbiAgICAgIGZvcm1hdHM6IHtcbiAgICAgICAgYXRzX2RvY3g6IEJvb2xlYW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLWZvcm1hdC1hdHMtZG9jeCcpPy5jaGVja2VkKSxcbiAgICAgICAgaHVtYW5fcGRmOiBCb29sZWFuKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1mb3JtYXQtaHVtYW4tcGRmJyk/LmNoZWNrZWQpLFxuICAgICAgICBodW1hbl9kb2N4OiBCb29sZWFuKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1mb3JtYXQtaHVtYW4tZG9jeCcpPy5jaGVja2VkKSxcbiAgICAgIH0sXG4gICAgICBhaV9hdHRyaWJ1dGlvbjogQm9vbGVhbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtZ2VuLWFpLWF0dHJpYnV0aW9uJyk/LmNoZWNrZWQpLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIF9jb2xsZWN0UmV0cnlQb2xpY3lGcm9tRm9ybSgpIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlTXM6IE51bWJlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtcmV0cnktYmFzZS1tcycpPy52YWx1ZSB8fCAxNTAwKSxcbiAgICBjYXBNczogTnVtYmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1yZXRyeS1jYXAtbXMnKT8udmFsdWUgfHwgNjAwMDApLFxuICAgIG1heEF0dGVtcHRzOiBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLXJldHJ5LW1heC1hdHRlbXB0cycpPy52YWx1ZSB8fCA2KSxcbiAgICBhdXRvUmV0cnk6IEJvb2xlYW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLXJldHJ5LWF1dG8nKT8uY2hlY2tlZCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJTZXR0aW5nc1RvRm9ybShwYXlsb2FkKSB7XG4gIGNvbnN0IHNldHRpbmdzID0gcGF5bG9hZD8uc2V0dGluZ3MgfHwge307XG4gIGNvbnN0IGxsbSA9IHNldHRpbmdzLmxsbSB8fCB7fTtcbiAgY29uc3QgZ2VuZXJhdGlvbiA9IHNldHRpbmdzLmdlbmVyYXRpb24gfHwge307XG4gIGNvbnN0IGZvcm1hdHMgPSBnZW5lcmF0aW9uLmZvcm1hdHMgfHwge307XG4gIGNvbnN0IHJ1bnRpbWVQcm92aWRlciA9IHBheWxvYWQ/LnJ1bnRpbWU/LmxsbT8ucHJvdmlkZXIgfHwgbnVsbDtcbiAgY29uc3QgcnVudGltZU1vZGVsID0gcGF5bG9hZD8ucnVudGltZT8ubGxtPy5tb2RlbCB8fCBudWxsO1xuICBjb25zdCBydW50aW1lT3ZlcnJpZGVzID0ge307XG4gIGlmIChydW50aW1lUHJvdmlkZXIpIHJ1bnRpbWVPdmVycmlkZXNbJ2xsbS5kZWZhdWx0X3Byb3ZpZGVyJ10gPSBydW50aW1lUHJvdmlkZXI7XG4gIGlmIChydW50aW1lTW9kZWwpIHJ1bnRpbWVPdmVycmlkZXNbJ2xsbS5kZWZhdWx0X21vZGVsJ10gPSBydW50aW1lTW9kZWw7XG5cbiAgY29uc3Qgc2V0VmFsdWUgPSAoaWQsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGVsKSBlbC52YWx1ZSA9IHZhbHVlID8/ICcnO1xuICB9O1xuICBjb25zdCBzZXRDaGVja2VkID0gKGlkLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlbCkgZWwuY2hlY2tlZCA9IEJvb2xlYW4odmFsdWUpO1xuICB9O1xuXG4gIHNldFZhbHVlKCdzZXR0aW5ncy1sbG0tZGVmYXVsdC1wcm92aWRlcicsIHJ1bnRpbWVQcm92aWRlciB8fCBsbG0uZGVmYXVsdF9wcm92aWRlciB8fCAnJyk7XG4gIHNldFZhbHVlKCdzZXR0aW5ncy1sbG0tZGVmYXVsdC1tb2RlbCcsIHJ1bnRpbWVNb2RlbCB8fCBsbG0uZGVmYXVsdF9tb2RlbCB8fCAnJyk7XG4gIHNldFZhbHVlKCdzZXR0aW5ncy1sbG0tcmVxdWVzdC10aW1lb3V0JywgbGxtLnJlcXVlc3RfdGltZW91dF9zZWNvbmRzID8/IDEyMCk7XG4gIHNldFZhbHVlKCdzZXR0aW5ncy1sbG0tdGVtcGVyYXR1cmUnLCBsbG0udGVtcGVyYXR1cmUgPz8gMC43KTtcblxuICBzZXRWYWx1ZSgnc2V0dGluZ3MtZ2VuLW1heC1za2lsbHMnLCBnZW5lcmF0aW9uLm1heF9za2lsbHMgPz8gMjApO1xuICBzZXRWYWx1ZSgnc2V0dGluZ3MtZ2VuLW1heC1hY2hpZXZlbWVudHMnLCBnZW5lcmF0aW9uLm1heF9hY2hpZXZlbWVudHMgPz8gNSk7XG4gIHNldFZhbHVlKCdzZXR0aW5ncy1nZW4tbWF4LXB1YmxpY2F0aW9ucycsIGdlbmVyYXRpb24ubWF4X3B1YmxpY2F0aW9ucyA/PyAxMCk7XG4gIHNldFZhbHVlKCdzZXR0aW5ncy1nZW4tc2tpbGxzLXRpdGxlJywgZ2VuZXJhdGlvbi5za2lsbHNfc2VjdGlvbl90aXRsZSB8fCAnU2tpbGxzJyk7XG5cbiAgc2V0Q2hlY2tlZCgnc2V0dGluZ3MtZm9ybWF0LWF0cy1kb2N4JywgZm9ybWF0cy5hdHNfZG9jeCk7XG4gIHNldENoZWNrZWQoJ3NldHRpbmdzLWZvcm1hdC1odW1hbi1wZGYnLCBmb3JtYXRzLmh1bWFuX3BkZik7XG4gIHNldENoZWNrZWQoJ3NldHRpbmdzLWZvcm1hdC1odW1hbi1kb2N4JywgZm9ybWF0cy5odW1hbl9kb2N4KTtcbiAgc2V0Q2hlY2tlZCgnc2V0dGluZ3MtZ2VuLWFpLWF0dHJpYnV0aW9uJywgZ2VuZXJhdGlvbi5haV9hdHRyaWJ1dGlvbik7XG5cbiAgY29uc3QgcmV0cnlQb2xpY3kgPSBfZ2V0UmV0cnlQb2xpY3lGcm9tU3RvcmFnZSgpO1xuICBzZXRWYWx1ZSgnc2V0dGluZ3MtcmV0cnktYmFzZS1tcycsIHJldHJ5UG9saWN5LmJhc2VNcyk7XG4gIHNldFZhbHVlKCdzZXR0aW5ncy1yZXRyeS1jYXAtbXMnLCByZXRyeVBvbGljeS5jYXBNcyk7XG4gIHNldFZhbHVlKCdzZXR0aW5ncy1yZXRyeS1tYXgtYXR0ZW1wdHMnLCByZXRyeVBvbGljeS5tYXhBdHRlbXB0cyk7XG4gIHNldENoZWNrZWQoJ3NldHRpbmdzLXJldHJ5LWF1dG8nLCByZXRyeVBvbGljeS5hdXRvUmV0cnkpO1xuXG4gIF9yZW5kZXJTZXR0aW5nc1NvdXJjZXMocGF5bG9hZC5tZXRhIHx8IHt9LCBydW50aW1lT3ZlcnJpZGVzKTtcblxuICBjb25zdCBwYXRoRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtY29uZmlnLXBhdGgnKTtcbiAgaWYgKHBhdGhFbCkge1xuICAgIHBhdGhFbC50ZXh0Q29udGVudCA9IHBheWxvYWQ/Lm1ldGE/LmNvbmZpZ19wYXRoXG4gICAgICA/IGBDb25maWcgZmlsZTogJHtwYXlsb2FkLm1ldGEuY29uZmlnX3BhdGh9YFxuICAgICAgOiAnJztcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWxvYWRTZXR0aW5nc01vZGFsKCkge1xuICB0cnkge1xuICAgIF9zZXRTZXR0aW5nc1N0YXR1cygnTG9hZGluZyBzZXR0aW5ncy4uLicsICdpbmZvJyk7XG4gICAgY29uc3QgW3Jlc3VsdCwgc3RhdHVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtmZXRjaFNldHRpbmdzKCksIGZldGNoU3RhdHVzKCkuY2F0Y2goKCkgPT4gbnVsbCldKTtcbiAgICBfcmVuZGVyU2V0dGluZ3NUb0Zvcm0ocmVzdWx0KTtcbiAgICAvLyBhaV9hdHRyaWJ1dGlvbiBpcyBwZXItc2Vzc2lvbiwgbm90IGluIGNvbmZpZy55YW1sIFx1MjAxNCByZWFkIGZyb20gc2Vzc2lvbiBzdGF0dXNcbiAgICBjb25zdCBhdHRyRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtZ2VuLWFpLWF0dHJpYnV0aW9uJyk7XG4gICAgaWYgKGF0dHJFbCAmJiBzdGF0dXMpIGF0dHJFbC5jaGVja2VkID0gQm9vbGVhbihzdGF0dXMuYWlfYXR0cmlidXRpb24pO1xuICAgIF9zZXRTZXR0aW5nc1N0YXR1cygnU2V0dGluZ3MgbG9hZGVkLicsICdzdWNjZXNzJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgX3NldFNldHRpbmdzU3RhdHVzKGBGYWlsZWQgdG8gbG9hZCBzZXR0aW5nczogJHtlcnJvci5tZXNzYWdlIHx8IGVycm9yfWAsICdlcnJvcicpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVTZXR0aW5nc01vZGFsKCkge1xuICBjb25zdCBzYXZlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLXNhdmUtYnRuJyk7XG4gIHRyeSB7XG4gICAgaWYgKHNhdmVCdG4pIHtcbiAgICAgIHNhdmVCdG4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgc2F2ZUJ0bi50ZXh0Q29udGVudCA9ICdTYXZpbmcuLi4nO1xuICAgIH1cbiAgICBfc2V0U2V0dGluZ3NTdGF0dXMoJ1NhdmluZyBzZXR0aW5ncy4uLicsICdpbmZvJyk7XG4gICAgY29uc3QgcGF5bG9hZCA9IF9jb2xsZWN0U2V0dGluZ3NQYXlsb2FkRnJvbUZvcm0oKTtcbiAgICBjb25zdCBhaUF0dHJpYnV0aW9uID0gQm9vbGVhbihwYXlsb2FkLmdlbmVyYXRpb24/LmFpX2F0dHJpYnV0aW9uKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1cGRhdGVTZXR0aW5ncyhwYXlsb2FkKTtcbiAgICBfc2F2ZVJldHJ5UG9saWN5VG9TdG9yYWdlKF9jb2xsZWN0UmV0cnlQb2xpY3lGcm9tRm9ybSgpKTtcbiAgICBfc2V0dGluZ3NEYXRhID0gcmVzdWx0O1xuICAgIF9yZW5kZXJTZXR0aW5nc1RvRm9ybShyZXN1bHQpO1xuICAgIC8vIGFpX2F0dHJpYnV0aW9uIGlzIHBlci1zZXNzaW9uIHN0YXRlLCBub3QgYSBjb25maWcueWFtbCBrZXkgXHUyMDE0IHNhdmUgaXQgc2VwYXJhdGVseVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvZ2VuZXJhdGlvbi1zZXR0aW5ncycsIHsgYWlfYXR0cmlidXRpb246IGFpQXR0cmlidXRpb24gfSk7XG4gICAgfSBjYXRjaCAoXykgeyAvKiBub24tZmF0YWwgKi8gfVxuICAgIF9zZXRTZXR0aW5nc1N0YXR1cygnU2V0dGluZ3Mgc2F2ZWQgc3VjY2Vzc2Z1bGx5LicsICdzdWNjZXNzJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgX3NldFNldHRpbmdzU3RhdHVzKGBGYWlsZWQgdG8gc2F2ZSBzZXR0aW5nczogJHtlcnJvci5tZXNzYWdlIHx8IGVycm9yfWAsICdlcnJvcicpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChzYXZlQnRuKSB7XG4gICAgICBzYXZlQnRuLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICBzYXZlQnRuLnRleHRDb250ZW50ID0gJ1NhdmUgU2V0dGluZ3MnO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuU2V0dGluZ3NNb2RhbCgpIHtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1tb2RhbC1vdmVybGF5Jyk7XG4gIGlmICghb3ZlcmxheSkgcmV0dXJuO1xuICBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIF9mb2N1c1N0YWNrLnB1c2goZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gIHNldEluaXRpYWxGb2N1cygnc2V0dGluZ3MtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ3NldHRpbmdzLW1vZGFsLW92ZXJsYXknKTtcbiAgYXdhaXQgcmVsb2FkU2V0dGluZ3NNb2RhbCgpO1xufVxuXG5mdW5jdGlvbiBjbG9zZVNldHRpbmdzTW9kYWwoKSB7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtbW9kYWwtb3ZlcmxheScpO1xuICBpZiAob3ZlcmxheSkgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXN0b3JlRm9jdXMoKTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIGZvY3VzYWJsZSBlbGVtZW50cyB3aXRoaW4gYSBjb250YWluZXIuXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgLSBUaGUgbW9kYWwgb3IgY29udGFpbmVyIGVsZW1lbnRcbiAqIEByZXR1cm5zIHtIVE1MRWxlbWVudFtdfSBBcnJheSBvZiBmb2N1c2FibGUgZWxlbWVudHNcbiAqL1xuZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlRWxlbWVudHMoY29udGFpbmVyKSB7XG4gIGNvbnN0IGZvY3VzYWJsZVNlbGVjdG9ycyA9IFtcbiAgICAnYVtocmVmXScsICdidXR0b246bm90KFtkaXNhYmxlZF0pJywgJ2lucHV0Om5vdChbZGlzYWJsZWRdKScsXG4gICAgJ3RleHRhcmVhOm5vdChbZGlzYWJsZWRdKScsICdzZWxlY3Q6bm90KFtkaXNhYmxlZF0pJyxcbiAgICAnW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJyxcbiAgXS5qb2luKCcsICcpO1xuICByZXR1cm4gQXJyYXkuZnJvbShjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChmb2N1c2FibGVTZWxlY3RvcnMpKTtcbn1cblxuLyoqXG4gKiBTZXQgaW5pdGlhbCBmb2N1cyB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaW4gYSBtb2RhbC5cbiAqIFByaW9yaXRpemVzIGVsZW1lbnRzIHdpdGggaWQ9XCJbbW9kYWxJZF0tZm9jdXMtdGFyZ2V0XCIgaWYgcHJlc2VudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RhbElkIC0gSUQgb2YgdGhlIG1vZGFsXG4gKi9cbmZ1bmN0aW9uIHNldEluaXRpYWxGb2N1cyhtb2RhbElkKSB7XG4gIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobW9kYWxJZCk7XG4gIGlmICghbW9kYWwpIHJldHVybjtcblxuICAvLyBUcnkgdG8gZm9jdXMgYW4gZXhwbGljaXQgdGFyZ2V0IChlLmcuLCBpbnB1dCBmaWVsZCB3aXRoIGNsYXNzL2lkKVxuICBjb25zdCBmb2N1c1RhcmdldCA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZvY3VzLXRhcmdldD1cInRydWVcIl0nKSB8fFxuICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJ0ZXh0XCJdJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKCdidXR0b24nKTtcblxuICBpZiAoZm9jdXNUYXJnZXQpIHtcbiAgICAvLyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbW9kYWwgcmVuZGVyICsgYWN0dWFsIGRpc3BsYXlcbiAgICBzZXRUaW1lb3V0KCgpID0+IGZvY3VzVGFyZ2V0LmZvY3VzKCksIDUwKTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYXAgZm9jdXMgd2l0aGluIGEgbW9kYWwgdXNpbmcgVGFiL1NoaWZ0K1RhYi5cbiAqIFByZXZlbnRzIHVzZXIgdGFiYmluZyB0byBlbGVtZW50cyBvdXRzaWRlIHRoZSBtb2RhbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RhbElkIC0gSUQgb2YgdGhlIG1vZGFsXG4gKi9cbmZ1bmN0aW9uIHRyYXBGb2N1cyhtb2RhbElkKSB7XG4gIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobW9kYWxJZCk7XG4gIGlmICghbW9kYWwpIHJldHVybjtcblxuICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IGdldEZvY3VzYWJsZUVsZW1lbnRzKG1vZGFsKTtcbiAgaWYgKGZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIGNvbnN0IGZpcnN0RWxlbWVudCA9IGZvY3VzYWJsZUVsZW1lbnRzWzBdO1xuICBjb25zdCBsYXN0RWxlbWVudCA9IGZvY3VzYWJsZUVsZW1lbnRzW2ZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gIGNvbnN0IGxpc3RlbmVyID0gKGUpID0+IHtcbiAgICBpZiAoZS5rZXkgIT09ICdUYWInKSByZXR1cm47XG5cbiAgICBjb25zdCBpc1NoaWZ0ID0gZS5zaGlmdEtleTtcbiAgICBjb25zdCBhY3RpdmVFbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoaXNTaGlmdCkge1xuICAgICAgaWYgKGFjdGl2ZUVsID09PSBmaXJzdEVsZW1lbnQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsYXN0RWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoYWN0aXZlRWwgPT09IGxhc3RFbGVtZW50KSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZmlyc3RFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBsaXN0ZW5lcik7XG4gIF9mb2N1c1RyYXBTdGFjay5wdXNoKGxpc3RlbmVyKTtcbn1cblxuLyoqXG4gKiBSZXN0b3JlIGZvY3VzIHRvIHRoZSBlbGVtZW50IHRoYXQgb3BlbmVkIHRoZSBtb2RhbC5cbiAqL1xuZnVuY3Rpb24gcmVzdG9yZUZvY3VzKCkge1xuICBjb25zdCBlbCA9IF9mb2N1c1N0YWNrLnBvcCgpO1xuICBpZiAoZWwgJiYgdHlwZW9mIGVsLmZvY3VzID09PSAnZnVuY3Rpb24nKSBlbC5mb2N1cygpO1xuXG4gIGNvbnN0IGxpc3RlbmVyID0gX2ZvY3VzVHJhcFN0YWNrLnBvcCgpO1xuICBpZiAobGlzdGVuZXIpIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBsaXN0ZW5lcik7XG59XG5cbmZ1bmN0aW9uIHB1c2hGb2N1c1N0YWNrKGVsKSB7XG4gIF9mb2N1c1N0YWNrLnB1c2goZWwgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG59XG5cbi8qKiBNYXBzIGVhY2ggd29ya2Zsb3cgc3RhZ2UgKHRvcCBiYXIpIHRvIHRoZSB0YWJzIHNob3duIGluIHRoZSBzZWNvbmQgbmF2IGJhci4gKi9cbmNvbnN0IFNUQUdFX1RBQlMgPSB7XG4gIGpvYjogICAgICAgICAgICBbJ2pvYicsICdtYXN0ZXInXSxcbiAgYW5hbHlzaXM6ICAgICAgIFsnYW5hbHlzaXMnXSxcbiAgY3VzdG9taXphdGlvbnM6IFsnZ29hbHMnLCAncXVlc3Rpb25zJywgJ2V4cC1yZXZpZXcnLCAnYWNoLWVkaXRvcicsICdza2lsbHMtcmV2aWV3JywgJ2FjaGlldmVtZW50cy1yZXZpZXcnLCAndGFnbGluZS1yZXZpZXcnLCAnc3VtbWFyeS1yZXZpZXcnLCAncHVibGljYXRpb25zLXJldmlldycsICdhdHMtc2NvcmUnXSxcbiAgcmV3cml0ZTogICAgICAgIFsncmV3cml0ZSddLFxuICBzcGVsbDogICAgICAgICAgWydzcGVsbCddLFxuICBsYXlvdXQ6ICAgICAgICAgWydsYXlvdXQnXSxcbiAgZG93bmxvYWQ6ICAgICAgIFsnZmluYWxfZ2VuZXJhdGUnLCAnZG93bmxvYWQnXSxcbiAgY292ZXJfbGV0dGVyOiAgIFsnY292ZXItbGV0dGVyJ10sXG4gIHNjcmVlbmluZzogICAgICBbJ3NjcmVlbmluZyddLFxuICBpbnRlcnZpZXdfcHJlcDogWydpbnRlcnZpZXctcHJlcCddLFxuICB0aGFua195b3U6ICAgICAgWyd0aGFuay15b3UnXSxcbiAgaGFydmVzdDogICAgICAgIFsnaGFydmVzdCddLFxufTtcblxuLyoqXG4gKiBDdXN0b20gY29uZmlybSBkaWFsb2cgXHUyMDE0IHJldHVybnMgYSBQcm9taXNlPGJvb2xlYW4+LlxuICogUmVwbGFjZXMgYnJvd3NlciBjb25maXJtKCkgd2hpY2ggY2FuIGJlIHNpbGVudGx5IHN1cHByZXNzZWQgb25jZSB0aGUgdXNlclxuICogY2hlY2tzIFwiUHJldmVudCB0aGlzIHBhZ2UgZnJvbSBjcmVhdGluZyBhZGRpdGlvbmFsIGRpYWxvZ3NcIi5cbiAqXG4gKiBVc2FnZTogIGlmIChhd2FpdCBjb25maXJtRGlhbG9nKCdBcmUgeW91IHN1cmU/JykpIHsgLi4uIH1cbiAqL1xuZnVuY3Rpb24gY29uZmlybURpYWxvZyhtZXNzYWdlLCB7IGNvbmZpcm1MYWJlbCA9ICdPSycsIGNhbmNlbExhYmVsID0gJ0NhbmNlbCcsIGRhbmdlciA9IGZhbHNlIH0gPSB7fSkge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgcHJldmlvdXNGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cbiAgICAvLyBSZXVzZSBvciBjcmVhdGUgdGhlIHNoYXJlZCBvdmVybGF5IGVsZW1lbnRcbiAgICBsZXQgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtLWRpYWxvZy1vdmVybGF5Jyk7XG4gICAgaWYgKCFvdmVybGF5KSB7XG4gICAgICBvdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBvdmVybGF5LmlkID0gJ2NvbmZpcm0tZGlhbG9nLW92ZXJsYXknO1xuICAgICAgb3ZlcmxheS5zdHlsZS5jc3NUZXh0ID1cbiAgICAgICAgJ2Rpc3BsYXk6bm9uZTsgcG9zaXRpb246Zml4ZWQ7IGluc2V0OjA7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjQ1KTsgei1pbmRleDo5OTk5OycgK1xuICAgICAgICAnYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyc7XG4gICAgICBvdmVybGF5LmlubmVySFRNTCA9XG4gICAgICAgICc8ZGl2IGlkPVwiY29uZmlybS1kaWFsb2ctYm94XCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCInICtcbiAgICAgICAgJyBhcmlhLWxhYmVsbGVkYnk9XCJjb25maXJtLWRpYWxvZy1tc2dcIicgK1xuICAgICAgICAnIHN0eWxlPVwiYmFja2dyb3VuZDojZmZmOyBib3JkZXItcmFkaXVzOjhweDsgcGFkZGluZzoyNHB4IDI4cHg7JyArXG4gICAgICAgICdtYXgtd2lkdGg6NDAwcHg7IHdpZHRoOjkwJTsgYm94LXNoYWRvdzowIDhweCAzMnB4IHJnYmEoMCwwLDAsMC4xOCk7IGZvbnQtZmFtaWx5OmluaGVyaXQ7XCI+JyArXG4gICAgICAgICc8cCBpZD1cImNvbmZpcm0tZGlhbG9nLW1zZ1wiIHN0eWxlPVwibWFyZ2luOjAgMCAyMHB4OyBmb250LXNpemU6MC45NWVtOyBjb2xvcjojMWUyOTNiOyB3aGl0ZS1zcGFjZTpwcmUtd3JhcDtcIj48L3A+JyArXG4gICAgICAgICc8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4OyBnYXA6OHB4OyBqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7XCI+JyArXG4gICAgICAgICc8YnV0dG9uIGlkPVwiY29uZmlybS1kaWFsb2ctY2FuY2VsXCIgc3R5bGU9XCJwYWRkaW5nOjZweCAxNnB4OyBib3JkZXI6MXB4IHNvbGlkICNjYmQ1ZTE7JyArXG4gICAgICAgICdib3JkZXItcmFkaXVzOjVweDsgYmFja2dyb3VuZDojZjhmYWZjOyBjdXJzb3I6cG9pbnRlcjsgY29sb3I6IzQ3NTU2OTtcIj48L2J1dHRvbj4nICtcbiAgICAgICAgJzxidXR0b24gaWQ9XCJjb25maXJtLWRpYWxvZy1va1wiIHN0eWxlPVwicGFkZGluZzo2cHggMTZweDsgYm9yZGVyOm5vbmU7JyArXG4gICAgICAgICdib3JkZXItcmFkaXVzOjVweDsgY3Vyc29yOnBvaW50ZXI7IGNvbG9yOiNmZmY7IGZvbnQtd2VpZ2h0OjYwMDtcIj48L2J1dHRvbj4nICtcbiAgICAgICAgJzwvZGl2PjwvZGl2Pic7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICAgIH1cblxuICAgIGNvbnN0IG9rQnRuICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtLWRpYWxvZy1vaycpO1xuICAgIGNvbnN0IGNhbmNlbEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtLWRpYWxvZy1jYW5jZWwnKTtcbiAgICBjb25zdCBtc2dFbCAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uZmlybS1kaWFsb2ctbXNnJyk7XG5cbiAgICBtc2dFbC50ZXh0Q29udGVudCAgICAgICAgICA9IG1lc3NhZ2U7XG4gICAgb2tCdG4udGV4dENvbnRlbnQgICAgICAgICAgPSBjb25maXJtTGFiZWw7XG4gICAgY2FuY2VsQnRuLnRleHRDb250ZW50ICAgICAgPSBjYW5jZWxMYWJlbDtcbiAgICBva0J0bi5zdHlsZS5iYWNrZ3JvdW5kICAgICA9IGRhbmdlciA/ICcjZGMyNjI2JyA6ICcjM2I4MmY2JztcblxuICAgIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICBva0J0bi5mb2N1cygpO1xuXG4gICAgLy8gRm9jdXMgdHJhcCBcdTIwMTQga2VlcCBUYWIvU2hpZnQrVGFiIGluc2lkZSB0aGUgdHdvIGJ1dHRvbnNcbiAgICBjb25zdCB0cmFwRm9jdXMgPSAoZSkgPT4ge1xuICAgICAgaWYgKGUua2V5ICE9PSAnVGFiJykgcmV0dXJuO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgZm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoZS5zaGlmdEtleSkge1xuICAgICAgICAoZm9jdXNlZCA9PT0gY2FuY2VsQnRuID8gb2tCdG4gOiBjYW5jZWxCdG4pLmZvY3VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoZm9jdXNlZCA9PT0gb2tCdG4gPyBjYW5jZWxCdG4gOiBva0J0bikuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRyYXBGb2N1cyk7XG5cbiAgICBjb25zdCBmaW5pc2ggPSAocmVzdWx0KSA9PiB7XG4gICAgICBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBvdmVybGF5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0cmFwRm9jdXMpO1xuICAgICAgLy8gUmVtb3ZlIGxpc3RlbmVycyB0byBhdm9pZCBzdGFja2luZyBoYW5kbGVyc1xuICAgICAgb2tCdG4ucmVwbGFjZVdpdGgob2tCdG4uY2xvbmVOb2RlKHRydWUpKTtcbiAgICAgIGNhbmNlbEJ0bi5yZXBsYWNlV2l0aChjYW5jZWxCdG4uY2xvbmVOb2RlKHRydWUpKTtcbiAgICAgIGlmIChwcmV2aW91c0ZvY3VzICYmIHR5cGVvZiBwcmV2aW91c0ZvY3VzLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByZXZpb3VzRm9jdXMuZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICB9O1xuXG4gICAgLy8gRXNjYXBlIGtleSBjYW5jZWxzXG4gICAgb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHsgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgZmluaXNoKGZhbHNlKTsgfSwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gICAgLy8gUmViaW5kIGNsb25lZCBidXR0b25zXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZpcm0tZGlhbG9nLW9rJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAgICAgKCkgPT4gZmluaXNoKHRydWUpLCAgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtLWRpYWxvZy1jYW5jZWwnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGZpbmlzaChmYWxzZSksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBvdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7IGlmIChlLnRhcmdldCA9PT0gb3ZlcmxheSkgZmluaXNoKGZhbHNlKTsgfSwgeyBvbmNlOiB0cnVlIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIHRoZSBhcHBsaWNhdGlvbiBvbiBET00gcmVhZHkuXG4gKiBTZXRzIHVwIGV2ZW50IGxpc3RlbmVycywgcmVzdG9yZXMgc2Vzc2lvbiwgYW5kIGxvYWRzIGluaXRpYWwgdGFiLlxuICovXG4vKipcbiAqIFNldCB1cCBhbGwgZ2xvYmFsIGV2ZW50IGxpc3RlbmVycy5cbiAqL1xuZnVuY3Rpb24gc2V0dXBFdmVudExpc3RlbmVycygpIHtcbiAgLy8gVGFiIGJ1dHRvbnNcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRhYicpLmZvckVhY2godGFiID0+IHtcbiAgICB0YWIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgY29uc3QgdGFiTmFtZSA9IGUudGFyZ2V0LmlkLnJlcGxhY2UoJ3RhYi0nLCAnJyk7XG4gICAgICBzd2l0Y2hUYWIodGFiTmFtZSk7XG4gICAgfSk7XG5cbiAgICAvLyBLZXlib2FyZCBuYXZpZ2F0aW9uIGZvciB0YWJzIChXQ0FHIDIuMSBBQSB0YWJsaXN0IHBhdHRlcm4pXG4gICAgdGFiLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgICAgLy8gRW50ZXIvU3BhY2UgYWN0aXZhdGUgdGhlIGZvY3VzZWQgdGFiXG4gICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUudGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIEFycm93L0hvbWUvRW5kIG5hdmlnYXRlIGFuZCBhY3RpdmF0ZVxuICAgICAgaWYgKFsnQXJyb3dMZWZ0JywgJ0Fycm93UmlnaHQnLCAnSG9tZScsICdFbmQnXS5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCB0YWJzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGFiOm5vdChbc3R5bGUqPVwiZGlzcGxheTogbm9uZVwiXSknKSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRhYnMuaW5kZXhPZihlLnRhcmdldCk7XG5cbiAgICAgICAgbGV0IG5leHRUYWI7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0Fycm93TGVmdCcgfHwgZS5rZXkgPT09ICdIb21lJykge1xuICAgICAgICAgIG5leHRUYWIgPSBlLmtleSA9PT0gJ0hvbWUnID8gdGFic1swXSA6IHRhYnNbKGN1cnJlbnRJbmRleCAtIDEgKyB0YWJzLmxlbmd0aCkgJSB0YWJzLmxlbmd0aF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dFRhYiA9IGUua2V5ID09PSAnRW5kJyA/IHRhYnNbdGFicy5sZW5ndGggLSAxXSA6IHRhYnNbKGN1cnJlbnRJbmRleCArIDEpICUgdGFicy5sZW5ndGhdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRUYWIpIHtcbiAgICAgICAgICBuZXh0VGFiLmZvY3VzKCk7XG4gICAgICAgICAgbmV4dFRhYi5jbGljaygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIE1lc3NhZ2UgaW5wdXQgKEVudGVyIGtleSB0byBzZW5kKVxuICBjb25zdCBtZXNzYWdlSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVzc2FnZS1pbnB1dCcpO1xuICBpZiAobWVzc2FnZUlucHV0KSB7XG4gICAgbWVzc2FnZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgKGUpID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5zZW5kTWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGdsb2JhbFRoaXMuc2VuZE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gTW9kYWwgY2xvc2Ugb24gRVNDIGtleVxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBjbG9zZUFsbE1vZGFscygpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQ2xvc2UgbW9kYWxzIG9uIGJhY2tncm91bmQgY2xpY2tcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9XCJkaWFsb2dcIl0nKS5mb3JFYWNoKG1vZGFsID0+IHtcbiAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICBpZiAoZS50YXJnZXQgPT09IG1vZGFsKSB7XG4gICAgICAgIGNsb3NlTW9kYWwobW9kYWwuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHN0YWdlIHRoYXQgb3ducyBhIGdpdmVuIHRhYiwgb3IgbnVsbCBpZiB1bm1hcHBlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWJcbiAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH1cbiAqL1xuZnVuY3Rpb24gZ2V0U3RhZ2VGb3JUYWIodGFiKSB7XG4gIGZvciAoY29uc3QgW3N0YWdlLCB0YWJzXSBvZiBPYmplY3QuZW50cmllcyhTVEFHRV9UQUJTKSkge1xuICAgIGlmICh0YWJzLmluY2x1ZGVzKHRhYikpIHJldHVybiBzdGFnZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0VmlzaWJsZVN0YWdlKCkge1xuICBjb25zdCBhY3RpdmVUYWIgPSBzdGF0ZU1hbmFnZXIuZ2V0Q3VycmVudFRhYigpO1xuICByZXR1cm4gZ2V0U3RhZ2VGb3JUYWIoYWN0aXZlVGFiKSB8fCBnZXRXb3JrZmxvd1N0ZXBGb3JQaGFzZShzdGF0ZU1hbmFnZXIuZ2V0UGhhc2UoKSk7XG59XG5cbi8qKlxuICogU2hvdy9oaWRlIHRoZSBzY3JvbGwgYXJyb3cgYnV0dG9ucyBiYXNlZCBvbiB3aGV0aGVyIHRoZSB0YWIgYmFyIGlzIHNjcm9sbGFibGUuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVRhYlNjcm9sbEJ1dHRvbnMoKSB7XG4gIGNvbnN0IHRhYkJhciAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLWJhcicpO1xuICBjb25zdCBsZWZ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYi1zY3JvbGwtbGVmdCcpO1xuICBjb25zdCByaWdodEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWItc2Nyb2xsLXJpZ2h0Jyk7XG4gIGlmICghdGFiQmFyIHx8ICFsZWZ0QnRuIHx8ICFyaWdodEJ0bikgcmV0dXJuO1xuICBsZWZ0QnRuLnN0eWxlLmRpc3BsYXkgID0gdGFiQmFyLnNjcm9sbExlZnQgPiAwID8gJycgOiAnbm9uZSc7XG4gIHJpZ2h0QnRuLnN0eWxlLmRpc3BsYXkgPSB0YWJCYXIuc2Nyb2xsTGVmdCA8IHRhYkJhci5zY3JvbGxXaWR0aCAtIHRhYkJhci5jbGllbnRXaWR0aCAtIDEgPyAnJyA6ICdub25lJztcbn1cblxuLyoqXG4gKiBTaG93IG9ubHkgdGhlIHRhYnMgdGhhdCBiZWxvbmcgdG8gdGhlIGdpdmVuIHN0YWdlIGluIHRoZSBzZWNvbmQgbmF2IGJhci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGFnZSAtIEtleSBmcm9tIFNUQUdFX1RBQlNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlVGFiQmFyRm9yU3RhZ2Uoc3RhZ2UpIHtcbiAgY29uc3Qgc3RhZ2VUYWJzID0gU1RBR0VfVEFCU1tzdGFnZV0gfHwgW107XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50YWInKS5mb3JFYWNoKHRhYiA9PiB7XG4gICAgdGFiLnN0eWxlLmRpc3BsYXkgPSBzdGFnZVRhYnMuaW5jbHVkZXModGFiLmRhdGFzZXQudGFiKSA/ICcnIDogJ25vbmUnO1xuICB9KTtcbiAgLy8gUmVzZXQgc2Nyb2xsIHBvc2l0aW9uIHRvIHNob3cgYWN0aXZlIHRhYiwgdGhlbiByZWZyZXNoIGFycm93IHZpc2liaWxpdHlcbiAgY29uc3QgdGFiQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYi1iYXInKTtcbiAgaWYgKHRhYkJhcikgdGFiQmFyLnNjcm9sbExlZnQgPSAwO1xuICB1cGRhdGVUYWJTY3JvbGxCdXR0b25zKCk7XG59XG5cbi8vIGxvYWRUYWJDb250ZW50KCkgbGl2ZXMgaW4gd2ViL3Jldmlldy10YWJsZS1iYXNlLmpzLCB3aGljaCBvd25zIHRoZVxuLy8gZnVsbCB+MjAtY2FzZSB0YWIgZGlzcGF0Y2ggKHRoaXMgZmlsZSdzIGNvcHkgb25seSBldmVyIGhhbmRsZWQgNSBvZiB0aGVtXG4vLyBhbmQgd2FzIG5ldmVyIGNhbGxlZCBpbnRlcm5hbGx5IFx1MjAxNCBkZWFkIGNvZGUsIHN1cGVyc2VkZWQgb25jZSB0aGUgdGFiXG4vLyBzeXN0ZW0gZ3JldykuIHJldmlldy10YWJsZS1iYXNlLmpzJ3MgdmVyc2lvbiBub3cgY2FycmllcyB0aGUgc2FtZVxuLy8gc2FmZSB0ZXh0Q29udGVudC1iYXNlZCBlcnJvciByZW5kZXJpbmcgdGhpcyBjb3B5IGhhZDsgc2VlIGl0cyBvd25cbi8vIHRyeS9jYXRjaC4gUmVtb3ZlZCBoZXJlIHJhdGhlciB0aGFuIGxlZnQgdG8gZHJpZnQgZnVydGhlciBvdXQgb2Ygc3luYy5cblxuLyoqXG4gKiBUb2dnbGUgY29sbGFwc2libGUgY2hhdCBwYW5lbCAoaW50ZXJhY3Rpb24gYXJlYSkuXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUNoYXQoKSB7XG4gIGNvbnN0IGludGVyYWN0aW9uQXJlYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5pbnRlcmFjdGlvbi1hcmVhJyk7XG4gIGNvbnN0IHZpZXdlckFyZWEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudmlld2VyLWFyZWEnKTtcblxuICBpZiAoaW50ZXJhY3Rpb25BcmVhKSB7XG4gICAgY29uc3QgaXNDb2xsYXBzZWQgPSBpbnRlcmFjdGlvbkFyZWEuY2xhc3NMaXN0LnRvZ2dsZSgnY29sbGFwc2VkJyk7XG4gICAgaWYgKHZpZXdlckFyZWEpIHtcbiAgICAgIHZpZXdlckFyZWEuc3R5bGUuZmxleCA9IGlzQ29sbGFwc2VkID8gJzEgMSAxMDAlJyA6ICcwIDEgNjAlJztcbiAgICB9XG4gICAgLy8gS2VlcCBhcmlhLWxhYmVsIGFuZCBhcmlhLWV4cGFuZGVkIGluIHN5bmMgd2l0aCBjb2xsYXBzZWQgc3RhdGVcbiAgICBjb25zdCB0b2dnbGVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9nZ2xlLWNoYXQnKTtcbiAgICBpZiAodG9nZ2xlQnRuKSB7XG4gICAgICB0b2dnbGVCdG4uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgU3RyaW5nKCFpc0NvbGxhcHNlZCkpO1xuICAgICAgdG9nZ2xlQnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGlzQ29sbGFwc2VkID8gJ0V4cGFuZCBjaGF0IHBhbmVsJyA6ICdDb2xsYXBzZSBjaGF0IHBhbmVsJyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTdG9yYWdlS2V5cy5DSEFUX0NPTExBUFNFRCwgaXNDb2xsYXBzZWQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKCdDb3VsZCBub3Qgc2F2ZSBjaGF0IHN0YXRlJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogT3BlbiBhIG1vZGFsIGJ5IElELlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGFsSWQgLSBJRCBvZiBtb2RhbCBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIG9wZW5Nb2RhbChtb2RhbElkKSB7XG4gIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobW9kYWxJZCk7XG4gIGlmIChtb2RhbCkge1xuICAgIC8vIFNhdmUgZm9jdXMgYmVmb3JlIG9wZW5pbmcgbW9kYWxcbiAgICBfZm9jdXNTdGFjay5wdXNoKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgbW9kYWwuY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpO1xuICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcbiAgICAvLyBMb2NrIGJvZHkgc2Nyb2xsXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuXG4gICAgLy8gU2V0IGluaXRpYWwgZm9jdXMgYW5kIHRyYXAgZm9jdXMgd2l0aGluIG1vZGFsXG4gICAgc2V0SW5pdGlhbEZvY3VzKG1vZGFsSWQpO1xuICAgIHRyYXBGb2N1cyhtb2RhbElkKTtcbiAgfVxufVxuXG4vKipcbiAqIENsb3NlIGEgbW9kYWwgYnkgSUQuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kYWxJZCAtIElEIG9mIG1vZGFsIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gY2xvc2VNb2RhbChtb2RhbElkKSB7XG4gIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobW9kYWxJZCk7XG4gIGlmIChtb2RhbCkge1xuICAgIGlmIChtb2RhbC5kYXRhc2V0LmRpc21pc3NEaXNhYmxlZCA9PT0gJzEnKSByZXR1cm47XG4gICAgbW9kYWwuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpO1xuICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgIC8vIFJlc3RvcmUgYm9keSBzY3JvbGxcbiAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPVwiZGlhbG9nXCJdLnZpc2libGUnKSkge1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICcnO1xuICAgIH1cbiAgICAvLyBSZXN0b3JlIGZvY3VzXG4gICAgcmVzdG9yZUZvY3VzKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDbG9zZSBhbGwgb3BlbiBtb2RhbHMuXG4gKi9cbmZ1bmN0aW9uIGNsb3NlQWxsTW9kYWxzKCkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT1cImRpYWxvZ1wiXScpLmZvckVhY2gobW9kYWwgPT4ge1xuICAgIGlmIChtb2RhbC5kYXRhc2V0LmRpc21pc3NEaXNhYmxlZCA9PT0gJzEnKSByZXR1cm47XG4gICAgbW9kYWwuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpO1xuICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgIGlmIChtb2RhbC5zdHlsZS5kaXNwbGF5ICYmIG1vZGFsLnN0eWxlLmRpc3BsYXkgIT09ICdub25lJykge1xuICAgICAgbW9kYWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gIH0pO1xuICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJyc7XG4gIC8vIFJlc3RvcmUgZm9jdXNcbiAgcmVzdG9yZUZvY3VzKCk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBNb2RlbCBzZWxlY3RvciBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxubGV0IF9tb2RlbERhdGEgPSBudWxsOyAvLyBjYWNoZWQgZnJvbSBsYXN0IGxvYWRNb2RlbFNlbGVjdG9yKCkgY2FsbFxubGV0IF9tb2RlbERhdGFUYWJsZSA9IG51bGw7XG5sZXQgX3NlbGVjdGVkTW9kZWxQcm92aWRlcnMgPSBuZXcgU2V0KCk7XG5sZXQgX21vZGVsU2VsZWN0b3JMb2FkaW5nID0gZmFsc2U7ICAgLy8gZ3VhcmQ6IGxvYWRNb2RlbFNlbGVjdG9yKCkgaW4gZmxpZ2h0XG5sZXQgX2NhdGFsb2dSZWZyZXNoaW5nID0gZmFsc2U7ICAgICAgLy8gZ3VhcmQ6IF9yZWZyZXNoTW9kZWxDYXRhbG9nRm9yU2VsZWN0aW9uKCkgaW4gZmxpZ2h0XG5sZXQgX2NhdGFsb2dSZWZyZXNoUGVuZGluZyA9IGZhbHNlOyAgLy8gcXVldWUgb25lIHJlcnVuIHdoZW4gdG9nZ2xlcyBoYXBwZW4gbWlkLXJlZnJlc2hcbmxldCBfc2hvd0Z1bGxNb2RlbENhdGFsb2cgPSBmYWxzZTtcbmxldCBfY29waWxvdEF1dGhQb2xsVGltZXIgPSBudWxsO1xubGV0IF9tb2RlbFdpemFyZFN0ZXAgPSAxO1xubGV0IF9tb2RlbFdpemFyZFNlbGVjdGVkUHJvdmlkZXIgPSBudWxsO1xuXG5cbmZ1bmN0aW9uIF9nZXRNb2RlbFByZWZzRnJvbVN0b3JhZ2UoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5UQUJfREFUQSk7XG4gICAgcmV0dXJuIHNhdmVkID8gKEpTT04ucGFyc2Uoc2F2ZWQpIHx8IHt9KSA6IHt9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuZnVuY3Rpb24gX3NhdmVNb2RlbFByZWZzVG9TdG9yYWdlKHBhdGNoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gX2dldE1vZGVsUHJlZnNGcm9tU3RvcmFnZSgpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLlRBQl9EQVRBLCBKU09OLnN0cmluZ2lmeSh7IC4uLnBhcnNlZCwgLi4ucGF0Y2ggfSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLndhcm4oJ0ZhaWxlZCB0byBwZXJzaXN0IG1vZGVsIHByZWZlcmVuY2VzIGxvY2FsbHk6JywgZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FwcGVuZFJlY2VudE1vZGVsKHByb3ZpZGVyLCBtb2RlbCkge1xuICBpZiAoIXByb3ZpZGVyIHx8ICFtb2RlbCkgcmV0dXJuO1xuICBjb25zdCBwYXJzZWQgPSBfZ2V0TW9kZWxQcmVmc0Zyb21TdG9yYWdlKCk7XG4gIGNvbnN0IGV4aXN0aW5nID0gQXJyYXkuaXNBcnJheShwYXJzZWQucmVjZW50TW9kZWxzKSA/IHBhcnNlZC5yZWNlbnRNb2RlbHMgOiBbXTtcbiAgY29uc3QgZmlsdGVyZWQgPSBleGlzdGluZy5maWx0ZXIoKGl0ZW0pID0+ICEoaXRlbS5wcm92aWRlciA9PT0gcHJvdmlkZXIgJiYgaXRlbS5tb2RlbCA9PT0gbW9kZWwpKTtcbiAgZmlsdGVyZWQudW5zaGlmdCh7IHByb3ZpZGVyLCBtb2RlbCB9KTtcbiAgX3NhdmVNb2RlbFByZWZzVG9TdG9yYWdlKHsgcmVjZW50TW9kZWxzOiBmaWx0ZXJlZC5zbGljZSgwLCA2KSB9KTtcbn1cblxuZnVuY3Rpb24gX3VwZGF0ZUxsbVN0YXR1c1BpbGwoa2luZCwgdGV4dCwgaWNvbiA9ICcnLCB0b29sdGlwID0gJycpIHtcbiAgY29uc3QgcGlsbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG0tc3RhdHVzLXBpbGwnKTtcbiAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtLXN0YXR1cy1sYWJlbCcpO1xuICBjb25zdCBpY29uRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtLXN0YXR1cy1pY29uJyk7XG4gIGlmICghcGlsbCB8fCAhbGFiZWwpIHJldHVybjtcblxuICBjb25zdCBhbGlhc2VzID0ge1xuICAgIGF1dGhlbnRpY2F0ZWQ6ICdjb25uZWN0ZWQnLFxuICAgIHVuYXV0aGVudGljYXRlZDogJ3VuY29uZmlndXJlZCcsXG4gICAgcG9sbGluZzogJ2Nvbm5lY3RpbmcnLFxuICB9O1xuICBjb25zdCBub3JtYWxpemVkS2luZCA9IGFsaWFzZXNba2luZF0gfHwga2luZCB8fCAndW5jb25maWd1cmVkJztcbiAgY29uc3QgZGVmYXVsdFRvb2x0aXAgPSB7XG4gICAgdW5jb25maWd1cmVkOiAnTm8gcHJvdmlkZXIvbW9kZWwgaXMgY29uZmlndXJlZCB5ZXQuJyxcbiAgICBjb25maWd1cmVkOiAnUHJvdmlkZXIvbW9kZWwgaXMgY29uZmlndXJlZC4gQ29ubmVjdGl2aXR5IG5vdCB5ZXQgdmVyaWZpZWQuJyxcbiAgICBjb25uZWN0aW5nOiAnVGVzdGluZyBvciBjb25uZWN0aW5nIHRvIHRoZSBzZWxlY3RlZCBwcm92aWRlci4nLFxuICAgIGNvbm5lY3RlZDogJ1Byb3ZpZGVyIHJlc3BvbmRlZCBzdWNjZXNzZnVsbHkgdG8gYSBsaXZlIHJlcXVlc3QuJyxcbiAgICAnYXV0aC1yZXF1aXJlZCc6ICdBdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZC4gQ2hlY2sgQVBJIGtleSBvciBzaWduIGluLicsXG4gICAgJ3JhdGUtbGltaXRlZCc6ICdSYXRlIGxpbWl0IHJlYWNoZWQuIFdhaXQgYmVmb3JlIHJldHJ5aW5nIHJlcXVlc3RzLicsXG4gICAgdW5hdmFpbGFibGU6ICdQcm92aWRlciBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZSBvciB1bnJlYWNoYWJsZS4nLFxuICAgIGVycm9yOiAnQ29ubmVjdGlvbiBmYWlsZWQuIE9wZW4gbW9kZWwgc2V0dGluZ3MgZm9yIGRldGFpbHMuJyxcbiAgfTtcbiAgcGlsbC5jbGFzc0xpc3QucmVtb3ZlKCdhdXRoZW50aWNhdGVkJywgJ3VuYXV0aGVudGljYXRlZCcsICdwb2xsaW5nJywgJ3VuY29uZmlndXJlZCcsICdjb25maWd1cmVkJywgJ2Nvbm5lY3RpbmcnLCAnY29ubmVjdGVkJywgJ2F1dGgtcmVxdWlyZWQnLCAncmF0ZS1saW1pdGVkJywgJ3VuYXZhaWxhYmxlJywgJ2Vycm9yJyk7XG4gIGlmIChub3JtYWxpemVkS2luZCkgcGlsbC5jbGFzc0xpc3QuYWRkKG5vcm1hbGl6ZWRLaW5kKTtcbiAgbGFiZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBjb25zdCBpY29uQnlLaW5kID0ge1xuICAgIHVuY29uZmlndXJlZDogJ1x1MjVDQicsXG4gICAgY29uZmlndXJlZDogJ1x1MjVENCcsXG4gICAgY29ubmVjdGluZzogJ1x1MjlENycsXG4gICAgY29ubmVjdGVkOiAnXHUyNzEzJyxcbiAgICAnYXV0aC1yZXF1aXJlZCc6ICdcdUQ4M0RcdUREMTEnLFxuICAgICdyYXRlLWxpbWl0ZWQnOiAnXHUyM0YzJyxcbiAgICB1bmF2YWlsYWJsZTogJ1x1MjYwMScsXG4gICAgZXJyb3I6ICdcdTI2QTAnLFxuICB9O1xuICBjb25zdCBpY29uVGV4dCA9IGljb24gfHwgaWNvbkJ5S2luZFtub3JtYWxpemVkS2luZF0gfHwgJ1x1MjZBMCc7XG4gIGlmIChpY29uRWwpIGljb25FbC50ZXh0Q29udGVudCA9IGljb25UZXh0O1xuICBjb25zdCB0b29sdGlwVGV4dCA9IHRvb2x0aXAgfHwgZGVmYXVsdFRvb2x0aXBbbm9ybWFsaXplZEtpbmRdIHx8ICcnO1xuICBwaWxsLnRpdGxlID0gdG9vbHRpcFRleHQ7XG4gIGlmIChpY29uRWwpIGljb25FbC50aXRsZSA9IHRvb2x0aXBUZXh0O1xuICBsYWJlbC50aXRsZSA9IHRvb2x0aXBUZXh0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkTW9kZWxTZWxlY3RvcigpIHtcbiAgaWYgKF9tb2RlbFNlbGVjdG9yTG9hZGluZykgcmV0dXJuO1xuICBfbW9kZWxTZWxlY3RvckxvYWRpbmcgPSB0cnVlO1xuICB0cnkge1xuICAgIF9tb2RlbERhdGEgPSBhd2FpdCBhcGlDYWxsKCdHRVQnLCAnL2FwaS9tb2RlbCcpO1xuICAgIC8vIElmIGJhY2tlbmQgZGlkbid0IHJldHVybiBhIHBlcnNpc3RlbnQgc2VsZWN0aW9uLCBwcmVmZXIgYSBsb2NhbGx5LXNhdmVkIGNob2ljZVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFN0b3JhZ2VLZXlzLlRBQl9EQVRBKTtcbiAgICAgIGlmIChzYXZlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHNhdmVkKTtcbiAgICAgICAgaWYgKHBhcnNlZCAmJiAhKF9tb2RlbERhdGEgJiYgX21vZGVsRGF0YS5wcm92aWRlcikgJiYgcGFyc2VkLmN1cnJlbnRNb2RlbFByb3ZpZGVyKSB7XG4gICAgICAgICAgX21vZGVsRGF0YSA9IF9tb2RlbERhdGEgfHwge307XG4gICAgICAgICAgX21vZGVsRGF0YS5wcm92aWRlciA9IHBhcnNlZC5jdXJyZW50TW9kZWxQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkICYmICEoX21vZGVsRGF0YSAmJiBfbW9kZWxEYXRhLm1vZGVsKSAmJiBwYXJzZWQuY3VycmVudE1vZGVsTmFtZSkge1xuICAgICAgICAgIF9tb2RlbERhdGEgPSBfbW9kZWxEYXRhIHx8IHt9O1xuICAgICAgICAgIF9tb2RlbERhdGEubW9kZWwgPSBwYXJzZWQuY3VycmVudE1vZGVsTmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKCdDb3VsZCBub3QgcmVhZCBzYXZlZCBtb2RlbCBmcm9tIGxvY2FsU3RvcmFnZTonLCBlKTtcbiAgICB9XG4gICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtY3VycmVudC1sYWJlbCcpO1xuICAgIGlmIChsYWJlbCkge1xuICAgICAgY29uc3QgcHJvdiAgPSBfbW9kZWxEYXRhLnByb3ZpZGVyO1xuICAgICAgY29uc3QgbW9kZWwgPSBfbW9kZWxEYXRhLm1vZGVsIHx8ICdcdTIwMTQnO1xuICAgICAgbGFiZWwudGV4dENvbnRlbnQgPSBwcm92ID8gYCR7cHJvdn0gXHUwMEI3ICR7bW9kZWx9YCA6IG1vZGVsO1xuICAgIH1cbiAgICBpZiAoX21vZGVsRGF0YSAmJiBfbW9kZWxEYXRhLnByb3ZpZGVyKSB7XG4gICAgICBfc2VsZWN0ZWRNb2RlbFByb3ZpZGVycyA9IG5ldyBTZXQoW19tb2RlbERhdGEucHJvdmlkZXJdKTtcbiAgICAgIF91cGRhdGVMbG1TdGF0dXNQaWxsKCdjb25maWd1cmVkJywgYCR7X21vZGVsRGF0YS5wcm92aWRlcn0gY29uZmlndXJlZGApO1xuICAgIH0gZWxzZSB7XG4gICAgICBfdXBkYXRlTGxtU3RhdHVzUGlsbCgndW5jb25maWd1cmVkJywgJ05vdCBjb25maWd1cmVkJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLndhcm4oJ0NvdWxkIG5vdCBsb2FkIG1vZGVsIGxpc3Q6JywgZSk7XG4gIH0gZmluYWxseSB7XG4gICAgX21vZGVsU2VsZWN0b3JMb2FkaW5nID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Byb3ZpZGVyU3RhZ2VMYWJlbChwcm92aWRlciwgY2FwYWJsZVNldCkge1xuICBjb25zdCBpc0NhcGFibGUgPSBjYXBhYmxlU2V0Lmhhcyhwcm92aWRlcik7XG4gIHJldHVybiBpc0NhcGFibGUgPyAnbGlzdF9tb2RlbHMnIDogJ2ZhbGxiYWNrJztcbn1cblxuZnVuY3Rpb24gX3Byb3ZpZGVyRGlzcGxheUxhYmVsKHByb3ZpZGVyKSB7XG4gIGNvbnN0IGRlcHJlY2F0ZWQgPSB7XG4gICAgJ2NvcGlsb3Qtb2F1dGgnOiAnQ29waWxvdCBPQXV0aCAoZGVwcmVjYXRlZCknLFxuICAgIGNvcGlsb3Q6ICdDb3BpbG90IChkZXByZWNhdGVkKScsXG4gICAgZ2l0aHViOiAnR2l0SHViIE1vZGVscyAoZGVwcmVjYXRlZCknLFxuICAgICdjb3BpbG90LXNkayc6ICdDb3BpbG90IFNESyAocmVjb21tZW5kZWQpJyxcbiAgfTtcbiAgaWYgKGRlcHJlY2F0ZWRbcHJvdmlkZXJdKSByZXR1cm4gZGVwcmVjYXRlZFtwcm92aWRlcl07XG4gIHJldHVybiBwcm92aWRlcjtcbn1cblxuZnVuY3Rpb24gX2dldFF1aWNrTW9kZWxDYW5kaWRhdGVzKHJvd3MpIHtcbiAgY29uc3QgcGFyc2VkID0gX2dldE1vZGVsUHJlZnNGcm9tU3RvcmFnZSgpO1xuICBjb25zdCByZWNlbnRzID0gQXJyYXkuaXNBcnJheShwYXJzZWQucmVjZW50TW9kZWxzKSA/IHBhcnNlZC5yZWNlbnRNb2RlbHMgOiBbXTtcbiAgY29uc3QgcmFua2VkID0gW107XG5cbiAgZm9yIChjb25zdCByZWNlbnQgb2YgcmVjZW50cykge1xuICAgIGNvbnN0IGhpdCA9IHJvd3MuZmluZCgocm93KSA9PiByb3cucHJvdmlkZXIgPT09IHJlY2VudC5wcm92aWRlciAmJiByb3cubW9kZWwgPT09IHJlY2VudC5tb2RlbCk7XG4gICAgaWYgKGhpdCkgcmFua2VkLnB1c2goaGl0KTtcbiAgfVxuXG4gIGNvbnN0IHBvcHVsYXIgPSBbLi4ucm93c11cbiAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgYW0gPSBOdW1iZXIoYS5jb3BpbG90X211bHRpcGxpZXIgPz8gOTk5KTtcbiAgICAgIGNvbnN0IGJtID0gTnVtYmVyKGIuY29waWxvdF9tdWx0aXBsaWVyID8/IDk5OSk7XG4gICAgICBpZiAoYW0gIT09IGJtKSByZXR1cm4gYW0gLSBibTtcbiAgICAgIGNvbnN0IGFjID0gTnVtYmVyKGEuY29udGV4dF93aW5kb3cgfHwgMCk7XG4gICAgICBjb25zdCBiYyA9IE51bWJlcihiLmNvbnRleHRfd2luZG93IHx8IDApO1xuICAgICAgcmV0dXJuIGJjIC0gYWM7XG4gICAgfSk7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIHBvcHVsYXIpIHtcbiAgICBpZiAoIXJhbmtlZC5zb21lKChyKSA9PiByLnByb3ZpZGVyID09PSBpdGVtLnByb3ZpZGVyICYmIHIubW9kZWwgPT09IGl0ZW0ubW9kZWwpKSB7XG4gICAgICByYW5rZWQucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmFua2VkLnNsaWNlKDAsIDgpO1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyUXVpY2tNb2RlbExpc3Qocm93cykge1xuICBjb25zdCBxdWlja0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXF1aWNrLWxpc3QnKTtcbiAgaWYgKCFxdWlja0VsKSByZXR1cm47XG4gIHF1aWNrRWwuaW5uZXJIVE1MID0gJyc7XG5cbiAgY29uc3QgY2FuZGlkYXRlcyA9IF9nZXRRdWlja01vZGVsQ2FuZGlkYXRlcyhyb3dzIHx8IFtdKTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IGl0ZW0ucHJvdmlkZXIgPT09IF9tb2RlbERhdGE/LnByb3ZpZGVyICYmIGl0ZW0ubW9kZWwgPT09IF9tb2RlbERhdGE/Lm1vZGVsO1xuICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIGJ1dHRvbi5jbGFzc05hbWUgPSAnaGVhZGVyLXBpbGwtYnRuJztcbiAgICBidXR0b24uc3R5bGUucGFkZGluZyA9ICc1cHggMTBweCc7XG4gICAgYnV0dG9uLnN0eWxlLmZvbnRTaXplID0gJzAuODJlbSc7XG4gICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmQgPSBpc0FjdGl2ZSA/ICcjZGJlYWZlJyA6ICcjZjhmYWZjJztcbiAgICBidXR0b24uc3R5bGUuY29sb3IgPSBpc0FjdGl2ZSA/ICcjMWUzYThhJyA6ICcjMzM0MTU1JztcbiAgICBidXR0b24uc3R5bGUuYm9yZGVyQ29sb3IgPSBpc0FjdGl2ZSA/ICcjOTNjNWZkJyA6ICcjY2JkNWUxJztcbiAgICBidXR0b24udGl0bGUgPSBgJHtpdGVtLnByb3ZpZGVyfSBcdTAwQjcgJHtpdGVtLm1vZGVsfWA7XG4gICAgYnV0dG9uLnRleHRDb250ZW50ID0gYCR7aXRlbS5wcm92aWRlcn0gXHUwMEI3ICR7aXRlbS5tb2RlbH1gO1xuICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHNldE1vZGVsKGl0ZW0ubW9kZWwsIGl0ZW0ucHJvdmlkZXIpO1xuICAgIH0pO1xuICAgIHF1aWNrRWwuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfc3luY0NhdGFsb2dWaXNpYmlsaXR5KCkge1xuICBjb25zdCB3cmFwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWZ1bGwtdGFibGUtd3JhcCcpO1xuICBjb25zdCBzZWFyY2ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtZ2xvYmFsLXNlYXJjaCcpO1xuICBjb25zdCB0b2dnbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtc2hvdy1hbGwtYnRuJyk7XG4gIGlmICh3cmFwKSB3cmFwLnN0eWxlLmRpc3BsYXkgPSBfc2hvd0Z1bGxNb2RlbENhdGFsb2cgPyAnJyA6ICdub25lJztcbiAgaWYgKHNlYXJjaCkgc2VhcmNoLnN0eWxlLmRpc3BsYXkgPSBfc2hvd0Z1bGxNb2RlbENhdGFsb2cgPyAnJyA6ICdub25lJztcbiAgaWYgKHRvZ2dsZSkgdG9nZ2xlLnRleHRDb250ZW50ID0gX3Nob3dGdWxsTW9kZWxDYXRhbG9nID8gJ0hpZGUgRnVsbCBDYXRhbG9nJyA6ICdTaG93IEZ1bGwgQ2F0YWxvZyc7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZU1vZGVsQ2F0YWxvZ1Zpc2liaWxpdHkoKSB7XG4gIF9zaG93RnVsbE1vZGVsQ2F0YWxvZyA9ICFfc2hvd0Z1bGxNb2RlbENhdGFsb2c7XG4gIF9zeW5jQ2F0YWxvZ1Zpc2liaWxpdHkoKTtcbn1cblxuLy8gX3JlbmRlckF1dGhTdGVwIFx1MjAxNCBjYWxsZWQgYnkgX3NldE1vZGVsV2l6YXJkU3RlcCB3aGVuIGVudGVyaW5nIFN0ZXAgMi5cbi8vIFJlbmRlcnMgcHJvdmlkZXItc3BlY2lmaWMgY29udGVudCBpbnRvICNtb2RlbC1hdXRoLXN0ZXAtY29udGVudCBhbmQgc2hvd3Ncbi8vIHRoZSBhcHByb3ByaWF0ZSBzdWItcGFuZWwgKGtleSBpbnB1dCwgZGV2aWNlLWZsb3csIENMSSBub3RpY2UsIG9yIG5vbmUpLlxuYXN5bmMgZnVuY3Rpb24gX3JlbmRlckF1dGhTdGVwKHByb3ZpZGVyKSB7XG4gIGNvbnN0IGNvbnRlbnQgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtYXV0aC1zdGVwLWNvbnRlbnQnKTtcbiAgY29uc3Qga2V5UGFuZWwgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1hdXRoLWtleS1wYW5lbCcpO1xuICBjb25zdCBkZXZQYW5lbCAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWF1dGgtZGV2aWNlLXBhbmVsJyk7XG4gIGNvbnN0IGtleUlucHV0ICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtYXV0aC1rZXktaW5wdXQnKTtcbiAgY29uc3Qga2V5U3RhdHVzICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1hdXRoLWtleS1zdGF0dXMnKTtcblxuICBpZiAoIWNvbnRlbnQpIHJldHVybjtcblxuICAvLyBSZXNldCBzdWItcGFuZWxzXG4gIGlmIChrZXlQYW5lbCkgIGtleVBhbmVsLnN0eWxlLmRpc3BsYXkgID0gJ25vbmUnO1xuICBpZiAoZGV2UGFuZWwpICBkZXZQYW5lbC5zdHlsZS5kaXNwbGF5ICA9ICdub25lJztcbiAgaWYgKGtleUlucHV0KSAga2V5SW5wdXQudmFsdWUgPSAnJztcbiAgaWYgKGtleVN0YXR1cykga2V5U3RhdHVzLnRleHRDb250ZW50ID0gJyc7XG5cbiAgaWYgKCFwcm92aWRlcikge1xuICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwiY29sb3I6IzY0NzQ4YjtcIj5TZWxlY3QgYSBwcm92aWRlciBpbiBTdGVwIDEgZmlyc3QuPC9wPic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGNyZWREYXRhID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2goJy9hcGkvc2V0dGluZ3MvY3JlZGVudGlhbHMvc3RhdHVzJyk7XG4gICAgaWYgKHJlc3Aub2spIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwLmpzb24oKTtcbiAgICAgIGNyZWREYXRhID0gKGRhdGEucHJvdmlkZXJzIHx8IHt9KVtwcm92aWRlcl0gfHwgbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2ggeyAvKiBub24tZmF0YWwgKi8gfVxuXG4gIGNvbnN0IGF1dGhUeXBlICAgPSBjcmVkRGF0YT8uYXV0aF90eXBlICB8fCAnYXBpX2tleSc7XG4gIGNvbnN0IGxhYmVsICAgICAgPSBjcmVkRGF0YT8ubGFiZWwgICAgICB8fCBwcm92aWRlcjtcbiAgY29uc3QgaGVscFRleHQgICA9IGNyZWREYXRhPy5oZWxwX3RleHQgIHx8ICcnO1xuICBjb25zdCBnZXRLZXlVcmwgID0gY3JlZERhdGE/LmdldF9rZXlfdXJsIHx8ICcnO1xuICBjb25zdCBpc1NldCAgICAgID0gY3JlZERhdGE/LmlzX3NldCAgICAgfHwgZmFsc2U7XG4gIGNvbnN0IHNvdXJjZSAgICAgPSBjcmVkRGF0YT8uc291cmNlICAgICB8fCAndW5zZXQnO1xuICBjb25zdCBlbnZWYXIgICAgID0gY3JlZERhdGE/LmVudl92YXIgICAgfHwgbnVsbDtcbiAgY29uc3QgaXNMb2NrZWQgICA9IGNyZWREYXRhPy5sb2NrZWQgICAgIHx8IGZhbHNlO1xuXG4gIGNvbnN0IGlzU2V0QmFkZ2UgPSBpc1NldFxuICAgID8gJzxzcGFuIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDojZDFmYWU1O2NvbG9yOiMwNjVmNDY7Zm9udC1zaXplOjAuOGVtO2ZvbnQtd2VpZ2h0OjYwMDtcIj4mIzEwMDAzOyBLZXkgc2F2ZWQ8L3NwYW4+J1xuICAgIDogJzxzcGFuIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDojZmVlMmUyO2NvbG9yOiM5OTFiMWI7Zm9udC1zaXplOjAuOGVtO2ZvbnQtd2VpZ2h0OjYwMDtcIj5Ob3QgY29uZmlndXJlZDwvc3Bhbj4nO1xuXG4gIC8vIFNvdXJjZSBsYWJlbCArIFx1MjREOCB0b29sdGlwIFx1MjAxNCBtaXJyb3JzIHRoZSBzZXR0aW5ncyBkaWFsb2cgcGF0dGVybi5cbiAgbGV0IHNvdXJjZUxhYmVsID0gJyc7XG4gIGxldCB0b29sdGlwVGV4dCA9ICcnO1xuICBpZiAoc291cmNlID09PSAnZW52Jykge1xuICAgIHNvdXJjZUxhYmVsID0gYFNvdXJjZTogZW52aXJvbm1lbnQgdmFyaWFibGUgKCR7ZW52VmFyIHx8ICdsb2NrZWQnfSlgO1xuICAgIHRvb2x0aXBUZXh0ID0gYEN1cnJlbnRseSBsb2FkZWQgZnJvbSB0aGUgJHtlbnZWYXJ9IGVudmlyb25tZW50IHZhcmlhYmxlLiBgICtcbiAgICAgIGBUbyBjaGFuZ2UgaXQgcGVybWFuZW50bHksIHVwZGF0ZSB5b3VyIHNoZWxsIGNvbmZpZyAoZS5nLiB+Ly56c2hyYykgYW5kIHJlc3RhcnQgdGhlIHNlcnZlci4gYCArXG4gICAgICBgWW91IGNhbiBzdGlsbCBzYXZlIGEgdmFsdWUgYmVsb3cgXHUyMDE0IGl0IHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseSBidXQgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBvbiBuZXh0IHJlc3RhcnQuYDtcbiAgfSBlbHNlIGlmIChzb3VyY2UgPT09ICdkb3RlbnYnKSB7XG4gICAgc291cmNlTGFiZWwgPSBgU291cmNlOiAuZW52IGZpbGUgKCR7ZW52VmFyIHx8ICdsb2NrZWQnfSlgO1xuICAgIHRvb2x0aXBUZXh0ID0gYEN1cnJlbnRseSBsb2FkZWQgZnJvbSAke2VudlZhcn0gaW4geW91ciAuZW52IGZpbGUuIGAgK1xuICAgICAgYFRvIGNoYW5nZSBpdCBwZXJtYW5lbnRseSwgZWRpdCB0aGUgLmVudiBmaWxlIGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeSBhbmQgcmVzdGFydCB0aGUgc2VydmVyLiBgICtcbiAgICAgIGBZb3UgY2FuIHN0aWxsIHNhdmUgYSB2YWx1ZSBiZWxvdyBcdTIwMTQgaXQgdGFrZXMgZWZmZWN0IGltbWVkaWF0ZWx5IGJ1dCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgLmVudiBvbiBuZXh0IHJlc3RhcnQuYDtcbiAgfSBlbHNlIGlmIChzb3VyY2UgPT09ICdjb25maWcnKSB7XG4gICAgc291cmNlTGFiZWwgPSAnU291cmNlOiBjb25maWcueWFtbCc7XG4gICAgdG9vbHRpcFRleHQgPSAnU3RvcmVkIGluIGNvbmZpZy55YW1sLiBVcGRhdGUgaXQgdXNpbmcgdGhlIGlucHV0IGJlbG93Lic7XG4gIH1cblxuICBjb25zdCBpbmZvSWNvbiA9IHRvb2x0aXBUZXh0XG4gICAgPyBgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRpdGxlPVwiJHtlc2NhcGVIdG1sKHRvb2x0aXBUZXh0KX1cIiBhcmlhLWxhYmVsPVwiV2hlcmUgaXMgdGhpcyBrZXkgc3RvcmVkP1wiIGAgK1xuICAgICAgYHN0eWxlPVwiYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2N1cnNvcjpoZWxwO2NvbG9yOiM2NDc0OGI7Zm9udC1zaXplOjAuODVlbTtwYWRkaW5nOjAgMnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtsaW5lLWhlaWdodDoxO1wiPlx1MjREODwvYnV0dG9uPmBcbiAgICA6ICcnO1xuXG4gIGNvbnN0IHNvdXJjZUxhYmVsSHRtbCA9IHNvdXJjZUxhYmVsXG4gICAgPyBgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDoxMHB4O2ZvbnQtc2l6ZTowLjhlbTtjb2xvcjoke2lzTG9ja2VkID8gJyNiNDUzMDknIDogJyM2NDc0OGInfTtcIj4ke2VzY2FwZUh0bWwoc291cmNlTGFiZWwpfSR7aW5mb0ljb259PC9zcGFuPmBcbiAgICA6ICcnO1xuXG4gIC8vIEFtYmVyIHdhcm5pbmcgd2hlbiBhIGxvY2tlZCBzb3VyY2UgZXhpc3RzIFx1MjAxNCBpbnB1dCByZW1haW5zIGVuYWJsZWQgc28gdGhlXG4gIC8vIHVzZXIgY2FuIHNhdmUgYSBzZXNzaW9uL2NvbmZpZyBvdmVycmlkZSwgYnV0IHRoZSBwcmVjZWRlbmNlIHJ1bGUgaXMgY2xlYXIuXG4gIGNvbnN0IHNvdXJjZURlc2MgPSBzb3VyY2UgPT09ICdlbnYnID8gJ2Vudmlyb25tZW50IHZhcmlhYmxlJyA6ICcuZW52IGZpbGUnO1xuICBjb25zdCBzb3VyY2VSZWYgID0gZW52VmFyXG4gICAgPyBgJHtzb3VyY2VEZXNjfSA8Y29kZT4ke2VzY2FwZUh0bWwoZW52VmFyKX08L2NvZGU+YFxuICAgIDogc291cmNlRGVzYztcbiAgY29uc3QgbG9ja2VkV2Fybkh0bWwgPSBpc0xvY2tlZFxuICAgID8gYDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZWYzYzc7Ym9yZGVyOjFweCBzb2xpZCAjZjU5ZTBiO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luOjhweCAwO2ZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzkyNDAwZTtcIj5gICtcbiAgICAgIGBcdTI2QTAgVGhpcyBrZXkgaXMgbG9hZGVkIGZyb20gdGhlIDxzdHJvbmc+JHtzb3VyY2VSZWZ9PC9zdHJvbmc+LiBgICtcbiAgICAgIGBBbnkgdmFsdWUgc2F2ZWQgYmVsb3cgdGFrZXMgZWZmZWN0IGltbWVkaWF0ZWx5IGZvciB0aGUgY3VycmVudCBzZXNzaW9uLCBidXQgd2lsbCBiZSBgICtcbiAgICAgIGA8c3Ryb25nPm92ZXJyaWRkZW4gYnkgdGhlICR7c291cmNlRGVzY30gd2hlbiB0aGUgc2VydmVyIHJlc3RhcnRzIG9yIHJlbG9hZHM8L3N0cm9uZz4uPC9kaXY+YFxuICAgIDogJyc7XG5cbiAgY29uc3QgZ2V0S2V5TGluayA9IGdldEtleVVybFxuICAgID8gYDxhIGhyZWY9XCIke2VzY2FwZUh0bWwoZ2V0S2V5VXJsKX1cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgc3R5bGU9XCJjb2xvcjojMjU2M2ViO1wiPkdldCB5b3VyIGtleSAmIzg1OTk7PC9hPmBcbiAgICA6ICcnO1xuXG4gIGNvbnRlbnQuaW5uZXJIVE1MID1cbiAgICBgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTBweDtcIj5gICtcbiAgICBgICA8c3Ryb25nPiR7ZXNjYXBlSHRtbChsYWJlbCl9PC9zdHJvbmc+ICR7aXNTZXRCYWRnZX0ke3NvdXJjZUxhYmVsSHRtbH1gICtcbiAgICAoZ2V0S2V5TGluayA/IGAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6MTBweDtcIj4ke2dldEtleUxpbmt9PC9zcGFuPmAgOiAnJykgK1xuICAgIGA8L2Rpdj5gICtcbiAgICAoaGVscFRleHQgPyBgPHAgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOiM0NzU1Njk7bWFyZ2luOjAgMCAxMnB4O1wiPiR7ZXNjYXBlSHRtbChoZWxwVGV4dCl9PC9wPmAgOiAnJykgK1xuICAgIGxvY2tlZFdhcm5IdG1sO1xuXG4gIGlmIChhdXRoVHlwZSA9PT0gJ2FwaV9rZXknKSB7XG4gICAgaWYgKGtleVBhbmVsKSB7XG4gICAgICBrZXlQYW5lbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICBpZiAoa2V5SW5wdXQpIHtcbiAgICAgICAgLy8gQWx3YXlzIGVuYWJsZSBpbnB1dCBcdTIwMTQgdXNlciBjYW4gc2F2ZSBhIG5ldyB2YWx1ZSBldmVuIHdoZW4gZW52L2RvdGVudiBpcyB0aGUgY3VycmVudFxuICAgICAgICAvLyBzb3VyY2UuIFRoZSB3YXJuaW5nIGJhbm5lciBhYm92ZSBjb21tdW5pY2F0ZXMgdGhlIHJlc3RhcnQtcHJlY2VkZW5jZSBiZWhhdmlvdXIuXG4gICAgICAgIGtleUlucHV0LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIGtleUlucHV0LnN0eWxlLm9wYWNpdHkgPSAnJztcbiAgICAgICAga2V5SW5wdXQucGxhY2Vob2xkZXIgPSBpc1NldCA/ICdFbnRlciBuZXcga2V5IHRvIHJlcGxhY2UgdGhlIHNhdmVkIG9uZScgOiAnUGFzdGUgeW91ciBBUEkga2V5IGhlcmUnO1xuICAgICAgICBrZXlJbnB1dC5kYXRhc2V0LnByb3ZpZGVyID0gcHJvdmlkZXI7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGF1dGhUeXBlID09PSAnZGV2aWNlX2Zsb3cnKSB7XG4gICAgaWYgKGRldlBhbmVsKSB7XG4gICAgICBkZXZQYW5lbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICBhd2FpdCBfcmVmcmVzaENvcGlsb3RBdXRoU3RhdHVzKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGF1dGhUeXBlID09PSAnY2xpJykge1xuICAgIGNvbnRlbnQuaW5uZXJIVE1MICs9XG4gICAgICBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2YwZmRmNDtib3JkZXI6MXB4IHNvbGlkICNiYmY3ZDA7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjAuODhlbTtcIj5gICtcbiAgICAgIGA8cCBzdHlsZT1cIm1hcmdpbjowIDAgNnB4O1wiPlJ1biB0aGlzIGNvbW1hbmQgaW4gYSB0ZXJtaW5hbCwgdGhlbiByZXR1cm4gaGVyZSBhbmQgY2xpY2sgPHN0cm9uZz5OZXh0PC9zdHJvbmc+OjwvcD5gICtcbiAgICAgIGA8Y29kZSBzdHlsZT1cImZvbnQtc2l6ZToxZW07XCI+Z2ggYXV0aCBsb2dpbjwvY29kZT48L2Rpdj5gO1xuICB9IGVsc2Uge1xuICAgIGNvbnRlbnQuaW5uZXJIVE1MICs9XG4gICAgICBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2Y4ZmFmYztib3JkZXI6MXB4IHNvbGlkICNlMmU4ZjA7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjAuODhlbTtjb2xvcjojNDc1NTY5O1wiPmAgK1xuICAgICAgYE5vIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIGZvciB0aGlzIHByb3ZpZGVyLjwvZGl2PmA7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3JlZnJlc2hDb3BpbG90QXV0aFN0YXR1cygpIHtcbiAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtYXV0aC1zdGF0dXMnKTtcbiAgY29uc3Qgc3RhcnRCdG4gID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWF1dGgtc3RhcnQtYnRuJyk7XG4gIGNvbnN0IGxvZ291dEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1hdXRoLWxvZ291dC1idG4nKTtcbiAgY29uc3QgY29kZUVsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWF1dGgtY29kZScpO1xuICBjb25zdCBsaW5rRWwgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtYXV0aC1saW5rJyk7XG4gIGlmICghc3RhdHVzRWwpIHJldHVybjtcblxuICBpZiAoY29kZUVsKSAgY29kZUVsLnRleHRDb250ZW50ID0gJyc7XG4gIGlmIChsaW5rRWwpICBsaW5rRWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICB0cnkge1xuICAgIGNvbnN0IHN0ID0gYXdhaXQgZmV0Y2goJy9hcGkvY29waWxvdC1hdXRoL3N0YXR1cycpLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSk7XG4gICAgaWYgKHN0LmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ0F1dGhlbnRpY2F0ZWQgd2l0aCBHaXRIdWIgQ29waWxvdC4nO1xuICAgICAgaWYgKHN0YXJ0QnRuKSBzdGFydEJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgaWYgKGxvZ291dEJ0bikgbG9nb3V0QnRuLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIF91cGRhdGVMbG1TdGF0dXNQaWxsKCdhdXRoZW50aWNhdGVkJywgJ0NvcGlsb3QgcmVhZHknKTtcbiAgICB9IGVsc2UgaWYgKHN0LnBvbGxpbmcpIHtcbiAgICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ1dhaXRpbmcgZm9yIGRldmljZSBhcHByb3ZhbFx1MjAyNic7XG4gICAgICBpZiAoc3RhcnRCdG4pIHN0YXJ0QnRuLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIGlmIChsb2dvdXRCdG4pIGxvZ291dEJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgX3VwZGF0ZUxsbVN0YXR1c1BpbGwoJ3BvbGxpbmcnLCAnQ29waWxvdCBhdXRoIHBlbmRpbmcnLCAnXHUyOUQ3Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ05vdCBhdXRoZW50aWNhdGVkLiBTdGFydCBzaWduLWluIHRvIGVuYWJsZSBDb3BpbG90IE9BdXRoLic7XG4gICAgICBpZiAoc3RhcnRCdG4pIHN0YXJ0QnRuLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIGlmIChsb2dvdXRCdG4pIGxvZ291dEJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgX3VwZGF0ZUxsbVN0YXR1c1BpbGwoJ3VuYXV0aGVudGljYXRlZCcsICdDb3BpbG90IG5vdCBhdXRoZW50aWNhdGVkJyk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdVbmFibGUgdG8gbG9hZCBhdXRoIHN0YXR1cy4nO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVQcm92aWRlckFwaUtleSgpIHtcbiAgY29uc3Qga2V5SW5wdXQgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWF1dGgta2V5LWlucHV0Jyk7XG4gIGNvbnN0IGtleVN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1hdXRoLWtleS1zdGF0dXMnKTtcbiAgY29uc3QgcHJvdmlkZXIgID0ga2V5SW5wdXQ/LmRhdGFzZXQ/LnByb3ZpZGVyIHx8IF9tb2RlbFdpemFyZFNlbGVjdGVkUHJvdmlkZXI7XG4gIGNvbnN0IHZhbHVlICAgICA9IChrZXlJbnB1dD8udmFsdWUgfHwgJycpLnRyaW0oKTtcblxuICBpZiAoIXZhbHVlKSB7XG4gICAgaWYgKGtleVN0YXR1cykgeyBrZXlTdGF0dXMudGV4dENvbnRlbnQgPSAnUGxlYXNlIGVudGVyIGEga2V5IHZhbHVlLic7IGtleVN0YXR1cy5zdHlsZS5jb2xvciA9ICcjYjkxYzFjJzsgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgaWYgKGtleVN0YXR1cykgeyBrZXlTdGF0dXMudGV4dENvbnRlbnQgPSAnTm8gcHJvdmlkZXIgc2VsZWN0ZWQuJzsga2V5U3RhdHVzLnN0eWxlLmNvbG9yID0gJyNiOTFjMWMnOyB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGtleVN0YXR1cykgeyBrZXlTdGF0dXMudGV4dENvbnRlbnQgPSAnU2F2aW5nXHUyMDI2Jzsga2V5U3RhdHVzLnN0eWxlLmNvbG9yID0gJyM0NzU1NjknOyB9XG4gIHRyeSB7XG4gICAgYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL3NldHRpbmdzL2NyZWRlbnRpYWxzJywgeyBwcm92aWRlciwga2V5X3ZhbHVlOiB2YWx1ZSB9KTtcbiAgICBpZiAoa2V5SW5wdXQpICBrZXlJbnB1dC52YWx1ZSA9ICcnO1xuICAgIGlmIChrZXlTdGF0dXMpIHtcbiAgICAgIGtleVN0YXR1cy50ZXh0Q29udGVudCA9ICdLZXkgc2F2ZWQgc3VjY2Vzc2Z1bGx5Lic7XG4gICAgICBrZXlTdGF0dXMuc3R5bGUuY29sb3IgPSAnIzA2NWY0Nic7XG4gICAgfVxuICAgIC8vIFJlLXJlbmRlciBiYWRnZSB0byBzaG93IGtleSBpcyBub3cgc2V0XG4gICAgYXdhaXQgX3JlbmRlckF1dGhTdGVwKHByb3ZpZGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChrZXlTdGF0dXMpIHsga2V5U3RhdHVzLnRleHRDb250ZW50ID0gYEVycm9yOiAke2UubWVzc2FnZSB8fCBlfWA7IGtleVN0YXR1cy5zdHlsZS5jb2xvciA9ICcjYjkxYzFjJzsgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUFwaUtleVZpc2liaWxpdHkoKSB7XG4gIGNvbnN0IGlucHV0ICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1hdXRoLWtleS1pbnB1dCcpO1xuICBjb25zdCB0b2dnbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtYXV0aC1rZXktdG9nZ2xlJyk7XG4gIGlmICghaW5wdXQpIHJldHVybjtcbiAgY29uc3QgaXNIaWRkZW4gPSBpbnB1dC50eXBlID09PSAncGFzc3dvcmQnO1xuICBpbnB1dC50eXBlID0gaXNIaWRkZW4gPyAndGV4dCcgOiAncGFzc3dvcmQnO1xuICBpZiAodG9nZ2xlKSB0b2dnbGUudGV4dENvbnRlbnQgPSBpc0hpZGRlbiA/ICdcdUQ4M0RcdURFNDgnIDogJ1x1RDgzRFx1REM0MSc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0Q29waWxvdEF1dGhGcm9tV2l6YXJkKCkge1xuICBjb25zdCBzdGF0dXNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1hdXRoLXN0YXR1cycpO1xuICBjb25zdCBjb2RlRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtYXV0aC1jb2RlJyk7XG4gIGNvbnN0IGxpbmtFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1hdXRoLWxpbmsnKTtcbiAgaWYgKCFzdGF0dXNFbCB8fCAhY29kZUVsIHx8ICFsaW5rRWwpIHJldHVybjtcblxuICBfc2hvd01vZGVsV2l6YXJkQnVzeSgnU3RhcnRpbmcgR2l0SHViIGRldmljZSBhdXRob3JpemF0aW9uLi4uJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgZmxvd1JlcyA9IGF3YWl0IGZldGNoKCcvYXBpL2NvcGlsb3QtYXV0aC9zdGFydCcsIHsgbWV0aG9kOiAnUE9TVCcgfSk7XG4gICAgaWYgKCFmbG93UmVzLm9rKSB0aHJvdyBuZXcgRXJyb3IoYXdhaXQgZmxvd1Jlcy50ZXh0KCkpO1xuICAgIGNvbnN0IGZsb3cgPSBhd2FpdCBmbG93UmVzLmpzb24oKTtcblxuICAgIGNvZGVFbC50ZXh0Q29udGVudCA9IGZsb3cudXNlcl9jb2RlIHx8ICcnO1xuICAgIGxpbmtFbC5ocmVmID0gZmxvdy52ZXJpZmljYXRpb25fdXJpIHx8ICdodHRwczovL2dpdGh1Yi5jb20vbG9naW4vZGV2aWNlJztcbiAgICBsaW5rRWwuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ09wZW4gR2l0SHViLCBlbnRlciB0aGUgY29kZSwgdGhlbiByZXR1cm4gaGVyZS4nO1xuICAgIHdpbmRvdy5vcGVuKGxpbmtFbC5ocmVmLCAnX2JsYW5rJyk7XG5cbiAgICBhd2FpdCBmZXRjaCgnL2FwaS9jb3BpbG90LWF1dGgvcG9sbCcsIHsgbWV0aG9kOiAnUE9TVCcgfSk7XG4gICAgX3VwZGF0ZUxsbVN0YXR1c1BpbGwoJ3BvbGxpbmcnLCAnQ29waWxvdCBhdXRoIHBlbmRpbmcnLCAnXHUyOUQ3Jyk7XG4gICAgaWYgKF9jb3BpbG90QXV0aFBvbGxUaW1lcikgY2xlYXJJbnRlcnZhbChfY29waWxvdEF1dGhQb2xsVGltZXIpO1xuICAgIF9jb3BpbG90QXV0aFBvbGxUaW1lciA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0ID0gYXdhaXQgZmV0Y2goJy9hcGkvY29waWxvdC1hdXRoL3N0YXR1cycpLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSk7XG4gICAgICAgIGlmIChzdC5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChfY29waWxvdEF1dGhQb2xsVGltZXIpO1xuICAgICAgICAgIF9jb3BpbG90QXV0aFBvbGxUaW1lciA9IG51bGw7XG4gICAgICAgICAgYXdhaXQgX3JlZnJlc2hDb3BpbG90QXV0aFN0YXR1cygpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8ga2VlcCBwb2xsaW5nIHNpbGVudGx5IHVudGlsIGNsb3NlXG4gICAgICB9XG4gICAgfSwgNTAwMCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3RhdHVzRWwudGV4dENvbnRlbnQgPSBgQXV0aCBzdGFydCBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZSB8fCBlcnJvcn1gO1xuICB9IGZpbmFsbHkge1xuICAgIF9oaWRlTW9kZWxXaXphcmRCdXN5KCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9nb3V0Q29waWxvdEF1dGhGcm9tV2l6YXJkKCkge1xuICBhd2FpdCBmZXRjaCgnL2FwaS9jb3BpbG90LWF1dGgvbG9nb3V0JywgeyBtZXRob2Q6ICdQT1NUJyB9KTtcbiAgYXdhaXQgX3JlZnJlc2hDb3BpbG90QXV0aFN0YXR1cygpO1xufVxuXG5mdW5jdGlvbiBfd2lyZUdsb2JhbE1vZGVsU2VhcmNoKCkge1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1nbG9iYWwtc2VhcmNoJyk7XG4gIGlmICghaW5wdXQpIHJldHVybjtcbiAgaW5wdXQub25pbnB1dCA9ICgpID0+IHtcbiAgICBpZiAoX21vZGVsRGF0YVRhYmxlICYmIHR5cGVvZiBfbW9kZWxEYXRhVGFibGUuc2VhcmNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBfbW9kZWxEYXRhVGFibGUuc2VhcmNoKGlucHV0LnZhbHVlIHx8ICcnKS5kcmF3KCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyUHJvdmlkZXJTZWxlY3RvcigpIHtcbiAgY29uc3QgbGlzdEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXByb3ZpZGVyLWxpc3QnKTtcbiAgaWYgKCFsaXN0RWwgfHwgIV9tb2RlbERhdGEpIHJldHVybjtcblxuICBjb25zdCBwcm92aWRlcnMgPSBBcnJheS5pc0FycmF5KF9tb2RlbERhdGEucHJvdmlkZXJzKVxuICAgID8gX21vZGVsRGF0YS5wcm92aWRlcnNcbiAgICA6IEFycmF5LmZyb20obmV3IFNldCgoX21vZGVsRGF0YS5hbGxfbW9kZWxzIHx8IFtdKS5tYXAociA9PiByLnByb3ZpZGVyKS5maWx0ZXIoQm9vbGVhbikpKS5zb3J0KCk7XG4gIGNvbnN0IGNhcGFibGVTZXQgPSBuZXcgU2V0KF9tb2RlbERhdGEubGlzdF9tb2RlbHNfY2FwYWJsZSB8fCBbXSk7XG5cbiAgaWYgKCFfbW9kZWxXaXphcmRTZWxlY3RlZFByb3ZpZGVyKSB7XG4gICAgX21vZGVsV2l6YXJkU2VsZWN0ZWRQcm92aWRlciA9IF9tb2RlbERhdGEucHJvdmlkZXIgfHwgcHJvdmlkZXJzWzBdIHx8IG51bGw7XG4gIH1cbiAgaWYgKF9tb2RlbFdpemFyZFNlbGVjdGVkUHJvdmlkZXIpIHtcbiAgICBfc2VsZWN0ZWRNb2RlbFByb3ZpZGVycyA9IG5ldyBTZXQoW19tb2RlbFdpemFyZFNlbGVjdGVkUHJvdmlkZXJdKTtcbiAgfVxuXG4gIC8vIERpc3Bvc2UgYW55IGV4aXN0aW5nIEJTNSBwb3BvdmVycyBiZWZvcmUgY2xlYXJpbmcgdGhlIGxpc3QuXG4gIGxpc3RFbC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1icy10b2dnbGU9XCJwb3BvdmVyXCJdJykuZm9yRWFjaChlbCA9PiB7XG4gICAgd2luZG93LmJvb3RzdHJhcD8uUG9wb3Zlcj8uZ2V0SW5zdGFuY2UoZWwpPy5kaXNwb3NlKCk7XG4gIH0pO1xuXG4gIGxpc3RFbC5pbm5lckhUTUwgPSAnJztcbiAgcHJvdmlkZXJzLmZvckVhY2gocHJvdmlkZXIgPT4ge1xuICAgIGNvbnN0IGNoZWNrZWQgPSBwcm92aWRlciA9PT0gX21vZGVsV2l6YXJkU2VsZWN0ZWRQcm92aWRlcjtcbiAgICBjb25zdCBzb3VyY2VMYWJlbCA9IF9wcm92aWRlclN0YWdlTGFiZWwocHJvdmlkZXIsIGNhcGFibGVTZXQpO1xuICAgIGNvbnN0IGluZm8gPSBnZXRQcm92aWRlckluZm8ocHJvdmlkZXIpO1xuXG4gICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1xuICAgIGxhYmVsLnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDo2cHg7IHBhZGRpbmc6NHB4IDhweDsgYm9yZGVyOjFweCBzb2xpZCAjY2JkNWUxOyBib3JkZXItcmFkaXVzOjk5OXB4OyBmb250LXNpemU6MC44MmVtOyBiYWNrZ3JvdW5kOiNmZmY7IGN1cnNvcjpwb2ludGVyOyc7XG4gICAgbGFiZWwuaW5uZXJIVE1MID1cbiAgICAgIGA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm1vZGVsLXByb3ZpZGVyLWNob2ljZVwiIHZhbHVlPVwiJHtlc2NhcGVIdG1sKHByb3ZpZGVyKX1cIiAke2NoZWNrZWQgPyAnY2hlY2tlZCcgOiAnJ30gc3R5bGU9XCJtYXJnaW46MDtcIiAvPmAgK1xuICAgICAgYDxzcGFuPiR7ZXNjYXBlSHRtbChfcHJvdmlkZXJEaXNwbGF5TGFiZWwocHJvdmlkZXIpKX08L3NwYW4+YCArXG4gICAgICBgPHNwYW4gc3R5bGU9XCJjb2xvcjojNjQ3NDhiOyBmb250LXNpemU6MC44ZW07XCI+KCR7ZXNjYXBlSHRtbChzb3VyY2VMYWJlbCl9KTwvc3Bhbj5gO1xuXG4gICAgLy8gQXBwZW5kIGEgXHUyNEQ4IGJ1dHRvbiB3aXJlZCB0byBhIEJTNSBIVE1MIHBvcG92ZXIgc28gbGlua3MgaW5zaWRlIGFyZSBjbGlja2FibGUuXG4gICAgaWYgKGluZm8pIHtcbiAgICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgYnRuLnR5cGUgPSAnYnV0dG9uJztcbiAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnUHJvdmlkZXIgaW5mbycpO1xuICAgICAgYnRuLnNldEF0dHJpYnV0ZSgnZGF0YS1icy10b2dnbGUnLCAncG9wb3ZlcicpO1xuICAgICAgYnRuLnNldEF0dHJpYnV0ZSgnZGF0YS1icy10cmlnZ2VyJywgJ2NsaWNrJyk7XG4gICAgICBidG4uc2V0QXR0cmlidXRlKCdkYXRhLWJzLXBsYWNlbWVudCcsICdyaWdodCcpO1xuICAgICAgYnRuLnNldEF0dHJpYnV0ZSgnZGF0YS1icy1odG1sJywgJ3RydWUnKTtcbiAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtY29udGFpbmVyJywgJ2JvZHknKTtcbiAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtY29udGVudCcsIHByb3ZpZGVySW5mb1BvcG92ZXJDb250ZW50KGluZm8pKTtcbiAgICAgIGJ0bi5zdHlsZS5jc3NUZXh0ID0gJ2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjQ3NDhiO2ZvbnQtc2l6ZTowLjllbTtwYWRkaW5nOjAgMXB4O2xpbmUtaGVpZ2h0OjE7dmVydGljYWwtYWxpZ246bWlkZGxlOyc7XG4gICAgICBidG4udGV4dENvbnRlbnQgPSAnXHUyNEQ4JztcbiAgICAgIC8vIFByZXZlbnQgdGhlIHJhZGlvLWxhYmVsIGNsaWNrIGZyb20gcHJvcGFnYXRpbmcgdG8gdGhlIHJhZGlvIGJ1dHRvbi5cbiAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4gZS5zdG9wUHJvcGFnYXRpb24oKSk7XG4gICAgICBsYWJlbC5hcHBlbmRDaGlsZChidG4pO1xuXG4gICAgICAvLyBJbml0aWFsaXNlIGFmdGVyIGFwcGVuZCBcdTIwMTQgQlM1IG11c3QgZmluZCB0aGUgZWxlbWVudCBpbiB0aGUgRE9NLlxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaWYgKHdpbmRvdy5ib290c3RyYXA/LlBvcG92ZXIpIHtcbiAgICAgICAgICBuZXcgd2luZG93LmJvb3RzdHJhcC5Qb3BvdmVyKGJ0biwgeyBzYW5pdGl6ZTogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGNoZWNrYm94ID0gbGFiZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICBjaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICBpZiAoIWNoZWNrYm94LmNoZWNrZWQpIHJldHVybjtcbiAgICAgIF9tb2RlbFdpemFyZFNlbGVjdGVkUHJvdmlkZXIgPSBwcm92aWRlcjtcbiAgICAgIF9zZWxlY3RlZE1vZGVsUHJvdmlkZXJzID0gbmV3IFNldChbcHJvdmlkZXJdKTtcbiAgICAgIF91cGRhdGVNb2RlbFdpemFyZE5hdigpO1xuICAgIH0pO1xuXG4gICAgbGlzdEVsLmFwcGVuZENoaWxkKGxhYmVsKTtcbiAgfSk7XG5cbiAgX3VwZGF0ZU1vZGVsV2l6YXJkTmF2KCk7XG59XG5cbmZ1bmN0aW9uIF9zaG93TW9kZWxXaXphcmRCdXN5KG1lc3NhZ2UpIHtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC13aXphcmQtYnVzeS1vdmVybGF5Jyk7XG4gIGNvbnN0IG1lc3NhZ2VFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC13aXphcmQtYnVzeS1tZXNzYWdlJyk7XG4gIGlmIChtZXNzYWdlRWwpIG1lc3NhZ2VFbC50ZXh0Q29udGVudCA9IG1lc3NhZ2UgfHwgJ1dvcmtpbmcuLi4nO1xuICBpZiAob3ZlcmxheSkgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xufVxuXG5mdW5jdGlvbiBfaGlkZU1vZGVsV2l6YXJkQnVzeSgpIHtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC13aXphcmQtYnVzeS1vdmVybGF5Jyk7XG4gIGlmIChvdmVybGF5KSBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG59XG5cbmZ1bmN0aW9uIF9zZXRNb2RlbFdpemFyZFN0ZXAoc3RlcCkge1xuICBfbW9kZWxXaXphcmRTdGVwID0gWzEsIDIsIDMsIDRdLmluY2x1ZGVzKHN0ZXApID8gc3RlcCA6IDE7XG4gIGNvbnN0IHBhbmVzID0ge1xuICAgIDE6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1zdGVwLXByb3ZpZGVyJyksXG4gICAgMjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXN0ZXAtYXV0aCcpLFxuICAgIDM6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1zdGVwLW1vZGVscycpLFxuICAgIDQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1zdGVwLXN1Y2Nlc3MnKSxcbiAgfTtcbiAgT2JqZWN0LmVudHJpZXMocGFuZXMpLmZvckVhY2goKFtudW0sIGVsXSkgPT4ge1xuICAgIGlmIChlbCkgZWwuc3R5bGUuZGlzcGxheSA9IE51bWJlcihudW0pID09PSBfbW9kZWxXaXphcmRTdGVwID8gJycgOiAnbm9uZSc7XG4gIH0pO1xuICBpZiAoX21vZGVsV2l6YXJkU3RlcCA9PT0gMikge1xuICAgIF9yZW5kZXJBdXRoU3RlcChfbW9kZWxXaXphcmRTZWxlY3RlZFByb3ZpZGVyKTtcbiAgfVxuICBfdXBkYXRlTW9kZWxXaXphcmROYXYoKTtcbn1cblxuZnVuY3Rpb24gX3VwZGF0ZU1vZGVsV2l6YXJkUHJvZ3Jlc3NCYXIoKSB7XG4gIFsxLCAyLCAzLCA0XS5mb3JFYWNoKChzdGVwTnVtKSA9PiB7XG4gICAgY29uc3Qgc3RlcEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYG1vZGVsLXByb2dyZXNzLXN0ZXAtJHtzdGVwTnVtfWApO1xuICAgIGlmICghc3RlcEVsKSByZXR1cm47XG4gICAgY29uc3QgYmFkZ2VFbCA9IHN0ZXBFbC5xdWVyeVNlbGVjdG9yKCcubW9kZWwtcHJvZ3Jlc3MtYmFkZ2UnKTtcbiAgICBzdGVwRWwuY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWN0aXZlJywgJ2lzLWNvbXBsZXRlJywgJ2lzLXVwY29taW5nJyk7XG4gICAgaWYgKHN0ZXBOdW0gPCBfbW9kZWxXaXphcmRTdGVwKSB7XG4gICAgICBzdGVwRWwuY2xhc3NMaXN0LmFkZCgnaXMtY29tcGxldGUnKTtcbiAgICAgIHN0ZXBFbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsICdmYWxzZScpO1xuICAgICAgaWYgKGJhZGdlRWwpIGJhZGdlRWwudGV4dENvbnRlbnQgPSAnXHUyNzEzJztcbiAgICB9IGVsc2UgaWYgKHN0ZXBOdW0gPT09IF9tb2RlbFdpemFyZFN0ZXApIHtcbiAgICAgIHN0ZXBFbC5jbGFzc0xpc3QuYWRkKCdpcy1hY3RpdmUnKTtcbiAgICAgIHN0ZXBFbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsICdzdGVwJyk7XG4gICAgICBpZiAoYmFkZ2VFbCkgYmFkZ2VFbC50ZXh0Q29udGVudCA9IFN0cmluZyhzdGVwTnVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RlcEVsLmNsYXNzTGlzdC5hZGQoJ2lzLXVwY29taW5nJyk7XG4gICAgICBzdGVwRWwuc2V0QXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnLCAnZmFsc2UnKTtcbiAgICAgIGlmIChiYWRnZUVsKSBiYWRnZUVsLnRleHRDb250ZW50ID0gU3RyaW5nKHN0ZXBOdW0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVNb2RlbFdpemFyZE5hdigpIHtcbiAgY29uc3Qgc3RlcExhYmVsICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC13aXphcmQtc3RlcC1sYWJlbCcpO1xuICBjb25zdCBiYWNrQnRuICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXdpemFyZC1iYWNrLWJ0bicpO1xuICBjb25zdCBuZXh0QnRuICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXdpemFyZC1uZXh0LWJ0bicpO1xuICBjb25zdCB0ZXN0QnRuICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXRlc3QtYnRuJyk7XG4gIGNvbnN0IHJlZnJlc2hCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJpY2luZy1yZWZyZXNoLWJ0bicpO1xuICBjb25zdCBmb290ZXIgICAgID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1vZGVsLXdpemFyZC1mb290ZXInKTtcblxuICBfdXBkYXRlTW9kZWxXaXphcmRQcm9ncmVzc0JhcigpO1xuXG4gIGlmIChzdGVwTGFiZWwpIHtcbiAgICBjb25zdCBsYWJlbHMgPSB7XG4gICAgICAxOiAnU3RlcCAxIG9mIDQ6IENob29zZSBwcm92aWRlcicsXG4gICAgICAyOiAnU3RlcCAyIG9mIDQ6IFNldCB1cCBhdXRoZW50aWNhdGlvbicsXG4gICAgICAzOiAnU3RlcCAzIG9mIDQ6IENob29zZSBtb2RlbCBhbmQgdGVzdCBjb25uZWN0aW9uJyxcbiAgICAgIDQ6ICdTdGVwIDQgb2YgNDogQ29tcGxldGUnLFxuICAgIH07XG4gICAgc3RlcExhYmVsLnRleHRDb250ZW50ID0gbGFiZWxzW19tb2RlbFdpemFyZFN0ZXBdIHx8ICcnO1xuICB9XG5cbiAgaWYgKGJhY2tCdG4pIHtcbiAgICBiYWNrQnRuLmRpc2FibGVkID0gX21vZGVsV2l6YXJkU3RlcCA9PT0gMTtcbiAgICBiYWNrQnRuLnN0eWxlLmRpc3BsYXkgPSBfbW9kZWxXaXphcmRTdGVwID09PSA0ID8gJ25vbmUnIDogJyc7XG4gIH1cbiAgLy8gTmV4dCBidXR0b246IHZpc2libGUgb24gc3RlcHMgMSBhbmQgMlxuICBpZiAobmV4dEJ0bikge1xuICAgIG5leHRCdG4uc3R5bGUuZGlzcGxheSA9IChfbW9kZWxXaXphcmRTdGVwID09PSAxIHx8IF9tb2RlbFdpemFyZFN0ZXAgPT09IDIpID8gJycgOiAnbm9uZSc7XG4gICAgbmV4dEJ0bi5kaXNhYmxlZCA9IF9tb2RlbFdpemFyZFN0ZXAgPT09IDEgJiYgIV9tb2RlbFdpemFyZFNlbGVjdGVkUHJvdmlkZXI7XG4gICAgbmV4dEJ0bi50ZXh0Q29udGVudCA9IF9tb2RlbFdpemFyZFN0ZXAgPT09IDIgPyAnTmV4dCcgOiAnTmV4dCc7XG4gIH1cbiAgaWYgKHRlc3RCdG4pICAgIHRlc3RCdG4uc3R5bGUuZGlzcGxheSAgICA9IF9tb2RlbFdpemFyZFN0ZXAgPT09IDMgPyAnJyA6ICdub25lJztcbiAgaWYgKHJlZnJlc2hCdG4pIHJlZnJlc2hCdG4uc3R5bGUuZGlzcGxheSA9IF9tb2RlbFdpemFyZFN0ZXAgPT09IDMgPyAnJyA6ICdub25lJztcbiAgaWYgKGZvb3RlcikgZm9vdGVyLnN0eWxlLmp1c3RpZnlDb250ZW50ICA9IF9tb2RlbFdpemFyZFN0ZXAgPT09IDQgPyAnY2VudGVyJyA6ICdzcGFjZS1iZXR3ZWVuJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gX2xvYWRNb2RlbHNGb3JTZWxlY3RlZFByb3ZpZGVyKCkge1xuICBpZiAoIV9tb2RlbFdpemFyZFNlbGVjdGVkUHJvdmlkZXIpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBsb2FkaW5nRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtbW9kZWxzLWxvYWRpbmcnKTtcbiAgaWYgKGxvYWRpbmdFbCkge1xuICAgIGxvYWRpbmdFbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgbG9hZGluZ0VsLnN0eWxlLmNvbG9yID0gJyM0NzU1NjknO1xuICAgIGxvYWRpbmdFbC5pbm5lckhUTUwgPSAnPHNwYW4gY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7Ym9yZGVyLXdpZHRoOjJweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLXJpZ2h0OjZweDtcIj48L3NwYW4+TG9hZGluZyBtb2RlbHMgZm9yIHNlbGVjdGVkIHByb3ZpZGVyLi4uJztcbiAgfVxuXG4gIF9zaG93TW9kZWxXaXphcmRCdXN5KCdRdWVyeWluZyBhdmFpbGFibGUgbW9kZWxzLi4uJyk7XG4gIHRyeSB7XG4gICAgX3NlbGVjdGVkTW9kZWxQcm92aWRlcnMgPSBuZXcgU2V0KFtfbW9kZWxXaXphcmRTZWxlY3RlZFByb3ZpZGVyXSk7XG4gICAgX21vZGVsRGF0YS5wcm92aWRlciA9IF9tb2RlbFdpemFyZFNlbGVjdGVkUHJvdmlkZXI7XG4gICAgYXdhaXQgX3JlZnJlc2hNb2RlbENhdGFsb2dGb3JTZWxlY3Rpb24oKTtcbiAgICBpZiAobG9hZGluZ0VsKSB7XG4gICAgICBsb2FkaW5nRWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIGxvYWRpbmdFbC50ZXh0Q29udGVudCA9ICcnO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cud2FybignQ291bGQgbm90IGxvYWQgbW9kZWxzIGZvciBzZWxlY3RlZCBwcm92aWRlcjonLCBlcnJvcik7XG4gICAgaWYgKGxvYWRpbmdFbCkge1xuICAgICAgbG9hZGluZ0VsLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIGxvYWRpbmdFbC50ZXh0Q29udGVudCA9ICdGYWlsZWQgdG8gbG9hZCBtb2RlbHMgZm9yIHNlbGVjdGVkIHByb3ZpZGVyLic7XG4gICAgICBsb2FkaW5nRWwuc3R5bGUuY29sb3IgPSAnI2I5MWMxYyc7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfaGlkZU1vZGVsV2l6YXJkQnVzeSgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG5leHRXaXphcmRTdGVwKCkge1xuICBpZiAoX21vZGVsV2l6YXJkU3RlcCA9PT0gMSkge1xuICAgIGlmICghX21vZGVsV2l6YXJkU2VsZWN0ZWRQcm92aWRlcikgcmV0dXJuO1xuICAgIF9zZXRNb2RlbFdpemFyZFN0ZXAoMik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChfbW9kZWxXaXphcmRTdGVwID09PSAyKSB7XG4gICAgY29uc3QgbG9hZGVkID0gYXdhaXQgX2xvYWRNb2RlbHNGb3JTZWxlY3RlZFByb3ZpZGVyKCk7XG4gICAgaWYgKCFsb2FkZWQpIHJldHVybjtcbiAgICBfc2V0TW9kZWxXaXphcmRTdGVwKDMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByZXZpb3VzV2l6YXJkU3RlcCgpIHtcbiAgaWYgKF9tb2RlbFdpemFyZFN0ZXAgPT09IDIpIHsgX3NldE1vZGVsV2l6YXJkU3RlcCgxKTsgcmV0dXJuOyB9XG4gIGlmIChfbW9kZWxXaXphcmRTdGVwID09PSAzKSB7IF9zZXRNb2RlbFdpemFyZFN0ZXAoMik7IHJldHVybjsgfVxuICBpZiAoX21vZGVsV2l6YXJkU3RlcCA9PT0gNCkgeyBfc2V0TW9kZWxXaXphcmRTdGVwKDMpOyB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9yZWZyZXNoTW9kZWxDYXRhbG9nRm9yU2VsZWN0aW9uKCkge1xuICBpZiAoIV9tb2RlbERhdGEpIHJldHVybjtcbiAgaWYgKF9jYXRhbG9nUmVmcmVzaGluZykge1xuICAgIF9jYXRhbG9nUmVmcmVzaFBlbmRpbmcgPSB0cnVlO1xuICAgIHJldHVybjtcbiAgfVxuICBfY2F0YWxvZ1JlZnJlc2hpbmcgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBBcnJheS5mcm9tKF9zZWxlY3RlZE1vZGVsUHJvdmlkZXJzKTtcbiAgICBpZiAoIXNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgX3NlbGVjdGVkTW9kZWxQcm92aWRlcnMgPSBuZXcgU2V0KFtfbW9kZWxEYXRhLnByb3ZpZGVyXSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdmlkZXJzUGFyYW0gPSBlbmNvZGVVUklDb21wb25lbnQoQXJyYXkuZnJvbShfc2VsZWN0ZWRNb2RlbFByb3ZpZGVycykuam9pbignLCcpKTtcbiAgICBjb25zdCBjYXRhbG9nID0gYXdhaXQgYXBpQ2FsbCgnR0VUJywgYC9hcGkvbW9kZWwtY2F0YWxvZz9wcm92aWRlcnM9JHtwcm92aWRlcnNQYXJhbX1gKTtcbiAgICBfbW9kZWxEYXRhLmFsbF9tb2RlbHMgPSBjYXRhbG9nLmFsbF9tb2RlbHMgfHwgW107XG4gICAgX21vZGVsRGF0YS5wcmljaW5nX3VwZGF0ZWRfYXQgPSBjYXRhbG9nLnByaWNpbmdfdXBkYXRlZF9hdCB8fCBfbW9kZWxEYXRhLnByaWNpbmdfdXBkYXRlZF9hdDtcbiAgICBfbW9kZWxEYXRhLnByaWNpbmdfc291cmNlID0gY2F0YWxvZy5wcmljaW5nX3NvdXJjZSB8fCBfbW9kZWxEYXRhLnByaWNpbmdfc291cmNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNhdGFsb2cucHJvdmlkZXJzKSAmJiBjYXRhbG9nLnByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICAgIF9tb2RlbERhdGEucHJvdmlkZXJzID0gY2F0YWxvZy5wcm92aWRlcnM7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNhdGFsb2cubGlzdF9tb2RlbHNfY2FwYWJsZSkpIHtcbiAgICAgIF9tb2RlbERhdGEubGlzdF9tb2RlbHNfY2FwYWJsZSA9IGNhdGFsb2cubGlzdF9tb2RlbHNfY2FwYWJsZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLndhcm4oJ0NvdWxkIG5vdCByZWZyZXNoIG1vZGVsIGNhdGFsb2cgZm9yIHNlbGVjdGVkIHByb3ZpZGVyczonLCBlcnJvcik7XG4gIH0gZmluYWxseSB7XG4gICAgX2NhdGFsb2dSZWZyZXNoaW5nID0gZmFsc2U7XG4gIH1cblxuICBfcmVuZGVyUHJvdmlkZXJTZWxlY3RvcigpO1xuICBfYnVpbGRNb2RlbFRhYmxlKCk7XG5cbiAgaWYgKF9jYXRhbG9nUmVmcmVzaFBlbmRpbmcpIHtcbiAgICBfY2F0YWxvZ1JlZnJlc2hQZW5kaW5nID0gZmFsc2U7XG4gICAgYXdhaXQgX3JlZnJlc2hNb2RlbENhdGFsb2dGb3JTZWxlY3Rpb24oKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuTW9kZWxNb2RhbCgpIHtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1tb2RhbC1vdmVybGF5Jyk7XG4gIGlmICghb3ZlcmxheSkgcmV0dXJuO1xuXG4gIGlmICghX21vZGVsRGF0YSkge1xuICAgIGF3YWl0IGxvYWRNb2RlbFNlbGVjdG9yKCk7XG4gIH1cbiAgYXdhaXQgbG9hZFByb3ZpZGVySW5mbygpO1xuICBpZiAoIV9tb2RlbFdpemFyZFNlbGVjdGVkUHJvdmlkZXIpIHtcbiAgICBfbW9kZWxXaXphcmRTZWxlY3RlZFByb3ZpZGVyID0gX21vZGVsRGF0YT8ucHJvdmlkZXIgfHwgbnVsbDtcbiAgfVxuICBjb25zdCBzdWNjZXNzU3VtbWFyeSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1zdWNjZXNzLXN1bW1hcnknKTtcbiAgaWYgKHN1Y2Nlc3NTdW1tYXJ5KSB7XG4gICAgc3VjY2Vzc1N1bW1hcnkudGV4dENvbnRlbnQgPSAnUHJvdmlkZXIgYW5kIG1vZGVsIGFyZSBjb25maWd1cmVkIGFuZCB0aGUgY29ubmVjdGlvbiBjaGVjayBzdWNjZWVkZWQuJztcbiAgfVxuICBfcmVuZGVyUHJvdmlkZXJTZWxlY3RvcigpO1xuICBfc3luY0NhdGFsb2dWaXNpYmlsaXR5KCk7XG4gIF93aXJlR2xvYmFsTW9kZWxTZWFyY2goKTtcbiAgX3NldE1vZGVsV2l6YXJkU3RlcCgxKTtcbiAgX2hpZGVNb2RlbFdpemFyZEJ1c3koKTtcbiAgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBfZm9jdXNTdGFjay5wdXNoKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICBzZXRJbml0aWFsRm9jdXMoJ21vZGVsLW1vZGFsLW92ZXJsYXknKTtcbiAgdHJhcEZvY3VzKCdtb2RlbC1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlTW9kZWxNb2RhbCgpIHtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1tb2RhbC1vdmVybGF5Jyk7XG4gIGlmIChvdmVybGF5KSBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIF9zZXRNb2RlbFdpemFyZFN0ZXAoMSk7XG4gIF9oaWRlTW9kZWxXaXphcmRCdXN5KCk7XG4gIGlmIChfY29waWxvdEF1dGhQb2xsVGltZXIpIHtcbiAgICBjbGVhckludGVydmFsKF9jb3BpbG90QXV0aFBvbGxUaW1lcik7XG4gICAgX2NvcGlsb3RBdXRoUG9sbFRpbWVyID0gbnVsbDtcbiAgfVxuICByZXN0b3JlRm9jdXMoKTtcbn1cblxuZnVuY3Rpb24gX2FwcGx5TW9kZWxSb3dWaXN1YWxTdGF0ZSh0ciwgaXNBY3RpdmUpIHtcbiAgdHIuY2xhc3NMaXN0LnRvZ2dsZSgnbW9kZWwtcm93LWFjdGl2ZScsIGlzQWN0aXZlKTtcbiAgdHIuc3R5bGUuY3NzVGV4dCA9IGlzQWN0aXZlXG4gICAgPyAnYmFja2dyb3VuZDojZWZmNmZmOyBmb250LXdlaWdodDo2MDA7IGN1cnNvcjpwb2ludGVyOydcbiAgICA6ICdjdXJzb3I6cG9pbnRlcjsnO1xuXG4gIGNvbnN0IG1vZGVsID0gdHIuZ2V0QXR0cmlidXRlKCdkYXRhLW1vZGVsJykgfHwgJyc7XG4gIGNvbnN0IG1vZGVsQ2VsbCA9IHRyLmNlbGxzICYmIHRyLmNlbGxzWzFdO1xuICBpZiAobW9kZWxDZWxsKSB7XG4gICAgbW9kZWxDZWxsLmlubmVySFRNTCA9IGAke2VzY2FwZUh0bWwobW9kZWwpfWAgK1xuICAgICAgKGlzQWN0aXZlID8gJyA8c3BhbiBzdHlsZT1cImNvbG9yOiMzYjgyZjY7IGZvbnQtc2l6ZTowLjc1ZW07XCI+JiMxMDAwMzsgYWN0aXZlPC9zcGFuPicgOiAnJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3N5bmNNb2RlbFRhYmxlU2VsZWN0aW9uKCkge1xuICBjb25zdCB0Ym9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC10YWJsZS1ib2R5Jyk7XG4gIGlmICghdGJvZHkgfHwgIV9tb2RlbERhdGEpIHJldHVybjtcblxuICBjb25zdCBhY3RpdmVQcm92aWRlciA9IF9tb2RlbERhdGEucHJvdmlkZXI7XG4gIGNvbnN0IGFjdGl2ZU1vZGVsID0gX21vZGVsRGF0YS5tb2RlbDtcbiAgdGJvZHkucXVlcnlTZWxlY3RvckFsbCgndHInKS5mb3JFYWNoKHRyID0+IHtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IChcbiAgICAgIHRyLmdldEF0dHJpYnV0ZSgnZGF0YS1wcm92aWRlcicpID09PSBhY3RpdmVQcm92aWRlciAmJlxuICAgICAgdHIuZ2V0QXR0cmlidXRlKCdkYXRhLW1vZGVsJykgPT09IGFjdGl2ZU1vZGVsXG4gICAgKTtcbiAgICBfYXBwbHlNb2RlbFJvd1Zpc3VhbFN0YXRlKHRyLCBpc0FjdGl2ZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfYnVpbGRNb2RlbFRhYmxlKCkge1xuICBjb25zdCB0Ym9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC10YWJsZS1ib2R5Jyk7XG4gIGNvbnN0IHRoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXRhYmxlLWhlYWQnKTtcbiAgaWYgKCF0Ym9keSB8fCAhX21vZGVsRGF0YSkgcmV0dXJuO1xuXG4gIGNvbnN0IGN1cnJlbnRQcm92aWRlciA9IF9tb2RlbERhdGEucHJvdmlkZXI7XG4gIGNvbnN0IGN1cnJlbnRNb2RlbCAgICA9IF9tb2RlbERhdGEubW9kZWw7XG5cbiAgLy8gRml4ZWQgNy1jb2x1bW4gaGVhZGVycyBcdTIwMTQgbm8gZHluYW1pYyByZWJ1aWxkaW5nIG5lZWRlZFxuICBpZiAodGhlYWQpIHtcbiAgICBjb25zdCB0aFMgPSAncGFkZGluZzoxMHB4IDE0cHg7IHdoaXRlLXNwYWNlOm5vd3JhcDsnO1xuICAgIHRoZWFkLmlubmVySFRNTCA9XG4gICAgICBgPHRyIHN0eWxlPVwiYmFja2dyb3VuZDojZjFmNWY5OyB0ZXh0LWFsaWduOmxlZnQ7XCI+YCArXG4gICAgICAgIGA8dGggc3R5bGU9XCIke3RoU31cIj5Qcm92aWRlcjwvdGg+YCArXG4gICAgICAgIGA8dGggc3R5bGU9XCIke3RoU31cIj5Nb2RlbDwvdGg+YCArXG4gICAgICAgIGA8dGggc3R5bGU9XCIke3RoU30gdGV4dC1hbGlnbjpyaWdodDtcIj5Db250ZXh0PC90aD5gICtcbiAgICAgICAgYDx0aCBzdHlsZT1cIiR7dGhTfSB0ZXh0LWFsaWduOnJpZ2h0O1wiIHRpdGxlPVwiVVNEIHBlciAxTSBpbnB1dCB0b2tlbnMgKGRpcmVjdCBBUEkgYmlsbGluZylcIj4kLzFNIGluPC90aD5gICtcbiAgICAgICAgYDx0aCBzdHlsZT1cIiR7dGhTfSB0ZXh0LWFsaWduOnJpZ2h0O1wiIHRpdGxlPVwiVVNEIHBlciAxTSBvdXRwdXQgdG9rZW5zIChkaXJlY3QgQVBJIGJpbGxpbmcpXCI+JC8xTSBvdXQ8L3RoPmAgK1xuICAgICAgICBgPHRoIHN0eWxlPVwiJHt0aFN9IHRleHQtYWxpZ246cmlnaHQ7XCIgdGl0bGU9XCJHaXRIdWIgQ29waWxvdCBwcmVtaXVtLXJlcXVlc3QgbXVsdGlwbGllciAoMCA9IGZyZWUgZm9yIHBhaWQgc3Vic2NyaWJlcnMpXCI+Q29waWxvdDwvdGg+YCArXG4gICAgICAgIGA8dGggc3R5bGU9XCIke3RoU31cIj5Tb3VyY2U8L3RoPmAgK1xuICAgICAgICBgPHRoIHN0eWxlPVwiJHt0aFN9XCI+Tm90ZXM8L3RoPmAgK1xuICAgICAgYDwvdHI+YDtcbiAgfVxuXG4gIC8vIFRlYXIgZG93biBhbnkgZXhpc3RpbmcgRGF0YVRhYmxlIGJlZm9yZSByZWJ1aWxkaW5nIHJvd3MuXG4gIGlmICh3aW5kb3cuJCAmJiAkLmZuICYmICQuZm4uRGF0YVRhYmxlICYmICQuZm4uRGF0YVRhYmxlLmlzRGF0YVRhYmxlKCcjbW9kZWwtdGFibGUnKSkge1xuICAgIHRyeSB7XG4gICAgICBfbW9kZWxEYXRhVGFibGUgPSAkKCcjbW9kZWwtdGFibGUnKS5EYXRhVGFibGUoKTtcbiAgICAgIF9tb2RlbERhdGFUYWJsZS5kZXN0cm95KCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oJ0RhdGFUYWJsZS5kZXN0cm95KCkgZmFpbGVkICh0YWJsZSBtYXkgYWxyZWFkeSBiZSB0b3JuIGRvd24pOicsIGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBfbW9kZWxEYXRhVGFibGUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIFByZWZlciBjcm9zcy1wcm92aWRlciBsaXN0OyBmYWxsIGJhY2sgdG8gY3VycmVudC1wcm92aWRlciBhdmFpbGFibGUgbGlzdFxuICBsZXQgcm93cyA9IChfbW9kZWxEYXRhLmFsbF9tb2RlbHMgJiYgX21vZGVsRGF0YS5hbGxfbW9kZWxzLmxlbmd0aClcbiAgICA/IF9tb2RlbERhdGEuYWxsX21vZGVscy5maWx0ZXIociA9PiByLm1vZGVsKVxuICAgIDogKF9tb2RlbERhdGEuYXZhaWxhYmxlIHx8IFtdKS5tYXAociA9PlxuICAgICAgICB0eXBlb2YgciA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IHsgLi4uciwgcHJvdmlkZXI6IGN1cnJlbnRQcm92aWRlciB9XG4gICAgICAgICAgOiB7IG1vZGVsOiByLCBwcm92aWRlcjogY3VycmVudFByb3ZpZGVyIH1cbiAgICAgICk7XG5cbiAgX3JlbmRlclF1aWNrTW9kZWxMaXN0KHJvd3MpO1xuICB0Ym9keS5pbm5lckhUTUwgPSAnJztcbiAgY29uc3QgdGRCYXNlICA9ICdwYWRkaW5nOjlweCAxNHB4OyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTJlOGYwOyc7XG4gIGNvbnN0IGZtdENvc3QgPSB2ID0+ICh2ICE9IG51bGwpID8gJyQnICsgTnVtYmVyKHYpLnRvRml4ZWQodiA8IDEgPyAzIDogMikgOiAnXHUyMDE0JztcbiAgY29uc3QgZm10UHJpY2VIaW50ID0gc291cmNlID0+IHtcbiAgICBpZiAoc291cmNlID09PSAncnVudGltZV9jYWNoZScpIHtcbiAgICAgIHJldHVybiAnPHNwYW4gdGl0bGU9XCJQcmljZSBmcm9tIHJ1bnRpbWUgY2FjaGVcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjZweDsgZGlzcGxheTppbmxpbmUtYmxvY2s7IHBhZGRpbmc6MXB4IDVweDsgYm9yZGVyLXJhZGl1czo5OTlweDsgYmFja2dyb3VuZDojZWNmZWZmOyBjb2xvcjojMGY3NjZlOyBmb250LXNpemU6MC43MmVtOyBmb250LXdlaWdodDo2MDA7IHZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIj5jYWNoZTwvc3Bhbj4nO1xuICAgIH1cbiAgICByZXR1cm4gJzxzcGFuIHRpdGxlPVwiUHJpY2UgZnJvbSBzdGF0aWMgYmFzZWxpbmVcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjZweDsgZGlzcGxheTppbmxpbmUtYmxvY2s7IHBhZGRpbmc6MXB4IDVweDsgYm9yZGVyLXJhZGl1czo5OTlweDsgYmFja2dyb3VuZDojZjhmYWZjOyBjb2xvcjojNjQ3NDhiOyBmb250LXNpemU6MC43MmVtOyBmb250LXdlaWdodDo2MDA7IHZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIj5zdGF0aWM8L3NwYW4+JztcbiAgfTtcbiAgY29uc3QgZm10U291cmNlID0gcyA9PiB7XG4gICAgaWYgKHMgPT09ICdsaXN0X21vZGVscycpIHtcbiAgICAgIHJldHVybiAnPHNwYW4gc3R5bGU9XCJkaXNwbGF5OmlubGluZS1ibG9jazsgcGFkZGluZzoycHggNnB4OyBib3JkZXItcmFkaXVzOjk5OXB4OyBiYWNrZ3JvdW5kOiNlY2ZlZmY7IGNvbG9yOiMwZjc2NmU7IGZvbnQtc2l6ZTowLjc4ZW07IGZvbnQtd2VpZ2h0OjYwMDtcIj5saXN0X21vZGVsczwvc3Bhbj4nO1xuICAgIH1cbiAgICByZXR1cm4gJzxzcGFuIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7IHBhZGRpbmc6MnB4IDZweDsgYm9yZGVyLXJhZGl1czo5OTlweDsgYmFja2dyb3VuZDojZjFmNWY5OyBjb2xvcjojNDc1NTY5OyBmb250LXNpemU6MC43OGVtOyBmb250LXdlaWdodDo2MDA7XCI+ZmFsbGJhY2tfc3RhdGljPC9zcGFuPic7XG4gIH07XG4gIGNvbnN0IGZtdE11bHQgPSB2ID0+IHtcbiAgICBpZiAodiA9PSBudWxsKSByZXR1cm4gJ1x1MjAxNCc7XG4gICAgaWYgKHYgPT09IDApICAgcmV0dXJuICc8c3BhbiBzdHlsZT1cImNvbG9yOiMxNmEzNGE7IGZvbnQtd2VpZ2h0OjYwMDtcIj5mcmVlPC9zcGFuPic7XG4gICAgcmV0dXJuIE51bWJlcih2KS50b0ZpeGVkKHYgJSAxID09PSAwID8gMCA6IDIpICsgJyZ0aW1lczsnO1xuICB9O1xuXG4gIHJvd3MuZm9yRWFjaChpdGVtID0+IHtcbiAgICBjb25zdCBwcm92aWRlciAgID0gaXRlbS5wcm92aWRlciB8fCBjdXJyZW50UHJvdmlkZXI7XG4gICAgY29uc3QgbSAgICAgICAgICA9IGl0ZW0ubW9kZWw7XG4gICAgY29uc3QgY3R4ICAgICAgICA9IGl0ZW0uY29udGV4dF93aW5kb3cgPyBOdW1iZXIoaXRlbS5jb250ZXh0X3dpbmRvdykudG9Mb2NhbGVTdHJpbmcoKSA6ICdcdTIwMTQnO1xuICAgIGNvbnN0IHNvdXJjZSAgICAgPSBpdGVtLnNvdXJjZSB8fCAnZmFsbGJhY2tfc3RhdGljJztcbiAgICBjb25zdCBwcmljZVNvdXJjZSA9IGl0ZW0ucHJpY2Vfc291cmNlIHx8ICdzdGF0aWNfYmFzZWxpbmUnO1xuICAgIGNvbnN0IG5vdGVzICAgICAgPSBpdGVtLm5vdGVzIHx8ICcnO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSAocHJvdmlkZXIgPT09IGN1cnJlbnRQcm92aWRlciAmJiBtID09PSBjdXJyZW50TW9kZWwpO1xuXG4gICAgY29uc3QgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpO1xuICAgIHRyLnNldEF0dHJpYnV0ZSgnZGF0YS1wcm92aWRlcicsIHByb3ZpZGVyKTtcbiAgICB0ci5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9kZWwnLCBtKTtcbiAgICBfYXBwbHlNb2RlbFJvd1Zpc3VhbFN0YXRlKHRyLCBpc1NlbGVjdGVkKTtcbiAgICB0ci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCAoKSA9PiB7XG4gICAgICBpZiAoIXRyLmNsYXNzTGlzdC5jb250YWlucygnbW9kZWwtcm93LWFjdGl2ZScpKSB0ci5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmOGZhZmMnO1xuICAgIH0pO1xuICAgIHRyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgKCkgPT4ge1xuICAgICAgaWYgKCF0ci5jbGFzc0xpc3QuY29udGFpbnMoJ21vZGVsLXJvdy1hY3RpdmUnKSkgdHIuc3R5bGUuYmFja2dyb3VuZCA9ICcnO1xuICAgIH0pO1xuXG4gICAgdHIuaW5uZXJIVE1MID1cbiAgICAgIGA8dGQgc3R5bGU9XCIke3RkQmFzZX0gY29sb3I6IzY0NzQ4Yjsgd2hpdGUtc3BhY2U6bm93cmFwO1wiPiR7ZXNjYXBlSHRtbChfcHJvdmlkZXJEaXNwbGF5TGFiZWwocHJvdmlkZXIpKX08L3RkPmAgK1xuICAgICAgYDx0ZCBzdHlsZT1cIiR7dGRCYXNlfVwiPiR7ZXNjYXBlSHRtbChtKX08L3RkPmAgK1xuICAgICAgYDx0ZCBzdHlsZT1cIiR7dGRCYXNlfSB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtYWxpZ246cmlnaHQ7IGZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtcztcIj4ke2N0eH08L3RkPmAgK1xuICAgICAgYDx0ZCBzdHlsZT1cIiR7dGRCYXNlfSB0ZXh0LWFsaWduOnJpZ2h0OyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXM7IHdoaXRlLXNwYWNlOm5vd3JhcDtcIj4ke2ZtdENvc3QoaXRlbS5jb3N0X2lucHV0KX0ke2ZtdFByaWNlSGludChwcmljZVNvdXJjZSl9PC90ZD5gICtcbiAgICAgIGA8dGQgc3R5bGU9XCIke3RkQmFzZX0gdGV4dC1hbGlnbjpyaWdodDsgZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zOyB3aGl0ZS1zcGFjZTpub3dyYXA7XCI+JHtmbXRDb3N0KGl0ZW0uY29zdF9vdXRwdXQpfSR7Zm10UHJpY2VIaW50KHByaWNlU291cmNlKX08L3RkPmAgK1xuICAgICAgYDx0ZCBzdHlsZT1cIiR7dGRCYXNlfSB0ZXh0LWFsaWduOnJpZ2h0OyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXM7IHdoaXRlLXNwYWNlOm5vd3JhcDtcIj4ke2ZtdE11bHQoaXRlbS5jb3BpbG90X211bHRpcGxpZXIpfTwvdGQ+YCArXG4gICAgICBgPHRkIHN0eWxlPVwiJHt0ZEJhc2V9IHdoaXRlLXNwYWNlOm5vd3JhcDtcIj4ke2ZtdFNvdXJjZShzb3VyY2UpfTwvdGQ+YCArXG4gICAgICBgPHRkIHN0eWxlPVwiJHt0ZEJhc2V9IGNvbG9yOiM2NDc0OGI7XCI+JHtlc2NhcGVIdG1sKG5vdGVzKX08L3RkPmA7XG4gICAgdGJvZHkuYXBwZW5kQ2hpbGQodHIpO1xuICB9KTtcblxuICAvLyBSZWJpbmQgcm93IGNsaWNrIHVzaW5nIGRlbGVnYXRpb24gc28gc29ydGluZy9maWx0ZXIgcmVkcmF3cyBzdGlsbCB3b3JrLlxuICB0Ym9keS5vbmNsaWNrID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdHIgPSBldmVudC50YXJnZXQuY2xvc2VzdCgndHInKTtcbiAgICBpZiAoIXRyKSByZXR1cm47XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0ci5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJvdmlkZXInKTtcbiAgICBjb25zdCBtb2RlbCA9IHRyLmdldEF0dHJpYnV0ZSgnZGF0YS1tb2RlbCcpO1xuICAgIGlmICghbW9kZWwpIHJldHVybjtcblxuICAgIC8vIEltbWVkaWF0ZSBmZWVkYmFjayB3aGlsZSB0aGUgQVBJIGNhbGwgaXMgaW4tZmxpZ2h0XG4gICAgdHIuc3R5bGUuY3NzVGV4dCA9ICdiYWNrZ3JvdW5kOiNmZWYzYzc7IGN1cnNvcjp3YWl0OyBvcGFjaXR5OjAuODU7JztcbiAgICBjb25zdCBtb2RlbENlbGwgPSB0ci5jZWxscyAmJiB0ci5jZWxsc1sxXTtcbiAgICBpZiAobW9kZWxDZWxsKSB7XG4gICAgICBtb2RlbENlbGwuaW5uZXJIVE1MID1cbiAgICAgICAgYDxzcGFuIGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCIgc3R5bGU9XCJ3aWR0aDoxNHB4O2hlaWdodDoxNHB4O2JvcmRlci13aWR0aDoycHg7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDo2cHg7XCI+PC9zcGFuPiR7ZXNjYXBlSHRtbChtb2RlbCl9YDtcbiAgICB9XG4gICAgY29uc3Qgc3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXRlc3Qtc3RhdHVzJyk7XG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgc3RhdHVzLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIHN0YXR1cy5zdHlsZS5jb2xvciAgID0gJyM5MjQwMGUnO1xuICAgICAgc3RhdHVzLmlubmVySFRNTCAgICAgPVxuICAgICAgICBgPHNwYW4gY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7Ym9yZGVyLXdpZHRoOjJweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLXJpZ2h0OjZweDtcIj48L3NwYW4+IFN3aXRjaGluZyB0byAke2VzY2FwZUh0bWwobW9kZWwpfVxcdTIwMjZgO1xuICAgIH1cblxuICAgIGF3YWl0IHNldE1vZGVsKG1vZGVsLCBwcm92aWRlcik7XG4gIH07XG5cbiAgLy8gRW5oYW5jZSB3aXRoIERhdGFUYWJsZXMgZm9yIHNvcnRpbmcvc2VhcmNoaW5nOyBrZWVwIHBhZ2luZyBkaXNhYmxlZC5cbiAgaWYgKHdpbmRvdy4kICYmICQuZm4gJiYgJC5mbi5EYXRhVGFibGUpIHtcbiAgICBfbW9kZWxEYXRhVGFibGUgPSAkKCcjbW9kZWwtdGFibGUnKS5EYXRhVGFibGUoe1xuICAgICAgcGFnaW5nOiBmYWxzZSxcbiAgICAgIHNlYXJjaGluZzogdHJ1ZSxcbiAgICAgIGluZm86IGZhbHNlLFxuICAgICAgb3JkZXJDZWxsc1RvcDogdHJ1ZSxcbiAgICAgIG9yZGVyOiBbWzAsICdhc2MnXSwgWzEsICdhc2MnXV0sXG4gICAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgICAgbGFuZ3VhZ2U6IHsgc2VhcmNoOiAnRmlsdGVyOicgfSxcbiAgICAgIGluaXRDb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IGFwaSA9IHRoaXMuYXBpKCk7XG4gICAgICAgIGNvbnN0ICR0aGVhZCA9ICQoJyNtb2RlbC10YWJsZSB0aGVhZCcpO1xuICAgICAgICBjb25zdCBoYXNGaWx0ZXJSb3cgPSAkdGhlYWQuZmluZCgndHIubW9kZWwtZmlsdGVyLXJvdycpLmxlbmd0aCA+IDA7XG4gICAgICAgIGlmICghaGFzRmlsdGVyUm93KSB7XG4gICAgICAgICAgY29uc3QgJGZpbHRlclJvdyA9ICQoJzx0ciBjbGFzcz1cIm1vZGVsLWZpbHRlci1yb3dcIj48L3RyPicpO1xuICAgICAgICAgIGFwaS5jb2x1bW5zKCkuZXZlcnkoZnVuY3Rpb24oY29sSWR4KSB7XG4gICAgICAgICAgICBjb25zdCB0aXRsZSA9ICQoYXBpLmNvbHVtbihjb2xJZHgpLmhlYWRlcigpKS50ZXh0KCkudHJpbSgpO1xuICAgICAgICAgICAgY29uc3QgJHRoID0gJCgnPHRoIHN0eWxlPVwicGFkZGluZzo2cHggMTBweDsgYmFja2dyb3VuZDojZjhmYWZjOyBib3JkZXItdG9wOjFweCBzb2xpZCAjZTJlOGYwO1wiPjwvdGg+Jyk7XG4gICAgICAgICAgICBjb25zdCAkaW5wdXQgPSAkKCc8aW5wdXQ+Jywge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aXRsZSxcbiAgICAgICAgICAgICAgc3R5bGU6ICd3aWR0aDoxMDAlOyBwYWRkaW5nOjRweCA2cHg7IGJvcmRlcjoxcHggc29saWQgI2NiZDVlMTsgYm9yZGVyLXJhZGl1czo0cHg7IGZvbnQtc2l6ZTowLjgyZW07JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgJHRoLmFwcGVuZCgkaW5wdXQpO1xuICAgICAgICAgICAgJGZpbHRlclJvdy5hcHBlbmQoJHRoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAkdGhlYWQuYXBwZW5kKCRmaWx0ZXJSb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBpLmNvbHVtbnMoKS5ldmVyeShmdW5jdGlvbihjb2xJZHgpIHtcbiAgICAgICAgICBjb25zdCAkaW5wdXQgPSAkKCcjbW9kZWwtdGFibGUgdGhlYWQgdHIubW9kZWwtZmlsdGVyLXJvdyB0aCcpLmVxKGNvbElkeCkuZmluZCgnaW5wdXQnKTtcbiAgICAgICAgICBpZiAoISRpbnB1dC5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICAkaW5wdXQub2ZmKCdjbGljay5tb2RlbEZpbHRlciBrZXl1cC5tb2RlbEZpbHRlciBjaGFuZ2UubW9kZWxGaWx0ZXInKTtcbiAgICAgICAgICAkaW5wdXQub24oJ2NsaWNrLm1vZGVsRmlsdGVyJywgZnVuY3Rpb24oZXZlbnQpIHsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IH0pO1xuICAgICAgICAgICRpbnB1dC5vbigna2V5dXAubW9kZWxGaWx0ZXIgY2hhbmdlLm1vZGVsRmlsdGVyJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICBpZiAoYXBpLmNvbHVtbihjb2xJZHgpLnNlYXJjaCgpICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICBhcGkuY29sdW1uKGNvbElkeCkuc2VhcmNoKHZhbHVlKS5kcmF3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIF9zeW5jTW9kZWxUYWJsZVNlbGVjdGlvbigpO1xuXG4gIC8vIFVwZGF0ZSBwcmljaW5nIGZyZXNobmVzcyBmb290ZXJcbiAgX3VwZGF0ZVByaWNpbmdGb290ZXIoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0TW9kZWwobW9kZWwsIHByb3ZpZGVyKSB7XG4gIGlmICghbW9kZWwpIHJldHVybjtcbiAgX3Nob3dNb2RlbFdpemFyZEJ1c3koYEFwcGx5aW5nIG1vZGVsICR7bW9kZWx9Li4uYCk7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHByb3ZpZGVyID8geyBtb2RlbCwgcHJvdmlkZXIgfSA6IHsgbW9kZWwgfTtcbiAgICBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvbW9kZWwnLCBwYXlsb2FkKTtcbiAgICBpZiAoX21vZGVsRGF0YSkge1xuICAgICAgX21vZGVsRGF0YS5tb2RlbCA9IG1vZGVsO1xuICAgICAgaWYgKHByb3ZpZGVyKSBfbW9kZWxEYXRhLnByb3ZpZGVyID0gcHJvdmlkZXI7XG4gICAgfVxuICAgIGNvbnN0IGVmZmVjdGl2ZVByb3ZpZGVyID0gKF9tb2RlbERhdGEgJiYgX21vZGVsRGF0YS5wcm92aWRlcikgfHwgcHJvdmlkZXI7XG4gICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtY3VycmVudC1sYWJlbCcpO1xuICAgIGlmIChsYWJlbCkge1xuICAgICAgbGFiZWwudGV4dENvbnRlbnQgPSBlZmZlY3RpdmVQcm92aWRlciA/IGAke2VmZmVjdGl2ZVByb3ZpZGVyfSBcdTAwQjcgJHttb2RlbH1gIDogbW9kZWw7XG4gICAgfVxuICAgIF9hcHBlbmRSZWNlbnRNb2RlbChlZmZlY3RpdmVQcm92aWRlciwgbW9kZWwpO1xuICAgIF9zeW5jTW9kZWxUYWJsZVNlbGVjdGlvbigpO1xuICAgIF9yZW5kZXJRdWlja01vZGVsTGlzdCgoX21vZGVsRGF0YSAmJiBfbW9kZWxEYXRhLmFsbF9tb2RlbHMpIHx8IFtdKTtcbiAgICBfdXBkYXRlTGxtU3RhdHVzUGlsbCgnY29uZmlndXJlZCcsIGAke2VmZmVjdGl2ZVByb3ZpZGVyIHx8ICdQcm92aWRlcid9IGNvbmZpZ3VyZWRgKTtcblxuICAgIF9zYXZlTW9kZWxQcmVmc1RvU3RvcmFnZSh7XG4gICAgICBjdXJyZW50TW9kZWxQcm92aWRlcjogZWZmZWN0aXZlUHJvdmlkZXIgfHwgbnVsbCxcbiAgICAgIGN1cnJlbnRNb2RlbE5hbWU6IG1vZGVsIHx8IG51bGwsXG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLnVwZGF0ZUF1dGhCYWRnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZ2xvYmFsVGhpcy51cGRhdGVBdXRoQmFkZ2Uoe30sIGVmZmVjdGl2ZVByb3ZpZGVyIHx8IG51bGwpO1xuICAgIH1cbiAgICBhd2FpdCBfcmVmcmVzaENvcGlsb3RBdXRoU3RhdHVzKCk7XG4gICAgYXdhaXQgdGVzdEN1cnJlbnRNb2RlbCgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmVycm9yKCdGYWlsZWQgdG8gc3dpdGNoIG1vZGVsOicsIGUpO1xuICAgIGNvbnN0IG1zZyA9IGUubWVzc2FnZSB8fCBTdHJpbmcoZSk7XG4gICAgX3N5bmNNb2RlbFRhYmxlU2VsZWN0aW9uKCk7XG4gICAgY29uc3Qgc3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXRlc3Qtc3RhdHVzJyk7XG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgc3RhdHVzLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIHN0YXR1cy5zdHlsZS5jb2xvciA9ICcjZGMyNjI2JztcbiAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9IGBcdTI3NEMgJHttc2d9YDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhcHBlbmRNZXNzYWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHUyNzRDIE1vZGVsIHN3aXRjaCBmYWlsZWQ6ICR7bXNnfWApO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBfaGlkZU1vZGVsV2l6YXJkQnVzeSgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRlc3RDdXJyZW50TW9kZWwoKSB7XG4gIC8vIFVwZGF0ZSBib3RoIHRoZSBoZWFkZXIgYmFkZ2UgYW5kIHRoZSBtb2RhbCBzdGF0dXMgbGluZVxuICBjb25zdCBiYWRnZSAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtdGVzdC1iYWRnZScpO1xuICBjb25zdCBzdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtdGVzdC1zdGF0dXMnKTtcbiAgY29uc3QgYnRuICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXRlc3QtYnRuJyk7XG5cbiAgY29uc3QgU1BJTiA9ICdcdTIzRjMnO1xuICBjb25zdCBPSyAgID0gJ1x1MjcwNSc7XG4gIGNvbnN0IEZBSUwgPSAnXHUyNzRDJztcblxuICBjb25zdCBzZXRSdW5uaW5nID0gKCkgPT4ge1xuICAgIGlmIChiYWRnZSkgIHsgYmFkZ2UudGV4dENvbnRlbnQgID0gU1BJTjsgYmFkZ2Uuc3R5bGUuZGlzcGxheSAgPSAnJzsgYmFkZ2UudGl0bGUgID0gJ1Rlc3RpbmdcdTIwMjYnOyB9XG4gICAgaWYgKHN0YXR1cykgeyBzdGF0dXMuaW5uZXJIVE1MICAgPSBgJHtTUElOfSBUZXN0aW5nIGNvbm5lY3Rpb25cdTIwMjZgOyBzdGF0dXMuc3R5bGUuZGlzcGxheSA9ICcnOyB9XG4gICAgaWYgKGJ0bikgICAgeyBidG4uZGlzYWJsZWQgPSB0cnVlOyBidG4udGV4dENvbnRlbnQgPSAnXHUyM0YzIFRlc3RpbmdcdTIwMjYnOyB9XG4gICAgX3VwZGF0ZUxsbVN0YXR1c1BpbGwoJ2Nvbm5lY3RpbmcnLCAnQ29ubmVjdGluZ1x1MjAyNicsICdcdTI5RDcnKTtcbiAgfTtcblxuICBjb25zdCBzZXRPayA9IChsYXRlbmN5TXMpID0+IHtcbiAgICBjb25zdCB0aXAgPSBgQ29ubmVjdGVkIFx1MjAxNCAke2xhdGVuY3lNc31tc2A7XG4gICAgaWYgKGJhZGdlKSAgeyBiYWRnZS50ZXh0Q29udGVudCAgPSBPSzsgIGJhZGdlLnN0eWxlLmRpc3BsYXkgID0gJyc7IGJhZGdlLnRpdGxlICA9IHRpcDsgfVxuICAgIGlmIChzdGF0dXMpIHsgc3RhdHVzLmlubmVySFRNTCAgID0gYCR7T0t9ICR7dGlwfWA7IHN0YXR1cy5zdHlsZS5jb2xvciA9ICcjMTZhMzRhJzsgc3RhdHVzLnN0eWxlLmRpc3BsYXkgPSAnJzsgfVxuICAgIGlmIChidG4pICAgIHsgYnRuLmRpc2FibGVkID0gZmFsc2U7IGJ0bi5pbm5lckhUTUwgPSAnJiMxMDAwMzsgVGVzdCBjb25uZWN0aW9uJzsgfVxuICAgIF91cGRhdGVMbG1TdGF0dXNQaWxsKCdjb25uZWN0ZWQnLCBgSGVhbHRoeSAoJHtsYXRlbmN5TXN9bXMpYCwgJ1x1MjcxMycpO1xuICAgIGNvbnN0IHN1Y2Nlc3NTdW1tYXJ5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXN1Y2Nlc3Mtc3VtbWFyeScpO1xuICAgIGlmIChzdWNjZXNzU3VtbWFyeSkge1xuICAgICAgc3VjY2Vzc1N1bW1hcnkudGV4dENvbnRlbnQgPSBgQ29ubmVjdGlvbiB2ZXJpZmllZCBpbiAke2xhdGVuY3lNc31tcy4gWW91IGNhbiBjbG9zZSB0aGUgd2l6YXJkIGFuZCBjb250aW51ZS5gO1xuICAgIH1cbiAgICBfc2V0TW9kZWxXaXphcmRTdGVwKDQpO1xuICB9O1xuXG4gIGNvbnN0IHNldEZhaWwgPSAoZXJyTXNnKSA9PiB7XG4gICAgaWYgKGJhZGdlKSAgeyBiYWRnZS50ZXh0Q29udGVudCAgPSBGQUlMOyBiYWRnZS5zdHlsZS5kaXNwbGF5ICA9ICcnOyBiYWRnZS50aXRsZSAgPSBlcnJNc2c7IH1cbiAgICBpZiAoc3RhdHVzKSB7XG4gICAgICBzdGF0dXMuaW5uZXJIVE1MICAgPSBgJHtGQUlMfSA8c3BhbiB0aXRsZT1cIiR7ZXJyTXNnLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKX1cIiBzdHlsZT1cImN1cnNvcjpoZWxwOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDtcIj5Db25uZWN0aW9uIGZhaWxlZDwvc3Bhbj5gO1xuICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJyNkYzI2MjYnO1xuICAgICAgc3RhdHVzLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICB9XG4gICAgaWYgKGJ0bikgICAgeyBidG4uZGlzYWJsZWQgPSBmYWxzZTsgYnRuLmlubmVySFRNTCA9ICcmIzEwMDAzOyBUZXN0IGNvbm5lY3Rpb24nOyB9XG4gICAgX3VwZGF0ZUxsbVN0YXR1c1BpbGwoJ2Vycm9yJywgJ0Nvbm5lY3Rpb24gZmFpbGVkJywgJ1x1MjZBMCcsIGVyck1zZyk7XG4gICAgaWYgKF9tb2RlbFdpemFyZFN0ZXAgPT09IDMpIHtcbiAgICAgIF9zZXRNb2RlbFdpemFyZFN0ZXAoMik7XG4gICAgfVxuICB9O1xuXG4gIHNldFJ1bm5pbmcoKTtcbiAgX3Nob3dNb2RlbFdpemFyZEJ1c3koJ1Rlc3RpbmcgbW9kZWwgY29ubmVjdGlvbi4uLicpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9tb2RlbC90ZXN0Jyk7XG4gICAgaWYgKHJlc3VsdC5vaykge1xuICAgICAgc2V0T2socmVzdWx0LmxhdGVuY3lfbXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNldEZhaWwocmVzdWx0LmVycm9yIHx8ICdVbmtub3duIGVycm9yJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2V0RmFpbChlLm1lc3NhZ2UgfHwgU3RyaW5nKGUpKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZmluYWxseSB7XG4gICAgX2hpZGVNb2RlbFdpemFyZEJ1c3koKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfdXBkYXRlUHJpY2luZ0Zvb3RlcigpIHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJpY2luZy11cGRhdGVkLWxhYmVsJyk7XG4gIGlmICghZWwgfHwgIV9tb2RlbERhdGEpIHJldHVybjtcbiAgY29uc3QgdHMgICAgID0gX21vZGVsRGF0YS5wcmljaW5nX3VwZGF0ZWRfYXQ7XG4gIGNvbnN0IHNvdXJjZSA9IF9tb2RlbERhdGEucHJpY2luZ19zb3VyY2U7XG5cbiAgY29uc3Qgc291cmNlTGFiZWwgPSAoc291cmNlID09PSAnb3BlbnJvdXRlcicpXG4gICAgPyAnPGEgaHJlZj1cImh0dHBzOi8vb3BlbnJvdXRlci5haVwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyXCIgJyArXG4gICAgICAnc3R5bGU9XCJjb2xvcjppbmhlcml0OyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDtcIj5PcGVuUm91dGVyPC9hPidcbiAgICA6ICdzdGF0aWMgYmFzZWxpbmUgKE1hcmNoIDIwMjYpJztcblxuICBpZiAoIXRzKSB7IGVsLmlubmVySFRNTCA9IGBQcmljZXM6ICR7c291cmNlTGFiZWx9YDsgcmV0dXJuOyB9XG4gIHRyeSB7XG4gICAgY29uc3QgZCAgID0gbmV3IERhdGUodHMpO1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgaCAgID0gTWF0aC5yb3VuZCgobm93IC0gZCkgLyAzXzYwMF8wMDApO1xuICAgIGNvbnN0IGFnZSA9IGggPCAxID8gJ2p1c3Qgbm93JyA6IGggPCAyNCA/IGAke2h9aCBhZ29gIDogYCR7TWF0aC5yb3VuZChoIC8gMjQpfWQgYWdvYDtcbiAgICBlbC5pbm5lckhUTUwgPSBgUHJpY2VzIHZpYSAke3NvdXJjZUxhYmVsfSAmbWlkZG90OyB1cGRhdGVkICR7YWdlfWA7XG4gIH0gY2F0Y2ggeyBlbC5pbm5lckhUTUwgPSBgUHJpY2VzOiAke3NvdXJjZUxhYmVsfWA7IH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaE1vZGVsUHJpY2luZygpIHtcbiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByaWNpbmctcmVmcmVzaC1idG4nKTtcbiAgY29uc3QgbGJsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByaWNpbmctdXBkYXRlZC1sYWJlbCcpO1xuICBpZiAoYnRuKSB7IGJ0bi5kaXNhYmxlZCA9IHRydWU7IGJ0bi50ZXh0Q29udGVudCA9ICdSZWZyZXNoaW5nXHUyMDI2JzsgfVxuICBfc2hvd01vZGVsV2l6YXJkQnVzeSgnUmVmcmVzaGluZyBtb2RlbCBwcmljaW5nLi4uJyk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL21vZGVsLXByaWNpbmcvcmVmcmVzaCcpO1xuICAgIC8vIFJlLWZldGNoIG1vZGVsIGRhdGEgc28gdGhlIHRhYmxlIGdldHMgZnJlc2ggcHJpY2VzXG4gICAgX21vZGVsRGF0YSA9IGF3YWl0IGFwaUNhbGwoJ0dFVCcsICcvYXBpL21vZGVsJyk7XG4gICAgX2J1aWxkTW9kZWxUYWJsZSgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGxibCkgbGJsLnRleHRDb250ZW50ID0gJ1JlZnJlc2ggZmFpbGVkJztcbiAgICBsb2cuZXJyb3IoJ1ByaWNpbmcgcmVmcmVzaCBmYWlsZWQ6JywgZSk7XG4gIH0gZmluYWxseSB7XG4gICAgX2hpZGVNb2RlbFdpemFyZEJ1c3koKTtcbiAgICBpZiAoYnRuKSB7IGJ0bi5kaXNhYmxlZCA9IGZhbHNlOyBidG4udGV4dENvbnRlbnQgPSAnXHUyMUJCIFJlZnJlc2ggcHJpY2VzJzsgfVxuICB9XG59XG5cblxuLy8gSGVscGVyOiB1cGRhdGUgd29ya2Zsb3cgc3RlcCBiYXIgY2xpY2thYmxlIHN0YXRlXG5mdW5jdGlvbiB1cGRhdGVXb3JrZmxvd1N0ZXBzQ2xpY2thYmxlKGN1cnJlbnRQaGFzZSkge1xuICAvLyBTZXF1ZW50aWFsIHByZS1sYXlvdXQgc3RlcHMgdW5sb2NrIG9uZS1ieS1vbmUgYXMgdGhlIHVzZXIgcHJvZ3Jlc3Nlcy5cbiAgY29uc3Qgc2VxdWVudGlhbFN0ZXBzID0gW1xuICAgICdzdGVwLWpvYicsXG4gICAgJ3N0ZXAtYW5hbHlzaXMnLFxuICAgICdzdGVwLWN1c3RvbWl6YXRpb25zJyxcbiAgICAnc3RlcC1yZXdyaXRlJyxcbiAgICAnc3RlcC1zcGVsbCcsXG4gICAgJ3N0ZXAtbGF5b3V0JyxcbiAgXTtcbiAgLy8gUG9zdC1sYXlvdXQgc3RlcHMgYWxsIHVubG9jayBzaW11bHRhbmVvdXNseSBvbmNlIGxheW91dCBpcyBjb25maXJtZWQuXG4gIGNvbnN0IHBvc3RMYXlvdXRTdGVwcyA9IFtcbiAgICAnc3RlcC1kb3dubG9hZCcsXG4gICAgJ3N0ZXAtY292ZXJfbGV0dGVyJyxcbiAgICAnc3RlcC1zY3JlZW5pbmcnLFxuICAgICdzdGVwLWludGVydmlld19wcmVwJyxcbiAgICAnc3RlcC10aGFua195b3UnLFxuICAgICdzdGVwLWhhcnZlc3QnLFxuICBdO1xuICAvLyBNYXAgYmFja2VuZCBwaGFzZSBzdHJpbmdzIHRvIGhvdyBtYW55IHNlcXVlbnRpYWwgc3RlcHMgYXJlIHVubG9ja2VkICgwLWJhc2VkIGluZGV4KS5cbiAgY29uc3QgcGhhc2VUb0luZGV4ID0ge1xuICAgICdpbml0JzogICAgICAgICAgICAgMCxcbiAgICAnam9iX2FuYWx5c2lzJzogICAgIDEsXG4gICAgJ2N1c3RvbWl6YXRpb24nOiAgICAyLFxuICAgICdyZXdyaXRlX3Jldmlldyc6ICAgMyxcbiAgICAnc3BlbGxfY2hlY2snOiAgICAgIDQsXG4gICAgJ2dlbmVyYXRpb24nOiAgICAgICA1LFxuICAgICdsYXlvdXRfcmV2aWV3JzogICAgNSxcbiAgICAnZmluYWxfZ2VuZXJhdGlvbic6IDUsXG4gICAgJ3JlZmluZW1lbnQnOiAgICAgICA1LFxuICAgIC8vIExlZ2FjeSBmYWxsYmFja3MgKHN0ZXAgbmFtZXMgc29tZXRpbWVzIHBhc3NlZCBvbiBET01Db250ZW50TG9hZGVkKVxuICAgICdqb2InOiAgICAgICAgICAgICAgMCxcbiAgICAnbGF5b3V0JzogICAgICAgICAgIDUsXG4gICAgJ2ZpbmFsaXNlJzogICAgICAgICA1LFxuICB9O1xuICBjb25zdCBwb3N0TGF5b3V0VW5sb2NrZWQgPSBbJ2ZpbmFsX2dlbmVyYXRpb24nLCAncmVmaW5lbWVudCddLmluY2x1ZGVzKGN1cnJlbnRQaGFzZSk7XG4gIGNvbnN0IGN1cnJlbnRJZHggPSBwaGFzZVRvSW5kZXhbY3VycmVudFBoYXNlXSA/PyAwO1xuXG4gIGZ1bmN0aW9uIF9tYWtlU3RlcENsaWNrYWJsZShlbCkge1xuICAgIGlmICghZWwgfHwgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdjbGlja2FibGUnKSkgcmV0dXJuO1xuICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2NsaWNrYWJsZScpO1xuICAgIGVsLnNldEF0dHJpYnV0ZSgncm9sZScsICdidXR0b24nKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICBpZiAoIWVsLl9zdGVwS2V5SGFuZGxlcikge1xuICAgICAgZWwuX3N0ZXBLZXlIYW5kbGVyID0gKGUpID0+IHtcbiAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZWwuY2xpY2soKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBlbC5fc3RlcEtleUhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9tYWtlU3RlcEluZXJ0KGVsKSB7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2NsaWNrYWJsZScpO1xuICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpO1xuICAgIGVsLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICBpZiAoZWwuX3N0ZXBLZXlIYW5kbGVyKSB7XG4gICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZWwuX3N0ZXBLZXlIYW5kbGVyKTtcbiAgICAgIGRlbGV0ZSBlbC5fc3RlcEtleUhhbmRsZXI7XG4gICAgfVxuICB9XG5cbiAgc2VxdWVudGlhbFN0ZXBzLmZvckVhY2goKGlkLCBpZHgpID0+IHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgaWYgKGlkeCA8PSBjdXJyZW50SWR4IHx8IHBvc3RMYXlvdXRVbmxvY2tlZCkge1xuICAgICAgX21ha2VTdGVwQ2xpY2thYmxlKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX21ha2VTdGVwSW5lcnQoZWwpO1xuICAgIH1cbiAgfSk7XG5cbiAgcG9zdExheW91dFN0ZXBzLmZvckVhY2goaWQgPT4ge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBpZiAocG9zdExheW91dFVubG9ja2VkKSB7XG4gICAgICBfbWFrZVN0ZXBDbGlja2FibGUoZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfbWFrZVN0ZXBJbmVydChlbCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBNYXJrIHRoZSBjdXJyZW50bHkgYWN0aXZlIHN0ZXAgZm9yIHNjcmVlbiByZWFkZXJzLlxuICBjb25zdCBhbGxTdGVwSWRzID0gWy4uLnNlcXVlbnRpYWxTdGVwcywgLi4ucG9zdExheW91dFN0ZXBzXTtcbiAgYWxsU3RlcElkcy5mb3JFYWNoKGlkID0+IHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoZWwpIGVsLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50Jyk7XG4gIH0pO1xuICAvLyBGb3IgcG9zdC1sYXlvdXQgcGhhc2VzLCBtYXJrIHN0ZXAtZG93bmxvYWQgYXMgdGhlIGFjdGl2ZSBzdGVwIHNvIHNjcmVlbiByZWFkZXJzXG4gIC8vIGhhdmUgYSBwcm9ncmFtbWF0aWMgY3VycmVudC1wb3NpdGlvbiBpbmRpY2F0b3IuXG4gIGNvbnN0IGFjdGl2ZVN0ZXBJZCA9IHBvc3RMYXlvdXRVbmxvY2tlZCA/ICdzdGVwLWRvd25sb2FkJyA6IHNlcXVlbnRpYWxTdGVwc1tjdXJyZW50SWR4XTtcbiAgaWYgKGFjdGl2ZVN0ZXBJZCkge1xuICAgIGNvbnN0IGFjdGl2ZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYWN0aXZlU3RlcElkKTtcbiAgICBpZiAoYWN0aXZlRWwpIGFjdGl2ZUVsLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3N0ZXAnKTtcbiAgfVxufVxuXG4vLyBJbml0aWFsaXplIG9uIHBhZ2UgbG9hZCBcdTIwMTQgZGVsZWdhdGVzIHRvIGFwcC5qcyBpbml0KCkgd2hpY2ggaXMgbG9hZGVkIGFmdGVyIHRoaXMgZmlsZVxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgbG9hZE1vZGVsU2VsZWN0b3IoKTtcblxuICAvLyBXaXJlIHVwIHRhYiBzY3JvbGwgYXJyb3cgYnV0dG9uc1xuICBjb25zdCB0YWJCYXIgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWItYmFyJyk7XG4gIGNvbnN0IGxlZnRCdG4gID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYi1zY3JvbGwtbGVmdCcpO1xuICBjb25zdCByaWdodEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWItc2Nyb2xsLXJpZ2h0Jyk7XG4gIGlmICh0YWJCYXIgJiYgbGVmdEJ0biAmJiByaWdodEJ0bikge1xuICAgIGxlZnRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAgKCkgPT4geyB0YWJCYXIuc2Nyb2xsQnkoeyBsZWZ0OiAtMTYwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7IH0pO1xuICAgIHJpZ2h0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4geyB0YWJCYXIuc2Nyb2xsQnkoeyBsZWZ0OiAgMTYwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7IH0pO1xuICAgIHRhYkJhci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGVUYWJTY3JvbGxCdXR0b25zKTtcbiAgICBuZXcgUmVzaXplT2JzZXJ2ZXIodXBkYXRlVGFiU2Nyb2xsQnV0dG9ucykub2JzZXJ2ZSh0YWJCYXIpO1xuICB9XG5cbiAgLy8gU2hvdyBvbmx5IHRoZSBKb2IgdGFiIHVudGlsIGZldGNoU3RhdHVzIHJlc29sdmVzIHRoZSBhY3R1YWwgc3RhZ2VcbiAgdXBkYXRlVGFiQmFyRm9yU3RhZ2UoJ2pvYicpO1xuICB1cGRhdGVXb3JrZmxvd1N0ZXBzQ2xpY2thYmxlKCdqb2InKTtcblxuICAvLyBMaXN0ZW4gZm9yIHBoYXNlIGNoYW5nZXMgdG8gdXBkYXRlIGNsaWNrYWJsZSBzdGVwc1xuICBpZiAodHlwZW9mIHN0YXRlTWFuYWdlcj8ub25QaGFzZUNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0YXRlTWFuYWdlci5vblBoYXNlQ2hhbmdlKChwaGFzZSkgPT4ge1xuICAgICAgdXBkYXRlV29ya2Zsb3dTdGVwc0NsaWNrYWJsZShwaGFzZSk7XG4gICAgfSk7XG4gIH1cblxufSk7XG5cbi8vIFx1MjUwMFx1MjUwMCBFUyBtb2R1bGUgZXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB7XG4gIC8vIEZvY3VzIC8gYWNjZXNzaWJpbGl0eVxuICBzZXRJbml0aWFsRm9jdXMsIHRyYXBGb2N1cywgcmVzdG9yZUZvY3VzLCBwdXNoRm9jdXNTdGFjayxcbiAgLy8gRGlhbG9ncyAmIG1vZGFsc1xuICBjb25maXJtRGlhbG9nLCBvcGVuTW9kYWwsIGNsb3NlTW9kYWwsIGNsb3NlQWxsTW9kYWxzLFxuICAvLyBUYWIgJiBzdGFnZSBtYW5hZ2VtZW50XG4gIHNldHVwRXZlbnRMaXN0ZW5lcnMsIGdldFN0YWdlRm9yVGFiLCBnZXRWaXNpYmxlU3RhZ2UsIHVwZGF0ZVRhYkJhckZvclN0YWdlLFxuICAvLyBDaGF0XG4gIHRvZ2dsZUNoYXQsXG4gIC8vIE1vZGVsIHNlbGVjdG9yXG4gIGxvYWRNb2RlbFNlbGVjdG9yLCBvcGVuTW9kZWxNb2RhbCwgY2xvc2VNb2RlbE1vZGFsLCBzZXRNb2RlbCwgdGVzdEN1cnJlbnRNb2RlbCwgcmVmcmVzaE1vZGVsUHJpY2luZyxcbiAgdG9nZ2xlTW9kZWxDYXRhbG9nVmlzaWJpbGl0eSwgc3RhcnRDb3BpbG90QXV0aEZyb21XaXphcmQsIGxvZ291dENvcGlsb3RBdXRoRnJvbVdpemFyZCxcbiAgbmV4dFdpemFyZFN0ZXAsIHByZXZpb3VzV2l6YXJkU3RlcCxcbiAgc2F2ZVByb3ZpZGVyQXBpS2V5LCB0b2dnbGVBcGlLZXlWaXNpYmlsaXR5LFxuICBfdXBkYXRlTGxtU3RhdHVzUGlsbCxcbiAgLy8gU2V0dGluZ3MgbW9kYWxcbiAgb3BlblNldHRpbmdzTW9kYWwsIGNsb3NlU2V0dGluZ3NNb2RhbCwgc2F2ZVNldHRpbmdzTW9kYWwsIHJlbG9hZFNldHRpbmdzTW9kYWwsXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiBsYXlvdXQtaW5zdHJ1Y3Rpb24uanNcbiAqIEZyb250ZW5kIFVJIGZvciBuYXR1cmFsLWxhbmd1YWdlIGxheW91dCBpbnN0cnVjdGlvbiB3b3JrZmxvdy5cbiAqIEhhbmRsZXMgaW5zdHJ1Y3Rpb24gc3VibWlzc2lvbiwgcHJldmlldyB1cGRhdGVzLCBhbmQgaW5zdHJ1Y3Rpb24gaGlzdG9yeS5cbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ2xheW91dC1pbnN0cnVjdGlvbicpO1xuXG5pbXBvcnQgeyBhcGlDYWxsIH0gZnJvbSAnLi9hcGktY2xpZW50LmpzJztcbmltcG9ydCB7IHNjaGVkdWxlQXRzUmVmcmVzaCB9IGZyb20gJy4vYXRzLXJlZmluZW1lbnQuanMnO1xuaW1wb3J0IHsgYXBwZW5kTWVzc2FnZSwgYXBwZW5kTWVzc2FnZUh0bWwgfSBmcm9tICcuL21lc3NhZ2UtcXVldWUuanMnO1xuaW1wb3J0IHsgc3dpdGNoVGFiIH0gZnJvbSAnLi9yZXZpZXctdGFibGUtYmFzZS5qcyc7XG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIsIEdFTkVSQVRJT05fU1RBVEVfRVZFTlQsIEdFTkVSQVRJT05fUEhBU0VTIH0gZnJvbSAnLi9zdGF0ZS1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCB7IGNvbmZpcm1SZVJ1blBoYXNlIH0gZnJvbSAnLi93b3JrZmxvdy1zdGVwcy5qcyc7XG5cbmxldCBkaXNtaXNzZWRTdGFsZUNhbGxvdXRSZXZpc2lvbiA9IG51bGw7XG5cbi8qKlxuICogQ29udmVydCBhIENTUyBwaXhlbCB2YWx1ZSB0byBpdHMgdHlwb2dyYXBoaWMgcG9pbnQgZXF1aXZhbGVudC5cbiAqIEFzc3VtZXMgdGhlIHN0YW5kYXJkIHNjcmVlbiByZXNvbHV0aW9uIGNvbnZlbnRpb246IDk2IHB4L2luLCA3MiBwdC9pbixcbiAqIHNvIDFweCA9IDAuNzUgcHQuXG4gKiBAcGFyYW0ge251bWJlcn0gcHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHB0IHZhbHVlIHJvdW5kZWQgdG8gb25lIGRlY2ltYWwgcGxhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB4VG9QdChweCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChweCAqIDAuNzUgKiAxMCkgLyAxMDtcbn1cblxuZnVuY3Rpb24gY29lcmNlQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlID0gZmFsc2UpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsdWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChbJzEnLCAndHJ1ZScsICd5ZXMnLCAnb24nXS5pbmNsdWRlcyhub3JtYWxpemVkKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKFsnMCcsICdmYWxzZScsICdubycsICdvZmYnXS5pbmNsdWRlcyhub3JtYWxpemVkKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbi8vIFVuZG8gc3RhY2sgXHUyMDE0IGVhY2ggZW50cnkgaXMgeyBodG1sLCBpbnN0cnVjdGlvbnMgfSBzbmFwc2hvdHRlZCBiZWZvcmUgYVxuLy8gbGF5b3V0IGluc3RydWN0aW9uIGlzIGFwcGxpZWQuICBDYXAgYXQgMjAgZW50cmllcyB0byBib3VuZCBtZW1vcnkuXG5jb25zdCBfbGF5b3V0VW5kb1N0YWNrID0gW107XG5jb25zdCBfVU5ET19TVEFDS19NQVggPSAyMDtcblxuZnVuY3Rpb24gZ2V0Q3ZBcnRpZmFjdHMoKSB7XG4gIHJldHVybiBzdGF0ZU1hbmFnZXIuZ2V0VGFiRGF0YSgnY3YnKSB8fCB7fTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ3ZBcnRpZmFjdHMobmV4dEN2QXJ0aWZhY3RzKSB7XG4gIHN0YXRlTWFuYWdlci5zZXRUYWJEYXRhKCdjdicsIG5leHRDdkFydGlmYWN0cyk7XG59XG5cbmZ1bmN0aW9uIHNldFByZXZpZXdIdG1sKGh0bWwpIHtcbiAgdXBkYXRlQ3ZBcnRpZmFjdHMoeyAuLi5nZXRDdkFydGlmYWN0cygpLCAnKi5odG1sJzogaHRtbCB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJldmlld091dHB1dHMoKSB7XG4gIHJldHVybiBzdGF0ZU1hbmFnZXI/LmdldEdlbmVyYXRpb25TdGF0ZT8uKCk/LnByZXZpZXdPdXRwdXRzIHx8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFByZXZpZXdPdXRwdXRVcmwocmVuZGVyZXIpIHtcbiAgY29uc3Qgc2Vzc2lvbklkID0gc3RhdGVNYW5hZ2VyPy5nZXRTZXNzaW9uSWQ/LigpO1xuICBjb25zdCBzdWZmaXggPSBzZXNzaW9uSWRcbiAgICA/IGA/c2Vzc2lvbl9pZD0ke2VuY29kZVVSSUNvbXBvbmVudChzZXNzaW9uSWQpfWBcbiAgICA6ICcnO1xuICByZXR1cm4gYC9hcGkvY3YvcHJldmlldy1vdXRwdXQvJHtlbmNvZGVVUklDb21wb25lbnQocmVuZGVyZXIpfSR7c3VmZml4fWA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclByZXZpZXdPdXRwdXRTdGF0dXMocHJldmlld091dHB1dHMgPSBudWxsKSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmV2aWV3LW91dHB1dC1zdGF0dXMnKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICBjb25zdCBwZGZzID0gcHJldmlld091dHB1dHM/LnBkZnMgfHwge307XG4gIGNvbnN0IHJlbmRlcmVyT3JkZXIgPSBbJ2Nocm9tZScsICd3ZWFzeXByaW50J107XG4gIGNvbnN0IGF2YWlsYWJsZVJlbmRlcmVycyA9IHJlbmRlcmVyT3JkZXIuZmlsdGVyKChyZW5kZXJlcktleSkgPT4gcmVuZGVyZXJLZXkgaW4gcGRmcyk7XG5cbiAgaWYgKGF2YWlsYWJsZVJlbmRlcmVycy5sZW5ndGggPT09IDApIHtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gYFxuICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctb3V0cHV0LWVtcHR5XCI+XG4gICAgICAgIFByZXZpZXcgUERGcyB3aWxsIGFwcGVhciBoZXJlIGFmdGVyIHRoZSBjdXJyZW50IGxheW91dCBpcyByZW5kZXJlZC5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVuZGVyZXJMYWJlbHMgPSB7XG4gICAgY2hyb21lOiAnQ2hyb21lJyxcbiAgICB3ZWFzeXByaW50OiAnV2Vhc3lQcmludCcsXG4gIH07XG5cbiAgY29udGFpbmVyLmlubmVySFRNTCA9IGF2YWlsYWJsZVJlbmRlcmVycy5tYXAoKHJlbmRlcmVyS2V5KSA9PiB7XG4gICAgY29uc3QgcmVuZGVyZXIgPSBwZGZzW3JlbmRlcmVyS2V5XSB8fCB7fTtcbiAgICBjb25zdCBvayA9IEJvb2xlYW4ocmVuZGVyZXIub2spO1xuICAgIGNvbnN0IGRldGFpbCA9IHJlbmRlcmVyLnJlbmRlcmVyX2RldGFpbCB8fCByZW5kZXJlci5lcnJvciB8fCAnTm8gZGV0YWlsIGF2YWlsYWJsZSc7XG4gICAgY29uc3QgcmVuZGVyZXJMYWJlbCA9IHJlbmRlcmVyTGFiZWxzW3JlbmRlcmVyS2V5XSB8fCByZW5kZXJlcktleTtcbiAgICBjb25zdCBiYWRnZU1hcmt1cCA9IG9rXG4gICAgICA/IGA8YSBjbGFzcz1cInByZXZpZXctb3V0cHV0LWJhZGdlIHByZXZpZXctb3V0cHV0LWJhZGdlLWxpbmsgaXMtcmVhZHlcIiBocmVmPVwiJHtnZXRQcmV2aWV3T3V0cHV0VXJsKHJlbmRlcmVyS2V5KX1cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lclwiPiR7cmVuZGVyZXJMYWJlbH0gUmVhZHk8L2E+YFxuICAgICAgOiBgPHNwYW4gY2xhc3M9XCJwcmV2aWV3LW91dHB1dC1iYWRnZSBpcy1mYWlsZWRcIj4ke3JlbmRlcmVyTGFiZWx9IEZhaWxlZDwvc3Bhbj5gO1xuXG4gICAgcmV0dXJuIGBcbiAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LW91dHB1dC1yb3cgJHtvayA/ICdpcy1yZWFkeScgOiAnaXMtZmFpbGVkJ31cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctb3V0cHV0LWNvcHlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1vdXRwdXQtdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAke2JhZGdlTWFya3VwfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LW91dHB1dC1kZXRhaWxcIj4ke2VzY2FwZUh0bWwoZGV0YWlsKX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9KS5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kTGF5b3V0U2FmZXR5QWxlcnQoc2FmZXR5QWxlcnQpIHtcbiAgaWYgKCFzYWZldHlBbGVydD8uZmxhZ2dlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGlzc3VlcyA9IChzYWZldHlBbGVydC5pc3N1ZXMgfHwgW10pXG4gICAgLm1hcChpc3N1ZSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gdHlwZW9mIGlzc3VlID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGlzc3VlXG4gICAgICAgIDogKGlzc3VlPy5kZXRhaWwgfHwgaXNzdWU/Lmlzc3VlIHx8IEpTT04uc3RyaW5naWZ5KGlzc3VlKSk7XG4gICAgICByZXR1cm4gYDxsaT4ke2VzY2FwZUh0bWwodGV4dCl9PC9saT5gO1xuICAgIH0pXG4gICAgLmpvaW4oJycpO1xuXG4gIGFwcGVuZE1lc3NhZ2VIdG1sKFxuICAgICdzeXN0ZW0nLFxuICAgIGA8c3Ryb25nPlx1MjZBMFx1RkUwRiBMYXlvdXQgc2FmZXR5IHNhbml0aXphdGlvbiBhcHBsaWVkLjwvc3Ryb25nPjxicj4ke2VzY2FwZUh0bWwoc2FmZXR5QWxlcnQubWVzc2FnZSB8fCAnUG90ZW50aWFsIHByb21wdCBwYXlsb2FkcyBvciB1bnNhZmUgSFRNTCB3ZXJlIHJlbW92ZWQgYmVmb3JlIGFwcGx5aW5nIHRoZSBjaGFuZ2UuJyl9PGJyPjx1bCBzdHlsZT1cIm1hcmdpbjo2cHggMCAwIDE4cHhcIj4ke2lzc3Vlc308L3VsPmAsXG4gICk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUxheW91dEluc3RydWN0aW9uKGluc3RydWN0aW9uID0ge30pIHtcbiAgcmV0dXJuIHtcbiAgICB0aW1lc3RhbXA6IGluc3RydWN0aW9uLnRpbWVzdGFtcCB8fCAnJyxcbiAgICBpbnN0cnVjdGlvbl90ZXh0OiBpbnN0cnVjdGlvbi5pbnN0cnVjdGlvbl90ZXh0IHx8IGluc3RydWN0aW9uLmluc3RydWN0aW9uIHx8ICcnLFxuICAgIGNoYW5nZV9zdW1tYXJ5OiBpbnN0cnVjdGlvbi5jaGFuZ2Vfc3VtbWFyeSB8fCBpbnN0cnVjdGlvbi5zdW1tYXJ5IHx8ICcnLFxuICAgIGNvbmZpcm1hdGlvbjogaW5zdHJ1Y3Rpb24uY29uZmlybWF0aW9uICE9PSBmYWxzZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbnRlbnRSZXZpc2lvbigpIHtcbiAgcmV0dXJuIHN0YXRlTWFuYWdlci5nZXRHZW5lcmF0aW9uU3RhdGUoKS5jb250ZW50UmV2aXNpb24gPz8gMDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0R2VuZXJhdGlvblRpbWVzdGFtcCh0aW1lc3RhbXApIHtcbiAgaWYgKCF0aW1lc3RhbXApIHJldHVybiAnJztcbiAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUodGltZXN0YW1wKTtcbiAgaWYgKE51bWJlci5pc05hTihwYXJzZWQuZ2V0VGltZSgpKSkgcmV0dXJuICcnO1xuICByZXR1cm4gcGFyc2VkLnRvTG9jYWxlU3RyaW5nKFtdLCB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRMYXlvdXRGcmVzaG5lc3NDaGlwTWFya3VwKGZyZXNobmVzcykge1xuICBpZiAoIWZyZXNobmVzcz8uc2hvd0NoaXApIHJldHVybiAnJztcbiAgY29uc3QgaWNvbiA9IGZyZXNobmVzcy5pc0NyaXRpY2FsID8gJ1x1MjFCQicgOiAoZnJlc2huZXNzLmlzU3RhbGUgPyAnIScgOiAnXHUyNzEzJyk7XG4gIHJldHVybiBgPHNwYW4gY2xhc3M9XCJsYXlvdXQtZnJlc2huZXNzLWNoaXAgJHtmcmVzaG5lc3MudG9uZX0gbGF5b3V0LXBhbmUtZnJlc2huZXNzLWNoaXBcIlxuICAgIGFyaWEtbGFiZWw9XCIke2VzY2FwZUh0bWwoZnJlc2huZXNzLmFyaWFMYWJlbCB8fCAnJyl9XCI+XG4gICAgPHNwYW4gY2xhc3M9XCJsYXlvdXQtZnJlc2huZXNzLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke2ljb259PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwibGF5b3V0LWZyZXNobmVzcy1sYWJlbFwiPiR7ZXNjYXBlSHRtbChmcmVzaG5lc3MubGFiZWwgfHwgJycpfTwvc3Bhbj5cbiAgPC9zcGFuPmA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckxheW91dFByZXZpZXdTdGF0dXMoKSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXlvdXQtcHJldmlldy1zdGF0dXMnKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgY29uc3QgZnJlc2huZXNzID0gc3RhdGVNYW5hZ2VyLmdldExheW91dEZyZXNobmVzcygpO1xuICBjb25zdCBnZW5lcmF0aW9uU3RhdGUgPSBzdGF0ZU1hbmFnZXIuZ2V0R2VuZXJhdGlvblN0YXRlKCk7XG4gIGlmICghZ2VuZXJhdGlvblN0YXRlLnByZXZpZXdBdmFpbGFibGUpIHtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGxhc3RQcmV2aWV3UmV2aXNpb24gPSBOdW1iZXIuaXNGaW5pdGUoZ2VuZXJhdGlvblN0YXRlLmxhc3RQcmV2aWV3Q29udGVudFJldmlzaW9uKVxuICAgID8gZ2VuZXJhdGlvblN0YXRlLmxhc3RQcmV2aWV3Q29udGVudFJldmlzaW9uIDogbnVsbDtcbiAgY29uc3QgY3VycmVudFJldmlzaW9uID0gTnVtYmVyLmlzRmluaXRlKGdlbmVyYXRpb25TdGF0ZS5jb250ZW50UmV2aXNpb24pXG4gICAgPyBnZW5lcmF0aW9uU3RhdGUuY29udGVudFJldmlzaW9uIDogbnVsbDtcbiAgY29uc3QgcGVuZGluZ1JldmlzaW9uQ291bnQgPSBsYXN0UHJldmlld1JldmlzaW9uICE9PSBudWxsICYmIGN1cnJlbnRSZXZpc2lvbiAhPT0gbnVsbFxuICAgID8gTWF0aC5tYXgoMCwgY3VycmVudFJldmlzaW9uIC0gbGFzdFByZXZpZXdSZXZpc2lvbikgOiAwO1xuICBjb25zdCB0aW1lc3RhbXBMYWJlbCA9IGZvcm1hdEdlbmVyYXRpb25UaW1lc3RhbXAoZ2VuZXJhdGlvblN0YXRlLnByZXZpZXdHZW5lcmF0ZWRBdCk7XG4gIGNvbnN0IGRldGFpbExpbmVzID0gW107XG4gIGlmICh0aW1lc3RhbXBMYWJlbCkgZGV0YWlsTGluZXMucHVzaChgUHJldmlldyBnZW5lcmF0ZWQgJHt0aW1lc3RhbXBMYWJlbH1gKTtcbiAgaWYgKGdlbmVyYXRpb25TdGF0ZS5sYXlvdXRDb25maXJtZWQgJiYgZ2VuZXJhdGlvblN0YXRlLmNvbmZpcm1lZEF0KSB7XG4gICAgY29uc3QgY29uZmlybWVkTGFiZWwgPSBmb3JtYXRHZW5lcmF0aW9uVGltZXN0YW1wKGdlbmVyYXRpb25TdGF0ZS5jb25maXJtZWRBdCk7XG4gICAgaWYgKGNvbmZpcm1lZExhYmVsKSBkZXRhaWxMaW5lcy5wdXNoKGBMYXlvdXQgY29uZmlybWVkICR7Y29uZmlybWVkTGFiZWx9YCk7XG4gIH1cbiAgaWYgKGZyZXNobmVzcy5pc1N0YWxlKSB7XG4gICAgaWYgKHBlbmRpbmdSZXZpc2lvbkNvdW50ID4gMCkge1xuICAgICAgZGV0YWlsTGluZXMucHVzaChgJHtwZW5kaW5nUmV2aXNpb25Db3VudH0gY29udGVudCBjaGFuZ2Uke3BlbmRpbmdSZXZpc2lvbkNvdW50ID09PSAxID8gJycgOiAncyd9IHNpbmNlIHRoaXMgcHJldmlld2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXRhaWxMaW5lcy5wdXNoKCdDb250ZW50IGNoYW5nZWQgYWZ0ZXIgdGhpcyBwcmV2aWV3IHdhcyBnZW5lcmF0ZWQnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZ2VuZXJhdGlvblN0YXRlLmxheW91dENvbmZpcm1lZCB8fCBnZW5lcmF0aW9uU3RhdGUucGhhc2UgPT09ICdjb25maXJtZWQnKSB7XG4gICAgZGV0YWlsTGluZXMucHVzaCgnQ29uZmlybWVkIHByZXZpZXcgbWF0Y2hlcyB0aGUgbGF0ZXN0IGFwcHJvdmVkIGNvbnRlbnQnKTtcbiAgfSBlbHNlIHtcbiAgICBkZXRhaWxMaW5lcy5wdXNoKCdQcmV2aWV3IG1hdGNoZXMgdGhlIGxhdGVzdCBhcHByb3ZlZCBjb250ZW50Jyk7XG4gIH1cbiAgY29uc3Qgc3RhZ2VMYWJlbCA9IGdlbmVyYXRpb25TdGF0ZS5sYXlvdXRDb25maXJtZWQgfHwgZ2VuZXJhdGlvblN0YXRlLnBoYXNlID09PSAnY29uZmlybWVkJ1xuICAgID8gJ1JlYWR5IGZvciBmaW5hbCBmaWxlcycgOiAnUmVhZHkgZm9yIGxheW91dCByZXZpZXcnO1xuICAvLyBQYWdlIGNvdW50IGJhZGdlOiBzaG93biB3aGVuIGEgcGFnZSBjb3VudCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgcHJldmlld1xuICBjb25zdCBwYyA9IGdlbmVyYXRpb25TdGF0ZS5wYWdlQ291bnRFeGFjdCA/PyBnZW5lcmF0aW9uU3RhdGUucGFnZUNvdW50RXN0aW1hdGU7XG4gIGxldCBwYWdlQ291bnRCYWRnZSA9ICcnO1xuICBpZiAocGMgIT09IG51bGwgJiYgcGMgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHBjTGFiZWwgID0gZ2VuZXJhdGlvblN0YXRlLnBhZ2VDb3VudEV4YWN0ICE9PSBudWxsID8gYCR7cGN9IHBhZ2Uke3BjICE9PSAxID8gJ3MnIDogJyd9YCA6IGB+JHtwY30gcGFnZSR7cGMgIT09IDEgPyAncycgOiAnJ31gO1xuICAgIGNvbnN0IHBjV2FybiAgID0gZ2VuZXJhdGlvblN0YXRlLnBhZ2VXYXJuaW5nO1xuICAgIHBhZ2VDb3VudEJhZGdlID0gYDxzcGFuIGNsYXNzPVwibGF5b3V0LXBhZ2UtY291bnQtYmFkZ2Uke3BjV2FybiA/ICcgd2FybicgOiAnJ31cIiB0aXRsZT1cIiR7cGNXYXJuID8gJ1BhZ2UgY291bnQgb3V0c2lkZSByZWNvbW1lbmRlZCByYW5nZScgOiAnUGFnZSBjb3VudCB3aXRoaW4gcmFuZ2UnfVwiPiR7cGNXYXJuID8gJ1x1MjZBMCAnIDogJ1x1RDgzRFx1RENDNCAnfSR7ZXNjYXBlSHRtbChwY0xhYmVsKX08L3NwYW4+YDtcbiAgfVxuICBjb250YWluZXIuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtcHJldmlldy1zdGF0dXMtY2FyZCAke2ZyZXNobmVzcy50b25lfVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxheW91dC1wcmV2aWV3LXN0YXR1cy1oZWFkZXJcIj5cbiAgICAgICAgJHtidWlsZExheW91dEZyZXNobmVzc0NoaXBNYXJrdXAoZnJlc2huZXNzKX1cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsYXlvdXQtcHJldmlldy1zdGF0dXMtc3RhZ2VcIj4ke2VzY2FwZUh0bWwoc3RhZ2VMYWJlbCl9PC9zcGFuPlxuICAgICAgICAke3BhZ2VDb3VudEJhZGdlfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXByZXZpZXctc3RhdHVzLWRldGFpbHNcIj5cbiAgICAgICAgJHtkZXRhaWxMaW5lcy5tYXAoKGxpbmUpID0+IGA8ZGl2PiR7ZXNjYXBlSHRtbChsaW5lKX08L2Rpdj5gKS5qb2luKCcnKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG4gIGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbn1cblxuZnVuY3Rpb24gcmVuZGVyTGF5b3V0U3RhbGVDYWxsb3V0KCkge1xuICBjb25zdCBjYWxsb3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheW91dC1zdGFsZS1jYWxsb3V0Jyk7XG4gIGlmICghY2FsbG91dCkgcmV0dXJuO1xuXG4gIGNvbnN0IGZyZXNobmVzcyA9IHN0YXRlTWFuYWdlci5nZXRMYXlvdXRGcmVzaG5lc3MoKTtcbiAgY29uc3QgY29udGVudFJldmlzaW9uID0gZ2V0Q3VycmVudENvbnRlbnRSZXZpc2lvbigpO1xuICBjb25zdCBpc0Rpc21pc3NlZCA9IGRpc21pc3NlZFN0YWxlQ2FsbG91dFJldmlzaW9uID09PSBjb250ZW50UmV2aXNpb247XG5cbiAgaWYgKCFmcmVzaG5lc3MuaXNTdGFsZSB8fCBpc0Rpc21pc3NlZCkge1xuICAgIGlmICghZnJlc2huZXNzLmlzU3RhbGUpIGRpc21pc3NlZFN0YWxlQ2FsbG91dFJldmlzaW9uID0gbnVsbDtcbiAgICBjYWxsb3V0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY2FsbG91dC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbn1cblxuZnVuY3Rpb24gcmVmcmVzaExheW91dFJldmlld1N0YXRlKCkge1xuICBjb25zdCBmcmVzaG5lc3MgPSBzdGF0ZU1hbmFnZXIuZ2V0TGF5b3V0RnJlc2huZXNzKCk7XG4gIGNvbnN0IGdlbmVyYXRpb25TdGF0ZSA9IHN0YXRlTWFuYWdlci5nZXRHZW5lcmF0aW9uU3RhdGUoKTtcbiAgY29uc3QgY29uZmlybUJ0biAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uZmlybS1sYXlvdXQtYnRuJyk7XG4gIGNvbnN0IGZpbmFsQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2NlZWQtdG8tZmluYWxpc2UtYnRuJyk7XG5cbiAgcmVuZGVyTGF5b3V0UHJldmlld1N0YXR1cygpO1xuICByZW5kZXJMYXlvdXRTdGFsZUNhbGxvdXQoKTtcbiAgcmVuZGVyRGlydHlQaGFzZXNDYWxsb3V0KCk7XG5cbiAgY29uc3QgZGlydHlQaGFzZXMgPSBzdGF0ZU1hbmFnZXIuZ2V0RGlydHlQaGFzZXMoKTtcbiAgY29uc3QgaGFzRGlydHkgPSBkaXJ0eVBoYXNlcy5sZW5ndGggPiAwO1xuXG4gIGNvbnN0IHNob3dDb25maXJtID0gZ2VuZXJhdGlvblN0YXRlLnByZXZpZXdBdmFpbGFibGUgJiYgIWZyZXNobmVzcy5pc1N0YWxlICYmICFnZW5lcmF0aW9uU3RhdGUubGF5b3V0Q29uZmlybWVkICYmICFoYXNEaXJ0eVxuICAgID8gJ2Jsb2NrJ1xuICAgIDogJ25vbmUnO1xuXG4gIGlmIChjb25maXJtQnRuKSAgY29uZmlybUJ0bi5zdHlsZS5kaXNwbGF5ICA9IHNob3dDb25maXJtO1xuICBjb25zdCBoaW50RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5b3V0LXR3by1zdGVwLWhpbnQnKTtcbiAgaWYgKGhpbnRFbCkgaGludEVsLnN0eWxlLmRpc3BsYXkgPSBzaG93Q29uZmlybTtcblxuICBpZiAoZmluYWxCdG4pIHtcbiAgICBmaW5hbEJ0bi5zdHlsZS5kaXNwbGF5ID0gZ2VuZXJhdGlvblN0YXRlLnByZXZpZXdBdmFpbGFibGVcbiAgICAgICYmICFmcmVzaG5lc3MuaXNTdGFsZVxuICAgICAgJiYgIWhhc0RpcnR5XG4gICAgICAmJiAoZ2VuZXJhdGlvblN0YXRlLmxheW91dENvbmZpcm1lZCB8fCBnZW5lcmF0aW9uU3RhdGUucGhhc2UgPT09ICdjb25maXJtZWQnKVxuICAgICAgPyAnYmxvY2snXG4gICAgICA6ICdub25lJztcbiAgfVxufVxuXG4vKipcbiAqIEluaXRpYWxpemUgbGF5b3V0IGluc3RydWN0aW9uIFVJIGFuZCBldmVudCBoYW5kbGVycy5cbiAqIENhbGxlZCB3aGVuIGxheW91dCB0YWIgaXMgYWN0aXZhdGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBpbml0aWF0ZUxheW91dEluc3RydWN0aW9ucygpIHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25UYWIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICBpZiAoIWluc3RydWN0aW9uVGFiKSByZXR1cm47XG5cbiAgLy8gQ3JlYXRlIHR3by1jb2x1bW4gbGF5b3V0IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgaWYgKCFpbnN0cnVjdGlvblRhYi5xdWVyeVNlbGVjdG9yKCcubGF5b3V0LWluc3RydWN0aW9uLXBhbmVsJykpIHtcbiAgICBpbnN0cnVjdGlvblRhYi5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LWluc3RydWN0aW9uLXBhbmVsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtcHJldmlldy1wYW5lXCI+XG4gICAgICAgICAgPGgzPkN1cnJlbnQgTGF5b3V0IFByZXZpZXc8L2gzPlxuICAgICAgICAgIDxkaXYgaWQ9XCJsYXlvdXQtcHJldmlldy1zdGF0dXNcIiBjbGFzcz1cImxheW91dC1wcmV2aWV3LXN0YXR1c1wiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWlmcmFtZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJwcmV2aWV3LWxvYWRpbmctb3ZlcmxheVwiIGNsYXNzPVwicHJldmlldy1sb2FkaW5nLW92ZXJsYXlcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwcmV2aWV3LWxvYWRpbmctbGFiZWxcIj5SZW5kZXJpbmcgcHJldmlld1x1MjAyNjwvcD5cbiAgICAgICAgICAgICAgPHAgaWQ9XCJwcmV2aWV3LWxvYWRpbmctbG9nXCIgY2xhc3M9XCJwcmV2aWV3LWxvYWRpbmctbG9nXCI+PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aWZyYW1lIGlkPVwibGF5b3V0LXByZXZpZXdcIiBjbGFzcz1cImxheW91dC1wcmV2aWV3LWlmcmFtZVwiIHRpdGxlPVwiQ1YgTGF5b3V0IFByZXZpZXdcIiBzYW5kYm94PVwiYWxsb3ctc2FtZS1vcmlnaW5cIiByZWZlcnJlcnBvbGljeT1cIm5vLXJlZmVycmVyXCI+PC9pZnJhbWU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtaW5wdXQtcGFuZVwiPlxuICAgICAgICAgIDxoMz5MYXlvdXQgUmV2aWV3PC9oMz5cbiAgICAgICAgICA8cCBjbGFzcz1cImxheW91dC1zY29wZS1sYWJlbFwiPlx1RDgzRFx1RENBMSBEZXNjcmliZSBhIGxheW91dCBjaGFuZ2UgKHNwYWNpbmcsIG1hcmdpbnMsIGNvbHVtbiB3aWR0aHMsIHNlY3Rpb24gb3JkZXIpLiBUZXh0IGNvbnRlbnQgaXMgZmluYWxpc2VkIFx1MjAxNCBjb250ZW50IGVkaXRzIGFyZSBub3QgYXBwbGllZCBoZXJlLjwvcD5cbiAgICAgICAgICA8ZGl2IGlkPVwibGF5b3V0LXBhZ2UtZXN0aW1hdGVcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTttYXJnaW4tYm90dG9tOjEwcHg7XCI+PC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGlkPVwibGF5b3V0LXN0YWxlLWNhbGxvdXRcIiBjbGFzcz1cImxheW91dC1zdGFsZS1jYWxsb3V0XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XG4gICAgICAgICAgICA8aDQ+TGF5b3V0IHByZXZpZXcgaXMgb3V0IG9mIGRhdGU8L2g0PlxuICAgICAgICAgICAgPHA+WW91IGNoYW5nZWQgQ1YgY29udGVudCBhZnRlciB0aGUgY3VycmVudCBwcmV2aWV3IHdhcyBnZW5lcmF0ZWQuIFJlZ2VuZXJhdGUgdGhlIHByZXZpZXcgYmVmb3JlIHRydXN0aW5nIHBhZ2UgY291bnQsIGxheW91dCBmZWVkYmFjaywgb3IgZmluYWwgZmlsZXMuPC9wPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxheW91dC1zdGFsZS1jYWxsb3V0LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInJlZ2VuZXJhdGUtbGF5b3V0LXByZXZpZXctYnRuXCIgY2xhc3M9XCJidG4td2FybmluZyBsYXlvdXQtYWN0aW9uLWJ0blwiPlJlZ2VuZXJhdGUgcHJldmlldzwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiZGlzbWlzcy1sYXlvdXQtc3RhbGUtYnRuXCIgY2xhc3M9XCJidG4tc2Vjb25kYXJ5IGxheW91dC1hY3Rpb24tYnRuXCI+S2VlcCByZXZpZXdpbmcgY3VycmVudCBwcmV2aWV3PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LW91dHB1dC1jYXJkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1vdXRwdXQtY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGg0PlByZXZpZXcgUERGczwvaDQ+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJldmlldy1vdXRwdXQtY2FyZC1ub3RlXCI+Q2hyb21lIGFuZCBXZWFzeVByaW50IHJlbmRlciBpbiBwYXJhbGxlbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBpZD1cInByZXZpZXctb3V0cHV0LXN0YXR1c1wiIGNsYXNzPVwicHJldmlldy1vdXRwdXQtc3RhdHVzXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXNldHRpbmdzLXJvd1wiIHN0eWxlPVwiZGlzcGxheTpmbGV4OyBmbGV4LXdyYXA6d3JhcDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6MTBweDsgbWFyZ2luLWJvdHRvbToxNHB4OyBwYWRkaW5nOjhweCAxMHB4OyBiYWNrZ3JvdW5kOiNmOGZhZmM7IGJvcmRlcjoxcHggc29saWQgI2UyZThmMDsgYm9yZGVyLXJhZGl1czo2cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiYmFzZS1mb250LXNpemUtaW5wdXRcIiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07IGZvbnQtd2VpZ2h0OjYwMDsgY29sb3I6IzQ3NTU2OTsgd2hpdGUtc3BhY2U6bm93cmFwO1wiPkJhc2UgZm9udCBzaXplOjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJiYXNlLWZvbnQtc2l6ZS1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBtaW49XCI2XCIgbWF4PVwiMTZcIiBzdGVwPVwiMC41XCJcbiAgICAgICAgICAgICAgdmFsdWU9XCIxM1wiXG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NjBweDsgcGFkZGluZzozcHggNnB4OyBib3JkZXI6MXB4IHNvbGlkICNjYmQ1ZTE7IGJvcmRlci1yYWRpdXM6NHB4OyBmb250LXNpemU6MC45ZW07XCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJDb250cm9scyB0aGUgcm9vdCBmb250IHNpemUgZm9yIHRoZSBDVi4gQWxsIHJlbS1iYXNlZCBzaXplcyBzY2FsZSB3aXRoIHRoaXMgdmFsdWUuXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3BhbiBpZD1cImZvbnQtc2l6ZS1wdC1kaXNwbGF5XCIgc3R5bGU9XCJmb250LXNpemU6MC44MmVtOyBjb2xvcjojNjQ3NDhiOyB3aGl0ZS1zcGFjZTpub3dyYXA7XCI+cHgmbmJzcDsoOS44Jm5ic3A7cHQpPC9zcGFuPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBhZ2UtbWFyZ2luLWlucHV0XCIgc3R5bGU9XCJmb250LXNpemU6MC44NWVtOyBmb250LXdlaWdodDo2MDA7IGNvbG9yOiM0NzU1Njk7IHdoaXRlLXNwYWNlOm5vd3JhcDsgbWFyZ2luLWxlZnQ6OHB4O1wiPlBhZ2UgbWFyZ2luIChpbik6PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBpZD1cInBhZ2UtbWFyZ2luLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgIG1pbj1cIjAuNVwiIG1heD1cIjEuNVwiIHN0ZXA9XCIwLjA1XCJcbiAgICAgICAgICAgICAgdmFsdWU9XCIwLjVcIlxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjcycHg7IHBhZGRpbmc6M3B4IDZweDsgYm9yZGVyOjFweCBzb2xpZCAjY2JkNWUxOyBib3JkZXItcmFkaXVzOjRweDsgZm9udC1zaXplOjAuOWVtO1wiXG4gICAgICAgICAgICAgIHRpdGxlPVwiQ29udHJvbHMgdGhlIHByaW50IHBhZ2UgbWFyZ2lucyBmb3IgYWxsIFBERiBwYWdlcy5cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwdWJsaWNhdGlvbnMtc3RhcnQtbmV3LXBhZ2UtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjZweDsgZm9udC1zaXplOjAuODNlbTsgY29sb3I6IzMzNDE1NTsgbWFyZ2luLWxlZnQ6OHB4O1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJwdWJsaWNhdGlvbnMtc3RhcnQtbmV3LXBhZ2UtaW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiAvPlxuICAgICAgICAgICAgICBTdGFydCBQdWJsaWNhdGlvbnMgb24gbmV3IHBhZ2VcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwic2tpbGxzLXNob3ctZXhwZXJpZW5jZS1zZWxlY3RcIiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07IGZvbnQtd2VpZ2h0OjYwMDsgY29sb3I6IzQ3NTU2OTsgd2hpdGUtc3BhY2U6bm93cmFwOyBtYXJnaW4tbGVmdDo4cHg7XCI+U2tpbGwgZXhwZXJpZW5jZSBsZXZlbDo8L2xhYmVsPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBpZD1cInNraWxscy1zaG93LWV4cGVyaWVuY2Utc2VsZWN0XCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOjNweCA2cHg7IGJvcmRlcjoxcHggc29saWQgI2NiZDVlMTsgYm9yZGVyLXJhZGl1czo0cHg7IGZvbnQtc2l6ZTowLjllbTtcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkNvbnRyb2xzIHdoZXRoZXIgeWVhcnMgb2YgZXhwZXJpZW5jZSBhcmUgc2hvd24gbmV4dCB0byBlYWNoIHNraWxsLlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJpbmRpdmlkdWFsXCI+SW5kaXZpZHVhbCBzZXR0aW5nPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhbHdheXNcIj5BbHdheXM8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5ldmVyXCI+TmV2ZXI8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImFwcGx5LWxheW91dC1zZXR0aW5ncy1idG5cIiBjbGFzcz1cImJ0bi1zZWNvbmRhcnlcIiBzdHlsZT1cInBhZGRpbmc6M3B4IDEwcHg7IGZvbnQtc2l6ZTowLjg1ZW07XCI+QXBwbHk8L2J1dHRvbj5cbiAgICAgICAgICAgIDxzcGFuIGlkPVwibGF5b3V0LXNldHRpbmdzLXN0YXR1c1wiIHN0eWxlPVwiZm9udC1zaXplOjAuOGVtOyBjb2xvcjojNjQ3NDhiO1wiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgaWQ9XCJpbnN0cnVjdGlvbi1pbnB1dFwiXG4gICAgICAgICAgICBjbGFzcz1cImxheW91dC1pbnN0cnVjdGlvbi10ZXh0YXJlYVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4sIE1vdmUgUHVibGljYXRpb25zIHNlY3Rpb24gYWZ0ZXIgU2tpbGxzJiMxMDtvcjogU2hvcnRlbiB0aGUgc2Vjb25kIGJ1bGxldCB1bmRlciBHZW5lbnRlY2ggdG8gZm9jdXMgb24gaW1wYWN0JiMxMDtvcjogS2VlcCB0aGUgR2VuZW50ZWNoIGVudHJ5IG9uIG9uZSBwYWdlXCJcbiAgICAgICAgICAgIHJvd3M9XCI2XCI+PC90ZXh0YXJlYT5cblxuICAgICAgICAgIDxidXR0b24gaWQ9XCJhcHBseS1pbnN0cnVjdGlvbi1idG5cIiBjbGFzcz1cImJ0bi1wcmltYXJ5IGxheW91dC1hY3Rpb24tYnRuXCI+XG4gICAgICAgICAgICBBcHBseVxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImNvbmZpcm0tbGF5b3V0LWJ0blwiIGNsYXNzPVwiY29udGludWUtYnRuIGxheW91dC1hY3Rpb24tYnRuXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XG4gICAgICAgICAgICBDb25maXJtIExheW91dFxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPHAgaWQ9XCJsYXlvdXQtdHdvLXN0ZXAtaGludFwiIHN0eWxlPVwiZGlzcGxheTpub25lO2ZvbnQtc2l6ZTowLjgyZW07Y29sb3I6IzZiNzI4MDttYXJnaW46NnB4IDAgMnB4O1wiPlxuICAgICAgICAgICAgT25jZSB0aGUgcHJldmlldyBsb29rcyByaWdodCwgY29uZmlybSB0aGUgbGF5b3V0IFx1MjAxNCB0aGVuIGdlbmVyYXRlIHlvdXIgZmluYWwgc3VibWlzc2lvbiBmaWxlcy5cbiAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICA8ZGl2IGlkPVwicHJvY2Vzc2luZy1pbmRpY2F0b3JcIiBjbGFzcz1cInByb2Nlc3NpbmctaW5kaWNhdG9yXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDxwPkFwcGx5aW5nIGluc3RydWN0aW9uLi4uPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBpZD1cImNvbmZpcm1hdGlvbi1tZXNzYWdlXCIgY2xhc3M9XCJjb25maXJtYXRpb24tbWVzc2FnZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtaGlzdG9yeS1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8aDQ+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGlzdG9yeS10b2dnbGVcIj5cdTI1QkM8L3NwYW4+XG4gICAgICAgICAgICAgIEluc3RydWN0aW9uIEhpc3RvcnkgKDxzcGFuIGlkPVwiaW5zdHJ1Y3Rpb24tY291bnRcIj4wPC9zcGFuPilcbiAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiaW5zdHJ1Y3Rpb24taGlzdG9yeVwiIGNsYXNzPVwiaW5zdHJ1Y3Rpb24taGlzdG9yeS1saXN0XCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8YnV0dG9uIGlkPVwicHJvY2VlZC10by1maW5hbGlzZS1idG5cIiBjbGFzcz1cImNvbnRpbnVlLWJ0biBsYXlvdXQtYWN0aW9uLWJ0blwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cbiAgICAgICAgICAgIEdlbmVyYXRlIEZpbmFsIEZpbGVzXG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8ZGl2IGlkPVwiY29udGVudC1wcm9wb3NhbC1wcm9jZXNzaW5nXCIgY2xhc3M9XCJwcm9jZXNzaW5nLWluZGljYXRvclwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDxwPkdlbmVyYXRpbmcgY29udGVudCBwcm9wb3NhbHNcdTIwMjY8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBpZD1cImNvbnRlbnQtcHJvcG9zYWxzLXBhbmVsXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImFwcGx5LWNvbnRlbnQtY2hhbmdlcy1idG5cIiBjbGFzcz1cImJ0bi13YXJuaW5nIGxheW91dC1hY3Rpb24tYnRuXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XG4gICAgICAgICAgICBBcHBseSBBcHByb3ZlZCBDaGFuZ2VzXG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8ZGl2IGlkPVwiZGlydHktcGhhc2VzLWNhbGxvdXRcIiBjbGFzcz1cImRpcnR5LXBoYXNlcy1jYWxsb3V0XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XG4gICAgICAgICAgICA8aDQ+XHUyNkEwIENvbnRlbnQgQ2hhbmdlZCBcdTIwMTQgUmUtcnVuIFJlcXVpcmVkPC9oND5cbiAgICAgICAgICAgIDxwPlRleHQgZWRpdHMgaGF2ZSBiZWVuIHN0YWdlZC4gVGhlIGN1cnJlbnQgcHJldmlldyBubyBsb25nZXIgcmVmbGVjdHMgdGhlIHVwZGF0ZWQgY29udGVudC48L3A+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXN0YWxlLWNhbGxvdXQtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwicmV0dXJuLXRvLWVhcmxpZXN0LWRpcnR5LWJ0blwiIGNsYXNzPVwiYnRuLXdhcm5pbmcgbGF5b3V0LWFjdGlvbi1idG5cIj5cdTIxQkIgUmV0dXJuIHRvIEdlbmVyYXRlIENWPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuXG4gICAgLy8gV2lyZSB1cCBldmVudCBsaXN0ZW5lcnNcbiAgICBzZXR1cExheW91dEluc3RydWN0aW9uTGlzdGVuZXJzKCk7XG4gIH1cblxuICAvLyBSZXN0b3JlIHNhdmVkIGZvbnQgc2l6ZSBmcm9tIHNlc3Npb24gc3RhdGUgaWYgYXZhaWxhYmxlXG4gIGNvbnN0IHNhdmVkRm9udFNpemUgPSBzdGF0ZU1hbmFnZXI/LmdldFNlc3Npb25TdGF0ZT8uKCk/LmJhc2VfZm9udF9zaXplO1xuICBpZiAoc2F2ZWRGb250U2l6ZSkge1xuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Jhc2UtZm9udC1zaXplLWlucHV0Jyk7XG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBjb25zdCBweCA9IHBhcnNlRmxvYXQoc2F2ZWRGb250U2l6ZSkgfHwgMTM7XG4gICAgICBpbnB1dC52YWx1ZSA9IHB4O1xuICAgICAgY29uc3QgcHREaXNwbGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZvbnQtc2l6ZS1wdC1kaXNwbGF5Jyk7XG4gICAgICBpZiAocHREaXNwbGF5KSBwdERpc3BsYXkudGV4dENvbnRlbnQgPSBgcHhcXHUwMGEwKCR7cHhUb1B0KHB4KX1cXHUwMGEwcHQpYDtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc2F2ZWRQYWdlTWFyZ2luID0gc3RhdGVNYW5hZ2VyPy5nZXRTZXNzaW9uU3RhdGU/LigpPy5wYWdlX21hcmdpbjtcbiAgaWYgKHNhdmVkUGFnZU1hcmdpbikge1xuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtbWFyZ2luLWlucHV0Jyk7XG4gICAgaWYgKGlucHV0KSBpbnB1dC52YWx1ZSA9IHBhcnNlRmxvYXQoc2F2ZWRQYWdlTWFyZ2luKSB8fCAwLjU7XG4gIH1cbiAgY29uc3QgcHVibGljYXRpb25zU3RhcnRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWJsaWNhdGlvbnMtc3RhcnQtbmV3LXBhZ2UtaW5wdXQnKTtcbiAgaWYgKHB1YmxpY2F0aW9uc1N0YXJ0SW5wdXQpIHtcbiAgICBjb25zdCBzZXNzaW9uU3RhdGUgPSBzdGF0ZU1hbmFnZXI/LmdldFNlc3Npb25TdGF0ZT8uKCkgfHwge307XG4gICAgY29uc3QgY3VzdG9taXphdGlvblN0YXRlID0gc3RhdGVNYW5hZ2VyPy5nZXRUYWJEYXRhPy4oJ2N1c3RvbWl6YXRpb25zJykgfHwge307XG4gICAgY29uc3Qgc2F2ZWRQdWJsaWNhdGlvbnNTdGFydCA9XG4gICAgICBzZXNzaW9uU3RhdGUucHVibGljYXRpb25zX3N0YXJ0X25ld19wYWdlXG4gICAgICA/PyBzZXNzaW9uU3RhdGU/LmN1c3RvbWl6YXRpb25zPy5wdWJsaWNhdGlvbnNfc3RhcnRfbmV3X3BhZ2VcbiAgICAgID8/IGN1c3RvbWl6YXRpb25TdGF0ZS5wdWJsaWNhdGlvbnNfc3RhcnRfbmV3X3BhZ2VcbiAgICAgID8/IGN1c3RvbWl6YXRpb25TdGF0ZS5wdWJsaWNhdGlvbnNfcGFnZV9icmVha1xuICAgICAgPz8gY3VzdG9taXphdGlvblN0YXRlLnN0YXJ0X3B1YmxpY2F0aW9uc19vbl9uZXdfcGFnZVxuICAgICAgPz8gZmFsc2U7XG4gICAgcHVibGljYXRpb25zU3RhcnRJbnB1dC5jaGVja2VkID0gY29lcmNlQm9vbGVhbihzYXZlZFB1YmxpY2F0aW9uc1N0YXJ0LCBmYWxzZSk7XG4gIH1cbiAgY29uc3Qgc2tpbGxzU2hvd0V4cGVyaWVuY2VTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGxzLXNob3ctZXhwZXJpZW5jZS1zZWxlY3QnKTtcbiAgaWYgKHNraWxsc1Nob3dFeHBlcmllbmNlU2VsZWN0KSB7XG4gICAgY29uc3Qgc2Vzc2lvblN0YXRlID0gc3RhdGVNYW5hZ2VyPy5nZXRTZXNzaW9uU3RhdGU/LigpIHx8IHt9O1xuICAgIGNvbnN0IGN1c3RvbWl6YXRpb25TdGF0ZSA9IHN0YXRlTWFuYWdlcj8uZ2V0VGFiRGF0YT8uKCdjdXN0b21pemF0aW9ucycpIHx8IHt9O1xuICAgIGNvbnN0IHNhdmVkU2tpbGxzRXhwID1cbiAgICAgIHNlc3Npb25TdGF0ZS5za2lsbHNfc2hvd19leHBlcmllbmNlXG4gICAgICA/PyBzZXNzaW9uU3RhdGU/LmN1c3RvbWl6YXRpb25zPy5za2lsbHNfc2hvd19leHBlcmllbmNlXG4gICAgICA/PyBjdXN0b21pemF0aW9uU3RhdGUuc2tpbGxzX3Nob3dfZXhwZXJpZW5jZVxuICAgICAgPz8gJ2luZGl2aWR1YWwnO1xuICAgIGNvbnN0IHZhbGlkID0gWydhbHdheXMnLCAnbmV2ZXInLCAnaW5kaXZpZHVhbCddO1xuICAgIHNraWxsc1Nob3dFeHBlcmllbmNlU2VsZWN0LnZhbHVlID0gdmFsaWQuaW5jbHVkZXMoc2F2ZWRTa2lsbHNFeHApID8gc2F2ZWRTa2lsbHNFeHAgOiAnaW5kaXZpZHVhbCc7XG4gIH1cblxuICByZW5kZXJQcmV2aWV3T3V0cHV0U3RhdHVzKGdldFByZXZpZXdPdXRwdXRzKCkpO1xuXG4gIC8vIExvYWQgYW5kIGRpc3BsYXkgY3VycmVudCBIVE1MIHByZXZpZXcgdmlhIHRoZSBzdGFnZWQgZ2VuZXJhdGlvbiBjb250cmFjdC5cbiAgLy8gL2FwaS9jdi9nZW5lcmF0ZS1wcmV2aWV3IGdlbmVyYXRlcyBmcmVzaCBIVE1MIGFuZCBzdG9yZXMgaXQgaW4gc2Vzc2lvbiBzdGF0ZS5cbiAgLy8gRmFsbCBiYWNrIHRvIHRoZSBsZWdhY3kgL2FwaS9sYXlvdXQtaHRtbCBlbmRwb2ludCBpZiB0aGUgc2Vzc2lvbiBoYXMgbm9cbiAgLy8gY3VzdG9taXphdGlvbiBkYXRhIHlldCAoZS5nLiBzZXNzaW9uIHJlc3RvcmVkIGFmdGVyIGZ1bGwgZ2VuZXJhdGlvbikuXG4gIGNvbnN0IGNhY2hlZEh0bWwgPSBnZXRDdkFydGlmYWN0cygpWycqLmh0bWwnXSB8fCAnJztcbiAgaWYgKGNhY2hlZEh0bWwpIHtcbiAgICBkaXNwbGF5TGF5b3V0UHJldmlldyhjYWNoZWRIdG1sKTtcbiAgfSBlbHNlIHtcbiAgICBfZmV0Y2hBbmREaXNwbGF5TGF5b3V0UHJldmlldygpO1xuICB9XG5cbiAgLy8gUmVzdG9yZSBhbnkgcHJpb3IgaW5zdHJ1Y3Rpb25zIGZyb20gc2Vzc2lvblxuICBhd2FpdCByZXN0b3JlSW5zdHJ1Y3Rpb25IaXN0b3J5KCk7XG4gIHJlZnJlc2hMYXlvdXRSZXZpZXdTdGF0ZSgpO1xuXG4gIC8vIFNob3cgYSBwcm9hY3RpdmUgcGFnZS1sZW5ndGggZXN0aW1hdGUgc28gdXNlcnMgY2FuIGFkanVzdCBjb250ZW50IGJlZm9yZSBnZW5lcmF0aW5nXG4gIF9mZXRjaFBhZ2VFc3RpbWF0ZSgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfZmV0Y2hQYWdlRXN0aW1hdGUoKSB7XG4gIGNvbnN0IGJhbm5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXlvdXQtcGFnZS1lc3RpbWF0ZScpO1xuICBpZiAoIWJhbm5lcikgcmV0dXJuO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL2VzdGltYXRlLXBhZ2VzJyk7XG4gICAgaWYgKCFyZXMub2spIHJldHVybjtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoIWRhdGEub2sgfHwgIWRhdGEuZXN0aW1hdGVkX3BhZ2VzKSByZXR1cm47XG4gICAgY29uc3QgcGFnZXMgPSBkYXRhLmVzdGltYXRlZF9wYWdlcztcbiAgICBjb25zdCBpc092ZXIgPSBwYWdlcyA+IDM7XG4gICAgY29uc3QgY29sb3IgPSBpc092ZXIgPyAnIzkyNDAwZScgOiAnIzE2NjUzNCc7XG4gICAgY29uc3QgYmcgICAgPSBpc092ZXIgPyAnI2ZlZjNjNycgOiAnI2YwZmRmNCc7XG4gICAgY29uc3QgYm9yZGVyID0gaXNPdmVyID8gJyNmY2QzNGQnIDogJyNiYmY3ZDAnO1xuICAgIGNvbnN0IG1zZyAgID0gaXNPdmVyXG4gICAgICA/IGBcdTI2QTAgRXN0aW1hdGVkIH4ke3BhZ2VzfSBwYWdlcyBcdTIwMTQgc2VuaW9yIGNhbmRpZGF0ZSB0YXJnZXQgaXMgMlx1MjAxMzMgcGFnZXMuIENvbnNpZGVyIHJlZHVjaW5nIHNlbGVjdGVkIGJ1bGxldCBwb2ludHMgYmVmb3JlIGdlbmVyYXRpbmcuYFxuICAgICAgOiBgXHUyNzEzIEVzdGltYXRlZCB+JHtwYWdlc30gcGFnZXMgXHUyMDE0IHdpdGhpbiB0aGUgMlx1MjAxMzMgcGFnZSB0YXJnZXQgZm9yIHNlbmlvciBjYW5kaWRhdGVzLmA7XG4gICAgYmFubmVyLnN0eWxlLmNzc1RleHQgPSBgZGlzcGxheTpibG9jaztwYWRkaW5nOjhweCAxMnB4O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoxcHggc29saWQgJHtib3JkZXJ9O2JhY2tncm91bmQ6JHtiZ307Y29sb3I6JHtjb2xvcn07Zm9udC1zaXplOjAuODdlbTtgO1xuICAgIGJhbm5lci50ZXh0Q29udGVudCA9IG1zZztcbiAgfSBjYXRjaCAoXykgeyAvKiBzaWxlbnQgXHUyMDE0IG5vbi1jcml0aWNhbCAqLyB9XG59XG5cbi8qKlxuICogU2V0IHVwIGV2ZW50IGxpc3RlbmVycyBmb3IgbGF5b3V0IGluc3RydWN0aW9uIFVJLlxuICovXG5mdW5jdGlvbiBzZXR1cExheW91dEluc3RydWN0aW9uTGlzdGVuZXJzKCkge1xuICBjb25zdCBhcHBseUJ0biAgICAgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHBseS1pbnN0cnVjdGlvbi1idG4nKTtcbiAgY29uc3QgY29uZmlybUJ0biAgICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uZmlybS1sYXlvdXQtYnRuJyk7XG4gIGNvbnN0IHByb2NlZWRCdG4gICAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2NlZWQtdG8tZmluYWxpc2UtYnRuJyk7XG4gIGNvbnN0IHJlZ2VuZXJhdGVCdG4gICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlZ2VuZXJhdGUtbGF5b3V0LXByZXZpZXctYnRuJyk7XG4gIGNvbnN0IGRpc21pc3NDYWxsb3V0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rpc21pc3MtbGF5b3V0LXN0YWxlLWJ0bicpO1xuICBjb25zdCBpbnN0cnVjdGlvbklucHV0ICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnN0cnVjdGlvbi1pbnB1dCcpO1xuICBjb25zdCBoaXN0b3J5VG9nZ2xlICAgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5oaXN0b3J5LXRvZ2dsZScpO1xuICBjb25zdCBhcHBseVNldHRpbmdzQnRuICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHBseS1sYXlvdXQtc2V0dGluZ3MtYnRuJyk7XG4gIGNvbnN0IGZvbnRTaXplSW5wdXQgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Jhc2UtZm9udC1zaXplLWlucHV0Jyk7XG4gIGNvbnN0IHBhZ2VNYXJnaW5JbnB1dCAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtbWFyZ2luLWlucHV0Jyk7XG4gIGNvbnN0IHB1YmxpY2F0aW9uc1N0YXJ0SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHVibGljYXRpb25zLXN0YXJ0LW5ldy1wYWdlLWlucHV0Jyk7XG4gIGNvbnN0IHNraWxsc1Nob3dFeHBlcmllbmNlU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxscy1zaG93LWV4cGVyaWVuY2Utc2VsZWN0Jyk7XG5cbiAgaWYgKGFwcGx5U2V0dGluZ3NCdG4gJiYgZm9udFNpemVJbnB1dCAmJiBwYWdlTWFyZ2luSW5wdXQgJiYgcHVibGljYXRpb25zU3RhcnRJbnB1dCkge1xuICAgIGFwcGx5U2V0dGluZ3NCdG4uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdjbGljaycsXG4gICAgICAoKSA9PiBhcHBseUxheW91dFNldHRpbmdzKFxuICAgICAgICBmb250U2l6ZUlucHV0LnZhbHVlLFxuICAgICAgICBwYWdlTWFyZ2luSW5wdXQudmFsdWUsXG4gICAgICAgIHB1YmxpY2F0aW9uc1N0YXJ0SW5wdXQuY2hlY2tlZCxcbiAgICAgICAgc2tpbGxzU2hvd0V4cGVyaWVuY2VTZWxlY3Q/LnZhbHVlIHx8ICdpbmRpdmlkdWFsJyxcbiAgICAgICksXG4gICAgKTtcbiAgICBmb250U2l6ZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcHREaXNwbGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZvbnQtc2l6ZS1wdC1kaXNwbGF5Jyk7XG4gICAgICBpZiAocHREaXNwbGF5KSB7XG4gICAgICAgIGNvbnN0IHB4ID0gcGFyc2VGbG9hdChmb250U2l6ZUlucHV0LnZhbHVlKTtcbiAgICAgICAgcHREaXNwbGF5LnRleHRDb250ZW50ID0gaXNOYU4ocHgpID8gJ3B4JyA6IGBweFxcdTAwYTAoJHtweFRvUHQocHgpfVxcdTAwYTBwdClgO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvbnRTaXplSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCAoZSkgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGFwcGx5TGF5b3V0U2V0dGluZ3MoXG4gICAgICAgICAgZm9udFNpemVJbnB1dC52YWx1ZSxcbiAgICAgICAgICBwYWdlTWFyZ2luSW5wdXQudmFsdWUsXG4gICAgICAgICAgcHVibGljYXRpb25zU3RhcnRJbnB1dC5jaGVja2VkLFxuICAgICAgICAgIHNraWxsc1Nob3dFeHBlcmllbmNlU2VsZWN0Py52YWx1ZSB8fCAnaW5kaXZpZHVhbCcsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcGFnZU1hcmdpbklucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgKGUpID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICBhcHBseUxheW91dFNldHRpbmdzKFxuICAgICAgICAgIGZvbnRTaXplSW5wdXQudmFsdWUsXG4gICAgICAgICAgcGFnZU1hcmdpbklucHV0LnZhbHVlLFxuICAgICAgICAgIHB1YmxpY2F0aW9uc1N0YXJ0SW5wdXQuY2hlY2tlZCxcbiAgICAgICAgICBza2lsbHNTaG93RXhwZXJpZW5jZVNlbGVjdD8udmFsdWUgfHwgJ2luZGl2aWR1YWwnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGFwcGx5QnRuKSB7XG4gICAgYXBwbHlCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uSW5wdXQudmFsdWUudHJpbSgpO1xuICAgICAgaWYgKCFpbnN0cnVjdGlvbikge1xuICAgICAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHUyNkEwXHVGRTBGIFBsZWFzZSBlbnRlciBhbiBpbnN0cnVjdGlvbiBiZWZvcmUgc3VibWl0dGluZy4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3VibWl0U21hcnRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoY29uZmlybUJ0bikge1xuICAgIGNvbmZpcm1CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjb25maXJtTGF5b3V0UmV2aWV3KTtcbiAgfVxuXG4gIGlmIChwcm9jZWVkQnRuKSB7XG4gICAgcHJvY2VlZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGdlbmVyYXRlRmluYWxPdXRwdXRzKTtcbiAgfVxuXG4gIGlmIChyZWdlbmVyYXRlQnRuKSB7XG4gICAgcmVnZW5lcmF0ZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZVJlZ2VuZXJhdGVQcmV2aWV3QWN0aW9uKTtcbiAgfVxuXG4gIGlmIChkaXNtaXNzQ2FsbG91dEJ0bikge1xuICAgIGRpc21pc3NDYWxsb3V0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgZGlzbWlzc2VkU3RhbGVDYWxsb3V0UmV2aXNpb24gPSBnZXRDdXJyZW50Q29udGVudFJldmlzaW9uKCk7XG4gICAgICByZW5kZXJMYXlvdXRTdGFsZUNhbGxvdXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoaXN0b3J5VG9nZ2xlKSB7XG4gICAgaGlzdG9yeVRvZ2dsZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICBlLnRhcmdldC50ZXh0Q29udGVudCA9IGUudGFyZ2V0LnRleHRDb250ZW50ID09PSAnXHUyNUJDJyA/ICdcdTI1QjYnIDogJ1x1MjVCQyc7XG4gICAgICBjb25zdCBoaXN0b3J5TGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnN0cnVjdGlvbi1oaXN0b3J5Jyk7XG4gICAgICBpZiAoaGlzdG9yeUxpc3QpIHtcbiAgICAgICAgaGlzdG9yeUxpc3QuY2xhc3NMaXN0LnRvZ2dsZSgnY29sbGFwc2VkJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBBbGxvdyBFbnRlciBrZXkgdG8gc3VibWl0IGluIHRleHRhcmVhIChTaGlmdCtFbnRlciBmb3IgbmV3IGxpbmUpXG4gIGlmIChpbnN0cnVjdGlvbklucHV0KSB7XG4gICAgaW5zdHJ1Y3Rpb25JbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIChlKSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBhcHBseUJ0bj8uY2xpY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIENvbnRlbnQgcHJvcG9zYWwgYW5kIGRpcnR5LXBoYXNlIGJ1dHRvbnNcbiAgY29uc3QgYXBwbHlDb250ZW50Q2hhbmdlc0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHBseS1jb250ZW50LWNoYW5nZXMtYnRuJyk7XG4gIGNvbnN0IHJldHVyblRvRGlydHlCdG4gICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmV0dXJuLXRvLWVhcmxpZXN0LWRpcnR5LWJ0bicpO1xuXG4gIGlmIChhcHBseUNvbnRlbnRDaGFuZ2VzQnRuKSB7XG4gICAgYXBwbHlDb250ZW50Q2hhbmdlc0J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFwcGx5QWNjZXB0ZWRQcm9wb3NhbHMpO1xuICB9XG5cbiAgaWYgKHJldHVyblRvRGlydHlCdG4pIHtcbiAgICByZXR1cm5Ub0RpcnR5QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RlcCA9IHN0YXRlTWFuYWdlci5nZXRFYXJsaWVzdERpcnR5U3RlcCgpIHx8ICdnZW5lcmF0ZSc7XG4gICAgICBjb25maXJtUmVSdW5QaGFzZShzdGVwKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFNhdmUgbGF5b3V0IGRpc3BsYXkgc2V0dGluZ3MgdG8gc2Vzc2lvbiBzdGF0ZSwgdGhlbiByZS1yZW5kZXIgdGhlIHByZXZpZXcuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5TGF5b3V0U2V0dGluZ3MoZm9udFNpemVWYWx1ZSwgcGFnZU1hcmdpblZhbHVlLCBwdWJsaWNhdGlvbnNTdGFydE5ld1BhZ2UgPSBmYWxzZSwgc2tpbGxzU2hvd0V4cGVyaWVuY2UgPSAnaW5kaXZpZHVhbCcpIHtcbiAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5b3V0LXNldHRpbmdzLXN0YXR1cycpO1xuICBjb25zdCBwYXJzZWRGb250U2l6ZSA9IHBhcnNlRmxvYXQoZm9udFNpemVWYWx1ZSk7XG4gIGNvbnN0IHBhcnNlZFBhZ2VNYXJnaW4gPSBwYXJzZUZsb2F0KHBhZ2VNYXJnaW5WYWx1ZSk7XG4gIGlmIChpc05hTihwYXJzZWRGb250U2l6ZSkgfHwgcGFyc2VkRm9udFNpemUgPCA2IHx8IHBhcnNlZEZvbnRTaXplID4gMTYpIHtcbiAgICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ1x1MjZBMFx1RkUwRiBGb250IG11c3QgYmUgNlx1MjAxMzE2JztcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGlzTmFOKHBhcnNlZFBhZ2VNYXJnaW4pIHx8IHBhcnNlZFBhZ2VNYXJnaW4gPCAwLjUgfHwgcGFyc2VkUGFnZU1hcmdpbiA+IDEuNSkge1xuICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnXHUyNkEwXHVGRTBGIE1hcmdpbiBtdXN0IGJlIDAuNVx1MjAxMzEuNSc7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdTYXZpbmdcdTIwMjYnO1xuICAgIGNvbnN0IHNhdmVSZXMgPSBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvbGF5b3V0LXNldHRpbmdzJywge1xuICAgICAgYmFzZV9mb250X3NpemU6IGAke3BhcnNlZEZvbnRTaXplfXB4YCxcbiAgICAgIHBhZ2VfbWFyZ2luOiBgJHtwYXJzZWRQYWdlTWFyZ2lufWluYCxcbiAgICAgIHB1YmxpY2F0aW9uc19zdGFydF9uZXdfcGFnZTogQm9vbGVhbihwdWJsaWNhdGlvbnNTdGFydE5ld1BhZ2UpLFxuICAgICAgc2tpbGxzX3Nob3dfZXhwZXJpZW5jZTogc2tpbGxzU2hvd0V4cGVyaWVuY2UsXG4gICAgfSk7XG4gICAgaWYgKCFzYXZlUmVzLm9rKSB0aHJvdyBuZXcgRXJyb3Ioc2F2ZVJlcy5lcnJvciB8fCAnc2F2ZSBmYWlsZWQnKTtcblxuICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnUmUtcmVuZGVyaW5nXHUyMDI2JztcbiAgICBjb25zdCBwcmV2aWV3UmVzID0gYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL2N2L2dlbmVyYXRlLXByZXZpZXcnLCB7IGNvbnRlbnRfcmV2aXNpb246IGdldEN1cnJlbnRDb250ZW50UmV2aXNpb24oKSB9KTtcbiAgICBpZiAocHJldmlld1Jlcy5vayAmJiBwcmV2aWV3UmVzLmh0bWwpIHtcbiAgICAgIGRpc3BsYXlMYXlvdXRQcmV2aWV3KHByZXZpZXdSZXMuaHRtbCk7XG4gICAgICBzZXRQcmV2aWV3SHRtbChwcmV2aWV3UmVzLmh0bWwpO1xuICAgICAgZGlzbWlzc2VkU3RhbGVDYWxsb3V0UmV2aXNpb24gPSBudWxsO1xuICAgICAgc3RhdGVNYW5hZ2VyPy5tYXJrUHJldmlld0dlbmVyYXRlZD8uKHtcbiAgICAgICAgcHJldmlld0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgcHJldmlld091dHB1dHM6IHByZXZpZXdSZXMucHJldmlld19vdXRwdXRzIHx8IG51bGwsXG4gICAgICAgIHBhZ2VDb3VudEVzdGltYXRlOiBwcmV2aWV3UmVzLnBhZ2VfY291bnRfZXN0aW1hdGUgPz8gbnVsbCxcbiAgICAgICAgcGFnZUNvdW50RXhhY3Q6IHByZXZpZXdSZXMucGFnZV9jb3VudF9leGFjdCA/PyBudWxsLFxuICAgICAgICBwYWdlQ291bnRDb25maWRlbmNlOiBwcmV2aWV3UmVzLnBhZ2VfY291bnRfY29uZmlkZW5jZSA/PyBudWxsLFxuICAgICAgICBwYWdlQ291bnRTb3VyY2U6IHByZXZpZXdSZXMucGFnZV9jb3VudF9zb3VyY2UgfHwgbnVsbCxcbiAgICAgICAgcGFnZVdhcm5pbmc6IEJvb2xlYW4ocHJldmlld1Jlcy5wYWdlX2xlbmd0aF93YXJuaW5nKSxcbiAgICAgICAgcHJldmlld0dlbmVyYXRlZEF0OiBwcmV2aWV3UmVzLnByZXZpZXdfZ2VuZXJhdGVkX2F0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgcHJldmlld1JlcXVlc3RJZDogcHJldmlld1Jlcy5wcmV2aWV3X3JlcXVlc3RfaWQgfHwgbnVsbCxcbiAgICAgIH0pO1xuICAgICAgcmVuZGVyUHJldmlld091dHB1dFN0YXR1cyhwcmV2aWV3UmVzLnByZXZpZXdfb3V0cHV0cyB8fCBudWxsKTtcbiAgICAgIHJlZnJlc2hMYXlvdXRSZXZpZXdTdGF0ZSgpO1xuICAgICAgKHByZXZpZXdSZXMuY29udGVudF93YXJuaW5ncyB8fCBbXSkuZm9yRWFjaCh3ID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHNob3dUb2FzdCh3Lm1lc3NhZ2UsICd3YXJuaW5nJywgODAwMCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHN0YXR1c0VsKSB7IHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ1x1MjcwNSBBcHBsaWVkJzsgc2V0VGltZW91dCgoKSA9PiB7IHN0YXR1c0VsLnRleHRDb250ZW50ID0gJyc7IH0sIDIwMDApOyB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSBgXHUyNzRDIEZhaWxlZCB0byBhcHBseSBcdTIwMTQgdHJ5IGFnYWluIG9yIHJlZnJlc2guYDtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHUyNzRDIENvdWxkIG5vdCBhcHBseSB0aGUgaW5zdHJ1Y3Rpb24uIFRyeSByZXBocmFzaW5nIGl0IG9yIHJlZnJlc2ggdGhlIHBhZ2UgaWYgdGhlIHByb2JsZW0gcGVyc2lzdHMuYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdWJtaXQgYW4gaW5zdHJ1Y3Rpb24gdGhyb3VnaCB0aGUgdW5pZmllZCBzbWFydC1pbnN0cnVjdGlvbiBlbmRwb2ludC5cbiAqIFRoZSBiYWNrZW5kIGNsYXNzaWZpZXMgdGhlIGluc3RydWN0aW9uIGFzIGxheW91dCBvciBjb250ZW50IGFuZCBkZWxlZ2F0ZXNcbiAqIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyLiBUaGUgcmVzcG9uc2UgaXMgcm91dGVkIGFjY29yZGluZ2x5IGhlcmUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFNtYXJ0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25UZXh0KSB7XG4gIGNvbnN0IGN1cnJlbnRIdG1sID0gZ2V0Q3ZBcnRpZmFjdHMoKVsnKi5odG1sJ10gfHwgJyc7XG4gIC8vIFNuYXBzaG90IHN0YXRlIGZvciB1bmRvIGJlZm9yZSBhcHBseWluZy5cbiAgX2xheW91dFVuZG9TdGFjay5wdXNoKHtcbiAgICBodG1sOiBjdXJyZW50SHRtbCxcbiAgICBpbnN0cnVjdGlvbnM6ICh3aW5kb3cubGF5b3V0SW5zdHJ1Y3Rpb25zIHx8IFtdKS5tYXAoaSA9PiAoeyAuLi5pIH0pKSxcbiAgfSk7XG4gIGlmIChfbGF5b3V0VW5kb1N0YWNrLmxlbmd0aCA+IF9VTkRPX1NUQUNLX01BWCkge1xuICAgIF9sYXlvdXRVbmRvU3RhY2suc2hpZnQoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgc2hvd1Byb2Nlc3NpbmcodHJ1ZSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvY3Yvc21hcnQtaW5zdHJ1Y3Rpb24nLCB7IGluc3RydWN0aW9uOiBpbnN0cnVjdGlvblRleHQgfSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBpZiAocmVzcG9uc2UuZXJyb3IgPT09ICdjbGFyaWZ5Jykge1xuICAgICAgICBzaG93Q2xhcmlmaWNhdGlvbkRpYWxvZyhyZXNwb25zZS5xdWVzdGlvbiwgaW5zdHJ1Y3Rpb25UZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwcGVuZExheW91dFNhZmV0eUFsZXJ0KHJlc3BvbnNlLnNhZmV0eV9hbGVydCk7XG4gICAgICAgIGxldCBlcnJvckh0bWwgPSBgXHUyNkEwXHVGRTBGIEVycm9yOiAke2VzY2FwZUh0bWwocmVzcG9uc2UuZXJyb3IpfSBcdTIwMTQgJHtlc2NhcGVIdG1sKHJlc3BvbnNlLmRldGFpbHMgfHwgJycpfWA7XG4gICAgICAgIGlmIChyZXNwb25zZS5yYXdfcmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVycm9ySHRtbCArPSBgPGJyPjxkZXRhaWxzIHN0eWxlPVwibWFyZ2luLXRvcDo2cHhcIj48c3VtbWFyeSBzdHlsZT1cImN1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzY0NzQ4YlwiPlJhdyBMTE0gcmVzcG9uc2U8L3N1bW1hcnk+PHByZSBzdHlsZT1cImZvbnQtc2l6ZTowLjc1ZW07d2hpdGUtc3BhY2U6cHJlLXdyYXA7d29yZC1icmVhazpicmVhay1hbGw7bWF4LWhlaWdodDoyMDBweDtvdmVyZmxvdy15OmF1dG87YmFja2dyb3VuZDojZjhmYWZjO2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjhweDttYXJnaW4tdG9wOjRweFwiPiR7ZXNjYXBlSHRtbChyZXNwb25zZS5yYXdfcmVzcG9uc2UgfHwgJyhlbXB0eSknKX08L3ByZT48L2RldGFpbHM+YDtcbiAgICAgICAgfVxuICAgICAgICBhcHBlbmRNZXNzYWdlSHRtbCgnc3lzdGVtJywgZXJyb3JIdG1sKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnN0cnVjdGlvblR5cGUgPSByZXNwb25zZS5pbnN0cnVjdGlvbl90eXBlIHx8ICdsYXlvdXQnO1xuXG4gICAgaWYgKGluc3RydWN0aW9uVHlwZSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICAvLyBDb250ZW50IHBhdGg6IHJlbmRlciBwcm9wb3NhbHMgZm9yIHJldmlld1xuICAgICAgY29uc3QgcHJvcG9zYWxzID0gcmVzcG9uc2UucHJvcG9zYWxzIHx8IFtdO1xuICAgICAgaWYgKHByb3Bvc2Fscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgJ1x1MjZBMFx1RkUwRiBObyBjb250ZW50IHByb3Bvc2FscyB3ZXJlIGdlbmVyYXRlZC4gVHJ5IHJlcGhyYXNpbmcgeW91ciBpbnN0cnVjdGlvbi4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlckNvbnRlbnRQcm9wb3NhbHMocHJvcG9zYWxzKTtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudC1wcm9wb3NhbHMtcGFuZWwnKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnN0cnVjdGlvbi1pbnB1dCcpLnZhbHVlID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTGF5b3V0IHBhdGg6IHVwZGF0ZSBwcmV2aWV3XG4gICAgY29uc3QgbmV3SHRtbCA9IHJlc3BvbnNlLmh0bWw7XG4gICAgZGlzcGxheUxheW91dFByZXZpZXcobmV3SHRtbCk7XG4gICAgYXBwZW5kTGF5b3V0U2FmZXR5QWxlcnQocmVzcG9uc2Uuc2FmZXR5X2FsZXJ0KTtcbiAgICBzZXRQcmV2aWV3SHRtbChuZXdIdG1sKTtcbiAgICBkaXNtaXNzZWRTdGFsZUNhbGxvdXRSZXZpc2lvbiA9IG51bGw7XG4gICAgc3RhdGVNYW5hZ2VyPy5tYXJrUHJldmlld0dlbmVyYXRlZD8uKHtcbiAgICAgIHByZXZpZXdBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcmV2aWV3T3V0cHV0czogcmVzcG9uc2UucHJldmlld19vdXRwdXRzIHx8IG51bGwsXG4gICAgICBsYXlvdXRDb25maXJtZWQ6IGZhbHNlLFxuICAgICAgcGFnZUNvdW50RXN0aW1hdGU6IHJlc3BvbnNlLnBhZ2VfY291bnRfZXN0aW1hdGUgPz8gbnVsbCxcbiAgICAgIHBhZ2VDb3VudEV4YWN0OiByZXNwb25zZS5wYWdlX2NvdW50X2V4YWN0ID8/IG51bGwsXG4gICAgICBwYWdlQ291bnRDb25maWRlbmNlOiByZXNwb25zZS5wYWdlX2NvdW50X2NvbmZpZGVuY2UgPz8gbnVsbCxcbiAgICAgIHBhZ2VDb3VudFNvdXJjZTogcmVzcG9uc2UucGFnZV9jb3VudF9zb3VyY2UgfHwgbnVsbCxcbiAgICAgIHBhZ2VXYXJuaW5nOiBCb29sZWFuKHJlc3BvbnNlLnBhZ2VfbGVuZ3RoX3dhcm5pbmcpLFxuICAgICAgcHJldmlld0dlbmVyYXRlZEF0OiByZXNwb25zZS5wcmV2aWV3X2dlbmVyYXRlZF9hdCB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBwcmV2aWV3UmVxdWVzdElkOiByZXNwb25zZS5wcmV2aWV3X3JlcXVlc3RfaWQgfHwgbnVsbCxcbiAgICB9KTtcbiAgICByZW5kZXJQcmV2aWV3T3V0cHV0U3RhdHVzKHJlc3BvbnNlLnByZXZpZXdfb3V0cHV0cyB8fCBudWxsKTtcblxuICAgIGNvbnN0IGluc3RydWN0aW9uID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0cmluZygpLFxuICAgICAgaW5zdHJ1Y3Rpb25fdGV4dDogaW5zdHJ1Y3Rpb25UZXh0LFxuICAgICAgY2hhbmdlX3N1bW1hcnk6IHJlc3BvbnNlLnN1bW1hcnksXG4gICAgICBjb25maXJtYXRpb246IHRydWUsXG4gICAgfTtcbiAgICBhZGRUb0luc3RydWN0aW9uSGlzdG9yeShpbnN0cnVjdGlvbik7XG4gICAgc2hvd0NvbmZpcm1hdGlvbk1lc3NhZ2UoYCR7cmVzcG9uc2Uuc2FmZXR5X2FsZXJ0Py5mbGFnZ2VkID8gJ1x1MjZBMFx1RkUwRiAnIDogJ1x1MjcwNSAnfSR7cmVzcG9uc2Uuc3VtbWFyeX1gKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5zdHJ1Y3Rpb24taW5wdXQnKS52YWx1ZSA9ICcnO1xuICAgIHJlZnJlc2hMYXlvdXRSZXZpZXdTdGF0ZSgpO1xuXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgYFx1Mjc0QyBDb3VsZCBub3QgYXBwbHkgdGhlIGluc3RydWN0aW9uLiBUcnkgcmVwaHJhc2luZyBpdCwgb3IgY2xpY2sgXCJSZWdlbmVyYXRlIFByZXZpZXdcIiB0byByZXNldCB0aGUgcHJldmlldyBhbmQgdHJ5IGFnYWluLmApO1xuICB9IGZpbmFsbHkge1xuICAgIHNob3dQcm9jZXNzaW5nKGZhbHNlKTtcbiAgfVxufVxuXG4vKipcbiAqIFN1Ym1pdCBsYXlvdXQgaW5zdHJ1Y3Rpb24gdG8gYmFja2VuZCBmb3IgcHJvY2Vzc2luZy5cbiAqXG4gKiBVc2VzIFBPU1QgL2FwaS9jdi9sYXlvdXQtcmVmaW5lIChzdGFnZWQgZ2VuZXJhdGlvbiBjb250cmFjdCkgd2hlbiBhXG4gKiBzZXNzaW9uLXN0b3JlZCBwcmV2aWV3IGlzIGF2YWlsYWJsZS4gIEZhbGxzIGJhY2sgdG8gdGhlIGxlZ2FjeVxuICogUE9TVCAvYXBpL2xheW91dC1pbnN0cnVjdGlvbiBlbmRwb2ludCAod2hpY2ggcmVxdWlyZXMgdGhlIEhUTUwgaW4gdGhlXG4gKiByZXF1ZXN0IGJvZHkpIHdoZW4gbm8gc2Vzc2lvbiBwcmV2aWV3IGV4aXN0cy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3VibWl0TGF5b3V0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25UZXh0KSB7XG4gIC8qIGR1Y2tmbG93OlxuICAgKiAgIGlkOiBsYXlvdXRfdWlfcmVmaW5lX2xpdmVcbiAgICogICBraW5kOiB1aVxuICAgKiAgIHRpbWVzdGFtcDogJzIwMjYtMDMtMjZUMDA6MjQ6MDBaJ1xuICAgKiAgIHN0YXR1czogbGl2ZVxuICAgKiAgIGhhbmRsZXM6XG4gICAqICAgLSB1aTpsYXlvdXQuc3VibWl0LWluc3RydWN0aW9uXG4gICAqICAgY2FsbHM6XG4gICAqICAgLSBQT1NUIC9hcGkvY3YvbGF5b3V0LXJlZmluZVxuICAgKiAgIC0gUE9TVCAvYXBpL2xheW91dC1pbnN0cnVjdGlvblxuICAgKiAgIHJlYWRzOlxuICAgKiAgIC0gZG9tOiNpbnN0cnVjdGlvbi1pbnB1dC52YWx1ZVxuICAgKiAgIC0gc3RhdGU6Z2VuZXJhdGlvbl9zdGF0ZS5wcmV2aWV3QXZhaWxhYmxlXG4gICAqICAgLSBzdGF0ZTpnZW5lcmF0aW9uX3N0YXRlLnBoYXNlXG4gICAqICAgLSB3aW5kb3c6bGF5b3V0SW5zdHJ1Y3Rpb25zXG4gICAqICAgd3JpdGVzOlxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvY3YvbGF5b3V0LXJlZmluZS5pbnN0cnVjdGlvblxuICAgKiAgIC0gZG9tOiNsYXlvdXQtcHJldmlld1xuICAgKiAgIC0gd2luZG93OmxheW91dEluc3RydWN0aW9uc1xuICAgKiAgIC0gc3RhdGU6Z2VuZXJhdGlvbl9zdGF0ZS5wcmV2aWV3X291dHB1dHNcbiAgICogICBub3RlczogU3VibWl0cyBhIG5hdHVyYWwtbGFuZ3VhZ2UgbGF5b3V0IGluc3RydWN0aW9uIGFnYWluc3QgdGhlIHN0YWdlZCBwcmV2aWV3IHdoZW4gYXZhaWxhYmxlLCB0aGVuIHJlZnJlc2hlcyB0aGUgcHJldmlldyBhbmQgbG9jYWwgaW5zdHJ1Y3Rpb24gaGlzdG9yeSBmcm9tIHRoZSByZXR1cm5lZCBIVE1MLlxuICAgKi9cbiAgY29uc3QgY3VycmVudEh0bWwgPSBnZXRDdkFydGlmYWN0cygpWycqLmh0bWwnXSB8fCAnJztcbiAgY29uc3QgcHJpb3JJbnN0cnVjdGlvbnMgPSB3aW5kb3cubGF5b3V0SW5zdHJ1Y3Rpb25zIHx8IFtdO1xuXG4gIC8vIFNuYXBzaG90IHN0YXRlIGJlZm9yZSBhcHBseWluZyBzbyBVbmRvIGNhbiByZXN0b3JlIGl0LlxuICBfbGF5b3V0VW5kb1N0YWNrLnB1c2goe1xuICAgIGh0bWw6IGN1cnJlbnRIdG1sLFxuICAgIGluc3RydWN0aW9uczogKHdpbmRvdy5sYXlvdXRJbnN0cnVjdGlvbnMgfHwgW10pLm1hcChpID0+ICh7IC4uLmkgfSkpLFxuICB9KTtcbiAgaWYgKF9sYXlvdXRVbmRvU3RhY2subGVuZ3RoID4gX1VORE9fU1RBQ0tfTUFYKSB7XG4gICAgX2xheW91dFVuZG9TdGFjay5zaGlmdCgpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBzaG93UHJvY2Vzc2luZyh0cnVlKTtcblxuICAgIC8vIFByZWZlciB0aGUgc2Vzc2lvbi1iYWNrZWQgZW5kcG9pbnQ7IGl0IG1hbmFnZXMgSFRNTCBzZXJ2ZXItc2lkZS5cbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgY29uc3QgZ2VuU3RhdGUgPSBzdGF0ZU1hbmFnZXI/LmdldEdlbmVyYXRpb25TdGF0ZT8uKCkgfHwge307XG4gICAgY29uc3QgdXNlU2Vzc2lvbkVuZHBvaW50ID0gZ2VuU3RhdGUucHJldmlld0F2YWlsYWJsZSB8fCBnZW5TdGF0ZS5waGFzZSA9PT0gJ2xheW91dF9yZXZpZXcnO1xuXG4gICAgaWYgKHVzZVNlc3Npb25FbmRwb2ludCkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvY3YvbGF5b3V0LXJlZmluZScsIHtcbiAgICAgICAgaW5zdHJ1Y3Rpb246IGluc3RydWN0aW9uVGV4dCxcbiAgICAgICAgY29udGVudF9yZXZpc2lvbjogZ2V0Q3VycmVudENvbnRlbnRSZXZpc2lvbigpLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL2xheW91dC1pbnN0cnVjdGlvbicsIHtcbiAgICAgICAgaW5zdHJ1Y3Rpb246IGluc3RydWN0aW9uVGV4dCxcbiAgICAgICAgY3VycmVudF9odG1sOiBjdXJyZW50SHRtbCxcbiAgICAgICAgcHJpb3JfaW5zdHJ1Y3Rpb25zOiBwcmlvckluc3RydWN0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGlmIChyZXNwb25zZS5lcnJvciA9PT0gJ2NsYXJpZnknKSB7XG4gICAgICAgIHNob3dDbGFyaWZpY2F0aW9uRGlhbG9nKHJlc3BvbnNlLnF1ZXN0aW9uLCBpbnN0cnVjdGlvblRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXBwZW5kTGF5b3V0U2FmZXR5QWxlcnQocmVzcG9uc2Uuc2FmZXR5X2FsZXJ0KTtcbiAgICAgICAgbGV0IGVycm9ySHRtbCA9IGBcdTI2QTBcdUZFMEYgRXJyb3I6ICR7ZXNjYXBlSHRtbChyZXNwb25zZS5lcnJvcil9IFx1MjAxNCAke2VzY2FwZUh0bWwocmVzcG9uc2UuZGV0YWlscyB8fCAnJyl9YDtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJhd19yZXNwb25zZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXJyb3JIdG1sICs9IGA8YnI+PGRldGFpbHMgc3R5bGU9XCJtYXJnaW4tdG9wOjZweFwiPjxzdW1tYXJ5IHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjAuODVlbTtjb2xvcjojNjQ3NDhiXCI+UmF3IExMTSByZXNwb25zZTwvc3VtbWFyeT48cHJlIHN0eWxlPVwiZm9udC1zaXplOjAuNzVlbTt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3b3JkLWJyZWFrOmJyZWFrLWFsbDttYXgtaGVpZ2h0OjIwMHB4O292ZXJmbG93LXk6YXV0bztiYWNrZ3JvdW5kOiNmOGZhZmM7Ym9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6OHB4O21hcmdpbi10b3A6NHB4XCI+JHtlc2NhcGVIdG1sKHJlc3BvbnNlLnJhd19yZXNwb25zZSB8fCAnKGVtcHR5KScpfTwvcHJlPjwvZGV0YWlscz5gO1xuICAgICAgICB9XG4gICAgICAgIGFwcGVuZE1lc3NhZ2VIdG1sKCdzeXN0ZW0nLCBlcnJvckh0bWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBwcmV2aWV3IHdpdGggbmV3IEhUTUxcbiAgICBjb25zdCBuZXdIdG1sID0gcmVzcG9uc2UuaHRtbDtcbiAgICBkaXNwbGF5TGF5b3V0UHJldmlldyhuZXdIdG1sKTtcblxuICAgIGFwcGVuZExheW91dFNhZmV0eUFsZXJ0KHJlc3BvbnNlLnNhZmV0eV9hbGVydCk7XG5cbiAgICAvLyBVcGRhdGUgc3RhdGVcbiAgICBzZXRQcmV2aWV3SHRtbChuZXdIdG1sKTtcbiAgICBkaXNtaXNzZWRTdGFsZUNhbGxvdXRSZXZpc2lvbiA9IG51bGw7XG4gICAgc3RhdGVNYW5hZ2VyPy5tYXJrUHJldmlld0dlbmVyYXRlZD8uKHtcbiAgICAgIHByZXZpZXdBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcmV2aWV3T3V0cHV0czogcmVzcG9uc2UucHJldmlld19vdXRwdXRzIHx8IG51bGwsXG4gICAgICBsYXlvdXRDb25maXJtZWQ6IGZhbHNlLFxuICAgICAgcGFnZUNvdW50RXN0aW1hdGU6IHJlc3BvbnNlLnBhZ2VfY291bnRfZXN0aW1hdGUgPz8gbnVsbCxcbiAgICAgIHBhZ2VDb3VudEV4YWN0OiByZXNwb25zZS5wYWdlX2NvdW50X2V4YWN0ID8/IG51bGwsXG4gICAgICBwYWdlQ291bnRDb25maWRlbmNlOiByZXNwb25zZS5wYWdlX2NvdW50X2NvbmZpZGVuY2UgPz8gbnVsbCxcbiAgICAgIHBhZ2VDb3VudFNvdXJjZTogcmVzcG9uc2UucGFnZV9jb3VudF9zb3VyY2UgfHwgbnVsbCxcbiAgICAgIHBhZ2VXYXJuaW5nOiBCb29sZWFuKHJlc3BvbnNlLnBhZ2VfbGVuZ3RoX3dhcm5pbmcpLFxuICAgICAgcHJldmlld0dlbmVyYXRlZEF0OiByZXNwb25zZS5wcmV2aWV3X2dlbmVyYXRlZF9hdCB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBwcmV2aWV3UmVxdWVzdElkOiByZXNwb25zZS5wcmV2aWV3X3JlcXVlc3RfaWQgfHwgbnVsbCxcbiAgICB9KTtcbiAgICByZW5kZXJQcmV2aWV3T3V0cHV0U3RhdHVzKHJlc3BvbnNlLnByZXZpZXdfb3V0cHV0cyB8fCBudWxsKTtcblxuICAgIC8vIEFkZCB0byBpbnN0cnVjdGlvbiBoaXN0b3J5XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9Mb2NhbGVUaW1lU3RyaW5nKCksXG4gICAgICBpbnN0cnVjdGlvbl90ZXh0OiBpbnN0cnVjdGlvblRleHQsXG4gICAgICBjaGFuZ2Vfc3VtbWFyeTogcmVzcG9uc2Uuc3VtbWFyeSxcbiAgICAgIGNvbmZpcm1hdGlvbjogdHJ1ZVxuICAgIH07XG4gICAgYWRkVG9JbnN0cnVjdGlvbkhpc3RvcnkoaW5zdHJ1Y3Rpb24pO1xuXG4gICAgLy8gU2hvdyBjb25maXJtYXRpb25cbiAgICBzaG93Q29uZmlybWF0aW9uTWVzc2FnZShgJHtyZXNwb25zZS5zYWZldHlfYWxlcnQ/LmZsYWdnZWQgPyAnXHUyNkEwXHVGRTBGICcgOiAnXHUyNzA1ICd9JHtyZXNwb25zZS5zdW1tYXJ5fWApO1xuXG4gICAgLy8gQ2xlYXIgaW5wdXQgYW5kIHJlZnJlc2ggdGhlIHN0YWdlZCBjb250cm9scy5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5zdHJ1Y3Rpb24taW5wdXQnKS52YWx1ZSA9ICcnO1xuICAgIHJlZnJlc2hMYXlvdXRSZXZpZXdTdGF0ZSgpO1xuXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgYFx1Mjc0QyBDb3VsZCBub3QgYXBwbHkgdGhlIGxheW91dCBpbnN0cnVjdGlvbi4gVHJ5IHJlcGhyYXNpbmcgaXQsIG9yIGNsaWNrIFwiUmVnZW5lcmF0ZSBQcmV2aWV3XCIgdG8gcmVzZXQgYW5kIHRyeSBhZ2Fpbi5gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzaG93UHJvY2Vzc2luZyhmYWxzZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgbWFya1ByZXZpZXdHZW5lcmF0ZWQgcGF5bG9hZCBmcm9tIGEgL2FwaS9jdi9nZW5lcmF0ZS1wcmV2aWV3IHJlc3BvbnNlLlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBSZXNwb25zZSBmcm9tIHRoZSBnZW5lcmF0ZS1wcmV2aWV3IGVuZHBvaW50LlxuICogQHJldHVybnMge09iamVjdH0gUGF5bG9hZCBzdWl0YWJsZSBmb3Igc3RhdGVNYW5hZ2VyLm1hcmtQcmV2aWV3R2VuZXJhdGVkKCkuXG4gKi9cbmZ1bmN0aW9uIF9idWlsZFByZXZpZXdQYXlsb2FkKGRhdGEpIHtcbiAgcmV0dXJuIHtcbiAgICBwcmV2aWV3QXZhaWxhYmxlOiAgICB0cnVlLFxuICAgIHByZXZpZXdPdXRwdXRzOiAgICAgIGRhdGEucHJldmlld19vdXRwdXRzICAgICAgfHwgbnVsbCxcbiAgICBwYWdlQ291bnRFc3RpbWF0ZTogICBkYXRhLnBhZ2VfY291bnRfZXN0aW1hdGUgID8/IG51bGwsXG4gICAgcGFnZUNvdW50RXhhY3Q6ICAgICAgZGF0YS5wYWdlX2NvdW50X2V4YWN0ICAgICAgPz8gbnVsbCxcbiAgICBwYWdlQ291bnRDb25maWRlbmNlOiBkYXRhLnBhZ2VfY291bnRfY29uZmlkZW5jZSA/PyBudWxsLFxuICAgIHBhZ2VDb3VudFNvdXJjZTogICAgIGRhdGEucGFnZV9jb3VudF9zb3VyY2UgICAgIHx8IG51bGwsXG4gICAgcGFnZVdhcm5pbmc6ICAgICAgICAgQm9vbGVhbihkYXRhLnBhZ2VfbGVuZ3RoX3dhcm5pbmcpLFxuICAgIHByZXZpZXdHZW5lcmF0ZWRBdDogIGRhdGEucHJldmlld19nZW5lcmF0ZWRfYXQgIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBwcmV2aWV3UmVxdWVzdElkOiAgICBkYXRhLnByZXZpZXdfcmVxdWVzdF9pZCAgICB8fCBudWxsLFxuICB9O1xufVxuXG4vKipcbiAqIEZldGNoIHRoZSBDViBIVE1MIHByZXZpZXcgdmlhIHRoZSBzdGFnZWQgZ2VuZXJhdGlvbiBjb250cmFjdC5cbiAqXG4gKiBTdHJhdGVneSBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IGdlbmVyYXRpb24gc3RhdGU6XG4gKlxuICogLSBwaGFzZSBpcyBub3QgY29uZmlybWVkL2ZpbmFsX2NvbXBsZXRlOlxuICogICBBbHdheXMgY2FsbHMgUE9TVCAvYXBpL2N2L2dlbmVyYXRlLXByZXZpZXcsIHdoaWNoIHN0b3JlcyBwcmV2aWV3X2h0bWwgaW5cbiAqICAgZ2VuZXJhdGlvbl9zdGF0ZSAocmVxdWlyZWQgZm9yIGNvbmZpcm0tbGF5b3V0KSBhbmQgY2FsbHMgbWFya1ByZXZpZXdHZW5lcmF0ZWQuXG4gKiAgIFRoaXMgYm9vdHN0cmFwcyB0aGUgc3RhZ2VkIHN0YXRlIGV2ZW4gYWZ0ZXIgbGVnYWN5IGdlbmVyYXRlX2N2IGFjdGlvbnMgdGhhdFxuICogICB3cml0ZSBmaWxlcyB0byBkaXNrIHdpdGhvdXQgcG9wdWxhdGluZyBnZW5lcmF0aW9uX3N0YXRlLnByZXZpZXdfaHRtbC5cbiAqICAgRmFsbHMgYmFjayB0byBHRVQgL2FwaS9sYXlvdXQtaHRtbCAocGFzc2l2ZSwgbm8gc3RhdGUgY2hhbmdlKSB3aGVuXG4gKiAgIGdlbmVyYXRlLXByZXZpZXcgaXMgdW5hdmFpbGFibGUgKGUuZy4gc2Vzc2lvbiBoYXMgbm8gam9iX2FuYWx5c2lzIHlldCkuXG4gKlxuICogLSBwaGFzZSBpcyBjb25maXJtZWQvZmluYWxfY29tcGxldGUgKHBhc3NpdmUgcmVzdG9yZSk6XG4gKiAgIFJlYWRzIEhUTUwgZnJvbSBkaXNrIHZpYSBHRVQgL2FwaS9sYXlvdXQtaHRtbCB3aXRob3V0IHRvdWNoaW5nIHNlc3Npb24gc3RhdGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIF9mZXRjaEFuZERpc3BsYXlMYXlvdXRQcmV2aWV3KCkge1xuICBjb25zdCBnZW5TdGF0ZSAgICA9IHN0YXRlTWFuYWdlcj8uZ2V0R2VuZXJhdGlvblN0YXRlPy4oKSB8fCB7fTtcbiAgY29uc3QgaXNDb25maXJtZWQgPSBnZW5TdGF0ZS5waGFzZSA9PT0gR0VORVJBVElPTl9QSEFTRVMuQ09ORklSTUVEXG4gICAgICAgICAgICAgICAgICAgfHwgZ2VuU3RhdGUucGhhc2UgPT09IEdFTkVSQVRJT05fUEhBU0VTLkZJTkFMX0NPTVBMRVRFO1xuXG4gIHNob3dQcmV2aWV3TG9hZGluZyh0cnVlLCBpc0NvbmZpcm1lZCA/ICdMb2FkaW5nIHNhdmVkIGxheW91dFx1MjAyNicgOiAnR2VuZXJhdGluZyBwcmV2aWV3XHUyMDI2Jyk7XG4gIHRyeSB7XG4gICAgLy8gRnJlc2gtcmVuZGVyIHBhdGg6IGFsd2F5cyBwb3B1bGF0ZSBnZW5lcmF0aW9uX3N0YXRlLnByZXZpZXdfaHRtbCBvbiB0aGUgYmFja2VuZFxuICAgIC8vIHNvIHRoYXQgY29uZmlybS1sYXlvdXQgc3VjY2VlZHMuIENvdmVycyBib3RoIHRoZSBub3JtYWwgc3RhZ2VkIHBhdGggYW5kIHRoZVxuICAgIC8vIGxlZ2FjeSBnZW5lcmF0ZV9jdiBwYXRoIHRoYXQgZG9lcyBub3QgY2FsbCBnZW5lcmF0ZS1wcmV2aWV3IGl0c2VsZi5cbiAgICBpZiAoIWlzQ29uZmlybWVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL2N2L2dlbmVyYXRlLXByZXZpZXcnLCB7fSk7XG4gICAgICAgIGlmIChkYXRhLm9rICYmIGRhdGEuaHRtbCkge1xuICAgICAgICAgIGRpc3BsYXlMYXlvdXRQcmV2aWV3KGRhdGEuaHRtbCk7XG4gICAgICAgICAgc2V0UHJldmlld0h0bWwoZGF0YS5odG1sKTtcbiAgICAgICAgICBkaXNtaXNzZWRTdGFsZUNhbGxvdXRSZXZpc2lvbiA9IG51bGw7XG4gICAgICAgICAgc3RhdGVNYW5hZ2VyPy5tYXJrUHJldmlld0dlbmVyYXRlZD8uKF9idWlsZFByZXZpZXdQYXlsb2FkKGRhdGEpKTtcbiAgICAgICAgICByZW5kZXJQcmV2aWV3T3V0cHV0U3RhdHVzKGRhdGEucHJldmlld19vdXRwdXRzIHx8IG51bGwpO1xuICAgICAgICAgIHJlZnJlc2hMYXlvdXRSZXZpZXdTdGF0ZSgpO1xuICAgICAgICAgIChkYXRhLmNvbnRlbnRfd2FybmluZ3MgfHwgW10pLmZvckVhY2godyA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgc2hvd1RvYXN0KHcubWVzc2FnZSwgJ3dhcm5pbmcnLCA4MDAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICAgIC8vIGZhbGwgdGhyb3VnaCB0byBsZWdhY3kgZGlzayByZWFkXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUGFzc2l2ZSByZXN0b3JlIHBhdGg6IGxvYWQgc3RvcmVkIEhUTUwgZnJvbSBkaXNrIHdpdGhvdXQgdG91Y2hpbmcgZ2VuZXJhdGlvbiBzdGF0ZS5cbiAgICAvLyBVc2VkIGZvciBjb25maXJtZWQvZmluYWxfY29tcGxldGUgbGF5b3V0cywgb3IgYXMgZmFsbGJhY2sgd2hlbiBnZW5lcmF0ZS1wcmV2aWV3XG4gICAgLy8gaXMgdW5hdmFpbGFibGUgKGUuZy4gc2Vzc2lvbiBoYXMgbm8gam9iX2FuYWx5c2lzIHlldCkuXG4gICAgdHJ5IHtcbiAgICAgIHNob3dQcmV2aWV3TG9hZGluZyh0cnVlLCAnTG9hZGluZyBzdG9yZWQgbGF5b3V0XHUyMDI2Jyk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgYXBpQ2FsbCgnR0VUJywgJy9hcGkvbGF5b3V0LWh0bWwnKTtcbiAgICAgIGlmIChkYXRhLm9rICYmIGRhdGEuaHRtbCkge1xuICAgICAgICBkaXNwbGF5TGF5b3V0UHJldmlldyhkYXRhLmh0bWwpO1xuICAgICAgICBzZXRQcmV2aWV3SHRtbChkYXRhLmh0bWwpO1xuICAgICAgICByZWZyZXNoTGF5b3V0UmV2aWV3U3RhdGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbG9nLndhcm4oJ0xheW91dCBwcmV2aWV3IG5vdCBhdmFpbGFibGU6JywgZGF0YS5lcnJvciB8fCAnbm8gSFRNTCByZXR1cm5lZCcpO1xuICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICAvLyBubyBwcmV2aWV3IGF2YWlsYWJsZVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzaG93UHJldmlld0xvYWRpbmcoZmFsc2UpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGxheSBIVE1MIHByZXZpZXcgaW4gaWZyYW1lLlxuICovXG5mdW5jdGlvbiBkaXNwbGF5TGF5b3V0UHJldmlldyhodG1sKSB7XG4gIGNvbnN0IHByZXZpZXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5b3V0LXByZXZpZXcnKTtcbiAgaWYgKCFwcmV2aWV3KSByZXR1cm47XG5cbiAgc2hvd1ByZXZpZXdMb2FkaW5nKGZhbHNlKTtcbiAgcHJldmlldy5vbmxvYWQgPSAoKSA9PiBmaXRMYXlvdXRQcmV2aWV3VG9QYW5lKHByZXZpZXcpO1xuICBwcmV2aWV3LnNldEF0dHJpYnV0ZSgnc2FuZGJveCcsICdhbGxvdy1zYW1lLW9yaWdpbicpO1xuICBwcmV2aWV3LnNldEF0dHJpYnV0ZSgncmVmZXJyZXJwb2xpY3knLCAnbm8tcmVmZXJyZXInKTtcbiAgcHJldmlldy5zcmNkb2MgPSBodG1sO1xuXG4gIGNvbnN0IGRvYyA9IHByZXZpZXcuY29udGVudERvY3VtZW50IHx8IHByZXZpZXcuY29udGVudFdpbmRvdz8uZG9jdW1lbnQ7XG4gIGlmIChkb2M/LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICBmaXRMYXlvdXRQcmV2aWV3VG9QYW5lKHByZXZpZXcpO1xuICB9XG59XG5cbi8qKlxuICogU2NhbGUgdGhlIHByZXZpZXcgc28gYW4gZW50aXJlIENWIHBhZ2Ugd2lkdGggZml0cyB3aXRoaW4gdGhlIHByZXZpZXcgcGFuZS5cbiAqL1xuZnVuY3Rpb24gZml0TGF5b3V0UHJldmlld1RvUGFuZShwcmV2aWV3KSB7XG4gIGNvbnN0IGRvYyA9IHByZXZpZXc/LmNvbnRlbnREb2N1bWVudCB8fCBwcmV2aWV3Py5jb250ZW50V2luZG93Py5kb2N1bWVudDtcbiAgY29uc3QgY29udGFpbmVyID0gcHJldmlldz8uY2xvc2VzdCgnLnByZXZpZXctaWZyYW1lLWNvbnRhaW5lcicpO1xuICBpZiAoIWRvYyB8fCAhY29udGFpbmVyKSByZXR1cm47XG5cbiAgY29uc3QgcGFnZUNvbnRhaW5lciA9IGRvYy5xdWVyeVNlbGVjdG9yKCcucGFnZS1jb250YWluZXInKSB8fCBkb2MuYm9keTtcbiAgaWYgKCFwYWdlQ29udGFpbmVyKSByZXR1cm47XG5cbiAgY29uc3QgY29udGFpbmVyV2lkdGggPSBNYXRoLm1heChjb250YWluZXIuY2xpZW50V2lkdGggLSAyNCwgMSk7XG4gIGNvbnN0IGNvbnRlbnRXaWR0aCA9IE1hdGgubWF4KFxuICAgIE1hdGguY2VpbChwYWdlQ29udGFpbmVyLnNjcm9sbFdpZHRoIHx8IDApLFxuICAgIE1hdGguY2VpbChwYWdlQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDApLFxuICAgIDFcbiAgKTtcbiAgY29uc3Qgc2NhbGUgPSBNYXRoLm1pbigxLCBjb250YWluZXJXaWR0aCAvIGNvbnRlbnRXaWR0aCk7XG5cbiAgZG9jLmRvY3VtZW50RWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmOGZhZmMnO1xuICBkb2MuYm9keS5zdHlsZS5tYXJnaW4gPSAnMCc7XG4gIGRvYy5ib2R5LnN0eWxlLnBhZGRpbmcgPSAnMCc7XG4gIGRvYy5ib2R5LnN0eWxlLmJhY2tncm91bmQgPSAnI2Y4ZmFmYyc7XG4gIGRvYy5ib2R5LnN0eWxlLm92ZXJmbG93WCA9ICdhdXRvJztcblxuICBwYWdlQ29udGFpbmVyLnN0eWxlLnpvb20gPSBgJHtzY2FsZX1gO1xuICBwYWdlQ29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICBwYWdlQ29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9ICcnO1xuICBwYWdlQ29udGFpbmVyLnN0eWxlLm1hcmdpbiA9ICcxMnB4JztcbiAgcHJldmlldy5zdHlsZS5taW5XaWR0aCA9ICcnO1xufVxuXG4vKipcbiAqIEFkZCBpbnN0cnVjdGlvbiB0byBoaXN0b3J5IHBhbmVsLlxuICovXG5mdW5jdGlvbiBhZGRUb0luc3RydWN0aW9uSGlzdG9yeShpbnN0cnVjdGlvbikge1xuICAvLyBJbml0aWFsaXplIGdsb2JhbCBpbnN0cnVjdGlvbiBsaXN0IGlmIG5lZWRlZFxuICBpZiAoIXdpbmRvdy5sYXlvdXRJbnN0cnVjdGlvbnMpIHtcbiAgICB3aW5kb3cubGF5b3V0SW5zdHJ1Y3Rpb25zID0gW107XG4gIH1cblxuICB3aW5kb3cubGF5b3V0SW5zdHJ1Y3Rpb25zLnB1c2gobm9ybWFsaXplTGF5b3V0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pKTtcbiAgcmVuZGVySW5zdHJ1Y3Rpb25IaXN0b3J5KCk7XG59XG5cbi8qKlxuICogUmVuZGVyIGluc3RydWN0aW9uIGhpc3RvcnkgZnJvbSBjdXJyZW50IHN0YXRlIHdpdGhvdXQgbXV0YXRpbmcgaXQuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckluc3RydWN0aW9uSGlzdG9yeSgpIHtcbiAgY29uc3QgaGlzdG9yeUxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5zdHJ1Y3Rpb24taGlzdG9yeScpO1xuICBpZiAoIWhpc3RvcnlMaXN0KSByZXR1cm47XG5cbiAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gd2luZG93LmxheW91dEluc3RydWN0aW9ucyB8fCBbXTtcbiAgaGlzdG9yeUxpc3QuaW5uZXJIVE1MID0gJyc7XG4gIGNvbnN0IGxhc3RJZHggPSBpbnN0cnVjdGlvbnMubGVuZ3RoIC0gMTtcbiAgaW5zdHJ1Y3Rpb25zLmZvckVhY2goKGluc3RydWN0aW9uLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZW50cnkuY2xhc3NOYW1lID0gJ2luc3RydWN0aW9uLWhpc3RvcnktZW50cnknO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBsYXN0SWR4O1xuICAgIGNvbnN0IHVuZG9IdG1sID0gaXNMYXN0XG4gICAgICA/IGA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0bi1zbVwiIG9uY2xpY2s9XCJ1bmRvSW5zdHJ1Y3Rpb24oJHtpbmRleH0pXCI+XHUyMUE5IFVuZG88L2J1dHRvbj5gXG4gICAgICA6IGA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0bi1zbVwiIGRpc2FibGVkIHRpdGxlPVwiVW5kbyBpcyBzZXF1ZW50aWFsIFx1MjAxNCB1bmRvIHRoZSBtb3N0IHJlY2VudCBpbnN0cnVjdGlvbiBmaXJzdFwiXG4gICAgICAgICAgIHN0eWxlPVwib3BhY2l0eTowLjM7Y3Vyc29yOm5vdC1hbGxvd2VkO1wiPlx1MjFBOSBVbmRvPC9idXR0b24+YDtcbiAgICBlbnRyeS5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5zdHJ1Y3Rpb24tdGltZVwiPiR7aW5zdHJ1Y3Rpb24udGltZXN0YW1wIHx8ICcnfTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImluc3RydWN0aW9uLXRleHRcIj4ke2VzY2FwZUh0bWwoaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25fdGV4dCB8fCAnJyl9PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5zdHJ1Y3Rpb24tc3VtbWFyeVwiPjxlbT4ke2VzY2FwZUh0bWwoaW5zdHJ1Y3Rpb24uY2hhbmdlX3N1bW1hcnkgfHwgJycpfTwvZW0+PC9kaXY+XG4gICAgICAke3VuZG9IdG1sfVxuICAgIGA7XG4gICAgaGlzdG9yeUxpc3QuYXBwZW5kQ2hpbGQoZW50cnkpO1xuICB9KTtcblxuICAvLyBVcGRhdGUgY291bnRcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luc3RydWN0aW9uLWNvdW50JykudGV4dENvbnRlbnQgPSAod2luZG93LmxheW91dEluc3RydWN0aW9ucyB8fCBbXSkubGVuZ3RoO1xufVxuXG4vKipcbiAqIFJlc3RvcmUgaW5zdHJ1Y3Rpb24gaGlzdG9yeSBmcm9tIHNlc3Npb24gc3RhdGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRMYXlvdXRJbnN0cnVjdGlvbkhpc3RvcnkoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDYWxsKCdHRVQnLCAnL2FwaS9sYXlvdXQtaGlzdG9yeScpO1xuICAgIGlmICghcmVzcG9uc2U/Lmluc3RydWN0aW9ucyB8fCAhQXJyYXkuaXNBcnJheShyZXNwb25zZS5pbnN0cnVjdGlvbnMpKSB7XG4gICAgICByZXR1cm4gd2luZG93LmxheW91dEluc3RydWN0aW9ucyB8fCBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2UuaW5zdHJ1Y3Rpb25zLm1hcCgoaW5zdHJ1Y3Rpb24pID0+IG5vcm1hbGl6ZUxheW91dEluc3RydWN0aW9uKGluc3RydWN0aW9uKSk7XG4gIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgIHJldHVybiB3aW5kb3cubGF5b3V0SW5zdHJ1Y3Rpb25zIHx8IFtdO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc3RvcmVJbnN0cnVjdGlvbkhpc3RvcnkoKSB7XG4gIHdpbmRvdy5sYXlvdXRJbnN0cnVjdGlvbnMgPSBhd2FpdCBsb2FkTGF5b3V0SW5zdHJ1Y3Rpb25IaXN0b3J5KCk7XG4gIHJlbmRlckluc3RydWN0aW9uSGlzdG9yeSgpO1xuICByZWZyZXNoTGF5b3V0UmV2aWV3U3RhdGUoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVnZW5lcmF0ZVByZXZpZXdBY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgc2hvd1Byb2Nlc3NpbmcodHJ1ZSk7XG4gICAgYXdhaXQgX2ZldGNoQW5kRGlzcGxheUxheW91dFByZXZpZXcoKTtcbiAgICBzaG93Q29uZmlybWF0aW9uTWVzc2FnZSgnXHUyNzA1IFByZXZpZXcgcmVnZW5lcmF0ZWQgZnJvbSB0aGUgbGF0ZXN0IGNvbnRlbnQuJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgYFx1Mjc0QyBDb3VsZCBub3QgcmVnZW5lcmF0ZSB0aGUgcHJldmlldy4gQ2hlY2sgdGhhdCB5b3VyIHNlc3Npb24gaXMgYWN0aXZlIGFuZCB0cnkgYWdhaW4uIElmIHRoZSBwcm9ibGVtIHBlcnNpc3RzLCByZWxvYWQgdGhlIHBhZ2UuYCk7XG4gICAgc2hvd1ByZXZpZXdMb2FkaW5nKGZhbHNlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzaG93UHJvY2Vzc2luZyhmYWxzZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG93IHByb2Nlc3Npbmcgc3Bpbm5lciAocmlnaHQtcGFuZSBpbmRpY2F0b3IgZm9yIGxheW91dC1pbnN0cnVjdGlvbiBhcHBseSkuXG4gKi9cbmZ1bmN0aW9uIHNob3dQcm9jZXNzaW5nKHNob3cpIHtcbiAgY29uc3QgaW5kaWNhdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2Nlc3NpbmctaW5kaWNhdG9yJyk7XG4gIGlmIChpbmRpY2F0b3IpIHtcbiAgICBpbmRpY2F0b3Iuc3R5bGUuZGlzcGxheSA9IHNob3cgPyAnYmxvY2snIDogJ25vbmUnO1xuICB9XG59XG5cbi8qKlxuICogU2hvdyBvciBoaWRlIHRoZSBwcmV2aWV3LWFyZWEgbG9hZGluZyBvdmVybGF5LlxuICogQHBhcmFtIHtib29sZWFufSBzaG93XG4gKiBAcGFyYW0ge3N0cmluZ30gW2xvZ1RleHRdIE9wdGlvbmFsIHN0YXR1cyBsaW5lIHNob3duIGJlbG93IHRoZSBzcGlubmVyLlxuICovXG5mdW5jdGlvbiBzaG93UHJldmlld0xvYWRpbmcoc2hvdywgbG9nVGV4dCA9ICcnKSB7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJldmlldy1sb2FkaW5nLW92ZXJsYXknKTtcbiAgaWYgKCFvdmVybGF5KSByZXR1cm47XG4gIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IHNob3cgPyAnZmxleCcgOiAnbm9uZSc7XG4gIGNvbnN0IGxvZ0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZXZpZXctbG9hZGluZy1sb2cnKTtcbiAgaWYgKGxvZ0VsKSBsb2dFbC50ZXh0Q29udGVudCA9IGxvZ1RleHQ7XG59XG5cbi8qKlxuICogU2hvdyBjb25maXJtYXRpb24gbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gc2hvd0NvbmZpcm1hdGlvbk1lc3NhZ2UobWVzc2FnZSkge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZpcm1hdGlvbi1tZXNzYWdlJyk7XG4gIGlmICghZWxlbWVudCkgcmV0dXJuO1xuXG4gIGVsZW1lbnQudGV4dENvbnRlbnQgPSBtZXNzYWdlO1xuICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG4gIC8vIEF1dG8taGlkZSBhZnRlciAzIHNlY29uZHNcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9LCAzMDAwKTtcbn1cblxuLyoqXG4gKiBTaG93IGlubGluZSBjbGFyaWZpY2F0aW9uIHBhbmVsIHdoZW4gTExNIG5lZWRzIG1vcmUgaW5mby5cbiAqIFJlcGxhY2VzIHdpbmRvdy5wcm9tcHQoKSB3aXRoIGFuIGFjY2Vzc2libGUgaW5saW5lIGZvcm0uXG4gKi9cbmZ1bmN0aW9uIHNob3dDbGFyaWZpY2F0aW9uRGlhbG9nKHF1ZXN0aW9uLCBvcmlnaW5hbEluc3RydWN0aW9uKSB7XG4gIGNvbnN0IGlucHV0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5zdHJ1Y3Rpb24taW5wdXQnKTtcbiAgY29uc3QgY29udGFpbmVyID0gaW5wdXRFbCA/IGlucHV0RWwuY2xvc2VzdCgnZGl2JykgfHwgaW5wdXRFbC5wYXJlbnROb2RlIDogbnVsbDtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICBjb25zdCBleGlzdGluZ1BhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheW91dC1jbGFyaWZpY2F0aW9uLXBhbmVsJyk7XG4gIGlmIChleGlzdGluZ1BhbmVsKSBleGlzdGluZ1BhbmVsLnJlbW92ZSgpO1xuXG4gIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHBhbmVsLmlkID0gJ2xheW91dC1jbGFyaWZpY2F0aW9uLXBhbmVsJztcbiAgcGFuZWwuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2FsZXJ0Jyk7XG4gIHBhbmVsLnN0eWxlLmNzc1RleHQgPSAnYmFja2dyb3VuZDojZmVmOWMzO2JvcmRlcjoxcHggc29saWQgI2ZkZTA0Nztib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE0cHg7bWFyZ2luLXRvcDoxMHB4Oyc7XG4gIHBhbmVsLmlubmVySFRNTCA9IGBcbiAgICA8cCBzdHlsZT1cIm1hcmdpbjowIDAgOHB4O2ZvbnQtc2l6ZTowLjllbTtjb2xvcjojOTI0MDBlO2ZvbnQtd2VpZ2h0OjYwMDtcIj5cbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlx1Mjc1Mzwvc3Bhbj4gQ2xhcmlmaWNhdGlvbiBuZWVkZWRcbiAgICA8L3A+XG4gICAgPHAgc3R5bGU9XCJtYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjAuODhlbTtjb2xvcjojNzgzNTBmO1wiPiR7ZXNjYXBlSHRtbChxdWVzdGlvbil9PC9wPlxuICAgIDxsYWJlbCBmb3I9XCJsYXlvdXQtY2xhcmlmaWNhdGlvbi1pbnB1dFwiIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtmb250LXdlaWdodDo2MDA7Y29sb3I6IzM3NDE1MTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O1wiPlxuICAgICAgWW91ciBjbGFyaWZpY2F0aW9uOlxuICAgIDwvbGFiZWw+XG4gICAgPHRleHRhcmVhIGlkPVwibGF5b3V0LWNsYXJpZmljYXRpb24taW5wdXRcIiByb3dzPVwiMlwiXG4gICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2ZkZTA0Nztib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC44OGVtO3Jlc2l6ZTp2ZXJ0aWNhbDtcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsYXJpZmljYXRpb24gZm9yIGxheW91dCBpbnN0cnVjdGlvblwiPiR7ZXNjYXBlSHRtbChvcmlnaW5hbEluc3RydWN0aW9uKX08L3RleHRhcmVhPlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjhweDttYXJnaW4tdG9wOjhweDtcIj5cbiAgICAgIDxidXR0b24gaWQ9XCJsYXlvdXQtY2xhcmlmaWNhdGlvbi1zdWJtaXRcIlxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6I2Q5NzcwNjtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6NnB4IDE0cHg7Zm9udC1zaXplOjAuODVlbTtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7XCI+XG4gICAgICAgIFN1Ym1pdCBjbGFyaWZpY2F0aW9uXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gaWQ9XCJsYXlvdXQtY2xhcmlmaWNhdGlvbi1jYW5jZWxcIlxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6MXB4IHNvbGlkICNkOTc3MDY7Y29sb3I6IzkyNDAwZTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjZweCAxNHB4O2ZvbnQtc2l6ZTowLjg1ZW07Y3Vyc29yOnBvaW50ZXI7XCI+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+YDtcblxuICBjb250YWluZXIuYXBwZW5kQ2hpbGQocGFuZWwpO1xuXG4gIGNvbnN0IGNsYXJJbnB1dCAgPSBwYW5lbC5xdWVyeVNlbGVjdG9yKCcjbGF5b3V0LWNsYXJpZmljYXRpb24taW5wdXQnKTtcbiAgY29uc3Qgc3VibWl0QnRuICA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3IoJyNsYXlvdXQtY2xhcmlmaWNhdGlvbi1zdWJtaXQnKTtcbiAgY29uc3QgY2FuY2VsQnRuICA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3IoJyNsYXlvdXQtY2xhcmlmaWNhdGlvbi1jYW5jZWwnKTtcblxuICBjbGFySW5wdXQuZm9jdXMoKTtcbiAgY2xhcklucHV0LnNldFNlbGVjdGlvblJhbmdlKGNsYXJJbnB1dC52YWx1ZS5sZW5ndGgsIGNsYXJJbnB1dC52YWx1ZS5sZW5ndGgpO1xuXG4gIHN1Ym1pdEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBjb25zdCBjbGFyaWZpZWQgPSBjbGFySW5wdXQudmFsdWUudHJpbSgpO1xuICAgIHBhbmVsLnJlbW92ZSgpO1xuICAgIGlmIChjbGFyaWZpZWQgJiYgY2xhcmlmaWVkICE9PSBvcmlnaW5hbEluc3RydWN0aW9uKSB7XG4gICAgICBzdWJtaXRMYXlvdXRJbnN0cnVjdGlvbihjbGFyaWZpZWQpO1xuICAgIH1cbiAgfSk7XG4gIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHBhbmVsLnJlbW92ZSgpKTtcbiAgY2xhcklucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBlID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBzdWJtaXRCdG4uY2xpY2soKTsgfVxuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGNhbmNlbEJ0bi5jbGljaygpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBVbmRvIHRoZSBsYXN0IGxheW91dCBpbnN0cnVjdGlvbiBieSByZXN0b3JpbmcgdGhlIHByZXZpb3VzIHNuYXBzaG90LlxuICogVGhlIGluZGV4IHBhcmFtZXRlciBpcyBhY2NlcHRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBidXQgaXMgaWdub3JlZCBcdTIwMTRcbiAqIHRoZSB1bmRvIHN0YWNrIGFsd2F5cyByZXN0b3JlcyB0aGUgbW9zdCByZWNlbnQgcHJlLWluc3RydWN0aW9uIHN0YXRlLlxuICovXG5mdW5jdGlvbiB1bmRvSW5zdHJ1Y3Rpb24oX2luZGV4KSB7XG4gIGlmIChfbGF5b3V0VW5kb1N0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsICdcdTIxMzlcdUZFMEYgTm90aGluZyB0byB1bmRvLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNuYXBzaG90ID0gX2xheW91dFVuZG9TdGFjay5wb3AoKTtcbiAgd2luZG93LmxheW91dEluc3RydWN0aW9ucyA9IHNuYXBzaG90Lmluc3RydWN0aW9ucztcblxuICBkaXNwbGF5TGF5b3V0UHJldmlldyhzbmFwc2hvdC5odG1sKTtcbiAgc2V0UHJldmlld0h0bWwoc25hcHNob3QuaHRtbCk7XG4gIHJlbmRlckluc3RydWN0aW9uSGlzdG9yeSgpO1xuICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHUyMUE5XHVGRTBGIExhc3QgbGF5b3V0IGluc3RydWN0aW9uIHVuZG9uZS4nKTtcbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcbiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXlvdXQtcHJldmlldycpO1xuICBpZiAocHJldmlldykge1xuICAgIGZpdExheW91dFByZXZpZXdUb1BhbmUocHJldmlldyk7XG4gIH1cbn0pO1xuXG5hc3luYyBmdW5jdGlvbiBjb25maXJtTGF5b3V0UmV2aWV3KCkge1xuICB0cnkge1xuICAgIHNob3dQcm9jZXNzaW5nKHRydWUpO1xuXG4gICAgY29uc3QgZnJlc2huZXNzID0gc3RhdGVNYW5hZ2VyLmdldExheW91dEZyZXNobmVzcygpO1xuICAgIGlmIChmcmVzaG5lc3MuaXNTdGFsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcmV2aWV3IGlzIG91dGRhdGVkLiBSZWdlbmVyYXRlIHRoZSBwcmV2aWV3IGJlZm9yZSBjb25maXJtaW5nIGxheW91dC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maXJtUmVzID0gYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL2N2L2NvbmZpcm0tbGF5b3V0JywgeyBjb250ZW50X3JldmlzaW9uOiBnZXRDdXJyZW50Q29udGVudFJldmlzaW9uKCkgfSk7XG4gICAgaWYgKCFjb25maXJtUmVzPy5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGNvbmZpcm1SZXM/LmVycm9yIHx8ICdGYWlsZWQgdG8gY29uZmlybSBsYXlvdXQuJyk7XG4gICAgfVxuXG4gICAgc3RhdGVNYW5hZ2VyLm1hcmtMYXlvdXRDb25maXJtZWQoe1xuICAgICAgY29uZmlybWVkQXQ6IGNvbmZpcm1SZXMuY29uZmlybWVkX2F0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9KTtcbiAgICBzaG93Q29uZmlybWF0aW9uTWVzc2FnZSgnXHUyNzA1IExheW91dCBjb25maXJtZWQuIEdlbmVyYXRlIGZpbmFsIGZpbGVzIHdoZW4geW91IGFyZSByZWFkeS4nKTtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnXHUyNzA1IExheW91dCBjb25maXJtZWQuIFJldmlldyB0aGUgcHJldmlldyBpZiBuZWVkZWQsIHRoZW4gZ2VuZXJhdGUgdGhlIGZpbmFsIGZpbGVzLicpO1xuICAgIHJlZnJlc2hMYXlvdXRSZXZpZXdTdGF0ZSgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdTI3NEMgQ291bGQgbm90IGNvbmZpcm0gdGhlIGxheW91dC4gVHJ5IGNsaWNraW5nIENvbmZpcm0gYWdhaW4uIElmIHRoZSBwcm9ibGVtIHBlcnNpc3RzLCByZWxvYWQgdGhlIHBhZ2UuYCk7XG4gIH0gZmluYWxseSB7XG4gICAgc2hvd1Byb2Nlc3NpbmcoZmFsc2UpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRmluYWxPdXRwdXRzKCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogbGF5b3V0X3VpX2dlbmVyYXRlX2ZpbmFsX2xpdmVcbiAgICogICBraW5kOiB1aVxuICAgKiAgIHRpbWVzdGFtcDogJzIwMjYtMDMtMjZUMDA6MjQ6MDBaJ1xuICAgKiAgIHN0YXR1czogbGl2ZVxuICAgKiAgIGhhbmRsZXM6XG4gICAqICAgLSB1aTpsYXlvdXQuZ2VuZXJhdGUtZmluYWxcbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9jdi9nZW5lcmF0ZS1maW5hbFxuICAgKiAgIC0gUE9TVCAvYXBpL2xheW91dC1jb21wbGV0ZVxuICAgKiAgIHJlYWRzOlxuICAgKiAgIC0gc3RhdGU6Z2VuZXJhdGlvbl9zdGF0ZS5sYXlvdXRDb25maXJtZWRcbiAgICogICAtIHN0YXRlOmdlbmVyYXRpb25fc3RhdGUucGhhc2VcbiAgICogICAtIHN0YXRlOmxheW91dF9mcmVzaG5lc3NcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSB0YWI6Y3ZBcnRpZmFjdHNcbiAgICogICAtIHN0YXRlOmdlbmVyYXRpb25fc3RhdGUuZmluYWxfZ2VuZXJhdGVkX2F0XG4gICAqICAgLSB1aTp3b3JrZmxvdy5yZWZpbmVtZW50XG4gICAqICAgbm90ZXM6IEdlbmVyYXRlcyB0aGUgZmluYWwgaHVtYW4tcmVhZGFibGUgb3V0cHV0cyBmcm9tIHRoZSBjb25maXJtZWQgcHJldmlldyBhbmQgYWR2YW5jZXMgdGhlIFVJIGludG8gZmlsZSByZXZpZXcvZmluYWxpc2Ugd2l0aCB0aGUgbmV3IGFydGlmYWN0IHNldC5cbiAgICovXG4gIHRyeSB7XG4gICAgc2hvd1Byb2Nlc3NpbmcodHJ1ZSk7XG5cbiAgICBjb25zdCBmcmVzaG5lc3MgPSBzdGF0ZU1hbmFnZXIuZ2V0TGF5b3V0RnJlc2huZXNzKCk7XG4gICAgY29uc3QgZ2VuZXJhdGlvblN0YXRlID0gc3RhdGVNYW5hZ2VyLmdldEdlbmVyYXRpb25TdGF0ZSgpO1xuICAgIGlmIChmcmVzaG5lc3MuaXNTdGFsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcmV2aWV3IGlzIG91dGRhdGVkLiBSZWdlbmVyYXRlIHRoZSBwcmV2aWV3IGJlZm9yZSBnZW5lcmF0aW5nIGZpbmFsIGZpbGVzLicpO1xuICAgIH1cbiAgICBpZiAoIWdlbmVyYXRpb25TdGF0ZS5sYXlvdXRDb25maXJtZWQgJiYgZ2VuZXJhdGlvblN0YXRlLnBoYXNlICE9PSAnY29uZmlybWVkJykge1xuICAgICAgY29uc3QgaGFzSW5zdHJ1Y3Rpb25zID0gKHdpbmRvdy5sYXlvdXRJbnN0cnVjdGlvbnMgfHwgW10pLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoaGFzSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29uZmlybSBsYXlvdXQgYmVmb3JlIGdlbmVyYXRpbmcgZmluYWwgZmlsZXMuJyk7XG4gICAgICB9XG4gICAgICAvLyBObyBpbnN0cnVjdGlvbnMgYWRkZWQgXHUyMDE0IGF1dG8tY29uZmlybSBzbyB1c2VycyBhcmVuJ3QgYmxvY2tlZCBieSBhIHJlZHVuZGFudCBjbGljay5cbiAgICAgIGNvbnN0IGNvbmZpcm1SZXMgPSBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvY3YvY29uZmlybS1sYXlvdXQnLCB7IGNvbnRlbnRfcmV2aXNpb246IGdldEN1cnJlbnRDb250ZW50UmV2aXNpb24oKSB9KTtcbiAgICAgIGlmICghY29uZmlybVJlcz8ub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNvbmZpcm1SZXM/LmVycm9yIHx8ICdGYWlsZWQgdG8gYXV0by1jb25maXJtIGxheW91dC4nKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlTWFuYWdlci5tYXJrTGF5b3V0Q29uZmlybWVkKHsgY29uZmlybWVkQXQ6IGNvbmZpcm1SZXMuY29uZmlybWVkX2F0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5hbFJlcyA9IGF3YWl0IGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9jdi9nZW5lcmF0ZS1maW5hbCcsIHt9KTtcbiAgICBpZiAoIWZpbmFsUmVzPy5vayB8fCAhZmluYWxSZXMub3V0cHV0cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZpbmFsUmVzPy5lcnJvciB8fCAnRmFpbGVkIHRvIGdlbmVyYXRlIGZpbmFsIENWIG91dHB1dC4nKTtcbiAgICB9XG5cbiAgICB1cGRhdGVDdkFydGlmYWN0cyhmaW5hbFJlcy5vdXRwdXRzKTtcbiAgICBzdGF0ZU1hbmFnZXIubWFya0ZpbmFsR2VuZXJhdGVkKGZpbmFsUmVzLmdlbmVyYXRlZF9hdCB8fCBudWxsLCB7XG4gICAgICBwYWdlQ291bnRFc3RpbWF0ZTogZmluYWxSZXMucGFnZV9jb3VudF9lc3RpbWF0ZSA/PyBudWxsLFxuICAgICAgcGFnZUNvdW50RXhhY3Q6IGZpbmFsUmVzLnBhZ2VfY291bnRfZXhhY3QgPz8gbnVsbCxcbiAgICB9KTtcblxuICAgIHNjaGVkdWxlQXRzUmVmcmVzaCgncG9zdF9nZW5lcmF0aW9uJyk7XG5cbiAgICBzdGF0ZU1hbmFnZXIuc2V0UGhhc2UoJ2ZpbmFsX2dlbmVyYXRpb24nKTtcbiAgICBzd2l0Y2hUYWIoJ2ZpbmFsX2dlbmVyYXRlJyk7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ1x1MjcwNSBGaW5hbCBmaWxlcyBnZW5lcmF0ZWQgZnJvbSB0aGUgY29uZmlybWVkIGxheW91dC4nKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHUyNzRDIENvdWxkIG5vdCBnZW5lcmF0ZSBmaW5hbCBmaWxlczogJHtlcnJvci5tZXNzYWdlfSBUcnkgY2xpY2tpbmcgR2VuZXJhdGUgYWdhaW4uIElmIGxheW91dCBjb25maXJtYXRpb24gaXMgbmVlZGVkIGZpcnN0LCBjbGljayBDb25maXJtIExheW91dCwgdGhlbiB0cnkgYWdhaW4uYCk7XG4gIH0gZmluYWxseSB7XG4gICAgc2hvd1Byb2Nlc3NpbmcoZmFsc2UpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUxheW91dFByaW1hcnlBY3Rpb24oKSB7XG4gIGNvbnN0IGZyZXNobmVzcyA9IHN0YXRlTWFuYWdlci5nZXRMYXlvdXRGcmVzaG5lc3MoKTtcbiAgY29uc3QgZ2VuZXJhdGlvblN0YXRlID0gc3RhdGVNYW5hZ2VyLmdldEdlbmVyYXRpb25TdGF0ZSgpO1xuICBpZiAoZnJlc2huZXNzLmlzU3RhbGUpIHJldHVybiBoYW5kbGVSZWdlbmVyYXRlUHJldmlld0FjdGlvbigpO1xuICBpZiAoZ2VuZXJhdGlvblN0YXRlLmxheW91dENvbmZpcm1lZCB8fCBnZW5lcmF0aW9uU3RhdGUucGhhc2UgPT09ICdjb25maXJtZWQnKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlRmluYWxPdXRwdXRzKCk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpcm1MYXlvdXRSZXZpZXcoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGxldGVMYXlvdXRSZXZpZXcoKSB7XG4gIHJldHVybiBoYW5kbGVMYXlvdXRQcmltYXJ5QWN0aW9uKCk7XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihHRU5FUkFUSU9OX1NUQVRFX0VWRU5ULCByZWZyZXNoTGF5b3V0UmV2aWV3U3RhdGUpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgQ29udGVudCBwcm9wb3NhbCBmdW5jdGlvbnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKlxuICogU3VibWl0IGEgbmF0dXJhbC1sYW5ndWFnZSBjb250ZW50IGVkaXQgcmVxdWVzdCB0byB0aGUgYmFja2VuZCBhbmQgcmVuZGVyIHByb3Bvc2Fscy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3VibWl0Q29udGVudFByb3Bvc2FsKCkge1xuICBjb25zdCBpbnB1dCAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luc3RydWN0aW9uLWlucHV0Jyk7XG4gIGNvbnN0IHByb2Nlc3NpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudC1wcm9wb3NhbC1wcm9jZXNzaW5nJyk7XG4gIGNvbnN0IHBhbmVsICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudC1wcm9wb3NhbHMtcGFuZWwnKTtcblxuICBjb25zdCBpbnN0cnVjdGlvbiA9IGlucHV0Py52YWx1ZS50cmltKCk7XG4gIGlmICghaW5zdHJ1Y3Rpb24pIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHUyNkEwXHVGRTBGIFBsZWFzZSBkZXNjcmliZSB0aGUgY29udGVudCBjaGFuZ2UgeW91IHdhbnQgYmVmb3JlIHN1Ym1pdHRpbmcuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb2Nlc3NpbmcpIHByb2Nlc3Npbmcuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgaWYgKHBhbmVsKSAgICAgICBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL2N2L3Byb3Bvc2UtY29udGVudC1jaGFuZ2UnLCB7IGluc3RydWN0aW9uIH0pO1xuICAgIGlmICghcmVzPy5vaykge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgYFx1Mjc0QyBDb3VsZCBub3QgZ2VuZXJhdGUgY29udGVudCBwcm9wb3NhbHMuIFRyeSByZXBocmFzaW5nIHlvdXIgaW5zdHJ1Y3Rpb24gb3IgY2hlY2sgdGhlIHNlc3Npb24gaXMgc3RpbGwgYWN0aXZlLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm9wb3NhbHMgPSByZXMucHJvcG9zYWxzIHx8IFtdO1xuICAgIGlmIChwcm9wb3NhbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHUyNkEwXHVGRTBGIE5vIHByb3Bvc2FscyB3ZXJlIGdlbmVyYXRlZC4gVHJ5IHJlcGhyYXNpbmcgeW91ciBpbnN0cnVjdGlvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVuZGVyQ29udGVudFByb3Bvc2Fscyhwcm9wb3NhbHMpO1xuICAgIGlmIChwYW5lbCkgcGFuZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdTI3NEMgQ291bGQgbm90IHN1Ym1pdCB0aGUgY29udGVudCBwcm9wb3NhbC4gQ2hlY2sgeW91ciBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4uYCk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHByb2Nlc3NpbmcpIHByb2Nlc3Npbmcuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlciBhIGxpc3Qgb2YgY29udGVudCBwcm9wb3NhbHMgYXMgcmV2aWV3YWJsZSBjYXJkcyBpbnNpZGUgI2NvbnRlbnQtcHJvcG9zYWxzLXBhbmVsLlxuICogQHBhcmFtIHtBcnJheTx7aWQsIHR5cGUsIGxvY2F0aW9uLCBvcmlnaW5hbCwgcHJvcG9zZWQsIHJlYXNvbn0+fSBwcm9wb3NhbHNcbiAqL1xuZnVuY3Rpb24gcmVuZGVyQ29udGVudFByb3Bvc2Fscyhwcm9wb3NhbHMpIHtcbiAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudC1wcm9wb3NhbHMtcGFuZWwnKTtcbiAgaWYgKCFwYW5lbCkgcmV0dXJuO1xuXG4gIGNvbnN0IGFwcGx5QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcGx5LWNvbnRlbnQtY2hhbmdlcy1idG4nKTtcblxuICBwYW5lbC5pbm5lckhUTUwgPSBgXG4gICAgPHAgY2xhc3M9XCJjb250ZW50LXByb3Bvc2Fscy1oZWFkaW5nXCI+JHtwcm9wb3NhbHMubGVuZ3RofSBwcm9wb3NhbCR7cHJvcG9zYWxzLmxlbmd0aCAhPT0gMSA/ICdzJyA6ICcnfSBcdTIwMTQgYXBwcm92ZSB0aGUgY2hhbmdlcyB5b3Ugd2FudCB0byBhcHBseTo8L3A+XG4gICAgJHtwcm9wb3NhbHMubWFwKChwLCBpKSA9PiBgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1wcm9wb3NhbC1jYXJkXCIgZGF0YS1wcm9wb3NhbC1pZD1cIiR7ZXNjYXBlSHRtbChwLmlkKX1cIiBkYXRhLXByb3Bvc2FsLWluZGV4PVwiJHtpfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcG9zYWwtbWV0YVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvcG9zYWwtdHlwZS1iYWRnZVwiPiR7cC50eXBlID09PSAnc3VtbWFyeScgPyAnU3VtbWFyeScgOiAnQnVsbGV0J308L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9wb3NhbC1sb2NhdGlvblwiPiR7ZXNjYXBlSHRtbChwLmxvY2F0aW9uKX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcG9zYWwtZGlmZlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wb3NhbC1vcmlnaW5hbFwiPjxzdHJvbmc+QmVmb3JlOjwvc3Ryb25nPiAke2VzY2FwZUh0bWwocC5vcmlnaW5hbCl9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInByb3Bvc2FsLXByb3Bvc2VkXCI+PHN0cm9uZz5BZnRlcjo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKHAucHJvcG9zZWQpfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgJHtwLnJlYXNvbiA/IGA8ZGl2IGNsYXNzPVwicHJvcG9zYWwtcmVhc29uXCI+PGVtPiR7ZXNjYXBlSHRtbChwLnJlYXNvbil9PC9lbT48L2Rpdj5gIDogJyd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wb3NhbC1hY3Rpb25zXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwicHJvcG9zYWwtYXBwcm92ZS1sYWJlbFwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwicHJvcG9zYWwtYXBwcm92ZS1jaGVja2JveFwiIGNoZWNrZWQ+XG4gICAgICAgICAgICBBcHByb3ZlIHRoaXMgY2hhbmdlXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gKS5qb2luKCcnKX1cbiAgYDtcblxuICAvLyBTdG9yZSBwcm9wb3NhbHMgZm9yIGxhdGVyIHJldHJpZXZhbFxuICBwYW5lbC5kYXRhc2V0LnByb3Bvc2FscyA9IEpTT04uc3RyaW5naWZ5KHByb3Bvc2Fscyk7XG5cbiAgaWYgKGFwcGx5QnRuKSBhcHBseUJ0bi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGFwcHJvdmVkIHByb3Bvc2FscyBhbmQgUE9TVCB0aGVtIHRvIC9hcGkvY3YvYXBwbHktY29udGVudC1jaGFuZ2VzLlxuICogVXBkYXRlcyBkaXJ0eS1waGFzZSBzdGF0ZSBhbmQgc2hvd3MgdGhlIHJldHVybiBjYWxsb3V0LlxuICovXG5hc3luYyBmdW5jdGlvbiBhcHBseUFjY2VwdGVkUHJvcG9zYWxzKCkge1xuICBjb25zdCBwYW5lbCAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50LXByb3Bvc2Fscy1wYW5lbCcpO1xuICBjb25zdCBhcHBseUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHBseS1jb250ZW50LWNoYW5nZXMtYnRuJyk7XG5cbiAgY29uc3QgYWxsUHJvcG9zYWxzID0gSlNPTi5wYXJzZShwYW5lbD8uZGF0YXNldC5wcm9wb3NhbHMgfHwgJ1tdJyk7XG4gIGNvbnN0IGNoZWNrYm94ZXMgICA9IHBhbmVsPy5xdWVyeVNlbGVjdG9yQWxsKCcucHJvcG9zYWwtYXBwcm92ZS1jaGVja2JveCcpIHx8IFtdO1xuXG4gIGNvbnN0IGFjY2VwdGVkID0gYWxsUHJvcG9zYWxzLmZpbHRlcigoXywgaSkgPT4gY2hlY2tib3hlc1tpXT8uY2hlY2tlZCk7XG4gIGlmIChhY2NlcHRlZC5sZW5ndGggPT09IDApIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHUyNkEwXHVGRTBGIE5vIHByb3Bvc2FscyBhcHByb3ZlZC4gVGljayBhdCBsZWFzdCBvbmUgY2hhbmdlIHRvIGFwcGx5LicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhcHBseUJ0bikgYXBwbHlCdG4uZGlzYWJsZWQgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL2N2L2FwcGx5LWNvbnRlbnQtY2hhbmdlcycsIHsgYWNjZXB0ZWQgfSk7XG4gICAgaWYgKCFyZXM/Lm9rKSB7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHUyNzRDIEZhaWxlZCB0byBhcHBseSBjb250ZW50IGNoYW5nZXM6ICR7cmVzPy5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhdGVNYW5hZ2VyLnNldERpcnR5UGhhc2VzKFxuICAgICAgcmVzLmRpcnR5X3BoYXNlcyB8fCBbJ2dlbmVyYXRlJywgJ2xheW91dCddLFxuICAgICAgcmVzLmVhcmxpZXN0X2RpcnR5X3N0ZXAgfHwgJ2dlbmVyYXRlJyxcbiAgICApO1xuXG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgYFx1MjcwNSAke3Jlcy5hcHBsaWVkX2NvdW50fSBjb250ZW50IGNoYW5nZSR7cmVzLmFwcGxpZWRfY291bnQgIT09IDEgPyAncycgOiAnJ30gc3RhZ2VkLiBSZXR1cm4gdG8gR2VuZXJhdGUgQ1YgdG8gYXBwbHkgdGhlbS5gKTtcblxuICAgIC8vIENsZWFyIHRoZSBwcm9wb3NhbCBwYW5lbFxuICAgIGlmIChwYW5lbCkgeyBwYW5lbC5pbm5lckhUTUwgPSAnJzsgcGFuZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgcGFuZWwuZGF0YXNldC5wcm9wb3NhbHMgPSAnW10nOyB9XG4gICAgaWYgKGFwcGx5QnRuKSBhcHBseUJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgcmVmcmVzaExheW91dFJldmlld1N0YXRlKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdTI3NEMgQ291bGQgbm90IGFwcGx5IGNvbnRlbnQgY2hhbmdlcy4gQ2hlY2sgeW91ciBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4uYCk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGFwcGx5QnRuKSBhcHBseUJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogU2hvdyBvciBoaWRlIHRoZSBkaXJ0eS1waGFzZXMgY2FsbG91dCBiYXNlZCBvbiBzdGF0ZU1hbmFnZXIuZ2V0RGlydHlQaGFzZXMoKS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyRGlydHlQaGFzZXNDYWxsb3V0KCkge1xuICBjb25zdCBjYWxsb3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpcnR5LXBoYXNlcy1jYWxsb3V0Jyk7XG4gIGlmICghY2FsbG91dCkgcmV0dXJuO1xuICBjb25zdCBkaXJ0eSA9IHN0YXRlTWFuYWdlci5nZXREaXJ0eVBoYXNlcygpO1xuICBjYWxsb3V0LnN0eWxlLmRpc3BsYXkgPSBkaXJ0eS5sZW5ndGggPiAwID8gJ2Jsb2NrJyA6ICdub25lJztcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEVTIG1vZHVsZSBleHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZXhwb3J0IHtcbiAgaW5pdGlhdGVMYXlvdXRJbnN0cnVjdGlvbnMsXG4gIGNvbXBsZXRlTGF5b3V0UmV2aWV3LFxuICBjb25maXJtTGF5b3V0UmV2aWV3LFxuICBnZW5lcmF0ZUZpbmFsT3V0cHV0cyxcbiAgaGFuZGxlTGF5b3V0UHJpbWFyeUFjdGlvbixcbiAgbG9hZExheW91dEluc3RydWN0aW9uSGlzdG9yeSxcbiAgcmVuZGVyUHJldmlld091dHB1dFN0YXR1cyxcbiAgcmVuZGVyTGF5b3V0UHJldmlld1N0YXR1cyxcbiAgZGlzcGxheUxheW91dFByZXZpZXcsXG4gIHN1Ym1pdExheW91dEluc3RydWN0aW9uLFxuICBzdWJtaXRTbWFydEluc3RydWN0aW9uLFxuICAvLyBoZWxwZXJzIGV4cG9ydGVkIGZvciB1bml0IHRlc3RzXG4gIHNob3dQcm9jZXNzaW5nLFxuICBzaG93Q29uZmlybWF0aW9uTWVzc2FnZSxcbiAgcmVuZGVySW5zdHJ1Y3Rpb25IaXN0b3J5LFxuICBhZGRUb0luc3RydWN0aW9uSGlzdG9yeSxcbiAgdW5kb0luc3RydWN0aW9uLFxuICAvLyBjb250ZW50IHByb3Bvc2FsXG4gIHN1Ym1pdENvbnRlbnRQcm9wb3NhbCxcbiAgcmVuZGVyQ29udGVudFByb3Bvc2FscyxcbiAgYXBwbHlBY2NlcHRlZFByb3Bvc2FscyxcbiAgcmVuZGVyRGlydHlQaGFzZXNDYWxsb3V0LFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL2F0cy1yZWZpbmVtZW50LmpzXG4gKiBBVFMgc2NvcmUgYmFkZ2UgZGlzcGxheSBhbmQgZGVib3VuY2VkIHJlZnJlc2ggc2NoZWR1bGluZy5cbiAqXG4gKiBERVBFTkRFTkNJRVM6XG4gKiAgIC0gZ2xvYmFsVGhpcy5zdGF0ZU1hbmFnZXIgZnJvbSBzdGF0ZS1tYW5hZ2VyLmpzIChhY2Nlc3NlZCB2aWEgZ2xvYmFsVGhpcyB0aHJvdWdob3V0KVxuICovXG5cbmZ1bmN0aW9uIF9kaXNwYXRjaEF0c1Njb3JlVXBkYXRlZCgpIHtcbiAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2F0cy1zY29yZS11cGRhdGVkJykpO1xufVxuXG5mdW5jdGlvbiBfc2FmZVRleHQodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS50cmltKCkgOiAnJztcbn1cblxuZnVuY3Rpb24gX2NvZXJjZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIDoge307XG59XG5cbmZ1bmN0aW9uIF9mb3JtYXREYXRlTGFiZWwodmFsdWUpIHtcbiAgY29uc3QgdGV4dCA9IF9zYWZlVGV4dCh2YWx1ZSk7XG4gIGlmICghdGV4dCkgcmV0dXJuICcnO1xuXG4gIGlmICgvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdCh0ZXh0KSkge1xuICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IHRleHQuc3BsaXQoJy0nKTtcbiAgICByZXR1cm4gYCR7bW9udGh9LyR7ZGF5fS8ke3llYXJ9YDtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKHRleHQpO1xuICBpZiAoIU51bWJlci5pc05hTihwYXJzZWQuZ2V0VGltZSgpKSkge1xuICAgIHJldHVybiBwYXJzZWQudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7XG4gIH1cbiAgcmV0dXJuIHRleHQ7XG59XG5cbmZ1bmN0aW9uIF9nZXRQYWdlTGVuZ3RoTGFiZWwoKSB7XG4gIGNvbnN0IGdlbmVyYXRpb25TdGF0ZSA9IF9jb2VyY2VPYmplY3QoZ2xvYmFsVGhpcy5zdGF0ZU1hbmFnZXI/LmdldEdlbmVyYXRpb25TdGF0ZT8uKCkpO1xuICBjb25zdCBleGFjdCA9IE51bWJlcihnZW5lcmF0aW9uU3RhdGUucGFnZUNvdW50RXhhY3QpO1xuICBpZiAoTnVtYmVyLmlzRmluaXRlKGV4YWN0KSAmJiBleGFjdCA+IDApIHtcbiAgICByZXR1cm4gYExlbmd0aCAke2V4YWN0fSBwYWdlJHtleGFjdCA9PT0gMSA/ICcnIDogJ3MnfWA7XG4gIH1cblxuICBjb25zdCBlc3RpbWF0ZSA9IE51bWJlcihnZW5lcmF0aW9uU3RhdGUucGFnZUNvdW50RXN0aW1hdGUpO1xuICBpZiAoTnVtYmVyLmlzRmluaXRlKGVzdGltYXRlKSAmJiBlc3RpbWF0ZSA+IDApIHtcbiAgICByZXR1cm4gYExlbmd0aCAke2VzdGltYXRlLnRvRml4ZWQoMSl9IHBhZ2VzIGVzdGA7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIF9nZXRKb2JTdW1tYXJ5TGFiZWwoKSB7XG4gIGNvbnN0IGludGFrZSA9IF9jb2VyY2VPYmplY3Qod2luZG93Ll9zdGF0dXNJbnRha2UpO1xuICBjb25zdCBhbmFseXNpcyA9IF9jb2VyY2VPYmplY3QoZ2xvYmFsVGhpcy5zdGF0ZU1hbmFnZXI/LmdldFRhYkRhdGE/LignYW5hbHlzaXMnKSk7XG4gIGNvbnN0IHBvc2l0aW9uRmFsbGJhY2sgPSBfc2FmZVRleHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bvc2l0aW9uLXRpdGxlJyk/LnRleHRDb250ZW50IHx8ICcnKTtcblxuICBjb25zdCByb2xlID0gX3NhZmVUZXh0KFxuICAgIGludGFrZS5yb2xlXG4gICAgICB8fCBhbmFseXNpcy5qb2JfdGl0bGVcbiAgICAgIHx8IGFuYWx5c2lzLnRpdGxlXG4gICAgICB8fCBhbmFseXNpcy5wb3NpdGlvbl9uYW1lXG4gICAgICB8fCAnJ1xuICApO1xuICBjb25zdCBjb21wYW55ID0gX3NhZmVUZXh0KGludGFrZS5jb21wYW55IHx8IGFuYWx5c2lzLmNvbXBhbnlfbmFtZSB8fCBhbmFseXNpcy5jb21wYW55IHx8ICcnKTtcbiAgY29uc3QgZGF0ZUFwcGxpZWQgPSBfZm9ybWF0RGF0ZUxhYmVsKFxuICAgIGludGFrZS5kYXRlX2FwcGxpZWRcbiAgICAgIHx8IGFuYWx5c2lzLmRhdGVfYXBwbGllZFxuICAgICAgfHwgYW5hbHlzaXMuYXBwbGljYXRpb25fZGF0ZVxuICAgICAgfHwgJydcbiAgKTtcblxuICBjb25zdCBwcmltYXJ5ID0gcm9sZSAmJiBjb21wYW55XG4gICAgPyBgJHtyb2xlfSBAICR7Y29tcGFueX1gXG4gICAgOiAocm9sZSB8fCBjb21wYW55IHx8IHBvc2l0aW9uRmFsbGJhY2spO1xuICBpZiAoIXByaW1hcnkpIHJldHVybiAnJztcbiAgaWYgKCFkYXRlQXBwbGllZCkgcmV0dXJuIHByaW1hcnk7XG4gIHJldHVybiBgJHtwcmltYXJ5fSAoJHtkYXRlQXBwbGllZH0pYDtcbn1cblxuZnVuY3Rpb24gX2tleXdvcmRDb3VudChrZXl3b3JkcywgdHlwZSwgc3RhdHVzZXMgPSBbJ21hdGNoZWQnLCAncGFydGlhbCddKSB7XG4gIHJldHVybiBrZXl3b3Jkcy5maWx0ZXIoa2V5d29yZCA9PiBrZXl3b3JkLnR5cGUgPT09IHR5cGUgJiYgc3RhdHVzZXMuaW5jbHVkZXMoa2V5d29yZC5zdGF0dXMpKS5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIF9idWlsZFN1bW1hcnlEZXRhaWwoc2NvcmUsIGtleXdvcmRzKSB7XG4gIGNvbnN0IG1pc3NpbmdIYXJkID0ga2V5d29yZHNcbiAgICAuZmlsdGVyKGtleXdvcmQgPT4ga2V5d29yZC50eXBlID09PSAnaGFyZCcgJiYga2V5d29yZC5zdGF0dXMgPT09ICdtaXNzaW5nJylcbiAgICAubWFwKGtleXdvcmQgPT4ga2V5d29yZC5rZXl3b3JkKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKG1pc3NpbmdIYXJkLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBwcmV2aWV3ID0gbWlzc2luZ0hhcmQuc2xpY2UoMCwgMikuam9pbignLCAnKTtcbiAgICBjb25zdCBzdWZmaXggPSBtaXNzaW5nSGFyZC5sZW5ndGggPiAyID8gYCArJHttaXNzaW5nSGFyZC5sZW5ndGggLSAyfSBtb3JlYCA6ICcnO1xuICAgIHJldHVybiBgTWlzc2luZyBoYXJkOiAke3ByZXZpZXd9JHtzdWZmaXh9YDtcbiAgfVxuXG4gIGNvbnN0IGV4YWN0ID0ga2V5d29yZHMuZmlsdGVyKGtleXdvcmQgPT4ga2V5d29yZC5tYXRjaF90eXBlID09PSAnZXhhY3QnIHx8IGtleXdvcmQubWF0Y2hfdHlwZSA9PT0gJ3N5bm9ueW0nKS5sZW5ndGg7XG4gIGNvbnN0IHBhcnRpYWwgPSBrZXl3b3Jkcy5maWx0ZXIoa2V5d29yZCA9PiBrZXl3b3JkLm1hdGNoX3R5cGUgPT09ICdwYXJ0aWFsJykubGVuZ3RoO1xuICBjb25zdCB0b3BTZWN0aW9ucyA9IE9iamVjdC5lbnRyaWVzKHNjb3JlLnNlY3Rpb25fc2NvcmVzIHx8IHt9KVxuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+IDApXG4gICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiByaWdodFsxXSAtIGxlZnRbMV0pXG4gICAgLnNsaWNlKDAsIDIpXG4gICAgLm1hcCgoW3NlY3Rpb24sIHZhbHVlXSkgPT4gYCR7c2VjdGlvbn0gJHtNYXRoLnJvdW5kKHZhbHVlKX0lYCk7XG5cbiAgaWYgKHRvcFNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gYFRvcCBzZWN0aW9uczogJHt0b3BTZWN0aW9ucy5qb2luKCcgXHUyMDIyICcpfWA7XG4gIH1cblxuICBpZiAoZXhhY3QgPiAwIHx8IHBhcnRpYWwgPiAwKSB7XG4gICAgcmV0dXJuIGBNYXRjaCBxdWFsaXR5OiAke2V4YWN0fSBleGFjdCBcdTIwMjIgJHtwYXJ0aWFsfSBwYXJ0aWFsYDtcbiAgfVxuXG4gIHJldHVybiBgQmFzaXM6ICR7c2NvcmUuYmFzaXMgfHwgJ3Jldmlldyd9YDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0QXRzU2NvcmVTdW1tYXJ5KHNjb3JlKSB7XG4gIGNvbnN0IGtleXdvcmRzID0gQXJyYXkuaXNBcnJheShzY29yZT8ua2V5d29yZF9zdGF0dXMpID8gc2NvcmUua2V5d29yZF9zdGF0dXMgOiBbXTtcbiAgY29uc3Qgb3ZlcmFsbCA9IHR5cGVvZiBzY29yZT8ub3ZlcmFsbCA9PT0gJ251bWJlcicgPyBNYXRoLnJvdW5kKHNjb3JlLm92ZXJhbGwpIDogbnVsbDtcblxuICBpZiAob3ZlcmFsbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB7IG92ZXJhbGw6IG51bGwsIGxpbmU6ICcnLCBkZXRhaWw6ICcnLCBrZXl3b3JkcyB9O1xuICB9XG5cbiAgaWYgKGtleXdvcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBvdmVyYWxsLFxuICAgICAgbGluZTogYE92ZXJhbGwgJHtvdmVyYWxsfSVgLFxuICAgICAgZGV0YWlsOiBgQmFzaXM6ICR7c2NvcmUuYmFzaXMgfHwgJ3Jldmlldyd9YCxcbiAgICAgIGtleXdvcmRzLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBoYXJkVG90YWwgPSBrZXl3b3Jkcy5maWx0ZXIoa2V5d29yZCA9PiBrZXl3b3JkLnR5cGUgPT09ICdoYXJkJykubGVuZ3RoO1xuICBjb25zdCBzb2Z0VG90YWwgPSBrZXl3b3Jkcy5maWx0ZXIoa2V5d29yZCA9PiBrZXl3b3JkLnR5cGUgPT09ICdzb2Z0JykubGVuZ3RoO1xuICBjb25zdCBib251c1RvdGFsID0ga2V5d29yZHMuZmlsdGVyKGtleXdvcmQgPT4ga2V5d29yZC50eXBlID09PSAnYm9udXMnKS5sZW5ndGg7XG4gIGNvbnN0IHN1bW1hcnlQYXJ0cyA9IFtdO1xuXG4gIGlmIChoYXJkVG90YWwgPiAwKSB7XG4gICAgc3VtbWFyeVBhcnRzLnB1c2goYEhhcmQgJHtfa2V5d29yZENvdW50KGtleXdvcmRzLCAnaGFyZCcpfS8ke2hhcmRUb3RhbH1gKTtcbiAgfVxuICBpZiAoc29mdFRvdGFsID4gMCkge1xuICAgIHN1bW1hcnlQYXJ0cy5wdXNoKGBTb2Z0ICR7X2tleXdvcmRDb3VudChrZXl3b3JkcywgJ3NvZnQnKX0vJHtzb2Z0VG90YWx9YCk7XG4gIH1cbiAgaWYgKGJvbnVzVG90YWwgPiAwKSB7XG4gICAgc3VtbWFyeVBhcnRzLnB1c2goYEJvbnVzICR7X2tleXdvcmRDb3VudChrZXl3b3JkcywgJ2JvbnVzJyl9LyR7Ym9udXNUb3RhbH1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb3ZlcmFsbCxcbiAgICBsaW5lOiBzdW1tYXJ5UGFydHMuam9pbignIFx1MjAyMiAnKSB8fCBgT3ZlcmFsbCAke292ZXJhbGx9JWAsXG4gICAgZGV0YWlsOiBfYnVpbGRTdW1tYXJ5RGV0YWlsKHNjb3JlLCBrZXl3b3JkcyksXG4gICAga2V5d29yZHMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVBdHNTdW1tYXJ5KHNjb3JlKSB7XG4gIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdHMtc2NvcmUtaGVhZGVyJyk7XG4gIGNvbnN0IHN1bW1hcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXRzLXNjb3JlLXN1bW1hcnknKTtcbiAgY29uc3Qgc3VtbWFyeUxpbmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXRzLXNjb3JlLXN1bW1hcnktbGluZScpO1xuICBjb25zdCBzdW1tYXJ5RGV0YWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F0cy1zY29yZS1zdW1tYXJ5LWRldGFpbCcpO1xuXG4gIGlmICghaGVhZGVyIHx8ICFzdW1tYXJ5IHx8ICFzdW1tYXJ5TGluZSB8fCAhc3VtbWFyeURldGFpbCkgcmV0dXJuO1xuXG4gIGNvbnN0IGtleXdvcmRzID0gQXJyYXkuaXNBcnJheShzY29yZT8ua2V5d29yZF9zdGF0dXMpID8gc2NvcmUua2V5d29yZF9zdGF0dXMgOiBbXTtcbiAgY29uc3QgaGFzU2NvcmUgPSBzY29yZSAmJiB0eXBlb2Ygc2NvcmUub3ZlcmFsbCA9PT0gJ251bWJlcic7XG4gIGNvbnN0IHBhZ2VMZW5ndGhMYWJlbCA9IF9nZXRQYWdlTGVuZ3RoTGFiZWwoKTtcbiAgY29uc3Qgam9iU3VtbWFyeUxhYmVsID0gX2dldEpvYlN1bW1hcnlMYWJlbCgpO1xuXG4gIGlmICghaGFzU2NvcmUpIHtcbiAgICBoZWFkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBzdW1tYXJ5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgc3VtbWFyeUxpbmUudGV4dENvbnRlbnQgPSAnJztcbiAgICBzdW1tYXJ5RGV0YWlsLnRleHRDb250ZW50ID0gJyc7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaGVhZGVyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG5cbiAgY29uc3Qgc3VtbWFyeUNvbnRlbnQgPSBmb3JtYXRBdHNTY29yZVN1bW1hcnkoc2NvcmUpO1xuICBjb25zdCBsaW5lUGFydHMgPSBbc3VtbWFyeUNvbnRlbnQubGluZSwgcGFnZUxlbmd0aExhYmVsXS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IGRldGFpbFBhcnRzID0gW2pvYlN1bW1hcnlMYWJlbCwgc3VtbWFyeUNvbnRlbnQuZGV0YWlsXS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKGxpbmVQYXJ0cy5sZW5ndGggPT09IDAgJiYgZGV0YWlsUGFydHMubGVuZ3RoID09PSAwICYmIGtleXdvcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHN1bW1hcnkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBzdW1tYXJ5TGluZS50ZXh0Q29udGVudCA9ICcnO1xuICAgIHN1bW1hcnlEZXRhaWwudGV4dENvbnRlbnQgPSAnJztcbiAgICByZXR1cm47XG4gIH1cblxuICBzdW1tYXJ5TGluZS50ZXh0Q29udGVudCA9IGxpbmVQYXJ0cy5qb2luKCcgXHUyMDIyICcpO1xuICBzdW1tYXJ5RGV0YWlsLnRleHRDb250ZW50ID0gZGV0YWlsUGFydHMuam9pbignIFx1MjAyMiAnKTtcbiAgc3VtbWFyeS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVBdHNCYWRnZShzY29yZSkge1xuICBfdXBkYXRlQXRzU3VtbWFyeShzY29yZSk7XG5cbiAgY29uc3QgYmFkZ2UgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdHMtc2NvcmUtYmFkZ2UnKTtcbiAgY29uc3QgdmFsdWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdHMtc2NvcmUtdmFsdWUnKTtcbiAgaWYgKCFiYWRnZSB8fCAhdmFsdWVFbCkge1xuICAgIF9kaXNwYXRjaEF0c1Njb3JlVXBkYXRlZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghc2NvcmUgfHwgdHlwZW9mIHNjb3JlLm92ZXJhbGwgIT09ICdudW1iZXInKSB7XG4gICAgYmFkZ2Uuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBfZGlzcGF0Y2hBdHNTY29yZVVwZGF0ZWQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvdmVyYWxsID0gTWF0aC5yb3VuZChzY29yZS5vdmVyYWxsKTtcbiAgdmFsdWVFbC50ZXh0Q29udGVudCA9IGAke292ZXJhbGx9JWA7XG4gIGJhZGdlLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG5cbiAgYmFkZ2UuY2xhc3NMaXN0LnJlbW92ZSgnc2NvcmUtaGlnaCcsICdzY29yZS1tZWRpdW0nLCAnc2NvcmUtbG93Jyk7XG4gIGlmIChvdmVyYWxsID49IDc1KSB7XG4gICAgYmFkZ2UuY2xhc3NMaXN0LmFkZCgnc2NvcmUtaGlnaCcpO1xuICB9IGVsc2UgaWYgKG92ZXJhbGwgPj0gNTApIHtcbiAgICBiYWRnZS5jbGFzc0xpc3QuYWRkKCdzY29yZS1tZWRpdW0nKTtcbiAgfSBlbHNlIHtcbiAgICBiYWRnZS5jbGFzc0xpc3QuYWRkKCdzY29yZS1sb3cnKTtcbiAgfVxuXG4gIGJhZGdlLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGBBVFMgbWF0Y2ggc2NvcmU6ICR7b3ZlcmFsbH0lICgke3Njb3JlLmJhc2lzIHx8ICdyZXZpZXcnfSlgKTtcbiAgX2Rpc3BhdGNoQXRzU2NvcmVVcGRhdGVkKCk7XG59XG5cbi8qKlxuICogRmV0Y2ggQVRTIHNjb3JlIGZyb20gYmFja2VuZCBhbmQgdXBkYXRlIGJhZGdlICsgc3RhdGVNYW5hZ2VyLlxuICogU2FmZSB0byBjYWxsIGF0IGFueSBwaGFzZSBcdTIwMTQgZG9lcyBub3RoaW5nIHdoZW4gbm8gc2Vzc2lvbi9hbmFseXNpcyBhdmFpbGFibGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtiYXNpc10gIFwiYW5hbHlzaXNcIiB8IFwicmV2aWV3X2NoZWNrcG9pbnRcIiB8IFwicG9zdF9nZW5lcmF0aW9uXCJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEF0c1Njb3JlKGJhc2lzID0gJ3Jldmlld19jaGVja3BvaW50Jykge1xuICBjb25zdCBzZXNzaW9uSWQgPSBnbG9iYWxUaGlzLnN0YXRlTWFuYWdlcj8uZ2V0U2Vzc2lvbklkPy4oKTtcbiAgaWYgKCFzZXNzaW9uSWQpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9jdi9hdHMtc2NvcmUnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzZXNzaW9uX2lkOiBzZXNzaW9uSWQsIGJhc2lzIH0pLFxuICAgIH0pO1xuICAgIGlmICghcmVzLm9rKSByZXR1cm47XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2sgJiYgZGF0YS5hdHNfc2NvcmUpIHtcbiAgICAgIGdsb2JhbFRoaXMuc3RhdGVNYW5hZ2VyPy5zZXRBdHNTY29yZT8uKGRhdGEuYXRzX3Njb3JlKTtcbiAgICAgIHVwZGF0ZUF0c0JhZGdlKGRhdGEuYXRzX3Njb3JlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKF9lKSB7XG4gICAgLy8gTm9uLWZhdGFsIFx1MjAxNCBiYWRnZSBzdGF5cyBoaWRkZW4gb3Igc2hvd3Mgc3RhbGUgdmFsdWVcbiAgfVxufVxuXG4vKiogRGVib3VuY2VkOiBkZWZlcnMgcmVmcmVzaCA2MDBtcyBhZnRlciB0aGUgbGFzdCBjYWxsLiAqL1xubGV0IF9hdHNSZWZyZXNoVGltZXIgPSBudWxsO1xuZnVuY3Rpb24gc2NoZWR1bGVBdHNSZWZyZXNoKGJhc2lzID0gJ3Jldmlld19jaGVja3BvaW50Jykge1xuICBjbGVhclRpbWVvdXQoX2F0c1JlZnJlc2hUaW1lcik7XG4gIF9hdHNSZWZyZXNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlZnJlc2hBdHNTY29yZShiYXNpcyksIDYwMCk7XG59XG5cbmZ1bmN0aW9uIF9yZWZyZXNoU3VtbWFyeUZyb21TdGF0ZSgpIHtcbiAgY29uc3Qgc2NvcmUgPSBnbG9iYWxUaGlzLnN0YXRlTWFuYWdlcj8uZ2V0QXRzU2NvcmU/LigpO1xuICBpZiAoc2NvcmUgJiYgdHlwZW9mIHNjb3JlLm92ZXJhbGwgPT09ICdudW1iZXInKSB7XG4gICAgX3VwZGF0ZUF0c1N1bW1hcnkoc2NvcmUpO1xuICB9XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY3ZidWlsZGVyOmdlbmVyYXRpb24tc3RhdGUtY2hhbmdlZCcsICgpID0+IHtcbiAgICBfcmVmcmVzaFN1bW1hcnlGcm9tU3RhdGUoKTtcbiAgfSk7XG59XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gIGNvbnN0IHBvc2l0aW9uVGl0bGVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3NpdGlvbi10aXRsZScpO1xuICBpZiAocG9zaXRpb25UaXRsZUVsICYmIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHRpdGxlT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICBfcmVmcmVzaFN1bW1hcnlGcm9tU3RhdGUoKTtcbiAgICB9KTtcbiAgICB0aXRsZU9ic2VydmVyLm9ic2VydmUocG9zaXRpb25UaXRsZUVsLCB7XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgRVMgbW9kdWxlIGV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQgeyB1cGRhdGVBdHNCYWRnZSwgcmVmcmVzaEF0c1Njb3JlLCBzY2hlZHVsZUF0c1JlZnJlc2gsIGZvcm1hdEF0c1Njb3JlU3VtbWFyeSB9O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvbWVzc2FnZS1xdWV1ZS5qc1xuICogQ29udmVyc2F0aW9uIG1lc3NhZ2UgYXBwZW5kaW5nLCBsb2FkaW5nIG1lc3NhZ2VzLCBhbmQgdGhlIHByZS1ET00gYnVmZmVyXG4gKiBxdWV1ZSB0aGF0IGhvbGRzIG1lc3NhZ2VzIGVtaXR0ZWQgYmVmb3JlICNjb252ZXJzYXRpb24gZXhpc3RzLlxuICpcbiAqIERFUEVOREVOQ0lFUzpcbiAqICAgLSBjbGVhbkpzb25SZXNwb25zZSwgZXNjYXBlSHRtbCBmcm9tIHV0aWxzLmpzXG4gKiAgIC0gc2VuZE1lc3NhZ2UgZnJvbSBtZXNzYWdlLWRpc3BhdGNoLmpzIChvbiBnbG9iYWxUaGlzLCBmb3IgaW5saW5lIGJ1dHRvbnMpXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgY2xlYW5Kc29uUmVzcG9uc2UsIGVzY2FwZUh0bWwgfSBmcm9tICcuL3V0aWxzLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcignbWVzc2FnZS1xdWV1ZScpO1xuXG4vLyBCdWZmZXIgZm9yIG1lc3NhZ2VzIGVtaXR0ZWQgYmVmb3JlIHRoZSAjY29udmVyc2F0aW9uIGRpdiBleGlzdHMuXG4vLyBGbHVzaGVkIGF0IHRoZSBzdGFydCBvZiBpbml0KCkgb25jZSB0aGUgRE9NIGlzIGZ1bGx5IHJlYWR5LlxuY29uc3QgX21lc3NhZ2VRdWV1ZSA9IFtdO1xuXG5mdW5jdGlvbiBfZmx1c2hNZXNzYWdlUXVldWUoKSB7XG4gIHdoaWxlIChfbWVzc2FnZVF1ZXVlLmxlbmd0aCkge1xuICAgIGNvbnN0IHsgdHlwZSwgdGV4dCB9ID0gX21lc3NhZ2VRdWV1ZS5zaGlmdCgpO1xuICAgIGFwcGVuZE1lc3NhZ2UodHlwZSwgdGV4dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwZW5kTG9hZGluZ01lc3NhZ2UodGV4dCkge1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udmVyc2F0aW9uJyk7XG4gIGNvbnN0IG1lc3NhZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbWVzc2FnZS5jbGFzc05hbWUgPSAnbWVzc2FnZSBzeXN0ZW0nO1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNvbnRlbnQuY2xhc3NOYW1lID0gJ2NvbnRlbnQgbG9hZGluZy1tZXNzYWdlJztcbiAgY29udGVudC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPjwvZGl2PjxzcGFuPiR7dGV4dH08L3NwYW4+YDtcbiAgbWVzc2FnZS5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgY29udmVyc2F0aW9uLmFwcGVuZENoaWxkKG1lc3NhZ2UpO1xuICBjb252ZXJzYXRpb24uc2Nyb2xsVG9wID0gY29udmVyc2F0aW9uLnNjcm9sbEhlaWdodDtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUxvYWRpbmdNZXNzYWdlKG1lc3NhZ2VFbGVtZW50KSB7XG4gIGlmIChtZXNzYWdlRWxlbWVudCAmJiBtZXNzYWdlRWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgbWVzc2FnZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChtZXNzYWdlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqIFJlc3RvcmVzIGEgcHJldmlvdXNseS1zYXZlZCBtZXNzYWdlIHdob3NlIGNvbnRlbnQgaXMgYWxyZWFkeSBIVE1MIChzYXZlZCB2aWEgaW5uZXJIVE1MKS4gKi9cbmZ1bmN0aW9uIGFwcGVuZE1lc3NhZ2VIdG1sKHR5cGUsIGh0bWwpIHtcbiAgY29uc3QgY29udmVyc2F0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnZlcnNhdGlvbicpO1xuICBjb25zdCBtZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG1lc3NhZ2UuY2xhc3NOYW1lID0gYG1lc3NhZ2UgJHt0eXBlfWA7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgY29udGVudC5jbGFzc05hbWUgPSAnY29udGVudCc7XG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgbWVzc2FnZS5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgY29udmVyc2F0aW9uLmFwcGVuZENoaWxkKG1lc3NhZ2UpO1xuICBjb252ZXJzYXRpb24uc2Nyb2xsVG9wID0gY29udmVyc2F0aW9uLnNjcm9sbEhlaWdodDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb2xsYXBzaWJsZSBsb25nLWNvbnRlbnQgaGVscGVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgQ09MTEFQU0VfTElORV9USFJFU0hPTEQgPSA4OyAgLy8gbGluZXMgYmVmb3JlIGNvbGxhcHNpbmdcbmNvbnN0IENPTExBUFNFX0NIQVJfVEhSRVNIT0xEID0gNDgwOyAvLyBjaGFycyBiZWZvcmUgY29sbGFwc2luZ1xuXG4vKipcbiAqIFdyYXAgcmVuZGVyZWQgSFRNTCBpbiBhIGNvbGxhcHNpYmxlIGNvbnRhaW5lciB3aGVuIHRoZSBjb250ZW50IGV4Y2VlZHMgdGhlXG4gKiB0aHJlc2hvbGQsIHNob3dpbmcgdGhlIGZpcnN0IGZldyBsaW5lcyB3aXRoIGEgdG9nZ2xlIGJ1dHRvbi5cbiAqL1xuZnVuY3Rpb24gX21ha2VDb2xsYXBzaWJsZUNvbnRlbnQoaHRtbCwgdGV4dFN0cikge1xuICBjb25zdCBsaW5lcyA9IHRleHRTdHIuc3BsaXQoJ1xcbicpO1xuICBpZiAobGluZXMubGVuZ3RoIDw9IENPTExBUFNFX0xJTkVfVEhSRVNIT0xEICYmIHRleHRTdHIubGVuZ3RoIDw9IENPTExBUFNFX0NIQVJfVEhSRVNIT0xEKSB7XG4gICAgcmV0dXJuIHsgaHRtbCwgY29sbGFwc2libGU6IGZhbHNlIH07XG4gIH1cblxuICAvLyBCdWlsZCBwcmV2aWV3OiBmaXJzdCBDT0xMQVBTRV9MSU5FX1RIUkVTSE9MRCBsaW5lcyB3b3J0aCBvZiBlc2NhcGVkIHRleHRcbiAgY29uc3QgcHJldmlld0xpbmVzID0gbGluZXMuc2xpY2UoMCwgQ09MTEFQU0VfTElORV9USFJFU0hPTEQpO1xuICBjb25zdCBwcmV2aWV3SHRtbCA9IGVzY2FwZUh0bWwocHJldmlld0xpbmVzLmpvaW4oJ1xcbicpKVxuICAgIC5yZXBsYWNlKC9cXCpcXCooLis/KVxcKlxcKi9nLCAnPHN0cm9uZz4kMTwvc3Ryb25nPicpXG4gICAgLnJlcGxhY2UoL1xcKiguKz8pXFwqL2csICc8ZW0+JDE8L2VtPicpXG4gICAgLnJlcGxhY2UoL2AoW15gXSspYC9nLCAnPGNvZGU+JDE8L2NvZGU+JylcbiAgICAucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XG5cbiAgY29uc3Qgb3ZlcmZsb3cgPSBsaW5lcy5sZW5ndGggLSBDT0xMQVBTRV9MSU5FX1RIUkVTSE9MRDtcbiAgY29uc3QgaWQgPSBgY29sbGFwc2libGUtJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDcpfWA7XG5cbiAgY29uc3Qgd3JhcHBlZCA9IGBcbiAgICA8ZGl2IGNsYXNzPVwibXNnLXByZXZpZXdcIiBpZD1cIiR7aWR9LXByZXZpZXdcIj4ke3ByZXZpZXdIdG1sfTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtc2ctZnVsbFwiIGlkPVwiJHtpZH0tZnVsbFwiIHN0eWxlPVwiZGlzcGxheTpub25lXCI+JHtodG1sfTwvZGl2PlxuICAgIDxidXR0b24gY2xhc3M9XCJtc2ctdG9nZ2xlLWJ0blwiIG9uY2xpY2s9XCIoZnVuY3Rpb24oYnRuKXtcbiAgICAgIHZhciBwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcke2lkfS1wcmV2aWV3JyksXG4gICAgICAgICAgZj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnJHtpZH0tZnVsbCcpO1xuICAgICAgaWYoZi5zdHlsZS5kaXNwbGF5PT09J25vbmUnKXtcbiAgICAgICAgcC5zdHlsZS5kaXNwbGF5PSdub25lJzsgZi5zdHlsZS5kaXNwbGF5PSdibG9jayc7IGJ0bi50ZXh0Q29udGVudD0nU2hvdyBsZXNzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHAuc3R5bGUuZGlzcGxheT0nJzsgZi5zdHlsZS5kaXNwbGF5PSdub25lJzsgYnRuLnRleHRDb250ZW50PSdTaG93ICR7b3ZlcmZsb3d9IG1vcmUgbGluZSR7b3ZlcmZsb3cgPT09IDEgPyAnJyA6ICdzJ31cdTIwMjYnO1xuICAgICAgfVxuICAgIH0pKHRoaXMpXCIgdHlwZT1cImJ1dHRvblwiPlNob3cgJHtvdmVyZmxvd30gbW9yZSBsaW5lJHtvdmVyZmxvdyA9PT0gMSA/ICcnIDogJ3MnfVx1MjAyNjwvYnV0dG9uPmA7XG5cbiAgcmV0dXJuIHsgaHRtbDogd3JhcHBlZCwgY29sbGFwc2libGU6IHRydWUgfTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kTWVzc2FnZSh0eXBlLCB0ZXh0KSB7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb252ZXJzYXRpb24nKTtcbiAgaWYgKCFjb252ZXJzYXRpb24pIHtcbiAgICAvLyBET00gbm90IHJlYWR5IHlldCBcdTIwMTQgYnVmZmVyIHVudGlsIF9mbHVzaE1lc3NhZ2VRdWV1ZSgpIGlzIGNhbGxlZCBmcm9tIGluaXQoKVxuICAgIF9tZXNzYWdlUXVldWUucHVzaCh7IHR5cGUsIHRleHQgfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBtZXNzYWdlLmNsYXNzTmFtZSA9IGBtZXNzYWdlICR7dHlwZX1gO1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNvbnRlbnQuY2xhc3NOYW1lID0gJ2NvbnRlbnQnO1xuXG4gIC8vIFNpbXBsZSBtYXJrZG93biByZW5kZXJpbmc6IGNvbnZlcnQgKip0ZXh0KiogdG8gPHN0cm9uZz4gYW5kIHByZXNlcnZlIG5ld2xpbmVzXG4gIGNvbnN0IHRleHRTdHIgPSB0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgPyB0ZXh0IDogSlNPTi5zdHJpbmdpZnkodGV4dCwgbnVsbCwgMik7XG4gIGNvbnN0IHJlbmRlcmVkSHRtbCA9IGVzY2FwZUh0bWwodGV4dFN0cilcbiAgICAucmVwbGFjZSgvXFwqXFwqKC4rPylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKVxuICAgIC5yZXBsYWNlKC9cXCooLis/KVxcKi9nLCAnPGVtPiQxPC9lbT4nKVxuICAgIC5yZXBsYWNlKC9gKFteYF0rKWAvZywgJzxjb2RlPiQxPC9jb2RlPicpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCAnPGJyPicpO1xuXG4gIC8vIEFwcGx5IGNvbGxhcHNpYmxlIHdyYXBwZXIgZm9yIGxvbmcgdXNlci9hc3Npc3RhbnQgbWVzc2FnZXNcbiAgaWYgKHR5cGUgPT09ICd1c2VyJyB8fCB0eXBlID09PSAnYXNzaXN0YW50Jykge1xuICAgIGNvbnN0IHsgaHRtbCwgY29sbGFwc2libGUgfSA9IF9tYWtlQ29sbGFwc2libGVDb250ZW50KHJlbmRlcmVkSHRtbCwgdGV4dFN0cik7XG4gICAgY29udGVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgIGlmIChjb2xsYXBzaWJsZSkgY29udGVudC5jbGFzc0xpc3QuYWRkKCdjb2xsYXBzaWJsZS1tc2cnKTtcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50LmlubmVySFRNTCA9IHJlbmRlcmVkSHRtbDtcbiAgfVxuICBtZXNzYWdlLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuXG4gIC8vIENoZWNrIGlmIG1lc3NhZ2UgZW5kcyB3aXRoIHJlc3BvbnNlIG9wdGlvbnMgbGlrZSAoeWVzL25vL21heWJlKVxuICBjb25zdCBvcHRpb25zTWF0Y2ggPSB0ZXh0U3RyLm1hdGNoKC9cXCgoW14pXStcXC9bXildKylcXClcXHMqJC8pO1xuICBpZiAob3B0aW9uc01hdGNoICYmIHR5cGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbnNNYXRjaFsxXS5zcGxpdCgnLycpLm1hcChvcHQgPT4gb3B0LnRyaW0oKSk7XG4gICAgY29uc3QgYnV0dG9uQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYnV0dG9uQ29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSAnbWFyZ2luLXRvcDogMTJweDsgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGZsZXgtd3JhcDogd3JhcDsnO1xuICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgY29uc3QgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICBidG4udGV4dENvbnRlbnQgPSBvcHRpb247XG4gICAgICBidG4uY2xhc3NOYW1lID0gJ2FjdGlvbi1idG4nO1xuICAgICAgYnRuLnN0eWxlLmNzc1RleHQgPSAncGFkZGluZzogOHB4IDE2cHg7IGJhY2tncm91bmQ6ICMzYjgyZjY7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyOiBub25lOyBib3JkZXItcmFkaXVzOiA2cHg7IGN1cnNvcjogcG9pbnRlcjsnO1xuICAgICAgYnRuLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZXNzYWdlLWlucHV0JykudmFsdWUgPSBvcHRpb247XG4gICAgICAgIGlmICh0eXBlb2Ygc2VuZE1lc3NhZ2UgPT09ICdmdW5jdGlvbicpIHNlbmRNZXNzYWdlKCk7XG4gICAgICB9O1xuICAgICAgYnV0dG9uQ29udGFpbmVyLmFwcGVuZENoaWxkKGJ0bik7XG4gICAgfSk7XG4gICAgbWVzc2FnZS5hcHBlbmRDaGlsZChidXR0b25Db250YWluZXIpO1xuICB9XG5cbiAgY29udmVyc2F0aW9uLmFwcGVuZENoaWxkKG1lc3NhZ2UpO1xuICBjb252ZXJzYXRpb24uc2Nyb2xsVG9wID0gY29udmVyc2F0aW9uLnNjcm9sbEhlaWdodDtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbi8qKlxuICogQXBwZW5kcyBhIHN5c3RlbSBlcnJvciBtZXNzYWdlIHdpdGggYW4gb3B0aW9uYWwgUmV0cnkgYnV0dG9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgdGV4dCAgICAgICAtIEVycm9yIG1lc3NhZ2UgdGV4dCAoc3VwcG9ydHMgKipib2xkKiogbWFya2Rvd24pXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmV0cnlGbl0gIC0gQ2FsbGVkIHdoZW4gUmV0cnkgaXMgY2xpY2tlZDsgb21pdCBmb3Igbm9uLXJldHJ5YWJsZSBlcnJvcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIFtyZXRyeUxhYmVsXSAtIFJldHJ5IGJ1dHRvbiBsYWJlbCAoZGVmYXVsdCAnUmV0cnknKVxuICovXG5mdW5jdGlvbiBhcHBlbmRSZXRyeU1lc3NhZ2UodGV4dCwgcmV0cnlGbiwgcmV0cnlMYWJlbCA9ICdSZXRyeScsIGNhbmNlbEZuID0gbnVsbCkge1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udmVyc2F0aW9uJyk7XG4gIGNvbnN0IG1lc3NhZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbWVzc2FnZS5jbGFzc05hbWUgPSAnbWVzc2FnZSBzeXN0ZW0nO1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNvbnRlbnQuY2xhc3NOYW1lID0gJ2NvbnRlbnQnO1xuICBjb25zdCBlc2NhcGVkID0gZXNjYXBlSHRtbCh0ZXh0KTtcbiAgY29udGVudC5pbm5lckhUTUwgPSBlc2NhcGVkXG4gICAgLnJlcGxhY2UoL1xcKlxcKiguKz8pXFwqXFwqL2csICc8c3Ryb25nPiQxPC9zdHJvbmc+JylcbiAgICAucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XG4gIG1lc3NhZ2UuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gIGlmICh0eXBlb2YgcmV0cnlGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIGJ0bi50ZXh0Q29udGVudCA9IHJldHJ5TGFiZWw7XG4gICAgYnRuLnN0eWxlLmNzc1RleHQgPSAnbWFyZ2luLXRvcDo4cHg7cGFkZGluZzo2cHggMTRweDtiYWNrZ3JvdW5kOiMzYjgyZjY7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjZweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MC44NXJlbTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6OHB4Oyc7XG4gICAgYnRuLm9uY2xpY2sgPSAoKSA9PiB7IG1lc3NhZ2UucmVtb3ZlKCk7IHJldHJ5Rm4oKTsgfTtcbiAgICBtZXNzYWdlLmFwcGVuZENoaWxkKGJ0bik7XG4gIH1cbiAgaWYgKHR5cGVvZiBjYW5jZWxGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGNhbmNlbEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIGNhbmNlbEJ0bi50ZXh0Q29udGVudCA9ICdTdG9wIHJldHJpZXMnO1xuICAgIGNhbmNlbEJ0bi5zdHlsZS5jc3NUZXh0ID0gJ21hcmdpbi10b3A6OHB4O3BhZGRpbmc6NnB4IDE0cHg7YmFja2dyb3VuZDojNmI3MjgwO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo2cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjAuODVyZW07ZGlzcGxheTppbmxpbmUtYmxvY2s7JztcbiAgICBjYW5jZWxCdG4ub25jbGljayA9ICgpID0+IHsgbWVzc2FnZS5yZW1vdmUoKTsgY2FuY2VsRm4oKTsgfTtcbiAgICBtZXNzYWdlLmFwcGVuZENoaWxkKGNhbmNlbEJ0bik7XG4gIH1cbiAgY29udmVyc2F0aW9uLmFwcGVuZENoaWxkKG1lc3NhZ2UpO1xuICBjb252ZXJzYXRpb24uc2Nyb2xsVG9wID0gY29udmVyc2F0aW9uLnNjcm9sbEhlaWdodDtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZEZvcm1hdHRlZEFuYWx5c2lzKHJlc3VsdCkge1xuICB0cnkge1xuICAgIGNvbnN0IGNsZWFuUmVzdWx0ID0gY2xlYW5Kc29uUmVzcG9uc2UocmVzdWx0KTtcbiAgICBjb25zdCBkYXRhID0gdHlwZW9mIGNsZWFuUmVzdWx0ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoY2xlYW5SZXN1bHQpIDogY2xlYW5SZXN1bHQ7XG5cbiAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgKGRhdGEudGl0bGUgfHwgZGF0YS5yZXF1aXJlZF9za2lsbHMpKSB7XG4gICAgICBjb25zdCBjb252ZXJzYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udmVyc2F0aW9uJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBtZXNzYWdlLmNsYXNzTmFtZSA9ICdtZXNzYWdlIGFzc2lzdGFudCc7XG4gICAgICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBjb250ZW50LmNsYXNzTmFtZSA9ICdjb250ZW50IGpvYi1hbmFseXNpcyc7XG5cbiAgICAgIGxldCBodG1sID0gJzxoMz5cdUQ4M0RcdURDQ0IgSm9iIEFuYWx5c2lzIENvbXBsZXRlPC9oMz4nO1xuICAgICAgaWYgKGRhdGEudGl0bGUpICBodG1sICs9IGA8cD48c3Ryb25nPlBvc2l0aW9uOjwvc3Ryb25nPiAke2RhdGEudGl0bGV9IGF0ICR7ZGF0YS5jb21wYW55IHx8ICdDb21wYW55J308L3A+YDtcbiAgICAgIGlmIChkYXRhLmRvbWFpbikgaHRtbCArPSBgPHA+PHN0cm9uZz5Eb21haW46PC9zdHJvbmc+ICR7ZGF0YS5kb21haW59PC9wPmA7XG5cbiAgICAgIGlmIChkYXRhLnJlcXVpcmVkX3NraWxscz8ubGVuZ3RoKSB7XG4gICAgICAgIGh0bWwgKz0gJzxoND5cdUQ4M0NcdURGQUYgUmVxdWlyZWQgU2tpbGxzOjwvaDQ+PHVsPic7XG4gICAgICAgIGRhdGEucmVxdWlyZWRfc2tpbGxzLmZvckVhY2gocyA9PiB7IGh0bWwgKz0gYDxsaT4ke3N9PC9saT5gOyB9KTtcbiAgICAgICAgaHRtbCArPSAnPC91bD4nO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEucHJlZmVycmVkX3NraWxscz8ubGVuZ3RoKSB7XG4gICAgICAgIGh0bWwgKz0gJzxoND5cdTJCNTAgUHJlZmVycmVkIFNraWxsczo8L2g0Pjx1bD4nO1xuICAgICAgICBkYXRhLnByZWZlcnJlZF9za2lsbHMuZm9yRWFjaChzID0+IHsgaHRtbCArPSBgPGxpPiR7c308L2xpPmA7IH0pO1xuICAgICAgICBodG1sICs9ICc8L3VsPic7XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5uaWNlX3RvX2hhdmVfcmVxdWlyZW1lbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgaHRtbCArPSAnPGg0Plx1MjcyOCBOaWNlIHRvIEhhdmU6PC9oND48dWw+JztcbiAgICAgICAgZGF0YS5uaWNlX3RvX2hhdmVfcmVxdWlyZW1lbnRzLmZvckVhY2gociA9PiB7IGh0bWwgKz0gYDxsaT4ke3J9PC9saT5gOyB9KTtcbiAgICAgICAgaHRtbCArPSAnPC91bD4nO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEuYXRzX2tleXdvcmRzPy5sZW5ndGgpIHtcbiAgICAgICAgaHRtbCArPSAnPGg0Plx1RDgzRFx1REQxMSBBVFMgS2V5d29yZHM6PC9oND48cCBzdHlsZT1cImxpbmUtaGVpZ2h0OiAyO1wiPic7XG4gICAgICAgIGRhdGEuYXRzX2tleXdvcmRzLmZvckVhY2goa3cgPT4ge1xuICAgICAgICAgIGh0bWwgKz0gYDxzcGFuIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZDojZGJlYWZlO2NvbG9yOiMxZTQwYWY7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoycHggOHB4O21hcmdpbjoycHg7Zm9udC1zaXplOjAuODVlbTtcIj4ke2t3fTwvc3Bhbj5gO1xuICAgICAgICB9KTtcbiAgICAgICAgaHRtbCArPSAnPC9wPic7XG4gICAgICB9XG5cbiAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIG1lc3NhZ2UuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgICBjb252ZXJzYXRpb24uYXBwZW5kQ2hpbGQobWVzc2FnZSk7XG4gICAgICBjb252ZXJzYXRpb24uc2Nyb2xsVG9wID0gY29udmVyc2F0aW9uLnNjcm9sbEhlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgcmVzdWx0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3IoJ0FuYWx5c2lzIGRpc3BsYXkgZXJyb3I6JywgZSk7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgcmVzdWx0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBlbmRGb3JtYXR0ZWRSZXNwb25zZShyZXNwb25zZSkge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgcmVzcG9uc2UgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXNwb25zZSkgOiByZXNwb25zZTtcbiAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgKGRhdGEudGl0bGUgfHwgZGF0YS5yZXF1aXJlZF9za2lsbHMpKSB7XG4gICAgICBhcHBlbmRGb3JtYXR0ZWRBbmFseXNpcyhyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIHJlc3BvbnNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCByZXNwb25zZSk7XG4gIH1cbn1cblxuLy8gYXBwZW5kUmF3SHRtbCBpcyBuZWVkZWQgYnkgbWVzc2FnZS1kaXNwYXRjaDsgZGVmaW5lZCBoZXJlIHNpbmNlIGl0IHVzZXMgdGhlXG4vLyBjb252ZXJzYXRpb24gZWxlbWVudCBwYXR0ZXJuLlxuZnVuY3Rpb24gYXBwZW5kUmF3SHRtbChodG1sKSB7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb252ZXJzYXRpb24nKTtcbiAgaWYgKCFjb252ZXJzYXRpb24pIHJldHVybjtcbiAgY29udmVyc2F0aW9uLmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgaHRtbCk7XG4gIGNvbnZlcnNhdGlvbi5zY3JvbGxUb3AgPSBjb252ZXJzYXRpb24uc2Nyb2xsSGVpZ2h0O1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgRVMgbW9kdWxlIGV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICBfbWVzc2FnZVF1ZXVlLCBfZmx1c2hNZXNzYWdlUXVldWUsXG4gIGFwcGVuZExvYWRpbmdNZXNzYWdlLCByZW1vdmVMb2FkaW5nTWVzc2FnZSxcbiAgYXBwZW5kTWVzc2FnZUh0bWwsIGFwcGVuZE1lc3NhZ2UsXG4gIGFwcGVuZFJldHJ5TWVzc2FnZSxcbiAgYXBwZW5kRm9ybWF0dGVkQW5hbHlzaXMsIGFwcGVuZEZvcm1hdHRlZFJlc3BvbnNlLFxuICBhcHBlbmRSYXdIdG1sLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3Jldmlldy10YWJsZS1iYXNlLmpzXG4gKiBUYWIgc3dpdGNoaW5nLCBhbmFseXNpcyB0YWIsIGN1c3RvbWl6YXRpb24gcmVzcG9uc2UgaGFuZGxlciwgcmV2aWV3LXBhbmVcbiAqIGNvb3JkaW5hdGlvbiwgYW5kIHRoZSBwYWdlLWVzdGltYXRlIHdpZGdldC5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKGFsbCByZXNvbHZlZCB0aHJvdWdoIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIGFwcGVuZE1lc3NhZ2UsIHNhdmVUYWJEYXRhLCBjbGVhbkpzb25SZXNwb25zZSwgZXNjYXBlSHRtbCxcbiAqICAgZ2V0U3RhZ2VGb3JUYWIsIHVwZGF0ZVRhYkJhckZvclN0YWdlLCB1cGRhdGVBY3Rpb25CdXR0b25zLFxuICogICBwb3B1bGF0ZUpvYlRhYiwgcG9wdWxhdGVRdWVzdGlvbnNUYWIsIGJ1aWxkQWNoaWV2ZW1lbnRzRWRpdG9yLFxuICogICByZW5kZXJSZXdyaXRlUGFuZWwsIHBvcHVsYXRlQ1ZFZGl0b3JUYWIsXG4gKiAgIHBvcHVsYXRlRG93bmxvYWRUYWIsIHBvcHVsYXRlU3BlbGxDaGVja1RhYiwgaW5pdGlhdGVMYXlvdXRJbnN0cnVjdGlvbnMsXG4gKiAgIHBvcHVsYXRlRmluYWxpc2VUYWIsIHBvcHVsYXRlTWFzdGVyVGFiLCBwb3B1bGF0ZUNvdmVyTGV0dGVyVGFiLFxuICogICBwb3B1bGF0ZVNjcmVlbmluZ1RhYiwgZXh0cmFjdEZpcnN0SnNvbk9iamVjdCxcbiAqICAgZmV0Y2hTdGF0dXMsIGFwaUNhbGwsXG4gKiAgIGJ1aWxkRXhwZXJpZW5jZVJldmlld1RhYmxlLCBidWlsZFNraWxsc1Jldmlld1RhYmxlLFxuICogICBidWlsZEFjaGlldmVtZW50c1Jldmlld1RhYmxlLCBidWlsZFN1bW1hcnlGb2N1c1NlY3Rpb24sXG4gKiAgIGJ1aWxkUHVibGljYXRpb25zUmV2aWV3VGFibGUsIGdldEV4cGVyaWVuY2VEZXRhaWxzLFxuICogICBnZXRFeHBlcmllbmNlUmVjb21tZW5kYXRpb24sIGFjaGlldmVtZW50RGVjaXNpb25zXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdyZXZpZXctdGFibGUtYmFzZScpO1xuXG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuXG4vLyBcdTI1MDBcdTI1MDAgTW9kdWxlLWxldmVsIHN0YXRlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5sZXQgdXNlclNlbGVjdGlvbnMgPSB7XG4gIGV4cGVyaWVuY2VzOiB7fSwgIC8vIGV4cF9pZCAtPiAnZW1waGFzaXplJ3wnaW5jbHVkZSd8J2RlLWVtcGhhc2l6ZSd8J2V4Y2x1ZGUnXG4gIHNraWxsczoge30gICAgICAgIC8vIHNraWxsX25hbWUgLT4gJ2VtcGhhc2l6ZSd8J2luY2x1ZGUnfCdkZS1lbXBoYXNpemUnfCdleGNsdWRlJ1xufTtcbmxldCBwYWdlRXN0aW1hdGVUaW1lciA9IG51bGw7XG5sZXQgcGFnZUVzdGltYXRlUmVxdWVzdElkID0gMDtcblxuLy8gRHJhZnQgaW5wdXQgY2FjaGUgXHUyMDEzIHByZXNlcnZlcyB1c2VyLXR5cGVkIHZhbHVlcyBhY3Jvc3MgdGFiIHN3aXRjaGVzXG5jb25zdCBfZHJhZnRJbnB1dHMgPSB7fTtcblxuZnVuY3Rpb24gX3NhdmVEcmFmdElucHV0c0ZvclRhYih0YWJOYW1lKSB7XG4gIGlmICghdGFiTmFtZSkgcmV0dXJuO1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250ZW50KSByZXR1cm47XG4gIGNvbnN0IHNhdmVkID0ge307XG4gIGNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgndGV4dGFyZWEsIGlucHV0LCBzZWxlY3QnKS5mb3JFYWNoKGVsID0+IHtcbiAgICBpZiAoIWVsLmlkIHx8IGVsLnR5cGUgPT09ICdmaWxlJykgcmV0dXJuO1xuICAgIHNhdmVkW2VsLmlkXSA9IChlbC50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsLnR5cGUgPT09ICdyYWRpbycpID8gZWwuY2hlY2tlZCA6IGVsLnZhbHVlO1xuICB9KTtcbiAgaWYgKE9iamVjdC5rZXlzKHNhdmVkKS5sZW5ndGggPiAwKSB7XG4gICAgX2RyYWZ0SW5wdXRzW3RhYk5hbWVdID0gc2F2ZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc3RvcmVEcmFmdElucHV0c0ZvclRhYih0YWJOYW1lKSB7XG4gIGNvbnN0IGNhY2hlZCA9IF9kcmFmdElucHV0c1t0YWJOYW1lXTtcbiAgaWYgKCFjYWNoZWQpIHJldHVybjtcbiAgT2JqZWN0LmVudHJpZXMoY2FjaGVkKS5mb3JFYWNoKChbaWQsIHZhbHVlXSkgPT4ge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmICghZWwgfHwgZWwucmVhZE9ubHkgfHwgZWwuZGlzYWJsZWQgfHwgZWwudHlwZSA9PT0gJ2ZpbGUnKSByZXR1cm47XG4gICAgaWYgKGVsLnR5cGUgPT09ICdjaGVja2JveCcgfHwgZWwudHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgZWwuY2hlY2tlZCA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZVRhYkRhdGFTdGF0ZSgpIHtcbiAgcmV0dXJuIHN0YXRlTWFuYWdlci5nZXRBbGxUYWJEYXRhKCk7XG59XG5cbmZ1bmN0aW9uIGlzUmVjb25uZWN0SW5Qcm9ncmVzcygpIHtcbiAgcmV0dXJuIHN0YXRlTWFuYWdlci5pc1JlY29ubmVjdGluZygpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgSW5jbHVzaW9uIGNvdW50cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gdXBkYXRlSW5jbHVzaW9uQ291bnRzKCkge1xuICB0cnkge1xuICAgIGNvbnN0IGV4cERlY3MgPSAod2luZG93Ll9zYXZlZERlY2lzaW9ucyAmJiB3aW5kb3cuX3NhdmVkRGVjaXNpb25zLmV4cGVyaWVuY2VfZGVjaXNpb25zKSB8fCB1c2VyU2VsZWN0aW9ucy5leHBlcmllbmNlcyB8fCB7fTtcbiAgICBjb25zdCBza2lsbERlY3MgPSAod2luZG93Ll9zYXZlZERlY2lzaW9ucyAmJiB3aW5kb3cuX3NhdmVkRGVjaXNpb25zLnNraWxsX2RlY2lzaW9ucykgfHwgdXNlclNlbGVjdGlvbnMuc2tpbGxzIHx8IHt9O1xuICAgIGNvbnN0IGFjaERlY3MgPSAod2luZG93Ll9zYXZlZERlY2lzaW9ucyAmJiB3aW5kb3cuX3NhdmVkRGVjaXNpb25zLmFjaGlldmVtZW50X2RlY2lzaW9ucykgfHwgd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zIHx8IHt9O1xuXG4gICAgY29uc3QgZXhwSW5jbHVkZWQgPSBPYmplY3QudmFsdWVzKGV4cERlY3MpLmZpbHRlcih2ID0+IHYgIT09ICdleGNsdWRlJykubGVuZ3RoO1xuICAgIGNvbnN0IHNraWxsSW5jbHVkZWQgPSBPYmplY3QudmFsdWVzKHNraWxsRGVjcykuZmlsdGVyKHYgPT4gdiAhPT0gJ2V4Y2x1ZGUnKS5sZW5ndGg7XG4gICAgY29uc3QgYWNoSW5jbHVkZWQgPSBPYmplY3QudmFsdWVzKGFjaERlY3MpLmZpbHRlcih2ID0+IHYgIT09ICdleGNsdWRlJykubGVuZ3RoO1xuXG4gICAgY29uc3QgZXhwVGFiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYi1leHAtcmV2aWV3Jyk7XG4gICAgY29uc3Qgc2tpbGxUYWIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLXNraWxscy1yZXZpZXcnKTtcbiAgICBjb25zdCBhY2hUYWIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLWFjaGlldmVtZW50cy1yZXZpZXcnKTtcblxuICAgIGlmIChleHBUYWIpIGV4cFRhYi50ZXh0Q29udGVudCA9IGBcdUQ4M0RcdURDQ0EgRXhwZXJpZW5jZXMke2V4cEluY2x1ZGVkID8gJyAoJyArIGV4cEluY2x1ZGVkICsgJyknIDogJyd9YDtcbiAgICBpZiAoc2tpbGxUYWIpIHNraWxsVGFiLnRleHRDb250ZW50ID0gYFx1RDgzRFx1REVFMFx1RkUwRiBTa2lsbHMke3NraWxsSW5jbHVkZWQgPyAnICgnICsgc2tpbGxJbmNsdWRlZCArICcpJyA6ICcnfWA7XG4gICAgaWYgKGFjaFRhYikgYWNoVGFiLnRleHRDb250ZW50ID0gYFx1RDgzQ1x1REZDNiBBY2hpZXZlbWVudHMke2FjaEluY2x1ZGVkID8gJyAoJyArIGFjaEluY2x1ZGVkICsgJyknIDogJyd9YDtcbiAgfSBjYXRjaCAoZSkgeyBsb2cud2FybignRmFpbGVkIHRvIHVwZGF0ZSBpbmNsdXNpb24gY291bnRzOicsIGUpOyB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBHZW5lcmF0ZSBDViB0YWIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIF9wb3B1bGF0ZUdlbmVyYXRlVGFiKGN2RGF0YSwgY29udGVudCkge1xuICBpZiAoIWN2RGF0YSB8fCAhY3ZEYXRhLmZpbGVzIHx8ICFjdkRhdGEuZmlsZXMubGVuZ3RoKSB7XG4gICAgY29udGVudC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+PGRpdiBjbGFzcz1cImljb25cIj5cdUQ4M0RcdURDQzQ8L2Rpdj48aDM+R2VuZXJhdGVkIENWPC9oMz48cD5HZW5lcmF0ZSBDViB0byBzZWUgcHJldmlldzwvcD48L2Rpdj4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG1ldGEgICAgID0gY3ZEYXRhLm1ldGFkYXRhIHx8IHt9O1xuICBjb25zdCByb2xlICAgICA9IG1ldGEucm9sZSAgICAgfHwgbWV0YS5wb3NpdGlvbiB8fCAnJztcbiAgY29uc3QgY29tcGFueSAgPSBtZXRhLmNvbXBhbnkgIHx8ICcnO1xuICBjb25zdCBzdWJ0aXRsZSA9IHJvbGUgJiYgY29tcGFueSA/IGAke3JvbGV9IFx1MjAxNCAke2NvbXBhbnl9YCA6IHJvbGUgfHwgY29tcGFueSB8fCAnQ1YgZ2VuZXJhdGVkJztcblxuICBjb25zdCBJQ09OUyA9IHsgJy5wZGYnOiAnXHVEODNEXHVEQ0M0JywgJy5kb2N4JzogJ1x1RDgzRFx1RENERCcsICcuaHRtbCc6ICdcdUQ4M0NcdURGMTAnIH07XG4gIGNvbnN0IExBQkVMUyA9IHtcbiAgICAnLnBkZic6ICBmID0+IGYuaW5jbHVkZXMoJ0FUUycpID8gJ0FUUyBQREYnICA6ICdIdW1hbiBQREYnLFxuICAgICcuZG9jeCc6IGYgPT4gZi5pbmNsdWRlcygnQVRTJykgPyAnQVRTIERPQ1gnIDogZi5zdGFydHNXaXRoKCdDb3ZlckxldHRlcl8nKSA/ICdDb3ZlciBMZXR0ZXInIDogJ0h1bWFuIERPQ1gnLFxuICAgICcuaHRtbCc6ICgpID0+ICdIVE1MJyxcbiAgfTtcblxuICBjb25zdCBkb3dubG9hZGFibGVFeHRzID0gbmV3IFNldChbJy5wZGYnLCAnLmRvY3gnLCAnLmh0bWwnXSk7XG4gIGNvbnN0IGZpbGVzID0gKGN2RGF0YS5maWxlcyB8fCBbXSkuZmlsdGVyKGYgPT4ge1xuICAgIGNvbnN0IGV4dCA9IGYuc2xpY2UoZi5sYXN0SW5kZXhPZignLicpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBkb3dubG9hZGFibGVFeHRzLmhhcyhleHQpICYmIGYgIT09ICdqb2JfZGVzY3JpcHRpb24udHh0JztcbiAgfSk7XG5cbiAgY29uc3Qgc2lkID0gdHlwZW9mIGdldFNlc3Npb25JZEZyb21VUkwgPT09ICdmdW5jdGlvbicgPyBnZXRTZXNzaW9uSWRGcm9tVVJMKCkgOiBudWxsO1xuICBjb25zdCBzZXNzaW9uUGFyYW0gPSBzaWQgPyBgP3Nlc3Npb25faWQ9JHtlbmNvZGVVUklDb21wb25lbnQoc2lkKX1gIDogJyc7XG5cbiAgbGV0IGZpbGVSb3dzID0gJyc7XG4gIGZvciAoY29uc3QgZiBvZiBmaWxlcykge1xuICAgIGNvbnN0IGV4dCAgID0gZi5zbGljZShmLmxhc3RJbmRleE9mKCcuJykpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgaWNvbiAgPSBJQ09OU1tleHRdICB8fCAnXHVEODNEXHVEQ0MxJztcbiAgICBjb25zdCBsYWJlbCA9IExBQkVMU1tleHRdID8gTEFCRUxTW2V4dF0oZikgOiBmO1xuICAgIGZpbGVSb3dzICs9IGBcbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O3BhZGRpbmc6MTBweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmMWY1Zjk7XCI+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjEuNGVtO1wiPiR7aWNvbn08L3NwYW4+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OjE7bWluLXdpZHRoOjA7XCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7XCI+JHtsYWJlbH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuNzhlbTtjb2xvcjojOWNhM2FmO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztcIj4ke2VzY2FwZUh0bWwoZil9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YSBocmVmPVwiL2FwaS9kb3dubG9hZC8ke2VuY29kZVVSSUNvbXBvbmVudChmKX0ke3Nlc3Npb25QYXJhbX1cIiBkb3dubG9hZD1cIiR7ZXNjYXBlSHRtbChmKX1cIlxuICAgICAgICAgICBjbGFzcz1cImJ0bi1zZWNvbmRhcnlcIiBzdHlsZT1cInBhZGRpbmc6NnB4IDE0cHg7Zm9udC1zaXplOjAuODVlbTt0ZXh0LWRlY29yYXRpb246bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jaztcIj5Eb3dubG9hZDwvYT5cbiAgICAgIDwvZGl2PmA7XG4gIH1cblxuICBjb250ZW50LmlubmVySFRNTCA9IGBcbiAgICA8ZGl2IHN0eWxlPVwibWF4LXdpZHRoOjY0MHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoyNHB4IDA7XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjI0cHg7XCI+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjJlbTtcIj5cdTI3MDU8L3NwYW4+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGgyIHN0eWxlPVwibWFyZ2luOjA7Zm9udC1zaXplOjEuMmVtO2NvbG9yOiMxMTE4Mjc7XCI+Q1YgR2VuZXJhdGVkPC9oMj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuOWVtO2NvbG9yOiM2YjcyODA7XCI+JHtlc2NhcGVIdG1sKHN1YnRpdGxlKX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MCAxNnB4O21hcmdpbi1ib3R0b206MjRweDtcIj5cbiAgICAgICAgJHtmaWxlUm93c31cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm5hdi1idXR0b25zIG5hdi1lbmRcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRpbnVlLWJ0blwiIG9uY2xpY2s9XCJzd2l0Y2hUYWIoJ2xheW91dCcpXCI+T3BlbiBMYXlvdXQgUmV2aWV3IFx1MjE5MjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFRhYiBzd2l0Y2hpbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8vIFRyYWNrcyB3aGljaCBjdXN0b21pc2Utc3RhZ2Ugc3ViLXRhYnMgaGF2ZSBiZWVuIHZpZXdlZCB0aGlzIHNlc3Npb24gKEdBUC0yNjkpLlxuY29uc3QgX3Zpc2l0ZWRDdXN0b21pc2VUYWJzID0gbmV3IFNldCgpO1xuY29uc3QgX0NVU1RPTUlTRV9UQUJTID0gbmV3IFNldChbJ2dvYWxzJywgJ3F1ZXN0aW9ucycsICdleHAtcmV2aWV3JywgJ2FjaC1lZGl0b3InLCAnc2tpbGxzLXJldmlldycsICdhY2hpZXZlbWVudHMtcmV2aWV3JywgJ3RhZ2xpbmUtcmV2aWV3JywgJ3N1bW1hcnktcmV2aWV3JywgJ3B1YmxpY2F0aW9ucy1yZXZpZXcnLCAnYXRzLXNjb3JlJ10pO1xuXG5mdW5jdGlvbiBfdXBkYXRlVmlzaXRlZFRhYkluZGljYXRvcnMoKSB7XG4gIF92aXNpdGVkQ3VzdG9taXNlVGFicy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHRhYi0ke25hbWV9YCk7XG4gICAgaWYgKGVsKSBlbC5jbGFzc0xpc3QuYWRkKCd0YWItLXZpc2l0ZWQnKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHN3aXRjaFRhYih0YWIpIHtcbiAgLy8gQ2xlYXIga2V5Ym9hcmQtZm9jdXNlZCBjYXJkIHN0YXRlIHdoZW4gbGVhdmluZyBhIHJldmlldyB0YWJcbiAgaWYgKHR5cGVvZiByZXNldENhcmRGb2N1cyA9PT0gJ2Z1bmN0aW9uJykgcmVzZXRDYXJkRm9jdXMoKTtcblxuICAvLyBTYXZlIHVuc2F2ZWQgdXNlciBpbnB1dCBmcm9tIHRoZSB0YWIgd2UgYXJlIGxlYXZpbmdcbiAgX3NhdmVEcmFmdElucHV0c0ZvclRhYihzdGF0ZU1hbmFnZXIuZ2V0Q3VycmVudFRhYigpKTtcblxuICAvLyBTeW5jIHNlY29uZC1iYXIgdmlzaWJpbGl0eSB0byB0aGlzIHRhYidzIHN0YWdlXG4gIGlmICh0eXBlb2YgZ2V0U3RhZ2VGb3JUYWIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHVwZGF0ZVRhYkJhckZvclN0YWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgdGFiU3RhZ2UgPSBnZXRTdGFnZUZvclRhYih0YWIpO1xuICAgIGlmICh0YWJTdGFnZSkge1xuICAgICAgdXBkYXRlVGFiQmFyRm9yU3RhZ2UodGFiU3RhZ2UpO1xuICAgICAgdXBkYXRlQWN0aW9uQnV0dG9ucyh0YWJTdGFnZSk7XG4gICAgfVxuICB9XG4gIC8vIEFsd2F5cyB1cGRhdGUgd29ya2Zsb3cgY2xpY2thYmxlIHN0YXRlIHVzaW5nIGN1cnJlbnQgcGhhc2VcbiAgaWYgKHR5cGVvZiBzdGF0ZU1hbmFnZXI/LmdldFBoYXNlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB1cGRhdGVXb3JrZmxvd1N0ZXBzQ2xpY2thYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdXBkYXRlV29ya2Zsb3dTdGVwc0NsaWNrYWJsZShzdGF0ZU1hbmFnZXIuZ2V0UGhhc2UoKSk7XG4gIH1cblxuICAvLyBVcGRhdGUgYWN0aXZlIHRhYiwgQVJJQSBzdGF0ZSwgYW5kIHJvdmluZyB0YWJpbmRleCAoV0NBRyAyLjEgdGFibGlzdCBwYXR0ZXJuKVxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGFiJykuZm9yRWFjaCh0ID0+IHtcbiAgICB0LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuICAgIHQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgdC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gIH0pO1xuICBjb25zdCBhY3RpdmVUYWIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgdGFiLSR7dGFifWApO1xuICBpZiAoYWN0aXZlVGFiKSB7XG4gICAgYWN0aXZlVGFiLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgIGFjdGl2ZVRhYi5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgIGFjdGl2ZVRhYi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICBjb25zdCB0YWJwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gICAgaWYgKHRhYnBhbmVsKSB0YWJwYW5lbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGB0YWItJHt0YWJ9YCk7XG4gIH1cbiAgc3RhdGVNYW5hZ2VyLnNldEN1cnJlbnRUYWIodGFiKTtcblxuICAvLyBNYXJrIHRoaXMgdGFiIGFzIHZpc2l0ZWQgYW5kIHJlZnJlc2ggdGhlIHZpc2l0ZWQgaW5kaWNhdG9ycyAoR0FQLTI2OSlcbiAgaWYgKF9DVVNUT01JU0VfVEFCUy5oYXModGFiKSkge1xuICAgIF92aXNpdGVkQ3VzdG9taXNlVGFicy5hZGQodGFiKTtcbiAgICBfdXBkYXRlVmlzaXRlZFRhYkluZGljYXRvcnMoKTtcbiAgfVxuXG4gIC8vIEFubm91bmNlIHRoZSB0YWIgY2hhbmdlIHRvIHNjcmVlbiByZWFkZXJzIChHQVAtNzMpXG4gIGNvbnN0IGFubm91bmNlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3b3JrZmxvdy1zdGFnZS1hbm5vdW5jZXInKTtcbiAgaWYgKGFubm91bmNlciAmJiBhY3RpdmVUYWIpIHtcbiAgICBhbm5vdW5jZXIudGV4dENvbnRlbnQgPSAnJztcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgYW5ub3VuY2VyLnRleHRDb250ZW50ID0gYE5vdyB2aWV3aW5nOiAke2FjdGl2ZVRhYi50ZXh0Q29udGVudC50cmltKCl9YDsgfSwgNTApO1xuICB9XG5cbiAgLy8gU3luYyB2aWV3LWN1cnNvciByaW5nIHRvIHRoZSBuZXdseSB2aXNpYmxlIHRhYlxuICBpZiAodHlwZW9mIF91cGRhdGVWaWV3aW5nSW5kaWNhdG9yID09PSAnZnVuY3Rpb24nKSBfdXBkYXRlVmlld2luZ0luZGljYXRvcih0YWIpO1xuXG4gIC8vIEFsbCB0YWJzIGV4Y2VwdCAnY3YnIHVzZSBmdWxsLXdpZHRoIGxheW91dCAobm8gcGFwZXItc2l6ZWQgY2VudGVyaW5nKVxuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgY29udGVudC5jbGFzc0xpc3QudG9nZ2xlKCdmdWxsLXdpZHRoJywgdGFiICE9PSAnZ2VuZXJhdGUnKTtcblxuICAvLyBMb2FkIGNvbnRlbnQgZm9yIHRhYlxuICBsb2FkVGFiQ29udGVudCh0YWIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkVGFiQ29udGVudCh0YWIpIHtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGNvbnN0IHRhYkRhdGEgPSBlbnN1cmVUYWJEYXRhU3RhdGUoKTtcblxuICB0cnkge1xuICBzd2l0Y2ggKHRhYikge1xuICAgIGNhc2UgJ2pvYic6XG4gICAgICBhd2FpdCBwb3B1bGF0ZUpvYlRhYigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ29hbHMnOlxuICAgICAgaWYgKHR5cGVvZiBwb3B1bGF0ZUdvYWxzVGFiID09PSAnZnVuY3Rpb24nKSBhd2FpdCBwb3B1bGF0ZUdvYWxzVGFiKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdhbmFseXNpcyc6XG4gICAgICBpZiAodGFiRGF0YS5hbmFseXNpcykge1xuICAgICAgICBwb3B1bGF0ZUFuYWx5c2lzVGFiKHRhYkRhdGEuYW5hbHlzaXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGVudC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+PGRpdiBjbGFzcz1cImljb25cIj5cdUQ4M0RcdUREMEQ8L2Rpdj48aDM+Sm9iIEFuYWx5c2lzPC9oMz48cD5DbGljayBcIkFuYWx5emUgSm9iXCIgdG8gZ2VuZXJhdGUgYW5hbHlzaXM8L3A+PC9kaXY+JztcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3F1ZXN0aW9ucyc6XG4gICAgICBwb3B1bGF0ZVF1ZXN0aW9uc1RhYigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY3VzdG9taXphdGlvbnMnOlxuICAgICAgc3dpdGNoVGFiKCdleHAtcmV2aWV3Jyk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnZXhwLXJldmlldyc6XG4gICAgICBhd2FpdCBwb3B1bGF0ZVJldmlld1RhYignZXhwZXJpZW5jZXMnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2FjaC1lZGl0b3InOlxuICAgICAgYXdhaXQgYnVpbGRBY2hpZXZlbWVudHNFZGl0b3IoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NraWxscy1yZXZpZXcnOlxuICAgICAgYXdhaXQgcG9wdWxhdGVSZXZpZXdUYWIoJ3NraWxscycpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYWNoaWV2ZW1lbnRzLXJldmlldyc6XG4gICAgICBhd2FpdCBwb3B1bGF0ZVJldmlld1RhYignYWNoaWV2ZW1lbnRzJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0YWdsaW5lLXJldmlldyc6XG4gICAgICBhd2FpdCBwb3B1bGF0ZVRhZ2xpbmVSZXZpZXdUYWIoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3N1bW1hcnktcmV2aWV3JzpcbiAgICAgIGF3YWl0IHBvcHVsYXRlUmV2aWV3VGFiKCdzdW1tYXJ5Jyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwdWJsaWNhdGlvbnMtcmV2aWV3JzpcbiAgICAgIGF3YWl0IHBvcHVsYXRlUmV2aWV3VGFiKCdwdWJsaWNhdGlvbnMnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2F0cy1zY29yZSc6XG4gICAgICBpZiAodHlwZW9mIHBvcHVsYXRlQXRzU2NvcmVUYWIgPT09ICdmdW5jdGlvbicpIGF3YWl0IHBvcHVsYXRlQXRzU2NvcmVUYWIoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Jld3JpdGUnOlxuICAgICAgaWYgKHdpbmRvdy5fcmV3cml0ZVBhbmVsQ2FjaGUpIHtcbiAgICAgICAgcmVuZGVyUmV3cml0ZVBhbmVsKFxuICAgICAgICAgIHdpbmRvdy5fcmV3cml0ZVBhbmVsQ2FjaGUucmV3cml0ZXMsXG4gICAgICAgICAgd2luZG93Ll9yZXdyaXRlUGFuZWxDYWNoZS53YXJuaW5ncyxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPjxkaXYgY2xhc3M9XCJpY29uXCI+XHUyNzBGXHVGRTBGPC9kaXY+PGgzPlJld3JpdGVzPC9oMz48cD5Mb2FkaW5nIHJld3JpdGVzXHUyMDI2PC9wPjwvZGl2Pic7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGFwaUNhbGwoJ0dFVCcsICcvYXBpL3Jld3JpdGVzJyk7XG4gICAgICAgICAgaWYgKGRhdGEucmV3cml0ZXMpIHtcbiAgICAgICAgICAgIHJlbmRlclJld3JpdGVQYW5lbChkYXRhLnJld3JpdGVzLCBkYXRhLnBlcnN1YXNpb25fd2FybmluZ3MgfHwgW10pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZW50LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj48ZGl2IGNsYXNzPVwiaWNvblwiPlx1MjcwRlx1RkUwRjwvZGl2PjxoMz5SZXdyaXRlczwvaDM+PHA+Q29tcGxldGUgY3VzdG9taXphdGlvbnMgdG8gcmVhY2ggdGhpcyBzdGVwPC9wPjwvZGl2Pic7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29udGVudC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+PGRpdiBjbGFzcz1cImljb25cIj5cdTI3MEZcdUZFMEY8L2Rpdj48aDM+UmV3cml0ZXM8L2gzPjxwPkNvbXBsZXRlIGN1c3RvbWl6YXRpb25zIHRvIHJlYWNoIHRoaXMgc3RlcDwvcD48L2Rpdj4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlZGl0b3InOlxuICAgICAgYXdhaXQgcG9wdWxhdGVDVkVkaXRvclRhYigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ2VuZXJhdGUnOlxuICAgICAgX3BvcHVsYXRlR2VuZXJhdGVUYWIodGFiRGF0YS5jdiwgY29udGVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdkb3dubG9hZCc6XG4gICAgICBpZiAodGFiRGF0YS5jdiAmJiBPYmplY3Qua2V5cyh0YWJEYXRhLmN2KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGF3YWl0IHBvcHVsYXRlRG93bmxvYWRUYWIodGFiRGF0YS5jdik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZW50LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj48ZGl2IGNsYXNzPVwiaWNvblwiPlx1MkIwN1x1RkUwRjwvZGl2PjxoMz5Eb3dubG9hZDwvaDM+PHA+R2VuZXJhdGUgQ1YgdG8gZW5hYmxlIGRvd25sb2FkczwvcD48L2Rpdj4nO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc3BlbGwnOlxuICAgICAgYXdhaXQgcG9wdWxhdGVTcGVsbENoZWNrVGFiKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsYXlvdXQnOlxuICAgICAgaW5pdGlhdGVMYXlvdXRJbnN0cnVjdGlvbnMoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ZpbmFsaXNlJzpcbiAgICAgIGF3YWl0IHBvcHVsYXRlRmluYWxpc2VUYWIoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2hhcnZlc3QnOlxuICAgICAgaWYgKHR5cGVvZiBwb3B1bGF0ZUhhcnZlc3RUYWIgPT09ICdmdW5jdGlvbicpIGF3YWl0IHBvcHVsYXRlSGFydmVzdFRhYigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW50ZXJ2aWV3LXByZXAnOlxuICAgICAgaWYgKHR5cGVvZiBwb3B1bGF0ZUludGVydmlld1ByZXBUYWIgPT09ICdmdW5jdGlvbicpIGF3YWl0IHBvcHVsYXRlSW50ZXJ2aWV3UHJlcFRhYigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGhhbmsteW91JzpcbiAgICAgIGlmICh0eXBlb2YgcG9wdWxhdGVUaGFua1lvdVRhYiA9PT0gJ2Z1bmN0aW9uJykgYXdhaXQgcG9wdWxhdGVUaGFua1lvdVRhYigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbWFzdGVyJzpcbiAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb3Zlci1sZXR0ZXInOlxuICAgICAgYXdhaXQgcG9wdWxhdGVDb3ZlckxldHRlclRhYigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2NyZWVuaW5nJzpcbiAgICAgIGF3YWl0IHBvcHVsYXRlU2NyZWVuaW5nVGFiKCk7XG4gICAgICBicmVhaztcbiAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcihgRXJyb3IgbG9hZGluZyB0YWIgJHt0YWJ9OmAsIGVycm9yKTtcbiAgICAvLyB0ZXh0Q29udGVudCwgbm90IGlubmVySFRNTCBcdTIwMTQgYSB0aHJvd24gZXJyb3IgbWVzc2FnZSBtdXN0IG5ldmVyIGJlXG4gICAgLy8gaW50ZXJwcmV0ZWQgYXMgSFRNTCAoZS5nLiBhbiBlcnJvciBzdHJpbmcgY29udGFpbmluZyBhIHN0cmF5IDxpbWc+KS5cbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgZXJyb3JNZXNzYWdlLnN0eWxlLmNzc1RleHQgPSAncGFkZGluZzogMjBweDsgY29sb3I6ICNjNDFlM2E7JztcbiAgICBlcnJvck1lc3NhZ2UudGV4dENvbnRlbnQgPSBgRXJyb3IgbG9hZGluZyBjb250ZW50OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICBjb250ZW50LmFwcGVuZENoaWxkKGVycm9yTWVzc2FnZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gUmVzdG9yZSB1bnNhdmVkIHVzZXIgaW5wdXQgZm9yIHRoZSBuZXdseSBsb2FkZWQgdGFiXG4gIF9yZXN0b3JlRHJhZnRJbnB1dHNGb3JUYWIodGFiKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFJldmlldyB0YWIgKGZsYXQsIG9uZSBwYW5lIHBlciB0b3AtbGV2ZWwgdGFiKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gc2hvd1RhYmxlQmFzZWRSZXZpZXcoKSB7XG4gIGlmICghd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnTm8gcmVjb21tZW5kYXRpb25zIHRvIHJldmlldy4gUGxlYXNlIGdlbmVyYXRlIGN1c3RvbWl6YXRpb25zIGZpcnN0LicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN3aXRjaFRhYignZXhwLXJldmlldycpO1xuICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnXHUyNzA1IEN1c3RvbWl6YXRpb25zIGdlbmVyYXRlZCEgUGxlYXNlIHJldmlldyBlYWNoIHNlY3Rpb24gaW4gdGhlICoqQ3VzdG9taXphdGlvbnMqKiB0YWIgXHUyMDE0IEV4cGVyaWVuY2VzLCBBY2hpZXZlbWVudHMsIFNraWxscywgU3VtbWFyeSwgYW5kIFB1YmxpY2F0aW9ucy4gU2VsZWN0IHlvdXIgcHJlZmVyZW5jZXMgdXNpbmcgdGhlIGFjdGlvbiBidXR0b25zLCB0aGVuIHN1Ym1pdCB5b3VyIGRlY2lzaW9ucy4nKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEFuYWx5c2lzIHRhYiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLy8gQ2FjaGVkIHN5bm9ueW0gbWFwOiBhbGlhcyAobG93ZXIpIFx1MjE5MiBjYW5vbmljYWwsIGFuZCBjYW5vbmljYWwgKGxvd2VyKSBcdTIxOTIgW2FsaWFzZXNdXG5sZXQgX3N5bm9ueW1NYXBDYWNoZSA9IG51bGw7XG5hc3luYyBmdW5jdGlvbiBfbG9hZFN5bm9ueW1NYXAoKSB7XG4gIGlmIChfc3lub255bU1hcENhY2hlKSByZXR1cm4gX3N5bm9ueW1NYXBDYWNoZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBzdGF0ZU1hbmFnZXIuZ2V0U2Vzc2lvbklkICYmIHN0YXRlTWFuYWdlci5nZXRTZXNzaW9uSWQoKTtcbiAgICBjb25zdCB1cmwgPSBzZXNzaW9uSWQgPyBgL2FwaS9zeW5vbnltLW1hcD9zZXNzaW9uX2lkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlc3Npb25JZCl9YCA6ICcvYXBpL3N5bm9ueW0tbWFwJztcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICBpZiAoIXJlcy5vaykgcmV0dXJuIChfc3lub255bU1hcENhY2hlID0ge30pO1xuICAgIGNvbnN0IHJhdyAgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGNvbnN0IGFsaWFzVG9DYW5vbiA9IHt9O1xuICAgIGNvbnN0IGNhbm9uVG9BbGlhc2VzID0ge307XG4gICAgT2JqZWN0LmVudHJpZXMocmF3KS5mb3JFYWNoKChbYWxpYXMsIGNhbm9uXSkgPT4ge1xuICAgICAgYWxpYXNUb0Nhbm9uW2FsaWFzLnRvTG93ZXJDYXNlKCldID0gY2Fub247XG4gICAgICBjb25zdCBjbCA9IGNhbm9uLnRvTG93ZXJDYXNlKCk7XG4gICAgICAoY2Fub25Ub0FsaWFzZXNbY2xdID0gY2Fub25Ub0FsaWFzZXNbY2xdIHx8IFtdKS5wdXNoKGFsaWFzKTtcbiAgICB9KTtcbiAgICBfc3lub255bU1hcENhY2hlID0geyBhbGlhc1RvQ2Fub24sIGNhbm9uVG9BbGlhc2VzIH07XG4gIH0gY2F0Y2ggKF8pIHsgX3N5bm9ueW1NYXBDYWNoZSA9IHt9OyB9XG4gIHJldHVybiBfc3lub255bU1hcENhY2hlO1xufVxuXG5mdW5jdGlvbiBfa3dTeW5vbnltQW5ub3RhdGlvbihrdywgc3luTWFwKSB7XG4gIGlmICghc3luTWFwIHx8ICghc3luTWFwLmFsaWFzVG9DYW5vbiAmJiAhc3luTWFwLmNhbm9uVG9BbGlhc2VzKSkgcmV0dXJuICcnO1xuICBjb25zdCBrbCA9IGt3LnRvTG93ZXJDYXNlKCk7XG4gIC8vIElzIGt3IGFuIGFsaWFzPyBTaG93IGNhbm9uaWNhbCBmb3JtLlxuICBpZiAoc3luTWFwLmFsaWFzVG9DYW5vbltrbF0pIHJldHVybiBgID0gJHtzeW5NYXAuYWxpYXNUb0Nhbm9uW2tsXX1gO1xuICAvLyBJcyBrdyBhIGNhbm9uaWNhbCBmb3JtPyBTaG93IGFsaWFzZXMuXG4gIGNvbnN0IGFsaWFzZXMgPSBzeW5NYXAuY2Fub25Ub0FsaWFzZXMgJiYgc3luTWFwLmNhbm9uVG9BbGlhc2VzW2tsXTtcbiAgaWYgKGFsaWFzZXMgJiYgYWxpYXNlcy5sZW5ndGgpIHJldHVybiBgICgke2FsaWFzZXMuam9pbignLCAnKX0pYDtcbiAgcmV0dXJuICcnO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwb3B1bGF0ZUFuYWx5c2lzVGFiKHJlc3VsdCkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgdHJ5IHtcbiAgICAvLyByZXN1bHQgbWF5IGFscmVhZHkgYmUgYSBwYXJzZWQgb2JqZWN0IChlLmcuIGNvbWluZyBmcm9tIHN0YXRlTWFuYWdlcikgb3IgYVxuICAgIC8vIHJhdyBKU09OIHN0cmluZy4gIGNsZWFuSnNvblJlc3BvbnNlIG9ubHkgaGFuZGxlcyBzdHJpbmdzLCBzbyBza2lwIGl0IHdoZW5cbiAgICAvLyB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhbiBvYmplY3QgdG8gYXZvaWQgXCJjbGVhbmVkLnJlcGxhY2UgaXMgbm90IGEgZnVuY3Rpb25cIi5cbiAgICBsZXQgZGF0YTtcbiAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBkYXRhID0gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGVhblJlc3VsdCA9IGNsZWFuSnNvblJlc3BvbnNlKHJlc3VsdCk7XG4gICAgICBkYXRhID0gdHlwZW9mIGNsZWFuUmVzdWx0ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoY2xlYW5SZXN1bHQpIDogY2xlYW5SZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gUGVyc2lzdCBvbmx5IGFmdGVyIHRoZSBhbmFseXNpcyBwYXlsb2FkIGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgICBzdGF0ZU1hbmFnZXIuc2V0VGFiRGF0YSgnYW5hbHlzaXMnLCByZXN1bHQpO1xuICAgIHNhdmVUYWJEYXRhKCk7XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgU2VjdGlvbiAxOiBSb2xlICYgRG9tYWluIGNhcmQgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAgbGV0IGh0bWwgPSAnPGRpdiBjbGFzcz1cImFuYWx5c2lzLXBhZ2VcIj4nO1xuICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJhbmFseXNpcy1yb2xlLWNhcmRcIj4nO1xuICAgIGh0bWwgKz0gYDxoMT4ke2RhdGEudGl0bGUgfHwgJ1JvbGUnfTwvaDE+YDtcbiAgICBpZiAoZGF0YS5jb21wYW55KSBodG1sICs9IGA8cCBjbGFzcz1cImNvbXBhbnlcIj5cdUQ4M0NcdURGRTIgJHtkYXRhLmNvbXBhbnl9PC9wPmA7XG4gICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cIm1ldGFcIj4nO1xuICAgIGlmIChkYXRhLmRvbWFpbikge1xuICAgICAgY29uc3QgY29uZiA9IGRhdGEuZG9tYWluX2NvbmZpZGVuY2U7XG4gICAgICBsZXQgY29uZkxhYmVsID0gJyc7XG4gICAgICBsZXQgY29uZlRpdGxlID0gJyc7XG4gICAgICBpZiAodHlwZW9mIGNvbmYgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChjb25mID49IDAuOCkgeyBjb25mTGFiZWwgPSAnJzsgY29uZlRpdGxlID0gYERvbWFpbiBjb25maWRlbmNlOiBIaWdoICgke01hdGgucm91bmQoY29uZiAqIDEwMCl9JSlgOyB9XG4gICAgICAgIGVsc2UgaWYgKGNvbmYgPj0gMC42KSB7IGNvbmZMYWJlbCA9ICcgXHUyNkEwJzsgY29uZlRpdGxlID0gYERvbWFpbiBjb25maWRlbmNlOiBNZWRpdW0gKCR7TWF0aC5yb3VuZChjb25mICogMTAwKX0lKSBcdTIwMTQgdmVyaWZ5IHRoaXMgaXMgY29ycmVjdGA7IH1cbiAgICAgICAgZWxzZSB7IGNvbmZMYWJlbCA9ICcgXHUyNkEwJzsgY29uZlRpdGxlID0gYERvbWFpbiBjb25maWRlbmNlOiBMb3cgKCR7TWF0aC5yb3VuZChjb25mICogMTAwKX0lKSBcdTIwMTQgdGhlIEpEIHNwYW5zIG11bHRpcGxlIGRvbWFpbnM7IGNvbnNpZGVyIG92ZXJyaWRpbmdgOyB9XG4gICAgICB9XG4gICAgICBodG1sICs9IGA8c3BhbiBjbGFzcz1cIm1ldGEtY2hpcFwiIHRpdGxlPVwiJHtlc2NhcGVIdG1sKGNvbmZUaXRsZSB8fCAnSW5mZXJyZWQgdGVjaG5pY2FsIGRvbWFpbicpfVwiPlx1RDgzRFx1REQyQyAke2VzY2FwZUh0bWwoZGF0YS5kb21haW4pfSR7Y29uZkxhYmVsfTwvc3Bhbj5gO1xuICAgIH1cbiAgICBpZiAoZGF0YS5yb2xlX2xldmVsKSBodG1sICs9IGA8c3BhbiBjbGFzcz1cIm1ldGEtY2hpcFwiPlx1RDgzRFx1RENDQSAke2RhdGEucm9sZV9sZXZlbH08L3NwYW4+YDtcbiAgICBpZiAoZGF0YS5zdWdnZXN0ZWRfc3VtbWFyeSkgaHRtbCArPSBgPHNwYW4gY2xhc3M9XCJtZXRhLWNoaXBcIj5cdUQ4M0RcdURDQUMgJHtkYXRhLnN1Z2dlc3RlZF9zdW1tYXJ5fTwvc3Bhbj5gO1xuICAgIGh0bWwgKz0gJzwvZGl2PjwvZGl2Pic7XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgTWlzbWF0Y2ggY2FsbG91dCAoY29tcHV0ZWQgZnJvbSBtYXN0ZXIgc2tpbGxzKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBjb25zdCByZXF1aXJlZFNraWxscyA9IEFycmF5LmlzQXJyYXkoZGF0YS5yZXF1aXJlZF9za2lsbHMpID8gZGF0YS5yZXF1aXJlZF9za2lsbHMgOiBbXTtcbiAgICBjb25zdCBtYXN0ZXJTa2lsbHMgPSB3aW5kb3cuX21hc3RlclNraWxscyB8fCBbXTtcbiAgICBpZiAocmVxdWlyZWRTa2lsbHMubGVuZ3RoID4gMCAmJiBtYXN0ZXJTa2lsbHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWlzc2luZyA9IHJlcXVpcmVkU2tpbGxzLmZpbHRlcihza2lsbCA9PlxuICAgICAgICAhbWFzdGVyU2tpbGxzLnNvbWUobXMgPT4gbXMuaW5jbHVkZXMoc2tpbGwudG9Mb3dlckNhc2UoKSkgfHwgc2tpbGwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhtcykpXG4gICAgICApO1xuICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICBodG1sICs9IGA8ZGl2IGNsYXNzPVwibWlzbWF0Y2gtY2FsbG91dFwiPlx1MjZBMCA8c3Ryb25nPiR7bWlzc2luZy5sZW5ndGh9IHJlcXVpcmVkIHNraWxsJHttaXNzaW5nLmxlbmd0aCA+IDEgPyAncycgOiAnJ30gbm90IGZvdW5kIGluIHlvdXIgbWFzdGVyIENWOjwvc3Ryb25nPiAke21pc3Npbmcuam9pbignLCAnKX08L2Rpdj5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFx1MjUwMFx1MjUwMCBTZWN0aW9uIDI6IFJlcXVpcmVkIFNraWxscyBncmlkIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICAgIGlmIChyZXF1aXJlZFNraWxscy5sZW5ndGggPiAwKSB7XG4gICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPVwiYW5hbHlzaXMtc2VjdGlvblwiPjxoMj5cdUQ4M0NcdURGQUYgUmVxdWlyZWQgU2tpbGxzPC9oMj48ZGl2IGNsYXNzPVwic2tpbGwtZ3JpZFwiPic7XG4gICAgICByZXF1aXJlZFNraWxscy5mb3JFYWNoKHNraWxsID0+IHtcbiAgICAgICAgY29uc3QgaXNNaXNzaW5nID0gbWFzdGVyU2tpbGxzLmxlbmd0aCA+IDAgJiYgIW1hc3RlclNraWxscy5zb21lKFxuICAgICAgICAgIG1zID0+IG1zLmluY2x1ZGVzKHNraWxsLnRvTG93ZXJDYXNlKCkpIHx8IHNraWxsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobXMpXG4gICAgICAgICk7XG4gICAgICAgIGh0bWwgKz0gYDxzcGFuIGNsYXNzPVwic2tpbGwtYmFkZ2Uke2lzTWlzc2luZyA/ICcgbWlzc2luZycgOiAnJ31cIiB0aXRsZT1cIiR7aXNNaXNzaW5nID8gJ05vdCBpbiBtYXN0ZXIgQ1YnIDogJ0ZvdW5kIGluIG1hc3RlciBDVid9XCI+JHtza2lsbH0ke2lzTWlzc2luZyA/ICc8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj4gKG5vdCBpbiBtYXN0ZXIgQ1YpPC9zcGFuPicgOiAnJ308L3NwYW4+YDtcbiAgICAgIH0pO1xuICAgICAgaHRtbCArPSAnPC9kaXY+PC9kaXY+JztcbiAgICB9XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgU2VjdGlvbiAzOiBQcmVmZXJyZWQgLyBOaWNlLXRvLUhhdmUgbGlzdCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBjb25zdCBwcmVmZXJyZWQgPSBbXG4gICAgICAuLi4oQXJyYXkuaXNBcnJheShkYXRhLnByZWZlcnJlZF9za2lsbHMpID8gZGF0YS5wcmVmZXJyZWRfc2tpbGxzIDogW10pLFxuICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZGF0YS5uaWNlX3RvX2hhdmVfcmVxdWlyZW1lbnRzKSA/IGRhdGEubmljZV90b19oYXZlX3JlcXVpcmVtZW50cyA6IFtdKSxcbiAgICBdO1xuICAgIGlmIChwcmVmZXJyZWQubGVuZ3RoID4gMCkge1xuICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cImFuYWx5c2lzLXNlY3Rpb25cIj48aDI+XHUyQjUwIFByZWZlcnJlZCAvIE5pY2UtdG8tSGF2ZTwvaDI+PHVsIGNsYXNzPVwicHJlZmVycmVkLWxpc3RcIj4nO1xuICAgICAgcHJlZmVycmVkLmZvckVhY2goaXRlbSA9PiB7IGh0bWwgKz0gYDxsaT4ke2l0ZW19PC9saT5gOyB9KTtcbiAgICAgIGh0bWwgKz0gJzwvdWw+PC9kaXY+JztcbiAgICB9XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgU2VjdGlvbiA0OiBBVFMgS2V5d29yZHMgd2l0aCByYW5rIGJhZGdlcyBhbmQgc3lub255bSBhbm5vdGF0aW9ucyBcdTI1MDBcdTI1MDBcbiAgICBjb25zdCBhdHNLd3MgPSBBcnJheS5pc0FycmF5KGRhdGEuYXRzX2tleXdvcmRzKSA/IGRhdGEuYXRzX2tleXdvcmRzIDogW107XG4gICAgaWYgKGF0c0t3cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzeW5NYXAgPSBhd2FpdCBfbG9hZFN5bm9ueW1NYXAoKTtcbiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJhbmFseXNpcy1zZWN0aW9uXCI+PGgyPlx1RDgzRFx1REQxMSBBVFMgS2V5d29yZHMgPHNtYWxsIHN0eWxlPVwiZm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2NDc0OGI7Zm9udC1zaXplOjEycHg7XCI+KGhpZ2hlciByYW5rID0gaGlnaGVyIHByaW9yaXR5KTwvc21hbGw+PC9oMj48ZGl2IGNsYXNzPVwia3ctYmFkZ2VzXCI+JztcbiAgICAgIGF0c0t3cy5mb3JFYWNoKChrdywgaWR4KSA9PiB7XG4gICAgICAgIGNvbnN0IGFubm90YXRpb24gPSBfa3dTeW5vbnltQW5ub3RhdGlvbihrdywgc3luTWFwKTtcbiAgICAgICAgY29uc3QgdGl0bGVBdHRyICA9IGFubm90YXRpb24gPyBgIHRpdGxlPVwiU3lub255bTogJHtlc2NhcGVIdG1sKGt3ICsgYW5ub3RhdGlvbil9XCJgIDogJyc7XG4gICAgICAgIGNvbnN0IGFubm90SHRtbCAgPSBhbm5vdGF0aW9uID8gYDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjEwcHg7Y29sb3I6IzY0NzQ4YjttYXJnaW4tbGVmdDozcHg7XCI+JHtlc2NhcGVIdG1sKGFubm90YXRpb24pfTwvc3Bhbj5gIDogJyc7XG4gICAgICAgIGh0bWwgKz0gYDxzcGFuIGNsYXNzPVwia3ctYmFkZ2VcIiR7dGl0bGVBdHRyfT48c3BhbiBjbGFzcz1cImt3LXJhbmtcIj4jJHtpZHggKyAxfTwvc3Bhbj4ke2VzY2FwZUh0bWwoa3cpfSR7YW5ub3RIdG1sfTwvc3Bhbj5gO1xuICAgICAgfSk7XG4gICAgICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nO1xuICAgIH1cblxuICAgIC8vIFx1MjUwMFx1MjUwMCBDdWx0dXJlIGluZGljYXRvcnMgKG9wdGlvbmFsKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBjb25zdCBjdWx0dXJlID0gQXJyYXkuaXNBcnJheShkYXRhLmN1bHR1cmVfaW5kaWNhdG9ycykgPyBkYXRhLmN1bHR1cmVfaW5kaWNhdG9ycyA6IFtdO1xuICAgIGlmIChjdWx0dXJlLmxlbmd0aCA+IDApIHtcbiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJhbmFseXNpcy1zZWN0aW9uXCI+PGgyPlx1RDgzQ1x1REZFMiBDdWx0dXJlIEluZGljYXRvcnM8L2gyPjx1bCBjbGFzcz1cInByZWZlcnJlZC1saXN0XCI+JztcbiAgICAgIGN1bHR1cmUuZm9yRWFjaChjID0+IHsgaHRtbCArPSBgPGxpPiR7Y308L2xpPmA7IH0pO1xuICAgICAgaHRtbCArPSAnPC91bD48L2Rpdj4nO1xuICAgIH1cblxuICAgIC8vIFx1MjUwMFx1MjUwMCBNdXN0LWhhdmUgcmVxdWlyZW1lbnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICAgIGNvbnN0IG11c3RIYXZlID0gQXJyYXkuaXNBcnJheShkYXRhLm11c3RfaGF2ZV9yZXF1aXJlbWVudHMpID8gZGF0YS5tdXN0X2hhdmVfcmVxdWlyZW1lbnRzIDogW107XG4gICAgaWYgKG11c3RIYXZlLmxlbmd0aCA+IDApIHtcbiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJhbmFseXNpcy1zZWN0aW9uXCI+PGgyPlx1MjcwNSBNdXN0LUhhdmUgUmVxdWlyZW1lbnRzPC9oMj48dWwgY2xhc3M9XCJwcmVmZXJyZWQtbGlzdFwiPic7XG4gICAgICBtdXN0SGF2ZS5mb3JFYWNoKHIgPT4geyBodG1sICs9IGA8bGk+JHtyfTwvbGk+YDsgfSk7XG4gICAgICBodG1sICs9ICc8L3VsPjwvZGl2Pic7XG4gICAgfVxuXG4gICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cIm5hdi1idXR0b25zIG5hdi1lbmRcIj48YnV0dG9uIGNsYXNzPVwiY29udGludWUtYnRuXCIgb25jbGljaz1cInNlbmRBY3Rpb24oXFx1MDAyN3JlY29tbWVuZF9jdXN0b21pemF0aW9uc1xcdTAwMjcpXCI+Q29udGludWUgdG8gQ3VzdG9taXphdGlvbnMgXHUyMTkyPC9idXR0b24+PC9kaXY+JztcbiAgICBodG1sICs9ICc8L2Rpdj4nOyAvLyAuYW5hbHlzaXMtcGFnZVxuICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5lcnJvcignQW5hbHlzaXMgcGFyc2luZyBlcnJvcjonLCBlLCAnT3JpZ2luYWwgcmVzdWx0OicsIHJlc3VsdCk7XG4gICAgY29udGVudC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+PGRpdiBjbGFzcz1cImljb25cIj5cdTI3NEM8L2Rpdj48aDM+QW5hbHlzaXMgRXJyb3I8L2gzPjxwPkNvdWxkIG5vdCBwYXJzZSBhbmFseXNpcyByZXN1bHRzOiAke2VzY2FwZUh0bWwoZS5tZXNzYWdlKX08L3A+PGRldGFpbHM+PHN1bW1hcnk+RGVidWcgSW5mbzwvc3VtbWFyeT48cHJlPiR7ZXNjYXBlSHRtbChKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpKX08L3ByZT48L2RldGFpbHM+PC9kaXY+YDtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgQ3VzdG9taXphdGlvbiByZXNwb25zZSBoYW5kbGVyIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVDdXN0b21pemF0aW9uUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgdHJ5IHtcbiAgICAvLyBBY2NlcHQgYSBwcmUtcGFyc2VkIG9iamVjdCBvciBhIHJhdyBzdHJpbmcgKHBhcnNlIGF0IGJvdW5kYXJ5KS5cbiAgICBjb25zdCBkYXRhID0gKHJlc3BvbnNlICE9PSBudWxsICYmIHR5cGVvZiByZXNwb25zZSA9PT0gJ29iamVjdCcpXG4gICAgICA/IHJlc3BvbnNlXG4gICAgICA6IGV4dHJhY3RGaXJzdEpzb25PYmplY3QocmVzcG9uc2UpO1xuICAgIGlmICghZGF0YSkge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgdHlwZW9mIHJlc3BvbnNlID09PSAnc3RyaW5nJyA/IHJlc3BvbnNlIDogJycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhICYmIChkYXRhLnJlY29tbWVuZGVkX2V4cGVyaWVuY2VzIHx8IGRhdGEucmVjb21tZW5kZWRfc2tpbGxzKSkge1xuICAgICAgc3RhdGVNYW5hZ2VyLnNldFRhYkRhdGEoJ2N1c3RvbWl6YXRpb25zJywgZGF0YSk7XG4gICAgICB3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucyA9IGRhdGE7XG4gICAgICBzYXZlVGFiRGF0YSgpO1xuXG4gICAgICBpZiAoIWlzUmVjb25uZWN0SW5Qcm9ncmVzcygpKSB7XG4gICAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsICdcdTI3MDUgQ3VzdG9taXphdGlvbnMgZ2VuZXJhdGVkISBQbGVhc2UgcmV2aWV3IGVhY2ggc2VjdGlvbiBpbiB0aGUgKipDdXN0b21pemF0aW9ucyoqIHRhYiBcdTIwMTQgRXhwZXJpZW5jZXMsIEFjaGlldmVtZW50cywgU2tpbGxzLCBTdW1tYXJ5LCBhbmQgUHVibGljYXRpb25zLiBTZWxlY3QgeW91ciBwcmVmZXJlbmNlcyB1c2luZyB0aGUgYWN0aW9uIGJ1dHRvbnMsIHRoZW4gc3VibWl0IHlvdXIgZGVjaXNpb25zLicpO1xuICAgICAgICBzd2l0Y2hUYWIoJ2V4cC1yZXZpZXcnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1JlY29ubmVjdEluUHJvZ3Jlc3MoKSkge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgcmVzcG9uc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5lcnJvcignQ3VzdG9taXphdGlvbiByZXNwb25zZSBlcnJvcjonLCBlKTtcbiAgICBpZiAoIWlzUmVjb25uZWN0SW5Qcm9ncmVzcygpKSB7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCByZXNwb25zZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU3luYyB0aGUgc2tpbGxzLXRpdGxlIHNlbGVjdC9jdXN0b20taW5wdXQgY29udHJvbHMgdG8gYSBnaXZlbiB0aXRsZSB2YWx1ZSxcbiAqIGFuZCBhdHRhY2ggY2hhbmdlIGxpc3RlbmVycyBzbyB1cGRhdGVzIGFyZSBzYXZlZCB2aWEgdGhlIEFQSS5cbiAqIGR1Y2tmbG93OlxuICogICBpZDogZ2VuZXJhdGlvbl9zZXR0aW5ncy53ZWJfcmV2aWV3X3RhYmxlX2Jhc2UuTDMzMFxuICogICBraW5kOiB1aVxuICogICB0aW1lc3RhbXA6ICcyMDI2LTAzLTI3VDAxOjIzOjI4WidcbiAqICAgc3RhdHVzOiBsaXZlXG4gKiAgIGhhbmRsZXM6XG4gKiAgIC0gdWk6Z2VuZXJhdGlvbi1zZXR0aW5ncy5zeW5jLXNraWxscy10aXRsZVxuICogICBjYWxsczpcbiAqICAgLSBQT1NUIC9hcGkvZ2VuZXJhdGlvbi1zZXR0aW5nc1xuICogICByZWFkczpcbiAqICAgLSByZXNwb25zZTpHRVQgL2FwaS9zdGF0dXMuc2tpbGxzX3NlY3Rpb25fdGl0bGVcbiAqICAgd3JpdGVzOlxuICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL2dlbmVyYXRpb24tc2V0dGluZ3Muc2tpbGxzX3NlY3Rpb25fdGl0bGVcbiAqICAgbm90ZXM6IEtlZXBzIHRoZSBVSSBza2lsbHMtdGl0bGUgY29udHJvbHMgaW4gc3luYyB3aXRoIHN0YXR1cyBkYXRhIGFuZCBwZXJzaXN0cyB0aXRsZSBjaGFuZ2VzIGJhY2sgdG8gdGhlIHNlc3Npb24gc2V0dGluZ3Mgcm91dGUuXG4gKi9cbmZ1bmN0aW9uIF9zeW5jU2tpbGxzVGl0bGVDb250cm9scyhjdXJyZW50VGl0bGUpIHtcbiAgY29uc3Qga25vd25PcHRpb25zID0gWydTa2lsbHMnLCAnVGVjaG5pY2FsIFNraWxscycsICdLZXkgU2tpbGxzJywgJ0NvcmUgU2tpbGxzJ107XG4gIGNvbnN0IHNlbCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGxzLXRpdGxlLXNlbGVjdCcpO1xuICBjb25zdCBjdXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxscy10aXRsZS1jdXN0b20nKTtcbiAgaWYgKCFzZWwpIHJldHVybjtcblxuICBjb25zdCBpc0tub3duID0ga25vd25PcHRpb25zLmluY2x1ZGVzKGN1cnJlbnRUaXRsZSk7XG4gIGlmIChpc0tub3duKSB7XG4gICAgc2VsLnZhbHVlID0gY3VycmVudFRpdGxlO1xuICAgIGlmIChjdXN0KSBjdXN0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH0gZWxzZSB7XG4gICAgc2VsLnZhbHVlID0gJ19fY3VzdG9tX18nO1xuICAgIGlmIChjdXN0KSB7XG4gICAgICBjdXN0LnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIGN1c3QudmFsdWUgPSBjdXJyZW50VGl0bGU7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2F2ZVRpdGxlID0gYXN5bmMgKHRpdGxlKSA9PiB7XG4gICAgdHJ5IHsgYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL2dlbmVyYXRpb24tc2V0dGluZ3MnLCB7IHNraWxsc19zZWN0aW9uX3RpdGxlOiB0aXRsZSB9KTsgfVxuICAgIGNhdGNoIChlKSB7IGxvZy53YXJuKCdGYWlsZWQgdG8gc2F2ZSBza2lsbHNfc2VjdGlvbl90aXRsZSBzZXR0aW5nOicsIGUpOyB9XG4gIH07XG5cbiAgc2VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICBpZiAoc2VsLnZhbHVlID09PSAnX19jdXN0b21fXycpIHtcbiAgICAgIGlmIChjdXN0KSB7IGN1c3Quc3R5bGUuZGlzcGxheSA9ICcnOyBjdXN0LmZvY3VzKCk7IH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN1c3QpIGN1c3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHNhdmVUaXRsZShzZWwudmFsdWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGN1c3QpIHtcbiAgICBjdXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHYgPSBjdXN0LnZhbHVlLnRyaW0oKTtcbiAgICAgIGlmICh2KSBzYXZlVGl0bGUodik7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW5kZXJzIG9uZSBvZiB0aGUgNSByZXZpZXcgcGFuZXMgYXMgYSB0b3AtbGV2ZWwgdGFiLlxuICogUmVwbGFjZXMgdGhlIG9sZCBzdWItdGFiIGFwcHJvYWNoIHdpdGggYSBmbGF0IHNpbmdsZS1sZXZlbCB0YWIgc3RydWN0dXJlLlxuICovXG5hc3luYyBmdW5jdGlvbiBwb3B1bGF0ZVJldmlld1RhYihwYW5lKSB7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICBjb25zdCBjdXN0b21pemF0aW9ucyA9IHN0YXRlTWFuYWdlci5nZXRUYWJEYXRhKCdjdXN0b21pemF0aW9ucycpO1xuXG4gIGlmICghd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgfHwgIWN1c3RvbWl6YXRpb25zKSB7XG4gICAgY29udGVudC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+PGRpdiBjbGFzcz1cImljb25cIj5cdTI2OTlcdUZFMEY8L2Rpdj48aDM+UmV2aWV3IEN1c3RvbWl6YXRpb25zPC9oMz48cD5DbGljayBcIlJlY29tbWVuZCBDdXN0b21pemF0aW9uc1wiIHRvIGdlbmVyYXRlIHJlY29tbWVuZGF0aW9ucy48L3A+PC9kaXY+JztcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYW5lQ29uZmlnID0ge1xuICAgIGV4cGVyaWVuY2VzOiAgIHsgdGl0bGU6ICcnLCBkZXNjOiAnU29ydGVkIGJ5IGRhdGUgKG1vc3QgcmVjZW50IGZpcnN0KS4gQ2xpY2sgYWN0aW9uIGJ1dHRvbnMgdG8gb3ZlcnJpZGUgcmVjb21tZW5kYXRpb25zLicsICAgICAgICAgY29udGFpbmVyOiAnZXhwZXJpZW5jZS10YWJsZS1jb250YWluZXInICAgfSxcbiAgICBza2lsbHM6ICAgICAgICB7IHRpdGxlOiAnXHVEODNEXHVERUUwXHVGRTBGIFNraWxscycsICAgICAgICAgICBkZXNjOiAnU29ydGVkIGJ5IHJlbGV2YW5jZS4gU2VsZWN0IGhvdyB0byBmZWF0dXJlIGVhY2ggc2tpbGwuJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogJ3NraWxscy10YWJsZS1jb250YWluZXInICAgICAgIH0sXG4gICAgYWNoaWV2ZW1lbnRzOiAgeyB0aXRsZTogJ1x1RDgzQ1x1REZDNiBBY2hpZXZlbWVudHMnLCAgICAgIGRlc2M6ICdTZWxlY3QgaG93IHRvIGZlYXR1cmUgZWFjaCBrZXkgYWNoaWV2ZW1lbnQuIEFJIHJlY29tbWVuZGF0aW9ucyBhcmUgcHJlLXNlbGVjdGVkLicsICBjb250YWluZXI6ICdhY2hpZXZlbWVudHMtdGFibGUtY29udGFpbmVyJyAgfSxcbiAgICBzdW1tYXJ5OiAgICAgICB7IHRpdGxlOiAnXHVEODNEXHVEQ0REIFByb2Zlc3Npb25hbCBTdW1tYXJ5JywgZGVzYzogJ1NlbGVjdCB3aGljaCBwcm9mZXNzaW9uYWwgc3VtbWFyeSB0byB1c2UuIFRoZSBBSVxcJ3MgcmVjb21tZW5kYXRpb24gaXMgcHJlLXNlbGVjdGVkLicsIGNvbnRhaW5lcjogJ3N1bW1hcnktZm9jdXMtY29udGFpbmVyJyAgICB9LFxuICAgIHB1YmxpY2F0aW9uczogIHsgdGl0bGU6ICdcdUQ4M0RcdURDQzQgUHVibGljYXRpb25zJywgICAgICBkZXNjOiAnQWxsIHB1YmxpY2F0aW9ucyByYW5rZWQgYnkgcmVsZXZhbmNlLiBBY2NlcHQgb3IgcmVqZWN0IGVhY2ggZm9yIHlvdXIgQ1YuJywgICAgICAgICAgY29udGFpbmVyOiAncHVibGljYXRpb25zLXRhYmxlLWNvbnRhaW5lcicgfSxcbiAgfTtcbiAgY29uc3QgY2ZnID0gcGFuZUNvbmZpZ1twYW5lXSB8fCB7fTtcblxuICBjb25zdCBoZWFkZXJIdG1sID0gcGFuZSA9PT0gJ2V4cGVyaWVuY2VzJyA/IGBcbiAgICA8aDE+XHUyNjk5XHVGRTBGIFJldmlldyBDdXN0b21pemF0aW9uIFJlY29tbWVuZGF0aW9uczwvaDE+XG4gICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MTZweDtcIj5SZXZpZXcgdGhlIEFJJ3MgcmVjb21tZW5kYXRpb25zLiBVc2UgdGhlIGFjdGlvbiBidXR0b25zIHRvIGFkanVzdCBlYWNoIGl0ZW0sIHRoZW4gc2F2ZSB5b3VyIGRlY2lzaW9ucyBiZWZvcmUgZ2VuZXJhdGluZyB0aGUgQ1YuPC9wPlxuICAgIDxkaXYgaWQ9XCJwYWdlLWVzdGltYXRlLXdpZGdldFwiIGNsYXNzPVwicGFnZS1lc3RpbWF0ZSBva1wiPlxuICAgICAgPHNwYW4gaWQ9XCJwZS1pY29uXCI+XHVEODNEXHVEQ0M0PC9zcGFuPlxuICAgICAgPHNwYW4gaWQ9XCJwZS1sYWJlbFwiPkVzdGltYXRlZCBsZW5ndGg6IGNhbGN1bGF0aW5nXHUyMDI2PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cInBlLWJhclwiPjxkaXYgY2xhc3M9XCJwZS1maWxsXCIgaWQ9XCJwZS1maWxsXCIgc3R5bGU9XCJ3aWR0aDowJTtiYWNrZ3JvdW5kOiM4NmVmYWM7XCI+PC9kaXY+PC9kaXY+XG4gICAgPC9kaXY+XG4gIGAgOiAoY2ZnLnRpdGxlID8gYDxoMiBzdHlsZT1cIm1hcmdpbjowIDAgMTJweDtcIj4ke2NmZy50aXRsZX08L2gyPmAgOiAnJyk7XG5cbiAgY29uc3QgbmF2QmFjayA9IHtcbiAgICBza2lsbHM6ICAgICAgIGA8YnV0dG9uIGNsYXNzPVwiYmFjay1idG5cIiBvbmNsaWNrPVwic3dpdGNoVGFiKCdhY2gtZWRpdG9yJylcIj5cdTIxOTAgQmFjayB0byBFeHBlcmllbmNlIEJ1bGxldHM8L2J1dHRvbj5gLFxuICAgIGFjaGlldmVtZW50czogYDxidXR0b24gY2xhc3M9XCJiYWNrLWJ0blwiIG9uY2xpY2s9XCJzd2l0Y2hUYWIoJ3NraWxscy1yZXZpZXcnKVwiPlx1MjE5MCBCYWNrIHRvIFNraWxsczwvYnV0dG9uPmAsXG4gICAgcHVibGljYXRpb25zOiBgPGJ1dHRvbiBjbGFzcz1cImJhY2stYnRuXCIgb25jbGljaz1cInN3aXRjaFRhYignc3VtbWFyeS1yZXZpZXcnKVwiPlx1MjE5MCBCYWNrIHRvIFN1bW1hcnk8L2J1dHRvbj5gLFxuICB9O1xuICBjb25zdCBuYXZDb250aW51ZSA9IHtcbiAgICBleHBlcmllbmNlczogIGA8YnV0dG9uIGNsYXNzPVwiY29udGludWUtYnRuXCIgb25jbGljaz1cInN1Ym1pdEV4cGVyaWVuY2VEZWNpc2lvbnMoKVwiPkNvbnRpbnVlIHRvIEV4cGVyaWVuY2UgQnVsbGV0cyBcdTIxOTI8L2J1dHRvbj5gLFxuICAgIHNraWxsczogICAgICAgYDxidXR0b24gY2xhc3M9XCJjb250aW51ZS1idG5cIiBvbmNsaWNrPVwic3VibWl0U2tpbGxEZWNpc2lvbnMoKVwiPkNvbnRpbnVlIHRvIEFjaGlldmVtZW50cyBcdTIxOTI8L2J1dHRvbj5gLFxuICAgIGFjaGlldmVtZW50czogYDxidXR0b24gY2xhc3M9XCJjb250aW51ZS1idG5cIiBvbmNsaWNrPVwic3VibWl0QWNoaWV2ZW1lbnREZWNpc2lvbnMoKVwiPkNvbnRpbnVlIHRvIFRhZ2xpbmUgXHUyMTkyPC9idXR0b24+YCxcbiAgICBwdWJsaWNhdGlvbnM6IGA8YnV0dG9uIGNsYXNzPVwiY29udGludWUtYnRuXCIgb25jbGljaz1cInN1Ym1pdFB1YmxpY2F0aW9uRGVjaXNpb25zKClcIj5Db250aW51ZSB0byBSZXdyaXRlIFx1MjE5MjwvYnV0dG9uPmAsXG4gIH07XG4gIGNvbnN0IG5hdkh0bWwgPSBwYW5lID09PSAnc3VtbWFyeScgPyAnJyA6IGBcbiAgICA8ZGl2IGNsYXNzPVwibmF2LWJ1dHRvbnMke3BhbmUgPT09ICdleHBlcmllbmNlcycgPyAnIG5hdi1lbmQnIDogJyd9XCIgc3R5bGU9XCJtYXJnaW46MTZweCAwO1wiPlxuICAgICAgJHtuYXZCYWNrW3BhbmVdIHx8ICcnfVxuICAgICAgJHtuYXZDb250aW51ZVtwYW5lXSB8fCAnJ31cbiAgICA8L2Rpdj5gO1xuXG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICR7aGVhZGVySHRtbH1cbiAgICAke2NmZy5kZXNjID8gYDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtmb250LXNpemU6MC45NWVtO21hcmdpbi1ib3R0b206MTZweDtcIj4ke2VzY2FwZUh0bWwoY2ZnLmRlc2MpfTwvcD5gIDogJyd9XG4gICAgPGRpdiBpZD1cIiR7Y2ZnLmNvbnRhaW5lcn1cIj48L2Rpdj5cbiAgICAke25hdkh0bWx9XG4gIGA7XG5cbiAgd2luZG93Ll9hY3RpdmVSZXZpZXdQYW5lID0gcGFuZTtcbiAgc3dpdGNoIChwYW5lKSB7XG4gICAgY2FzZSAnZXhwZXJpZW5jZXMnOlxuICAgICAgYXdhaXQgYnVpbGRFeHBlcmllbmNlUmV2aWV3VGFibGUoKTtcbiAgICAgIF91cGRhdGVQYWdlRXN0aW1hdGUoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NraWxscyc6XG4gICAgICBhd2FpdCBidWlsZFNraWxsc1Jldmlld1RhYmxlKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdhY2hpZXZlbWVudHMnOlxuICAgICAgYXdhaXQgYnVpbGRBY2hpZXZlbWVudHNSZXZpZXdUYWJsZSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc3VtbWFyeSc6XG4gICAgICBhd2FpdCBidWlsZFN1bW1hcnlGb2N1c1NlY3Rpb24oKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3B1YmxpY2F0aW9ucyc6XG4gICAgICBhd2FpdCBidWlsZFB1YmxpY2F0aW9uc1Jldmlld1RhYmxlKCk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG4vLyBUcmFjayB3aGljaCBwYW5lIGlzIGN1cnJlbnRseSBhY3RpdmVcbndpbmRvdy5fYWN0aXZlUmV2aWV3UGFuZSA9ICdleHBlcmllbmNlcyc7XG5cbmFzeW5jIGZ1bmN0aW9uIHN3aXRjaFJldmlld1N1YnRhYihwYW5lKSB7XG4gIC8vIFVwZGF0ZSBidXR0b24gc3RhdGVzXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5yZXZpZXctc3VidGFiJykuZm9yRWFjaChidG4gPT4ge1xuICAgIGJ0bi5jbGFzc0xpc3QudG9nZ2xlKCdhY3RpdmUnLCBidG4uZGF0YXNldC5wYW5lID09PSBwYW5lKTtcbiAgfSk7XG5cbiAgLy8gSGlkZSBhbGwgcGFuZXMsIHNob3cgdGhlIHNlbGVjdGVkIG9uZVxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucmV2aWV3LXBhbmUnKS5mb3JFYWNoKHAgPT4gcC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKTtcbiAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHJldmlldy1wYW5lLSR7cGFuZX1gKTtcbiAgaWYgKHRhcmdldCkgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG4gIHdpbmRvdy5fYWN0aXZlUmV2aWV3UGFuZSA9IHBhbmU7XG5cbiAgLy8gTGF6eS1sb2FkIHBhbmUgY29udGVudCBvbiBmaXJzdCB2aXNpdFxuICBpZiAoIXdpbmRvdy5fcmV2aWV3UGFuZUxvYWRlZCB8fCAhd2luZG93Ll9yZXZpZXdQYW5lTG9hZGVkW3BhbmVdKSB7XG4gICAgYXdhaXQgX2xvYWRSZXZpZXdQYW5lKHBhbmUpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9sb2FkUmV2aWV3UGFuZShwYW5lKSB7XG4gIGlmICghd2luZG93Ll9yZXZpZXdQYW5lTG9hZGVkKSB3aW5kb3cuX3Jldmlld1BhbmVMb2FkZWQgPSB7fTtcbiAgdHJ5IHtcbiAgICBzd2l0Y2ggKHBhbmUpIHtcbiAgICAgIGNhc2UgJ2V4cGVyaWVuY2VzJzogICBhd2FpdCBidWlsZEV4cGVyaWVuY2VSZXZpZXdUYWJsZSgpOyAgYnJlYWs7XG4gICAgICBjYXNlICdza2lsbHMnOiAgICAgICAgYXdhaXQgYnVpbGRTa2lsbHNSZXZpZXdUYWJsZSgpOyAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FjaGlldmVtZW50cyc6ICBhd2FpdCBidWlsZEFjaGlldmVtZW50c1Jldmlld1RhYmxlKCk7IGJyZWFrO1xuICAgICAgY2FzZSAnc3VtbWFyeSc6ICAgICAgIGF3YWl0IGJ1aWxkU3VtbWFyeUZvY3VzU2VjdGlvbigpOyAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwdWJsaWNhdGlvbnMnOiAgYXdhaXQgYnVpbGRQdWJsaWNhdGlvbnNSZXZpZXdUYWJsZSgpOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHJldHVybjtcbiAgICB9XG4gICAgd2luZG93Ll9yZXZpZXdQYW5lTG9hZGVkW3BhbmVdID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBkZWxldGUgd2luZG93Ll9yZXZpZXdQYW5lTG9hZGVkW3BhbmVdO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBQYWdlLWVzdGltYXRlIHdpZGdldCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gX3VwZGF0ZVBhZ2VFc3RpbWF0ZSgpIHtcbiAgY29uc3Qgd2lkZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtZXN0aW1hdGUtd2lkZ2V0Jyk7XG4gIGlmICghd2lkZ2V0KSByZXR1cm47XG5cbiAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGUtbGFiZWwnKTtcbiAgY29uc3QgZmlsbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwZS1maWxsJyk7XG4gIGNvbnN0IGljb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGUtaWNvbicpO1xuXG4gIGlmIChsYWJlbCkgbGFiZWwudGV4dENvbnRlbnQgPSAnVXBkYXRpbmcgc2VydmVyIGxheW91dCBlc3RpbWF0ZVx1MjAyNic7XG4gIGlmIChmaWxsKSBmaWxsLnN0eWxlLndpZHRoID0gJzAlJztcbiAgaWYgKGljb24pIGljb24udGV4dENvbnRlbnQgPSAnXHUyM0YzJztcblxuICBjb25zdCBwYXlsb2FkID0ge1xuICAgIGV4cGVyaWVuY2VfZGVjaXNpb25zOiB7XG4gICAgICAuLi4oKHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMgJiYgd2luZG93Ll9zYXZlZERlY2lzaW9ucy5leHBlcmllbmNlX2RlY2lzaW9ucykgfHwge30pLFxuICAgICAgLi4uKHVzZXJTZWxlY3Rpb25zLmV4cGVyaWVuY2VzIHx8IHt9KSxcbiAgICB9LFxuICAgIHNraWxsX2RlY2lzaW9uczoge1xuICAgICAgLi4uKCh3aW5kb3cuX3NhdmVkRGVjaXNpb25zICYmIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMuc2tpbGxfZGVjaXNpb25zKSB8fCB7fSksXG4gICAgICAuLi4odXNlclNlbGVjdGlvbnMuc2tpbGxzIHx8IHt9KSxcbiAgICB9LFxuICAgIGFjaGlldmVtZW50X2RlY2lzaW9uczogKFxuICAgICAgKHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMgJiYgd2luZG93Ll9zYXZlZERlY2lzaW9ucy5hY2hpZXZlbWVudF9kZWNpc2lvbnMpXG4gICAgICB8fCB3aW5kb3cuYWNoaWV2ZW1lbnREZWNpc2lvbnNcbiAgICAgIHx8IHt9XG4gICAgKSxcbiAgICBwdWJsaWNhdGlvbl9kZWNpc2lvbnM6IChcbiAgICAgICh3aW5kb3cuX3NhdmVkRGVjaXNpb25zICYmIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMucHVibGljYXRpb25fZGVjaXNpb25zKVxuICAgICAgfHwgd2luZG93LnB1YmxpY2F0aW9uRGVjaXNpb25zXG4gICAgICB8fCB7fVxuICAgICksXG4gICAgc3VtbWFyeV9mb2N1c19vdmVycmlkZTogd2luZG93LnNlbGVjdGVkU3VtbWFyeUtleSB8fCBudWxsLFxuICB9O1xuXG4gIGNvbnN0IHJlcXVlc3RJZCA9ICsrcGFnZUVzdGltYXRlUmVxdWVzdElkO1xuICBjbGVhclRpbWVvdXQocGFnZUVzdGltYXRlVGltZXIpO1xuICBwYWdlRXN0aW1hdGVUaW1lciA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9jdi9sYXlvdXQtZXN0aW1hdGUnLCBwYXlsb2FkKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5lcnJvciB8fCAnZXN0aW1hdGUgZmFpbGVkJyk7XG4gICAgICBpZiAocmVxdWVzdElkICE9PSBwYWdlRXN0aW1hdGVSZXF1ZXN0SWQpIHJldHVybjtcblxuICAgICAgY29uc3QgcGFnZXMgPSBOdW1iZXIocmVzcG9uc2UucGFnZV9jb3VudF9lc3RpbWF0ZSB8fCAwKTtcbiAgICAgIGNvbnN0IHBjdCA9IE1hdGgubWluKDEwMCwgKHBhZ2VzIC8gMykgKiAxMDApO1xuICAgICAgY29uc3QgY29uZmlkZW5jZSA9IE51bWJlcihyZXNwb25zZS5wYWdlX2NvdW50X2NvbmZpZGVuY2UgfHwgMCk7XG5cbiAgICAgIGxldCBjbHMgPSAnb2snO1xuICAgICAgbGV0IGNvbG91ciA9ICcjMjJjNTVlJztcbiAgICAgIGxldCBpY29uVGV4dCA9IHJlc3BvbnNlLnBhZ2VfY291bnRfZXhhY3QgIT0gbnVsbCA/ICdcdTI3MDUnIDogJ1x1RDgzRFx1RENDNCc7XG4gICAgICBpZiAocmVzcG9uc2UucGFnZV9sZW5ndGhfd2FybmluZykge1xuICAgICAgICBjbHMgPSBwYWdlcyA+IDMgPyAnb3ZlcicgOiAnd2Fybic7XG4gICAgICAgIGNvbG91ciA9IHBhZ2VzID4gMyA/ICcjZWY0NDQ0JyA6ICcjZjU5ZTBiJztcbiAgICAgICAgaWNvblRleHQgPSBwYWdlcyA+IDMgPyAnXHVEODNEXHVERUE4JyA6ICdcdTI2QTBcdUZFMEYnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VMYWJlbCA9IHJlc3BvbnNlLnBhZ2VfY291bnRfZXhhY3QgIT0gbnVsbFxuICAgICAgICA/IGBFeGFjdDogJHtyZXNwb25zZS5wYWdlX2NvdW50X2V4YWN0fSBwYWdlJHtyZXNwb25zZS5wYWdlX2NvdW50X2V4YWN0ID09PSAxID8gJycgOiAncyd9YFxuICAgICAgICA6IGBFc3RpbWF0ZWQ6ICR7cGFnZXMudG9GaXhlZCgxKX0gcGFnZXNgO1xuICAgICAgY29uc3QgY29uZmlkZW5jZUxhYmVsID0gcmVzcG9uc2UucGFnZV9jb3VudF9leGFjdCAhPSBudWxsXG4gICAgICAgID8gJydcbiAgICAgICAgOiBgICgke01hdGgucm91bmQoY29uZmlkZW5jZSAqIDEwMCl9JSBjb25maWRlbmNlKWA7XG4gICAgICBjb25zdCBjb250cmlidXRvclRleHQgPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlLmNvbnRyaWJ1dG9ycykgJiYgcmVzcG9uc2UuY29udHJpYnV0b3JzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBgICR7cmVzcG9uc2UuY29udHJpYnV0b3JzWzBdfS5gXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCByZWNoZWNrVGV4dCA9IHJlc3BvbnNlLnBhZ2VfY291bnRfbmVlZHNfZXhhY3RfcmVjaGVjayAmJiByZXNwb25zZS5wYWdlX2NvdW50X2V4YWN0ID09IG51bGxcbiAgICAgICAgPyAnIEV4YWN0IHJlY2hlY2sgcmVjb21tZW5kZWQuJ1xuICAgICAgICA6ICcnO1xuXG4gICAgICB3aWRnZXQuY2xhc3NOYW1lID0gYHBhZ2UtZXN0aW1hdGUgJHtjbHN9YDtcbiAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICBsYWJlbC50ZXh0Q29udGVudCA9IGAke3NvdXJjZUxhYmVsfSR7Y29uZmlkZW5jZUxhYmVsfS4ke2NvbnRyaWJ1dG9yVGV4dH0ke3JlY2hlY2tUZXh0fWAudHJpbSgpO1xuICAgICAgfVxuICAgICAgaWYgKGZpbGwpIHtcbiAgICAgICAgZmlsbC5zdHlsZS53aWR0aCA9IGAke3BjdH0lYDtcbiAgICAgICAgZmlsbC5zdHlsZS5iYWNrZ3JvdW5kID0gY29sb3VyO1xuICAgICAgfVxuICAgICAgaWYgKGljb24pIGljb24udGV4dENvbnRlbnQgPSBpY29uVGV4dDtcblxuICAgICAgc3RhdGVNYW5hZ2VyLnNldEdlbmVyYXRpb25TdGF0ZSh7XG4gICAgICAgIHBhZ2VDb3VudEVzdGltYXRlOiByZXNwb25zZS5wYWdlX2NvdW50X2VzdGltYXRlID8/IG51bGwsXG4gICAgICAgIHBhZ2VDb3VudEV4YWN0OiByZXNwb25zZS5wYWdlX2NvdW50X2V4YWN0ID8/IG51bGwsXG4gICAgICAgIHBhZ2VDb3VudENvbmZpZGVuY2U6IHJlc3BvbnNlLnBhZ2VfY291bnRfY29uZmlkZW5jZSA/PyBudWxsLFxuICAgICAgICBwYWdlQ291bnRTb3VyY2U6IHJlc3BvbnNlLnBhZ2VfY291bnRfc291cmNlIHx8IG51bGwsXG4gICAgICAgIHBhZ2VOZWVkc0V4YWN0UmVjaGVjazogQm9vbGVhbihyZXNwb25zZS5wYWdlX2NvdW50X25lZWRzX2V4YWN0X3JlY2hlY2spLFxuICAgICAgICBwYWdlV2FybmluZzogQm9vbGVhbihyZXNwb25zZS5wYWdlX2xlbmd0aF93YXJuaW5nKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAocmVxdWVzdElkICE9PSBwYWdlRXN0aW1hdGVSZXF1ZXN0SWQpIHJldHVybjtcbiAgICAgIHdpZGdldC5jbGFzc05hbWUgPSAncGFnZS1lc3RpbWF0ZSB3YXJuJztcbiAgICAgIGlmIChsYWJlbCkgbGFiZWwudGV4dENvbnRlbnQgPSBgTGF5b3V0IGVzdGltYXRlIHVuYXZhaWxhYmxlOiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICAgIGlmIChmaWxsKSB7XG4gICAgICAgIGZpbGwuc3R5bGUud2lkdGggPSAnMCUnO1xuICAgICAgICBmaWxsLnN0eWxlLmJhY2tncm91bmQgPSAnI2Y1OWUwYic7XG4gICAgICB9XG4gICAgICBpZiAoaWNvbikgaWNvbi50ZXh0Q29udGVudCA9ICdcdTI2QTBcdUZFMEYnO1xuICAgIH1cbiAgfSwgMjUwKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFNoYXJlZCBhY3Rpb24gY2xpY2sgaGFuZGxlcnMgKGV4cGVyaWVuY2UgKyBza2lsbHMgdGFibGVzKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gaGFuZGxlQWN0aW9uQ2xpY2soaXRlbUlkLCBhY3Rpb24sIHR5cGUpIHtcbiAgLy8gUmVtb3ZlIGFjdGl2ZSBjbGFzcyBmcm9tIGFsbCBidXR0b25zIGluIHRoaXMgcm93XG4gIGNvbnN0IHJvdyA9IHR5cGUgPT09ICdleHBlcmllbmNlJ1xuICAgID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgdHJbZGF0YS1leHAtaWQ9XCIke2l0ZW1JZH1cIl1gKVxuICAgIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgdHJbZGF0YS1za2lsbD1cIiR7aXRlbUlkfVwiXWApO1xuXG4gIGNvbnN0IGJ1dHRvbnMgPSByb3cucXVlcnlTZWxlY3RvckFsbCgnLmljb24tYnRuJyk7XG4gIGJ1dHRvbnMuZm9yRWFjaChidG4gPT4ge1xuICAgIGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICBpZiAoYnRuLmhhc0F0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJykpIGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICdmYWxzZScpO1xuICB9KTtcblxuICAvLyBBZGQgYWN0aXZlIGNsYXNzIHRvIGNsaWNrZWQgYnV0dG9uXG4gIGNvbnN0IGNsaWNrZWRCdG4gPSByb3cucXVlcnlTZWxlY3RvcihgW2RhdGEtYWN0aW9uPVwiJHthY3Rpb259XCJdYCk7XG4gIGNsaWNrZWRCdG4uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gIGlmIChjbGlja2VkQnRuLmhhc0F0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJykpIGNsaWNrZWRCdG4uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAndHJ1ZScpO1xuXG4gIC8vIFN0b3JlIHNlbGVjdGlvbiBhbmQgcmVjb3JkIGV4cGxpY2l0IHJldmlld1xuICBpZiAodHlwZSA9PT0gJ2V4cGVyaWVuY2UnKSB7XG4gICAgdXNlclNlbGVjdGlvbnMuZXhwZXJpZW5jZXNbaXRlbUlkXSA9IGFjdGlvbjtcbiAgICB3aW5kb3cuX2V4cGxpY2l0bHlSZXZpZXdlZCA9IHdpbmRvdy5fZXhwbGljaXRseVJldmlld2VkIHx8IHsgZXhwZXJpZW5jZXM6IG5ldyBTZXQoKSwgc2tpbGxzOiBuZXcgU2V0KCkgfTtcbiAgICB3aW5kb3cuX2V4cGxpY2l0bHlSZXZpZXdlZC5leHBlcmllbmNlcy5hZGQoaXRlbUlkKTtcbiAgfSBlbHNlIHtcbiAgICB1c2VyU2VsZWN0aW9ucy5za2lsbHNbaXRlbUlkXSA9IGFjdGlvbjtcbiAgICB3aW5kb3cuX2V4cGxpY2l0bHlSZXZpZXdlZCA9IHdpbmRvdy5fZXhwbGljaXRseVJldmlld2VkIHx8IHsgZXhwZXJpZW5jZXM6IG5ldyBTZXQoKSwgc2tpbGxzOiBuZXcgU2V0KCkgfTtcbiAgICB3aW5kb3cuX2V4cGxpY2l0bHlSZXZpZXdlZC5za2lsbHMuYWRkKGl0ZW1JZCk7XG4gIH1cbiAgX3VwZGF0ZVBhZ2VFc3RpbWF0ZSgpO1xufVxuXG4vKipcbiAqIEFwcGx5IGEgYnVsayBhY3Rpb24gdG8gYWxsIHZpc2libGUgKERhdGFUYWJsZS1maWx0ZXJlZCkgcm93cyBpbiBvbmUgdGFibGUuXG4gKiBhY3Rpb246ICdlbXBoYXNpemUnIHwgJ2luY2x1ZGUnIHwgJ2RlLWVtcGhhc2l6ZScgfCAnZXhjbHVkZScgfCAncmVjb21tZW5kZWQnXG4gKiB0eXBlOiAgICdleHBlcmllbmNlJyB8ICdza2lsbCdcbiAqL1xuZnVuY3Rpb24gYnVsa0FjdGlvbihhY3Rpb24sIHR5cGUpIHtcbiAgY29uc3QgdGFibGVJZCAgPSB0eXBlID09PSAnZXhwZXJpZW5jZScgPyAnI2V4cGVyaWVuY2UtcmV2aWV3LXRhYmxlJyA6ICcjc2tpbGxzLXJldmlldy10YWJsZSc7XG4gIGNvbnN0IGRhdGEgICAgID0gd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgfHwge307XG4gIGNvbnN0IGR0ICAgICAgID0gJC5mbi5EYXRhVGFibGUuaXNEYXRhVGFibGUodGFibGVJZCkgPyAkKHRhYmxlSWQpLkRhdGFUYWJsZSgpIDogbnVsbDtcblxuICAvLyBJdGVyYXRlIG9ubHkgdGhlIHJvd3MgdGhhdCBEYXRhVGFibGUgY3VycmVudGx5IHNob3dzIChyZXNwZWN0cyBzZWFyY2ggZmlsdGVyKVxuICBjb25zdCByb3dzID0gZHRcbiAgICA/IGR0LnJvd3MoeyBzZWFyY2g6ICdhcHBsaWVkJyB9KS5ub2RlcygpLnRvQXJyYXkoKVxuICAgIDogQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAke3RhYmxlSWR9IHRib2R5IHRyYCkpO1xuXG4gIHJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgIGNvbnN0IGV4cElkICAgID0gcm93LmRhdGFzZXQuZXhwSWQ7XG4gICAgY29uc3Qgc2tpbGxJZCAgPSByb3cuZGF0YXNldC5za2lsbDtcbiAgICBjb25zdCBpdGVtSWQgICA9IGV4cElkIHx8IHNraWxsSWQ7XG4gICAgaWYgKCFpdGVtSWQpIHJldHVybjtcblxuICAgIGxldCByZXNvbHZlZEFjdGlvbiA9IGFjdGlvbjtcbiAgICBpZiAoYWN0aW9uID09PSAncmVjb21tZW5kZWQnKSB7XG4gICAgICByZXNvbHZlZEFjdGlvbiA9IHR5cGUgPT09ICdleHBlcmllbmNlJ1xuICAgICAgICA/IF9yZXNvbHZlZEV4cEFjdGlvbihpdGVtSWQsIGRhdGEpXG4gICAgICAgIDogX3Jlc29sdmVkU2tpbGxBY3Rpb24oaXRlbUlkLCBkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgYnV0dG9uIHN0YXRlc1xuICAgIHJvdy5xdWVyeVNlbGVjdG9yQWxsKCcuaWNvbi1idG4nKS5mb3JFYWNoKGJ0biA9PiB7XG4gICAgICBidG4uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XG4gICAgICBpZiAoYnRuLmhhc0F0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJykpIGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICdmYWxzZScpO1xuICAgIH0pO1xuICAgIGNvbnN0IHRhcmdldCA9IHJvdy5xdWVyeVNlbGVjdG9yKGBbZGF0YS1hY3Rpb249XCIke3Jlc29sdmVkQWN0aW9ufVwiXWApO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIHRhcmdldC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgIGlmICh0YXJnZXQuaGFzQXR0cmlidXRlKCdhcmlhLXByZXNzZWQnKSkgdGFyZ2V0LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgJ3RydWUnKTtcbiAgICB9XG5cbiAgICAvLyBTdG9yZSBzZWxlY3Rpb25cbiAgICBpZiAodHlwZSA9PT0gJ2V4cGVyaWVuY2UnKSB7XG4gICAgICB1c2VyU2VsZWN0aW9ucy5leHBlcmllbmNlc1tpdGVtSWRdID0gcmVzb2x2ZWRBY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHVzZXJTZWxlY3Rpb25zLnNraWxsc1tpdGVtSWRdID0gcmVzb2x2ZWRBY3Rpb247XG4gICAgfVxuICB9KTtcbiAgX3VwZGF0ZVBhZ2VFc3RpbWF0ZSgpO1xufVxuXG5mdW5jdGlvbiBfcmVzb2x2ZWRFeHBBY3Rpb24oZXhwSWQsIGRhdGEpIHtcbiAgY29uc3QgcmVjID0gZ2V0RXhwZXJpZW5jZVJlY29tbWVuZGF0aW9uKGV4cElkLCBkYXRhKTtcbiAgaWYgKHJlYyA9PT0gJ0VtcGhhc2l6ZScpICAgIHJldHVybiAnZW1waGFzaXplJztcbiAgaWYgKHJlYyA9PT0gJ0luY2x1ZGUnKSAgICAgIHJldHVybiAnaW5jbHVkZSc7XG4gIGlmIChyZWMgPT09ICdEZS1lbXBoYXNpemUnKSByZXR1cm4gJ2RlLWVtcGhhc2l6ZSc7XG4gIHJldHVybiAnZXhjbHVkZSc7XG59XG5cbmZ1bmN0aW9uIF9yZXNvbHZlZFNraWxsQWN0aW9uKHNraWxsTmFtZSwgZGF0YSkge1xuICBjb25zdCByZWMgPSBnZXRTa2lsbFJlY29tbWVuZGF0aW9uKHNraWxsTmFtZSwgZGF0YSk7XG4gIGlmIChyZWMgPT09ICdFbXBoYXNpemUnKSAgICByZXR1cm4gJ2VtcGhhc2l6ZSc7XG4gIGlmIChyZWMgPT09ICdJbmNsdWRlJykgICAgICByZXR1cm4gJ2luY2x1ZGUnO1xuICBpZiAocmVjID09PSAnRGUtZW1waGFzaXplJykgcmV0dXJuICdkZS1lbXBoYXNpemUnO1xuICByZXR1cm4gJ2V4Y2x1ZGUnO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgVGFnbGluZSByZXZpZXcgdGFiIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBwb3B1bGF0ZVRhZ2xpbmVSZXZpZXdUYWIoKSB7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICBpZiAoIWNvbnRlbnQpIHJldHVybjtcbiAgY29udGVudC5pbm5lckhUTUwgPSBgXG4gICAgPGgyIHN0eWxlPVwibWFyZ2luOjAgMCAxNnB4O1wiPlx1RDgzQ1x1REZGN1x1RkUwRiBBcHBsaWNhbnQgVGFnbGluZTwvaDI+XG4gICAgPGRpdiBpZD1cInRhZ2xpbmUtcmV2aWV3LWNvbnRhaW5lclwiPjwvZGl2PlxuICBgO1xuICBpZiAodHlwZW9mIGJ1aWxkVGFnbGluZVJldmlld1NlY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBhd2FpdCBidWlsZFRhZ2xpbmVSZXZpZXdTZWN0aW9uKCk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB7XG4gIHVzZXJTZWxlY3Rpb25zLFxuICB1cGRhdGVJbmNsdXNpb25Db3VudHMsXG4gIHN3aXRjaFRhYixcbiAgbG9hZFRhYkNvbnRlbnQsXG4gIHBvcHVsYXRlQW5hbHlzaXNUYWIsXG4gIGhhbmRsZUN1c3RvbWl6YXRpb25SZXNwb25zZSxcbiAgc2hvd1RhYmxlQmFzZWRSZXZpZXcsXG4gIHBvcHVsYXRlUmV2aWV3VGFiLFxuICBwb3B1bGF0ZVRhZ2xpbmVSZXZpZXdUYWIsXG4gIHN3aXRjaFJldmlld1N1YnRhYixcbiAgX2xvYWRSZXZpZXdQYW5lLFxuICBfdXBkYXRlUGFnZUVzdGltYXRlLFxuICBoYW5kbGVBY3Rpb25DbGljayxcbiAgYnVsa0FjdGlvbixcbiAgX3Jlc29sdmVkRXhwQWN0aW9uLFxuICBfcmVzb2x2ZWRTa2lsbEFjdGlvbixcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi93b3JrZmxvdy1zdGVwcy5qc1xuICogV29ya2Zsb3cgcHJvZ3Jlc3MgYmFyLCBwaGFzZSByZS1ydW4vYmFjay1uYXYsIGFuZCBidWxsZXQgcmVvcmRlciBtb2RhbC5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgUEhBU0VTLCBlc2NhcGVIdG1sLFxuICogICBhcHBlbmRMb2FkaW5nTWVzc2FnZSwgcmVtb3ZlTG9hZGluZ01lc3NhZ2UsIGFwcGVuZFJldHJ5TWVzc2FnZSwgYXBwZW5kTWVzc2FnZSxcbiAqICAgc2V0TG9hZGluZywgZmV0Y2hTdGF0dXMsIHN3aXRjaFRhYiwgc2VuZEFjdGlvbixcbiAqICAgc2hvd0xvYWRKb2JQYW5lbCwgdXBkYXRlQWN0aW9uQnV0dG9ucywgdXBkYXRlVGFiQmFyRm9yU3RhZ2UsXG4gKiAgIHRyYXBGb2N1cywgcmVzdG9yZUZvY3VzLCBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCxcbiAqICAgcG9zdEFuYWx5c2lzUXVlc3Rpb25zLCBxdWVzdGlvbkFuc3dlcnMsIENTU1xuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcignd29ya2Zsb3ctc3RlcHMnKTtcblxuaW1wb3J0IHsgc3RhdGVNYW5hZ2VyLCBHRU5FUkFUSU9OX1NUQVRFX0VWRU5UIH0gZnJvbSAnLi9zdGF0ZS1tYW5hZ2VyLmpzJztcblxuZnVuY3Rpb24gX2ZpbmRFeHBlcmllbmNlUmVjb21tZW5kYXRpb25SZWNvcmQoZXhwSWQpIHtcbiAgY29uc3QgZGF0YSA9IGdsb2JhbFRoaXMud2luZG93Py5wZW5kaW5nUmVjb21tZW5kYXRpb25zO1xuICBpZiAoIWRhdGEgfHwgIUFycmF5LmlzQXJyYXkoZGF0YS5leHBlcmllbmNlX3JlY29tbWVuZGF0aW9ucykpIHJldHVybiBudWxsO1xuICByZXR1cm4gZGF0YS5leHBlcmllbmNlX3JlY29tbWVuZGF0aW9ucy5maW5kKChyZWMpID0+IFN0cmluZyhyZWM/LmlkIHx8IHJlYz8uZXhwZXJpZW5jZV9pZCB8fCAnJykgPT09IFN0cmluZyhleHBJZCkpIHx8IG51bGw7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBTdGVwLW9yZGVyIGNvbnN0YW50cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuY29uc3QgX1NURVBfT1JERVIgPSBbXG4gICdqb2InLCAnYW5hbHlzaXMnLCAnY3VzdG9taXphdGlvbnMnLCAncmV3cml0ZScsICdzcGVsbCcsICdsYXlvdXQnLFxuICAnZG93bmxvYWQnLCAnY292ZXJfbGV0dGVyJywgJ3NjcmVlbmluZycsICdpbnRlcnZpZXdfcHJlcCcsICd0aGFua195b3UnLCAnaGFydmVzdCcsXG5dO1xuY29uc3QgX1NURVBfRElTUExBWSA9IHtcbiAgam9iOiAgICAgICAgICAgICdKb2IgSW5wdXQnLFxuICBhbmFseXNpczogICAgICAgJ0pvYiBBbmFseXNpcycsXG4gIGN1c3RvbWl6YXRpb25zOiAnQ3VzdG9taXNhdGlvbnMnLFxuICByZXdyaXRlOiAgICAgICAgJ1Jld3JpdGUgUmV2aWV3JyxcbiAgc3BlbGw6ICAgICAgICAgICdTcGVsbCBDaGVjaycsXG4gIGxheW91dDogICAgICAgICAnTGF5b3V0IFJldmlldycsXG4gIGRvd25sb2FkOiAgICAgICAnRmlsZSBSZXZpZXcnLFxuICBjb3Zlcl9sZXR0ZXI6ICAgJ0NvdmVyIExldHRlcicsXG4gIHNjcmVlbmluZzogICAgICAnU2NyZWVuaW5nJyxcbiAgaW50ZXJ2aWV3X3ByZXA6ICdJbnRlcnZpZXcgUHJlcCcsXG4gIHRoYW5rX3lvdTogICAgICAnVGhhbmsgWW91JyxcbiAgaGFydmVzdDogICAgICAgICdIYXJ2ZXN0Jyxcbn07XG5jb25zdCBfQUNUSU9OX0xBQkVMUyA9IHtcbiAgcmVjb21tZW5kX2N1c3RvbWl6YXRpb25zOiAnU2VsZWN0aW5nIGV4cGVyaWVuY2VzICYgc2tpbGxzXHUyMDI2JyxcbiAgZ2VuZXJhdGVfY3Y6ICdHZW5lcmF0aW5nIENWXHUyMDI2Jyxcbn07XG5cbmNvbnN0IF9OQVZfVEFCX0xBQkVMUyA9IHtcbiAgZG93bmxvYWQ6ICdcdTJCMDdcdUZFMEYgRmlsZSBSZXZpZXcnLFxufTtcblxuZnVuY3Rpb24gYXBwbHlMYXlvdXRGcmVzaG5lc3NOYXZpZ2F0aW9uU3RhdGUoKSB7XG4gIGNvbnN0IGZyZXNobmVzcyA9IHN0YXRlTWFuYWdlci5nZXRMYXlvdXRGcmVzaG5lc3MoKTtcbiAgY29uc3QgZ2VuZXJhdGlvblN0YXRlID0gc3RhdGVNYW5hZ2VyLmdldEdlbmVyYXRpb25TdGF0ZSgpO1xuICBjb25zdCBsYXlvdXRTdGVwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZXAtbGF5b3V0Jyk7XG5cbiAgaWYgKGxheW91dFN0ZXApIHtcbiAgICBsYXlvdXRTdGVwLmNsYXNzTGlzdC5yZW1vdmUoJ3N0YWxlJywgJ3N0YWxlLWNyaXRpY2FsJyk7XG4gICAgY29uc3QgcmVydW4gPSBsYXlvdXRTdGVwLnF1ZXJ5U2VsZWN0b3IoJy5zdGVwLXJlcnVuJyk/Lm91dGVySFRNTCB8fCAnJztcbiAgICBjb25zdCByZWZpbmVCYWRnZSA9IGxheW91dFN0ZXAucXVlcnlTZWxlY3RvcignLnN0ZXAtaW5saW5lLWJhZGdlJyk/Lm91dGVySFRNTCB8fCAnJztcbiAgICBjb25zdCBzdGFsZUJhZGdlID0gZnJlc2huZXNzLmlzU3RhbGVcbiAgICAgID8gJyA8c3BhbiBjbGFzcz1cInN0ZXAtaW5saW5lLWJhZGdlIHN0ZXAtc3RhbGUtYmFkZ2VcIj5PdXRkYXRlZDwvc3Bhbj4nXG4gICAgICA6ICcnO1xuICAgIGlmIChmcmVzaG5lc3MuaXNTdGFsZSkge1xuICAgICAgbGF5b3V0U3RlcC5jbGFzc0xpc3QuYWRkKCdzdGFsZScpO1xuICAgICAgaWYgKGZyZXNobmVzcy5pc0NyaXRpY2FsKSBsYXlvdXRTdGVwLmNsYXNzTGlzdC5hZGQoJ3N0YWxlLWNyaXRpY2FsJyk7XG4gICAgfVxuICAgIGxheW91dFN0ZXAuaW5uZXJIVE1MID0gYFx1RDgzQ1x1REZBOCBMYXlvdXQgUmV2aWV3JHtzdGFsZUJhZGdlfSR7cmVmaW5lQmFkZ2UgPyBgICR7cmVmaW5lQmFkZ2V9YCA6ICcnfSR7cmVydW4gPyBgICR7cmVydW59YCA6ICcnfWA7XG4gIH1cblxuICBjb25zdCBzaG93RG93bnN0cmVhbUJhZGdlID0gZnJlc2huZXNzLmlzU3RhbGUgJiYgQm9vbGVhbihcbiAgICBnZW5lcmF0aW9uU3RhdGUuZmluYWxHZW5lcmF0ZWRBdCB8fCBnZW5lcmF0aW9uU3RhdGUucGhhc2UgPT09ICdmaW5hbF9jb21wbGV0ZSdcbiAgKTtcbiAgT2JqZWN0LmVudHJpZXMoX05BVl9UQUJfTEFCRUxTKS5mb3JFYWNoKChbdGFiLCBsYWJlbF0pID0+IHtcbiAgICBjb25zdCB0YWJFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGB0YWItJHt0YWJ9YCk7XG4gICAgaWYgKCF0YWJFbCkgcmV0dXJuO1xuICAgIHRhYkVsLmNsYXNzTGlzdC5yZW1vdmUoJ3RhYi1zdGFsZScsICd0YWItc3RhbGUtY3JpdGljYWwnKTtcbiAgICBpZiAoc2hvd0Rvd25zdHJlYW1CYWRnZSkge1xuICAgICAgdGFiRWwuY2xhc3NMaXN0LmFkZCgndGFiLXN0YWxlJyk7XG4gICAgICBpZiAoZnJlc2huZXNzLmlzQ3JpdGljYWwpIHRhYkVsLmNsYXNzTGlzdC5hZGQoJ3RhYi1zdGFsZS1jcml0aWNhbCcpO1xuICAgICAgdGFiRWwuaW5uZXJIVE1MID0gYCR7bGFiZWx9IDxzcGFuIGNsYXNzPVwidGFiLXN0YWxlLWJhZGdlXCI+T3V0ZGF0ZWQ8L3NwYW4+YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFiRWwudGV4dENvbnRlbnQgPSBsYWJlbDtcbiAgICB9XG4gIH0pO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgQmFjayB0byBwaGFzZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gYmFja1RvUGhhc2Uoc3RlcCwgZmVlZGJhY2spIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBib2R5ID0gZmVlZGJhY2sgPyB7cGhhc2U6IHN0ZXAsIGZlZWRiYWNrfSA6IHtwaGFzZTogc3RlcH07XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL2JhY2stdG8tcGhhc2UnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmICghcmVzLm9rIHx8ICFkYXRhLm9rKSB7XG4gICAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoJ1x1MjZBMCBDb3VsZCBub3QgbmF2aWdhdGUgYmFjazogJyArIChkYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJyksICgpID0+IGJhY2tUb1BoYXNlKHN0ZXAsIGZlZWRiYWNrKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIGBcdTIxQkIgTmF2aWdhdGluZyBiYWNrIHRvICR7c3RlcH0uIFByaW9yIGRlY2lzaW9ucyBhbmQgYXBwcm92YWxzIGFyZSBwcmVzZXJ2ZWQuYCk7XG4gICAgaWYgKGZlZWRiYWNrKSBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgUmVmaW5lbWVudCBmZWVkYmFjayBxdWV1ZWQ6IFwiJHtmZWVkYmFja31cImApO1xuICAgIGF3YWl0IGZldGNoU3RhdHVzKCk7XG5cbiAgICAvLyBTd2l0Y2ggdG8gdGhlIGFwcHJvcHJpYXRlIHZpZXdlciB0YWJcbiAgICBjb25zdCB0YWJNYXAgPSB7XG4gICAgICBqb2I6ICAgICAgICAgICAgbnVsbCxcbiAgICAgIGFuYWx5c2lzOiAgICAgICAnYW5hbHlzaXMnLFxuICAgICAgY3VzdG9taXphdGlvbnM6ICdnb2FscycsXG4gICAgICByZXdyaXRlOiAgICAgICAgJ3Jld3JpdGUnLFxuICAgICAgc3BlbGw6ICAgICAgICAgICdzcGVsbCcsXG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlZFRhYiA9IHRhYk1hcFtzdGVwXSB8fCB0YWJNYXBbZGF0YS5waGFzZV0gfHwgbnVsbDtcbiAgICBpZiAocmVzb2x2ZWRUYWIpIHN3aXRjaFRhYihyZXNvbHZlZFRhYik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGFwcGVuZFJldHJ5TWVzc2FnZSgnXHUyNkEwIE5ldHdvcmsgZXJyb3IgaW4gYmFja1RvUGhhc2U6ICcgKyBlcnIubWVzc2FnZSwgKCkgPT4gYmFja1RvUGhhc2Uoc3RlcCkpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZS1ydW4gY29uZmlybSBtb2RhbCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBTaG93IGEgZG93bnN0cmVhbS1hd2FyZSBjb25maXJtYXRpb24gbW9kYWwgYmVmb3JlIHJlLXJ1bm5pbmcgb3IgYmFjay1uYXZpZ2F0aW5nLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgc3RlcCAgICAgIC0gVGhlIHRhcmdldCBzdGVwIGtleVxuICogQHBhcmFtIHsncmVydW4nfCdiYWNrLW5hdid9IG1vZGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uQ29uZmlybSAtIENhbGxlZCBpZiB0aGUgdXNlciBjbGlja3MgUHJvY2VlZFxuICovXG5mdW5jdGlvbiBfc2hvd1JlUnVuQ29uZmlybU1vZGFsKHN0ZXAsIG1vZGUsIG9uQ29uZmlybSkge1xuICBjb25zdCBzdGVwSWR4ICAgID0gX1NURVBfT1JERVIuaW5kZXhPZihzdGVwKTtcbiAgLy8gT25seSBzaG93IGRvd25zdHJlYW0gc3RhZ2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGNvbXBsZXRlZFxuICBjb25zdCBkb3duc3RyZWFtID0gX1NURVBfT1JERVIuc2xpY2Uoc3RlcElkeCArIDEpLmZpbHRlcihzID0+IHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzdGVwLSR7c31gKTtcbiAgICByZXR1cm4gZWwgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdjb21wbGV0ZWQnKTtcbiAgfSk7XG4gIGNvbnN0IHN0ZXBMYWJlbCAgPSBfU1RFUF9ESVNQTEFZW3N0ZXBdIHx8IHN0ZXA7XG5cbiAgY29uc3QgdGl0bGUgPSBtb2RlID09PSAncmVydW4nXG4gICAgPyBgXHUyMUJCIFJlLXJ1biAke3N0ZXBMYWJlbH0/YFxuICAgIDogYFx1MjE5MCBOYXZpZ2F0ZSBiYWNrIHRvICR7c3RlcExhYmVsfT9gO1xuICBjb25zdCBib2R5VGV4dCA9IG1vZGUgPT09ICdyZXJ1bidcbiAgICA/ICdUaGUgZm9sbG93aW5nIHN0YWdlcyB3aWxsIHNlZSB1cGRhdGVkIGlucHV0cyBhbmQgbWF5IHNob3cgY2hhbmdlZCByZWNvbW1lbmRhdGlvbnM6J1xuICAgIDogJ1lvdSBhcmUgbmF2aWdhdGluZyBiYWNrIHBhc3QgdGhlIGZvbGxvd2luZyBjb21wbGV0ZWQgc3RhZ2VzOic7XG4gIGNvbnN0IG5vdGUgPSAnQWxsIGV4aXN0aW5nIGFwcHJvdmFscyBhbmQgcmV3cml0ZXMgYXJlIHByZXNlcnZlZCBhcyBjb250ZXh0Lic7XG5cbiAgY29uc3QgbGlzdEh0bWwgPSBkb3duc3RyZWFtXG4gICAgLm1hcChzID0+IGA8bGkgc3R5bGU9XCJwYWRkaW5nOjJweCAwO1wiPiR7X1NURVBfRElTUExBWVtzXSB8fCBzfTwvbGk+YClcbiAgICAuam9pbignJyk7XG5cbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBvdmVybGF5LmlkID0gJ3JlcnVuLWNvbmZpcm0tb3ZlcmxheSc7XG4gIG92ZXJsYXkuc3R5bGUuY3NzVGV4dCA9IGBwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO1xuICAgIHotaW5kZXg6MTAwMDA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2A7XG4gIG92ZXJsYXkuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCIgYXJpYS1sYWJlbGxlZGJ5PVwicmVydW4tY29uZmlybS10aXRsZVwiXG4gICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoyNHB4IDI4cHg7bWF4LXdpZHRoOjQ0MHB4O1xuICAgICAgICAgICAgICAgIHdpZHRoOjkyJTtib3gtc2hhZG93OjAgMjBweCA2MHB4IHJnYmEoMCwwLDAsMC4zKTtcIj5cbiAgICAgIDxoMyBpZD1cInJlcnVuLWNvbmZpcm0tdGl0bGVcIiBzdHlsZT1cIm1hcmdpbjowIDAgMTBweDtmb250LXNpemU6MS4xZW07Y29sb3I6IzFlMjkzYjtcIj5cbiAgICAgICAgJHtlc2NhcGVIdG1sKHRpdGxlKX08L2gzPlxuICAgICAgPHAgc3R5bGU9XCJtYXJnaW46MCAwIDhweDtmb250LXNpemU6MC45ZW07Y29sb3I6IzQ3NTU2OTtcIj4ke2VzY2FwZUh0bWwoYm9keVRleHQpfTwvcD5cbiAgICAgIDx1bCBzdHlsZT1cIm1hcmdpbjowIDAgMTJweDtwYWRkaW5nLWxlZnQ6MjBweDtmb250LXNpemU6MC45ZW07Y29sb3I6IzM3NDE1MTtcIj4ke2xpc3RIdG1sfTwvdWw+XG4gICAgICA8cCBzdHlsZT1cIm1hcmdpbjowIDAgMThweDtmb250LXNpemU6MC44NWVtO2NvbG9yOiM2YjcyODA7XCI+JHtlc2NhcGVIdG1sKG5vdGUpfTwvcD5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO1wiPlxuICAgICAgICA8YnV0dG9uIGlkPVwicmVydW4tY2FuY2VsLWJ0blwiIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGlkPVwicmVydW4tcHJvY2VlZC1idG5cIiBjbGFzcz1cImJ0bi1wcmltYXJ5XCI+UHJvY2VlZDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIGlmICh0eXBlb2YgdHJhcEZvY3VzID09PSAnZnVuY3Rpb24nKSB0cmFwRm9jdXMoJ3JlcnVuLWNvbmZpcm0tb3ZlcmxheScpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVydW4tcHJvY2VlZC1idG4nKS5mb2N1cygpO1xuXG4gIGNvbnN0IGNsb3NlID0gKCkgPT4geyBvdmVybGF5LnJlbW92ZSgpOyByZXN0b3JlRm9jdXMoKTsgfTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcnVuLWNhbmNlbC1idG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcnVuLXByb2NlZWQtYnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7IGNsb3NlKCk7IG9uQ29uZmlybSgpOyB9KTtcbiAgb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4geyBpZiAoZS50YXJnZXQgPT09IG92ZXJsYXkpIGNsb3NlKCk7IH0pO1xuICBvdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBlID0+IHsgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgY2xvc2UoKTsgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbmZpcm1SZVJ1blBoYXNlKHN0ZXApIHtcbiAgX3Nob3dSZVJ1bkNvbmZpcm1Nb2RhbChzdGVwLCAncmVydW4nLCAoKSA9PiBiYWNrVG9QaGFzZShzdGVwKSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBWaWV3LWN1cnNvciBpbmRpY2F0b3IgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKlxuICogUmV0dXJuIGEgdG9vbHRpcCBzdHJpbmcgZm9yIGEgc3RlcCBwaWxsIGJhc2VkIG9uIGl0cyBjb21iaW5lZCBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gX2dldFN0ZXBUb29sdGlwKHN0ZXAsIGlzQWN0aXZlLCBpc1ZpZXdpbmcsIGlzQnJvd3NpbmdBd2F5LCBpc0NvbXBsZXRlZCwgaXNTdGFsZSwgaXNTdGFsZUNyaXRpY2FsKSB7XG4gIGlmIChpc1N0YWxlQ3JpdGljYWwpIHJldHVybiBpc1ZpZXdpbmcgPyAnQ3JpdGljYWwgY2hhbmdlcyBcdTIwMTQgcmV2aWV3IHJlcXVpcmVkLiBDbGljayBcdTIxQkIgdG8gcmVydW4uJyA6ICdDcml0aWNhbCBjaGFuZ2VzIFx1MjAxNCByZXZpZXcgcmVxdWlyZWQuJztcbiAgaWYgKGlzU3RhbGUpICAgICAgICAgcmV0dXJuIGlzVmlld2luZyA/ICdSZXN1bHRzIG1heSBiZSBvdXRkYXRlZC4gQ2xpY2sgXHUyMUJCIHRvIHJlcnVuLicgICAgICAgICAgIDogJ1Jlc3VsdHMgbWF5IGJlIG91dGRhdGVkLic7XG4gIGlmIChpc0Jyb3dzaW5nQXdheSkgIHJldHVybiAnQWN0aXZlIHN0ZXAgXHUyMDE0IGNsaWNrIHRvIHJldHVybic7XG4gIGlmIChpc0FjdGl2ZSAmJiBpc1ZpZXdpbmcpICAgIHJldHVybiAnQ3VycmVudCBzdGVwJztcbiAgaWYgKGlzQ29tcGxldGVkICYmIGlzVmlld2luZykgcmV0dXJuICdDbGljayBcdTIxQkIgdG8gcmVydW4gZnJvbSBoZXJlJztcbiAgaWYgKGlzQ29tcGxldGVkKSAgICAgICAgICAgICAgcmV0dXJuICdDbGljayB0byB2aWV3JztcbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIFN5bmMgdGhlIGJsdWUgcmluZyAodmlldyBjdXJzb3IpIGFuZCBhbWJlciBwdWxzaW5nIHJpbmcgKGJyb3dzaW5nLWF3YXkpXG4gKiB0byB0aGUgY3VycmVudGx5IHZpc2libGUgdGFiLiBDYWxsZWQgYWZ0ZXIgZXZlcnkgdGFiIHN3aXRjaCBhbmQgc3RhdHVzIHVwZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWJOYW1lIC0gVGhlIGN1cnJlbnRseSB2aXNpYmxlIHRhYiBpZCAoZS5nLiAnYW5hbHlzaXMnLCAnZXhwLXJldmlldycpXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVWaWV3aW5nSW5kaWNhdG9yKHRhYk5hbWUpIHtcbiAgY29uc3QgdGFiVG9TdGVwID0ge1xuICAgICdqb2InOiAgICAgICAgICAgJ2pvYicsXG4gICAgJ2FuYWx5c2lzJzogICAgICAnYW5hbHlzaXMnLFxuICAgICdxdWVzdGlvbnMnOiAgICAgJ2FuYWx5c2lzJyxcbiAgICAnZXhwLXJldmlldyc6ICAgICdjdXN0b21pemF0aW9ucycsXG4gICAgJ3Jld3JpdGUnOiAgICAgICAncmV3cml0ZScsXG4gICAgJ3NwZWxsJzogICAgICAgICAnc3BlbGwnLFxuICAgICdsYXlvdXQnOiAgICAgICAgJ2xheW91dCcsXG4gICAgJ2ZpbmFsX2dlbmVyYXRlJzonZG93bmxvYWQnLFxuICAgICdkb3dubG9hZCc6ICAgICAgJ2Rvd25sb2FkJyxcbiAgICAnY292ZXItbGV0dGVyJzogICdjb3Zlcl9sZXR0ZXInLFxuICAgICdzY3JlZW5pbmcnOiAgICAgJ3NjcmVlbmluZycsXG4gICAgJ2ludGVydmlldy1wcmVwJzonaW50ZXJ2aWV3X3ByZXAnLFxuICAgICd0aGFuay15b3UnOiAgICAgJ3RoYW5rX3lvdScsXG4gICAgJ2hhcnZlc3QnOiAgICAgICAnaGFydmVzdCcsXG4gIH07XG4gIGNvbnN0IHZpZXdlZFN0ZXAgPSB0YWJUb1N0ZXBbdGFiTmFtZV0gfHwgbnVsbDtcblxuICBsZXQgYWN0aXZlU3RlcCA9IG51bGw7XG4gIF9TVEVQX09SREVSLmZvckVhY2goc3RlcCA9PiB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc3RlcC0ke3N0ZXB9YCk7XG4gICAgaWYgKGVsICYmIGVsLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIGFjdGl2ZVN0ZXAgPSBzdGVwO1xuICB9KTtcblxuICBfU1RFUF9PUkRFUi5mb3JFYWNoKHN0ZXAgPT4ge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHN0ZXAtJHtzdGVwfWApO1xuICAgIGlmICghZWwpIHJldHVybjtcblxuICAgIGNvbnN0IGlzVmlld2luZyAgICAgID0gc3RlcCA9PT0gdmlld2VkU3RlcDtcbiAgICBjb25zdCBpc0FjdGl2ZSAgICAgICA9IHN0ZXAgPT09IGFjdGl2ZVN0ZXA7XG4gICAgY29uc3QgaXNCcm93c2luZ0F3YXkgPSBpc0FjdGl2ZSAmJiAhIXZpZXdlZFN0ZXAgJiYgdmlld2VkU3RlcCAhPT0gYWN0aXZlU3RlcDtcbiAgICBjb25zdCBpc0NvbXBsZXRlZCAgICA9IGVsLmNsYXNzTGlzdC5jb250YWlucygnY29tcGxldGVkJyk7XG4gICAgY29uc3QgaXNTdGFsZSAgICAgICAgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoJ3N0YWxlJyk7XG4gICAgY29uc3QgaXNTdGFsZUNyaXRpY2FsID0gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdzdGFsZS1jcml0aWNhbCcpO1xuXG4gICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgndmlld2luZycsICAgICAgIGlzVmlld2luZyk7XG4gICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnYnJvd3NpbmctYXdheScsIGlzQnJvd3NpbmdBd2F5KTtcblxuICAgIGNvbnN0IHRvb2x0aXBUZXh0ID0gX2dldFN0ZXBUb29sdGlwKHN0ZXAsIGlzQWN0aXZlLCBpc1ZpZXdpbmcsIGlzQnJvd3NpbmdBd2F5LCBpc0NvbXBsZXRlZCwgaXNTdGFsZSwgaXNTdGFsZUNyaXRpY2FsKTtcbiAgICBpZiAodG9vbHRpcFRleHQpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS1icy10b2dnbGUnLCAgICAndG9vbHRpcCcpO1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXBsYWNlbWVudCcsICdib3R0b20nKTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS1icy10aXRsZScsICAgICB0b29sdGlwVGV4dCk7XG4gICAgICBpZiAodHlwZW9mIGJvb3RzdHJhcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc3QgdGlwID0gYm9vdHN0cmFwLlRvb2x0aXAuZ2V0SW5zdGFuY2UoZWwpO1xuICAgICAgICBpZiAodGlwKSB0aXAuc2V0Q29udGVudCh7ICcudG9vbHRpcC1pbm5lcic6IHRvb2x0aXBUZXh0IH0pO1xuICAgICAgICBlbHNlICAgICBuZXcgYm9vdHN0cmFwLlRvb2x0aXAoZWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtYnMtdG9nZ2xlJyk7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtYnMtdGl0bGUnKTtcbiAgICAgIGlmICh0eXBlb2YgYm9vdHN0cmFwICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zdCB0aXAgPSBib290c3RyYXAuVG9vbHRpcC5nZXRJbnN0YW5jZShlbCk7XG4gICAgICAgIGlmICh0aXApIHRpcC5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFJlLXJ1biBwaGFzZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBTaG93IGFuIGFtZW5kLWNsYXJpZmljYXRpb25zIG1vZGFsIGJlZm9yZSByZS1ydW5uaW5nIHRoZSBhbmFseXNpcyBwaGFzZS5cbiAqIENhbGxzIG9uUHJvY2VlZCgpIGlmIHRoZSB1c2VyIGNvbmZpcm1zICh3aXRoIG9yIHdpdGhvdXQgdXBkYXRpbmcgYW5zd2VycykuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIF9zaG93QW5hbHlzaXNDbGFyaWZpY2F0aW9uQW1lbmRNb2RhbChvblByb2NlZWQpIHtcbiAgY29uc3QgcXVlc3Rpb25zID0gd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyB8fCBbXTtcbiAgY29uc3QgYW5zd2VycyAgID0gd2luZG93LnF1ZXN0aW9uQW5zd2VycyB8fCB7fTtcblxuICAvLyBObyBwcmlvciBxdWVzdGlvbnMgXHUyMDE0IHNraXAgdGhlIG1vZGFsIGFuZCBwcm9jZWVkIGRpcmVjdGx5LlxuICBpZiAoIXF1ZXN0aW9ucy5sZW5ndGgpIHsgYXdhaXQgb25Qcm9jZWVkKCk7IHJldHVybjsgfVxuXG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgb3ZlcmxheS5pZCA9ICdjbGFyLWFtZW5kLW92ZXJsYXknO1xuICBvdmVybGF5LnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC41KTt6LWluZGV4OjEwMDAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtvdmVyZmxvdy15OmF1dG87JztcblxuICBjb25zdCBmb3JtUm93cyA9IHF1ZXN0aW9ucy5tYXAoKHEsIGkpID0+IHtcbiAgICBjb25zdCBxdHlwZSAgPSBxLnR5cGUgfHwgYGNsYXJpZmljYXRpb25fJHtpICsgMX1gO1xuICAgIGNvbnN0IHF0ZXh0ICA9IGVzY2FwZUh0bWwocS5xdWVzdGlvbiB8fCAnJyk7XG4gICAgY29uc3QgY3VyQW5zID0gZXNjYXBlSHRtbChhbnN3ZXJzW3F0eXBlXSB8fCAnJyk7XG4gICAgY29uc3QgY2hvaWNlcyA9IEFycmF5LmlzQXJyYXkocS5jaG9pY2VzKSA/IHEuY2hvaWNlcyA6IFtdO1xuXG4gICAgaWYgKGNob2ljZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCByYWRpb3MgPSBjaG9pY2VzLm1hcChjID0+IGBcbiAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O21hcmdpbi1ib3R0b206NHB4O2N1cnNvcjpwb2ludGVyO1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiY2xhci0ke2VzY2FwZUh0bWwocXR5cGUpfVwiIHZhbHVlPVwiJHtlc2NhcGVIdG1sKGMpfVwiXG4gICAgICAgICAgICAke2Fuc3dlcnNbcXR5cGVdID09PSBjID8gJ2NoZWNrZWQnIDogJyd9IHN0eWxlPVwiZmxleC1zaHJpbms6MDtcIj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjllbTtcIj4ke2VzY2FwZUh0bWwoYyl9PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPmApLmpvaW4oJycpO1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjAuOWVtO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo2cHg7XCI+JHtxdGV4dH08L2xhYmVsPlxuICAgICAgICAgICR7cmFkaW9zfVxuICAgICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gYFxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImNsYXItYW5zLSR7ZXNjYXBlSHRtbChxdHlwZSl9XCIgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjAuOWVtO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7XCI+JHtxdGV4dH08L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgaWQ9XCJjbGFyLWFucy0ke2VzY2FwZUh0bWwocXR5cGUpfVwiIG5hbWU9XCJjbGFyLSR7ZXNjYXBlSHRtbChxdHlwZSl9XCIgcm93cz1cIjJcIlxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MC45ZW07cmVzaXplOnZlcnRpY2FsO1wiXG4gICAgICAgID4ke2N1ckFuc308L3RleHRhcmVhPlxuICAgICAgPC9kaXY+YDtcbiAgfSkuam9pbignJyk7XG5cbiAgb3ZlcmxheS5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBhcmlhLWxhYmVsbGVkYnk9XCJjbGFyLWFtZW5kLXRpdGxlXCJcbiAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjI0cHggMjhweDttYXgtd2lkdGg6NTAwcHg7d2lkdGg6OTQlO1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6MCAyMHB4IDYwcHggcmdiYSgwLDAsMCwwLjMpO21hcmdpbjoyMHB4IGF1dG87XCI+XG4gICAgICA8aDMgaWQ9XCJjbGFyLWFtZW5kLXRpdGxlXCIgc3R5bGU9XCJtYXJnaW46MCAwIDZweDtmb250LXNpemU6MS4xZW07Y29sb3I6IzFlMjkzYjtcIj5cdTIxQkIgQW1lbmQgQ2xhcmlmaWNhdGlvbiBBbnN3ZXJzPC9oMz5cbiAgICAgIDxwIHN0eWxlPVwibWFyZ2luOjAgMCAxNnB4O2ZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzZiNzI4MDtcIj5cbiAgICAgICAgVXBkYXRlIHlvdXIgYW5zd2VycyBiZWZvcmUgcmVydW5uaW5nIGFuYWx5c2lzLCBvciBrZWVwIHRoZW0gYXMtaXMuXG4gICAgICA8L3A+XG4gICAgICA8Zm9ybSBpZD1cImNsYXItYW1lbmQtZm9ybVwiIG9uc3VibWl0PVwicmV0dXJuIGZhbHNlO1wiPlxuICAgICAgICAke2Zvcm1Sb3dzfVxuICAgICAgPC9mb3JtPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6MTBweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luLXRvcDo4cHg7ZmxleC13cmFwOndyYXA7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJjbGFyLWFtZW5kLWNhbmNlbFwiIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGlkPVwiY2xhci1hbWVuZC1rZWVwXCIgICBjbGFzcz1cImJ0bi1zZWNvbmRhcnlcIj5LZWVwIEV4aXN0aW5nIEFuc3dlcnM8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImNsYXItYW1lbmQtc2F2ZVwiICAgY2xhc3M9XCJidG4tcHJpbWFyeVwiPlVwZGF0ZSAmYW1wOyBSZXJ1bjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICBpZiAodHlwZW9mIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsICE9PSAndW5kZWZpbmVkJykgd2luZG93Ll9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgaWYgKHR5cGVvZiB0cmFwRm9jdXMgPT09ICdmdW5jdGlvbicpIHRyYXBGb2N1cygnY2xhci1hbWVuZC1vdmVybGF5Jyk7XG4gIG92ZXJsYXkucXVlcnlTZWxlY3RvcignI2NsYXItYW1lbmQtc2F2ZScpLmZvY3VzKCk7XG5cbiAgZnVuY3Rpb24gY2xvc2VNb2RhbCgpIHtcbiAgICBvdmVybGF5LnJlbW92ZSgpO1xuICAgIGlmICh0eXBlb2YgcmVzdG9yZUZvY3VzID09PSAnZnVuY3Rpb24nKSByZXN0b3JlRm9jdXMoKTtcbiAgfVxuXG4gIG92ZXJsYXkucXVlcnlTZWxlY3RvcignI2NsYXItYW1lbmQtY2FuY2VsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZU1vZGFsKTtcbiAgb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4geyBpZiAoZS50YXJnZXQgPT09IG92ZXJsYXkpIGNsb3NlTW9kYWwoKTsgfSk7XG4gIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGUgPT4geyBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBjbG9zZU1vZGFsKCk7IH0pO1xuXG4gIG92ZXJsYXkucXVlcnlTZWxlY3RvcignI2NsYXItYW1lbmQta2VlcCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGNsb3NlTW9kYWwoKTtcbiAgICBvblByb2NlZWQoKTtcbiAgfSk7XG5cbiAgb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcjY2xhci1hbWVuZC1zYXZlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZm9ybSAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGFyLWFtZW5kLWZvcm0nKTtcbiAgICBjb25zdCB1cGRhdGVkID0ge307XG4gICAgcXVlc3Rpb25zLmZvckVhY2goKHEsIGkpID0+IHtcbiAgICAgIGNvbnN0IHF0eXBlID0gcS50eXBlIHx8IGBjbGFyaWZpY2F0aW9uXyR7aSArIDF9YDtcbiAgICAgIGNvbnN0IGVsICAgID0gZm9ybS5xdWVyeVNlbGVjdG9yKGBbbmFtZT1cImNsYXItJHtxdHlwZX1cIl1gKTtcbiAgICAgIGlmICghZWwpIHJldHVybjtcbiAgICAgIGlmIChlbC50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoYFtuYW1lPVwiY2xhci0ke3F0eXBlfVwiXTpjaGVja2VkYCk7XG4gICAgICAgIGlmIChjaGVja2VkKSB1cGRhdGVkW3F0eXBlXSA9IGNoZWNrZWQudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWwgPSBlbC52YWx1ZS50cmltKCk7XG4gICAgICAgIGlmICh2YWwpIHVwZGF0ZWRbcXR5cGVdID0gdmFsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY2xvc2VNb2RhbCgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmZXRjaCgnL2FwaS9wb3N0LWFuYWx5c2lzLXJlc3BvbnNlcycsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHF1ZXN0aW9ucywgYW5zd2VyczogdXBkYXRlZCB9KSxcbiAgICAgIH0pO1xuICAgICAgd2luZG93LnF1ZXN0aW9uQW5zd2VycyA9IHVwZGF0ZWQ7XG4gICAgfSBjYXRjaCAoX2UpIHsgLyogc2lsZW50IFx1MjAxNCBwcm9jZWVkIHdpdGggd2hhdGV2ZXIgdGhlIGJhY2tlbmQgYWxyZWFkeSBoYXMgKi8gfVxuICAgIGF3YWl0IG9uUHJvY2VlZCgpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVSdW5QaGFzZShzdGVwKSB7XG4gIC8vIEludGVyY2VwdCBhbmFseXNpcyByZXJ1bnMgdG8gbGV0IHRoZSB1c2VyIGFtZW5kIHByaW9yIGNsYXJpZmljYXRpb24gYW5zd2Vycy5cbiAgaWYgKHN0ZXAgPT09ICdhbmFseXNpcycpIHtcbiAgICBhd2FpdCBfc2hvd0FuYWx5c2lzQ2xhcmlmaWNhdGlvbkFtZW5kTW9kYWwoKCkgPT4gX2V4ZWN1dGVSZVJ1blBoYXNlKCdhbmFseXNpcycpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgX2V4ZWN1dGVSZVJ1blBoYXNlKHN0ZXApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfZXhlY3V0ZVJlUnVuUGhhc2Uoc3RlcCkge1xuICBjb25zdCBsb2FkaW5nTXNnID0gYXBwZW5kTG9hZGluZ01lc3NhZ2UoYFx1MjFCQiBSZS1ydW5uaW5nICR7c3RlcH1cdTIwMjZgKTtcbiAgc2V0TG9hZGluZyh0cnVlLCBgUmUtcnVubmluZyAke3N0ZXB9XHUyMDI2YCk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3JlLXJ1bi1waGFzZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe3BoYXNlOiBzdGVwfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgcmVtb3ZlTG9hZGluZ01lc3NhZ2UobG9hZGluZ01zZyk7XG4gICAgc2V0TG9hZGluZyhmYWxzZSk7XG5cbiAgICBpZiAoIXJlcy5vayB8fCAhZGF0YS5vaykge1xuICAgICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI2QTAgUmUtcnVuIGZhaWxlZDogJyArIChkYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJyksICgpID0+IHJlUnVuUGhhc2Uoc3RlcCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIGBcdTI3MDUgJHtzdGVwfSByZS1ydW4gY29tcGxldGUuIFJldmlldyB0aGUgdXBkYXRlZCByZXN1bHRzIFx1MjAxNCBjaGFuZ2VkIGl0ZW1zIGFyZSBoaWdobGlnaHRlZC5gKTtcbiAgICBhd2FpdCBmZXRjaFN0YXR1cygpO1xuXG4gICAgLy8gQ2xlYXIgcGVyLXBoYXNlIGNhY2hlcyBzbyBiYWNrLW5hdmlnYXRpb24gZmV0Y2hlcyBmcmVzaCByZXN1bHRzXG4gICAgaWYgKHN0ZXAgPT09ICdzcGVsbCcpICAgd2luZG93Ll9zcGVsbENoZWNrQ2FjaGUgID0gbnVsbDtcbiAgICBpZiAoc3RlcCA9PT0gJ3Jld3JpdGUnKSB3aW5kb3cuX3Jld3JpdGVQYW5lbENhY2hlID0gbnVsbDtcblxuICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBzdGVwJ3Mgdmlld2VyIHRhYlxuICAgIGNvbnN0IHRhYk1hcCA9IHtcbiAgICAgIGFuYWx5c2lzOiAgICAgICAnYW5hbHlzaXMnLFxuICAgICAgY3VzdG9taXphdGlvbnM6ICdnb2FscycsXG4gICAgICByZXdyaXRlOiAgICAgICAgJ3Jld3JpdGUnLFxuICAgICAgc3BlbGw6ICAgICAgICAgICdzcGVsbCcsXG4gICAgfTtcbiAgICBpZiAodGFiTWFwW3N0ZXBdKSBzd2l0Y2hUYWIodGFiTWFwW3N0ZXBdKTtcblxuICAgIC8vIENvbXB1dGUgY2hhbmdlZC1pdGVtIElEcyBmcm9tIHByaW9yIHZzIG5ldyBvdXRwdXQgYW5kIGhpZ2hsaWdodCB0aGVtLlxuICAgIGlmIChkYXRhLnByaW9yX291dHB1dCAmJiBkYXRhLm5ld19vdXRwdXQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gX2hpZ2hsaWdodENoYW5nZWRJdGVtcyhzdGVwLCBkYXRhLnByaW9yX291dHB1dCwgZGF0YS5uZXdfb3V0cHV0KSwgMzAwKTtcbiAgICB9XG5cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmVtb3ZlTG9hZGluZ01lc3NhZ2UobG9hZGluZ01zZyk7XG4gICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI2QTAgTmV0d29yayBlcnJvciBpbiByZVJ1blBoYXNlOiAnICsgZXJyLm1lc3NhZ2UsICgpID0+IHJlUnVuUGhhc2Uoc3RlcCkpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBIaWdobGlnaHQgY2hhbmdlZCBpdGVtcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBDb21wYXJlIHByaW9yIGFuZCBuZXcgcmUtcnVuIG91dHB1dHM7IG1hcmsgRE9NIGVsZW1lbnRzIGZvciBjaGFuZ2VkIGVudGl0aWVzLlxuICpcbiAqIFN0cmF0ZWdpZXMgYnkgc3RlcDpcbiAqICAgcmV3cml0ZSAgICAgICAgXHUyMDE0IGNvbXBhcmUgcmV3cml0ZSBJRHM7IG1hcmsgcnctY2FyZC08aWQ+XG4gKiAgIGN1c3RvbWl6YXRpb25zIFx1MjAxNCBjb21wYXJlIGV4cGVyaWVuY2UgSURzOyBtYXJrIHRyW2RhdGEtZXhwLWlkXSBhbmQgdHJbZGF0YS1za2lsbF1cbiAqICAgYW5hbHlzaXMgICAgICAgXHUyMDE0IG5vIHBlci1lbnRpdHkgRE9NIHRhcmdldGluZzsgc2tpcFxuICovXG5mdW5jdGlvbiBfaGlnaGxpZ2h0Q2hhbmdlZEl0ZW1zKHN0ZXAsIHByaW9yT3V0cHV0LCBuZXdPdXRwdXQpIHtcbiAgaWYgKHN0ZXAgPT09ICdyZXdyaXRlJykge1xuICAgIGNvbnN0IHByaW9ySWRzID0gbmV3IFNldCgocHJpb3JPdXRwdXQucGVuZGluZ19yZXdyaXRlcyB8fCBbXSkubWFwKHIgPT4gU3RyaW5nKHIuaWQpKSk7XG4gICAgY29uc3QgbmV3SXRlbXMgID0gbmV3T3V0cHV0LnBlbmRpbmdfcmV3cml0ZXMgIHx8IFtdO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBuZXdJdGVtcykge1xuICAgICAgY29uc3QgaWQgICAgICA9IFN0cmluZyhpdGVtLmlkIHx8ICcnKTtcbiAgICAgIGNvbnN0IGNhcmRJZCAgPSBpZC5yZXBsYWNlKC9bXmEtekEtWjAtOV8tXS9nLCAnXycpO1xuICAgICAgY29uc3QgZWwgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBydy1jYXJkLSR7Y2FyZElkfWApO1xuICAgICAgaWYgKCFlbCkgY29udGludWU7XG4gICAgICBjb25zdCBpc05ldyAgICAgPSAhcHJpb3JJZHMuaGFzKGlkKTtcbiAgICAgIGNvbnN0IHByaW9ySXRlbSA9IChwcmlvck91dHB1dC5wZW5kaW5nX3Jld3JpdGVzIHx8IFtdKS5maW5kKHIgPT4gU3RyaW5nKHIuaWQpID09PSBpZCk7XG4gICAgICBjb25zdCBjaGFuZ2VkICAgPSBpc05ldyB8fCAocHJpb3JJdGVtICYmIHByaW9ySXRlbS5wcm9wb3NlZCAhPT0gaXRlbS5wcm9wb3NlZCk7XG4gICAgICBpZiAoY2hhbmdlZCkgX21hcmtDaGFuZ2VkKGVsKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHN0ZXAgPT09ICdjdXN0b21pemF0aW9ucycpIHtcbiAgICBjb25zdCBwcmlvckV4cElkcyA9IG5ldyBTZXQoXG4gICAgICAocHJpb3JPdXRwdXQuY3VzdG9taXphdGlvbnM/LmV4cGVyaWVuY2VfcmVjb21tZW5kYXRpb25zIHx8IFtdKS5tYXAociA9PiBTdHJpbmcoci5pZCkpXG4gICAgKTtcbiAgICBjb25zdCBuZXdFeHBSZWNzICA9IG5ld091dHB1dC5jdXN0b21pemF0aW9ucz8uZXhwZXJpZW5jZV9yZWNvbW1lbmRhdGlvbnMgfHwgW107XG4gICAgZm9yIChjb25zdCByZWMgb2YgbmV3RXhwUmVjcykge1xuICAgICAgY29uc3QgaWQgICA9IFN0cmluZyhyZWMuaWQgfHwgJycpO1xuICAgICAgY29uc3QgZWwgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHRyW2RhdGEtZXhwLWlkPVwiJHtDU1MuZXNjYXBlKGlkKX1cIl1gKTtcbiAgICAgIGlmICghZWwpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgcHJpb3IgPSAocHJpb3JPdXRwdXQuY3VzdG9taXphdGlvbnM/LmV4cGVyaWVuY2VfcmVjb21tZW5kYXRpb25zIHx8IFtdKS5maW5kKHIgPT4gU3RyaW5nKHIuaWQpID09PSBpZCk7XG4gICAgICBpZiAoIXByaW9yRXhwSWRzLmhhcyhpZCkgfHwgKHByaW9yICYmIHByaW9yLnJlY29tbWVuZGF0aW9uICE9PSByZWMucmVjb21tZW5kYXRpb24pKSB7XG4gICAgICAgIF9tYXJrQ2hhbmdlZChlbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJpb3JTa2lsbHMgPSBuZXcgU2V0KFxuICAgICAgKHByaW9yT3V0cHV0LmN1c3RvbWl6YXRpb25zPy5za2lsbF9yZWNvbW1lbmRhdGlvbnMgfHwgW10pLm1hcChyID0+IChyLnNraWxsIHx8ICcnKS50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gICAgY29uc3QgbmV3U2tpbGxSZWNzID0gbmV3T3V0cHV0LmN1c3RvbWl6YXRpb25zPy5za2lsbF9yZWNvbW1lbmRhdGlvbnMgfHwgW107XG4gICAgZm9yIChjb25zdCByZWMgb2YgbmV3U2tpbGxSZWNzKSB7XG4gICAgICBjb25zdCBuYW1lID0gKHJlYy5za2lsbCB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGVsICAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGB0cltkYXRhLXNraWxsPVwiJHtDU1MuZXNjYXBlKG5hbWUpfVwiXWApO1xuICAgICAgaWYgKCFlbCkgY29udGludWU7XG4gICAgICBjb25zdCBwcmlvciA9IChwcmlvck91dHB1dC5jdXN0b21pemF0aW9ucz8uc2tpbGxfcmVjb21tZW5kYXRpb25zIHx8IFtdKS5maW5kKFxuICAgICAgICByID0+IChyLnNraWxsIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSBuYW1lXG4gICAgICApO1xuICAgICAgaWYgKCFwcmlvclNraWxscy5oYXMobmFtZSkgfHwgKHByaW9yICYmIHByaW9yLnJlY29tbWVuZGF0aW9uICE9PSByZWMucmVjb21tZW5kYXRpb24pKSB7XG4gICAgICAgIF9tYXJrQ2hhbmdlZChlbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxufVxuXG4vKiogQXBwbHkgZGF0YS1jaGFuZ2VkIGF0dHJpYnV0ZSBhbmQgdHJpZ2dlciBoaWdobGlnaHQgYW5pbWF0aW9uIG9uIGFuIGVsZW1lbnQuICovXG5mdW5jdGlvbiBfbWFya0NoYW5nZWQoZWwpIHtcbiAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLWNoYW5nZWQnLCAndHJ1ZScpO1xuICAvLyBSZW1vdmUgdGhlIGF0dHJpYnV0ZSBhZnRlciB0aGUgYW5pbWF0aW9uIGNvbXBsZXRlcyBzbyBpdCBjYW4gYmUgcmUtdHJpZ2dlcmVkIG9uIGEgc2Vjb25kIHJlcnVuLlxuICBzZXRUaW1lb3V0KCgpID0+IGVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1jaGFuZ2VkJyksIDI1MDApO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgQnVsbGV0IHJlb3JkZXIgbW9kYWwgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dCdWxsZXRSZW9yZGVyKGV4cElkLCBleHBUaXRsZSkge1xuICAvLyBGZXRjaCBhY2hpZXZlbWVudHMgKHJlcXVpcmVkKSBhbmQgc3VnZ2VzdGVkIG9yZGVyIChiZXN0LWVmZm9ydCkuXG4gIGxldCBhY2hpZXZlbWVudHMgPSBbXTtcbiAgbGV0IHByb3Bvc2VkT3JkZXIgPSBudWxsO1xuICBsZXQgaGFzSm9iQW5hbHlzaXMgPSBmYWxzZTtcbiAgbGV0IHByb3Bvc2VkUmVhc29uaW5nID0gJyc7XG4gIGxldCBwcm9wb3NlZEF0c0ltcGFjdCA9ICcnO1xuICBsZXQgcHJvcG9zZWRQYWdlSW1wYWN0ID0gJyc7XG4gIHRyeSB7XG4gICAgY29uc3QgZGV0YWlsc1JlcyA9IGF3YWl0IGZldGNoKCcvYXBpL2V4cGVyaWVuY2UtZGV0YWlscycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb24nfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtleHBlcmllbmNlX2lkOiBleHBJZH0pLFxuICAgIH0pO1xuICAgIGlmICghZGV0YWlsc1Jlcy5vaykge1xuICAgICAgbGV0IGRldGFpbHNFcnIgPSBgSFRUUCAke2RldGFpbHNSZXMuc3RhdHVzfWA7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgZGV0YWlsc1Jlcy5qc29uKCk7XG4gICAgICAgIGRldGFpbHNFcnIgPSBwYXlsb2FkLmVycm9yIHx8IHBheWxvYWQubWVzc2FnZSB8fCBkZXRhaWxzRXJyO1xuICAgICAgfSBjYXRjaCAoXykgeyAvKiBrZWVwIHN0YXR1cy1iYXNlZCBlcnJvciAqLyB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZGV0YWlsc0Vycik7XG4gICAgfVxuXG4gICAgY29uc3QgZGV0YWlsc0RhdGEgPSBhd2FpdCBkZXRhaWxzUmVzLmpzb24oKTtcbiAgICBhY2hpZXZlbWVudHMgID0gKGRldGFpbHNEYXRhLmV4cGVyaWVuY2UgJiYgZGV0YWlsc0RhdGEuZXhwZXJpZW5jZS5hY2hpZXZlbWVudHMpIHx8IFtdO1xuXG4gICAgY29uc3QgcmVjUmVjb3JkID0gX2ZpbmRFeHBlcmllbmNlUmVjb21tZW5kYXRpb25SZWNvcmQoZXhwSWQpO1xuICAgIGNvbnN0IGxsbUJ1bGxldE9yZGVyID0gcmVjUmVjb3JkICYmIHR5cGVvZiByZWNSZWNvcmQuYnVsbGV0X29yZGVyID09PSAnb2JqZWN0J1xuICAgICAgPyByZWNSZWNvcmQuYnVsbGV0X29yZGVyXG4gICAgICA6IG51bGw7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGxtQnVsbGV0T3JkZXI/Lm9yZGVyKSAmJiBsbG1CdWxsZXRPcmRlci5vcmRlci5sZW5ndGggPiAxKSB7XG4gICAgICBwcm9wb3NlZE9yZGVyID0gbGxtQnVsbGV0T3JkZXIub3JkZXI7XG4gICAgICBoYXNKb2JBbmFseXNpcyA9IHRydWU7XG4gICAgICBwcm9wb3NlZFJlYXNvbmluZyA9IFN0cmluZyhsbG1CdWxsZXRPcmRlci5yZWFzb25pbmcgfHwgJycpLnRyaW0oKTtcbiAgICAgIHByb3Bvc2VkQXRzSW1wYWN0ID0gU3RyaW5nKGxsbUJ1bGxldE9yZGVyLmF0c19pbXBhY3QgfHwgJycpLnRyaW0oKTtcbiAgICAgIHByb3Bvc2VkUGFnZUltcGFjdCA9IFN0cmluZyhsbG1CdWxsZXRPcmRlci5wYWdlX2xlbmd0aF9pbXBhY3QgfHwgJycpLnRyaW0oKTtcbiAgICB9XG5cbiAgICAvLyBTdWdnZXN0ZWQgb3JkZXIgaXMgb3B0aW9uYWw7IGZhaWx1cmVzIHNob3VsZCBub3QgYmxvY2sgb3BlbmluZyB0aGUgbW9kYWwuXG4gICAgaWYgKCFwcm9wb3NlZE9yZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9wb3NlZFJlcyA9IGF3YWl0IGZldGNoKGAvYXBpL3Byb3Bvc2VkLWJ1bGxldC1vcmRlcj9leHBlcmllbmNlX2lkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGV4cElkKX1gKTtcbiAgICAgICAgaWYgKHByb3Bvc2VkUmVzLm9rKSB7XG4gICAgICAgICAgY29uc3QgcHJvcG9zZWREYXRhID0gYXdhaXQgcHJvcG9zZWRSZXMuanNvbigpO1xuICAgICAgICAgIHByb3Bvc2VkT3JkZXIgPSBwcm9wb3NlZERhdGEucHJvcG9zZWRfb3JkZXIgfHwgbnVsbDtcbiAgICAgICAgICBoYXNKb2JBbmFseXNpcyA9IHByb3Bvc2VkRGF0YS5oYXNfam9iX2FuYWx5c2lzIHx8IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy53YXJuKCdDb3VsZCBub3QgbG9hZCBzdWdnZXN0ZWQgYnVsbGV0IG9yZGVyOicsIHByb3Bvc2VkUmVzLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLndhcm4oJ0NvdWxkIG5vdCBsb2FkIHN1Z2dlc3RlZCBidWxsZXQgb3JkZXI6JywgZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgZXJyb3JUZXh0ID0gZS5tZXNzYWdlID09PSAnRmFpbGVkIHRvIGZldGNoJ1xuICAgICAgPyAnRmFpbGVkIHRvIGZldGNoIChzZXJ2ZXIgdW5hdmFpbGFibGUpLidcbiAgICAgIDogZS5tZXNzYWdlO1xuICAgIGFwcGVuZFJldHJ5TWVzc2FnZSgnXHUyNkEwIENvdWxkIG5vdCBsb2FkIGJ1bGxldHM6ICcgKyBlcnJvclRleHQsICgpID0+IHNob3dCdWxsZXRSZW9yZGVyKGV4cElkLCBleHBUaXRsZSkpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWFjaGlldmVtZW50cy5sZW5ndGgpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnTm8gYnVsbGV0IHBvaW50cyBmb3VuZCBmb3IgdGhpcyBleHBlcmllbmNlLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNhdmUgZm9jdXMgb3JpZ2luIGZvciByZXN0b3JhdGlvbiBvbiBjbG9zZSAoR0FQLTE3NilcbiAgaWYgKHR5cGVvZiBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICAvLyBCdWlsZCBtb2RhbCBjb250ZW50XG4gIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG1vZGFsLmlkID0gJ2J1bGxldC1yZW9yZGVyLW1vZGFsJztcbiAgbW9kYWwuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpO1xuICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCAndHJ1ZScpO1xuICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsICdidWxsZXQtcmVvcmRlci10aXRsZScpO1xuICBtb2RhbC5zdHlsZS5jc3NUZXh0ID0gYFxuICAgIHBvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO1xuICAgIHotaW5kZXg6OTk5OTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7YDtcblxuICBjb25zdCBzdWdnZXN0ZWRCdG4gPSBoYXNKb2JBbmFseXNpc1xuICAgID8gYDxidXR0b24gY2xhc3M9XCJidG4tc2Vjb25kYXJ5XCIgaWQ9XCJ1c2UtbGxtLW9yZGVyLWJ0blwiIHRpdGxlPVwiQXBwbHkgam9iLXJlbGV2YW5jZSByYW5raW5nIGZyb20geW91ciBqb2IgYW5hbHlzaXNcIlxuICAgICAgICAgc3R5bGU9XCJjb2xvcjojNjM2NmYxO2JvcmRlci1jb2xvcjojNjM2NmYxO1wiPlx1MjcyOCBVc2UgU3VnZ2VzdGVkIE9yZGVyPC9idXR0b24+YFxuICAgIDogJyc7XG4gIGNvbnN0IHN1Z2dlc3Rpb25NZXRhID0gcHJvcG9zZWRSZWFzb25pbmcgfHwgcHJvcG9zZWRBdHNJbXBhY3QgfHwgcHJvcG9zZWRQYWdlSW1wYWN0XG4gICAgPyBgPGRpdiBpZD1cImJ1bGxldC1vcmRlci1haS1ub3RlXCIgc3R5bGU9XCJmb250LXNpemU6MC44MmVtO2NvbG9yOiM0MzM4Y2E7YmFja2dyb3VuZDojZWVmMmZmO2JvcmRlcjoxcHggc29saWQgI2M3ZDJmZTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHggMTJweDttYXJnaW4tYm90dG9tOjEycHg7XCI+XG4gICAgICAgICR7cHJvcG9zZWRSZWFzb25pbmcgPyBgPGRpdj48c3Ryb25nPkFJIHJhdGlvbmFsZTo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKHByb3Bvc2VkUmVhc29uaW5nKX08L2Rpdj5gIDogJyd9XG4gICAgICAgICR7cHJvcG9zZWRBdHNJbXBhY3QgPyBgPGRpdj48c3Ryb25nPkFUUyBpbXBhY3Q6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbChwcm9wb3NlZEF0c0ltcGFjdCl9PC9kaXY+YCA6ICcnfVxuICAgICAgICAke3Byb3Bvc2VkUGFnZUltcGFjdCA/IGA8ZGl2PjxzdHJvbmc+UGFnZSBsZW5ndGggaW1wYWN0Ojwvc3Ryb25nPiAke2VzY2FwZUh0bWwocHJvcG9zZWRQYWdlSW1wYWN0KX08L2Rpdj5gIDogJyd9XG4gICAgICA8L2Rpdj5gXG4gICAgOiAnJztcblxuICBtb2RhbC5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjI0cHg7bWF4LXdpZHRoOjY0MHB4O3dpZHRoOjkyJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0Ojgwdmg7b3ZlcmZsb3cteTphdXRvO2JveC1zaGFkb3c6MCAyMHB4IDYwcHggcmdiYSgwLDAsMCwwLjMpO1wiPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O21hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8aDMgaWQ9XCJidWxsZXQtcmVvcmRlci10aXRsZVwiIHN0eWxlPVwibWFyZ2luOjA7Y29sb3I6IzFmMjkzNztcIj5cdTIxOTUgUmVvcmRlciBCdWxsZXRzPC9oMz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IzZiNzI4MDtmb250LXNpemU6MC45ZW07bWFyZ2luLXRvcDo0cHg7XCI+JHtleHBUaXRsZX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gYXJpYS1sYWJlbD1cIkNsb3NlIHJlb3JkZXIgZGlhbG9nXCJcbiAgICAgICAgICBvbmNsaWNrPVwicmVzdG9yZUZvY3VzKCk7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1bGxldC1yZW9yZGVyLW1vZGFsJykucmVtb3ZlKClcIlxuICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxLjRlbTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNmI3MjgwO1wiPlx1MjcxNTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgICAgVXNlIFx1MjE5MSBcdTIxOTMgdG8gcmVvcmRlci4gQnVsbGV0cyBoaWdoZXIgaW4gdGhlIGxpc3QgYXBwZWFyIGZpcnN0IG9uIHlvdXIgQ1YuXG4gICAgICAgIFRoZSBtb3N0IHJlbGV2YW50IGJ1bGxldCB3aWxsIGJlIGF1dG8tcmFua2VkIGhpZ2hlc3QgaWYgeW91IHJlc2V0LlxuICAgICAgPC9kaXY+XG4gICAgICAke3N1Z2dlc3Rpb25NZXRhfVxuICAgICAgPG9sIGlkPVwiYnVsbGV0LXJlb3JkZXItbGlzdFwiIHN0eWxlPVwicGFkZGluZzowO21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZTtcIj5cbiAgICAgIDwvb2w+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDoxMHB4O21hcmdpbi10b3A6MThweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7XCI+XG4gICAgICAgICR7c3VnZ2VzdGVkQnRufVxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiIG9uY2xpY2s9XCJyZXNldEJ1bGxldE9yZGVyKCcke2V4cElkfScpXCI+XHUyMUJBIFJlc2V0IHRvIEF1dG88L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1wcmltYXJ5XCIgICBvbmNsaWNrPVwic2F2ZUJ1bGxldE9yZGVyKCcke2V4cElkfScpO3Jlc3RvcmVGb2N1cygpXCI+U2F2ZSBPcmRlcjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtb2RhbCk7XG4gIGlmICh0eXBlb2YgdHJhcEZvY3VzID09PSAnZnVuY3Rpb24nKSB0cmFwRm9jdXMoJ2J1bGxldC1yZW9yZGVyLW1vZGFsJyk7XG4gIGlmICh0eXBlb2Ygc2V0SW5pdGlhbEZvY3VzID09PSAnZnVuY3Rpb24nKSBzZXRJbml0aWFsRm9jdXMoJ2J1bGxldC1yZW9yZGVyLW1vZGFsJyk7XG5cbiAgLy8gQ2xvc2Ugb24gRXNjYXBlXG4gIGNvbnN0IGVzY0hhbmRsZXIgPSAoZSkgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJlc3RvcmVGb2N1cygpO1xuICAgICAgbW9kYWwucmVtb3ZlKCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZXNjSGFuZGxlcik7XG4gICAgfVxuICB9O1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZXNjSGFuZGxlcik7XG5cbiAgLy8gUG9wdWxhdGUgbGlzdCBpdGVtc1xuICBjb25zdCBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1bGxldC1yZW9yZGVyLWxpc3QnKTtcbiAgYWNoaWV2ZW1lbnRzLmZvckVhY2goKGFjaCwgaWR4KSA9PiB7XG4gICAgY29uc3QgdGV4dCA9ICh0eXBlb2YgYWNoID09PSAnb2JqZWN0JyA/IChhY2gudGV4dCB8fCAnJykgOiBTdHJpbmcoYWNoKSk7XG4gICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgIGxpLmRhdGFzZXQub3JpZ0luZGV4ID0gaWR4O1xuICAgIGxpLnN0eWxlLmNzc1RleHQgPSBgZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjhweDtwYWRkaW5nOjhweDttYXJnaW4tYm90dG9tOjZweDtcbiAgICAgIGJhY2tncm91bmQ6I2Y4ZmFmYztib3JkZXI6MXB4IHNvbGlkICNlMmU4ZjA7Ym9yZGVyLXJhZGl1czo2cHg7YDtcbiAgICBsaS5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4O2ZsZXgtc2hyaW5rOjA7XCI+XG4gICAgICAgIDxidXR0b24gdGl0bGU9XCJNb3ZlIHVwXCIgYXJpYS1sYWJlbD1cIk1vdmUgYnVsbGV0IHVwXCJcbiAgICAgICAgICBvbmNsaWNrPVwibW92ZUJ1bGxldCh0aGlzLC0xKVwiXG4gICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6M3B4O1xuICAgICAgICAgICAgICAgICBjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjFweCA1cHg7bGluZS1oZWlnaHQ6MS4yO2ZvbnQtc2l6ZTowLjllbTtcIj5cdTIxOTE8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0aXRsZT1cIk1vdmUgZG93blwiIGFyaWEtbGFiZWw9XCJNb3ZlIGJ1bGxldCBkb3duXCJcbiAgICAgICAgICBvbmNsaWNrPVwibW92ZUJ1bGxldCh0aGlzLCsxKVwiXG4gICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6M3B4O1xuICAgICAgICAgICAgICAgICBjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjFweCA1cHg7bGluZS1oZWlnaHQ6MS4yO2ZvbnQtc2l6ZTowLjllbTtcIj5cdTIxOTM8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OjE7Zm9udC1zaXplOjAuOWVtO1wiPiR7dGV4dH08L3NwYW4+YDtcbiAgICBsaXN0LmFwcGVuZENoaWxkKGxpKTtcbiAgfSk7XG4gIF91cGRhdGVCdWxsZXRBcnJvd3MoKTtcblxuICAvLyBXaXJlIHVwIFwiVXNlIFN1Z2dlc3RlZCBPcmRlclwiIGJ1dHRvbiBpZiBqb2IgYW5hbHlzaXMgaXMgYXZhaWxhYmxlXG4gIGlmIChoYXNKb2JBbmFseXNpcyAmJiBwcm9wb3NlZE9yZGVyKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZS1sbG0tb3JkZXItYnRuJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgX2FwcGx5QnVsbGV0T3JkZXIocHJvcG9zZWRPcmRlcik7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FwcGx5QnVsbGV0T3JkZXIob3JkZXIpIHtcbiAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidWxsZXQtcmVvcmRlci1saXN0Jyk7XG4gIGlmICghbGlzdCkgcmV0dXJuO1xuICBjb25zdCBpdGVtcyA9IEFycmF5LmZyb20obGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpKTtcbiAgLy8gQnVpbGQgYSBtYXAgZnJvbSBvcmlnSW5kZXggXHUyMTkyIGxpIGVsZW1lbnRcbiAgY29uc3QgYnlPcmlnID0ge307XG4gIGl0ZW1zLmZvckVhY2gobGkgPT4geyBieU9yaWdbcGFyc2VJbnQobGkuZGF0YXNldC5vcmlnSW5kZXgsIDEwKV0gPSBsaTsgfSk7XG4gIC8vIFJlLWFwcGVuZCBpbiBwcm9wb3NlZCBvcmRlciwgdGhlbiBhbnkgbm90IGxpc3RlZFxuICBjb25zdCBsaXN0ZWQgPSBuZXcgU2V0KG9yZGVyLm1hcChOdW1iZXIpKTtcbiAgb3JkZXIuZm9yRWFjaChpZHggPT4geyBpZiAoYnlPcmlnW2lkeF0pIGxpc3QuYXBwZW5kQ2hpbGQoYnlPcmlnW2lkeF0pOyB9KTtcbiAgaXRlbXMuZm9yRWFjaChsaSA9PiB7XG4gICAgaWYgKCFsaXN0ZWQuaGFzKHBhcnNlSW50KGxpLmRhdGFzZXQub3JpZ0luZGV4LCAxMCkpKSBsaXN0LmFwcGVuZENoaWxkKGxpKTtcbiAgfSk7XG4gIF91cGRhdGVCdWxsZXRBcnJvd3MoKTtcbn1cblxuZnVuY3Rpb24gbW92ZUJ1bGxldChidG4sIGRpcmVjdGlvbikge1xuICBjb25zdCBsaSAgID0gYnRuLmNsb3Nlc3QoJ2xpJyk7XG4gIGNvbnN0IGxpc3QgPSBsaS5wYXJlbnROb2RlO1xuICBpZiAoZGlyZWN0aW9uID09PSAtMSAmJiBsaS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgbGlzdC5pbnNlcnRCZWZvcmUobGksIGxpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gKzEgJiYgbGkubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgbGlzdC5pbnNlcnRCZWZvcmUobGkubmV4dEVsZW1lbnRTaWJsaW5nLCBsaSk7XG4gIH1cbiAgX3VwZGF0ZUJ1bGxldEFycm93cygpO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlQnVsbGV0QXJyb3dzKCkge1xuICBjb25zdCBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1bGxldC1yZW9yZGVyLWxpc3QnKTtcbiAgaWYgKCFsaXN0KSByZXR1cm47XG4gIGNvbnN0IGl0ZW1zID0gbGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpO1xuICBpdGVtcy5mb3JFYWNoKChsaSwgaWR4KSA9PiB7XG4gICAgY29uc3QgW3VwQnRuLCBkb3duQnRuXSA9IGxpLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpO1xuICAgIHVwQnRuLmRpc2FibGVkICAgPSBpZHggPT09IDA7XG4gICAgZG93bkJ0bi5kaXNhYmxlZCA9IGlkeCA9PT0gaXRlbXMubGVuZ3RoIC0gMTtcbiAgICB1cEJ0bi5zdHlsZS5vcGFjaXR5ICAgPSB1cEJ0bi5kaXNhYmxlZCAgID8gJzAuMycgOiAnMSc7XG4gICAgZG93bkJ0bi5zdHlsZS5vcGFjaXR5ID0gZG93bkJ0bi5kaXNhYmxlZCA/ICcwLjMnIDogJzEnO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZUJ1bGxldE9yZGVyKGV4cElkKSB7XG4gIGNvbnN0IGxpc3QgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1bGxldC1yZW9yZGVyLWxpc3QnKTtcbiAgY29uc3QgaXRlbXMgPSBsaXN0ID8gbGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpIDogW107XG4gIGNvbnN0IG9yZGVyID0gQXJyYXkuZnJvbShpdGVtcykubWFwKGxpID0+IHBhcnNlSW50KGxpLmRhdGFzZXQub3JpZ0luZGV4LCAxMCkpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZW9yZGVyLWJ1bGxldHMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJ30sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7ZXhwZXJpZW5jZV9pZDogZXhwSWQsIG9yZGVyfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKCFyZXMub2sgfHwgIWRhdGEub2spIHtcbiAgICAgIGFwcGVuZFJldHJ5TWVzc2FnZSgnXHUyNkEwIENvdWxkIG5vdCBzYXZlIGJ1bGxldCBvcmRlcjogJyArIChkYXRhLmVycm9yfHwnVW5rbm93bicpLCAoKSA9PiBzYXZlQnVsbGV0T3JkZXIoZXhwSWQpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ1x1MjE5NSBCdWxsZXQgb3JkZXIgc2F2ZWQuIEl0IHdpbGwgYXBwbHkgd2hlbiB5b3UgZ2VuZXJhdGUgdGhlIENWLicpO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidWxsZXQtcmVvcmRlci1tb2RhbCcpPy5yZW1vdmUoKTtcbiAgfSBjYXRjaChlKSB7XG4gICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI2QTAgTmV0d29yayBlcnJvciBzYXZpbmcgYnVsbGV0IG9yZGVyOiAnICsgZS5tZXNzYWdlLCAoKSA9PiBzYXZlQnVsbGV0T3JkZXIoZXhwSWQpKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXNldEJ1bGxldE9yZGVyKGV4cElkKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3Jlb3JkZXItYnVsbGV0cycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb24nfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtleHBlcmllbmNlX2lkOiBleHBJZCwgb3JkZXI6IFtdfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKCFyZXMub2sgfHwgIWRhdGEub2spIHtcbiAgICAgIGFwcGVuZFJldHJ5TWVzc2FnZSgnXHUyNkEwIENvdWxkIG5vdCByZXNldCBidWxsZXQgb3JkZXI6ICcgKyAoZGF0YS5lcnJvcnx8J1Vua25vd24nKSwgKCkgPT4gcmVzZXRCdWxsZXRPcmRlcihleHBJZCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnXHUyMUJBIEJ1bGxldCBvcmRlciByZXNldC4gUmVsZXZhbmNlLWJhc2VkIG9yZGVyaW5nIHdpbGwgYXBwbHkuJyk7XG4gICAgcmVzdG9yZUZvY3VzKCk7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1bGxldC1yZW9yZGVyLW1vZGFsJyk/LnJlbW92ZSgpO1xuICB9IGNhdGNoKGUpIHtcbiAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoJ1x1MjZBMCBOZXR3b3JrIGVycm9yIHJlc2V0dGluZyBidWxsZXQgb3JkZXI6ICcgKyBlLm1lc3NhZ2UsICgpID0+IHJlc2V0QnVsbGV0T3JkZXIoZXhwSWQpKTtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgRm9yd2FyZC1za2lwIHBoYXNlIHdhdGVybWFyayAoR0FQLTEwMSkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8vIEJhY2tlbmQgcGhhc2Ugb3JkZXJpbmcgKG1hdGNoZXMgY29udmVyc2F0aW9uX21hbmFnZXIucHkgX1BIQVNFX09SREVSKS5cbmNvbnN0IF9QSEFTRV9QUk9HUkVTU0lPTiA9IFtcbiAgJ2luaXQnLCAnam9iX2FuYWx5c2lzJywgJ2N1c3RvbWl6YXRpb24nLCAncmV3cml0ZV9yZXZpZXcnLFxuICAnc3BlbGxfY2hlY2snLCAnZ2VuZXJhdGlvbicsICdsYXlvdXRfcmV2aWV3JywgJ2ZpbmFsX2dlbmVyYXRpb24nLCAncmVmaW5lbWVudCcsXG5dO1xuXG4vLyBNaW5pbXVtIGhpZ2hlc3RQaGFzZSBpbmRleCByZXF1aXJlZCBmb3IgZWFjaCBzdGVwIHRvIGJlIGZvcndhcmQtc2tpcHBhYmxlLlxuY29uc3QgX1NURVBfRldEX1BIQVNFX01JTiA9IHtcbiAgYW5hbHlzaXM6ICAgICAgIDEsICAgLy8gam9iX2FuYWx5c2lzXG4gIGN1c3RvbWl6YXRpb25zOiAyLCAgIC8vIGN1c3RvbWl6YXRpb25cbiAgcmV3cml0ZTogICAgICAgIDMsICAgLy8gcmV3cml0ZV9yZXZpZXdcbiAgc3BlbGw6ICAgICAgICAgIDQsICAgLy8gc3BlbGxfY2hlY2tcbiAgbGF5b3V0OiAgICAgICAgIDUsICAgLy8gZ2VuZXJhdGlvblxuICBkb3dubG9hZDogICAgICAgNywgICAvLyBmaW5hbF9nZW5lcmF0aW9uXG4gIGNvdmVyX2xldHRlcjogICA3LFxuICBzY3JlZW5pbmc6ICAgICAgNyxcbiAgaW50ZXJ2aWV3X3ByZXA6IDcsXG4gIHRoYW5rX3lvdTogICAgICA3LFxuICBoYXJ2ZXN0OiAgICAgICAgNyxcbn07XG5cbi8vIFx1MjUwMFx1MjUwMCBXb3JrZmxvdyBzdGVwIGJhciBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gdXBkYXRlV29ya2Zsb3dTdGVwcyhzdGF0dXMpIHtcbiAgLy8gMTItc3RlcCB3b3JrZmxvdyBiYXI6IEpvYiBJbnB1dCBcdTIxOTIgQW5hbHlzaXMgXHUyMTkyIEN1c3RvbWlzZSBcdTIxOTIgUmV3cml0ZXMgXHUyMTkyXG4gIC8vICAgU3BlbGwgQ2hlY2sgXHUyMTkyIExheW91dCBSZXZpZXcgXHUyMTkyIERvd25sb2FkIFx1MjE5MiBDb3ZlciBMZXR0ZXIgXHUyMTkyIFNjcmVlbmluZyBcdTIxOTJcbiAgLy8gICBJbnRlcnZpZXcgUHJlcCBcdTIxOTIgVGhhbmsgWW91IFx1MjE5MiBIYXJ2ZXN0XG4gIC8vXG4gIGNvbnN0IFVQQ09NSU5HID0gbmV3IFNldCgpO1xuXG4gIC8vIFN0ZXBzIHRoYXQgc3VwcG9ydCBMTE0gcmUtZXhlY3V0aW9uIHZpYSAvYXBpL3JlLXJ1bi1waGFzZVxuICBjb25zdCBSRV9SVU5fU1RFUFMgPSBuZXcgU2V0KFsnYW5hbHlzaXMnLCAnY3VzdG9taXphdGlvbnMnLCAncmV3cml0ZScsICdzcGVsbCcsICdsYXlvdXQnXSk7XG5cbiAgLy8gQmFzZSBsYWJlbCBmb3IgZWFjaCBzdGVwICh1c2VkIHdoZW4gaW5qZWN0aW5nIFx1MjFCQiBidXR0b24pXG4gIGNvbnN0IFNURVBfTEFCRUxTID0ge1xuICAgIGpvYjogICAgICAgICAgICAnXHVEODNEXHVEQ0U1IEpvYiBJbnB1dCcsXG4gICAgYW5hbHlzaXM6ICAgICAgICdcdUQ4M0RcdUREMEQgQW5hbHlzaXMnLFxuICAgIGN1c3RvbWl6YXRpb25zOiAnXHUyNjk5XHVGRTBGIEN1c3RvbWlzZScsXG4gICAgcmV3cml0ZTogICAgICAgICdcdTI3MEZcdUZFMEYgUmV3cml0ZXMnLFxuICAgIHNwZWxsOiAgICAgICAgICAnXHVEODNEXHVERDI0IFNwZWxsIENoZWNrJyxcbiAgICBsYXlvdXQ6ICAgICAgICAgJ1x1RDgzQ1x1REZBOCBMYXlvdXQgUmV2aWV3JyxcbiAgICBkb3dubG9hZDogICAgICAgJ1x1MkIwN1x1RkUwRiBEb3dubG9hZCBGaWxlcycsXG4gICAgY292ZXJfbGV0dGVyOiAgICdcdUQ4M0RcdURDRTkgQ292ZXIgTGV0dGVyJyxcbiAgICBzY3JlZW5pbmc6ICAgICAgJ1x1RDgzRFx1RENDQiBTY3JlZW5pbmcnLFxuICAgIGludGVydmlld19wcmVwOiAnXHVEODNDXHVERkE0IEludGVydmlldyBQcmVwJyxcbiAgICB0aGFua195b3U6ICAgICAgJ1x1RDgzRFx1REU0RiBUaGFuayBZb3UnLFxuICAgIGhhcnZlc3Q6ICAgICAgICAnXHVEODNDXHVERjNFIEhhcnZlc3QnLFxuICB9O1xuXG4gIC8vIERldGVybWluZSB3aGljaCBzdGVwcyBhcmUgZG9uZSBiYXNlZCBvbiBzZXNzaW9uIHN0YXRlIGZpZWxkcy5cbiAgY29uc3QgcGhhc2UgPSBzdGF0dXMucGhhc2UgfHwgJyc7XG4gIC8vIEFsbCBwb3N0LWxheW91dCBwaGFzZXMgdW5sb2NrIHNpbXVsdGFuZW91c2x5IG9uY2UgbGF5b3V0IGlzIGNvbmZpcm1lZC5cbiAgY29uc3QgcG9zdExheW91dCA9IHBoYXNlID09PSBQSEFTRVMuRklOQUxfR0VORVJBVElPTiB8fCBwaGFzZSA9PT0gUEhBU0VTLlJFRklORU1FTlQ7XG4gIGNvbnN0IGRvbmUgPSB7XG4gICAgam9iOiAgICAgICAgICAgICEhc3RhdHVzLmpvYl9kZXNjcmlwdGlvbixcbiAgICBhbmFseXNpczogICAgICAgISFzdGF0dXMuam9iX2FuYWx5c2lzLFxuICAgIGN1c3RvbWl6YXRpb25zOiAhIXN0YXR1cy5jdXN0b21pemF0aW9ucyxcbiAgICByZXdyaXRlOiAgICAgICAgcGhhc2UgIT09IFBIQVNFUy5SRVdSSVRFX1JFVklFVyAmJiAoISFzdGF0dXMuY3VzdG9taXphdGlvbnMpLFxuICAgIHNwZWxsOiAgICAgICAgICBwaGFzZSA9PT0gUEhBU0VTLkdFTkVSQVRJT04gfHwgcGhhc2UgPT09IFBIQVNFUy5MQVlPVVRfUkVWSUVXIHx8XG4gICAgICAgICAgICAgICAgICAgIHBoYXNlID09PSBQSEFTRVMuRklOQUxfR0VORVJBVElPTiB8fCBwaGFzZSA9PT0gUEhBU0VTLlJFRklORU1FTlQsXG4gICAgbGF5b3V0OiAgICAgICAgIHBvc3RMYXlvdXQsXG4gICAgZG93bmxvYWQ6ICAgICAgIHBvc3RMYXlvdXQsXG4gICAgY292ZXJfbGV0dGVyOiAgIHBvc3RMYXlvdXQsXG4gICAgc2NyZWVuaW5nOiAgICAgIHBvc3RMYXlvdXQsXG4gICAgaW50ZXJ2aWV3X3ByZXA6IHBvc3RMYXlvdXQsXG4gICAgdGhhbmtfeW91OiAgICAgIHBvc3RMYXlvdXQsXG4gICAgaGFydmVzdDogICAgICAgIHBvc3RMYXlvdXQsXG4gIH07XG5cbiAgLy8gRm9yd2FyZC1za2lwIHdhdGVybWFyayAoR0FQLTEwMSk6IHN0ZXBzIHByZXZpb3VzbHkgcmVhY2hlZCBidXQgbm90IGN1cnJlbnRseVxuICAvLyBcImRvbmVcIiBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGhhc2UgYXJlIHN0aWxsIG5hdmlnYWJsZSB3aXRoIGEgY29uZmlybWF0aW9uLlxuICBjb25zdCBoaWdoZXN0UGhhc2VJZHggPSBfUEhBU0VfUFJPR1JFU1NJT04uaW5kZXhPZihzdGF0dXMuaGlnaGVzdF9waGFzZSB8fCAnJyk7XG4gIGNvbnN0IGN1cnJlbnRQaGFzZUlkeCA9IF9QSEFTRV9QUk9HUkVTU0lPTi5pbmRleE9mKHBoYXNlKTtcblxuICAvLyBEZXRlcm1pbmUgdGhlIGFjdGl2ZSBzdGVwIGZyb20gdGhlIGJhY2tlbmQgcGhhc2Ugc3RyaW5nLlxuICBjb25zdCBwaGFzZVRvU3RlcCA9IHtcbiAgICAnaW5pdCc6ICAgICAgICAgICAgICdqb2InLFxuICAgICdqb2JfYW5hbHlzaXMnOiAgICAgJ2FuYWx5c2lzJyxcbiAgICAnY3VzdG9taXphdGlvbic6ICAgICdjdXN0b21pemF0aW9ucycsXG4gICAgJ3Jld3JpdGVfcmV2aWV3JzogICAncmV3cml0ZScsXG4gICAgJ3NwZWxsX2NoZWNrJzogICAgICAnc3BlbGwnLFxuICAgICdnZW5lcmF0aW9uJzogICAgICAgJ2xheW91dCcsXG4gICAgJ2xheW91dF9yZXZpZXcnOiAgICAnbGF5b3V0JyxcbiAgICAnZmluYWxfZ2VuZXJhdGlvbic6ICdkb3dubG9hZCcsXG4gICAgJ3JlZmluZW1lbnQnOiAgICAgICAnZG93bmxvYWQnLFxuICB9O1xuICBjb25zdCBhY3RpdmVTdGVwID0gcGhhc2VUb1N0ZXBbcGhhc2VdIHx8ICdqb2InO1xuXG4gIC8vIFJlc29sdmUgdGhlIHJlZW50cnkgc3RlcCBmb3IgdGhlIFwiUmVmaW5pbmdcIiBiYWRnZVxuICBjb25zdCBfcGhhc2VUb1N0ZXAyID0gT2JqZWN0LmFzc2lnbih7J2luaXQnOiAnam9iJ30sIHBoYXNlVG9TdGVwKTtcbiAgY29uc3QgcmVlbnRyeVN0ZXAgPSBzdGF0dXMuaXRlcmF0aW5nXG4gICAgPyAoX3BoYXNlVG9TdGVwMltzdGF0dXMucmVlbnRyeV9waGFzZV0gfHwgc3RhdHVzLnJlZW50cnlfcGhhc2UgfHwgbnVsbClcbiAgICA6IG51bGw7XG5cbiAgY29uc3Qgc3RlcElkcyA9IFtcbiAgICAnam9iJywgJ2FuYWx5c2lzJywgJ2N1c3RvbWl6YXRpb25zJywgJ3Jld3JpdGUnLCAnc3BlbGwnLCAnbGF5b3V0JyxcbiAgICAnZG93bmxvYWQnLCAnY292ZXJfbGV0dGVyJywgJ3NjcmVlbmluZycsICdpbnRlcnZpZXdfcHJlcCcsICd0aGFua195b3UnLCAnaGFydmVzdCcsXG4gIF07XG4gIGNvbnN0IHN0YWxlU3RlcHMgPSBuZXcgU2V0KHN0YXR1cy5zdGFsZV9zdGVwcyB8fCBbXSk7XG4gIHN0ZXBJZHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzdGVwLSR7c3RlcH1gKTtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgLy8gVXBjb21pbmcgc3RlcHMgYXJlIGZpeGVkIFx1MjAxNCBuZXZlciBjaGFuZ2UgdGhlaXIgY2xhc3MuXG4gICAgaWYgKFVQQ09NSU5HLmhhcyhzdGVwKSkgcmV0dXJuO1xuICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScsICdjb21wbGV0ZWQnLCAnY2xpY2thYmxlJywgJ3VwY29taW5nJywgJ3N0YWxlJywgJ2ZvcndhcmQtc2tpcCcpO1xuXG4gICAgbGV0IGxhYmVsID0gU1RFUF9MQUJFTFNbc3RlcF0gfHwgc3RlcDtcblxuICAgIGlmIChzdGVwID09PSBhY3RpdmVTdGVwKSB7XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgIC8vIFwiXHUyMUJCIFJlZmluaW5nXCIgYmFkZ2Ugc2hvd24gb24gdGhlIGFjdGl2ZSBzdGVwIHdoZW4gaXRlcmF0aW5nXG4gICAgICBpZiAoc3RhdHVzLml0ZXJhdGluZyAmJiByZWVudHJ5U3RlcCA9PT0gc3RlcCkge1xuICAgICAgICBsYWJlbCArPSAnIDxzcGFuIGNsYXNzPVwic3RlcC1pbmxpbmUtYmFkZ2VcIj5cdTIxQkIgUmVmaW5pbmc8L3NwYW4+JztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRvbmVbc3RlcF0pIHtcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2NvbXBsZXRlZCcpO1xuICAgICAgLy8gQ29tcGxldGVkIHN0ZXBzIGFyZSBjbGlja2FibGUgZm9yIGJhY2stbmF2aWdhdGlvbi5cbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2NsaWNrYWJsZScpO1xuICAgICAgLy8gQWRkIFx1MjFCQiByZS1ydW4gYnV0dG9uIGZvciBzdGVwcyB0aGF0IHN1cHBvcnQgTExNIHJlLWV4ZWN1dGlvblxuICAgICAgaWYgKFJFX1JVTl9TVEVQUy5oYXMoc3RlcCkpIHtcbiAgICAgICAgY29uc3QgcmVydW5MYWJlbCA9IF9TVEVQX0RJU1BMQVlbc3RlcF0gfHwgc3RlcDtcbiAgICAgICAgbGFiZWwgKz0gYCA8YnV0dG9uIGNsYXNzPVwic3RlcC1yZXJ1blwiIGFyaWEtbGFiZWw9XCJSZS1ydW4gJHtyZXJ1bkxhYmVsfVwiXG4gICAgICAgICAgdGl0bGU9XCJSZS1ydW4gJHtzdGVwfSB3aXRoIHVwZGF0ZWQgaW5wdXRzXCJcbiAgICAgICAgICBvbmNsaWNrPVwiZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uZmlybVJlUnVuUGhhc2UoJyR7c3RlcH0nKVwiXG4gICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MC44ZW07b3BhY2l0eTowLjM1O3RyYW5zaXRpb246b3BhY2l0eSAwLjE1czttYXJnaW4tbGVmdDoycHg7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO3BhZGRpbmc6MDtjb2xvcjppbmhlcml0O2xpbmUtaGVpZ2h0OjE7XCI+XHUyMUJCPC9idXR0b24+YDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhpZ2hlc3RQaGFzZUlkeCA+PSAwICYmIChfU1RFUF9GV0RfUEhBU0VfTUlOW3N0ZXBdID8/IEluZmluaXR5KSA8PSBoaWdoZXN0UGhhc2VJZHhcbiAgICAgICAgICAgICAgICYmIGhpZ2hlc3RQaGFzZUlkeCA+IGN1cnJlbnRQaGFzZUlkeCkge1xuICAgICAgLy8gRm9yd2FyZC1za2lwOiBzdGVwIHdhcyBjb21wbGV0ZWQgaW4gYSBwcmlvciBpdGVyYXRpb24gYnV0IGlzIGFoZWFkIG9mIGN1cnJlbnQgcGhhc2UuXG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKCdmb3J3YXJkLXNraXAnLCAnY2xpY2thYmxlJyk7XG4gICAgICBsYWJlbCArPSAnIDxzcGFuIGNsYXNzPVwic3RlcC1pbmxpbmUtYmFkZ2Ugc3RlcC1md2QtYmFkZ2VcIiB0aXRsZT1cIlByZXZpb3VzbHkgY29tcGxldGVkIFx1MjAxNCBjbGljayB0byBqdW1wIGFoZWFkXCI+XHUyM0U5PC9zcGFuPic7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgc3RhbGUgY2xhc3MgZm9yIHN0ZXBzIGRvd25zdHJlYW0gb2YgYSByZS1ydW5cbiAgICBpZiAoc3RhbGVTdGVwcy5oYXMoc3RlcCkpIGVsLmNsYXNzTGlzdC5hZGQoJ3N0YWxlJyk7XG5cbiAgICAvLyBBcHBlbmQgc3Itb25seSBzdGF0ZSBkZXNjcmlwdGlvbiBmb3Igc2NyZWVuIHJlYWRlciB1c2Vyc1xuICAgIGNvbnN0IGlzU3RhbGUgICAgICAgICA9IHN0YWxlU3RlcHMuaGFzKHN0ZXApO1xuICAgIGNvbnN0IGlzU3RhbGVDcml0aWNhbCA9IGVsLmNsYXNzTGlzdC5jb250YWlucygnc3RhbGUtY3JpdGljYWwnKTtcbiAgICBjb25zdCBpc0FjdGl2ZSAgICAgICAgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpO1xuICAgIGNvbnN0IGlzQ29tcGxldGVkICAgICA9IGVsLmNsYXNzTGlzdC5jb250YWlucygnY29tcGxldGVkJyk7XG4gICAgY29uc3QgaXNGd2RTa2lwICAgICAgID0gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdmb3J3YXJkLXNraXAnKTtcbiAgICBjb25zdCBzclN0YXRlID0gaXNTdGFsZUNyaXRpY2FsID8gJyAoY3JpdGljYWwgXHUyMDE0IHJldmlldyByZXF1aXJlZCknXG4gICAgICA6IGlzU3RhbGUgICAgID8gJyAoc3RhbGUgXHUyMDE0IHJlc3VsdHMgbWF5IGJlIG91dGRhdGVkKSdcbiAgICAgIDogaXNBY3RpdmUgICAgPyAnIChjdXJyZW50IHN0ZXApJ1xuICAgICAgOiBpc0NvbXBsZXRlZCA/ICcgKGNvbXBsZXRlZCknXG4gICAgICA6IGlzRndkU2tpcCAgID8gJyAocHJldmlvdXNseSBjb21wbGV0ZWQgXHUyMDE0IGNsaWNrIHRvIGp1bXAgYWhlYWQpJ1xuICAgICAgOiAnJztcbiAgICBpZiAoc3JTdGF0ZSkgbGFiZWwgKz0gYDxzcGFuIGNsYXNzPVwic3Itb25seVwiPiR7c3JTdGF0ZX08L3NwYW4+YDtcblxuICAgIGVsLmlubmVySFRNTCA9IGxhYmVsO1xuICB9KTtcblxuICBhcHBseUxheW91dEZyZXNobmVzc05hdmlnYXRpb25TdGF0ZSgpO1xuXG4gIC8vIFNob3cgXHUyMUJCIGljb25zIHZpYSBDU1MgOmhvdmVyIG9uIHRoZSBwYXJlbnQgLmNvbXBsZXRlZCBzdGVwXG4gIC8vIChpbmplY3QgYSA8c3R5bGU+IG9ubHkgb25jZSlcbiAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlcC1yZXJ1bi1zdHlsZScpKSB7XG4gICAgY29uc3QgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgcy5pZCA9ICdzdGVwLXJlcnVuLXN0eWxlJztcbiAgICBzLnRleHRDb250ZW50ID0gJy5zdGVwLmNvbXBsZXRlZDpob3ZlciAuc3RlcC1yZXJ1biwgLnN0ZXAuY29tcGxldGVkOmZvY3VzLXdpdGhpbiAuc3RlcC1yZXJ1biB7IG9wYWNpdHk6IDEgIWltcG9ydGFudDsgfSAuc3RlcC1yZXJ1bjpmb2N1cy12aXNpYmxlIHsgb3V0bGluZTogMnB4IHNvbGlkICMzYjgyZjY7IG91dGxpbmUtb2Zmc2V0OiAycHg7IG9wYWNpdHk6IDEgIWltcG9ydGFudDsgfSc7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTtcbiAgfVxuXG4gIC8vIFN5bmMgc2Vjb25kLWJhciB0YWIgdmlzaWJpbGl0eSBhbmQgYWN0aW9uIGJ1dHRvbnMgdG8gdGhlIGFjdGl2ZSB3b3JrZmxvdyBzdGVwXG4gIGlmICh0eXBlb2YgdXBkYXRlVGFiQmFyRm9yU3RhZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICB1cGRhdGVUYWJCYXJGb3JTdGFnZShhY3RpdmVTdGVwKTtcbiAgfVxuICB1cGRhdGVBY3Rpb25CdXR0b25zKGFjdGl2ZVN0ZXApO1xuXG4gIC8vIFN5bmMgdmlldy1jdXJzb3IgcmluZyB0byB0aGUgY3VycmVudGx5IHZpc2libGUgdGFiXG4gIF91cGRhdGVWaWV3aW5nSW5kaWNhdG9yKHN0YXRlTWFuYWdlci5nZXRDdXJyZW50VGFiKCkpO1xufVxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoR0VORVJBVElPTl9TVEFURV9FVkVOVCwgYXBwbHlMYXlvdXRGcmVzaG5lc3NOYXZpZ2F0aW9uU3RhdGUpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihHRU5FUkFUSU9OX1NUQVRFX0VWRU5ULCBhcHBseURpcnR5UGhhc2VOYXZpZ2F0aW9uU3RhdGUpO1xufVxuXG4vKipcbiAqIE1hcmsgb3IgdW5tYXJrIHdvcmtmbG93IHN0ZXAgcGlsbHMgYXMgc3RhbGUgYmFzZWQgb24gZGlydHkgcGhhc2VzIHNldCBieVxuICogbGF5b3V0LXBoYXNlIGNvbnRlbnQgZWRpdHMgKFBPU1QgL2FwaS9jdi9hcHBseS1jb250ZW50LWNoYW5nZXMpLlxuICpcbiAqIE9ubHkgYWZmZWN0cyBzdGVwcyBsaXN0ZWQgaW4gc3RhdGVNYW5hZ2VyLmdldERpcnR5UGhhc2VzKCkgdGhhdCBhcmUgTk9UXG4gKiBhbHJlYWR5IGhhbmRsZWQgYnkgYXBwbHlMYXlvdXRGcmVzaG5lc3NOYXZpZ2F0aW9uU3RhdGUgKGkuZS4gbm90ICdsYXlvdXQnKS5cbiAqL1xuZnVuY3Rpb24gYXBwbHlEaXJ0eVBoYXNlTmF2aWdhdGlvblN0YXRlKCkge1xuICBjb25zdCBkaXJ0eVBoYXNlcyA9IHN0YXRlTWFuYWdlci5nZXREaXJ0eVBoYXNlcygpO1xuICBjb25zdCBzdGVwc1RvQ2xlYXIgPSBbXTsgICAgLy8gc3RlcHMgd2UgbWFuYWdlIGhlcmUgKG5vdCAnbGF5b3V0JylcblxuICBzdGVwc1RvQ2xlYXIuZm9yRWFjaChzdGVwID0+IHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzdGVwLSR7c3RlcH1gKTtcbiAgICBpZiAoIWVsKSByZXR1cm47XG5cbiAgICBjb25zdCBpc0RpcnR5ID0gZGlydHlQaGFzZXMuaW5jbHVkZXMoc3RlcCk7XG4gICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnc3RhbGUnLCBpc0RpcnR5KTtcblxuICAgIC8vIFByZXNlcnZlIGV4aXN0aW5nIHJlcnVuIGJ1dHRvbiBtYXJrdXAsIHVwZGF0ZSB0ZXh0ICsgYmFkZ2VcbiAgICBjb25zdCByZXJ1bkh0bWwgPSBlbC5xdWVyeVNlbGVjdG9yKCcuc3RlcC1yZXJ1bicpPy5vdXRlckhUTUwgfHwgJyc7XG4gICAgY29uc3QgbGFiZWwgICAgID0gX1NURVBfRElTUExBWVtzdGVwXSB8fCBzdGVwO1xuICAgIGNvbnN0IGJhZGdlICAgICA9IGlzRGlydHlcbiAgICAgID8gJyA8c3BhbiBjbGFzcz1cInN0ZXAtaW5saW5lLWJhZGdlIHN0ZXAtc3RhbGUtYmFkZ2VcIj5Db250ZW50IGNoYW5nZWQ8L3NwYW4+J1xuICAgICAgOiAnJztcbiAgICBlbC5pbm5lckhUTUwgPSBgJHtsYWJlbH0ke2JhZGdlfSR7cmVydW5IdG1sID8gYCAke3JlcnVuSHRtbH1gIDogJyd9YDtcbiAgfSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBTdGVwIG5hdmlnYXRpb24gaGVscGVyIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBfZG9TdGVwTmF2aWdhdGUoc3RlcCkge1xuICBjb25zdCBzdGVwVG9UYWIgPSB7XG4gICAgYW5hbHlzaXM6ICAgICAgICdhbmFseXNpcycsXG4gICAgY3VzdG9taXphdGlvbnM6ICdnb2FscycsXG4gICAgcmV3cml0ZTogICAgICAgICdyZXdyaXRlJyxcbiAgICBzcGVsbDogICAgICAgICAgJ3NwZWxsJyxcbiAgICBsYXlvdXQ6ICAgICAgICAgJ2xheW91dCcsXG4gICAgZG93bmxvYWQ6ICAgICAgICdmaW5hbF9nZW5lcmF0ZScsXG4gICAgY292ZXJfbGV0dGVyOiAgICdjb3Zlci1sZXR0ZXInLFxuICAgIHNjcmVlbmluZzogICAgICAnc2NyZWVuaW5nJyxcbiAgICBpbnRlcnZpZXdfcHJlcDogJ2ludGVydmlldy1wcmVwJyxcbiAgICB0aGFua195b3U6ICAgICAgJ3RoYW5rLXlvdScsXG4gICAgaGFydmVzdDogICAgICAgICdoYXJ2ZXN0JyxcbiAgfTtcbiAgY29uc3QgdGFiTmFtZSA9IHN0ZXBUb1RhYltzdGVwXTtcbiAgaWYgKCF0YWJOYW1lKSByZXR1cm47XG4gIGlmICh0eXBlb2YgdXBkYXRlVGFiQmFyRm9yU3RhZ2UgPT09ICdmdW5jdGlvbicpIHVwZGF0ZVRhYkJhckZvclN0YWdlKHN0ZXApO1xuICBzd2l0Y2hUYWIodGFiTmFtZSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBTdGVwIGNsaWNrIChiYWNrLW5hdikgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8vIEJhY2stbmF2aWdhdGlvbjogY2xpY2tpbmcgYSBjb21wbGV0ZWQgd29ya2Zsb3cgc3RlcCBuYXZpZ2F0ZXMgdG8gaXRzIHZpZXdlciB0YWIuXG4vLyBDbGlja2luZyB0aGUgam9iIHN0ZXAgYWx3YXlzIG9wZW5zIHRoZSBsb2FkLWpvYiBwYW5lbC5cbmZ1bmN0aW9uIGhhbmRsZVN0ZXBDbGljayhzdGVwKSB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHN0ZXAtJHtzdGVwfWApO1xuICBpZiAoIWVsKSByZXR1cm47XG5cbiAgLy8gSm9iIHN0ZXA6IHNob3cgam9iIGNvbnRlbnQgaWYgYSBqb2IgaXMgbG9hZGVkLCBvdGhlcndpc2Ugb3BlbiB0aGUgbG9hZCBwYW5lbC5cbiAgaWYgKHN0ZXAgPT09ICdqb2InKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucygnY29tcGxldGVkJykgfHwgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSkge1xuICAgICAgc3dpdGNoVGFiKCdqb2InKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd0xvYWRKb2JQYW5lbCgpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3J3YXJkLXNraXA6IHByZXZpb3VzbHkgcmVhY2hlZCBzdGFnZSB0aGF0IGlzIGFoZWFkIG9mIGN1cnJlbnQgcGhhc2UuXG4gIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZvcndhcmQtc2tpcCcpKSB7XG4gICAgY29uc3QgbGFiZWwgPSBfU1RFUF9ESVNQTEFZW3N0ZXBdIHx8IHN0ZXA7XG4gICAgaWYgKHR5cGVvZiBjb25maXJtRGlhbG9nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25maXJtRGlhbG9nKFxuICAgICAgICBgSnVtcCBhaGVhZCB0byAke2xhYmVsfT9cXG5cXG5JbnRlcm1lZGlhdGUgc3RhZ2VzIG1heSBuZWVkIHJlLXJ1bm5pbmcgaWYgeW91IG1ha2UgY2hhbmdlcyBoZXJlLmAsXG4gICAgICAgIHsgY29uZmlybUxhYmVsOiAnSnVtcCBhaGVhZCcsIGNhbmNlbExhYmVsOiAnU3RheSBoZXJlJyB9XG4gICAgICApLnRoZW4oY29uZmlybWVkID0+IHsgaWYgKGNvbmZpcm1lZCkgX2RvU3RlcE5hdmlnYXRlKHN0ZXApOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgX2RvU3RlcE5hdmlnYXRlKHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBPbmx5IG5hdmlnYXRlIGlmIHRoZSBzdGVwIGlzIGNvbXBsZXRlZCAoYmFjay1uYXYpIG9yIGFjdGl2ZS5cbiAgaWYgKCFlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2NvbXBsZXRlZCcpICYmICFlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSByZXR1cm47XG5cbiAgY29uc3QgaGFzVW5hbnN3ZXJlZFBvc3RBbmFseXNpc1F1ZXN0aW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBxcyA9IEFycmF5LmlzQXJyYXkod2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucykgPyB3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zIDogW107XG4gICAgaWYgKHFzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGFuc3dlcnMgPSAod2luZG93LnF1ZXN0aW9uQW5zd2VycyAmJiB0eXBlb2Ygd2luZG93LnF1ZXN0aW9uQW5zd2VycyA9PT0gJ29iamVjdCcpXG4gICAgICA/IHdpbmRvdy5xdWVzdGlvbkFuc3dlcnNcbiAgICAgIDoge307XG4gICAgcmV0dXJuIHFzLnNvbWUocSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGFuc3dlcnNbcS50eXBlXTtcbiAgICAgIHJldHVybiAhdmFsdWUgfHwgIVN0cmluZyh2YWx1ZSkudHJpbSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHN0ZXBUb1RhYiA9IHtcbiAgICBhbmFseXNpczogICAgICAgaGFzVW5hbnN3ZXJlZFBvc3RBbmFseXNpc1F1ZXN0aW9ucygpID8gJ3F1ZXN0aW9ucycgOiAnYW5hbHlzaXMnLFxuICAgIGN1c3RvbWl6YXRpb25zOiAnZ29hbHMnLFxuICAgIHJld3JpdGU6ICAgICAgICAncmV3cml0ZScsXG4gICAgc3BlbGw6ICAgICAgICAgICdzcGVsbCcsXG4gICAgbGF5b3V0OiAgICAgICAgICdsYXlvdXQnLFxuICAgIGRvd25sb2FkOiAgICAgICAnZmluYWxfZ2VuZXJhdGUnLFxuICAgIGNvdmVyX2xldHRlcjogICAnY292ZXItbGV0dGVyJyxcbiAgICBzY3JlZW5pbmc6ICAgICAgJ3NjcmVlbmluZycsXG4gICAgaW50ZXJ2aWV3X3ByZXA6ICdpbnRlcnZpZXctcHJlcCcsXG4gICAgdGhhbmtfeW91OiAgICAgICd0aGFuay15b3UnLFxuICAgIGhhcnZlc3Q6ICAgICAgICAnaGFydmVzdCcsXG4gIH07XG4gIGNvbnN0IHRhYk5hbWUgPSBzdGVwVG9UYWJbc3RlcF07XG4gIGlmICghdGFiTmFtZSkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvTmF2aWdhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB1cGRhdGVUYWJCYXJGb3JTdGFnZSA9PT0gJ2Z1bmN0aW9uJykgdXBkYXRlVGFiQmFyRm9yU3RhZ2Uoc3RlcCk7XG4gICAgc3dpdGNoVGFiKHRhYk5hbWUpO1xuICB9O1xuXG4gIC8vIFNob3cgYSBkb3duc3RyZWFtLWF3YXJlbmVzcyBkaWFsb2cgd2hlbiBiYWNrLW5hdmlnYXRpbmcgdG8gYSBjb21wbGV0ZWQgc3RlcFxuICAvLyB0aGF0IGhhcyBkb3duc3RyZWFtIGNvbXBsZXRlZCBzdGVwcyAobm90IHdoZW4gdGhlIHN0ZXAgaXMgYWN0aXZlKS5cbiAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucygnY29tcGxldGVkJykgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcbiAgICBjb25zdCBzdGVwSWR4ID0gX1NURVBfT1JERVIuaW5kZXhPZihzdGVwKTtcbiAgICBjb25zdCBoYXNEb3duc3RyZWFtQ29tcGxldGVkID0gX1NURVBfT1JERVIuc2xpY2Uoc3RlcElkeCArIDEpLnNvbWUocyA9PiB7XG4gICAgICBjb25zdCBkb3duc3RyZWFtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHN0ZXAtJHtzfWApO1xuICAgICAgcmV0dXJuIGRvd25zdHJlYW0gJiYgZG93bnN0cmVhbS5jbGFzc0xpc3QuY29udGFpbnMoJ2NvbXBsZXRlZCcpO1xuICAgIH0pO1xuICAgIGlmIChoYXNEb3duc3RyZWFtQ29tcGxldGVkKSB7XG4gICAgICBfc2hvd1JlUnVuQ29uZmlybU1vZGFsKHN0ZXAsICdiYWNrLW5hdicsIGRvTmF2aWdhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGRvTmF2aWdhdGUoKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB7XG4gIF9TVEVQX09SREVSLFxuICBfU1RFUF9ESVNQTEFZLFxuICBiYWNrVG9QaGFzZSxcbiAgX3Nob3dSZVJ1bkNvbmZpcm1Nb2RhbCxcbiAgX3Nob3dBbmFseXNpc0NsYXJpZmljYXRpb25BbWVuZE1vZGFsLFxuICBjb25maXJtUmVSdW5QaGFzZSxcbiAgcmVSdW5QaGFzZSxcbiAgX2V4ZWN1dGVSZVJ1blBoYXNlLFxuICBfZ2V0U3RlcFRvb2x0aXAsXG4gIF91cGRhdGVWaWV3aW5nSW5kaWNhdG9yLFxuICBfaGlnaGxpZ2h0Q2hhbmdlZEl0ZW1zLFxuICBfbWFya0NoYW5nZWQsXG4gIGFwcGx5TGF5b3V0RnJlc2huZXNzTmF2aWdhdGlvblN0YXRlLFxuICBhcHBseURpcnR5UGhhc2VOYXZpZ2F0aW9uU3RhdGUsXG4gIHNob3dCdWxsZXRSZW9yZGVyLFxuICBfYXBwbHlCdWxsZXRPcmRlcixcbiAgbW92ZUJ1bGxldCxcbiAgX3VwZGF0ZUJ1bGxldEFycm93cyxcbiAgc2F2ZUJ1bGxldE9yZGVyLFxuICByZXNldEJ1bGxldE9yZGVyLFxuICB1cGRhdGVXb3JrZmxvd1N0ZXBzLFxuICBoYW5kbGVTdGVwQ2xpY2ssXG4gIF9BQ1RJT05fTEFCRUxTLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3ZhbGlkYXRvcnMuanNcbiAqIEFQSSByZXNwb25zZSB2YWxpZGF0b3JzIFx1MjAxNCBEVE8gbWlycm9ycyBvZiBQeXRob24gZGF0YWNsYXNzZXMgaW4gd2ViX2FwcC5weS5cbiAqXG4gKiBFYWNoIGZ1bmN0aW9uIGNoZWNrcyB0aGF0IHJlcXVpcmVkIGZpZWxkcyBhcmUgcHJlc2VudCBpbiBhbiBBUEkgcmVzcG9uc2UgYW5kXG4gKiBsb2dzIGEgY29uc29sZS53YXJuIGlmIGFueSBhcmUgbWlzc2luZyBvciBoYXZlIGFuIHVuZXhwZWN0ZWQgdHlwZS4gIFZhbGlkYXRvcnNcbiAqIHJldHVybiB0aGUgb3JpZ2luYWwgZGF0YSBvYmplY3QgdW5jaGFuZ2VkIHNvIHRoZXkgY2FuIGJlIHVzZWQgaW5saW5lLlxuICpcbiAqIFVwZGF0ZSBib3RoIHRoaXMgZmlsZSBhbmQgdGhlIFB5dGhvbiBkYXRhY2xhc3NlcyBpbiB3ZWJfYXBwLnB5IHRvZ2V0aGVyXG4gKiB3aGVuZXZlciBhZGRpbmcgb3IgcmVtb3ZpbmcgcmVzcG9uc2UgZmllbGRzLlxuICpcbiAqIERFUEVOREVOQ0lFUzogbm9uZVxuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcigndmFsaWRhdG9ycycpO1xuXG4vKiogVmFsaWRhdGUgR0VUIC9hcGkvc3RhdHVzIHJlc3BvbnNlLiAqL1xuZnVuY3Rpb24gcGFyc2VTdGF0dXNSZXNwb25zZShkYXRhKSB7XG4gIGNvbnN0IHJlcXVpcmVkID0gW1xuICAgICdwaGFzZScsICdsbG1fcHJvdmlkZXInLCAnam9iX2Rlc2NyaXB0aW9uJyxcbiAgICAncG9zdF9hbmFseXNpc19xdWVzdGlvbnMnLCAncG9zdF9hbmFseXNpc19hbnN3ZXJzJyxcbiAgICAnYWxsX2V4cGVyaWVuY2VfaWRzJywgJ2FsbF9leHBlcmllbmNlcycsICdhbGxfc2tpbGxzJywgJ2FsbF9hY2hpZXZlbWVudHMnLFxuICAgICdwcm9mZXNzaW9uYWxfc3VtbWFyaWVzJywgJ2NvcGlsb3RfYXV0aCcsICdpdGVyYXRpbmcnLFxuICAgICdleHBlcmllbmNlX2RlY2lzaW9ucycsICdza2lsbF9kZWNpc2lvbnMnLFxuICAgICdhY2hpZXZlbWVudF9kZWNpc2lvbnMnLCAncHVibGljYXRpb25fZGVjaXNpb25zJyxcbiAgICAnZXh0cmFfc2tpbGxzJywgJ2V4dHJhX3NraWxsX21hdGNoZXMnLCAnc2Vzc2lvbl9maWxlJyxcbiAgXTtcbiAgY29uc3QgbWlzc2luZyA9IHJlcXVpcmVkLmZpbHRlcihrID0+ICEoayBpbiBkYXRhKSk7XG4gIGlmIChtaXNzaW5nLmxlbmd0aCkge1xuICAgIGxvZy53YXJuKCdbcGFyc2VTdGF0dXNSZXNwb25zZV0gTWlzc2luZyBmaWVsZHM6JywgbWlzc2luZywgZGF0YSk7XG4gIH1cbiAgaWYgKCdwb3N0X2FuYWx5c2lzX3F1ZXN0aW9ucycgaW4gZGF0YSAmJiAhQXJyYXkuaXNBcnJheShkYXRhLnBvc3RfYW5hbHlzaXNfcXVlc3Rpb25zKSkge1xuICAgIGxvZy53YXJuKCdbcGFyc2VTdGF0dXNSZXNwb25zZV0gcG9zdF9hbmFseXNpc19xdWVzdGlvbnMgc2hvdWxkIGJlIGFuIGFycmF5OicsIGRhdGEucG9zdF9hbmFseXNpc19xdWVzdGlvbnMpO1xuICB9XG4gIGlmICgnYWxsX2V4cGVyaWVuY2VfaWRzJyBpbiBkYXRhICYmICFBcnJheS5pc0FycmF5KGRhdGEuYWxsX2V4cGVyaWVuY2VfaWRzKSkge1xuICAgIGxvZy53YXJuKCdbcGFyc2VTdGF0dXNSZXNwb25zZV0gYWxsX2V4cGVyaWVuY2VfaWRzIHNob3VsZCBiZSBhbiBhcnJheTonLCBkYXRhLmFsbF9leHBlcmllbmNlX2lkcyk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKiBWYWxpZGF0ZSBHRVQgL2FwaS9zZXNzaW9ucyByZXNwb25zZS4gKi9cbmZ1bmN0aW9uIHBhcnNlU2Vzc2lvbkxpc3RSZXNwb25zZShkYXRhKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShkYXRhLnNlc3Npb25zKSkge1xuICAgIGxvZy53YXJuKCdbcGFyc2VTZXNzaW9uTGlzdFJlc3BvbnNlXSBzZXNzaW9ucyBzaG91bGQgYmUgYW4gYXJyYXk6JywgZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaXRlbVJlcXVpcmVkID0gWydwYXRoJywgJ3Bvc2l0aW9uX25hbWUnLCAndGltZXN0YW1wJywgJ3BoYXNlJywgJ2hhc19qb2InLCAnaGFzX2FuYWx5c2lzJywgJ2hhc19jdXN0b21pemF0aW9ucyddO1xuICAgIGRhdGEuc2Vzc2lvbnMuZm9yRWFjaCgocywgaSkgPT4ge1xuICAgICAgY29uc3QgbWlzc2luZyA9IGl0ZW1SZXF1aXJlZC5maWx0ZXIoayA9PiAhKGsgaW4gcykpO1xuICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSBsb2cud2FybihgW3BhcnNlU2Vzc2lvbkxpc3RSZXNwb25zZV0gc2Vzc2lvbnNbJHtpfV0gbWlzc2luZyBmaWVsZHM6YCwgbWlzc2luZywgcyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKiBWYWxpZGF0ZSBHRVQgL2FwaS9yZXdyaXRlcyByZXNwb25zZS4gKi9cbmZ1bmN0aW9uIHBhcnNlUmV3cml0ZXNSZXNwb25zZShkYXRhKSB7XG4gIGNvbnN0IHJlcXVpcmVkID0gWydvaycsICdyZXdyaXRlcycsICdwZXJzdWFzaW9uX3dhcm5pbmdzJywgJ3BoYXNlJ107XG4gIGNvbnN0IG1pc3NpbmcgPSByZXF1aXJlZC5maWx0ZXIoayA9PiAhKGsgaW4gZGF0YSkpO1xuICBpZiAobWlzc2luZy5sZW5ndGgpIGxvZy53YXJuKCdbcGFyc2VSZXdyaXRlc1Jlc3BvbnNlXSBNaXNzaW5nIGZpZWxkczonLCBtaXNzaW5nLCBkYXRhKTtcbiAgaWYgKCdyZXdyaXRlcycgaW4gZGF0YSAmJiAhQXJyYXkuaXNBcnJheShkYXRhLnJld3JpdGVzKSkge1xuICAgIGxvZy53YXJuKCdbcGFyc2VSZXdyaXRlc1Jlc3BvbnNlXSByZXdyaXRlcyBzaG91bGQgYmUgYW4gYXJyYXk6JywgZGF0YS5yZXdyaXRlcyk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKiBWYWxpZGF0ZSBQT1NUIC9hcGkvbWVzc2FnZSBhbmQgUE9TVCAvYXBpL2FjdGlvbiByZXNwb25zZXMuICovXG5mdW5jdGlvbiBwYXJzZU1lc3NhZ2VSZXNwb25zZShkYXRhKSB7XG4gIGlmICghZGF0YS5vayAmJiAhZGF0YS5lcnJvcikge1xuICAgIGxvZy53YXJuKCdbcGFyc2VNZXNzYWdlUmVzcG9uc2VdIFJlc3BvbnNlIGhhcyBuZWl0aGVyIG9rIG5vciBlcnJvcjonLCBkYXRhKTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEVTIG1vZHVsZSBleHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZXhwb3J0IHtcbiAgcGFyc2VTdGF0dXNSZXNwb25zZSxcbiAgcGFyc2VTZXNzaW9uTGlzdFJlc3BvbnNlLFxuICBwYXJzZVJld3JpdGVzUmVzcG9uc2UsXG4gIHBhcnNlTWVzc2FnZVJlc3BvbnNlLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3JlY29tbWVuZGF0aW9uLWhlbHBlcnMuanNcbiAqIFB1cmUgaGVscGVyIGZ1bmN0aW9ucyBmb3IgbG9va2luZyB1cCBMTE0gcmVjb21tZW5kYXRpb24gZGF0YSBmcm9tIHRoZVxuICogL2FwaS9zdGF0dXMgcmVzcG9uc2Ugb2JqZWN0LiAgU3VwcG9ydHMgZXhwZXJpZW5jZSwgc2tpbGwsIGFuZCBhY2hpZXZlbWVudFxuICogcmVjb21tZW5kYXRpb25zIHdpdGggYmFja3dhcmRzLWNvbXBhdGlibGUgZmxhdC1saXN0IGZhbGxiYWNrcyBmb3Igb2xkXG4gKiBzZXNzaW9uIGRhdGEuXG4gKlxuICogREVQRU5ERU5DSUVTOiBub25lXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdyZWNvbW1lbmRhdGlvbi1oZWxwZXJzJyk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSW50ZXJuYWwgbG9va3VwIGhlbHBlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTG9vayB1cCBhIHNpbmdsZSBleHBlcmllbmNlIGVudHJ5IGluIGV4cGVyaWVuY2VfcmVjb21tZW5kYXRpb25zLiAqL1xuZnVuY3Rpb24gX2ZpbmRFeHBSZWMoZXhwSWQsIGRhdGEpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEuZXhwZXJpZW5jZV9yZWNvbW1lbmRhdGlvbnMpKSB7XG4gICAgbG9nLndhcm4oJ1tyZWNvbW1lbmRhdGlvbl0gZXhwZXJpZW5jZV9yZWNvbW1lbmRhdGlvbnMgbWlzc2luZzsgdXNpbmcgZmxhdC1saXN0IGZhbGxiYWNrIGZvcicsIGV4cElkKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZGF0YS5leHBlcmllbmNlX3JlY29tbWVuZGF0aW9ucy5maW5kKHIgPT4gci5pZCA9PT0gZXhwSWQgfHwgci5leHBlcmllbmNlX2lkID09PSBleHBJZCkgfHwgbnVsbDtcbn1cblxuLyoqIExvb2sgdXAgYSBzaW5nbGUgc2tpbGwgZW50cnkgaW4gc2tpbGxfcmVjb21tZW5kYXRpb25zLiAqL1xuZnVuY3Rpb24gX2ZpbmRTa2lsbFJlYyhza2lsbCwgZGF0YSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YS5za2lsbF9yZWNvbW1lbmRhdGlvbnMpKSB7XG4gICAgbG9nLndhcm4oJ1tyZWNvbW1lbmRhdGlvbl0gc2tpbGxfcmVjb21tZW5kYXRpb25zIG1pc3Npbmc7IHVzaW5nIGZsYXQtbGlzdCBmYWxsYmFjayBmb3InLCBza2lsbCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGRhdGEuc2tpbGxfcmVjb21tZW5kYXRpb25zLmZpbmQociA9PiByLnNraWxsID09PSBza2lsbCB8fCByLm5hbWUgPT09IHNraWxsKSB8fCBudWxsO1xufVxuXG4vKiogUGFyc2UgYSByYXcgY29uZmlkZW5jZSBzdHJpbmcgdG8gYSB7bGV2ZWwsIHRleHR9IG9iamVjdCwgb3IgbnVsbCBpZiB1bnJlY29nbmlzZWQuICovXG5mdW5jdGlvbiBfcGFyc2VDb25maWRlbmNlKGNvbmYpIHtcbiAgY29uc3QgYyA9IChjb25mIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoYy5pbmNsdWRlcygndmVyeSBoaWdoJykpIHJldHVybiB7IGxldmVsOiAndmVyeS1oaWdoJywgdGV4dDogJ1ZlcnkgSGlnaCBDb25maWRlbmNlJyB9O1xuICBpZiAoYy5pbmNsdWRlcygndmVyeSBsb3cnKSkgIHJldHVybiB7IGxldmVsOiAndmVyeS1sb3cnLCAgdGV4dDogJ1ZlcnkgTG93IENvbmZpZGVuY2UnICB9O1xuICBpZiAoYy5pbmNsdWRlcygnaGlnaCcpKSAgICAgIHJldHVybiB7IGxldmVsOiAnaGlnaCcsICAgICAgdGV4dDogJ0hpZ2ggQ29uZmlkZW5jZScgICAgICB9O1xuICBpZiAoYy5pbmNsdWRlcygnbWVkaXVtJykpICAgIHJldHVybiB7IGxldmVsOiAnbWVkaXVtJywgICAgdGV4dDogJ01lZGl1bSBDb25maWRlbmNlJyAgICB9O1xuICBpZiAoYy5pbmNsdWRlcygnbG93JykpICAgICAgIHJldHVybiB7IGxldmVsOiAnbG93JywgICAgICAgdGV4dDogJ0xvdyBDb25maWRlbmNlJyAgICAgICB9O1xuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeHBlcmllbmNlIHJlY29tbWVuZGF0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGdldEV4cGVyaWVuY2VSZWNvbW1lbmRhdGlvbihleHBJZCwgZGF0YSkge1xuICBjb25zdCByZWMgPSBfZmluZEV4cFJlYyhleHBJZCwgZGF0YSk7XG4gIGlmIChyZWMgJiYgcmVjLnJlY29tbWVuZGF0aW9uKSByZXR1cm4gcmVjLnJlY29tbWVuZGF0aW9uO1xuICAvLyBCYWNrd2FyZHMtY29tcGF0IGZsYXQtbGlzdCBmYWxsYmFja1xuICBpZiAoZGF0YS5vbWl0dGVkX2V4cGVyaWVuY2VzICAgICAmJiBkYXRhLm9taXR0ZWRfZXhwZXJpZW5jZXMuaW5jbHVkZXMoZXhwSWQpKSAgICAgcmV0dXJuICdPbWl0JztcbiAgaWYgKGRhdGEucmVjb21tZW5kZWRfZXhwZXJpZW5jZXMgJiYgZGF0YS5yZWNvbW1lbmRlZF9leHBlcmllbmNlcy5pbmNsdWRlcyhleHBJZCkpIHJldHVybiAnRW1waGFzaXplJztcbiAgcmV0dXJuICdJbmNsdWRlJztcbn1cblxuZnVuY3Rpb24gZ2V0Q29uZmlkZW5jZUxldmVsKGV4cElkLCBkYXRhKSB7XG4gIGNvbnN0IHJlYyA9IF9maW5kRXhwUmVjKGV4cElkLCBkYXRhKTtcbiAgcmV0dXJuIChyZWMgJiYgX3BhcnNlQ29uZmlkZW5jZShyZWMuY29uZmlkZW5jZSkpIHx8IHsgbGV2ZWw6ICdtZWRpdW0nLCB0ZXh0OiAnTWVkaXVtIENvbmZpZGVuY2UnIH07XG59XG5cbmZ1bmN0aW9uIGdldEV4cGVyaWVuY2VSZWFzb25pbmcoZXhwSWQsIGRhdGEpIHtcbiAgY29uc3QgcmVjID0gX2ZpbmRFeHBSZWMoZXhwSWQsIGRhdGEpO1xuICByZXR1cm4gKHJlYyAmJiByZWMucmVhc29uaW5nKSB8fCAnVGhpcyBleHBlcmllbmNlIHdhcyBzZWxlY3RlZCBiYXNlZCBvbiBpdHMgcmVsZXZhbmNlIHRvIHRoZSBwb3NpdGlvbiByZXF1aXJlbWVudHMuJztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTa2lsbCByZWNvbW1lbmRhdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRTa2lsbFJlY29tbWVuZGF0aW9uKHNraWxsLCBkYXRhKSB7XG4gIGNvbnN0IHJlYyA9IF9maW5kU2tpbGxSZWMoc2tpbGwsIGRhdGEpO1xuICBpZiAocmVjICYmIHJlYy5yZWNvbW1lbmRhdGlvbikgcmV0dXJuIHJlYy5yZWNvbW1lbmRhdGlvbjtcbiAgaWYgKGRhdGEucmVjb21tZW5kZWRfc2tpbGxzICYmIGRhdGEucmVjb21tZW5kZWRfc2tpbGxzLmluY2x1ZGVzKHNraWxsKSkgcmV0dXJuICdJbmNsdWRlJztcbiAgcmV0dXJuICdPbWl0Jztcbn1cblxuZnVuY3Rpb24gZ2V0U2tpbGxDb25maWRlbmNlKHNraWxsLCBkYXRhKSB7XG4gIGNvbnN0IHJlYyA9IF9maW5kU2tpbGxSZWMoc2tpbGwsIGRhdGEpO1xuICBpZiAocmVjKSB7XG4gICAgY29uc3QgcGFyc2VkID0gX3BhcnNlQ29uZmlkZW5jZShyZWMuY29uZmlkZW5jZSk7XG4gICAgaWYgKHBhcnNlZCkgcmV0dXJuIHBhcnNlZDtcbiAgfVxuICBpZiAoZGF0YS5yZWNvbW1lbmRlZF9za2lsbHMgJiYgZGF0YS5yZWNvbW1lbmRlZF9za2lsbHMuaW5jbHVkZXMoc2tpbGwpKSB7XG4gICAgcmV0dXJuIHsgbGV2ZWw6ICdtZWRpdW0nLCB0ZXh0OiAnTWVkaXVtIENvbmZpZGVuY2UnIH07XG4gIH1cbiAgcmV0dXJuIHsgbGV2ZWw6ICdsb3cnLCB0ZXh0OiAnTG93IENvbmZpZGVuY2UnIH07XG59XG5cbmZ1bmN0aW9uIGdldFNraWxsUmVhc29uaW5nKHNraWxsLCBkYXRhKSB7XG4gIGNvbnN0IHJlYyA9IF9maW5kU2tpbGxSZWMoc2tpbGwsIGRhdGEpO1xuICBpZiAocmVjICYmIHJlYy5yZWFzb25pbmcpIHJldHVybiByZWMucmVhc29uaW5nO1xuICBpZiAoZGF0YS5yZWNvbW1lbmRlZF9za2lsbHMgJiYgZGF0YS5yZWNvbW1lbmRlZF9za2lsbHMuaW5jbHVkZXMoc2tpbGwpKSB7XG4gICAgcmV0dXJuICdUaGlzIHNraWxsIHdhcyBpZGVudGlmaWVkIGFzIHJlbGV2YW50IHRvIHRoZSBwb3NpdGlvbiByZXF1aXJlbWVudHMuJztcbiAgfVxuICByZXR1cm4gJ1RoaXMgc2tpbGwgd2FzIG5vdCBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGluIHRoZSBqb2IgcmVxdWlyZW1lbnRzLic7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQWNoaWV2ZW1lbnQgcmVjb21tZW5kYXRpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZ2V0QWNoaWV2ZW1lbnRSZWNvbW1lbmRhdGlvbihhY2hJZCwgZGF0YSkge1xuICBpZiAoZGF0YS5hY2hpZXZlbWVudF9yZWNvbW1lbmRhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShkYXRhLmFjaGlldmVtZW50X3JlY29tbWVuZGF0aW9ucykpIHtcbiAgICBjb25zdCByZWMgPSBkYXRhLmFjaGlldmVtZW50X3JlY29tbWVuZGF0aW9ucy5maW5kKHIgPT4gci5pZCA9PT0gYWNoSWQpO1xuICAgIGlmIChyZWMgJiYgcmVjLnJlY29tbWVuZGF0aW9uKSByZXR1cm4gcmVjLnJlY29tbWVuZGF0aW9uO1xuICB9XG4gIGlmIChkYXRhLnJlY29tbWVuZGVkX2FjaGlldmVtZW50cyAmJiBkYXRhLnJlY29tbWVuZGVkX2FjaGlldmVtZW50cy5pbmNsdWRlcyhhY2hJZCkpIHtcbiAgICByZXR1cm4gJ0luY2x1ZGUnO1xuICB9XG4gIHJldHVybiAnRGUtZW1waGFzaXplJztcbn1cblxuZnVuY3Rpb24gZ2V0QWNoaWV2ZW1lbnRDb25maWRlbmNlKGFjaElkLCBkYXRhLCBhY2hJbXBvcnRhbmNlKSB7XG4gIGlmIChkYXRhLmFjaGlldmVtZW50X3JlY29tbWVuZGF0aW9ucyAmJiBBcnJheS5pc0FycmF5KGRhdGEuYWNoaWV2ZW1lbnRfcmVjb21tZW5kYXRpb25zKSkge1xuICAgIGNvbnN0IHJlYyA9IGRhdGEuYWNoaWV2ZW1lbnRfcmVjb21tZW5kYXRpb25zLmZpbmQociA9PiByLmlkID09PSBhY2hJZCk7XG4gICAgaWYgKHJlYyAmJiByZWMuY29uZmlkZW5jZSkge1xuICAgICAgY29uc3QgY29uZiA9IHJlYy5jb25maWRlbmNlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoY29uZi5pbmNsdWRlcygndmVyeSBoaWdoJykpIHJldHVybiB7IGxldmVsOiAndmVyeS1oaWdoJywgdGV4dDogJ1ZlcnkgSGlnaCcgfTtcbiAgICAgIGlmIChjb25mLmluY2x1ZGVzKCdoaWdoJykpICAgICAgcmV0dXJuIHsgbGV2ZWw6ICdoaWdoJywgICAgICB0ZXh0OiAnSGlnaCcgICAgICB9O1xuICAgICAgaWYgKGNvbmYuaW5jbHVkZXMoJ21lZGl1bScpKSAgICByZXR1cm4geyBsZXZlbDogJ21lZGl1bScsICAgIHRleHQ6ICdNZWRpdW0nICAgIH07XG4gICAgICBpZiAoY29uZi5pbmNsdWRlcygndmVyeSBsb3cnKSkgIHJldHVybiB7IGxldmVsOiAndmVyeS1sb3cnLCAgdGV4dDogJ1ZlcnkgTG93JyAgfTtcbiAgICAgIGlmIChjb25mLmluY2x1ZGVzKCdsb3cnKSkgICAgICAgcmV0dXJuIHsgbGV2ZWw6ICdsb3cnLCAgICAgICB0ZXh0OiAnTG93JyAgICAgICB9O1xuICAgIH1cbiAgfVxuICBjb25zdCBpbXAgPSBhY2hJbXBvcnRhbmNlIHx8IDU7XG4gIGlmIChpbXAgPj0gOSkgcmV0dXJuIHsgbGV2ZWw6ICd2ZXJ5LWhpZ2gnLCB0ZXh0OiAnVmVyeSBIaWdoJyB9O1xuICBpZiAoaW1wID49IDcpIHJldHVybiB7IGxldmVsOiAnaGlnaCcsICAgICAgdGV4dDogJ0hpZ2gnICAgICAgfTtcbiAgaWYgKGltcCA+PSA1KSByZXR1cm4geyBsZXZlbDogJ21lZGl1bScsICAgIHRleHQ6ICdNZWRpdW0nICAgIH07XG4gIGlmIChpbXAgPj0gMykgcmV0dXJuIHsgbGV2ZWw6ICdsb3cnLCAgICAgICB0ZXh0OiAnTG93JyAgICAgICB9O1xuICByZXR1cm4geyBsZXZlbDogJ3ZlcnktbG93JywgdGV4dDogJ1ZlcnkgTG93JyB9O1xufVxuXG5mdW5jdGlvbiBnZXRBY2hpZXZlbWVudFJlYXNvbmluZyhhY2hJZCwgZGF0YSwgYWNoKSB7XG4gIGlmIChkYXRhLmFjaGlldmVtZW50X3JlY29tbWVuZGF0aW9ucyAmJiBBcnJheS5pc0FycmF5KGRhdGEuYWNoaWV2ZW1lbnRfcmVjb21tZW5kYXRpb25zKSkge1xuICAgIGNvbnN0IHJlYyA9IGRhdGEuYWNoaWV2ZW1lbnRfcmVjb21tZW5kYXRpb25zLmZpbmQociA9PiByLmlkID09PSBhY2hJZCk7XG4gICAgaWYgKHJlYyAmJiByZWMucmVhc29uaW5nKSByZXR1cm4gcmVjLnJlYXNvbmluZztcbiAgfVxuICBjb25zdCByZWxldmFudEZvciA9IChhY2gucmVsZXZhbnRfZm9yIHx8IFtdKS5qb2luKCcsICcpO1xuICBpZiAoZGF0YS5yZWNvbW1lbmRlZF9hY2hpZXZlbWVudHMgJiYgZGF0YS5yZWNvbW1lbmRlZF9hY2hpZXZlbWVudHMuaW5jbHVkZXMoYWNoSWQpKSB7XG4gICAgcmV0dXJuIHJlbGV2YW50Rm9yXG4gICAgICA/IGBSZWNvbW1lbmRlZCBmb3IgdGhpcyByb2xlLiBSZWxldmFudCBmb3I6ICR7cmVsZXZhbnRGb3J9LmBcbiAgICAgIDogJ1JlY29tbWVuZGVkIGJ5IEFJIGFzIHJlbGV2YW50IHRvIHRoaXMgcm9sZS4nO1xuICB9XG4gIHJldHVybiByZWxldmFudEZvclxuICAgID8gYFJlbGV2YW50IGZvcjogJHtyZWxldmFudEZvcn0uIE5vdCBzcGVjaWZpY2FsbHkgaGlnaGxpZ2h0ZWQgZm9yIHRoaXMgcm9sZS5gXG4gICAgOiAnTm90IHNwZWNpZmljYWxseSBoaWdobGlnaHRlZCBmb3IgdGhpcyByb2xlIGJhc2VkIG9uIGpvYiByZXF1aXJlbWVudHMuJztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGYWxsYmFjayBxdWVzdGlvbiBnZW5lcmF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gYnVpbGRGYWxsYmFja1Bvc3RBbmFseXNpc1F1ZXN0aW9ucyhkYXRhKSB7XG4gIGNvbnN0IHF1ZXN0aW9ucyA9IFtdO1xuXG4gIGlmIChkYXRhLnJvbGVfbGV2ZWwpIHtcbiAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICBxdWVzdGlvbjogYFRoaXMgcm9sZSBhcHBlYXJzIHRvIGJlIGF0ICR7ZGF0YS5yb2xlX2xldmVsfSBsZXZlbC4gU2hvdWxkIEkgZW1waGFzaXplIHlvdXIgbW9zdCBzZW5pb3IgZXhwZXJpZW5jZXMgb3IgaW5jbHVkZSBhIGJyb2FkZXIgcmFuZ2UgdG8gc2hvdyBjYXJlZXIgcHJvZ3Jlc3Npb24/YCxcbiAgICAgIHR5cGU6ICdleHBlcmllbmNlX2xldmVsJyxcbiAgICAgIGNob2ljZXM6IFsnRW1waGFzaXplIG1vc3Qgc2VuaW9yJywgJ0Jyb2FkZXIgY2FyZWVyIHByb2dyZXNzaW9uJywgJ0xldCB5b3UgZGVjaWRlIGJhc2VkIG9uIGFuYWx5c2lzJ10sXG4gICAgfSk7XG4gIH1cblxuICBpZiAoZGF0YS5yZXF1aXJlZF9za2lsbHMgJiYgZGF0YS5yZXF1aXJlZF9za2lsbHMuc29tZShza2lsbCA9PlxuICAgICAgc2tpbGwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnbGVhZGVyc2hpcCcpIHx8XG4gICAgICBza2lsbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdtYW5hZ2VtZW50JykgfHxcbiAgICAgIHNraWxsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3RlYW0nKSkpIHtcbiAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICBxdWVzdGlvbjogJ1RoaXMgcm9sZSBoYXMgbGVhZGVyc2hpcCBjb21wb25lbnRzLiBXb3VsZCB5b3UgcHJlZmVyIG1lIHRvIGVtcGhhc2l6ZSB5b3VyIG1hbmFnZW1lbnQgZXhwZXJpZW5jZSBvciBmb2N1cyBtb3JlIG9uIHlvdXIgdGVjaG5pY2FsIGNvbnRyaWJ1dGlvbnM/JyxcbiAgICAgIHR5cGU6ICdsZWFkZXJzaGlwX2ZvY3VzJyxcbiAgICAgIGNob2ljZXM6IFsnRW1waGFzaXplIG1hbmFnZW1lbnQnLCAnRm9jdXMgb24gdGVjaG5pY2FsJywgJ0JhbGFuY2UgYm90aCBlcXVhbGx5J10sXG4gICAgfSk7XG4gIH1cblxuICBpZiAoZGF0YS5kb21haW4pIHtcbiAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICBxdWVzdGlvbjogYFRoZSByb2xlIGlzIGluICR7ZGF0YS5kb21haW59LiBEbyB5b3UgaGF2ZSBwYXJ0aWN1bGFyIHByb2plY3RzIG9yIGFjaGlldmVtZW50cyBpbiB0aGlzIGRvbWFpbiB0aGF0IHlvdSdkIGxpa2UgbWUgdG8gaGlnaGxpZ2h0P2AsXG4gICAgICB0eXBlOiAnZG9tYWluX2V4cGVydGlzZScsXG4gICAgICBjaG9pY2VzOiBbJ0hpZ2hsaWdodCBkb21haW4tc3BlY2lmaWMgYWNoaWV2ZW1lbnRzJywgJ1VzZSBhbGwgYXZhaWxhYmxlIGV4cGVyaWVuY2UnLCAnUHJpb3JpdGl6ZSBtb3N0IHJlY2VudCB3b3JrJ10sXG4gICAgfSk7XG4gIH1cblxuICBpZiAoZGF0YS5jb21wYW55KSB7XG4gICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgcXVlc3Rpb246IGBGb3IgJHtkYXRhLmNvbXBhbnl9LCB3b3VsZCB5b3UgbGlrZSBtZSB0byB0YWlsb3IgZW1waGFzaXMgdG93YXJkIHRoZWlyIGN1bHR1cmUgYW5kIHZhbHVlcz8gSWYgc28sIHdoYXQgc2hvdWxkIEkgcHJpb3JpdGl6ZT9gLFxuICAgICAgdHlwZTogJ2NvbXBhbnlfY3VsdHVyZScsXG4gICAgICBjaG9pY2VzOiBbJ1Jlc2VhcmNoLWRyaXZlbiAvIGFjYWRlbWljJywgJ0luZHVzdHJ5IC8gY29tbWVyY2lhbCBpbXBhY3QnLCAnSW5ub3ZhdGlvbiAvIHN0YXJ0dXAnLCAnVXNlIGN1bHR1cmFsIGluZGljYXRvcnMgZnJvbSBqb2IgZGVzY3JpcHRpb24nXSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBxdWVzdGlvbnM7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFUyBtb2R1bGUgZXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB7XG4gIGdldEV4cGVyaWVuY2VSZWNvbW1lbmRhdGlvbiwgZ2V0Q29uZmlkZW5jZUxldmVsLCBnZXRFeHBlcmllbmNlUmVhc29uaW5nLFxuICBnZXRTa2lsbFJlY29tbWVuZGF0aW9uLCBnZXRTa2lsbENvbmZpZGVuY2UsIGdldFNraWxsUmVhc29uaW5nLFxuICBnZXRBY2hpZXZlbWVudFJlY29tbWVuZGF0aW9uLCBnZXRBY2hpZXZlbWVudENvbmZpZGVuY2UsIGdldEFjaGlldmVtZW50UmVhc29uaW5nLFxuICBidWlsZEZhbGxiYWNrUG9zdEFuYWx5c2lzUXVlc3Rpb25zLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3VpLWhlbHBlcnMuanNcbiAqIExpZ2h0d2VpZ2h0IERPTSBoZWxwZXJzOiB0b2FzdHMsIGFsZXJ0L2NvbmZpcm0gbW9kYWxzLCBjaGF0IHRvZ2dsZSwgYW5kXG4gKiB3b3JrZmxvdy1zdGFnZSBhY3Rpb24tYnV0dG9uIG1hbmFnZW1lbnQuXG4gKlxuICogREVQRU5ERU5DSUVTOiB1aS1jb3JlLmpzIGV4cG9ydHMgKHRyYXBGb2N1cywgcmVzdG9yZUZvY3VzLCBzZXRJbml0aWFsRm9jdXMsXG4gKiAgICAgICAgICAgICAgIHB1c2hGb2N1c1N0YWNrKSBhdmFpbGFibGUgb24gZ2xvYmFsVGhpcyBhdCBydW50aW1lLlxuICovXG5cbmltcG9ydCB7IHN0YXRlTWFuYWdlciwgR0VORVJBVElPTl9TVEFURV9FVkVOVCB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQWxlcnQgbW9kYWwgKGluZm9ybWF0aW9uYWwgXHUyMDE0IHNpbmdsZSBPSyBidXR0b24pXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gX3NldE1vZGFsVGV4dChlbCwgbWVzc2FnZSkge1xuICBlbC50ZXh0Q29udGVudCA9ICcnO1xuICBjb25zdCBwYXJ0cyA9IFN0cmluZyhtZXNzYWdlIHx8ICcnKS5zcGxpdCgnXFxuJyk7XG4gIHBhcnRzLmZvckVhY2goKHBhcnQsIGkpID0+IHtcbiAgICBlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwYXJ0KSk7XG4gICAgaWYgKGkgPCBwYXJ0cy5sZW5ndGggLSAxKSBlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNob3dBbGVydE1vZGFsKHRpdGxlLCBtZXNzYWdlKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbGVydC1tb2RhbC10aXRsZScpLnRleHRDb250ZW50ID0gdGl0bGU7XG4gIF9zZXRNb2RhbFRleHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FsZXJ0LW1vZGFsLW1lc3NhZ2UnKSwgbWVzc2FnZSk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbGVydC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gIC8vIHB1c2hGb2N1c1N0YWNrIChHQVAtMTk3KSBwYWlycyB3aXRoIHRyYXBGb2N1cy9yZXN0b3JlRm9jdXMgYmVsb3cgXHUyMDE0IHVzaW5nXG4gIC8vIHRoZSBzaGFyZWQgZm9jdXMtc3RhY2sgbWVjaGFuaXNtLCBub3QgYSBsb2NhbCB2YXJpYWJsZSwgc28gY2xvc2VBbGVydE1vZGFsXG4gIC8vIGFsc28gcG9wcyB0aGUga2V5ZG93biBsaXN0ZW5lciB0cmFwRm9jdXMgcmVnaXN0ZXJzIG9uIGRvY3VtZW50LiBBIHByaW9yXG4gIC8vIHZlcnNpb24gdHJhY2tlZCBpdHMgb3duIGBfYWxlcnRQcmV2aW91c0ZvY3VzYCBhbmQgbmV2ZXIgY2FsbGVkXG4gIC8vIHJlc3RvcmVGb2N1cygpLCB3aGljaCBsZWZ0IHRoYXQgdHJhcEZvY3VzIGxpc3RlbmVyIHBlcm1hbmVudGx5IGF0dGFjaGVkXG4gIC8vIGFmdGVyIGV2ZXJ5IGFsZXJ0IG1vZGFsIGNsb3NlLlxuICBpZiAodHlwZW9mIHB1c2hGb2N1c1N0YWNrID09PSAnZnVuY3Rpb24nKSBwdXNoRm9jdXNTdGFjayhkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgaWYgKHR5cGVvZiBzZXRJbml0aWFsRm9jdXMgPT09ICdmdW5jdGlvbicpIHNldEluaXRpYWxGb2N1cygnYWxlcnQtbW9kYWwtb3ZlcmxheScpO1xuICBpZiAodHlwZW9mIHRyYXBGb2N1cyA9PT0gJ2Z1bmN0aW9uJykgdHJhcEZvY3VzKCdhbGVydC1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlQWxlcnRNb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FsZXJ0LW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBpZiAodHlwZW9mIHJlc3RvcmVGb2N1cyA9PT0gJ2Z1bmN0aW9uJykgcmVzdG9yZUZvY3VzKCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29uZmlybSBtb2RhbCAocmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlL2ZhbHNlKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmxldCBfY29uZmlybVJlc29sdmUgPSBudWxsO1xubGV0IF9jb25maXJtUHJldmlvdXNGb2N1cyA9IG51bGw7XG5cbmZ1bmN0aW9uIHNob3dDb25maXJtTW9kYWwodGl0bGUsIG1lc3NhZ2UsIG9rTGFiZWwgPSAnT0snKSB7XG4gIF9jb25maXJtUHJldmlvdXNGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtLW1vZGFsLXRpdGxlJykudGV4dENvbnRlbnQgPSB0aXRsZTtcbiAgX3NldE1vZGFsVGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uZmlybS1tb2RhbC1tZXNzYWdlJyksIG1lc3NhZ2UpO1xuICBjb25zdCBva0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtLW1vZGFsLW9rJyk7XG4gIGlmIChva0J0bikgb2tCdG4udGV4dENvbnRlbnQgPSBva0xhYmVsO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uZmlybS1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gIGlmIChva0J0bikgb2tCdG4uZm9jdXMoKTtcbiAgaWYgKHR5cGVvZiB0cmFwRm9jdXMgPT09ICdmdW5jdGlvbicpIHRyYXBGb2N1cygnY29uZmlybS1tb2RhbC1vdmVybGF5Jyk7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgX2NvbmZpcm1SZXNvbHZlID0gcmVzb2x2ZTsgfSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlQ29uZmlybU1vZGFsKHJlc3VsdCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uZmlybS1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaWYgKHR5cGVvZiByZXN0b3JlRm9jdXMgPT09ICdmdW5jdGlvbicpIHJlc3RvcmVGb2N1cygpO1xuICBpZiAoX2NvbmZpcm1SZXNvbHZlKSB7IF9jb25maXJtUmVzb2x2ZShyZXN1bHQpOyBfY29uZmlybVJlc29sdmUgPSBudWxsOyB9XG4gIGlmIChfY29uZmlybVByZXZpb3VzRm9jdXMgJiYgdHlwZW9mIF9jb25maXJtUHJldmlvdXNGb2N1cy5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIF9jb25maXJtUHJldmlvdXNGb2N1cy5mb2N1cygpO1xuICB9XG4gIF9jb25maXJtUHJldmlvdXNGb2N1cyA9IG51bGw7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVG9hc3Qgbm90aWZpY2F0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHNob3dUb2FzdChtZXNzYWdlLCB0eXBlID0gJ3N1Y2Nlc3MnLCBkdXJhdGlvbiA9IDMwMDApIHtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvYXN0LWNvbnRhaW5lcicpO1xuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICBjb25zdCB0b2FzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICB0b2FzdC5jbGFzc05hbWUgPSBgdG9hc3QgdG9hc3QtJHt0eXBlfWA7XG4gIHRvYXN0LnRleHRDb250ZW50ID0gbWVzc2FnZTtcbiAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRvYXN0KTtcbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsgdG9hc3QuY2xhc3NMaXN0LmFkZCgndG9hc3Qtc2hvdycpOyB9KTsgfSk7XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRvYXN0LmNsYXNzTGlzdC5yZW1vdmUoJ3RvYXN0LXNob3cnKTtcbiAgICB0b2FzdC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgKCkgPT4gdG9hc3QucmVtb3ZlKCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgfSwgZHVyYXRpb24pO1xufVxuXG5mdW5jdGlvbiByZWZyZXNoTGF5b3V0U3RhdHVzVUkoKSB7XG4gIGNvbnN0IGxheW91dENoaXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5b3V0LWZyZXNobmVzcy1jaGlwJyk7XG4gIGNvbnN0IGxheW91dEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXlvdXQtYnRuJyk7XG4gIGNvbnN0IGZyZXNobmVzcyA9IHN0YXRlTWFuYWdlci5nZXRMYXlvdXRGcmVzaG5lc3MoKTtcbiAgY29uc3QgZ2VuZXJhdGlvblN0YXRlID0gc3RhdGVNYW5hZ2VyLmdldEdlbmVyYXRpb25TdGF0ZSgpO1xuXG4gIGlmIChsYXlvdXRDaGlwKSB7XG4gICAgbGF5b3V0Q2hpcC5zdHlsZS5kaXNwbGF5ID0gZnJlc2huZXNzLnNob3dDaGlwID8gJycgOiAnbm9uZSc7XG4gICAgbGF5b3V0Q2hpcC5jbGFzc05hbWUgPSBgbGF5b3V0LWZyZXNobmVzcy1jaGlwICR7ZnJlc2huZXNzLnRvbmV9YDtcbiAgICBsYXlvdXRDaGlwLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGZyZXNobmVzcy5hcmlhTGFiZWwgfHwgJycpO1xuICAgIGxheW91dENoaXAuaW5uZXJIVE1MID0gZnJlc2huZXNzLnNob3dDaGlwXG4gICAgICA/IGA8c3BhbiBjbGFzcz1cImxheW91dC1mcmVzaG5lc3MtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiR7ZnJlc2huZXNzLmlzQ3JpdGljYWwgPyAnXHUyMUJCJyA6IChmcmVzaG5lc3MuaXNTdGFsZSA/ICchJyA6ICdcdTI3MTMnKX08L3NwYW4+PHNwYW4gY2xhc3M9XCJsYXlvdXQtZnJlc2huZXNzLWxhYmVsXCI+JHtmcmVzaG5lc3MubGFiZWx9PC9zcGFuPmBcbiAgICAgIDogJyc7XG4gIH1cblxuICBpZiAobGF5b3V0QnRuKSB7XG4gICAgaWYgKGZyZXNobmVzcy5pc1N0YWxlKSB7XG4gICAgICBsYXlvdXRCdG4udGV4dENvbnRlbnQgPSAnXHUyMUJCIFJlZ2VuZXJhdGUgUHJldmlldyc7XG4gICAgICBsYXlvdXRCdG4udGl0bGUgPSAnUHJldmlldyBpcyBvdXQgb2YgZGF0ZSBcdTIwMTQgcmVnZW5lcmF0ZSBiZWZvcmUgY29uZmlybWluZyBsYXlvdXQnO1xuICAgIH0gZWxzZSBpZiAoZ2VuZXJhdGlvblN0YXRlLmxheW91dENvbmZpcm1lZCB8fCBnZW5lcmF0aW9uU3RhdGUucGhhc2UgPT09ICdjb25maXJtZWQnKSB7XG4gICAgICBsYXlvdXRCdG4udGV4dENvbnRlbnQgPSAnXHUyQjA3XHVGRTBGIEdlbmVyYXRlIEZpbmFsIEZpbGVzJztcbiAgICAgIGxheW91dEJ0bi50aXRsZSA9ICdMYXlvdXQgY29uZmlybWVkIFx1MjAxNCBwcm9kdWNlIGZpbmFsIHN1Ym1pc3Npb24tcmVhZHkgRE9DWCBhbmQgUERGIGZpbGVzJztcbiAgICB9IGVsc2Uge1xuICAgICAgbGF5b3V0QnRuLnRleHRDb250ZW50ID0gJ1x1MjcwNSBDb25maXJtIExheW91dCc7XG4gICAgICBsYXlvdXRCdG4udGl0bGUgPSAnU3RlcCAyIG9mIDM6IENvbmZpcm0gdGhlIGxheW91dCBsb29rcyByaWdodCBiZWZvcmUgZ2VuZXJhdGluZyBmaW5hbCBmaWxlcyc7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUxheW91dEZyZXNobmVzc0NoaXBDbGljaygpIHtcbiAgaWYgKHR5cGVvZiB1cGRhdGVUYWJCYXJGb3JTdGFnZSA9PT0gJ2Z1bmN0aW9uJykgdXBkYXRlVGFiQmFyRm9yU3RhZ2UoJ2xheW91dCcpO1xuICBpZiAodHlwZW9mIHVwZGF0ZUFjdGlvbkJ1dHRvbnMgPT09ICdmdW5jdGlvbicpIHVwZGF0ZUFjdGlvbkJ1dHRvbnMoJ2xheW91dCcpO1xuICBpZiAodHlwZW9mIHN3aXRjaFRhYiA9PT0gJ2Z1bmN0aW9uJykgc3dpdGNoVGFiKCdsYXlvdXQnKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBXb3JrZmxvdy1zdGFnZSBwcmltYXJ5IGFjdGlvbiBidXR0b25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEFsbCBzdGFnZS1zcGVjaWZpYyBwcmltYXJ5IGFjdGlvbiBidXR0b24gSURzIChleGNsdWRlcyByZXNldCB3aGljaCBpcyBhbHdheXMgdmlzaWJsZSkuICovXG5jb25zdCBfU1RBR0VfQlVUVE9OUyA9IFtcbiAgJ2FuYWx5emUtYnRuJywgJ3JlY29tbWVuZC1idG4nLCAnZ2VuZXJhdGUtYnRuJyxcbiAgJ3Jld3JpdGUtYnRuJywgJ3NwZWxsLWJ0bicsICdnZW5lcmF0ZS1wcm9jZWVkLWJ0bicsXG4gICdsYXlvdXQtYnRuJywgJ2ZpbmFsLWdlbmVyYXRlLXByb2NlZWQtYnRuJywgJ2ZpbmFsaXNlLWFjdGlvbi1idG4nLFxuXTtcblxuLyoqIE1hcHMgZWFjaCB3b3JrZmxvdyBzdGFnZSB0byBpdHMgb25lIHByaW1hcnkgYWN0aW9uIGJ1dHRvbi4gKi9cbmNvbnN0IF9TVEFHRV9CVVRUT05fTUFQID0ge1xuICBqb2I6ICAgICAgICAgICAgJ2FuYWx5emUtYnRuJyxcbiAgYW5hbHlzaXM6ICAgICAgICdyZWNvbW1lbmQtYnRuJyxcbiAgY3VzdG9taXphdGlvbnM6ICdnZW5lcmF0ZS1idG4nLFxuICByZXdyaXRlOiAgICAgICAgJ3Jld3JpdGUtYnRuJyxcbiAgc3BlbGw6ICAgICAgICAgICdzcGVsbC1idG4nLFxuICBnZW5lcmF0ZTogICAgICAgJ2dlbmVyYXRlLXByb2NlZWQtYnRuJyxcbiAgbGF5b3V0OiAgICAgICAgICdsYXlvdXQtYnRuJyxcbiAgZmluYWxfZ2VuZXJhdGU6ICdmaW5hbC1nZW5lcmF0ZS1wcm9jZWVkLWJ0bicsXG4gIGZpbmFsaXNlOiAgICAgICAnZmluYWxpc2UtYWN0aW9uLWJ0bicsXG59O1xuXG4vKipcbiAqIFNob3cgb25seSB0aGUgcHJpbWFyeSBhY3Rpb24gYnV0dG9uIGZvciB0aGUgZ2l2ZW4gd29ya2Zsb3cgc3RhZ2UuXG4gKiBSZXNldCBpcyBhbHdheXMgdmlzaWJsZS4gIEFsbCBvdGhlciBzdGFnZSBidXR0b25zIGFyZSBoaWRkZW4uXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUFjdGlvbkJ1dHRvbnMoc3RhZ2UpIHtcbiAgY29uc3QgYWN0aXZlSWQgPSBfU1RBR0VfQlVUVE9OX01BUFtzdGFnZV0gfHwgbnVsbDtcbiAgX1NUQUdFX0JVVFRPTlMuZm9yRWFjaChpZCA9PiB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGVsKSBlbC5zdHlsZS5kaXNwbGF5ID0gKGlkID09PSBhY3RpdmVJZCkgPyAnJyA6ICdub25lJztcbiAgfSk7XG4gIHJlZnJlc2hMYXlvdXRTdGF0dXNVSSgpO1xufVxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoR0VORVJBVElPTl9TVEFURV9FVkVOVCwgcmVmcmVzaExheW91dFN0YXR1c1VJKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEVTIG1vZHVsZSBleHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZXhwb3J0IHtcbiAgc2hvd0FsZXJ0TW9kYWwsIGNsb3NlQWxlcnRNb2RhbCxcbiAgc2hvd0NvbmZpcm1Nb2RhbCwgY2xvc2VDb25maXJtTW9kYWwsXG4gIHNob3dUb2FzdCxcbiAgcmVmcmVzaExheW91dFN0YXR1c1VJLFxuICBoYW5kbGVMYXlvdXRGcmVzaG5lc3NDaGlwQ2xpY2ssXG4gIHVwZGF0ZUFjdGlvbkJ1dHRvbnMsXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiBTaGFyZWQgcHJvcG9zYWwtcmV2aWV3IHJvdyByZW5kZXJlciwgZXh0cmFjdGVkIGZyb20gd2ViL2hhcnZlc3QuanMgc28gdGhlXG4gKiBHQVAtMDEgXCJVcGRhdGUgdmlhIEFJXCIgcGFuZWwgKHdlYi9tYXN0ZXItZGF0YS1haS11cGRhdGUuanMpIGRvZXNuJ3RcbiAqIGR1cGxpY2F0ZSBvciBmb3JrIHRoZSBzYW1lIGJlZm9yZS9hZnRlciBkaWZmLXJvdyBVSSBhIHRoaXJkIHRpbWUuXG4gKlxuICogUm93IG1hcmt1cCB1c2VzIGBkYXRhLXRvZ2dsZS1yZWFzb25pbmc9XCJJRFwiYCBhdHRyaWJ1dGVzIGluc3RlYWQgb2YgaW5saW5lXG4gKiBgb25jbGljaz1cIi4uLlwiYCBoYW5kbGVycyBcdTIwMTQgdGhlIGNhbGxlciBhdHRhY2hlcyBPTkUgZGVsZWdhdGVkIGNsaWNrXG4gKiBsaXN0ZW5lciAoYXR0YWNoUHJvcG9zYWxSb3dMaXN0ZW5lcnMpIHJhdGhlciB0aGFuIGVhY2ggcm93IHdpcmluZyBpdHMgb3duXG4gKiBpbmxpbmUgaGFuZGxlci4gVGhpcyBtYXR0ZXJzIGJlY2F1c2UgaGFydmVzdC5qcydzIG9yaWdpbmFsIGlubGluZS1vbmNsaWNrXG4gKiB2ZXJzaW9uIGNhbGxlZCBoYXJ2ZXN0LmpzLXNwZWNpZmljIGdsb2JhbCBmdW5jdGlvbnMgZGlyZWN0bHk7IGEgcm93XG4gKiByZW5kZXJlZCBieSBhIGRpZmZlcmVudCBtb2R1bGUgKG1hc3Rlci1kYXRhLWFpLXVwZGF0ZS5qcykgbXVzdCBub3RcbiAqIHNpbGVudGx5IHJlZmVyZW5jZSBmdW5jdGlvbnMgdGhhdCBkb24ndCBleGlzdCB0aGVyZS5cbiAqXG4gKiBgaWRQcmVmaXhgIGtlZXBzIGVhY2ggY2FsbGVyJ3MgZXhpc3RpbmcgRE9NLWlkIGNvbnZlbnRpb24gaW50YWN0IChlLmcuXG4gKiBoYXJ2ZXN0LmpzJ3MgYGhhcnZlc3Qtcm93LSpgL2BoYXJ2ZXN0LWNoay0qYCwgcmVmZXJlbmNlZCBlbHNld2hlcmUgaW4gdGhhdFxuICogZmlsZSwgbm90YWJseSBhcHBseUhhcnZlc3RTZWxlY3Rpb25zKSByYXRoZXIgdGhhbiBmb3JjaW5nIGEgcmVuYW1lLlxuICpcbiAqIFB1YmxpYyBleHBvcnRzOlxuICogICBlc2Moc3RyKVxuICogICByZW5kZXJQcm9wb3NhbFJvdyhpdGVtLCBvcHRzKVxuICogICBhdHRhY2hQcm9wb3NhbFJvd0xpc3RlbmVycyhjb250YWluZXJFbCwgaWRQcmVmaXgsIGhhbmRsZXJzKVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlc2Moc3RyKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyID8/ICcnKVxuICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufVxuXG4vKipcbiAqIFJlbmRlciBvbmUgcHJvcG9zYWwtcmV2aWV3IHJvdyAoY2hlY2tib3ggKyBiZWZvcmUvYWZ0ZXIgKyBvcHRpb25hbFxuICogY29sbGFwc2libGUgZGV0YWlsICsgb3B0aW9uYWwgYmFkZ2VzL2ZsYWcgYmFubmVyKS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gaXRlbVxuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW0uaWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtLnR5cGVMYWJlbCAgICAgLSBzbWFsbCBjYXBzIGxhYmVsIGFib3ZlIHRoZSByb3cgKGUuZy4gc2VjdGlvbiBuYW1lKVxuICogQHBhcmFtIHtzdHJpbmd9IFtpdGVtLnNvdXJjZUJhZGdlSHRtbF1cbiAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtLmxhYmVsICAgICAgICAgLSBzZWNvbmRhcnkgc3VtbWFyeSBsaW5lXG4gKiBAcGFyYW0ge3N0cmluZ30gW2l0ZW0ub3JpZ2luYWxdICAgIC0gXCJCZWZvcmVcIiBibG9jayB0ZXh0IChvbWl0IGZvciBhZGQtb25seSBwcm9wb3NhbHMpXG4gKiBAcGFyYW0ge3N0cmluZ30gW2l0ZW0ucHJvcG9zZWRdICAgIC0gXCJBZnRlclwiIGJsb2NrIHRleHQgKGFscmVhZHkgZGlzcGxheS1yZWFkeSwgbm90IGEgcmF3IG9iamVjdClcbiAqIEBwYXJhbSB7c3RyaW5nfSBbaXRlbS5kZXRhaWxUZXh0XSAgLSBjb2xsYXBzaWJsZSBkZXRhaWwgKGhhcnZlc3Q6IHJlYXNvbmluZzsgR0FQLTAxOiByYXRpb25hbGUpXG4gKiBAcGFyYW0ge3N0cmluZ30gW2l0ZW0uYmFkZ2VzSHRtbF0gIC0gcHJlLXJlbmRlcmVkIHJpZ2h0LXNpZGUgYmFkZ2UgSFRNTCAoY2FsbGVyLXNwZWNpZmljKVxuICogQHBhcmFtIHtzdHJpbmd9IFtpdGVtLmZsYWdIdG1sXSAgICAtIHByZS1yZW5kZXJlZCBhZHZpc29yeS93YXJuaW5nIGJhbm5lciAoZS5nLiBwb3NzaWJsZS1kdXBsaWNhdGUsIHN0YWxlKVxuICogQHBhcmFtIHtib29sZWFufSBbaXRlbS5jaGVja2VkXVxuICogQHBhcmFtIHtvYmplY3R9IG9wdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmlkUHJlZml4ICAgICAgICAgIC0gc2hhcmVkIHByZWZpeCBmb3Igcm93L3JlYXNvbi9jaGVja2JveCBpZHMsIGUuZy4gJ2hhcnZlc3QnIG9yICdtZHUnXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY2hlY2tib3hEYXRhQXR0cl0gLSBrZWJhYi1jYXNlIGRhdGEtYXR0cmlidXRlIHN1ZmZpeCwgZS5nLiAnaGFydmVzdC1pZCcgb3IgJ21kdS1pZCdcbiAqICAgKE5PVCBjYW1lbENhc2UgXHUyMDE0IHRoaXMgaXMgaW50ZXJwb2xhdGVkIHZlcmJhdGltIGludG8gYGRhdGEtJHtjaGVja2JveERhdGFBdHRyfWAgaW4gdGhlIEhUTUwgc3RyaW5nO1xuICogICBhIGNhbWVsQ2FzZSB2YWx1ZSBsaWtlICdoYXJ2ZXN0SWQnIHByb2R1Y2VzIHRoZSBsaXRlcmFsIGF0dHJpYnV0ZSBgZGF0YS1oYXJ2ZXN0SWRgLCB3aGljaCB0aGUgSFRNTFxuICogICBwYXJzZXIgbG93ZXJjYXNlcyB0byBgZGF0YS1oYXJ2ZXN0aWRgIG9uIGluc2VydGlvbiwgc2lsZW50bHkgYnJlYWtpbmcgYC5kYXRhc2V0LmhhcnZlc3RJZGAgL1xuICogICBgW2RhdGEtaGFydmVzdC1pZF1gIGxvb2t1cHMgZWxzZXdoZXJlLiBUaGlzIGJpdCBtYXN0ZXItZGF0YS1haS11cGRhdGUuanMncyBvd24gZmlyc3QgZHJhZnQuKVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmFyaWFMYWJlbFN1ZmZpeF0gIC0gYXBwZW5kZWQgdG8gdGhlIGNoZWNrYm94J3MgYXJpYS1sYWJlbCBhZnRlciBgbGFiZWxgIChlLmcuIGR1cGxpY2F0ZS9mbGFnIHRleHQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJQcm9wb3NhbFJvdyhpdGVtLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4ID0gJ3Byb3Bvc2FsJyxcbiAgICBjaGVja2JveERhdGFBdHRyID0gJ3Byb3Bvc2FsLWlkJyxcbiAgICBhcmlhTGFiZWxTdWZmaXggPSAnJyxcbiAgfSA9IG9wdHM7XG5cbiAgY29uc3QgY2hlY2tlZCA9IGl0ZW0uY2hlY2tlZCA/ICcgY2hlY2tlZCcgOiAnJztcbiAgY29uc3Qgcm93SWQgPSBgJHtpZFByZWZpeH0tcm93LSR7ZXNjKGl0ZW0uaWQpfWA7XG4gIGNvbnN0IHJlYXNvbklkID0gYCR7aWRQcmVmaXh9LXJlYXNvbi0ke2VzYyhpdGVtLmlkKX1gO1xuICBjb25zdCBjaGVja2JveElkID0gYCR7aWRQcmVmaXh9LWNoay0ke2VzYyhpdGVtLmlkKX1gO1xuICBjb25zdCBhcmlhTGFiZWwgPSBlc2MoYCR7aXRlbS5sYWJlbCB8fCAnJ30ke2FyaWFMYWJlbFN1ZmZpeH1gKTtcblxuICBjb25zdCBoYXNEZXRhaWwgPSBCb29sZWFuKGl0ZW0uZGV0YWlsVGV4dCk7XG4gIGNvbnN0IGRldGFpbFRvZ2dsZSA9IGhhc0RldGFpbFxuICAgID8gYDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtdG9nZ2xlLXJlYXNvbmluZz1cIiR7ZXNjKGl0ZW0uaWQpfVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCIke3JlYXNvbklkfVwiIHN0eWxlPVwiZm9udC1zaXplOjAuNzVlbTtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Y29sb3I6dmFyKC0tY3YtZ3JheS01MDApO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6MCA0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO1wiIHRpdGxlPVwiVG9nZ2xlIGRldGFpbHNcIj5cdUQ4M0RcdURDQUM8L2J1dHRvbj5gXG4gICAgOiAnJztcbiAgY29uc3QgZGV0YWlsQmxvY2sgPSBoYXNEZXRhaWxcbiAgICA/IGA8ZGl2IGlkPVwiJHtyZWFzb25JZH1cIiBzdHlsZT1cImRpc3BsYXk6bm9uZTttYXJnaW4tdG9wOjZweDtwYWRkaW5nOjhweCAxMHB4O2JhY2tncm91bmQ6dmFyKC0tY3YtYmctbGlnaHQpO2JvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1jdi1zbGF0ZS00MDApO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtc2l6ZTowLjgyZW07Y29sb3I6dmFyKC0tY3YtdGV4dC1tdXRlZCk7bGluZS1oZWlnaHQ6MS41O1wiPiR7ZXNjKGl0ZW0uZGV0YWlsVGV4dCl9PC9kaXY+YFxuICAgIDogJyc7XG5cbiAgcmV0dXJuIGBcbiAgICA8dHIgaWQ9XCIke3Jvd0lkfVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tY3YtYmctc3VidGxlKTtcIj5cbiAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6MTBweCAxMnB4O3dpZHRoOjM2cHg7dmVydGljYWwtYWxpZ246dG9wO1wiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCIke2NoZWNrYm94SWR9XCIgZGF0YS0ke2NoZWNrYm94RGF0YUF0dHJ9PVwiJHtlc2MoaXRlbS5pZCl9XCIke2NoZWNrZWR9XG4gICAgICAgICAgYXJpYS1sYWJlbD1cIiR7YXJpYUxhYmVsfVwiXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2N1cnNvcjpwb2ludGVyO21hcmdpbi10b3A6MnB4O1wiPlxuICAgICAgPC90ZD5cbiAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6MTBweCAxMnB4O1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcDtcIj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDoxO21pbi13aWR0aDoyMDBweDtcIj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC43OGVtO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS1jdi10ZXh0LXNlY29uZGFyeSk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOjAuMDRlbTttYXJnaW4tYm90dG9tOjRweDtcIj5cbiAgICAgICAgICAgICAgJHtlc2MoaXRlbS50eXBlTGFiZWwgfHwgJycpfSR7aXRlbS5zb3VyY2VCYWRnZUh0bWwgfHwgJyd9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC44N2VtO2NvbG9yOnZhcigtLWN2LXNsYXRlLTQwMCk7bWFyZ2luLWJvdHRvbTo2cHg7XCI+JHtlc2MoaXRlbS5sYWJlbCB8fCAnJyl9PC9kaXY+XG4gICAgICAgICAgICAke2l0ZW0uZmxhZ0h0bWwgfHwgJyd9XG4gICAgICAgICAgICAke2l0ZW0ub3JpZ2luYWwgPyBgXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTo2cHg7XCI+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC43MmVtO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS1jdi1ncmF5LTUwMCk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOjAuMDNlbTttYXJnaW4tYm90dG9tOjJweDtcIj5CZWZvcmU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6dmFyKC0tY3YtZ3JheS01MDApO2JhY2tncm91bmQ6dmFyKC0tY3YtYmctbGlnaHQpO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6NnB4IDhweDtib3JkZXItbGVmdDozcHggc29saWQgdmFyKC0tY3YtZ3JheS0zMDApO2xpbmUtaGVpZ2h0OjEuNTtcIj4ke2VzYyhpdGVtLm9yaWdpbmFsKX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PmAgOiAnJ31cbiAgICAgICAgICAgICR7aXRlbS5wcm9wb3NlZCA/IGBcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjRweDtcIj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjcyZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWN2LWdyYXktNTAwKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6MC4wM2VtO21hcmdpbi1ib3R0b206MnB4O1wiPkFmdGVyPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOnZhcigtLWN2LXRleHQtcHJpbWFyeSk7YmFja2dyb3VuZDp2YXIoLS1jdi1zdWNjZXNzLWJnKTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjZweCA4cHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkIHZhcigtLWN2LXN1Y2Nlc3MtYm9yZGVyKTtsaW5lLWhlaWdodDoxLjU7XCI+JHtlc2MoaXRlbS5wcm9wb3NlZCl9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gIDogJyd9XG4gICAgICAgICAgICAke2RldGFpbEJsb2NrfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YWxpZ24taXRlbXM6ZmxleC1lbmQ7ZmxleC1zaHJpbms6MDtcIj5cbiAgICAgICAgICAgICR7aXRlbS5iYWRnZXNIdG1sIHx8ICcnfVxuICAgICAgICAgICAgJHtkZXRhaWxUb2dnbGV9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90ZD5cbiAgICA8L3RyPmA7XG59XG5cbi8qKlxuICogQXR0YWNoIG9uZSBkZWxlZ2F0ZWQgY2xpY2sgbGlzdGVuZXIgdG8gYGNvbnRhaW5lckVsYCBjb3ZlcmluZyBldmVyeVxuICogYFtkYXRhLXRvZ2dsZS1yZWFzb25pbmddYCBlbGVtZW50IHJlbmRlcmVkIGJ5IHJlbmRlclByb3Bvc2FsUm93IHdpdGggdGhlXG4gKiBtYXRjaGluZyBgaWRQcmVmaXhgLiBHdWFyZHMgYWdhaW5zdCBkb3VibGUtYXR0YWNoaW5nIGFjcm9zcyByZXBlYXRlZFxuICogY2FsbHMgKGUuZy4gYSB0YWIgYmVpbmcgcmUtcG9wdWxhdGVkKSB2aWEgYSBtYXJrZXIgb24gYGNvbnRhaW5lckVsYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaFByb3Bvc2FsUm93TGlzdGVuZXJzKGNvbnRhaW5lckVsLCBpZFByZWZpeCwgaGFuZGxlcnMgPSB7fSkge1xuICBpZiAoIWNvbnRhaW5lckVsKSByZXR1cm47XG4gIGNvbnN0IGd1YXJkS2V5ID0gYHByb3Bvc2FsTGlzdGVuZXJzQXR0YWNoZWRfJHtpZFByZWZpeH1gO1xuICBpZiAoY29udGFpbmVyRWwuZGF0YXNldFtndWFyZEtleV0pIHJldHVybjtcbiAgY29udGFpbmVyRWwuZGF0YXNldFtndWFyZEtleV0gPSAnMSc7XG5cbiAgY29udGFpbmVyRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB0b2dnbGUgPSBldmVudC50YXJnZXQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlLXJlYXNvbmluZ10nKTtcbiAgICBpZiAoIXRvZ2dsZSkgcmV0dXJuO1xuICAgIGNvbnN0IGlkID0gdG9nZ2xlLmRhdGFzZXQudG9nZ2xlUmVhc29uaW5nO1xuICAgIGNvbnN0IHJlYXNvbkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aWRQcmVmaXh9LXJlYXNvbi0ke2lkfWApO1xuICAgIGlmIChyZWFzb25FbCkge1xuICAgICAgY29uc3Qgbm93VmlzaWJsZSA9IHJlYXNvbkVsLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJztcbiAgICAgIHJlYXNvbkVsLnN0eWxlLmRpc3BsYXkgPSBub3dWaXNpYmxlID8gJ2Jsb2NrJyA6ICdub25lJztcbiAgICAgIHRvZ2dsZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBTdHJpbmcobm93VmlzaWJsZSkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGhhbmRsZXJzLm9uVG9nZ2xlUmVhc29uaW5nID09PSAnZnVuY3Rpb24nKSBoYW5kbGVycy5vblRvZ2dsZVJlYXNvbmluZyhpZCk7XG4gIH0pO1xufVxuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvbGxtLWxvZy5qc1xuICogRmV0Y2hlcyByYXcgTExNIGludGVyYWN0aW9uIGxvZyBlbnRyaWVzIGZyb20gL2FwaS9sbG0tbG9nIGFuZCBkaXNwbGF5c1xuICogdGhlbSBpbiB0aGUgQ29udmVyc2F0aW9uIHBhbmVsIGFzIGNvbGxhcHNpYmxlIHRyYW5zY3JpcHQgZW50cmllcy5cbiAqXG4gKiBFYWNoIExMTSBjYWxsIHNob3dzOlxuICogICAtIEhlYWRlcjogdGltZXN0YW1wIGFuZCBtZXNzYWdlLWNvdW50IHN1bW1hcnlcbiAqICAgLSBQcm9tcHQgc2VjdGlvbjogYWxsIG1lc3NhZ2VzIHNlbnQgKHJvbGUtcHJlZml4ZWQpLCBjb2xsYXBzaWJsZSB3aGVuIGxvbmdcbiAqICAgLSBSZXNwb25zZSBzZWN0aW9uOiByYXcgTExNIHJlc3BvbnNlLCBjb2xsYXBzaWJsZSB3aGVuIGxvbmdcbiAqXG4gKiBERVBFTkRFTkNJRVMgKGdsb2JhbFRoaXMpOlxuICogICAtIGFwcGVuZE1lc3NhZ2VIdG1sICAobWVzc2FnZS1xdWV1ZS5qcylcbiAqICAgLSBnZXRTZXNzaW9uSWRGcm9tVVJMIChhcGktY2xpZW50LmpzKVxuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCB7IGdldFNlc3Npb25JZEZyb21VUkwgfSBmcm9tICcuL2FwaS1jbGllbnQuanMnO1xuXG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ2xsbS1sb2cnKTtcblxuLy8gQ3Vyc29yIHRyYWNrcyB0aGUgbmV4dCBpbmRleCB0byBmZXRjaCBmcm9tIC9hcGkvbGxtLWxvZy5cbi8vIEluY3JlbWVudCBhZnRlciBlYWNoIHN1Y2Nlc3NmdWwgZmV0Y2ggYnkgYHRvdGFsYCByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIuXG5sZXQgX2xsbUxvZ0N1cnNvciA9IDA7XG5cbi8qKiBSZXNldCB0aGUgY3Vyc29yIHRvIDAgKGNhbGwgd2hlbiBhIG5ldyBzZXNzaW9uIGlzIGxvYWRlZCkuICovXG5mdW5jdGlvbiByZXNldExsbUxvZ0N1cnNvcigpIHtcbiAgX2xsbUxvZ0N1cnNvciA9IDA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29sbGFwc2libGUgSFRNTCBidWlsZGVyIChtaXJyb3JzIF9tYWtlQ29sbGFwc2libGVDb250ZW50IGluIG1lc3NhZ2UtcXVldWUuanMpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgX0xPR19DT0xMQVBTRV9MSU5FUyA9IDg7XG5jb25zdCBfTE9HX0NPTExBUFNFX0NIQVJTID0gNDgwO1xuXG4vKipcbiAqIFdyYXAgYHRleHRgIGluIGEgY29sbGFwc2libGUgPHByZT4gYmxvY2sgd2hlbiBpdCBleGNlZWRzIHRoZSB0aHJlc2hvbGQuXG4gKiBSZXR1cm5zIGFuIEhUTUwgc3RyaW5nIHJlYWR5IGZvciBpbnNlcnRpb24gdmlhIGlubmVySFRNTC5cbiAqL1xuZnVuY3Rpb24gX2NvbGxhcHNpYmxlUHJlKHRleHQpIHtcbiAgY29uc3QgZXNjYXBlZCA9IGVzY2FwZUh0bWwodGV4dCk7XG4gIGNvbnN0IGxpbmVzICAgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcblxuICBpZiAobGluZXMubGVuZ3RoIDw9IF9MT0dfQ09MTEFQU0VfTElORVMgJiYgdGV4dC5sZW5ndGggPD0gX0xPR19DT0xMQVBTRV9DSEFSUykge1xuICAgIHJldHVybiBgPHByZSBjbGFzcz1cImxsbS1sb2ctdGV4dFwiPiR7ZXNjYXBlZH08L3ByZT5gO1xuICB9XG5cbiAgY29uc3QgcHJldmlld1RleHQgPSBsaW5lcy5zbGljZSgwLCBfTE9HX0NPTExBUFNFX0xJTkVTKS5qb2luKCdcXG4nKTtcbiAgY29uc3Qgb3ZlcmZsb3cgICAgPSBsaW5lcy5sZW5ndGggLSBfTE9HX0NPTExBUFNFX0xJTkVTO1xuICBjb25zdCBpZCAgICAgICAgICA9IGBsbG1sb2ctJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDcpfWA7XG4gIGNvbnN0IGxhYmVsICAgICAgID0gYFNob3cgJHtvdmVyZmxvd30gbW9yZSBsaW5lJHtvdmVyZmxvdyA9PT0gMSA/ICcnIDogJ3MnfVx1MjAyNmA7XG5cbiAgcmV0dXJuIGBcbiAgICA8cHJlIGNsYXNzPVwibGxtLWxvZy10ZXh0IG1zZy1wcmV2aWV3XCIgaWQ9XCIke2lkfS1wcmV2aWV3XCI+JHtlc2NhcGVIdG1sKHByZXZpZXdUZXh0KX1cdTIwMjY8L3ByZT5cbiAgICA8cHJlIGNsYXNzPVwibGxtLWxvZy10ZXh0IG1zZy1mdWxsXCIgICAgaWQ9XCIke2lkfS1mdWxsXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj4ke2VzY2FwZWR9PC9wcmU+XG4gICAgPGJ1dHRvbiBjbGFzcz1cIm1zZy10b2dnbGUtYnRuXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICBvbmNsaWNrPVwiKGZ1bmN0aW9uKGJ0bil7XG4gICAgICAgIHZhciBwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcke2lkfS1wcmV2aWV3JyksXG4gICAgICAgICAgICBmPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcke2lkfS1mdWxsJyk7XG4gICAgICAgIGlmKGYuc3R5bGUuZGlzcGxheT09PSdub25lJyl7XG4gICAgICAgICAgcC5zdHlsZS5kaXNwbGF5PSdub25lJzsgZi5zdHlsZS5kaXNwbGF5PSdibG9jayc7IGJ0bi50ZXh0Q29udGVudD0nU2hvdyBsZXNzJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwLnN0eWxlLmRpc3BsYXk9Jyc7IGYuc3R5bGUuZGlzcGxheT0nbm9uZSc7IGJ0bi50ZXh0Q29udGVudD0nJHtsYWJlbH0nO1xuICAgICAgICB9XG4gICAgICB9KSh0aGlzKVwiPiR7bGFiZWx9PC9idXR0b24+YDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZW5kZXIgb25lIGludGVyYWN0aW9uIGludG8gdGhlIGNvbnZlcnNhdGlvbiBwYW5lbFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIF9yZW5kZXJJbnRlcmFjdGlvbihpeCkge1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udmVyc2F0aW9uJyk7XG4gIGlmICghY29udmVyc2F0aW9uKSByZXR1cm47XG5cbiAgY29uc3QgdHMgPSBpeC50aW1lc3RhbXBcbiAgICA/IG5ldyBEYXRlKGl4LnRpbWVzdGFtcCkudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLCB7IGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcsIHNlY29uZDogJzItZGlnaXQnIH0pXG4gICAgOiAnJztcblxuICBjb25zdCBtc2dzICAgICA9IEFycmF5LmlzQXJyYXkoaXgubWVzc2FnZXMpID8gaXgubWVzc2FnZXMgOiBbXTtcbiAgY29uc3QgbXNnQ291bnQgPSBtc2dzLmxlbmd0aDtcblxuICAvLyBCdWlsZCBmb3JtYXR0ZWQgcHJvbXB0IHRleHQ6IGVhY2ggbWVzc2FnZSBvbiBpdHMgb3duIGxhYmVsbGVkIGJsb2NrXG4gIGNvbnN0IHByb21wdFRleHQgPSBtc2dzXG4gICAgLm1hcChtID0+IGBbJHsobS5yb2xlIHx8ICd1bmtub3duJykudG9VcHBlckNhc2UoKX1dXFxuJHttLmNvbnRlbnQgfHwgJyd9YClcbiAgICAuam9pbignXFxuXFxuXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXFxuXFxuJyk7XG5cbiAgY29uc3QgcmVzcG9uc2VUZXh0ID0gdHlwZW9mIGl4LnJlc3BvbnNlID09PSAnc3RyaW5nJyA/IGl4LnJlc3BvbnNlIDogJyc7XG5cbiAgY29uc3QgaHRtbCA9IGBcbiAgICA8ZGl2IGNsYXNzPVwibGxtLWxvZy1oZWFkZXJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibGxtLWxvZy1pY29uXCI+XHVEODNFXHVERDE2PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsbG0tbG9nLWxhYmVsXCI+TExNIEludGVyYWN0aW9uPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsbG0tbG9nLW1ldGFcIj4ke21zZ0NvdW50fSBtZXNzYWdlJHttc2dDb3VudCA9PT0gMSA/ICcnIDogJ3MnfTwvc3Bhbj5cbiAgICAgICR7dHMgPyBgPHNwYW4gY2xhc3M9XCJsbG0tbG9nLXRzXCI+JHtlc2NhcGVIdG1sKHRzKX08L3NwYW4+YCA6ICcnfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsbG0tbG9nLXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsbG0tbG9nLXNlY3Rpb24tbGFiZWxcIj5Qcm9tcHQ8L2Rpdj5cbiAgICAgICR7X2NvbGxhcHNpYmxlUHJlKHByb21wdFRleHQpfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsbG0tbG9nLXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsbG0tbG9nLXNlY3Rpb24tbGFiZWxcIj5SZXNwb25zZTwvZGl2PlxuICAgICAgJHtfY29sbGFwc2libGVQcmUocmVzcG9uc2VUZXh0KX1cbiAgICA8L2Rpdj5gO1xuXG4gIGNvbnN0IG1lc3NhZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbWVzc2FnZS5jbGFzc05hbWUgPSAnbWVzc2FnZSBsbG0tcmF3JztcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBjb250ZW50LmNsYXNzTmFtZSA9ICdjb250ZW50JztcbiAgY29udGVudC5pbm5lckhUTUwgPSBodG1sO1xuICBtZXNzYWdlLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICBjb252ZXJzYXRpb24uYXBwZW5kQ2hpbGQobWVzc2FnZSk7XG4gIGNvbnZlcnNhdGlvbi5zY3JvbGxUb3AgPSBjb252ZXJzYXRpb24uc2Nyb2xsSGVpZ2h0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpYyBBUElcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEZldGNoIExMTSBpbnRlcmFjdGlvbiBsb2cgZW50cmllcyBhZGRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIGFuZCBkaXNwbGF5XG4gKiBlYWNoIG9uZSBpbiB0aGUgQ29udmVyc2F0aW9uIHBhbmVsLiAgU2FmZSB0byBjYWxsIGFmdGVyIGV2ZXJ5IGJhY2tlbmRcbiAqIG9wZXJhdGlvbiB0aGF0IG1heSB0cmlnZ2VyIExMTSBjYWxscy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hBbmREaXNwbGF5TGxtTG9nKCkge1xuICBjb25zdCBzZXNzaW9uSWQgPSBnZXRTZXNzaW9uSWRGcm9tVVJMKCk7XG4gIGlmICghc2Vzc2lvbklkKSByZXR1cm47XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgIGAvYXBpL2xsbS1sb2c/c2Vzc2lvbl9pZD0ke2VuY29kZVVSSUNvbXBvbmVudChzZXNzaW9uSWQpfSZzaW5jZT0ke19sbG1Mb2dDdXJzb3J9YCxcbiAgICApO1xuICAgIGlmICghcmVzLm9rKSB7XG4gICAgICBsb2cud2FybignbGxtLWxvZyBmZXRjaCBmYWlsZWQnLCByZXMuc3RhdHVzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGF0YSAgICAgICAgID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBjb25zdCBpbnRlcmFjdGlvbnMgPSBBcnJheS5pc0FycmF5KGRhdGEuaW50ZXJhY3Rpb25zKSA/IGRhdGEuaW50ZXJhY3Rpb25zIDogW107XG5cbiAgICBmb3IgKGNvbnN0IGl4IG9mIGludGVyYWN0aW9ucykge1xuICAgICAgX3JlbmRlckludGVyYWN0aW9uKGl4KTtcbiAgICB9XG5cbiAgICAvLyBBZHZhbmNlIGN1cnNvciB0byB0aGUgbmV3IHRvdGFsIHNvIHRoZSBuZXh0IGNhbGwgZmV0Y2hlcyBvbmx5IG5ldyBlbnRyaWVzLlxuICAgIGlmICh0eXBlb2YgZGF0YS50b3RhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgIF9sbG1Mb2dDdXJzb3IgPSBkYXRhLnRvdGFsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKCdmZXRjaEFuZERpc3BsYXlMbG1Mb2cgZXJyb3I6JywgZXJyKTtcbiAgfVxufVxuXG5leHBvcnQgeyBmZXRjaEFuZERpc3BsYXlMbG1Mb2csIHJlc2V0TGxtTG9nQ3Vyc29yIH07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9hdXRoLXByb3ZpZGVyLmpzXG4gKiBDb3BpbG90IC8gR2l0SHViIE9BdXRoIGF1dGggZmxvdywgYmFkZ2UgdXBkYXRlcywgYW5kIHByb3ZpZGVyIGxhYmVsIGZvcm1hdHRpbmcuXG4gKlxuICogREVQRU5ERU5DSUVTOlxuICogICAtIGNvbmZpcm1EaWFsb2cgZnJvbSB1aS1jb3JlLmpzIChvbiBnbG9iYWxUaGlzKVxuICogICAtIHNldEluaXRpYWxGb2N1cywgdHJhcEZvY3VzLCByZXN0b3JlRm9jdXMgZnJvbSB1aS1jb3JlLmpzIChvbiBnbG9iYWxUaGlzKVxuICogICAtIHVwZGF0ZUF1dGhCYWRnZSAoc2VsZi1yZWZlcmVuY2U7IGV4cG9ydGVkIHRvIGdsb2JhbFRoaXMpXG4gKiAgIC0gZ2V0UHJvdmlkZXJJbmZvIGZyb20gcHJvdmlkZXItaW5mby5qcyAoaW1wb3J0ZWQgZGlyZWN0bHkpXG4gKi9cblxuaW1wb3J0IHsgZ2V0UHJvdmlkZXJJbmZvIH0gZnJvbSAnLi9wcm92aWRlci1pbmZvLmpzJztcblxubGV0IF9hdXRoUG9sbFRpbWVyID0gbnVsbDtcblxuZnVuY3Rpb24gZm9ybWF0UHJvdmlkZXJMYWJlbChwcm92aWRlcikge1xuICBpZiAoIXByb3ZpZGVyIHx8IHR5cGVvZiBwcm92aWRlciAhPT0gJ3N0cmluZycpIHJldHVybiAnUHJvdmlkZXInO1xuICBjb25zdCBhbGlhc2VzID0ge1xuICAgIG9wZW5haTogJ09wZW5BSScsXG4gICAgJ2NvcGlsb3Qtb2F1dGgnOiAnQ29waWxvdCBPQXV0aCAoZGVwcmVjYXRlZCknLFxuICAgIGNvcGlsb3Q6ICdDb3BpbG90IChkZXByZWNhdGVkKScsXG4gICAgZ2l0aHViOiAnR2l0SHViIE1vZGVscyAoZGVwcmVjYXRlZCknLFxuICAgICdjb3BpbG90LXNkayc6ICdDb3BpbG90IFNESyAocmVjb21tZW5kZWQpJyxcbiAgfTtcbiAgaWYgKGFsaWFzZXNbcHJvdmlkZXJdKSByZXR1cm4gYWxpYXNlc1twcm92aWRlcl07XG4gIHJldHVybiBwcm92aWRlclxuICAgIC5zcGxpdCgvWy1fXFxzXSsvKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAubWFwKHBhcnQgPT4gcGFydC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHBhcnQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSlcbiAgICAuam9pbignICcpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVBdXRoQmFkZ2UoYXV0aFN0YXR1cywgcHJvdmlkZXIgPSBudWxsKSB7XG4gIGNvbnN0IGxlZ2FjeUJhZGdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvcGlsb3QtYXV0aC1iYWRnZScpO1xuICBjb25zdCBsZWdhY3lJY29uICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoLWJhZGdlLWljb24nKTtcbiAgY29uc3QgbGVnYWN5TGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aC1iYWRnZS1sYWJlbCcpO1xuXG4gIGNvbnN0IHBpbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtLXN0YXR1cy1waWxsJyk7XG4gIGNvbnN0IHBpbGxJY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbS1zdGF0dXMtaWNvbicpO1xuICBjb25zdCBwaWxsTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtLXN0YXR1cy1sYWJlbCcpO1xuXG4gIGNvbnN0IGFwcGx5U3RhdGUgPSAoa2luZCwgdGV4dCwgaWNvblRleHQpID0+IHtcbiAgICBpZiAobGVnYWN5QmFkZ2UgJiYgbGVnYWN5SWNvbiAmJiBsZWdhY3lMYWJlbCkge1xuICAgICAgbGVnYWN5QmFkZ2UuY2xhc3NMaXN0LnJlbW92ZSgnYXV0aGVudGljYXRlZCcsICd1bmF1dGhlbnRpY2F0ZWQnLCAncG9sbGluZycpO1xuICAgICAgbGVnYWN5QmFkZ2UuY2xhc3NMaXN0LmFkZChraW5kKTtcbiAgICAgIGlmIChraW5kID09PSAnY29ubmVjdGVkJyB8fCBraW5kID09PSAnY29uZmlndXJlZCcpIGxlZ2FjeUJhZGdlLmNsYXNzTGlzdC5hZGQoJ2F1dGhlbnRpY2F0ZWQnKTtcbiAgICAgIGlmIChraW5kID09PSAnY29ubmVjdGluZycpIGxlZ2FjeUJhZGdlLmNsYXNzTGlzdC5hZGQoJ3BvbGxpbmcnKTtcbiAgICAgIGlmIChraW5kID09PSAndW5jb25maWd1cmVkJyB8fCBraW5kID09PSAnYXV0aC1yZXF1aXJlZCcgfHwga2luZCA9PT0gJ3JhdGUtbGltaXRlZCcgfHwga2luZCA9PT0gJ3VuYXZhaWxhYmxlJyB8fCBraW5kID09PSAnZXJyb3InKSBsZWdhY3lCYWRnZS5jbGFzc0xpc3QuYWRkKCd1bmF1dGhlbnRpY2F0ZWQnKTtcbiAgICAgIGxlZ2FjeUljb24udGV4dENvbnRlbnQgPSBpY29uVGV4dDtcbiAgICAgIGxlZ2FjeUxhYmVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgICB9XG4gICAgaWYgKHBpbGwgJiYgcGlsbEljb24gJiYgcGlsbExhYmVsKSB7XG4gICAgICBwaWxsLmNsYXNzTGlzdC5yZW1vdmUoJ2F1dGhlbnRpY2F0ZWQnLCAndW5hdXRoZW50aWNhdGVkJywgJ3BvbGxpbmcnLCAndW5jb25maWd1cmVkJywgJ2NvbmZpZ3VyZWQnLCAnY29ubmVjdGluZycsICdjb25uZWN0ZWQnLCAnYXV0aC1yZXF1aXJlZCcsICdyYXRlLWxpbWl0ZWQnLCAndW5hdmFpbGFibGUnLCAnZXJyb3InKTtcbiAgICAgIHBpbGwuY2xhc3NMaXN0LmFkZChraW5kKTtcbiAgICAgIGlmIChraW5kID09PSAnY29ubmVjdGVkJyB8fCBraW5kID09PSAnY29uZmlndXJlZCcpIHBpbGwuY2xhc3NMaXN0LmFkZCgnYXV0aGVudGljYXRlZCcpO1xuICAgICAgaWYgKGtpbmQgPT09ICdjb25uZWN0aW5nJykgcGlsbC5jbGFzc0xpc3QuYWRkKCdwb2xsaW5nJyk7XG4gICAgICBpZiAoa2luZCA9PT0gJ3VuY29uZmlndXJlZCcgfHwga2luZCA9PT0gJ2F1dGgtcmVxdWlyZWQnIHx8IGtpbmQgPT09ICdyYXRlLWxpbWl0ZWQnIHx8IGtpbmQgPT09ICd1bmF2YWlsYWJsZScgfHwga2luZCA9PT0gJ2Vycm9yJykgcGlsbC5jbGFzc0xpc3QuYWRkKCd1bmF1dGhlbnRpY2F0ZWQnKTtcbiAgICAgIHBpbGxJY29uLnRleHRDb250ZW50ID0gaWNvblRleHQ7XG4gICAgICBwaWxsTGFiZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgICAgY29uc3QgdG9vbHRpcE1hcCA9IHtcbiAgICAgICAgdW5jb25maWd1cmVkOiAnTm8gcHJvdmlkZXIvbW9kZWwgaXMgY29uZmlndXJlZCB5ZXQuJyxcbiAgICAgICAgY29uZmlndXJlZDogJ1Byb3ZpZGVyL21vZGVsIGlzIGNvbmZpZ3VyZWQuIENvbm5lY3Rpdml0eSBub3QgeWV0IHZlcmlmaWVkLicsXG4gICAgICAgIGNvbm5lY3Rpbmc6ICdUZXN0aW5nIG9yIGNvbm5lY3RpbmcgdG8gdGhlIHNlbGVjdGVkIHByb3ZpZGVyLicsXG4gICAgICAgIGNvbm5lY3RlZDogJ1Byb3ZpZGVyIHJlc3BvbmRlZCBzdWNjZXNzZnVsbHkgdG8gYSBsaXZlIHJlcXVlc3QuJyxcbiAgICAgICAgJ2F1dGgtcmVxdWlyZWQnOiAnQXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQuIENoZWNrIEFQSSBrZXkgb3Igc2lnbiBpbi4nLFxuICAgICAgICAncmF0ZS1saW1pdGVkJzogJ1JhdGUgbGltaXQgcmVhY2hlZC4gV2FpdCBiZWZvcmUgcmV0cnlpbmcgcmVxdWVzdHMuJyxcbiAgICAgICAgdW5hdmFpbGFibGU6ICdQcm92aWRlciBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZSBvciB1bnJlYWNoYWJsZS4nLFxuICAgICAgICBlcnJvcjogJ0Nvbm5lY3Rpb24gZmFpbGVkLiBPcGVuIG1vZGVsIHNldHRpbmdzIGZvciBkZXRhaWxzLicsXG4gICAgICB9O1xuICAgICAgY29uc3QgdGlwID0gdG9vbHRpcE1hcFtraW5kXSB8fCAnJztcbiAgICAgIHBpbGwudGl0bGUgPSB0aXA7XG4gICAgICBwaWxsSWNvbi50aXRsZSA9IHRpcDtcbiAgICAgIHBpbGxMYWJlbC50aXRsZSA9IHRpcDtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYWN0aXZlUHJvdmlkZXIgPSBwcm92aWRlciB8fCB3aW5kb3cuY3VycmVudFByb3ZpZGVyIHx8IG51bGw7XG4gIGNvbnN0IGlzQ29waWxvdE9BdXRoID0gYWN0aXZlUHJvdmlkZXIgPT09ICdjb3BpbG90LW9hdXRoJztcblxuICAvLyBOb24tY29uZmlkZW50aWFsIGJhZGdlOiBzaG93IHVubGVzcyB0aGUgcHJvdmlkZXIgZXhwbGljaXRseSBtYXJrcyBjb25maWRlbnRpYWw6dHJ1ZS5cbiAgLy8gRGVmYXVsdCBpcyBub24tY29uZmlkZW50aWFsIChmYWlsLXNhZmUgXHUyMDE0IG1vc3QgcHJvdmlkZXJzIHJldGFpbi9yZXZpZXcgQVBJIGRhdGEpLlxuICBjb25zdCBuY0JhZGdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbS1ub24tY29uZmlkZW50aWFsLWJhZGdlJyk7XG4gIGlmIChuY0JhZGdlICYmIGFjdGl2ZVByb3ZpZGVyKSB7XG4gICAgY29uc3QgaW5mbyA9IGdldFByb3ZpZGVySW5mbyhhY3RpdmVQcm92aWRlcik7XG4gICAgbmNCYWRnZS5zdHlsZS5kaXNwbGF5ID0gKGluZm8gJiYgaW5mby5jb25maWRlbnRpYWwgIT09IHRydWUpID8gJycgOiAnbm9uZSc7XG4gIH1cblxuICBpZiAoYWN0aXZlUHJvdmlkZXIgJiYgIWlzQ29waWxvdE9BdXRoKSB7XG4gICAgYXBwbHlTdGF0ZSgnY29uZmlndXJlZCcsIGAke2Zvcm1hdFByb3ZpZGVyTGFiZWwoYWN0aXZlUHJvdmlkZXIpfSBjb25maWd1cmVkYCwgJ1x1MjVENCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhdXRoU3RhdHVzLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICBhcHBseVN0YXRlKCdjb25uZWN0ZWQnLCAnQ29waWxvdCByZWFkeScsICdcdTI3MTMnKTtcbiAgfSBlbHNlIGlmIChhdXRoU3RhdHVzLnBvbGxpbmcpIHtcbiAgICBhcHBseVN0YXRlKCdjb25uZWN0aW5nJywgJ1dhaXRpbmcgZm9yIGFwcHJvdmFsXHUyMDI2JywgJ1x1MjlENycpO1xuICB9IGVsc2Uge1xuICAgIGFwcGx5U3RhdGUoJ2F1dGgtcmVxdWlyZWQnLCAnTm90IGF1dGhlbnRpY2F0ZWQnLCAnXHVEODNEXHVERDExJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvc2VDb3BpbG90QXV0aE1vZGFsKCkge1xuICBpZiAoX2F1dGhQb2xsVGltZXIpIHsgY2xlYXJJbnRlcnZhbChfYXV0aFBvbGxUaW1lcik7IF9hdXRoUG9sbFRpbWVyID0gbnVsbDsgfVxuICBpZiAodHlwZW9mIGNsb3NlTW9kZWxNb2RhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNsb3NlTW9kZWxNb2RhbCgpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBsZWdhY3lPdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1dGgtbW9kYWwtb3ZlcmxheScpO1xuICBpZiAobGVnYWN5T3ZlcmxheSkgbGVnYWN5T3ZlcmxheS5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyk7XG4gIGlmICh0eXBlb2YgcmVzdG9yZUZvY3VzID09PSAnZnVuY3Rpb24nKSByZXN0b3JlRm9jdXMoKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEVTIG1vZHVsZSBleHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZXhwb3J0IHtcbiAgZm9ybWF0UHJvdmlkZXJMYWJlbCwgdXBkYXRlQXV0aEJhZGdlLFxuICBjbG9zZUNvcGlsb3RBdXRoTW9kYWwsXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiBhdHMtbW9kYWxzLmpzXG4gKiBBVFMgUmVwb3J0IGFuZCBKb2IgQW5hbHlzaXMgbW9kYWwgZGlhbG9ncyArIEFUUyBTY29yZSB0YWIgcmVuZGVyZXIuXG4gKlxuICogREVQRU5ERU5DSUVTOlxuICogLSBzdGF0ZS1tYW5hZ2VyLmpzIGZvciBwZXJzaXN0ZWQgQVRTIHNjb3JlICsgYW5hbHlzaXMgZGF0YVxuICogLSB1dGlscy5qcyBmb3IgSFRNTCBlc2NhcGluZ1xuICogLSBhdHMtcmVmaW5lbWVudC5qcyBmb3IgQVRTIGZldGNoL2JhZGdlIHVwZGF0ZXNcbiAqIC0gaW5kZXguaHRtbCBtb2RhbCBvdmVybGF5czogI2F0cy1yZXBvcnQtbW9kYWwtb3ZlcmxheSwgI2pvYi1hbmFseXNpcy1tb2RhbC1vdmVybGF5XG4gKi9cblxuaW1wb3J0IHsgcmVmcmVzaEF0c1Njb3JlLCB1cGRhdGVBdHNCYWRnZSB9IGZyb20gJy4vYXRzLXJlZmluZW1lbnQuanMnO1xuaW1wb3J0IHsgc3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi9zdGF0ZS1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCB7IHRyYXBGb2N1cywgcmVzdG9yZUZvY3VzLCBwdXNoRm9jdXNTdGFjayB9IGZyb20gJy4vdWktY29yZS5qcyc7XG5cbmxldCBfYXRzU3lub255bU1hcENhY2hlID0gbnVsbDtcblxuYXN5bmMgZnVuY3Rpb24gX2xvYWRBdHNTeW5vbnltTWFwKCkge1xuICBpZiAoX2F0c1N5bm9ueW1NYXBDYWNoZSkgcmV0dXJuIF9hdHNTeW5vbnltTWFwQ2FjaGU7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gc3RhdGVNYW5hZ2VyPy5nZXRTZXNzaW9uSWQ/LigpO1xuICAgIGNvbnN0IHVybCA9IHNlc3Npb25JZCA/IGAvYXBpL3N5bm9ueW0tbWFwP3Nlc3Npb25faWQ9JHtlbmNvZGVVUklDb21wb25lbnQoc2Vzc2lvbklkKX1gIDogJy9hcGkvc3lub255bS1tYXAnO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgaWYgKCFyZXMub2spIHJldHVybiAoX2F0c1N5bm9ueW1NYXBDYWNoZSA9IHt9KTtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGNvbnN0IGFsaWFzVG9DYW5vbiA9IHt9O1xuICAgIGNvbnN0IGNhbm9uVG9BbGlhc2VzID0ge307XG4gICAgT2JqZWN0LmVudHJpZXMocmF3KS5mb3JFYWNoKChbYWxpYXMsIGNhbm9uXSkgPT4ge1xuICAgICAgYWxpYXNUb0Nhbm9uW2FsaWFzLnRvTG93ZXJDYXNlKCldID0gY2Fub247XG4gICAgICBjb25zdCBjbCA9IGNhbm9uLnRvTG93ZXJDYXNlKCk7XG4gICAgICAoY2Fub25Ub0FsaWFzZXNbY2xdID0gY2Fub25Ub0FsaWFzZXNbY2xdIHx8IFtdKS5wdXNoKGFsaWFzKTtcbiAgICB9KTtcbiAgICBfYXRzU3lub255bU1hcENhY2hlID0geyBhbGlhc1RvQ2Fub24sIGNhbm9uVG9BbGlhc2VzIH07XG4gIH0gY2F0Y2ggKF8pIHsgX2F0c1N5bm9ueW1NYXBDYWNoZSA9IHt9OyB9XG4gIHJldHVybiBfYXRzU3lub255bU1hcENhY2hlO1xufVxuXG5mdW5jdGlvbiBfa3dTeW5Bbm5vdGF0aW9uKGt3LCBzeW5NYXApIHtcbiAgaWYgKCFzeW5NYXAgfHwgKCFzeW5NYXAuYWxpYXNUb0Nhbm9uICYmICFzeW5NYXAuY2Fub25Ub0FsaWFzZXMpKSByZXR1cm4gJyc7XG4gIGNvbnN0IGtsID0gKGt3IHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoc3luTWFwLmFsaWFzVG9DYW5vbiAmJiBzeW5NYXAuYWxpYXNUb0Nhbm9uW2tsXSkgcmV0dXJuIGA9ICR7c3luTWFwLmFsaWFzVG9DYW5vbltrbF19YDtcbiAgY29uc3QgYWxpYXNlcyA9IHN5bk1hcC5jYW5vblRvQWxpYXNlcyAmJiBzeW5NYXAuY2Fub25Ub0FsaWFzZXNba2xdO1xuICBpZiAoYWxpYXNlcyAmJiBhbGlhc2VzLmxlbmd0aCkgcmV0dXJuIGBhbHNvOiAke2FsaWFzZXMuam9pbignLCAnKX1gO1xuICByZXR1cm4gJyc7XG59XG5cbmNvbnN0IEFUU19HUk9VUFMgPSBbXG4gIFsnaGFyZCcsICdIYXJkIFJlcXVpcmVtZW50cyddLFxuICBbJ3NvZnQnLCAnUHJlZmVycmVkIFNraWxscyddLFxuICBbJ2JvbnVzJywgJ1x1MjYwNSBCb251cyBLZXl3b3JkcyddLFxuXTtcblxuZnVuY3Rpb24gX2tleXdvcmRTdGF0dXMoa2V5d29yZCkge1xuICByZXR1cm4ga2V5d29yZD8uc3RhdHVzIHx8IChrZXl3b3JkPy5mb3VuZCA/ICdtYXRjaGVkJyA6ICdtaXNzaW5nJyk7XG59XG5cbmZ1bmN0aW9uIF9rZXl3b3JkVHlwZShrZXl3b3JkKSB7XG4gIHJldHVybiBrZXl3b3JkPy50eXBlIHx8ICdvdGhlcic7XG59XG5cbmZ1bmN0aW9uIF9pc0V4YWN0TWF0Y2goa2V5d29yZCkge1xuICByZXR1cm4gX2tleXdvcmRTdGF0dXMoa2V5d29yZCkgPT09ICdtYXRjaGVkJyAmJiBrZXl3b3JkPy5tYXRjaF90eXBlICE9PSAncGFydGlhbCc7XG59XG5cbmZ1bmN0aW9uIF9pc1BhcnRpYWxNYXRjaChrZXl3b3JkKSB7XG4gIHJldHVybiBfa2V5d29yZFN0YXR1cyhrZXl3b3JkKSA9PT0gJ3BhcnRpYWwnIHx8IGtleXdvcmQ/Lm1hdGNoX3R5cGUgPT09ICdwYXJ0aWFsJztcbn1cblxuZnVuY3Rpb24gX2tleXdvcmRTb3J0VmFsdWUoa2V5d29yZCkge1xuICBpZiAoX2tleXdvcmRTdGF0dXMoa2V5d29yZCkgPT09ICdtaXNzaW5nJykgcmV0dXJuIDA7XG4gIGlmIChfaXNQYXJ0aWFsTWF0Y2goa2V5d29yZCkpIHJldHVybiAxO1xuICByZXR1cm4gMjtcbn1cblxuZnVuY3Rpb24gX2tleXdvcmRTdGF0dXNCYWRnZShrZXl3b3JkKSB7XG4gIGlmIChfa2V5d29yZFN0YXR1cyhrZXl3b3JkKSA9PT0gJ21pc3NpbmcnKSB7XG4gICAgcmV0dXJuICc8c3BhbiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6I2ZlZTJlMjtjb2xvcjojOTkxYjFiO2ZvbnQtc2l6ZTowLjhlbTtmb250LXdlaWdodDo2MDA7XCI+XHUyNzRDIE1pc3Npbmc8L3NwYW4+JztcbiAgfVxuICBpZiAoX2lzUGFydGlhbE1hdGNoKGtleXdvcmQpKSB7XG4gICAgcmV0dXJuICc8c3BhbiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6I2ZlZjNjNztjb2xvcjojOTI0MDBlO2ZvbnQtc2l6ZTowLjhlbTtmb250LXdlaWdodDo2MDA7XCI+XHUyNkEwIFBhcnRpYWw8L3NwYW4+JztcbiAgfVxuICByZXR1cm4gJzxzcGFuIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDojZGNmY2U3O2NvbG9yOiMxNjY1MzQ7Zm9udC1zaXplOjAuOGVtO2ZvbnQtd2VpZ2h0OjYwMDtcIj5cdTI3MDUgTWF0Y2hlZDwvc3Bhbj4nO1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyS2V5d29yZEdyb3VwKHRpdGxlLCBrZXl3b3Jkcywgc3luTWFwKSB7XG4gIGlmIChrZXl3b3Jkcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcblxuICBjb25zdCBleGFjdENvdW50ID0ga2V5d29yZHMuZmlsdGVyKF9pc0V4YWN0TWF0Y2gpLmxlbmd0aDtcbiAgY29uc3QgcGFydGlhbENvdW50ID0ga2V5d29yZHMuZmlsdGVyKF9pc1BhcnRpYWxNYXRjaCkubGVuZ3RoO1xuICBjb25zdCBtaXNzaW5nQ291bnQgPSBrZXl3b3Jkcy5maWx0ZXIoa2V5d29yZCA9PiBfa2V5d29yZFN0YXR1cyhrZXl3b3JkKSA9PT0gJ21pc3NpbmcnKS5sZW5ndGg7XG4gIGNvbnN0IHNvcnRlZCA9IFsuLi5rZXl3b3Jkc10uc29ydCgobGVmdCwgcmlnaHQpID0+IHtcbiAgICBjb25zdCBwcmlvcml0eSA9IF9rZXl3b3JkU29ydFZhbHVlKGxlZnQpIC0gX2tleXdvcmRTb3J0VmFsdWUocmlnaHQpO1xuICAgIGlmIChwcmlvcml0eSAhPT0gMCkgcmV0dXJuIHByaW9yaXR5O1xuICAgIHJldHVybiBTdHJpbmcobGVmdC5rZXl3b3JkIHx8IGxlZnQudGVybSB8fCAnJykubG9jYWxlQ29tcGFyZShTdHJpbmcocmlnaHQua2V5d29yZCB8fCByaWdodC50ZXJtIHx8ICcnKSk7XG4gIH0pO1xuXG4gIHJldHVybiBgXG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MTZweDtcIj5cbiAgICAgIDxoNCBzdHlsZT1cIm1hcmdpbjowIDAgOHB4O2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiMzMzQxNTU7XCI+JHtlc2NhcGVIdG1sKHRpdGxlKX08L2g0PlxuICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjgyZW07Y29sb3I6IzY0NzQ4YjttYXJnaW4tYm90dG9tOjhweDtcIj4ke2V4YWN0Q291bnR9IGV4YWN0IFx1MjAyMiAke3BhcnRpYWxDb3VudH0gcGFydGlhbCBcdTIwMjIgJHttaXNzaW5nQ291bnR9IG1pc3Npbmc8L2Rpdj5cbiAgICAgIDx0YWJsZSBzdHlsZT1cIndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2ZvbnQtc2l6ZTowLjllbTtcIj5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0ciBzdHlsZT1cInRleHQtYWxpZ246bGVmdDtjb2xvcjojNjQ3NDhiO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlMmU4ZjA7XCI+XG4gICAgICAgICAgICA8dGggc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7XCI+S2V5d29yZDwvdGg+XG4gICAgICAgICAgICA8dGggc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7XCI+Q292ZXJhZ2U8L3RoPlxuICAgICAgICAgICAgPHRoIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O1wiPlNlY3Rpb25zPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgJHtzb3J0ZWQubWFwKGtleXdvcmQgPT4ge1xuICAgICAgICAgICAgY29uc3Qga3cgPSBrZXl3b3JkLmtleXdvcmQgfHwga2V5d29yZC50ZXJtIHx8ICcnO1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBBcnJheS5pc0FycmF5KGtleXdvcmQubWF0Y2hlZF9pbl9zZWN0aW9ucykgJiYga2V5d29yZC5tYXRjaGVkX2luX3NlY3Rpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBrZXl3b3JkLm1hdGNoZWRfaW5fc2VjdGlvbnMuam9pbignLCAnKVxuICAgICAgICAgICAgICA6ICdOb3QgZm91bmQnO1xuICAgICAgICAgICAgY29uc3Qgc3luQW5ub3QgPSBfa3dTeW5Bbm5vdGF0aW9uKGt3LCBzeW5NYXApO1xuICAgICAgICAgICAgY29uc3Qgc3luSHRtbCA9IHN5bkFubm90XG4gICAgICAgICAgICAgID8gYDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC43OGVtO2NvbG9yOiM2NDc0OGI7bWFyZ2luLXRvcDoycHg7XCIgdGl0bGU9XCJTeW5vbnltIGdyb3VwaW5nXCI+JHtlc2NhcGVIdG1sKHN5bkFubm90KX08L2Rpdj5gXG4gICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICA8dHIgc3R5bGU9XCJib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjFmNWY5O3ZlcnRpY2FsLWFsaWduOnRvcDtcIj5cbiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjhweDtcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7Y29sb3I6IzFlMjkzYjtcIj4ke2VzY2FwZUh0bWwoa3cpfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjhlbTtjb2xvcjojOTRhM2I4O3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7XCI+JHtlc2NhcGVIdG1sKF9rZXl3b3JkVHlwZShrZXl3b3JkKSl9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAke3N5bkh0bWx9XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjhweDtcIj4ke19rZXl3b3JkU3RhdHVzQmFkZ2Uoa2V5d29yZCl9PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjhweDtjb2xvcjojNDc1NTY5O1wiPiR7ZXNjYXBlSHRtbChzZWN0aW9ucyl9PC90ZD5cbiAgICAgICAgICAgICAgPC90cj5gO1xuICAgICAgICAgIH0pLmpvaW4oJycpfVxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5gO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEFUUyBSZXBvcnQgTW9kYWxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIE9wZW4gdGhlIEFUUyBSZXBvcnQgbW9kYWwuIFJlbmRlcnMgdGhlIGNhY2hlZCBBVFMgc2NvcmUgZnJvbSBzdGF0ZSwgb3JcbiAqIGZldGNoZXMgYSBmcmVzaCBzY29yZSBpZiBub25lIGlzIGNhY2hlZC5cbiAqL1xuZnVuY3Rpb24gX2F0c0VzY2FwZUhhbmRsZXIoZSkge1xuICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBjbG9zZUF0c1JlcG9ydE1vZGFsKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5BdHNSZXBvcnRNb2RhbCgpIHtcbiAgcHVzaEZvY3VzU3RhY2soZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXRzLXJlcG9ydC1tb2RhbC1vdmVybGF5Jyk7XG4gIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIF9hdHNFc2NhcGVIYW5kbGVyKTtcbiAgLy8gTW92ZSBmb2N1cyB0byB0aGUgQ2xvc2UgYnV0dG9uIGluIHRoZSBtb2RhbCBmb290ZXJcbiAgY29uc3QgY2xvc2VCdG4gPSBvdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbC1mb290ZXIgLmFjdGlvbi1idG4nKTtcbiAgaWYgKGNsb3NlQnRuKSBjbG9zZUJ0bi5mb2N1cygpO1xuICB0cmFwRm9jdXMoJ2F0cy1yZXBvcnQtbW9kYWwtb3ZlcmxheScpO1xuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F0cy1yZXBvcnQtbW9kYWwtYm9keScpO1xuXG4gIC8vIEEgY2FjaGVkIHNjb3JlIHJlbmRlcnMgaW1tZWRpYXRlbHkgdXNpbmcgd2hhdGV2ZXIgc3lub255bSBtYXAgaXMgYWxyZWFkeVxuICAvLyBjYWNoZWQgKG9yIG5vbmUpIHJhdGhlciB0aGFuIGJsb2NraW5nIG9uIGEgbmV0d29yayByb3VuZC10cmlwIGZvciBpdCBcdTIwMTRcbiAgLy8gdGhlIGFubm90YXRpb25zIGFyZSBhbiBlbnJpY2htZW50LCBub3QgcmVxdWlyZWQgZm9yIF9yZW5kZXJBdHNSZXBvcnQgdG9cbiAgLy8gd29yaywgYW5kIGEgY2FjaGVkLXNjb3JlIG9wZW4gc2hvdWxkIGJlIGluc3RhbnQuXG4gIGNvbnN0IGNhY2hlZCA9IHN0YXRlTWFuYWdlcj8uZ2V0QXRzU2NvcmU/LigpO1xuICBpZiAoY2FjaGVkKSB7XG4gICAgYm9keS5pbm5lckhUTUwgPSBfcmVuZGVyQXRzUmVwb3J0KGNhY2hlZCwgX2F0c1N5bm9ueW1NYXBDYWNoZSB8fCB7fSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYm9keS5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7cGFkZGluZzoyNHB4O2NvbG9yOiM2YjcyODA7XCI+PGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiIHN0eWxlPVwid2lkdGg6MjBweDtoZWlnaHQ6MjBweDtib3JkZXItd2lkdGg6MnB4O2ZsZXgtc2hyaW5rOjA7XCI+PC9kaXY+PHNwYW4+RmV0Y2hpbmcgQVRTIHNjb3JlXHUyMDI2PC9zcGFuPjwvZGl2Pic7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gc3RhdGVNYW5hZ2VyPy5nZXRTZXNzaW9uSWQ/LigpO1xuICAgIGNvbnN0IFtzeW5NYXAsIHJlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBfbG9hZEF0c1N5bm9ueW1NYXAoKSxcbiAgICAgIGZldGNoKCcvYXBpL2N2L2F0cy1zY29yZScsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHNlc3Npb25faWQ6IHNlc3Npb25JZCwgYmFzaXM6ICdyZXZpZXdfY2hlY2twb2ludCcgfSksXG4gICAgICB9KSxcbiAgICBdKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vayAmJiBkYXRhLmF0c19zY29yZSkge1xuICAgICAgc3RhdGVNYW5hZ2VyPy5zZXRBdHNTY29yZT8uKGRhdGEuYXRzX3Njb3JlKTtcbiAgICAgIHVwZGF0ZUF0c0JhZGdlKGRhdGEuYXRzX3Njb3JlKTtcbiAgICAgIGJvZHkuaW5uZXJIVE1MID0gX3JlbmRlckF0c1JlcG9ydChkYXRhLmF0c19zY29yZSwgc3luTWFwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keS5pbm5lckhUTUwgPSBgPHAgc3R5bGU9XCJwYWRkaW5nOjI0cHg7Y29sb3I6I2VmNDQ0NDtcIj5Db3VsZCBub3QgbG9hZCBBVFMgcmVwb3J0OiAke2VzY2FwZUh0bWwoZGF0YS5lcnJvciB8fCAndW5rbm93biBlcnJvcicpfTwvcD5gO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGJvZHkuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwicGFkZGluZzoyNHB4O2NvbG9yOiNlZjQ0NDQ7XCI+RXJyb3I6ICR7ZXNjYXBlSHRtbChlLm1lc3NhZ2UpfTwvcD5gO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb3NlQXRzUmVwb3J0TW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdHMtcmVwb3J0LW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgX2F0c0VzY2FwZUhhbmRsZXIpO1xuICByZXN0b3JlRm9jdXMoKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgYW4gQVRTIHNjb3JlIG9iamVjdCBpbnRvIEhUTUwgZm9yIHRoZSBtb2RhbCBib2R5LlxuICovXG5mdW5jdGlvbiBfcmVuZGVyQXRzUmVwb3J0KHNjb3JlLCBzeW5NYXApIHtcbiAgY29uc3Qgb3ZlcmFsbCA9IE1hdGgucm91bmQoc2NvcmUub3ZlcmFsbCA/PyAwKTtcbiAgY29uc3QgaGFyZCA9IE1hdGgucm91bmQoc2NvcmUuaGFyZF9yZXF1aXJlbWVudF9zY29yZSA/PyAwKTtcbiAgY29uc3Qgc29mdCA9IE1hdGgucm91bmQoc2NvcmUuc29mdF9yZXF1aXJlbWVudF9zY29yZSA/PyAwKTtcblxuICBjb25zdCBzY29yZUNvbG9yID0gb3ZlcmFsbCA+PSA3NSA/ICcjMTBiOTgxJyA6IG92ZXJhbGwgPj0gNTAgPyAnI2Y1OWUwYicgOiAnI2VmNDQ0NCc7XG5cbiAgY29uc3Qga2V5d29yZHMgPSBzY29yZS5rZXl3b3JkX3N0YXR1cyB8fCBbXTtcbiAgY29uc3QgbWlzc2luZ0t3ID0ga2V5d29yZHMuZmlsdGVyKGtleXdvcmQgPT4gX2tleXdvcmRTdGF0dXMoa2V5d29yZCkgPT09ICdtaXNzaW5nJyk7XG4gIGNvbnN0IG1pc3NpbmdIYXJkID0gbWlzc2luZ0t3LmZpbHRlcihrZXl3b3JkID0+IF9rZXl3b3JkVHlwZShrZXl3b3JkKSA9PT0gJ2hhcmQnKTtcbiAgY29uc3Qga2V5d29yZEdyb3VwcyA9IEFUU19HUk9VUFNcbiAgICAubWFwKChbdHlwZSwgdGl0bGVdKSA9PiBfcmVuZGVyS2V5d29yZEdyb3VwKHRpdGxlLCBrZXl3b3Jkcy5maWx0ZXIoa2V5d29yZCA9PiBfa2V5d29yZFR5cGUoa2V5d29yZCkgPT09IHR5cGUpLCBzeW5NYXApKVxuICAgIC5qb2luKCcnKTtcblxuICBjb25zdCBzZWN0aW9uU2NvcmVzID0gc2NvcmUuc2VjdGlvbl9zY29yZXMgfHwge307XG4gIGNvbnN0IHNlY3RIdG1sID0gT2JqZWN0LmtleXMoc2VjdGlvblNjb3JlcykubGVuZ3RoID09PSAwID8gJycgOiBgXG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MTZweDtcIj5cbiAgICAgIDxoNCBzdHlsZT1cIm1hcmdpbjowIDAgOHB4O2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiMzMzQxNTU7XCI+U2VjdGlvbiBTY29yZXM8L2g0PlxuICAgICAgPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Zm9udC1zaXplOjAuOWVtO1wiPlxuICAgICAgICAke09iamVjdC5lbnRyaWVzKHNlY3Rpb25TY29yZXMpLm1hcCgoW3NlYywgdmFsXSkgPT4gYFxuICAgICAgICAgIDx0ciBzdHlsZT1cImJvcmRlci1ib3R0b206MXB4IHNvbGlkICNmMWY1Zjk7XCI+XG4gICAgICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjRweCA4cHg7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZTtjb2xvcjojNDc1NTY5O1wiPiR7ZXNjYXBlSHRtbChzZWMpfTwvdGQ+XG4gICAgICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjRweCA4cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxZTI5M2I7XCI+JHtNYXRoLnJvdW5kKHZhbCl9JTwvdGQ+XG4gICAgICAgICAgPC90cj5gKS5qb2luKCcnKX1cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+YDtcblxuICByZXR1cm4gYFxuICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOjIwcHg7XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MjRweDttYXJnaW4tYm90dG9tOjIwcHg7XCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6Mi40ZW07Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiR7c2NvcmVDb2xvcn07XCI+JHtvdmVyYWxsfSU8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuOWVtO2NvbG9yOiM0NzU1Njk7XCI+SGFyZCByZXF1aXJlbWVudHM6IDxzdHJvbmc+JHtoYXJkfSU8L3N0cm9uZz48L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuOWVtO2NvbG9yOiM0NzU1Njk7XCI+UHJlZmVycmVkIHNraWxsczogPHN0cm9uZz4ke3NvZnR9JTwvc3Ryb25nPjwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC43NWVtO2NvbG9yOiM5NGEzYjg7bWFyZ2luLXRvcDoycHg7XCI+QmFzaXM6ICR7ZXNjYXBlSHRtbChzY29yZS5iYXNpcyB8fCAncmV2aWV3Jyl9PC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjc1ZW07Y29sb3I6Izk0YTNiODttYXJnaW4tdG9wOjRweDtcIiB0aXRsZT1cIlNjb3JlIHRocmVzaG9sZHNcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6IzEwYjk4MTtcIj5cdTI1Q0Y8L3NwYW4+IFx1MjI2NTc1JSBTdHJvbmcgbWF0Y2ggJm5ic3A7XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImNvbG9yOiNmNTllMGI7XCI+XHUyNUNGPC9zcGFuPiA1MFx1MjAxMzc0JSBQYXJ0aWFsIG1hdGNoICZuYnNwO1xuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O1wiPlx1MjVDRjwvc3Bhbj4gJmx0OzUwJSBMb3cgbWF0Y2hcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgICR7a2V5d29yZEdyb3Vwc31cbiAgICAgICR7c2VjdEh0bWx9XG4gICAgICAke21pc3NpbmdIYXJkLmxlbmd0aCA+IDAgPyBgXG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjE2cHg7cGFkZGluZzoxMnB4O2JhY2tncm91bmQ6I2ZmZjdlZDtib3JkZXI6MXB4IHNvbGlkICNmZWQ3YWE7Ym9yZGVyLXJhZGl1czo2cHg7XCI+XG4gICAgICAgICAgPHN0cm9uZyBzdHlsZT1cImNvbG9yOiM5YTM0MTI7XCI+TWlzc2luZyBoYXJkIHJlcXVpcmVtZW50cyAoJHttaXNzaW5nSGFyZC5sZW5ndGh9KTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiM3YzJkMTI7Zm9udC1zaXplOjAuOWVtO1wiPiAke21pc3NpbmdIYXJkLm1hcChrZXl3b3JkID0+IGVzY2FwZUh0bWwoa2V5d29yZC5rZXl3b3JkIHx8IGtleXdvcmQudGVybSB8fCAnJykpLmpvaW4oJywgJyl9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5gIDogJyd9XG4gICAgICAke21pc3NpbmdLdy5sZW5ndGggPiBtaXNzaW5nSGFyZC5sZW5ndGggPyBgXG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjE2cHg7cGFkZGluZzoxMnB4O2JhY2tncm91bmQ6I2ZmZjdlZDtib3JkZXI6MXB4IHNvbGlkICNmZWQ3YWE7Ym9yZGVyLXJhZGl1czo2cHg7XCI+XG4gICAgICAgICAgPHN0cm9uZyBzdHlsZT1cImNvbG9yOiM5YTM0MTI7XCI+UmVtYWluaW5nIGtleXdvcmQgZ2FwcyAoJHttaXNzaW5nS3cubGVuZ3RoIC0gbWlzc2luZ0hhcmQubGVuZ3RofSk6PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjojN2MyZDEyO2ZvbnQtc2l6ZTowLjllbTtcIj4gJHttaXNzaW5nS3cuZmlsdGVyKGtleXdvcmQgPT4gX2tleXdvcmRUeXBlKGtleXdvcmQpICE9PSAnaGFyZCcpLm1hcChrZXl3b3JkID0+IGVzY2FwZUh0bWwoa2V5d29yZC5rZXl3b3JkIHx8IGtleXdvcmQudGVybSB8fCAnJykpLmpvaW4oJywgJyl9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5gIDogJyd9XG4gICAgPC9kaXY+YDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBKb2IgQW5hbHlzaXMgTW9kYWxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIE9wZW4gdGhlIEpvYiBBbmFseXNpcyBtb2RhbC4gUmV1c2VzIHRhYkRhdGEuYW5hbHlzaXMgaWYgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiBfam9iQW5hbHlzaXNFc2NhcGVIYW5kbGVyKGUpIHtcbiAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgY2xvc2VKb2JBbmFseXNpc01vZGFsKCk7XG59XG5cbmZ1bmN0aW9uIG9wZW5Kb2JBbmFseXNpc01vZGFsKCkge1xuICBwdXNoRm9jdXNTdGFjayhkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqb2ItYW5hbHlzaXMtbW9kYWwtb3ZlcmxheScpO1xuICBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBfam9iQW5hbHlzaXNFc2NhcGVIYW5kbGVyKTtcbiAgY29uc3QgY2xvc2VCdG4gPSBvdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbC1mb290ZXIgLmFjdGlvbi1idG4nKTtcbiAgaWYgKGNsb3NlQnRuKSBjbG9zZUJ0bi5mb2N1cygpO1xuICB0cmFwRm9jdXMoJ2pvYi1hbmFseXNpcy1tb2RhbC1vdmVybGF5Jyk7XG4gIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnam9iLWFuYWx5c2lzLW1vZGFsLWJvZHknKTtcblxuICBjb25zdCBhbmFseXNpcyA9IHN0YXRlTWFuYWdlci5nZXRUYWJEYXRhKCdhbmFseXNpcycpO1xuICBpZiAoYW5hbHlzaXMpIHtcbiAgICAvLyBSZW5kZXIgaW50byBhIHRlbXAgZGl2IHVzaW5nIHBvcHVsYXRlQW5hbHlzaXNUYWIncyBvdXRwdXQgcGF0dGVyblxuICAgIGNvbnN0IHRtcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRtcC5zdHlsZS5wYWRkaW5nID0gJzIwcHgnO1xuICAgIGJvZHkuaW5uZXJIVE1MID0gJyc7XG4gICAgYm9keS5hcHBlbmRDaGlsZCh0bXApO1xuICAgIC8vIHBvcHVsYXRlQW5hbHlzaXNUYWIgd3JpdGVzIHRvICNkb2N1bWVudC1jb250ZW50OyB1c2UgYSBzaGltXG4gICAgX3JlbmRlckFuYWx5c2lzSW50b0VsKHRtcCwgYW5hbHlzaXMpO1xuICB9IGVsc2Uge1xuICAgIGJvZHkuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwicGFkZGluZzoyNHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM2YjcyODA7XCI+Tm8gam9iIGFuYWx5c2lzIGF2YWlsYWJsZS4gUnVuIGpvYiBhbmFseXNpcyBmaXJzdC48L3A+JztcbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9zZUpvYkFuYWx5c2lzTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqb2ItYW5hbHlzaXMtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBfam9iQW5hbHlzaXNFc2NhcGVIYW5kbGVyKTtcbiAgcmVzdG9yZUZvY3VzKCk7XG59XG5cbi8qKlxuICogUmVuZGVyIGpvYiBhbmFseXNpcyBkYXRhIGludG8gYW4gYXJiaXRyYXJ5IGNvbnRhaW5lciBlbGVtZW50LlxuICogTWlycm9ycyB0aGUgc3RydWN0dXJlIGZyb20gcG9wdWxhdGVBbmFseXNpc1RhYiBpbiBhcHAuanMuXG4gKi9cbmZ1bmN0aW9uIF9yZW5kZXJBbmFseXNpc0ludG9FbChlbCwgcmVzdWx0KSB7XG4gIGlmICghcmVzdWx0KSB7XG4gICAgZWwuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtcIj5ObyBhbmFseXNpcyBkYXRhLjwvcD4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZHVwbGljYXRlIGxpc3RzOiBjYXNlLWluc2Vuc2l0aXZlLCBrZWVwIGZpcnN0IG9jY3VycmVuY2Ugb2YgZWFjaCBub3JtYWxpc2VkIGZvcm0uXG4gIGNvbnN0IF9kZWR1cCA9IChhcnIpID0+IHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldCgpO1xuICAgIHJldHVybiAoYXJyIHx8IFtdKS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBTdHJpbmcodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnID8gaXRlbSA6IGl0ZW0ua2V5d29yZCB8fCBpdGVtLnRlcm0gfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKCFrZXkgfHwgc2Vlbi5oYXMoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9O1xuICBjb25zdCByZXEgPSBfZGVkdXAocmVzdWx0LnJlcXVpcmVkX3NraWxscyk7XG4gIGNvbnN0IHByZWYgPSBfZGVkdXAocmVzdWx0LnByZWZlcnJlZF9za2lsbHMgfHwgcmVzdWx0Lm5pY2VfdG9faGF2ZSk7XG4gIGNvbnN0IGtleXdvcmRzID0gX2RlZHVwKHJlc3VsdC5hdHNfa2V5d29yZHMpO1xuICBjb25zdCBjdWx0dXJlID0gcmVzdWx0LmN1bHR1cmVfaW5kaWNhdG9ycyB8fCBbXTtcbiAgY29uc3QgbXVzdEhhdmUgPSByZXN1bHQubXVzdF9oYXZlX3JlcXVpcmVtZW50cyB8fCBbXTtcbiAgY29uc3QgbWlzc2luZyA9IHJlc3VsdC5taXNzaW5nX3JlcXVpcmVkIHx8IFtdO1xuXG4gIGVsLmlubmVySFRNTCA9IGBcbiAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuOTVlbTtsaW5lLWhlaWdodDoxLjY7XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZjhmYWZjO2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE0cHggMTZweDttYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MS4xZW07Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMxZTI5M2I7XCI+JHtlc2NhcGVIdG1sKHJlc3VsdC5qb2JfdGl0bGUgfHwgcmVzdWx0LnRpdGxlIHx8ICdSb2xlJyl9PC9kaXY+XG4gICAgICAgICR7cmVzdWx0LmNvbXBhbnkgPyBgPGRpdiBzdHlsZT1cImNvbG9yOiM0NzU1Njk7XCI+JHtlc2NhcGVIdG1sKHJlc3VsdC5jb21wYW55KX08L2Rpdj5gIDogJyd9XG4gICAgICAgICR7cmVzdWx0LmRvbWFpbiA/IGA8c3BhbiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6NnB4O3BhZGRpbmc6MnB4IDhweDtiYWNrZ3JvdW5kOiNkYmVhZmU7Y29sb3I6IzFlNDBhZjtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjAuOGVtO1wiPiR7ZXNjYXBlSHRtbChyZXN1bHQuZG9tYWluKX08L3NwYW4+YCA6ICcnfVxuICAgICAgPC9kaXY+XG5cbiAgICAgICR7bWlzc2luZy5sZW5ndGggPiAwID8gYFxuICAgICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmZmN2VkO2JvcmRlcjoxcHggc29saWQgI2ZlZDdhYTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHggMTRweDttYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgPHN0cm9uZyBzdHlsZT1cImNvbG9yOiM5YTM0MTI7XCI+XHUyNkEwIE1pc3NpbmcgcmVxdWlyZWQgc2tpbGxzOjwvc3Ryb25nPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJjb2xvcjojN2MyZDEyO21hcmdpbi10b3A6NHB4O1wiPiR7bWlzc2luZy5tYXAocyA9PiBlc2NhcGVIdG1sKHMpKS5qb2luKCcgXHUwMEI3ICcpfTwvZGl2PlxuICAgICAgICA8L2Rpdj5gIDogJyd9XG5cbiAgICAgICR7cmVxLmxlbmd0aCA+IDAgPyBgXG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgPGg0IHN0eWxlPVwibWFyZ2luOjAgMCA4cHg7Zm9udC1zaXplOjAuOTVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjVweDtjb2xvcjojMzM0MTU1O1wiPlJlcXVpcmVkIFNraWxsczwvaDQ+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O1wiPlxuICAgICAgICAgICAgJHtyZXEubWFwKHMgPT4gYDxzcGFuIHN0eWxlPVwicGFkZGluZzoycHggMTBweDtib3JkZXItcmFkaXVzOjEycHg7YmFja2dyb3VuZDoke21pc3NpbmcuaW5jbHVkZXMocyk/JyNmZWUyZTInOicjZGNmY2U3J307Y29sb3I6JHttaXNzaW5nLmluY2x1ZGVzKHMpPycjOTkxYjFiJzonIzE2NjUzNCd9O2ZvbnQtc2l6ZTowLjg1ZW07XCI+JHtlc2NhcGVIdG1sKHMpfTwvc3Bhbj5gKS5qb2luKCcnKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YCA6ICcnfVxuXG4gICAgICAke3ByZWYubGVuZ3RoID4gMCA/IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgICA8aDQgc3R5bGU9XCJtYXJnaW46MCAwIDhweDtmb250LXNpemU6MC45NWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouNXB4O2NvbG9yOiMzMzQxNTU7XCI+UHJlZmVycmVkIC8gTmljZS10by1oYXZlPC9oND5cbiAgICAgICAgICA8dWwgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nLWxlZnQ6MThweDtjb2xvcjojNDc1NTY5O1wiPiR7cHJlZi5tYXAocyA9PiBgPGxpPiR7ZXNjYXBlSHRtbChzKX08L2xpPmApLmpvaW4oJycpfTwvdWw+XG4gICAgICAgIDwvZGl2PmAgOiAnJ31cblxuICAgICAgJHtrZXl3b3Jkcy5sZW5ndGggPiAwID8gYFxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgIDxoNCBzdHlsZT1cIm1hcmdpbjowIDAgOHB4O2ZvbnQtc2l6ZTowLjk1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi41cHg7Y29sb3I6IzMzNDE1NTtcIj5BVFMgS2V5d29yZHM8L2g0PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweDtcIj5cbiAgICAgICAgICAgICR7a2V5d29yZHMubWFwKChrLCBpKSA9PiBgPHNwYW4gc3R5bGU9XCJwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czoxMnB4O2JhY2tncm91bmQ6I2YwZjlmZjtib3JkZXI6MXB4IHNvbGlkICNiYWU2ZmQ7Y29sb3I6IzAzNjlhMTtmb250LXNpemU6MC44MmVtO1wiPiR7aSA8IDUgPyBgPHN0cm9uZz4jJHtpKzF9PC9zdHJvbmc+IGAgOiAnJ30ke2VzY2FwZUh0bWwodHlwZW9mIGsgPT09ICdzdHJpbmcnID8gayA6IGsua2V5d29yZCB8fCBrLnRlcm0gfHwgJycpfTwvc3Bhbj5gKS5qb2luKCcnKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YCA6ICcnfVxuXG4gICAgICAke211c3RIYXZlLmxlbmd0aCA+IDAgPyBgXG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgPGg0IHN0eWxlPVwibWFyZ2luOjAgMCA4cHg7Zm9udC1zaXplOjAuOTVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjVweDtjb2xvcjojMzM0MTU1O1wiPk11c3QtaGF2ZSBSZXF1aXJlbWVudHM8L2g0PlxuICAgICAgICAgIDx1bCBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmctbGVmdDoxOHB4O2NvbG9yOiM0NzU1Njk7XCI+JHttdXN0SGF2ZS5tYXAocyA9PiBgPGxpPiR7ZXNjYXBlSHRtbChzKX08L2xpPmApLmpvaW4oJycpfTwvdWw+XG4gICAgICAgIDwvZGl2PmAgOiAnJ31cblxuICAgICAgJHtjdWx0dXJlLmxlbmd0aCA+IDAgPyBgXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGg0IHN0eWxlPVwibWFyZ2luOjAgMCA4cHg7Zm9udC1zaXplOjAuOTVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjVweDtjb2xvcjojMzM0MTU1O1wiPkN1bHR1cmUgSW5kaWNhdG9yczwvaDQ+XG4gICAgICAgICAgPHVsIHN0eWxlPVwibWFyZ2luOjA7cGFkZGluZy1sZWZ0OjE4cHg7Y29sb3I6IzQ3NTU2OTtcIj4ke2N1bHR1cmUubWFwKHMgPT4gYDxsaT4ke2VzY2FwZUh0bWwocyl9PC9saT5gKS5qb2luKCcnKX08L3VsPlxuICAgICAgICA8L2Rpdj5gIDogJyd9XG4gICAgPC9kaXY+YDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBBVFMgU2NvcmUgVGFiIChpbiBjdXN0b21pemUgcGhhc2UpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBQb3B1bGF0ZSB0aGUgQVRTIFNjb3JlIHRhYiBjb250ZW50IGFyZWEuXG4gKiBDYWxsZWQgYnkgYXBwLmpzIHN3aXRjaFRhYiB3aGVuIGNhc2UgJ2F0cy1zY29yZScgaXMgc2VsZWN0ZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBvcHVsYXRlQXRzU2NvcmVUYWIoKSB7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICBpZiAoIWNvbnRlbnQpIHJldHVybjtcblxuICBjb25zdCBjYWNoZWQgPSBzdGF0ZU1hbmFnZXI/LmdldEF0c1Njb3JlPy4oKTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gYDxkaXYgc3R5bGU9XCJtYXgtd2lkdGg6NjgwcHg7bWFyZ2luOjAgYXV0bztcIj4ke19yZW5kZXJBdHNSZXBvcnQoY2FjaGVkKX08L2Rpdj5gO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPjxkaXYgY2xhc3M9XCJpY29uXCI+XHVEODNEXHVEQ0NBPC9kaXY+PGgzPkFUUyBTY29yZTwvaDM+PHA+Q29tcGxldGUgam9iIGFuYWx5c2lzIGFuZCBza2lsbHMgcmV2aWV3IHRvIHNlZSB5b3VyIEFUUyBzY29yZTwvcD48YnV0dG9uIGNsYXNzPVwiYnRuLXByaW1hcnlcIiBvbmNsaWNrPVwicmVmcmVzaEF0c1Njb3JlKFxcJ3Jldmlld19jaGVja3BvaW50XFwnKS50aGVuKCgpPT5wb3B1bGF0ZUF0c1Njb3JlVGFiKCkpXCI+Q29tcHV0ZSBBVFMgU2NvcmU8L2J1dHRvbj48L2Rpdj4nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNob3cvaGlkZSB0aGUgbW9kYWwgc2hvcnRjdXQgYnV0dG9ucyB3aGVuIEFUUyBiYWRnZSBiZWNvbWVzIHZpc2libGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFNob3cgb3IgaGlkZSB0aGUgQVRTIFJlcG9ydCBhbmQgSm9iIEFuYWx5c2lzIHNob3J0Y3V0IGJ1dHRvbnMuXG4gKiBEcml2ZW4gYnkgdGhlICdhdHMtc2NvcmUtdXBkYXRlZCcgY3VzdG9tIGV2ZW50IGRpc3BhdGNoZWQgYnkgYXBwLmpzXG4gKiB3aGVuZXZlciB1cGRhdGVBdHNCYWRnZSgpIHJ1bnMuIE5vIG1vbmtleS1wYXRjaGluZyByZXF1aXJlZC5cbiAqL1xuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYXRzLXNjb3JlLXVwZGF0ZWQnLCAoKSA9PiB7XG4gIGNvbnN0IGJhZGdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F0cy1zY29yZS1iYWRnZScpO1xuICBjb25zdCB2aXNpYmxlID0gYmFkZ2UgJiYgYmFkZ2Uuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnO1xuICBjb25zdCByZXBvcnRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXRzLXJlcG9ydC1idG4nKTtcbiAgY29uc3QgYW5hbHlzaXNCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnam9iLWFuYWx5c2lzLWJ0bicpO1xuICBpZiAocmVwb3J0QnRuKSByZXBvcnRCdG4uc3R5bGUuZGlzcGxheSA9IHZpc2libGUgPyAnaW5saW5lLWJsb2NrJyA6ICdub25lJztcbiAgaWYgKGFuYWx5c2lzQnRuKSBhbmFseXNpc0J0bi5zdHlsZS5kaXNwbGF5ID0gdmlzaWJsZSA/ICdpbmxpbmUtYmxvY2snIDogJ25vbmUnO1xufSk7XG5cbmV4cG9ydCB7XG4gIG9wZW5BdHNSZXBvcnRNb2RhbCxcbiAgY2xvc2VBdHNSZXBvcnRNb2RhbCxcbiAgX3JlbmRlckF0c1JlcG9ydCxcbiAgb3BlbkpvYkFuYWx5c2lzTW9kYWwsXG4gIGNsb3NlSm9iQW5hbHlzaXNNb2RhbCxcbiAgX3JlbmRlckFuYWx5c2lzSW50b0VsLFxuICBwb3B1bGF0ZUF0c1Njb3JlVGFiLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3Nlc3Npb24tYWN0aW9ucy5qc1xuICogU2Vzc2lvbi1sZXZlbCBkaXNwYXRjaCAoc2VuZEFjdGlvbiksIHNhdmUsIGFuZCBwb3NpdGlvbiB0aXRsZSB1cGRhdGVzLlxuICpcbiAqIERFUEVOREVOQ0lFUyAoYWxsIG9uIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIC0gc3RhdGVNYW5hZ2VyIChzdGF0ZS1tYW5hZ2VyLmpzIFx1MjAxNCBpc0xvYWRpbmcoKS9zZXRUYWJEYXRhKCkpXG4gKiAgIC0gdXNlclNlbGVjdGlvbnMgKHdpbmRvdyBnbG9iYWwgZnJvbSBhcHApXG4gKiAgIC0gYXBwZW5kTG9hZGluZ01lc3NhZ2UsIHJlbW92ZUxvYWRpbmdNZXNzYWdlLCBhcHBlbmRNZXNzYWdlLCBhcHBlbmRSZXRyeU1lc3NhZ2VcbiAqICAgLSBzZXRMb2FkaW5nLCBsbG1GZXRjaCAoZmV0Y2gtdXRpbHMuanMpXG4gKiAgIC0gcGFyc2VNZXNzYWdlUmVzcG9uc2UsIHBhcnNlU3RhdHVzUmVzcG9uc2UgKHZhbGlkYXRvcnMuanMpXG4gKiAgIC0gaGFuZGxlQ3VzdG9taXphdGlvblJlc3BvbnNlIChyZXZpZXctdGFibGUtYmFzZS5qcywgVGllciA0KVxuICogICAtIHJlZnJlc2hBdHNTY29yZSwgc3dpdGNoVGFiLCBmZXRjaFN0YXR1cyAoZ2xvYmFsVGhpcylcbiAqICAgLSBjbGVhclN0YXRlLCBTdG9yYWdlS2V5cyAoc3RhdGUtbWFuYWdlci5qcyAvIGFwaS1jbGllbnQuanMpXG4gKiAgIC0gc2hvd0xvYWRKb2JQYW5lbCwgY2xlYXJKb2JJbnB1dCwgY2xlYXJVUkxJbnB1dCwgX2NsZWFyRmllbGRFcnJvcixcbiAqICAgICBfdXBkYXRlUGFzdGVDaGFyQ291bnQgKGpvYi1pbnB1dC5qcywgVGllciAzKVxuICogICAtIG5vcm1hbGl6ZVBvc2l0aW9uTGFiZWwsIGV4dHJhY3RUaXRsZUFuZENvbXBhbnlGcm9tSm9iVGV4dCxcbiAqICAgICBjbGVhbkpzb25SZXNwb25zZSAodXRpbHMuanMpXG4gKiAgIC0gX3VwZGF0ZVNlc3Npb25Td2l0Y2hlckhlYWRlciAoc2Vzc2lvbi1zd2l0Y2hlci11aS5qcywgVGllciA3KVxuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcignc2Vzc2lvbi1hY3Rpb25zJyk7XG5cbmltcG9ydCB7IFN0b3JhZ2VLZXlzIH0gZnJvbSAnLi9hcGktY2xpZW50LmpzJztcbmltcG9ydCB7IHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5cbi8qKiBNYXBzIGFjdGlvbiBpZGVudGlmaWVycyB0byBodW1hbi1yZWFkYWJsZSBMTE0gc3RhdHVzIGJhciBsYWJlbHMuICovXG5jb25zdCBfQUNUSU9OX0xBQkVMUyA9IHtcbiAgYW5hbHl6ZV9qb2I6ICAgICAgICAgICAgICAnQW5hbHlzaW5nIGpvYiBkZXNjcmlwdGlvblx1MjAyNicsXG4gIHJlY29tbWVuZF9jdXN0b21pemF0aW9uczogJ0dlbmVyYXRpbmcgY3VzdG9taXNhdGlvbiByZWNvbW1lbmRhdGlvbnNcdTIwMjYnLFxuICBnZW5lcmF0ZV9jdjogICAgICAgICAgICAgICdHZW5lcmF0aW5nIENWIGZpbGVzXHUyMDI2Jyxcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbmRBY3Rpb24oYWN0aW9uKSB7XG4gIGlmIChzdGF0ZU1hbmFnZXIuaXNMb2FkaW5nKCkpIHJldHVybjtcblxuICBjb25zdCBsb2FkaW5nTXNnID0gYXBwZW5kTG9hZGluZ01lc3NhZ2UoYEV4ZWN1dGluZyAke2FjdGlvbn0uLi5gKTtcbiAgc2V0TG9hZGluZyh0cnVlLCBfQUNUSU9OX0xBQkVMU1thY3Rpb25dIHx8IGAke2FjdGlvbi5yZXBsYWNlKC9fL2csICcgJyl9XHUyMDI2YCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0geyBhY3Rpb24gfTtcbiAgICBpZiAoYWN0aW9uID09PSAncmVjb21tZW5kX2N1c3RvbWl6YXRpb25zJyAmJiB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzKSB7XG4gICAgICBwYXlsb2FkLnVzZXJfcHJlZmVyZW5jZXMgPSB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGxsbUZldGNoKCcvYXBpL2FjdGlvbicsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VNZXNzYWdlUmVzcG9uc2UoYXdhaXQgcmVzLmpzb24oKSk7XG5cbiAgICByZW1vdmVMb2FkaW5nTWVzc2FnZShsb2FkaW5nTXNnKTtcblxuICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoJ1x1Mjc0QyBFcnJvcjogJyArIGRhdGEuZXJyb3IsICgpID0+IHNlbmRBY3Rpb24oYWN0aW9uKSk7XG4gICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdyZWNvbW1lbmRfY3VzdG9taXphdGlvbnMnKSB7XG4gICAgICBjb25zdCBjdXN0b21pemF0aW9uRGF0YSA9IGRhdGEucmVzdWx0Py5jb250ZXh0X2RhdGE/LmN1c3RvbWl6YXRpb25zID8/IGRhdGEucmVzdWx0O1xuICAgICAgYXdhaXQgaGFuZGxlQ3VzdG9taXphdGlvblJlc3BvbnNlKGN1c3RvbWl6YXRpb25EYXRhKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2dlbmVyYXRlX2N2Jykge1xuICAgICAgY29uc3QgZ2VuZXJhdGlvbk1zZyA9IGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsICdcdTIzRjMgR2VuZXJhdGluZyBDViBmaWxlcyAoQVRTIERPQ1ggXHUyMTkyIEhUTUwgXHUyMTkyIEh1bWFuIERPQ1gpLi4uJyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEyMDsgaSsrKSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCA1MDApKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdGF0dXNSZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvc3RhdHVzJyk7XG4gICAgICAgICAgY29uc3Qgc3RhdHVzRGF0YSA9IHBhcnNlU3RhdHVzUmVzcG9uc2UoYXdhaXQgc3RhdHVzUmVzLmpzb24oKSk7XG4gICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgICA9IHN0YXR1c0RhdGEuZ2VuZXJhdGlvbl9wcm9ncmVzcyB8fCBbXTtcbiAgICAgICAgICBpZiAocHJvZ3Jlc3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdG90YWwgPSBwcm9ncmVzcy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBkb25lQ291bnQgPSBwcm9ncmVzcy5maWx0ZXIocCA9PiBwLnN0YXR1cyA9PT0gJ2NvbXBsZXRlJykubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gcHJvZ3Jlc3MuZmluZChwID0+IHAuc3RhdHVzICE9PSAnY29tcGxldGUnKTtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXBMYWJlbCA9IGFjdGl2ZVxuICAgICAgICAgICAgICA/IGAke2FjdGl2ZS5zdGVwLnJlcGxhY2UoL18vZywgJyAnKX0gKCR7ZG9uZUNvdW50ICsgMX0gb2YgJHt0b3RhbH0pYFxuICAgICAgICAgICAgICA6IGAke3RvdGFsfSBvZiAke3RvdGFsfSBjb21wbGV0ZWA7XG4gICAgICAgICAgICBpZiAodHlwZW9mIF91cGRhdGVMTE1TdGF0dXNCYXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgX3VwZGF0ZUxMTVN0YXR1c0Jhcih0cnVlLCBgR2VuZXJhdGluZyBDVjogJHtzdGVwTGFiZWx9XHUyMDI2YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdGVwcyA9IHByb2dyZXNzLm1hcChwID0+XG4gICAgICAgICAgICAgIGAke3Auc3RhdHVzID09PSAnY29tcGxldGUnID8gJ1x1MjcxMycgOiAnXHUyM0YzJ30gJHtwLnN0ZXAucmVwbGFjZSgvXy9nLCAnICcpfSAke3AuZWxhcHNlZF9tcyA/IGAoJHtwLmVsYXBzZWRfbXN9bXMpYCA6ICcnfWBcbiAgICAgICAgICAgICkuam9pbignIFx1MjAyMiAnKTtcbiAgICAgICAgICAgIGlmIChnZW5lcmF0aW9uTXNnKSBnZW5lcmF0aW9uTXNnLnF1ZXJ5U2VsZWN0b3IoJy5jb250ZW50JykudGV4dENvbnRlbnQgPSBgR2VuZXJhdGluZyBDVjogJHtzdGVwc31gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJvZ3Jlc3MuZXZlcnkocCA9PiBwLnN0YXR1cyA9PT0gJ2NvbXBsZXRlJykgJiYgcHJvZ3Jlc3MubGVuZ3RoID4gMCkgYnJlYWs7XG4gICAgICAgIH0gY2F0Y2ggKF9lKSB7IC8qIHBvbGxpbmcgZXJyb3IgXHUyMDE0IGNvbnRpbnVlICovIH1cbiAgICAgIH1cbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsICdDViBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5ISBSZXZpZXcgeW91ciBsYXlvdXQgYmVsb3cuJyk7XG4gICAgICBzdGF0ZU1hbmFnZXIuc2V0VGFiRGF0YSgnY3YnLCBkYXRhLnJlc3VsdCk7XG4gICAgICByZWZyZXNoQXRzU2NvcmUoJ3Bvc3RfZ2VuZXJhdGlvbicpO1xuICAgICAgc3dpdGNoVGFiKCdsYXlvdXQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgZGF0YS5yZXN1bHQpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cuZXJyb3IoJz09PSBTRU5EIEFDVElPTiBFUlJPUiA9PT0nLCBhY3Rpb24sIGVycm9yKTtcbiAgICByZW1vdmVMb2FkaW5nTWVzc2FnZShsb2FkaW5nTXNnKTtcbiAgICBpZiAoZXJyb3IubmFtZSAhPT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoJ1x1Mjc0QyBFcnJvcjogJyArIGVycm9yLm1lc3NhZ2UsICgpID0+IHNlbmRBY3Rpb24oYWN0aW9uKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0TG9hZGluZyhmYWxzZSk7XG4gIGF3YWl0IGZldGNoU3RhdHVzKCk7XG4gIGlmICh0eXBlb2YgZmV0Y2hBbmREaXNwbGF5TGxtTG9nID09PSAnZnVuY3Rpb24nKSBmZXRjaEFuZERpc3BsYXlMbG1Mb2coKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZVNlc3Npb24oKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3NhdmUnLCB7IG1ldGhvZDogJ1BPU1QnIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBpZiAoZGF0YS5zZXNzaW9uX2ZpbGUpIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLlNFU1NJT05fUEFUSCwgZGF0YS5zZXNzaW9uX2ZpbGUpO1xuICAgICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgJ1Nlc3Npb24gc2F2ZWQgc3VjY2Vzc2Z1bGx5LicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoJ1x1Mjc0QyBFcnJvciBzYXZpbmcgc2Vzc2lvbjogJyArIGRhdGEuZXJyb3IsIHNhdmVTZXNzaW9uKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLmVycm9yKCc9PT0gU0FWRSBTRVNTSU9OIEVSUk9SID09PScsIGVycm9yKTtcbiAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoJ1x1Mjc0QyBFcnJvcjogJyArIGVycm9yLm1lc3NhZ2UsIHNhdmVTZXNzaW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfZm9ybWF0QmFyRGF0ZSh2YWx1ZSkge1xuICBjb25zdCB0ZXh0ID0gU3RyaW5nKHZhbHVlIHx8ICcnKS50cmltKCk7XG4gIGlmICghdGV4dCkgcmV0dXJuICcnO1xuICBpZiAoL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QodGV4dCkpIHtcbiAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSB0ZXh0LnNwbGl0KCctJyk7XG4gICAgcmV0dXJuIGAke21vbnRofS8ke2RheX0vJHt5ZWFyfWA7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUodGV4dCk7XG4gIGlmICghTnVtYmVyLmlzTmFOKHBhcnNlZC5nZXRUaW1lKCkpKSB7XG4gICAgcmV0dXJuIHBhcnNlZC50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTtcbiAgfVxuICByZXR1cm4gdGV4dDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9zaXRpb25UaXRsZShzdGF0dXMgPSB7fSkge1xuICBjb25zdCBwb3NpdGlvbkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bvc2l0aW9uLXRpdGxlJyk7XG4gIGlmICghcG9zaXRpb25FbCkgcmV0dXJuO1xuXG4gIGNvbnN0IGZhbGxiYWNrQnJvd3NlclRpdGxlID0gJ0NWIEJ1aWxkZXIgXHUyMDE0IFByb2Zlc3Npb25hbCBXZWIgVUknO1xuICBsZXQgbGFiZWwgPSAoc3RhdHVzLnBvc2l0aW9uX25hbWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpO1xuICBsZXQgY29tcGFueSA9ICcnO1xuICBsZXQgZGF0ZUFwcGxpZWQgPSAnJztcblxuICBpZiAoIWxhYmVsICYmIHN0YXR1cy5qb2JfYW5hbHlzaXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYW5hbHlzaXMgPSB0eXBlb2Ygc3RhdHVzLmpvYl9hbmFseXNpcyA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBKU09OLnBhcnNlKGNsZWFuSnNvblJlc3BvbnNlKHN0YXR1cy5qb2JfYW5hbHlzaXMpKVxuICAgICAgICA6IHN0YXR1cy5qb2JfYW5hbHlzaXM7XG4gICAgICBjb25zdCB0aXRsZSA9IGFuYWx5c2lzPy5qb2JfdGl0bGUgfHwgYW5hbHlzaXM/LnRpdGxlIHx8IGFuYWx5c2lzPy5wb3NpdGlvbl9uYW1lIHx8ICcnO1xuICAgICAgbGFiZWwgPSBub3JtYWxpemVQb3NpdGlvbkxhYmVsKHRpdGxlLCBhbmFseXNpcz8uY29tcGFueSk7XG4gICAgICBjb21wYW55ID0gKGFuYWx5c2lzPy5jb21wYW55X25hbWUgfHwgYW5hbHlzaXM/LmNvbXBhbnkgfHwgJycpLnRyaW0oKTtcbiAgICAgIGRhdGVBcHBsaWVkID0gX2Zvcm1hdEJhckRhdGUoYW5hbHlzaXM/LmRhdGVfYXBwbGllZCB8fCBhbmFseXNpcz8uYXBwbGljYXRpb25fZGF0ZSB8fCAnJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZy53YXJuKCdGYWlsZWQgdG8gcGFyc2Ugam9iX2FuYWx5c2lzIGZvciB0aXRsZTonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFsYWJlbCAmJiBzdGF0dXMuam9iX2Rlc2NyaXB0aW9uX3RleHQpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBleHRyYWN0VGl0bGVBbmRDb21wYW55RnJvbUpvYlRleHQoc3RhdHVzLmpvYl9kZXNjcmlwdGlvbl90ZXh0KTtcbiAgICBsYWJlbCA9IG5vcm1hbGl6ZVBvc2l0aW9uTGFiZWwocGFyc2VkLnRpdGxlLCBwYXJzZWQuY29tcGFueSk7XG4gICAgaWYgKCFjb21wYW55KSBjb21wYW55ID0gKHBhcnNlZC5jb21wYW55IHx8ICcnKS50cmltKCk7XG4gIH1cblxuICBwb3NpdGlvbkVsLnRleHRDb250ZW50ID0gbGFiZWw7XG4gIGRvY3VtZW50LnRpdGxlID0gbGFiZWwgPyBgJHtsYWJlbH0gXHUyMDE0IENWIEJ1aWxkZXJgIDogZmFsbGJhY2tCcm93c2VyVGl0bGU7XG5cbiAgY29uc3QgcG9zaXRpb25Db21wYW55RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9zaXRpb24tY29tcGFueScpO1xuICBpZiAocG9zaXRpb25Db21wYW55RWwpIHtcbiAgICBjb25zdCBpbnRha2UgPSB3aW5kb3cuX3N0YXR1c0ludGFrZSB8fCB7fTtcbiAgICBjb25zdCBmaW5hbENvbXBhbnkgPSAoaW50YWtlLmNvbXBhbnkgfHwgJycpLnRyaW0oKSB8fCBjb21wYW55O1xuICAgIGNvbnN0IGZpbmFsRGF0ZSA9IGRhdGVBcHBsaWVkIHx8IF9mb3JtYXRCYXJEYXRlKGludGFrZS5kYXRlX2FwcGxpZWQgfHwgJycpO1xuICAgIGNvbnN0IHN1YnRpdGxlID0gW2ZpbmFsQ29tcGFueSwgZmluYWxEYXRlXS5maWx0ZXIoQm9vbGVhbikuam9pbignICBcdTAwQjcgICcpO1xuICAgIHBvc2l0aW9uQ29tcGFueUVsLnRleHRDb250ZW50ID0gc3VidGl0bGU7XG4gICAgcG9zaXRpb25Db21wYW55RWwuc3R5bGUuZGlzcGxheSA9IHN1YnRpdGxlID8gJycgOiAnbm9uZSc7XG4gIH1cblxuICBjb25zdCByZW5hbWVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVuYW1lLXNlc3Npb24tYnRuJyk7XG4gIGlmIChyZW5hbWVCdG4pIHJlbmFtZUJ0bi5zdHlsZS5kaXNwbGF5ID0gbGFiZWwgPyAnJyA6ICdub25lJztcbiAgaWYgKHR5cGVvZiBfdXBkYXRlU2Vzc2lvblN3aXRjaGVySGVhZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgX3VwZGF0ZVNlc3Npb25Td2l0Y2hlckhlYWRlcih7IHBvc2l0aW9uX25hbWU6IGxhYmVsLCBwaGFzZTogc3RhdHVzLnBoYXNlIHx8IG51bGwgfSk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEVTIG1vZHVsZSBleHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZXhwb3J0IHsgc2VuZEFjdGlvbiwgc2F2ZVNlc3Npb24sIHVwZGF0ZVBvc2l0aW9uVGl0bGUsIF9BQ1RJT05fTEFCRUxTIH07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9qb2ItYW5hbHlzaXMuanNcbiAqIEpvYiBhbmFseXNpcyBvcmNoZXN0cmF0aW9uOiBmaXJlcyBhbmFseXplX2pvYiBhY3Rpb24sIG1lcmdlcyBwb3N0LWFuYWx5c2lzXG4gKiBxdWVzdGlvbnMsIGFuZCB0cmFuc2l0aW9ucyB0aGUgVUkgdG8gdGhlIGFuYWx5c2lzIHRhYi5cbiAqXG4gKiBERVBFTkRFTkNJRVMgKGFsbCBvbiBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICAtIHN0YXRlTWFuYWdlciAoc3RhdGUtbWFuYWdlci5qcyBcdTIwMTQgaXNMb2FkaW5nKCkvc2V0VGFiRGF0YSgpKVxuICogICAtIGxsbUZldGNoLCBzZXRMb2FkaW5nIChmZXRjaC11dGlscy5qcylcbiAqICAgLSBhcHBlbmRMb2FkaW5nTWVzc2FnZSwgcmVtb3ZlTG9hZGluZ01lc3NhZ2UsIGFwcGVuZE1lc3NhZ2UsXG4gKiAgICAgYXBwZW5kUmV0cnlNZXNzYWdlLCBhcHBlbmRGb3JtYXR0ZWRBbmFseXNpcyAobWVzc2FnZS1xdWV1ZS5qcylcbiAqICAgLSBwYXJzZU1lc3NhZ2VSZXNwb25zZSAodmFsaWRhdG9ycy5qcylcbiAqICAgLSBhc2tQb3N0QW5hbHlzaXNRdWVzdGlvbnMgKHF1ZXN0aW9ucy1wYW5lbC5qcylcbiAqICAgLSByZWZyZXNoQXRzU2NvcmUgKGF0cy1yZWZpbmVtZW50LmpzKVxuICogICAtIHN3aXRjaFRhYiAocmV2aWV3LXRhYmxlLWJhc2UuanMsIFRpZXIgNClcbiAqICAgLSBmZXRjaFN0YXR1cyAoYXBwLmpzIG9yY2hlc3RyYXRvciwgVGllciA4KVxuICogICAtIF9zaG93SW50YWtlQ29uZmlybUNhcmQsIF9wcm9jZWVkQWZ0ZXJJbnRha2UgKG1lc3NhZ2UtZGlzcGF0Y2guanMsIFRpZXIgMylcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ2pvYi1hbmFseXNpcycpO1xuXG5pbXBvcnQgeyBTdG9yYWdlS2V5cyB9IGZyb20gJy4vYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBvc3QtYW5hbHlzaXMgcXVlc3Rpb24gaGVscGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBOb3JtYWxpc2UgYSByYXcgcXVlc3Rpb25zIGFycmF5IHRvIFt7cXVlc3Rpb24sIHR5cGUsIGNob2ljZXN9XS4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBvc3RBbmFseXNpc1F1ZXN0aW9ucyhyYXdRdWVzdGlvbnMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhd1F1ZXN0aW9ucykpIHJldHVybiBbXTtcbiAgcmV0dXJuIHJhd1F1ZXN0aW9uc1xuICAgIC5maWx0ZXIocSA9PiBxICYmIHR5cGVvZiBxLnF1ZXN0aW9uID09PSAnc3RyaW5nJyAmJiBxLnF1ZXN0aW9uLnRyaW0oKSlcbiAgICAubWFwKChxLCBpZHgpID0+ICh7XG4gICAgICBxdWVzdGlvbjogcS5xdWVzdGlvbi50cmltKCksXG4gICAgICB0eXBlOiAgICAgKHEudHlwZSB8fCBgY2xhcmlmaWNhdGlvbl8ke2lkeCArIDF9YCkudG9TdHJpbmcoKSxcbiAgICAgIGNob2ljZXM6ICBBcnJheS5pc0FycmF5KHEuY2hvaWNlcykgPyBxLmNob2ljZXMgOiBbXSxcbiAgICB9KSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCBudW1iZXJlZC1saXN0IHF1ZXN0aW9ucyBmcm9tIHVuc3RydWN0dXJlZCBhc3Npc3RhbnQgdGV4dC5cbiAqIFJldHVybnMgYXQgbW9zdCA0IHF1ZXN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFN0cnVjdHVyZWRRdWVzdGlvbnNGcm9tQXNzaXN0YW50VGV4dCh0ZXh0KSB7XG4gIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycgfHwgIXRleHQudHJpbSgpKSByZXR1cm4gW107XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB0ZXh0LnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJyk7XG4gIGNvbnN0IGJsb2NrcyA9IG5vcm1hbGl6ZWQuc3BsaXQoL15cXHMqXFxkK1xcLlxccysvbSk7XG4gIGlmIChibG9ja3MubGVuZ3RoIDw9IDEpIHJldHVybiBbXTtcbiAgcmV0dXJuIGJsb2Nrc1xuICAgIC5zbGljZSgxKVxuICAgIC5tYXAoKGJsb2NrLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gYmxvY2sudHJpbSgpO1xuICAgICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4geyBxdWVzdGlvbjogcXVlc3Rpb24uc2xpY2UoMCwgNDAwMCksIHR5cGU6IGBjbGFyaWZpY2F0aW9uXyR7aWR4ICsgMX1gLCBjaG9pY2VzOiBbXSB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5zbGljZSgwLCA0KTtcbn1cblxuLyoqXG4gKiBNZXJnZSBzZXJ2ZXItcHJvdmlkZWQgcXVlc3Rpb25zIHdpdGggdGhvc2UgZXh0cmFjdGVkIGZyb20gdGhlIGFzc2lzdGFudCB0ZXh0LFxuICogZGUtZHVwbGljYXRpbmcgYnkgcXVlc3Rpb24gdGV4dCBhbmQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VQb3N0QW5hbHlzaXNRdWVzdGlvbnMoZXhpc3RpbmdRdWVzdGlvbnMsIGluY29taW5nUXVlc3Rpb25zKSB7XG4gIGNvbnN0IGV4aXN0aW5nID0gbm9ybWFsaXplUG9zdEFuYWx5c2lzUXVlc3Rpb25zKGV4aXN0aW5nUXVlc3Rpb25zKTtcbiAgY29uc3QgaW5jb21pbmcgPSBub3JtYWxpemVQb3N0QW5hbHlzaXNRdWVzdGlvbnMoaW5jb21pbmdRdWVzdGlvbnMpO1xuXG4gIGNvbnN0IG1lcmdlZCAgICAgICAgPSBbLi4uZXhpc3RpbmddO1xuICBjb25zdCBzZWVuQnlRdWVzdGlvbiA9IG5ldyBTZXQoZXhpc3RpbmcubWFwKHEgPT4gcS5xdWVzdGlvbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCkpKTtcbiAgY29uc3QgdXNlZFR5cGVzICAgICAgPSBuZXcgU2V0KGV4aXN0aW5nLm1hcChxID0+IHEudHlwZSkpO1xuXG4gIGluY29taW5nLmZvckVhY2goKHEsIGlkeCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IHEucXVlc3Rpb24udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuICAgIGlmICgha2V5IHx8IHNlZW5CeVF1ZXN0aW9uLmhhcyhrZXkpKSByZXR1cm47XG4gICAgbGV0IHR5cGUgPSBxLnR5cGUgfHwgYGNsYXJpZmljYXRpb25fJHttZXJnZWQubGVuZ3RoICsgaWR4ICsgMX1gO1xuICAgIGlmICh1c2VkVHlwZXMuaGFzKHR5cGUpKSB0eXBlID0gYCR7dHlwZX1fJHttZXJnZWQubGVuZ3RoICsgaWR4ICsgMX1gO1xuICAgIG1lcmdlZC5wdXNoKHsgcXVlc3Rpb246IHEucXVlc3Rpb24sIHR5cGUsIGNob2ljZXM6IEFycmF5LmlzQXJyYXkocS5jaG9pY2VzKSA/IHEuY2hvaWNlcyA6IFtdIH0pO1xuICAgIHNlZW5CeVF1ZXN0aW9uLmFkZChrZXkpO1xuICAgIHVzZWRUeXBlcy5hZGQodHlwZSk7XG4gIH0pO1xuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gYW5hbHl6ZUpvYlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmFzeW5jIGZ1bmN0aW9uIGFuYWx5emVKb2IoKSB7XG4gIGlmIChzdGF0ZU1hbmFnZXIuaXNMb2FkaW5nKCkpIHJldHVybjtcblxuICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKFN0b3JhZ2VLZXlzLkxMTV9ESVNDTE9TVVJFX1NIT1dOKSkge1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsICdcdTIxMzlcdUZFMEYgQ29udGVudCB5b3Ugc3VibWl0IGlzIHNlbnQgdG8gdGhlIGNvbmZpZ3VyZWQgTExNIHByb3ZpZGVyIGZvciBhbmFseXNpcy4gUmV2aWV3IHlvdXIgcHJvdmlkZXJcXCdzIGRhdGEgcG9saWN5IGZvciBkZXRhaWxzLicpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLkxMTV9ESVNDTE9TVVJFX1NIT1dOLCAnMScpO1xuICB9XG5cbiAgY29uc3QgbG9hZGluZ01zZyA9IGFwcGVuZExvYWRpbmdNZXNzYWdlKCdBbmFseXppbmcgam9iIGRlc2NyaXB0aW9uLi4uJyk7XG4gIHNldExvYWRpbmcodHJ1ZSwgJ0FuYWx5c2luZyBqb2IgZGVzY3JpcHRpb25cdTIwMjYnKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBsbG1GZXRjaCgnL2FwaS9hY3Rpb24nLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY3Rpb246ICdhbmFseXplX2pvYicgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlTWVzc2FnZVJlc3BvbnNlKGF3YWl0IHJlcy5qc29uKCkpO1xuXG4gICAgcmVtb3ZlTG9hZGluZ01lc3NhZ2UobG9hZGluZ01zZyk7XG5cbiAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI3NEMgRXJyb3I6ICcgKyBkYXRhLmVycm9yLCBhbmFseXplSm9iKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzdWx0ICAgICAgID0gZGF0YS5yZXN1bHQ7XG4gICAgICBjb25zdCBhbmFseXNpc1RleHQgPSB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/IHJlc3VsdCA6IChyZXN1bHQ/LnRleHQpIHx8IG51bGw7XG4gICAgICBjb25zdCBhbmFseXNpc0RhdGEgPSB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQgIT09IG51bGxcbiAgICAgICAgPyAocmVzdWx0LmNvbnRleHRfZGF0YT8uam9iX2FuYWx5c2lzID8/IHJlc3VsdClcbiAgICAgICAgOiByZXN1bHQ7XG4gICAgICBjb25zdCBjb250ZXh0UXVlc3Rpb25zID0gKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdCAhPT0gbnVsbClcbiAgICAgICAgPyByZXN1bHQuY29udGV4dF9kYXRhPy5wb3N0X2FuYWx5c2lzX3F1ZXN0aW9uc1xuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBzdHJ1Y3R1cmVkUXVlc3Rpb25zID0gbWVyZ2VQb3N0QW5hbHlzaXNRdWVzdGlvbnMoXG4gICAgICAgIGNvbnRleHRRdWVzdGlvbnMsXG4gICAgICAgIChjb250ZXh0UXVlc3Rpb25zICYmIGNvbnRleHRRdWVzdGlvbnMubGVuZ3RoID4gMClcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiBleHRyYWN0U3RydWN0dXJlZFF1ZXN0aW9uc0Zyb21Bc3Npc3RhbnRUZXh0KGFuYWx5c2lzVGV4dCksXG4gICAgICApO1xuXG4gICAgICBpZiAoYW5hbHlzaXNUZXh0KSBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCBhbmFseXNpc1RleHQpO1xuICAgICAgYXBwZW5kRm9ybWF0dGVkQW5hbHlzaXMoYW5hbHlzaXNEYXRhKTtcbiAgICAgIHN0YXRlTWFuYWdlci5zZXRUYWJEYXRhKCdhbmFseXNpcycsIGFuYWx5c2lzRGF0YSk7XG4gICAgICByZWZyZXNoQXRzU2NvcmUoJ2FuYWx5c2lzJyk7XG4gICAgICBzd2l0Y2hUYWIoJ2FuYWx5c2lzJyk7XG5cbiAgICAgIGNvbnN0IGNvbnRpbnVlQWZ0ZXJJbnRha2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGFza1Bvc3RBbmFseXNpc1F1ZXN0aW9ucyhhbmFseXNpc0RhdGEsIHN0cnVjdHVyZWRRdWVzdGlvbnMpO1xuICAgICAgfTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaW50YWtlUmVzICA9IGF3YWl0IGxsbUZldGNoKCcvYXBpL2ludGFrZS1tZXRhZGF0YScpO1xuICAgICAgICBjb25zdCBpbnRha2VEYXRhID0gYXdhaXQgaW50YWtlUmVzLmpzb24oKTtcbiAgICAgICAgaWYgKGludGFrZURhdGEuY29uZmlybWVkKSB7XG4gICAgICAgICAgYXdhaXQgX3Byb2NlZWRBZnRlckludGFrZShjb250aW51ZUFmdGVySW50YWtlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBfc2hvd0ludGFrZUNvbmZpcm1DYXJkKGNvbnRpbnVlQWZ0ZXJJbnRha2UpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfZSkge1xuICAgICAgICBhd2FpdCBjb250aW51ZUFmdGVySW50YWtlKCk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcignPT09IEFOQUxZWkUgSk9CIEVSUk9SID09PScsIGVycm9yKTtcbiAgICByZW1vdmVMb2FkaW5nTWVzc2FnZShsb2FkaW5nTXNnKTtcbiAgICBpZiAoZXJyb3IubmFtZSAhPT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoJ1x1Mjc0QyBFcnJvcjogJyArIGVycm9yLm1lc3NhZ2UsIGFuYWx5emVKb2IpO1xuICAgIH1cbiAgfVxuXG4gIHNldExvYWRpbmcoZmFsc2UpO1xuICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uLXRpdGxlIGJhciB3aXRoIHRoZSBsYXRlc3Qgc2Vzc2lvbiBuYW1lIGFmdGVyIGFuYWx5c2lzLlxuICB0cnkge1xuICAgIGNvbnN0IGxhdGVzdFN0YXR1cyA9IGF3YWl0IGZldGNoU3RhdHVzKCk7XG4gICAgaWYgKGxhdGVzdFN0YXR1cyAmJiB0eXBlb2YgdXBkYXRlUG9zaXRpb25UaXRsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdXBkYXRlUG9zaXRpb25UaXRsZShsYXRlc3RTdGF0dXMpO1xuICAgIH1cbiAgfSBjYXRjaCAoX2UpIHsgLyogbm9uLWZhdGFsICovIH1cbiAgaWYgKHR5cGVvZiBmZXRjaEFuZERpc3BsYXlMbG1Mb2cgPT09ICdmdW5jdGlvbicpIGZldGNoQW5kRGlzcGxheUxsbUxvZygpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgRVMgbW9kdWxlIGV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICBub3JtYWxpemVQb3N0QW5hbHlzaXNRdWVzdGlvbnMsXG4gIGV4dHJhY3RTdHJ1Y3R1cmVkUXVlc3Rpb25zRnJvbUFzc2lzdGFudFRleHQsXG4gIG1lcmdlUG9zdEFuYWx5c2lzUXVlc3Rpb25zLFxuICBhbmFseXplSm9iLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL2dvYWxzLmpzIFx1MjAxNCBHZW5lcmF0aW9uIEdvYWxzIGNvbmZpZ3VyYXRpb24gdGFiLlxuICpcbiAqIEFsbG93cyB0aGUgdXNlciB0byBzZXQgZG9jdW1lbnQtbGVuZ3RoIGFuZCBjaGFyYWN0ZXItY291bnQgY29uc3RyYWludHMgdGhhdFxuICogYXJlIGluamVjdGVkIGludG8gZXZlcnkgTExNIHByb21wdCBhbmQgdXNlZCB0byBjb250cm9sIHRoZSBmaW5hbCBQREYgbGVuZ3RoLlxuICpcbiAqIEZpZWxkczpcbiAqICAgcGRmX3BhZ2VzX2VuYWJsZWQgICAgXHUyMDE0IHdoZXRoZXIgdGhlIFBERiBwYWdlIGdvYWwgaXMgYWN0aXZlXG4gKiAgIG1heF9wZGZfcGFnZXNfbW9kZSAgIFx1MjAxNCAnY29tYmluZWQnIHwgJ3NwbGl0J1xuICogICBtYXhfcGRmX3BhZ2VzICAgICAgICBcdTIwMTQgY29tYmluZWQgdG90YWwgUERGIHBhZ2UgZ29hbCAobW9kZT1jb21iaW5lZClcbiAqICAgbWF4X3BkZl9yZXN1bWVfcGFnZXMgXHUyMDE0IHJlc3VtZS1wb3J0aW9uIHBhZ2UgZ29hbCAobW9kZT1zcGxpdClcbiAqICAgbWF4X3BkZl9jdl9wYWdlcyAgICAgXHUyMDE0IENWL3B1YmxpY2F0aW9ucyBwb3J0aW9uIHBhZ2UgZ29hbCAobW9kZT1zcGxpdClcbiAqICAgYXRzX3BhZ2VzX2VuYWJsZWQgICAgXHUyMDE0IHdoZXRoZXIgdGhlIEFUUyBwYWdlIGdvYWwgaXMgYWN0aXZlXG4gKiAgIG1heF9hdHNfcGFnZXMgICAgICAgIFx1MjAxNCB0YXJnZXQgcGFnZSBjb3VudCBmb3IgQVRTIHBsYWluLXRleHQgb3V0cHV0XG4gKiAgIGF0c19jaGFyc19lbmFibGVkICAgIFx1MjAxNCB3aGV0aGVyIHRoZSBBVFMgY2hhcmFjdGVyIGxpbWl0IGlzIGFjdGl2ZSAoZGVmYXVsdCBmYWxzZSlcbiAqICAgbWF4X2F0c19jaGFycyAgICAgICAgXHUyMDE0IG1heGltdW0gY2hhcmFjdGVycyAoaW5jbHVkaW5nIHNwYWNlcykgZm9yIEFUUyB0ZXh0XG4gKlxuICogRWFjaCBnb2FsIGhhcyBhIGNoZWNrYm94IHRvIGVuYWJsZSBvciBkaXNhYmxlIGl0OyBkaXNhYmxlZCBnb2FscyBhcmUgbm90XG4gKiBzZW50IHRvIHRoZSBiYWNrZW5kIGFuZCBhcmUgbm90IGluamVjdGVkIGludG8gcHJvbXB0cy5cbiAqXG4gKiBERVBFTkRFTkNJRVMgKGF2YWlsYWJsZSBvbiBnbG9iYWxUaGlzIHZpYSBtYWluLmpzKTpcbiAqICAgYXBpQ2FsbCAoYXBpLWNsaWVudC5qcylcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5cbmNvbnN0IGxvZyA9IGdldExvZ2dlcignZ29hbHMnKTtcblxuY29uc3QgR09BTFNfREVGQVVMVFMgPSB7XG4gIHBkZl9wYWdlc19lbmFibGVkOiAgICB0cnVlLFxuICBtYXhfcGRmX3BhZ2VzX21vZGU6ICAgJ2NvbWJpbmVkJyxcbiAgbWF4X3BkZl9wYWdlczogICAgICAgIDIsXG4gIG1heF9wZGZfcmVzdW1lX3BhZ2VzOiAyLFxuICBtYXhfcGRmX2N2X3BhZ2VzOiAgICAgMSxcbiAgYXRzX3BhZ2VzX2VuYWJsZWQ6ICAgIHRydWUsXG4gIG1heF9hdHNfcGFnZXM6ICAgICAgICAxLFxuICBhdHNfY2hhcnNfZW5hYmxlZDogICAgZmFsc2UsXG4gIG1heF9hdHNfY2hhcnM6ICAgICAgICA1MDAwLFxufTtcblxuLyoqIFNoYXJlZCBpbmxpbmUgc3R5bGVzICovXG5jb25zdCBTID0ge1xuICBzZWN0aW9uOiAgICAnbWFyZ2luLWJvdHRvbToyMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLCNlMGUwZTApO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTZweCcsXG4gIGhlYWRlcjogICAgICdkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O21hcmdpbi1ib3R0b206MTJweCcsXG4gIGNoZWNrYm94OiAgICd3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2N1cnNvcjpwb2ludGVyO2ZsZXgtc2hyaW5rOjAnLFxuICBsYWJlbDogICAgICAnZm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxcmVtO2N1cnNvcjpwb2ludGVyO21hcmdpbjowJyxcbiAgaGludDogICAgICAgJ2ZvbnQtc2l6ZTowLjg3NXJlbTtjb2xvcjp2YXIoLS10ZXh0LXNlY29uZGFyeSwjNTU1KTttYXJnaW46MCAwIDhweCcsXG4gIG51bUlucHV0OiAgICdwYWRkaW5nOjZweCAxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyLCNjY2MpO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtc2l6ZToxcmVtJyxcbiAgcm93OiAgICAgICAgJ2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweCcsXG4gIG11dGVkOiAgICAgICdjb2xvcjp2YXIoLS10ZXh0LXNlY29uZGFyeSwjNTU1KScsXG4gIHJhZGlvTGFiZWw6ICdkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6OHB4O2N1cnNvcjpwb2ludGVyJyxcbiAgcmFkaW9JbnB1dDogJ21hcmdpbi10b3A6M3B4Jyxcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwb3B1bGF0ZUdvYWxzVGFiKCkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250ZW50KSByZXR1cm47XG5cbiAgY29udGVudC5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBjbGFzcz1cImdvYWxzLXBhbmVsXCIgc3R5bGU9XCJtYXgtd2lkdGg6NjQwcHg7bWFyZ2luOjAgYXV0bztwYWRkaW5nOjI4cHggMjRweFwiPlxuICAgICAgPGgyIHN0eWxlPVwibWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206OHB4XCI+XHVEODNDXHVERkFGIEdlbmVyYXRpb24gR29hbHM8L2gyPlxuICAgICAgPHAgc3R5bGU9XCIke1MubXV0ZWR9O21hcmdpbi1ib3R0b206MjRweDtsaW5lLWhlaWdodDoxLjVcIj5cbiAgICAgICAgU2V0IG9wdGlvbmFsIGxlbmd0aCBjb25zdHJhaW50cyBmb3IgdGhlIGdlbmVyYXRlZCBDVi5cbiAgICAgICAgQ2hlY2sgZWFjaCBnb2FsIHlvdSB3YW50IHRvIGVuZm9yY2U7IHVuY2hlY2tlZCBnb2FscyBhcmUgaWdub3JlZC5cbiAgICAgICAgVGhlc2UgZ3VpZGUgdGhlIEFJIGF0IGV2ZXJ5IGVkaXRpbmcgc3RhZ2UgYW5kIGNvbnRyb2wgdGhlIGZpbmFsIGRvY3VtZW50IGxlbmd0aC5cbiAgICAgIDwvcD5cblxuICAgICAgPCEtLSBcdTI1MDBcdTI1MDAgUERGIFBhZ2UgTGVuZ3RoIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb2Fscy1zZWN0aW9uXCIgc3R5bGU9XCIke1Muc2VjdGlvbn1cIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIiR7Uy5oZWFkZXJ9XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiZ29hbHMtcGRmLWVuYWJsZWRcIlxuICAgICAgICAgICAgICAgICBvbmNoYW5nZT1cImdvYWxzVG9nZ2xlU2VjdGlvbigncGRmJylcIlxuICAgICAgICAgICAgICAgICBjaGVja2VkIHN0eWxlPVwiJHtTLmNoZWNrYm94fVwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJnb2Fscy1wZGYtZW5hYmxlZFwiIHN0eWxlPVwiJHtTLmxhYmVsfVwiPlBERiBQYWdlIExlbmd0aDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwiZ29hbHMtcGRmLWJvZHlcIj5cbiAgICAgICAgICA8cCBzdHlsZT1cIiR7Uy5oaW50fVwiPlxuICAgICAgICAgICAgVGFyZ2V0IHBhZ2UgY291bnQgZm9yIHRoZSBodW1hbi1yZWFkYWJsZSBQREYgKGUuZy4gMVx1MjAxMzMpLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTJweFwiPlxuXG4gICAgICAgICAgICA8IS0tIFx1MjUwMFx1MjUwMCBTaW5nbGUgdG90YWwgb3B0aW9uIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCAtLT5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cIiR7Uy5yYWRpb0xhYmVsfVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiZ29hbHMtcGRmLW1vZGVcIiB2YWx1ZT1cImNvbWJpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJnb2Fscy1wZGYtbW9kZS1jb21iaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPVwiZ29hbHNVcGRhdGVQZGZNb2RlKClcIiBjaGVja2VkXG4gICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiJHtTLnJhZGlvSW5wdXR9XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPlNpbmdsZSB0b3RhbDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowLjg3NXJlbTske1MubXV0ZWR9O21hcmdpbi10b3A6MnB4XCI+XG4gICAgICAgICAgICAgICAgICAgIE9uZSBwYWdlIGdvYWwgY292ZXJpbmcgdGhlIGVudGlyZSBkb2N1bWVudCwgaW5jbHVkaW5nXG4gICAgICAgICAgICAgICAgICAgIHB1YmxpY2F0aW9ucyBhbmQgY2l0YXRpb25zLlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBpZD1cImdvYWxzLXBkZi1jb21iaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6MjRweDttYXJnaW4tdG9wOjhweDske1Mucm93fVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJnb2Fscy1tYXgtcGRmLXBhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiIG1heD1cIjEwXCIgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7R09BTFNfREVGQVVMVFMubWF4X3BkZl9wYWdlc31cIlxuICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjkwcHg7JHtTLm51bUlucHV0fVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiJHtTLm11dGVkfVwiPnBhZ2VzIHRvdGFsPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFx1MjUwMFx1MjUwMCBTcGxpdCBwb3J0aW9ucyBvcHRpb24gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIC0tPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPVwiJHtTLnJhZGlvTGFiZWx9XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJnb2Fscy1wZGYtbW9kZVwiIHZhbHVlPVwic3BsaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICBpZD1cImdvYWxzLXBkZi1tb2RlLXNwbGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9XCJnb2Fsc1VwZGF0ZVBkZk1vZGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiJHtTLnJhZGlvSW5wdXR9XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPlNwbGl0IHBvcnRpb25zPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjAuODc1cmVtOyR7Uy5tdXRlZH07bWFyZ2luLXRvcDoycHhcIj5cbiAgICAgICAgICAgICAgICAgICAgU2VwYXJhdGUgcGFnZSBnb2FscyBmb3IgdGhlIHJlc3VtZSBwb3J0aW9uIChleHBlcmllbmNlLCBza2lsbHMpXG4gICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgQ1YvcHVibGljYXRpb25zIHBvcnRpb24gKGNpdGF0aW9ucywgcHVibGljYXRpb25zKS5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXYgaWQ9XCJnb2Fscy1wZGYtc3BsaXRcIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1sZWZ0OjI0cHg7bWFyZ2luLXRvcDo4cHg7ZGlzcGxheTpub25lO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIiR7Uy5yb3d9XCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJtaW4td2lkdGg6MTg1cHg7Zm9udC1zaXplOjAuOXJlbVwiPlJlc3VtZSBwb3J0aW9uOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiZ29hbHMtbWF4LXBkZi1yZXN1bWUtcGFnZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIiBtYXg9XCIxMFwiIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7R09BTFNfREVGQVVMVFMubWF4X3BkZl9yZXN1bWVfcGFnZXN9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjkwcHg7JHtTLm51bUlucHV0fVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCIke1MubXV0ZWR9XCI+cGFnZXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIiR7Uy5yb3d9XCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJtaW4td2lkdGg6MTg1cHg7Zm9udC1zaXplOjAuOXJlbVwiPkNWIC8gUHVibGljYXRpb25zIHBvcnRpb246PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJnb2Fscy1tYXgtcGRmLWN2LXBhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCIgbWF4PVwiMTBcIiBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke0dPQUxTX0RFRkFVTFRTLm1heF9wZGZfY3ZfcGFnZXN9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjkwcHg7JHtTLm51bUlucHV0fVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCIke1MubXV0ZWR9XCI+cGFnZXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj48IS0tIGVuZCBtb2RlIG9wdGlvbnMgY29sdW1uIC0tPlxuICAgICAgICA8L2Rpdj48IS0tIGVuZCBnb2Fscy1wZGYtYm9keSAtLT5cbiAgICAgIDwvZGl2PjwhLS0gZW5kIFBERiBzZWN0aW9uIC0tPlxuXG4gICAgICA8IS0tIFx1MjUwMFx1MjUwMCBBVFMgUGxhaW4tVGV4dCBQYWdlIExlbmd0aCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ29hbHMtc2VjdGlvblwiIHN0eWxlPVwiJHtTLnNlY3Rpb259XCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCIke1MuaGVhZGVyfVwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImdvYWxzLWF0cy1wYWdlcy1lbmFibGVkXCJcbiAgICAgICAgICAgICAgICAgb25jaGFuZ2U9XCJnb2Fsc1RvZ2dsZVNlY3Rpb24oJ2F0cy1wYWdlcycpXCJcbiAgICAgICAgICAgICAgICAgY2hlY2tlZCBzdHlsZT1cIiR7Uy5jaGVja2JveH1cIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZ29hbHMtYXRzLXBhZ2VzLWVuYWJsZWRcIiBzdHlsZT1cIiR7Uy5sYWJlbH1cIj5BVFMgUGxhaW4tVGV4dCBQYWdlIExlbmd0aDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwiZ29hbHMtYXRzLXBhZ2VzLWJvZHlcIj5cbiAgICAgICAgICA8cCBzdHlsZT1cIiR7Uy5oaW50fVwiPlxuICAgICAgICAgICAgVGFyZ2V0IG51bWJlciBvZiBwYWdlcyBmb3IgdGhlIEFUUy1vcHRpbWlzZWQgcGxhaW4tdGV4dCBvdXRwdXQgKHR5cGljYWxseSAxXHUyMDEzMikuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCIke1Mucm93fVwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImdvYWxzLW1heC1hdHMtcGFnZXNcIlxuICAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIiBtYXg9XCI1XCIgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtHT0FMU19ERUZBVUxUUy5tYXhfYXRzX3BhZ2VzfVwiXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDo5MHB4OyR7Uy5udW1JbnB1dH1cIj5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiJHtTLm11dGVkfVwiPnBhZ2VzPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFx1MjUwMFx1MjUwMCBBVFMgQ2hhcmFjdGVyIENvdW50IChkaXNhYmxlZCBieSBkZWZhdWx0KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ29hbHMtc2VjdGlvblwiIHN0eWxlPVwiJHtTLnNlY3Rpb259O21hcmdpbi1ib3R0b206MjhweFwiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiJHtTLmhlYWRlcn1cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJnb2Fscy1hdHMtY2hhcnMtZW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgIG9uY2hhbmdlPVwiZ29hbHNUb2dnbGVTZWN0aW9uKCdhdHMtY2hhcnMnKVwiXG4gICAgICAgICAgICAgICAgIHN0eWxlPVwiJHtTLmNoZWNrYm94fVwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJnb2Fscy1hdHMtY2hhcnMtZW5hYmxlZFwiIHN0eWxlPVwiJHtTLmxhYmVsfVwiPkFUUyBDaGFyYWN0ZXIgQ291bnQgTGltaXQ8L2xhYmVsPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuOHJlbTske1MubXV0ZWR9O2ZvbnQtc3R5bGU6aXRhbGljXCI+KG9wdGlvbmFsIFx1MjAxNCB1bmNvbW1vbik8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwiZ29hbHMtYXRzLWNoYXJzLWJvZHlcIiBzdHlsZT1cIm9wYWNpdHk6MC40O3BvaW50ZXItZXZlbnRzOm5vbmVcIj5cbiAgICAgICAgICA8cCBzdHlsZT1cIiR7Uy5oaW50fVwiPlxuICAgICAgICAgICAgTWF4aW11bSBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgc3BhY2VzKSBpbiB0aGUgQVRTIHBsYWluLXRleHQgb3V0cHV0LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiJHtTLnJvd31cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJnb2Fscy1tYXgtYXRzLWNoYXJzXCJcbiAgICAgICAgICAgICAgICAgICBtaW49XCI1MDBcIiBtYXg9XCIyMDAwMFwiIHN0ZXA9XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtHT0FMU19ERUZBVUxUUy5tYXhfYXRzX2NoYXJzfVwiXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMTBweDske1MubnVtSW5wdXR9XCI+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIiR7Uy5tdXRlZH1cIj5jaGFyYWN0ZXJzPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFx1MjUwMFx1MjUwMCBHZW5lcmF0aW9uIFNldHRpbmdzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb2Fscy1zZWN0aW9uXCIgc3R5bGU9XCIke1Muc2VjdGlvbn07bWFyZ2luLWJvdHRvbToyOHB4XCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCIke1MuaGVhZGVyfVwiPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjEuMXJlbVwiPlx1MjY5OVx1RkUwRjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIiR7Uy5sYWJlbH1cIj5HZW5lcmF0aW9uIFNldHRpbmdzPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHAgc3R5bGU9XCIke1MuaGludH1cIj5cbiAgICAgICAgICBDb250cm9scyB0aGUgc2hhcGUgb2YgdGhlIGdlbmVyYXRlZCBDViBcdTIwMTQgYXBwbGllZCBkdXJpbmcgY3VzdG9taXphdGlvbiBhbmQgcmV3cml0ZSBzdGVwcy5cbiAgICAgICAgPC9wPlxuXG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxNHB4XCI+XG4gICAgICAgICAgPCEtLSBNYXggc2tpbGxzIC0tPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwXCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiZ29hbHMtbWF4LXNraWxscy1pbnB1dFwiIHN0eWxlPVwiZm9udC1zaXplOjAuOXJlbTtjb2xvcjojNGI1NTYzO3doaXRlLXNwYWNlOm5vd3JhcDttaW4td2lkdGg6MTYwcHhcIj5cbiAgICAgICAgICAgICAgTWF4IHNraWxscyBpbiBDVjpcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgaWQ9XCJnb2Fscy1tYXgtc2tpbGxzLWlucHV0XCIgbWluPVwiMVwiIG1heD1cIjYwXCIgc3RlcD1cIjFcIiB2YWx1ZT1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICBvbmlucHV0PVwiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLW1heC1za2lsbHMtdmFsdWUnKS50ZXh0Q29udGVudD10aGlzLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICBvbmNoYW5nZT1cImdvYWxzQXV0b1NhdmVTZXR0aW5ncygpXCJcbiAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZsZXg6MTttaW4td2lkdGg6MTIwcHg7YWNjZW50LWNvbG9yOiMzYjgyZjZcIj5cbiAgICAgICAgICAgIDxzcGFuIGlkPVwiZ29hbHMtbWF4LXNraWxscy12YWx1ZVwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxZTI5M2I7bWluLXdpZHRoOjJlbTt0ZXh0LWFsaWduOnJpZ2h0XCI+MjA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjgyZW07JHtTLm11dGVkfVwiPihkZWZhdWx0OiAyMCk8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFNraWxscyBzZWN0aW9uIHRpdGxlIC0tPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwXCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiZ29hbHMtc2tpbGxzLXRpdGxlLXNlbGVjdFwiIHN0eWxlPVwiZm9udC1zaXplOjAuOXJlbTtjb2xvcjojNGI1NTYzO3doaXRlLXNwYWNlOm5vd3JhcDttaW4td2lkdGg6MTYwcHhcIj5cbiAgICAgICAgICAgICAgU2tpbGxzIHNlY3Rpb24gdGl0bGU6XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cImdvYWxzLXNraWxscy10aXRsZS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBvbmNoYW5nZT1cImdvYWxzT25Ta2lsbHNUaXRsZVNlbGVjdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MC45ZW07Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6NHB4IDhweDtjb2xvcjojMWUyOTNiXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJTa2lsbHNcIj5Ta2lsbHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlRlY2huaWNhbCBTa2lsbHNcIj5UZWNobmljYWwgU2tpbGxzPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJLZXkgU2tpbGxzXCI+S2V5IFNraWxsczwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQ29yZSBTa2lsbHNcIj5Db3JlIFNraWxsczwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiX19jdXN0b21fX1wiPkN1c3RvbVx1MjAyNjwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImdvYWxzLXNraWxscy10aXRsZS1jdXN0b21cIiBwbGFjZWhvbGRlcj1cIkVudGVyIGN1c3RvbSB0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9XCJnb2Fsc0F1dG9TYXZlU2V0dGluZ3MoKVwiXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5Om5vbmU7Zm9udC1zaXplOjAuOWVtO2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjRweCA4cHg7Y29sb3I6IzFlMjkzYjttaW4td2lkdGg6MTYwcHhcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGlkPVwiZ29hbHMtc2V0dGluZ3Mtc3RhdHVzXCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZTowLjgycmVtO3RyYW5zaXRpb246Y29sb3IgMC4yc1wiPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IHN0eWxlPVwiJHtTLnJvd307Z2FwOjE0cHhcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cInNhdmUtZ29hbHMtYnRuXCJcbiAgICAgICAgICAgICAgICBvbmNsaWNrPVwic2F2ZUdlbmVyYXRpb25Hb2FscygpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6OHB4IDIycHg7Zm9udC1zaXplOjAuOTVyZW1cIj5cbiAgICAgICAgICBTYXZlIEdvYWxzXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3BhbiBpZD1cImdvYWxzLXN0YXR1c1wiXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOjAuODc1cmVtO3RyYW5zaXRpb246Y29sb3IgMC4yc1wiPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuXG4gIC8vIFJlc3RvcmUgc2F2ZWQgZ29hbHMgZnJvbSB0aGUgYmFja2VuZCBzZXNzaW9uIHN0YXRlLlxuICBhd2FpdCBfbG9hZEdvYWxzRnJvbVN0YXR1cygpO1xufVxuXG4vKipcbiAqIFRvZ2dsZSB0aGUgZW5hYmxlZC9kaXNhYmxlZCBhcHBlYXJhbmNlIG9mIGEgZ29hbCBzZWN0aW9uLlxuICogRXhwb3J0ZWQgc28gdGhlIGlubGluZSBvbmNoYW5nZT1cImdvYWxzVG9nZ2xlU2VjdGlvbiguLi4pXCIgaGFuZGxlcnMgd29yay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdvYWxzVG9nZ2xlU2VjdGlvbihzZWN0aW9uKSB7XG4gIGNvbnN0IE1BUCA9IHtcbiAgICAncGRmJzogICAgICAgeyBjYjogJ2dvYWxzLXBkZi1lbmFibGVkJywgICAgICAgYm9keTogJ2dvYWxzLXBkZi1ib2R5JyAgICAgICB9LFxuICAgICdhdHMtcGFnZXMnOiB7IGNiOiAnZ29hbHMtYXRzLXBhZ2VzLWVuYWJsZWQnLCBib2R5OiAnZ29hbHMtYXRzLXBhZ2VzLWJvZHknIH0sXG4gICAgJ2F0cy1jaGFycyc6IHsgY2I6ICdnb2Fscy1hdHMtY2hhcnMtZW5hYmxlZCcsIGJvZHk6ICdnb2Fscy1hdHMtY2hhcnMtYm9keScgfSxcbiAgfTtcbiAgY29uc3Qgc2VsID0gTUFQW3NlY3Rpb25dO1xuICBpZiAoIXNlbCkgcmV0dXJuO1xuICBjb25zdCBjYiAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsLmNiKTtcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbC5ib2R5KTtcbiAgaWYgKCFjYiB8fCAhYm9keSkgcmV0dXJuO1xuICBib2R5LnN0eWxlLm9wYWNpdHkgICAgICAgPSBjYi5jaGVja2VkID8gJzEnICAgIDogJzAuNCc7XG4gIGJvZHkuc3R5bGUucG9pbnRlckV2ZW50cyA9IGNiLmNoZWNrZWQgPyAnYXV0bycgOiAnbm9uZSc7XG59XG5cbi8qKlxuICogU2hvdy9oaWRlIGNvbWJpbmVkIHZzIHNwbGl0IFBERiBwYWdlIGlucHV0cyB3aGVuIHRoZSBtb2RlIHJhZGlvIGNoYW5nZXMuXG4gKiBFeHBvcnRlZCBzbyB0aGUgaW5saW5lIG9uY2hhbmdlPVwiZ29hbHNVcGRhdGVQZGZNb2RlKClcIiBoYW5kbGVyIHdvcmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ29hbHNVcGRhdGVQZGZNb2RlKCkge1xuICBjb25zdCBjb21iaW5lZFJhZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLXBkZi1tb2RlLWNvbWJpbmVkJyk7XG4gIGNvbnN0IGlzQ29tYmluZWQgICAgPSBjb21iaW5lZFJhZGlvPy5jaGVja2VkID8/IHRydWU7XG4gIGNvbnN0IGNvbWJpbmVkRGl2ICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtcGRmLWNvbWJpbmVkJyk7XG4gIGNvbnN0IHNwbGl0RGl2ICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtcGRmLXNwbGl0Jyk7XG4gIGlmIChjb21iaW5lZERpdikgY29tYmluZWREaXYuc3R5bGUuZGlzcGxheSA9IGlzQ29tYmluZWQgPyAnZmxleCcgICA6ICdub25lJztcbiAgaWYgKHNwbGl0RGl2KSAgICBzcGxpdERpdi5zdHlsZS5kaXNwbGF5ICAgID0gaXNDb21iaW5lZCA/ICdub25lJyAgIDogJ2ZsZXgnO1xufVxuXG4vKipcbiAqIEZldGNoIGN1cnJlbnQgZ2VuZXJhdGlvbiBnb2FscyBmcm9tIHRoZSBzZXNzaW9uIGFuZCBwb3B1bGF0ZSB0aGUgZm9ybSBpbnB1dHMuXG4gKiBAcHJpdmF0ZVxuICovXG5hc3luYyBmdW5jdGlvbiBfbG9hZEdvYWxzRnJvbVN0YXR1cygpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhICA9IGF3YWl0IGFwaUNhbGwoJ0dFVCcsICcvYXBpL3N0YXR1cycpO1xuICAgIGNvbnN0IGdvYWxzID0gZGF0YT8uZ2VuZXJhdGlvbl9nb2FscztcbiAgICBpZiAoIWdvYWxzKSByZXR1cm47XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgRW5hYmxlZCBjaGVja2JveGVzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICAgIGNvbnN0IHBkZkVuYWJsZWRDYiAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLXBkZi1lbmFibGVkJyk7XG4gICAgY29uc3QgYXRzUGFnZUVuYWJsZWRDYiAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtYXRzLXBhZ2VzLWVuYWJsZWQnKTtcbiAgICBjb25zdCBhdHNDaGFyc0VuYWJsZWRDYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1hdHMtY2hhcnMtZW5hYmxlZCcpO1xuXG4gICAgaWYgKHBkZkVuYWJsZWRDYiAgICAgICYmIGdvYWxzLnBkZl9wYWdlc19lbmFibGVkICAhPSBudWxsKSBwZGZFbmFibGVkQ2IuY2hlY2tlZCAgICAgID0gZ29hbHMucGRmX3BhZ2VzX2VuYWJsZWQ7XG4gICAgaWYgKGF0c1BhZ2VFbmFibGVkQ2IgICYmIGdvYWxzLmF0c19wYWdlc19lbmFibGVkICAhPSBudWxsKSBhdHNQYWdlRW5hYmxlZENiLmNoZWNrZWQgID0gZ29hbHMuYXRzX3BhZ2VzX2VuYWJsZWQ7XG4gICAgaWYgKGF0c0NoYXJzRW5hYmxlZENiICYmIGdvYWxzLmF0c19jaGFyc19lbmFibGVkICAhPSBudWxsKSBhdHNDaGFyc0VuYWJsZWRDYi5jaGVja2VkID0gZ29hbHMuYXRzX2NoYXJzX2VuYWJsZWQ7XG5cbiAgICBnb2Fsc1RvZ2dsZVNlY3Rpb24oJ3BkZicpO1xuICAgIGdvYWxzVG9nZ2xlU2VjdGlvbignYXRzLXBhZ2VzJyk7XG4gICAgZ29hbHNUb2dnbGVTZWN0aW9uKCdhdHMtY2hhcnMnKTtcblxuICAgIC8vIFx1MjUwMFx1MjUwMCBQREYgbW9kZSByYWRpbyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBpZiAoZ29hbHMubWF4X3BkZl9wYWdlc19tb2RlKSB7XG4gICAgICBjb25zdCByYWRpbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGBpbnB1dFtuYW1lPVwiZ29hbHMtcGRmLW1vZGVcIl1bdmFsdWU9XCIke2dvYWxzLm1heF9wZGZfcGFnZXNfbW9kZX1cIl1gKTtcbiAgICAgIGlmIChyYWRpbykgcmFkaW8uY2hlY2tlZCA9IHRydWU7XG4gICAgICBnb2Fsc1VwZGF0ZVBkZk1vZGUoKTtcbiAgICB9XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgTnVtZXJpYyB2YWx1ZXMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAgY29uc3QgcGRmSW5wdXQgICAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLW1heC1wZGYtcGFnZXMnKTtcbiAgICBjb25zdCBwZGZSZXN1bWVJbnB1dCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtbWF4LXBkZi1yZXN1bWUtcGFnZXMnKTtcbiAgICBjb25zdCBwZGZDdklucHV0ICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtbWF4LXBkZi1jdi1wYWdlcycpO1xuICAgIGNvbnN0IGF0c1BhZ2VJbnB1dCAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1tYXgtYXRzLXBhZ2VzJyk7XG4gICAgY29uc3QgYXRzQ2hhcklucHV0ICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLW1heC1hdHMtY2hhcnMnKTtcblxuICAgIGlmIChwZGZJbnB1dCAgICAgICAmJiBnb2Fscy5tYXhfcGRmX3BhZ2VzICAgICAgICAgIT0gbnVsbCkgcGRmSW5wdXQudmFsdWUgICAgICAgPSBnb2Fscy5tYXhfcGRmX3BhZ2VzO1xuICAgIGlmIChwZGZSZXN1bWVJbnB1dCAmJiBnb2Fscy5tYXhfcGRmX3Jlc3VtZV9wYWdlcyAgIT0gbnVsbCkgcGRmUmVzdW1lSW5wdXQudmFsdWUgPSBnb2Fscy5tYXhfcGRmX3Jlc3VtZV9wYWdlcztcbiAgICBpZiAocGRmQ3ZJbnB1dCAgICAgJiYgZ29hbHMubWF4X3BkZl9jdl9wYWdlcyAgICAgICE9IG51bGwpIHBkZkN2SW5wdXQudmFsdWUgICAgID0gZ29hbHMubWF4X3BkZl9jdl9wYWdlcztcbiAgICBpZiAoYXRzUGFnZUlucHV0ICAgJiYgZ29hbHMubWF4X2F0c19wYWdlcyAgICAgICAgICE9IG51bGwpIGF0c1BhZ2VJbnB1dC52YWx1ZSAgID0gZ29hbHMubWF4X2F0c19wYWdlcztcbiAgICBpZiAoYXRzQ2hhcklucHV0ICAgJiYgZ29hbHMubWF4X2F0c19jaGFycyAgICAgICAgICE9IG51bGwpIGF0c0NoYXJJbnB1dC52YWx1ZSAgID0gZ29hbHMubWF4X2F0c19jaGFycztcblxuICAgIC8vIFx1MjUwMFx1MjUwMCBHZW5lcmF0aW9uIFNldHRpbmdzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICAgIGNvbnN0IG1heFNraWxsc1NsaWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1tYXgtc2tpbGxzLWlucHV0Jyk7XG4gICAgY29uc3QgbWF4U2tpbGxzTGFiZWwgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLW1heC1za2lsbHMtdmFsdWUnKTtcbiAgICBpZiAobWF4U2tpbGxzU2xpZGVyICYmIGRhdGEubWF4X3NraWxscyAhPSBudWxsKSB7XG4gICAgICBtYXhTa2lsbHNTbGlkZXIudmFsdWUgPSBkYXRhLm1heF9za2lsbHM7XG4gICAgICBpZiAobWF4U2tpbGxzTGFiZWwpIG1heFNraWxsc0xhYmVsLnRleHRDb250ZW50ID0gZGF0YS5tYXhfc2tpbGxzO1xuICAgIH1cbiAgICBjb25zdCBrbm93blRpdGxlcyA9IFsnU2tpbGxzJywgJ1RlY2huaWNhbCBTa2lsbHMnLCAnS2V5IFNraWxscycsICdDb3JlIFNraWxscyddO1xuICAgIGNvbnN0IGN1cnJlbnRUaXRsZSA9IGRhdGEuc2tpbGxzX3NlY3Rpb25fdGl0bGUgfHwgJ1NraWxscyc7XG4gICAgY29uc3QgdGl0bGVTZWxlY3QgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLXNraWxscy10aXRsZS1zZWxlY3QnKTtcbiAgICBjb25zdCB0aXRsZUN1c3RvbSAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtc2tpbGxzLXRpdGxlLWN1c3RvbScpO1xuICAgIGlmICh0aXRsZVNlbGVjdCkge1xuICAgICAgY29uc3QgaXNLbm93biA9IGtub3duVGl0bGVzLmluY2x1ZGVzKGN1cnJlbnRUaXRsZSk7XG4gICAgICB0aXRsZVNlbGVjdC52YWx1ZSA9IGlzS25vd24gPyBjdXJyZW50VGl0bGUgOiAnX19jdXN0b21fXyc7XG4gICAgICBpZiAodGl0bGVDdXN0b20pIHtcbiAgICAgICAgdGl0bGVDdXN0b20uc3R5bGUuZGlzcGxheSA9IGlzS25vd24gPyAnbm9uZScgOiAnJztcbiAgICAgICAgaWYgKCFpc0tub3duKSB0aXRsZUN1c3RvbS52YWx1ZSA9IGN1cnJlbnRUaXRsZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKCdGYWlsZWQgdG8gbG9hZCBnZW5lcmF0aW9uIGdvYWxzIGZyb20gYmFja2VuZDonLCBlcnIpO1xuICB9XG59XG5cbi8qKlxuICogUmVhZCB0aGUgZm9ybSBpbnB1dHMsIHZhbGlkYXRlLCBhbmQgUE9TVCB0byAvYXBpL2dlbmVyYXRpb24tZ29hbHMuXG4gKiBFeHBvc2VkIG9uIGdsb2JhbFRoaXMgc28gdGhlIGlubGluZSBvbmNsaWNrPVwic2F2ZUdlbmVyYXRpb25Hb2FscygpXCIgd29ya3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYXZlR2VuZXJhdGlvbkdvYWxzKCkge1xuICBjb25zdCBzdGF0dXNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1zdGF0dXMnKTtcblxuICAvLyBcdTI1MDBcdTI1MDAgUmVhZCBlbmFibGVkIGZsYWdzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICBjb25zdCBwZGZFbmFibGVkICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtcGRmLWVuYWJsZWQnKT8uY2hlY2tlZCAgICAgID8/IHRydWU7XG4gIGNvbnN0IGF0c1BhZ2VFbmFibGVkICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1hdHMtcGFnZXMtZW5hYmxlZCcpPy5jaGVja2VkID8/IHRydWU7XG4gIGNvbnN0IGF0c0NoYXJzRW5hYmxlZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1hdHMtY2hhcnMtZW5hYmxlZCcpPy5jaGVja2VkID8/IGZhbHNlO1xuXG4gIC8vIFx1MjUwMFx1MjUwMCBSZWFkIFBERiBtb2RlIGFuZCB2YWx1ZXMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIGNvbnN0IHBkZk1vZGUgICAgICAgID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT1cImdvYWxzLXBkZi1tb2RlXCJdOmNoZWNrZWQnKT8udmFsdWUgPz8gJ2NvbWJpbmVkJztcbiAgY29uc3QgcGRmUGFnZXMgICAgICAgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtbWF4LXBkZi1wYWdlcycpPy52YWx1ZSwgICAgICAgIDEwKTtcbiAgY29uc3QgcGRmUmVzdW1lUGFnZXMgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtbWF4LXBkZi1yZXN1bWUtcGFnZXMnKT8udmFsdWUsIDEwKTtcbiAgY29uc3QgcGRmQ3ZQYWdlcyAgICAgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtbWF4LXBkZi1jdi1wYWdlcycpPy52YWx1ZSwgICAgIDEwKTtcbiAgY29uc3QgYXRzUGFnZXMgICAgICAgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtbWF4LWF0cy1wYWdlcycpPy52YWx1ZSwgICAgICAgIDEwKTtcbiAgY29uc3QgYXRzQ2hhcnMgICAgICAgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtbWF4LWF0cy1jaGFycycpPy52YWx1ZSwgICAgICAgIDEwKTtcblxuICAvLyBcdTI1MDBcdTI1MDAgVmFsaWRhdGUgb25seSBlbmFibGVkIGZpZWxkcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgaWYgKHBkZkVuYWJsZWQpIHtcbiAgICBpZiAocGRmTW9kZSA9PT0gJ2NvbWJpbmVkJykge1xuICAgICAgaWYgKCFwZGZQYWdlcyB8fCBwZGZQYWdlcyA8IDEgfHwgcGRmUGFnZXMgPiAxMCkge1xuICAgICAgICBfc2V0U3RhdHVzKHN0YXR1c0VsLCAnXHUyNkEwXHVGRTBGIFBERiBwYWdlcyBtdXN0IGJlIDFcdTIwMTMxMC4nLCAnd2FybicpOyByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghcGRmUmVzdW1lUGFnZXMgfHwgcGRmUmVzdW1lUGFnZXMgPCAxIHx8IHBkZlJlc3VtZVBhZ2VzID4gMTApIHtcbiAgICAgICAgX3NldFN0YXR1cyhzdGF0dXNFbCwgJ1x1MjZBMFx1RkUwRiBSZXN1bWUgcG9ydGlvbiBwYWdlcyBtdXN0IGJlIDFcdTIwMTMxMC4nLCAnd2FybicpOyByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXBkZkN2UGFnZXMgfHwgcGRmQ3ZQYWdlcyA8IDEgfHwgcGRmQ3ZQYWdlcyA+IDEwKSB7XG4gICAgICAgIF9zZXRTdGF0dXMoc3RhdHVzRWwsICdcdTI2QTBcdUZFMEYgQ1YgLyBQdWJsaWNhdGlvbnMgcG9ydGlvbiBwYWdlcyBtdXN0IGJlIDFcdTIwMTMxMC4nLCAnd2FybicpOyByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChhdHNQYWdlRW5hYmxlZCAgJiYgKCFhdHNQYWdlcyAgfHwgYXRzUGFnZXMgIDwgMSAgfHwgYXRzUGFnZXMgID4gNSkpICAgICB7IF9zZXRTdGF0dXMoc3RhdHVzRWwsICdcdTI2QTBcdUZFMEYgQVRTIHBhZ2VzIG11c3QgYmUgMVx1MjAxMzUuJywgICAgICAgICAgJ3dhcm4nKTsgcmV0dXJuOyB9XG4gIGlmIChhdHNDaGFyc0VuYWJsZWQgJiYgKCFhdHNDaGFycyAgfHwgYXRzQ2hhcnMgIDwgNTAwIHx8IGF0c0NoYXJzID4gMjAwMDApKSB7IF9zZXRTdGF0dXMoc3RhdHVzRWwsICdcdTI2QTBcdUZFMEYgQ2hhcmFjdGVycyBtdXN0IGJlIDUwMFx1MjAxMzIwIDAwMC4nLCAnd2FybicpOyByZXR1cm47IH1cblxuICAvLyBcdTI1MDBcdTI1MDAgQnVpbGQgcGF5bG9hZCAoaW5jbHVkZSBlbmFibGVkIGZsYWdzICsgYWN0aXZlIHZhbHVlcyBvbmx5KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICBwZGZfcGFnZXNfZW5hYmxlZDogIHBkZkVuYWJsZWQsXG4gICAgYXRzX3BhZ2VzX2VuYWJsZWQ6ICBhdHNQYWdlRW5hYmxlZCxcbiAgICBhdHNfY2hhcnNfZW5hYmxlZDogIGF0c0NoYXJzRW5hYmxlZCxcbiAgICBtYXhfcGRmX3BhZ2VzX21vZGU6IHBkZk1vZGUsXG4gIH07XG5cbiAgaWYgKHBkZkVuYWJsZWQpIHtcbiAgICBpZiAocGRmTW9kZSA9PT0gJ2NvbWJpbmVkJykge1xuICAgICAgcGF5bG9hZC5tYXhfcGRmX3BhZ2VzID0gcGRmUGFnZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBheWxvYWQubWF4X3BkZl9yZXN1bWVfcGFnZXMgPSBwZGZSZXN1bWVQYWdlcztcbiAgICAgIHBheWxvYWQubWF4X3BkZl9jdl9wYWdlcyAgICAgPSBwZGZDdlBhZ2VzO1xuICAgIH1cbiAgfVxuICBpZiAoYXRzUGFnZUVuYWJsZWQpICBwYXlsb2FkLm1heF9hdHNfcGFnZXMgPSBhdHNQYWdlcztcbiAgaWYgKGF0c0NoYXJzRW5hYmxlZCkgcGF5bG9hZC5tYXhfYXRzX2NoYXJzID0gYXRzQ2hhcnM7XG5cbiAgX3NldFN0YXR1cyhzdGF0dXNFbCwgJ1NhdmluZ1x1MjAyNicsICdpbmZvJyk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvZ2VuZXJhdGlvbi1nb2FscycsIHBheWxvYWQpO1xuICAgIF9zZXRTdGF0dXMoc3RhdHVzRWwsICdcdTI3MTMgU2F2ZWQnLCAnb2snKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICcnOyB9LCAzMDAwKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKCdGYWlsZWQgdG8gc2F2ZSBnZW5lcmF0aW9uIGdvYWxzOicsIGVycik7XG4gICAgX3NldFN0YXR1cyhzdGF0dXNFbCwgJ1NhdmUgZmFpbGVkLiBQbGVhc2UgdHJ5IGFnYWluLicsICdlcnJvcicpO1xuICB9XG59XG5cbi8qKlxuICogU2hvdy9oaWRlIHRoZSBjdXN0b20tdGl0bGUgaW5wdXQgd2hlbiB0aGUgc2tpbGxzLXRpdGxlIHNlbGVjdCBjaGFuZ2VzLlxuICogRXhwb3J0ZWQgc28gdGhlIGlubGluZSBvbmNoYW5nZT1cImdvYWxzT25Ta2lsbHNUaXRsZVNlbGVjdCgpXCIgaGFuZGxlciB3b3Jrcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdvYWxzT25Ta2lsbHNUaXRsZVNlbGVjdCgpIHtcbiAgY29uc3Qgc2VsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLXNraWxscy10aXRsZS1zZWxlY3QnKTtcbiAgY29uc3QgY3VzdG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLXNraWxscy10aXRsZS1jdXN0b20nKTtcbiAgaWYgKCFzZWwpIHJldHVybjtcbiAgaWYgKHNlbC52YWx1ZSA9PT0gJ19fY3VzdG9tX18nKSB7XG4gICAgaWYgKGN1c3RvbSkgeyBjdXN0b20uc3R5bGUuZGlzcGxheSA9ICcnOyBjdXN0b20uZm9jdXMoKTsgfVxuICB9IGVsc2Uge1xuICAgIGlmIChjdXN0b20pIGN1c3RvbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGdvYWxzQXV0b1NhdmVTZXR0aW5ncygpO1xuICB9XG59XG5cbi8qKlxuICogQXV0by1zYXZlIHRoZSBnZW5lcmF0aW9uIHNldHRpbmdzIChtYXhfc2tpbGxzICsgc2tpbGxzX3NlY3Rpb25fdGl0bGUpXG4gKiB2aWEgUE9TVCAvYXBpL2dlbmVyYXRpb24tc2V0dGluZ3Mgd2l0aG91dCBibG9ja2luZy5cbiAqIEV4cG9ydGVkIHNvIGlubGluZSBvbmNoYW5nZT1cImdvYWxzQXV0b1NhdmVTZXR0aW5ncygpXCIgaGFuZGxlcnMgd29yay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdvYWxzQXV0b1NhdmVTZXR0aW5ncygpIHtcbiAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtc2V0dGluZ3Mtc3RhdHVzJyk7XG4gIGNvbnN0IHNsaWRlciAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLW1heC1za2lsbHMtaW5wdXQnKTtcbiAgY29uc3Qgc2VsICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtc2tpbGxzLXRpdGxlLXNlbGVjdCcpO1xuICBjb25zdCBjdXN0b20gICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1za2lsbHMtdGl0bGUtY3VzdG9tJyk7XG5cbiAgY29uc3QgbWF4U2tpbGxzID0gc2xpZGVyID8gcGFyc2VJbnQoc2xpZGVyLnZhbHVlLCAxMCkgOiBudWxsO1xuICBjb25zdCB0aXRsZSAgICAgPSBzZWw/LnZhbHVlID09PSAnX19jdXN0b21fXydcbiAgICA/IChjdXN0b20/LnZhbHVlPy50cmltKCkgfHwgbnVsbClcbiAgICA6IChzZWw/LnZhbHVlIHx8IG51bGwpO1xuXG4gIGlmICghbWF4U2tpbGxzICYmICF0aXRsZSkgcmV0dXJuO1xuXG4gIGNvbnN0IHBheWxvYWQgPSB7fTtcbiAgaWYgKG1heFNraWxscyAmJiBtYXhTa2lsbHMgPj0gMSkgcGF5bG9hZC5tYXhfc2tpbGxzICAgICAgICAgID0gbWF4U2tpbGxzO1xuICBpZiAodGl0bGUpICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnNraWxsc19zZWN0aW9uX3RpdGxlID0gdGl0bGU7XG5cbiAgX3NldFN0YXR1cyhzdGF0dXNFbCwgJ1NhdmluZ1x1MjAyNicsICdpbmZvJyk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL2dlbmVyYXRpb24tc2V0dGluZ3MnLCBwYXlsb2FkKTtcbiAgICBfc2V0U3RhdHVzKHN0YXR1c0VsLCAnXHUyNzEzIFNhdmVkJywgJ29rJyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnJzsgfSwgMjAwMCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKCdGYWlsZWQgdG8gc2F2ZSBnZW5lcmF0aW9uIHNldHRpbmdzOicsIGVycik7XG4gICAgX3NldFN0YXR1cyhzdGF0dXNFbCwgJ1NhdmUgZmFpbGVkJywgJ2Vycm9yJyk7XG4gIH1cbn1cblxuLyoqIEBwcml2YXRlICovXG5mdW5jdGlvbiBfc2V0U3RhdHVzKGVsLCBtZXNzYWdlLCBsZXZlbCkge1xuICBpZiAoIWVsKSByZXR1cm47XG4gIGNvbnN0IGNvbG91cnMgPSB7XG4gICAgb2s6ICAgICd2YXIoLS1zdWNjZXNzLCMyZTdkMzIpJyxcbiAgICBlcnJvcjogJ3ZhcigtLWRhbmdlciwjYzYyODI4KScsXG4gICAgd2FybjogICd2YXIoLS13YXJuaW5nLCNlNjUxMDApJyxcbiAgICBpbmZvOiAgJ3ZhcigtLXRleHQtc2Vjb25kYXJ5LCM1NTUpJyxcbiAgfTtcbiAgZWwuc3R5bGUuY29sb3IgID0gY29sb3Vyc1tsZXZlbF0gfHwgY29sb3Vycy5pbmZvO1xuICBlbC50ZXh0Q29udGVudCAgPSBtZXNzYWdlO1xufVxuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvc2Vzc2lvbi1tYW5hZ2VyLmpzXG4gKiBTZXNzaW9uIGxpZmVjeWNsZTogY3JlYXRlLCBjbGFpbSwgcmVzdG9yZSwgc2F2ZSwgbG9hZC5cbiAqIEFsc28gb3ducyBmb3JtYXRTZXNzaW9uUGhhc2VMYWJlbCBhbmQgcmVsYXRlZCBzZXNzaW9uLWxhYmVsIGhlbHBlcnMuXG4gKlxuICogREVQRU5ERU5DSUVTIChhbGwgb24gZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgLSBjcmVhdGVTZXNzaW9uLCBmZXRjaFN0YXR1cyAoYXBpLWNsaWVudC5qcylcbiAqICAgLSBnZXRTZXNzaW9uSWRGcm9tVVJMLCBnZXRPd25lclRva2VuLCBTdG9yYWdlS2V5cywgZ2V0U2NvcGVkVGFiRGF0YVN0b3JhZ2VLZXkgKHN0YXRlLW1hbmFnZXIuanMpXG4gKiAgIC0gYXBwZW5kTWVzc2FnZSwgYXBwZW5kUmV0cnlNZXNzYWdlIChtZXNzYWdlLXF1ZXVlLmpzKVxuICogICAtIHBhcnNlU3RhdHVzUmVzcG9uc2UsIHBhcnNlUmV3cml0ZXNSZXNwb25zZSAodmFsaWRhdG9ycy5qcylcbiAqICAgLSByZWZyZXNoQXRzU2NvcmUgKGF0cy1yZWZpbmVtZW50LmpzKVxuICogICAtIHVwZGF0ZUluY2x1c2lvbkNvdW50cyAocmV2aWV3LXRhYmxlLWJhc2UuanMsIFRpZXIgNClcbiAqICAgLSBzd2l0Y2hUYWIgKHJldmlldy10YWJsZS1iYXNlLmpzLCBUaWVyIDQpXG4gKiAgIC0gcmVuZGVyUmV3cml0ZVBhbmVsIChyZXdyaXRlLXJldmlldy5qcywgVGllciA2KVxuICogICAtIHNob3dPd25lcnNoaXBDb25mbGljdERpYWxvZywgb3BlblNlc3Npb25zTW9kYWwgKHNlc3Npb24tc3dpdGNoZXItdWkuanMsIFRpZXIgNylcbiAqICAgLSB1cGRhdGVBY3Rpb25CdXR0b25zICh1aS1oZWxwZXJzLmpzKVxuICogICAtIHVwZGF0ZVBvc2l0aW9uVGl0bGUgKHNlc3Npb24tYWN0aW9ucy5qcylcbiAqICAgLSBlc2NhcGVIdG1sLCBTRVNTSU9OX1BIQVNFX0xBQkVMU19TSE9SVCAodXRpbHMuanMpXG4gKiAgIC0gc3RhdGVNYW5hZ2VyIChzdGF0ZS1tYW5hZ2VyLmpzIFx1MjAxNCBnZXRBbGxUYWJEYXRhKCkvZ2V0Q3VycmVudFRhYigpL3NldFRhYkRhdGEoKS9zZXRDdXJyZW50VGFiKCkpXG4gKiAgIC0gc2Vzc2lvbklkLCBpc1JlY29ubmVjdGluZywgbGFzdEtub3duUGhhc2UsIGludGVyYWN0aXZlU3RhdGUsXG4gKiAgICAgcmV3cml0ZURlY2lzaW9ucywgUEhBU0VTICh3aW5kb3cgZ2xvYmFscylcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ3Nlc3Npb24tbWFuYWdlcicpO1xuXG5pbXBvcnQgeyBTRVNTSU9OX1BIQVNFX0xBQkVMU19TSE9SVCwgU0VTU0lPTl9QSEFTRV9MQUJFTFMgfSBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCB7IFBIQVNFUywgc3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi9zdGF0ZS1tYW5hZ2VyLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXNzaW9uIHBoYXNlIGxhYmVscyAoYWJicmV2aWF0ZWQgZm9ybSBcdTIwMTQgZm9yIGNvbXBhY3Qgc2Vzc2lvbi1zd2l0Y2hlciBVSSlcbi8vIEZ1bGwtbGVuZ3RoIGxhYmVscyBsaXZlIGluIHV0aWxzLmpzIFNFU1NJT05fUEhBU0VfTEFCRUxTLlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGZvcm1hdFNlc3Npb25QaGFzZUxhYmVsKHBoYXNlKSB7XG4gIGlmICghcGhhc2UpIHJldHVybiAnaW5pdCc7XG4gIHJldHVybiBTRVNTSU9OX1BIQVNFX0xBQkVMU19TSE9SVFtwaGFzZV0gfHwgU3RyaW5nKHBoYXNlKS5yZXBsYWNlKC9fL2csICcgJyk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ3VycmVudCBzZXNzaW9uIGlkZW50aXR5IGhlbHBlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBfZ2V0Q3VycmVudFNlc3Npb25JZFZhbHVlKCkge1xuICBpZiAodHlwZW9mIGdldFNlc3Npb25JZEZyb21VUkwgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2V0U2Vzc2lvbklkRnJvbVVSTCgpO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCdzZXNzaW9uJyk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0Q3VycmVudE93bmVyVG9rZW5WYWx1ZSgpIHtcbiAgaWYgKHR5cGVvZiBnZXRPd25lclRva2VuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGdldE93bmVyVG9rZW4oKTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjdi1idWlsZGVyLW93bmVyLXRva2VuJyk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZFNlc3Npb25Td2l0Y2hlckxhYmVsKHN0YXR1cyA9IHt9KSB7XG4gIGNvbnN0IHBvc2l0aW9uTmFtZSA9IChzdGF0dXMucG9zaXRpb25fbmFtZSB8fCAnJykudG9TdHJpbmcoKS50cmltKCk7XG4gIGNvbnN0IHBoYXNlID0gZm9ybWF0U2Vzc2lvblBoYXNlTGFiZWwoc3RhdHVzLnBoYXNlKTtcbiAgaWYgKHBvc2l0aW9uTmFtZSkge1xuICAgIHJldHVybiBgJHtwb3NpdGlvbk5hbWV9IFx1MDBCNyAke3BoYXNlfWA7XG4gIH1cbiAgcmV0dXJuIF9nZXRDdXJyZW50U2Vzc2lvbklkVmFsdWUoKSA/IGBTZXNzaW9uIFx1MDBCNyAke3BoYXNlfWAgOiAnXHVEODNEXHVEQ0MyIFNlc3Npb25zJztcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlU2Vzc2lvbk93bmVyc2hpcE1ldGEoc2Vzc2lvbiwge1xuICBjdXJyZW50U2Vzc2lvbklkID0gX2dldEN1cnJlbnRTZXNzaW9uSWRWYWx1ZSgpLFxufSA9IHt9KSB7XG4gIGlmICghc2Vzc2lvbiB8fCB0eXBlb2Ygc2Vzc2lvbiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4geyBsYWJlbDogJ1Vua25vd24nLCBjbGFzc05hbWU6ICdzZXNzaW9uLXN0YXR1cy11bmNsYWltZWQnLCBpc0N1cnJlbnQ6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBpc0N1cnJlbnRTZXNzaW9uID0gQm9vbGVhbihjdXJyZW50U2Vzc2lvbklkKSAmJiBzZXNzaW9uLnNlc3Npb25faWQgPT09IGN1cnJlbnRTZXNzaW9uSWQ7XG4gIGNvbnN0IHNhbWVPd25lciA9IEJvb2xlYW4oc2Vzc2lvbi5vd25lZF9ieV9yZXF1ZXN0ZXIpO1xuXG4gIGlmIChpc0N1cnJlbnRTZXNzaW9uKSB7XG4gICAgcmV0dXJuIHsgbGFiZWw6ICdDdXJyZW50IHRhYicsIGNsYXNzTmFtZTogJ3Nlc3Npb24tc3RhdHVzLWN1cnJlbnQnLCBpc0N1cnJlbnQ6IHRydWUgfTtcbiAgfVxuICBpZiAoc2FtZU93bmVyKSB7XG4gICAgcmV0dXJuIHsgbGFiZWw6ICdPd25lZCBieSB0aGlzIHRhYicsIGNsYXNzTmFtZTogJ3Nlc3Npb24tc3RhdHVzLWN1cnJlbnQnLCBpc0N1cnJlbnQ6IGZhbHNlIH07XG4gIH1cbiAgaWYgKHNlc3Npb24uY2xhaW1lZCkge1xuICAgIHJldHVybiB7IGxhYmVsOiAnT3duZWQgYnkgYW5vdGhlciB0YWInLCBjbGFzc05hbWU6ICdzZXNzaW9uLXN0YXR1cy1vd25lZCcsIGlzQ3VycmVudDogZmFsc2UgfTtcbiAgfVxuICByZXR1cm4geyBsYWJlbDogJ1VuY2xhaW1lZCcsIGNsYXNzTmFtZTogJ3Nlc3Npb24tc3RhdHVzLXVuY2xhaW1lZCcsIGlzQ3VycmVudDogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0U2Vzc2lvblRpbWVzdGFtcCh0aW1lc3RhbXAsIHsgaW5jbHVkZVRpbWUgPSB0cnVlIH0gPSB7fSkge1xuICBpZiAoIXRpbWVzdGFtcCkgcmV0dXJuICdcdTIwMTQnO1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXApLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgIG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgeWVhcjogJ251bWVyaWMnLFxuICAgICAgLi4uKGluY2x1ZGVUaW1lID8geyBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJzItZGlnaXQnIH0gOiB7fSksXG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gU3RyaW5nKHRpbWVzdGFtcCkucmVwbGFjZSgnVCcsICcgJykuc2xpY2UoMCwgaW5jbHVkZVRpbWUgPyAxNiA6IDEwKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdlbGNvbWUgLyBvbmJvYXJkaW5nIG1vZGFsIChHQVAtMzYgLyBHQVAtMzcpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgX1dFTENPTUVfRElTTUlTU0VEX0tFWSA9ICdjdi1idWlsZGVyLXdlbGNvbWUtZGlzbWlzc2VkJztcblxuLyoqXG4gKiBTd2l0Y2ggd2hpY2ggY29udGVudCBzZWN0aW9uIGlzIHZpc2libGUgaW5zaWRlIHRoZSB3ZWxjb21lIG1vZGFsLlxuICogQHBhcmFtIHsncHJlc2VudCd8J21pc3NpbmcnfSBzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIF9zZXRXZWxjb21lU2VjdGlvbihzZWN0aW9uKSB7XG4gIGNvbnN0IHNQcmVzZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dlbGNvbWUtc2VjdGlvbi1wcmVzZW50Jyk7XG4gIGNvbnN0IHNFbXB0eSAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dlbGNvbWUtc2VjdGlvbi1lbXB0eScpO1xuICBjb25zdCBzTWlzc2luZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3ZWxjb21lLXNlY3Rpb24tbWlzc2luZycpO1xuICBjb25zdCBmUHJlc2VudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3ZWxjb21lLWZvb3Rlci1wcmVzZW50Jyk7XG4gIGNvbnN0IGZNaXNzaW5nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dlbGNvbWUtZm9vdGVyLW1pc3NpbmcnKTtcbiAgaWYgKHNQcmVzZW50KSBzUHJlc2VudC5zdHlsZS5kaXNwbGF5ID0gc2VjdGlvbiA9PT0gJ3ByZXNlbnQnID8gJycgOiAnbm9uZSc7XG4gIGlmIChzRW1wdHkpICAgc0VtcHR5LnN0eWxlLmRpc3BsYXkgICA9IHNlY3Rpb24gPT09ICdlbXB0eScgICA/ICcnIDogJ25vbmUnO1xuICBpZiAoc01pc3NpbmcpIHNNaXNzaW5nLnN0eWxlLmRpc3BsYXkgPSBzZWN0aW9uID09PSAnbWlzc2luZycgPyAnJyA6ICdub25lJztcbiAgLy8gRW1wdHkgc2tlbGV0b246IHNob3cgXCJwcmVzZW50XCIgZm9vdGVyIChDbG9zZS9kaXNtaXNzKSBub3QgXCJtaXNzaW5nXCIgZm9vdGVyIChDcmVhdGUvUmVsb2FkKVxuICBpZiAoZlByZXNlbnQpIGZQcmVzZW50LnN0eWxlLmRpc3BsYXkgPSAoc2VjdGlvbiA9PT0gJ3ByZXNlbnQnIHx8IHNlY3Rpb24gPT09ICdlbXB0eScpID8gJ2ZsZXgnIDogJ25vbmUnO1xuICBpZiAoZk1pc3NpbmcpIGZNaXNzaW5nLnN0eWxlLmRpc3BsYXkgPSBzZWN0aW9uID09PSAnbWlzc2luZycgPyAnZmxleCcgOiAnbm9uZSc7XG4gIC8vIEZvciBlbXB0eSBzdGF0ZTogY2hhbmdlIENUQSB0byBuYXZpZ2F0ZSB0byBNYXN0ZXIgQ1YgaW5zdGVhZCBvZiBqdXN0IGNsb3NpbmdcbiAgY29uc3QgZ2V0U3RhcnRlZEJ0biA9IGZQcmVzZW50ID8gZlByZXNlbnQucXVlcnlTZWxlY3RvcignYnV0dG9uLnByaW1hcnknKSA6IG51bGw7XG4gIGlmIChnZXRTdGFydGVkQnRuKSB7XG4gICAgaWYgKHNlY3Rpb24gPT09ICdlbXB0eScpIHtcbiAgICAgIGdldFN0YXJ0ZWRCdG4udGV4dENvbnRlbnQgPSAnT3BlbiBNYXN0ZXIgQ1YnO1xuICAgICAgZ2V0U3RhcnRlZEJ0bi5vbmNsaWNrID0gKCkgPT4geyBjbG9zZVdlbGNvbWVNb2RhbCgpOyBpZiAodHlwZW9mIG9wZW5NYXN0ZXJDdk1vZGFsID09PSAnZnVuY3Rpb24nKSBvcGVuTWFzdGVyQ3ZNb2RhbCgpOyB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBnZXRTdGFydGVkQnRuLnRleHRDb250ZW50ID0gJ0dldCBTdGFydGVkJztcbiAgICAgIGdldFN0YXJ0ZWRCdG4ub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgY2xvc2VXZWxjb21lTW9kYWwoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzd2l0Y2hUYWIgPT09ICdmdW5jdGlvbicpIHN3aXRjaFRhYignam9iJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNob3cgdGhlIG9uYm9hcmRpbmcgbW9kYWwgaW4gdGhlIFwibWlzc2luZyBtYXN0ZXIgQ1ZcIiBzdGF0ZS5cbiAqIENhbGxlZCBmcm9tIGNyZWF0ZU5ld1Nlc3Npb25BbmROYXZpZ2F0ZSgpIHdoZW4gdGhlIGJhY2tlbmQgcmV0dXJucyBtYXN0ZXJfY3ZfbWlzc2luZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXN0ZXJDdlBhdGggLSBTZXJ2ZXItcmVwb3J0ZWQgZXhwZWN0ZWQgZmlsZSBwYXRoLlxuICovXG5mdW5jdGlvbiBzaG93T25ib2FyZGluZ01vZGFsKG1hc3RlckN2UGF0aCkge1xuICBjb25zdCBvdmVybGF5ICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvbmJvYXJkaW5nLW1vZGFsLW92ZXJsYXknKTtcbiAgY29uc3QgcGF0aEVsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb25ib2FyZGluZy1tYXN0ZXItY3YtcGF0aCcpO1xuICBjb25zdCBzdGF0dXNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvbmJvYXJkaW5nLW1vZGFsLXN0YXR1cycpO1xuICBpZiAocGF0aEVsKSAgIHBhdGhFbC50ZXh0Q29udGVudCAgID0gbWFzdGVyQ3ZQYXRoIHx8ICcodW5rbm93biknO1xuICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJyc7XG4gIF9zZXRXZWxjb21lU2VjdGlvbignbWlzc2luZycpO1xuICBpZiAob3ZlcmxheSkge1xuICAgIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICBfb3Blbk9uYm9hcmRpbmdGb2N1c1RyYXAob3ZlcmxheSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG93IHRoZSB3ZWxjb21lIG1vZGFsIHVubGVzcyB0aGUgdXNlciBoYXMgZGlzbWlzc2VkIGl0LlxuICogQ2FsbHMgL2FwaS9zZXR1cC9tYXN0ZXItY3Ytc3RhdHVzIHRvIGNob29zZSB3aGljaCBzZWN0aW9uIHRvIGRpc3BsYXkuXG4gKiBTYWZlIHRvIGNhbGwgb24gZXZlcnkgc3RhcnR1cCBcdTIwMTQgbm8tb3BzIGltbWVkaWF0ZWx5IGlmIGRpc21pc3NlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWF5YmVTaG93V2VsY29tZU1vZGFsKCkge1xuICB0cnkge1xuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShfV0VMQ09NRV9ESVNNSVNTRURfS0VZKSkgcmV0dXJuO1xuICB9IGNhdGNoIChfKSB7fVxuICBsZXQgc2VjdGlvbiA9ICdwcmVzZW50JztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9zZXR1cC9tYXN0ZXItY3Ytc3RhdHVzJyk7XG4gICAgaWYgKHJlcy5vaykge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgICBpZiAoIWRhdGEuZXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IHBhdGhFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvbmJvYXJkaW5nLW1hc3Rlci1jdi1wYXRoJyk7XG4gICAgICAgIGlmIChwYXRoRWwpIHBhdGhFbC50ZXh0Q29udGVudCA9IGRhdGEucGF0aCB8fCAnKHVua25vd24pJztcbiAgICAgICAgc2VjdGlvbiA9ICdtaXNzaW5nJztcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5pc19lbXB0eSkge1xuICAgICAgICBzZWN0aW9uID0gJ2VtcHR5JztcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKF8pIHt9XG4gIGNvbnN0IHN0YXR1c0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29uYm9hcmRpbmctbW9kYWwtc3RhdHVzJyk7XG4gIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnJztcbiAgX3NldFdlbGNvbWVTZWN0aW9uKHNlY3Rpb24pO1xuICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29uYm9hcmRpbmctbW9kYWwtb3ZlcmxheScpO1xuICBpZiAob3ZlcmxheSkge1xuICAgIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICBfb3Blbk9uYm9hcmRpbmdGb2N1c1RyYXAob3ZlcmxheSk7XG4gIH1cbn1cblxuLyoqIFdpcmUgZm9jdXMgdHJhcCBhbmQgRXNjYXBlIGhhbmRsZXIgZm9yIHRoZSBvbmJvYXJkaW5nIG92ZXJsYXkgKFdDQUcgMi4xLjIpLiAqL1xuZnVuY3Rpb24gX29wZW5PbmJvYXJkaW5nRm9jdXNUcmFwKG92ZXJsYXkpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLnNldEluaXRpYWxGb2N1cyA9PT0gJ2Z1bmN0aW9uJykgZ2xvYmFsVGhpcy5zZXRJbml0aWFsRm9jdXMoJ29uYm9hcmRpbmctbW9kYWwtb3ZlcmxheScpO1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMudHJhcEZvY3VzID09PSAnZnVuY3Rpb24nKSAgICAgICBnbG9iYWxUaGlzLnRyYXBGb2N1cygnb25ib2FyZGluZy1tb2RhbC1vdmVybGF5Jyk7XG4gIGlmICghb3ZlcmxheS5fb25ib2FyZGluZ0VzY0hhbmRsZXIpIHtcbiAgICBvdmVybGF5Ll9vbmJvYXJkaW5nRXNjSGFuZGxlciA9IChlKSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBjbG9zZVdlbGNvbWVNb2RhbCgpO1xuICAgIH07XG4gICAgb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb3ZlcmxheS5fb25ib2FyZGluZ0VzY0hhbmRsZXIpO1xuICB9XG59XG5cbi8qKlxuICogU2hvdyB0aGUgd2VsY29tZSBtb2RhbCB1bmNvbmRpdGlvbmFsbHkgKGlnbm9yZXMgdGhlIFwiZG9uJ3Qgc2hvdyBhZ2FpblwiIGZsYWcpLlxuICogVXNlZCBieSB0aGUgSGVscCBidXR0b24gc28gdXNlcnMgY2FuIGFsd2F5cyByZW9wZW4gb25ib2FyZGluZyBtaWQtc2Vzc2lvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2hvd1dlbGNvbWVNb2RhbCgpIHtcbiAgbGV0IHNlY3Rpb24gPSAncHJlc2VudCc7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvc2V0dXAvbWFzdGVyLWN2LXN0YXR1cycpO1xuICAgIGlmIChyZXMub2spIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgaWYgKCFkYXRhLmV4aXN0cykge1xuICAgICAgICBjb25zdCBwYXRoRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb25ib2FyZGluZy1tYXN0ZXItY3YtcGF0aCcpO1xuICAgICAgICBpZiAocGF0aEVsKSBwYXRoRWwudGV4dENvbnRlbnQgPSBkYXRhLnBhdGggfHwgJyh1bmtub3duKSc7XG4gICAgICAgIHNlY3Rpb24gPSAnbWlzc2luZyc7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEuaXNfZW1wdHkpIHtcbiAgICAgICAgc2VjdGlvbiA9ICdlbXB0eSc7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChfKSB7fVxuICBjb25zdCBzdGF0dXNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvbmJvYXJkaW5nLW1vZGFsLXN0YXR1cycpO1xuICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJyc7XG4gIF9zZXRXZWxjb21lU2VjdGlvbihzZWN0aW9uKTtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvbmJvYXJkaW5nLW1vZGFsLW92ZXJsYXknKTtcbiAgaWYgKG92ZXJsYXkpIHtcbiAgICBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgX29wZW5PbmJvYXJkaW5nRm9jdXNUcmFwKG92ZXJsYXkpO1xuICB9XG59XG5cbi8qKlxuICogQ2xvc2UgdGhlIHdlbGNvbWUgbW9kYWwuXG4gKiBJZiBcIkRvbid0IHNob3cgYWdhaW5cIiBpcyBjaGVja2VkLCBwZXJzaXN0cyB0aGUgZGlzbWlzc2FsIGluIGxvY2FsU3RvcmFnZS5cbiAqL1xuZnVuY3Rpb24gY2xvc2VXZWxjb21lTW9kYWwoKSB7XG4gIGNvbnN0IG92ZXJsYXkgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29uYm9hcmRpbmctbW9kYWwtb3ZlcmxheScpO1xuICBjb25zdCBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3ZWxjb21lLWRvbnQtc2hvdy1hZ2FpbicpO1xuICBpZiAob3ZlcmxheSkge1xuICAgIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBpZiAob3ZlcmxheS5fb25ib2FyZGluZ0VzY0hhbmRsZXIpIHtcbiAgICAgIG92ZXJsYXkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG92ZXJsYXkuX29uYm9hcmRpbmdFc2NIYW5kbGVyKTtcbiAgICAgIGRlbGV0ZSBvdmVybGF5Ll9vbmJvYXJkaW5nRXNjSGFuZGxlcjtcbiAgICB9XG4gIH1cbiAgaWYgKGNoZWNrYm94ICYmIGNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICB0cnkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShfV0VMQ09NRV9ESVNNSVNTRURfS0VZLCAnMScpOyB9IGNhdGNoIChfKSB7fVxuICB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5yZXN0b3JlRm9jdXMgPT09ICdmdW5jdGlvbicpIGdsb2JhbFRoaXMucmVzdG9yZUZvY3VzKCk7XG59XG5cbi8qKlxuICogQ2FsbGVkIGJ5IHRoZSBvbmJvYXJkaW5nIG1vZGFsIFwiQ3JlYXRlIGVtcHR5IHByb2ZpbGVcIiBidXR0b24uXG4gKiBQT1NUcyB0byAvYXBpL3NldHVwL2NyZWF0ZS1tYXN0ZXItY3YsIHRoZW4gbmF2aWdhdGVzIHRvIGEgbmV3IHNlc3Npb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9uYm9hcmRpbmdDcmVhdGVFbXB0eVByb2ZpbGUoKSB7XG4gIGNvbnN0IGJ0biAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29uYm9hcmRpbmctY3JlYXRlLWJ0bicpO1xuICBjb25zdCBzdGF0dXNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvbmJvYXJkaW5nLW1vZGFsLXN0YXR1cycpO1xuICBpZiAoYnRuKSBidG4uZGlzYWJsZWQgPSB0cnVlO1xuICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ0NyZWF0aW5nIHByb2ZpbGVcdTIwMjYnO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9zZXR1cC9jcmVhdGUtbWFzdGVyLWN2JywgeyBtZXRob2Q6ICdQT1NUJyB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgY29uc3QgbXNnID0gZGF0YS5lcnJvciA9PT0gJ2FscmVhZHlfZXhpc3RzJ1xuICAgICAgICA/ICdGaWxlIGFscmVhZHkgZXhpc3RzIFx1MjAxNCBwbGVhc2UgcmVsb2FkIHRoZSBwYWdlLidcbiAgICAgICAgOiAoZGF0YS5lcnJvciB8fCBgU2VydmVyIGVycm9yICR7cmVzLnN0YXR1c31gKTtcbiAgICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSBtc2c7XG4gICAgICBpZiAoYnRuKSBidG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRmlsZSBjcmVhdGVkIFx1MjAxNCBub3cgbmF2aWdhdGUgdG8gYSBuZXcgc2Vzc2lvblxuICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnUHJvZmlsZSBjcmVhdGVkISBTdGFydGluZyBzZXNzaW9uXHUyMDI2JztcbiAgICBhd2FpdCBjcmVhdGVOZXdTZXNzaW9uQW5kTmF2aWdhdGUoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9IGBFcnJvcjogJHtlcnIubWVzc2FnZX1gO1xuICAgIGlmIChidG4pIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2Vzc2lvbiBjcmVhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU5ld1Nlc3Npb25BbmROYXZpZ2F0ZSgpIHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGNyZWF0ZVNlc3Npb24oKTtcbiAgaWYgKGRhdGEuZXJyb3IgPT09ICdtYXN0ZXJfY3ZfbWlzc2luZycpIHtcbiAgICBzaG93T25ib2FyZGluZ01vZGFsKGRhdGEubWFzdGVyX2N2X3BhdGggfHwgJycpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWRhdGEuc2Vzc2lvbl9pZCkgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24nKTtcbiAgLy8gQ2xlYXIgYW55IHN0YWxlIHNlc3Npb24gcGF0aCBcdTIwMTQgdGhlIG5ldyBzZXNzaW9uIGhhcyBubyBzYXZlZCBmaWxlIHlldC5cbiAgLy8gSWYgU0VTU0lPTl9QQVRIIHdlcmUgbGVmdCBwb2ludGluZyBhdCBhIHByZXZpb3VzIHNlc3Npb24ncyBmaWxlLCB0aGVcbiAgLy8gZGlzay1yZXN0b3JlIGd1YXJkIGluIHJlc3RvcmVCYWNrZW5kU3RhdGUgY291bGQgbG9hZCB0aGUgd3Jvbmcgc2Vzc2lvblxuICAvLyBvbiB0aGUgbmV4dCB2aXNpdCBvbmNlIFNFU1NJT05fSUQgaXMgdXBkYXRlZCBieSB0aGUgYmVmb3JldW5sb2FkIGhhbmRsZXIuXG4gIHRyeSB7IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdjdi1idWlsZGVyLXNlc3Npb24tcGF0aCcpOyB9IGNhdGNoIChfKSB7fVxuICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGRhdGEucmVkaXJlY3RfdXJsIHx8IGAvP3Nlc3Npb249JHtkYXRhLnNlc3Npb25faWR9YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU5ld1Nlc3Npb25Jbk5ld1RhYigpIHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGNyZWF0ZVNlc3Npb24oKTtcbiAgaWYgKGRhdGEuZXJyb3IgPT09ICdtYXN0ZXJfY3ZfbWlzc2luZycpIHtcbiAgICBzaG93T25ib2FyZGluZ01vZGFsKGRhdGEubWFzdGVyX2N2X3BhdGggfHwgJycpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWRhdGEuc2Vzc2lvbl9pZCkgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24nKTtcbiAgd2luZG93Lm9wZW4oZGF0YS5yZWRpcmVjdF91cmwgfHwgYC8/c2Vzc2lvbj0ke2RhdGEuc2Vzc2lvbl9pZH1gLCAnX2JsYW5rJywgJ25vb3BlbmVyJyk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2Vzc2lvbiBjbGFpbSAvIG93bmVyc2hpcFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmFzeW5jIGZ1bmN0aW9uIF9jbGFpbUN1cnJlbnRTZXNzaW9uKHNlc3Npb25JZFRvQ2xhaW0pIHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvc2Vzc2lvbnMvY2xhaW0nLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgc2Vzc2lvbl9pZDogc2Vzc2lvbklkVG9DbGFpbSxcbiAgICAgIG93bmVyX3Rva2VuOiBnZXRPd25lclRva2VuKCksXG4gICAgfSksXG4gIH0pO1xuXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICBpZiAocmVzLm9rICYmIGRhdGEub2sgIT09IGZhbHNlKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAocmVzLnN0YXR1cyA9PT0gNDA5ICYmIGRhdGEuZXJyb3IgPT09ICdzZXNzaW9uX293bmVkJykge1xuICAgIGNvbnN0IGFjdGlvbiA9IGF3YWl0IHNob3dPd25lcnNoaXBDb25mbGljdERpYWxvZyhcbiAgICAgICdUaGlzIHNlc3Npb24gaXMgY3VycmVudGx5IGNsYWltZWQgYnkgYW5vdGhlciBicm93c2VyIHRhYi4gWW91IGNhbiB0YWtlIGl0IG92ZXIsIHN0YXJ0IGEgbmV3IHNlc3Npb24sIG9yIGxvYWQgYSBkaWZmZXJlbnQgb25lLidcbiAgICApO1xuICAgIGlmIChhY3Rpb24gPT09ICduZXcnKSB7XG4gICAgICBhd2FpdCBjcmVhdGVOZXdTZXNzaW9uQW5kTmF2aWdhdGUoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFjdGlvbiAhPT0gJ3Rha2VvdmVyJykge1xuICAgICAgc2hvd1Nlc3Npb25zTGFuZGluZ1BhbmVsKCdTZWxlY3QgYSBkaWZmZXJlbnQgc2Vzc2lvbiBvciBjcmVhdGUgYSBuZXcgb25lLicpO1xuICAgICAgb3BlblNlc3Npb25zTW9kYWwoeyByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWtlb3ZlclJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3Nlc3Npb25zL3Rha2VvdmVyJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgc2Vzc2lvbl9pZDogc2Vzc2lvbklkVG9DbGFpbSxcbiAgICAgICAgb3duZXJfdG9rZW46IGdldE93bmVyVG9rZW4oKSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IHRha2VvdmVyRGF0YSA9IGF3YWl0IHRha2VvdmVyUmVzLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICBpZiAoIXRha2VvdmVyUmVzLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodGFrZW92ZXJEYXRhLmVycm9yIHx8ICdGYWlsZWQgdG8gdGFrZSBvdmVyIHNlc3Npb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAocmVzLnN0YXR1cyA9PT0gNDA0IHx8IGRhdGEuZXJyb3IgPT09ICdzZXNzaW9uX25vdF9mb3VuZCcpIHtcbiAgICBzaG93U2Vzc2lvbnNMYW5kaW5nUGFuZWwoJ1RoYXQgc2Vzc2lvbiBpcyBubyBsb25nZXIgYWN0aXZlLiBMb2FkIGl0IGZyb20gZGlzayBvciBjcmVhdGUgYSBuZXcgb25lLicpO1xuICAgIG9wZW5TZXNzaW9uc01vZGFsKHsgcmVxdWlyZWQ6IHRydWUgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGRhdGEuZXJyb3IgfHwgYEZhaWxlZCB0byBjbGFpbSBzZXNzaW9uICgke3Jlcy5zdGF0dXN9KWApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlc3Npb24gbmF2aWdhdGlvbiBmcm9tIGxhbmRpbmcgcGFnZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHNob3dTZXNzaW9uc0xhbmRpbmdQYW5lbChtZXNzYWdlID0gJycpIHtcbiAgc3RhdGVNYW5hZ2VyLnNldEN1cnJlbnRUYWIoJ2pvYicpO1xuICBzdGF0ZU1hbmFnZXIuc2V0UGhhc2UoUEhBU0VTLklOSVQpO1xuICB1cGRhdGVBY3Rpb25CdXR0b25zKCdqb2InKTtcbiAgdXBkYXRlUG9zaXRpb25UaXRsZSh7fSk7XG5cbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGlmICghY29udGVudCkgcmV0dXJuO1xuXG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLWxhbmRpbmctc2hlbGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLWxhbmRpbmctaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLWxhbmRpbmctY29weVwiPlxuICAgICAgICAgIDxoMj5TZWxlY3QgYSBTZXNzaW9uPC9oMj5cbiAgICAgICAgICA8cD5FYWNoIGJyb3dzZXIgdGFiIG5vdyB3b3JrcyBhZ2FpbnN0IGl0cyBvd24gVVJMLXNjb3BlZCBzZXNzaW9uLjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLWxhbmRpbmctYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cImNyZWF0ZU5ld1Nlc3Npb25Jbk5ld1RhYigpXCI+XHVGRjBCIE5ldyBTZXNzaW9uIGluIE5ldyBUYWI8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgICR7bWVzc2FnZSA/IGA8cCBzdHlsZT1cIm1hcmdpbi1ib3R0b206MjBweDtjb2xvcjojYjQ1MzA5O2ZvbnQtd2VpZ2h0OjYwMDtcIj4ke2VzY2FwZUh0bWwobWVzc2FnZSl9PC9wPmAgOiAnJ31cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToyNHB4O2ZsZXgtd3JhcDp3cmFwO1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBwcmltYXJ5XCIgb25jbGljaz1cImNyZWF0ZU5ld1Nlc3Npb25BbmROYXZpZ2F0ZSgpXCI+KyBOZXcgU2Vzc2lvbjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG59XG5cbmZ1bmN0aW9uIF9yZXN0b3JlVGFiRm9yUGhhc2Uoc2Vzc2lvblBoYXNlKSB7XG4gIGNvbnN0IHBoYXNlVGFiTWFwID0ge1xuICAgIFtQSEFTRVMuSU5JVF06ICAgICAgICAgICAgICdqb2InLFxuICAgIFtQSEFTRVMuSk9CX0FOQUxZU0lTXTogICAgICdhbmFseXNpcycsXG4gICAgW1BIQVNFUy5DVVNUT01JWkFUSU9OXTogICAgJ2V4cC1yZXZpZXcnLFxuICAgIFtQSEFTRVMuUkVXUklURV9SRVZJRVddOiAgICdyZXdyaXRlJyxcbiAgICBbUEhBU0VTLlNQRUxMX0NIRUNLXTogICAgICAnc3BlbGwnLFxuICAgIFtQSEFTRVMuR0VORVJBVElPTl06ICAgICAgICdsYXlvdXQnLFxuICAgIFtQSEFTRVMuTEFZT1VUX1JFVklFV106ICAgICdsYXlvdXQnLFxuICAgIFtQSEFTRVMuRklOQUxfR0VORVJBVElPTl06ICdmaW5hbF9nZW5lcmF0ZScsXG4gICAgW1BIQVNFUy5SRUZJTkVNRU5UXTogICAgICAgJ2Rvd25sb2FkJyxcbiAgfTtcbiAgY29uc3QgdGFyZ2V0VGFiID0gcGhhc2VUYWJNYXBbc2Vzc2lvblBoYXNlXSB8fCAnam9iJztcblxuICBpZiAodHlwZW9mIHN3aXRjaFRhYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHN3aXRjaFRhYih0YXJnZXRUYWIpO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlTWFuYWdlci5zZXRDdXJyZW50VGFiKHRhcmdldFRhYik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc29sdmVSZXN0b3JlZFBoYXNlKHN0YXR1c0RhdGEpIHtcbiAgY29uc3QgcGhhc2UgPSBzdGF0dXNEYXRhPy5waGFzZSB8fCBQSEFTRVMuSU5JVDtcblxuICAvLyBHdWFyZDogbm8gam9iX2FuYWx5c2lzIG1lYW5zIHdlIGNhbm5vdCBiZSBwYXN0IHRoZSBpbml0aWFsIGlucHV0IHN0ZXAuXG4gIGlmICghc3RhdHVzRGF0YT8uam9iX2FuYWx5c2lzKSB7XG4gICAgcmV0dXJuIFBIQVNFUy5JTklUO1xuICB9XG5cbiAgLy8gR3VhcmQ6IHBoYXNlIGNsYWltcyBjdXN0b21pemF0aW9ucyB3ZXJlIHJldmlld2VkLCBidXQgdGhleSB3ZXJlIG5ldmVyXG4gIC8vIGdlbmVyYXRlZCAoZS5nLiBiYWNrZW5kIHJlc3RhcnRlZCBhZnRlciBhbmFseXplX2pvYiBidXQgYmVmb3JlXG4gIC8vIHJlY29tbWVuZF9jdXN0b21pemF0aW9ucyByYW4sIG9yIGxlZ2FjeSBzZXNzaW9ucyBzYXZlZCB3aXRoIHRoZSBvbGRcbiAgLy8gcHJlbWF0dXJlLUNVU1RPTUlaQVRJT04gYnVnKS4gRmFsbCBiYWNrIHNvIHRoZSB1c2VyIHNlZXMgdGhlIEFuYWx5c2lzXG4gIC8vIHN0ZXAgYW5kIGNhbiBydW4gUmVjb21tZW5kIEN1c3RvbWl6YXRpb25zIGZyb20gdGhlcmUuXG4gIGlmIChcbiAgICAocGhhc2UgPT09IFBIQVNFUy5DVVNUT01JWkFUSU9OIHx8IHBoYXNlID09PSBQSEFTRVMuUkVXUklURV9SRVZJRVcpXG4gICAgJiYgIXN0YXR1c0RhdGE/LmN1c3RvbWl6YXRpb25zXG4gICkge1xuICAgIHJldHVybiBQSEFTRVMuSk9CX0FOQUxZU0lTO1xuICB9XG5cbiAgcmV0dXJuIHBoYXNlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlc3Npb24gY29udGV4dCAvIHJlc3RvcmVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVTZXNzaW9uQ29udGV4dCgpIHtcbiAgY29uc3QgdXJsU2Vzc2lvbklkID0gZ2V0U2Vzc2lvbklkRnJvbVVSTCgpO1xuICBpZiAoIXVybFNlc3Npb25JZCkge1xuICAgIHNob3dTZXNzaW9uc0xhbmRpbmdQYW5lbCgpO1xuICAgIG9wZW5TZXNzaW9uc01vZGFsKHsgcmVxdWlyZWQ6IHRydWUgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGVNYW5hZ2VyLnNldFNlc3Npb25JZCh1cmxTZXNzaW9uSWQpO1xuICByZXR1cm4gX2NsYWltQ3VycmVudFNlc3Npb24odXJsU2Vzc2lvbklkKTtcbn1cblxuZnVuY3Rpb24gX2FwcGVuZFJlc3RvcmVkRGVjaXNpb25zU3VtbWFyeSgpIHtcbiAgY29uc3QgcGhhc2UgPSBzdGF0ZU1hbmFnZXIuZ2V0UGhhc2UoKTtcbiAgY29uc3QgY3VzdG9taXphdGlvbnMgPSBzdGF0ZU1hbmFnZXIuZ2V0VGFiRGF0YSgnY3VzdG9taXphdGlvbnMnKSB8fCB3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucztcbiAgY29uc3QgcGFydHMgPSBbXTtcblxuICBpZiAoY3VzdG9taXphdGlvbnMpIHtcbiAgICBjb25zdCBleHBDb3VudCA9IChjdXN0b21pemF0aW9ucy5yZWNvbW1lbmRlZF9leHBlcmllbmNlcyB8fCBbXSkubGVuZ3RoO1xuICAgIGlmIChleHBDb3VudCA+IDApIHBhcnRzLnB1c2goYCR7ZXhwQ291bnR9IGV4cGVyaWVuY2Uke2V4cENvdW50ICE9PSAxID8gJ3MnIDogJyd9IHJlY29tbWVuZGVkYCk7XG4gICAgY29uc3Qgc2tpbGxDb3VudCA9IChjdXN0b21pemF0aW9ucy5yZWNvbW1lbmRlZF9za2lsbHMgfHwgW10pLmxlbmd0aDtcbiAgICBpZiAoc2tpbGxDb3VudCA+IDApIHBhcnRzLnB1c2goYCR7c2tpbGxDb3VudH0gc2tpbGwke3NraWxsQ291bnQgIT09IDEgPyAncycgOiAnJ30gcmVjb21tZW5kZWRgKTtcbiAgfVxuXG4gIGNvbnN0IGRlY2lzaW9ucyA9IHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMgfHwge307XG4gIGNvbnN0IGFwcHJvdmVkUmV3cml0ZXMgPSBBcnJheS5pc0FycmF5KHdpbmRvdy5hcHByb3ZlZFJld3JpdGVzKSA/IHdpbmRvdy5hcHByb3ZlZFJld3JpdGVzLmxlbmd0aFxuICAgIDogT2JqZWN0LmtleXMoZGVjaXNpb25zLmV4cGVyaWVuY2VfZGVjaXNpb25zIHx8IHt9KS5sZW5ndGg7XG4gIGlmIChhcHByb3ZlZFJld3JpdGVzID4gMCkgcGFydHMucHVzaChgJHthcHByb3ZlZFJld3JpdGVzfSByZXdyaXRlJHthcHByb3ZlZFJld3JpdGVzICE9PSAxID8gJ3MnIDogJyd9IGFwcHJvdmVkYCk7XG5cbiAgY29uc3QgYXRzID0gc3RhdGVNYW5hZ2VyLmdldEF0c1Njb3JlKCk7XG4gIGlmIChhdHMgJiYgdHlwZW9mIGF0cy5vdmVyYWxsID09PSAnbnVtYmVyJykge1xuICAgIHBhcnRzLnB1c2goYEFUUyBzY29yZSAke01hdGgucm91bmQoYXRzLm92ZXJhbGwpfSVgKTtcbiAgfVxuXG4gIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgcGhhc2VMYWJlbCA9IFNFU1NJT05fUEhBU0VfTEFCRUxTX1NIT1JUW3BoYXNlXSB8fCBTdHJpbmcocGhhc2UpLnJlcGxhY2UoL18vZywgJyAnKTtcbiAgICBjb25zdCBwb3NpdGlvbkN0eCA9IHdpbmRvdy5fcmVzdG9yZWRQb3NpdGlvbk5hbWUgPyBgIGZvciAke3dpbmRvdy5fcmVzdG9yZWRQb3NpdGlvbk5hbWV9YCA6ICcnO1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdUQ4M0RcdURDQ0IgUmVzdG9yZWQke3Bvc2l0aW9uQ3R4fSBhdCBzdGFnZTogJHtwaGFzZUxhYmVsfSBcdTIwMTQgJHtwYXJ0cy5qb2luKCcsICcpfS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXN0b3JlU2Vzc2lvbigpIHtcbiAgdHJ5IHtcbiAgICBzdGF0ZU1hbmFnZXIuc2V0SXNSZWNvbm5lY3RpbmcodHJ1ZSk7XG5cbiAgICBjb25zdCBzdG9yZWRTZXNzaW9uSWQgPSBnZXRTZXNzaW9uSWRGcm9tVVJMKCkgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oU3RvcmFnZUtleXMuU0VTU0lPTl9JRCk7XG4gICAgaWYgKCFzdG9yZWRTZXNzaW9uSWQpIHtcbiAgICAgIHN0YXRlTWFuYWdlci5zZXRJc1JlY29ubmVjdGluZyhmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlTWFuYWdlci5zZXRTZXNzaW9uSWQoc3RvcmVkU2Vzc2lvbklkKTtcblxuICAgIC8vIFRyeSB0byByZXN0b3JlIGNvbnZlcnNhdGlvbiBoaXN0b3J5IGZyb20gYmFja2VuZFxuICAgIGNvbnN0IGhpc3RvcnlSZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9oaXN0b3J5Jyk7XG4gICAgaWYgKGhpc3RvcnlSZXMub2spIHtcbiAgICAgIGNvbnN0IGhpc3RvcnlEYXRhID0gYXdhaXQgaGlzdG9yeVJlcy5qc29uKCk7XG5cbiAgICAgIC8vIEFsd2F5cyBjbGVhciBwbGFjZWhvbGRlciBIVE1MIGNvbnRlbnQgbm93IHRoYXQgd2UgaGF2ZSBhIGxpdmUgc2Vzc2lvbiByZXNwb25zZS5cbiAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb252ZXJzYXRpb24nKTtcbiAgICAgIGNvbnZlcnNhdGlvbi5pbm5lckhUTUwgPSAnJztcblxuICAgICAgLy8gQWx3YXlzIHJlc3RvcmUgZnJvbSB0aGUgc2VydmVyIHNlc3Npb24gZmlsZSAoYXV0aG9yaXRhdGl2ZSBoaXN0b3J5IHNvdXJjZSkuXG4gICAgICBpZiAoaGlzdG9yeURhdGEuaGlzdG9yeSAmJiBoaXN0b3J5RGF0YS5oaXN0b3J5Lmxlbmd0aCA+IDApIHtcblxuICAgICAgICBoaXN0b3J5RGF0YS5oaXN0b3J5LmZvckVhY2gobXNnID0+IHtcbiAgICAgICAgICBpZiAobXNnLnJvbGUgPT09ICd1c2VyJykge1xuICAgICAgICAgICAgYXBwZW5kTWVzc2FnZSgndXNlcicsIG1zZy5jb250ZW50KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5yb2xlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgbXNnLmNvbnRlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgJ1x1RDgzRFx1REQwNCBTZXNzaW9uIHJlc3RvcmVkIGZyb20gc2VydmVyLicpO1xuICAgICAgICBsb2cuaW5mbyhgUmVzdG9yZWQgJHtoaXN0b3J5RGF0YS5oaXN0b3J5Lmxlbmd0aH0gbWVzc2FnZXMgZnJvbSBiYWNrZW5kYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBwaGFzZVxuICAgICAgaWYgKGhpc3RvcnlEYXRhLnBoYXNlKSB7XG4gICAgICAgIHN0YXRlTWFuYWdlci5zZXRQaGFzZShoaXN0b3J5RGF0YS5waGFzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJ5IHRvIHJlc3RvcmUgYmFja2VuZCBzdGF0ZS5cbiAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiBzZXJ2ZXIgaGFkIGxpdmUgc2Vzc2lvbiBkYXRhIChpbiBtZW1vcnkgb3IgbG9hZGVkIGZyb20gZGlzaykuXG4gICAgY29uc3Qgc2VydmVySGFzRGF0YSA9IGF3YWl0IHJlc3RvcmVCYWNrZW5kU3RhdGUoKTtcblxuICAgIC8vIFJlc3RvcmUgVUktb25seSBwcmVmcyAoYWN0aXZlUmV2aWV3UGFuZSkgZnJvbSBsb2NhbFN0b3JhZ2UuXG4gICAgcmVzdG9yZVRhYkRhdGEoeyB1aVByZWZzT25seTogc2VydmVySGFzRGF0YSB9KTtcblxuICAgIC8vIFNob3cgYSByZXN0b3JlZC1kZWNpc2lvbnMgc3VtbWFyeSB3aGVuIHRoZSBiYWNrZW5kIGhhZCBsaXZlIHNlc3Npb24gZGF0YS5cbiAgICBpZiAoc2VydmVySGFzRGF0YSkge1xuICAgICAgX2FwcGVuZFJlc3RvcmVkRGVjaXNpb25zU3VtbWFyeSgpO1xuICAgIH1cblxuICAgIHN0YXRlTWFuYWdlci5zZXRJc1JlY29ubmVjdGluZyhmYWxzZSk7XG5cbiAgICAvLyBSdW4gYSBiYWNrZ3JvdW5kIGhlYWx0aCBjaGVjayBzbyB0aGUgc3RhdHVzIHBpbGwgcmVmbGVjdHMgbGl2ZSBjb25uZWN0aXZpdHkuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLnRlc3RDdXJyZW50TW9kZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGdsb2JhbFRoaXMudGVzdEN1cnJlbnRNb2RlbCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICB9XG5cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cud2FybignU2Vzc2lvbiByZXN0b3JhdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdTI2QTBcdUZFMEYgQ291bGQgbm90IHJlc3RvcmUgcHJldmlvdXMgc2Vzc2lvbi4gU3RhcnRpbmcgZnJlc2guICgke2Vycm9yLm1lc3NhZ2V9KWApO1xuICAgIHN0YXRlTWFuYWdlci5zZXRJc1JlY29ubmVjdGluZyhmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2h5ZHJhdGVTdGF0dXNEZXJpdmVkU3RhdGUoc3RhdHVzRGF0YSkge1xuICB3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0cyA9IHt9O1xuICB0cnkge1xuICAgIGlmIChzdGF0dXNEYXRhLmFjaGlldmVtZW50X2VkaXRzICYmIE9iamVjdC5rZXlzKHN0YXR1c0RhdGEuYWNoaWV2ZW1lbnRfZWRpdHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHN0YXR1c0RhdGEuYWNoaWV2ZW1lbnRfZWRpdHMpKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHBhcnNlSW50KGssIDEwKTtcbiAgICAgICAgY29uc3QgcmF3SXRlbXMgPSBBcnJheS5pc0FycmF5KHYpID8gdiA6IFt2XTtcbiAgICAgICAgd2luZG93LmFjaGlldmVtZW50RWRpdHNbaWR4XSA9IHJhd0l0ZW1zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICBpZiAoaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHRleHQ6IFN0cmluZyhpdGVtLnRleHQgPz8gaXRlbS5kZXNjcmlwdGlvbiA/PyBpdGVtLmNvbnRlbnQgPz8gJycpLFxuICAgICAgICAgICAgICBoaWRkZW46IEJvb2xlYW4oaXRlbS5oaWRkZW4pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IFN0cmluZyhpdGVtID8/ICcnKSxcbiAgICAgICAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChfZSkgeyAvKiBub24tZmF0YWwgKi8gfVxuXG4gIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMgPSB7XG4gICAgZXhwZXJpZW5jZV9kZWNpc2lvbnM6IHN0YXR1c0RhdGEuZXhwZXJpZW5jZV9kZWNpc2lvbnMgfHwge30sXG4gICAgc2tpbGxfZGVjaXNpb25zOiAgICAgIHN0YXR1c0RhdGEuc2tpbGxfZGVjaXNpb25zICAgICAgfHwge30sXG4gICAgYWNoaWV2ZW1lbnRfZGVjaXNpb25zOnN0YXR1c0RhdGEuYWNoaWV2ZW1lbnRfZGVjaXNpb25zIHx8IHt9LFxuICAgIHB1YmxpY2F0aW9uX2RlY2lzaW9uczpzdGF0dXNEYXRhLnB1YmxpY2F0aW9uX2RlY2lzaW9ucyB8fCB7fSxcbiAgICBzdW1tYXJ5X2ZvY3VzX292ZXJyaWRlOiBzdGF0dXNEYXRhLnN1bW1hcnlfZm9jdXNfb3ZlcnJpZGUgfHwgbnVsbCxcbiAgICBleHRyYV9za2lsbHM6ICAgICAgICAgICBzdGF0dXNEYXRhLmV4dHJhX3NraWxscyB8fCBbXSxcbiAgICBleHRyYV9za2lsbF9tYXRjaGVzOiAgICBzdGF0dXNEYXRhLmV4dHJhX3NraWxsX21hdGNoZXMgfHwge30sXG4gIH07XG4gIHdpbmRvdy5fYWxsRXhwZXJpZW5jZXMgPSBzdGF0dXNEYXRhLmFsbF9leHBlcmllbmNlcyB8fCBbXTtcbiAgd2luZG93LnNlbGVjdGVkU3VtbWFyeUtleSA9IHN0YXR1c0RhdGEuc3VtbWFyeV9mb2N1c19vdmVycmlkZSB8fCBzdGF0dXNEYXRhLnNlbGVjdGVkX3N1bW1hcnlfa2V5IHx8IG51bGw7XG4gIHdpbmRvdy5fbmV3U2tpbGxzRnJvbUxMTSA9IHN0YXR1c0RhdGEubmV3X3NraWxsc19mcm9tX2xsbSB8fCBbXTtcbiAgd2luZG93Ll9zdGF0dXNJbnRha2UgPSBzdGF0dXNEYXRhLmludGFrZSAmJiB0eXBlb2Ygc3RhdHVzRGF0YS5pbnRha2UgPT09ICdvYmplY3QnXG4gICAgPyBzdGF0dXNEYXRhLmludGFrZVxuICAgIDoge307XG4gIHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgPSBBcnJheS5pc0FycmF5KHN0YXR1c0RhdGEucG9zdF9hbmFseXNpc19xdWVzdGlvbnMpXG4gICAgPyBzdGF0dXNEYXRhLnBvc3RfYW5hbHlzaXNfcXVlc3Rpb25zXG4gICAgOiBbXTtcbiAgd2luZG93LnF1ZXN0aW9uQW5zd2VycyA9IChzdGF0dXNEYXRhLnBvc3RfYW5hbHlzaXNfYW5zd2VycyAmJiB0eXBlb2Ygc3RhdHVzRGF0YS5wb3N0X2FuYWx5c2lzX2Fuc3dlcnMgPT09ICdvYmplY3QnKVxuICAgID8gc3RhdHVzRGF0YS5wb3N0X2FuYWx5c2lzX2Fuc3dlcnNcbiAgICA6IHt9O1xuICB3aW5kb3cuX3Jlc3RvcmVkUG9zaXRpb25OYW1lID0gc3RhdHVzRGF0YS5wb3NpdGlvbl9uYW1lIHx8IG51bGw7XG59XG5cbmZ1bmN0aW9uIF9oeWRyYXRlU3RhdHVzVGFiU3RhdGUoc3RhdHVzRGF0YSkge1xuICBjb25zdCBoYXNBbmFseXNpcyA9IHN0YXR1c0RhdGEuam9iX2FuYWx5c2lzICE9PSB1bmRlZmluZWQgJiYgc3RhdHVzRGF0YS5qb2JfYW5hbHlzaXMgIT09IG51bGw7XG4gIGNvbnN0IGhhc0N1c3RvbWl6YXRpb25zID0gc3RhdHVzRGF0YS5jdXN0b21pemF0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHN0YXR1c0RhdGEuY3VzdG9taXphdGlvbnMgIT09IG51bGw7XG4gIGNvbnN0IGhhc0dlbmVyYXRlZEZpbGVzID0gc3RhdHVzRGF0YS5nZW5lcmF0ZWRfZmlsZXMgIT09IHVuZGVmaW5lZCAmJiBzdGF0dXNEYXRhLmdlbmVyYXRlZF9maWxlcyAhPT0gbnVsbDtcblxuICBzdGF0ZU1hbmFnZXIuc2V0VGFiRGF0YSgnYW5hbHlzaXMnLCBoYXNBbmFseXNpcyA/IHN0YXR1c0RhdGEuam9iX2FuYWx5c2lzIDogbnVsbCk7XG4gIHN0YXRlTWFuYWdlci5zZXRUYWJEYXRhKCdjdXN0b21pemF0aW9ucycsIGhhc0N1c3RvbWl6YXRpb25zID8gc3RhdHVzRGF0YS5jdXN0b21pemF0aW9ucyA6IG51bGwpO1xuICBzdGF0ZU1hbmFnZXIuc2V0VGFiRGF0YSgnY3YnLCBoYXNHZW5lcmF0ZWRGaWxlcyA/IHN0YXR1c0RhdGEuZ2VuZXJhdGVkX2ZpbGVzIDogbnVsbCk7XG4gIHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zID0gaGFzQ3VzdG9taXphdGlvbnMgPyBzdGF0dXNEYXRhLmN1c3RvbWl6YXRpb25zIDogbnVsbDtcblxuICBpZiAoaGFzQW5hbHlzaXMpIHtcbiAgICByZWZyZXNoQXRzU2NvcmUoJ2FuYWx5c2lzJyk7XG4gIH1cblxuICByZXR1cm4gaGFzQW5hbHlzaXMgfHwgaGFzQ3VzdG9taXphdGlvbnMgfHwgaGFzR2VuZXJhdGVkRmlsZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc3RvcmVCYWNrZW5kU3RhdGUoKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VydmVyIGhhZCBhbnkgbGl2ZSBzZXNzaW9uIGRhdGEuXG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdHVzUmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvc3RhdHVzJyk7XG4gICAgaWYgKCFzdGF0dXNSZXMub2spIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBzdGF0dXNEYXRhID0gcGFyc2VTdGF0dXNSZXNwb25zZShhd2FpdCBzdGF0dXNSZXMuanNvbigpKTtcblxuICAgIGlmICh0eXBlb2YgdXBkYXRlQXV0aEJhZGdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB1cGRhdGVBdXRoQmFkZ2Uoc3RhdHVzRGF0YS5jb3BpbG90X2F1dGggfHwge30sIHN0YXR1c0RhdGEubGxtX3Byb3ZpZGVyIHx8IG51bGwpO1xuICAgIH1cblxuICAgIF9oeWRyYXRlU3RhdHVzRGVyaXZlZFN0YXRlKHN0YXR1c0RhdGEpO1xuXG4gICAgbGV0IHNlcnZlckhhc0RhdGEgPSBfaHlkcmF0ZVN0YXR1c1RhYlN0YXRlKHN0YXR1c0RhdGEpO1xuXG4gICAgaWYgKHN0YXR1c0RhdGEuam9iX2FuYWx5c2lzICE9PSB1bmRlZmluZWQgJiYgc3RhdHVzRGF0YS5qb2JfYW5hbHlzaXMgIT09IG51bGwpIHtcbiAgICAgIGxvZy5pbmZvKCdSZXN0b3JlZCBhbmFseXNpcyBkYXRhIGZyb20gYmFja2VuZCBtZW1vcnknKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1c0RhdGEuY3VzdG9taXphdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBzdGF0dXNEYXRhLmN1c3RvbWl6YXRpb25zICE9PSBudWxsKSB7XG4gICAgICBsb2cuaW5mbygnUmVzdG9yZWQgY3VzdG9taXphdGlvbnMgZGF0YSBmcm9tIGJhY2tlbmQgbWVtb3J5Jyk7XG4gICAgfVxuICAgIGlmIChzdGF0dXNEYXRhLmdlbmVyYXRlZF9maWxlcyAhPT0gdW5kZWZpbmVkICYmIHN0YXR1c0RhdGEuZ2VuZXJhdGVkX2ZpbGVzICE9PSBudWxsKSB7XG4gICAgICBsb2cuaW5mbygnUmVzdG9yZWQgQ1YgZGF0YSBmcm9tIGJhY2tlbmQgbWVtb3J5Jyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdlbmVyYXRpb25SZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9jdi9nZW5lcmF0aW9uLXN0YXRlJyk7XG4gICAgICBpZiAoZ2VuZXJhdGlvblJlcy5vaykge1xuICAgICAgICBjb25zdCBnZW5lcmF0aW9uRGF0YSA9IGF3YWl0IGdlbmVyYXRpb25SZXMuanNvbigpO1xuICAgICAgICBpZiAoZ2VuZXJhdGlvbkRhdGE/Lm9rKSB7XG4gICAgICAgICAgY29uc3QgaGFzQ2FjaGVkQXRzU2NvcmUgPSBCb29sZWFuKGdlbmVyYXRpb25EYXRhLmF0c19zY29yZSk7XG4gICAgICAgICAgY29uc3QgaGFzUGVyc2lzdGVkR2VuZXJhdGlvbkRhdGEgPSBCb29sZWFuKFxuICAgICAgICAgICAgZ2VuZXJhdGlvbkRhdGEucHJldmlld19hdmFpbGFibGVcbiAgICAgICAgICAgICAgfHwgZ2VuZXJhdGlvbkRhdGEuZmluYWxfZ2VuZXJhdGVkX2F0XG4gICAgICAgICAgICAgIHx8IGhhc0NhY2hlZEF0c1Njb3JlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHN0YXRlTWFuYWdlci5zZXRHZW5lcmF0aW9uU3RhdGUoe1xuICAgICAgICAgICAgcGhhc2U6IGdlbmVyYXRpb25EYXRhLnBoYXNlIHx8ICdpZGxlJyxcbiAgICAgICAgICAgIHByZXZpZXdBdmFpbGFibGU6IEJvb2xlYW4oZ2VuZXJhdGlvbkRhdGEucHJldmlld19hdmFpbGFibGUpLFxuICAgICAgICAgICAgcHJldmlld091dHB1dHM6IGdlbmVyYXRpb25EYXRhLnByZXZpZXdfb3V0cHV0cyB8fCBudWxsLFxuICAgICAgICAgICAgbGF5b3V0Q29uZmlybWVkOiBCb29sZWFuKGdlbmVyYXRpb25EYXRhLmxheW91dF9jb25maXJtZWQpLFxuICAgICAgICAgICAgcGFnZUNvdW50RXN0aW1hdGU6IGdlbmVyYXRpb25EYXRhLnBhZ2VfY291bnRfZXN0aW1hdGUgPz8gbnVsbCxcbiAgICAgICAgICAgIHBhZ2VDb3VudEV4YWN0OiBnZW5lcmF0aW9uRGF0YS5wYWdlX2NvdW50X2V4YWN0ID8/IG51bGwsXG4gICAgICAgICAgICBwYWdlQ291bnRDb25maWRlbmNlOiBnZW5lcmF0aW9uRGF0YS5wYWdlX2NvdW50X2NvbmZpZGVuY2UgPz8gbnVsbCxcbiAgICAgICAgICAgIHBhZ2VDb3VudFNvdXJjZTogZ2VuZXJhdGlvbkRhdGEucGFnZV9jb3VudF9zb3VyY2UgfHwgbnVsbCxcbiAgICAgICAgICAgIHBhZ2VOZWVkc0V4YWN0UmVjaGVjazogQm9vbGVhbihcbiAgICAgICAgICAgICAgZ2VuZXJhdGlvbkRhdGEucGFnZV9jb3VudF9uZWVkc19leGFjdF9yZWNoZWNrLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHBhZ2VXYXJuaW5nOiBCb29sZWFuKGdlbmVyYXRpb25EYXRhLnBhZ2VfbGVuZ3RoX3dhcm5pbmcpLFxuICAgICAgICAgICAgbGF5b3V0SW5zdHJ1Y3Rpb25zQ291bnQ6IGdlbmVyYXRpb25EYXRhLmxheW91dF9pbnN0cnVjdGlvbnNfY291bnQgfHwgMCxcbiAgICAgICAgICAgIGZpbmFsR2VuZXJhdGVkQXQ6IGdlbmVyYXRpb25EYXRhLmZpbmFsX2dlbmVyYXRlZF9hdCB8fCBudWxsLFxuICAgICAgICAgICAgcHJldmlld0dlbmVyYXRlZEF0OiBnZW5lcmF0aW9uRGF0YS5wcmV2aWV3X2dlbmVyYXRlZF9hdCB8fCBudWxsLFxuICAgICAgICAgICAgcHJldmlld1JlcXVlc3RJZDogZ2VuZXJhdGlvbkRhdGEucHJldmlld19yZXF1ZXN0X2lkIHx8IG51bGwsXG4gICAgICAgICAgICBjb25maXJtZWRBdDogZ2VuZXJhdGlvbkRhdGEuY29uZmlybWVkX2F0IHx8IG51bGwsXG4gICAgICAgICAgICAvLyBPcHRpb25hbCBzZXJ2ZXItcHJvdmlkZWQgcmV2aXNpb24gbWV0YWRhdGEgKGlmIGJhY2tlbmQgZXhwb3NlcyB0aGVtKVxuICAgICAgICAgICAgY29udGVudFJldmlzaW9uOiAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHYgPSBnZW5lcmF0aW9uRGF0YS5jb250ZW50X3JldmlzaW9uID8/IGdlbmVyYXRpb25EYXRhLmNvbnRlbnRSZXZpc2lvbjtcbiAgICAgICAgICAgICAgcmV0dXJuICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbCkgPyAwIDogKE51bWJlci5pc0Zpbml0ZShOdW1iZXIodikpID8gTnVtYmVyKHYpIDogMCk7XG4gICAgICAgICAgICB9KSgpLFxuICAgICAgICAgICAgbGFzdFByZXZpZXdDb250ZW50UmV2aXNpb246IGdlbmVyYXRpb25EYXRhLmxhc3RfcHJldmlld19jb250ZW50X3JldmlzaW9uID8/IGdlbmVyYXRpb25EYXRhLmxhc3RQcmV2aWV3Q29udGVudFJldmlzaW9uID8/IG51bGwsXG4gICAgICAgICAgICBsYXN0RmluYWxDb250ZW50UmV2aXNpb246IGdlbmVyYXRpb25EYXRhLmxhc3RfZmluYWxfY29udGVudF9yZXZpc2lvbiA/PyBnZW5lcmF0aW9uRGF0YS5sYXN0RmluYWxDb250ZW50UmV2aXNpb24gPz8gbnVsbCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChoYXNDYWNoZWRBdHNTY29yZSkge1xuICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnNldEF0c1Njb3JlKGdlbmVyYXRpb25EYXRhLmF0c19zY29yZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5jbGVhckF0c1Njb3JlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGhhc1BlcnNpc3RlZEdlbmVyYXRpb25EYXRhKSB7XG4gICAgICAgICAgICBzZXJ2ZXJIYXNEYXRhID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChfZSkgeyAvKiBub24tZmF0YWwgKi8gfVxuXG4gICAgY29uc3QgcmVzdG9yZWRQaGFzZSA9IF9yZXNvbHZlUmVzdG9yZWRQaGFzZShzdGF0dXNEYXRhKTtcbiAgICBzdGF0ZU1hbmFnZXIuc2V0UGhhc2UocmVzdG9yZWRQaGFzZSk7XG4gICAgX3Jlc3RvcmVUYWJGb3JQaGFzZShyZXN0b3JlZFBoYXNlKTtcblxuICAgIC8vIEtlZXAgdGhlIHBvc2l0aW9uLXRpdGxlIGVsZW1lbnQgaW4gc3luYyB3aGVuZXZlciB3ZSByZXN0b3JlIHN0YXR1cyBkYXRhLlxuICAgIGlmICh0eXBlb2YgdXBkYXRlUG9zaXRpb25UaXRsZSA9PT0gJ2Z1bmN0aW9uJykgdXBkYXRlUG9zaXRpb25UaXRsZShzdGF0dXNEYXRhKTtcblxuICAgIGlmICh0eXBlb2YgdXBkYXRlSW5jbHVzaW9uQ291bnRzID09PSAnZnVuY3Rpb24nKSB1cGRhdGVJbmNsdXNpb25Db3VudHMoKTtcblxuICAgIGlmICghc3RhdHVzRGF0YS5wb3NpdGlvbl9uYW1lICYmICFzdGF0dXNEYXRhLmpvYl9hbmFseXNpcykge1xuICAgICAgY29uc3Qgc3RvcmVkUGF0aCAgICA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFN0b3JhZ2VLZXlzLlNFU1NJT05fUEFUSCk7XG4gICAgICBjb25zdCBzdG9yZWRTZXNzaW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU3RvcmFnZUtleXMuU0VTU0lPTl9JRCk7XG4gICAgICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IGdldFNlc3Npb25JZEZyb21VUkwgPyBnZXRTZXNzaW9uSWRGcm9tVVJMKCkgOiBudWxsO1xuICAgICAgLy8gT25seSBhdXRvLXJlc3RvcmUgZnJvbSBkaXNrIHdoZW4gcmVjb25uZWN0aW5nIHRvIHRoZSBTQU1FIHNlc3Npb25cbiAgICAgIC8vIChzdG9yZWRTZXNzaW9uIG1hdGNoZXMgdGhlIGN1cnJlbnQgVVJMIHNlc3Npb25faWQpLiAgQSBmcmVzaCBuZXcgc2Vzc2lvblxuICAgICAgLy8gd2lsbCBoYXZlIGEgZGlmZmVyZW50IElELCBzbyB0aGlzIGd1YXJkIHByZXZlbnRzIHRoZSBuZXcgc2Vzc2lvbiBmcm9tXG4gICAgICAvLyBzaWxlbnRseSBsb2FkaW5nIHRoZSBwcmV2aW91cyBzZXNzaW9uJ3MgZGF0YSBvZmYgZGlzay5cbiAgICAgIGlmIChzdG9yZWRQYXRoICYmIHN0b3JlZFNlc3Npb24gJiYgc3RvcmVkU2Vzc2lvbiA9PT0gY3VycmVudFNlc3Npb24pIHtcbiAgICAgICAgLy8gUGFzcyByZWRpcmVjdE9uTWlzbWF0Y2g6ZmFsc2Ugc28gdGhhdCBpZiB0aGUgZmlsZSBvbiBkaXNrIGJlbG9uZ3MgdG8gYVxuICAgICAgICAvLyBkaWZmZXJlbnQgc2Vzc2lvbiAoZS5nLiBTRVNTSU9OX1BBVEggd2FzIG5ldmVyIHVwZGF0ZWQgYWZ0ZXIgYSBuZXdcbiAgICAgICAgLy8gc2Vzc2lvbiB3YXMgY3JlYXRlZCksIHdlIHNpbGVudGx5IHNraXAgdGhlIHJlc3RvcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gbmF2aWdhdGluZyB0aGUgYnJvd3NlciB0byBhIHNlc3Npb24gdGhlIHVzZXIgZGlkbid0IGFzayBmb3IuXG4gICAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRTZXNzaW9uRmlsZShzdG9yZWRQYXRoLCB7IHJlZGlyZWN0T25NaXNtYXRjaDogZmFsc2UgfSk7XG4gICAgICAgIGlmIChsb2FkZWQpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZXJ2ZXJIYXNEYXRhO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy53YXJuKCdGYWlsZWQgdG8gcmVzdG9yZSBiYWNrZW5kIHN0YXRlOicsIGVycm9yKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZFNlc3Npb25GaWxlKHBhdGgsIHsgcmVkaXJlY3RPbk1pc21hdGNoID0gdHJ1ZSB9ID0ge30pIHtcbiAgdHJ5IHtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHVEODNEXHVERDA0IFJlc3RvcmluZyBzZXNzaW9uIGZyb20gZmlsZS4uLicpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL2xvYWQtc2Vzc2lvbicsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHBhdGggfSlcbiAgICB9KTtcbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgY29uc3QgZXJyID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdTI3NEMgRmFpbGVkIHRvIHJlc3RvcmUgc2Vzc2lvbjogJHtlcnIuZXJyb3J9YCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgaWYgKGRhdGEucmVkaXJlY3RfdXJsICYmIGdldFNlc3Npb25JZEZyb21VUkwoKSAhPT0gZGF0YS5zZXNzaW9uX2lkKSB7XG4gICAgICBpZiAoIXJlZGlyZWN0T25NaXNtYXRjaCkge1xuICAgICAgICAvLyBUaGUgZmlsZSBvbiBkaXNrIGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgc2Vzc2lvbiB0aGFuIHRoZSBvbmUgaW4gdGhlXG4gICAgICAgIC8vIFVSTC4gIFNpbGVudGx5IGFib3J0IHJhdGhlciB0aGFuIHJlZGlyZWN0aW5nIHRoZSBicm93c2VyIFx1MjAxNCB0aGUgY2FsbGVyXG4gICAgICAgIC8vIChyZXN0b3JlQmFja2VuZFN0YXRlKSBvbmx5IHdhbnRzIHRvIHJlc3RvcmUgVEhJUyBzZXNzaW9uLCBub3QgbG9hZCBhXG4gICAgICAgIC8vIGRpZmZlcmVudCBvbmUuXG4gICAgICAgIGxvZy53YXJuKFxuICAgICAgICAgICdsb2FkU2Vzc2lvbkZpbGU6IHNlc3Npb25faWQgbWlzbWF0Y2ggKHVybD0lcywgZmlsZT0lcyk7IHNraXBwaW5nIHJlc3RvcmUnLFxuICAgICAgICAgIGdldFNlc3Npb25JZEZyb21VUkwoKSwgZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGRhdGEucmVkaXJlY3RfdXJsKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLlNFU1NJT05fUEFUSCwgZGF0YS5zZXNzaW9uX2ZpbGUgfHwgcGF0aCk7XG5cbiAgICAvLyBSZXNldCBzZXNzaW9uLXNjb3BlZCBzdWdnZXN0aW9uIHN0YXRlXG4gICAgd2luZG93Ll9zdWdnZXN0ZWRBY2hzT3JkZXJlZCA9IG51bGw7XG5cbiAgICAvLyBSZWxvYWQgY29udmVyc2F0aW9uIGhpc3RvcnkgZnJvbSB0aGUgZnJlc2hseS1sb2FkZWQgYmFja2VuZFxuICAgIGNvbnN0IGhpc3RvcnlSZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9oaXN0b3J5Jyk7XG4gICAgaWYgKGhpc3RvcnlSZXMub2spIHtcbiAgICAgIGNvbnN0IGhpc3RvcnlEYXRhID0gYXdhaXQgaGlzdG9yeVJlcy5qc29uKCk7XG4gICAgICBjb25zdCBjb252ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnZlcnNhdGlvbicpO1xuICAgICAgY29udi5pbm5lckhUTUwgPSAnJztcbiAgICAgIChoaXN0b3J5RGF0YS5oaXN0b3J5IHx8IFtdKS5mb3JFYWNoKG1zZyA9PiB7XG4gICAgICAgIGlmIChtc2cucm9sZSAhPT0gJ3N5c3RlbScpIGFwcGVuZE1lc3NhZ2UobXNnLnJvbGUsIG1zZy5jb250ZW50KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHUyNkEwIENvdWxkIG5vdCByZXN0b3JlIGNvbnZlcnNhdGlvbiBoaXN0b3J5LicpO1xuICAgIH1cblxuICAgIGF3YWl0IGZldGNoU3RhdHVzKCk7XG5cbiAgICAvLyBSdW4gYSBiYWNrZ3JvdW5kIGhlYWx0aCBjaGVjayBzbyB0aGUgc3RhdHVzIHBpbGwgcmVmbGVjdHMgbGl2ZSBjb25uZWN0aXZpdHkuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLnRlc3RDdXJyZW50TW9kZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGdsb2JhbFRoaXMudGVzdEN1cnJlbnRNb2RlbCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICB9XG5cbiAgICAvLyBSZWh5ZHJhdGUgdGFiRGF0YSBhbmQgc3dpdGNoIHRvIHRoZSBjb3JyZWN0IHRhYiBmb3IgdGhlIHJlc3RvcmVkIHBoYXNlXG4gICAgY29uc3Qgc2Vzc2lvblBoYXNlID0gZGF0YS5waGFzZSB8fCBQSEFTRVMuSU5JVDtcbiAgICBjb25zdCBwaGFzZVRhYk1hcCA9IHtcbiAgICAgIFtQSEFTRVMuSU5JVF06ICAgICAgICAgICAgICdqb2InLFxuICAgICAgW1BIQVNFUy5KT0JfQU5BTFlTSVNdOiAgICAgJ2FuYWx5c2lzJyxcbiAgICAgIFtQSEFTRVMuQ1VTVE9NSVpBVElPTl06ICAgICdleHAtcmV2aWV3JyxcbiAgICAgIFtQSEFTRVMuUkVXUklURV9SRVZJRVddOiAgICdyZXdyaXRlJyxcbiAgICAgIFtQSEFTRVMuU1BFTExfQ0hFQ0tdOiAgICAgICdzcGVsbCcsXG4gICAgICBbUEhBU0VTLkdFTkVSQVRJT05dOiAgICAgICAnbGF5b3V0JyxcbiAgICAgIFtQSEFTRVMuTEFZT1VUX1JFVklFV106ICAgICdsYXlvdXQnLFxuICAgICAgW1BIQVNFUy5GSU5BTF9HRU5FUkFUSU9OXTogJ2ZpbmFsX2dlbmVyYXRlJyxcbiAgICAgIFtQSEFTRVMuUkVGSU5FTUVOVF06ICAgICAgICdkb3dubG9hZCcsXG4gICAgfTtcbiAgICBjb25zdCB0YXJnZXRUYWIgPSBwaGFzZVRhYk1hcFtzZXNzaW9uUGhhc2VdIHx8ICdqb2InO1xuXG4gICAgY29uc3QgY3VzdG9taXphdGlvblBoYXNlcyA9IFtcbiAgICAgIFBIQVNFUy5DVVNUT01JWkFUSU9OLCBQSEFTRVMuUkVXUklURV9SRVZJRVcsIFBIQVNFUy5TUEVMTF9DSEVDSyxcbiAgICAgIFBIQVNFUy5HRU5FUkFUSU9OLCBQSEFTRVMuTEFZT1VUX1JFVklFVywgUEhBU0VTLkZJTkFMX0dFTkVSQVRJT04sIFBIQVNFUy5SRUZJTkVNRU5ULFxuICAgIF07XG4gICAgaWYgKGN1c3RvbWl6YXRpb25QaGFzZXMuaW5jbHVkZXMoc2Vzc2lvblBoYXNlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgczIgPSBhd2FpdCBmZXRjaCgnL2FwaS9zdGF0dXMnKTtcbiAgICAgICAgY29uc3Qgc2QgPSBwYXJzZVN0YXR1c1Jlc3BvbnNlKGF3YWl0IHMyLmpzb24oKSk7XG4gICAgICAgIF9oeWRyYXRlU3RhdHVzRGVyaXZlZFN0YXRlKHNkKTtcbiAgICAgICAgX2h5ZHJhdGVTdGF0dXNUYWJTdGF0ZShzZCk7XG4gICAgICB9IGNhdGNoIChfKSB7IC8qIG5vbi1mYXRhbCAqLyB9XG4gICAgfVxuXG4gICAgLy8gRm9yIHJld3JpdGVfcmV2aWV3IHBoYXNlLCBwcmUtcG9wdWxhdGUgdGhlIHJld3JpdGUgcGFuZWwgY2FjaGVcbiAgICBpZiAoc2Vzc2lvblBoYXNlID09PSBQSEFTRVMuUkVXUklURV9SRVZJRVcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJyID0gYXdhaXQgZmV0Y2goJy9hcGkvcmV3cml0ZXMnKTtcbiAgICAgICAgaWYgKHJyLm9rKSB7XG4gICAgICAgICAgY29uc3QgcmQgPSBwYXJzZVJld3JpdGVzUmVzcG9uc2UoYXdhaXQgcnIuanNvbigpKTtcbiAgICAgICAgICBjb25zdCByZXdyaXRlcyA9IHJkLnJld3JpdGVzIHx8IFtdO1xuICAgICAgICAgIGNvbnN0IHdhcm5pbmdzID0gcmQucGVyc3Vhc2lvbl93YXJuaW5ncyB8fCBbXTtcbiAgICAgICAgICByZXdyaXRlRGVjaXNpb25zID0ge307XG4gICAgICAgICAgcmVuZGVyUmV3cml0ZVBhbmVsKHJld3JpdGVzLCB3YXJuaW5ncyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHsgLyogbm9uLWZhdGFsICovIH1cbiAgICB9XG5cbiAgICBzd2l0Y2hUYWIodGFyZ2V0VGFiKTtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHUyNzA1IFNlc3Npb24gcmVzdG9yZWQ6ICR7ZGF0YS5wb3NpdGlvbl9uYW1lIHx8ICdVbm5hbWVkJ30gKCR7U0VTU0lPTl9QSEFTRV9MQUJFTFNbZGF0YS5waGFzZV0gfHwgU3RyaW5nKGRhdGEucGhhc2UgfHwgUEhBU0VTLklOSVQpLnJlcGxhY2UoL18vZywgJyAnKX0pYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdTI3NEMgRXJyb3IgcmVzdG9yaW5nIHNlc3Npb246ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVuYW1lIC8gdGFiIGRhdGEgcGVyc2lzdGVuY2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5hc3luYyBmdW5jdGlvbiBwcm9tcHRSZW5hbWVDdXJyZW50U2Vzc2lvbigpIHtcbiAgY29uc3QgdGl0bGVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3NpdGlvbi10aXRsZScpO1xuICBjb25zdCByZW5hbWVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVuYW1lLXNlc3Npb24tYnRuJyk7XG4gIGNvbnN0IGN1cnJlbnQgPSAodGl0bGVFbD8udGV4dENvbnRlbnQgfHwgJycpLnRyaW0oKTtcblxuICAvLyBCdWlsZCBpbmxpbmUgaW5wdXQgd2lkZ2V0IHNvIHdlIG5ldmVyIGNhbGwgd2luZG93LnByb21wdCgpXG4gIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gIHdyYXBwZXIuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4Oyc7XG4gIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgaW5wdXQudHlwZSA9ICd0ZXh0JztcbiAgaW5wdXQudmFsdWUgPSBjdXJyZW50O1xuICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnTmV3IHNlc3Npb24gbmFtZScpO1xuICBpbnB1dC5zdHlsZS5jc3NUZXh0ID0gJ2ZvbnQtc2l6ZTppbmhlcml0O3BhZGRpbmc6MXB4IDRweDtib3JkZXI6MXB4IHNvbGlkICM5NGEzYjg7Ym9yZGVyLXJhZGl1czozcHg7d2lkdGg6MjIwcHg7JztcbiAgY29uc3Qgb2tCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgb2tCdG4udGV4dENvbnRlbnQgPSAnXHUyNzEzJztcbiAgb2tCdG4udGl0bGUgPSAnU2F2ZSByZW5hbWUnO1xuICBva0J0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnU2F2ZSByZW5hbWUnKTtcbiAgb2tCdG4uc3R5bGUuY3NzVGV4dCA9ICdiYWNrZ3JvdW5kOiMxMGI5ODE7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjNweDtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjFweCA2cHg7Zm9udC1zaXplOjFlbTsnO1xuICBjb25zdCBjYW5jZWxCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgY2FuY2VsQnRuLnRleHRDb250ZW50ID0gJ1x1MjcxNSc7XG4gIGNhbmNlbEJ0bi50aXRsZSA9ICdDYW5jZWwgcmVuYW1lJztcbiAgY2FuY2VsQnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdDYW5jZWwgcmVuYW1lJyk7XG4gIGNhbmNlbEJ0bi5zdHlsZS5jc3NUZXh0ID0gJ2JhY2tncm91bmQ6IzZiNzI4MDtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6M3B4O2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6MXB4IDZweDtmb250LXNpemU6MWVtOyc7XG4gIHdyYXBwZXIuYXBwZW5kKGlucHV0LCBva0J0biwgY2FuY2VsQnRuKTtcblxuICBpZiAodGl0bGVFbCkgdGl0bGVFbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBpZiAocmVuYW1lQnRuKSByZW5hbWVCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgdGl0bGVFbD8ucGFyZW50RWxlbWVudD8uaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIHRpdGxlRWwpO1xuICBpbnB1dC5mb2N1cygpO1xuICBpbnB1dC5zZWxlY3QoKTtcblxuICBhc3luYyBmdW5jdGlvbiBkb1JlbmFtZSgpIHtcbiAgICBjb25zdCBuZXdOYW1lID0gaW5wdXQudmFsdWUudHJpbSgpO1xuICAgIGNsZWFudXAoKTtcbiAgICBpZiAoIW5ld05hbWUgfHwgbmV3TmFtZSA9PT0gY3VycmVudCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvcmVuYW1lLWN1cnJlbnQtc2Vzc2lvbicsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IG5ld19uYW1lOiBuZXdOYW1lIH0pLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIGlmIChkYXRhLm9rKSBhd2FpdCBmZXRjaFN0YXR1cygpO1xuICAgICAgZWxzZSBpZiAodHlwZW9mIHNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgc2hvd1RvYXN0KGBSZW5hbWUgZmFpbGVkOiAke2RhdGEuZXJyb3J9YCwgJ2Vycm9yJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHNob3dUb2FzdChgUmVuYW1lIGVycm9yOiAke2UubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHdyYXBwZXIucmVtb3ZlKCk7XG4gICAgaWYgKHRpdGxlRWwpIHRpdGxlRWwuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIGlmIChyZW5hbWVCdG4pIHJlbmFtZUJ0bi5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gIH1cblxuICBva0J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGRvUmVuYW1lKTtcbiAgY2FuY2VsQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xlYW51cCk7XG4gIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBlID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIGRvUmVuYW1lKCk7XG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgY2xlYW51cCgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2F2ZVRhYkRhdGEoKSB7XG4gIHRyeSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oZ2V0U2NvcGVkVGFiRGF0YVN0b3JhZ2VLZXkoc3RhdGVNYW5hZ2VyLmdldFNlc3Npb25JZCgpKSwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgdGFiRGF0YTogc3RhdGVNYW5hZ2VyLmdldEFsbFRhYkRhdGEoKSxcbiAgICAgIGN1cnJlbnRUYWI6IHN0YXRlTWFuYWdlci5nZXRDdXJyZW50VGFiKCksXG4gICAgICBwZW5kaW5nUmVjb21tZW5kYXRpb25zOiB3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucyB8fCBudWxsLFxuICAgICAgaW50ZXJhY3RpdmVTdGF0ZTogc3RhdGVNYW5hZ2VyLmdldEludGVyYWN0aXZlU3RhdGUoKSxcbiAgICAgIGFjdGl2ZVJldmlld1BhbmU6IHdpbmRvdy5fYWN0aXZlUmV2aWV3UGFuZSB8fCAnZXhwZXJpZW5jZXMnLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG4gICAgfSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy53YXJuKCdGYWlsZWQgdG8gc2F2ZSB0YWIgZGF0YTonLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdG9yZVRhYkRhdGEoeyB1aVByZWZzT25seSA9IGZhbHNlIH0gPSB7fSkge1xuICB0cnkge1xuICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oZ2V0U2NvcGVkVGFiRGF0YVN0b3JhZ2VLZXkoc3RhdGVNYW5hZ2VyLmdldFNlc3Npb25JZCgpKSk7XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShzYXZlZCk7XG5cbiAgICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSAoZGF0YS50aW1lc3RhbXAgfHwgMCk7XG4gICAgICBpZiAoYWdlIDwgMjQgKiA2MCAqIDYwICogMTAwMCkge1xuICAgICAgICBpZiAoIXVpUHJlZnNPbmx5KSB7XG4gICAgICAgICAgaWYgKGRhdGEudGFiRGF0YSkge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZGF0YS50YWJEYXRhKS5mb3JFYWNoKChbdGFiLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnNldFRhYkRhdGEodGFiLCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRhdGEucGVuZGluZ1JlY29tbWVuZGF0aW9ucykge1xuICAgICAgICAgICAgd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgPSBkYXRhLnBlbmRpbmdSZWNvbW1lbmRhdGlvbnM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkYXRhLmludGVyYWN0aXZlU3RhdGUpIHtcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zZXRJbnRlcmFjdGl2ZVN0YXRlKGRhdGEuaW50ZXJhY3RpdmVTdGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmFjdGl2ZVJldmlld1BhbmUpIHtcbiAgICAgICAgICB3aW5kb3cuX2FjdGl2ZVJldmlld1BhbmUgPSBkYXRhLmFjdGl2ZVJldmlld1BhbmU7XG4gICAgICAgIH1cblxuICAgICAgICBsb2cuaW5mbyhgUmVzdG9yZWQgdGFiIGRhdGEgZnJvbSBsb2NhbFN0b3JhZ2UgKHVpUHJlZnNPbmx5PSR7dWlQcmVmc09ubHl9KWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZ2V0U2NvcGVkVGFiRGF0YVN0b3JhZ2VLZXkoc3RhdGVNYW5hZ2VyLmdldFNlc3Npb25JZCgpKSk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy53YXJuKCdGYWlsZWQgdG8gcmVzdG9yZSB0YWIgZGF0YTonLCBlcnJvcik7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEVTIG1vZHVsZSBleHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZXhwb3J0IHtcbiAgZm9ybWF0U2Vzc2lvblBoYXNlTGFiZWwsXG4gIF9nZXRDdXJyZW50U2Vzc2lvbklkVmFsdWUsXG4gIF9nZXRDdXJyZW50T3duZXJUb2tlblZhbHVlLFxuICBidWlsZFNlc3Npb25Td2l0Y2hlckxhYmVsLFxuICBnZXRBY3RpdmVTZXNzaW9uT3duZXJzaGlwTWV0YSxcbiAgZm9ybWF0U2Vzc2lvblRpbWVzdGFtcCxcbiAgY3JlYXRlTmV3U2Vzc2lvbkFuZE5hdmlnYXRlLFxuICBjcmVhdGVOZXdTZXNzaW9uSW5OZXdUYWIsXG4gIG9uYm9hcmRpbmdDcmVhdGVFbXB0eVByb2ZpbGUsXG4gIHNob3dPbmJvYXJkaW5nTW9kYWwsXG4gIG1heWJlU2hvd1dlbGNvbWVNb2RhbCxcbiAgc2hvd1dlbGNvbWVNb2RhbCxcbiAgY2xvc2VXZWxjb21lTW9kYWwsXG4gIF9jbGFpbUN1cnJlbnRTZXNzaW9uLFxuICBfcmVzb2x2ZVJlc3RvcmVkUGhhc2UsXG4gIHNob3dTZXNzaW9uc0xhbmRpbmdQYW5lbCxcbiAgZW5zdXJlU2Vzc2lvbkNvbnRleHQsXG4gIHJlc3RvcmVTZXNzaW9uLFxuICByZXN0b3JlQmFja2VuZFN0YXRlLFxuICBsb2FkU2Vzc2lvbkZpbGUsXG4gIHByb21wdFJlbmFtZUN1cnJlbnRTZXNzaW9uLFxuICBzYXZlVGFiRGF0YSxcbiAgcmVzdG9yZVRhYkRhdGEsXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvam9iLWlucHV0LmpzXG4gKiBKb2IgZGVzY3JpcHRpb24gaW5wdXQgcGFuZWw6IHBhc3RlLCBVUkwgZmV0Y2gsIGZpbGUgdXBsb2FkLCBsb2FkLWl0ZW1zIHRhYmxlLlxuICpcbiAqIERFUEVOREVOQ0lFUyAoYWxsIG9uIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIC0gbWFya2VkLCBkb21wdXJpZnkgKG5wbSBcdTIwMTQgYnVuZGxlZDsgdXNlZCBpbnRlcm5hbGx5IGZvciBzYWZlIG1hcmtkb3duIHJlbmRlcmluZylcbiAqICAgLSBlc2NhcGVIdG1sICh1dGlscy5qcylcbiAqICAgLSBhcHBlbmRNZXNzYWdlLCBhcHBlbmRSZXRyeU1lc3NhZ2UgKG1lc3NhZ2UtcXVldWUuanMpXG4gKiAgIC0gc2V0TG9hZGluZyAoZmV0Y2gtdXRpbHMuanMpXG4gKiAgIC0gc2F2ZVRhYkRhdGEgKHNlc3Npb24tbWFuYWdlci5qcylcbiAqICAgLSBzd2l0Y2hUYWIgKHJldmlldy10YWJsZS1iYXNlLmpzLCBUaWVyIDQpXG4gKiAgIC0gYW5hbHl6ZUpvYiAoam9iLWFuYWx5c2lzLmpzKVxuICogICAtIGZldGNoU3RhdHVzIChhcGktY2xpZW50LmpzKVxuICogICAtIHNob3dBbGVydE1vZGFsICh1aS1oZWxwZXJzLmpzKVxuICogICAtIHN0YXRlTWFuYWdlciAoc3RhdGUtbWFuYWdlci5qcyBcdTIwMTQgZ2V0Q3VycmVudFRhYigpL3NldFRhYkRhdGEoKSlcbiAqICAgLSBQSEFTRVMgKHdpbmRvdyBnbG9iYWwpXG4gKlxuICogR0FQLTIzIGludGFrZSBjb25maXJtYXRpb246XG4gKiAgIEFsbCBqb2ItdGV4dCBzdWJtaXNzaW9ucyAocGFzdGUsIFVSTCwgZmlsZSkgcm91dGUgZGlyZWN0bHkgdG8gYW5hbHl6ZUpvYigpXG4gKiAgIHNvIGV2ZXJ5IHNvdXJjZSBmb2xsb3dzIHRoZSBzYW1lIHBvc3QtYW5hbHlzaXMgaW50YWtlIHBhdGguXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdqb2ItaW5wdXQnKTtcblxuaW1wb3J0IHsgUEhBU0VTLCBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgbWFya2VkIH0gZnJvbSAnbWFya2VkJztcbmltcG9ydCBET01QdXJpZnkgZnJvbSAnZG9tcHVyaWZ5JztcblxuLy8gUmVuZGVyIGpvYiBkZXNjcmlwdGlvbiB0ZXh0IHNhZmVseTogbWFya2VkIHBhcnNlcyBHRk0gKGluY2x1ZGluZyBlbWJlZGRlZCBIVE1MXG4vLyBhbmQgYXV0b2xpbmtzKSwgRE9NUHVyaWZ5IHNhbml0aXplcyB0aGUgb3V0cHV0IGJlZm9yZSB3cml0aW5nIHRvIGlubmVySFRNTC5cbi8vIEZPUkJJRF9BVFRSOiBbJ3N0eWxlJ10gc3RyaXBzIGlubGluZSBDU1MgZnJvbSBIVE1MIGVtYmVkZGVkIGluIHRoZSBqb2IgdGV4dFxuLy8gKGUuZy4gV29yZC1zdHlsZSBmb250LXNpemUvZm9udC1mYW1pbHkgZnJvbSBKU09OLUxEIGRlc2NyaXB0aW9uIGZpZWxkcyksXG4vLyBzbyB0aGUgcGFnZSdzIG93biBzdHlsZXNoZWV0IGNvbnRyb2xzIGZvbnQgcmVuZGVyaW5nIGNvbnNpc3RlbnRseS5cbmZ1bmN0aW9uIF9yZW5kZXJKb2JUZXh0KHRleHQpIHtcbiAgY29uc3QgcmF3ID0gbWFya2VkLnBhcnNlKHRleHQsIHsgZ2ZtOiB0cnVlLCBicmVha3M6IHRydWUgfSk7XG4gIHJldHVybiBET01QdXJpZnkuc2FuaXRpemUocmF3LCB7IEZPUkJJRF9BVFRSOiBbJ3N0eWxlJ10gfSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSm9iIHRhYiBkaXNwbGF5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVKb2JUYWIoKSB7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3N0YXR1cycpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgaWYgKGRhdGEuam9iX2Rlc2NyaXB0aW9uX3RleHQpIHtcbiAgICAgIGNvbnN0IGpvYlRleHQgPSBkYXRhLmpvYl9kZXNjcmlwdGlvbl90ZXh0O1xuICAgICAgY29uc3QgcG9zaXRpb25OYW1lID0gZGF0YS5wb3NpdGlvbl9uYW1lIHx8IG51bGw7XG4gICAgICBjb25zdCBqb2JVcmwgPSBkYXRhLmpvYl91cmwgfHwgbnVsbDtcbiAgICAgIGNvbnN0IHRpdGxlVGV4dCA9IHBvc2l0aW9uTmFtZVxuICAgICAgICA/IGVzY2FwZUh0bWwocG9zaXRpb25OYW1lKVxuICAgICAgICA6ICc8ZW0gc3R5bGU9XCJjb2xvcjojOWNhM2FmO1wiPlBvc2l0aW9uIHRpdGxlIG5vdCB5ZXQgZXh0cmFjdGVkXHUyMDI2PC9lbT4nO1xuICAgICAgY29uc3QgdGl0bGVDb250ZW50ID0gKHBvc2l0aW9uTmFtZSAmJiBqb2JVcmwpXG4gICAgICAgID8gYDxhIGhyZWY9XCIke2VzY2FwZUh0bWwoam9iVXJsKX1cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgc3R5bGU9XCJjb2xvcjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjpub25lO1wiPiR7dGl0bGVUZXh0fTwvYT5gXG4gICAgICAgIDogdGl0bGVUZXh0O1xuICAgICAgbGV0IGh0bWwgPSAnPGgxPicgKyB0aXRsZUNvbnRlbnQgKyAnPC9oMT4nO1xuICAgICAgaWYgKGpvYlVybCkge1xuICAgICAgICBodG1sICs9IGA8ZGl2IHN0eWxlPVwibWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO2NvbG9yOiM2NDc0OGI7Zm9udC1zaXplOjAuODVlbTttYXJnaW46LThweCAwIDhweCAwO1wiIHRpdGxlPVwiJHtlc2NhcGVIdG1sKGpvYlVybCl9XCI+PGEgaHJlZj1cIiR7ZXNjYXBlSHRtbChqb2JVcmwpfVwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiBzdHlsZT1cImNvbG9yOiMzYjgyZjY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7XCI+JHtlc2NhcGVIdG1sKGpvYlVybCl9PC9hPjwvZGl2PmA7XG4gICAgICB9XG5cbiAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9XCJsaW5lLWhlaWdodDogMS42OyBiYWNrZ3JvdW5kOiAjZjhmOWZhOyBwYWRkaW5nOiAyMHB4OyBib3JkZXItcmFkaXVzOiA4cHg7IG1hcmdpbjogMjBweCAwO1wiPicgKyBfcmVuZGVySm9iVGV4dChqb2JUZXh0KSArICc8L2Rpdj4nO1xuXG4gICAgICBjb25zdCBhbmFseXplQnRuID0gZGF0YS5waGFzZSA9PT0gUEhBU0VTLklOSVRcbiAgICAgICAgPyAnPGJ1dHRvbiBvbmNsaWNrPVwiYW5hbHl6ZUpvYigpXCIgY2xhc3M9XCJidG4tcHJpbWFyeVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OjhweDtcIj5cdUQ4M0RcdUREMEQgQW5hbHlzZSBKb2I8L2J1dHRvbj4nXG4gICAgICAgIDogJyc7XG4gICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoyMHB4O1wiPicgKyBhbmFseXplQnRuICsgJzxidXR0b24gb25jbGljaz1cInNob3dMb2FkSm9iUGFuZWwoKVwiIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiPlx1RDgzRFx1RENFNSBMb2FkIERpZmZlcmVudCBKb2I8L2J1dHRvbj48L2Rpdj4nO1xuICAgICAgY29udGVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBzaG93TG9hZEpvYlBhbmVsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcignRXJyb3IgbG9hZGluZyBqb2IgZGVzY3JpcHRpb246JywgZXJyb3IpO1xuICAgIGF3YWl0IHNob3dMb2FkSm9iUGFuZWwoKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIExvYWQtam9iIHBhbmVsIChzZXNzaW9ucyArIHNlcnZlciBmaWxlcyB0YWJsZSArIGlucHV0IG1ldGhvZHMpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd0xvYWRKb2JQYW5lbCgpIHtcbiAgaWYgKHN0YXRlTWFuYWdlci5nZXRDdXJyZW50VGFiKCkgIT09ICdqb2InKSB7XG4gICAgc3dpdGNoVGFiKCdqb2InKTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICBjb250ZW50LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj48ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+PC9kaXY+PHAgc3R5bGU9XCJtYXJnaW4tdG9wOjEycHg7Y29sb3I6IzY0NzQ4YjtcIj5Mb2FkaW5nXHUyMDI2PC9wPjwvZGl2Pic7XG5cbiAgY29udGVudC5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBzdHlsZT1cIm1heC13aWR0aDo4MjBweDttYXJnaW46MCBhdXRvO3BhZGRpbmc6MjRweDtcIj5cbiAgICAgIDxoMSBzdHlsZT1cImZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMWUyOTNiO21hcmdpbi1ib3R0b206NnB4O1wiPlx1RDgzRFx1RENFNSBBZGQgSm9iIERlc2NyaXB0aW9uPC9oMT5cblxuICAgICAgPGRpdiBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgI2UyZThmMDtib3JkZXItcmFkaXVzOjhweDtvdmVyZmxvdzp2aXNpYmxlO1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZjhmYWZjO3BhZGRpbmc6MTBweCAxNnB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlMmU4ZjA7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM0NzU1Njk7XCI+QWRkIE5ldyBKb2IgRGVzY3JpcHRpb248L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6MjBweDtcIj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1tZXRob2QtdGFic1wiIHN0eWxlPVwibWFyZ2luLXRvcDowO1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImlucHV0LXRhYiBhY3RpdmVcIiBvbmNsaWNrPVwic3dpdGNoSW5wdXRNZXRob2QoJ3Bhc3RlJylcIj5cdUQ4M0RcdURDREQgUGFzdGUgVGV4dDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImlucHV0LXRhYlwiIG9uY2xpY2s9XCJzd2l0Y2hJbnB1dE1ldGhvZCgndXJsJylcIj5cdUQ4M0RcdUREMTcgRnJvbSBVUkw8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbnB1dC10YWJcIiBvbmNsaWNrPVwic3dpdGNoSW5wdXRNZXRob2QoJ2ZpbGUnKVwiPlx1RDgzRFx1RENDMSBVcGxvYWQgRmlsZTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW1ldGhvZCBhY3RpdmVcIiBpZD1cInBhc3RlLW1ldGhvZFwiPlxuICAgICAgICAgICAgPHRleHRhcmVhIGlkPVwiam9iLXRleHQtaW5wdXRcIiBwbGFjZWhvbGRlcj1cIlBhc3RlIHRoZSBqb2IgZGVzY3JpcHRpb24gaGVyZVx1MjAyNlwiIHJvd3M9XCIxMlwiXG4gICAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cInBhc3RlLWNoYXItY291bnQgcGFzdGUtZXJyb3JcIlxuICAgICAgICAgICAgICBvbmJsdXI9XCJfdmFsaWRhdGVQYXN0ZUZpZWxkKClcIiBvbmlucHV0PVwiX3VwZGF0ZVBhc3RlQ2hhckNvdW50KClcIlxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTRweDtwYWRkaW5nOjEycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6NnB4O3Jlc2l6ZTp2ZXJ0aWNhbDttYXJnaW4tdG9wOjhweDtcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgPGRpdiBpZD1cInBhc3RlLWNoYXItY291bnRcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5NGEzYjg7bWFyZ2luLXRvcDo0cHg7bWluLWhlaWdodDoxOHB4O1wiPjwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gaWQ9XCJwYXN0ZS1lcnJvclwiIGNsYXNzPVwiZmllbGQtZXJyb3JcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj48L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoxMHB4O2Rpc3BsYXk6ZmxleDtnYXA6MTJweDtcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwic3VibWl0Sm9iVGV4dCgpXCIgY2xhc3M9XCJidG4tcHJpbWFyeVwiPlN1Ym1pdCBKb2IgRGVzY3JpcHRpb248L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwiY2xlYXJKb2JJbnB1dCgpXCIgY2xhc3M9XCJidG4tc2Vjb25kYXJ5XCI+Q2xlYXI8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW1ldGhvZFwiIGlkPVwidXJsLW1ldGhvZFwiPlxuICAgICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW46OHB4IDAgMTBweDtcIj5FbnRlciBhIFVSTCB0byBhdXRvbWF0aWNhbGx5IGV4dHJhY3QgdGhlIGpvYiBkZXNjcmlwdGlvbjo8L3A+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInVybFwiIGlkPVwiam9iLXVybC1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiaHR0cHM6Ly9jb21wYW55LmNvbS9qb2ItcG9zdGluZ1wiXG4gICAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cInVybC1lcnJvclwiXG4gICAgICAgICAgICAgIG9uYmx1cj1cIl92YWxpZGF0ZVVSTEZpZWxkKClcIlxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7cGFkZGluZzoxMnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtcIiAvPlxuICAgICAgICAgICAgPHNwYW4gaWQ9XCJ1cmwtZXJyb3JcIiBjbGFzcz1cImZpZWxkLWVycm9yXCIgYXJpYS1saXZlPVwicG9saXRlXCI+PC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MTBweDtkaXNwbGF5OmZsZXg7Z2FwOjEycHg7XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz1cImZldGNoSm9iRnJvbVVSTCgpXCIgY2xhc3M9XCJidG4tcHJpbWFyeVwiPkZldGNoIEpvYiBEZXNjcmlwdGlvbjwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJjbGVhclVSTElucHV0KClcIiBjbGFzcz1cImJ0bi1zZWNvbmRhcnlcIj5DbGVhcjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoxNHB4O2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTBweDtmb250LXNpemU6MTNweDtcIj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2YwZjlmZjtib3JkZXI6MXB4IHNvbGlkICMwZWE1ZTk7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMHB4O1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7Y29sb3I6IzAzNjlhMTttYXJnaW4tYm90dG9tOjRweDtcIj5cdTI3MDUgV29ya3Mgd2VsbCB3aXRoOjwvZGl2PlxuICAgICAgICAgICAgICAgIDx1bCBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmctbGVmdDoxNnB4O2NvbG9yOiMwMzY5YTE7bGluZS1oZWlnaHQ6MS43O1wiPjxsaT5Db21wYW55IGNhcmVlciBwYWdlczwvbGk+PGxpPkFuZ2VsTGlzdCwgUmVtb3RlT0s8L2xpPjxsaT5Hb3Zlcm5tZW50ICZhbXA7IHVuaXZlcnNpdHkgc2l0ZXM8L2xpPjwvdWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmVmM2M3O2JvcmRlcjoxcHggc29saWQgI2Y1OWUwYjtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHg7XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojOTI0MDBlO21hcmdpbi1ib3R0b206NHB4O1wiPlx1MjZBMFx1RkUwRiBDb3B5IG1hbnVhbGx5IGZyb206PC9kaXY+XG4gICAgICAgICAgICAgICAgPHVsIHN0eWxlPVwibWFyZ2luOjA7cGFkZGluZy1sZWZ0OjE2cHg7Y29sb3I6IzkyNDAwZTtsaW5lLWhlaWdodDoxLjc7XCI+PGxpPjxzdHJvbmc+TGlua2VkSW48L3N0cm9uZz4gKGxvZ2luIHJlcXVpcmVkKTwvbGk+PGxpPjxzdHJvbmc+SW5kZWVkPC9zdHJvbmc+IChhbnRpLWJvdCk8L2xpPjxsaT48c3Ryb25nPkdsYXNzZG9vcjwvc3Ryb25nPiAoYXV0aCByZXF1aXJlZCk8L2xpPjwvdWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbWV0aG9kXCIgaWQ9XCJmaWxlLW1ldGhvZFwiPlxuICAgICAgICAgICAgPGRpdiBpZD1cImZpbGUtZHJvcC16b25lXCJcbiAgICAgICAgICAgICAgICAgb25kcmFnb3Zlcj1cImV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMuY2xhc3NMaXN0LmFkZCgnZHJhZy1vdmVyJylcIlxuICAgICAgICAgICAgICAgICBvbmRyYWdsZWF2ZT1cInRoaXMuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZy1vdmVyJylcIlxuICAgICAgICAgICAgICAgICBvbmRyb3A9XCJoYW5kbGVGaWxlRHJvcChldmVudClcIlxuICAgICAgICAgICAgICAgICBvbmNsaWNrPVwiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pvYi1maWxlLWlucHV0JykuY2xpY2soKVwiXG4gICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyOjJweCBkYXNoZWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjMycHggMTZweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQgMC4ycyxib3JkZXItY29sb3IgMC4yczttYXJnaW46OHB4IDA7XCI+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MnJlbTttYXJnaW4tYm90dG9tOjhweDtcIj5cdUQ4M0RcdURDQzQ8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5Ecm9wIGEgZmlsZSBoZXJlLCBvciBjbGljayB0byBicm93c2U8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1cmVtO2NvbG9yOiM2NDc0OGI7XCI+LnR4dCAmbmJzcDtcdTAwQjcmbmJzcDsgLm1kICZuYnNwO1x1MDBCNyZuYnNwOyAuaHRtbCAmbmJzcDtcdTAwQjcmbmJzcDsgLnBkZiAmbmJzcDtcdTAwQjcmbmJzcDsgLmRvY3ggJm5ic3A7XHUwMEI3Jm5ic3A7IC5ydGY8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJqb2ItZmlsZS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpub25lXCJcbiAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5tZCwucnN0LC50ZXh0LC5odG1sLC5odG0sLnBkZiwuZG9jeCwuZG9jLC5ydGZcIlxuICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJmaWxlLXVwbG9hZC1lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9XCJoYW5kbGVGaWxlU2VsZWN0ZWQodGhpcy5maWxlc1swXSlcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJmaWxlLXNlbGVjdGVkLWluZm9cIiBzdHlsZT1cImRpc3BsYXk6bm9uZTttYXJnaW46OHB4IDA7XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGlkPVwiZmlsZS1zZWxlY3RlZC1uYW1lXCIgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7XCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBpZD1cImZpbGUtc2VsZWN0ZWQtc2l6ZVwiIHN0eWxlPVwiY29sb3I6IzY0NzQ4YjttYXJnaW4tbGVmdDo4cHg7XCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJjbGVhclNlbGVjdGVkRmlsZSgpXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDo4cHg7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2NDc0OGI7XCI+XHUyNzE1PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJmaWxlLXVwbG9hZC1lcnJvclwiIHN0eWxlPVwiZGlzcGxheTpub25lO2NvbG9yOiNjMDM5MmI7bWFyZ2luOjhweCAwO2ZvbnQtc2l6ZTowLjg1cmVtO1wiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBpZD1cImZpbGUtc2l6ZS13YXJuaW5nXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7Y29sb3I6IzkyNDAwZTtiYWNrZ3JvdW5kOiNmZWYzYzc7Ym9yZGVyOjFweCBzb2xpZCAjZmNkMzRkO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6NHB4IDhweDttYXJnaW46NHB4IDA7Zm9udC1zaXplOjAuODVyZW07XCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDo4cHg7bWFyZ2luLXRvcDo0cHg7YWxpZ24taXRlbXM6Y2VudGVyO1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiZmlsZS11cGxvYWQtYnRuXCIgb25jbGljaz1cInVwbG9hZEpvYkZpbGUoKVwiIGNsYXNzPVwiYnRuLXByaW1hcnlcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cdUQ4M0RcdURDRTQgVXNlIFRoaXMgRmlsZTwvYnV0dG9uPlxuICAgICAgICAgICAgICA8ZGl2IGlkPVwiZmlsZS11cGxvYWQtc3Bpbm5lclwiIHN0eWxlPVwiZGlzcGxheTpub25lO2ZvbnQtc2l6ZTowLjg1cmVtO2NvbG9yOiM2NDc0OGI7XCI+XHUyM0YzIFBhcnNpbmdcdTIwMjY8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIC8vIFNob3cgbWluaW11bS1sZW5ndGggaGludCBpbW1lZGlhdGVseSBvbiBmaXJzdCByZW5kZXIgKEdBUC0yODgpLlxuICBfdXBkYXRlUGFzdGVDaGFyQ291bnQoKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBJbnB1dCBtZXRob2Qgc3dpdGNoaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gc3dpdGNoSW5wdXRNZXRob2QobWV0aG9kKSB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pbnB1dC10YWInKS5mb3JFYWNoKHRhYiA9PiB0YWIuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpO1xuICBldmVudC50YXJnZXQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmlucHV0LW1ldGhvZCcpLmZvckVhY2gocGFuZWwgPT4gcGFuZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtZXRob2QgKyAnLW1ldGhvZCcpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZpbGUgdXBsb2FkXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubGV0IF9wZW5kaW5nVXBsb2FkRmlsZSA9IG51bGw7XG5cbmZ1bmN0aW9uIGhhbmRsZUZpbGVEcm9wKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLWRyb3Atem9uZScpLmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWctb3ZlcicpO1xuICBjb25zdCBmaWxlID0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdO1xuICBpZiAoZmlsZSkgaGFuZGxlRmlsZVNlbGVjdGVkKGZpbGUpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWxlU2VsZWN0ZWQoZmlsZSkge1xuICBpZiAoIWZpbGUpIHJldHVybjtcblxuICBjb25zdCBzaXplTWIgID0gKGZpbGUuc2l6ZSAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMSk7XG4gIGNvbnN0IHNpemVTdHIgPSBmaWxlLnNpemUgPiAxMDI0ICogMTAyNCA/IGAke3NpemVNYn0gTUJgIDogYCR7KGZpbGUuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYDtcbiAgY29uc3QgZXJyRWwgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLXVwbG9hZC1lcnJvcicpO1xuICBjb25zdCB3YXJuRWwgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtc2l6ZS13YXJuaW5nJyk7XG5cbiAgY29uc3QgYWxsb3dlZE1pbWVzID0gWydhcHBsaWNhdGlvbi9wZGYnLCAnYXBwbGljYXRpb24vbXN3b3JkJyxcbiAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxuICAgICd0ZXh0L3BsYWluJywgJ3RleHQvaHRtbCddO1xuICBjb25zdCBhbGxvd2VkRXh0cyAgPSBbJy5wZGYnLCAnLmRvYycsICcuZG9jeCcsICcudHh0JywgJy5odG1sJywgJy5odG0nXTtcbiAgY29uc3QgZXh0ID0gJy4nICsgKGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBtaW1lT2sgPSBhbGxvd2VkTWltZXMuc29tZShtID0+IGZpbGUudHlwZS5zdGFydHNXaXRoKG0pKSB8fCBmaWxlLnR5cGUgPT09ICcnO1xuICBjb25zdCBleHRPayAgPSBhbGxvd2VkRXh0cy5pbmNsdWRlcyhleHQpO1xuICBpZiAoIW1pbWVPayAmJiAhZXh0T2spIHtcbiAgICBlcnJFbC50ZXh0Q29udGVudCAgID0gYFVuc3VwcG9ydGVkIGZpbGUgdHlwZSBcIiR7ZXh0IHx8IGZpbGUudHlwZX1cIi4gU3VwcG9ydGVkIGZvcm1hdHM6IFBERiwgV29yZCAoLmRvYy8uZG9jeCksIHBsYWluIHRleHQsIEhUTUwuYDtcbiAgICBlcnJFbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICBpZiAod2FybkVsKSB3YXJuRWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZS11cGxvYWQtYnRuJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZmlsZS5zaXplID4gMjAgKiAxMDI0ICogMTAyNCkge1xuICAgIGVyckVsLnRleHRDb250ZW50ICAgPSBgRmlsZSBpcyB0b28gbGFyZ2UgKCR7c2l6ZU1ifSBNQikuIE1heGltdW0gYWxsb3dlZCBzaXplIGlzIDIwIE1CLmA7XG4gICAgZXJyRWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgaWYgKHdhcm5FbCkgd2FybkVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtdXBsb2FkLWJ0bicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgX3BlbmRpbmdVcGxvYWRGaWxlID0gZmlsZTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtc2VsZWN0ZWQtbmFtZScpLnRleHRDb250ZW50ICA9IGZpbGUubmFtZTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtc2VsZWN0ZWQtc2l6ZScpLnRleHRDb250ZW50ICA9IGAoJHtzaXplU3RyfSlgO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZS1zZWxlY3RlZC1pbmZvJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLXVwbG9hZC1idG4nKS5zdHlsZS5kaXNwbGF5ICAgID0gJ2lubGluZS1ibG9jayc7XG4gIGVyckVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgaWYgKHdhcm5FbCkge1xuICAgIGlmIChmaWxlLnNpemUgPiA1ICogMTAyNCAqIDEwMjQpIHtcbiAgICAgIHdhcm5FbC50ZXh0Q29udGVudCAgID0gYFx1MjZBMCBMYXJnZSBmaWxlICgke3NpemVNYn0gTUIpIFx1MjAxNCBwYXJzaW5nIG1heSB0YWtlIGEgbW9tZW50LmA7XG4gICAgICB3YXJuRWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhcm5FbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhclNlbGVjdGVkRmlsZSgpIHtcbiAgX3BlbmRpbmdVcGxvYWRGaWxlID0gbnVsbDtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pvYi1maWxlLWlucHV0JykudmFsdWUgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtc2VsZWN0ZWQtaW5mbycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLXVwbG9hZC1idG4nKS5zdHlsZS5kaXNwbGF5ICAgPSAnbm9uZSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLXVwbG9hZC1lcnJvcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGNvbnN0IHdhcm4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZS1zaXplLXdhcm5pbmcnKTtcbiAgaWYgKHdhcm4pIHdhcm4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkSm9iRmlsZSgpIHtcbiAgaWYgKCFfcGVuZGluZ1VwbG9hZEZpbGUpIHJldHVybjtcblxuICBjb25zdCBlcnJFbCAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtdXBsb2FkLWVycm9yJyk7XG4gIGNvbnN0IHNwaW5uZXIgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZS11cGxvYWQtc3Bpbm5lcicpO1xuICBjb25zdCB1cGxvYWRCdG4gID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtdXBsb2FkLWJ0bicpO1xuXG4gIGVyckVsLnN0eWxlLmRpc3BsYXkgICAgPSAnbm9uZSc7XG4gIHNwaW5uZXIuc3R5bGUuZGlzcGxheSAgPSAnaW5saW5lJztcbiAgdXBsb2FkQnRuLmRpc2FibGVkICAgICA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIF9wZW5kaW5nVXBsb2FkRmlsZSk7XG5cbiAgICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2goJy9hcGkvdXBsb2FkLWZpbGUnLCB7IG1ldGhvZDogJ1BPU1QnLCBib2R5OiBmb3JtRGF0YSB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcC5qc29uKCk7XG5cbiAgICBpZiAoIXJlc3Aub2sgfHwgZGF0YS5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEubWVzc2FnZSB8fCBkYXRhLmVycm9yIHx8IGBTZXJ2ZXIgZXJyb3IgJHtyZXNwLnN0YXR1c31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBqb2JSZXNwID0gYXdhaXQgZmV0Y2goJy9hcGkvam9iJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgam9iX3RleHQ6IGRhdGEudGV4dCB9KVxuICAgIH0pO1xuICAgIGNvbnN0IGpvYkRhdGEgPSBhd2FpdCBqb2JSZXNwLmpzb24oKTtcbiAgICBpZiAoIWpvYlJlc3Aub2spIHRocm93IG5ldyBFcnJvcihqb2JEYXRhLmVycm9yIHx8ICdGYWlsZWQgdG8gcHJvY2VzcyBqb2IgZGVzY3JpcHRpb24nKTtcblxuICAgIGlmIChqb2JEYXRhLmVycm9yKSB7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnRXJyb3I6ICcgKyBqb2JEYXRhLmVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGVNYW5hZ2VyLnNldFRhYkRhdGEoJ2pvYicsIGRhdGEudGV4dCk7XG4gICAgICBzYXZlVGFiRGF0YSgpO1xuICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgYFx1MjcwNSBKb2IgZGVzY3JpcHRpb24gbG9hZGVkIGZyb20gXCIke2RhdGEuZmlsZW5hbWV9XCIgKCR7ZGF0YS5jb250ZW50X2xlbmd0aC50b0xvY2FsZVN0cmluZygpfSBjaGFycykuYCk7XG4gICAgICBhd2FpdCBhbmFseXplSm9iKCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJFbC50ZXh0Q29udGVudCAgID0gZXJyLm1lc3NhZ2U7XG4gICAgZXJyRWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gIH0gZmluYWxseSB7XG4gICAgc3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIHVwbG9hZEJ0bi5kaXNhYmxlZCAgICA9IGZhbHNlO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUGFzdGUgdGV4dCBzdWJtaXNzaW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgUEFTVEVfTUlOX0NIQVJTID0gMjAwO1xuXG5mdW5jdGlvbiBfdXBkYXRlUGFzdGVDaGFyQ291bnQoKSB7XG4gIGNvbnN0IHZhbCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnam9iLXRleHQtaW5wdXQnKT8udmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgY291bnRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXN0ZS1jaGFyLWNvdW50Jyk7XG4gIGlmICghY291bnRFbCkgcmV0dXJuO1xuICBjb25zdCBuID0gdmFsLmxlbmd0aDtcbiAgaWYgKG4gPT09IDApIHtcbiAgICBjb3VudEVsLnN0eWxlLmNvbG9yID0gJyM5NGEzYjgnO1xuICAgIGNvdW50RWwudGV4dENvbnRlbnQgPSBgUGFzdGUgdGhlIGZ1bGwgam9iIGRlc2NyaXB0aW9uIChtaW5pbXVtICR7UEFTVEVfTUlOX0NIQVJTfSBjaGFyYWN0ZXJzIGZvciBiZXN0IHJlc3VsdHMpYDtcbiAgfSBlbHNlIGlmIChuIDwgUEFTVEVfTUlOX0NIQVJTKSB7XG4gICAgY291bnRFbC5zdHlsZS5jb2xvciA9ICcjZWY0NDQ0JztcbiAgICBjb3VudEVsLnRleHRDb250ZW50ID0gYCR7bn0gLyAke1BBU1RFX01JTl9DSEFSU30gbWluaW11bSBcdTIwMTQgVG9vIHNob3J0LCBhaW0gZm9yIGF0IGxlYXN0ICR7UEFTVEVfTUlOX0NIQVJTfSBjaGFyYWN0ZXJzYDtcbiAgfSBlbHNlIHtcbiAgICBjb3VudEVsLnN0eWxlLmNvbG9yID0gJyMxNmEzNGEnO1xuICAgIGNvdW50RWwudGV4dENvbnRlbnQgPSBgJHtufSAvICR7UEFTVEVfTUlOX0NIQVJTfSBtaW5pbXVtIFx1MjcxM2A7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3ZhbGlkYXRlUGFzdGVGaWVsZCgpIHtcbiAgY29uc3QgdmFsID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqb2ItdGV4dC1pbnB1dCcpPy52YWx1ZSB8fCAnJykudHJpbSgpO1xuICBfdXBkYXRlUGFzdGVDaGFyQ291bnQoKTtcbiAgaWYgKHZhbC5sZW5ndGggPiAwICYmIHZhbC5sZW5ndGggPCBQQVNURV9NSU5fQ0hBUlMpIHtcbiAgICBfc2hvd0ZpZWxkRXJyb3IoJ2pvYi10ZXh0LWlucHV0JywgJ3Bhc3RlLWVycm9yJywgYEpvYiBkZXNjcmlwdGlvbiBpcyB0b28gc2hvcnQgXHUyMDE0IHBsZWFzZSBwYXN0ZSBhdCBsZWFzdCAke1BBU1RFX01JTl9DSEFSU30gY2hhcmFjdGVycy5gKTtcbiAgfSBlbHNlIHtcbiAgICBfY2xlYXJGaWVsZEVycm9yKCdqb2ItdGV4dC1pbnB1dCcsICdwYXN0ZS1lcnJvcicpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdEpvYlRleHQoKSB7XG4gIC8qIGR1Y2tmbG93OlxuICAgKiAgIGlkOiBqb2JfdWlfc3VibWl0X2xpdmVcbiAgICogICBraW5kOiB1aVxuICAgKiAgIHRpbWVzdGFtcDogJzIwMjYtMDMtMzFUMTI6NDk6NDdaJ1xuICAgKiAgIHN0YXR1czogbGl2ZVxuICAgKiAgIGhhbmRsZXM6XG4gICAqICAgLSB1aTpqb2ItaW5wdXQuc3VibWl0LXRleHRcbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9qb2JcbiAgICogICAtIGFuYWx5emVKb2JcbiAgICogICByZWFkczpcbiAgICogICAtIGRvbTojam9iLXRleHQtaW5wdXQudmFsdWVcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9qb2Iuam9iX3RleHRcbiAgICogICAtIHRhYjpqb2JcbiAgICogICAtIHVpOndvcmtmbG93LmpvYlxuICAgKiAgIG5vdGVzOiBTdWJtaXRzIHBhc3RlZCBqb2IgdGV4dCB0byB0aGUgYmFja2VuZCwgY2FjaGVzIHRoZSBzYW1lIHRleHQgaW4gdGFiIHN0YXRlLCB0aGVuIHJ1bnMgYW5hbHl6ZUpvYigpIHNvIGFsbCBqb2Igc291cmNlcyBzaGFyZSB0aGUgc2FtZSBhbmFseXNpcyBhbmQgaW50YWtlIGZsb3cuXG4gICAqL1xuICBjb25zdCB0ZXh0SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnam9iLXRleHQtaW5wdXQnKTtcbiAgY29uc3Qgam9iVGV4dCA9IHRleHRJbnB1dC52YWx1ZS50cmltKCk7XG5cbiAgaWYgKCFqb2JUZXh0KSB7XG4gICAgX3Nob3dGaWVsZEVycm9yKCdqb2ItdGV4dC1pbnB1dCcsICdwYXN0ZS1lcnJvcicsICdQbGVhc2UgZW50ZXIgYSBqb2IgZGVzY3JpcHRpb24gYmVmb3JlIHN1Ym1pdHRpbmcuJyk7XG4gICAgdGV4dElucHV0LmZvY3VzKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChqb2JUZXh0Lmxlbmd0aCA8IFBBU1RFX01JTl9DSEFSUykge1xuICAgIF9zaG93RmllbGRFcnJvcignam9iLXRleHQtaW5wdXQnLCAncGFzdGUtZXJyb3InLCBgSm9iIGRlc2NyaXB0aW9uIGlzIHRvbyBzaG9ydCBcdTIwMTQgcGxlYXNlIHBhc3RlIGF0IGxlYXN0ICR7UEFTVEVfTUlOX0NIQVJTfSBjaGFyYWN0ZXJzLmApO1xuICAgIHRleHRJbnB1dC5mb2N1cygpO1xuICAgIHJldHVybjtcbiAgfVxuICBfY2xlYXJGaWVsZEVycm9yKCdqb2ItdGV4dC1pbnB1dCcsICdwYXN0ZS1lcnJvcicpO1xuXG4gIHNldExvYWRpbmcodHJ1ZSwgJ0FuYWx5c2luZyBqb2IgZGVzY3JpcHRpb25cdTIwMjYnKTtcbiAgYXBwZW5kTWVzc2FnZSgndXNlcicsICdTdWJtaXR0aW5nIGpvYiBkZXNjcmlwdGlvbi4uLicpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9qb2InLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBqb2JfdGV4dDogam9iVGV4dCB9KVxuICAgIH0pO1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICBfc2hvd0ZpZWxkRXJyb3IoJ2pvYi10ZXh0LWlucHV0JywgJ3Bhc3RlLWVycm9yJywgZGF0YS5lcnJvcik7XG4gICAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoJ1x1Mjc0QyBFcnJvcjogJyArIGRhdGEuZXJyb3IsIHN1Ym1pdEpvYlRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfY2xlYXJGaWVsZEVycm9yKCdqb2ItdGV4dC1pbnB1dCcsICdwYXN0ZS1lcnJvcicpO1xuICAgICAgc3RhdGVNYW5hZ2VyLnNldFRhYkRhdGEoJ2pvYicsIGpvYlRleHQpO1xuICAgICAgc2F2ZVRhYkRhdGEoKTtcbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsICdcdTI3MDUgSm9iIGRlc2NyaXB0aW9uIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHkuJyk7XG5cbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlVGFiQmFyRm9yU3RhZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdXBkYXRlVGFiQmFyRm9yU3RhZ2UoJ2pvYicpO1xuICAgICAgfVxuICAgICAgc3dpdGNoVGFiKCdqb2InKTtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgYXdhaXQgYW5hbHl6ZUpvYigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cuZXJyb3IoJ0Vycm9yIHN1Ym1pdHRpbmcgam9iOicsIGVycm9yKTtcbiAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoJ1x1Mjc0QyBFcnJvciBzdWJtaXR0aW5nIGpvYiBkZXNjcmlwdGlvbjogJyArIGVycm9yLm1lc3NhZ2UsIHN1Ym1pdEpvYlRleHQpO1xuICB9XG5cbiAgc2V0TG9hZGluZyhmYWxzZSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVVJMIGZldGNoXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gX3ZhbGlkYXRlVVJMRmllbGQoKSB7XG4gIGNvbnN0IHZhbCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnam9iLXVybC1pbnB1dCcpPy52YWx1ZSB8fCAnJykudHJpbSgpO1xuICBpZiAoIXZhbCkgeyBfY2xlYXJGaWVsZEVycm9yKCdqb2ItdXJsLWlucHV0JywgJ3VybC1lcnJvcicpOyByZXR1cm47IH1cbiAgdHJ5IHtcbiAgICBjb25zdCB1ID0gbmV3IFVSTCh2YWwpO1xuICAgIGlmICghWydodHRwOicsICdodHRwczonXS5pbmNsdWRlcyh1LnByb3RvY29sKSkgdGhyb3cgbmV3IEVycm9yKCdQcm90b2NvbCBub3QgaHR0cC9odHRwcycpO1xuICAgIF9jbGVhckZpZWxkRXJyb3IoJ2pvYi11cmwtaW5wdXQnLCAndXJsLWVycm9yJyk7XG4gIH0gY2F0Y2gge1xuICAgIF9zaG93RmllbGRFcnJvcignam9iLXVybC1pbnB1dCcsICd1cmwtZXJyb3InLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMIHN0YXJ0aW5nIHdpdGggaHR0cHM6Ly8gb3IgaHR0cDovLycpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoSm9iRnJvbVVSTCgpIHtcbiAgY29uc3QgdXJsSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnam9iLXVybC1pbnB1dCcpO1xuICBjb25zdCB1cmwgPSB1cmxJbnB1dC52YWx1ZS50cmltKCk7XG5cbiAgaWYgKCF1cmwpIHtcbiAgICBfc2hvd0ZpZWxkRXJyb3IoJ2pvYi11cmwtaW5wdXQnLCAndXJsLWVycm9yJywgJ1BsZWFzZSBlbnRlciBhIFVSTCBiZWZvcmUgZmV0Y2hpbmcuJyk7XG4gICAgdXJsSW5wdXQuZm9jdXMoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCB1ID0gbmV3IFVSTCh1cmwpO1xuICAgIGlmICghWydodHRwOicsICdodHRwczonXS5pbmNsdWRlcyh1LnByb3RvY29sKSkgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgX2NsZWFyRmllbGRFcnJvcignam9iLXVybC1pbnB1dCcsICd1cmwtZXJyb3InKTtcbiAgfSBjYXRjaCB7XG4gICAgX3Nob3dGaWVsZEVycm9yKCdqb2ItdXJsLWlucHV0JywgJ3VybC1lcnJvcicsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBVUkwgc3RhcnRpbmcgd2l0aCBodHRwczovLyBvciBodHRwOi8vJyk7XG4gICAgdXJsSW5wdXQuZm9jdXMoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBzZXRMb2FkaW5nKHRydWUsICdGZXRjaGluZyBqb2IgZnJvbSBVUkxcdTIwMjYnKTtcbiAgYXBwZW5kTWVzc2FnZSgndXNlcicsIGBGZXRjaGluZyBqb2IgZGVzY3JpcHRpb24gZnJvbSBVUkw6ICR7dXJsfWApO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9mZXRjaC1qb2ItdXJsJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdXJsOiB1cmwgfSlcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3I7XG4gICAgICBsZXQgaGVscE1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2UgfHwgJyc7XG5cbiAgICAgIGlmIChkYXRhLnByb3RlY3RlZF9zaXRlKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2RhdGEuc2l0ZV9uYW1lfSBQcm90ZWN0aW9uIERldGVjdGVkYDtcbiAgICAgICAgaGVscE1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2U7XG5cbiAgICAgICAgaWYgKGRhdGEuaW5zdHJ1Y3Rpb25zICYmIGRhdGEuaW5zdHJ1Y3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBoZWxwTWVzc2FnZSArPSAnXFxuXFxuSG93IHRvIHByb2NlZWQ6XFxuJyArIGRhdGEuaW5zdHJ1Y3Rpb25zLm1hcCgoaW5zdCwgaSkgPT4gYCR7aSArIDF9LiAke2luc3R9YCkuam9pbignXFxuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzaG93UHJvdGVjdGVkU2l0ZU1vZGFsKGRhdGEuc2l0ZV9uYW1lLCBkYXRhLm1lc3NhZ2UsIGRhdGEuaW5zdHJ1Y3Rpb25zKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5pbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgaGVscE1lc3NhZ2UgKz0gJ1xcblxcblN1Z2dlc3RlZCBzb2x1dGlvbnM6XFxuJyArIGRhdGEuaW5zdHJ1Y3Rpb25zLm1hcCgoaW5zdCwgaSkgPT4gYCR7aSArIDF9LiAke2luc3R9YCkuam9pbignXFxuJyk7XG4gICAgICAgIHNob3dBbGVydE1vZGFsKCdVUkwgRmV0Y2ggRXJyb3InLCBgJHtlcnJvck1lc3NhZ2V9XFxuXFxuJHtoZWxwTWVzc2FnZX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9zaG93RmllbGRFcnJvcignam9iLXVybC1pbnB1dCcsICd1cmwtZXJyb3InLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICBzaG93QWxlcnRNb2RhbCgnRXJyb3InLCBgJHtlcnJvck1lc3NhZ2V9JHtoZWxwTWVzc2FnZSA/ICdcXG5cXG4nICsgaGVscE1lc3NhZ2UgOiAnJ31gKTtcbiAgICAgIH1cblxuICAgICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgYFx1Mjc0QyAke2Vycm9yTWVzc2FnZX06ICR7ZGF0YS5tZXNzYWdlIHx8ICdQbGVhc2UgdHJ5IG1hbnVhbCBpbnB1dC4nfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZU1hbmFnZXIuc2V0VGFiRGF0YSgnam9iJywgZGF0YS5qb2JfdGV4dCk7XG4gICAgICBzYXZlVGFiRGF0YSgpO1xuICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgYFx1MjcwNSAke2RhdGEubWVzc2FnZX0hIEZldGNoZWQgJHtkYXRhLmNvbnRlbnRfbGVuZ3RoIHx8ICdjb250ZW50J30gY2hhcmFjdGVycy4gUmV2aWV3IHRoZSBqb2IgZGVzY3JpcHRpb24gYmVsb3csIHRoZW4gY2xpY2sgXCJcdUQ4M0RcdUREMEQgQW5hbHlzZSBKb2JcIiB0byBjb250aW51ZS5gKTtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgc3dpdGNoVGFiKCdqb2InKTtcbiAgICAgIGF3YWl0IHBvcHVsYXRlSm9iVGFiKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcignRXJyb3IgZmV0Y2hpbmcgVVJMOicsIGVycm9yKTtcbiAgICBfc2hvd0ZpZWxkRXJyb3IoJ2pvYi11cmwtaW5wdXQnLCAndXJsLWVycm9yJywgYE5ldHdvcmsgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoYE5ldHdvcmsgZXJyb3Igb2NjdXJyZWQ6ICR7ZXJyb3IubWVzc2FnZX0uIFBsZWFzZSBjaGVjayB5b3VyIGNvbm5lY3Rpb24gb3IgdHJ5IG1hbnVhbCBpbnB1dC5gLCBmZXRjaEpvYkZyb21VUkwpO1xuICAgIHNob3dBbGVydE1vZGFsKCdOZXR3b3JrIEVycm9yJywgJ1VuYWJsZSB0byBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIuIFBsZWFzZSB0cnkgYWdhaW4gb3IgdXNlIHRoZSBcIlBhc3RlIFRleHRcIiBvcHRpb24gdG8gaW5wdXQgdGhlIGpvYiBkZXNjcmlwdGlvbiBtYW51YWxseS4nKTtcbiAgfVxuXG4gIHNldExvYWRpbmcoZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBzaG93UHJvdGVjdGVkU2l0ZU1vZGFsKHNpdGVOYW1lLCBtZXNzYWdlLCBpbnN0cnVjdGlvbnMpIHtcbiAgbGV0IGluc3RydWN0aW9uc0xpc3QgPSAnJztcbiAgaWYgKGluc3RydWN0aW9ucyAmJiBpbnN0cnVjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIGluc3RydWN0aW9uc0xpc3QgPSAnPG9sIHN0eWxlPVwibWFyZ2luOiAxNnB4IDA7IHBhZGRpbmctbGVmdDogMjBweDtcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMubWFwKGluc3QgPT4gYDxsaSBzdHlsZT1cIm1hcmdpbjogOHB4IDA7XCI+JHtpbnN0fTwvbGk+YCkuam9pbignJykgK1xuICAgICAgICAgICAgICAgICAgICAgICc8L29sPic7XG4gIH1cblxuICBjb25zdCBzYWZlTmFtZSA9IGVzY2FwZUh0bWwoc2l0ZU5hbWUpO1xuICBjb25zdCBzYWZlTWVzc2FnZSA9IGVzY2FwZUh0bWwobWVzc2FnZSk7XG4gIGNvbnN0IG1vZGFsQ29udGVudCA9IGBcbiAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tYm90dG9tOiAxNnB4O1wiPlxuICAgICAgXHVEODNEXHVERDEyIDxzdHJvbmc+JHtzYWZlTmFtZX0gcmVxdWlyZXMgbWFudWFsIGlucHV0PC9zdHJvbmc+XG4gICAgPC9kaXY+XG4gICAgPHA+JHtzYWZlTWVzc2FnZX08L3A+XG4gICAgJHtpbnN0cnVjdGlvbnNMaXN0fVxuICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAyMHB4OyBwYWRkaW5nOiAxMnB4OyBiYWNrZ3JvdW5kOiAjZjBmOWZmOyBib3JkZXI6IDFweCBzb2xpZCAjMGVhNWU5OyBib3JkZXItcmFkaXVzOiA2cHg7XCI+XG4gICAgICA8c3Ryb25nPlx1RDgzRFx1RENBMSBUaXA6PC9zdHJvbmc+IEFmdGVyIGNvcHlpbmcgdGhlIGpvYiBkZXNjcmlwdGlvbiwgY2xpY2sgdGhlIFwiUGFzdGUgVGV4dFwiIHRhYiBhYm92ZSB0byBzdWJtaXQgaXQgZGlyZWN0bHkuXG4gICAgPC9kaXY+XG4gIGA7XG5cbiAgc2hvd0FsZXJ0TW9kYWwoYCR7c2FmZU5hbWV9IElucHV0IFJlcXVpcmVkYCwgbW9kYWxDb250ZW50KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDbGVhciBoZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gY2xlYXJKb2JJbnB1dCgpIHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnam9iLXRleHQtaW5wdXQnKTtcbiAgaWYgKGVsKSBlbC52YWx1ZSA9ICcnO1xufVxuXG5mdW5jdGlvbiBjbGVhclVSTElucHV0KCkge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqb2ItdXJsLWlucHV0Jyk7XG4gIGlmIChlbCkgZWwudmFsdWUgPSAnJztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGaWVsZCBlcnJvciBoZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gX3Nob3dGaWVsZEVycm9yKGlucHV0SWQsIGVycm9ySWQsIG1zZykge1xuICBjb25zdCBpbnAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCk7XG4gIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlcnJvcklkKTtcbiAgaWYgKHNwYW4pICB7IHNwYW4udGV4dENvbnRlbnQgPSBtc2c7IHNwYW4uY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpOyB9XG4gIGlmIChpbnApICAge1xuICAgIGlucC5jbGFzc0xpc3QuYWRkKCdmaWVsZC1pbnZhbGlkJyk7XG4gICAgaW5wLnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgJ3RydWUnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY2xlYXJGaWVsZEVycm9yKGlucHV0SWQsIGVycm9ySWQpIHtcbiAgY29uc3QgaW5wICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpO1xuICBjb25zdCBzcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXJyb3JJZCk7XG4gIGlmIChzcGFuKSAgeyBzcGFuLnRleHRDb250ZW50ID0gJyc7IHNwYW4uY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpOyB9XG4gIGlmIChpbnApICAge1xuICAgIGlucC5jbGFzc0xpc3QucmVtb3ZlKCdmaWVsZC1pbnZhbGlkJyk7XG4gICAgaW5wLnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgJ2ZhbHNlJyk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEVTIG1vZHVsZSBleHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZXhwb3J0IHtcbiAgcG9wdWxhdGVKb2JUYWIsXG4gIHNob3dMb2FkSm9iUGFuZWwsXG4gIHN3aXRjaElucHV0TWV0aG9kLFxuICBfcGVuZGluZ1VwbG9hZEZpbGUsXG4gIGhhbmRsZUZpbGVEcm9wLFxuICBoYW5kbGVGaWxlU2VsZWN0ZWQsXG4gIGNsZWFyU2VsZWN0ZWRGaWxlLFxuICB1cGxvYWRKb2JGaWxlLFxuICBQQVNURV9NSU5fQ0hBUlMsXG4gIF91cGRhdGVQYXN0ZUNoYXJDb3VudCxcbiAgX3ZhbGlkYXRlUGFzdGVGaWVsZCxcbiAgc3VibWl0Sm9iVGV4dCxcbiAgX3ZhbGlkYXRlVVJMRmllbGQsXG4gIGZldGNoSm9iRnJvbVVSTCxcbiAgc2hvd1Byb3RlY3RlZFNpdGVNb2RhbCxcbiAgY2xlYXJKb2JJbnB1dCxcbiAgY2xlYXJVUkxJbnB1dCxcbiAgX3Nob3dGaWVsZEVycm9yLFxuICBfY2xlYXJGaWVsZEVycm9yLFxufTtcbiIsICJpbXBvcnQgdHlwZSB7IE1hcmtlZE9wdGlvbnMgfSBmcm9tICcuL01hcmtlZE9wdGlvbnMudHMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG9yaWdpbmFsIG1hcmtlZCBkZWZhdWx0IG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfZ2V0RGVmYXVsdHM8UGFyc2VyT3V0cHV0ID0gc3RyaW5nLCBSZW5kZXJlck91dHB1dCA9IHN0cmluZz4oKTogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PiB7XG4gIHJldHVybiB7XG4gICAgYXN5bmM6IGZhbHNlLFxuICAgIGJyZWFrczogZmFsc2UsXG4gICAgZXh0ZW5zaW9uczogbnVsbCxcbiAgICBnZm06IHRydWUsXG4gICAgaG9va3M6IG51bGwsXG4gICAgcGVkYW50aWM6IGZhbHNlLFxuICAgIHJlbmRlcmVyOiBudWxsLFxuICAgIHNpbGVudDogZmFsc2UsXG4gICAgdG9rZW5pemVyOiBudWxsLFxuICAgIHdhbGtUb2tlbnM6IG51bGwsXG4gIH07XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGxldCBfZGVmYXVsdHM6IE1hcmtlZE9wdGlvbnM8YW55LCBhbnk+ID0gX2dldERlZmF1bHRzKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VEZWZhdWx0czxQYXJzZXJPdXRwdXQgPSBzdHJpbmcsIFJlbmRlcmVyT3V0cHV0ID0gc3RyaW5nPihuZXdEZWZhdWx0czogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0Pikge1xuICBfZGVmYXVsdHMgPSBuZXdEZWZhdWx0cztcbn1cbiIsICJjb25zdCBub29wVGVzdCA9IHsgZXhlYzogKCkgPT4gbnVsbCB9IGFzIHVua25vd24gYXMgUmVnRXhwO1xuXG5mdW5jdGlvbiBlZGl0KHJlZ2V4OiBzdHJpbmcgfCBSZWdFeHAsIG9wdCA9ICcnKSB7XG4gIGxldCBzb3VyY2UgPSB0eXBlb2YgcmVnZXggPT09ICdzdHJpbmcnID8gcmVnZXggOiByZWdleC5zb3VyY2U7XG4gIGNvbnN0IG9iaiA9IHtcbiAgICByZXBsYWNlOiAobmFtZTogc3RyaW5nIHwgUmVnRXhwLCB2YWw6IHN0cmluZyB8IFJlZ0V4cCkgPT4ge1xuICAgICAgbGV0IHZhbFNvdXJjZSA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdmFsIDogdmFsLnNvdXJjZTtcbiAgICAgIHZhbFNvdXJjZSA9IHZhbFNvdXJjZS5yZXBsYWNlKG90aGVyLmNhcmV0LCAnJDEnKTtcbiAgICAgIHNvdXJjZSA9IHNvdXJjZS5yZXBsYWNlKG5hbWUsIHZhbFNvdXJjZSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgZ2V0UmVnZXg6ICgpID0+IHtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKHNvdXJjZSwgb3B0KTtcbiAgICB9LFxuICB9O1xuICByZXR1cm4gb2JqO1xufVxuXG5jb25zdCBzdXBwb3J0c0xvb2tiZWhpbmQgPSAoKCkgPT4ge1xudHJ5IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZWdleC1saXRlcmFsc1xuICByZXR1cm4gISFuZXcgUmVnRXhwKCcoPzw9MSkoPzwhMSknKTtcbn0gY2F0Y2gge1xuICAvLyBTZWUgYnJvd3NlciBzdXBwb3J0IGhlcmU6XG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1JlZ3VsYXJfZXhwcmVzc2lvbnMvTG9va2JlaGluZF9hc3NlcnRpb25cbiAgcmV0dXJuIGZhbHNlO1xufVxufSkoKTtcblxuZXhwb3J0IGNvbnN0IG90aGVyID0ge1xuICBjb2RlUmVtb3ZlSW5kZW50OiAvXig/OiB7MSw0fXwgezAsM31cXHQpL2dtLFxuICBvdXRwdXRMaW5rUmVwbGFjZTogL1xcXFwoW1xcW1xcXV0pL2csXG4gIGluZGVudENvZGVDb21wZW5zYXRpb246IC9eKFxccyspKD86YGBgKS8sXG4gIGJlZ2lubmluZ1NwYWNlOiAvXlxccysvLFxuICBlbmRpbmdIYXNoOiAvIyQvLFxuICBzdGFydGluZ1NwYWNlQ2hhcjogL14gLyxcbiAgZW5kaW5nU3BhY2VDaGFyOiAvICQvLFxuICBub25TcGFjZUNoYXI6IC9bXiBdLyxcbiAgbmV3TGluZUNoYXJHbG9iYWw6IC9cXG4vZyxcbiAgdGFiQ2hhckdsb2JhbDogL1xcdC9nLFxuICBtdWx0aXBsZVNwYWNlR2xvYmFsOiAvXFxzKy9nLFxuICBibGFua0xpbmU6IC9eWyBcXHRdKiQvLFxuICBkb3VibGVCbGFua0xpbmU6IC9cXG5bIFxcdF0qXFxuWyBcXHRdKiQvLFxuICBibG9ja3F1b3RlU3RhcnQ6IC9eIHswLDN9Pi8sXG4gIGJsb2NrcXVvdGVTZXRleHRSZXBsYWNlOiAvXFxuIHswLDN9KCg/Oj0rfC0rKSAqKSg/PVxcbnwkKS9nLFxuICBibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZTI6IC9eIHswLDN9PlsgXFx0XT8vZ20sXG4gIGxpc3RSZXBsYWNlTmVzdGluZzogL14gezEsNH0oPz0oIHs0fSkqW14gXSkvZyxcbiAgbGlzdElzVGFzazogL15cXFtbIHhYXVxcXSArXFxTLyxcbiAgbGlzdFJlcGxhY2VUYXNrOiAvXlxcW1sgeFhdXFxdICsvLFxuICBsaXN0VGFza0NoZWNrYm94OiAvXFxbWyB4WF1cXF0vLFxuICBhbnlMaW5lOiAvXFxuLipcXG4vLFxuICBocmVmQnJhY2tldHM6IC9ePCguKik+JC8sXG4gIHRhYmxlRGVsaW1pdGVyOiAvWzp8XS8sXG4gIHRhYmxlQWxpZ25DaGFyczogL15cXHx8XFx8ICokL2csXG4gIHRhYmxlUm93QmxhbmtMaW5lOiAvXFxuWyBcXHRdKiQvLFxuICB0YWJsZUFsaWduUmlnaHQ6IC9eICotKzogKiQvLFxuICB0YWJsZUFsaWduQ2VudGVyOiAvXiAqOi0rOiAqJC8sXG4gIHRhYmxlQWxpZ25MZWZ0OiAvXiAqOi0rICokLyxcbiAgc3RhcnRBVGFnOiAvXjxhIC9pLFxuICBlbmRBVGFnOiAvXjxcXC9hPi9pLFxuICBzdGFydFByZVNjcmlwdFRhZzogL148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxcc3w+KS9pLFxuICBlbmRQcmVTY3JpcHRUYWc6IC9ePFxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcXHN8PikvaSxcbiAgc3RhcnRBbmdsZUJyYWNrZXQ6IC9ePC8sXG4gIGVuZEFuZ2xlQnJhY2tldDogLz4kLyxcbiAgcGVkYW50aWNIcmVmVGl0bGU6IC9eKFteJ1wiXSpbXlxcc10pXFxzKyhbJ1wiXSkoLiopXFwyLyxcbiAgdW5pY29kZUFscGhhTnVtZXJpYzogL1tcXHB7TH1cXHB7Tn1dL3UsXG4gIGVzY2FwZVRlc3Q6IC9bJjw+XCInXS8sXG4gIGVzY2FwZVJlcGxhY2U6IC9bJjw+XCInXS9nLFxuICBlc2NhcGVUZXN0Tm9FbmNvZGU6IC9bPD5cIiddfCYoPyEoI1xcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcXHcrKTspLyxcbiAgZXNjYXBlUmVwbGFjZU5vRW5jb2RlOiAvWzw+XCInXXwmKD8hKCNcXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XFx3Kyk7KS9nLFxuICBjYXJldDogLyhefFteXFxbXSlcXF4vZyxcbiAgcGVyY2VudERlY29kZTogLyUyNS9nLFxuICBmaW5kUGlwZTogL1xcfC9nLFxuICBzcGxpdFBpcGU6IC8gXFx8LyxcbiAgc2xhc2hQaXBlOiAvXFxcXFxcfC9nLFxuICBjYXJyaWFnZVJldHVybjogL1xcclxcbnxcXHIvZyxcbiAgc3BhY2VMaW5lOiAvXiArJC9nbSxcbiAgbm90U3BhY2VTdGFydDogL15cXFMqLyxcbiAgZW5kaW5nTmV3bGluZTogL1xcbiQvLFxuICBsaXN0SXRlbVJlZ2V4OiAoYnVsbDogc3RyaW5nKSA9PiBuZXcgUmVnRXhwKGBeKCB7MCwzfSR7YnVsbH0pKCg/OltcXHQgXVteXFxcXG5dKik/KD86XFxcXG58JCkpYCksXG4gIG5leHRCdWxsZXRSZWdleDogKGluZGVudDogbnVtYmVyKSA9PiBuZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMywgaW5kZW50IC0gMSl9fSg/OlsqKy1dfFxcXFxkezEsOX1bLildKSgoPzpbIFxcdF1bXlxcXFxuXSopPyg/OlxcXFxufCQpKWApLFxuICBoclJlZ2V4OiAoaW5kZW50OiBudW1iZXIpID0+IG5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLCBpbmRlbnQgLSAxKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcXFwqICopezMsfSkoPzpcXFxcbit8JClgKSxcbiAgZmVuY2VzQmVnaW5SZWdleDogKGluZGVudDogbnVtYmVyKSA9PiBuZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMywgaW5kZW50IC0gMSl9fSg/OlxcYFxcYFxcYHx+fn4pYCksXG4gIGhlYWRpbmdCZWdpblJlZ2V4OiAoaW5kZW50OiBudW1iZXIpID0+IG5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLCBpbmRlbnQgLSAxKX19I2ApLFxuICBodG1sQmVnaW5SZWdleDogKGluZGVudDogbnVtYmVyKSA9PiBuZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMywgaW5kZW50IC0gMSl9fTwoPzpbYS16XS4qPnwhLS0pYCwgJ2knKSxcbiAgYmxvY2txdW90ZUJlZ2luUmVnZXg6IChpbmRlbnQ6IG51bWJlcikgPT4gbmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsIGluZGVudCAtIDEpfX0+YCksXG59O1xuXG4vKipcbiAqIEJsb2NrLUxldmVsIEdyYW1tYXJcbiAqL1xuXG5jb25zdCBuZXdsaW5lID0gL14oPzpbIFxcdF0qKD86XFxufCQpKSsvO1xuY29uc3QgYmxvY2tDb2RlID0gL14oKD86IHs0fXwgezAsM31cXHQpW15cXG5dKyg/Olxcbig/OlsgXFx0XSooPzpcXG58JCkpKik/KSsvO1xuY29uc3QgZmVuY2VzID0gL14gezAsM30oYHszLH0oPz1bXmBcXG5dKig/OlxcbnwkKSl8fnszLH0pKFteXFxuXSopKD86XFxufCQpKD86fChbXFxzXFxTXSo/KSg/OlxcbnwkKSkoPzogezAsM31cXDFbfmBdKiAqKD89XFxufCQpfCQpLztcbmNvbnN0IGhyID0gL14gezAsM30oKD86LVtcXHQgXSopezMsfXwoPzpfWyBcXHRdKil7Myx9fCg/OlxcKlsgXFx0XSopezMsfSkoPzpcXG4rfCQpLztcbmNvbnN0IGhlYWRpbmcgPSAvXiB7MCwzfSgjezEsNn0pKD89XFxzfCQpKC4qKSg/Olxcbit8JCkvO1xuY29uc3QgYnVsbGV0ID0gLyB7MCwzfSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkvO1xuY29uc3QgbGhlYWRpbmdDb3JlID0gL14oPyFidWxsIHxibG9ja0NvZGV8ZmVuY2VzfGJsb2NrcXVvdGV8aGVhZGluZ3xodG1sfHRhYmxlKSgoPzoufFxcbig/IVxccyo/XFxufGJ1bGwgfGJsb2NrQ29kZXxmZW5jZXN8YmxvY2txdW90ZXxoZWFkaW5nfGh0bWx8dGFibGUpKSs/KVxcbiB7MCwzfSg9K3wtKykgKig/Olxcbit8JCkvO1xuY29uc3QgbGhlYWRpbmcgPSBlZGl0KGxoZWFkaW5nQ29yZSlcbiAgLnJlcGxhY2UoL2J1bGwvZywgYnVsbGV0KSAvLyBsaXN0cyBjYW4gaW50ZXJydXB0XG4gIC5yZXBsYWNlKC9ibG9ja0NvZGUvZywgLyg/OiB7NH18IHswLDN9XFx0KS8pIC8vIGluZGVudGVkIGNvZGUgYmxvY2tzIGNhbiBpbnRlcnJ1cHRcbiAgLnJlcGxhY2UoL2ZlbmNlcy9nLCAvIHswLDN9KD86YHszLH18fnszLH0pLykgLy8gZmVuY2VkIGNvZGUgYmxvY2tzIGNhbiBpbnRlcnJ1cHRcbiAgLnJlcGxhY2UoL2Jsb2NrcXVvdGUvZywgLyB7MCwzfT4vKSAvLyBibG9ja3F1b3RlIGNhbiBpbnRlcnJ1cHRcbiAgLnJlcGxhY2UoL2hlYWRpbmcvZywgLyB7MCwzfSN7MSw2fS8pIC8vIEFUWCBoZWFkaW5nIGNhbiBpbnRlcnJ1cHRcbiAgLnJlcGxhY2UoL2h0bWwvZywgLyB7MCwzfTxbXlxcbj5dKz5cXG4vKSAvLyBibG9jayBodG1sIGNhbiBpbnRlcnJ1cHRcbiAgLnJlcGxhY2UoL1xcfHRhYmxlL2csICcnKSAvLyB0YWJsZSBub3QgaW4gY29tbW9ubWFya1xuICAuZ2V0UmVnZXgoKTtcbmNvbnN0IGxoZWFkaW5nR2ZtID0gZWRpdChsaGVhZGluZ0NvcmUpXG4gIC5yZXBsYWNlKC9idWxsL2csIGJ1bGxldCkgLy8gbGlzdHMgY2FuIGludGVycnVwdFxuICAucmVwbGFjZSgvYmxvY2tDb2RlL2csIC8oPzogezR9fCB7MCwzfVxcdCkvKSAvLyBpbmRlbnRlZCBjb2RlIGJsb2NrcyBjYW4gaW50ZXJydXB0XG4gIC5yZXBsYWNlKC9mZW5jZXMvZywgLyB7MCwzfSg/OmB7Myx9fH57Myx9KS8pIC8vIGZlbmNlZCBjb2RlIGJsb2NrcyBjYW4gaW50ZXJydXB0XG4gIC5yZXBsYWNlKC9ibG9ja3F1b3RlL2csIC8gezAsM30+LykgLy8gYmxvY2txdW90ZSBjYW4gaW50ZXJydXB0XG4gIC5yZXBsYWNlKC9oZWFkaW5nL2csIC8gezAsM30jezEsNn0vKSAvLyBBVFggaGVhZGluZyBjYW4gaW50ZXJydXB0XG4gIC5yZXBsYWNlKC9odG1sL2csIC8gezAsM308W15cXG4+XSs+XFxuLykgLy8gYmxvY2sgaHRtbCBjYW4gaW50ZXJydXB0XG4gIC5yZXBsYWNlKC90YWJsZS9nLCAvIHswLDN9XFx8Pyg/Ols6XFwtIF0qXFx8KStbXFw6XFwtIF0qXFxuLykgLy8gdGFibGUgY2FuIGludGVycnVwdFxuICAuZ2V0UmVnZXgoKTtcbmNvbnN0IF9wYXJhZ3JhcGggPSAvXihbXlxcbl0rKD86XFxuKD8haHJ8aGVhZGluZ3xsaGVhZGluZ3xibG9ja3F1b3RlfGZlbmNlc3xsaXN0fGh0bWx8dGFibGV8ICtcXG4pW15cXG5dKykqKS87XG5jb25zdCBibG9ja1RleHQgPSAvXlteXFxuXSsvO1xuY29uc3QgX2Jsb2NrTGFiZWwgPSAvKD8hXFxzKlxcXSkoPzpcXFxcW1xcc1xcU118W15cXFtcXF1cXFxcXSkrLztcbmNvbnN0IGRlZiA9IGVkaXQoL14gezAsM31cXFsobGFiZWwpXFxdOiAqKD86XFxuWyBcXHRdKik/KFtePFxcc11bXlxcc10qfDwuKj8+KSg/Oig/OiArKD86XFxuWyBcXHRdKik/fCAqXFxuWyBcXHRdKikodGl0bGUpKT8gKig/Olxcbit8JCkvKVxuICAucmVwbGFjZSgnbGFiZWwnLCBfYmxvY2tMYWJlbClcbiAgLnJlcGxhY2UoJ3RpdGxlJywgLyg/OlwiKD86XFxcXFwiP3xbXlwiXFxcXF0pKlwifCdbXidcXG5dKig/OlxcblteJ1xcbl0rKSpcXG4/J3xcXChbXigpXSpcXCkpLylcbiAgLmdldFJlZ2V4KCk7XG5cbmNvbnN0IGxpc3QgPSBlZGl0KC9eKGJ1bGwpKFsgXFx0XVteXFxuXSs/KT8oPzpcXG58JCkvKVxuICAucmVwbGFjZSgvYnVsbC9nLCBidWxsZXQpXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCBfdGFnID0gJ2FkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9uJ1xuICArICd8Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb24nXG4gICsgJ3xmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lJ1xuICArICd8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbidcbiAgKyAnfHB8cGFyYW18c2VhcmNofHNlY3Rpb258c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZSdcbiAgKyAnfHRyfHRyYWNrfHVsJztcbmNvbnN0IF9jb21tZW50ID0gLzwhLS0oPzotPz58W1xcc1xcU10qPyg/Oi0tPnwkKSkvO1xuY29uc3QgaHRtbCA9IGVkaXQoXG4gICdeIHswLDN9KD86JyAvLyBvcHRpb25hbCBpbmRlbnRhdGlvblxuKyAnPChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXFxccz5dW1xcXFxzXFxcXFNdKj8oPzo8L1xcXFwxPlteXFxcXG5dKlxcXFxuK3wkKScgLy8gKDEpXG4rICd8Y29tbWVudFteXFxcXG5dKihcXFxcbit8JCknIC8vICgyKVxuKyAnfDxcXFxcP1tcXFxcc1xcXFxTXSo/KD86XFxcXD8+XFxcXG4qfCQpJyAvLyAoMylcbisgJ3w8IVtBLVpdW1xcXFxzXFxcXFNdKj8oPzo+XFxcXG4qfCQpJyAvLyAoNClcbisgJ3w8IVxcXFxbQ0RBVEFcXFxcW1tcXFxcc1xcXFxTXSo/KD86XFxcXF1cXFxcXT5cXFxcbip8JCknIC8vICg1KVxuKyAnfDwvPyh0YWcpKD86ICt8XFxcXG58Lz8+KVtcXFxcc1xcXFxTXSo/KD86KD86XFxcXG5bIFxcdF0qKStcXFxcbnwkKScgLy8gKDYpXG4rICd8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXFxcdF0qKD86XFxcXG58JCkpW1xcXFxzXFxcXFNdKj8oPzooPzpcXFxcblsgXFx0XSopK1xcXFxufCQpJyAvLyAoNykgb3BlbiB0YWdcbisgJ3w8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFxcXHctXSpcXFxccyo+KD89WyBcXFxcdF0qKD86XFxcXG58JCkpW1xcXFxzXFxcXFNdKj8oPzooPzpcXFxcblsgXFx0XSopK1xcXFxufCQpJyAvLyAoNykgY2xvc2luZyB0YWdcbisgJyknLCAnaScpXG4gIC5yZXBsYWNlKCdjb21tZW50JywgX2NvbW1lbnQpXG4gIC5yZXBsYWNlKCd0YWcnLCBfdGFnKVxuICAucmVwbGFjZSgnYXR0cmlidXRlJywgLyArW2EtekEtWjpfXVtcXHcuOi1dKig/OiAqPSAqXCJbXlwiXFxuXSpcInwgKj0gKidbXidcXG5dKid8ICo9ICpbXlxcc1wiJz08PmBdKyk/LylcbiAgLmdldFJlZ2V4KCk7XG5cbmNvbnN0IHBhcmFncmFwaCA9IGVkaXQoX3BhcmFncmFwaClcbiAgLnJlcGxhY2UoJ2hyJywgaHIpXG4gIC5yZXBsYWNlKCdoZWFkaW5nJywgJyB7MCwzfSN7MSw2fSg/OlxcXFxzfCQpJylcbiAgLnJlcGxhY2UoJ3xsaGVhZGluZycsICcnKSAvLyBzZXRleHQgaGVhZGluZ3MgZG9uJ3QgaW50ZXJydXB0IGNvbW1vbm1hcmsgcGFyYWdyYXBoc1xuICAucmVwbGFjZSgnfHRhYmxlJywgJycpXG4gIC5yZXBsYWNlKCdibG9ja3F1b3RlJywgJyB7MCwzfT4nKVxuICAucmVwbGFjZSgnZmVuY2VzJywgJyB7MCwzfSg/OmB7Myx9KD89W15gXFxcXG5dKlxcXFxuKXx+ezMsfSlbXlxcXFxuXSpcXFxcbicpXG4gIC5yZXBsYWNlKCdsaXN0JywgJyB7MCwzfSg/OlsqKy1dfDFbLildKVsgXFxcXHRdJykgLy8gb25seSBsaXN0cyBzdGFydGluZyBmcm9tIDEgY2FuIGludGVycnVwdFxuICAucmVwbGFjZSgnaHRtbCcsICc8Lz8oPzp0YWcpKD86ICt8XFxcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pJylcbiAgLnJlcGxhY2UoJ3RhZycsIF90YWcpIC8vIHBhcnMgY2FuIGJlIGludGVycnVwdGVkIGJ5IHR5cGUgKDYpIGh0bWwgYmxvY2tzXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCBibG9ja3F1b3RlID0gZWRpdCgvXiggezAsM30+ID8ocGFyYWdyYXBofFteXFxuXSopKD86XFxufCQpKSsvKVxuICAucmVwbGFjZSgncGFyYWdyYXBoJywgcGFyYWdyYXBoKVxuICAuZ2V0UmVnZXgoKTtcblxuLyoqXG4gKiBOb3JtYWwgQmxvY2sgR3JhbW1hclxuICovXG5cbmNvbnN0IGJsb2NrTm9ybWFsID0ge1xuICBibG9ja3F1b3RlLFxuICBjb2RlOiBibG9ja0NvZGUsXG4gIGRlZixcbiAgZmVuY2VzLFxuICBoZWFkaW5nLFxuICBocixcbiAgaHRtbCxcbiAgbGhlYWRpbmcsXG4gIGxpc3QsXG4gIG5ld2xpbmUsXG4gIHBhcmFncmFwaCxcbiAgdGFibGU6IG5vb3BUZXN0LFxuICB0ZXh0OiBibG9ja1RleHQsXG59O1xuXG50eXBlIEJsb2NrS2V5cyA9IGtleW9mIHR5cGVvZiBibG9ja05vcm1hbDtcblxuLyoqXG4gKiBHRk0gQmxvY2sgR3JhbW1hclxuICovXG5cbmNvbnN0IGdmbVRhYmxlID0gZWRpdChcbiAgJ14gKihbXlxcXFxuIF0uKilcXFxcbicgLy8gSGVhZGVyXG4rICcgezAsM30oKD86XFxcXHwgKik/Oj8tKzo/ICooPzpcXFxcfCAqOj8tKzo/ICopKig/OlxcXFx8ICopPyknIC8vIEFsaWduXG4rICcoPzpcXFxcbigoPzooPyEgKlxcXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLiooPzpcXFxcbnwkKSkqKVxcXFxuKnwkKScpIC8vIENlbGxzXG4gIC5yZXBsYWNlKCdocicsIGhyKVxuICAucmVwbGFjZSgnaGVhZGluZycsICcgezAsM30jezEsNn0oPzpcXFxcc3wkKScpXG4gIC5yZXBsYWNlKCdibG9ja3F1b3RlJywgJyB7MCwzfT4nKVxuICAucmVwbGFjZSgnY29kZScsICcoPzogezR9fCB7MCwzfVxcdClbXlxcXFxuXScpXG4gIC5yZXBsYWNlKCdmZW5jZXMnLCAnIHswLDN9KD86YHszLH0oPz1bXmBcXFxcbl0qXFxcXG4pfH57Myx9KVteXFxcXG5dKlxcXFxuJylcbiAgLnJlcGxhY2UoJ2xpc3QnLCAnIHswLDN9KD86WyorLV18MVsuKV0pWyBcXFxcdF0nKSAvLyBvbmx5IGxpc3RzIHN0YXJ0aW5nIGZyb20gMSBjYW4gaW50ZXJydXB0XG4gIC5yZXBsYWNlKCdodG1sJywgJzwvPyg/OnRhZykoPzogK3xcXFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSknKVxuICAucmVwbGFjZSgndGFnJywgX3RhZykgLy8gdGFibGVzIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSB0eXBlICg2KSBodG1sIGJsb2Nrc1xuICAuZ2V0UmVnZXgoKTtcblxuY29uc3QgYmxvY2tHZm06IFJlY29yZDxCbG9ja0tleXMsIFJlZ0V4cD4gPSB7XG4gIC4uLmJsb2NrTm9ybWFsLFxuICBsaGVhZGluZzogbGhlYWRpbmdHZm0sXG4gIHRhYmxlOiBnZm1UYWJsZSxcbiAgcGFyYWdyYXBoOiBlZGl0KF9wYXJhZ3JhcGgpXG4gICAgLnJlcGxhY2UoJ2hyJywgaHIpXG4gICAgLnJlcGxhY2UoJ2hlYWRpbmcnLCAnIHswLDN9I3sxLDZ9KD86XFxcXHN8JCknKVxuICAgIC5yZXBsYWNlKCd8bGhlYWRpbmcnLCAnJykgLy8gc2V0ZXh0IGhlYWRpbmdzIGRvbid0IGludGVycnVwdCBjb21tb25tYXJrIHBhcmFncmFwaHNcbiAgICAucmVwbGFjZSgndGFibGUnLCBnZm1UYWJsZSkgLy8gaW50ZXJydXB0IHBhcmFncmFwaHMgd2l0aCB0YWJsZVxuICAgIC5yZXBsYWNlKCdibG9ja3F1b3RlJywgJyB7MCwzfT4nKVxuICAgIC5yZXBsYWNlKCdmZW5jZXMnLCAnIHswLDN9KD86YHszLH0oPz1bXmBcXFxcbl0qXFxcXG4pfH57Myx9KVteXFxcXG5dKlxcXFxuJylcbiAgICAucmVwbGFjZSgnbGlzdCcsICcgezAsM30oPzpbKistXXwxWy4pXSlbIFxcXFx0XScpIC8vIG9ubHkgbGlzdHMgc3RhcnRpbmcgZnJvbSAxIGNhbiBpbnRlcnJ1cHRcbiAgICAucmVwbGFjZSgnaHRtbCcsICc8Lz8oPzp0YWcpKD86ICt8XFxcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pJylcbiAgICAucmVwbGFjZSgndGFnJywgX3RhZykgLy8gcGFycyBjYW4gYmUgaW50ZXJydXB0ZWQgYnkgdHlwZSAoNikgaHRtbCBibG9ja3NcbiAgICAuZ2V0UmVnZXgoKSxcbn07XG5cbi8qKlxuICogUGVkYW50aWMgZ3JhbW1hciAob3JpZ2luYWwgSm9obiBHcnViZXIncyBsb29zZSBtYXJrZG93biBzcGVjaWZpY2F0aW9uKVxuICovXG5cbmNvbnN0IGJsb2NrUGVkYW50aWM6IFJlY29yZDxCbG9ja0tleXMsIFJlZ0V4cD4gPSB7XG4gIC4uLmJsb2NrTm9ybWFsLFxuICBodG1sOiBlZGl0KFxuICAgICdeICooPzpjb21tZW50ICooPzpcXFxcbnxcXFxccyokKSdcbiAgICArICd8PCh0YWcpW1xcXFxzXFxcXFNdKz88L1xcXFwxPiAqKD86XFxcXG57Mix9fFxcXFxzKiQpJyAvLyBjbG9zZWQgdGFnXG4gICAgKyAnfDx0YWcoPzpcIlteXCJdKlwifFxcJ1teXFwnXSpcXCd8XFxcXHNbXlxcJ1wiLz5cXFxcc10qKSo/Lz8+ICooPzpcXFxcbnsyLH18XFxcXHMqJCkpJylcbiAgICAucmVwbGFjZSgnY29tbWVudCcsIF9jb21tZW50KVxuICAgIC5yZXBsYWNlKC90YWcvZywgJyg/ISg/OidcbiAgICAgICsgJ2F8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWInXG4gICAgICArICd8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKSdcbiAgICAgICsgJ1xcXFxiKVxcXFx3Kyg/ITp8W15cXFxcd1xcXFxzQF0qQClcXFxcYicpXG4gICAgLmdldFJlZ2V4KCksXG4gIGRlZjogL14gKlxcWyhbXlxcXV0rKVxcXTogKjw/KFteXFxzPl0rKT4/KD86ICsoW1wiKF1bXlxcbl0rW1wiKV0pKT8gKig/Olxcbit8JCkvLFxuICBoZWFkaW5nOiAvXigjezEsNn0pKC4qKSg/Olxcbit8JCkvLFxuICBmZW5jZXM6IG5vb3BUZXN0LCAvLyBmZW5jZXMgbm90IHN1cHBvcnRlZFxuICBsaGVhZGluZzogL14oLis/KVxcbiB7MCwzfSg9K3wtKykgKig/Olxcbit8JCkvLFxuICBwYXJhZ3JhcGg6IGVkaXQoX3BhcmFncmFwaClcbiAgICAucmVwbGFjZSgnaHInLCBocilcbiAgICAucmVwbGFjZSgnaGVhZGluZycsICcgKiN7MSw2fSAqW15cXG5dJylcbiAgICAucmVwbGFjZSgnbGhlYWRpbmcnLCBsaGVhZGluZylcbiAgICAucmVwbGFjZSgnfHRhYmxlJywgJycpXG4gICAgLnJlcGxhY2UoJ2Jsb2NrcXVvdGUnLCAnIHswLDN9PicpXG4gICAgLnJlcGxhY2UoJ3xmZW5jZXMnLCAnJylcbiAgICAucmVwbGFjZSgnfGxpc3QnLCAnJylcbiAgICAucmVwbGFjZSgnfGh0bWwnLCAnJylcbiAgICAucmVwbGFjZSgnfHRhZycsICcnKVxuICAgIC5nZXRSZWdleCgpLFxufTtcblxuLyoqXG4gKiBJbmxpbmUtTGV2ZWwgR3JhbW1hclxuICovXG5cbmNvbnN0IGVzY2FwZSA9IC9eXFxcXChbIVwiIyQlJicoKSorLFxcLS4vOjs8PT4/QFxcW1xcXVxcXFxeX2B7fH1+XSkvO1xuY29uc3QgaW5saW5lQ29kZSA9IC9eKGArKShbXmBdfFteYF1bXFxzXFxTXSo/W15gXSlcXDEoPyFgKS87XG5jb25zdCBiciA9IC9eKCB7Mix9fFxcXFwpXFxuKD8hXFxzKiQpLztcbmNvbnN0IGlubGluZVRleHQgPSAvXihgK3xbXmBdKSg/Oig/PSB7Mix9XFxuKXxbXFxzXFxTXSo/KD86KD89W1xcXFw8IVxcW2AqX118XFxiX3wkKXxbXiBdKD89IHsyLH1cXG4pKSkvO1xuXG4vLyBsaXN0IG9mIHVuaWNvZGUgcHVuY3R1YXRpb24gbWFya3MsIHBsdXMgYW55IG1pc3NpbmcgY2hhcmFjdGVycyBmcm9tIENvbW1vbk1hcmsgc3BlY1xuY29uc3QgX3B1bmN0dWF0aW9uID0gL1tcXHB7UH1cXHB7U31dL3U7XG5jb25zdCBfcHVuY3R1YXRpb25PclNwYWNlID0gL1tcXHNcXHB7UH1cXHB7U31dL3U7XG5jb25zdCBfbm90UHVuY3R1YXRpb25PclNwYWNlID0gL1teXFxzXFxwe1B9XFxwe1N9XS91O1xuY29uc3QgcHVuY3R1YXRpb24gPSBlZGl0KC9eKCg/IVsqX10pcHVuY3RTcGFjZSkvLCAndScpXG4gIC5yZXBsYWNlKC9wdW5jdFNwYWNlL2csIF9wdW5jdHVhdGlvbk9yU3BhY2UpLmdldFJlZ2V4KCk7XG5cbi8vIEdGTSBhbGxvd3MgfiBpbnNpZGUgc3Ryb25nIGFuZCBlbSBmb3Igc3RyaWtldGhyb3VnaFxuY29uc3QgX3B1bmN0dWF0aW9uR2ZtU3Ryb25nRW0gPSAvKD8hfilbXFxwe1B9XFxwe1N9XS91O1xuY29uc3QgX3B1bmN0dWF0aW9uT3JTcGFjZUdmbVN0cm9uZ0VtID0gLyg/IX4pW1xcc1xccHtQfVxccHtTfV0vdTtcbmNvbnN0IF9ub3RQdW5jdHVhdGlvbk9yU3BhY2VHZm1TdHJvbmdFbSA9IC8oPzpbXlxcc1xccHtQfVxccHtTfV18fikvdTtcblxuLy8gc2VxdWVuY2VzIGVtIHNob3VsZCBza2lwIG92ZXIgW3RpdGxlXShsaW5rKSwgYGNvZGVgLCA8aHRtbD5cbmNvbnN0IGJsb2NrU2tpcCA9IGVkaXQoL2xpbmt8cHJlY29kZS1jb2RlfGh0bWwvLCAnZycpXG4gIC5yZXBsYWNlKCdsaW5rJywgL1xcWyg/OlteXFxbXFxdYF18KD88YT5gKylbXmBdK1xcazxhPig/IWApKSo/XFxdXFwoKD86XFxcXFtcXHNcXFNdfFteXFxcXFxcKFxcKV18XFwoKD86XFxcXFtcXHNcXFNdfFteXFxcXFxcKFxcKV0pKlxcKSkqXFwpLylcbiAgLnJlcGxhY2UoJ3ByZWNvZGUtJywgc3VwcG9ydHNMb29rYmVoaW5kID8gJyg/PCFgKSgpJyA6ICcoXl58W15gXSknKVxuICAucmVwbGFjZSgnY29kZScsIC8oPzxiPmArKVteYF0rXFxrPGI+KD8hYCkvKVxuICAucmVwbGFjZSgnaHRtbCcsIC88KD8hIClbXjw+XSo/Pi8pXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCBlbVN0cm9uZ0xEZWxpbUNvcmUgPSAvXig/OlxcKisoPzooKD8hXFwqKXB1bmN0KXwoW15cXHMqXSkpPyl8Xl8rKD86KCg/IV8pcHVuY3QpfChbXlxcc19dKSk/LztcblxuY29uc3QgZW1TdHJvbmdMRGVsaW0gPSBlZGl0KGVtU3Ryb25nTERlbGltQ29yZSwgJ3UnKVxuICAucmVwbGFjZSgvcHVuY3QvZywgX3B1bmN0dWF0aW9uKVxuICAuZ2V0UmVnZXgoKTtcblxuY29uc3QgZW1TdHJvbmdMRGVsaW1HZm0gPSBlZGl0KGVtU3Ryb25nTERlbGltQ29yZSwgJ3UnKVxuICAucmVwbGFjZSgvcHVuY3QvZywgX3B1bmN0dWF0aW9uR2ZtU3Ryb25nRW0pXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCBlbVN0cm9uZ1JEZWxpbUFzdENvcmUgPVxuICAnXlteXypdKj9fX1teXypdKj9cXFxcKlteXypdKj8oPz1fXyknIC8vIFNraXAgb3JwaGFuIGluc2lkZSBzdHJvbmdcbisgJ3xbXipdKyg/PVteKl0pJyAvLyBDb25zdW1lIHRvIGRlbGltXG4rICd8KD8hXFxcXCopcHVuY3QoXFxcXCorKSg/PVtcXFxcc118JCknIC8vICgxKSAjKioqIGNhbiBvbmx5IGJlIGEgUmlnaHQgRGVsaW1pdGVyXG4rICd8bm90UHVuY3RTcGFjZShcXFxcKispKD8hXFxcXCopKD89cHVuY3RTcGFjZXwkKScgLy8gKDIpIGEqKiojLCBhKioqIGNhbiBvbmx5IGJlIGEgUmlnaHQgRGVsaW1pdGVyXG4rICd8KD8hXFxcXCopcHVuY3RTcGFjZShcXFxcKispKD89bm90UHVuY3RTcGFjZSknIC8vICgzKSAjKioqYSwgKioqYSBjYW4gb25seSBiZSBMZWZ0IERlbGltaXRlclxuKyAnfFtcXFxcc10oXFxcXCorKSg/IVxcXFwqKSg/PXB1bmN0KScgLy8gKDQpICoqKiMgY2FuIG9ubHkgYmUgTGVmdCBEZWxpbWl0ZXJcbisgJ3woPyFcXFxcKilwdW5jdChcXFxcKispKD8hXFxcXCopKD89cHVuY3QpJyAvLyAoNSkgIyoqKiMgY2FuIGJlIGVpdGhlciBMZWZ0IG9yIFJpZ2h0IERlbGltaXRlclxuKyAnfG5vdFB1bmN0U3BhY2UoXFxcXCorKSg/PW5vdFB1bmN0U3BhY2UpJzsgLy8gKDYpIGEqKiphIGNhbiBiZSBlaXRoZXIgTGVmdCBvciBSaWdodCBEZWxpbWl0ZXJcblxuY29uc3QgZW1TdHJvbmdSRGVsaW1Bc3QgPSBlZGl0KGVtU3Ryb25nUkRlbGltQXN0Q29yZSwgJ2d1JylcbiAgLnJlcGxhY2UoL25vdFB1bmN0U3BhY2UvZywgX25vdFB1bmN0dWF0aW9uT3JTcGFjZSlcbiAgLnJlcGxhY2UoL3B1bmN0U3BhY2UvZywgX3B1bmN0dWF0aW9uT3JTcGFjZSlcbiAgLnJlcGxhY2UoL3B1bmN0L2csIF9wdW5jdHVhdGlvbilcbiAgLmdldFJlZ2V4KCk7XG5cbmNvbnN0IGVtU3Ryb25nUkRlbGltQXN0R2ZtID0gZWRpdChlbVN0cm9uZ1JEZWxpbUFzdENvcmUsICdndScpXG4gIC5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2csIF9ub3RQdW5jdHVhdGlvbk9yU3BhY2VHZm1TdHJvbmdFbSlcbiAgLnJlcGxhY2UoL3B1bmN0U3BhY2UvZywgX3B1bmN0dWF0aW9uT3JTcGFjZUdmbVN0cm9uZ0VtKVxuICAucmVwbGFjZSgvcHVuY3QvZywgX3B1bmN0dWF0aW9uR2ZtU3Ryb25nRW0pXG4gIC5nZXRSZWdleCgpO1xuXG4vLyAoNikgTm90IGFsbG93ZWQgZm9yIF9cbmNvbnN0IGVtU3Ryb25nUkRlbGltVW5kID0gZWRpdChcbiAgJ15bXl8qXSo/XFxcXCpcXFxcKlteXypdKj9fW15fKl0qPyg/PVxcXFwqXFxcXCopJyAvLyBTa2lwIG9ycGhhbiBpbnNpZGUgc3Ryb25nXG4rICd8W15fXSsoPz1bXl9dKScgLy8gQ29uc3VtZSB0byBkZWxpbVxuKyAnfCg/IV8pcHVuY3QoXyspKD89W1xcXFxzXXwkKScgLy8gKDEpICNfX18gY2FuIG9ubHkgYmUgYSBSaWdodCBEZWxpbWl0ZXJcbisgJ3xub3RQdW5jdFNwYWNlKF8rKSg/IV8pKD89cHVuY3RTcGFjZXwkKScgLy8gKDIpIGFfX18jLCBhX19fIGNhbiBvbmx5IGJlIGEgUmlnaHQgRGVsaW1pdGVyXG4rICd8KD8hXylwdW5jdFNwYWNlKF8rKSg/PW5vdFB1bmN0U3BhY2UpJyAvLyAoMykgI19fX2EsIF9fX2EgY2FuIG9ubHkgYmUgTGVmdCBEZWxpbWl0ZXJcbisgJ3xbXFxcXHNdKF8rKSg/IV8pKD89cHVuY3QpJyAvLyAoNCkgX19fIyBjYW4gb25seSBiZSBMZWZ0IERlbGltaXRlclxuKyAnfCg/IV8pcHVuY3QoXyspKD8hXykoPz1wdW5jdCknLCAnZ3UnKSAvLyAoNSkgI19fXyMgY2FuIGJlIGVpdGhlciBMZWZ0IG9yIFJpZ2h0IERlbGltaXRlclxuICAucmVwbGFjZSgvbm90UHVuY3RTcGFjZS9nLCBfbm90UHVuY3R1YXRpb25PclNwYWNlKVxuICAucmVwbGFjZSgvcHVuY3RTcGFjZS9nLCBfcHVuY3R1YXRpb25PclNwYWNlKVxuICAucmVwbGFjZSgvcHVuY3QvZywgX3B1bmN0dWF0aW9uKVxuICAuZ2V0UmVnZXgoKTtcblxuLy8gVGlsZGUgbGVmdCBkZWxpbWl0ZXIgZm9yIHN0cmlrZXRocm91Z2ggKHNpbWlsYXIgdG8gZW1TdHJvbmdMRGVsaW0gZm9yIGFzdGVyaXNrKVxuY29uc3QgZGVsTERlbGltID0gZWRpdCgvXn5+Pyg/OigoPyF+KXB1bmN0KXxbXlxcc35dKS8sICd1JylcbiAgLnJlcGxhY2UoL3B1bmN0L2csIF9wdW5jdHVhdGlvbilcbiAgLmdldFJlZ2V4KCk7XG5cbi8vIFRpbGRlIGRlbGltaXRlciBwYXR0ZXJucyBmb3Igc3RyaWtldGhyb3VnaCAoc2ltaWxhciB0byBhc3RlcmlzaylcbmNvbnN0IGRlbFJEZWxpbUNvcmUgPVxuICAnXltefl0rKD89W15+XSknIC8vIENvbnN1bWUgdG8gZGVsaW1cbisgJ3woPyF+KXB1bmN0KH5+PykoPz1bXFxcXHNdfCQpJyAvLyAoMSkgI35+IGNhbiBvbmx5IGJlIGEgUmlnaHQgRGVsaW1pdGVyXG4rICd8bm90UHVuY3RTcGFjZSh+fj8pKD8hfikoPz1wdW5jdFNwYWNlfCQpJyAvLyAoMikgYX5+IywgYX5+IGNhbiBvbmx5IGJlIGEgUmlnaHQgRGVsaW1pdGVyXG4rICd8KD8hfilwdW5jdFNwYWNlKH5+PykoPz1ub3RQdW5jdFNwYWNlKScgLy8gKDMpICN+fmEsIH5+YSBjYW4gb25seSBiZSBMZWZ0IERlbGltaXRlclxuKyAnfFtcXFxcc10ofn4/KSg/IX4pKD89cHVuY3QpJyAvLyAoNCkgfn4jIGNhbiBvbmx5IGJlIExlZnQgRGVsaW1pdGVyXG4rICd8KD8hfilwdW5jdCh+fj8pKD8hfikoPz1wdW5jdCknIC8vICg1KSAjfn4jIGNhbiBiZSBlaXRoZXIgTGVmdCBvciBSaWdodCBEZWxpbWl0ZXJcbisgJ3xub3RQdW5jdFNwYWNlKH5+PykoPz1ub3RQdW5jdFNwYWNlKSc7IC8vICg2KSBhfn5hIGNhbiBiZSBlaXRoZXIgTGVmdCBvciBSaWdodCBEZWxpbWl0ZXJcblxuY29uc3QgZGVsUkRlbGltID0gZWRpdChkZWxSRGVsaW1Db3JlLCAnZ3UnKVxuICAucmVwbGFjZSgvbm90UHVuY3RTcGFjZS9nLCBfbm90UHVuY3R1YXRpb25PclNwYWNlKVxuICAucmVwbGFjZSgvcHVuY3RTcGFjZS9nLCBfcHVuY3R1YXRpb25PclNwYWNlKVxuICAucmVwbGFjZSgvcHVuY3QvZywgX3B1bmN0dWF0aW9uKVxuICAuZ2V0UmVnZXgoKTtcblxuY29uc3QgYW55UHVuY3R1YXRpb24gPSBlZGl0KC9cXFxcKHB1bmN0KS8sICdndScpXG4gIC5yZXBsYWNlKC9wdW5jdC9nLCBfcHVuY3R1YXRpb24pXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCBhdXRvbGluayA9IGVkaXQoL148KHNjaGVtZTpbXlxcc1xceDAwLVxceDFmPD5dKnxlbWFpbCk+LylcbiAgLnJlcGxhY2UoJ3NjaGVtZScsIC9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LylcbiAgLnJlcGxhY2UoJ2VtYWlsJywgL1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8pXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCBfaW5saW5lQ29tbWVudCA9IGVkaXQoX2NvbW1lbnQpLnJlcGxhY2UoJyg/Oi0tPnwkKScsICctLT4nKS5nZXRSZWdleCgpO1xuY29uc3QgdGFnID0gZWRpdChcbiAgJ15jb21tZW50J1xuICAgICsgJ3xePC9bYS16QS1aXVtcXFxcdzotXSpcXFxccyo+JyAvLyBzZWxmLWNsb3NpbmcgdGFnXG4gICAgKyAnfF48W2EtekEtWl1bXFxcXHctXSooPzphdHRyaWJ1dGUpKj9cXFxccyovPz4nIC8vIG9wZW4gdGFnXG4gICAgKyAnfF48XFxcXD9bXFxcXHNcXFxcU10qP1xcXFw/PicgLy8gcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiwgZS5nLiA8P3BocCA/PlxuICAgICsgJ3xePCFbYS16QS1aXStcXFxcc1tcXFxcc1xcXFxTXSo/PicgLy8gZGVjbGFyYXRpb24sIGUuZy4gPCFET0NUWVBFIGh0bWw+XG4gICAgKyAnfF48IVxcXFxbQ0RBVEFcXFxcW1tcXFxcc1xcXFxTXSo/XFxcXF1cXFxcXT4nKSAvLyBDREFUQSBzZWN0aW9uXG4gIC5yZXBsYWNlKCdjb21tZW50JywgX2lubGluZUNvbW1lbnQpXG4gIC5yZXBsYWNlKCdhdHRyaWJ1dGUnLCAvXFxzK1thLXpBLVo6X11bXFx3LjotXSooPzpcXHMqPVxccypcIlteXCJdKlwifFxccyo9XFxzKidbXiddKid8XFxzKj1cXHMqW15cXHNcIic9PD5gXSspPy8pXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCBfaW5saW5lTGFiZWwgPSAvKD86XFxbKD86XFxcXFtcXHNcXFNdfFteXFxbXFxdXFxcXF0pKlxcXXxcXFxcW1xcc1xcU118YCsoPyFgKVteYF0qP2ArKD8hYCl8YGArKD89XFxdKXxbXlxcW1xcXVxcXFxgXSkqPy87XG5cbmNvbnN0IGxpbmsgPSBlZGl0KC9eIT9cXFsobGFiZWwpXFxdXFwoXFxzKihocmVmKSg/Oig/OlsgXFx0XSsoPzpcXG5bIFxcdF0qKT98XFxuWyBcXHRdKikodGl0bGUpKT9cXHMqXFwpLylcbiAgLnJlcGxhY2UoJ2xhYmVsJywgX2lubGluZUxhYmVsKVxuICAucmVwbGFjZSgnaHJlZicsIC88KD86XFxcXC58W15cXG48PlxcXFxdKSs+fFteIFxcdFxcblxceDAwLVxceDFmXSovKVxuICAucmVwbGFjZSgndGl0bGUnLCAvXCIoPzpcXFxcXCI/fFteXCJcXFxcXSkqXCJ8Jyg/OlxcXFwnP3xbXidcXFxcXSkqJ3xcXCgoPzpcXFxcXFwpP3xbXilcXFxcXSkqXFwpLylcbiAgLmdldFJlZ2V4KCk7XG5cbmNvbnN0IHJlZmxpbmsgPSBlZGl0KC9eIT9cXFsobGFiZWwpXFxdXFxbKHJlZilcXF0vKVxuICAucmVwbGFjZSgnbGFiZWwnLCBfaW5saW5lTGFiZWwpXG4gIC5yZXBsYWNlKCdyZWYnLCBfYmxvY2tMYWJlbClcbiAgLmdldFJlZ2V4KCk7XG5cbmNvbnN0IG5vbGluayA9IGVkaXQoL14hP1xcWyhyZWYpXFxdKD86XFxbXFxdKT8vKVxuICAucmVwbGFjZSgncmVmJywgX2Jsb2NrTGFiZWwpXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCByZWZsaW5rU2VhcmNoID0gZWRpdCgncmVmbGlua3xub2xpbmsoPyFcXFxcKCknLCAnZycpXG4gIC5yZXBsYWNlKCdyZWZsaW5rJywgcmVmbGluaylcbiAgLnJlcGxhY2UoJ25vbGluaycsIG5vbGluaylcbiAgLmdldFJlZ2V4KCk7XG5cbmNvbnN0IF9jYXNlSW5zZW5zaXRpdmVQcm90b2NvbCA9IC9baEhdW3RUXVt0VF1bcFBdW3NTXT98W2ZGXVt0VF1bcFBdLztcblxuLyoqXG4gKiBOb3JtYWwgSW5saW5lIEdyYW1tYXJcbiAqL1xuXG5jb25zdCBpbmxpbmVOb3JtYWwgPSB7XG4gIF9iYWNrcGVkYWw6IG5vb3BUZXN0LCAvLyBvbmx5IHVzZWQgZm9yIEdGTSB1cmxcbiAgYW55UHVuY3R1YXRpb24sXG4gIGF1dG9saW5rLFxuICBibG9ja1NraXAsXG4gIGJyLFxuICBjb2RlOiBpbmxpbmVDb2RlLFxuICBkZWw6IG5vb3BUZXN0LFxuICBkZWxMRGVsaW06IG5vb3BUZXN0LFxuICBkZWxSRGVsaW06IG5vb3BUZXN0LFxuICBlbVN0cm9uZ0xEZWxpbSxcbiAgZW1TdHJvbmdSRGVsaW1Bc3QsXG4gIGVtU3Ryb25nUkRlbGltVW5kLFxuICBlc2NhcGUsXG4gIGxpbmssXG4gIG5vbGluayxcbiAgcHVuY3R1YXRpb24sXG4gIHJlZmxpbmssXG4gIHJlZmxpbmtTZWFyY2gsXG4gIHRhZyxcbiAgdGV4dDogaW5saW5lVGV4dCxcbiAgdXJsOiBub29wVGVzdCxcbn07XG5cbnR5cGUgSW5saW5lS2V5cyA9IGtleW9mIHR5cGVvZiBpbmxpbmVOb3JtYWw7XG5cbi8qKlxuICogUGVkYW50aWMgSW5saW5lIEdyYW1tYXJcbiAqL1xuXG5jb25zdCBpbmxpbmVQZWRhbnRpYzogUmVjb3JkPElubGluZUtleXMsIFJlZ0V4cD4gPSB7XG4gIC4uLmlubGluZU5vcm1hbCxcbiAgbGluazogZWRpdCgvXiE/XFxbKGxhYmVsKVxcXVxcKCguKj8pXFwpLylcbiAgICAucmVwbGFjZSgnbGFiZWwnLCBfaW5saW5lTGFiZWwpXG4gICAgLmdldFJlZ2V4KCksXG4gIHJlZmxpbms6IGVkaXQoL14hP1xcWyhsYWJlbClcXF1cXHMqXFxbKFteXFxdXSopXFxdLylcbiAgICAucmVwbGFjZSgnbGFiZWwnLCBfaW5saW5lTGFiZWwpXG4gICAgLmdldFJlZ2V4KCksXG59O1xuXG4vKipcbiAqIEdGTSBJbmxpbmUgR3JhbW1hclxuICovXG5cbmNvbnN0IGlubGluZUdmbTogUmVjb3JkPElubGluZUtleXMsIFJlZ0V4cD4gPSB7XG4gIC4uLmlubGluZU5vcm1hbCxcbiAgZW1TdHJvbmdSRGVsaW1Bc3Q6IGVtU3Ryb25nUkRlbGltQXN0R2ZtLFxuICBlbVN0cm9uZ0xEZWxpbTogZW1TdHJvbmdMRGVsaW1HZm0sXG4gIGRlbExEZWxpbSxcbiAgZGVsUkRlbGltLFxuICB1cmw6IGVkaXQoL14oKD86cHJvdG9jb2wpOlxcL1xcL3x3d3dcXC4pKD86W2EtekEtWjAtOVxcLV0rXFwuPykrW15cXHM8XSp8XmVtYWlsLylcbiAgICAucmVwbGFjZSgncHJvdG9jb2wnLCBfY2FzZUluc2Vuc2l0aXZlUHJvdG9jb2wpXG4gICAgLnJlcGxhY2UoJ2VtYWlsJywgL1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlxcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLylcbiAgICAuZ2V0UmVnZXgoKSxcbiAgX2JhY2twZWRhbDogLyg/OltePyEuLDo7Kl8nXCJ+KCkmXSt8XFwoW14pXSpcXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nXCJ+KV0rKD8hJCkpKy8sXG4gIGRlbDogL14ofn4/KSg/PVteXFxzfl0pKCg/OlxcXFxbXFxzXFxTXXxbXlxcXFxdKSo/KD86XFxcXFtcXHNcXFNdfFteXFxzflxcXFxdKSlcXDEoPz1bXn5dfCQpLyxcbiAgdGV4dDogZWRpdCgvXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxcbil8KD89W2EtekEtWjAtOS4hIyQlJicqK1xcLz0/X2B7XFx8fX4tXStAKXxbXFxzXFxTXSo/KD86KD89W1xcXFw8IVxcW2Aqfl9dfFxcYl98cHJvdG9jb2w6XFwvXFwvfHd3d1xcLnwkKXxbXiBdKD89IHsyLH1cXG4pfFteYS16QS1aMC05LiEjJCUmJyorXFwvPT9fYHtcXHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1xcLz0/X2B7XFx8fX4tXStAKSkpLylcbiAgICAucmVwbGFjZSgncHJvdG9jb2wnLCBfY2FzZUluc2Vuc2l0aXZlUHJvdG9jb2wpXG4gICAgLmdldFJlZ2V4KCksXG59O1xuXG4vKipcbiAqIEdGTSArIExpbmUgQnJlYWtzIElubGluZSBHcmFtbWFyXG4gKi9cblxuY29uc3QgaW5saW5lQnJlYWtzOiBSZWNvcmQ8SW5saW5lS2V5cywgUmVnRXhwPiA9IHtcbiAgLi4uaW5saW5lR2ZtLFxuICBicjogZWRpdChicikucmVwbGFjZSgnezIsfScsICcqJykuZ2V0UmVnZXgoKSxcbiAgdGV4dDogZWRpdChpbmxpbmVHZm0udGV4dClcbiAgICAucmVwbGFjZSgnXFxcXGJfJywgJ1xcXFxiX3wgezIsfVxcXFxuJylcbiAgICAucmVwbGFjZSgvXFx7MixcXH0vZywgJyonKVxuICAgIC5nZXRSZWdleCgpLFxufTtcblxuLyoqXG4gKiBleHBvcnRzXG4gKi9cblxuZXhwb3J0IGNvbnN0IGJsb2NrID0ge1xuICBub3JtYWw6IGJsb2NrTm9ybWFsLFxuICBnZm06IGJsb2NrR2ZtLFxuICBwZWRhbnRpYzogYmxvY2tQZWRhbnRpYyxcbn07XG5cbmV4cG9ydCBjb25zdCBpbmxpbmUgPSB7XG4gIG5vcm1hbDogaW5saW5lTm9ybWFsLFxuICBnZm06IGlubGluZUdmbSxcbiAgYnJlYWtzOiBpbmxpbmVCcmVha3MsXG4gIHBlZGFudGljOiBpbmxpbmVQZWRhbnRpYyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZXMge1xuICBvdGhlcjogdHlwZW9mIG90aGVyXG4gIGJsb2NrOiBSZWNvcmQ8QmxvY2tLZXlzLCBSZWdFeHA+XG4gIGlubGluZTogUmVjb3JkPElubGluZUtleXMsIFJlZ0V4cD5cbn1cbiIsICJpbXBvcnQgeyBvdGhlciB9IGZyb20gJy4vcnVsZXMudHMnO1xuXG4vKipcbiAqIEhlbHBlcnNcbiAqL1xuY29uc3QgZXNjYXBlUmVwbGFjZW1lbnRzOiB7IFtpbmRleDogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5OycsXG59O1xuY29uc3QgZ2V0RXNjYXBlUmVwbGFjZW1lbnQgPSAoY2g6IHN0cmluZykgPT4gZXNjYXBlUmVwbGFjZW1lbnRzW2NoXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUh0bWxFbnRpdGllcyhodG1sOiBzdHJpbmcsIGVuY29kZT86IGJvb2xlYW4pIHtcbiAgaWYgKGVuY29kZSkge1xuICAgIGlmIChvdGhlci5lc2NhcGVUZXN0LnRlc3QoaHRtbCkpIHtcbiAgICAgIHJldHVybiBodG1sLnJlcGxhY2Uob3RoZXIuZXNjYXBlUmVwbGFjZSwgZ2V0RXNjYXBlUmVwbGFjZW1lbnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAob3RoZXIuZXNjYXBlVGVzdE5vRW5jb2RlLnRlc3QoaHRtbCkpIHtcbiAgICAgIHJldHVybiBodG1sLnJlcGxhY2Uob3RoZXIuZXNjYXBlUmVwbGFjZU5vRW5jb2RlLCBnZXRFc2NhcGVSZXBsYWNlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGh0bWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblVybChocmVmOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBocmVmID0gZW5jb2RlVVJJKGhyZWYpLnJlcGxhY2Uob3RoZXIucGVyY2VudERlY29kZSwgJyUnKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGhyZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdENlbGxzKHRhYmxlUm93OiBzdHJpbmcsIGNvdW50PzogbnVtYmVyKSB7XG4gIC8vIGVuc3VyZSB0aGF0IGV2ZXJ5IGNlbGwtZGVsaW1pdGluZyBwaXBlIGhhcyBhIHNwYWNlXG4gIC8vIGJlZm9yZSBpdCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIGFuIGVzY2FwZWQgcGlwZVxuICBjb25zdCByb3cgPSB0YWJsZVJvdy5yZXBsYWNlKG90aGVyLmZpbmRQaXBlLCAobWF0Y2gsIG9mZnNldCwgc3RyKSA9PiB7XG4gICAgICBsZXQgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgbGV0IGN1cnIgPSBvZmZzZXQ7XG4gICAgICB3aGlsZSAoLS1jdXJyID49IDAgJiYgc3RyW2N1cnJdID09PSAnXFxcXCcpIGVzY2FwZWQgPSAhZXNjYXBlZDtcbiAgICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICAgIC8vIG9kZCBudW1iZXIgb2Ygc2xhc2hlcyBtZWFucyB8IGlzIGVzY2FwZWRcbiAgICAgICAgLy8gc28gd2UgbGVhdmUgaXQgYWxvbmVcbiAgICAgICAgcmV0dXJuICd8JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFkZCBzcGFjZSBiZWZvcmUgdW5lc2NhcGVkIHxcbiAgICAgICAgcmV0dXJuICcgfCc7XG4gICAgICB9XG4gICAgfSksXG4gICAgY2VsbHMgPSByb3cuc3BsaXQob3RoZXIuc3BsaXRQaXBlKTtcbiAgbGV0IGkgPSAwO1xuXG4gIC8vIEZpcnN0L2xhc3QgY2VsbCBpbiBhIHJvdyBjYW5ub3QgYmUgZW1wdHkgaWYgaXQgaGFzIG5vIGxlYWRpbmcvdHJhaWxpbmcgcGlwZVxuICBpZiAoIWNlbGxzWzBdLnRyaW0oKSkge1xuICAgIGNlbGxzLnNoaWZ0KCk7XG4gIH1cbiAgaWYgKGNlbGxzLmxlbmd0aCA+IDAgJiYgIWNlbGxzLmF0KC0xKT8udHJpbSgpKSB7XG4gICAgY2VsbHMucG9wKCk7XG4gIH1cblxuICBpZiAoY291bnQpIHtcbiAgICBpZiAoY2VsbHMubGVuZ3RoID4gY291bnQpIHtcbiAgICAgIGNlbGxzLnNwbGljZShjb3VudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoaWxlIChjZWxscy5sZW5ndGggPCBjb3VudCkgY2VsbHMucHVzaCgnJyk7XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xuICAgIC8vIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyBpZ25vcmVkIHBlciB0aGUgZ2ZtIHNwZWNcbiAgICBjZWxsc1tpXSA9IGNlbGxzW2ldLnRyaW0oKS5yZXBsYWNlKG90aGVyLnNsYXNoUGlwZSwgJ3wnKTtcbiAgfVxuICByZXR1cm4gY2VsbHM7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRyYWlsaW5nICdjJ3MuIEVxdWl2YWxlbnQgdG8gc3RyLnJlcGxhY2UoL2MqJC8sICcnKS5cbiAqIC9jKiQvIGlzIHZ1bG5lcmFibGUgdG8gUkVET1MuXG4gKlxuICogQHBhcmFtIHN0clxuICogQHBhcmFtIGNcbiAqIEBwYXJhbSBpbnZlcnQgUmVtb3ZlIHN1ZmZpeCBvZiBub24tYyBjaGFycyBpbnN0ZWFkLiBEZWZhdWx0IGZhbHNleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ0cmltKHN0cjogc3RyaW5nLCBjOiBzdHJpbmcsIGludmVydD86IGJvb2xlYW4pIHtcbiAgY29uc3QgbCA9IHN0ci5sZW5ndGg7XG4gIGlmIChsID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8gTGVuZ3RoIG9mIHN1ZmZpeCBtYXRjaGluZyB0aGUgaW52ZXJ0IGNvbmRpdGlvbi5cbiAgbGV0IHN1ZmZMZW4gPSAwO1xuXG4gIC8vIFN0ZXAgbGVmdCB1bnRpbCB3ZSBmYWlsIHRvIG1hdGNoIHRoZSBpbnZlcnQgY29uZGl0aW9uLlxuICB3aGlsZSAoc3VmZkxlbiA8IGwpIHtcbiAgICBjb25zdCBjdXJyQ2hhciA9IHN0ci5jaGFyQXQobCAtIHN1ZmZMZW4gLSAxKTtcbiAgICBpZiAoY3VyckNoYXIgPT09IGMgJiYgIWludmVydCkge1xuICAgICAgc3VmZkxlbisrO1xuICAgIH0gZWxzZSBpZiAoY3VyckNoYXIgIT09IGMgJiYgaW52ZXJ0KSB7XG4gICAgICBzdWZmTGVuKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UoMCwgbCAtIHN1ZmZMZW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZENsb3NpbmdCcmFja2V0KHN0cjogc3RyaW5nLCBiOiBzdHJpbmcpIHtcbiAgaWYgKHN0ci5pbmRleE9mKGJbMV0pID09PSAtMSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIGxldCBsZXZlbCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0cltpXSA9PT0gJ1xcXFwnKSB7XG4gICAgICBpKys7XG4gICAgfSBlbHNlIGlmIChzdHJbaV0gPT09IGJbMF0pIHtcbiAgICAgIGxldmVsKys7XG4gICAgfSBlbHNlIGlmIChzdHJbaV0gPT09IGJbMV0pIHtcbiAgICAgIGxldmVsLS07XG4gICAgICBpZiAobGV2ZWwgPCAwKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAobGV2ZWwgPiAwKSB7XG4gICAgcmV0dXJuIC0yO1xuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kVGFicyhsaW5lOiBzdHJpbmcsIGluZGVudCA9IDApIHtcbiAgbGV0IGNvbCA9IGluZGVudDtcbiAgbGV0IGV4cGFuZGVkID0gJyc7XG4gIGZvciAoY29uc3QgY2hhciBvZiBsaW5lKSB7XG4gICAgaWYgKGNoYXIgPT09ICdcXHQnKSB7XG4gICAgICBjb25zdCBhZGRlZCA9IDQgLSAoY29sICUgNCk7XG4gICAgICBleHBhbmRlZCArPSAnICcucmVwZWF0KGFkZGVkKTtcbiAgICAgIGNvbCArPSBhZGRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwYW5kZWQgKz0gY2hhcjtcbiAgICAgIGNvbCsrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBhbmRlZDtcbn1cbiIsICJpbXBvcnQgeyBfZGVmYXVsdHMgfSBmcm9tICcuL2RlZmF1bHRzLnRzJztcbmltcG9ydCB7XG4gIHJ0cmltLFxuICBzcGxpdENlbGxzLFxuICBmaW5kQ2xvc2luZ0JyYWNrZXQsXG4gIGV4cGFuZFRhYnMsXG59IGZyb20gJy4vaGVscGVycy50cyc7XG5pbXBvcnQgdHlwZSB7IFJ1bGVzIH0gZnJvbSAnLi9ydWxlcy50cyc7XG5pbXBvcnQgdHlwZSB7IF9MZXhlciB9IGZyb20gJy4vTGV4ZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBMaW5rcywgVG9rZW5zLCBUb2tlbiB9IGZyb20gJy4vVG9rZW5zLnRzJztcbmltcG9ydCB0eXBlIHsgTWFya2VkT3B0aW9ucyB9IGZyb20gJy4vTWFya2VkT3B0aW9ucy50cyc7XG5cbmZ1bmN0aW9uIG91dHB1dExpbmsoY2FwOiBzdHJpbmdbXSwgbGluazogUGljazxUb2tlbnMuTGluaywgJ2hyZWYnIHwgJ3RpdGxlJz4sIHJhdzogc3RyaW5nLCBsZXhlcjogX0xleGVyLCBydWxlczogUnVsZXMpOiBUb2tlbnMuTGluayB8IFRva2Vucy5JbWFnZSB7XG4gIGNvbnN0IGhyZWYgPSBsaW5rLmhyZWY7XG4gIGNvbnN0IHRpdGxlID0gbGluay50aXRsZSB8fCBudWxsO1xuICBjb25zdCB0ZXh0ID0gY2FwWzFdLnJlcGxhY2UocnVsZXMub3RoZXIub3V0cHV0TGlua1JlcGxhY2UsICckMScpO1xuXG4gIGxleGVyLnN0YXRlLmluTGluayA9IHRydWU7XG4gIGNvbnN0IHRva2VuOiBUb2tlbnMuTGluayB8IFRva2Vucy5JbWFnZSA9IHtcbiAgICB0eXBlOiBjYXBbMF0uY2hhckF0KDApID09PSAnIScgPyAnaW1hZ2UnIDogJ2xpbmsnLFxuICAgIHJhdyxcbiAgICBocmVmLFxuICAgIHRpdGxlLFxuICAgIHRleHQsXG4gICAgdG9rZW5zOiBsZXhlci5pbmxpbmVUb2tlbnModGV4dCksXG4gIH07XG4gIGxleGVyLnN0YXRlLmluTGluayA9IGZhbHNlO1xuICByZXR1cm4gdG9rZW47XG59XG5cbmZ1bmN0aW9uIGluZGVudENvZGVDb21wZW5zYXRpb24ocmF3OiBzdHJpbmcsIHRleHQ6IHN0cmluZywgcnVsZXM6IFJ1bGVzKSB7XG4gIGNvbnN0IG1hdGNoSW5kZW50VG9Db2RlID0gcmF3Lm1hdGNoKHJ1bGVzLm90aGVyLmluZGVudENvZGVDb21wZW5zYXRpb24pO1xuXG4gIGlmIChtYXRjaEluZGVudFRvQ29kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgY29uc3QgaW5kZW50VG9Db2RlID0gbWF0Y2hJbmRlbnRUb0NvZGVbMV07XG5cbiAgcmV0dXJuIHRleHRcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcChub2RlID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoSW5kZW50SW5Ob2RlID0gbm9kZS5tYXRjaChydWxlcy5vdGhlci5iZWdpbm5pbmdTcGFjZSk7XG4gICAgICBpZiAobWF0Y2hJbmRlbnRJbk5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtpbmRlbnRJbk5vZGVdID0gbWF0Y2hJbmRlbnRJbk5vZGU7XG5cbiAgICAgIGlmIChpbmRlbnRJbk5vZGUubGVuZ3RoID49IGluZGVudFRvQ29kZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuc2xpY2UoaW5kZW50VG9Db2RlLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0pXG4gICAgLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIFRva2VuaXplclxuICovXG5leHBvcnQgY2xhc3MgX1Rva2VuaXplcjxQYXJzZXJPdXRwdXQgPSBzdHJpbmcsIFJlbmRlcmVyT3V0cHV0ID0gc3RyaW5nPiB7XG4gIG9wdGlvbnM6IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD47XG4gIHJ1bGVzITogUnVsZXM7IC8vIHNldCBieSB0aGUgbGV4ZXJcbiAgbGV4ZXIhOiBfTGV4ZXI8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD47IC8vIHNldCBieSB0aGUgbGV4ZXJcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0Pikge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgX2RlZmF1bHRzO1xuICB9XG5cbiAgc3BhY2Uoc3JjOiBzdHJpbmcpOiBUb2tlbnMuU3BhY2UgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2submV3bGluZS5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCAmJiBjYXBbMF0ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ3NwYWNlJyxcbiAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvZGUoc3JjOiBzdHJpbmcpOiBUb2tlbnMuQ29kZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5jb2RlLmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gY2FwWzBdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5jb2RlUmVtb3ZlSW5kZW50LCAnJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnY29kZScsXG4gICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICBjb2RlQmxvY2tTdHlsZTogJ2luZGVudGVkJyxcbiAgICAgICAgdGV4dDogIXRoaXMub3B0aW9ucy5wZWRhbnRpY1xuICAgICAgICAgID8gcnRyaW0odGV4dCwgJ1xcbicpXG4gICAgICAgICAgOiB0ZXh0LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBmZW5jZXMoc3JjOiBzdHJpbmcpOiBUb2tlbnMuQ29kZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5mZW5jZXMuZXhlYyhzcmMpO1xuICAgIGlmIChjYXApIHtcbiAgICAgIGNvbnN0IHJhdyA9IGNhcFswXTtcbiAgICAgIGNvbnN0IHRleHQgPSBpbmRlbnRDb2RlQ29tcGVuc2F0aW9uKHJhdywgY2FwWzNdIHx8ICcnLCB0aGlzLnJ1bGVzKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2NvZGUnLFxuICAgICAgICByYXcsXG4gICAgICAgIGxhbmc6IGNhcFsyXSA/IGNhcFsyXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwgJyQxJykgOiBjYXBbMl0sXG4gICAgICAgIHRleHQsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGhlYWRpbmcoc3JjOiBzdHJpbmcpOiBUb2tlbnMuSGVhZGluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICBsZXQgdGV4dCA9IGNhcFsyXS50cmltKCk7XG5cbiAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyAjc1xuICAgICAgaWYgKHRoaXMucnVsZXMub3RoZXIuZW5kaW5nSGFzaC50ZXN0KHRleHQpKSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBydHJpbSh0ZXh0LCAnIycpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgICAgdGV4dCA9IHRyaW1tZWQudHJpbSgpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0cmltbWVkIHx8IHRoaXMucnVsZXMub3RoZXIuZW5kaW5nU3BhY2VDaGFyLnRlc3QodHJpbW1lZCkpIHtcbiAgICAgICAgICAvLyBDb21tb25NYXJrIHJlcXVpcmVzIHNwYWNlIGJlZm9yZSB0cmFpbGluZyAjc1xuICAgICAgICAgIHRleHQgPSB0cmltbWVkLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnaGVhZGluZycsXG4gICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICBkZXB0aDogY2FwWzFdLmxlbmd0aCxcbiAgICAgICAgdGV4dCxcbiAgICAgICAgdG9rZW5zOiB0aGlzLmxleGVyLmlubGluZSh0ZXh0KSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaHIoc3JjOiBzdHJpbmcpOiBUb2tlbnMuSHIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyhzcmMpO1xuICAgIGlmIChjYXApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdocicsXG4gICAgICAgIHJhdzogcnRyaW0oY2FwWzBdLCAnXFxuJyksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrcXVvdGUoc3JjOiBzdHJpbmcpOiBUb2tlbnMuQmxvY2txdW90ZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5ibG9ja3F1b3RlLmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICBsZXQgbGluZXMgPSBydHJpbShjYXBbMF0sICdcXG4nKS5zcGxpdCgnXFxuJyk7XG4gICAgICBsZXQgcmF3ID0gJyc7XG4gICAgICBsZXQgdGV4dCA9ICcnO1xuICAgICAgY29uc3QgdG9rZW5zOiBUb2tlbltdID0gW107XG5cbiAgICAgIHdoaWxlIChsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxldCBpbkJsb2NrcXVvdGUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgY3VycmVudExpbmVzID0gW107XG5cbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIC8vIGdldCBsaW5lcyB1cCB0byBhIGNvbnRpbnVhdGlvblxuICAgICAgICAgIGlmICh0aGlzLnJ1bGVzLm90aGVyLmJsb2NrcXVvdGVTdGFydC50ZXN0KGxpbmVzW2ldKSkge1xuICAgICAgICAgICAgY3VycmVudExpbmVzLnB1c2gobGluZXNbaV0pO1xuICAgICAgICAgICAgaW5CbG9ja3F1b3RlID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFpbkJsb2NrcXVvdGUpIHtcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lcy5wdXNoKGxpbmVzW2ldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbGluZXMuc2xpY2UoaSk7XG5cbiAgICAgICAgY29uc3QgY3VycmVudFJhdyA9IGN1cnJlbnRMaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgICAgY29uc3QgY3VycmVudFRleHQgPSBjdXJyZW50UmF3XG4gICAgICAgICAgLy8gcHJlY2VkZSBzZXRleHQgY29udGludWF0aW9uIHdpdGggNCBzcGFjZXMgc28gaXQgaXNuJ3QgYSBzZXRleHRcbiAgICAgICAgICAucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmJsb2NrcXVvdGVTZXRleHRSZXBsYWNlLCAnXFxuICAgICQxJylcbiAgICAgICAgICAucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmJsb2NrcXVvdGVTZXRleHRSZXBsYWNlMiwgJycpO1xuICAgICAgICByYXcgPSByYXcgPyBgJHtyYXd9XFxuJHtjdXJyZW50UmF3fWAgOiBjdXJyZW50UmF3O1xuICAgICAgICB0ZXh0ID0gdGV4dCA/IGAke3RleHR9XFxuJHtjdXJyZW50VGV4dH1gIDogY3VycmVudFRleHQ7XG5cbiAgICAgICAgLy8gcGFyc2UgYmxvY2txdW90ZSBsaW5lcyBhcyB0b3AgbGV2ZWwgdG9rZW5zXG4gICAgICAgIC8vIG1lcmdlIHBhcmFncmFwaHMgaWYgdGhpcyBpcyBhIGNvbnRpbnVhdGlvblxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmxleGVyLnN0YXRlLnRvcDtcbiAgICAgICAgdGhpcy5sZXhlci5zdGF0ZS50b3AgPSB0cnVlO1xuICAgICAgICB0aGlzLmxleGVyLmJsb2NrVG9rZW5zKGN1cnJlbnRUZXh0LCB0b2tlbnMsIHRydWUpO1xuICAgICAgICB0aGlzLmxleGVyLnN0YXRlLnRvcCA9IHRvcDtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBjb250aW51YXRpb24gdGhlbiB3ZSBhcmUgZG9uZVxuICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0VG9rZW4gPSB0b2tlbnMuYXQoLTEpO1xuXG4gICAgICAgIGlmIChsYXN0VG9rZW4/LnR5cGUgPT09ICdjb2RlJykge1xuICAgICAgICAgIC8vIGJsb2NrcXVvdGUgY29udGludWF0aW9uIGNhbm5vdCBiZSBwcmVjZWRlZCBieSBhIGNvZGUgYmxvY2tcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChsYXN0VG9rZW4/LnR5cGUgPT09ICdibG9ja3F1b3RlJykge1xuICAgICAgICAgIC8vIGluY2x1ZGUgY29udGludWF0aW9uIGluIG5lc3RlZCBibG9ja3F1b3RlXG4gICAgICAgICAgY29uc3Qgb2xkVG9rZW4gPSBsYXN0VG9rZW4gYXMgVG9rZW5zLkJsb2NrcXVvdGU7XG4gICAgICAgICAgY29uc3QgbmV3VGV4dCA9IG9sZFRva2VuLnJhdyArICdcXG4nICsgbGluZXMuam9pbignXFxuJyk7XG4gICAgICAgICAgY29uc3QgbmV3VG9rZW4gPSB0aGlzLmJsb2NrcXVvdGUobmV3VGV4dCkhO1xuICAgICAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0gPSBuZXdUb2tlbjtcblxuICAgICAgICAgIHJhdyA9IHJhdy5zdWJzdHJpbmcoMCwgcmF3Lmxlbmd0aCAtIG9sZFRva2VuLnJhdy5sZW5ndGgpICsgbmV3VG9rZW4ucmF3O1xuICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0Lmxlbmd0aCAtIG9sZFRva2VuLnRleHQubGVuZ3RoKSArIG5ld1Rva2VuLnRleHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAobGFzdFRva2VuPy50eXBlID09PSAnbGlzdCcpIHtcbiAgICAgICAgICAvLyBpbmNsdWRlIGNvbnRpbnVhdGlvbiBpbiBuZXN0ZWQgbGlzdFxuICAgICAgICAgIGNvbnN0IG9sZFRva2VuID0gbGFzdFRva2VuIGFzIFRva2Vucy5MaXN0O1xuICAgICAgICAgIGNvbnN0IG5ld1RleHQgPSBvbGRUb2tlbi5yYXcgKyAnXFxuJyArIGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgIGNvbnN0IG5ld1Rva2VuID0gdGhpcy5saXN0KG5ld1RleHQpITtcbiAgICAgICAgICB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdID0gbmV3VG9rZW47XG5cbiAgICAgICAgICByYXcgPSByYXcuc3Vic3RyaW5nKDAsIHJhdy5sZW5ndGggLSBsYXN0VG9rZW4ucmF3Lmxlbmd0aCkgKyBuZXdUb2tlbi5yYXc7XG4gICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHRleHQubGVuZ3RoIC0gb2xkVG9rZW4ucmF3Lmxlbmd0aCkgKyBuZXdUb2tlbi5yYXc7XG4gICAgICAgICAgbGluZXMgPSBuZXdUZXh0LnN1YnN0cmluZyh0b2tlbnMuYXQoLTEpIS5yYXcubGVuZ3RoKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2Jsb2NrcXVvdGUnLFxuICAgICAgICByYXcsXG4gICAgICAgIHRva2VucyxcbiAgICAgICAgdGV4dCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgbGlzdChzcmM6IHN0cmluZyk6IFRva2Vucy5MaXN0IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5saXN0LmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICBsZXQgYnVsbCA9IGNhcFsxXS50cmltKCk7XG4gICAgICBjb25zdCBpc29yZGVyZWQgPSBidWxsLmxlbmd0aCA+IDE7XG5cbiAgICAgIGNvbnN0IGxpc3Q6IFRva2Vucy5MaXN0ID0ge1xuICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgIHJhdzogJycsXG4gICAgICAgIG9yZGVyZWQ6IGlzb3JkZXJlZCxcbiAgICAgICAgc3RhcnQ6IGlzb3JkZXJlZCA/ICtidWxsLnNsaWNlKDAsIC0xKSA6ICcnLFxuICAgICAgICBsb29zZTogZmFsc2UsXG4gICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGJ1bGwgPSBpc29yZGVyZWQgPyBgXFxcXGR7MSw5fVxcXFwke2J1bGwuc2xpY2UoLTEpfWAgOiBgXFxcXCR7YnVsbH1gO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgIGJ1bGwgPSBpc29yZGVyZWQgPyBidWxsIDogJ1sqKy1dJztcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IG5leHQgbGlzdCBpdGVtXG4gICAgICBjb25zdCBpdGVtUmVnZXggPSB0aGlzLnJ1bGVzLm90aGVyLmxpc3RJdGVtUmVnZXgoYnVsbCk7XG4gICAgICBsZXQgZW5kc1dpdGhCbGFua0xpbmUgPSBmYWxzZTtcbiAgICAgIC8vIENoZWNrIGlmIGN1cnJlbnQgYnVsbGV0IHBvaW50IGNhbiBzdGFydCBhIG5ldyBMaXN0IEl0ZW1cbiAgICAgIHdoaWxlIChzcmMpIHtcbiAgICAgICAgbGV0IGVuZEVhcmx5ID0gZmFsc2U7XG4gICAgICAgIGxldCByYXcgPSAnJztcbiAgICAgICAgbGV0IGl0ZW1Db250ZW50cyA9ICcnO1xuICAgICAgICBpZiAoIShjYXAgPSBpdGVtUmVnZXguZXhlYyhzcmMpKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucnVsZXMuYmxvY2suaHIudGVzdChzcmMpKSB7IC8vIEVuZCBsaXN0IGlmIGJ1bGxldCB3YXMgYWN0dWFsbHkgSFIgKHBvc3NpYmx5IG1vdmUgaW50byBpdGVtUmVnZXg/KVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmF3ID0gY2FwWzBdO1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHJhdy5sZW5ndGgpO1xuXG4gICAgICAgIGxldCBsaW5lID0gZXhwYW5kVGFicyhjYXBbMl0uc3BsaXQoJ1xcbicsIDEpWzBdLCBjYXBbMV0ubGVuZ3RoKTtcbiAgICAgICAgbGV0IG5leHRMaW5lID0gc3JjLnNwbGl0KCdcXG4nLCAxKVswXTtcbiAgICAgICAgbGV0IGJsYW5rTGluZSA9ICFsaW5lLnRyaW0oKTtcblxuICAgICAgICBsZXQgaW5kZW50ID0gMDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgICAgIGluZGVudCA9IDI7XG4gICAgICAgICAgaXRlbUNvbnRlbnRzID0gbGluZS50cmltU3RhcnQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChibGFua0xpbmUpIHtcbiAgICAgICAgICBpbmRlbnQgPSBjYXBbMV0ubGVuZ3RoICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbmRlbnQgPSBsaW5lLnNlYXJjaCh0aGlzLnJ1bGVzLm90aGVyLm5vblNwYWNlQ2hhcik7IC8vIEZpbmQgZmlyc3Qgbm9uLXNwYWNlIGNoYXJcbiAgICAgICAgICBpbmRlbnQgPSBpbmRlbnQgPiA0ID8gMSA6IGluZGVudDsgLy8gVHJlYXQgaW5kZW50ZWQgY29kZSBibG9ja3MgKD4gNCBzcGFjZXMpIGFzIGhhdmluZyBvbmx5IDEgaW5kZW50XG4gICAgICAgICAgaXRlbUNvbnRlbnRzID0gbGluZS5zbGljZShpbmRlbnQpO1xuICAgICAgICAgIGluZGVudCArPSBjYXBbMV0ubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJsYW5rTGluZSAmJiB0aGlzLnJ1bGVzLm90aGVyLmJsYW5rTGluZS50ZXN0KG5leHRMaW5lKSkgeyAvLyBJdGVtcyBiZWdpbiB3aXRoIGF0IG1vc3Qgb25lIGJsYW5rIGxpbmVcbiAgICAgICAgICByYXcgKz0gbmV4dExpbmUgKyAnXFxuJztcbiAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKG5leHRMaW5lLmxlbmd0aCArIDEpO1xuICAgICAgICAgIGVuZEVhcmx5ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZW5kRWFybHkpIHtcbiAgICAgICAgICBjb25zdCBuZXh0QnVsbGV0UmVnZXggPSB0aGlzLnJ1bGVzLm90aGVyLm5leHRCdWxsZXRSZWdleChpbmRlbnQpO1xuICAgICAgICAgIGNvbnN0IGhyUmVnZXggPSB0aGlzLnJ1bGVzLm90aGVyLmhyUmVnZXgoaW5kZW50KTtcbiAgICAgICAgICBjb25zdCBmZW5jZXNCZWdpblJlZ2V4ID0gdGhpcy5ydWxlcy5vdGhlci5mZW5jZXNCZWdpblJlZ2V4KGluZGVudCk7XG4gICAgICAgICAgY29uc3QgaGVhZGluZ0JlZ2luUmVnZXggPSB0aGlzLnJ1bGVzLm90aGVyLmhlYWRpbmdCZWdpblJlZ2V4KGluZGVudCk7XG4gICAgICAgICAgY29uc3QgaHRtbEJlZ2luUmVnZXggPSB0aGlzLnJ1bGVzLm90aGVyLmh0bWxCZWdpblJlZ2V4KGluZGVudCk7XG4gICAgICAgICAgY29uc3QgYmxvY2txdW90ZUJlZ2luUmVnZXggPSB0aGlzLnJ1bGVzLm90aGVyLmJsb2NrcXVvdGVCZWdpblJlZ2V4KGluZGVudCk7XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiBmb2xsb3dpbmcgbGluZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIExpc3QgSXRlbVxuICAgICAgICAgIHdoaWxlIChzcmMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhd0xpbmUgPSBzcmMuc3BsaXQoJ1xcbicsIDEpWzBdO1xuICAgICAgICAgICAgbGV0IG5leHRMaW5lV2l0aG91dFRhYnM7XG4gICAgICAgICAgICBuZXh0TGluZSA9IHJhd0xpbmU7XG5cbiAgICAgICAgICAgIC8vIFJlLWFsaWduIHRvIGZvbGxvdyBjb21tb25tYXJrIG5lc3RpbmcgcnVsZXNcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICAgICAgICAgICAgbmV4dExpbmUgPSBuZXh0TGluZS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubGlzdFJlcGxhY2VOZXN0aW5nLCAnICAnKTtcbiAgICAgICAgICAgICAgbmV4dExpbmVXaXRob3V0VGFicyA9IG5leHRMaW5lO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV4dExpbmVXaXRob3V0VGFicyA9IG5leHRMaW5lLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJDaGFyR2xvYmFsLCAnICAgICcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBFbmQgbGlzdCBpdGVtIGlmIGZvdW5kIGNvZGUgZmVuY2VzXG4gICAgICAgICAgICBpZiAoZmVuY2VzQmVnaW5SZWdleC50ZXN0KG5leHRMaW5lKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRW5kIGxpc3QgaXRlbSBpZiBmb3VuZCBzdGFydCBvZiBuZXcgaGVhZGluZ1xuICAgICAgICAgICAgaWYgKGhlYWRpbmdCZWdpblJlZ2V4LnRlc3QobmV4dExpbmUpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBFbmQgbGlzdCBpdGVtIGlmIGZvdW5kIHN0YXJ0IG9mIGh0bWwgYmxvY2tcbiAgICAgICAgICAgIGlmIChodG1sQmVnaW5SZWdleC50ZXN0KG5leHRMaW5lKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRW5kIGxpc3QgaXRlbSBpZiBmb3VuZCBzdGFydCBvZiBibG9ja3F1b3RlXG4gICAgICAgICAgICBpZiAoYmxvY2txdW90ZUJlZ2luUmVnZXgudGVzdChuZXh0TGluZSkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVuZCBsaXN0IGl0ZW0gaWYgZm91bmQgc3RhcnQgb2YgbmV3IGJ1bGxldFxuICAgICAgICAgICAgaWYgKG5leHRCdWxsZXRSZWdleC50ZXN0KG5leHRMaW5lKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSG9yaXpvbnRhbCBydWxlIGZvdW5kXG4gICAgICAgICAgICBpZiAoaHJSZWdleC50ZXN0KG5leHRMaW5lKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5leHRMaW5lV2l0aG91dFRhYnMuc2VhcmNoKHRoaXMucnVsZXMub3RoZXIubm9uU3BhY2VDaGFyKSA+PSBpbmRlbnQgfHwgIW5leHRMaW5lLnRyaW0oKSkgeyAvLyBEZWRlbnQgaWYgcG9zc2libGVcbiAgICAgICAgICAgICAgaXRlbUNvbnRlbnRzICs9ICdcXG4nICsgbmV4dExpbmVXaXRob3V0VGFicy5zbGljZShpbmRlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gbm90IGVub3VnaCBpbmRlbnRhdGlvblxuICAgICAgICAgICAgICBpZiAoYmxhbmtMaW5lKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBwYXJhZ3JhcGggY29udGludWF0aW9uIHVubGVzcyBsYXN0IGxpbmUgd2FzIGEgZGlmZmVyZW50IGJsb2NrIGxldmVsIGVsZW1lbnRcbiAgICAgICAgICAgICAgaWYgKGxpbmUucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLnRhYkNoYXJHbG9iYWwsICcgICAgJykuc2VhcmNoKHRoaXMucnVsZXMub3RoZXIubm9uU3BhY2VDaGFyKSA+PSA0KSB7IC8vIGluZGVudGVkIGNvZGUgYmxvY2tcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZmVuY2VzQmVnaW5SZWdleC50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGhlYWRpbmdCZWdpblJlZ2V4LnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaHJSZWdleC50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpdGVtQ29udGVudHMgKz0gJ1xcbicgKyBuZXh0TGluZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYmxhbmtMaW5lID0gIW5leHRMaW5lLnRyaW0oKTtcblxuICAgICAgICAgICAgcmF3ICs9IHJhd0xpbmUgKyAnXFxuJztcbiAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcocmF3TGluZS5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIGxpbmUgPSBuZXh0TGluZVdpdGhvdXRUYWJzLnNsaWNlKGluZGVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFsaXN0Lmxvb3NlKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIGl0ZW0gZW5kZWQgd2l0aCBhIGJsYW5rIGxpbmUsIHRoZSBsaXN0IGlzIGxvb3NlXG4gICAgICAgICAgaWYgKGVuZHNXaXRoQmxhbmtMaW5lKSB7XG4gICAgICAgICAgICBsaXN0Lmxvb3NlID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucnVsZXMub3RoZXIuZG91YmxlQmxhbmtMaW5lLnRlc3QocmF3KSkge1xuICAgICAgICAgICAgZW5kc1dpdGhCbGFua0xpbmUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxpc3QuaXRlbXMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2xpc3RfaXRlbScsXG4gICAgICAgICAgcmF3LFxuICAgICAgICAgIHRhc2s6ICEhdGhpcy5vcHRpb25zLmdmbSAmJiB0aGlzLnJ1bGVzLm90aGVyLmxpc3RJc1Rhc2sudGVzdChpdGVtQ29udGVudHMpLFxuICAgICAgICAgIGxvb3NlOiBmYWxzZSxcbiAgICAgICAgICB0ZXh0OiBpdGVtQ29udGVudHMsXG4gICAgICAgICAgdG9rZW5zOiBbXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGlzdC5yYXcgKz0gcmF3O1xuICAgICAgfVxuXG4gICAgICAvLyBEbyBub3QgY29uc3VtZSBuZXdsaW5lcyBhdCBlbmQgb2YgZmluYWwgaXRlbS4gQWx0ZXJuYXRpdmVseSwgbWFrZSBpdGVtUmVnZXggKnN0YXJ0KiB3aXRoIGFueSBuZXdsaW5lcyB0byBzaW1wbGlmeS9zcGVlZCB1cCBlbmRzV2l0aEJsYW5rTGluZSBsb2dpY1xuICAgICAgY29uc3QgbGFzdEl0ZW0gPSBsaXN0Lml0ZW1zLmF0KC0xKTtcbiAgICAgIGlmIChsYXN0SXRlbSkge1xuICAgICAgICBsYXN0SXRlbS5yYXcgPSBsYXN0SXRlbS5yYXcudHJpbUVuZCgpO1xuICAgICAgICBsYXN0SXRlbS50ZXh0ID0gbGFzdEl0ZW0udGV4dC50cmltRW5kKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3QgYSBsaXN0IHNpbmNlIHRoZXJlIHdlcmUgbm8gaXRlbXNcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGlzdC5yYXcgPSBsaXN0LnJhdy50cmltRW5kKCk7XG5cbiAgICAgIC8vIEl0ZW0gY2hpbGQgdG9rZW5zIGhhbmRsZWQgaGVyZSBhdCBlbmQgYmVjYXVzZSB3ZSBuZWVkZWQgdG8gaGF2ZSB0aGUgZmluYWwgaXRlbSB0byB0cmltIGl0IGZpcnN0XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdC5pdGVtcykge1xuICAgICAgICB0aGlzLmxleGVyLnN0YXRlLnRvcCA9IGZhbHNlO1xuICAgICAgICBpdGVtLnRva2VucyA9IHRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoaXRlbS50ZXh0LCBbXSk7XG4gICAgICAgIGlmIChpdGVtLnRhc2spIHtcbiAgICAgICAgICAvLyBSZW1vdmUgY2hlY2tib3ggbWFya2Rvd24gZnJvbSBpdGVtIHRva2Vuc1xuICAgICAgICAgIGl0ZW0udGV4dCA9IGl0ZW0udGV4dC5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubGlzdFJlcGxhY2VUYXNrLCAnJyk7XG4gICAgICAgICAgaWYgKGl0ZW0udG9rZW5zWzBdPy50eXBlID09PSAndGV4dCcgfHwgaXRlbS50b2tlbnNbMF0/LnR5cGUgPT09ICdwYXJhZ3JhcGgnKSB7XG4gICAgICAgICAgICBpdGVtLnRva2Vuc1swXS5yYXcgPSBpdGVtLnRva2Vuc1swXS5yYXcucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlVGFzaywgJycpO1xuICAgICAgICAgICAgaXRlbS50b2tlbnNbMF0udGV4dCA9IGl0ZW0udG9rZW5zWzBdLnRleHQucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlVGFzaywgJycpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGV4ZXIuaW5saW5lUXVldWUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMucnVsZXMub3RoZXIubGlzdElzVGFzay50ZXN0KHRoaXMubGV4ZXIuaW5saW5lUXVldWVbaV0uc3JjKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGV4ZXIuaW5saW5lUXVldWVbaV0uc3JjID0gdGhpcy5sZXhlci5pbmxpbmVRdWV1ZVtpXS5zcmMucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlVGFzaywgJycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdGFza1JhdyA9IHRoaXMucnVsZXMub3RoZXIubGlzdFRhc2tDaGVja2JveC5leGVjKGl0ZW0ucmF3KTtcbiAgICAgICAgICBpZiAodGFza1Jhdykge1xuICAgICAgICAgICAgY29uc3QgY2hlY2tib3hUb2tlbjogVG9rZW5zLkNoZWNrYm94ID0ge1xuICAgICAgICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgICAgICAgICByYXc6IHRhc2tSYXdbMF0gKyAnICcsXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IHRhc2tSYXdbMF0gIT09ICdbIF0nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGl0ZW0uY2hlY2tlZCA9IGNoZWNrYm94VG9rZW4uY2hlY2tlZDtcbiAgICAgICAgICAgIGlmIChsaXN0Lmxvb3NlKSB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLnRva2Vuc1swXSAmJiBbJ3BhcmFncmFwaCcsICd0ZXh0J10uaW5jbHVkZXMoaXRlbS50b2tlbnNbMF0udHlwZSkgJiYgJ3Rva2VucycgaW4gaXRlbS50b2tlbnNbMF0gJiYgaXRlbS50b2tlbnNbMF0udG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgaXRlbS50b2tlbnNbMF0ucmF3ID0gY2hlY2tib3hUb2tlbi5yYXcgKyBpdGVtLnRva2Vuc1swXS5yYXc7XG4gICAgICAgICAgICAgICAgaXRlbS50b2tlbnNbMF0udGV4dCA9IGNoZWNrYm94VG9rZW4ucmF3ICsgaXRlbS50b2tlbnNbMF0udGV4dDtcbiAgICAgICAgICAgICAgICBpdGVtLnRva2Vuc1swXS50b2tlbnMudW5zaGlmdChjaGVja2JveFRva2VuKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLnRva2Vucy51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdwYXJhZ3JhcGgnLFxuICAgICAgICAgICAgICAgICAgcmF3OiBjaGVja2JveFRva2VuLnJhdyxcbiAgICAgICAgICAgICAgICAgIHRleHQ6IGNoZWNrYm94VG9rZW4ucmF3LFxuICAgICAgICAgICAgICAgICAgdG9rZW5zOiBbY2hlY2tib3hUb2tlbl0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGl0ZW0udG9rZW5zLnVuc2hpZnQoY2hlY2tib3hUb2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFsaXN0Lmxvb3NlKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgbGlzdCBzaG91bGQgYmUgbG9vc2VcbiAgICAgICAgICBjb25zdCBzcGFjZXJzID0gaXRlbS50b2tlbnMuZmlsdGVyKHQgPT4gdC50eXBlID09PSAnc3BhY2UnKTtcbiAgICAgICAgICBjb25zdCBoYXNNdWx0aXBsZUxpbmVCcmVha3MgPSBzcGFjZXJzLmxlbmd0aCA+IDAgJiYgc3BhY2Vycy5zb21lKHQgPT4gdGhpcy5ydWxlcy5vdGhlci5hbnlMaW5lLnRlc3QodC5yYXcpKTtcblxuICAgICAgICAgIGxpc3QubG9vc2UgPSBoYXNNdWx0aXBsZUxpbmVCcmVha3M7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGFsbCBpdGVtcyB0byBsb29zZSBpZiBsaXN0IGlzIGxvb3NlXG4gICAgICBpZiAobGlzdC5sb29zZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdC5pdGVtcykge1xuICAgICAgICAgIGl0ZW0ubG9vc2UgPSB0cnVlO1xuICAgICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgaXRlbS50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgdG9rZW4udHlwZSA9ICdwYXJhZ3JhcGgnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG4gIH1cblxuICBodG1sKHNyYzogc3RyaW5nKTogVG9rZW5zLkhUTUwgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCkge1xuICAgICAgY29uc3QgdG9rZW46IFRva2Vucy5IVE1MID0ge1xuICAgICAgICB0eXBlOiAnaHRtbCcsXG4gICAgICAgIGJsb2NrOiB0cnVlLFxuICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgcHJlOiBjYXBbMV0gPT09ICdwcmUnIHx8IGNhcFsxXSA9PT0gJ3NjcmlwdCcgfHwgY2FwWzFdID09PSAnc3R5bGUnLFxuICAgICAgICB0ZXh0OiBjYXBbMF0sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cbiAgfVxuXG4gIGRlZihzcmM6IHN0cmluZyk6IFRva2Vucy5EZWYgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICBjb25zdCB0YWcgPSBjYXBbMV0udG9Mb3dlckNhc2UoKS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubXVsdGlwbGVTcGFjZUdsb2JhbCwgJyAnKTtcbiAgICAgIGNvbnN0IGhyZWYgPSBjYXBbMl0gPyBjYXBbMl0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmhyZWZCcmFja2V0cywgJyQxJykucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwgJyQxJykgOiAnJztcbiAgICAgIGNvbnN0IHRpdGxlID0gY2FwWzNdID8gY2FwWzNdLnN1YnN0cmluZygxLCBjYXBbM10ubGVuZ3RoIC0gMSkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwgJyQxJykgOiBjYXBbM107XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZGVmJyxcbiAgICAgICAgdGFnLFxuICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgaHJlZixcbiAgICAgICAgdGl0bGUsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHRhYmxlKHNyYzogc3RyaW5nKTogVG9rZW5zLlRhYmxlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLnRhYmxlLmV4ZWMoc3JjKTtcbiAgICBpZiAoIWNhcCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5ydWxlcy5vdGhlci50YWJsZURlbGltaXRlci50ZXN0KGNhcFsyXSkpIHtcbiAgICAgIC8vIGRlbGltaXRlciByb3cgbXVzdCBoYXZlIGEgcGlwZSAofCkgb3IgY29sb24gKDopIG90aGVyd2lzZSBpdCBpcyBhIHNldGV4dCBoZWFkaW5nXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVycyA9IHNwbGl0Q2VsbHMoY2FwWzFdKTtcbiAgICBjb25zdCBhbGlnbnMgPSBjYXBbMl0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25DaGFycywgJycpLnNwbGl0KCd8Jyk7XG4gICAgY29uc3Qgcm93cyA9IGNhcFszXT8udHJpbSgpID8gY2FwWzNdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJsZVJvd0JsYW5rTGluZSwgJycpLnNwbGl0KCdcXG4nKSA6IFtdO1xuXG4gICAgY29uc3QgaXRlbTogVG9rZW5zLlRhYmxlID0ge1xuICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgaGVhZGVyOiBbXSxcbiAgICAgIGFsaWduOiBbXSxcbiAgICAgIHJvd3M6IFtdLFxuICAgIH07XG5cbiAgICBpZiAoaGVhZGVycy5sZW5ndGggIT09IGFsaWducy5sZW5ndGgpIHtcbiAgICAgIC8vIGhlYWRlciBhbmQgYWxpZ24gY29sdW1ucyBtdXN0IGJlIGVxdWFsLCByb3dzIGNhbiBiZSBkaWZmZXJlbnQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhbGlnbiBvZiBhbGlnbnMpIHtcbiAgICAgIGlmICh0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25SaWdodC50ZXN0KGFsaWduKSkge1xuICAgICAgICBpdGVtLmFsaWduLnB1c2goJ3JpZ2h0Jyk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucnVsZXMub3RoZXIudGFibGVBbGlnbkNlbnRlci50ZXN0KGFsaWduKSkge1xuICAgICAgICBpdGVtLmFsaWduLnB1c2goJ2NlbnRlcicpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25MZWZ0LnRlc3QoYWxpZ24pKSB7XG4gICAgICAgIGl0ZW0uYWxpZ24ucHVzaCgnbGVmdCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbS5hbGlnbi5wdXNoKG51bGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaXRlbS5oZWFkZXIucHVzaCh7XG4gICAgICAgIHRleHQ6IGhlYWRlcnNbaV0sXG4gICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmUoaGVhZGVyc1tpXSksXG4gICAgICAgIGhlYWRlcjogdHJ1ZSxcbiAgICAgICAgYWxpZ246IGl0ZW0uYWxpZ25baV0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICBpdGVtLnJvd3MucHVzaChzcGxpdENlbGxzKHJvdywgaXRlbS5oZWFkZXIubGVuZ3RoKS5tYXAoKGNlbGwsIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0ZXh0OiBjZWxsLFxuICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmUoY2VsbCksXG4gICAgICAgICAgaGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICBhbGlnbjogaXRlbS5hbGlnbltpXSxcbiAgICAgICAgfTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIGxoZWFkaW5nKHNyYzogc3RyaW5nKTogVG9rZW5zLkhlYWRpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhzcmMpO1xuICAgIGlmIChjYXApIHtcbiAgICAgIGNvbnN0IHRleHQgPSBjYXBbMV0udHJpbSgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgZGVwdGg6IGNhcFsyXS5jaGFyQXQoMCkgPT09ICc9JyA/IDEgOiAyLFxuICAgICAgICB0ZXh0LFxuICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lKHRleHQpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwYXJhZ3JhcGgoc3JjOiBzdHJpbmcpOiBUb2tlbnMuUGFyYWdyYXBoIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCkge1xuICAgICAgY29uc3QgdGV4dCA9IGNhcFsxXS5jaGFyQXQoY2FwWzFdLmxlbmd0aCAtIDEpID09PSAnXFxuJ1xuICAgICAgICA/IGNhcFsxXS5zbGljZSgwLCAtMSlcbiAgICAgICAgOiBjYXBbMV07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgIHRleHQsXG4gICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmUodGV4dCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHRleHQoc3JjOiBzdHJpbmcpOiBUb2tlbnMuVGV4dCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay50ZXh0LmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICB0ZXh0OiBjYXBbMF0sXG4gICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmUoY2FwWzBdKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZXNjYXBlKHNyYzogc3RyaW5nKTogVG9rZW5zLkVzY2FwZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5pbmxpbmUuZXNjYXBlLmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZXNjYXBlJyxcbiAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgIHRleHQ6IGNhcFsxXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgdGFnKHNyYzogc3RyaW5nKTogVG9rZW5zLlRhZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICBpZiAoIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rICYmIHRoaXMucnVsZXMub3RoZXIuc3RhcnRBVGFnLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICB0aGlzLmxleGVyLnN0YXRlLmluTGluayA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rICYmIHRoaXMucnVsZXMub3RoZXIuZW5kQVRhZy50ZXN0KGNhcFswXSkpIHtcbiAgICAgICAgdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrICYmIHRoaXMucnVsZXMub3RoZXIuc3RhcnRQcmVTY3JpcHRUYWcudGVzdChjYXBbMF0pKSB7XG4gICAgICAgIHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayAmJiB0aGlzLnJ1bGVzLm90aGVyLmVuZFByZVNjcmlwdFRhZy50ZXN0KGNhcFswXSkpIHtcbiAgICAgICAgdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdodG1sJyxcbiAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgIGluTGluazogdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssXG4gICAgICAgIGluUmF3QmxvY2s6IHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayxcbiAgICAgICAgYmxvY2s6IGZhbHNlLFxuICAgICAgICB0ZXh0OiBjYXBbMF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGxpbmsoc3JjOiBzdHJpbmcpOiBUb2tlbnMuTGluayB8IFRva2Vucy5JbWFnZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCkge1xuICAgICAgY29uc3QgdHJpbW1lZFVybCA9IGNhcFsyXS50cmltKCk7XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5wZWRhbnRpYyAmJiB0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0QW5nbGVCcmFja2V0LnRlc3QodHJpbW1lZFVybCkpIHtcbiAgICAgICAgLy8gY29tbW9ubWFyayByZXF1aXJlcyBtYXRjaGluZyBhbmdsZSBicmFja2V0c1xuICAgICAgICBpZiAoISh0aGlzLnJ1bGVzLm90aGVyLmVuZEFuZ2xlQnJhY2tldC50ZXN0KHRyaW1tZWRVcmwpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZGluZyBhbmdsZSBicmFja2V0IGNhbm5vdCBiZSBlc2NhcGVkXG4gICAgICAgIGNvbnN0IHJ0cmltU2xhc2ggPSBydHJpbSh0cmltbWVkVXJsLnNsaWNlKDAsIC0xKSwgJ1xcXFwnKTtcbiAgICAgICAgaWYgKCh0cmltbWVkVXJsLmxlbmd0aCAtIHJ0cmltU2xhc2gubGVuZ3RoKSAlIDIgPT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZpbmQgY2xvc2luZyBwYXJlbnRoZXNpc1xuICAgICAgICBjb25zdCBsYXN0UGFyZW5JbmRleCA9IGZpbmRDbG9zaW5nQnJhY2tldChjYXBbMl0sICcoKScpO1xuICAgICAgICBpZiAobGFzdFBhcmVuSW5kZXggPT09IC0yKSB7XG4gICAgICAgICAgLy8gbW9yZSBvcGVuIHBhcmVucyB0aGFuIGNsb3NlZFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0UGFyZW5JbmRleCA+IC0xKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBjYXBbMF0uaW5kZXhPZignIScpID09PSAwID8gNSA6IDQ7XG4gICAgICAgICAgY29uc3QgbGlua0xlbiA9IHN0YXJ0ICsgY2FwWzFdLmxlbmd0aCArIGxhc3RQYXJlbkluZGV4O1xuICAgICAgICAgIGNhcFsyXSA9IGNhcFsyXS5zdWJzdHJpbmcoMCwgbGFzdFBhcmVuSW5kZXgpO1xuICAgICAgICAgIGNhcFswXSA9IGNhcFswXS5zdWJzdHJpbmcoMCwgbGlua0xlbikudHJpbSgpO1xuICAgICAgICAgIGNhcFszXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgaHJlZiA9IGNhcFsyXTtcbiAgICAgIGxldCB0aXRsZSA9ICcnO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgICAvLyBzcGxpdCBwZWRhbnRpYyBocmVmIGFuZCB0aXRsZVxuICAgICAgICBjb25zdCBsaW5rID0gdGhpcy5ydWxlcy5vdGhlci5wZWRhbnRpY0hyZWZUaXRsZS5leGVjKGhyZWYpO1xuXG4gICAgICAgIGlmIChsaW5rKSB7XG4gICAgICAgICAgaHJlZiA9IGxpbmtbMV07XG4gICAgICAgICAgdGl0bGUgPSBsaW5rWzNdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aXRsZSA9IGNhcFszXSA/IGNhcFszXS5zbGljZSgxLCAtMSkgOiAnJztcbiAgICAgIH1cblxuICAgICAgaHJlZiA9IGhyZWYudHJpbSgpO1xuICAgICAgaWYgKHRoaXMucnVsZXMub3RoZXIuc3RhcnRBbmdsZUJyYWNrZXQudGVzdChocmVmKSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljICYmICEodGhpcy5ydWxlcy5vdGhlci5lbmRBbmdsZUJyYWNrZXQudGVzdCh0cmltbWVkVXJsKSkpIHtcbiAgICAgICAgICAvLyBwZWRhbnRpYyBhbGxvd3Mgc3RhcnRpbmcgYW5nbGUgYnJhY2tldCB3aXRob3V0IGVuZGluZyBhbmdsZSBicmFja2V0XG4gICAgICAgICAgaHJlZiA9IGhyZWYuc2xpY2UoMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaHJlZiA9IGhyZWYuc2xpY2UoMSwgLTEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0cHV0TGluayhjYXAsIHtcbiAgICAgICAgaHJlZjogaHJlZiA/IGhyZWYucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwgJyQxJykgOiBocmVmLFxuICAgICAgICB0aXRsZTogdGl0bGUgPyB0aXRsZS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCAnJDEnKSA6IHRpdGxlLFxuICAgICAgfSwgY2FwWzBdLCB0aGlzLmxleGVyLCB0aGlzLnJ1bGVzKTtcbiAgICB9XG4gIH1cblxuICByZWZsaW5rKHNyYzogc3RyaW5nLCBsaW5rczogTGlua3MpOiBUb2tlbnMuTGluayB8IFRva2Vucy5JbWFnZSB8IFRva2Vucy5UZXh0IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgY2FwO1xuICAgIGlmICgoY2FwID0gdGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKHNyYykpXG4gICAgICB8fCAoY2FwID0gdGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWMoc3JjKSkpIHtcbiAgICAgIGNvbnN0IGxpbmtTdHJpbmcgPSAoY2FwWzJdIHx8IGNhcFsxXSkucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLm11bHRpcGxlU3BhY2VHbG9iYWwsICcgJyk7XG4gICAgICBjb25zdCBsaW5rID0gbGlua3NbbGlua1N0cmluZy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgIGlmICghbGluaykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gY2FwWzBdLmNoYXJBdCgwKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgcmF3OiB0ZXh0LFxuICAgICAgICAgIHRleHQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0cHV0TGluayhjYXAsIGxpbmssIGNhcFswXSwgdGhpcy5sZXhlciwgdGhpcy5ydWxlcyk7XG4gICAgfVxuICB9XG5cbiAgZW1TdHJvbmcoc3JjOiBzdHJpbmcsIG1hc2tlZFNyYzogc3RyaW5nLCBwcmV2Q2hhciA9ICcnKTogVG9rZW5zLkVtIHwgVG9rZW5zLlN0cm9uZyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IG1hdGNoID0gdGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdMRGVsaW0uZXhlYyhzcmMpO1xuICAgIGlmICghbWF0Y2gpIHJldHVybjtcbiAgICBpZiAoIW1hdGNoWzFdICYmICFtYXRjaFsyXSAmJiAhbWF0Y2hbM10gJiYgIW1hdGNoWzRdKSByZXR1cm47XG5cbiAgICAvLyBfIGNhbid0IGJlIGJldHdlZW4gdHdvIGFscGhhbnVtZXJpY3MuIFxccHtMfVxccHtOfSBpbmNsdWRlcyBub24tZW5nbGlzaCBhbHBoYWJldC9udW1iZXJzIGFzIHdlbGxcbiAgICBpZiAobWF0Y2hbNF0gJiYgcHJldkNoYXIubWF0Y2godGhpcy5ydWxlcy5vdGhlci51bmljb2RlQWxwaGFOdW1lcmljKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbmV4dENoYXIgPSBtYXRjaFsxXSB8fCBtYXRjaFszXSB8fCAnJztcblxuICAgIGlmICghbmV4dENoYXIgfHwgIXByZXZDaGFyIHx8IHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMocHJldkNoYXIpKSB7XG4gICAgICAvLyB1bmljb2RlIFJlZ2V4IGNvdW50cyBlbW9qaSBhcyAxIGNoYXI7IHNwcmVhZCBpbnRvIGFycmF5IGZvciBwcm9wZXIgY291bnQgKHVzZWQgbXVsdGlwbGUgdGltZXMgYmVsb3cpXG4gICAgICBjb25zdCBsTGVuZ3RoID0gWy4uLm1hdGNoWzBdXS5sZW5ndGggLSAxO1xuICAgICAgbGV0IHJEZWxpbSwgckxlbmd0aCwgZGVsaW1Ub3RhbCA9IGxMZW5ndGgsIG1pZERlbGltVG90YWwgPSAwO1xuXG4gICAgICBjb25zdCBlbmRSZWcgPSBtYXRjaFswXVswXSA9PT0gJyonID8gdGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1Bc3QgOiB0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZ1JEZWxpbVVuZDtcbiAgICAgIGVuZFJlZy5sYXN0SW5kZXggPSAwO1xuXG4gICAgICAvLyBDbGlwIG1hc2tlZFNyYyB0byBzYW1lIHNlY3Rpb24gb2Ygc3RyaW5nIGFzIHNyYyAobW92ZSB0byBsZXhlcj8pXG4gICAgICBtYXNrZWRTcmMgPSBtYXNrZWRTcmMuc2xpY2UoLTEgKiBzcmMubGVuZ3RoICsgbExlbmd0aCk7XG5cbiAgICAgIHdoaWxlICgobWF0Y2ggPSBlbmRSZWcuZXhlYyhtYXNrZWRTcmMpKSAhPSBudWxsKSB7XG4gICAgICAgIHJEZWxpbSA9IG1hdGNoWzFdIHx8IG1hdGNoWzJdIHx8IG1hdGNoWzNdIHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IG1hdGNoWzZdO1xuXG4gICAgICAgIGlmICghckRlbGltKSBjb250aW51ZTsgLy8gc2tpcCBzaW5nbGUgKiBpbiBfX2FiYyphYmNfX1xuXG4gICAgICAgIHJMZW5ndGggPSBbLi4uckRlbGltXS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKG1hdGNoWzNdIHx8IG1hdGNoWzRdKSB7IC8vIGZvdW5kIGFub3RoZXIgTGVmdCBEZWxpbVxuICAgICAgICAgIGRlbGltVG90YWwgKz0gckxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaFs1XSB8fCBtYXRjaFs2XSkgeyAvLyBlaXRoZXIgTGVmdCBvciBSaWdodCBEZWxpbVxuICAgICAgICAgIGlmIChsTGVuZ3RoICUgMyAmJiAhKChsTGVuZ3RoICsgckxlbmd0aCkgJSAzKSkge1xuICAgICAgICAgICAgbWlkRGVsaW1Ub3RhbCArPSByTGVuZ3RoO1xuICAgICAgICAgICAgY29udGludWU7IC8vIENvbW1vbk1hcmsgRW1waGFzaXMgUnVsZXMgOS0xMFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGltVG90YWwgLT0gckxlbmd0aDtcblxuICAgICAgICBpZiAoZGVsaW1Ub3RhbCA+IDApIGNvbnRpbnVlOyAvLyBIYXZlbid0IGZvdW5kIGVub3VnaCBjbG9zaW5nIGRlbGltaXRlcnNcblxuICAgICAgICAvLyBSZW1vdmUgZXh0cmEgY2hhcmFjdGVycy4gKmEqKiogLT4gKmEqXG4gICAgICAgIHJMZW5ndGggPSBNYXRoLm1pbihyTGVuZ3RoLCByTGVuZ3RoICsgZGVsaW1Ub3RhbCArIG1pZERlbGltVG90YWwpO1xuICAgICAgICAvLyBjaGFyIGxlbmd0aCBjYW4gYmUgPjEgZm9yIHVuaWNvZGUgY2hhcmFjdGVycztcbiAgICAgICAgY29uc3QgbGFzdENoYXJMZW5ndGggPSBbLi4ubWF0Y2hbMF1dWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmF3ID0gc3JjLnNsaWNlKDAsIGxMZW5ndGggKyBtYXRjaC5pbmRleCArIGxhc3RDaGFyTGVuZ3RoICsgckxlbmd0aCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGBlbWAgaWYgc21hbGxlc3QgZGVsaW1pdGVyIGhhcyBvZGQgY2hhciBjb3VudC4gKmEqKipcbiAgICAgICAgaWYgKE1hdGgubWluKGxMZW5ndGgsIHJMZW5ndGgpICUgMikge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSByYXcuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZW0nLFxuICAgICAgICAgICAgcmF3LFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmVUb2tlbnModGV4dCksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSAnc3Ryb25nJyBpZiBzbWFsbGVzdCBkZWxpbWl0ZXIgaGFzIGV2ZW4gY2hhciBjb3VudC4gKiphKioqXG4gICAgICAgIGNvbnN0IHRleHQgPSByYXcuc2xpY2UoMiwgLTIpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdzdHJvbmcnLFxuICAgICAgICAgIHJhdyxcbiAgICAgICAgICB0ZXh0LFxuICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmVUb2tlbnModGV4dCksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29kZXNwYW4oc3JjOiBzdHJpbmcpOiBUb2tlbnMuQ29kZXNwYW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhzcmMpO1xuICAgIGlmIChjYXApIHtcbiAgICAgIGxldCB0ZXh0ID0gY2FwWzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5uZXdMaW5lQ2hhckdsb2JhbCwgJyAnKTtcbiAgICAgIGNvbnN0IGhhc05vblNwYWNlQ2hhcnMgPSB0aGlzLnJ1bGVzLm90aGVyLm5vblNwYWNlQ2hhci50ZXN0KHRleHQpO1xuICAgICAgY29uc3QgaGFzU3BhY2VDaGFyc09uQm90aEVuZHMgPSB0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0aW5nU3BhY2VDaGFyLnRlc3QodGV4dCkgJiYgdGhpcy5ydWxlcy5vdGhlci5lbmRpbmdTcGFjZUNoYXIudGVzdCh0ZXh0KTtcbiAgICAgIGlmIChoYXNOb25TcGFjZUNoYXJzICYmIGhhc1NwYWNlQ2hhcnNPbkJvdGhFbmRzKSB7XG4gICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygxLCB0ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2NvZGVzcGFuJyxcbiAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgIHRleHQsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGJyKHNyYzogc3RyaW5nKTogVG9rZW5zLkJyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2JyJyxcbiAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGRlbChzcmM6IHN0cmluZywgbWFza2VkU3JjOiBzdHJpbmcsIHByZXZDaGFyID0gJycpOiBUb2tlbnMuRGVsIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgbWF0Y2ggPSB0aGlzLnJ1bGVzLmlubGluZS5kZWxMRGVsaW0uZXhlYyhzcmMpO1xuICAgIGlmICghbWF0Y2gpIHJldHVybjtcblxuICAgIGNvbnN0IG5leHRDaGFyID0gbWF0Y2hbMV0gfHwgJyc7XG5cbiAgICBpZiAoIW5leHRDaGFyIHx8ICFwcmV2Q2hhciB8fCB0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKHByZXZDaGFyKSkge1xuICAgICAgLy8gdW5pY29kZSBSZWdleCBjb3VudHMgZW1vamkgYXMgMSBjaGFyOyBzcHJlYWQgaW50byBhcnJheSBmb3IgcHJvcGVyIGNvdW50XG4gICAgICBjb25zdCBsTGVuZ3RoID0gWy4uLm1hdGNoWzBdXS5sZW5ndGggLSAxO1xuICAgICAgbGV0IHJEZWxpbSwgckxlbmd0aCwgZGVsaW1Ub3RhbCA9IGxMZW5ndGg7XG5cbiAgICAgIGNvbnN0IGVuZFJlZyA9IHRoaXMucnVsZXMuaW5saW5lLmRlbFJEZWxpbTtcbiAgICAgIGVuZFJlZy5sYXN0SW5kZXggPSAwO1xuXG4gICAgICAvLyBDbGlwIG1hc2tlZFNyYyB0byBzYW1lIHNlY3Rpb24gb2Ygc3RyaW5nIGFzIHNyY1xuICAgICAgbWFza2VkU3JjID0gbWFza2VkU3JjLnNsaWNlKC0xICogc3JjLmxlbmd0aCArIGxMZW5ndGgpO1xuXG4gICAgICB3aGlsZSAoKG1hdGNoID0gZW5kUmVnLmV4ZWMobWFza2VkU3JjKSkgIT0gbnVsbCkge1xuICAgICAgICByRGVsaW0gPSBtYXRjaFsxXSB8fCBtYXRjaFsyXSB8fCBtYXRjaFszXSB8fCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBtYXRjaFs2XTtcblxuICAgICAgICBpZiAoIXJEZWxpbSkgY29udGludWU7XG5cbiAgICAgICAgckxlbmd0aCA9IFsuLi5yRGVsaW1dLmxlbmd0aDtcblxuICAgICAgICBpZiAockxlbmd0aCAhPT0gbExlbmd0aCkgY29udGludWU7XG5cbiAgICAgICAgaWYgKG1hdGNoWzNdIHx8IG1hdGNoWzRdKSB7IC8vIGZvdW5kIGFub3RoZXIgTGVmdCBEZWxpbVxuICAgICAgICAgIGRlbGltVG90YWwgKz0gckxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGltVG90YWwgLT0gckxlbmd0aDtcblxuICAgICAgICBpZiAoZGVsaW1Ub3RhbCA+IDApIGNvbnRpbnVlOyAvLyBIYXZlbid0IGZvdW5kIGVub3VnaCBjbG9zaW5nIGRlbGltaXRlcnNcblxuICAgICAgICAvLyBSZW1vdmUgZXh0cmEgY2hhcmFjdGVyc1xuICAgICAgICByTGVuZ3RoID0gTWF0aC5taW4ockxlbmd0aCwgckxlbmd0aCArIGRlbGltVG90YWwpO1xuICAgICAgICAvLyBjaGFyIGxlbmd0aCBjYW4gYmUgPjEgZm9yIHVuaWNvZGUgY2hhcmFjdGVyc1xuICAgICAgICBjb25zdCBsYXN0Q2hhckxlbmd0aCA9IFsuLi5tYXRjaFswXV1bMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCByYXcgPSBzcmMuc2xpY2UoMCwgbExlbmd0aCArIG1hdGNoLmluZGV4ICsgbGFzdENoYXJMZW5ndGggKyByTGVuZ3RoKTtcblxuICAgICAgICAvLyBDcmVhdGUgZGVsIHRva2VuIC0gb25seSBzaW5nbGUgfiBvciBkb3VibGUgfn4gc3VwcG9ydGVkXG4gICAgICAgIGNvbnN0IHRleHQgPSByYXcuc2xpY2UobExlbmd0aCwgLWxMZW5ndGgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdkZWwnLFxuICAgICAgICAgIHJhdyxcbiAgICAgICAgICB0ZXh0LFxuICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmVUb2tlbnModGV4dCksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXV0b2xpbmsoc3JjOiBzdHJpbmcpOiBUb2tlbnMuTGluayB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhzcmMpO1xuICAgIGlmIChjYXApIHtcbiAgICAgIGxldCB0ZXh0LCBocmVmO1xuICAgICAgaWYgKGNhcFsyXSA9PT0gJ0AnKSB7XG4gICAgICAgIHRleHQgPSBjYXBbMV07XG4gICAgICAgIGhyZWYgPSAnbWFpbHRvOicgKyB0ZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IGNhcFsxXTtcbiAgICAgICAgaHJlZiA9IHRleHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgIHRleHQsXG4gICAgICAgIGhyZWYsXG4gICAgICAgIHRva2VuczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIHJhdzogdGV4dCxcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgdXJsKHNyYzogc3RyaW5nKTogVG9rZW5zLkxpbmsgfCB1bmRlZmluZWQge1xuICAgIGxldCBjYXA7XG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLnVybC5leGVjKHNyYykpIHtcbiAgICAgIGxldCB0ZXh0LCBocmVmO1xuICAgICAgaWYgKGNhcFsyXSA9PT0gJ0AnKSB7XG4gICAgICAgIHRleHQgPSBjYXBbMF07XG4gICAgICAgIGhyZWYgPSAnbWFpbHRvOicgKyB0ZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZG8gZXh0ZW5kZWQgYXV0b2xpbmsgcGF0aCB2YWxpZGF0aW9uXG4gICAgICAgIGxldCBwcmV2Q2FwWmVybztcbiAgICAgICAgZG8ge1xuICAgICAgICAgIHByZXZDYXBaZXJvID0gY2FwWzBdO1xuICAgICAgICAgIGNhcFswXSA9IHRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyhjYXBbMF0pPy5bMF0gPz8gJyc7XG4gICAgICAgIH0gd2hpbGUgKHByZXZDYXBaZXJvICE9PSBjYXBbMF0pO1xuICAgICAgICB0ZXh0ID0gY2FwWzBdO1xuICAgICAgICBpZiAoY2FwWzFdID09PSAnd3d3LicpIHtcbiAgICAgICAgICBocmVmID0gJ2h0dHA6Ly8nICsgY2FwWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhyZWYgPSBjYXBbMF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgIHRleHQsXG4gICAgICAgIGhyZWYsXG4gICAgICAgIHRva2VuczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIHJhdzogdGV4dCxcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaW5saW5lVGV4dChzcmM6IHN0cmluZyk6IFRva2Vucy5UZXh0IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmlubGluZS50ZXh0LmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICBjb25zdCBlc2NhcGVkID0gdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgdGV4dDogY2FwWzBdLFxuICAgICAgICBlc2NhcGVkLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBfVG9rZW5pemVyIH0gZnJvbSAnLi9Ub2tlbml6ZXIudHMnO1xuaW1wb3J0IHsgX2RlZmF1bHRzIH0gZnJvbSAnLi9kZWZhdWx0cy50cyc7XG5pbXBvcnQgeyBvdGhlciwgYmxvY2ssIGlubGluZSB9IGZyb20gJy4vcnVsZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiwgVG9rZW5zTGlzdCwgVG9rZW5zIH0gZnJvbSAnLi9Ub2tlbnMudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXJrZWRPcHRpb25zIH0gZnJvbSAnLi9NYXJrZWRPcHRpb25zLnRzJztcblxuLyoqXG4gKiBCbG9jayBMZXhlclxuICovXG5leHBvcnQgY2xhc3MgX0xleGVyPFBhcnNlck91dHB1dCA9IHN0cmluZywgUmVuZGVyZXJPdXRwdXQgPSBzdHJpbmc+IHtcbiAgdG9rZW5zOiBUb2tlbnNMaXN0O1xuICBvcHRpb25zOiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+O1xuICBzdGF0ZToge1xuICAgIGluTGluazogYm9vbGVhbjtcbiAgICBpblJhd0Jsb2NrOiBib29sZWFuO1xuICAgIHRvcDogYm9vbGVhbjtcbiAgfTtcblxuICBwdWJsaWMgaW5saW5lUXVldWU6IHsgc3JjOiBzdHJpbmcsIHRva2VuczogVG9rZW5bXSB9W107XG5cbiAgcHJpdmF0ZSB0b2tlbml6ZXI6IF9Ub2tlbml6ZXI8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4pIHtcbiAgICAvLyBUb2tlbkxpc3QgY2Fubm90IGJlIGNyZWF0ZWQgaW4gb25lIGdvXG4gICAgdGhpcy50b2tlbnMgPSBbXSBhcyB1bmtub3duIGFzIFRva2Vuc0xpc3Q7XG4gICAgdGhpcy50b2tlbnMubGlua3MgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgX2RlZmF1bHRzO1xuICAgIHRoaXMub3B0aW9ucy50b2tlbml6ZXIgPSB0aGlzLm9wdGlvbnMudG9rZW5pemVyIHx8IG5ldyBfVG9rZW5pemVyPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+KCk7XG4gICAgdGhpcy50b2tlbml6ZXIgPSB0aGlzLm9wdGlvbnMudG9rZW5pemVyO1xuICAgIHRoaXMudG9rZW5pemVyLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdGhpcy50b2tlbml6ZXIubGV4ZXIgPSB0aGlzO1xuICAgIHRoaXMuaW5saW5lUXVldWUgPSBbXTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaW5MaW5rOiBmYWxzZSxcbiAgICAgIGluUmF3QmxvY2s6IGZhbHNlLFxuICAgICAgdG9wOiB0cnVlLFxuICAgIH07XG5cbiAgICBjb25zdCBydWxlcyA9IHtcbiAgICAgIG90aGVyLFxuICAgICAgYmxvY2s6IGJsb2NrLm5vcm1hbCxcbiAgICAgIGlubGluZTogaW5saW5lLm5vcm1hbCxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgcnVsZXMuYmxvY2sgPSBibG9jay5wZWRhbnRpYztcbiAgICAgIHJ1bGVzLmlubGluZSA9IGlubGluZS5wZWRhbnRpYztcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5nZm0pIHtcbiAgICAgIHJ1bGVzLmJsb2NrID0gYmxvY2suZ2ZtO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5icmVha3MpIHtcbiAgICAgICAgcnVsZXMuaW5saW5lID0gaW5saW5lLmJyZWFrcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJ1bGVzLmlubGluZSA9IGlubGluZS5nZm07XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudG9rZW5pemVyLnJ1bGVzID0gcnVsZXM7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3NlIFJ1bGVzXG4gICAqL1xuICBzdGF0aWMgZ2V0IHJ1bGVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBibG9jayxcbiAgICAgIGlubGluZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBMZXggTWV0aG9kXG4gICAqL1xuICBzdGF0aWMgbGV4PFBhcnNlck91dHB1dCA9IHN0cmluZywgUmVuZGVyZXJPdXRwdXQgPSBzdHJpbmc+KHNyYzogc3RyaW5nLCBvcHRpb25zPzogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0Pikge1xuICAgIGNvbnN0IGxleGVyID0gbmV3IF9MZXhlcjxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PihvcHRpb25zKTtcbiAgICByZXR1cm4gbGV4ZXIubGV4KHNyYyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhdGljIExleCBJbmxpbmUgTWV0aG9kXG4gICAqL1xuICBzdGF0aWMgbGV4SW5saW5lPFBhcnNlck91dHB1dCA9IHN0cmluZywgUmVuZGVyZXJPdXRwdXQgPSBzdHJpbmc+KHNyYzogc3RyaW5nLCBvcHRpb25zPzogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0Pikge1xuICAgIGNvbnN0IGxleGVyID0gbmV3IF9MZXhlcjxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PihvcHRpb25zKTtcbiAgICByZXR1cm4gbGV4ZXIuaW5saW5lVG9rZW5zKHNyYyk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcHJvY2Vzc2luZ1xuICAgKi9cbiAgbGV4KHNyYzogc3RyaW5nKSB7XG4gICAgc3JjID0gc3JjLnJlcGxhY2Uob3RoZXIuY2FycmlhZ2VSZXR1cm4sICdcXG4nKTtcblxuICAgIHRoaXMuYmxvY2tUb2tlbnMoc3JjLCB0aGlzLnRva2Vucyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaW5saW5lUXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmlubGluZVF1ZXVlW2ldO1xuICAgICAgdGhpcy5pbmxpbmVUb2tlbnMobmV4dC5zcmMsIG5leHQudG9rZW5zKTtcbiAgICB9XG4gICAgdGhpcy5pbmxpbmVRdWV1ZSA9IFtdO1xuXG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIExleGluZ1xuICAgKi9cbiAgYmxvY2tUb2tlbnMoc3JjOiBzdHJpbmcsIHRva2Vucz86IFRva2VuW10sIGxhc3RQYXJhZ3JhcGhDbGlwcGVkPzogYm9vbGVhbik6IFRva2VuW107XG4gIGJsb2NrVG9rZW5zKHNyYzogc3RyaW5nLCB0b2tlbnM/OiBUb2tlbnNMaXN0LCBsYXN0UGFyYWdyYXBoQ2xpcHBlZD86IGJvb2xlYW4pOiBUb2tlbnNMaXN0O1xuICBibG9ja1Rva2VucyhzcmM6IHN0cmluZywgdG9rZW5zOiBUb2tlbltdID0gW10sIGxhc3RQYXJhZ3JhcGhDbGlwcGVkID0gZmFsc2UpIHtcbiAgICB0aGlzLnRva2VuaXplci5sZXhlciA9IHRoaXM7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgc3JjID0gc3JjLnJlcGxhY2Uob3RoZXIudGFiQ2hhckdsb2JhbCwgJyAgICAnKS5yZXBsYWNlKG90aGVyLnNwYWNlTGluZSwgJycpO1xuICAgIH1cblxuICAgIHdoaWxlIChzcmMpIHtcbiAgICAgIGxldCB0b2tlbjogVG9rZW5zLkdlbmVyaWMgfCB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uYmxvY2s/LnNvbWUoKGV4dFRva2VuaXplcikgPT4ge1xuICAgICAgICBpZiAodG9rZW4gPSBleHRUb2tlbml6ZXIuY2FsbCh7IGxleGVyOiB0aGlzIH0sIHNyYywgdG9rZW5zKSkge1xuICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBuZXdsaW5lXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5zcGFjZShzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGxhc3RUb2tlbiA9IHRva2Vucy5hdCgtMSk7XG4gICAgICAgIGlmICh0b2tlbi5yYXcubGVuZ3RoID09PSAxICYmIGxhc3RUb2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gaWYgdGhlcmUncyBhIHNpbmdsZSBcXG4gYXMgYSBzcGFjZXIsIGl0J3MgdGVybWluYXRpbmcgdGhlIGxhc3QgbGluZSxcbiAgICAgICAgICAvLyBzbyBtb3ZlIGl0IHRoZXJlIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IHVubmVjZXNzYXJ5IHBhcmFncmFwaCB0YWdzXG4gICAgICAgICAgbGFzdFRva2VuLnJhdyArPSAnXFxuJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvZGVcbiAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmNvZGUoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBsYXN0VG9rZW4gPSB0b2tlbnMuYXQoLTEpO1xuICAgICAgICAvLyBBbiBpbmRlbnRlZCBjb2RlIGJsb2NrIGNhbm5vdCBpbnRlcnJ1cHQgYSBwYXJhZ3JhcGguXG4gICAgICAgIGlmIChsYXN0VG9rZW4/LnR5cGUgPT09ICdwYXJhZ3JhcGgnIHx8IGxhc3RUb2tlbj8udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgbGFzdFRva2VuLnJhdyArPSAobGFzdFRva2VuLnJhdy5lbmRzV2l0aCgnXFxuJykgPyAnJyA6ICdcXG4nKSArIHRva2VuLnJhdztcbiAgICAgICAgICBsYXN0VG9rZW4udGV4dCArPSAnXFxuJyArIHRva2VuLnRleHQ7XG4gICAgICAgICAgdGhpcy5pbmxpbmVRdWV1ZS5hdCgtMSkhLnNyYyA9IGxhc3RUb2tlbi50ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZmVuY2VzXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5mZW5jZXMoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBoZWFkaW5nXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5oZWFkaW5nKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gaHJcbiAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmhyKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYmxvY2txdW90ZVxuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuYmxvY2txdW90ZShzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGxpc3RcbiAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmxpc3Qoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBodG1sXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5odG1sKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZGVmXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5kZWYoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBsYXN0VG9rZW4gPSB0b2tlbnMuYXQoLTEpO1xuICAgICAgICBpZiAobGFzdFRva2VuPy50eXBlID09PSAncGFyYWdyYXBoJyB8fCBsYXN0VG9rZW4/LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gKGxhc3RUb2tlbi5yYXcuZW5kc1dpdGgoJ1xcbicpID8gJycgOiAnXFxuJykgKyB0b2tlbi5yYXc7XG4gICAgICAgICAgbGFzdFRva2VuLnRleHQgKz0gJ1xcbicgKyB0b2tlbi5yYXc7XG4gICAgICAgICAgdGhpcy5pbmxpbmVRdWV1ZS5hdCgtMSkhLnNyYyA9IGxhc3RUb2tlbi50ZXh0O1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnRva2Vucy5saW5rc1t0b2tlbi50YWddKSB7XG4gICAgICAgICAgdGhpcy50b2tlbnMubGlua3NbdG9rZW4udGFnXSA9IHtcbiAgICAgICAgICAgIGhyZWY6IHRva2VuLmhyZWYsXG4gICAgICAgICAgICB0aXRsZTogdG9rZW4udGl0bGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHRhYmxlIChnZm0pXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci50YWJsZShzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGxoZWFkaW5nXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5saGVhZGluZyhzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHRvcC1sZXZlbCBwYXJhZ3JhcGhcbiAgICAgIC8vIHByZXZlbnQgcGFyYWdyYXBoIGNvbnN1bWluZyBleHRlbnNpb25zIGJ5IGNsaXBwaW5nICdzcmMnIHRvIGV4dGVuc2lvbiBzdGFydFxuICAgICAgbGV0IGN1dFNyYyA9IHNyYztcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uc3RhcnRCbG9jaykge1xuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IEluZmluaXR5O1xuICAgICAgICBjb25zdCB0ZW1wU3JjID0gc3JjLnNsaWNlKDEpO1xuICAgICAgICBsZXQgdGVtcFN0YXJ0O1xuICAgICAgICB0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goKGdldFN0YXJ0SW5kZXgpID0+IHtcbiAgICAgICAgICB0ZW1wU3RhcnQgPSBnZXRTdGFydEluZGV4LmNhbGwoeyBsZXhlcjogdGhpcyB9LCB0ZW1wU3JjKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHRlbXBTdGFydCA9PT0gJ251bWJlcicgJiYgdGVtcFN0YXJ0ID49IDApIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBNYXRoLm1pbihzdGFydEluZGV4LCB0ZW1wU3RhcnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzdGFydEluZGV4IDwgSW5maW5pdHkgJiYgc3RhcnRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgY3V0U3JjID0gc3JjLnN1YnN0cmluZygwLCBzdGFydEluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0YXRlLnRvcCAmJiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5wYXJhZ3JhcGgoY3V0U3JjKSkpIHtcbiAgICAgICAgY29uc3QgbGFzdFRva2VuID0gdG9rZW5zLmF0KC0xKTtcbiAgICAgICAgaWYgKGxhc3RQYXJhZ3JhcGhDbGlwcGVkICYmIGxhc3RUb2tlbj8udHlwZSA9PT0gJ3BhcmFncmFwaCcpIHtcbiAgICAgICAgICBsYXN0VG9rZW4ucmF3ICs9IChsYXN0VG9rZW4ucmF3LmVuZHNXaXRoKCdcXG4nKSA/ICcnIDogJ1xcbicpICsgdG9rZW4ucmF3O1xuICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9ICdcXG4nICsgdG9rZW4udGV4dDtcbiAgICAgICAgICB0aGlzLmlubGluZVF1ZXVlLnBvcCgpO1xuICAgICAgICAgIHRoaXMuaW5saW5lUXVldWUuYXQoLTEpIS5zcmMgPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFBhcmFncmFwaENsaXBwZWQgPSBjdXRTcmMubGVuZ3RoICE9PSBzcmMubGVuZ3RoO1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gdGV4dFxuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIudGV4dChzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGxhc3RUb2tlbiA9IHRva2Vucy5hdCgtMSk7XG4gICAgICAgIGlmIChsYXN0VG9rZW4/LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gKGxhc3RUb2tlbi5yYXcuZW5kc1dpdGgoJ1xcbicpID8gJycgOiAnXFxuJykgKyB0b2tlbi5yYXc7XG4gICAgICAgICAgbGFzdFRva2VuLnRleHQgKz0gJ1xcbicgKyB0b2tlbi50ZXh0O1xuICAgICAgICAgIHRoaXMuaW5saW5lUXVldWUucG9wKCk7XG4gICAgICAgICAgdGhpcy5pbmxpbmVRdWV1ZS5hdCgtMSkhLnNyYyA9IGxhc3RUb2tlbi50ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNyYykge1xuICAgICAgICBjb25zdCBlcnJNc2cgPSAnSW5maW5pdGUgbG9vcCBvbiBieXRlOiAnICsgc3JjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZS50b3AgPSB0cnVlO1xuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cblxuICBpbmxpbmUoc3JjOiBzdHJpbmcsIHRva2VuczogVG9rZW5bXSA9IFtdKSB7XG4gICAgdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHsgc3JjLCB0b2tlbnMgfSk7XG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIC8qKlxuICAgKiBMZXhpbmcvQ29tcGlsaW5nXG4gICAqL1xuICBpbmxpbmVUb2tlbnMoc3JjOiBzdHJpbmcsIHRva2VuczogVG9rZW5bXSA9IFtdKTogVG9rZW5bXSB7XG4gICAgdGhpcy50b2tlbml6ZXIubGV4ZXIgPSB0aGlzO1xuICAgIC8vIFN0cmluZyB3aXRoIGxpbmtzIG1hc2tlZCB0byBhdm9pZCBpbnRlcmZlcmVuY2Ugd2l0aCBlbSBhbmQgc3Ryb25nXG4gICAgbGV0IG1hc2tlZFNyYyA9IHNyYztcbiAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gTWFzayBvdXQgcmVmbGlua3NcbiAgICBpZiAodGhpcy50b2tlbnMubGlua3MpIHtcbiAgICAgIGNvbnN0IGxpbmtzID0gT2JqZWN0LmtleXModGhpcy50b2tlbnMubGlua3MpO1xuICAgICAgaWYgKGxpbmtzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWMobWFza2VkU3JjKSkgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChsaW5rcy5pbmNsdWRlcyhtYXRjaFswXS5zbGljZShtYXRjaFswXS5sYXN0SW5kZXhPZignWycpICsgMSwgLTEpKSkge1xuICAgICAgICAgICAgbWFza2VkU3JjID0gbWFza2VkU3JjLnNsaWNlKDAsIG1hdGNoLmluZGV4KVxuICAgICAgICAgICAgICArICdbJyArICdhJy5yZXBlYXQobWF0Y2hbMF0ubGVuZ3RoIC0gMikgKyAnXSdcbiAgICAgICAgICAgICAgKyBtYXNrZWRTcmMuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNYXNrIG91dCBlc2NhcGVkIGNoYXJhY3RlcnNcbiAgICB3aGlsZSAoKG1hdGNoID0gdGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWMobWFza2VkU3JjKSkgIT0gbnVsbCkge1xuICAgICAgbWFza2VkU3JjID0gbWFza2VkU3JjLnNsaWNlKDAsIG1hdGNoLmluZGV4KSArICcrKycgKyBtYXNrZWRTcmMuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7XG4gICAgfVxuXG4gICAgLy8gTWFzayBvdXQgb3RoZXIgYmxvY2tzXG4gICAgbGV0IG9mZnNldDtcbiAgICB3aGlsZSAoKG1hdGNoID0gdGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKG1hc2tlZFNyYykpICE9IG51bGwpIHtcbiAgICAgIG9mZnNldCA9IG1hdGNoWzJdID8gbWF0Y2hbMl0ubGVuZ3RoIDogMDtcbiAgICAgIG1hc2tlZFNyYyA9IG1hc2tlZFNyYy5zbGljZSgwLCBtYXRjaC5pbmRleCArIG9mZnNldCkgKyAnWycgKyAnYScucmVwZWF0KG1hdGNoWzBdLmxlbmd0aCAtIG9mZnNldCAtIDIpICsgJ10nICsgbWFza2VkU3JjLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtcbiAgICB9XG5cbiAgICAvLyBNYXNrIG91dCBibG9ja3MgZnJvbSBleHRlbnNpb25zXG4gICAgbWFza2VkU3JjID0gdGhpcy5vcHRpb25zLmhvb2tzPy5lbVN0cm9uZ01hc2s/LmNhbGwoeyBsZXhlcjogdGhpcyB9LCBtYXNrZWRTcmMpID8/IG1hc2tlZFNyYztcblxuICAgIGxldCBrZWVwUHJldkNoYXIgPSBmYWxzZTtcbiAgICBsZXQgcHJldkNoYXIgPSAnJztcbiAgICB3aGlsZSAoc3JjKSB7XG4gICAgICBpZiAoIWtlZXBQcmV2Q2hhcikge1xuICAgICAgICBwcmV2Q2hhciA9ICcnO1xuICAgICAgfVxuICAgICAga2VlcFByZXZDaGFyID0gZmFsc2U7XG5cbiAgICAgIGxldCB0b2tlbjogVG9rZW5zLkdlbmVyaWMgfCB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIGV4dGVuc2lvbnNcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uaW5saW5lPy5zb21lKChleHRUb2tlbml6ZXIpID0+IHtcbiAgICAgICAgaWYgKHRva2VuID0gZXh0VG9rZW5pemVyLmNhbGwoeyBsZXhlcjogdGhpcyB9LCBzcmMsIHRva2VucykpIHtcbiAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZXNjYXBlXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5lc2NhcGUoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0YWdcbiAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLnRhZyhzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGxpbmtcbiAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmxpbmsoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyByZWZsaW5rLCBub2xpbmtcbiAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLnJlZmxpbmsoc3JjLCB0aGlzLnRva2Vucy5saW5rcykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgbGFzdFRva2VuID0gdG9rZW5zLmF0KC0xKTtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICd0ZXh0JyAmJiBsYXN0VG9rZW4/LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gdG9rZW4ucmF3O1xuICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9IHRva2VuLnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBlbSAmIHN0cm9uZ1xuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuZW1TdHJvbmcoc3JjLCBtYXNrZWRTcmMsIHByZXZDaGFyKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBjb2RlXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5jb2Rlc3BhbihzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGJyXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5icihzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGRlbCAoZ2ZtKVxuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuZGVsKHNyYywgbWFza2VkU3JjLCBwcmV2Q2hhcikpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYXV0b2xpbmtcbiAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmF1dG9saW5rKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gdXJsIChnZm0pXG4gICAgICBpZiAoIXRoaXMuc3RhdGUuaW5MaW5rICYmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLnVybChzcmMpKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0ZXh0XG4gICAgICAvLyBwcmV2ZW50IGlubGluZVRleHQgY29uc3VtaW5nIGV4dGVuc2lvbnMgYnkgY2xpcHBpbmcgJ3NyYycgdG8gZXh0ZW5zaW9uIHN0YXJ0XG4gICAgICBsZXQgY3V0U3JjID0gc3JjO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5zdGFydElubGluZSkge1xuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IEluZmluaXR5O1xuICAgICAgICBjb25zdCB0ZW1wU3JjID0gc3JjLnNsaWNlKDEpO1xuICAgICAgICBsZXQgdGVtcFN0YXJ0O1xuICAgICAgICB0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKChnZXRTdGFydEluZGV4KSA9PiB7XG4gICAgICAgICAgdGVtcFN0YXJ0ID0gZ2V0U3RhcnRJbmRleC5jYWxsKHsgbGV4ZXI6IHRoaXMgfSwgdGVtcFNyYyk7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0ZW1wU3RhcnQgPT09ICdudW1iZXInICYmIHRlbXBTdGFydCA+PSAwKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCwgdGVtcFN0YXJ0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc3RhcnRJbmRleCA8IEluZmluaXR5ICYmIHN0YXJ0SW5kZXggPj0gMCkge1xuICAgICAgICAgIGN1dFNyYyA9IHNyYy5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGN1dFNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgaWYgKHRva2VuLnJhdy5zbGljZSgtMSkgIT09ICdfJykgeyAvLyBUcmFjayBwcmV2Q2hhciBiZWZvcmUgc3RyaW5nIG9mIF9fX18gc3RhcnRlZFxuICAgICAgICAgIHByZXZDaGFyID0gdG9rZW4ucmF3LnNsaWNlKC0xKTtcbiAgICAgICAgfVxuICAgICAgICBrZWVwUHJldkNoYXIgPSB0cnVlO1xuICAgICAgICBjb25zdCBsYXN0VG9rZW4gPSB0b2tlbnMuYXQoLTEpO1xuICAgICAgICBpZiAobGFzdFRva2VuPy50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICBsYXN0VG9rZW4ucmF3ICs9IHRva2VuLnJhdztcbiAgICAgICAgICBsYXN0VG9rZW4udGV4dCArPSB0b2tlbi50ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNyYykge1xuICAgICAgICBjb25zdCBlcnJNc2cgPSAnSW5maW5pdGUgbG9vcCBvbiBieXRlOiAnICsgc3JjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxufVxuIiwgImltcG9ydCB7IF9kZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMudHMnO1xuaW1wb3J0IHtcbiAgY2xlYW5VcmwsXG4gIGVzY2FwZUh0bWxFbnRpdGllcyxcbn0gZnJvbSAnLi9oZWxwZXJzLnRzJztcbmltcG9ydCB7IG90aGVyIH0gZnJvbSAnLi9ydWxlcy50cyc7XG5pbXBvcnQgdHlwZSB7IE1hcmtlZE9wdGlvbnMgfSBmcm9tICcuL01hcmtlZE9wdGlvbnMudHMnO1xuaW1wb3J0IHR5cGUgeyBUb2tlbnMgfSBmcm9tICcuL1Rva2Vucy50cyc7XG5pbXBvcnQgdHlwZSB7IF9QYXJzZXIgfSBmcm9tICcuL1BhcnNlci50cyc7XG5cbi8qKlxuICogUmVuZGVyZXJcbiAqL1xuZXhwb3J0IGNsYXNzIF9SZW5kZXJlcjxQYXJzZXJPdXRwdXQgPSBzdHJpbmcsIFJlbmRlcmVyT3V0cHV0ID0gc3RyaW5nPiB7XG4gIG9wdGlvbnM6IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD47XG4gIHBhcnNlciE6IF9QYXJzZXI8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD47IC8vIHNldCBieSB0aGUgcGFyc2VyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBfZGVmYXVsdHM7XG4gIH1cblxuICBzcGFjZSh0b2tlbjogVG9rZW5zLlNwYWNlKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiAnJyBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGNvZGUoeyB0ZXh0LCBsYW5nLCBlc2NhcGVkIH06IFRva2Vucy5Db2RlKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIGNvbnN0IGxhbmdTdHJpbmcgPSAobGFuZyB8fCAnJykubWF0Y2gob3RoZXIubm90U3BhY2VTdGFydCk/LlswXTtcblxuICAgIGNvbnN0IGNvZGUgPSB0ZXh0LnJlcGxhY2Uob3RoZXIuZW5kaW5nTmV3bGluZSwgJycpICsgJ1xcbic7XG5cbiAgICBpZiAoIWxhbmdTdHJpbmcpIHtcbiAgICAgIHJldHVybiAnPHByZT48Y29kZT4nXG4gICAgICAgICsgKGVzY2FwZWQgPyBjb2RlIDogZXNjYXBlSHRtbEVudGl0aWVzKGNvZGUsIHRydWUpKVxuICAgICAgICArICc8L2NvZGU+PC9wcmU+XFxuJyBhcyBSZW5kZXJlck91dHB1dDtcbiAgICB9XG5cbiAgICByZXR1cm4gJzxwcmU+PGNvZGUgY2xhc3M9XCJsYW5ndWFnZS0nXG4gICAgICArIGVzY2FwZUh0bWxFbnRpdGllcyhsYW5nU3RyaW5nKVxuICAgICAgKyAnXCI+J1xuICAgICAgKyAoZXNjYXBlZCA/IGNvZGUgOiBlc2NhcGVIdG1sRW50aXRpZXMoY29kZSwgdHJ1ZSkpXG4gICAgICArICc8L2NvZGU+PC9wcmU+XFxuJyBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGJsb2NrcXVvdGUoeyB0b2tlbnMgfTogVG9rZW5zLkJsb2NrcXVvdGUpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgY29uc3QgYm9keSA9IHRoaXMucGFyc2VyLnBhcnNlKHRva2Vucyk7XG4gICAgcmV0dXJuIGA8YmxvY2txdW90ZT5cXG4ke2JvZHl9PC9ibG9ja3F1b3RlPlxcbmAgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICBodG1sKHsgdGV4dCB9OiBUb2tlbnMuSFRNTCB8IFRva2Vucy5UYWcpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuIHRleHQgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICBkZWYodG9rZW46IFRva2Vucy5EZWYpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuICcnIGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgaGVhZGluZyh7IHRva2VucywgZGVwdGggfTogVG9rZW5zLkhlYWRpbmcpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuIGA8aCR7ZGVwdGh9PiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW5zKX08L2gke2RlcHRofT5cXG5gIGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgaHIodG9rZW46IFRva2Vucy5Icik6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gJzxocj5cXG4nIGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgbGlzdCh0b2tlbjogVG9rZW5zLkxpc3QpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgY29uc3Qgb3JkZXJlZCA9IHRva2VuLm9yZGVyZWQ7XG4gICAgY29uc3Qgc3RhcnQgPSB0b2tlbi5zdGFydDtcblxuICAgIGxldCBib2R5ID0gJyc7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0b2tlbi5pdGVtcy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgaXRlbSA9IHRva2VuLml0ZW1zW2pdO1xuICAgICAgYm9keSArPSB0aGlzLmxpc3RpdGVtKGl0ZW0pO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUgPSBvcmRlcmVkID8gJ29sJyA6ICd1bCc7XG4gICAgY29uc3Qgc3RhcnRBdHRyID0gKG9yZGVyZWQgJiYgc3RhcnQgIT09IDEpID8gKCcgc3RhcnQ9XCInICsgc3RhcnQgKyAnXCInKSA6ICcnO1xuICAgIHJldHVybiAnPCcgKyB0eXBlICsgc3RhcnRBdHRyICsgJz5cXG4nICsgYm9keSArICc8LycgKyB0eXBlICsgJz5cXG4nIGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgbGlzdGl0ZW0oaXRlbTogVG9rZW5zLkxpc3RJdGVtKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiBgPGxpPiR7dGhpcy5wYXJzZXIucGFyc2UoaXRlbS50b2tlbnMpfTwvbGk+XFxuYCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGNoZWNrYm94KHsgY2hlY2tlZCB9OiBUb2tlbnMuQ2hlY2tib3gpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuICc8aW5wdXQgJ1xuICAgICAgKyAoY2hlY2tlZCA/ICdjaGVja2VkPVwiXCIgJyA6ICcnKVxuICAgICAgKyAnZGlzYWJsZWQ9XCJcIiB0eXBlPVwiY2hlY2tib3hcIj4gJyBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIHBhcmFncmFwaCh7IHRva2VucyB9OiBUb2tlbnMuUGFyYWdyYXBoKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiBgPHA+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpfTwvcD5cXG5gIGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgdGFibGUodG9rZW46IFRva2Vucy5UYWJsZSk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICBsZXQgaGVhZGVyID0gJyc7XG5cbiAgICAvLyBoZWFkZXJcbiAgICBsZXQgY2VsbCA9ICcnO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG9rZW4uaGVhZGVyLmxlbmd0aDsgaisrKSB7XG4gICAgICBjZWxsICs9IHRoaXMudGFibGVjZWxsKHRva2VuLmhlYWRlcltqXSk7XG4gICAgfVxuICAgIGhlYWRlciArPSB0aGlzLnRhYmxlcm93KHsgdGV4dDogY2VsbCBhcyBQYXJzZXJPdXRwdXQgfSk7XG5cbiAgICBsZXQgYm9keSA9ICcnO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG9rZW4ucm93cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3Qgcm93ID0gdG9rZW4ucm93c1tqXTtcblxuICAgICAgY2VsbCA9ICcnO1xuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCByb3cubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgY2VsbCArPSB0aGlzLnRhYmxlY2VsbChyb3dba10pO1xuICAgICAgfVxuXG4gICAgICBib2R5ICs9IHRoaXMudGFibGVyb3coeyB0ZXh0OiBjZWxsIGFzIFBhcnNlck91dHB1dCB9KTtcbiAgICB9XG4gICAgaWYgKGJvZHkpIGJvZHkgPSBgPHRib2R5PiR7Ym9keX08L3Rib2R5PmA7XG5cbiAgICByZXR1cm4gJzx0YWJsZT5cXG4nXG4gICAgICArICc8dGhlYWQ+XFxuJ1xuICAgICAgKyBoZWFkZXJcbiAgICAgICsgJzwvdGhlYWQ+XFxuJ1xuICAgICAgKyBib2R5XG4gICAgICArICc8L3RhYmxlPlxcbicgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICB0YWJsZXJvdyh7IHRleHQgfTogVG9rZW5zLlRhYmxlUm93PFBhcnNlck91dHB1dD4pOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuIGA8dHI+XFxuJHt0ZXh0fTwvdHI+XFxuYCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIHRhYmxlY2VsbCh0b2tlbjogVG9rZW5zLlRhYmxlQ2VsbCk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW4udG9rZW5zKTtcbiAgICBjb25zdCB0eXBlID0gdG9rZW4uaGVhZGVyID8gJ3RoJyA6ICd0ZCc7XG4gICAgY29uc3QgdGFnID0gdG9rZW4uYWxpZ25cbiAgICAgID8gYDwke3R5cGV9IGFsaWduPVwiJHt0b2tlbi5hbGlnbn1cIj5gXG4gICAgICA6IGA8JHt0eXBlfT5gO1xuICAgIHJldHVybiB0YWcgKyBjb250ZW50ICsgYDwvJHt0eXBlfT5cXG5gIGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIHNwYW4gbGV2ZWwgcmVuZGVyZXJcbiAgICovXG4gIHN0cm9uZyh7IHRva2VucyB9OiBUb2tlbnMuU3Ryb25nKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiBgPHN0cm9uZz4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2Vucyl9PC9zdHJvbmc+YCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGVtKHsgdG9rZW5zIH06IFRva2Vucy5FbSk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gYDxlbT4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2Vucyl9PC9lbT5gIGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgY29kZXNwYW4oeyB0ZXh0IH06IFRva2Vucy5Db2Rlc3Bhbik6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gYDxjb2RlPiR7ZXNjYXBlSHRtbEVudGl0aWVzKHRleHQsIHRydWUpfTwvY29kZT5gIGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgYnIodG9rZW46IFRva2Vucy5Ccik6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gJzxicj4nIGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgZGVsKHsgdG9rZW5zIH06IFRva2Vucy5EZWwpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuIGA8ZGVsPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW5zKX08L2RlbD5gIGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgbGluayh7IGhyZWYsIHRpdGxlLCB0b2tlbnMgfTogVG9rZW5zLkxpbmspOiBSZW5kZXJlck91dHB1dCB7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2VucykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGNsZWFuSHJlZiA9IGNsZWFuVXJsKGhyZWYpO1xuICAgIGlmIChjbGVhbkhyZWYgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0ZXh0IGFzIFJlbmRlcmVyT3V0cHV0O1xuICAgIH1cbiAgICBocmVmID0gY2xlYW5IcmVmO1xuICAgIGxldCBvdXQgPSAnPGEgaHJlZj1cIicgKyBocmVmICsgJ1wiJztcbiAgICBpZiAodGl0bGUpIHtcbiAgICAgIG91dCArPSAnIHRpdGxlPVwiJyArIChlc2NhcGVIdG1sRW50aXRpZXModGl0bGUpKSArICdcIic7XG4gICAgfVxuICAgIG91dCArPSAnPicgKyB0ZXh0ICsgJzwvYT4nO1xuICAgIHJldHVybiBvdXQgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICBpbWFnZSh7IGhyZWYsIHRpdGxlLCB0ZXh0LCB0b2tlbnMgfTogVG9rZW5zLkltYWdlKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIGlmICh0b2tlbnMpIHtcbiAgICAgIHRleHQgPSB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMsIHRoaXMucGFyc2VyLnRleHRSZW5kZXJlcikgYXMgc3RyaW5nO1xuICAgIH1cbiAgICBjb25zdCBjbGVhbkhyZWYgPSBjbGVhblVybChocmVmKTtcbiAgICBpZiAoY2xlYW5IcmVmID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZXNjYXBlSHRtbEVudGl0aWVzKHRleHQpIGFzIFJlbmRlcmVyT3V0cHV0O1xuICAgIH1cbiAgICBocmVmID0gY2xlYW5IcmVmO1xuXG4gICAgbGV0IG91dCA9IGA8aW1nIHNyYz1cIiR7aHJlZn1cIiBhbHQ9XCIke2VzY2FwZUh0bWxFbnRpdGllcyh0ZXh0KX1cImA7XG4gICAgaWYgKHRpdGxlKSB7XG4gICAgICBvdXQgKz0gYCB0aXRsZT1cIiR7ZXNjYXBlSHRtbEVudGl0aWVzKHRpdGxlKX1cImA7XG4gICAgfVxuICAgIG91dCArPSAnPic7XG4gICAgcmV0dXJuIG91dCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIHRleHQodG9rZW46IFRva2Vucy5UZXh0IHwgVG9rZW5zLkVzY2FwZSk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gJ3Rva2VucycgaW4gdG9rZW4gJiYgdG9rZW4udG9rZW5zXG4gICAgICA/IHRoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2VuLnRva2VucykgYXMgdW5rbm93biBhcyBSZW5kZXJlck91dHB1dFxuICAgICAgOiAoJ2VzY2FwZWQnIGluIHRva2VuICYmIHRva2VuLmVzY2FwZWQgPyB0b2tlbi50ZXh0IGFzIFJlbmRlcmVyT3V0cHV0IDogZXNjYXBlSHRtbEVudGl0aWVzKHRva2VuLnRleHQpIGFzIFJlbmRlcmVyT3V0cHV0KTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgVG9rZW5zIH0gZnJvbSAnLi9Ub2tlbnMudHMnO1xuXG4vKipcbiAqIFRleHRSZW5kZXJlclxuICogcmV0dXJucyBvbmx5IHRoZSB0ZXh0dWFsIHBhcnQgb2YgdGhlIHRva2VuXG4gKi9cbmV4cG9ydCBjbGFzcyBfVGV4dFJlbmRlcmVyPFJlbmRlcmVyT3V0cHV0ID0gc3RyaW5nPiB7XG4gIC8vIG5vIG5lZWQgZm9yIGJsb2NrIGxldmVsIHJlbmRlcmVyc1xuICBzdHJvbmcoeyB0ZXh0IH06IFRva2Vucy5TdHJvbmcpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuIHRleHQgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICBlbSh7IHRleHQgfTogVG9rZW5zLkVtKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiB0ZXh0IGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgY29kZXNwYW4oeyB0ZXh0IH06IFRva2Vucy5Db2Rlc3Bhbik6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gdGV4dCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGRlbCh7IHRleHQgfTogVG9rZW5zLkRlbCk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gdGV4dCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGh0bWwoeyB0ZXh0IH06IFRva2Vucy5IVE1MIHwgVG9rZW5zLlRhZyk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gdGV4dCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIHRleHQoeyB0ZXh0IH06IFRva2Vucy5UZXh0IHwgVG9rZW5zLkVzY2FwZSB8IFRva2Vucy5UYWcpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuIHRleHQgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICBsaW5rKHsgdGV4dCB9OiBUb2tlbnMuTGluayk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gJycgKyB0ZXh0IGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgaW1hZ2UoeyB0ZXh0IH06IFRva2Vucy5JbWFnZSk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gJycgKyB0ZXh0IGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgYnIoKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiAnJyBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGNoZWNrYm94KHsgcmF3IH06IFRva2Vucy5DaGVja2JveCk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gcmF3IGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgX1JlbmRlcmVyIH0gZnJvbSAnLi9SZW5kZXJlci50cyc7XG5pbXBvcnQgeyBfVGV4dFJlbmRlcmVyIH0gZnJvbSAnLi9UZXh0UmVuZGVyZXIudHMnO1xuaW1wb3J0IHsgX2RlZmF1bHRzIH0gZnJvbSAnLi9kZWZhdWx0cy50cyc7XG5pbXBvcnQgdHlwZSB7IE1hcmtlZFRva2VuLCBUb2tlbiwgVG9rZW5zIH0gZnJvbSAnLi9Ub2tlbnMudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXJrZWRPcHRpb25zIH0gZnJvbSAnLi9NYXJrZWRPcHRpb25zLnRzJztcblxuLyoqXG4gKiBQYXJzaW5nICYgQ29tcGlsaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBfUGFyc2VyPFBhcnNlck91dHB1dCA9IHN0cmluZywgUmVuZGVyZXJPdXRwdXQgPSBzdHJpbmc+IHtcbiAgb3B0aW9uczogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PjtcbiAgcmVuZGVyZXI6IF9SZW5kZXJlcjxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PjtcbiAgdGV4dFJlbmRlcmVyOiBfVGV4dFJlbmRlcmVyPFJlbmRlcmVyT3V0cHV0PjtcbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IF9kZWZhdWx0cztcbiAgICB0aGlzLm9wdGlvbnMucmVuZGVyZXIgPSB0aGlzLm9wdGlvbnMucmVuZGVyZXIgfHwgbmV3IF9SZW5kZXJlcjxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PigpO1xuICAgIHRoaXMucmVuZGVyZXIgPSB0aGlzLm9wdGlvbnMucmVuZGVyZXI7XG4gICAgdGhpcy5yZW5kZXJlci5vcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMucmVuZGVyZXIucGFyc2VyID0gdGhpcztcbiAgICB0aGlzLnRleHRSZW5kZXJlciA9IG5ldyBfVGV4dFJlbmRlcmVyPFJlbmRlcmVyT3V0cHV0PigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBQYXJzZSBNZXRob2RcbiAgICovXG4gIHN0YXRpYyBwYXJzZTxQYXJzZXJPdXRwdXQgPSBzdHJpbmcsIFJlbmRlcmVyT3V0cHV0ID0gc3RyaW5nPih0b2tlbnM6IFRva2VuW10sIG9wdGlvbnM/OiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+KSB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IF9QYXJzZXI8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4ob3B0aW9ucyk7XG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZSh0b2tlbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBQYXJzZSBJbmxpbmUgTWV0aG9kXG4gICAqL1xuICBzdGF0aWMgcGFyc2VJbmxpbmU8UGFyc2VyT3V0cHV0ID0gc3RyaW5nLCBSZW5kZXJlck91dHB1dCA9IHN0cmluZz4odG9rZW5zOiBUb2tlbltdLCBvcHRpb25zPzogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0Pikge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBfUGFyc2VyPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+KG9wdGlvbnMpO1xuICAgIHJldHVybiBwYXJzZXIucGFyc2VJbmxpbmUodG9rZW5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBMb29wXG4gICAqL1xuICBwYXJzZSh0b2tlbnM6IFRva2VuW10pOiBQYXJzZXJPdXRwdXQge1xuICAgIHRoaXMucmVuZGVyZXIucGFyc2VyID0gdGhpcztcbiAgICBsZXQgb3V0ID0gJyc7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYW55VG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICAgIC8vIFJ1biBhbnkgcmVuZGVyZXIgZXh0ZW5zaW9uc1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5yZW5kZXJlcnM/LlthbnlUb2tlbi50eXBlXSkge1xuICAgICAgICBjb25zdCBnZW5lcmljVG9rZW4gPSBhbnlUb2tlbiBhcyBUb2tlbnMuR2VuZXJpYztcbiAgICAgICAgY29uc3QgcmV0ID0gdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2dlbmVyaWNUb2tlbi50eXBlXS5jYWxsKHsgcGFyc2VyOiB0aGlzIH0sIGdlbmVyaWNUb2tlbik7XG4gICAgICAgIGlmIChyZXQgIT09IGZhbHNlIHx8ICFbJ3NwYWNlJywgJ2hyJywgJ2hlYWRpbmcnLCAnY29kZScsICd0YWJsZScsICdibG9ja3F1b3RlJywgJ2xpc3QnLCAnaHRtbCcsICdkZWYnLCAncGFyYWdyYXBoJywgJ3RleHQnXS5pbmNsdWRlcyhnZW5lcmljVG9rZW4udHlwZSkpIHtcbiAgICAgICAgICBvdXQgKz0gcmV0IHx8ICcnO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuID0gYW55VG9rZW4gYXMgTWFya2VkVG9rZW47XG5cbiAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICBjYXNlICdzcGFjZSc6IHtcbiAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5zcGFjZSh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnaHInOiB7XG4gICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuaHIodG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2hlYWRpbmcnOiB7XG4gICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuaGVhZGluZyh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnY29kZSc6IHtcbiAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5jb2RlKHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICd0YWJsZSc6IHtcbiAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci50YWJsZSh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnYmxvY2txdW90ZSc6IHtcbiAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdsaXN0Jzoge1xuICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmxpc3QodG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2NoZWNrYm94Jzoge1xuICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmNoZWNrYm94KHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdodG1sJzoge1xuICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmh0bWwodG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2RlZic6IHtcbiAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5kZWYodG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3BhcmFncmFwaCc6IHtcbiAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3RleHQnOiB7XG4gICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIudGV4dCh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc3QgZXJyTXNnID0gJ1Rva2VuIHdpdGggXCInICsgdG9rZW4udHlwZSArICdcIiB0eXBlIHdhcyBub3QgZm91bmQuJztcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpO1xuICAgICAgICAgICAgcmV0dXJuICcnIGFzIFBhcnNlck91dHB1dDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dCBhcyBQYXJzZXJPdXRwdXQ7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgSW5saW5lIFRva2Vuc1xuICAgKi9cbiAgcGFyc2VJbmxpbmUodG9rZW5zOiBUb2tlbltdLCByZW5kZXJlcjogX1JlbmRlcmVyPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+IHwgX1RleHRSZW5kZXJlcjxSZW5kZXJlck91dHB1dD4gPSB0aGlzLnJlbmRlcmVyKTogUGFyc2VyT3V0cHV0IHtcbiAgICB0aGlzLnJlbmRlcmVyLnBhcnNlciA9IHRoaXM7XG4gICAgbGV0IG91dCA9ICcnO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGFueVRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgICAvLyBSdW4gYW55IHJlbmRlcmVyIGV4dGVuc2lvbnNcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8ucmVuZGVyZXJzPy5bYW55VG9rZW4udHlwZV0pIHtcbiAgICAgICAgY29uc3QgcmV0ID0gdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2FueVRva2VuLnR5cGVdLmNhbGwoeyBwYXJzZXI6IHRoaXMgfSwgYW55VG9rZW4pO1xuICAgICAgICBpZiAocmV0ICE9PSBmYWxzZSB8fCAhWydlc2NhcGUnLCAnaHRtbCcsICdsaW5rJywgJ2ltYWdlJywgJ3N0cm9uZycsICdlbScsICdjb2Rlc3BhbicsICdicicsICdkZWwnLCAndGV4dCddLmluY2x1ZGVzKGFueVRva2VuLnR5cGUpKSB7XG4gICAgICAgICAgb3V0ICs9IHJldCB8fCAnJztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0b2tlbiA9IGFueVRva2VuIGFzIE1hcmtlZFRva2VuO1xuXG4gICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnZXNjYXBlJzoge1xuICAgICAgICAgIG91dCArPSByZW5kZXJlci50ZXh0KHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdodG1sJzoge1xuICAgICAgICAgIG91dCArPSByZW5kZXJlci5odG1sKHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdsaW5rJzoge1xuICAgICAgICAgIG91dCArPSByZW5kZXJlci5saW5rKHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdpbWFnZSc6IHtcbiAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuaW1hZ2UodG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2NoZWNrYm94Jzoge1xuICAgICAgICAgIG91dCArPSByZW5kZXJlci5jaGVja2JveCh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnc3Ryb25nJzoge1xuICAgICAgICAgIG91dCArPSByZW5kZXJlci5zdHJvbmcodG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2VtJzoge1xuICAgICAgICAgIG91dCArPSByZW5kZXJlci5lbSh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnY29kZXNwYW4nOiB7XG4gICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLmNvZGVzcGFuKHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdicic6IHtcbiAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuYnIodG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2RlbCc6IHtcbiAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuZGVsKHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgICAgIG91dCArPSByZW5kZXJlci50ZXh0KHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc3QgZXJyTXNnID0gJ1Rva2VuIHdpdGggXCInICsgdG9rZW4udHlwZSArICdcIiB0eXBlIHdhcyBub3QgZm91bmQuJztcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpO1xuICAgICAgICAgICAgcmV0dXJuICcnIGFzIFBhcnNlck91dHB1dDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQgYXMgUGFyc2VyT3V0cHV0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgX2RlZmF1bHRzIH0gZnJvbSAnLi9kZWZhdWx0cy50cyc7XG5pbXBvcnQgeyBfTGV4ZXIgfSBmcm9tICcuL0xleGVyLnRzJztcbmltcG9ydCB7IF9QYXJzZXIgfSBmcm9tICcuL1BhcnNlci50cyc7XG5pbXBvcnQgdHlwZSB7IE1hcmtlZE9wdGlvbnMgfSBmcm9tICcuL01hcmtlZE9wdGlvbnMudHMnO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiwgVG9rZW5zTGlzdCB9IGZyb20gJy4vVG9rZW5zLnRzJztcblxuZXhwb3J0IGNsYXNzIF9Ib29rczxQYXJzZXJPdXRwdXQgPSBzdHJpbmcsIFJlbmRlcmVyT3V0cHV0ID0gc3RyaW5nPiB7XG4gIG9wdGlvbnM6IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD47XG4gIGJsb2NrPzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0Pikge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgX2RlZmF1bHRzO1xuICB9XG5cbiAgc3RhdGljIHBhc3NUaHJvdWdoSG9va3MgPSBuZXcgU2V0KFtcbiAgICAncHJlcHJvY2VzcycsXG4gICAgJ3Bvc3Rwcm9jZXNzJyxcbiAgICAncHJvY2Vzc0FsbFRva2VucycsXG4gICAgJ2VtU3Ryb25nTWFzaycsXG4gIF0pO1xuXG4gIHN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzUmVzcGVjdEFzeW5jID0gbmV3IFNldChbXG4gICAgJ3ByZXByb2Nlc3MnLFxuICAgICdwb3N0cHJvY2VzcycsXG4gICAgJ3Byb2Nlc3NBbGxUb2tlbnMnLFxuICBdKTtcblxuICAvKipcbiAgICogUHJvY2VzcyBtYXJrZG93biBiZWZvcmUgbWFya2VkXG4gICAqL1xuICBwcmVwcm9jZXNzKG1hcmtkb3duOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbWFya2Rvd247XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBIVE1MIGFmdGVyIG1hcmtlZCBpcyBmaW5pc2hlZFxuICAgKi9cbiAgcG9zdHByb2Nlc3MoaHRtbDogUGFyc2VyT3V0cHV0KSB7XG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhbGwgdG9rZW5zIGJlZm9yZSB3YWxrIHRva2Vuc1xuICAgKi9cbiAgcHJvY2Vzc0FsbFRva2Vucyh0b2tlbnM6IFRva2VuW10gfCBUb2tlbnNMaXN0KSB7XG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXNrIGNvbnRlbnRzIHRoYXQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyBlbS9zdHJvbmcgZGVsaW1pdGVyc1xuICAgKi9cbiAgZW1TdHJvbmdNYXNrKHNyYzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHNyYztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlIGZ1bmN0aW9uIHRvIHRva2VuaXplIG1hcmtkb3duXG4gICAqL1xuICBwcm92aWRlTGV4ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2sgPyBfTGV4ZXIubGV4IDogX0xleGVyLmxleElubGluZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlIGZ1bmN0aW9uIHRvIHBhcnNlIHRva2Vuc1xuICAgKi9cbiAgcHJvdmlkZVBhcnNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5ibG9jayA/IF9QYXJzZXIucGFyc2U8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4gOiBfUGFyc2VyLnBhcnNlSW5saW5lPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgX2dldERlZmF1bHRzIH0gZnJvbSAnLi9kZWZhdWx0cy50cyc7XG5pbXBvcnQgeyBfTGV4ZXIgfSBmcm9tICcuL0xleGVyLnRzJztcbmltcG9ydCB7IF9QYXJzZXIgfSBmcm9tICcuL1BhcnNlci50cyc7XG5pbXBvcnQgeyBfSG9va3MgfSBmcm9tICcuL0hvb2tzLnRzJztcbmltcG9ydCB7IF9SZW5kZXJlciB9IGZyb20gJy4vUmVuZGVyZXIudHMnO1xuaW1wb3J0IHsgX1Rva2VuaXplciB9IGZyb20gJy4vVG9rZW5pemVyLnRzJztcbmltcG9ydCB7IF9UZXh0UmVuZGVyZXIgfSBmcm9tICcuL1RleHRSZW5kZXJlci50cyc7XG5pbXBvcnQgeyBlc2NhcGVIdG1sRW50aXRpZXMgfSBmcm9tICcuL2hlbHBlcnMudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXJrZWRFeHRlbnNpb24sIE1hcmtlZE9wdGlvbnMgfSBmcm9tICcuL01hcmtlZE9wdGlvbnMudHMnO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiwgVG9rZW5zLCBUb2tlbnNMaXN0IH0gZnJvbSAnLi9Ub2tlbnMudHMnO1xuXG5leHBvcnQgdHlwZSBNYXliZVByb21pc2UgPSB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxudHlwZSBVbmtub3duRnVuY3Rpb24gPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duO1xudHlwZSBHZW5lcmljUmVuZGVyZXJGdW5jdGlvbiA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHN0cmluZyB8IGZhbHNlO1xuXG5leHBvcnQgY2xhc3MgTWFya2VkPFBhcnNlck91dHB1dCA9IHN0cmluZywgUmVuZGVyZXJPdXRwdXQgPSBzdHJpbmc+IHtcbiAgZGVmYXVsdHMgPSBfZ2V0RGVmYXVsdHM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4oKTtcbiAgb3B0aW9ucyA9IHRoaXMuc2V0T3B0aW9ucztcblxuICBwYXJzZSA9IHRoaXMucGFyc2VNYXJrZG93bih0cnVlKTtcbiAgcGFyc2VJbmxpbmUgPSB0aGlzLnBhcnNlTWFya2Rvd24oZmFsc2UpO1xuXG4gIFBhcnNlciA9IF9QYXJzZXI8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD47XG4gIFJlbmRlcmVyID0gX1JlbmRlcmVyPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+O1xuICBUZXh0UmVuZGVyZXIgPSBfVGV4dFJlbmRlcmVyPFJlbmRlcmVyT3V0cHV0PjtcbiAgTGV4ZXIgPSBfTGV4ZXI7XG4gIFRva2VuaXplciA9IF9Ub2tlbml6ZXI8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD47XG4gIEhvb2tzID0gX0hvb2tzPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+O1xuXG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IE1hcmtlZEV4dGVuc2lvbjxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PltdKSB7XG4gICAgdGhpcy51c2UoLi4uYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIGNhbGxiYWNrIGZvciBldmVyeSB0b2tlblxuICAgKi9cbiAgd2Fsa1Rva2Vucyh0b2tlbnM6IFRva2VuW10gfCBUb2tlbnNMaXN0LCBjYWxsYmFjazogKHRva2VuOiBUb2tlbikgPT4gTWF5YmVQcm9taXNlIHwgTWF5YmVQcm9taXNlW10pIHtcbiAgICBsZXQgdmFsdWVzOiBNYXliZVByb21pc2VbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KGNhbGxiYWNrLmNhbGwodGhpcywgdG9rZW4pKTtcbiAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICBjYXNlICd0YWJsZSc6IHtcbiAgICAgICAgICBjb25zdCB0YWJsZVRva2VuID0gdG9rZW4gYXMgVG9rZW5zLlRhYmxlO1xuICAgICAgICAgIGZvciAoY29uc3QgY2VsbCBvZiB0YWJsZVRva2VuLmhlYWRlcikge1xuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoY2VsbC50b2tlbnMsIGNhbGxiYWNrKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHRhYmxlVG9rZW4ucm93cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjZWxsIG9mIHJvdykge1xuICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhjZWxsLnRva2VucywgY2FsbGJhY2spKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbGlzdCc6IHtcbiAgICAgICAgICBjb25zdCBsaXN0VG9rZW4gPSB0b2tlbiBhcyBUb2tlbnMuTGlzdDtcbiAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhsaXN0VG9rZW4uaXRlbXMsIGNhbGxiYWNrKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnN0IGdlbmVyaWNUb2tlbiA9IHRva2VuIGFzIFRva2Vucy5HZW5lcmljO1xuICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnM/LmNoaWxkVG9rZW5zPy5bZ2VuZXJpY1Rva2VuLnR5cGVdKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbZ2VuZXJpY1Rva2VuLnR5cGVdLmZvckVhY2goKGNoaWxkVG9rZW5zKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRva2VucyA9IGdlbmVyaWNUb2tlbltjaGlsZFRva2Vuc10uZmxhdChJbmZpbml0eSkgYXMgVG9rZW5bXSB8IFRva2Vuc0xpc3Q7XG4gICAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQodGhpcy53YWxrVG9rZW5zKHRva2VucywgY2FsbGJhY2spKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZ2VuZXJpY1Rva2VuLnRva2Vucykge1xuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoZ2VuZXJpY1Rva2VuLnRva2VucywgY2FsbGJhY2spKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIHVzZSguLi5hcmdzOiBNYXJrZWRFeHRlbnNpb248UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD5bXSkge1xuICAgIGNvbnN0IGV4dGVuc2lvbnM6IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD5bJ2V4dGVuc2lvbnMnXSA9IHRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucyB8fCB7IHJlbmRlcmVyczoge30sIGNoaWxkVG9rZW5zOiB7fSB9O1xuXG4gICAgYXJncy5mb3JFYWNoKChwYWNrKSA9PiB7XG4gICAgICAvLyBjb3B5IG9wdGlvbnMgdG8gbmV3IG9iamVjdFxuICAgICAgY29uc3Qgb3B0cyA9IHsgLi4ucGFjayB9IGFzIE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD47XG5cbiAgICAgIC8vIHNldCBhc3luYyB0byB0cnVlIGlmIGl0IHdhcyBzZXQgdG8gdHJ1ZSBiZWZvcmVcbiAgICAgIG9wdHMuYXN5bmMgPSB0aGlzLmRlZmF1bHRzLmFzeW5jIHx8IG9wdHMuYXN5bmMgfHwgZmFsc2U7XG5cbiAgICAgIC8vID09LS0gUGFyc2UgXCJhZGRvblwiIGV4dGVuc2lvbnMgLS09PSAvL1xuICAgICAgaWYgKHBhY2suZXh0ZW5zaW9ucykge1xuICAgICAgICBwYWNrLmV4dGVuc2lvbnMuZm9yRWFjaCgoZXh0KSA9PiB7XG4gICAgICAgICAgaWYgKCFleHQubmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHRlbnNpb24gbmFtZSByZXF1aXJlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ3JlbmRlcmVyJyBpbiBleHQpIHsgLy8gUmVuZGVyZXIgZXh0ZW5zaW9uc1xuICAgICAgICAgICAgY29uc3QgcHJldlJlbmRlcmVyID0gZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZXh0Lm5hbWVdO1xuICAgICAgICAgICAgaWYgKHByZXZSZW5kZXJlcikge1xuICAgICAgICAgICAgICAvLyBSZXBsYWNlIGV4dGVuc2lvbiB3aXRoIGZ1bmMgdG8gcnVuIG5ldyBleHRlbnNpb24gYnV0IGZhbGwgYmFjayBpZiBmYWxzZVxuICAgICAgICAgICAgICBleHRlbnNpb25zLnJlbmRlcmVyc1tleHQubmFtZV0gPSBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJldCA9IGV4dC5yZW5kZXJlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgcmV0ID0gcHJldlJlbmRlcmVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZXh0Lm5hbWVdID0gZXh0LnJlbmRlcmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ3Rva2VuaXplcicgaW4gZXh0KSB7IC8vIFRva2VuaXplciBFeHRlbnNpb25zXG4gICAgICAgICAgICBpZiAoIWV4dC5sZXZlbCB8fCAoZXh0LmxldmVsICE9PSAnYmxvY2snICYmIGV4dC5sZXZlbCAhPT0gJ2lubGluZScpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleHRMZXZlbCA9IGV4dGVuc2lvbnNbZXh0LmxldmVsXTtcbiAgICAgICAgICAgIGlmIChleHRMZXZlbCkge1xuICAgICAgICAgICAgICBleHRMZXZlbC51bnNoaWZ0KGV4dC50b2tlbml6ZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXh0ZW5zaW9uc1tleHQubGV2ZWxdID0gW2V4dC50b2tlbml6ZXJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4dC5zdGFydCkgeyAvLyBGdW5jdGlvbiB0byBjaGVjayBmb3Igc3RhcnQgb2YgdG9rZW5cbiAgICAgICAgICAgICAgaWYgKGV4dC5sZXZlbCA9PT0gJ2Jsb2NrJykge1xuICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zLnN0YXJ0QmxvY2spIHtcbiAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMuc3RhcnRCbG9jay5wdXNoKGV4dC5zdGFydCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMuc3RhcnRCbG9jayA9IFtleHQuc3RhcnRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHQubGV2ZWwgPT09ICdpbmxpbmUnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3RhcnRJbmxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMuc3RhcnRJbmxpbmUucHVzaChleHQuc3RhcnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnN0YXJ0SW5saW5lID0gW2V4dC5zdGFydF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgnY2hpbGRUb2tlbnMnIGluIGV4dCAmJiBleHQuY2hpbGRUb2tlbnMpIHsgLy8gQ2hpbGQgdG9rZW5zIHRvIGJlIHZpc2l0ZWQgYnkgd2Fsa1Rva2Vuc1xuICAgICAgICAgICAgZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1tleHQubmFtZV0gPSBleHQuY2hpbGRUb2tlbnM7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgb3B0cy5leHRlbnNpb25zID0gZXh0ZW5zaW9ucztcbiAgICAgIH1cblxuICAgICAgLy8gPT0tLSBQYXJzZSBcIm92ZXJ3cml0ZVwiIGV4dGVuc2lvbnMgLS09PSAvL1xuICAgICAgaWYgKHBhY2sucmVuZGVyZXIpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyZXIgPSB0aGlzLmRlZmF1bHRzLnJlbmRlcmVyIHx8IG5ldyBfUmVuZGVyZXI8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4odGhpcy5kZWZhdWx0cyk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBwYWNrLnJlbmRlcmVyKSB7XG4gICAgICAgICAgaWYgKCEocHJvcCBpbiByZW5kZXJlcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVuZGVyZXIgJyR7cHJvcH0nIGRvZXMgbm90IGV4aXN0YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChbJ29wdGlvbnMnLCAncGFyc2VyJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBvcHRpb25zIHByb3BlcnR5XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVuZGVyZXJQcm9wID0gcHJvcCBhcyBFeGNsdWRlPGtleW9mIF9SZW5kZXJlcjxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PiwgJ29wdGlvbnMnIHwgJ3BhcnNlcic+O1xuICAgICAgICAgIGNvbnN0IHJlbmRlcmVyRnVuYyA9IHBhY2sucmVuZGVyZXJbcmVuZGVyZXJQcm9wXSBhcyBHZW5lcmljUmVuZGVyZXJGdW5jdGlvbjtcbiAgICAgICAgICBjb25zdCBwcmV2UmVuZGVyZXIgPSByZW5kZXJlcltyZW5kZXJlclByb3BdIGFzIEdlbmVyaWNSZW5kZXJlckZ1bmN0aW9uO1xuICAgICAgICAgIC8vIFJlcGxhY2UgcmVuZGVyZXIgd2l0aCBmdW5jIHRvIHJ1biBleHRlbnNpb24sIGJ1dCBmYWxsIGJhY2sgaWYgZmFsc2VcbiAgICAgICAgICByZW5kZXJlcltyZW5kZXJlclByb3BdID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJldCA9IHJlbmRlcmVyRnVuYy5hcHBseShyZW5kZXJlciwgYXJncyk7XG4gICAgICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICByZXQgPSBwcmV2UmVuZGVyZXIuYXBwbHkocmVuZGVyZXIsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChyZXQgfHwgJycpIGFzIFJlbmRlcmVyT3V0cHV0O1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgfVxuICAgICAgaWYgKHBhY2sudG9rZW5pemVyKSB7XG4gICAgICAgIGNvbnN0IHRva2VuaXplciA9IHRoaXMuZGVmYXVsdHMudG9rZW5pemVyIHx8IG5ldyBfVG9rZW5pemVyPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+KHRoaXMuZGVmYXVsdHMpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gcGFjay50b2tlbml6ZXIpIHtcbiAgICAgICAgICBpZiAoIShwcm9wIGluIHRva2VuaXplcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdG9rZW5pemVyICcke3Byb3B9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoWydvcHRpb25zJywgJ3J1bGVzJywgJ2xleGVyJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBvcHRpb25zLCBydWxlcywgYW5kIGxleGVyIHByb3BlcnRpZXNcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0b2tlbml6ZXJQcm9wID0gcHJvcCBhcyBFeGNsdWRlPGtleW9mIF9Ub2tlbml6ZXI8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4sICdvcHRpb25zJyB8ICdydWxlcycgfCAnbGV4ZXInPjtcbiAgICAgICAgICBjb25zdCB0b2tlbml6ZXJGdW5jID0gcGFjay50b2tlbml6ZXJbdG9rZW5pemVyUHJvcF0gYXMgVW5rbm93bkZ1bmN0aW9uO1xuICAgICAgICAgIGNvbnN0IHByZXZUb2tlbml6ZXIgPSB0b2tlbml6ZXJbdG9rZW5pemVyUHJvcF0gYXMgVW5rbm93bkZ1bmN0aW9uO1xuICAgICAgICAgIC8vIFJlcGxhY2UgdG9rZW5pemVyIHdpdGggZnVuYyB0byBydW4gZXh0ZW5zaW9uLCBidXQgZmFsbCBiYWNrIGlmIGZhbHNlXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjYW5ub3QgdHlwZSB0b2tlbml6ZXIgZnVuY3Rpb24gZHluYW1pY2FsbHlcbiAgICAgICAgICB0b2tlbml6ZXJbdG9rZW5pemVyUHJvcF0gPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmV0ID0gdG9rZW5pemVyRnVuYy5hcHBseSh0b2tlbml6ZXIsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgcmV0ID0gcHJldlRva2VuaXplci5hcHBseSh0b2tlbml6ZXIsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIG9wdHMudG9rZW5pemVyID0gdG9rZW5pemVyO1xuICAgICAgfVxuXG4gICAgICAvLyA9PS0tIFBhcnNlIEhvb2tzIGV4dGVuc2lvbnMgLS09PSAvL1xuICAgICAgaWYgKHBhY2suaG9va3MpIHtcbiAgICAgICAgY29uc3QgaG9va3MgPSB0aGlzLmRlZmF1bHRzLmhvb2tzIHx8IG5ldyBfSG9va3M8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4oKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHBhY2suaG9va3MpIHtcbiAgICAgICAgICBpZiAoIShwcm9wIGluIGhvb2tzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBob29rICcke3Byb3B9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoWydvcHRpb25zJywgJ2Jsb2NrJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBvcHRpb25zIGFuZCBibG9jayBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaG9va3NQcm9wID0gcHJvcCBhcyBFeGNsdWRlPGtleW9mIF9Ib29rczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PiwgJ29wdGlvbnMnIHwgJ2Jsb2NrJz47XG4gICAgICAgICAgY29uc3QgaG9va3NGdW5jID0gcGFjay5ob29rc1tob29rc1Byb3BdIGFzIFVua25vd25GdW5jdGlvbjtcbiAgICAgICAgICBjb25zdCBwcmV2SG9vayA9IGhvb2tzW2hvb2tzUHJvcF0gYXMgVW5rbm93bkZ1bmN0aW9uO1xuICAgICAgICAgIGlmIChfSG9va3MucGFzc1Rocm91Z2hIb29rcy5oYXMocHJvcCkpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2Fubm90IHR5cGUgaG9vayBmdW5jdGlvbiBkeW5hbWljYWxseVxuICAgICAgICAgICAgaG9va3NbaG9va3NQcm9wXSA9IChhcmc6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdHMuYXN5bmMgJiYgX0hvb2tzLnBhc3NUaHJvdWdoSG9va3NSZXNwZWN0QXN5bmMuaGFzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChhc3luYygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGhvb2tzRnVuYy5jYWxsKGhvb2tzLCBhcmcpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZIb29rLmNhbGwoaG9va3MsIHJldCk7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJldCA9IGhvb2tzRnVuYy5jYWxsKGhvb2tzLCBhcmcpO1xuICAgICAgICAgICAgICByZXR1cm4gcHJldkhvb2suY2FsbChob29rcywgcmV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2Fubm90IHR5cGUgaG9vayBmdW5jdGlvbiBkeW5hbWljYWxseVxuICAgICAgICAgICAgaG9va3NbaG9va3NQcm9wXSA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdHMuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGFzeW5jKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IHJldCA9IGF3YWl0IGhvb2tzRnVuYy5hcHBseShob29rcywgYXJncyk7XG4gICAgICAgICAgICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXQgPSBhd2FpdCBwcmV2SG9vay5hcHBseShob29rcywgYXJncyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBsZXQgcmV0ID0gaG9va3NGdW5jLmFwcGx5KGhvb2tzLCBhcmdzKTtcbiAgICAgICAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXQgPSBwcmV2SG9vay5hcHBseShob29rcywgYXJncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9wdHMuaG9va3MgPSBob29rcztcbiAgICAgIH1cblxuICAgICAgLy8gPT0tLSBQYXJzZSBXYWxrVG9rZW5zIGV4dGVuc2lvbnMgLS09PSAvL1xuICAgICAgaWYgKHBhY2sud2Fsa1Rva2Vucykge1xuICAgICAgICBjb25zdCB3YWxrVG9rZW5zID0gdGhpcy5kZWZhdWx0cy53YWxrVG9rZW5zO1xuICAgICAgICBjb25zdCBwYWNrV2Fsa3Rva2VucyA9IHBhY2sud2Fsa1Rva2VucztcbiAgICAgICAgb3B0cy53YWxrVG9rZW5zID0gZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgICAgICBsZXQgdmFsdWVzOiBNYXliZVByb21pc2VbXSA9IFtdO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKHBhY2tXYWxrdG9rZW5zLmNhbGwodGhpcywgdG9rZW4pKTtcbiAgICAgICAgICBpZiAod2Fsa1Rva2Vucykge1xuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdCh3YWxrVG9rZW5zLmNhbGwodGhpcywgdG9rZW4pKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kZWZhdWx0cyA9IHsgLi4udGhpcy5kZWZhdWx0cywgLi4ub3B0cyB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdDogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0Pikge1xuICAgIHRoaXMuZGVmYXVsdHMgPSB7IC4uLnRoaXMuZGVmYXVsdHMsIC4uLm9wdCB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbGV4ZXIoc3JjOiBzdHJpbmcsIG9wdGlvbnM/OiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+KSB7XG4gICAgcmV0dXJuIF9MZXhlci5sZXgoc3JjLCBvcHRpb25zID8/IHRoaXMuZGVmYXVsdHMpO1xuICB9XG5cbiAgcGFyc2VyKHRva2VuczogVG9rZW5bXSwgb3B0aW9ucz86IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4pIHtcbiAgICByZXR1cm4gX1BhcnNlci5wYXJzZTxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0Pih0b2tlbnMsIG9wdGlvbnMgPz8gdGhpcy5kZWZhdWx0cyk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTWFya2Rvd24oYmxvY2tUeXBlOiBib29sZWFuKSB7XG4gICAgdHlwZSBvdmVybG9hZGVkUGFyc2UgPSB7XG4gICAgICAoc3JjOiBzdHJpbmcsIG9wdGlvbnM6IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4gJiB7IGFzeW5jOiB0cnVlIH0pOiBQcm9taXNlPFBhcnNlck91dHB1dD47XG4gICAgICAoc3JjOiBzdHJpbmcsIG9wdGlvbnM6IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4gJiB7IGFzeW5jOiBmYWxzZSB9KTogUGFyc2VyT3V0cHV0O1xuICAgICAgKHNyYzogc3RyaW5nLCBvcHRpb25zPzogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PiB8IG51bGwpOiBQYXJzZXJPdXRwdXQgfCBQcm9taXNlPFBhcnNlck91dHB1dD47XG4gICAgfTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGFyc2U6IG92ZXJsb2FkZWRQYXJzZSA9IChzcmM6IHN0cmluZywgb3B0aW9ucz86IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4gfCBudWxsKTogYW55ID0+IHtcbiAgICAgIGNvbnN0IG9yaWdPcHQgPSB7IC4uLm9wdGlvbnMgfTtcbiAgICAgIGNvbnN0IG9wdCA9IHsgLi4udGhpcy5kZWZhdWx0cywgLi4ub3JpZ09wdCB9O1xuXG4gICAgICBjb25zdCB0aHJvd0Vycm9yID0gdGhpcy5vbkVycm9yKCEhb3B0LnNpbGVudCwgISFvcHQuYXN5bmMpO1xuXG4gICAgICAvLyB0aHJvdyBlcnJvciBpZiBhbiBleHRlbnNpb24gc2V0IGFzeW5jIHRvIHRydWUgYnV0IHBhcnNlIHdhcyBjYWxsZWQgd2l0aCBhc3luYzogZmFsc2VcbiAgICAgIGlmICh0aGlzLmRlZmF1bHRzLmFzeW5jID09PSB0cnVlICYmIG9yaWdPcHQuYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKG5ldyBFcnJvcignbWFya2VkKCk6IFRoZSBhc3luYyBvcHRpb24gd2FzIHNldCB0byB0cnVlIGJ5IGFuIGV4dGVuc2lvbi4gUmVtb3ZlIGFzeW5jOiBmYWxzZSBmcm9tIHRoZSBwYXJzZSBvcHRpb25zIG9iamVjdCB0byByZXR1cm4gYSBQcm9taXNlLicpKTtcbiAgICAgIH1cblxuICAgICAgLy8gdGhyb3cgZXJyb3IgaW4gY2FzZSBvZiBub24gc3RyaW5nIGlucHV0XG4gICAgICBpZiAodHlwZW9mIHNyYyA9PT0gJ3VuZGVmaW5lZCcgfHwgc3JjID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKG5ldyBFcnJvcignbWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCcpKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygc3JjICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgRXJyb3IoJ21hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAnXG4gICAgICAgICAgKyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3JjKSArICcsIHN0cmluZyBleHBlY3RlZCcpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdC5ob29rcykge1xuICAgICAgICBvcHQuaG9va3Mub3B0aW9ucyA9IG9wdDtcbiAgICAgICAgb3B0Lmhvb2tzLmJsb2NrID0gYmxvY2tUeXBlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0LmFzeW5jKSB7XG4gICAgICAgIHJldHVybiAoYXN5bmMoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvY2Vzc2VkU3JjID0gb3B0Lmhvb2tzID8gYXdhaXQgb3B0Lmhvb2tzLnByZXByb2Nlc3Moc3JjKSA6IHNyYztcbiAgICAgICAgICBjb25zdCBsZXhlciA9IG9wdC5ob29rcyA/IGF3YWl0IG9wdC5ob29rcy5wcm92aWRlTGV4ZXIoKSA6IChibG9ja1R5cGUgPyBfTGV4ZXIubGV4IDogX0xleGVyLmxleElubGluZSk7XG4gICAgICAgICAgY29uc3QgdG9rZW5zID0gYXdhaXQgbGV4ZXIocHJvY2Vzc2VkU3JjLCBvcHQpO1xuICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZFRva2VucyA9IG9wdC5ob29rcyA/IGF3YWl0IG9wdC5ob29rcy5wcm9jZXNzQWxsVG9rZW5zKHRva2VucykgOiB0b2tlbnM7XG4gICAgICAgICAgaWYgKG9wdC53YWxrVG9rZW5zKSB7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMocHJvY2Vzc2VkVG9rZW5zLCBvcHQud2Fsa1Rva2VucykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBwYXJzZXIgPSBvcHQuaG9va3MgPyBhd2FpdCBvcHQuaG9va3MucHJvdmlkZVBhcnNlcigpIDogKGJsb2NrVHlwZSA/IF9QYXJzZXIucGFyc2UgOiBfUGFyc2VyLnBhcnNlSW5saW5lKTtcbiAgICAgICAgICBjb25zdCBodG1sID0gYXdhaXQgcGFyc2VyKHByb2Nlc3NlZFRva2Vucywgb3B0KTtcbiAgICAgICAgICByZXR1cm4gb3B0Lmhvb2tzID8gYXdhaXQgb3B0Lmhvb2tzLnBvc3Rwcm9jZXNzKGh0bWwpIDogaHRtbDtcbiAgICAgICAgfSkoKS5jYXRjaCh0aHJvd0Vycm9yKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKG9wdC5ob29rcykge1xuICAgICAgICAgIHNyYyA9IG9wdC5ob29rcy5wcmVwcm9jZXNzKHNyYykgYXMgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxleGVyID0gb3B0Lmhvb2tzID8gb3B0Lmhvb2tzLnByb3ZpZGVMZXhlcigpIDogKGJsb2NrVHlwZSA/IF9MZXhlci5sZXggOiBfTGV4ZXIubGV4SW5saW5lKTtcbiAgICAgICAgbGV0IHRva2VucyA9IGxleGVyKHNyYywgb3B0KTtcbiAgICAgICAgaWYgKG9wdC5ob29rcykge1xuICAgICAgICAgIHRva2VucyA9IG9wdC5ob29rcy5wcm9jZXNzQWxsVG9rZW5zKHRva2Vucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdC53YWxrVG9rZW5zKSB7XG4gICAgICAgICAgdGhpcy53YWxrVG9rZW5zKHRva2Vucywgb3B0LndhbGtUb2tlbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG9wdC5ob29rcyA/IG9wdC5ob29rcy5wcm92aWRlUGFyc2VyKCkgOiAoYmxvY2tUeXBlID8gX1BhcnNlci5wYXJzZSA6IF9QYXJzZXIucGFyc2VJbmxpbmUpO1xuICAgICAgICBsZXQgaHRtbCA9IHBhcnNlcih0b2tlbnMsIG9wdCk7XG4gICAgICAgIGlmIChvcHQuaG9va3MpIHtcbiAgICAgICAgICBodG1sID0gb3B0Lmhvb2tzLnBvc3Rwcm9jZXNzKGh0bWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodG1sO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGUgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gcGFyc2U7XG4gIH1cblxuICBwcml2YXRlIG9uRXJyb3Ioc2lsZW50OiBib29sZWFuLCBhc3luYzogYm9vbGVhbikge1xuICAgIHJldHVybiAoZTogRXJyb3IpOiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgICAgZS5tZXNzYWdlICs9ICdcXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC4nO1xuXG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIGNvbnN0IG1zZyA9ICc8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4nXG4gICAgICAgICAgKyBlc2NhcGVIdG1sRW50aXRpZXMoZS5tZXNzYWdlICsgJycsIHRydWUpXG4gICAgICAgICAgKyAnPC9wcmU+JztcbiAgICAgICAgaWYgKGFzeW5jKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtc2cpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtc2c7XG4gICAgICB9XG5cbiAgICAgIGlmIChhc3luYykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBfTGV4ZXIgfSBmcm9tICcuL0xleGVyLnRzJztcbmltcG9ydCB7IF9QYXJzZXIgfSBmcm9tICcuL1BhcnNlci50cyc7XG5pbXBvcnQgeyBfVG9rZW5pemVyIH0gZnJvbSAnLi9Ub2tlbml6ZXIudHMnO1xuaW1wb3J0IHsgX1JlbmRlcmVyIH0gZnJvbSAnLi9SZW5kZXJlci50cyc7XG5pbXBvcnQgeyBfVGV4dFJlbmRlcmVyIH0gZnJvbSAnLi9UZXh0UmVuZGVyZXIudHMnO1xuaW1wb3J0IHsgX0hvb2tzIH0gZnJvbSAnLi9Ib29rcy50cyc7XG5pbXBvcnQgeyBNYXJrZWQgfSBmcm9tICcuL0luc3RhbmNlLnRzJztcbmltcG9ydCB7XG4gIF9nZXREZWZhdWx0cyxcbiAgY2hhbmdlRGVmYXVsdHMsXG4gIF9kZWZhdWx0cyxcbn0gZnJvbSAnLi9kZWZhdWx0cy50cyc7XG5pbXBvcnQgdHlwZSB7IE1hcmtlZEV4dGVuc2lvbiwgTWFya2VkT3B0aW9ucyB9IGZyb20gJy4vTWFya2VkT3B0aW9ucy50cyc7XG5pbXBvcnQgdHlwZSB7IFRva2VuLCBUb2tlbnNMaXN0IH0gZnJvbSAnLi9Ub2tlbnMudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXliZVByb21pc2UgfSBmcm9tICcuL0luc3RhbmNlLnRzJztcblxuY29uc3QgbWFya2VkSW5zdGFuY2UgPSBuZXcgTWFya2VkKCk7XG5cbi8qKlxuICogQ29tcGlsZXMgbWFya2Rvd24gdG8gSFRNTCBhc3luY2hyb25vdXNseS5cbiAqXG4gKiBAcGFyYW0gc3JjIFN0cmluZyBvZiBtYXJrZG93biBzb3VyY2UgdG8gYmUgY29tcGlsZWRcbiAqIEBwYXJhbSBvcHRpb25zIEhhc2ggb2Ygb3B0aW9ucywgaGF2aW5nIGFzeW5jOiB0cnVlXG4gKiBAcmV0dXJuIFByb21pc2Ugb2Ygc3RyaW5nIG9mIGNvbXBpbGVkIEhUTUxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtlZChzcmM6IHN0cmluZywgb3B0aW9uczogTWFya2VkT3B0aW9ucyAmIHsgYXN5bmM6IHRydWUgfSk6IFByb21pc2U8c3RyaW5nPjtcblxuLyoqXG4gKiBDb21waWxlcyBtYXJrZG93biB0byBIVE1MLlxuICpcbiAqIEBwYXJhbSBzcmMgU3RyaW5nIG9mIG1hcmtkb3duIHNvdXJjZSB0byBiZSBjb21waWxlZFxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgaGFzaCBvZiBvcHRpb25zXG4gKiBAcmV0dXJuIFN0cmluZyBvZiBjb21waWxlZCBIVE1MLiBXaWxsIGJlIGEgUHJvbWlzZSBvZiBzdHJpbmcgaWYgYXN5bmMgaXMgc2V0IHRvIHRydWUgYnkgYW55IGV4dGVuc2lvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXJrZWQoc3JjOiBzdHJpbmcsIG9wdGlvbnM6IE1hcmtlZE9wdGlvbnMgJiB7IGFzeW5jOiBmYWxzZSB9KTogc3RyaW5nO1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtlZChzcmM6IHN0cmluZywgb3B0aW9uczogTWFya2VkT3B0aW9ucyAmIHsgYXN5bmM6IHRydWUgfSk6IFByb21pc2U8c3RyaW5nPjtcbmV4cG9ydCBmdW5jdGlvbiBtYXJrZWQoc3JjOiBzdHJpbmcsIG9wdGlvbnM/OiBNYXJrZWRPcHRpb25zIHwgbnVsbCk6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbmV4cG9ydCBmdW5jdGlvbiBtYXJrZWQoc3JjOiBzdHJpbmcsIG9wdD86IE1hcmtlZE9wdGlvbnMgfCBudWxsKTogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG1hcmtlZEluc3RhbmNlLnBhcnNlKHNyYywgb3B0KTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBkZWZhdWx0IG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgSGFzaCBvZiBvcHRpb25zXG4gKi9cbm1hcmtlZC5vcHRpb25zID1cbiAgbWFya2VkLnNldE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zOiBNYXJrZWRPcHRpb25zKSB7XG4gICAgbWFya2VkSW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICBtYXJrZWQuZGVmYXVsdHMgPSBtYXJrZWRJbnN0YW5jZS5kZWZhdWx0cztcbiAgICBjaGFuZ2VEZWZhdWx0cyhtYXJrZWQuZGVmYXVsdHMpO1xuICAgIHJldHVybiBtYXJrZWQ7XG4gIH07XG5cbi8qKlxuICogR2V0cyB0aGUgb3JpZ2luYWwgbWFya2VkIGRlZmF1bHQgb3B0aW9ucy5cbiAqL1xubWFya2VkLmdldERlZmF1bHRzID0gX2dldERlZmF1bHRzO1xuXG5tYXJrZWQuZGVmYXVsdHMgPSBfZGVmYXVsdHM7XG5cbi8qKlxuICogVXNlIEV4dGVuc2lvblxuICovXG5cbm1hcmtlZC51c2UgPSBmdW5jdGlvbiguLi5hcmdzOiBNYXJrZWRFeHRlbnNpb25bXSkge1xuICBtYXJrZWRJbnN0YW5jZS51c2UoLi4uYXJncyk7XG4gIG1hcmtlZC5kZWZhdWx0cyA9IG1hcmtlZEluc3RhbmNlLmRlZmF1bHRzO1xuICBjaGFuZ2VEZWZhdWx0cyhtYXJrZWQuZGVmYXVsdHMpO1xuICByZXR1cm4gbWFya2VkO1xufTtcblxuLyoqXG4gKiBSdW4gY2FsbGJhY2sgZm9yIGV2ZXJ5IHRva2VuXG4gKi9cblxubWFya2VkLndhbGtUb2tlbnMgPSBmdW5jdGlvbih0b2tlbnM6IFRva2VuW10gfCBUb2tlbnNMaXN0LCBjYWxsYmFjazogKHRva2VuOiBUb2tlbikgPT4gTWF5YmVQcm9taXNlIHwgTWF5YmVQcm9taXNlW10pIHtcbiAgcmV0dXJuIG1hcmtlZEluc3RhbmNlLndhbGtUb2tlbnModG9rZW5zLCBjYWxsYmFjayk7XG59O1xuXG4vKipcbiAqIENvbXBpbGVzIG1hcmtkb3duIHRvIEhUTUwgd2l0aG91dCBlbmNsb3NpbmcgYHBgIHRhZy5cbiAqXG4gKiBAcGFyYW0gc3JjIFN0cmluZyBvZiBtYXJrZG93biBzb3VyY2UgdG8gYmUgY29tcGlsZWRcbiAqIEBwYXJhbSBvcHRpb25zIEhhc2ggb2Ygb3B0aW9uc1xuICogQHJldHVybiBTdHJpbmcgb2YgY29tcGlsZWQgSFRNTFxuICovXG5tYXJrZWQucGFyc2VJbmxpbmUgPSBtYXJrZWRJbnN0YW5jZS5wYXJzZUlubGluZTtcblxuLyoqXG4gKiBFeHBvc2VcbiAqL1xubWFya2VkLlBhcnNlciA9IF9QYXJzZXI7XG5tYXJrZWQucGFyc2VyID0gX1BhcnNlci5wYXJzZTtcbm1hcmtlZC5SZW5kZXJlciA9IF9SZW5kZXJlcjtcbm1hcmtlZC5UZXh0UmVuZGVyZXIgPSBfVGV4dFJlbmRlcmVyO1xubWFya2VkLkxleGVyID0gX0xleGVyO1xubWFya2VkLmxleGVyID0gX0xleGVyLmxleDtcbm1hcmtlZC5Ub2tlbml6ZXIgPSBfVG9rZW5pemVyO1xubWFya2VkLkhvb2tzID0gX0hvb2tzO1xubWFya2VkLnBhcnNlID0gbWFya2VkO1xuXG5leHBvcnQgY29uc3Qgb3B0aW9ucyA9IG1hcmtlZC5vcHRpb25zO1xuZXhwb3J0IGNvbnN0IHNldE9wdGlvbnMgPSBtYXJrZWQuc2V0T3B0aW9ucztcbmV4cG9ydCBjb25zdCB1c2UgPSBtYXJrZWQudXNlO1xuZXhwb3J0IGNvbnN0IHdhbGtUb2tlbnMgPSBtYXJrZWQud2Fsa1Rva2VucztcbmV4cG9ydCBjb25zdCBwYXJzZUlubGluZSA9IG1hcmtlZC5wYXJzZUlubGluZTtcbmV4cG9ydCBjb25zdCBwYXJzZSA9IG1hcmtlZDtcbmV4cG9ydCBjb25zdCBwYXJzZXIgPSBfUGFyc2VyLnBhcnNlO1xuZXhwb3J0IGNvbnN0IGxleGVyID0gX0xleGVyLmxleDtcbmV4cG9ydCB7IF9kZWZhdWx0cyBhcyBkZWZhdWx0cywgX2dldERlZmF1bHRzIGFzIGdldERlZmF1bHRzIH0gZnJvbSAnLi9kZWZhdWx0cy50cyc7XG5leHBvcnQgeyBfTGV4ZXIgYXMgTGV4ZXIgfSBmcm9tICcuL0xleGVyLnRzJztcbmV4cG9ydCB7IF9QYXJzZXIgYXMgUGFyc2VyIH0gZnJvbSAnLi9QYXJzZXIudHMnO1xuZXhwb3J0IHsgX1Rva2VuaXplciBhcyBUb2tlbml6ZXIgfSBmcm9tICcuL1Rva2VuaXplci50cyc7XG5leHBvcnQgeyBfUmVuZGVyZXIgYXMgUmVuZGVyZXIgfSBmcm9tICcuL1JlbmRlcmVyLnRzJztcbmV4cG9ydCB7IF9UZXh0UmVuZGVyZXIgYXMgVGV4dFJlbmRlcmVyIH0gZnJvbSAnLi9UZXh0UmVuZGVyZXIudHMnO1xuZXhwb3J0IHsgX0hvb2tzIGFzIEhvb2tzIH0gZnJvbSAnLi9Ib29rcy50cyc7XG5leHBvcnQgeyBNYXJrZWQgfSBmcm9tICcuL0luc3RhbmNlLnRzJztcbmV4cG9ydCB0eXBlICogZnJvbSAnLi9NYXJrZWRPcHRpb25zLnRzJztcbmV4cG9ydCB0eXBlICogZnJvbSAnLi9Ub2tlbnMudHMnO1xuIiwgImNvbnN0IHtcbiAgZW50cmllcyxcbiAgc2V0UHJvdG90eXBlT2YsXG4gIGlzRnJvemVuLFxuICBnZXRQcm90b3R5cGVPZixcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxufSA9IE9iamVjdDtcblxubGV0IHsgZnJlZXplLCBzZWFsLCBjcmVhdGUgfSA9IE9iamVjdDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tbXV0YWJsZS1leHBvcnRzXG5sZXQgeyBhcHBseSwgY29uc3RydWN0IH0gPSB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgUmVmbGVjdDtcblxuaWYgKCFmcmVlemUpIHtcbiAgZnJlZXplID0gZnVuY3Rpb24gPFQ+KHg6IFQpOiBUIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cblxuaWYgKCFzZWFsKSB7XG4gIHNlYWwgPSBmdW5jdGlvbiA8VD4oeDogVCk6IFQge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuXG5pZiAoIWFwcGx5KSB7XG4gIGFwcGx5ID0gZnVuY3Rpb24gPFQ+KFxuICAgIGZ1bmM6ICh0aGlzQXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBULFxuICAgIHRoaXNBcmc6IGFueSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBUIHtcbiAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgfTtcbn1cblxuaWYgKCFjb25zdHJ1Y3QpIHtcbiAgY29uc3RydWN0ID0gZnVuY3Rpb24gPFQ+KEZ1bmM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIC4uLmFyZ3M6IGFueVtdKTogVCB7XG4gICAgcmV0dXJuIG5ldyBGdW5jKC4uLmFyZ3MpO1xuICB9O1xufVxuXG5jb25zdCBhcnJheUZvckVhY2ggPSB1bmFwcGx5KEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKTtcbmNvbnN0IGFycmF5SW5kZXhPZiA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpO1xuY29uc3QgYXJyYXlMYXN0SW5kZXhPZiA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKTtcbmNvbnN0IGFycmF5UG9wID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUucG9wKTtcbmNvbnN0IGFycmF5UHVzaCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuY29uc3QgYXJyYXlTbGljZSA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLnNsaWNlKTtcbmNvbnN0IGFycmF5U3BsaWNlID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUuc3BsaWNlKTtcblxuY29uc3Qgc3RyaW5nVG9Mb3dlckNhc2UgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpO1xuY29uc3Qgc3RyaW5nVG9TdHJpbmcgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpO1xuY29uc3Qgc3RyaW5nTWF0Y2ggPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUubWF0Y2gpO1xuY29uc3Qgc3RyaW5nUmVwbGFjZSA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbmNvbnN0IHN0cmluZ0luZGV4T2YgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZik7XG5jb25zdCBzdHJpbmdUcmltID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRyaW0pO1xuXG5jb25zdCBvYmplY3RIYXNPd25Qcm9wZXJ0eSA9IHVuYXBwbHkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbmNvbnN0IHJlZ0V4cFRlc3QgPSB1bmFwcGx5KFJlZ0V4cC5wcm90b3R5cGUudGVzdCk7XG5cbmNvbnN0IHR5cGVFcnJvckNyZWF0ZSA9IHVuY29uc3RydWN0KFR5cGVFcnJvcik7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBnaXZlbiBmdW5jdGlvbiB3aXRoIGEgc3BlY2lmaWVkIHRoaXNBcmcgYW5kIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZnVuYyAtIFRoZSBmdW5jdGlvbiB0byBiZSB3cmFwcGVkIGFuZCBjYWxsZWQuXG4gKiBAcmV0dXJucyBBIG5ldyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBnaXZlbiBmdW5jdGlvbiB3aXRoIGEgc3BlY2lmaWVkIHRoaXNBcmcgYW5kIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gdW5hcHBseTxUPihcbiAgZnVuYzogKHRoaXNBcmc6IGFueSwgLi4uYXJnczogYW55W10pID0+IFRcbik6ICh0aGlzQXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBUIHtcbiAgcmV0dXJuICh0aGlzQXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogVCA9PiB7XG4gICAgaWYgKHRoaXNBcmcgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHRoaXNBcmcubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncyk7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmdW5jdGlvbiB0aGF0IGNvbnN0cnVjdHMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZnVuYyAtIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBiZSB3cmFwcGVkIGFuZCBjYWxsZWQuXG4gKiBAcmV0dXJucyBBIG5ldyBmdW5jdGlvbiB0aGF0IGNvbnN0cnVjdHMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gdW5jb25zdHJ1Y3Q8VD4oXG4gIEZ1bmM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFRcbik6ICguLi5hcmdzOiBhbnlbXSkgPT4gVCB7XG4gIHJldHVybiAoLi4uYXJnczogYW55W10pOiBUID0+IGNvbnN0cnVjdChGdW5jLCBhcmdzKTtcbn1cblxuLyoqXG4gKiBBZGQgcHJvcGVydGllcyB0byBhIGxvb2t1cCB0YWJsZVxuICpcbiAqIEBwYXJhbSBzZXQgLSBUaGUgc2V0IHRvIHdoaWNoIGVsZW1lbnRzIHdpbGwgYmUgYWRkZWQuXG4gKiBAcGFyYW0gYXJyYXkgLSBUaGUgYXJyYXkgY29udGFpbmluZyBlbGVtZW50cyB0byBiZSBhZGRlZCB0byB0aGUgc2V0LlxuICogQHBhcmFtIHRyYW5zZm9ybUNhc2VGdW5jIC0gQW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBjYXNlIG9mIGVhY2ggZWxlbWVudCBiZWZvcmUgYWRkaW5nIHRvIHRoZSBzZXQuXG4gKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgc2V0IHdpdGggYWRkZWQgZWxlbWVudHMuXG4gKi9cbmZ1bmN0aW9uIGFkZFRvU2V0KFxuICBzZXQ6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIGFycmF5OiByZWFkb25seSBhbnlbXSxcbiAgdHJhbnNmb3JtQ2FzZUZ1bmM6IFJldHVyblR5cGU8dHlwZW9mIHVuYXBwbHk8c3RyaW5nPj4gPSBzdHJpbmdUb0xvd2VyQ2FzZVxuKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgIC8vIE1ha2UgJ2luJyBhbmQgdHJ1dGh5IGNoZWNrcyBsaWtlIEJvb2xlYW4oc2V0LmNvbnN0cnVjdG9yKVxuICAgIC8vIGluZGVwZW5kZW50IG9mIGFueSBwcm9wZXJ0aWVzIGRlZmluZWQgb24gT2JqZWN0LnByb3RvdHlwZS5cbiAgICAvLyBQcmV2ZW50IHByb3RvdHlwZSBzZXR0ZXJzIGZyb20gaW50ZXJjZXB0aW5nIHNldCBhcyBhIHRoaXMgdmFsdWUuXG4gICAgc2V0UHJvdG90eXBlT2Yoc2V0LCBudWxsKTtcbiAgfVxuXG4gIGxldCBsID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobC0tKSB7XG4gICAgbGV0IGVsZW1lbnQgPSBhcnJheVtsXTtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBsY0VsZW1lbnQgPSB0cmFuc2Zvcm1DYXNlRnVuYyhlbGVtZW50KTtcbiAgICAgIGlmIChsY0VsZW1lbnQgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgLy8gQ29uZmlnIHByZXNldHMgKGUuZy4gdGFncy5qcywgYXR0cnMuanMpIGFyZSBpbW11dGFibGUuXG4gICAgICAgIGlmICghaXNGcm96ZW4oYXJyYXkpKSB7XG4gICAgICAgICAgKGFycmF5IGFzIGFueVtdKVtsXSA9IGxjRWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQgPSBsY0VsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0W2VsZW1lbnRdID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBzZXQ7XG59XG5cbi8qKlxuICogQ2xlYW4gdXAgYW4gYXJyYXkgdG8gaGFyZGVuIGFnYWluc3QgQ1NQUFxuICpcbiAqIEBwYXJhbSBhcnJheSAtIFRoZSBhcnJheSB0byBiZSBjbGVhbmVkLlxuICogQHJldHVybnMgVGhlIGNsZWFuZWQgdmVyc2lvbiBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gY2xlYW5BcnJheTxUPihhcnJheTogVFtdKTogQXJyYXk8VCB8IG51bGw+IHtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGlzUHJvcGVydHlFeGlzdCA9IG9iamVjdEhhc093blByb3BlcnR5KGFycmF5LCBpbmRleCk7XG5cbiAgICBpZiAoIWlzUHJvcGVydHlFeGlzdCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG5cbi8qKlxuICogU2hhbGxvdyBjbG9uZSBhbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IC0gVGhlIG9iamVjdCB0byBiZSBjbG9uZWQuXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgdGhhdCBjb3BpZXMgdGhlIG9yaWdpbmFsLlxuICovXG5mdW5jdGlvbiBjbG9uZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ob2JqZWN0OiBUKTogVCB7XG4gIGNvbnN0IG5ld09iamVjdCA9IGNyZWF0ZShudWxsKTtcblxuICBmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgdmFsdWVdIG9mIGVudHJpZXMob2JqZWN0KSkge1xuICAgIGNvbnN0IGlzUHJvcGVydHlFeGlzdCA9IG9iamVjdEhhc093blByb3BlcnR5KG9iamVjdCwgcHJvcGVydHkpO1xuXG4gICAgaWYgKGlzUHJvcGVydHlFeGlzdCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIG5ld09iamVjdFtwcm9wZXJ0eV0gPSBjbGVhbkFycmF5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHZhbHVlICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdFxuICAgICAgKSB7XG4gICAgICAgIG5ld09iamVjdFtwcm9wZXJ0eV0gPSBjbG9uZSh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdPYmplY3RbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld09iamVjdDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBhdXRvbWF0aWNhbGx5IGNoZWNrcyBpZiB0aGUgcHJvcCBpcyBmdW5jdGlvbiBvciBnZXR0ZXIgYW5kIGJlaGF2ZXMgYWNjb3JkaW5nbHkuXG4gKlxuICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3QgdG8gbG9vayB1cCB0aGUgZ2V0dGVyIGZ1bmN0aW9uIGluIGl0cyBwcm90b3R5cGUgY2hhaW4uXG4gKiBAcGFyYW0gcHJvcCAtIFRoZSBwcm9wZXJ0eSBuYW1lIGZvciB3aGljaCB0byBmaW5kIHRoZSBnZXR0ZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgZ2V0dGVyIGZ1bmN0aW9uIGZvdW5kIGluIHRoZSBwcm90b3R5cGUgY2hhaW4gb3IgYSBmYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbG9va3VwR2V0dGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihcbiAgb2JqZWN0OiBULFxuICBwcm9wOiBzdHJpbmdcbik6IFJldHVyblR5cGU8dHlwZW9mIHVuYXBwbHk8YW55Pj4gfCAoKCkgPT4gbnVsbCkge1xuICB3aGlsZSAob2JqZWN0ICE9PSBudWxsKSB7XG4gICAgY29uc3QgZGVzYyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3ApO1xuXG4gICAgaWYgKGRlc2MpIHtcbiAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICByZXR1cm4gdW5hcHBseShkZXNjLmdldCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGVzYy52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdW5hcHBseShkZXNjLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvYmplY3QgPSBnZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmFsbGJhY2tWYWx1ZSgpOiBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBmYWxsYmFja1ZhbHVlO1xufVxuXG5leHBvcnQge1xuICAvLyBBcnJheVxuICBhcnJheUZvckVhY2gsXG4gIGFycmF5SW5kZXhPZixcbiAgYXJyYXlMYXN0SW5kZXhPZixcbiAgYXJyYXlQb3AsXG4gIGFycmF5UHVzaCxcbiAgYXJyYXlTbGljZSxcbiAgYXJyYXlTcGxpY2UsXG4gIC8vIE9iamVjdFxuICBlbnRyaWVzLFxuICBmcmVlemUsXG4gIGdldFByb3RvdHlwZU9mLFxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIGlzRnJvemVuLFxuICBzZXRQcm90b3R5cGVPZixcbiAgc2VhbCxcbiAgY2xvbmUsXG4gIGNyZWF0ZSxcbiAgb2JqZWN0SGFzT3duUHJvcGVydHksXG4gIC8vIFJlZ0V4cFxuICByZWdFeHBUZXN0LFxuICAvLyBTdHJpbmdcbiAgc3RyaW5nSW5kZXhPZixcbiAgc3RyaW5nTWF0Y2gsXG4gIHN0cmluZ1JlcGxhY2UsXG4gIHN0cmluZ1RvTG93ZXJDYXNlLFxuICBzdHJpbmdUb1N0cmluZyxcbiAgc3RyaW5nVHJpbSxcbiAgLy8gRXJyb3JzXG4gIHR5cGVFcnJvckNyZWF0ZSxcbiAgLy8gT3RoZXJcbiAgbG9va3VwR2V0dGVyLFxuICBhZGRUb1NldCxcbiAgLy8gUmVmbGVjdFxuICB1bmFwcGx5LFxuICB1bmNvbnN0cnVjdCxcbn07XG4iLCAiaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbmV4cG9ydCBjb25zdCBodG1sID0gZnJlZXplKFtcbiAgJ2EnLFxuICAnYWJicicsXG4gICdhY3JvbnltJyxcbiAgJ2FkZHJlc3MnLFxuICAnYXJlYScsXG4gICdhcnRpY2xlJyxcbiAgJ2FzaWRlJyxcbiAgJ2F1ZGlvJyxcbiAgJ2InLFxuICAnYmRpJyxcbiAgJ2JkbycsXG4gICdiaWcnLFxuICAnYmxpbmsnLFxuICAnYmxvY2txdW90ZScsXG4gICdib2R5JyxcbiAgJ2JyJyxcbiAgJ2J1dHRvbicsXG4gICdjYW52YXMnLFxuICAnY2FwdGlvbicsXG4gICdjZW50ZXInLFxuICAnY2l0ZScsXG4gICdjb2RlJyxcbiAgJ2NvbCcsXG4gICdjb2xncm91cCcsXG4gICdjb250ZW50JyxcbiAgJ2RhdGEnLFxuICAnZGF0YWxpc3QnLFxuICAnZGQnLFxuICAnZGVjb3JhdG9yJyxcbiAgJ2RlbCcsXG4gICdkZXRhaWxzJyxcbiAgJ2RmbicsXG4gICdkaWFsb2cnLFxuICAnZGlyJyxcbiAgJ2RpdicsXG4gICdkbCcsXG4gICdkdCcsXG4gICdlbGVtZW50JyxcbiAgJ2VtJyxcbiAgJ2ZpZWxkc2V0JyxcbiAgJ2ZpZ2NhcHRpb24nLFxuICAnZmlndXJlJyxcbiAgJ2ZvbnQnLFxuICAnZm9vdGVyJyxcbiAgJ2Zvcm0nLFxuICAnaDEnLFxuICAnaDInLFxuICAnaDMnLFxuICAnaDQnLFxuICAnaDUnLFxuICAnaDYnLFxuICAnaGVhZCcsXG4gICdoZWFkZXInLFxuICAnaGdyb3VwJyxcbiAgJ2hyJyxcbiAgJ2h0bWwnLFxuICAnaScsXG4gICdpbWcnLFxuICAnaW5wdXQnLFxuICAnaW5zJyxcbiAgJ2tiZCcsXG4gICdsYWJlbCcsXG4gICdsZWdlbmQnLFxuICAnbGknLFxuICAnbWFpbicsXG4gICdtYXAnLFxuICAnbWFyaycsXG4gICdtYXJxdWVlJyxcbiAgJ21lbnUnLFxuICAnbWVudWl0ZW0nLFxuICAnbWV0ZXInLFxuICAnbmF2JyxcbiAgJ25vYnInLFxuICAnb2wnLFxuICAnb3B0Z3JvdXAnLFxuICAnb3B0aW9uJyxcbiAgJ291dHB1dCcsXG4gICdwJyxcbiAgJ3BpY3R1cmUnLFxuICAncHJlJyxcbiAgJ3Byb2dyZXNzJyxcbiAgJ3EnLFxuICAncnAnLFxuICAncnQnLFxuICAncnVieScsXG4gICdzJyxcbiAgJ3NhbXAnLFxuICAnc2VhcmNoJyxcbiAgJ3NlY3Rpb24nLFxuICAnc2VsZWN0JyxcbiAgJ3NoYWRvdycsXG4gICdzbG90JyxcbiAgJ3NtYWxsJyxcbiAgJ3NvdXJjZScsXG4gICdzcGFjZXInLFxuICAnc3BhbicsXG4gICdzdHJpa2UnLFxuICAnc3Ryb25nJyxcbiAgJ3N0eWxlJyxcbiAgJ3N1YicsXG4gICdzdW1tYXJ5JyxcbiAgJ3N1cCcsXG4gICd0YWJsZScsXG4gICd0Ym9keScsXG4gICd0ZCcsXG4gICd0ZW1wbGF0ZScsXG4gICd0ZXh0YXJlYScsXG4gICd0Zm9vdCcsXG4gICd0aCcsXG4gICd0aGVhZCcsXG4gICd0aW1lJyxcbiAgJ3RyJyxcbiAgJ3RyYWNrJyxcbiAgJ3R0JyxcbiAgJ3UnLFxuICAndWwnLFxuICAndmFyJyxcbiAgJ3ZpZGVvJyxcbiAgJ3dicicsXG5dIGFzIGNvbnN0KTtcblxuZXhwb3J0IGNvbnN0IHN2ZyA9IGZyZWV6ZShbXG4gICdzdmcnLFxuICAnYScsXG4gICdhbHRnbHlwaCcsXG4gICdhbHRnbHlwaGRlZicsXG4gICdhbHRnbHlwaGl0ZW0nLFxuICAnYW5pbWF0ZWNvbG9yJyxcbiAgJ2FuaW1hdGVtb3Rpb24nLFxuICAnYW5pbWF0ZXRyYW5zZm9ybScsXG4gICdjaXJjbGUnLFxuICAnY2xpcHBhdGgnLFxuICAnZGVmcycsXG4gICdkZXNjJyxcbiAgJ2VsbGlwc2UnLFxuICAnZW50ZXJrZXloaW50JyxcbiAgJ2V4cG9ydHBhcnRzJyxcbiAgJ2ZpbHRlcicsXG4gICdmb250JyxcbiAgJ2cnLFxuICAnZ2x5cGgnLFxuICAnZ2x5cGhyZWYnLFxuICAnaGtlcm4nLFxuICAnaW1hZ2UnLFxuICAnaW5wdXRtb2RlJyxcbiAgJ2xpbmUnLFxuICAnbGluZWFyZ3JhZGllbnQnLFxuICAnbWFya2VyJyxcbiAgJ21hc2snLFxuICAnbWV0YWRhdGEnLFxuICAnbXBhdGgnLFxuICAncGFydCcsXG4gICdwYXRoJyxcbiAgJ3BhdHRlcm4nLFxuICAncG9seWdvbicsXG4gICdwb2x5bGluZScsXG4gICdyYWRpYWxncmFkaWVudCcsXG4gICdyZWN0JyxcbiAgJ3N0b3AnLFxuICAnc3R5bGUnLFxuICAnc3dpdGNoJyxcbiAgJ3N5bWJvbCcsXG4gICd0ZXh0JyxcbiAgJ3RleHRwYXRoJyxcbiAgJ3RpdGxlJyxcbiAgJ3RyZWYnLFxuICAndHNwYW4nLFxuICAndmlldycsXG4gICd2a2VybicsXG5dIGFzIGNvbnN0KTtcblxuZXhwb3J0IGNvbnN0IHN2Z0ZpbHRlcnMgPSBmcmVlemUoW1xuICAnZmVCbGVuZCcsXG4gICdmZUNvbG9yTWF0cml4JyxcbiAgJ2ZlQ29tcG9uZW50VHJhbnNmZXInLFxuICAnZmVDb21wb3NpdGUnLFxuICAnZmVDb252b2x2ZU1hdHJpeCcsXG4gICdmZURpZmZ1c2VMaWdodGluZycsXG4gICdmZURpc3BsYWNlbWVudE1hcCcsXG4gICdmZURpc3RhbnRMaWdodCcsXG4gICdmZURyb3BTaGFkb3cnLFxuICAnZmVGbG9vZCcsXG4gICdmZUZ1bmNBJyxcbiAgJ2ZlRnVuY0InLFxuICAnZmVGdW5jRycsXG4gICdmZUZ1bmNSJyxcbiAgJ2ZlR2F1c3NpYW5CbHVyJyxcbiAgJ2ZlSW1hZ2UnLFxuICAnZmVNZXJnZScsXG4gICdmZU1lcmdlTm9kZScsXG4gICdmZU1vcnBob2xvZ3knLFxuICAnZmVPZmZzZXQnLFxuICAnZmVQb2ludExpZ2h0JyxcbiAgJ2ZlU3BlY3VsYXJMaWdodGluZycsXG4gICdmZVNwb3RMaWdodCcsXG4gICdmZVRpbGUnLFxuICAnZmVUdXJidWxlbmNlJyxcbl0gYXMgY29uc3QpO1xuXG4vLyBMaXN0IG9mIFNWRyBlbGVtZW50cyB0aGF0IGFyZSBkaXNhbGxvd2VkIGJ5IGRlZmF1bHQuXG4vLyBXZSBzdGlsbCBuZWVkIHRvIGtub3cgdGhlbSBzbyB0aGF0IHdlIGNhbiBkbyBuYW1lc3BhY2Vcbi8vIGNoZWNrcyBwcm9wZXJseSBpbiBjYXNlIG9uZSB3YW50cyB0byBhZGQgdGhlbSB0b1xuLy8gYWxsb3ctbGlzdC5cbmV4cG9ydCBjb25zdCBzdmdEaXNhbGxvd2VkID0gZnJlZXplKFtcbiAgJ2FuaW1hdGUnLFxuICAnY29sb3ItcHJvZmlsZScsXG4gICdjdXJzb3InLFxuICAnZGlzY2FyZCcsXG4gICdmb250LWZhY2UnLFxuICAnZm9udC1mYWNlLWZvcm1hdCcsXG4gICdmb250LWZhY2UtbmFtZScsXG4gICdmb250LWZhY2Utc3JjJyxcbiAgJ2ZvbnQtZmFjZS11cmknLFxuICAnZm9yZWlnbm9iamVjdCcsXG4gICdoYXRjaCcsXG4gICdoYXRjaHBhdGgnLFxuICAnbWVzaCcsXG4gICdtZXNoZ3JhZGllbnQnLFxuICAnbWVzaHBhdGNoJyxcbiAgJ21lc2hyb3cnLFxuICAnbWlzc2luZy1nbHlwaCcsXG4gICdzY3JpcHQnLFxuICAnc2V0JyxcbiAgJ3NvbGlkY29sb3InLFxuICAndW5rbm93bicsXG4gICd1c2UnLFxuXSBhcyBjb25zdCk7XG5cbmV4cG9ydCBjb25zdCBtYXRoTWwgPSBmcmVlemUoW1xuICAnbWF0aCcsXG4gICdtZW5jbG9zZScsXG4gICdtZXJyb3InLFxuICAnbWZlbmNlZCcsXG4gICdtZnJhYycsXG4gICdtZ2x5cGgnLFxuICAnbWknLFxuICAnbWxhYmVsZWR0cicsXG4gICdtbXVsdGlzY3JpcHRzJyxcbiAgJ21uJyxcbiAgJ21vJyxcbiAgJ21vdmVyJyxcbiAgJ21wYWRkZWQnLFxuICAnbXBoYW50b20nLFxuICAnbXJvb3QnLFxuICAnbXJvdycsXG4gICdtcycsXG4gICdtc3BhY2UnLFxuICAnbXNxcnQnLFxuICAnbXN0eWxlJyxcbiAgJ21zdWInLFxuICAnbXN1cCcsXG4gICdtc3Vic3VwJyxcbiAgJ210YWJsZScsXG4gICdtdGQnLFxuICAnbXRleHQnLFxuICAnbXRyJyxcbiAgJ211bmRlcicsXG4gICdtdW5kZXJvdmVyJyxcbiAgJ21wcmVzY3JpcHRzJyxcbl0gYXMgY29uc3QpO1xuXG4vLyBTaW1pbGFybHkgdG8gU1ZHLCB3ZSB3YW50IHRvIGtub3cgYWxsIE1hdGhNTCBlbGVtZW50cyxcbi8vIGV2ZW4gdGhvc2UgdGhhdCB3ZSBkaXNhbGxvdyBieSBkZWZhdWx0LlxuZXhwb3J0IGNvbnN0IG1hdGhNbERpc2FsbG93ZWQgPSBmcmVlemUoW1xuICAnbWFjdGlvbicsXG4gICdtYWxpZ25ncm91cCcsXG4gICdtYWxpZ25tYXJrJyxcbiAgJ21sb25nZGl2JyxcbiAgJ21zY2FycmllcycsXG4gICdtc2NhcnJ5JyxcbiAgJ21zZ3JvdXAnLFxuICAnbXN0YWNrJyxcbiAgJ21zbGluZScsXG4gICdtc3JvdycsXG4gICdzZW1hbnRpY3MnLFxuICAnYW5ub3RhdGlvbicsXG4gICdhbm5vdGF0aW9uLXhtbCcsXG4gICdtcHJlc2NyaXB0cycsXG4gICdub25lJyxcbl0gYXMgY29uc3QpO1xuXG5leHBvcnQgY29uc3QgdGV4dCA9IGZyZWV6ZShbJyN0ZXh0J10gYXMgY29uc3QpO1xuIiwgImltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5leHBvcnQgY29uc3QgaHRtbCA9IGZyZWV6ZShbXG4gICdhY2NlcHQnLFxuICAnYWN0aW9uJyxcbiAgJ2FsaWduJyxcbiAgJ2FsdCcsXG4gICdhdXRvY2FwaXRhbGl6ZScsXG4gICdhdXRvY29tcGxldGUnLFxuICAnYXV0b3BpY3R1cmVpbnBpY3R1cmUnLFxuICAnYXV0b3BsYXknLFxuICAnYmFja2dyb3VuZCcsXG4gICdiZ2NvbG9yJyxcbiAgJ2JvcmRlcicsXG4gICdjYXB0dXJlJyxcbiAgJ2NlbGxwYWRkaW5nJyxcbiAgJ2NlbGxzcGFjaW5nJyxcbiAgJ2NoZWNrZWQnLFxuICAnY2l0ZScsXG4gICdjbGFzcycsXG4gICdjbGVhcicsXG4gICdjb2xvcicsXG4gICdjb2xzJyxcbiAgJ2NvbHNwYW4nLFxuICAnY29udHJvbHMnLFxuICAnY29udHJvbHNsaXN0JyxcbiAgJ2Nvb3JkcycsXG4gICdjcm9zc29yaWdpbicsXG4gICdkYXRldGltZScsXG4gICdkZWNvZGluZycsXG4gICdkZWZhdWx0JyxcbiAgJ2RpcicsXG4gICdkaXNhYmxlZCcsXG4gICdkaXNhYmxlcGljdHVyZWlucGljdHVyZScsXG4gICdkaXNhYmxlcmVtb3RlcGxheWJhY2snLFxuICAnZG93bmxvYWQnLFxuICAnZHJhZ2dhYmxlJyxcbiAgJ2VuY3R5cGUnLFxuICAnZW50ZXJrZXloaW50JyxcbiAgJ2V4cG9ydHBhcnRzJyxcbiAgJ2ZhY2UnLFxuICAnZm9yJyxcbiAgJ2hlYWRlcnMnLFxuICAnaGVpZ2h0JyxcbiAgJ2hpZGRlbicsXG4gICdoaWdoJyxcbiAgJ2hyZWYnLFxuICAnaHJlZmxhbmcnLFxuICAnaWQnLFxuICAnaW5lcnQnLFxuICAnaW5wdXRtb2RlJyxcbiAgJ2ludGVncml0eScsXG4gICdpc21hcCcsXG4gICdraW5kJyxcbiAgJ2xhYmVsJyxcbiAgJ2xhbmcnLFxuICAnbGlzdCcsXG4gICdsb2FkaW5nJyxcbiAgJ2xvb3AnLFxuICAnbG93JyxcbiAgJ21heCcsXG4gICdtYXhsZW5ndGgnLFxuICAnbWVkaWEnLFxuICAnbWV0aG9kJyxcbiAgJ21pbicsXG4gICdtaW5sZW5ndGgnLFxuICAnbXVsdGlwbGUnLFxuICAnbXV0ZWQnLFxuICAnbmFtZScsXG4gICdub25jZScsXG4gICdub3NoYWRlJyxcbiAgJ25vdmFsaWRhdGUnLFxuICAnbm93cmFwJyxcbiAgJ29wZW4nLFxuICAnb3B0aW11bScsXG4gICdwYXJ0JyxcbiAgJ3BhdHRlcm4nLFxuICAncGxhY2Vob2xkZXInLFxuICAncGxheXNpbmxpbmUnLFxuICAncG9wb3ZlcicsXG4gICdwb3BvdmVydGFyZ2V0JyxcbiAgJ3BvcG92ZXJ0YXJnZXRhY3Rpb24nLFxuICAncG9zdGVyJyxcbiAgJ3ByZWxvYWQnLFxuICAncHViZGF0ZScsXG4gICdyYWRpb2dyb3VwJyxcbiAgJ3JlYWRvbmx5JyxcbiAgJ3JlbCcsXG4gICdyZXF1aXJlZCcsXG4gICdyZXYnLFxuICAncmV2ZXJzZWQnLFxuICAncm9sZScsXG4gICdyb3dzJyxcbiAgJ3Jvd3NwYW4nLFxuICAnc3BlbGxjaGVjaycsXG4gICdzY29wZScsXG4gICdzZWxlY3RlZCcsXG4gICdzaGFwZScsXG4gICdzaXplJyxcbiAgJ3NpemVzJyxcbiAgJ3Nsb3QnLFxuICAnc3BhbicsXG4gICdzcmNsYW5nJyxcbiAgJ3N0YXJ0JyxcbiAgJ3NyYycsXG4gICdzcmNzZXQnLFxuICAnc3RlcCcsXG4gICdzdHlsZScsXG4gICdzdW1tYXJ5JyxcbiAgJ3RhYmluZGV4JyxcbiAgJ3RpdGxlJyxcbiAgJ3RyYW5zbGF0ZScsXG4gICd0eXBlJyxcbiAgJ3VzZW1hcCcsXG4gICd2YWxpZ24nLFxuICAndmFsdWUnLFxuICAnd2lkdGgnLFxuICAnd3JhcCcsXG4gICd4bWxucycsXG4gICdzbG90Jyxcbl0gYXMgY29uc3QpO1xuXG5leHBvcnQgY29uc3Qgc3ZnID0gZnJlZXplKFtcbiAgJ2FjY2VudC1oZWlnaHQnLFxuICAnYWNjdW11bGF0ZScsXG4gICdhZGRpdGl2ZScsXG4gICdhbGlnbm1lbnQtYmFzZWxpbmUnLFxuICAnYW1wbGl0dWRlJyxcbiAgJ2FzY2VudCcsXG4gICdhdHRyaWJ1dGVuYW1lJyxcbiAgJ2F0dHJpYnV0ZXR5cGUnLFxuICAnYXppbXV0aCcsXG4gICdiYXNlZnJlcXVlbmN5JyxcbiAgJ2Jhc2VsaW5lLXNoaWZ0JyxcbiAgJ2JlZ2luJyxcbiAgJ2JpYXMnLFxuICAnYnknLFxuICAnY2xhc3MnLFxuICAnY2xpcCcsXG4gICdjbGlwcGF0aHVuaXRzJyxcbiAgJ2NsaXAtcGF0aCcsXG4gICdjbGlwLXJ1bGUnLFxuICAnY29sb3InLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbicsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnLFxuICAnY29sb3ItcHJvZmlsZScsXG4gICdjb2xvci1yZW5kZXJpbmcnLFxuICAnY3gnLFxuICAnY3knLFxuICAnZCcsXG4gICdkeCcsXG4gICdkeScsXG4gICdkaWZmdXNlY29uc3RhbnQnLFxuICAnZGlyZWN0aW9uJyxcbiAgJ2Rpc3BsYXknLFxuICAnZGl2aXNvcicsXG4gICdkdXInLFxuICAnZWRnZW1vZGUnLFxuICAnZWxldmF0aW9uJyxcbiAgJ2VuZCcsXG4gICdleHBvbmVudCcsXG4gICdmaWxsJyxcbiAgJ2ZpbGwtb3BhY2l0eScsXG4gICdmaWxsLXJ1bGUnLFxuICAnZmlsdGVyJyxcbiAgJ2ZpbHRlcnVuaXRzJyxcbiAgJ2Zsb29kLWNvbG9yJyxcbiAgJ2Zsb29kLW9wYWNpdHknLFxuICAnZm9udC1mYW1pbHknLFxuICAnZm9udC1zaXplJyxcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnLFxuICAnZm9udC1zdHJldGNoJyxcbiAgJ2ZvbnQtc3R5bGUnLFxuICAnZm9udC12YXJpYW50JyxcbiAgJ2ZvbnQtd2VpZ2h0JyxcbiAgJ2Z4JyxcbiAgJ2Z5JyxcbiAgJ2cxJyxcbiAgJ2cyJyxcbiAgJ2dseXBoLW5hbWUnLFxuICAnZ2x5cGhyZWYnLFxuICAnZ3JhZGllbnR1bml0cycsXG4gICdncmFkaWVudHRyYW5zZm9ybScsXG4gICdoZWlnaHQnLFxuICAnaHJlZicsXG4gICdpZCcsXG4gICdpbWFnZS1yZW5kZXJpbmcnLFxuICAnaW4nLFxuICAnaW4yJyxcbiAgJ2ludGVyY2VwdCcsXG4gICdrJyxcbiAgJ2sxJyxcbiAgJ2syJyxcbiAgJ2szJyxcbiAgJ2s0JyxcbiAgJ2tlcm5pbmcnLFxuICAna2V5cG9pbnRzJyxcbiAgJ2tleXNwbGluZXMnLFxuICAna2V5dGltZXMnLFxuICAnbGFuZycsXG4gICdsZW5ndGhhZGp1c3QnLFxuICAnbGV0dGVyLXNwYWNpbmcnLFxuICAna2VybmVsbWF0cml4JyxcbiAgJ2tlcm5lbHVuaXRsZW5ndGgnLFxuICAnbGlnaHRpbmctY29sb3InLFxuICAnbG9jYWwnLFxuICAnbWFya2VyLWVuZCcsXG4gICdtYXJrZXItbWlkJyxcbiAgJ21hcmtlci1zdGFydCcsXG4gICdtYXJrZXJoZWlnaHQnLFxuICAnbWFya2VydW5pdHMnLFxuICAnbWFya2Vyd2lkdGgnLFxuICAnbWFza2NvbnRlbnR1bml0cycsXG4gICdtYXNrdW5pdHMnLFxuICAnbWF4JyxcbiAgJ21hc2snLFxuICAnbWFzay10eXBlJyxcbiAgJ21lZGlhJyxcbiAgJ21ldGhvZCcsXG4gICdtb2RlJyxcbiAgJ21pbicsXG4gICduYW1lJyxcbiAgJ251bW9jdGF2ZXMnLFxuICAnb2Zmc2V0JyxcbiAgJ29wZXJhdG9yJyxcbiAgJ29wYWNpdHknLFxuICAnb3JkZXInLFxuICAnb3JpZW50JyxcbiAgJ29yaWVudGF0aW9uJyxcbiAgJ29yaWdpbicsXG4gICdvdmVyZmxvdycsXG4gICdwYWludC1vcmRlcicsXG4gICdwYXRoJyxcbiAgJ3BhdGhsZW5ndGgnLFxuICAncGF0dGVybmNvbnRlbnR1bml0cycsXG4gICdwYXR0ZXJudHJhbnNmb3JtJyxcbiAgJ3BhdHRlcm51bml0cycsXG4gICdwb2ludHMnLFxuICAncHJlc2VydmVhbHBoYScsXG4gICdwcmVzZXJ2ZWFzcGVjdHJhdGlvJyxcbiAgJ3ByaW1pdGl2ZXVuaXRzJyxcbiAgJ3InLFxuICAncngnLFxuICAncnknLFxuICAncmFkaXVzJyxcbiAgJ3JlZngnLFxuICAncmVmeScsXG4gICdyZXBlYXRjb3VudCcsXG4gICdyZXBlYXRkdXInLFxuICAncmVzdGFydCcsXG4gICdyZXN1bHQnLFxuICAncm90YXRlJyxcbiAgJ3NjYWxlJyxcbiAgJ3NlZWQnLFxuICAnc2hhcGUtcmVuZGVyaW5nJyxcbiAgJ3Nsb3BlJyxcbiAgJ3NwZWN1bGFyY29uc3RhbnQnLFxuICAnc3BlY3VsYXJleHBvbmVudCcsXG4gICdzcHJlYWRtZXRob2QnLFxuICAnc3RhcnRvZmZzZXQnLFxuICAnc3RkZGV2aWF0aW9uJyxcbiAgJ3N0aXRjaHRpbGVzJyxcbiAgJ3N0b3AtY29sb3InLFxuICAnc3RvcC1vcGFjaXR5JyxcbiAgJ3N0cm9rZS1kYXNoYXJyYXknLFxuICAnc3Ryb2tlLWRhc2hvZmZzZXQnLFxuICAnc3Ryb2tlLWxpbmVjYXAnLFxuICAnc3Ryb2tlLWxpbmVqb2luJyxcbiAgJ3N0cm9rZS1taXRlcmxpbWl0JyxcbiAgJ3N0cm9rZS1vcGFjaXR5JyxcbiAgJ3N0cm9rZScsXG4gICdzdHJva2Utd2lkdGgnLFxuICAnc3R5bGUnLFxuICAnc3VyZmFjZXNjYWxlJyxcbiAgJ3N5c3RlbWxhbmd1YWdlJyxcbiAgJ3RhYmluZGV4JyxcbiAgJ3RhYmxldmFsdWVzJyxcbiAgJ3RhcmdldHgnLFxuICAndGFyZ2V0eScsXG4gICd0cmFuc2Zvcm0nLFxuICAndHJhbnNmb3JtLW9yaWdpbicsXG4gICd0ZXh0LWFuY2hvcicsXG4gICd0ZXh0LWRlY29yYXRpb24nLFxuICAndGV4dC1yZW5kZXJpbmcnLFxuICAndGV4dGxlbmd0aCcsXG4gICd0eXBlJyxcbiAgJ3UxJyxcbiAgJ3UyJyxcbiAgJ3VuaWNvZGUnLFxuICAndmFsdWVzJyxcbiAgJ3ZpZXdib3gnLFxuICAndmlzaWJpbGl0eScsXG4gICd2ZXJzaW9uJyxcbiAgJ3ZlcnQtYWR2LXknLFxuICAndmVydC1vcmlnaW4teCcsXG4gICd2ZXJ0LW9yaWdpbi15JyxcbiAgJ3dpZHRoJyxcbiAgJ3dvcmQtc3BhY2luZycsXG4gICd3cmFwJyxcbiAgJ3dyaXRpbmctbW9kZScsXG4gICd4Y2hhbm5lbHNlbGVjdG9yJyxcbiAgJ3ljaGFubmVsc2VsZWN0b3InLFxuICAneCcsXG4gICd4MScsXG4gICd4MicsXG4gICd4bWxucycsXG4gICd5JyxcbiAgJ3kxJyxcbiAgJ3kyJyxcbiAgJ3onLFxuICAnem9vbWFuZHBhbicsXG5dIGFzIGNvbnN0KTtcblxuZXhwb3J0IGNvbnN0IG1hdGhNbCA9IGZyZWV6ZShbXG4gICdhY2NlbnQnLFxuICAnYWNjZW50dW5kZXInLFxuICAnYWxpZ24nLFxuICAnYmV2ZWxsZWQnLFxuICAnY2xvc2UnLFxuICAnY29sdW1uc2FsaWduJyxcbiAgJ2NvbHVtbmxpbmVzJyxcbiAgJ2NvbHVtbnNwYW4nLFxuICAnZGVub21hbGlnbicsXG4gICdkZXB0aCcsXG4gICdkaXInLFxuICAnZGlzcGxheScsXG4gICdkaXNwbGF5c3R5bGUnLFxuICAnZW5jb2RpbmcnLFxuICAnZmVuY2UnLFxuICAnZnJhbWUnLFxuICAnaGVpZ2h0JyxcbiAgJ2hyZWYnLFxuICAnaWQnLFxuICAnbGFyZ2VvcCcsXG4gICdsZW5ndGgnLFxuICAnbGluZXRoaWNrbmVzcycsXG4gICdsc3BhY2UnLFxuICAnbHF1b3RlJyxcbiAgJ21hdGhiYWNrZ3JvdW5kJyxcbiAgJ21hdGhjb2xvcicsXG4gICdtYXRoc2l6ZScsXG4gICdtYXRodmFyaWFudCcsXG4gICdtYXhzaXplJyxcbiAgJ21pbnNpemUnLFxuICAnbW92YWJsZWxpbWl0cycsXG4gICdub3RhdGlvbicsXG4gICdudW1hbGlnbicsXG4gICdvcGVuJyxcbiAgJ3Jvd2FsaWduJyxcbiAgJ3Jvd2xpbmVzJyxcbiAgJ3Jvd3NwYWNpbmcnLFxuICAncm93c3BhbicsXG4gICdyc3BhY2UnLFxuICAncnF1b3RlJyxcbiAgJ3NjcmlwdGxldmVsJyxcbiAgJ3NjcmlwdG1pbnNpemUnLFxuICAnc2NyaXB0c2l6ZW11bHRpcGxpZXInLFxuICAnc2VsZWN0aW9uJyxcbiAgJ3NlcGFyYXRvcicsXG4gICdzZXBhcmF0b3JzJyxcbiAgJ3N0cmV0Y2h5JyxcbiAgJ3N1YnNjcmlwdHNoaWZ0JyxcbiAgJ3N1cHNjcmlwdHNoaWZ0JyxcbiAgJ3N5bW1ldHJpYycsXG4gICd2b2Zmc2V0JyxcbiAgJ3dpZHRoJyxcbiAgJ3htbG5zJyxcbl0pO1xuXG5leHBvcnQgY29uc3QgeG1sID0gZnJlZXplKFtcbiAgJ3hsaW5rOmhyZWYnLFxuICAneG1sOmlkJyxcbiAgJ3hsaW5rOnRpdGxlJyxcbiAgJ3htbDpzcGFjZScsXG4gICd4bWxuczp4bGluaycsXG5dIGFzIGNvbnN0KTtcbiIsICJpbXBvcnQgeyBzZWFsIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2JldHRlci1yZWdleFxuZXhwb3J0IGNvbnN0IE1VU1RBQ0hFX0VYUFIgPSBzZWFsKC9cXHtcXHtbXFx3XFxXXSp8W1xcd1xcV10qXFx9XFx9L2dtKTsgLy8gU3BlY2lmeSB0ZW1wbGF0ZSBkZXRlY3Rpb24gcmVnZXggZm9yIFNBRkVfRk9SX1RFTVBMQVRFUyBtb2RlXG5leHBvcnQgY29uc3QgRVJCX0VYUFIgPSBzZWFsKC88JVtcXHdcXFddKnxbXFx3XFxXXSolPi9nbSk7XG5leHBvcnQgY29uc3QgVE1QTElUX0VYUFIgPSBzZWFsKC9cXCRcXHtbXFx3XFxXXSovZ20pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHVuaWNvcm4vYmV0dGVyLXJlZ2V4XG5leHBvcnQgY29uc3QgREFUQV9BVFRSID0gc2VhbCgvXmRhdGEtW1xcLVxcdy5cXHUwMEI3LVxcdUZGRkZdKyQvKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuZXhwb3J0IGNvbnN0IEFSSUFfQVRUUiA9IHNlYWwoL15hcmlhLVtcXC1cXHddKyQvKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuZXhwb3J0IGNvbnN0IElTX0FMTE9XRURfVVJJID0gc2VhbChcbiAgL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwfG1hdHJpeCk6fFteYS16XXxbYS16Ky5cXC1dKyg/OlteYS16Ky5cXC06XXwkKSkvaSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4pO1xuZXhwb3J0IGNvbnN0IElTX1NDUklQVF9PUl9EQVRBID0gc2VhbCgvXig/OlxcdytzY3JpcHR8ZGF0YSk6L2kpO1xuZXhwb3J0IGNvbnN0IEFUVFJfV0hJVEVTUEFDRSA9IHNlYWwoXG4gIC9bXFx1MDAwMC1cXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUxODBFXFx1MjAwMC1cXHUyMDI5XFx1MjA1RlxcdTMwMDBdL2cgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250cm9sLXJlZ2V4XG4pO1xuZXhwb3J0IGNvbnN0IERPQ1RZUEVfTkFNRSA9IHNlYWwoL15odG1sJC9pKTtcbmV4cG9ydCBjb25zdCBDVVNUT01fRUxFTUVOVCA9IHNlYWwoL15bYS16XVsuXFx3XSooLVsuXFx3XSspKyQvaSk7XG4iLCAiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFRydXN0ZWRIVE1MLFxuICBUcnVzdGVkVHlwZXNXaW5kb3csXG59IGZyb20gJ3RydXN0ZWQtdHlwZXMvbGliL2luZGV4LmpzJztcbmltcG9ydCB0eXBlIHsgQ29uZmlnLCBVc2VQcm9maWxlc0NvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCAqIGFzIFRBR1MgZnJvbSAnLi90YWdzLmpzJztcbmltcG9ydCAqIGFzIEFUVFJTIGZyb20gJy4vYXR0cnMuanMnO1xuaW1wb3J0ICogYXMgRVhQUkVTU0lPTlMgZnJvbSAnLi9yZWdleHAuanMnO1xuaW1wb3J0IHtcbiAgYWRkVG9TZXQsXG4gIGNsb25lLFxuICBlbnRyaWVzLFxuICBmcmVlemUsXG4gIGFycmF5Rm9yRWFjaCxcbiAgYXJyYXlMYXN0SW5kZXhPZixcbiAgYXJyYXlQb3AsXG4gIGFycmF5UHVzaCxcbiAgYXJyYXlTcGxpY2UsXG4gIHN0cmluZ01hdGNoLFxuICBzdHJpbmdSZXBsYWNlLFxuICBzdHJpbmdUb0xvd2VyQ2FzZSxcbiAgc3RyaW5nVG9TdHJpbmcsXG4gIHN0cmluZ0luZGV4T2YsXG4gIHN0cmluZ1RyaW0sXG4gIHJlZ0V4cFRlc3QsXG4gIHR5cGVFcnJvckNyZWF0ZSxcbiAgbG9va3VwR2V0dGVyLFxuICBjcmVhdGUsXG4gIG9iamVjdEhhc093blByb3BlcnR5LFxufSBmcm9tICcuL3V0aWxzLmpzJztcblxuZXhwb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5cbmRlY2xhcmUgY29uc3QgVkVSU0lPTjogc3RyaW5nO1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTm9kZS9ub2RlVHlwZVxuY29uc3QgTk9ERV9UWVBFID0ge1xuICBlbGVtZW50OiAxLFxuICBhdHRyaWJ1dGU6IDIsXG4gIHRleHQ6IDMsXG4gIGNkYXRhU2VjdGlvbjogNCxcbiAgZW50aXR5UmVmZXJlbmNlOiA1LCAvLyBEZXByZWNhdGVkXG4gIGVudGl0eU5vZGU6IDYsIC8vIERlcHJlY2F0ZWRcbiAgcHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbjogNyxcbiAgY29tbWVudDogOCxcbiAgZG9jdW1lbnQ6IDksXG4gIGRvY3VtZW50VHlwZTogMTAsXG4gIGRvY3VtZW50RnJhZ21lbnQ6IDExLFxuICBub3RhdGlvbjogMTIsIC8vIERlcHJlY2F0ZWRcbn07XG5cbmNvbnN0IGdldEdsb2JhbCA9IGZ1bmN0aW9uICgpOiBXaW5kb3dMaWtlIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHdpbmRvdztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5vLW9wIHBvbGljeSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG4gKiBEb24ndCBleHBvcnQgdGhpcyBmdW5jdGlvbiBvdXRzaWRlIHRoaXMgbW9kdWxlIVxuICogQHBhcmFtIHRydXN0ZWRUeXBlcyBUaGUgcG9saWN5IGZhY3RvcnkuXG4gKiBAcGFyYW0gcHVyaWZ5SG9zdEVsZW1lbnQgVGhlIFNjcmlwdCBlbGVtZW50IHVzZWQgdG8gbG9hZCBET01QdXJpZnkgKHRvIGRldGVybWluZSBwb2xpY3kgbmFtZSBzdWZmaXgpLlxuICogQHJldHVybiBUaGUgcG9saWN5IGNyZWF0ZWQgKG9yIG51bGwsIGlmIFRydXN0ZWQgVHlwZXNcbiAqIGFyZSBub3Qgc3VwcG9ydGVkIG9yIGNyZWF0aW5nIHRoZSBwb2xpY3kgZmFpbGVkKS5cbiAqL1xuY29uc3QgX2NyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeSA9IGZ1bmN0aW9uIChcbiAgdHJ1c3RlZFR5cGVzOiBUcnVzdGVkVHlwZVBvbGljeUZhY3RvcnksXG4gIHB1cmlmeUhvc3RFbGVtZW50OiBIVE1MU2NyaXB0RWxlbWVudFxuKSB7XG4gIGlmIChcbiAgICB0eXBlb2YgdHJ1c3RlZFR5cGVzICE9PSAnb2JqZWN0JyB8fFxuICAgIHR5cGVvZiB0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5ICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQWxsb3cgdGhlIGNhbGxlcnMgdG8gY29udHJvbCB0aGUgdW5pcXVlIHBvbGljeSBuYW1lXG4gIC8vIGJ5IGFkZGluZyBhIGRhdGEtdHQtcG9saWN5LXN1ZmZpeCB0byB0aGUgc2NyaXB0IGVsZW1lbnQgd2l0aCB0aGUgRE9NUHVyaWZ5LlxuICAvLyBQb2xpY3kgY3JlYXRpb24gd2l0aCBkdXBsaWNhdGUgbmFtZXMgdGhyb3dzIGluIFRydXN0ZWQgVHlwZXMuXG4gIGxldCBzdWZmaXggPSBudWxsO1xuICBjb25zdCBBVFRSX05BTUUgPSAnZGF0YS10dC1wb2xpY3ktc3VmZml4JztcbiAgaWYgKHB1cmlmeUhvc3RFbGVtZW50ICYmIHB1cmlmeUhvc3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSX05BTUUpKSB7XG4gICAgc3VmZml4ID0gcHVyaWZ5SG9zdEVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJfTkFNRSk7XG4gIH1cblxuICBjb25zdCBwb2xpY3lOYW1lID0gJ2RvbXB1cmlmeScgKyAoc3VmZml4ID8gJyMnICsgc3VmZml4IDogJycpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIHRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kocG9saWN5TmFtZSwge1xuICAgICAgY3JlYXRlSFRNTChodG1sKSB7XG4gICAgICAgIHJldHVybiBodG1sO1xuICAgICAgfSxcbiAgICAgIGNyZWF0ZVNjcmlwdFVSTChzY3JpcHRVcmwpIHtcbiAgICAgICAgcmV0dXJuIHNjcmlwdFVybDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICAvLyBQb2xpY3kgY3JlYXRpb24gZmFpbGVkIChtb3N0IGxpa2VseSBhbm90aGVyIERPTVB1cmlmeSBzY3JpcHQgaGFzXG4gICAgLy8gYWxyZWFkeSBydW4pLiBTa2lwIGNyZWF0aW5nIHRoZSBwb2xpY3ksIGFzIHRoaXMgd2lsbCBvbmx5IGNhdXNlIGVycm9yc1xuICAgIC8vIGlmIFRUIGFyZSBlbmZvcmNlZC5cbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnVHJ1c3RlZFR5cGVzIHBvbGljeSAnICsgcG9saWN5TmFtZSArICcgY291bGQgbm90IGJlIGNyZWF0ZWQuJ1xuICAgICk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IF9jcmVhdGVIb29rc01hcCA9IGZ1bmN0aW9uICgpOiBIb29rc01hcCB7XG4gIHJldHVybiB7XG4gICAgYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXM6IFtdLFxuICAgIGFmdGVyU2FuaXRpemVFbGVtZW50czogW10sXG4gICAgYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTTogW10sXG4gICAgYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzOiBbXSxcbiAgICBiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzOiBbXSxcbiAgICBiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTTogW10sXG4gICAgdXBvblNhbml0aXplQXR0cmlidXRlOiBbXSxcbiAgICB1cG9uU2FuaXRpemVFbGVtZW50OiBbXSxcbiAgICB1cG9uU2FuaXRpemVTaGFkb3dOb2RlOiBbXSxcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZURPTVB1cmlmeSh3aW5kb3c6IFdpbmRvd0xpa2UgPSBnZXRHbG9iYWwoKSk6IERPTVB1cmlmeSB7XG4gIGNvbnN0IERPTVB1cmlmeTogRE9NUHVyaWZ5ID0gKHJvb3Q6IFdpbmRvd0xpa2UpID0+IGNyZWF0ZURPTVB1cmlmeShyb290KTtcblxuICBET01QdXJpZnkudmVyc2lvbiA9IFZFUlNJT047XG5cbiAgRE9NUHVyaWZ5LnJlbW92ZWQgPSBbXTtcblxuICBpZiAoXG4gICAgIXdpbmRvdyB8fFxuICAgICF3aW5kb3cuZG9jdW1lbnQgfHxcbiAgICB3aW5kb3cuZG9jdW1lbnQubm9kZVR5cGUgIT09IE5PREVfVFlQRS5kb2N1bWVudCB8fFxuICAgICF3aW5kb3cuRWxlbWVudFxuICApIHtcbiAgICAvLyBOb3QgcnVubmluZyBpbiBhIGJyb3dzZXIsIHByb3ZpZGUgYSBmYWN0b3J5IGZ1bmN0aW9uXG4gICAgLy8gc28gdGhhdCB5b3UgY2FuIHBhc3MgeW91ciBvd24gV2luZG93XG4gICAgRE9NUHVyaWZ5LmlzU3VwcG9ydGVkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gRE9NUHVyaWZ5O1xuICB9XG5cbiAgbGV0IHsgZG9jdW1lbnQgfSA9IHdpbmRvdztcblxuICBjb25zdCBvcmlnaW5hbERvY3VtZW50ID0gZG9jdW1lbnQ7XG4gIGNvbnN0IGN1cnJlbnRTY3JpcHQ6IEhUTUxTY3JpcHRFbGVtZW50ID1cbiAgICBvcmlnaW5hbERvY3VtZW50LmN1cnJlbnRTY3JpcHQgYXMgSFRNTFNjcmlwdEVsZW1lbnQ7XG4gIGNvbnN0IHtcbiAgICBEb2N1bWVudEZyYWdtZW50LFxuICAgIEhUTUxUZW1wbGF0ZUVsZW1lbnQsXG4gICAgTm9kZSxcbiAgICBFbGVtZW50LFxuICAgIE5vZGVGaWx0ZXIsXG4gICAgTmFtZWROb2RlTWFwID0gd2luZG93Lk5hbWVkTm9kZU1hcCB8fCAod2luZG93IGFzIGFueSkuTW96TmFtZWRBdHRyTWFwLFxuICAgIEhUTUxGb3JtRWxlbWVudCxcbiAgICBET01QYXJzZXIsXG4gICAgdHJ1c3RlZFR5cGVzLFxuICB9ID0gd2luZG93O1xuXG4gIGNvbnN0IEVsZW1lbnRQcm90b3R5cGUgPSBFbGVtZW50LnByb3RvdHlwZTtcblxuICBjb25zdCBjbG9uZU5vZGUgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ2Nsb25lTm9kZScpO1xuICBjb25zdCByZW1vdmUgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ3JlbW92ZScpO1xuICBjb25zdCBnZXROZXh0U2libGluZyA9IGxvb2t1cEdldHRlcihFbGVtZW50UHJvdG90eXBlLCAnbmV4dFNpYmxpbmcnKTtcbiAgY29uc3QgZ2V0Q2hpbGROb2RlcyA9IGxvb2t1cEdldHRlcihFbGVtZW50UHJvdG90eXBlLCAnY2hpbGROb2RlcycpO1xuICBjb25zdCBnZXRQYXJlbnROb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdwYXJlbnROb2RlJyk7XG5cbiAgLy8gQXMgcGVyIGlzc3VlICM0NywgdGhlIHdlYi1jb21wb25lbnRzIHJlZ2lzdHJ5IGlzIGluaGVyaXRlZCBieSBhXG4gIC8vIG5ldyBkb2N1bWVudCBjcmVhdGVkIHZpYSBjcmVhdGVIVE1MRG9jdW1lbnQuIEFzIHBlciB0aGUgc3BlY1xuICAvLyAoaHR0cDovL3czYy5naXRodWIuaW8vd2ViY29tcG9uZW50cy9zcGVjL2N1c3RvbS8jY3JlYXRpbmctYW5kLXBhc3NpbmctcmVnaXN0cmllcylcbiAgLy8gYSBuZXcgZW1wdHkgcmVnaXN0cnkgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGVtcGxhdGUgY29udGVudHMgb3duZXJcbiAgLy8gZG9jdW1lbnQsIHNvIHdlIHVzZSB0aGF0IGFzIG91ciBwYXJlbnQgZG9jdW1lbnQgdG8gZW5zdXJlIG5vdGhpbmdcbiAgLy8gaXMgaW5oZXJpdGVkLlxuICBpZiAodHlwZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgaWYgKHRlbXBsYXRlLmNvbnRlbnQgJiYgdGVtcGxhdGUuY29udGVudC5vd25lckRvY3VtZW50KSB7XG4gICAgICBkb2N1bWVudCA9IHRlbXBsYXRlLmNvbnRlbnQub3duZXJEb2N1bWVudDtcbiAgICB9XG4gIH1cblxuICBsZXQgdHJ1c3RlZFR5cGVzUG9saWN5O1xuICBsZXQgZW1wdHlIVE1MID0gJyc7XG5cbiAgY29uc3Qge1xuICAgIGltcGxlbWVudGF0aW9uLFxuICAgIGNyZWF0ZU5vZGVJdGVyYXRvcixcbiAgICBjcmVhdGVEb2N1bWVudEZyYWdtZW50LFxuICAgIGdldEVsZW1lbnRzQnlUYWdOYW1lLFxuICB9ID0gZG9jdW1lbnQ7XG4gIGNvbnN0IHsgaW1wb3J0Tm9kZSB9ID0gb3JpZ2luYWxEb2N1bWVudDtcblxuICBsZXQgaG9va3MgPSBfY3JlYXRlSG9va3NNYXAoKTtcblxuICAvKipcbiAgICogRXhwb3NlIHdoZXRoZXIgdGhpcyBicm93c2VyIHN1cHBvcnRzIHJ1bm5pbmcgdGhlIGZ1bGwgRE9NUHVyaWZ5LlxuICAgKi9cbiAgRE9NUHVyaWZ5LmlzU3VwcG9ydGVkID1cbiAgICB0eXBlb2YgZW50cmllcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBnZXRQYXJlbnROb2RlID09PSAnZnVuY3Rpb24nICYmXG4gICAgaW1wbGVtZW50YXRpb24gJiZcbiAgICBpbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQgIT09IHVuZGVmaW5lZDtcblxuICBjb25zdCB7XG4gICAgTVVTVEFDSEVfRVhQUixcbiAgICBFUkJfRVhQUixcbiAgICBUTVBMSVRfRVhQUixcbiAgICBEQVRBX0FUVFIsXG4gICAgQVJJQV9BVFRSLFxuICAgIElTX1NDUklQVF9PUl9EQVRBLFxuICAgIEFUVFJfV0hJVEVTUEFDRSxcbiAgICBDVVNUT01fRUxFTUVOVCxcbiAgfSA9IEVYUFJFU1NJT05TO1xuXG4gIGxldCB7IElTX0FMTE9XRURfVVJJIH0gPSBFWFBSRVNTSU9OUztcblxuICAvKipcbiAgICogV2UgY29uc2lkZXIgdGhlIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGJlbG93IHRvIGJlIHNhZmUuIElkZWFsbHlcbiAgICogZG9uJ3QgYWRkIGFueSBuZXcgb25lcyBidXQgZmVlbCBmcmVlIHRvIHJlbW92ZSB1bndhbnRlZCBvbmVzLlxuICAgKi9cblxuICAvKiBhbGxvd2VkIGVsZW1lbnQgbmFtZXMgKi9cbiAgbGV0IEFMTE9XRURfVEFHUyA9IG51bGw7XG4gIGNvbnN0IERFRkFVTFRfQUxMT1dFRF9UQUdTID0gYWRkVG9TZXQoe30sIFtcbiAgICAuLi5UQUdTLmh0bWwsXG4gICAgLi4uVEFHUy5zdmcsXG4gICAgLi4uVEFHUy5zdmdGaWx0ZXJzLFxuICAgIC4uLlRBR1MubWF0aE1sLFxuICAgIC4uLlRBR1MudGV4dCxcbiAgXSk7XG5cbiAgLyogQWxsb3dlZCBhdHRyaWJ1dGUgbmFtZXMgKi9cbiAgbGV0IEFMTE9XRURfQVRUUiA9IG51bGw7XG4gIGNvbnN0IERFRkFVTFRfQUxMT1dFRF9BVFRSID0gYWRkVG9TZXQoe30sIFtcbiAgICAuLi5BVFRSUy5odG1sLFxuICAgIC4uLkFUVFJTLnN2ZyxcbiAgICAuLi5BVFRSUy5tYXRoTWwsXG4gICAgLi4uQVRUUlMueG1sLFxuICBdKTtcblxuICAvKlxuICAgKiBDb25maWd1cmUgaG93IERPTVB1cmlmeSBzaG91bGQgaGFuZGxlIGN1c3RvbSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyBhcyB3ZWxsIGFzIGN1c3RvbWl6ZWQgYnVpbHQtaW4gZWxlbWVudHMuXG4gICAqIEBwcm9wZXJ0eSB7UmVnRXhwfEZ1bmN0aW9ufG51bGx9IHRhZ05hbWVDaGVjayBvbmUgb2YgW251bGwsIHJlZ2V4UGF0dGVybiwgcHJlZGljYXRlXS4gRGVmYXVsdDogYG51bGxgIChkaXNhbGxvdyBhbnkgY3VzdG9tIGVsZW1lbnRzKVxuICAgKiBAcHJvcGVydHkge1JlZ0V4cHxGdW5jdGlvbnxudWxsfSBhdHRyaWJ1dGVOYW1lQ2hlY2sgb25lIG9mIFtudWxsLCByZWdleFBhdHRlcm4sIHByZWRpY2F0ZV0uIERlZmF1bHQ6IGBudWxsYCAoZGlzYWxsb3cgYW55IGF0dHJpYnV0ZXMgbm90IG9uIHRoZSBhbGxvdyBsaXN0KVxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyBhbGxvdyBjdXN0b20gZWxlbWVudHMgZGVyaXZlZCBmcm9tIGJ1aWx0LWlucyBpZiB0aGV5IHBhc3MgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLiBEZWZhdWx0OiBgZmFsc2VgLlxuICAgKi9cbiAgbGV0IENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HID0gT2JqZWN0LnNlYWwoXG4gICAgY3JlYXRlKG51bGwsIHtcbiAgICAgIHRhZ05hbWVDaGVjazoge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlTmFtZUNoZWNrOiB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIH0sXG4gICAgICBhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6IHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSlcbiAgKTtcblxuICAvKiBFeHBsaWNpdGx5IGZvcmJpZGRlbiB0YWdzIChvdmVycmlkZXMgQUxMT1dFRF9UQUdTL0FERF9UQUdTKSAqL1xuICBsZXQgRk9SQklEX1RBR1MgPSBudWxsO1xuXG4gIC8qIEV4cGxpY2l0bHkgZm9yYmlkZGVuIGF0dHJpYnV0ZXMgKG92ZXJyaWRlcyBBTExPV0VEX0FUVFIvQUREX0FUVFIpICovXG4gIGxldCBGT1JCSURfQVRUUiA9IG51bGw7XG5cbiAgLyogQ29uZmlnIG9iamVjdCB0byBzdG9yZSBBRERfVEFHUy9BRERfQVRUUiBmdW5jdGlvbnMgKHdoZW4gdXNlZCBhcyBmdW5jdGlvbnMpICovXG4gIGNvbnN0IEVYVFJBX0VMRU1FTlRfSEFORExJTkcgPSBPYmplY3Quc2VhbChcbiAgICBjcmVhdGUobnVsbCwge1xuICAgICAgdGFnQ2hlY2s6IHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZUNoZWNrOiB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIH0sXG4gICAgfSlcbiAgKTtcblxuICAvKiBEZWNpZGUgaWYgQVJJQSBhdHRyaWJ1dGVzIGFyZSBva2F5ICovXG4gIGxldCBBTExPV19BUklBX0FUVFIgPSB0cnVlO1xuXG4gIC8qIERlY2lkZSBpZiBjdXN0b20gZGF0YSBhdHRyaWJ1dGVzIGFyZSBva2F5ICovXG4gIGxldCBBTExPV19EQVRBX0FUVFIgPSB0cnVlO1xuXG4gIC8qIERlY2lkZSBpZiB1bmtub3duIHByb3RvY29scyBhcmUgb2theSAqL1xuICBsZXQgQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFMgPSBmYWxzZTtcblxuICAvKiBEZWNpZGUgaWYgc2VsZi1jbG9zaW5nIHRhZ3MgaW4gYXR0cmlidXRlcyBhcmUgYWxsb3dlZC5cbiAgICogVXN1YWxseSByZW1vdmVkIGR1ZSB0byBhIG1YU1MgaXNzdWUgaW4galF1ZXJ5IDMuMCAqL1xuICBsZXQgQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSID0gdHJ1ZTtcblxuICAvKiBPdXRwdXQgc2hvdWxkIGJlIHNhZmUgZm9yIGNvbW1vbiB0ZW1wbGF0ZSBlbmdpbmVzLlxuICAgKiBUaGlzIG1lYW5zLCBET01QdXJpZnkgcmVtb3ZlcyBkYXRhIGF0dHJpYnV0ZXMsIG11c3RhY2hlcyBhbmQgRVJCXG4gICAqL1xuICBsZXQgU0FGRV9GT1JfVEVNUExBVEVTID0gZmFsc2U7XG5cbiAgLyogT3V0cHV0IHNob3VsZCBiZSBzYWZlIGV2ZW4gZm9yIFhNTCB1c2VkIHdpdGhpbiBIVE1MIGFuZCBhbGlrZS5cbiAgICogVGhpcyBtZWFucywgRE9NUHVyaWZ5IHJlbW92ZXMgY29tbWVudHMgd2hlbiBjb250YWluaW5nIHJpc2t5IGNvbnRlbnQuXG4gICAqL1xuICBsZXQgU0FGRV9GT1JfWE1MID0gdHJ1ZTtcblxuICAvKiBEZWNpZGUgaWYgZG9jdW1lbnQgd2l0aCA8aHRtbD4uLi4gc2hvdWxkIGJlIHJldHVybmVkICovXG4gIGxldCBXSE9MRV9ET0NVTUVOVCA9IGZhbHNlO1xuXG4gIC8qIFRyYWNrIHdoZXRoZXIgY29uZmlnIGlzIGFscmVhZHkgc2V0IG9uIHRoaXMgaW5zdGFuY2Ugb2YgRE9NUHVyaWZ5LiAqL1xuICBsZXQgU0VUX0NPTkZJRyA9IGZhbHNlO1xuXG4gIC8qIERlY2lkZSBpZiBhbGwgZWxlbWVudHMgKGUuZy4gc3R5bGUsIHNjcmlwdCkgbXVzdCBiZSBjaGlsZHJlbiBvZlxuICAgKiBkb2N1bWVudC5ib2R5LiBCeSBkZWZhdWx0LCBicm93c2VycyBtaWdodCBtb3ZlIHRoZW0gdG8gZG9jdW1lbnQuaGVhZCAqL1xuICBsZXQgRk9SQ0VfQk9EWSA9IGZhbHNlO1xuXG4gIC8qIERlY2lkZSBpZiBhIERPTSBgSFRNTEJvZHlFbGVtZW50YCBzaG91bGQgYmUgcmV0dXJuZWQsIGluc3RlYWQgb2YgYSBodG1sXG4gICAqIHN0cmluZyAob3IgYSBUcnVzdGVkSFRNTCBvYmplY3QgaWYgVHJ1c3RlZCBUeXBlcyBhcmUgc3VwcG9ydGVkKS5cbiAgICogSWYgYFdIT0xFX0RPQ1VNRU5UYCBpcyBlbmFibGVkIGEgYEhUTUxIdG1sRWxlbWVudGAgd2lsbCBiZSByZXR1cm5lZCBpbnN0ZWFkXG4gICAqL1xuICBsZXQgUkVUVVJOX0RPTSA9IGZhbHNlO1xuXG4gIC8qIERlY2lkZSBpZiBhIERPTSBgRG9jdW1lbnRGcmFnbWVudGAgc2hvdWxkIGJlIHJldHVybmVkLCBpbnN0ZWFkIG9mIGEgaHRtbFxuICAgKiBzdHJpbmcgIChvciBhIFRydXN0ZWRIVE1MIG9iamVjdCBpZiBUcnVzdGVkIFR5cGVzIGFyZSBzdXBwb3J0ZWQpICovXG4gIGxldCBSRVRVUk5fRE9NX0ZSQUdNRU5UID0gZmFsc2U7XG5cbiAgLyogVHJ5IHRvIHJldHVybiBhIFRydXN0ZWQgVHlwZSBvYmplY3QgaW5zdGVhZCBvZiBhIHN0cmluZywgcmV0dXJuIGEgc3RyaW5nIGluXG4gICAqIGNhc2UgVHJ1c3RlZCBUeXBlcyBhcmUgbm90IHN1cHBvcnRlZCAgKi9cbiAgbGV0IFJFVFVSTl9UUlVTVEVEX1RZUEUgPSBmYWxzZTtcblxuICAvKiBPdXRwdXQgc2hvdWxkIGJlIGZyZWUgZnJvbSBET00gY2xvYmJlcmluZyBhdHRhY2tzP1xuICAgKiBUaGlzIHNhbml0aXplcyBtYXJrdXBzIG5hbWVkIHdpdGggY29sbGlkaW5nLCBjbG9iYmVyYWJsZSBidWlsdC1pbiBET00gQVBJcy5cbiAgICovXG4gIGxldCBTQU5JVElaRV9ET00gPSB0cnVlO1xuXG4gIC8qIEFjaGlldmUgZnVsbCBET00gQ2xvYmJlcmluZyBwcm90ZWN0aW9uIGJ5IGlzb2xhdGluZyB0aGUgbmFtZXNwYWNlIG9mIG5hbWVkXG4gICAqIHByb3BlcnRpZXMgYW5kIEpTIHZhcmlhYmxlcywgbWl0aWdhdGluZyBhdHRhY2tzIHRoYXQgYWJ1c2UgdGhlIEhUTUwvRE9NIHNwZWMgcnVsZXMuXG4gICAqXG4gICAqIEhUTUwvRE9NIHNwZWMgcnVsZXMgdGhhdCBlbmFibGUgRE9NIENsb2JiZXJpbmc6XG4gICAqICAgLSBOYW1lZCBBY2Nlc3Mgb24gV2luZG93ICjCpzcuMy4zKVxuICAgKiAgIC0gRE9NIFRyZWUgQWNjZXNzb3JzICjCpzMuMS41KVxuICAgKiAgIC0gRm9ybSBFbGVtZW50IFBhcmVudC1DaGlsZCBSZWxhdGlvbnMgKMKnNC4xMC4zKVxuICAgKiAgIC0gSWZyYW1lIHNyY2RvYyAvIE5lc3RlZCBXaW5kb3dQcm94aWVzICjCpzQuOC41KVxuICAgKiAgIC0gSFRNTENvbGxlY3Rpb24gKMKnNC4yLjEwLjIpXG4gICAqXG4gICAqIE5hbWVzcGFjZSBpc29sYXRpb24gaXMgaW1wbGVtZW50ZWQgYnkgcHJlZml4aW5nIGBpZGAgYW5kIGBuYW1lYCBhdHRyaWJ1dGVzXG4gICAqIHdpdGggYSBjb25zdGFudCBzdHJpbmcsIGkuZS4sIGB1c2VyLWNvbnRlbnQtYFxuICAgKi9cbiAgbGV0IFNBTklUSVpFX05BTUVEX1BST1BTID0gZmFsc2U7XG4gIGNvbnN0IFNBTklUSVpFX05BTUVEX1BST1BTX1BSRUZJWCA9ICd1c2VyLWNvbnRlbnQtJztcblxuICAvKiBLZWVwIGVsZW1lbnQgY29udGVudCB3aGVuIHJlbW92aW5nIGVsZW1lbnQ/ICovXG4gIGxldCBLRUVQX0NPTlRFTlQgPSB0cnVlO1xuXG4gIC8qIElmIGEgYE5vZGVgIGlzIHBhc3NlZCB0byBzYW5pdGl6ZSgpLCB0aGVuIHBlcmZvcm1zIHNhbml0aXphdGlvbiBpbi1wbGFjZSBpbnN0ZWFkXG4gICAqIG9mIGltcG9ydGluZyBpdCBpbnRvIGEgbmV3IERvY3VtZW50IGFuZCByZXR1cm5pbmcgYSBzYW5pdGl6ZWQgY29weSAqL1xuICBsZXQgSU5fUExBQ0UgPSBmYWxzZTtcblxuICAvKiBBbGxvdyB1c2FnZSBvZiBwcm9maWxlcyBsaWtlIGh0bWwsIHN2ZyBhbmQgbWF0aE1sICovXG4gIGxldCBVU0VfUFJPRklMRVM6IFVzZVByb2ZpbGVzQ29uZmlnIHwgZmFsc2UgPSB7fTtcblxuICAvKiBUYWdzIHRvIGlnbm9yZSBjb250ZW50IG9mIHdoZW4gS0VFUF9DT05URU5UIGlzIHRydWUgKi9cbiAgbGV0IEZPUkJJRF9DT05URU5UUyA9IG51bGw7XG4gIGNvbnN0IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTID0gYWRkVG9TZXQoe30sIFtcbiAgICAnYW5ub3RhdGlvbi14bWwnLFxuICAgICdhdWRpbycsXG4gICAgJ2NvbGdyb3VwJyxcbiAgICAnZGVzYycsXG4gICAgJ2ZvcmVpZ25vYmplY3QnLFxuICAgICdoZWFkJyxcbiAgICAnaWZyYW1lJyxcbiAgICAnbWF0aCcsXG4gICAgJ21pJyxcbiAgICAnbW4nLFxuICAgICdtbycsXG4gICAgJ21zJyxcbiAgICAnbXRleHQnLFxuICAgICdub2VtYmVkJyxcbiAgICAnbm9mcmFtZXMnLFxuICAgICdub3NjcmlwdCcsXG4gICAgJ3BsYWludGV4dCcsXG4gICAgJ3NjcmlwdCcsXG4gICAgJ3N0eWxlJyxcbiAgICAnc3ZnJyxcbiAgICAndGVtcGxhdGUnLFxuICAgICd0aGVhZCcsXG4gICAgJ3RpdGxlJyxcbiAgICAndmlkZW8nLFxuICAgICd4bXAnLFxuICBdKTtcblxuICAvKiBUYWdzIHRoYXQgYXJlIHNhZmUgZm9yIGRhdGE6IFVSSXMgKi9cbiAgbGV0IERBVEFfVVJJX1RBR1MgPSBudWxsO1xuICBjb25zdCBERUZBVUxUX0RBVEFfVVJJX1RBR1MgPSBhZGRUb1NldCh7fSwgW1xuICAgICdhdWRpbycsXG4gICAgJ3ZpZGVvJyxcbiAgICAnaW1nJyxcbiAgICAnc291cmNlJyxcbiAgICAnaW1hZ2UnLFxuICAgICd0cmFjaycsXG4gIF0pO1xuXG4gIC8qIEF0dHJpYnV0ZXMgc2FmZSBmb3IgdmFsdWVzIGxpa2UgXCJqYXZhc2NyaXB0OlwiICovXG4gIGxldCBVUklfU0FGRV9BVFRSSUJVVEVTID0gbnVsbDtcbiAgY29uc3QgREVGQVVMVF9VUklfU0FGRV9BVFRSSUJVVEVTID0gYWRkVG9TZXQoe30sIFtcbiAgICAnYWx0JyxcbiAgICAnY2xhc3MnLFxuICAgICdmb3InLFxuICAgICdpZCcsXG4gICAgJ2xhYmVsJyxcbiAgICAnbmFtZScsXG4gICAgJ3BhdHRlcm4nLFxuICAgICdwbGFjZWhvbGRlcicsXG4gICAgJ3JvbGUnLFxuICAgICdzdW1tYXJ5JyxcbiAgICAndGl0bGUnLFxuICAgICd2YWx1ZScsXG4gICAgJ3N0eWxlJyxcbiAgICAneG1sbnMnLFxuICBdKTtcblxuICBjb25zdCBNQVRITUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xuICBjb25zdCBTVkdfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbiAgY29uc3QgSFRNTF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG4gIC8qIERvY3VtZW50IG5hbWVzcGFjZSAqL1xuICBsZXQgTkFNRVNQQUNFID0gSFRNTF9OQU1FU1BBQ0U7XG4gIGxldCBJU19FTVBUWV9JTlBVVCA9IGZhbHNlO1xuXG4gIC8qIEFsbG93ZWQgWEhUTUwrWE1MIG5hbWVzcGFjZXMgKi9cbiAgbGV0IEFMTE9XRURfTkFNRVNQQUNFUyA9IG51bGw7XG4gIGNvbnN0IERFRkFVTFRfQUxMT1dFRF9OQU1FU1BBQ0VTID0gYWRkVG9TZXQoXG4gICAge30sXG4gICAgW01BVEhNTF9OQU1FU1BBQ0UsIFNWR19OQU1FU1BBQ0UsIEhUTUxfTkFNRVNQQUNFXSxcbiAgICBzdHJpbmdUb1N0cmluZ1xuICApO1xuXG4gIGxldCBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFMgPSBhZGRUb1NldCh7fSwgW1xuICAgICdtaScsXG4gICAgJ21vJyxcbiAgICAnbW4nLFxuICAgICdtcycsXG4gICAgJ210ZXh0JyxcbiAgXSk7XG5cbiAgbGV0IEhUTUxfSU5URUdSQVRJT05fUE9JTlRTID0gYWRkVG9TZXQoe30sIFsnYW5ub3RhdGlvbi14bWwnXSk7XG5cbiAgLy8gQ2VydGFpbiBlbGVtZW50cyBhcmUgYWxsb3dlZCBpbiBib3RoIFNWRyBhbmQgSFRNTFxuICAvLyBuYW1lc3BhY2UuIFdlIG5lZWQgdG8gc3BlY2lmeSB0aGVtIGV4cGxpY2l0bHlcbiAgLy8gc28gdGhhdCB0aGV5IGRvbid0IGdldCBlcnJvbmVvdXNseSBkZWxldGVkIGZyb21cbiAgLy8gSFRNTCBuYW1lc3BhY2UuXG4gIGNvbnN0IENPTU1PTl9TVkdfQU5EX0hUTUxfRUxFTUVOVFMgPSBhZGRUb1NldCh7fSwgW1xuICAgICd0aXRsZScsXG4gICAgJ3N0eWxlJyxcbiAgICAnZm9udCcsXG4gICAgJ2EnLFxuICAgICdzY3JpcHQnLFxuICBdKTtcblxuICAvKiBQYXJzaW5nIG9mIHN0cmljdCBYSFRNTCBkb2N1bWVudHMgKi9cbiAgbGV0IFBBUlNFUl9NRURJQV9UWVBFOiBudWxsIHwgRE9NUGFyc2VyU3VwcG9ydGVkVHlwZSA9IG51bGw7XG4gIGNvbnN0IFNVUFBPUlRFRF9QQVJTRVJfTUVESUFfVFlQRVMgPSBbJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcsICd0ZXh0L2h0bWwnXTtcbiAgY29uc3QgREVGQVVMVF9QQVJTRVJfTUVESUFfVFlQRSA9ICd0ZXh0L2h0bWwnO1xuICBsZXQgdHJhbnNmb3JtQ2FzZUZ1bmM6IG51bGwgfCBQYXJhbWV0ZXJzPHR5cGVvZiBhZGRUb1NldD5bMl0gPSBudWxsO1xuXG4gIC8qIEtlZXAgYSByZWZlcmVuY2UgdG8gY29uZmlnIHRvIHBhc3MgdG8gaG9va3MgKi9cbiAgbGV0IENPTkZJRzogQ29uZmlnIHwgbnVsbCA9IG51bGw7XG5cbiAgLyogSWRlYWxseSwgZG8gbm90IHRvdWNoIGFueXRoaW5nIGJlbG93IHRoaXMgbGluZSAqL1xuICAvKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICovXG5cbiAgY29uc3QgZm9ybUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG5cbiAgY29uc3QgaXNSZWdleE9yRnVuY3Rpb24gPSBmdW5jdGlvbiAoXG4gICAgdGVzdFZhbHVlOiB1bmtub3duXG4gICk6IHRlc3RWYWx1ZSBpcyBGdW5jdGlvbiB8IFJlZ0V4cCB7XG4gICAgcmV0dXJuIHRlc3RWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCB8fCB0ZXN0VmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbjtcbiAgfTtcblxuICAvKipcbiAgICogX3BhcnNlQ29uZmlnXG4gICAqXG4gICAqIEBwYXJhbSBjZmcgb3B0aW9uYWwgY29uZmlnIGxpdGVyYWxcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGNvbnN0IF9wYXJzZUNvbmZpZyA9IGZ1bmN0aW9uIChjZmc6IENvbmZpZyA9IHt9KTogdm9pZCB7XG4gICAgaWYgKENPTkZJRyAmJiBDT05GSUcgPT09IGNmZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qIFNoaWVsZCBjb25maWd1cmF0aW9uIG9iamVjdCBmcm9tIHRhbXBlcmluZyAqL1xuICAgIGlmICghY2ZnIHx8IHR5cGVvZiBjZmcgIT09ICdvYmplY3QnKSB7XG4gICAgICBjZmcgPSB7fTtcbiAgICB9XG5cbiAgICAvKiBTaGllbGQgY29uZmlndXJhdGlvbiBvYmplY3QgZnJvbSBwcm90b3R5cGUgcG9sbHV0aW9uICovXG4gICAgY2ZnID0gY2xvbmUoY2ZnKTtcblxuICAgIFBBUlNFUl9NRURJQV9UWVBFID1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1pbmNsdWRlc1xuICAgICAgU1VQUE9SVEVEX1BBUlNFUl9NRURJQV9UWVBFUy5pbmRleE9mKGNmZy5QQVJTRVJfTUVESUFfVFlQRSkgPT09IC0xXG4gICAgICAgID8gREVGQVVMVF9QQVJTRVJfTUVESUFfVFlQRVxuICAgICAgICA6IGNmZy5QQVJTRVJfTUVESUFfVFlQRTtcblxuICAgIC8vIEhUTUwgdGFncyBhbmQgYXR0cmlidXRlcyBhcmUgbm90IGNhc2Utc2Vuc2l0aXZlLCBjb252ZXJ0aW5nIHRvIGxvd2VyY2FzZS4gS2VlcGluZyBYSFRNTCBhcyBpcy5cbiAgICB0cmFuc2Zvcm1DYXNlRnVuYyA9XG4gICAgICBQQVJTRVJfTUVESUFfVFlQRSA9PT0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCdcbiAgICAgICAgPyBzdHJpbmdUb1N0cmluZ1xuICAgICAgICA6IHN0cmluZ1RvTG93ZXJDYXNlO1xuXG4gICAgLyogU2V0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqL1xuICAgIEFMTE9XRURfVEFHUyA9IG9iamVjdEhhc093blByb3BlcnR5KGNmZywgJ0FMTE9XRURfVEFHUycpXG4gICAgICA/IGFkZFRvU2V0KHt9LCBjZmcuQUxMT1dFRF9UQUdTLCB0cmFuc2Zvcm1DYXNlRnVuYylcbiAgICAgIDogREVGQVVMVF9BTExPV0VEX1RBR1M7XG4gICAgQUxMT1dFRF9BVFRSID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnQUxMT1dFRF9BVFRSJylcbiAgICAgID8gYWRkVG9TZXQoe30sIGNmZy5BTExPV0VEX0FUVFIsIHRyYW5zZm9ybUNhc2VGdW5jKVxuICAgICAgOiBERUZBVUxUX0FMTE9XRURfQVRUUjtcbiAgICBBTExPV0VEX05BTUVTUEFDRVMgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdBTExPV0VEX05BTUVTUEFDRVMnKVxuICAgICAgPyBhZGRUb1NldCh7fSwgY2ZnLkFMTE9XRURfTkFNRVNQQUNFUywgc3RyaW5nVG9TdHJpbmcpXG4gICAgICA6IERFRkFVTFRfQUxMT1dFRF9OQU1FU1BBQ0VTO1xuICAgIFVSSV9TQUZFX0FUVFJJQlVURVMgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdBRERfVVJJX1NBRkVfQVRUUicpXG4gICAgICA/IGFkZFRvU2V0KFxuICAgICAgICAgIGNsb25lKERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyksXG4gICAgICAgICAgY2ZnLkFERF9VUklfU0FGRV9BVFRSLFxuICAgICAgICAgIHRyYW5zZm9ybUNhc2VGdW5jXG4gICAgICAgIClcbiAgICAgIDogREVGQVVMVF9VUklfU0FGRV9BVFRSSUJVVEVTO1xuICAgIERBVEFfVVJJX1RBR1MgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdBRERfREFUQV9VUklfVEFHUycpXG4gICAgICA/IGFkZFRvU2V0KFxuICAgICAgICAgIGNsb25lKERFRkFVTFRfREFUQV9VUklfVEFHUyksXG4gICAgICAgICAgY2ZnLkFERF9EQVRBX1VSSV9UQUdTLFxuICAgICAgICAgIHRyYW5zZm9ybUNhc2VGdW5jXG4gICAgICAgIClcbiAgICAgIDogREVGQVVMVF9EQVRBX1VSSV9UQUdTO1xuICAgIEZPUkJJRF9DT05URU5UUyA9IG9iamVjdEhhc093blByb3BlcnR5KGNmZywgJ0ZPUkJJRF9DT05URU5UUycpXG4gICAgICA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX0NPTlRFTlRTLCB0cmFuc2Zvcm1DYXNlRnVuYylcbiAgICAgIDogREVGQVVMVF9GT1JCSURfQ09OVEVOVFM7XG4gICAgRk9SQklEX1RBR1MgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdGT1JCSURfVEFHUycpXG4gICAgICA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX1RBR1MsIHRyYW5zZm9ybUNhc2VGdW5jKVxuICAgICAgOiBjbG9uZSh7fSk7XG4gICAgRk9SQklEX0FUVFIgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdGT1JCSURfQVRUUicpXG4gICAgICA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX0FUVFIsIHRyYW5zZm9ybUNhc2VGdW5jKVxuICAgICAgOiBjbG9uZSh7fSk7XG4gICAgVVNFX1BST0ZJTEVTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnVVNFX1BST0ZJTEVTJylcbiAgICAgID8gY2ZnLlVTRV9QUk9GSUxFU1xuICAgICAgOiBmYWxzZTtcbiAgICBBTExPV19BUklBX0FUVFIgPSBjZmcuQUxMT1dfQVJJQV9BVFRSICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG4gICAgQUxMT1dfREFUQV9BVFRSID0gY2ZnLkFMTE9XX0RBVEFfQVRUUiAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgIEFMTE9XX1VOS05PV05fUFJPVE9DT0xTID0gY2ZnLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSID0gY2ZnLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgIFNBRkVfRk9SX1RFTVBMQVRFUyA9IGNmZy5TQUZFX0ZPUl9URU1QTEFURVMgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBTQUZFX0ZPUl9YTUwgPSBjZmcuU0FGRV9GT1JfWE1MICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG4gICAgV0hPTEVfRE9DVU1FTlQgPSBjZmcuV0hPTEVfRE9DVU1FTlQgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBSRVRVUk5fRE9NID0gY2ZnLlJFVFVSTl9ET00gfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBSRVRVUk5fRE9NX0ZSQUdNRU5UID0gY2ZnLlJFVFVSTl9ET01fRlJBR01FTlQgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBSRVRVUk5fVFJVU1RFRF9UWVBFID0gY2ZnLlJFVFVSTl9UUlVTVEVEX1RZUEUgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBGT1JDRV9CT0RZID0gY2ZnLkZPUkNFX0JPRFkgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBTQU5JVElaRV9ET00gPSBjZmcuU0FOSVRJWkVfRE9NICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG4gICAgU0FOSVRJWkVfTkFNRURfUFJPUFMgPSBjZmcuU0FOSVRJWkVfTkFNRURfUFJPUFMgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBLRUVQX0NPTlRFTlQgPSBjZmcuS0VFUF9DT05URU5UICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG4gICAgSU5fUExBQ0UgPSBjZmcuSU5fUExBQ0UgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBJU19BTExPV0VEX1VSSSA9IGNmZy5BTExPV0VEX1VSSV9SRUdFWFAgfHwgRVhQUkVTU0lPTlMuSVNfQUxMT1dFRF9VUkk7XG4gICAgTkFNRVNQQUNFID0gY2ZnLk5BTUVTUEFDRSB8fCBIVE1MX05BTUVTUEFDRTtcbiAgICBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFMgPVxuICAgICAgY2ZnLk1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UUyB8fCBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFM7XG4gICAgSFRNTF9JTlRFR1JBVElPTl9QT0lOVFMgPVxuICAgICAgY2ZnLkhUTUxfSU5URUdSQVRJT05fUE9JTlRTIHx8IEhUTUxfSU5URUdSQVRJT05fUE9JTlRTO1xuXG4gICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgPSBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgfHwge307XG4gICAgaWYgKFxuICAgICAgY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HICYmXG4gICAgICBpc1JlZ2V4T3JGdW5jdGlvbihjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKVxuICAgICkge1xuICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrID1cbiAgICAgICAgY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaztcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiZcbiAgICAgIGlzUmVnZXhPckZ1bmN0aW9uKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spXG4gICAgKSB7XG4gICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sgPVxuICAgICAgICBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORyAmJlxuICAgICAgdHlwZW9mIGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgPT09XG4gICAgICAgICdib29sZWFuJ1xuICAgICkge1xuICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzID1cbiAgICAgICAgY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cztcbiAgICB9XG5cbiAgICBpZiAoU0FGRV9GT1JfVEVNUExBVEVTKSB7XG4gICAgICBBTExPV19EQVRBX0FUVFIgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoUkVUVVJOX0RPTV9GUkFHTUVOVCkge1xuICAgICAgUkVUVVJOX0RPTSA9IHRydWU7XG4gICAgfVxuXG4gICAgLyogUGFyc2UgcHJvZmlsZSBpbmZvICovXG4gICAgaWYgKFVTRV9QUk9GSUxFUykge1xuICAgICAgQUxMT1dFRF9UQUdTID0gYWRkVG9TZXQoe30sIFRBR1MudGV4dCk7XG4gICAgICBBTExPV0VEX0FUVFIgPSBjcmVhdGUobnVsbCk7XG4gICAgICBpZiAoVVNFX1BST0ZJTEVTLmh0bWwgPT09IHRydWUpIHtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBUQUdTLmh0bWwpO1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIEFUVFJTLmh0bWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAoVVNFX1BST0ZJTEVTLnN2ZyA9PT0gdHJ1ZSkge1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIFRBR1Muc3ZnKTtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBBVFRSUy5zdmcpO1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIEFUVFJTLnhtbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChVU0VfUFJPRklMRVMuc3ZnRmlsdGVycyA9PT0gdHJ1ZSkge1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIFRBR1Muc3ZnRmlsdGVycyk7XG4gICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgQVRUUlMuc3ZnKTtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBBVFRSUy54bWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAoVVNFX1BST0ZJTEVTLm1hdGhNbCA9PT0gdHJ1ZSkge1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIFRBR1MubWF0aE1sKTtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBBVFRSUy5tYXRoTWwpO1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIEFUVFJTLnhtbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogUHJldmVudCBmdW5jdGlvbi1iYXNlZCBBRERfQVRUUiAvIEFERF9UQUdTIGZyb20gbGVha2luZyBhY3Jvc3MgY2FsbHMgKi9cbiAgICBpZiAoIW9iamVjdEhhc093blByb3BlcnR5KGNmZywgJ0FERF9UQUdTJykpIHtcbiAgICAgIEVYVFJBX0VMRU1FTlRfSEFORExJTkcudGFnQ2hlY2sgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICghb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnQUREX0FUVFInKSkge1xuICAgICAgRVhUUkFfRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVDaGVjayA9IG51bGw7XG4gICAgfVxuXG4gICAgLyogTWVyZ2UgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovXG4gICAgaWYgKGNmZy5BRERfVEFHUykge1xuICAgICAgaWYgKHR5cGVvZiBjZmcuQUREX1RBR1MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgRVhUUkFfRUxFTUVOVF9IQU5ETElORy50YWdDaGVjayA9IGNmZy5BRERfVEFHUztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChBTExPV0VEX1RBR1MgPT09IERFRkFVTFRfQUxMT1dFRF9UQUdTKSB7XG4gICAgICAgICAgQUxMT1dFRF9UQUdTID0gY2xvbmUoQUxMT1dFRF9UQUdTKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgY2ZnLkFERF9UQUdTLCB0cmFuc2Zvcm1DYXNlRnVuYyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNmZy5BRERfQVRUUikge1xuICAgICAgaWYgKHR5cGVvZiBjZmcuQUREX0FUVFIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgRVhUUkFfRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVDaGVjayA9IGNmZy5BRERfQVRUUjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChBTExPV0VEX0FUVFIgPT09IERFRkFVTFRfQUxMT1dFRF9BVFRSKSB7XG4gICAgICAgICAgQUxMT1dFRF9BVFRSID0gY2xvbmUoQUxMT1dFRF9BVFRSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgY2ZnLkFERF9BVFRSLCB0cmFuc2Zvcm1DYXNlRnVuYyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNmZy5BRERfVVJJX1NBRkVfQVRUUikge1xuICAgICAgYWRkVG9TZXQoVVJJX1NBRkVfQVRUUklCVVRFUywgY2ZnLkFERF9VUklfU0FGRV9BVFRSLCB0cmFuc2Zvcm1DYXNlRnVuYyk7XG4gICAgfVxuXG4gICAgaWYgKGNmZy5GT1JCSURfQ09OVEVOVFMpIHtcbiAgICAgIGlmIChGT1JCSURfQ09OVEVOVFMgPT09IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTKSB7XG4gICAgICAgIEZPUkJJRF9DT05URU5UUyA9IGNsb25lKEZPUkJJRF9DT05URU5UUyk7XG4gICAgICB9XG5cbiAgICAgIGFkZFRvU2V0KEZPUkJJRF9DT05URU5UUywgY2ZnLkZPUkJJRF9DT05URU5UUywgdHJhbnNmb3JtQ2FzZUZ1bmMpO1xuICAgIH1cblxuICAgIGlmIChjZmcuQUREX0ZPUkJJRF9DT05URU5UUykge1xuICAgICAgaWYgKEZPUkJJRF9DT05URU5UUyA9PT0gREVGQVVMVF9GT1JCSURfQ09OVEVOVFMpIHtcbiAgICAgICAgRk9SQklEX0NPTlRFTlRTID0gY2xvbmUoRk9SQklEX0NPTlRFTlRTKTtcbiAgICAgIH1cblxuICAgICAgYWRkVG9TZXQoRk9SQklEX0NPTlRFTlRTLCBjZmcuQUREX0ZPUkJJRF9DT05URU5UUywgdHJhbnNmb3JtQ2FzZUZ1bmMpO1xuICAgIH1cblxuICAgIC8qIEFkZCAjdGV4dCBpbiBjYXNlIEtFRVBfQ09OVEVOVCBpcyBzZXQgdG8gdHJ1ZSAqL1xuICAgIGlmIChLRUVQX0NPTlRFTlQpIHtcbiAgICAgIEFMTE9XRURfVEFHU1snI3RleHQnXSA9IHRydWU7XG4gICAgfVxuXG4gICAgLyogQWRkIGh0bWwsIGhlYWQgYW5kIGJvZHkgdG8gQUxMT1dFRF9UQUdTIGluIGNhc2UgV0hPTEVfRE9DVU1FTlQgaXMgdHJ1ZSAqL1xuICAgIGlmIChXSE9MRV9ET0NVTUVOVCkge1xuICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBbJ2h0bWwnLCAnaGVhZCcsICdib2R5J10pO1xuICAgIH1cblxuICAgIC8qIEFkZCB0Ym9keSB0byBBTExPV0VEX1RBR1MgaW4gY2FzZSB0YWJsZXMgYXJlIHBlcm1pdHRlZCwgc2VlICMyODYsICMzNjUgKi9cbiAgICBpZiAoQUxMT1dFRF9UQUdTLnRhYmxlKSB7XG4gICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIFsndGJvZHknXSk7XG4gICAgICBkZWxldGUgRk9SQklEX1RBR1MudGJvZHk7XG4gICAgfVxuXG4gICAgaWYgKGNmZy5UUlVTVEVEX1RZUEVTX1BPTElDWSkge1xuICAgICAgaWYgKHR5cGVvZiBjZmcuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlSFRNTCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyB0eXBlRXJyb3JDcmVhdGUoXG4gICAgICAgICAgJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhIFwiY3JlYXRlSFRNTFwiIGhvb2suJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNmZy5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVTY3JpcHRVUkwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKFxuICAgICAgICAgICdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSBcImNyZWF0ZVNjcmlwdFVSTFwiIGhvb2suJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBPdmVyd3JpdGUgZXhpc3RpbmcgVHJ1c3RlZFR5cGVzIHBvbGljeS5cbiAgICAgIHRydXN0ZWRUeXBlc1BvbGljeSA9IGNmZy5UUlVTVEVEX1RZUEVTX1BPTElDWTtcblxuICAgICAgLy8gU2lnbiBsb2NhbCB2YXJpYWJsZXMgcmVxdWlyZWQgYnkgYHNhbml0aXplYC5cbiAgICAgIGVtcHR5SFRNTCA9IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKCcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVW5pbml0aWFsaXplZCBwb2xpY3ksIGF0dGVtcHQgdG8gaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgZG9tcHVyaWZ5IHBvbGljeS5cbiAgICAgIGlmICh0cnVzdGVkVHlwZXNQb2xpY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0cnVzdGVkVHlwZXNQb2xpY3kgPSBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KFxuICAgICAgICAgIHRydXN0ZWRUeXBlcyxcbiAgICAgICAgICBjdXJyZW50U2NyaXB0XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGNyZWF0aW5nIHRoZSBpbnRlcm5hbCBwb2xpY3kgc3VjY2VlZGVkIHNpZ24gaW50ZXJuYWwgdmFyaWFibGVzLlxuICAgICAgaWYgKHRydXN0ZWRUeXBlc1BvbGljeSAhPT0gbnVsbCAmJiB0eXBlb2YgZW1wdHlIVE1MID09PSAnc3RyaW5nJykge1xuICAgICAgICBlbXB0eUhUTUwgPSB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTCgnJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJldmVudCBmdXJ0aGVyIG1hbmlwdWxhdGlvbiBvZiBjb25maWd1cmF0aW9uLlxuICAgIC8vIE5vdCBhdmFpbGFibGUgaW4gSUU4LCBTYWZhcmkgNSwgZXRjLlxuICAgIGlmIChmcmVlemUpIHtcbiAgICAgIGZyZWV6ZShjZmcpO1xuICAgIH1cblxuICAgIENPTkZJRyA9IGNmZztcbiAgfTtcblxuICAvKiBLZWVwIHRyYWNrIG9mIGFsbCBwb3NzaWJsZSBTVkcgYW5kIE1hdGhNTCB0YWdzXG4gICAqIHNvIHRoYXQgd2UgY2FuIHBlcmZvcm0gdGhlIG5hbWVzcGFjZSBjaGVja3NcbiAgICogY29ycmVjdGx5LiAqL1xuICBjb25zdCBBTExfU1ZHX1RBR1MgPSBhZGRUb1NldCh7fSwgW1xuICAgIC4uLlRBR1Muc3ZnLFxuICAgIC4uLlRBR1Muc3ZnRmlsdGVycyxcbiAgICAuLi5UQUdTLnN2Z0Rpc2FsbG93ZWQsXG4gIF0pO1xuICBjb25zdCBBTExfTUFUSE1MX1RBR1MgPSBhZGRUb1NldCh7fSwgW1xuICAgIC4uLlRBR1MubWF0aE1sLFxuICAgIC4uLlRBR1MubWF0aE1sRGlzYWxsb3dlZCxcbiAgXSk7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBlbGVtZW50IGEgRE9NIGVsZW1lbnQgd2hvc2UgbmFtZXNwYWNlIGlzIGJlaW5nIGNoZWNrZWRcbiAgICogQHJldHVybnMgUmV0dXJuIGZhbHNlIGlmIHRoZSBlbGVtZW50IGhhcyBhXG4gICAqICBuYW1lc3BhY2UgdGhhdCBhIHNwZWMtY29tcGxpYW50IHBhcnNlciB3b3VsZCBuZXZlclxuICAgKiAgcmV0dXJuLiBSZXR1cm4gdHJ1ZSBvdGhlcndpc2UuXG4gICAqL1xuICBjb25zdCBfY2hlY2tWYWxpZE5hbWVzcGFjZSA9IGZ1bmN0aW9uIChlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgbGV0IHBhcmVudCA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG5cbiAgICAvLyBJbiBKU0RPTSwgaWYgd2UncmUgaW5zaWRlIHNoYWRvdyBET00sIHRoZW4gcGFyZW50Tm9kZVxuICAgIC8vIGNhbiBiZSBudWxsLiBXZSBqdXN0IHNpbXVsYXRlIHBhcmVudCBpbiB0aGlzIGNhc2UuXG4gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC50YWdOYW1lKSB7XG4gICAgICBwYXJlbnQgPSB7XG4gICAgICAgIG5hbWVzcGFjZVVSSTogTkFNRVNQQUNFLFxuICAgICAgICB0YWdOYW1lOiAndGVtcGxhdGUnLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWdOYW1lID0gc3RyaW5nVG9Mb3dlckNhc2UoZWxlbWVudC50YWdOYW1lKTtcbiAgICBjb25zdCBwYXJlbnRUYWdOYW1lID0gc3RyaW5nVG9Mb3dlckNhc2UocGFyZW50LnRhZ05hbWUpO1xuXG4gICAgaWYgKCFBTExPV0VEX05BTUVTUEFDRVNbZWxlbWVudC5uYW1lc3BhY2VVUkldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFKSB7XG4gICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gSFRNTCBuYW1lc3BhY2UgdG8gU1ZHXG4gICAgICAvLyBpcyB2aWEgPHN2Zz4uIElmIGl0IGhhcHBlbnMgdmlhIGFueSBvdGhlciB0YWcsIHRoZW5cbiAgICAgIC8vIGl0IHNob3VsZCBiZSBraWxsZWQuXG4gICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdzdmcnO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gTWF0aE1MIHRvIFNWRyBpcyB2aWFgXG4gICAgICAvLyBzdmcgaWYgcGFyZW50IGlzIGVpdGhlciA8YW5ub3RhdGlvbi14bWw+IG9yIE1hdGhNTFxuICAgICAgLy8gdGV4dCBpbnRlZ3JhdGlvbiBwb2ludHMuXG4gICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRhZ05hbWUgPT09ICdzdmcnICYmXG4gICAgICAgICAgKHBhcmVudFRhZ05hbWUgPT09ICdhbm5vdGF0aW9uLXhtbCcgfHxcbiAgICAgICAgICAgIE1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2Ugb25seSBhbGxvdyBlbGVtZW50cyB0aGF0IGFyZSBkZWZpbmVkIGluIFNWR1xuICAgICAgLy8gc3BlYy4gQWxsIG90aGVycyBhcmUgZGlzYWxsb3dlZCBpbiBTVkcgbmFtZXNwYWNlLlxuICAgICAgcmV0dXJuIEJvb2xlYW4oQUxMX1NWR19UQUdTW3RhZ05hbWVdKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IE1BVEhNTF9OQU1FU1BBQ0UpIHtcbiAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBIVE1MIG5hbWVzcGFjZSB0byBNYXRoTUxcbiAgICAgIC8vIGlzIHZpYSA8bWF0aD4uIElmIGl0IGhhcHBlbnMgdmlhIGFueSBvdGhlciB0YWcsIHRoZW5cbiAgICAgIC8vIGl0IHNob3VsZCBiZSBraWxsZWQuXG4gICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdtYXRoJztcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHN3aXRjaCBmcm9tIFNWRyB0byBNYXRoTUwgaXMgdmlhXG4gICAgICAvLyA8bWF0aD4gYW5kIEhUTUwgaW50ZWdyYXRpb24gcG9pbnRzXG4gICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSkge1xuICAgICAgICByZXR1cm4gdGFnTmFtZSA9PT0gJ21hdGgnICYmIEhUTUxfSU5URUdSQVRJT05fUE9JTlRTW3BhcmVudFRhZ05hbWVdO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBvbmx5IGFsbG93IGVsZW1lbnRzIHRoYXQgYXJlIGRlZmluZWQgaW4gTWF0aE1MXG4gICAgICAvLyBzcGVjLiBBbGwgb3RoZXJzIGFyZSBkaXNhbGxvd2VkIGluIE1hdGhNTCBuYW1lc3BhY2UuXG4gICAgICByZXR1cm4gQm9vbGVhbihBTExfTUFUSE1MX1RBR1NbdGFnTmFtZV0pO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBTVkcgdG8gSFRNTCBpcyB2aWFcbiAgICAgIC8vIEhUTUwgaW50ZWdyYXRpb24gcG9pbnRzLCBhbmQgZnJvbSBNYXRoTUwgdG8gSFRNTFxuICAgICAgLy8gaXMgdmlhIE1hdGhNTCB0ZXh0IGludGVncmF0aW9uIHBvaW50c1xuICAgICAgaWYgKFxuICAgICAgICBwYXJlbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFICYmXG4gICAgICAgICFIVE1MX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXJlbnQubmFtZXNwYWNlVVJJID09PSBNQVRITUxfTkFNRVNQQUNFICYmXG4gICAgICAgICFNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV1cbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIGRpc2FsbG93IHRhZ3MgdGhhdCBhcmUgc3BlY2lmaWMgZm9yIE1hdGhNTFxuICAgICAgLy8gb3IgU1ZHIGFuZCBzaG91bGQgbmV2ZXIgYXBwZWFyIGluIEhUTUwgbmFtZXNwYWNlXG4gICAgICByZXR1cm4gKFxuICAgICAgICAhQUxMX01BVEhNTF9UQUdTW3RhZ05hbWVdICYmXG4gICAgICAgIChDT01NT05fU1ZHX0FORF9IVE1MX0VMRU1FTlRTW3RhZ05hbWVdIHx8ICFBTExfU1ZHX1RBR1NbdGFnTmFtZV0pXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEZvciBYSFRNTCBhbmQgWE1MIGRvY3VtZW50cyB0aGF0IHN1cHBvcnQgY3VzdG9tIG5hbWVzcGFjZXNcbiAgICBpZiAoXG4gICAgICBQQVJTRVJfTUVESUFfVFlQRSA9PT0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcgJiZcbiAgICAgIEFMTE9XRURfTkFNRVNQQUNFU1tlbGVtZW50Lm5hbWVzcGFjZVVSSV1cbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFRoZSBjb2RlIHNob3VsZCBuZXZlciByZWFjaCB0aGlzIHBsYWNlICh0aGlzIG1lYW5zXG4gICAgLy8gdGhhdCB0aGUgZWxlbWVudCBzb21laG93IGdvdCBuYW1lc3BhY2UgdGhhdCBpcyBub3RcbiAgICAvLyBIVE1MLCBTVkcsIE1hdGhNTCBvciBhbGxvd2VkIHZpYSBBTExPV0VEX05BTUVTUEFDRVMpLlxuICAgIC8vIFJldHVybiBmYWxzZSBqdXN0IGluIGNhc2UuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBfZm9yY2VSZW1vdmVcbiAgICpcbiAgICogQHBhcmFtIG5vZGUgYSBET00gbm9kZVxuICAgKi9cbiAgY29uc3QgX2ZvcmNlUmVtb3ZlID0gZnVuY3Rpb24gKG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHsgZWxlbWVudDogbm9kZSB9KTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZG9tLW5vZGUtcmVtb3ZlXG4gICAgICBnZXRQYXJlbnROb2RlKG5vZGUpLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJlbW92ZShub2RlKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIF9yZW1vdmVBdHRyaWJ1dGVcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgYW4gQXR0cmlidXRlIG5hbWVcbiAgICogQHBhcmFtIGVsZW1lbnQgYSBET00gbm9kZVxuICAgKi9cbiAgY29uc3QgX3JlbW92ZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgIGF0dHJpYnV0ZTogZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLFxuICAgICAgICBmcm9tOiBlbGVtZW50LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgIGF0dHJpYnV0ZTogbnVsbCxcbiAgICAgICAgZnJvbTogZWxlbWVudCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXG4gICAgLy8gV2Ugdm9pZCBhdHRyaWJ1dGUgdmFsdWVzIGZvciB1bnJlbW92YWJsZSBcImlzXCIgYXR0cmlidXRlc1xuICAgIGlmIChuYW1lID09PSAnaXMnKSB7XG4gICAgICBpZiAoUkVUVVJOX0RPTSB8fCBSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKGVsZW1lbnQpO1xuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCAnJyk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBfaW5pdERvY3VtZW50XG4gICAqXG4gICAqIEBwYXJhbSBkaXJ0eSAtIGEgc3RyaW5nIG9mIGRpcnR5IG1hcmt1cFxuICAgKiBAcmV0dXJuIGEgRE9NLCBmaWxsZWQgd2l0aCB0aGUgZGlydHkgbWFya3VwXG4gICAqL1xuICBjb25zdCBfaW5pdERvY3VtZW50ID0gZnVuY3Rpb24gKGRpcnR5OiBzdHJpbmcpOiBEb2N1bWVudCB7XG4gICAgLyogQ3JlYXRlIGEgSFRNTCBkb2N1bWVudCAqL1xuICAgIGxldCBkb2MgPSBudWxsO1xuICAgIGxldCBsZWFkaW5nV2hpdGVzcGFjZSA9IG51bGw7XG5cbiAgICBpZiAoRk9SQ0VfQk9EWSkge1xuICAgICAgZGlydHkgPSAnPHJlbW92ZT48L3JlbW92ZT4nICsgZGlydHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIElmIEZPUkNFX0JPRFkgaXNuJ3QgdXNlZCwgbGVhZGluZyB3aGl0ZXNwYWNlIG5lZWRzIHRvIGJlIHByZXNlcnZlZCBtYW51YWxseSAqL1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IHN0cmluZ01hdGNoKGRpcnR5LCAvXltcXHJcXG5cXHQgXSsvKTtcbiAgICAgIGxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzBdO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFBBUlNFUl9NRURJQV9UWVBFID09PSAnYXBwbGljYXRpb24veGh0bWwreG1sJyAmJlxuICAgICAgTkFNRVNQQUNFID09PSBIVE1MX05BTUVTUEFDRVxuICAgICkge1xuICAgICAgLy8gUm9vdCBvZiBYSFRNTCBkb2MgbXVzdCBjb250YWluIHhtbG5zIGRlY2xhcmF0aW9uIChzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3hodG1sMS9ub3JtYXRpdmUuaHRtbCNzdHJpY3QpXG4gICAgICBkaXJ0eSA9XG4gICAgICAgICc8aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj48aGVhZD48L2hlYWQ+PGJvZHk+JyArXG4gICAgICAgIGRpcnR5ICtcbiAgICAgICAgJzwvYm9keT48L2h0bWw+JztcbiAgICB9XG5cbiAgICBjb25zdCBkaXJ0eVBheWxvYWQgPSB0cnVzdGVkVHlwZXNQb2xpY3lcbiAgICAgID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoZGlydHkpXG4gICAgICA6IGRpcnR5O1xuICAgIC8qXG4gICAgICogVXNlIHRoZSBET01QYXJzZXIgQVBJIGJ5IGRlZmF1bHQsIGZhbGxiYWNrIGxhdGVyIGlmIG5lZWRzIGJlXG4gICAgICogRE9NUGFyc2VyIG5vdCB3b3JrIGZvciBzdmcgd2hlbiBoYXMgbXVsdGlwbGUgcm9vdCBlbGVtZW50LlxuICAgICAqL1xuICAgIGlmIChOQU1FU1BBQ0UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGRpcnR5UGF5bG9hZCwgUEFSU0VSX01FRElBX1RZUEUpO1xuICAgICAgfSBjYXRjaCAoXykge31cbiAgICB9XG5cbiAgICAvKiBVc2UgY3JlYXRlSFRNTERvY3VtZW50IGluIGNhc2UgRE9NUGFyc2VyIGlzIG5vdCBhdmFpbGFibGUgKi9cbiAgICBpZiAoIWRvYyB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZG9jID0gaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoTkFNRVNQQUNFLCAndGVtcGxhdGUnLCBudWxsKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRvYy5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MID0gSVNfRU1QVFlfSU5QVVRcbiAgICAgICAgICA/IGVtcHR5SFRNTFxuICAgICAgICAgIDogZGlydHlQYXlsb2FkO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAvLyBTeW50YXggZXJyb3IgaWYgZGlydHlQYXlsb2FkIGlzIGludmFsaWQgeG1sXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IGRvYy5ib2R5IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICBpZiAoZGlydHkgJiYgbGVhZGluZ1doaXRlc3BhY2UpIHtcbiAgICAgIGJvZHkuaW5zZXJ0QmVmb3JlKFxuICAgICAgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSksXG4gICAgICAgIGJvZHkuY2hpbGROb2Rlc1swXSB8fCBudWxsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8qIFdvcmsgb24gd2hvbGUgZG9jdW1lbnQgb3IganVzdCBpdHMgYm9keSAqL1xuICAgIGlmIChOQU1FU1BBQ0UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICByZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWUuY2FsbChcbiAgICAgICAgZG9jLFxuICAgICAgICBXSE9MRV9ET0NVTUVOVCA/ICdodG1sJyA6ICdib2R5J1xuICAgICAgKVswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gV0hPTEVfRE9DVU1FTlQgPyBkb2MuZG9jdW1lbnRFbGVtZW50IDogYm9keTtcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIE5vZGVJdGVyYXRvciBvYmplY3QgdGhhdCB5b3UgY2FuIHVzZSB0byB0cmF2ZXJzZSBmaWx0ZXJlZCBsaXN0cyBvZiBub2RlcyBvciBlbGVtZW50cyBpbiBhIGRvY3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcm9vdCBUaGUgcm9vdCBlbGVtZW50IG9yIG5vZGUgdG8gc3RhcnQgdHJhdmVyc2luZyBvbi5cbiAgICogQHJldHVybiBUaGUgY3JlYXRlZCBOb2RlSXRlcmF0b3JcbiAgICovXG4gIGNvbnN0IF9jcmVhdGVOb2RlSXRlcmF0b3IgPSBmdW5jdGlvbiAocm9vdDogTm9kZSk6IE5vZGVJdGVyYXRvciB7XG4gICAgcmV0dXJuIGNyZWF0ZU5vZGVJdGVyYXRvci5jYWxsKFxuICAgICAgcm9vdC5vd25lckRvY3VtZW50IHx8IHJvb3QsXG4gICAgICByb290LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UIHxcbiAgICAgICAgTm9kZUZpbHRlci5TSE9XX0NPTU1FTlQgfFxuICAgICAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVCB8XG4gICAgICAgIE5vZGVGaWx0ZXIuU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OIHxcbiAgICAgICAgTm9kZUZpbHRlci5TSE9XX0NEQVRBX1NFQ1RJT04sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogX2lzQ2xvYmJlcmVkXG4gICAqXG4gICAqIEBwYXJhbSBlbGVtZW50IGVsZW1lbnQgdG8gY2hlY2sgZm9yIGNsb2JiZXJpbmcgYXR0YWNrc1xuICAgKiBAcmV0dXJuIHRydWUgaWYgY2xvYmJlcmVkLCBmYWxzZSBpZiBzYWZlXG4gICAqL1xuICBjb25zdCBfaXNDbG9iYmVyZWQgPSBmdW5jdGlvbiAoZWxlbWVudDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBlbGVtZW50IGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50ICYmXG4gICAgICAodHlwZW9mIGVsZW1lbnQubm9kZU5hbWUgIT09ICdzdHJpbmcnIHx8XG4gICAgICAgIHR5cGVvZiBlbGVtZW50LnRleHRDb250ZW50ICE9PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlb2YgZWxlbWVudC5yZW1vdmVDaGlsZCAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAhKGVsZW1lbnQuYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5hbWVkTm9kZU1hcCkgfHxcbiAgICAgICAgdHlwZW9mIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiBlbGVtZW50LnNldEF0dHJpYnV0ZSAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2YgZWxlbWVudC5uYW1lc3BhY2VVUkkgIT09ICdzdHJpbmcnIHx8XG4gICAgICAgIHR5cGVvZiBlbGVtZW50Lmluc2VydEJlZm9yZSAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2YgZWxlbWVudC5oYXNDaGlsZE5vZGVzICE9PSAnZnVuY3Rpb24nKVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBET00gbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIG9iamVjdCB0byBjaGVjayB3aGV0aGVyIGl0J3MgYSBET00gbm9kZVxuICAgKiBAcmV0dXJuIHRydWUgaXMgb2JqZWN0IGlzIGEgRE9NIG5vZGVcbiAgICovXG4gIGNvbnN0IF9pc05vZGUgPSBmdW5jdGlvbiAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBOb2RlIHtcbiAgICByZXR1cm4gdHlwZW9mIE5vZGUgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUgaW5zdGFuY2VvZiBOb2RlO1xuICB9O1xuXG4gIGZ1bmN0aW9uIF9leGVjdXRlSG9va3M8VCBleHRlbmRzIEhvb2tGdW5jdGlvbj4oXG4gICAgaG9va3M6IEhvb2tGdW5jdGlvbltdLFxuICAgIGN1cnJlbnROb2RlOiBQYXJhbWV0ZXJzPFQ+WzBdLFxuICAgIGRhdGE6IFBhcmFtZXRlcnM8VD5bMV1cbiAgKTogdm9pZCB7XG4gICAgYXJyYXlGb3JFYWNoKGhvb2tzLCAoaG9vazogVCkgPT4ge1xuICAgICAgaG9vay5jYWxsKERPTVB1cmlmeSwgY3VycmVudE5vZGUsIGRhdGEsIENPTkZJRyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogX3Nhbml0aXplRWxlbWVudHNcbiAgICpcbiAgICogQHByb3RlY3Qgbm9kZU5hbWVcbiAgICogQHByb3RlY3QgdGV4dENvbnRlbnRcbiAgICogQHByb3RlY3QgcmVtb3ZlQ2hpbGRcbiAgICogQHBhcmFtIGN1cnJlbnROb2RlIHRvIGNoZWNrIGZvciBwZXJtaXNzaW9uIHRvIGV4aXN0XG4gICAqIEByZXR1cm4gdHJ1ZSBpZiBub2RlIHdhcyBraWxsZWQsIGZhbHNlIGlmIGxlZnQgYWxpdmVcbiAgICovXG4gIGNvbnN0IF9zYW5pdGl6ZUVsZW1lbnRzID0gZnVuY3Rpb24gKGN1cnJlbnROb2RlOiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgY29udGVudCA9IG51bGw7XG5cbiAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgX2V4ZWN1dGVIb29rcyhob29rcy5iZWZvcmVTYW5pdGl6ZUVsZW1lbnRzLCBjdXJyZW50Tm9kZSwgbnVsbCk7XG5cbiAgICAvKiBDaGVjayBpZiBlbGVtZW50IGlzIGNsb2JiZXJlZCBvciBjYW4gY2xvYmJlciAqL1xuICAgIGlmIChfaXNDbG9iYmVyZWQoY3VycmVudE5vZGUpKSB7XG4gICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyogTm93IGxldCdzIGNoZWNrIHRoZSBlbGVtZW50J3MgdHlwZSBhbmQgbmFtZSAqL1xuICAgIGNvbnN0IHRhZ05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhjdXJyZW50Tm9kZS5ub2RlTmFtZSk7XG5cbiAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgX2V4ZWN1dGVIb29rcyhob29rcy51cG9uU2FuaXRpemVFbGVtZW50LCBjdXJyZW50Tm9kZSwge1xuICAgICAgdGFnTmFtZSxcbiAgICAgIGFsbG93ZWRUYWdzOiBBTExPV0VEX1RBR1MsXG4gICAgfSk7XG5cbiAgICAvKiBEZXRlY3QgbVhTUyBhdHRlbXB0cyBhYnVzaW5nIG5hbWVzcGFjZSBjb25mdXNpb24gKi9cbiAgICBpZiAoXG4gICAgICBTQUZFX0ZPUl9YTUwgJiZcbiAgICAgIGN1cnJlbnROb2RlLmhhc0NoaWxkTm9kZXMoKSAmJlxuICAgICAgIV9pc05vZGUoY3VycmVudE5vZGUuZmlyc3RFbGVtZW50Q2hpbGQpICYmXG4gICAgICByZWdFeHBUZXN0KC88Wy9cXHchXS9nLCBjdXJyZW50Tm9kZS5pbm5lckhUTUwpICYmXG4gICAgICByZWdFeHBUZXN0KC88Wy9cXHchXS9nLCBjdXJyZW50Tm9kZS50ZXh0Q29udGVudClcbiAgICApIHtcbiAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBSZW1vdmUgYW55IG9jY3VycmVuY2Ugb2YgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgKi9cbiAgICBpZiAoY3VycmVudE5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS5wcm9ncmVzc2luZ0luc3RydWN0aW9uKSB7XG4gICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyogUmVtb3ZlIGFueSBraW5kIG9mIHBvc3NpYmx5IGhhcm1mdWwgY29tbWVudHMgKi9cbiAgICBpZiAoXG4gICAgICBTQUZFX0ZPUl9YTUwgJiZcbiAgICAgIGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuY29tbWVudCAmJlxuICAgICAgcmVnRXhwVGVzdCgvPFsvXFx3XS9nLCBjdXJyZW50Tm9kZS5kYXRhKVxuICAgICkge1xuICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qIFJlbW92ZSBlbGVtZW50IGlmIGFueXRoaW5nIGZvcmJpZHMgaXRzIHByZXNlbmNlICovXG4gICAgaWYgKFxuICAgICAgIShcbiAgICAgICAgRVhUUkFfRUxFTUVOVF9IQU5ETElORy50YWdDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmXG4gICAgICAgIEVYVFJBX0VMRU1FTlRfSEFORExJTkcudGFnQ2hlY2sodGFnTmFtZSlcbiAgICAgICkgJiZcbiAgICAgICghQUxMT1dFRF9UQUdTW3RhZ05hbWVdIHx8IEZPUkJJRF9UQUdTW3RhZ05hbWVdKVxuICAgICkge1xuICAgICAgLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIGN1c3RvbSBlbGVtZW50IHRvIGhhbmRsZSAqL1xuICAgICAgaWYgKCFGT1JCSURfVEFHU1t0YWdOYW1lXSAmJiBfaXNCYXNpY0N1c3RvbUVsZW1lbnQodGFnTmFtZSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJlxuICAgICAgICAgIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCB0YWdOYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiZcbiAgICAgICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sodGFnTmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIEtlZXAgY29udGVudCBleGNlcHQgZm9yIGJhZC1saXN0ZWQgZWxlbWVudHMgKi9cbiAgICAgIGlmIChLRUVQX0NPTlRFTlQgJiYgIUZPUkJJRF9DT05URU5UU1t0YWdOYW1lXSkge1xuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSkgfHwgY3VycmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IGdldENoaWxkTm9kZXMoY3VycmVudE5vZGUpIHx8IGN1cnJlbnROb2RlLmNoaWxkTm9kZXM7XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZXMgJiYgcGFyZW50Tm9kZSkge1xuICAgICAgICAgIGNvbnN0IGNoaWxkQ291bnQgPSBjaGlsZE5vZGVzLmxlbmd0aDtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSBjaGlsZENvdW50IC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkQ2xvbmUgPSBjbG9uZU5vZGUoY2hpbGROb2Rlc1tpXSwgdHJ1ZSk7XG4gICAgICAgICAgICBjaGlsZENsb25lLl9fcmVtb3ZhbENvdW50ID0gKGN1cnJlbnROb2RlLl9fcmVtb3ZhbENvdW50IHx8IDApICsgMTtcbiAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkQ2xvbmUsIGdldE5leHRTaWJsaW5nKGN1cnJlbnROb2RlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBDaGVjayB3aGV0aGVyIGVsZW1lbnQgaGFzIGEgdmFsaWQgbmFtZXNwYWNlICovXG4gICAgaWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRWxlbWVudCAmJiAhX2NoZWNrVmFsaWROYW1lc3BhY2UoY3VycmVudE5vZGUpKSB7XG4gICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyogTWFrZSBzdXJlIHRoYXQgb2xkZXIgYnJvd3NlcnMgZG9uJ3QgZ2V0IGZhbGxiYWNrLXRhZyBtWFNTICovXG4gICAgaWYgKFxuICAgICAgKHRhZ05hbWUgPT09ICdub3NjcmlwdCcgfHxcbiAgICAgICAgdGFnTmFtZSA9PT0gJ25vZW1iZWQnIHx8XG4gICAgICAgIHRhZ05hbWUgPT09ICdub2ZyYW1lcycpICYmXG4gICAgICByZWdFeHBUZXN0KC88XFwvbm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSwgY3VycmVudE5vZGUuaW5uZXJIVE1MKVxuICAgICkge1xuICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qIFNhbml0aXplIGVsZW1lbnQgY29udGVudCB0byBiZSB0ZW1wbGF0ZS1zYWZlICovXG4gICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUyAmJiBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLnRleHQpIHtcbiAgICAgIC8qIEdldCB0aGUgZWxlbWVudCdzIHRleHQgY29udGVudCAqL1xuICAgICAgY29udGVudCA9IGN1cnJlbnROb2RlLnRleHRDb250ZW50O1xuXG4gICAgICBhcnJheUZvckVhY2goW01VU1RBQ0hFX0VYUFIsIEVSQl9FWFBSLCBUTVBMSVRfRVhQUl0sIChleHByOiBSZWdFeHApID0+IHtcbiAgICAgICAgY29udGVudCA9IHN0cmluZ1JlcGxhY2UoY29udGVudCwgZXhwciwgJyAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoY3VycmVudE5vZGUudGV4dENvbnRlbnQgIT09IGNvbnRlbnQpIHtcbiAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7IGVsZW1lbnQ6IGN1cnJlbnROb2RlLmNsb25lTm9kZSgpIH0pO1xuICAgICAgICBjdXJyZW50Tm9kZS50ZXh0Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgIF9leGVjdXRlSG9va3MoaG9va3MuYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzLCBjdXJyZW50Tm9kZSwgbnVsbCk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIF9pc1ZhbGlkQXR0cmlidXRlXG4gICAqXG4gICAqIEBwYXJhbSBsY1RhZyBMb3dlcmNhc2UgdGFnIG5hbWUgb2YgY29udGFpbmluZyBlbGVtZW50LlxuICAgKiBAcGFyYW0gbGNOYW1lIExvd2VyY2FzZSBhdHRyaWJ1dGUgbmFtZS5cbiAgICogQHBhcmFtIHZhbHVlIEF0dHJpYnV0ZSB2YWx1ZS5cbiAgICogQHJldHVybiBSZXR1cm5zIHRydWUgaWYgYHZhbHVlYCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgY29uc3QgX2lzVmFsaWRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoXG4gICAgbGNUYWc6IHN0cmluZyxcbiAgICBsY05hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nXG4gICk6IGJvb2xlYW4ge1xuICAgIC8qIEZPUkJJRF9BVFRSIG11c3QgYWx3YXlzIHdpbiwgZXZlbiBpZiBBRERfQVRUUiBwcmVkaWNhdGUgd291bGQgYWxsb3cgaXQgKi9cbiAgICBpZiAoRk9SQklEX0FUVFJbbGNOYW1lXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qIE1ha2Ugc3VyZSBhdHRyaWJ1dGUgY2Fubm90IGNsb2JiZXIgKi9cbiAgICBpZiAoXG4gICAgICBTQU5JVElaRV9ET00gJiZcbiAgICAgIChsY05hbWUgPT09ICdpZCcgfHwgbGNOYW1lID09PSAnbmFtZScpICYmXG4gICAgICAodmFsdWUgaW4gZG9jdW1lbnQgfHwgdmFsdWUgaW4gZm9ybUVsZW1lbnQpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyogQWxsb3cgdmFsaWQgZGF0YS0qIGF0dHJpYnV0ZXM6IEF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgYWZ0ZXIgXCItXCJcbiAgICAgICAgKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RvbS5odG1sI2VtYmVkZGluZy1jdXN0b20tbm9uLXZpc2libGUtZGF0YS13aXRoLXRoZS1kYXRhLSotYXR0cmlidXRlcylcbiAgICAgICAgWE1MLWNvbXBhdGlibGUgKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjeG1sLWNvbXBhdGlibGUgYW5kIGh0dHA6Ly93d3cudzMub3JnL1RSL3htbC8jZDBlODA0KVxuICAgICAgICBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSB2YWx1ZTsgaXQncyBhbHdheXMgVVJJIHNhZmUuICovXG4gICAgaWYgKFxuICAgICAgQUxMT1dfREFUQV9BVFRSICYmXG4gICAgICAhRk9SQklEX0FUVFJbbGNOYW1lXSAmJlxuICAgICAgcmVnRXhwVGVzdChEQVRBX0FUVFIsIGxjTmFtZSlcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgYXR0cmlidXRlIGlzIHNhZmVcbiAgICB9IGVsc2UgaWYgKEFMTE9XX0FSSUFfQVRUUiAmJiByZWdFeHBUZXN0KEFSSUFfQVRUUiwgbGNOYW1lKSkge1xuICAgICAgLy8gVGhpcyBhdHRyaWJ1dGUgaXMgc2FmZVxuICAgICAgLyogQ2hlY2sgaWYgQUREX0FUVFIgZnVuY3Rpb24gYWxsb3dzIHRoaXMgYXR0cmlidXRlICovXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIEVYVFJBX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJlxuICAgICAgRVhUUkFfRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVDaGVjayhsY05hbWUsIGxjVGFnKVxuICAgICkge1xuICAgICAgLy8gVGhpcyBhdHRyaWJ1dGUgaXMgc2FmZVxuICAgICAgLyogT3RoZXJ3aXNlLCBjaGVjayB0aGUgbmFtZSBpcyBwZXJtaXR0ZWQgKi9cbiAgICB9IGVsc2UgaWYgKCFBTExPV0VEX0FUVFJbbGNOYW1lXSB8fCBGT1JCSURfQVRUUltsY05hbWVdKSB7XG4gICAgICBpZiAoXG4gICAgICAgIC8vIEZpcnN0IGNvbmRpdGlvbiBkb2VzIGEgdmVyeSBiYXNpYyBjaGVjayBpZiBhKSBpdCdzIGJhc2ljYWxseSBhIHZhbGlkIGN1c3RvbSBlbGVtZW50IHRhZ25hbWUgQU5EXG4gICAgICAgIC8vIGIpIGlmIHRoZSB0YWdOYW1lIHBhc3NlcyB3aGF0ZXZlciB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBmb3IgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrXG4gICAgICAgIC8vIGFuZCBjKSBpZiB0aGUgYXR0cmlidXRlIG5hbWUgcGFzc2VzIHdoYXRldmVyIHRoZSB1c2VyIGhhcyBjb25maWd1cmVkIGZvciBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2tcbiAgICAgICAgKF9pc0Jhc2ljQ3VzdG9tRWxlbWVudChsY1RhZykgJiZcbiAgICAgICAgICAoKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJlxuICAgICAgICAgICAgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2ssIGxjVGFnKSkgfHxcbiAgICAgICAgICAgIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJlxuICAgICAgICAgICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sobGNUYWcpKSkgJiZcbiAgICAgICAgICAoKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJlxuICAgICAgICAgICAgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2ssIGxjTmFtZSkpIHx8XG4gICAgICAgICAgICAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiZcbiAgICAgICAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKGxjTmFtZSwgbGNUYWcpKSkpIHx8XG4gICAgICAgIC8vIEFsdGVybmF0aXZlLCBzZWNvbmQgY29uZGl0aW9uIGNoZWNrcyBpZiBpdCdzIGFuIGBpc2AtYXR0cmlidXRlLCBBTkRcbiAgICAgICAgLy8gdGhlIHZhbHVlIHBhc3NlcyB3aGF0ZXZlciB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBmb3IgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrXG4gICAgICAgIChsY05hbWUgPT09ICdpcycgJiZcbiAgICAgICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgJiZcbiAgICAgICAgICAoKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJlxuICAgICAgICAgICAgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2ssIHZhbHVlKSkgfHxcbiAgICAgICAgICAgIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJlxuICAgICAgICAgICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sodmFsdWUpKSkpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgdXNlciBoYXMgc3VwcGxpZWQgYSByZWdleHAgb3IgZnVuY3Rpb24gaW4gQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCB3ZSBuZWVkIHRvIGFsc28gYWxsb3cgZGVyaXZlZCBjdXN0b20gZWxlbWVudHMgdXNpbmcgdGhlIHNhbWUgdGFnTmFtZSB0ZXN0LlxuICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHdlIG5lZWQgdG8gYWxsb3cgYXR0cmlidXRlcyBwYXNzaW5nIHRoZSBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sgdXNlciBoYXMgY29uZmlndXJlZCwgYXMgY3VzdG9tIGVsZW1lbnRzIGNhbiBkZWZpbmUgdGhlc2UgYXQgdGhlaXIgb3duIGRpc2NyZXRpb24uXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvKiBDaGVjayB2YWx1ZSBpcyBzYWZlLiBGaXJzdCwgaXMgYXR0ciBpbmVydD8gSWYgc28sIGlzIHNhZmUgKi9cbiAgICB9IGVsc2UgaWYgKFVSSV9TQUZFX0FUVFJJQlVURVNbbGNOYW1lXSkge1xuICAgICAgLy8gVGhpcyBhdHRyaWJ1dGUgaXMgc2FmZVxuICAgICAgLyogQ2hlY2sgbm8gc2NyaXB0LCBkYXRhIG9yIHVua25vd24gcG9zc2libHkgdW5zYWZlIFVSSVxuICAgICAgICB1bmxlc3Mgd2Uga25vdyBVUkkgdmFsdWVzIGFyZSBzYWZlIGZvciB0aGF0IGF0dHJpYnV0ZSAqL1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICByZWdFeHBUZXN0KElTX0FMTE9XRURfVVJJLCBzdHJpbmdSZXBsYWNlKHZhbHVlLCBBVFRSX1dISVRFU1BBQ0UsICcnKSlcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgYXR0cmlidXRlIGlzIHNhZmVcbiAgICAgIC8qIEtlZXAgaW1hZ2UgZGF0YSBVUklzIGFsaXZlIGlmIHNyYy94bGluazpocmVmIGlzIGFsbG93ZWQgKi9cbiAgICAgIC8qIEZ1cnRoZXIgcHJldmVudCBnYWRnZXQgWFNTIGZvciBkeW5hbWljYWxseSBidWlsdCBzY3JpcHQgdGFncyAqL1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAobGNOYW1lID09PSAnc3JjJyB8fCBsY05hbWUgPT09ICd4bGluazpocmVmJyB8fCBsY05hbWUgPT09ICdocmVmJykgJiZcbiAgICAgIGxjVGFnICE9PSAnc2NyaXB0JyAmJlxuICAgICAgc3RyaW5nSW5kZXhPZih2YWx1ZSwgJ2RhdGE6JykgPT09IDAgJiZcbiAgICAgIERBVEFfVVJJX1RBR1NbbGNUYWddXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIGF0dHJpYnV0ZSBpcyBzYWZlXG4gICAgICAvKiBBbGxvdyB1bmtub3duIHByb3RvY29sczogVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvciBsaW5rcyB0aGF0XG4gICAgICAgIGFyZSBoYW5kbGVkIGJ5IHByb3RvY29sIGhhbmRsZXJzIHdoaWNoIG1heSBiZSB1bmtub3duIGFoZWFkIG9mXG4gICAgICAgIHRpbWUsIGUuZy4gZmI6LCBzcG90aWZ5OiAqL1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBBTExPV19VTktOT1dOX1BST1RPQ09MUyAmJlxuICAgICAgIXJlZ0V4cFRlc3QoSVNfU0NSSVBUX09SX0RBVEEsIHN0cmluZ1JlcGxhY2UodmFsdWUsIEFUVFJfV0hJVEVTUEFDRSwgJycpKVxuICAgICkge1xuICAgICAgLy8gVGhpcyBhdHRyaWJ1dGUgaXMgc2FmZVxuICAgICAgLyogQ2hlY2sgZm9yIGJpbmFyeSBhdHRyaWJ1dGVzICovXG4gICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCaW5hcnkgYXR0cmlidXRlcyBhcmUgc2FmZSBhdCB0aGlzIHBvaW50XG4gICAgICAvKiBBbnl0aGluZyBlbHNlLCBwcmVzdW1lIHVuc2FmZSwgZG8gbm90IGFkZCBpdCBiYWNrICovXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIF9pc0Jhc2ljQ3VzdG9tRWxlbWVudFxuICAgKiBjaGVja3MgaWYgYXQgbGVhc3Qgb25lIGRhc2ggaXMgaW5jbHVkZWQgaW4gdGFnTmFtZSwgYW5kIGl0J3Mgbm90IHRoZSBmaXJzdCBjaGFyXG4gICAqIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgY2hlY2tpbmcgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvdmFsaWRhdGUtZWxlbWVudC1uYW1lXG4gICAqXG4gICAqIEBwYXJhbSB0YWdOYW1lIG5hbWUgb2YgdGhlIHRhZyBvZiB0aGUgbm9kZSB0byBzYW5pdGl6ZVxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdGhlIHRhZyBuYW1lIG1lZXRzIHRoZSBiYXNpYyBjcml0ZXJpYSBmb3IgYSBjdXN0b20gZWxlbWVudCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgY29uc3QgX2lzQmFzaWNDdXN0b21FbGVtZW50ID0gZnVuY3Rpb24gKHRhZ05hbWU6IHN0cmluZyk6IFJlZ0V4cE1hdGNoQXJyYXkge1xuICAgIHJldHVybiB0YWdOYW1lICE9PSAnYW5ub3RhdGlvbi14bWwnICYmIHN0cmluZ01hdGNoKHRhZ05hbWUsIENVU1RPTV9FTEVNRU5UKTtcbiAgfTtcblxuICAvKipcbiAgICogX3Nhbml0aXplQXR0cmlidXRlc1xuICAgKlxuICAgKiBAcHJvdGVjdCBhdHRyaWJ1dGVzXG4gICAqIEBwcm90ZWN0IG5vZGVOYW1lXG4gICAqIEBwcm90ZWN0IHJlbW92ZUF0dHJpYnV0ZVxuICAgKiBAcHJvdGVjdCBzZXRBdHRyaWJ1dGVcbiAgICpcbiAgICogQHBhcmFtIGN1cnJlbnROb2RlIHRvIHNhbml0aXplXG4gICAqL1xuICBjb25zdCBfc2FuaXRpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKGN1cnJlbnROb2RlOiBFbGVtZW50KTogdm9pZCB7XG4gICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgIF9leGVjdXRlSG9va3MoaG9va3MuYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzLCBjdXJyZW50Tm9kZSwgbnVsbCk7XG5cbiAgICBjb25zdCB7IGF0dHJpYnV0ZXMgfSA9IGN1cnJlbnROb2RlO1xuXG4gICAgLyogQ2hlY2sgaWYgd2UgaGF2ZSBhdHRyaWJ1dGVzOyBpZiBub3Qgd2UgbWlnaHQgaGF2ZSBhIHRleHQgbm9kZSAqL1xuICAgIGlmICghYXR0cmlidXRlcyB8fCBfaXNDbG9iYmVyZWQoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaG9va0V2ZW50ID0ge1xuICAgICAgYXR0ck5hbWU6ICcnLFxuICAgICAgYXR0clZhbHVlOiAnJyxcbiAgICAgIGtlZXBBdHRyOiB0cnVlLFxuICAgICAgYWxsb3dlZEF0dHJpYnV0ZXM6IEFMTE9XRURfQVRUUixcbiAgICAgIGZvcmNlS2VlcEF0dHI6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIGxldCBsID0gYXR0cmlidXRlcy5sZW5ndGg7XG5cbiAgICAvKiBHbyBiYWNrd2FyZHMgb3ZlciBhbGwgYXR0cmlidXRlczsgc2FmZWx5IHJlbW92ZSBiYWQgb25lcyAqL1xuICAgIHdoaWxlIChsLS0pIHtcbiAgICAgIGNvbnN0IGF0dHIgPSBhdHRyaWJ1dGVzW2xdO1xuICAgICAgY29uc3QgeyBuYW1lLCBuYW1lc3BhY2VVUkksIHZhbHVlOiBhdHRyVmFsdWUgfSA9IGF0dHI7XG4gICAgICBjb25zdCBsY05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhuYW1lKTtcblxuICAgICAgY29uc3QgaW5pdFZhbHVlID0gYXR0clZhbHVlO1xuICAgICAgbGV0IHZhbHVlID0gbmFtZSA9PT0gJ3ZhbHVlJyA/IGluaXRWYWx1ZSA6IHN0cmluZ1RyaW0oaW5pdFZhbHVlKTtcblxuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgaG9va0V2ZW50LmF0dHJOYW1lID0gbGNOYW1lO1xuICAgICAgaG9va0V2ZW50LmF0dHJWYWx1ZSA9IHZhbHVlO1xuICAgICAgaG9va0V2ZW50LmtlZXBBdHRyID0gdHJ1ZTtcbiAgICAgIGhvb2tFdmVudC5mb3JjZUtlZXBBdHRyID0gdW5kZWZpbmVkOyAvLyBBbGxvd3MgZGV2ZWxvcGVycyB0byBzZWUgdGhpcyBpcyBhIHByb3BlcnR5IHRoZXkgY2FuIHNldFxuICAgICAgX2V4ZWN1dGVIb29rcyhob29rcy51cG9uU2FuaXRpemVBdHRyaWJ1dGUsIGN1cnJlbnROb2RlLCBob29rRXZlbnQpO1xuICAgICAgdmFsdWUgPSBob29rRXZlbnQuYXR0clZhbHVlO1xuXG4gICAgICAvKiBGdWxsIERPTSBDbG9iYmVyaW5nIHByb3RlY3Rpb24gdmlhIG5hbWVzcGFjZSBpc29sYXRpb24sXG4gICAgICAgKiBQcmVmaXggaWQgYW5kIG5hbWUgYXR0cmlidXRlcyB3aXRoIGB1c2VyLWNvbnRlbnQtYFxuICAgICAgICovXG4gICAgICBpZiAoU0FOSVRJWkVfTkFNRURfUFJPUFMgJiYgKGxjTmFtZSA9PT0gJ2lkJyB8fCBsY05hbWUgPT09ICduYW1lJykpIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGlzIHZhbHVlXG4gICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuXG4gICAgICAgIC8vIFByZWZpeCB0aGUgdmFsdWUgYW5kIGxhdGVyIHJlLWNyZWF0ZSB0aGUgYXR0cmlidXRlIHdpdGggdGhlIHNhbml0aXplZCB2YWx1ZVxuICAgICAgICB2YWx1ZSA9IFNBTklUSVpFX05BTUVEX1BST1BTX1BSRUZJWCArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvKiBXb3JrIGFyb3VuZCBhIHNlY3VyaXR5IGlzc3VlIHdpdGggY29tbWVudHMgaW5zaWRlIGF0dHJpYnV0ZXMgKi9cbiAgICAgIGlmIChcbiAgICAgICAgU0FGRV9GT1JfWE1MICYmXG4gICAgICAgIHJlZ0V4cFRlc3QoXG4gICAgICAgICAgLygoLS0hP3xdKT4pfDxcXC8oc3R5bGV8c2NyaXB0fHRpdGxlfHhtcHx0ZXh0YXJlYXxub3NjcmlwdHxpZnJhbWV8bm9lbWJlZHxub2ZyYW1lcykvaSxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgX3JlbW92ZUF0dHJpYnV0ZShuYW1lLCBjdXJyZW50Tm9kZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBNYWtlIHN1cmUgd2UgY2Fubm90IGVhc2lseSB1c2UgYW5pbWF0ZWQgaHJlZnMsIGV2ZW4gaWYgYW5pbWF0aW9ucyBhcmUgYWxsb3dlZCAqL1xuICAgICAgaWYgKGxjTmFtZSA9PT0gJ2F0dHJpYnV0ZW5hbWUnICYmIHN0cmluZ01hdGNoKHZhbHVlLCAnaHJlZicpKSB7XG4gICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLyogRGlkIHRoZSBob29rcyBhcHByb3ZlIG9mIHRoZSBhdHRyaWJ1dGU/ICovXG4gICAgICBpZiAoaG9va0V2ZW50LmZvcmNlS2VlcEF0dHIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8qIERpZCB0aGUgaG9va3MgYXBwcm92ZSBvZiB0aGUgYXR0cmlidXRlPyAqL1xuICAgICAgaWYgKCFob29rRXZlbnQua2VlcEF0dHIpIHtcbiAgICAgICAgX3JlbW92ZUF0dHJpYnV0ZShuYW1lLCBjdXJyZW50Tm9kZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBXb3JrIGFyb3VuZCBhIHNlY3VyaXR5IGlzc3VlIGluIGpRdWVyeSAzLjAgKi9cbiAgICAgIGlmICghQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSICYmIHJlZ0V4cFRlc3QoL1xcLz4vaSwgdmFsdWUpKSB7XG4gICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLyogU2FuaXRpemUgYXR0cmlidXRlIGNvbnRlbnQgdG8gYmUgdGVtcGxhdGUtc2FmZSAqL1xuICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICBhcnJheUZvckVhY2goW01VU1RBQ0hFX0VYUFIsIEVSQl9FWFBSLCBUTVBMSVRfRVhQUl0sIChleHByOiBSZWdFeHApID0+IHtcbiAgICAgICAgICB2YWx1ZSA9IHN0cmluZ1JlcGxhY2UodmFsdWUsIGV4cHIsICcgJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvKiBJcyBgdmFsdWVgIHZhbGlkIGZvciB0aGlzIGF0dHJpYnV0ZT8gKi9cbiAgICAgIGNvbnN0IGxjVGFnID0gdHJhbnNmb3JtQ2FzZUZ1bmMoY3VycmVudE5vZGUubm9kZU5hbWUpO1xuICAgICAgaWYgKCFfaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSkpIHtcbiAgICAgICAgX3JlbW92ZUF0dHJpYnV0ZShuYW1lLCBjdXJyZW50Tm9kZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBIYW5kbGUgYXR0cmlidXRlcyB0aGF0IHJlcXVpcmUgVHJ1c3RlZCBUeXBlcyAqL1xuICAgICAgaWYgKFxuICAgICAgICB0cnVzdGVkVHlwZXNQb2xpY3kgJiZcbiAgICAgICAgdHlwZW9mIHRydXN0ZWRUeXBlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdHlwZW9mIHRydXN0ZWRUeXBlcy5nZXRBdHRyaWJ1dGVUeXBlID09PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgaWYgKG5hbWVzcGFjZVVSSSkge1xuICAgICAgICAgIC8qIE5hbWVzcGFjZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLCBzZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTMwNTI5MyAqL1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXRjaCAodHJ1c3RlZFR5cGVzLmdldEF0dHJpYnV0ZVR5cGUobGNUYWcsIGxjTmFtZSkpIHtcbiAgICAgICAgICAgIGNhc2UgJ1RydXN0ZWRIVE1MJzoge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKHZhbHVlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ1RydXN0ZWRTY3JpcHRVUkwnOiB7XG4gICAgICAgICAgICAgIHZhbHVlID0gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZVNjcmlwdFVSTCh2YWx1ZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBIYW5kbGUgaW52YWxpZCBkYXRhLSogYXR0cmlidXRlIHNldCBieSB0cnktY2F0Y2hpbmcgaXQgKi9cbiAgICAgIGlmICh2YWx1ZSAhPT0gaW5pdFZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKG5hbWVzcGFjZVVSSSkge1xuICAgICAgICAgICAgY3VycmVudE5vZGUuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8qIEZhbGxiYWNrIHRvIHNldEF0dHJpYnV0ZSgpIGZvciBicm93c2VyLXVucmVjb2duaXplZCBuYW1lc3BhY2VzIGUuZy4gXCJ4LXNjaGVtYVwiLiAqL1xuICAgICAgICAgICAgY3VycmVudE5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoX2lzQ2xvYmJlcmVkKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlQb3AoRE9NUHVyaWZ5LnJlbW92ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgIF9leGVjdXRlSG9va3MoaG9va3MuYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgfTtcblxuICAvKipcbiAgICogX3Nhbml0aXplU2hhZG93RE9NXG4gICAqXG4gICAqIEBwYXJhbSBmcmFnbWVudCB0byBpdGVyYXRlIG92ZXIgcmVjdXJzaXZlbHlcbiAgICovXG4gIGNvbnN0IF9zYW5pdGl6ZVNoYWRvd0RPTSA9IGZ1bmN0aW9uIChmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCk6IHZvaWQge1xuICAgIGxldCBzaGFkb3dOb2RlID0gbnVsbDtcbiAgICBjb25zdCBzaGFkb3dJdGVyYXRvciA9IF9jcmVhdGVOb2RlSXRlcmF0b3IoZnJhZ21lbnQpO1xuXG4gICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgIF9leGVjdXRlSG9va3MoaG9va3MuYmVmb3JlU2FuaXRpemVTaGFkb3dET00sIGZyYWdtZW50LCBudWxsKTtcblxuICAgIHdoaWxlICgoc2hhZG93Tm9kZSA9IHNoYWRvd0l0ZXJhdG9yLm5leHROb2RlKCkpKSB7XG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICBfZXhlY3V0ZUhvb2tzKGhvb2tzLnVwb25TYW5pdGl6ZVNoYWRvd05vZGUsIHNoYWRvd05vZGUsIG51bGwpO1xuXG4gICAgICAvKiBTYW5pdGl6ZSB0YWdzIGFuZCBlbGVtZW50cyAqL1xuICAgICAgX3Nhbml0aXplRWxlbWVudHMoc2hhZG93Tm9kZSk7XG5cbiAgICAgIC8qIENoZWNrIGF0dHJpYnV0ZXMgbmV4dCAqL1xuICAgICAgX3Nhbml0aXplQXR0cmlidXRlcyhzaGFkb3dOb2RlKTtcblxuICAgICAgLyogRGVlcCBzaGFkb3cgRE9NIGRldGVjdGVkICovXG4gICAgICBpZiAoc2hhZG93Tm9kZS5jb250ZW50IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICBfc2FuaXRpemVTaGFkb3dET00oc2hhZG93Tm9kZS5jb250ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgX2V4ZWN1dGVIb29rcyhob29rcy5hZnRlclNhbml0aXplU2hhZG93RE9NLCBmcmFnbWVudCwgbnVsbCk7XG4gIH07XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgRE9NUHVyaWZ5LnNhbml0aXplID0gZnVuY3Rpb24gKGRpcnR5LCBjZmcgPSB7fSkge1xuICAgIGxldCBib2R5ID0gbnVsbDtcbiAgICBsZXQgaW1wb3J0ZWROb2RlID0gbnVsbDtcbiAgICBsZXQgY3VycmVudE5vZGUgPSBudWxsO1xuICAgIGxldCByZXR1cm5Ob2RlID0gbnVsbDtcbiAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIHN0cmluZyB0byBzYW5pdGl6ZS5cbiAgICAgIERPIE5PVCByZXR1cm4gZWFybHksIGFzIHRoaXMgd2lsbCByZXR1cm4gdGhlIHdyb25nIHR5cGUgaWZcbiAgICAgIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgYSBET00gb2JqZWN0IHJhdGhlciB0aGFuIGEgc3RyaW5nICovXG4gICAgSVNfRU1QVFlfSU5QVVQgPSAhZGlydHk7XG4gICAgaWYgKElTX0VNUFRZX0lOUFVUKSB7XG4gICAgICBkaXJ0eSA9ICc8IS0tPic7XG4gICAgfVxuXG4gICAgLyogU3RyaW5naWZ5LCBpbiBjYXNlIGRpcnR5IGlzIGFuIG9iamVjdCAqL1xuICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnICYmICFfaXNOb2RlKGRpcnR5KSkge1xuICAgICAgaWYgKHR5cGVvZiBkaXJ0eS50b1N0cmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBkaXJ0eSA9IGRpcnR5LnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCdkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgndG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBSZXR1cm4gZGlydHkgSFRNTCBpZiBET01QdXJpZnkgY2Fubm90IHJ1biAqL1xuICAgIGlmICghRE9NUHVyaWZ5LmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gZGlydHk7XG4gICAgfVxuXG4gICAgLyogQXNzaWduIGNvbmZpZyB2YXJzICovXG4gICAgaWYgKCFTRVRfQ09ORklHKSB7XG4gICAgICBfcGFyc2VDb25maWcoY2ZnKTtcbiAgICB9XG5cbiAgICAvKiBDbGVhbiB1cCByZW1vdmVkIGVsZW1lbnRzICovXG4gICAgRE9NUHVyaWZ5LnJlbW92ZWQgPSBbXTtcblxuICAgIC8qIENoZWNrIGlmIGRpcnR5IGlzIGNvcnJlY3RseSB0eXBlZCBmb3IgSU5fUExBQ0UgKi9cbiAgICBpZiAodHlwZW9mIGRpcnR5ID09PSAnc3RyaW5nJykge1xuICAgICAgSU5fUExBQ0UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoSU5fUExBQ0UpIHtcbiAgICAgIC8qIERvIHNvbWUgZWFybHkgcHJlLXNhbml0aXphdGlvbiB0byBhdm9pZCB1bnNhZmUgcm9vdCBub2RlcyAqL1xuICAgICAgaWYgKChkaXJ0eSBhcyBOb2RlKS5ub2RlTmFtZSkge1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoKGRpcnR5IGFzIE5vZGUpLm5vZGVOYW1lKTtcbiAgICAgICAgaWYgKCFBTExPV0VEX1RBR1NbdGFnTmFtZV0gfHwgRk9SQklEX1RBR1NbdGFnTmFtZV0pIHtcbiAgICAgICAgICB0aHJvdyB0eXBlRXJyb3JDcmVhdGUoXG4gICAgICAgICAgICAncm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXJ0eSBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgIC8qIElmIGRpcnR5IGlzIGEgRE9NIGVsZW1lbnQsIGFwcGVuZCB0byBhbiBlbXB0eSBkb2N1bWVudCB0byBhdm9pZFxuICAgICAgICAgZWxlbWVudHMgYmVpbmcgc3RyaXBwZWQgYnkgdGhlIHBhcnNlciAqL1xuICAgICAgYm9keSA9IF9pbml0RG9jdW1lbnQoJzwhLS0tLT4nKTtcbiAgICAgIGltcG9ydGVkTm9kZSA9IGJvZHkub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKGRpcnR5LCB0cnVlKTtcbiAgICAgIGlmIChcbiAgICAgICAgaW1wb3J0ZWROb2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuZWxlbWVudCAmJlxuICAgICAgICBpbXBvcnRlZE5vZGUubm9kZU5hbWUgPT09ICdCT0RZJ1xuICAgICAgKSB7XG4gICAgICAgIC8qIE5vZGUgaXMgYWxyZWFkeSBhIGJvZHksIHVzZSBhcyBpcyAqL1xuICAgICAgICBib2R5ID0gaW1wb3J0ZWROb2RlO1xuICAgICAgfSBlbHNlIGlmIChpbXBvcnRlZE5vZGUubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgICAgICBib2R5ID0gaW1wb3J0ZWROb2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWFwcGVuZFxuICAgICAgICBib2R5LmFwcGVuZENoaWxkKGltcG9ydGVkTm9kZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIEV4aXQgZGlyZWN0bHkgaWYgd2UgaGF2ZSBub3RoaW5nIHRvIGRvICovXG4gICAgICBpZiAoXG4gICAgICAgICFSRVRVUk5fRE9NICYmXG4gICAgICAgICFTQUZFX0ZPUl9URU1QTEFURVMgJiZcbiAgICAgICAgIVdIT0xFX0RPQ1VNRU5UICYmXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1pbmNsdWRlc1xuICAgICAgICBkaXJ0eS5pbmRleE9mKCc8JykgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydXN0ZWRUeXBlc1BvbGljeSAmJiBSRVRVUk5fVFJVU1RFRF9UWVBFXG4gICAgICAgICAgPyB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTChkaXJ0eSlcbiAgICAgICAgICA6IGRpcnR5O1xuICAgICAgfVxuXG4gICAgICAvKiBJbml0aWFsaXplIHRoZSBkb2N1bWVudCB0byB3b3JrIG9uICovXG4gICAgICBib2R5ID0gX2luaXREb2N1bWVudChkaXJ0eSk7XG5cbiAgICAgIC8qIENoZWNrIHdlIGhhdmUgYSBET00gbm9kZSBmcm9tIHRoZSBkYXRhICovXG4gICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgcmV0dXJuIFJFVFVSTl9ET00gPyBudWxsIDogUkVUVVJOX1RSVVNURURfVFlQRSA/IGVtcHR5SFRNTCA6ICcnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIFJlbW92ZSBmaXJzdCBlbGVtZW50IG5vZGUgKG91cnMpIGlmIEZPUkNFX0JPRFkgaXMgc2V0ICovXG4gICAgaWYgKGJvZHkgJiYgRk9SQ0VfQk9EWSkge1xuICAgICAgX2ZvcmNlUmVtb3ZlKGJvZHkuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgLyogR2V0IG5vZGUgaXRlcmF0b3IgKi9cbiAgICBjb25zdCBub2RlSXRlcmF0b3IgPSBfY3JlYXRlTm9kZUl0ZXJhdG9yKElOX1BMQUNFID8gZGlydHkgOiBib2R5KTtcblxuICAgIC8qIE5vdyBzdGFydCBpdGVyYXRpbmcgb3ZlciB0aGUgY3JlYXRlZCBkb2N1bWVudCAqL1xuICAgIHdoaWxlICgoY3VycmVudE5vZGUgPSBub2RlSXRlcmF0b3IubmV4dE5vZGUoKSkpIHtcbiAgICAgIC8qIFNhbml0aXplIHRhZ3MgYW5kIGVsZW1lbnRzICovXG4gICAgICBfc2FuaXRpemVFbGVtZW50cyhjdXJyZW50Tm9kZSk7XG5cbiAgICAgIC8qIENoZWNrIGF0dHJpYnV0ZXMgbmV4dCAqL1xuICAgICAgX3Nhbml0aXplQXR0cmlidXRlcyhjdXJyZW50Tm9kZSk7XG5cbiAgICAgIC8qIFNoYWRvdyBET00gZGV0ZWN0ZWQsIHNhbml0aXplIGl0ICovXG4gICAgICBpZiAoY3VycmVudE5vZGUuY29udGVudCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgX3Nhbml0aXplU2hhZG93RE9NKGN1cnJlbnROb2RlLmNvbnRlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIElmIHdlIHNhbml0aXplZCBgZGlydHlgIGluLXBsYWNlLCByZXR1cm4gaXQuICovXG4gICAgaWYgKElOX1BMQUNFKSB7XG4gICAgICByZXR1cm4gZGlydHk7XG4gICAgfVxuXG4gICAgLyogUmV0dXJuIHNhbml0aXplZCBzdHJpbmcgb3IgRE9NICovXG4gICAgaWYgKFJFVFVSTl9ET00pIHtcbiAgICAgIGlmIChSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgIHJldHVybk5vZGUgPSBjcmVhdGVEb2N1bWVudEZyYWdtZW50LmNhbGwoYm9keS5vd25lckRvY3VtZW50KTtcblxuICAgICAgICB3aGlsZSAoYm9keS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWFwcGVuZFxuICAgICAgICAgIHJldHVybk5vZGUuYXBwZW5kQ2hpbGQoYm9keS5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuTm9kZSA9IGJvZHk7XG4gICAgICB9XG5cbiAgICAgIGlmIChBTExPV0VEX0FUVFIuc2hhZG93cm9vdCB8fCBBTExPV0VEX0FUVFIuc2hhZG93cm9vdG1vZGUpIHtcbiAgICAgICAgLypcbiAgICAgICAgICBBZG9wdE5vZGUoKSBpcyBub3QgdXNlZCBiZWNhdXNlIGludGVybmFsIHN0YXRlIGlzIG5vdCByZXNldFxuICAgICAgICAgIChlLmcuIHRoZSBwYXN0IG5hbWVzIG1hcCBvZiBhIEhUTUxGb3JtRWxlbWVudCksIHRoaXMgaXMgc2FmZVxuICAgICAgICAgIGluIHRoZW9yeSBidXQgd2Ugd291bGQgcmF0aGVyIG5vdCByaXNrIGFub3RoZXIgYXR0YWNrIHZlY3Rvci5cbiAgICAgICAgICBUaGUgc3RhdGUgdGhhdCBpcyBjbG9uZWQgYnkgaW1wb3J0Tm9kZSgpIGlzIGV4cGxpY2l0bHkgZGVmaW5lZFxuICAgICAgICAgIGJ5IHRoZSBzcGVjcy5cbiAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuTm9kZSA9IGltcG9ydE5vZGUuY2FsbChvcmlnaW5hbERvY3VtZW50LCByZXR1cm5Ob2RlLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldHVybk5vZGU7XG4gICAgfVxuXG4gICAgbGV0IHNlcmlhbGl6ZWRIVE1MID0gV0hPTEVfRE9DVU1FTlQgPyBib2R5Lm91dGVySFRNTCA6IGJvZHkuaW5uZXJIVE1MO1xuXG4gICAgLyogU2VyaWFsaXplIGRvY3R5cGUgaWYgYWxsb3dlZCAqL1xuICAgIGlmIChcbiAgICAgIFdIT0xFX0RPQ1VNRU5UICYmXG4gICAgICBBTExPV0VEX1RBR1NbJyFkb2N0eXBlJ10gJiZcbiAgICAgIGJvZHkub3duZXJEb2N1bWVudCAmJlxuICAgICAgYm9keS5vd25lckRvY3VtZW50LmRvY3R5cGUgJiZcbiAgICAgIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUgJiZcbiAgICAgIHJlZ0V4cFRlc3QoRVhQUkVTU0lPTlMuRE9DVFlQRV9OQU1FLCBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKVxuICAgICkge1xuICAgICAgc2VyaWFsaXplZEhUTUwgPVxuICAgICAgICAnPCFET0NUWVBFICcgKyBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lICsgJz5cXG4nICsgc2VyaWFsaXplZEhUTUw7XG4gICAgfVxuXG4gICAgLyogU2FuaXRpemUgZmluYWwgc3RyaW5nIHRlbXBsYXRlLXNhZmUgKi9cbiAgICBpZiAoU0FGRV9GT1JfVEVNUExBVEVTKSB7XG4gICAgICBhcnJheUZvckVhY2goW01VU1RBQ0hFX0VYUFIsIEVSQl9FWFBSLCBUTVBMSVRfRVhQUl0sIChleHByOiBSZWdFeHApID0+IHtcbiAgICAgICAgc2VyaWFsaXplZEhUTUwgPSBzdHJpbmdSZXBsYWNlKHNlcmlhbGl6ZWRIVE1MLCBleHByLCAnICcpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydXN0ZWRUeXBlc1BvbGljeSAmJiBSRVRVUk5fVFJVU1RFRF9UWVBFXG4gICAgICA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKHNlcmlhbGl6ZWRIVE1MKVxuICAgICAgOiBzZXJpYWxpemVkSFRNTDtcbiAgfTtcblxuICBET01QdXJpZnkuc2V0Q29uZmlnID0gZnVuY3Rpb24gKGNmZyA9IHt9KSB7XG4gICAgX3BhcnNlQ29uZmlnKGNmZyk7XG4gICAgU0VUX0NPTkZJRyA9IHRydWU7XG4gIH07XG5cbiAgRE9NUHVyaWZ5LmNsZWFyQ29uZmlnID0gZnVuY3Rpb24gKCkge1xuICAgIENPTkZJRyA9IG51bGw7XG4gICAgU0VUX0NPTkZJRyA9IGZhbHNlO1xuICB9O1xuXG4gIERPTVB1cmlmeS5pc1ZhbGlkQXR0cmlidXRlID0gZnVuY3Rpb24gKHRhZywgYXR0ciwgdmFsdWUpIHtcbiAgICAvKiBJbml0aWFsaXplIHNoYXJlZCBjb25maWcgdmFycyBpZiBuZWNlc3NhcnkuICovXG4gICAgaWYgKCFDT05GSUcpIHtcbiAgICAgIF9wYXJzZUNvbmZpZyh7fSk7XG4gICAgfVxuXG4gICAgY29uc3QgbGNUYWcgPSB0cmFuc2Zvcm1DYXNlRnVuYyh0YWcpO1xuICAgIGNvbnN0IGxjTmFtZSA9IHRyYW5zZm9ybUNhc2VGdW5jKGF0dHIpO1xuICAgIHJldHVybiBfaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSk7XG4gIH07XG5cbiAgRE9NUHVyaWZ5LmFkZEhvb2sgPSBmdW5jdGlvbiAoXG4gICAgZW50cnlQb2ludDoga2V5b2YgSG9va3NNYXAsXG4gICAgaG9va0Z1bmN0aW9uOiBIb29rRnVuY3Rpb25cbiAgKSB7XG4gICAgaWYgKHR5cGVvZiBob29rRnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhcnJheVB1c2goaG9va3NbZW50cnlQb2ludF0sIGhvb2tGdW5jdGlvbik7XG4gIH07XG5cbiAgRE9NUHVyaWZ5LnJlbW92ZUhvb2sgPSBmdW5jdGlvbiAoXG4gICAgZW50cnlQb2ludDoga2V5b2YgSG9va3NNYXAsXG4gICAgaG9va0Z1bmN0aW9uOiBIb29rRnVuY3Rpb25cbiAgKSB7XG4gICAgaWYgKGhvb2tGdW5jdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGFycmF5TGFzdEluZGV4T2YoaG9va3NbZW50cnlQb2ludF0sIGhvb2tGdW5jdGlvbik7XG5cbiAgICAgIHJldHVybiBpbmRleCA9PT0gLTFcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBhcnJheVNwbGljZShob29rc1tlbnRyeVBvaW50XSwgaW5kZXgsIDEpWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheVBvcChob29rc1tlbnRyeVBvaW50XSk7XG4gIH07XG5cbiAgRE9NUHVyaWZ5LnJlbW92ZUhvb2tzID0gZnVuY3Rpb24gKGVudHJ5UG9pbnQ6IGtleW9mIEhvb2tzTWFwKSB7XG4gICAgaG9va3NbZW50cnlQb2ludF0gPSBbXTtcbiAgfTtcblxuICBET01QdXJpZnkucmVtb3ZlQWxsSG9va3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgaG9va3MgPSBfY3JlYXRlSG9va3NNYXAoKTtcbiAgfTtcblxuICByZXR1cm4gRE9NUHVyaWZ5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVET01QdXJpZnkoKTtcblxuZXhwb3J0IGludGVyZmFjZSBET01QdXJpZnkge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIERPTVB1cmlmeSBpbnN0YW5jZSB1c2luZyB0aGUgZ2l2ZW4gd2luZG93LWxpa2Ugb2JqZWN0LiBEZWZhdWx0cyB0byBgd2luZG93YC5cbiAgICovXG4gIChyb290PzogV2luZG93TGlrZSk6IERPTVB1cmlmeTtcblxuICAvKipcbiAgICogVmVyc2lvbiBsYWJlbCwgZXhwb3NlZCBmb3IgZWFzaWVyIGNoZWNrc1xuICAgKiBpZiBET01QdXJpZnkgaXMgdXAgdG8gZGF0ZSBvciBub3RcbiAgICovXG4gIHZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQXJyYXkgb2YgZWxlbWVudHMgdGhhdCBET01QdXJpZnkgcmVtb3ZlZCBkdXJpbmcgc2FuaXRhdGlvbi5cbiAgICogRW1wdHkgaWYgbm90aGluZyB3YXMgcmVtb3ZlZC5cbiAgICovXG4gIHJlbW92ZWQ6IEFycmF5PFJlbW92ZWRFbGVtZW50IHwgUmVtb3ZlZEF0dHJpYnV0ZT47XG5cbiAgLyoqXG4gICAqIEV4cG9zZSB3aGV0aGVyIHRoaXMgYnJvd3NlciBzdXBwb3J0cyBydW5uaW5nIHRoZSBmdWxsIERPTVB1cmlmeS5cbiAgICovXG4gIGlzU3VwcG9ydGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gb25jZS5cbiAgICpcbiAgICogQHBhcmFtIGNmZyBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKi9cbiAgc2V0Q29uZmlnKGNmZz86IENvbmZpZyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBjbGVhckNvbmZpZygpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBjb3JlIHNhbml0YXRpb24gZnVuY3Rpb25hbGl0eS5cbiAgICpcbiAgICogQHBhcmFtIGRpcnR5IHN0cmluZyBvciBET00gbm9kZVxuICAgKiBAcGFyYW0gY2ZnIG9iamVjdFxuICAgKiBAcmV0dXJucyBTYW5pdGl6ZWQgVHJ1c3RlZEhUTUwuXG4gICAqL1xuICBzYW5pdGl6ZShcbiAgICBkaXJ0eTogc3RyaW5nIHwgTm9kZSxcbiAgICBjZmc6IENvbmZpZyAmIHsgUkVUVVJOX1RSVVNURURfVFlQRTogdHJ1ZSB9XG4gICk6IFRydXN0ZWRIVE1MO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBjb3JlIHNhbml0YXRpb24gZnVuY3Rpb25hbGl0eS5cbiAgICpcbiAgICogQHBhcmFtIGRpcnR5IERPTSBub2RlXG4gICAqIEBwYXJhbSBjZmcgb2JqZWN0XG4gICAqIEByZXR1cm5zIFNhbml0aXplZCBET00gbm9kZS5cbiAgICovXG4gIHNhbml0aXplKGRpcnR5OiBOb2RlLCBjZmc6IENvbmZpZyAmIHsgSU5fUExBQ0U6IHRydWUgfSk6IE5vZGU7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGNvcmUgc2FuaXRhdGlvbiBmdW5jdGlvbmFsaXR5LlxuICAgKlxuICAgKiBAcGFyYW0gZGlydHkgc3RyaW5nIG9yIERPTSBub2RlXG4gICAqIEBwYXJhbSBjZmcgb2JqZWN0XG4gICAqIEByZXR1cm5zIFNhbml0aXplZCBET00gbm9kZS5cbiAgICovXG4gIHNhbml0aXplKGRpcnR5OiBzdHJpbmcgfCBOb2RlLCBjZmc6IENvbmZpZyAmIHsgUkVUVVJOX0RPTTogdHJ1ZSB9KTogTm9kZTtcblxuICAvKipcbiAgICogUHJvdmlkZXMgY29yZSBzYW5pdGF0aW9uIGZ1bmN0aW9uYWxpdHkuXG4gICAqXG4gICAqIEBwYXJhbSBkaXJ0eSBzdHJpbmcgb3IgRE9NIG5vZGVcbiAgICogQHBhcmFtIGNmZyBvYmplY3RcbiAgICogQHJldHVybnMgU2FuaXRpemVkIGRvY3VtZW50IGZyYWdtZW50LlxuICAgKi9cbiAgc2FuaXRpemUoXG4gICAgZGlydHk6IHN0cmluZyB8IE5vZGUsXG4gICAgY2ZnOiBDb25maWcgJiB7IFJFVFVSTl9ET01fRlJBR01FTlQ6IHRydWUgfVxuICApOiBEb2N1bWVudEZyYWdtZW50O1xuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBjb3JlIHNhbml0YXRpb24gZnVuY3Rpb25hbGl0eS5cbiAgICpcbiAgICogQHBhcmFtIGRpcnR5IHN0cmluZyBvciBET00gbm9kZVxuICAgKiBAcGFyYW0gY2ZnIG9iamVjdFxuICAgKiBAcmV0dXJucyBTYW5pdGl6ZWQgc3RyaW5nLlxuICAgKi9cbiAgc2FuaXRpemUoZGlydHk6IHN0cmluZyB8IE5vZGUsIGNmZz86IENvbmZpZyk6IHN0cmluZztcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFuIGF0dHJpYnV0ZSB2YWx1ZSBpcyB2YWxpZC5cbiAgICogVXNlcyBsYXN0IHNldCBjb25maWcsIGlmIGFueS4gT3RoZXJ3aXNlLCB1c2VzIGNvbmZpZyBkZWZhdWx0cy5cbiAgICpcbiAgICogQHBhcmFtIHRhZyBUYWcgbmFtZSBvZiBjb250YWluaW5nIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBhdHRyIEF0dHJpYnV0ZSBuYW1lLlxuICAgKiBAcGFyYW0gdmFsdWUgQXR0cmlidXRlIHZhbHVlLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgYHZhbHVlYCBpcyB2YWxpZC4gT3RoZXJ3aXNlLCByZXR1cm5zIGZhbHNlLlxuICAgKi9cbiAgaXNWYWxpZEF0dHJpYnV0ZSh0YWc6IHN0cmluZywgYXR0cjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWRkcyBhIERPTVB1cmlmeSBob29rLlxuICAgKlxuICAgKiBAcGFyYW0gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gYWRkXG4gICAqIEBwYXJhbSBob29rRnVuY3Rpb24gZnVuY3Rpb24gdG8gZXhlY3V0ZVxuICAgKi9cbiAgYWRkSG9vayhlbnRyeVBvaW50OiBCYXNpY0hvb2tOYW1lLCBob29rRnVuY3Rpb246IE5vZGVIb29rKTogdm9pZDtcblxuICAvKipcbiAgICogQWRkcyBhIERPTVB1cmlmeSBob29rLlxuICAgKlxuICAgKiBAcGFyYW0gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gYWRkXG4gICAqIEBwYXJhbSBob29rRnVuY3Rpb24gZnVuY3Rpb24gdG8gZXhlY3V0ZVxuICAgKi9cbiAgYWRkSG9vayhlbnRyeVBvaW50OiBFbGVtZW50SG9va05hbWUsIGhvb2tGdW5jdGlvbjogRWxlbWVudEhvb2spOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgRE9NUHVyaWZ5IGhvb2suXG4gICAqXG4gICAqIEBwYXJhbSBlbnRyeVBvaW50IGVudHJ5IHBvaW50IGZvciB0aGUgaG9vayB0byBhZGRcbiAgICogQHBhcmFtIGhvb2tGdW5jdGlvbiBmdW5jdGlvbiB0byBleGVjdXRlXG4gICAqL1xuICBhZGRIb29rKFxuICAgIGVudHJ5UG9pbnQ6IERvY3VtZW50RnJhZ21lbnRIb29rTmFtZSxcbiAgICBob29rRnVuY3Rpb246IERvY3VtZW50RnJhZ21lbnRIb29rXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBET01QdXJpZnkgaG9vay5cbiAgICpcbiAgICogQHBhcmFtIGVudHJ5UG9pbnQgZW50cnkgcG9pbnQgZm9yIHRoZSBob29rIHRvIGFkZFxuICAgKiBAcGFyYW0gaG9va0Z1bmN0aW9uIGZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAgICovXG4gIGFkZEhvb2soXG4gICAgZW50cnlQb2ludDogJ3Vwb25TYW5pdGl6ZUVsZW1lbnQnLFxuICAgIGhvb2tGdW5jdGlvbjogVXBvblNhbml0aXplRWxlbWVudEhvb2tcbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogQWRkcyBhIERPTVB1cmlmeSBob29rLlxuICAgKlxuICAgKiBAcGFyYW0gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gYWRkXG4gICAqIEBwYXJhbSBob29rRnVuY3Rpb24gZnVuY3Rpb24gdG8gZXhlY3V0ZVxuICAgKi9cbiAgYWRkSG9vayhcbiAgICBlbnRyeVBvaW50OiAndXBvblNhbml0aXplQXR0cmlidXRlJyxcbiAgICBob29rRnVuY3Rpb246IFVwb25TYW5pdGl6ZUF0dHJpYnV0ZUhvb2tcbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogUmVtb3ZlIGEgRE9NUHVyaWZ5IGhvb2sgYXQgYSBnaXZlbiBlbnRyeVBvaW50XG4gICAqIChwb3BzIGl0IGZyb20gdGhlIHN0YWNrIG9mIGhvb2tzIGlmIGhvb2sgbm90IHNwZWNpZmllZClcbiAgICpcbiAgICogQHBhcmFtIGVudHJ5UG9pbnQgZW50cnkgcG9pbnQgZm9yIHRoZSBob29rIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gaG9va0Z1bmN0aW9uIG9wdGlvbmFsIHNwZWNpZmljIGhvb2sgdG8gcmVtb3ZlXG4gICAqIEByZXR1cm5zIHJlbW92ZWQgaG9va1xuICAgKi9cbiAgcmVtb3ZlSG9vayhcbiAgICBlbnRyeVBvaW50OiBCYXNpY0hvb2tOYW1lLFxuICAgIGhvb2tGdW5jdGlvbj86IE5vZGVIb29rXG4gICk6IE5vZGVIb29rIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBET01QdXJpZnkgaG9vayBhdCBhIGdpdmVuIGVudHJ5UG9pbnRcbiAgICogKHBvcHMgaXQgZnJvbSB0aGUgc3RhY2sgb2YgaG9va3MgaWYgaG9vayBub3Qgc3BlY2lmaWVkKVxuICAgKlxuICAgKiBAcGFyYW0gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSBob29rRnVuY3Rpb24gb3B0aW9uYWwgc3BlY2lmaWMgaG9vayB0byByZW1vdmVcbiAgICogQHJldHVybnMgcmVtb3ZlZCBob29rXG4gICAqL1xuICByZW1vdmVIb29rKFxuICAgIGVudHJ5UG9pbnQ6IEVsZW1lbnRIb29rTmFtZSxcbiAgICBob29rRnVuY3Rpb24/OiBFbGVtZW50SG9va1xuICApOiBFbGVtZW50SG9vayB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmVtb3ZlIGEgRE9NUHVyaWZ5IGhvb2sgYXQgYSBnaXZlbiBlbnRyeVBvaW50XG4gICAqIChwb3BzIGl0IGZyb20gdGhlIHN0YWNrIG9mIGhvb2tzIGlmIGhvb2sgbm90IHNwZWNpZmllZClcbiAgICpcbiAgICogQHBhcmFtIGVudHJ5UG9pbnQgZW50cnkgcG9pbnQgZm9yIHRoZSBob29rIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gaG9va0Z1bmN0aW9uIG9wdGlvbmFsIHNwZWNpZmljIGhvb2sgdG8gcmVtb3ZlXG4gICAqIEByZXR1cm5zIHJlbW92ZWQgaG9va1xuICAgKi9cbiAgcmVtb3ZlSG9vayhcbiAgICBlbnRyeVBvaW50OiBEb2N1bWVudEZyYWdtZW50SG9va05hbWUsXG4gICAgaG9va0Z1bmN0aW9uPzogRG9jdW1lbnRGcmFnbWVudEhvb2tcbiAgKTogRG9jdW1lbnRGcmFnbWVudEhvb2sgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIERPTVB1cmlmeSBob29rIGF0IGEgZ2l2ZW4gZW50cnlQb2ludFxuICAgKiAocG9wcyBpdCBmcm9tIHRoZSBzdGFjayBvZiBob29rcyBpZiBob29rIG5vdCBzcGVjaWZpZWQpXG4gICAqXG4gICAqIEBwYXJhbSBlbnRyeVBvaW50IGVudHJ5IHBvaW50IGZvciB0aGUgaG9vayB0byByZW1vdmVcbiAgICogQHBhcmFtIGhvb2tGdW5jdGlvbiBvcHRpb25hbCBzcGVjaWZpYyBob29rIHRvIHJlbW92ZVxuICAgKiBAcmV0dXJucyByZW1vdmVkIGhvb2tcbiAgICovXG4gIHJlbW92ZUhvb2soXG4gICAgZW50cnlQb2ludDogJ3Vwb25TYW5pdGl6ZUVsZW1lbnQnLFxuICAgIGhvb2tGdW5jdGlvbj86IFVwb25TYW5pdGl6ZUVsZW1lbnRIb29rXG4gICk6IFVwb25TYW5pdGl6ZUVsZW1lbnRIb29rIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBET01QdXJpZnkgaG9vayBhdCBhIGdpdmVuIGVudHJ5UG9pbnRcbiAgICogKHBvcHMgaXQgZnJvbSB0aGUgc3RhY2sgb2YgaG9va3MgaWYgaG9vayBub3Qgc3BlY2lmaWVkKVxuICAgKlxuICAgKiBAcGFyYW0gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSBob29rRnVuY3Rpb24gb3B0aW9uYWwgc3BlY2lmaWMgaG9vayB0byByZW1vdmVcbiAgICogQHJldHVybnMgcmVtb3ZlZCBob29rXG4gICAqL1xuICByZW1vdmVIb29rKFxuICAgIGVudHJ5UG9pbnQ6ICd1cG9uU2FuaXRpemVBdHRyaWJ1dGUnLFxuICAgIGhvb2tGdW5jdGlvbj86IFVwb25TYW5pdGl6ZUF0dHJpYnV0ZUhvb2tcbiAgKTogVXBvblNhbml0aXplQXR0cmlidXRlSG9vayB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgRE9NUHVyaWZ5IGhvb2tzIGF0IGEgZ2l2ZW4gZW50cnlQb2ludFxuICAgKlxuICAgKiBAcGFyYW0gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2tzIHRvIHJlbW92ZVxuICAgKi9cbiAgcmVtb3ZlSG9va3MoZW50cnlQb2ludDogSG9va05hbWUpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBET01QdXJpZnkgaG9va3MuXG4gICAqL1xuICByZW1vdmVBbGxIb29rcygpOiB2b2lkO1xufVxuXG4vKipcbiAqIEFuIGVsZW1lbnQgcmVtb3ZlZCBieSBET01QdXJpZnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3ZlZEVsZW1lbnQge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAgICovXG4gIGVsZW1lbnQ6IE5vZGU7XG59XG5cbi8qKlxuICogQW4gZWxlbWVudCByZW1vdmVkIGJ5IERPTVB1cmlmeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW1vdmVkQXR0cmlidXRlIHtcbiAgLyoqXG4gICAqIFRoZSBhdHRyaWJ1dGUgdGhhdCB3YXMgcmVtb3ZlZC5cbiAgICovXG4gIGF0dHJpYnV0ZTogQXR0ciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgcmVtb3ZlZC5cbiAgICovXG4gIGZyb206IE5vZGU7XG59XG5cbnR5cGUgQmFzaWNIb29rTmFtZSA9XG4gIHwgJ2JlZm9yZVNhbml0aXplRWxlbWVudHMnXG4gIHwgJ2FmdGVyU2FuaXRpemVFbGVtZW50cydcbiAgfCAndXBvblNhbml0aXplU2hhZG93Tm9kZSc7XG50eXBlIEVsZW1lbnRIb29rTmFtZSA9ICdiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMnIHwgJ2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzJztcbnR5cGUgRG9jdW1lbnRGcmFnbWVudEhvb2tOYW1lID1cbiAgfCAnYmVmb3JlU2FuaXRpemVTaGFkb3dET00nXG4gIHwgJ2FmdGVyU2FuaXRpemVTaGFkb3dET00nO1xudHlwZSBVcG9uU2FuaXRpemVFbGVtZW50SG9va05hbWUgPSAndXBvblNhbml0aXplRWxlbWVudCc7XG50eXBlIFVwb25TYW5pdGl6ZUF0dHJpYnV0ZUhvb2tOYW1lID0gJ3Vwb25TYW5pdGl6ZUF0dHJpYnV0ZSc7XG5cbmludGVyZmFjZSBIb29rc01hcCB7XG4gIGJlZm9yZVNhbml0aXplRWxlbWVudHM6IE5vZGVIb29rW107XG4gIGFmdGVyU2FuaXRpemVFbGVtZW50czogTm9kZUhvb2tbXTtcbiAgYmVmb3JlU2FuaXRpemVTaGFkb3dET006IERvY3VtZW50RnJhZ21lbnRIb29rW107XG4gIHVwb25TYW5pdGl6ZVNoYWRvd05vZGU6IE5vZGVIb29rW107XG4gIGFmdGVyU2FuaXRpemVTaGFkb3dET006IERvY3VtZW50RnJhZ21lbnRIb29rW107XG4gIGJlZm9yZVNhbml0aXplQXR0cmlidXRlczogRWxlbWVudEhvb2tbXTtcbiAgYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXM6IEVsZW1lbnRIb29rW107XG4gIHVwb25TYW5pdGl6ZUVsZW1lbnQ6IFVwb25TYW5pdGl6ZUVsZW1lbnRIb29rW107XG4gIHVwb25TYW5pdGl6ZUF0dHJpYnV0ZTogVXBvblNhbml0aXplQXR0cmlidXRlSG9va1tdO1xufVxuXG50eXBlIEFycmF5RWxlbWVudDxUPiA9IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/IFUgOiBuZXZlcjtcblxudHlwZSBIb29rRnVuY3Rpb24gPSBBcnJheUVsZW1lbnQ8SG9va3NNYXBba2V5b2YgSG9va3NNYXBdPjtcblxuZXhwb3J0IHR5cGUgSG9va05hbWUgPVxuICB8IEJhc2ljSG9va05hbWVcbiAgfCBFbGVtZW50SG9va05hbWVcbiAgfCBEb2N1bWVudEZyYWdtZW50SG9va05hbWVcbiAgfCBVcG9uU2FuaXRpemVFbGVtZW50SG9va05hbWVcbiAgfCBVcG9uU2FuaXRpemVBdHRyaWJ1dGVIb29rTmFtZTtcblxuZXhwb3J0IHR5cGUgTm9kZUhvb2sgPSAoXG4gIHRoaXM6IERPTVB1cmlmeSxcbiAgY3VycmVudE5vZGU6IE5vZGUsXG4gIGhvb2tFdmVudDogbnVsbCxcbiAgY29uZmlnOiBDb25maWdcbikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgRWxlbWVudEhvb2sgPSAoXG4gIHRoaXM6IERPTVB1cmlmeSxcbiAgY3VycmVudE5vZGU6IEVsZW1lbnQsXG4gIGhvb2tFdmVudDogbnVsbCxcbiAgY29uZmlnOiBDb25maWdcbikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgRG9jdW1lbnRGcmFnbWVudEhvb2sgPSAoXG4gIHRoaXM6IERPTVB1cmlmeSxcbiAgY3VycmVudE5vZGU6IERvY3VtZW50RnJhZ21lbnQsXG4gIGhvb2tFdmVudDogbnVsbCxcbiAgY29uZmlnOiBDb25maWdcbikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgVXBvblNhbml0aXplRWxlbWVudEhvb2sgPSAoXG4gIHRoaXM6IERPTVB1cmlmeSxcbiAgY3VycmVudE5vZGU6IE5vZGUsXG4gIGhvb2tFdmVudDogVXBvblNhbml0aXplRWxlbWVudEhvb2tFdmVudCxcbiAgY29uZmlnOiBDb25maWdcbikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgVXBvblNhbml0aXplQXR0cmlidXRlSG9vayA9IChcbiAgdGhpczogRE9NUHVyaWZ5LFxuICBjdXJyZW50Tm9kZTogRWxlbWVudCxcbiAgaG9va0V2ZW50OiBVcG9uU2FuaXRpemVBdHRyaWJ1dGVIb29rRXZlbnQsXG4gIGNvbmZpZzogQ29uZmlnXG4pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBvblNhbml0aXplRWxlbWVudEhvb2tFdmVudCB7XG4gIHRhZ05hbWU6IHN0cmluZztcbiAgYWxsb3dlZFRhZ3M6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwb25TYW5pdGl6ZUF0dHJpYnV0ZUhvb2tFdmVudCB7XG4gIGF0dHJOYW1lOiBzdHJpbmc7XG4gIGF0dHJWYWx1ZTogc3RyaW5nO1xuICBrZWVwQXR0cjogYm9vbGVhbjtcbiAgYWxsb3dlZEF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICBmb3JjZUtlZXBBdHRyOiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEEgYFdpbmRvd2AtbGlrZSBvYmplY3QgY29udGFpbmluZyB0aGUgcHJvcGVydGllcyBhbmQgdHlwZXMgdGhhdCBET01QdXJpZnkgcmVxdWlyZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFdpbmRvd0xpa2UgPSBQaWNrPFxuICB0eXBlb2YgZ2xvYmFsVGhpcyxcbiAgfCAnRG9jdW1lbnRGcmFnbWVudCdcbiAgfCAnSFRNTFRlbXBsYXRlRWxlbWVudCdcbiAgfCAnTm9kZSdcbiAgfCAnRWxlbWVudCdcbiAgfCAnTm9kZUZpbHRlcidcbiAgfCAnTmFtZWROb2RlTWFwJ1xuICB8ICdIVE1MRm9ybUVsZW1lbnQnXG4gIHwgJ0RPTVBhcnNlcidcbj4gJiB7XG4gIGRvY3VtZW50PzogRG9jdW1lbnQ7XG4gIE1vek5hbWVkQXR0ck1hcD86IHR5cGVvZiB3aW5kb3cuTmFtZWROb2RlTWFwO1xufSAmIFBpY2s8VHJ1c3RlZFR5cGVzV2luZG93LCAndHJ1c3RlZFR5cGVzJz47XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9tZXNzYWdlLWRpc3BhdGNoLmpzXG4gKiBDaGF0IG1lc3NhZ2UgZGlzcGF0Y2g6IHNlbmRNZXNzYWdlLCBpbnRha2UgY29uZmlybWF0aW9uIGNhcmQsXG4gKiBwcmlvci1jbGFyaWZpY2F0aW9uIHByZWxvYWQuXG4gKlxuICogREVQRU5ERU5DSUVTIChhbGwgb24gZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgLSBwYXJzZU1lc3NhZ2VSZXNwb25zZSAodmFsaWRhdG9ycy5qcylcbiAqICAgLSBzZXRMb2FkaW5nLCBsbG1GZXRjaCAoZmV0Y2gtdXRpbHMuanMpXG4gKiAgIC0gYXBwZW5kTWVzc2FnZSwgYXBwZW5kUmV0cnlNZXNzYWdlLCBhcHBlbmRSYXdIdG1sIChtZXNzYWdlLXF1ZXVlLmpzKVxuICogICAtIG5vcm1hbGl6ZVRleHQsIGVzY2FwZUh0bWwgKHV0aWxzLmpzKVxuICogICAtIGZldGNoU3RhdHVzIChhcGktY2xpZW50LmpzKVxuICogICAtIGFuYWx5emVKb2IgKGpvYi1hbmFseXNpcy5qcylcbiAqICAgLSBzZW5kQWN0aW9uIChzZXNzaW9uLWFjdGlvbnMuanMpXG4gKiAgIC0gc2hvd1RhYmxlQmFzZWRSZXZpZXcgKHJldmlldy10YWJsZS1iYXNlLmpzLCBUaWVyIDQpXG4gKiAgIC0gaGFuZGxlRXhwZXJpZW5jZVJlc3BvbnNlIChleHBlcmllbmNlLXJldmlldy5qcywgVGllciA1KVxuICogICAtIGhhbmRsZVNraWxsc1Jlc3BvbnNlIChza2lsbHMtcmV2aWV3LmpzLCBUaWVyIDUpXG4gKiAgIC0gaGFuZGxlUXVlc3Rpb25SZXNwb25zZSAocXVlc3Rpb25zLXBhbmVsLmpzKVxuICogICAtIGV4dHJhY3RGaXJzdEpzb25PYmplY3QsIGhhbmRsZUN1c3RvbWl6YXRpb25SZXNwb25zZSAoYXBwLmpzIG9yY2hlc3RyYXRvcilcbiAqICAgLSBzdGF0ZU1hbmFnZXIgKHN0YXRlLW1hbmFnZXIuanMgXHUyMDE0IGlzTG9hZGluZygpKVxuICogICAtIHF1ZXN0aW9uQW5zd2VycywgcGVuZGluZ1JlY29tbWVuZGF0aW9ucyAod2luZG93IGdsb2JhbHMpXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdtZXNzYWdlLWRpc3BhdGNoJyk7XG5cbmltcG9ydCB7IHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5pbXBvcnQgeyBnZXRTZXNzaW9uSWRGcm9tVVJMIH0gZnJvbSAnLi9hcGktY2xpZW50LmpzJztcblxubGV0IF9wZW5kaW5nUG9zdEludGFrZUNvbnRpbnVhdGlvbiA9IG51bGw7XG5jb25zdCBSRVRSWV9QT0xJQ1lfU1RPUkFHRV9LRVkgPSAnY3YtYnVpbGRlci1yZXRyeS1wb2xpY3knO1xubGV0IF9yZXRyeUF0dGVtcHRDb3VudCA9IDA7XG5sZXQgX3JldHJ5VGltZXIgPSBudWxsO1xubGV0IF9yZXRyeUludGVydmFsID0gbnVsbDtcblxuZnVuY3Rpb24gX2NsZWFyUmV0cnlUaW1lcnMoKSB7XG4gIGlmIChfcmV0cnlUaW1lcikge1xuICAgIGNsZWFyVGltZW91dChfcmV0cnlUaW1lcik7XG4gICAgX3JldHJ5VGltZXIgPSBudWxsO1xuICB9XG4gIGlmIChfcmV0cnlJbnRlcnZhbCkge1xuICAgIGNsZWFySW50ZXJ2YWwoX3JldHJ5SW50ZXJ2YWwpO1xuICAgIF9yZXRyeUludGVydmFsID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0UmV0cnlQb2xpY3koKSB7XG4gIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgIGJhc2VNczogMTUwMCxcbiAgICBjYXBNczogNjAwMDAsXG4gICAgbWF4QXR0ZW1wdHM6IDYsXG4gICAgYXV0b1JldHJ5OiB0cnVlLFxuICB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFJFVFJZX1BPTElDWV9TVE9SQUdFX0tFWSk7XG4gICAgaWYgKCFyYXcpIHJldHVybiBkZWZhdWx0cztcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhc2VNczogTWF0aC5tYXgoMjAwLCBOdW1iZXIocGFyc2VkLmJhc2VNcyB8fCBkZWZhdWx0cy5iYXNlTXMpKSxcbiAgICAgIGNhcE1zOiBNYXRoLm1heCgxMDAwLCBOdW1iZXIocGFyc2VkLmNhcE1zIHx8IGRlZmF1bHRzLmNhcE1zKSksXG4gICAgICBtYXhBdHRlbXB0czogTWF0aC5tYXgoMSwgTnVtYmVyKHBhcnNlZC5tYXhBdHRlbXB0cyB8fCBkZWZhdWx0cy5tYXhBdHRlbXB0cykpLFxuICAgICAgYXV0b1JldHJ5OiBwYXJzZWQuYXV0b1JldHJ5ICE9PSBmYWxzZSxcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdHM7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2NhbGN1bGF0ZVJldHJ5RGVsYXlNcyhraW5kLCBlcnJvcikge1xuICBjb25zdCBwb2xpY3kgPSBfZ2V0UmV0cnlQb2xpY3koKTtcbiAgY29uc3QgZXhwID0gTWF0aC5taW4ocG9saWN5LmNhcE1zLCBwb2xpY3kuYmFzZU1zICogKDIgKiogX3JldHJ5QXR0ZW1wdENvdW50KSk7XG4gIGNvbnN0IGppdHRlciA9IE1hdGgucm91bmQoZXhwICogKDAuMSArIE1hdGgucmFuZG9tKCkgKiAwLjE1KSk7XG4gIGxldCBkZWxheU1zID0gTWF0aC5taW4ocG9saWN5LmNhcE1zLCBleHAgKyBqaXR0ZXIpO1xuXG4gIGlmIChraW5kID09PSAncmF0ZS1saW1pdGVkJykge1xuICAgIGNvbnN0IHJldHJ5QWZ0ZXJTZWMgPSBOdW1iZXIoZXJyb3I/LnJldHJ5QWZ0ZXJTZWMgfHwgMCk7XG4gICAgaWYgKHJldHJ5QWZ0ZXJTZWMgPiAwKSB7XG4gICAgICBkZWxheU1zID0gTWF0aC5tYXgoZGVsYXlNcywgcmV0cnlBZnRlclNlYyAqIDEwMDApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVsYXlNcztcbn1cblxuZnVuY3Rpb24gX3NjaGVkdWxlUmV0cnkodGV4dCwgZGVyaXZlZCwgZXJyb3IpIHtcbiAgX2NsZWFyUmV0cnlUaW1lcnMoKTtcbiAgY29uc3QgcG9saWN5ID0gX2dldFJldHJ5UG9saWN5KCk7XG5cbiAgLy8gQ2xpZW50IGVycm9ycyAoNHh4KSBhbmQgYXV0aCBmYWlsdXJlcyBhcmUgbm90IHRyYW5zaWVudDsgZG8gbm90IGF1dG8tcmV0cnkuXG4gIGNvbnN0IE5PTl9SRVRSWUFCTEUgPSBuZXcgU2V0KFsnY2xpZW50LWVycm9yJywgJ2F1dGgtcmVxdWlyZWQnXSk7XG4gIGNvbnN0IGNhbkF1dG9SZXRyeSA9IHBvbGljeS5hdXRvUmV0cnlcbiAgICAmJiBfcmV0cnlBdHRlbXB0Q291bnQgPCBwb2xpY3kubWF4QXR0ZW1wdHNcbiAgICAmJiAhTk9OX1JFVFJZQUJMRS5oYXMoZGVyaXZlZC5raW5kKTtcblxuICBjb25zdCBkZWxheU1zID0gX2NhbGN1bGF0ZVJldHJ5RGVsYXlNcyhkZXJpdmVkLmtpbmQsIGVycm9yKTtcbiAgY29uc3QgdG90YWxTZWNvbmRzID0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKGRlbGF5TXMgLyAxMDAwKSk7XG5cbiAgY29uc3QgcmV0cnlBY3Rpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVzc2FnZS1pbnB1dCcpO1xuICAgIGlmIChpbnB1dCkgaW5wdXQudmFsdWUgPSB0ZXh0O1xuICAgIHNlbmRNZXNzYWdlKCk7XG4gIH07XG5cbiAgbGV0IHJldHJ5TWVzc2FnZTtcbiAgY29uc3QgY2FuY2VsRm4gPSBjYW5BdXRvUmV0cnkgPyAoKSA9PiB7XG4gICAgX2NsZWFyUmV0cnlUaW1lcnMoKTtcbiAgICBpZiAocmV0cnlNZXNzYWdlKSByZXRyeU1lc3NhZ2UucmVtb3ZlKCk7XG4gIH0gOiBudWxsO1xuXG4gIHJldHJ5TWVzc2FnZSA9IGFwcGVuZFJldHJ5TWVzc2FnZShcbiAgICBgXHUyNkEwXHVGRTBGICR7ZXJyb3IubWVzc2FnZX1gLFxuICAgICgpID0+IHtcbiAgICAgIF9jbGVhclJldHJ5VGltZXJzKCk7XG4gICAgICBfcmV0cnlBdHRlbXB0Q291bnQgKz0gMTtcbiAgICAgIHJldHJ5QWN0aW9uKCk7XG4gICAgfSxcbiAgICBjYW5BdXRvUmV0cnkgPyBgUmV0cnkgaW4gJHt0b3RhbFNlY29uZHN9c2AgOiAnUmV0cnknLFxuICAgIGNhbmNlbEZuLFxuICApO1xuXG4gIGlmICghY2FuQXV0b1JldHJ5KSByZXR1cm47XG5cbiAgY29uc3QgcmV0cnlCdG4gPSByZXRyeU1lc3NhZ2U/LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuICBsZXQgcmVtYWluaW5nID0gdG90YWxTZWNvbmRzO1xuICBpZiAocmV0cnlCdG4pIHtcbiAgICByZXRyeUJ0bi50ZXh0Q29udGVudCA9IGBSZXRyeSBpbiAke3JlbWFpbmluZ31zYDtcbiAgICBpZiAoZGVyaXZlZC5raW5kID09PSAncmF0ZS1saW1pdGVkJykge1xuICAgICAgcmV0cnlCdG4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgcmV0cnlCdG4uc3R5bGUub3BhY2l0eSA9ICcwLjcnO1xuICAgICAgcmV0cnlCdG4uc3R5bGUuY3Vyc29yID0gJ25vdC1hbGxvd2VkJztcbiAgICB9XG4gIH1cblxuICBfcmV0cnlJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICByZW1haW5pbmcgLT0gMTtcbiAgICBpZiAocmV0cnlCdG4gJiYgcmVtYWluaW5nID4gMCkge1xuICAgICAgcmV0cnlCdG4udGV4dENvbnRlbnQgPSBgUmV0cnkgaW4gJHtyZW1haW5pbmd9c2A7XG4gICAgfVxuICAgIGlmIChyZW1haW5pbmcgPD0gMCkge1xuICAgICAgaWYgKHJldHJ5QnRuKSB7XG4gICAgICAgIHJldHJ5QnRuLnRleHRDb250ZW50ID0gJ1JldHJ5IE5vdyc7XG4gICAgICAgIHJldHJ5QnRuLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHJldHJ5QnRuLnN0eWxlLm9wYWNpdHkgPSAnJztcbiAgICAgICAgcmV0cnlCdG4uc3R5bGUuY3Vyc29yID0gJyc7XG4gICAgICB9XG4gICAgICBjbGVhckludGVydmFsKF9yZXRyeUludGVydmFsKTtcbiAgICAgIF9yZXRyeUludGVydmFsID0gbnVsbDtcbiAgICB9XG4gIH0sIDEwMDApO1xuXG4gIF9yZXRyeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgX3JldHJ5VGltZXIgPSBudWxsO1xuICAgIF9yZXRyeUF0dGVtcHRDb3VudCArPSAxO1xuICAgIHJldHJ5TWVzc2FnZT8ucmVtb3ZlKCk7XG4gICAgcmV0cnlBY3Rpb24oKTtcbiAgfSwgZGVsYXlNcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9wYXJzZUFwaUpzb25SZXNwb25zZShyZXNwb25zZSwgZW5kcG9pbnQpIHtcbiAgY29uc3Qgc3RhdHVzID0gTnVtYmVyKHJlc3BvbnNlPy5zdGF0dXMgfHwgMCk7XG4gIGNvbnN0IHN0YXR1c1RleHQgPSByZXNwb25zZT8uc3RhdHVzVGV4dCB8fCAnVW5rbm93biBTdGF0dXMnO1xuICBjb25zdCBjb250ZW50VHlwZSA9IChyZXNwb25zZT8uaGVhZGVycz8uZ2V0KCdjb250ZW50LXR5cGUnKSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgcmF3ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBsZXQgZGV0YWlsID0gc3RhdHVzVGV4dDtcbiAgICBpZiAoY29udGVudFR5cGUuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IEpTT04ucGFyc2UocmF3IHx8ICd7fScpO1xuICAgICAgICBkZXRhaWwgPSBwYXlsb2FkPy5lcnJvciB8fCBwYXlsb2FkPy5tZXNzYWdlIHx8IGRldGFpbDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBLZWVwIGZhbGxiYWNrIGRldGFpbCBpZiBtYWxmb3JtZWQgSlNPTiBlcnJvciBwYXlsb2FkLlxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKHJhdyB8fCAnJykudHJpbSgpLnN0YXJ0c1dpdGgoJzwnKSkge1xuICAgICAgZGV0YWlsID0gJ3NlcnZlciByZXR1cm5lZCBIVE1MIGluc3RlYWQgb2YgSlNPTiAocG9zc2libGUgc2Vzc2lvbiByZWRpcmVjdCBvciBiYWNrZW5kIGVycm9yKSc7XG4gICAgfSBlbHNlIGlmICgocmF3IHx8ICcnKS50cmltKCkpIHtcbiAgICAgIGRldGFpbCA9IHJhdy50cmltKCkuc2xpY2UoMCwgMjIwKTtcbiAgICB9XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYCR7c3RhdHVzfTogJHtkZXRhaWx9YCk7XG4gICAgZXJyb3Iuc3RhdHVzID0gc3RhdHVzO1xuICAgIGVycm9yLnJldHJ5QWZ0ZXJTZWMgPSBOdW1iZXIocmVzcG9uc2U/LmhlYWRlcnM/LmdldCgncmV0cnktYWZ0ZXInKSB8fCAwKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGlmICghY29udGVudFR5cGUuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIGNvbnN0IHNuaXBwZXQgPSAocmF3IHx8ICcnKS50cmltKCkuc2xpY2UoMCwgODApO1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgIGBFeHBlY3RlZCBKU09OIGZyb20gJHtlbmRwb2ludH0sIGdvdCAke2NvbnRlbnRUeXBlIHx8ICd1bmtub3duIGNvbnRlbnQgdHlwZSd9JHtzbmlwcGV0ID8gYDogJHtzbmlwcGV0fWAgOiAnJ31gLFxuICAgICk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBwYXJzZU1lc3NhZ2VSZXNwb25zZShKU09OLnBhcnNlKHJhdyB8fCAne30nKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnZhbGlkIEpTT04gZnJvbSAke2VuZHBvaW50fTogJHtlcnJvci5tZXNzYWdlfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9zZXRMaXZlTGxtU3RhdGUoa2luZCwgdGV4dCwgaWNvbiA9ICcnLCB0b29sdGlwID0gJycpIHtcbiAgaWYgKHR5cGVvZiBfdXBkYXRlTGxtU3RhdHVzUGlsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIF91cGRhdGVMbG1TdGF0dXNQaWxsKGtpbmQsIHRleHQsIGljb24sIHRvb2x0aXApO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9kZXJpdmVFcnJvclN0YXRlKGVycm9yKSB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBTdHJpbmcoZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKTtcbiAgY29uc3QgbG93ZXIgPSBtZXNzYWdlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHN0YXR1cyA9IE51bWJlcihlcnJvcj8uc3RhdHVzIHx8IDApO1xuXG4gIGlmIChzdGF0dXMgPT09IDQwMSB8fCBzdGF0dXMgPT09IDQwMyB8fCBtZXNzYWdlLnN0YXJ0c1dpdGgoJzQwMTonKSB8fCBtZXNzYWdlLnN0YXJ0c1dpdGgoJzQwMzonKSB8fCBsb3dlci5pbmNsdWRlcygnYXV0aCcpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6ICdhdXRoLXJlcXVpcmVkJyxcbiAgICAgIHRleHQ6ICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCcsXG4gICAgICBpY29uOiAnXHVEODNEXHVERDExJyxcbiAgICAgIHRvb2x0aXA6ICdBdXRoZW50aWNhdGlvbiBmYWlsZWQuIENoZWNrIEFQSSBrZXkvdG9rZW4gb3Igc2lnbiBpbiBhZ2Fpbi4nLFxuICAgIH07XG4gIH1cblxuICBpZiAoc3RhdHVzID09PSA0MjkgfHwgbWVzc2FnZS5zdGFydHNXaXRoKCc0Mjk6JykgfHwgbG93ZXIuaW5jbHVkZXMoJ3JhdGUgbGltaXQnKSkge1xuICAgIHJldHVybiB7XG4gICAgICBraW5kOiAncmF0ZS1saW1pdGVkJyxcbiAgICAgIHRleHQ6ICdSYXRlIGxpbWl0ZWQnLFxuICAgICAgaWNvbjogJ1x1MjNGMycsXG4gICAgICB0b29sdGlwOiAnUHJvdmlkZXIgcmF0ZSBsaW1pdCByZWFjaGVkLiBXYWl0IGJyaWVmbHkgYW5kIHJldHJ5LicsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChcbiAgICBzdGF0dXMgPT09IDUwMiB8fFxuICAgIHN0YXR1cyA9PT0gNTAzIHx8XG4gICAgc3RhdHVzID09PSA1MDQgfHxcbiAgICBtZXNzYWdlLnN0YXJ0c1dpdGgoJzUwMjonKSB8fFxuICAgIG1lc3NhZ2Uuc3RhcnRzV2l0aCgnNTAzOicpIHx8XG4gICAgbWVzc2FnZS5zdGFydHNXaXRoKCc1MDQ6JykgfHxcbiAgICBsb3dlci5pbmNsdWRlcygndGltZW91dCcpIHx8XG4gICAgbG93ZXIuaW5jbHVkZXMoJ3VuYXZhaWxhYmxlJykgfHxcbiAgICBsb3dlci5pbmNsdWRlcygnY2Fubm90IHJlYWNoJylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6ICd1bmF2YWlsYWJsZScsXG4gICAgICB0ZXh0OiAnUHJvdmlkZXIgdW5hdmFpbGFibGUnLFxuICAgICAgaWNvbjogJ1x1MjYwMScsXG4gICAgICB0b29sdGlwOiAnUHJvdmlkZXIgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlIG9yIHVucmVhY2hhYmxlLiBSZXRyeSBzb29uLicsXG4gICAgfTtcbiAgfVxuXG4gIC8vIDR4eCBjbGllbnQgZXJyb3JzIGFyZSBub3QgdHJhbnNpZW50IFx1MjAxNCByZXRyeWluZyB3aWxsIG5vdCBmaXggdGhlbS5cbiAgaWYgKHN0YXR1cyA+PSA0MDAgJiYgc3RhdHVzIDwgNTAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6ICdjbGllbnQtZXJyb3InLFxuICAgICAgdGV4dDogJ1JlcXVlc3QgZXJyb3InLFxuICAgICAgaWNvbjogJ1x1MjZBMCcsXG4gICAgICB0b29sdGlwOiBtZXNzYWdlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtpbmQ6ICdlcnJvcicsXG4gICAgdGV4dDogJ0Nvbm5lY3Rpb24gZmFpbGVkJyxcbiAgICBpY29uOiAnXHUyNkEwJyxcbiAgICB0b29sdGlwOiBtZXNzYWdlLFxuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERlZmF1bHQgTExNIG1lc3NhZ2UgaGFuZGxlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmFzeW5jIGZ1bmN0aW9uIF9oYW5kbGVMTE1NZXNzYWdlKHRleHQpIHtcbiAgX2NsZWFyUmV0cnlUaW1lcnMoKTtcbiAgc2V0TG9hZGluZyh0cnVlLCAnVGhpbmtpbmdcdTIwMjYnKTtcbiAgX3NldExpdmVMbG1TdGF0ZSgnY29ubmVjdGluZycsICdDb25uZWN0aW5nXHUyMDI2JywgJ1x1MjlENycsICdTZW5kaW5nIHJlcXVlc3QgdG8gcHJvdmlkZXIuJyk7XG4gIGxldCB0ZXJtaW5hbFN0YXRlID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBsbG1GZXRjaCgnL2FwaS9tZXNzYWdlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgbWVzc2FnZTogdGV4dCB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgX3BhcnNlQXBpSnNvblJlc3BvbnNlKHJlcywgJy9hcGkvbWVzc2FnZScpO1xuXG4gICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTXNnID0gZGF0YS5lcnJvci50b1N0cmluZygpO1xuICAgICAgY29uc3QgZGVyaXZlZCA9IF9kZXJpdmVFcnJvclN0YXRlKG5ldyBFcnJvcihlcnJvck1zZykpO1xuICAgICAgX3NldExpdmVMbG1TdGF0ZShkZXJpdmVkLmtpbmQsIGRlcml2ZWQudGV4dCwgZGVyaXZlZC5pY29uLCBkZXJpdmVkLnRvb2x0aXApO1xuICAgICAgX3NjaGVkdWxlUmV0cnkodGV4dCwgZGVyaXZlZCwgbmV3IEVycm9yKGVycm9yTXNnKSk7XG4gICAgICB0ZXJtaW5hbFN0YXRlID0gZGVyaXZlZDtcbiAgICAgIGxvZy5lcnJvcignU2VydmVyIGVycm9yOicsIGRhdGEuZXJyb3IpO1xuICAgIH0gZWxzZSBpZiAoZGF0YS5yZXNwb25zZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2xlYW5SZXNwb25zZSA9IGRhdGEucmVzcG9uc2U7XG4gICAgICAgIGNvbnN0IHBhcnNlZEN1c3RvbWl6YXRpb24gPSBleHRyYWN0Rmlyc3RKc29uT2JqZWN0KGNsZWFuUmVzcG9uc2UpO1xuICAgICAgICBpZiAocGFyc2VkQ3VzdG9taXphdGlvbiAmJiAocGFyc2VkQ3VzdG9taXphdGlvbi5yZWNvbW1lbmRlZF9leHBlcmllbmNlcyB8fCBwYXJzZWRDdXN0b21pemF0aW9uLnJlY29tbWVuZGVkX3NraWxscykpIHtcbiAgICAgICAgICBjb25zdCBqc29uU3RhcnQgPSBjbGVhblJlc3BvbnNlLmluZGV4T2YoJ3snKTtcbiAgICAgICAgICBjb25zdCB0ZXh0QmVmb3JlSnNvbiA9IGpzb25TdGFydCA+IDAgPyBjbGVhblJlc3BvbnNlLnN1YnN0cmluZygwLCBqc29uU3RhcnQpLnRyaW0oKSA6ICcnO1xuICAgICAgICAgIGlmICh0ZXh0QmVmb3JlSnNvbiAmJiAhdGV4dEJlZm9yZUpzb24uaW5jbHVkZXMoJ3tcImFjdGlvblwiOicpKSB7XG4gICAgICAgICAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCB0ZXh0QmVmb3JlSnNvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IGhhbmRsZUN1c3RvbWl6YXRpb25SZXNwb25zZShwYXJzZWRDdXN0b21pemF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoY2xlYW5SZXNwb25zZS50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgY2xlYW5SZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nLmVycm9yKCdFcnJvciBwcm9jZXNzaW5nIG1lc3NhZ2UgcmVzcG9uc2U6JywgZXJyLCBkYXRhLnJlc3BvbnNlKTtcbiAgICAgICAgY29uc3QgZGVyaXZlZCA9IF9kZXJpdmVFcnJvclN0YXRlKGVycik7XG4gICAgICAgIF9zZXRMaXZlTGxtU3RhdGUoZGVyaXZlZC5raW5kLCBkZXJpdmVkLnRleHQsIGRlcml2ZWQuaWNvbiwgZGVyaXZlZC50b29sdGlwKTtcbiAgICAgICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgYFx1MjZBMFx1RkUwRiBJIGVuY291bnRlcmVkIGFuIGlzc3VlIHByb2Nlc3NpbmcgdGhhdCByZXNwb25zZTogJHtlcnIubWVzc2FnZX0uIFRoZSBjb252ZXJzYXRpb24gaGFzIGJlZW4gc2F2ZWQuYCk7XG4gICAgICAgIHRlcm1pbmFsU3RhdGUgPSBkZXJpdmVkO1xuICAgICAgfVxuICAgICAgY29uc3QgY29ubmVjdGVkU3RhdGUgPSB7IGtpbmQ6ICdjb25uZWN0ZWQnLCB0ZXh0OiAnQ29ubmVjdGVkJywgaWNvbjogJ1x1MjcxMycsIHRvb2x0aXA6ICdQcm92aWRlciByZXNwb25kZWQgc3VjY2Vzc2Z1bGx5IHRvIGEgbGl2ZSByZXF1ZXN0LicgfTtcbiAgICAgIF9zZXRMaXZlTGxtU3RhdGUoY29ubmVjdGVkU3RhdGUua2luZCwgY29ubmVjdGVkU3RhdGUudGV4dCwgY29ubmVjdGVkU3RhdGUuaWNvbiwgY29ubmVjdGVkU3RhdGUudG9vbHRpcCk7XG4gICAgICB0ZXJtaW5hbFN0YXRlID0gY29ubmVjdGVkU3RhdGU7XG4gICAgICBfcmV0cnlBdHRlbXB0Q291bnQgPSAwO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cuZXJyb3IoJz09PSBNRVNTQUdFIEVSUk9SID09PScsIGVycm9yLm5hbWUsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrKTtcbiAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAvLyBVc2VyIGNsaWNrZWQgU3RvcCBcdTIwMTQgbWVzc2FnZSBhbHJlYWR5IHNob3duIGJ5IGFib3J0Q3VycmVudFJlcXVlc3QoKS5cbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZXJpdmVkID0gX2Rlcml2ZUVycm9yU3RhdGUoZXJyb3IpO1xuICAgIF9zZXRMaXZlTGxtU3RhdGUoZGVyaXZlZC5raW5kLCBkZXJpdmVkLnRleHQsIGRlcml2ZWQuaWNvbiwgZGVyaXZlZC50b29sdGlwKTtcbiAgICBfc2NoZWR1bGVSZXRyeSh0ZXh0LCBkZXJpdmVkLCBlcnJvcik7XG4gICAgdGVybWluYWxTdGF0ZSA9IGRlcml2ZWQ7XG4gIH1cbiAgc2V0TG9hZGluZyhmYWxzZSk7XG4gIGF3YWl0IGZldGNoU3RhdHVzKCk7XG4gIGlmICh0ZXJtaW5hbFN0YXRlKSB7XG4gICAgX3NldExpdmVMbG1TdGF0ZSh0ZXJtaW5hbFN0YXRlLmtpbmQsIHRlcm1pbmFsU3RhdGUudGV4dCwgdGVybWluYWxTdGF0ZS5pY29uLCB0ZXJtaW5hbFN0YXRlLnRvb2x0aXApO1xuICB9XG4gIGlmICh0eXBlb2YgZmV0Y2hBbmREaXNwbGF5TGxtTG9nID09PSAnZnVuY3Rpb24nKSBmZXRjaEFuZERpc3BsYXlMbG1Mb2coKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNZXNzYWdlIGRpc3BhdGNoIHRhYmxlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gSGFuZGxlcnMgY2hlY2tlZCBpbiBvcmRlcjsgZmlyc3QgbWF0Y2hpbmcgdGVzdCgpIHdpbnMuXG5jb25zdCBfbWVzc2FnZUhhbmRsZXJzID0gW1xuICB7XG4gICAgdGVzdDogdCA9PiB0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3JldmlldyByZWNvbW1lbmRhdGlvbnMnKSB8fCB0LnRvTG93ZXJDYXNlKCkgPT09ICdyZXZpZXcnLFxuICAgIGhhbmRsZTogYXN5bmMgKCkgPT4gc2hvd1RhYmxlQmFzZWRSZXZpZXcoKSxcbiAgfSxcbiAge1xuICAgIHRlc3Q6ICgpID0+IHdpbmRvdy53YWl0aW5nRm9yRXhwZXJpZW5jZVJlc3BvbnNlLFxuICAgIGhhbmRsZTogYXN5bmMgdCA9PiBoYW5kbGVFeHBlcmllbmNlUmVzcG9uc2UodCksXG4gIH0sXG4gIHtcbiAgICB0ZXN0OiAoKSA9PiB3aW5kb3cud2FpdGluZ0ZvclNraWxsc1Jlc3BvbnNlLFxuICAgIGhhbmRsZTogYXN5bmMgdCA9PiBoYW5kbGVTa2lsbHNSZXNwb25zZSh0KSxcbiAgfSxcbiAge1xuICAgIC8vIFBvc3QtYW5hbHlzaXMgcXVlc3Rpb24gcmVzcG9uc2UgXHUyMDE0IGxvY2FsIGhhbmRsZXIgKyBiYWNrZW5kIHNhdmUuXG4gICAgdGVzdDogKCkgPT4gd2luZG93LndhaXRpbmdGb3JRdWVzdGlvblJlc3BvbnNlLFxuICAgIGhhbmRsZTogYXN5bmMgdCA9PiB7XG4gICAgICBjb25zdCBxdWVzdGlvbkhhbmRsZWQgPSBoYW5kbGVRdWVzdGlvblJlc3BvbnNlKHQpO1xuICAgICAgc2V0TG9hZGluZyh0cnVlLCAnVGhpbmtpbmdcdTIwMjYnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGxsbUZldGNoKCcvYXBpL21lc3NhZ2UnLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBtZXNzYWdlOiB0IH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IF9wYXJzZUFwaUpzb25SZXNwb25zZShyZXMsICcvYXBpL21lc3NhZ2UnKTtcbiAgICAgICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgICAgICBsb2cuZXJyb3IoJ0JhY2tlbmQgZXJyb3Igc2F2aW5nIHF1ZXN0aW9uIHJlc3BvbnNlOicsIGRhdGEuZXJyb3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEucmVzcG9uc2UgJiYgIXF1ZXN0aW9uSGFuZGxlZCkge1xuICAgICAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIGRhdGEucmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lICE9PSAnQWJvcnRFcnJvcicpIGxvZy5lcnJvcignPT09IFFVRVNUSU9OIFJFU1BPTlNFIFNBVkUgRVJST1IgPT09JywgZXJyKTtcbiAgICAgIH1cbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgaWYgKCFxdWVzdGlvbkhhbmRsZWQpIGF3YWl0IF9oYW5kbGVMTE1NZXNzYWdlKHQpO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0ZXN0OiB0ID0+IHQudG9Mb3dlckNhc2UoKSA9PT0gJ3Byb2NlZWQnLFxuICAgIGhhbmRsZTogYXN5bmMgKCkgPT4gd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnNcbiAgICAgID8gc2hvd1RhYmxlQmFzZWRSZXZpZXcoKVxuICAgICAgOiBzZW5kQWN0aW9uKCdyZWNvbW1lbmRfY3VzdG9taXphdGlvbnMnKSxcbiAgfSxcbiAge1xuICAgIHRlc3Q6ICgpID0+IHRydWUsXG4gICAgaGFuZGxlOiBfaGFuZGxlTExNTWVzc2FnZSxcbiAgfSxcbl07XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbmRNZXNzYWdlKCkge1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZXNzYWdlLWlucHV0Jyk7XG4gIGNvbnN0IHRleHQgPSBub3JtYWxpemVUZXh0KGlucHV0LnZhbHVlKTtcbiAgaWYgKCF0ZXh0IHx8IHN0YXRlTWFuYWdlci5pc0xvYWRpbmcoKSkgcmV0dXJuO1xuXG4gIGlmICghZ2V0U2Vzc2lvbklkRnJvbVVSTCgpKSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgJ1x1MjZBMFx1RkUwRiBObyBhY3RpdmUgc2Vzc2lvbi4gQ3JlYXRlIG9yIGxvYWQgYSBzZXNzaW9uIGJlZm9yZSBzZW5kaW5nIG1lc3NhZ2VzLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFwcGVuZE1lc3NhZ2UoJ3VzZXInLCB0ZXh0KTtcbiAgaW5wdXQudmFsdWUgPSAnJztcblxuICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgX21lc3NhZ2VIYW5kbGVycykge1xuICAgIGlmIChoYW5kbGVyLnRlc3QodGV4dCkpIHtcbiAgICAgIGF3YWl0IGhhbmRsZXIuaGFuZGxlKHRleHQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEludGFrZSBjb25maXJtYXRpb24gY2FyZCAoR0FQLTIzKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmFzeW5jIGZ1bmN0aW9uIF9zaG93SW50YWtlQ29uZmlybUNhcmQoY29udGludWF0aW9uID0gbnVsbCkge1xuICBpZiAodHlwZW9mIGNvbnRpbnVhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIF9wZW5kaW5nUG9zdEludGFrZUNvbnRpbnVhdGlvbiA9IGNvbnRpbnVhdGlvbjtcbiAgfVxuXG4gIGxldCBleHRyYWN0ZWQgPSB7cm9sZTogJycsIGNvbXBhbnk6ICcnLCBkYXRlX2FwcGxpZWQ6ICcnfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgbGxtRmV0Y2goJy9hcGkvaW50YWtlLW1ldGFkYXRhJyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEuY29uZmlybWVkKSB7XG4gICAgICBhd2FpdCBfcHJvY2VlZEFmdGVySW50YWtlKGNvbnRpbnVhdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4dHJhY3RlZCA9IGRhdGE7XG4gIH0gY2F0Y2ggKF9lKSB7IC8qIGZhbGwgdGhyb3VnaCB3aXRoIGVtcHR5IGRlZmF1bHRzICovIH1cblxuICBjb25zdCB0b2RheSA9IGV4dHJhY3RlZC5kYXRlX2FwcGxpZWQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTtcbiAgY29uc3QgY2FyZEh0bWwgPSBgXG4gICAgPGRpdiBjbGFzcz1cImludGFrZS1jb25maXJtLWNhcmRcIiBpZD1cImludGFrZS1jb25maXJtLWNhcmRcIiByb2xlPVwiZm9ybVwiIGFyaWEtbGFiZWw9XCJDb25maXJtIGpvYiBkZXRhaWxzXCI+XG4gICAgICA8aDM+XHVEODNEXHVEQ0NCIENvbmZpcm0gam9iIGRldGFpbHM8L2gzPlxuICAgICAgPHA+UmV2aWV3IHRoZSBleHRyYWN0ZWQgZGV0YWlscyBiZWZvcmUgYW5hbHlzaXMgYmVnaW5zLiBFZGl0IGFueSBmaWVsZCBpZiBuZWVkZWQuPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cImludGFrZS1maWVsZC1yb3dcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImludGFrZS1yb2xlLWlucHV0XCI+Um9sZSAvIEpvYiBUaXRsZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBpZD1cImludGFrZS1yb2xlLWlucHV0XCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIiR7ZXNjYXBlSHRtbChleHRyYWN0ZWQucm9sZSB8fCAnJyl9XCJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBTZW5pb3IgU29mdHdhcmUgRW5naW5lZXJcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImludGFrZS1maWVsZC1yb3dcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImludGFrZS1jb21wYW55LWlucHV0XCI+Q29tcGFueTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBpZD1cImludGFrZS1jb21wYW55LWlucHV0XCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIiR7ZXNjYXBlSHRtbChleHRyYWN0ZWQuY29tcGFueSB8fCAnJyl9XCJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBBY21lIENvcnBcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImludGFrZS1maWVsZC1yb3dcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImludGFrZS1kYXRlLWlucHV0XCI+RGF0ZSBBcHBsaWVkPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IGlkPVwiaW50YWtlLWRhdGUtaW5wdXRcIiB0eXBlPVwiZGF0ZVwiIHZhbHVlPVwiJHtlc2NhcGVIdG1sKHRvZGF5KX1cIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImludGFrZS1hY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tc2Vjb25kYXJ5XCIgb25jbGljaz1cIl9za2lwSW50YWtlQ2FyZCgpXCIgdHlwZT1cImJ1dHRvblwiPlNraXA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1wcmltYXJ5XCIgICBvbmNsaWNrPVwiX3N1Ym1pdEludGFrZUNhcmQoKVwiIHR5cGU9XCJidXR0b25cIiBpZD1cImludGFrZS1jb25maXJtLWJ0blwiPkNvbmZpcm0gJmFtcDsgQ29udGludWU8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG4gIGFwcGVuZFJhd0h0bWwoY2FyZEh0bWwpO1xuXG4gIGNvbnN0IHJvbGVJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnRha2Utcm9sZS1pbnB1dCcpO1xuICBpZiAocm9sZUlucHV0ICYmICFyb2xlSW5wdXQudmFsdWUudHJpbSgpKSByb2xlSW5wdXQuZm9jdXMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX3N1Ym1pdEludGFrZUNhcmQoY29udGludWF0aW9uID0gbnVsbCkge1xuICBjb25zdCByb2xlICAgICAgICAgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ludGFrZS1yb2xlLWlucHV0Jyk/LnZhbHVlICAgIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGNvbXBhbnkgICAgICA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW50YWtlLWNvbXBhbnktaW5wdXQnKT8udmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgZGF0ZV9hcHBsaWVkID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnRha2UtZGF0ZS1pbnB1dCcpPy52YWx1ZSAgICB8fCAnJykudHJpbSgpO1xuXG4gIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnRha2UtY29uZmlybS1idG4nKTtcbiAgaWYgKGJ0bikgYnRuLmRpc2FibGVkID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIGF3YWl0IGxsbUZldGNoKCcvYXBpL2NvbmZpcm0taW50YWtlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ30sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7cm9sZSwgY29tcGFueSwgZGF0ZV9hcHBsaWVkfSksXG4gICAgfSk7XG4gIH0gY2F0Y2ggKF9lKSB7IC8qIG5vbi1mYXRhbCAqLyB9XG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ludGFrZS1jb25maXJtLWNhcmQnKT8ucmVtb3ZlKCk7XG4gIGF3YWl0IF9wcm9jZWVkQWZ0ZXJJbnRha2UoY29udGludWF0aW9uKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX3NraXBJbnRha2VDYXJkKGNvbnRpbnVhdGlvbiA9IG51bGwpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ludGFrZS1jb25maXJtLWNhcmQnKT8ucmVtb3ZlKCk7XG4gIGF3YWl0IF9wcm9jZWVkQWZ0ZXJJbnRha2UoY29udGludWF0aW9uKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX3Byb2NlZWRBZnRlckludGFrZShjb250aW51YXRpb24gPSBudWxsKSB7XG4gIGNvbnN0IGVmZmVjdGl2ZUNvbnRpbnVhdGlvbiA9XG4gICAgKHR5cGVvZiBjb250aW51YXRpb24gPT09ICdmdW5jdGlvbicgJiYgY29udGludWF0aW9uKVxuICAgIHx8IF9wZW5kaW5nUG9zdEludGFrZUNvbnRpbnVhdGlvblxuICAgIHx8IChhc3luYyAoKSA9PiBhbmFseXplSm9iKCkpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGxsbUZldGNoKCcvYXBpL3ByaW9yLWNsYXJpZmljYXRpb25zJyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEuZm91bmQgJiYgZGF0YS5tYXRjaGVzICYmIGRhdGEubWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBiZXN0ID0gZGF0YS5tYXRjaGVzWzBdO1xuICAgICAgX3BlbmRpbmdQb3N0SW50YWtlQ29udGludWF0aW9uID0gZWZmZWN0aXZlQ29udGludWF0aW9uO1xuICAgICAgYXdhaXQgX29mZmVyUHJpb3JDbGFyaWZpY2F0aW9ucyhiZXN0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gY2F0Y2ggKF9lKSB7IC8qIGZhbGwgdGhyb3VnaCAqLyB9XG5cbiAgX3BlbmRpbmdQb3N0SW50YWtlQ29udGludWF0aW9uID0gbnVsbDtcbiAgYXdhaXQgZWZmZWN0aXZlQ29udGludWF0aW9uKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9vZmZlclByaW9yQ2xhcmlmaWNhdGlvbnMobWF0Y2gpIHtcbiAgY29uc3Qgcm9sZU5hbWUgPSBlc2NhcGVIdG1sKG1hdGNoLnJvbGUgfHwgbWF0Y2gucG9zaXRpb25fbmFtZSB8fCAnYSBzaW1pbGFyIHJvbGUnKTtcbiAgY29uc3QgYmFubmVySHRtbCA9IGBcbiAgICA8ZGl2IGNsYXNzPVwicHJpb3ItY2xhcmlmaWNhdGlvbnMtYmFubmVyXCIgaWQ9XCJwcmlvci1jbGFyLWJhbm5lclwiIHJvbGU9XCJzdGF0dXNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwY2ItdGV4dFwiPlxuICAgICAgICBcdUQ4M0RcdURDQTEgRm91bmQgcHJpb3IgYW5zd2VycyBmcm9tIDxzcGFuIGNsYXNzPVwicGNiLXJvbGVcIj4ke3JvbGVOYW1lfTwvc3Bhbj4uXG4gICAgICAgIExvYWQgdGhlbSBhcyBkZWZhdWx0cyBmb3IgdGhlIGNsYXJpZmljYXRpb24gcXVlc3Rpb25zP1xuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiIG9uY2xpY2s9XCJfZGlzbWlzc1ByaW9yQ2xhcmlmaWNhdGlvbnMoKVwiIHR5cGU9XCJidXR0b25cIj5ObyB0aGFua3M8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tcHJpbWFyeVwiICAgb25jbGljaz1cIl9sb2FkUHJpb3JDbGFyaWZpY2F0aW9ucygpXCIgdHlwZT1cImJ1dHRvblwiIGlkPVwicGNiLWxvYWQtYnRuXCI+TG9hZCBkZWZhdWx0czwvYnV0dG9uPlxuICAgIDwvZGl2PmA7XG4gIGFwcGVuZFJhd0h0bWwoYmFubmVySHRtbCk7XG5cbiAgd2luZG93Ll9wZW5kaW5nUHJpb3JBbnN3ZXJzID0gbWF0Y2guYW5zd2VycyB8fCB7fTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX2Rpc21pc3NQcmlvckNsYXJpZmljYXRpb25zKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJpb3ItY2xhci1iYW5uZXInKT8ucmVtb3ZlKCk7XG4gIGRlbGV0ZSB3aW5kb3cuX3BlbmRpbmdQcmlvckFuc3dlcnM7XG4gIGNvbnN0IGNvbnRpbnVhdGlvbiA9IF9wZW5kaW5nUG9zdEludGFrZUNvbnRpbnVhdGlvbiB8fCAoYXN5bmMgKCkgPT4gYW5hbHl6ZUpvYigpKTtcbiAgX3BlbmRpbmdQb3N0SW50YWtlQ29udGludWF0aW9uID0gbnVsbDtcbiAgYXdhaXQgY29udGludWF0aW9uKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9sb2FkUHJpb3JDbGFyaWZpY2F0aW9ucygpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByaW9yLWNsYXItYmFubmVyJyk/LnJlbW92ZSgpO1xuICBjb25zdCBhbnN3ZXJzID0gd2luZG93Ll9wZW5kaW5nUHJpb3JBbnN3ZXJzIHx8IHt9O1xuICBkZWxldGUgd2luZG93Ll9wZW5kaW5nUHJpb3JBbnN3ZXJzO1xuICBpZiAodHlwZW9mIHF1ZXN0aW9uQW5zd2VycyA9PT0gJ29iamVjdCcgJiYgcXVlc3Rpb25BbnN3ZXJzICE9PSBudWxsKSB7XG4gICAgT2JqZWN0LmFzc2lnbihxdWVzdGlvbkFuc3dlcnMsIGFuc3dlcnMpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5xdWVzdGlvbkFuc3dlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBhbnN3ZXJzKTtcbiAgfVxuICBjb25zdCBjb250aW51YXRpb24gPSBfcGVuZGluZ1Bvc3RJbnRha2VDb250aW51YXRpb24gfHwgKGFzeW5jICgpID0+IGFuYWx5emVKb2IoKSk7XG4gIF9wZW5kaW5nUG9zdEludGFrZUNvbnRpbnVhdGlvbiA9IG51bGw7XG4gIGF3YWl0IGNvbnRpbnVhdGlvbigpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgRVMgbW9kdWxlIGV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICBfaGFuZGxlTExNTWVzc2FnZSxcbiAgX21lc3NhZ2VIYW5kbGVycyxcbiAgc2VuZE1lc3NhZ2UsXG4gIF9zaG93SW50YWtlQ29uZmlybUNhcmQsXG4gIF9zdWJtaXRJbnRha2VDYXJkLFxuICBfc2tpcEludGFrZUNhcmQsXG4gIF9wcm9jZWVkQWZ0ZXJJbnRha2UsXG4gIF9vZmZlclByaW9yQ2xhcmlmaWNhdGlvbnMsXG4gIF9kaXNtaXNzUHJpb3JDbGFyaWZpY2F0aW9ucyxcbiAgX2xvYWRQcmlvckNsYXJpZmljYXRpb25zLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3F1ZXN0aW9ucy1wYW5lbC5qc1xuICogUG9zdC1hbmFseXNpcyBjbGFyaWZ5aW5nIHF1ZXN0aW9ucyBwYW5lbDogcmVuZGVyLCBkcmFmdCwgc3VibWl0LlxuICpcbiAqIERFUEVOREVOQ0lFUyAoYWxsIG9uIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIC0gY2xlYW5Kc29uUmVzcG9uc2UgKHV0aWxzLmpzKVxuICogICAtIG1lcmdlUG9zdEFuYWx5c2lzUXVlc3Rpb25zLCBub3JtYWxpemVQb3N0QW5hbHlzaXNRdWVzdGlvbnMgKGpvYi1hbmFseXNpcy5qcylcbiAqICAgLSBidWlsZEZhbGxiYWNrUG9zdEFuYWx5c2lzUXVlc3Rpb25zIChyZWNvbW1lbmRhdGlvbi1oZWxwZXJzLmpzKVxuICogICAtIGFwcGVuZE1lc3NhZ2UgKG1lc3NhZ2UtcXVldWUuanMpXG4gKiAgIC0gc2VuZEFjdGlvbiAoc2Vzc2lvbi1hY3Rpb25zLmpzKVxuICogICAtIGVzY2FwZUh0bWwgKHV0aWxzLmpzKVxuICogICAtIHN3aXRjaFRhYiAocmV2aWV3LXRhYmxlLWJhc2UuanMsIFRpZXIgNClcbiAqICAgLSBzdGF0ZU1hbmFnZXIgKHN0YXRlLW1hbmFnZXIuanMgXHUyMDE0IGdldFRhYkRhdGEoKSlcbiAqICAgLSBwb3N0QW5hbHlzaXNRdWVzdGlvbnMsIHF1ZXN0aW9uQW5zd2VycyAod2luZG93IGdsb2JhbHMpXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdxdWVzdGlvbnMtcGFuZWwnKTtcblxuaW1wb3J0IHsgc3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi9zdGF0ZS1tYW5hZ2VyLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGF0ZSBwZXJzaXN0ZW5jZSBoZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuYXN5bmMgZnVuY3Rpb24gcGVyc2lzdFBvc3RBbmFseXNpc1N0YXRlKCkge1xuICB0cnkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zKSkge1xuICAgICAgd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyA9IFtdO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5xdWVzdGlvbkFuc3dlcnMgfHwgdHlwZW9mIHdpbmRvdy5xdWVzdGlvbkFuc3dlcnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzID0ge307XG4gICAgfVxuXG4gICAgYXdhaXQgZmV0Y2goJy9hcGkvcG9zdC1hbmFseXNpcy1yZXNwb25zZXMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBxdWVzdGlvbnM6IHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMsXG4gICAgICAgIGFuc3dlcnM6IHdpbmRvdy5xdWVzdGlvbkFuc3dlcnNcbiAgICAgIH0pXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLndhcm4oJ0ZhaWxlZCB0byBwZXJzaXN0IHBvc3QtYW5hbHlzaXMgc3RhdGU6JywgZXJyb3IpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTWFya2Rvd24gcmVuZGVyZXIgZm9yIHF1ZXN0aW9uIHRleHRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiByZW5kZXJRdWVzdGlvbk1hcmtkb3duKG1hcmtkb3duVGV4dCkge1xuICBjb25zdCBzYWZlID0gZXNjYXBlSHRtbChtYXJrZG93blRleHQgfHwgJycpO1xuICByZXR1cm4gc2FmZVxuICAgIC5yZXBsYWNlKC9cXCpcXCooLis/KVxcKlxcKi9nLCAnPHN0cm9uZz4kMTwvc3Ryb25nPicpXG4gICAgLnJlcGxhY2UoL1xcKiguKz8pXFwqL2csICc8ZW0+JDE8L2VtPicpXG4gICAgLnJlcGxhY2UoL2AoW15gXSspYC9nLCAnPGNvZGU+JDE8L2NvZGU+JylcbiAgICAucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQVBJIGZldGNoIGZvciBxdWVzdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFBvc3RBbmFseXNpc1F1ZXN0aW9uc0Zyb21BcGkoYW5hbHlzaXNEYXRhKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvcG9zdC1hbmFseXNpcy1xdWVzdGlvbnMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhbmFseXNpczogYW5hbHlzaXNEYXRhIH0pXG4gICAgfSk7XG4gICAgaWYgKCFyZXMub2spIHJldHVybiBbXTtcbiAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICByZXR1cm4gbm9ybWFsaXplUG9zdEFuYWx5c2lzUXVlc3Rpb25zKHBheWxvYWQucXVlc3Rpb25zKTtcbiAgfSBjYXRjaCAoYXBpRXJyb3IpIHtcbiAgICBsb2cud2FybignRmFpbGVkIHRvIGZldGNoIHBvc3QtYW5hbHlzaXMgcXVlc3Rpb25zOicsIGFwaUVycm9yKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNYWluIG9yY2hlc3RyYXRvcjogY2FsbGVkIGFmdGVyIGFuYWx5emVKb2IgY29tcGxldGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuYXN5bmMgZnVuY3Rpb24gYXNrUG9zdEFuYWx5c2lzUXVlc3Rpb25zKGFuYWx5c2lzUmVzdWx0LCBwcmVmZXJyZWRRdWVzdGlvbnMgPSBudWxsKSB7XG4gIHRyeSB7XG4gICAgbGV0IGRhdGE7XG4gICAgaWYgKGFuYWx5c2lzUmVzdWx0ICE9PSBudWxsICYmIHR5cGVvZiBhbmFseXNpc1Jlc3VsdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGRhdGEgPSBhbmFseXNpc1Jlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2xlYW5SZXN1bHQgPSBjbGVhbkpzb25SZXNwb25zZShhbmFseXNpc1Jlc3VsdCk7XG4gICAgICBkYXRhID0gdHlwZW9mIGNsZWFuUmVzdWx0ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoY2xlYW5SZXN1bHQpIDogY2xlYW5SZXN1bHQ7XG4gICAgfVxuXG4gICAgd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyA9IG1lcmdlUG9zdEFuYWx5c2lzUXVlc3Rpb25zKFtdLCBwcmVmZXJyZWRRdWVzdGlvbnMpO1xuXG4gICAgaWYgKHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zID0gYXdhaXQgZmV0Y2hQb3N0QW5hbHlzaXNRdWVzdGlvbnNGcm9tQXBpKGRhdGEpO1xuICAgIH1cblxuICAgIGlmICh3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyA9IGJ1aWxkRmFsbGJhY2tQb3N0QW5hbHlzaXNRdWVzdGlvbnMoZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKCF3aW5kb3cucXVlc3Rpb25BbnN3ZXJzIHx8IHR5cGVvZiB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzICE9PSAnb2JqZWN0Jykge1xuICAgICAgd2luZG93LnF1ZXN0aW9uQW5zd2VycyA9IHt9O1xuICAgIH1cbiAgICBhd2FpdCBwZXJzaXN0UG9zdEFuYWx5c2lzU3RhdGUoKTtcblxuICAgIGlmICh3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlbmRlclF1ZXN0aW9uc1BhbmVsKCk7XG4gICAgICBzd2l0Y2hUYWIoJ3F1ZXN0aW9ucycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnQW5hbHlzaXMgY29tcGxldGUhIE5vIGNsYXJpZnlpbmcgcXVlc3Rpb25zIG5lZWRlZC4gR2VuZXJhdGluZyBjdXN0b21pemF0aW9uIHJlY29tbWVuZGF0aW9uc1x1MjAyNicpO1xuICAgICAgYXdhaXQgc2VuZEFjdGlvbigncmVjb21tZW5kX2N1c3RvbWl6YXRpb25zJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmVycm9yKCdFcnJvciBwYXJzaW5nIGFuYWx5c2lzIGZvciBxdWVzdGlvbnM6JywgZSk7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ0FuYWx5c2lzIGNvbXBsZXRlISBDbGljayBcIlJlY29tbWVuZCBDdXN0b21pemF0aW9uc1wiIHdoZW4gcmVhZHkuJyk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUYWIgcG9wdWxhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHBvcHVsYXRlUXVlc3Rpb25zVGFiKCkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250ZW50KSByZXR1cm47XG5cbiAgaWYgKCFzdGF0ZU1hbmFnZXIuZ2V0VGFiRGF0YSgnYW5hbHlzaXMnKSkge1xuICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPjxkaXYgY2xhc3M9XCJpY29uXCI+XHVEODNEXHVEQ0FDPC9kaXY+PGgzPk5vIFF1ZXN0aW9ucyBZZXQ8L2gzPjxwPlJ1biBcIkFuYWx5c2UgSm9iXCIgZmlyc3QgdG8gZ2VuZXJhdGUgY2xhcmlmeWluZyBxdWVzdGlvbnMuPC9wPjwvZGl2Pic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaGFzUXVlc3Rpb25zID0gQXJyYXkuaXNBcnJheSh3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zKSAmJiB3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zLmxlbmd0aCA+IDA7XG4gIGlmICghaGFzUXVlc3Rpb25zKSB7XG4gICAgY29udGVudC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+PGRpdiBjbGFzcz1cImljb25cIj5cdTI3MDU8L2Rpdj48aDM+UXVlc3Rpb25zIENvbXBsZXRlPC9oMz48cD5ObyBwZW5kaW5nIGNsYXJpZnlpbmcgcXVlc3Rpb25zIFx1MjAxNCBjdXN0b21pemF0aW9uIHJlY29tbWVuZGF0aW9ucyB3aWxsIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LjwvcD48L2Rpdj4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIF9jdXJyZW50R3JvdXAgPSAwO1xuICBjb250ZW50LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiYW5hbHlzaXMtcGFnZVwiPjxkaXYgY2xhc3M9XCJhbmFseXNpcy1zZWN0aW9uXCI+PGgyPlx1RDgzRFx1RENBQyBDbGFyaWZ5aW5nIFF1ZXN0aW9uczwvaDI+PHAgc3R5bGU9XCJjb2xvcjojNjQ3NDhiOyBtYXJnaW46IDA7XCI+UGxlYXNlIGFuc3dlciBlYWNoIHF1ZXN0aW9uIHRvIGltcHJvdmUgcmVjb21tZW5kYXRpb24gcXVhbGl0eS48L3A+PC9kaXY+PC9kaXY+JztcbiAgcmVuZGVyUXVlc3Rpb25zUGFuZWwoKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYW5lbCByZW5kZXJlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHJlbmRlclF1ZXN0aW9uc1BhbmVsKCkge1xuICBjb25zdCBxcyA9IHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgfHwgW107XG4gIGlmIChxcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250ZW50KSByZXR1cm47XG5cbiAgY29uc3QgZXhpc3RpbmcgPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJy5xdWVzdGlvbnMtcGFuZWwnKTtcbiAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5yZW1vdmUoKTtcblxuICBjb25zdCB0b3RhbCAgICAgID0gcXMubGVuZ3RoO1xuICBjb25zdCBudW1Hcm91cHMgID0gTWF0aC5jZWlsKHRvdGFsIC8gR1JPVVBfU0laRSk7XG4gIC8vIENsYW1wIGdyb3VwIGluZGV4IGluIGNhc2UgcXMgc2hyYW5rIHNpbmNlIGxhc3QgcmVuZGVyLlxuICBfY3VycmVudEdyb3VwICAgID0gTWF0aC5taW4oX2N1cnJlbnRHcm91cCwgbnVtR3JvdXBzIC0gMSk7XG4gIGNvbnN0IGdyb3VwU3RhcnQgPSBfY3VycmVudEdyb3VwICogR1JPVVBfU0laRTtcbiAgY29uc3QgZ3JvdXBFbmQgICA9IE1hdGgubWluKGdyb3VwU3RhcnQgKyBHUk9VUF9TSVpFLCB0b3RhbCk7XG4gIGNvbnN0IGdyb3VwUXMgICAgPSBxcy5zbGljZShncm91cFN0YXJ0LCBncm91cEVuZCk7XG4gIGNvbnN0IGlzTGFzdEdyb3VwID0gX2N1cnJlbnRHcm91cCA9PT0gbnVtR3JvdXBzIC0gMTtcblxuICBjb25zdCBleGlzdGluZ0Fuc3dlcnMgPSAod2luZG93LnF1ZXN0aW9uQW5zd2VycyAmJiB0eXBlb2Ygd2luZG93LnF1ZXN0aW9uQW5zd2VycyA9PT0gJ29iamVjdCcpXG4gICAgPyB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzIDoge307XG5cbiAgY29uc3QgZ3JvdXBMYWJlbCA9IG51bUdyb3VwcyA+IDFcbiAgICA/IGBHcm91cCAke19jdXJyZW50R3JvdXAgKyAxfSBvZiAke251bUdyb3Vwc31gXG4gICAgOiBgJHt0b3RhbH0gcXVlc3Rpb24ke3RvdGFsID4gMSA/ICdzJyA6ICcnfWA7XG5cbiAgbGV0IHBhbmVsSHRtbCA9IGA8ZGl2IGNsYXNzPVwicXVlc3Rpb25zLXBhbmVsXCIgaWQ9XCJxdWVzdGlvbnMtcGFuZWxcIj5cbiAgICA8aDI+XHVEODNEXHVEQ0FDIEEgZmV3IHF1aWNrIHF1ZXN0aW9uczwvaDI+XG4gICAgPHAgY2xhc3M9XCJxLXByb2dyZXNzXCIgaWQ9XCJxLXByb2dyZXNzXCI+JHtncm91cExhYmVsfSBcdTIwMTQgYW5zd2VyIGVhY2ggdG8gY29udGludWUuPC9wPmA7XG5cbiAgZ3JvdXBRcy5mb3JFYWNoKChxLCBsb2NhbElkeCkgPT4ge1xuICAgIGNvbnN0IGlkeCA9IGdyb3VwU3RhcnQgKyBsb2NhbElkeDtcbiAgICBjb25zdCBzYXZlZEFuc3dlciA9IChleGlzdGluZ0Fuc3dlcnNbcS50eXBlXSB8fCAnJykudG9TdHJpbmcoKTtcbiAgICBjb25zdCBpc0Fuc3dlcmVkICA9IHNhdmVkQW5zd2VyLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IHJlbmRlcmVkUXVlc3Rpb24gPSByZW5kZXJRdWVzdGlvbk1hcmtkb3duKHEucXVlc3Rpb24pO1xuICAgIGNvbnN0IGNoaXBzID0gKHEuY2hvaWNlcyB8fCBbXSkubWFwKChjLCBjaSkgPT5cbiAgICAgIGA8YnV0dG9uIGNsYXNzPVwicS1jaGlwXCIgZGF0YS1xaWR4PVwiJHtpZHh9XCIgZGF0YS1jaWR4PVwiJHtjaX1cIiBvbmNsaWNrPVwic2VsZWN0UUNoaXAodGhpcywgJHtpZHh9KVwiPiR7ZXNjYXBlSHRtbChjKX08L2J1dHRvbj5gXG4gICAgKS5qb2luKCcnKTtcbiAgICBwYW5lbEh0bWwgKz0gYFxuICAgICAgPGRpdiBjbGFzcz1cInF1ZXN0aW9uLWl0ZW0ke2lzQW5zd2VyZWQgPyAnIGFuc3dlcmVkJyA6ICcnfVwiIGlkPVwicS1pdGVtLSR7aWR4fVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicS1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicS10ZXh0XCI+JHtpZHggKyAxfS4gJHtyZW5kZXJlZFF1ZXN0aW9ufTwvZGl2PlxuICAgICAgICAgICR7aXNBbnN3ZXJlZCA/ICc8c3BhbiBjbGFzcz1cInEtYW5zd2VyZWQtYmFkZ2VcIj5cdTI3MTMgQW5zd2VyZWQ8L3NwYW4+JyA6ICcnfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgJHtjaGlwcyA/IGA8ZGl2IGNsYXNzPVwicS1jaGlwc1wiPiR7Y2hpcHN9PC9kaXY+YCA6ICcnfVxuICAgICAgICA8ZGl2IGNsYXNzPVwicS1hbnN3ZXItcm93XCI+XG4gICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwicS1pbnB1dFwiIGlkPVwicS1pbnB1dC0ke2lkeH1cIiBwbGFjZWhvbGRlcj1cIllvdXIgYW5zd2VyXHUyMDI2XCIgb25pbnB1dD1cIm9uUUlucHV0Q2hhbmdlKCR7aWR4fSlcIj4ke2VzY2FwZUh0bWwoc2F2ZWRBbnN3ZXIpfTwvdGV4dGFyZWE+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInEtZHJhZnQtYnRuXCIgaWQ9XCJxLWRyYWZ0LWJ0bi0ke2lkeH1cIiBvbmNsaWNrPVwiZHJhZnRRdWVzdGlvblJlc3BvbnNlKCR7aWR4fSlcIiB0aXRsZT1cIkdlbmVyYXRlIGEgZHJhZnQgYW5zd2VyIHVzaW5nIEFJXCI+XHUyNzI4IERyYWZ0PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+YDtcbiAgfSk7XG5cbiAgaWYgKGlzTGFzdEdyb3VwKSB7XG4gICAgcGFuZWxIdG1sICs9IGA8YnV0dG9uIGNsYXNzPVwicXVlc3Rpb25zLXN1Ym1pdC1idG5cIiBpZD1cInEtc3VibWl0LWJ0blwiIG9uY2xpY2s9XCJzdWJtaXRBbGxBbnN3ZXJzKClcIiBkaXNhYmxlZD5TdWJtaXQgQW5zd2VyczwvYnV0dG9uPmA7XG4gIH0gZWxzZSB7XG4gICAgcGFuZWxIdG1sICs9IGA8YnV0dG9uIGNsYXNzPVwicXVlc3Rpb25zLXN1Ym1pdC1idG5cIiBpZD1cInEtc3VibWl0LWJ0blwiIG9uY2xpY2s9XCJhZHZhbmNlUUdyb3VwKClcIiBkaXNhYmxlZD5Db250aW51ZSBcdTIxOTIgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC44ZW07Zm9udC13ZWlnaHQ6NDAwO1wiPigke2dyb3VwRW5kfSBvZiAke3RvdGFsfSBhbnN3ZXJlZCk8L3NwYW4+PC9idXR0b24+YDtcbiAgfVxuICBwYW5lbEh0bWwgKz0gJzwvZGl2Pic7XG5cbiAgY29udGVudC5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIHBhbmVsSHRtbCk7XG5cbiAgLy8gUmVzdG9yZSBjaGlwIHNlbGVjdGlvbiBmb3IgYW55IHF1ZXN0aW9uIHdob3NlIHNhdmVkIGFuc3dlciBtYXRjaGVzIGEgY2hpcCBsYWJlbC5cbiAgZ3JvdXBRcy5mb3JFYWNoKChxLCBsb2NhbElkeCkgPT4ge1xuICAgIGNvbnN0IGlkeCA9IGdyb3VwU3RhcnQgKyBsb2NhbElkeDtcbiAgICBjb25zdCBzYXZlZCA9IChleGlzdGluZ0Fuc3dlcnNbcS50eXBlXSB8fCAnJykudG9TdHJpbmcoKS50cmltKCk7XG4gICAgaWYgKCFzYXZlZCkgcmV0dXJuO1xuICAgIGNvbnN0IGl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcS1pdGVtLSR7aWR4fWApO1xuICAgIGlmICghaXRlbSkgcmV0dXJuO1xuICAgIGl0ZW0ucXVlcnlTZWxlY3RvckFsbCgnLnEtY2hpcCcpLmZvckVhY2goY2hpcCA9PiB7XG4gICAgICBpZiAoKGNoaXAudGV4dENvbnRlbnQgfHwgJycpLnRyaW0oKSA9PT0gc2F2ZWQpIGNoaXAuY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdXBkYXRlUVByb2dyZXNzKCk7XG59XG5cbmZ1bmN0aW9uIGFkdmFuY2VRR3JvdXAoKSB7XG4gIC8vIEZsdXNoIGN1cnJlbnQgZ3JvdXAncyB0ZXh0YXJlYSB2YWx1ZXMgaW50byB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzIGJlZm9yZSBhZHZhbmNpbmcuXG4gIGNvbnN0IHFzID0gd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyB8fCBbXTtcbiAgY29uc3QgZ3JvdXBTdGFydCA9IF9jdXJyZW50R3JvdXAgKiBHUk9VUF9TSVpFO1xuICBjb25zdCBncm91cEVuZCAgID0gTWF0aC5taW4oZ3JvdXBTdGFydCArIEdST1VQX1NJWkUsIHFzLmxlbmd0aCk7XG4gIGZvciAobGV0IGlkeCA9IGdyb3VwU3RhcnQ7IGlkeCA8IGdyb3VwRW5kOyBpZHgrKykge1xuICAgIGNvbnN0IHEgID0gcXNbaWR4XTtcbiAgICBjb25zdCB0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBxLWlucHV0LSR7aWR4fWApO1xuICAgIGlmIChxICYmIHRhICYmIHRhLnZhbHVlLnRyaW0oKSkge1xuICAgICAgaWYgKCF3aW5kb3cucXVlc3Rpb25BbnN3ZXJzKSB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzID0ge307XG4gICAgICB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzW3EudHlwZV0gPSB0YS52YWx1ZS50cmltKCk7XG4gICAgfVxuICB9XG4gIHBlcnNpc3RQb3N0QW5hbHlzaXNTdGF0ZSgpO1xuICBfY3VycmVudEdyb3VwKys7XG4gIHJlbmRlclF1ZXN0aW9uc1BhbmVsKCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSW50ZXJhY3Rpb24gaGFuZGxlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5hc3luYyBmdW5jdGlvbiBkcmFmdFF1ZXN0aW9uUmVzcG9uc2UoaWR4KSB7XG4gIGNvbnN0IHFzID0gd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyB8fCBbXTtcbiAgY29uc3QgcSAgPSBxc1tpZHhdO1xuICBpZiAoIXEpIHJldHVybjtcblxuICBjb25zdCBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcS1kcmFmdC1idG4tJHtpZHh9YCk7XG4gIGNvbnN0IHRhICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBxLWlucHV0LSR7aWR4fWApO1xuICBpZiAoIWJ0biB8fCAhdGEpIHJldHVybjtcblxuICBidG4uZGlzYWJsZWQgPSB0cnVlO1xuICBidG4uaW5uZXJIVE1MID0gJzxzcGFuIGNsYXNzPVwic3Bpbm5lclwiIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTFweDtoZWlnaHQ6MTFweDtib3JkZXI6MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtib3JkZXItdG9wLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NTAlO2FuaW1hdGlvbjpzcGluIDAuN3MgbGluZWFyIGluZmluaXRlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIj48L3NwYW4+JztcblxuICB0cnkge1xuICAgIGxldCBhbmFseXNpc1BheWxvYWQgPSBudWxsO1xuICAgIGNvbnN0IGFuYWx5c2lzU3RhdGUgPSBzdGF0ZU1hbmFnZXIuZ2V0VGFiRGF0YSgnYW5hbHlzaXMnKTtcbiAgICBpZiAoYW5hbHlzaXNTdGF0ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2xlYW5lZCA9IGNsZWFuSnNvblJlc3BvbnNlKGFuYWx5c2lzU3RhdGUpO1xuICAgICAgICBhbmFseXNpc1BheWxvYWQgPSB0eXBlb2YgY2xlYW5lZCA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGNsZWFuZWQpIDogY2xlYW5lZDtcbiAgICAgIH0gY2F0Y2ggKF8pIHsgLyogdXNlIG51bGwgKi8gfVxuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3Bvc3QtYW5hbHlzaXMtZHJhZnQtcmVzcG9uc2UnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBxdWVzdGlvbjogcS5xdWVzdGlvbiwgcXVlc3Rpb25fdHlwZTogcS50eXBlLCBhbmFseXNpczogYW5hbHlzaXNQYXlsb2FkIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rICYmIGRhdGEudGV4dCkge1xuICAgICAgdGEudmFsdWUgPSBkYXRhLnRleHQ7XG4gICAgICB1cGRhdGVRUHJvZ3Jlc3MoKTtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcS1pdGVtLSR7aWR4fWApO1xuICAgICAgaWYgKGl0ZW0pIGl0ZW0ucXVlcnlTZWxlY3RvckFsbCgnLnEtY2hpcCcpLmZvckVhY2goYyA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJykpO1xuICAgICAgc2hvd0RyYWZ0RXJyb3IoaWR4LCBudWxsKTtcbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIGBcdTI3MjggRHJhZnQgYW5zd2VyIGZvciBRJHtpZHggKyAxfTpcXG5cXG4ke2RhdGEudGV4dH1cXG5cXG5SZXZpZXcgYW5kIGVkaXQgaW4gdGhlIGZpZWxkIGJlbG93IGJlZm9yZSBzdWJtaXR0aW5nLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cud2FybignRHJhZnQgZ2VuZXJhdGlvbiBmYWlsZWQ6JywgZGF0YS5lcnJvcik7XG4gICAgICBzaG93RHJhZnRFcnJvcihpZHgsIGRhdGEuZXJyb3IgfHwgJ0RyYWZ0IGZhaWxlZCBcdTIwMTQgcGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcignRHJhZnQgZmV0Y2ggZXJyb3I6JywgZXJyKTtcbiAgICBzaG93RHJhZnRFcnJvcihpZHgsICdOZXR3b3JrIGVycm9yIFx1MjAxNCBwbGVhc2UgdHJ5IGFnYWluLicpO1xuICB9IGZpbmFsbHkge1xuICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIGJ0bi5pbm5lckhUTUwgPSAnXHUyNzI4IERyYWZ0JztcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWxlY3RRQ2hpcChidG4sIHFJZHgpIHtcbiAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcS1pdGVtLSR7cUlkeH1gKTtcbiAgaWYgKHBhbmVsKSB7XG4gICAgcGFuZWwucXVlcnlTZWxlY3RvckFsbCgnLnEtY2hpcCcpLmZvckVhY2goYyA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJykpO1xuICB9XG4gIGJ0bi5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpO1xuICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBxLWlucHV0LSR7cUlkeH1gKTtcbiAgaWYgKHRleHRhcmVhKSB7XG4gICAgdGV4dGFyZWEudmFsdWUgPSBidG4udGV4dENvbnRlbnQ7XG4gICAgdXBkYXRlUVByb2dyZXNzKCk7XG4gIH1cbiAgLy8gUGVyc2lzdCB0aGUgY2hpcCBhbnN3ZXIgaW1tZWRpYXRlbHkgc28gaXQgc3Vydml2ZXMgdGFiIG5hdmlnYXRpb24uXG4gIGNvbnN0IHEgPSAod2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyB8fCBbXSlbcUlkeF07XG4gIGlmIChxKSB7XG4gICAgaWYgKCF3aW5kb3cucXVlc3Rpb25BbnN3ZXJzIHx8IHR5cGVvZiB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzICE9PSAnb2JqZWN0Jykge1xuICAgICAgd2luZG93LnF1ZXN0aW9uQW5zd2VycyA9IHt9O1xuICAgIH1cbiAgICB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzW3EudHlwZV0gPSBidG4udGV4dENvbnRlbnQ7XG4gICAgcGVyc2lzdFBvc3RBbmFseXNpc1N0YXRlKCk7XG4gIH1cbn1cblxuLy8gQ3VycmVudCBxdWVzdGlvbi1ncm91cCBpbmRleCAoXHUyMjY0My1wZXItZ3JvdXAgZmxvdywgR0FQLTIwMSkuXG5sZXQgX2N1cnJlbnRHcm91cCA9IDA7XG5jb25zdCBHUk9VUF9TSVpFID0gMztcblxuLy8gRGVib3VuY2UgdGltZXIgZm9yIHBlcnNpc3RpbmcgYW5zd2VycyB3aGlsZSB0aGUgdXNlciB0eXBlcy5cbmxldCBfcGVyc2lzdERlYm91bmNlVGltZXIgPSBudWxsO1xuXG5mdW5jdGlvbiBvblFJbnB1dENoYW5nZShpZHgpIHtcbiAgdXBkYXRlUVByb2dyZXNzKCk7XG4gIGNvbnN0IHEgPSAod2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyB8fCBbXSlbaWR4XTtcbiAgaWYgKCFxKSByZXR1cm47XG4gIGNvbnN0IHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHEtaW5wdXQtJHtpZHh9YCk7XG4gIGlmICghdGEpIHJldHVybjtcbiAgaWYgKCF3aW5kb3cucXVlc3Rpb25BbnN3ZXJzIHx8IHR5cGVvZiB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHdpbmRvdy5xdWVzdGlvbkFuc3dlcnMgPSB7fTtcbiAgfVxuICB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzW3EudHlwZV0gPSB0YS52YWx1ZTtcblxuICAvLyBEZWJvdW5jZS1wZXJzaXN0IHNvIGFuc3dlcnMgc3Vydml2ZSB0YWIgbmF2aWdhdGlvbiBhbmQgc3RhdHVzIHBvbGxpbmcuXG4gIGNsZWFyVGltZW91dChfcGVyc2lzdERlYm91bmNlVGltZXIpO1xuICBfcGVyc2lzdERlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHBlcnNpc3RQb3N0QW5hbHlzaXNTdGF0ZSgpLCA1MDApO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVRUHJvZ3Jlc3MoKSB7XG4gIGNvbnN0IHFzID0gd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyB8fCBbXTtcbiAgY29uc3Qgc3RvcmVkQW5zd2VycyA9IHdpbmRvdy5xdWVzdGlvbkFuc3dlcnMgfHwge307XG4gIGNvbnN0IGdyb3VwU3RhcnQgPSBfY3VycmVudEdyb3VwICogR1JPVVBfU0laRTtcbiAgY29uc3QgZ3JvdXBFbmQgICA9IE1hdGgubWluKGdyb3VwU3RhcnQgKyBHUk9VUF9TSVpFLCBxcy5sZW5ndGgpO1xuXG4gIC8vIENvdW50IGFuc3dlcnM6IHVzZSBET00gdmFsdWVzIGZvciB0aGUgY3VycmVudCBncm91cCAobGl2ZSksIHN0b3JlZCBmb3Igb3RoZXJzLlxuICBjb25zdCBhbnN3ZXJlZCA9IHFzLmZpbHRlcigocSwgaWR4KSA9PiB7XG4gICAgaWYgKGlkeCA+PSBncm91cFN0YXJ0ICYmIGlkeCA8IGdyb3VwRW5kKSB7XG4gICAgICBjb25zdCB0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBxLWlucHV0LSR7aWR4fWApO1xuICAgICAgcmV0dXJuIHRhID8gdGEudmFsdWUudHJpbSgpLmxlbmd0aCA+IDAgOiAhIShzdG9yZWRBbnN3ZXJzW3EudHlwZV0gfHwgJycpLnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuICEhKHN0b3JlZEFuc3dlcnNbcS50eXBlXSB8fCAnJykudHJpbSgpO1xuICB9KS5sZW5ndGg7XG5cbiAgY29uc3QgZ3JvdXBBbnN3ZXJlZCA9IHFzLnNsaWNlKGdyb3VwU3RhcnQsIGdyb3VwRW5kKS5maWx0ZXIoKHEsIGxpKSA9PiB7XG4gICAgY29uc3QgdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcS1pbnB1dC0ke2dyb3VwU3RhcnQgKyBsaX1gKTtcbiAgICByZXR1cm4gdGEgPyB0YS52YWx1ZS50cmltKCkubGVuZ3RoID4gMCA6ICEhKHN0b3JlZEFuc3dlcnNbcS50eXBlXSB8fCAnJykudHJpbSgpO1xuICB9KS5sZW5ndGg7XG5cbiAgY29uc3QgbnVtR3JvdXBzICA9IE1hdGguY2VpbChxcy5sZW5ndGggLyBHUk9VUF9TSVpFKTtcbiAgY29uc3QgZ3JvdXBMYWJlbCA9IG51bUdyb3VwcyA+IDFcbiAgICA/IGBHcm91cCAke19jdXJyZW50R3JvdXAgKyAxfSBvZiAke251bUdyb3Vwc31gXG4gICAgOiBgJHtxcy5sZW5ndGh9IHF1ZXN0aW9uJHtxcy5sZW5ndGggPiAxID8gJ3MnIDogJyd9YDtcblxuICBjb25zdCBwcm9ncmVzc0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3EtcHJvZ3Jlc3MnKTtcbiAgaWYgKHByb2dyZXNzRWwpIHtcbiAgICBwcm9ncmVzc0VsLnRleHRDb250ZW50ID0gYCR7Z3JvdXBMYWJlbH0gXHUyMDE0ICR7YW5zd2VyZWR9IG9mICR7cXMubGVuZ3RofSBhbnN3ZXJlZGA7XG4gIH1cbiAgY29uc3Qgc3VibWl0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Etc3VibWl0LWJ0bicpO1xuICBpZiAoc3VibWl0QnRuKSB7XG4gICAgY29uc3QgY3VycmVudEdyb3VwU2l6ZSA9IGdyb3VwRW5kIC0gZ3JvdXBTdGFydDtcbiAgICBzdWJtaXRCdG4uZGlzYWJsZWQgPSBncm91cEFuc3dlcmVkIDwgY3VycmVudEdyb3VwU2l6ZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdWJtaXRBbGxBbnN3ZXJzKCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogcXVlc3Rpb25zX3VpX3N1Ym1pdF9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTAzLTI1VDIxOjM5OjQ4WidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6cXVlc3Rpb25zLnN1Ym1pdC1hbGxcbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9wb3N0LWFuYWx5c2lzLXJlc3BvbnNlc1xuICAgKiAgIC0gUE9TVCAvYXBpL2FjdGlvblxuICAgKiAgIHJlYWRzOlxuICAgKiAgIC0gd2luZG93OnBvc3RBbmFseXNpc1F1ZXN0aW9uc1xuICAgKiAgIC0gZG9tOnEtaW5wdXQtKi52YWx1ZVxuICAgKiAgIHdyaXRlczpcbiAgICogICAtIHdpbmRvdzpxdWVzdGlvbkFuc3dlcnNcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL3Bvc3QtYW5hbHlzaXMtcmVzcG9uc2VzLmFuc3dlcnNcbiAgICogICBub3RlczogQ29sbGVjdHMgdGhlIGNsYXJpZnlpbmctcXVlc3Rpb24gYW5zd2VycyBmcm9tIHRoZSBVSSwgcGVyc2lzdHMgdGhlbSB0byBzZXNzaW9uIHN0YXRlLCBhbmQgdGhlbiBhZHZhbmNlcyBpbnRvIGN1c3RvbWl6YXRpb24gcmVjb21tZW5kYXRpb24gZ2VuZXJhdGlvbi5cbiAgICovXG4gIGNvbnN0IHFzID0gd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyB8fCBbXTtcbiAgcXMuZm9yRWFjaCgocSwgaWR4KSA9PiB7XG4gICAgY29uc3QgdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcS1pbnB1dC0ke2lkeH1gKTtcbiAgICBpZiAodGEgJiYgdGEudmFsdWUudHJpbSgpKSB7XG4gICAgICB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzW3EudHlwZV0gPSB0YS52YWx1ZS50cmltKCk7XG4gICAgfVxuICB9KTtcbiAgYXdhaXQgcGVyc2lzdFBvc3RBbmFseXNpc1N0YXRlKCk7XG5cbiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Etc3VibWl0LWJ0bicpO1xuICBpZiAoYnRuKSB7XG4gICAgYnRuLmRpc2FibGVkID0gdHJ1ZTtcbiAgICBidG4uaW5uZXJIVE1MID0gJzxzcGFuIGNsYXNzPVwic3Bpbm5lclwiIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTRweDtoZWlnaHQ6MTRweDtib3JkZXI6MnB4IHNvbGlkICNmZmY7Ym9yZGVyLXRvcC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTthbmltYXRpb246c3BpbiAwLjdzIGxpbmVhciBpbmZpbml0ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLXJpZ2h0OjZweDtcIj48L3NwYW4+UHJvY2Vzc2luZ1x1MjAyNic7XG4gIH1cblxuICB0cnkge1xuICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIGBcdTI3MTMgVGhhbmsgeW91ISAke3FzLmxlbmd0aH0gYW5zd2VyJHtxcy5sZW5ndGggPiAxID8gJ3MnIDogJyd9IHNhdmVkLiBHZW5lcmF0aW5nIGN1c3RvbWl6YXRpb24gcmVjb21tZW5kYXRpb25zXHUyMDI2YCk7XG4gICAgYXdhaXQgc2VuZEFjdGlvbigncmVjb21tZW5kX2N1c3RvbWl6YXRpb25zJyk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGJ0bikge1xuICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICBidG4uaW5uZXJIVE1MID0gJ1N1Ym1pdCBBbnN3ZXJzJztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvd0RyYWZ0RXJyb3IoaWR4LCBtZXNzYWdlKSB7XG4gIGNvbnN0IHJvdyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNxLWl0ZW0tJHtpZHh9IC5xLWFuc3dlci1yb3dgKTtcbiAgaWYgKCFyb3cpIHJldHVybjtcbiAgbGV0IGVyckVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHEtZHJhZnQtZXJyLSR7aWR4fWApO1xuICBpZiAoIW1lc3NhZ2UpIHtcbiAgICBpZiAoZXJyRWwpIGVyckVsLnJlbW92ZSgpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWVyckVsKSB7XG4gICAgZXJyRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlcnJFbC5pZCA9IGBxLWRyYWZ0LWVyci0ke2lkeH1gO1xuICAgIGVyckVsLmNsYXNzTmFtZSA9ICdxLWRyYWZ0LWVycm9yJztcbiAgICByb3cuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsIGVyckVsKTtcbiAgfVxuICBlcnJFbC50ZXh0Q29udGVudCA9IGBcdTI2QTAgJHttZXNzYWdlfWA7XG59XG5cbi8vIExlZ2FjeSBjb21wYXRpYmlsaXR5IHNoaW1cbmZ1bmN0aW9uIHNob3dOZXh0UXVlc3Rpb24oKSB7IHJlbmRlclF1ZXN0aW9uc1BhbmVsKCk7IH1cblxuZnVuY3Rpb24gaGFuZGxlUXVlc3Rpb25SZXNwb25zZShtZXNzYWdlKSB7XG4gIGlmICghd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyB8fCB3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIXdpbmRvdy53YWl0aW5nRm9yUXVlc3Rpb25SZXNwb25zZSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBpZHggPSB3aW5kb3cuY3VycmVudFF1ZXN0aW9uSW5kZXggfHwgMDtcbiAgY29uc3QgcSA9IHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnNbaWR4XTtcbiAgaWYgKCFxKSByZXR1cm4gZmFsc2U7XG4gIHdpbmRvdy5xdWVzdGlvbkFuc3dlcnNbcS50eXBlXSA9IG1lc3NhZ2U7XG4gIHdpbmRvdy53YWl0aW5nRm9yUXVlc3Rpb25SZXNwb25zZSA9IGZhbHNlO1xuICB3aW5kb3cuY3VycmVudFF1ZXN0aW9uSW5kZXggPSBpZHggKyAxO1xuICBwZXJzaXN0UG9zdEFuYWx5c2lzU3RhdGUoKTtcbiAgcmVuZGVyUXVlc3Rpb25zUGFuZWwoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaFBvc3RBbmFseXNpc1F1ZXN0aW9ucygpIHtcbiAgd2luZG93LndhaXRpbmdGb3JRdWVzdGlvblJlc3BvbnNlID0gZmFsc2U7XG4gIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsICdUaGFuayB5b3UgZm9yIHRob3NlIGluc2lnaHRzISBDbGljayBcIlJlY29tbWVuZCBDdXN0b21pemF0aW9uc1wiIHdoZW4geW91XFwncmUgcmVhZHkuJyk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFUyBtb2R1bGUgZXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB7XG4gIHBlcnNpc3RQb3N0QW5hbHlzaXNTdGF0ZSxcbiAgcmVuZGVyUXVlc3Rpb25NYXJrZG93bixcbiAgZmV0Y2hQb3N0QW5hbHlzaXNRdWVzdGlvbnNGcm9tQXBpLFxuICBhc2tQb3N0QW5hbHlzaXNRdWVzdGlvbnMsXG4gIHBvcHVsYXRlUXVlc3Rpb25zVGFiLFxuICByZW5kZXJRdWVzdGlvbnNQYW5lbCxcbiAgZHJhZnRRdWVzdGlvblJlc3BvbnNlLFxuICBzZWxlY3RRQ2hpcCxcbiAgb25RSW5wdXRDaGFuZ2UsXG4gIHVwZGF0ZVFQcm9ncmVzcyxcbiAgc3VibWl0QWxsQW5zd2VycyxcbiAgc2hvd0RyYWZ0RXJyb3IsXG4gIHNob3dOZXh0UXVlc3Rpb24sXG4gIGhhbmRsZVF1ZXN0aW9uUmVzcG9uc2UsXG4gIGZpbmlzaFBvc3RBbmFseXNpc1F1ZXN0aW9ucyxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG5mdW5jdGlvbiBleWVTbGFzaEljb24oKSB7XG4gIHJldHVybiBgXG4gICAgPHN2ZyBjbGFzcz1cImljb24tZ2x5cGhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZm9jdXNhYmxlPVwiZmFsc2VcIj5cbiAgICAgIDxwYXRoIGQ9XCJNMyAzbDE4IDE4XCI+PC9wYXRoPlxuICAgICAgPHBhdGggZD1cIk0xMC41OCAxMC41OGEyIDIgMCAwIDAgMi44MyAyLjgzXCI+PC9wYXRoPlxuICAgICAgPHBhdGggZD1cIk05Ljg4IDUuMDlBMTAuOTQgMTAuOTQgMCAwIDEgMTIgNWM1IDAgOS4yNyAzLjExIDExIDctMS4wNCAyLjM1LTIuNzggNC4zMi00Ljk2IDUuNDVcIj48L3BhdGg+XG4gICAgICA8cGF0aCBkPVwiTTYuNjEgNi42MUM0LjYyIDcuOSAzLjAzIDkuNzkgMiAxMmMxLjczIDMuODkgNiA3IDEwIDcgMS41MiAwIDIuOTgtLjM2IDQuMjktMVwiPjwvcGF0aD5cbiAgICA8L3N2Zz5cbiAgYDtcbn1cblxuZXhwb3J0IHsgZXllU2xhc2hJY29uIH07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9leHBlcmllbmNlLXJldmlldy5qc1xuICogRXhwZXJpZW5jZS1yZXZpZXcgdGFibGU6IGZldGNoLCByZW5kZXIsIHJvdy1yZW9yZGVyLCBhbmQgc3VibWl0IGRlY2lzaW9ucy5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgdXNlclNlbGVjdGlvbnMsIHBlbmRpbmdSZWNvbW1lbmRhdGlvbnMsIF9zYXZlZERlY2lzaW9ucywgX2V4cGVyaWVuY2VzT3JkZXJlZCxcbiAqICAgcGFyc2VTdGF0dXNSZXNwb25zZSwgZ2V0RXhwZXJpZW5jZVJlY29tbWVuZGF0aW9uLCBnZXRDb25maWRlbmNlTGV2ZWwsXG4gKiAgIGdldEV4cGVyaWVuY2VSZWFzb25pbmcsIGVzY2FwZUh0bWwsIHNob3dCdWxsZXRSZW9yZGVyLFxuICogICBoYW5kbGVBY3Rpb25DbGljaywgYnVsa0FjdGlvbiwgX3VwZGF0ZVBhZ2VFc3RpbWF0ZSxcbiAqICAgdXBkYXRlSW5jbHVzaW9uQ291bnRzLCBzd2l0Y2hUYWIsXG4gKiAgIHNob3dBbGVydE1vZGFsLCBzaG93VG9hc3QsIHNjaGVkdWxlQXRzUmVmcmVzaCxcbiAqICAgJCwgJC5mbi5EYXRhVGFibGUgKGpRdWVyeSArIERhdGFUYWJsZXMpXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdleHBlcmllbmNlLXJldmlldycpO1xuXG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgZXllU2xhc2hJY29uIH0gZnJvbSAnLi9yZXZpZXctaWNvbnMuanMnO1xuXG5mdW5jdGlvbiBfZmluZEV4cGVyaWVuY2VSZWNvbW1lbmRhdGlvblJlY29yZChleHBJZCwgZGF0YSkge1xuICBpZiAoIWRhdGEgfHwgIUFycmF5LmlzQXJyYXkoZGF0YS5leHBlcmllbmNlX3JlY29tbWVuZGF0aW9ucykpIHJldHVybiBudWxsO1xuICByZXR1cm4gZGF0YS5leHBlcmllbmNlX3JlY29tbWVuZGF0aW9ucy5maW5kKChyZWMpID0+IFN0cmluZyhyZWM/LmlkIHx8IHJlYz8uZXhwZXJpZW5jZV9pZCB8fCAnJykgPT09IFN0cmluZyhleHBJZCkpIHx8IG51bGw7XG59XG5cbmZ1bmN0aW9uIF9mb3JtYXRTdWdnZXN0ZWRPcmRlclN1bW1hcnkob3JkZXIpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KG9yZGVyKSB8fCBvcmRlci5sZW5ndGggPCAyKSByZXR1cm4gJyc7XG4gIHJldHVybiBvcmRlci5tYXAoKGlkeCkgPT4gU3RyaW5nKE51bWJlcihpZHgpICsgMSkpLmpvaW4oJyAtPiAnKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cGVyaWVuY2UgZGV0YWlscyBmZXRjaCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gZ2V0RXhwZXJpZW5jZURldGFpbHMoZXhwSWQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9leHBlcmllbmNlLWRldGFpbHMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBleHBlcmllbmNlX2lkOiBleHBJZCB9KVxuICAgIH0pO1xuXG4gICAgaWYgKHJlcy5vaykge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICByZXR1cm4gZGF0YS5leHBlcmllbmNlIHx8IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy53YXJuKCdDb3VsZCBub3QgZmV0Y2ggZXhwZXJpZW5jZSBkZXRhaWxzIGZvcicsIGV4cElkKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cud2FybignRXJyb3IgZmV0Y2hpbmcgZXhwZXJpZW5jZSBkZXRhaWxzOicsIGVycm9yKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgUmVydW4gc25hcHNob3QgKGNoYW5nZSBiYWRnZSBmb3IgZXhwZXJpZW5jZXMpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZnVuY3Rpb24gX2V4cFNuYXBzaG90S2V5KCkge1xuICB0cnkge1xuICAgIGNvbnN0IHNpZCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCdzZXNzaW9uJyk7XG4gICAgcmV0dXJuIHNpZCA/IGBleHBfc25hcF8ke3NpZH1gIDogbnVsbDtcbiAgfSBjYXRjaCAoXykgeyByZXR1cm4gbnVsbDsgfVxufVxuZnVuY3Rpb24gX3NhdmVFeHBTbmFwc2hvdChyZWNvbW1lbmRlZElkcykge1xuICBjb25zdCBrZXkgPSBfZXhwU25hcHNob3RLZXkoKTtcbiAgaWYgKCFrZXkpIHJldHVybjtcbiAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShbLi4ucmVjb21tZW5kZWRJZHNdKSk7IH0gY2F0Y2ggKF8pIHt9XG59XG5mdW5jdGlvbiBfZ2V0RXhwU25hcHNob3QoKSB7XG4gIGNvbnN0IGtleSA9IF9leHBTbmFwc2hvdEtleSgpO1xuICBpZiAoIWtleSkgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICByZXR1cm4gcmF3ID8gbmV3IFNldChKU09OLnBhcnNlKHJhdykpIDogbnVsbDtcbiAgfSBjYXRjaCAoXykgeyByZXR1cm4gbnVsbDsgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgQnVpbGQgcmV2aWV3IHRhYmxlIChmZXRjaCArIGluaXRpYWxpc2UpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBidWlsZEV4cGVyaWVuY2VSZXZpZXdUYWJsZSgpIHtcbiAgY29uc3QgZGF0YSA9IHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zO1xuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZXJpZW5jZS10YWJsZS1jb250YWluZXInKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPjxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIj48L2Rpdj48cCBzdHlsZT1cIm1hcmdpbi10b3A6MTJweDtjb2xvcjojNjQ3NDhiO1wiPkxvYWRpbmcgZXhwZXJpZW5jZSByZWNvbW1lbmRhdGlvbnNcdTIwMjY8L3A+PC9kaXY+JztcblxuICBsZXQgYWxsRXhwZXJpZW5jZUlkcyA9IFtdO1xuICBsZXQgc2F2ZWRSb3dPcmRlciA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHN0YXR1c1JlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3N0YXR1cycpO1xuICAgIGNvbnN0IHN0YXR1c0RhdGEgPSBwYXJzZVN0YXR1c1Jlc3BvbnNlKGF3YWl0IHN0YXR1c1Jlcy5qc29uKCkpO1xuICAgIGFsbEV4cGVyaWVuY2VJZHMgPSBzdGF0dXNEYXRhLmFsbF9leHBlcmllbmNlX2lkcyB8fCBkYXRhLnJlY29tbWVuZGVkX2V4cGVyaWVuY2VzIHx8IFtdO1xuICAgIHNhdmVkUm93T3JkZXIgICAgPSBBcnJheS5pc0FycmF5KHN0YXR1c0RhdGEuZXhwZXJpZW5jZV9yb3dfb3JkZXIpID8gc3RhdHVzRGF0YS5leHBlcmllbmNlX3Jvd19vcmRlciA6IFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGFsbEV4cGVyaWVuY2VJZHMgPSBkYXRhLnJlY29tbWVuZGVkX2V4cGVyaWVuY2VzIHx8IFtdO1xuICB9XG5cbiAgY29uc3QgcmVjb21tZW5kZWRTZXQgPSBuZXcgU2V0KGRhdGEucmVjb21tZW5kZWRfZXhwZXJpZW5jZXMgfHwgW10pO1xuXG4gIC8vIEZldGNoIGFsbCBleHBlcmllbmNlIGRldGFpbHNcbiAgY29uc3QgZXhwZXJpZW5jZXNXaXRoRGV0YWlscyA9IFtdO1xuICBmb3IgKGNvbnN0IGV4cElkIG9mIGFsbEV4cGVyaWVuY2VJZHMpIHtcbiAgICBjb25zdCBkZXRhaWxzID0gYXdhaXQgZ2V0RXhwZXJpZW5jZURldGFpbHMoZXhwSWQpO1xuICAgIGV4cGVyaWVuY2VzV2l0aERldGFpbHMucHVzaCh7IGlkOiBleHBJZCwgZGV0YWlscyB9KTtcbiAgfVxuXG4gIC8vIE9uIGZpcnN0IGxvYWQ6IHJlc3RvcmUgdXNlcidzIHNhdmVkIG9yZGVyIGlmIHByZXNlbnQ7IG90aGVyd2lzZSBkZWZhdWx0LXNvcnRcbiAgLy8gd2l0aCBwcmVzZW50L2N1cnJlbnQgcG9zaXRpb25zIGZpcnN0LCB0aGVuIHJldmVyc2UtY2hyb25vbG9naWNhbCBieSBlbmQgZGF0ZS5cbiAgLy8gT24gcmUtcmVuZGVyLCBwcmVzZXJ2ZSB0aGUgaW4tbWVtb3J5IHVzZXIgb3JkZXIuXG4gIGlmICghd2luZG93Ll9leHBlcmllbmNlc09yZGVyZWQpIHtcbiAgICBpZiAoc2F2ZWRSb3dPcmRlci5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBSZXN0b3JlIHVzZXIncyBleHBsaWNpdGx5IHNhdmVkIG9yZGVyaW5nIGZyb20gdGhlIHNlc3Npb25cbiAgICAgIGNvbnN0IG9yZGVyTWFwID0gT2JqZWN0LmZyb21FbnRyaWVzKHNhdmVkUm93T3JkZXIubWFwKChpZCwgaSkgPT4gW2lkLCBpXSkpO1xuICAgICAgZXhwZXJpZW5jZXNXaXRoRGV0YWlscy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGFpID0gb3JkZXJNYXBbYS5pZF0gPz8gc2F2ZWRSb3dPcmRlci5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGJpID0gb3JkZXJNYXBbYi5pZF0gPz8gc2F2ZWRSb3dPcmRlci5sZW5ndGg7XG4gICAgICAgIHJldHVybiBhaSAtIGJpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmF1bHQ6IHNvcnQgYnkgTExNIHJlY29tbWVuZGF0aW9uIHN0cmVuZ3RoIGZpcnN0LCB0aGVuIHJldmVyc2UtY2hyb25vbG9naWNhbFxuICAgICAgY29uc3QgX0FDVElPTl9SQU5LID0geyBlbXBoYXNpemU6IDAsIGluY2x1ZGU6IDEsICdkZS1lbXBoYXNpemUnOiAyLCBleGNsdWRlOiAzIH07XG4gICAgICBjb25zdCBfcGFyc2VFbmRLZXkgPSAoZXhwKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhdyA9IChleHAuZGV0YWlscz8uZW5kX2RhdGUgfHwgZXhwLmRldGFpbHM/LmVuZCB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghcmF3IHx8IFsncHJlc2VudCcsICdjdXJyZW50JywgJ25vdycsICdvbmdvaW5nJ10uaW5jbHVkZXMocmF3KSkgcmV0dXJuICc5OTk5LTEyJztcbiAgICAgICAgaWYgKC9eXFxkezR9JC8udGVzdChyYXcpKSByZXR1cm4gcmF3ICsgJy0xMic7XG4gICAgICAgIHJldHVybiByYXc7XG4gICAgICB9O1xuICAgICAgY29uc3QgX2dldEFjdGlvblJhbmsgPSAoZXhwKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYyA9IGdldEV4cGVyaWVuY2VSZWNvbW1lbmRhdGlvbihleHAuaWQsIGRhdGEpO1xuICAgICAgICBpZiAoIXJlYykgcmV0dXJuIDE7IC8vIGRlZmF1bHQgdG8gJ2luY2x1ZGUnIHJhbmsgd2hlbiBubyByZWNvbW1lbmRhdGlvblxuICAgICAgICBpZiAocmVjID09PSAnRW1waGFzaXplJykgICAgcmV0dXJuIDA7XG4gICAgICAgIGlmIChyZWMgPT09ICdJbmNsdWRlJykgICAgICByZXR1cm4gMTtcbiAgICAgICAgaWYgKHJlYyA9PT0gJ0RlLWVtcGhhc2l6ZScpIHJldHVybiAyO1xuICAgICAgICBpZiAocmVjID09PSAnT21pdCcpICAgICAgICAgcmV0dXJuIDM7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfTtcbiAgICAgIGV4cGVyaWVuY2VzV2l0aERldGFpbHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCByYW5rRGlmZiA9IF9nZXRBY3Rpb25SYW5rKGEpIC0gX2dldEFjdGlvblJhbmsoYik7XG4gICAgICAgIGlmIChyYW5rRGlmZiAhPT0gMCkgcmV0dXJuIHJhbmtEaWZmO1xuICAgICAgICByZXR1cm4gX3BhcnNlRW5kS2V5KGIpLmxvY2FsZUNvbXBhcmUoX3BhcnNlRW5kS2V5KGEpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB3aW5kb3cuX2V4cGVyaWVuY2VzT3JkZXJlZCA9IGV4cGVyaWVuY2VzV2l0aERldGFpbHM7XG4gIH0gZWxzZSB7XG4gICAgLy8gTWVyZ2UgYW55IG5ld2x5IGRpc2NvdmVyZWQgZXhwZXJpZW5jZXMgaW50byB0aGUgY2FjaGVkIG9yZGVyXG4gICAgY29uc3Qga25vd25JZHMgPSBuZXcgU2V0KHdpbmRvdy5fZXhwZXJpZW5jZXNPcmRlcmVkLm1hcChlID0+IGUuaWQpKTtcbiAgICBmb3IgKGNvbnN0IGV4cCBvZiBleHBlcmllbmNlc1dpdGhEZXRhaWxzKSB7XG4gICAgICBpZiAoIWtub3duSWRzLmhhcyhleHAuaWQpKSB3aW5kb3cuX2V4cGVyaWVuY2VzT3JkZXJlZC5wdXNoKGV4cCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB3aGljaCByZWNvbW1lbmRhdGlvbnMgYXJlIG5ldyBzaW5jZSBsYXN0IHJlbmRlciAocmVydW4gY2hhbmdlIGJhZGdlcylcbiAgY29uc3QgcHJldkV4cFNuYXAgPSBfZ2V0RXhwU25hcHNob3QoKTtcbiAgY29uc3QgbmV3UmVjb21tZW5kZWRFeHBzID0gcHJldkV4cFNuYXBcbiAgICA/IG5ldyBTZXQoWy4uLnJlY29tbWVuZGVkU2V0XS5maWx0ZXIoaWQgPT4gIXByZXZFeHBTbmFwLmhhcyhpZCkpKVxuICAgIDogbmV3IFNldCgpO1xuICBfc2F2ZUV4cFNuYXBzaG90KHJlY29tbWVuZGVkU2V0KTtcblxuICAvLyBJbml0aWFsaXNlIHNhdmVkIGRlY2lzaW9uc1xuICBjb25zdCBzYXZlZEV4cERlY3MgPSB3aW5kb3cuX3NhdmVkRGVjaXNpb25zPy5leHBlcmllbmNlX2RlY2lzaW9ucyB8fCB7fTtcbiAgZm9yIChjb25zdCB7IGlkOiBleHBJZCB9IG9mIHdpbmRvdy5fZXhwZXJpZW5jZXNPcmRlcmVkKSB7XG4gICAgY29uc3QgcmVjb21tZW5kYXRpb24gPSBnZXRFeHBlcmllbmNlUmVjb21tZW5kYXRpb24oZXhwSWQsIGRhdGEpO1xuICAgIGNvbnN0IGlzUmVjb21tZW5kZWQgID0gcmVjb21tZW5kZWRTZXQuaGFzKGV4cElkKTtcbiAgICBsZXQgZGVmYXVsdEFjdGlvbiA9ICdleGNsdWRlJztcbiAgICBpZiAgICAgIChyZWNvbW1lbmRhdGlvbiA9PT0gJ0VtcGhhc2l6ZScpICAgIGRlZmF1bHRBY3Rpb24gPSAnZW1waGFzaXplJztcbiAgICBlbHNlIGlmIChyZWNvbW1lbmRhdGlvbiA9PT0gJ0luY2x1ZGUnKSAgICAgIGRlZmF1bHRBY3Rpb24gPSAnaW5jbHVkZSc7XG4gICAgZWxzZSBpZiAocmVjb21tZW5kYXRpb24gPT09ICdEZS1lbXBoYXNpemUnKSBkZWZhdWx0QWN0aW9uID0gJ2RlLWVtcGhhc2l6ZSc7XG4gICAgZWxzZSBpZiAocmVjb21tZW5kYXRpb24gPT09ICdPbWl0JykgICAgICAgICBkZWZhdWx0QWN0aW9uID0gJ2V4Y2x1ZGUnO1xuICAgIGVsc2UgaWYgKGlzUmVjb21tZW5kZWQpICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEFjdGlvbiA9ICdpbmNsdWRlJztcbiAgICB1c2VyU2VsZWN0aW9ucy5leHBlcmllbmNlc1tleHBJZF0gPSBzYXZlZEV4cERlY3NbZXhwSWRdIHx8IGRlZmF1bHRBY3Rpb247XG4gIH1cblxuICBfcmVuZGVyRXhwZXJpZW5jZVRhYmxlKGNvbnRhaW5lciwgcmVjb21tZW5kZWRTZXQsIGRhdGEsIG5ld1JlY29tbWVuZGVkRXhwcyk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZW5kZXIgdGFibGUgSFRNTCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gX3JlbmRlckV4cGVyaWVuY2VUYWJsZShjb250YWluZXIsIHJlY29tbWVuZGVkU2V0LCBkYXRhLCBuZXdSZWNvbW1lbmRlZEV4cHMgPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCFjb250YWluZXIpIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlcmllbmNlLXRhYmxlLWNvbnRhaW5lcicpO1xuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICBpZiAoIXJlY29tbWVuZGVkU2V0KSByZWNvbW1lbmRlZFNldCA9IG5ldyBTZXQoKHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zPy5yZWNvbW1lbmRlZF9leHBlcmllbmNlcykgfHwgW10pO1xuICBpZiAoIWRhdGEpIGRhdGEgPSB3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucztcblxuICAvLyBEZXN0cm95IGFueSBleGlzdGluZyBEYXRhVGFibGUgYmVmb3JlIHJlYnVpbGRpbmdcbiAgaWYgKCQuZm4uRGF0YVRhYmxlLmlzRGF0YVRhYmxlKCcjZXhwZXJpZW5jZS1yZXZpZXctdGFibGUnKSkge1xuICAgICQoJyNleHBlcmllbmNlLXJldmlldy10YWJsZScpLkRhdGFUYWJsZSgpLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGNvbnN0IGV4cHMgPSB3aW5kb3cuX2V4cGVyaWVuY2VzT3JkZXJlZCB8fCBbXTtcbiAgbGV0IHRhYmxlSFRNTCA9IGBcbiAgICA8dGFibGUgaWQ9XCJleHBlcmllbmNlLXJldmlldy10YWJsZVwiIGNsYXNzPVwicmV2aWV3LXRhYmxlXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGg+RXhwZXJpZW5jZTwvdGg+XG4gICAgICAgICAgPHRoPkRhdGVzPC90aD5cbiAgICAgICAgICA8dGg+UmVjb21tZW5kYXRpb248L3RoPlxuICAgICAgICAgIDx0aD5Db25maWRlbmNlPC90aD5cbiAgICAgICAgICA8dGg+UmVhc29uaW5nPC90aD5cbiAgICAgICAgICA8dGg+WW91ciBTZWxlY3Rpb248L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgYDtcblxuICBleHBzLmZvckVhY2goKHsgaWQ6IGV4cElkLCBkZXRhaWxzIH0sIHJvd0lkeCkgPT4ge1xuICAgIGNvbnN0IHJlY29tbWVuZGF0aW9uICAgID0gZ2V0RXhwZXJpZW5jZVJlY29tbWVuZGF0aW9uKGV4cElkLCBkYXRhKTtcbiAgICBjb25zdCBjb25maWRlbmNlICAgICAgICA9IGdldENvbmZpZGVuY2VMZXZlbChleHBJZCwgZGF0YSk7XG4gICAgY29uc3QgcmVhc29uaW5nICAgICAgICAgPSBnZXRFeHBlcmllbmNlUmVhc29uaW5nKGV4cElkLCBkYXRhKTtcbiAgICBjb25zdCByZWNSZWNvcmQgICAgICAgICA9IF9maW5kRXhwZXJpZW5jZVJlY29tbWVuZGF0aW9uUmVjb3JkKGV4cElkLCBkYXRhKTtcbiAgICBjb25zdCBidWxsZXRPcmRlciAgICAgICA9IHJlY1JlY29yZCAmJiB0eXBlb2YgcmVjUmVjb3JkLmJ1bGxldF9vcmRlciA9PT0gJ29iamVjdCcgPyByZWNSZWNvcmQuYnVsbGV0X29yZGVyIDogbnVsbDtcbiAgICBjb25zdCBidWxsZXRPcmRlclN1bW1hcnkgPSBfZm9ybWF0U3VnZ2VzdGVkT3JkZXJTdW1tYXJ5KGJ1bGxldE9yZGVyPy5vcmRlcik7XG4gICAgY29uc3QgdGl0bGUgICAgICAgICAgICAgPSBkZXRhaWxzID8gZGV0YWlscy50aXRsZSAgIDogZXhwSWQ7XG4gICAgY29uc3QgY29tcGFueSAgICAgICAgICAgPSBkZXRhaWxzID8gZGV0YWlscy5jb21wYW55IDogJyc7XG4gICAgY29uc3Qgc3RhcnREYXRlICAgICAgICAgPSBkZXRhaWxzPy5zdGFydF9kYXRlIHx8ICcnO1xuICAgIGNvbnN0IGVuZERhdGUgICAgICAgICAgID0gZGV0YWlscz8uZW5kX2RhdGUgICB8fCAncHJlc2VudCc7XG4gICAgY29uc3QgZHVyYXRpb24gICAgICAgICAgPSBzdGFydERhdGUgPyBgJHtzdGFydERhdGV9IC0gJHtlbmREYXRlfWAgOiAoZGV0YWlscz8uZHVyYXRpb24gfHwgJycpO1xuICAgIGNvbnN0IGRlZmF1bHRBY3Rpb24gICAgID0gdXNlclNlbGVjdGlvbnMuZXhwZXJpZW5jZXNbZXhwSWRdIHx8ICdpbmNsdWRlJztcbiAgICBjb25zdCByZWNvbW1lbmRhdGlvblRleHQgPSByZWNvbW1lbmRhdGlvbiB8fCAnSW5jbHVkZSc7XG4gICAgY29uc3QgY29uZmlkZW5jZUJhZGdlICAgPSBgPHNwYW4gY2xhc3M9XCJjb25maWRlbmNlLWJhZGdlIGNvbmZpZGVuY2UtJHtjb25maWRlbmNlLmxldmVsfVwiPiR7Y29uZmlkZW5jZS50ZXh0fTwvc3Bhbj5gO1xuICAgIGNvbnN0IHJlYXNvbmluZ1NlZ21lbnRzID0gW3JlYXNvbmluZyB8fCAnVGhpcyBleHBlcmllbmNlIHdhcyBzZWxlY3RlZCBiYXNlZCBvbiBpdHMgcmVsZXZhbmNlIHRvIHRoZSBwb3NpdGlvbiByZXF1aXJlbWVudHMuJ107XG4gICAgaWYgKGJ1bGxldE9yZGVyU3VtbWFyeSkgcmVhc29uaW5nU2VnbWVudHMucHVzaChgU3VnZ2VzdGVkIGJ1bGxldCBvcmRlcjogJHtidWxsZXRPcmRlclN1bW1hcnl9LmApO1xuICAgIGlmIChidWxsZXRPcmRlcj8ucmVhc29uaW5nKSByZWFzb25pbmdTZWdtZW50cy5wdXNoKFN0cmluZyhidWxsZXRPcmRlci5yZWFzb25pbmcpKTtcbiAgICBpZiAoYnVsbGV0T3JkZXI/LmF0c19pbXBhY3QpIHJlYXNvbmluZ1NlZ21lbnRzLnB1c2goYEFUUyBpbXBhY3Q6ICR7YnVsbGV0T3JkZXIuYXRzX2ltcGFjdH1gKTtcbiAgICBpZiAoYnVsbGV0T3JkZXI/LnBhZ2VfbGVuZ3RoX2ltcGFjdCkgcmVhc29uaW5nU2VnbWVudHMucHVzaChgUGFnZSBsZW5ndGggaW1wYWN0OiAke2J1bGxldE9yZGVyLnBhZ2VfbGVuZ3RoX2ltcGFjdH1gKTtcbiAgICBjb25zdCByZWFzb25pbmdUZXh0ICAgICA9IHJlYXNvbmluZ1NlZ21lbnRzLmpvaW4oJyAnKTtcbiAgICBjb25zdCBpc0ZpcnN0ICAgICAgICAgICA9IHJvd0lkeCA9PT0gMDtcbiAgICBjb25zdCBpc0xhc3QgICAgICAgICAgICA9IHJvd0lkeCA9PT0gZXhwcy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IHRpdGxlRXNjICAgICAgICAgID0gZXNjYXBlSHRtbCh0aXRsZSk7XG4gICAgY29uc3QgcmVydW5OZXdCYWRnZSA9IG5ld1JlY29tbWVuZGVkRXhwcy5oYXMoZXhwSWQpXG4gICAgICA/ICc8c3BhbiBjbGFzcz1cInJ3LWNoYW5nZS1iYWRnZSBydy1jaGFuZ2UtbmV3XCIgYXJpYS1sYWJlbD1cIk5ldyByZWNvbW1lbmRhdGlvbiBzaW5jZSBwcmV2aW91cyBydW5cIj5cdUQ4M0NcdUREOTUgTmV3PC9zcGFuPidcbiAgICAgIDogJyc7XG5cbiAgICB0YWJsZUhUTUwgKz0gYFxuICAgICAgPHRyIGRhdGEtZXhwLWlkPVwiJHtleHBJZH1cIiBkYXRhLXN0YXJ0LWRhdGU9XCIke3N0YXJ0RGF0ZX1cIj5cbiAgICAgICAgPHRkPlxuICAgICAgICAgIDxzdHJvbmc+JHt0aXRsZUVzY308L3N0cm9uZz4ke3JlcnVuTmV3QmFkZ2V9PGJyPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtcIj4ke2VzY2FwZUh0bWwoY29tcGFueSl9PC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJ3aGl0ZS1zcGFjZTpub3dyYXA7XCI+JHtlc2NhcGVIdG1sKGR1cmF0aW9uKX08L3RkPlxuICAgICAgICA8dGQ+PHN0cm9uZz4ke2VzY2FwZUh0bWwocmVjb21tZW5kYXRpb25UZXh0KX08L3N0cm9uZz48L3RkPlxuICAgICAgICA8dGQ+JHtjb25maWRlbmNlQmFkZ2V9PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwibWF4LXdpZHRoOjMwMHB4O1wiPjxzbWFsbD4ke2VzY2FwZUh0bWwocmVhc29uaW5nVGV4dCl9PC9zbWFsbD48L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb24tYnRuc1wiIHN0eWxlPVwid2hpdGUtc3BhY2U6bm93cmFwO1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2RlZmF1bHRBY3Rpb24gPT09ICdlbXBoYXNpemUnICAgID8gJ2FjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImVtcGhhc2l6ZVwiICAgIGFyaWEtbGFiZWw9XCJFbXBoYXNpemUgJHt0aXRsZUVzY31cIiAgICAgICBhcmlhLXByZXNzZWQ9XCIke2RlZmF1bHRBY3Rpb24gPT09ICdlbXBoYXNpemUnfVwiICAgIHRpdGxlPVwiRW1waGFzaXplIFx1MjAxNCBmZWF0dXJlIHByb21pbmVudGx5XCIgc3R5bGU9XCJjb2xvcjojMTBiOTgxO1wiPlx1Mjc5NTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2RlZmF1bHRBY3Rpb24gPT09ICdpbmNsdWRlJyAgICAgID8gJ2FjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImluY2x1ZGVcIiAgICAgIGFyaWEtbGFiZWw9XCJJbmNsdWRlICR7dGl0bGVFc2N9XCIgICAgICAgICBhcmlhLXByZXNzZWQ9XCIke2RlZmF1bHRBY3Rpb24gPT09ICdpbmNsdWRlJ31cIiAgICAgIHRpdGxlPVwiSW5jbHVkZSBcdTIwMTQgc3RhbmRhcmQgdHJlYXRtZW50XCI+XHUyNzEzPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2RlLWVtcGhhc2l6ZScgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiZGUtZW1waGFzaXplXCIgYXJpYS1sYWJlbD1cIkRlLWVtcGhhc2l6ZSAke3RpdGxlRXNjfVwiICAgIGFyaWEtcHJlc3NlZD1cIiR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2RlLWVtcGhhc2l6ZSd9XCIgdGl0bGU9XCJEZS1lbXBoYXNpemUgXHUyMDE0IGJyaWVmIG1lbnRpb25cIiAgICBzdHlsZT1cImNvbG9yOiNmNTllMGI7XCI+XHUyNzk2PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2V4Y2x1ZGUnICAgICAgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiZXhjbHVkZVwiICAgICAgYXJpYS1sYWJlbD1cIkV4Y2x1ZGUgJHt0aXRsZUVzY31cIiAgICAgICAgIGFyaWEtcHJlc3NlZD1cIiR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2V4Y2x1ZGUnfVwiICAgICAgdGl0bGU9XCJFeGNsdWRlIFx1MjAxNCBvbWl0IGZyb20gQ1ZcIiAgICAgICAgICBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7XCI+JHtleWVTbGFzaEljb24oKX08L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBkYXRhLWFjdGlvbj1cInJlb3JkZXJcIiBhcmlhLWxhYmVsPVwiUmVvcmRlciBidWxsZXRzIGZvciAke3RpdGxlRXNjfVwiIHRpdGxlPVwiJHtidWxsZXRPcmRlclN1bW1hcnkgPyBgUmVvcmRlciBidWxsZXQgcG9pbnRzIChBSSBzdWdnZXN0ZWQgb3JkZXIgJHtidWxsZXRPcmRlclN1bW1hcnl9KWAgOiAnUmVvcmRlciBidWxsZXQgcG9pbnRzJ31cIiBzdHlsZT1cImNvbG9yOiM2MzY2ZjE7XCI+XHUyMTk1PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgZGF0YS1hY3Rpb249XCJyb3ctdXBcIiAgIGFyaWEtbGFiZWw9XCJNb3ZlICR7dGl0bGVFc2N9IGVhcmxpZXIgaW4gQ1ZcIiB0aXRsZT1cIk1vdmUgdXAgaW4gQ1ZcIiAgICR7aXNGaXJzdCA/ICdkaXNhYmxlZCcgOiAnJ30+XHUyMTkxPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgZGF0YS1hY3Rpb249XCJyb3ctZG93blwiIGFyaWEtbGFiZWw9XCJNb3ZlICR7dGl0bGVFc2N9IGxhdGVyIGluIENWXCIgICB0aXRsZT1cIk1vdmUgZG93biBpbiBDVlwiICR7aXNMYXN0ICA/ICdkaXNhYmxlZCcgOiAnJ30+XHUyMTkzPC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIGA7XG4gIH0pO1xuXG4gIHRhYmxlSFRNTCArPSAnPC90Ym9keT48L3RhYmxlPic7XG4gIGNvbnRhaW5lci5pbm5lckhUTUwgPSB0YWJsZUhUTUw7XG5cbiAgLy8gRGVsZWdhdGVkIGNsaWNrIGhhbmRsZXJcbiAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNleHBlcmllbmNlLXJldmlldy10YWJsZSB0Ym9keScpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xuICAgIGNvbnN0IGJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5pY29uLWJ0bicpO1xuICAgIGlmICghYnRuKSByZXR1cm47XG4gICAgY29uc3QgdHIgPSBidG4uY2xvc2VzdCgndHJbZGF0YS1leHAtaWRdJyk7XG4gICAgaWYgKCF0cikgcmV0dXJuO1xuICAgIGNvbnN0IGV4cElkICA9IHRyLmRhdGFzZXQuZXhwSWQ7XG4gICAgY29uc3QgYWN0aW9uID0gYnRuLmRhdGFzZXQuYWN0aW9uO1xuICAgIGlmIChhY3Rpb24gPT09ICdyZW9yZGVyJykge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IHRpdGxlRWwgPSB0ci5xdWVyeVNlbGVjdG9yKCdzdHJvbmcnKTtcbiAgICAgIHNob3dCdWxsZXRSZW9yZGVyKGV4cElkLCB0aXRsZUVsID8gdGl0bGVFbC50ZXh0Q29udGVudCA6ICcnKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3Jvdy11cCcpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBtb3ZlRXhwZXJpZW5jZVJvdyhleHBJZCwgLTEpO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAncm93LWRvd24nKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgbW92ZUV4cGVyaWVuY2VSb3coZXhwSWQsICsxKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbikge1xuICAgICAgaGFuZGxlQWN0aW9uQ2xpY2soZXhwSWQsIGFjdGlvbiwgJ2V4cGVyaWVuY2UnKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEJ1bGsgdG9vbGJhclxuICBjb25zdCBleHBUb29sYmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGV4cFRvb2xiYXIuY2xhc3NOYW1lID0gJ2J1bGstdG9vbGJhcic7XG4gIGV4cFRvb2xiYXIuaW5uZXJIVE1MID0gYFxuICAgIDxzcGFuPkJ1bGs6PC9zcGFuPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLXJlY29tbWVuZGVkXCIgb25jbGljaz1cImJ1bGtBY3Rpb24oJ3JlY29tbWVuZGVkJywnZXhwZXJpZW5jZScpXCIgdGl0bGU9XCJTZXQgYWxsIHRvIHRoZSBMTE0gcmVjb21tZW5kYXRpb25cIj5cdTI3MjggQWNjZXB0IEFsbCBSZWNvbW1lbmRlZDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLWVtcGhhc2l6ZVwiICAgb25jbGljaz1cImJ1bGtBY3Rpb24oJ2VtcGhhc2l6ZScsJ2V4cGVyaWVuY2UnKVwiPlx1Mjc5NSBFbXBoYXNpemUgQWxsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ1bGstYnRuIGJ1bGstaW5jbHVkZVwiICAgICBvbmNsaWNrPVwiYnVsa0FjdGlvbignaW5jbHVkZScsJ2V4cGVyaWVuY2UnKVwiPlx1MjcxMyBJbmNsdWRlIEFsbDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLWV4Y2x1ZGVcIiAgICAgb25jbGljaz1cImJ1bGtBY3Rpb24oJ2V4Y2x1ZGUnLCdleHBlcmllbmNlJylcIj4ke2V5ZVNsYXNoSWNvbigpfSBFeGNsdWRlIEFsbDwvYnV0dG9uPlxuICBgO1xuICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKGV4cFRvb2xiYXIsIGNvbnRhaW5lci5maXJzdENoaWxkKTtcblxuICAvLyBJbml0aWFsaXplIERhdGFUYWJsZSB3aXRoIG5vIGF1dG8tc29ydCAocm93cyBzdGF5IGluIHVzZXItc3BlY2lmaWVkIG9yZGVyKVxuICAkKCcjZXhwZXJpZW5jZS1yZXZpZXctdGFibGUnKS5EYXRhVGFibGUoe1xuICAgIHBhZ2luZzogZmFsc2UsXG4gICAgb3JkZXI6IFtdLFxuICAgIGxhbmd1YWdlOiB7IHNlYXJjaDogJ0ZpbHRlciBleHBlcmllbmNlczonIH1cbiAgfSk7XG4gIF91cGRhdGVQYWdlRXN0aW1hdGUoKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFJvdyByZW9yZGVyIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBtb3ZlRXhwZXJpZW5jZVJvdyhleHBJZCwgZGlyZWN0aW9uKSB7XG4gIGNvbnN0IGFyciA9IHdpbmRvdy5fZXhwZXJpZW5jZXNPcmRlcmVkO1xuICBpZiAoIWFycikgcmV0dXJuO1xuICBjb25zdCBpZHggPSBhcnIuZmluZEluZGV4KGUgPT4gZS5pZCA9PT0gZXhwSWQpO1xuICBpZiAoaWR4IDwgMCkgcmV0dXJuO1xuICBjb25zdCBuZXdJZHggPSBpZHggKyBkaXJlY3Rpb247XG4gIGlmIChuZXdJZHggPCAwIHx8IG5ld0lkeCA+PSBhcnIubGVuZ3RoKSByZXR1cm47XG4gIFthcnJbaWR4XSwgYXJyW25ld0lkeF1dID0gW2FycltuZXdJZHhdLCBhcnJbaWR4XV07XG4gIHdpbmRvdy5fZXhwZXJpZW5jZXNPcmRlcmVkID0gYXJyO1xuICBfcmVuZGVyRXhwZXJpZW5jZVRhYmxlKG51bGwsIG51bGwsIG51bGwpO1xuICAvLyBQZXJzaXN0IHRoZSBuZXcgb3JkZXIgdG8gdGhlIGJhY2tlbmQgKGZpcmUtYW5kLWZvcmdldDsgbm8gVUkgYmxvY2spXG4gIGZldGNoKCcvYXBpL3Jlb3JkZXItcm93cycsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdleHBlcmllbmNlJywgb3JkZXJlZF9pZHM6IGFyci5tYXAoZSA9PiBlLmlkKSB9KVxuICB9KS5jYXRjaCgoKSA9PiB7fSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBMZWdhY3kgaW50ZXJhY3RpdmUtbW9kZSByZXNwb25zZSBoYW5kbGVyIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVFeHBlcmllbmNlUmVzcG9uc2UobWVzc2FnZSkge1xuICB3aW5kb3cud2FpdGluZ0ZvckV4cGVyaWVuY2VSZXNwb25zZSA9IGZhbHNlO1xuICBjb25zdCByZXNwb25zZSA9IG1lc3NhZ2UudG9Mb3dlckNhc2UoKTtcblxuICBpZiAocmVzcG9uc2UuaW5jbHVkZXMoJ3llcycpKSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ0dyZWF0ISBJXFwnbGwgaW5jbHVkZSB0aGlzIGV4cGVyaWVuY2UgcHJvbWluZW50bHkuJyk7XG4gIH0gZWxzZSBpZiAocmVzcG9uc2UuaW5jbHVkZXMoJ25vJykpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnVW5kZXJzdG9vZC4gSVxcJ2xsIGV4Y2x1ZGUgdGhpcyBleHBlcmllbmNlIGZyb20gdGhlIGZpbmFsIENWLicpO1xuICB9IGVsc2UgaWYgKHJlc3BvbnNlLmluY2x1ZGVzKCdtYXliZScpKSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ0lcXCdsbCBpbmNsdWRlIGl0IGJ1dCB3aXRoIGxlc3MgZW1waGFzaXMuJyk7XG4gIH0gZWxzZSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ0lcXCdsbCBub3RlIHlvdXIgZmVlZGJhY2sgb24gdGhpcyBleHBlcmllbmNlLicpO1xuICB9XG5cbiAgLy8gTW92ZSB0byBuZXh0IGV4cGVyaWVuY2UgKGN1cnJlbnRJbmRleCBhbHJlYWR5IGluY3JlbWVudGVkIGluIHNob3dOZXh0RXhwZXJpZW5jZSlcbiAgc2V0VGltZW91dCgoKSA9PiBzaG93TmV4dEV4cGVyaWVuY2UoKSwgODAwKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFN1Ym1pdCBkZWNpc2lvbnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdEV4cGVyaWVuY2VEZWNpc2lvbnMoKSB7XG4gIC8qIGR1Y2tmbG93OlxuICAgKiAgIGlkOiBleHBlcmllbmNlX3VpX3N1Ym1pdF9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTAzLTI1VDIxOjM5OjQ4WidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6ZXhwZXJpZW5jZS1yZXZpZXcuc3VibWl0XG4gICAqICAgY2FsbHM6XG4gICAqICAgLSBQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9uc1xuICAgKiAgIC0gUE9TVCAvYXBpL2N2L2xheW91dC1lc3RpbWF0ZVxuICAgKiAgIHJlYWRzOlxuICAgKiAgIC0gd2luZG93OnVzZXJTZWxlY3Rpb25zLmV4cGVyaWVuY2VzXG4gICAqICAgd3JpdGVzOlxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9ucy5kZWNpc2lvbnNcbiAgICogICAtIHdpbmRvdzpfc2F2ZWREZWNpc2lvbnMuZXhwZXJpZW5jZV9kZWNpc2lvbnNcbiAgICogICBub3RlczogUGVyc2lzdHMgcGVyLWV4cGVyaWVuY2UgaW5jbHVzaW9uIGRlY2lzaW9ucyBhbmQgdHJpZ2dlcnMgZG93bnN0cmVhbSBBVFMvbGF5b3V0IHJlZnJlc2hlcyB0aGF0IGRlcGVuZCBvbiB0aGUgc2FtZSByZXZpZXcgY2hvaWNlcy5cbiAgICovXG4gIGNvbnN0IGRlY2lzaW9ucyA9IHVzZXJTZWxlY3Rpb25zLmV4cGVyaWVuY2VzO1xuICBjb25zdCBjb3VudCA9IE9iamVjdC5rZXlzKGRlY2lzaW9ucykubGVuZ3RoO1xuXG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIHNob3dBbGVydE1vZGFsKCdObyBTZWxlY3Rpb25zJywgJ1BsZWFzZSBzZWxlY3QgYWN0aW9ucyBmb3IgYXQgbGVhc3Qgb25lIGV4cGVyaWVuY2UgYmVmb3JlIHN1Ym1pdHRpbmcuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL3Jldmlldy1kZWNpc2lvbnMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB0eXBlOiAnZXhwZXJpZW5jZXMnLFxuICAgICAgICBkZWNpc2lvbnM6IGRlY2lzaW9uc1xuICAgICAgfSlcbiAgICB9KTtcblxuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgc3RhdGVNYW5hZ2VyLm1hcmtDb250ZW50Q2hhbmdlZCgpO1xuICAgICAgc2hvd1RvYXN0KGBFeHBlcmllbmNlIGRlY2lzaW9ucyBzYXZlZCAoJHtjb3VudH0gaXRlbXMpYCk7XG4gICAgICBzY2hlZHVsZUF0c1JlZnJlc2goKTtcbiAgICAgIC8vIFBlcnNpc3Qgc2F2ZWQgZGVjaXNpb25zIGxvY2FsbHkgc28gdGhlIFVJIHJlZmxlY3RzIHRoZW0gaW1tZWRpYXRlbHlcbiAgICAgIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMgPSB3aW5kb3cuX3NhdmVkRGVjaXNpb25zIHx8IHt9O1xuICAgICAgd2luZG93Ll9zYXZlZERlY2lzaW9ucy5leHBlcmllbmNlX2RlY2lzaW9ucyA9IGRlY2lzaW9ucztcbiAgICAgIHVzZXJTZWxlY3Rpb25zLmV4cGVyaWVuY2VzID0geyAuLi5kZWNpc2lvbnMgfTtcbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlSW5jbHVzaW9uQ291bnRzID09PSAnZnVuY3Rpb24nKSB1cGRhdGVJbmNsdXNpb25Db3VudHMoKTtcbiAgICAgIHN3aXRjaFRhYignYWNoLWVkaXRvcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIHNob3dUb2FzdChgRXJyb3I6ICR7ZXJyb3IuZXJyb3IgfHwgJ0ZhaWxlZCB0byBzYXZlIGRlY2lzaW9ucyd9YCwgJ2Vycm9yJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcignRXJyb3Igc3VibWl0dGluZyBleHBlcmllbmNlIGRlY2lzaW9uczonLCBlcnJvcik7XG4gICAgc2hvd1RvYXN0KCdGYWlsZWQgdG8gc2F2ZSBkZWNpc2lvbnMuIFBsZWFzZSB0cnkgYWdhaW4uJywgJ2Vycm9yJyk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB7XG4gIGdldEV4cGVyaWVuY2VEZXRhaWxzLFxuICBidWlsZEV4cGVyaWVuY2VSZXZpZXdUYWJsZSxcbiAgX3JlbmRlckV4cGVyaWVuY2VUYWJsZSxcbiAgbW92ZUV4cGVyaWVuY2VSb3csXG4gIGhhbmRsZUV4cGVyaWVuY2VSZXNwb25zZSxcbiAgc3VibWl0RXhwZXJpZW5jZURlY2lzaW9ucyxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9za2lsbHMtcmV2aWV3LmpzXG4gKiBTa2lsbHMtcmV2aWV3IHRhYmxlOiBmZXRjaCwgcmVuZGVyLCByb3ctcmVvcmRlciwgYW5kIHN1Ym1pdCBkZWNpc2lvbnMuXG4gKlxuICogRGVwZW5kZW5jaWVzIChyZXNvbHZlZCB0aHJvdWdoIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIHVzZXJTZWxlY3Rpb25zLCBwZW5kaW5nUmVjb21tZW5kYXRpb25zLCBfc2F2ZWREZWNpc2lvbnMsIF9za2lsbHNPcmRlcmVkLFxuICogICBfbmV3U2tpbGxzRnJvbUxMTSwgdGFiRGF0YSwgcGFyc2VTdGF0dXNSZXNwb25zZSxcbiAqICAgZ2V0U2tpbGxSZWNvbW1lbmRhdGlvbiwgZ2V0U2tpbGxDb25maWRlbmNlLCBnZXRTa2lsbFJlYXNvbmluZyxcbiAqICAgZXNjYXBlSHRtbCwgaGFuZGxlQWN0aW9uQ2xpY2ssIGJ1bGtBY3Rpb24sIF91cGRhdGVQYWdlRXN0aW1hdGUsXG4gKiAgIHVwZGF0ZUluY2x1c2lvbkNvdW50cywgc3dpdGNoVGFiLFxuICogICBzaG93QWxlcnRNb2RhbCwgc2hvd1RvYXN0LCBzY2hlZHVsZUF0c1JlZnJlc2gsXG4gKiAgICQsICQuZm4uRGF0YVRhYmxlIChqUXVlcnkgKyBEYXRhVGFibGVzKVxuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcignc2tpbGxzLXJldmlldycpO1xuXG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgZXllU2xhc2hJY29uIH0gZnJvbSAnLi9yZXZpZXctaWNvbnMuanMnO1xuXG4vLyBcdTI1MDBcdTI1MDAgWWVhcnMtZnJvbS1leHBlcmllbmNlIGhlbHBlcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIF9wYXJzZVllYXJGcm9tU3RyKHN0cikge1xuICBpZiAoIXN0cikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHMgPSBTdHJpbmcoc3RyKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgaWYgKFsnY3VycmVudCcsICdwcmVzZW50JywgJ25vdycsICdvbmdvaW5nJ10uaW5jbHVkZXMocykpIHJldHVybiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IG0gPSBzLm1hdGNoKC9cXGIoMTl8MjApXFxkezJ9XFxiLyk7XG4gIHJldHVybiBtID8gcGFyc2VJbnQobVswXSwgMTApIDogbnVsbDtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGxpc3Qgb2YgZXhwZXJpZW5jZSBJRHMgYW5kIHRoZSBmdWxsIGV4cGVyaWVuY2VzIGFycmF5LCByZXR1cm5cbiAqIHRoZSB0b3RhbCB5ZWFycyBvZiBleHBlcmllbmNlIChzdW0gb2YgZHVyYXRpb24gb2YgbWF0Y2hlZCBlbnRyaWVzKS5cbiAqIFJldHVybnMgbnVsbCBpZiBubyBtYXRjaGluZyBlbnRyaWVzIGZvdW5kLlxuICovXG5mdW5jdGlvbiBfY29tcHV0ZVllYXJzRnJvbUlkcyhpZHMsIGFsbEV4cGVyaWVuY2VzKSB7XG4gIGNvbnN0IGlkU2V0ID0gbmV3IFNldCgoaWRzIHx8IFtdKS5tYXAoeCA9PiBTdHJpbmcoeCkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikpO1xuICBpZiAoaWRTZXQuc2l6ZSA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIGxldCB0b3RhbCA9IDA7XG4gIGNvbnN0IGN1cnJlbnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICBmb3IgKGNvbnN0IGV4cCBvZiAoYWxsRXhwZXJpZW5jZXMgfHwgW10pKSB7XG4gICAgaWYgKCFleHAgfHwgdHlwZW9mIGV4cCAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGV4cElkID0gU3RyaW5nKGV4cC5pZCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghaWRTZXQuaGFzKGV4cElkKSkgY29udGludWU7XG4gICAgY29uc3Qgc3RhcnRZZWFyID0gX3BhcnNlWWVhckZyb21TdHIoZXhwLnN0YXJ0X2RhdGUgfHwgZXhwLnN0YXJ0KTtcbiAgICBjb25zdCBlbmRZZWFyICAgPSBfcGFyc2VZZWFyRnJvbVN0cihleHAuZW5kX2RhdGUgICB8fCBleHAuZW5kKSA/PyBjdXJyZW50WWVhcjtcbiAgICB0b3RhbCArPSBzdGFydFllYXIgPT0gbnVsbCA/IDEgOiBNYXRoLm1heCgxLCBlbmRZZWFyIC0gc3RhcnRZZWFyICsgMSk7XG4gIH1cbiAgcmV0dXJuIHRvdGFsID4gMCA/IHRvdGFsIDogbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZVNraWxsR3JvdXBPdmVycmlkZShza2lsbE5hbWUsIGdyb3VwTmFtZSkge1xuICBjb25zdCBub3JtYWxpemVkR3JvdXAgPSBncm91cE5hbWUgPT0gbnVsbCA/IG51bGwgOiBTdHJpbmcoZ3JvdXBOYW1lKS50cmltKCkgfHwgbnVsbDtcbiAgY29uc3Qgc2sgPSAod2luZG93Ll9za2lsbHNPcmRlcmVkIHx8IFtdKS5maW5kKHMgPT4gKHR5cGVvZiBzID09PSAnc3RyaW5nJyA/IHMgOiBzLm5hbWUgfHwgcykgPT09IHNraWxsTmFtZSk7XG4gIGlmIChzayAmJiB0eXBlb2Ygc2sgPT09ICdvYmplY3QnKSBzay5ncm91cCA9IG5vcm1hbGl6ZWRHcm91cCB8fCAnJztcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL3Jldmlldy1za2lsbC1ncm91cCcsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHNraWxsOiBza2lsbE5hbWUsIGdyb3VwOiBub3JtYWxpemVkR3JvdXAgfSksXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IuZXJyb3IgfHwgJ0ZhaWxlZCB0byBzYXZlIHNraWxsIGdyb3VwJyk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVTa2lsbENhdGVnb3J5T3ZlcnJpZGUoc2tpbGxOYW1lLCBjYXRlZ29yeU5hbWUpIHtcbiAgY29uc3Qgbm9ybWFsaXplZENhdGVnb3J5ID0gY2F0ZWdvcnlOYW1lID09IG51bGwgPyBudWxsIDogU3RyaW5nKGNhdGVnb3J5TmFtZSkudHJpbSgpIHx8IG51bGw7XG4gIGNvbnN0IHNrID0gKHdpbmRvdy5fc2tpbGxzT3JkZXJlZCB8fCBbXSkuZmluZChzID0+ICh0eXBlb2YgcyA9PT0gJ3N0cmluZycgPyBzIDogcy5uYW1lIHx8IHMpID09PSBza2lsbE5hbWUpO1xuICBpZiAoc2sgJiYgdHlwZW9mIHNrID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChub3JtYWxpemVkQ2F0ZWdvcnkpIHNrLmNhdGVnb3J5ID0gbm9ybWFsaXplZENhdGVnb3J5O1xuICAgIGVsc2UgZGVsZXRlIHNrLmNhdGVnb3J5O1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXZpZXctc2tpbGwtY2F0ZWdvcnknLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBza2lsbDogc2tpbGxOYW1lLCBjYXRlZ29yeTogbm9ybWFsaXplZENhdGVnb3J5IH0pLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9yLmVycm9yIHx8ICdGYWlsZWQgdG8gc2F2ZSBza2lsbCBjYXRlZ29yeScpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZW5hbWVTa2lsbENhdGVnb3J5KG9sZENhdGVnb3J5LCBuZXdDYXRlZ29yeSkge1xuICBjb25zdCBub3JtYWxpemVkT2xkID0gU3RyaW5nKG9sZENhdGVnb3J5IHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWROZXcgPSBTdHJpbmcobmV3Q2F0ZWdvcnkgfHwgJycpLnRyaW0oKTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL3Jldmlldy1za2lsbC1jYXRlZ29yaWVzJywge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGFjdGlvbjogJ3JlbmFtZScsXG4gICAgICBvbGRfY2F0ZWdvcnk6IG5vcm1hbGl6ZWRPbGQsXG4gICAgICBuZXdfY2F0ZWdvcnk6IG5vcm1hbGl6ZWROZXcsXG4gICAgfSksXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IuZXJyb3IgfHwgJ0ZhaWxlZCB0byByZW5hbWUgc2tpbGwgY2F0ZWdvcnknKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZVNraWxsQ2F0ZWdvcnlPcmRlcihvcmRlcmVkQ2F0ZWdvcmllcykge1xuICBjb25zdCBub3JtYWxpemVkT3JkZXIgPSBBcnJheS5mcm9tKG5ldyBTZXQoXG4gICAgKG9yZGVyZWRDYXRlZ29yaWVzIHx8IFtdKVxuICAgICAgLm1hcChjYXRlZ29yeSA9PiBTdHJpbmcoY2F0ZWdvcnkgfHwgJycpLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbiksXG4gICkpO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvcmV2aWV3LXNraWxsLWNhdGVnb3JpZXMnLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgYWN0aW9uOiAncmVvcmRlcicsXG4gICAgICBvcmRlcmVkX2NhdGVnb3JpZXM6IG5vcm1hbGl6ZWRPcmRlcixcbiAgICB9KSxcbiAgfSk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgc2tpbGwgY2F0ZWdvcnkgb3JkZXInKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuZnVuY3Rpb24gX25vcm1hbGl6ZVNraWxsU3Vic2tpbGxzKHZhbHVlKSB7XG4gIGNvbnN0IHJhd1ZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBTdHJpbmcodmFsdWUgfHwgJycpLnNwbGl0KCcsJyk7XG4gIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoXG4gICAgcmF3VmFsdWVzXG4gICAgICAubWFwKGl0ZW0gPT4gU3RyaW5nKGl0ZW0gfHwgJycpLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbiksXG4gICkpO1xufVxuXG5mdW5jdGlvbiBfc2tpbGxOYW1lKHNraWxsKSB7XG4gIHJldHVybiB0eXBlb2Ygc2tpbGwgPT09ICdzdHJpbmcnID8gc2tpbGwgOiBTdHJpbmcoc2tpbGw/Lm5hbWUgfHwgc2tpbGwgfHwgJycpLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gX25vcm1hbGl6ZUV4dHJhU2tpbGxFbnRyeShyYXdTa2lsbCwgeyB1c2VyQ3JlYXRlZCA9IGZhbHNlIH0gPSB7fSkge1xuICBpZiAodHlwZW9mIHJhd1NraWxsID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IG5hbWUgPSByYXdTa2lsbC50cmltKCk7XG4gICAgcmV0dXJuIG5hbWUgPyB7IG5hbWUsIF9pc05ldzogdHJ1ZSB9IDogbnVsbDtcbiAgfVxuICBpZiAoIXJhd1NraWxsIHx8IHR5cGVvZiByYXdTa2lsbCAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IG5hbWUgPSBTdHJpbmcocmF3U2tpbGwubmFtZSB8fCAnJykudHJpbSgpO1xuICBpZiAoIW5hbWUpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgLi4ucmF3U2tpbGwsXG4gICAgbmFtZSxcbiAgICBfaXNOZXc6IHRydWUsXG4gIH07XG4gIGNvbnN0IHN1YnNraWxscyA9IF9ub3JtYWxpemVTa2lsbFN1YnNraWxscyhyYXdTa2lsbC5zdWJza2lsbHMgfHwgcmF3U2tpbGwuc3ViX3NraWxscyB8fCBbXSk7XG4gIGlmIChzdWJza2lsbHMubGVuZ3RoID4gMCkgbm9ybWFsaXplZC5zdWJza2lsbHMgPSBzdWJza2lsbHM7XG4gIGVsc2UgZGVsZXRlIG5vcm1hbGl6ZWQuc3Vic2tpbGxzO1xuXG4gIGlmICh1c2VyQ3JlYXRlZCB8fCByYXdTa2lsbC51c2VyX2NyZWF0ZWQgfHwgcmF3U2tpbGwuX2lzVXNlckNyZWF0ZWQpIHtcbiAgICBub3JtYWxpemVkLnVzZXJfY3JlYXRlZCA9IHRydWU7XG4gICAgbm9ybWFsaXplZC5faXNVc2VyQ3JlYXRlZCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gX3NraWxsSW5saW5lTGFiZWwoc2tpbGwpIHtcbiAgaWYgKCFza2lsbCB8fCB0eXBlb2Ygc2tpbGwgPT09ICdzdHJpbmcnKSByZXR1cm4gX3NraWxsTmFtZShza2lsbCk7XG4gIGNvbnN0IG5hbWUgPSBfc2tpbGxOYW1lKHNraWxsKTtcbiAgY29uc3QgcGFyZW50aGV0aWNhbCA9IFN0cmluZyhza2lsbC5wYXJlbnRoZXRpY2FsIHx8ICcnKS50cmltKCk7XG4gIGlmIChwYXJlbnRoZXRpY2FsKSByZXR1cm4gYCR7bmFtZX0gKCR7cGFyZW50aGV0aWNhbH0pYDtcblxuICBjb25zdCBxdWFsaWZpZXJQYXJ0cyA9IFtdO1xuICBjb25zdCBwcm9maWNpZW5jeSA9IFN0cmluZyhza2lsbC5wcm9maWNpZW5jeSB8fCAnJykudHJpbSgpO1xuICBpZiAocHJvZmljaWVuY3kpIHF1YWxpZmllclBhcnRzLnB1c2gocHJvZmljaWVuY3kuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9maWNpZW5jeS5zbGljZSgxKSk7XG4gIF9ub3JtYWxpemVTa2lsbFN1YnNraWxscyhza2lsbC5zdWJza2lsbHMgfHwgc2tpbGwuc3ViX3NraWxscyB8fCBbXSkuZm9yRWFjaChpdGVtID0+IHF1YWxpZmllclBhcnRzLnB1c2goaXRlbSkpO1xuICBpZiAocXVhbGlmaWVyUGFydHMubGVuZ3RoID4gMCkgcmV0dXJuIGAke25hbWV9ICgke3F1YWxpZmllclBhcnRzLmpvaW4oJywgJyl9KWA7XG4gIHJldHVybiBuYW1lO1xufVxuXG5mdW5jdGlvbiBfZmluZFNraWxsUmVjb21tZW5kYXRpb25SZWNvcmQoc2tpbGxOYW1lLCBkYXRhKSB7XG4gIGlmICghZGF0YSB8fCAhQXJyYXkuaXNBcnJheShkYXRhLnNraWxsX3JlY29tbWVuZGF0aW9ucykpIHJldHVybiBudWxsO1xuICByZXR1cm4gZGF0YS5za2lsbF9yZWNvbW1lbmRhdGlvbnMuZmluZCgocmVjKSA9PiB7XG4gICAgY29uc3QgcmVjTmFtZSA9IFN0cmluZyhyZWM/LnNraWxsIHx8IHJlYz8ubmFtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHJlY05hbWUgPT09IFN0cmluZyhza2lsbE5hbWUgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICB9KSB8fCBudWxsO1xufVxuXG5mdW5jdGlvbiBfYnVpbGRTa2lsbEdyb3VwaW5nU3VnZ2VzdGlvbihyZWMsIHNraWxsKSB7XG4gIGNvbnN0IGdyb3VwaW5nID0gcmVjICYmIHR5cGVvZiByZWMuZ3JvdXBpbmcgPT09ICdvYmplY3QnID8gcmVjLmdyb3VwaW5nIDogbnVsbDtcbiAgaWYgKCFncm91cGluZykgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY3VycmVudENhdGVnb3J5ID0gdHlwZW9mIHNraWxsID09PSAnb2JqZWN0JyA/IFN0cmluZyhza2lsbC5jYXRlZ29yeSB8fCAnJykudHJpbSgpIDogJyc7XG4gIGNvbnN0IGN1cnJlbnRHcm91cCA9IHR5cGVvZiBza2lsbCA9PT0gJ29iamVjdCcgPyBTdHJpbmcoc2tpbGwuZ3JvdXAgfHwgJycpLnRyaW0oKSA6ICcnO1xuICBjb25zdCBzdWdnZXN0ZWRDYXRlZ29yeSA9IFN0cmluZyhncm91cGluZy5jYXRlZ29yeSB8fCAnJykudHJpbSgpO1xuICBjb25zdCBzdWdnZXN0ZWRHcm91cCA9IFN0cmluZyhncm91cGluZy5ncm91cCB8fCAnJykudHJpbSgpO1xuICBjb25zdCBjYXRlZ29yeUNoYW5nZWQgPSBCb29sZWFuKHN1Z2dlc3RlZENhdGVnb3J5ICYmIHN1Z2dlc3RlZENhdGVnb3J5ICE9PSBjdXJyZW50Q2F0ZWdvcnkpO1xuICBjb25zdCBncm91cENoYW5nZWQgPSBCb29sZWFuKHN1Z2dlc3RlZEdyb3VwICYmIHN1Z2dlc3RlZEdyb3VwICE9PSBjdXJyZW50R3JvdXApO1xuXG4gIGlmICghY2F0ZWdvcnlDaGFuZ2VkICYmICFncm91cENoYW5nZWQpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGNoYW5nZVBhcnRzID0gW107XG4gIGlmIChjYXRlZ29yeUNoYW5nZWQpIHtcbiAgICBjaGFuZ2VQYXJ0cy5wdXNoKGBDYXRlZ29yeTogJHtjdXJyZW50Q2F0ZWdvcnkgfHwgJ1VuY2F0ZWdvcml6ZWQnfSAtPiAke3N1Z2dlc3RlZENhdGVnb3J5fWApO1xuICB9XG4gIGlmIChncm91cENoYW5nZWQpIHtcbiAgICBjaGFuZ2VQYXJ0cy5wdXNoKGBHcm91cDogJHtjdXJyZW50R3JvdXAgfHwgJ05vbmUnfSAtPiAke3N1Z2dlc3RlZEdyb3VwfWApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjYXRlZ29yeTogc3VnZ2VzdGVkQ2F0ZWdvcnksXG4gICAgZ3JvdXA6IHN1Z2dlc3RlZEdyb3VwLFxuICAgIGNhdGVnb3J5Q2hhbmdlZCxcbiAgICBncm91cENoYW5nZWQsXG4gICAgY2hhbmdlVGV4dDogY2hhbmdlUGFydHMuam9pbignIHwgJyksXG4gICAgcmVhc29uaW5nOiBTdHJpbmcoZ3JvdXBpbmcucmVhc29uaW5nIHx8ICcnKS50cmltKCksXG4gICAgYXRzSW1wYWN0OiBTdHJpbmcoZ3JvdXBpbmcuYXRzX2ltcGFjdCB8fCAnJykudHJpbSgpLFxuICAgIHBhZ2VMZW5ndGhJbXBhY3Q6IFN0cmluZyhncm91cGluZy5wYWdlX2xlbmd0aF9pbXBhY3QgfHwgJycpLnRyaW0oKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gX2Nzc0VzY2FwZSh2YWx1ZSkge1xuICBpZiAoZ2xvYmFsVGhpcy5DU1MgJiYgdHlwZW9mIGdsb2JhbFRoaXMuQ1NTLmVzY2FwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLkNTUy5lc2NhcGUoU3RyaW5nKHZhbHVlKSk7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSkucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyk7XG59XG5cbmZ1bmN0aW9uIF9idWlsZEdyb3VwV2FybmluZ3Moc2tpbGxzKSB7XG4gIGNvbnN0IHdhcm5pbmdNYXAgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXAoKTtcbiAgZm9yIChjb25zdCBza2lsbCBvZiBza2lsbHMgfHwgW10pIHtcbiAgICBpZiAoIXNraWxsIHx8IHR5cGVvZiBza2lsbCAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHNraWxsTmFtZSA9IF9za2lsbE5hbWUoc2tpbGwpO1xuICAgIGNvbnN0IGdyb3VwTmFtZSA9IFN0cmluZyhza2lsbC5ncm91cCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghc2tpbGxOYW1lIHx8ICFncm91cE5hbWUpIGNvbnRpbnVlO1xuICAgIGlmICghZ3JvdXBzLmhhcyhncm91cE5hbWUpKSBncm91cHMuc2V0KGdyb3VwTmFtZSwgW10pO1xuICAgIGdyb3Vwcy5nZXQoZ3JvdXBOYW1lKS5wdXNoKF9za2lsbElubGluZUxhYmVsKHNraWxsKSk7XG4gIH1cblxuICBncm91cHMuZm9yRWFjaCgobGFiZWxzLCBncm91cE5hbWUpID0+IHtcbiAgICBjb25zdCBwcmV2aWV3ID0gbGFiZWxzLmpvaW4oJywgJyk7XG4gICAgY29uc3QgY3Jvd2RlZCA9IHByZXZpZXcubGVuZ3RoID49IDkwIHx8IGxhYmVscy5sZW5ndGggPj0gNTtcbiAgICBpZiAoIWNyb3dkZWQpIHJldHVybjtcbiAgICB3YXJuaW5nTWFwLnNldChncm91cE5hbWUsIHtcbiAgICAgIHByZXZpZXcsXG4gICAgICBtZW1iZXJDb3VudDogbGFiZWxzLmxlbmd0aCxcbiAgICAgIG1lc3NhZ2U6IGBJbmxpbmUgYnVsbGV0IG1heSBiZSBoYXJkIHRvIHNjYW4gKCR7bGFiZWxzLmxlbmd0aH0gc2tpbGxzLCAke3ByZXZpZXcubGVuZ3RofSBjaGFycykuYCxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHdhcm5pbmdNYXA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVTa2lsbFF1YWxpZmllck92ZXJyaWRlKHNraWxsTmFtZSwgcXVhbGlmaWVycykge1xuICBjb25zdCBub3JtYWxpemVkU2tpbGwgPSBTdHJpbmcoc2tpbGxOYW1lIHx8ICcnKS50cmltKCk7XG4gIGlmICghbm9ybWFsaXplZFNraWxsKSB0aHJvdyBuZXcgRXJyb3IoJ1NraWxsIG5hbWUgaXMgcmVxdWlyZWQnKTtcblxuICBjb25zdCBub3JtYWxpemVkUHJvZmljaWVuY3kgPSBTdHJpbmcocXVhbGlmaWVycz8ucHJvZmljaWVuY3kgfHwgJycpLnRyaW0oKTtcbiAgY29uc3Qgbm9ybWFsaXplZFN1YnNraWxscyA9IF9ub3JtYWxpemVTa2lsbFN1YnNraWxscyhxdWFsaWZpZXJzPy5zdWJza2lsbHMpO1xuICBjb25zdCBub3JtYWxpemVkUGFyZW50aGV0aWNhbCA9IFN0cmluZyhxdWFsaWZpZXJzPy5wYXJlbnRoZXRpY2FsIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRTa2lsbFR5cGUgPSBTdHJpbmcocXVhbGlmaWVycz8uc2tpbGxfdHlwZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkgfHwgbnVsbDtcblxuICBjb25zdCBzayA9ICh3aW5kb3cuX3NraWxsc09yZGVyZWQgfHwgW10pLmZpbmQocyA9PiAodHlwZW9mIHMgPT09ICdzdHJpbmcnID8gcyA6IHMubmFtZSB8fCBzKSA9PT0gbm9ybWFsaXplZFNraWxsKTtcbiAgaWYgKHNrICYmIHR5cGVvZiBzayA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAobm9ybWFsaXplZFByb2ZpY2llbmN5KSBzay5wcm9maWNpZW5jeSA9IG5vcm1hbGl6ZWRQcm9maWNpZW5jeTtcbiAgICBlbHNlIGRlbGV0ZSBzay5wcm9maWNpZW5jeTtcblxuICAgIGlmIChub3JtYWxpemVkU3Vic2tpbGxzLmxlbmd0aCA+IDApIHNrLnN1YnNraWxscyA9IG5vcm1hbGl6ZWRTdWJza2lsbHM7XG4gICAgZWxzZSBkZWxldGUgc2suc3Vic2tpbGxzO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRQYXJlbnRoZXRpY2FsKSBzay5wYXJlbnRoZXRpY2FsID0gbm9ybWFsaXplZFBhcmVudGhldGljYWw7XG4gICAgZWxzZSBkZWxldGUgc2sucGFyZW50aGV0aWNhbDtcbiAgfVxuXG4gIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgc2tpbGw6IG5vcm1hbGl6ZWRTa2lsbCxcbiAgICBwcm9maWNpZW5jeTogbm9ybWFsaXplZFByb2ZpY2llbmN5LFxuICAgIHN1YnNraWxsczogbm9ybWFsaXplZFN1YnNraWxscyxcbiAgICBwYXJlbnRoZXRpY2FsOiBub3JtYWxpemVkUGFyZW50aGV0aWNhbCxcbiAgfTtcbiAgaWYgKCdza2lsbF90eXBlJyBpbiAocXVhbGlmaWVycyB8fCB7fSkpIHtcbiAgICBwYXlsb2FkLnNraWxsX3R5cGUgPSBub3JtYWxpemVkU2tpbGxUeXBlO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXZpZXctc2tpbGwtcXVhbGlmaWVycycsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcbiAgfSk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgc2tpbGwgcXVhbGlmaWVycycpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlVXNlckNyZWF0ZWRTa2lsbChza2lsbCkge1xuICBjb25zdCBwYXlsb2FkID0ge1xuICAgIG5hbWU6IFN0cmluZyhza2lsbD8ubmFtZSB8fCAnJykudHJpbSgpLFxuICAgIGNhdGVnb3J5OiBTdHJpbmcoc2tpbGw/LmNhdGVnb3J5IHx8ICcnKS50cmltKCksXG4gICAgZ3JvdXA6IFN0cmluZyhza2lsbD8uZ3JvdXAgfHwgJycpLnRyaW0oKSxcbiAgICBwcm9maWNpZW5jeTogU3RyaW5nKHNraWxsPy5wcm9maWNpZW5jeSB8fCAnJykudHJpbSgpLFxuICAgIHN1YnNraWxsczogX25vcm1hbGl6ZVNraWxsU3Vic2tpbGxzKHNraWxsPy5zdWJza2lsbHMpLFxuICAgIHBhcmVudGhldGljYWw6IFN0cmluZyhza2lsbD8ucGFyZW50aGV0aWNhbCB8fCAnJykudHJpbSgpLFxuICB9O1xuICBpZiAoIXBheWxvYWQubmFtZSkgdGhyb3cgbmV3IEVycm9yKCdTa2lsbCBuYW1lIGlzIHJlcXVpcmVkJyk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXZpZXctc2tpbGwtYWRkJywge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9yLmVycm9yIHx8ICdGYWlsZWQgdG8gYWRkIHNraWxsJyk7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBfbm9ybWFsaXplRXh0cmFTa2lsbEVudHJ5KHJlc3VsdC5za2lsbCwgeyB1c2VyQ3JlYXRlZDogdHJ1ZSB9KTtcbiAgaWYgKCFub3JtYWxpemVkKSB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBkaWQgbm90IHJldHVybiBhIHNraWxsJyk7XG5cbiAgY29uc3QgY3VycmVudCA9IEFycmF5LmlzQXJyYXkod2luZG93Ll9za2lsbHNPcmRlcmVkKSA/IHdpbmRvdy5fc2tpbGxzT3JkZXJlZCA6IFtdO1xuICB3aW5kb3cuX3NraWxsc09yZGVyZWQgPSBbbm9ybWFsaXplZCwgLi4uY3VycmVudC5maWx0ZXIoc2tpbGwgPT4gX3NraWxsTmFtZShza2lsbCkgIT09IG5vcm1hbGl6ZWQubmFtZSldO1xuXG4gIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMgPSB3aW5kb3cuX3NhdmVkRGVjaXNpb25zIHx8IHt9O1xuICBjb25zdCBleGlzdGluZ0V4dHJhcyA9IEFycmF5LmlzQXJyYXkod2luZG93Ll9zYXZlZERlY2lzaW9ucy5leHRyYV9za2lsbHMpXG4gICAgPyB3aW5kb3cuX3NhdmVkRGVjaXNpb25zLmV4dHJhX3NraWxsc1xuICAgIDogW107XG4gIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMuZXh0cmFfc2tpbGxzID0gW1xuICAgIG5vcm1hbGl6ZWQsXG4gICAgLi4uZXhpc3RpbmdFeHRyYXMuZmlsdGVyKHNraWxsID0+IF9za2lsbE5hbWUoc2tpbGwpICE9PSBub3JtYWxpemVkLm5hbWUpLFxuICBdO1xuXG4gIHVzZXJTZWxlY3Rpb25zLnNraWxsc1tub3JtYWxpemVkLm5hbWVdID0gdXNlclNlbGVjdGlvbnMuc2tpbGxzW25vcm1hbGl6ZWQubmFtZV0gfHwgJ2luY2x1ZGUnO1xuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gX2VmZmVjdGl2ZVNraWxsQ2F0ZWdvcnkoc2tpbGwpIHtcbiAgaWYgKCFza2lsbCB8fCB0eXBlb2Ygc2tpbGwgPT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG4gIHJldHVybiBTdHJpbmcoc2tpbGwuY2F0ZWdvcnkgfHwgJycpLnRyaW0oKSB8fCAnR2VuZXJhbCc7XG59XG5cbmZ1bmN0aW9uIF9zeW5jU2tpbGxDYXRlZ29yeU9yZGVyKCkge1xuICBjb25zdCBza2lsbHMgPSBBcnJheS5pc0FycmF5KHdpbmRvdy5fc2tpbGxzT3JkZXJlZCkgPyB3aW5kb3cuX3NraWxsc09yZGVyZWQgOiBbXTtcbiAgY29uc3Qgb3JkZXJlZCA9IFtdO1xuICBmb3IgKGNvbnN0IHNraWxsIG9mIHNraWxscykge1xuICAgIGNvbnN0IGNhdGVnb3J5ID0gX2VmZmVjdGl2ZVNraWxsQ2F0ZWdvcnkoc2tpbGwpO1xuICAgIGlmIChjYXRlZ29yeSAmJiAhb3JkZXJlZC5pbmNsdWRlcyhjYXRlZ29yeSkpIG9yZGVyZWQucHVzaChjYXRlZ29yeSk7XG4gIH1cbiAgd2luZG93Ll9za2lsbENhdGVnb3J5T3JkZXIgPSBvcmRlcmVkO1xuICByZXR1cm4gb3JkZXJlZDtcbn1cblxuZnVuY3Rpb24gX3JlbmFtZVNraWxsQ2F0ZWdvcnlMb2NhbGx5KG9sZENhdGVnb3J5LCBuZXdDYXRlZ29yeSkge1xuICBjb25zdCBub3JtYWxpemVkT2xkID0gU3RyaW5nKG9sZENhdGVnb3J5IHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWROZXcgPSBTdHJpbmcobmV3Q2F0ZWdvcnkgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFub3JtYWxpemVkT2xkIHx8ICFub3JtYWxpemVkTmV3KSByZXR1cm47XG5cbiAgZm9yIChjb25zdCBza2lsbCBvZiAod2luZG93Ll9za2lsbHNPcmRlcmVkIHx8IFtdKSkge1xuICAgIGlmICghc2tpbGwgfHwgdHlwZW9mIHNraWxsICE9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgaWYgKF9lZmZlY3RpdmVTa2lsbENhdGVnb3J5KHNraWxsKSA9PT0gbm9ybWFsaXplZE9sZCkge1xuICAgICAgc2tpbGwuY2F0ZWdvcnkgPSBub3JtYWxpemVkTmV3O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRPcmRlciA9IEFycmF5LmlzQXJyYXkod2luZG93Ll9za2lsbENhdGVnb3J5T3JkZXIpXG4gICAgPyB3aW5kb3cuX3NraWxsQ2F0ZWdvcnlPcmRlclxuICAgIDogX3N5bmNTa2lsbENhdGVnb3J5T3JkZXIoKTtcbiAgd2luZG93Ll9za2lsbENhdGVnb3J5T3JkZXIgPSBjdXJyZW50T3JkZXIubWFwKGNhdGVnb3J5ID0+IChcbiAgICBjYXRlZ29yeSA9PT0gbm9ybWFsaXplZE9sZCA/IG5vcm1hbGl6ZWROZXcgOiBjYXRlZ29yeVxuICApKS5maWx0ZXIoKGNhdGVnb3J5LCBpbmRleCwgYXJyKSA9PiBjYXRlZ29yeSAmJiBhcnIuaW5kZXhPZihjYXRlZ29yeSkgPT09IGluZGV4KTtcbn1cblxuZnVuY3Rpb24gX21vdmVTa2lsbENhdGVnb3J5TG9jYWxseShjYXRlZ29yeU5hbWUsIGRpcmVjdGlvbikge1xuICBjb25zdCBub3JtYWxpemVkQ2F0ZWdvcnkgPSBTdHJpbmcoY2F0ZWdvcnlOYW1lIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IG9yZGVyID0gQXJyYXkuaXNBcnJheSh3aW5kb3cuX3NraWxsQ2F0ZWdvcnlPcmRlcilcbiAgICA/IFsuLi53aW5kb3cuX3NraWxsQ2F0ZWdvcnlPcmRlcl1cbiAgICA6IF9zeW5jU2tpbGxDYXRlZ29yeU9yZGVyKCk7XG4gIGNvbnN0IGluZGV4ID0gb3JkZXIuaW5kZXhPZihub3JtYWxpemVkQ2F0ZWdvcnkpO1xuICBpZiAoaW5kZXggPCAwKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggKyBkaXJlY3Rpb247XG4gIGlmIChuZXh0SW5kZXggPCAwIHx8IG5leHRJbmRleCA+PSBvcmRlci5sZW5ndGgpIHJldHVybiBudWxsO1xuICBbb3JkZXJbaW5kZXhdLCBvcmRlcltuZXh0SW5kZXhdXSA9IFtvcmRlcltuZXh0SW5kZXhdLCBvcmRlcltpbmRleF1dO1xuICB3aW5kb3cuX3NraWxsQ2F0ZWdvcnlPcmRlciA9IG9yZGVyO1xuICByZXR1cm4gb3JkZXI7XG59XG5cbmZ1bmN0aW9uIF9idWlsZFNraWxsQ2F0ZWdvcnlNYW5hZ2VySHRtbCgpIHtcbiAgY29uc3QgY2F0ZWdvcmllcyA9IEFycmF5LmlzQXJyYXkod2luZG93Ll9za2lsbENhdGVnb3J5T3JkZXIpXG4gICAgPyB3aW5kb3cuX3NraWxsQ2F0ZWdvcnlPcmRlclxuICAgIDogX3N5bmNTa2lsbENhdGVnb3J5T3JkZXIoKTtcbiAgaWYgKGNhdGVnb3JpZXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG5cbiAgcmV0dXJuIGBcbiAgICA8ZGl2IGNsYXNzPVwic2tpbGwtY2F0ZWdvcnktbWFuYWdlclwiIHN0eWxlPVwibWFyZ2luOjAgMCAxMnB4O3BhZGRpbmc6MTJweDtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6I2Y4ZmFmYztcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo4cHg7XCI+Q2F0ZWdvcnkgTGF5b3V0PC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4O1wiPlxuICAgICAgICAke2NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSwgaW5kZXgpID0+IGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2tpbGwtY2F0ZWdvcnktbWFuYWdlci1yb3dcIiBkYXRhLWNhdGVnb3J5PVwiJHtlc2NhcGVIdG1sKGNhdGVnb3J5KX1cIiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2tpbGwtY2F0ZWdvcnktbWFuYWdlci1pbnB1dFwiXG4gICAgICAgICAgICAgIHZhbHVlPVwiJHtlc2NhcGVIdG1sKGNhdGVnb3J5KX1cIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVuYW1lIHNraWxsIGNhdGVnb3J5ICR7ZXNjYXBlSHRtbChjYXRlZ29yeSl9XCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJmbGV4OjE7bWluLXdpZHRoOjA7cGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGRhdGEtYWN0aW9uPVwiY2F0ZWdvcnktdXBcIiBkYXRhLWNhdGVnb3J5PVwiJHtlc2NhcGVIdG1sKGNhdGVnb3J5KX1cIiBhcmlhLWxhYmVsPVwiTW92ZSAke2VzY2FwZUh0bWwoY2F0ZWdvcnkpfSBjYXRlZ29yeSB1cFwiIHRpdGxlPVwiTW92ZSBjYXRlZ29yeSB1cFwiICR7aW5kZXggPT09IDAgPyAnZGlzYWJsZWQnIDogJyd9Plx1MjE5MTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgZGF0YS1hY3Rpb249XCJjYXRlZ29yeS1kb3duXCIgZGF0YS1jYXRlZ29yeT1cIiR7ZXNjYXBlSHRtbChjYXRlZ29yeSl9XCIgYXJpYS1sYWJlbD1cIk1vdmUgJHtlc2NhcGVIdG1sKGNhdGVnb3J5KX0gY2F0ZWdvcnkgZG93blwiIHRpdGxlPVwiTW92ZSBjYXRlZ29yeSBkb3duXCIgJHtpbmRleCA9PT0gY2F0ZWdvcmllcy5sZW5ndGggLSAxID8gJ2Rpc2FibGVkJyA6ICcnfT5cdTIxOTM8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgYCkuam9pbignJyl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFJlcnVuIHNuYXBzaG90IChjaGFuZ2UgYmFkZ2UgZm9yIHNraWxscykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5mdW5jdGlvbiBfc2tpbGxTbmFwc2hvdEtleSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzaWQgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgnc2Vzc2lvbicpO1xuICAgIHJldHVybiBzaWQgPyBgc2tpbGxfc25hcF8ke3NpZH1gIDogbnVsbDtcbiAgfSBjYXRjaCAoXykgeyByZXR1cm4gbnVsbDsgfVxufVxuZnVuY3Rpb24gX3NhdmVTa2lsbFNuYXBzaG90KHJlY29tbWVuZGVkTmFtZXMpIHtcbiAgY29uc3Qga2V5ID0gX3NraWxsU25hcHNob3RLZXkoKTtcbiAgaWYgKCFrZXkpIHJldHVybjtcbiAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShbLi4ucmVjb21tZW5kZWROYW1lc10pKTsgfSBjYXRjaCAoXykge31cbn1cbmZ1bmN0aW9uIF9nZXRTa2lsbFNuYXBzaG90KCkge1xuICBjb25zdCBrZXkgPSBfc2tpbGxTbmFwc2hvdEtleSgpO1xuICBpZiAoIWtleSkgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICByZXR1cm4gcmF3ID8gbmV3IFNldChKU09OLnBhcnNlKHJhdykpIDogbnVsbDtcbiAgfSBjYXRjaCAoXykgeyByZXR1cm4gbnVsbDsgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgQnVpbGQgcmV2aWV3IHRhYmxlIChmZXRjaCArIGluaXRpYWxpc2UpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBidWlsZFNraWxsc1Jldmlld1RhYmxlKCkge1xuICBjb25zdCBkYXRhID0gd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnM7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbHMtdGFibGUtY29udGFpbmVyJyk7XG5cbiAgLy8gQnVpbGQgc2tpbGwtdHlwZSBsb29rdXAgZnJvbSBqb2IgYW5hbHlzaXMgKGF2YWlsYWJsZSBpbiB0YWJEYXRhLmFuYWx5c2lzKVxuICBjb25zdCBqb2JBbmFseXNpcyA9IHN0YXRlTWFuYWdlci5nZXRUYWJEYXRhKCdhbmFseXNpcycpIHx8IHt9O1xuICBjb25zdCBoYXJkU2tpbGxTZXQgPSBuZXcgU2V0KChqb2JBbmFseXNpcy5yZXF1aXJlZF9za2lsbHMgICAgfHwgW10pLm1hcChzID0+IHMudG9Mb3dlckNhc2UoKSkpO1xuICBjb25zdCBzb2Z0U2tpbGxTZXQgPSBuZXcgU2V0KChqb2JBbmFseXNpcy5uaWNlX3RvX2hhdmVfc2tpbGxzIHx8IFtdKS5tYXAocyA9PiBzLnRvTG93ZXJDYXNlKCkpKTtcblxuICAvLyBHZXQgYWxsIHNraWxscyBmcm9tIHRoZSBBUEkgc3RhdHVzXG4gIGxldCBhbGxTa2lsbHMgPSBbXTtcbiAgbGV0IHBlcnNpc3RlZEV4dHJhU2tpbGxzID0gW107XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdHVzUmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvc3RhdHVzJyk7XG4gICAgY29uc3Qgc3RhdHVzRGF0YSA9IHBhcnNlU3RhdHVzUmVzcG9uc2UoYXdhaXQgc3RhdHVzUmVzLmpzb24oKSk7XG4gICAgYWxsU2tpbGxzID0gc3RhdHVzRGF0YS5hbGxfc2tpbGxzIHx8IFtdO1xuICAgIHBlcnNpc3RlZEV4dHJhU2tpbGxzID0gc3RhdHVzRGF0YS5leHRyYV9za2lsbHMgfHwgW107XG4gICAgd2luZG93Ll9hbGxFeHBlcmllbmNlcyA9IHN0YXR1c0RhdGEuYWxsX2V4cGVyaWVuY2VzIHx8IFtdO1xuICAgIGNvbnN0IHF1YWxPdmVycmlkZXMgPSBzdGF0dXNEYXRhLnNraWxsX3F1YWxpZmllcl9vdmVycmlkZXMgfHwge307XG4gICAgd2luZG93Ll9za2lsbFR5cGVPdmVycmlkZXMgPSB3aW5kb3cuX3NraWxsVHlwZU92ZXJyaWRlcyB8fCB7fTtcbiAgICBmb3IgKGNvbnN0IFtza2lsbE5hbWUsIG92ZXJyaWRlc10gb2YgT2JqZWN0LmVudHJpZXMocXVhbE92ZXJyaWRlcykpIHtcbiAgICAgIGlmIChvdmVycmlkZXMgJiYgb3ZlcnJpZGVzLnNraWxsX3R5cGUpIHtcbiAgICAgICAgd2luZG93Ll9za2lsbFR5cGVPdmVycmlkZXNbc2tpbGxOYW1lLnRvTG93ZXJDYXNlKCldID0gb3ZlcnJpZGVzLnNraWxsX3R5cGU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcignRXJyb3IgZmV0Y2hpbmcgYWxsIHNraWxsczonLCBlcnJvcik7XG4gICAgLy8gRmFsbGJhY2sgdG8ganVzdCByZWNvbW1lbmRlZCBza2lsbHNcbiAgICBhbGxTa2lsbHMgPSBkYXRhLnJlY29tbWVuZGVkX3NraWxscyB8fCBbXTtcbiAgICB3aW5kb3cuX2FsbEV4cGVyaWVuY2VzID0gW107XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkUGVyc2lzdGVkRXh0cmFTa2lsbHMgPSAocGVyc2lzdGVkRXh0cmFTa2lsbHMgfHwgW10pXG4gICAgLm1hcChza2lsbCA9PiBfbm9ybWFsaXplRXh0cmFTa2lsbEVudHJ5KHNraWxsLCB7XG4gICAgICB1c2VyQ3JlYXRlZDogdHlwZW9mIHNraWxsID09PSAnb2JqZWN0JyAmJiAhIXNraWxsPy51c2VyX2NyZWF0ZWQsXG4gICAgfSkpXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKG5vcm1hbGl6ZWRQZXJzaXN0ZWRFeHRyYVNraWxscy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbWVyZ2VkU2tpbGxzID0gW107XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKTtcbiAgICBub3JtYWxpemVkUGVyc2lzdGVkRXh0cmFTa2lsbHMuZm9yRWFjaChza2lsbCA9PiB7XG4gICAgICBpZiAoc2Vlbi5oYXMoc2tpbGwubmFtZSkpIHJldHVybjtcbiAgICAgIG1lcmdlZFNraWxscy5wdXNoKHNraWxsKTtcbiAgICAgIHNlZW4uYWRkKHNraWxsLm5hbWUpO1xuICAgIH0pO1xuICAgIGFsbFNraWxscy5mb3JFYWNoKHNraWxsID0+IHtcbiAgICAgIGNvbnN0IHNraWxsTmFtZSA9IF9za2lsbE5hbWUoc2tpbGwpO1xuICAgICAgaWYgKCFza2lsbE5hbWUgfHwgc2Vlbi5oYXMoc2tpbGxOYW1lKSkgcmV0dXJuO1xuICAgICAgbWVyZ2VkU2tpbGxzLnB1c2goc2tpbGwpO1xuICAgICAgc2Vlbi5hZGQoc2tpbGxOYW1lKTtcbiAgICB9KTtcbiAgICBhbGxTa2lsbHMgPSBtZXJnZWRTa2lsbHM7XG4gIH1cblxuICAvLyBEZXRlY3Qgc2tpbGxzIHJlY29tbWVuZGVkIGJ5IExMTSB0aGF0IGFyZW4ndCBpbiBtYXN0ZXIgQ1YgYW5kIHByZXBlbmQgdGhlbVxuICBjb25zdCBtYXN0ZXJTa2lsbE5hbWVzID0gbmV3IFNldChhbGxTa2lsbHMubWFwKHNraWxsID0+IF9za2lsbE5hbWUoc2tpbGwpKSk7XG4gIGNvbnN0IG5ld1NraWxscyA9IChkYXRhLnJlY29tbWVuZGVkX3NraWxscyB8fCBbXSkuZmlsdGVyKHMgPT4gIW1hc3RlclNraWxsTmFtZXMuaGFzKHMpKTtcbiAgd2luZG93Ll9uZXdTa2lsbHNGcm9tTExNID0gbmV3U2tpbGxzO1xuICBpZiAobmV3U2tpbGxzLmxlbmd0aCA+IDApIHtcbiAgICBhbGxTa2lsbHMgPSBbLi4ubmV3U2tpbGxzLm1hcChzID0+ICh7IG5hbWU6IHMsIF9pc05ldzogdHJ1ZSB9KSksIC4uLmFsbFNraWxsc107XG4gIH1cblxuICBpZiAoYWxsU2tpbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJwYWRkaW5nOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzZiNzI4MDtcIj5ObyBza2lsbHMgZm91bmQgaW4gbWFzdGVyIENWIGRhdGEuPC9wPic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gT24gZmlyc3QgbG9hZDogc29ydCBieSByZWNvbW1lbmRhdGlvbjsgcHJlc2VydmUgdXNlciBvcmRlciBvbiByZS1yZW5kZXJcbiAgaWYgKCF3aW5kb3cuX3NraWxsc09yZGVyZWQpIHtcbiAgICBjb25zdCByZWNvbW1lbmRhdGlvbk9yZGVyID0geyAnRW1waGFzaXplJzogMCwgJ0luY2x1ZGUnOiAxLCAnRGUtZW1waGFzaXplJzogMiwgJ09taXQnOiAzIH07XG4gICAgY29uc3QgbWFzdGVyU2tpbGxzICA9IGFsbFNraWxscy5maWx0ZXIocyA9PiAhcy5faXNOZXcpO1xuXG4gICAgLy8gUm9sZS1hd2FyZSBjYXRlZ29yeSBzY29yaW5nOiBjYXRlZ29yaWVzIHdpdGggbW9yZSByZXF1aXJlZC9uaWNlLXRvLWhhdmUgam9iIHNraWxscyByYW5rIGhpZ2hlclxuICAgIGNvbnN0IGNhdGVnb3J5U2NvcmVzID0ge307XG4gICAgZm9yIChjb25zdCBza2lsbCBvZiBtYXN0ZXJTa2lsbHMpIHtcbiAgICAgIGNvbnN0IGNhdCAgPSB0eXBlb2Ygc2tpbGwgPT09ICdvYmplY3QnID8gKHNraWxsLmNhdGVnb3J5IHx8ICcnKSA6ICcnO1xuICAgICAgY29uc3QgbmFtZSA9ICh0eXBlb2Ygc2tpbGwgPT09ICdzdHJpbmcnID8gc2tpbGwgOiBza2lsbC5uYW1lIHx8IHNraWxsKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNhdCkge1xuICAgICAgICBjYXRlZ29yeVNjb3Jlc1tjYXRdID0gKGNhdGVnb3J5U2NvcmVzW2NhdF0gfHwgMClcbiAgICAgICAgICArIChoYXJkU2tpbGxTZXQuaGFzKG5hbWUpID8gMiA6IHNvZnRTa2lsbFNldC5oYXMobmFtZSkgPyAxIDogMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydGVkTWFzdGVyICA9IG1hc3RlclNraWxscy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFOYW1lICA9IHR5cGVvZiBhID09PSAnc3RyaW5nJyA/IGEgOiBhLm5hbWUgfHwgYTtcbiAgICAgIGNvbnN0IGJOYW1lICA9IHR5cGVvZiBiID09PSAnc3RyaW5nJyA/IGIgOiBiLm5hbWUgfHwgYjtcbiAgICAgIGNvbnN0IGFSZWMgICA9IHJlY29tbWVuZGF0aW9uT3JkZXJbZ2V0U2tpbGxSZWNvbW1lbmRhdGlvbihhTmFtZSwgZGF0YSldID8/IDM7XG4gICAgICBjb25zdCBiUmVjICAgPSByZWNvbW1lbmRhdGlvbk9yZGVyW2dldFNraWxsUmVjb21tZW5kYXRpb24oYk5hbWUsIGRhdGEpXSA/PyAzO1xuICAgICAgaWYgKGFSZWMgIT09IGJSZWMpIHJldHVybiBhUmVjIC0gYlJlYztcbiAgICAgIC8vIFdpdGhpbiB0aGUgc2FtZSByZWNvbW1lbmRhdGlvbiB0aWVyLCBzdXJmYWNlIHJvbGUtcmVsZXZhbnQgY2F0ZWdvcmllcyBmaXJzdFxuICAgICAgY29uc3QgYUNhdCAgID0gdHlwZW9mIGEgPT09ICdvYmplY3QnID8gKGEuY2F0ZWdvcnkgfHwgJycpIDogJyc7XG4gICAgICBjb25zdCBiQ2F0ICAgPSB0eXBlb2YgYiA9PT0gJ29iamVjdCcgPyAoYi5jYXRlZ29yeSB8fCAnJykgOiAnJztcbiAgICAgIHJldHVybiAoY2F0ZWdvcnlTY29yZXNbYkNhdF0gfHwgMCkgLSAoY2F0ZWdvcnlTY29yZXNbYUNhdF0gfHwgMCk7XG4gICAgfSk7XG4gICAgd2luZG93Ll9za2lsbHNPcmRlcmVkID0gWy4uLmFsbFNraWxscy5maWx0ZXIocyA9PiBzLl9pc05ldyksIC4uLnNvcnRlZE1hc3Rlcl07XG5cbiAgICAvLyBBcHBseSBqb2ItYW5hbHlzaXMtZGVyaXZlZCBjYXRlZ29yeSBvcmRlciBmcm9tIGJhY2tlbmQgKEdBUC04NilcbiAgICBjb25zdCBiYWNrZW5kT3JkZXIgPSAoc3RhdGVNYW5hZ2VyLmdldFRhYkRhdGEoJ2N1c3RvbWl6YXRpb25zJykgfHwge30pLnNraWxsX2NhdGVnb3J5X29yZGVyO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGJhY2tlbmRPcmRlcikgJiYgYmFja2VuZE9yZGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIHdpbmRvdy5fc2tpbGxDYXRlZ29yeU9yZGVyID0gYmFja2VuZE9yZGVyO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBrbm93bk5hbWVzID0gbmV3IFNldCh3aW5kb3cuX3NraWxsc09yZGVyZWQubWFwKHMgPT4gKHR5cGVvZiBzID09PSAnc3RyaW5nJyA/IHMgOiBzLm5hbWUgfHwgcykpKTtcbiAgICBmb3IgKGNvbnN0IHNrIG9mIGFsbFNraWxscykge1xuICAgICAgY29uc3Qgbm0gPSB0eXBlb2Ygc2sgPT09ICdzdHJpbmcnID8gc2sgOiBzay5uYW1lIHx8IHNrO1xuICAgICAgaWYgKCFrbm93bk5hbWVzLmhhcyhubSkpIHdpbmRvdy5fc2tpbGxzT3JkZXJlZC5wdXNoKHNrKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCByZWNvbW1lbmRlZFNldCA9IG5ldyBTZXQoZGF0YS5yZWNvbW1lbmRlZF9za2lsbHMgfHwgW10pO1xuXG4gIC8vIENvbXB1dGUgd2hpY2ggcmVjb21tZW5kYXRpb25zIGFyZSBuZXcgc2luY2UgbGFzdCByZW5kZXIgKHJlcnVuIGNoYW5nZSBiYWRnZXMpXG4gIGNvbnN0IHByZXZTa2lsbFNuYXAgPSBfZ2V0U2tpbGxTbmFwc2hvdCgpO1xuICBjb25zdCBuZXdSZWNvbW1lbmRlZFNraWxscyA9IHByZXZTa2lsbFNuYXBcbiAgICA/IG5ldyBTZXQoWy4uLnJlY29tbWVuZGVkU2V0XS5maWx0ZXIobmFtZSA9PiAhcHJldlNraWxsU25hcC5oYXMobmFtZSkpKVxuICAgIDogbmV3IFNldCgpO1xuICBfc2F2ZVNraWxsU25hcHNob3QocmVjb21tZW5kZWRTZXQpO1xuXG4gIC8vIEluaXRpYWxpc2Ugc2F2ZWQgZGVjaXNpb25zXG4gIGNvbnN0IHNhdmVkU2tpbGxEZWNzID0gd2luZG93Ll9zYXZlZERlY2lzaW9ucz8uc2tpbGxfZGVjaXNpb25zIHx8IHt9O1xuICBmb3IgKGNvbnN0IHNraWxsIG9mIHdpbmRvdy5fc2tpbGxzT3JkZXJlZCkge1xuICAgIGNvbnN0IHNraWxsTmFtZSAgICAgPSB0eXBlb2Ygc2tpbGwgPT09ICdzdHJpbmcnID8gc2tpbGwgOiBza2lsbC5uYW1lIHx8IHNraWxsO1xuICAgIGNvbnN0IGlzTmV3ICAgICAgICAgPSAoc2tpbGwuX2lzTmV3ID09PSB0cnVlKTtcbiAgICBjb25zdCBpc1JlY29tbWVuZGVkID0gcmVjb21tZW5kZWRTZXQuaGFzKHNraWxsTmFtZSk7XG4gICAgY29uc3QgcmVjb21tZW5kYXRpb24gPSBnZXRTa2lsbFJlY29tbWVuZGF0aW9uKHNraWxsTmFtZSwgZGF0YSk7XG4gICAgbGV0IGRlZmF1bHRBY3Rpb24gPSAnZXhjbHVkZSc7XG4gICAgaWYgICAgICAocmVjb21tZW5kYXRpb24gPT09ICdFbXBoYXNpemUnKSAgICBkZWZhdWx0QWN0aW9uID0gJ2VtcGhhc2l6ZSc7XG4gICAgZWxzZSBpZiAocmVjb21tZW5kYXRpb24gPT09ICdJbmNsdWRlJykgICAgICBkZWZhdWx0QWN0aW9uID0gJ2luY2x1ZGUnO1xuICAgIGVsc2UgaWYgKHJlY29tbWVuZGF0aW9uID09PSAnRGUtZW1waGFzaXplJykgZGVmYXVsdEFjdGlvbiA9ICdkZS1lbXBoYXNpemUnO1xuICAgIGVsc2UgaWYgKHJlY29tbWVuZGF0aW9uID09PSAnT21pdCcpICAgICAgICAgZGVmYXVsdEFjdGlvbiA9ICdleGNsdWRlJztcbiAgICBlbHNlIGlmIChpc1JlY29tbWVuZGVkIHx8IGlzTmV3KSAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24gPSAnaW5jbHVkZSc7XG4gICAgdXNlclNlbGVjdGlvbnMuc2tpbGxzW3NraWxsTmFtZV0gPSBzYXZlZFNraWxsRGVjc1tza2lsbE5hbWVdIHx8IGRlZmF1bHRBY3Rpb247XG4gIH1cblxuICBfcmVuZGVyU2tpbGxzVGFibGUoY29udGFpbmVyLCByZWNvbW1lbmRlZFNldCwgZGF0YSwgaGFyZFNraWxsU2V0LCBzb2Z0U2tpbGxTZXQsIG5ld1JlY29tbWVuZGVkU2tpbGxzKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFJlbmRlciB0YWJsZSBIVE1MIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBfcmVuZGVyU2tpbGxzVGFibGUoY29udGFpbmVyLCByZWNvbW1lbmRlZFNldCwgZGF0YSwgaGFyZFNraWxsU2V0LCBzb2Z0U2tpbGxTZXQsIG5ld1JlY29tbWVuZGVkU2tpbGxzID0gbmV3IFNldCgpKSB7XG4gIGlmICghY29udGFpbmVyKSBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGxzLXRhYmxlLWNvbnRhaW5lcicpO1xuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICBpZiAoIXJlY29tbWVuZGVkU2V0KSByZWNvbW1lbmRlZFNldCA9IG5ldyBTZXQoKHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zPy5yZWNvbW1lbmRlZF9za2lsbHMpIHx8IFtdKTtcbiAgaWYgKCFkYXRhKSBkYXRhID0gd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnM7XG4gIGlmICghaGFyZFNraWxsU2V0KSB7XG4gICAgY29uc3QgamEgPSBzdGF0ZU1hbmFnZXIuZ2V0VGFiRGF0YSgnYW5hbHlzaXMnKSB8fCB7fTtcbiAgICBoYXJkU2tpbGxTZXQgPSBuZXcgU2V0KChqYS5yZXF1aXJlZF9za2lsbHMgICAgIHx8IFtdKS5tYXAocyA9PiBzLnRvTG93ZXJDYXNlKCkpKTtcbiAgICBzb2Z0U2tpbGxTZXQgPSBuZXcgU2V0KChqYS5uaWNlX3RvX2hhdmVfc2tpbGxzIHx8IFtdKS5tYXAocyA9PiBzLnRvTG93ZXJDYXNlKCkpKTtcbiAgfVxuXG4gIGlmICgkLmZuLkRhdGFUYWJsZS5pc0RhdGFUYWJsZSgnI3NraWxscy1yZXZpZXctdGFibGUnKSkge1xuICAgICQoJyNza2lsbHMtcmV2aWV3LXRhYmxlJykuRGF0YVRhYmxlKCkuZGVzdHJveSgpO1xuICB9XG5cbiAgY29uc3Qgc2tpbGxzID0gd2luZG93Ll9za2lsbHNPcmRlcmVkIHx8IFtdO1xuICBjb25zdCBncm91cFdhcm5pbmdzID0gX2J1aWxkR3JvdXBXYXJuaW5ncyhza2lsbHMpO1xuICBjb25zdCBjYXRlZ29yeVN1Z2dlc3Rpb25zID0gQXJyYXkuZnJvbShuZXcgU2V0KFxuICAgIHNraWxsc1xuICAgICAgLm1hcChza2lsbCA9PiAodHlwZW9mIHNraWxsID09PSAnb2JqZWN0JyAmJiBza2lsbC5jYXRlZ29yeSA/IFN0cmluZyhza2lsbC5jYXRlZ29yeSkudHJpbSgpIDogJycpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSxcbiAgKSkuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQubG9jYWxlQ29tcGFyZShyaWdodCkpO1xuICBfc3luY1NraWxsQ2F0ZWdvcnlPcmRlcigpO1xuICBjb25zdCBjYXRlZ29yeUxpc3RJZCA9ICdza2lsbC1jYXRlZ29yeS1zdWdnZXN0aW9ucyc7XG4gIGxldCB0YWJsZUhUTUwgPSBgXG4gICAgPGRpdiBjbGFzcz1cInNraWxsLWFkZC1wYW5lbFwiIHN0eWxlPVwibWFyZ2luOjAgMCAxMnB4O3BhZGRpbmc6MTJweDtib3JkZXI6MXB4IHNvbGlkICNkYmVhZmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6I2VmZjZmZjtcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwO1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7XCI+U2Vzc2lvbi1Pbmx5IFNraWxsczwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOiM0NzU1Njk7XCI+QWRkIGEgc2tpbGwgZm9yIHRoaXMgQ1Ygd2l0aG91dCBjaGFuZ2luZyB0aGUgbWFzdGVyIHByb2ZpbGUuPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1bGstYnRuXCIgaWQ9XCJ0b2dnbGUtYWRkLXNraWxsLWZvcm1cIj4rIEFkZCBTa2lsbDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8Zm9ybSBpZD1cImFkZC1za2lsbC1mb3JtXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7bWFyZ2luLXRvcDoxMnB4O1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDE4MHB4LDFmcikpO2dhcDo4cHg7XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5hbWVcIiBwbGFjZWhvbGRlcj1cIlNraWxsIG5hbWVcIiBhcmlhLWxhYmVsPVwiTmV3IHNraWxsIG5hbWVcIiBzdHlsZT1cInBhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNiZmRiZmU7Ym9yZGVyLXJhZGl1czo2cHg7XCIgLz5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiY2F0ZWdvcnlcIiBwbGFjZWhvbGRlcj1cIkNhdGVnb3J5XCIgYXJpYS1sYWJlbD1cIk5ldyBza2lsbCBjYXRlZ29yeVwiIGxpc3Q9XCIke2NhdGVnb3J5TGlzdElkfVwiIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2JmZGJmZTtib3JkZXItcmFkaXVzOjZweDtcIiAvPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJncm91cFwiIHBsYWNlaG9sZGVyPVwiR3JvdXAga2V5XCIgYXJpYS1sYWJlbD1cIk5ldyBza2lsbCBncm91cFwiIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2JmZGJmZTtib3JkZXItcmFkaXVzOjZweDtcIiAvPlxuICAgICAgICAgIDxzZWxlY3QgbmFtZT1cInByb2ZpY2llbmN5XCIgYXJpYS1sYWJlbD1cIk5ldyBza2lsbCBwcm9maWNpZW5jeVwiIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2JmZGJmZTtib3JkZXItcmFkaXVzOjZweDtcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5ObyBwcm9maWNpZW5jeSBsYWJlbDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZ2lubmVyXCI+QmVnaW5uZXI8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmYW1pbGlhclwiPkZhbWlsaWFyPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaW50ZXJtZWRpYXRlXCI+SW50ZXJtZWRpYXRlPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWR2YW5jZWRcIj5BZHZhbmNlZDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImV4cGVydFwiPkV4cGVydDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzdWJza2lsbHNcIiBwbGFjZWhvbGRlcj1cIlN1Yi1za2lsbHNcIiBhcmlhLWxhYmVsPVwiTmV3IHNraWxsIHN1Yi1za2lsbHNcIiBzdHlsZT1cInBhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNiZmRiZmU7Ym9yZGVyLXJhZGl1czo2cHg7XCIgLz5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicGFyZW50aGV0aWNhbFwiIHBsYWNlaG9sZGVyPVwiUGFyZW50aGV0aWNhbCBub3RlXCIgYXJpYS1sYWJlbD1cIk5ldyBza2lsbCBwYXJlbnRoZXRpY2FsXCIgc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjYmZkYmZlO2JvcmRlci1yYWRpdXM6NnB4O1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21hcmdpbi10b3A6MTBweDtcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1bGstYnRuIGJ1bGstZXhjbHVkZVwiIGlkPVwiY2FuY2VsLWFkZC1za2lsbFwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnVsay1idG4gYnVsay1pbmNsdWRlXCI+U2F2ZSBTa2lsbDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgICAke19idWlsZFNraWxsQ2F0ZWdvcnlNYW5hZ2VySHRtbCgpfVxuICAgIDxkYXRhbGlzdCBpZD1cIiR7Y2F0ZWdvcnlMaXN0SWR9XCI+XG4gICAgICAke2NhdGVnb3J5U3VnZ2VzdGlvbnMubWFwKGNhdGVnb3J5ID0+IGA8b3B0aW9uIHZhbHVlPVwiJHtlc2NhcGVIdG1sKGNhdGVnb3J5KX1cIj48L29wdGlvbj5gKS5qb2luKCcnKX1cbiAgICA8L2RhdGFsaXN0PlxuICAgIDx0YWJsZSBpZD1cInNraWxscy1yZXZpZXctdGFibGVcIiBjbGFzcz1cInJldmlldy10YWJsZVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoPlNraWxsPC90aD5cbiAgICAgICAgICA8dGg+Q2F0ZWdvcnk8L3RoPlxuICAgICAgICAgIDx0aD5Hcm91cDwvdGg+XG4gICAgICAgICAgPHRoPlByb2ZpY2llbmN5PC90aD5cbiAgICAgICAgICA8dGg+U3ViLXNraWxsczwvdGg+XG4gICAgICAgICAgPHRoPlBhcmVudGhldGljYWw8L3RoPlxuICAgICAgICAgIDx0aD5SZWNvbW1lbmRhdGlvbjwvdGg+XG4gICAgICAgICAgPHRoPkNvbmZpZGVuY2U8L3RoPlxuICAgICAgICAgIDx0aD5SZWFzb25pbmc8L3RoPlxuICAgICAgICAgIDx0aD5NYXRjaGVkIEV4cGVyaWVuY2VzPC90aD5cbiAgICAgICAgICA8dGg+WW91ciBTZWxlY3Rpb248L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgYDtcblxuICBjb25zdCBhbGxFeHBlcmllbmNlcyA9IEFycmF5LmlzQXJyYXkod2luZG93Ll9hbGxFeHBlcmllbmNlcykgPyB3aW5kb3cuX2FsbEV4cGVyaWVuY2VzIDogW107XG4gIGNvbnN0IHNhdmVkTWF0Y2hlcyA9ICh3aW5kb3cuX3NhdmVkRGVjaXNpb25zICYmIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMuZXh0cmFfc2tpbGxfbWF0Y2hlcykgfHwge307XG5cbiAgY29uc3QgZGVyaXZlTWF0Y2hlcyA9IChza2lsbE5hbWUpID0+IHtcbiAgICBjb25zdCBuZWVkbGUgPSBza2lsbE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBpZHMgPSBbXTtcbiAgICBhbGxFeHBlcmllbmNlcy5mb3JFYWNoKChleHApID0+IHtcbiAgICAgIGlmICghZXhwIHx8IHR5cGVvZiBleHAgIT09ICdvYmplY3QnKSByZXR1cm47XG4gICAgICBjb25zdCBhY2ggPSBBcnJheS5pc0FycmF5KGV4cC5hY2hpZXZlbWVudHMpID8gZXhwLmFjaGlldmVtZW50cy5qb2luKCcgJykgOiAnJztcbiAgICAgIGNvbnN0IGhheXN0YWNrID0gW2V4cC50aXRsZSB8fCAnJywgZXhwLmNvbXBhbnkgfHwgJycsIGFjaF0uam9pbignICcpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoaGF5c3RhY2suaW5jbHVkZXMobmVlZGxlKSAmJiBleHAuaWQpIGlkcy5wdXNoKGV4cC5pZCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGlkcztcbiAgfTtcblxuICBza2lsbHMuZm9yRWFjaCgoc2tpbGwsIHJvd0lkeCkgPT4ge1xuICAgIGNvbnN0IHNraWxsTmFtZSAgICAgICAgICAgID0gdHlwZW9mIHNraWxsID09PSAnc3RyaW5nJyA/IHNraWxsIDogc2tpbGwubmFtZSB8fCBza2lsbDtcbiAgICBjb25zdCBpc05ldyAgICAgICAgICAgICAgICA9IChza2lsbC5faXNOZXcgPT09IHRydWUpO1xuICAgIGNvbnN0IGlzQ2FuZGlkYXRlVG9Db25maXJtID0gdHlwZW9mIHNraWxsID09PSAnb2JqZWN0JyAmJiBza2lsbC5jYW5kaWRhdGVfdG9fY29uZmlybSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBpc1JlY29tbWVuZGVkICAgICAgICA9IHJlY29tbWVuZGVkU2V0Lmhhcyhza2lsbE5hbWUpO1xuICAgIGNvbnN0IHJlY29tbWVuZGF0aW9uID0gZ2V0U2tpbGxSZWNvbW1lbmRhdGlvbihza2lsbE5hbWUsIGRhdGEpO1xuICAgIGNvbnN0IGNvbmZpZGVuY2UgICAgID0gZ2V0U2tpbGxDb25maWRlbmNlKHNraWxsTmFtZSwgZGF0YSk7XG4gICAgY29uc3QgcmVhc29uaW5nICAgICAgPSBnZXRTa2lsbFJlYXNvbmluZyhza2lsbE5hbWUsIGRhdGEpO1xuICAgIGNvbnN0IHNraWxsUmVjICAgICAgID0gX2ZpbmRTa2lsbFJlY29tbWVuZGF0aW9uUmVjb3JkKHNraWxsTmFtZSwgZGF0YSk7XG4gICAgY29uc3QgZ3JvdXBpbmdTdWdnZXN0aW9uID0gX2J1aWxkU2tpbGxHcm91cGluZ1N1Z2dlc3Rpb24oc2tpbGxSZWMsIHNraWxsKTtcbiAgICBjb25zdCBkZWZhdWx0QWN0aW9uICA9IHVzZXJTZWxlY3Rpb25zLnNraWxsc1tza2lsbE5hbWVdIHx8ICdpbmNsdWRlJztcbiAgICBjb25zdCBpc0ZpcnN0ICAgICAgICA9IHJvd0lkeCA9PT0gMDtcbiAgICBjb25zdCBpc0xhc3QgICAgICAgICA9IHJvd0lkeCA9PT0gc2tpbGxzLmxlbmd0aCAtIDE7XG4gICAgY29uc3Qgc2tpbGxOYW1lRXNjICAgPSBlc2NhcGVIdG1sKHNraWxsTmFtZSk7XG5cbiAgICBjb25zdCBncm91cEtleSA9IHR5cGVvZiBza2lsbCA9PT0gJ29iamVjdCcgPyAoc2tpbGwuZ3JvdXAgfHwgJycpIDogJyc7XG4gICAgY29uc3QgZ3JvdXBXYXJuaW5nID0gZ3JvdXBXYXJuaW5ncy5nZXQoZ3JvdXBLZXkpO1xuICAgIGNvbnN0IGNhdGVnb3J5S2V5ID0gdHlwZW9mIHNraWxsID09PSAnb2JqZWN0JyA/IChza2lsbC5jYXRlZ29yeSB8fCAnJykgOiAnJztcbiAgICBjb25zdCBwcm9maWNpZW5jeUtleSA9IHR5cGVvZiBza2lsbCA9PT0gJ29iamVjdCcgPyBTdHJpbmcoc2tpbGwucHJvZmljaWVuY3kgfHwgJycpLnRyaW0oKSA6ICcnO1xuICAgIGNvbnN0IHN1YnNraWxscyA9IHR5cGVvZiBza2lsbCA9PT0gJ29iamVjdCdcbiAgICAgID8gQXJyYXkuaXNBcnJheShza2lsbC5zdWJza2lsbHMpXG4gICAgICAgID8gc2tpbGwuc3Vic2tpbGxzXG4gICAgICAgIDogQXJyYXkuaXNBcnJheShza2lsbC5zdWJfc2tpbGxzKVxuICAgICAgICAgID8gc2tpbGwuc3ViX3NraWxsc1xuICAgICAgICAgIDogW11cbiAgICAgIDogW107XG4gICAgY29uc3QgcGFyZW50aGV0aWNhbEtleSA9IHR5cGVvZiBza2lsbCA9PT0gJ29iamVjdCcgPyBTdHJpbmcoc2tpbGwucGFyZW50aGV0aWNhbCB8fCAnJykudHJpbSgpIDogJyc7XG5cbiAgICBjb25zdCBuZXdCYWRnZSA9IGlzTmV3XG4gICAgICA/IChza2lsbC5faXNVc2VyQ3JlYXRlZFxuICAgICAgICA/ICc8c3BhbiB0aXRsZT1cIkFkZGVkIGZvciB0aGlzIHNlc3Npb24gb25seVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6NnB4O2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiMwZjc2NmU7Ym9yZGVyOjFweCBzb2xpZCAjMGY3NjZlO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MXB4IDVweDtjdXJzb3I6aGVscDtcIj5TZXNzaW9uIG9ubHk8L3NwYW4+J1xuICAgICAgICA6ICc8c3BhbiB0aXRsZT1cIkFJIHN1Z2dlc3RlZCBcdTIwMTQgbm90IHlldCBpbiBDViBwcm9maWxlXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDo2cHg7Zm9udC1zaXplOjEwcHg7Y29sb3I6I2RjNzkwMDtib3JkZXI6MXB4IHNvbGlkICNkYzc5MDA7Ym9yZGVyLXJhZGl1czozcHg7cGFkZGluZzoxcHggNXB4O2N1cnNvcjpoZWxwO1wiPlx1MjZBMCBOb3QgaW4gQ1YgcHJvZmlsZTwvc3Bhbj4nKVxuICAgICAgOiAnJztcbiAgICBjb25zdCBfZXZpZGVuY2VUZXh0ID0gaXNDYW5kaWRhdGVUb0NvbmZpcm0gJiYgdHlwZW9mIHNraWxsID09PSAnb2JqZWN0JyA/IFN0cmluZyhza2lsbC5ldmlkZW5jZSB8fCAnJykudHJpbSgpIDogJyc7XG4gICAgY29uc3QgX2V2aWRlbmNlRmFsbGJhY2sgPSAnQ29uZmlybSB0aGlzIHNraWxsIGlzIGdlbnVpbmVseSBkZW1vbnN0cmF0ZWQgaW4geW91ciBleHBlcmllbmNlIGJlZm9yZSBpbmNsdWRpbmcgaXQuJztcbiAgICBjb25zdCBfZXZpZGVuY2VUaXAgPSBfZXZpZGVuY2VUZXh0ID8gYFdlYWsgZXZpZGVuY2UgXHUyMDE0ICR7X2V2aWRlbmNlVGV4dH1gIDogYFdlYWsgZXZpZGVuY2UgXHUyMDE0ICR7X2V2aWRlbmNlRmFsbGJhY2t9YDtcbiAgICBjb25zdCBjYW5kaWRhdGVCYWRnZSA9IGlzQ2FuZGlkYXRlVG9Db25maXJtXG4gICAgICA/IGA8c3BhbiB0aXRsZT1cIiR7ZXNjYXBlSHRtbChfZXZpZGVuY2VUaXApfVwiIGFyaWEtbGFiZWw9XCIke2VzY2FwZUh0bWwoX2V2aWRlbmNlVGlwKX1cIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjZweDtmb250LXNpemU6MTBweDtjb2xvcjojOWYxMjM5O2JvcmRlcjoxcHggc29saWQgIzlmMTIzOTtib3JkZXItcmFkaXVzOjNweDtwYWRkaW5nOjFweCA1cHg7Y3Vyc29yOmhlbHA7XCI+XHUyNkEwICR7X2V2aWRlbmNlVGV4dCA/ICdXZWFrIGV2aWRlbmNlJyA6ICdWZXJpZnkgZXZpZGVuY2UnfTwvc3Bhbj5gXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGV2aWRlbmNlTm90ZSA9IGlzQ2FuZGlkYXRlVG9Db25maXJtICYmIF9ldmlkZW5jZVRleHRcbiAgICAgID8gYDxzbWFsbCBzdHlsZT1cImRpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDozcHg7Zm9udC1zaXplOjAuNzhlbTtjb2xvcjojOWYxMjM5O1wiPiR7ZXNjYXBlSHRtbChfZXZpZGVuY2VUZXh0KX08L3NtYWxsPmBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgcmVydW5OZXdCYWRnZSA9IG5ld1JlY29tbWVuZGVkU2tpbGxzLmhhcyhza2lsbE5hbWUpXG4gICAgICA/ICc8c3BhbiBjbGFzcz1cInJ3LWNoYW5nZS1iYWRnZSBydy1jaGFuZ2UtbmV3XCIgYXJpYS1sYWJlbD1cIk5ldyByZWNvbW1lbmRhdGlvbiBzaW5jZSBwcmV2aW91cyBydW5cIj5cdUQ4M0NcdUREOTUgTmV3PC9zcGFuPidcbiAgICAgIDogJyc7XG4gICAgY29uc3Qgc2tpbGxOYW1lTG93ZXIgID0gc2tpbGxOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgX3R5cGVPdmVycmlkZSAgID0gKHdpbmRvdy5fc2tpbGxUeXBlT3ZlcnJpZGVzIHx8IHt9KVtza2lsbE5hbWVMb3dlcl07XG4gICAgY29uc3QgX2Jhc2VUeXBlICAgICAgID0gaGFyZFNraWxsU2V0Lmhhcyhza2lsbE5hbWVMb3dlcikgPyAnaGFyZCdcbiAgICAgIDogc29mdFNraWxsU2V0Py5oYXMoc2tpbGxOYW1lTG93ZXIpID8gJ3NvZnQnIDogbnVsbDtcbiAgICBjb25zdCBfZWZmZWN0aXZlVHlwZSAgPSBfdHlwZU92ZXJyaWRlIHx8IF9iYXNlVHlwZTtcbiAgICBjb25zdCBfaXNPdmVycmlkZGVuICAgPSAhIV90eXBlT3ZlcnJpZGUgJiYgX3R5cGVPdmVycmlkZSAhPT0gX2Jhc2VUeXBlO1xuICAgIGNvbnN0IF90b2dnbGVUYXJnZXQgICA9IF9lZmZlY3RpdmVUeXBlID09PSAnaGFyZCcgPyAnc29mdCdcbiAgICAgIDogX2VmZmVjdGl2ZVR5cGUgPT09ICdzb2Z0JyA/IG51bGwgOiAnaGFyZCc7XG4gICAgY29uc3QgX2JhZGdlVGl0bGUgICAgID0gX2lzT3ZlcnJpZGRlblxuICAgICAgPyBgVXNlciBvdmVycmlkZTogJHtfZWZmZWN0aXZlVHlwZX0gKG9yaWdpbmFsOiAke19iYXNlVHlwZSB8fCAnbm9uZSd9KSBcdTIwMTQgY2xpY2sgdG8gY3ljbGVgXG4gICAgICA6IF9lZmZlY3RpdmVUeXBlXG4gICAgICAgID8gYCR7X2VmZmVjdGl2ZVR5cGUgPT09ICdoYXJkJyA/ICdSZXF1aXJlZCcgOiAnTmljZS10by1oYXZlJ30gcGVyIGpvYiBkZXNjcmlwdGlvbiBcdTIwMTQgY2xpY2sgdG8gb3ZlcnJpZGVgXG4gICAgICAgIDogJ05vdCBjbGFzc2lmaWVkIFx1MjAxNCBjbGljayB0byBtYXJrIGFzIEhhcmQnO1xuICAgIGNvbnN0IF9iYWRnZVN0eWxlICAgICA9IF9lZmZlY3RpdmVUeXBlID09PSAnaGFyZCdcbiAgICAgID8gYG1hcmdpbi1sZWZ0OjVweDtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzFkNGVkODtiYWNrZ3JvdW5kOiNkYmVhZmU7Ym9yZGVyLXJhZGl1czozcHg7cGFkZGluZzoxcHggNXB4O2N1cnNvcjpwb2ludGVyOyR7X2lzT3ZlcnJpZGRlbiA/ICdvdXRsaW5lOjJweCBzb2xpZCAjMWQ0ZWQ4O291dGxpbmUtb2Zmc2V0OjFweDsnIDogJyd9YFxuICAgICAgOiBfZWZmZWN0aXZlVHlwZSA9PT0gJ3NvZnQnXG4gICAgICAgID8gYG1hcmdpbi1sZWZ0OjVweDtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzZiMjFhODtiYWNrZ3JvdW5kOiNmM2U4ZmY7Ym9yZGVyLXJhZGl1czozcHg7cGFkZGluZzoxcHggNXB4O2N1cnNvcjpwb2ludGVyOyR7X2lzT3ZlcnJpZGRlbiA/ICdvdXRsaW5lOjJweCBzb2xpZCAjNmIyMWE4O291dGxpbmUtb2Zmc2V0OjFweDsnIDogJyd9YFxuICAgICAgICA6ICdtYXJnaW4tbGVmdDo1cHg7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM2YjcyODA7YmFja2dyb3VuZDojZjNmNGY2O2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MXB4IDVweDtjdXJzb3I6cG9pbnRlcjtib3JkZXI6MXB4IGRhc2hlZCAjOWNhM2FmOyc7XG4gICAgY29uc3QgX2JhZGdlTGFiZWwgICAgID0gX2VmZmVjdGl2ZVR5cGUgPyAoX2VmZmVjdGl2ZVR5cGUgPT09ICdoYXJkJyA/ICdIYXJkJyA6ICdTb2Z0JykgOiAnKyBUeXBlJztcbiAgICBjb25zdCBza2lsbFR5cGVCYWRnZSAgPSBgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJza2lsbC10eXBlLXRvZ2dsZVwiIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIiBkYXRhLXRvZ2dsZS10bz1cIiR7X3RvZ2dsZVRhcmdldCB8fCAnJ31cIiB0aXRsZT1cIiR7X2JhZGdlVGl0bGV9XCIgc3R5bGU9XCIke19iYWRnZVN0eWxlfVwiIGFyaWEtbGFiZWw9XCJTa2lsbCB0eXBlOiAke19lZmZlY3RpdmVUeXBlIHx8ICd1bmNsYXNzaWZpZWQnfSwgY2xpY2sgdG8gdG9nZ2xlXCI+JHtfYmFkZ2VMYWJlbH08L2J1dHRvbj5gO1xuICAgIGNvbnN0IHJlY29tbWVuZGF0aW9uVGV4dCA9IHJlY29tbWVuZGF0aW9uIHx8IChza2lsbC5faXNVc2VyQ3JlYXRlZCA/ICdJbmNsdWRlIChzZXNzaW9uLWFkZGVkKScgOiAoaXNOZXcgPyAnSW5jbHVkZSAoQUkgc3VnZ2VzdGVkKScgOiAnT21pdCcpKTtcbiAgICBjb25zdCBjb25maWRlbmNlQmFkZ2UgICAgPSBgPHNwYW4gY2xhc3M9XCJjb25maWRlbmNlLWJhZGdlIGNvbmZpZGVuY2UtJHtjb25maWRlbmNlLmxldmVsfVwiPiR7Y29uZmlkZW5jZS50ZXh0fTwvc3Bhbj5gO1xuICAgIGNvbnN0IHJlYXNvbmluZ1RleHQgICAgICA9IHJlYXNvbmluZyB8fCAoc2tpbGwuX2lzVXNlckNyZWF0ZWRcbiAgICAgID8gJ1lvdSBhZGRlZCB0aGlzIHNraWxsIGZvciB0aGUgY3VycmVudCBDViBzZXNzaW9uIG9ubHkuJ1xuICAgICAgOiAoaXNOZXdcbiAgICAgICAgPyAnUmVjb21tZW5kZWQgYnkgQUkgYmFzZWQgb24gam9iIHJlcXVpcmVtZW50cyBidXQgbm90IGN1cnJlbnRseSBpbiB5b3VyIG1hc3RlciBDVi4nXG4gICAgICAgIDogJ1RoaXMgc2tpbGwgd2FzIG5vdCBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGluIHRoZSBqb2IgcmVxdWlyZW1lbnRzLicpKTtcbiAgICBjb25zdCBncm91cGluZ0NoYW5nZVRleHQgPSBncm91cGluZ1N1Z2dlc3Rpb24/LmNoYW5nZVRleHQgfHwgJyc7XG4gICAgY29uc3QgZ3JvdXBpbmdSZWFzb25UZXh0ID0gZ3JvdXBpbmdTdWdnZXN0aW9uPy5yZWFzb25pbmcgfHwgJyc7XG4gICAgY29uc3QgZ3JvdXBpbmdBdHNJbXBhY3QgPSBncm91cGluZ1N1Z2dlc3Rpb24/LmF0c0ltcGFjdCB8fCAnJztcbiAgICBjb25zdCBncm91cGluZ1BhZ2VJbXBhY3QgPSBncm91cGluZ1N1Z2dlc3Rpb24/LnBhZ2VMZW5ndGhJbXBhY3QgfHwgJyc7XG4gICAgY29uc3QgcmVhc29uaW5nU2VnbWVudHMgPSBbcmVhc29uaW5nVGV4dF07XG4gICAgaWYgKGdyb3VwaW5nQ2hhbmdlVGV4dCkgcmVhc29uaW5nU2VnbWVudHMucHVzaChgQ2hhbmdlOiAke2dyb3VwaW5nQ2hhbmdlVGV4dH1gKTtcbiAgICBpZiAoZ3JvdXBpbmdSZWFzb25UZXh0KSByZWFzb25pbmdTZWdtZW50cy5wdXNoKGdyb3VwaW5nUmVhc29uVGV4dCk7XG4gICAgaWYgKGdyb3VwaW5nQXRzSW1wYWN0KSByZWFzb25pbmdTZWdtZW50cy5wdXNoKGBBVFMgaW1wYWN0OiAke2dyb3VwaW5nQXRzSW1wYWN0fWApO1xuICAgIGlmIChncm91cGluZ1BhZ2VJbXBhY3QpIHJlYXNvbmluZ1NlZ21lbnRzLnB1c2goYFBhZ2UgbGVuZ3RoIGltcGFjdDogJHtncm91cGluZ1BhZ2VJbXBhY3R9YCk7XG4gICAgY29uc3QgZnVsbFJlYXNvbmluZ1RleHQgPSByZWFzb25pbmdTZWdtZW50cy5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICAgIGNvbnN0IHJvd1N0eWxlICAgICAgICAgICA9IGlzTmV3ID8gJ2JhY2tncm91bmQ6I2ZmZmJlYjsnIDogJyc7XG4gICAgY29uc3QgZGVmYXVsdE1hdGNoZXMgPSBpc05ldyA/IChzYXZlZE1hdGNoZXNbc2tpbGxOYW1lXSB8fCBkZXJpdmVNYXRjaGVzKHNraWxsTmFtZSkpIDogW107XG4gICAgY29uc3QgbWF0Y2hWYWx1ZSA9IGRlZmF1bHRNYXRjaGVzLmpvaW4oJywgJyk7XG4gICAgY29uc3QgbWF0Y2hIZWxwID0gaXNOZXdcbiAgICAgID8gJ0NvbW1hLXNlcGFyYXRlZCBleHBlcmllbmNlIElEcy4gQXV0by1kZXJpdmVkOyB5b3UgY2FuIGVkaXQgYmVmb3JlIHN1Ym1pdC4nXG4gICAgICA6ICdPbmx5IHVzZWQgZm9yIEFJLXN1Z2dlc3RlZCBza2lsbHMuJztcbiAgICBjb25zdCBkZXJpdmVkWWVhcnMgPSBpc05ldyA/IF9jb21wdXRlWWVhcnNGcm9tSWRzKGRlZmF1bHRNYXRjaGVzLCBhbGxFeHBlcmllbmNlcykgOiBudWxsO1xuICAgIGNvbnN0IHllYXJzSGludCA9IGRlcml2ZWRZZWFycyAhPSBudWxsXG4gICAgICA/IGB+JHtkZXJpdmVkWWVhcnN9IHlyJHtkZXJpdmVkWWVhcnMgPT09IDEgPyAnJyA6ICdzJ31gXG4gICAgICA6IChpc05ldyA/ICdubyBtYXRjaCcgOiAnJyk7XG5cbiAgICB0YWJsZUhUTUwgKz0gYFxuICAgICAgPHRyIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIiBzdHlsZT1cIiR7cm93U3R5bGV9XCI+XG4gICAgICAgIDx0ZD48c3Ryb25nPiR7c2tpbGxOYW1lRXNjfTwvc3Ryb25nPiR7c2tpbGxUeXBlQmFkZ2V9JHtyZXJ1bk5ld0JhZGdlfSR7bmV3QmFkZ2V9JHtjYW5kaWRhdGVCYWRnZX0ke2V2aWRlbmNlTm90ZX08L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJtaW4td2lkdGg6MTQwcHg7XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJza2lsbC1jYXRlZ29yeS1pbnB1dFwiIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIlxuICAgICAgICAgICAgdmFsdWU9XCIke2VzY2FwZUh0bWwoY2F0ZWdvcnlLZXkpfVwiXG4gICAgICAgICAgICBsaXN0PVwiJHtjYXRlZ29yeUxpc3RJZH1cIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIFByb2dyYW1taW5nXCJcbiAgICAgICAgICAgIHRpdGxlPVwiU2Vzc2lvbi1vbmx5IGNhdGVnb3J5IGxhYmVsIHVzZWQgd2hlbiBncm91cGluZyBza2lsbHMgaW4gdGhlIGdlbmVyYXRlZCBDVlwiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Zm9udC1zaXplOjAuOGVtO3BhZGRpbmc6NHB4IDZweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo0cHg7XCIvPlxuICAgICAgICAgICR7Z3JvdXBpbmdTdWdnZXN0aW9uPy5jYXRlZ29yeUNoYW5nZWQgPyBgPGRpdiBjbGFzcz1cInNraWxsLWFpLWhpbnRcIiBzdHlsZT1cIm1hcmdpbi10b3A6NHB4O2ZvbnQtc2l6ZTowLjc1ZW07Y29sb3I6IzQzMzhjYTtcIj5cbiAgICAgICAgICAgIEFJIHN1Z2dlc3Rpb246ICR7ZXNjYXBlSHRtbChncm91cGluZ1N1Z2dlc3Rpb24uY2F0ZWdvcnkpfVxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNraWxsLWFwcGx5LWFpXCIgZGF0YS1za2lsbD1cIiR7c2tpbGxOYW1lRXNjfVwiIGRhdGEtYWktZmllbGQ9XCJjYXRlZ29yeVwiIGRhdGEtYWktdmFsdWU9XCIke2VzY2FwZUh0bWwoZ3JvdXBpbmdTdWdnZXN0aW9uLmNhdGVnb3J5KX1cIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjZweDtib3JkZXI6MXB4IHNvbGlkICNjN2QyZmU7YmFja2dyb3VuZDojZWVmMmZmO2NvbG9yOiM0MzM4Y2E7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoxcHggNnB4O2N1cnNvcjpwb2ludGVyO1wiPkFwcGx5PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+YCA6ICcnfVxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJtaW4td2lkdGg6MTAwcHg7XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJza2lsbC1ncm91cC1pbnB1dFwiIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIlxuICAgICAgICAgICAgdmFsdWU9XCIke2VzY2FwZUh0bWwoZ3JvdXBLZXkpfVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gY19mYW1pbHlcIlxuICAgICAgICAgICAgdGl0bGU9XCJTa2lsbHMgd2l0aCB0aGUgc2FtZSBncm91cCBrZXkgcmVuZGVyIGFzIG9uZSBjb21tYS1zZXBhcmF0ZWQgYnVsbGV0XCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtmb250LXNpemU6MC44ZW07cGFkZGluZzo0cHggNnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtcIi8+XG4gICAgICAgICAgJHtncm91cGluZ1N1Z2dlc3Rpb24/Lmdyb3VwQ2hhbmdlZCA/IGA8ZGl2IGNsYXNzPVwic2tpbGwtYWktaGludFwiIHN0eWxlPVwibWFyZ2luLXRvcDo0cHg7Zm9udC1zaXplOjAuNzVlbTtjb2xvcjojNDMzOGNhO1wiPlxuICAgICAgICAgICAgQUkgc3VnZ2VzdGlvbjogJHtlc2NhcGVIdG1sKGdyb3VwaW5nU3VnZ2VzdGlvbi5ncm91cCl9XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2tpbGwtYXBwbHktYWlcIiBkYXRhLXNraWxsPVwiJHtza2lsbE5hbWVFc2N9XCIgZGF0YS1haS1maWVsZD1cImdyb3VwXCIgZGF0YS1haS12YWx1ZT1cIiR7ZXNjYXBlSHRtbChncm91cGluZ1N1Z2dlc3Rpb24uZ3JvdXApfVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6NnB4O2JvcmRlcjoxcHggc29saWQgI2M3ZDJmZTtiYWNrZ3JvdW5kOiNlZWYyZmY7Y29sb3I6IzQzMzhjYTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjFweCA2cHg7Y3Vyc29yOnBvaW50ZXI7XCI+QXBwbHk8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5gIDogJyd9XG4gICAgICAgICAgJHtncm91cFdhcm5pbmcgPyBgPGRpdiBjbGFzcz1cInNraWxsLWdyb3VwLXdhcm5pbmdcIiB0aXRsZT1cIiR7ZXNjYXBlSHRtbChncm91cFdhcm5pbmcucHJldmlldyl9XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtmb250LXNpemU6MC43NWVtO2NvbG9yOiNiNDUzMDk7XCI+XHUyNkEwICR7ZXNjYXBlSHRtbChncm91cFdhcm5pbmcubWVzc2FnZSl9PC9kaXY+YCA6ICcnfVxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJtaW4td2lkdGg6MTIwcHg7XCI+XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInNraWxsLXByb2ZpY2llbmN5LWlucHV0XCIgZGF0YS1za2lsbD1cIiR7c2tpbGxOYW1lRXNjfVwiXG4gICAgICAgICAgICB0aXRsZT1cIlNlc3Npb24tb25seSBwcm9maWNpZW5jeSBsYWJlbCB1c2VkIHdoZW4gcmVuZGVyaW5nIGlubGluZSBza2lsbCBidWxsZXRzXCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtmb250LXNpemU6MC44ZW07cGFkZGluZzo0cHggNnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiAkeyFwcm9maWNpZW5jeUtleSA/ICdzZWxlY3RlZCcgOiAnJ30+Tm9uZTwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZ2lubmVyXCIgJHtwcm9maWNpZW5jeUtleSA9PT0gJ2JlZ2lubmVyJyA/ICdzZWxlY3RlZCcgOiAnJ30+QmVnaW5uZXI8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmYW1pbGlhclwiICR7cHJvZmljaWVuY3lLZXkgPT09ICdmYW1pbGlhcicgPyAnc2VsZWN0ZWQnIDogJyd9PkZhbWlsaWFyPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaW50ZXJtZWRpYXRlXCIgJHtwcm9maWNpZW5jeUtleSA9PT0gJ2ludGVybWVkaWF0ZScgPyAnc2VsZWN0ZWQnIDogJyd9PkludGVybWVkaWF0ZTwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFkdmFuY2VkXCIgJHtwcm9maWNpZW5jeUtleSA9PT0gJ2FkdmFuY2VkJyA/ICdzZWxlY3RlZCcgOiAnJ30+QWR2YW5jZWQ8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJleHBlcnRcIiAke3Byb2ZpY2llbmN5S2V5ID09PSAnZXhwZXJ0JyA/ICdzZWxlY3RlZCcgOiAnJ30+RXhwZXJ0PC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cIm1pbi13aWR0aDoxODBweDtcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cInNraWxsLXN1YnNraWxscy1pbnB1dFwiIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIlxuICAgICAgICAgICAgdmFsdWU9XCIke2VzY2FwZUh0bWwoc3Vic2tpbGxzLmpvaW4oJywgJykpfVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gUGFuZGFzLCBOdW1QeVwiXG4gICAgICAgICAgICB0aXRsZT1cIkNvbW1hLXNlcGFyYXRlZCBzdWItc2tpbGxzIHVzZWQgaW4gaW5saW5lIHNraWxsIGJ1bGxldHNcIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO2ZvbnQtc2l6ZTowLjhlbTtwYWRkaW5nOjRweCA2cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6NHB4O1wiLz5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwibWluLXdpZHRoOjE4MHB4O1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwic2tpbGwtcGFyZW50aGV0aWNhbC1pbnB1dFwiIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIlxuICAgICAgICAgICAgdmFsdWU9XCIke2VzY2FwZUh0bWwocGFyZW50aGV0aWNhbEtleSl9XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiT3B0aW9uYWwgaW5saW5lIG5vdGVcIlxuICAgICAgICAgICAgdGl0bGU9XCJGcmVlLWZvcm0gcGFyZW50aGV0aWNhbCBvdmVycmlkZSBmb3IgdGhlIHJlbmRlcmVkIGlubGluZSBza2lsbCBsYWJlbFwiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Zm9udC1zaXplOjAuOGVtO3BhZGRpbmc6NHB4IDZweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo0cHg7XCIvPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQ+PHN0cm9uZz4ke2VzY2FwZUh0bWwocmVjb21tZW5kYXRpb25UZXh0KX08L3N0cm9uZz48L3RkPlxuICAgICAgICA8dGQ+JHtjb25maWRlbmNlQmFkZ2V9PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwibWF4LXdpZHRoOjMwMHB4O1wiPjxzbWFsbD4ke2VzY2FwZUh0bWwoZnVsbFJlYXNvbmluZ1RleHQpfTwvc21hbGw+PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwibWluLXdpZHRoOjI2MHB4O1wiPlxuICAgICAgICAgICR7aXNOZXcgPyBgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cInNraWxsLW1hdGNoLWlucHV0XCJcbiAgICAgICAgICAgIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIlxuICAgICAgICAgICAgdmFsdWU9XCIke2VzY2FwZUh0bWwobWF0Y2hWYWx1ZSl9XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZXhwXzEsIGV4cF8yXCJcbiAgICAgICAgICAgIHRpdGxlPVwiJHtlc2NhcGVIdG1sKG1hdGNoSGVscCl9XCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtmb250LXNpemU6MC44NWVtO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7XCJcbiAgICAgICAgICAvPjxzcGFuIGNsYXNzPVwiZGVyaXZlZC15ZWFycy1oaW50XCIgZGF0YS1za2lsbD1cIiR7c2tpbGxOYW1lRXNjfVwiIHRpdGxlPVwiRXN0aW1hdGVkIHllYXJzIGRlcml2ZWQgZnJvbSBtYXRjaGVkIGV4cGVyaWVuY2UgZW50cmllc1wiIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDo0cHg7Zm9udC1zaXplOjAuOGVtO2NvbG9yOiM2YjcyODA7XCI+JHtlc2NhcGVIdG1sKHllYXJzSGludCl9PC9zcGFuPmAgOiAnPHNwYW4gc3R5bGU9XCJjb2xvcjojOWNhM2FmO1wiPlx1MjAxNDwvc3Bhbj4nfVxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb24tYnRuc1wiIHN0eWxlPVwid2hpdGUtc3BhY2U6bm93cmFwO1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2RlZmF1bHRBY3Rpb24gPT09ICdlbXBoYXNpemUnICAgID8gJ2FjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImVtcGhhc2l6ZVwiICAgIGFyaWEtbGFiZWw9XCJFbXBoYXNpemUgJHtza2lsbE5hbWVFc2N9XCIgICAgYXJpYS1wcmVzc2VkPVwiJHtkZWZhdWx0QWN0aW9uID09PSAnZW1waGFzaXplJ31cIiAgICB0aXRsZT1cIkVtcGhhc2l6ZSBcdTIwMTQgZmVhdHVyZSBwcm9taW5lbnRseVwiIHN0eWxlPVwiY29sb3I6IzEwYjk4MTtcIj5cdTI3OTU8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4gJHtkZWZhdWx0QWN0aW9uID09PSAnaW5jbHVkZScgICAgICA/ICdhY3RpdmUnIDogJyd9XCIgZGF0YS1hY3Rpb249XCJpbmNsdWRlXCIgICAgICBhcmlhLWxhYmVsPVwiSW5jbHVkZSAke3NraWxsTmFtZUVzY31cIiAgICAgIGFyaWEtcHJlc3NlZD1cIiR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2luY2x1ZGUnfVwiICAgICAgdGl0bGU9XCJJbmNsdWRlIFx1MjAxNCBzdGFuZGFyZCBsaXN0aW5nXCI+XHUyNzEzPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2RlLWVtcGhhc2l6ZScgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiZGUtZW1waGFzaXplXCIgYXJpYS1sYWJlbD1cIkRlLWVtcGhhc2l6ZSAke3NraWxsTmFtZUVzY31cIiBhcmlhLXByZXNzZWQ9XCIke2RlZmF1bHRBY3Rpb24gPT09ICdkZS1lbXBoYXNpemUnfVwiIHRpdGxlPVwiRGUtZW1waGFzaXplIFx1MjAxNCBicmllZiBtZW50aW9uXCIgICAgc3R5bGU9XCJjb2xvcjojZjU5ZTBiO1wiPlx1Mjc5NjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2RlZmF1bHRBY3Rpb24gPT09ICdleGNsdWRlJyAgICAgID8gJ2FjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImV4Y2x1ZGVcIiAgICAgIGFyaWEtbGFiZWw9XCJFeGNsdWRlICR7c2tpbGxOYW1lRXNjfVwiICAgICAgYXJpYS1wcmVzc2VkPVwiJHtkZWZhdWx0QWN0aW9uID09PSAnZXhjbHVkZSd9XCIgICAgICB0aXRsZT1cIkV4Y2x1ZGUgXHUyMDE0IG9taXQgZnJvbSBDVlwiICAgICAgICAgIHN0eWxlPVwiY29sb3I6I2VmNDQ0NDtcIj4ke2V5ZVNsYXNoSWNvbigpfTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGRhdGEtYWN0aW9uPVwicm93LXVwXCIgICBhcmlhLWxhYmVsPVwiTW92ZSAke3NraWxsTmFtZUVzY30gZWFybGllclwiIHRpdGxlPVwiTW92ZSB1cFwiICAgJHtpc0ZpcnN0ID8gJ2Rpc2FibGVkJyA6ICcnfT5cdTIxOTE8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBkYXRhLWFjdGlvbj1cInJvdy1kb3duXCIgYXJpYS1sYWJlbD1cIk1vdmUgJHtza2lsbE5hbWVFc2N9IGxhdGVyXCIgICB0aXRsZT1cIk1vdmUgZG93blwiICR7aXNMYXN0ICA/ICdkaXNhYmxlZCcgOiAnJ30+XHUyMTkzPC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIGA7XG4gIH0pO1xuXG4gIHRhYmxlSFRNTCArPSAnPC90Ym9keT48L3RhYmxlPic7XG4gIGNvbnRhaW5lci5pbm5lckhUTUwgPSB0YWJsZUhUTUw7XG5cbiAgLy8gU2F2ZSBncm91cCBrZXkgZm9yIHRoaXMgc2Vzc2lvbiB3aGVuIHVzZXIgZmluaXNoZXMgZWRpdGluZ1xuICBjb250YWluZXIucXVlcnlTZWxlY3RvcignLnNraWxsLWNhdGVnb3J5LW1hbmFnZXInKT8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZSA9PiB7XG4gICAgY29uc3QgY2F0ZWdvcnlNYW5hZ2VySW5wdXQgPSBlLnRhcmdldC5jbG9zZXN0KCcuc2tpbGwtY2F0ZWdvcnktbWFuYWdlci1pbnB1dCcpO1xuICAgIGlmIChjYXRlZ29yeU1hbmFnZXJJbnB1dCkge1xuICAgICAgY29uc3QgbWFuYWdlclJvdyA9IGNhdGVnb3J5TWFuYWdlcklucHV0LmNsb3Nlc3QoJy5za2lsbC1jYXRlZ29yeS1tYW5hZ2VyLXJvdycpO1xuICAgICAgY29uc3Qgb2xkQ2F0ZWdvcnkgPSBtYW5hZ2VyUm93Py5kYXRhc2V0LmNhdGVnb3J5IHx8ICcnO1xuICAgICAgY29uc3QgbmV3Q2F0ZWdvcnkgPSBjYXRlZ29yeU1hbmFnZXJJbnB1dC52YWx1ZS50cmltKCk7XG4gICAgICBpZiAoIW9sZENhdGVnb3J5IHx8ICFuZXdDYXRlZ29yeSB8fCBvbGRDYXRlZ29yeSA9PT0gbmV3Q2F0ZWdvcnkpIHtcbiAgICAgICAgaWYgKG1hbmFnZXJSb3cpIGNhdGVnb3J5TWFuYWdlcklucHV0LnZhbHVlID0gb2xkQ2F0ZWdvcnk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF9yZW5hbWVTa2lsbENhdGVnb3J5TG9jYWxseShvbGRDYXRlZ29yeSwgbmV3Q2F0ZWdvcnkpO1xuICAgICAgcmVuYW1lU2tpbGxDYXRlZ29yeShvbGRDYXRlZ29yeSwgbmV3Q2F0ZWdvcnkpXG4gICAgICAgIC50aGVuKCgpID0+IF9yZW5kZXJTa2lsbHNUYWJsZShjb250YWluZXIsIHJlY29tbWVuZGVkU2V0LCBkYXRhLCBoYXJkU2tpbGxTZXQsIHNvZnRTa2lsbFNldCkpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgX3JlbmFtZVNraWxsQ2F0ZWdvcnlMb2NhbGx5KG5ld0NhdGVnb3J5LCBvbGRDYXRlZ29yeSk7XG4gICAgICAgICAgaWYgKG1hbmFnZXJSb3cpIGNhdGVnb3J5TWFuYWdlcklucHV0LnZhbHVlID0gb2xkQ2F0ZWdvcnk7XG4gICAgICAgICAgc2hvd1RvYXN0KCdGYWlsZWQgdG8gcmVuYW1lIHNraWxsIGNhdGVnb3J5LicsICdlcnJvcicpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcjc2tpbGxzLXJldmlldy10YWJsZSB0Ym9keScpPy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBlID0+IHtcbiAgICBjb25zdCBjYXRlZ29yeUlucHV0ID0gZS50YXJnZXQuY2xvc2VzdCgnLnNraWxsLWNhdGVnb3J5LWlucHV0Jyk7XG5cbiAgY29uc3QgYWRkU2tpbGxGb3JtID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNhZGQtc2tpbGwtZm9ybScpO1xuICBjb25zdCB0b2dnbGVBZGRTa2lsbEZvcm0gPSAoKSA9PiB7XG4gICAgaWYgKCFhZGRTa2lsbEZvcm0pIHJldHVybjtcbiAgICBhZGRTa2lsbEZvcm0uc3R5bGUuZGlzcGxheSA9IGFkZFNraWxsRm9ybS5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnYmxvY2snIDogJ25vbmUnO1xuICB9O1xuICBjb250YWluZXIucXVlcnlTZWxlY3RvcignI3RvZ2dsZS1hZGQtc2tpbGwtZm9ybScpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRvZ2dsZUFkZFNraWxsRm9ybSk7XG4gIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcjY2FuY2VsLWFkZC1za2lsbCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBpZiAoIWFkZFNraWxsRm9ybSkgcmV0dXJuO1xuICAgIGFkZFNraWxsRm9ybS5yZXNldCgpO1xuICAgIGFkZFNraWxsRm9ybS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9KTtcbiAgYWRkU2tpbGxGb3JtPy5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBhc3luYyBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoYWRkU2tpbGxGb3JtKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2F2ZVVzZXJDcmVhdGVkU2tpbGwoe1xuICAgICAgICBuYW1lOiBmb3JtRGF0YS5nZXQoJ25hbWUnKSxcbiAgICAgICAgY2F0ZWdvcnk6IGZvcm1EYXRhLmdldCgnY2F0ZWdvcnknKSxcbiAgICAgICAgZ3JvdXA6IGZvcm1EYXRhLmdldCgnZ3JvdXAnKSxcbiAgICAgICAgcHJvZmljaWVuY3k6IGZvcm1EYXRhLmdldCgncHJvZmljaWVuY3knKSxcbiAgICAgICAgc3Vic2tpbGxzOiBmb3JtRGF0YS5nZXQoJ3N1YnNraWxscycpLFxuICAgICAgICBwYXJlbnRoZXRpY2FsOiBmb3JtRGF0YS5nZXQoJ3BhcmVudGhldGljYWwnKSxcbiAgICAgIH0pO1xuICAgICAgc2hvd1RvYXN0KCdTZXNzaW9uLW9ubHkgc2tpbGwgYWRkZWQuJyk7XG4gICAgICBhZGRTa2lsbEZvcm0ucmVzZXQoKTtcbiAgICAgIGFkZFNraWxsRm9ybS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgX3JlbmRlclNraWxsc1RhYmxlKGNvbnRhaW5lciwgcmVjb21tZW5kZWRTZXQsIGRhdGEsIGhhcmRTa2lsbFNldCwgc29mdFNraWxsU2V0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2hvd1RvYXN0KGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBhZGQgc2tpbGwuJywgJ2Vycm9yJyk7XG4gICAgfVxuICB9KTtcbiAgICBpZiAoY2F0ZWdvcnlJbnB1dCkge1xuICAgICAgY29uc3Qgc2tpbGxOYW1lID0gY2F0ZWdvcnlJbnB1dC5kYXRhc2V0LnNraWxsO1xuICAgICAgY29uc3QgbmV3Q2F0ZWdvcnkgPSBjYXRlZ29yeUlucHV0LnZhbHVlLnRyaW0oKTtcbiAgICAgIHNhdmVTa2lsbENhdGVnb3J5T3ZlcnJpZGUoc2tpbGxOYW1lLCBuZXdDYXRlZ29yeSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICBzaG93VG9hc3QoJ0ZhaWxlZCB0byBzYXZlIHNraWxsIGNhdGVnb3J5LicsICdlcnJvcicpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBlLnRhcmdldC5jbG9zZXN0KCcuc2tpbGwtZ3JvdXAtaW5wdXQnKTtcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIGNvbnN0IHNraWxsTmFtZSA9IGlucHV0LmRhdGFzZXQuc2tpbGw7XG4gICAgICBjb25zdCBuZXdHcm91cCA9IGlucHV0LnZhbHVlLnRyaW0oKTtcbiAgICAgIHNhdmVTa2lsbEdyb3VwT3ZlcnJpZGUoc2tpbGxOYW1lLCBuZXdHcm91cCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICBzaG93VG9hc3QoJ0ZhaWxlZCB0byBzYXZlIHNraWxsIGdyb3VwLicsICdlcnJvcicpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcXVhbGlmaWVySW5wdXQgPSBlLnRhcmdldC5jbG9zZXN0KCcuc2tpbGwtcHJvZmljaWVuY3ktaW5wdXQsIC5za2lsbC1zdWJza2lsbHMtaW5wdXQsIC5za2lsbC1wYXJlbnRoZXRpY2FsLWlucHV0Jyk7XG4gICAgaWYgKCFxdWFsaWZpZXJJbnB1dCkgcmV0dXJuO1xuICAgIGNvbnN0IHNraWxsTmFtZSA9IHF1YWxpZmllcklucHV0LmRhdGFzZXQuc2tpbGw7XG4gICAgY29uc3Qgcm93ID0gcXVhbGlmaWVySW5wdXQuY2xvc2VzdCgndHJbZGF0YS1za2lsbF0nKTtcbiAgICBpZiAoIXNraWxsTmFtZSB8fCAhcm93KSByZXR1cm47XG4gICAgY29uc3QgcHJvZmljaWVuY3kgPSByb3cucXVlcnlTZWxlY3RvcignLnNraWxsLXByb2ZpY2llbmN5LWlucHV0Jyk/LnZhbHVlIHx8ICcnO1xuICAgIGNvbnN0IHN1YnNraWxsc1ZhbHVlID0gcm93LnF1ZXJ5U2VsZWN0b3IoJy5za2lsbC1zdWJza2lsbHMtaW5wdXQnKT8udmFsdWUgfHwgJyc7XG4gICAgY29uc3QgcGFyZW50aGV0aWNhbCA9IHJvdy5xdWVyeVNlbGVjdG9yKCcuc2tpbGwtcGFyZW50aGV0aWNhbC1pbnB1dCcpPy52YWx1ZSB8fCAnJztcbiAgICBzYXZlU2tpbGxRdWFsaWZpZXJPdmVycmlkZShza2lsbE5hbWUsIHtcbiAgICAgIHByb2ZpY2llbmN5LFxuICAgICAgc3Vic2tpbGxzOiBzdWJza2lsbHNWYWx1ZSxcbiAgICAgIHBhcmVudGhldGljYWwsXG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgc2hvd1RvYXN0KCdGYWlsZWQgdG8gc2F2ZSBza2lsbCBxdWFsaWZpZXJzLicsICdlcnJvcicpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBVcGRhdGUgZGVyaXZlZC15ZWFycyBoaW50IGxpdmUgYXMgdXNlciBlZGl0cyB0aGUgZXhwZXJpZW5jZSBtYXRjaCBpbnB1dFxuICBjb250YWluZXIucXVlcnlTZWxlY3RvcignI3NraWxscy1yZXZpZXctdGFibGUgdGJvZHknKT8uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBlID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5za2lsbC1tYXRjaC1pbnB1dCcpO1xuICAgIGlmICghaW5wdXQpIHJldHVybjtcbiAgICBjb25zdCBza2lsbE5hbWUgPSBpbnB1dC5kYXRhc2V0LnNraWxsO1xuICAgIGNvbnN0IGlkcyA9IGlucHV0LnZhbHVlLnNwbGl0KCcsJykubWFwKHggPT4geC50cmltKCkpLmZpbHRlcihCb29sZWFuKTtcbiAgICBjb25zdCB5ZWFycyA9IF9jb21wdXRlWWVhcnNGcm9tSWRzKGlkcywgYWxsRXhwZXJpZW5jZXMpO1xuICAgIGNvbnN0IGhpbnQgPSB5ZWFycyAhPSBudWxsID8gYH4ke3llYXJzfSB5ciR7eWVhcnMgPT09IDEgPyAnJyA6ICdzJ31gIDogJ25vIG1hdGNoJztcbiAgICBjb25zdCBzcGFuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYC5kZXJpdmVkLXllYXJzLWhpbnRbZGF0YS1za2lsbD1cIiR7Q1NTLmVzY2FwZShza2lsbE5hbWUpfVwiXWApO1xuICAgIGlmIChzcGFuKSBzcGFuLnRleHRDb250ZW50ID0gaGludDtcbiAgfSk7XG5cbiAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNza2lsbHMtcmV2aWV3LXRhYmxlIHRib2R5Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XG4gICAgY29uc3QgdHlwZVRvZ2dsZSA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5za2lsbC10eXBlLXRvZ2dsZScpO1xuICAgIGlmICh0eXBlVG9nZ2xlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3Qgc2tpbGxOYW1lID0gdHlwZVRvZ2dsZS5kYXRhc2V0LnNraWxsO1xuICAgICAgY29uc3QgdG9nZ2xlVG8gPSB0eXBlVG9nZ2xlLmRhdGFzZXQudG9nZ2xlVG8gfHwgbnVsbDtcbiAgICAgIHdpbmRvdy5fc2tpbGxUeXBlT3ZlcnJpZGVzID0gd2luZG93Ll9za2lsbFR5cGVPdmVycmlkZXMgfHwge307XG4gICAgICBpZiAodG9nZ2xlVG8pIHtcbiAgICAgICAgd2luZG93Ll9za2lsbFR5cGVPdmVycmlkZXNbc2tpbGxOYW1lLnRvTG93ZXJDYXNlKCldID0gdG9nZ2xlVG87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgd2luZG93Ll9za2lsbFR5cGVPdmVycmlkZXNbc2tpbGxOYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgICAgfVxuICAgICAgc2F2ZVNraWxsUXVhbGlmaWVyT3ZlcnJpZGUoc2tpbGxOYW1lLCB7XG4gICAgICAgIHByb2ZpY2llbmN5OiBjb250YWluZXIucXVlcnlTZWxlY3RvcihgLnNraWxsLXByb2ZpY2llbmN5LWlucHV0W2RhdGEtc2tpbGw9XCIke19jc3NFc2NhcGUoc2tpbGxOYW1lKX1cIl1gKT8udmFsdWUgfHwgJycsXG4gICAgICAgIHN1YnNraWxsczogY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYC5za2lsbC1zdWJza2lsbHMtaW5wdXRbZGF0YS1za2lsbD1cIiR7X2Nzc0VzY2FwZShza2lsbE5hbWUpfVwiXWApPy52YWx1ZSB8fCAnJyxcbiAgICAgICAgcGFyZW50aGV0aWNhbDogY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYC5za2lsbC1wYXJlbnRoZXRpY2FsLWlucHV0W2RhdGEtc2tpbGw9XCIke19jc3NFc2NhcGUoc2tpbGxOYW1lKX1cIl1gKT8udmFsdWUgfHwgJycsXG4gICAgICAgIHNraWxsX3R5cGU6IHRvZ2dsZVRvIHx8ICcnLFxuICAgICAgfSkudGhlbigoKSA9PiBfcmVuZGVyU2tpbGxzVGFibGUoY29udGFpbmVyLCByZWNvbW1lbmRlZFNldCwgZGF0YSwgaGFyZFNraWxsU2V0LCBzb2Z0U2tpbGxTZXQpKVxuICAgICAgICAuY2F0Y2goKCkgPT4gc2hvd1RvYXN0KCdGYWlsZWQgdG8gc2F2ZSBza2lsbCB0eXBlIG92ZXJyaWRlLicsICdlcnJvcicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhaUJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5za2lsbC1hcHBseS1haScpO1xuICAgIGlmIChhaUJ0bikge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IHNraWxsTmFtZSA9IGFpQnRuLmRhdGFzZXQuc2tpbGw7XG4gICAgICBjb25zdCBmaWVsZCA9IGFpQnRuLmRhdGFzZXQuYWlGaWVsZDtcbiAgICAgIGNvbnN0IHZhbHVlID0gYWlCdG4uZGF0YXNldC5haVZhbHVlIHx8ICcnO1xuICAgICAgaWYgKGZpZWxkID09PSAnY2F0ZWdvcnknKSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYC5za2lsbC1jYXRlZ29yeS1pbnB1dFtkYXRhLXNraWxsPVwiJHtfY3NzRXNjYXBlKHNraWxsTmFtZSl9XCJdYCk7XG4gICAgICAgIGlmIChpbnB1dCkgaW5wdXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgc2F2ZVNraWxsQ2F0ZWdvcnlPdmVycmlkZShza2lsbE5hbWUsIHZhbHVlKVxuICAgICAgICAgIC50aGVuKCgpID0+IF9yZW5kZXJTa2lsbHNUYWJsZShjb250YWluZXIsIHJlY29tbWVuZGVkU2V0LCBkYXRhLCBoYXJkU2tpbGxTZXQsIHNvZnRTa2lsbFNldCkpXG4gICAgICAgICAgLmNhdGNoKCgpID0+IHNob3dUb2FzdCgnRmFpbGVkIHRvIGFwcGx5IEFJIGNhdGVnb3J5IHN1Z2dlc3Rpb24uJywgJ2Vycm9yJykpO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZCA9PT0gJ2dyb3VwJykge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAuc2tpbGwtZ3JvdXAtaW5wdXRbZGF0YS1za2lsbD1cIiR7X2Nzc0VzY2FwZShza2lsbE5hbWUpfVwiXWApO1xuICAgICAgICBpZiAoaW5wdXQpIGlucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHNhdmVTa2lsbEdyb3VwT3ZlcnJpZGUoc2tpbGxOYW1lLCB2YWx1ZSlcbiAgICAgICAgICAudGhlbigoKSA9PiBfcmVuZGVyU2tpbGxzVGFibGUoY29udGFpbmVyLCByZWNvbW1lbmRlZFNldCwgZGF0YSwgaGFyZFNraWxsU2V0LCBzb2Z0U2tpbGxTZXQpKVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiBzaG93VG9hc3QoJ0ZhaWxlZCB0byBhcHBseSBBSSBncm91cCBzdWdnZXN0aW9uLicsICdlcnJvcicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgnLmljb24tYnRuJyk7XG4gICAgaWYgKCFidG4pIHJldHVybjtcbiAgICBjb25zdCB0ciA9IGJ0bi5jbG9zZXN0KCd0cltkYXRhLXNraWxsXScpO1xuICAgIGlmICghdHIpIHJldHVybjtcbiAgICBjb25zdCBza2lsbE5hbWUgPSB0ci5kYXRhc2V0LnNraWxsO1xuICAgIGNvbnN0IGFjdGlvbiAgICA9IGJ0bi5kYXRhc2V0LmFjdGlvbjtcbiAgICBpZiAoYWN0aW9uID09PSAncm93LXVwJykge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG1vdmVTa2lsbFJvdyhza2lsbE5hbWUsIC0xKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3Jvdy1kb3duJykge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG1vdmVTa2lsbFJvdyhza2lsbE5hbWUsICsxKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbikge1xuICAgICAgaGFuZGxlQWN0aW9uQ2xpY2soc2tpbGxOYW1lLCBhY3Rpb24sICdza2lsbCcpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5za2lsbC1jYXRlZ29yeS1tYW5hZ2VyJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XG4gICAgY29uc3QgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgnLmljb24tYnRuW2RhdGEtYWN0aW9uXj1cImNhdGVnb3J5LVwiXScpO1xuICAgIGlmICghYnRuKSByZXR1cm47XG4gICAgY29uc3QgY2F0ZWdvcnlOYW1lID0gYnRuLmRhdGFzZXQuY2F0ZWdvcnkgfHwgJyc7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gYnRuLmRhdGFzZXQuYWN0aW9uID09PSAnY2F0ZWdvcnktdXAnID8gLTEgOiAxO1xuICAgIGNvbnN0IHVwZGF0ZWRPcmRlciA9IF9tb3ZlU2tpbGxDYXRlZ29yeUxvY2FsbHkoY2F0ZWdvcnlOYW1lLCBkaXJlY3Rpb24pO1xuICAgIGlmICghdXBkYXRlZE9yZGVyKSByZXR1cm47XG4gICAgc2F2ZVNraWxsQ2F0ZWdvcnlPcmRlcih1cGRhdGVkT3JkZXIpXG4gICAgICAudGhlbigoKSA9PiBfcmVuZGVyU2tpbGxzVGFibGUoY29udGFpbmVyLCByZWNvbW1lbmRlZFNldCwgZGF0YSwgaGFyZFNraWxsU2V0LCBzb2Z0U2tpbGxTZXQpKVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgX21vdmVTa2lsbENhdGVnb3J5TG9jYWxseShjYXRlZ29yeU5hbWUsIC1kaXJlY3Rpb24pO1xuICAgICAgICBzaG93VG9hc3QoJ0ZhaWxlZCB0byBzYXZlIHNraWxsIGNhdGVnb3J5IG9yZGVyLicsICdlcnJvcicpO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IHNraWxsVG9vbGJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBza2lsbFRvb2xiYXIuY2xhc3NOYW1lID0gJ2J1bGstdG9vbGJhcic7XG4gIHNraWxsVG9vbGJhci5pbm5lckhUTUwgPSBgXG4gICAgPHNwYW4+QnVsazo8L3NwYW4+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ1bGstYnRuIGJ1bGstcmVjb21tZW5kZWRcIiBvbmNsaWNrPVwiYnVsa0FjdGlvbigncmVjb21tZW5kZWQnLCdza2lsbCcpXCIgdGl0bGU9XCJTZXQgYWxsIHRvIHRoZSBMTE0gcmVjb21tZW5kYXRpb25cIj5cdTI3MjggQWNjZXB0IEFsbCBSZWNvbW1lbmRlZDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLWVtcGhhc2l6ZVwiICAgb25jbGljaz1cImJ1bGtBY3Rpb24oJ2VtcGhhc2l6ZScsJ3NraWxsJylcIj5cdTI3OTUgRW1waGFzaXplIEFsbDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLWluY2x1ZGVcIiAgICAgb25jbGljaz1cImJ1bGtBY3Rpb24oJ2luY2x1ZGUnLCdza2lsbCcpXCI+XHUyNzEzIEluY2x1ZGUgQWxsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ1bGstYnRuIGJ1bGstZXhjbHVkZVwiICAgICBvbmNsaWNrPVwiYnVsa0FjdGlvbignZXhjbHVkZScsJ3NraWxsJylcIj4ke2V5ZVNsYXNoSWNvbigpfSBFeGNsdWRlIEFsbDwvYnV0dG9uPlxuICBgO1xuICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKHNraWxsVG9vbGJhciwgY29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuXG4gICQoJyNza2lsbHMtcmV2aWV3LXRhYmxlJykuRGF0YVRhYmxlKHtcbiAgICBwYWdpbmc6IGZhbHNlLFxuICAgIG9yZGVyOiBbXSxcbiAgICBsYW5ndWFnZTogeyBzZWFyY2g6ICdGaWx0ZXIgc2tpbGxzOicgfVxuICB9KTtcbiAgX3VwZGF0ZVBhZ2VFc3RpbWF0ZSgpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgUm93IHJlb3JkZXIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIG1vdmVTa2lsbFJvdyhza2lsbE5hbWUsIGRpcmVjdGlvbikge1xuICBjb25zdCBhcnIgPSB3aW5kb3cuX3NraWxsc09yZGVyZWQ7XG4gIGlmICghYXJyKSByZXR1cm47XG4gIGNvbnN0IGlkeCA9IGFyci5maW5kSW5kZXgocyA9PiAodHlwZW9mIHMgPT09ICdzdHJpbmcnID8gcyA6IHMubmFtZSB8fCBzKSA9PT0gc2tpbGxOYW1lKTtcbiAgaWYgKGlkeCA8IDApIHJldHVybjtcbiAgY29uc3QgbmV3SWR4ID0gaWR4ICsgZGlyZWN0aW9uO1xuICBpZiAobmV3SWR4IDwgMCB8fCBuZXdJZHggPj0gYXJyLmxlbmd0aCkgcmV0dXJuO1xuICBbYXJyW2lkeF0sIGFycltuZXdJZHhdXSA9IFthcnJbbmV3SWR4XSwgYXJyW2lkeF1dO1xuICB3aW5kb3cuX3NraWxsc09yZGVyZWQgPSBhcnI7XG4gIF9yZW5kZXJTa2lsbHNUYWJsZShudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTtcbiAgZmV0Y2goJy9hcGkvcmVvcmRlci1yb3dzJywge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3NraWxsJywgb3JkZXJlZF9pZHM6IGFyci5tYXAocyA9PiAodHlwZW9mIHMgPT09ICdzdHJpbmcnID8gcyA6IHMubmFtZSB8fCBzKSkgfSlcbiAgfSkuY2F0Y2goKCkgPT4ge30pO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgTGVnYWN5IGludGVyYWN0aXZlLW1vZGUgcmVzcG9uc2UgaGFuZGxlciBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlU2tpbGxzUmVzcG9uc2UobWVzc2FnZSkge1xuICB3aW5kb3cud2FpdGluZ0ZvclNraWxsc1Jlc3BvbnNlID0gZmFsc2U7XG4gIGNvbnN0IHJlc3BvbnNlID0gbWVzc2FnZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChyZXNwb25zZS5pbmNsdWRlcygneWVzJykpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnRXhjZWxsZW50ISBJXFwnbGwgdXNlIHRoaXMgc2tpbGxzIHN0cmF0ZWd5IGluIHlvdXIgQ1YuJyk7XG4gIH0gZWxzZSBpZiAocmVzcG9uc2UuaW5jbHVkZXMoJ25vJykgfHwgcmVzcG9uc2UuaW5jbHVkZXMoJ21vZGlmeScpKSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ0kgdW5kZXJzdGFuZC4gV2hhdCBjaGFuZ2VzIHdvdWxkIHlvdSBsaWtlIG1lIHRvIG1ha2UgdG8gdGhlIHNraWxscyBlbXBoYXNpcz8nKTtcbiAgfSBlbHNlIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnSVxcJ2xsIG5vdGUgeW91ciBmZWVkYmFjayBvbiB0aGUgc2tpbGxzIHN0cmF0ZWd5LicpO1xuICB9XG5cbiAgZmluaXNoSW50ZXJhY3RpdmVSZXZpZXcoKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFN1Ym1pdCBkZWNpc2lvbnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFNraWxsRGVjaXNpb25zKCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogc2tpbGxzX3VpX3N1Ym1pdF9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTAzLTI1VDIxOjM5OjQ4WidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6c2tpbGxzLXJldmlldy5zdWJtaXRcbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zXG4gICAqICAgLSBQT1NUIC9hcGkvY3YvbGF5b3V0LWVzdGltYXRlXG4gICAqICAgcmVhZHM6XG4gICAqICAgLSB3aW5kb3c6dXNlclNlbGVjdGlvbnMuc2tpbGxzXG4gICAqICAgLSB3aW5kb3c6X3NraWxsc09yZGVyZWRcbiAgICogICAtIGRvbTouc2tpbGwtbWF0Y2gtaW5wdXQudmFsdWVcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zLmRlY2lzaW9uc1xuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9ucy5leHRyYV9za2lsbHNcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL3Jldmlldy1kZWNpc2lvbnMuZXh0cmFfc2tpbGxfbWF0Y2hlc1xuICAgKiAgIC0gd2luZG93Ol9zYXZlZERlY2lzaW9ucy5za2lsbF9kZWNpc2lvbnNcbiAgICogICAtIHdpbmRvdzpfc2F2ZWREZWNpc2lvbnMuZXh0cmFfc2tpbGxzXG4gICAqICAgLSB3aW5kb3c6X3NhdmVkRGVjaXNpb25zLmV4dHJhX3NraWxsX21hdGNoZXNcbiAgICogICBub3RlczogU3VibWl0cyBza2lsbCBpbmNsdXNpb24gZGVjaXNpb25zIHRvZ2V0aGVyIHdpdGggc2Vzc2lvbi1vbmx5IGV4dHJhIHNraWxscyBhbmQgZXhwZXJpZW5jZS1tYXRjaCBldmlkZW5jZSBzbyBiYWNrZW5kIGdlbmVyYXRpb24gY2FuIG1hdGVyaWFsaXplIHRoZSBzYW1lIG92ZXJsYXkgc3RhdGUuXG4gICAqL1xuICBjb25zdCBkZWNpc2lvbnMgPSB1c2VyU2VsZWN0aW9ucy5za2lsbHM7XG4gIGNvbnN0IGNvdW50ID0gT2JqZWN0LmtleXMoZGVjaXNpb25zKS5sZW5ndGg7XG5cbiAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ05vIFNlbGVjdGlvbnMnLCAnUGxlYXNlIHNlbGVjdCBhY3Rpb25zIGZvciBhdCBsZWFzdCBvbmUgc2tpbGwgYmVmb3JlIHN1Ym1pdHRpbmcuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBleHRyYVNraWxscyA9ICh3aW5kb3cuX3NraWxsc09yZGVyZWQgfHwgW10pXG4gICAgICAuZmlsdGVyKHNraWxsID0+IHNraWxsICYmIHR5cGVvZiBza2lsbCA9PT0gJ29iamVjdCcgJiYgc2tpbGwuX2lzTmV3KVxuICAgICAgLmZpbHRlcihza2lsbCA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGRlY2lzaW9uc1tfc2tpbGxOYW1lKHNraWxsKV07XG4gICAgICAgIHJldHVybiBhY3Rpb24gPT09ICdpbmNsdWRlJyB8fCBhY3Rpb24gPT09ICdlbXBoYXNpemUnIHx8IGFjdGlvbiA9PT0gJ2RlLWVtcGhhc2l6ZSc7XG4gICAgICB9KVxuICAgICAgLm1hcChza2lsbCA9PiB7XG4gICAgICAgIGlmIChza2lsbC5faXNVc2VyQ3JlYXRlZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBfc2tpbGxOYW1lKHNraWxsKSxcbiAgICAgICAgICAgIGNhdGVnb3J5OiBTdHJpbmcoc2tpbGwuY2F0ZWdvcnkgfHwgJycpLnRyaW0oKSxcbiAgICAgICAgICAgIGdyb3VwOiBTdHJpbmcoc2tpbGwuZ3JvdXAgfHwgJycpLnRyaW0oKSxcbiAgICAgICAgICAgIHByb2ZpY2llbmN5OiBTdHJpbmcoc2tpbGwucHJvZmljaWVuY3kgfHwgJycpLnRyaW0oKSxcbiAgICAgICAgICAgIHN1YnNraWxsczogX25vcm1hbGl6ZVNraWxsU3Vic2tpbGxzKHNraWxsLnN1YnNraWxscyB8fCBza2lsbC5zdWJfc2tpbGxzIHx8IFtdKSxcbiAgICAgICAgICAgIHBhcmVudGhldGljYWw6IFN0cmluZyhza2lsbC5wYXJlbnRoZXRpY2FsIHx8ICcnKS50cmltKCksXG4gICAgICAgICAgICB1c2VyX2NyZWF0ZWQ6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3NraWxsTmFtZShza2lsbCk7XG4gICAgICB9KTtcbiAgICBjb25zdCBleHRyYVNraWxsTmFtZXMgPSBleHRyYVNraWxscy5tYXAoc2tpbGwgPT4gdHlwZW9mIHNraWxsID09PSAnc3RyaW5nJyA/IHNraWxsIDogc2tpbGwubmFtZSk7XG5cbiAgICBjb25zdCBtYXRjaElucHV0cyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnNraWxsLW1hdGNoLWlucHV0JykpO1xuICAgIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0KCh3aW5kb3cuX2FsbEV4cGVyaWVuY2VzIHx8IFtdKS5tYXAoZSA9PiBlLmlkKS5maWx0ZXIoQm9vbGVhbikpO1xuICAgIGNvbnN0IGV4dHJhU2tpbGxNYXRjaGVzID0ge307XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBtYXRjaElucHV0cykge1xuICAgICAgY29uc3Qgc2tpbGxOYW1lID0gaW5wdXQuZGF0YXNldC5za2lsbDtcbiAgICAgIGlmICghc2tpbGxOYW1lIHx8ICFleHRyYVNraWxsTmFtZXMuaW5jbHVkZXMoc2tpbGxOYW1lKSkgY29udGludWU7XG4gICAgICBjb25zdCBpZHMgPSBTdHJpbmcoaW5wdXQudmFsdWUgfHwgJycpXG4gICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgIC5tYXAoKHgpID0+IHgudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKCh4KSA9PiB4ICYmIGFsbG93ZWQuaGFzKHgpKTtcbiAgICAgIGlmIChpZHMubGVuZ3RoID4gMCkgZXh0cmFTa2lsbE1hdGNoZXNbc2tpbGxOYW1lXSA9IGlkcztcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL3Jldmlldy1kZWNpc2lvbnMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB0eXBlOiAnc2tpbGxzJyxcbiAgICAgICAgZGVjaXNpb25zOiBkZWNpc2lvbnMsXG4gICAgICAgIGV4dHJhX3NraWxsczogZXh0cmFTa2lsbHMsXG4gICAgICAgIGV4dHJhX3NraWxsX21hdGNoZXM6IGV4dHJhU2tpbGxNYXRjaGVzLFxuICAgICAgfSlcbiAgICB9KTtcblxuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgc3RhdGVNYW5hZ2VyLm1hcmtDb250ZW50Q2hhbmdlZCgpO1xuICAgICAgY29uc3QgZXh0cmFOb3RlID0gZXh0cmFTa2lsbHMubGVuZ3RoID4gMFxuICAgICAgICA/IGAgKCR7ZXh0cmFTa2lsbHMubGVuZ3RofSBuZXcgc2tpbGwocykgYWRkZWQgXHUyMDE0IGF2YWlsYWJsZSBmb3Igd3JpdGUtYmFjayB0byBtYXN0ZXIgQ1YgaW4gdGhlIEhhcnZlc3QgdGFiKWBcbiAgICAgICAgOiAnJztcbiAgICAgIHNob3dUb2FzdChgU2tpbGwgZGVjaXNpb25zIHNhdmVkICgke2NvdW50fSBpdGVtcykke2V4dHJhTm90ZX1gKTtcbiAgICAgIHNjaGVkdWxlQXRzUmVmcmVzaCgpO1xuICAgICAgLy8gUGVyc2lzdCBzYXZlZCBkZWNpc2lvbnMgbG9jYWxseSBzbyB0aGUgVUkgcmVmbGVjdHMgdGhlbSBpbW1lZGlhdGVseVxuICAgICAgd2luZG93Ll9zYXZlZERlY2lzaW9ucyA9IHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMgfHwge307XG4gICAgICB3aW5kb3cuX3NhdmVkRGVjaXNpb25zLnNraWxsX2RlY2lzaW9ucyA9IGRlY2lzaW9ucztcbiAgICAgIGlmICghd2luZG93Ll9zYXZlZERlY2lzaW9ucy5leHRyYV9za2lsbHMpIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMuZXh0cmFfc2tpbGxzID0gW107XG4gICAgICBpZiAoZXh0cmFTa2lsbHMubGVuZ3RoID4gMCkgd2luZG93Ll9zYXZlZERlY2lzaW9ucy5leHRyYV9za2lsbHMgPSBleHRyYVNraWxscztcbiAgICAgIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMuZXh0cmFfc2tpbGxfbWF0Y2hlcyA9IGV4dHJhU2tpbGxNYXRjaGVzO1xuICAgICAgdXNlclNlbGVjdGlvbnMuc2tpbGxzID0geyAuLi5kZWNpc2lvbnMgfTtcbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlSW5jbHVzaW9uQ291bnRzID09PSAnZnVuY3Rpb24nKSB1cGRhdGVJbmNsdXNpb25Db3VudHMoKTtcbiAgICAgIHN3aXRjaFRhYignYWNoaWV2ZW1lbnRzLXJldmlldycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIHNob3dUb2FzdChgRXJyb3I6ICR7ZXJyb3IuZXJyb3IgfHwgJ0ZhaWxlZCB0byBzYXZlIGRlY2lzaW9ucyd9YCwgJ2Vycm9yJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcignRXJyb3Igc3VibWl0dGluZyBza2lsbCBkZWNpc2lvbnM6JywgZXJyb3IpO1xuICAgIHNob3dUb2FzdCgnRmFpbGVkIHRvIHNhdmUgZGVjaXNpb25zLiBQbGVhc2UgdHJ5IGFnYWluLicsICdlcnJvcicpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFeHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQge1xuICBfcGFyc2VZZWFyRnJvbVN0cixcbiAgX2NvbXB1dGVZZWFyc0Zyb21JZHMsXG4gIHNhdmVTa2lsbEdyb3VwT3ZlcnJpZGUsXG4gIHNhdmVTa2lsbENhdGVnb3J5T3ZlcnJpZGUsXG4gIHJlbmFtZVNraWxsQ2F0ZWdvcnksXG4gIHNhdmVTa2lsbENhdGVnb3J5T3JkZXIsXG4gIHNhdmVTa2lsbFF1YWxpZmllck92ZXJyaWRlLFxuICBzYXZlVXNlckNyZWF0ZWRTa2lsbCxcbiAgYnVpbGRTa2lsbHNSZXZpZXdUYWJsZSxcbiAgX3JlbmRlclNraWxsc1RhYmxlLFxuICBtb3ZlU2tpbGxSb3csXG4gIGhhbmRsZVNraWxsc1Jlc3BvbnNlLFxuICBzdWJtaXRTa2lsbERlY2lzaW9ucyxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIGFjaGlldmVtZW50cy1yZXZpZXcuanNcbiAqIEVTIG1vZHVsZSBcdTIwMTQgQWNoaWV2ZW1lbnRzIHJldmlldyB0YWJsZSwgYWNoaWV2ZW1lbnRzIGVkaXRvciwgYW5kIEFJIHJld3JpdGUgbW9kYWwuXG4gKlxuICogRGVwZW5kZW5jaWVzIHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lOlxuICogICAtIHBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgICAgICAgICh3aW5kb3cpXG4gKiAgIC0gYWNoaWV2ZW1lbnREZWNpc2lvbnMgICAgICAgICAgKHdpbmRvdyBcdTIwMTQgYWxzbyBpbml0aWFsaXNlZCBoZXJlKVxuICogICAtIF9hY2hpZXZlbWVudHNPcmRlcmVkICAgICAgICAgICh3aW5kb3cgXHUyMDE0IGFsc28gaW5pdGlhbGlzZWQgaGVyZSlcbiAqICAgLSBfc3VnZ2VzdGVkQWNoc09yZGVyZWQgICAgICAgICAod2luZG93KVxuICogICAtIF9zYXZlZERlY2lzaW9ucyAgICAgICAgICAgICAgICh3aW5kb3cpXG4gKiAgIC0gYWNoaWV2ZW1lbnRFZGl0cyAgICAgICAgICAgICAgKHdpbmRvdylcbiAqICAgLSB1c2VyU2VsZWN0aW9ucyAgICAgICAgICAgICAgICAod2luZG93KVxuICogICAtIGdldEFjaGlldmVtZW50UmVjb21tZW5kYXRpb24gIChnbG9iYWxUaGlzIGZ1bmN0aW9uKVxuICogICAtIGdldEFjaGlldmVtZW50Q29uZmlkZW5jZSAgICAgIChnbG9iYWxUaGlzIGZ1bmN0aW9uKVxuICogICAtIGdldEFjaGlldmVtZW50UmVhc29uaW5nICAgICAgIChnbG9iYWxUaGlzIGZ1bmN0aW9uKVxuICogICAtIGVzY2FwZUh0bWwgICAgICAgICAgICAgICAgICAgIChnbG9iYWxUaGlzIGZ1bmN0aW9uKVxuICogICAtIGhhbmRsZUFjaGlldmVtZW50QWN0aW9uICAgICAgIChnbG9iYWxUaGlzIC8gdGhpcyBtb2R1bGUpXG4gKiAgIC0gYnVsa0FjaGlldmVtZW50QWN0aW9uICAgICAgICAgKGdsb2JhbFRoaXMgLyB0aGlzIG1vZHVsZSlcbiAqICAgLSBtb3ZlQWNoaWV2ZW1lbnRSb3cgICAgICAgICAgICAoZ2xvYmFsVGhpcyAvIHRoaXMgbW9kdWxlKVxuICogICAtIG1vdmVTdWdnZXN0ZWRBY2hpZXZlbWVudFJvdyAgIChnbG9iYWxUaGlzIC8gdGhpcyBtb2R1bGUpXG4gKiAgIC0gc2F2ZVRvcExldmVsQWNoaWV2ZW1lbnRGaWVsZCAgKGdsb2JhbFRoaXMgLyB0aGlzIG1vZHVsZSlcbiAqICAgLSBzYXZlU3VnZ2VzdGVkQWNoaWV2ZW1lbnRGaWVsZCAoZ2xvYmFsVGhpcyAvIHRoaXMgbW9kdWxlKVxuICogICAtIGFpUmV3cml0ZVRvcExldmVsQWNoaWV2ZW1lbnQgIChnbG9iYWxUaGlzIC8gdGhpcyBtb2R1bGUpXG4gKiAgIC0gYWlSZXdyaXRlU3VnZ2VzdGVkQWNoaWV2ZW1lbnQgKGdsb2JhbFRoaXMgLyB0aGlzIG1vZHVsZSlcbiAqICAgLSBkZWxldGVUb3BMZXZlbEFjaGlldmVtZW50ICAgICAoZ2xvYmFsVGhpcyAvIHRoaXMgbW9kdWxlKVxuICogICAtIGRlbGV0ZVN1Z2dlc3RlZEFjaGlldmVtZW50ICAgIChnbG9iYWxUaGlzIC8gdGhpcyBtb2R1bGUpXG4gKiAgIC0gc2hvd1RvYXN0ICAgICAgICAgICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gc2NoZWR1bGVBdHNSZWZyZXNoICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gdXBkYXRlSW5jbHVzaW9uQ291bnRzICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gc3dpdGNoVGFiICAgICAgICAgICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gY29uZmlybURpYWxvZyAgICAgICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gY2xvc2VBbGVydE1vZGFsICAgICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gc2V0SW5pdGlhbEZvY3VzICAgICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gdHJhcEZvY3VzICAgICAgICAgICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgICAgKGdsb2JhbFRoaXMpXG4gKiAgIC0gQ1NTLmVzY2FwZSAgICAgICAgICAgICAgICAgICAgKGJyb3dzZXIgYnVpbHQtaW4pXG4gKi9cblxuaW1wb3J0IHsgc3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi9zdGF0ZS1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IGV5ZVNsYXNoSWNvbiB9IGZyb20gJy4vcmV2aWV3LWljb25zLmpzJztcblxuLy8gTW9kdWxlLWxldmVsIHN0YXRlXG5sZXQgX3Jld3JpdGVTdWdnZXN0aW9uSGlzdG9yeSA9IFtdO1xubGV0IF9sYXN0UmV3cml0ZUxvZ0lkID0gbnVsbDtcbi8vIENhbGxiYWNrcyBmb3IgdGhlIGFjdGl2ZSByZXdyaXRlIG1vZGFsOiB7IGV4cGVyaWVuY2VJbmRleCwgb25BY2NlcHQgfVxubGV0IF9yZXdyaXRlQ2FsbGJhY2tzID0gbnVsbDtcbi8vIFRyYWNrcyBhY2hpZXZlbWVudHMgdGhhdCBhcmUgbmV3bHkgcmVjb21tZW5kZWQgc2luY2UgdGhlIHByZXZpb3VzIHJlbmRlciAoZm9yIFx1RDgzQ1x1REQ5NSBiYWRnZXMpXG5sZXQgX25ld1JlY29tbWVuZGVkQWNocyA9IG5ldyBTZXQoKTtcblxuZnVuY3Rpb24gX25vcm1hbGl6ZUFjaGlldmVtZW50RWRpdEVudHJ5KGVudHJ5KSB7XG4gIGlmIChlbnRyeSAmJiB0eXBlb2YgZW50cnkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGVudHJ5KSkge1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0OiBTdHJpbmcoZW50cnkudGV4dCA/PyBlbnRyeS5kZXNjcmlwdGlvbiA/PyBlbnRyeS5jb250ZW50ID8/ICcnKSxcbiAgICAgIGhpZGRlbjogQm9vbGVhbihlbnRyeS5oaWRkZW4pLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiBTdHJpbmcoZW50cnkgPz8gJycpLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gIH07XG59XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVBY2hpZXZlbWVudEVkaXRMaXN0KGVudHJpZXMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGVudHJpZXMpKSByZXR1cm4gW107XG4gIHJldHVybiBlbnRyaWVzLm1hcChfbm9ybWFsaXplQWNoaWV2ZW1lbnRFZGl0RW50cnkpO1xufVxuXG5mdW5jdGlvbiBfYWNoaWV2ZW1lbnRFbnRyeVRleHQoZW50cnkpIHtcbiAgcmV0dXJuIF9ub3JtYWxpemVBY2hpZXZlbWVudEVkaXRFbnRyeShlbnRyeSkudGV4dDtcbn1cblxuZnVuY3Rpb24gX2FjaGlldmVtZW50RW50cnlIaWRkZW4oZW50cnkpIHtcbiAgcmV0dXJuIF9ub3JtYWxpemVBY2hpZXZlbWVudEVkaXRFbnRyeShlbnRyeSkuaGlkZGVuO1xufVxuXG53aW5kb3cuYWNoaWV2ZW1lbnREZWNpc2lvbnMgPSB7fTtcbndpbmRvdy5fYWNoaWV2ZW1lbnRzT3JkZXJlZCA9IG51bGw7XG5cbi8vIFNtYWxsIGZldGNoIGhlbHBlciB3aXRoIHRpbWVvdXQgdG8gYXZvaWQgbGVhdmluZyBsb2FkZXJzIHZpc2libGUgb24gaGFuZ2luZyByZXF1ZXN0c1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hKc29uV2l0aFRpbWVvdXQodXJsLCBvcHRzID0ge30sIHRpbWVvdXQgPSA3MDAwKSB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHNpZ25hbCA9IGNvbnRyb2xsZXIuc2lnbmFsO1xuICBjb25zdCBpZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aW1lb3V0KTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHsgc2lnbmFsIH0pKTtcbiAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgIHJldHVybiByZXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hY2hTbmFwc2hvdEtleSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzaWQgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgnc2Vzc2lvbicpO1xuICAgIHJldHVybiBzaWQgPyBgYWNoX3NuYXBfJHtzaWR9YCA6IG51bGw7XG4gIH0gY2F0Y2ggKF8pIHsgcmV0dXJuIG51bGw7IH1cbn1cbmZ1bmN0aW9uIF9zYXZlQWNoU25hcHNob3QocmVjb21tZW5kZWRJZHMpIHtcbiAgY29uc3Qga2V5ID0gX2FjaFNuYXBzaG90S2V5KCk7XG4gIGlmICgha2V5KSByZXR1cm47XG4gIHRyeSB7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkoWy4uLnJlY29tbWVuZGVkSWRzXSkpOyB9IGNhdGNoIChfKSB7fVxufVxuZnVuY3Rpb24gX2dldEFjaFNuYXBzaG90KCkge1xuICBjb25zdCBrZXkgPSBfYWNoU25hcHNob3RLZXkoKTtcbiAgaWYgKCFrZXkpIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgcmV0dXJuIHJhdyA/IG5ldyBTZXQoSlNPTi5wYXJzZShyYXcpKSA6IG51bGw7XG4gIH0gY2F0Y2ggKF8pIHsgcmV0dXJuIG51bGw7IH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRBY2hpZXZlbWVudHNSZXZpZXdUYWJsZSgpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaGlldmVtZW50cy10YWJsZS1jb250YWluZXInKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O3BhZGRpbmc6MjBweDtjb2xvcjojNmI3MjgwO1wiPjxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyLXdpZHRoOjJweDtmbGV4LXNocmluazowO1wiPjwvZGl2PjxzcGFuPkxvYWRpbmcgYWNoaWV2ZW1lbnRzXHUyMDI2PC9zcGFuPjwvZGl2Pic7XG5cbiAgLy8gUHJlZmVyIHNlc3Npb24tYXdhcmUgc3RhdHVzIGRhdGEgc28gcmV2aWV3LXRpbWUgb3ZlcmxheXMgYXJlIHJlZmxlY3RlZC5cbiAgbGV0IGFsbEFjaGlldmVtZW50cyA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoSnNvbldpdGhUaW1lb3V0KCcvYXBpL3N0YXR1cycsIHt9LCA3MDAwKTtcbiAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKCdzdGF0dXMgbm90IG9rJyk7XG4gICAgY29uc3Qgc3RhdHVzRGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgYWxsQWNoaWV2ZW1lbnRzID0gc3RhdHVzRGF0YS5hbGxfYWNoaWV2ZW1lbnRzIHx8IFtdO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBTZWNvbmRhcnkgZmFsbGJhY2s6IHJhdyBtYXN0ZXIgZmllbGRzLlxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMyID0gYXdhaXQgZmV0Y2hKc29uV2l0aFRpbWVvdXQoJy9hcGkvbWFzdGVyLWZpZWxkcycsIHt9LCA3MDAwKTtcbiAgICAgIGlmICghcmVzMi5vaykgdGhyb3cgbmV3IEVycm9yKCdtYXN0ZXItZmllbGRzIG5vdCBvaycpO1xuICAgICAgY29uc3QgbWFzdGVyRGF0YSA9IGF3YWl0IHJlczIuanNvbigpO1xuICAgICAgYWxsQWNoaWV2ZW1lbnRzID0gbWFzdGVyRGF0YS5zZWxlY3RlZF9hY2hpZXZlbWVudHMgfHwgW107XG4gICAgfSBjYXRjaCAoZXJyMikge1xuICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7cGFkZGluZzoyMHB4O1wiPkZhaWxlZCB0byBsb2FkIGFjaGlldmVtZW50cy48L3A+JztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoYWxsQWNoaWV2ZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJwYWRkaW5nOjIwcHg7Y29sb3I6IzZiNzI4MDtcIj5ObyBrZXkgYWNoaWV2ZW1lbnRzIGZvdW5kIGluIG1hc3RlciBDViBkYXRhLjwvcD4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFdyYXAgaW5pdGlhbGlzYXRpb24gKyByZW5kZXIgc28gYW4gdW5leHBlY3RlZCBleGNlcHRpb24gcmVwbGFjZXMgdGhlXG4gIC8vIHNwaW5uZXIgaW5zdGVhZCBvZiBsZWF2aW5nIGl0IGZyb3plbiBpbmRlZmluaXRlbHkuXG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zIHx8IHt9O1xuICAgIGNvbnN0IHJlY29tbWVuZGVkU2V0ID0gbmV3IFNldChkYXRhLnJlY29tbWVuZGVkX2FjaGlldmVtZW50cyB8fCBbXSk7XG5cbiAgICAvLyBTb3J0OiByZWNvbW1lbmRlZCBmaXJzdCwgdGhlbiBieSBpbXBvcnRhbmNlIGRlc2NlbmRpbmcgKG9ubHkgb24gZmlyc3QgbG9hZClcbiAgICBpZiAoIXdpbmRvdy5fYWNoaWV2ZW1lbnRzT3JkZXJlZCkge1xuICAgICAgYWxsQWNoaWV2ZW1lbnRzID0gWy4uLmFsbEFjaGlldmVtZW50c10uc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBhUmVjID0gcmVjb21tZW5kZWRTZXQuaGFzKGEuaWQpID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IGJSZWMgPSByZWNvbW1lbmRlZFNldC5oYXMoYi5pZCkgPyAxIDogMDtcbiAgICAgICAgaWYgKGJSZWMgIT09IGFSZWMpIHJldHVybiBiUmVjIC0gYVJlYztcbiAgICAgICAgcmV0dXJuIChiLmltcG9ydGFuY2UgfHwgMCkgLSAoYS5pbXBvcnRhbmNlIHx8IDApO1xuICAgICAgfSk7XG4gICAgICB3aW5kb3cuX2FjaGlldmVtZW50c09yZGVyZWQgPSBhbGxBY2hpZXZlbWVudHM7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGlzZSBkZWNpc2lvbnNcbiAgICB3aW5kb3cuYWNoaWV2ZW1lbnREZWNpc2lvbnMgPSB7fTtcbiAgICB3aW5kb3cuX2FjaGlldmVtZW50c09yZGVyZWQuZm9yRWFjaChhY2ggPT4ge1xuICAgICAgY29uc3QgcmVjID0gZ2V0QWNoaWV2ZW1lbnRSZWNvbW1lbmRhdGlvbihhY2guaWQsIGRhdGEpO1xuICAgICAgbGV0IGRlZmF1bHRBY3Rpb24gPSAnaW5jbHVkZSc7XG4gICAgICBpZiAocmVjID09PSAnRW1waGFzaXplJykgICAgICAgICBkZWZhdWx0QWN0aW9uID0gJ2VtcGhhc2l6ZSc7XG4gICAgICBlbHNlIGlmIChyZWMgPT09ICdJbmNsdWRlJykgICAgICBkZWZhdWx0QWN0aW9uID0gJ2luY2x1ZGUnO1xuICAgICAgZWxzZSBpZiAocmVjID09PSAnRGUtZW1waGFzaXplJykgZGVmYXVsdEFjdGlvbiA9ICdkZS1lbXBoYXNpemUnO1xuICAgICAgZWxzZSBpZiAocmVjID09PSAnT21pdCcpICAgICAgICAgZGVmYXVsdEFjdGlvbiA9ICdleGNsdWRlJztcbiAgICAgIHdpbmRvdy5hY2hpZXZlbWVudERlY2lzaW9uc1thY2guaWRdID0gZGVmYXVsdEFjdGlvbjtcbiAgICB9KTtcbiAgICAvLyBBcHBseSBhbnkgcHJldmlvdXNseSBzYXZlZCB1c2VyIGRlY2lzaW9ucyBvdmVyIHRoZSBMTE0gZGVmYXVsdHNcbiAgICBjb25zdCBzYXZlZEFjaERlY3MgPSB3aW5kb3cuX3NhdmVkRGVjaXNpb25zPy5hY2hpZXZlbWVudF9kZWNpc2lvbnMgfHwge307XG4gICAgaWYgKE9iamVjdC5rZXlzKHNhdmVkQWNoRGVjcykubGVuZ3RoID4gMCkgT2JqZWN0LmFzc2lnbih3aW5kb3cuYWNoaWV2ZW1lbnREZWNpc2lvbnMsIHNhdmVkQWNoRGVjcyk7XG5cbiAgICAvLyBBbHNvIGhhbmRsZSBBSS1zdWdnZXN0ZWQgYWNoaWV2ZW1lbnRzIFx1MjAxNCBhc3NpZ24gc3RhYmxlIElEcyBvbmNlIG9uIGZpcnN0IGxvYWRcbiAgICAvLyBzbyB0aGF0IHJlb3JkZXIgLyBkZWxldGUgb3BlcmF0aW9ucyBuZXZlciBuZWVkIHRvIHJlbWFwIGRlY2lzaW9uIGtleXMuXG4gICAgaWYgKCF3aW5kb3cuX3N1Z2dlc3RlZEFjaHNPcmRlcmVkKSB7XG4gICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICB3aW5kb3cuX3N1Z2dlc3RlZEFjaHNPcmRlcmVkID0gKGRhdGEuc3VnZ2VzdGVkX2FjaGlldmVtZW50cyB8fCBbXSkubWFwKHMgPT4ge1xuICAgICAgICBjb25zdCBpdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgcyk7XG4gICAgICAgIGl0ZW0uX3N1Z2dJZCA9IGBzdWdnOjoke2NvdW50ZXIrK31gO1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB3aW5kb3cuX3N1Z2dlc3RlZEFjaHNPcmRlcmVkLmZvckVhY2gocyA9PiB7XG4gICAgICBpZiAoIShzLl9zdWdnSWQgaW4gd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zKSkgd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zW3MuX3N1Z2dJZF0gPSAnaW5jbHVkZSc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcmV2QWNoU25hcCA9IF9nZXRBY2hTbmFwc2hvdCgpO1xuICAgIF9uZXdSZWNvbW1lbmRlZEFjaHMgPSBwcmV2QWNoU25hcFxuICAgICAgPyBuZXcgU2V0KFsuLi5yZWNvbW1lbmRlZFNldF0uZmlsdGVyKGlkID0+ICFwcmV2QWNoU25hcC5oYXMoaWQpKSlcbiAgICAgIDogbmV3IFNldCgpO1xuICAgIF9zYXZlQWNoU25hcHNob3QocmVjb21tZW5kZWRTZXQpO1xuXG4gICAgX3JlbmRlckFjaGlldmVtZW50c1Jldmlld1RhYmxlKGNvbnRhaW5lcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlICovXG4gICAgY29uc29sZS5lcnJvcignYnVpbGRBY2hpZXZlbWVudHNSZXZpZXdUYWJsZTogcmVuZGVyIGVycm9yOicsIGVycik7XG4gICAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7cGFkZGluZzoyMHB4O1wiPkVycm9yIHJlbmRlcmluZyBhY2hpZXZlbWVudHMgdGFibGUuIFBsZWFzZSByZWxvYWQgYW5kIHRyeSBhZ2Fpbi48L3A+JztcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVuZGVyQWNoaWV2ZW1lbnRzUmV2aWV3VGFibGUoY29udGFpbmVyKSB7XG4gIGlmICghY29udGFpbmVyKSBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoaWV2ZW1lbnRzLXRhYmxlLWNvbnRhaW5lcicpO1xuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuXG4gIGNvbnN0IGRhdGEgPSB3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucyB8fCB7fTtcbiAgY29uc3Qgb3JkZXJlZEFjaHMgID0gd2luZG93Ll9hY2hpZXZlbWVudHNPcmRlcmVkIHx8IFtdO1xuICBjb25zdCBzdWdnZXN0ZWRBY2hzID0gd2luZG93Ll9zdWdnZXN0ZWRBY2hzT3JkZXJlZCB8fCBbXTtcblxuICAvLyBCdWlsZCBmaWx0ZXIgKyB0YWJsZSBIVE1MXG4gIGxldCBodG1sID0gYFxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjEycHg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiYWNoLXJldmlldy1maWx0ZXJcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBhY2hpZXZlbWVudHNcdTIwMjZcIlxuICAgICAgICBvbmlucHV0PVwiX2ZpbHRlckFjaGlldmVtZW50c1RhYmxlKHRoaXMudmFsdWUpXCJcbiAgICAgICAgc3R5bGU9XCJmbGV4OjE7cGFkZGluZzo2cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjAuOWVtO1wiPlxuICAgICAgPHNwYW4gaWQ9XCJhY2gtcmV2aWV3LWNvdW50XCIgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOiM2YjcyODA7d2hpdGUtc3BhY2U6bm93cmFwO1wiPiR7b3JkZXJlZEFjaHMubGVuZ3RoICsgc3VnZ2VzdGVkQWNocy5sZW5ndGh9IGFjaGlldmVtZW50czwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8dGFibGUgaWQ9XCJhY2hpZXZlbWVudHMtcmV2aWV3LXRhYmxlXCIgY2xhc3M9XCJyZXZpZXctdGFibGVcIiBzdHlsZT1cIndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO1wiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoPkFjaGlldmVtZW50PC90aD5cbiAgICAgICAgICA8dGg+UmVjb21tZW5kYXRpb248L3RoPlxuICAgICAgICAgIDx0aD5Db25maWRlbmNlPC90aD5cbiAgICAgICAgICA8dGg+UmVhc29uaW5nPC90aD5cbiAgICAgICAgICA8dGg+U2VsZWN0aW9uPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gIGA7XG5cbiAgb3JkZXJlZEFjaHMuZm9yRWFjaCgoYWNoLCByb3dJZHgpID0+IHtcbiAgICBjb25zdCBpZCAgICAgICAgICAgICA9IGFjaC5pZCB8fCBhY2gudGl0bGUgfHwgJyc7XG4gICAgY29uc3QgdGl0bGUgICAgICAgICAgPSBhY2gudGl0bGUgfHwgaWQ7XG4gICAgY29uc3QgZGVzYyAgICAgICAgICAgPSBhY2guZGVzY3JpcHRpb24gfHwgJyc7XG4gICAgY29uc3QgcmVjb21tZW5kYXRpb24gPSBnZXRBY2hpZXZlbWVudFJlY29tbWVuZGF0aW9uKGlkLCBkYXRhKTtcbiAgICBjb25zdCBjb25maWRlbmNlICAgICA9IGdldEFjaGlldmVtZW50Q29uZmlkZW5jZShpZCwgZGF0YSwgYWNoLmltcG9ydGFuY2UpO1xuICAgIGNvbnN0IHJlYXNvbmluZyAgICAgID0gZ2V0QWNoaWV2ZW1lbnRSZWFzb25pbmcoaWQsIGRhdGEsIGFjaCk7XG4gICAgY29uc3QgZGVmYXVsdEFjdGlvbiAgPSB3aW5kb3cuYWNoaWV2ZW1lbnREZWNpc2lvbnNbaWRdIHx8ICdpbmNsdWRlJztcbiAgICBjb25zdCBjb25maWRlbmNlQmFkZ2UgPSBgPHNwYW4gY2xhc3M9XCJjb25maWRlbmNlLWJhZGdlIGNvbmZpZGVuY2UtJHtjb25maWRlbmNlLmxldmVsfVwiPiR7Y29uZmlkZW5jZS50ZXh0fTwvc3Bhbj5gO1xuICAgIGNvbnN0IHJlcnVuTmV3QmFkZ2UgPSBfbmV3UmVjb21tZW5kZWRBY2hzLmhhcyhpZClcbiAgICAgID8gJzxzcGFuIGNsYXNzPVwicnctY2hhbmdlLWJhZGdlIHJ3LWNoYW5nZS1uZXdcIiBhcmlhLWxhYmVsPVwiTmV3IHJlY29tbWVuZGF0aW9uIHNpbmNlIHByZXZpb3VzIHJ1blwiPlx1RDgzQ1x1REQ5NSBOZXc8L3NwYW4+J1xuICAgICAgOiAnJztcbiAgICBjb25zdCBpc0ZpcnN0ID0gcm93SWR4ID09PSAwO1xuICAgIGNvbnN0IGlzTGFzdCAgPSByb3dJZHggPT09IG9yZGVyZWRBY2hzLmxlbmd0aCAtIDE7XG5cbiAgICBodG1sICs9IGBcbiAgICAgIDx0ciBkYXRhLWFjaC1pZD1cIiR7ZXNjYXBlSHRtbChpZCl9XCI+XG4gICAgICAgIDx0ZCBzdHlsZT1cIm1pbi13aWR0aDoyMjBweDtcIj5cbiAgICAgICAgICA8aW5wdXQgaWQ9XCJhY2gtdGl0bGUtJHtlc2NhcGVIdG1sKGlkKX1cIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIiB2YWx1ZT1cIiR7ZXNjYXBlSHRtbCh0aXRsZSl9XCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtmb250LXdlaWdodDo2MDA7cGFkZGluZzozcHggNnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC45ZW07Ym94LXNpemluZzpib3JkZXItYm94O1wiXG4gICAgICAgICAgICBvbmJsdXI9XCJzYXZlVG9wTGV2ZWxBY2hpZXZlbWVudEZpZWxkKCcke2VzY2FwZUh0bWwoaWQpfScsICd0aXRsZScsIHRoaXMudmFsdWUpXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBY2hpZXZlbWVudCB0aXRsZVwiPiR7cmVydW5OZXdCYWRnZX1cbiAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJhY2gtZGVzYy0ke2VzY2FwZUh0bWwoaWQpfVwiXG4gICAgICAgICAgICByb3dzPVwiMlwiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7bWFyZ2luLXRvcDo0cHg7cGFkZGluZzozcHggNnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC44NWVtO3Jlc2l6ZTp2ZXJ0aWNhbDtib3gtc2l6aW5nOmJvcmRlci1ib3g7XCJcbiAgICAgICAgICAgIG9uYmx1cj1cInNhdmVUb3BMZXZlbEFjaGlldmVtZW50RmllbGQoJyR7ZXNjYXBlSHRtbChpZCl9JywgJ2Rlc2NyaXB0aW9uJywgdGhpcy52YWx1ZSlcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFjaGlldmVtZW50IGRlc2NyaXB0aW9uXCJcbiAgICAgICAgICA+JHtlc2NhcGVIdG1sKGRlc2MpfTwvdGV4dGFyZWE+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZD48c3Ryb25nPiR7ZXNjYXBlSHRtbChyZWNvbW1lbmRhdGlvbil9PC9zdHJvbmc+PC90ZD5cbiAgICAgICAgPHRkPiR7Y29uZmlkZW5jZUJhZGdlfTwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cIm1heC13aWR0aDoyMDBweDtcIj48c21hbGw+JHtlc2NhcGVIdG1sKHJlYXNvbmluZyl9PC9zbWFsbD48L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb24tYnRuc1wiIHN0eWxlPVwid2hpdGUtc3BhY2U6bm93cmFwO1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2RlZmF1bHRBY3Rpb24gPT09ICdlbXBoYXNpemUnICAgID8gJ2FjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImVtcGhhc2l6ZVwiICAgIGFyaWEtbGFiZWw9XCJFbXBoYXNpemUgJHtlc2NhcGVIdG1sKHRpdGxlKX1cIiAgICB0aXRsZT1cIkVtcGhhc2l6ZSBcdTIwMTQgZmVhdHVyZSBwcm9taW5lbnRseVwiICBzdHlsZT1cImNvbG9yOiMxMGI5ODE7XCI+XHUyNzk1PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2luY2x1ZGUnICAgICAgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiaW5jbHVkZVwiICAgICAgYXJpYS1sYWJlbD1cIkluY2x1ZGUgJHtlc2NhcGVIdG1sKHRpdGxlKX1cIiAgICAgIHRpdGxlPVwiSW5jbHVkZSBcdTIwMTQgc3RhbmRhcmQgdHJlYXRtZW50XCI+XHUyNzEzPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2RlLWVtcGhhc2l6ZScgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiZGUtZW1waGFzaXplXCIgYXJpYS1sYWJlbD1cIkRlLWVtcGhhc2l6ZSAke2VzY2FwZUh0bWwodGl0bGUpfVwiIHRpdGxlPVwiRGUtZW1waGFzaXplIFx1MjAxNCBicmllZiBtZW50aW9uIG9ubHlcIiAgc3R5bGU9XCJjb2xvcjojZjU5ZTBiO1wiPlx1Mjc5NjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2RlZmF1bHRBY3Rpb24gPT09ICdleGNsdWRlJyAgICAgID8gJ2FjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImV4Y2x1ZGVcIiAgICAgIGFyaWEtbGFiZWw9XCJFeGNsdWRlICR7ZXNjYXBlSHRtbCh0aXRsZSl9XCIgICAgICB0aXRsZT1cIkV4Y2x1ZGUgXHUyMDE0IG9taXQgZnJvbSBDVlwiICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O1wiPiR7ZXllU2xhc2hJY29uKCl9PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgYXJpYS1sYWJlbD1cIkFJIHJld3JpdGUgJHtlc2NhcGVIdG1sKHRpdGxlKX1cIiB0aXRsZT1cIkFJIHJld3JpdGUgZGVzY3JpcHRpb25cIiBvbmNsaWNrPVwiYWlSZXdyaXRlVG9wTGV2ZWxBY2hpZXZlbWVudCgnJHtlc2NhcGVIdG1sKGlkKX0nKVwiPlx1MjcyODwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGFyaWEtbGFiZWw9XCJNb3ZlICR7ZXNjYXBlSHRtbCh0aXRsZSl9IGVhcmxpZXJcIiB0aXRsZT1cIk1vdmUgdXBcIiAgICR7aXNGaXJzdCA/ICdkaXNhYmxlZCcgOiAnJ30gb25jbGljaz1cIm1vdmVBY2hpZXZlbWVudFJvdygnJHtlc2NhcGVIdG1sKGlkKX0nLC0xKVwiPlx1MjE5MTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGFyaWEtbGFiZWw9XCJNb3ZlICR7ZXNjYXBlSHRtbCh0aXRsZSl9IGxhdGVyXCIgICB0aXRsZT1cIk1vdmUgZG93blwiICR7aXNMYXN0ICA/ICdkaXNhYmxlZCcgOiAnJ30gb25jbGljaz1cIm1vdmVBY2hpZXZlbWVudFJvdygnJHtlc2NhcGVIdG1sKGlkKX0nLCsxKVwiPlx1MjE5MzwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGFyaWEtbGFiZWw9XCJEZWxldGUgJHtlc2NhcGVIdG1sKHRpdGxlKX1cIiB0aXRsZT1cIkRlbGV0ZSBhY2hpZXZlbWVudFwiIG9uY2xpY2s9XCJkZWxldGVUb3BMZXZlbEFjaGlldmVtZW50KCcke2VzY2FwZUh0bWwoaWQpfScpXCIgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O1wiPlx1RDgzRFx1REREMTwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICBgO1xuICB9KTtcblxuICAvLyBBSS1zdWdnZXN0ZWQgYWNoaWV2ZW1lbnRzIFx1MjAxNCBmdWxsIGVkaXRpbmcvY29udHJvbCBwYXJpdHkgd2l0aCB1c2VyIGFjaGlldmVtZW50c1xuICBzdWdnZXN0ZWRBY2hzLmZvckVhY2goKHN1Z2csIHJvd0lkeCkgPT4ge1xuICAgIGNvbnN0IHN1Z2dJZCAgICAgID0gc3VnZy5fc3VnZ0lkO1xuICAgIGNvbnN0IGNvbmZSYXcgICAgID0gKHN1Z2cuY29uZmlkZW5jZSB8fCAnTWVkaXVtJykudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjb25mTGV2ZWwgICA9IGNvbmZSYXcuaW5jbHVkZXMoJ2hpZ2gnKSA/ICdoaWdoJyA6IGNvbmZSYXcuaW5jbHVkZXMoJ2xvdycpID8gJ2xvdycgOiAnbWVkaXVtJztcbiAgICBjb25zdCBjb25mVGV4dCAgICA9IHN1Z2cuY29uZmlkZW5jZSB8fCAnTWVkaXVtJztcbiAgICBjb25zdCBkZWZhdWx0QWN0aW9uID0gd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zW3N1Z2dJZF0gfHwgJ2luY2x1ZGUnO1xuICAgIGNvbnN0IGlzRmlyc3QgICAgID0gcm93SWR4ID09PSAwO1xuICAgIGNvbnN0IGlzTGFzdCAgICAgID0gcm93SWR4ID09PSBzdWdnZXN0ZWRBY2hzLmxlbmd0aCAtIDE7XG5cbiAgICBodG1sICs9IGBcbiAgICAgIDx0ciBkYXRhLWFjaC1pZD1cIiR7ZXNjYXBlSHRtbChzdWdnSWQpfVwiIHN0eWxlPVwiYmFja2dyb3VuZDojZmVmY2U4O1wiPlxuICAgICAgICA8dGQgc3R5bGU9XCJtaW4td2lkdGg6MjIwcHg7XCI+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kOiNmNTllMGI7Y29sb3I6I2ZmZjtmb250LXNpemU6MC43ZW07Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6MXB4IDZweDtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLWJvdHRvbTo0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO1wiPlx1MkI1MCBBSSBTdWdnZXN0ZWQ8L3NwYW4+XG4gICAgICAgICAgPGlucHV0IGlkPVwiYWNoLXRpdGxlLSR7ZXNjYXBlSHRtbChzdWdnSWQpfVwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiIHZhbHVlPVwiJHtlc2NhcGVIdG1sKHN1Z2cudGl0bGUgfHwgJycpfVwiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Zm9udC13ZWlnaHQ6NjAwO3BhZGRpbmc6M3B4IDZweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjAuOWVtO2JveC1zaXppbmc6Ym9yZGVyLWJveDtcIlxuICAgICAgICAgICAgb25ibHVyPVwic2F2ZVN1Z2dlc3RlZEFjaGlldmVtZW50RmllbGQoJyR7ZXNjYXBlSHRtbChzdWdnSWQpfScsICd0aXRsZScsIHRoaXMudmFsdWUpXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBY2hpZXZlbWVudCB0aXRsZVwiPlxuICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cImFjaC1kZXNjLSR7ZXNjYXBlSHRtbChzdWdnSWQpfVwiXG4gICAgICAgICAgICByb3dzPVwiMlwiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7bWFyZ2luLXRvcDo0cHg7cGFkZGluZzozcHggNnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC44NWVtO3Jlc2l6ZTp2ZXJ0aWNhbDtib3gtc2l6aW5nOmJvcmRlci1ib3g7XCJcbiAgICAgICAgICAgIG9uYmx1cj1cInNhdmVTdWdnZXN0ZWRBY2hpZXZlbWVudEZpZWxkKCcke2VzY2FwZUh0bWwoc3VnZ0lkKX0nLCAnZGVzY3JpcHRpb24nLCB0aGlzLnZhbHVlKVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWNoaWV2ZW1lbnQgZGVzY3JpcHRpb25cIlxuICAgICAgICAgID4ke2VzY2FwZUh0bWwoc3VnZy5kZXNjcmlwdGlvbiB8fCAnJyl9PC90ZXh0YXJlYT5cbiAgICAgICAgICAke3N1Z2cuZXhwZXJpZW5jZV9pZCA/IGA8c21hbGwgc3R5bGU9XCJjb2xvcjojOWNhM2FmO1wiPkV4cGVyaWVuY2U6ICR7ZXNjYXBlSHRtbChzdWdnLmV4cGVyaWVuY2VfaWQpfTwvc21hbGw+YCA6ICcnfVxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQ+PHN0cm9uZz5BZGQgTmV3PC9zdHJvbmc+PC90ZD5cbiAgICAgICAgPHRkPjxzcGFuIGNsYXNzPVwiY29uZmlkZW5jZS1iYWRnZSBjb25maWRlbmNlLSR7Y29uZkxldmVsfVwiPiR7ZXNjYXBlSHRtbChjb25mVGV4dCl9PC9zcGFuPjwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cIm1heC13aWR0aDoyMDBweDtcIj48c21hbGw+JHtlc2NhcGVIdG1sKHN1Z2cucmF0aW9uYWxlIHx8ICcnKX08L3NtYWxsPjwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImFjdGlvbi1idG5zXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTpub3dyYXA7XCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2VtcGhhc2l6ZScgICAgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiZW1waGFzaXplXCIgICAgYXJpYS1sYWJlbD1cIkVtcGhhc2l6ZVwiICAgIHRpdGxlPVwiRW1waGFzaXplIFx1MjAxNCBmZWF0dXJlIHByb21pbmVudGx5XCIgIHN0eWxlPVwiY29sb3I6IzEwYjk4MTtcIj5cdTI3OTU8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4gJHtkZWZhdWx0QWN0aW9uID09PSAnaW5jbHVkZScgICAgICA/ICdhY3RpdmUnIDogJyd9XCIgZGF0YS1hY3Rpb249XCJpbmNsdWRlXCIgICAgICBhcmlhLWxhYmVsPVwiSW5jbHVkZVwiICAgICAgdGl0bGU9XCJJbmNsdWRlIFx1MjAxNCBhZGQgdG8gQ1ZcIj5cdTI3MTM8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4gJHtkZWZhdWx0QWN0aW9uID09PSAnZGUtZW1waGFzaXplJyA/ICdhY3RpdmUnIDogJyd9XCIgZGF0YS1hY3Rpb249XCJkZS1lbXBoYXNpemVcIiBhcmlhLWxhYmVsPVwiRGUtZW1waGFzaXplXCIgdGl0bGU9XCJEZS1lbXBoYXNpemUgXHUyMDE0IGJyaWVmIG1lbnRpb24gb25seVwiICBzdHlsZT1cImNvbG9yOiNmNTllMGI7XCI+XHUyNzk2PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2V4Y2x1ZGUnICAgICAgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiZXhjbHVkZVwiICAgICAgYXJpYS1sYWJlbD1cIkV4Y2x1ZGVcIiAgICAgIHRpdGxlPVwiU2tpcCBcdTIwMTQgZG8gbm90IGFkZFwiICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7XCI+JHtleWVTbGFzaEljb24oKX08L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBhcmlhLWxhYmVsPVwiQUkgcmV3cml0ZVwiIHRpdGxlPVwiQUkgcmV3cml0ZSBkZXNjcmlwdGlvblwiIG9uY2xpY2s9XCJhaVJld3JpdGVTdWdnZXN0ZWRBY2hpZXZlbWVudCgnJHtlc2NhcGVIdG1sKHN1Z2dJZCl9JylcIj5cdTI3Mjg8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBhcmlhLWxhYmVsPVwiTW92ZSBlYXJsaWVyXCIgdGl0bGU9XCJNb3ZlIHVwXCIgICAke2lzRmlyc3QgPyAnZGlzYWJsZWQnIDogJyd9IG9uY2xpY2s9XCJtb3ZlU3VnZ2VzdGVkQWNoaWV2ZW1lbnRSb3coJyR7ZXNjYXBlSHRtbChzdWdnSWQpfScsLTEpXCI+XHUyMTkxPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgYXJpYS1sYWJlbD1cIk1vdmUgbGF0ZXJcIiAgIHRpdGxlPVwiTW92ZSBkb3duXCIgJHtpc0xhc3QgID8gJ2Rpc2FibGVkJyA6ICcnfSBvbmNsaWNrPVwibW92ZVN1Z2dlc3RlZEFjaGlldmVtZW50Um93KCcke2VzY2FwZUh0bWwoc3VnZ0lkKX0nLCsxKVwiPlx1MjE5MzwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGFyaWEtbGFiZWw9XCJSZW1vdmUgc3VnZ2VzdGlvblwiIHRpdGxlPVwiUmVtb3ZlIHN1Z2dlc3Rpb25cIiBvbmNsaWNrPVwiZGVsZXRlU3VnZ2VzdGVkQWNoaWV2ZW1lbnQoJyR7ZXNjYXBlSHRtbChzdWdnSWQpfScpXCIgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O1wiPlx1RDgzRFx1REREMTwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICBgO1xuICB9KTtcblxuICBodG1sICs9ICc8L3Rib2R5PjwvdGFibGU+JztcbiAgY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWw7XG5cbiAgLy8gQnVsayB0b29sYmFyIGFib3ZlIHRoZSBmaWx0ZXIgcm93XG4gIGNvbnN0IGFjaFRvb2xiYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgYWNoVG9vbGJhci5jbGFzc05hbWUgPSAnYnVsay10b29sYmFyJztcbiAgYWNoVG9vbGJhci5pbm5lckhUTUwgPSBgXG4gICAgPHNwYW4+QnVsazo8L3NwYW4+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ1bGstYnRuIGJ1bGstcmVjb21tZW5kZWRcIiBvbmNsaWNrPVwiYnVsa0FjaGlldmVtZW50QWN0aW9uKCdyZWNvbW1lbmRlZCcpXCIgdGl0bGU9XCJTZXQgYWxsIHRvIHRoZSBMTE0gcmVjb21tZW5kYXRpb25cIj5cdTI3MjggQWNjZXB0IEFsbCBSZWNvbW1lbmRlZDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLWVtcGhhc2l6ZVwiICAgb25jbGljaz1cImJ1bGtBY2hpZXZlbWVudEFjdGlvbignZW1waGFzaXplJylcIj5cdTI3OTUgRW1waGFzaXplIEFsbDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLWluY2x1ZGVcIiAgICAgb25jbGljaz1cImJ1bGtBY2hpZXZlbWVudEFjdGlvbignaW5jbHVkZScpXCI+XHUyNzEzIEluY2x1ZGUgQWxsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ1bGstYnRuIGJ1bGstZXhjbHVkZVwiICAgICBvbmNsaWNrPVwiYnVsa0FjaGlldmVtZW50QWN0aW9uKCdleGNsdWRlJylcIj4ke2V5ZVNsYXNoSWNvbigpfSBFeGNsdWRlIEFsbDwvYnV0dG9uPlxuICBgO1xuICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKGFjaFRvb2xiYXIsIGNvbnRhaW5lci5maXJzdENoaWxkKTtcblxuICAvLyBEZWxlZ2F0ZWQgY2xpY2sgaGFuZGxlciBmb3IgZGVjaXNpb24gYnV0dG9uc1xuICBjb250YWluZXIucXVlcnlTZWxlY3RvcigndGJvZHknKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcbiAgICBjb25zdCBidG4gPSBlLnRhcmdldC5jbG9zZXN0KCcuaWNvbi1idG5bZGF0YS1hY3Rpb25dJyk7XG4gICAgaWYgKCFidG4pIHJldHVybjtcbiAgICBjb25zdCB0ciA9IGJ0bi5jbG9zZXN0KCd0cltkYXRhLWFjaC1pZF0nKTtcbiAgICBpZiAoIXRyKSByZXR1cm47XG4gICAgY29uc3QgYWN0aW9uID0gYnRuLmRhdGFzZXQuYWN0aW9uO1xuICAgIGlmIChhY3Rpb24pIGhhbmRsZUFjaGlldmVtZW50QWN0aW9uKHRyLmRhdGFzZXQuYWNoSWQsIGFjdGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBidWxrQWNoaWV2ZW1lbnRBY3Rpb24oYWN0aW9uKSB7XG4gIGNvbnN0IGRhdGEgPSB3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucyB8fCB7fTtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2FjaGlldmVtZW50cy1yZXZpZXctdGFibGUgdGJvZHkgdHJbZGF0YS1hY2gtaWRdJykuZm9yRWFjaChyb3cgPT4ge1xuICAgIGlmIChyb3cuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSByZXR1cm47ICAgLy8gcmVzcGVjdCBmaWx0ZXJcbiAgICBjb25zdCBhY2hJZCA9IHJvdy5kYXRhc2V0LmFjaElkO1xuICAgIGlmICghYWNoSWQpIHJldHVybjtcbiAgICBsZXQgcmVzb2x2ZWRBY3Rpb24gPSBhY3Rpb247XG4gICAgaWYgKGFjdGlvbiA9PT0gJ3JlY29tbWVuZGVkJykge1xuICAgICAgaWYgKGFjaElkLnN0YXJ0c1dpdGgoJ3N1Z2c6OicpKSB7XG4gICAgICAgIHJlc29sdmVkQWN0aW9uID0gJ2luY2x1ZGUnOyAvLyBBSS1zdWdnZXN0ZWQgaXRlbXMgZGVmYXVsdCB0byBpbmNsdWRlIHdoZW4gYWNjZXB0aW5nIGFsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVjID0gZ2V0QWNoaWV2ZW1lbnRSZWNvbW1lbmRhdGlvbihhY2hJZCwgZGF0YSk7XG4gICAgICAgIGlmIChyZWMgPT09ICdFbXBoYXNpemUnKSAgICAgICAgIHJlc29sdmVkQWN0aW9uID0gJ2VtcGhhc2l6ZSc7XG4gICAgICAgIGVsc2UgaWYgKHJlYyA9PT0gJ0luY2x1ZGUnKSAgICAgIHJlc29sdmVkQWN0aW9uID0gJ2luY2x1ZGUnO1xuICAgICAgICBlbHNlIGlmIChyZWMgPT09ICdEZS1lbXBoYXNpemUnKSByZXNvbHZlZEFjdGlvbiA9ICdkZS1lbXBoYXNpemUnO1xuICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEFjdGlvbiA9ICdleGNsdWRlJztcbiAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlQWNoaWV2ZW1lbnRBY3Rpb24oYWNoSWQsIHJlc29sdmVkQWN0aW9uKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUFjaGlldmVtZW50QWN0aW9uKGFjaElkLCBhY3Rpb24pIHtcbiAgd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zW2FjaElkXSA9IGFjdGlvbjtcbiAgY29uc3Qgcm93ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgdHJbZGF0YS1hY2gtaWQ9XCIke0NTUy5lc2NhcGUoYWNoSWQpfVwiXWApO1xuICBpZiAoIXJvdykgcmV0dXJuO1xuICByb3cucXVlcnlTZWxlY3RvckFsbCgnLmljb24tYnRuJykuZm9yRWFjaChidG4gPT4gYnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTtcbiAgY29uc3QgYWN0aXZlQnRuID0gcm93LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWFjdGlvbj1cIiR7YWN0aW9ufVwiXWApO1xuICBpZiAoYWN0aXZlQnRuKSBhY3RpdmVCdG4uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdEFjaGlldmVtZW50RGVjaXNpb25zKCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogYWNoaWV2ZW1lbnRzX3VpX3N1Ym1pdF9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTAzLTI1VDIxOjM5OjQ4WidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6YWNoaWV2ZW1lbnRzLXJldmlldy5zdWJtaXRcbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zXG4gICAqICAgLSBQT1NUIC9hcGkvY3YvbGF5b3V0LWVzdGltYXRlXG4gICAqICAgcmVhZHM6XG4gICAqICAgLSB3aW5kb3c6YWNoaWV2ZW1lbnREZWNpc2lvbnNcbiAgICogICAtIHdpbmRvdzpfc3VnZ2VzdGVkQWNoc09yZGVyZWRcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zLmRlY2lzaW9uc1xuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9ucy5hY2NlcHRlZF9zdWdnZXN0aW9uc1xuICAgKiAgIC0gd2luZG93Ol9zYXZlZERlY2lzaW9ucy5hY2hpZXZlbWVudF9kZWNpc2lvbnNcbiAgICogICAtIHdpbmRvdzpfc2F2ZWREZWNpc2lvbnMuYWNjZXB0ZWRfc3VnZ2VzdGVkX2FjaGlldmVtZW50c1xuICAgKiAgIG5vdGVzOiBQZXJzaXN0cyBhY2hpZXZlbWVudCBpbmNsdXNpb24gZGVjaXNpb25zIGFuZCB0aGUgYWNjZXB0ZWQgQUktc3VnZ2VzdGVkIGFjaGlldmVtZW50cyB0aGF0IHNob3VsZCByZW1haW4gc2Vzc2lvbi1vbmx5IHVudGlsIGFuIGV4cGxpY2l0IGhhcnZlc3Qgc3RlcC5cbiAgICovXG4gIGNvbnN0IGFsbERlY2lzaW9ucyA9IHdpbmRvdy5hY2hpZXZlbWVudERlY2lzaW9ucyB8fCB7fTtcbiAgLy8gU2VwYXJhdGUgZXhpc3RpbmcgYWNoaWV2ZW1lbnRzIGZyb20gQUktc3VnZ2VzdGVkIG9uZXNcbiAgY29uc3QgZGVjaXNpb25zID0ge307XG4gIGNvbnN0IHN1Z2dlc3RlZERlY2lzaW9ucyA9IHt9O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhhbGxEZWNpc2lvbnMpKSB7XG4gICAgaWYgKGsuc3RhcnRzV2l0aCgnc3VnZzo6JykpIHN1Z2dlc3RlZERlY2lzaW9uc1trXSA9IHY7XG4gICAgZWxzZSBkZWNpc2lvbnNba10gPSB2O1xuICB9XG4gIGNvbnN0IGNvdW50ID0gT2JqZWN0LmtleXMoYWxsRGVjaXNpb25zKS5sZW5ndGg7XG4gIGlmIChjb3VudCA9PT0gMCkgcmV0dXJuO1xuICAvLyBSZXNvbHZlIHN1Z2dlc3RlZCBhY2hpZXZlbWVudCBvYmplY3RzIHRoYXQgd2VyZSBhY2NlcHRlZFxuICBjb25zdCBzdWdnZXN0ZWRBY2hzID0gd2luZG93Ll9zdWdnZXN0ZWRBY2hzT3JkZXJlZCB8fCBbXTtcbiAgY29uc3QgYWNjZXB0ZWRTdWdnZXN0aW9ucyA9IHN1Z2dlc3RlZEFjaHNcbiAgICAuZmlsdGVyKHMgPT4ge1xuICAgICAgY29uc3QgYWN0aW9uID0gc3VnZ2VzdGVkRGVjaXNpb25zW3MuX3N1Z2dJZF07XG4gICAgICByZXR1cm4gYWN0aW9uID09PSAnaW5jbHVkZScgfHwgYWN0aW9uID09PSAnZW1waGFzaXplJztcbiAgICB9KVxuICAgIC5tYXAocyA9PiAoeyB0aXRsZTogcy50aXRsZSwgZGVzY3JpcHRpb246IHMuZGVzY3JpcHRpb24sIGV4cGVyaWVuY2VfaWQ6IHMuZXhwZXJpZW5jZV9pZCwgcmF0aW9uYWxlOiBzLnJhdGlvbmFsZSB9KSk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXZpZXctZGVjaXNpb25zJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ2FjaGlldmVtZW50cycsIGRlY2lzaW9ucywgYWNjZXB0ZWRfc3VnZ2VzdGlvbnM6IGFjY2VwdGVkU3VnZ2VzdGlvbnMgfSlcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIHN0YXRlTWFuYWdlci5tYXJrQ29udGVudENoYW5nZWQoKTtcbiAgICAgIHNob3dUb2FzdChgQWNoaWV2ZW1lbnQgc2VsZWN0aW9ucyBzYXZlZCAoJHtjb3VudH0gaXRlbXMpYCk7XG4gICAgICBzY2hlZHVsZUF0c1JlZnJlc2goKTtcbiAgICAgIC8vIFBlcnNpc3QgbG9jYWxseSBzbyB0aGUgcmV2aWV3IFVJIGltbWVkaWF0ZWx5IHJlZmxlY3RzIHNhdmVkIGNob2ljZXNcbiAgICAgIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMgPSB3aW5kb3cuX3NhdmVkRGVjaXNpb25zIHx8IHt9O1xuICAgICAgd2luZG93Ll9zYXZlZERlY2lzaW9ucy5hY2hpZXZlbWVudF9kZWNpc2lvbnMgPSBkZWNpc2lvbnM7XG4gICAgICBpZiAoYWNjZXB0ZWRTdWdnZXN0aW9ucyAmJiBhY2NlcHRlZFN1Z2dlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgd2luZG93Ll9zYXZlZERlY2lzaW9ucy5hY2NlcHRlZF9zdWdnZXN0ZWRfYWNoaWV2ZW1lbnRzID0gYWNjZXB0ZWRTdWdnZXN0aW9ucztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlSW5jbHVzaW9uQ291bnRzID09PSAnZnVuY3Rpb24nKSB1cGRhdGVJbmNsdXNpb25Db3VudHMoKTtcbiAgICAgIHN3aXRjaFRhYigndGFnbGluZS1yZXZpZXcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXJyID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgc2hvd1RvYXN0KGBFcnJvcjogJHtlcnIuZXJyb3IgfHwgJ0ZhaWxlZCB0byBzYXZlIHNlbGVjdGlvbnMnfWAsICdlcnJvcicpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dUb2FzdCgnRmFpbGVkIHRvIHNhdmUgYWNoaWV2ZW1lbnQgc2VsZWN0aW9ucy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnZXJyb3InKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3ZlQWNoaWV2ZW1lbnRSb3coYWNoSWQsIGRpcmVjdGlvbikge1xuICBjb25zdCBhcnIgPSB3aW5kb3cuX2FjaGlldmVtZW50c09yZGVyZWQ7XG4gIGlmICghYXJyKSByZXR1cm47XG4gIGNvbnN0IGlkeCA9IGFyci5maW5kSW5kZXgoYSA9PiBhLmlkID09PSBhY2hJZCk7XG4gIGlmIChpZHggPCAwKSByZXR1cm47XG4gIGNvbnN0IG5ld0lkeCA9IGlkeCArIGRpcmVjdGlvbjtcbiAgaWYgKG5ld0lkeCA8IDAgfHwgbmV3SWR4ID49IGFyci5sZW5ndGgpIHJldHVybjtcbiAgW2FycltpZHhdLCBhcnJbbmV3SWR4XV0gPSBbYXJyW25ld0lkeF0sIGFycltpZHhdXTtcbiAgd2luZG93Ll9hY2hpZXZlbWVudHNPcmRlcmVkID0gYXJyO1xuICBfcmVuZGVyQWNoaWV2ZW1lbnRzUmV2aWV3VGFibGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaGlldmVtZW50cy10YWJsZS1jb250YWluZXInKSk7XG59XG5cbi8vID09PT0gQWNoaWV2ZW1lbnRzIEVkaXRvciBUYWIgPT09PVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBwZXItZXhwZXJpZW5jZSBhY2hpZXZlbWVudHMgZWRpdG9yIHRhYi5cbiAqIEVhY2ggZXhwZXJpZW5jZSBnZXRzIGEgY29sbGFwc2libGUgY2FyZCB3aXRoIGl0cyBhY2hpZXZlbWVudHMgbGlzdGVkLlxuICogRWFjaCBhY2hpZXZlbWVudCBzdXBwb3J0czogaW5saW5lIGVkaXQsIHJlb3JkZXIgKFx1MjE5MVx1MjE5MyksIGRlbGV0ZSwgYW5kIExMTSByZXdyaXRlLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZEFjaGlldmVtZW50c0VkaXRvcigpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O3BhZGRpbmc6MjBweDtjb2xvcjojNmI3MjgwO1wiPjxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyLXdpZHRoOjJweDtmbGV4LXNocmluazowO1wiPjwvZGl2PjxzcGFuPkxvYWRpbmcgZXhwZXJpZW5jZSBidWxsZXRzIGVkaXRvclx1MjAyNjwvc3Bhbj48L2Rpdj4nO1xuXG4gIC8vIEZldGNoIGV4cGVyaWVuY2VzICsgdGhlaXIgYWNoaWV2ZW1lbnRzIGZyb20gbWFzdGVyIGZpZWxkc1xuICBsZXQgZXhwZXJpZW5jZXMgPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZmllbGRzJyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgZXhwZXJpZW5jZXMgPSBkYXRhLmV4cGVyaWVuY2VzIHx8IFtdO1xuICB9IGNhdGNoIChfKSB7fVxuXG4gIGlmIChleHBlcmllbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwicGFkZGluZzoyMHB4O2NvbG9yOiM2YjcyODA7XCI+Tm8gZXhwZXJpZW5jZXMgZm91bmQgaW4gbWFzdGVyIENWLjwvcD4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEluaXRpYWxpc2UgZWRpdHMgc3RvcmUgXHUyMDE0IGtleWVkIGJ5IGV4cGVyaWVuY2UgaW5kZXgsIHZhbHVlIGlzIGFycmF5IG9mIHsgdGV4dCwgaGlkZGVuIH1cbiAgd2luZG93LmFjaGlldmVtZW50RWRpdHMgPSB3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0cyB8fCB7fTtcbiAgZXhwZXJpZW5jZXMuZm9yRWFjaCgoZXhwLCBleHBJZHgpID0+IHtcbiAgICBpZiAoIXdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF0pIHtcbiAgICAgIHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF0gPSAoZXhwLmtleV9hY2hpZXZlbWVudHMgfHwgZXhwLmFjaGlldmVtZW50cyB8fCBbXSkubWFwKGEgPT5cbiAgICAgICAgX25vcm1hbGl6ZUFjaGlldmVtZW50RWRpdEVudHJ5KFxuICAgICAgICAgIHR5cGVvZiBhID09PSAnc3RyaW5nJyA/IGEgOiAoYSAmJiAoYS50ZXh0IHx8IGEuZGVzY3JpcHRpb24gfHwgYS5jb250ZW50IHx8ICcnKSkgfHwgJydcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LmFjaGlldmVtZW50RWRpdHNbZXhwSWR4XSA9IF9ub3JtYWxpemVBY2hpZXZlbWVudEVkaXRMaXN0KHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IGh0bWwgPSBgXG4gICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6MTZweDtcIj5cbiAgICAgIDxoMiBzdHlsZT1cIm1hcmdpbjowIDAgNHB4O1wiPlx1MjcwRlx1RkUwRiBFeHBlcmllbmNlIEJ1bGxldHM8L2gyPlxuICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbjowIDAgMTZweDtmb250LXNpemU6MC45ZW07XCI+XG4gICAgICAgIEVkaXQsIHJlb3JkZXIsIGRlbGV0ZSwgb3IgQUktcmV3cml0ZSBpbmRpdmlkdWFsIGV4cGVyaWVuY2UgYnVsbGV0cyBwZXIgcm9sZS5cbiAgICAgICAgQ2hhbmdlcyBhcmUgc2F2ZWQgYXV0b21hdGljYWxseSBhbmQgdXNlZCBkdXJpbmcgQ1YgZ2VuZXJhdGlvbi5cbiAgICAgIDwvcD5cbiAgYDtcblxuICAvLyBGaWx0ZXIgb3V0IGV4cGVyaWVuY2VzIHRoYXQgdXNlciBtYXJrZWQgYXMgZXhjbHVkZWQgKHBlcnNpc3RlZCBkZWNpc2lvbnMpXG4gIGNvbnN0IGV4cERlY2lzaW9ucyA9ICh3aW5kb3cuX3NhdmVkRGVjaXNpb25zICYmIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMuZXhwZXJpZW5jZV9kZWNpc2lvbnMpIHx8IHVzZXJTZWxlY3Rpb25zLmV4cGVyaWVuY2VzIHx8IHt9O1xuICBleHBlcmllbmNlcy5mb3JFYWNoKChleHAsIGV4cElkeCkgPT4ge1xuICAgIGNvbnN0IGV4cElkID0gZXhwLmlkIHx8IGV4cC5leHBlcmllbmNlX2lkIHx8IGBleHA6OiR7ZXhwSWR4fWA7XG4gICAgY29uc3QgZGVjaXNpb24gPSBleHBEZWNpc2lvbnNbZXhwSWRdO1xuICAgIGlmIChkZWNpc2lvbiA9PT0gJ2V4Y2x1ZGUnKSByZXR1cm47IC8vIG9taXQgZXhjbHVkZWQgZXhwZXJpZW5jZXMgZnJvbSBlZGl0b3JcbiAgICBjb25zdCB0aXRsZSAgICA9IGVzY2FwZUh0bWwoZXhwLnRpdGxlIHx8IGV4cC5wb3NpdGlvbiB8fCBgRXhwZXJpZW5jZSAke2V4cElkeCArIDF9YCk7XG4gICAgY29uc3QgY29tcGFueSAgPSBlc2NhcGVIdG1sKGV4cC5jb21wYW55IHx8IGV4cC5vcmdhbml6YXRpb24gfHwgJycpO1xuICAgIGNvbnN0IGFjaENvdW50ID0gd2luZG93LmFjaGlldmVtZW50RWRpdHNbZXhwSWR4XS5sZW5ndGg7XG5cbiAgICBodG1sICs9IGBcbiAgICAgIDxkZXRhaWxzIG9wZW4gc3R5bGU9XCJtYXJnaW4tYm90dG9tOjEycHg7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6OHB4O292ZXJmbG93OmhpZGRlbjtcIj5cbiAgICAgICAgPHN1bW1hcnkgc3R5bGU9XCJwYWRkaW5nOjEycHggMTZweDtiYWNrZ3JvdW5kOiNmOWZhZmI7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtcIj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsZXg6MTtcIj4ke3RpdGxlfSR7Y29tcGFueSA/IGAgPHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDo0MDA7Y29sb3I6IzZiNzI4MDtcIj5AICR7Y29tcGFueX08L3NwYW4+YCA6ICcnfTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjhlbTtjb2xvcjojOWNhM2FmO1wiPiR7YWNoQ291bnR9IGJ1bGxldCR7YWNoQ291bnQgIT09IDEgPyAncycgOiAnJ308L3NwYW4+XG4gICAgICAgIDwvc3VtbWFyeT5cbiAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6MTJweCAxNnB4O1wiIGlkPVwiYWNoLWVkaXRvci1leHAtJHtleHBJZHh9XCI+XG4gICAgICAgICAgPGRpdiBpZD1cImFjaC1saXN0LSR7ZXhwSWR4fVwiPjwvZGl2PlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tc2Vjb25kYXJ5XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MC44NWVtO1wiXG4gICAgICAgICAgICBvbmNsaWNrPVwiYWRkQWNoaWV2ZW1lbnRSb3coJHtleHBJZHh9KVwiPisgQWRkIEJ1bGxldDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGV0YWlscz5cbiAgICBgO1xuICB9KTtcblxuICBodG1sICs9IGBcbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoyMHB4O2Rpc3BsYXk6ZmxleDtnYXA6MTJweDthbGlnbi1pdGVtczpjZW50ZXI7XCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYmFjay1idG5cIiBvbmNsaWNrPVwic3dpdGNoVGFiKCdleHAtcmV2aWV3JylcIj5cdTIxOTAgQmFjayB0byBFeHBlcmllbmNlczwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRpbnVlLWJ0blwiIG9uY2xpY2s9XCJzYXZlQWNoaWV2ZW1lbnRFZGl0c0FuZENvbnRpbnVlKClcIj5TYXZlICZhbXA7IENvbnRpbnVlIHRvIFNraWxscyBcdTIxOTI8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbDtcblxuICAvLyBSZW5kZXIgYWNoaWV2ZW1lbnQgcm93cyBmb3IgZWFjaCBleHBlcmllbmNlXG4gIGV4cGVyaWVuY2VzLmZvckVhY2goKF8sIGV4cElkeCkgPT4gcmVuZGVyQWNoaWV2ZW1lbnRFZGl0b3JSb3dzKGV4cElkeCkpO1xufVxuXG4vLyBWZXJicyB0aGF0IGdlbmVyYXRlIGEgd2Vhay12ZXJiIHdhcm5pbmcgYmFkZ2UgaW4gdGhlIGJ1bGxldCBlZGl0b3IuXG5jb25zdCBfQUNIX1BBU1NJVkVfU1RBUlRTID0gbmV3IFNldChbJ3dhcycsJ3dlcmUnLCdpcycsJ2FyZScsJ2JlZW4nXSk7XG5jb25zdCBfQUNIX1dFQUtfVkVSQlMgPSBuZXcgU2V0KFtcbiAgJ2Fzc2lzdGVkJywnY29udHJpYnV0ZWQnLCdoZWxwZWQnLCdwYXJ0aWNpcGF0ZWQnLCdzdXBwb3J0ZWQnLFxuICAnc3VwZXJ2aXNlZCcsJ3dvcmtlZCcsJ2NvbGxhYm9yYXRlZCcsJ2Nvb3BlcmF0ZWQnLFxuXSk7XG5jb25zdCBfQUNIX1NUUk9OR19WRVJCUyA9IG5ldyBTZXQoW1xuICAnYWNjZWxlcmF0ZWQnLCdhY2hpZXZlZCcsJ2FyY2hpdGVjdGVkJywnYXV0b21hdGVkJywnYnVpbHQnLFxuICAnY2hhbXBpb25lZCcsJ2NvaW5lZCcsJ2NvbmNlaXZlZCcsJ2NvbmR1Y3RlZCcsJ2NvbnNvbGlkYXRlZCcsXG4gICdjcmVhdGVkJywnY3V0JywnZGVsaXZlcmVkJywnZGVtb25zdHJhdGVkJywnZGVwbG95ZWQnLFxuICAnZGVzaWduZWQnLCdkZXZlbG9wZWQnLCdkaXJlY3RlZCcsJ2RvdWJsZWQnLCdkcm92ZScsXG4gICdlbmFibGVkJywnZXN0YWJsaXNoZWQnLCdleHBhbmRlZCcsJ2ZvdW5kZWQnLCdnZW5lcmF0ZWQnLFxuICAnZ3JldycsJ2ltcGxlbWVudGVkJywnaW1wcm92ZWQnLCdpbmNyZWFzZWQnLCdpbnRlZ3JhdGVkJyxcbiAgJ2ludmVudGVkJywnbGF1bmNoZWQnLCdsZWQnLCdtYW5hZ2VkJywnb3B0aW1pemVkJywncGlvbmVlcmVkJyxcbiAgJ3Byb3ZpZGVkJywncHVibGlzaGVkJywncmFpc2VkJywncmVkdWNlZCcsJ3JlZmFjdG9yZWQnLCdzY2FsZWQnLFxuICAnc2VjdXJlZCcsJ3NoaXBwZWQnLCdzcGVhcmhlYWRlZCcsJ3N0cmVhbWxpbmVkJywndGF1Z2h0JyxcbiAgJ3RyYW5zZm9ybWVkJywndHJhbnNsYXRlZCcsJ3RyaXBsZWQnLFxuXSk7XG5cbmZ1bmN0aW9uIF9hY2hWZXJiV2FybmluZyh0ZXh0KSB7XG4gIGNvbnN0IGZpcnN0V29yZCA9ICh0ZXh0IHx8ICcnKS50cmltKCkuc3BsaXQoL1tcXHMsLjo7XS8pWzBdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXpdL2csICcnKTtcbiAgaWYgKCFmaXJzdFdvcmQpIHJldHVybiBudWxsO1xuICBpZiAoX0FDSF9QQVNTSVZFX1NUQVJUUy5oYXMoZmlyc3RXb3JkKSkgcmV0dXJuIHsgbGV2ZWw6ICdwYXNzaXZlJywgd29yZDogZmlyc3RXb3JkIH07XG4gIGlmIChfQUNIX1dFQUtfVkVSQlMuaGFzKGZpcnN0V29yZCkpIHJldHVybiB7IGxldmVsOiAnd2VhaycsICAgIHdvcmQ6IGZpcnN0V29yZCB9O1xuICBpZiAoIV9BQ0hfU1RST05HX1ZFUkJTLmhhcyhmaXJzdFdvcmQpKSByZXR1cm4geyBsZXZlbDogJ25ldXRyYWwnLCB3b3JkOiBmaXJzdFdvcmQgfTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmVuZGVyIHRoZSBlZGl0YWJsZSBhY2hpZXZlbWVudCByb3dzIGZvciBvbmUgZXhwZXJpZW5jZS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyQWNoaWV2ZW1lbnRFZGl0b3JSb3dzKGV4cElkeCkge1xuICBjb25zdCBsaXN0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgYWNoLWxpc3QtJHtleHBJZHh9YCk7XG4gIGlmICghbGlzdEVsKSByZXR1cm47XG4gIGNvbnN0IGFjaHMgPSBfbm9ybWFsaXplQWNoaWV2ZW1lbnRFZGl0TGlzdCh3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdIHx8IFtdKTtcbiAgd2luZG93LmFjaGlldmVtZW50RWRpdHNbZXhwSWR4XSA9IGFjaHM7XG5cbiAgaWYgKGFjaHMubGVuZ3RoID09PSAwKSB7XG4gICAgbGlzdEVsLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImNvbG9yOiM5Y2EzYWY7Zm9udC1zaXplOjAuODVlbTtwYWRkaW5nOjRweCAwO1wiPk5vIGV4cGVyaWVuY2UgYnVsbGV0cyB5ZXQuPC9wPic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGlzdEVsLmlubmVySFRNTCA9IGFjaHMubWFwKChlbnRyeSwgYWNoSWR4KSA9PiB7XG4gICAgY29uc3QgdGV4dCA9IF9hY2hpZXZlbWVudEVudHJ5VGV4dChlbnRyeSk7XG4gICAgY29uc3QgaGlkZGVuID0gX2FjaGlldmVtZW50RW50cnlIaWRkZW4oZW50cnkpO1xuICAgIGNvbnN0IHZlcmJXYXJuID0gX2FjaFZlcmJXYXJuaW5nKHRleHQpO1xuICAgIGNvbnN0IHZlcmJCYWRnZSA9IHZlcmJXYXJuXG4gICAgICA/ICh2ZXJiV2Fybi5sZXZlbCA9PT0gJ3Bhc3NpdmUnXG4gICAgICAgICAgPyBgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjc4ZW07Y29sb3I6IzlmMTIzOTtiYWNrZ3JvdW5kOiNmZmYxZjI7Ym9yZGVyOjFweCBzb2xpZCAjZmVjZGQzO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MnB4IDZweDttYXJnaW4tdG9wOjNweDtcIiB0aXRsZT1cIkJ1bGxldCBvcGVucyB3aXRoIHBhc3NpdmUgdm9pY2UgKCcke3ZlcmJXYXJuLndvcmR9JykgXHUyMDE0IHJld3JpdGUgd2l0aCBhbiBhY3RpdmUgb3BlbmluZyB2ZXJiXCI+XHUyNkEwIFBhc3NpdmUgdm9pY2UgXHUyMDE0IHJld3JpdGUgd2l0aCBhbiBhY3RpdmUgb3BlbmluZyB2ZXJiPC9kaXY+YFxuICAgICAgICAgIDogdmVyYldhcm4ubGV2ZWwgPT09ICd3ZWFrJ1xuICAgICAgICAgID8gYDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC43OGVtO2NvbG9yOiNiNDUzMDk7YmFja2dyb3VuZDojZmZmYmViO2JvcmRlcjoxcHggc29saWQgI2ZkZTY4YTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjJweCA2cHg7bWFyZ2luLXRvcDozcHg7XCIgdGl0bGU9XCJPcGVuaW5nIHZlcmIgJyR7dmVyYldhcm4ud29yZH0nIGlzIHdlYWsgXHUyMDE0IGNvbnNpZGVyIExlZCwgQnVpbHQsIERyb3ZlLCBldGMuXCI+XHUyNkEwIFdlYWsgb3BlbmluZyB2ZXJiIFx1MjAxNCB1c2UgYSBzdHJvbmdlciBhY3Rpb24gdmVyYjwvZGl2PmBcbiAgICAgICAgICA6IGA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuNzhlbTtjb2xvcjojNmI3MjgwO2JhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoycHggNnB4O21hcmdpbi10b3A6M3B4O1wiIHRpdGxlPVwiJyR7dmVyYldhcm4ud29yZH0nIGlzIG5vdCBpbiB0aGUgc3Ryb25nLXZlcmIgbGlzdCBcdTIwMTQgdmVyaWZ5IGl0IG1ha2VzIGFuIGltcGFjdCBzdGF0ZW1lbnRcIj5cdTIxMzkgT3BlbmluZyB2ZXJiIG5vdCBpbiBzdHJvbmctdmVyYiBsaXN0PC9kaXY+YFxuICAgICAgICApXG4gICAgICA6ICcnO1xuICAgIHJldHVybiBgXG4gICAgPGRpdiBpZD1cImFjaC1yb3ctJHtleHBJZHh9LSR7YWNoSWR4fVwiIGNsYXNzPVwiJHtoaWRkZW4gPyAnYWNoaWV2ZW1lbnQtcm93LWhpZGRlbicgOiAnJ31cIiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luLWJvdHRvbTo4cHg7XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4O3BhZGRpbmctdG9wOjRweDtcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgdGl0bGU9XCJNb3ZlIHVwXCIgICBhcmlhLWxhYmVsPVwiTW92ZSBidWxsZXQgdXBcIiAgIG9uY2xpY2s9XCJtb3ZlQWNoaWV2ZW1lbnQoJHtleHBJZHh9LCR7YWNoSWR4fSwtMSlcIj5cdTI1QjI8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgdGl0bGU9XCJNb3ZlIGRvd25cIiBhcmlhLWxhYmVsPVwiTW92ZSBidWxsZXQgZG93blwiIG9uY2xpY2s9XCJtb3ZlQWNoaWV2ZW1lbnQoJHtleHBJZHh9LCR7YWNoSWR4fSwrMSlcIj5cdTI1QkM8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBzdHlsZT1cImZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO1wiPlxuICAgICAgPHRleHRhcmVhIGlkPVwiYWNoLXRleHQtJHtleHBJZHh9LSR7YWNoSWR4fVwiXG4gICAgICAgIHJvd3M9XCIyXCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICR7aGlkZGVuID8gJyNmNTllMGInIDogdmVyYldhcm4/LmxldmVsID09PSAncGFzc2l2ZScgPyAnI2ZlY2RkMycgOiB2ZXJiV2Fybj8ubGV2ZWwgPT09ICd3ZWFrJyA/ICcjZmRlNjhhJyA6ICcjZDFkNWRiJ307Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjAuOWVtO3Jlc2l6ZTp2ZXJ0aWNhbDtib3gtc2l6aW5nOmJvcmRlci1ib3g7JHtoaWRkZW4gPyAnYmFja2dyb3VuZDojZmZmYmViO2NvbG9yOiM5MjQwMGU7JyA6ICcnfVwiXG4gICAgICAgIG9uY2hhbmdlPVwidXBkYXRlQWNoaWV2ZW1lbnRUZXh0KCR7ZXhwSWR4fSwke2FjaElkeH0sdGhpcy52YWx1ZSlcIlxuICAgICAgICBvbmJsdXI9XCJ1cGRhdGVBY2hpZXZlbWVudFRleHQoJHtleHBJZHh9LCR7YWNoSWR4fSx0aGlzLnZhbHVlKVwiXG4gICAgICA+JHtlc2NhcGVIdG1sKHRleHQpfTwvdGV4dGFyZWE+XG4gICAgICAke3ZlcmJCYWRnZX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtwYWRkaW5nLXRvcDoycHg7XCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2hpZGRlbiA/ICdhY3RpdmUnIDogJyd9XCIgdGl0bGU9XCIke2hpZGRlbiA/ICdTaG93IGJ1bGxldCBpbiBnZW5lcmF0ZWQgQ1YnIDogJ0hpZGUgYnVsbGV0IGZyb20gZ2VuZXJhdGVkIENWJ31cIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCIke2hpZGRlbiA/ICdTaG93IGJ1bGxldCBpbiBnZW5lcmF0ZWQgQ1YnIDogJ0hpZGUgYnVsbGV0IGZyb20gZ2VuZXJhdGVkIENWJ31cIiBhcmlhLXByZXNzZWQ9XCIke2hpZGRlbn1cIlxuICAgICAgICAgIG9uY2xpY2s9XCJ0b2dnbGVBY2hpZXZlbWVudEhpZGRlbigke2V4cElkeH0sJHthY2hJZHh9KVwiXG4gICAgICAgICAgc3R5bGU9XCJjb2xvcjoke2hpZGRlbiA/ICcjYjQ1MzA5JyA6ICcjNjQ3NDhiJ307XCI+JHtleWVTbGFzaEljb24oKX08L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgdGl0bGU9XCJBc2sgQUkgdG8gcmV3cml0ZVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkFzayBBSSB0byByZXdyaXRlIHRoaXMgYnVsbGV0XCJcbiAgICAgICAgICBvbmNsaWNrPVwicmV3cml0ZUFjaGlldmVtZW50V2l0aExMTSgke2V4cElkeH0sJHthY2hJZHh9KVwiXG4gICAgICAgICAgPlx1MjcyODwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiB0aXRsZT1cIkRlbGV0ZVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkRlbGV0ZSB0aGlzIGJ1bGxldFwiXG4gICAgICAgICAgb25jbGljaz1cImRlbGV0ZUFjaGlldmVtZW50KCR7ZXhwSWR4fSwke2FjaElkeH0pXCJcbiAgICAgICAgICBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7XCI+XHVEODNEXHVEREQxPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgfSkuam9pbignJyk7XG59XG5cbi8vIERlYm91bmNlIHRpbWVyIGZvciBhdXRvLXBlcnNpc3RpbmcgYWNoaWV2ZW1lbnQgdGV4dCBlZGl0cy5cbmxldCBfYWNoUGVyc2lzdFRpbWVyID0gbnVsbDtcblxuZnVuY3Rpb24gdXBkYXRlQWNoaWV2ZW1lbnRUZXh0KGV4cElkeCwgYWNoSWR4LCB2YWx1ZSkge1xuICBpZiAoIXdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF0pIHJldHVybjtcbiAgY29uc3QgZXhpc3RpbmcgPSBfbm9ybWFsaXplQWNoaWV2ZW1lbnRFZGl0RW50cnkod2luZG93LmFjaGlldmVtZW50RWRpdHNbZXhwSWR4XVthY2hJZHhdKTtcbiAgZXhpc3RpbmcudGV4dCA9IHZhbHVlO1xuICB3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdW2FjaElkeF0gPSBleGlzdGluZztcblxuICAvLyBEZWJvdW5jZS1wZXJzaXN0IHNvIGVkaXRzIHN1cnZpdmUgdGFiIG5hdmlnYXRpb24gYW5kIHN0YXR1cyBwb2xsaW5nLlxuICBjbGVhclRpbWVvdXQoX2FjaFBlcnNpc3RUaW1lcik7XG4gIF9hY2hQZXJzaXN0VGltZXIgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZmV0Y2goJy9hcGkvc2F2ZS1hY2hpZXZlbWVudC1lZGl0cycsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGVkaXRzOiB3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0cyB9KSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKF9lKSB7IC8qIHNpbGVudCBcdTIwMTQgdXNlciBzdGlsbCBoYXMgaW4tbWVtb3J5IHN0YXRlICovIH1cbiAgfSwgNTAwKTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlQWNoaWV2ZW1lbnRIaWRkZW4oZXhwSWR4LCBhY2hJZHgpIHtcbiAgaWYgKCF3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdKSByZXR1cm47XG4gIGNvbnN0IGV4aXN0aW5nID0gX25vcm1hbGl6ZUFjaGlldmVtZW50RWRpdEVudHJ5KHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF1bYWNoSWR4XSk7XG4gIGV4aXN0aW5nLmhpZGRlbiA9ICFleGlzdGluZy5oaWRkZW47XG4gIHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF1bYWNoSWR4XSA9IGV4aXN0aW5nO1xuICByZW5kZXJBY2hpZXZlbWVudEVkaXRvclJvd3MoZXhwSWR4KTtcbn1cblxuZnVuY3Rpb24gbW92ZUFjaGlldmVtZW50KGV4cElkeCwgYWNoSWR4LCBkaXIpIHtcbiAgY29uc3QgYWNocyA9IHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF07XG4gIGlmICghYWNocykgcmV0dXJuO1xuICBjb25zdCBuZXdJZHggPSBhY2hJZHggKyBkaXI7XG4gIGlmIChuZXdJZHggPCAwIHx8IG5ld0lkeCA+PSBhY2hzLmxlbmd0aCkgcmV0dXJuO1xuICAvLyBGbHVzaCBjdXJyZW50IHRleHRhcmVhIHZhbHVlIGJlZm9yZSBtb3ZpbmdcbiAgY29uc3QgdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgYWNoLXRleHQtJHtleHBJZHh9LSR7YWNoSWR4fWApO1xuICBpZiAodGEpIHVwZGF0ZUFjaGlldmVtZW50VGV4dChleHBJZHgsIGFjaElkeCwgdGEudmFsdWUpO1xuICBbYWNoc1thY2hJZHhdLCBhY2hzW25ld0lkeF1dID0gW2FjaHNbbmV3SWR4XSwgYWNoc1thY2hJZHhdXTtcbiAgcmVuZGVyQWNoaWV2ZW1lbnRFZGl0b3JSb3dzKGV4cElkeCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUFjaGlldmVtZW50KGV4cElkeCwgYWNoSWR4KSB7XG4gIGNvbnN0IGFjaHMgPSB3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdO1xuICBpZiAoIWFjaHMpIHJldHVybjtcbiAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgY29uZmlybURpYWxvZyhcbiAgICAnRGVsZXRlIHRoaXMgYnVsbGV0IGZyb20gdGhpcyBzZXNzaW9uPyBIaWRkZW4gYnVsbGV0cyByZW1haW4gYXZhaWxhYmxlIGZvciBsYXRlciBoYXJ2ZXN0LCBidXQgZGVsZXRlIHJlbW92ZXMgdGhlIGVkaXRlZCByb3cgZW50aXJlbHkuJyxcbiAgICB7IGNvbmZpcm1MYWJlbDogJ0RlbGV0ZScsIGNhbmNlbExhYmVsOiAnQ2FuY2VsJywgZGFuZ2VyOiB0cnVlIH0sXG4gICk7XG4gIGlmICghY29uZmlybWVkKSByZXR1cm47XG4gIGFjaHMuc3BsaWNlKGFjaElkeCwgMSk7XG4gIHJlbmRlckFjaGlldmVtZW50RWRpdG9yUm93cyhleHBJZHgpO1xufVxuXG5mdW5jdGlvbiBhZGRBY2hpZXZlbWVudFJvdyhleHBJZHgpIHtcbiAgaWYgKCF3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdKSB3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdID0gW107XG4gIHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF0ucHVzaCh7IHRleHQ6ICcnLCBoaWRkZW46IGZhbHNlIH0pO1xuICByZW5kZXJBY2hpZXZlbWVudEVkaXRvclJvd3MoZXhwSWR4KTtcbiAgLy8gRm9jdXMgdGhlIG5ldyB0ZXh0YXJlYVxuICBjb25zdCBuZXdJZHggPSB3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdLmxlbmd0aCAtIDE7XG4gIGNvbnN0IHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGFjaC10ZXh0LSR7ZXhwSWR4fS0ke25ld0lkeH1gKTtcbiAgaWYgKHRhKSB0YS5mb2N1cygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXdyaXRlQWNoaWV2ZW1lbnRXaXRoTExNKGV4cElkeCwgYWNoSWR4KSB7XG4gIGNvbnN0IHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGFjaC10ZXh0LSR7ZXhwSWR4fS0ke2FjaElkeH1gKTtcbiAgaWYgKCF0YSkgcmV0dXJuO1xuICBjb25zdCBvcmlnaW5hbFRleHQgPSB0YS52YWx1ZS50cmltKCk7XG4gIGlmICghb3JpZ2luYWxUZXh0KSB7IHNob3dUb2FzdCgnUGxlYXNlIGVudGVyIGEgYnVsbGV0IGZpcnN0LicsICdlcnJvcicpOyByZXR1cm47IH1cblxuICBfcmV3cml0ZVN1Z2dlc3Rpb25IaXN0b3J5ID0gW107XG4gIF9sYXN0UmV3cml0ZUxvZ0lkID0gbnVsbDtcbiAgX29wZW5SZXdyaXRlTW9kYWwob3JpZ2luYWxUZXh0LCAnJywgbnVsbCwge1xuICAgIGV4cGVyaWVuY2VJbmRleDogZXhwSWR4LFxuICAgIGFjaGlldmVtZW50SW5kZXg6IGFjaElkeCxcbiAgICBvbkFjY2VwdDogYXN5bmMgKHN1Z2dlc3Rpb24pID0+IHtcbiAgICAgIHVwZGF0ZUFjaGlldmVtZW50VGV4dChleHBJZHgsIGFjaElkeCwgc3VnZ2VzdGlvbik7XG4gICAgICBpZiAodGEpIHRhLnZhbHVlID0gc3VnZ2VzdGlvbjtcbiAgICAgIF9yZWNvcmRSZXdyaXRlT3V0Y29tZSgnYWNjZXB0ZWQnLCBzdWdnZXN0aW9uKTtcbiAgICAgIHNob3dUb2FzdCgnQnVsbGV0IHVwZGF0ZWQuJyk7XG4gICAgfSxcbiAgfSk7XG4gIGF3YWl0IF9ydW5SZXdyaXRlKG9yaWdpbmFsVGV4dCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFpUmV3cml0ZVRvcExldmVsQWNoaWV2ZW1lbnQoYWNoSWQpIHtcbiAgY29uc3QgYWNoID0gKHdpbmRvdy5fYWNoaWV2ZW1lbnRzT3JkZXJlZCB8fCBbXSkuZmluZChhID0+IGEuaWQgPT09IGFjaElkKTtcbiAgaWYgKCFhY2gpIHJldHVybjtcbiAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gYWNoLmRlc2NyaXB0aW9uIHx8ICcnO1xuICBpZiAoIW9yaWdpbmFsVGV4dCkgeyBzaG93VG9hc3QoJ1BsZWFzZSBlbnRlciBhIGRlc2NyaXB0aW9uIGZpcnN0LicsICdlcnJvcicpOyByZXR1cm47IH1cblxuICBfcmV3cml0ZVN1Z2dlc3Rpb25IaXN0b3J5ID0gW107XG4gIF9sYXN0UmV3cml0ZUxvZ0lkID0gbnVsbDtcbiAgX29wZW5SZXdyaXRlTW9kYWwob3JpZ2luYWxUZXh0LCAnJywgbnVsbCwge1xuICAgIGV4cGVyaWVuY2VJbmRleDogbnVsbCxcbiAgICBvbkFjY2VwdDogYXN5bmMgKHN1Z2dlc3Rpb24pID0+IHtcbiAgICAgIGF3YWl0IHNhdmVUb3BMZXZlbEFjaGlldmVtZW50RmllbGQoYWNoSWQsICdkZXNjcmlwdGlvbicsIHN1Z2dlc3Rpb24pO1xuICAgICAgY29uc3QgZGVzY0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGFjaC1kZXNjLSR7Q1NTLmVzY2FwZShhY2hJZCl9YCk7XG4gICAgICBpZiAoZGVzY0VsKSBkZXNjRWwudmFsdWUgPSBzdWdnZXN0aW9uO1xuICAgICAgX3JlY29yZFJld3JpdGVPdXRjb21lKCdhY2NlcHRlZCcsIHN1Z2dlc3Rpb24pO1xuICAgICAgc2hvd1RvYXN0KCdBY2hpZXZlbWVudCB1cGRhdGVkLicpO1xuICAgIH0sXG4gIH0pO1xuICBhd2FpdCBfcnVuUmV3cml0ZShvcmlnaW5hbFRleHQpO1xufVxuXG5mdW5jdGlvbiBfb3BlblJld3JpdGVNb2RhbChvcmlnaW5hbFRleHQsIGN1cnJlbnRJbnN0cnVjdGlvbnMsIGN1cnJlbnRTdWdnZXN0aW9uLCBjYWxsYmFja3MpIHtcbiAgX3Jld3JpdGVDYWxsYmFja3MgPSBjYWxsYmFja3M7XG5cbiAgY29uc3Qgc3VnZ2VzdGVkSHRtbCA9IGN1cnJlbnRTdWdnZXN0aW9uICE9IG51bGxcbiAgICA/IGA8cCBpZD1cImFjaC1yZXdyaXRlLXN1Z2dlc3Rpb25cIiBzdHlsZT1cIm1hcmdpbjo0cHggMCAwO21pbi1oZWlnaHQ6Mi40ZW07XCI+JHtlc2NhcGVIdG1sKGN1cnJlbnRTdWdnZXN0aW9uKX08L3A+YFxuICAgIDogYDxwIGlkPVwiYWNoLXJld3JpdGUtc3VnZ2VzdGlvblwiIHN0eWxlPVwibWFyZ2luOjRweCAwIDA7bWluLWhlaWdodDoyLjRlbTtjb2xvcjojOWNhM2FmO2ZvbnQtc3R5bGU6aXRhbGljO1wiPlx1MjNGMyBHZW5lcmF0aW5nXHUyMDI2PC9wPmA7XG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FsZXJ0LW1vZGFsLXRpdGxlJykudGV4dENvbnRlbnQgPSAnXHUyNzI4IEFJIFJld3JpdGUnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWxlcnQtbW9kYWwtbWVzc2FnZScpLmlubmVySFRNTCA9IGBcbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxMHB4O1wiPlxuICAgICAgPHN0cm9uZz5PcmlnaW5hbDo8L3N0cm9uZz5cbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDttYXJnaW46NHB4IDAgMDtmb250LXN0eWxlOml0YWxpYztmb250LXNpemU6MC45MmVtO1wiPiR7ZXNjYXBlSHRtbChvcmlnaW5hbFRleHQpfTwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxMnB4O1wiPlxuICAgICAgPHN0cm9uZz5TdWdnZXN0ZWQ6PC9zdHJvbmc+XG4gICAgICAke3N1Z2dlc3RlZEh0bWx9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJhY2gtcmV3cml0ZS1pbnN0cnVjdGlvbnNcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MC45MmVtO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7XCI+SW5zdHJ1Y3Rpb25zIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2YjcyODA7XCI+KG9wdGlvbmFsKTwvc3Bhbj48L2xhYmVsPlxuICAgICAgPHRleHRhcmVhIGlkPVwiYWNoLXJld3JpdGUtaW5zdHJ1Y3Rpb25zXCJcbiAgICAgICAgcm93cz1cIjJcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gbWFrZSBpdCBtb3JlIGNvbmNpc2UsIGVtcGhhc2lzZSBsZWFkZXJzaGlwLCBhZGQgYSBtZXRyaWNcIlxuICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjAuOWVtO3Jlc2l6ZTp2ZXJ0aWNhbDtcIlxuICAgICAgPiR7ZXNjYXBlSHRtbChjdXJyZW50SW5zdHJ1Y3Rpb25zKX08L3RleHRhcmVhPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjhweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7XCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiIGlkPVwiYWNoLXJld3JpdGUtcmVqZWN0LWJ0blwiIG9uY2xpY2s9XCJfcmVjb3JkUmV3cml0ZU91dGNvbWUoJ3JlamVjdGVkJyk7IGNsb3NlQWxlcnRNb2RhbCgpXCI+UmVqZWN0PC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiIGlkPVwiYWNoLXJld3JpdGUtZ2VuZXJhdGUtYnRuXCI+R2VuZXJhdGU8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJjb250aW51ZS1idG5cIiAgaWQ9XCJhY2gtcmV3cml0ZS1hY2NlcHQtYnRuXCI+QWNjZXB0PC9idXR0b24+XG4gICAgPC9kaXY+YDtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWxlcnQtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHNldEluaXRpYWxGb2N1cygnYWxlcnQtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ2FsZXJ0LW1vZGFsLW92ZXJsYXknKTtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLXJld3JpdGUtZ2VuZXJhdGUtYnRuJykub25jbGljayA9ICgpID0+IF9ydW5SZXdyaXRlKG9yaWdpbmFsVGV4dCk7XG5cbiAgX3VwZGF0ZVJld3JpdGVBY2NlcHRCdG4oY3VycmVudFN1Z2dlc3Rpb24pO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlUmV3cml0ZUFjY2VwdEJ0bihzdWdnZXN0aW9uKSB7XG4gIGNvbnN0IGFjY2VwdEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtcmV3cml0ZS1hY2NlcHQtYnRuJyk7XG4gIGlmICghYWNjZXB0QnRuKSByZXR1cm47XG4gIGFjY2VwdEJ0bi5kaXNhYmxlZCA9IHN1Z2dlc3Rpb24gPT0gbnVsbDtcbiAgYWNjZXB0QnRuLm9uY2xpY2sgPSBzdWdnZXN0aW9uID09IG51bGwgPyBudWxsIDogYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IF9yZXdyaXRlQ2FsbGJhY2tzLm9uQWNjZXB0KHN1Z2dlc3Rpb24pO1xuICAgIGNsb3NlQWxlcnRNb2RhbCgpO1xuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVjb3JkUmV3cml0ZU91dGNvbWUob3V0Y29tZSwgYWNjZXB0ZWRUZXh0KSB7XG4gIGlmICghX2xhc3RSZXdyaXRlTG9nSWQpIHJldHVybjtcbiAgY29uc3QgbG9nSWQgPSBfbGFzdFJld3JpdGVMb2dJZDtcbiAgX2xhc3RSZXdyaXRlTG9nSWQgPSBudWxsO1xuICBjb25zdCBib2R5ID0geyBsb2dfaWQ6IGxvZ0lkLCBvdXRjb21lIH07XG4gIGlmIChhY2NlcHRlZFRleHQgIT0gbnVsbCkgYm9keS5hY2NlcHRlZF90ZXh0ID0gYWNjZXB0ZWRUZXh0O1xuICB0cnkge1xuICAgIGF3YWl0IGZldGNoKCcvYXBpL3Jld3JpdGUtYWNoaWV2ZW1lbnQtb3V0Y29tZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoXykgeyAvKiBmaXJlLWFuZC1mb3JnZXQgXHUyMDE0IGRvbid0IGRpc3J1cHQgdGhlIFVJICovIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3J1blJld3JpdGUob3JpZ2luYWxUZXh0KSB7XG4gIGNvbnN0IGluc3RydWN0aW9uc0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaC1yZXdyaXRlLWluc3RydWN0aW9ucycpO1xuICBjb25zdCB1c2VySW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zRWwgPyBpbnN0cnVjdGlvbnNFbC52YWx1ZS50cmltKCkgOiAnJztcblxuICBjb25zdCBnZW5lcmF0ZUJ0biAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLXJld3JpdGUtZ2VuZXJhdGUtYnRuJyk7XG4gIGNvbnN0IGFjY2VwdEJ0biAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtcmV3cml0ZS1hY2NlcHQtYnRuJyk7XG4gIGNvbnN0IHJlamVjdEJ0biAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtcmV3cml0ZS1yZWplY3QtYnRuJyk7XG4gIGNvbnN0IHN1Z2dlc3Rpb25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtcmV3cml0ZS1zdWdnZXN0aW9uJyk7XG5cbiAgLy8gQ2FwdHVyZSB0aGUgY3VycmVudCBzdWdnZXN0aW9uIGFzIGEgcHJpb3IgYXR0ZW1wdCBiZWZvcmUgb3ZlcndyaXRpbmdcbiAgaWYgKHN1Z2dlc3Rpb25FbCkge1xuICAgIGNvbnN0IHByZXYgPSBzdWdnZXN0aW9uRWwudGV4dENvbnRlbnQudHJpbSgpO1xuICAgIGlmIChwcmV2ICYmIHByZXYgIT09ICdHZW5lcmF0aW5nXHUyMDI2JyAmJiAhcHJldi5zdGFydHNXaXRoKCdFcnJvcjonKSAmJiAhX3Jld3JpdGVTdWdnZXN0aW9uSGlzdG9yeS5pbmNsdWRlcyhwcmV2KSkge1xuICAgICAgX3Jld3JpdGVTdWdnZXN0aW9uSGlzdG9yeS5wdXNoKHByZXYpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChnZW5lcmF0ZUJ0bikgeyBnZW5lcmF0ZUJ0bi5kaXNhYmxlZCA9IHRydWU7IGdlbmVyYXRlQnRuLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz1cImJ0bi1zcGlubmVyXCI+PC9zcGFuPkdlbmVyYXRpbmdcXHUyMDI2JzsgfVxuICBpZiAoYWNjZXB0QnRuKSAgIHsgYWNjZXB0QnRuLmRpc2FibGVkID0gdHJ1ZTsgfVxuICBpZiAoc3VnZ2VzdGlvbkVsKSB7IHN1Z2dlc3Rpb25FbC5zdHlsZS5jb2xvciA9ICcjOWNhM2FmJzsgc3VnZ2VzdGlvbkVsLnN0eWxlLmZvbnRTdHlsZSA9ICdpdGFsaWMnOyBzdWdnZXN0aW9uRWwudGV4dENvbnRlbnQgPSAnR2VuZXJhdGluZ1x1MjAyNic7IH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3Jld3JpdGUtYWNoaWV2ZW1lbnQnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBhY2hpZXZlbWVudF90ZXh0OiAgICAgb3JpZ2luYWxUZXh0LFxuICAgICAgICBleHBlcmllbmNlX2luZGV4OiAgICAgX3Jld3JpdGVDYWxsYmFja3M/LmV4cGVyaWVuY2VJbmRleCA/PyBudWxsLFxuICAgICAgICBhY2hpZXZlbWVudF9pbmRleDogICAgX3Jld3JpdGVDYWxsYmFja3M/LmFjaGlldmVtZW50SW5kZXggPz8gbnVsbCxcbiAgICAgICAgdXNlcl9pbnN0cnVjdGlvbnM6ICAgIHVzZXJJbnN0cnVjdGlvbnMsXG4gICAgICAgIHByZXZpb3VzX3N1Z2dlc3Rpb25zOiBfcmV3cml0ZVN1Z2dlc3Rpb25IaXN0b3J5LFxuICAgICAgfSlcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKGRhdGEuZXJyb3IgfHwgJ1Jld3JpdGUgZmFpbGVkJyk7XG5cbiAgICBjb25zdCByZXdyaXR0ZW4gPSBkYXRhLnJld3JpdHRlbiB8fCAnJztcbiAgICBfbGFzdFJld3JpdGVMb2dJZCA9IGRhdGEubG9nX2lkIHx8IG51bGw7XG4gICAgaWYgKHN1Z2dlc3Rpb25FbCkge1xuICAgICAgc3VnZ2VzdGlvbkVsLnN0eWxlLmNvbG9yID0gJyc7XG4gICAgICBzdWdnZXN0aW9uRWwuc3R5bGUuZm9udFN0eWxlID0gJyc7XG4gICAgICBzdWdnZXN0aW9uRWwudGV4dENvbnRlbnQgPSByZXdyaXR0ZW47XG4gICAgfVxuICAgIF91cGRhdGVSZXdyaXRlQWNjZXB0QnRuKHJld3JpdHRlbik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzdWdnZXN0aW9uRWwpIHsgc3VnZ2VzdGlvbkVsLnN0eWxlLmNvbG9yID0gJyNlZjQ0NDQnOyBzdWdnZXN0aW9uRWwuc3R5bGUuZm9udFN0eWxlID0gJyc7IHN1Z2dlc3Rpb25FbC50ZXh0Q29udGVudCA9IGBFcnJvcjogJHtlcnIubWVzc2FnZX1gOyB9XG4gICAgc2hvd1RvYXN0KGBBSSByZXdyaXRlIGZhaWxlZDogJHtlcnIubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoZ2VuZXJhdGVCdG4pIHsgZ2VuZXJhdGVCdG4uZGlzYWJsZWQgPSBmYWxzZTsgZ2VuZXJhdGVCdG4udGV4dENvbnRlbnQgPSAnR2VuZXJhdGUnOyB9XG4gICAgaWYgKHJlamVjdEJ0bikgICB7IHJlamVjdEJ0bi5kaXNhYmxlZCA9IGZhbHNlOyB9XG4gIH1cbn1cblxuLyoqXG4gKiBTYXZlIGEgc2luZ2xlIGZpZWxkIG9mIGEgdG9wLWxldmVsIGFjaGlldmVtZW50IGluIHNlc3Npb24gc3RhdGUgYW5kIHVwZGF0ZSB0aGUgbG9jYWwgY2FjaGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNhdmVUb3BMZXZlbEFjaGlldmVtZW50RmllbGQoYWNoSWQsIGZpZWxkLCB2YWx1ZSkge1xuICBjb25zdCBhY2ggPSAod2luZG93Ll9hY2hpZXZlbWVudHNPcmRlcmVkIHx8IFtdKS5maW5kKGEgPT4gYS5pZCA9PT0gYWNoSWQpO1xuICBjb25zdCBwcmV2aW91cyA9IGFjaCA/IGFjaFtmaWVsZF0gOiB1bmRlZmluZWQ7XG4gIGlmIChhY2gpIGFjaFtmaWVsZF0gPSB2YWx1ZTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXZpZXctYWNoaWV2ZW1lbnQnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBpZDogYWNoSWQsIGZpZWxkLCB2YWx1ZSB9KSxcbiAgICB9KTtcbiAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKChhd2FpdCByZXMuanNvbigpKS5lcnJvciB8fCAnU2F2ZSBmYWlsZWQnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gUm9sbCBiYWNrIHRoZSBvcHRpbWlzdGljIHVwZGF0ZVxuICAgIGlmIChhY2ggJiYgcHJldmlvdXMgIT09IHVuZGVmaW5lZCkgYWNoW2ZpZWxkXSA9IHByZXZpb3VzO1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGQgPT09ICd0aXRsZScgPyBgYWNoLXRpdGxlLSR7Q1NTLmVzY2FwZShhY2hJZCl9YCA6IGBhY2gtZGVzYy0ke0NTUy5lc2NhcGUoYWNoSWQpfWApO1xuICAgIGlmIChlbCkgZWwudmFsdWUgPSBwcmV2aW91cyA/PyAnJztcbiAgICBzaG93VG9hc3QoYEZhaWxlZCB0byBzYXZlIGFjaGlldmVtZW50OiAke2Vyci5tZXNzYWdlfWAsICdlcnJvcicpO1xuICB9XG59XG5cbi8qKlxuICogSGlkZSBhIHRvcC1sZXZlbCBhY2hpZXZlbWVudCBmb3IgdGhpcyBzZXNzaW9uIGFmdGVyIGNvbmZpcm1hdGlvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsZXRlVG9wTGV2ZWxBY2hpZXZlbWVudChhY2hJZCkge1xuICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCBjb25maXJtRGlhbG9nKFxuICAgICdIaWRlIHRoaXMgYWNoaWV2ZW1lbnQgZm9yIHRoaXMgQ1Ygb25seT8gWW91IGNhbiByZXN0b3JlIGl0IGJ5IHN0YXJ0aW5nIG92ZXIgb3IgY2hhbmdpbmcgdGhlIHNlc3Npb24gc2VsZWN0aW9ucy4nLFxuICAgIHsgY29uZmlybUxhYmVsOiAnSGlkZScsIGNhbmNlbExhYmVsOiAnQ2FuY2VsJywgZGFuZ2VyOiB0cnVlIH0sXG4gICk7XG4gIGlmICghY29uZmlybWVkKSByZXR1cm47XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvcmV2aWV3LWFjaGlldmVtZW50Jywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgaWQ6IGFjaElkLCBhY3Rpb246ICdkZWxldGUnIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICB3aW5kb3cuX2FjaGlldmVtZW50c09yZGVyZWQgPSAod2luZG93Ll9hY2hpZXZlbWVudHNPcmRlcmVkIHx8IFtdKS5maWx0ZXIoYSA9PiBhLmlkICE9PSBhY2hJZCk7XG4gICAgICBkZWxldGUgd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zW2FjaElkXTtcbiAgICAgIF9yZW5kZXJBY2hpZXZlbWVudHNSZXZpZXdUYWJsZSgpO1xuICAgICAgc2hvd1RvYXN0KCdBY2hpZXZlbWVudCBoaWRkZW4gZm9yIHRoaXMgc2Vzc2lvbi4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd1RvYXN0KGRhdGEuZXJyb3IgfHwgJ0RlbGV0ZSBmYWlsZWQuJywgJ2Vycm9yJyk7XG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgc2hvd1RvYXN0KCdGYWlsZWQgdG8gZGVsZXRlIGFjaGlldmVtZW50LicsICdlcnJvcicpO1xuICB9XG59XG5cbi8qKlxuICogU2F2ZSBhbiBlZGl0ZWQgZmllbGQgb24gYW4gQUktc3VnZ2VzdGVkIGFjaGlldmVtZW50IChpbi1tZW1vcnkgb25seTtcbiAqIHN1Z2dlc3Rpb25zIGFyZSBub3QgcGVyc2lzdGVkIHRvIHRoZSBzZXJ2ZXIgdW50aWwgYWNjZXB0ZWQpLlxuICovXG5mdW5jdGlvbiBzYXZlU3VnZ2VzdGVkQWNoaWV2ZW1lbnRGaWVsZChzdWdnSWQsIGZpZWxkLCB2YWx1ZSkge1xuICBjb25zdCBzdWdnID0gKHdpbmRvdy5fc3VnZ2VzdGVkQWNoc09yZGVyZWQgfHwgW10pLmZpbmQocyA9PiBzLl9zdWdnSWQgPT09IHN1Z2dJZCk7XG4gIGlmIChzdWdnKSBzdWdnW2ZpZWxkXSA9IHZhbHVlO1xufVxuXG4vKipcbiAqIE9wZW4gdGhlIEFJIHJld3JpdGUgbW9kYWwgZm9yIGEgc3VnZ2VzdGVkIGFjaGlldmVtZW50IGRlc2NyaXB0aW9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBhaVJld3JpdGVTdWdnZXN0ZWRBY2hpZXZlbWVudChzdWdnSWQpIHtcbiAgY29uc3Qgc3VnZyA9ICh3aW5kb3cuX3N1Z2dlc3RlZEFjaHNPcmRlcmVkIHx8IFtdKS5maW5kKHMgPT4gcy5fc3VnZ0lkID09PSBzdWdnSWQpO1xuICBpZiAoIXN1Z2cpIHJldHVybjtcbiAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gc3VnZy5kZXNjcmlwdGlvbiB8fCAnJztcbiAgaWYgKCFvcmlnaW5hbFRleHQpIHsgc2hvd1RvYXN0KCdQbGVhc2UgZW50ZXIgYSBkZXNjcmlwdGlvbiBmaXJzdC4nLCAnZXJyb3InKTsgcmV0dXJuOyB9XG5cbiAgX3Jld3JpdGVTdWdnZXN0aW9uSGlzdG9yeSA9IFtdO1xuICBfbGFzdFJld3JpdGVMb2dJZCA9IG51bGw7XG4gIF9vcGVuUmV3cml0ZU1vZGFsKG9yaWdpbmFsVGV4dCwgJycsIG51bGwsIHtcbiAgICBleHBlcmllbmNlSW5kZXg6IG51bGwsXG4gICAgb25BY2NlcHQ6IGFzeW5jIChzdWdnZXN0aW9uKSA9PiB7XG4gICAgICBzYXZlU3VnZ2VzdGVkQWNoaWV2ZW1lbnRGaWVsZChzdWdnSWQsICdkZXNjcmlwdGlvbicsIHN1Z2dlc3Rpb24pO1xuICAgICAgY29uc3QgZGVzY0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGFjaC1kZXNjLSR7c3VnZ0lkfWApO1xuICAgICAgaWYgKGRlc2NFbCkgZGVzY0VsLnZhbHVlID0gc3VnZ2VzdGlvbjtcbiAgICAgIF9yZWNvcmRSZXdyaXRlT3V0Y29tZSgnYWNjZXB0ZWQnLCBzdWdnZXN0aW9uKTtcbiAgICAgIHNob3dUb2FzdCgnQWNoaWV2ZW1lbnQgdXBkYXRlZC4nKTtcbiAgICB9LFxuICB9KTtcbiAgYXdhaXQgX3J1blJld3JpdGUob3JpZ2luYWxUZXh0KTtcbn1cblxuLyoqXG4gKiBNb3ZlIGEgc3VnZ2VzdGVkIGFjaGlldmVtZW50IHVwIG9yIGRvd24gd2l0aGluIHRoZSBkaXNwbGF5IG9yZGVyLlxuICogU3RhYmxlIElEcyBtZWFuIG5vIGRlY2lzaW9uIHJlbWFwcGluZyBpcyBuZWVkZWQuXG4gKi9cbmZ1bmN0aW9uIG1vdmVTdWdnZXN0ZWRBY2hpZXZlbWVudFJvdyhzdWdnSWQsIGRpcmVjdGlvbikge1xuICBjb25zdCBhcnIgPSB3aW5kb3cuX3N1Z2dlc3RlZEFjaHNPcmRlcmVkO1xuICBpZiAoIWFycikgcmV0dXJuO1xuICBjb25zdCBpZHggPSBhcnIuZmluZEluZGV4KHMgPT4gcy5fc3VnZ0lkID09PSBzdWdnSWQpO1xuICBpZiAoaWR4IDwgMCkgcmV0dXJuO1xuICBjb25zdCBuZXdJZHggPSBpZHggKyBkaXJlY3Rpb247XG4gIGlmIChuZXdJZHggPCAwIHx8IG5ld0lkeCA+PSBhcnIubGVuZ3RoKSByZXR1cm47XG4gIFthcnJbaWR4XSwgYXJyW25ld0lkeF1dID0gW2FycltuZXdJZHhdLCBhcnJbaWR4XV07XG4gIF9yZW5kZXJBY2hpZXZlbWVudHNSZXZpZXdUYWJsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoaWV2ZW1lbnRzLXRhYmxlLWNvbnRhaW5lcicpKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBzdWdnZXN0ZWQgYWNoaWV2ZW1lbnQgZnJvbSB0aGUgbGlzdCBhZnRlciBjb25maXJtYXRpb24uXG4gKiBTdGFibGUgSURzIG1lYW4gbm8gb3RoZXIgZGVjaXNpb24ga2V5cyBuZWVkIHJlbWFwcGluZy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsZXRlU3VnZ2VzdGVkQWNoaWV2ZW1lbnQoc3VnZ0lkKSB7XG4gIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IGNvbmZpcm1EaWFsb2coJ1JlbW92ZSB0aGlzIEFJIHN1Z2dlc3Rpb24/JywgeyBjb25maXJtTGFiZWw6ICdSZW1vdmUnLCBkYW5nZXI6IHRydWUgfSk7XG4gIGlmICghY29uZmlybWVkKSByZXR1cm47XG4gIHdpbmRvdy5fc3VnZ2VzdGVkQWNoc09yZGVyZWQgPSAod2luZG93Ll9zdWdnZXN0ZWRBY2hzT3JkZXJlZCB8fCBbXSkuZmlsdGVyKHMgPT4gcy5fc3VnZ0lkICE9PSBzdWdnSWQpO1xuICBkZWxldGUgd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zW3N1Z2dJZF07XG4gIF9yZW5kZXJBY2hpZXZlbWVudHNSZXZpZXdUYWJsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoaWV2ZW1lbnRzLXRhYmxlLWNvbnRhaW5lcicpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZUFjaGlldmVtZW50RWRpdHNBbmRDb250aW51ZSgpIHtcbiAgdHJ5IHtcbiAgICAvLyBGbHVzaCBhbnkgY3VycmVudGx5LWZvY3VzZWQgdGV4dGFyZWFzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXj1cImFjaC10ZXh0LVwiXScpLmZvckVhY2godGEgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSB0YS5pZC5zcGxpdCgnLScpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSA0KSB7XG4gICAgICAgIGNvbnN0IGV4cElkeCA9IHBhcnNlSW50KHBhcnRzWzJdKTtcbiAgICAgICAgY29uc3QgYWNoSWR4ID0gcGFyc2VJbnQocGFydHNbM10pO1xuICAgICAgICBpZiAoIWlzTmFOKGV4cElkeCkgJiYgIWlzTmFOKGFjaElkeCkgJiYgd2luZG93LmFjaGlldmVtZW50RWRpdHNbZXhwSWR4XSkge1xuICAgICAgICAgIHVwZGF0ZUFjaGlldmVtZW50VGV4dChleHBJZHgsIGFjaElkeCwgdGEudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9zYXZlLWFjaGlldmVtZW50LWVkaXRzJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZWRpdHM6IHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzIH0pXG4gICAgfSk7XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIGNvbnN0IGVyciA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBzaG93VG9hc3QoYEVycm9yIHNhdmluZzogJHtlcnIuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWAsICdlcnJvcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGF0ZU1hbmFnZXIubWFya0NvbnRlbnRDaGFuZ2VkKCk7XG4gICAgc2hvd1RvYXN0KCdBY2hpZXZlbWVudCBlZGl0cyBzYXZlZC4nKTtcbiAgICBzd2l0Y2hUYWIoJ3NraWxscy1yZXZpZXcnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dUb2FzdCgnRmFpbGVkIHRvIHNhdmUgYWNoaWV2ZW1lbnQgZWRpdHMuJywgJ2Vycm9yJyk7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZmV0Y2hKc29uV2l0aFRpbWVvdXQsXG4gIF9hY2hWZXJiV2FybmluZyxcbiAgX2FjaFNuYXBzaG90S2V5LFxuICBfc2F2ZUFjaFNuYXBzaG90LFxuICBfZ2V0QWNoU25hcHNob3QsXG4gIGJ1aWxkQWNoaWV2ZW1lbnRzUmV2aWV3VGFibGUsXG4gIF9yZW5kZXJBY2hpZXZlbWVudHNSZXZpZXdUYWJsZSxcbiAgYnVsa0FjaGlldmVtZW50QWN0aW9uLFxuICBoYW5kbGVBY2hpZXZlbWVudEFjdGlvbixcbiAgc3VibWl0QWNoaWV2ZW1lbnREZWNpc2lvbnMsXG4gIG1vdmVBY2hpZXZlbWVudFJvdyxcbiAgYnVpbGRBY2hpZXZlbWVudHNFZGl0b3IsXG4gIHJlbmRlckFjaGlldmVtZW50RWRpdG9yUm93cyxcbiAgdXBkYXRlQWNoaWV2ZW1lbnRUZXh0LFxuICB0b2dnbGVBY2hpZXZlbWVudEhpZGRlbixcbiAgbW92ZUFjaGlldmVtZW50LFxuICBkZWxldGVBY2hpZXZlbWVudCxcbiAgYWRkQWNoaWV2ZW1lbnRSb3csXG4gIHJld3JpdGVBY2hpZXZlbWVudFdpdGhMTE0sXG4gIGFpUmV3cml0ZVRvcExldmVsQWNoaWV2ZW1lbnQsXG4gIF9vcGVuUmV3cml0ZU1vZGFsLFxuICBfdXBkYXRlUmV3cml0ZUFjY2VwdEJ0bixcbiAgX3JlY29yZFJld3JpdGVPdXRjb21lLFxuICBfcnVuUmV3cml0ZSxcbiAgc2F2ZVRvcExldmVsQWNoaWV2ZW1lbnRGaWVsZCxcbiAgZGVsZXRlVG9wTGV2ZWxBY2hpZXZlbWVudCxcbiAgc2F2ZVN1Z2dlc3RlZEFjaGlldmVtZW50RmllbGQsXG4gIGFpUmV3cml0ZVN1Z2dlc3RlZEFjaGlldmVtZW50LFxuICBtb3ZlU3VnZ2VzdGVkQWNoaWV2ZW1lbnRSb3csXG4gIGRlbGV0ZVN1Z2dlc3RlZEFjaGlldmVtZW50LFxuICBzYXZlQWNoaWV2ZW1lbnRFZGl0c0FuZENvbnRpbnVlLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3RhZ2xpbmUtcmV2aWV3LmpzXG4gKiBBcHBsaWNhbnQgdGFnbGluZSAoaGVhZGxpbmUpIHJldmlldzogZGlzcGxheSBBSS1wcm9wb3NlZCB0YWdsaW5lLFxuICogYWxsb3cgZWRpdGluZywgcmVxdWlyZSBleHBsaWNpdCB1c2VyIGNvbmZpcm1hdGlvbiBiZWZvcmUgY29udGludWluZy5cbiAqXG4gKiBUaGUgdGFnbGluZSBpcyB0aGUgb25lLWxpbmUgcHJvZmVzc2lvbmFsIGlkZW50aXR5IHNob3duIHVuZGVyIHRoZVxuICogYXBwbGljYW50J3MgbmFtZSBvbiB0aGUgQ1YuICBJdCBpcyBOT1QgdGhlIHNhbWUgYXMgdGhlIGpvYiB0aXRsZSBcdTIwMTRcbiAqIGl0IGRlc2NyaWJlcyB0aGUgYXBwbGljYW50IChlLmcuIFwiU2VuaW9yIERhdGEgU2NpZW50aXN0IHNwZWNpYWxpc2luZ1xuICogaW4gYmlvc3RhdGlzdGljcyBhbmQgTUxcIiksIG5vdCB0aGUgcm9sZSBiZWluZyBhcHBsaWVkIGZvci5cbiAqXG4gKiBVc2VyIE1VU1QgY2xpY2sgXCJDb25maXJtIFRhZ2xpbmVcIiBiZWZvcmUgZ2VuZXJhdGlvbiBpcyBhbGxvd2VkLlxuICogVGhlIGNvbmZpcm1lZCB0ZXh0IGlzIHN0b3JlZCB2aWEgUE9TVCAvYXBpL3Jldmlldy1kZWNpc2lvbnMgKHR5cGU6ICd0YWdsaW5lJykuXG4gKlxuICogRGVwZW5kZW5jaWVzIChyZXNvbHZlZCB0aHJvdWdoIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIGVzY2FwZUh0bWwsIHNob3dUb2FzdCwgc3dpdGNoVGFiLCBzdGF0ZU1hbmFnZXJcbiAqL1xuXG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuXG4vLyBcdTI1MDBcdTI1MDAgQnVpbGQgdGFnbGluZS1yZXZpZXcgc2VjdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBkdWNrZmxvdzpcbiAqICAgaWQ6IHRhZ2xpbmVfdWlfYnVpbGRcbiAqICAga2luZDogdWlcbiAqICAgdGltZXN0YW1wOiBcIjIwMjYtMDUtMjhUMDA6MDA6MDBaXCJcbiAqICAgc3RhdHVzOiBsaXZlXG4gKiAgIGhhbmRsZXM6IFtcInVpOnRhZ2xpbmUtcmV2aWV3LmJ1aWxkXCJdXG4gKiAgIHJlYWRzOlxuICogICAgIC0gXCJ3aW5kb3c6cGVuZGluZ1JlY29tbWVuZGF0aW9uc1wiXG4gKiAgICAgLSBcInJlc3BvbnNlOkdFVCAvYXBpL3N0YXR1cy50YWdsaW5lX292ZXJyaWRlXCJcbiAqICAgICAtIFwicmVzcG9uc2U6R0VUIC9hcGkvc3RhdHVzLmRlY2lzaW9uc19jb25maXJtZWRcIlxuICogICB3cml0ZXM6IFtcImRvbTojdGFnbGluZS1yZXZpZXctY29udGFpbmVyXCJdXG4gKiAgIG5vdGVzOiBcIlJlbmRlcnMgcHJvcG9zZWQgdGFnbGluZSAoZnJvbSBMTE0gY3VzdG9taXphdGlvbnMpIHdpdGggYW4gZWRpdGFibGUgaW5wdXQgYW5kIGNvbmZpcm0gYnV0dG9uLlwiXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkVGFnbGluZVJldmlld1NlY3Rpb24oKSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdsaW5lLXJldmlldy1jb250YWluZXInKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAvLyBGZXRjaCBjdXJyZW50IHN0YXR1cyB0byBnZXQgdGFnbGluZV9vdmVycmlkZSArIHByb3Bvc2VkIHRhZ2xpbmVcbiAgbGV0IHByb3Bvc2VkVGFnbGluZSAgPSAnJztcbiAgbGV0IGNvbmZpcm1lZFRhZ2xpbmUgPSAnJztcbiAgbGV0IGFscmVhZHlDb25maXJtZWQgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgICA9IGF3YWl0IGZldGNoKCcvYXBpL3N0YXR1cycpO1xuICAgIGNvbnN0IHN0YXR1cyA9IHJlcy5vayA/IGF3YWl0IHJlcy5qc29uKCkgOiB7fTtcblxuICAgIC8vIHRhZ2xpbmVfb3ZlcnJpZGUgaXMgdGhlIHVzZXItY29uZmlybWVkIHZhbHVlIChtYXkgYmUgbnVsbClcbiAgICBjb25maXJtZWRUYWdsaW5lID0gc3RhdHVzLnRhZ2xpbmVfb3ZlcnJpZGUgfHwgJyc7XG4gICAgYWxyZWFkeUNvbmZpcm1lZCA9ICEhKHN0YXR1cy5kZWNpc2lvbnNfY29uZmlybWVkICYmIHN0YXR1cy5kZWNpc2lvbnNfY29uZmlybWVkLnRhZ2xpbmUpO1xuXG4gICAgLy8gUHJvcG9zZWQgdGFnbGluZSBmcm9tIHRoZSBMTE0gcmVjb21tZW5kYXRpb25zXG4gICAgY29uc3QgY3VzdG9taXphdGlvbnMgPSBzdGF0dXMuY3VzdG9taXphdGlvbnMgfHwge307XG4gICAgcHJvcG9zZWRUYWdsaW5lID0gY3VzdG9taXphdGlvbnMuYXBwbGljYW50X3RhZ2xpbmUgfHwgJyc7XG4gIH0gY2F0Y2ggKF9lKSB7XG4gICAgLy8gTmV0d29yayBmYWlsdXJlIFx1MjAxNCBsZWF2ZSBmaWVsZHMgZW1wdHksIHVzZXIgY2FuIHN0aWxsIHR5cGUgbWFudWFsbHlcbiAgfVxuXG4gIGNvbnN0IGluaXRpYWwgICA9IGNvbmZpcm1lZFRhZ2xpbmUgfHwgcHJvcG9zZWRUYWdsaW5lO1xuICBjb25zdCBzdGF0dXNNc2cgPSBhbHJlYWR5Q29uZmlybWVkXG4gICAgPyAnPHNwYW4gc3R5bGU9XCJjb2xvcjojMDY1ZjQ2O2ZvbnQtd2VpZ2h0OjYwMDtcIj5cdTI3MTMgQ29uZmlybWVkPC9zcGFuPidcbiAgICA6ICc8c3BhbiBzdHlsZT1cImNvbG9yOiM5MjQwMGU7XCI+UmVxdWlyZXMgeW91ciBjb25maXJtYXRpb24gYmVmb3JlIGdlbmVyYXRpbmc8L3NwYW4+JztcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE2cHg7XCI+XG4gICAgICA8cCBzdHlsZT1cImNvbG9yOiMzNzQxNTE7Zm9udC1zaXplOjAuOTVlbTtsaW5lLWhlaWdodDoxLjY7bWFyZ2luOjAgMCA4cHg7XCI+XG4gICAgICAgIFRoZSA8c3Ryb25nPnRhZ2xpbmU8L3N0cm9uZz4gYXBwZWFycyBkaXJlY3RseSB1bmRlciB5b3VyIG5hbWUgb24gdGhlIENWLlxuICAgICAgICBJdCBzaG91bGQgZGVzY3JpYmUgPGVtPndobyB5b3UgYXJlPC9lbT4gYXMgYSBwcm9mZXNzaW9uYWwgXHUyMDE0IG5vdCB0aGUgam9iIHRpdGxlIHlvdSBhcmUgYXBwbHlpbmcgZm9yLlxuICAgICAgPC9wPlxuICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luOjA7XCI+XG4gICAgICAgIEV4YW1wbGU6IDxlbT5cIlNlbmlvciBEYXRhIFNjaWVudGlzdCBzcGVjaWFsaXNpbmcgaW4gYmlvc3RhdGlzdGljcyBhbmQgbWFjaGluZSBsZWFybmluZ1wiPC9lbT5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNkMWZhZTU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MjBweDtiYWNrZ3JvdW5kOiNmMGZkZjQ7XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O21hcmdpbi1ib3R0b206MTBweDtcIj5cbiAgICAgICAgPHN0cm9uZyBzdHlsZT1cImNvbG9yOiMwNjVmNDY7XCI+QXBwbGljYW50IFRhZ2xpbmU8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4gaWQ9XCJ0YWdsaW5lLWNvbmZpcm0tc3RhdHVzXCIgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO1wiPiR7c3RhdHVzTXNnfTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bGFiZWwgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMzc0MTUxO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7XCJcbiAgICAgICAgICAgICBmb3I9XCJ0YWdsaW5lLWlucHV0XCI+XG4gICAgICAgIEVkaXQgdGFnbGluZSAocmVxdWlyZWQpOlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxpbnB1dCBpZD1cInRhZ2xpbmUtaW5wdXRcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgIHZhbHVlPVwiJHtlc2NhcGVIdG1sKGluaXRpYWwpfVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBTZW5pb3IgRGF0YSBTY2llbnRpc3Qgc3BlY2lhbGlzaW5nIGluIGJpb3N0YXRpc3RpY3MgYW5kIE1MXCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC45NWVtO1wiXG4gICAgICAgIG9uaW5wdXQ9XCJvblRhZ2xpbmVJbnB1dENoYW5nZSgpXCIgLz5cblxuICAgICAgJHtwcm9wb3NlZFRhZ2xpbmUgJiYgcHJvcG9zZWRUYWdsaW5lICE9PSBjb25maXJtZWRUYWdsaW5lID8gYFxuICAgICAgPHAgc3R5bGU9XCJtYXJnaW46NnB4IDAgMDtmb250LXNpemU6MC44ZW07Y29sb3I6IzZiNzI4MDtcIj5cbiAgICAgICAgQUkgcHJvcG9zZWQ6IDxlbT4ke2VzY2FwZUh0bWwocHJvcG9zZWRUYWdsaW5lKX08L2VtPlxuICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJyZXNldFRhZ2xpbmVUb1Byb3Bvc2VkKClcIiBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojMjU2M2ViO2ZvbnQtc2l6ZTowLjhlbTtwYWRkaW5nOjAgNHB4O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCI+VXNlIHRoaXM8L2J1dHRvbj5cbiAgICAgIDwvcD5gIDogJyd9XG5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjEycHg7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJ0YWdsaW5lLWNvbmZpcm0tYnRuXCIgY2xhc3M9XCJzdWJtaXQtYnRuXCIgc3R5bGU9XCJmb250LXNpemU6MC45ZW07cGFkZGluZzo4cHggMjBweDtiYWNrZ3JvdW5kOiMxMGI5ODE7XCJcbiAgICAgICAgICBvbmNsaWNrPVwiY29uZmlybVRhZ2xpbmUoKVwiPlxuICAgICAgICAgIFx1MjcxMyBDb25maXJtIFRhZ2xpbmVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgICR7YWxyZWFkeUNvbmZpcm1lZCA/ICc8c3BhbiBpZD1cInRhZ2xpbmUtY29uZmlybWVkLWJhZGdlXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDoxMHB4O2ZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzA2NWY0NjtcIj5TYXZlZCBcdTI3MTM8L3NwYW4+JyA6ICc8c3BhbiBpZD1cInRhZ2xpbmUtY29uZmlybWVkLWJhZGdlXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7bWFyZ2luLWxlZnQ6MTBweDtmb250LXNpemU6MC44NWVtO2NvbG9yOiMwNjVmNDY7XCI+U2F2ZWQgXHUyNzEzPC9zcGFuPid9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJuYXYtYnV0dG9uc1wiIHN0eWxlPVwibWFyZ2luLXRvcDoxNnB4O1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhY2stYnRuXCIgb25jbGljaz1cInN3aXRjaFRhYignYWNoaWV2ZW1lbnRzLXJldmlldycpXCI+XHUyMTkwIEJhY2sgdG8gQWNoaWV2ZW1lbnRzPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGlkPVwidGFnbGluZS1jb250aW51ZS1idG5cIiBjbGFzcz1cImNvbnRpbnVlLWJ0blwiXG4gICAgICAgIHN0eWxlPVwiJHthbHJlYWR5Q29uZmlybWVkID8gJycgOiAnb3BhY2l0eTowLjU7Y3Vyc29yOm5vdC1hbGxvd2VkOyd9XCJcbiAgICAgICAgb25jbGljaz1cInRhZ2xpbmVDb250aW51ZSgpXCJcbiAgICAgICAgJHthbHJlYWR5Q29uZmlybWVkID8gJycgOiAndGl0bGU9XCJQbGVhc2UgY29uZmlybSB0aGUgdGFnbGluZSBiZWZvcmUgY29udGludWluZ1wiJ30+XG4gICAgICAgIENvbnRpbnVlIHRvIFN1bW1hcnkgXHUyMTkyXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5gO1xuXG4gIC8vIEV4cG9zZSBwcm9wb3NlZCB0YWdsaW5lIGZvciB0aGUgcmVzZXQgYnV0dG9uXG4gIHdpbmRvdy5fcHJvcG9zZWRUYWdsaW5lID0gcHJvcG9zZWRUYWdsaW5lO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgSW5wdXQgY2hhbmdlIGhhbmRsZXIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIG9uVGFnbGluZUlucHV0Q2hhbmdlKCkge1xuICAvLyBXaGVuIHVzZXIgZWRpdHMgdGhlIHRleHQsIHVuLWNvbmZpcm0gdGhlIHByZXZpb3VzIHNhdmUgc28gdGhleSBtdXN0IHJlLWNvbmZpcm1cbiAgY29uc3QgYmFkZ2UgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdsaW5lLWNvbmZpcm1lZC1iYWRnZScpO1xuICBjb25zdCBzdGF0dXNTcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ2xpbmUtY29uZmlybS1zdGF0dXMnKTtcbiAgaWYgKGJhZGdlKSAgICAgIGJhZGdlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGlmIChzdGF0dXNTcGFuKSBzdGF0dXNTcGFuLmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT1cImNvbG9yOiM5MjQwMGU7XCI+UmVxdWlyZXMgeW91ciBjb25maXJtYXRpb24gYmVmb3JlIGdlbmVyYXRpbmc8L3NwYW4+JztcbiAgY29uc3QgY29udGludWVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnbGluZS1jb250aW51ZS1idG4nKTtcbiAgaWYgKGNvbnRpbnVlQnRuKSB7XG4gICAgY29udGludWVCdG4uc3R5bGUub3BhY2l0eSAgICAgICA9ICcwLjUnO1xuICAgIGNvbnRpbnVlQnRuLnN0eWxlLmN1cnNvciAgICAgICAgPSAnbm90LWFsbG93ZWQnO1xuICAgIGNvbnRpbnVlQnRuLnRpdGxlICAgICAgICAgICAgICAgPSAnUGxlYXNlIGNvbmZpcm0gdGhlIHRhZ2xpbmUgYmVmb3JlIGNvbnRpbnVpbmcnO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZXNldCB0byBBSS1wcm9wb3NlZCB0YWdsaW5lIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiByZXNldFRhZ2xpbmVUb1Byb3Bvc2VkKCkge1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdsaW5lLWlucHV0Jyk7XG4gIGlmIChpbnB1dCAmJiB3aW5kb3cuX3Byb3Bvc2VkVGFnbGluZSkge1xuICAgIGlucHV0LnZhbHVlID0gd2luZG93Ll9wcm9wb3NlZFRhZ2xpbmU7XG4gICAgb25UYWdsaW5lSW5wdXRDaGFuZ2UoKTtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgQ29uZmlybSBhbmQgcGVyc2lzdCB0YWdsaW5lIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG4vKipcbiAqIGR1Y2tmbG93OlxuICogICBpZDogdGFnbGluZV91aV9jb25maXJtXG4gKiAgIGtpbmQ6IHVpXG4gKiAgIHRpbWVzdGFtcDogXCIyMDI2LTA1LTI4VDAwOjAwOjAwWlwiXG4gKiAgIHN0YXR1czogbGl2ZVxuICogICBoYW5kbGVzOiBbXCJ1aTp0YWdsaW5lLXJldmlldy5jb25maXJtXCJdXG4gKiAgIGNhbGxzOiBbXCJQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9uc1wiXVxuICogICByZWFkczogW1wiZG9tOiN0YWdsaW5lLWlucHV0XCJdXG4gKiAgIHdyaXRlczpcbiAqICAgICAtIFwicmVxdWVzdDpQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9ucy50eXBlPXRhZ2xpbmVcIlxuICogICAgIC0gXCJyZXF1ZXN0OlBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zLmRlY2lzaW9uc1wiXG4gKiAgIG5vdGVzOiBcIlBPU1RzIHRoZSBjb25maXJtZWQgdGFnbGluZSB0ZXh0OyBlbmFibGVzIHRoZSBjb250aW51ZSBidXR0b24gb24gc3VjY2Vzcy5cIlxuICovXG5hc3luYyBmdW5jdGlvbiBjb25maXJtVGFnbGluZSgpIHtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnbGluZS1pbnB1dCcpO1xuICBpZiAoIWlucHV0KSByZXR1cm47XG5cbiAgY29uc3QgdGFnbGluZVRleHQgPSBpbnB1dC52YWx1ZS50cmltKCk7XG4gIGlmICghdGFnbGluZVRleHQpIHtcbiAgICBzaG93VG9hc3QoJ1BsZWFzZSBlbnRlciBhIHRhZ2xpbmUgYmVmb3JlIGNvbmZpcm1pbmcuJywgJ2Vycm9yJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ2xpbmUtY29uZmlybS1idG4nKTtcbiAgaWYgKGJ0bikgYnRuLmRpc2FibGVkID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvcmV2aWV3LWRlY2lzaW9ucycsIHtcbiAgICAgIG1ldGhvZDogICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogICAgSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAndGFnbGluZScsIGRlY2lzaW9uczogdGFnbGluZVRleHQgfSksXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCBlcnIgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgICBzaG93VG9hc3QoYEZhaWxlZCB0byBzYXZlIHRhZ2xpbmU6ICR7ZXJyLmVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c1RleHR9YCwgJ2Vycm9yJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIFVJIHRvIHNob3cgY29uZmlybWVkIHN0YXRlXG4gICAgY29uc3QgYmFkZ2UgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdsaW5lLWNvbmZpcm1lZC1iYWRnZScpO1xuICAgIGNvbnN0IHN0YXR1c1NwYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnbGluZS1jb25maXJtLXN0YXR1cycpO1xuICAgIGlmIChiYWRnZSkgICAgICB7IGJhZGdlLnN0eWxlLmRpc3BsYXkgPSAnJzsgfVxuICAgIGlmIChzdGF0dXNTcGFuKSB7IHN0YXR1c1NwYW4uaW5uZXJIVE1MID0gJzxzcGFuIHN0eWxlPVwiY29sb3I6IzA2NWY0Njtmb250LXdlaWdodDo2MDA7XCI+XHUyNzEzIENvbmZpcm1lZDwvc3Bhbj4nOyB9XG5cbiAgICBjb25zdCBjb250aW51ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdsaW5lLWNvbnRpbnVlLWJ0bicpO1xuICAgIGlmIChjb250aW51ZUJ0bikge1xuICAgICAgY29udGludWVCdG4uc3R5bGUub3BhY2l0eSA9ICcnO1xuICAgICAgY29udGludWVCdG4uc3R5bGUuY3Vyc29yICA9ICcnO1xuICAgICAgY29udGludWVCdG4udGl0bGUgICAgICAgICA9ICcnO1xuICAgIH1cblxuICAgIHN0YXRlTWFuYWdlci5tYXJrQ29udGVudENoYW5nZWQoKTtcbiAgICBzaG93VG9hc3QoJ1RhZ2xpbmUgY29uZmlybWVkLicpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2hvd1RvYXN0KCdOZXR3b3JrIGVycm9yIHNhdmluZyB0YWdsaW5lLicsICdlcnJvcicpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChidG4pIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBDb250aW51ZSBuYXZpZ2F0aW9uIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiB0YWdsaW5lQ29udGludWUoKSB7XG4gIC8vIEd1YXJkOiBtdXN0IGJlIGNvbmZpcm1lZCBiZWZvcmUgcHJvY2VlZGluZ1xuICBjb25zdCBjb250aW51ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdsaW5lLWNvbnRpbnVlLWJ0bicpO1xuICBpZiAoY29udGludWVCdG4gJiYgY29udGludWVCdG4uc3R5bGUuY3Vyc29yID09PSAnbm90LWFsbG93ZWQnKSB7XG4gICAgc2hvd1RvYXN0KCdQbGVhc2UgY29uZmlybSB0aGUgdGFnbGluZSBiZWZvcmUgY29udGludWluZy4nLCAnZXJyb3InKTtcbiAgICByZXR1cm47XG4gIH1cbiAgc3dpdGNoVGFiKCdzdW1tYXJ5LXJldmlldycpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgRXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHtcbiAgYnVpbGRUYWdsaW5lUmV2aWV3U2VjdGlvbixcbiAgb25UYWdsaW5lSW5wdXRDaGFuZ2UsXG4gIHJlc2V0VGFnbGluZVRvUHJvcG9zZWQsXG4gIGNvbmZpcm1UYWdsaW5lLFxuICB0YWdsaW5lQ29udGludWUsXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvc3VtbWFyeS1yZXZpZXcuanNcbiAqIFN1bW1hcnktZm9jdXMgc2VsZWN0aW9uOiBBSSBnZW5lcmF0aW9uLCBzdG9yZWQgdmFyaWFudHMsIHN1Ym1pdCBkZWNpc2lvbi5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgcGVuZGluZ1JlY29tbWVuZGF0aW9ucywgc2VsZWN0ZWRTdW1tYXJ5S2V5LCBfYWlHZW5lcmF0ZWRTdW1tYXJ5LFxuICogICBlc2NhcGVIdG1sLCBzaG93VG9hc3QsIHN3aXRjaFRhYiwgc2V0TG9hZGluZywgc2NoZWR1bGVBdHNSZWZyZXNoXG4gKi9cblxuaW1wb3J0IHsgc3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi9zdGF0ZS1tYW5hZ2VyLmpzJztcblxuLy8gXHUyNTAwXHUyNTAwIEJ1aWxkIHN1bW1hcnktZm9jdXMgc2VjdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBkdWNrZmxvdzpcbiAqICAgaWQ6IHN1bW1hcnlfdWlfYnVpbGRcbiAqICAga2luZDogdWlcbiAqICAgdGltZXN0YW1wOiBcIjIwMjYtMDMtMjdUMDE6MjM6MjhaXCJcbiAqICAgc3RhdHVzOiBzaGFyZWRcbiAqICAgaGFuZGxlczogW1widWk6c3VtbWFyeS1yZXZpZXcuYnVpbGRcIl1cbiAqICAgY2FsbHM6IFtcIkdFVCAvYXBpL21hc3Rlci1maWVsZHNcIiwgXCJHRVQgL2FwaS9zdGF0dXNcIiwgXCJ1aTpzdW1tYXJ5LXJldmlldy5nZW5lcmF0ZVwiXVxuICogICByZWFkczpcbiAqICAgICAtIFwid2luZG93OnBlbmRpbmdSZWNvbW1lbmRhdGlvbnNcIlxuICogICAgIC0gXCJyZXNwb25zZTpHRVQgL2FwaS9tYXN0ZXItZmllbGRzLnByb2Zlc3Npb25hbF9zdW1tYXJpZXNcIlxuICogICAgIC0gXCJyZXNwb25zZTpHRVQgL2FwaS9zdGF0dXMucHJvZmVzc2lvbmFsX3N1bW1hcmllc1wiXG4gKiAgICAgLSBcInN0YXRlOnNlc3Npb25fc3VtbWFyaWVzLmFpX2dlbmVyYXRlZFwiXG4gKiAgIHdyaXRlczogW1wiZG9tOiNzdW1tYXJ5LWZvY3VzLWNvbnRhaW5lclwiLCBcIndpbmRvdzpzZWxlY3RlZFN1bW1hcnlLZXlcIl1cbiAqICAgbm90ZXM6IFwiQnVpbGRzIHRoZSBzdW1tYXJ5IHJldmlldyBVSSBmcm9tIG1hc3RlciB2YXJpYW50cyBwbHVzIHNlc3Npb24gb3ZlcnJpZGVzIGFuZCBzZWVkcyB0aGUgc2VsZWN0ZWQga2V5LlwiXG4gKi9cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRTdW1tYXJ5Rm9jdXNTZWN0aW9uKCkge1xuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtbWFyeS1mb2N1cy1jb250YWluZXInKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICBjb25zdCBkYXRhID0gd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnM7XG5cbiAgLy8gXHUyNTAwXHUyNTAwIExvYWQgYWxsIGtub3duIHN1bW1hcmllcyAobWFzdGVyIGJhc2UgKyBzZXNzaW9uIG92ZXJyaWRlcykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIC8vIEZldGNoIG1hc3RlciBmaWVsZHMgYW5kIHN0YXR1cyBpbiBwYXJhbGxlbDsgc2Vzc2lvbiBzdW1tYXJpZXMgb3ZlcndyaXRlIG1hc3RlciB2YXJpYW50cy5cbiAgbGV0IHByb2Zlc3Npb25hbFN1bW1hcmllcyA9IHt9O1xuICBjb25zdCBbbWZSZXN1bHQsIHN0YXR1c1Jlc3VsdF0gPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgIGZldGNoKCcvYXBpL21hc3Rlci1maWVsZHMnKS50aGVuKHIgPT4gci5qc29uKCkpLFxuICAgIGZldGNoKCcvYXBpL3N0YXR1cycpLnRoZW4ociA9PiByLmpzb24oKSksXG4gIF0pO1xuICBpZiAobWZSZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBtZlJlc3VsdC52YWx1ZSAmJiBtZlJlc3VsdC52YWx1ZS5vaykge1xuICAgIE9iamVjdC5hc3NpZ24ocHJvZmVzc2lvbmFsU3VtbWFyaWVzLCBtZlJlc3VsdC52YWx1ZS5wcm9mZXNzaW9uYWxfc3VtbWFyaWVzIHx8IHt9KTtcbiAgfVxuICBpZiAoc3RhdHVzUmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgJiYgc3RhdHVzUmVzdWx0LnZhbHVlKSB7XG4gICAgLy8gU2Vzc2lvbiBzdW1tYXJpZXMgKGUuZy4gYWlfZ2VuZXJhdGVkKSBvdmVyd3JpdGUgbWFzdGVyIHZhcmlhbnRzXG4gICAgT2JqZWN0LmFzc2lnbihwcm9mZXNzaW9uYWxTdW1tYXJpZXMsIHN0YXR1c1Jlc3VsdC52YWx1ZS5wcm9mZXNzaW9uYWxfc3VtbWFyaWVzIHx8IHt9KTtcbiAgfVxuXG4gIC8vIFx1MjUwMFx1MjUwMCBTdWdnZXN0ZWQgY29udGVudCByZW9yZGVyaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICBjb25zdCByZW9yZGVyaW5nVGV4dCA9IChkYXRhICYmIGRhdGEuc3VnZ2VzdGVkX2NvbnRlbnRfcmVvcmRlcmluZykgfHwgJyc7XG4gIGNvbnN0IHJlb3JkZXJpbmdIVE1MID0gcmVvcmRlcmluZ1RleHRcbiAgICA/IGA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZWZmNmZmO2JvcmRlcjoxcHggc29saWQgI2JmZGJmZTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEycHg7bWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgICA8c3Ryb25nIHN0eWxlPVwiY29sb3I6IzFlNDBhZjtcIj5cdUQ4M0RcdURDQ0IgU3VnZ2VzdGVkIENvbnRlbnQgT3JkZXI6PC9zdHJvbmc+XG4gICAgICAgIDxwIHN0eWxlPVwibWFyZ2luOjZweCAwIDA7Y29sb3I6IzFlM2E4YTtmb250LXNpemU6MC45ZW07d2hpdGUtc3BhY2U6cHJlLWxpbmU7XCI+JHtlc2NhcGVIdG1sKHJlb3JkZXJpbmdUZXh0KX08L3A+XG4gICAgICAgPC9kaXY+YFxuICAgIDogJyc7XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFJlbmRlciBza2VsZXRvbiB3aGlsZSB3ZSBnZW5lcmF0ZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgY29udGFpbmVyLmlubmVySFRNTCA9IGBcbiAgICAke3Jlb3JkZXJpbmdIVE1MfVxuICAgIDxkaXYgaWQ9XCJhaS1zdW1tYXJ5LXBhbmVsXCIgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNkMWZhZTU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MjBweDtiYWNrZ3JvdW5kOiNmMGZkZjQ7XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O21hcmdpbi1ib3R0b206MTBweDtcIj5cbiAgICAgICAgPHN0cm9uZyBzdHlsZT1cImNvbG9yOiMwNjVmNDY7XCI+XHVEODNFXHVERDE2IEFJLVByb3Bvc2VkIFN1bW1hcnk8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4gaWQ9XCJhaS1zdW1tYXJ5LXN0YXR1c1wiIHN0eWxlPVwiZm9udC1zaXplOjAuOGVtO2NvbG9yOiM2YjcyODA7XCI+R2VuZXJhdGluZ1x1MjAyNjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cImFpLXN1bW1hcnktbG9hZGluZ1wiIHN0eWxlPVwiZm9udC1zaXplOjAuOWVtO2NvbG9yOiM5Y2EzYWY7bWluLWhlaWdodDo0MHB4O1wiPjxlbT5HZW5lcmF0aW5nIGEgdGFpbG9yZWQgc3VtbWFyeSBmb3IgdGhpcyBhcHBsaWNhdGlvblx1MjAyNjwvZW0+PC9kaXY+XG4gICAgICA8dGV4dGFyZWEgaWQ9XCJhaS1zdW1tYXJ5LXRleHRcIiByb3dzPVwiN1wiIG9uaW5wdXQ9XCJvblN1bW1hcnlUZXh0Q2hhbmdlKClcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkdlbmVyYXRpbmdcdTIwMjZcIlxuICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC45ZW07bGluZS1oZWlnaHQ6MS42O3Jlc2l6ZTp2ZXJ0aWNhbDtkaXNwbGF5Om5vbmU7XCI+PC90ZXh0YXJlYT5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjEycHg7XCI+XG4gICAgICAgIDxsYWJlbCBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweDtcIj5SZXF1ZXN0IGNoYW5nZXMgKG9wdGlvbmFsKTo8L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgaWQ9XCJzdW1tYXJ5LXJlZmluZW1lbnQtaW5wdXRcIiByb3dzPVwiMlwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuICdNYWtlIGl0IG1vcmUgY29uY2lzZScsICdFbXBoYXNpc2UgbXkgbGVhZGVyc2hpcCBleHBlcmllbmNlJywgJ1VzZSBhIG1vcmUgZm9ybWFsIHRvbmUnXHUyMDI2XCJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC44NWVtO3Jlc2l6ZTp2ZXJ0aWNhbDtcIj48L3RleHRhcmVhPlxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDo4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7XCI+XG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImFpLXJlZ2VuZXJhdGUtYnRuXCIgY2xhc3M9XCJzdWJtaXQtYnRuXCIgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO3BhZGRpbmc6NnB4IDE0cHg7XCJcbiAgICAgICAgICAgIG9uY2xpY2s9XCJyZWdlbmVyYXRlQUlTdW1tYXJ5KClcIj5SZWdlbmVyYXRlPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInN1Ym1pdC1idG5cIiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07cGFkZGluZzo2cHggMTRweDtiYWNrZ3JvdW5kOiMxMGI5ODE7XCJcbiAgICAgICAgICAgIG9uY2xpY2s9XCJ1c2VBSVN1bW1hcnkoKVwiPlVzZSBUaGlzIFN1bW1hcnk8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGlkPVwic3VtbWFyeS1zdG9yZWQtc2VjdGlvblwiPlxuICAgICAgPGRldGFpbHMgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjhweDtcIj5cbiAgICAgICAgPHN1bW1hcnkgc3R5bGU9XCJjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MC44NWVtO2NvbG9yOiM2YjcyODA7dXNlci1zZWxlY3Q6bm9uZTtcIj5cbiAgICAgICAgICBVc2UgYSBzdG9yZWQgc3VtbWFyeSB2YXJpYW50IGluc3RlYWRcbiAgICAgICAgPC9zdW1tYXJ5PlxuICAgICAgICA8ZGl2IGlkPVwic3VtbWFyeS1yYWRpb3NcIiBzdHlsZT1cIm1hcmdpbi10b3A6MTBweDtcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6OHB4O1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzdWJtaXQtYnRuXCIgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO3BhZGRpbmc6NnB4IDE0cHg7XCJcbiAgICAgICAgICAgIG9uY2xpY2s9XCJzdWJtaXRTdW1tYXJ5Rm9jdXNEZWNpc2lvbigpXCI+VXNlIFNlbGVjdGVkIFN0b3JlZCBTdW1tYXJ5PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kZXRhaWxzPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJuYXYtYnV0dG9uc1wiIHN0eWxlPVwibWFyZ2luLXRvcDoxNnB4O1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhY2stYnRuXCIgb25jbGljaz1cInN3aXRjaFRhYigndGFnbGluZS1yZXZpZXcnKVwiPlx1MjE5MCBCYWNrIHRvIFRhZ2xpbmU8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJjb250aW51ZS1idG5cIiBvbmNsaWNrPVwic3VibWl0U3VtbWFyeUZvY3VzRGVjaXNpb24oKVwiPkNvbnRpbnVlIHRvIFB1YmxpY2F0aW9ucyBcdTIxOTI8L2J1dHRvbj5cbiAgICA8L2Rpdj5gO1xuXG4gIC8vIFJlbmRlciBzdG9yZWQgc3VtbWFyaWVzIGluIHRoZSBjb2xsYXBzaWJsZSBzZWN0aW9uXG4gIF9yZW5kZXJTdG9yZWRTdW1tYXJ5UmFkaW9zKHByb2Zlc3Npb25hbFN1bW1hcmllcyk7XG5cbiAgLy8gXHUyNTAwXHUyNTAwIEF1dG8tZ2VuZXJhdGUgb3IgbG9hZCBjYWNoZWQgQUkgc3VtbWFyeSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgY29uc3QgY2FjaGVkU3VtbWFyeSA9IHByb2Zlc3Npb25hbFN1bW1hcmllc1snYWlfZ2VuZXJhdGVkJ10gfHwgJyc7XG4gIGlmIChjYWNoZWRTdW1tYXJ5KSB7XG4gICAgX3Nob3dBSVN1bW1hcnkoY2FjaGVkU3VtbWFyeSwgJyhjYWNoZWQgXHUyMDE0IGNsaWNrIFJlZ2VuZXJhdGUgdG8gcmVmcmVzaCknKTtcbiAgICB3aW5kb3cuc2VsZWN0ZWRTdW1tYXJ5S2V5ID0gJ2FpX2dlbmVyYXRlZCc7XG4gICAgYXdhaXQgc2F2ZVN1bW1hcnlGb2N1c1RvQmFja2VuZCgnYWlfZ2VuZXJhdGVkJyk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgX2NhbGxHZW5lcmF0ZVN1bW1hcnkobnVsbCwgbnVsbCk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFJlbmRlciBzdG9yZWQgc3VtbWFyeSByYWRpbyBidXR0b25zIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBfcmVuZGVyU3RvcmVkU3VtbWFyeVJhZGlvcyhwcm9mZXNzaW9uYWxTdW1tYXJpZXMpIHtcbiAgY29uc3QgcmFkaW9zQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bW1hcnktcmFkaW9zJyk7XG4gIGlmICghcmFkaW9zQ29udGFpbmVyKSByZXR1cm47XG4gIGNvbnN0IG1hc3RlcktleXMgPSBPYmplY3Qua2V5cyhwcm9mZXNzaW9uYWxTdW1tYXJpZXMpLmZpbHRlcihrID0+IGsgIT09ICdhaV9nZW5lcmF0ZWQnKTtcbiAgaWYgKG1hc3RlcktleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmFkaW9zQ29udGFpbmVyLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImNvbG9yOiM5Y2EzYWY7Zm9udC1zaXplOjAuODVlbTtcIj5ObyBzdG9yZWQgc3VtbWFyaWVzIGF2YWlsYWJsZS48L3A+JztcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY3VycmVudEtleSA9IHdpbmRvdy5zZWxlY3RlZFN1bW1hcnlLZXkgfHwgJyc7XG4gIHJhZGlvc0NvbnRhaW5lci5pbm5lckhUTUwgPSBtYXN0ZXJLZXlzLm1hcChrZXkgPT4ge1xuICAgIGNvbnN0IHByZXZpZXcgPSAocHJvZmVzc2lvbmFsU3VtbWFyaWVzW2tleV0gfHwgJycpLnNsaWNlKDAsIDIwMCk7XG4gICAgY29uc3QgbGFiZWwgPSBrZXkucmVwbGFjZSgvXy9nLCAnICcpLnJlcGxhY2UoL1xcYlxcdy9nLCBjID0+IGMudG9VcHBlckNhc2UoKSk7XG4gICAgY29uc3QgY2hlY2tlZCA9IGtleSA9PT0gY3VycmVudEtleSA/ICdjaGVja2VkJyA6ICcnO1xuICAgIHJldHVybiBgXG4gICAgICA8bGFiZWwgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEycHg7bWFyZ2luLWJvdHRvbTo4cHg7Y3Vyc29yOnBvaW50ZXI7JHtjaGVja2VkID8gJ2JvcmRlci1jb2xvcjojMTBiOTgxO2JhY2tncm91bmQ6I2YwZmRmNDsnIDogJyd9XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3VtbWFyeV9rZXlcIiB2YWx1ZT1cIiR7ZXNjYXBlSHRtbChrZXkpfVwiICR7Y2hlY2tlZH1cbiAgICAgICAgICBvbmNoYW5nZT1cInNlbGVjdFN1bW1hcnlLZXkoJyR7ZXNjYXBlSHRtbChrZXkpfScpXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6OHB4O1wiPlxuICAgICAgICA8c3Ryb25nPiR7ZXNjYXBlSHRtbChsYWJlbCl9PC9zdHJvbmc+IDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuNzVlbTtwYWRkaW5nOjFweCA2cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOiNlZmY2ZmY7Y29sb3I6IzFkNGVkODtib3JkZXI6MXB4IHNvbGlkICNiZmRiZmU7Zm9udC13ZWlnaHQ6NjAwO1wiPlx1RDgzRFx1RENDNCBGcm9tIHlvdXIgTWFzdGVyIENWPC9zcGFuPlxuICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbjo2cHggMCAwO2ZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzZiNzI4MDtcIj4ke2VzY2FwZUh0bWwocHJldmlldyl9JHtwcmV2aWV3Lmxlbmd0aCA9PT0gMjAwID8gJ1x1MjAyNicgOiAnJ308L3A+XG4gICAgICA8L2xhYmVsPmA7XG4gIH0pLmpvaW4oJycpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgU2hvdyBBSS1nZW5lcmF0ZWQgc3VtbWFyeSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gX3Nob3dBSVN1bW1hcnkodGV4dCwgc3RhdHVzTGFiZWwpIHtcbiAgY29uc3QgdGV4dEVsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FpLXN1bW1hcnktdGV4dCcpO1xuICBjb25zdCBsb2FkaW5nRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWktc3VtbWFyeS1sb2FkaW5nJyk7XG4gIGNvbnN0IHN0YXR1c0VsICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhaS1zdW1tYXJ5LXN0YXR1cycpO1xuICBpZiAodGV4dEVsKSB7XG4gICAgdGV4dEVsLnZhbHVlID0gdGV4dDtcbiAgICB0ZXh0RWwuc3R5bGUuZGlzcGxheSA9ICcnO1xuICB9XG4gIGlmIChsb2FkaW5nRWwpIGxvYWRpbmdFbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBpZiAoc3RhdHVzRWwpICBzdGF0dXNFbC50ZXh0Q29udGVudCA9IHN0YXR1c0xhYmVsIHx8ICcnO1xuICB3aW5kb3cuX2FpR2VuZXJhdGVkU3VtbWFyeSA9IHRleHQ7XG4gIF91cGRhdGVTdW1tYXJ5U3BlY2lmaWNpdHlCYWRnZSh0ZXh0KTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFN1bW1hcnkgc3BlY2lmaWNpdHkgdmFsaWRhdG9yIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBfY2hlY2tTdW1tYXJ5U3BlY2lmaWNpdHkodGV4dCkge1xuICBpZiAoIXRleHQgfHwgIXRleHQudHJpbSgpKSByZXR1cm4gW107XG4gIGNvbnN0IHdhcm5pbmdzID0gW107XG4gIC8vIENoZWNrIDE6IHF1YW50aWZpZWQgY2xhaW0gKG51bWJlciwgcGVyY2VudGFnZSwgb3IgeWVhciByYW5nZSlcbiAgY29uc3QgaGFzUXVhbnRpZmllZCA9IC9cXGJcXGRbXFxkLF0qXFxzKiglfHBlcmNlbnR8eXJzP3x5ZWFycz98bW9udGhzP3x4XFxifFxcK3xrXFxifG1cXGJ8XFwuXFxkKS9pLnRlc3QodGV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIC9cXGJcXGQrXFwrXFxzKih5ZWFycz98eXJzP3xtb250aHM/KS9pLnRlc3QodGV4dCk7XG4gIGlmICghaGFzUXVhbnRpZmllZCkge1xuICAgIHdhcm5pbmdzLnB1c2goJ05vIHF1YW50aWZpZWQgY2xhaW0gZGV0ZWN0ZWQgKGUuZy4gXCI1KyB5ZWFyc1wiLCBcIjMwJSByZWR1Y3Rpb25cIiwgXCIkMk1cIikuIEFkZGluZyBhIG51bWJlciBzdHJlbmd0aGVucyBjcmVkaWJpbGl0eS4nKTtcbiAgfVxuICAvLyBDaGVjayAyOiB0YXJnZXQgcm9sZSBrZXl3b3JkIHByZXNlbnRcbiAgY29uc3QgYW5hbHlzaXMgPSB3aW5kb3cuX2xhc3RBbmFseXNpc0RhdGEgfHxcbiAgICAod2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgJiYgd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMuam9iX2FuYWx5c2lzKSB8fCB7fTtcbiAgY29uc3Qgcm9sZVRpdGxlID0gKGFuYWx5c2lzLnRpdGxlIHx8IGFuYWx5c2lzLmpvYl90aXRsZSB8fCAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIGlmIChyb2xlVGl0bGUgJiYgcm9sZVRpdGxlLmxlbmd0aCA+IDMpIHtcbiAgICBjb25zdCByb2xlUGFydHMgPSByb2xlVGl0bGUuc3BsaXQoL1tcXHMvLF0rLykuZmlsdGVyKHcgPT4gdy5sZW5ndGggPiAzKTtcbiAgICBjb25zdCBpblRleHQgPSByb2xlUGFydHMuc29tZShwYXJ0ID0+IHRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhwYXJ0KSk7XG4gICAgaWYgKCFpblRleHQpIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goYFRhcmdldCByb2xlIChcIiR7ZXNjYXBlSHRtbChyb2xlVGl0bGUpfVwiKSBub3QgbWVudGlvbmVkIFx1MjAxNCBjb25zaWRlciBlY2hvaW5nIHRoZSByb2xlIG9yIGEgc3lub255bS5gKTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgMzogZmFsbGJhY2sgZ2VuZXJpYyBwbGFjZWhvbGRlclxuICBjb25zdCBnZW5lcmljUGhyYXNlcyA9IFsnZXhwZXJpZW5jZWQgcHJvZmVzc2lvbmFsJywgJ3RyYWNrIHJlY29yZCBvZiBzdWNjZXNzJywgJ3NlZWtpbmcgYSBjaGFsbGVuZ2luZyddO1xuICBmb3IgKGNvbnN0IHBocmFzZSBvZiBnZW5lcmljUGhyYXNlcykge1xuICAgIGlmICh0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocGhyYXNlKSkge1xuICAgICAgd2FybmluZ3MucHVzaChgR2VuZXJpYyBwbGFjZWhvbGRlciBwaHJhc2UgZGV0ZWN0ZWQgKFwiJHtwaHJhc2V9XCIpIFx1MjAxNCByZXBsYWNlIHdpdGggc3BlY2lmaWMgYWNoaWV2ZW1lbnRzLmApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gd2FybmluZ3M7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVTdW1tYXJ5U3BlY2lmaWNpdHlCYWRnZSh0ZXh0KSB7XG4gIGxldCBiYWRnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdW1tYXJ5LXNwZWNpZmljaXR5LWJhZGdlJyk7XG4gIGlmICghYmFkZ2UpIHtcbiAgICBjb25zdCB0ZXh0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWktc3VtbWFyeS10ZXh0Jyk7XG4gICAgaWYgKCF0ZXh0RWwgfHwgIXRleHRFbC5wYXJlbnROb2RlKSByZXR1cm47XG4gICAgYmFkZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBiYWRnZS5pZCA9ICdzdW1tYXJ5LXNwZWNpZmljaXR5LWJhZGdlJztcbiAgICBiYWRnZS5zdHlsZS5jc3NUZXh0ID0gJ21hcmdpbi10b3A6NnB4O2ZvbnQtc2l6ZTowLjgyZW07JztcbiAgICB0ZXh0RWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYmFkZ2UsIHRleHRFbC5uZXh0U2libGluZyk7XG4gIH1cbiAgY29uc3Qgd2FybmluZ3MgPSBfY2hlY2tTdW1tYXJ5U3BlY2lmaWNpdHkodGV4dCk7XG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICBiYWRnZS5pbm5lckhUTUwgPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjojMTBiOTgxO1wiPlx1MjcxMyBTdW1tYXJ5IGhhcyBzcGVjaWZpYywgcXVhbnRpZmllZCBjb250ZW50Ljwvc3Bhbj4nO1xuICB9IGVsc2Uge1xuICAgIGJhZGdlLmlubmVySFRNTCA9IHdhcm5pbmdzLm1hcCh3ID0+XG4gICAgICBgPGRpdiBzdHlsZT1cImNvbG9yOiNiNDUzMDk7bWFyZ2luLXRvcDoycHg7XCI+XHUyNkEwICR7d308L2Rpdj5gXG4gICAgKS5qb2luKCcnKTtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgQ2FsbCBnZW5lcmF0ZS1zdW1tYXJ5IEFQSSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBkdWNrZmxvdzpcbiAqICAgaWQ6IHN1bW1hcnlfdWlfZ2VuZXJhdGVcbiAqICAga2luZDogdWlcbiAqICAgdGltZXN0YW1wOiBcIjIwMjYtMDMtMjdUMDE6MjM6MjhaXCJcbiAqICAgc3RhdHVzOiBzaGFyZWRcbiAqICAgaGFuZGxlczogW1widWk6c3VtbWFyeS1yZXZpZXcuZ2VuZXJhdGVcIl1cbiAqICAgY2FsbHM6IFtcIlBPU1QgL2FwaS9nZW5lcmF0ZS1zdW1tYXJ5XCIsIFwidWk6c3VtbWFyeS1yZXZpZXcucGVyc2lzdFwiXVxuICogICByZWFkczogW1wicmVzcG9uc2U6UE9TVCAvYXBpL2dlbmVyYXRlLXN1bW1hcnkuc3VtbWFyeVwiLCBcIndpbmRvdzpfYWlHZW5lcmF0ZWRTdW1tYXJ5XCJdXG4gKiAgIHdyaXRlczogW1wiZG9tOiNhaS1zdW1tYXJ5LXRleHRcIiwgXCJkb206I2FpLXN1bW1hcnktc3RhdHVzXCIsIFwid2luZG93Ol9haUdlbmVyYXRlZFN1bW1hcnlcIiwgXCJ3aW5kb3c6c2VsZWN0ZWRTdW1tYXJ5S2V5XCJdXG4gKiAgIG5vdGVzOiBcIlJlcXVlc3RzIGEgZ2VuZXJhdGVkIG9yIHJlZmluZWQgc3VtbWFyeSwgdXBkYXRlcyB0aGUgbG9jYWwgVUksIGFuZCBwZXJzaXN0cyB0aGUgc2VsZWN0ZWQgc3VtbWFyeSBrZXkuXCJcbiAqL1xuXG5hc3luYyBmdW5jdGlvbiBfY2FsbEdlbmVyYXRlU3VtbWFyeShyZWZpbmVtZW50UHJvbXB0LCBwcmV2aW91c1N1bW1hcnkpIHtcbiAgY29uc3QgYnRuICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWktcmVnZW5lcmF0ZS1idG4nKTtcbiAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWktc3VtbWFyeS1zdGF0dXMnKTtcbiAgY29uc3QgdGV4dEVsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWktc3VtbWFyeS10ZXh0Jyk7XG4gIGNvbnN0IGxvYWRpbmdFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhaS1zdW1tYXJ5LWxvYWRpbmcnKTtcbiAgaWYgKGJ0bikgICAgICBidG4uZGlzYWJsZWQgPSB0cnVlO1xuICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ0dlbmVyYXRpbmdcdTIwMjYnO1xuICAvLyBTaG93IGxvYWRpbmcgaW5kaWNhdG9yOyBoaWRlIHRoZSB0ZXh0YXJlYSB3aGlsZSBnZW5lcmF0aW5nLlxuICBpZiAobG9hZGluZ0VsKSB7IGxvYWRpbmdFbC5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7Y29sb3I6IzZiNzI4MDtwYWRkaW5nOjhweCAwO1wiPjxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyLXdpZHRoOjJweDtcIj48L2Rpdj48ZW0+R2VuZXJhdGluZyBhIHRhaWxvcmVkIHN1bW1hcnlcdTIwMjY8L2VtPjwvZGl2Pic7IGxvYWRpbmdFbC5zdHlsZS5kaXNwbGF5ID0gJyc7IH1cbiAgaWYgKHRleHRFbCkgICB0ZXh0RWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAvLyBVc2UgdGhlIGdsb2JhbCBMTE0gc3RhdHVzIGJhciBmb3IgdmlzaWJpbGl0eVxuICBzZXRMb2FkaW5nKHRydWUsICdHZW5lcmF0aW5nIHN1bW1hcnlcdTIwMjYnKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGJvZHkgPSB7fTtcbiAgICBpZiAocmVmaW5lbWVudFByb21wdCkgYm9keS5yZWZpbmVtZW50X3Byb21wdCA9IHJlZmluZW1lbnRQcm9tcHQ7XG4gICAgaWYgKHByZXZpb3VzU3VtbWFyeSkgIGJvZHkucHJldmlvdXNfc3VtbWFyeSAgPSBwcmV2aW91c1N1bW1hcnk7XG5cbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvZ2VuZXJhdGUtc3VtbWFyeScsIHtcbiAgICAgIG1ldGhvZDogICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogICAgSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgX3Nob3dBSVN1bW1hcnkoZGF0YS5zdW1tYXJ5LCAnXHUyNzEzIGdlbmVyYXRlZCcpO1xuICAgICAgd2luZG93LnNlbGVjdGVkU3VtbWFyeUtleSA9ICdhaV9nZW5lcmF0ZWQnO1xuICAgICAgYXdhaXQgc2F2ZVN1bW1hcnlGb2N1c1RvQmFja2VuZCgnYWlfZ2VuZXJhdGVkJyk7XG4gICAgICBzY2hlZHVsZUF0c1JlZnJlc2goJ3Jldmlld19jaGVja3BvaW50Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnXHUyNkEwIGVycm9yJztcbiAgICAgIGlmICh0ZXh0RWwpICAgdGV4dEVsLmlubmVySFRNTCA9IGA8c3BhbiBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7XCI+JHtlc2NhcGVIdG1sKGRhdGEuZXJyb3IgfHwgJ0dlbmVyYXRpb24gZmFpbGVkLicpfTwvc3Bhbj5gO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdcdTI2QTAgbmV0d29yayBlcnJvcic7XG4gICAgaWYgKHRleHRFbCkgICB0ZXh0RWwuaW5uZXJIVE1MID0gJzxzcGFuIHN0eWxlPVwiY29sb3I6I2VmNDQ0NDtcIj5OZXR3b3JrIGVycm9yIFx1MjAxNCBwbGVhc2UgdHJ5IGFnYWluLjwvc3Bhbj4nO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChidG4pIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZWdlbmVyYXRlIC8gdXNlIEFJIHN1bW1hcnkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHJlZ2VuZXJhdGVBSVN1bW1hcnkoKSB7XG4gIGNvbnN0IGlucHV0ICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtbWFyeS1yZWZpbmVtZW50LWlucHV0Jyk7XG4gIGNvbnN0IHByb21wdCAgPSBpbnB1dCA/IGlucHV0LnZhbHVlLnRyaW0oKSA6ICcnO1xuICBjb25zdCBjdXJyZW50ID0gd2luZG93Ll9haUdlbmVyYXRlZFN1bW1hcnkgfHwgJyc7XG4gIGF3YWl0IF9jYWxsR2VuZXJhdGVTdW1tYXJ5KHByb21wdCB8fCBudWxsLCBjdXJyZW50IHx8IG51bGwpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1c2VBSVN1bW1hcnkoKSB7XG4gIHdpbmRvdy5zZWxlY3RlZFN1bW1hcnlLZXkgPSAnYWlfZ2VuZXJhdGVkJztcbiAgY29uc3QgdGV4dEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FpLXN1bW1hcnktdGV4dCcpO1xuICBjb25zdCBjdXJyZW50VGV4dCA9IHRleHRFbCA/IHRleHRFbC52YWx1ZS50cmltKCkgOiAod2luZG93Ll9haUdlbmVyYXRlZFN1bW1hcnkgfHwgJycpO1xuICBhd2FpdCBzYXZlU3VtbWFyeUZvY3VzVG9CYWNrZW5kKCdhaV9nZW5lcmF0ZWQnLCBjdXJyZW50VGV4dCk7XG4gIHNjaGVkdWxlQXRzUmVmcmVzaCgncmV2aWV3X2NoZWNrcG9pbnQnKTtcbiAgc2hvd1RvYXN0KCdBSS1nZW5lcmF0ZWQgc3VtbWFyeSBzZWxlY3RlZCBmb3IgeW91ciBDVicpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgU2VsZWN0IHN0b3JlZCBzdW1tYXJ5IGtleSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gc2VsZWN0U3VtbWFyeUtleShrZXkpIHtcbiAgd2luZG93LnNlbGVjdGVkU3VtbWFyeUtleSA9IGtleTtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3N1bW1hcnktcmFkaW9zIGxhYmVsJykuZm9yRWFjaChsYWJlbCA9PiB7XG4gICAgY29uc3QgcmFkaW8gPSBsYWJlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPXJhZGlvXScpO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSByYWRpbyAmJiByYWRpby52YWx1ZSA9PT0ga2V5O1xuICAgIGxhYmVsLnN0eWxlLmJvcmRlckNvbG9yID0gaXNTZWxlY3RlZCA/ICcjMTBiOTgxJyA6ICcjZTVlN2ViJztcbiAgICBsYWJlbC5zdHlsZS5iYWNrZ3JvdW5kICA9IGlzU2VsZWN0ZWQgPyAnI2YwZmRmNCcgOiAnJztcbiAgfSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBTYXZlIC8gc3VibWl0IFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG4vKipcbiAqIGR1Y2tmbG93OlxuICogICBpZDogc3VtbWFyeV91aV9wZXJzaXN0XG4gKiAgIGtpbmQ6IHVpXG4gKiAgIHRpbWVzdGFtcDogXCIyMDI2LTAzLTI3VDAxOjIzOjI4WlwiXG4gKiAgIHN0YXR1czogc2hhcmVkXG4gKiAgIGhhbmRsZXM6IFtcInVpOnN1bW1hcnktcmV2aWV3LnBlcnNpc3RcIl1cbiAqICAgY2FsbHM6IFtcIlBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zXCJdXG4gKiAgIHJlYWRzOiBbXCJ3aW5kb3c6c2VsZWN0ZWRTdW1tYXJ5S2V5XCJdXG4gKiAgIHdyaXRlczogW1wicmVxdWVzdDpQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9ucy5zdW1tYXJ5X2ZvY3VzXCJdXG4gKiAgIG5vdGVzOiBcIlBlcnNpc3RzIG9ubHkgdGhlIHNlbGVjdGVkIHN1bW1hcnkga2V5IHNvIGJhY2tlbmQgc3RhdGUgY2FuIHJlc29sdmUgdGhlIGFjdGl2ZSBzdW1tYXJ5IHZhcmlhbnQgbGF0ZXIuXCJcbiAqL1xuXG4vLyBEZWJvdW5jZSB0aW1lciBmb3IgYXV0by1wZXJzaXN0aW5nIGVkaXRzIHRvIHRoZSBzdW1tYXJ5IHRleHQuXG5sZXQgX3N1bW1hcnlQZXJzaXN0VGltZXIgPSBudWxsO1xuXG5mdW5jdGlvbiBvblN1bW1hcnlUZXh0Q2hhbmdlKCkge1xuICBjb25zdCB0ZXh0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWktc3VtbWFyeS10ZXh0Jyk7XG4gIGlmICghdGV4dEVsKSByZXR1cm47XG4gIHdpbmRvdy5fYWlHZW5lcmF0ZWRTdW1tYXJ5ID0gdGV4dEVsLnZhbHVlO1xuICBfdXBkYXRlU3VtbWFyeVNwZWNpZmljaXR5QmFkZ2UodGV4dEVsLnZhbHVlKTtcbiAgY2xlYXJUaW1lb3V0KF9zdW1tYXJ5UGVyc2lzdFRpbWVyKTtcbiAgX3N1bW1hcnlQZXJzaXN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBzYXZlU3VtbWFyeUZvY3VzVG9CYWNrZW5kKCdhaV9nZW5lcmF0ZWQnLCB0ZXh0RWwudmFsdWUudHJpbSgpKTtcbiAgfSwgNTAwKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZVN1bW1hcnlGb2N1c1RvQmFja2VuZChrZXksIHRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0geyB0eXBlOiAnc3VtbWFyeV9mb2N1cycsIGRlY2lzaW9uczoga2V5IH07XG4gICAgaWYgKHRleHQgIT09IHVuZGVmaW5lZCAmJiB0ZXh0ICE9PSBudWxsKSBwYXlsb2FkLnN1bW1hcnlfdGV4dCA9IHRleHQ7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXZpZXctZGVjaXNpb25zJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLm9rO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFN1bW1hcnlGb2N1c0RlY2lzaW9uKCkge1xuICBjb25zdCBrZXkgPSB3aW5kb3cuc2VsZWN0ZWRTdW1tYXJ5S2V5O1xuICBpZiAoIWtleSkgcmV0dXJuO1xuICBjb25zdCBzYXZlZCA9IGF3YWl0IHNhdmVTdW1tYXJ5Rm9jdXNUb0JhY2tlbmQoa2V5KTtcbiAgaWYgKCFzYXZlZCkge1xuICAgIHNob3dUb2FzdCgnRmFpbGVkIHRvIHNhdmUgc3VtbWFyeSBzZWxlY3Rpb24uJywgJ2Vycm9yJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHN0YXRlTWFuYWdlci5tYXJrQ29udGVudENoYW5nZWQoKTtcbiAgc2NoZWR1bGVBdHNSZWZyZXNoKCdyZXZpZXdfY2hlY2twb2ludCcpO1xuICBzaG93VG9hc3QoYFN1bW1hcnkgc2VsZWN0aW9uIHNhdmVkOiBcIiR7a2V5LnJlcGxhY2UoL18vZywgJyAnKX1cImApO1xuICBzd2l0Y2hUYWIoJ3B1YmxpY2F0aW9ucy1yZXZpZXcnKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB7XG4gIGJ1aWxkU3VtbWFyeUZvY3VzU2VjdGlvbixcbiAgX3JlbmRlclN0b3JlZFN1bW1hcnlSYWRpb3MsXG4gIF9zaG93QUlTdW1tYXJ5LFxuICBfY2FsbEdlbmVyYXRlU3VtbWFyeSxcbiAgcmVnZW5lcmF0ZUFJU3VtbWFyeSxcbiAgdXNlQUlTdW1tYXJ5LFxuICBvblN1bW1hcnlUZXh0Q2hhbmdlLFxuICBzZWxlY3RTdW1tYXJ5S2V5LFxuICBzYXZlU3VtbWFyeUZvY3VzVG9CYWNrZW5kLFxuICBfY2hlY2tTdW1tYXJ5U3BlY2lmaWNpdHksXG4gIF91cGRhdGVTdW1tYXJ5U3BlY2lmaWNpdHlCYWRnZSxcbiAgc3VibWl0U3VtbWFyeUZvY3VzRGVjaXNpb24sXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvcHVibGljYXRpb25zLXJldmlldy5qc1xuICogUHVibGljYXRpb25zIHJldmlldyB0YWJsZTogZmV0Y2gsIHJlbmRlciwgdG9nZ2xlIGFjY2VwdC9yZWplY3QsIHN1Ym1pdCBkZWNpc2lvbnMuXG4gKlxuICogRGVwZW5kZW5jaWVzIChyZXNvbHZlZCB0aHJvdWdoIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIHB1YmxpY2F0aW9uRGVjaXNpb25zLCBfc2F2ZWREZWNpc2lvbnMsXG4gKiAgIGVzY2FwZUh0bWwsIHNob3dUb2FzdCwgZmV0Y2hBbmRSZXZpZXdSZXdyaXRlcywgQ1NTXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdwdWJsaWNhdGlvbnMtcmV2aWV3Jyk7XG5cbmltcG9ydCB7IHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5pbXBvcnQgeyBleWVTbGFzaEljb24gfSBmcm9tICcuL3Jldmlldy1pY29ucy5qcyc7XG5cbi8vIFRyYWNrIHB1YmxpY2F0aW9uIGFjY2VwdC9yZWplY3QgZGVjaXNpb25zOiBjaXRlX2tleSBcdTIxOTIgdHJ1ZSAoYWNjZXB0KSB8IGZhbHNlIChyZWplY3QpXG53aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnMgPSB7fTtcbi8vIE9yZGVyZWQgbGlzdCBvZiBwdWJsaWNhdGlvbiBvYmplY3RzOyBtdXRhdGVkIGJ5IG1vdmVQdWJSb3coKVxud2luZG93Ll9wdWJsaWNhdGlvbnNPcmRlcmVkID0gW107XG5cbi8vIFx1MjUwMFx1MjUwMCBCdWlsZCBwdWJsaWNhdGlvbnMgcmV2aWV3IHRhYmxlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBidWlsZFB1YmxpY2F0aW9uc1Jldmlld1RhYmxlKCkge1xuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHVibGljYXRpb25zLXRhYmxlLWNvbnRhaW5lcicpO1xuICAvLyBJbiB0aGUgbmV3IHN1Yi10YWIgbGF5b3V0LCB3ZSB1c2UgdGhlIHBhbmUgd3JhcHBlciBpbnN0ZWFkIG9mIHRoZSBvbGQgc2VjdGlvblxuICBjb25zdCBzZWN0aW9uICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHVibGljYXRpb25zLXJldmlldy1zZWN0aW9uJykgfHxcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jldmlldy1wYW5lLXB1YmxpY2F0aW9ucycpO1xuICBjb25zdCBwdWJUYWJCdG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucmV2aWV3LXN1YnRhYltkYXRhLXBhbmU9XCJwdWJsaWNhdGlvbnNcIl0nKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O3BhZGRpbmc6MjBweDtjb2xvcjojNmI3MjgwO1wiPjxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyLXdpZHRoOjJweDtmbGV4LXNocmluazowO1wiPjwvZGl2PjxzcGFuPkxvYWRpbmcgcHVibGljYXRpb24gcmVjb21tZW5kYXRpb25zXFx1MjAyNjwvc3Bhbj48L2Rpdj4nO1xuXG4gIGxldCByZWNvbW1lbmRhdGlvbnMgPSBbXTtcbiAgbGV0IHRvdGFsQ291bnQgPSAwO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9wdWJsaWNhdGlvbi1yZWNvbW1lbmRhdGlvbnMnKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoIWRhdGEub2spIHsgY29udGFpbmVyLmlubmVySFRNTCA9IGA8cCBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj4ke2VzY2FwZUh0bWwoZGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIGxvYWQgcHVibGljYXRpb25zLicpfTwvcD5gOyByZXR1cm47IH1cbiAgICByZWNvbW1lbmRhdGlvbnMgPSBkYXRhLnJlY29tbWVuZGF0aW9ucyB8fCBbXTtcbiAgICB0b3RhbENvdW50ID0gZGF0YS50b3RhbF9jb3VudCB8fCByZWNvbW1lbmRhdGlvbnMubGVuZ3RoO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHB1YmxpY2F0aW9uIHJlY29tbWVuZGF0aW9uczonLCBlcnIpO1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJjb2xvcjogI2VmNDQ0NDsgcGFkZGluZzogMjBweDtcIj5GYWlsZWQgdG8gbG9hZCBwdWJsaWNhdGlvbiByZWNvbW1lbmRhdGlvbnMuPC9wPic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHJlY29tbWVuZGF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBObyBwdWJsaWNhdGlvbnMgXHUyMDE0IGhpZGUgdGhlIHBhbmUgYW5kIGRpc2FibGUgdGhlIHRhYiBidXR0b25cbiAgICBpZiAoc2VjdGlvbikgc2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGlmIChwdWJUYWJCdG4pIHB1YlRhYkJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJwYWRkaW5nOjIwcHg7Y29sb3I6IzZiNzI4MDtcIj5ObyBwdWJsaWNhdGlvbnMgZm91bmQuPC9wPic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2hvdyBzZWN0aW9uIGFuZCB0YWIgYnV0dG9uXG4gIGlmIChwdWJUYWJCdG4pIHB1YlRhYkJ0bi5zdHlsZS5kaXNwbGF5ID0gJyc7XG5cbiAgLy8gVXBkYXRlIGhlYWRpbmcgY291bnQgKGhhbmRsZSBib3RoIHBhbmUgYXBwcm9hY2ggYW5kIGxlZ2FjeSBzZWN0aW9uIGFwcHJvYWNoKVxuICBjb25zdCBoZWFkaW5nID0gc2VjdGlvbiA/IHNlY3Rpb24ucXVlcnlTZWxlY3RvcignaDInKSA6IG51bGw7XG4gIGlmIChoZWFkaW5nKSB7XG4gICAgaGVhZGluZy50ZXh0Q29udGVudCA9IGBcdUQ4M0RcdURDQzQgU2VsZWN0ZWQgUHVibGljYXRpb25zYDtcbiAgfVxuXG4gIC8vIENvdW50IHJlY29tbWVuZGVkIHZzIHRvdGFsXG4gIGNvbnN0IHJlY29tbWVuZGVkQ291bnQgPSByZWNvbW1lbmRhdGlvbnMuZmlsdGVyKHAgPT4gcC5pc19yZWNvbW1lbmRlZCAhPT0gZmFsc2UpLmxlbmd0aDtcbiAgY29uc3QgY29udGV4dE5vdGUgPSBgPHN0cm9uZz4ke3JlY29tbWVuZGVkQ291bnR9PC9zdHJvbmc+IG9mIDxzdHJvbmc+JHt0b3RhbENvdW50fTwvc3Ryb25nPiBwdWJsaWNhdGlvbnMgcmVjb21tZW5kZWQgZm9yIHRoaXMgcm9sZS4gYCArXG4gICAgYFJlY29tbWVuZGVkIHB1YmxpY2F0aW9ucyAodG9wKSBhcmUgcHJlLXNlbGVjdGVkIGZvciBpbmNsdXNpb247IG90aGVycyAoYmVsb3cgdGhlIGRpdmlkZXIpIGFyZSBwcmUtZXhjbHVkZWQuIEFkanVzdCB1c2luZyB0aGUgdG9nZ2xlcy5gO1xuXG4gIC8vIEluaXRpYWxpc2UgZGVjaXNpb25zIFx1MjAxNCByZWNvbW1lbmRlZD1hY2NlcHQsIG5vdC1yZWNvbW1lbmRlZD1yZWplY3QgYnkgZGVmYXVsdFxuICB3aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnMgPSB7fTtcbiAgcmVjb21tZW5kYXRpb25zLmZvckVhY2gocHViID0+IHtcbiAgICB3aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnNbcHViLmNpdGVfa2V5XSA9IHB1Yi5pc19yZWNvbW1lbmRlZCAhPT0gZmFsc2U7XG4gIH0pO1xuICAvLyBBcHBseSBhbnkgcHJldmlvdXNseSBzYXZlZCB1c2VyIGRlY2lzaW9ucyBvdmVyIHRoZSBBUEkgZGVmYXVsdHNcbiAgY29uc3Qgc2F2ZWRQdWJEZWNzID0gd2luZG93Ll9zYXZlZERlY2lzaW9ucz8ucHVibGljYXRpb25fZGVjaXNpb25zIHx8IHt9O1xuICBpZiAoT2JqZWN0LmtleXMoc2F2ZWRQdWJEZWNzKS5sZW5ndGggPiAwKSBPYmplY3QuYXNzaWduKHdpbmRvdy5wdWJsaWNhdGlvbkRlY2lzaW9ucywgc2F2ZWRQdWJEZWNzKTtcblxuICAvLyBTZWVkIHRoZSBvcmRlcmVkIGxpc3QgZm9yIHJlb3JkZXIgY29udHJvbHNcbiAgd2luZG93Ll9wdWJsaWNhdGlvbnNPcmRlcmVkID0gWy4uLnJlY29tbWVuZGF0aW9uc107XG5cbiAgbGV0IHRhYmxlSFRNTCA9IGBcbiAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjAuOWVtO21hcmdpbi1ib3R0b206MTJweDtcIj4ke2NvbnRleHROb3RlfTwvcD5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tYm90dG9tOjEwcHg7XCI+XG4gICAgICA8bGFiZWwgc3R5bGU9XCJmb250LXNpemU6MC45ZW07Y29sb3I6IzM3NDE1MTtcIj5GaWx0ZXIgcHVibGljYXRpb25zOlxuICAgICAgICA8aW5wdXQgdHlwZT1cInNlYXJjaFwiIGlkPVwicHViLWZpbHRlci1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBmaWx0ZXJcdTIwMjZcIlxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6OHB4O3BhZGRpbmc6NHB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjAuOWVtO1wiXG4gICAgICAgICAgb25pbnB1dD1cImZpbHRlclB1YmxpY2F0aW9uc1RhYmxlKHRoaXMudmFsdWUpXCI+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDphdXRvO2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtcIj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC44MmVtO2NvbG9yOiM2YjcyODA7XCI+QnVsazo8L3NwYW4+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIHN0eWxlPVwiZm9udC1zaXplOjAuOGVtO3BhZGRpbmc6NHB4IDEwcHg7XCJcbiAgICAgICAgICBvbmNsaWNrPVwiYnVsa1B1YkFjdGlvbigncmVjb21tZW5kZWQnKVwiIHRpdGxlPVwiQWNjZXB0IGFsbCByZWNvbW1lbmRlZCBhbmQgcmVqZWN0IHRoZSByZXN0XCI+QWNjZXB0IFJlY29tbWVuZGVkPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIHN0eWxlPVwiZm9udC1zaXplOjAuOGVtO3BhZGRpbmc6NHB4IDEwcHg7XCJcbiAgICAgICAgICBvbmNsaWNrPVwiYnVsa1B1YkFjdGlvbignYWNjZXB0LWFsbCcpXCIgdGl0bGU9XCJBY2NlcHQgYWxsIHB1YmxpY2F0aW9uc1wiPkFjY2VwdCBBbGw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gc2Vjb25kYXJ5XCIgc3R5bGU9XCJmb250LXNpemU6MC44ZW07cGFkZGluZzo0cHggMTBweDtcIlxuICAgICAgICAgIG9uY2xpY2s9XCJidWxrUHViQWN0aW9uKCdyZWplY3QtYWxsJylcIiB0aXRsZT1cIlJlamVjdCBhbGwgcHVibGljYXRpb25zXCI+UmVqZWN0IEFsbDwvYnV0dG9uPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDx0YWJsZSBpZD1cInB1YmxpY2F0aW9ucy1yZXZpZXctdGFibGVcIiBjbGFzcz1cInJldmlldy10YWJsZVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6NDBweDtcIj5SYW5rPC90aD5cbiAgICAgICAgICA8dGg+Q2l0YXRpb248L3RoPlxuICAgICAgICAgIDx0aD5ZZWFyPC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozNnB4O3RleHQtYWxpZ246Y2VudGVyO1wiIHRpdGxlPVwiRmlyc3QgYXV0aG9yXCI+MXN0XHUyNjA1PC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo1MHB4O1wiPlNjb3JlPC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo4MHB4O1wiPkNvbmZpZGVuY2U8L3RoPlxuICAgICAgICAgIDx0aD5SZWFzb25pbmc8L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjgwcHg7XCI+SW5jbHVkZT88L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjU2cHg7dGV4dC1hbGlnbjpjZW50ZXI7XCI+T3JkZXI8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgYDtcblxuICBsZXQgZGl2aWRlckluc2VydGVkID0gZmFsc2U7XG4gIHJlY29tbWVuZGF0aW9ucy5mb3JFYWNoKChwdWIsIGlkeCkgPT4ge1xuICAgIC8vIEluc2VydCBhIHNlY3Rpb24gZGl2aWRlciBiZWZvcmUgdGhlIGZpcnN0IG5vbi1yZWNvbW1lbmRlZCBwdWJsaWNhdGlvblxuICAgIGlmICghZGl2aWRlckluc2VydGVkICYmIHB1Yi5pc19yZWNvbW1lbmRlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGRpdmlkZXJJbnNlcnRlZCA9IHRydWU7XG4gICAgICBjb25zdCBkaXZpZGVyU3R5bGUgPSAnYmFja2dyb3VuZDojZjNmNGY2O2JvcmRlci10b3A6MnB4IHNvbGlkICNkMWQ1ZGI7cGFkZGluZzowOyc7XG4gICAgICB0YWJsZUhUTUwgKz0gYFxuICAgICAgICA8dHIgY2xhc3M9XCJwdWItZGl2aWRlci1yb3dcIj5cbiAgICAgICAgICA8dGQgc3R5bGU9XCIke2RpdmlkZXJTdHlsZX1cIj48L3RkPlxuICAgICAgICAgIDx0ZCBzdHlsZT1cIiR7ZGl2aWRlclN0eWxlfWNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjAuODJlbTtmb250LXN0eWxlOml0YWxpYztwYWRkaW5nOjZweCAxMnB4O3RleHQtYWxpZ246Y2VudGVyO1wiPlxuICAgICAgICAgICAgXHUyMDE0IFB1YmxpY2F0aW9ucyBiZWxvdyB3ZXJlIG5vdCByZWNvbW1lbmRlZCBmb3IgdGhpcyByb2xlIChwcmUtZXhjbHVkZWQpIFx1MjAxNFxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIHN0eWxlPVwiJHtkaXZpZGVyU3R5bGV9XCI+PC90ZD5cbiAgICAgICAgICA8dGQgc3R5bGU9XCIke2RpdmlkZXJTdHlsZX1cIj48L3RkPlxuICAgICAgICAgIDx0ZCBzdHlsZT1cIiR7ZGl2aWRlclN0eWxlfVwiPjwvdGQ+XG4gICAgICAgICAgPHRkIHN0eWxlPVwiJHtkaXZpZGVyU3R5bGV9XCI+PC90ZD5cbiAgICAgICAgICA8dGQgc3R5bGU9XCIke2RpdmlkZXJTdHlsZX1cIj48L3RkPlxuICAgICAgICAgIDx0ZCBzdHlsZT1cIiR7ZGl2aWRlclN0eWxlfVwiPjwvdGQ+XG4gICAgICAgICAgPHRkIHN0eWxlPVwiJHtkaXZpZGVyU3R5bGV9XCI+PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIGA7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuayAgICAgICA9IGlkeCArIDE7XG4gICAgY29uc3QgY2l0YXRpb24gICA9IHB1Yi5mb3JtYXR0ZWRfY2l0YXRpb24gfHwgW3B1Yi50aXRsZSwgcHViLnZlbnVlLCBwdWIueWVhcl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy4gJyk7XG4gICAgY29uc3QgeWVhciAgICAgICA9IHB1Yi55ZWFyIHx8ICdcdTIwMTQnO1xuICAgIGNvbnN0IGZpcnN0QXV0aCAgPSBwdWIuaXNfZmlyc3RfYXV0aG9yID8gJzxzcGFuIHN0eWxlPVwiY29sb3I6IzEwYjk4MTtmb250LXdlaWdodDo3MDA7XCIgdGl0bGU9XCJGaXJzdCBhdXRob3JcIj5cdTI2MDU8L3NwYW4+JyA6ICc8c3BhbiBzdHlsZT1cImNvbG9yOiNkMWQ1ZGI7XCI+XHUyNjA2PC9zcGFuPic7XG4gICAgY29uc3Qgc2NvcmUgICAgICA9IHB1Yi5yZWxldmFuY2Vfc2NvcmUgPyBwdWIucmVsZXZhbmNlX3Njb3JlIDogJ1x1MjAxNCc7XG4gICAgY29uc3QgY29uZmlkZW5jZSA9IHB1Yi5jb25maWRlbmNlIHx8ICcnO1xuICAgIGNvbnN0IGNvbmZDb2xvciAgPSBjb25maWRlbmNlID09PSAnSGlnaCcgPyAnIzEwYjk4MScgOiBjb25maWRlbmNlID09PSAnTG93JyA/ICcjZWY0NDQ0JyA6ICcjZjU5ZTBiJztcbiAgICBjb25zdCBjb25mQmFkZ2UgID0gY29uZmlkZW5jZSA/IGA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToxMXB4O2NvbG9yOiR7Y29uZkNvbG9yfTtmb250LXdlaWdodDo2MDA7XCI+JHtlc2NhcGVIdG1sKGNvbmZpZGVuY2UpfTwvc3Bhbj5gIDogJyc7XG4gICAgY29uc3QgcmVhc29uaW5nICA9IHB1Yi5yYXRpb25hbGUgPyBgPHNtYWxsPiR7ZXNjYXBlSHRtbChwdWIucmF0aW9uYWxlKX08L3NtYWxsPmAgOiAnJztcbiAgICBjb25zdCB2ZW51ZVdhcm4gID0gcHViLnZlbnVlX3dhcm5pbmcgPyBgIDxzcGFuIHRpdGxlPVwiJHtlc2NhcGVIdG1sKHB1Yi52ZW51ZV93YXJuaW5nKX1cIiBzdHlsZT1cImNvbG9yOiNkYzc5MDA7Y3Vyc29yOmhlbHA7XCI+XHUyNkEwPC9zcGFuPmAgOiAnJztcbiAgICBjb25zdCBjaXRlS2V5ICAgID0gcHViLmNpdGVfa2V5IHx8ICcnO1xuICAgIGNvbnN0IGlzQWNjZXB0ZWQgPSB3aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnNbY2l0ZUtleV0gIT09IGZhbHNlO1xuICAgIGNvbnN0IHJvd1N0eWxlICAgPSBwdWIuaXNfcmVjb21tZW5kZWQgPT09IGZhbHNlID8gJ29wYWNpdHk6MC43OycgOiAnJztcblxuICAgIGNvbnN0IGlzRmlyc3QgPSBpZHggPT09IDA7XG4gICAgY29uc3QgaXNMYXN0ICA9IGlkeCA9PT0gcmVjb21tZW5kYXRpb25zLmxlbmd0aCAtIDE7XG4gICAgdGFibGVIVE1MICs9IGBcbiAgICAgIDx0ciBkYXRhLWNpdGUta2V5PVwiJHtlc2NhcGVIdG1sKGNpdGVLZXkpfVwiIHN0eWxlPVwiJHtyb3dTdHlsZX1cIj5cbiAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6NzAwO1wiPiR7cmFua308L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJmb250LXNpemU6MC44N2VtO1wiPiR7ZXNjYXBlSHRtbChjaXRhdGlvbil9JHt2ZW51ZVdhcm59PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+JHt5ZWFyfTwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiR7Zmlyc3RBdXRofTwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiR7c2NvcmUgIT09ICdcdTIwMTQnID8gYDxzdHJvbmc+JHtzY29yZX08L3N0cm9uZz4vMTBgIDogJ1x1MjAxNCd9PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+JHtjb25mQmFkZ2V9PC90ZD5cbiAgICAgICAgPHRkPiR7cmVhc29uaW5nfTwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImFjdGlvbi1idG5zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4ke2lzQWNjZXB0ZWQgPyAnIGFjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImFjY2VwdFwiIGFyaWEtbGFiZWw9XCJJbmNsdWRlIHB1YmxpY2F0aW9uICR7ZXNjYXBlSHRtbChjaXRlS2V5KX1cIiB0aXRsZT1cIkluY2x1ZGUgaW4gQ1ZcIlxuICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiMxMGI5ODE7XCIgaWQ9XCJwdWItYWNjZXB0LSR7cmFua31cIj5cdTI3MTM8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biR7IWlzQWNjZXB0ZWQgPyAnIGFjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cInJlamVjdFwiIGFyaWEtbGFiZWw9XCJFeGNsdWRlIHB1YmxpY2F0aW9uICR7ZXNjYXBlSHRtbChjaXRlS2V5KX1cIiB0aXRsZT1cIkV4Y2x1ZGUgZnJvbSBDVlwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6I2VmNDQ0NDtcIiBpZD1cInB1Yi1yZWplY3QtJHtyYW5rfVwiPiR7ZXllU2xhc2hJY29uKCl9PC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBkYXRhLWFjdGlvbj1cInB1Yi11cFwiIGRhdGEtY2l0ZS1rZXk9XCIke2VzY2FwZUh0bWwoY2l0ZUtleSl9XCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJNb3ZlIHB1YmxpY2F0aW9uIHVwXCIgdGl0bGU9XCJNb3ZlIHVwXCIgJHtpc0ZpcnN0ID8gJ2Rpc2FibGVkIHN0eWxlPVwib3BhY2l0eTowLjM7XCInIDogJyd9Plx1MjE5MTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGRhdGEtYWN0aW9uPVwicHViLWRvd25cIiBkYXRhLWNpdGUta2V5PVwiJHtlc2NhcGVIdG1sKGNpdGVLZXkpfVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiTW92ZSBwdWJsaWNhdGlvbiBkb3duXCIgdGl0bGU9XCJNb3ZlIGRvd25cIiAke2lzTGFzdCA/ICdkaXNhYmxlZCBzdHlsZT1cIm9wYWNpdHk6MC4zO1wiJyA6ICcnfT5cdTIxOTM8L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgYDtcbiAgfSk7XG5cbiAgdGFibGVIVE1MICs9ICc8L3Rib2R5PjwvdGFibGU+JztcbiAgY29udGFpbmVyLmlubmVySFRNTCA9IHRhYmxlSFRNTDtcbiAgLy8gRGVsZWdhdGVkIGNsaWNrIGhhbmRsZXIgZm9yIHB1YmxpY2F0aW9uIGFjdGlvbiBidXR0b25zIChkYXRhLWNpdGUta2V5IG9uIDx0cj4gYXZvaWRzIG9uY2xpY2sgaW5qZWN0aW9uKVxuICBjb250YWluZXIucXVlcnlTZWxlY3RvcignI3B1YmxpY2F0aW9ucy1yZXZpZXctdGFibGUgdGJvZHknKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcbiAgICBjb25zdCBidG4gPSBlLnRhcmdldC5jbG9zZXN0KCcuaWNvbi1idG4nKTtcbiAgICBpZiAoIWJ0biB8fCBidG4uZGlzYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCB0ciA9IGJ0bi5jbG9zZXN0KCd0cltkYXRhLWNpdGUta2V5XScpO1xuICAgIGlmICghdHIpIHJldHVybjtcbiAgICBjb25zdCBhY3Rpb24gPSBidG4uZGF0YXNldC5hY3Rpb247XG4gICAgaWYgICAgICAoYWN0aW9uID09PSAnYWNjZXB0JykgICBoYW5kbGVQdWJBY3Rpb24odHIuZGF0YXNldC5jaXRlS2V5LCB0cnVlKTtcbiAgICBlbHNlIGlmIChhY3Rpb24gPT09ICdyZWplY3QnKSAgIGhhbmRsZVB1YkFjdGlvbih0ci5kYXRhc2V0LmNpdGVLZXksIGZhbHNlKTtcbiAgICBlbHNlIGlmIChhY3Rpb24gPT09ICdwdWItdXAnKSAgIG1vdmVQdWJSb3coYnRuLmRhdGFzZXQuY2l0ZUtleSwgLTEpO1xuICAgIGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3B1Yi1kb3duJykgbW92ZVB1YlJvdyhidG4uZGF0YXNldC5jaXRlS2V5LCArMSk7XG4gIH0pO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgRmlsdGVyIHRhYmxlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBmaWx0ZXJQdWJsaWNhdGlvbnNUYWJsZShxdWVyeSkge1xuICBjb25zdCBxID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3B1YmxpY2F0aW9ucy1yZXZpZXctdGFibGUgdGJvZHkgdHI6bm90KC5wdWItZGl2aWRlci1yb3cpJykuZm9yRWFjaChyb3cgPT4ge1xuICAgIHJvdy5zdHlsZS5kaXNwbGF5ID0gcSA9PT0gJycgfHwgcm93LnRleHRDb250ZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSkgPyAnJyA6ICdub25lJztcbiAgfSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZW9yZGVyIHJvd3MgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIG1vdmVQdWJSb3coY2l0ZUtleSwgZGlyZWN0aW9uKSB7XG4gIGNvbnN0IGFyciA9IHdpbmRvdy5fcHVibGljYXRpb25zT3JkZXJlZDtcbiAgaWYgKCFhcnIgfHwgIWFyci5sZW5ndGgpIHJldHVybjtcbiAgY29uc3QgaWR4ID0gYXJyLmZpbmRJbmRleChwID0+IHAuY2l0ZV9rZXkgPT09IGNpdGVLZXkpO1xuICBpZiAoaWR4IDwgMCkgcmV0dXJuO1xuICBjb25zdCBuZXdJZHggPSBpZHggKyBkaXJlY3Rpb247XG4gIGlmIChuZXdJZHggPCAwIHx8IG5ld0lkeCA+PSBhcnIubGVuZ3RoKSByZXR1cm47XG4gIFthcnJbaWR4XSwgYXJyW25ld0lkeF1dID0gW2FycltuZXdJZHhdLCBhcnJbaWR4XV07XG4gIF9yZWJ1aWxkUHViVGFibGVCb2R5KGFycik7XG4gIC8vIFBlcnNpc3Qgb3JkZXIgdG8gYmFja2VuZCAoZmlyZS1hbmQtZm9yZ2V0KVxuICBmZXRjaCgnL2FwaS9yZW9yZGVyLXJvd3MnLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncHVibGljYXRpb24nLCBvcmRlcmVkX2lkczogYXJyLm1hcChwID0+IHAuY2l0ZV9rZXkpIH0pLFxuICB9KS5jYXRjaCgoKSA9PiB7fSk7XG59XG5cbmZ1bmN0aW9uIF9yZWJ1aWxkUHViVGFibGVCb2R5KHJlY29tbWVuZGF0aW9ucykge1xuICBjb25zdCB0Ym9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwdWJsaWNhdGlvbnMtcmV2aWV3LXRhYmxlIHRib2R5Jyk7XG4gIGlmICghdGJvZHkpIHJldHVybjtcbiAgbGV0IGh0bWwgPSAnJztcbiAgbGV0IGRpdmlkZXJJbnNlcnRlZCA9IGZhbHNlO1xuICByZWNvbW1lbmRhdGlvbnMuZm9yRWFjaCgocHViLCBpZHgpID0+IHtcbiAgICBpZiAoIWRpdmlkZXJJbnNlcnRlZCAmJiBwdWIuaXNfcmVjb21tZW5kZWQgPT09IGZhbHNlKSB7XG4gICAgICBkaXZpZGVySW5zZXJ0ZWQgPSB0cnVlO1xuICAgICAgY29uc3QgZHMgPSAnYmFja2dyb3VuZDojZjNmNGY2O2JvcmRlci10b3A6MnB4IHNvbGlkICNkMWQ1ZGI7cGFkZGluZzowOyc7XG4gICAgICBodG1sICs9IGA8dHIgY2xhc3M9XCJwdWItZGl2aWRlci1yb3dcIj48dGQgc3R5bGU9XCIke2RzfVwiPjwvdGQ+PHRkIHN0eWxlPVwiJHtkc31jb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjgyZW07Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzo2cHggMTJweDt0ZXh0LWFsaWduOmNlbnRlcjtcIj5cdTIwMTQgUHVibGljYXRpb25zIGJlbG93IHdlcmUgbm90IHJlY29tbWVuZGVkIGZvciB0aGlzIHJvbGUgKHByZS1leGNsdWRlZCkgXHUyMDE0PC90ZD48dGQgc3R5bGU9XCIke2RzfVwiPjwvdGQ+PHRkIHN0eWxlPVwiJHtkc31cIj48L3RkPjx0ZCBzdHlsZT1cIiR7ZHN9XCI+PC90ZD48dGQgc3R5bGU9XCIke2RzfVwiPjwvdGQ+PHRkIHN0eWxlPVwiJHtkc31cIj48L3RkPjx0ZCBzdHlsZT1cIiR7ZHN9XCI+PC90ZD48dGQgc3R5bGU9XCIke2RzfVwiPjwvdGQ+PC90cj5gO1xuICAgIH1cbiAgICBjb25zdCByYW5rICAgICAgID0gaWR4ICsgMTtcbiAgICBjb25zdCBjaXRlS2V5ICAgID0gcHViLmNpdGVfa2V5IHx8ICcnO1xuICAgIGNvbnN0IGNpdGF0aW9uICAgPSBwdWIuZm9ybWF0dGVkX2NpdGF0aW9uIHx8IFtwdWIudGl0bGUsIHB1Yi52ZW51ZSwgcHViLnllYXJdLmZpbHRlcihCb29sZWFuKS5qb2luKCcuICcpO1xuICAgIGNvbnN0IHllYXIgICAgICAgPSBwdWIueWVhciB8fCAnXHUyMDE0JztcbiAgICBjb25zdCBmaXJzdEF1dGggID0gcHViLmlzX2ZpcnN0X2F1dGhvciA/ICc8c3BhbiBzdHlsZT1cImNvbG9yOiMxMGI5ODE7Zm9udC13ZWlnaHQ6NzAwO1wiIHRpdGxlPVwiRmlyc3QgYXV0aG9yXCI+XHUyNjA1PC9zcGFuPicgOiAnPHNwYW4gc3R5bGU9XCJjb2xvcjojZDFkNWRiO1wiPlx1MjYwNjwvc3Bhbj4nO1xuICAgIGNvbnN0IHNjb3JlICAgICAgPSBwdWIucmVsZXZhbmNlX3Njb3JlID8gcHViLnJlbGV2YW5jZV9zY29yZSA6ICdcdTIwMTQnO1xuICAgIGNvbnN0IGNvbmZpZGVuY2UgPSBwdWIuY29uZmlkZW5jZSB8fCAnJztcbiAgICBjb25zdCBjb25mQ29sb3IgID0gY29uZmlkZW5jZSA9PT0gJ0hpZ2gnID8gJyMxMGI5ODEnIDogY29uZmlkZW5jZSA9PT0gJ0xvdycgPyAnI2VmNDQ0NCcgOiAnI2Y1OWUwYic7XG4gICAgY29uc3QgY29uZkJhZGdlICA9IGNvbmZpZGVuY2UgPyBgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MTFweDtjb2xvcjoke2NvbmZDb2xvcn07Zm9udC13ZWlnaHQ6NjAwO1wiPiR7ZXNjYXBlSHRtbChjb25maWRlbmNlKX08L3NwYW4+YCA6ICcnO1xuICAgIGNvbnN0IHJlYXNvbmluZyAgPSBwdWIucmF0aW9uYWxlID8gYDxzbWFsbD4ke2VzY2FwZUh0bWwocHViLnJhdGlvbmFsZSl9PC9zbWFsbD5gIDogJyc7XG4gICAgY29uc3QgdmVudWVXYXJuICA9IHB1Yi52ZW51ZV93YXJuaW5nID8gYCA8c3BhbiB0aXRsZT1cIiR7ZXNjYXBlSHRtbChwdWIudmVudWVfd2FybmluZyl9XCIgc3R5bGU9XCJjb2xvcjojZGM3OTAwO2N1cnNvcjpoZWxwO1wiPlx1MjZBMDwvc3Bhbj5gIDogJyc7XG4gICAgY29uc3QgaXNBY2NlcHRlZCA9IHdpbmRvdy5wdWJsaWNhdGlvbkRlY2lzaW9uc1tjaXRlS2V5XSAhPT0gZmFsc2U7XG4gICAgY29uc3Qgcm93U3R5bGUgICA9IHB1Yi5pc19yZWNvbW1lbmRlZCA9PT0gZmFsc2UgPyAnb3BhY2l0eTowLjc7JyA6ICcnO1xuICAgIGNvbnN0IGlzRmlyc3QgICAgPSBpZHggPT09IDA7XG4gICAgY29uc3QgaXNMYXN0ICAgICA9IGlkeCA9PT0gcmVjb21tZW5kYXRpb25zLmxlbmd0aCAtIDE7XG4gICAgaHRtbCArPSBgPHRyIGRhdGEtY2l0ZS1rZXk9XCIke2VzY2FwZUh0bWwoY2l0ZUtleSl9XCIgc3R5bGU9XCIke3Jvd1N0eWxlfVwiPlxuICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6NzAwO1wiPiR7cmFua308L3RkPlxuICAgICAgPHRkIHN0eWxlPVwiZm9udC1zaXplOjAuODdlbTtcIj4ke2VzY2FwZUh0bWwoY2l0YXRpb24pfSR7dmVudWVXYXJufTwvdGQ+XG4gICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4ke3llYXJ9PC90ZD5cbiAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiR7Zmlyc3RBdXRofTwvdGQ+XG4gICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4ke3Njb3JlICE9PSAnXHUyMDE0JyA/IGA8c3Ryb25nPiR7c2NvcmV9PC9zdHJvbmc+LzEwYCA6ICdcdTIwMTQnfTwvdGQ+XG4gICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4ke2NvbmZCYWRnZX08L3RkPlxuICAgICAgPHRkPiR7cmVhc29uaW5nfTwvdGQ+XG4gICAgICA8dGQgY2xhc3M9XCJhY3Rpb24tYnRuc1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4ke2lzQWNjZXB0ZWQgPyAnIGFjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImFjY2VwdFwiIGFyaWEtbGFiZWw9XCJJbmNsdWRlIHB1YmxpY2F0aW9uICR7ZXNjYXBlSHRtbChjaXRlS2V5KX1cIiB0aXRsZT1cIkluY2x1ZGUgaW4gQ1ZcIiBzdHlsZT1cImNvbG9yOiMxMGI5ODE7XCIgaWQ9XCJwdWItYWNjZXB0LSR7cmFua31cIj5cdTI3MTM8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuJHshaXNBY2NlcHRlZCA/ICcgYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwicmVqZWN0XCIgYXJpYS1sYWJlbD1cIkV4Y2x1ZGUgcHVibGljYXRpb24gJHtlc2NhcGVIdG1sKGNpdGVLZXkpfVwiIHRpdGxlPVwiRXhjbHVkZSBmcm9tIENWXCIgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O1wiIGlkPVwicHViLXJlamVjdC0ke3Jhbmt9XCI+JHtleWVTbGFzaEljb24oKX08L2J1dHRvbj5cbiAgICAgIDwvdGQ+XG4gICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7XCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGRhdGEtYWN0aW9uPVwicHViLXVwXCIgZGF0YS1jaXRlLWtleT1cIiR7ZXNjYXBlSHRtbChjaXRlS2V5KX1cIiBhcmlhLWxhYmVsPVwiTW92ZSBwdWJsaWNhdGlvbiB1cFwiIHRpdGxlPVwiTW92ZSB1cFwiICR7aXNGaXJzdCA/ICdkaXNhYmxlZCBzdHlsZT1cIm9wYWNpdHk6MC4zO1wiJyA6ICcnfT5cdTIxOTE8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgZGF0YS1hY3Rpb249XCJwdWItZG93blwiIGRhdGEtY2l0ZS1rZXk9XCIke2VzY2FwZUh0bWwoY2l0ZUtleSl9XCIgYXJpYS1sYWJlbD1cIk1vdmUgcHVibGljYXRpb24gZG93blwiIHRpdGxlPVwiTW92ZSBkb3duXCIgJHtpc0xhc3QgPyAnZGlzYWJsZWQgc3R5bGU9XCJvcGFjaXR5OjAuMztcIicgOiAnJ30+XHUyMTkzPC9idXR0b24+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+YDtcbiAgfSk7XG4gIHRib2R5LmlubmVySFRNTCA9IGh0bWw7XG4gIC8vIFJlLWFwcGx5IGFueSBhY3RpdmUgZmlsdGVyXG4gIGNvbnN0IGZpbHRlclZhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItZmlsdGVyLWlucHV0Jyk/LnZhbHVlIHx8ICcnO1xuICBpZiAoZmlsdGVyVmFsKSBmaWx0ZXJQdWJsaWNhdGlvbnNUYWJsZShmaWx0ZXJWYWwpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgVG9nZ2xlIGFjY2VwdCAvIHJlamVjdCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gaGFuZGxlUHViQWN0aW9uKGNpdGVLZXksIGFjY2VwdCkge1xuICB3aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnNbY2l0ZUtleV0gPSBhY2NlcHQ7XG4gIC8vIHVwZGF0ZSBidXR0b24gYWN0aXZlIHN0YXRlcyBpbiB0aGUgcm93XG4gIGNvbnN0IHJvdyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHRyW2RhdGEtY2l0ZS1rZXk9XCIke0NTUy5lc2NhcGUoY2l0ZUtleSl9XCJdYCk7XG4gIGlmICghcm93KSByZXR1cm47XG4gIHJvdy5xdWVyeVNlbGVjdG9yQWxsKCcuaWNvbi1idG4nKS5mb3JFYWNoKGJ0biA9PiBidG4uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpO1xuICBjb25zdCBhY3Rpb24gPSBhY2NlcHQgPyAnYWNjZXB0JyA6ICdyZWplY3QnO1xuICBjb25zdCBidG4gPSByb3cucXVlcnlTZWxlY3RvcihgW2RhdGEtYWN0aW9uPVwiJHthY3Rpb259XCJdYCk7XG4gIGlmIChidG4pIGJ0bi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEJ1bGsgYWN0aW9ucyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gYnVsa1B1YkFjdGlvbihtb2RlKSB7XG4gIGNvbnN0IHB1YnMgPSB3aW5kb3cuX3B1YmxpY2F0aW9uc09yZGVyZWQgfHwgW107XG4gIGlmICghcHVicy5sZW5ndGgpIHJldHVybjtcblxuICBwdWJzLmZvckVhY2gocHViID0+IHtcbiAgICBjb25zdCBjaXRlS2V5ID0gcHViLmNpdGVfa2V5O1xuICAgIGxldCBhY2NlcHQ7XG4gICAgaWYgKG1vZGUgPT09ICdyZWNvbW1lbmRlZCcpIHtcbiAgICAgIGFjY2VwdCA9IHB1Yi5pc19yZWNvbW1lbmRlZCAhPT0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChtb2RlID09PSAnYWNjZXB0LWFsbCcpIHtcbiAgICAgIGFjY2VwdCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY2VwdCA9IGZhbHNlO1xuICAgIH1cbiAgICB3aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnNbY2l0ZUtleV0gPSBhY2NlcHQ7XG4gICAgLy8gVXBkYXRlIGJ1dHRvbiBzdGF0ZXMgaW4gdGhlIERPTVxuICAgIGNvbnN0IHJvdyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHRyW2RhdGEtY2l0ZS1rZXk9XCIke0NTUy5lc2NhcGUoY2l0ZUtleSl9XCJdYCk7XG4gICAgaWYgKCFyb3cpIHJldHVybjtcbiAgICByb3cucXVlcnlTZWxlY3RvckFsbCgnLmljb24tYnRuW2RhdGEtYWN0aW9uPVwiYWNjZXB0XCJdLFtkYXRhLWFjdGlvbj1cInJlamVjdFwiXScpLmZvckVhY2goYnRuID0+IGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKSk7XG4gICAgY29uc3QgdGFyZ2V0ID0gcm93LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWFjdGlvbj1cIiR7YWNjZXB0ID8gJ2FjY2VwdCcgOiAncmVqZWN0J31cIl1gKTtcbiAgICBpZiAodGFyZ2V0KSB0YXJnZXQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gIH0pO1xuXG4gIGNvbnN0IGFjY2VwdGVkID0gT2JqZWN0LnZhbHVlcyh3aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnMpLmZpbHRlcihCb29sZWFuKS5sZW5ndGg7XG4gIHNob3dUb2FzdChgQnVsayBhY3Rpb24gYXBwbGllZDogJHthY2NlcHRlZH0gYWNjZXB0ZWQsICR7cHVicy5sZW5ndGggLSBhY2NlcHRlZH0gZXhjbHVkZWRgKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFN1Ym1pdCBkZWNpc2lvbnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFB1YmxpY2F0aW9uRGVjaXNpb25zKCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogcHVibGljYXRpb25zX3VpX3N1Ym1pdF9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTAzLTI1VDIxOjM5OjQ4WidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6cHVibGljYXRpb25zLXJldmlldy5zdWJtaXRcbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zXG4gICAqICAgLSBHRVQgL2FwaS9yZXdyaXRlc1xuICAgKiAgIHJlYWRzOlxuICAgKiAgIC0gd2luZG93OnB1YmxpY2F0aW9uRGVjaXNpb25zXG4gICAqICAgd3JpdGVzOlxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9ucy5kZWNpc2lvbnNcbiAgICogICBub3RlczogUGVyc2lzdHMgcHVibGljYXRpb24gaW5jbHVkZS9leGNsdWRlIGRlY2lzaW9ucyBiZWZvcmUgdGhlIHJld3JpdGUgc3RhZ2UgZGVyaXZlcyBkb3duc3RyZWFtIGNvbnRlbnQgcHJvcG9zYWxzIGZyb20gdGhlIGFjY2VwdGVkIHB1YmxpY2F0aW9uIHNldC5cbiAgICovXG4gIGNvbnN0IGRlY2lzaW9ucyA9IHdpbmRvdy5wdWJsaWNhdGlvbkRlY2lzaW9ucyB8fCB7fTtcbiAgY29uc3QgY291bnQgPSBPYmplY3Qua2V5cyhkZWNpc2lvbnMpLmxlbmd0aDtcbiAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgc2hvd1RvYXN0KCdObyBwdWJsaWNhdGlvbiBkZWNpc2lvbnMgdG8gc2F2ZS4nLCAnZXJyb3InKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBQZXJzaXN0IGFzIGEgc3RydWN0dXJlZCBhbnN3ZXIgaW4gc2Vzc2lvbiBzdGF0ZVxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvcmV2aWV3LWRlY2lzaW9ucycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdwdWJsaWNhdGlvbnMnLCBkZWNpc2lvbnM6IHdpbmRvdy5wdWJsaWNhdGlvbkRlY2lzaW9ucyB9KVxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICBzdGF0ZU1hbmFnZXIubWFya0NvbnRlbnRDaGFuZ2VkKCk7XG4gICAgICBjb25zdCBhY2NlcHRlZCA9IE9iamVjdC52YWx1ZXMod2luZG93LnB1YmxpY2F0aW9uRGVjaXNpb25zKS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoO1xuICAgICAgY29uc3QgcmVqZWN0ZWQgPSBjb3VudCAtIGFjY2VwdGVkO1xuICAgICAgc2hvd1RvYXN0KGBQdWJsaWNhdGlvbiBzZWxlY3Rpb25zIHNhdmVkOiAke2FjY2VwdGVkfSBrZXB0LCAke3JlamVjdGVkfSBleGNsdWRlZGApO1xuICAgICAgYXdhaXQgZmV0Y2hBbmRSZXZpZXdSZXdyaXRlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnIgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBzaG93VG9hc3QoYEVycm9yOiAke2Vyci5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgcHVibGljYXRpb24gc2VsZWN0aW9ucyd9YCwgJ2Vycm9yJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3IoJ0Vycm9yIHNhdmluZyBwdWJsaWNhdGlvbiBkZWNpc2lvbnM6JywgZXJyKTtcbiAgICBzaG93VG9hc3QoJ0ZhaWxlZCB0byBzYXZlIHB1YmxpY2F0aW9uIHNlbGVjdGlvbnMuIFBsZWFzZSB0cnkgYWdhaW4uJywgJ2Vycm9yJyk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB7XG4gIGJ1aWxkUHVibGljYXRpb25zUmV2aWV3VGFibGUsXG4gIGJ1bGtQdWJBY3Rpb24sXG4gIGZpbHRlclB1YmxpY2F0aW9uc1RhYmxlLFxuICBoYW5kbGVQdWJBY3Rpb24sXG4gIHN1Ym1pdFB1YmxpY2F0aW9uRGVjaXNpb25zLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3Jld3JpdGUtcmV2aWV3LmpzXG4gKiBSZXdyaXRlIHJldmlldyBwYW5lbDogZmV0Y2ggcmV3cml0ZXMsIHJlbmRlciBjYXJkcyB3aXRoIHdvcmQtZGlmZixcbiAqIGFjY2VwdC9lZGl0L3JlamVjdCBkZWNpc2lvbnMsIHN1Ym1pdC5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgYXBwZW5kTG9hZGluZ01lc3NhZ2UsIHJlbW92ZUxvYWRpbmdNZXNzYWdlLCBhcHBlbmRSZXRyeU1lc3NhZ2UsIGFwcGVuZE1lc3NhZ2UsXG4gKiAgIHNldExvYWRpbmcsIHNlbmRBY3Rpb24sIHN3aXRjaFRhYiwgc2NoZWR1bGVBdHNSZWZyZXNoLFxuICogICBlc2NhcGVIdG1sLCBwYXJzZVJld3JpdGVzUmVzcG9uc2UsIFBIQVNFU1xuICovXG5cbmltcG9ydCB7IHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5cbi8vIE1vZHVsZS1sZXZlbCBzdGF0ZVxubGV0IHJld3JpdGVEZWNpc2lvbnMgPSB7fTtcbmxldCBfcmV3cml0ZVBhbmVsQ2FjaGUgPSBudWxsO1xubGV0IHBlcnN1YXNpb25XYXJuaW5nc0Fja25vd2xlZGdlZCA9IGZhbHNlO1xubGV0IF93YXJuaW5nc0J5UmV3cml0ZUlkID0ge307ICAvLyBNYXAgZnJvbSByZXdyaXRlIGlkIFx1MjE5MiB3YXJuaW5nIGxpc3QgKFBhdGggMSlcbmxldCBfcmVzdG9yZVRvYXN0U2hvd24gPSBmYWxzZTtcblxuZnVuY3Rpb24gc3luY1Jld3JpdGVHbG9iYWxzKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgd2luZG93LnJld3JpdGVEZWNpc2lvbnMgPSByZXdyaXRlRGVjaXNpb25zO1xuICB3aW5kb3cuX3Jld3JpdGVQYW5lbENhY2hlID0gX3Jld3JpdGVQYW5lbENhY2hlO1xuICB3aW5kb3cuYWNjZXB0QWxsUmV3cml0ZXMgPSBhY2NlcHRBbGxSZXdyaXRlcztcbiAgd2luZG93LnJlamVjdEFsbFJld3JpdGVzID0gcmVqZWN0QWxsUmV3cml0ZXM7XG4gIHdpbmRvdy50b2dnbGVSZXdyaXRlQ29tcGFjdE1vZGUgPSB0b2dnbGVSZXdyaXRlQ29tcGFjdE1vZGU7XG59XG5cbmZ1bmN0aW9uIF9kZWNpc2lvbnNLZXkoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2lkID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoJ3Nlc3Npb24nKTtcbiAgICByZXR1cm4gc2lkID8gYHJ3X2RlY2lzaW9uc18ke3NpZH1gIDogbnVsbDtcbiAgfSBjYXRjaCAoXykgeyByZXR1cm4gbnVsbDsgfVxufVxuXG5mdW5jdGlvbiBfcGVyc2lzdERlY2lzaW9ucygpIHtcbiAgY29uc3Qga2V5ID0gX2RlY2lzaW9uc0tleSgpO1xuICBpZiAoIWtleSkgcmV0dXJuO1xuICB0cnkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHJld3JpdGVEZWNpc2lvbnMpKTsgfSBjYXRjaCAoXykge31cbn1cblxuLy8gRmFsbGJhY2sgYXVkaXQgZnJvbSB0aGUgbGFzdCAvYXBpL3Jld3JpdGVzIHJlc3BvbnNlIFx1MjAxNCB1c2VkIGZvciBjb2xkLXJlc3RvcmUgKEdBUC0xODYpLlxubGV0IF9iYWNrZW5kUmV3cml0ZUF1ZGl0ID0gW107XG5cbmZ1bmN0aW9uIF9yZXN0b3JlRGVjaXNpb25zKCkge1xuICBjb25zdCBrZXkgPSBfZGVjaXNpb25zS2V5KCk7XG4gIGlmICgha2V5KSByZXR1cm47XG4gIGNvbnN0IGhhZERlY2lzaW9ucyA9IE9iamVjdC5rZXlzKHJld3JpdGVEZWNpc2lvbnMpLmxlbmd0aCA+IDA7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2F2ZWQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkgfHwgJ251bGwnKTtcbiAgICBpZiAoc2F2ZWQgJiYgdHlwZW9mIHNhdmVkID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzYXZlZCkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmV3cml0ZURlY2lzaW9ucywgc2F2ZWQpO1xuICAgICAgc3luY1Jld3JpdGVHbG9iYWxzKCk7XG4gICAgICBpZiAoIWhhZERlY2lzaW9ucyAmJiAhX3Jlc3RvcmVUb2FzdFNob3duICYmIE9iamVjdC5rZXlzKHJld3JpdGVEZWNpc2lvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgX3Jlc3RvcmVUb2FzdFNob3duID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzaG93VG9hc3QoJ1lvdXIgcHJldmlvdXMgcmV3cml0ZSBkZWNpc2lvbnMgaGF2ZSBiZWVuIHJlc3RvcmVkIFx1MjAxNCB5b3UgY2FuIHN0aWxsIGNoYW5nZSB0aGVtLicsICd3YXJuaW5nJywgNjAwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gY2F0Y2ggKF8pIHt9XG5cbiAgLy8gQ29sZC1yZXN0b3JlIGZhbGxiYWNrOiBzZWVkIGRlY2lzaW9ucyBmcm9tIGJhY2tlbmQgcmV3cml0ZV9hdWRpdCB3aGVuXG4gIC8vIGxvY2FsU3RvcmFnZSBoYXMgbm90aGluZyAoZGlmZmVyZW50IGRldmljZSwgaW5jb2duaXRvLCBjbGVhcmVkIHN0b3JhZ2UpLlxuICBpZiAoX2JhY2tlbmRSZXdyaXRlQXVkaXQubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgX2JhY2tlbmRSZXdyaXRlQXVkaXQpIHtcbiAgICAgIGNvbnN0IGlkID0gZW50cnkuaWQ7XG4gICAgICBpZiAoIWlkIHx8ICFlbnRyeS5vdXRjb21lKSBjb250aW51ZTtcbiAgICAgIHJld3JpdGVEZWNpc2lvbnNbaWRdID0ge1xuICAgICAgICBvdXRjb21lOiBlbnRyeS5vdXRjb21lLFxuICAgICAgICBmaW5hbF90ZXh0OiBlbnRyeS5vdXRjb21lID09PSAnZWRpdCcgPyAoZW50cnkuZmluYWwgPz8gbnVsbCkgOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHJld3JpdGVEZWNpc2lvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHN5bmNSZXdyaXRlR2xvYmFscygpO1xuICAgICAgX3BlcnNpc3REZWNpc2lvbnMoKTtcbiAgICAgIGlmICghaGFkRGVjaXNpb25zICYmICFfcmVzdG9yZVRvYXN0U2hvd24pIHtcbiAgICAgICAgX3Jlc3RvcmVUb2FzdFNob3duID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzaG93VG9hc3QoJ1lvdXIgcHJldmlvdXMgcmV3cml0ZSBkZWNpc2lvbnMgaGF2ZSBiZWVuIHJlc3RvcmVkIFx1MjAxNCB5b3UgY2FuIHN0aWxsIGNoYW5nZSB0aGVtLicsICd3YXJuaW5nJywgNjAwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gX2NsZWFyUGVyc2lzdGVkRGVjaXNpb25zKCkge1xuICBjb25zdCBrZXkgPSBfZGVjaXNpb25zS2V5KCk7XG4gIGlmICgha2V5KSByZXR1cm47XG4gIHRyeSB7IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7IH0gY2F0Y2ggKF8pIHt9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZXdyaXRlIHNuYXBzaG90IChjaGFuZ2VkLWl0ZW0gaGlnaGxpZ2h0aW5nKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmZ1bmN0aW9uIF9zbmFwc2hvdEtleSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzaWQgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgnc2Vzc2lvbicpO1xuICAgIHJldHVybiBzaWQgPyBgcndfc25hcHNob3RfJHtzaWR9YCA6IG51bGw7XG4gIH0gY2F0Y2ggKF8pIHsgcmV0dXJuIG51bGw7IH1cbn1cblxuZnVuY3Rpb24gX3NhdmVSZXdyaXRlU25hcHNob3QocmV3cml0ZXMpIHtcbiAgY29uc3Qga2V5ID0gX3NuYXBzaG90S2V5KCk7XG4gIGlmICgha2V5KSByZXR1cm47XG4gIGNvbnN0IG1hcCA9IHt9O1xuICBmb3IgKGNvbnN0IHIgb2YgcmV3cml0ZXMpIHtcbiAgICBjb25zdCBjYXJkSWQgPSBTdHJpbmcoci5pZCkucmVwbGFjZSgvW15hLXpBLVowLTlfLV0vZywgJ18nKTtcbiAgICBtYXBbY2FyZElkXSA9IHIucHJvcG9zZWQgfHwgJyc7XG4gIH1cbiAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShtYXApKTsgfSBjYXRjaCAoXykge31cbn1cblxuZnVuY3Rpb24gX2dldFJld3JpdGVTbmFwc2hvdCgpIHtcbiAgY29uc3Qga2V5ID0gX3NuYXBzaG90S2V5KCk7XG4gIGlmICgha2V5KSByZXR1cm4gbnVsbDtcbiAgdHJ5IHsgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSB8fCAnbnVsbCcpOyB9IGNhdGNoIChfKSB7IHJldHVybiBudWxsOyB9XG59XG5cbmZ1bmN0aW9uIF9jbGVhclJld3JpdGVTbmFwc2hvdCgpIHtcbiAgY29uc3Qga2V5ID0gX3NuYXBzaG90S2V5KCk7XG4gIGlmICgha2V5KSByZXR1cm47XG4gIHRyeSB7IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7IH0gY2F0Y2ggKF8pIHt9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQW5kUmV2aWV3UmV3cml0ZXMoKSB7XG4gIGNvbnN0IGxvYWRpbmdNc2cgPSBhcHBlbmRMb2FkaW5nTWVzc2FnZSgnQ2hlY2tpbmcgZm9yIHRleHQgaW1wcm92ZW1lbnRzLi4uJyk7XG4gIHNldExvYWRpbmcodHJ1ZSwgJ1Jldmlld2luZyByZXdyaXRlc1x1MjAyNicpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3Jld3JpdGVzJyk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlUmV3cml0ZXNSZXNwb25zZShhd2FpdCByZXMuanNvbigpKTtcbiAgICByZW1vdmVMb2FkaW5nTWVzc2FnZShsb2FkaW5nTXNnKTtcbiAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI3NEMgRXJyb3IgY2hlY2tpbmcgcmV3cml0ZXM6ICcgKyAoZGF0YS5lcnJvciB8fCAnVW5rbm93biBlcnJvcicpLCBmZXRjaEFuZFJldmlld1Jld3JpdGVzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmV3cml0ZXMgPSBkYXRhLnJld3JpdGVzIHx8IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzID0gZGF0YS5wZXJzdWFzaW9uX3dhcm5pbmdzIHx8IFtdOyAgLy8gUGhhc2UgMTBcbiAgICBfYmFja2VuZFJld3JpdGVBdWRpdCA9IGRhdGEucmV3cml0ZV9hdWRpdCB8fCBbXTtcblxuICAgIC8vIFNob3cgcGVyc3Vhc2lvbiB3YXJuaW5ncyBmaXJzdCAoUGhhc2UgMTApXG4gICAgcGVyc3Vhc2lvbldhcm5pbmdzQWNrbm93bGVkZ2VkID0gd2FybmluZ3MubGVuZ3RoID09PSAwOyAgLy8gTWFyayBhY2tub3dsZWRnZWQgaWYgbm8gd2FybmluZ3NcbiAgICBpZiAod2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbXNnID0gYFx1MjZBMFx1RkUwRiAqKiR7d2FybmluZ3MubGVuZ3RofSoqIHBlcnN1YXNpb24gY2hlY2ske3dhcm5pbmdzLmxlbmd0aCA+IDEgPyAncycgOiAnJ30gZmxhZ2dlZC4gUmV2aWV3IHRoZXNlIGJlZm9yZSBzdWJtaXR0aW5nLmA7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCBtc2cpO1xuICAgIH1cblxuICAgIC8vIFNob3cgcmV3cml0ZSByZXZpZXcgcGFuZWxcbiAgICByZXdyaXRlRGVjaXNpb25zID0ge307XG4gICAgc3luY1Jld3JpdGVHbG9iYWxzKCk7XG4gICAgcmVuZGVyUmV3cml0ZVBhbmVsKHJld3JpdGVzLCB3YXJuaW5ncyk7ICAvLyBQYXNzIHdhcm5pbmdzIHRvIHBhbmVsXG4gICAgc3dpdGNoVGFiKCdyZXdyaXRlJyk7XG4gICAgY29uc3QgbiA9IHJld3JpdGVzLmxlbmd0aDtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ1x1MjcwRlx1RkUwRiBObyByZXdyaXRlIHN1Z2dlc3Rpb25zIHdlcmUgbmVlZGVkIFx1MjAxNCB5b3VyIHNlbGVjdGVkIGNvbnRlbnQgYWxyZWFkeSB1c2VzIHRoZSBqb2JcXCdzIHRlcm1pbm9sb2d5IHdlbGwuIFRoZSAqKlJld3JpdGVzKiogdGFiIGlzIHN0aWxsIGF2YWlsYWJsZSBzbyB5b3UgY2FuIGNvbmZpcm0gYW5kIGNvbnRpbnVlIHRvICoqU3BlbGwgQ2hlY2sqKiB3aGVuIHJlYWR5LicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCBgXHUyNzBGXHVGRTBGIFlvdSd2ZSBjb25maXJtZWQgeW91ciBleHBlcmllbmNlLCBza2lsbCwgYW5kIGFjaGlldmVtZW50IHNlbGVjdGlvbnMuIEhlcmUgYXJlIHRoZSBBSSdzICoqJHtufSoqIHRleHQgaW1wcm92ZW1lbnQgc3VnZ2VzdGlvbiR7biA+IDEgPyAncycgOiAnJ30gZm9yIHRoZSBpbmNsdWRlZCBidWxsZXRzIFx1MjAxNCBlYWNoIG9uZSBpbnRyb2R1Y2VzIGpvYi1yZWxldmFudCBrZXl3b3JkcyB3aGlsZSBwcmVzZXJ2aW5nIHlvdXIgZmFjdHMuIFJldmlldyBlYWNoIHN1Z2dlc3Rpb24gaW4gdGhlICoqUmV3cml0ZXMqKiB0YWIsIHRoZW4gYWNjZXB0LCBlZGl0LCBvciByZWplY3QgYmVmb3JlIGNvbnRpbnVpbmcgdG8gc3BlbGwgY2hlY2suYCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZW1vdmVMb2FkaW5nTWVzc2FnZShsb2FkaW5nTXNnKTtcbiAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoJ1x1Mjc0QyBFcnJvcjogJyArIGVyci5tZXNzYWdlLCBmZXRjaEFuZFJldmlld1Jld3JpdGVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVuZGVyUmV3cml0ZUF1ZGl0TG9nKCkge1xuICBpZiAoIV9iYWNrZW5kUmV3cml0ZUF1ZGl0IHx8IF9iYWNrZW5kUmV3cml0ZUF1ZGl0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuXG4gIGNvbnN0IE9VVENPTUVfSUNPTiA9IHsgYWNjZXB0OiAnXHUyNzA1JywgcmVqZWN0OiAnXHUyNzRDJywgZWRpdDogJ1x1MjcwRlx1RkUwRicgfTtcbiAgY29uc3QgT1VUQ09NRV9MQUJFTCA9IHsgYWNjZXB0OiAnQWNjZXB0ZWQnLCByZWplY3Q6ICdSZWplY3RlZCcsIGVkaXQ6ICdFZGl0ZWQnIH07XG5cbiAgY29uc3Qgcm93cyA9IF9iYWNrZW5kUmV3cml0ZUF1ZGl0Lm1hcChlbnRyeSA9PiB7XG4gICAgY29uc3QgaWNvbiAgPSBPVVRDT01FX0lDT05bZW50cnkub3V0Y29tZV0gfHwgJ1x1Mjc1Myc7XG4gICAgY29uc3QgbGFiZWwgPSBPVVRDT01FX0xBQkVMW2VudHJ5Lm91dGNvbWVdIHx8IGVudHJ5Lm91dGNvbWU7XG4gICAgY29uc3QgbG9jICAgPSBlc2NhcGVIdG1sKGVudHJ5LmxvY2F0aW9uIHx8IGVudHJ5LmZpZWxkIHx8ICcnKTtcbiAgICBjb25zdCBvcmlnICA9IGVzY2FwZUh0bWwoZW50cnkub3JpZ2luYWwgfHwgJycpO1xuICAgIGNvbnN0IHByb3AgID0gZXNjYXBlSHRtbChlbnRyeS5wcm9wb3NlZCB8fCAnJyk7XG4gICAgY29uc3QgZmluICAgPSBlbnRyeS5vdXRjb21lID09PSAnZWRpdCcgJiYgZW50cnkuZmluYWxcbiAgICAgID8gYDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtjb2xvcjojMWQ0ZWQ4O2ZvbnQtc2l6ZTowLjg1ZW07XCI+RmluYWw6ICR7ZXNjYXBlSHRtbChlbnRyeS5maW5hbCl9PC9kaXY+YFxuICAgICAgOiAnJztcbiAgICByZXR1cm4gYFxuICAgICAgPGRpdiBzdHlsZT1cImJvcmRlci1ib3R0b206MXB4IHNvbGlkICNlMmU4ZjA7cGFkZGluZzo4cHggMDtmb250LXNpemU6MC44OGVtO1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O21hcmdpbi1ib3R0b206NHB4O1wiPlxuICAgICAgICAgIDxzcGFuIHRpdGxlPVwiJHtsYWJlbH1cIj4ke2ljb259PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmcgc3R5bGU9XCJjb2xvcjojMzc0MTUxO1wiPiR7bGFiZWx9PC9zdHJvbmc+XG4gICAgICAgICAgJHtsb2MgPyBgPHNwYW4gc3R5bGU9XCJjb2xvcjojOWNhM2FmO2ZvbnQtc2l6ZTowLjg1ZW07XCI+XHUyMDE0ICR7bG9jfTwvc3Bhbj5gIDogJyd9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IzZiNzI4MDt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdoO2ZvbnQtc2l6ZTowLjg1ZW07XCI+JHtvcmlnfTwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IzM3NDE1MTtmb250LXNpemU6MC44NWVtO1wiPiR7cHJvcH08L2Rpdj5cbiAgICAgICAgJHtmaW59XG4gICAgICA8L2Rpdj5gO1xuICB9KS5qb2luKCcnKTtcblxuICByZXR1cm4gYFxuICAgIDxkZXRhaWxzIHN0eWxlPVwibWFyZ2luLXRvcDoyNHB4O2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDtcIj5cbiAgICAgIDxzdW1tYXJ5IHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7bGlzdC1zdHlsZTpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtcIj5cbiAgICAgICAgPHNwYW4+XHVEODNEXHVEQ0NCPC9zcGFuPlxuICAgICAgICA8c3Bhbj5SZXdyaXRlIEF1ZGl0IExvZyAoJHtfYmFja2VuZFJld3JpdGVBdWRpdC5sZW5ndGh9IGRlY2lzaW9uJHtfYmFja2VuZFJld3JpdGVBdWRpdC5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30pPC9zcGFuPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OmF1dG87Y29sb3I6IzljYTNhZjtmb250LXNpemU6MC44NWVtO1wiPlx1MjVCQyBzaG93PC9zcGFuPlxuICAgICAgPC9zdW1tYXJ5PlxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MTJweDtcIj4ke3Jvd3N9PC9kaXY+XG4gICAgPC9kZXRhaWxzPmA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJld3JpdGVQYW5lbChyZXdyaXRlcywgd2FybmluZ3MgPSBbXSkge1xuICBfcmV3cml0ZVBhbmVsQ2FjaGUgPSB7IHJld3JpdGVzLCB3YXJuaW5ncyB9O1xuICAvLyBCdWlsZCBwZXItY2FyZCB3YXJuaW5nIGluZGV4IGZvciBQYXRoIDEgYmFkZ2VzXG4gIF93YXJuaW5nc0J5UmV3cml0ZUlkID0ge307XG4gIGZvciAoY29uc3QgdyBvZiB3YXJuaW5ncykge1xuICAgIGlmICghX3dhcm5pbmdzQnlSZXdyaXRlSWRbdy5pZF0pIF93YXJuaW5nc0J5UmV3cml0ZUlkW3cuaWRdID0gW107XG4gICAgX3dhcm5pbmdzQnlSZXdyaXRlSWRbdy5pZF0ucHVzaCh3KTtcbiAgfVxuICBzeW5jUmV3cml0ZUdsb2JhbHMoKTtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGNvbnN0IGhhc1Jld3JpdGVzID0gcmV3cml0ZXMubGVuZ3RoID4gMDtcblxuICAvLyBCdWlsZCBwZXJzdWFzaW9uIHdhcm5pbmdzIHNlY3Rpb24gKFBoYXNlIDEwKVxuICBsZXQgd2FybmluZ3NIdG1sID0gJyc7XG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgd2FybmluZ3NCeVR5cGUgPSB7fTtcbiAgICB3YXJuaW5ncy5mb3JFYWNoKHcgPT4ge1xuICAgICAgaWYgKCF3YXJuaW5nc0J5VHlwZVt3LmZsYWdfdHlwZV0pIHdhcm5pbmdzQnlUeXBlW3cuZmxhZ190eXBlXSA9IDA7XG4gICAgICB3YXJuaW5nc0J5VHlwZVt3LmZsYWdfdHlwZV0rKztcbiAgICB9KTtcbiAgICBjb25zdCB3YXJuaW5nQ291bnRzID0gT2JqZWN0LmVudHJpZXMod2FybmluZ3NCeVR5cGUpXG4gICAgICAubWFwKChbdHlwZSwgY291bnRdKSA9PiBgJHtjb3VudH0gJHt0eXBlLnJlcGxhY2UoL18vZywgJyAnKX1gKVxuICAgICAgLmpvaW4oJywgJyk7XG5cbiAgICB3YXJuaW5nc0h0bWwgPSBgXG4gICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmVmMmYyO2JvcmRlcjoxcHggc29saWQgI2ZlY2FjYTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE0cHg7bWFyZ2luLWJvdHRvbToyMHB4O1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjEwcHg7Y3Vyc29yOnBvaW50ZXI7XCIgb25jbGljaz1cInRoaXMucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjd2FybmluZ3MtZGV0YWlsJykuc3R5bGUuZGlzcGxheSA9IHRoaXMucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjd2FybmluZ3MtZGV0YWlsJykuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJztcIj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToyMHB4O1wiPlx1MjZBMFx1RkUwRjwvc3Bhbj5cbiAgICAgICAgICA8c3Ryb25nIHN0eWxlPVwiY29sb3I6Izk5MWIxYjtcIj5QZXJzdWFzaW9uIGNoZWNrczogJHt3YXJuaW5nQ291bnRzfTwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6YXV0bztjb2xvcjojN2YxZDFkO1wiPlx1MjVCQzwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJ3YXJuaW5ncy1kZXRhaWxcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTttYXJnaW4tdG9wOjEwcHg7cGFkZGluZy10b3A6MTBweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZmVjYWNhO1wiPlxuICAgICAgICAgICR7d2FybmluZ3MubWFwKHcgPT4gYFxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6OHB4O21hcmdpbi1ib3R0b206OHB4O2JhY2tncm91bmQ6I2ZmZjdlZDtib3JkZXItbGVmdDozcHggc29saWQgI2Y5NzMxNjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC45ZW07XCI+XG4gICAgICAgICAgICAgIDxzdHJvbmc+JHt3LmZsYWdfdHlwZS5yZXBsYWNlKC9fL2csICcgJyl9PC9zdHJvbmc+IGF0ICR7dy5sb2NhdGlvbn08YnI+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IzdjMmQxMjtcIj4ke3cuZGV0YWlsc308L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgKS5qb2luKCcnKX1cbiAgICAgICAgICA8YnV0dG9uIHN0eWxlPVwibWFyZ2luLXRvcDoxMHB4O3BhZGRpbmc6OHB4IDEycHg7YmFja2dyb3VuZDojOTkxYjFiO2NvbG9yOndoaXRlO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpwb2ludGVyO1wiIG9uY2xpY2s9XCJzZXRQZXJzdWFzaW9uV2FybmluZ3NBY2tub3dsZWRnZWQodHJ1ZSk7IHRoaXMucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAnMC42JzsgdXBkYXRlUmV3cml0ZVRhbGx5KCk7XCI+XG4gICAgICAgICAgICBcdTI3MTMgQWNrbm93bGVkZ2VkXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8vIENvbXB1dGUgcGVyLWNhcmQgY2hhbmdlIHN0YXR1cyByZWxhdGl2ZSB0byBwcmV2aW91cyByZW5kZXIncyBzbmFwc2hvdC5cbiAgY29uc3QgcHJldlNuYXBzaG90ID0gX2dldFJld3JpdGVTbmFwc2hvdCgpO1xuICBjb25zdCBjaGFuZ2VTdGF0dXNNYXAgPSB7fTtcbiAgaWYgKHByZXZTbmFwc2hvdCkge1xuICAgIGZvciAoY29uc3QgciBvZiByZXdyaXRlcykge1xuICAgICAgY29uc3QgY2FyZElkID0gU3RyaW5nKHIuaWQpLnJlcGxhY2UoL1teYS16QS1aMC05Xy1dL2csICdfJyk7XG4gICAgICBpZiAoIShjYXJkSWQgaW4gcHJldlNuYXBzaG90KSkge1xuICAgICAgICBjaGFuZ2VTdGF0dXNNYXBbY2FyZElkXSA9ICduZXcnO1xuICAgICAgfSBlbHNlIGlmIChwcmV2U25hcHNob3RbY2FyZElkXSAhPT0gKHIucHJvcG9zZWQgfHwgJycpKSB7XG4gICAgICAgIGNoYW5nZVN0YXR1c01hcFtjYXJkSWRdID0gJ3VwZGF0ZWQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBTYXZlIGN1cnJlbnQgcmV3cml0ZXMgYXMgc25hcHNob3QgZm9yIG5leHQgcmVuZGVyIGNvbXBhcmlzb24uXG4gIF9zYXZlUmV3cml0ZVNuYXBzaG90KHJld3JpdGVzKTtcblxuICBjb250ZW50LmlubmVySFRNTCA9IHdhcm5pbmdzSHRtbCArIGBcbiAgICA8ZGl2IGlkPVwicmV3cml0ZS1wYW5lbFwiPlxuICAgICAgPGgxPlx1MjcwRlx1RkUwRiBSZXZpZXcgVGV4dCBJbXByb3ZlbWVudHM8L2gxPlxuICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MjBweDtcIj5cbiAgICAgICAgJHtoYXNSZXdyaXRlc1xuICAgID8gJ1JldmlldyBlYWNoIHN1Z2dlc3RlZCB0ZXh0IGltcHJvdmVtZW50LiBBY2NlcHQsIGVkaXQsIG9yIHJlamVjdCBhbGwgc3VnZ2VzdGlvbnMgYmVmb3JlIHByb2NlZWRpbmcgdG8gc3BlbGwgY2hlY2suJ1xuICAgIDogJ05vIHRleHQgaW1wcm92ZW1lbnRzIHdlcmUgc3VnZ2VzdGVkIGZvciB0aGlzIENWLiBDb250aW51ZSB3aGVuIHlvdSBhcmUgcmVhZHkgdG8gbW92ZSB0byBzcGVsbCBjaGVjay4nfVxuICAgICAgPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cInJld3JpdGUtdGFsbHktYmFyXCIgaWQ9XCJyZXdyaXRlLXRhbGx5XCIgJHtoYXNSZXdyaXRlcyA/ICcnIDogJ3N0eWxlPVwiZGlzcGxheTpub25lXCInfT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWxseS1hY2NlcHRlZFwiPlx1MjcxMyBBY2NlcHRlZDogPHN0cm9uZyBpZD1cInRhbGx5LWFjY2VwdGVkXCI+MDwvc3Ryb25nPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWxseS1yZWplY3RlZFwiPlx1MjcxNyBSZWplY3RlZDogPHN0cm9uZyBpZD1cInRhbGx5LXJlamVjdGVkXCI+MDwvc3Ryb25nPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWxseS1wZW5kaW5nXCI+XHUyM0YzIFBlbmRpbmc6IDxzdHJvbmcgaWQ9XCJ0YWxseS1wZW5kaW5nXCI+JHtyZXdyaXRlcy5sZW5ndGh9PC9zdHJvbmc+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicnctYnVsay1idG5cIiBvbmNsaWNrPVwiYWNjZXB0QWxsUmV3cml0ZXMoKVwiIHRpdGxlPVwiQWNjZXB0IGFsbCBwZW5kaW5nIHN1Z2dlc3Rpb25zXCI+XHUyNzEzIEFjY2VwdCBBbGw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJ3LWJ1bGstYnRuIHJ3LWJ1bGstcmVqZWN0XCIgb25jbGljaz1cInJlamVjdEFsbFJld3JpdGVzKClcIiB0aXRsZT1cIlJlamVjdCBhbGwgcGVuZGluZyBzdWdnZXN0aW9uc1wiPlx1MjcxNyBSZWplY3QgQWxsPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJydy1jb21wYWN0LXRvZ2dsZVwiIGlkPVwicnctY29tcGFjdC1idG5cIiBvbmNsaWNrPVwidG9nZ2xlUmV3cml0ZUNvbXBhY3RNb2RlKClcIiB0aXRsZT1cIlN3aXRjaCB0byBjb21wYWN0IHNpbmdsZS1saW5lIHZpZXcgZm9yIHJhcGlkIHJldmlld1wiPlx1MjI5RSBDb21wYWN0PC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJzdWJtaXQtcmV3cml0ZXMtYnRuXCIgaWQ9XCJzdWJtaXQtcmV3cml0ZXMtYnRuXCIgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICBvbmNsaWNrPVwic3VibWl0UmV3cml0ZURlY2lzaW9ucygpXCI+U3VibWl0IEFsbCBEZWNpc2lvbnM8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cInJld3JpdGUtY2FyZHNcIj5cbiAgICAgICAgJHtoYXNSZXdyaXRlc1xuICAgID8gcmV3cml0ZXMubWFwKHIgPT4ge1xuICAgICAgICBjb25zdCBjYXJkSWQgPSBTdHJpbmcoci5pZCkucmVwbGFjZSgvW15hLXpBLVowLTlfLV0vZywgJ18nKTtcbiAgICAgICAgcmV0dXJuIHJlbmRlclJld3JpdGVDYXJkKHIsIF93YXJuaW5nc0J5UmV3cml0ZUlkW3IuaWRdIHx8IFtdLCBjaGFuZ2VTdGF0dXNNYXBbY2FyZElkXSB8fCBudWxsKTtcbiAgICAgIH0pLmpvaW4oJycpXG4gICAgOiBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjI0cHg7XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiPlx1MjcwRlx1RkUwRjwvZGl2PlxuICAgICAgICAgICAgPGgzPk5vIFJld3JpdGUgU3VnZ2VzdGlvbnM8L2gzPlxuICAgICAgICAgICAgPHA+VGhpcyBkcmFmdCBhbHJlYWR5IHBhc3NlcyB0aGUgcmV3cml0ZSBzdGFnZSB3aXRob3V0IHN1Z2dlc3RlZCB3b3JkaW5nIGNoYW5nZXMuPC9wPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInN1Ym1pdC1idG5cIiBpZD1cInN1Ym1pdC1yZXdyaXRlcy1idG5cIiBvbmNsaWNrPVwic3VibWl0UmV3cml0ZURlY2lzaW9ucygpXCI+Q29udGludWUgdG8gU3BlbGwgQ2hlY2s8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgYH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgICR7X3JlbmRlclJld3JpdGVBdWRpdExvZygpfVxuICBgO1xuXG4gIC8vIFJlc3RvcmUgZGVjaXNpb25zIHBlcnNpc3RlZCBmcm9tIGEgcHJldmlvdXMgcGFnZSBsb2FkIChHQVAtMTY2KS5cbiAgX3Jlc3RvcmVEZWNpc2lvbnMoKTtcbiAgLy8gUmUtYXBwbHkgYW55IGRlY2lzaW9ucyBtYWRlIGJlZm9yZSB0aGUgbGFzdCB0YWIgbmF2aWdhdGlvbi5cbiAgaWYgKE9iamVjdC5rZXlzKHJld3JpdGVEZWNpc2lvbnMpLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgZGVjXSBvZiBPYmplY3QuZW50cmllcyhyZXdyaXRlRGVjaXNpb25zKSkge1xuICAgICAgaWYgKCFkZWMgfHwgIWRlYy5vdXRjb21lKSBjb250aW51ZTtcbiAgICAgIGlmIChkZWMub3V0Y29tZSA9PT0gJ2VkaXQnICYmIGRlYy5maW5hbF90ZXh0ICE9IG51bGwpIHtcbiAgICAgICAgLy8gRW50ZXIgZWRpdCBtb2RlLCBpbmplY3QgdGhlIHNhdmVkIHRleHQsIHRoZW4gc2F2ZSBzbyB0aGUgY2FyZFxuICAgICAgICAvLyBzaG93cyBhcyBhY2NlcHRlZCB3aXRoIHRoZSBjb3JyZWN0IGRpZmYgcmVuZGVyZWQuXG4gICAgICAgIGFwcGx5UmV3cml0ZUFjdGlvbihpZCwgJ2VkaXQnKTtcbiAgICAgICAgY29uc3QgdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcnctdGV4dGFyZWEtJHtpZH1gKTtcbiAgICAgICAgaWYgKHRhKSB7XG4gICAgICAgICAgdGEudmFsdWUgPSBkZWMuZmluYWxfdGV4dDtcbiAgICAgICAgICBzYXZlUmV3cml0ZUVkaXQoaWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcHBseVJld3JpdGVBY3Rpb24oaWQsIGRlYy5vdXRjb21lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlUmV3cml0ZVRhbGx5KCk7XG4gIH1cbn1cblxuLyoqXG4gKiBjb21wdXRlV29yZERpZmYob3JpZ2luYWwsIHByb3Bvc2VkKSBcdTIwMTQgTENTIHdvcmQtbGV2ZWwgZGlmZi5cbiAqXG4gKiBUb2tlbmlzZXMgYm90aCBzdHJpbmdzIGJ5IHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlIGJvdW5kYXJpZXMgd2hpbGVcbiAqIHByZXNlcnZpbmcgdGhlIHdoaXRlc3BhY2UgdG9rZW5zIHNvIHRoZSByZW5kZXJlZCBkaWZmIGhhcyB0aGUgc2FtZVxuICogc3BhY2luZyBhcyB0aGUgc291cmNlIHRleHQuICBSZXR1cm5zIGFuIGFycmF5IG9mXG4gKiB7dG9rZW46IHN0cmluZywgdHlwZTogJ3VuY2hhbmdlZCd8J3JlbW92ZWQnfCdhZGRlZCd9LlxuICovXG5mdW5jdGlvbiBjb21wdXRlV29yZERpZmYob3JpZ2luYWwsIHByb3Bvc2VkKSB7XG4gIC8vIFNwbGl0IG9uIHdoaXRlc3BhY2UgYnV0IGtlZXAgdGhlIHNlcGFyYXRvcnMgYXMgdG9rZW5zLlxuICBmdW5jdGlvbiB0b2tlbml6ZShzdHIpIHsgcmV0dXJuIChzdHIgfHwgJycpLnNwbGl0KC8oXFxzKykvKTsgfVxuXG4gIGNvbnN0IGEgPSB0b2tlbml6ZShvcmlnaW5hbCk7XG4gIGNvbnN0IGIgPSB0b2tlbml6ZShwcm9wb3NlZCk7XG4gIGNvbnN0IG0gPSBhLmxlbmd0aDtcbiAgY29uc3QgbiA9IGIubGVuZ3RoO1xuXG4gIC8vIEJ1aWxkIExDUyBEUCB0YWJsZSAoTyhtKm4pIFx1MjAxNCBhY2NlcHRhYmxlIGZvciBDViBidWxsZXQgbGVuZ3RocykuXG4gIGNvbnN0IGRwID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiBtICsgMX0sICgpID0+IG5ldyBBcnJheShuICsgMSkuZmlsbCgwKSk7XG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xuICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xuICAgICAgZHBbaV1bal0gPSBhW2kgLSAxXSA9PT0gYltqIC0gMV1cbiAgICAgICAgPyBkcFtpIC0gMV1baiAtIDFdICsgMVxuICAgICAgICA6IE1hdGgubWF4KGRwW2kgLSAxXVtqXSwgZHBbaV1baiAtIDFdKTtcbiAgICB9XG4gIH1cblxuICAvLyBCYWNrdHJhY2sgdG8gcHJvZHVjZSB0aGUgZGlmZiBzZXF1ZW5jZS5cbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGxldCBpID0gbSwgaiA9IG47XG4gIHdoaWxlIChpID4gMCB8fCBqID4gMCkge1xuICAgIGlmIChpID4gMCAmJiBqID4gMCAmJiBhW2kgLSAxXSA9PT0gYltqIC0gMV0pIHtcbiAgICAgIHJlc3VsdC51bnNoaWZ0KHt0b2tlbjogYVtpIC0gMV0sIHR5cGU6ICd1bmNoYW5nZWQnfSk7XG4gICAgICBpLS07IGotLTtcbiAgICB9IGVsc2UgaWYgKGogPiAwICYmIChpID09PSAwIHx8IGRwW2ldW2ogLSAxXSA+PSBkcFtpIC0gMV1bal0pKSB7XG4gICAgICByZXN1bHQudW5zaGlmdCh7dG9rZW46IGJbaiAtIDFdLCB0eXBlOiAnYWRkZWQnfSk7XG4gICAgICBqLS07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC51bnNoaWZ0KHt0b2tlbjogYVtpIC0gMV0sIHR5cGU6ICdyZW1vdmVkJ30pO1xuICAgICAgaS0tO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogUmVuZGVyIGEge3Rva2VuLCB0eXBlfSBkaWZmIGFycmF5IGludG8gYW4gSFRNTCBzdHJpbmcuICovXG5mdW5jdGlvbiByZW5kZXJEaWZmSHRtbCh0b2tlbnMpIHtcbiAgcmV0dXJuIHRva2Vucy5tYXAodCA9PiB7XG4gICAgaWYgKHQudHlwZSA9PT0gJ3JlbW92ZWQnKSByZXR1cm4gYDxkZWwgY2xhc3M9XCJkaWZmLXJlbW92ZWRcIj4ke2VzY2FwZUh0bWwodC50b2tlbil9PC9kZWw+YDtcbiAgICBpZiAodC50eXBlID09PSAnYWRkZWQnKSAgIHJldHVybiBgPGlucyBjbGFzcz1cImRpZmYtYWRkZWRcIj4ke2VzY2FwZUh0bWwodC50b2tlbil9PC9pbnM+YDtcbiAgICByZXR1cm4gZXNjYXBlSHRtbCh0LnRva2VuKTtcbiAgfSkuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJld3JpdGVDYXJkKHIsIGNhcmRXYXJuaW5ncyA9IFtdLCBjaGFuZ2VTdGF0dXMgPSBudWxsKSB7XG4gIGNvbnN0IGlzV2Vha1NraWxsQWRkID0gci50eXBlID09PSAnc2tpbGxfYWRkJyAmJiByLmV2aWRlbmNlX3N0cmVuZ3RoID09PSAnd2Vhayc7XG4gIGNvbnN0IHdlYWtCYWRnZSAgICAgPSBpc1dlYWtTa2lsbEFkZFxuICAgID8gYDxzcGFuIGNsYXNzPVwid2Vhay1iYWRnZVwiPlx1MjZBMCBDYW5kaWRhdGUgdG8gY29uZmlybTwvc3Bhbj5gXG4gICAgOiAnJztcbiAgY29uc3QgY2hhbmdlQmFkZ2UgICA9IGNoYW5nZVN0YXR1cyA9PT0gJ25ldydcbiAgICA/IGA8c3BhbiBjbGFzcz1cInJ3LWNoYW5nZS1iYWRnZSBydy1jaGFuZ2UtbmV3XCIgYXJpYS1sYWJlbD1cIk5ldyBzdWdnZXN0aW9uIG5vdCBpbiBwcmV2aW91cyBydW5cIj5cdUQ4M0NcdUREOTUgTmV3PC9zcGFuPmBcbiAgICA6IGNoYW5nZVN0YXR1cyA9PT0gJ3VwZGF0ZWQnXG4gICAgICA/IGA8c3BhbiBjbGFzcz1cInJ3LWNoYW5nZS1iYWRnZSBydy1jaGFuZ2UtdXBkYXRlZFwiIGFyaWEtbGFiZWw9XCJTdWdnZXN0aW9uIGNoYW5nZWQgc2luY2UgcHJldmlvdXMgcnVuXCI+XHUyMUJCIFVwZGF0ZWQ8L3NwYW4+YFxuICAgICAgOiAnJztcbiAgLy8gS2V5d29yZCBwaWxscyB3aXRoIHBvc2l0aW9uLWJhc2VkIHJhbmsgYmFkZ2UgKCMxLCAjMiwgXHUyMDI2KVxuICBjb25zdCBrZXl3b3JkUGlsbHMgID0gKHIua2V5d29yZHNfaW50cm9kdWNlZCB8fCBbXSlcbiAgICAubWFwKChrLCBpZHgpID0+IGA8c3BhbiBjbGFzcz1cInJld3JpdGUta2V5d29yZFwiPjxzcGFuIGNsYXNzPVwia3ctcmFua1wiPiMke2lkeCArIDF9PC9zcGFuPiR7ZXNjYXBlSHRtbChrKX08L3NwYW4+YClcbiAgICAuam9pbignJyk7XG4gIGNvbnN0IHR5cGVMYWJlbCA9IChyLnR5cGUgfHwgJ3Jld3JpdGUnKS5yZXBsYWNlKC9fL2csICcgJyk7XG4gIC8vIFNhbml0aXplIElEOiBrZWVwIG9ubHkgYWxwaGFudW1lcmljLCB1bmRlcnNjb3JlLCBhbmQgaHlwaGVuIHNvIGl0IGlzXG4gIC8vIHNhZmUgYXMgYm90aCBhbiBIVE1MIGF0dHJpYnV0ZSB2YWx1ZSBhbmQgYSBKUyBzdHJpbmcgbGl0ZXJhbCBpbiBvbmNsaWNrLlxuICBjb25zdCBjYXJkSWQgICAgPSBTdHJpbmcoci5pZCkucmVwbGFjZSgvW15hLXpBLVowLTlfLV0vZywgJ18nKTtcblxuICAvLyBDb21wdXRlIHdvcmQtbGV2ZWwgZGlmZiBmb3IgdGhlIGlubGluZSBkaXNwbGF5LlxuICBjb25zdCBkaWZmVG9rZW5zID0gY29tcHV0ZVdvcmREaWZmKHIub3JpZ2luYWwgfHwgJycsIHIucHJvcG9zZWQgfHwgJycpO1xuICBjb25zdCBkaWZmSHRtbCAgID0gcmVuZGVyRGlmZkh0bWwoZGlmZlRva2Vucyk7XG5cbiAgcmV0dXJuIGBcbiAgICA8ZGl2IGNsYXNzPVwicmV3cml0ZS1jYXJkXCIgaWQ9XCJydy1jYXJkLSR7Y2FyZElkfVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJld3JpdGUtY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXdyaXRlLWNhcmQtdHlwZVwiPiR7ZXNjYXBlSHRtbCh0eXBlTGFiZWwpfTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXdyaXRlLWNhcmQtdGl0bGVcIj4ke2VzY2FwZUh0bWwoci5sb2NhdGlvbiB8fCByLmlkKX08L3NwYW4+XG4gICAgICAgICR7d2Vha0JhZGdlfSR7Y2hhbmdlQmFkZ2V9XG4gICAgICAgIDxzcGFuIGlkPVwicnctZGVjaXNpb24tYmFkZ2UtJHtjYXJkSWR9XCIgYXJpYS1saXZlPVwicG9saXRlXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7Zm9udC1zaXplOjAuNzhlbTtmb250LXdlaWdodDo2MDA7cGFkZGluZzoxcHggN3B4O2JvcmRlci1yYWRpdXM6OXB4O21hcmdpbi1sZWZ0OmF1dG87XCI+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmV3cml0ZS1jYXJkLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJld3JpdGUtaW5saW5lLWRpZmZcIiBpZD1cInJ3LWRpZmYtJHtjYXJkSWR9XCJcbiAgICAgICAgICAgICBkYXRhLW9yaWdpbmFsPVwiJHtlc2NhcGVIdG1sKHIub3JpZ2luYWwgfHwgJycpfVwiPiR7ZGlmZkh0bWx9PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXdyaXRlLWFmdGVyXCIgaWQ9XCJydy1hZnRlci0ke2NhcmRJZH1cIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPlxuICAgICAgICAgIDxzcGFuIGlkPVwicnctYWZ0ZXItdGV4dC0ke2NhcmRJZH1cIj4ke2VzY2FwZUh0bWwoci5wcm9wb3NlZCB8fCAnJyl9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgJHtrZXl3b3JkUGlsbHMgPyBgPGRpdiBjbGFzcz1cInJld3JpdGUta2V5d29yZHNcIj4ke2tleXdvcmRQaWxsc308L2Rpdj5gIDogJyd9XG4gICAgICAgICR7ci5yYXRpb25hbGUgPyBgXG4gICAgICAgIDxkZXRhaWxzIGNsYXNzPVwicmV3cml0ZS1yYXRpb25hbGVcIj5cbiAgICAgICAgICA8c3VtbWFyeT5SYXRpb25hbGUgJmFtcDsgRXZpZGVuY2U8L3N1bW1hcnk+XG4gICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW46NnB4IDAgMDtcIj4ke2VzY2FwZUh0bWwoci5yYXRpb25hbGUpfTwvcD5cbiAgICAgICAgICAke3IuZXZpZGVuY2UgPyBgPHAgc3R5bGU9XCJjb2xvcjojOWNhM2FmO2ZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luOjRweCAwIDA7XCI+JHtlc2NhcGVIdG1sKHIuZXZpZGVuY2UpfTwvcD5gIDogJyd9XG4gICAgICAgIDwvZGV0YWlscz5gIDogJyd9XG4gICAgICAgICR7Y2FyZFdhcm5pbmdzLmxlbmd0aCA+IDAgPyBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXdyaXRlLXBlcnN1YXNpb24tYmFkZ2VzXCI+XG4gICAgICAgICAgJHtjYXJkV2FybmluZ3MubWFwKHcgPT4gYDxzcGFuIGNsYXNzPVwicGVyc3Vhc2lvbi1iYWRnZSBwZXJzdWFzaW9uLWJhZGdlLS0ke3cuc2V2ZXJpdHl9XCIgdGl0bGU9XCIke2VzY2FwZUh0bWwody5kZXRhaWxzKX1cIj5cdTI2QTAgJHtlc2NhcGVIdG1sKHcuZmxhZ190eXBlLnJlcGxhY2UoL18vZywgJyAnKSl9PC9zcGFuPmApLmpvaW4oJycpfVxuICAgICAgICA8L2Rpdj5gIDogJyd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXdyaXRlLWFjdGlvbnNcIj5cbiAgICAgICAgICA8YSBjbGFzcz1cInJ3LWJhY2stbGlua1wiIGhyZWY9XCIjXCIgb25jbGljaz1cImV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHN3aXRjaFRhYignY3VzdG9taXphdGlvbnMnKVwiIHRpdGxlPVwiR28gYmFjayB0byBDdXN0b21pc2UgdG8gcmVjb25zaWRlciB3aGV0aGVyIHRvIGluY2x1ZGUgdGhpcyBjb250ZW50XCI+XHUyMUE5IFJlY29uc2lkZXIgaW5jbHVzaW9uPC9hPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJydy1idG4gYWNjZXB0XCIgaWQ9XCJydy1hY2NlcHQtJHtjYXJkSWR9XCIgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIiBvbmNsaWNrPVwiYXBwbHlSZXdyaXRlQWN0aW9uKCcke2NhcmRJZH0nLCAnYWNjZXB0JylcIj5cdTI3MTMgQWNjZXB0PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJ3LWJ0biBlZGl0XCIgICBpZD1cInJ3LWVkaXQtJHtjYXJkSWR9XCIgICBhcmlhLXByZXNzZWQ9XCJmYWxzZVwiIG9uY2xpY2s9XCJhcHBseVJld3JpdGVBY3Rpb24oJyR7Y2FyZElkfScsICdlZGl0JylcIj5cdTI3MEUgRWRpdDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJydy1idG4gcmVqZWN0XCIgaWQ9XCJydy1yZWplY3QtJHtjYXJkSWR9XCIgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIiBvbmNsaWNrPVwiYXBwbHlSZXdyaXRlQWN0aW9uKCcke2NhcmRJZH0nLCAncmVqZWN0JylcIj5cdTI3MTcgUmVqZWN0PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gYXBwbHlSZXdyaXRlQWN0aW9uKGlkLCBvdXRjb21lKSB7XG4gIGNvbnN0IGNhcmQgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcnctY2FyZC0ke2lkfWApO1xuICBjb25zdCBhZnRlckVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHJ3LWFmdGVyLSR7aWR9YCk7XG4gIGNvbnN0IGRpZmZFbCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcnctZGlmZi0ke2lkfWApO1xuICBpZiAoIWNhcmQgfHwgIWFmdGVyRWwpIHJldHVybjtcblxuICAvLyBDbGVhciBhbnkgcHJldmlvdXMgb3V0Y29tZSBzdHlsaW5nXG4gIGNhcmQuY2xhc3NMaXN0LnJlbW92ZSgnYWNjZXB0ZWQnLCAncmVqZWN0ZWQnKTtcbiAgWydhY2NlcHQnLCAnZWRpdCcsICdyZWplY3QnXS5mb3JFYWNoKGEgPT4ge1xuICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBydy0ke2F9LSR7aWR9YCk7XG4gICAgYnRuPy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICBpZiAoYnRuKSBidG4uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAnZmFsc2UnKTtcbiAgfSk7XG4gIGNvbnN0IF9kZWNpc2lvbkJhZGdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHJ3LWRlY2lzaW9uLWJhZGdlLSR7aWR9YCk7XG4gIGlmIChfZGVjaXNpb25CYWRnZSkgX2RlY2lzaW9uQmFkZ2Uuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICBpZiAob3V0Y29tZSA9PT0gJ2VkaXQnKSB7XG4gICAgLy8gS2VlcCB0aGUgaW5saW5lIGRpZmYgdmlzaWJsZSBhcyBhIHJlZmVyZW5jZTsgc2hvdyB0aGUgZWRpdGFibGUgdGV4dGFyZWEgYmVsb3cgaXQuXG4gICAgY29uc3QgY3VycmVudFRleHQgPSBhZnRlckVsLnF1ZXJ5U2VsZWN0b3IoYCNydy1hZnRlci10ZXh0LSR7aWR9YCk/LnRleHRDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICA/PyByZXdyaXRlRGVjaXNpb25zW2lkXT8uZmluYWxfdGV4dFxuICAgICAgICAgICAgICAgICAgICAgPz8gJyc7XG4gICAgaWYgKGRpZmZFbCkge1xuICAgICAgZGlmZkVsLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIGRpZmZFbC5zdHlsZS5vcGFjaXR5ID0gJzAuNTUnO1xuICAgICAgZGlmZkVsLnN0eWxlLmJvcmRlckxlZnQgPSAnM3B4IHNvbGlkICM5M2M1ZmQnO1xuICAgIH1cbiAgICBhZnRlckVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIGFmdGVyRWwuaW5uZXJIVE1MID0gYFxuICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjc4ZW07Y29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjRweDtcIj5cdTI3MEUgWW91ciBlZGl0IChBSSBzdWdnZXN0aW9uIHNob3duIGFib3ZlIGZvciByZWZlcmVuY2UpOjwvZGl2PlxuICAgICAgPHRleHRhcmVhIGlkPVwicnctdGV4dGFyZWEtJHtpZH1cIj4ke2VzY2FwZUh0bWwoY3VycmVudFRleHQpfTwvdGV4dGFyZWE+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwicnctc2F2ZS1lZGl0LWJ0blwiIHN0eWxlPVwibWFyZ2luLXRvcDo2cHhcIlxuICAgICAgICAgICAgICBvbmNsaWNrPVwic2F2ZVJld3JpdGVFZGl0KCcke2lkfScpXCI+U2F2ZTwvYnV0dG9uPlxuICAgIGA7XG4gICAgY29uc3QgZWRpdEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBydy1lZGl0LSR7aWR9YCk7XG4gICAgZWRpdEJ0bj8uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgaWYgKGVkaXRCdG4pIGVkaXRCdG4uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAndHJ1ZScpO1xuICAgIC8vIERlY2lzaW9uIGlzIHJlY29yZGVkIG9ubHkgd2hlbiB0aGUgdXNlciBjbGlja3MgU2F2ZVxuICB9IGVsc2Uge1xuICAgIC8vIFJlc3RvcmUgdGhlIGFmdGVyLXRleHQgc3BhbiBpZiB3ZSBwcmV2aW91c2x5IGVudGVyZWQgZWRpdCBtb2RlXG4gICAgY29uc3QgdGV4dGFyZWEgPSBhZnRlckVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk7XG4gICAgaWYgKHRleHRhcmVhKSB7XG4gICAgICBjb25zdCB0eHQgPSB0ZXh0YXJlYS52YWx1ZTtcbiAgICAgIGFmdGVyRWwuaW5uZXJIVE1MID0gYDxzcGFuIGlkPVwicnctYWZ0ZXItdGV4dC0ke2lkfVwiPiR7ZXNjYXBlSHRtbCh0eHQpfTwvc3Bhbj5gO1xuICAgIH1cbiAgICAvLyBSZS1zaG93IHRoZSBpbmxpbmUgZGlmZiBwYW5lbCBhdCBmdWxsIG9wYWNpdHk7IGhpZGUgdGhlIGVkaXQgYXJlYS5cbiAgICBpZiAoZGlmZkVsKSB7IGRpZmZFbC5zdHlsZS5kaXNwbGF5ID0gJyc7IGRpZmZFbC5zdHlsZS5vcGFjaXR5ID0gJyc7IGRpZmZFbC5zdHlsZS5ib3JkZXJMZWZ0ID0gJyc7IH1cbiAgICBhZnRlckVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICByZXdyaXRlRGVjaXNpb25zW2lkXSA9IHsgb3V0Y29tZSwgZmluYWxfdGV4dDogbnVsbCB9O1xuICAgIF9wZXJzaXN0RGVjaXNpb25zKCk7XG4gICAgY2FyZC5jbGFzc0xpc3QuYWRkKG91dGNvbWUgPT09ICdhY2NlcHQnID8gJ2FjY2VwdGVkJyA6ICdyZWplY3RlZCcpO1xuICAgIGNvbnN0IGFjdGl2ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBydy0ke291dGNvbWV9LSR7aWR9YCk7XG4gICAgYWN0aXZlQnRuPy5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICBpZiAoYWN0aXZlQnRuKSBhY3RpdmVCdG4uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAndHJ1ZScpO1xuICAgIGNvbnN0IGRlY0JhZGdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHJ3LWRlY2lzaW9uLWJhZGdlLSR7aWR9YCk7XG4gICAgaWYgKGRlY0JhZGdlKSB7XG4gICAgICBkZWNCYWRnZS50ZXh0Q29udGVudCA9IG91dGNvbWUgPT09ICdhY2NlcHQnID8gJ1x1MjcxMyBBY2NlcHRlZCcgOiAnXHUyNzE3IFJlamVjdGVkJztcbiAgICAgIGRlY0JhZGdlLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIGRlY0JhZGdlLnN0eWxlLmJhY2tncm91bmQgPSBvdXRjb21lID09PSAnYWNjZXB0JyA/ICcjYmJmN2QwJyA6ICcjZmVjYWNhJztcbiAgICAgIGRlY0JhZGdlLnN0eWxlLmNvbG9yICAgICAgPSBvdXRjb21lID09PSAnYWNjZXB0JyA/ICcjMDY1ZjQ2JyA6ICcjOTkxYjFiJztcbiAgICB9XG4gICAgc3luY1Jld3JpdGVHbG9iYWxzKCk7XG4gICAgdXBkYXRlUmV3cml0ZVRhbGx5KCk7XG4gICAgX3Njcm9sbFRvTmV4dFBlbmRpbmdSZXdyaXRlKGlkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfc2Nyb2xsVG9OZXh0UGVuZGluZ1Jld3JpdGUoYWZ0ZXJJZCkge1xuICBjb25zdCBhbGxDYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49XCJydy1jYXJkLVwiXScpO1xuICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBjYXJkIG9mIGFsbENhcmRzKSB7XG4gICAgY29uc3QgaWQgPSBjYXJkLmlkLnJlcGxhY2UoJ3J3LWNhcmQtJywgJycpO1xuICAgIGlmIChpZCA9PT0gYWZ0ZXJJZCkgeyBmb3VuZCA9IHRydWU7IGNvbnRpbnVlOyB9XG4gICAgaWYgKCFmb3VuZCkgY29udGludWU7XG4gICAgaWYgKCFyZXdyaXRlRGVjaXNpb25zW2lkXSkge1xuICAgICAgY2FyZC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYXZlUmV3cml0ZUVkaXQoaWQpIHtcbiAgY29uc3QgdGV4dGFyZWEgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBydy10ZXh0YXJlYS0ke2lkfWApO1xuICBjb25zdCBlZGl0ZWRUZXh0ID0gdGV4dGFyZWEgPyB0ZXh0YXJlYS52YWx1ZSA6ICcnO1xuICBjb25zdCBhZnRlckVsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHJ3LWFmdGVyLSR7aWR9YCk7XG4gIGNvbnN0IGRpZmZFbCAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcnctZGlmZi0ke2lkfWApO1xuICBjb25zdCBjYXJkICAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHJ3LWNhcmQtJHtpZH1gKTtcbiAgaWYgKCFhZnRlckVsIHx8ICFjYXJkKSByZXR1cm47XG5cbiAgLy8gUmVwbGFjZSB0ZXh0YXJlYSB3aXRoIGZpbmFsIHNwYW4gKGhpZGRlbiBcdTIwMTQgcHJlc2VydmVzIHRleHQgZm9yIGZ1dHVyZSBlZGl0cykuXG4gIGFmdGVyRWwuaW5uZXJIVE1MID0gYDxzcGFuIGlkPVwicnctYWZ0ZXItdGV4dC0ke2lkfVwiPiR7ZXNjYXBlSHRtbChlZGl0ZWRUZXh0KX08L3NwYW4+YDtcbiAgYWZ0ZXJFbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gIC8vIFJlZ2VuZXJhdGUgdGhlIGlubGluZSBkaWZmIGFnYWluc3QgdGhlIG9yaWdpbmFsIHRleHQgYW5kIHJlLXNob3cgaXQgKGZ1bGwgb3BhY2l0eSkuXG4gIGlmIChkaWZmRWwpIHtcbiAgICBjb25zdCBvcmlnaW5hbCA9IGRpZmZFbC5kYXRhc2V0Lm9yaWdpbmFsIHx8ICcnO1xuICAgIGRpZmZFbC5pbm5lckhUTUwgPSByZW5kZXJEaWZmSHRtbChjb21wdXRlV29yZERpZmYob3JpZ2luYWwsIGVkaXRlZFRleHQpKTtcbiAgICBkaWZmRWwuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIGRpZmZFbC5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgZGlmZkVsLnN0eWxlLmJvcmRlckxlZnQgPSAnJztcbiAgfVxuXG4gIHJld3JpdGVEZWNpc2lvbnNbaWRdID0geyBvdXRjb21lOiAnZWRpdCcsIGZpbmFsX3RleHQ6IGVkaXRlZFRleHQgfTtcbiAgX3BlcnNpc3REZWNpc2lvbnMoKTtcbiAgY2FyZC5jbGFzc0xpc3QucmVtb3ZlKCdyZWplY3RlZCcpO1xuICBjYXJkLmNsYXNzTGlzdC5hZGQoJ2FjY2VwdGVkJyk7XG4gIFsnYWNjZXB0JywgJ3JlamVjdCddLmZvckVhY2goYSA9PiB7XG4gICAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHJ3LSR7YX0tJHtpZH1gKTtcbiAgICBidG4/LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuICAgIGlmIChidG4pIGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICdmYWxzZScpO1xuICB9KTtcbiAgY29uc3Qgc2F2ZUVkaXRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcnctZWRpdC0ke2lkfWApO1xuICBzYXZlRWRpdEJ0bj8uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gIGlmIChzYXZlRWRpdEJ0bikgc2F2ZUVkaXRCdG4uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAndHJ1ZScpO1xuICBjb25zdCBlZGl0RGVjQmFkZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcnctZGVjaXNpb24tYmFkZ2UtJHtpZH1gKTtcbiAgaWYgKGVkaXREZWNCYWRnZSkge1xuICAgIGVkaXREZWNCYWRnZS50ZXh0Q29udGVudCA9ICdcdTI3MTMgQWNjZXB0ZWQgKGVkaXRlZCknO1xuICAgIGVkaXREZWNCYWRnZS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgZWRpdERlY0JhZGdlLnN0eWxlLmJhY2tncm91bmQgPSAnI2JiZjdkMCc7XG4gICAgZWRpdERlY0JhZGdlLnN0eWxlLmNvbG9yICAgICAgPSAnIzA2NWY0Nic7XG4gIH1cbiAgc3luY1Jld3JpdGVHbG9iYWxzKCk7XG4gIHVwZGF0ZVJld3JpdGVUYWxseSgpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZXdyaXRlVGFsbHkoKSB7XG4gIGNvbnN0IGNhcmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJld3JpdGUtY2FyZCcpO1xuICBsZXQgYWNjZXB0ZWQgPSAwLCByZWplY3RlZCA9IDAsIHBlbmRpbmcgPSAwO1xuICBjYXJkcy5mb3JFYWNoKGNhcmQgPT4ge1xuICAgIGNvbnN0IGlkICA9IGNhcmQuaWQucmVwbGFjZSgncnctY2FyZC0nLCAnJyk7XG4gICAgY29uc3QgZGVjID0gcmV3cml0ZURlY2lzaW9uc1tpZF07XG4gICAgaWYgICAgICAoIWRlYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZysrO1xuICAgIGVsc2UgaWYgKGRlYy5vdXRjb21lID09PSAnYWNjZXB0JyB8fCBkZWMub3V0Y29tZSA9PT0gJ2VkaXQnKSBhY2NlcHRlZCsrO1xuICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdGVkKys7XG4gIH0pO1xuXG4gIGNvbnN0IGFjY2VwdGVkRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFsbHktYWNjZXB0ZWQnKTtcbiAgY29uc3QgcmVqZWN0ZWRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWxseS1yZWplY3RlZCcpO1xuICBjb25zdCBwZW5kaW5nRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFsbHktcGVuZGluZycpO1xuXG4gIGlmIChhY2NlcHRlZEVsKSBhY2NlcHRlZEVsLnRleHRDb250ZW50ID0gYWNjZXB0ZWQ7XG4gIGlmIChyZWplY3RlZEVsKSByZWplY3RlZEVsLnRleHRDb250ZW50ID0gcmVqZWN0ZWQ7XG4gIGlmIChwZW5kaW5nRWwpIHBlbmRpbmdFbC50ZXh0Q29udGVudCAgPSBwZW5kaW5nO1xuXG4gIGNvbnN0IHN1Ym1pdEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJtaXQtcmV3cml0ZXMtYnRuJyk7XG4gIGlmIChzdWJtaXRCdG4pIHtcbiAgICBjb25zdCBuZWVkc0FjayA9ICFwZXJzdWFzaW9uV2FybmluZ3NBY2tub3dsZWRnZWQ7XG4gICAgc3VibWl0QnRuLmRpc2FibGVkID0gKHBlbmRpbmcgPiAwKSB8fCBuZWVkc0FjaztcbiAgICBzdWJtaXRCdG4udGl0bGUgPSBuZWVkc0Fja1xuICAgICAgPyAnQWNrbm93bGVkZ2UgdGhlIHBlcnN1YXNpb24gd2FybmluZ3MgYWJvdmUgYmVmb3JlIHN1Ym1pdHRpbmcnXG4gICAgICA6ICcnO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFJld3JpdGVEZWNpc2lvbnMoKSB7XG4gIGlmICghcGVyc3Vhc2lvbldhcm5pbmdzQWNrbm93bGVkZ2VkKSB7XG4gICAgY29uc3QgcHJvY2VlZCA9IGF3YWl0IHNob3dDb25maXJtTW9kYWwoXG4gICAgICAnXHUyNkEwXHVGRTBGIFBlcnN1YXNpb24gQ2hlY2tzJyxcbiAgICAgICdUaGVyZSBhcmUgdW5hY2tub3dsZWRnZWQgcGVyc3Vhc2lvbiB3YXJuaW5ncy4gSXQgaXMgcmVjb21tZW5kZWQgeW91IHJldmlldyBhbmQgYWNrbm93bGVkZ2UgdGhlbSBmaXJzdC5cXG5cXG5Qcm9jZWVkIGFueXdheT8nLFxuICAgICAgJ1N1Ym1pdCBBbnl3YXknXG4gICAgKTtcbiAgICBpZiAoIXByb2NlZWQpIHJldHVybjtcbiAgfVxuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogcmV3cml0ZV91aV9zdWJtaXRfbGl2ZVxuICAgKiAgIGtpbmQ6IHVpXG4gICAqICAgdGltZXN0YW1wOiAnMjAyNi0wMy0yNVQyMTozOTo0OFonXG4gICAqICAgc3RhdHVzOiBsaXZlXG4gICAqICAgaGFuZGxlczpcbiAgICogICAtIHVpOnJld3JpdGUtcmV2aWV3LnN1Ym1pdFxuICAgKiAgIGNhbGxzOlxuICAgKiAgIC0gUE9TVCAvYXBpL3Jld3JpdGVzL2FwcHJvdmVcbiAgICogICAtIFBPU1QgL2FwaS9jdi9sYXlvdXQtZXN0aW1hdGVcbiAgICogICByZWFkczpcbiAgICogICAtIHdpbmRvdzpyZXdyaXRlRGVjaXNpb25zXG4gICAqICAgd3JpdGVzOlxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvcmV3cml0ZXMvYXBwcm92ZS5kZWNpc2lvbnNcbiAgICogICBub3RlczogU3VibWl0cyB0aGUgZmluYWwgcGVyLXJld3JpdGUgb3V0Y29tZXMgYW5kIGVkaXRlZCB0ZXh0IHNvIGJhY2tlbmQgc3RhdGUgY2FuIHBlcnNpc3QgYXBwcm92ZWQgcmV3cml0ZXMgYW5kIHRoZSBmdWxsIHJld3JpdGUgYXVkaXQgYmVmb3JlIHNwZWxsLWNoZWNrLlxuICAgKi9cbiAgY29uc3QgZGVjaXNpb25zID0gT2JqZWN0LmVudHJpZXMocmV3cml0ZURlY2lzaW9ucykubWFwKChbaWQsIGRlY10pID0+ICh7XG4gICAgaWQsXG4gICAgb3V0Y29tZTogICAgZGVjLm91dGNvbWUsXG4gICAgZmluYWxfdGV4dDogZGVjLmZpbmFsX3RleHQgPz8gbnVsbFxuICB9KSk7XG5cbiAgY29uc3QgbG9hZGluZ01zZyA9IGFwcGVuZExvYWRpbmdNZXNzYWdlKCdTdWJtaXR0aW5nIHJld3JpdGUgZGVjaXNpb25zLi4uJyk7XG4gIHNldExvYWRpbmcodHJ1ZSwgJ1N1Ym1pdHRpbmcgcmV3cml0ZSBkZWNpc2lvbnNcdTIwMjYnKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXdyaXRlcy9hcHByb3ZlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZGVjaXNpb25zIH0pXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgcmVtb3ZlTG9hZGluZ01lc3NhZ2UobG9hZGluZ01zZyk7XG4gICAgc2V0TG9hZGluZyhmYWxzZSk7XG5cbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI3NEMgRXJyb3I6ICcgKyAoZGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIHN1Ym1pdCByZXdyaXRlIGRlY2lzaW9ucycpLCBzdWJtaXRSZXdyaXRlRGVjaXNpb25zKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NlcHRlZCA9IGRhdGEuYXBwcm92ZWRfY291bnQgfHwgMDtcbiAgICBjb25zdCByZWplY3RlZCA9IGRhdGEucmVqZWN0ZWRfY291bnQgfHwgMDtcbiAgICBzdGF0ZU1hbmFnZXIubWFya0NvbnRlbnRDaGFuZ2VkKCk7XG4gICAgX2NsZWFyUGVyc2lzdGVkRGVjaXNpb25zKCk7XG4gICAgX2NsZWFyUmV3cml0ZVNuYXBzaG90KCk7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgYFx1MjcwNSBSZXdyaXRlIGRlY2lzaW9ucyByZWNvcmRlZDogJHthY2NlcHRlZH0gYWNjZXB0ZWQsICR7cmVqZWN0ZWR9IHJlamVjdGVkLiBTdGFydGluZyBzcGVsbCBjaGVja1x1MjAyNmApO1xuICAgIHNjaGVkdWxlQXRzUmVmcmVzaCgncmV2aWV3X2NoZWNrcG9pbnQnKTtcbiAgICBzd2l0Y2hUYWIoJ3NwZWxsJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJlbW92ZUxvYWRpbmdNZXNzYWdlKGxvYWRpbmdNc2cpO1xuICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgIGFwcGVuZFJldHJ5TWVzc2FnZSgnXHUyNzRDIEVycm9yOiAnICsgZXJyLm1lc3NhZ2UsIHN1Ym1pdFJld3JpdGVEZWNpc2lvbnMpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFeHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZnVuY3Rpb24gc2V0UGVyc3Vhc2lvbldhcm5pbmdzQWNrbm93bGVkZ2VkKHZhbHVlKSB7XG4gIHBlcnN1YXNpb25XYXJuaW5nc0Fja25vd2xlZGdlZCA9IHZhbHVlO1xufVxuXG4vKiogQnVsay1hY2NlcHQgYWxsIHBlbmRpbmcgcmV3cml0ZSBjYXJkcy4gKi9cbmZ1bmN0aW9uIGFjY2VwdEFsbFJld3JpdGVzKCkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucmV3cml0ZS1jYXJkJykuZm9yRWFjaChjYXJkID0+IHtcbiAgICBjb25zdCBpZCA9IGNhcmQuaWQucmVwbGFjZSgncnctY2FyZC0nLCAnJyk7XG4gICAgaWYgKCFyZXdyaXRlRGVjaXNpb25zW2lkXSkgYXBwbHlSZXdyaXRlQWN0aW9uKGlkLCAnYWNjZXB0Jyk7XG4gIH0pO1xuICB1cGRhdGVSZXdyaXRlVGFsbHkoKTtcbn1cblxuLyoqIEJ1bGstcmVqZWN0IGFsbCBwZW5kaW5nIHJld3JpdGUgY2FyZHMuICovXG5mdW5jdGlvbiByZWplY3RBbGxSZXdyaXRlcygpIHtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJld3JpdGUtY2FyZCcpLmZvckVhY2goY2FyZCA9PiB7XG4gICAgY29uc3QgaWQgPSBjYXJkLmlkLnJlcGxhY2UoJ3J3LWNhcmQtJywgJycpO1xuICAgIGlmICghcmV3cml0ZURlY2lzaW9uc1tpZF0pIGFwcGx5UmV3cml0ZUFjdGlvbihpZCwgJ3JlamVjdCcpO1xuICB9KTtcbiAgdXBkYXRlUmV3cml0ZVRhbGx5KCk7XG59XG5cbi8qKiBUb2dnbGUgY29tcGFjdCAoc2luZ2xlLWxpbmUpIGNhcmQgZGlzcGxheSBmb3IgcmFwaWQgcmV2aWV3LiAqL1xuZnVuY3Rpb24gdG9nZ2xlUmV3cml0ZUNvbXBhY3RNb2RlKCkge1xuICBjb25zdCBjYXJkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXdyaXRlLWNhcmRzJyk7XG4gIGNvbnN0IGJ0biAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3J3LWNvbXBhY3QtYnRuJyk7XG4gIGlmICghY2FyZHMpIHJldHVybjtcbiAgY29uc3QgaXNDb21wYWN0ID0gY2FyZHMuY2xhc3NMaXN0LnRvZ2dsZSgnY29tcGFjdC1tb2RlJyk7XG4gIGlmIChidG4pIHtcbiAgICBidG4uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJywgaXNDb21wYWN0KTtcbiAgICBidG4udGV4dENvbnRlbnQgPSBpc0NvbXBhY3QgPyAnXHUyMjlGIEZ1bGwgVmlldycgOiAnXHUyMjlFIENvbXBhY3QnO1xuICAgIGJ0bi50aXRsZSA9IGlzQ29tcGFjdCA/ICdTd2l0Y2ggdG8gZnVsbCBjYXJkIHZpZXcnIDogJ1N3aXRjaCB0byBjb21wYWN0IHNpbmdsZS1saW5lIHZpZXcgZm9yIHJhcGlkIHJldmlldyc7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgcmV3cml0ZURlY2lzaW9ucyxcbiAgX3Jld3JpdGVQYW5lbENhY2hlLFxuICBwZXJzdWFzaW9uV2FybmluZ3NBY2tub3dsZWRnZWQsXG4gIHNldFBlcnN1YXNpb25XYXJuaW5nc0Fja25vd2xlZGdlZCxcbiAgZmV0Y2hBbmRSZXZpZXdSZXdyaXRlcyxcbiAgcmVuZGVyUmV3cml0ZVBhbmVsLFxuICBjb21wdXRlV29yZERpZmYsXG4gIHJlbmRlckRpZmZIdG1sLFxuICByZW5kZXJSZXdyaXRlQ2FyZCxcbiAgYXBwbHlSZXdyaXRlQWN0aW9uLFxuICBzYXZlUmV3cml0ZUVkaXQsXG4gIHVwZGF0ZVJld3JpdGVUYWxseSxcbiAgc3VibWl0UmV3cml0ZURlY2lzaW9ucyxcbiAgYWNjZXB0QWxsUmV3cml0ZXMsXG4gIHJlamVjdEFsbFJld3JpdGVzLFxuICB0b2dnbGVSZXdyaXRlQ29tcGFjdE1vZGUsXG59O1xuXG5zeW5jUmV3cml0ZUdsb2JhbHMoKTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3NwZWxsLWNoZWNrLmpzXG4gKiBTcGVsbCAmIGdyYW1tYXIgY2hlY2sgdGFiOiBmZXRjaCBzZWN0aW9ucywgcmVuZGVyIHN1Z2dlc3Rpb25zLFxuICogYXBwbHkvZGlzbWlzcyBjb3JyZWN0aW9ucywgc3VibWl0IGF1ZGl0LlxuICpcbiAqIERlcGVuZGVuY2llcyAocmVzb2x2ZWQgdGhyb3VnaCBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICBlc2NhcGVIdG1sLCBhcHBlbmRMb2FkaW5nTWVzc2FnZSwgcmVtb3ZlTG9hZGluZ01lc3NhZ2UsIGFwcGVuZE1lc3NhZ2UsXG4gKiAgIHNob3dBbGVydE1vZGFsLCBzaG93Q29uZmlybU1vZGFsLCBzZXRMb2FkaW5nLCBmZXRjaFN0YXR1cywgc2VuZEFjdGlvbixcbiAqICAgc2NoZWR1bGVBdHNSZWZyZXNoLCBDU1NcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ3NwZWxsLWNoZWNrJyk7XG5cbmltcG9ydCB7IHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5cbi8vIE1vZHVsZS1sZXZlbCBzdGF0ZVxubGV0IHNwZWxsQXVkaXQgPSBbXTtcbmxldCBfc3BlbGxDaGVja0NhY2hlID0gbnVsbDtcblxuLy8gXHUyNTAwXHUyNTAwIFBvcHVsYXRlIHNwZWxsLWNoZWNrIHRhYiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVTcGVsbENoZWNrVGFiKCkge1xuICAvLyBJZiB3ZSBoYXZlIGNhY2hlZCByZXN1bHRzIGZyb20gYSBwcmV2aW91cyBydW4sIHJlLXJlbmRlciBmcm9tIGNhY2hlXG4gIC8vIGluc3RlYWQgb2YgcmUtcnVubmluZyBMYW5ndWFnZVRvb2wgb24gZXZlcnkgYmFjay1uYXZpZ2F0aW9uLlxuICBpZiAod2luZG93Ll9zcGVsbENoZWNrQ2FjaGUpIHtcbiAgICBjb25zdCBjID0gd2luZG93Ll9zcGVsbENoZWNrQ2FjaGU7XG4gICAgaWYgKGMudHlwZSA9PT0gJ3plcm8nKSB7XG4gICAgICByZW5kZXJTcGVsbENoZWNrWmVyb1N0YXRlKGMubWVzc2FnZSwgYy5zdGF0c0xpbmUsIGMuY3VzdG9tRGljdFNpemUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICAgICA8aDE+XHVEODNEXHVERDI0IFNwZWxsICZhbXA7IEdyYW1tYXIgQ2hlY2s8L2gxPlxuICAgICAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7bWFyZ2luLWJvdHRvbToyNHB4O1wiPlJldmlldyBzcGVsbGluZyBhbmQgZ3JhbW1hciBzdWdnZXN0aW9ucy48L3A+XG4gICAgICAgIDxkaXYgaWQ9XCJzcGVsbC1yZXN1bHRzXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9kaXY+XG4gICAgICBgO1xuICAgICAgcmVuZGVyU3BlbGxTdWdnZXN0aW9ucyhjLmZsYWdnZWRTZWN0aW9ucywgYy50b3RhbFNlY3Rpb25zLCBjLnN0YXRzLCBjLmN1c3RvbURpY3RTaXplKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgIDxoMT5cdUQ4M0RcdUREMjQgU3BlbGwgJmFtcDsgR3JhbW1hciBDaGVjazwvaDE+XG4gICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MjRweDtcIj5DaGVja2luZyBDViBzZWN0aW9ucyBmb3Igc3BlbGxpbmcgYW5kIGdyYW1tYXIgaXNzdWVzXHUyMDI2PC9wPlxuICAgIDxkaXYgaWQ9XCJzcGVsbC1sb2FkaW5nXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjQwcHg7XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+PC9kaXY+XG4gICAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7bWFyZ2luLXRvcDoxMnB4O1wiPlJ1bm5pbmcgTGFuZ3VhZ2VUb29sIGNoZWNrc1x1MjAyNjwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGlkPVwic3BlbGwtcmVzdWx0c1wiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPjwvZGl2PlxuICBgO1xuICBzcGVsbEF1ZGl0ID0gW107XG4gIHdpbmRvdy5fc3BlbGxTdWdNYXAgPSB7fTtcblxuICB0cnkge1xuICAgIC8vIEZldGNoIHNlY3Rpb25zIHRvIGNoZWNrXG4gICAgY29uc3Qgc2VjdGlvbnNSZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9zcGVsbC1jaGVjay1zZWN0aW9ucycpO1xuICAgIGNvbnN0IHNlY3Rpb25zRGF0YSA9IGF3YWl0IHNlY3Rpb25zUmVzLmpzb24oKTtcbiAgICBpZiAoIXNlY3Rpb25zRGF0YS5vaykge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NwZWxsLWxvYWRpbmcnKS5pbm5lckhUTUwgPSBgPHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+RmFpbGVkIHRvIGxvYWQgc2VjdGlvbnM6ICR7c2VjdGlvbnNEYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJ308L3A+YDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN0aW9ucyA9IHNlY3Rpb25zRGF0YS5zZWN0aW9ucyB8fCBbXTtcbiAgICBpZiAoc2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZW5kZXJTcGVsbENoZWNrWmVyb1N0YXRlKCdObyBDViBzZWN0aW9ucyBhcmUgYXZhaWxhYmxlIHRvIGNoZWNrLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGVhY2ggc2VjdGlvblxuICAgIGNvbnN0IGZsYWdnZWRTZWN0aW9ucyA9IFtdO1xuICAgIGNvbnN0IGFnZ3JlZ2F0ZVN0YXRzID0gc2VjdGlvbnNEYXRhLmFnZ3JlZ2F0ZV9zdGF0cyB8fCB7fTtcbiAgICBsZXQgaW5jb3JyZWN0V29yZHMgPSAwO1xuICAgIGxldCBncmFtbWFySXNzdWVzID0gMDtcbiAgICBsZXQgY3VzdG9tRGljdFNpemUgPSBzZWN0aW9uc0RhdGEuY3VzdG9tX2RpY3Rfc2l6ZSB8fCAwO1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3NwZWxsLWNoZWNrJywge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdGV4dDogc2VjdGlvbi50ZXh0LCBjb250ZXh0OiBzZWN0aW9uLmNvbnRleHQgfSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBpZiAoZGF0YS5zdGF0cykge1xuICAgICAgICBpZiAoZGF0YS5jdXN0b21fZGljdF9zaXplKSBjdXN0b21EaWN0U2l6ZSA9IGRhdGEuY3VzdG9tX2RpY3Rfc2l6ZTtcbiAgICAgICAgaW5jb3JyZWN0V29yZHMgKz0gZGF0YS5zdGF0cy51bmtub3duX3dvcmRfY291bnQgfHwgMDtcbiAgICAgICAgZ3JhbW1hcklzc3VlcyArPSBkYXRhLnN0YXRzLmdyYW1tYXJfaXNzdWVfY291bnQgfHwgMDtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhLm9rICYmIGRhdGEuc3VnZ2VzdGlvbnMgJiYgZGF0YS5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZsYWdnZWRTZWN0aW9ucy5wdXNoKHsgc2VjdGlvbiwgc3VnZ2VzdGlvbnM6IGRhdGEuc3VnZ2VzdGlvbnMgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NwZWxsLWxvYWRpbmcnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgaWYgKGZsYWdnZWRTZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlbmRlclNwZWxsQ2hlY2taZXJvU3RhdGUoXG4gICAgICAgICdTcGVsbCBjaGVjayBwYXNzZWQgXHUyMDE0IG5vIGlzc3VlcyBmb3VuZC4nLFxuICAgICAgICBidWlsZFNwZWxsU3RhdHNTdW1tYXJ5KHtcbiAgICAgICAgICB0b3RhbF9zZWN0aW9uczogc2VjdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHRvdGFsX3dvcmRzOiBhZ2dyZWdhdGVTdGF0cy53b3JkX2NvdW50IHx8IDAsXG4gICAgICAgICAgdW5pcXVlX3dvcmRzOiBhZ2dyZWdhdGVTdGF0cy51bmlxdWVfd29yZHMgfHwgMCxcbiAgICAgICAgICBjdXN0b21fZGljdF93b3JkczogYWdncmVnYXRlU3RhdHMuY3VzdG9tX2RpY3Rfd29yZHMgfHwgMCxcbiAgICAgICAgICBpbmNvcnJlY3Rfd29yZHM6IGluY29ycmVjdFdvcmRzLFxuICAgICAgICAgIGdyYW1tYXJfaXNzdWVzOiBncmFtbWFySXNzdWVzLFxuICAgICAgICB9KSxcbiAgICAgICAgY3VzdG9tRGljdFNpemUsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBzdWdnZXN0aW9ucyBwYW5lbFxuICAgIHJlbmRlclNwZWxsU3VnZ2VzdGlvbnMoZmxhZ2dlZFNlY3Rpb25zLCBzZWN0aW9ucy5sZW5ndGgsIHtcbiAgICAgIHRvdGFsX3NlY3Rpb25zOiBzZWN0aW9ucy5sZW5ndGgsXG4gICAgICB0b3RhbF93b3JkczogYWdncmVnYXRlU3RhdHMud29yZF9jb3VudCB8fCAwLFxuICAgICAgdW5pcXVlX3dvcmRzOiBhZ2dyZWdhdGVTdGF0cy51bmlxdWVfd29yZHMgfHwgMCxcbiAgICAgIGN1c3RvbV9kaWN0X3dvcmRzOiBhZ2dyZWdhdGVTdGF0cy5jdXN0b21fZGljdF93b3JkcyB8fCAwLFxuICAgICAgaW5jb3JyZWN0X3dvcmRzOiBpbmNvcnJlY3RXb3JkcyxcbiAgICAgIGdyYW1tYXJfaXNzdWVzOiBncmFtbWFySXNzdWVzLFxuICAgIH0sIGN1c3RvbURpY3RTaXplKTtcblxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3IoJ1NwZWxsIGNoZWNrIGVycm9yOicsIGVycik7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NwZWxsLWxvYWRpbmcnKS5pbm5lckhUTUwgPSBgPHAgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O3BhZGRpbmc6MjBweDtcIj5TcGVsbCBjaGVjayBmYWlsZWQ6ICR7ZXJyLm1lc3NhZ2V9PC9wPmA7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFplcm8tc3RhdGUgc3BlbGwgc3RhZ2UgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIHJlbmRlclNwZWxsQ2hlY2taZXJvU3RhdGUobWVzc2FnZSwgc3RhdHNMaW5lID0gJycsIGN1c3RvbURpY3RTaXplID0gMCkge1xuICB3aW5kb3cuX3NwZWxsQ2hlY2tDYWNoZSA9IHsgdHlwZTogJ3plcm8nLCBtZXNzYWdlLCBzdGF0c0xpbmUsIGN1c3RvbURpY3RTaXplIH07XG4gIF9zcGVsbENoZWNrQ2FjaGUgPSB3aW5kb3cuX3NwZWxsQ2hlY2tDYWNoZTtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGNvbnN0IHN0YXRzUGFydHMgPSBbXTtcbiAgaWYgKHN0YXRzTGluZSkgc3RhdHNQYXJ0cy5wdXNoKGA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjAuOTVlbTttYXJnaW46OHB4IDAgMDtcIj4ke2VzY2FwZUh0bWwoc3RhdHNMaW5lKX08L3A+YCk7XG4gIGlmIChjdXN0b21EaWN0U2l6ZSA+IDApIHN0YXRzUGFydHMucHVzaChgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjllbTttYXJnaW46NHB4IDAgMDtcIj5DdXN0b20gZGljdGlvbmFyeTogJHtjdXN0b21EaWN0U2l6ZS50b0xvY2FsZVN0cmluZygpfSB3b3JkJHtjdXN0b21EaWN0U2l6ZSAhPT0gMSA/ICdzJyA6ICcnfTwvcD5gKTtcbiAgY29udGVudC5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NjBweCAyMHB4O1wiPlxuICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTozZW07bWFyZ2luLWJvdHRvbToxNnB4O1wiPlx1MjcwNTwvZGl2PlxuICAgICAgPGgyIHN0eWxlPVwiY29sb3I6IzE2NjUzNDtcIj4ke2VzY2FwZUh0bWwobWVzc2FnZSl9PC9oMj5cbiAgICAgICR7c3RhdHNQYXJ0cy5qb2luKCdcXG4nKX1cbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDttYXJnaW46MTZweCAwIDI0cHg7XCI+Q29udGludWUgd2hlbiB5b3UgYXJlIHJlYWR5IHRvIGdlbmVyYXRlIHlvdXIgQ1YuPC9wPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInN1Ym1pdC1idG5cIiBvbmNsaWNrPVwic3VibWl0RW1wdHlTcGVsbENoZWNrKClcIiB0aXRsZT1cIkdlbmVyYXRlIGFuIEhUTUwgcHJldmlldyBvZiB5b3VyIENWIFx1MjAxNCB5b3Ugd2lsbCByZXZpZXcgdGhlIGxheW91dCBiZWZvcmUgZmluYWwgRE9DWC9QREYgZmlsZXMgYXJlIHByb2R1Y2VkXCI+R2VuZXJhdGUgUHJldmlldyBcdTIxOTI8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3VibWl0RW1wdHlTcGVsbENoZWNrKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9zcGVsbC1jaGVjay1jb21wbGV0ZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHNwZWxsX2F1ZGl0OiBbXSB9KVxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmICghcmVzLm9rKSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgYEZhaWxlZCB0byBzYXZlIHNwZWxsIGNoZWNrOiAke2RhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm9jZWVkID0gYXdhaXQgX2NvbmZpcm1Qcm9jZWVkVG9HZW5lcmF0ZSgpO1xuICAgIGlmICghcHJvY2VlZCkgcmV0dXJuO1xuICAgIHN0YXRlTWFuYWdlci5tYXJrQ29udGVudENoYW5nZWQoKTtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnXHUyNzA1IFNwZWxsIGNoZWNrIGNvbXBsZXRlIFx1MjAxNCBubyBpc3N1ZXMgcmVxdWlyZWQgY2hhbmdlcy4gR2VuZXJhdGluZyB5b3VyIENWXHUyMDI2Jyk7XG4gICAgc2NoZWR1bGVBdHNSZWZyZXNoKCdyZXZpZXdfY2hlY2twb2ludCcpO1xuICAgIGF3YWl0IGZldGNoU3RhdHVzKCk7XG4gICAgYXdhaXQgc2VuZEFjdGlvbignZ2VuZXJhdGVfY3YnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGBTcGVsbCBjaGVjayBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgU3RhdHMgc3VtbWFyeSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gYnVpbGRTcGVsbFN0YXRzU3VtbWFyeShzdGF0cyA9IHt9KSB7XG4gIHJldHVybiBbXG4gICAgYCR7KHN0YXRzLnRvdGFsX3NlY3Rpb25zIHx8IDApLnRvTG9jYWxlU3RyaW5nKCl9IHNlY3Rpb24ke3N0YXRzLnRvdGFsX3NlY3Rpb25zID09PSAxID8gJycgOiAncyd9IGNoZWNrZWRgLFxuICAgIGAkeyhzdGF0cy50b3RhbF93b3JkcyB8fCAwKS50b0xvY2FsZVN0cmluZygpfSB3b3Jkc2AsXG4gICAgYCR7KHN0YXRzLnVuaXF1ZV93b3JkcyB8fCAwKS50b0xvY2FsZVN0cmluZygpfSB1bmlxdWVgLFxuICAgIGAkeyhzdGF0cy5jdXN0b21fZGljdF93b3JkcyB8fCAwKS50b0xvY2FsZVN0cmluZygpfSBjdXN0b20gZGljdGlvbmFyeSBtYXRjaCR7c3RhdHMuY3VzdG9tX2RpY3Rfd29yZHMgPT09IDEgPyAnJyA6ICdlcyd9YCxcbiAgICBgJHsoc3RhdHMuaW5jb3JyZWN0X3dvcmRzIHx8IDApLnRvTG9jYWxlU3RyaW5nKCl9IHVua25vd24vaW5jb3JyZWN0YCxcbiAgICBgJHsoc3RhdHMuZ3JhbW1hcl9pc3N1ZXMgfHwgMCkudG9Mb2NhbGVTdHJpbmcoKX0gZ3JhbW1hciBpc3N1ZSR7c3RhdHMuZ3JhbW1hcl9pc3N1ZXMgPT09IDEgPyAnJyA6ICdzJ31gLFxuICBdLmpvaW4oJyBcdTAwQjcgJyk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZW5kZXIgc3VnZ2VzdGlvbnMgcGFuZWwgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIHJlbmRlclNwZWxsU3VnZ2VzdGlvbnMoZmxhZ2dlZFNlY3Rpb25zLCB0b3RhbFNlY3Rpb25zLCBzdGF0cyA9IHt9LCBjdXN0b21EaWN0U2l6ZSA9IDApIHtcbiAgd2luZG93Ll9zcGVsbENoZWNrQ2FjaGUgPSB7IHR5cGU6ICdzdWdnZXN0aW9ucycsIGZsYWdnZWRTZWN0aW9ucywgdG90YWxTZWN0aW9ucywgc3RhdHMsIGN1c3RvbURpY3RTaXplIH07XG4gIF9zcGVsbENoZWNrQ2FjaGUgPSB3aW5kb3cuX3NwZWxsQ2hlY2tDYWNoZTtcbiAgY29uc3QgcmVzdWx0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcGVsbC1yZXN1bHRzJyk7XG4gIHJlc3VsdHMuc3R5bGUuZGlzcGxheSA9ICcnO1xuICBjb25zdCBzdGF0c0xpbmUgPSBidWlsZFNwZWxsU3RhdHNTdW1tYXJ5KHN0YXRzKTtcblxuICBsZXQgaHRtbCA9IGBcbiAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmVmOWMzO2JvcmRlcjoxcHggc29saWQgI2ZkZTA0Nztib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDttYXJnaW4tYm90dG9tOjI0cHg7XCI+XG4gICAgICA8c3Ryb25nPlx1MjZBMCAke2ZsYWdnZWRTZWN0aW9ucy5yZWR1Y2UoKHQsIGYpID0+IHQgKyBmLnN1Z2dlc3Rpb25zLmxlbmd0aCwgMCl9IGlzc3VlJHtmbGFnZ2VkU2VjdGlvbnMucmVkdWNlKCh0LCBmKSA9PiB0ICsgZi5zdWdnZXN0aW9ucy5sZW5ndGgsIDApICE9PSAxID8gJ3MnIDogJyd9PC9zdHJvbmc+IGZvdW5kXG4gICAgICBhY3Jvc3MgJHtmbGFnZ2VkU2VjdGlvbnMubGVuZ3RofSBvZiAke3RvdGFsU2VjdGlvbnN9IHNlY3Rpb24ke3RvdGFsU2VjdGlvbnMgIT09IDEgPyAncycgOiAnJ30uXG4gICAgICBSZXZpZXcgZWFjaCBzdWdnZXN0aW9uIGJlbG93LCB0aGVuIGNsaWNrIDxzdHJvbmc+RG9uZTwvc3Ryb25nPi5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MC45MmVtO2NvbG9yOiM2YjcyODA7XCI+JHtlc2NhcGVIdG1sKHN0YXRzTGluZSl9PC9kaXY+XG4gICAgICAke2N1c3RvbURpY3RTaXplID4gMCA/IGA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDo0cHg7Zm9udC1zaXplOjAuODhlbTtjb2xvcjojNmI3MjgwO1wiPkN1c3RvbSBkaWN0aW9uYXJ5IHNpemU6ICR7Y3VzdG9tRGljdFNpemUudG9Mb2NhbGVTdHJpbmcoKX0gd29yZCR7Y3VzdG9tRGljdFNpemUgIT09IDEgPyAncycgOiAnJ308L2Rpdj5gIDogJyd9XG4gICAgPC9kaXY+XG4gIGA7XG5cbiAgY29uc3QgX3N1Z1NldmVyaXR5ID0gKHN1ZykgPT4ge1xuICAgIGNvbnN0IHJpZCA9IChzdWcucnVsZV9pZCB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjYXQgPSAoc3VnLmNhdGVnb3J5IHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICgvc3BlbGx8dHlwb3xtaXNzcGVsbC8udGVzdChyaWQpIHx8IC90eXBvLy50ZXN0KGNhdCkpIHJldHVybiAwO1xuICAgIGlmICgvZ3JhbW1hcnxhZ3JlZW1lbnR8dmVyYnx0ZW5zZXxhcnRpY2xlLy50ZXN0KHJpZCkgfHwgL2dyYW1tYXIvLnRlc3QoY2F0KSkgcmV0dXJuIDE7XG4gICAgaWYgKC9zdHlsZXxyZWR1bmRhbnx3b3JkeS8udGVzdChyaWQpIHx8IC9zdHlsZS8udGVzdChjYXQpKSByZXR1cm4gMjtcbiAgICByZXR1cm4gMztcbiAgfTtcblxuICBmbGFnZ2VkU2VjdGlvbnMuZm9yRWFjaCgoeyBzZWN0aW9uLCBzdWdnZXN0aW9uczogcmF3U3VnZ2VzdGlvbnMgfSkgPT4ge1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gWy4uLnJhd1N1Z2dlc3Rpb25zXS5zb3J0KChhLCBiKSA9PiBfc3VnU2V2ZXJpdHkoYSkgLSBfc3VnU2V2ZXJpdHkoYikpO1xuICAgIGh0bWwgKz0gYDxkaXYgY2xhc3M9XCJyZXZpZXctc2VjdGlvblwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbToyNHB4O1wiPlxuICAgICAgPGgzIHN0eWxlPVwiZm9udC1zaXplOjFlbTtmb250LXdlaWdodDo3MDA7Y29sb3I6IzM3NDE1MTttYXJnaW4tYm90dG9tOjEycHg7XCI+JHtlc2NhcGVIdG1sKHNlY3Rpb24ubGFiZWwpfTwvaDM+XG4gICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZjhmYWZjO2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHggMTRweDttYXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaXplOjAuOWVtO3doaXRlLXNwYWNlOnByZS13cmFwO1wiPiR7ZXNjYXBlSHRtbChzZWN0aW9uLnRleHQpfTwvZGl2PlxuICAgIGA7XG4gICAgc3VnZ2VzdGlvbnMuZm9yRWFjaCgoc3VnLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IHN1Z0lkID0gYHN1Z18ke3NlY3Rpb24uaWR9XyR7aWR4fWA7XG4gICAgICBjb25zdCByZXBzID0gc3VnLnJlcGxhY2VtZW50cyB8fCBbXTtcbiAgICAgIGh0bWwgKz0gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwic3BlbGwtc3VnZ2VzdGlvblwiIGlkPVwiJHtzdWdJZH1cIiBkYXRhLXNlY3Rpb24taWQ9XCIke2VzY2FwZUh0bWwoc2VjdGlvbi5pZCl9XCIgZGF0YS1pZHg9XCIke2lkeH1cIlxuICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTBweCAxNHB4O21hcmdpbi1ib3R0b206OHB4O2JhY2tncm91bmQ6I2ZmZjtcIj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjEwcHg7XCI+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDoxO1wiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuODhlbTtjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206NHB4O1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZDojZmVlMmUyO2NvbG9yOiNkYzI2MjY7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoxcHggNnB4O2ZvbnQtd2VpZ2h0OjYwMDtcIj4ke2VzY2FwZUh0bWwoc3VnLmZsYWdnZWQpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjhweDtcIj4ke2VzY2FwZUh0bWwoc3VnLm1lc3NhZ2UpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXN0eWxlOml0YWxpYztmb250LXNpemU6MC44NWVtO2NvbG9yOiMzNzQxNTE7bWFyZ2luLWJvdHRvbTo4cHg7XCI+JHtlc2NhcGVIdG1sKHN1Zy5zbmlwcGV0KX08L2Rpdj5cbiAgICAgICAgICAgICAgJHtyZXBzLmxlbmd0aCA+IDAgPyBgXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweDttYXJnaW4tYm90dG9tOjhweDtcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjgyZW07Y29sb3I6IzZiNzI4MDthbGlnbi1zZWxmOmNlbnRlcjtcIj5TdWdnZXN0aW9uczo8L3NwYW4+XG4gICAgICAgICAgICAgICAgJHtyZXBzLm1hcCgociwgcmkpID0+IGA8YnV0dG9uIGNsYXNzPVwicmV3cml0ZS1rZXl3b3JkXCIgb25jbGljaz1cImFwcGx5U3BlbGxSZXBsYWNlbWVudCgnJHtlc2NhcGVIdG1sKHNlY3Rpb24uaWQpfScsICR7aWR4fSwgJHtyaX0pXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7Ym9yZGVyOjFweCBzb2xpZCAjM2I4MmY2O2JhY2tncm91bmQ6I2RiZWFmZTtcIj4ke2VzY2FwZUh0bWwocil9PC9idXR0b24+YCkuam9pbignJyl9XG4gICAgICAgICAgICAgIDwvZGl2PmAgOiAnJ31cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDttYXJnaW4tYm90dG9tOjhweDtcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImVkaXRfJHtzdWdJZH1cIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIGN1c3RvbSBjb3JyZWN0aW9uXHUyMDI2XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtlc2NhcGVIdG1sKHJlcHNbMF0gfHwgJycpfVwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImZsZXg6MTtmb250LXNpemU6MC44OGVtO3BhZGRpbmc6NHB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo0cHg7XCJcbiAgICAgICAgICAgICAgICAgIG9ua2V5ZG93bj1cImlmKGV2ZW50LmtleT09PSdFbnRlcicpe2V2ZW50LnByZXZlbnREZWZhdWx0KCk7YXBwbHlDdXN0b21TcGVsbENvcnJlY3Rpb24oJyR7ZXNjYXBlSHRtbChzZWN0aW9uLmlkKX0nLCR7aWR4fSk7fVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJhcHBseUN1c3RvbVNwZWxsQ29ycmVjdGlvbignJHtlc2NhcGVIdG1sKHNlY3Rpb24uaWQpfScsJHtpZHh9KVwiIHRpdGxlPVwiQXBwbHkgY3VzdG9tIGNvcnJlY3Rpb25cIiBhcmlhLWxhYmVsPVwiQXBwbHkgY3VzdG9tIGNvcnJlY3Rpb25cIj5BcHBseTwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwO1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJkaXNtaXNzU3BlbGxTdWdnZXN0aW9uKCcke2VzY2FwZUh0bWwoc3VnSWQpfScsICcke2VzY2FwZUh0bWwoc2VjdGlvbi5pZCl9JywgJHtpZHh9LCAnJHtlc2NhcGVIdG1sKHN1Zy5mbGFnZ2VkKX0nKVwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiSWdub3JlIHRoaXMgc3VnZ2VzdGlvblwiIGFyaWEtbGFiZWw9XCJJZ25vcmUgdGhpcyBzdWdnZXN0aW9uXCI+SWdub3JlPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgb25jbGljaz1cImFkZFNwZWxsV29yZCgnJHtlc2NhcGVIdG1sKHN1Zy5mbGFnZ2VkKX0nLCAnJHtlc2NhcGVIdG1sKHN1Z0lkKX0nKVwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQWRkIHRvIGN1c3RvbSBkaWN0aW9uYXJ5XCIgYXJpYS1sYWJlbD1cIkFkZCB0byBjdXN0b20gZGljdGlvbmFyeVwiPkFkZCB0byBEaWN0aW9uYXJ5PC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICAgIC8vIFJlZ2lzdGVyIGluIGF1ZGl0IGFzIHBlbmRpbmdcbiAgICAgIGlmICghd2luZG93Ll9zcGVsbFN1Z01hcCkgd2luZG93Ll9zcGVsbFN1Z01hcCA9IHt9O1xuICAgICAgd2luZG93Ll9zcGVsbFN1Z01hcFtgJHtzZWN0aW9uLmlkfV8ke2lkeH1gXSA9IHtcbiAgICAgICAgc2VjdGlvbl9pZDogICAgc2VjdGlvbi5pZCxcbiAgICAgICAgY29udGV4dF90eXBlOiBzZWN0aW9uLmNvbnRleHQsXG4gICAgICAgIGxvY2F0aW9uOiAgICAgc2VjdGlvbi5sYWJlbCxcbiAgICAgICAgb3JpZ2luYWw6ICAgICBzdWcuZmxhZ2dlZCxcbiAgICAgICAgc3VnZ2VzdGlvbjogICAocmVwc1swXSB8fCAnJyksXG4gICAgICAgIG9mZnNldDogICAgICAgc3VnLm9mZnNldCxcbiAgICAgICAgbGVuZ3RoOiAgICAgICBzdWcubGVuZ3RoLFxuICAgICAgICBydWxlOiAgICAgICAgIHN1Zy5ydWxlX2lkIHx8ICcnLFxuICAgICAgICBvdXRjb21lOiAgICAgICdwZW5kaW5nJyxcbiAgICAgICAgZmluYWw6ICAgICAgICBzdWcuZmxhZ2dlZCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgaHRtbCArPSAnPC9kaXY+JztcbiAgfSk7XG5cbiAgaHRtbCArPSBgXG4gICAgPGRpdiBjbGFzcz1cIm5hdi1idXR0b25zXCIgc3R5bGU9XCJtYXJnaW46MjRweCAwO1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInN1Ym1pdC1idG5cIiBvbmNsaWNrPVwic3VibWl0U3BlbGxDaGVja0RlY2lzaW9ucygpXCI+R2VuZXJhdGUgUHJldmlldyBcdTIxOTI8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgcmVzdWx0cy5pbm5lckhUTUwgPSBodG1sO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgQXBwbHkgLyBkaXNtaXNzIGNvcnJlY3Rpb25zIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBhcHBseUN1c3RvbVNwZWxsQ29ycmVjdGlvbihzZWN0aW9uSWQsIGlkeCkge1xuICBjb25zdCBrZXkgICAgPSBgJHtzZWN0aW9uSWR9XyR7aWR4fWA7XG4gIGNvbnN0IGVudHJ5ICA9ICh3aW5kb3cuX3NwZWxsU3VnTWFwIHx8IHt9KVtrZXldO1xuICBpZiAoIWVudHJ5KSByZXR1cm47XG4gIGNvbnN0IGlucHV0ICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBlZGl0X3N1Z18ke3NlY3Rpb25JZH1fJHtpZHh9YCk7XG4gIGNvbnN0IGN1c3RvbSA9IGlucHV0ID8gaW5wdXQudmFsdWUudHJpbSgpIDogJyc7XG4gIGlmICghY3VzdG9tKSByZXR1cm47XG4gIGVudHJ5Lm91dGNvbWUgPSAnYWNjZXB0JztcbiAgZW50cnkuZmluYWwgICA9IGN1c3RvbTtcbiAgY29uc3Qgc3VnRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuc3BlbGwtc3VnZ2VzdGlvbltkYXRhLXNlY3Rpb24taWQ9XCIke0NTUy5lc2NhcGUoc2VjdGlvbklkKX1cIl1bZGF0YS1pZHg9XCIke2lkeH1cIl1gKTtcbiAgaWYgKCFzdWdFbCkgcmV0dXJuO1xuICBjb25zdCBmbGFnZ2VkU3BhbiA9IHN1Z0VsLnF1ZXJ5U2VsZWN0b3IoJ3NwYW5bc3R5bGUqPVwiYmFja2dyb3VuZDojZmVlMmUyXCJdJyk7XG4gIGlmIChmbGFnZ2VkU3Bhbikge1xuICAgIGZsYWdnZWRTcGFuLm91dGVySFRNTCA9IGA8ZGVsIHN0eWxlPVwiY29sb3I6I2RjMjYyNjtcIj4ke2VzY2FwZUh0bWwoZW50cnkub3JpZ2luYWwpfTwvZGVsPiBcdTIxOTIgPGlucyBzdHlsZT1cImNvbG9yOiMxNjY1MzQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7XCI+JHtlc2NhcGVIdG1sKGN1c3RvbSl9PC9pbnM+YDtcbiAgfVxuICBzdWdFbC5zdHlsZS5vcGFjaXR5ID0gJzAuNSc7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U3BlbGxSZXBsYWNlbWVudChzZWN0aW9uSWQsIGlkeCwgcmVwSWR4KSB7XG4gIGNvbnN0IGtleSAgPSBgJHtzZWN0aW9uSWR9XyR7aWR4fWA7XG4gIGNvbnN0IGVudHJ5ID0gKHdpbmRvdy5fc3BlbGxTdWdNYXAgfHwge30pW2tleV07XG4gIGlmICghZW50cnkpIHJldHVybjtcbiAgLy8gVGhlIHJlcGxhY2VtZW50cyBsaXN0IGlzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIGhlcmUgXHUyMDE0IHJlYWQgZnJvbSBET00gc3VnZ2VzdGlvblxuICBjb25zdCBzdWdFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5zcGVsbC1zdWdnZXN0aW9uW2RhdGEtc2VjdGlvbi1pZD1cIiR7Q1NTLmVzY2FwZShzZWN0aW9uSWQpfVwiXVtkYXRhLWlkeD1cIiR7aWR4fVwiXWApO1xuICBpZiAoIXN1Z0VsKSByZXR1cm47XG4gIGNvbnN0IGJ1dHRvbnMgPSBzdWdFbC5xdWVyeVNlbGVjdG9yQWxsKCcucmV3cml0ZS1rZXl3b3JkJyk7XG4gIGNvbnN0IHJlcCA9IGJ1dHRvbnNbcmVwSWR4XSA/IGJ1dHRvbnNbcmVwSWR4XS50ZXh0Q29udGVudC50cmltKCkgOiAnJztcbiAgZW50cnkub3V0Y29tZSA9ICdhY2NlcHQnO1xuICBlbnRyeS5maW5hbCAgID0gcmVwO1xuICAvLyBWaXN1YWwgZmVlZGJhY2s6IHN0cmlrZSB0aGUgZmxhZ2dlZCB3b3JkLCBzaG93IHJlcGxhY2VtZW50XG4gIGNvbnN0IGZsYWdnZWRTcGFuID0gc3VnRWwucXVlcnlTZWxlY3Rvcignc3BhbltzdHlsZSo9XCJiYWNrZ3JvdW5kOiNmZWUyZTJcIl0nKTtcbiAgaWYgKGZsYWdnZWRTcGFuKSB7XG4gICAgZmxhZ2dlZFNwYW4ub3V0ZXJIVE1MID0gYDxkZWwgc3R5bGU9XCJjb2xvcjojZGMyNjI2O1wiPiR7ZXNjYXBlSHRtbChlbnRyeS5vcmlnaW5hbCl9PC9kZWw+IFx1MjE5MiA8aW5zIHN0eWxlPVwiY29sb3I6IzE2NjUzNDt0ZXh0LWRlY29yYXRpb246bm9uZTtcIj4ke2VzY2FwZUh0bWwocmVwKX08L2lucz5gO1xuICB9XG4gIHN1Z0VsLnN0eWxlLm9wYWNpdHkgPSAnMC41Jztcbn1cblxuZnVuY3Rpb24gZGlzbWlzc1NwZWxsU3VnZ2VzdGlvbihzdWdJZCwgc2VjdGlvbklkLCBpZHgsIHdvcmQpIHtcbiAgY29uc3Qga2V5ICAgPSBgJHtzZWN0aW9uSWR9XyR7aWR4fWA7XG4gIGNvbnN0IGVudHJ5ID0gKHdpbmRvdy5fc3BlbGxTdWdNYXAgfHwge30pW2tleV07XG4gIGlmIChlbnRyeSkgeyBlbnRyeS5vdXRjb21lID0gJ3JlamVjdCc7IGVudHJ5LmZpbmFsID0gd29yZDsgfVxuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN1Z0lkKTtcbiAgaWYgKGVsKSBlbC5zdHlsZS5vcGFjaXR5ID0gJzAuNCc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFkZFNwZWxsV29yZCh3b3JkLCBzdWdJZCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL2N1c3RvbS1kaWN0aW9uYXJ5Jywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgd29yZCB9KVxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN1Z0lkKTtcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gJzAuNCc7XG4gICAgICAgIGNvbnN0IG1zZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBtc2cuc3R5bGUuY3NzVGV4dCA9ICdjb2xvcjojMTY2NTM0O2ZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luLXRvcDo0cHg7JztcbiAgICAgICAgbXNnLnRleHRDb250ZW50ID0gYFwiJHt3b3JkfVwiIGFkZGVkIHRvIGRpY3Rpb25hcnkuYDtcbiAgICAgICAgZWwuYXBwZW5kQ2hpbGQobXNnKTtcbiAgICAgIH1cbiAgICAgIC8vIEFsc28gcmVjb3JkIGluIGF1ZGl0XG4gICAgICBjb25zdCBwYXJ0cyA9IHN1Z0lkLnJlcGxhY2UoL15zdWdfLywgJycpLnNwbGl0KCdfJyk7XG4gICAgICBjb25zdCBpZHggPSBwYXJzZUludChwYXJ0cy5wb3AoKSwgMTApO1xuICAgICAgY29uc3Qgc2VjdGlvbklkID0gcGFydHMuam9pbignXycpO1xuICAgICAgY29uc3Qga2V5ID0gYCR7c2VjdGlvbklkfV8ke2lkeH1gO1xuICAgICAgY29uc3QgZW50cnkgPSAod2luZG93Ll9zcGVsbFN1Z01hcCB8fCB7fSlba2V5XTtcbiAgICAgIGlmIChlbnRyeSkgeyBlbnRyeS5vdXRjb21lID0gJ2FkZF9kaWN0JzsgZW50cnkuZmluYWwgPSB3b3JkOyB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3IoJ0Vycm9yIGFkZGluZyB0byBkaWN0aW9uYXJ5OicsIGVycik7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFByZS1nZW5lcmF0aW9uIGNvbmZpcm1hdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gX2NvbmZpcm1Qcm9jZWVkVG9HZW5lcmF0ZSgpIHtcbiAgLy8gR2F0ZTogdGFnbGluZSBtdXN0IGJlIGV4cGxpY2l0bHkgY29uZmlybWVkIGJlZm9yZSBnZW5lcmF0aW5nXG4gIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGZldGNoU3RhdHVzKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gIGlmICghc3RhdHVzPy5kZWNpc2lvbnNfY29uZmlybWVkPy50YWdsaW5lKSB7XG4gICAgYXdhaXQgc2hvd0FsZXJ0TW9kYWwoXG4gICAgICAnXHUyNkEwIFRhZ2xpbmUgTm90IENvbmZpcm1lZCcsXG4gICAgICAnWW91IG11c3QgY29uZmlybSB5b3VyIGFwcGxpY2FudCB0YWdsaW5lIGJlZm9yZSBnZW5lcmF0aW5nLlxcblxcbkdvIHRvIHRoZSBcdUQ4M0NcdURGRjdcdUZFMEYgVGFnbGluZSB0YWIgaW4gQ3VzdG9taXphdGlvbnMgdG8gY29uZmlybSBpdC4nXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgYXRzU2NvcmUgPSBzdGF0ZU1hbmFnZXIuZ2V0QXRzU2NvcmUoKTtcbiAgY29uc3QgZnJlc2huZXNzID0gc3RhdGVNYW5hZ2VyLmdldExheW91dEZyZXNobmVzcygpO1xuICBjb25zdCBnZW5TdGF0ZSA9IHN0YXRlTWFuYWdlci5nZXRHZW5lcmF0aW9uU3RhdGUoKTtcbiAgY29uc3QgZGVjaXNpb25zQ29uZmlybWVkID0gc3RhdHVzPy5kZWNpc2lvbnNfY29uZmlybWVkIHx8IHt9O1xuICBjb25zdCBsaW5lcyA9IFsnWW91ciBDViBpcyByZWFkeSB0byBnZW5lcmF0ZS4nXTtcbiAgaWYgKGF0c1Njb3JlICE9PSBudWxsICYmIGF0c1Njb3JlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGF0c1Njb3JlLm92ZXJhbGwgPT09ICdudW1iZXInKSB7XG4gICAgbGluZXMucHVzaChgQ3VycmVudCBBVFMgc2NvcmU6ICR7TWF0aC5yb3VuZChhdHNTY29yZS5vdmVyYWxsKX0lYCk7XG4gIH1cbiAgaWYgKGdlblN0YXRlLnBhZ2VXYXJuaW5nKSB7XG4gICAgY29uc3QgcGMgPSBnZW5TdGF0ZS5wYWdlQ291bnRFeGFjdCA/PyBnZW5TdGF0ZS5wYWdlQ291bnRFc3RpbWF0ZTtcbiAgICBjb25zdCBwY0xhYmVsID0gcGMgIT09IG51bGwgPyAoZ2VuU3RhdGUucGFnZUNvdW50RXhhY3QgIT09IG51bGwgPyBgJHtwY31gIDogYH4ke3BjfWApIDogbnVsbDtcbiAgICBjb25zdCBva1BhZ2UgPSBhd2FpdCBzaG93Q29uZmlybU1vZGFsKFxuICAgICAgJ1x1MjZBMCBQYWdlIENvdW50IE91dCBvZiBSYW5nZScsXG4gICAgICBgVGhlIENWIGlzIGVzdGltYXRlZCBhdCAke3BjTGFiZWwgPyBgJHtwY0xhYmVsfSBwYWdlJHtwYyAhPT0gMSA/ICdzJyA6ICcnfWAgOiAnYW4gdW51c3VhbCBwYWdlIGNvdW50J30sIHdoaWNoIGlzIG91dHNpZGUgdGhlIHJlY29tbWVuZGVkIHJhbmdlIGZvciBhIHNlbmlvciBjYW5kaWRhdGUgKDJcdTIwMTMzIHBhZ2VzKS5cXG5cXG5Db25zaWRlciBhZGp1c3RpbmcgeW91ciBsYXlvdXQgaW5zdHJ1Y3Rpb25zIGJlZm9yZSBnZW5lcmF0aW5nLlxcblxcblByb2NlZWQgYW55d2F5P2AsXG4gICAgICAnR2VuZXJhdGUgQW55d2F5J1xuICAgICk7XG4gICAgaWYgKCFva1BhZ2UpIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZnJlc2huZXNzLmlzU3RhbGUpIHtcbiAgICBsaW5lcy5wdXNoKGBcdTI2QTAgJHtmcmVzaG5lc3MuYXJpYUxhYmVsfWApO1xuICB9XG4gIGNvbnN0IHJldmlld2VkU2VjdGlvbnMgPSBbJ2V4cGVyaWVuY2VzJywgJ3NraWxscycsICdhY2hpZXZlbWVudHMnXS5maWx0ZXIoayA9PiBkZWNpc2lvbnNDb25maXJtZWRba10pO1xuICBpZiAocmV2aWV3ZWRTZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICBsaW5lcy5wdXNoKCdcdTI2QTAgTm8gY3VzdG9taXNhdGlvbiBzZWN0aW9ucyByZXZpZXdlZCBcdTIwMTQgZXhwZXJpZW5jZSwgc2tpbGwsIGFuZCBhY2hpZXZlbWVudCBzZWxlY3Rpb25zIGFyZSBhbGwgTExNIGRlZmF1bHRzLicpO1xuICB9XG4gIGxldCB3ZWFrQnVsbGV0Q291bnQgPSAwLCBwYXNzaXZlQnVsbGV0Q291bnQgPSAwO1xuICBPYmplY3QudmFsdWVzKHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzIHx8IHt9KS5mb3JFYWNoKGxpc3QgPT4ge1xuICAgIChsaXN0IHx8IFtdKS5mb3JFYWNoKGUgPT4ge1xuICAgICAgY29uc3QgdHh0ID0gdHlwZW9mIGUgPT09ICdzdHJpbmcnID8gZSA6ICgoZSAmJiBlLnRleHQpIHx8ICcnKTtcbiAgICAgIGlmICghdHh0LnRyaW0oKSB8fCAoZSAmJiBlLmhpZGRlbikpIHJldHVybjtcbiAgICAgIGNvbnN0IHdhcm4gPSB0eXBlb2YgX2FjaFZlcmJXYXJuaW5nID09PSAnZnVuY3Rpb24nID8gX2FjaFZlcmJXYXJuaW5nKHR4dCkgOiBudWxsO1xuICAgICAgaWYgKHdhcm4/LmxldmVsID09PSAncGFzc2l2ZScpIHBhc3NpdmVCdWxsZXRDb3VudCsrO1xuICAgICAgZWxzZSBpZiAod2Fybj8ubGV2ZWwgPT09ICd3ZWFrJykgd2Vha0J1bGxldENvdW50Kys7XG4gICAgfSk7XG4gIH0pO1xuICBpZiAod2Vha0J1bGxldENvdW50ID4gMCB8fCBwYXNzaXZlQnVsbGV0Q291bnQgPiAwKSB7XG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBpZiAocGFzc2l2ZUJ1bGxldENvdW50ID4gMCkgcGFydHMucHVzaChgJHtwYXNzaXZlQnVsbGV0Q291bnR9IHdpdGggcGFzc2l2ZSB2b2ljZWApO1xuICAgIGlmICh3ZWFrQnVsbGV0Q291bnQgPiAwKSBwYXJ0cy5wdXNoKGAke3dlYWtCdWxsZXRDb3VudH0gd2l0aCB3ZWFrIG9wZW5pbmcgdmVyYiR7d2Vha0J1bGxldENvdW50ICE9PSAxID8gJ3MnIDogJyd9YCk7XG4gICAgbGluZXMucHVzaChgXHUyNkEwICR7cGFydHMuam9pbignLCAnKX0gaW4gZXhwZXJpZW5jZSBidWxsZXRzIFx1MjAxNCBjb25zaWRlciBBSSByZXdyaXRlcyBpbiB0aGUgRXhwZXJpZW5jZSBCdWxsZXRzIGVkaXRvci5gKTtcbiAgfVxuICBsaW5lcy5wdXNoKCdcXG5Qcm9jZWVkPycpO1xuICByZXR1cm4gc2hvd0NvbmZpcm1Nb2RhbCgnXHVEODNEXHVEQ0M0IFByb2NlZWQgdG8gR2VuZXJhdGU/JywgbGluZXMuam9pbignXFxuJyksICdHZW5lcmF0ZSBOb3cnKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFN1Ym1pdCBhdWRpdCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gc3VibWl0U3BlbGxDaGVja0RlY2lzaW9ucygpIHtcbiAgLyogZHVja2Zsb3c6XG4gICAqICAgaWQ6IHNwZWxsX3VpX3N1Ym1pdF9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTA0LTIxVDE4OjAwOjAwWidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6c3BlbGwtY2hlY2suc3VibWl0XG4gICAqICAgY2FsbHM6XG4gICAqICAgLSBQT1NUIC9hcGkvc3BlbGwtY2hlY2stY29tcGxldGVcbiAgICogICAtIFBPU1QgL2FwaS9hY3Rpb25cbiAgICogICByZWFkczpcbiAgICogICAtIHdpbmRvdzpfc3BlbGxTdWdNYXBcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9zcGVsbC1jaGVjay1jb21wbGV0ZS5zcGVsbF9hdWRpdFxuICAgKiAgIC0gd2luZG93OnNwZWxsQXVkaXRcbiAgICogICBub3RlczogQ29sbGFwc2VzIHJldmlld2VkIHNwZWxsIHN1Z2dlc3Rpb25zIGludG8gdGhlIGNhbm9uaWNhbCBzcGVsbCBhdWRpdCwgcGVyc2lzdHMgdGhhdCBhdWRpdCBpbiBzZXNzaW9uIHN0YXRlLCBzaG93cyBhIHByZS1nZW5lcmF0aW9uIGNvbmZpcm1hdGlvbiBtb2RhbCwgYW5kIHRoZW4gdHJpZ2dlcnMgZ2VuZXJhdGlvbiB1c2luZyB0aGUgY29ycmVjdGVkIGNvbnRlbnQuXG4gICAqL1xuICAvLyBDb3VudCBpdGVtcyBzdGlsbCBtYXJrZWQgJ3BlbmRpbmcnIChub3QgZXhwbGljaXRseSByZXZpZXdlZClcbiAgY29uc3QgcGVuZGluZ0VudHJpZXMgPSBPYmplY3QudmFsdWVzKHdpbmRvdy5fc3BlbGxTdWdNYXAgfHwge30pLmZpbHRlcihlID0+IGUub3V0Y29tZSA9PT0gJ3BlbmRpbmcnKTtcbiAgaWYgKHBlbmRpbmdFbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBuID0gcGVuZGluZ0VudHJpZXMubGVuZ3RoO1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHNob3dDb25maXJtTW9kYWwoXG4gICAgICAnXHUyNkEwIFVucmV2aWV3ZWQgSXNzdWVzJyxcbiAgICAgIGAke259IGlzc3VlJHtuICE9PSAxID8gJ3MgaGF2ZScgOiAnIGhhcyd9IG5vdCBiZWVuIHJldmlld2VkIGFuZCB3aWxsIGJlIGlnbm9yZWQuXFxuUHJvY2VlZCBhbnl3YXk/YCxcbiAgICAgICdQcm9jZWVkJ1xuICAgICk7XG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcbiAgfVxuXG4gIC8vIENvbGxlY3QgYXVkaXQgZnJvbSBfc3BlbGxTdWdNYXBcbiAgY29uc3QgYXVkaXQgPSBPYmplY3QudmFsdWVzKHdpbmRvdy5fc3BlbGxTdWdNYXAgfHwge30pLmZpbHRlcihlID0+IGUub3V0Y29tZSAhPT0gJ3BlbmRpbmcnKTtcbiAgLy8gUmVtYWluaW5nICdwZW5kaW5nJyBpdGVtcyBhcmUgZXhwbGljaXRseSBhdXRvLWlnbm9yZWQgYWZ0ZXIgY29uZmlybWF0aW9uIGFib3ZlXG4gIE9iamVjdC52YWx1ZXMod2luZG93Ll9zcGVsbFN1Z01hcCB8fCB7fSkuZm9yRWFjaChlID0+IHtcbiAgICBpZiAoZS5vdXRjb21lID09PSAncGVuZGluZycpIHsgZS5vdXRjb21lID0gJ2lnbm9yZSc7IGF1ZGl0LnB1c2goZSk7IH1cbiAgfSk7XG4gIHNwZWxsQXVkaXQgPSBhdWRpdDtcblxuICBjb25zdCBsb2FkaW5nTXNnID0gYXBwZW5kTG9hZGluZ01lc3NhZ2UoJ1NhdmluZyBzcGVsbCBjaGVjayBkZWNpc2lvbnNcdTIwMjYnKTtcbiAgc2V0TG9hZGluZyh0cnVlLCAnU2F2aW5nIHNwZWxsLWNoZWNrIGRlY2lzaW9uc1x1MjAyNicpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9zcGVsbC1jaGVjay1jb21wbGV0ZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHNwZWxsX2F1ZGl0OiBzcGVsbEF1ZGl0IH0pXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgcmVtb3ZlTG9hZGluZ01lc3NhZ2UobG9hZGluZ01zZyk7XG4gICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBgRmFpbGVkIHRvIHNhdmUgc3BlbGwgY2hlY2s6ICR7ZGF0YS5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlTWFuYWdlci5tYXJrQ29udGVudENoYW5nZWQoKTtcbiAgICBjb25zdCBwcm9jZWVkID0gYXdhaXQgX2NvbmZpcm1Qcm9jZWVkVG9HZW5lcmF0ZSgpO1xuICAgIGlmICghcHJvY2VlZCkgcmV0dXJuO1xuICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIGBcdTI3MDUgU3BlbGwgY2hlY2sgY29tcGxldGUgXHUyMDE0ICR7c3BlbGxBdWRpdC5sZW5ndGh9IGl0ZW0ke3NwZWxsQXVkaXQubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9IHJldmlld2VkLiBHZW5lcmF0aW5nIHlvdXIgQ1ZcdTIwMjZgKTtcbiAgICBzY2hlZHVsZUF0c1JlZnJlc2goJ3Jldmlld19jaGVja3BvaW50Jyk7XG4gICAgYXdhaXQgZmV0Y2hTdGF0dXMoKTtcbiAgICBhd2FpdCBzZW5kQWN0aW9uKCdnZW5lcmF0ZV9jdicpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZW1vdmVMb2FkaW5nTWVzc2FnZShsb2FkaW5nTXNnKTtcbiAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgYFNwZWxsIGNoZWNrIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFeHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQge1xuICBzcGVsbEF1ZGl0LFxuICBwb3B1bGF0ZVNwZWxsQ2hlY2tUYWIsXG4gIHJlbmRlclNwZWxsQ2hlY2taZXJvU3RhdGUsXG4gIHN1Ym1pdEVtcHR5U3BlbGxDaGVjayxcbiAgYnVpbGRTcGVsbFN0YXRzU3VtbWFyeSxcbiAgcmVuZGVyU3BlbGxTdWdnZXN0aW9ucyxcbiAgYXBwbHlDdXN0b21TcGVsbENvcnJlY3Rpb24sXG4gIGFwcGx5U3BlbGxSZXBsYWNlbWVudCxcbiAgZGlzbWlzc1NwZWxsU3VnZ2VzdGlvbixcbiAgYWRkU3BlbGxXb3JkLFxuICBzdWJtaXRTcGVsbENoZWNrRGVjaXNpb25zLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL2Rvd25sb2FkLXRhYi5qc1xuICogRmlsZSBSZXZpZXcgdGFiOiBBVFMgdmFsaWRhdGlvbiwgZ2VuZXJhdGVkLWZpbGUgZG93bmxvYWRzLCBwZXJzdWFzaW9uIGNoZWNrLFxuICogYW5kIHJlZmluZW1lbnQgc2hvcnRjdXRzLlxuICpcbiAqIERlcGVuZGVuY2llcyAocmVzb2x2ZWQgdGhyb3VnaCBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICBlc2NhcGVIdG1sLCBiYWNrVG9QaGFzZVxuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcignZG93bmxvYWQtdGFiJyk7XG5cbmltcG9ydCB7IHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5cbmZ1bmN0aW9uIF9jb2xsZWN0RG93bmxvYWRhYmxlRmlsZXMoY3ZEYXRhID0ge30pIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKTtcbiAgY29uc3QgZmlsZXMgPSBbXTtcbiAgY29uc3QgcmF3RmlsZXMgPSBBcnJheS5pc0FycmF5KGN2RGF0YS5maWxlcykgPyBjdkRhdGEuZmlsZXMgOiBbXTtcbiAgY29uc3QgY2FuZGlkYXRlRmlsZXMgPSBbXG4gICAgLi4ucmF3RmlsZXMsXG4gICAgY3ZEYXRhLmZpbmFsX2h0bWwsXG4gICAgY3ZEYXRhLmZpbmFsX3BkZixcbiAgICBjdkRhdGEuaHRtbCxcbiAgICBjdkRhdGEucGRmLFxuICAgIGN2RGF0YS5kb2N4LFxuICAgIGN2RGF0YS5hdHNfZG9jeCxcbiAgXS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBjYW5kaWRhdGVGaWxlcykge1xuICAgIGlmIChzZWVuLmhhcyhmaWxlbmFtZSkpIGNvbnRpbnVlO1xuICAgIHNlZW4uYWRkKGZpbGVuYW1lKTtcblxuICAgIGxldCBpY29uID0gJ1x1RDgzRFx1RENDMSc7XG4gICAgbGV0IGRlc2NyaXB0aW9uID0gJ0dlbmVyYXRlZCBmaWxlJztcbiAgICBsZXQgZm9ybWF0ID0gJ290aGVyJztcblxuICAgIGlmIChmaWxlbmFtZS5lbmRzV2l0aCgnLnBkZicpKSB7XG4gICAgICBpY29uID0gZmlsZW5hbWUuaW5jbHVkZXMoJ0FUUycpID8gJ1x1RDgzRVx1REQxNicgOiAnXHVEODNEXHVEQ0M0JztcbiAgICAgIGRlc2NyaXB0aW9uID0gZmlsZW5hbWUuaW5jbHVkZXMoJ0FUUycpXG4gICAgICAgID8gJ0FUUy1vcHRpbWlzZWQgUERGIFx1MjAxNCBtYWNoaW5lLXJlYWRhYmxlIGZvciBhdXRvbWF0ZWQgc2NyZWVuaW5nJ1xuICAgICAgICA6ICdIdW1hbi1yZWFkYWJsZSBQREYgXHUyMDE0IGZvciBodW1hbiByZXZpZXdlcnMgYW5kIHByaW50aW5nJztcbiAgICAgIGZvcm1hdCA9ICdwZGYnO1xuICAgIH0gZWxzZSBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoJy5kb2N4JykpIHtcbiAgICAgIGljb24gPSAnXHVEODNEXHVEQ0REJztcbiAgICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCdDb3ZlckxldHRlcl8nKSkge1xuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDb3ZlciBsZXR0ZXIgXHUyMDE0IFdvcmQgZG9jdW1lbnQgZm9yIHRoZSBhcHBsaWNhdGlvbic7XG4gICAgICB9IGVsc2UgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoJ1NjcmVlbmluZ18nKSkge1xuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTY3JlZW5pbmcgcXVlc3Rpb24gcmVzcG9uc2VzIFx1MjAxNCBXb3JkIGRvY3VtZW50JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlc2NyaXB0aW9uID0gZmlsZW5hbWUuaW5jbHVkZXMoJ0FUUycpXG4gICAgICAgICAgPyAnQVRTLW9wdGltaXNlZCBXb3JkIGRvY3VtZW50IFx1MjAxNCBrZXl3b3JkLW9wdGltaXNlZCBmb3Igam9iIGFwcGxpY2F0aW9ucydcbiAgICAgICAgICA6ICdIdW1hbi1yZWFkYWJsZSBXb3JkIGRvY3VtZW50IFx1MjAxNCBlZGl0YWJsZSBmb3JtYXQnO1xuICAgICAgfVxuICAgICAgZm9ybWF0ID0gJ2RvY3gnO1xuICAgIH0gZWxzZSBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoJy5odG1sJykpIHtcbiAgICAgIGljb24gPSAnXHVEODNDXHVERjEwJztcbiAgICAgIGNvbnN0IGlzUHJldmlldyA9IC9wcmV2aWV3L2kudGVzdChmaWxlbmFtZSk7XG4gICAgICBkZXNjcmlwdGlvbiA9IGlzUHJldmlld1xuICAgICAgICA/ICdMYXlvdXQgcHJldmlldyBcdTIwMTQgaW50ZXJtZWRpYXRlIHdvcmtpbmcgZmlsZSwgbm90IGZvciBzdWJtaXNzaW9uJ1xuICAgICAgICA6ICdIVE1MIGZvcm1hdCB3aXRoIGVtYmVkZGVkIEpTT04tTEQgc3RydWN0dXJlZCBkYXRhJztcbiAgICAgIGZvcm1hdCA9IGlzUHJldmlldyA/ICdwcmV2aWV3JyA6ICdodG1sJztcbiAgICB9IGVsc2UgaWYgKGZpbGVuYW1lID09PSAnam9iX2Rlc2NyaXB0aW9uLnR4dCcpIHtcbiAgICAgIGljb24gPSAnXHVEODNEXHVEQ0NCJztcbiAgICAgIGRlc2NyaXB0aW9uID0gJ09yaWdpbmFsIGpvYiBkZXNjcmlwdGlvbiByZWZlcmVuY2UnO1xuICAgIH1cblxuICAgIGZpbGVzLnB1c2goeyBmaWxlbmFtZSwgZGVzY3JpcHRpb24sIGljb24sIGZvcm1hdCB9KTtcbiAgfVxuXG4gIHJldHVybiBmaWxlcztcbn1cblxuZnVuY3Rpb24gX3JlbmRlclZhbGlkYXRpb25TdW1tYXJ5KGNoZWNrcywgc3VtbWFyeSwgcGFnZUNvdW50LCBhdHNFcnJvcikge1xuICBsZXQgaHRtbCA9ICcnO1xuXG4gIGlmIChwYWdlQ291bnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBwYWdlV2FybmluZyA9IHBhZ2VDb3VudCA8IDEuNSB8fCBwYWdlQ291bnQgPiAzO1xuICAgIGh0bWwgKz0gYDxkaXYgc3R5bGU9XCJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiR7cGFnZVdhcm5pbmcgPyAnI2ZlZjljMycgOiAnI2YwZmRmNCd9O1xuICAgICAgICAgICAgICBib3JkZXI6MXB4IHNvbGlkICR7cGFnZVdhcm5pbmcgPyAnI2ZkZTA0NycgOiAnI2JiZjdkMCd9O1xuICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjhweCAxNHB4O21hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjEuM2VtO1wiPlx1RDgzRFx1RENDNDwvc3Bhbj5cbiAgICAgIDxzdHJvbmc+JHtwYWdlQ291bnR9IHBhZ2Uke3BhZ2VDb3VudCAhPT0gMSA/ICdzJyA6ICcnfTwvc3Ryb25nPlxuICAgICAgJHtwYWdlV2FybmluZ1xuICAgICAgICA/ICc8c3BhbiBzdHlsZT1cImNvbG9yOiNkOTc3MDY7Zm9udC1zaXplOjAuODhlbTtcIj5cdTI2QTAgU2VuaW9yIGNhbmRpZGF0ZSB0YXJnZXQgaXMgMlx1MjAxMzMgcGFnZXM8L3NwYW4+J1xuICAgICAgICA6ICc8c3BhbiBzdHlsZT1cImNvbG9yOiMxNjY1MzQ7Zm9udC1zaXplOjAuODhlbTtcIj5cdTI3MTMgR29vZCBsZW5ndGg8L3NwYW4+J31cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgaWYgKGF0c0Vycm9yKSB7XG4gICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZTJlMjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7bWFyZ2luLWJvdHRvbToyMHB4O1wiPlxuICAgICAgPHN0cm9uZz5cdTI2QTAgQVRTIHZhbGlkYXRpb24gZXJyb3I6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbChhdHNFcnJvcil9XG4gICAgPC9kaXY+YDtcbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGlmICghY2hlY2tzLmxlbmd0aCkge1xuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgY29uc3Qga2V5d29yZEZhaWwgPSBjaGVja3Muc29tZSgoY2hlY2spID0+IGNoZWNrLm5hbWUgPT09ICdhdHNfa2V5d29yZF9wcmVzZW5jZScgJiYgY2hlY2suc3RhdHVzID09PSAnZmFpbCcpO1xuICBjb25zdCBzdGF0dXNDb2xvdXIgPSBzdW1tYXJ5LmZhaWwgPiAwID8gJyNkYzI2MjYnIDogc3VtbWFyeS53YXJuID4gMCA/ICcjZDk3NzA2JyA6ICcjMTY2NTM0JztcbiAgY29uc3Qgc3RhdHVzSWNvbiA9IHN1bW1hcnkuZmFpbCA+IDAgPyAnXHUyNzRDJyA6IHN1bW1hcnkud2FybiA+IDAgPyAnXHUyNkEwJyA6ICdcdTI3MDUnO1xuXG4gIGh0bWwgKz0gYFxuICAgIDxkZXRhaWxzIG9wZW4gc3R5bGU9XCJtYXJnaW4tYm90dG9tOjIwcHg7XCI+XG4gICAgICA8c3VtbWFyeSBzdHlsZT1cImN1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDA7Y29sb3I6JHtzdGF0dXNDb2xvdXJ9O1wiPlxuICAgICAgICAke3N0YXR1c0ljb259IEFUUyBSZXBvcnQgXHUyMDE0ICR7c3VtbWFyeS5wYXNzfSBwYXNzLCAke3N1bW1hcnkud2Fybn0gd2FybiwgJHtzdW1tYXJ5LmZhaWx9IGZhaWxcbiAgICAgIDwvc3VtbWFyeT5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInJldmlldy10YWJsZVwiIHN0eWxlPVwibWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZTowLjg3ZW07XCI+XG4gICAgICAgIDx0aGVhZD48dHI+PHRoPkNoZWNrPC90aD48dGg+Rm9ybWF0PC90aD48dGg+U3RhdHVzPC90aD48dGg+RGV0YWlsPC90aD48L3RyPjwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5gO1xuXG4gIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IGNoZWNrLnN0YXR1cyA9PT0gJ3Bhc3MnID8gJyNmMGZkZjQnIDogY2hlY2suc3RhdHVzID09PSAnd2FybicgPyAnI2ZlZjljMycgOiAnI2ZlZTJlMic7XG4gICAgY29uc3QgaWNvbiA9IGNoZWNrLnN0YXR1cyA9PT0gJ3Bhc3MnID8gJ1x1MjcwNScgOiBjaGVjay5zdGF0dXMgPT09ICd3YXJuJyA/ICdcdTI2QTAnIDogJ1x1Mjc0Qyc7XG4gICAgY29uc3QgZm9ybWF0QmFkZ2UgPSBgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MTFweDtiYWNrZ3JvdW5kOiNlMGU3ZmY7Y29sb3I6IzM3MzBhMztib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjFweCA1cHg7XCI+JHtlc2NhcGVIdG1sKGNoZWNrLmZvcm1hdCl9PC9zcGFuPmA7XG5cbiAgICBodG1sICs9IGA8dHIgc3R5bGU9XCJiYWNrZ3JvdW5kOiR7YmFja2dyb3VuZH07XCI+XG4gICAgICA8dGQgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7XCI+JHtlc2NhcGVIdG1sKGNoZWNrLmxhYmVsKX08L3RkPlxuICAgICAgPHRkPiR7Zm9ybWF0QmFkZ2V9PC90ZD5cbiAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiR7aWNvbn08L3RkPlxuICAgICAgPHRkPjxzbWFsbD4ke2VzY2FwZUh0bWwoY2hlY2suZGV0YWlsKX08L3NtYWxsPjwvdGQ+XG4gICAgPC90cj5gO1xuICB9XG5cbiAgaHRtbCArPSAnPC90Ym9keT48L3RhYmxlPjwvZGV0YWlscz4nO1xuXG4gIGlmIChzdW1tYXJ5LmZhaWwgPiAwKSB7XG4gICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZTJlMjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMHB4IDE2cHg7bWFyZ2luLWJvdHRvbToyMHB4O1wiPlxuICAgICAgPHN0cm9uZz5cdTI3NEMgRml4IHJlcXVpcmVkOjwvc3Ryb25nPiBTb21lIGNoZWNrcyBmYWlsZWQuIEJsb2NrZWQgZm9ybWF0cyBhcmUgZ3JleWVkIG91dCBiZWxvdy5cbiAgICAgICR7a2V5d29yZEZhaWxcbiAgICAgICAgPyAnPGJyPjxzdHJvbmc+QVRTIGtleXdvcmQgZmFpbHVyZSBibG9ja3MgYWxsIGRvd25sb2Fkczwvc3Ryb25nPiBcdTIwMTQgcmUtcnVuIGN1c3RvbWlzYXRpb25zIHRvIGltcHJvdmUga2V5d29yZCBjb3ZlcmFnZS4nXG4gICAgICAgIDogJyd9XG4gICAgPC9kaXY+YDtcbiAgfVxuXG4gIHJldHVybiBodG1sO1xufVxuXG4vLyBDaGVja3MgdGhhdCBhcmUgYWR2aXNvcnkgb25seSBcdTIwMTQgdGhleSB3YXJuIGJ1dCBuZXZlciBibG9jayB0aGUgZG93bmxvYWQgYnV0dG9uLlxuLy8gT25seSBnZW51aW5lbHkgY3JpdGljYWwgZmFpbHVyZXMgKGZpbGUgbm90IGZvdW5kLCBQREYgdW5yZWFkYWJsZSwgYnJva2VuIG91dHB1dClcbi8vIHNob3VsZCBwcmV2ZW50IGEgdXNlciBmcm9tIGRvd25sb2FkaW5nLlxuY29uc3QgX05PTl9CTE9DS0lOR19DSEVDS1MgPSBuZXcgU2V0KFtcbiAgJ2N2X3BhZ2VfY291bnQnLCAgICAgICAgICAgICAgIC8vIGFkdmlzb3J5OiBwYWdlIGxlbmd0aCBvdXRzaWRlIGlkZWFsIHJhbmdlXG4gICdwZGZfdXNfbGV0dGVyJywgICAgICAgICAgICAgICAvLyBhZHZpc29yeTogcGFnZSBzaXplXG4gICdkb2N4X3plcm9fc2hhcGVzJywgICAgICAgICAgICAvLyBhZHZpc29yeTogQVRTIGZvcm1hdHRpbmcgaGludFxuICAnZG9jeF9zdGFuZGFyZF9oZWFkaW5ncycsICAgICAgLy8gYWR2aXNvcnk6IEFUUyBoZWFkaW5nIHRleHRcbiAgJ2RvY3hfaGVhZGluZzFfcHJlc2VudCcsICAgICAgIC8vIGFkdmlzb3J5OiBBVFMgaGVhZGluZyBzdHlsZVxuICAnZG9jeF9kYXRlX2Zvcm1hdF9jb25zaXN0ZW50JywgLy8gYWR2aXNvcnk6IGRhdGUgZm9ybWF0IGNvbnNpc3RlbmN5XG4gICdkb2N4X3B1YmxpY2F0aW9uc19oZWFkaW5nJywgICAvLyBhZHZpc29yeTogcHVibGljYXRpb25zIGhlYWRpbmcgdGV4dFxuICAnaHRtbF9qc29ubGRfdmFsaWRfcGVyc29uJywgICAgLy8gYWR2aXNvcnk6IEpTT04tTEQgc2NoZW1hIHR5cGVcbiAgJ2h0bWxfanNvbmxkX2tub3dzX2Fib3V0JywgICAgIC8vIGFkdmlzb3J5OiBKU09OLUxEIHNraWxscyBwb3B1bGF0aW9uXG5dKTtcblxuZnVuY3Rpb24gX3JlbmRlckRvd25sb2FkR3JpZChmaWxlcywgY2hlY2tzLCBzdW1tYXJ5LCBnZW5lcmF0ZWRBdCA9IG51bGwsIGdlbmVyYXRpb25SdW4gPSBudWxsKSB7XG4gIGNvbnN0IGtleXdvcmRGYWlsID0gY2hlY2tzLnNvbWUoKGNoZWNrKSA9PiBjaGVjay5uYW1lID09PSAnYXRzX2tleXdvcmRfcHJlc2VuY2UnICYmIGNoZWNrLnN0YXR1cyA9PT0gJ2ZhaWwnKTtcbiAgY29uc3QgaXNDcml0aWNhbEZhaWwgPSAoY2hlY2spID0+IGNoZWNrLnN0YXR1cyA9PT0gJ2ZhaWwnICYmICFfTk9OX0JMT0NLSU5HX0NIRUNLUy5oYXMoY2hlY2submFtZSk7XG4gIGNvbnN0IGJsb2NrRG9jeCA9IGtleXdvcmRGYWlsIHx8IGNoZWNrcy5zb21lKChjaGVjaykgPT4gY2hlY2suZm9ybWF0ID09PSAnZG9jeCcgJiYgaXNDcml0aWNhbEZhaWwoY2hlY2spKTtcbiAgY29uc3QgYmxvY2tIdG1sID0ga2V5d29yZEZhaWwgfHwgY2hlY2tzLnNvbWUoKGNoZWNrKSA9PiBjaGVjay5mb3JtYXQgPT09ICdodG1sJyAmJiBpc0NyaXRpY2FsRmFpbChjaGVjaykpO1xuICBjb25zdCBibG9ja1BkZiAgPSBrZXl3b3JkRmFpbCB8fCBjaGVja3Muc29tZSgoY2hlY2spID0+IGNoZWNrLmZvcm1hdCA9PT0gJ3BkZicgICYmIGlzQ3JpdGljYWxGYWlsKGNoZWNrKSk7XG5cbiAgbGV0IGdlbmVyYXRlZExhYmVsID0gJyc7XG4gIGlmIChnZW5lcmF0ZWRBdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUoZ2VuZXJhdGVkQXQpO1xuICAgICAgY29uc3QgZGF0ZVN0ciA9IGQudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICBtb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIH0pO1xuICAgICAgZ2VuZXJhdGVkTGFiZWwgPSAoZ2VuZXJhdGlvblJ1biAmJiBnZW5lcmF0aW9uUnVuID4gMSlcbiAgICAgICAgPyBgUnVuICMke2dlbmVyYXRpb25SdW59IFx1MjAxNCAke2RhdGVTdHJ9YFxuICAgICAgICA6IGRhdGVTdHI7XG4gICAgfSBjYXRjaCAoXykgeyAvKiBpZ25vcmUgKi8gfVxuICB9XG5cbiAgbGV0IGh0bWwgPSAnPGRpdiBjbGFzcz1cImRvd25sb2FkLXNlY3Rpb25cIj48ZGl2IGNsYXNzPVwiZG93bmxvYWQtZ3JpZFwiPic7XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgaHRtbCArPSAnPHA+Tm8gZG93bmxvYWRhYmxlIGZpbGVzIGZvdW5kLiBQbGVhc2UgdHJ5IGdlbmVyYXRpbmcgeW91ciBDViBhZ2Fpbi48L3A+JztcbiAgICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nO1xuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgYmxvY2tlZCA9IChmaWxlLmZvcm1hdCA9PT0gJ2RvY3gnICYmIGJsb2NrRG9jeClcbiAgICAgIHx8IChmaWxlLmZvcm1hdCA9PT0gJ2h0bWwnICYmIGJsb2NrSHRtbClcbiAgICAgIHx8IChmaWxlLmZvcm1hdCA9PT0gJ3BkZicgJiYgYmxvY2tQZGYpO1xuICAgIGNvbnN0IGJsb2NrZWRTdHlsZSA9IGJsb2NrZWRcbiAgICAgID8gJ2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5OjAuNDtiYWNrZ3JvdW5kOiM5Y2EzYWY7Ym9yZGVyLWNvbG9yOiM5Y2EzYWY7J1xuICAgICAgOiAnJztcbiAgICBjb25zdCBibG9ja2VkTWVzc2FnZSA9IGJsb2NrZWRcbiAgICAgID8gJzxkaXYgc3R5bGU9XCJmb250LXNpemU6MC43OGVtO2NvbG9yOiNkYzI2MjY7bWFyZ2luLXRvcDo0cHg7XCI+XHUyNkQ0IEJsb2NrZWQgXHUyMDE0IG91dHB1dCBmaWxlIGNvdWxkIG5vdCBiZSBnZW5lcmF0ZWQ8L2Rpdj4nXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IHRpbWVzdGFtcExpbmUgPSBnZW5lcmF0ZWRMYWJlbFxuICAgICAgPyBgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjc1ZW07Y29sb3I6IzljYTNhZjttYXJnaW4tdG9wOjNweDtcIj5HZW5lcmF0ZWQgJHtnZW5lcmF0ZWRMYWJlbH08L2Rpdj5gXG4gICAgICA6ICc8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuNzVlbTtjb2xvcjojYzBjNGNjO21hcmdpbi10b3A6M3B4O1wiPk5vdCB5ZXQgZ2VuZXJhdGVkPC9kaXY+JztcblxuICAgIGNvbnN0IHByZXZpZXdCYWRnZSA9IGZpbGUuZm9ybWF0ID09PSAncHJldmlldydcbiAgICAgID8gJzxzcGFuIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6NnB4O2ZvbnQtc2l6ZTowLjc1ZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM5MjQwMGU7YmFja2dyb3VuZDojZmVmM2M3O2JvcmRlcjoxcHggc29saWQgI2ZjZDM0ZDtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjFweCA1cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO1wiPldvcmtpbmcgZmlsZSBcdTIwMTQgbm90IGZvciBzdWJtaXNzaW9uPC9zcGFuPidcbiAgICAgIDogJyc7XG5cbiAgICBodG1sICs9IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJkb3dubG9hZC1pdGVtXCIgc3R5bGU9XCIke2Jsb2NrZWQgPyAnb3BhY2l0eTowLjc1OycgOiAnJ30ke2ZpbGUuZm9ybWF0ID09PSAncHJldmlldycgPyAnYm9yZGVyLXN0eWxlOmRhc2hlZDsnIDogJyd9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkb3dubG9hZC1pY29uXCI+JHtmaWxlLmljb259PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkb3dubG9hZC1pbmZvXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRvd25sb2FkLW5hbWVcIj4ke2VzY2FwZUh0bWwoZmlsZS5maWxlbmFtZSl9JHtwcmV2aWV3QmFkZ2V9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRvd25sb2FkLWRlc2NyaXB0aW9uXCI+JHtlc2NhcGVIdG1sKGZpbGUuZGVzY3JpcHRpb24pfTwvZGl2PlxuICAgICAgICAgICR7dGltZXN0YW1wTGluZX1cbiAgICAgICAgICAke2Jsb2NrZWRNZXNzYWdlfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgJHtibG9ja2VkXG4gICAgICAgICAgPyBgPGJ1dHRvbiBjbGFzcz1cImJ0bi1kb3dubG9hZFwiIGRpc2FibGVkIHN0eWxlPVwiJHtibG9ja2VkU3R5bGV9XCI+QmxvY2tlZDwvYnV0dG9uPmBcbiAgICAgICAgICA6ICgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IF9zaWQgPSB0eXBlb2YgZ2V0U2Vzc2lvbklkRnJvbVVSTCA9PT0gJ2Z1bmN0aW9uJyA/IGdldFNlc3Npb25JZEZyb21VUkwoKSA6IG51bGw7XG4gICAgICAgICAgICAgIGNvbnN0IF9zcCAgPSBfc2lkID8gYD9zZXNzaW9uX2lkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KF9zaWQpfWAgOiAnJztcbiAgICAgICAgICAgICAgcmV0dXJuIGA8YSBocmVmPVwiL2FwaS9kb3dubG9hZC8ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlLmZpbGVuYW1lKX0ke19zcH1cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWRvd25sb2FkIGRvd25sb2FkLWxpbmtcIiBkb3dubG9hZD1cIiR7ZXNjYXBlSHRtbChmaWxlLmZpbGVuYW1lKX1cIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOm5vbmU7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtcIj5Eb3dubG9hZDwvYT5gO1xuICAgICAgICAgICAgfSkoKX1cbiAgICAgIDwvZGl2PmA7XG4gIH1cblxuICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nO1xuICBpZiAoc3VtbWFyeS5mYWlsID4gMCAmJiBmaWxlcy5sZW5ndGgpIHtcbiAgICBodG1sICs9ICc8cCBzdHlsZT1cIm1hcmdpbi10b3A6MTJweDtjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjg4ZW07XCI+QmxvY2tlZCBmb3JtYXRzIHJlZmxlY3QgQVRTIHZhbGlkYXRpb24gZmFpbHVyZXMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIG91dHB1dCB0eXBlcy48L3A+JztcbiAgfVxuICByZXR1cm4gaHRtbDtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclJlZmluZW1lbnRQYW5lbCgpIHtcbiAgcmV0dXJuIGA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoyNHB4O3BhZGRpbmc6MTZweDtiYWNrZ3JvdW5kOiNmOGZhZmM7Ym9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czo4cHg7XCI+XG4gICAgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjEwcHg7Y29sb3I6IzM3NDE1MTtcIj5cdTIxQkIgSXRlcmF0aXZlIFJlZmluZW1lbnQ8L2Rpdj5cbiAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuOWVtO2NvbG9yOiM2YjcyODA7bWFyZ2luLWJvdHRvbToxMnB4O1wiPlxuICAgICAgR28gYmFjayB0byByZWZpbmUgYW4gZWFybGllciBzdGVwIFx1MjAxNCBhbGwgcHJpb3IgZGVjaXNpb25zIGFuZCBhcHByb3ZhbHMgYXJlIHByZXNlcnZlZC5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwO1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1zZWNvbmRhcnlcIiBvbmNsaWNrPVwiYmFja1RvUGhhc2UoJ2N1c3RvbWl6YXRpb25zJylcIiB0aXRsZT1cIlJldHVybiB0byBDdXN0b21pc2F0aW9ucyBzdGVwXCI+XG4gICAgICAgIFx1MjFCQiBSZWZpbmUgQ3VzdG9taXNhdGlvbnNcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1zZWNvbmRhcnlcIiBvbmNsaWNrPVwiYmFja1RvUGhhc2UoJ3Jld3JpdGUnKVwiIHRpdGxlPVwiUmV0dXJuIHRvIFJld3JpdGUgUmV2aWV3IHN0ZXBcIj5cbiAgICAgICAgXHUyMUJCIFJlZmluZSBSZXdyaXRlc1xuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiIG9uY2xpY2s9XCJiYWNrVG9QaGFzZSgnYW5hbHlzaXMnKVwiIHRpdGxlPVwiUmV0dXJuIHRvIEFuYWx5c2lzIHN0ZXBcIj5cbiAgICAgICAgXHUyMUJCIFJlLWFuYWx5c2UgSm9iXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX2ZldGNoUGVyc3Vhc2lvbkh0bWwoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9wZXJzdWFzaW9uLWNoZWNrJyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8ICFkYXRhLm9rKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3Qgc3VtbWFyeSA9IGRhdGEuc3VtbWFyeSB8fCB7IGZsYWdnZWQ6IDAsIHN0cm9uZ19jb3VudDogMCwgdG90YWxfYnVsbGV0czogMCB9O1xuICAgIGNvbnN0IGZpbmRpbmdzID0gQXJyYXkuaXNBcnJheShkYXRhLmZpbmRpbmdzKSA/IGRhdGEuZmluZGluZ3MgOiBbXTtcbiAgICBjb25zdCBzY29yZUNvbG9yID0gc3VtbWFyeS5mbGFnZ2VkID09PSAwID8gJyMxMGI5ODEnIDogc3VtbWFyeS5mbGFnZ2VkIDw9IDMgPyAnI2Y1OWUwYicgOiAnI2VmNDQ0NCc7XG4gICAgY29uc3Qgc2NvcmVMYWJlbCA9IHN1bW1hcnkuZmxhZ2dlZCA9PT0gMFxuICAgICAgPyAnRXhjZWxsZW50J1xuICAgICAgOiBzdW1tYXJ5LmZsYWdnZWQgPD0gM1xuICAgICAgICA/ICdHb29kIFx1MjAxNCBtaW5vciBpbXByb3ZlbWVudHMgcG9zc2libGUnXG4gICAgICAgIDogJ05lZWRzIGF0dGVudGlvbic7XG5cbiAgICBsZXQgaHRtbCA9IGA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoyMHB4O2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtib3JkZXItcmFkaXVzOjhweDtvdmVyZmxvdzpoaWRkZW47XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzoxNHB4IDE2cHg7YmFja2dyb3VuZDojZjhmYWZjO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7XCJcbiAgICAgICAgICAgb25jbGljaz1cInRoaXMubmV4dEVsZW1lbnRTaWJsaW5nLnN0eWxlLmRpc3BsYXk9dGhpcy5uZXh0RWxlbWVudFNpYmxpbmcuc3R5bGUuZGlzcGxheT09PSdub25lJz8nYmxvY2snOidub25lJ1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxZjI5Mzc7XCI+XHVEODNEXHVEQ0FBIEJ1bGxldCBQZXJzdWFzaXZlbmVzczwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjEycHg7YmFja2dyb3VuZDoke3Njb3JlQ29sb3J9O2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoycHggOHB4O2ZvbnQtc2l6ZTowLjhlbTtcIj4ke3Njb3JlTGFiZWx9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzZiNzI4MDtcIj5cbiAgICAgICAgICAke3N1bW1hcnkuc3Ryb25nX2NvdW50fS8ke3N1bW1hcnkudG90YWxfYnVsbGV0c30gc3Ryb25nIFx1MDBCNyAke3N1bW1hcnkuZmxhZ2dlZH0gZmxhZ2dlZCBcdTAwQjcgY2xpY2sgdG8gJHtzdW1tYXJ5LmZsYWdnZWQgPiAwID8gJ2V4cGFuZCcgOiAnY29sbGFwc2UnfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG5cbiAgICBpZiAoZmluZGluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cInBhZGRpbmc6MTJweCAxNnB4O2Rpc3BsYXk6JHtzdW1tYXJ5LmZsYWdnZWQgPD0gMyA/ICdibG9jaycgOiAnbm9uZSd9O1wiPmA7XG4gICAgICBmb3IgKGNvbnN0IGZpbmRpbmcgb2YgZmluZGluZ3MpIHtcbiAgICAgICAgY29uc3Qgc2V2ZXJpdHkgPSBmaW5kaW5nLnNldmVyaXR5ID09PSAnd2FybmluZydcbiAgICAgICAgICA/IHsgYmFja2dyb3VuZDogJyNmZmY3ZWQnLCBib3JkZXI6ICcjZjU5ZTBiJywgbGFiZWw6ICdcdTI2QTAgV2FybmluZycgfVxuICAgICAgICAgIDogeyBiYWNrZ3JvdW5kOiAnI2YwZjlmZicsIGJvcmRlcjogJyMzYjgyZjYnLCBsYWJlbDogJ1x1MjEzOSBJbmZvJyB9O1xuICAgICAgICBjb25zdCB0cnVuY2F0ZWRUZXh0ID0gZmluZGluZy50ZXh0ICYmIGZpbmRpbmcudGV4dC5sZW5ndGggPiAxMjBcbiAgICAgICAgICA/IGAke2ZpbmRpbmcudGV4dC5zbGljZSgwLCAxMjApfVx1MjAyNmBcbiAgICAgICAgICA6IGZpbmRpbmcudGV4dCB8fCAnJztcbiAgICAgICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nOjEwcHggMTJweDtiYWNrZ3JvdW5kOiR7c2V2ZXJpdHkuYmFja2dyb3VuZH07Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkICR7c2V2ZXJpdHkuYm9yZGVyfTtib3JkZXItcmFkaXVzOjAgNnB4IDZweCAwO1wiPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC44ZW07Y29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjRweDtcIj5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZDoke3NldmVyaXR5LmJvcmRlcn07Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjNweDtwYWRkaW5nOjFweCA2cHg7Zm9udC1zaXplOjAuOWVtO1wiPiR7c2V2ZXJpdHkubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgQnVsbGV0ICR7KGZpbmRpbmcuYnVsbGV0X2luZGV4ID8/IDApICsgMX0ke2ZpbmRpbmcuZXhwX2lkID8gYCBcdTAwQjcgJHtlc2NhcGVIdG1sKGZpbmRpbmcuZXhwX2lkKX1gIDogJyd9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjllbTtjb2xvcjojMzc0MTUxO21hcmdpbi1ib3R0b206NnB4O1wiPlwiJHtlc2NhcGVIdG1sKHRydW5jYXRlZFRleHQpfVwiPC9kaXY+XG4gICAgICAgICAgPHVsIHN0eWxlPVwibWFyZ2luOjA7cGFkZGluZy1sZWZ0OjE4cHg7XCI+YDtcbiAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBmaW5kaW5nLmlzc3VlcyB8fCBbXSkge1xuICAgICAgICAgIGh0bWwgKz0gYDxsaSBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjJweDtcIj4ke2VzY2FwZUh0bWwoaXNzdWUuc3VnZ2VzdGlvbil9PC9saT5gO1xuICAgICAgICB9XG4gICAgICAgIGh0bWwgKz0gJzwvdWw+PC9kaXY+JztcbiAgICAgIH1cbiAgICAgIGh0bWwgKz0gJzwvZGl2Pic7XG4gICAgfSBlbHNlIHtcbiAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9XCJwYWRkaW5nOjEycHggMTZweDtjb2xvcjojMTBiOTgxO2ZvbnQtc2l6ZTowLjllbTtcIj5BbGwgYnVsbGV0cyBtZWV0IHBlcnN1YXNpdmVuZXNzIGNyaXRlcmlhLjwvZGl2Pic7XG4gICAgfVxuXG4gICAgLy8gTmFycmF0aXZlLXRocmVhZCBhZHZpc29yeSAoR0FQLTI4MSlcbiAgICBjb25zdCBudGEgPSBzdW1tYXJ5Lm5hcnJhdGl2ZV90aHJlYWRfYWR2aXNvcnk7XG4gICAgaWYgKG50YSkge1xuICAgICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cInBhZGRpbmc6MTBweCAxNnB4O2JhY2tncm91bmQ6I2ZlZjljMztib3JkZXItdG9wOjFweCBzb2xpZCAjZmRlNjhhO1wiPlxuICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojOTI0MDBlO1wiPlx1RDgzRVx1RERGNSBOYXJyYXRpdmUgZm9jdXMgYWR2aXNvcnk6PC9zcGFuPlxuICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjllbTtjb2xvcjojNzgzNTBmO21hcmdpbi1sZWZ0OjZweDtcIj4ke2VzY2FwZUh0bWwobnRhLmRldGFpbCl9PC9zcGFuPlxuICAgICAgPC9kaXY+YDtcbiAgICB9XG5cbiAgICAvLyBOYXJyYXRpdmUtYXJjIGFkdmlzb3J5IChHQVAtMTcpOiByZWNlbnQgcm9sZSBzaG91bGQgc2hvdyBzdHJvbmdlc3QgdmVyYnNcbiAgICBjb25zdCBuYWEgPSBzdW1tYXJ5Lm5hcnJhdGl2ZV9hcmNfYWR2aXNvcnk7XG4gICAgaWYgKG5hYSkge1xuICAgICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cInBhZGRpbmc6MTBweCAxNnB4O2JhY2tncm91bmQ6I2ZmZjdlZDtib3JkZXItdG9wOjFweCBzb2xpZCAjZmVkN2FhO1wiPlxuICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojOWEzNDEyO1wiPlx1RDgzRFx1RENDOCBOYXJyYXRpdmUgYXJjIGFkdmlzb3J5Ojwvc3Bhbj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC45ZW07Y29sb3I6IzdjMmQxMjttYXJnaW4tbGVmdDo2cHg7XCI+JHtlc2NhcGVIdG1sKG5hYS5kZXRhaWwpfTwvc3Bhbj5cbiAgICAgIDwvZGl2PmA7XG4gICAgfVxuXG4gICAgaHRtbCArPSAnPC9kaXY+JztcbiAgICByZXR1cm4gaHRtbDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cud2FybignUGVyc3Vhc2lvbiBjaGVjayBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwb3B1bGF0ZURvd25sb2FkVGFiKGN2RGF0YSkge1xuICBzdGF0ZU1hbmFnZXIuc2V0VGFiRGF0YSgnY3YnLCBjdkRhdGEpO1xuXG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICBpZiAoIWNvbnRlbnQpIHJldHVybjtcblxuICBpZiAoIWN2RGF0YSB8fCAodHlwZW9mIGN2RGF0YSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoY3ZEYXRhKS5sZW5ndGggPT09IDApKSB7XG4gICAgY29udGVudC5pbm5lckhUTUwgPSAnPGgxPlx1MkIwN1x1RkUwRiBEb3dubG9hZCBHZW5lcmF0ZWQgRmlsZXM8L2gxPjxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPjxkaXYgY2xhc3M9XCJpY29uXCI+XHUyQjA3XHVGRTBGPC9kaXY+PGgzPk5vIEZpbGVzIEF2YWlsYWJsZTwvaDM+PHA+R2VuZXJhdGUgYSBDViBmaXJzdCB0byBzZWUgZG93bmxvYWQgb3B0aW9ucy48L3A+PC9kaXY+JztcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250ZW50LmlubmVySFRNTCA9ICc8aDE+XHUyQjA3XHVGRTBGIERvd25sb2FkIEdlbmVyYXRlZCBGaWxlczwvaDE+PHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MTZweDtcIj5SdW5uaW5nIEFUUyB2YWxpZGF0aW9uXHUyMDI2PC9wPic7XG5cbiAgbGV0IGNoZWNrcyA9IFtdO1xuICBsZXQgcGFnZUNvdW50ID0gbnVsbDtcbiAgbGV0IHN1bW1hcnkgPSB7IHBhc3M6IDAsIHdhcm46IDAsIGZhaWw6IDAgfTtcbiAgbGV0IGF0c0Vycm9yID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL2F0cy12YWxpZGF0ZScpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNoZWNrcyA9IGRhdGEuY2hlY2tzIHx8IFtdO1xuICAgICAgcGFnZUNvdW50ID0gZGF0YS5wYWdlX2NvdW50ID8/IG51bGw7XG4gICAgICBzdW1tYXJ5ID0gZGF0YS5zdW1tYXJ5IHx8IHN1bW1hcnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0c0Vycm9yID0gZGF0YS5lcnJvciB8fCAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhdHNFcnJvciA9IGBOZXR3b3JrIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgfVxuXG4gIGNvbnN0IGZpbGVzID0gX2NvbGxlY3REb3dubG9hZGFibGVGaWxlcyhjdkRhdGEpO1xuICBsZXQgaHRtbCA9ICc8aDE+XHUyQjA3XHVGRTBGIEZpbGUgUmV2aWV3PC9oMT4nO1xuICBodG1sICs9ICc8cCBzdHlsZT1cImZvbnQtc2l6ZTowLjgzZW07Y29sb3I6Izk0YTNiODttYXJnaW4tYm90dG9tOjE2cHg7cGFkZGluZzo4cHggMTJweDtiYWNrZ3JvdW5kOiNmOGZhZmM7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkICNlMmU4ZjA7XCI+XHUyNzA1IDxlbT5UaGlzIGlzIHRoZSA8c3Ryb25nPmNvbXBsZXRlbmVzcyBjaGVjazwvc3Ryb25nPiBzdGVwIFx1MjAxNCBBVFMgdmFsaWRhdGlvbiBydW5zIGhlcmUgYW5kIHlvdSBjYW4gYXJjaGl2ZSB0aGUgYXBwbGljYXRpb24uIFRvIGRvd25sb2FkIGZpbGVzIGltbWVkaWF0ZWx5IGFmdGVyIGdlbmVyYXRpb24sIHVzZSB0aGUgPHN0cm9uZz5HZW5lcmF0ZWQgRmlsZXM8L3N0cm9uZz4gdGFiLjwvZW0+PC9wPic7XG4gIGh0bWwgKz0gX3JlbmRlclZhbGlkYXRpb25TdW1tYXJ5KGNoZWNrcywgc3VtbWFyeSwgcGFnZUNvdW50LCBhdHNFcnJvcik7XG5cbiAgY29uc3Qgc3VtbWFyeVdhcm5pbmdzID0gKGN2RGF0YS5tZXRhZGF0YT8uc3VtbWFyeV93YXJuaW5ncyB8fCBbXSk7XG4gIGlmIChzdW1tYXJ5V2FybmluZ3MubGVuZ3RoKSB7XG4gICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZjljMztib3JkZXI6MXB4IHNvbGlkICNmY2QzNGQ7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgPHN0cm9uZz5cdTI2QTAgUHJvZmVzc2lvbmFsIFN1bW1hcnkgcXVhbGl0eSBub3RpY2VzICgke3N1bW1hcnlXYXJuaW5ncy5sZW5ndGh9KTo8L3N0cm9uZz5cbiAgICAgIDx1bCBzdHlsZT1cIm1hcmdpbjo4cHggMCAwIDA7cGFkZGluZy1sZWZ0OjE4cHg7XCI+XG4gICAgICAgICR7c3VtbWFyeVdhcm5pbmdzLm1hcCh3ID0+IGA8bGkgc3R5bGU9XCJmb250LXNpemU6MC45ZW07XCI+JHtlc2NhcGVIdG1sKHcpfTwvbGk+YCkuam9pbignJyl9XG4gICAgICA8L3VsPlxuICAgICAgPHAgc3R5bGU9XCJtYXJnaW46OHB4IDAgMDtmb250LXNpemU6MC44N2VtO2NvbG9yOiM3ODM1MGY7XCI+VGhlc2UgYXJlIGFkdmlzb3J5IHdhcm5pbmdzIFx1MjAxNCByZXZpZXcgdGhlIFN1bW1hcnkgdGFiIGlmIHlvdSB3aXNoIHRvIHVwZGF0ZSB0aGUgc3VtbWFyeSBiZWZvcmUgc3VibWl0dGluZy48L3A+XG4gICAgPC9kaXY+YDtcbiAgfVxuXG4gIGNvbnN0IHB1YmxpY2F0aW9uV2FybmluZ3MgPSAoY3ZEYXRhLm1ldGFkYXRhPy5wdWJsaWNhdGlvbl93YXJuaW5ncyB8fCBbXSk7XG4gIGlmIChwdWJsaWNhdGlvbldhcm5pbmdzLmxlbmd0aCkge1xuICAgIGh0bWwgKz0gYDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZWY5YzM7Ym9yZGVyOjFweCBzb2xpZCAjZmNkMzRkO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O21hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgIDxzdHJvbmc+XHUyNkEwIFB1YmxpY2F0aW9uIHZlbnVlIGluZm9ybWF0aW9uIGluY29tcGxldGUgKCR7cHVibGljYXRpb25XYXJuaW5ncy5sZW5ndGh9KTo8L3N0cm9uZz5cbiAgICAgIDx1bCBzdHlsZT1cIm1hcmdpbjo4cHggMCAwIDA7cGFkZGluZy1sZWZ0OjE4cHg7XCI+XG4gICAgICAgICR7cHVibGljYXRpb25XYXJuaW5ncy5tYXAodyA9PiBgPGxpIHN0eWxlPVwiZm9udC1zaXplOjAuOWVtO1wiPiR7ZXNjYXBlSHRtbCh3KX08L2xpPmApLmpvaW4oJycpfVxuICAgICAgPC91bD5cbiAgICAgIDxwIHN0eWxlPVwibWFyZ2luOjhweCAwIDA7Zm9udC1zaXplOjAuODdlbTtjb2xvcjojNzgzNTBmO1wiPkFkZCBtaXNzaW5nIGpvdXJuYWwgb3IgY29uZmVyZW5jZSBuYW1lcyB0byB5b3VyIE1hc3RlciBDViBiZWZvcmUgc3VibWl0dGluZyBcdTIwMTQgaW5jb21wbGV0ZSB2ZW51ZSBkZXRhaWxzIHdlYWtlbiBjcmVkaWJpbGl0eS48L3A+XG4gICAgPC9kaXY+YDtcbiAgfVxuXG4gIGNvbnN0IGxvbmdCdWxsZXRXYXJuaW5ncyA9IChjdkRhdGEubWV0YWRhdGE/LmxvbmdfYnVsbGV0X3dhcm5pbmdzIHx8IFtdKTtcbiAgaWYgKGxvbmdCdWxsZXRXYXJuaW5ncy5sZW5ndGgpIHtcbiAgICBodG1sICs9IGA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmVmOWMzO2JvcmRlcjoxcHggc29saWQgI2ZjZDM0ZDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDttYXJnaW4tYm90dG9tOjE2cHg7XCI+XG4gICAgICA8c3Ryb25nPlx1MjZBMCBMb25nIGJ1bGxldCBwb2ludHMgZGV0ZWN0ZWQgKCR7bG9uZ0J1bGxldFdhcm5pbmdzLmxlbmd0aH0pIFx1MjAxNCBtYXkgZXhjZWVkIDIgbGluZXM6PC9zdHJvbmc+XG4gICAgICA8dWwgc3R5bGU9XCJtYXJnaW46OHB4IDAgMCAwO3BhZGRpbmctbGVmdDoxOHB4O2xpc3Qtc3R5bGU6bm9uZTtcIj5cbiAgICAgICAgJHtsb25nQnVsbGV0V2FybmluZ3MubWFwKHcgPT4gYDxsaSBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luLWJvdHRvbTo0cHg7XCI+PHN0cm9uZz4ke2VzY2FwZUh0bWwody5jb21wYW55KX0gXHUwMEI3ICR7ZXNjYXBlSHRtbCh3LnRpdGxlKX08L3N0cm9uZz4gKCR7dy5jaGFyX2NvdW50fSBjaGFycyk8YnI+PHNwYW4gc3R5bGU9XCJjb2xvcjojNmI3MjgwO1wiPlwiJHtlc2NhcGVIdG1sKHcuYnVsbGV0X3RleHQpfVwiPC9zcGFuPjwvbGk+YCkuam9pbignJyl9XG4gICAgICA8L3VsPlxuICAgICAgPHAgc3R5bGU9XCJtYXJnaW46OHB4IDAgMDtmb250LXNpemU6MC44N2VtO2NvbG9yOiM3ODM1MGY7XCI+Q29uc2lkZXIgc2hvcnRlbmluZyB0aGVzZSBidWxsZXRzIFx1MjAxNCBhaW0gZm9yIFx1MjI2NDIwMCBjaGFyYWN0ZXJzIGVhY2ggZm9yIGNsZWFuIDItbGluZSByZW5kZXJpbmcgaW4gdGhlIERPQ1guPC9wPlxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBjb25zdCBzcGFyc2VFeHBXYXJuaW5ncyA9IChjdkRhdGEubWV0YWRhdGE/LnNwYXJzZV9leHBlcmllbmNlX3dhcm5pbmdzIHx8IFtdKTtcbiAgaWYgKHNwYXJzZUV4cFdhcm5pbmdzLmxlbmd0aCkge1xuICAgIGh0bWwgKz0gYDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZWY5YzM7Ym9yZGVyOjFweCBzb2xpZCAjZmNkMzRkO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O21hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgIDxzdHJvbmc+XHUyNkEwIFNwYXJzZSBleHBlcmllbmNlIGVudHJpZXMgKCR7c3BhcnNlRXhwV2FybmluZ3MubGVuZ3RofSkgXHUyMDE0IGZld2VyIHRoYW4gMiBidWxsZXRzOjwvc3Ryb25nPlxuICAgICAgPHVsIHN0eWxlPVwibWFyZ2luOjhweCAwIDAgMDtwYWRkaW5nLWxlZnQ6MThweDtsaXN0LXN0eWxlOm5vbmU7XCI+XG4gICAgICAgICR7c3BhcnNlRXhwV2FybmluZ3MubWFwKHcgPT4gYDxsaSBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luLWJvdHRvbToycHg7XCI+PHN0cm9uZz4ke2VzY2FwZUh0bWwody5jb21wYW55KX0gXHUwMEI3ICR7ZXNjYXBlSHRtbCh3LnRpdGxlKX08L3N0cm9uZz4gXHUyMDE0ICR7dy5idWxsZXRfY291bnQgPT09IDAgPyAnbm8gYnVsbGV0cyBzZWxlY3RlZCcgOiAnMSBidWxsZXQgc2VsZWN0ZWQnfTwvbGk+YCkuam9pbignJyl9XG4gICAgICA8L3VsPlxuICAgICAgPHAgc3R5bGU9XCJtYXJnaW46OHB4IDAgMDtmb250LXNpemU6MC44N2VtO2NvbG9yOiM3ODM1MGY7XCI+SW5jbHVkZSBhdCBsZWFzdCAyIGJ1bGxldHMgcGVyIHJvbGUgdG8gZGVtb25zdHJhdGUgaW1wYWN0LiBSZXR1cm4gdG8gdGhlIEV4cGVyaWVuY2UgdGFiIHRvIGFkZCBtb3JlLjwvcD5cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgY29uc3QgeWVhck9ubHlEYXRlV2FybmluZ3MgPSAoY3ZEYXRhLm1ldGFkYXRhPy55ZWFyX29ubHlfZGF0ZV93YXJuaW5ncyB8fCBbXSk7XG4gIGlmICh5ZWFyT25seURhdGVXYXJuaW5ncy5sZW5ndGgpIHtcbiAgICBodG1sICs9IGA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmVmOWMzO2JvcmRlcjoxcHggc29saWQgI2ZjZDM0ZDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDttYXJnaW4tYm90dG9tOjE2cHg7XCI+XG4gICAgICA8c3Ryb25nPlx1MjZBMCBZZWFyLW9ubHkgZGF0ZXMgZGV0ZWN0ZWQgKCR7eWVhck9ubHlEYXRlV2FybmluZ3MubGVuZ3RofSkgXHUyMDE0IG1vbnRoL3llYXIgZm9ybWF0IHJlY29tbWVuZGVkOjwvc3Ryb25nPlxuICAgICAgPHVsIHN0eWxlPVwibWFyZ2luOjhweCAwIDAgMDtwYWRkaW5nLWxlZnQ6MThweDtsaXN0LXN0eWxlOm5vbmU7XCI+XG4gICAgICAgICR7eWVhck9ubHlEYXRlV2FybmluZ3MubWFwKHcgPT4gYDxsaSBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luLWJvdHRvbToycHg7XCI+PHN0cm9uZz4ke2VzY2FwZUh0bWwody5jb21wYW55KX0gXHUwMEI3ICR7ZXNjYXBlSHRtbCh3LnRpdGxlKX08L3N0cm9uZz4gXHUyMDE0ICR7dy5maWVsZCA9PT0gJ3N0YXJ0X2RhdGUnID8gJ3N0YXJ0JyA6ICdlbmQnfSBkYXRlIGlzIFwiJHtlc2NhcGVIdG1sKHcuZGF0ZV92YWx1ZSl9XCI8L2xpPmApLmpvaW4oJycpfVxuICAgICAgPC91bD5cbiAgICAgIDxwIHN0eWxlPVwibWFyZ2luOjhweCAwIDA7Zm9udC1zaXplOjAuODdlbTtjb2xvcjojNzgzNTBmO1wiPlllYXItb25seSBkYXRlcyByZWR1Y2UgY2hyb25vbG9naWNhbCBwcmVjaXNpb24uIFVwZGF0ZSB0byBNb250aCBZWVlZIGZvcm1hdCAoZS5nLiBcIkphbiAyMDIwXCIpIGluIHRoZSBNYXN0ZXIgQ1YgZm9yIGJlc3QgQVRTIGNvbXBhdGliaWxpdHkuPC9wPlxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBjb25zdCByZXdyaXRlQXVkaXRNaXNtYXRjaGVzID0gKGN2RGF0YS5tZXRhZGF0YT8ucmV3cml0ZV9hdWRpdF9taXNtYXRjaGVzIHx8IFtdKTtcbiAgaWYgKHJld3JpdGVBdWRpdE1pc21hdGNoZXMubGVuZ3RoKSB7XG4gICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZjJmMjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgPHN0cm9uZz5cdTI2QTAgUmV3cml0ZSBjb250ZW50IG1pc21hdGNoICgke3Jld3JpdGVBdWRpdE1pc21hdGNoZXMubGVuZ3RofSkgXHUyMDE0IGFjY2VwdGVkIHJld3JpdGVzIG5vdCBmb3VuZCBpbiBnZW5lcmF0ZWQgdGV4dDo8L3N0cm9uZz5cbiAgICAgIDx1bCBzdHlsZT1cIm1hcmdpbjo4cHggMCAwIDA7cGFkZGluZy1sZWZ0OjE4cHg7bGlzdC1zdHlsZTpub25lO1wiPlxuICAgICAgICAke3Jld3JpdGVBdWRpdE1pc21hdGNoZXMubWFwKG0gPT4gYDxsaSBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luLWJvdHRvbTo2cHg7XCI+PHN0cm9uZz4ke2VzY2FwZUh0bWwobS5sb2NhdGlvbiB8fCBtLnR5cGUpfTwvc3Ryb25nPjxicj48c3BhbiBzdHlsZT1cImNvbG9yOiMzNzQxNTE7XCI+RXhwZWN0ZWQ6IDxlbT5cIiR7ZXNjYXBlSHRtbCgobS5leHBlY3RlZCB8fCAnJykuc2xpY2UoMCwgMTIwKSl9JHsobS5leHBlY3RlZCB8fCAnJykubGVuZ3RoID4gMTIwID8gJ1x1MjAyNicgOiAnJ31cIjwvZW0+PC9zcGFuPjxicj48c3BhbiBzdHlsZT1cImNvbG9yOiM5Y2EzYWY7XCI+QWN0dWFsOiA8ZW0+XCIke2VzY2FwZUh0bWwoKG0uYWN0dWFsIHx8ICcnKS5zbGljZSgwLCAxMjApKX0keyhtLmFjdHVhbCB8fCAnJykubGVuZ3RoID4gMTIwID8gJ1x1MjAyNicgOiAnJ31cIjwvZW0+PC9zcGFuPjwvbGk+YCkuam9pbignJyl9XG4gICAgICA8L3VsPlxuICAgICAgPHAgc3R5bGU9XCJtYXJnaW46OHB4IDAgMDtmb250LXNpemU6MC44N2VtO2NvbG9yOiM3ZjFkMWQ7XCI+VGhlc2UgYWNjZXB0ZWQgcmV3cml0ZXMgbWF5IG5vdCBoYXZlIGJlZW4gYXBwbGllZC4gUmUtZ2VuZXJhdGUgdGhlIENWIG9yIGNoZWNrIHRoZSByZXdyaXRlIHJldmlldyBzdGVwLjwvcD5cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgY29uc3Qgb3ZlcmxhcFdhcm5pbmdzID0gKGN2RGF0YS5kYXRlX292ZXJsYXBfd2FybmluZ3MgfHwgW10pO1xuICBpZiAob3ZlcmxhcFdhcm5pbmdzLmxlbmd0aCkge1xuICAgIGh0bWwgKz0gYDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZWY5YzM7Ym9yZGVyOjFweCBzb2xpZCAjZmRlMDQ3O2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O21hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgIDxzdHJvbmc+XHUyNkEwIEVtcGxveW1lbnQgZGF0ZSBvdmVybGFwcyBkZXRlY3RlZCAoJHtvdmVybGFwV2FybmluZ3MubGVuZ3RofSk6PC9zdHJvbmc+XG4gICAgICA8dWwgc3R5bGU9XCJtYXJnaW46OHB4IDAgMCAwO3BhZGRpbmctbGVmdDoxOHB4O1wiPlxuICAgICAgICAke292ZXJsYXBXYXJuaW5ncy5tYXAodyA9PiBgPGxpPjxzdHJvbmc+JHtlc2NhcGVIdG1sKHcuZW50cnlfYSl9PC9zdHJvbmc+IG92ZXJsYXBzIHdpdGggPHN0cm9uZz4ke2VzY2FwZUh0bWwody5lbnRyeV9iKX08L3N0cm9uZz48YnI+PHNtYWxsIHN0eWxlPVwiY29sb3I6IzkyNDAwZTtcIj4ke2VzY2FwZUh0bWwody5vdmVybGFwX2Rlc2NyaXB0aW9uKX08L3NtYWxsPjwvbGk+YCkuam9pbignJyl9XG4gICAgICA8L3VsPlxuICAgICAgPHAgc3R5bGU9XCJtYXJnaW46OHB4IDAgMDtmb250LXNpemU6MC44N2VtO2NvbG9yOiM3ODM1MGY7XCI+UmV2aWV3IHRoZXNlIGVudHJpZXMgaW4gdGhlIEV4cGVyaWVuY2UgdGFiIGJlZm9yZSBzdWJtaXR0aW5nIHlvdXIgYXBwbGljYXRpb24uPC9wPlxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBjb25zdCBnZW5lcmF0ZWRBdCA9IGN2RGF0YS5tZXRhZGF0YT8uZ2VuZXJhdGlvbl9kYXRlID8/IG51bGw7XG4gIGNvbnN0IGdlbmVyYXRpb25SdW4gPSBjdkRhdGEubWV0YWRhdGE/LmdlbmVyYXRpb25fcnVuID8/IG51bGw7XG4gIGh0bWwgKz0gX3JlbmRlckRvd25sb2FkR3JpZChmaWxlcywgY2hlY2tzLCBzdW1tYXJ5LCBnZW5lcmF0ZWRBdCwgZ2VuZXJhdGlvblJ1bik7XG5cbiAgaWYgKGN2RGF0YS5vdXRwdXRfZGlyKSB7XG4gICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MjBweDtwYWRkaW5nOjEycHg7YmFja2dyb3VuZDojZjFmNWY5O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM2NDc0OGI7XCI+XG4gICAgICA8c3Ryb25nPk91dHB1dCBEaXJlY3Rvcnk6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbChjdkRhdGEub3V0cHV0X2Rpcil9XG4gICAgPC9kaXY+YDtcbiAgfVxuXG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gYCR7aHRtbH08cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7bWFyZ2luLXRvcDoxNnB4O2ZvbnQtc2l6ZTowLjllbTtcIj5BbmFseXNpbmcgYnVsbGV0IHBlcnN1YXNpdmVuZXNzXHUyMDI2PC9wPmA7XG4gIGh0bWwgKz0gYXdhaXQgX2ZldGNoUGVyc3Vhc2lvbkh0bWwoKTtcbiAgaHRtbCArPSBfcmVuZGVyUmVmaW5lbWVudFBhbmVsKCk7XG4gIGh0bWwgKz0gYDxkaXYgY2xhc3M9XCJuYXYtYnV0dG9ucyBuYXYtZW5kXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjE2cHg7XCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRpbnVlLWJ0blwiIG9uY2xpY2s9XCJoYW5kbGVTdGVwQ2xpY2soJ2NvdmVyX2xldHRlcicpXCI+XG4gICAgICBcdUQ4M0RcdURDRTkgUHJvY2VlZCB0byBDb3ZlciBMZXR0ZXIgXHUyMTkyXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PmA7XG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gaHRtbDtcbn1cblxuZXhwb3J0IHsgcG9wdWxhdGVEb3dubG9hZFRhYiB9OyIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL2ZpbmFsLWdlbmVyYXRlLmpzXG4gKiBGaW5hbCBnZW5lcmF0aW9uIHN0ZXA6IHNob3dzIGRvd25sb2FkIGxpbmtzIGZvciB0aGUgZ2VuZXJhdGVkIGZpbGVzXG4gKiAoUERGLCBBVFMgRE9DWCwgaHVtYW4gRE9DWCkgYW5kIGEgXCJQcm9jZWVkIHRvIERvd25sb2FkIFJldmlldyBcdTIxOTJcIiBidXR0b25cbiAqIHRoYXQgYWR2YW5jZXMgdGhlIHdvcmtmbG93IHRvIHRoZSBkb3dubG9hZCBzdGVwLlxuICpcbiAqIERlcGVuZGVuY2llcyAocmVzb2x2ZWQgdGhyb3VnaCBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICBhcGlDYWxsLCBhcHBlbmRNZXNzYWdlLCBlc2NhcGVIdG1sLCBzdGF0ZU1hbmFnZXIsIHN3aXRjaFRhYlxuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcignZmluYWwtZ2VuZXJhdGUnKTtcblxuaW1wb3J0IHsgc3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi9zdGF0ZS1tYW5hZ2VyLmpzJztcblxuLy8gXHUyNTAwXHUyNTAwIFByZXZpZXcgc3RhdGUgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmxldCBfcHJldmlld09wZW4gPSB0cnVlO1xuXG4vLyBcdTI1MDBcdTI1MDAgRmlsZSB0eXBlIGhlbHBlcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIF9maWxlTGFiZWwoZmlsZW5hbWUpIHtcbiAgaWYgKCFmaWxlbmFtZSkgcmV0dXJuICcnO1xuICBjb25zdCBiYXNlID0gZmlsZW5hbWUuc3BsaXQoJy8nKS5wb3AoKTtcbiAgaWYgKGJhc2UuZW5kc1dpdGgoJy5wZGYnKSAmJiBiYXNlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2F0cycpKVxuICAgIHJldHVybiAnQVRTIFBERic7XG4gIGlmIChiYXNlLmVuZHNXaXRoKCcucGRmJykpXG4gICAgcmV0dXJuICdIdW1hbiBQREYnO1xuICBpZiAoYmFzZS5lbmRzV2l0aCgnLmRvY3gnKSAmJiBiYXNlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2F0cycpKVxuICAgIHJldHVybiAnQVRTIFdvcmQnO1xuICBpZiAoYmFzZS5lbmRzV2l0aCgnLmRvY3gnKSlcbiAgICByZXR1cm4gJ0h1bWFuIFdvcmQnO1xuICBpZiAoYmFzZS5lbmRzV2l0aCgnLmh0bWwnKSlcbiAgICByZXR1cm4gJ0hUTUwnO1xuICByZXR1cm4gYmFzZTtcbn1cblxuZnVuY3Rpb24gX2ZpbGVJY29uKGZpbGVuYW1lKSB7XG4gIGlmICghZmlsZW5hbWUpIHJldHVybiAnXHVEODNEXHVEQ0MxJztcbiAgY29uc3QgZiA9IGZpbGVuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChmLmVuZHNXaXRoKCcucGRmJykpICByZXR1cm4gZi5pbmNsdWRlcygnYXRzJykgPyAnXHVEODNFXHVERDE2JyA6ICdcdUQ4M0RcdURDQzQnO1xuICBpZiAoZi5lbmRzV2l0aCgnLmRvY3gnKSkgcmV0dXJuICdcdUQ4M0RcdURDREQnO1xuICBpZiAoZi5lbmRzV2l0aCgnLmh0bWwnKSkgcmV0dXJuICdcdUQ4M0NcdURGMTAnO1xuICByZXR1cm4gJ1x1RDgzRFx1RENDMSc7XG59XG5cbmZ1bmN0aW9uIF9maWxlRGVzY3JpcHRpb24oZmlsZW5hbWUpIHtcbiAgaWYgKCFmaWxlbmFtZSkgcmV0dXJuICcnO1xuICBjb25zdCBmID0gZmlsZW5hbWUudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGYuZW5kc1dpdGgoJy5wZGYnKSAmJiBmLmluY2x1ZGVzKCdhdHMnKSlcbiAgICByZXR1cm4gJ0FUUy1vcHRpbWlzZWQgUERGIFx1MjAxNCBtYWNoaW5lLXJlYWRhYmxlIGZvciBhdXRvbWF0ZWQgc2NyZWVuaW5nJztcbiAgaWYgKGYuZW5kc1dpdGgoJy5wZGYnKSlcbiAgICByZXR1cm4gJ0h1bWFuLXJlYWRhYmxlIFBERiBcdTIwMTQgZm9yIGh1bWFuIHJldmlld2VycyBhbmQgcHJpbnRpbmcnO1xuICBpZiAoZi5lbmRzV2l0aCgnLmRvY3gnKSAmJiBmLmluY2x1ZGVzKCdhdHMnKSlcbiAgICByZXR1cm4gJ0FUUyBXb3JkIGRvY3VtZW50IFx1MjAxNCBrZXl3b3JkLW9wdGltaXNlZCBmb3Igam9iIGFwcGxpY2F0aW9ucyc7XG4gIGlmIChmLmVuZHNXaXRoKCcuZG9jeCcpKVxuICAgIHJldHVybiAnSHVtYW4tcmVhZGFibGUgV29yZCBkb2N1bWVudCBcdTIwMTQgZWRpdGFibGUgZm9ybWF0JztcbiAgaWYgKGYuZW5kc1dpdGgoJy5odG1sJykpXG4gICAgcmV0dXJuICdIVE1MIGZvcm1hdCB3aXRoIGVtYmVkZGVkIEpTT04tTEQgc3RydWN0dXJlZCBkYXRhJztcbiAgcmV0dXJuICdHZW5lcmF0ZWQgZmlsZSc7XG59XG5cbmZ1bmN0aW9uIF9odG1sUHJldmlld0ZpbGUoZmlsZXMpIHtcbiAgLy8gUHJlZmVyIGh1bWFuLXJlYWRhYmxlIEhUTUwgKENWXyouaHRtbCwgbm90IEFUUylcbiAgY29uc3QgaHVtYW4gPSBmaWxlcy5maW5kKGYgPT4gZi5lbmRzV2l0aCgnLmh0bWwnKSAmJiAhZi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdhdHMnKSk7XG4gIHJldHVybiBodW1hbiB8fCBmaWxlcy5maW5kKGYgPT4gZi5lbmRzV2l0aCgnLmh0bWwnKSkgfHwgbnVsbDtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclByZXZpZXdQYW5lKGh0bWxGaWxlKSB7XG4gIGlmICghaHRtbEZpbGUpIHJldHVybiAnJztcbiAgY29uc3QgYmFzZSA9IGh0bWxGaWxlLnNwbGl0KCcvJykucG9wKCk7XG4gIGNvbnN0IHNyYyA9IGAvYXBpL2Rvd25sb2FkLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGJhc2UpfWA7XG4gIHJldHVybiBgXG4gICAgPGRpdiBpZD1cImZpbmFsLXByZXZpZXctcGFuZVwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbToyNHB4O2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtib3JkZXItcmFkaXVzOjEwcHg7b3ZlcmZsb3c6aGlkZGVuOyR7X3ByZXZpZXdPcGVuID8gJycgOiAnZGlzcGxheTpub25lOyd9XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzoxMHB4IDE2cHg7YmFja2dyb3VuZDojZjFmNWY5O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2UyZThmMDtcIj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC45ZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxZTI5M2I7XCI+XHVEODNDXHVERjEwIEhUTUwgUHJldmlldzwvc3Bhbj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC44ZW07Y29sb3I6IzY0NzQ4YjtmbGV4OjE7XCI+JHtlc2NhcGVIdG1sKGJhc2UpfTwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJmaW5hbC1wcmV2aWV3LWNsb3NlLWJ0blwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MC44ZW07cGFkZGluZzozcHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNjYmQ1ZTE7Ym9yZGVyLXJhZGl1czo1cHg7YmFja2dyb3VuZDojZmZmO2N1cnNvcjpwb2ludGVyO2NvbG9yOiM0NzU1Njk7XCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiSGlkZSBwcmV2aWV3XCI+SGlkZTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtwYWRkaW5nLXRvcDo1Ni4yNSU7YmFja2dyb3VuZDojZjhmYWZjO1wiPlxuICAgICAgICA8aWZyYW1lIGlkPVwiZmluYWwtY3YtcHJldmlld1wiXG4gICAgICAgICAgICAgICAgc3JjPVwiJHtzcmN9XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkZpbmFsIENWIEhUTUwgUHJldmlld1wiXG4gICAgICAgICAgICAgICAgc2FuZGJveD1cImFsbG93LXNhbWUtb3JpZ2luXCJcbiAgICAgICAgICAgICAgICByZWZlcnJlcnBvbGljeT1cIm5vLXJlZmVycmVyXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lO1wiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkZpbmFsIGdlbmVyYXRlZCBDViBwcmV2aWV3XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgVGFiIHJlbmRlcmVyIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG4vKipcbiAqIFBvcHVsYXRlIHRoZSBcIkdlbmVyYXRlXCIgKGZpbmFsX2dlbmVyYXRlKSB0YWIgY29udGVudC5cbiAqIFNob3dzIGRvd25sb2FkIGxpbmtzIGZvciBhbGwgZmluYWwtZ2VuZXJhdGVkIGZpbGVzIGFuZCBhIFwiUHJvY2VlZCB0byBGaW5hbGlzZVwiIGJ1dHRvbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjdkRhdGEgLSBDViBkYXRhIG9iamVjdCBmcm9tIHN0YXRlTWFuYWdlci5nZXRUYWJEYXRhKCdjdicpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBvcHVsYXRlRmluYWxHZW5lcmF0ZVRhYihjdkRhdGEgPSB7fSkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250ZW50KSByZXR1cm47XG5cbiAgLy8gQ29sbGVjdCBjYW5kaWRhdGUgZmlsZXMsIGRlZHVwbGljYXRlXG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0KCk7XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXG4gICAgY3ZEYXRhLmZpbmFsX2h0bWwsXG4gICAgY3ZEYXRhLmZpbmFsX3BkZixcbiAgICBjdkRhdGEuaHRtbCxcbiAgICBjdkRhdGEucGRmLFxuICAgIGN2RGF0YS5kb2N4LFxuICAgIGN2RGF0YS5hdHNfZG9jeCxcbiAgICBjdkRhdGEuaHVtYW5fZG9jeCxcbiAgICAuLi4oQXJyYXkuaXNBcnJheShjdkRhdGEuZmlsZXMpID8gY3ZEYXRhLmZpbGVzIDogW10pLFxuICBdLmZpbHRlcihCb29sZWFuKTtcblxuICBjb25zdCBmaWxlcyA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICBpZiAoc2Vlbi5oYXMoZmlsZW5hbWUpKSBjb250aW51ZTtcbiAgICBzZWVuLmFkZChmaWxlbmFtZSk7XG4gICAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKCcudHh0JykgfHwgZmlsZW5hbWUgPT09ICdqb2JfZGVzY3JpcHRpb24udHh0JykgY29udGludWU7XG4gICAgZmlsZXMucHVzaChmaWxlbmFtZSk7XG4gIH1cblxuICBjb25zdCBodG1sUHJldmlld0ZpbGUgPSBfaHRtbFByZXZpZXdGaWxlKGZpbGVzKTtcblxuICBsZXQgaHRtbCA9ICc8aDE+XHVEODNEXHVEQ0M0IEdlbmVyYXRlZCBGaWxlczwvaDE+JztcbiAgaHRtbCArPSAnPHAgc3R5bGU9XCJjb2xvcjojNDc1NTY5O21hcmdpbi1ib3R0b206OHB4O1wiPllvdXIgQ1YgZmlsZXMgYXJlIHJlYWR5IHRvIGRvd25sb2FkLiBQcmV2aWV3IHRoZSBIVE1MIHZlcnNpb24gYmVsb3csIHRoZW4gY2xpY2sgPHN0cm9uZz5Qcm9jZWVkIHRvIERvd25sb2FkIFJldmlldzwvc3Ryb25nPiB0byBydW4gQVRTIHZhbGlkYXRpb24gYW5kIGFyY2hpdmUgeW91ciBhcHBsaWNhdGlvbi48L3A+JztcbiAgaHRtbCArPSAnPHAgc3R5bGU9XCJmb250LXNpemU6MC44M2VtO2NvbG9yOiM5NGEzYjg7bWFyZ2luLWJvdHRvbToyMHB4O3BhZGRpbmc6OHB4IDEycHg7YmFja2dyb3VuZDojZjhmYWZjO2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1sZWZ0OjNweCBzb2xpZCAjZTJlOGYwO1wiPlx1RDgzRFx1RENBMSA8ZW0+VGhpcyB0YWIgbGV0cyB5b3UgZG93bmxvYWQgZmlsZXMgaW1tZWRpYXRlbHkuIFRoZSA8c3Ryb25nPkZpbGUgUmV2aWV3PC9zdHJvbmc+IHN1Yi10YWIgaW4gRmluYWxpc2UgcnVucyBBVFMgY2hlY2tzLCBjb25maXJtcyB0aGUgcGFja2FnZSBpcyBjb21wbGV0ZSwgYW5kIGxldHMgeW91IGFyY2hpdmUgdGhlIGFwcGxpY2F0aW9uLjwvZW0+PC9wPic7XG5cbiAgaWYgKGh0bWxQcmV2aWV3RmlsZSkge1xuICAgIGNvbnN0IHNob3dIaWRlID0gX3ByZXZpZXdPcGVuID8gJ0hpZGUgcHJldmlldycgOiAnU2hvdyBwcmV2aWV3JztcbiAgICBodG1sICs9IGA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxMnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZmluYWwtcHJldmlldy10b2dnbGUtYnRuXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO3BhZGRpbmc6NXB4IDE0cHg7Ym9yZGVyOjFweCBzb2xpZCAjM2I4MmY2O2JvcmRlci1yYWRpdXM6NnB4O2JhY2tncm91bmQ6JHtfcHJldmlld09wZW4gPyAnI2VmZjZmZicgOiAnI2ZmZid9O2NvbG9yOiMzYjgyZjY7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO1wiXG4gICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCIke19wcmV2aWV3T3Blbn1cIlxuICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwiZmluYWwtcHJldmlldy1wYW5lXCI+XG4gICAgICAgIFx1RDgzQ1x1REYxMCAke3Nob3dIaWRlfVxuICAgICAgPC9idXR0b24+XG4gICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjhlbTtjb2xvcjojOTRhM2I4O1wiPkluLWJyb3dzZXIgSFRNTCBwcmV2aWV3PC9zcGFuPlxuICAgIDwvZGl2PmA7XG4gICAgaHRtbCArPSBfcmVuZGVyUHJldmlld1BhbmUoaHRtbFByZXZpZXdGaWxlKTtcbiAgfVxuXG4gIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICBodG1sICs9ICc8cCBzdHlsZT1cImNvbG9yOiM5Y2EzYWY7cGFkZGluZzoxNnB4O1wiPk5vIGZpbGVzIGdlbmVyYXRlZCB5ZXQuPC9wPic7XG4gIH0gZWxzZSB7XG4gICAgaHRtbCArPSAnPGRpdiBzdHlsZT1cImRpc3BsYXk6Z3JpZDtnYXA6MTJweDttYXJnaW4tYm90dG9tOjI4cHg7XCI+JztcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBiYXNlICAgPSBmaWxlbmFtZS5zcGxpdCgnLycpLnBvcCgpO1xuICAgICAgY29uc3QgaWNvbiAgID0gX2ZpbGVJY29uKGZpbGVuYW1lKTtcbiAgICAgIGNvbnN0IGxhYmVsICA9IF9maWxlTGFiZWwoZmlsZW5hbWUpO1xuICAgICAgY29uc3QgZGVzYyAgID0gX2ZpbGVEZXNjcmlwdGlvbihmaWxlbmFtZSk7XG4gICAgICBodG1sICs9IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjE0cHg7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6I2Y4ZmFmYztib3JkZXI6MXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTRweCAxOHB4O1wiPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjEuOGVtO1wiPiR7aWNvbn08L3NwYW4+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6MTttaW4td2lkdGg6MDtcIj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjAuOTVlbTtjb2xvcjojMWUyOTNiO1wiPiR7ZXNjYXBlSHRtbChsYWJlbCl9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuODNlbTtjb2xvcjojNjQ3NDhiO21hcmdpbi10b3A6MnB4O1wiPiR7ZXNjYXBlSHRtbChkZXNjKX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YSBocmVmPVwiL2FwaS9kb3dubG9hZC8ke2VuY29kZVVSSUNvbXBvbmVudChiYXNlKX1cIlxuICAgICAgICAgICAgIGRvd25sb2FkPVwiJHtlc2NhcGVIdG1sKGJhc2UpfVwiXG4gICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiMzYjgyZjY7Y29sb3I6I2ZmZjtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzo3cHggMTZweDtib3JkZXItcmFkaXVzOjZweDtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOjAuODhlbTtmb250LXdlaWdodDo2MDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7XG4gICAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOm5vd3JhcDtcIj5cbiAgICAgICAgICAgIFx1MkIwN1x1RkUwRiBEb3dubG9hZFxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+YDtcbiAgICB9XG4gICAgaHRtbCArPSAnPC9kaXY+JztcbiAgfVxuXG4gIGlmIChjdkRhdGEub3V0cHV0X2Rpcikge1xuICAgIGh0bWwgKz0gYDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjI0cHg7cGFkZGluZzoxMHB4IDE0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6I2YxZjVmOTtib3JkZXItcmFkaXVzOjZweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOjEzcHg7Y29sb3I6IzY0NzQ4YjtcIj5cbiAgICAgIDxzdHJvbmc+T3V0cHV0IGRpcmVjdG9yeTo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKGN2RGF0YS5vdXRwdXRfZGlyKX1cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgaHRtbCArPSBgXG4gICAgPGRpdiBjbGFzcz1cIm5hdi1idXR0b25zIG5hdi1lbmRcIiBzdHlsZT1cIm1hcmdpbi10b3A6MjRweDtcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJjb250aW51ZS1idG5cIiBpZD1cImZpbmFsLWdlbmVyYXRlLWNvbnRpbnVlLWJ0blwiXG4gICAgICAgICAgICAgIG9uY2xpY2s9XCJmaW5hbEdlbmVyYXRpb25Db21wbGV0ZSgpXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MWVtO3BhZGRpbmc6MTBweCAyNHB4O1wiPlxuICAgICAgICBcdTI3MDUgUHJvY2VlZCB0byBEb3dubG9hZCBSZXZpZXcgXHUyMTkyXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5gO1xuXG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gaHRtbDtcblxuICAvLyBXaXJlIHVwIHByZXZpZXcgdG9nZ2xlXG4gIGlmIChodG1sUHJldmlld0ZpbGUpIHtcbiAgICBjb25zdCB0b2dnbGVCdG4gID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcjZmluYWwtcHJldmlldy10b2dnbGUtYnRuJyk7XG4gICAgY29uc3QgY2xvc2VCdG4gICA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcignI2ZpbmFsLXByZXZpZXctY2xvc2UtYnRuJyk7XG4gICAgY29uc3QgcHJldmlld1BhbmUgPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJyNmaW5hbC1wcmV2aWV3LXBhbmUnKTtcblxuICAgIGNvbnN0IHNldFByZXZpZXdPcGVuID0gKG9wZW4pID0+IHtcbiAgICAgIF9wcmV2aWV3T3BlbiA9IG9wZW47XG4gICAgICBpZiAocHJldmlld1BhbmUpIHByZXZpZXdQYW5lLnN0eWxlLmRpc3BsYXkgPSBvcGVuID8gJycgOiAnbm9uZSc7XG4gICAgICBpZiAodG9nZ2xlQnRuKSB7XG4gICAgICAgIHRvZ2dsZUJ0bi50ZXh0Q29udGVudCA9IG9wZW4gPyAnXHVEODNDXHVERjEwIEhpZGUgcHJldmlldycgOiAnXHVEODNDXHVERjEwIFNob3cgcHJldmlldyc7XG4gICAgICAgIHRvZ2dsZUJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBTdHJpbmcob3BlbikpO1xuICAgICAgICB0b2dnbGVCdG4uc3R5bGUuYmFja2dyb3VuZCA9IG9wZW4gPyAnI2VmZjZmZicgOiAnI2ZmZic7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRvZ2dsZUJ0bj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBzZXRQcmV2aWV3T3BlbighX3ByZXZpZXdPcGVuKSk7XG4gICAgY2xvc2VCdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgICgpID0+IHNldFByZXZpZXdPcGVuKGZhbHNlKSk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFBoYXNlIHRyYW5zaXRpb24gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKlxuICogQWR2YW5jZSB3b3JrZmxvdyBmcm9tIGZpbmFsX2dlbmVyYXRpb24gXHUyMTkyIHJlZmluZW1lbnQuXG4gKiBDYWxscyBQT1NUIC9hcGkvZmluYWwtZ2VuZXJhdGlvbi1jb21wbGV0ZSwgdXBkYXRlcyBmcm9udGVuZCBwaGFzZSwgYW5kXG4gKiBzd2l0Y2hlcyB0byB0aGUgZG93bmxvYWQgdGFiLlxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5hbEdlbmVyYXRpb25Db21wbGV0ZSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvZmluYWwtZ2VuZXJhdGlvbi1jb21wbGV0ZScsIHt9KTtcbiAgICBpZiAoIXJlcz8ub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihyZXM/LmVycm9yIHx8ICdGYWlsZWQgdG8gYWR2YW5jZSB0byBGaWxlIFJldmlldyBzdGVwLicpO1xuICAgIH1cbiAgICBzdGF0ZU1hbmFnZXIuc2V0UGhhc2UoJ3JlZmluZW1lbnQnKTtcbiAgICBzd2l0Y2hUYWIoJ2Rvd25sb2FkJyk7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ1x1MjcwNSBGaWxlcyBnZW5lcmF0ZWQuIFlvdSBjYW4gbm93IGZpbmFsaXNlIHlvdXIgYXBwbGljYXRpb24uJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcignZmluYWxHZW5lcmF0aW9uQ29tcGxldGUgZXJyb3I6JywgZXJyKTtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHUyNzRDICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgcG9wdWxhdGVGaW5hbEdlbmVyYXRlVGFiLCBmaW5hbEdlbmVyYXRpb25Db21wbGV0ZSB9O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiBcIlVwZGF0ZSB2aWEgQUlcIiBwYW5lbCAoR0FQLTAxKTogbmF0dXJhbC1sYW5ndWFnZSBpbnN0cnVjdGlvbiBvclxuICogZG9jdW1lbnQtaW5nZXN0aW9uIHVwZGF0ZXMgdG8gTWFzdGVyX0NWX0RhdGEuanNvbiwgcHJvcG9zZWQgYnkgYW4gTExNLFxuICogcmV2aWV3ZWQgYXMgYSBkaWZmLCBhbmQgd3JpdHRlbiBvbmx5IG9uIGV4cGxpY2l0IGNvbmZpcm1hdGlvbi5cbiAqXG4gKiBSZW5kZXJlZCBpbnNpZGUgdGhlIE1hc3RlciBDViB0YWIgKHNlZSB3ZWIvbWFzdGVyLWN2LmpzKSwgY29sbGFwc2VkIGJ5XG4gKiBkZWZhdWx0LiBSZXVzZXMgd2ViL3Byb3Bvc2FsLXJldmlldy5qcydzIHJvdyByZW5kZXJlciBmb3IgdGhlIGRpZmYgcmV2aWV3XG4gKiBsaXN0IHJhdGhlciB0aGFuIGZvcmtpbmcgYSB0aGlyZCBjb3B5IG9mIHRoYXQgVUkgKGhhcnZlc3QuanMgYW5kXG4gKiBsYXlvdXQtaW5zdHJ1Y3Rpb24uanMncyByZW5kZXJDb250ZW50UHJvcG9zYWxzIGFscmVhZHkgZXhpc3QpLlxuICpcbiAqIFB1YmxpYyBleHBvcnRzIChhc3NpZ25lZCB0byB3aW5kb3cgYnkgd2ViL3NyYy9tYWluLmpzJ3MgYnVuZGxlKTpcbiAqICAgcmVuZGVyTWFzdGVyRGF0YUFpVXBkYXRlUGFuZWwoKVxuICogICB0b2dnbGVNYXN0ZXJEYXRhQWlQYW5lbCgpXG4gKiAgIHNldE1hc3RlckRhdGFBaU1vZGUobW9kZSlcbiAqICAgaGFuZGxlTWFzdGVyRGF0YUFpRmlsZVVwbG9hZChldmVudClcbiAqICAgc3VibWl0TWFzdGVyRGF0YUFpUHJvcG9zZSgpXG4gKiAgIGRpc2NhcmRNYXN0ZXJEYXRhQWlQcm9wb3NhbCgpXG4gKiAgIGNvbmZpcm1NYXN0ZXJEYXRhQWlVcGRhdGUoKVxuICpcbiAqIEtleWJvYXJkOiBDdHJsL0NtZCtFbnRlciBvbiBlaXRoZXIgaW5wdXQgdGV4dGFyZWEgc3VibWl0cyBcIlByb3Bvc2UgVXBkYXRlXCJcbiAqICh3aXJlZCBsb2NhbGx5IHZpYSBvbmtleWRvd24sIG5vdCBrZXlib2FyZC1zaG9ydGN1dHMuanMncyBnbG9iYWxcbiAqIF9UQUJfQUNUSU9OX0JUTiBtYXAgXHUyMDE0IHRoZSBNYXN0ZXIgQ1YgdGFiIGhhcyBzZXZlcmFsIGluZGVwZW5kZW50IGZvcm1zIHdpdGhcbiAqIG5vIHNpbmdsZSBwcmltYXJ5IGFjdGlvbiwgc28gY2xhaW1pbmcgdGhpcyBwYW5lbCBhcyAqdGhlKiB0YWItd2lkZVxuICogQ3RybCtFbnRlciB0YXJnZXQgd291bGQgYmUgbWlzbGVhZGluZy9yZWdyZXNzIHRoZSB0YWIncyBvdGhlciBzYXZlXG4gKiBhY3Rpb25zOyBhIGxvY2FsLCBzY29wZWQgc2hvcnRjdXQgaXMgdGhlIGNvcnJlY3QgZml0IGhlcmUgaW5zdGVhZCkuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZXNjLCByZW5kZXJQcm9wb3NhbFJvdywgYXR0YWNoUHJvcG9zYWxSb3dMaXN0ZW5lcnMgfSBmcm9tICcuL3Byb3Bvc2FsLXJldmlldy5qcyc7XG5cbmNvbnN0IGxvZyA9IGdldExvZ2dlcignbWFzdGVyLWRhdGEtYWktdXBkYXRlJyk7XG5cbi8vIFx1MjUwMFx1MjUwMCBTdGF0ZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbi8vIENsb3N1cmUtc2NvcGVkLCBjb25zaXN0ZW50IHdpdGggaG93IGhhcnZlc3QuanMgbWFuYWdlcyBpdHMgb3duIGxvY2FsIHN0YXRlIFx1MjAxNFxuLy8gdGhpcyBwYW5lbCBkb2Vzbid0IG5lZWQgdG8gcGFydGljaXBhdGUgaW4gc3RhdGUtbWFuYWdlci5qcydzIGdsb2JhbHMuXG5cbmxldCBfbWR1TW9kZSA9ICdubF9pbnN0cnVjdGlvbic7ICAgICAgICAgICAvLyAnbmxfaW5zdHJ1Y3Rpb24nIHwgJ2RvY3VtZW50X2luZ2VzdGlvbidcbmxldCBfbWR1UGVuZGluZ1Byb3Bvc2FsID0gbnVsbDsgICAgICAgICAgICAvLyB7IHByb3Bvc2FsSWQsIHNvdXJjZSwgY2hhbmdlcyB9XG5sZXQgX21kdVByaW9yQ2xhcmlmaWNhdGlvbnMgPSBbXTsgICAgICAgICAgLy8gW3txdWVzdGlvbiwgYW5zd2VyfSwgLi4uXVxuXG5mdW5jdGlvbiBfbWR1UmVzZXRTdGF0ZSgpIHtcbiAgX21kdU1vZGUgPSAnbmxfaW5zdHJ1Y3Rpb24nO1xuICBfbWR1UGVuZGluZ1Byb3Bvc2FsID0gbnVsbDtcbiAgX21kdVByaW9yQ2xhcmlmaWNhdGlvbnMgPSBbXTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFBhbmVsIHNoZWxsIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiByZW5kZXJNYXN0ZXJEYXRhQWlVcGRhdGVQYW5lbCgpIHtcbiAgLy8gUmVzZXQgbW9kdWxlIHN0YXRlIG9uIGV2ZXJ5IGZyZXNoIHJlbmRlciAobm90IGp1c3QgcGFnZSBsb2FkKSBcdTIwMTQgdGhlIERPTVxuICAvLyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYWx3YXlzIGRlcGljdHMgdGhlIG5sX2luc3RydWN0aW9uL25vLXByb3Bvc2FsXG4gIC8vIGRlZmF1bHQsIHNvIGFueSBjYXJyaWVkLW92ZXIgc3RhdGUgZnJvbSBhIHByaW9yIHJlbmRlciAoZS5nLiB0aGUgdXNlclxuICAvLyBzd2l0Y2hlZCB0YWJzIG1pZC1wcm9wb3NhbCBhbmQgcG9wdWxhdGVNYXN0ZXJUYWIoKSByZS1yZW5kZXJlZCB0aGlzXG4gIC8vIHBhbmVsKSBtdXN0IGJlIGRpc2NhcmRlZCB0byBhdm9pZCB0aGUgdHdvIGdvaW5nIG91dCBvZiBzeW5jLlxuICBfbWR1UmVzZXRTdGF0ZSgpO1xuICByZXR1cm4gYFxuICAgIDxkaXYgaWQ9XCJtZHUtcGFuZWxcIiBzdHlsZT1cIm1hcmdpbjoxNnB4IDA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1jdi1ib3JkZXIpO2JvcmRlci1yYWRpdXM6OHB4O292ZXJmbG93OmhpZGRlbjtcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwibWR1LXRvZ2dsZS1idG5cIiBvbmNsaWNrPVwidG9nZ2xlTWFzdGVyRGF0YUFpUGFuZWwoKVwiXG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCJtZHUtcGFuZWwtYm9keVwiXG4gICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZDp2YXIoLS1jdi1iZy1saWdodCk7Ym9yZGVyOm5vbmU7cGFkZGluZzoxMnB4IDE2cHg7Zm9udC1zaXplOjAuOTVlbTtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tY3YtdGV4dC1wcmltYXJ5KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7XCI+XG4gICAgICAgIDxzcGFuIGlkPVwibWR1LXRvZ2dsZS1pY29uXCI+XHUyNUI4PC9zcGFuPiBcdUQ4M0VcdUREMTYgVXBkYXRlIHZpYSBBSVxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2IGlkPVwibWR1LXBhbmVsLWJvZHlcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtwYWRkaW5nOjE2cHg7XCI+XG4gICAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtjb2xvcjp2YXIoLS1jdi10ZXh0LXNlY29uZGFyeSk7bWFyZ2luOjAgMCAxNHB4O1wiPlxuICAgICAgICAgIFByZWZlciBwbGFpbiBFbmdsaXNoLCBvciBoYXZlIGFuIG9sZCBDViBvciBMaW5rZWRJbiBleHBvcnQ/IERlc2NyaWJlIGEgY2hhbmdlIG9yIHBhc3RlL3VwbG9hZCBhXG4gICAgICAgICAgZG9jdW1lbnQgYW5kIEFJIHdpbGwgZHJhZnQgaXQgZm9yIHlvdSB0byByZXZpZXcgXHUyMDE0IG5vdGhpbmcgaXMgc2F2ZWQgdW50aWwgeW91IGNvbmZpcm0uXG4gICAgICAgIDwvcD5cblxuICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJsaXN0XCIgYXJpYS1sYWJlbD1cIlVwZGF0ZSBtZXRob2RcIiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6NnB4O21hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cIm1kdS1tb2RlLW5sX2luc3RydWN0aW9uLWJ0blwiIHJvbGU9XCJ0YWJcIiBhcmlhLXNlbGVjdGVkPVwidHJ1ZVwiXG4gICAgICAgICAgICBvbmNsaWNrPVwic2V0TWFzdGVyRGF0YUFpTW9kZSgnbmxfaW5zdHJ1Y3Rpb24nKVwiXG4gICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6NnB4IDE0cHg7Zm9udC1zaXplOjAuODVlbTtib3JkZXItcmFkaXVzOjZweCA2cHggMCAwO2JvcmRlcjoxcHggc29saWQgdmFyKC0tY3YtYm9yZGVyKTtib3JkZXItYm90dG9tOm5vbmU7YmFja2dyb3VuZDp2YXIoLS1jdi13aGl0ZSk7Y29sb3I6dmFyKC0tY3YtdGV4dC1wcmltYXJ5KTtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7XCI+XG4gICAgICAgICAgICBEZXNjcmliZSBhIGNoYW5nZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwibWR1LW1vZGUtZG9jdW1lbnRfaW5nZXN0aW9uLWJ0blwiIHJvbGU9XCJ0YWJcIiBhcmlhLXNlbGVjdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgb25jbGljaz1cInNldE1hc3RlckRhdGFBaU1vZGUoJ2RvY3VtZW50X2luZ2VzdGlvbicpXCJcbiAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzo2cHggMTRweDtmb250LXNpemU6MC44NWVtO2JvcmRlci1yYWRpdXM6NnB4IDZweCAwIDA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1jdi1ib3JkZXIpO2JvcmRlci1ib3R0b206bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWN2LWJnLXN1YnRsZSk7Y29sb3I6dmFyKC0tY3YtdGV4dC1zZWNvbmRhcnkpO2N1cnNvcjpwb2ludGVyO1wiPlxuICAgICAgICAgICAgUGFzdGUgb3IgdXBsb2FkIGEgZG9jdW1lbnRcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBpZD1cIm1kdS1ubF9pbnN0cnVjdGlvbi1pbnB1dC1hcmVhXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cIm1kdS1ubC10ZXh0YXJlYVwiIHN0eWxlPVwiZm9udC1zaXplOjAuODJlbTtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tY3YtdGV4dC1tdXRlZCk7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweDtcIj5cbiAgICAgICAgICAgIERlc2NyaWJlIHRoZSBjaGFuZ2VcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cIm1kdS1ubC10ZXh0YXJlYVwiIHJvd3M9XCIzXCIgbWF4bGVuZ3RoPVwiNDAwMFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gJnF1b3Q7SSBqdXN0IGZpbmlzaGVkIGEgcHJvamVjdCBhdCBBY21lIHVzaW5nIEt1YmVybmV0ZXMgXHUyMDE0IGFkZCBpdCB0byB0aGF0IHJvbGUncyBhY2hpZXZlbWVudHMuJnF1b3Q7XCJcbiAgICAgICAgICAgIG9ua2V5ZG93bj1cImlmKChldmVudC5jdHJsS2V5fHxldmVudC5tZXRhS2V5KSYmZXZlbnQua2V5PT09J0VudGVyJyl7ZXZlbnQucHJldmVudERlZmF1bHQoKTtzdWJtaXRNYXN0ZXJEYXRhQWlQcm9wb3NlKCk7fVwiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tY3YtYm9yZGVyKTtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC44OGVtO3Jlc2l6ZTp2ZXJ0aWNhbDtcIj48L3RleHRhcmVhPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGlkPVwibWR1LWRvY3VtZW50X2luZ2VzdGlvbi1pbnB1dC1hcmVhXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cIm1kdS1kb2MtdGV4dGFyZWFcIiBzdHlsZT1cImZvbnQtc2l6ZTowLjgyZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWN2LXRleHQtbXV0ZWQpO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7XCI+XG4gICAgICAgICAgICBQYXN0ZSBkb2N1bWVudCB0ZXh0LCBvciB1cGxvYWQgYSBmaWxlXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJtZHUtZG9jLXRleHRhcmVhXCIgcm93cz1cIjRcIiBtYXhsZW5ndGg9XCI2MDAwMFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBhc3RlIGFuIG9sZCBDViBvciBMaW5rZWRJbiBleHBvcnQuLi5cIlxuICAgICAgICAgICAgb25rZXlkb3duPVwiaWYoKGV2ZW50LmN0cmxLZXl8fGV2ZW50Lm1ldGFLZXkpJiZldmVudC5rZXk9PT0nRW50ZXInKXtldmVudC5wcmV2ZW50RGVmYXVsdCgpO3N1Ym1pdE1hc3RlckRhdGFBaVByb3Bvc2UoKTt9XCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1jdi1ib3JkZXIpO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtc2l6ZTowLjg4ZW07cmVzaXplOnZlcnRpY2FsO21hcmdpbi1ib3R0b206OHB4O1wiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJtZHUtZG9jLWZpbGUtaW5wdXRcIiBhY2NlcHQ9XCIudHh0LC5tZCwucnN0LC5odG1sLC5odG0sLnBkZiwuZG9jeCwucnRmXCJcbiAgICAgICAgICAgIG9uY2hhbmdlPVwiaGFuZGxlTWFzdGVyRGF0YUFpRmlsZVVwbG9hZChldmVudClcIiBhcmlhLWRlc2NyaWJlZGJ5PVwibWR1LXVwbG9hZC1kaXNjbG9zdXJlXCJcbiAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOjAuODJlbTtcIj5cbiAgICAgICAgICA8cCBpZD1cIm1kdS11cGxvYWQtZGlzY2xvc3VyZVwiIHN0eWxlPVwiZm9udC1zaXplOjAuNzhlbTtjb2xvcjp2YXIoLS1jdi10ZXh0LXNlY29uZGFyeSk7bWFyZ2luOjZweCAwIDA7XCI+XG4gICAgICAgICAgICBUaGlzIGRvY3VtZW50IHdpbGwgYmUgc2VudCB0byB5b3VyIGNvbmZpZ3VyZWQgQUkgcHJvdmlkZXIgXHUyMDE0IHNlZSB0aGUgZGF0YSBoYW5kbGluZyBiYWRnZSBhYm92ZS5cbiAgICAgICAgICAgIEFuIG9sZCBDViBvciBMaW5rZWRJbiBleHBvcnQgY2FuIGNhcnJ5IG1vcmUgcGVyc29uYWwgaW5mb3JtYXRpb24gdGhhbiBhIGpvYiBkZXNjcmlwdGlvbi5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXRvcDoxMnB4O1wiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwibWR1LXByb3Bvc2UtYnRuXCIgb25jbGljaz1cInN1Ym1pdE1hc3RlckRhdGFBaVByb3Bvc2UoKVwiXG4gICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6OHB4IDE4cHg7Zm9udC1zaXplOjAuODhlbTtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDp2YXIoLS1jdi1hY2NlbnQpO2NvbG9yOnZhcigtLWN2LXdoaXRlKTtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjZweDtcIj5cbiAgICAgICAgICAgIFByb3Bvc2UgVXBkYXRlXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJtZHUtZGlzY2FyZC1idG5cIiBvbmNsaWNrPVwiZGlzY2FyZE1hc3RlckRhdGFBaVByb3Bvc2FsKClcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtwYWRkaW5nOjhweCAxNHB4O2ZvbnQtc2l6ZTowLjg1ZW07Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDp2YXIoLS1jdi13aGl0ZSk7Y29sb3I6dmFyKC0tY3YtdGV4dC1zZWNvbmRhcnkpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tY3YtYm9yZGVyKTtib3JkZXItcmFkaXVzOjZweDtcIj5cbiAgICAgICAgICAgIERpc2NhcmRcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBpZD1cIm1kdS1zdGF0dXNcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1saXZlPVwicG9saXRlXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjAuODVlbTtjb2xvcjp2YXIoLS1jdi10ZXh0LXNlY29uZGFyeSk7XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJtZHUtY2xhcmlmaWNhdGlvbi1jb250YWluZXJcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cIm1kdS1yZXZpZXctYXJlYVwiIHN0eWxlPVwibWFyZ2luLXRvcDoxMnB4O1wiPjwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwibWR1LXJlc3VsdFwiIHN0eWxlPVwibWFyZ2luLXRvcDoxMnB4O1wiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTWFzdGVyRGF0YUFpVXBkYXRlRGlzYWJsZWROb3RlKCkge1xuICByZXR1cm4gYFxuICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46MTZweCAwO3BhZGRpbmc6MTBweCAxNHB4O2JhY2tncm91bmQ6dmFyKC0tY3YtYmctc3VidGxlKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWN2LWJvcmRlcik7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjAuODVlbTtjb2xvcjp2YXIoLS1jdi10ZXh0LXNlY29uZGFyeSk7XCI+XG4gICAgICBcdUQ4M0VcdUREMTYgVXBkYXRlIHZpYSBBSSBpcyBhdmFpbGFibGUgYmVmb3JlIGFuYWx5c2lzIHN0YXJ0cyBvciBkdXJpbmcgcmVmaW5lbWVudC5cbiAgICA8L2Rpdj5gO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgUGFuZWwgZXhwYW5kL2NvbGxhcHNlICsgbW9kZSB0b2dnbGUgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIHRvZ2dsZU1hc3RlckRhdGFBaVBhbmVsKCkge1xuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1wYW5lbC1ib2R5Jyk7XG4gIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtdG9nZ2xlLWJ0bicpO1xuICBjb25zdCBpY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS10b2dnbGUtaWNvbicpO1xuICBpZiAoIWJvZHkgfHwgIWJ0bikgcmV0dXJuO1xuICBjb25zdCBleHBhbmRlZCA9IGJvZHkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnO1xuICBib2R5LnN0eWxlLmRpc3BsYXkgPSBleHBhbmRlZCA/ICdub25lJyA6ICdibG9jayc7XG4gIGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBTdHJpbmcoIWV4cGFuZGVkKSk7XG4gIGlmIChpY29uKSBpY29uLnRleHRDb250ZW50ID0gZXhwYW5kZWQgPyAnXHUyNUI4JyA6ICdcdTI1QkUnO1xufVxuXG5mdW5jdGlvbiBzZXRNYXN0ZXJEYXRhQWlNb2RlKG1vZGUpIHtcbiAgX21kdU1vZGUgPSBtb2RlO1xuICBmb3IgKGNvbnN0IG0gb2YgWydubF9pbnN0cnVjdGlvbicsICdkb2N1bWVudF9pbmdlc3Rpb24nXSkge1xuICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBtZHUtbW9kZS0ke219LWJ0bmApO1xuICAgIGNvbnN0IGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgbWR1LSR7bX0taW5wdXQtYXJlYWApO1xuICAgIGNvbnN0IGFjdGl2ZSA9IG0gPT09IG1vZGU7XG4gICAgaWYgKGJ0bikge1xuICAgICAgYnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIFN0cmluZyhhY3RpdmUpKTtcbiAgICAgIGJ0bi5zdHlsZS5iYWNrZ3JvdW5kID0gYWN0aXZlID8gJ3ZhcigtLWN2LXdoaXRlKScgOiAndmFyKC0tY3YtYmctc3VidGxlKSc7XG4gICAgICBidG4uc3R5bGUuY29sb3IgPSBhY3RpdmUgPyAndmFyKC0tY3YtdGV4dC1wcmltYXJ5KScgOiAndmFyKC0tY3YtdGV4dC1zZWNvbmRhcnkpJztcbiAgICAgIGJ0bi5zdHlsZS5mb250V2VpZ2h0ID0gYWN0aXZlID8gJzYwMCcgOiAnNDAwJztcbiAgICB9XG4gICAgaWYgKGFyZWEpIGFyZWEuc3R5bGUuZGlzcGxheSA9IGFjdGl2ZSA/ICdibG9jaycgOiAnbm9uZSc7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIERvY3VtZW50IHVwbG9hZCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlTWFzdGVyRGF0YUFpRmlsZVVwbG9hZChldmVudCkge1xuICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzICYmIGV2ZW50LnRhcmdldC5maWxlc1swXTtcbiAgaWYgKCFmaWxlKSByZXR1cm47XG4gIGNvbnN0IHN0YXR1c0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1zdGF0dXMnKTtcbiAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9IGBSZWFkaW5nICR7ZmlsZS5uYW1lfVx1MjAyNmA7XG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2goJy9hcGkvdXBsb2FkLWZpbGUnLCB7IG1ldGhvZDogJ1BPU1QnLCBib2R5OiBmb3JtRGF0YSB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcC5qc29uKCk7XG4gICAgaWYgKCFyZXNwLm9rIHx8IGRhdGEuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLm1lc3NhZ2UgfHwgZGF0YS5lcnJvciB8fCBgU2VydmVyIGVycm9yICR7cmVzcC5zdGF0dXN9YCk7XG4gICAgfVxuICAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1kb2MtdGV4dGFyZWEnKTtcbiAgICBpZiAodGV4dGFyZWEpIHRleHRhcmVhLnZhbHVlID0gZGF0YS50ZXh0O1xuICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSBgTG9hZGVkICR7ZGF0YS5jb250ZW50X2xlbmd0aC50b0xvY2FsZVN0cmluZygpfSBjaGFyYWN0ZXJzIGZyb20gXCIke2RhdGEuZmlsZW5hbWV9XCIuYDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKCdoYW5kbGVNYXN0ZXJEYXRhQWlGaWxlVXBsb2FkOiBmYWlsZWQnLCBlcnIpO1xuICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSBgRXJyb3IgcmVhZGluZyBmaWxlOiAke2Vyci5tZXNzYWdlfWA7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFByb3Bvc2UgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIF9tZHVFbmRwb2ludEZvck1vZGUobW9kZSkge1xuICByZXR1cm4gbW9kZSA9PT0gJ25sX2luc3RydWN0aW9uJyA/ICcvYXBpL21hc3Rlci1kYXRhL25sLXVwZGF0ZS9wcm9wb3NlJyA6ICcvYXBpL21hc3Rlci1kYXRhL2luZ2VzdC1kb2N1bWVudC9wcm9wb3NlJztcbn1cblxuZnVuY3Rpb24gX21kdUlucHV0Rm9yTW9kZShtb2RlKSB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobW9kZSA9PT0gJ25sX2luc3RydWN0aW9uJyA/ICdtZHUtbmwtdGV4dGFyZWEnIDogJ21kdS1kb2MtdGV4dGFyZWEnKTtcbiAgcmV0dXJuIGVsID8gZWwudmFsdWUudHJpbSgpIDogJyc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdE1hc3RlckRhdGFBaVByb3Bvc2UoKSB7XG4gIGNvbnN0IGlucHV0ID0gX21kdUlucHV0Rm9yTW9kZShfbWR1TW9kZSk7XG4gIGNvbnN0IHN0YXR1c0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1zdGF0dXMnKTtcbiAgY29uc3QgcmV2aWV3QXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtcmV2aWV3LWFyZWEnKTtcbiAgY29uc3QgcmVzdWx0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LXJlc3VsdCcpO1xuICBjb25zdCBwcm9wb3NlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1wcm9wb3NlLWJ0bicpO1xuXG4gIGlmICghaW5wdXQpIHtcbiAgICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gX21kdU1vZGUgPT09ICdubF9pbnN0cnVjdGlvbidcbiAgICAgID8gJ1BsZWFzZSBkZXNjcmliZSB0aGUgY2hhbmdlIGZpcnN0LidcbiAgICAgIDogJ1BsZWFzZSBwYXN0ZSBvciB1cGxvYWQgZG9jdW1lbnQgdGV4dCBmaXJzdC4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChyZXZpZXdBcmVhKSByZXZpZXdBcmVhLmlubmVySFRNTCA9ICcnO1xuICBpZiAocmVzdWx0RWwpIHJlc3VsdEVsLmlubmVySFRNTCA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LWNsYXJpZmljYXRpb24tY29udGFpbmVyJykuaW5uZXJIVE1MID0gJyc7XG4gIGlmIChwcm9wb3NlQnRuKSB7IHByb3Bvc2VCdG4uZGlzYWJsZWQgPSB0cnVlOyBwcm9wb3NlQnRuLnRleHRDb250ZW50ID0gJ0FuYWx5emluZ1x1MjAyNic7IH1cbiAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdBbmFseXppbmdcdTIwMjYnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgYm9keSA9IHsgcHJpb3JfY2xhcmlmaWNhdGlvbnM6IF9tZHVQcmlvckNsYXJpZmljYXRpb25zIH07XG4gICAgYm9keVtfbWR1TW9kZSA9PT0gJ25sX2luc3RydWN0aW9uJyA/ICdpbnN0cnVjdGlvbicgOiAndGV4dCddID0gaW5wdXQ7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGZldGNoKF9tZHVFbmRwb2ludEZvck1vZGUoX21kdU1vZGUpLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3AuanNvbigpO1xuXG4gICAgaWYgKCFyZXNwLm9rIHx8IGRhdGEub2sgPT09IGZhbHNlKSB7XG4gICAgICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gYEVycm9yOiAke2VzYyhkYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJyl9YDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5yZXF1aXJlc19jbGFyaWZpY2F0aW9uKSB7XG4gICAgICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJyc7XG4gICAgICBfbWR1U2hvd0NsYXJpZmljYXRpb25EaWFsb2coZGF0YS5jbGFyaWZpY2F0aW9uX3F1ZXN0aW9uLCBpbnB1dCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgX21kdVByaW9yQ2xhcmlmaWNhdGlvbnMgPSBbXTtcbiAgICBjb25zdCBjaGFuZ2VzID0gZGF0YS5jaGFuZ2VzIHx8IFtdO1xuICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnJztcblxuICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHJldmlld0FyZWEpIHJldmlld0FyZWEuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtjb2xvcjp2YXIoLS1jdi10ZXh0LXNlY29uZGFyeSk7XCI+Tm8gY2hhbmdlcyBjb3VsZCBiZSBwcm9wb3NlZCBmcm9tIHRoYXQgXHUyMDE0IHRyeSBhZGRpbmcgbW9yZSBkZXRhaWwuPC9wPmA7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgX21kdVBlbmRpbmdQcm9wb3NhbCA9IHsgcHJvcG9zYWxJZDogZGF0YS5wcm9wb3NhbF9pZCwgc291cmNlOiBfbWR1TW9kZSwgY2hhbmdlcyB9O1xuICAgIF9tZHVSZW5kZXJSZXZpZXdBcmVhKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcignc3VibWl0TWFzdGVyRGF0YUFpUHJvcG9zZTogZmFpbGVkJywgZXJyKTtcbiAgICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gYE5ldHdvcmsgZXJyb3I6ICR7ZXNjKGVyci5tZXNzYWdlKX1gO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChwcm9wb3NlQnRuKSB7IHByb3Bvc2VCdG4uZGlzYWJsZWQgPSBmYWxzZTsgcHJvcG9zZUJ0bi50ZXh0Q29udGVudCA9ICdQcm9wb3NlIFVwZGF0ZSc7IH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNjYXJkTWFzdGVyRGF0YUFpUHJvcG9zYWwoKSB7XG4gIF9tZHVQZW5kaW5nUHJvcG9zYWwgPSBudWxsO1xuICBfbWR1UHJpb3JDbGFyaWZpY2F0aW9ucyA9IFtdO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LXJldmlldy1hcmVhJykuaW5uZXJIVE1MID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtcmVzdWx0JykuaW5uZXJIVE1MID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtZGlzY2FyZC1idG4nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBjb25zdCBzdGF0dXNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtc3RhdHVzJyk7XG4gIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnRGlzY2FyZGVkLic7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBDbGFyaWZpY2F0aW9uIGRpYWxvZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbi8vIE1vZGVsZWQgb24gc2hvd0NsYXJpZmljYXRpb25EaWFsb2coKSBpbiB3ZWIvbGF5b3V0LWluc3RydWN0aW9uLmpzLCBub3QgYVxuLy8gbGl0ZXJhbCBjb3B5LXBhc3RlIHBvcnQ6IHRoYXQgdmVyc2lvbiBoYXJkLWNvZGVzIGl0cyBtb3VudCBwb2ludCBhbmQgdXNlc1xuLy8gbm9uLW5hbWVzcGFjZWQgZWxlbWVudCBpZHMgKGxheW91dC1jbGFyaWZpY2F0aW9uLSopLCB3aGljaCB3b3VsZCBjb2xsaWRlXG4vLyB3aXRoIHRoaXMgcGFuZWwncyBvd24gaWRzIGlmIGJvdGggdGFicyBhcmUgcHJlc2VudCBpbiB0aGUgRE9NIGF0IG9uY2Vcbi8vIChDU1MtaGlkZGVuIHRhYnMgYXJlbid0IHVubW91bnRlZCkuIFRoaXMgdmVyc2lvbiBtb3VudHMgaW50byB0aGUgcGFuZWwnc1xuLy8gb3duICNtZHUtY2xhcmlmaWNhdGlvbi1jb250YWluZXIgYW5kIHVzZXMgYW4gbWR1LSogaWQgbmFtZXNwYWNlIHRocm91Z2hvdXQuXG5cbmZ1bmN0aW9uIF9tZHVTaG93Q2xhcmlmaWNhdGlvbkRpYWxvZyhxdWVzdGlvbiwgb3JpZ2luYWxJbnN0cnVjdGlvbikge1xuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LWNsYXJpZmljYXRpb24tY29udGFpbmVyJyk7XG4gIGlmICghY29udGFpbmVyKSB7XG4gICAgbG9nLndhcm4oJ19tZHVTaG93Q2xhcmlmaWNhdGlvbkRpYWxvZzogI21kdS1jbGFyaWZpY2F0aW9uLWNvbnRhaW5lciBub3QgZm91bmQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcmlnaW5hdGluZ0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtcHJvcG9zZS1idG4nKTtcblxuICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwYW5lbC5pZCA9ICdtZHUtY2xhcmlmaWNhdGlvbi1wYW5lbCc7XG4gIHBhbmVsLnNldEF0dHJpYnV0ZSgncm9sZScsICdhbGVydCcpO1xuICBwYW5lbC5zdHlsZS5jc3NUZXh0ID0gJ2JhY2tncm91bmQ6dmFyKC0tY3Ytd2Fybi1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1jdi13YXJuLWxpZ2h0KTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE0cHg7bWFyZ2luLXRvcDoxMHB4Oyc7XG4gIHBhbmVsLmlubmVySFRNTCA9IGBcbiAgICA8cCBzdHlsZT1cIm1hcmdpbjowIDAgNnB4O2ZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6dmFyKC0tY3Ytd2Fybi10ZXh0KTtmb250LXdlaWdodDo2MDA7XCI+XG4gICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cdTI3NTM8L3NwYW4+IEFsbW9zdCB0aGVyZSBcdTIwMTQgYSBiaXQgbW9yZSBkZXRhaWwgd291bGQgaGVscDpcbiAgICA8L3A+XG4gICAgPHAgc3R5bGU9XCJtYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjAuODhlbTtjb2xvcjp2YXIoLS1jdi13YXJuLXRleHQpO1wiPiR7ZXNjKHF1ZXN0aW9uKX08L3A+XG4gICAgPGxhYmVsIGZvcj1cIm1kdS1jbGFyaWZpY2F0aW9uLWlucHV0XCIgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS1jdi10ZXh0LW11dGVkKTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O1wiPlxuICAgICAgWW91ciBjbGFyaWZpY2F0aW9uOlxuICAgIDwvbGFiZWw+XG4gICAgPHRleHRhcmVhIGlkPVwibWR1LWNsYXJpZmljYXRpb24taW5wdXRcIiByb3dzPVwiMlwiXG4gICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tY3Ytd2Fybi1saWdodCk7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjAuODhlbTtyZXNpemU6dmVydGljYWw7XCJcbiAgICAgIGFyaWEtbGFiZWw9XCJDbGFyaWZpY2F0aW9uIGZvciBtYXN0ZXIgZGF0YSB1cGRhdGVcIj4ke2VzYyhvcmlnaW5hbEluc3RydWN0aW9uKX08L3RleHRhcmVhPlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjhweDttYXJnaW4tdG9wOjhweDtcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwibWR1LWNsYXJpZmljYXRpb24tc3VibWl0XCJcbiAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOnZhcigtLWN2LXdhcm4pO2NvbG9yOnZhcigtLWN2LXdoaXRlKTtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjZweCAxNHB4O2ZvbnQtc2l6ZTowLjg1ZW07Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO1wiPlxuICAgICAgICBTdWJtaXQgY2xhcmlmaWNhdGlvblxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cIm1kdS1jbGFyaWZpY2F0aW9uLWNhbmNlbFwiXG4gICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpub25lO2JvcmRlcjoxcHggc29saWQgdmFyKC0tY3Ytd2Fybik7Y29sb3I6dmFyKC0tY3Ytd2Fybi10ZXh0KTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjZweCAxNHB4O2ZvbnQtc2l6ZTowLjg1ZW07Y3Vyc29yOnBvaW50ZXI7XCI+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+YDtcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwYW5lbCk7XG5cbiAgY29uc3QgY2xhcklucHV0ID0gcGFuZWwucXVlcnlTZWxlY3RvcignI21kdS1jbGFyaWZpY2F0aW9uLWlucHV0Jyk7XG4gIGNvbnN0IHN1Ym1pdEJ0biA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3IoJyNtZHUtY2xhcmlmaWNhdGlvbi1zdWJtaXQnKTtcbiAgY29uc3QgY2FuY2VsQnRuID0gcGFuZWwucXVlcnlTZWxlY3RvcignI21kdS1jbGFyaWZpY2F0aW9uLWNhbmNlbCcpO1xuXG4gIGNsYXJJbnB1dC5mb2N1cygpO1xuICBjbGFySW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UoY2xhcklucHV0LnZhbHVlLmxlbmd0aCwgY2xhcklucHV0LnZhbHVlLmxlbmd0aCk7XG5cbiAgY29uc3QgY2xvc2VBbmRSZXN0b3JlRm9jdXMgPSAoKSA9PiB7XG4gICAgcGFuZWwucmVtb3ZlKCk7XG4gICAgaWYgKG9yaWdpbmF0aW5nQnRuKSBvcmlnaW5hdGluZ0J0bi5mb2N1cygpO1xuICB9O1xuXG4gIHN1Ym1pdEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBjb25zdCByZWZpbmVkID0gY2xhcklucHV0LnZhbHVlLnRyaW0oKTtcbiAgICBpZiAocmVmaW5lZCkge1xuICAgICAgX21kdVByaW9yQ2xhcmlmaWNhdGlvbnMgPSBbLi4uX21kdVByaW9yQ2xhcmlmaWNhdGlvbnMsIHsgcXVlc3Rpb24sIGFuc3dlcjogcmVmaW5lZCB9XTtcbiAgICAgIGNvbnN0IGlucHV0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChfbWR1TW9kZSA9PT0gJ25sX2luc3RydWN0aW9uJyA/ICdtZHUtbmwtdGV4dGFyZWEnIDogJ21kdS1kb2MtdGV4dGFyZWEnKTtcbiAgICAgIGlmIChpbnB1dEVsKSBpbnB1dEVsLnZhbHVlID0gcmVmaW5lZDtcbiAgICB9XG4gICAgY2xvc2VBbmRSZXN0b3JlRm9jdXMoKTtcbiAgICBpZiAocmVmaW5lZCkgc3VibWl0TWFzdGVyRGF0YUFpUHJvcG9zZSgpO1xuICB9KTtcbiAgY2FuY2VsQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xvc2VBbmRSZXN0b3JlRm9jdXMpO1xuICBjbGFySW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7IGUucHJldmVudERlZmF1bHQoKTsgc3VibWl0QnRuLmNsaWNrKCk7IH1cbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBjYW5jZWxCdG4uY2xpY2soKTtcbiAgfSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZXZpZXcgYXJlYSAocHJvcG9zYWwgcm93cykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIF9tZHVDaGFuZ2VEaXNwbGF5VGV4dChjaGFuZ2UpIHtcbiAgY29uc3QgcHJvcG9zZWQgPSBjaGFuZ2UucHJvcG9zZWQ7XG4gIGlmICh0eXBlb2YgcHJvcG9zZWQgPT09ICdzdHJpbmcnKSByZXR1cm4gcHJvcG9zZWQ7XG4gIGlmIChwcm9wb3NlZCAmJiB0eXBlb2YgcHJvcG9zZWQgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKCd0ZXh0JyBpbiBwcm9wb3NlZCkgcmV0dXJuIHByb3Bvc2VkLnRleHQ7XG4gICAgaWYgKCduYW1lJyBpbiBwcm9wb3NlZCkgcmV0dXJuIHByb3Bvc2VkLm5hbWU7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHByb3Bvc2VkKTtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIF9tZHVGbGFnSHRtbChjaGFuZ2UpIHtcbiAgaWYgKGNoYW5nZS5wb3NzaWJsZV9kdXBsaWNhdGVfb2YpIHtcbiAgICByZXR1cm4gYDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjZweDtwYWRkaW5nOjZweCA4cHg7YmFja2dyb3VuZDp2YXIoLS1jdi13YXJuLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWN2LXdhcm4tYm9yZGVyKTtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC44ZW07Y29sb3I6dmFyKC0tY3Ytd2Fybi10ZXh0KTtcIj5cbiAgICAgIFx1MjZBMCBwb3NzaWJsZSBkdXBsaWNhdGUgb2YgJHtlc2MoY2hhbmdlLnBvc3NpYmxlX2R1cGxpY2F0ZV9vZil9XG4gICAgPC9kaXY+YDtcbiAgfVxuICBpZiAoY2hhbmdlLnBlcnN1YXNpb25fZmxhZ3MgJiYgY2hhbmdlLnBlcnN1YXNpb25fZmxhZ3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTo2cHg7cGFkZGluZzo2cHggOHB4O2JhY2tncm91bmQ6dmFyKC0tY3Ytd2Fybi1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1jdi13YXJuLWJvcmRlcik7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjAuOGVtO2NvbG9yOnZhcigtLWN2LXdhcm4tdGV4dCk7XCI+XG4gICAgICBcdTI2QTAgcXVhbGl0eSBhZHZpc29yeTogJHtlc2MoY2hhbmdlLnBlcnN1YXNpb25fZmxhZ3Muam9pbignLCAnKSl9XG4gICAgPC9kaXY+YDtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIF9tZHVBcmlhU3VmZml4KGNoYW5nZSkge1xuICBjb25zdCBwYXJ0cyA9IFtdO1xuICBpZiAoY2hhbmdlLnBvc3NpYmxlX2R1cGxpY2F0ZV9vZikgcGFydHMucHVzaChgcG9zc2libGUgZHVwbGljYXRlIG9mICR7Y2hhbmdlLnBvc3NpYmxlX2R1cGxpY2F0ZV9vZn1gKTtcbiAgaWYgKGNoYW5nZS5wZXJzdWFzaW9uX2ZsYWdzICYmIGNoYW5nZS5wZXJzdWFzaW9uX2ZsYWdzLmxlbmd0aCkgcGFydHMucHVzaChgcXVhbGl0eSBhZHZpc29yeTogJHtjaGFuZ2UucGVyc3Vhc2lvbl9mbGFncy5qb2luKCcsICcpfWApO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID8gYCwgJHtwYXJ0cy5qb2luKCcsICcpfWAgOiAnJztcbn1cblxuZnVuY3Rpb24gX21kdVJlbmRlclJldmlld0FyZWEoKSB7XG4gIGNvbnN0IHJldmlld0FyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LXJldmlldy1hcmVhJyk7XG4gIGNvbnN0IGRpc2NhcmRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LWRpc2NhcmQtYnRuJyk7XG4gIGlmICghcmV2aWV3QXJlYSB8fCAhX21kdVBlbmRpbmdQcm9wb3NhbCkgcmV0dXJuO1xuXG4gIGNvbnN0IGNoYW5nZXMgPSBfbWR1UGVuZGluZ1Byb3Bvc2FsLmNoYW5nZXM7XG4gIGNvbnN0IHJvd3NIdG1sID0gY2hhbmdlcy5tYXAoKGMpID0+IHJlbmRlclByb3Bvc2FsUm93KHtcbiAgICBpZDogYy5pZCxcbiAgICB0eXBlTGFiZWw6IGMuc2VjdGlvbixcbiAgICBsYWJlbDogYy5sYWJlbCxcbiAgICBwcm9wb3NlZDogX21kdUNoYW5nZURpc3BsYXlUZXh0KGMpLFxuICAgIGRldGFpbFRleHQ6IGMucmF0aW9uYWxlLFxuICAgIGZsYWdIdG1sOiBfbWR1RmxhZ0h0bWwoYyksXG4gICAgY2hlY2tlZDogZmFsc2UsXG4gIH0sIHtcbiAgICBpZFByZWZpeDogJ21kdScsXG4gICAgY2hlY2tib3hEYXRhQXR0cjogJ21kdS1pZCcsXG4gICAgYXJpYUxhYmVsU3VmZml4OiBfbWR1QXJpYVN1ZmZpeChjKSxcbiAgfSkpLmpvaW4oJycpO1xuXG4gIGNvbnN0IGZsYWdnZWRDb3VudCA9IGNoYW5nZXMuZmlsdGVyKGMgPT4gYy5wb3NzaWJsZV9kdXBsaWNhdGVfb2YgfHwgKGMucGVyc3Vhc2lvbl9mbGFncyAmJiBjLnBlcnN1YXNpb25fZmxhZ3MubGVuZ3RoKSkubGVuZ3RoO1xuXG4gIHJldmlld0FyZWEuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlByb3Bvc2VkIGNoYW5nZXMsICR7Y2hhbmdlcy5sZW5ndGh9IGl0ZW1zLCAwIHNlbGVjdGVkXCIgaWQ9XCJtZHUtcm93LWdyb3VwXCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjhweDtcIj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOnZhcigtLWN2LXRleHQtc2Vjb25kYXJ5KTtcIj4ke2NoYW5nZXMubGVuZ3RofSBwcm9wb3NlZCBjaGFuZ2Uke2NoYW5nZXMubGVuZ3RoID09PSAxID8gJycgOiAncyd9PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbmNsaWNrPVwic2VsZWN0TWFzdGVyRGF0YUFpTm9uRmxhZ2dlZCgpXCIgc3R5bGU9XCJmb250LXNpemU6MC44ZW07cGFkZGluZzo0cHggMTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWN2LWJvcmRlcik7Ym9yZGVyLXJhZGl1czo0cHg7YmFja2dyb3VuZDp2YXIoLS1jdi13aGl0ZSk7Y29sb3I6dmFyKC0tY3YtdGV4dC1wcmltYXJ5KTtjdXJzb3I6cG9pbnRlcjtcIj5cbiAgICAgICAgICBTZWxlY3QgYWxsIG5vbi1mbGFnZ2VkXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtcIj4ke3Jvd3NIdG1sfTwvdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZD1cIm1kdS1zZWxlY3Rpb24tbGl2ZVwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGNsYXNzPVwic3Itb25seVwiIHN0eWxlPVwicG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDoxcHg7b3ZlcmZsb3c6aGlkZGVuO1wiPjwvZGl2PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwibWR1LWNvbmZpcm0tYnRuXCIgb25jbGljaz1cImNvbmZpcm1NYXN0ZXJEYXRhQWlVcGRhdGUoKVwiIGRpc2FibGVkXG4gICAgICBzdHlsZT1cIm1hcmdpbi10b3A6MTBweDtwYWRkaW5nOjlweCAyMHB4O2ZvbnQtc2l6ZTowLjllbTtmb250LXdlaWdodDo2MDA7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQ6dmFyKC0tY3Ytc2xhdGUtMzAwKTtjb2xvcjp2YXIoLS1jdi13aGl0ZSk7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo2cHg7XCI+XG4gICAgICBDb25maXJtIGFuZCBXcml0ZVxuICAgIDwvYnV0dG9uPlxuICAgICR7ZmxhZ2dlZENvdW50ID8gYDxwIHN0eWxlPVwiZm9udC1zaXplOjAuNzhlbTtjb2xvcjp2YXIoLS1jdi13YXJuLXRleHQpO21hcmdpbi10b3A6NnB4O1wiPiR7ZmxhZ2dlZENvdW50fSBpdGVtJHtmbGFnZ2VkQ291bnQgPT09IDEgPyAnJyA6ICdzJ30gZmxhZ2dlZCBmb3IgcmV2aWV3IGFib3ZlLjwvcD5gIDogJyd9YDtcblxuICBpZiAoZGlzY2FyZEJ0bikgZGlzY2FyZEJ0bi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG5cbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1yZXZpZXctYXJlYScpO1xuICBhdHRhY2hQcm9wb3NhbFJvd0xpc3RlbmVycyhjb250YWluZXIsICdtZHUnKTtcbiAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtbWR1LWlkXScpLmZvckVhY2goKGNiKSA9PiB7XG4gICAgY2IuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgX21kdVVwZGF0ZUNvbmZpcm1CdXR0b25TdGF0ZSk7XG4gIH0pO1xuICBfbWR1VXBkYXRlQ29uZmlybUJ1dHRvblN0YXRlKCk7XG59XG5cbmZ1bmN0aW9uIF9tZHVVcGRhdGVDb25maXJtQnV0dG9uU3RhdGUoKSB7XG4gIGNvbnN0IGNoZWNrZWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtkYXRhLW1kdS1pZF06Y2hlY2tlZCcpO1xuICBjb25zdCBjb25maXJtQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1jb25maXJtLWJ0bicpO1xuICBjb25zdCBncm91cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtcm93LWdyb3VwJyk7XG4gIGNvbnN0IGxpdmVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtc2VsZWN0aW9uLWxpdmUnKTtcbiAgY29uc3QgdG90YWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtkYXRhLW1kdS1pZF0nKS5sZW5ndGg7XG4gIGlmIChjb25maXJtQnRuKSB7XG4gICAgY29uZmlybUJ0bi5kaXNhYmxlZCA9IGNoZWNrZWQubGVuZ3RoID09PSAwO1xuICAgIGNvbmZpcm1CdG4uc3R5bGUuY3Vyc29yID0gY2hlY2tlZC5sZW5ndGggPT09IDAgPyAnbm90LWFsbG93ZWQnIDogJ3BvaW50ZXInO1xuICAgIGNvbmZpcm1CdG4uc3R5bGUuYmFja2dyb3VuZCA9IGNoZWNrZWQubGVuZ3RoID09PSAwID8gJ3ZhcigtLWN2LXNsYXRlLTMwMCknIDogJ3ZhcigtLWN2LXN1Y2Nlc3MtbWQpJztcbiAgfVxuICBpZiAoZ3JvdXApIGdyb3VwLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGBQcm9wb3NlZCBjaGFuZ2VzLCAke3RvdGFsfSBpdGVtcywgJHtjaGVja2VkLmxlbmd0aH0gc2VsZWN0ZWRgKTtcbiAgaWYgKGxpdmVFbCkgbGl2ZUVsLnRleHRDb250ZW50ID0gYCR7Y2hlY2tlZC5sZW5ndGh9IG9mICR7dG90YWx9IHNlbGVjdGVkYDtcbn1cblxuZnVuY3Rpb24gc2VsZWN0TWFzdGVyRGF0YUFpTm9uRmxhZ2dlZCgpIHtcbiAgaWYgKCFfbWR1UGVuZGluZ1Byb3Bvc2FsKSByZXR1cm47XG4gIGNvbnN0IGZsYWdnZWRJZHMgPSBuZXcgU2V0KFxuICAgIF9tZHVQZW5kaW5nUHJvcG9zYWwuY2hhbmdlc1xuICAgICAgLmZpbHRlcihjID0+IGMucG9zc2libGVfZHVwbGljYXRlX29mIHx8IChjLnBlcnN1YXNpb25fZmxhZ3MgJiYgYy5wZXJzdWFzaW9uX2ZsYWdzLmxlbmd0aCkpXG4gICAgICAubWFwKGMgPT4gYy5pZCksXG4gICk7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtbWR1LWlkXScpLmZvckVhY2goKGNiKSA9PiB7XG4gICAgaWYgKCFmbGFnZ2VkSWRzLmhhcyhjYi5kYXRhc2V0Lm1kdUlkKSkgY2IuY2hlY2tlZCA9IHRydWU7XG4gIH0pO1xuICBfbWR1VXBkYXRlQ29uZmlybUJ1dHRvblN0YXRlKCk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBDb25maXJtIGFuZCB3cml0ZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gY29uZmlybU1hc3RlckRhdGFBaVVwZGF0ZSgpIHtcbiAgaWYgKCFfbWR1UGVuZGluZ1Byb3Bvc2FsKSByZXR1cm47XG4gIGNvbnN0IHNlbGVjdGVkSWRzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtkYXRhLW1kdS1pZF06Y2hlY2tlZCcpKS5tYXAoY2IgPT4gY2IuZGF0YXNldC5tZHVJZCk7XG4gIGlmIChzZWxlY3RlZElkcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICBjb25zdCBzb3VyY2VMYWJlbCA9IF9tZHVQZW5kaW5nUHJvcG9zYWwuc291cmNlID09PSAnbmxfaW5zdHJ1Y3Rpb24nID8gJ3lvdXIgaW5zdHJ1Y3Rpb24nIDogJ3RoZSB1cGxvYWRlZCBkb2N1bWVudCc7XG4gIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0ICh0eXBlb2Ygc2hvd0NvbmZpcm1Nb2RhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2hvd0NvbmZpcm1Nb2RhbChcbiAgICAgICAgYFdyaXRlICR7c2VsZWN0ZWRJZHMubGVuZ3RofSBjaGFuZ2Uke3NlbGVjdGVkSWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfSB0byBNYXN0ZXIgQ1Y/YCxcbiAgICAgICAgYFRoZXNlICR7c2VsZWN0ZWRJZHMubGVuZ3RofSBjaGFuZ2Uke3NlbGVjdGVkSWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfSB3ZXJlIHByb3Bvc2VkIGJ5IEFJIGZyb20gJHtzb3VyY2VMYWJlbH0gYW5kIGhhdmUgbm90IGJlZW4gcHJldmlvdXNseSByZXZpZXdlZC4gYCArXG4gICAgICAgIGBDb25maXJtaW5nIHdpbGwgcGVybWFuZW50bHkgd3JpdGUgdGhlbSB0byBNYXN0ZXJfQ1ZfRGF0YS5qc29uLiBBIGJhY2t1cCB3aWxsIGJlIGNyZWF0ZWQgZmlyc3QgXHUyMDE0IHNlZSBcdUQ4M0RcdURENTAgQmFja3VwcyBhYm92ZSB0byByZXN0b3JlIGl0IGlmIG5lZWRlZC5gLFxuICAgICAgKVxuICAgIDogUHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5jb25maXJtKGBXcml0ZSAke3NlbGVjdGVkSWRzLmxlbmd0aH0gY2hhbmdlKHMpIHRvIE1hc3RlciBDVj8gVGhpcyB3aWxsIHBlcm1hbmVudGx5IHdyaXRlIGNoYW5nZXMgdG8gTWFzdGVyX0NWX0RhdGEuanNvbi5gKSkpO1xuXG4gIGlmICghY29uZmlybWVkKSByZXR1cm47XG5cbiAgY29uc3QgY29uZmlybUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtY29uZmlybS1idG4nKTtcbiAgY29uc3QgcmVzdWx0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LXJlc3VsdCcpO1xuICBpZiAoY29uZmlybUJ0bikgeyBjb25maXJtQnRuLmRpc2FibGVkID0gdHJ1ZTsgY29uZmlybUJ0bi50ZXh0Q29udGVudCA9ICdXcml0aW5nXHUyMDI2JzsgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL2NvbmZpcm0tdXBkYXRlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcHJvcG9zYWxfaWQ6IF9tZHVQZW5kaW5nUHJvcG9zYWwucHJvcG9zYWxJZCwgc2VsZWN0ZWRfaWRzOiBzZWxlY3RlZElkcyB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcC5qc29uKCk7XG5cbiAgICBpZiAoZGF0YS5vayA9PT0gZmFsc2UgJiYgZGF0YS5zdGFsZV9jaGFuZ2VzKSB7XG4gICAgICBfbWR1SGFuZGxlU3RhbGVDaGFuZ2VzKGRhdGEuc3RhbGVfY2hhbmdlcywgZGF0YS5hcHBsaWNhYmxlX2NoYW5nZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWRhdGEub2spIHtcbiAgICAgIGlmIChyZXN1bHRFbCkgcmVzdWx0RWwuaW5uZXJIVE1MID0gYDxwIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPkNvbmZpcm0gZmFpbGVkOiAke2VzYyhkYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJyl9PC9wPmA7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbmdlc0J5SWQgPSBPYmplY3QuZnJvbUVudHJpZXMoX21kdVBlbmRpbmdQcm9wb3NhbC5jaGFuZ2VzLm1hcChjID0+IFtjLmlkLCBjXSkpO1xuICAgIGNvbnN0IHdyaXR0ZW5MaW5lcyA9IChkYXRhLmRpZmZfc3VtbWFyeSB8fCBbXSlcbiAgICAgIC5maWx0ZXIoZCA9PiBkLmFwcGxpZWQpXG4gICAgICAubWFwKGQgPT4gYDxsaT4ke2VzYyhkLmxhYmVsIHx8IGQuaWQpfSR7Y2hhbmdlc0J5SWRbZC5pZF0/LnJhdGlvbmFsZSA/IGAgXHUyMDE0ICR7ZXNjKGNoYW5nZXNCeUlkW2QuaWRdLnJhdGlvbmFsZSl9YCA6ICcnfTwvbGk+YClcbiAgICAgIC5qb2luKCcnKTtcblxuICAgIGNvbnN0IGNvbW1pdEluZm8gPSBkYXRhLmNvbW1pdF9oYXNoID8gYCAoY29tbWl0ICR7ZXNjKGRhdGEuY29tbWl0X2hhc2gpfSlgIDogJyc7XG4gICAgY29uc3QgZ2l0V2FybmluZyA9IGRhdGEuZ2l0X2Vycm9yXG4gICAgICA/IGA8cCBzdHlsZT1cImNvbG9yOnZhcigtLWN2LXdhcm4tdGV4dCk7Zm9udC1zaXplOjAuODdlbTtcIj5cdTI2QTBcdUZFMEYgR2l0IGNvbW1pdCBza2lwcGVkOiAke2VzYyhkYXRhLmdpdF9lcnJvcj8ubWVzc2FnZSB8fCBkYXRhLmdpdF9lcnJvcil9PC9wPmBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgcHVzaFdhcm5pbmcgPSBkYXRhLnB1c2hfZXJyb3JcbiAgICAgID8gYDxwIHN0eWxlPVwiY29sb3I6dmFyKC0tY3Ytd2Fybi10ZXh0KTtmb250LXNpemU6MC44N2VtO1wiPlx1MjZBMFx1RkUwRiBHaXQgcHVzaCBza2lwcGVkOiAke2VzYyhkYXRhLnB1c2hfZXJyb3IpfTwvcD5gXG4gICAgICA6ICcnO1xuXG4gICAgaWYgKHJlc3VsdEVsKSB7XG4gICAgICByZXN1bHRFbC5pbm5lckhUTUwgPSBgXG4gICAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOnZhcigtLWN2LXN1Y2Nlc3MtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tY3Ytc3VjY2Vzcy1ib3JkZXIpO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTJweCAxNnB4O1wiPlxuICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6dmFyKC0tY3Ytc3VjY2Vzcy10ZXh0KTtmb250LXdlaWdodDo2MDA7bWFyZ2luOjAgMCA2cHg7XCI+XG4gICAgICAgICAgICBcdTI3MDUgJHtkYXRhLndyaXR0ZW5fY291bnR9IGl0ZW0ke2RhdGEud3JpdHRlbl9jb3VudCA9PT0gMSA/ICcnIDogJ3MnfSB3cml0dGVuIHRvIG1hc3RlciBDViR7Y29tbWl0SW5mb30uXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgICR7d3JpdHRlbkxpbmVzID8gYDx1bCBzdHlsZT1cImZvbnQtc2l6ZTowLjgyZW07Y29sb3I6dmFyKC0tY3YtdGV4dC1tdXRlZCk7bWFyZ2luOjRweCAwIDA7cGFkZGluZy1sZWZ0OjE4cHg7XCI+JHt3cml0dGVuTGluZXN9PC91bD5gIDogJyd9XG4gICAgICAgICAgJHtnaXRXYXJuaW5nfSR7cHVzaFdhcm5pbmd9XG4gICAgICAgIDwvZGl2PmA7XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1yZXZpZXctYXJlYScpLmlubmVySFRNTCA9ICcnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtZGlzY2FyZC1idG4nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIF9tZHVQZW5kaW5nUHJvcG9zYWwgPSBudWxsO1xuICAgIF9tZHVQcmlvckNsYXJpZmljYXRpb25zID0gW107XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcignY29uZmlybU1hc3RlckRhdGFBaVVwZGF0ZTogZmFpbGVkJywgZXJyKTtcbiAgICBpZiAocmVzdWx0RWwpIHJlc3VsdEVsLmlubmVySFRNTCA9IGA8cCBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5OZXR3b3JrIGVycm9yOiAke2VzYyhlcnIubWVzc2FnZSl9PC9wPmA7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGNvbmZpcm1CdG4pIHsgY29uZmlybUJ0bi5kaXNhYmxlZCA9IGZhbHNlOyBjb25maXJtQnRuLnRleHRDb250ZW50ID0gJ0NvbmZpcm0gYW5kIFdyaXRlJzsgfVxuICB9XG59XG5cbmZ1bmN0aW9uIF9tZHVIYW5kbGVTdGFsZUNoYW5nZXMoc3RhbGVDaGFuZ2VzLCBhcHBsaWNhYmxlQ2hhbmdlcykge1xuICBjb25zdCByZXN1bHRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtcmVzdWx0Jyk7XG4gIGNvbnN0IHN0YWxlSWRzID0gbmV3IFNldChzdGFsZUNoYW5nZXMubWFwKHMgPT4gcy5pZCkpO1xuXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtbWR1LWlkXScpLmZvckVhY2goKGNiKSA9PiB7XG4gICAgaWYgKHN0YWxlSWRzLmhhcyhjYi5kYXRhc2V0Lm1kdUlkKSkge1xuICAgICAgY2IuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgY2IuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYG1kdS1yb3ctJHtjYi5kYXRhc2V0Lm1kdUlkfWApO1xuICAgICAgaWYgKHJvdykgcm93LnN0eWxlLm9wYWNpdHkgPSAnMC41JztcbiAgICB9XG4gIH0pO1xuICBfbWR1VXBkYXRlQ29uZmlybUJ1dHRvblN0YXRlKCk7XG5cbiAgY29uc3QgbGl2ZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1zZWxlY3Rpb24tbGl2ZScpO1xuICBjb25zdCBzdW1tYXJ5ID0gYCR7c3RhbGVDaGFuZ2VzLmxlbmd0aH0gaXRlbSR7c3RhbGVDaGFuZ2VzLmxlbmd0aCA9PT0gMSA/ICcgaXMnIDogJ3MgYXJlJ30gbm8gbG9uZ2VyIHZhbGlkIGFuZCAke3N0YWxlQ2hhbmdlcy5sZW5ndGggPT09IDEgPyAnd2FzJyA6ICd3ZXJlJ30gZGVzZWxlY3RlZDsgcmV2aWV3IGFuZCBjb25maXJtIGFnYWluLmA7XG4gIGlmIChsaXZlRWwpIGxpdmVFbC50ZXh0Q29udGVudCA9IHN1bW1hcnk7XG5cbiAgY29uc3Qgc3RhbGVMaXN0ID0gc3RhbGVDaGFuZ2VzLm1hcChzID0+IGA8bGk+JHtlc2Mocy5sYWJlbCB8fCBzLmlkKX0gXHUyMDE0ICR7ZXNjKHMucmVhc29uKX08L2xpPmApLmpvaW4oJycpO1xuICBpZiAocmVzdWx0RWwpIHtcbiAgICByZXN1bHRFbC5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDp2YXIoLS1jdi1iZy1zdWJ0bGUpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tY3Ytc2xhdGUtMzAwKTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEycHggMTZweDtcIj5cbiAgICAgICAgPHAgc3R5bGU9XCJjb2xvcjp2YXIoLS1jdi10ZXh0LW11dGVkKTtmb250LXdlaWdodDo2MDA7bWFyZ2luOjAgMCA2cHg7XCI+Tm90aGluZyB3YXMgd3JpdHRlbiBcdTIwMTQgJHtzdW1tYXJ5fTwvcD5cbiAgICAgICAgPHVsIHN0eWxlPVwiZm9udC1zaXplOjAuODJlbTtjb2xvcjp2YXIoLS1jdi10ZXh0LW11dGVkKTttYXJnaW46NHB4IDAgMDtwYWRkaW5nLWxlZnQ6MThweDtcIj4ke3N0YWxlTGlzdH08L3VsPlxuICAgICAgICA8cCBzdHlsZT1cImZvbnQtc2l6ZTowLjgyZW07Y29sb3I6dmFyKC0tY3YtdGV4dC1zZWNvbmRhcnkpO21hcmdpbi10b3A6OHB4O1wiPiR7YXBwbGljYWJsZUNoYW5nZXMubGVuZ3RofSBpdGVtJHthcHBsaWNhYmxlQ2hhbmdlcy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30gJHthcHBsaWNhYmxlQ2hhbmdlcy5sZW5ndGggPT09IDEgPyAnaXMnIDogJ2FyZSd9IHN0aWxsIHZhbGlkIFx1MjAxNCBjbGljayBcIkNvbmZpcm0gYW5kIFdyaXRlXCIgYWdhaW4gdG8gYXBwbHkganVzdCB0aG9zZS48L3A+XG4gICAgICA8L2Rpdj5gO1xuICB9XG59XG5cbi8vIE5vdGU6IG5vIGNsaWVudC1zaWRlIFwicmVzdW1lIGFuIGluLXByb2dyZXNzIHByb3Bvc2FsXCIgYWZmb3JkYW5jZSBcdTIwMTQgdGhlXG4vLyBwYW5lbCByZXNldHMgaXRzIHN0YXRlIG9uIGV2ZXJ5IHJlbmRlciAoc2VlIF9tZHVSZXNldFN0YXRlLCBjYWxsZWQgZnJvbVxuLy8gcmVuZGVyTWFzdGVyRGF0YUFpVXBkYXRlUGFuZWwpLCBhbmQgcGVuZGluZyBwcm9wb3NhbHMgbGl2ZSBzZXJ2ZXItc2lkZVxuLy8ga2V5ZWQgYnkgcHJvcG9zYWxfaWQgd2l0aCB0aGVpciBvd24gVFRMIChzZWUgbWFzdGVyX2RhdGFfcm91dGVzLnB5KS5cbi8vIFJlc3VtaW5nIHdvdWxkIHJlcXVpcmUgYSBzZXNzaW9uLXN0YXR1cy1kcml2ZW4gY2hlY2sgZm9yIGFuIGV4aXN0aW5nXG4vLyBwZW5kaW5nIHByb3Bvc2FsIGJlZm9yZSB0aGUgcGFuZWwgZmlyc3QgcmVuZGVyczsgdHJhY2tlZCBhcyBhIGtub3duIHYxXG4vLyBsaW1pdGF0aW9uLCBub3Qgc2lsZW50bHkgYWJzZW50LlxuXG5leHBvcnQge1xuICByZW5kZXJNYXN0ZXJEYXRhQWlVcGRhdGVQYW5lbCxcbiAgcmVuZGVyTWFzdGVyRGF0YUFpVXBkYXRlRGlzYWJsZWROb3RlLFxuICB0b2dnbGVNYXN0ZXJEYXRhQWlQYW5lbCxcbiAgc2V0TWFzdGVyRGF0YUFpTW9kZSxcbiAgaGFuZGxlTWFzdGVyRGF0YUFpRmlsZVVwbG9hZCxcbiAgc3VibWl0TWFzdGVyRGF0YUFpUHJvcG9zZSxcbiAgZGlzY2FyZE1hc3RlckRhdGFBaVByb3Bvc2FsLFxuICBzZWxlY3RNYXN0ZXJEYXRhQWlOb25GbGFnZ2VkLFxuICBjb25maXJtTWFzdGVyRGF0YUFpVXBkYXRlLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL21hc3Rlci1jdi5qc1xuICogTWFzdGVyIENWIG1hbmFnZW1lbnQgdGFiOiBmZXRjaCwgcmVuZGVyLCBhbmQgQ1JVRCBmb3IgcGVyc29uYWwgaW5mbyxcbiAqIGV4cGVyaWVuY2VzLCBza2lsbHMsIGVkdWNhdGlvbiwgYXdhcmRzLCBhY2hpZXZlbWVudHMsIHN1bW1hcmllcy5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgZXNjYXBlSHRtbCwgc2hvd1RvYXN0LCBzaG93QWxlcnRNb2RhbCwgY29uZmlybURpYWxvZyxcbiAqICAgYXBwZW5kTG9hZGluZ01lc3NhZ2UsIHJlbW92ZUxvYWRpbmdNZXNzYWdlLFxuICogICBzZXRMb2FkaW5nLCBzd2l0Y2hUYWIsIGFwcGVuZE1lc3NhZ2UsXG4gKiAgIHJlbmRlck1hc3RlckRhdGFBaVVwZGF0ZVBhbmVsLCByZW5kZXJNYXN0ZXJEYXRhQWlVcGRhdGVEaXNhYmxlZE5vdGVcbiAqICAgICAoZnJvbSB3ZWIvbWFzdGVyLWRhdGEtYWktdXBkYXRlLmpzLCBHQVAtMDEpXG4gKi9cblxubGV0IF9tYXN0ZXJDaGFuZ2VOb3RpY2UgPSAnJztcblxuLy8gVHJhY2tzIHRoZSBhY3RpdmUgcmVuZGVyIHRhcmdldDogbW9kYWwgYm9keSBkaXYgd2hlbiBvcGVuZWQgZnJvbSBoZWFkZXIsXG4vLyBudWxsIHdoZW4gcmVuZGVyZWQgaW50byB0aGUgbm9ybWFsIHRhYiB2aWV3ZXIuXG5sZXQgX21hc3RlckN2QWN0aXZlQ29udGFpbmVyID0gbnVsbDtcblxuLy8gRmlsZW5hbWUgb2YgdGhlIHNhZmV0eSBiYWNrdXAgY3JlYXRlZCBieSB0aGUgbW9zdCByZWNlbnQgdW5kbywgcmVzdG9yYWJsZVxuLy8gdmlhIHJlZG8uIFNpbmdsZS1sZXZlbCBieSBkZXNpZ24gKEdBUC0xOSAxNi43IHYxIHNjb3BlKSBcdTIwMTQgZnVydGhlci1iYWNrXG4vLyByZWNvdmVyeSByZW1haW5zIGF2YWlsYWJsZSB2aWEgdGhlIGZ1bGwgXCJcdUQ4M0RcdURENTAgQmFja3Vwc1wiIGhpc3RvcnkgbW9kYWwuXG4vLyBSZXNldCB0byBudWxsIGF0IHRoZSB0b3Agb2YgZXZlcnkgcG9wdWxhdGVNYXN0ZXJUYWIoKSByZS1yZW5kZXIgc28gYW55XG4vLyBvdGhlciBzYXZlIGFjdGlvbiAoc3RydWN0dXJlZCBlZGl0LCBBSS11cGRhdGUgY29uZmlybSwgaGFydmVzdCBhcHBseSlcbi8vIGludmFsaWRhdGVzIGEgc3RhbGUgcmVkbyB0YXJnZXQuIHVuZG9NYXN0ZXJEYXRhQ2hhbmdlKCkgc2V0c1xuLy8gX21hc3RlckN2U3VwcHJlc3NSZWRvUmVzZXQgYmVmb3JlIGl0cyBvd24gcG9wdWxhdGVNYXN0ZXJUYWIoKSBjYWxsIHNvIGl0c1xuLy8gZnJlc2hseS1zZXQgcmVkbyB0YXJnZXQgc3Vydml2ZXMgdGhhdCBvbmUgcmVuZGVyLlxubGV0IF9tYXN0ZXJDdlJlZG9CYWNrdXAgPSBudWxsO1xubGV0IF9tYXN0ZXJDdlN1cHByZXNzUmVkb1Jlc2V0ID0gZmFsc2U7XG5cbmZ1bmN0aW9uIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2Uoc2VjdGlvbiwgYWN0aW9uKSB7XG4gIGNvbnN0IGNsZWFuU2VjdGlvbiA9IFN0cmluZyhzZWN0aW9uIHx8ICdNYXN0ZXIgQ1YnKS50cmltKCk7XG4gIGNvbnN0IGNsZWFuQWN0aW9uID0gU3RyaW5nKGFjdGlvbiB8fCAndXBkYXRlZCcpLnRyaW0oKTtcbiAgX21hc3RlckNoYW5nZU5vdGljZSA9IGAke2NsZWFuU2VjdGlvbn0gJHtjbGVhbkFjdGlvbn0uYDtcbn1cblxuZnVuY3Rpb24gX3JlbmRlck1hc3RlckNoYW5nZU5vdGljZSgpIHtcbiAgaWYgKCFfbWFzdGVyQ2hhbmdlTm90aWNlKSByZXR1cm4gJyc7XG4gIHJldHVybiBgXG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbjoxMnB4IDAgMThweDtwYWRkaW5nOjEwcHggMTJweDtib3JkZXI6MXB4IHNvbGlkICNiYmY3ZDA7YmFja2dyb3VuZDojZjBmZGY0O2JvcmRlci1yYWRpdXM6OHB4O2NvbG9yOiMxNDUzMmQ7XCI+XG4gICAgICA8c3Ryb25nPkxhc3Qgc2F2ZWQgY2hhbmdlOjwvc3Ryb25nPiAke2VzY2FwZUh0bWwoX21hc3RlckNoYW5nZU5vdGljZSl9XG4gICAgPC9kaXY+XG4gIGA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBvcHVsYXRlTWFzdGVyVGFiKGNvbnRhaW5lciA9IG51bGwpIHtcbiAgaWYgKGNvbnRhaW5lciAhPT0gbnVsbCkgX21hc3RlckN2QWN0aXZlQ29udGFpbmVyID0gY29udGFpbmVyO1xuICBpZiAoX21hc3RlckN2U3VwcHJlc3NSZWRvUmVzZXQpIHtcbiAgICBfbWFzdGVyQ3ZTdXBwcmVzc1JlZG9SZXNldCA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIF9tYXN0ZXJDdlJlZG9CYWNrdXAgPSBudWxsO1xuICB9XG4gIGNvbnN0IGNvbnRlbnQgPSBfbWFzdGVyQ3ZBY3RpdmVDb250YWluZXIgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgY29udGVudC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+PGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPjwvZGl2PjxwIHN0eWxlPVwibWFyZ2luLXRvcDoxMnB4O2NvbG9yOiM2NDc0OGI7XCI+TG9hZGluZyBtYXN0ZXIgQ1YgZGF0YVx1MjAyNjwvcD48L2Rpdj4nO1xuXG4gIGxldCBvdmVydmlldyA9IHt9O1xuICBsZXQgZnVsbERhdGEgID0ge307XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBbb3ZSZXMsIGZkUmVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL292ZXJ2aWV3JyksXG4gICAgICBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9mdWxsJyksXG4gICAgXSk7XG4gICAgb3ZlcnZpZXcgPSAoYXdhaXQgb3ZSZXMuanNvbigpKSB8fCB7fTtcbiAgICBmdWxsRGF0YSAgPSAoYXdhaXQgZmRSZXMuanNvbigpKSB8fCB7fTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGVudC5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O3BhZGRpbmc6MjBweDtcIj5GYWlsZWQgdG8gbG9hZCBtYXN0ZXIgQ1YgZGF0YS48L3A+JztcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwZXJzb25hbEluZm8gPSBmdWxsRGF0YS5wZXJzb25hbF9pbmZvIHx8IHt9O1xuICBjb25zdCBleHBlcmllbmNlcyAgICAgPSBmdWxsRGF0YS5leHBlcmllbmNlIHx8IFtdO1xuICB3aW5kb3cuX21hc3RlckV4cGVyaWVuY2VPcHRpb25zID0gZXhwZXJpZW5jZXNcbiAgICAubWFwKChleHApID0+ICh7XG4gICAgICBpZDogZXhwLmlkIHx8ICcnLFxuICAgICAgbGFiZWw6IGAke2V4cC50aXRsZSB8fCAnUm9sZSd9IEAgJHtleHAuY29tcGFueSB8fCAnQ29tcGFueSd9YCxcbiAgICB9KSlcbiAgICAuZmlsdGVyKCh4KSA9PiB4LmlkKTtcbiAgLy8gRnVsbCBleHBlcmllbmNlIG9iamVjdHMgKGluY2x1ZGluZyBhY2hpZXZlbWVudHMpLCBrZXllZCBieSBpZCwgc29cbiAgLy8gZWRpdE1hc3RlckV4cGVyaWVuY2UoKSBjYW4gbG9vayB1cCBuZXN0ZWQgYWNoaWV2ZW1lbnRzIHdpdGhvdXRcbiAgLy8gZW1iZWRkaW5nIGFyYml0cmFyeSBhY2hpZXZlbWVudCB0ZXh0IGluc2lkZSBhbiBpbmxpbmUgb25jbGljayBhdHRyaWJ1dGUuXG4gIHdpbmRvdy5fbWFzdGVyRXhwZXJpZW5jZUZ1bGxEYXRhID0gZXhwZXJpZW5jZXM7XG4gIGNvbnN0IHNraWxscyAgICAgICAgICA9IGZ1bGxEYXRhLnNraWxscyB8fCBbXTtcbiAgY29uc3QgZWR1Y2F0aW9uICAgICAgID0gZnVsbERhdGEuZWR1Y2F0aW9uIHx8IFtdO1xuICBjb25zdCBhd2FyZHMgICAgICAgICAgPSBmdWxsRGF0YS5hd2FyZHMgfHwgW107XG4gIGNvbnN0IGNlcnRpZmljYXRpb25zICA9IGZ1bGxEYXRhLmNlcnRpZmljYXRpb25zIHx8IFtdO1xuICBjb25zdCBhY2hpZXZlbWVudHMgICAgPSBmdWxsRGF0YS5zZWxlY3RlZF9hY2hpZXZlbWVudHMgfHwgW107XG4gIGNvbnN0IHN1bW1hcmllcyAgICAgICA9IGZ1bGxEYXRhLnByb2Zlc3Npb25hbF9zdW1tYXJpZXMgfHwge307XG5cbiAgY29uc3QgY3VycmVudFBoYXNlID0gKHR5cGVvZiBzdGF0ZU1hbmFnZXIgIT09ICd1bmRlZmluZWQnICYmIHN0YXRlTWFuYWdlci5nZXRQaGFzZSlcbiAgICA/IHN0YXRlTWFuYWdlci5nZXRQaGFzZSgpXG4gICAgOiBudWxsO1xuICBjb25zdCBFRElUQUJMRV9QSEFTRVMgPSBuZXcgU2V0KFsnaW5pdCcsICdyZWZpbmVtZW50JywgbnVsbCwgdW5kZWZpbmVkLCAnJ10pO1xuICBjb25zdCBpc0VkaXRhYmxlID0gRURJVEFCTEVfUEhBU0VTLmhhcyhjdXJyZW50UGhhc2UpO1xuXG4gIGNvbnN0IHBoYXNlTG9ja0Jhbm5lciA9IGlzRWRpdGFibGUgPyAnJyA6IGBcbiAgICA8ZGl2IHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZWYyZjI7Ym9yZGVyOjFweCBzb2xpZCAjZmNhNWE1O2JvcmRlci1yYWRpdXM6NnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6MTBweCAxNHB4O21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MC44OGVtO2NvbG9yOiM5OTFiMWI7XCI+XG4gICAgICA8c3Ryb25nPlx1RDgzRFx1REQxMiBSZWFkLW9ubHkgXHUyMDE0IGVkaXRpbmcgbG9ja2VkPC9zdHJvbmc+PGJyPlxuICAgICAgTWFzdGVyIENWIGVkaXRpbmcgaXMgb25seSBhdmFpbGFibGUgYmVmb3JlIGpvYiBhbmFseXNpcyBiZWdpbnMgb3IgZHVyaW5nIHRoZVxuICAgICAgUmVmaW5lbWVudCBzdGFnZS4gVGhlIGN1cnJlbnQgc3RhZ2UgaXMgPHN0cm9uZz4ke2VzY2FwZUh0bWwoY3VycmVudFBoYXNlIHx8ICd1bmtub3duJyl9PC9zdHJvbmc+LlxuICAgICAgU2F2ZSBvciBjb21wbGV0ZSB0aGUgY3VycmVudCBzdGFnZSB0byByZS1lbmFibGUgZWRpdGluZy5cbiAgICA8L2Rpdj5gO1xuXG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHg7bWFyZ2luLWJvdHRvbTo0cHg7XCI+XG4gICAgICA8aDEgc3R5bGU9XCJtYXJnaW46MDtcIj5cdUQ4M0RcdURDREEgTWFzdGVyIENWIFByb2ZpbGU8L2gxPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwO1wiPlxuICAgICAgICA8YnV0dG9uIGlkPVwibWFzdGVyLWN2LXVuZG8tYnRuXCIgY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIG9uY2xpY2s9XCJ1bmRvTWFzdGVyRGF0YUNoYW5nZSgpXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJVbmRvIHRoZSBtb3N0IHJlY2VudCBNYXN0ZXIgQ1YgY2hhbmdlXCIgdGl0bGU9XCJVbmRvIChDdHJsK1opXCI+XG4gICAgICAgICAgXHUyMUE5IFVuZG9cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gaWQ9XCJtYXN0ZXItY3YtcmVkby1idG5cIiBjbGFzcz1cImFjdGlvbi1idG4gc2Vjb25kYXJ5XCIgb25jbGljaz1cInJlZG9NYXN0ZXJEYXRhQ2hhbmdlKClcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlZG8gdGhlIHByZXZpb3VzbHkgdW5kb25lIE1hc3RlciBDViBjaGFuZ2VcIiB0aXRsZT1cIlJlZG8gKEN0cmwrU2hpZnQrWilcIiR7IV9tYXN0ZXJDdlJlZG9CYWNrdXAgPyAnIGRpc2FibGVkJyA6ICcnfT5cbiAgICAgICAgICBcdTIxQUEgUmVkb1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gc2Vjb25kYXJ5XCIgb25jbGljaz1cIm9wZW5CYWNrdXBIaXN0b3J5TW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJWaWV3IGJhY2t1cCBoaXN0b3J5XCI+XG4gICAgICAgICAgXHVEODNEXHVERDUwIEJhY2t1cHNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIG9uY2xpY2s9XCJvcGVuRnVsbERhdGFQcmV2aWV3TW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJQcmV2aWV3IGZ1bGwgbWFzdGVyIENWIGRhdGFcIj5cbiAgICAgICAgICBcdUQ4M0RcdURDNDEgUHJldmlldyBGdWxsIERhdGFcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIG9uY2xpY2s9XCJleHBvcnRNYXN0ZXJDVigpXCIgYXJpYS1sYWJlbD1cIkRvd25sb2FkIE1hc3Rlcl9DVl9EYXRhLmpzb25cIj5cbiAgICAgICAgICBcdTJCMDdcdUZFMEYgRXhwb3J0IEpTT05cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIG9uY2xpY2s9XCJ0cmlnZ2VyTWFzdGVyQ3ZJbXBvcnQoKVwiIGFyaWEtbGFiZWw9XCJJbXBvcnQgYSBmdWxsIE1hc3Rlcl9DVl9EYXRhLmpzb24gZmlsZVwiJHtpc0VkaXRhYmxlID8gJycgOiAnIGRpc2FibGVkJ30+XG4gICAgICAgICAgXHUyQjA2XHVGRTBGIEltcG9ydCBKU09OXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cIm1hc3Rlci1jdi1pbXBvcnQtZmlsZS1pbnB1dFwiIGFjY2VwdD1cImFwcGxpY2F0aW9uL2pzb24sLmpzb25cIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIlxuICAgICAgICAgICAgb25jaGFuZ2U9XCJoYW5kbGVNYXN0ZXJDdkltcG9ydEZpbGUoZXZlbnQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjEycHg7XCI+XG4gICAgICBUaGlzIGlzIHlvdXIgcGVyc2lzdGVudCBtYXN0ZXIgQ1YgcHJvZmlsZS4gQ2hhbmdlcyBoZXJlIHVwZGF0ZVxuICAgICAgPGNvZGU+TWFzdGVyX0NWX0RhdGEuanNvbjwvY29kZT4gZGlyZWN0bHkgYW5kIHBlcnNpc3QgYWNyb3NzIGFsbCBzZXNzaW9ucy5cbiAgICA8L3A+XG5cbiAgICAke3BoYXNlTG9ja0Jhbm5lcn1cblxuICAgIDwhLS0gR292ZXJuYW5jZSBiYW5uZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1nb3Zlcm5hbmNlLW5vdGVcIiBzdHlsZT1cImJhY2tncm91bmQ6I2ZmZmJlYjtib3JkZXI6MXB4IHNvbGlkICNmY2QzNGQ7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMHB4IDE0cHg7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZTowLjg4ZW07Y29sb3I6Izc4MzUwZjtcIj5cbiAgICAgIDxzdHJvbmc+XHUyNkEwXHVGRTBGIFBlcnNpc3RlbnQgc3RvcmFnZSBcdTIwMTQgdGhpcyB0YWIgb25seTo8L3N0cm9uZz4gRWRpdHMgbWFkZSBoZXJlICh0aGUgc3RydWN0dXJlZFxuICAgICAgZWRpdG9ycyBiZWxvdywgYW5kIFwiVXBkYXRlIHZpYSBBSVwiKSB3cml0ZSBkaXJlY3RseSB0byA8Y29kZT5NYXN0ZXJfQ1ZfRGF0YS5qc29uPC9jb2RlPlxuICAgICAgaW1tZWRpYXRlbHkgYW5kIHBlcnNpc3QgYWNyb3NzIGV2ZXJ5IGZ1dHVyZSBqb2IgYXBwbGljYXRpb24uXG4gICAgICBKb2Itc3BlY2lmaWMgY2hvaWNlcyB5b3UgbWFrZSBlbHNld2hlcmUgaW4gdGhlIGFwcCBcdTIwMTQgd2hpY2ggc2tpbGxzL2V4cGVyaWVuY2VzIHRvIGZlYXR1cmUsXG4gICAgICByZXdyaXR0ZW4gYnVsbGV0IHRleHQsIGNvdmVyLWxldHRlciB0b25lIFx1MjAxNCBsaXZlIG9ubHkgaW4gdGhlIGN1cnJlbnQgc2Vzc2lvbiBhbmQgYXJlXG4gICAgICA8ZW0+bmV2ZXI8L2VtPiB3cml0dGVuIGhlcmUgYXV0b21hdGljYWxseS4gVG8gY2FycnkgYSBzZXNzaW9uJ3MgaW1wcm92ZW1lbnRzIGludG8geW91clxuICAgICAgcGVybWFuZW50IHByb2ZpbGUsIHVzZSBcIlx1RDgzRFx1RENFNSBVcGRhdGUgTWFzdGVyIENWIERhdGFcIiBvbiB0aGUgRmluYWxpc2Ugc3RlcC5cbiAgICA8L2Rpdj5cblxuICAgICR7aXNFZGl0YWJsZSA/IHJlbmRlck1hc3RlckRhdGFBaVVwZGF0ZVBhbmVsKCkgOiByZW5kZXJNYXN0ZXJEYXRhQWlVcGRhdGVEaXNhYmxlZE5vdGUoKX1cblxuICAgICR7X3JlbmRlck1hc3RlckNoYW5nZU5vdGljZSgpfVxuXG4gICAgPCEtLSBQcm9maWxlIG92ZXJ2aWV3IGNhcmQgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1wcm9maWxlLWNhcmRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItcHJvZmlsZS1uYW1lXCI+JHtlc2NhcGVIdG1sKG92ZXJ2aWV3Lm5hbWUgfHwgJ1lvdXIgUHJvZmlsZScpfTwvZGl2PlxuICAgICAgJHtvdmVydmlldy5oZWFkbGluZSA/IGA8ZGl2IGNsYXNzPVwibWFzdGVyLXByb2ZpbGUtaGVhZGxpbmVcIj4ke2VzY2FwZUh0bWwob3ZlcnZpZXcuaGVhZGxpbmUpfTwvZGl2PmAgOiAnJ31cbiAgICAgICR7b3ZlcnZpZXcuZW1haWwgICAgPyBgPGRpdiBjbGFzcz1cIm1hc3Rlci1wcm9maWxlLWVtYWlsXCI+XHUyNzA5XHVGRTBGICR7ZXNjYXBlSHRtbChvdmVydmlldy5lbWFpbCl9PC9kaXY+YCA6ICcnfVxuICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zdGF0c1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXN0YXRcIj48c3BhbiBjbGFzcz1cIm1hc3Rlci1zdGF0LXZhbHVlXCI+JHtvdmVydmlldy5leHBlcmllbmNlX2NvdW50ID8/ICdcdTIwMTQnfTwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hc3Rlci1zdGF0LWxhYmVsXCI+RXhwZXJpZW5jZXM8L3NwYW4+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc3RhdFwiPjxzcGFuIGNsYXNzPVwibWFzdGVyLXN0YXQtdmFsdWVcIj4ke292ZXJ2aWV3LnNraWxsX2NvdW50ID8/ICdcdTIwMTQnfTwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hc3Rlci1zdGF0LWxhYmVsXCI+U2tpbGxzPC9zcGFuPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXN0YXRcIj48c3BhbiBjbGFzcz1cIm1hc3Rlci1zdGF0LXZhbHVlXCI+JHtvdmVydmlldy5hY2hpZXZlbWVudF9jb3VudCA/PyAnXHUyMDE0J308L3NwYW4+PHNwYW4gY2xhc3M9XCJtYXN0ZXItc3RhdC1sYWJlbFwiPkFjaGlldmVtZW50czwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zdGF0XCI+PHNwYW4gY2xhc3M9XCJtYXN0ZXItc3RhdC12YWx1ZVwiPiR7b3ZlcnZpZXcuc3VtbWFyeV9jb3VudCA/PyAnXHUyMDE0J308L3NwYW4+PHNwYW4gY2xhc3M9XCJtYXN0ZXItc3RhdC1sYWJlbFwiPlN1bW1hcmllczwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zdGF0XCI+PHNwYW4gY2xhc3M9XCJtYXN0ZXItc3RhdC12YWx1ZVwiPiR7b3ZlcnZpZXcuZWR1Y2F0aW9uX2NvdW50ID8/ICdcdTIwMTQnfTwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hc3Rlci1zdGF0LWxhYmVsXCI+RWR1Y2F0aW9uPC9zcGFuPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXN0YXRcIj48c3BhbiBjbGFzcz1cIm1hc3Rlci1zdGF0LXZhbHVlXCI+JHtvdmVydmlldy5wdWJsaWNhdGlvbl9jb3VudCA/PyAnXHUyMDE0J308L3NwYW4+PHNwYW4gY2xhc3M9XCJtYXN0ZXItc3RhdC1sYWJlbFwiPlB1YmxpY2F0aW9uczwvc3Bhbj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBQZXJzb25hbCBJbmZvIHNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMj5cdUQ4M0RcdURDNjQgUGVyc29uYWwgSW5mb3JtYXRpb248L2gyPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJzaG93RWRpdFBlcnNvbmFsSW5mb01vZGFsKClcIiBhcmlhLWxhYmVsPVwiRWRpdCBwZXJzb25hbCBpbmZvcm1hdGlvblwiPlxuICAgICAgICAgIFx1MjcwRlx1RkUwRiBFZGl0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGlkPVwibWFzdGVyLXBlcnNvbmFsLWluZm8tY29udGFpbmVyXCI+XG4gICAgICAgICR7X3JlbmRlclBlcnNvbmFsSW5mb0NhcmQocGVyc29uYWxJbmZvKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFeHBlcmllbmNlcyBzZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDI+XHVEODNEXHVEQ0JDIFdvcmsgRXhwZXJpZW5jZTwvaDI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cInNob3dBZGRFeHBlcmllbmNlTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJBZGQgbmV3IHdvcmsgZXhwZXJpZW5jZVwiPlxuICAgICAgICAgICsgQWRkIEV4cGVyaWVuY2VcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJtYXN0ZXItZXhwZXJpZW5jZXMtY29udGFpbmVyXCI+XG4gICAgICAgICR7X3JlbmRlckV4cGVyaWVuY2VzTGlzdChleHBlcmllbmNlcyl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2tpbGxzIHNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMj5cdUQ4M0RcdURFRTBcdUZFMEYgU2tpbGxzPC9oMj5cbiAgICAgICAgJHtBcnJheS5pc0FycmF5KHNraWxscykgPyBgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwic2hvd0FkZFNraWxsTW9kYWwoJycsIHRydWUpXCIgYXJpYS1sYWJlbD1cIkFkZCBuZXcgc2tpbGxcIj4rIEFkZCBTa2lsbDwvYnV0dG9uPmAgOiAnJ31cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cIm1hc3Rlci1za2lsbHMtY29udGFpbmVyXCI+XG4gICAgICAgICR7X3JlbmRlclNraWxsc1NlY3Rpb24oc2tpbGxzKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFZHVjYXRpb24gc2VjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGgyPlx1RDgzQ1x1REY5MyBFZHVjYXRpb248L2gyPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJzaG93QWRkRWR1Y2F0aW9uTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJBZGQgZWR1Y2F0aW9uIGVudHJ5XCI+XG4gICAgICAgICAgKyBBZGQgRWR1Y2F0aW9uXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGlkPVwibWFzdGVyLWVkdWNhdGlvbi1jb250YWluZXJcIj5cbiAgICAgICAgJHtfcmVuZGVyRWR1Y2F0aW9uTGlzdChlZHVjYXRpb24pfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFB1YmxpY2F0aW9ucyBzZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvblwiIGlkPVwibWFzdGVyLXB1YmxpY2F0aW9ucy1zZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMj5cdUQ4M0RcdURDRDYgUHVibGljYXRpb25zPC9oMj5cbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBzZWNvbmRhcnlcIiBpZD1cIm1hc3Rlci1wdWItaW1wb3J0LWJ0blwiXG4gICAgICAgICAgICAgIG9uY2xpY2s9XCJzaG93SW1wb3J0UHVibGljYXRpb25zTW9kYWwoKVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJJbXBvcnQgQmliVGVYIHB1YmxpY2F0aW9uc1wiPlxuICAgICAgICAgICAgXHUyQjA2XHVGRTBGIEltcG9ydCBCaWJUZVhcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBzZWNvbmRhcnlcIiBpZD1cIm1hc3Rlci1wdWItY29udmVydC1idG5cIlxuICAgICAgICAgICAgICBvbmNsaWNrPVwic2hvd0NvbnZlcnRQdWJsaWNhdGlvbnNNb2RhbCgpXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNvbnZlcnQgY2l0YXRpb24gdGV4dCB0byBCaWJUZVhcIj5cbiAgICAgICAgICAgIFx1RDgzRVx1REU4NCBDb252ZXJ0IFRleHRcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBzZWNvbmRhcnlcIiBpZD1cIm1hc3Rlci1wdWItdG9nZ2xlLWJ0blwiXG4gICAgICAgICAgICAgIG9uY2xpY2s9XCJ0b2dnbGVQdWJsaWNhdGlvbnNWaWV3KClcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiVG9nZ2xlIGJldHdlZW4gc3RydWN0dXJlZCBDUlVEIHZpZXcgYW5kIHJhdyBCaWJUZVggZWRpdG9yXCI+XG4gICAgICAgICAgICBcdTI3MEZcdUZFMEYgUmF3IEJpYlRlWFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgaWQ9XCJtYXN0ZXItcHViLWFkZC1idG5cIlxuICAgICAgICAgICAgICBvbmNsaWNrPVwic2hvd0FkZFB1YmxpY2F0aW9uTW9kYWwoKVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBZGQgcHVibGljYXRpb25cIj5cbiAgICAgICAgICAgICsgQWRkIFB1YmxpY2F0aW9uXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIENSVUQgc3RydWN0dXJlZCB2aWV3IChkZWZhdWx0KSAtLT5cbiAgICAgIDxkaXYgaWQ9XCJtYXN0ZXItcHViLWNydWQtdmlld1wiPlxuICAgICAgICA8ZGl2IGlkPVwibWFzdGVyLXB1Yi1jcnVkLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtwYWRkaW5nOjEycHggMDtcIj5Mb2FkaW5nIHB1YmxpY2F0aW9uc1x1MjAyNjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gUmF3IEJpYlRlWCBlZGl0b3IgKGhpZGRlbiBieSBkZWZhdWx0KSAtLT5cbiAgICAgIDxkaXYgaWQ9XCJtYXN0ZXItcHViLXJhdy12aWV3XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XG4gICAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtmb250LXNpemU6MC45ZW07bWFyZ2luLWJvdHRvbToxMHB4O1wiPlxuICAgICAgICAgIEVkaXQgeW91ciBCaWJUZVggYmlibGlvZ3JhcGh5IGZpbGUgZGlyZWN0bHkuIENoYW5nZXMgYXJlIHNhdmVkIHRvXG4gICAgICAgICAgPGNvZGU+cHVibGljYXRpb25zLmJpYjwvY29kZT4gYW5kIGEgdGltZXN0YW1wZWQgYmFja3VwIGlzIGNyZWF0ZWRcbiAgICAgICAgICBhdXRvbWF0aWNhbGx5LiBDb250ZW50IGlzIHZhbGlkYXRlZCBiZWZvcmUgd3JpdGluZy5cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O21hcmdpbi1ib3R0b206OHB4O1wiPlxuICAgICAgICAgIDxzcGFuIGlkPVwibWFzdGVyLXB1Yi1jb3VudFwiIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtmb250LXNpemU6MC45ZW07XCI+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZmxleDoxO1wiPjwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBzZWNvbmRhcnlcIiBvbmNsaWNrPVwidmFsaWRhdGVQdWJsaWNhdGlvbnNCaWIoKVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJWYWxpZGF0ZSBCaWJUZVggd2l0aG91dCBzYXZpbmdcIj5cdUQ4M0RcdUREMEQgVmFsaWRhdGU8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBzZWNvbmRhcnlcIiBvbmNsaWNrPVwibG9hZFB1YmxpY2F0aW9uc0JpYigpXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlbG9hZCBwdWJsaWNhdGlvbnMuYmliIGZyb20gZGlza1wiPlx1RDgzRFx1REQwNCBSZWxvYWQ8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBwcmltYXJ5XCIgaWQ9XCJtYXN0ZXItcHViLXNhdmUtYnRuXCJcbiAgICAgICAgICAgICAgb25jbGljaz1cInNhdmVQdWJsaWNhdGlvbnNCaWIoKVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTYXZlIEJpYlRlWCB0byBkaXNrXCI+XHVEODNEXHVEQ0JFIFNhdmU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx0ZXh0YXJlYSBpZD1cIm1hc3Rlci1wdWItdGV4dGFyZWFcIlxuICAgICAgICAgIGNsYXNzPVwiZWRpdC1pbnB1dFwiXG4gICAgICAgICAgcm93cz1cIjIwXCJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZTowLjg1ZW07cmVzaXplOnZlcnRpY2FsO1wiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJMb2FkaW5nXHUyMDI2XCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQmliVGVYIGJpYmxpb2dyYXBoeSBjb250ZW50XCJcbiAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgPGRpdiBpZD1cIm1hc3Rlci1wdWItc3RhdHVzXCJcbiAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDo2cHg7Zm9udC1zaXplOjAuODVlbTtjb2xvcjojNmI3MjgwO1wiXG4gICAgICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBd2FyZHMgc2VjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGgyPlx1RDgzQ1x1REZDNSBBd2FyZHMgJmFtcDsgSG9ub3VyczwvaDI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cInNob3dBZGRBd2FyZE1vZGFsKClcIiBhcmlhLWxhYmVsPVwiQWRkIGF3YXJkXCI+XG4gICAgICAgICAgKyBBZGQgQXdhcmRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJtYXN0ZXItYXdhcmRzLWNvbnRhaW5lclwiPlxuICAgICAgICAke19yZW5kZXJBd2FyZHNMaXN0KGF3YXJkcyl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ2VydGlmaWNhdGlvbnMgc2VjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGgyPlx1RDgzQ1x1REY5MyBDZXJ0aWZpY2F0aW9uczwvaDI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cInNob3dBZGRDZXJ0aWZpY2F0aW9uTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJBZGQgY2VydGlmaWNhdGlvblwiPlxuICAgICAgICAgICsgQWRkIENlcnRpZmljYXRpb25cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJtYXN0ZXItY2VydGlmaWNhdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICR7X3JlbmRlckNlcnRpZmljYXRpb25zTGlzdChjZXJ0aWZpY2F0aW9ucyl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VsZWN0ZWQgQWNoaWV2ZW1lbnRzIHNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMj5cdUQ4M0NcdURGQzYgU2VsZWN0ZWQgQWNoaWV2ZW1lbnRzPC9oMj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwic2hvd0FkZEFjaGlldmVtZW50TW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJBZGQgbmV3IGFjaGlldmVtZW50IHRvIG1hc3RlciBDVlwiPlxuICAgICAgICAgICsgQWRkIEFjaGlldmVtZW50XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjAuOWVtO21hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgICAgVGhlc2UgYXJlIGNyb3NzLXJvbGUgaGlnaGxpZ2h0cyBzaG93biBpbiB0aGUgQWNoaWV2ZW1lbnRzIHJldmlldyBkdXJpbmcgY3VzdG9taXNhdGlvbi5cbiAgICAgICAgVGhlIEhhcnZlc3QgZmVhdHVyZSAoSGFydmVzdCB0YWIpIGNhbiBhZGQgbmV3IG9uZXMgZnJvbSB5b3VyIGN1cnJlbnQgc2Vzc2lvbi5cbiAgICAgIDwvcD5cbiAgICAgIDxkaXYgaWQ9XCJtYXN0ZXItYWNoaWV2ZW1lbnRzLWNvbnRhaW5lclwiPlxuICAgICAgICAke19yZW5kZXJNYXN0ZXJBY2hpZXZlbWVudHNUYWJsZShhY2hpZXZlbWVudHMpfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFByb2Zlc3Npb25hbCBTdW1tYXJpZXMgc2VjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGgyPlx1RDgzRFx1RENERCBQcm9mZXNzaW9uYWwgU3VtbWFyaWVzPC9oMj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwic2hvd0FkZFN1bW1hcnlNb2RhbCgpXCIgYXJpYS1sYWJlbD1cIkFkZCBuZXcgcHJvZmVzc2lvbmFsIHN1bW1hcnkgdmFyaWFudFwiPlxuICAgICAgICAgICsgQWRkIFN1bW1hcnlcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtmb250LXNpemU6MC45ZW07bWFyZ2luLWJvdHRvbToxMnB4O1wiPlxuICAgICAgICBOYW1lZCBzdW1tYXJ5IHZhcmlhbnRzIGxldCB5b3UgdGFpbG9yIHlvdXIgcHJvZmVzc2lvbmFsIHN0YXRlbWVudCBmb3IgZGlmZmVyZW50IHJvbGUgdHlwZXNcbiAgICAgICAgd2l0aG91dCByZWdlbmVyYXRpbmcgZnJvbSBzY3JhdGNoLiBUaGUgQUkgd2lsbCByZWNvbW1lbmQgdGhlIG1vc3QgcmVsZXZhbnQgdmFyaWFudFxuICAgICAgICBkdXJpbmcgdGhlIFN1bW1hcnkgRm9jdXMgc3RlcC5cbiAgICAgIDwvcD5cbiAgICAgIDxkaXYgaWQ9XCJtYXN0ZXItc3VtbWFyaWVzLWNvbnRhaW5lclwiPlxuICAgICAgICAke19yZW5kZXJTdW1tYXJpZXNMaXN0KHN1bW1hcmllcyl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUHVibGljYXRpb24gYWRkL2VkaXQgbW9kYWwgLS0+XG4gICAgPGRpdiBpZD1cIm1hc3Rlci1wdWItbW9kYWwtb3ZlcmxheVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT1cIm1hc3Rlci1wdWItbW9kYWwtdGl0bGVcIiBjbGFzcz1cIm1vZGFsLW92ZXJsYXlcIlxuICAgICAgICBvbmNsaWNrPVwiaWYoZXZlbnQudGFyZ2V0PT09dGhpcyljbG9zZVB1YmxpY2F0aW9uTW9kYWwoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgc3R5bGU9XCJtYXgtd2lkdGg6NTgwcHg7XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICA8aDIgaWQ9XCJtYXN0ZXItcHViLW1vZGFsLXRpdGxlLWhlYWRpbmdcIiBpZD1cInB1Yi1tb2RhbC10aXRsZS1oZWFkaW5nXCI+QWRkIFB1YmxpY2F0aW9uPC9oMj5cbiAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJjbG9zZVB1YmxpY2F0aW9uTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBwdWJsaWNhdGlvbiBlZGl0b3JcIlxuICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MS40ZW07Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY0NzQ4YjtcIj4mdGltZXM7PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIHN0eWxlPVwicGFkZGluZzoyMHB4O1wiPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjEycHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwicHViLW1vZGFsLWtleVwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+Q2l0ZSBLZXkgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwdWItbW9kYWwta2V5XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIGFyaWEtcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gc21pdGgyMDI0bWxcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjEycHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwicHViLW1vZGFsLXR5cGVcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkVudHJ5IFR5cGUgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cInB1Yi1tb2RhbC10eXBlXCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYXJ0aWNsZVwiPmFydGljbGU8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImlucHJvY2VlZGluZ3NcIj5pbnByb2NlZWRpbmdzPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJib29rXCI+Ym9vazwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaW5jb2xsZWN0aW9uXCI+aW5jb2xsZWN0aW9uPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ0ZWNocmVwb3J0XCI+dGVjaHJlcG9ydDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicGhkdGhlc2lzXCI+cGhkdGhlc2lzPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJtYXN0ZXJzdGhlc2lzXCI+bWFzdGVyc3RoZXNpczwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibWlzY1wiPm1pc2M8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjEycHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgaWQ9XCJwdWItbW9kYWwtYXV0aG9yLWxhYmVsXCIgZm9yPVwicHViLW1vZGFsLWF1dGhvclwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+QXV0aG9yKHMpIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwicHViLW1vZGFsLWF1dGhvclwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGFzdCwgRmlyc3QgYW5kIExhc3QyLCBGaXJzdDJcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjEycHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwicHViLW1vZGFsLXRpdGxlXCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5UaXRsZSA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInB1Yi1tb2RhbC10aXRsZVwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6MTJweDttYXJnaW4tYm90dG9tOjEycHg7XCI+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDowIDAgMTAwcHg7XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwdWItbW9kYWwteWVhclwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+WWVhciA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJwdWItbW9kYWwteWVhclwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwcHg7XCJcbiAgICAgICAgICAgICAgICAgIG1pbj1cIjE5MDBcIiBtYXg9XCIyMTAwXCIgYXJpYS1yZXF1aXJlZD1cInRydWVcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDoxO1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicHViLW1vZGFsLWpvdXJuYWxcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkpvdXJuYWwgLyBCb29rdGl0bGU8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInB1Yi1tb2RhbC1qb3VybmFsXCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxMnB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInB1Yi1tb2RhbC1kb2lcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkRPSSAvIFVSTDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInB1Yi1tb2RhbC1kb2lcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjEwLnh4eHgveHh4eHhcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjRweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwdWItbW9kYWwtZXh0cmFcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkV4dHJhIGZpZWxkcyA8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNmI3MjgwO1wiPihrZXk9dmFsdWUsIG9uZSBwZXIgbGluZSk8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cInB1Yi1tb2RhbC1leHRyYVwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHJvd3M9XCIzXCIgc3R5bGU9XCJ3aWR0aDoxMDAlO3Jlc2l6ZTp2ZXJ0aWNhbDtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjAuODVlbTtcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwidm9sdW1lPTEyJiMxMDtwYWdlcz0xLS0yMFwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCIgc3R5bGU9XCJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2dhcDo4cHg7cGFkZGluZzoxNnB4IDIwcHg7XCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwiY2xvc2VQdWJsaWNhdGlvbk1vZGFsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBwcmltYXJ5XCIgb25jbGljaz1cInNhdmVNYXN0ZXJQdWJsaWNhdGlvbigpXCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBpZD1cIm1hc3Rlci1wdWItaW1wb3J0LW1vZGFsLW92ZXJsYXlcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJtYXN0ZXItcHViLWltcG9ydC1tb2RhbC10aXRsZVwiIGNsYXNzPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgIG9uY2xpY2s9XCJpZihldmVudC50YXJnZXQ9PT10aGlzKWNsb3NlSW1wb3J0UHVibGljYXRpb25zTW9kYWwoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgc3R5bGU9XCJtYXgtd2lkdGg6NjgwcHg7XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICA8aDIgaWQ9XCJtYXN0ZXItcHViLWltcG9ydC1tb2RhbC10aXRsZVwiPkltcG9ydCBCaWJUZVggUHVibGljYXRpb25zPC9oMj5cbiAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJjbG9zZUltcG9ydFB1YmxpY2F0aW9uc01vZGFsKClcIiBhcmlhLWxhYmVsPVwiQ2xvc2UgQmliVGVYIGltcG9ydCBkaWFsb2dcIlxuICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MS40ZW07Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY0NzQ4YjtcIj4mdGltZXM7PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIHN0eWxlPVwicGFkZGluZzoyMHB4O1wiPlxuICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtmb250LXNpemU6MC45ZW07bWFyZ2luOjAgMCAxMnB4O1wiPlxuICAgICAgICAgICAgUGFzdGUgb25lIG9yIG1vcmUgQmliVGVYIGVudHJpZXMgdG8gbWVyZ2UgdGhlbSBpbnRvIDxjb2RlPnB1YmxpY2F0aW9ucy5iaWI8L2NvZGU+LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJtYXN0ZXItcHViLWltcG9ydC10ZXh0YXJlYVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdC1pbnB1dFwiXG4gICAgICAgICAgICAgIHJvd3M9XCIxMlwiXG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjAuODVlbTtyZXNpemU6dmVydGljYWw7XCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJAYXJ0aWNsZXtzbWl0aDIwMjUsLi4ufVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJCaWJUZVggaW1wb3J0IGNvbnRlbnRcIlxuICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIj48L3RleHRhcmVhPlxuICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDttYXJnaW4tdG9wOjEycHg7Y29sb3I6IzMzNDE1NTtcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cIm1hc3Rlci1wdWItaW1wb3J0LW92ZXJ3cml0ZVwiIC8+XG4gICAgICAgICAgICBPdmVyd3JpdGUgZXhpc3RpbmcgZW50cmllcyB3aGVuIGNpdGUga2V5cyBhbHJlYWR5IGV4aXN0XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGlkPVwibWFzdGVyLXB1Yi1pbXBvcnQtc3RhdHVzXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjAuODVlbTtjb2xvcjojNmI3MjgwO1wiXG4gICAgICAgICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiIHN0eWxlPVwiZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6OHB4O3BhZGRpbmc6MTZweCAyMHB4O1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cImNsb3NlSW1wb3J0UHVibGljYXRpb25zTW9kYWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHByaW1hcnlcIiBpZD1cIm1hc3Rlci1wdWItaW1wb3J0LXN1Ym1pdC1idG5cIlxuICAgICAgICAgICAgICBvbmNsaWNrPVwiaW1wb3J0UHVibGljYXRpb25zQmliKClcIj5JbXBvcnQ8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgaWQ9XCJtYXN0ZXItcHViLWNvbnZlcnQtbW9kYWwtb3ZlcmxheVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT1cIm1hc3Rlci1wdWItY29udmVydC1tb2RhbC10aXRsZVwiIGNsYXNzPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgIG9uY2xpY2s9XCJpZihldmVudC50YXJnZXQ9PT10aGlzKWNsb3NlQ29udmVydFB1YmxpY2F0aW9uc01vZGFsKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIHN0eWxlPVwibWF4LXdpZHRoOjc2MHB4O1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgPGgyIGlkPVwibWFzdGVyLXB1Yi1jb252ZXJ0LW1vZGFsLXRpdGxlXCI+Q29udmVydCBDaXRhdGlvbiBUZXh0IHRvIEJpYlRlWDwvaDI+XG4gICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwiY2xvc2VDb252ZXJ0UHVibGljYXRpb25zTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBjaXRhdGlvbiBjb252ZXJzaW9uIGRpYWxvZ1wiXG4gICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxLjRlbTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjQ3NDhiO1wiPiZ0aW1lczs8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCIgc3R5bGU9XCJwYWRkaW5nOjIwcHg7XCI+XG4gICAgICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjllbTttYXJnaW46MCAwIDEycHg7XCI+XG4gICAgICAgICAgICBQYXN0ZSBmcmVlLWZvcm0gY2l0YXRpb24gdGV4dCwgcmV2aWV3IHRoZSBnZW5lcmF0ZWQgQmliVGVYLCB0aGVuIGltcG9ydCBpdCB3aGVuIGl0IGxvb2tzIGNvcnJlY3QuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjtnYXA6MTRweDtcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJtYXN0ZXItcHViLWNvbnZlcnQtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkNpdGF0aW9uIFRleHQ8L2xhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJtYXN0ZXItcHViLWNvbnZlcnQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIHJvd3M9XCI3XCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtyZXNpemU6dmVydGljYWw7XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRG9lLCBKLiAoMjAyNSkuIEFydGljbGUgdGl0bGUuIEpvdXJuYWwgTmFtZSwgMTIoMyksIDEtMTAuXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDaXRhdGlvbiB0ZXh0IHRvIGNvbnZlcnRcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibWFzdGVyLXB1Yi1jb252ZXJ0LW91dHB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+R2VuZXJhdGVkIEJpYlRlWCBQcmV2aWV3PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPVwibWFzdGVyLXB1Yi1jb252ZXJ0LW91dHB1dFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgcm93cz1cIjEwXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjAuODVlbTtyZXNpemU6dmVydGljYWw7XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ29udmVydGVkIEJpYlRlWCB3aWxsIGFwcGVhciBoZXJlXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJHZW5lcmF0ZWQgQmliVGVYIHByZXZpZXdcIlxuICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDttYXJnaW4tdG9wOjEycHg7Y29sb3I6IzMzNDE1NTtcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cIm1hc3Rlci1wdWItY29udmVydC1vdmVyd3JpdGVcIiAvPlxuICAgICAgICAgICAgT3ZlcndyaXRlIGV4aXN0aW5nIGVudHJpZXMgd2hlbiBpbXBvcnRpbmcgdGhlIGdlbmVyYXRlZCBCaWJUZVhcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgaWQ9XCJtYXN0ZXItcHViLWNvbnZlcnQtc3RhdHVzXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjAuODVlbTtjb2xvcjojNmI3MjgwO1wiXG4gICAgICAgICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiIHN0eWxlPVwiZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6OHB4O3BhZGRpbmc6MTZweCAyMHB4O1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cImNsb3NlQ29udmVydFB1YmxpY2F0aW9uc01vZGFsKClcIj5DbG9zZTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIGlkPVwibWFzdGVyLXB1Yi1jb252ZXJ0LXN1Ym1pdC1idG5cIlxuICAgICAgICAgICAgICBvbmNsaWNrPVwiY29udmVydFB1YmxpY2F0aW9uVGV4dCgpXCI+R2VuZXJhdGUgQmliVGVYPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gcHJpbWFyeVwiIGlkPVwibWFzdGVyLXB1Yi1jb252ZXJ0LWltcG9ydC1idG5cIlxuICAgICAgICAgICAgICBvbmNsaWNrPVwiaW1wb3J0Q29udmVydGVkUHVibGljYXRpb25UZXh0KClcIj5JbXBvcnQgUHJldmlldzwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBQZXJzb25hbCBJbmZvIG1vZGFsIC0tPlxuICAgIDxkaXYgaWQ9XCJtYXN0ZXItcGktbW9kYWwtb3ZlcmxheVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT1cIm1hc3Rlci1waS1tb2RhbC10aXRsZVwiIGNsYXNzPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgIG9uY2xpY2s9XCJpZihldmVudC50YXJnZXQ9PT10aGlzKWNsb3NlUGVyc29uYWxJbmZvTW9kYWwoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgc3R5bGU9XCJtYXgtd2lkdGg6NjIwcHg7XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICA8aDIgaWQ9XCJtYXN0ZXItcGktbW9kYWwtdGl0bGVcIj5FZGl0IFBlcnNvbmFsIEluZm9ybWF0aW9uPC9oMj5cbiAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJjbG9zZVBlcnNvbmFsSW5mb01vZGFsKClcIiBhcmlhLWxhYmVsPVwiQ2xvc2UgcGVyc29uYWwgaW5mbyBlZGl0b3JcIlxuICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MS40ZW07Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY0NzQ4YjtcIj4mdGltZXM7PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIHN0eWxlPVwicGFkZGluZzoyMHB4O1wiPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE0cHg7XCI+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZ3JpZC1jb2x1bW46MS8tMTtcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBpLW5hbWUtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkZ1bGwgTmFtZTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwicGktbmFtZS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBwbGFjZWhvbGRlcj1cImUuZy4gSmFuZSBTbWl0aCwgUGguRC5cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZ3JpZC1jb2x1bW46MS8tMTtcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBpLXRpdGxlLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5Qcm9mZXNzaW9uYWwgVGl0bGUgLyBIZWFkbGluZTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwicGktdGl0bGUtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgcGxhY2Vob2xkZXI9XCJlLmcuIFNlbmlvciBEYXRhIFNjaWVudGlzdFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwaS1lbWFpbC1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+RW1haWw8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgaWQ9XCJwaS1lbWFpbC1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBwbGFjZWhvbGRlcj1cInlvdUBleGFtcGxlLmNvbVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwaS1waG9uZS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+UGhvbmU8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRlbFwiIGlkPVwicGktcGhvbmUtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgcGxhY2Vob2xkZXI9XCI1NTUtMTIzLTQ1NjdcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGktbGlua2VkaW4taW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkxpbmtlZEluIFVSTDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgaWQ9XCJwaS1saW5rZWRpbi1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBwbGFjZWhvbGRlcj1cImh0dHBzOi8vbGlua2VkaW4uY29tL2luL3lvdVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwaS13ZWJzaXRlLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5XZWJzaXRlPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ1cmxcIiBpZD1cInBpLXdlYnNpdGUtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgcGxhY2Vob2xkZXI9XCJodHRwczovL3lvdXJzaXRlLmNvbVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwaS1jaXR5LWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5DaXR5PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwaS1jaXR5LWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIHBsYWNlaG9sZGVyPVwiUm9jaGVzdGVyXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBpLXN0YXRlLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5TdGF0ZSAvIFJlZ2lvbjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwicGktc3RhdGUtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgcGxhY2Vob2xkZXI9XCJOWVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJjbG9zZVBlcnNvbmFsSW5mb01vZGFsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBwcmltYXJ5XCIgb25jbGljaz1cInNhdmVQZXJzb25hbEluZm8oKVwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRXhwZXJpZW5jZSBtb2RhbCAtLT5cbiAgICA8ZGl2IGlkPVwibWFzdGVyLWV4cC1tb2RhbC1vdmVybGF5XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwibWFzdGVyLWV4cC1tb2RhbC10aXRsZVwiIGNsYXNzPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgIG9uY2xpY2s9XCJpZihldmVudC50YXJnZXQ9PT10aGlzKWNsb3NlRXhwZXJpZW5jZU1vZGFsKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIHN0eWxlPVwibWF4LXdpZHRoOjY0MHB4O1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgPGgyIGlkPVwibWFzdGVyLWV4cC1tb2RhbC10aXRsZVwiPldvcmsgRXhwZXJpZW5jZTwvaDI+XG4gICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwiY2xvc2VFeHBlcmllbmNlTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBleHBlcmllbmNlIGVkaXRvclwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxLjRlbTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjQ3NDhiO1wiPiZ0aW1lczs8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCIgc3R5bGU9XCJwYWRkaW5nOjIwcHg7XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cImV4cC1tb2RhbC1pZFwiIC8+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTRweDtcIj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJncmlkLWNvbHVtbjoxLy0xO1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXhwLXRpdGxlLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5Kb2IgVGl0bGUgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImV4cC10aXRsZS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gU2VuaW9yIERhdGEgU2NpZW50aXN0XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImdyaWQtY29sdW1uOjEvLTE7XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleHAtY29tcGFueS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+Q29tcGFueSA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZXhwLWNvbXBhbnktaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgYXJpYS1yZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIEFjbWUgQ29ycFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleHAtY2l0eS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+Q2l0eTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZXhwLWNpdHktaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgcGxhY2Vob2xkZXI9XCJCb3N0b25cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXhwLXN0YXRlLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5TdGF0ZSAvIFJlZ2lvbjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZXhwLXN0YXRlLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIHBsYWNlaG9sZGVyPVwiTUFcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXhwLXN0YXJ0LWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5TdGFydCBEYXRlPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJleHAtc3RhcnQtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgcGxhY2Vob2xkZXI9XCIyMDIwLTAxXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4cC1lbmQtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkVuZCBEYXRlIChibGFuayA9IHByZXNlbnQpPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJleHAtZW5kLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIHBsYWNlaG9sZGVyPVwiMjAyNC0wNiBvciBsZWF2ZSBibGFua1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleHAtdHlwZS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+RW1wbG95bWVudCBUeXBlPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cImV4cC10eXBlLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmdWxsX3RpbWVcIj5GdWxsLXRpbWU8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicGFydF90aW1lXCI+UGFydC10aW1lPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNvbnRyYWN0XCI+Q29udHJhY3Q8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29uc3VsdGluZ1wiPkNvbnN1bHRpbmc8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaW50ZXJuc2hpcFwiPkludGVybnNoaXA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2VsZl9lbXBsb3llZFwiPlNlbGYtZW1wbG95ZWQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleHAtaW1wb3J0YW5jZS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+SW1wb3J0YW5jZSAoMVx1MjAxMzEwKTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJleHAtaW1wb3J0YW5jZS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6ODBweDtcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMVwiIG1heD1cIjEwXCIgdmFsdWU9XCI1XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImdyaWQtY29sdW1uOjEvLTE7XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleHAtdGFncy1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+VGFncyAoY29tbWEtc2VwYXJhdGVkKTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZXhwLXRhZ3MtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBtbCwgbGVhZGVyc2hpcCwgcHl0aG9uXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImdyaWQtY29sdW1uOjEvLTE7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tY3YtYm9yZGVyKTtwYWRkaW5nLXRvcDoxNHB4O21hcmdpbi10b3A6NHB4O1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjZweDtcIj5BY2hpZXZlbWVudHM8L2xhYmVsPlxuICAgICAgICAgICAgICA8ZGl2IGlkPVwiZXhwLWFjaGlldmVtZW50cy1lZGl0b3ItbGlzdFwiPjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDo2cHg7bWFyZ2luLXRvcDo2cHg7XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJleHAtYWNoLW5ldy1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwiZmxleDoxO1wiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQWRkIGFuIGFjaGlldmVtZW50IG9yIGJ1bGxldFx1MjAyNlwiXG4gICAgICAgICAgICAgICAgICAgIG9ua2V5ZG93bj1cImlmKGV2ZW50LmtleT09PSdFbnRlcicpe2V2ZW50LnByZXZlbnREZWZhdWx0KCk7X2FkZEV4cEFjaGlldmVtZW50KCk7fVwiIC8+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIG9uY2xpY2s9XCJfYWRkRXhwQWNoaWV2ZW1lbnQoKVwiPisgQWRkPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwiY2xvc2VFeHBlcmllbmNlTW9kYWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHByaW1hcnlcIiBvbmNsaWNrPVwic2F2ZU1hc3RlckV4cGVyaWVuY2UoKVwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2tpbGwgYWRkIG1vZGFsIC0tPlxuICAgIDxkaXYgaWQ9XCJtYXN0ZXItc2tpbGwtbW9kYWwtb3ZlcmxheVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT1cIm1hc3Rlci1za2lsbC1tb2RhbC10aXRsZVwiIGNsYXNzPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgIG9uY2xpY2s9XCJpZihldmVudC50YXJnZXQ9PT10aGlzKWNsb3NlU2tpbGxNb2RhbCgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBzdHlsZT1cIm1heC13aWR0aDo0ODBweDtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxoMiBpZD1cIm1hc3Rlci1za2lsbC1tb2RhbC10aXRsZVwiPkFkZCBTa2lsbDwvaDI+XG4gICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwiY2xvc2VTa2lsbE1vZGFsKClcIiBhcmlhLWxhYmVsPVwiQ2xvc2Ugc2tpbGwgZWRpdG9yXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjEuNGVtO2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2NDc0OGI7XCI+JnRpbWVzOzwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIiBzdHlsZT1cInBhZGRpbmc6MjBweDtcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwic2tpbGwtbW9kYWwtY2F0ZWdvcnlcIiAvPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJza2lsbC1tb2RhbC1pcy1mbGF0XCIgLz5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwic2tpbGwtbW9kYWwtb3JpZ2luYWwtbmFtZVwiIC8+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIiBpZD1cInNraWxsLWNhdGVnb3J5LXJvd1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNraWxsLWNhdGVnb3J5LWRpc3BsYXlcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkNhdGVnb3J5PC9sYWJlbD5cbiAgICAgICAgICAgIDxzcGFuIGlkPVwic2tpbGwtY2F0ZWdvcnktZGlzcGxheVwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6NTAwO2NvbG9yOiMzMzQxNTU7XCI+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwic2tpbGwtbmFtZS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+U2tpbGwgTmFtZSA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInNraWxsLW5hbWUtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgYXJpYS1yZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBQeXRob25cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwic2tpbGwtZXhwZXJpZW5jZXMtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkFzc29jaWF0ZWQgRXhwZXJpZW5jZSBJRHMgKG9wdGlvbmFsKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInNraWxsLWV4cGVyaWVuY2VzLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIGV4cF8xMjMsIGV4cF80NTZcIiAvPlxuICAgICAgICAgICAgPHNtYWxsIHN0eWxlPVwiZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjRweDtjb2xvcjojNjQ3NDhiO1wiPkNvbW1hLXNlcGFyYXRlZCBJRHMuIEEgc2tpbGwgY2FuIGJlIGxpbmtlZCB0byBtdWx0aXBsZSBleHBlcmllbmNlcy48L3NtYWxsPlxuICAgICAgICAgICAgPGRpdiBpZD1cInNraWxsLWV4cGVyaWVuY2UtaGludHNcIiBzdHlsZT1cIm1hcmdpbi10b3A6NnB4O2ZvbnQtc2l6ZTowLjhlbTtjb2xvcjojOTRhM2I4O1wiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwic2tpbGwtYWxpYXNlcy1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+QWxpYXNlcyAoY29tbWEtc2VwYXJhdGVkLCBvcHRpb25hbCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJza2lsbC1hbGlhc2VzLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIEpTLCBFQ01BU2NyaXB0XCIgLz5cbiAgICAgICAgICAgIDxzbWFsbCBzdHlsZT1cImRpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDo0cHg7Y29sb3I6IzY0NzQ4YjtcIj5BbHRlcm5hdGUgbmFtZXMgYW4gQVRTIG9yIHJldmlld2VyIG1pZ2h0IHNlYXJjaCBmb3IuPC9zbWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNraWxsLXllYXJzLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5ZZWFycyBvZiBFeHBlcmllbmNlIChvcHRpb25hbCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cInNraWxsLXllYXJzLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMjBweDtcIiBtaW49XCIwXCIgc3RlcD1cIjAuNVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwiY2xvc2VTa2lsbE1vZGFsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBwcmltYXJ5XCIgaWQ9XCJtYXN0ZXItc2tpbGwtc2F2ZS1idG5cIiBvbmNsaWNrPVwic2F2ZU1hc3RlclNraWxsKClcIj5BZGQgU2tpbGw8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRWR1Y2F0aW9uIG1vZGFsIC0tPlxuICAgIDxkaXYgaWQ9XCJtYXN0ZXItZWR1LW1vZGFsLW92ZXJsYXlcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJtYXN0ZXItZWR1LW1vZGFsLXRpdGxlXCIgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgb25jbGljaz1cImlmKGV2ZW50LnRhcmdldD09PXRoaXMpY2xvc2VFZHVjYXRpb25Nb2RhbCgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBzdHlsZT1cIm1heC13aWR0aDo1ODBweDtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxoMiBpZD1cIm1hc3Rlci1lZHUtbW9kYWwtdGl0bGVcIj5FZHVjYXRpb248L2gyPlxuICAgICAgICAgIDxidXR0b24gb25jbGljaz1cImNsb3NlRWR1Y2F0aW9uTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBlZHVjYXRpb24gZWRpdG9yXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjEuNGVtO2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2NDc0OGI7XCI+JnRpbWVzOzwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIiBzdHlsZT1cInBhZGRpbmc6MjBweDtcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiZWR1LW1vZGFsLWlkeFwiIHZhbHVlPVwiLTFcIiAvPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE0cHg7XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZWR1LWRlZ3JlZS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+RGVncmVlIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJlZHUtZGVncmVlLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIGFyaWEtcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBQaC5ELlwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJlZHUtZmllbGQtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkZpZWxkIG9mIFN0dWR5PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJlZHUtZmllbGQtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBCaW9zdGF0aXN0aWNzXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImdyaWQtY29sdW1uOjEvLTE7XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJlZHUtaW5zdGl0dXRpb24taW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkluc3RpdHV0aW9uIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJlZHUtaW5zdGl0dXRpb24taW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgYXJpYS1yZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3RvblwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJlZHUtY2l0eS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+Q2l0eTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZWR1LWNpdHktaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgcGxhY2Vob2xkZXI9XCJTZWF0dGxlXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImVkdS1zdGF0ZS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+U3RhdGU8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImVkdS1zdGF0ZS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBwbGFjZWhvbGRlcj1cIldBXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImVkdS1zdGFydC15ZWFyLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5TdGFydCBZZWFyPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImVkdS1zdGFydC15ZWFyLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxOTUwXCIgbWF4PVwiMjA5OVwiIHBsYWNlaG9sZGVyPVwiMTk5NVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJlZHUtZW5kLXllYXItaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkVuZCBZZWFyPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImVkdS1lbmQteWVhci1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMTk1MFwiIG1heD1cIjIwOTlcIiBwbGFjZWhvbGRlcj1cIjIwMDBcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwiY2xvc2VFZHVjYXRpb25Nb2RhbCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gcHJpbWFyeVwiIG9uY2xpY2s9XCJzYXZlTWFzdGVyRWR1Y2F0aW9uKClcIj5TYXZlPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEF3YXJkIG1vZGFsIC0tPlxuICAgIDxkaXYgaWQ9XCJtYXN0ZXItYXdhcmQtbW9kYWwtb3ZlcmxheVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT1cIm1hc3Rlci1hd2FyZC1tb2RhbC10aXRsZVwiIGNsYXNzPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgIG9uY2xpY2s9XCJpZihldmVudC50YXJnZXQ9PT10aGlzKWNsb3NlQXdhcmRNb2RhbCgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBzdHlsZT1cIm1heC13aWR0aDo1ODBweDtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxoMiBpZD1cIm1hc3Rlci1hd2FyZC1tb2RhbC10aXRsZVwiPkF3YXJkIC8gSG9ub3VyPC9oMj5cbiAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJjbG9zZUF3YXJkTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBhd2FyZCBlZGl0b3JcIlxuICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MS40ZW07Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY0NzQ4YjtcIj4mdGltZXM7PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIHN0eWxlPVwicGFkZGluZzoyMHB4O1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJhd2FyZC1tb2RhbC1pZHhcIiB2YWx1ZT1cIi0xXCIgLz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImF3YXJkLXRpdGxlLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5UaXRsZSA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImF3YXJkLXRpdGxlLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIGFyaWEtcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gRW1wbG95ZWUgb2YgdGhlIFllYXJcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXdhcmQteWVhci1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+WWVhcjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiYXdhcmQteWVhci1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwcHg7XCJcbiAgICAgICAgICAgICAgICBtaW49XCIxOTUwXCIgbWF4PVwiMjA5OVwiIHBsYWNlaG9sZGVyPVwiMjAyMlwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhd2FyZC1kZXNjLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5EZXNjcmlwdGlvbjwvbGFiZWw+XG4gICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJhd2FyZC1kZXNjLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgcm93cz1cIjNcIiBzdHlsZT1cIndpZHRoOjEwMCU7cmVzaXplOnZlcnRpY2FsO1wiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJCcmllZiBjb250ZXh0IG9yIGFjaGlldmVtZW50IGRlc2NyaXB0aW9uXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImF3YXJkLXJlbGV2YW50LWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5SZWxldmFudCBmb3IgKGNvbW1hLXNlcGFyYXRlZCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJhd2FyZC1yZWxldmFudC1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBsZWFkZXJzaGlwLCBwaGFybWFcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cImNsb3NlQXdhcmRNb2RhbCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gcHJpbWFyeVwiIG9uY2xpY2s9XCJzYXZlTWFzdGVyQXdhcmQoKVwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ2VydGlmaWNhdGlvbiBtb2RhbCAtLT5cbiAgICA8ZGl2IGlkPVwibWFzdGVyLWNlcnQtbW9kYWwtb3ZlcmxheVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT1cIm1hc3Rlci1jZXJ0LW1vZGFsLXRpdGxlXCIgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgb25jbGljaz1cImlmKGV2ZW50LnRhcmdldD09PXRoaXMpY2xvc2VDZXJ0aWZpY2F0aW9uTW9kYWwoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgc3R5bGU9XCJtYXgtd2lkdGg6NTAwcHg7XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICA8aDIgaWQ9XCJtYXN0ZXItY2VydC1tb2RhbC10aXRsZVwiPkNlcnRpZmljYXRpb248L2gyPlxuICAgICAgICAgIDxidXR0b24gb25jbGljaz1cImNsb3NlQ2VydGlmaWNhdGlvbk1vZGFsKClcIiBhcmlhLWxhYmVsPVwiQ2xvc2UgY2VydGlmaWNhdGlvbiBlZGl0b3JcIlxuICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MS40ZW07Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY0NzQ4YjtcIj4mdGltZXM7PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIHN0eWxlPVwicGFkZGluZzoyMHB4O1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJjZXJ0LW1vZGFsLWlkeFwiIHZhbHVlPVwiLTFcIiAvPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiY2VydC1uYW1lLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5OYW1lIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiY2VydC1uYW1lLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIGFyaWEtcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gQVdTIENlcnRpZmllZCBTb2x1dGlvbnMgQXJjaGl0ZWN0XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNlcnQtaXNzdWVyLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5Jc3N1ZXI8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJjZXJ0LWlzc3Vlci1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBBbWF6b24gV2ViIFNlcnZpY2VzXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNlcnQteWVhci1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+WWVhcjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiY2VydC15ZWFyLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDBweDtcIlxuICAgICAgICAgICAgICAgIG1pbj1cIjE5NTBcIiBtYXg9XCIyMDk5XCIgcGxhY2Vob2xkZXI9XCIyMDIzXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJjbG9zZUNlcnRpZmljYXRpb25Nb2RhbCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gcHJpbWFyeVwiIG9uY2xpY2s9XCJzYXZlTWFzdGVyQ2VydGlmaWNhdGlvbigpXCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBY2hpZXZlbWVudCBlZGl0IG1vZGFsIC0tPlxuICAgIDxkaXYgaWQ9XCJtYXN0ZXItYWNoLW1vZGFsLW92ZXJsYXlcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJtYXN0ZXItYWNoLW1vZGFsLXRpdGxlXCIgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgb25jbGljaz1cImlmKGV2ZW50LnRhcmdldD09PXRoaXMpY2xvc2VNYXN0ZXJBY2hNb2RhbCgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBzdHlsZT1cIm1heC13aWR0aDo2MDBweDtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxoMiBpZD1cIm1hc3Rlci1hY2gtbW9kYWwtdGl0bGVcIj5BY2hpZXZlbWVudDwvaDI+XG4gICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwiY2xvc2VNYXN0ZXJBY2hNb2RhbCgpXCIgYXJpYS1sYWJlbD1cIkNsb3NlIGFjaGlldmVtZW50IGVkaXRvclwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxLjRlbTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjQ3NDhiO1wiPiZ0aW1lczs8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCIgc3R5bGU9XCJwYWRkaW5nOjIwcHg7XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cImFjaC1tb2RhbC1pZFwiIC8+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhY2gtbW9kYWwtdGl0bGUtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPlRpdGxlIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiYWNoLW1vZGFsLXRpdGxlLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIGFyaWEtcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gTGVkIDNcdTAwRDcgcmV2ZW51ZSBncm93dGggaW5pdGlhdGl2ZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhY2gtbW9kYWwtZGVzYy1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+RGVzY3JpcHRpb248L2xhYmVsPlxuICAgICAgICAgICAgPHRleHRhcmVhIGlkPVwiYWNoLW1vZGFsLWRlc2MtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiByb3dzPVwiM1wiIHN0eWxlPVwid2lkdGg6MTAwJTtyZXNpemU6dmVydGljYWw7XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk9wdGlvbmFsIGRldGFpbCBvciBtZXRyaWNcIj48L3RleHRhcmVhPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiYWNoLW1vZGFsLXJlbGV2YW50LWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5SZWxldmFudCBmb3IgKGNvbW1hLXNlcGFyYXRlZCByb2xlcy9kb21haW5zKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImFjaC1tb2RhbC1yZWxldmFudC1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBsZWFkZXJzaGlwLCBNTCBlbmdpbmVlcmluZywgZGF0YSBzY2llbmNlXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImFjaC1tb2RhbC1pbXBvcnRhbmNlLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5JbXBvcnRhbmNlICgxXHUyMDEzMTApPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJhY2gtbW9kYWwtaW1wb3J0YW5jZS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6ODBweDtcIlxuICAgICAgICAgICAgICAgIG1pbj1cIjFcIiBtYXg9XCIxMFwiIHZhbHVlPVwiN1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwiY2xvc2VNYXN0ZXJBY2hNb2RhbCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gcHJpbWFyeVwiIG9uY2xpY2s9XCJzYXZlTWFzdGVyQWNoaWV2ZW1lbnQoKVwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU3VtbWFyeSBlZGl0IG1vZGFsIC0tPlxuICAgIDxkaXYgaWQ9XCJtYXN0ZXItc3VtLW1vZGFsLW92ZXJsYXlcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJtYXN0ZXItc3VtLW1vZGFsLXRpdGxlXCIgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgb25jbGljaz1cImlmKGV2ZW50LnRhcmdldD09PXRoaXMpY2xvc2VNYXN0ZXJTdW1Nb2RhbCgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBzdHlsZT1cIm1heC13aWR0aDo2MDBweDtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxoMiBpZD1cIm1hc3Rlci1zdW0tbW9kYWwtdGl0bGVcIj5Qcm9mZXNzaW9uYWwgU3VtbWFyeTwvaDI+XG4gICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwiY2xvc2VNYXN0ZXJTdW1Nb2RhbCgpXCIgYXJpYS1sYWJlbD1cIkNsb3NlIHN1bW1hcnkgZWRpdG9yXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjEuNGVtO2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2NDc0OGI7XCI+JnRpbWVzOzwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIiBzdHlsZT1cInBhZGRpbmc6MjBweDtcIj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN1bS1tb2RhbC1rZXktaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPktleS9uYW1lIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwic3VtLW1vZGFsLWtleS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIG1sX2VuZ2luZWVyaW5nIG9yIGxlYWRlcnNoaXBcIiAvPlxuICAgICAgICAgICAgPHAgc3R5bGU9XCJmb250LXNpemU6MC44MmVtO2NvbG9yOiM2YjcyODA7bWFyZ2luOjRweCAwIDA7XCI+VXNlIGxvd2VyY2FzZV91bmRlcnNjb3JlIFx1MjAxNCB0aGlzIGlzIHRoZSBrZXkgdXNlZCBpbnRlcm5hbGx5IGFuZCBzaG93biBpbiB0aGUgU3VtbWFyeSBGb2N1cyBzdGVwLjwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN1bS1tb2RhbC10ZXh0LWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5TdW1tYXJ5IHRleHQgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgPHRleHRhcmVhIGlkPVwic3VtLW1vZGFsLXRleHQtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiByb3dzPVwiNVwiIHN0eWxlPVwid2lkdGg6MTAwJTtyZXNpemU6dmVydGljYWw7XCIgYXJpYS1yZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiV3JpdGUgeW91ciBwcm9mZXNzaW9uYWwgc3VtbWFyeSB2YXJpYW50IGhlcmVcdTIwMjZcIj48L3RleHRhcmVhPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cImNsb3NlTWFzdGVyU3VtTW9kYWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHByaW1hcnlcIiBvbmNsaWNrPVwic2F2ZU1hc3RlclN1bW1hcnkoKVwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgLy8gRGlzYWJsZSB3cml0ZSBjb250cm9scyB3aGVuIHRoZSB3b3JrZmxvdyBwaGFzZSBkb2VzIG5vdCBwZXJtaXQgTWFzdGVyIENWIGVkaXRzLlxuICBpZiAoIWlzRWRpdGFibGUpIHtcbiAgICBjb25zdCBTQUZFX09OQ0xJQ0sgPSAvXihleHBvcnRNYXN0ZXJDVnx2YWxpZGF0ZVB1YmxpY2F0aW9uc0JpYnxvcGVuQmFja3VwSGlzdG9yeU1vZGFsfHJlc3RvcmVCYWNrdXB8b3BlbkZ1bGxEYXRhUHJldmlld01vZGFsKVxcKC87XG4gICAgY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKS5mb3JFYWNoKGJ0biA9PiB7XG4gICAgICBjb25zdCBvbmNsaWNrID0gKGJ0bi5nZXRBdHRyaWJ1dGUoJ29uY2xpY2snKSB8fCAnJykudHJpbSgpO1xuICAgICAgaWYgKFNBRkVfT05DTElDSy50ZXN0KG9uY2xpY2spKSByZXR1cm47XG4gICAgICBidG4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgYnRuLnN0eWxlLm9wYWNpdHkgPSAnMC40NSc7XG4gICAgICBidG4uc3R5bGUuY3Vyc29yID0gJ25vdC1hbGxvd2VkJztcbiAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgJ0VkaXRpbmcgbG9ja2VkIFx1MjAxNCBjb21wbGV0ZSB0aGUgY3VycmVudCBzdGFnZSB0byByZS1lbmFibGUnKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIExvYWQgcHVibGljYXRpb25zIGFzeW5jaHJvbm91c2x5IGFmdGVyIHRoZSBET00gaXMgcmVhZHkuXG4gIGxvYWRQdWJsaWNhdGlvbnMoKTtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclBlcnNvbmFsSW5mb0NhcmQocGkpIHtcbiAgY29uc3QgY29udGFjdCA9IHBpLmNvbnRhY3QgfHwge307XG4gIGNvbnN0IGFkZHJlc3MgPSBjb250YWN0LmFkZHJlc3MgfHwge307XG4gIGNvbnN0IHJvd3MgPSBbXG4gICAgWydOYW1lJywgICAgICBwaS5uYW1lIHx8ICcnXSxcbiAgICBbJ1RpdGxlJywgICAgIHBpLnRpdGxlIHx8IHBpLmhlYWRsaW5lIHx8ICcnXSxcbiAgICBbJ0VtYWlsJywgICAgIGNvbnRhY3QuZW1haWwgfHwgcGkuZW1haWwgfHwgJyddLFxuICAgIFsnUGhvbmUnLCAgICAgY29udGFjdC5waG9uZSB8fCAnJ10sXG4gICAgWydMaW5rZWRJbicsICBjb250YWN0LmxpbmtlZGluIHx8ICcnXSxcbiAgICBbJ1dlYnNpdGUnLCAgIGNvbnRhY3Qud2Vic2l0ZSB8fCAnJ10sXG4gICAgWydMb2NhdGlvbicsICBbYWRkcmVzcy5jaXR5LCBhZGRyZXNzLnN0YXRlXS5maWx0ZXIoQm9vbGVhbikuam9pbignLCAnKV0sXG4gIF0uZmlsdGVyKChbLCB2XSkgPT4gdik7XG4gIGlmICghcm93cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJzxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtwYWRkaW5nOjEycHggMDtcIj5ObyBwZXJzb25hbCBpbmZvcm1hdGlvbiBvbiBmaWxlLiBDbGljayBcIlx1MjcwRlx1RkUwRiBFZGl0XCIgYWJvdmUgdG8gYWRkIHlvdXIgZGV0YWlscy48L3A+JztcbiAgfVxuICByZXR1cm4gYDxkbCBjbGFzcz1cIm1hc3Rlci1pbmZvLWdyaWRcIj4ke3Jvd3MubWFwKChbbGFiZWwsIHZhbHVlXSkgPT5cbiAgICBgPGRpdiBjbGFzcz1cIm1hc3Rlci1pbmZvLXJvd1wiPjxkdD4ke2VzY2FwZUh0bWwobGFiZWwpfTwvZHQ+PGRkPiR7ZXNjYXBlSHRtbCh2YWx1ZSl9PC9kZD48L2Rpdj5gXG4gICkuam9pbignJyl9PC9kbD5gO1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyRXhwZXJpZW5jZXNMaXN0KGV4cGVyaWVuY2VzKSB7XG4gIGlmICghZXhwZXJpZW5jZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICc8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7cGFkZGluZzoxMnB4IDA7XCI+Tm8gZXhwZXJpZW5jZSBlbnRyaWVzIHlldC4gQ2xpY2sgXCIrIEFkZCBFeHBlcmllbmNlXCIgYWJvdmUuPC9wPic7XG4gIH1cbiAgY29uc3Qgcm93cyA9IGV4cGVyaWVuY2VzLm1hcCgoZXhwLCBpZHgpID0+IHtcbiAgICBjb25zdCB0aXRsZSAgID0gZXNjYXBlSHRtbChleHAudGl0bGUgfHwgJycpO1xuICAgIGNvbnN0IGNvbXBhbnkgPSBlc2NhcGVIdG1sKGV4cC5jb21wYW55IHx8ICcnKTtcbiAgICBjb25zdCBsb2MgICAgID0gZXhwLmxvY2F0aW9uIHx8IHt9O1xuICAgIGNvbnN0IGxvY2F0aW9uID0gZXNjYXBlSHRtbChbbG9jLmNpdHksIGxvYy5zdGF0ZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJykpO1xuICAgIGNvbnN0IGRhdGVzICAgPSBlc2NhcGVIdG1sKFtleHAuc3RhcnRfZGF0ZSwgZXhwLmVuZF9kYXRlIHx8ICdQcmVzZW50J10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyBcdTIwMTMgJykpO1xuICAgIGNvbnN0IGFjaENvdW50ID0gKGV4cC5hY2hpZXZlbWVudHMgfHwgW10pLmxlbmd0aDtcbiAgICBjb25zdCBleHBJZCA9IGVzY2FwZUh0bWwoZXhwLmlkIHx8ICcnKTtcbiAgICByZXR1cm4gYFxuICAgICAgPHRyPlxuICAgICAgICA8dGQ+XG4gICAgICAgICAgPHN0cm9uZz4ke3RpdGxlfTwvc3Ryb25nPjxicj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiM0NzU1Njk7XCI+JHtjb21wYW55fTwvc3Bhbj5cbiAgICAgICAgICAke2xvY2F0aW9uID8gYDxzcGFuIHN0eWxlPVwiY29sb3I6Izk0YTNiODtmb250LXNpemU6MC44NWVtO1wiPiBcdTAwQjcgJHtsb2NhdGlvbn08L3NwYW4+YCA6ICcnfVxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOiM0NzU1Njk7d2hpdGUtc3BhY2U6bm93cmFwO1wiPiR7ZGF0ZXN9PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6Izk0YTNiODtmb250LXNpemU6MC44NWVtO1wiPiR7YWNoQ291bnR9PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiYWN0aW9uLWJ0bnNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBvbmNsaWNrPVwiZWRpdE1hc3RlckV4cGVyaWVuY2UoJyR7ZXhwSWR9JylcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRWRpdCBleHBlcmllbmNlOiAke3RpdGxlfVwiIHRpdGxlPVwiRWRpdFwiPlx1MjcwRlx1RkUwRjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJkZWxldGVNYXN0ZXJFeHBlcmllbmNlKCcke2VzY2FwZUh0bWwoZXhwLmlkIHx8ICcnKX0nLCAnJHt0aXRsZX0nKVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWxldGUgZXhwZXJpZW5jZTogJHt0aXRsZX1cIiB0aXRsZT1cIkRlbGV0ZVwiPlx1RDgzRFx1REREMVx1RkUwRjwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5gO1xuICB9KS5qb2luKCcnKTtcbiAgcmV0dXJuIGBcbiAgICA8dGFibGUgY2xhc3M9XCJyZXZpZXctdGFibGVcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGg+Um9sZSAvIENvbXBhbnk8L3RoPlxuICAgICAgICAgIDx0aD5EYXRlczwvdGg+XG4gICAgICAgICAgPHRoIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6NjBweDtcIj5CdWxsZXRzPC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo4MHB4O1wiPkFjdGlvbnM8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT4ke3Jvd3N9PC90Ym9keT5cbiAgICA8L3RhYmxlPmA7XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJTa2lsbHNTZWN0aW9uKHNraWxscykge1xuICBjb25zdCBub3JtYWxpemVTa2lsbCA9IChzKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBzID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHsgbmFtZTogcywgZXhwZXJpZW5jZXM6IFtdIH07XG4gICAgfVxuICAgIGlmIChzICYmIHR5cGVvZiBzID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogcy5uYW1lIHx8ICcnLFxuICAgICAgICBleHBlcmllbmNlczogQXJyYXkuaXNBcnJheShzLmV4cGVyaWVuY2VzKSA/IHMuZXhwZXJpZW5jZXMgOiBbXSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7IG5hbWU6IFN0cmluZyhzIHx8ICcnKSwgZXhwZXJpZW5jZXM6IFtdIH07XG4gIH07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc2tpbGxzKSkge1xuICAgIGlmICghc2tpbGxzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuICc8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7cGFkZGluZzoxMnB4IDA7XCI+Tm8gc2tpbGxzIG9uIGZpbGUuIENsaWNrIFwiKyBBZGQgU2tpbGxcIiBhYm92ZS48L3A+JztcbiAgICB9XG4gICAgY29uc3QgY2hpcHMgPSBza2lsbHMubWFwKHMgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVNraWxsKHMpO1xuICAgICAgY29uc3QgbmFtZSA9IGVzY2FwZUh0bWwobm9ybWFsaXplZC5uYW1lKTtcbiAgICAgIGNvbnN0IHJhdyA9IGVzY2FwZUh0bWwobm9ybWFsaXplZC5uYW1lKTtcbiAgICAgIGNvbnN0IGJhZGdlID0gbm9ybWFsaXplZC5leHBlcmllbmNlcy5sZW5ndGhcbiAgICAgICAgPyBgPHNtYWxsIHN0eWxlPVwiY29sb3I6IzY0NzQ4YjttYXJnaW4tbGVmdDo2cHg7XCI+KCR7bm9ybWFsaXplZC5leHBlcmllbmNlcy5sZW5ndGh9IGV4cCk8L3NtYWxsPmBcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IHNraWxsSnNvbiA9IGVzY2FwZUh0bWwoSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiBub3JtYWxpemVkLm5hbWUsIGV4cGVyaWVuY2VzOiBub3JtYWxpemVkLmV4cGVyaWVuY2VzIH0pKTtcbiAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJza2lsbC1jaGlwXCI+JHtuYW1lfSR7YmFkZ2V9PGJ1dHRvbiBjbGFzcz1cInNraWxsLWNoaXAtZGVsXCIgb25jbGljaz1cImVkaXRNYXN0ZXJTa2lsbCgke3NraWxsSnNvbn0sICcnLCB0cnVlKVwiIGFyaWEtbGFiZWw9XCJFZGl0IHNraWxsICR7bmFtZX1cIiB0aXRsZT1cIkVkaXRcIj5cdTI3MEZcdUZFMEY8L2J1dHRvbj48YnV0dG9uIGNsYXNzPVwic2tpbGwtY2hpcC1kZWxcIiBvbmNsaWNrPVwiZGVsZXRlTWFzdGVyU2tpbGwoJyR7cmF3fScsICcnLCB0cnVlKVwiIGFyaWEtbGFiZWw9XCJSZW1vdmUgc2tpbGwgJHtuYW1lfVwiIHRpdGxlPVwiUmVtb3ZlXCI+XHUwMEQ3PC9idXR0b24+PC9zcGFuPmA7XG4gICAgfSkuam9pbignJyk7XG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwic2tpbGwtY2hpcHMtY29udGFpbmVyXCI+JHtjaGlwc308L2Rpdj5gO1xuICB9XG4gIGlmICh0eXBlb2Ygc2tpbGxzID09PSAnb2JqZWN0JyAmJiBza2lsbHMgIT09IG51bGwpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2tpbGxzKTtcbiAgICBpZiAoIWtleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJzxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtwYWRkaW5nOjEycHggMDtcIj5ObyBza2lsbCBjYXRlZ29yaWVzIG9uIGZpbGUuPC9wPic7XG4gICAgfVxuICAgIHJldHVybiBrZXlzLm1hcChjYXRLZXkgPT4ge1xuICAgICAgY29uc3QgY2F0VmFsICA9IHNraWxsc1tjYXRLZXldO1xuICAgICAgY29uc3QgY2F0TmFtZSAgPSB0eXBlb2YgY2F0VmFsID09PSAnb2JqZWN0JyAmJiBjYXRWYWwuY2F0ZWdvcnkgPyBjYXRWYWwuY2F0ZWdvcnkgOiBjYXRLZXk7XG4gICAgICBjb25zdCBjYXRMaXN0ICA9IEFycmF5LmlzQXJyYXkoY2F0VmFsKSA/IGNhdFZhbFxuICAgICAgICAgICAgICAgICAgICAgOiBBcnJheS5pc0FycmF5KGNhdFZhbD8uc2tpbGxzKSA/IGNhdFZhbC5za2lsbHMgOiBbXTtcbiAgICAgIGNvbnN0IGNoaXBzICAgPSBjYXRMaXN0Lm1hcChzID0+IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVNraWxsKHMpO1xuICAgICAgICBjb25zdCBuYW1lID0gZXNjYXBlSHRtbChub3JtYWxpemVkLm5hbWUpO1xuICAgICAgICBjb25zdCBiYWRnZSA9IG5vcm1hbGl6ZWQuZXhwZXJpZW5jZXMubGVuZ3RoXG4gICAgICAgICAgPyBgPHNtYWxsIHN0eWxlPVwiY29sb3I6IzY0NzQ4YjttYXJnaW4tbGVmdDo2cHg7XCI+KCR7bm9ybWFsaXplZC5leHBlcmllbmNlcy5sZW5ndGh9IGV4cCk8L3NtYWxsPmBcbiAgICAgICAgICA6ICcnO1xuICAgICAgICBjb25zdCBza2lsbEpzb24gPSBlc2NhcGVIdG1sKEpTT04uc3RyaW5naWZ5KHsgbmFtZTogbm9ybWFsaXplZC5uYW1lLCBleHBlcmllbmNlczogbm9ybWFsaXplZC5leHBlcmllbmNlcyB9KSk7XG4gICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJza2lsbC1jaGlwXCI+JHtuYW1lfSR7YmFkZ2V9PGJ1dHRvbiBjbGFzcz1cInNraWxsLWNoaXAtZGVsXCIgb25jbGljaz1cImVkaXRNYXN0ZXJTa2lsbCgke3NraWxsSnNvbn0sICcke2VzY2FwZUh0bWwoY2F0S2V5KX0nLCBmYWxzZSlcIiBhcmlhLWxhYmVsPVwiRWRpdCAke25hbWV9XCIgdGl0bGU9XCJFZGl0XCI+XHUyNzBGXHVGRTBGPC9idXR0b24+PGJ1dHRvbiBjbGFzcz1cInNraWxsLWNoaXAtZGVsXCIgb25jbGljaz1cImRlbGV0ZU1hc3RlclNraWxsKCcke25hbWV9JywgJyR7ZXNjYXBlSHRtbChjYXRLZXkpfScsIGZhbHNlKVwiIGFyaWEtbGFiZWw9XCJSZW1vdmUgJHtuYW1lfVwiIHRpdGxlPVwiUmVtb3ZlXCI+XHUwMEQ3PC9idXR0b24+PC9zcGFuPmA7XG4gICAgICB9KS5qb2luKCcnKTtcbiAgICAgIGNvbnN0IGNhdEtleUVzYyAgPSBlc2NhcGVIdG1sKGNhdEtleSk7XG4gICAgICBjb25zdCBjYXROYW1lRXNjID0gZXNjYXBlSHRtbChjYXROYW1lKTtcbiAgICAgIHJldHVybiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2tpbGwtY2F0ZWdvcnlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXNraWxsLWNhdC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFzdGVyLXNraWxsLWNhdC1uYW1lXCI+JHtjYXROYW1lRXNjfTwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuLXNtXCIgb25jbGljaz1cInNob3dBZGRTa2lsbE1vZGFsKCcke2NhdEtleUVzY30nLCBmYWxzZSlcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBZGQgc2tpbGwgdG8gJHtjYXROYW1lRXNjfVwiPisgQWRkPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNraWxsLWNoaXBzLWNvbnRhaW5lclwiPiR7Y2hpcHMgfHwgJzxzcGFuIHN0eWxlPVwiY29sb3I6Izk0YTNiODtmb250LXNpemU6MC44NWVtO1wiPk5vIHNraWxscyBpbiB0aGlzIGNhdGVnb3J5PC9zcGFuPid9PC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgfSkuam9pbignJyk7XG4gIH1cbiAgcmV0dXJuICc8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7XCI+U2tpbGxzIGRhdGEgZm9ybWF0IG5vdCByZWNvZ25pc2VkLjwvcD4nO1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyRWR1Y2F0aW9uTGlzdChlZHVjYXRpb24pIHtcbiAgaWYgKCFlZHVjYXRpb24ubGVuZ3RoKSB7XG4gICAgcmV0dXJuICc8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7cGFkZGluZzoxMnB4IDA7XCI+Tm8gZWR1Y2F0aW9uIGVudHJpZXMgeWV0LiBDbGljayBcIisgQWRkIEVkdWNhdGlvblwiIGFib3ZlLjwvcD4nO1xuICB9XG4gIGNvbnN0IHJvd3MgPSBlZHVjYXRpb24ubWFwKChlZHUsIGlkeCkgPT4ge1xuICAgIGNvbnN0IGRlZ3JlZSAgICAgID0gZXNjYXBlSHRtbChlZHUuZGVncmVlIHx8ICcnKTtcbiAgICBjb25zdCBmaWVsZCAgICAgICA9IGVzY2FwZUh0bWwoZWR1LmZpZWxkIHx8ICcnKTtcbiAgICBjb25zdCBpbnN0aXR1dGlvbiA9IGVzY2FwZUh0bWwoZWR1Lmluc3RpdHV0aW9uIHx8ICcnKTtcbiAgICBjb25zdCBsb2MgICAgICAgICA9IGVkdS5sb2NhdGlvbiB8fCB7fTtcbiAgICBjb25zdCBsb2NhdGlvbiAgICA9IGVzY2FwZUh0bWwoW2xvYy5jaXR5LCBsb2Muc3RhdGVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpKTtcbiAgICBjb25zdCB5ZWFycyAgICAgICA9IFtlZHUuc3RhcnRfeWVhciwgZWR1LmVuZF95ZWFyXS5maWx0ZXIoQm9vbGVhbikuam9pbignXHUyMDEzJyk7XG4gICAgY29uc3QgZWR1SnNvbiA9IGVzY2FwZUh0bWwoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZGVncmVlOiBlZHUuZGVncmVlIHx8ICcnLCBmaWVsZDogZWR1LmZpZWxkIHx8ICcnLCBpbnN0aXR1dGlvbjogZWR1Lmluc3RpdHV0aW9uIHx8ICcnLFxuICAgICAgY2l0eTogbG9jLmNpdHkgfHwgJycsIHN0YXRlOiBsb2Muc3RhdGUgfHwgJycsXG4gICAgICBzdGFydF95ZWFyOiBlZHUuc3RhcnRfeWVhciB8fCAnJywgZW5kX3llYXI6IGVkdS5lbmRfeWVhciB8fCAnJyxcbiAgICB9KSk7XG4gICAgcmV0dXJuIGBcbiAgICAgIDx0cj5cbiAgICAgICAgPHRkPlxuICAgICAgICAgIDxzdHJvbmc+JHtkZWdyZWV9JHtmaWVsZCA/IGAsICR7ZmllbGR9YCA6ICcnfTwvc3Ryb25nPjxicj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiM0NzU1Njk7XCI+JHtpbnN0aXR1dGlvbn08L3NwYW4+XG4gICAgICAgICAgJHtsb2NhdGlvbiA/IGA8c3BhbiBzdHlsZT1cImNvbG9yOiM5NGEzYjg7Zm9udC1zaXplOjAuODVlbTtcIj4gXHUwMEI3ICR7bG9jYXRpb259PC9zcGFuPmAgOiAnJ31cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtjb2xvcjojNDc1NTY5O3doaXRlLXNwYWNlOm5vd3JhcDtcIj4ke3llYXJzIHx8ICdcdTIwMTQnfTwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImFjdGlvbi1idG5zXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgb25jbGljaz1cImVkaXRNYXN0ZXJFZHVjYXRpb24oJHtlZHVKc29ufSwgJHtpZHh9KVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJFZGl0IGVkdWNhdGlvbjogJHtpbnN0aXR1dGlvbn1cIiB0aXRsZT1cIkVkaXRcIj5cdTI3MEZcdUZFMEY8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBvbmNsaWNrPVwiZGVsZXRlTWFzdGVyRWR1Y2F0aW9uKCR7aWR4fSwgJyR7aW5zdGl0dXRpb259JylcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVsZXRlIGVkdWNhdGlvbjogJHtpbnN0aXR1dGlvbn1cIiB0aXRsZT1cIkRlbGV0ZVwiPlx1RDgzRFx1REREMVx1RkUwRjwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5gO1xuICB9KS5qb2luKCcnKTtcbiAgcmV0dXJuIGBcbiAgICA8dGFibGUgY2xhc3M9XCJyZXZpZXctdGFibGVcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGg+RGVncmVlIC8gSW5zdGl0dXRpb248L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjEwMHB4O1wiPlllYXJzPC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo4MHB4O1wiPkFjdGlvbnM8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT4ke3Jvd3N9PC90Ym9keT5cbiAgICA8L3RhYmxlPmA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljYXRpb25zIFx1MjAxNCBDUlVEICsgcmF3IEJpYlRlWCB0b2dnbGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQ3VycmVudCB2aWV3IG1vZGU6ICdjcnVkJyB8ICdyYXcnICovXG5sZXQgX3B1YlZpZXdNb2RlID0gJ2NydWQnO1xubGV0IF9wdWJTb3J0TW9kZSA9ICd5ZWFyX2Rlc2MnO1xubGV0IF9wdWJHcm91cE1vZGUgPSAnbm9uZSc7XG4vKiogVHJ1ZSB3aGVuIHRoZSBlbnRyeSBiZWluZyBlZGl0ZWQgaGFkIGFuIGBlZGl0b3JgIGZpZWxkIGJ1dCBubyBgYXV0aG9yYC4gKi9cbmxldCBfcHViTW9kYWxVc2VzRWRpdG9yRmllbGQgPSBmYWxzZTtcblxuZnVuY3Rpb24gdG9nZ2xlUHVibGljYXRpb25zVmlldygpIHtcbiAgX3B1YlZpZXdNb2RlID0gX3B1YlZpZXdNb2RlID09PSAnY3J1ZCcgPyAncmF3JyA6ICdjcnVkJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItY3J1ZC12aWV3Jykuc3R5bGUuZGlzcGxheSA9IF9wdWJWaWV3TW9kZSA9PT0gJ2NydWQnID8gJycgOiAnbm9uZSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLXJhdy12aWV3Jykuc3R5bGUuZGlzcGxheSAgPSBfcHViVmlld01vZGUgPT09ICdyYXcnICA/ICcnIDogJ25vbmUnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1hZGQtYnRuJykuc3R5bGUuZGlzcGxheSAgID0gX3B1YlZpZXdNb2RlID09PSAnY3J1ZCcgPyAnJyA6ICdub25lJztcbiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItdG9nZ2xlLWJ0bicpO1xuICBpZiAoYnRuKSBidG4udGV4dENvbnRlbnQgPSBfcHViVmlld01vZGUgPT09ICdjcnVkJyA/ICdcdTI3MEZcdUZFMEYgUmF3IEJpYlRlWCcgOiAnXHVEODNEXHVEQ0NCIFN0cnVjdHVyZWQgVmlldyc7XG4gIGlmIChfcHViVmlld01vZGUgPT09ICdyYXcnKSBsb2FkUHVibGljYXRpb25zQmliKCk7XG59XG5cbi8qKiBMb2FkIGJvdGggc3RydWN0dXJlZCBsaXN0IGFuZCByYXcgY29udGVudCBmcm9tIGEgc2luZ2xlIEFQSSBjYWxsLiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9hZFB1YmxpY2F0aW9ucygpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvcHVibGljYXRpb25zJyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIF9yZW5kZXJQdWJsaWNhdGlvbnNDcnVkTGlzdChkYXRhLnB1YmxpY2F0aW9ucyB8fCBbXSk7XG4gICAgICBjb25zdCB0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLXRleHRhcmVhJyk7XG4gICAgICBpZiAodGEpIHRhLnZhbHVlID0gZGF0YS5jb250ZW50IHx8ICcnO1xuICAgICAgX3VwZGF0ZVB1YkNvdW50KGRhdGEuY291bnQgPz8gMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNydWQtY29udGFpbmVyJykuaW5uZXJIVE1MID1cbiAgICAgICAgYDxwIHN0eWxlPVwiY29sb3I6I2VmNDQ0NDtwYWRkaW5nOjEycHggMDtcIj5cdTI2QTBcdUZFMEYgJHtlc2NhcGVIdG1sKGRhdGEuZXJyb3IgfHwgJ0ZhaWxlZCB0byBsb2FkJyl9PC9wPmA7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1jcnVkLWNvbnRhaW5lcicpLmlubmVySFRNTCA9XG4gICAgICBgPHAgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O3BhZGRpbmc6MTJweCAwO1wiPlx1MjZBMFx1RkUwRiBGYWlsZWQgdG8gbG9hZDogJHtlc2NhcGVIdG1sKGVyci5tZXNzYWdlKX08L3A+YDtcbiAgfVxufVxuXG4vKiogUmVsb2FkIG9ubHkgdGhlIHJhdyB0ZXh0YXJlYSBjb250ZW50IChjYWxsZWQgd2hlbiBzd2l0Y2hpbmcgdG8gcmF3IHZpZXcpLiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9hZFB1YmxpY2F0aW9uc0JpYigpIHtcbiAgY29uc3QgdGEgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItdGV4dGFyZWEnKTtcbiAgY29uc3Qgc3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItc3RhdHVzJyk7XG4gIGlmICghdGEpIHJldHVybjtcbiAgdGEuZGlzYWJsZWQgICAgPSB0cnVlO1xuICB0YS5wbGFjZWhvbGRlciA9ICdMb2FkaW5nXHUyMDI2JztcbiAgaWYgKHN0YXR1cykgc3RhdHVzLnRleHRDb250ZW50ID0gJyc7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL3B1YmxpY2F0aW9ucycpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICB0YS52YWx1ZSA9IGRhdGEuY29udGVudCB8fCAnJztcbiAgICAgIF91cGRhdGVQdWJDb3VudChkYXRhLmNvdW50ID8/IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhdHVzKSBzdGF0dXMudGV4dENvbnRlbnQgPSAnXHUyNkEwXHVGRTBGICcgKyAoZGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIGxvYWQnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzdGF0dXMpIHN0YXR1cy50ZXh0Q29udGVudCA9ICdcdTI2QTBcdUZFMEYgRmFpbGVkIHRvIGxvYWQ6ICcgKyBlcnIubWVzc2FnZTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0YS5kaXNhYmxlZCAgICA9IGZhbHNlO1xuICAgIHRhLnBsYWNlaG9sZGVyID0gJyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3VwZGF0ZVB1YkNvdW50KG4pIHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1jb3VudCcpO1xuICBpZiAoZWwpIGVsLnRleHRDb250ZW50ID0gYCR7bn0gcHVibGljYXRpb24ke24gIT09IDEgPyAncycgOiAnJ30gb24gZmlsZWA7XG59XG5cbmZ1bmN0aW9uIF9zZXRQdWJsaWNhdGlvblN0YXR1cyhlbGVtZW50SWQsIHRleHQsIGNvbG9yID0gJyM2YjcyODAnKSB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuICBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGVsLnN0eWxlLmNvbG9yID0gY29sb3I7XG59XG5cbmZ1bmN0aW9uIHNldFB1YmxpY2F0aW9uU29ydE1vZGUobW9kZSkge1xuICBfcHViU29ydE1vZGUgPSBtb2RlIHx8ICd5ZWFyX2Rlc2MnO1xuICB2b2lkIGxvYWRQdWJsaWNhdGlvbnMoKTtcbn1cblxuZnVuY3Rpb24gc2V0UHVibGljYXRpb25Hcm91cE1vZGUobW9kZSkge1xuICBfcHViR3JvdXBNb2RlID0gbW9kZSB8fCAnbm9uZSc7XG4gIHZvaWQgbG9hZFB1YmxpY2F0aW9ucygpO1xufVxuXG5mdW5jdGlvbiBfZ2V0UHVibGljYXRpb25ZZWFyKHB1Yikge1xuICBjb25zdCByYXdZZWFyID0gcHViPy5maWVsZHM/LnllYXIgPz8gcHViPy55ZWFyID8/ICcnO1xuICBjb25zdCBtYXRjaCA9IFN0cmluZyhyYXdZZWFyKS5tYXRjaCgvXFxkezR9Lyk7XG4gIHJldHVybiBtYXRjaCA/IE51bWJlcihtYXRjaFswXSkgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBfY29tcGFyZVB1YmxpY2F0aW9ucyhsZWZ0LCByaWdodCkge1xuICBjb25zdCBsZWZ0WWVhciA9IF9nZXRQdWJsaWNhdGlvblllYXIobGVmdCkgPz8gLUluZmluaXR5O1xuICBjb25zdCByaWdodFllYXIgPSBfZ2V0UHVibGljYXRpb25ZZWFyKHJpZ2h0KSA/PyAtSW5maW5pdHk7XG4gIGNvbnN0IGxlZnRUeXBlID0gU3RyaW5nKGxlZnQ/LnR5cGUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHJpZ2h0VHlwZSA9IFN0cmluZyhyaWdodD8udHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgbGVmdEtleSA9IFN0cmluZyhsZWZ0Py5rZXkgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHJpZ2h0S2V5ID0gU3RyaW5nKHJpZ2h0Py5rZXkgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgc3dpdGNoIChfcHViU29ydE1vZGUpIHtcbiAgICBjYXNlICd5ZWFyX2FzYyc6XG4gICAgICByZXR1cm4gKGxlZnRZZWFyIC0gcmlnaHRZZWFyKSB8fCBsZWZ0VHlwZS5sb2NhbGVDb21wYXJlKHJpZ2h0VHlwZSkgfHwgbGVmdEtleS5sb2NhbGVDb21wYXJlKHJpZ2h0S2V5KTtcbiAgICBjYXNlICd0eXBlX2FzYyc6XG4gICAgICByZXR1cm4gbGVmdFR5cGUubG9jYWxlQ29tcGFyZShyaWdodFR5cGUpIHx8IChyaWdodFllYXIgLSBsZWZ0WWVhcikgfHwgbGVmdEtleS5sb2NhbGVDb21wYXJlKHJpZ2h0S2V5KTtcbiAgICBjYXNlICd0eXBlX2Rlc2MnOlxuICAgICAgcmV0dXJuIHJpZ2h0VHlwZS5sb2NhbGVDb21wYXJlKGxlZnRUeXBlKSB8fCAocmlnaHRZZWFyIC0gbGVmdFllYXIpIHx8IGxlZnRLZXkubG9jYWxlQ29tcGFyZShyaWdodEtleSk7XG4gICAgY2FzZSAneWVhcl9kZXNjJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIChyaWdodFllYXIgLSBsZWZ0WWVhcikgfHwgbGVmdFR5cGUubG9jYWxlQ29tcGFyZShyaWdodFR5cGUpIHx8IGxlZnRLZXkubG9jYWxlQ29tcGFyZShyaWdodEtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2dyb3VwUHVibGljYXRpb25MYWJlbChwdWIpIHtcbiAgaWYgKF9wdWJHcm91cE1vZGUgPT09ICd5ZWFyJykge1xuICAgIHJldHVybiBTdHJpbmcoX2dldFB1YmxpY2F0aW9uWWVhcihwdWIpID8/ICdVbmtub3duIHllYXInKTtcbiAgfVxuICBpZiAoX3B1Ykdyb3VwTW9kZSA9PT0gJ3R5cGUnKSB7XG4gICAgcmV0dXJuIHB1Yj8udHlwZSA/IFN0cmluZyhwdWIudHlwZSkgOiAnVW5rbm93biB0eXBlJztcbiAgfVxuICByZXR1cm4gJ1B1YmxpY2F0aW9ucyc7XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJQdWJsaWNhdGlvbnNDcnVkTGlzdChwdWJzKSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNydWQtY29udGFpbmVyJyk7XG4gIGlmICghY29udGFpbmVyKSByZXR1cm47XG4gIGNvbnN0IGNvbnRyb2xzSHRtbCA9IGBcbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjEycHg7XCI+XG4gICAgICA8bGFiZWwgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7Y29sb3I6IzQ3NTU2OTtmb250LXNpemU6MC45ZW07XCI+XG4gICAgICAgIFNvcnRcbiAgICAgICAgPHNlbGVjdCBpZD1cIm1hc3Rlci1wdWItc29ydC1zZWxlY3RcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOmF1dG87bWluLXdpZHRoOjE1MHB4O1wiIG9uY2hhbmdlPVwic2V0UHVibGljYXRpb25Tb3J0TW9kZSh0aGlzLnZhbHVlKVwiPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ5ZWFyX2Rlc2NcIiAke19wdWJTb3J0TW9kZSA9PT0gJ3llYXJfZGVzYycgPyAnc2VsZWN0ZWQnIDogJyd9PlllYXIgbmV3ZXN0IGZpcnN0PC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInllYXJfYXNjXCIgJHtfcHViU29ydE1vZGUgPT09ICd5ZWFyX2FzYycgPyAnc2VsZWN0ZWQnIDogJyd9PlllYXIgb2xkZXN0IGZpcnN0PC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInR5cGVfYXNjXCIgJHtfcHViU29ydE1vZGUgPT09ICd0eXBlX2FzYycgPyAnc2VsZWN0ZWQnIDogJyd9PlR5cGUgQVx1MjAxM1o8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidHlwZV9kZXNjXCIgJHtfcHViU29ydE1vZGUgPT09ICd0eXBlX2Rlc2MnID8gJ3NlbGVjdGVkJyA6ICcnfT5UeXBlIFpcdTIwMTNBPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxsYWJlbCBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtjb2xvcjojNDc1NTY5O2ZvbnQtc2l6ZTowLjllbTtcIj5cbiAgICAgICAgR3JvdXBcbiAgICAgICAgPHNlbGVjdCBpZD1cIm1hc3Rlci1wdWItZ3JvdXAtc2VsZWN0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDphdXRvO21pbi13aWR0aDoxNDBweDtcIiBvbmNoYW5nZT1cInNldFB1YmxpY2F0aW9uR3JvdXBNb2RlKHRoaXMudmFsdWUpXCI+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vbmVcIiAke19wdWJHcm91cE1vZGUgPT09ICdub25lJyA/ICdzZWxlY3RlZCcgOiAnJ30+Tm8gZ3JvdXBpbmc8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwieWVhclwiICR7X3B1Ykdyb3VwTW9kZSA9PT0gJ3llYXInID8gJ3NlbGVjdGVkJyA6ICcnfT5CeSB5ZWFyPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInR5cGVcIiAke19wdWJHcm91cE1vZGUgPT09ICd0eXBlJyA/ICdzZWxlY3RlZCcgOiAnJ30+QnkgdHlwZTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+YDtcbiAgaWYgKCFwdWJzLmxlbmd0aCkge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBgJHtjb250cm9sc0h0bWx9PHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO3BhZGRpbmc6MTJweCAwO1wiPk5vIHB1YmxpY2F0aW9ucyBvbiBmaWxlLiBDbGljayBcIisgQWRkIFB1YmxpY2F0aW9uXCIgYWJvdmUsIG9yIHN3aXRjaCB0byBSYXcgQmliVGVYIHRvIHBhc3RlL2ltcG9ydCBlbnRyaWVzLjwvcD5gO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzb3J0ZWQgPSBbLi4ucHVic10uc29ydChfY29tcGFyZVB1YmxpY2F0aW9ucyk7XG4gIGNvbnN0IGdyb3VwcyA9IFtdO1xuICBmb3IgKGNvbnN0IHB1YiBvZiBzb3J0ZWQpIHtcbiAgICBjb25zdCBsYWJlbCA9IF9ncm91cFB1YmxpY2F0aW9uTGFiZWwocHViKTtcbiAgICBsZXQgZ3JvdXAgPSBncm91cHMuZmluZCgoZW50cnkpID0+IGVudHJ5LmxhYmVsID09PSBsYWJlbCk7XG4gICAgaWYgKCFncm91cCkge1xuICAgICAgZ3JvdXAgPSB7IGxhYmVsLCBpdGVtczogW10gfTtcbiAgICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgICB9XG4gICAgZ3JvdXAuaXRlbXMucHVzaChwdWIpO1xuICB9XG4gIGNvbnN0IHNlY3Rpb25IdG1sID0gZ3JvdXBzLm1hcCgoeyBsYWJlbCwgaXRlbXMgfSkgPT4ge1xuICAgIGNvbnN0IGhlYWRpbmdIdG1sID0gX3B1Ykdyb3VwTW9kZSA9PT0gJ25vbmUnXG4gICAgICA/ICcnXG4gICAgICA6IGA8ZGl2IHN0eWxlPVwibWFyZ2luOjE2cHggMCA4cHg7Zm9udC1zaXplOjAuOWVtO2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMzM0MTU1O1wiPiR7ZXNjYXBlSHRtbChsYWJlbCl9PC9kaXY+YDtcbiAgICBjb25zdCByb3dzID0gaXRlbXMubWFwKHB1YiA9PiB7XG4gICAgY29uc3Qga2V5ICAgICAgPSBlc2NhcGVIdG1sKHB1Yi5rZXkgfHwgJycpO1xuICAgIGNvbnN0IHR5cGUgICAgID0gZXNjYXBlSHRtbChwdWIudHlwZSB8fCAnJyk7XG4gICAgY29uc3QgY2l0YXRpb24gPSBlc2NhcGVIdG1sKChwdWIuZm9ybWF0dGVkX2NpdGF0aW9uIHx8ICcnKS5zbGljZSgwLCAxNjApKTtcbiAgICBjb25zdCBmdWxsICAgICA9IHB1Yi5mb3JtYXR0ZWRfY2l0YXRpb24gfHwgJyc7XG4gICAgY29uc3QgcHViSnNvbiAgPSBlc2NhcGVIdG1sKEpTT04uc3RyaW5naWZ5KHB1YikpO1xuICAgIHJldHVybiBgXG4gICAgICA8dHI+XG4gICAgICAgIDx0ZD5cbiAgICAgICAgICA8Y29kZSBzdHlsZT1cImZvbnQtc2l6ZTowLjhlbTtjb2xvcjojNDc1NTY5O1wiPiR7a2V5fTwvY29kZT5cbiAgICAgICAgICAke2NpdGF0aW9uID8gYDxicj48c21hbGwgc3R5bGU9XCJjb2xvcjojNmI3MjgwO1wiPiR7Y2l0YXRpb259JHtmdWxsLmxlbmd0aCA+IDE2MCA/ICdcdTIwMjYnIDogJyd9PC9zbWFsbD5gIDogJyd9XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM0NzU1Njk7Zm9udC1zaXplOjAuODVlbTtcIj4ke3R5cGV9PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiYWN0aW9uLWJ0bnNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBvbmNsaWNrPVwiZWRpdE1hc3RlclB1YmxpY2F0aW9uKCR7cHViSnNvbn0pXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkVkaXQgcHVibGljYXRpb246ICR7a2V5fVwiIHRpdGxlPVwiRWRpdFwiPlx1MjcwRlx1RkUwRjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJkZWxldGVNYXN0ZXJQdWJsaWNhdGlvbignJHtrZXl9JylcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVsZXRlIHB1YmxpY2F0aW9uOiAke2tleX1cIiB0aXRsZT1cIkRlbGV0ZVwiPlx1RDgzRFx1REREMVx1RkUwRjwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5gO1xuICAgIH0pLmpvaW4oJycpO1xuICAgIHJldHVybiBgJHtoZWFkaW5nSHRtbH1cbiAgICA8dGFibGUgY2xhc3M9XCJyZXZpZXctdGFibGVcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGg+UHVibGljYXRpb248L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjExMHB4O3RleHQtYWxpZ246Y2VudGVyO1wiPlR5cGU8L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjgwcHg7XCI+QWN0aW9uczwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PiR7cm93c308L3Rib2R5PlxuICAgIDwvdGFibGU+YDtcbiAgfSkuam9pbignJyk7XG4gIGNvbnRhaW5lci5pbm5lckhUTUwgPSBgJHtjb250cm9sc0h0bWx9JHtzZWN0aW9uSHRtbH1gO1xufVxuXG4vKiogVmFsaWRhdGUgQmliVGVYIGluIHRoZSB0ZXh0YXJlYSB3aXRob3V0IHNhdmluZy4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlUHVibGljYXRpb25zQmliKCkge1xuICBjb25zdCB0YSAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi10ZXh0YXJlYScpO1xuICBjb25zdCBzdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1zdGF0dXMnKTtcbiAgaWYgKCF0YSB8fCAhc3RhdHVzKSByZXR1cm47XG4gIGNvbnN0IHRleHQgPSB0YS52YWx1ZTtcbiAgaWYgKCF0ZXh0LnRyaW0oKSkge1xuICAgIHN0YXR1cy50ZXh0Q29udGVudCA9ICdcdTIxMzlcdUZFMEYgRW1wdHkgXHUyMDE0IG5vdGhpbmcgdG8gdmFsaWRhdGUuJztcbiAgICBzdGF0dXMuc3R5bGUuY29sb3IgPSAnIzZiNzI4MCc7XG4gICAgcmV0dXJuO1xuICB9XG4gIHN0YXR1cy50ZXh0Q29udGVudCA9ICdcdUQ4M0RcdUREMEQgVmFsaWRhdGluZ1x1MjAyNic7XG4gIHN0YXR1cy5zdHlsZS5jb2xvciA9ICcjNmI3MjgwJztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvcHVibGljYXRpb25zL3ZhbGlkYXRlJywge1xuICAgICAgbWV0aG9kOiAgJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiAgICBKU09OLnN0cmluZ2lmeSh7IGJpYnRleF90ZXh0OiB0ZXh0IH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjb25zdCBuID0gZGF0YS5jb3VudCA/PyAwO1xuICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gYFx1MjcwNSBWYWxpZCBcdTIwMTQgJHtufSBlbnRyJHtuICE9PSAxID8gJ2llcycgOiAneSd9IGZvdW5kLmA7XG4gICAgICBzdGF0dXMuc3R5bGUuY29sb3IgPSAnIzE1ODAzZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9ICdcdTI3NEMgJyArIChkYXRhLmVycm9yIHx8ICdWYWxpZGF0aW9uIGZhaWxlZCcpO1xuICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJyNkYzI2MjYnO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RhdHVzLnRleHRDb250ZW50ID0gJ1x1Mjc0QyAnICsgZXJyLm1lc3NhZ2U7XG4gICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJyNkYzI2MjYnO1xuICB9XG59XG5cbi8qKiBTYXZlIHJhdyBCaWJUZVggKHZhbGlkYXRlcyBzZXJ2ZXItc2lkZSBiZWZvcmUgd3JpdGluZykuICovXG5hc3luYyBmdW5jdGlvbiBzYXZlUHVibGljYXRpb25zQmliKCkge1xuICBjb25zdCB0YSAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi10ZXh0YXJlYScpO1xuICBjb25zdCBzdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1zdGF0dXMnKTtcbiAgY29uc3QgYnRuICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItc2F2ZS1idG4nKTtcbiAgaWYgKCF0YSkgcmV0dXJuO1xuICBjb25zdCBjb250ZW50ID0gdGEudmFsdWU7XG4gIGlmIChidG4pIHsgYnRuLmRpc2FibGVkID0gdHJ1ZTsgYnRuLnRleHRDb250ZW50ID0gJ1x1MjNGMyBTYXZpbmdcdTIwMjYnOyB9XG4gIGlmIChzdGF0dXMpIHsgc3RhdHVzLnRleHRDb250ZW50ID0gJyc7IHN0YXR1cy5zdHlsZS5jb2xvciA9ICcjNmI3MjgwJzsgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9wdWJsaWNhdGlvbnMnLCB7XG4gICAgICBtZXRob2Q6ICAnUFVUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogICAgSlNPTi5zdHJpbmdpZnkoeyBjb250ZW50IH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjb25zdCBuID0gZGF0YS5jb3VudCA/PyAwO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSBgXHUyNzA1IFNhdmVkIFx1MjAxNCAke259IGVudHIke24gIT09IDEgPyAnaWVzJyA6ICd5J30gcGFyc2VkLmA7XG4gICAgICAgIHN0YXR1cy5zdHlsZS5jb2xvciA9ICcjMTU4MDNkJztcbiAgICAgIH1cbiAgICAgIF91cGRhdGVQdWJDb3VudChuKTtcbiAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ1B1YmxpY2F0aW9ucycsICd1cGRhdGVkJyk7XG4gICAgICAvLyBSZWZyZXNoIENSVUQgbGlzdCB0byBzdGF5IGluIHN5bmNcbiAgICAgIGF3YWl0IGxvYWRQdWJsaWNhdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAnXHUyNzRDICcgKyAoZGF0YS5lcnJvciB8fCAnU2F2ZSBmYWlsZWQnKTtcbiAgICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJyNkYzI2MjYnO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gJ1x1Mjc0QyAnICsgZXJyLm1lc3NhZ2U7XG4gICAgICBzdGF0dXMuc3R5bGUuY29sb3IgPSAnI2RjMjYyNic7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGlmIChidG4pIHsgYnRuLmRpc2FibGVkID0gZmFsc2U7IGJ0bi50ZXh0Q29udGVudCA9ICdcdUQ4M0RcdURDQkUgU2F2ZSc7IH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaG93SW1wb3J0UHVibGljYXRpb25zTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWltcG9ydC10ZXh0YXJlYScpLnZhbHVlID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWltcG9ydC1vdmVyd3JpdGUnKS5jaGVja2VkID0gZmFsc2U7XG4gIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1pbXBvcnQtc3RhdHVzJywgJycpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1pbXBvcnQtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgc2V0SW5pdGlhbEZvY3VzKCdtYXN0ZXItcHViLWltcG9ydC1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbWFzdGVyLXB1Yi1pbXBvcnQtbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBjbG9zZUltcG9ydFB1YmxpY2F0aW9uc01vZGFsKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1pbXBvcnQtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQdWJsaWNhdGlvbnNCaWIoKSB7XG4gIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItaW1wb3J0LXRleHRhcmVhJyk7XG4gIGNvbnN0IG92ZXJ3cml0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWltcG9ydC1vdmVyd3JpdGUnKTtcbiAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItaW1wb3J0LXN1Ym1pdC1idG4nKTtcbiAgaWYgKCF0ZXh0YXJlYSkgcmV0dXJuO1xuICBjb25zdCBiaWJ0ZXhUZXh0ID0gdGV4dGFyZWEudmFsdWUudHJpbSgpO1xuICBpZiAoIWJpYnRleFRleHQpIHtcbiAgICBfc2V0UHVibGljYXRpb25TdGF0dXMoJ21hc3Rlci1wdWItaW1wb3J0LXN0YXR1cycsICdcdTI2QTBcdUZFMEYgUGFzdGUgQmliVGVYIGVudHJpZXMgdG8gaW1wb3J0LicsICcjZGMyNjI2Jyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChidXR0b24pIHtcbiAgICBidXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdcdTIzRjMgSW1wb3J0aW5nXHUyMDI2JztcbiAgfVxuICBfc2V0UHVibGljYXRpb25TdGF0dXMoJ21hc3Rlci1wdWItaW1wb3J0LXN0YXR1cycsICdJbXBvcnRpbmcgQmliVGVYXHUyMDI2Jyk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvcHVibGljYXRpb25zL2ltcG9ydCcsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGJpYnRleF90ZXh0OiBiaWJ0ZXhUZXh0LFxuICAgICAgICBvdmVyd3JpdGU6IEJvb2xlYW4ob3ZlcndyaXRlPy5jaGVja2VkKSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IFtcbiAgICAgICAgYCR7ZGF0YS5hZGRlZCB8fCAwfSBhZGRlZGAsXG4gICAgICAgIGAke2RhdGEudXBkYXRlZCB8fCAwfSB1cGRhdGVkYCxcbiAgICAgICAgYCR7ZGF0YS5za2lwcGVkIHx8IDB9IHNraXBwZWRgLFxuICAgICAgXTtcbiAgICAgIGlmIChkYXRhLmludmFsaWQpIHBhcnRzLnB1c2goYCR7ZGF0YS5pbnZhbGlkfSByZWplY3RlZCAobWlzc2luZyByZXF1aXJlZCBmaWVsZHMpYCk7XG4gICAgICBjb25zdCBza2lwcGVkRGV0YWlsID0gKGRhdGEuc2tpcHBlZF9rZXlzPy5sZW5ndGgpXG4gICAgICAgID8gYFxcblxcblNraXBwZWQgKGFscmVhZHkgZXhpc3QgXHUyMDE0IGVuYWJsZSBcIk92ZXJ3cml0ZVwiIHRvIHVwZGF0ZSk6XFxuXHUyMDIyICR7ZGF0YS5za2lwcGVkX2tleXMuam9pbignXFxuXHUyMDIyICcpfWBcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IGludmFsaWREZXRhaWwgPSAoZGF0YS5pbnZhbGlkX2tleXM/Lmxlbmd0aClcbiAgICAgICAgPyBgXFxuXFxuUmVqZWN0ZWQgKG1pc3NpbmcgdGl0bGUsIHllYXIsIG9yIGF1dGhvcik6XFxuXHUyMDIyICR7ZGF0YS5pbnZhbGlkX2tleXMuam9pbignXFxuXHUyMDIyICcpfWBcbiAgICAgICAgOiAnJztcbiAgICAgIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1pbXBvcnQtc3RhdHVzJywgYFx1MjcwNSBJbXBvcnRlZDogJHtwYXJ0cy5qb2luKCcsICcpfS5gLCAnIzE1ODAzZCcpO1xuICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnUHVibGljYXRpb25zJywgJ2ltcG9ydGVkJyk7XG4gICAgICBhd2FpdCBsb2FkUHVibGljYXRpb25zKCk7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IEltcG9ydGVkJywgYEltcG9ydGVkIEJpYlRlWCBlbnRyaWVzOiAke3BhcnRzLmpvaW4oJywgJyl9LiR7c2tpcHBlZERldGFpbH0ke2ludmFsaWREZXRhaWx9YCk7XG4gICAgICBjbG9zZUltcG9ydFB1YmxpY2F0aW9uc01vZGFsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1pbXBvcnQtc3RhdHVzJywgYFx1Mjc0QyAke2RhdGEuZXJyb3IgfHwgJ0ltcG9ydCBmYWlsZWQnfWAsICcjZGMyNjI2Jyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfc2V0UHVibGljYXRpb25TdGF0dXMoJ21hc3Rlci1wdWItaW1wb3J0LXN0YXR1cycsIGBcdTI3NEMgJHtlcnIubWVzc2FnZX1gLCAnI2RjMjYyNicpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gJ0ltcG9ydCc7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNob3dDb252ZXJ0UHVibGljYXRpb25zTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNvbnZlcnQtaW5wdXQnKS52YWx1ZSA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1jb252ZXJ0LW91dHB1dCcpLnZhbHVlID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNvbnZlcnQtb3ZlcndyaXRlJykuY2hlY2tlZCA9IGZhbHNlO1xuICBfc2V0UHVibGljYXRpb25TdGF0dXMoJ21hc3Rlci1wdWItY29udmVydC1zdGF0dXMnLCAnJyk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNvbnZlcnQtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgc2V0SW5pdGlhbEZvY3VzKCdtYXN0ZXItcHViLWNvbnZlcnQtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1wdWItY29udmVydC1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlQ29udmVydFB1YmxpY2F0aW9uc01vZGFsKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1jb252ZXJ0LW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXN0b3JlRm9jdXMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29udmVydFB1YmxpY2F0aW9uVGV4dCgpIHtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1jb252ZXJ0LWlucHV0Jyk7XG4gIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNvbnZlcnQtb3V0cHV0Jyk7XG4gIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNvbnZlcnQtc3VibWl0LWJ0bicpO1xuICBpZiAoIWlucHV0IHx8ICFvdXRwdXQpIHJldHVybjtcbiAgY29uc3QgdGV4dCA9IGlucHV0LnZhbHVlLnRyaW0oKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgX3NldFB1YmxpY2F0aW9uU3RhdHVzKCdtYXN0ZXItcHViLWNvbnZlcnQtc3RhdHVzJywgJ1x1MjZBMFx1RkUwRiBQYXN0ZSBjaXRhdGlvbiB0ZXh0IHRvIGNvbnZlcnQuJywgJyNkYzI2MjYnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGJ1dHRvbikge1xuICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgYnV0dG9uLnRleHRDb250ZW50ID0gJ1x1MjNGMyBHZW5lcmF0aW5nXHUyMDI2JztcbiAgfVxuICBfc2V0UHVibGljYXRpb25TdGF0dXMoJ21hc3Rlci1wdWItY29udmVydC1zdGF0dXMnLCAnR2VuZXJhdGluZyBCaWJUZVggcHJldmlld1x1MjAyNicpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL3B1YmxpY2F0aW9ucy9jb252ZXJ0Jywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdGV4dCB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgb3V0cHV0LnZhbHVlID0gZGF0YS5iaWJ0ZXggfHwgJyc7XG4gICAgICBfc2V0UHVibGljYXRpb25TdGF0dXMoJ21hc3Rlci1wdWItY29udmVydC1zdGF0dXMnLCAnXHUyNzA1IFJldmlldyB0aGUgZ2VuZXJhdGVkIEJpYlRlWCwgdGhlbiBpbXBvcnQgaXQgaWYgaXQgbG9va3MgY29ycmVjdC4nLCAnIzE1ODAzZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfc2V0UHVibGljYXRpb25TdGF0dXMoJ21hc3Rlci1wdWItY29udmVydC1zdGF0dXMnLCBgXHUyNzRDICR7ZGF0YS5lcnJvciB8fCAnQ29udmVyc2lvbiBmYWlsZWQnfWAsICcjZGMyNjI2Jyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfc2V0UHVibGljYXRpb25TdGF0dXMoJ21hc3Rlci1wdWItY29udmVydC1zdGF0dXMnLCBgXHUyNzRDICR7ZXJyLm1lc3NhZ2V9YCwgJyNkYzI2MjYnKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoYnV0dG9uKSB7XG4gICAgICBidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdHZW5lcmF0ZSBCaWJUZVgnO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpbXBvcnRDb252ZXJ0ZWRQdWJsaWNhdGlvblRleHQoKSB7XG4gIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNvbnZlcnQtb3V0cHV0Jyk7XG4gIGNvbnN0IG92ZXJ3cml0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNvbnZlcnQtb3ZlcndyaXRlJyk7XG4gIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNvbnZlcnQtaW1wb3J0LWJ0bicpO1xuICBpZiAoIW91dHB1dCkgcmV0dXJuO1xuICBjb25zdCBiaWJ0ZXhUZXh0ID0gb3V0cHV0LnZhbHVlLnRyaW0oKTtcbiAgaWYgKCFiaWJ0ZXhUZXh0KSB7XG4gICAgX3NldFB1YmxpY2F0aW9uU3RhdHVzKCdtYXN0ZXItcHViLWNvbnZlcnQtc3RhdHVzJywgJ1x1MjZBMFx1RkUwRiBHZW5lcmF0ZSBvciBlZGl0IEJpYlRlWCBiZWZvcmUgaW1wb3J0aW5nLicsICcjZGMyNjI2Jyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChidXR0b24pIHtcbiAgICBidXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdcdTIzRjMgSW1wb3J0aW5nXHUyMDI2JztcbiAgfVxuICBfc2V0UHVibGljYXRpb25TdGF0dXMoJ21hc3Rlci1wdWItY29udmVydC1zdGF0dXMnLCAnSW1wb3J0aW5nIHJldmlld2VkIEJpYlRlWFx1MjAyNicpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL3B1YmxpY2F0aW9ucy9pbXBvcnQnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBiaWJ0ZXhfdGV4dDogYmlidGV4VGV4dCxcbiAgICAgICAgb3ZlcndyaXRlOiBCb29sZWFuKG92ZXJ3cml0ZT8uY2hlY2tlZCksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAgIGAke2RhdGEuYWRkZWQgfHwgMH0gYWRkZWRgLFxuICAgICAgICBgJHtkYXRhLnVwZGF0ZWQgfHwgMH0gdXBkYXRlZGAsXG4gICAgICAgIGAke2RhdGEuc2tpcHBlZCB8fCAwfSBza2lwcGVkYCxcbiAgICAgIF07XG4gICAgICBpZiAoZGF0YS5pbnZhbGlkKSBwYXJ0cy5wdXNoKGAke2RhdGEuaW52YWxpZH0gcmVqZWN0ZWQgKG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzKWApO1xuICAgICAgY29uc3Qgc2tpcHBlZERldGFpbCA9IChkYXRhLnNraXBwZWRfa2V5cz8ubGVuZ3RoKVxuICAgICAgICA/IGBcXG5cXG5Ta2lwcGVkIChhbHJlYWR5IGV4aXN0IFx1MjAxNCBlbmFibGUgXCJPdmVyd3JpdGVcIiB0byB1cGRhdGUpOlxcblx1MjAyMiAke2RhdGEuc2tpcHBlZF9rZXlzLmpvaW4oJ1xcblx1MjAyMiAnKX1gXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCBpbnZhbGlkRGV0YWlsID0gKGRhdGEuaW52YWxpZF9rZXlzPy5sZW5ndGgpXG4gICAgICAgID8gYFxcblxcblJlamVjdGVkIChtaXNzaW5nIHRpdGxlLCB5ZWFyLCBvciBhdXRob3IpOlxcblx1MjAyMiAke2RhdGEuaW52YWxpZF9rZXlzLmpvaW4oJ1xcblx1MjAyMiAnKX1gXG4gICAgICAgIDogJyc7XG4gICAgICBfc2V0UHVibGljYXRpb25TdGF0dXMoJ21hc3Rlci1wdWItY29udmVydC1zdGF0dXMnLCBgXHUyNzA1IEltcG9ydGVkIHByZXZpZXc6ICR7cGFydHMuam9pbignLCAnKX0uYCwgJyMxNTgwM2QnKTtcbiAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ1B1YmxpY2F0aW9ucycsICdpbXBvcnRlZCcpO1xuICAgICAgYXdhaXQgbG9hZFB1YmxpY2F0aW9ucygpO1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBJbXBvcnRlZCcsIGBJbXBvcnRlZCBnZW5lcmF0ZWQgQmliVGVYOiAke3BhcnRzLmpvaW4oJywgJyl9LiR7c2tpcHBlZERldGFpbH0ke2ludmFsaWREZXRhaWx9YCk7XG4gICAgICBjbG9zZUNvbnZlcnRQdWJsaWNhdGlvbnNNb2RhbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfc2V0UHVibGljYXRpb25TdGF0dXMoJ21hc3Rlci1wdWItY29udmVydC1zdGF0dXMnLCBgXHUyNzRDICR7ZGF0YS5lcnJvciB8fCAnSW1wb3J0IGZhaWxlZCd9YCwgJyNkYzI2MjYnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1jb252ZXJ0LXN0YXR1cycsIGBcdTI3NEMgJHtlcnIubWVzc2FnZX1gLCAnI2RjMjYyNicpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gJ0ltcG9ydCBQcmV2aWV3JztcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLSBQdWJsaWNhdGlvbiBhZGQvZWRpdCBtb2RhbCAtLS0tXG5cbmZ1bmN0aW9uIHNob3dBZGRQdWJsaWNhdGlvbk1vZGFsKCkge1xuICBfcHViTW9kYWxVc2VzRWRpdG9yRmllbGQgPSBmYWxzZTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1rZXknKS52YWx1ZSAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLXR5cGUnKS52YWx1ZSAgID0gJ2FydGljbGUnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWF1dGhvcicpLnZhbHVlID0gJyc7XG4gIGNvbnN0IGF1dGhvckxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1hdXRob3ItbGFiZWwnKTtcbiAgaWYgKGF1dGhvckxhYmVsKSBhdXRob3JMYWJlbC50ZXh0Q29udGVudCA9ICdBdXRob3IocyknO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLXRpdGxlJykudmFsdWUgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwteWVhcicpLnZhbHVlICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1qb3VybmFsJykudmFsdWUgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1kb2knKS52YWx1ZSAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWV4dHJhJykudmFsdWUgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwta2V5JykuZGlzYWJsZWQgPSBmYWxzZTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC10aXRsZS1oZWFkaW5nJykudGV4dENvbnRlbnQgPSAnQWRkIFB1YmxpY2F0aW9uJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgc2V0SW5pdGlhbEZvY3VzKCdtYXN0ZXItcHViLW1vZGFsLW92ZXJsYXknKTtcbiAgdHJhcEZvY3VzKCdtYXN0ZXItcHViLW1vZGFsLW92ZXJsYXknKTtcbn1cblxuZnVuY3Rpb24gZWRpdE1hc3RlclB1YmxpY2F0aW9uKHB1Yikge1xuICBjb25zdCBmaWVsZHMgPSBwdWIuZmllbGRzIHx8IHt9O1xuICAvLyBUcmFjayB3aGV0aGVyIHRoaXMgZW50cnkgdXNlcyBgZWRpdG9yYCBzbyB3ZSBwcmVzZXJ2ZSBpdCBvbiBzYXZlXG4gIF9wdWJNb2RhbFVzZXNFZGl0b3JGaWVsZCA9ICFmaWVsZHMuYXV0aG9yICYmICEhZmllbGRzLmVkaXRvcjtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1rZXknKS52YWx1ZSAgICAgPSBwdWIua2V5IHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLXR5cGUnKS52YWx1ZSAgICA9IHB1Yi50eXBlIHx8ICdhcnRpY2xlJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1hdXRob3InKS52YWx1ZSAgPSBmaWVsZHMuYXV0aG9yIHx8IGZpZWxkcy5lZGl0b3IgfHwgJyc7XG4gIC8vIFVwZGF0ZSB0aGUgQXV0aG9yL0VkaXRvciBsYWJlbCBzbyB0aGUgdXNlciBrbm93cyB3aGljaCBmaWVsZCBpcyBiZWluZyBlZGl0ZWRcbiAgY29uc3QgYXV0aG9yTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWF1dGhvci1sYWJlbCcpO1xuICBpZiAoYXV0aG9yTGFiZWwpIGF1dGhvckxhYmVsLnRleHRDb250ZW50ID0gX3B1Yk1vZGFsVXNlc0VkaXRvckZpZWxkID8gJ0VkaXRvcihzKScgOiAnQXV0aG9yKHMpJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC10aXRsZScpLnZhbHVlICAgPSBmaWVsZHMudGl0bGUgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwteWVhcicpLnZhbHVlICAgID0gZmllbGRzLnllYXIgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwtam91cm5hbCcpLnZhbHVlID0gZmllbGRzLmpvdXJuYWwgfHwgZmllbGRzLmJvb2t0aXRsZSB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1kb2knKS52YWx1ZSAgICAgPSBmaWVsZHMuZG9pIHx8ICcnO1xuICAvLyBFeHRyYTogcmVtYWluaW5nIG5vbi1zdGFuZGFyZCBmaWVsZHMgYXMga2V5PXZhbHVlIGxpbmVzXG4gIGNvbnN0IGtub3duID0gbmV3IFNldChbJ2F1dGhvcicsJ2VkaXRvcicsJ3RpdGxlJywneWVhcicsJ2pvdXJuYWwnLCdib29rdGl0bGUnLCdkb2knXSk7XG4gIGNvbnN0IGV4dHJhID0gT2JqZWN0LmVudHJpZXMoZmllbGRzKVxuICAgIC5maWx0ZXIoKFtrXSkgPT4gIWtub3duLmhhcyhrKSlcbiAgICAubWFwKChbaywgdl0pID0+IGAke2t9PSR7dn1gKVxuICAgIC5qb2luKCdcXG4nKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1leHRyYScpLnZhbHVlICAgPSBleHRyYTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1rZXknKS5kaXNhYmxlZCAgPSB0cnVlOyAgLy8ga2V5IGlzIGltbXV0YWJsZSBvbiBlZGl0XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwtdGl0bGUtaGVhZGluZycpLnRleHRDb250ZW50ID0gJ0VkaXQgUHVibGljYXRpb24nO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1wdWItbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1wdWItbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBjbG9zZVB1YmxpY2F0aW9uTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXN0b3JlRm9jdXMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZU1hc3RlclB1YmxpY2F0aW9uKCkge1xuICBjb25zdCBrZXlFbCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWtleScpO1xuICBjb25zdCBrZXkgICAgPSBrZXlFbC52YWx1ZS50cmltKCk7XG4gIGNvbnN0IGFjdGlvbiA9IGtleUVsLmRpc2FibGVkID8gJ3VwZGF0ZScgOiAnYWRkJztcbiAgaWYgKCFrZXkpIHsgc2hvd0FsZXJ0TW9kYWwoJ1x1MjZBMFx1RkUwRiBWYWxpZGF0aW9uJywgJ0NpdGUga2V5IGlzIHJlcXVpcmVkLicpOyByZXR1cm47IH1cbiAgY29uc3QgdHlwZSAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC10eXBlJykudmFsdWUudHJpbSgpIHx8ICdhcnRpY2xlJztcbiAgY29uc3QgYXV0aG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1hdXRob3InKS52YWx1ZS50cmltKCk7XG4gIGNvbnN0IHRpdGxlICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwtdGl0bGUnKS52YWx1ZS50cmltKCk7XG4gIGNvbnN0IHllYXIgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwteWVhcicpLnZhbHVlLnRyaW0oKTtcbiAgaWYgKCF0aXRsZSkgIHsgc2hvd0FsZXJ0TW9kYWwoJ1x1MjZBMFx1RkUwRiBWYWxpZGF0aW9uJywgJ1RpdGxlIGlzIHJlcXVpcmVkLicpOyByZXR1cm47IH1cbiAgaWYgKCF5ZWFyKSAgIHsgc2hvd0FsZXJ0TW9kYWwoJ1x1MjZBMFx1RkUwRiBWYWxpZGF0aW9uJywgJ1llYXIgaXMgcmVxdWlyZWQuJyk7IHJldHVybjsgfVxuICBpZiAoIWF1dGhvcikgeyBzaG93QWxlcnRNb2RhbCgnXHUyNkEwXHVGRTBGIFZhbGlkYXRpb24nLCAnQXV0aG9yIG9yIGVkaXRvciBpcyByZXF1aXJlZC4nKTsgcmV0dXJuOyB9XG4gIC8vIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBmaWVsZCBuYW1lOiBlZGl0b3IgZW50cmllcyBtdXN0IG5vdCBiZSBzYXZlZCBhcyBhdXRob3JcbiAgY29uc3QgZmllbGRzID0gX3B1Yk1vZGFsVXNlc0VkaXRvckZpZWxkID8geyBlZGl0b3I6IGF1dGhvciwgdGl0bGUsIHllYXIgfSA6IHsgYXV0aG9yLCB0aXRsZSwgeWVhciB9O1xuICBjb25zdCBqb3VybmFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1qb3VybmFsJykudmFsdWUudHJpbSgpO1xuICBpZiAoam91cm5hbCkge1xuICAgIGZpZWxkc1t0eXBlID09PSAnaW5wcm9jZWVkaW5ncycgPyAnYm9va3RpdGxlJyA6ICdqb3VybmFsJ10gPSBqb3VybmFsO1xuICB9XG4gIGNvbnN0IGRvaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwtZG9pJykudmFsdWUudHJpbSgpO1xuICBpZiAoZG9pKSBmaWVsZHMuZG9pID0gZG9pO1xuICAvLyBQYXJzZSBleHRyYSBmaWVsZHMgKGtleT12YWx1ZSBwZXIgbGluZSlcbiAgY29uc3QgZXh0cmEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWV4dHJhJykudmFsdWU7XG4gIGZvciAoY29uc3QgbGluZSBvZiBleHRyYS5zcGxpdCgnXFxuJykpIHtcbiAgICBjb25zdCBlcSA9IGxpbmUuaW5kZXhPZignPScpO1xuICAgIGlmIChlcSA+IDApIHtcbiAgICAgIGNvbnN0IGsgPSBsaW5lLnNsaWNlKDAsIGVxKS50cmltKCk7XG4gICAgICBjb25zdCB2ID0gbGluZS5zbGljZShlcSArIDEpLnRyaW0oKTtcbiAgICAgIGlmIChrICYmIHYpIGZpZWxkc1trXSA9IHY7XG4gICAgfVxuICB9XG4gIGNvbnN0IGJvZHkgPSB7IGFjdGlvbiwga2V5LCB0eXBlLCBmaWVsZHMgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvcHVibGljYXRpb24nLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjbG9zZVB1YmxpY2F0aW9uTW9kYWwoKTtcbiAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ1B1YmxpY2F0aW9ucycsIGRhdGEuYWN0aW9uIHx8ICd1cGRhdGVkJyk7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IFNhdmVkJywgYFB1YmxpY2F0aW9uIFwiJHtrZXl9XCIgJHtkYXRhLmFjdGlvbn0uYCk7XG4gICAgICBhd2FpdCBsb2FkUHVibGljYXRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdTYXZlIGZhaWxlZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIHNhdmUgcHVibGljYXRpb24nKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVNYXN0ZXJQdWJsaWNhdGlvbihrZXkpIHtcbiAgc2hvd0NvbmZpcm1Nb2RhbChcbiAgICAnXHVEODNEXHVEREQxXHVGRTBGIERlbGV0ZSBQdWJsaWNhdGlvbicsXG4gICAgYERlbGV0ZSBcIiR7a2V5fVwiPyBUaGlzIGNhbm5vdCBiZSB1bmRvbmUuYCxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvcHVibGljYXRpb24nLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiAnZGVsZXRlJywga2V5IH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnUHVibGljYXRpb25zJywgJ2RlbGV0ZWQnKTtcbiAgICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IERlbGV0ZWQnLCBgUHVibGljYXRpb24gXCIke2tleX1cIiByZW1vdmVkLmApO1xuICAgICAgICAgIGF3YWl0IGxvYWRQdWJsaWNhdGlvbnMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGF0YS5lcnJvciB8fCAnRGVsZXRlIGZhaWxlZCcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIGRlbGV0ZSBwdWJsaWNhdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuZnVuY3Rpb24gX3JlbmRlckF3YXJkc0xpc3QoYXdhcmRzKSB7XG4gIGlmICghYXdhcmRzLmxlbmd0aCkge1xuICAgIHJldHVybiAnPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO3BhZGRpbmc6MTJweCAwO1wiPk5vIGF3YXJkcyBvbiBmaWxlLiBDbGljayBcIisgQWRkIEF3YXJkXCIgYWJvdmUuPC9wPic7XG4gIH1cbiAgY29uc3Qgcm93cyA9IGF3YXJkcy5tYXAoKGF3YXJkLCBpZHgpID0+IHtcbiAgICBjb25zdCB0aXRsZSA9IGVzY2FwZUh0bWwoYXdhcmQudGl0bGUgfHwgJycpO1xuICAgIGNvbnN0IHllYXIgID0gYXdhcmQueWVhciA/IFN0cmluZyhhd2FyZC55ZWFyKSA6ICdcdTIwMTQnO1xuICAgIGNvbnN0IGRlc2MgID0gZXNjYXBlSHRtbCgoYXdhcmQuZGVzY3JpcHRpb24gfHwgJycpLnNsaWNlKDAsIDEwMCkpO1xuICAgIGNvbnN0IGF3YXJkSnNvbiA9IGVzY2FwZUh0bWwoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgdGl0bGU6IGF3YXJkLnRpdGxlIHx8ICcnLCB5ZWFyOiBhd2FyZC55ZWFyIHx8ICcnLFxuICAgICAgZGVzY3JpcHRpb246IGF3YXJkLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgcmVsZXZhbnRfZm9yOiAoYXdhcmQucmVsZXZhbnRfZm9yIHx8IFtdKS5qb2luKCcsICcpLFxuICAgIH0pKTtcbiAgICByZXR1cm4gYFxuICAgICAgPHRyPlxuICAgICAgICA8dGQ+XG4gICAgICAgICAgPHN0cm9uZz4ke3RpdGxlfTwvc3Ryb25nPlxuICAgICAgICAgICR7ZGVzYyA/IGA8YnI+PHNtYWxsIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtcIj4ke2Rlc2N9JHsoYXdhcmQuZGVzY3JpcHRpb258fCcnKS5sZW5ndGggPiAxMDAgPyAnXHUyMDI2JyA6ICcnfTwvc21hbGw+YCA6ICcnfVxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojNDc1NTY5O1wiPiR7eWVhcn08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb24tYnRuc1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJlZGl0TWFzdGVyQXdhcmQoJHthd2FyZEpzb259LCAke2lkeH0pXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkVkaXQgYXdhcmQ6ICR7dGl0bGV9XCIgdGl0bGU9XCJFZGl0XCI+XHUyNzBGXHVGRTBGPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgb25jbGljaz1cImRlbGV0ZU1hc3RlckF3YXJkKCR7aWR4fSwgJyR7dGl0bGV9JylcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVsZXRlIGF3YXJkOiAke3RpdGxlfVwiIHRpdGxlPVwiRGVsZXRlXCI+XHVEODNEXHVEREQxXHVGRTBGPC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPmA7XG4gIH0pLmpvaW4oJycpO1xuICByZXR1cm4gYFxuICAgIDx0YWJsZSBjbGFzcz1cInJldmlldy10YWJsZVwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aD5Bd2FyZDwvdGg+XG4gICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6NzBweDt0ZXh0LWFsaWduOmNlbnRlcjtcIj5ZZWFyPC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo4MHB4O1wiPkFjdGlvbnM8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT4ke3Jvd3N9PC90Ym9keT5cbiAgICA8L3RhYmxlPmA7XG59XG5cblxuZnVuY3Rpb24gX3JlbmRlckNlcnRpZmljYXRpb25zTGlzdChjZXJ0cykge1xuICBpZiAoIWNlcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiAnPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO3BhZGRpbmc6MTJweCAwO1wiPk5vIGNlcnRpZmljYXRpb25zIG9uIGZpbGUuIENsaWNrIFwiKyBBZGQgQ2VydGlmaWNhdGlvblwiIGFib3ZlLjwvcD4nO1xuICB9XG4gIGNvbnN0IHJvd3MgPSBjZXJ0cy5tYXAoKGNlcnQsIGlkeCkgPT4ge1xuICAgIGNvbnN0IG5hbWUgICA9IGVzY2FwZUh0bWwoY2VydC5uYW1lIHx8ICcnKTtcbiAgICBjb25zdCBpc3N1ZXIgPSBlc2NhcGVIdG1sKGNlcnQuaXNzdWVyIHx8ICdcdTIwMTQnKTtcbiAgICBjb25zdCB5ZWFyICAgPSBjZXJ0LnllYXIgPyBTdHJpbmcoY2VydC55ZWFyKSA6ICdcdTIwMTQnO1xuICAgIGNvbnN0IGNlcnRKc29uID0gZXNjYXBlSHRtbChKU09OLnN0cmluZ2lmeSh7XG4gICAgICBuYW1lOiBjZXJ0Lm5hbWUgfHwgJycsIGlzc3VlcjogY2VydC5pc3N1ZXIgfHwgJycsIHllYXI6IGNlcnQueWVhciB8fCAnJyxcbiAgICB9KSk7XG4gICAgcmV0dXJuIGBcbiAgICAgIDx0cj5cbiAgICAgICAgPHRkPjxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPjwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cImNvbG9yOiM0NzU1Njk7XCI+JHtpc3N1ZXJ9PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzQ3NTU2OTtcIj4ke3llYXJ9PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiYWN0aW9uLWJ0bnNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBvbmNsaWNrPVwiZWRpdE1hc3RlckNlcnRpZmljYXRpb24oJHtjZXJ0SnNvbn0sICR7aWR4fSlcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRWRpdCBjZXJ0aWZpY2F0aW9uOiAke25hbWV9XCIgdGl0bGU9XCJFZGl0XCI+XHUyNzBGXHVGRTBGPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgb25jbGljaz1cImRlbGV0ZU1hc3RlckNlcnRpZmljYXRpb24oJHtpZHh9LCAnJHtuYW1lfScpXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRlbGV0ZSBjZXJ0aWZpY2F0aW9uOiAke25hbWV9XCIgdGl0bGU9XCJEZWxldGVcIj5cdUQ4M0RcdURERDFcdUZFMEY8L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+YDtcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiBgXG4gICAgPHRhYmxlIGNsYXNzPVwicmV2aWV3LXRhYmxlXCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoPk5hbWU8L3RoPlxuICAgICAgICAgIDx0aD5Jc3N1ZXI8L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjcwcHg7dGV4dC1hbGlnbjpjZW50ZXI7XCI+WWVhcjwvdGg+XG4gICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6ODBweDtcIj5BY3Rpb25zPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+JHtyb3dzfTwvdGJvZHk+XG4gICAgPC90YWJsZT5gO1xufVxuXG5cbmZ1bmN0aW9uIF9yZW5kZXJNYXN0ZXJBY2hpZXZlbWVudHNUYWJsZShhY2hpZXZlbWVudHMpIHtcbiAgaWYgKCFhY2hpZXZlbWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICc8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7cGFkZGluZzoxMnB4IDA7XCI+Tm8gc2VsZWN0ZWQgYWNoaWV2ZW1lbnRzIHlldC4gVXNlIHRoZSBIYXJ2ZXN0IGZlYXR1cmUgdG8gYWRkIGFjaGlldmVtZW50cyBmcm9tIGEgY29tcGxldGVkIHNlc3Npb24sIG9yIGNsaWNrIFwiKyBBZGQgQWNoaWV2ZW1lbnRcIiBhYm92ZS48L3A+JztcbiAgfVxuICBsZXQgcm93cyA9IGFjaGlldmVtZW50cy5tYXAoYWNoID0+IHtcbiAgICBjb25zdCBpZCAgICAgID0gZXNjYXBlSHRtbChhY2guaWQgfHwgJycpO1xuICAgIGNvbnN0IHRpdGxlICAgPSBlc2NhcGVIdG1sKGFjaC50aXRsZSB8fCAnJyk7XG4gICAgY29uc3QgZGVzYyAgICA9IGVzY2FwZUh0bWwoKGFjaC5kZXNjcmlwdGlvbiB8fCAnJykuc2xpY2UoMCwgMTAwKSk7XG4gICAgY29uc3QgaW1wICAgICA9IGFjaC5pbXBvcnRhbmNlID8/ICdcdTIwMTQnO1xuICAgIGNvbnN0IHJlbEZvciAgPSBlc2NhcGVIdG1sKChhY2gucmVsZXZhbnRfZm9yIHx8IFtdKS5qb2luKCcsICcpKTtcbiAgICByZXR1cm4gYFxuICAgICAgPHRyPlxuICAgICAgICA8dGQ+PHN0cm9uZz4ke3RpdGxlfTwvc3Ryb25nPiR7ZGVzYyA/IGA8YnI+PHNtYWxsIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtcIj4ke2Rlc2N9JHsoYWNoLmRlc2NyaXB0aW9ufHwnJykubGVuZ3RoID4gMTAwID8gJ1x1MjAyNicgOiAnJ308L3NtYWxsPmAgOiAnJ308L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4ke2ltcH08L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOiM0NzU1Njk7XCI+JHtyZWxGb3IgfHwgJ1x1MjAxNCd9PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiYWN0aW9uLWJ0bnNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBvbmNsaWNrPVwiZWRpdE1hc3RlckFjaGlldmVtZW50KCR7ZXNjYXBlSHRtbChKU09OLnN0cmluZ2lmeSh7aWQ6IGFjaC5pZHx8JycsIHRpdGxlOiBhY2gudGl0bGV8fCcnLCBkZXNjcmlwdGlvbjogYWNoLmRlc2NyaXB0aW9ufHwnJywgcmVsZXZhbnRfZm9yOiBhY2gucmVsZXZhbnRfZm9yfHxbXSwgaW1wb3J0YW5jZTogYWNoLmltcG9ydGFuY2V8fDd9KSl9KVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJFZGl0IGFjaGlldmVtZW50OiAke3RpdGxlfVwiIHRpdGxlPVwiRWRpdFwiPlx1MjcwRlx1RkUwRjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJkZWxldGVNYXN0ZXJBY2hpZXZlbWVudCgnJHtpZH0nLCAnJHt0aXRsZX0nKVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWxldGUgYWNoaWV2ZW1lbnQ6ICR7dGl0bGV9XCIgdGl0bGU9XCJEZWxldGVcIj5cdUQ4M0RcdURERDFcdUZFMEY8L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+YDtcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiBgXG4gICAgPHRhYmxlIGNsYXNzPVwicmV2aWV3LXRhYmxlXCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoPkFjaGlldmVtZW50PC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo2MHB4O3RleHQtYWxpZ246Y2VudGVyO1wiPkltcG9ydGFuY2U8L3RoPlxuICAgICAgICAgIDx0aD5SZWxldmFudCBmb3I8L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjgwcHg7XCI+QWN0aW9uczwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PiR7cm93c308L3Rib2R5PlxuICAgIDwvdGFibGU+YDtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclN1bW1hcmllc0xpc3Qoc3VtbWFyaWVzKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzdW1tYXJpZXMpO1xuICBpZiAoIWtleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICc8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7cGFkZGluZzoxMnB4IDA7XCI+Tm8gcHJvZmVzc2lvbmFsIHN1bW1hcnkgdmFyaWFudHMgeWV0LiBDbGljayBcIisgQWRkIFN1bW1hcnlcIiBhYm92ZSB0byBjcmVhdGUgeW91ciBmaXJzdCBvbmUuPC9wPic7XG4gIH1cbiAgcmV0dXJuIGtleXMubWFwKGtleSA9PiB7XG4gICAgY29uc3QgdGV4dCAgICA9IHR5cGVvZiBzdW1tYXJpZXNba2V5XSA9PT0gJ3N0cmluZycgPyBzdW1tYXJpZXNba2V5XSA6IEpTT04uc3RyaW5naWZ5KHN1bW1hcmllc1trZXldKTtcbiAgICBjb25zdCBwcmV2aWV3ID0gZXNjYXBlSHRtbCh0ZXh0LnNsaWNlKDAsIDIwMCkpO1xuICAgIGNvbnN0IGtleUVzYyAgPSBlc2NhcGVIdG1sKGtleSk7XG4gICAgcmV0dXJuIGBcbiAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc3VtbWFyeS1jYXJkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc3VtbWFyeS1oZWFkZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hc3Rlci1zdW1tYXJ5LWtleVwiPiR7a2V5RXNjfTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ0bnNcIiBzdHlsZT1cImdhcDo0cHg7XCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBvbmNsaWNrPVwiZWRpdE1hc3RlclN1bW1hcnkoJHtlc2NhcGVIdG1sKEpTT04uc3RyaW5naWZ5KHtrZXksIHRleHR9KSl9KVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkVkaXQgc3VtbWFyeTogJHtrZXlFc2N9XCIgdGl0bGU9XCJFZGl0XCI+XHUyNzBGXHVGRTBGPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBvbmNsaWNrPVwiZGVsZXRlTWFzdGVyU3VtbWFyeSgnJHtrZXlFc2N9JylcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWxldGUgc3VtbWFyeTogJHtrZXlFc2N9XCIgdGl0bGU9XCJEZWxldGVcIj5cdUQ4M0RcdURERDFcdUZFMEY8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc3VtbWFyeS1wcmV2aWV3XCI+JHtwcmV2aWV3fSR7dGV4dC5sZW5ndGggPiAyMDAgPyAnXHUyMDI2JyA6ICcnfTwvZGl2PlxuICAgICAgPC9kaXY+YDtcbiAgfSkuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIHNob3dBZGRBY2hpZXZlbWVudE1vZGFsKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLWlkJykudmFsdWUgICAgICAgICAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLXRpdGxlLWlucHV0JykudmFsdWUgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLWRlc2MtaW5wdXQnKS52YWx1ZSAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLXJlbGV2YW50LWlucHV0JykudmFsdWUgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaC1tb2RhbC1pbXBvcnRhbmNlLWlucHV0JykudmFsdWUgPSAnNyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItYWNoLW1vZGFsLXRpdGxlJykudGV4dENvbnRlbnQgPSAnQWRkIEFjaGlldmVtZW50JztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1hY2gtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgc2V0SW5pdGlhbEZvY3VzKCdtYXN0ZXItYWNoLW1vZGFsLW92ZXJsYXknKTtcbiAgdHJhcEZvY3VzKCdtYXN0ZXItYWNoLW1vZGFsLW92ZXJsYXknKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaC1tb2RhbC10aXRsZS1pbnB1dCcpLmZvY3VzKCk7XG59XG5cbmZ1bmN0aW9uIGVkaXRNYXN0ZXJBY2hpZXZlbWVudChhY2gpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaC1tb2RhbC1pZCcpLnZhbHVlICAgICAgICAgICAgICA9IGFjaC5pZCB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaC1tb2RhbC10aXRsZS1pbnB1dCcpLnZhbHVlICAgICA9IGFjaC50aXRsZSB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaC1tb2RhbC1kZXNjLWlucHV0JykudmFsdWUgICAgICA9IGFjaC5kZXNjcmlwdGlvbiB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaC1tb2RhbC1yZWxldmFudC1pbnB1dCcpLnZhbHVlICA9IChhY2gucmVsZXZhbnRfZm9yIHx8IFtdKS5qb2luKCcsICcpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLWltcG9ydGFuY2UtaW5wdXQnKS52YWx1ZSA9IGFjaC5pbXBvcnRhbmNlIHx8IDc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItYWNoLW1vZGFsLXRpdGxlJykudGV4dENvbnRlbnQgPSAnRWRpdCBBY2hpZXZlbWVudCc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItYWNoLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHNldEluaXRpYWxGb2N1cygnbWFzdGVyLWFjaC1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbWFzdGVyLWFjaC1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlTWFzdGVyQWNoTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItYWNoLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXN0b3JlRm9jdXMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZU1hc3RlckFjaGlldmVtZW50KCkge1xuICBjb25zdCBpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtbW9kYWwtaWQnKS52YWx1ZS50cmltKCkgfHxcbiAgICAgICAgICAgICAnc2FfJyArIERhdGUubm93KCk7XG4gIGNvbnN0IHRpdGxlICAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaC1tb2RhbC10aXRsZS1pbnB1dCcpLnZhbHVlLnRyaW0oKTtcbiAgY29uc3QgZGVzY3JpcHRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLWRlc2MtaW5wdXQnKS52YWx1ZS50cmltKCk7XG4gIGNvbnN0IHJlbGV2YW50UmF3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaC1tb2RhbC1yZWxldmFudC1pbnB1dCcpLnZhbHVlO1xuICBjb25zdCBpbXBvcnRhbmNlICA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtbW9kYWwtaW1wb3J0YW5jZS1pbnB1dCcpLnZhbHVlLCAxMCkgfHwgNztcblxuICBpZiAoIXRpdGxlKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjZBMFx1RkUwRiBWYWxpZGF0aW9uJywgJ1RpdGxlIGlzIHJlcXVpcmVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCByZWxldmFudF9mb3IgPSByZWxldmFudFJhdy5zcGxpdCgnLCcpLm1hcChzID0+IHMudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS91cGRhdGUtYWNoaWV2ZW1lbnQnLCB7XG4gICAgICBtZXRob2Q6ICAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6ICAgIEpTT04uc3RyaW5naWZ5KHsgaWQsIHRpdGxlLCBkZXNjcmlwdGlvbiwgcmVsZXZhbnRfZm9yLCBpbXBvcnRhbmNlIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjbG9zZU1hc3RlckFjaE1vZGFsKCk7XG4gICAgICBfc2V0TWFzdGVyQ2hhbmdlTm90aWNlKCdTZWxlY3RlZCBBY2hpZXZlbWVudHMnLCBkYXRhLmFjdGlvbiB8fCAndXBkYXRlZCcpO1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBTYXZlZCcsIGBBY2hpZXZlbWVudCBcIiR7dGl0bGV9XCIgJHtkYXRhLmFjdGlvbn0uYCk7XG4gICAgICBhd2FpdCBwb3B1bGF0ZU1hc3RlclRhYigpOyAgLy8gcmVmcmVzaFxuICAgIH0gZWxzZSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGF0YS5lcnJvciB8fCAnU2F2ZSBmYWlsZWQnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0ZhaWxlZCB0byBzYXZlIGFjaGlldmVtZW50Jyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvd0FkZFN1bW1hcnlNb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bS1tb2RhbC1rZXktaW5wdXQnKS52YWx1ZSAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bS1tb2RhbC10ZXh0LWlucHV0JykudmFsdWUgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1zdW0tbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9ICdBZGQgUHJvZmVzc2lvbmFsIFN1bW1hcnknO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXN1bS1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1zdW0tbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1zdW0tbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBlZGl0TWFzdGVyU3VtbWFyeShvYmopIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bS1tb2RhbC1rZXktaW5wdXQnKS52YWx1ZSAgPSBvYmoua2V5ICB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bS1tb2RhbC10ZXh0LWlucHV0JykudmFsdWUgPSBvYmoudGV4dCB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1zdW0tbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9ICdFZGl0IFByb2Zlc3Npb25hbCBTdW1tYXJ5JztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1zdW0tbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgc2V0SW5pdGlhbEZvY3VzKCdtYXN0ZXItc3VtLW1vZGFsLW92ZXJsYXknKTtcbiAgdHJhcEZvY3VzKCdtYXN0ZXItc3VtLW1vZGFsLW92ZXJsYXknKTtcbn1cblxuZnVuY3Rpb24gY2xvc2VNYXN0ZXJTdW1Nb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1zdW0tbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlTWFzdGVyU3VtbWFyeSgpIHtcbiAgY29uc3Qga2V5ICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdW0tbW9kYWwta2V5LWlucHV0JykudmFsdWUudHJpbSgpO1xuICBjb25zdCB0ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bS1tb2RhbC10ZXh0LWlucHV0JykudmFsdWUudHJpbSgpO1xuICBpZiAoIWtleSB8fCAhdGV4dCkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI2QTBcdUZFMEYgVmFsaWRhdGlvbicsICdCb3RoIEtleSBhbmQgU3VtbWFyeSB0ZXh0IGFyZSByZXF1aXJlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS91cGRhdGUtc3VtbWFyeScsIHtcbiAgICAgIG1ldGhvZDogICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogICAgSlNPTi5zdHJpbmdpZnkoeyBrZXksIHRleHQgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNsb3NlTWFzdGVyU3VtTW9kYWwoKTtcbiAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ1Byb2Zlc3Npb25hbCBTdW1tYXJpZXMnLCBkYXRhLmFjdGlvbiB8fCAndXBkYXRlZCcpO1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBTYXZlZCcsIGBTdW1tYXJ5IFwiJHtrZXl9XCIgJHtkYXRhLmFjdGlvbn0uYCk7XG4gICAgICBhd2FpdCBwb3B1bGF0ZU1hc3RlclRhYigpOyAgLy8gcmVmcmVzaFxuICAgIH0gZWxzZSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGF0YS5lcnJvciB8fCAnU2F2ZSBmYWlsZWQnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0ZhaWxlZCB0byBzYXZlIHN1bW1hcnknKTtcbiAgfVxufVxuXG4vLyAtLS0tIFBlcnNvbmFsIEluZm8gbW9kYWwgaGFuZGxlcnMgLS0tLVxuXG5mdW5jdGlvbiBzaG93RWRpdFBlcnNvbmFsSW5mb01vZGFsKCkge1xuICBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9mdWxsJylcbiAgICAudGhlbihyID0+IHIuanNvbigpKVxuICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgY29uc3QgcGkgICAgICA9IGRhdGEucGVyc29uYWxfaW5mbyB8fCB7fTtcbiAgICAgIGNvbnN0IGNvbnRhY3QgPSBwaS5jb250YWN0IHx8IHt9O1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGNvbnRhY3QuYWRkcmVzcyB8fCB7fTtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaS1uYW1lLWlucHV0JykudmFsdWUgICAgPSBwaS5uYW1lIHx8ICcnO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpLXRpdGxlLWlucHV0JykudmFsdWUgICA9IHBpLnRpdGxlIHx8IHBpLmhlYWRsaW5lIHx8ICcnO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpLWVtYWlsLWlucHV0JykudmFsdWUgICA9IGNvbnRhY3QuZW1haWwgfHwgcGkuZW1haWwgfHwgJyc7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGktcGhvbmUtaW5wdXQnKS52YWx1ZSAgID0gY29udGFjdC5waG9uZSB8fCAnJztcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaS1saW5rZWRpbi1pbnB1dCcpLnZhbHVlID0gY29udGFjdC5saW5rZWRpbiB8fCAnJztcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaS13ZWJzaXRlLWlucHV0JykudmFsdWUgID0gY29udGFjdC53ZWJzaXRlIHx8ICcnO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpLWNpdHktaW5wdXQnKS52YWx1ZSAgICA9IGFkZHJlc3MuY2l0eSB8fCAnJztcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaS1zdGF0ZS1pbnB1dCcpLnZhbHVlICAgPSBhZGRyZXNzLnN0YXRlIHx8ICcnO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1waS1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgIHNldEluaXRpYWxGb2N1cygnbWFzdGVyLXBpLW1vZGFsLW92ZXJsYXknKTtcbiAgICAgIHRyYXBGb2N1cygnbWFzdGVyLXBpLW1vZGFsLW92ZXJsYXknKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoKSA9PiBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0NvdWxkIG5vdCBsb2FkIHBlcnNvbmFsIGluZm8nKSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlUGVyc29uYWxJbmZvTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcGktbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlUGVyc29uYWxJbmZvKCkge1xuICBjb25zdCBib2R5ID0ge1xuICAgIG5hbWU6ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGktbmFtZS1pbnB1dCcpLnZhbHVlLnRyaW0oKSxcbiAgICB0aXRsZTogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpLXRpdGxlLWlucHV0JykudmFsdWUudHJpbSgpLFxuICAgIGVtYWlsOiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGktZW1haWwtaW5wdXQnKS52YWx1ZS50cmltKCksXG4gICAgcGhvbmU6ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaS1waG9uZS1pbnB1dCcpLnZhbHVlLnRyaW0oKSxcbiAgICBsaW5rZWRpbjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpLWxpbmtlZGluLWlucHV0JykudmFsdWUudHJpbSgpLFxuICAgIHdlYnNpdGU6ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGktd2Vic2l0ZS1pbnB1dCcpLnZhbHVlLnRyaW0oKSxcbiAgICBjaXR5OiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpLWNpdHktaW5wdXQnKS52YWx1ZS50cmltKCksXG4gICAgc3RhdGU6ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaS1zdGF0ZS1pbnB1dCcpLnZhbHVlLnRyaW0oKSxcbiAgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvcGVyc29uYWwtaW5mbycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSwgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNsb3NlUGVyc29uYWxJbmZvTW9kYWwoKTtcbiAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ1BlcnNvbmFsIEluZm9ybWF0aW9uJywgJ3VwZGF0ZWQnKTtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3MDUgU2F2ZWQnLCAnUGVyc29uYWwgaW5mb3JtYXRpb24gdXBkYXRlZC4nKTtcbiAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdTYXZlIGZhaWxlZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIHNhdmUgcGVyc29uYWwgaW5mbycpO1xuICB9XG59XG5cbi8vIC0tLS0gRXhwZXJpZW5jZSBtb2RhbCBoYW5kbGVycyAtLS0tXG5cbmZ1bmN0aW9uIHNob3dBZGRFeHBlcmllbmNlTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtbW9kYWwtaWQnKS52YWx1ZSAgICAgICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC10aXRsZS1pbnB1dCcpLnZhbHVlICAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLWNvbXBhbnktaW5wdXQnKS52YWx1ZSAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtY2l0eS1pbnB1dCcpLnZhbHVlICAgICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC1zdGF0ZS1pbnB1dCcpLnZhbHVlICAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLXN0YXJ0LWlucHV0JykudmFsdWUgICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtZW5kLWlucHV0JykudmFsdWUgICAgICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC10eXBlLWlucHV0JykudmFsdWUgICAgICA9ICdmdWxsX3RpbWUnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLWltcG9ydGFuY2UtaW5wdXQnKS52YWx1ZSA9ICc1JztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC10YWdzLWlucHV0JykudmFsdWUgICAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWV4cC1tb2RhbC10aXRsZScpLnRleHRDb250ZW50ID0gJ0FkZCBXb3JrIEV4cGVyaWVuY2UnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWV4cC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX21hc3RlckV4cE1vZGFsQWNoaWV2ZW1lbnRzID0gW107XG4gIF9yZW5kZXJFeHBBY2hpZXZlbWVudHNFZGl0b3IoKTtcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1leHAtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1leHAtbW9kYWwtb3ZlcmxheScpO1xufVxuXG4vLyBXb3JraW5nIGNvcHkgb2YgdGhlIGN1cnJlbnRseS1lZGl0ZWQgZXhwZXJpZW5jZSdzIGFjaGlldmVtZW50cyB3aGlsZSB0aGVcbi8vIG1vZGFsIGlzIG9wZW4gKEdBUC0xOSAxNi4xMSkuIGVkaXRNYXN0ZXJFeHBlcmllbmNlKCkgdGFrZXMgYW4gaWQgKG5vdCB0aGVcbi8vIGZ1bGwgb2JqZWN0KSBhbmQgbG9va3MgaXQgdXAgZnJvbSB3aW5kb3cuX21hc3RlckV4cGVyaWVuY2VGdWxsRGF0YSBcdTIwMTRcbi8vIGFjaGlldmVtZW50IHRleHQgY2FuIGNvbnRhaW4gcXVvdGVzL3VuaWNvZGUgdGhhdCB3b3VsZCBiZSBmcmFnaWxlIHRvXG4vLyBlbWJlZCBkaXJlY3RseSBpbnNpZGUgYW4gaW5saW5lIG9uY2xpY2sgYXR0cmlidXRlLlxubGV0IF9tYXN0ZXJFeHBNb2RhbEFjaGlldmVtZW50cyA9IFtdO1xuXG5mdW5jdGlvbiBfYWNoaWV2ZW1lbnRUZXh0KGEpIHtcbiAgcmV0dXJuIHR5cGVvZiBhID09PSAnc3RyaW5nJyA/IGEgOiAoYSAmJiBhLnRleHQpIHx8ICcnO1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyRXhwQWNoaWV2ZW1lbnRzRWRpdG9yKCkge1xuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLWFjaGlldmVtZW50cy1lZGl0b3ItbGlzdCcpO1xuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICBjb25zdCBsYXN0SWR4ID0gX21hc3RlckV4cE1vZGFsQWNoaWV2ZW1lbnRzLmxlbmd0aCAtIDE7XG4gIGNvbnRhaW5lci5pbm5lckhUTUwgPSBfbWFzdGVyRXhwTW9kYWxBY2hpZXZlbWVudHMubWFwKChhY2gsIGlkeCkgPT4gYFxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjZweDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTo2cHg7XCI+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImVkaXQtaW5wdXQgZXhwLWFjaC10ZXh0LWlucHV0XCIgZGF0YS1pZHg9XCIke2lkeH1cIiBzdHlsZT1cImZsZXg6MTtcIlxuICAgICAgICAgIHZhbHVlPVwiJHtlc2NhcGVIdG1sKF9hY2hpZXZlbWVudFRleHQoYWNoKSl9XCIgYXJpYS1sYWJlbD1cIkFjaGlldmVtZW50ICR7aWR4ICsgMX0gdGV4dFwiIC8+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImljb24tYnRuXCIgb25jbGljaz1cIl9tb3ZlRXhwQWNoaWV2ZW1lbnQoJHtpZHh9LCAtMSlcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJNb3ZlIGFjaGlldmVtZW50ICR7aWR4ICsgMX0gdXBcIiB0aXRsZT1cIk1vdmUgdXBcIiAke2lkeCA9PT0gMCA/ICdkaXNhYmxlZCcgOiAnJ30+XHUyMTkxPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImljb24tYnRuXCIgb25jbGljaz1cIl9tb3ZlRXhwQWNoaWV2ZW1lbnQoJHtpZHh9LCAxKVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIk1vdmUgYWNoaWV2ZW1lbnQgJHtpZHggKyAxfSBkb3duXCIgdGl0bGU9XCJNb3ZlIGRvd25cIiAke2lkeCA9PT0gbGFzdElkeCA/ICdkaXNhYmxlZCcgOiAnJ30+XHUyMTkzPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImljb24tYnRuXCIgb25jbGljaz1cIl9kZWxldGVFeHBBY2hpZXZlbWVudCgke2lkeH0pXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVsZXRlIGFjaGlldmVtZW50ICR7aWR4ICsgMX1cIiB0aXRsZT1cIkRlbGV0ZVwiPlx1RDgzRFx1REREMVx1RkUwRjwvYnV0dG9uPlxuICAgIDwvZGl2PmApLmpvaW4oJycpIHx8ICc8cCBzdHlsZT1cImNvbG9yOiM5NGEzYjg7Zm9udC1zaXplOjAuODVlbTttYXJnaW46MCAwIDZweDtcIj5ObyBhY2hpZXZlbWVudHMgeWV0LjwvcD4nO1xufVxuXG4vLyBSZWFkIGFueSBpbi1wcm9ncmVzcyBlZGl0cyBvdXQgb2YgdGhlIGFjaGlldmVtZW50IHRleHQgaW5wdXRzIGJlZm9yZSBhXG4vLyByZW9yZGVyL2RlbGV0ZS9zYXZlIHJlYnVpbGRzIHRoZSBsaXN0IGZyb20gX21hc3RlckV4cE1vZGFsQWNoaWV2ZW1lbnRzIFx1MjAxNFxuLy8gb3RoZXJ3aXNlIGFuIHVuLXN1Ym1pdHRlZCB0ZXh0IGVkaXQgd291bGQgYmUgc2lsZW50bHkgbG9zdCBvbiByZS1yZW5kZXIuXG5mdW5jdGlvbiBfc3luY0V4cEFjaGlldmVtZW50c0Zyb21JbnB1dHMoKSB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5leHAtYWNoLXRleHQtaW5wdXQnKS5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGlkeCA9IHBhcnNlSW50KGlucHV0LmRhdGFzZXQuaWR4LCAxMCk7XG4gICAgY29uc3QgYWNoID0gX21hc3RlckV4cE1vZGFsQWNoaWV2ZW1lbnRzW2lkeF07XG4gICAgaWYgKHR5cGVvZiBhY2ggPT09ICdzdHJpbmcnIHx8IGFjaCA9PSBudWxsKSB7XG4gICAgICBfbWFzdGVyRXhwTW9kYWxBY2hpZXZlbWVudHNbaWR4XSA9IGlucHV0LnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2gudGV4dCA9IGlucHV0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9hZGRFeHBBY2hpZXZlbWVudCgpIHtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLWFjaC1uZXctaW5wdXQnKTtcbiAgY29uc3QgdGV4dCA9IChpbnB1dC52YWx1ZSB8fCAnJykudHJpbSgpO1xuICBpZiAoIXRleHQpIHJldHVybjtcbiAgX3N5bmNFeHBBY2hpZXZlbWVudHNGcm9tSW5wdXRzKCk7XG4gIF9tYXN0ZXJFeHBNb2RhbEFjaGlldmVtZW50cy5wdXNoKHRleHQpO1xuICBpbnB1dC52YWx1ZSA9ICcnO1xuICBfcmVuZGVyRXhwQWNoaWV2ZW1lbnRzRWRpdG9yKCk7XG59XG5cbmZ1bmN0aW9uIF9tb3ZlRXhwQWNoaWV2ZW1lbnQoaWR4LCBkZWx0YSkge1xuICBfc3luY0V4cEFjaGlldmVtZW50c0Zyb21JbnB1dHMoKTtcbiAgY29uc3QgdGFyZ2V0ID0gaWR4ICsgZGVsdGE7XG4gIGlmICh0YXJnZXQgPCAwIHx8IHRhcmdldCA+PSBfbWFzdGVyRXhwTW9kYWxBY2hpZXZlbWVudHMubGVuZ3RoKSByZXR1cm47XG4gIGNvbnN0IFtpdGVtXSA9IF9tYXN0ZXJFeHBNb2RhbEFjaGlldmVtZW50cy5zcGxpY2UoaWR4LCAxKTtcbiAgX21hc3RlckV4cE1vZGFsQWNoaWV2ZW1lbnRzLnNwbGljZSh0YXJnZXQsIDAsIGl0ZW0pO1xuICBfcmVuZGVyRXhwQWNoaWV2ZW1lbnRzRWRpdG9yKCk7XG59XG5cbmZ1bmN0aW9uIF9kZWxldGVFeHBBY2hpZXZlbWVudChpZHgpIHtcbiAgX3N5bmNFeHBBY2hpZXZlbWVudHNGcm9tSW5wdXRzKCk7XG4gIF9tYXN0ZXJFeHBNb2RhbEFjaGlldmVtZW50cy5zcGxpY2UoaWR4LCAxKTtcbiAgX3JlbmRlckV4cEFjaGlldmVtZW50c0VkaXRvcigpO1xufVxuXG5mdW5jdGlvbiBlZGl0TWFzdGVyRXhwZXJpZW5jZShpZCkge1xuICBjb25zdCBleHAgPSAod2luZG93Ll9tYXN0ZXJFeHBlcmllbmNlRnVsbERhdGEgfHwgW10pLmZpbmQoKGUpID0+IGUuaWQgPT09IGlkKTtcbiAgaWYgKCFleHApIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0NvdWxkIG5vdCBmaW5kIHRoYXQgZXhwZXJpZW5jZSBlbnRyeSBcdTIwMTQgdHJ5IHJlZnJlc2hpbmcgdGhlIHRhYi4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbG9jID0gZXhwLmxvY2F0aW9uIHx8IHt9O1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLW1vZGFsLWlkJykudmFsdWUgICAgICAgICA9IGV4cC5pZCB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC10aXRsZS1pbnB1dCcpLnZhbHVlICAgICAgPSBleHAudGl0bGUgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtY29tcGFueS1pbnB1dCcpLnZhbHVlICAgID0gZXhwLmNvbXBhbnkgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtY2l0eS1pbnB1dCcpLnZhbHVlICAgICAgID0gbG9jLmNpdHkgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtc3RhdGUtaW5wdXQnKS52YWx1ZSAgICAgID0gbG9jLnN0YXRlIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLXN0YXJ0LWlucHV0JykudmFsdWUgICAgICA9IGV4cC5zdGFydF9kYXRlIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLWVuZC1pbnB1dCcpLnZhbHVlICAgICAgICA9IGV4cC5lbmRfZGF0ZSB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC10eXBlLWlucHV0JykudmFsdWUgICAgICAgPSBleHAuZW1wbG95bWVudF90eXBlIHx8ICdmdWxsX3RpbWUnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLWltcG9ydGFuY2UtaW5wdXQnKS52YWx1ZSAgPSBleHAuaW1wb3J0YW5jZSB8fCA1O1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLXRhZ3MtaW5wdXQnKS52YWx1ZSAgICAgICA9IHR5cGVvZiBleHAudGFncyA9PT0gJ3N0cmluZycgPyBleHAudGFnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZXhwLnRhZ3MgfHwgW10pLmpvaW4oJywgJyk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItZXhwLW1vZGFsLXRpdGxlJykudGV4dENvbnRlbnQgPSAnRWRpdCBXb3JrIEV4cGVyaWVuY2UnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWV4cC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX21hc3RlckV4cE1vZGFsQWNoaWV2ZW1lbnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShleHAuYWNoaWV2ZW1lbnRzIHx8IFtdKSk7XG4gIF9yZW5kZXJFeHBBY2hpZXZlbWVudHNFZGl0b3IoKTtcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1leHAtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1leHAtbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBjbG9zZUV4cGVyaWVuY2VNb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1leHAtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlTWFzdGVyRXhwZXJpZW5jZSgpIHtcbiAgY29uc3QgaWQgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC1tb2RhbC1pZCcpLnZhbHVlLnRyaW0oKTtcbiAgY29uc3QgdGl0bGUgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC10aXRsZS1pbnB1dCcpLnZhbHVlLnRyaW0oKTtcbiAgY29uc3QgY29tcGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtY29tcGFueS1pbnB1dCcpLnZhbHVlLnRyaW0oKTtcbiAgaWYgKCF0aXRsZSB8fCAhY29tcGFueSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI2QTBcdUZFMEYgVmFsaWRhdGlvbicsICdKb2IgdGl0bGUgYW5kIGNvbXBhbnkgYXJlIHJlcXVpcmVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB0YWdzUmF3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC10YWdzLWlucHV0JykudmFsdWU7XG4gIF9zeW5jRXhwQWNoaWV2ZW1lbnRzRnJvbUlucHV0cygpO1xuICBjb25zdCBleHBEYXRhID0ge1xuICAgIHRpdGxlLCBjb21wYW55LFxuICAgIGNpdHk6ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC1jaXR5LWlucHV0JykudmFsdWUudHJpbSgpLFxuICAgIHN0YXRlOiAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC1zdGF0ZS1pbnB1dCcpLnZhbHVlLnRyaW0oKSxcbiAgICBzdGFydF9kYXRlOiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtc3RhcnQtaW5wdXQnKS52YWx1ZS50cmltKCksXG4gICAgZW5kX2RhdGU6ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLWVuZC1pbnB1dCcpLnZhbHVlLnRyaW0oKSxcbiAgICBlbXBsb3ltZW50X3R5cGU6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtdHlwZS1pbnB1dCcpLnZhbHVlLFxuICAgIGltcG9ydGFuY2U6ICAgICAgcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC1pbXBvcnRhbmNlLWlucHV0JykudmFsdWUsIDEwKSB8fCA1LFxuICAgIHRhZ3M6ICAgICAgICAgICAgdGFnc1Jhdy5zcGxpdCgnLCcpLm1hcChzID0+IHMudHJpbSgpKS5maWx0ZXIoQm9vbGVhbiksXG4gICAgYWNoaWV2ZW1lbnRzOiAgICBfbWFzdGVyRXhwTW9kYWxBY2hpZXZlbWVudHMsXG4gIH07XG4gIGNvbnN0IGFjdGlvbiA9IGlkID8gJ3VwZGF0ZScgOiAnYWRkJztcbiAgY29uc3QgYm9keSAgID0gYWN0aW9uID09PSAndXBkYXRlJyA/IHsgYWN0aW9uLCBpZCwgZXhwZXJpZW5jZTogZXhwRGF0YSB9IDogeyBhY3Rpb24sIGV4cGVyaWVuY2U6IGV4cERhdGEgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvZXhwZXJpZW5jZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSwgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNsb3NlRXhwZXJpZW5jZU1vZGFsKCk7XG4gICAgICBfc2V0TWFzdGVyQ2hhbmdlTm90aWNlKCdXb3JrIEV4cGVyaWVuY2UnLCBkYXRhLmFjdGlvbiB8fCAndXBkYXRlZCcpO1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBTYXZlZCcsIGBFeHBlcmllbmNlIFwiJHt0aXRsZX1cIiAke2RhdGEuYWN0aW9ufS5gKTtcbiAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdTYXZlIGZhaWxlZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIHNhdmUgZXhwZXJpZW5jZScpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZU1hc3RlckV4cGVyaWVuY2UoaWQsIHRpdGxlKSB7XG4gIHNob3dDb25maXJtTW9kYWwoXG4gICAgJ1x1RDgzRFx1REREMVx1RkUwRiBEZWxldGUgRXhwZXJpZW5jZScsXG4gICAgYERlbGV0ZSBcIiR7dGl0bGV9XCI/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS5gLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9leHBlcmllbmNlJywge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogJ2RlbGV0ZScsIGlkIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnV29yayBFeHBlcmllbmNlJywgZGF0YS5hY3Rpb24gfHwgJ2RlbGV0ZWQnKTtcbiAgICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IERlbGV0ZWQnLCBgRXhwZXJpZW5jZSBcIiR7dGl0bGV9XCIgcmVtb3ZlZC5gKTtcbiAgICAgICAgICBhd2FpdCBwb3B1bGF0ZU1hc3RlclRhYigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdEZWxldGUgZmFpbGVkJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gZGVsZXRlIGV4cGVyaWVuY2UnKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59XG5cbi8vIC0tLS0gU2tpbGwgbW9kYWwgaGFuZGxlcnMgLS0tLVxuXG5mdW5jdGlvbiBzaG93QWRkU2tpbGxNb2RhbChjYXRlZ29yeUtleSwgaXNGbGF0KSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1tb2RhbC1jYXRlZ29yeScpLnZhbHVlID0gY2F0ZWdvcnlLZXkgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1tb2RhbC1pcy1mbGF0JykudmFsdWUgID0gaXNGbGF0ID8gJzEnIDogJzAnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtbW9kYWwtb3JpZ2luYWwtbmFtZScpLnZhbHVlID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1uYW1lLWlucHV0JykudmFsdWUgICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1leHBlcmllbmNlcy1pbnB1dCcpLnZhbHVlID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1hbGlhc2VzLWlucHV0JykudmFsdWUgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC15ZWFycy1pbnB1dCcpLnZhbHVlICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItc2tpbGwtbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9ICdBZGQgU2tpbGwnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXNraWxsLXNhdmUtYnRuJykudGV4dENvbnRlbnQgPSAnQWRkIFNraWxsJztcbiAgY29uc3QgaGludHMgPSAod2luZG93Ll9tYXN0ZXJFeHBlcmllbmNlT3B0aW9ucyB8fCBbXSlcbiAgICAuc2xpY2UoMCwgOClcbiAgICAubWFwKCh4KSA9PiBgJHt4LmlkfSAoJHt4LmxhYmVsfSlgKVxuICAgIC5qb2luKCcgXHUwMEI3ICcpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtZXhwZXJpZW5jZS1oaW50cycpLnRleHRDb250ZW50ID0gaGludHMgPyBgQXZhaWxhYmxlOiAke2hpbnRzfWAgOiAnJztcbiAgY29uc3QgY2F0Um93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLWNhdGVnb3J5LXJvdycpO1xuICBpZiAoY2F0ZWdvcnlLZXkpIHtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtY2F0ZWdvcnktZGlzcGxheScpLnRleHRDb250ZW50ID0gY2F0ZWdvcnlLZXk7XG4gICAgY2F0Um93LnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgfSBlbHNlIHtcbiAgICBjYXRSb3cuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXNraWxsLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHNldEluaXRpYWxGb2N1cygnbWFzdGVyLXNraWxsLW1vZGFsLW92ZXJsYXknKTtcbiAgdHJhcEZvY3VzKCdtYXN0ZXItc2tpbGwtbW9kYWwtb3ZlcmxheScpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtbmFtZS1pbnB1dCcpLmZvY3VzKCk7XG59XG5cbmZ1bmN0aW9uIGVkaXRNYXN0ZXJTa2lsbChza2lsbE9iaiwgY2F0ZWdvcnlLZXksIGlzRmxhdCkge1xuICBjb25zdCBuYW1lID0gdHlwZW9mIHNraWxsT2JqID09PSAnc3RyaW5nJyA/IHNraWxsT2JqIDogKHNraWxsT2JqPy5uYW1lIHx8ICcnKTtcbiAgY29uc3QgZXhwZXJpZW5jZXMgPSBBcnJheS5pc0FycmF5KHNraWxsT2JqPy5leHBlcmllbmNlcykgPyBza2lsbE9iai5leHBlcmllbmNlcyA6IFtdO1xuICBjb25zdCBhbGlhc2VzID0gQXJyYXkuaXNBcnJheShza2lsbE9iaj8uYWxpYXNlcykgPyBza2lsbE9iai5hbGlhc2VzIDogW107XG4gIGNvbnN0IHllYXJzID0gKHR5cGVvZiBza2lsbE9iaiA9PT0gJ29iamVjdCcgJiYgc2tpbGxPYmo/LnllYXJzICE9IG51bGwpID8gc2tpbGxPYmoueWVhcnMgOiAnJztcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtbW9kYWwtY2F0ZWdvcnknKS52YWx1ZSA9IGNhdGVnb3J5S2V5IHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtbW9kYWwtaXMtZmxhdCcpLnZhbHVlICA9IGlzRmxhdCA/ICcxJyA6ICcwJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLW1vZGFsLW9yaWdpbmFsLW5hbWUnKS52YWx1ZSA9IG5hbWU7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1uYW1lLWlucHV0JykudmFsdWUgPSBuYW1lO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtZXhwZXJpZW5jZXMtaW5wdXQnKS52YWx1ZSA9IGV4cGVyaWVuY2VzLmpvaW4oJywgJyk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1hbGlhc2VzLWlucHV0JykudmFsdWUgPSBhbGlhc2VzLmpvaW4oJywgJyk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC15ZWFycy1pbnB1dCcpLnZhbHVlID0geWVhcnM7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItc2tpbGwtbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9ICdFZGl0IFNraWxsJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1za2lsbC1zYXZlLWJ0bicpLnRleHRDb250ZW50ID0gJ1NhdmUgU2tpbGwnO1xuXG4gIGNvbnN0IGhpbnRzID0gKHdpbmRvdy5fbWFzdGVyRXhwZXJpZW5jZU9wdGlvbnMgfHwgW10pXG4gICAgLnNsaWNlKDAsIDgpXG4gICAgLm1hcCgoeCkgPT4gYCR7eC5pZH0gKCR7eC5sYWJlbH0pYClcbiAgICAuam9pbignIFx1MDBCNyAnKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLWV4cGVyaWVuY2UtaGludHMnKS50ZXh0Q29udGVudCA9IGhpbnRzID8gYEF2YWlsYWJsZTogJHtoaW50c31gIDogJyc7XG5cbiAgY29uc3QgY2F0Um93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLWNhdGVnb3J5LXJvdycpO1xuICBpZiAoY2F0ZWdvcnlLZXkpIHtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtY2F0ZWdvcnktZGlzcGxheScpLnRleHRDb250ZW50ID0gY2F0ZWdvcnlLZXk7XG4gICAgY2F0Um93LnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgfSBlbHNlIHtcbiAgICBjYXRSb3cuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItc2tpbGwtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgc2V0SW5pdGlhbEZvY3VzKCdtYXN0ZXItc2tpbGwtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1za2lsbC1tb2RhbC1vdmVybGF5Jyk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1uYW1lLWlucHV0JykuZm9jdXMoKTtcbn1cblxuZnVuY3Rpb24gY2xvc2VTa2lsbE1vZGFsKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXNraWxsLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXN0b3JlRm9jdXMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZU1hc3RlclNraWxsKCkge1xuICBjb25zdCBza2lsbCAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1uYW1lLWlucHV0JykudmFsdWUudHJpbSgpO1xuICBjb25zdCBjYXRlZ29yeSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1tb2RhbC1jYXRlZ29yeScpLnZhbHVlLnRyaW0oKTtcbiAgY29uc3QgaXNGbGF0ICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtbW9kYWwtaXMtZmxhdCcpLnZhbHVlID09PSAnMSc7XG4gIGNvbnN0IG9yaWdpbmFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLW1vZGFsLW9yaWdpbmFsLW5hbWUnKS52YWx1ZS50cmltKCk7XG4gIGNvbnN0IGV4cGVyaWVuY2VzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLWV4cGVyaWVuY2VzLWlucHV0JykudmFsdWVcbiAgICAuc3BsaXQoJywnKVxuICAgIC5tYXAoKHMpID0+IHMudHJpbSgpKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IGFsaWFzZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtYWxpYXNlcy1pbnB1dCcpLnZhbHVlXG4gICAgLnNwbGl0KCcsJylcbiAgICAubWFwKChzKSA9PiBzLnRyaW0oKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCB5ZWFyc1JhdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC15ZWFycy1pbnB1dCcpLnZhbHVlLnRyaW0oKTtcbiAgY29uc3QgeWVhcnMgPSB5ZWFyc1JhdyA9PT0gJycgPyBudWxsIDogcGFyc2VGbG9hdCh5ZWFyc1Jhdyk7XG4gIGlmICghc2tpbGwpIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNkEwXHVGRTBGIFZhbGlkYXRpb24nLCAnU2tpbGwgbmFtZSBpcyByZXF1aXJlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHllYXJzICE9PSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUoeWVhcnMpKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjZBMFx1RkUwRiBWYWxpZGF0aW9uJywgJ1llYXJzIG9mIGV4cGVyaWVuY2UgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIuJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGlzVXBkYXRlID0gQm9vbGVhbihvcmlnaW5hbCk7XG4gIGNvbnN0IGJhc2VCb2R5ID0ge1xuICAgIGFjdGlvbjogaXNVcGRhdGUgPyAndXBkYXRlJyA6ICdhZGQnLFxuICAgIHNraWxsOiBpc1VwZGF0ZSA/IG9yaWdpbmFsIDogc2tpbGwsXG4gICAgLi4uKGlzVXBkYXRlID8geyBza2lsbF9uZXc6IHNraWxsIH0gOiB7fSksXG4gICAgZXhwZXJpZW5jZXMsXG4gICAgYWxpYXNlcyxcbiAgICB5ZWFycyxcbiAgfTtcbiAgY29uc3QgYm9keSA9IGlzRmxhdCA/IGJhc2VCb2R5IDogeyAuLi5iYXNlQm9keSwgY2F0ZWdvcnkgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvc2tpbGwnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjbG9zZVNraWxsTW9kYWwoKTtcbiAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ1NraWxscycsIGRhdGEuYWN0aW9uIHx8ICd1cGRhdGVkJyk7XG4gICAgICBhd2FpdCBwb3B1bGF0ZU1hc3RlclRhYigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGF0YS5lcnJvciB8fCAnQ291bGQgbm90IGFkZCBza2lsbCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIGFkZCBza2lsbCcpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZU1hc3RlclNraWxsKHNraWxsLCBjYXRlZ29yeSwgaXNGbGF0KSB7XG4gIGNvbnN0IGJvZHkgPSBpc0ZsYXQgPyB7IGFjdGlvbjogJ2RlbGV0ZScsIHNraWxsIH0gOiB7IGFjdGlvbjogJ2RlbGV0ZScsIHNraWxsLCBjYXRlZ29yeSB9O1xuICBjb25zdCBzY29wZSA9IGlzRmxhdCA/ICdTa2lsbHMnIDogYFNraWxscyBcdTIxOTIgJHtjYXRlZ29yeX1gO1xuICBzaG93Q29uZmlybU1vZGFsKFxuICAgICdcdUQ4M0RcdURERDFcdUZFMEYgRGVsZXRlIFNraWxsJyxcbiAgICBgRGVsZXRlIHNraWxsIFwiJHtza2lsbH1cIiBmcm9tICR7c2NvcGV9PyBUaGlzIGNhbm5vdCBiZSB1bmRvbmUuYCxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvc2tpbGwnLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LCBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBpZiAoZGF0YS5vaykge1xuICAgICAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ1NraWxscycsIGRhdGEuYWN0aW9uIHx8ICd1cGRhdGVkJyk7XG4gICAgICAgICAgYXdhaXQgcG9wdWxhdGVNYXN0ZXJUYWIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGF0YS5lcnJvciB8fCAnQ291bGQgbm90IHJlbW92ZSBza2lsbCcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIHJlbW92ZSBza2lsbCcpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuLy8gLS0tLSBFZHVjYXRpb24gbW9kYWwgaGFuZGxlcnMgLS0tLVxuXG5mdW5jdGlvbiBzaG93QWRkRWR1Y2F0aW9uTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtbW9kYWwtaWR4JykudmFsdWUgICAgICAgICAgICA9ICctMSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtZGVncmVlLWlucHV0JykudmFsdWUgICAgICAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LWZpZWxkLWlucHV0JykudmFsdWUgICAgICAgICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1pbnN0aXR1dGlvbi1pbnB1dCcpLnZhbHVlICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtY2l0eS1pbnB1dCcpLnZhbHVlICAgICAgICAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LXN0YXRlLWlucHV0JykudmFsdWUgICAgICAgICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1zdGFydC15ZWFyLWlucHV0JykudmFsdWUgICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtZW5kLXllYXItaW5wdXQnKS52YWx1ZSAgICAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWVkdS1tb2RhbC10aXRsZScpLnRleHRDb250ZW50ID0gJ0FkZCBFZHVjYXRpb24nO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWVkdS1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1lZHUtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1lZHUtbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBlZGl0TWFzdGVyRWR1Y2F0aW9uKGVkdSwgaWR4KSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtbW9kYWwtaWR4JykudmFsdWUgICAgICAgICA9IGlkeDtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1kZWdyZWUtaW5wdXQnKS52YWx1ZSAgICAgID0gZWR1LmRlZ3JlZSB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1maWVsZC1pbnB1dCcpLnZhbHVlICAgICAgID0gZWR1LmZpZWxkIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LWluc3RpdHV0aW9uLWlucHV0JykudmFsdWUgPSBlZHUuaW5zdGl0dXRpb24gfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtY2l0eS1pbnB1dCcpLnZhbHVlICAgICAgICA9IGVkdS5jaXR5IHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LXN0YXRlLWlucHV0JykudmFsdWUgICAgICAgPSBlZHUuc3RhdGUgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtc3RhcnQteWVhci1pbnB1dCcpLnZhbHVlICA9IGVkdS5zdGFydF95ZWFyIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LWVuZC15ZWFyLWlucHV0JykudmFsdWUgICAgPSBlZHUuZW5kX3llYXIgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItZWR1LW1vZGFsLXRpdGxlJykudGV4dENvbnRlbnQgPSAnRWRpdCBFZHVjYXRpb24nO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWVkdS1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1lZHUtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1lZHUtbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBjbG9zZUVkdWNhdGlvbk1vZGFsKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWVkdS1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVzdG9yZUZvY3VzKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVNYXN0ZXJFZHVjYXRpb24oKSB7XG4gIGNvbnN0IGlkeCAgICAgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LW1vZGFsLWlkeCcpLnZhbHVlLCAxMCk7XG4gIGNvbnN0IGRlZ3JlZSAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LWRlZ3JlZS1pbnB1dCcpLnZhbHVlLnRyaW0oKTtcbiAgY29uc3QgaW5zdGl0dXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LWluc3RpdHV0aW9uLWlucHV0JykudmFsdWUudHJpbSgpO1xuICBpZiAoIWRlZ3JlZSB8fCAhaW5zdGl0dXRpb24pIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNkEwXHVGRTBGIFZhbGlkYXRpb24nLCAnRGVncmVlIGFuZCBpbnN0aXR1dGlvbiBhcmUgcmVxdWlyZWQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGFjdGlvbiA9IGlkeCA+PSAwID8gJ3VwZGF0ZScgOiAnYWRkJztcbiAgY29uc3QgYm9keSA9IHtcbiAgICBhY3Rpb24sXG4gICAgZGVncmVlLFxuICAgIGZpZWxkOiAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LWZpZWxkLWlucHV0JykudmFsdWUudHJpbSgpLFxuICAgIGluc3RpdHV0aW9uLFxuICAgIGNpdHk6ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LWNpdHktaW5wdXQnKS52YWx1ZS50cmltKCksXG4gICAgc3RhdGU6ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtc3RhdGUtaW5wdXQnKS52YWx1ZS50cmltKCksXG4gICAgc3RhcnRfeWVhcjogIHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtc3RhcnQteWVhci1pbnB1dCcpLnZhbHVlLCAxMCkgfHwgbnVsbCxcbiAgICBlbmRfeWVhcjogICAgcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1lbmQteWVhci1pbnB1dCcpLnZhbHVlLCAxMCkgfHwgbnVsbCxcbiAgICAuLi4oYWN0aW9uID09PSAndXBkYXRlJyA/IHsgaWR4IH0gOiB7fSksXG4gIH07XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL2VkdWNhdGlvbicsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSwgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNsb3NlRWR1Y2F0aW9uTW9kYWwoKTtcbiAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ0VkdWNhdGlvbicsIGRhdGEuYWN0aW9uIHx8ICd1cGRhdGVkJyk7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IFNhdmVkJywgYEVkdWNhdGlvbiBcIiR7ZGVncmVlfSBcdTIwMTMgJHtpbnN0aXR1dGlvbn1cIiAke2RhdGEuYWN0aW9ufS5gKTtcbiAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdTYXZlIGZhaWxlZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIHNhdmUgZWR1Y2F0aW9uJyk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlTWFzdGVyRWR1Y2F0aW9uKGlkeCwgaW5zdGl0dXRpb24pIHtcbiAgc2hvd0NvbmZpcm1Nb2RhbChcbiAgICAnXHVEODNEXHVEREQxXHVGRTBGIERlbGV0ZSBFZHVjYXRpb24nLFxuICAgIGBEZWxldGUgXCIke2luc3RpdHV0aW9ufVwiPyBUaGlzIGNhbm5vdCBiZSB1bmRvbmUuYCxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvZWR1Y2F0aW9uJywge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogJ2RlbGV0ZScsIGlkeCB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBpZiAoZGF0YS5vaykge1xuICAgICAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ0VkdWNhdGlvbicsIGRhdGEuYWN0aW9uIHx8ICdkZWxldGVkJyk7XG4gICAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBEZWxldGVkJywgYEVkdWNhdGlvbiBlbnRyeSByZW1vdmVkLmApO1xuICAgICAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGRhdGEuZXJyb3IgfHwgJ0RlbGV0ZSBmYWlsZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0ZhaWxlZCB0byBkZWxldGUgZWR1Y2F0aW9uIGVudHJ5Jyk7XG4gICAgICB9XG4gICAgfVxuICApO1xufVxuXG4vLyAtLS0tIEF3YXJkIG1vZGFsIGhhbmRsZXJzIC0tLS1cblxuZnVuY3Rpb24gc2hvd0FkZEF3YXJkTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC1tb2RhbC1pZHgnKS52YWx1ZSAgICA9ICctMSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC10aXRsZS1pbnB1dCcpLnZhbHVlICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXdhcmQteWVhci1pbnB1dCcpLnZhbHVlICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F3YXJkLWRlc2MtaW5wdXQnKS52YWx1ZSAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC1yZWxldmFudC1pbnB1dCcpLnZhbHVlID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItYXdhcmQtbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9ICdBZGQgQXdhcmQgLyBIb25vdXInO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWF3YXJkLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHNldEluaXRpYWxGb2N1cygnbWFzdGVyLWF3YXJkLW1vZGFsLW92ZXJsYXknKTtcbiAgdHJhcEZvY3VzKCdtYXN0ZXItYXdhcmQtbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBlZGl0TWFzdGVyQXdhcmQoYXdhcmQsIGlkeCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXdhcmQtbW9kYWwtaWR4JykudmFsdWUgICAgID0gaWR4O1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXdhcmQtdGl0bGUtaW5wdXQnKS52YWx1ZSAgID0gYXdhcmQudGl0bGUgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC15ZWFyLWlucHV0JykudmFsdWUgICAgPSBhd2FyZC55ZWFyIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXdhcmQtZGVzYy1pbnB1dCcpLnZhbHVlICAgID0gYXdhcmQuZGVzY3JpcHRpb24gfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC1yZWxldmFudC1pbnB1dCcpLnZhbHVlID0gdHlwZW9mIGF3YXJkLnJlbGV2YW50X2ZvciA9PT0gJ3N0cmluZydcbiAgICA/IGF3YXJkLnJlbGV2YW50X2ZvciA6IChhd2FyZC5yZWxldmFudF9mb3IgfHwgW10pLmpvaW4oJywgJyk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItYXdhcmQtbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9ICdFZGl0IEF3YXJkIC8gSG9ub3VyJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1hd2FyZC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1hd2FyZC1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbWFzdGVyLWF3YXJkLW1vZGFsLW92ZXJsYXknKTtcbn1cblxuZnVuY3Rpb24gY2xvc2VBd2FyZE1vZGFsKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWF3YXJkLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXN0b3JlRm9jdXMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZU1hc3RlckF3YXJkKCkge1xuICBjb25zdCBpZHggICA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC1tb2RhbC1pZHgnKS52YWx1ZSwgMTApO1xuICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC10aXRsZS1pbnB1dCcpLnZhbHVlLnRyaW0oKTtcbiAgaWYgKCF0aXRsZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI2QTBcdUZFMEYgVmFsaWRhdGlvbicsICdBd2FyZCB0aXRsZSBpcyByZXF1aXJlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgYWN0aW9uID0gaWR4ID49IDAgPyAndXBkYXRlJyA6ICdhZGQnO1xuICBjb25zdCByZWxldmFudFJhdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC1yZWxldmFudC1pbnB1dCcpLnZhbHVlO1xuICBjb25zdCBib2R5ID0ge1xuICAgIGFjdGlvbiwgdGl0bGUsXG4gICAgeWVhcjogICAgICAgICBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXdhcmQteWVhci1pbnB1dCcpLnZhbHVlLCAxMCkgfHwgbnVsbCxcbiAgICBkZXNjcmlwdGlvbjogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC1kZXNjLWlucHV0JykudmFsdWUudHJpbSgpLFxuICAgIHJlbGV2YW50X2ZvcjogcmVsZXZhbnRSYXcuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLFxuICAgIC4uLihhY3Rpb24gPT09ICd1cGRhdGUnID8geyBpZHggfSA6IHt9KSxcbiAgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvYXdhcmQnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjbG9zZUF3YXJkTW9kYWwoKTtcbiAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ0F3YXJkcyAmIEhvbm91cnMnLCBkYXRhLmFjdGlvbiB8fCAndXBkYXRlZCcpO1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBTYXZlZCcsIGBBd2FyZCBcIiR7dGl0bGV9XCIgJHtkYXRhLmFjdGlvbn0uYCk7XG4gICAgICBhd2FpdCBwb3B1bGF0ZU1hc3RlclRhYigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGF0YS5lcnJvciB8fCAnU2F2ZSBmYWlsZWQnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0ZhaWxlZCB0byBzYXZlIGF3YXJkJyk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlTWFzdGVyQXdhcmQoaWR4LCB0aXRsZSkge1xuICBzaG93Q29uZmlybU1vZGFsKFxuICAgICdcdUQ4M0RcdURERDFcdUZFMEYgRGVsZXRlIEF3YXJkJyxcbiAgICBgRGVsZXRlIFwiJHt0aXRsZX1cIj8gVGhpcyBjYW5ub3QgYmUgdW5kb25lLmAsXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL2F3YXJkJywge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogJ2RlbGV0ZScsIGlkeCB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBpZiAoZGF0YS5vaykge1xuICAgICAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ0F3YXJkcyAmIEhvbm91cnMnLCBkYXRhLmFjdGlvbiB8fCAnZGVsZXRlZCcpO1xuICAgICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3MDUgRGVsZXRlZCcsIGBBd2FyZCByZW1vdmVkLmApO1xuICAgICAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGRhdGEuZXJyb3IgfHwgJ0RlbGV0ZSBmYWlsZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0ZhaWxlZCB0byBkZWxldGUgYXdhcmQnKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59XG5cbi8vIC0tLS0gQ2VydGlmaWNhdGlvbiBDUlVEIGhhbmRsZXJzIC0tLS1cblxuZnVuY3Rpb24gc2hvd0FkZENlcnRpZmljYXRpb25Nb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NlcnQtbW9kYWwtaWR4JykudmFsdWUgICAgPSAnLTEnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2VydC1uYW1lLWlucHV0JykudmFsdWUgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2VydC1pc3N1ZXItaW5wdXQnKS52YWx1ZSA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2VydC15ZWFyLWlucHV0JykudmFsdWUgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWNlcnQtbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9ICdBZGQgQ2VydGlmaWNhdGlvbic7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItY2VydC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1jZXJ0LW1vZGFsLW92ZXJsYXknKTtcbiAgdHJhcEZvY3VzKCdtYXN0ZXItY2VydC1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGVkaXRNYXN0ZXJDZXJ0aWZpY2F0aW9uKGNlcnQsIGlkeCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2VydC1tb2RhbC1pZHgnKS52YWx1ZSAgICA9IGlkeDtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NlcnQtbmFtZS1pbnB1dCcpLnZhbHVlICAgPSBjZXJ0Lm5hbWUgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZXJ0LWlzc3Vlci1pbnB1dCcpLnZhbHVlID0gY2VydC5pc3N1ZXIgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZXJ0LXllYXItaW5wdXQnKS52YWx1ZSAgID0gY2VydC55ZWFyIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWNlcnQtbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9ICdFZGl0IENlcnRpZmljYXRpb24nO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWNlcnQtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgc2V0SW5pdGlhbEZvY3VzKCdtYXN0ZXItY2VydC1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbWFzdGVyLWNlcnQtbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBjbG9zZUNlcnRpZmljYXRpb25Nb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1jZXJ0LW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXN0b3JlRm9jdXMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZU1hc3RlckNlcnRpZmljYXRpb24oKSB7XG4gIGNvbnN0IGlkeCAgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2VydC1tb2RhbC1pZHgnKS52YWx1ZSwgMTApO1xuICBjb25zdCBuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NlcnQtbmFtZS1pbnB1dCcpLnZhbHVlLnRyaW0oKTtcbiAgaWYgKCFuYW1lKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjZBMFx1RkUwRiBWYWxpZGF0aW9uJywgJ0NlcnRpZmljYXRpb24gbmFtZSBpcyByZXF1aXJlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgYWN0aW9uID0gaWR4ID49IDAgPyAndXBkYXRlJyA6ICdhZGQnO1xuICBjb25zdCBib2R5ID0ge1xuICAgIGFjdGlvbiwgbmFtZSxcbiAgICBpc3N1ZXI6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZXJ0LWlzc3Vlci1pbnB1dCcpLnZhbHVlLnRyaW0oKSxcbiAgICB5ZWFyOiAgIHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZXJ0LXllYXItaW5wdXQnKS52YWx1ZSwgMTApIHx8IG51bGwsXG4gICAgLi4uKGFjdGlvbiA9PT0gJ3VwZGF0ZScgPyB7IGlkeCB9IDoge30pLFxuICB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9jZXJ0aWZpY2F0aW9uJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LCBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgY2xvc2VDZXJ0aWZpY2F0aW9uTW9kYWwoKTtcbiAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ0NlcnRpZmljYXRpb25zJywgZGF0YS5hY3Rpb24gfHwgJ3VwZGF0ZWQnKTtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3MDUgU2F2ZWQnLCBgQ2VydGlmaWNhdGlvbiBcIiR7bmFtZX1cIiAke2RhdGEuYWN0aW9ufS5gKTtcbiAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdTYXZlIGZhaWxlZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIHNhdmUgY2VydGlmaWNhdGlvbicpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZU1hc3RlckNlcnRpZmljYXRpb24oaWR4LCBuYW1lKSB7XG4gIHNob3dDb25maXJtTW9kYWwoXG4gICAgJ1x1RDgzRFx1REREMVx1RkUwRiBEZWxldGUgQ2VydGlmaWNhdGlvbicsXG4gICAgYERlbGV0ZSBcIiR7bmFtZX1cIj8gVGhpcyBjYW5ub3QgYmUgdW5kb25lLmAsXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL2NlcnRpZmljYXRpb24nLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiAnZGVsZXRlJywgaWR4IH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnQ2VydGlmaWNhdGlvbnMnLCBkYXRhLmFjdGlvbiB8fCAnZGVsZXRlZCcpO1xuICAgICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3MDUgRGVsZXRlZCcsIGBDZXJ0aWZpY2F0aW9uIHJlbW92ZWQuYCk7XG4gICAgICAgICAgYXdhaXQgcG9wdWxhdGVNYXN0ZXJUYWIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGF0YS5lcnJvciB8fCAnRGVsZXRlIGZhaWxlZCcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIGRlbGV0ZSBjZXJ0aWZpY2F0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICApO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgQmFja3VwIEhpc3RvcnkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5CYWNrdXBIaXN0b3J5TW9kYWwoKSB7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgb3ZlcmxheS5pZCA9ICdiYWNrdXAtaGlzdG9yeS1vdmVybGF5JztcbiAgb3ZlcmxheS5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNSk7ei1pbmRleDoxMDAwMDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7JztcbiAgb3ZlcmxheS5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBhcmlhLWxhYmVsbGVkYnk9XCJiYWNrdXAtbW9kYWwtdGl0bGVcIlxuICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MjRweCAyOHB4O21heC13aWR0aDo1NjBweDt3aWR0aDo5NCU7XG4gICAgICAgICAgICAgICAgbWF4LWhlaWdodDo4MHZoO292ZXJmbG93LXk6YXV0bztib3gtc2hhZG93OjAgMjBweCA2MHB4IHJnYmEoMCwwLDAsMC4zKTtcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgICAgPGgzIGlkPVwiYmFja3VwLW1vZGFsLXRpdGxlXCIgc3R5bGU9XCJtYXJnaW46MDtmb250LXNpemU6MS4xZW07Y29sb3I6IzFlMjkzYjtcIj5cdUQ4M0RcdURENTAgQmFja3VwIEhpc3Rvcnk8L2gzPlxuICAgICAgICA8YnV0dG9uIGlkPVwiYmFja3VwLW1vZGFsLWNsb3NlXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjEuM2VtO2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2NDc0OGI7XCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XHUyNzE1PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOjAuODhlbTtjb2xvcjojNjQ3NDhiO21hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgICAgQSBiYWNrdXAgaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJlZm9yZSBldmVyeSBzYXZlLiBSZXN0b3Jpbmcgd2lsbCBwcmVzZXJ2ZSB0aGUgY3VycmVudCB2ZXJzaW9uIGFzIGEgbmV3IGJhY2t1cCBmaXJzdC5cbiAgICAgIDwvcD5cbiAgICAgIDxkaXYgaWQ9XCJiYWNrdXAtbGlzdC1ib2R5XCIgc3R5bGU9XCJmb250LXNpemU6MC45ZW07XCI+TG9hZGluZ1x1MjAyNjwvZGl2PlxuICAgIDwvZGl2PmA7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3ZlcmxheSk7XG4gIGlmICh0eXBlb2YgdHJhcEZvY3VzID09PSAnZnVuY3Rpb24nKSB0cmFwRm9jdXMoJ2JhY2t1cC1oaXN0b3J5LW92ZXJsYXknKTtcbiAgY29uc3QgY2xvc2UgPSAoKSA9PiB7IG92ZXJsYXkucmVtb3ZlKCk7IGlmICh0eXBlb2YgcmVzdG9yZUZvY3VzID09PSAnZnVuY3Rpb24nKSByZXN0b3JlRm9jdXMoKTsgfTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2t1cC1tb2RhbC1jbG9zZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xvc2UpO1xuICBvdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7IGlmIChlLnRhcmdldCA9PT0gb3ZlcmxheSkgY2xvc2UoKTsgfSk7XG4gIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGUgPT4geyBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBjbG9zZSgpOyB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL2hpc3RvcnknKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2t1cC1saXN0LWJvZHknKTtcbiAgICBpZiAoIWJvZHkpIHJldHVybjtcbiAgICBpZiAoIWRhdGEub2sgfHwgIWRhdGEuc25hcHNob3RzPy5sZW5ndGgpIHtcbiAgICAgIGJvZHkudGV4dENvbnRlbnQgPSAnTm8gYmFja3VwcyBmb3VuZC4nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByb3dzID0gZGF0YS5zbmFwc2hvdHMubWFwKHMgPT4ge1xuICAgICAgY29uc3QgZHQgPSBuZXcgRGF0ZShzLm10aW1lICogMTAwMCkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgIGNvbnN0IGtiID0gKHMuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSk7XG4gICAgICByZXR1cm4gYDx0cj5cbiAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O2NvbG9yOiMxZTI5M2I7XCI+JHtlc2NhcGVIdG1sKGR0KX08L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7Y29sb3I6IzY0NzQ4Yjt3aGl0ZS1zcGFjZTpub3dyYXA7XCI+JHtrYn0gS0I8L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7XCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gc2Vjb25kYXJ5XCIgc3R5bGU9XCJwYWRkaW5nOjNweCAxMHB4O2ZvbnQtc2l6ZTowLjgyZW07XCJcbiAgICAgICAgICAgIG9uY2xpY2s9XCJyZXN0b3JlQmFja3VwKCR7SlNPTi5zdHJpbmdpZnkocy5maWxlbmFtZSl9KVwiPlJlc3RvcmU8L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+YDtcbiAgICB9KS5qb2luKCcnKTtcbiAgICBib2R5LmlubmVySFRNTCA9IGA8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtcIj5cbiAgICAgIDx0aGVhZD48dHIgc3R5bGU9XCJib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTJlOGYwO1wiPlxuICAgICAgICA8dGggc3R5bGU9XCJwYWRkaW5nOjRweCA4cHg7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiM0NzU1Njk7Zm9udC13ZWlnaHQ6NjAwO1wiPlNhdmVkPC90aD5cbiAgICAgICAgPHRoIHN0eWxlPVwicGFkZGluZzo0cHggOHB4O3RleHQtYWxpZ246bGVmdDtjb2xvcjojNDc1NTY5O2ZvbnQtd2VpZ2h0OjYwMDtcIj5TaXplPC90aD5cbiAgICAgICAgPHRoPjwvdGg+XG4gICAgICA8L3RyPjwvdGhlYWQ+XG4gICAgICA8dGJvZHk+JHtyb3dzfTwvdGJvZHk+XG4gICAgPC90YWJsZT5gO1xuICB9IGNhdGNoIChfKSB7XG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYWNrdXAtbGlzdC1ib2R5Jyk7XG4gICAgaWYgKGJvZHkpIGJvZHkudGV4dENvbnRlbnQgPSAnRmFpbGVkIHRvIGxvYWQgYmFja3VwIGhpc3RvcnkuJztcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXN0b3JlQmFja3VwKGZpbGVuYW1lKSB7XG4gIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0ICh0eXBlb2YgY29uZmlybURpYWxvZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gY29uZmlybURpYWxvZygnUmVzdG9yZSB0aGlzIGJhY2t1cD8gVGhlIGN1cnJlbnQgdmVyc2lvbiB3aWxsIGJlIHNhdmVkIGFzIGEgbmV3IGJhY2t1cCBmaXJzdC4nKVxuICAgIDogUHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5jb25maXJtKCdSZXN0b3JlIHRoaXMgYmFja3VwPyBUaGUgY3VycmVudCB2ZXJzaW9uIHdpbGwgYmUgc2F2ZWQgYXMgYSBuZXcgYmFja3VwIGZpcnN0LicpKSk7XG4gIGlmICghY29uZmlybWVkKSByZXR1cm47XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvcmVzdG9yZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGZpbGVuYW1lIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFja3VwLWhpc3Rvcnktb3ZlcmxheScpPy5yZW1vdmUoKTtcbiAgICAgIGlmICh0eXBlb2YgcmVzdG9yZUZvY3VzID09PSAnZnVuY3Rpb24nKSByZXN0b3JlRm9jdXMoKTtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3MDUgUmVzdG9yZWQnLCAnTWFzdGVyIENWIHJlc3RvcmVkIGZyb20gYmFja3VwLiBSZWxvYWQgdGhlIHRhYiB0byBzZWUgdGhlIHVwZGF0ZWQgZGF0YS4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGRhdGEuZXJyb3IgfHwgJ1Jlc3RvcmUgZmFpbGVkLicpO1xuICAgIH1cbiAgfSBjYXRjaCAoXykge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIHJlc3RvcmUgYmFja3VwLicpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBVbmRvIC8gUmVkbyAoR0FQLTE5IDE2LjcpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuLy8gU2luZ2xlLWxldmVsOiBVbmRvIHJlc3RvcmVzIHRoZSBtb3N0IHJlY2VudCBiYWNrdXAgc25hcHNob3QgKGkuZS4gdGhlXG4vLyBzdGF0ZSBiZWZvcmUgdGhlIGxhc3Qgc2F2ZSk7IFJlZG8gcmVzdG9yZXMgdGhlIHNhZmV0eSBiYWNrdXAgdGhlIHJlc3RvcmVcbi8vIGVuZHBvaW50IHRvb2sgb2YgdGhlIHByZS11bmRvIHN0YXRlLiBCb3RoIHJldXNlIHRoZSBleGlzdGluZ1xuLy8gL2FwaS9tYXN0ZXItZGF0YS9oaXN0b3J5ICsgL2FwaS9tYXN0ZXItZGF0YS9yZXN0b3JlIGVuZHBvaW50cyByYXRoZXIgdGhhblxuLy8gYWRkaW5nIG5ldyBiYWNrZW5kIHN1cmZhY2UgXHUyMDE0IHNlZSBfbWFzdGVyQ3ZSZWRvQmFja3VwIGFib3ZlIGZvciB0aGUgcmVzZXRcbi8vIGNvbnRyYWN0IHdpdGggcG9wdWxhdGVNYXN0ZXJUYWIoKS5cblxuYXN5bmMgZnVuY3Rpb24gdW5kb01hc3RlckRhdGFDaGFuZ2UoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvaGlzdG9yeScpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmICghZGF0YS5vayB8fCAhZGF0YS5zbmFwc2hvdHM/Lmxlbmd0aCkge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjEzOVx1RkUwRiBOb3RoaW5nIHRvIHVuZG8nLCAnTm8gYmFja3VwIHNuYXBzaG90cyBhcmUgYXZhaWxhYmxlIHlldC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbW9zdFJlY2VudCA9IGRhdGEuc25hcHNob3RzWzBdOyAvLyBoaXN0b3J5IHJvdXRlIHJldHVybnMgbmV3ZXN0LWZpcnN0XG4gICAgY29uc3Qgd2hlbiA9IG5ldyBEYXRlKG1vc3RSZWNlbnQubXRpbWUgKiAxMDAwKS50b0xvY2FsZVN0cmluZygpO1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0ICh0eXBlb2YgY29uZmlybURpYWxvZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBjb25maXJtRGlhbG9nKGBVbmRvIHRoZSBtb3N0IHJlY2VudCBjaGFuZ2U/IFRoaXMgcmVzdG9yZXMgdGhlIHZlcnNpb24gc2F2ZWQgJHt3aGVufS4gVGhlIGN1cnJlbnQgdmVyc2lvbiB3aWxsIGJlIHNhdmVkIGFzIGEgbmV3IGJhY2t1cCBmaXJzdC5gKVxuICAgICAgOiBQcm9taXNlLnJlc29sdmUod2luZG93LmNvbmZpcm0oYFVuZG8gdGhlIG1vc3QgcmVjZW50IGNoYW5nZT8gVGhpcyByZXN0b3JlcyB0aGUgdmVyc2lvbiBzYXZlZCAke3doZW59LmApKSk7XG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHJlc3RvcmVSZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9yZXN0b3JlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZmlsZW5hbWU6IG1vc3RSZWNlbnQuZmlsZW5hbWUgfSksXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdG9yZURhdGEgPSBhd2FpdCByZXN0b3JlUmVzLmpzb24oKTtcbiAgICBpZiAocmVzdG9yZURhdGEub2spIHtcbiAgICAgIC8vIE11c3QgYmUgc2V0ICpiZWZvcmUqIHBvcHVsYXRlTWFzdGVyVGFiKCkgcmVuZGVycyB0aGUgUmVkbyBidXR0b24sXG4gICAgICAvLyBub3QgYWZ0ZXIgXHUyMDE0IHRoZSBidXR0b24ncyBkaXNhYmxlZCBzdGF0ZSBpcyBiYWtlZCBpbnRvIHRoYXQgcmVuZGVyLlxuICAgICAgX21hc3RlckN2UmVkb0JhY2t1cCA9IHJlc3RvcmVEYXRhLnNhZmV0eV9iYWNrdXAgfHwgbnVsbDtcbiAgICAgIF9tYXN0ZXJDdlN1cHByZXNzUmVkb1Jlc2V0ID0gdHJ1ZTtcbiAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IFVuZG9uZScsICdNYXN0ZXIgQ1YgcmV2ZXJ0ZWQgdG8gdGhlIHByZXZpb3VzIHNhdmVkIHZlcnNpb24uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCByZXN0b3JlRGF0YS5lcnJvciB8fCAnVW5kbyBmYWlsZWQuJyk7XG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gdW5kby4nKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWRvTWFzdGVyRGF0YUNoYW5nZSgpIHtcbiAgaWYgKCFfbWFzdGVyQ3ZSZWRvQmFja3VwKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjEzOVx1RkUwRiBOb3RoaW5nIHRvIHJlZG8nLCAnVGhlcmUgaXMgbm8gdW5kb25lIGNoYW5nZSB0byByZXN0b3JlLicpO1xuICAgIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL3Jlc3RvcmUnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBmaWxlbmFtZTogX21hc3RlckN2UmVkb0JhY2t1cCB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgLy8gRGVsaWJlcmF0ZWx5IGRvIG5vdCByZS1hcm0gcmVkbyBcdTIwMTQgdGhpcyByZXN0b3JlIGNvbnN1bWVzIHRoZSByZWRvXG4gICAgICAvLyB0YXJnZXQsIGFuZCBwb3B1bGF0ZU1hc3RlclRhYigpJ3MgZGVmYXVsdCByZXNldCBjbGVhcnMgaXQuXG4gICAgICBhd2FpdCBwb3B1bGF0ZU1hc3RlclRhYigpO1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBSZWRvbmUnLCAnTWFzdGVyIENWIHJlc3RvcmVkIHRvIHRoZSB2ZXJzaW9uIGJlZm9yZSB0aGUgdW5kby4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGRhdGEuZXJyb3IgfHwgJ1JlZG8gZmFpbGVkLicpO1xuICAgIH1cbiAgfSBjYXRjaCAoXykge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIHJlZG8uJyk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhwb3J0TWFzdGVyQ1YoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gd2luZG93Ll9jdXJyZW50U2Vzc2lvbklkO1xuICAgIGNvbnN0IHVybCA9IGAvYXBpL21hc3Rlci1kYXRhL2V4cG9ydCR7c2Vzc2lvbklkID8gYD9zZXNzaW9uX2lkPSR7c2Vzc2lvbklkfWAgOiAnJ31gO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRXhwb3J0IGZhaWxlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzLmJsb2IoKTtcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGEuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgYS5kb3dubG9hZCA9ICdNYXN0ZXJfQ1ZfRGF0YS5qc29uJztcbiAgICBhLmNsaWNrKCk7XG4gICAgVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gZXhwb3J0IG1hc3RlciBDVicpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBGdWxsIGRhdGEgcHJldmlldyAoR0FQLTE5IDE2LjE1KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gb3BlbkZ1bGxEYXRhUHJldmlld01vZGFsKCkge1xuICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG92ZXJsYXkuaWQgPSAnbWFzdGVyLWN2LXByZXZpZXctb3ZlcmxheSc7XG4gIG92ZXJsYXkuc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO3otaW5kZXg6MTAwMDA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyc7XG4gIG92ZXJsYXkuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCIgYXJpYS1sYWJlbGxlZGJ5PVwibWFzdGVyLWN2LXByZXZpZXctdGl0bGVcIlxuICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MjRweCAyOHB4O21heC13aWR0aDo3NjBweDt3aWR0aDo5NCU7XG4gICAgICAgICAgICAgICAgbWF4LWhlaWdodDo4NXZoO292ZXJmbG93LXk6YXV0bztib3gtc2hhZG93OjAgMjBweCA2MHB4IHJnYmEoMCwwLDAsMC4zKTtcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgICAgPGgzIGlkPVwibWFzdGVyLWN2LXByZXZpZXctdGl0bGVcIiBzdHlsZT1cIm1hcmdpbjowO2ZvbnQtc2l6ZToxLjFlbTtjb2xvcjojMWUyOTNiO1wiPlx1RDgzRFx1REM0MSBGdWxsIE1hc3RlciBDViBEYXRhIChyZWFkLW9ubHkpPC9oMz5cbiAgICAgICAgPGJ1dHRvbiBpZD1cIm1hc3Rlci1jdi1wcmV2aWV3LWNsb3NlXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjEuM2VtO2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2NDc0OGI7XCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XHUyNzE1PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtjb2xvcjojNjQ3NDhiO21hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgICAgVGhlIGNvbXBsZXRlLCB1bmZpbHRlcmVkIGNvbnRlbnRzIG9mIDxjb2RlPk1hc3Rlcl9DVl9EYXRhLmpzb248L2NvZGU+IFx1MjAxNCBpbmNsdWRpbmcgYW55IGZpZWxkcyB0aGUgc3RydWN0dXJlZCBlZGl0b3JzIGFib3ZlIGRvbid0IHN1cmZhY2UuXG4gICAgICA8L3A+XG4gICAgICA8cHJlIGlkPVwibWFzdGVyLWN2LXByZXZpZXctYm9keVwiIHN0eWxlPVwiYmFja2dyb3VuZDojZjhmYWZjO2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEycHg7Zm9udC1zaXplOjAuOGVtO2xpbmUtaGVpZ2h0OjEuNTt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7XCI+TG9hZGluZ1x1MjAyNjwvcHJlPlxuICAgIDwvZGl2PmA7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3ZlcmxheSk7XG4gIGlmICh0eXBlb2YgdHJhcEZvY3VzID09PSAnZnVuY3Rpb24nKSB0cmFwRm9jdXMoJ21hc3Rlci1jdi1wcmV2aWV3LW92ZXJsYXknKTtcbiAgY29uc3QgY2xvc2UgPSAoKSA9PiB7IG92ZXJsYXkucmVtb3ZlKCk7IGlmICh0eXBlb2YgcmVzdG9yZUZvY3VzID09PSAnZnVuY3Rpb24nKSByZXN0b3JlRm9jdXMoKTsgfTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1jdi1wcmV2aWV3LWNsb3NlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZSk7XG4gIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4geyBpZiAoZS50YXJnZXQgPT09IG92ZXJsYXkpIGNsb3NlKCk7IH0pO1xuICBvdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4geyBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBjbG9zZSgpOyB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL2Z1bGwnKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1jdi1wcmV2aWV3LWJvZHknKTtcbiAgICBpZiAoYm9keSkgYm9keS50ZXh0Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItY3YtcHJldmlldy1ib2R5Jyk7XG4gICAgaWYgKGJvZHkpIGJvZHkudGV4dENvbnRlbnQgPSAnRmFpbGVkIHRvIGxvYWQgbWFzdGVyIENWIGRhdGEuJztcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgRnVsbC1maWxlIEpTT04gaW1wb3J0IHdpdGggZGlmZiByZXZpZXcgKEdBUC0xOSAxNi4xNikgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4vL1xuLy8gTm90IGEgbWVyZ2U6IGltcG9ydC1jb25maXJtIHJlcGxhY2VzIHRoZSBlbnRpcmUgZmlsZS4gVGhlIGltcG9ydC1wcmV2aWV3XG4vLyBzdGVwJ3Mgc2VjdGlvbi1sZXZlbCBjaGFuZ2VkL2NvdW50IHN1bW1hcnkgaXMgdGhlIHVzZXIncyBjaGFuY2UgdG8gY2F0Y2hcbi8vIGFuIHVuaW50ZW5kZWQgb3ZlcndyaXRlIGJlZm9yZSBjb25maXJtaW5nIFx1MjAxNCBmdWxsIGZpZWxkLWxldmVsIGRpZmZpbmdcbi8vIHdpdGhpbiBhIGNoYW5nZWQgc2VjdGlvbiBpcyBhIGtub3duIHYxIGxpbWl0YXRpb24gKHRoZSBzYW1lIHBvc3R1cmVcbi8vIGFscmVhZHkgYWNjZXB0ZWQgZm9yIG90aGVyIGFkdmlzb3J5LW9ubHkgcmV2aWV3IHN1cmZhY2VzIGluIHRoaXMgdGFiKS5cblxubGV0IF9tYXN0ZXJDdkltcG9ydERhdGEgPSBudWxsO1xuXG5mdW5jdGlvbiB0cmlnZ2VyTWFzdGVyQ3ZJbXBvcnQoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItY3YtaW1wb3J0LWZpbGUtaW5wdXQnKT8uY2xpY2soKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlTWFzdGVyQ3ZJbXBvcnRGaWxlKGV2ZW50KSB7XG4gIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQ/LmZpbGVzPy5bMF07XG4gIGV2ZW50LnRhcmdldC52YWx1ZSA9ICcnOyAvLyBhbGxvdyByZS1zZWxlY3RpbmcgdGhlIHNhbWUgZmlsZW5hbWUgbGF0ZXJcbiAgaWYgKCFmaWxlKSByZXR1cm47XG4gIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gIHJlYWRlci5vbmxvYWQgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHBhcnNlZDtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZShTdHJpbmcocmVhZGVyLnJlc3VsdCkpO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnVGhhdCBmaWxlIGlzIG5vdCB2YWxpZCBKU09OLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRXhwZWN0ZWQgYSBKU09OIG9iamVjdCAoTWFzdGVyX0NWX0RhdGEuanNvbiBzaGFwZSksIG5vdCBhbiBhcnJheSBvciBzY2FsYXIuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IF9zdWJtaXRNYXN0ZXJDdkltcG9ydFByZXZpZXcocGFyc2VkKTtcbiAgfTtcbiAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0ZhaWxlZCB0byByZWFkIHRoZSBzZWxlY3RlZCBmaWxlLicpO1xuICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX3N1Ym1pdE1hc3RlckN2SW1wb3J0UHJldmlldyhwYXJzZWQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9pbXBvcnQtcHJldmlldycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZGF0YTogcGFyc2VkIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmICghZGF0YS5vaykge1xuICAgICAgY29uc3QgZGV0YWlsID0gKGRhdGEudmFsaWRhdGlvbl9lcnJvcnMgfHwgW10pLmpvaW4oJzsgJyk7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGV0YWlsID8gYCR7ZGF0YS5lcnJvcn06ICR7ZGV0YWlsfWAgOiAoZGF0YS5lcnJvciB8fCAnSW1wb3J0IHByZXZpZXcgZmFpbGVkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgX21hc3RlckN2SW1wb3J0RGF0YSA9IHBhcnNlZDtcbiAgICBfc2hvd01hc3RlckN2SW1wb3J0UHJldmlld01vZGFsKGRhdGEuc2VjdGlvbnMgfHwgW10pO1xuICB9IGNhdGNoIChfKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gcHJldmlldyB0aGUgaW1wb3J0LicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9zaG93TWFzdGVyQ3ZJbXBvcnRQcmV2aWV3TW9kYWwoc2VjdGlvbnMpIHtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBvdmVybGF5LmlkID0gJ21hc3Rlci1jdi1pbXBvcnQtb3ZlcmxheSc7XG4gIG92ZXJsYXkuc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO3otaW5kZXg6MTAwMDA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyc7XG4gIGNvbnN0IGNoYW5nZWRTZWN0aW9ucyA9IHNlY3Rpb25zLmZpbHRlcigocykgPT4gcy5jaGFuZ2VkKTtcbiAgY29uc3Qgcm93cyA9IHNlY3Rpb25zLm1hcCgocykgPT4gYFxuICAgIDx0ciBzdHlsZT1cIiR7cy5jaGFuZ2VkID8gJ2JhY2tncm91bmQ6dmFyKC0tY3Ytd2FybmluZy1iZywgI2ZmZmJlYik7JyA6ICcnfVwiPlxuICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O2NvbG9yOiMxZTI5M2I7XCI+JHtlc2NhcGVIdG1sKHMuc2VjdGlvbil9PC90ZD5cbiAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6NnB4IDhweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojNjQ3NDhiO1wiPiR7cy5jdXJyZW50X2NvdW50fTwvdGQ+XG4gICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzY0NzQ4YjtcIj4ke3MubmV3X2NvdW50fTwvdGQ+XG4gICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7XCI+JHtzLmNoYW5nZWQgPyAnXHUyNkEwIGNoYW5nZWQnIDogJ1x1MjAxNCd9PC90ZD5cbiAgICA8L3RyPmApLmpvaW4oJycpO1xuICBvdmVybGF5LmlubmVySFRNTCA9IGBcbiAgICA8ZGl2IHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiIGFyaWEtbGFiZWxsZWRieT1cIm1hc3Rlci1jdi1pbXBvcnQtdGl0bGVcIlxuICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MjRweCAyOHB4O21heC13aWR0aDo2NDBweDt3aWR0aDo5NCU7XG4gICAgICAgICAgICAgICAgbWF4LWhlaWdodDo4NXZoO292ZXJmbG93LXk6YXV0bztib3gtc2hhZG93OjAgMjBweCA2MHB4IHJnYmEoMCwwLDAsMC4zKTtcIj5cbiAgICAgIDxoMyBpZD1cIm1hc3Rlci1jdi1pbXBvcnQtdGl0bGVcIiBzdHlsZT1cIm1hcmdpbjowIDAgMTJweDtmb250LXNpemU6MS4xZW07Y29sb3I6IzFlMjkzYjtcIj5cdTJCMDZcdUZFMEYgSW1wb3J0IE1hc3RlciBDViBEYXRhIFx1MjAxNCBSZXZpZXc8L2gzPlxuICAgICAgPGRpdiByb2xlPVwiYWxlcnRcIiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZjJmMjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMHB4IDE0cHg7bWFyZ2luLWJvdHRvbToxNHB4O2ZvbnQtc2l6ZTowLjg2ZW07Y29sb3I6Izk5MWIxYjtcIj5cbiAgICAgICAgPHN0cm9uZz5UaGlzIHJlcGxhY2VzIHRoZSBlbnRpcmUgZmlsZTwvc3Ryb25nPiwgbm90IGp1c3QgdGhlIGNoYW5nZWQgc2VjdGlvbnMuIEEgYmFja3VwIGlzIGNyZWF0ZWRcbiAgICAgICAgYXV0b21hdGljYWxseSBiZWZvcmUgdGhlIHdyaXRlIFx1MjAxNCBzZWUgXHVEODNEXHVERDUwIEJhY2t1cHMgYWJvdmUgdG8gcmVzdG9yZSBpdCBpZiBuZWVkZWQuXG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtjb2xvcjojNjQ3NDhiO21hcmdpbi1ib3R0b206OHB4O1wiPlxuICAgICAgICAke2NoYW5nZWRTZWN0aW9ucy5sZW5ndGggPyBgJHtjaGFuZ2VkU2VjdGlvbnMubGVuZ3RofSBzZWN0aW9uKHMpIHdvdWxkIGNoYW5nZTpgIDogJ05vIHNlY3Rpb25zIHdvdWxkIGNoYW5nZSBcdTIwMTQgdGhlIHVwbG9hZGVkIGZpbGUgbWF0Y2hlcyB0aGUgY3VycmVudCBkYXRhLid9XG4gICAgICA8L3A+XG4gICAgICA8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MC44NWVtO21hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgICAgPHRoZWFkPjx0ciBzdHlsZT1cImJvcmRlci1ib3R0b206MXB4IHNvbGlkICNlMmU4ZjA7XCI+XG4gICAgICAgICAgPHRoIHN0eWxlPVwicGFkZGluZzo0cHggOHB4O3RleHQtYWxpZ246bGVmdDtjb2xvcjojNDc1NTY5O1wiPlNlY3Rpb248L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cInBhZGRpbmc6NHB4IDhweDtjb2xvcjojNDc1NTY5O1wiPkN1cnJlbnQ8L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cInBhZGRpbmc6NHB4IDhweDtjb2xvcjojNDc1NTY5O1wiPk5ldzwvdGg+XG4gICAgICAgICAgPHRoIHN0eWxlPVwicGFkZGluZzo0cHggOHB4O3RleHQtYWxpZ246bGVmdDtjb2xvcjojNDc1NTY5O1wiPjwvdGg+XG4gICAgICAgIDwvdHI+PC90aGVhZD5cbiAgICAgICAgPHRib2R5PiR7cm93c308L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2dhcDo4cHg7XCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgaWQ9XCJtYXN0ZXItY3YtaW1wb3J0LWNhbmNlbFwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBwcmltYXJ5XCIgaWQ9XCJtYXN0ZXItY3YtaW1wb3J0LWNvbmZpcm1cIiR7Y2hhbmdlZFNlY3Rpb25zLmxlbmd0aCA/ICcnIDogJyBkaXNhYmxlZCd9PkNvbmZpcm0gSW1wb3J0PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICBpZiAodHlwZW9mIHRyYXBGb2N1cyA9PT0gJ2Z1bmN0aW9uJykgdHJhcEZvY3VzKCdtYXN0ZXItY3YtaW1wb3J0LW92ZXJsYXknKTtcbiAgY29uc3QgY2xvc2UgPSAoKSA9PiB7IG92ZXJsYXkucmVtb3ZlKCk7IF9tYXN0ZXJDdkltcG9ydERhdGEgPSBudWxsOyBpZiAodHlwZW9mIHJlc3RvcmVGb2N1cyA9PT0gJ2Z1bmN0aW9uJykgcmVzdG9yZUZvY3VzKCk7IH07XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItY3YtaW1wb3J0LWNhbmNlbCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xvc2UpO1xuICBvdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4geyBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBjbG9zZSgpOyB9KTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1jdi1pbXBvcnQtY29uZmlybScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gY29uZmlybU1hc3RlckN2SW1wb3J0KCkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb25maXJtTWFzdGVyQ3ZJbXBvcnQoKSB7XG4gIGlmICghX21hc3RlckN2SW1wb3J0RGF0YSkgcmV0dXJuO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL2ltcG9ydC1jb25maXJtJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBkYXRhOiBfbWFzdGVyQ3ZJbXBvcnREYXRhIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItY3YtaW1wb3J0LW92ZXJsYXknKT8ucmVtb3ZlKCk7XG4gICAgX21hc3RlckN2SW1wb3J0RGF0YSA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiByZXN0b3JlRm9jdXMgPT09ICdmdW5jdGlvbicpIHJlc3RvcmVGb2N1cygpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBfc2V0TWFzdGVyQ2hhbmdlTm90aWNlKCdNYXN0ZXIgQ1YgRGF0YScsICdpbXBvcnRlZCcpO1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoXG4gICAgICAgICdcdTI3MDUgSW1wb3J0ZWQnLFxuICAgICAgICBgTWFzdGVyIENWIGRhdGEgcmVwbGFjZWQuJHtkYXRhLmNvbW1pdF9oYXNoID8gYCBDb21taXQ6ICR7ZGF0YS5jb21taXRfaGFzaC5zbGljZSgwLCAxMCl9LmAgOiAnJ30ke2RhdGEuZ2l0X2Vycm9yID8gYCAoZ2l0IHdhcm5pbmc6ICR7ZGF0YS5naXRfZXJyb3J9KWAgOiAnJ31gXG4gICAgICApO1xuICAgICAgYXdhaXQgcG9wdWxhdGVNYXN0ZXJUYWIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGV0YWlsID0gKGRhdGEudmFsaWRhdGlvbl9lcnJvcnMgfHwgW10pLmpvaW4oJzsgJyk7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGV0YWlsID8gYCR7ZGF0YS5lcnJvcn06ICR7ZGV0YWlsfWAgOiAoZGF0YS5lcnJvciB8fCAnSW1wb3J0IGZhaWxlZC4nKSk7XG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gaW1wb3J0IG1hc3RlciBDViBkYXRhLicpO1xuICB9XG59XG5cbi8vIC0tLS0gQWNoaWV2ZW1lbnQvU3VtbWFyeSBkZWxldGUgaGFuZGxlcnMgLS0tLVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVNYXN0ZXJBY2hpZXZlbWVudChpZCwgdGl0bGUpIHtcbiAgc2hvd0NvbmZpcm1Nb2RhbChcbiAgICAnXHVEODNEXHVEREQxXHVGRTBGIERlbGV0ZSBBY2hpZXZlbWVudCcsXG4gICAgYERlbGV0ZSBcIiR7dGl0bGV9XCI/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS5gLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS91cGRhdGUtYWNoaWV2ZW1lbnQnLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiAnZGVsZXRlJywgaWQgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgaWYgKGRhdGEub2spIHtcbiAgICAgICAgICBfc2V0TWFzdGVyQ2hhbmdlTm90aWNlKCdTZWxlY3RlZCBBY2hpZXZlbWVudHMnLCBkYXRhLmFjdGlvbiB8fCAnZGVsZXRlZCcpO1xuICAgICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3MDUgRGVsZXRlZCcsIGBBY2hpZXZlbWVudCByZW1vdmVkLmApO1xuICAgICAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGRhdGEuZXJyb3IgfHwgJ0RlbGV0ZSBmYWlsZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0ZhaWxlZCB0byBkZWxldGUgYWNoaWV2ZW1lbnQnKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZU1hc3RlclN1bW1hcnkoa2V5KSB7XG4gIHNob3dDb25maXJtTW9kYWwoXG4gICAgJ1x1RDgzRFx1REREMVx1RkUwRiBEZWxldGUgU3VtbWFyeScsXG4gICAgYERlbGV0ZSBzdW1tYXJ5IHZhcmlhbnQgXCIke2tleX1cIj8gVGhpcyBjYW5ub3QgYmUgdW5kb25lLmAsXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL3VwZGF0ZS1zdW1tYXJ5Jywge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogJ2RlbGV0ZScsIGtleSB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBpZiAoZGF0YS5vaykge1xuICAgICAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ1Byb2Zlc3Npb25hbCBTdW1tYXJpZXMnLCBkYXRhLmFjdGlvbiB8fCAnZGVsZXRlZCcpO1xuICAgICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3MDUgRGVsZXRlZCcsIGBTdW1tYXJ5IFwiJHtrZXl9XCIgcmVtb3ZlZC5gKTtcbiAgICAgICAgICBhd2FpdCBwb3B1bGF0ZU1hc3RlclRhYigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdEZWxldGUgZmFpbGVkJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gZGVsZXRlIHN1bW1hcnknKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59XG5cbmZ1bmN0aW9uIG9wZW5NYXN0ZXJDdk1vZGFsKCkge1xuICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1jdi1tb2RhbC1vdmVybGF5Jyk7XG4gIGlmICghb3ZlcmxheSkgcmV0dXJuO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWN2LW1vZGFsLWJvZHknKTtcbiAgcG9wdWxhdGVNYXN0ZXJUYWIoY29udGFpbmVyKTtcbiAgc2V0SW5pdGlhbEZvY3VzKCdtYXN0ZXItY3YtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1jdi1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlTWFzdGVyQ3ZNb2RhbCgpIHtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItY3YtbW9kYWwtb3ZlcmxheScpO1xuICBpZiAob3ZlcmxheSkgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBfbWFzdGVyQ3ZBY3RpdmVDb250YWluZXIgPSBudWxsO1xuICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJyc7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG5leHBvcnQge1xuICBwb3B1bGF0ZU1hc3RlclRhYixcbiAgb3Blbk1hc3RlckN2TW9kYWwsXG4gIGNsb3NlTWFzdGVyQ3ZNb2RhbCxcbiAgX3JlbmRlclBlcnNvbmFsSW5mb0NhcmQsXG4gIF9yZW5kZXJFeHBlcmllbmNlc0xpc3QsXG4gIF9yZW5kZXJTa2lsbHNTZWN0aW9uLFxuICBfcmVuZGVyRWR1Y2F0aW9uTGlzdCxcbiAgX3JlbmRlckF3YXJkc0xpc3QsXG4gIF9yZW5kZXJDZXJ0aWZpY2F0aW9uc0xpc3QsXG4gIF9yZW5kZXJNYXN0ZXJBY2hpZXZlbWVudHNUYWJsZSxcbiAgX3JlbmRlclN1bW1hcmllc0xpc3QsXG4gIHNob3dBZGRBY2hpZXZlbWVudE1vZGFsLFxuICBlZGl0TWFzdGVyQWNoaWV2ZW1lbnQsXG4gIGNsb3NlTWFzdGVyQWNoTW9kYWwsXG4gIHNhdmVNYXN0ZXJBY2hpZXZlbWVudCxcbiAgc2hvd0FkZFN1bW1hcnlNb2RhbCxcbiAgZWRpdE1hc3RlclN1bW1hcnksXG4gIGNsb3NlTWFzdGVyU3VtTW9kYWwsXG4gIHNhdmVNYXN0ZXJTdW1tYXJ5LFxuICBzaG93RWRpdFBlcnNvbmFsSW5mb01vZGFsLFxuICBjbG9zZVBlcnNvbmFsSW5mb01vZGFsLFxuICBzYXZlUGVyc29uYWxJbmZvLFxuICBzaG93QWRkRXhwZXJpZW5jZU1vZGFsLFxuICBlZGl0TWFzdGVyRXhwZXJpZW5jZSxcbiAgY2xvc2VFeHBlcmllbmNlTW9kYWwsXG4gIHNhdmVNYXN0ZXJFeHBlcmllbmNlLFxuICBkZWxldGVNYXN0ZXJFeHBlcmllbmNlLFxuICBfYWRkRXhwQWNoaWV2ZW1lbnQsXG4gIF9tb3ZlRXhwQWNoaWV2ZW1lbnQsXG4gIF9kZWxldGVFeHBBY2hpZXZlbWVudCxcbiAgc2hvd0FkZFNraWxsTW9kYWwsXG4gIGVkaXRNYXN0ZXJTa2lsbCxcbiAgY2xvc2VTa2lsbE1vZGFsLFxuICBzYXZlTWFzdGVyU2tpbGwsXG4gIGRlbGV0ZU1hc3RlclNraWxsLFxuICBzaG93QWRkRWR1Y2F0aW9uTW9kYWwsXG4gIGVkaXRNYXN0ZXJFZHVjYXRpb24sXG4gIGNsb3NlRWR1Y2F0aW9uTW9kYWwsXG4gIHNhdmVNYXN0ZXJFZHVjYXRpb24sXG4gIGRlbGV0ZU1hc3RlckVkdWNhdGlvbixcbiAgc2hvd0FkZEF3YXJkTW9kYWwsXG4gIGVkaXRNYXN0ZXJBd2FyZCxcbiAgY2xvc2VBd2FyZE1vZGFsLFxuICBzYXZlTWFzdGVyQXdhcmQsXG4gIGRlbGV0ZU1hc3RlckF3YXJkLFxuICBzaG93QWRkQ2VydGlmaWNhdGlvbk1vZGFsLFxuICBlZGl0TWFzdGVyQ2VydGlmaWNhdGlvbixcbiAgY2xvc2VDZXJ0aWZpY2F0aW9uTW9kYWwsXG4gIHNhdmVNYXN0ZXJDZXJ0aWZpY2F0aW9uLFxuICBkZWxldGVNYXN0ZXJDZXJ0aWZpY2F0aW9uLFxuICBleHBvcnRNYXN0ZXJDVixcbiAgb3BlbkJhY2t1cEhpc3RvcnlNb2RhbCxcbiAgcmVzdG9yZUJhY2t1cCxcbiAgdW5kb01hc3RlckRhdGFDaGFuZ2UsXG4gIHJlZG9NYXN0ZXJEYXRhQ2hhbmdlLFxuICBvcGVuRnVsbERhdGFQcmV2aWV3TW9kYWwsXG4gIHRyaWdnZXJNYXN0ZXJDdkltcG9ydCxcbiAgaGFuZGxlTWFzdGVyQ3ZJbXBvcnRGaWxlLFxuICBjb25maXJtTWFzdGVyQ3ZJbXBvcnQsXG4gIGRlbGV0ZU1hc3RlckFjaGlldmVtZW50LFxuICBkZWxldGVNYXN0ZXJTdW1tYXJ5LFxuICBsb2FkUHVibGljYXRpb25zLFxuICBsb2FkUHVibGljYXRpb25zQmliLFxuICB0b2dnbGVQdWJsaWNhdGlvbnNWaWV3LFxuICBzZXRQdWJsaWNhdGlvblNvcnRNb2RlLFxuICBzZXRQdWJsaWNhdGlvbkdyb3VwTW9kZSxcbiAgdmFsaWRhdGVQdWJsaWNhdGlvbnNCaWIsXG4gIHNhdmVQdWJsaWNhdGlvbnNCaWIsXG4gIHNob3dJbXBvcnRQdWJsaWNhdGlvbnNNb2RhbCxcbiAgY2xvc2VJbXBvcnRQdWJsaWNhdGlvbnNNb2RhbCxcbiAgaW1wb3J0UHVibGljYXRpb25zQmliLFxuICBzaG93Q29udmVydFB1YmxpY2F0aW9uc01vZGFsLFxuICBjbG9zZUNvbnZlcnRQdWJsaWNhdGlvbnNNb2RhbCxcbiAgY29udmVydFB1YmxpY2F0aW9uVGV4dCxcbiAgaW1wb3J0Q29udmVydGVkUHVibGljYXRpb25UZXh0LFxuICBzaG93QWRkUHVibGljYXRpb25Nb2RhbCxcbiAgZWRpdE1hc3RlclB1YmxpY2F0aW9uLFxuICBjbG9zZVB1YmxpY2F0aW9uTW9kYWwsXG4gIHNhdmVNYXN0ZXJQdWJsaWNhdGlvbixcbiAgZGVsZXRlTWFzdGVyUHVibGljYXRpb24sXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvY292ZXItbGV0dGVyLmpzXG4gKiBDb3ZlciBsZXR0ZXIgdGFiOiBnZW5lcmF0ZSwgc2F2ZSwgdmFsaWRhdGUsIGNvbnNpc3RlbmN5IHJlcG9ydC5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgZXNjYXBlSHRtbCwgc2hvd0FsZXJ0TW9kYWwsIHRhYkRhdGEsIHBlbmRpbmdSZWNvbW1lbmRhdGlvbnMsIENTU1xuICovXG5cbmltcG9ydCB7IHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMCBNb2R1bGUtbGV2ZWwgc3RhdGUgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmNvbnN0IENPVkVSX0xFVFRFUl9UT05FUyA9IFtcbiAgeyB2YWx1ZTogJ3N0YXJ0dXAvdGVjaCcsICAgbGFiZWw6ICdTdGFydHVwIC8gVGVjaCcgICAgfSxcbiAgeyB2YWx1ZTogJ3BoYXJtYS9iaW90ZWNoJywgbGFiZWw6ICdQaGFybWEgLyBCaW90ZWNoJyAgfSxcbiAgeyB2YWx1ZTogJ2FjYWRlbWlhJywgICAgICAgbGFiZWw6ICdBY2FkZW1pYScgICAgICAgICAgIH0sXG4gIHsgdmFsdWU6ICdmaW5hbmNpYWwnLCAgICAgIGxhYmVsOiAnRmluYW5jaWFsIFNlcnZpY2VzJyB9LFxuICB7IHZhbHVlOiAnbGVhZGVyc2hpcCcsICAgICBsYWJlbDogJ0xlYWRlcnNoaXAgLyBFeGVjJyAgfSxcbl07XG5cbmNvbnN0IENPVkVSX0xFVFRFUl9PUEVOSU5HUyA9IFtcbiAgeyB2YWx1ZTogJ2Zvcm1hbCcsICAgIGxhYmVsOiAnRm9ybWFsIHNhbHV0YXRpb24gXHUyMDE0IFx1MjAxQ0RlYXIgW25hbWVdLFx1MjAxRCcgfSxcbiAgeyB2YWx1ZTogJ2hvb2snLCAgICAgIGxhYmVsOiAnQXR0ZW50aW9uIGhvb2sgXHUyMDE0IGJvbGQgY2xhaW0gb3IgYWNoaWV2ZW1lbnQnIH0sXG4gIHsgdmFsdWU6ICduYXJyYXRpdmUnLCBsYWJlbDogJ05hcnJhdGl2ZSBvcGVuZXIgXHUyMDE0IHZpdmlkIHNjZW5lIG9yIHN0b3J5JyB9LFxuXTtcblxubGV0IF9jb3ZlckxldHRlclByaW9yU2Vzc2lvbnMgPSBbXTtcblxuLyoqIFN1cnZpdmVzIHRhYiBuYXZpZ2F0aW9uOiBmb3JtIGlucHV0cyBhbmQgdGhlIGdlbmVyYXRlZCBsZXR0ZXIgYm9keS4gKi9cbmxldCBfY292ZXJMZXR0ZXJGb3JtU3RhdGUgPSB7XG4gIHRvbmU6ICAgICAgICAgICAnJyxcbiAgb3BlbmluZ1N0eWxlOiAgICcnLFxuICBoaXJpbmdNYW5hZ2VyOiAgJycsXG4gIGNvbXBhbnlBZGRyZXNzOiAnJyxcbiAgaGlnaGxpZ2h0OiAgICAgICcnLFxuICBjb21wYW55Q29udGV4dDogJycsXG4gIGxldHRlclRleHQ6ICAgICAnJyxcbiAgbGV0dGVyVmlzaWJsZTogIGZhbHNlLFxufTtcblxuLy8gXHUyNTAwXHUyNTAwIFBvcHVsYXRlIGNvdmVyIGxldHRlciB0YWIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHBvcHVsYXRlQ292ZXJMZXR0ZXJUYWIoKSB7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICBjb250ZW50LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj48ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+PC9kaXY+PHAgc3R5bGU9XCJtYXJnaW4tdG9wOjEycHg7Y29sb3I6IzY0NzQ4YjtcIj5Mb2FkaW5nIGNvdmVyIGxldHRlclx1MjAyNjwvcD48L2Rpdj4nO1xuXG4gIC8vIEZldGNoIHByaW9yIHNlc3Npb25zIHdpdGggY292ZXIgbGV0dGVyc1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9jb3Zlci1sZXR0ZXIvcHJpb3InKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBfY292ZXJMZXR0ZXJQcmlvclNlc3Npb25zID0gKGRhdGEuc2Vzc2lvbnMgfHwgW10pO1xuICB9IGNhdGNoIChfKSB7XG4gICAgX2NvdmVyTGV0dGVyUHJpb3JTZXNzaW9ucyA9IFtdO1xuICB9XG5cbiAgY29uc3QgdG9uZU9wdGlvbnMgPSBDT1ZFUl9MRVRURVJfVE9ORVMubWFwKHQgPT5cbiAgICBgPG9wdGlvbiB2YWx1ZT1cIiR7dC52YWx1ZX1cIj4ke2VzY2FwZUh0bWwodC5sYWJlbCl9PC9vcHRpb24+YFxuICApLmpvaW4oJycpO1xuXG4gIGNvbnN0IG9wZW5pbmdPcHRpb25zID0gQ09WRVJfTEVUVEVSX09QRU5JTkdTLm1hcChvID0+XG4gICAgYDxvcHRpb24gdmFsdWU9XCIke28udmFsdWV9XCI+JHtlc2NhcGVIdG1sKG8ubGFiZWwpfTwvb3B0aW9uPmBcbiAgKS5qb2luKCcnKTtcblxuICBjb25zdCBwcmlvclNlY3Rpb24gPSBfY292ZXJMZXR0ZXJQcmlvclNlc3Npb25zLmxlbmd0aCA/IGBcbiAgICA8ZGl2IGNsYXNzPVwiY2wtcHJpb3Itc2VjdGlvblwiPlxuICAgICAgPGgzPlx1RDgzRFx1RENDQiBQcmlvciBDb3ZlciBMZXR0ZXJzPC9oMz5cbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtmb250LXNpemU6MC44NWVtO21hcmdpbi1ib3R0b206MTBweDtcIj5cbiAgICAgICAgU2VsZWN0IGEgcHJpb3IgbGV0dGVyIHRvIHVzZSBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuICAgICAgPC9wPlxuICAgICAgPGRpdiBpZD1cImNsLXByaW9yLWxpc3RcIj5cbiAgICAgICAgJHtfY292ZXJMZXR0ZXJQcmlvclNlc3Npb25zLm1hcCgocywgaSkgPT4gYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbC1wcmlvci1jYXJkXCIgaWQ9XCJjbC1wcmlvci0ke2l9XCI+XG4gICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtjdXJzb3I6cG9pbnRlcjtcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJjbC1wcmlvclwiIHZhbHVlPVwiJHtpfVwiIHN0eWxlPVwibWFyZ2luLXRvcDozcHg7XCIgLz5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPiR7ZXNjYXBlSHRtbChzLnJvbGUgfHwgJ1JvbGUnKX0gYXQgJHtlc2NhcGVIdG1sKHMuY29tcGFueSB8fCAnQ29tcGFueScpfTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6Izk0YTNiODtmb250LXNpemU6MC44MmVtO21hcmdpbi1sZWZ0OjZweDtcIj4ke2VzY2FwZUh0bWwocy5kYXRlIHx8ICcnKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgJHtzLnRvbmUgPyBgPHNwYW4gY2xhc3M9XCJjbC10b25lLWJhZGdlXCI+JHtlc2NhcGVIdG1sKHMudG9uZSl9PC9zcGFuPmAgOiAnJ31cbiAgICAgICAgICAgICAgICA8cCBzdHlsZT1cImNvbG9yOiM2NDc0OGI7Zm9udC1zaXplOjAuODVlbTttYXJnaW46NHB4IDAgMDtcIj4ke2VzY2FwZUh0bWwoKHMucHJldmlldyB8fCAnJykuc2xpY2UoMCwgMTIwKSl9XHUyMDI2PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+YCkuam9pbignJyl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gIDogJyc7XG5cbiAgY29udGVudC5pbm5lckhUTUwgPSBgXG4gICAgPGgxPlx1RDgzRFx1RENFOSBDb3ZlciBMZXR0ZXI8L2gxPlxuICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjIwcHg7XCI+XG4gICAgICBHZW5lcmF0ZSBhIHRhaWxvcmVkIGNvdmVyIGxldHRlciBmb3IgdGhpcyBhcHBsaWNhdGlvbiB1c2luZyB5b3VyIENWIGNvbnRlbnRcbiAgICAgIGFuZCBqb2IgYW5hbHlzaXMgYXMgY29udGV4dC5cbiAgICA8L3A+XG5cbiAgICAke3ByaW9yU2VjdGlvbn1cblxuICAgIDxkaXYgY2xhc3M9XCJjbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgIDxoMz5HZW5lcmF0aW9uIE9wdGlvbnM8L2gzPlxuICAgICAgPGRpdiBjbGFzcz1cImNsLWZvcm0tZ3JpZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2wtZm9ybS1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJjbC10b25lLXNlbGVjdFwiPlRvbmUgLyBJbmR1c3RyeTwvbGFiZWw+XG4gICAgICAgICAgPHNlbGVjdCBpZD1cImNsLXRvbmUtc2VsZWN0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCI+JHt0b25lT3B0aW9uc308L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbC1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImNsLW9wZW5pbmctc3R5bGVcIj5PcGVuaW5nIFN0eWxlPC9sYWJlbD5cbiAgICAgICAgICA8c2VsZWN0IGlkPVwiY2wtb3BlbmluZy1zdHlsZVwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiPiR7b3BlbmluZ09wdGlvbnN9PC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2wtZm9ybS1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJjbC1oaXJpbmctbWFuYWdlclwiPkhpcmluZyBNYW5hZ2VyIE5hbWUvVGl0bGUgPHNwYW4gc3R5bGU9XCJjb2xvcjojOTRhM2I4O2ZvbnQtd2VpZ2h0OjQwMDtcIj4ob3B0aW9uYWwpPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJjbC1oaXJpbmctbWFuYWdlclwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBEci4gSmFuZSBTbWl0aCwgSGVhZCBvZiBEYXRhIFNjaWVuY2VcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNsLWZvcm0tZmllbGRcIiBzdHlsZT1cIm1hcmdpbi10b3A6MTJweDtcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImNsLWNvbXBhbnktYWRkcmVzc1wiPkNvbXBhbnkgQWRkcmVzcyA8c3BhbiBzdHlsZT1cImNvbG9yOiM5NGEzYjg7Zm9udC13ZWlnaHQ6NDAwO1wiPihvcHRpb25hbCk8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgPHRleHRhcmVhIGlkPVwiY2wtY29tcGFueS1hZGRyZXNzXCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgcm93cz1cIjJcIlxuICAgICAgICAgICAgc3R5bGU9XCJyZXNpemU6dmVydGljYWw7XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBBY21lIENvcnAsIDEyMyBNYWluIFN0LCBCb3N0b24gTUEgMDIxMzRcIj48L3RleHRhcmVhPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2wtZm9ybS1maWVsZFwiIHN0eWxlPVwibWFyZ2luLXRvcDoxMnB4O1wiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiY2wtaGlnaGxpZ2h0XCI+U3BlY2lmaWMgYWNoaWV2ZW1lbnQgb3IgcHJvamVjdCB0byBoaWdobGlnaHQgPHNwYW4gc3R5bGU9XCJjb2xvcjojOTRhM2I4O2ZvbnQtd2VpZ2h0OjQwMDtcIj4ob3B0aW9uYWwpPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiY2wtaGlnaGxpZ2h0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBMZWQgdGhlIG1pZ3JhdGlvbiB0byBLdWJlcm5ldGVzIHNhdmluZyAzMCUgaW5mcmEgY29zdFwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjbC1mb3JtLWZpZWxkXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjEycHg7XCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJjbC1jb21wYW55LWNvbnRleHRcIj5Db21wYW55IGNvbnRleHQgPHNwYW4gc3R5bGU9XCJjb2xvcjojOTRhM2I4O2ZvbnQtd2VpZ2h0OjQwMDtcIj4ob3B0aW9uYWwgXHUyMDE0IHBhc3RlIHNwZWNpZmljIGluaXRpYXRpdmVzLCBwcm9kdWN0cywgdmFsdWVzLCBvciByZWNlbnQgbmV3cyk8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgPHRleHRhcmVhIGlkPVwiY2wtY29tcGFueS1jb250ZXh0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgcm93cz1cIjNcIlxuICAgICAgICAgICAgc3R5bGU9XCJyZXNpemU6dmVydGljYWw7XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBUaGV5IGp1c3QgbGF1bmNoZWQgYSBuZXcgQUkgcGxhdGZvcm0gZm9yIGhlYWx0aGNhcmU7IHRoZWlyIENUTyB3cm90ZSBhYm91dCBwcmlvcml0aXNpbmcgcmVsaWFiaWxpdHkgb3ZlciBzcGVlZFx1MjAyNlwiPjwvdGV4dGFyZWE+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjE2cHg7XCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHByaW1hcnlcIiBpZD1cImNsLWdlbmVyYXRlLWJ0blwiIG9uY2xpY2s9XCJnZW5lcmF0ZUNvdmVyTGV0dGVyKClcIj5cbiAgICAgICAgICBcdTI3MjggR2VuZXJhdGUgQ292ZXIgTGV0dGVyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGlkPVwiY2wtcmVzdWx0LXNlY3Rpb25cIiBzdHlsZT1cImRpc3BsYXk6bm9uZTttYXJnaW4tdG9wOjI0cHg7XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2wtcmVzdWx0LWhlYWRlclwiPlxuICAgICAgICA8aDM+R2VuZXJhdGVkIENvdmVyIExldHRlcjwvaDM+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcDtcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJnZW5lcmF0ZUNvdmVyTGV0dGVyKClcIiB0aXRsZT1cIlJlZ2VuZXJhdGVcIj5cdUQ4M0RcdUREMDQgUmVnZW5lcmF0ZTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHByaW1hcnlcIiBvbmNsaWNrPVwic2F2ZUNvdmVyTGV0dGVyKClcIiBpZD1cImNsLXNhdmUtYnRuXCI+XHVEODNEXHVEQ0JFIFNhdmUgQ292ZXIgTGV0dGVyPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjAuODVlbTttYXJnaW4tYm90dG9tOjhweDtcIj5cbiAgICAgICAgRWRpdCB0aGUgdGV4dCBiZWxvdyBiZWZvcmUgc2F2aW5nLlxuICAgICAgPC9wPlxuICAgICAgPHRleHRhcmVhIGlkPVwiY2wtbGV0dGVyLXRleHRhcmVhXCIgY2xhc3M9XCJjbC1sZXR0ZXItdGV4dGFyZWFcIiByb3dzPVwiMjJcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDb3ZlciBsZXR0ZXIgdGV4dCBcdTIwMTQgZWRpdCBhcyBuZWVkZWRcIlxuICAgICAgICAgIG9uaW5wdXQ9XCJfZGVib3VuY2VkVmFsaWRhdGVDTCgpOyBfY292ZXJMZXR0ZXJGb3JtU3RhdGUubGV0dGVyVGV4dCA9IHRoaXMudmFsdWU7XCI+PC90ZXh0YXJlYT5cbiAgICAgIDxkaXYgaWQ9XCJjbC12YWxpZGF0aW9uLXBhbmVsXCIgY2xhc3M9XCJjbC12YWxpZGF0aW9uLXBhbmVsXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XG4gICAgICAgIDxoND5cdUQ4M0RcdURDQ0EgUXVhbGl0eSBDaGVja3M8L2g0PlxuICAgICAgICA8ZGl2IGlkPVwiY2wtY2hlY2tzLWNvbnRhaW5lclwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibmF2LWJ1dHRvbnMgbmF2LWVuZFwiIHN0eWxlPVwibWFyZ2luLXRvcDoyNHB4O1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRpbnVlLWJ0blwiIG9uY2xpY2s9XCJoYW5kbGVTdGVwQ2xpY2soJ3NjcmVlbmluZycpXCI+XHVEODNEXHVEQ0NCIFByb2NlZWQgdG8gU2NyZWVuaW5nIFx1MjE5MjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICBgO1xuXG4gIC8vIFJlc3RvcmUgc2F2ZWQgZm9ybSBzdGF0ZSBhbmQgd2lyZSB1cCBzYXZlLW9uLWNoYW5nZSBsaXN0ZW5lcnMuXG4gIF9yZXN0b3JlQ292ZXJMZXR0ZXJGb3JtU3RhdGUoKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIENvdmVyIGxldHRlciBmb3JtIHN0YXRlIGhlbHBlcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIF9yZXN0b3JlQ292ZXJMZXR0ZXJGb3JtU3RhdGUoKSB7XG4gIGNvbnN0IHRvbmVFbCAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC10b25lLXNlbGVjdCcpO1xuICBjb25zdCBvcGVuaW5nRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2wtb3BlbmluZy1zdHlsZScpO1xuICBjb25zdCBobUVsICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2wtaGlyaW5nLW1hbmFnZXInKTtcbiAgY29uc3QgYWRkckVsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLWNvbXBhbnktYWRkcmVzcycpO1xuICBjb25zdCBobEVsICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2wtaGlnaGxpZ2h0Jyk7XG4gIGNvbnN0IGN0eEVsICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1jb21wYW55LWNvbnRleHQnKTtcbiAgY29uc3QgcmVzdWx0RWwgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLXJlc3VsdC1zZWN0aW9uJyk7XG4gIGNvbnN0IGxldHRlckVsICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1sZXR0ZXItdGV4dGFyZWEnKTtcblxuICBpZiAodG9uZUVsICYmIF9jb3ZlckxldHRlckZvcm1TdGF0ZS50b25lKVxuICAgIHRvbmVFbC52YWx1ZSA9IF9jb3ZlckxldHRlckZvcm1TdGF0ZS50b25lO1xuICBpZiAob3BlbmluZ0VsICYmIF9jb3ZlckxldHRlckZvcm1TdGF0ZS5vcGVuaW5nU3R5bGUpXG4gICAgb3BlbmluZ0VsLnZhbHVlID0gX2NvdmVyTGV0dGVyRm9ybVN0YXRlLm9wZW5pbmdTdHlsZTtcbiAgaWYgKGhtRWwgJiYgX2NvdmVyTGV0dGVyRm9ybVN0YXRlLmhpcmluZ01hbmFnZXIpXG4gICAgaG1FbC52YWx1ZSA9IF9jb3ZlckxldHRlckZvcm1TdGF0ZS5oaXJpbmdNYW5hZ2VyO1xuICBpZiAoYWRkckVsICYmIF9jb3ZlckxldHRlckZvcm1TdGF0ZS5jb21wYW55QWRkcmVzcylcbiAgICBhZGRyRWwudmFsdWUgPSBfY292ZXJMZXR0ZXJGb3JtU3RhdGUuY29tcGFueUFkZHJlc3M7XG4gIGlmIChobEVsICYmIF9jb3ZlckxldHRlckZvcm1TdGF0ZS5oaWdobGlnaHQpXG4gICAgaGxFbC52YWx1ZSA9IF9jb3ZlckxldHRlckZvcm1TdGF0ZS5oaWdobGlnaHQ7XG4gIGlmIChjdHhFbCAmJiBfY292ZXJMZXR0ZXJGb3JtU3RhdGUuY29tcGFueUNvbnRleHQpXG4gICAgY3R4RWwudmFsdWUgPSBfY292ZXJMZXR0ZXJGb3JtU3RhdGUuY29tcGFueUNvbnRleHQ7XG5cbiAgaWYgKF9jb3ZlckxldHRlckZvcm1TdGF0ZS5sZXR0ZXJWaXNpYmxlICYmIF9jb3ZlckxldHRlckZvcm1TdGF0ZS5sZXR0ZXJUZXh0KSB7XG4gICAgaWYgKHJlc3VsdEVsKSByZXN1bHRFbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICBpZiAobGV0dGVyRWwpIHtcbiAgICAgIGxldHRlckVsLnZhbHVlID0gX2NvdmVyTGV0dGVyRm9ybVN0YXRlLmxldHRlclRleHQ7XG4gICAgICBfdmFsaWRhdGVDb3ZlckxldHRlcihsZXR0ZXJFbC52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2lyZSB1cCBzYXZlLW9uLWNoYW5nZSBsaXN0ZW5lcnMgKGlubGluZSBvbmlucHV0IGFscmVhZHkgaGFuZGxlcyBsZXR0ZXJUZXh0KS5cbiAgaWYgKHRvbmVFbCkgICAgdG9uZUVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICAgKCkgPT4geyBfY292ZXJMZXR0ZXJGb3JtU3RhdGUudG9uZSA9IHRvbmVFbC52YWx1ZTsgfSk7XG4gIGlmIChvcGVuaW5nRWwpIG9wZW5pbmdFbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7IF9jb3ZlckxldHRlckZvcm1TdGF0ZS5vcGVuaW5nU3R5bGUgPSBvcGVuaW5nRWwudmFsdWU7IH0pO1xuICBpZiAoaG1FbCkgICAgICBobUVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgICAgICAoKSA9PiB7IF9jb3ZlckxldHRlckZvcm1TdGF0ZS5oaXJpbmdNYW5hZ2VyID0gaG1FbC52YWx1ZTsgfSk7XG4gIGlmIChhZGRyRWwpICAgIGFkZHJFbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICAgICgpID0+IHsgX2NvdmVyTGV0dGVyRm9ybVN0YXRlLmNvbXBhbnlBZGRyZXNzID0gYWRkckVsLnZhbHVlOyB9KTtcbiAgaWYgKGhsRWwpICAgICAgaGxFbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICAgICAgKCkgPT4geyBfY292ZXJMZXR0ZXJGb3JtU3RhdGUuaGlnaGxpZ2h0ID0gaGxFbC52YWx1ZTsgfSk7XG4gIGlmIChjdHhFbCkgICAgIGN0eEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgICAgICgpID0+IHsgX2NvdmVyTGV0dGVyRm9ybVN0YXRlLmNvbXBhbnlDb250ZXh0ID0gY3R4RWwudmFsdWU7IH0pO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgR2VuZXJhdGUgY292ZXIgbGV0dGVyIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNvdmVyTGV0dGVyKCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogY292ZXJfbGV0dGVyX3VpX2dlbmVyYXRlX2xpdmVcbiAgICogICBraW5kOiB1aVxuICAgKiAgIHRpbWVzdGFtcDogJzIwMjYtMDQtMjFUMTg6MDA6MDBaJ1xuICAgKiAgIHN0YXR1czogbGl2ZVxuICAgKiAgIGhhbmRsZXM6XG4gICAqICAgLSB1aTpjb3Zlci1sZXR0ZXIuZ2VuZXJhdGVcbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9jb3Zlci1sZXR0ZXIvZ2VuZXJhdGVcbiAgICogICByZWFkczpcbiAgICogICAtIGRvbTojY2wtdG9uZS1zZWxlY3QudmFsdWVcbiAgICogICAtIGRvbTojY2wtb3BlbmluZy1zdHlsZS52YWx1ZVxuICAgKiAgIC0gZG9tOiNjbC1oaXJpbmctbWFuYWdlci52YWx1ZVxuICAgKiAgIC0gZG9tOiNjbC1jb21wYW55LWFkZHJlc3MudmFsdWVcbiAgICogICAtIGRvbTojY2wtaGlnaGxpZ2h0LnZhbHVlXG4gICAqICAgLSBkb206aW5wdXRbbmFtZT1jbC1wcmlvcl0uY2hlY2tlZFxuICAgKiAgIHdyaXRlczpcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL2NvdmVyLWxldHRlci9nZW5lcmF0ZS50b25lXG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9jb3Zlci1sZXR0ZXIvZ2VuZXJhdGUub3BlbmluZ19zdHlsZVxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvY292ZXItbGV0dGVyL2dlbmVyYXRlLmhpcmluZ19tYW5hZ2VyXG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9jb3Zlci1sZXR0ZXIvZ2VuZXJhdGUuY29tcGFueV9hZGRyZXNzXG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9jb3Zlci1sZXR0ZXIvZ2VuZXJhdGUuaGlnaGxpZ2h0XG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9jb3Zlci1sZXR0ZXIvZ2VuZXJhdGUucmV1c2VfYm9keVxuICAgKiAgIC0gZG9tOiNjbC1sZXR0ZXItdGV4dGFyZWEudmFsdWVcbiAgICogICBub3RlczogU3VibWl0cyBjb3Zlci1sZXR0ZXIgcHJvbXB0IGlucHV0cyAoaW5jbHVkaW5nIGNvbmZpZ3VyYWJsZSBvcGVuaW5nIHN0eWxlKSBhbmQgb3B0aW9uYWwgcmV1c2UgdGV4dCwgdGhlbiB3cml0ZXMgdGhlIGdlbmVyYXRlZCBib2R5IGludG8gdGhlIGVkaXRhYmxlIGNvdmVyLWxldHRlciB0ZXh0YXJlYS5cbiAgICovXG4gIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1nZW5lcmF0ZS1idG4nKTtcbiAgYnRuLmRpc2FibGVkID0gdHJ1ZTtcbiAgYnRuLnRleHRDb250ZW50ID0gJ1x1MjNGMyBHZW5lcmF0aW5nXHUyMDI2JztcblxuICBjb25zdCB0b25lICAgICAgICAgICAgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLXRvbmUtc2VsZWN0JykgICAgICB8fCB7fSkudmFsdWUgfHwgJ3N0YXJ0dXAvdGVjaCc7XG4gIGNvbnN0IG9wZW5pbmdfc3R5bGUgICA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2wtb3BlbmluZy1zdHlsZScpICAgIHx8IHt9KS52YWx1ZSB8fCAnZm9ybWFsJztcbiAgY29uc3QgaGlyaW5nX21hbmFnZXIgID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1oaXJpbmctbWFuYWdlcicpICAgfHwge30pLnZhbHVlIHx8ICcnO1xuICBjb25zdCBjb21wYW55X2FkZHJlc3MgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLWNvbXBhbnktYWRkcmVzcycpICB8fCB7fSkudmFsdWUgfHwgJyc7XG4gIGNvbnN0IGhpZ2hsaWdodCAgICAgICA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2wtaGlnaGxpZ2h0JykgICAgICAgICB8fCB7fSkudmFsdWUgfHwgJyc7XG4gIGNvbnN0IGNvbXBhbnlfY29udGV4dCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2wtY29tcGFueS1jb250ZXh0JykgIHx8IHt9KS52YWx1ZSB8fCAnJztcblxuICAvLyBDaGVjayBmb3IgcHJpb3IgbGV0dGVyIHNlbGVjdGlvblxuICBsZXQgcmV1c2VfYm9keSA9ICcnO1xuICBjb25zdCBjaGVja2VkUHJpb3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwiY2wtcHJpb3JcIl06Y2hlY2tlZCcpO1xuICBpZiAoY2hlY2tlZFByaW9yKSB7XG4gICAgY29uc3QgaWR4ID0gcGFyc2VJbnQoY2hlY2tlZFByaW9yLnZhbHVlLCAxMCk7XG4gICAgcmV1c2VfYm9keSA9IChfY292ZXJMZXR0ZXJQcmlvclNlc3Npb25zW2lkeF0gfHwge30pLmZ1bGxfdGV4dCB8fCAnJztcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL2NvdmVyLWxldHRlci9nZW5lcmF0ZScsIHtcbiAgICAgIG1ldGhvZDogICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogICAgSlNPTi5zdHJpbmdpZnkoeyB0b25lLCBvcGVuaW5nX3N0eWxlLCBoaXJpbmdfbWFuYWdlciwgY29tcGFueV9hZGRyZXNzLCBoaWdobGlnaHQsIGNvbXBhbnlfY29udGV4dCwgcmV1c2VfYm9keSB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjb25zdCByZXN1bHRTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLXJlc3VsdC1zZWN0aW9uJyk7XG4gICAgICBjb25zdCB0ZXh0YXJlYSAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLWxldHRlci10ZXh0YXJlYScpO1xuICAgICAgaWYgKHJlc3VsdFNlY3Rpb24pIHJlc3VsdFNlY3Rpb24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICBpZiAodGV4dGFyZWEpIHtcbiAgICAgICAgdGV4dGFyZWEudmFsdWUgPSBkYXRhLnRleHQ7XG4gICAgICAgIF92YWxpZGF0ZUNvdmVyTGV0dGVyKHRleHRhcmVhLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIF9jb3ZlckxldHRlckZvcm1TdGF0ZS5sZXR0ZXJUZXh0ICAgID0gZGF0YS50ZXh0O1xuICAgICAgX2NvdmVyTGV0dGVyRm9ybVN0YXRlLmxldHRlclZpc2libGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEdlbmVyYXRpb24gRmFpbGVkJywgZGF0YS5lcnJvciB8fCAnTExNIGRpZCBub3QgcmV0dXJuIGEgY292ZXIgbGV0dGVyLicpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIGNvbnRhY3Qgc2VydmVyLicpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChidG4pIHtcbiAgICAgIGJ0bi5kaXNhYmxlZCAgICA9IGZhbHNlO1xuICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1x1MjcyOCBHZW5lcmF0ZSBDb3ZlciBMZXR0ZXInO1xuICAgIH1cbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgU2F2ZSBjb3ZlciBsZXR0ZXIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVDb3ZlckxldHRlcigpIHtcbiAgLyogZHVja2Zsb3c6XG4gICAqICAgaWQ6IGNvdmVyX2xldHRlcl91aV9zYXZlX2xpdmVcbiAgICogICBraW5kOiB1aVxuICAgKiAgIHRpbWVzdGFtcDogJzIwMjYtMDMtMjVUMjE6Mzk6NDhaJ1xuICAgKiAgIHN0YXR1czogbGl2ZVxuICAgKiAgIGhhbmRsZXM6XG4gICAqICAgLSB1aTpjb3Zlci1sZXR0ZXIuc2F2ZVxuICAgKiAgIGNhbGxzOlxuICAgKiAgIC0gUE9TVCAvYXBpL2NvdmVyLWxldHRlci9zYXZlXG4gICAqICAgcmVhZHM6XG4gICAqICAgLSBkb206I2NsLWxldHRlci10ZXh0YXJlYS52YWx1ZVxuICAgKiAgIHdyaXRlczpcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL2NvdmVyLWxldHRlci9zYXZlLnRleHRcbiAgICogICBub3RlczogU3VibWl0cyB0aGUgdXNlci1lZGl0ZWQgY292ZXItbGV0dGVyIGJvZHkgZm9yIHNlc3Npb24gcGVyc2lzdGVuY2UsIG1ldGFkYXRhIHdyaXRlLXRocm91Z2gsIGFuZCBhcmNoaXZlIGFydGlmYWN0IGdlbmVyYXRpb24uXG4gICAqL1xuICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1sZXR0ZXItdGV4dGFyZWEnKTtcbiAgaWYgKCF0ZXh0YXJlYSkgcmV0dXJuO1xuICBjb25zdCB0ZXh0ID0gdGV4dGFyZWEudmFsdWUudHJpbSgpO1xuICBpZiAoIXRleHQpIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNkEwXHVGRTBGIEVtcHR5IExldHRlcicsICdQbGVhc2UgZ2VuZXJhdGUgb3IgdHlwZSBhIGNvdmVyIGxldHRlciBiZWZvcmUgc2F2aW5nLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1zYXZlLWJ0bicpO1xuICBpZiAoYnRuKSB7IGJ0bi5kaXNhYmxlZCA9IHRydWU7IGJ0bi50ZXh0Q29udGVudCA9ICdcdTIzRjMgU2F2aW5nXHUyMDI2JzsgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL2NvdmVyLWxldHRlci9zYXZlJywge1xuICAgICAgbWV0aG9kOiAgJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiAgICBKU09OLnN0cmluZ2lmeSh7IHRleHQgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBTYXZlZCcsIGBDb3ZlciBsZXR0ZXIgc2F2ZWQgYXMgPHN0cm9uZz4ke2VzY2FwZUh0bWwoZGF0YS5maWxlbmFtZSl9PC9zdHJvbmc+IGluIHlvdXIgYXBwbGljYXRpb24gZm9sZGVyLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIFNhdmUgRmFpbGVkJywgZGF0YS5lcnJvciB8fCAnQ291bGQgbm90IHNhdmUgY292ZXIgbGV0dGVyLicpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIGNvbnRhY3Qgc2VydmVyLicpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChidG4pIHsgYnRuLmRpc2FibGVkID0gZmFsc2U7IGJ0bi50ZXh0Q29udGVudCA9ICdcdUQ4M0RcdURDQkUgU2F2ZSBDb3ZlciBMZXR0ZXInOyB9XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIENyb3NzLWRvY3VtZW50IGNvbnNpc3RlbmN5IHJlcG9ydCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBCdWlsZCBhbmQgcmVuZGVyIHRoZSBjcm9zcy1kb2N1bWVudCBjb25zaXN0ZW5jeSByZXBvcnQgaW4gdGhlIEZpbmFsaXNlIHRhYi5cbiAqIENoZWNrcyBjb21wYW55IG5hbWUsIGpvYiB0aXRsZSwgQVRTIGtleXdvcmRzLCBhbmQgZGF0ZSBmb3JtYXR0aW5nIGFjcm9zc1xuICogdGhlIENWICh0YWJEYXRhLmN2KSBhbmQgY292ZXIgbGV0dGVyICgjY2wtbGV0dGVyLXRleHRhcmVhKS5cbiAqL1xuZnVuY3Rpb24gX3JlbmRlckNvbnNpc3RlbmN5UmVwb3J0KHN0YXR1c0RhdGEpIHtcbiAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc2lzdGVuY3ktcmVwb3J0Jyk7XG4gIGlmICghcGFuZWwpIHJldHVybjtcblxuICBjb25zdCBhbmFseXNpcyAgICA9IHN0YXR1c0RhdGEuam9iX2FuYWx5c2lzIHx8IHt9O1xuICBjb25zdCBjb21wYW55ICAgICA9IChhbmFseXNpcy5jb21wYW55ICB8fCAnJykudHJpbSgpO1xuICBjb25zdCBqb2JUaXRsZSAgICA9IChhbmFseXNpcy50aXRsZSAgICB8fCAnJykudHJpbSgpO1xuICBjb25zdCBhdHNLZXl3b3JkcyA9IChhbmFseXNpcy5hdHNfa2V5d29yZHMgfHwgW10pLmZpbHRlcihCb29sZWFuKS5zbGljZSgwLCA4KTtcblxuICAvLyBTdHJpcCBIVE1MIHRhZ3MgZnJvbSBDViBjb250ZW50IGZvciB0ZXh0IHNlYXJjaFxuICBjb25zdCBjdlN0YXRlID0gc3RhdGVNYW5hZ2VyLmdldFRhYkRhdGEoJ2N2JykgfHwgJyc7XG4gIGNvbnN0IGN2SHRtbCA9IHR5cGVvZiBjdlN0YXRlID09PSAnc3RyaW5nJyA/IGN2U3RhdGUgOiAoY3ZTdGF0ZT8uWycqLmh0bWwnXSB8fCAnJyk7XG4gIGNvbnN0IGN2VGV4dCA9IGN2SHRtbC5yZXBsYWNlKC88W14+XSs+L2csICcgJykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gR2V0IGNvdmVyIGxldHRlciB0ZXh0IGlmIHByZXNlbnRcbiAgY29uc3QgY2xFbCAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLWxldHRlci10ZXh0YXJlYScpO1xuICBjb25zdCBjbFJhdyAgPSBjbEVsID8gY2xFbC52YWx1ZSA6ICcnO1xuICBjb25zdCBjbFRleHQgPSBjbFJhdy50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBoYXNDTCAgPSBjbFJhdy50cmltKCkubGVuZ3RoID4gNTA7XG5cbiAgaWYgKCFjb21wYW55ICYmICFqb2JUaXRsZSAmJiAhYXRzS2V5d29yZHMubGVuZ3RoKSB7XG4gICAgcGFuZWwuaW5uZXJIVE1MID0gJyc7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY2hlY2tzID0gW107XG5cbiAgLy8gXHUyNTAwXHUyNTAwIDEuIENvbXBhbnkgbmFtZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgaWYgKGNvbXBhbnkpIHtcbiAgICBjb25zdCBjb21wTGMgPSBjb21wYW55LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgaW5DViAgID0gY3ZUZXh0LmluY2x1ZGVzKGNvbXBMYyk7XG4gICAgY29uc3QgaW5DTCAgID0gaGFzQ0wgJiYgY2xUZXh0LmluY2x1ZGVzKGNvbXBMYyk7XG4gICAgY29uc3QgbWlzc2luZyA9IFtdO1xuICAgIGlmICghaW5DVikgICAgICAgICAgbWlzc2luZy5wdXNoKCdDVicpO1xuICAgIGlmIChoYXNDTCAmJiAhaW5DTCkgbWlzc2luZy5wdXNoKCdjb3ZlciBsZXR0ZXInKTtcbiAgICBjb25zdCBzdGF0dXMgPSBtaXNzaW5nLmxlbmd0aCA9PT0gMCA/ICdwYXNzJyA6IG1pc3NpbmcubGVuZ3RoIDwgMiAmJiBoYXNDTCA/ICd3YXJuJyA6ICdmYWlsJztcbiAgICBjaGVja3MucHVzaCh7XG4gICAgICBzdGF0dXMsXG4gICAgICBsYWJlbDogICdDb21wYW55IG5hbWUnLFxuICAgICAgZGV0YWlsOiBzdGF0dXMgPT09ICdwYXNzJ1xuICAgICAgICA/IGBcXHUyMDFjJHtlc2NhcGVIdG1sKGNvbXBhbnkpfVxcdTIwMWQgZm91bmQgaW4gYWxsIGRvY3VtZW50cy5gXG4gICAgICAgIDogYFxcdTIwMWMke2VzY2FwZUh0bWwoY29tcGFueSl9XFx1MjAxZCBtaXNzaW5nIGZyb206ICR7bWlzc2luZy5qb2luKCcsICcpfS5gLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gXHUyNTAwXHUyNTAwIDIuIEpvYiB0aXRsZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgaWYgKGpvYlRpdGxlKSB7XG4gICAgY29uc3QgdGl0bGVMYyAgID0gam9iVGl0bGUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB0aXRsZUNvcmUgPSB0aXRsZUxjLnJlcGxhY2UoL14oc2VuaW9yfGp1bmlvcnxsZWFkfHByaW5jaXBhbHxzdGFmZnxhc3NvY2lhdGUpXFxzKy8sICcnKTtcbiAgICBjb25zdCBpbkNWICAgICAgPSBjdlRleHQuaW5jbHVkZXModGl0bGVMYykgfHwgY3ZUZXh0LmluY2x1ZGVzKHRpdGxlQ29yZSk7XG4gICAgY29uc3QgaW5DTCAgICAgID0gaGFzQ0wgJiYgKGNsVGV4dC5pbmNsdWRlcyh0aXRsZUxjKSB8fCBjbFRleHQuaW5jbHVkZXModGl0bGVDb3JlKSk7XG4gICAgY29uc3QgbWlzc2luZyAgID0gW107XG4gICAgaWYgKCFpbkNWKSAgICAgICAgICBtaXNzaW5nLnB1c2goJ0NWJyk7XG4gICAgaWYgKGhhc0NMICYmICFpbkNMKSBtaXNzaW5nLnB1c2goJ2NvdmVyIGxldHRlcicpO1xuICAgIGNvbnN0IHN0YXR1cyA9IG1pc3NpbmcubGVuZ3RoID09PSAwID8gJ3Bhc3MnIDogbWlzc2luZy5sZW5ndGggPCAyICYmIGhhc0NMID8gJ3dhcm4nIDogJ2ZhaWwnO1xuICAgIGNoZWNrcy5wdXNoKHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIGxhYmVsOiAgJ0pvYiB0aXRsZScsXG4gICAgICBkZXRhaWw6IHN0YXR1cyA9PT0gJ3Bhc3MnXG4gICAgICAgID8gYFxcdTIwMWMke2VzY2FwZUh0bWwoam9iVGl0bGUpfVxcdTIwMWQgZm91bmQgaW4gYWxsIGRvY3VtZW50cy5gXG4gICAgICAgIDogYFxcdTIwMWMke2VzY2FwZUh0bWwoam9iVGl0bGUpfVxcdTIwMWQgbWlzc2luZyBmcm9tOiAke21pc3Npbmcuam9pbignLCAnKX0uYCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFx1MjUwMFx1MjUwMCAzLiBBVFMga2V5d29yZHMgKHRvcCA4KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgaWYgKGF0c0tleXdvcmRzLmxlbmd0aCkge1xuICAgIGNvbnN0IG1pc3NpbmdDViA9IGF0c0tleXdvcmRzLmZpbHRlcihrdyA9PiAhY3ZUZXh0LmluY2x1ZGVzKGt3LnRvTG93ZXJDYXNlKCkpKTtcbiAgICBjb25zdCBtaXNzaW5nQ0wgPSBoYXNDTCA/IGF0c0tleXdvcmRzLmZpbHRlcihrdyA9PiAhY2xUZXh0LmluY2x1ZGVzKGt3LnRvTG93ZXJDYXNlKCkpKSA6IFtdO1xuICAgIGNvbnN0IHRvdGFsTWlzc2luZyA9IG5ldyBTZXQoWy4uLm1pc3NpbmdDViwgLi4ubWlzc2luZ0NMXSkuc2l6ZTtcbiAgICBjb25zdCBzdGF0dXMgPSB0b3RhbE1pc3NpbmcgPT09IDAgPyAncGFzcycgOiB0b3RhbE1pc3NpbmcgPD0gMyA/ICd3YXJuJyA6ICdmYWlsJztcbiAgICBjb25zdCBwYXJ0cyAgPSBbXTtcbiAgICBpZiAobWlzc2luZ0NWLmxlbmd0aCkgcGFydHMucHVzaChgTWlzc2luZyBmcm9tIENWOiAke21pc3NpbmdDVi5tYXAoayA9PiBgPGVtPiR7ZXNjYXBlSHRtbChrKX08L2VtPmApLmpvaW4oJywgJyl9YCk7XG4gICAgaWYgKG1pc3NpbmdDTC5sZW5ndGgpIHBhcnRzLnB1c2goYE1pc3NpbmcgZnJvbSBjb3ZlciBsZXR0ZXI6ICR7bWlzc2luZ0NMLm1hcChrID0+IGA8ZW0+JHtlc2NhcGVIdG1sKGspfTwvZW0+YCkuam9pbignLCAnKX1gKTtcbiAgICBjaGVja3MucHVzaCh7XG4gICAgICBzdGF0dXMsXG4gICAgICBsYWJlbDogIGBBVFMga2V5d29yZHMgKCR7YXRzS2V5d29yZHMubGVuZ3RofSBjaGVja2VkKWAsXG4gICAgICBkZXRhaWw6IHBhcnRzLmxlbmd0aCA/IHBhcnRzLmpvaW4oJy4gJykgKyAnLicgOiBgQWxsICR7YXRzS2V5d29yZHMubGVuZ3RofSBrZXl3b3JkcyBwcmVzZW50IGluIGRvY3VtZW50cy5gLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gXHUyNTAwXHUyNTAwIDQuIERhdGUgZm9ybWF0IGNvbnNpc3RlbmN5IChDVikgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIGlmIChjdlRleHQpIHtcbiAgICBjb25zdCBoYXNXcml0dGVuID0gL1xcYihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYylcXHcqXFxzK1xcZHs0fVxcYi9pLnRlc3QoY3ZUZXh0KTtcbiAgICBjb25zdCBoYXNJU08gICAgID0gL1xcYlxcZHs0fS1cXGR7Mn1cXGIvLnRlc3QoY3ZUZXh0KTtcbiAgICBjb25zdCBoYXNTbGFzaCAgID0gL1xcYlxcZHsxLDJ9XFwvXFxkezR9XFxiLy50ZXN0KGN2VGV4dCk7XG4gICAgY29uc3QgZm9ybWF0Q291bnQgPSBbaGFzV3JpdHRlbiwgaGFzSVNPLCBoYXNTbGFzaF0uZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDtcbiAgICBjaGVja3MucHVzaCh7XG4gICAgICBzdGF0dXM6IGZvcm1hdENvdW50IDw9IDEgPyAncGFzcycgOiAnd2FybicsXG4gICAgICBsYWJlbDogICdEYXRlIGZvcm1hdHMgKENWKScsXG4gICAgICBkZXRhaWw6IGZvcm1hdENvdW50IDw9IDFcbiAgICAgICAgPyAnQ29uc2lzdGVudCBkYXRlIGZvcm1hdCB0aHJvdWdob3V0IENWLidcbiAgICAgICAgOiAnTWl4ZWQgZGF0ZSBmb3JtYXRzIGRldGVjdGVkIChlLmcuIFxcdTIwMWNKYW4gMjAyMFxcdTIwMWQgYW5kIFxcdTIwMWMyMDIwLTAxXFx1MjAxZCkgXFx1MjAxNCBzdGFuZGFyZGlzZSBmb3IgYSBwb2xpc2hlZCBsb29rLicsXG4gICAgfSk7XG4gIH1cblxuICAvLyBcXHUyNTAwXFx1MjUwMCA1LiBDcm9zcy1kb2N1bWVudCB0ZXJtaW5vbG9neSBjb25zaXN0ZW5jeSBcXHUyNTAwXFx1MjUwMFxcdTI1MDBcXHUyNTAwXFx1MjUwMFxcdTI1MDBcXHUyNTAwXFx1MjUwMFxcdTI1MDBcXHUyNTAwXFx1MjUwMFxcdTI1MDBcXHUyNTAwXFx1MjUwMFxcdTI1MDBcXHUyNTAwXFx1MjUwMFxcdTI1MDBcXHUyNTAwXFx1MjUwMFxcdTI1MDBcbiAgY29uc3Qgc3FUZXh0cyA9IFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0ZXh0YXJlYVtpZF49XCJzYy10ZXh0LVwiXScpXVxuICAgIC5tYXAoZWwgPT4gZWwudmFsdWUudG9Mb3dlckNhc2UoKSkuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCBhbGxEb2NUZXh0ID0gW2N2VGV4dCwgY2xUZXh0LCAuLi5zcVRleHRzXTtcblxuICBjb25zdCBfVEVSTV9QQUlSUyA9IFtcbiAgICBbJ21hY2hpbmUgbGVhcm5pbmcnLCAnbWwnXSwgWydhcnRpZmljaWFsIGludGVsbGlnZW5jZScsICdhaSddLFxuICAgIFsnbmF0dXJhbCBsYW5ndWFnZSBwcm9jZXNzaW5nJywgJ25scCddLCBbJ2RlZXAgbGVhcm5pbmcnLCAnZGwnXSxcbiAgICBbJ2xhcmdlIGxhbmd1YWdlIG1vZGVsJywgJ2xsbSddLCBbJ3VzZXIgaW50ZXJmYWNlJywgJ3VpJ10sXG4gICAgWyd1c2VyIGV4cGVyaWVuY2UnLCAndXgnXSwgWydhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UnLCAnYXBpJ10sXG4gICAgWydrdWJlcm5ldGVzJywgJ2s4cyddLCBbJ2NvbnRpbnVvdXMgaW50ZWdyYXRpb24nLCAnY2kvY2QnXSxcbiAgXTtcbiAgY29uc3QgdGVybU1pc21hdGNoZXMgPSBbXTtcbiAgZm9yIChjb25zdCBbbG9uZywgc2hvcnRdIG9mIF9URVJNX1BBSVJTKSB7XG4gICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGBcXFxcYiR7c2hvcnQucmVwbGFjZSgnLycsICdcXFxcLycpfVxcXFxiYCk7XG4gICAgaWYgKGFsbERvY1RleHQuc29tZSh0ID0+IHQuaW5jbHVkZXMobG9uZykpICYmIGFsbERvY1RleHQuc29tZSh0ID0+IHJlLnRlc3QodCkpKSB7XG4gICAgICB0ZXJtTWlzbWF0Y2hlcy5wdXNoKGBcXHUyMDFjJHtsb25nfVxcdTIwMWQgLyBcXHUyMDFjJHtzaG9ydC50b1VwcGVyQ2FzZSgpfVxcdTIwMWRgKTtcbiAgICB9XG4gIH1cbiAgaWYgKHRlcm1NaXNtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICBjaGVja3MucHVzaCh7XG4gICAgICBzdGF0dXM6ICd3YXJuJyxcbiAgICAgIGxhYmVsOiAgJ1Rlcm1pbm9sb2d5IGNvbnNpc3RlbmN5JyxcbiAgICAgIGRldGFpbDogYE1peGVkIGZvcm1zIGRldGVjdGVkIGFjcm9zcyBkb2N1bWVudHM6ICR7dGVybU1pc21hdGNoZXMuam9pbignOyAnKX0uIFN0YW5kYXJkaXNlIHRvIG9uZSBmb3JtIHBlciBjb25jZXB0LmAsXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoYWxsRG9jVGV4dC5zb21lKHQgPT4gdC5sZW5ndGggPiA1MCkpIHtcbiAgICBjaGVja3MucHVzaCh7XG4gICAgICBzdGF0dXM6ICdwYXNzJyxcbiAgICAgIGxhYmVsOiAgJ1Rlcm1pbm9sb2d5IGNvbnNpc3RlbmN5JyxcbiAgICAgIGRldGFpbDogJ05vIG1peGVkIGFiYnJldmlhdGlvbi9leHBhbnNpb24gcGFpcnMgZGV0ZWN0ZWQgYWNyb3NzIENWLCBjb3ZlciBsZXR0ZXIsIGFuZCBzY3JlZW5pbmcgYW5zd2Vycy4nLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFJlbmRlciBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgY29uc3QgaWNvbnMgPSB7IHBhc3M6ICdcXHUyNzA1Jywgd2FybjogJ1xcdTI2YTBcXHVmZTBmJywgZmFpbDogJ1xcdTI3NGMnIH07XG4gIGNvbnN0IG92ZXJhbGxGYWlsICAgPSBjaGVja3Muc29tZShjID0+IGMuc3RhdHVzID09PSAnZmFpbCcpO1xuICBjb25zdCBvdmVyYWxsV2FybiAgID0gY2hlY2tzLnNvbWUoYyA9PiBjLnN0YXR1cyA9PT0gJ3dhcm4nKTtcbiAgY29uc3Qgb3ZlcmFsbFN0YXR1cyA9IG92ZXJhbGxGYWlsID8gJ2ZhaWwnIDogb3ZlcmFsbFdhcm4gPyAnd2FybicgOiAncGFzcyc7XG4gIGNvbnN0IG92ZXJhbGxNc2cgICAgPSBvdmVyYWxsRmFpbFxuICAgID8gJ0lzc3VlcyBmb3VuZCBcXHUyMDE0IHJldmlldyBiZWZvcmUgc2VuZGluZydcbiAgICA6IG92ZXJhbGxXYXJuID8gJ01pbm9yIGluY29uc2lzdGVuY2llcyBkZXRlY3RlZCcgOiAnQWxsIGNoZWNrcyBwYXNzZWQnO1xuXG4gIHBhbmVsLmlubmVySFRNTCA9IGBcbiAgICA8ZGl2IGNsYXNzPVwiY29uc2lzdGVuY3ktcmVwb3J0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3ItaGVhZGVyXCI+XG4gICAgICAgIDxoMyBzdHlsZT1cIm1hcmdpbjowO2ZvbnQtc2l6ZToxZW07XCI+JHtpY29uc1tvdmVyYWxsU3RhdHVzXX0gQ3Jvc3MtRG9jdW1lbnQgQ29uc2lzdGVuY3k8L2gzPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNyLWJhZGdlIGNyLSR7b3ZlcmFsbFN0YXR1c31cIj4ke2VzY2FwZUh0bWwob3ZlcmFsbE1zZyl9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjAuODNlbTttYXJnaW46MCAwIDEycHg7XCI+XG4gICAgICAgIENoZWNrcyBjb21wYW55IG5hbWUsIGpvYiB0aXRsZSwgQVRTIGtleXdvcmRzLCBkYXRlIGZvcm1hdHRpbmcsIGFuZCB0ZXJtaW5vbG9neSBjb25zaXN0ZW5jeSBhY3Jvc3MgQ1YsIGNvdmVyIGxldHRlciwgYW5kIHNjcmVlbmluZyBhbnN3ZXJzLlxuICAgICAgPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cImNyLWNoZWNrc1wiPlxuICAgICAgICAke2NoZWNrcy5tYXAoYyA9PiBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNyLWNoZWNrIGNyLSR7Yy5zdGF0dXN9XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNyLWljb25cIj4ke2ljb25zW2Muc3RhdHVzXX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNyLWxhYmVsXCI+JHtlc2NhcGVIdG1sKGMubGFiZWwpfTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3ItZGV0YWlsXCI+JHtjLmRldGFpbH08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+YCkuam9pbignJyl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgRGVib3VuY2VkIHZhbGlkYXRpb24gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmxldCBfY2xWYWxpZGF0ZVRpbWVyID0gbnVsbDtcbmZ1bmN0aW9uIF9kZWJvdW5jZWRWYWxpZGF0ZUNMKCkge1xuICBjbGVhclRpbWVvdXQoX2NsVmFsaWRhdGVUaW1lcik7XG4gIF9jbFZhbGlkYXRlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zdCB0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1sZXR0ZXItdGV4dGFyZWEnKTtcbiAgICBpZiAodGEpIF92YWxpZGF0ZUNvdmVyTGV0dGVyKHRhLnZhbHVlKTtcbiAgfSwgNjAwKTtcbn1cblxuLyoqXG4gKiBDbGllbnQtc2lkZSBjb3ZlciBsZXR0ZXIgcXVhbGl0eSBjaGVja3MuXG4gKiA1IHJ1bGVzOiBvcGVuaW5nLCBJLWZpcnN0IGdhdGUsIGNvbXBhbnkgbmFtZSwgd29yZCBjb3VudCAocm9sZS1kaWZmZXJlbnRpYXRlZCksIGNhbGwtdG8tYWN0aW9uLlxuICovXG5mdW5jdGlvbiBfdmFsaWRhdGVDb3ZlckxldHRlcih0ZXh0KSB7XG4gIGNvbnN0IHBhbmVsICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC12YWxpZGF0aW9uLXBhbmVsJyk7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1jaGVja3MtY29udGFpbmVyJyk7XG4gIGlmICghcGFuZWwgfHwgIWNvbnRhaW5lciB8fCAhdGV4dC50cmltKCkpIHJldHVybjtcblxuICAvLyBcdTI1MDBcdTI1MDAgUnVsZSAxOiBPcGVuaW5nIHBhdHRlcm4gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIGNvbnN0IGZpcnN0TGluZSA9ICh0ZXh0LnNwbGl0KCdcXG4nKS5maW5kKGwgPT4gbC50cmltKCkpIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgZ2VuZXJpY09wZW5pbmdzID0gW1xuICAgIC9eZGVhciBoaXJpbmcgbWFuYWdlci8sXG4gICAgL15kZWFyIHNpciBvciBtYWRhbS8sXG4gICAgL150byB3aG9tIGl0IG1heSBjb25jZXJuLyxcbiAgICAvXmRlYXIgcmVjcnVpdGVyLyxcbiAgICAvXmRlYXIgaHVtYW4gcmVzb3VyY2VzLyxcbiAgICAvXmRlYXIgaHIvLFxuICBdO1xuICBjb25zdCBnZW5lcmljT3BlbmluZyA9IGdlbmVyaWNPcGVuaW5ncy5zb21lKHJlID0+IHJlLnRlc3QoZmlyc3RMaW5lKSk7XG4gIGNvbnN0IG9wZW5pbmdDaGVjayA9IHtcbiAgICBwYXNzOiAhZ2VuZXJpY09wZW5pbmcsXG4gICAgbGFiZWw6ICdPcGVuaW5nIHNhbHV0YXRpb24nLFxuICAgIGRldGFpbDogZ2VuZXJpY09wZW5pbmdcbiAgICAgID8gJ1VzZXMgYSBnZW5lcmljIG9wZW5lciAoXCJEZWFyIEhpcmluZyBNYW5hZ2VyXCIgZXRjLikgXHUyMDE0IHBlcnNvbmFsaXNlIHdpdGggYSBuYW1lIG9yIHJvbGUuJ1xuICAgICAgOiAnUGVyc29uYWxpc2VkIG9wZW5lciBcdTIwMTQgZ29vZC4nLFxuICB9O1xuXG4gIC8vIFx1MjUwMFx1MjUwMCBSdWxlIDFiOiBCb2R5IG11c3Qgbm90IG9wZW4gd2l0aCBcIklcIiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgY29uc3QgYWxsTGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKS5tYXAobCA9PiBsLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCBzYWx1dGF0aW9uSWR4ID0gYWxsTGluZXMuZmluZEluZGV4KFxuICAgIGwgPT4gbC50b0xvd2VyQ2FzZSgpID09PSBmaXJzdExpbmUudG9Mb3dlckNhc2UoKVxuICApO1xuICBjb25zdCBib2R5TGluZXMgPSBhbGxMaW5lcy5zbGljZShNYXRoLm1heCgwLCBzYWx1dGF0aW9uSWR4ICsgMSkpO1xuICBjb25zdCBmaXJzdEJvZHlXb3JkID0gKGJvZHlMaW5lcy5maW5kKGwgPT4gbC50cmltKCkpIHx8ICcnKS5zcGxpdCgvXFxzKy8pWzBdIHx8ICcnO1xuICAvLyBTcGxpdCBvbiBub24tYWxwaGEgc28gXCJJJ21cIiBcdTIxOTIgdG9rZW4gXCJJXCIsIFwiSW5cIiBcdTIxOTIgdG9rZW4gXCJJblwiXG4gIGNvbnN0IGZpcnN0Qm9keVRva2VuID0gZmlyc3RCb2R5V29yZC5zcGxpdCgvW15hLXpBLVpdLylbMF0gfHwgJyc7XG4gIGNvbnN0IGJvZHlTdGFydHNXaXRoSSA9IGZpcnN0Qm9keVRva2VuLnRvTG93ZXJDYXNlKCkgPT09ICdpJztcbiAgY29uc3QgaUZpcnN0Q2hlY2sgPSB7XG4gICAgcGFzczogIWJvZHlTdGFydHNXaXRoSSxcbiAgICBsYWJlbDogJ09wZW5pbmcgd29yZCcsXG4gICAgZGV0YWlsOiBib2R5U3RhcnRzV2l0aElcbiAgICAgID8gJ0JvZHkgb3BlbnMgd2l0aCBcIklcIiBcdTIwMTQgbGVhZCB3aXRoIHlvdXIgdmFsdWUsIHRoZSByb2xlLCBvciB0aGUgY29tcGFueSBpbnN0ZWFkLidcbiAgICAgIDogJ0JvZHkgZG9lcyBub3Qgb3BlbiB3aXRoIFwiSVwiIFx1MjAxNCBnb29kLicsXG4gIH07XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFJ1bGUgMjogQ29tcGFueS1zcGVjaWZpYyByZWZlcmVuY2UgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIGNvbnN0IGNvbXBhbnlOYW1lID0gX2dldENvbXBhbnlOYW1lRm9yQ0woKTtcbiAgbGV0IGNvbXBhbnlDaGVjaztcbiAgaWYgKCFjb21wYW55TmFtZSkge1xuICAgIGNvbXBhbnlDaGVjayA9IHsgd2FybjogdHJ1ZSwgbGFiZWw6ICdDb21wYW55IHJlZmVyZW5jZScsIGRldGFpbDogJ0NvbXBhbnkgbmFtZSBub3QgZGV0ZWN0ZWQgZnJvbSBqb2IgZGVzY3JpcHRpb24gXHUyMDE0IHZlcmlmeSBtYW51YWxseS4nIH07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbWVudGlvbnMgPSAodGV4dC50b0xvd2VyQ2FzZSgpLm1hdGNoKG5ldyBSZWdFeHAoY29tcGFueU5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpLCAnZycpKSB8fCBbXSkubGVuZ3RoO1xuICAgIGNvbXBhbnlDaGVjayA9IHtcbiAgICAgIHBhc3M6IG1lbnRpb25zID49IDIsXG4gICAgICB3YXJuOiBtZW50aW9ucyA9PT0gMSxcbiAgICAgIGxhYmVsOiAnQ29tcGFueSByZWZlcmVuY2UnLFxuICAgICAgZGV0YWlsOiBtZW50aW9ucyA9PT0gMFxuICAgICAgICA/IGBcIiR7ZXNjYXBlSHRtbChjb21wYW55TmFtZSl9XCIgbm90IG1lbnRpb25lZCBcdTIwMTQgYWRkIHNwZWNpZmljIHJlZmVyZW5jZXMuYFxuICAgICAgICA6IG1lbnRpb25zID09PSAxXG4gICAgICAgICAgPyBgXCIke2VzY2FwZUh0bWwoY29tcGFueU5hbWUpfVwiIG1lbnRpb25lZCBvbmNlIFx1MjAxNCBhIHNlY29uZCBzcGVjaWZpYyByZWZlcmVuY2Ugc3RyZW5ndGhlbnMgdGhlIGxldHRlci5gXG4gICAgICAgICAgOiBgXCIke2VzY2FwZUh0bWwoY29tcGFueU5hbWUpfVwiIG1lbnRpb25lZCAke21lbnRpb25zfSB0aW1lcyBcdTIwMTQgZ29vZCBzcGVjaWZpY2l0eS5gLFxuICAgIH07XG4gIH1cblxuICAvLyBcdTI1MDBcdTI1MDAgUnVsZSAzOiBXb3JkIGNvdW50IChyb2xlLWRpZmZlcmVudGlhdGVkIHRhcmdldCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIGNvbnN0IF9yb2xlQW5hbHlzaXMgPSB3aW5kb3cuX2xhc3RBbmFseXNpc0RhdGEgfHxcbiAgICAod2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgJiYgd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMuam9iX2FuYWx5c2lzKSB8fCB7fTtcbiAgY29uc3QgX3JvbGVMZXZlbCAgPSAoX3JvbGVBbmFseXNpcy5yb2xlX2xldmVsIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBfcm9sZURvbWFpbiA9IChfcm9sZUFuYWx5c2lzLmRvbWFpbiB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgaXNFeGVjICAgICAgPSAvZXhlY3x2cHxjLXN1aXRlfGNoaWVmfGRpcmVjdG9yfHByZXNpZGVudHxwYXJ0bmVyLy50ZXN0KF9yb2xlTGV2ZWwpO1xuICBjb25zdCBpc0FjYWRlbWljICA9IC9hY2FkZW1pY3xyZXNlYXJjaHxmYWN1bHR5fHByb2Zlc3Nvcnxwb3N0ZG9jLy50ZXN0KF9yb2xlRG9tYWluICsgJyAnICsgX3JvbGVMZXZlbCk7XG4gIGNvbnN0IHdjVGFyZ2V0ICAgID0gaXNBY2FkZW1pYyA/IHsgbG86IDUwMCwgaGk6IDYwMCwgd2FybkxvOiA0MDAsIHdhcm5IaTogNjUwIH1cbiAgICAgICAgICAgICAgICAgICAgOiBpc0V4ZWMgICAgID8geyBsbzogNDAwLCBoaTogNTAwLCB3YXJuTG86IDMwMCwgd2FybkhpOiA1NTAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7IGxvOiAyNTAsIGhpOiAzMDAsIHdhcm5MbzogMjAwLCB3YXJuSGk6IDQwMCB9O1xuICBjb25zdCB3Y0xhYmVsICAgICA9IGlzQWNhZGVtaWMgPyBgJHt3Y1RhcmdldC5sb31cdTIwMTMke3djVGFyZ2V0LmhpfSAoYWNhZGVtaWMvcmVzZWFyY2gpYFxuICAgICAgICAgICAgICAgICAgICA6IGlzRXhlYyAgICAgPyBgJHt3Y1RhcmdldC5sb31cdTIwMTMke3djVGFyZ2V0LmhpfSAoZXhlY3V0aXZlKWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYFx1MjI2NCR7d2NUYXJnZXQuaGl9IChzdGFuZGFyZClgO1xuXG4gIGNvbnN0IHdvcmRzICAgID0gdGV4dC50cmltKCkuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoO1xuICBjb25zdCB3Y1BjdCAgICA9IE1hdGgubWluKDEwMCwgKHdvcmRzIC8gd2NUYXJnZXQuaGkpICogMTAwKTtcbiAgY29uc3Qgd2NDb2xvdXIgPSB3b3JkcyA8IHdjVGFyZ2V0Lndhcm5MbyA/ICcjZWY0NDQ0J1xuICAgICAgICAgICAgICAgICA6IHdvcmRzIDwgd2NUYXJnZXQubG8gICAgICA/ICcjZjU5ZTBiJ1xuICAgICAgICAgICAgICAgICA6IHdvcmRzIDw9IHdjVGFyZ2V0LmhpICAgICA/ICcjMjJjNTVlJ1xuICAgICAgICAgICAgICAgICA6IHdvcmRzIDw9IHdjVGFyZ2V0Lndhcm5IaSA/ICcjZjU5ZTBiJ1xuICAgICAgICAgICAgICAgICA6ICcjZWY0NDQ0JztcbiAgY29uc3Qgd2NTdGF0dXMgPSB3b3JkcyA+PSB3Y1RhcmdldC5sbyAmJiB3b3JkcyA8PSB3Y1RhcmdldC5oaSA/ICdwYXNzJ1xuICAgICAgICAgICAgICAgICA6IHdvcmRzID49IHdjVGFyZ2V0Lndhcm5MbyAmJiB3b3JkcyA8PSB3Y1RhcmdldC53YXJuSGkgPyAnd2FybidcbiAgICAgICAgICAgICAgICAgOiAnZmFpbCc7XG4gIGNvbnN0IHdjQmFyICAgID0gYDxzcGFuIGNsYXNzPVwiY2wtd2MtYmFyXCI+PHNwYW4gY2xhc3M9XCJjbC13Yy1maWxsXCIgc3R5bGU9XCJ3aWR0aDoke3djUGN0fSU7YmFja2dyb3VuZDoke3djQ29sb3VyfTtcIj48L3NwYW4+PC9zcGFuPmA7XG4gIGNvbnN0IHdvcmRDb3VudENoZWNrID0ge1xuICAgIFt3Y1N0YXR1c106IHRydWUsXG4gICAgbGFiZWw6IGBXb3JkIGNvdW50ICgke3djTGFiZWx9KWAsXG4gICAgZGV0YWlsOiBgJHt3b3Jkc30gd29yZHMgJHt3Y0Jhcn0gXHUyMDE0ICR7XG4gICAgICB3b3JkcyA8IHdjVGFyZ2V0LmxvID8gYHRvbyBzaG9ydDsgYWltIGZvciAke3djVGFyZ2V0LmxvfVx1MjAxMyR7d2NUYXJnZXQuaGl9LmBcbiAgICAgIDogd29yZHMgPiB3Y1RhcmdldC5oaSA/IGB0b28gbG9uZzsgdHJpbSB0byAke3djVGFyZ2V0LmhpfSB3b3Jkcy5gXG4gICAgICA6ICd3aXRoaW4gdGFyZ2V0IHJhbmdlLidcbiAgICB9YCxcbiAgfTtcblxuICAvLyBcdTI1MDBcdTI1MDAgUnVsZSA0OiBDYWxsLXRvLWFjdGlvbiBjbG9zaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICBjb25zdCBsYXN0UGFyYSA9IHRleHQuc3BsaXQoL1xcbnsyLH0vKS5maWx0ZXIocCA9PiBwLnRyaW0oKSkuc2xpY2UoLTEpWzBdIHx8ICcnO1xuICAvLyBBc3NlcnRpdmUgQ1RBczogY2FuZGlkYXRlIHRha2VzIGluaXRpYXRpdmUgKHBhc3MpXG4gIGNvbnN0IGFzc2VydGl2ZUN0YVBhdHRlcm5zID0gW1xuICAgIC9pbnRlcnZpZXcvaSwgL2Rpc2N1c3MvaSwgL29wcG9ydHVuaXR5IHRvIChzcGVha3x0YWxrfG1lZXR8Y29ubmVjdCkvaSxcbiAgICAvaSB3aWxsIChjYWxsfGZvbGxvdy4/dXB8cmVhY2ggb3V0fGNvbnRhY3R8c2VuZCkvaSxcbiAgICAvaSAocGxhbnxpbnRlbmQpIHRvL2ksIC93ZWxjb21lIHRoZSBjaGFuY2UvaSxcbiAgICAvYXZhaWxhYmxlIChmb3J8dG8pL2ksIC9jb250YWN0IG1lL2ksXG4gIF07XG4gIC8vIFBhc3NpdmUgQ1RBczogd2FpdGluZyBmb3IgYSByZXNwb25zZSAoZmFpbCBcdTIwMTQgc3RvcnkgVVMtUDUgcmVxdWlyZXMgcmVqZWN0aW9uKVxuICBjb25zdCBwYXNzaXZlQ3RhUGF0dGVybnMgPSBbXG4gICAgL2hlYXIgZnJvbSB5b3UvaSwgL2xvb2sgZm9yd2FyZCB0byAoeW91cnxoZWFyaW5nKS9pLFxuICAgIC9hd2FpdChpbmcpPyB5b3VyL2ksIC9ob3BlIHRvIChoZWFyfG1lZXQpL2ksXG4gIF07XG4gIGNvbnN0IGhhc0Fzc2VydGl2ZUN0YSA9IGFzc2VydGl2ZUN0YVBhdHRlcm5zLnNvbWUocmUgPT4gcmUudGVzdChsYXN0UGFyYSkpO1xuICBjb25zdCBoYXNQYXNzaXZlQ3RhICAgPSBwYXNzaXZlQ3RhUGF0dGVybnMuc29tZShyZSA9PiByZS50ZXN0KGxhc3RQYXJhKSk7XG4gIGNvbnN0IGN0YUNoZWNrID0ge1xuICAgIHBhc3M6IGhhc0Fzc2VydGl2ZUN0YSxcbiAgICBmYWlsOiAhaGFzQXNzZXJ0aXZlQ3RhICYmIGhhc1Bhc3NpdmVDdGEsXG4gICAgbGFiZWw6ICdDYWxsLXRvLWFjdGlvbiBjbG9zaW5nJyxcbiAgICBkZXRhaWw6IGhhc0Fzc2VydGl2ZUN0YVxuICAgICAgPyAnQXNzZXJ0aXZlIGNhbGwtdG8tYWN0aW9uIFx1MjAxNCB0YWtlcyBpbml0aWF0aXZlLidcbiAgICAgIDogaGFzUGFzc2l2ZUN0YVxuICAgICAgICA/ICdQYXNzaXZlIGNsb3NpbmcgcmVqZWN0ZWQgXHUyMDE0IHBocmFzZXMgbGlrZSBcIkkgbG9vayBmb3J3YXJkIHRvIGhlYXJpbmcgZnJvbSB5b3VcIiBhcmUgdG9vIHBhc3NpdmUuIFJlcGxhY2Ugd2l0aCBhIGRpcmVjdCBpbnRlcnZpZXcgcmVxdWVzdDogXCJJIHdvdWxkIHdlbGNvbWUgdGhlIG9wcG9ydHVuaXR5IHRvIGludGVydmlld1wiIG9yIFwiSSB3aWxsIGZvbGxvdyB1cCBuZXh0IHdlZWsuXCInXG4gICAgICAgIDogJ05vIGNhbGwtdG8tYWN0aW9uIGZvdW5kIFx1MjAxNCBhZGQgYSBkaXJlY3QgaW50ZXJ2aWV3IHJlcXVlc3Qgb3IgcHJvYWN0aXZlIGZvbGxvdy11cCBzdGF0ZW1lbnQuJyxcbiAgfTtcblxuICAvLyBcdTI1MDBcdTI1MDAgUnVsZSA1OiBOYW1lZCBvciBxdWFudGlmaWVkIGFjaGlldmVtZW50IFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICBjb25zdCBhY2hpZXZlbWVudFBhdHRlcm5zID0gW1xuICAgIC9cXGQrJS8sICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwZXJjZW50YWdlc1xuICAgIC9cXCRbXFxkLF0rLywgICAgICAgICAgICAgICAgICAgICAgLy8gZG9sbGFyIGFtb3VudHNcbiAgICAvXFxkKyAodGltZXN8eHxmb2xkfHllYXJ8bW9udGh8d2Vla3xkYXl8dGVhbXxwZW9wbGV8c3RhZmZ8Y2xpZW50fGN1c3RvbWVyfHByb2plY3R8cHJvZHVjdHxzeXN0ZW18YXdhcmR8cGF0ZW50KS9pLFxuICAgIC9yZWR1Y2VkfGluY3JlYXNlZHxncmV3fGdyZXd8ZG91YmxlZHx0cmlwbGVkfHNhdmVkfGdlbmVyYXRlZHxkZWxpdmVyZWR8bGF1bmNoZWR8bGVkfGJ1aWx0fGRlc2lnbmVkfGFyY2hpdGVjdGVkfHBpb25lZXJlZHx3b258YXdhcmRlZHxlYXJuZWR8YWNoaWV2ZWQvaSxcbiAgXTtcbiAgY29uc3QgaGFzQWNoaWV2ZW1lbnQgPSBhY2hpZXZlbWVudFBhdHRlcm5zLnNvbWUocmUgPT4gcmUudGVzdCh0ZXh0KSk7XG4gIGNvbnN0IGFjaGlldmVtZW50Q2hlY2sgPSB7XG4gICAgcGFzczogaGFzQWNoaWV2ZW1lbnQsXG4gICAgd2FybjogIWhhc0FjaGlldmVtZW50LFxuICAgIGxhYmVsOiAnU3BlY2lmaWMgYWNoaWV2ZW1lbnQnLFxuICAgIGRldGFpbDogaGFzQWNoaWV2ZW1lbnRcbiAgICAgID8gJ0NvbnRhaW5zIGEgcXVhbnRpZmllZCBvciBuYW1lZCBhY2hpZXZlbWVudCBcdTIwMTQgZ29vZC4nXG4gICAgICA6ICdObyBxdWFudGlmaWVkIGFjaGlldmVtZW50IGRldGVjdGVkIFx1MjAxNCBhZGQgYXQgbGVhc3Qgb25lIHNwZWNpZmljIHJlc3VsdCAoZS5nLiwgXCJpbmNyZWFzZWQgcmV2ZW51ZSBieSAzMCVcIiwgXCJsZWQgYSB0ZWFtIG9mIDhcIikuJyxcbiAgfTtcblxuICAvLyBcdTI1MDBcdTI1MDAgUnVsZSA3OiBHZW5lcmljIGZpbGxlciBwaHJhc2VzIChHQVAtMTcpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICBjb25zdCBfQ0xfRklMTEVSID0gW1xuICAgICdpIGFtIHdyaXRpbmcgdG8gYXBwbHknLCAnaSBhbSBleGNpdGVkIHRvIGFwcGx5JywgJ2kgYW0gcGxlYXNlZCB0byBhcHBseScsXG4gICAgJ3BsZWFzZSBmaW5kIG15JywgJ2F0dGFjaGVkIHBsZWFzZSBmaW5kJywgJ2VuY2xvc2VkIHBsZWFzZSBmaW5kJyxcbiAgICAndGhpcyBsZXR0ZXIgaXMgdG8gZXhwcmVzcycsICdpIGZlZWwgaSB3b3VsZCBiZSBhIGdyZWF0IGZpdCcsXG4gICAgJ2kgYmVsaWV2ZSBpIHdvdWxkIGJlIGEgcGVyZmVjdCBmaXQnLCAnaSBhbSBjb25maWRlbnQgdGhhdCBpJyxcbiAgICAncmVzdWx0cy1kcml2ZW4nLCAnZGV0YWlsLW9yaWVudGVkJywgJ3NlYXNvbmVkIHByb2Zlc3Npb25hbCcsXG4gICAgJ3Bhc3Npb25hdGUgYWJvdXQnLCAnZHluYW1pYyBwcm9mZXNzaW9uYWwnLCAnaGlnaGx5IG1vdGl2YXRlZCcsXG4gICAgJ3RlYW0gcGxheWVyJywgJ3NlbGYtc3RhcnRlcicsICdoYXJkIHdvcmtpbmcnLFxuICBdO1xuICBjb25zdCBfdGV4dExjICAgID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBmb3VuZEZpbGwgID0gX0NMX0ZJTExFUi5maWx0ZXIocCA9PiBfdGV4dExjLmluY2x1ZGVzKHApKTtcbiAgY29uc3QgZmlsbGVyQ2hlY2sgPSB7XG4gICAgcGFzczogZm91bmRGaWxsLmxlbmd0aCA9PT0gMCxcbiAgICB3YXJuOiBmb3VuZEZpbGwubGVuZ3RoID4gMCAmJiBmb3VuZEZpbGwubGVuZ3RoIDw9IDIsXG4gICAgZmFpbDogZm91bmRGaWxsLmxlbmd0aCA+IDIsXG4gICAgbGFiZWw6ICdGaWxsZXIgcGhyYXNlcycsXG4gICAgZGV0YWlsOiBmb3VuZEZpbGwubGVuZ3RoID09PSAwXG4gICAgICA/ICdObyBnZW5lcmljIGZpbGxlciBwaHJhc2VzIGRldGVjdGVkIFx1MjAxNCBnb29kLidcbiAgICAgIDogYEdlbmVyaWMgcGhyYXNlJHtmb3VuZEZpbGwubGVuZ3RoID4gMSA/ICdzJyA6ICcnfSBkZXRlY3RlZDogJHtmb3VuZEZpbGwuc2xpY2UoMCwgMykubWFwKHAgPT4gYFx1MjAxQyR7cH1cdTIwMURgKS5qb2luKCcsICcpfSR7Zm91bmRGaWxsLmxlbmd0aCA+IDMgPyAnXHUyMDI2JyA6ICcnfSBcdTIwMTQgcmVwbGFjZSB3aXRoIHNwZWNpZmljIHZhbHVlIGNsYWltcy5gLFxuICB9O1xuXG4gIC8vIFx1MjUwMFx1MjUwMCBSZW5kZXIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIGNvbnN0IGNoZWNrcyA9IFtvcGVuaW5nQ2hlY2ssIGlGaXJzdENoZWNrLCBjb21wYW55Q2hlY2ssIHdvcmRDb3VudENoZWNrLCBjdGFDaGVjaywgYWNoaWV2ZW1lbnRDaGVjaywgZmlsbGVyQ2hlY2tdO1xuICBjb250YWluZXIuaW5uZXJIVE1MID0gY2hlY2tzLm1hcChjID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGMucGFzcyA/ICdwYXNzJyA6IGMud2FybiA/ICd3YXJuJyA6ICdmYWlsJztcbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJjbC1jaGVjayAke3N0YXRlfVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjYy1pY29uXCI+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjYy1sYWJlbFwiPiR7ZXNjYXBlSHRtbChjLmxhYmVsKX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNjLWRldGFpbFwiPiR7Yy5kZXRhaWx9PC9zcGFuPlxuICAgIDwvZGl2PmA7XG4gIH0pLmpvaW4oJycpO1xuXG4gIHBhbmVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgR2V0IGNvbXBhbnkgbmFtZSBmb3IgY292ZXIgbGV0dGVyIHZhbGlkYXRpb24gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIF9nZXRDb21wYW55TmFtZUZvckNMKCkge1xuICAvLyBUcnkgYW5hbHlzaXMgZGF0YSBmaXJzdCwgdGhlbiBmYWxsIGJhY2sgdG8gam9iIGRlc2NyaXB0aW9uIGZpcnN0IGxpbmVcbiAgY29uc3QgYW5hbHlzaXMgPSB3aW5kb3cuX2xhc3RBbmFseXNpc0RhdGEgfHwgKHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zICYmIHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zLmpvYl9hbmFseXNpcyk7XG4gIGlmIChhbmFseXNpcyAmJiBhbmFseXNpcy5jb21wYW55X25hbWUpIHJldHVybiBhbmFseXNpcy5jb21wYW55X25hbWU7XG4gIGlmIChhbmFseXNpcyAmJiBhbmFseXNpcy5jb21wYW55KSAgICAgIHJldHVybiBhbmFseXNpcy5jb21wYW55O1xuICAvLyBGYWxsIGJhY2s6IGZpcnN0IG5vbi1lbXB0eSBsaW5lIG9mIGpvYiBkZXNjcmlwdGlvbiBpbiB0YWJEYXRhXG4gIGNvbnN0IGpkID0gc3RhdGVNYW5hZ2VyLmdldFRhYkRhdGEoJ2pvYicpIHx8ICcnO1xuICBjb25zdCBmaXJzdExpbmUgPSBqZC5zcGxpdCgnXFxuJykuZmluZChsID0+IGwudHJpbSgpKTtcbiAgcmV0dXJuIGZpcnN0TGluZSA/IGZpcnN0TGluZS50cmltKCkuc2xpY2UoMCwgNjApIDogJyc7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFeHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQge1xuICBDT1ZFUl9MRVRURVJfVE9ORVMsXG4gIF9jb3ZlckxldHRlckZvcm1TdGF0ZSxcbiAgcG9wdWxhdGVDb3ZlckxldHRlclRhYixcbiAgZ2VuZXJhdGVDb3ZlckxldHRlcixcbiAgc2F2ZUNvdmVyTGV0dGVyLFxuICBfcmVuZGVyQ29uc2lzdGVuY3lSZXBvcnQsXG4gIF9kZWJvdW5jZWRWYWxpZGF0ZUNMLFxuICBfdmFsaWRhdGVDb3ZlckxldHRlcixcbiAgX2dldENvbXBhbnlOYW1lRm9yQ0wsXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvc2NyZWVuaW5nLXF1ZXN0aW9ucy5qc1xuICogU2NyZWVuaW5nIHF1ZXN0aW9ucyB0YWI6IHBhcnNlLCBzZWFyY2gsIGdlbmVyYXRlLCBzYXZlIHJlc3BvbnNlcy5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgZXNjYXBlSHRtbCwgc2hvd0FsZXJ0TW9kYWxcbiAqL1xuXG4vLyBcdTI1MDBcdTI1MDAgTW9kdWxlLWxldmVsIHN0YXRlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG4vKiogUGVyLXF1ZXN0aW9uIGRyYWZ0IHN0YXRlOiB7IGZvcm1hdCwgZXhwZXJpZW5jZUluZGljZXMsIHJlc3BvbnNlVGV4dCwgdG9waWNUYWcsIHByaW9yUmVzcG9uc2UgfSAqL1xuY29uc3QgX3NjcmVlbmluZ1N0YXRlID0ge307XG5cbi8qKiBSYXcgdGV4dCBmcm9tIHRoZSBzYy1pbnB1dCB0ZXh0YXJlYSBcdTIwMTQgc3Vydml2ZXMgdGFiIG5hdmlnYXRpb24uICovXG5sZXQgX3NjcmVlbmluZ0lucHV0VGV4dCA9ICcnO1xuXG4vKiogUmVzZXQgZnVuY3Rpb24gZm9yIHRlc3RpbmcgXHUyMDE0IGNsZWFycyBzYXZlZCB0ZXh0YXJlYSBzdGF0ZS4gKi9cbmZ1bmN0aW9uIF9yZXNldFNjcmVlbmluZ0lucHV0VGV4dCgpIHsgX3NjcmVlbmluZ0lucHV0VGV4dCA9ICcnOyB9XG5cbi8vIFx1MjUwMFx1MjUwMCBQb3B1bGF0ZSBzY3JlZW5pbmcgdGFiIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBwb3B1bGF0ZVNjcmVlbmluZ1RhYigpIHtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgc3R5bGU9XCJtYXgtd2lkdGg6OTAwcHg7bWFyZ2luOjAgYXV0bztwYWRkaW5nOjIwcHggMTBweDtcIj5cbiAgICAgIDxoMiBzdHlsZT1cImZvbnQtc2l6ZToxLjNlbTtmb250LXdlaWdodDo3MDA7bWFyZ2luLWJvdHRvbTo4cHg7XCI+XHVEODNEXHVEQ0NCIFNjcmVlbmluZyBRdWVzdGlvbnM8L2gyPlxuICAgICAgPHAgY2xhc3M9XCJzYy1pbnRyb1wiPlBhc3RlIG9uZSBvciBtb3JlIHNjcmVlbmluZyBxdWVzdGlvbnMgYmVsb3cgXHUyMDE0IG9uZSBwZXIgbGluZSwgb3Igc2VwYXJhdGVkIGJ5IGJsYW5rIGxpbmVzLiBDbGljayA8c3Ryb25nPlBhcnNlIFF1ZXN0aW9uczwvc3Ryb25nPiB0byBnZW5lcmF0ZSB0YWlsb3JlZCBkcmFmdCByZXNwb25zZXMuPC9wPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O21hcmdpbi1ib3R0b206MjBweDtcIj5cbiAgICAgICAgPHRleHRhcmVhIGlkPVwic2MtaW5wdXRcIiByb3dzPVwiNlwiIHN0eWxlPVwiZmxleDoxO3BhZGRpbmc6MTJweDtib3JkZXI6MXB4IHNvbGlkICNlMmU4ZjA7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjAuOTNlbTtyZXNpemU6dmVydGljYWw7XCIgcGxhY2Vob2xkZXI9XCJQYXN0ZSBzY3JlZW5pbmcgcXVlc3Rpb25zIGhlcmVcdTIwMjYmIzEwOyYjMTA7RS5nLiYjMTA7RGVzY3JpYmUgYSB0aW1lIHlvdSBsZWQgYSBjcm9zcy1mdW5jdGlvbmFsIHByb2plY3QuJiMxMDsmIzEwO0hvdyBkbyB5b3UgaGFuZGxlIHRpZ2h0IGRlYWRsaW5lcz9cIj48L3RleHRhcmVhPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXByaW1hcnlcIiBvbmNsaWNrPVwicGFyc2VTY3JlZW5pbmdRdWVzdGlvbnMoKVwiPlBhcnNlIFF1ZXN0aW9uczwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGlkPVwic2MtcXVlc3Rpb25zLWNvbnRhaW5lclwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNjLXNhdmUtYmFyXCIgaWQ9XCJzYy1zYXZlLWJhclwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGludWUtYnRuXCIgaWQ9XCJzYy1zYXZlLWJ0blwiIG9uY2xpY2s9XCJzYXZlU2NyZWVuaW5nUmVzcG9uc2VzKClcIj5cdUQ4M0RcdURDQkUgU2F2ZSBBbGwgUmVzcG9uc2VzPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJuYXYtYnV0dG9ucyBuYXYtZW5kXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjI0cHg7XCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250aW51ZS1idG5cIiBvbmNsaWNrPVwiaGFuZGxlU3RlcENsaWNrKCdpbnRlcnZpZXdfcHJlcCcpXCI+XHVEODNDXHVERkE0IFByb2NlZWQgdG8gSW50ZXJ2aWV3IFByZXAgXHUyMTkyPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gO1xuXG4gIC8vIFJlc3RvcmUgdGhlIHJhdyBpbnB1dCB0ZXh0IGFuZCB3aXJlIHVwIHNhdmUtb24taW5wdXQgbGlzdGVuZXIuXG4gIGNvbnN0IHNjSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2MtaW5wdXQnKTtcbiAgaWYgKHNjSW5wdXQpIHtcbiAgICBpZiAoX3NjcmVlbmluZ0lucHV0VGV4dCkgc2NJbnB1dC52YWx1ZSA9IF9zY3JlZW5pbmdJbnB1dFRleHQ7XG4gICAgc2NJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHsgX3NjcmVlbmluZ0lucHV0VGV4dCA9IHNjSW5wdXQudmFsdWU7IH0pO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBQYXJzZSBxdWVzdGlvbnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIHBhcnNlU2NyZWVuaW5nUXVlc3Rpb25zKCkge1xuICBjb25zdCByYXcgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NjLWlucHV0Jyk/LnZhbHVlIHx8ICcnKS50cmltKCk7XG4gIGlmICghcmF3KSB7IHNob3dBbGVydE1vZGFsKCdcdTI2QTBcdUZFMEYgTm8gSW5wdXQnLCAnUGxlYXNlIHBhc3RlIGF0IGxlYXN0IG9uZSBzY3JlZW5pbmcgcXVlc3Rpb24gZmlyc3QuJyk7IHJldHVybjsgfVxuXG4gIC8vIFNwbGl0IG9uIGJsYW5rIGxpbmVzIChwcmVmZXJyZWQpIG9yIG51bWJlcmVkIGxpc3QgcGF0dGVybnM7IGZpbHRlciBlbXB0eSByZXN1bHRzXG4gIGxldCBxdWVzdGlvbnMgPSByYXcuc3BsaXQoL1xcblxccypcXG4rLykubWFwKHEgPT4gcS50cmltKCkpLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAvLyBUcnkgbnVtYmVyZWQgcGF0dGVybnMgbGlrZSBcIjEuIFwiIG9yIFwiMSkgXCIgb3IgXCJRMTpcIiB3aXRob3V0IHJlcXVpcmluZyBzcGFjZSBhZnRlclxuICAgIGNvbnN0IG51bWJlcmVkID0gcmF3LnNwbGl0KC9cXG4oPz1cXGQrWy5cXCldXFxzKig/PVtBLVpdKXxRXFxkK1s6XFwuXT9cXHMqKD89W0EtWl0pKS8pXG4gICAgICAubWFwKHEgPT4gcS50cmltKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChudW1iZXJlZC5sZW5ndGggPiAxKSBxdWVzdGlvbnMgPSBudW1iZXJlZDtcbiAgfVxuICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgIC8vIExhc3QgcmVzb3J0OiBzcGxpdCBvbiBhbnkgc2luZ2xlIG5ld2xpbmUgaWYgd2Ugc3RpbGwgaGF2ZSBqdXN0IG9uZSBcInF1ZXN0aW9uXCJcbiAgICBjb25zdCBzaW5nbGVMaW5lID0gcmF3LnNwbGl0KC9cXG4rLykubWFwKHEgPT4gcS50cmltKCkpLmZpbHRlcihxID0+IHEubGVuZ3RoID4gMCk7XG4gICAgaWYgKHNpbmdsZUxpbmUubGVuZ3RoID4gMSkgcXVlc3Rpb25zID0gc2luZ2xlTGluZTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYy1xdWVzdGlvbnMtY29udGFpbmVyJyk7XG4gIGNvbnRhaW5lci5pbm5lckhUTUwgPSBxdWVzdGlvbnMubWFwKChxLCBpKSA9PiByZW5kZXJRdWVzdGlvbkJsb2NrKHEsIGkpKS5qb2luKCcnKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NjLXNhdmUtYmFyJykuc3R5bGUuZGlzcGxheSA9IHF1ZXN0aW9ucy5sZW5ndGggPyAnJyA6ICdub25lJztcblxuICAvLyBLaWNrIG9mZiBzZWFyY2hlcyBpbiBwYXJhbGxlbFxuICBxdWVzdGlvbnMuZm9yRWFjaCgocSwgaSkgPT4gc2VhcmNoRm9yUXVlc3Rpb24ocSwgaSkpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgUmVuZGVyIHF1ZXN0aW9uIGJsb2NrIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiByZW5kZXJRdWVzdGlvbkJsb2NrKHF1ZXN0aW9uLCBpZHgpIHtcbiAgcmV0dXJuIGBcbiAgICA8ZGl2IGNsYXNzPVwic2MtcXVlc3Rpb24tYmxvY2tcIiBpZD1cInNjLWJsb2NrLSR7aWR4fVwiIGRhdGEtcXVlc3Rpb249XCIke2VzY2FwZUh0bWwocXVlc3Rpb24pfVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNjLXF1ZXN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNjLXF1ZXN0aW9uLW51bVwiPiR7aWR4ICsgMX08L3NwYW4+XG4gICAgICAgIDxzcGFuPiR7ZXNjYXBlSHRtbChxdWVzdGlvbil9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2MtcXVlc3Rpb24tYm9keVwiPlxuICAgICAgICA8ZGl2IGlkPVwic2MtcHJpb3ItJHtpZHh9XCI+PGVtIHN0eWxlPVwiY29sb3I6Izk0YTNiODtmb250LXNpemU6MC44N2VtO1wiPlNlYXJjaGluZyByZXNwb25zZSBsaWJyYXJ5XHUyMDI2PC9lbT48L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cInNjLWV4cC0ke2lkeH1cIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNjLWZvcm1hdC1yb3dcIiBpZD1cInNjLWZtdC0ke2lkeH1cIj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7YWxpZ24tc2VsZjpjZW50ZXI7XCI+Rm9ybWF0Ojwvc3Bhbj5cbiAgICAgICAgICAke1snZGlyZWN0Jywnc3RhcicsJ3RlY2huaWNhbCddLm1hcChmID0+IGBcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzYy1mb3JtYXQtYnRuJHtmID09PSAnZGlyZWN0JyA/ICcgYWN0aXZlJyA6ICcnfVwiIGRhdGEtZm10PVwiJHtmfVwiIG9uY2xpY2s9XCJzZWxlY3RGb3JtYXQoJHtpZHh9LCcke2Z9Jyx0aGlzKVwiPiR7X2ZtdExhYmVsKGYpfTwvYnV0dG9uPmApLmpvaW4oJycpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1wcmltYXJ5XCIgaWQ9XCJzYy1nZW4tYnRuLSR7aWR4fVwiIG9uY2xpY2s9XCJnZW5lcmF0ZVNjcmVlbmluZ1Jlc3BvbnNlKCR7aWR4fSlcIj5cdTI3MjggR2VuZXJhdGUgRHJhZnQ8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBpZD1cInNjLXJlc3VsdC0ke2lkeH1cIiBzdHlsZT1cIm1hcmdpbi10b3A6MTJweDtcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNjLXRvcGljLXJvd1wiIGlkPVwic2MtdG9waWMtcm93LSR7aWR4fVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJzYy10b3BpYy0ke2lkeH1cIj5Ub3BpYyB0YWc6PC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJzYy10b3BpYy1pbnB1dFwiIGlkPVwic2MtdG9waWMtJHtpZHh9XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cImUuZy4gbGVhZGVyc2hpcCwgY3Jvc3MtZnVuY3Rpb25hbCwgZGVhZGxpbmUtbWFuYWdlbWVudFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG59XG5cbmZ1bmN0aW9uIF9mbXRMYWJlbChmbXQpIHtcbiAgcmV0dXJuIHsgZGlyZWN0OiAnRGlyZWN0L0NvbmNpc2UgKDE1MFx1MjAxMzIwMHcpJywgc3RhcjogJ1NUQVIgKDI1MFx1MjAxMzM1MHcpJywgdGVjaG5pY2FsOiAnVGVjaG5pY2FsIERldGFpbCAoNDAwXHUyMDEzNTAwdyknIH1bZm10XSB8fCBmbXQ7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBGb3JtYXQgc2VsZWN0aW9uIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBzZWxlY3RGb3JtYXQoaWR4LCBmbXQsIGJ0bikge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjc2MtZm10LSR7aWR4fSAuc2MtZm9ybWF0LWJ0bmApLmZvckVhY2goYiA9PiBiLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTtcbiAgYnRuLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICBpZiAoIV9zY3JlZW5pbmdTdGF0ZVtpZHhdKSBfc2NyZWVuaW5nU3RhdGVbaWR4XSA9IHt9O1xuICBfc2NyZWVuaW5nU3RhdGVbaWR4XS5mb3JtYXQgPSBmbXQ7XG59XG5cbmZ1bmN0aW9uIF9nZXRTZWxlY3RlZEZvcm1hdChpZHgpIHtcbiAgY29uc3QgYWN0aXZlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI3NjLWZtdC0ke2lkeH0gLnNjLWZvcm1hdC1idG4uYWN0aXZlYCk7XG4gIHJldHVybiBhY3RpdmUgPyBhY3RpdmUuZ2V0QXR0cmlidXRlKCdkYXRhLWZtdCcpIDogJ2RpcmVjdCc7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBTZWFyY2ggZm9yIHByaW9yIHJlc3BvbnNlcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gc2VhcmNoRm9yUXVlc3Rpb24ocXVlc3Rpb24sIGlkeCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9zY3JlZW5pbmcvc2VhcmNoJywge1xuICAgICAgbWV0aG9kOiAgJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiAgICBKU09OLnN0cmluZ2lmeSh7IHF1ZXN0aW9uIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmICghZGF0YS5vaykgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc2MtcHJpb3ItJHtpZHh9YCkuaW5uZXJIVE1MID0gJyc7IHJldHVybjsgfVxuXG4gICAgLy8gUmVuZGVyIHByaW9yIG1hdGNoXG4gICAgY29uc3QgcHJpb3JFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzYy1wcmlvci0ke2lkeH1gKTtcbiAgICBpZiAoZGF0YS5wcmlvcikge1xuICAgICAgY29uc3QgcCA9IGRhdGEucHJpb3I7XG4gICAgICBwcmlvckVsLmlubmVySFRNTCA9IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInNjLXByaW9yLW1hdGNoXCI+XG4gICAgICAgICAgPHN0cm9uZz5cdUQ4M0RcdURDREEgU2ltaWxhciBwcmlvciByZXNwb25zZSBmb3VuZDwvc3Ryb25nPiBcdTIwMTQgJHtlc2NhcGVIdG1sKHAuY29tcGFueSB8fCAnJyl9ICgke2VzY2FwZUh0bWwocC5kYXRlIHx8ICcnKX0pPGJyPlxuICAgICAgICAgIDxlbSBzdHlsZT1cImNvbG9yOiM3ODM1MGY7XCI+XCIke2VzY2FwZUh0bWwoKHAucXVlc3Rpb24gfHwgJycpLnN1YnN0cmluZygwLCAxMjApKX1cdTIwMjZcIjwvZW0+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6NnB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwic2MtdXNlLXByaW9yLSR7aWR4fVwiIG9uY2hhbmdlPVwidG9nZ2xlUHJpb3JVc2UoJHtpZHh9KVwiPiBVc2UgYXMgc3RhcnRpbmcgcG9pbnRcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgICBpZiAoIV9zY3JlZW5pbmdTdGF0ZVtpZHhdKSBfc2NyZWVuaW5nU3RhdGVbaWR4XSA9IHt9O1xuICAgICAgX3NjcmVlbmluZ1N0YXRlW2lkeF0ucHJpb3JSZXNwb25zZSA9IHAucmVzcG9uc2VfdGV4dCB8fCAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcHJpb3JFbC5pbm5lckhUTUwgPSAnJztcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgZXhwZXJpZW5jZSBjYXJkc1xuICAgIGNvbnN0IGV4cEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNjLWV4cC0ke2lkeH1gKTtcbiAgICBpZiAoZGF0YS5leHBlcmllbmNlcyAmJiBkYXRhLmV4cGVyaWVuY2VzLmxlbmd0aCkge1xuICAgICAgY29uc3QgY2FyZHMgPSBkYXRhLmV4cGVyaWVuY2VzLm1hcChlID0+IGBcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwic2MtZXhwLWNhcmRcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1pZHg9XCIke2UuaWR4fVwiIGNoZWNrZWQgb25jaGFuZ2U9XCJ1cGRhdGVFeHBTZWxlY3Rpb24oJHtpZHh9KVwiPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OjE7XCI+XG4gICAgICAgICAgICA8c3Ryb25nPiR7ZXNjYXBlSHRtbChlLnRpdGxlKX08L3N0cm9uZz4gXHUwMEI3ICR7ZXNjYXBlSHRtbChlLmNvbXBhbnkpfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYy1zY29yZS1iYWRnZVwiPiR7TWF0aC5yb3VuZChlLnNjb3JlICogMTAwKX0lIG1hdGNoPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImNvbG9yOiM2NDc0OGI7bWFyZ2luLXRvcDoycHg7XCI+JHtlc2NhcGVIdG1sKGUuc3VtbWFyeSl9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGFiZWw+YCkuam9pbignJyk7XG4gICAgICBleHBFbC5pbm5lckhUTUwgPSBgPHAgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMzc0MTUxO21hcmdpbi1ib3R0b206NnB4O1wiPlJlbGV2YW50IGV4cGVyaWVuY2U6PC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2MtZXhwLWxpc3RcIj4ke2NhcmRzfTwvZGl2PmA7XG4gICAgICBpZiAoIV9zY3JlZW5pbmdTdGF0ZVtpZHhdKSBfc2NyZWVuaW5nU3RhdGVbaWR4XSA9IHt9O1xuICAgICAgX3NjcmVlbmluZ1N0YXRlW2lkeF0uZXhwZXJpZW5jZUluZGljZXMgPSBkYXRhLmV4cGVyaWVuY2VzLm1hcChlID0+IGUuaWR4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwRWwuaW5uZXJIVE1MID0gJyc7XG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNjLXByaW9yLSR7aWR4fWApLmlubmVySFRNTCA9ICcnO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBUb2dnbGUgcHJpb3IgdXNlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiB0b2dnbGVQcmlvclVzZShpZHgpIHtcbiAgY29uc3QgY2IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc2MtdXNlLXByaW9yLSR7aWR4fWApO1xuICBpZiAoIV9zY3JlZW5pbmdTdGF0ZVtpZHhdKSBfc2NyZWVuaW5nU3RhdGVbaWR4XSA9IHt9O1xuICBfc2NyZWVuaW5nU3RhdGVbaWR4XS51c2VQcmlvciA9IGNiPy5jaGVja2VkID8/IGZhbHNlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFeHBTZWxlY3Rpb24oaWR4KSB7XG4gIGNvbnN0IGJsb2NrICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzYy1ibG9jay0ke2lkeH1gKTtcbiAgY29uc3QgY2hlY2tlZCAgID0gQXJyYXkuZnJvbShibG9jay5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPWNoZWNrYm94XVtkYXRhLWlkeF0nKSlcbiAgICAuZmlsdGVyKGNiID0+IGNiLmNoZWNrZWQpXG4gICAgLm1hcChjYiA9PiBwYXJzZUludChjYi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWR4JyksIDEwKSk7XG4gIGlmICghX3NjcmVlbmluZ1N0YXRlW2lkeF0pIF9zY3JlZW5pbmdTdGF0ZVtpZHhdID0ge307XG4gIF9zY3JlZW5pbmdTdGF0ZVtpZHhdLmV4cGVyaWVuY2VJbmRpY2VzID0gY2hlY2tlZDtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEdlbmVyYXRlIHNjcmVlbmluZyByZXNwb25zZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVTY3JlZW5pbmdSZXNwb25zZShpZHgpIHtcbiAgLyogZHVja2Zsb3c6XG4gICAqICAgaWQ6IHNjcmVlbmluZ191aV9nZW5lcmF0ZV9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTAzLTI1VDIxOjM5OjQ4WidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6c2NyZWVuaW5nLmdlbmVyYXRlLXJlc3BvbnNlXG4gICAqICAgY2FsbHM6XG4gICAqICAgLSBQT1NUIC9hcGkvc2NyZWVuaW5nL2dlbmVyYXRlXG4gICAqICAgcmVhZHM6XG4gICAqICAgLSBkb206c2MtcXVlc3Rpb24tYmxvY2sucXVlc3Rpb25cbiAgICogICAtIHdpbmRvdzpfc2NyZWVuaW5nU3RhdGUuZm9ybWF0XG4gICAqICAgLSB3aW5kb3c6X3NjcmVlbmluZ1N0YXRlLnByaW9yUmVzcG9uc2VcbiAgICogICAtIHdpbmRvdzpfc2NyZWVuaW5nU3RhdGUuZXhwZXJpZW5jZUluZGljZXNcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9zY3JlZW5pbmcvZ2VuZXJhdGUucXVlc3Rpb25cbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL3NjcmVlbmluZy9nZW5lcmF0ZS5mb3JtYXRcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL3NjcmVlbmluZy9nZW5lcmF0ZS5leHBlcmllbmNlX2luZGljZXNcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL3NjcmVlbmluZy9nZW5lcmF0ZS5wcmlvcl9yZXNwb25zZVxuICAgKiAgIC0gd2luZG93Ol9zY3JlZW5pbmdTdGF0ZS5yZXNwb25zZVRleHRcbiAgICogICAtIHdpbmRvdzpfc2NyZWVuaW5nU3RhdGUuZm9ybWF0XG4gICAqICAgbm90ZXM6IEdlbmVyYXRlcyBhIHNpbmdsZSBzY3JlZW5pbmcgcmVzcG9uc2UgZnJvbSB0aGUgc2VsZWN0ZWQgZm9ybWF0LCBwcmlvci1yZXNwb25zZSBzZWVkLCBhbmQgY2hvc2VuIGV4cGVyaWVuY2UgZXZpZGVuY2UsIHRoZW4gc3RvcmVzIHRoZSBkcmFmdCBiYWNrIGludG8gVUkgc3RhdGUgZm9yIGVkaXRpbmcuXG4gICAqL1xuICBjb25zdCBidG4gICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzYy1nZW4tYnRuLSR7aWR4fWApO1xuICBpZiAoYnRuKSB7IGJ0bi5kaXNhYmxlZCA9IHRydWU7IGJ0bi50ZXh0Q29udGVudCA9ICdcdTIzRjMgR2VuZXJhdGluZ1x1MjAyNic7IH1cblxuICBjb25zdCBxdWVzdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzYy1ibG9jay0ke2lkeH1gKT8uZGF0YXNldC5xdWVzdGlvbiB8fCAnJztcbiAgY29uc3Qgc3RhdGUgICAgPSBfc2NyZWVuaW5nU3RhdGVbaWR4XSB8fCB7fTtcbiAgY29uc3QgZm10ICAgICAgPSBfZ2V0U2VsZWN0ZWRGb3JtYXQoaWR4KTtcbiAgY29uc3QgcHJpb3IgICAgPSAoc3RhdGUudXNlUHJpb3IgJiYgc3RhdGUucHJpb3JSZXNwb25zZSkgPyBzdGF0ZS5wcmlvclJlc3BvbnNlIDogJyc7XG4gIGNvbnN0IGV4cElkeCAgID0gc3RhdGUuZXhwZXJpZW5jZUluZGljZXMgPz8gW107XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvc2NyZWVuaW5nL2dlbmVyYXRlJywge1xuICAgICAgbWV0aG9kOiAgJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICBmb3JtYXQ6ICAgICAgICAgICAgICBmbXQsXG4gICAgICAgIGV4cGVyaWVuY2VfaW5kaWNlczogIGV4cElkeCxcbiAgICAgICAgcHJpb3JfcmVzcG9uc2U6ICAgICAgcHJpb3IsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoIWRhdGEub2spIHsgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGRhdGEuZXJyb3IgfHwgJ0dlbmVyYXRpb24gZmFpbGVkLicpOyByZXR1cm47IH1cblxuICAgIGlmICghX3NjcmVlbmluZ1N0YXRlW2lkeF0pIF9zY3JlZW5pbmdTdGF0ZVtpZHhdID0ge307XG4gICAgX3NjcmVlbmluZ1N0YXRlW2lkeF0ucmVzcG9uc2VUZXh0ID0gZGF0YS50ZXh0O1xuICAgIF9zY3JlZW5pbmdTdGF0ZVtpZHhdLmZvcm1hdCAgICAgICA9IGZtdDtcblxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzYy1yZXN1bHQtJHtpZHh9YCkuaW5uZXJIVE1MID0gYFxuICAgICAgPHRleHRhcmVhIGNsYXNzPVwic2MtcmVzcG9uc2UtdGV4dGFyZWFcIiBpZD1cInNjLXRleHQtJHtpZHh9XCIgcm93cz1cIjdcIlxuICAgICAgICBvbmlucHV0PVwiX3NjcmVlbmluZ1N0YXRlWyR7aWR4fV0gPSBfc2NyZWVuaW5nU3RhdGVbJHtpZHh9XSB8fCB7fTsgX3NjcmVlbmluZ1N0YXRlWyR7aWR4fV0ucmVzcG9uc2VUZXh0ID0gdGhpcy52YWx1ZTtcIlxuICAgICAgPiR7ZXNjYXBlSHRtbChkYXRhLnRleHQpfTwvdGV4dGFyZWE+YDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc2MtdG9waWMtcm93LSR7aWR4fWApLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIGNvbnRhY3Qgc2VydmVyLicpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChidG4pIHsgYnRuLmRpc2FibGVkID0gZmFsc2U7IGJ0bi50ZXh0Q29udGVudCA9ICdcdTI3MjggR2VuZXJhdGUgRHJhZnQnOyB9XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFNhdmUgcmVzcG9uc2VzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBzYXZlU2NyZWVuaW5nUmVzcG9uc2VzKCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogc2NyZWVuaW5nX3VpX3NhdmVfbGl2ZVxuICAgKiAgIGtpbmQ6IHVpXG4gICAqICAgdGltZXN0YW1wOiAnMjAyNi0wMy0yNVQyMTozOTo0OFonXG4gICAqICAgc3RhdHVzOiBsaXZlXG4gICAqICAgaGFuZGxlczpcbiAgICogICAtIHVpOnNjcmVlbmluZy5zYXZlLWFsbFxuICAgKiAgIGNhbGxzOlxuICAgKiAgIC0gUE9TVCAvYXBpL3NjcmVlbmluZy9zYXZlXG4gICAqICAgcmVhZHM6XG4gICAqICAgLSB3aW5kb3c6X3NjcmVlbmluZ1N0YXRlXG4gICAqICAgLSBkb206LnNjLXF1ZXN0aW9uLWJsb2NrXG4gICAqICAgLSBkb206I3NjLXRleHQtKi52YWx1ZVxuICAgKiAgIC0gZG9tOiNzYy10b3BpYy0qLnZhbHVlXG4gICAqICAgd3JpdGVzOlxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvc2NyZWVuaW5nL3NhdmUucmVzcG9uc2VzXG4gICAqICAgbm90ZXM6IEFnZ3JlZ2F0ZXMgdGhlIGVkaXRlZCBzY3JlZW5pbmcgcmVzcG9uc2VzIGFuZCB0b3BpYyB0YWdzIGZyb20gdGhlIFVJIGludG8gdGhlIHN0cnVjdHVyZWQgcGF5bG9hZCB0aGF0IGJhY2tlbmQgc3RhdGUsIG1ldGFkYXRhLCBhcmNoaXZlIERPQ1gsIGFuZCB0aGUgcmVzcG9uc2UgbGlicmFyeSBhbGwgcGVyc2lzdC5cbiAgICovXG4gIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYy1zYXZlLWJ0bicpO1xuICBpZiAoYnRuKSB7IGJ0bi5kaXNhYmxlZCA9IHRydWU7IGJ0bi50ZXh0Q29udGVudCA9ICdcdTIzRjMgU2F2aW5nXHUyMDI2JzsgfVxuXG4gIGNvbnN0IHJlc3BvbnNlcyA9IFtdO1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2MtcXVlc3Rpb24tYmxvY2snKS5mb3JFYWNoKChibG9jaywgaSkgPT4ge1xuICAgIGNvbnN0IHFFbCAgICA9IGJsb2NrLnF1ZXJ5U2VsZWN0b3IoJy5zYy1xdWVzdGlvbi1oZWFkZXIgc3BhbjpsYXN0LWNoaWxkJyk7XG4gICAgY29uc3QgdGV4dEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNjLXRleHQtJHtpfWApO1xuICAgIGNvbnN0IHRvcGljRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc2MtdG9waWMtJHtpfWApO1xuICAgIGlmICghdGV4dEVsKSByZXR1cm47IC8vIG5vdCB5ZXQgZ2VuZXJhdGVkIFx1MjAxNCBza2lwXG5cbiAgICBjb25zdCBxdWVzdGlvbiAgICAgPSBxRWwgPyBxRWwudGV4dENvbnRlbnQudHJpbSgpIDogJyc7XG4gICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gKF9zY3JlZW5pbmdTdGF0ZVtpXT8ucmVzcG9uc2VUZXh0KSB8fCB0ZXh0RWwudmFsdWUgfHwgJyc7XG4gICAgY29uc3QgZm10ICAgICAgICAgID0gX2dldFNlbGVjdGVkRm9ybWF0KGkpO1xuICAgIGNvbnN0IHRvcGljVGFnICAgICA9IHRvcGljRWwgPyB0b3BpY0VsLnZhbHVlLnRyaW0oKSA6ICcnO1xuXG4gICAgcmVzcG9uc2VzLnB1c2goeyBxdWVzdGlvbiwgdG9waWNfdGFnOiB0b3BpY1RhZywgZm9ybWF0OiBmbXQsIHJlc3BvbnNlX3RleHQ6IHJlc3BvbnNlVGV4dCB9KTtcbiAgfSk7XG5cbiAgaWYgKCFyZXNwb25zZXMubGVuZ3RoKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjZBMFx1RkUwRiBOb3RoaW5nIHRvIFNhdmUnLCAnUGxlYXNlIGdlbmVyYXRlIGF0IGxlYXN0IG9uZSByZXNwb25zZSBiZWZvcmUgc2F2aW5nLicpO1xuICAgIGlmIChidG4pIHsgYnRuLmRpc2FibGVkID0gZmFsc2U7IGJ0bi50ZXh0Q29udGVudCA9ICdcdUQ4M0RcdURDQkUgU2F2ZSBBbGwgUmVzcG9uc2VzJzsgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3NjcmVlbmluZy9zYXZlJywge1xuICAgICAgbWV0aG9kOiAgJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiAgICBKU09OLnN0cmluZ2lmeSh7IHJlc3BvbnNlcyB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBTYXZlZCcsIGAke2RhdGEuY291bnR9IHJlc3BvbnNlJHtkYXRhLmNvdW50ICE9PSAxID8gJ3MnIDogJyd9IHNhdmVkIGFzIDxzdHJvbmc+JHtlc2NhcGVIdG1sKGRhdGEuZmlsZW5hbWUpfTwvc3Ryb25nPiBhbmQgYWRkZWQgdG8geW91ciByZXNwb25zZSBsaWJyYXJ5LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIFNhdmUgRmFpbGVkJywgZGF0YS5lcnJvciB8fCAnQ291bGQgbm90IHNhdmUgcmVzcG9uc2VzLicpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIGNvbnRhY3Qgc2VydmVyLicpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChidG4pIHsgYnRuLmRpc2FibGVkID0gZmFsc2U7IGJ0bi50ZXh0Q29udGVudCA9ICdcdUQ4M0RcdURDQkUgU2F2ZSBBbGwgUmVzcG9uc2VzJzsgfVxuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFeHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQge1xuICBfc2NyZWVuaW5nU3RhdGUsXG4gIF9zY3JlZW5pbmdJbnB1dFRleHQsXG4gIF9yZXNldFNjcmVlbmluZ0lucHV0VGV4dCxcbiAgcG9wdWxhdGVTY3JlZW5pbmdUYWIsXG4gIHBhcnNlU2NyZWVuaW5nUXVlc3Rpb25zLFxuICByZW5kZXJRdWVzdGlvbkJsb2NrLFxuICBfZm10TGFiZWwsXG4gIHNlbGVjdEZvcm1hdCxcbiAgX2dldFNlbGVjdGVkRm9ybWF0LFxuICBzZWFyY2hGb3JRdWVzdGlvbixcbiAgdG9nZ2xlUHJpb3JVc2UsXG4gIHVwZGF0ZUV4cFNlbGVjdGlvbixcbiAgZ2VuZXJhdGVTY3JlZW5pbmdSZXNwb25zZSxcbiAgc2F2ZVNjcmVlbmluZ1Jlc3BvbnNlcyxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9maW5hbGlzZS5qc1xuICogRmluYWxpc2UgJiBhcmNoaXZlIHRhYjogZmluYWxpc2UgYXBwbGljYXRpb24sIGhhcnZlc3QgY2FuZGlkYXRlcyxcbiAqIGFwcGx5IHNlbGVjdGVkIHVwZGF0ZXMgdG8gbWFzdGVyIENWIGRhdGEuXG4gKlxuICogRGVwZW5kZW5jaWVzIChyZXNvbHZlZCB0aHJvdWdoIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIGVzY2FwZUh0bWwsIF9yZW5kZXJDb25zaXN0ZW5jeVJlcG9ydFxuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IGZvcm1hdEF0c1Njb3JlU3VtbWFyeSB9IGZyb20gJy4vYXRzLXJlZmluZW1lbnQuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdmaW5hbGlzZScpO1xuXG5mdW5jdGlvbiBfZm9ybWF0RHVyYXRpb24oc2Vjcykge1xuICBpZiAoc2VjcyA9PSBudWxsIHx8IHNlY3MgPCAwKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgaCA9IE1hdGguZmxvb3Ioc2VjcyAvIDM2MDApO1xuICBjb25zdCBtID0gTWF0aC5mbG9vcigoc2VjcyAlIDM2MDApIC8gNjApO1xuICBjb25zdCBzID0gc2VjcyAlIDYwO1xuICBpZiAoaCA+IDApIHJldHVybiBgJHtofWggJHttfW1gO1xuICBpZiAobSA+IDApIHJldHVybiBgJHttfW0gJHtzfXNgO1xuICByZXR1cm4gYCR7c31zYDtcbn1cblxuZnVuY3Rpb24gX3JlbmRlckZpbmFsaXNlQXRzSXRlbXMoc2NvcmUsIGF0c0tleXdvcmRzKSB7XG4gIGlmICghc2NvcmUgfHwgdHlwZW9mIHNjb3JlLm92ZXJhbGwgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGA8bGk+QVRTIGtleXdvcmRzIHRyYWNrZWQ6ICR7YXRzS2V5d29yZHMubGVuZ3RofTwvbGk+YDtcbiAgfVxuXG4gIGNvbnN0IHN1bW1hcnkgPSBmb3JtYXRBdHNTY29yZVN1bW1hcnkoc2NvcmUpO1xuICBjb25zdCBoYXJkU2NvcmUgPSB0eXBlb2Ygc2NvcmUuaGFyZF9yZXF1aXJlbWVudF9zY29yZSA9PT0gJ251bWJlcidcbiAgICA/IGAke01hdGgucm91bmQoc2NvcmUuaGFyZF9yZXF1aXJlbWVudF9zY29yZSl9JWBcbiAgICA6ICduL2EnO1xuICBjb25zdCBzb2Z0U2NvcmUgPSB0eXBlb2Ygc2NvcmUuc29mdF9yZXF1aXJlbWVudF9zY29yZSA9PT0gJ251bWJlcidcbiAgICA/IGAke01hdGgucm91bmQoc2NvcmUuc29mdF9yZXF1aXJlbWVudF9zY29yZSl9JWBcbiAgICA6ICduL2EnO1xuXG4gIHJldHVybiBbXG4gICAgYDxsaT5BVFMgc2NvcmU6IDxzdHJvbmc+JHtzdW1tYXJ5Lm92ZXJhbGx9JTwvc3Ryb25nPiA8c3BhbiBzdHlsZT1cImNvbG9yOiM0NzU1Njk7XCI+KGhhcmQgJHtoYXJkU2NvcmV9IFx1MjAyMiBzb2Z0ICR7c29mdFNjb3JlfSk8L3NwYW4+PC9saT5gLFxuICAgIGA8bGk+QVRTIGNvdmVyYWdlOiAke2VzY2FwZUh0bWwoc3VtbWFyeS5saW5lKX08L2xpPmAsXG4gICAgYDxsaT5BVFMgZGV0YWlsOiAke2VzY2FwZUh0bWwoc3VtbWFyeS5kZXRhaWwpfTwvbGk+YCxcbiAgXS5qb2luKCcnKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFBvcHVsYXRlIGZpbmFsaXNlIHRhYiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVGaW5hbGlzZVRhYigpIHtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG5cbiAgLy8gRmV0Y2ggY3VycmVudCBzdGF0dXMgdG8gZ2V0IGdlbmVyYXRlZCBmaWxlcyBhbmQgam9iIGFuYWx5c2lzIGZvciBjb25zaXN0ZW5jeSBjaGVja1xuICBsZXQgZ2VuZXJhdGVkICA9IG51bGw7XG4gIGxldCBzdGF0dXNEYXRhID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvc3RhdHVzJyk7XG4gICAgc3RhdHVzRGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgZ2VuZXJhdGVkICA9IHN0YXR1c0RhdGEuZ2VuZXJhdGVkX2ZpbGVzIHx8IG51bGw7XG4gIH0gY2F0Y2ggKGVycikgeyBsb2cud2FybignRmFpbGVkIHRvIGZldGNoIHN0YXR1cyBmb3IgZmluYWxpc2UgdGFiOicsIGVycik7IH1cblxuICBpZiAoIWdlbmVyYXRlZCB8fCAhZ2VuZXJhdGVkLm91dHB1dF9kaXIpIHtcbiAgICBjb250ZW50LmlubmVySFRNTCA9IGBcbiAgICAgIDxoMT5cdTI3MDUgRmluYWxpc2UgQXBwbGljYXRpb248L2gxPlxuICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+XHVEODNEXHVEQ0MyPC9kaXY+XG4gICAgICAgIDxoMz5ObyBDViBHZW5lcmF0ZWQgWWV0PC9oMz5cbiAgICAgICAgPHA+UGxlYXNlIGdlbmVyYXRlIGEgQ1YgZmlyc3QgYmVmb3JlIGZpbmFsaXNpbmcuPC9wPlxuICAgICAgPC9kaXY+YDtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBmaWxlcyA9IGdlbmVyYXRlZC5maWxlcyB8fCBbXTtcblxuICBsZXQgaHRtbCA9IGBcbiAgICA8aDE+XHUyNzA1IEZpbmFsaXNlIEFwcGxpY2F0aW9uPC9oMT5cbiAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7bWFyZ2luLWJvdHRvbToyNHB4O1wiPlxuICAgICAgQXJjaGl2ZSB0aGlzIGFwcGxpY2F0aW9uIHRvIHlvdXIgQ1YgaGlzdG9yeSwgdXBkYXRlIHRoZSByZXNwb25zZSBsaWJyYXJ5LCBhbmQgb3B0aW9uYWxseVxuICAgICAgd3JpdGUgYW55IGltcHJvdmVtZW50cyBiYWNrIHRvIE1hc3RlciBDViBEYXRhLlxuICAgIDwvcD5cblxuICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmMGZkZjQ7Ym9yZGVyOjFweCBzb2xpZCAjYmJmN2QwO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTZweDttYXJnaW4tYm90dG9tOjI0cHg7XCI+XG4gICAgICA8aDMgc3R5bGU9XCJtYXJnaW46MCAwIDEwcHg7XCI+XHVEODNEXHVEQ0MyIEdlbmVyYXRlZCBGaWxlczwvaDM+XG4gICAgICA8dWwgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nLWxlZnQ6MjBweDtsaW5lLWhlaWdodDoxLjg7XCI+XG4gICAgICAgICR7ZmlsZXMubWFwKGYgPT4gYDxsaT48Y29kZSBzdHlsZT1cImZvbnQtc2l6ZTowLjllbTtcIj4ke2VzY2FwZUh0bWwoZil9PC9jb2RlPjwvbGk+YCkuam9pbignJykgfHwgJzxsaT4obm9uZSk8L2xpPid9XG4gICAgICA8L3VsPlxuICAgICAgPHAgc3R5bGU9XCJtYXJnaW46OHB4IDAgMDtmb250LXNpemU6MC44NWVtO2NvbG9yOiMxNjY1MzQ7XCI+T3V0cHV0IGRpcjogPGNvZGU+JHtlc2NhcGVIdG1sKGdlbmVyYXRlZC5vdXRwdXRfZGlyKX08L2NvZGU+PC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBpZD1cInJlYWRpbmVzcy1jaGVja2xpc3RcIj48L2Rpdj5cbiAgICA8ZGl2IGlkPVwiY29uc2lzdGVuY3ktcmVwb3J0XCI+PC9kaXY+XG4gICAgPGRpdiBpZD1cInJld3JpdGUtYXVkaXQtbG9nXCI+PC9kaXY+XG5cbiAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjIwcHg7bWFyZ2luLWJvdHRvbToyNHB4O1wiPlxuICAgICAgPGgzIHN0eWxlPVwibWFyZ2luOjAgMCAxNnB4O1wiPlx1RDgzRFx1RENDQiBBcHBsaWNhdGlvbiBTdGF0dXM8L2gzPlxuXG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgICA8bGFiZWwgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjZweDtcIiBmb3I9XCJmaW5hbGlzZS1zdGF0dXNcIj5TdGF0dXM8L2xhYmVsPlxuICAgICAgICA8c2VsZWN0IGlkPVwiZmluYWxpc2Utc3RhdHVzXCIgc3R5bGU9XCJ3aWR0aDoyMjBweDtwYWRkaW5nOjhweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2NiZDVlMTtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MC45NWVtO1wiPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkcmFmdFwiPkRyYWZ0IFx1MjAxNCBub3QgeWV0IHNlbnQ8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmVhZHlcIiBzZWxlY3RlZD5SZWFkeSB0byBzZW5kPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInNlbnRcIj5TZW50PC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImludGVydmlld1wiPkludGVydmlldyBzY2hlZHVsZWQ8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmVqZWN0ZWRcIj5SZWplY3RlZDwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhY2NlcHRlZFwiPkFjY2VwdGVkPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjIwcHg7XCI+XG4gICAgICAgIDxsYWJlbCBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NnB4O1wiIGZvcj1cImZpbmFsaXNlLW5vdGVzXCI+Tm90ZXM8L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgaWQ9XCJmaW5hbGlzZS1ub3Rlc1wiIHJvd3M9XCI0XCIgbWF4bGVuZ3RoPVwiMjAwMFwiXG4gICAgICAgICAgb25pbnB1dD1cImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5hbGlzZS1ub3Rlcy1jb3VudGVyJykudGV4dENvbnRlbnQ9dGhpcy52YWx1ZS5sZW5ndGgrJyAvIDIwMDAnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5hbGlzZS1ub3Rlcy1jb3VudGVyJykuc3R5bGUuY29sb3I9dGhpcy52YWx1ZS5sZW5ndGg+MTgwMD8nI2RjMjYyNic6dGhpcy52YWx1ZS5sZW5ndGg+MTYwMD8nI2Q5NzcwNic6JyM2YjcyODAnXCJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2NiZDVlMTtib3JkZXItcmFkaXVzOjZweDtcbiAgICAgICAgICAgICAgICAgZm9udC1zaXplOjAuOTJlbTtyZXNpemU6dmVydGljYWw7Ym94LXNpemluZzpib3JkZXItYm94O1wiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJSZWNydWl0ZXIgbmFtZSwgc2FsYXJ5IGluZm8sIGZvbGxvdy11cCBkYXRlLCBpbnRlcnZpZXcgbm90ZXNcdTIwMjZcIj48L3RleHRhcmVhPlxuICAgICAgICA8ZGl2IGlkPVwiZmluYWxpc2Utbm90ZXMtY291bnRlclwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodDtmb250LXNpemU6MC44ZW07Y29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOjJweDtcIj4wIC8gMjAwMDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxidXR0b24gaWQ9XCJmaW5hbGlzZS1idG5cIiBvbmNsaWNrPVwiZmluYWxpc2VBcHBsaWNhdGlvbigpXCJcbiAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiMwNTk2Njk7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjZweDtcbiAgICAgICAgICAgICAgIHBhZGRpbmc6MTBweCAyNHB4O2ZvbnQtc2l6ZToxZW07Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyO1wiPlxuICAgICAgICBcdTI3MDUgRmluYWxpc2UgJmFtcDsgQXJjaGl2ZVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGlkPVwiZmluYWxpc2UtcmVzdWx0XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9kaXY+XG4gICAgPGRpdiBpZD1cImhhcnZlc3Qtc2VjdGlvblwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPjwvZGl2PlxuICBgO1xuXG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgX3JlbmRlclJlYWRpbmVzc0NoZWNrbGlzdChmaWxlcywgc3RhdHVzRGF0YSk7XG4gIGlmIChzdGF0dXNEYXRhKSBfcmVuZGVyQ29uc2lzdGVuY3lSZXBvcnQoc3RhdHVzRGF0YSk7XG4gIF9yZW5kZXJSZXdyaXRlQXVkaXRMb2coKTtcbiAgX3Jlc3RvcmVGaW5hbGlzZU1ldGEoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX3Jlc3RvcmVGaW5hbGlzZU1ldGEoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvZmluYWxpc2UtbWV0YScpO1xuICAgIGlmICghcmVzLm9rKSByZXR1cm47XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluYWxpc2Utc3RhdHVzJyk7XG4gICAgY29uc3Qgbm90ZXNFbCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluYWxpc2Utbm90ZXMnKTtcbiAgICBpZiAoc3RhdHVzRWwgJiYgZGF0YS5hcHBsaWNhdGlvbl9zdGF0dXMpIHN0YXR1c0VsLnZhbHVlID0gZGF0YS5hcHBsaWNhdGlvbl9zdGF0dXM7XG4gICAgaWYgKG5vdGVzRWwgICYmIGRhdGEubm90ZXMpIHtcbiAgICAgIG5vdGVzRWwudmFsdWUgPSBkYXRhLm5vdGVzO1xuICAgICAgY29uc3QgY291bnRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5hbGlzZS1ub3Rlcy1jb3VudGVyJyk7XG4gICAgICBpZiAoY291bnRlcikge1xuICAgICAgICBjb25zdCBsZW4gPSBkYXRhLm5vdGVzLmxlbmd0aDtcbiAgICAgICAgY291bnRlci50ZXh0Q29udGVudCA9IGAke2xlbn0gLyAyMDAwYDtcbiAgICAgICAgY291bnRlci5zdHlsZS5jb2xvciA9IGxlbiA+IDE4MDAgPyAnI2RjMjYyNicgOiBsZW4gPiAxNjAwID8gJyNkOTc3MDYnIDogJyM2YjcyODAnO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoXykge31cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFN1Ym1pc3Npb24gcmVhZGluZXNzIGNoZWNrbGlzdCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gX3JlbmRlclJlYWRpbmVzc0NoZWNrbGlzdChmaWxlcywgc3RhdHVzRGF0YSkge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWFkaW5lc3MtY2hlY2tsaXN0Jyk7XG4gIGlmICghZWwpIHJldHVybjtcblxuICBjb25zdCBmaWxlU2V0ID0gbmV3IFNldCgoZmlsZXMgfHwgW10pLm1hcChmID0+IChmIHx8ICcnKS50b0xvd2VyQ2FzZSgpKSk7XG4gIGNvbnN0IGhhc1BkZiAgPSBbLi4uZmlsZVNldF0uc29tZShmID0+IGYuZW5kc1dpdGgoJy5wZGYnKSAmJiAhZi5pbmNsdWRlcygnY292ZXJsZXR0ZXInKSAmJiAhZi5pbmNsdWRlcygnY292ZXJfbGV0dGVyJykpO1xuICBjb25zdCBoYXNEb2N4ID0gWy4uLmZpbGVTZXRdLnNvbWUoZiA9PiBmLmVuZHNXaXRoKCcuZG9jeCcpICYmICFmLmluY2x1ZGVzKCdjb3ZlcmxldHRlcicpICYmICFmLmluY2x1ZGVzKCdjb3Zlcl9sZXR0ZXInKSAmJiAhZi5pbmNsdWRlcygnc2NyZWVuaW5nJykpO1xuICBjb25zdCBoYXNIdG1sID0gWy4uLmZpbGVTZXRdLnNvbWUoZiA9PiBmLmVuZHNXaXRoKCcuaHRtbCcpKTtcbiAgY29uc3QgaGFzQ2wgICA9IFsuLi5maWxlU2V0XS5zb21lKGYgPT4gZi5pbmNsdWRlcygnY292ZXJsZXR0ZXInKSB8fCBmLmluY2x1ZGVzKCdjb3Zlcl9sZXR0ZXInKSk7XG4gIGNvbnN0IGhhc1NjciAgPSBbLi4uZmlsZVNldF0uc29tZShmID0+IGYuaW5jbHVkZXMoJ3NjcmVlbmluZycpKTtcblxuICBjb25zdCBhdHNDaGVja3MgID0gc3RhdHVzRGF0YT8uYXRzX2NoZWNrcyB8fCBbXTtcbiAgY29uc3QgYXRzRmFpbHMgICA9IChhdHNDaGVja3MpLmZpbHRlcihjID0+IGMuc3RhdHVzID09PSAnZmFpbCcgfHwgYy5zdGF0dXMgPT09ICdlcnJvcicpLmxlbmd0aDtcbiAgY29uc3QgYXRzU2Nhbm5lZCA9IGF0c0NoZWNrcy5sZW5ndGggPiAwO1xuXG4gIGNvbnN0IGxheW91dEZyZXNoID0gc3RhdHVzRGF0YT8ubGF5b3V0X2ZyZXNobmVzcyAhPT0gJ3N0YWxlJztcblxuICBjb25zdCBpdGVtcyA9IFtcbiAgICB7IG9rOiBoYXNQZGYsICAgbGFiZWw6ICdDViBQREYgZ2VuZXJhdGVkJywgICAgICAgIHdhcm46IGZhbHNlIH0sXG4gICAgeyBvazogaGFzRG9jeCwgIGxhYmVsOiAnQ1YgRE9DWCBnZW5lcmF0ZWQnLCAgICAgICB3YXJuOiBmYWxzZSB9LFxuICAgIHsgb2s6IGhhc0h0bWwsICBsYWJlbDogJ0NWIEhUTUwgZ2VuZXJhdGVkJywgICAgICAgd2FybjogZmFsc2UgfSxcbiAgICB7IG9rOiBoYXNDbCwgICAgbGFiZWw6ICdDb3ZlciBsZXR0ZXIgZ2VuZXJhdGVkJywgIHdhcm46IHRydWUgIH0sXG4gICAgeyBvazogaGFzU2NyLCAgIGxhYmVsOiAnU2NyZWVuaW5nIFEmQSBnZW5lcmF0ZWQnLCB3YXJuOiB0cnVlICB9LFxuICAgIHsgb2s6IGF0c1NjYW5uZWQgJiYgYXRzRmFpbHMgPT09IDAsIHdhcm46IHRydWUsXG4gICAgICBsYWJlbDogYXRzU2Nhbm5lZFxuICAgICAgICA/IChhdHNGYWlscyA+IDAgPyBgQVRTIHZhbGlkYXRpb24gXHUyMDE0ICR7YXRzRmFpbHN9IGlzc3VlJHthdHNGYWlscyAhPT0gMSA/ICdzJyA6ICcnfSBmb3VuZGAgOiAnQVRTIHZhbGlkYXRpb24gcGFzc2VkJylcbiAgICAgICAgOiAnQVRTIHZhbGlkYXRpb24gbm90IHlldCBydW4nIH0sXG4gICAgeyBvazogbGF5b3V0RnJlc2gsIHdhcm46IHRydWUsIGxhYmVsOiAnTGF5b3V0IGlzIGN1cnJlbnQgKG5vdCBzdGFsZSknIH0sXG4gIF07XG5cbiAgY29uc3Qgcm93cyA9IGl0ZW1zLm1hcCgoeyBvaywgbGFiZWwsIHdhcm4gfSkgPT4ge1xuICAgIGNvbnN0IGljb24gID0gb2sgPyAnXHUyNzA1JyA6ICh3YXJuID8gJ1x1MjZBMCcgOiAnXHUyNzRDJyk7XG4gICAgY29uc3QgY29sb3IgPSBvayA/ICcjMDY1ZjQ2JyA6ICh3YXJuID8gJyM5MjQwMGUnIDogJyM5OTFiMWInKTtcbiAgICBjb25zdCBiZyAgICA9IG9rID8gJyNmMGZkZjQnIDogKHdhcm4gPyAnI2ZmZmJlYicgOiAnI2ZlZjJmMicpO1xuICAgIHJldHVybiBgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7cGFkZGluZzo4cHggMTJweDtiYWNrZ3JvdW5kOiR7Ymd9O2JvcmRlci1yYWRpdXM6NnB4O21hcmdpbi1ib3R0b206NnB4O1wiPlxuICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJmb250LXNpemU6MS4xZW07XCI+JHtpY29ufTwvc3Bhbj5cbiAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6JHtjb2xvcn07Zm9udC1zaXplOjAuOTJlbTtcIj4ke2VzY2FwZUh0bWwobGFiZWwpfTwvc3Bhbj5cbiAgICA8L2Rpdj5gO1xuICB9KS5qb2luKCcnKTtcblxuICBjb25zdCBhbGxSZXF1aXJlZCA9IGhhc1BkZiAmJiBoYXNEb2N4ICYmIGhhc0h0bWw7XG4gIGNvbnN0IGhlYWRlckNvbG9yID0gYWxsUmVxdWlyZWQgPyAnIzA2NWY0NicgOiAnIzkyNDAwZSc7XG4gIGVsLmlubmVySFRNTCA9IGBcbiAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE2cHggMjBweDttYXJnaW4tYm90dG9tOjI0cHg7XCI+XG4gICAgICA8aDMgc3R5bGU9XCJtYXJnaW46MCAwIDEycHg7Y29sb3I6JHtoZWFkZXJDb2xvcn07XCI+XHVEODNEXHVEQ0NCIFN1Ym1pc3Npb24gUmVhZGluZXNzPC9oMz5cbiAgICAgICR7cm93c31cbiAgICAgIDxwIHN0eWxlPVwibWFyZ2luOjEwcHggMCAwO2ZvbnQtc2l6ZTowLjgyZW07Y29sb3I6IzY0NzQ4YjtcIj5cbiAgICAgICAgXHUyNkEwIGl0ZW1zIGFyZSBvcHRpb25hbCBcdTIwMTQgdGhleSB3YXJuIGJ1dCBkbyBub3QgYmxvY2sgYXJjaGl2aW5nLlxuICAgICAgICBcdTI3NEMgaXRlbXMgbXVzdCBiZSByZXNvbHZlZCBiZWZvcmUgc3VibWl0dGluZy5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5gO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgUmV3cml0ZSBhdWRpdCBsb2cgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIF9yZW5kZXJSZXdyaXRlQXVkaXRMb2coKSB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jld3JpdGUtYXVkaXQtbG9nJyk7XG4gIGlmICghZWwpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvcmV3cml0ZXMnKTtcbiAgICBpZiAoIXJlcy5vaykgcmV0dXJuO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGNvbnN0IGF1ZGl0ID0gZGF0YS5yZXdyaXRlX2F1ZGl0IHx8IFtdO1xuICAgIGlmIChhdWRpdC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCByb3dzID0gYXVkaXQubWFwKGVudHJ5ID0+IHtcbiAgICAgIGNvbnN0IG91dGNvbWUgPSBlbnRyeS5vdXRjb21lIHx8IGVudHJ5LmRlY2lzaW9uIHx8ICdcdTIwMTQnO1xuICAgICAgY29uc3QgaWNvbiA9IG91dGNvbWUgPT09ICdhY2NlcHRlZCcgPyAnXHUyNzA1JyA6IG91dGNvbWUgPT09ICdlZGl0ZWQnID8gJ1x1MjcwRlx1RkUwRicgOiBvdXRjb21lID09PSAncmVqZWN0ZWQnID8gJ1x1Mjc0QycgOiAnXHUyMDE0JztcbiAgICAgIGNvbnN0IG9yaWdpbmFsICA9IGVzY2FwZUh0bWwoKGVudHJ5Lm9yaWdpbmFsX3RleHQgfHwgZW50cnkub3JpZ2luYWwgfHwgJycpLnNsaWNlKDAsIDEyMCkpO1xuICAgICAgY29uc3QgZmluYWwgICAgID0gZXNjYXBlSHRtbCgoZW50cnkuZmluYWxfdGV4dCB8fCBlbnRyeS5yZXdyaXR0ZW4gfHwgZW50cnkuc3VnZ2VzdGVkIHx8ICcnKS5zbGljZSgwLCAxMjApKTtcbiAgICAgIGNvbnN0IGZpZWxkICAgICA9IGVzY2FwZUh0bWwoZW50cnkuZmllbGQgfHwgZW50cnkudHlwZSB8fCAnXHUyMDE0Jyk7XG4gICAgICByZXR1cm4gYDx0cj5cbiAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O2ZvbnQtc2l6ZTowLjhlbTtjb2xvcjojNmI3MjgwO1wiPiR7ZmllbGR9PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O2ZvbnQtc2l6ZTowLjhlbTtjb2xvcjojMzc0MTUxO1wiPiR7b3JpZ2luYWx9JHtvcmlnaW5hbC5sZW5ndGggPT09IDEyMCA/ICdcdTIwMjYnIDogJyd9PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O2ZvbnQtc2l6ZTowLjhlbTtjb2xvcjojMzc0MTUxO1wiPiR7ZmluYWx9JHtmaW5hbC5sZW5ndGggPT09IDEyMCA/ICdcdTIwMjYnIDogJyd9PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O2ZvbnQtc2l6ZTowLjhlbTt0ZXh0LWFsaWduOmNlbnRlcjtcIj4ke2ljb259ICR7ZXNjYXBlSHRtbChvdXRjb21lKX08L3RkPlxuICAgICAgPC90cj5gO1xuICAgIH0pLmpvaW4oJycpO1xuICAgIGVsLmlubmVySFRNTCA9IGBcbiAgICAgIDxkZXRhaWxzIHN0eWxlPVwibWFyZ2luLWJvdHRvbToyNHB4O1wiPlxuICAgICAgICA8c3VtbWFyeSBzdHlsZT1cImN1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MC45NWVtO3BhZGRpbmc6MTBweCAwO2NvbG9yOiMzNzQxNTE7dXNlci1zZWxlY3Q6bm9uZTtcIj5cbiAgICAgICAgICBcdUQ4M0RcdURDQ0IgUmV3cml0ZSBhdWRpdCBsb2cgKCR7YXVkaXQubGVuZ3RofSBkZWNpc2lvbiR7YXVkaXQubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9KVxuICAgICAgICA8L3N1bW1hcnk+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdy14OmF1dG87bWFyZ2luLXRvcDoxMHB4O1wiPlxuICAgICAgICAgIDx0YWJsZSBzdHlsZT1cIndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2ZvbnQtc2l6ZTowLjg1ZW07XCI+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgIDx0ciBzdHlsZT1cImJhY2tncm91bmQ6I2Y4ZmFmYztib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZTJlOGYwO1wiPlxuICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cInBhZGRpbmc6OHB4O3RleHQtYWxpZ246bGVmdDtjb2xvcjojMzc0MTUxO2ZvbnQtd2VpZ2h0OjYwMDtcIj5GaWVsZDwvdGg+XG4gICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwicGFkZGluZzo4cHg7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiMzNzQxNTE7Zm9udC13ZWlnaHQ6NjAwO1wiPk9yaWdpbmFsPC90aD5cbiAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJwYWRkaW5nOjhweDt0ZXh0LWFsaWduOmxlZnQ7Y29sb3I6IzM3NDE1MTtmb250LXdlaWdodDo2MDA7XCI+RmluYWw8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cInBhZGRpbmc6OHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiMzNzQxNTE7Zm9udC13ZWlnaHQ6NjAwO1wiPk91dGNvbWU8L3RoPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keT4ke3Jvd3N9PC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGV0YWlscz5gO1xuICB9IGNhdGNoIHsgLyogbm9uLWZhdGFsICovIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEZpbmFsaXNlIGFwcGxpY2F0aW9uIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBmaW5hbGlzZUFwcGxpY2F0aW9uKCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogZmluYWxpc2VfdWlfc3VibWl0X2xpdmVcbiAgICogICBraW5kOiB1aVxuICAgKiAgIHRpbWVzdGFtcDogJzIwMjYtMDMtMjVUMjE6Mzk6NDhaJ1xuICAgKiAgIHN0YXR1czogbGl2ZVxuICAgKiAgIGhhbmRsZXM6XG4gICAqICAgLSB1aTpmaW5hbGlzZS5zdWJtaXRcbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9maW5hbGlzZVxuICAgKiAgIHJlYWRzOlxuICAgKiAgIC0gZG9tOiNmaW5hbGlzZS1zdGF0dXMudmFsdWVcbiAgICogICAtIGRvbTojZmluYWxpc2Utbm90ZXMudmFsdWVcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9maW5hbGlzZS5zdGF0dXNcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL2ZpbmFsaXNlLm5vdGVzXG4gICAqICAgLSBkb206I2ZpbmFsaXNlLXJlc3VsdFxuICAgKiAgIG5vdGVzOiBTdWJtaXRzIGZpbmFsIGFwcGxpY2F0aW9uIHN0YXR1cyBhbmQgbm90ZXMgc28gYmFja2VuZCBtZXRhZGF0YSwgYXJjaGl2ZSBzdGF0ZSwgYW5kIG9wdGlvbmFsIGdpdCBmaW5hbGl6YXRpb24gY2FuIGJlIHdyaXR0ZW4gZnJvbSB0aGUgY3VycmVudCBzZXNzaW9uLlxuICAgKi9cbiAgY29uc3QgYnRuICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbmFsaXNlLWJ0bicpO1xuICBjb25zdCByZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluYWxpc2UtcmVzdWx0Jyk7XG4gIGNvbnN0IHN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5hbGlzZS1zdGF0dXMnKS52YWx1ZTtcbiAgY29uc3Qgbm90ZXMgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbmFsaXNlLW5vdGVzJykudmFsdWU7XG5cbiAgYnRuLmRpc2FibGVkICAgID0gdHJ1ZTtcbiAgYnRuLnRleHRDb250ZW50ID0gJ1x1MjNGMyBGaW5hbGlzaW5nXHUyMDI2JztcbiAgcmVzdWx0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3VsdC5pbm5lckhUTUwgICAgID0gJyc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvZmluYWxpc2UnLCB7XG4gICAgICBtZXRob2Q6ICAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6ICAgIEpTT04uc3RyaW5naWZ5KHsgc3RhdHVzLCBub3RlcyB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgIGlmICghcmVzLm9rIHx8ICFkYXRhLm9rKSB7XG4gICAgICByZXN1bHQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICByZXN1bHQuaW5uZXJIVE1MID0gYDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZWUyZTI7Ym9yZGVyOjFweCBzb2xpZCAjZmNhNWE1O2JvcmRlci1yYWRpdXM6OHB4O1xuICAgICAgICBwYWRkaW5nOjE0cHggMThweDtjb2xvcjojOTkxYjFiO1wiPlxuICAgICAgICA8c3Ryb25nPlx1Mjc0QyBFcnJvcjo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKGRhdGEuZXJyb3IgfHwgJ0ZpbmFsaXNlIGZhaWxlZCcpfVxuICAgICAgPC9kaXY+YDtcbiAgICAgIGJ0bi5kaXNhYmxlZCAgICA9IGZhbHNlO1xuICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1x1MjcwNSBGaW5hbGlzZSAmIEFyY2hpdmUnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN1bW1hcnkgPSBkYXRhLnN1bW1hcnkgfHwge307XG4gICAgY29uc3QgaGFzaCAgICA9IGRhdGEuY29tbWl0X2hhc2ggPyBgPGNvZGUgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO1wiPiR7ZXNjYXBlSHRtbChkYXRhLmNvbW1pdF9oYXNoKX08L2NvZGU+YCA6ICcobm8gY29tbWl0KSc7XG4gICAgY29uc3QgZ2l0V2FybiA9IGRhdGEuZ2l0X2Vycm9yXG4gICAgICA/IGA8cCBzdHlsZT1cImNvbG9yOiNkOTc3MDY7Zm9udC1zaXplOjAuODdlbTttYXJnaW4tdG9wOjhweDtcIj5cdTI2QTAgR2l0OiAke2VzY2FwZUh0bWwoZGF0YS5naXRfZXJyb3IpfTwvcD5gXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGFwcHJvdmVkQ291bnQgPSBzdW1tYXJ5LmFwcHJvdmVkX3Jld3JpdGVzID8/IDA7XG4gICAgY29uc3QgYXRzS2V5d29yZHMgICA9IHN1bW1hcnkuYXRzX2tleXdvcmRzIHx8IFtdO1xuICAgIGNvbnN0IGF0c1Njb3JlICAgICAgPSBzdW1tYXJ5LmF0c19zY29yZSB8fCBudWxsO1xuICAgIGNvbnN0IGR1cmF0aW9uU2VjcyAgPSBzdW1tYXJ5LnNlc3Npb25fZHVyYXRpb25fc2VjcztcbiAgICBjb25zdCBkdXJhdGlvblN0ciAgID0gZHVyYXRpb25TZWNzICE9IG51bGwgPyBfZm9ybWF0RHVyYXRpb24oZHVyYXRpb25TZWNzKSA6IG51bGw7XG5cbiAgICByZXN1bHQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgcmVzdWx0LmlubmVySFRNTCA9IGBcbiAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmMGZkZjQ7Ym9yZGVyOjFweCBzb2xpZCAjODZlZmFjO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTZweCAyMHB4O21hcmdpbi1ib3R0b206MjBweDtcIj5cbiAgICAgICAgPHN0cm9uZz5cdTI3MDUgQXBwbGljYXRpb24gYXJjaGl2ZWQhPC9zdHJvbmc+XG4gICAgICAgIDx1bCBzdHlsZT1cIm1hcmdpbjo4cHggMCAwO3BhZGRpbmctbGVmdDoyMHB4O2xpbmUtaGVpZ2h0OjEuODtmb250LXNpemU6MC45MmVtO1wiPlxuICAgICAgICAgIDxsaT5TdGF0dXM6IDxzdHJvbmc+JHtlc2NhcGVIdG1sKHN0YXR1cyl9PC9zdHJvbmc+PC9saT5cbiAgICAgICAgICA8bGk+QXBwcm92ZWQgcmV3cml0ZXM6ICR7YXBwcm92ZWRDb3VudH08L2xpPlxuICAgICAgICAgICR7X3JlbmRlckZpbmFsaXNlQXRzSXRlbXMoYXRzU2NvcmUsIGF0c0tleXdvcmRzKX1cbiAgICAgICAgICAke2R1cmF0aW9uU3RyID8gYDxsaT5TZXNzaW9uIGR1cmF0aW9uOiAke2VzY2FwZUh0bWwoZHVyYXRpb25TdHIpfTwvbGk+YCA6ICcnfVxuICAgICAgICAgIDxsaT5HaXQgY29tbWl0OiAke2hhc2h9PC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgICAgJHtnaXRXYXJufVxuICAgICAgPC9kaXY+YDtcblxuICAgIGJ0bi50ZXh0Q29udGVudCA9ICdcdTI3MDUgQXJjaGl2ZWQnO1xuXG4gICAgLy8gU2hvdyBoYXJ2ZXN0IHNlY3Rpb25cbiAgICBhd2FpdCBzaG93SGFydmVzdFNlY3Rpb24oKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmVzdWx0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIHJlc3VsdC5pbm5lckhUTUwgPSBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZTJlMjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czo4cHg7XG4gICAgICBwYWRkaW5nOjE0cHggMThweDtjb2xvcjojOTkxYjFiO1wiPlxuICAgICAgPHN0cm9uZz5cdTI3NEMgTmV0d29yayBlcnJvcjo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKGVyci5tZXNzYWdlKX1cbiAgICA8L2Rpdj5gO1xuICAgIGJ0bi5kaXNhYmxlZCAgICA9IGZhbHNlO1xuICAgIGJ0bi50ZXh0Q29udGVudCA9ICdcdTI3MDUgRmluYWxpc2UgJiBBcmNoaXZlJztcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgU2hvdyBoYXJ2ZXN0IHNlY3Rpb24gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dIYXJ2ZXN0U2VjdGlvbigpIHtcbiAgY29uc3Qgc2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoYXJ2ZXN0LXNlY3Rpb24nKTtcbiAgc2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgc2VjdGlvbi5pbm5lckhUTUwgPSBgXG4gICAgPGgyIHN0eWxlPVwibWFyZ2luLXRvcDowO1wiPlx1RDgzRFx1RENFNSBVcGRhdGUgTWFzdGVyIENWIERhdGE8L2gyPlxuICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjE2cHg7XCI+TG9hZGluZyBpbXByb3ZlbWVudCBjYW5kaWRhdGVzIGZyb20gdGhpcyBzZXNzaW9uXHUyMDI2PC9wPlxuICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjI0cHg7XCI+PGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPjwvZGl2PjwvZGl2PmA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvaGFydmVzdC9jYW5kaWRhdGVzJyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICBpZiAoIWRhdGEub2spIHtcbiAgICAgIHNlY3Rpb24uaW5uZXJIVE1MID0gYFxuICAgICAgICA8aDIgc3R5bGU9XCJtYXJnaW4tdG9wOjA7XCI+XHVEODNEXHVEQ0U1IFVwZGF0ZSBNYXN0ZXIgQ1YgRGF0YTwvaDI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZWUyZTI7Ym9yZGVyOjFweCBzb2xpZCAjZmNhNWE1O2JvcmRlci1yYWRpdXM6OHB4O1xuICAgICAgICAgIHBhZGRpbmc6MTJweCAxNnB4O2NvbG9yOiM5OTFiMWI7XCI+XG4gICAgICAgICAgXHUyNzRDICR7ZXNjYXBlSHRtbChkYXRhLmVycm9yIHx8ICdGYWlsZWQgdG8gbG9hZCBjYW5kaWRhdGVzJyl9XG4gICAgICAgIDwvZGl2PmA7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IGRhdGEuY2FuZGlkYXRlcyB8fCBbXTtcblxuICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc2VjdGlvbi5pbm5lckhUTUwgPSBgXG4gICAgICAgIDxoMiBzdHlsZT1cIm1hcmdpbi10b3A6MDtcIj5cdUQ4M0RcdURDRTUgVXBkYXRlIE1hc3RlciBDViBEYXRhPC9oMj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCIgc3R5bGU9XCJwYWRkaW5nOjI0cHggMDtcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiPlx1RDgzRFx1RENDQjwvZGl2PlxuICAgICAgICAgIDxoMz5ObyBVcGRhdGUgQ2FuZGlkYXRlczwvaDM+XG4gICAgICAgICAgPHA+Tm90aGluZyBmcm9tIHRoaXMgc2Vzc2lvbiB3YXJyYW50cyB3cml0aW5nIGJhY2sgdG8gdGhlIG1hc3RlciBDVi48L3A+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZUljb25zID0ge1xuICAgICAgaW1wcm92ZWRfYnVsbGV0OiAgICAnXHUyNzBGXHVGRTBGJyxcbiAgICAgIG5ld19za2lsbDogICAgICAgICAgJ1x1RDgzRFx1REVFMCcsXG4gICAgICBzdW1tYXJ5X3ZhcmlhbnQ6ICAgICdcdUQ4M0RcdURDREQnLFxuICAgICAgc2tpbGxfZ2FwX2NvbmZpcm1lZDonXHUyNzA1JyxcbiAgICB9O1xuXG4gICAgbGV0IGh0bWwgPSBgXG4gICAgICA8aDIgc3R5bGU9XCJtYXJnaW4tdG9wOjA7XCI+XHVEODNEXHVEQ0U1IFVwZGF0ZSBNYXN0ZXIgQ1YgRGF0YTwvaDI+XG4gICAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7bWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgICBTZWxlY3QgaW1wcm92ZW1lbnRzIGZyb20gdGhpcyBzZXNzaW9uIHRvIHdyaXRlIGJhY2sgdG8gPGNvZGU+TWFzdGVyX0NWX0RhdGEuanNvbjwvY29kZT4uXG4gICAgICAgIE5vIGl0ZW1zIGFyZSBwcmUtc2VsZWN0ZWQgXHUyMDE0IGNob29zZSBvbmx5IHdoYXQgeW91IHdhbnQgdG8ga2VlcC5cbiAgICAgIDwvcD5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInJldmlldy10YWJsZVwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MzZweDt0ZXh0LWFsaWduOmNlbnRlcjtcIj5JbmNsdWRlPC90aD5cbiAgICAgICAgICAgIDx0aD5UeXBlPC90aD5cbiAgICAgICAgICAgIDx0aD5DaGFuZ2U8L3RoPlxuICAgICAgICAgICAgPHRoPlJhdGlvbmFsZTwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PmA7XG5cbiAgICBmb3IgKGNvbnN0IGMgb2YgY2FuZGlkYXRlcykge1xuICAgICAgY29uc3QgaWNvbiAgICAgPSB0eXBlSWNvbnNbYy50eXBlXSB8fCAnXHVEODNEXHVEQ0NDJztcbiAgICAgIGNvbnN0IG9yaWdpbmFsID0gYy5vcmlnaW5hbCAmJiBjLm9yaWdpbmFsICE9PSAnKG5vdCBpbiBtYXN0ZXIgZGF0YSknXG4gICAgICAgID8gYDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC44MmVtO2NvbG9yOiM2YjcyODA7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbToycHg7XG4gICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdoO1wiPiR7ZXNjYXBlSHRtbChjLm9yaWdpbmFsKX08L2Rpdj5gXG4gICAgICAgIDogJyc7XG4gICAgICBodG1sICs9IGBcbiAgICAgICAgPHRyIGlkPVwiaGFydmVzdC1yb3ctJHtlc2NhcGVIdG1sKGMuaWQpfVwiPlxuICAgICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiaGFydmVzdC1jaGstJHtlc2NhcGVIdG1sKGMuaWQpfVwiXG4gICAgICAgICAgICAgIGRhdGEtaGFydmVzdC1pZD1cIiR7ZXNjYXBlSHRtbChjLmlkKX1cIiBzdHlsZT1cIndpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Y3Vyc29yOnBvaW50ZXI7XCI+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8c3BhbiB0aXRsZT1cIiR7ZXNjYXBlSHRtbChjLnR5cGUpfVwiPiR7aWNvbn08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzQ3NTU2OTttYXJnaW4tbGVmdDo0cHg7XCI+JHtlc2NhcGVIdG1sKGMudHlwZS5yZXBsYWNlKC9fL2csJyAnKSl9PC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OjUwMDtcIj4ke2VzY2FwZUh0bWwoYy5sYWJlbCl9PC9kaXY+XG4gICAgICAgICAgICAke29yaWdpbmFsfVxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjg4ZW07Y29sb3I6IzFlMjkzYjttYXJnaW4tdG9wOjJweDtcIj4ke2VzY2FwZUh0bWwoYy5wcm9wb3NlZCl9PC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOiM2NDc0OGI7XCI+JHtlc2NhcGVIdG1sKGMucmF0aW9uYWxlKX08L3RkPlxuICAgICAgICA8L3RyPmA7XG4gICAgfVxuXG4gICAgaHRtbCArPSBgXG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6MTJweDthbGlnbi1pdGVtczpjZW50ZXI7XCI+XG4gICAgICAgIDxidXR0b24gb25jbGljaz1cImFwcGx5SGFydmVzdFNlbGVjdGlvbnMoKVwiXG4gICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiMwZWE1ZTk7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjZweDtcbiAgICAgICAgICAgICAgICAgcGFkZGluZzoxMHB4IDI0cHg7Zm9udC1zaXplOjFlbTtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7XCIgaWQ9XCJoYXJ2ZXN0LWFwcGx5LWJ0blwiPlxuICAgICAgICAgIFx1RDgzRFx1RENFNSBBcHBseSBTZWxlY3RlZCBVcGRhdGVzXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGFydmVzdC1zZWN0aW9uJykuc3R5bGUuZGlzcGxheT0nbm9uZSdcIlxuICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDojZjFmNWY5O2NvbG9yOiM0NzU1Njk7Ym9yZGVyOjFweCBzb2xpZCAjY2JkNWUxO2JvcmRlci1yYWRpdXM6NnB4O1xuICAgICAgICAgICAgICAgICBwYWRkaW5nOjEwcHggMjBweDtmb250LXNpemU6MC45NWVtO2N1cnNvcjpwb2ludGVyO1wiPlxuICAgICAgICAgIFNraXBcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJoYXJ2ZXN0LXJlc3VsdFwiIHN0eWxlPVwibWFyZ2luLXRvcDoxNnB4O1wiPjwvZGl2PmA7XG5cbiAgICBzZWN0aW9uLmlubmVySFRNTCA9IGh0bWw7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHNlY3Rpb24uaW5uZXJIVE1MID0gYFxuICAgICAgPGgyIHN0eWxlPVwibWFyZ2luLXRvcDowO1wiPlx1RDgzRFx1RENFNSBVcGRhdGUgTWFzdGVyIENWIERhdGE8L2gyPlxuICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZTJlMjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czo4cHg7XG4gICAgICAgIHBhZGRpbmc6MTJweCAxNnB4O2NvbG9yOiM5OTFiMWI7XCI+XG4gICAgICAgIFx1Mjc0QyBOZXR3b3JrIGVycm9yOiAke2VzY2FwZUh0bWwoZXJyLm1lc3NhZ2UpfVxuICAgICAgPC9kaXY+YDtcbiAgfVxufVxuXG4vLyBhcHBseUhhcnZlc3RTZWxlY3Rpb25zKCkgKGJvdW5kIHZpYSB0aGUgYnV0dG9uJ3Mgb25jbGljayBhYm92ZSkgbGl2ZXMgaW5cbi8vIHdlYi9oYXJ2ZXN0LmpzLCBub3QgaGVyZSBcdTIwMTQgdGhpcyBmaWxlIHVzZWQgdG8gY2FycnkgaXRzIG93biBkaXZlcmdlbnRcbi8vIGR1cGxpY2F0ZSAoZGlmZmVyZW50IGNvbmZpcm0vbWVzc2FnZSBjb3B5LCBubyBjb25maXJtLW1vZGFsIHN0ZXApLCBidXRcbi8vIHNpbmNlIGJvdGggZmlsZXMgcmVuZGVyIGEgYnV0dG9uIHdpdGggdGhlIHNhbWUgb25jbGljayBhbmQgd2luZG93IHJlc29sdmVzXG4vLyBiYXJlIGlkZW50aWZpZXJzIGF0IGNsaWNrIHRpbWUsIGhhcnZlc3QuanMncyB2ZXJzaW9uIHdhcyBhbHdheXMgdGhlIG9uZVxuLy8gYWN0dWFsbHkgaW52b2tlZCBpbiBwcm9kdWN0aW9uIHJlZ2FyZGxlc3M7IHRoaXMgY29weSB3YXMgdW5yZWFjaGFibGUgZGVhZFxuLy8gY29kZS4gUmVtb3ZlZDsgc2VlIHdlYi9oYXJ2ZXN0LmpzLlxuXG4vLyBcdTI1MDBcdTI1MDAgRXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHtcbiAgcG9wdWxhdGVGaW5hbGlzZVRhYixcbiAgZmluYWxpc2VBcHBsaWNhdGlvbixcbiAgc2hvd0hhcnZlc3RTZWN0aW9uLFxuICBfcmVuZGVyUmVhZGluZXNzQ2hlY2tsaXN0LFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL2ludGVydmlldy1wcmVwLmpzXG4gKiBJbnRlcnZpZXcgUHJlcGFyYXRpb24gcGhhc2UgXHUyMDE0IHBsYWNlaG9sZGVyIGNvbnRlbnQgd2l0aCBuYXZpZ2F0aW9uLlxuICpcbiAqIERlcGVuZGVuY2llcyAocmVzb2x2ZWQgdGhyb3VnaCBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICBoYW5kbGVTdGVwQ2xpY2tcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ2ludGVydmlldy1wcmVwJyk7XG5cbmFzeW5jIGZ1bmN0aW9uIHBvcHVsYXRlSW50ZXJ2aWV3UHJlcFRhYigpIHtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGlmICghY29udGVudCkgcmV0dXJuO1xuXG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgc3R5bGU9XCJtYXgtd2lkdGg6NzAwcHg7bWFyZ2luOjAgYXV0bztwYWRkaW5nOjQwcHggMjBweDt0ZXh0LWFsaWduOmNlbnRlcjtcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6M2VtO21hcmdpbi1ib3R0b206MTZweDtcIj5cdUQ4M0NcdURGQTQ8L2Rpdj5cbiAgICAgIDxoMiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTJweDtcIj5JbnRlcnZpZXcgUHJlcGFyYXRpb248L2gyPlxuICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206OHB4O1wiPlxuICAgICAgICBBSS1nZW5lcmF0ZWQgaW50ZXJ2aWV3IHByZXBhcmF0aW9uIGJhc2VkIG9uIHRoaXMgam9iIGFuZCB5b3VyIENWIGlzIGNvbWluZyBzb29uLlxuICAgICAgPC9wPlxuICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjllbTtcIj5cbiAgICAgICAgVGhpcyB3aWxsIGluY2x1ZGUgbGlrZWx5IGludGVydmlldyBxdWVzdGlvbnMsIHN1Z2dlc3RlZCB0YWxraW5nIHBvaW50cywgYW5kXG4gICAgICAgIFNUQVItZm9ybWF0IGFuc3dlcnMgZHJhd24gZnJvbSB5b3VyIGV4cGVyaWVuY2UuXG4gICAgICA8L3A+XG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDo0MHB4O1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXByaW1hcnlcIiBvbmNsaWNrPVwiaGFuZGxlU3RlcENsaWNrKCd0aGFua195b3UnKVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MWVtO3BhZGRpbmc6MTBweCAyNHB4O1wiPlxuICAgICAgICAgIFByb2NlZWQgdG8gVGhhbmsgWW91IExldHRlciBcdTIxOTJcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gO1xuXG4gIGxvZy5kZWJ1ZygnSW50ZXJ2aWV3IHByZXAgcGxhY2Vob2xkZXIgcmVuZGVyZWQnKTtcbn1cblxuZXhwb3J0IHsgcG9wdWxhdGVJbnRlcnZpZXdQcmVwVGFiIH07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi90aGFuay15b3UuanNcbiAqIFRoYW5rIFlvdSBMZXR0ZXIgcGhhc2UgXHUyMDE0IHBsYWNlaG9sZGVyIGNvbnRlbnQgd2l0aCBuYXZpZ2F0aW9uLlxuICpcbiAqIERlcGVuZGVuY2llcyAocmVzb2x2ZWQgdGhyb3VnaCBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICBoYW5kbGVTdGVwQ2xpY2tcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ3RoYW5rLXlvdScpO1xuXG5hc3luYyBmdW5jdGlvbiBwb3B1bGF0ZVRoYW5rWW91VGFiKCkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250ZW50KSByZXR1cm47XG5cbiAgY29udGVudC5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBzdHlsZT1cIm1heC13aWR0aDo3MDBweDttYXJnaW46MCBhdXRvO3BhZGRpbmc6NDBweCAyMHB4O3RleHQtYWxpZ246Y2VudGVyO1wiPlxuICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTozZW07bWFyZ2luLWJvdHRvbToxNnB4O1wiPlx1RDgzRFx1REU0RjwvZGl2PlxuICAgICAgPGgyIHN0eWxlPVwibWFyZ2luLWJvdHRvbToxMnB4O1wiPlRoYW5rIFlvdSBMZXR0ZXI8L2gyPlxuICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206OHB4O1wiPlxuICAgICAgICBBSS1nZW5lcmF0ZWQgdGhhbmsgeW91IGxldHRlciB0ZW1wbGF0ZXMgYXJlIGNvbWluZyBzb29uLlxuICAgICAgPC9wPlxuICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjllbTtcIj5cbiAgICAgICAgQWZ0ZXIgeW91ciBpbnRlcnZpZXcsIHVzZSB0aGlzIHRvIGdlbmVyYXRlIGEgcGVyc29uYWxpc2VkIHRoYW5rIHlvdSBub3RlXG4gICAgICAgIHRoYXQgcmVpbmZvcmNlcyB5b3VyIGZpdCBmb3IgdGhlIHJvbGUuXG4gICAgICA8L3A+XG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDo0MHB4O1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXByaW1hcnlcIiBvbmNsaWNrPVwiaGFuZGxlU3RlcENsaWNrKCdoYXJ2ZXN0JylcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOjFlbTtwYWRkaW5nOjEwcHggMjRweDtcIj5cbiAgICAgICAgICBQcm9jZWVkIHRvIEhhcnZlc3QgSW1wcm92ZW1lbnRzIFx1MjE5MlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG5cbiAgbG9nLmRlYnVnKCdUaGFuayB5b3UgbGV0dGVyIHBsYWNlaG9sZGVyIHJlbmRlcmVkJyk7XG59XG5cbmV4cG9ydCB7IHBvcHVsYXRlVGhhbmtZb3VUYWIgfTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogSGFydmVzdCB0YWI6IExMTS1zY29yZWQgZ3JvdXBlZCB2aWV3IG9mIG1hc3Rlci1DViBpbXByb3ZlbWVudCBjYW5kaWRhdGVzLlxuICpcbiAqIFB1YmxpYyBleHBvcnRzOlxuICogICBwb3B1bGF0ZUhhcnZlc3RUYWIoKSAgICAgICAgXHUyMDE0IGNhbGxlZCBieSByZXZpZXctdGFibGUtYmFzZS5qcyBvbiB0YWIgc3dpdGNoXG4gKiAgIGFwcGx5SGFydmVzdFNlbGVjdGlvbnMoKSAgICBcdTIwMTQgY2FsbGVkIGJ5IGlubGluZSBvbmNsaWNrIG9uIHRoZSBBcHBseSBidXR0b25cbiAqICAgcmVmcmVzaEhhcnZlc3RBbmFseXNpcygpICAgIFx1MjAxNCBjYWxsZWQgYnkgaW5saW5lIG9uY2xpY2sgb24gdGhlIFJlZnJlc2ggYnV0dG9uXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZXNjLCByZW5kZXJQcm9wb3NhbFJvdywgYXR0YWNoUHJvcG9zYWxSb3dMaXN0ZW5lcnMgfSBmcm9tICcuL3Byb3Bvc2FsLXJldmlldy5qcyc7XG5cbmNvbnN0IGxvZyA9IGdldExvZ2dlcignaGFydmVzdCcpO1xuXG4vLyBcdTI1MDBcdTI1MDAgRGlzcGxheSBjb25maWcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKlxuICogTWVyZ2VkIGRpc3BsYXkgdHlwZSBjb25maWcuXG4gKiBuZXdfc2tpbGwgYW5kIHNraWxsX2dhcF9jb25maXJtZWQgYm90aCBtYXAgdG8gdGhlICdza2lsbCcgZGlzcGxheSBncm91cC5cbiAqL1xuY29uc3QgSEFSVkVTVF9UWVBFX0NPTkZJRyA9IHtcbiAgaW1wcm92ZWRfYnVsbGV0OiAgICAgeyBsYWJlbDogJ0V4cGVyaWVuY2UgQnVsbGV0cycsICAgICBpY29uOiAnXHUyNzBGXHVGRTBGJywgIHNvcnQ6IDEsIGRpc3BsYXlUeXBlOiAnaW1wcm92ZWRfYnVsbGV0JyAgICAgfSxcbiAgbmV3X3NraWxsOiAgICAgICAgICAgeyBsYWJlbDogJ1NraWxscycsICAgICAgICAgICAgICAgICBpY29uOiAnXHVEODNEXHVERUUwXHVGRTBGJywgIHNvcnQ6IDIsIGRpc3BsYXlUeXBlOiAnc2tpbGwnICAgICAgICAgICAgICAgfSxcbiAgc2tpbGxfZ2FwX2NvbmZpcm1lZDogeyBsYWJlbDogJ1NraWxscycsICAgICAgICAgICAgICAgICBpY29uOiAnXHVEODNEXHVERUUwXHVGRTBGJywgIHNvcnQ6IDIsIGRpc3BsYXlUeXBlOiAnc2tpbGwnICAgICAgICAgICAgICAgfSxcbiAgc3VtbWFyeV92YXJpYW50OiAgICAgeyBsYWJlbDogJ1Byb2Zlc3Npb25hbCBTdW1tYXJ5JywgICBpY29uOiAnXHVEODNEXHVEQ0REJywgIHNvcnQ6IDMsIGRpc3BsYXlUeXBlOiAnc3VtbWFyeV92YXJpYW50JyAgICAgfSxcbiAgc2tpbGxfdHlwZV91cGRhdGU6ICAgeyBsYWJlbDogJ1NraWxsIENsYXNzaWZpY2F0aW9uJywgICBpY29uOiAnXHVEODNDXHVERkY3XHVGRTBGJywgIHNvcnQ6IDQsIGRpc3BsYXlUeXBlOiAnc2tpbGxfdHlwZV91cGRhdGUnICB9LFxufTtcblxuY29uc3QgSEFSVkVTVF9UWVBFX0RFU0NSSVBUSU9OUyA9IHtcbiAgaW1wcm92ZWRfYnVsbGV0OiAgICAgICdSZXdyaXR0ZW4gYWNoaWV2ZW1lbnQgYnVsbGV0cyB5b3UgYXBwcm92ZWQgaW4gdGhlIFJld3JpdGVzIHN0ZXAuIFByb21vdGluZyB1cGRhdGVzIHRoZSBidWxsZXQgdGV4dCBpbiB5b3VyIG1hc3RlciBDVi4nLFxuICBza2lsbDogICAgICAgICAgICAgICAgJ1NraWxscyBhYnNlbnQgZnJvbSB5b3VyIG1hc3RlciBDViBcdTIwMTQgZWl0aGVyIGFkZGVkIChcdUQ4M0NcdUREOTUgQWRkZWQpIGR1cmluZyB0aGUgU2tpbGxzIFJldmlldyBvciBjb25maXJtZWQgd2hlbiBhc2tlZCAoXHUyNzA1IENvbmZpcm1lZCkuIFByb21vdGluZyBhZGRzIHRoZW0gdG8geW91ciBza2lsbHMgc2VjdGlvbi4nLFxuICBzdW1tYXJ5X3ZhcmlhbnQ6ICAgICAgJ0EgcmV3cml0dGVuIHZlcnNpb24gb2YgeW91ciBwcm9mZXNzaW9uYWwgc3VtbWFyeS4gUHJvbW90aW5nIHN0b3JlcyBpdCBhcyBhIG5hbWVkIHZhcmlhbnQgaW4geW91ciBtYXN0ZXIgQ1YuJyxcbiAgc2tpbGxfdHlwZV91cGRhdGU6ICAgICdIYXJkL3NvZnQgc2tpbGwgY2xhc3NpZmljYXRpb25zIHlvdSBjaGFuZ2VkIGR1cmluZyB0aGlzIHNlc3Npb24uIFByb21vdGluZyBwZXJzaXN0cyB0aGUgbmV3IHR5cGUgc28gaXQgaXMgbm90IHJlLWNsYXNzaWZpZWQgb24gZXZlcnkgYXBwbGljYXRpb24uJyxcbn07XG5cbmNvbnN0IEhBUlZFU1RfU09VUkNFX0JBREdFID0ge1xuICBuZXdfc2tpbGw6ICAgICAgICAgICAnPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC43NWVtO2JhY2tncm91bmQ6I2RiZWFmZTtjb2xvcjojMWQ0ZWQ4O2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MXB4IDZweDttYXJnaW4tbGVmdDo2cHg7d2hpdGUtc3BhY2U6bm93cmFwO1wiPlx1RDgzQ1x1REQ5NSBBZGRlZDwvc3Bhbj4nLFxuICBza2lsbF9nYXBfY29uZmlybWVkOiAnPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC43NWVtO2JhY2tncm91bmQ6I2RjZmNlNztjb2xvcjojMTY2NTM0O2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MXB4IDZweDttYXJnaW4tbGVmdDo2cHg7d2hpdGUtc3BhY2U6bm93cmFwO1wiPlx1MjcwNSBDb25maXJtZWQ8L3NwYW4+JyxcbiAgc2tpbGxfdHlwZV91cGRhdGU6ICAgJzxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuNzVlbTtiYWNrZ3JvdW5kOiNmZWY5YzM7Y29sb3I6Izg1NGQwZTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjFweCA2cHg7bWFyZ2luLWxlZnQ6NnB4O3doaXRlLXNwYWNlOm5vd3JhcDtcIj5cdUQ4M0NcdURGRjdcdUZFMEYgUmVjbGFzc2lmaWVkPC9zcGFuPicsXG59O1xuXG5jb25zdCBSRUNfQ09ORklHID0ge1xuICBwcm9tb3RlOiB7IGxhYmVsOiAnUHJvbW90ZScsICAgICAgaWNvbjogJ1x1MkIwNlx1RkUwRicsICBjb2xvcjogJyMxNjY1MzQnLCBiZzogJyNmMGZkZjQnLCBzb3J0OiAwIH0sXG4gIHNraXA6ICAgIHsgbGFiZWw6ICdTa2lwJywgICAgICAgICBpY29uOiAnXHUyM0VEXHVGRTBGJywgIGNvbG9yOiAnIzlhMzQxMicsIGJnOiAnI2ZmZjdlZCcsIHNvcnQ6IDEgfSxcbiAgbnVsbDogICAgeyBsYWJlbDogJ1VuYW5hbHl6ZWQnLCAgIGljb246ICdcdTI3NTMnLCAgY29sb3I6ICcjNGI1NTYzJywgYmc6ICcjZjlmYWZiJywgc29ydDogMiB9LFxufTtcblxuY29uc3QgQ09ORl9DT05GSUcgPSB7XG4gIGhpZ2g6ICAgeyBsYWJlbDogJ0hpZ2gnLCAgIGNvbG9yOiAnIzE1ODAzZCcsIGJnOiAnI2YwZmRmNCcsIHNvcnQ6IDAgfSxcbiAgbWVkaXVtOiB7IGxhYmVsOiAnTWVkaXVtJywgY29sb3I6ICcjYjQ1MzA5JywgYmc6ICcjZmZmYmViJywgc29ydDogMSB9LFxuICBsb3c6ICAgIHsgbGFiZWw6ICdMb3cnLCAgICBjb2xvcjogJyNiOTFjMWMnLCBiZzogJyNmZWYyZjInLCBzb3J0OiAyIH0sXG4gIG51bGw6ICAgeyBsYWJlbDogJycsICAgICAgIGNvbG9yOiAnIzZiNzI4MCcsIGJnOiAnI2Y5ZmFmYicsIHNvcnQ6IDMgfSxcbn07XG5cbi8vIFx1MjUwMFx1MjUwMCBHcm91cGluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gZ2V0RGlzcGxheVR5cGUoY2FuZGlkYXRlKSB7XG4gIHJldHVybiBIQVJWRVNUX1RZUEVfQ09ORklHW2NhbmRpZGF0ZS50eXBlXT8uZGlzcGxheVR5cGUgPz8gY2FuZGlkYXRlLnR5cGU7XG59XG5cbi8qKlxuICogR3JvdXAgZW5yaWNoZWQgY2FuZGlkYXRlcyBpbnRvIGEgbmVzdGVkIHN0cnVjdHVyZTpcbiAqICAgeyBkaXNwbGF5VHlwZSBcdTIxOTIgeyByZWMgXHUyMTkyIHsgY29uZmlkZW5jZSBcdTIxOTIgW2NhbmRpZGF0ZSwgXHUyMDI2XSB9IH0gfVxuICovXG5mdW5jdGlvbiBncm91cENhbmRpZGF0ZXMoZW5yaWNoZWQpIHtcbiAgY29uc3QgZ3JvdXBzID0ge307XG4gIGZvciAoY29uc3QgYyBvZiBlbnJpY2hlZCkge1xuICAgIGNvbnN0IGR0ICAgPSBnZXREaXNwbGF5VHlwZShjKTtcbiAgICBjb25zdCByZWMgID0gYy5yZWNvbW1lbmRhdGlvbiA/PyAnbnVsbCc7XG4gICAgY29uc3QgY29uZiA9IGMuY29uZmlkZW5jZSAgICAgPz8gJ251bGwnO1xuICAgIGlmICghZ3JvdXBzW2R0XSkgICAgICAgICAgICAgICAgZ3JvdXBzW2R0XSAgICAgICA9IHt9O1xuICAgIGlmICghZ3JvdXBzW2R0XVtyZWNdKSAgICAgICAgICAgZ3JvdXBzW2R0XVtyZWNdICA9IHt9O1xuICAgIGlmICghZ3JvdXBzW2R0XVtyZWNdW2NvbmZdKSAgICAgZ3JvdXBzW2R0XVtyZWNdW2NvbmZdID0gW107XG4gICAgZ3JvdXBzW2R0XVtyZWNdW2NvbmZdLnB1c2goYyk7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcztcbn1cblxuZnVuY3Rpb24gc29ydGVkS2V5cyhvYmosIGNvbmZpZ01hcCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3Qgc2EgPSBjb25maWdNYXBbYV0/LnNvcnQgPz8gOTk7XG4gICAgY29uc3Qgc2IgPSBjb25maWdNYXBbYl0/LnNvcnQgPz8gOTk7XG4gICAgcmV0dXJuIHNhIC0gc2I7XG4gIH0pO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgUHJlLWNoZWNrIGxvZ2ljIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuLy8gQWxsIGhhcnZlc3QgaXRlbXMgc3RhcnQgdW5jaGVja2VkIFx1MjAxNCBtYXN0ZXIgQ1YgdXBkYXRlcyBhcmUgb3B0LWluIG9ubHkgKFVTLUExMSkuXG4vLyBHcm91cHMgd2l0aCBoaWdoL21lZGl1bSBjb25maWRlbmNlIHByb21vdGlvbnMgYXJlIGV4cGFuZGVkIHNvIGNhbmRpZGF0ZXMgYXJlXG4vLyBwcm9taW5lbnQsIGJ1dCBubyBjaGVja2JveCBpcyBwcmUtc2VsZWN0ZWQuXG5cbmZ1bmN0aW9uIHNob3VsZFByZUNoZWNrKF9jYW5kaWRhdGUpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgQ29sbGFwc2UgZGVmYXVsdCBsb2dpYyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gdHlwZUdyb3VwRXhwYW5kZWQoZHRDYW5kaWRhdGVzKSB7XG4gIHJldHVybiBkdENhbmRpZGF0ZXMuc29tZShjID0+IGMucmVjb21tZW5kYXRpb24gPT09ICdwcm9tb3RlJyAmJlxuICAgIChjLmNvbmZpZGVuY2UgPT09ICdoaWdoJyB8fCBjLmNvbmZpZGVuY2UgPT09ICdtZWRpdW0nKSk7XG59XG5cbmZ1bmN0aW9uIHJlY0dyb3VwRXhwYW5kZWQocmVjLCBjb25mQ2FuZGlkYXRlcykge1xuICBpZiAocmVjICE9PSAncHJvbW90ZScpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGNvbmZDYW5kaWRhdGVzLnNvbWUoYyA9PiBjLmNvbmZpZGVuY2UgPT09ICdoaWdoJyB8fCBjLmNvbmZpZGVuY2UgPT09ICdtZWRpdW0nKTtcbn1cblxuZnVuY3Rpb24gY29uZlRpZXJFeHBhbmRlZChyZWMsIGNvbmYpIHtcbiAgcmV0dXJuIHJlYyA9PT0gJ3Byb21vdGUnICYmIChjb25mID09PSAnaGlnaCcgfHwgY29uZiA9PT0gJ21lZGl1bScpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgUmVuZGVyaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiByZW5kZXJDb25maWRlbmNlQmFkZ2UoY29uZikge1xuICBjb25zdCBjZmcgPSBDT05GX0NPTkZJR1tjb25mXSA/PyBDT05GX0NPTkZJR1snbnVsbCddO1xuICBpZiAoIWNmZy5sYWJlbCkgcmV0dXJuICcnO1xuICByZXR1cm4gYDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuN2VtO2ZvbnQtd2VpZ2h0OjYwMDtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjFweCA2cHg7YmFja2dyb3VuZDoke2NmZy5iZ307Y29sb3I6JHtjZmcuY29sb3J9O2JvcmRlcjoxcHggc29saWQgJHtjZmcuY29sb3J9MzA7d2hpdGUtc3BhY2U6bm93cmFwO1wiPiR7ZXNjKGNmZy5sYWJlbCl9PC9zcGFuPmA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJlY29tbWVuZGF0aW9uQmFkZ2UocmVjKSB7XG4gIGNvbnN0IGNmZyA9IFJFQ19DT05GSUdbcmVjXSA/PyBSRUNfQ09ORklHWydudWxsJ107XG4gIHJldHVybiBgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC43NWVtO2ZvbnQtd2VpZ2h0OjYwMDtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjJweCA4cHg7YmFja2dyb3VuZDoke2NmZy5iZ307Y29sb3I6JHtjZmcuY29sb3J9O3doaXRlLXNwYWNlOm5vd3JhcDtcIj4ke2NmZy5pY29ufSAke2VzYyhjZmcubGFiZWwpfTwvc3Bhbj5gO1xufVxuXG5mdW5jdGlvbiByZW5kZXJDYW5kaWRhdGVSb3coYywgaWR4KSB7XG4gIGNvbnN0IHR5cGVDZmcgICA9IEhBUlZFU1RfVFlQRV9DT05GSUdbYy50eXBlXSA/PyB7fTtcbiAgY29uc3QgcmVjQmFkZ2UgID0gYy5yZWNvbW1lbmRhdGlvbiA/IHJlbmRlclJlY29tbWVuZGF0aW9uQmFkZ2UoYy5yZWNvbW1lbmRhdGlvbikgOiAnJztcbiAgY29uc3QgY29uZkJhZGdlID0gYy5jb25maWRlbmNlID8gcmVuZGVyQ29uZmlkZW5jZUJhZGdlKGMuY29uZmlkZW5jZSkgOiAnJztcbiAgY29uc3QgaGFzUmVhc29uaW5nID0gYy5hbmFseXNpc0F2YWlsYWJsZSAmJiBjLnJlYXNvbmluZztcblxuICByZXR1cm4gcmVuZGVyUHJvcG9zYWxSb3coe1xuICAgIGlkOiAgICAgICAgICAgICAgYy5pZCxcbiAgICB0eXBlTGFiZWw6ICAgICAgIHR5cGVDZmcubGFiZWwgPz8gYy50eXBlLFxuICAgIHNvdXJjZUJhZGdlSHRtbDogSEFSVkVTVF9TT1VSQ0VfQkFER0VbYy50eXBlXSA/PyAnJyxcbiAgICBsYWJlbDogICAgICAgICAgIGMubGFiZWwsXG4gICAgb3JpZ2luYWw6ICAgICAgICBjLm9yaWdpbmFsLFxuICAgIHByb3Bvc2VkOiAgICAgICAgYy5wcm9wb3NlZCxcbiAgICBkZXRhaWxUZXh0OiAgICAgIGhhc1JlYXNvbmluZyA/IGMucmVhc29uaW5nIDogbnVsbCxcbiAgICBiYWRnZXNIdG1sOiAgICAgICBgJHtyZWNCYWRnZX0ke2NvbmZCYWRnZX1gLFxuICAgIGNoZWNrZWQ6ICAgICAgICAgc2hvdWxkUHJlQ2hlY2soYyksXG4gIH0sIHtcbiAgICBpZFByZWZpeDogICAgICAgICAnaGFydmVzdCcsXG4gICAgY2hlY2tib3hEYXRhQXR0cjogJ2hhcnZlc3QtaWQnLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ29uZmlkZW5jZVRpZXIocmVjLCBjb25mLCBjYW5kaWRhdGVzKSB7XG4gIGNvbnN0IGNmZyAgICAgID0gQ09ORl9DT05GSUdbY29uZl0gPz8gQ09ORl9DT05GSUdbJ251bGwnXTtcbiAgY29uc3QgZXhwYW5kZWQgPSBjb25mVGllckV4cGFuZGVkKHJlYywgY29uZik7XG4gIGNvbnN0IHRpZXJJZCAgID0gYGhhcnZlc3QtY29uZi0ke3JlY30tJHtjb25mfS0ke0RhdGUubm93KCl9YDtcbiAgY29uc3QgY291bnQgICAgPSBjYW5kaWRhdGVzLmxlbmd0aDtcblxuICBpZiAoIWNmZy5sYWJlbCkge1xuICAgIC8vIE5vLWFuYWx5c2lzIHRpZXIgXHUyMDE0IHJlbmRlciByb3dzIGRpcmVjdGx5IHdpdGhvdXQgYSBzdWItaGVhZGVyXG4gICAgcmV0dXJuIGNhbmRpZGF0ZXMubWFwKChjLCBpKSA9PiByZW5kZXJDYW5kaWRhdGVSb3coYywgaSkpLmpvaW4oJycpO1xuICB9XG5cbiAgY29uc3QgdG9nZ2xlSWNvbiA9IGV4cGFuZGVkID8gJ1x1MjVCRScgOiAnXHUyNUI4JztcbiAgY29uc3QgaGVhZGVySHRtbCA9IGBcbiAgICA8dHIgY2xhc3M9XCJoYXJ2ZXN0LWNvbmYtaGVhZGVyXCIgc3R5bGU9XCJjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOiNmYWZhZmE7XCIgb25jbGljaz1cInRvZ2dsZUhhcnZlc3RTZWN0aW9uKCcke3RpZXJJZH0nKVwiPlxuICAgICAgPHRkIGNvbHNwYW49XCIyXCIgc3R5bGU9XCJwYWRkaW5nOjZweCAxMnB4IDZweCAzNnB4O2ZvbnQtc2l6ZTowLjhlbTtjb2xvcjoke2NmZy5jb2xvcn07Zm9udC13ZWlnaHQ6NjAwO1wiPlxuICAgICAgICA8c3BhbiBpZD1cIiR7dGllcklkfS1pY29uXCI+JHt0b2dnbGVJY29ufTwvc3Bhbj5cbiAgICAgICAgJHtlc2MoY2ZnLmxhYmVsKX0gY29uZmlkZW5jZVxuICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM5Y2EzYWY7bWFyZ2luLWxlZnQ6NnB4O1wiPigke2NvdW50fSk8L3NwYW4+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gICAgPHRib2R5IGlkPVwiJHt0aWVySWR9XCIgc3R5bGU9XCIke2V4cGFuZGVkID8gJycgOiAnZGlzcGxheTpub25lOyd9XCI+XG4gICAgICAke2NhbmRpZGF0ZXMubWFwKChjLCBpKSA9PiByZW5kZXJDYW5kaWRhdGVSb3coYywgaSkpLmpvaW4oJycpfVxuICAgIDwvdGJvZHk+YDtcbiAgcmV0dXJuIGhlYWRlckh0bWw7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJlY0dyb3VwKGR0LCByZWMsIGNvbmZNYXApIHtcbiAgY29uc3QgY2ZnID0gUkVDX0NPTkZJR1tyZWNdID8/IFJFQ19DT05GSUdbJ251bGwnXTtcbiAgY29uc3QgYWxsQ2FuZHMgPSBPYmplY3QudmFsdWVzKGNvbmZNYXApLmZsYXQoKTtcbiAgY29uc3QgZXhwYW5kZWQgPSByZWNHcm91cEV4cGFuZGVkKHJlYywgYWxsQ2FuZHMpO1xuICBjb25zdCBncm91cElkICA9IGBoYXJ2ZXN0LXJlYy0ke2R0fS0ke3JlY30tJHtEYXRlLm5vdygpfWA7XG4gIGNvbnN0IGNvdW50ICAgID0gYWxsQ2FuZHMubGVuZ3RoO1xuXG4gIGNvbnN0IGNvbmZzICAgID0gc29ydGVkS2V5cyhjb25mTWFwLCBDT05GX0NPTkZJRyk7XG4gIGNvbnN0IGhhc011bHRpcGxlQ29uZnMgPSBjb25mcy5sZW5ndGggPiAxIHx8IChjb25mcy5sZW5ndGggPT09IDEgJiYgQ09ORl9DT05GSUdbY29uZnNbMF1dPy5sYWJlbCk7XG5cbiAgY29uc3QgaW5uZXJSb3dzID0gY29uZnMubWFwKGNvbmYgPT4gcmVuZGVyQ29uZmlkZW5jZVRpZXIocmVjLCBjb25mLCBjb25mTWFwW2NvbmZdKSkuam9pbignJyk7XG5cbiAgY29uc3QgdG9nZ2xlSWNvbiA9IGV4cGFuZGVkID8gJ1x1MjVCRScgOiAnXHUyNUI4JztcbiAgcmV0dXJuIGBcbiAgICA8dHIgY2xhc3M9XCJoYXJ2ZXN0LXJlYy1oZWFkZXJcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6JHtjZmcuYmd9O1wiIG9uY2xpY2s9XCJ0b2dnbGVIYXJ2ZXN0U2VjdGlvbignJHtncm91cElkfScpXCI+XG4gICAgICA8dGQgY29sc3Bhbj1cIjJcIiBzdHlsZT1cInBhZGRpbmc6OHB4IDEycHggOHB4IDI0cHg7Zm9udC1zaXplOjAuODVlbTtjb2xvcjoke2NmZy5jb2xvcn07Zm9udC13ZWlnaHQ6NzAwO1wiPlxuICAgICAgICA8c3BhbiBpZD1cIiR7Z3JvdXBJZH0taWNvblwiPiR7dG9nZ2xlSWNvbn08L3NwYW4+XG4gICAgICAgICR7Y2ZnLmljb259ICR7ZXNjKGNmZy5sYWJlbCl9XG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtmb250LXdlaWdodDo0MDA7Y29sb3I6IzljYTNhZjttYXJnaW4tbGVmdDo2cHg7XCI+KCR7Y291bnR9KTwvc3Bhbj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgICA8dGJvZHkgaWQ9XCIke2dyb3VwSWR9XCIgc3R5bGU9XCIke2V4cGFuZGVkID8gJycgOiAnZGlzcGxheTpub25lOyd9XCI+XG4gICAgICAke2hhc011bHRpcGxlQ29uZnMgPyBpbm5lclJvd3MgOiBhbGxDYW5kcy5tYXAoKGMsIGkpID0+IHJlbmRlckNhbmRpZGF0ZVJvdyhjLCBpKSkuam9pbignJyl9XG4gICAgPC90Ym9keT5gO1xufVxuXG5mdW5jdGlvbiByZW5kZXJUeXBlR3JvdXAoZHQsIHJlY01hcCwgYWxsRHRDYW5kaWRhdGVzKSB7XG4gIGNvbnN0IGNmZyAgICAgID0gSEFSVkVTVF9UWVBFX0NPTkZJR1tkdF0gPz8geyBsYWJlbDogZHQsIGljb246ICdcdUQ4M0RcdURDQ0InLCBzb3J0OiA5OSB9O1xuICBjb25zdCBleHBhbmRlZCA9IHR5cGVHcm91cEV4cGFuZGVkKGFsbER0Q2FuZGlkYXRlcyk7XG4gIGNvbnN0IGdyb3VwSWQgID0gYGhhcnZlc3QtdHlwZS0ke2R0fS0ke0RhdGUubm93KCl9YDtcbiAgY29uc3QgY291bnQgICAgPSBhbGxEdENhbmRpZGF0ZXMubGVuZ3RoO1xuICBjb25zdCBkZXNjICAgICA9IEhBUlZFU1RfVFlQRV9ERVNDUklQVElPTlNbZHRdID8/ICcnO1xuXG4gIGNvbnN0IHJlY3MgICAgICAgID0gc29ydGVkS2V5cyhyZWNNYXAsIFJFQ19DT05GSUcpO1xuICBjb25zdCBoYXNNdWx0aXBsZVJlY3MgPSByZWNzLmxlbmd0aCA+IDE7XG5cbiAgY29uc3QgaW5uZXJIdG1sID0gcmVjcy5tYXAocmVjID0+IHtcbiAgICBpZiAoIWhhc011bHRpcGxlUmVjcykge1xuICAgICAgLy8gU3VwcHJlc3MgdGhlIHJlYy1sZXZlbCBoZWFkZXI7IHJlbmRlciBjb25maWRlbmNlIHRpZXJzIGRpcmVjdGx5XG4gICAgICBjb25zdCBjb25mTWFwICA9IHJlY01hcFtyZWNdO1xuICAgICAgY29uc3QgY29uZnMgICAgPSBzb3J0ZWRLZXlzKGNvbmZNYXAsIENPTkZfQ09ORklHKTtcbiAgICAgIGNvbnN0IGhhc0NvbmZzID0gY29uZnMubGVuZ3RoID4gMSB8fCAoY29uZnMubGVuZ3RoID09PSAxICYmIENPTkZfQ09ORklHW2NvbmZzWzBdXT8ubGFiZWwpO1xuICAgICAgcmV0dXJuIGhhc0NvbmZzXG4gICAgICAgID8gY29uZnMubWFwKGNvbmYgPT4gcmVuZGVyQ29uZmlkZW5jZVRpZXIocmVjLCBjb25mLCBjb25mTWFwW2NvbmZdKSkuam9pbignJylcbiAgICAgICAgOiBjb25mTWFwW2NvbmZzWzBdXS5tYXAoKGMsIGkpID0+IHJlbmRlckNhbmRpZGF0ZVJvdyhjLCBpKSkuam9pbignJyk7XG4gICAgfVxuICAgIHJldHVybiByZW5kZXJSZWNHcm91cChkdCwgcmVjLCByZWNNYXBbcmVjXSk7XG4gIH0pLmpvaW4oJycpO1xuXG4gIGNvbnN0IHRvZ2dsZUljb24gPSBleHBhbmRlZCA/ICdcdTI1QkUnIDogJ1x1MjVCOCc7XG4gIHJldHVybiBgXG4gICAgPGRpdiBjbGFzcz1cImhhcnZlc3QtdHlwZS1zZWN0aW9uXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO2JvcmRlci1yYWRpdXM6OHB4O292ZXJmbG93OmhpZGRlbjtcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmOGZhZmM7cGFkZGluZzoxMnB4IDE2cHg7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTJlOGYwO1wiXG4gICAgICAgICAgIG9uY2xpY2s9XCJ0b2dnbGVIYXJ2ZXN0U2VjdGlvbignJHtncm91cElkfScpXCI+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjEuMjVlbTtcIj4ke2NmZy5pY29ufTwvc3Bhbj5cbiAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6MTtcIj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMwZjE3MmE7Zm9udC1zaXplOjAuOTVlbTtcIj5cbiAgICAgICAgICAgIDxzcGFuIGlkPVwiJHtncm91cElkfS1pY29uXCI+JHt0b2dnbGVJY29ufTwvc3Bhbj5cbiAgICAgICAgICAgICR7ZXNjKGNmZy5sYWJlbCl9XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjgyZW07Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM5NGEzYjg7bWFyZ2luLWxlZnQ6NnB4O1wiPigke2NvdW50fSk8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgJHtkZXNjID8gYDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC43OGVtO2NvbG9yOiM2NDc0OGI7bWFyZ2luLXRvcDoycHg7XCI+JHtlc2MoZGVzYyl9PC9kaXY+YCA6ICcnfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cIiR7Z3JvdXBJZH1cIiBzdHlsZT1cIiR7ZXhwYW5kZWQgPyAnJyA6ICdkaXNwbGF5Om5vbmU7J31cIj5cbiAgICAgICAgPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7XCI+XG4gICAgICAgICAgJHtpbm5lckh0bWx9XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiByZW5kZXJIYXJ2ZXN0VGFiSHRtbChlbnJpY2hlZCwgYW5hbHlzaXNPaywgYW5hbHlzaXNFcnJvcikge1xuICBjb25zdCBncm91cHMgPSBncm91cENhbmRpZGF0ZXMoZW5yaWNoZWQpO1xuICBjb25zdCBkdEtleXMgPSBzb3J0ZWRLZXlzKGdyb3VwcywgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKEhBUlZFU1RfVFlQRV9DT05GSUcpLm1hcCgoW2ssIHZdKSA9PiBbdi5kaXNwbGF5VHlwZSwgdl0pXG4gICkpO1xuXG4gIGNvbnN0IHRvdGFsQ291bnQgPSBlbnJpY2hlZC5sZW5ndGg7XG5cbiAgY29uc3QgYW5hbHlzaXNXYXJuaW5nID0gIWFuYWx5c2lzT2tcbiAgICA/IGA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmZmYmViO2JvcmRlcjoxcHggc29saWQgI2ZjZDM0ZDtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHggMTRweDttYXJnaW4tYm90dG9tOjE2cHg7Zm9udC1zaXplOjAuODdlbTtjb2xvcjojOTI0MDBlO1wiPlxuICAgICAgICBcdTI2QTBcdUZFMEYgTExNIGFuYWx5c2lzIHVuYXZhaWxhYmxlJHthbmFseXNpc0Vycm9yID8gYDogJHtlc2MoYW5hbHlzaXNFcnJvcil9YCA6ICcnfS4gQ2hlY2tib3hlcyBhcmUgdW5jaGVja2VkIFx1MjAxNCByZXZpZXcgbWFudWFsbHkuXG4gICAgICAgIDxidXR0b24gb25jbGljaz1cInJlZnJlc2hIYXJ2ZXN0QW5hbHlzaXMoKVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6MTBweDtmb250LXNpemU6MC44NWVtO3BhZGRpbmc6MnB4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDk3NzA2O2JvcmRlci1yYWRpdXM6NHB4O2JhY2tncm91bmQ6d2hpdGU7Y29sb3I6I2I0NTMwOTtjdXJzb3I6cG9pbnRlcjtcIj5SZXRyeSBhbmFseXNpczwvYnV0dG9uPlxuICAgICAgPC9kaXY+YFxuICAgIDogJyc7XG5cbiAgY29uc3Qgc2VjdGlvbnNIdG1sID0gZHRLZXlzLm1hcChkdCA9PiB7XG4gICAgY29uc3QgcmVjTWFwICAgICAgPSBncm91cHNbZHRdO1xuICAgIGNvbnN0IGFsbER0Q2FuZHMgID0gT2JqZWN0LnZhbHVlcyhyZWNNYXApLmZsYXRNYXAoY29uZk1hcCA9PiBPYmplY3QudmFsdWVzKGNvbmZNYXApLmZsYXQoKSk7XG4gICAgcmV0dXJuIHJlbmRlclR5cGVHcm91cChkdCwgcmVjTWFwLCBhbGxEdENhbmRzKTtcbiAgfSkuam9pbignJyk7XG5cbiAgcmV0dXJuIGBcbiAgICA8aDE+XHVEODNDXHVERjNFIEhhcnZlc3QgSW1wcm92ZW1lbnRzPC9oMT5cbiAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7bWFyZ2luLWJvdHRvbTo4cHg7XCI+XG4gICAgICBSZXZpZXcgTExNLXNjb3JlZCBjYW5kaWRhdGVzIGZvciBwcm9tb3Rpb24gdG8geW91ciBtYXN0ZXIgQ1YuXG4gICAgICBDaGVjayB0aGUgaXRlbXMgeW91IHdhbnQgdG8gYXBwbHkgKCR7dG90YWxDb3VudH0gY2FuZGlkYXRlJHt0b3RhbENvdW50ID09PSAxID8gJycgOiAncyd9IGZvdW5kKS5cbiAgICA8L3A+XG4gICAgJHthbmFseXNpc1dhcm5pbmd9XG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToyMHB4O2ZsZXgtd3JhcDp3cmFwO1wiPlxuICAgICAgPGJ1dHRvbiBpZD1cImhhcnZlc3QtYXBwbHktYnRuXCIgb25jbGljaz1cImFwcGx5SGFydmVzdFNlbGVjdGlvbnMoKVwiXG4gICAgICAgIHN0eWxlPVwicGFkZGluZzoxMHB4IDI0cHg7Zm9udC1zaXplOjFlbTtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDojMTZhMzRhO2NvbG9yOndoaXRlO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NnB4O1wiPlxuICAgICAgICBcdTI3MDUgQXBwbHkgU2VsZWN0ZWQgdG8gTWFzdGVyIENWXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gb25jbGljaz1cInJlZnJlc2hIYXJ2ZXN0QW5hbHlzaXMoKVwiXG4gICAgICAgIHN0eWxlPVwicGFkZGluZzoxMHB4IDE4cHg7Zm9udC1zaXplOjAuOWVtO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6d2hpdGU7Y29sb3I6IzQ3NTU2OTtib3JkZXI6MXB4IHNvbGlkICNjYmQ1ZTE7Ym9yZGVyLXJhZGl1czo2cHg7XCI+XG4gICAgICAgIFx1RDgzRFx1REQwNCBSZS1hbmFseXNlXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtjb2xvcjojOTRhM2I4O1wiPlxuICAgICAgICAke3RvdGFsQ291bnR9IGNhbmRpZGF0ZSR7dG90YWxDb3VudCAhPT0gMSA/ICdzJyA6ICcnfVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgICR7c2VjdGlvbnNIdG1sfVxuICAgIDxkaXYgaWQ9XCJoYXJ2ZXN0LXJlc3VsdFwiIHN0eWxlPVwibWFyZ2luLXRvcDoyMHB4O1wiPjwvZGl2PmA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckVtcHR5U3RhdGVIdG1sKCkge1xuICByZXR1cm4gYFxuICAgIDxoMT5cdUQ4M0NcdURGM0UgSGFydmVzdCBJbXByb3ZlbWVudHM8L2gxPlxuICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtcIj5ObyBoYXJ2ZXN0IGNhbmRpZGF0ZXMgZm91bmQgZm9yIHRoaXMgc2Vzc2lvbi48L3A+XG4gICAgPHAgc3R5bGU9XCJjb2xvcjojOTRhM2I4O2ZvbnQtc2l6ZTowLjllbTtcIj5cbiAgICAgIENhbmRpZGF0ZXMgYXJlIGdlbmVyYXRlZCBmcm9tIGFwcHJvdmVkIHJld3JpdGVzLCBza2lsbHMgYWRkZWQgZHVyaW5nIHJldmlldyxcbiAgICAgIGFuZCBzdW1tYXJ5IHZhcmlhbnRzIGNyZWF0ZWQgZHVyaW5nIHRoZSBzZXNzaW9uLlxuICAgIDwvcD5gO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgQVBJIGNhbGxzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaENhbmRpZGF0ZXMoKSB7XG4gIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9oYXJ2ZXN0L2NhbmRpZGF0ZXMnKTtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gIHJldHVybiBkYXRhO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEFuYWx5c2lzKGZvcmNlUmVmcmVzaCA9IGZhbHNlKSB7XG4gIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9oYXJ2ZXN0L2FuYWx5emUnLCB7XG4gICAgbWV0aG9kOiAgJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGJvZHk6ICAgIEpTT04uc3RyaW5naWZ5KHsgZm9yY2VfcmVmcmVzaDogZm9yY2VSZWZyZXNoIH0pLFxuICB9KTtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gIHJldHVybiBkYXRhO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgVG9nZ2xlIGhlbHBlcnMgKGNhbGxlZCBieSBpbmxpbmUgb25jbGljaykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIHRvZ2dsZUhhcnZlc3RTZWN0aW9uKGlkKSB7XG4gIGNvbnN0IGVsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGNvbnN0IGljb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtpZH0taWNvbmApO1xuICBpZiAoIWVsKSByZXR1cm47XG4gIGNvbnN0IGhpZGRlbiA9IGVsLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJztcbiAgZWwuc3R5bGUuZGlzcGxheSA9IGhpZGRlbiA/ICcnIDogJ25vbmUnO1xuICBpZiAoaWNvbikgaWNvbi50ZXh0Q29udGVudCA9IGhpZGRlbiA/ICdcdTI1QkUnIDogJ1x1MjVCOCc7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBNYWluIGVudHJ5IHBvaW50cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVIYXJ2ZXN0VGFiKCkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250ZW50KSByZXR1cm47XG5cbiAgY29udGVudC5pbm5lckhUTUwgPSBgXG4gICAgPGgxPlx1RDgzQ1x1REYzRSBIYXJ2ZXN0IEltcHJvdmVtZW50czwvaDE+XG4gICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NDBweDtcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIj48L2Rpdj5cbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOjEycHg7XCI+TG9hZGluZyBjYW5kaWRhdGVzIGFuZCBydW5uaW5nIExMTSBhbmFseXNpc1x1MjAyNjwvcD5cbiAgICA8L2Rpdj5gO1xuXG4gIGxldCBjYW5kaWRhdGVzID0gW107XG4gIGxldCBhbmFseXNpc09rID0gZmFsc2U7XG4gIGxldCBhbmFseXNlcyAgID0gW107XG4gIGxldCBhbmFseXNpc0Vycm9yID0gbnVsbDtcblxuICB0cnkge1xuICAgIGNvbnN0IGNhbmREYXRhID0gYXdhaXQgZmV0Y2hDYW5kaWRhdGVzKCk7XG4gICAgaWYgKCFjYW5kRGF0YS5vaykge1xuICAgICAgY29udGVudC5pbm5lckhUTUwgPSBgPGgxPlx1RDgzQ1x1REYzRSBIYXJ2ZXN0IEltcHJvdmVtZW50czwvaDE+PHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+RmFpbGVkIHRvIGxvYWQgY2FuZGlkYXRlczogJHtlc2MoY2FuZERhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKX08L3A+YDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FuZGlkYXRlcyA9IGNhbmREYXRhLmNhbmRpZGF0ZXMgfHwgW107XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcigncG9wdWxhdGVIYXJ2ZXN0VGFiOiBjYW5kaWRhdGVzIGZldGNoIGZhaWxlZCcsIGVycik7XG4gICAgY29udGVudC5pbm5lckhUTUwgPSBgPGgxPlx1RDgzQ1x1REYzRSBIYXJ2ZXN0IEltcHJvdmVtZW50czwvaDE+PHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+TmV0d29yayBlcnJvciBsb2FkaW5nIGNhbmRpZGF0ZXMuPC9wPmA7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29udGVudC5pbm5lckhUTUwgPSByZW5kZXJFbXB0eVN0YXRlSHRtbCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYW5hbHlzaXNEYXRhID0gYXdhaXQgZmV0Y2hBbmFseXNpcyhmYWxzZSk7XG4gICAgaWYgKGFuYWx5c2lzRGF0YS5vaykge1xuICAgICAgYW5hbHlzaXNPayA9IHRydWU7XG4gICAgICBhbmFseXNlcyAgID0gYW5hbHlzaXNEYXRhLmFuYWx5c2VzIHx8IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbmFseXNpc0Vycm9yID0gYW5hbHlzaXNEYXRhLmVycm9yIHx8ICdBbmFseXNpcyBmYWlsZWQnO1xuICAgICAgbG9nLndhcm4oJ3BvcHVsYXRlSGFydmVzdFRhYjogYW5hbHlzaXMgbm90IG9rJywgYW5hbHlzaXNFcnJvcik7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3IoJ3BvcHVsYXRlSGFydmVzdFRhYjogYW5hbHlzaXMgZmV0Y2ggZmFpbGVkJywgZXJyKTtcbiAgICBhbmFseXNpc0Vycm9yID0gZXJyLm1lc3NhZ2U7XG4gIH1cblxuICBjb25zdCBhbmFseXNlc0J5SWQgPSBPYmplY3QuZnJvbUVudHJpZXMoYW5hbHlzZXMubWFwKGEgPT4gW2EuaWQsIGFdKSk7XG4gIGNvbnN0IGVucmljaGVkID0gY2FuZGlkYXRlcy5tYXAoYyA9PiAoe1xuICAgIC4uLmMsXG4gICAgcmVjb21tZW5kYXRpb246ICAgIGFuYWx5c2VzQnlJZFtjLmlkXT8ucmVjb21tZW5kYXRpb24gPz8gbnVsbCxcbiAgICBjb25maWRlbmNlOiAgICAgICAgYW5hbHlzZXNCeUlkW2MuaWRdPy5jb25maWRlbmNlICAgICA/PyBudWxsLFxuICAgIHJlYXNvbmluZzogICAgICAgICBhbmFseXNlc0J5SWRbYy5pZF0/LnJlYXNvbmluZyAgICAgID8/IG51bGwsXG4gICAgYW5hbHlzaXNBdmFpbGFibGU6IGFuYWx5c2lzT2ssXG4gIH0pKTtcblxuICBjb250ZW50LmlubmVySFRNTCA9IHJlbmRlckhhcnZlc3RUYWJIdG1sKGVucmljaGVkLCBhbmFseXNpc09rLCBhbmFseXNpc0Vycm9yKTtcbiAgYXR0YWNoUHJvcG9zYWxSb3dMaXN0ZW5lcnMoY29udGVudCwgJ2hhcnZlc3QnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEhhcnZlc3RBbmFseXNpcygpIHtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGlmICghY29udGVudCkgcmV0dXJuO1xuXG4gIC8vIFNob3cgc3Bpbm5lciBpbmxpbmUgd2hpbGUgcmUtZmV0Y2hpbmdcbiAgY29uc3QgYXBwbHlCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGFydmVzdC1hcHBseS1idG4nKTtcbiAgaWYgKGFwcGx5QnRuKSBhcHBseUJ0bi5kaXNhYmxlZCA9IHRydWU7XG5cbiAgLy8gUmUtcnVuIGZ1bGwgcG9wdWxhdGUgd2l0aCBmb3JjZSByZWZyZXNoXG4gIHRyeSB7XG4gICAgY29uc3QgY2FuZERhdGEgPSBhd2FpdCBmZXRjaENhbmRpZGF0ZXMoKTtcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gKGNhbmREYXRhLm9rICYmIGNhbmREYXRhLmNhbmRpZGF0ZXMpID8gY2FuZERhdGEuY2FuZGlkYXRlcyA6IFtdO1xuXG4gICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250ZW50LmlubmVySFRNTCA9IHJlbmRlckVtcHR5U3RhdGVIdG1sKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGFuYWx5c2lzT2sgPSBmYWxzZTtcbiAgICBsZXQgYW5hbHlzZXMgICA9IFtdO1xuICAgIGxldCBhbmFseXNpc0Vycm9yID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYW5hbHlzaXNEYXRhID0gYXdhaXQgZmV0Y2hBbmFseXNpcyh0cnVlKTtcbiAgICAgIGlmIChhbmFseXNpc0RhdGEub2spIHtcbiAgICAgICAgYW5hbHlzaXNPayA9IHRydWU7XG4gICAgICAgIGFuYWx5c2VzICAgPSBhbmFseXNpc0RhdGEuYW5hbHlzZXMgfHwgW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbmFseXNpc0Vycm9yID0gYW5hbHlzaXNEYXRhLmVycm9yIHx8ICdBbmFseXNpcyBmYWlsZWQnO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYW5hbHlzaXNFcnJvciA9IGVyci5tZXNzYWdlO1xuICAgIH1cblxuICAgIGNvbnN0IGFuYWx5c2VzQnlJZCA9IE9iamVjdC5mcm9tRW50cmllcyhhbmFseXNlcy5tYXAoYSA9PiBbYS5pZCwgYV0pKTtcbiAgICBjb25zdCBlbnJpY2hlZCA9IGNhbmRpZGF0ZXMubWFwKGMgPT4gKHtcbiAgICAgIC4uLmMsXG4gICAgICByZWNvbW1lbmRhdGlvbjogICAgYW5hbHlzZXNCeUlkW2MuaWRdPy5yZWNvbW1lbmRhdGlvbiA/PyBudWxsLFxuICAgICAgY29uZmlkZW5jZTogICAgICAgIGFuYWx5c2VzQnlJZFtjLmlkXT8uY29uZmlkZW5jZSAgICAgPz8gbnVsbCxcbiAgICAgIHJlYXNvbmluZzogICAgICAgICBhbmFseXNlc0J5SWRbYy5pZF0/LnJlYXNvbmluZyAgICAgID8/IG51bGwsXG4gICAgICBhbmFseXNpc0F2YWlsYWJsZTogYW5hbHlzaXNPayxcbiAgICB9KSk7XG5cbiAgICBjb250ZW50LmlubmVySFRNTCA9IHJlbmRlckhhcnZlc3RUYWJIdG1sKGVucmljaGVkLCBhbmFseXNpc09rLCBhbmFseXNpc0Vycm9yKTtcbiAgICBhdHRhY2hQcm9wb3NhbFJvd0xpc3RlbmVycyhjb250ZW50LCAnaGFydmVzdCcpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3IoJ3JlZnJlc2hIYXJ2ZXN0QW5hbHlzaXM6IGZhaWxlZCcsIGVycik7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYXBwbHlIYXJ2ZXN0U2VsZWN0aW9ucygpIHtcbiAgY29uc3QgY2hlY2tib3hlcyAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtkYXRhLWhhcnZlc3QtaWRdOmNoZWNrZWQnKTtcbiAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBBcnJheS5mcm9tKGNoZWNrYm94ZXMpLm1hcChjYiA9PiBjYi5kYXRhc2V0LmhhcnZlc3RJZCk7XG4gIGNvbnN0IHJlc3VsdERpdiAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hhcnZlc3QtcmVzdWx0Jyk7XG4gIGNvbnN0IGFwcGx5QnRuICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hhcnZlc3QtYXBwbHktYnRuJyk7XG5cbiAgaWYgKHNlbGVjdGVkSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChyZXN1bHREaXYpIHJlc3VsdERpdi5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJjb2xvcjojYjQ1MzA5O1wiPk5vIGl0ZW1zIHNlbGVjdGVkLjwvcD4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0ICh0eXBlb2Ygc2hvd0NvbmZpcm1Nb2RhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2hvd0NvbmZpcm1Nb2RhbChcbiAgICAgICAgYFByb21vdGUgJHtzZWxlY3RlZElkcy5sZW5ndGh9IGl0ZW0ke3NlbGVjdGVkSWRzLmxlbmd0aCAhPT0gMSA/ICdzJyA6ICcnfSB0byBtYXN0ZXIgQ1Y/YCxcbiAgICAgICAgJ1RoaXMgd2lsbCBwZXJtYW5lbnRseSB3cml0ZSBjaGFuZ2VzIHRvIHlvdXIgTWFzdGVyX0NWX0RhdGEuanNvbi4gQSBiYWNrdXAgd2lsbCBiZSBjcmVhdGVkIGZpcnN0LicsXG4gICAgICApXG4gICAgOiBQcm9taXNlLnJlc29sdmUod2luZG93LmNvbmZpcm0oYFByb21vdGUgJHtzZWxlY3RlZElkcy5sZW5ndGh9IGl0ZW0ocykgdG8gbWFzdGVyIENWP1xcblxcblRoaXMgd2lsbCBwZXJtYW5lbnRseSB3cml0ZSBjaGFuZ2VzIHRvIHlvdXIgTWFzdGVyX0NWX0RhdGEuanNvbi5gKSkpO1xuXG4gIGlmICghY29uZmlybWVkKSByZXR1cm47XG5cbiAgaWYgKGFwcGx5QnRuKSB7IGFwcGx5QnRuLmRpc2FibGVkID0gdHJ1ZTsgYXBwbHlCdG4udGV4dENvbnRlbnQgPSAnQXBwbHlpbmdcdTIwMjYnOyB9XG4gIGlmIChyZXN1bHREaXYpIHJlc3VsdERpdi5pbm5lckhUTUwgPSAnJztcblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9oYXJ2ZXN0L2FwcGx5Jywge1xuICAgICAgbWV0aG9kOiAgJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiAgICBKU09OLnN0cmluZ2lmeSh7IHNlbGVjdGVkX2lkczogc2VsZWN0ZWRJZHMgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICBpZiAoIWRhdGEub2spIHtcbiAgICAgIGlmIChyZXN1bHREaXYpIHJlc3VsdERpdi5pbm5lckhUTUwgPSBgPHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+QXBwbHkgZmFpbGVkOiAke2VzYyhkYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJyl9PC9wPmA7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgd3JpdHRlbkNvdW50ID0gZGF0YS53cml0dGVuX2NvdW50ID8/IDA7XG4gICAgY29uc3QgY29tbWl0SGFzaCAgID0gZGF0YS5jb21taXRfaGFzaCAgID8gYCAoY29tbWl0ICR7ZXNjKGRhdGEuY29tbWl0X2hhc2gpfSlgIDogJyc7XG4gICAgY29uc3QgYmFja3VwTm90ZSAgID0gZGF0YS5iYWNrdXBfcGF0aCAgID8gYCBCYWNrdXAgc2F2ZWQgdG8gPGNvZGU+JHtlc2MoZGF0YS5iYWNrdXBfcGF0aCl9PC9jb2RlPi5gIDogJyc7XG4gICAgY29uc3QgZ2l0V2FybmluZyAgID0gZGF0YS5naXRfZXJyb3JcbiAgICAgID8gYDxwIHN0eWxlPVwiY29sb3I6I2I0NTMwOTtmb250LXNpemU6MC44N2VtO1wiPlx1MjZBMFx1RkUwRiBHaXQgY29tbWl0IHNraXBwZWQ6ICR7ZXNjKGRhdGEuZ2l0X2Vycm9yPy5tZXNzYWdlIHx8IGRhdGEuZ2l0X2Vycm9yKX08L3A+YFxuICAgICAgOiAnJztcblxuICAgIGlmIChyZXN1bHREaXYpIHtcbiAgICAgIHJlc3VsdERpdi5pbm5lckhUTUwgPSBgXG4gICAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmMGZkZjQ7Ym9yZGVyOjFweCBzb2xpZCAjODZlZmFjO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTJweCAxNnB4O1wiPlxuICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzE2NjUzNDtmb250LXdlaWdodDo2MDA7bWFyZ2luOjAgMCA0cHg7XCI+XG4gICAgICAgICAgICBcdTI3MDUgJHt3cml0dGVuQ291bnR9IGl0ZW0ke3dyaXR0ZW5Db3VudCAhPT0gMSA/ICdzJyA6ICcnfSB3cml0dGVuIHRvIG1hc3RlciBDViR7Y29tbWl0SGFzaH0uXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgICR7YmFja3VwTm90ZSA/IGA8cCBzdHlsZT1cImZvbnQtc2l6ZTowLjgyZW07Y29sb3I6IzZiNzI4MDttYXJnaW46NHB4IDAgMDtcIj4ke2JhY2t1cE5vdGV9PC9wPmAgOiAnJ31cbiAgICAgICAgICAke2dpdFdhcm5pbmd9XG4gICAgICAgIDwvZGl2PmA7XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZSBjaGVja2JveGVzIGZvciBhcHBsaWVkIGl0ZW1zXG4gICAgZm9yIChjb25zdCBpZCBvZiBzZWxlY3RlZElkcykge1xuICAgICAgY29uc3QgY2IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgaGFydmVzdC1jaGstJHtpZH1gKTtcbiAgICAgIGlmIChjYikgeyBjYi5kaXNhYmxlZCA9IHRydWU7IGNiLmNoZWNrZWQgPSBmYWxzZTsgfVxuICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGhhcnZlc3Qtcm93LSR7aWR9YCk7XG4gICAgICBpZiAocm93KSByb3cuc3R5bGUub3BhY2l0eSA9ICcwLjQ1JztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcignYXBwbHlIYXJ2ZXN0U2VsZWN0aW9uczogZmFpbGVkJywgZXJyKTtcbiAgICBpZiAocmVzdWx0RGl2KSByZXN1bHREaXYuaW5uZXJIVE1MID0gYDxwIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPk5ldHdvcmsgZXJyb3I6ICR7ZXNjKGVyci5tZXNzYWdlKX08L3A+YDtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoYXBwbHlCdG4pIHsgYXBwbHlCdG4uZGlzYWJsZWQgPSBmYWxzZTsgYXBwbHlCdG4udGV4dENvbnRlbnQgPSAnXHUyNzA1IEFwcGx5IFNlbGVjdGVkIHRvIE1hc3RlciBDVic7IH1cbiAgfVxufVxuXG5leHBvcnQgeyBwb3B1bGF0ZUhhcnZlc3RUYWIsIGFwcGx5SGFydmVzdFNlbGVjdGlvbnMsIHJlZnJlc2hIYXJ2ZXN0QW5hbHlzaXMsIHRvZ2dsZUhhcnZlc3RTZWN0aW9uIH07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9zZXNzaW9uLXN3aXRjaGVyLXVpLmpzXG4gKiBTZXNzaW9uIG1hbmFnZW1lbnQgbW9kYWwsIHRyYXNoIHZpZXcsIGFuZCBvd25lcnNoaXAgY29uZmxpY3QgZGlhbG9nLlxuICpcbiAqIFRoZSBzZXNzaW9uLWNvbmZsaWN0IHJldHJ5IGJhbm5lciAoc2hvd1Nlc3Npb25Db25mbGljdEJhbm5lci9cbiAqIGNvbmZsaWN0UmV0cnlOb3cvY29uZmxpY3REaXNtaXNzKSBsaXZlcyBpbiB3ZWIvZmV0Y2gtdXRpbHMuanMsIHdoaWNoIG93bnNcbiAqIGhhbmRsZTQwOUNvbmZsaWN0ICh0aGUgYWN0dWFsIHRyaWdnZXIpIFx1MjAxNCB0aGlzIGZpbGUgdXNlZCB0byBjYXJyeSBpdHMgb3duXG4gKiBieXRlLWZvci1ieXRlIGR1cGxpY2F0ZSB3aXRoIGEgc2VwYXJhdGUgcmV0cnkgcXVldWUvdGltZXIsIHdoaWNoIG1lYW50XG4gKiBjbGlja2luZyBcIlJldHJ5IE5vd1wiIGNvdWxkIHNpbGVudGx5IGRyYWluIHRoZSB3cm9uZyAoYWx3YXlzLWVtcHR5KSBxdWV1ZVxuICogZGVwZW5kaW5nIG9uIHdlYi9zcmMvbWFpbi5qcydzIG1vZHVsZSBsb2FkIG9yZGVyLCBuZXZlciBhY3R1YWxseVxuICogcmVzb2x2aW5nIHRoZSBwZW5kaW5nIHJldHJpZWQgcmVxdWVzdC4gUmVtb3ZlZDsgc2VlIHdlYi9mZXRjaC11dGlscy5qcy5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgZXNjYXBlSHRtbCwgcGFyc2VTZXNzaW9uTGlzdFJlc3BvbnNlLCBmb3JtYXRTZXNzaW9uUGhhc2VMYWJlbCxcbiAqICAgZm9ybWF0U2Vzc2lvblRpbWVzdGFtcCwgYnVpbGRTZXNzaW9uU3dpdGNoZXJMYWJlbCxcbiAqICAgZ2V0QWN0aXZlU2Vzc2lvbk93bmVyc2hpcE1ldGEsIF9nZXRDdXJyZW50U2Vzc2lvbklkVmFsdWUsXG4gKiAgIGxvYWRTZXNzaW9uRmlsZSwgY3JlYXRlTmV3U2Vzc2lvbkFuZE5hdmlnYXRlLCBmZXRjaFN0YXR1cyxcbiAqICAgc2V0SW5pdGlhbEZvY3VzLCB0cmFwRm9jdXMsIHJlc3RvcmVGb2N1cywgY29uZmlybURpYWxvZ1xuICovXG5cbi8vIFx1MjUwMFx1MjUwMCBTb3J0IHN0YXRlICYgc2Vzc2lvbiBjYWNoZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmNvbnN0IF9TTV9TVE9SQUdFX0tFWSA9ICdjdl9zbV9zb3J0X2tleSc7XG5jb25zdCBfU01fU1RPUkFHRV9ESVIgPSAnY3Zfc21fc29ydF9kaXInO1xuXG5sZXQgX3NtU29ydEtleSA9ICgoKSA9PiB7IHRyeSB7IHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShfU01fU1RPUkFHRV9LRVkpIHx8ICdsYXN0TW9kaWZpZWQnOyB9IGNhdGNoIChfKSB7IHJldHVybiAnbGFzdE1vZGlmaWVkJzsgfSB9KSgpO1xubGV0IF9zbVNvcnREaXIgPSAoKCkgPT4geyB0cnkgeyByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oX1NNX1NUT1JBR0VfRElSKSB8fCAnZGVzYyc7ICAgICAgICAgfSBjYXRjaCAoXykgeyByZXR1cm4gJ2Rlc2MnOyAgICAgICAgIH0gfSkoKTtcblxubGV0IF9zbUFjdGl2ZUNhY2hlID0gW107XG5sZXQgX3NtU2F2ZWRDYWNoZSAgPSBbXTtcblxuLy8gXHUyNTAwXHUyNTAwIFJlbmRlciBoZWxwZXJzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBfcmVuZGVyQWN0aXZlU2Vzc2lvblJvd3MoYWN0aXZlU2Vzc2lvbnMpIHtcbiAgaWYgKCFhY3RpdmVTZXNzaW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJzxwIGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1lbXB0eVwiPk5vIGFjdGl2ZSBpbi1tZW1vcnkgc2Vzc2lvbnMuPC9wPic7XG4gIH1cblxuICBjb25zdCBjdXJyZW50U2Vzc2lvbklkID0gX2dldEN1cnJlbnRTZXNzaW9uSWRWYWx1ZSgpO1xuXG4gIHJldHVybiBgPGRpdiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItbGlzdFwiPiR7YWN0aXZlU2Vzc2lvbnMubWFwKHNlc3Npb24gPT4ge1xuICAgIGNvbnN0IG93bmVyc2hpcCA9IGdldEFjdGl2ZVNlc3Npb25Pd25lcnNoaXBNZXRhKHNlc3Npb24sIHsgY3VycmVudFNlc3Npb25JZCB9KTtcbiAgICBjb25zdCBvcGVuSHJlZiA9IGAvP3Nlc3Npb249JHtlbmNvZGVVUklDb21wb25lbnQoc2Vzc2lvbi5zZXNzaW9uX2lkIHx8ICcnKX1gO1xuICAgIGNvbnN0IGFjdGlvbkh0bWwgPSBvd25lcnNoaXAuaXNDdXJyZW50XG4gICAgICA/ICc8c3BhbiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItYnRuXCIgYXJpYS1kaXNhYmxlZD1cInRydWVcIj5DdXJyZW50PC9zcGFuPidcbiAgICAgIDogYDxhIGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1saW5rXCIgaHJlZj1cIiR7b3BlbkhyZWZ9XCI+T3BlbjwvYT5gO1xuICAgIHJldHVybiBgXG4gICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItcm93LW1haW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1yb3ctdGl0bGVcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+JHtlc2NhcGVIdG1sKHNlc3Npb24ucG9zaXRpb25fbmFtZSB8fCAnVW50aXRsZWQnKX08L3N0cm9uZz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2Vzc2lvbi1zdGF0dXMtcGlsbCAke293bmVyc2hpcC5jbGFzc05hbWV9XCI+PHNwYW4gY2xhc3M9XCJzZXNzaW9uLXN0YXR1cy1kb3RcIj48L3NwYW4+JHtlc2NhcGVIdG1sKG93bmVyc2hpcC5sYWJlbCl9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLXJvdy1tZXRhXCI+XG4gICAgICAgICAgICAke2VzY2FwZUh0bWwoZm9ybWF0U2Vzc2lvblBoYXNlTGFiZWwoc2Vzc2lvbi5waGFzZSkpfSBcdTAwQjcgQ3JlYXRlZCAke2VzY2FwZUh0bWwoZm9ybWF0U2Vzc2lvblRpbWVzdGFtcChzZXNzaW9uLmNyZWF0ZWQpKX0gXHUwMEI3IExhc3QgbW9kaWZpZWQgJHtlc2NhcGVIdG1sKGZvcm1hdFNlc3Npb25UaW1lc3RhbXAoc2Vzc2lvbi5sYXN0X21vZGlmaWVkKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1hY3Rpb25zXCI+JHthY3Rpb25IdG1sfTwvZGl2PlxuICAgICAgPC9kaXY+YDtcbiAgfSkuam9pbignJyl9PC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclNhdmVkU2Vzc2lvblJvd3Moc2F2ZWRTZXNzaW9ucywgeyBpbmNsdWRlTWFuYWdlbWVudCA9IGZhbHNlIH0gPSB7fSkge1xuICBpZiAoIXNhdmVkU2Vzc2lvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICc8cCBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItZW1wdHlcIj5ObyBzYXZlZCBzZXNzaW9ucyBmb3VuZC48L3A+JztcbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVkSXNvRnJvbVNlc3Npb25QYXRoKHNlc3Npb25QYXRoKSB7XG4gICAgaWYgKCFzZXNzaW9uUGF0aCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IHBhdGhUZXh0ID0gU3RyaW5nKHNlc3Npb25QYXRoKTtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGhUZXh0LnNwbGl0KC9bXFxcXC9dLykuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPCAyKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBkaXJOYW1lID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl07XG4gICAgY29uc3QgbWF0Y2ggPSBkaXJOYW1lLm1hdGNoKC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSlbXy1dPyhcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KS8pO1xuICAgIGlmICghbWF0Y2gpIHJldHVybiAnJztcblxuICAgIGNvbnN0IFssIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kXSA9IG1hdGNoO1xuICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1UJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9WmA7XG4gIH1cblxuICByZXR1cm4gYDxkaXYgY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLWxpc3RcIj4ke3NhdmVkU2Vzc2lvbnMubWFwKChzZXNzaW9uLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGVzY2FwZWRQYXRoID0gZXNjYXBlSHRtbChzZXNzaW9uLnBhdGggfHwgJycpO1xuICAgIGNvbnN0IGNyZWF0ZWRJc28gPSBfY3JlYXRlZElzb0Zyb21TZXNzaW9uUGF0aChzZXNzaW9uLnBhdGgpO1xuICAgIGNvbnN0IGNyZWF0ZWRMYWJlbCA9IGNyZWF0ZWRJc28gPyBmb3JtYXRTZXNzaW9uVGltZXN0YW1wKGNyZWF0ZWRJc28pIDogJ1x1MjAxNCc7XG4gICAgY29uc3Qgc2F2ZWRMYWJlbCA9IGZvcm1hdFNlc3Npb25UaW1lc3RhbXAoc2Vzc2lvbi50aW1lc3RhbXApO1xuICAgIGNvbnN0IHNhdmVkTWV0YSA9IHNhdmVkTGFiZWwgPT09ICdcdTIwMTQnID8gJycgOiBgIFx1MDBCNyBTYXZlZCAke2VzY2FwZUh0bWwoc2F2ZWRMYWJlbCl9YDtcbiAgICBjb25zdCBtYW5hZ2VtZW50SHRtbCA9IGluY2x1ZGVNYW5hZ2VtZW50XG4gICAgICA/IGBcbiAgICAgICAgPGJ1dHRvbiBkYXRhLXNtLWFjdGlvbj1cInJlbmFtZVwiIGRhdGEtc20tcGF0aD1cIiR7ZXNjYXBlZFBhdGh9XCIgZGF0YS1zbS1pZHg9XCIke2luZGV4fVwiIGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1idG5cIiB0aXRsZT1cIlJlbmFtZSBzZXNzaW9uXCI+UmVuYW1lPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gZGF0YS1zbS1hY3Rpb249XCJkZWxldGVcIiBkYXRhLXNtLXBhdGg9XCIke2VzY2FwZWRQYXRofVwiIGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1idG4gZGFuZ2VyXCIgdGl0bGU9XCJNb3ZlIHNlc3Npb24gdG8gVHJhc2hcIj5Nb3ZlIHRvIFRyYXNoPC9idXR0b24+YFxuICAgICAgOiAnJztcblxuICAgIHJldHVybiBgXG4gICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItcm93LW1haW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1yb3ctdGl0bGVcIj5cbiAgICAgICAgICAgIDxzdHJvbmcgaWQ9XCJzbS1uYW1lLSR7aW5kZXh9XCI+JHtlc2NhcGVIdG1sKHNlc3Npb24ucG9zaXRpb25fbmFtZSB8fCAnVW50aXRsZWQnKX08L3N0cm9uZz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2Vzc2lvbi1zdGF0dXMtcGlsbCBzZXNzaW9uLXN0YXR1cy1zYXZlZFwiPjxzcGFuIGNsYXNzPVwic2Vzc2lvbi1zdGF0dXMtZG90XCI+PC9zcGFuPlNhdmVkPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgaWQ9XCJzbS1yZW5hbWUtJHtpbmRleH1cIiBzdHlsZT1cImRpc3BsYXk6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDttYXJnaW46OHB4IDAgNHB4O1wiPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwic20taW5wdXQtJHtpbmRleH1cIiB0eXBlPVwidGV4dFwiIHZhbHVlPVwiJHtlc2NhcGVIdG1sKHNlc3Npb24ucG9zaXRpb25fbmFtZSB8fCAnJyl9XCIgY2xhc3M9XCJzbS1rZXktaW5wdXRcIiBkYXRhLXNtLXBhdGg9XCIke2VzY2FwZWRQYXRofVwiIGRhdGEtc20taWR4PVwiJHtpbmRleH1cIiBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgIzNiODJmNjtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjZweCAxMHB4O2ZvbnQtc2l6ZToxM3B4O2ZsZXg6MTttaW4td2lkdGg6MDtcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1zbS1hY3Rpb249XCJzdWJtaXQtcmVuYW1lXCIgZGF0YS1zbS1wYXRoPVwiJHtlc2NhcGVkUGF0aH1cIiBkYXRhLXNtLWlkeD1cIiR7aW5kZXh9XCIgY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLWJ0blwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1zbS1hY3Rpb249XCJjYW5jZWwtcmVuYW1lXCIgZGF0YS1zbS1pZHg9XCIke2luZGV4fVwiIGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1idG5cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1yb3ctbWV0YVwiPlxuICAgICAgICAgICAgJHtlc2NhcGVIdG1sKGZvcm1hdFNlc3Npb25QaGFzZUxhYmVsKHNlc3Npb24ucGhhc2UpKX0gXHUwMEI3IENyZWF0ZWQgJHtlc2NhcGVIdG1sKGNyZWF0ZWRMYWJlbCl9JHtzYXZlZE1ldGF9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1hY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiBkYXRhLXNtLWFjdGlvbj1cImxvYWRcIiBkYXRhLXNtLXBhdGg9XCIke2VzY2FwZWRQYXRofVwiIGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1saW5rXCI+TG9hZDwvYnV0dG9uPlxuICAgICAgICAgICR7bWFuYWdlbWVudEh0bWx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+YDtcbiAgfSkuam9pbignJyl9PC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclNlc3Npb25Td2l0Y2hlclNlY3Rpb25zKGFjdGl2ZVNlc3Npb25zLCBzYXZlZFNlc3Npb25zLCB7IGluY2x1ZGVTYXZlZE1hbmFnZW1lbnQgPSBmYWxzZSB9ID0ge30pIHtcbiAgY29uc3Qgc2F2ZWRTZWN0aW9uTm90ZSA9IGluY2x1ZGVTYXZlZE1hbmFnZW1lbnRcbiAgICA/ICdMb2FkIGZyb20gZGlzaywgcmVuYW1lLCBvciBtb3ZlIHNhdmVkIHdvcmsgdG8gVHJhc2guJ1xuICAgIDogJ0xvYWQgc2F2ZWQgd29yayBmcm9tIGRpc2suJztcblxuICByZXR1cm4gYFxuICAgIDxkaXYgY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLXNlY3Rpb25zXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1zZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICAgIDxoMz5BY3RpdmUgU2Vzc2lvbnM8L2gzPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1zZWN0aW9uLW5vdGVcIj5Jbi1tZW1vcnkgc2Vzc2lvbnMgdGhhdCBjYW4gYmUgb3BlbmVkIGRpcmVjdGx5Ljwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7X3JlbmRlckFjdGl2ZVNlc3Npb25Sb3dzKGFjdGl2ZVNlc3Npb25zKX1cbiAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgPGgzPlNhdmVkIFNlc3Npb25zPC9oMz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItc2VjdGlvbi1ub3RlXCI+JHtzYXZlZFNlY3Rpb25Ob3RlfTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7X3JlbmRlclNhdmVkU2Vzc2lvblJvd3Moc2F2ZWRTZXNzaW9ucywgeyBpbmNsdWRlTWFuYWdlbWVudDogaW5jbHVkZVNhdmVkTWFuYWdlbWVudCB9KX1cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlU2Vzc2lvblN3aXRjaGVySGVhZGVyKHN0YXR1cyA9IHt9KSB7XG4gIGNvbnN0IGxhYmVsID0gYnVpbGRTZXNzaW9uU3dpdGNoZXJMYWJlbChzdGF0dXMpO1xuICBjb25zdCBzd2l0Y2hlckxhYmVsRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Vzc2lvbi1zd2l0Y2hlci1sYWJlbCcpO1xuICBjb25zdCBzd2l0Y2hlckJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXNzaW9uLXN3aXRjaGVyLWJ0bicpO1xuICBjb25zdCBzdWJ0aXRsZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlYWRlci1zZXNzaW9uLW5hbWUnKTtcbiAgY29uc3QgaGFzU2Vzc2lvbiA9IEJvb2xlYW4oX2dldEN1cnJlbnRTZXNzaW9uSWRWYWx1ZSgpKTtcblxuICBpZiAoc3dpdGNoZXJMYWJlbEVsKSBzd2l0Y2hlckxhYmVsRWwudGV4dENvbnRlbnQgPSBsYWJlbDtcbiAgaWYgKHN3aXRjaGVyQnRuKSBzd2l0Y2hlckJ0bi5jbGFzc0xpc3QudG9nZ2xlKCdpcy1zZXNzaW9uLWFjdGl2ZScsIGhhc1Nlc3Npb24pO1xuICBpZiAoc3VidGl0bGVFbCkge1xuICAgIHN1YnRpdGxlRWwudGV4dENvbnRlbnQgPSBoYXNTZXNzaW9uID8gYEN1cnJlbnQgc2Vzc2lvbjogJHtsYWJlbH1gIDogJ1NlbGVjdCBvciBjcmVhdGUgYSBzZXNzaW9uJztcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgT3duZXJzaGlwIGNvbmZsaWN0IGRpYWxvZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gc2hvd093bmVyc2hpcENvbmZsaWN0RGlhbG9nKG1lc3NhZ2UgPSAnVGhpcyBzZXNzaW9uIGlzIGN1cnJlbnRseSBjbGFpbWVkIGJ5IGFub3RoZXIgYnJvd3NlciB0YWIuJykge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvd25lcnNoaXAtY29uZmxpY3Qtb3ZlcmxheScpO1xuICAgIGNvbnN0IG1lc3NhZ2VFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvd25lcnNoaXAtY29uZmxpY3QtbWVzc2FnZScpO1xuICAgIGNvbnN0IGxvYWREaWZmZXJlbnRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3duZXJzaGlwLWxvYWQtZGlmZmVyZW50LWJ0bicpO1xuICAgIGNvbnN0IG5ld1Nlc3Npb25CdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3duZXJzaGlwLW5ldy1zZXNzaW9uLWJ0bicpO1xuICAgIGNvbnN0IHRha2VvdmVyQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ293bmVyc2hpcC10YWtlb3Zlci1idG4nKTtcbiAgICBpZiAoIW92ZXJsYXkgfHwgIW1lc3NhZ2VFbCB8fCAhbG9hZERpZmZlcmVudEJ0biB8fCAhbmV3U2Vzc2lvbkJ0biB8fCAhdGFrZW92ZXJCdG4pIHtcbiAgICAgIHJlc29sdmUoJ2RpZmZlcmVudCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsZWFudXAgPSAoY2hvaWNlKSA9PiB7XG4gICAgICBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICByZXN0b3JlRm9jdXMoKTtcbiAgICAgIGxvYWREaWZmZXJlbnRCdG4ub25jbGljayA9IG51bGw7XG4gICAgICBuZXdTZXNzaW9uQnRuLm9uY2xpY2sgPSBudWxsO1xuICAgICAgdGFrZW92ZXJCdG4ub25jbGljayA9IG51bGw7XG4gICAgICByZXNvbHZlKGNob2ljZSk7XG4gICAgfTtcblxuICAgIG1lc3NhZ2VFbC50ZXh0Q29udGVudCA9IG1lc3NhZ2U7XG4gICAgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIHdpbmRvdy5fZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgc2V0SW5pdGlhbEZvY3VzKCdvd25lcnNoaXAtY29uZmxpY3Qtb3ZlcmxheScpO1xuICAgIHRyYXBGb2N1cygnb3duZXJzaGlwLWNvbmZsaWN0LW92ZXJsYXknKTtcblxuICAgIGxvYWREaWZmZXJlbnRCdG4ub25jbGljayA9ICgpID0+IGNsZWFudXAoJ2RpZmZlcmVudCcpO1xuICAgIG5ld1Nlc3Npb25CdG4ub25jbGljayA9ICgpID0+IGNsZWFudXAoJ25ldycpO1xuICAgIHRha2VvdmVyQnRuLm9uY2xpY2sgPSAoKSA9PiBjbGVhbnVwKCd0YWtlb3ZlcicpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xvc2VPd25lcnNoaXBDb25mbGljdERpYWxvZyhjaG9pY2UgPSAnZGlmZmVyZW50Jykge1xuICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ293bmVyc2hpcC1jb25mbGljdC1vdmVybGF5Jyk7XG4gIGlmIChvdmVybGF5KSBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3RvcmVGb2N1cygpO1xuICBjb25zdCBsb2FkRGlmZmVyZW50QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ293bmVyc2hpcC1sb2FkLWRpZmZlcmVudC1idG4nKTtcbiAgaWYgKGxvYWREaWZmZXJlbnRCdG4gJiYgdHlwZW9mIGxvYWREaWZmZXJlbnRCdG4ub25jbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGxvYWREaWZmZXJlbnRCdG4ub25jbGljaygpO1xuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4gY2hvaWNlO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgU2Vzc2lvbiBmaWxlLWJyb3dzZXIgdGFibGUgaGVscGVycyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gX3NldFNtU29ydChrZXkpIHtcbiAgaWYgKF9zbVNvcnRLZXkgPT09IGtleSkge1xuICAgIF9zbVNvcnREaXIgPSBfc21Tb3J0RGlyID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xuICB9IGVsc2Uge1xuICAgIF9zbVNvcnRLZXkgPSBrZXk7XG4gICAgX3NtU29ydERpciA9IGtleSA9PT0gJ2xhc3RNb2RpZmllZCcgPyAnZGVzYycgOiAnYXNjJztcbiAgfVxuICB0cnkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKF9TTV9TVE9SQUdFX0tFWSwgX3NtU29ydEtleSk7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oX1NNX1NUT1JBR0VfRElSLCBfc21Tb3J0RGlyKTtcbiAgfSBjYXRjaCAoXykgeyAvKiBzdG9yYWdlIHVuYXZhaWxhYmxlICovIH1cbiAgX3JlbmRlclNlc3Npb25UYWJsZUZyb21DYWNoZSgpO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlZElzb0Zyb21TZXNzaW9uUGF0aChzZXNzaW9uUGF0aCkge1xuICBpZiAoIXNlc3Npb25QYXRoKSByZXR1cm4gJyc7XG4gIGNvbnN0IHBhdGhUZXh0ID0gU3RyaW5nKHNlc3Npb25QYXRoKTtcbiAgY29uc3QgcGFydHMgICAgPSBwYXRoVGV4dC5zcGxpdCgvW1xcXFwvXS8pLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCA8IDIpIHJldHVybiAnJztcbiAgY29uc3QgZGlyTmFtZSAgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXTtcbiAgY29uc3QgbWF0Y2ggICAgPSBkaXJOYW1lLm1hdGNoKC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSlbXy1dPyhcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KS8pO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gJyc7XG4gIGNvbnN0IFssIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kXSA9IG1hdGNoO1xuICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9VCR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfVpgO1xufVxuXG5mdW5jdGlvbiBfbm9ybWFsaXplU2Vzc2lvbnNGb3JUYWJsZShhY3RpdmVTZXNzaW9ucywgc2F2ZWRTZXNzaW9ucykge1xuICBjb25zdCBjdXJyZW50U2Vzc2lvbklkID0gX2dldEN1cnJlbnRTZXNzaW9uSWRWYWx1ZSgpO1xuICBjb25zdCByb3dzID0gW107XG5cbiAgZm9yIChjb25zdCBzIG9mIGFjdGl2ZVNlc3Npb25zKSB7XG4gICAgY29uc3Qgb3duZXJzaGlwID0gZ2V0QWN0aXZlU2Vzc2lvbk93bmVyc2hpcE1ldGEocywgeyBjdXJyZW50U2Vzc2lvbklkIH0pO1xuICAgIHJvd3MucHVzaCh7XG4gICAgICB0eXBlOiAgICAgICAgICAgICAgJ2FjdGl2ZScsXG4gICAgICBuYW1lOiAgICAgICAgICAgICAgIHMucG9zaXRpb25fbmFtZSB8fCAnVW50aXRsZWQnLFxuICAgICAgY29tcGFueTogICAgICAgICAgICBzLmNvbXBhbnkgfHwgJycsXG4gICAgICBwaGFzZTogICAgICAgICAgICAgIHMucGhhc2UgICAgICAgICB8fCAnJyxcbiAgICAgIGFwcGxpY2F0aW9uU3RhdHVzOiAgcy5hcHBsaWNhdGlvbl9zdGF0dXMgfHwgJycsXG4gICAgICBhdHNTY29yZTogICAgICAgICAgIHMuYXRzX3Njb3JlID8/IG51bGwsXG4gICAgICBsYXN0TW9kaWZpZWQ6ICAgICAgIHMubGFzdF9tb2RpZmllZCAgPyBuZXcgRGF0ZShzLmxhc3RfbW9kaWZpZWQpIDogbnVsbCxcbiAgICAgIGNyZWF0ZWQ6ICAgICAgICAgICAgcy5jcmVhdGVkICAgICAgICA/IG5ldyBEYXRlKHMuY3JlYXRlZCkgICAgICAgOiBudWxsLFxuICAgICAgb3duZXJzaGlwLFxuICAgICAgc2Vzc2lvbklkOiAgICAgICAgICBzLnNlc3Npb25faWQsXG4gICAgICBwYXRoOiAgICAgICAgICAgICAgIG51bGwsXG4gICAgICBpZHg6ICAgICAgICAgICAgICAgIG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBzYXZlZFNlc3Npb25zLmZvckVhY2goKHMsIGlkeCkgPT4ge1xuICAgIGNvbnN0IGNyZWF0ZWRJc28gPSBfY3JlYXRlZElzb0Zyb21TZXNzaW9uUGF0aChzLnBhdGgpO1xuICAgIHJvd3MucHVzaCh7XG4gICAgICB0eXBlOiAgICAgICAgICAgICAgJ3NhdmVkJyxcbiAgICAgIG5hbWU6ICAgICAgICAgICAgICAgcy5wb3NpdGlvbl9uYW1lIHx8ICdVbnRpdGxlZCcsXG4gICAgICBjb21wYW55OiAgICAgICAgICAgIHMuY29tcGFueSB8fCAnJyxcbiAgICAgIHBoYXNlOiAgICAgICAgICAgICAgcy5waGFzZSAgICAgICAgIHx8ICcnLFxuICAgICAgYXBwbGljYXRpb25TdGF0dXM6ICBzLmFwcGxpY2F0aW9uX3N0YXR1cyB8fCAnJyxcbiAgICAgIG5vdGVzOiAgICAgICAgICAgICAgcy5ub3RlcyB8fCAnJyxcbiAgICAgIGF0c1Njb3JlOiAgICAgICAgICAgcy5hdHNfc2NvcmUgPz8gbnVsbCxcbiAgICAgIGxhc3RNb2RpZmllZDogICAgICAgcy50aW1lc3RhbXAgID8gbmV3IERhdGUocy50aW1lc3RhbXApICA6IG51bGwsXG4gICAgICBjcmVhdGVkOiAgICAgICAgICAgIGNyZWF0ZWRJc28gICA/IG5ldyBEYXRlKGNyZWF0ZWRJc28pICAgOiBudWxsLFxuICAgICAgb3duZXJzaGlwOiAgICAgICAgICBudWxsLFxuICAgICAgc2Vzc2lvbklkOiAgICAgICAgICBudWxsLFxuICAgICAgcGF0aDogICAgICAgICAgICAgICBzLnBhdGgsXG4gICAgICBpZHgsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiByb3dzO1xufVxuXG5mdW5jdGlvbiBfc29ydFNlc3Npb25Sb3dzKHJvd3MsIGtleSwgZGlyKSB7XG4gIHJldHVybiBbLi4ucm93c10uc29ydCgoYSwgYikgPT4ge1xuICAgIGxldCBhdiwgYnY7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICBhdiA9IChhLm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGJ2ID0gKGIubmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGRpciA9PT0gJ2FzYycgPyBhdi5sb2NhbGVDb21wYXJlKGJ2KSA6IGJ2LmxvY2FsZUNvbXBhcmUoYXYpO1xuICAgICAgY2FzZSAnc3RhdHVzJzoge1xuICAgICAgICBjb25zdCByYW5rID0gciA9PiByLnR5cGUgPT09ICdhY3RpdmUnID8gKHIub3duZXJzaGlwPy5pc0N1cnJlbnQgPyAwIDogMSkgOiAyO1xuICAgICAgICBhdiA9IHJhbmsoYSk7IGJ2ID0gcmFuayhiKTtcbiAgICAgICAgcmV0dXJuIGRpciA9PT0gJ2FzYycgPyBhdiAtIGJ2IDogYnYgLSBhdjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3BoYXNlJzpcbiAgICAgICAgYXYgPSAoYS5waGFzZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgYnYgPSAoYi5waGFzZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGRpciA9PT0gJ2FzYycgPyBhdi5sb2NhbGVDb21wYXJlKGJ2KSA6IGJ2LmxvY2FsZUNvbXBhcmUoYXYpO1xuICAgICAgY2FzZSAnbGFzdE1vZGlmaWVkJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGF2ID0gYS5sYXN0TW9kaWZpZWQgPyBhLmxhc3RNb2RpZmllZC5nZXRUaW1lKCkgOiAwO1xuICAgICAgICBidiA9IGIubGFzdE1vZGlmaWVkID8gYi5sYXN0TW9kaWZpZWQuZ2V0VGltZSgpIDogMDtcbiAgICAgICAgcmV0dXJuIGRpciA9PT0gJ2FzYycgPyBhdiAtIGJ2IDogYnYgLSBhdjtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyU2Vzc2lvblRhYmxlSGVhZGVyKCkge1xuICBjb25zdCBjb2xzID0gW1xuICAgIHsga2V5OiAnbmFtZScsICAgICAgICAgbGFiZWw6ICdOYW1lJyAgICAgfSxcbiAgICB7IGtleTogJ3N0YXR1cycsICAgICAgIGxhYmVsOiAnU3RhdHVzJyAgIH0sXG4gICAgeyBrZXk6ICdwaGFzZScsICAgICAgICBsYWJlbDogJ1BoYXNlJyAgICB9LFxuICAgIHsga2V5OiAnbGFzdE1vZGlmaWVkJywgbGFiZWw6ICdNb2RpZmllZCcgfSxcbiAgXTtcbiAgY29uc3QgY2VsbHMgPSBjb2xzLm1hcCgoeyBrZXksIGxhYmVsIH0pID0+IHtcbiAgICBjb25zdCBhY3RpdmUgPSBfc21Tb3J0S2V5ID09PSBrZXk7XG4gICAgY29uc3QgaWNvbiAgID0gYWN0aXZlID8gKF9zbVNvcnREaXIgPT09ICdhc2MnID8gJ1xcdTI1YjInIDogJ1xcdTI1YmMnKSA6ICdcXHUyMWM1JztcbiAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwic20tdGgke2FjdGl2ZSA/ICcgc20tdGgtc29ydGVkJyA6ICcnfVwiIGRhdGEtc20tc29ydD1cIiR7a2V5fVwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIiB0aXRsZT1cIlNvcnQgYnkgJHtsYWJlbH1cIj4ke2VzY2FwZUh0bWwobGFiZWwpfSA8c3BhbiBjbGFzcz1cInNtLXNvcnQtaWNvbiR7YWN0aXZlID8gJyBzbS1zb3J0LWFjdGl2ZScgOiAnJ31cIj4ke2ljb259PC9zcGFuPjwvc3Bhbj5gO1xuICB9KTtcbiAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwic20tdGhlYWRcIj4ke2NlbGxzLmpvaW4oJycpfTxzcGFuIGNsYXNzPVwic20tdGggc20tdGgtYWN0aW9uc1wiPkFjdGlvbnM8L3NwYW4+PC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gX2ZtdERhdGVDb21wYWN0KGQpIHtcbiAgaWYgKCFkKSByZXR1cm4gJ1xcdTIwMTQnO1xuICB0cnkge1xuICAgIHJldHVybiBkLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgIG1vbnRoOiAnbnVtZXJpYycsIGRheTogJ251bWVyaWMnLCB5ZWFyOiAnMi1kaWdpdCcsXG4gICAgICBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7IHJldHVybiAnXFx1MjAxNCc7IH1cbn1cblxuZnVuY3Rpb24gX3JlbmRlclNlc3Npb25UYWJsZVJvdyhyb3cpIHtcbiAgY29uc3QgcGhhc2VMYWJlbCA9IGVzY2FwZUh0bWwoZm9ybWF0U2Vzc2lvblBoYXNlTGFiZWwocm93LnBoYXNlKSk7XG4gIGNvbnN0IG1vZExhYmVsICAgPSBlc2NhcGVIdG1sKF9mbXREYXRlQ29tcGFjdChyb3cubGFzdE1vZGlmaWVkKSk7XG5cbiAgY29uc3Qgc3RhdHVzUGlsbCA9IHJvdy50eXBlID09PSAnYWN0aXZlJ1xuICAgID8gYDxzcGFuIGNsYXNzPVwic2Vzc2lvbi1zdGF0dXMtcGlsbCAke3Jvdy5vd25lcnNoaXAuY2xhc3NOYW1lfVwiPjxzcGFuIGNsYXNzPVwic2Vzc2lvbi1zdGF0dXMtZG90XCI+PC9zcGFuPiR7ZXNjYXBlSHRtbChyb3cub3duZXJzaGlwLmxhYmVsKX08L3NwYW4+YFxuICAgIDogYDxzcGFuIGNsYXNzPVwic2Vzc2lvbi1zdGF0dXMtcGlsbCBzZXNzaW9uLXN0YXR1cy1zYXZlZFwiPjxzcGFuIGNsYXNzPVwic2Vzc2lvbi1zdGF0dXMtZG90XCI+PC9zcGFuPlNhdmVkPC9zcGFuPmA7XG5cbiAgbGV0IGFjdGlvbkh0bWw7XG4gIGlmIChyb3cudHlwZSA9PT0gJ2FjdGl2ZScpIHtcbiAgICBjb25zdCBocmVmID0gYC8/c2Vzc2lvbj0ke2VuY29kZVVSSUNvbXBvbmVudChyb3cuc2Vzc2lvbklkIHx8ICcnKX1gO1xuICAgIGFjdGlvbkh0bWwgPSByb3cub3duZXJzaGlwLmlzQ3VycmVudFxuICAgICAgPyAnPHNwYW4gY2xhc3M9XCJzbS1idG4gc20tYnRuLWRpc2FibGVkXCIgYXJpYS1kaXNhYmxlZD1cInRydWVcIj5DdXJyZW50PC9zcGFuPidcbiAgICAgIDogYDxhIGNsYXNzPVwic20tYnRuIHNtLWJ0bi1vcGVuXCIgaHJlZj1cIiR7aHJlZn1cIj5PcGVuPC9hPmA7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZXAgID0gZXNjYXBlSHRtbChyb3cucGF0aCB8fCAnJyk7XG4gICAgY29uc3QgaWR4ID0gcm93LmlkeDtcbiAgICBhY3Rpb25IdG1sID1cbiAgICAgIGA8YnV0dG9uIGRhdGEtc20tYWN0aW9uPVwibG9hZFwiICAgZGF0YS1zbS1wYXRoPVwiJHtlcH1cIiBjbGFzcz1cInNtLWJ0biBzbS1idG4tb3BlbiBzbS1idG4taWNvblwiIHRpdGxlPVwiTG9hZCBzZXNzaW9uXCIgYXJpYS1sYWJlbD1cIkxvYWQgc2Vzc2lvblwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtZm9sZGVyLW9wZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9idXR0b24+YCArXG4gICAgICBgPGJ1dHRvbiBkYXRhLXNtLWFjdGlvbj1cInJlbmFtZVwiIGRhdGEtc20tcGF0aD1cIiR7ZXB9XCIgZGF0YS1zbS1pZHg9XCIke2lkeH1cIiBjbGFzcz1cInNtLWJ0biBzbS1idG4taWNvblwiIHRpdGxlPVwiUmVuYW1lIHNlc3Npb25cIiBhcmlhLWxhYmVsPVwiUmVuYW1lIHNlc3Npb25cIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXBlbmNpbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2J1dHRvbj5gICtcbiAgICAgIGA8YnV0dG9uIGRhdGEtc20tYWN0aW9uPVwiZHVwbGljYXRlXCIgZGF0YS1zbS1wYXRoPVwiJHtlcH1cIiBjbGFzcz1cInNtLWJ0biBzbS1idG4taWNvblwiIHRpdGxlPVwiRHVwbGljYXRlIHNlc3Npb25cIiBhcmlhLWxhYmVsPVwiRHVwbGljYXRlIHNlc3Npb25cIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNvcHlcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9idXR0b24+YCArXG4gICAgICBgPGJ1dHRvbiBkYXRhLXNtLWFjdGlvbj1cImRlbGV0ZVwiIGRhdGEtc20tcGF0aD1cIiR7ZXB9XCIgY2xhc3M9XCJzbS1idG4gc20tYnRuLWRhbmdlciBzbS1idG4taWNvblwiIHRpdGxlPVwiTW92ZSB0byBUcmFzaFwiIGFyaWEtbGFiZWw9XCJNb3ZlIHNlc3Npb24gdG8gVHJhc2hcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRyYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYnV0dG9uPmA7XG4gIH1cblxuICBjb25zdCByb3dDbGFzcyA9IChyb3cudHlwZSA9PT0gJ2FjdGl2ZScgJiYgcm93Lm93bmVyc2hpcC5pc0N1cnJlbnQpID8gJ3NtLXRyIHNtLXRyLWN1cnJlbnQnIDogJ3NtLXRyJztcblxuICBjb25zdCBjb21wYW55U3ViID0gcm93LmNvbXBhbnlcbiAgICA/IGA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuOGVtO2NvbG9yOiM5NGEzYjg7bWFyZ2luLXRvcDoxcHg7XCI+JHtlc2NhcGVIdG1sKHJvdy5jb21wYW55KX08L2Rpdj5gXG4gICAgOiAnJztcbiAgY29uc3QgbmFtZUNlbGwgPSByb3cudHlwZSA9PT0gJ3NhdmVkJ1xuICAgID8gYDxzcGFuIGlkPVwic20tbmFtZS0ke3Jvdy5pZHh9XCI+JHtlc2NhcGVIdG1sKHJvdy5uYW1lKX08L3NwYW4+YCArXG4gICAgICBgJHtjb21wYW55U3VifWAgK1xuICAgICAgYDxzcGFuIGlkPVwic20tcmVuYW1lLSR7cm93LmlkeH1cIiBzdHlsZT1cImRpc3BsYXk6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweDttYXJnaW4tdG9wOjNweDtcIj5gICtcbiAgICAgICAgYDxpbnB1dCBpZD1cInNtLWlucHV0LSR7cm93LmlkeH1cIiB0eXBlPVwidGV4dFwiIHZhbHVlPVwiJHtlc2NhcGVIdG1sKHJvdy5uYW1lKX1cIiBjbGFzcz1cInNtLWtleS1pbnB1dFwiYCArXG4gICAgICAgICAgYCBkYXRhLXNtLXBhdGg9XCIke2VzY2FwZUh0bWwocm93LnBhdGggfHwgJycpfVwiIGRhdGEtc20taWR4PVwiJHtyb3cuaWR4fVwiYCArXG4gICAgICAgICAgYCBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgIzNiODJmNjtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjNweCA4cHg7Zm9udC1zaXplOjEycHg7ZmxleDoxO21pbi13aWR0aDo2MHB4O1wiPmAgK1xuICAgICAgICBgPGJ1dHRvbiBkYXRhLXNtLWFjdGlvbj1cInN1Ym1pdC1yZW5hbWVcIiBkYXRhLXNtLXBhdGg9XCIke2VzY2FwZUh0bWwocm93LnBhdGggfHwgJycpfVwiIGRhdGEtc20taWR4PVwiJHtyb3cuaWR4fVwiIGNsYXNzPVwic20tYnRuXCIgdGl0bGU9XCJTYXZlIHJlbmFtZVwiIGFyaWEtbGFiZWw9XCJTYXZlIHJlbmFtZVwiPlxcdTI3MTM8L2J1dHRvbj5gICtcbiAgICAgICAgYDxidXR0b24gZGF0YS1zbS1hY3Rpb249XCJjYW5jZWwtcmVuYW1lXCIgZGF0YS1zbS1pZHg9XCIke3Jvdy5pZHh9XCIgY2xhc3M9XCJzbS1idG5cIiB0aXRsZT1cIkNhbmNlbCByZW5hbWVcIiBhcmlhLWxhYmVsPVwiQ2FuY2VsIHJlbmFtZVwiPlxcdTI3MTU8L2J1dHRvbj5gICtcbiAgICAgIGA8L3NwYW4+YFxuICAgIDogYDxzcGFuPiR7ZXNjYXBlSHRtbChyb3cubmFtZSl9PC9zcGFuPiR7Y29tcGFueVN1Yn1gO1xuXG4gIGNvbnN0IGFwcFN0YXR1c0xhYmVscyA9IHtcbiAgICBkcmFmdDogJ0RyYWZ0JywgcmVhZHk6ICdSZWFkeScsIHNlbnQ6ICdTZW50JywgcXVldWVkOiAnUXVldWVkJyxcbiAgICBpbnRlcnZpZXc6ICdJbnRlcnZpZXcnLCByZWplY3RlZDogJ1JlamVjdGVkJywgYWNjZXB0ZWQ6ICdBY2NlcHRlZCcsXG4gICAgcGFya2VkOiAnUGFya2VkJyxcbiAgfTtcbiAgY29uc3QgYXBwU3RhdHVzQ29sb3JzID0ge1xuICAgIGRyYWZ0OiAnIzk0YTNiOCcsIHJlYWR5OiAnIzNiODJmNicsIHNlbnQ6ICcjMjJjNTVlJywgcXVldWVkOiAnI2VhYjMwOCcsXG4gICAgaW50ZXJ2aWV3OiAnI2E4NTVmNycsIHJlamVjdGVkOiAnI2VmNDQ0NCcsIGFjY2VwdGVkOiAnIzA1OTY2OScsXG4gICAgcGFya2VkOiAnI2Y5NzMxNicsXG4gIH07XG4gIGNvbnN0IGFwcFN0YXR1cyA9IHJvdy5hcHBsaWNhdGlvblN0YXR1cyB8fCAnJztcbiAgY29uc3QgYXBwU3RhdHVzQmFkZ2UgPSBhcHBTdGF0dXMgJiYgYXBwU3RhdHVzTGFiZWxzW2FwcFN0YXR1c11cbiAgICA/IGAgPHNwYW4gaWQ9XCJzbS1zdGF0dXMtYmFkZ2UtJHtyb3cuaWR4fVwiIHN0eWxlPVwiZm9udC1zaXplOjAuNzVlbTtwYWRkaW5nOjFweCA2cHg7Ym9yZGVyLXJhZGl1czo5cHg7YmFja2dyb3VuZDoke2FwcFN0YXR1c0NvbG9yc1thcHBTdGF0dXNdfTtjb2xvcjojZmZmO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIj4ke2FwcFN0YXR1c0xhYmVsc1thcHBTdGF0dXNdfTwvc3Bhbj5gXG4gICAgOiBgPHNwYW4gaWQ9XCJzbS1zdGF0dXMtYmFkZ2UtJHtyb3cuaWR4fVwiPjwvc3Bhbj5gO1xuXG4gIC8vIFN0YXR1cy1lZGl0IGlubGluZSB3aWRnZXQgKHNhdmVkIHJvd3Mgb25seSlcbiAgY29uc3Qgc3RhdHVzRWRpdFdpZGdldCA9IHJvdy50eXBlID09PSAnc2F2ZWQnXG4gICAgPyBgPHNwYW4gaWQ9XCJzbS1zdGF0dXMtZWRpdC0ke3Jvdy5pZHh9XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo0cHg7bWFyZ2luLXRvcDoycHg7XCI+YCArXG4gICAgICAgIGA8c2VsZWN0IGlkPVwic20tc3RhdHVzLXNlbC0ke3Jvdy5pZHh9XCIgY2xhc3M9XCJzbS1rZXktaW5wdXRcIiBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgIzNiODJmNjtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjJweCA0cHg7Zm9udC1zaXplOjEycHg7XCIgYXJpYS1sYWJlbD1cIlNlbGVjdCBhcHBsaWNhdGlvbiBzdGF0dXNcIj5gICtcbiAgICAgICAgICBgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIGNsZWFyIC0tPC9vcHRpb24+YCArXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoYXBwU3RhdHVzTGFiZWxzKS5tYXAoKFt2LCBsXSkgPT5cbiAgICAgICAgICAgIGA8b3B0aW9uIHZhbHVlPVwiJHt2fVwiJHthcHBTdGF0dXMgPT09IHYgPyAnIHNlbGVjdGVkJyA6ICcnfT4ke2x9PC9vcHRpb24+YFxuICAgICAgICAgICkuam9pbignJykgK1xuICAgICAgICBgPC9zZWxlY3Q+YCArXG4gICAgICAgIGA8YnV0dG9uIGRhdGEtc20tYWN0aW9uPVwic3VibWl0LXN0YXR1c1wiIGRhdGEtc20tcGF0aD1cIiR7ZXNjYXBlSHRtbChyb3cucGF0aCB8fCAnJyl9XCIgZGF0YS1zbS1pZHg9XCIke3Jvdy5pZHh9XCIgY2xhc3M9XCJzbS1idG5cIiB0aXRsZT1cIlNhdmUgc3RhdHVzXCIgYXJpYS1sYWJlbD1cIlNhdmUgc3RhdHVzXCI+JiMxMDAwMzs8L2J1dHRvbj5gICtcbiAgICAgICAgYDxidXR0b24gZGF0YS1zbS1hY3Rpb249XCJjYW5jZWwtc3RhdHVzXCIgZGF0YS1zbS1pZHg9XCIke3Jvdy5pZHh9XCIgY2xhc3M9XCJzbS1idG5cIiB0aXRsZT1cIkNhbmNlbFwiIGFyaWEtbGFiZWw9XCJDYW5jZWwgc3RhdHVzIGVkaXRcIj4mIzEwMDA1OzwvYnV0dG9uPmAgK1xuICAgICAgYDwvc3Bhbj5gXG4gICAgOiAnJztcblxuICAvLyBOb3Rlcy1lZGl0IGlubGluZSB3aWRnZXQgKHNhdmVkIHJvd3Mgb25seSlcbiAgY29uc3Qgbm90ZXNQcmV2aWV3ID0gcm93Lm5vdGVzXG4gICAgPyBgPGRpdiBpZD1cInNtLW5vdGVzLXByZXZpZXctJHtyb3cuaWR4fVwiIHN0eWxlPVwiZm9udC1zaXplOjAuNzhlbTtjb2xvcjojOTRhM2I4O21hcmdpbi10b3A6MnB4O21heC13aWR0aDoyNjBweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7XCIgdGl0bGU9XCIke2VzY2FwZUh0bWwocm93Lm5vdGVzKX1cIj4ke2VzY2FwZUh0bWwocm93Lm5vdGVzKX08L2Rpdj5gXG4gICAgOiBgPGRpdiBpZD1cInNtLW5vdGVzLXByZXZpZXctJHtyb3cuaWR4fVwiIHN0eWxlPVwiZGlzcGxheTpub25lO2ZvbnQtc2l6ZTowLjc4ZW07Y29sb3I6Izk0YTNiODttYXJnaW4tdG9wOjJweDtcIj48L2Rpdj5gO1xuICBjb25zdCBub3Rlc0VkaXRXaWRnZXQgPSByb3cudHlwZSA9PT0gJ3NhdmVkJ1xuICAgID8gYDxzcGFuIGlkPVwic20tbm90ZXMtZWRpdC0ke3Jvdy5pZHh9XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7bWFyZ2luLXRvcDo0cHg7d2lkdGg6MTAwJTtcIj5gICtcbiAgICAgICAgYDx0ZXh0YXJlYSBpZD1cInNtLW5vdGVzLXRhLSR7cm93LmlkeH1cIiByb3dzPVwiMlwiIG1heGxlbmd0aD1cIjIwMDBcImAgK1xuICAgICAgICAgIGAgc3R5bGU9XCJ3aWR0aDoxMDAlO2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6NHB4O2JvcmRlcjoxcHggc29saWQgIzNiODJmNjtib3JkZXItcmFkaXVzOjRweDtyZXNpemU6dmVydGljYWw7XCJgICtcbiAgICAgICAgICBgIGFyaWEtbGFiZWw9XCJTZXNzaW9uIG5vdGVzXCIgcGxhY2Vob2xkZXI9XCJlLmcuLCBJbnRlcnZpZXdlZCAyMDI1LTAzLTEwLCBhd2FpdGluZyBjYWxsYmFja1wiPiR7ZXNjYXBlSHRtbChyb3cubm90ZXMgfHwgJycpfTwvdGV4dGFyZWE+YCArXG4gICAgICAgIGA8c3BhbiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6NHB4O1wiPmAgK1xuICAgICAgICAgIGA8YnV0dG9uIGRhdGEtc20tYWN0aW9uPVwic3VibWl0LW5vdGVzXCIgZGF0YS1zbS1wYXRoPVwiJHtlc2NhcGVIdG1sKHJvdy5wYXRoIHx8ICcnKX1cIiBkYXRhLXNtLWlkeD1cIiR7cm93LmlkeH1cIiBjbGFzcz1cInNtLWJ0blwiIHRpdGxlPVwiU2F2ZSBub3Rlc1wiIGFyaWEtbGFiZWw9XCJTYXZlIG5vdGVzXCI+JiMxMDAwMzs8L2J1dHRvbj5gICtcbiAgICAgICAgICBgPGJ1dHRvbiBkYXRhLXNtLWFjdGlvbj1cImNhbmNlbC1ub3Rlc1wiIGRhdGEtc20taWR4PVwiJHtyb3cuaWR4fVwiIGNsYXNzPVwic20tYnRuXCIgdGl0bGU9XCJDYW5jZWxcIiBhcmlhLWxhYmVsPVwiQ2FuY2VsIG5vdGVzIGVkaXRcIj4mIzEwMDA1OzwvYnV0dG9uPmAgK1xuICAgICAgICBgPC9zcGFuPmAgK1xuICAgICAgYDwvc3Bhbj5gXG4gICAgOiAnJztcblxuICBpZiAocm93LnR5cGUgPT09ICdzYXZlZCcpIHtcbiAgICBhY3Rpb25IdG1sICs9XG4gICAgICBgPGJ1dHRvbiBkYXRhLXNtLWFjdGlvbj1cImVkaXQtc3RhdHVzXCIgZGF0YS1zbS1wYXRoPVwiJHtlc2NhcGVIdG1sKHJvdy5wYXRoIHx8ICcnKX1cIiBkYXRhLXNtLWlkeD1cIiR7cm93LmlkeH1cIiBjbGFzcz1cInNtLWJ0biBzbS1idG4taWNvblwiIHRpdGxlPVwiVXBkYXRlIGFwcGxpY2F0aW9uIHN0YXR1c1wiIGFyaWEtbGFiZWw9XCJVcGRhdGUgYXBwbGljYXRpb24gc3RhdHVzXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10YWdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9idXR0b24+YDtcbiAgICBhY3Rpb25IdG1sICs9XG4gICAgICBgPGJ1dHRvbiBkYXRhLXNtLWFjdGlvbj1cImVkaXQtbm90ZXNcIiBkYXRhLXNtLXBhdGg9XCIke2VzY2FwZUh0bWwocm93LnBhdGggfHwgJycpfVwiIGRhdGEtc20taWR4PVwiJHtyb3cuaWR4fVwiIGNsYXNzPVwic20tYnRuIHNtLWJ0bi1pY29uXCIgdGl0bGU9XCJFZGl0IG5vdGVzXCIgYXJpYS1sYWJlbD1cIkVkaXQgbm90ZXNcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLW5vdGUtc3RpY2t5XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYnV0dG9uPmA7XG4gIH1cblxuICBjb25zdCBhdHNTY29yZUxhYmVsID0gcm93LmF0c1Njb3JlICE9IG51bGxcbiAgICA/ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHMgPSBOdW1iZXIocm93LmF0c1Njb3JlKTtcbiAgICAgICAgY29uc3QgY29sb3IgPSBzID49IDc1ID8gJyMwNTk2NjknIDogcyA+PSA1MCA/ICcjZDk3NzA2JyA6ICcjZGMyNjI2JztcbiAgICAgICAgcmV0dXJuIGAgPHNwYW4gdGl0bGU9XCJBVFMgbWF0Y2ggc2NvcmVcIiBzdHlsZT1cImZvbnQtc2l6ZTowLjc4ZW07cGFkZGluZzoxcHggNXB4O2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6JHtjb2xvcn07Y29sb3I6I2ZmZjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Zm9udC13ZWlnaHQ6NjAwO1wiPiR7c30lPC9zcGFuPmA7XG4gICAgICB9KSgpXG4gICAgOiAnJztcblxuICByZXR1cm4gYDxkaXYgY2xhc3M9XCIke3Jvd0NsYXNzfVwiPmAgK1xuICAgIGA8c3BhbiBjbGFzcz1cInNtLXRkIHNtLXRkLW5hbWVcIj4ke25hbWVDZWxsfTwvc3Bhbj5gICtcbiAgICBgPHNwYW4gY2xhc3M9XCJzbS10ZCBzbS10ZC1zdGF0dXNcIj4ke3N0YXR1c1BpbGx9PC9zcGFuPmAgK1xuICAgIGA8c3BhbiBjbGFzcz1cInNtLXRkIHNtLXRkLXBoYXNlXCI+PHNwYW4gaWQ9XCJzbS1waGFzZS0ke3Jvdy5pZHh9XCI+JHtwaGFzZUxhYmVsfSR7YXRzU2NvcmVMYWJlbH0ke2FwcFN0YXR1c0JhZGdlfTwvc3Bhbj4ke3N0YXR1c0VkaXRXaWRnZXR9JHtub3Rlc1ByZXZpZXd9JHtub3Rlc0VkaXRXaWRnZXR9PC9zcGFuPmAgK1xuICAgIGA8c3BhbiBjbGFzcz1cInNtLXRkIHNtLXRkLWRhdGVcIj4ke21vZExhYmVsfTwvc3Bhbj5gICtcbiAgICBgPHNwYW4gY2xhc3M9XCJzbS10ZCBzbS10ZC1hY3Rpb25zXCI+JHthY3Rpb25IdG1sfTwvc3Bhbj5gICtcbiAgICBgPC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclJlY2VudHNTdHJpcChyZWNlbnRSb3dzKSB7XG4gIGlmICghcmVjZW50Um93cy5sZW5ndGgpIHJldHVybiAnJztcbiAgY29uc3QgaXRlbXMgPSByZWNlbnRSb3dzLm1hcChyb3cgPT4ge1xuICAgIGNvbnN0IGxhYmVsICAgID0gZXNjYXBlSHRtbChyb3cubmFtZSk7XG4gICAgY29uc3QgZG90Q2xhc3MgPSByb3cudHlwZSA9PT0gJ2FjdGl2ZSdcbiAgICAgID8gKHJvdy5vd25lcnNoaXAuaXNDdXJyZW50ID8gJ3NtLXJlY2VudC1kb3QtY3VycmVudCcgOiAnc20tcmVjZW50LWRvdC1vdGhlcicpXG4gICAgICA6ICdzbS1yZWNlbnQtZG90LXNhdmVkJztcbiAgICBjb25zdCBkb3QgPSBgPHNwYW4gY2xhc3M9XCJzbS1yZWNlbnQtZG90ICR7ZG90Q2xhc3N9XCI+PC9zcGFuPmA7XG4gICAgaWYgKHJvdy50eXBlID09PSAnYWN0aXZlJykge1xuICAgICAgY29uc3QgaHJlZiAgPSBgLz9zZXNzaW9uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJvdy5zZXNzaW9uSWQgfHwgJycpfWA7XG4gICAgICBjb25zdCBleHRyYSA9IHJvdy5vd25lcnNoaXAuaXNDdXJyZW50ID8gJyBzbS1yZWNlbnQtY3VycmVudCcgOiAnJztcbiAgICAgIHJldHVybiBgPGEgY2xhc3M9XCJzbS1yZWNlbnQtaXRlbSR7ZXh0cmF9XCIgaHJlZj1cIiR7aHJlZn1cIj4ke2RvdH0ke2xhYmVsfTwvYT5gO1xuICAgIH1cbiAgICByZXR1cm4gYDxidXR0b24gY2xhc3M9XCJzbS1yZWNlbnQtaXRlbVwiIGRhdGEtc20tYWN0aW9uPVwibG9hZFwiIGRhdGEtc20tcGF0aD1cIiR7ZXNjYXBlSHRtbChyb3cucGF0aCB8fCAnJyl9XCI+JHtkb3R9JHtsYWJlbH08L2J1dHRvbj5gO1xuICB9KS5qb2luKCcnKTtcbiAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwic20tcmVjZW50c1wiPjxkaXYgY2xhc3M9XCJzbS1yZWNlbnRzLWxhYmVsXCI+UmVjZW50PC9kaXY+PGRpdiBjbGFzcz1cInNtLXJlY2VudHMtbGlzdFwiPiR7aXRlbXN9PC9kaXY+PC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclNlc3Npb25UYWJsZUZyb21DYWNoZSgpIHtcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXNzaW9ucy1tb2RhbC1ib2R5Jyk7XG4gIGlmICghYm9keSkgcmV0dXJuO1xuXG4gIGNvbnN0IHJvd3MgICA9IF9ub3JtYWxpemVTZXNzaW9uc0ZvclRhYmxlKF9zbUFjdGl2ZUNhY2hlLCBfc21TYXZlZENhY2hlKTtcbiAgY29uc3QgYnlEYXRlID0gX3NvcnRTZXNzaW9uUm93cyhyb3dzLCAnbGFzdE1vZGlmaWVkJywgJ2Rlc2MnKTtcbiAgY29uc3Qgc29ydGVkID0gX3NvcnRTZXNzaW9uUm93cyhyb3dzLCBfc21Tb3J0S2V5LCBfc21Tb3J0RGlyKTtcblxuICBpZiAoc29ydGVkLmxlbmd0aCA9PT0gMCkge1xuICAgIGJvZHkuaW5uZXJIVE1MID0gJzxwIGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1lbXB0eVwiIHN0eWxlPVwicGFkZGluZzoyNHB4IDE2cHg7XCI+Tm8gc2Vzc2lvbnMgZm91bmQuIENyZWF0ZSBvbmUgdG8gZ2V0IHN0YXJ0ZWQuPC9wPic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFydHMgPSBbXG4gICAgX3NtQWN0aXZlQ2FjaGUubGVuZ3RoID8gYCR7X3NtQWN0aXZlQ2FjaGUubGVuZ3RofSBhY3RpdmVgIDogJycsXG4gICAgX3NtU2F2ZWRDYWNoZS5sZW5ndGggID8gYCR7X3NtU2F2ZWRDYWNoZS5sZW5ndGh9IHNhdmVkYCAgIDogJycsXG4gIF0uZmlsdGVyKEJvb2xlYW4pO1xuXG4gIGJvZHkuaW5uZXJIVE1MID1cbiAgICBfcmVuZGVyUmVjZW50c1N0cmlwKGJ5RGF0ZS5zbGljZSgwLCA1KSkgK1xuICAgIGA8ZGl2IGNsYXNzPVwic20tdGFibGUtd3JhcFwiPmAgK1xuICAgICAgYDxkaXYgY2xhc3M9XCJzbS10YWJsZS1pbmZvXCI+JHtwYXJ0cy5qb2luKCcgXFx1MDBiNyAnKX08L2Rpdj5gICtcbiAgICAgIF9yZW5kZXJTZXNzaW9uVGFibGVIZWFkZXIoKSArXG4gICAgICBgPGRpdiBjbGFzcz1cInNtLXRib2R5XCI+JHtzb3J0ZWQubWFwKF9yZW5kZXJTZXNzaW9uVGFibGVSb3cpLmpvaW4oJycpfTwvZGl2PmAgK1xuICAgIGA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiBfaGFuZGxlU2Vzc2lvbk1vZGFsQ2xpY2soZSkge1xuICBjb25zdCBzb3J0QnRuID0gZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtc20tc29ydF0nKTtcbiAgaWYgKHNvcnRCdG4pIHsgX3NldFNtU29ydChzb3J0QnRuLmRhdGFzZXQuc21Tb3J0KTsgcmV0dXJuOyB9XG5cbiAgY29uc3QgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtc20tYWN0aW9uXScpO1xuICBpZiAoIWJ0bikgcmV0dXJuO1xuICBjb25zdCBwYXRoICAgPSBidG4uZGF0YXNldC5zbVBhdGg7XG4gIGNvbnN0IGlkeCAgICA9IHBhcnNlSW50KGJ0bi5kYXRhc2V0LnNtSWR4ID8/ICctMScsIDEwKTtcbiAgY29uc3QgYWN0aW9uID0gYnRuLmRhdGFzZXQuc21BY3Rpb247XG4gIGlmICAgICAgKGFjdGlvbiA9PT0gJ3JlbmFtZScpICAgICAgICBzdGFydFNlc3Npb25Nb2RhbFJlbmFtZShwYXRoLCBpZHgpO1xuICBlbHNlIGlmIChhY3Rpb24gPT09ICdzdWJtaXQtcmVuYW1lJykgc3VibWl0U2Vzc2lvbk1vZGFsUmVuYW1lKHBhdGgsIGlkeCk7XG4gIGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2NhbmNlbC1yZW5hbWUnKSBjYW5jZWxTZXNzaW9uTW9kYWxSZW5hbWUoaWR4KTtcbiAgZWxzZSBpZiAoYWN0aW9uID09PSAnZWRpdC1zdGF0dXMnKSAgIHN0YXJ0U2Vzc2lvblN0YXR1c0VkaXQoaWR4KTtcbiAgZWxzZSBpZiAoYWN0aW9uID09PSAnc3VibWl0LXN0YXR1cycpIHN1Ym1pdFNlc3Npb25TdGF0dXNFZGl0KHBhdGgsIGlkeCk7XG4gIGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2NhbmNlbC1zdGF0dXMnKSBjYW5jZWxTZXNzaW9uU3RhdHVzRWRpdChpZHgpO1xuICBlbHNlIGlmIChhY3Rpb24gPT09ICdlZGl0LW5vdGVzJykgICAgc3RhcnRTZXNzaW9uTm90ZXNFZGl0KGlkeCk7XG4gIGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3N1Ym1pdC1ub3RlcycpICBzdWJtaXRTZXNzaW9uTm90ZXNFZGl0KHBhdGgsIGlkeCk7XG4gIGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2NhbmNlbC1ub3RlcycpICBjYW5jZWxTZXNzaW9uTm90ZXNFZGl0KGlkeCk7XG4gIGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2xvYWQnKSAgICAgICAgICBsb2FkU2Vzc2lvbkFuZENsb3NlTW9kYWwocGF0aCk7XG4gIGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2R1cGxpY2F0ZScpICAgICBfZHVwbGljYXRlU2Vzc2lvbkZyb21Nb2RhbChwYXRoKTtcbiAgZWxzZSBpZiAoYWN0aW9uID09PSAnZGVsZXRlJykgICAgICAgIF9kZWxldGVTZXNzaW9uRnJvbU1vZGFsKHBhdGgsIGUpO1xufVxuXG5mdW5jdGlvbiBfaGFuZGxlU2Vzc2lvbk1vZGFsS2V5ZG93bihlKSB7XG4gIGlmICgoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykgJiYgZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtc20tc29ydF0nKSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBfc2V0U21Tb3J0KGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXNtLXNvcnRdJykuZGF0YXNldC5zbVNvcnQpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBpbnB1dCA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5zbS1rZXktaW5wdXQnKTtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuO1xuICBjb25zdCBwYXRoID0gaW5wdXQuZGF0YXNldC5zbVBhdGg7XG4gIGNvbnN0IGlkeCAgPSBwYXJzZUludChpbnB1dC5kYXRhc2V0LnNtSWR4LCAxMCk7XG4gIGlmICAgICAgKGUua2V5ID09PSAnRW50ZXInKSAgc3VibWl0U2Vzc2lvbk1vZGFsUmVuYW1lKHBhdGgsIGlkeCk7XG4gIGVsc2UgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgY2FuY2VsU2Vzc2lvbk1vZGFsUmVuYW1lKGlkeCk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBTZXNzaW9ucyBtb2RhbCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gb3BlblNlc3Npb25zTW9kYWwoeyByZXF1aXJlZCA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nlc3Npb25zLW1vZGFsLW92ZXJsYXknKTtcbiAgaWYgKCFvdmVybGF5KSByZXR1cm47XG4gIG92ZXJsYXkuZGF0YXNldC5kaXNtaXNzRGlzYWJsZWQgPSByZXF1aXJlZCA/ICcxJyA6ICcnO1xuICBjb25zdCBjbG9zZVggICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXNzaW9ucy1tb2RhbC1jbG9zZS14Jyk7XG4gIGNvbnN0IGNsb3NlRm9vdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nlc3Npb25zLW1vZGFsLWNsb3NlLWZvb3RlcicpO1xuICBpZiAoY2xvc2VYKSAgICAgIGNsb3NlWC5zdHlsZS5kaXNwbGF5ICAgICAgPSByZXF1aXJlZCA/ICdub25lJyA6ICcnO1xuICBpZiAoY2xvc2VGb290ZXIpIGNsb3NlRm9vdGVyLnN0eWxlLmRpc3BsYXkgPSByZXF1aXJlZCA/ICdub25lJyA6ICcnO1xuICBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIHdpbmRvdy5fZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIGF3YWl0IF9yZW5kZXJTZXNzaW9uc01vZGFsQm9keSgpO1xuICBfcmVmcmVzaFRyYXNoQmFkZ2UoKTtcbiAgdHJhcEZvY3VzKCdzZXNzaW9ucy1tb2RhbC1vdmVybGF5Jyk7XG4gIHNldEluaXRpYWxGb2N1cygnc2Vzc2lvbnMtbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBjbG9zZVNlc3Npb25zTW9kYWwoKSB7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Vzc2lvbnMtbW9kYWwtb3ZlcmxheScpO1xuICBpZiAoIW92ZXJsYXkpIHJldHVybjtcbiAgaWYgKG92ZXJsYXkuZGF0YXNldC5kaXNtaXNzRGlzYWJsZWQgPT09ICcxJykgcmV0dXJuO1xuICBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVuZGVyU2Vzc2lvbnNNb2RhbEJvZHkoKSB7XG4gIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Vzc2lvbnMtbW9kYWwtYm9keScpO1xuICBpZiAoIWJvZHkpIHJldHVybjtcbiAgYm9keS5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT1cInBhZGRpbmc6MjRweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjEwcHg7Y29sb3I6IzZiNzI4MDtcIj48c3BhbiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPjwvc3Bhbj4gTG9hZGluZyBzZXNzaW9uc1xcdTIwMjY8L2Rpdj4nO1xuICB0cnkge1xuICAgIGNvbnN0IFthY3RpdmVSZXMsIHNhdmVkUmVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGZldGNoKCcvYXBpL3Nlc3Npb25zL2FjdGl2ZScpLFxuICAgICAgZmV0Y2goJy9hcGkvc2Vzc2lvbnMnKSxcbiAgICBdKTtcbiAgICBfc21BY3RpdmVDYWNoZSA9IGFjdGl2ZVJlcy5vayA/ICgoYXdhaXQgYWN0aXZlUmVzLmpzb24oKSkuc2Vzc2lvbnMgfHwgW10pIDogW107XG4gICAgY29uc3Qgc2F2ZWREYXRhID0gc2F2ZWRSZXMub2sgPyBwYXJzZVNlc3Npb25MaXN0UmVzcG9uc2UoYXdhaXQgc2F2ZWRSZXMuanNvbigpKSA6IHsgc2Vzc2lvbnM6IFtdIH07XG4gICAgX3NtU2F2ZWRDYWNoZSAgID0gc2F2ZWREYXRhLnNlc3Npb25zIHx8IFtdO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYm9keS5pbm5lckhUTUwgPSBgPHAgc3R5bGU9XCJwYWRkaW5nOjIwcHg7Y29sb3I6I2VmNDQ0NDtcIj5Db3VsZCBub3QgbG9hZCBzZXNzaW9uczogJHtlc2NhcGVIdG1sKGUubWVzc2FnZSl9PC9wPmA7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIFdpcmUgZXZlbnQgZGVsZWdhdGlvbiBvbmNlOyBwZXJzaXN0cyBhY3Jvc3MgcmUtcmVuZGVycyBzaW5jZSBib2R5IGVsZW1lbnQgaXMgc3RhYmxlXG4gIGlmICghYm9keS5fc21MaXN0ZW5lckF0dGFjaGVkKSB7XG4gICAgYm9keS5fc21MaXN0ZW5lckF0dGFjaGVkID0gdHJ1ZTtcbiAgICBib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgICBfaGFuZGxlU2Vzc2lvbk1vZGFsQ2xpY2spO1xuICAgIGJvZHkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIF9oYW5kbGVTZXNzaW9uTW9kYWxLZXlkb3duKTtcbiAgfVxuICBfcmVuZGVyU2Vzc2lvblRhYmxlRnJvbUNhY2hlKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRTZXNzaW9uQW5kQ2xvc2VNb2RhbChwYXRoKSB7XG4gIC8vIENsZWFyIGRpc21pc3NEaXNhYmxlZCBzbyBsb2FkaW5nIGEgc2Vzc2lvbiBhbHdheXMgY2xvc2VzIHRoZSBtb2RhbCxcbiAgLy8gZXZlbiB3aGVuIGl0IHdhcyBvcGVuZWQgaW4gcmVxdWlyZWQgKHN0YXJ0dXApIG1vZGUuXG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Vzc2lvbnMtbW9kYWwtb3ZlcmxheScpO1xuICBpZiAob3ZlcmxheSkgb3ZlcmxheS5kYXRhc2V0LmRpc21pc3NEaXNhYmxlZCA9ICcnO1xuICBjbG9zZVNlc3Npb25zTW9kYWwoKTtcbiAgYXdhaXQgbG9hZFNlc3Npb25GaWxlKHBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBuZXdTZXNzaW9uRnJvbU1vZGFsKCkge1xuICBjbG9zZVNlc3Npb25zTW9kYWwoKTtcbiAgYXdhaXQgY3JlYXRlTmV3U2Vzc2lvbkFuZE5hdmlnYXRlKCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0U2Vzc2lvbk1vZGFsUmVuYW1lKHBhdGgsIGlkeCkge1xuICBjb25zdCBuYW1lRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc20tbmFtZS0ke2lkeH1gKTtcbiAgY29uc3QgZm9ybSAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLXJlbmFtZS0ke2lkeH1gKTtcbiAgaWYgKG5hbWVFbCkgbmFtZUVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGlmIChmb3JtKSAgIGZvcm0uc3R5bGUuZGlzcGxheSAgID0gJ2ZsZXgnO1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1pbnB1dC0ke2lkeH1gKTtcbiAgaWYgKGlucHV0KSB7IGlucHV0LmZvY3VzKCk7IGlucHV0LnNlbGVjdCgpOyB9XG59XG5cbmZ1bmN0aW9uIGNhbmNlbFNlc3Npb25Nb2RhbFJlbmFtZShpZHgpIHtcbiAgY29uc3QgbmFtZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLW5hbWUtJHtpZHh9YCk7XG4gIGNvbnN0IGZvcm0gICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1yZW5hbWUtJHtpZHh9YCk7XG4gIGlmIChmb3JtKSAgIGZvcm0uc3R5bGUuZGlzcGxheSAgID0gJ25vbmUnO1xuICBpZiAobmFtZUVsKSBuYW1lRWwuc3R5bGUuZGlzcGxheSA9ICcnO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdWJtaXRTZXNzaW9uTW9kYWxSZW5hbWUocGF0aCwgaWR4KSB7XG4gIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLWlucHV0LSR7aWR4fWApO1xuICBpZiAoIWlucHV0KSByZXR1cm47XG4gIGNvbnN0IG5ld05hbWUgPSBpbnB1dC52YWx1ZS50cmltKCk7XG4gIGlmICghbmV3TmFtZSkgcmV0dXJuO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZW5hbWUtc2Vzc2lvbicsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcGF0aCwgbmV3X25hbWU6IG5ld05hbWUgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNvbnN0IG5hbWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1uYW1lLSR7aWR4fWApO1xuICAgICAgaWYgKG5hbWVFbCkgbmFtZUVsLnRleHRDb250ZW50ID0gbmV3TmFtZTtcbiAgICAgIGNhbmNlbFNlc3Npb25Nb2RhbFJlbmFtZShpZHgpO1xuICAgICAgYXdhaXQgZmV0Y2hTdGF0dXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHNob3dUb2FzdChgUmVuYW1lIGZhaWxlZDogJHtkYXRhLmVycm9yfWAsICdlcnJvcicpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkgeyBpZiAodHlwZW9mIHNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgc2hvd1RvYXN0KGBSZW5hbWUgZXJyb3I6ICR7ZS5tZXNzYWdlfWAsICdlcnJvcicpOyB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0U2Vzc2lvblN0YXR1c0VkaXQoaWR4KSB7XG4gIGNvbnN0IHBoYXNlRWwgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLXBoYXNlLSR7aWR4fWApO1xuICBjb25zdCBlZGl0V2lkZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLXN0YXR1cy1lZGl0LSR7aWR4fWApO1xuICBpZiAocGhhc2VFbCkgICAgcGhhc2VFbC5zdHlsZS5kaXNwbGF5ICAgID0gJ25vbmUnO1xuICBpZiAoZWRpdFdpZGdldCkgZWRpdFdpZGdldC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBjb25zdCBzZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc20tc3RhdHVzLXNlbC0ke2lkeH1gKTtcbiAgaWYgKHNlbCkgc2VsLmZvY3VzKCk7XG59XG5cbmZ1bmN0aW9uIGNhbmNlbFNlc3Npb25TdGF0dXNFZGl0KGlkeCkge1xuICBjb25zdCBwaGFzZUVsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLXBoYXNlLSR7aWR4fWApO1xuICBjb25zdCBlZGl0V2lkZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLXN0YXR1cy1lZGl0LSR7aWR4fWApO1xuICBpZiAoZWRpdFdpZGdldCkgZWRpdFdpZGdldC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBpZiAocGhhc2VFbCkgICAgcGhhc2VFbC5zdHlsZS5kaXNwbGF5ICAgID0gJyc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFNlc3Npb25TdGF0dXNFZGl0KHBhdGgsIGlkeCkge1xuICBjb25zdCBzZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc20tc3RhdHVzLXNlbC0ke2lkeH1gKTtcbiAgaWYgKCFzZWwpIHJldHVybjtcbiAgY29uc3QgbmV3U3RhdHVzID0gc2VsLnZhbHVlO1xuICBjb25zdCBfYXBwU3RhdHVzTGFiZWxzID0ge1xuICAgIGRyYWZ0OiAnRHJhZnQnLCByZWFkeTogJ1JlYWR5Jywgc2VudDogJ1NlbnQnLCBxdWV1ZWQ6ICdRdWV1ZWQnLFxuICAgIGludGVydmlldzogJ0ludGVydmlldycsIHJlamVjdGVkOiAnUmVqZWN0ZWQnLCBhY2NlcHRlZDogJ0FjY2VwdGVkJyxcbiAgICBwYXJrZWQ6ICdQYXJrZWQnLFxuICB9O1xuICBjb25zdCBfYXBwU3RhdHVzQ29sb3JzID0ge1xuICAgIGRyYWZ0OiAnIzk0YTNiOCcsIHJlYWR5OiAnIzNiODJmNicsIHNlbnQ6ICcjMjJjNTVlJywgcXVldWVkOiAnI2VhYjMwOCcsXG4gICAgaW50ZXJ2aWV3OiAnI2E4NTVmNycsIHJlamVjdGVkOiAnI2VmNDQ0NCcsIGFjY2VwdGVkOiAnIzA1OTY2OScsXG4gICAgcGFya2VkOiAnI2Y5NzMxNicsXG4gIH07XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3Nlc3Npb25zL21ldGFkYXRhJywge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcGF0aCwgYXBwbGljYXRpb25fc3RhdHVzOiBuZXdTdGF0dXMgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNvbnN0IGJhZGdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLXN0YXR1cy1iYWRnZS0ke2lkeH1gKTtcbiAgICAgIGlmIChiYWRnZSkge1xuICAgICAgICBpZiAobmV3U3RhdHVzICYmIF9hcHBTdGF0dXNMYWJlbHNbbmV3U3RhdHVzXSkge1xuICAgICAgICAgIGJhZGdlLnRleHRDb250ZW50ID0gX2FwcFN0YXR1c0xhYmVsc1tuZXdTdGF0dXNdO1xuICAgICAgICAgIGJhZGdlLnN0eWxlLmNzc1RleHQgPSBgZm9udC1zaXplOjAuNzVlbTtwYWRkaW5nOjFweCA2cHg7Ym9yZGVyLXJhZGl1czo5cHg7YmFja2dyb3VuZDoke19hcHBTdGF0dXNDb2xvcnNbbmV3U3RhdHVzXX07Y29sb3I6I2ZmZjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiYWRnZS50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgIGJhZGdlLnN0eWxlLmNzc1RleHQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FuY2VsU2Vzc2lvblN0YXR1c0VkaXQoaWR4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHNob3dUb2FzdChgU3RhdHVzIHVwZGF0ZSBmYWlsZWQ6ICR7ZGF0YS5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCwgJ2Vycm9yJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHNob3dUb2FzdChgU3RhdHVzIHVwZGF0ZSBlcnJvcjogJHtlLm1lc3NhZ2V9YCwgJ2Vycm9yJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RhcnRTZXNzaW9uTm90ZXNFZGl0KGlkeCkge1xuICBjb25zdCBlZGl0V2lkZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLW5vdGVzLWVkaXQtJHtpZHh9YCk7XG4gIGNvbnN0IHByZXZpZXcgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc20tbm90ZXMtcHJldmlldy0ke2lkeH1gKTtcbiAgaWYgKHByZXZpZXcpICAgIHByZXZpZXcuc3R5bGUuZGlzcGxheSAgICA9ICdub25lJztcbiAgaWYgKGVkaXRXaWRnZXQpIGVkaXRXaWRnZXQuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgY29uc3QgdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc20tbm90ZXMtdGEtJHtpZHh9YCk7XG4gIGlmICh0YSkgeyB0YS5mb2N1cygpOyB0YS5zZWxlY3Rpb25TdGFydCA9IHRhLnNlbGVjdGlvbkVuZCA9IHRhLnZhbHVlLmxlbmd0aDsgfVxufVxuXG5mdW5jdGlvbiBjYW5jZWxTZXNzaW9uTm90ZXNFZGl0KGlkeCkge1xuICBjb25zdCBlZGl0V2lkZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLW5vdGVzLWVkaXQtJHtpZHh9YCk7XG4gIGNvbnN0IHByZXZpZXcgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc20tbm90ZXMtcHJldmlldy0ke2lkeH1gKTtcbiAgaWYgKGVkaXRXaWRnZXQpIGVkaXRXaWRnZXQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaWYgKHByZXZpZXcpICAgIHByZXZpZXcuc3R5bGUuZGlzcGxheSAgICA9ICcnO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdWJtaXRTZXNzaW9uTm90ZXNFZGl0KHBhdGgsIGlkeCkge1xuICBjb25zdCB0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1ub3Rlcy10YS0ke2lkeH1gKTtcbiAgaWYgKCF0YSkgcmV0dXJuO1xuICBjb25zdCBuZXdOb3RlcyA9IHRhLnZhbHVlO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9zZXNzaW9ucy9tZXRhZGF0YScsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHBhdGgsIG5vdGVzOiBuZXdOb3RlcyB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1ub3Rlcy1wcmV2aWV3LSR7aWR4fWApO1xuICAgICAgaWYgKHByZXZpZXcpIHtcbiAgICAgICAgcHJldmlldy50ZXh0Q29udGVudCA9IG5ld05vdGVzO1xuICAgICAgICBwcmV2aWV3LnRpdGxlICAgICAgID0gbmV3Tm90ZXM7XG4gICAgICAgIHByZXZpZXcuc3R5bGUuZGlzcGxheSA9IG5ld05vdGVzID8gJycgOiAnbm9uZSc7XG4gICAgICB9XG4gICAgICBjYW5jZWxTZXNzaW9uTm90ZXNFZGl0KGlkeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYE5vdGVzIHVwZGF0ZSBmYWlsZWQ6ICR7ZGF0YS5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCwgJ2Vycm9yJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHNob3dUb2FzdChgTm90ZXMgdXBkYXRlIGVycm9yOiAke2UubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBfZGVsZXRlU2Vzc2lvbkZyb21Nb2RhbChwYXRoLCBldmVudCkge1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgaWYgKHR5cGVvZiBjb25maXJtRGlhbG9nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3Qgb2sgPSBhd2FpdCBjb25maXJtRGlhbG9nKCdNb3ZlIHRoaXMgc2Vzc2lvbiB0byBUcmFzaD8gWW91IGNhbiByZXN0b3JlIGl0IGZyb20gdGhlIFRyYXNoIHZpZXcuJyk7XG4gICAgaWYgKCFvaykgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL2RlbGV0ZS1zZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBwYXRoIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgIGF3YWl0IF9yZW5kZXJTZXNzaW9uc01vZGFsQm9keSgpO1xuICAgICAgYXdhaXQgX3JlZnJlc2hUcmFzaEJhZGdlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYEZhaWxlZCB0byBtb3ZlIHNlc3Npb24gdG8gVHJhc2g6ICR7ZGF0YS5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCwgJ2Vycm9yJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7IGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYEVycm9yOiAke2UubWVzc2FnZX1gLCAnZXJyb3InKTsgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgRHVwbGljYXRlIHNlc3Npb24gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIF9kdXBsaWNhdGVTZXNzaW9uRnJvbU1vZGFsKHBhdGgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvc2Vzc2lvbnMvZHVwbGljYXRlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBwYXRoIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBhd2FpdCBfcmVuZGVyU2Vzc2lvbnNNb2RhbEJvZHkoKTtcbiAgICAgIGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYFNlc3Npb24gZHVwbGljYXRlZDogXCIke2RhdGEubmV3X25hbWV9XCJgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHNob3dUb2FzdChgRmFpbGVkIHRvIGR1cGxpY2F0ZSBzZXNzaW9uOiAke2RhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWAsICdlcnJvcicpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkgeyBpZiAodHlwZW9mIHNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgc2hvd1RvYXN0KGBFcnJvcjogJHtlLm1lc3NhZ2V9YCwgJ2Vycm9yJyk7IH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFRyYXNoIGJhZGdlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBfcmVmcmVzaFRyYXNoQmFkZ2UoKSB7XG4gIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXNzaW9ucy10cmFzaC1idG4nKTtcbiAgaWYgKCFidG4pIHJldHVybjtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvdHJhc2gnKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBjb25zdCBuID0gKGRhdGEuaXRlbXMgfHwgW10pLmxlbmd0aDtcbiAgICBidG4udGV4dENvbnRlbnQgPSBuID4gMCA/IGBcdUQ4M0RcdURERDEgVHJhc2ggKCR7bn0pYCA6ICdcdUQ4M0RcdURERDEgVHJhc2gnO1xuICB9IGNhdGNoIChfKSB7IC8qIGlnbm9yZSAqLyB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBUcmFzaCB2aWV3IChpbmxpbmUgaW4gc2Vzc2lvbnMgbW9kYWwpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBvcGVuVHJhc2hWaWV3KCkge1xuICBjb25zdCBib2R5ICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Vzc2lvbnMtbW9kYWwtYm9keScpO1xuICBjb25zdCBmb290ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2Vzc2lvbnMtbW9kYWwtb3ZlcmxheSAubW9kYWwtZm9vdGVyJyk7XG4gIGlmICghYm9keSkgcmV0dXJuO1xuXG4gIGJvZHkuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O3BhZGRpbmc6MjRweDtjb2xvcjojNmI3MjgwO1wiPjxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyLXdpZHRoOjJweDtmbGV4LXNocmluazowO1wiPjwvZGl2PjxzcGFuPkxvYWRpbmcgdHJhc2hcdTIwMjY8L3NwYW4+PC9kaXY+JztcblxuICBpZiAoZm9vdGVyKSB7XG4gICAgZm9vdGVyLmlubmVySFRNTCA9IGBcbiAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cImVtcHR5VHJhc2goKVwiXG4gICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDojZmVlMmUyO2NvbG9yOiNkYzI2MjY7Ym9yZGVyLWNvbG9yOiNmZWNhY2E7XCI+RW1wdHkgVHJhc2g8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cImNsb3NlVHJhc2hWaWV3KClcIj5cdTIxOTAgQmFjazwvYnV0dG9uPmA7XG4gIH1cblxuICBhd2FpdCBfcmVuZGVyVHJhc2hWaWV3KCk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlVHJhc2hWaWV3KCkge1xuICBjb25zdCBmb290ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2Vzc2lvbnMtbW9kYWwtb3ZlcmxheSAubW9kYWwtZm9vdGVyJyk7XG4gIGlmIChmb290ZXIpIHtcbiAgICBmb290ZXIuaW5uZXJIVE1MID0gYFxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwibmV3U2Vzc2lvbkZyb21Nb2RhbCgpXCJcbiAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiMxMGI5ODE7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6IzEwYjk4MTtcIj5cdUZGMEIgTmV3IFNlc3Npb248L2J1dHRvbj5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJzZXNzaW9ucy10cmFzaC1idG5cIiBjbGFzcz1cImFjdGlvbi1idG5cIlxuICAgICAgICAgIG9uY2xpY2s9XCJvcGVuVHJhc2hWaWV3KClcIlxuICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDojZjFmNWY5O2NvbG9yOiM2NDc0OGI7Ym9yZGVyLWNvbG9yOiNlMmU4ZjA7XCI+XHVEODNEXHVEREQxIFRyYXNoPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cImNsb3NlU2Vzc2lvbnNNb2RhbCgpXCI+Q2xvc2U8L2J1dHRvbj5cbiAgICAgIDwvZGl2PmA7XG4gIH1cbiAgX3JlbmRlclNlc3Npb25zTW9kYWxCb2R5KCk7XG4gIF9yZWZyZXNoVHJhc2hCYWRnZSgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVuZGVyVHJhc2hWaWV3KCkge1xuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nlc3Npb25zLW1vZGFsLWJvZHknKTtcbiAgaWYgKCFib2R5KSByZXR1cm47XG4gIGxldCBpdGVtcyA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS90cmFzaCcpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGl0ZW1zID0gZGF0YS5pdGVtcyB8fCBbXTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGJvZHkuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwicGFkZGluZzoyMHB4O2NvbG9yOiNlZjQ0NDQ7XCI+Q291bGQgbm90IGxvYWQgdHJhc2g6ICR7ZXNjYXBlSHRtbChlLm1lc3NhZ2UpfTwvcD5gO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgYm9keS5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJwYWRkaW5nOjI0cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzZiNzI4MDtcIj5UcmFzaCBpcyBlbXB0eS48L3A+JztcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiBmbXREYXRlKHRzKSB7XG4gICAgaWYgKCF0cykgcmV0dXJuICcnO1xuICAgIHRyeSB7IHJldHVybiBuZXcgRGF0ZSh0cykudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHsgbW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCB5ZWFyOiAnbnVtZXJpYycgfSk7IH1cbiAgICBjYXRjaCB7IHJldHVybiB0cy5zbGljZSgwLCAxMCk7IH1cbiAgfVxuXG4gIGxldCBodG1sID0gJzx0YWJsZSBzdHlsZT1cIndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO1wiPic7XG4gIGl0ZW1zLmZvckVhY2gocyA9PiB7XG4gICAgY29uc3QgZXAgPSBlc2NhcGVIdG1sKHMucGF0aCk7XG4gICAgaHRtbCArPSBgXG4gICAgICA8dHIgc3R5bGU9XCJib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjFmNWY5O3ZlcnRpY2FsLWFsaWduOnRvcDtcIj5cbiAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzoxMnB4IDE2cHg7XCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMWUyOTNiO1wiPiR7ZXNjYXBlSHRtbChzLnBvc2l0aW9uX25hbWUgfHwgJ1VudGl0bGVkJyl9PC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5NGEzYjg7bWFyZ2luLXRvcDoycHg7XCI+JHtmbXREYXRlKHMudGltZXN0YW1wKX0ke3MucGhhc2UgPyAnIFx1MDBCNyAnICsgZXNjYXBlSHRtbChzLnBoYXNlKSA6ICcnfTwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjEycHggMTZweDt3aGl0ZS1zcGFjZTpub3dyYXA7dmVydGljYWwtYWxpZ246bWlkZGxlO1wiPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjZweDtcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS10cmFzaC1hY3Rpb249XCJyZXN0b3JlXCIgZGF0YS10cmFzaC1wYXRoPVwiJHtlcH1cIlxuICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6I2RiZWFmZTtjb2xvcjojMWQ0ZWQ4O2JvcmRlcjoxcHggc29saWQgI2JmZGJmZTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjZweCAxMnB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcjtcIj5SZXN0b3JlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGRhdGEtdHJhc2gtYWN0aW9uPVwiZGVsZXRlLWZvcmV2ZXJcIiBkYXRhLXRyYXNoLXBhdGg9XCIke2VwfVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDojZmVlMmUyO2NvbG9yOiNkYzI2MjY7Ym9yZGVyOjFweCBzb2xpZCAjZmVjYWNhO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6NnB4IDhweDtmb250LXNpemU6MTNweDtjdXJzb3I6cG9pbnRlcjtcIiB0aXRsZT1cIkRlbGV0ZSBwZXJtYW5lbnRseVwiIGFyaWEtbGFiZWw9XCJEZWxldGUgcGVybWFuZW50bHlcIj5cdTI3MTU8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+YDtcbiAgfSk7XG4gIGh0bWwgKz0gJzwvdGFibGU+JztcbiAgY29uc3QgdHJhc2hXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHRyYXNoV3JhcHBlci5pbm5lckhUTUwgPSBodG1sO1xuICBib2R5LmlubmVySFRNTCA9ICcnO1xuICBib2R5LmFwcGVuZENoaWxkKHRyYXNoV3JhcHBlcik7XG4gIC8vIFdpcmUgdXAgdHJhc2ggYWN0aW9uIGJ1dHRvbnMgdmlhIGV2ZW50IGRlbGVnYXRpb25cbiAgdHJhc2hXcmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XG4gICAgY29uc3QgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtdHJhc2gtYWN0aW9uXScpO1xuICAgIGlmICghYnRuKSByZXR1cm47XG4gICAgY29uc3QgcGF0aCAgID0gYnRuLmRhdGFzZXQudHJhc2hQYXRoO1xuICAgIGNvbnN0IGFjdGlvbiA9IGJ0bi5kYXRhc2V0LnRyYXNoQWN0aW9uO1xuICAgIGlmICAgICAgKGFjdGlvbiA9PT0gJ3Jlc3RvcmUnKSAgICAgICAgcmVzdG9yZUZyb21UcmFzaChwYXRoKTtcbiAgICBlbHNlIGlmIChhY3Rpb24gPT09ICdkZWxldGUtZm9yZXZlcicpIGRlbGV0ZUZvcmV2ZXIocGF0aCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXN0b3JlRnJvbVRyYXNoKHBhdGgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvdHJhc2gvcmVzdG9yZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcGF0aCB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5zdWNjZXNzKSB7IGF3YWl0IF9yZW5kZXJUcmFzaFZpZXcoKTsgYXdhaXQgX3JlZnJlc2hUcmFzaEJhZGdlKCk7IH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYFJlc3RvcmUgZmFpbGVkOiAke2RhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWAsICdlcnJvcicpO1xuICB9IGNhdGNoIChlKSB7IGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYEVycm9yOiAke2UubWVzc2FnZX1gLCAnZXJyb3InKTsgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVGb3JldmVyKHBhdGgpIHtcbiAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgY29uZmlybURpYWxvZyhcbiAgICAnUGVybWFuZW50bHkgZGVsZXRlIHRoaXMgc2Vzc2lvbj8gVGhpcyBjYW5ub3QgYmUgdW5kb25lLicsXG4gICAgeyBjb25maXJtTGFiZWw6ICdEZWxldGUgRm9yZXZlcicsIGNhbmNlbExhYmVsOiAnQ2FuY2VsJywgZGFuZ2VyOiB0cnVlIH1cbiAgKTtcbiAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvdHJhc2gvZGVsZXRlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBwYXRoIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHsgYXdhaXQgX3JlbmRlclRyYXNoVmlldygpOyBhd2FpdCBfcmVmcmVzaFRyYXNoQmFkZ2UoKTsgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHNob3dUb2FzdChgRGVsZXRlIGZhaWxlZDogJHtkYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJ31gLCAnZXJyb3InKTtcbiAgfSBjYXRjaCAoZSkgeyBpZiAodHlwZW9mIHNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgc2hvd1RvYXN0KGBFcnJvcjogJHtlLm1lc3NhZ2V9YCwgJ2Vycm9yJyk7IH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZW1wdHlUcmFzaCgpIHtcbiAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgY29uZmlybURpYWxvZyhcbiAgICAnUGVybWFuZW50bHkgZGVsZXRlIGFsbCBpdGVtcyBpbiBUcmFzaD8gVGhpcyBjYW5ub3QgYmUgdW5kb25lLicsXG4gICAgeyBjb25maXJtTGFiZWw6ICdFbXB0eSBUcmFzaCcsIGNhbmNlbExhYmVsOiAnQ2FuY2VsJywgZGFuZ2VyOiB0cnVlIH1cbiAgKTtcbiAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvdHJhc2gvZW1wdHknLCB7IG1ldGhvZDogJ1BPU1QnIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHsgYXdhaXQgX3JlbmRlclRyYXNoVmlldygpOyBhd2FpdCBfcmVmcmVzaFRyYXNoQmFkZ2UoKTsgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHNob3dUb2FzdChgRmFpbGVkIHRvIGVtcHR5IHRyYXNoOiAke2RhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWAsICdlcnJvcicpO1xuICB9IGNhdGNoIChlKSB7IGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYEVycm9yOiAke2UubWVzc2FnZX1gLCAnZXJyb3InKTsgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgRXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHtcbiAgX3JlbmRlckFjdGl2ZVNlc3Npb25Sb3dzLFxuICBfcmVuZGVyU2F2ZWRTZXNzaW9uUm93cyxcbiAgX3JlbmRlclNlc3Npb25Td2l0Y2hlclNlY3Rpb25zLFxuICBfdXBkYXRlU2Vzc2lvblN3aXRjaGVySGVhZGVyLFxuICBzaG93T3duZXJzaGlwQ29uZmxpY3REaWFsb2csXG4gIGNsb3NlT3duZXJzaGlwQ29uZmxpY3REaWFsb2csXG4gIG9wZW5TZXNzaW9uc01vZGFsLFxuICBjbG9zZVNlc3Npb25zTW9kYWwsXG4gIF9yZW5kZXJTZXNzaW9uc01vZGFsQm9keSxcbiAgbG9hZFNlc3Npb25BbmRDbG9zZU1vZGFsLFxuICBuZXdTZXNzaW9uRnJvbU1vZGFsLFxuICBzdGFydFNlc3Npb25Nb2RhbFJlbmFtZSxcbiAgY2FuY2VsU2Vzc2lvbk1vZGFsUmVuYW1lLFxuICBzdWJtaXRTZXNzaW9uTW9kYWxSZW5hbWUsXG4gIF9kZWxldGVTZXNzaW9uRnJvbU1vZGFsLFxuICBfZHVwbGljYXRlU2Vzc2lvbkZyb21Nb2RhbCxcbiAgX3JlZnJlc2hUcmFzaEJhZGdlLFxuICBvcGVuVHJhc2hWaWV3LFxuICBjbG9zZVRyYXNoVmlldyxcbiAgX3JlbmRlclRyYXNoVmlldyxcbiAgcmVzdG9yZUZyb21UcmFzaCxcbiAgZGVsZXRlRm9yZXZlcixcbiAgZW1wdHlUcmFzaCxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9rZXlib2FyZC1zaG9ydGN1dHMuanMgXHUyMDE0IEdsb2JhbCBrZXlib2FyZCBzaG9ydGN1dHMgZm9yIHdvcmtmbG93IG5hdmlnYXRpb24uXG4gKlxuICogU2hvcnRjdXRzIGltcGxlbWVudGVkOlxuICogICBDdHJsK0VudGVyICAgICAgIFRyaWdnZXIgdGhlIHByaW1hcnkgYWN0aW9uIGJ1dHRvbiBvbiB0aGUgY3VycmVudCB0YWJcbiAqICAgQ3RybCtTaGlmdCtSICAgICBSZS1ydW4gdGhlIGN1cnJlbnQgd29ya2Zsb3cgcGhhc2UgKGNhbGxzIGNvbmZpcm1SZVJ1blBoYXNlKVxuICogICBBICAgICAgICAgICAgICAgIEFjY2VwdCB0aGUgZm9jdXNlZCByZXZpZXcgY2FyZCAocmV3cml0ZSAvIHNwZWxsLWNoZWNrIHRhYnMpXG4gKiAgIFIgICAgICAgICAgICAgICAgUmVqZWN0IHRoZSBmb2N1c2VkIHJldmlldyBjYXJkIChyZXdyaXRlIC8gc3BlbGwtY2hlY2sgdGFicylcbiAqICAgXHUyMTkxIC8gXHUyMTkzICAgICAgICAgICAgTmF2aWdhdGUgYmV0d2VlbiByZXZpZXcgY2FyZHMgb24gcmV2aWV3IHRhYnNcbiAqICAgQ3RybCtaICAgICAgICAgICBVbmRvIHRoZSBtb3N0IHJlY2VudCBNYXN0ZXIgQ1YgZGF0YSBjaGFuZ2UgKE1hc3RlciBDViBtb2RhbCBvbmx5KVxuICogICBDdHJsK1NoaWZ0K1ogICAgIFJlZG8gdGhlIHByZXZpb3VzbHkgdW5kb25lIE1hc3RlciBDViBkYXRhIGNoYW5nZSAoTWFzdGVyIENWIG1vZGFsIG9ubHkpXG4gKiAgID8gICAgICAgICAgICAgICAgVG9nZ2xlIGtleWJvYXJkIHNob3J0Y3V0IGhlbHAgcGFuZWxcbiAqL1xuXG4vKiogVHJhY2sgd2hpY2ggY2FyZCBpcyBrZXlib2FyZC1mb2N1c2VkIG9uIHRoZSBjdXJyZW50IHJldmlldyB0YWIuICovXG5sZXQgX2ZvY3VzZWRDYXJkSW5kZXggPSAtMTtcblxuLyoqIFJldHVybnMgdHJ1ZSBpZiBmb2N1cyBpcyBpbnNpZGUgYSB0ZXh0IGlucHV0LCBzbyBBL1IvXHUyMTkxL1x1MjE5MyBzaG91bGQgbm90IGZpcmUuICovXG5mdW5jdGlvbiBfaW5UZXh0SW5wdXQoKSB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgaWYgKCFlbCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB0YWcgPSBlbC50YWdOYW1lO1xuICByZXR1cm4gdGFnID09PSAnSU5QVVQnIHx8IHRhZyA9PT0gJ1RFWFRBUkVBJyB8fCB0YWcgPT09ICdTRUxFQ1QnIHx8IGVsLmlzQ29udGVudEVkaXRhYmxlO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIGFueSBtb2RhbCBvdmVybGF5IGlzIGN1cnJlbnRseSB2aXNpYmxlLiAqL1xuZnVuY3Rpb24gX21vZGFsT3BlbigpIHtcbiAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPVwiZGlhbG9nXCJdOm5vdChbc3R5bGUqPVwiZGlzcGxheTogbm9uZVwiXSk6bm90KFtzdHlsZSo9XCJkaXNwbGF5Om5vbmVcIl0pJykgIT09IG51bGw7XG59XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIE1hc3RlciBDViBtb2RhbCAod2ViL2luZGV4Lmh0bWwjbWFzdGVyLWN2LW1vZGFsLW92ZXJsYXkpIGlzIG9wZW4uICovXG5mdW5jdGlvbiBfbWFzdGVyQ3ZNb2RhbE9wZW4oKSB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1jdi1tb2RhbC1vdmVybGF5Jyk7XG4gIHJldHVybiAhIWVsICYmIGVsLnN0eWxlLmRpc3BsYXkgIT09ICdub25lJztcbn1cblxuLyoqXG4gKiBNYXAgdGFiIElEcyB0byB0aGVpciBwcmltYXJ5IGFjdGlvbiBidXR0b24gSURzLlxuICogQnV0dG9ucyB0aGF0IG1pZ2h0IGJlIGRpc2FibGVkIGF0IHJ1bnRpbWUgYXJlIHN0aWxsIGNsaWNrZWQgXHUyMDE0IHRoZSBidXR0b24nc1xuICogb3duIGRpc2FibGVkIGNoZWNrIHByZXZlbnRzIGFjY2lkZW50YWwgc3VibWlzc2lvbi5cbiAqL1xuY29uc3QgX1RBQl9BQ1RJT05fQlROID0ge1xuICAnam9iJzogICAgICAgICAgICAgICAgICAgJ3NlbmQtYnRuJyxcbiAgJ2FuYWx5c2lzJzogICAgICAgICAgICAgICdhbmFseXplLWJ0bicsXG4gICdnb2Fscyc6ICAgICAgICAgICAgICAgICAncmVjb21tZW5kLWJ0bicsXG4gICdyZXdyaXRlJzogICAgICAgICAgICAgICAncmV3cml0ZS1idG4nLFxuICAnc3BlbGwnOiAgICAgICAgICAgICAgICAgJ3NwZWxsLWJ0bicsXG4gICdmaW5hbF9nZW5lcmF0ZSc6ICAgICAgICAnZ2VuZXJhdGUtYnRuJyxcbiAgJ2xheW91dCc6ICAgICAgICAgICAgICAgICdsYXlvdXQtYnRuJyxcbiAgJ2Rvd25sb2FkJzogICAgICAgICAgICAgICdmaW5hbC1nZW5lcmF0ZS1wcm9jZWVkLWJ0bicsXG4gICdmaW5hbGlzZSc6ICAgICAgICAgICAgICAnZmluYWxpc2UtYWN0aW9uLWJ0bicsXG59O1xuXG4vKiogQ2xpY2sgdGhlIHByaW1hcnkgYWN0aW9uIGJ1dHRvbiBmb3IgdGhlIGN1cnJlbnQgdGFiIChDdHJsK0VudGVyKS4gKi9cbmZ1bmN0aW9uIF90cmlnZ2VyUHJpbWFyeUFjdGlvbigpIHtcbiAgY29uc3QgdGFiID0gdHlwZW9mIHN0YXRlTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcgPyBzdGF0ZU1hbmFnZXIuZ2V0Q3VycmVudFRhYigpIDogbnVsbDtcbiAgaWYgKCF0YWIpIHJldHVybjtcbiAgY29uc3QgYnRuSWQgPSBfVEFCX0FDVElPTl9CVE5bdGFiXTtcbiAgaWYgKCFidG5JZCkgcmV0dXJuO1xuICBjb25zdCBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidG5JZCk7XG4gIGlmIChidG4gJiYgIWJ0bi5kaXNhYmxlZCkgYnRuLmNsaWNrKCk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBDYXJkIG5hdmlnYXRpb24gaGVscGVycyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqIFJldHVybiB2aXNpYmxlIHJldmlldyBjYXJkcyBmb3IgdGhlIGN1cnJlbnQgdGFiLiAqL1xuZnVuY3Rpb24gX2dldENhcmRzKCkge1xuICBjb25zdCB0YWIgPSB0eXBlb2Ygc3RhdGVNYW5hZ2VyICE9PSAndW5kZWZpbmVkJyA/IHN0YXRlTWFuYWdlci5nZXRDdXJyZW50VGFiKCkgOiBudWxsO1xuICBpZiAodGFiID09PSAncmV3cml0ZScpIHJldHVybiBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJld3JpdGUtY2FyZCcpXTtcbiAgaWYgKHRhYiA9PT0gJ3NwZWxsJykgICByZXR1cm4gWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zcGVsbC1jYXJkJyldO1xuICByZXR1cm4gW107XG59XG5cbi8qKiBWaXN1YWxseSBoaWdobGlnaHQgYSBjYXJkIGFzIGtleWJvYXJkLWZvY3VzZWQuICovXG5mdW5jdGlvbiBfaGlnaGxpZ2h0Q2FyZChjYXJkcywgaWR4KSB7XG4gIGNhcmRzLmZvckVhY2goKGMsIGkpID0+IHtcbiAgICBpZiAoaSA9PT0gaWR4KSB7XG4gICAgICBjLmNsYXNzTGlzdC5hZGQoJ2tiLWZvY3VzZWQnKTtcbiAgICAgIGMuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGMuY2xhc3NMaXN0LnJlbW92ZSgna2ItZm9jdXNlZCcpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKiBNb3ZlIHRoZSBrZXlib2FyZCBmb2N1cyB0byBjYXJkIGF0IGRlbHRhIG9mZnNldCBmcm9tIGN1cnJlbnQuICovXG5mdW5jdGlvbiBfbW92ZUNhcmRGb2N1cyhkZWx0YSkge1xuICBjb25zdCBjYXJkcyA9IF9nZXRDYXJkcygpO1xuICBpZiAoIWNhcmRzLmxlbmd0aCkgcmV0dXJuO1xuICBfZm9jdXNlZENhcmRJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNhcmRzLmxlbmd0aCAtIDEsIF9mb2N1c2VkQ2FyZEluZGV4ICsgZGVsdGEpKTtcbiAgX2hpZ2hsaWdodENhcmQoY2FyZHMsIF9mb2N1c2VkQ2FyZEluZGV4KTtcbn1cblxuLyoqIEFjY2VwdCB0aGUgY3VycmVudGx5IGtleWJvYXJkLWZvY3VzZWQgcmV3cml0ZSBjYXJkLiAqL1xuZnVuY3Rpb24gX2FjY2VwdEZvY3VzZWRDYXJkKCkge1xuICBjb25zdCB0YWIgPSB0eXBlb2Ygc3RhdGVNYW5hZ2VyICE9PSAndW5kZWZpbmVkJyA/IHN0YXRlTWFuYWdlci5nZXRDdXJyZW50VGFiKCkgOiBudWxsO1xuICBpZiAodGFiID09PSAncmV3cml0ZScpIHtcbiAgICBjb25zdCBjYXJkcyA9IF9nZXRDYXJkcygpO1xuICAgIGlmIChfZm9jdXNlZENhcmRJbmRleCA8IDAgfHwgX2ZvY3VzZWRDYXJkSW5kZXggPj0gY2FyZHMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgY2FyZCA9IGNhcmRzW19mb2N1c2VkQ2FyZEluZGV4XTtcbiAgICBjb25zdCBpZCA9IGNhcmQuaWQucmVwbGFjZSgncnctY2FyZC0nLCAnJyk7XG4gICAgaWYgKHR5cGVvZiBhcHBseVJld3JpdGVBY3Rpb24gPT09ICdmdW5jdGlvbicpIGFwcGx5UmV3cml0ZUFjdGlvbihpZCwgJ2FjY2VwdCcpO1xuICB9IGVsc2UgaWYgKHRhYiA9PT0gJ3NwZWxsJykge1xuICAgIGNvbnN0IGNhcmRzID0gX2dldENhcmRzKCk7XG4gICAgaWYgKF9mb2N1c2VkQ2FyZEluZGV4IDwgMCB8fCBfZm9jdXNlZENhcmRJbmRleCA+PSBjYXJkcy5sZW5ndGgpIHJldHVybjtcbiAgICAvLyBzcGVsbCBjYXJkczogZmluZCB0aGUgYWNjZXB0IGJ1dHRvbiB3aXRoaW4gdGhlIGZvY3VzZWQgY2FyZFxuICAgIGNvbnN0IGJ0biA9IGNhcmRzW19mb2N1c2VkQ2FyZEluZGV4XS5xdWVyeVNlbGVjdG9yKCdbZGF0YS1hY3Rpb249XCJrZWVwXCJdLCAuc3BlbGwta2VlcC1idG4nKTtcbiAgICBpZiAoYnRuKSBidG4uY2xpY2soKTtcbiAgfVxufVxuXG4vKiogUmVqZWN0IHRoZSBjdXJyZW50bHkga2V5Ym9hcmQtZm9jdXNlZCByZXZpZXcgY2FyZC4gKi9cbmZ1bmN0aW9uIF9yZWplY3RGb2N1c2VkQ2FyZCgpIHtcbiAgY29uc3QgdGFiID0gdHlwZW9mIHN0YXRlTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcgPyBzdGF0ZU1hbmFnZXIuZ2V0Q3VycmVudFRhYigpIDogbnVsbDtcbiAgaWYgKHRhYiA9PT0gJ3Jld3JpdGUnKSB7XG4gICAgY29uc3QgY2FyZHMgPSBfZ2V0Q2FyZHMoKTtcbiAgICBpZiAoX2ZvY3VzZWRDYXJkSW5kZXggPCAwIHx8IF9mb2N1c2VkQ2FyZEluZGV4ID49IGNhcmRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IGNhcmQgPSBjYXJkc1tfZm9jdXNlZENhcmRJbmRleF07XG4gICAgY29uc3QgaWQgPSBjYXJkLmlkLnJlcGxhY2UoJ3J3LWNhcmQtJywgJycpO1xuICAgIGlmICh0eXBlb2YgYXBwbHlSZXdyaXRlQWN0aW9uID09PSAnZnVuY3Rpb24nKSBhcHBseVJld3JpdGVBY3Rpb24oaWQsICdyZWplY3QnKTtcbiAgfSBlbHNlIGlmICh0YWIgPT09ICdzcGVsbCcpIHtcbiAgICBjb25zdCBjYXJkcyA9IF9nZXRDYXJkcygpO1xuICAgIGlmIChfZm9jdXNlZENhcmRJbmRleCA8IDAgfHwgX2ZvY3VzZWRDYXJkSW5kZXggPj0gY2FyZHMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgYnRuID0gY2FyZHNbX2ZvY3VzZWRDYXJkSW5kZXhdLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWFjdGlvbj1cImFwcGx5XCJdLCAuc3BlbGwtYXBwbHktYnRuJyk7XG4gICAgaWYgKGJ0bikgYnRuLmNsaWNrKCk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFNob3J0Y3V0IGhlbHAgcGFuZWwgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmNvbnN0IF9QQU5FTF9JRCA9ICdrYi1zaG9ydGN1dHMtcGFuZWwnO1xuXG4vKiogVG9nZ2xlIHRoZSBrZXlib2FyZCBzaG9ydGN1dCBoZWxwIHBhbmVsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dLZXlib2FyZFNob3J0Y3V0c1BhbmVsKCkge1xuICBjb25zdCBleGlzdGluZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKF9QQU5FTF9JRCk7XG4gIGlmIChleGlzdGluZykgeyBleGlzdGluZy5yZW1vdmUoKTsgcmV0dXJuOyB9XG5cbiAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcGFuZWwuaWQgPSBfUEFORUxfSUQ7XG4gIHBhbmVsLnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKTtcbiAgcGFuZWwuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgJ3RydWUnKTtcbiAgcGFuZWwuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0tleWJvYXJkIHNob3J0Y3V0cycpO1xuICBwYW5lbC5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBpZD1cImtiLXNob3J0Y3V0cy1pbm5lclwiPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxMnB4XCI+XG4gICAgICAgIDxzdHJvbmc+S2V5Ym9hcmQgU2hvcnRjdXRzPC9zdHJvbmc+XG4gICAgICAgIDxidXR0b24gaWQ9XCJrYi1zaG9ydGN1dHMtY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2Uga2V5Ym9hcmQgc2hvcnRjdXRzXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjEuMmVtO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6MnB4IDZweFwiPlx1MjcxNTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8dGFibGUgc3R5bGU9XCJib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7d2lkdGg6MTAwJVwiPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyPjx0ZCBzdHlsZT1cInBhZGRpbmc6NHB4IDEycHggNHB4IDBcIj48a2JkPkN0cmw8L2tiZD4rPGtiZD5FbnRlcjwva2JkPjwvdGQ+PHRkPlRyaWdnZXIgcHJpbWFyeSBhY3Rpb24gb24gY3VycmVudCBzdGVwPC90ZD48L3RyPlxuICAgICAgICAgIDx0cj48dGQgc3R5bGU9XCJwYWRkaW5nOjRweCAxMnB4IDRweCAwXCI+PGtiZD5DdHJsPC9rYmQ+KzxrYmQ+U2hpZnQ8L2tiZD4rPGtiZD5SPC9rYmQ+PC90ZD48dGQ+UmUtcnVuIGN1cnJlbnQgd29ya2Zsb3cgcGhhc2U8L3RkPjwvdHI+XG4gICAgICAgICAgPHRyPjx0ZCBzdHlsZT1cInBhZGRpbmc6NHB4IDEycHggNHB4IDBcIj48a2JkPlx1MjE5MTwva2JkPiAvIDxrYmQ+XHUyMTkzPC9rYmQ+PC90ZD48dGQ+TmF2aWdhdGUgYmV0d2VlbiByZXZpZXcgY2FyZHM8L3RkPjwvdHI+XG4gICAgICAgICAgPHRyPjx0ZCBzdHlsZT1cInBhZGRpbmc6NHB4IDEycHggNHB4IDBcIj48a2JkPkE8L2tiZD48L3RkPjx0ZD5BY2NlcHQgZm9jdXNlZCBjYXJkIChyZXdyaXRlIC8gc3BlbGwpPC90ZD48L3RyPlxuICAgICAgICAgIDx0cj48dGQgc3R5bGU9XCJwYWRkaW5nOjRweCAxMnB4IDRweCAwXCI+PGtiZD5SPC9rYmQ+PC90ZD48dGQ+UmVqZWN0IGZvY3VzZWQgY2FyZCAocmV3cml0ZSAvIHNwZWxsKTwvdGQ+PC90cj5cbiAgICAgICAgICA8dHI+PHRkIHN0eWxlPVwicGFkZGluZzo0cHggMTJweCA0cHggMFwiPjxrYmQ+Q3RybDwva2JkPis8a2JkPlo8L2tiZD48L3RkPjx0ZD5VbmRvIE1hc3RlciBDViBjaGFuZ2UgKE1hc3RlciBDViBtb2RhbCk8L3RkPjwvdHI+XG4gICAgICAgICAgPHRyPjx0ZCBzdHlsZT1cInBhZGRpbmc6NHB4IDEycHggNHB4IDBcIj48a2JkPkN0cmw8L2tiZD4rPGtiZD5TaGlmdDwva2JkPis8a2JkPlo8L2tiZD48L3RkPjx0ZD5SZWRvIE1hc3RlciBDViBjaGFuZ2UgKE1hc3RlciBDViBtb2RhbCk8L3RkPjwvdHI+XG4gICAgICAgICAgPHRyPjx0ZCBzdHlsZT1cInBhZGRpbmc6NHB4IDEycHggNHB4IDBcIj48a2JkPj88L2tiZD48L3RkPjx0ZD5Ub2dnbGUgdGhpcyBoZWxwIHBhbmVsPC90ZD48L3RyPlxuICAgICAgICAgIDx0cj48dGQgc3R5bGU9XCJwYWRkaW5nOjRweCAxMnB4IDRweCAwXCI+PGtiZD5Fc2M8L2tiZD48L3RkPjx0ZD5DbG9zZSBtb2RhbHMgLyB0aGlzIHBhbmVsPC90ZD48L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5gO1xuICBPYmplY3QuYXNzaWduKHBhbmVsLnN0eWxlLCB7XG4gICAgcG9zaXRpb246ICAgJ2ZpeGVkJyxcbiAgICBib3R0b206ICAgICAnODBweCcsXG4gICAgcmlnaHQ6ICAgICAgJzI0cHgnLFxuICAgIGJhY2tncm91bmQ6ICcjMWYyOTM3JyxcbiAgICBjb2xvcjogICAgICAnI2Y5ZmFmYicsXG4gICAgYm9yZGVyOiAgICAgJzFweCBzb2xpZCAjMzc0MTUxJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIHBhZGRpbmc6ICAgICcxNnB4IDIwcHgnLFxuICAgIHpJbmRleDogICAgICcxMDAwMCcsXG4gICAgZm9udFNpemU6ICAgJzAuODVlbScsXG4gICAgbWluV2lkdGg6ICAgJzM0MHB4JyxcbiAgICBib3hTaGFkb3c6ICAnMCA0cHggMjBweCByZ2JhKDAsMCwwLDAuNSknLFxuICB9KTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwYW5lbCk7XG4gIHBhbmVsLnF1ZXJ5U2VsZWN0b3IoJyNrYi1zaG9ydGN1dHMtY2xvc2UnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHBhbmVsLnJlbW92ZSgpKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFJlc2V0IGNhcmQgZm9jdXMgd2hlbiB0YWIgY2hhbmdlcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqIENhbGxlZCB3aGVuZXZlciB0aGUgYWN0aXZlIHRhYiBjaGFuZ2VzIHNvIGNhcmQgZm9jdXMgcmVzZXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0Q2FyZEZvY3VzKCkge1xuICBfZm9jdXNlZENhcmRJbmRleCA9IC0xO1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcua2ItZm9jdXNlZCcpLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZSgna2ItZm9jdXNlZCcpKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEdsb2JhbCBrZXlkb3duIGhhbmRsZXIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIF9vbktleURvd24oZSkge1xuICAvLyBDdHJsK0VudGVyIFx1MjE5MiBwcmltYXJ5IGFjdGlvbiAoYWx3YXlzLCBldmVuIGluIHRleHQgaW5wdXRzIHdoZW4gdGhlIG1haW5cbiAgLy8gc2VuZC1ib3ggaXMgZm9jdXNlZCwgdG8gbWF0Y2ggdGhlIGV4aXN0aW5nIEVudGVyIGJlaGF2aW91ciB0aGVyZSkuXG4gIGlmIChlLmN0cmxLZXkgJiYgZS5rZXkgPT09ICdFbnRlcicpIHtcbiAgICBfdHJpZ2dlclByaW1hcnlBY3Rpb24oKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDdHJsK1NoaWZ0K1IgXHUyMTkyIHJlLXJ1biBjdXJyZW50IHBoYXNlXG4gIGlmIChlLmN0cmxLZXkgJiYgZS5zaGlmdEtleSAmJiBlLmtleSA9PT0gJ1InKSB7XG4gICAgY29uc3QgYWN0aXZlRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWRePVwic3RlcC1cIl0uYWN0aXZlJyk7XG4gICAgY29uc3Qgc3RlcCA9IGFjdGl2ZUVsID8gYWN0aXZlRWwuaWQucmVwbGFjZSgnc3RlcC0nLCAnJykgOiBudWxsO1xuICAgIGlmIChzdGVwICYmIHR5cGVvZiBjb25maXJtUmVSdW5QaGFzZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uZmlybVJlUnVuUGhhc2Uoc3RlcCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEN0cmwrWiAvIEN0cmwrU2hpZnQrWiBcdTIxOTIgdW5kby9yZWRvIHRoZSBtb3N0IHJlY2VudCBNYXN0ZXIgQ1YgZGF0YSBjaGFuZ2UuXG4gIC8vIFNjb3BlZCB0byB3aGVuIHRoZSBNYXN0ZXIgQ1YgbW9kYWwgaXMgb3BlbiBcdTIwMTQgYW5kIG5vIG5lc3RlZCBzdWItbW9kYWxcbiAgLy8gKGUuZy4gdGhlIGJhY2t1cC1oaXN0b3J5IGJyb3dzZXIpIGlzIHN0YWNrZWQgb24gdG9wIG9mIGl0IFx1MjAxNCBhbmQgZm9jdXNcbiAgLy8gaXNuJ3QgaW4gYSB0ZXh0IGZpZWxkLCBzaW5jZSBDdHJsK1ogaW5zaWRlIGEgdGV4dGFyZWEgbXVzdCBzdGlsbCBwZXJmb3JtXG4gIC8vIG5hdGl2ZSB0ZXh0LXVuZG8gcmF0aGVyIHRoYW4gYmVpbmcgaGlqYWNrZWQgYnkgdGhpcyBzaG9ydGN1dC5cbiAgaWYgKGUuY3RybEtleSAmJiAhZS5hbHRLZXkgJiYgKGUua2V5ID09PSAneicgfHwgZS5rZXkgPT09ICdaJylcbiAgICAgICYmIF9tYXN0ZXJDdk1vZGFsT3BlbigpICYmICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFja3VwLWhpc3Rvcnktb3ZlcmxheScpXG4gICAgICAmJiAhX2luVGV4dElucHV0KCkpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVkb01hc3RlckRhdGFDaGFuZ2UgPT09ICdmdW5jdGlvbicpIHJlZG9NYXN0ZXJEYXRhQ2hhbmdlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgdW5kb01hc3RlckRhdGFDaGFuZ2UgPT09ICdmdW5jdGlvbicpIHVuZG9NYXN0ZXJEYXRhQ2hhbmdlKCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEFsbCBzaW5nbGUta2V5IHNob3J0Y3V0cyBhcmUgc3VwcHJlc3NlZCB3aGVuIHR5cGluZyBpbnRvIGFuIGlucHV0LlxuICBpZiAoX2luVGV4dElucHV0KCkpIHJldHVybjtcbiAgLy8gQWxsIHNpbmdsZS1rZXkgc2hvcnRjdXRzIGFyZSBzdXBwcmVzc2VkIHdoZW4gYSBtb2RhbCBkaWFsb2cgaXMgb3BlbixcbiAgLy8gZXhjZXB0IEVzY2FwZSAoaGFuZGxlZCBieSB1aS1jb3JlLmpzKS5cbiAgaWYgKF9tb2RhbE9wZW4oKSkgcmV0dXJuO1xuXG4gIHN3aXRjaCAoZS5rZXkpIHtcbiAgICBjYXNlICc/JzpcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHNob3dLZXlib2FyZFNob3J0Y3V0c1BhbmVsKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIF9tb3ZlQ2FyZEZvY3VzKC0xKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBfbW92ZUNhcmRGb2N1cygxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2EnOlxuICAgIGNhc2UgJ0EnOlxuICAgICAgX2FjY2VwdEZvY3VzZWRDYXJkKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyJzpcbiAgICBjYXNlICdSJzpcbiAgICAgIF9yZWplY3RGb2N1c2VkQ2FyZCgpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBJbml0aWFsaXNhdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBBdHRhY2ggdGhlIGdsb2JhbCBrZXlib2FyZC1zaG9ydGN1dCBsaXN0ZW5lci5cbiAqIENhbGxlZCBvbmNlIGZyb20gYXBwLmpzIGFmdGVyIERPTUNvbnRlbnRMb2FkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0S2V5Ym9hcmRTaG9ydGN1dHMoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBfb25LZXlEb3duKTtcbn1cbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8vIE9yY2hlc3RyYXRvciBlbnRyeS1wb2ludCBcdTIwMTQgYWxsIG1vZHVsZSBmdW5jdGlvbnMgYXJlIGV4cG9zZWQgYXMgZ2xvYmFscyBieSBidW5kbGUuanMuXG4vLyBOb3RlOiBhcHAuanMgaXMgYSBwbGFpbiBsZWdhY3kgc2NyaXB0IChub3QgYnVuZGxlZCkuIGxvZ2xldmVsIGlzIGF2YWlsYWJsZVxuLy8gdmlhIGdsb2JhbFRoaXMubG9nbGV2ZWwgKHNldCBieSBidW5kbGUuanMgd2hpY2ggaW5jbHVkZXMgd2ViL2xvZ2dlci5qcykuXG5jb25zdCBfYXBwTG9nID0gKHR5cGVvZiBsb2dsZXZlbCAhPT0gJ3VuZGVmaW5lZCcpID8gbG9nbGV2ZWwuZ2V0TG9nZ2VyKCdhcHAnKSA6IGNvbnNvbGU7XG4vLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSBpbml0KCkgYW5kIHRvcC1sZXZlbCBldmVudC13aXJpbmcgKFx1MjI2NCAzMDAgbGluZXMpLlxuXG5sZXQgX2xpc3RlbmVyc1JlZ2lzdGVyZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gX3NldENvbm5lY3Rpb25NZXNzYWdlKG1lc3NhZ2VOb2RlLCB0ZXh0LCBraW5kID0gJ2luZm8nKSB7XG4gIGlmICghbWVzc2FnZU5vZGUpIHJldHVybjtcbiAgY29uc3QgY29udGVudCA9IG1lc3NhZ2VOb2RlLnF1ZXJ5U2VsZWN0b3IoJy5jb250ZW50Jyk7XG4gIGlmICghY29udGVudCkgcmV0dXJuO1xuICBjb250ZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgY29udGVudC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gIGNvbnRlbnQuc3R5bGUucGFkZGluZyA9ICc2cHggMTBweCc7XG4gIGNvbnRlbnQuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzk5OXB4JztcbiAgY29udGVudC5zdHlsZS5mb250V2VpZ2h0ID0gJzYwMCc7XG4gIGNvbnRlbnQuc3R5bGUuZm9udFNpemUgPSAnMC44OGVtJztcbiAgY29udGVudC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNjYmQ1ZTEnO1xuICBpZiAoa2luZCA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgY29udGVudC5zdHlsZS5jb2xvciA9ICcjMTY2NTM0JztcbiAgICBjb250ZW50LnN0eWxlLmJhY2tncm91bmQgPSAnI2VjZmRmNSc7XG4gICAgY29udGVudC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjODZlZmFjJztcbiAgfSBlbHNlIGlmIChraW5kID09PSAnZXJyb3InKSB7XG4gICAgY29udGVudC5zdHlsZS5jb2xvciA9ICcjYjkxYzFjJztcbiAgICBjb250ZW50LnN0eWxlLmJhY2tncm91bmQgPSAnI2ZlZjJmMic7XG4gICAgY29udGVudC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjZmVjYWNhJztcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50LnN0eWxlLmNvbG9yID0gJyMxZTQwYWYnO1xuICAgIGNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZCA9ICcjZWZmNmZmJztcbiAgICBjb250ZW50LnN0eWxlLmJvcmRlckNvbG9yID0gJyNiZmRiZmUnO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluaXQoKSB7XG4gIC8vIEluaXRpYWxpemUgYWJvcnQgY29udHJvbGxlciB0byBudWxsIChzZXQgdG8gbmV3IEFib3J0Q29udHJvbGxlciBieSBzZXRMb2FkaW5nKHRydWUpKVxuICB3aW5kb3cuX2N1cnJlbnRBYm9ydENvbnRyb2xsZXIgPSBudWxsO1xuXG4gIC8vIEZsdXNoIGFueSBtZXNzYWdlcyB0aGF0IHdlcmUgcXVldWVkIGJlZm9yZSBET01Db250ZW50TG9hZGVkIChkZWZlbnNpdmUgXHUyMDE0IHNob3VsZCBiZSBlbXB0eSBpbiBwcmFjdGljZSkuXG4gIF9mbHVzaE1lc3NhZ2VRdWV1ZSgpO1xuXG4gIGNvbnN0IGhhc0FjdGl2ZVNlc3Npb24gPSBhd2FpdCBlbnN1cmVTZXNzaW9uQ29udGV4dCgpO1xuICBpZiAoIWhhc0FjdGl2ZVNlc3Npb24pIHtcbiAgICBjb25zdCBmYWlsZWRNZXNzYWdlID0gYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgJ1x1MjZBMFx1RkUwRiBDb3VsZCBub3QgZXN0YWJsaXNoIGEgc2Vzc2lvbi4gQ3JlYXRlIG9yIGxvYWQgYSBzZXNzaW9uIHRvIGNvbnRpbnVlLicpO1xuICAgIF9zZXRDb25uZWN0aW9uTWVzc2FnZShmYWlsZWRNZXNzYWdlLCAnXHUyNkEwXHVGRTBGIENvdWxkIG5vdCBlc3RhYmxpc2ggYSBzZXNzaW9uLiBDcmVhdGUgb3IgbG9hZCBhIHNlc3Npb24gdG8gY29udGludWUuJywgJ2Vycm9yJyk7XG4gICAgc2V0dXBFdmVudExpc3RlbmVycygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNob3cgd2VsY29tZS9vbmJvYXJkaW5nIG1vZGFsIG9uIGV2ZXJ5IHN0YXJ0dXAgdW50aWwgdXNlciBkaXNtaXNzZXMgaXQuXG4gIGF3YWl0IG1heWJlU2hvd1dlbGNvbWVNb2RhbCgpO1xuXG4gIC8vIFJlc3RvcmUgc2Vzc2lvbiBzdGF0ZSBmaXJzdFxuICBhd2FpdCByZXN0b3JlU2Vzc2lvbigpO1xuXG4gIC8vIFNob3cgY29ubmVjdGlvbiBzdGF0dXMgYWZ0ZXIgcmVzdG9yZVNlc3Npb24gc28gaXQgaXMgbm90IHJlbW92ZWQgYnkgaGlzdG9yeSByZXN0b3JlLlxuICBjb25zdCBjb25uZWN0aW9uTWVzc2FnZSA9IGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsICdcdUQ4M0RcdUREMDQgQ29ubmVjdGluZyB0byBDViBCdWlsZGVyLi4uJyk7XG4gIF9zZXRDb25uZWN0aW9uTWVzc2FnZShjb25uZWN0aW9uTWVzc2FnZSwgJ1x1RDgzRFx1REQwNCBDb25uZWN0aW5nIHRvIENWIEJ1aWxkZXIuLi4nLCAnaW5mbycpO1xuXG4gIC8vIFJlc3RvcmUgQVRTIGJhZGdlIGZyb20gY2FjaGVkIHNjb3JlIChpZiBhbnkpXG4gIHVwZGF0ZUF0c0JhZGdlKHN0YXRlTWFuYWdlci5nZXRBdHNTY29yZSgpKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSByZXN0XG4gIGF3YWl0IGZldGNoU3RhdHVzKCk7XG4gIGNvbnN0IGNvbm5lY3RlZE1lc3NhZ2UgPSBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHUyNzA1IENvbm5lY3Rpb24gc3VjY2Vzc2Z1bC4nKTtcbiAgX3NldENvbm5lY3Rpb25NZXNzYWdlKGNvbm5lY3RlZE1lc3NhZ2UsICdcdTI3MDUgQ29ubmVjdGlvbiBzdWNjZXNzZnVsLicsICdzdWNjZXNzJyk7XG4gIGlmIChzdGF0ZU1hbmFnZXIuZ2V0Q3VycmVudFRhYigpID09PSAnam9iJykgYXdhaXQgcG9wdWxhdGVKb2JUYWIoKTtcbiAgc2V0dXBFdmVudExpc3RlbmVycygpO1xuXG4gIC8vIFNldCB1cCBwZXJpb2RpYyBzdGF0ZSBzYXZpbmdcbiAgc2V0SW50ZXJ2YWwoc2F2ZVRhYkRhdGEsIDUwMDApOyAvLyBTYXZlIGV2ZXJ5IDUgc2Vjb25kc1xuXG4gIC8vIFNhdmUgc3RhdGUgYmVmb3JlIHBhZ2UgdW5sb2FkXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCAoKSA9PiB7XG4gICAgc2F2ZVRhYkRhdGEoKTtcbiAgICBjb25zdCBhY3RpdmVTZXNzaW9uSWQgPSBzdGF0ZU1hbmFnZXIuZ2V0U2Vzc2lvbklkKCk7XG4gICAgaWYgKGFjdGl2ZVNlc3Npb25JZCkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU3RvcmFnZUtleXMuU0VTU0lPTl9JRCwgYWN0aXZlU2Vzc2lvbklkKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFByb21wdCB1c2VyIHRvIGFuYWx5emUgaWYgYSBqb2IgZGVzY3JpcHRpb24gaXMgbG9hZGVkIGJ1dCBub3QgeWV0IGFuYWx5emVkLlxuICAvLyBEbyBOT1QgYXV0by1maXJlIFx1MjAxNCBhIHJldHVybmluZyB1c2VyIG1heSBoYXZlIGludGVudGlvbmFsbHkgbGVmdCBpdCB1bmFuYWx5emVkXG4gIC8vIChlLmcuIG1pZC1lZGl0KS4gTGV0IHRoZW0gY2xpY2sgQW5hbHlzZSBKb2IgZXhwbGljaXRseSAoR0FQLTI0OCkuXG4gIGlmICghc3RhdGVNYW5hZ2VyLmlzUmVjb25uZWN0aW5nKCkpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBmZXRjaFN0YXR1cygpO1xuICAgIGlmICghc3RhdHVzLl9lcnJvciAmJiBzdGF0dXMuam9iX2Rlc2NyaXB0aW9uICYmICFzdGF0dXMuam9iX2FuYWx5c2lzKSB7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHVEODNEXHVEQ0NCIEpvYiBkZXNjcmlwdGlvbiBkZXRlY3RlZCBcdTIwMTQgY2xpY2sgPHN0cm9uZz5BbmFseXNlIEpvYjwvc3Ryb25nPiB3aGVuIHJlYWR5IHRvIGJlZ2luLicpO1xuICAgICAgY29uc3QgYW5hbHl6ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbmFseXplLWJ0bicpO1xuICAgICAgaWYgKGFuYWx5emVCdG4pIHtcbiAgICAgICAgYW5hbHl6ZUJ0bi5zdHlsZS5vdXRsaW5lID0gJzJweCBzb2xpZCAjM2I4MmY2JztcbiAgICAgICAgYW5hbHl6ZUJ0bi5zdHlsZS5vdXRsaW5lT2Zmc2V0ID0gJzJweCc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGF0dXMuam9iX2FuYWx5c2lzKSB7XG4gICAgICBfYXBwTG9nLmluZm8oJ0pvYiBhbmFseXNpcyBhbHJlYWR5IGNvbXBsZXRlLCBza2lwcGluZyBhdXRvLWFuYWx5c2lzJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIF9hcHBMb2cuaW5mbygnUmVjb25uZWN0aW5nIHRvIGV4aXN0aW5nIHNlc3Npb24sIHNraXBwaW5nIGF1dG8tYW5hbHlzaXMnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXR1cEV2ZW50TGlzdGVuZXJzKCkge1xuICBpZiAoX2xpc3RlbmVyc1JlZ2lzdGVyZWQpIHJldHVybjtcbiAgX2xpc3RlbmVyc1JlZ2lzdGVyZWQgPSB0cnVlO1xuXG4gIC8vIFRhYiBzd2l0Y2hpbmdcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRhYicpLmZvckVhY2godGFiID0+IHtcbiAgICB0YWIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBzd2l0Y2hUYWIodGFiLmRhdGFzZXQudGFiKSk7XG4gIH0pO1xuXG4gIC8vIE1lc3NhZ2Ugc2VuZGluZ1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VuZC1idG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHNlbmRNZXNzYWdlKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lc3NhZ2UtaW5wdXQnKS5hZGRFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIChlKSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSBzZW5kTWVzc2FnZSgpO1xuICB9KTtcblxuICAvLyBBY3Rpb24gYnV0dG9ucyBcdTIwMTQgb25lIHBlciB3b3JrZmxvdyBzdGFnZVxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYW5hbHl6ZS1idG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFuYWx5emVKb2IpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVjb21tZW5kLWJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gc2VuZEFjdGlvbigncmVjb21tZW5kX2N1c3RvbWl6YXRpb25zJykpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2VuZXJhdGUtYnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gU29mdCBnYXRlOiB3YXJuIGlmIGN1c3RvbWlzYXRpb24gaXRlbXMgaGF2ZSBuZXZlciBiZWVuIGluZGl2aWR1YWxseSByZXZpZXdlZCAoR0FQLTExNilcbiAgICBjb25zdCByZXZpZXdlZCA9IHdpbmRvdy5fZXhwbGljaXRseVJldmlld2VkIHx8IHsgZXhwZXJpZW5jZXM6IG5ldyBTZXQoKSwgc2tpbGxzOiBuZXcgU2V0KCkgfTtcbiAgICBjb25zdCB0b3RhbEV4cCA9ICh3aW5kb3cuX2V4cGVyaWVuY2VzT3JkZXJlZCB8fCBbXSkubGVuZ3RoO1xuICAgIGNvbnN0IHRvdGFsU2tpbGwgPSBPYmplY3Qua2V5cyh1c2VyU2VsZWN0aW9ucz8uc2tpbGxzIHx8IHt9KS5sZW5ndGg7XG4gICAgY29uc3QgdW5yZXZpZXdlZEV4cCA9IHRvdGFsRXhwIC0gcmV2aWV3ZWQuZXhwZXJpZW5jZXMuc2l6ZTtcbiAgICBjb25zdCB1bnJldmlld2VkU2tpbGwgPSB0b3RhbFNraWxsIC0gcmV2aWV3ZWQuc2tpbGxzLnNpemU7XG4gICAgY29uc3QgdW5yZXZpZXdlZFRvdGFsID0gTWF0aC5tYXgoMCwgdW5yZXZpZXdlZEV4cCkgKyBNYXRoLm1heCgwLCB1bnJldmlld2VkU2tpbGwpO1xuICAgIGlmICh1bnJldmlld2VkVG90YWwgPiAwKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgICAgaWYgKHVucmV2aWV3ZWRFeHAgPiAwKSBwYXJ0cy5wdXNoKGAke3VucmV2aWV3ZWRFeHB9IGV4cGVyaWVuY2UgZW50ciR7dW5yZXZpZXdlZEV4cCA9PT0gMSA/ICd5JyA6ICdpZXMnfWApO1xuICAgICAgaWYgKHVucmV2aWV3ZWRTa2lsbCA+IDApIHBhcnRzLnB1c2goYCR7dW5yZXZpZXdlZFNraWxsfSBza2lsbCR7dW5yZXZpZXdlZFNraWxsID09PSAxID8gJycgOiAncyd9YCk7XG4gICAgICBjb25zdCBvayA9IHdpbmRvdy5jb25maXJtKFxuICAgICAgICBgJHtwYXJ0cy5qb2luKCcgYW5kICcpfSBub3QgaW5kaXZpZHVhbGx5IHJldmlld2VkIFx1MjAxNCB0aGUgQUkncyByZWNvbW1lbmRhdGlvbiB3aWxsIGJlIHVzZWQgZm9yIHRoZXNlLlxcblxcblByb2NlZWQgYW55d2F5P2BcbiAgICAgICk7XG4gICAgICBpZiAoIW9rKSByZXR1cm47XG4gICAgfVxuICAgIGlmICh1c2VyU2VsZWN0aW9ucyAmJiAoT2JqZWN0LmtleXModXNlclNlbGVjdGlvbnMuZXhwZXJpZW5jZXMpLmxlbmd0aCA+IDAgfHwgT2JqZWN0LmtleXModXNlclNlbGVjdGlvbnMuc2tpbGxzKS5sZW5ndGggPiAwKSkge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgJ0FwcGx5aW5nIHlvdXIgcmV2aWV3IGRlY2lzaW9ucy4uLicpO1xuICAgICAgLy8gRGVjaXNpb25zIHdlcmUgYWxyZWFkeSBzdWJtaXR0ZWQgdmlhIHN1Ym1pdEV4cGVyaWVuY2VEZWNpc2lvbnMvc3VibWl0U2tpbGxEZWNpc2lvbnNcbiAgICAgIC8vIEJhY2tlbmQgaGFzIHRoZW0gaW4gY29udmVyc2F0aW9uLnN0YXRlWydleHBlcmllbmNlX2RlY2lzaW9ucyddIGFuZCBbJ3NraWxsX2RlY2lzaW9ucyddXG4gICAgfVxuICAgIGF3YWl0IGZldGNoQW5kUmV2aWV3UmV3cml0ZXMoKTtcbiAgfSk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXdyaXRlLWJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3VibWl0UmV3cml0ZURlY2lzaW9ucyk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcGVsbC1idG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN1Ym1pdFNwZWxsQ2hlY2tEZWNpc2lvbnMpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2VuZXJhdGUtcHJvY2VlZC1idG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHN3aXRjaFRhYignbGF5b3V0JykpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5b3V0LWJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlTGF5b3V0UHJpbWFyeUFjdGlvbik7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5hbC1nZW5lcmF0ZS1wcm9jZWVkLWJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZmluYWxHZW5lcmF0aW9uQ29tcGxldGUpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluYWxpc2UtYWN0aW9uLWJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gc3dpdGNoVGFiKCdmaW5hbGlzZScpKTtcblxuICBpZiAodHlwZW9mIGluaXRLZXlib2FyZFNob3J0Y3V0cyA9PT0gJ2Z1bmN0aW9uJykgaW5pdEtleWJvYXJkU2hvcnRjdXRzKCk7XG59XG5cbi8vIFRlc3RzIG5vdyBpbXBvcnQgaGVscGVyIGZ1bmN0aW9ucyBmcm9tIHRoZWlyIGNhbm9uaWNhbCBFUyBtb2R1bGVzIGRpcmVjdGx5LlxuXG5leHBvcnQgeyBpbml0LCBzZXR1cEV2ZW50TGlzdGVuZXJzIH07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9zcmMvbWFpbi5qcyBcdTIwMTQgZXNidWlsZCBlbnRyeSBwb2ludCBmb3IgdGhlIGZ1bGwgYnJvd3NlciBidW5kbGUuXG4gKlxuICogUGhhc2UgMiBtb2R1bGVzOiB1dGlscywgYXBpLWNsaWVudCwgc3RhdGUtbWFuYWdlciwgdWktY29yZSwgbGF5b3V0LWluc3RydWN0aW9uXG4gKiBQaGFzZSAzIG1vZHVsZXM6IGFsbCBkb21haW4gc3BsaXQgbW9kdWxlcyAoVGllciAwXHUyMDEzNykgZnJvbSB0aGUgYXBwLmpzIG1vZHVsYXJpc2F0aW9uLlxuICpcbiAqIEV2ZXJ5IGV4cG9ydCBpcyBhc3NpZ25lZCB0byBgd2luZG93YCBzbyB0aGF0IGxlZ2FjeSBpbmxpbmUgb25jbGljaz1cImZuKClcIlxuICogaGFuZGxlcnMgYW5kIGFwcC5qcyBjb250aW51ZSB0byB3b3JrIHVuY2hhbmdlZC5cbiAqXG4gKiBCdWlsZDogIG5wbSBydW4gYnVpbGQgICAgICAgICAgXHUyMTkyIHdlYi9idW5kbGUuanMgKGRldmVsb3BtZW50LCB1bm1pbmlmaWVkKVxuICogICAgICAgICBucG0gcnVuIGJ1aWxkOnByb2QgICAgIFx1MjE5MiB3ZWIvYnVuZGxlLmpzIChtaW5pZmllZClcbiAqICAgICAgICAgbnBtIHJ1biBidWlsZDp3YXRjaCAgICBcdTIxOTIgcmVidWlsZCBvbiBldmVyeSBzb3VyY2UgY2hhbmdlXG4gKi9cblxuLy8gXHUyNTAwXHUyNTAwIExvZ2dlciAobXVzdCBiZSBmaXJzdCBzbyBuYW1lZCBsb2dnZXJzIGFyZSBhdmFpbGFibGUgdG8gYWxsIG1vZHVsZXMpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuaW1wb3J0ICogYXMgTG9nZ2VyIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMCBQaGFzZSAyIChvcmlnaW5hbCBidW5kbGUpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuaW1wb3J0ICogYXMgVXRpbHMgICAgICAgICAgICAgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0ICogYXMgQXBpQ2xpZW50ICAgICAgICAgZnJvbSAnLi4vYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgKiBhcyBTdGF0ZSAgICAgICAgICAgICBmcm9tICcuLi9zdGF0ZS1tYW5hZ2VyLmpzJztcbmltcG9ydCAqIGFzIFByb3ZpZGVySW5mbyAgICAgIGZyb20gJy4uL3Byb3ZpZGVyLWluZm8uanMnO1xuaW1wb3J0ICogYXMgVWlDb3JlICAgICAgICAgICAgZnJvbSAnLi4vdWktY29yZS5qcyc7XG5pbXBvcnQgKiBhcyBMYXlvdXRJbnN0cnVjdGlvbiBmcm9tICcuLi9sYXlvdXQtaW5zdHJ1Y3Rpb24uanMnO1xuXG4vLyBcdTI1MDBcdTI1MDAgVGllciAwIFx1MjAxNCBubyBkZXBlbmRlbmNpZXMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5pbXBvcnQgKiBhcyBWYWxpZGF0b3JzICAgICAgICAgICAgZnJvbSAnLi4vdmFsaWRhdG9ycy5qcyc7XG5pbXBvcnQgKiBhcyBSZWNvbW1lbmRhdGlvbkhlbHBlcnMgZnJvbSAnLi4vcmVjb21tZW5kYXRpb24taGVscGVycy5qcyc7XG5pbXBvcnQgKiBhcyBVaUhlbHBlcnMgICAgICAgICAgICAgZnJvbSAnLi4vdWktaGVscGVycy5qcyc7XG5pbXBvcnQgKiBhcyBQcm9wb3NhbFJldmlldyAgICAgICAgZnJvbSAnLi4vcHJvcG9zYWwtcmV2aWV3LmpzJztcblxuLy8gXHUyNTAwXHUyNTAwIFRpZXIgMSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmltcG9ydCAqIGFzIEZldGNoVXRpbHMgICBmcm9tICcuLi9mZXRjaC11dGlscy5qcyc7XG5pbXBvcnQgKiBhcyBNZXNzYWdlUXVldWUgZnJvbSAnLi4vbWVzc2FnZS1xdWV1ZS5qcyc7XG5pbXBvcnQgKiBhcyBMbG1Mb2cgICAgICAgZnJvbSAnLi4vbGxtLWxvZy5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMCBUaWVyIDIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5pbXBvcnQgKiBhcyBBdXRoUHJvdmlkZXIgICBmcm9tICcuLi9hdXRoLXByb3ZpZGVyLmpzJztcbmltcG9ydCAqIGFzIEF0c1JlZmluZW1lbnQgIGZyb20gJy4uL2F0cy1yZWZpbmVtZW50LmpzJztcbmltcG9ydCAqIGFzIEF0c01vZGFscyAgICAgIGZyb20gJy4uL2F0cy1tb2RhbHMuanMnO1xuaW1wb3J0ICogYXMgU2Vzc2lvbkFjdGlvbnMgZnJvbSAnLi4vc2Vzc2lvbi1hY3Rpb25zLmpzJztcbmltcG9ydCAqIGFzIEpvYkFuYWx5c2lzICAgIGZyb20gJy4uL2pvYi1hbmFseXNpcy5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMCBUaWVyIDMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5pbXBvcnQgKiBhcyBHb2FscyAgICAgICAgICAgZnJvbSAnLi4vZ29hbHMuanMnO1xuaW1wb3J0ICogYXMgU2Vzc2lvbk1hbmFnZXIgIGZyb20gJy4uL3Nlc3Npb24tbWFuYWdlci5qcyc7XG5pbXBvcnQgKiBhcyBKb2JJbnB1dCAgICAgICAgZnJvbSAnLi4vam9iLWlucHV0LmpzJztcbmltcG9ydCAqIGFzIE1lc3NhZ2VEaXNwYXRjaCBmcm9tICcuLi9tZXNzYWdlLWRpc3BhdGNoLmpzJztcbmltcG9ydCAqIGFzIFF1ZXN0aW9uc1BhbmVsICBmcm9tICcuLi9xdWVzdGlvbnMtcGFuZWwuanMnO1xuXG4vLyBcdTI1MDBcdTI1MDAgVGllciA0IFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuaW1wb3J0ICogYXMgUmV2aWV3SWNvbnMgICAgZnJvbSAnLi4vcmV2aWV3LWljb25zLmpzJztcbmltcG9ydCAqIGFzIFJldmlld1RhYmxlQmFzZSBmcm9tICcuLi9yZXZpZXctdGFibGUtYmFzZS5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMCBUaWVyIDUgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5pbXBvcnQgKiBhcyBFeHBlcmllbmNlUmV2aWV3ICAgZnJvbSAnLi4vZXhwZXJpZW5jZS1yZXZpZXcuanMnO1xuaW1wb3J0ICogYXMgU2tpbGxzUmV2aWV3ICAgICAgIGZyb20gJy4uL3NraWxscy1yZXZpZXcuanMnO1xuaW1wb3J0ICogYXMgQWNoaWV2ZW1lbnRzUmV2aWV3IGZyb20gJy4uL2FjaGlldmVtZW50cy1yZXZpZXcuanMnO1xuaW1wb3J0ICogYXMgVGFnbGluZVJldmlldyAgICAgIGZyb20gJy4uL3RhZ2xpbmUtcmV2aWV3LmpzJztcbmltcG9ydCAqIGFzIFN1bW1hcnlSZXZpZXcgICAgICBmcm9tICcuLi9zdW1tYXJ5LXJldmlldy5qcyc7XG5pbXBvcnQgKiBhcyBQdWJsaWNhdGlvbnNSZXZpZXcgZnJvbSAnLi4vcHVibGljYXRpb25zLXJldmlldy5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMCBUaWVyIDYgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5pbXBvcnQgKiBhcyBSZXdyaXRlUmV2aWV3ICAgICAgZnJvbSAnLi4vcmV3cml0ZS1yZXZpZXcuanMnO1xuaW1wb3J0ICogYXMgU3BlbGxDaGVjayAgICAgICAgIGZyb20gJy4uL3NwZWxsLWNoZWNrLmpzJztcbmltcG9ydCAqIGFzIERvd25sb2FkVGFiICAgICAgICBmcm9tICcuLi9kb3dubG9hZC10YWIuanMnO1xuaW1wb3J0ICogYXMgRmluYWxHZW5lcmF0ZSAgICAgIGZyb20gJy4uL2ZpbmFsLWdlbmVyYXRlLmpzJztcbmltcG9ydCAqIGFzIFdvcmtmbG93U3RlcHMgICAgICBmcm9tICcuLi93b3JrZmxvdy1zdGVwcy5qcyc7XG5pbXBvcnQgKiBhcyBNYXN0ZXJEYXRhQWlVcGRhdGUgZnJvbSAnLi4vbWFzdGVyLWRhdGEtYWktdXBkYXRlLmpzJztcbmltcG9ydCAqIGFzIE1hc3RlckN2ICAgICAgICAgICBmcm9tICcuLi9tYXN0ZXItY3YuanMnO1xuaW1wb3J0ICogYXMgQ292ZXJMZXR0ZXIgICAgICAgIGZyb20gJy4uL2NvdmVyLWxldHRlci5qcyc7XG5pbXBvcnQgKiBhcyBTY3JlZW5pbmdRdWVzdGlvbnMgZnJvbSAnLi4vc2NyZWVuaW5nLXF1ZXN0aW9ucy5qcyc7XG5pbXBvcnQgKiBhcyBGaW5hbGlzZSAgICAgICAgICAgZnJvbSAnLi4vZmluYWxpc2UuanMnO1xuaW1wb3J0ICogYXMgSW50ZXJ2aWV3UHJlcCAgICAgIGZyb20gJy4uL2ludGVydmlldy1wcmVwLmpzJztcbmltcG9ydCAqIGFzIFRoYW5rWW91ICAgICAgICAgICBmcm9tICcuLi90aGFuay15b3UuanMnO1xuaW1wb3J0ICogYXMgSGFydmVzdCAgICAgICAgICAgIGZyb20gJy4uL2hhcnZlc3QuanMnO1xuXG4vLyBcdTI1MDBcdTI1MDAgVGllciA3IFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuaW1wb3J0ICogYXMgU2Vzc2lvblN3aXRjaGVyVWkgIGZyb20gJy4uL3Nlc3Npb24tc3dpdGNoZXItdWkuanMnO1xuaW1wb3J0ICogYXMgS2V5Ym9hcmRTaG9ydGN1dHMgIGZyb20gJy4uL2tleWJvYXJkLXNob3J0Y3V0cy5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMCBBcHAgb3JjaGVzdHJhdG9yIChmb2xkZWQgaW50byBidW5kbGUgXHUyMDE0IEdBUC02NCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5pbXBvcnQgKiBhcyBBcHAgZnJvbSAnLi4vYXBwLmpzJztcblxuLy8gXHUyNTAwXHUyNTAwIEFzc2lnbiBhbGwgZXhwb3J0cyB0byBnbG9iYWxUaGlzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuLy8gUGhhc2UgMiBtb2R1bGVzIGZpcnN0OyBwaGFzZSAzIGRvbWFpbiBtb2R1bGVzIGZvbGxvdyBzbyBmdWxseS1mZWF0dXJlZFxuLy8gaW1wbGVtZW50YXRpb25zIG92ZXJyaWRlIGFueSBwbGFjZWhvbGRlciBzdHVicyAoZS5nLiBzaG93U2Vzc2lvbkNvbmZsaWN0QmFubmVyXG4vLyBpbiBzZXNzaW9uLXN3aXRjaGVyLXVpIG92ZXJyaWRlcyB0aGUgc2ltcGxlIHN0dWIgaW4gdWktY29yZSkuXG5PYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsXG4gIExvZ2dlciwgVXRpbHMsIEFwaUNsaWVudCwgU3RhdGUsIFByb3ZpZGVySW5mbywgVWlDb3JlLCBMYXlvdXRJbnN0cnVjdGlvbixcbiAgVmFsaWRhdG9ycywgUmVjb21tZW5kYXRpb25IZWxwZXJzLCBVaUhlbHBlcnMsIFByb3Bvc2FsUmV2aWV3LFxuICBGZXRjaFV0aWxzLCBNZXNzYWdlUXVldWUsIExsbUxvZyxcbiAgQXV0aFByb3ZpZGVyLCBBdHNSZWZpbmVtZW50LCBBdHNNb2RhbHMsIFNlc3Npb25BY3Rpb25zLCBKb2JBbmFseXNpcyxcbiAgR29hbHMsXG4gIFNlc3Npb25NYW5hZ2VyLCBKb2JJbnB1dCwgTWVzc2FnZURpc3BhdGNoLCBRdWVzdGlvbnNQYW5lbCxcbiAgUmV2aWV3VGFibGVCYXNlLFxuICBFeHBlcmllbmNlUmV2aWV3LCBTa2lsbHNSZXZpZXcsIEFjaGlldmVtZW50c1JldmlldywgVGFnbGluZVJldmlldywgU3VtbWFyeVJldmlldywgUHVibGljYXRpb25zUmV2aWV3LCBSZXZpZXdJY29ucyxcbiAgUmV3cml0ZVJldmlldywgU3BlbGxDaGVjaywgRG93bmxvYWRUYWIsIEZpbmFsR2VuZXJhdGUsIFdvcmtmbG93U3RlcHMsIE1hc3RlckRhdGFBaVVwZGF0ZSwgTWFzdGVyQ3YsXG4gIENvdmVyTGV0dGVyLCBTY3JlZW5pbmdRdWVzdGlvbnMsIEZpbmFsaXNlLCBJbnRlcnZpZXdQcmVwLCBUaGFua1lvdSwgSGFydmVzdCxcbiAgU2Vzc2lvblN3aXRjaGVyVWksIEtleWJvYXJkU2hvcnRjdXRzLFxuICBBcHAsXG4pO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgQXBwLmluaXQpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBTUEsT0FBQyxTQUFVLE1BQU0sWUFBWTtBQUN6QjtBQUNBLFlBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxLQUFLO0FBQzVDLGlCQUFPLFVBQVU7QUFBQSxRQUNyQixXQUFXLE9BQU8sV0FBVyxZQUFZLE9BQU8sU0FBUztBQUNyRCxpQkFBTyxVQUFVLFdBQVc7QUFBQSxRQUNoQyxPQUFPO0FBQ0gsZUFBSyxNQUFNLFdBQVc7QUFBQSxRQUMxQjtBQUFBLE1BQ0osR0FBRSxTQUFNLFdBQVk7QUFDaEI7QUFHQSxZQUFJLE9BQU8sV0FBVztBQUFBLFFBQUM7QUFDdkIsWUFBSSxnQkFBZ0I7QUFDcEIsWUFBSSxPQUFRLE9BQU8sV0FBVyxpQkFBbUIsT0FBTyxPQUFPLGNBQWMsaUJBQ3pFLGtCQUFrQixLQUFLLE9BQU8sVUFBVSxTQUFTO0FBR3JELFlBQUksYUFBYTtBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDSjtBQUVBLFlBQUksaUJBQWlCLENBQUM7QUFDdEIsWUFBSSxnQkFBZ0I7QUFHcEIsaUJBQVMsV0FBVyxLQUFLLFlBQVk7QUFDakMsY0FBSSxTQUFTLElBQUksVUFBVTtBQUMzQixjQUFJLE9BQU8sT0FBTyxTQUFTLFlBQVk7QUFDbkMsbUJBQU8sT0FBTyxLQUFLLEdBQUc7QUFBQSxVQUMxQixPQUFPO0FBQ0gsZ0JBQUk7QUFDQSxxQkFBTyxTQUFTLFVBQVUsS0FBSyxLQUFLLFFBQVEsR0FBRztBQUFBLFlBQ25ELFNBQVMsR0FBRztBQUVSLHFCQUFPLFdBQVc7QUFDZCx1QkFBTyxTQUFTLFVBQVUsTUFBTSxNQUFNLFFBQVEsQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUFBLGNBQ2xFO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBR0EsaUJBQVMsYUFBYTtBQUNsQixjQUFJLFFBQVEsS0FBSztBQUNiLGdCQUFJLFFBQVEsSUFBSSxPQUFPO0FBQ25CLHNCQUFRLElBQUksTUFBTSxTQUFTLFNBQVM7QUFBQSxZQUN4QyxPQUFPO0FBRUgsdUJBQVMsVUFBVSxNQUFNLE1BQU0sUUFBUSxLQUFLLENBQUMsU0FBUyxTQUFTLENBQUM7QUFBQSxZQUNwRTtBQUFBLFVBQ0o7QUFDQSxjQUFJLFFBQVEsTUFBTyxTQUFRLE1BQU07QUFBQSxRQUNyQztBQUlBLGlCQUFTLFdBQVcsWUFBWTtBQUM1QixjQUFJLGVBQWUsU0FBUztBQUN4Qix5QkFBYTtBQUFBLFVBQ2pCO0FBRUEsY0FBSSxPQUFPLFlBQVksZUFBZTtBQUNsQyxtQkFBTztBQUFBLFVBQ1gsV0FBVyxlQUFlLFdBQVcsTUFBTTtBQUN2QyxtQkFBTztBQUFBLFVBQ1gsV0FBVyxRQUFRLFVBQVUsTUFBTSxRQUFXO0FBQzFDLG1CQUFPLFdBQVcsU0FBUyxVQUFVO0FBQUEsVUFDekMsV0FBVyxRQUFRLFFBQVEsUUFBVztBQUNsQyxtQkFBTyxXQUFXLFNBQVMsS0FBSztBQUFBLFVBQ3BDLE9BQU87QUFDSCxtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKO0FBSUEsaUJBQVMsd0JBQXdCO0FBRTdCLGNBQUksUUFBUSxLQUFLLFNBQVM7QUFHMUIsbUJBQVMsSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFDeEMsZ0JBQUksYUFBYSxXQUFXLENBQUM7QUFDN0IsaUJBQUssVUFBVSxJQUFLLElBQUksUUFDcEIsT0FDQSxLQUFLLGNBQWMsWUFBWSxPQUFPLEtBQUssSUFBSTtBQUFBLFVBQ3ZEO0FBR0EsZUFBSyxNQUFNLEtBQUs7QUFHaEIsY0FBSSxPQUFPLFlBQVksaUJBQWlCLFFBQVEsS0FBSyxPQUFPLFFBQVE7QUFDaEUsbUJBQU87QUFBQSxVQUNYO0FBQUEsUUFDSjtBQUlBLGlCQUFTLGdDQUFnQyxZQUFZO0FBQ2pELGlCQUFPLFdBQVk7QUFDZixnQkFBSSxPQUFPLFlBQVksZUFBZTtBQUNsQyxvQ0FBc0IsS0FBSyxJQUFJO0FBQy9CLG1CQUFLLFVBQVUsRUFBRSxNQUFNLE1BQU0sU0FBUztBQUFBLFlBQzFDO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFJQSxpQkFBUyxxQkFBcUIsWUFBWSxRQUFRLGFBQWE7QUFFM0QsaUJBQU8sV0FBVyxVQUFVLEtBQ3JCLGdDQUFnQyxNQUFNLE1BQU0sU0FBUztBQUFBLFFBQ2hFO0FBRUEsaUJBQVMsT0FBTyxNQUFNLFNBQVM7QUFFN0IsY0FBSSxPQUFPO0FBU1gsY0FBSTtBQU1KLGNBQUk7QUFNSixjQUFJO0FBRUosY0FBSSxhQUFhO0FBQ2pCLGNBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIsMEJBQWMsTUFBTTtBQUFBLFVBQ3RCLFdBQVcsT0FBTyxTQUFTLFVBQVU7QUFDbkMseUJBQWE7QUFBQSxVQUNmO0FBRUEsbUJBQVMsdUJBQXVCLFVBQVU7QUFDdEMsZ0JBQUksYUFBYSxXQUFXLFFBQVEsS0FBSyxVQUFVLFlBQVk7QUFFL0QsZ0JBQUksT0FBTyxXQUFXLGlCQUFpQixDQUFDLFdBQVk7QUFHcEQsZ0JBQUk7QUFDQSxxQkFBTyxhQUFhLFVBQVUsSUFBSTtBQUNsQztBQUFBLFlBQ0osU0FBUyxRQUFRO0FBQUEsWUFBQztBQUdsQixnQkFBSTtBQUNBLHFCQUFPLFNBQVMsU0FDZCxtQkFBbUIsVUFBVSxJQUFJLE1BQU0sWUFBWTtBQUFBLFlBQ3pELFNBQVMsUUFBUTtBQUFBLFlBQUM7QUFBQSxVQUN0QjtBQUVBLG1CQUFTLG9CQUFvQjtBQUN6QixnQkFBSTtBQUVKLGdCQUFJLE9BQU8sV0FBVyxpQkFBaUIsQ0FBQyxXQUFZO0FBRXBELGdCQUFJO0FBQ0EsNEJBQWMsT0FBTyxhQUFhLFVBQVU7QUFBQSxZQUNoRCxTQUFTLFFBQVE7QUFBQSxZQUFDO0FBR2xCLGdCQUFJLE9BQU8sZ0JBQWdCLGVBQWU7QUFDdEMsa0JBQUk7QUFDQSxvQkFBSSxTQUFTLE9BQU8sU0FBUztBQUM3QixvQkFBSSxhQUFhLG1CQUFtQixVQUFVO0FBQzlDLG9CQUFJLFdBQVcsT0FBTyxRQUFRLGFBQWEsR0FBRztBQUM5QyxvQkFBSSxhQUFhLElBQUk7QUFDakIsZ0NBQWMsV0FBVztBQUFBLG9CQUNyQixPQUFPLE1BQU0sV0FBVyxXQUFXLFNBQVMsQ0FBQztBQUFBLGtCQUNqRCxFQUFFLENBQUM7QUFBQSxnQkFDUDtBQUFBLGNBQ0osU0FBUyxRQUFRO0FBQUEsY0FBQztBQUFBLFlBQ3RCO0FBR0EsZ0JBQUksS0FBSyxPQUFPLFdBQVcsTUFBTSxRQUFXO0FBQ3hDLDRCQUFjO0FBQUEsWUFDbEI7QUFFQSxtQkFBTztBQUFBLFVBQ1g7QUFFQSxtQkFBUyxzQkFBc0I7QUFDM0IsZ0JBQUksT0FBTyxXQUFXLGlCQUFpQixDQUFDLFdBQVk7QUFHcEQsZ0JBQUk7QUFDQSxxQkFBTyxhQUFhLFdBQVcsVUFBVTtBQUFBLFlBQzdDLFNBQVMsUUFBUTtBQUFBLFlBQUM7QUFHbEIsZ0JBQUk7QUFDQSxxQkFBTyxTQUFTLFNBQ2QsbUJBQW1CLFVBQVUsSUFBSTtBQUFBLFlBQ3ZDLFNBQVMsUUFBUTtBQUFBLFlBQUM7QUFBQSxVQUN0QjtBQUVBLG1CQUFTLGVBQWUsT0FBTztBQUMzQixnQkFBSSxRQUFRO0FBQ1osZ0JBQUksT0FBTyxVQUFVLFlBQVksS0FBSyxPQUFPLE1BQU0sWUFBWSxDQUFDLE1BQU0sUUFBVztBQUM3RSxzQkFBUSxLQUFLLE9BQU8sTUFBTSxZQUFZLENBQUM7QUFBQSxZQUMzQztBQUNBLGdCQUFJLE9BQU8sVUFBVSxZQUFZLFNBQVMsS0FBSyxTQUFTLEtBQUssT0FBTyxRQUFRO0FBQ3hFLHFCQUFPO0FBQUEsWUFDWCxPQUFPO0FBQ0gsb0JBQU0sSUFBSSxVQUFVLCtDQUErQyxLQUFLO0FBQUEsWUFDNUU7QUFBQSxVQUNKO0FBUUEsZUFBSyxPQUFPO0FBRVosZUFBSyxTQUFTO0FBQUEsWUFBRSxTQUFTO0FBQUEsWUFBRyxTQUFTO0FBQUEsWUFBRyxRQUFRO0FBQUEsWUFBRyxRQUFRO0FBQUEsWUFDdkQsU0FBUztBQUFBLFlBQUcsVUFBVTtBQUFBLFVBQUM7QUFFM0IsZUFBSyxnQkFBZ0IsV0FBVztBQUVoQyxlQUFLLFdBQVcsV0FBWTtBQUN4QixnQkFBSSxhQUFhLE1BQU07QUFDckIscUJBQU87QUFBQSxZQUNULFdBQVcsZ0JBQWdCLE1BQU07QUFDL0IscUJBQU87QUFBQSxZQUNULE9BQU87QUFDTCxxQkFBTztBQUFBLFlBQ1Q7QUFBQSxVQUNKO0FBRUEsZUFBSyxXQUFXLFNBQVUsT0FBTyxTQUFTO0FBQ3RDLHdCQUFZLGVBQWUsS0FBSztBQUNoQyxnQkFBSSxZQUFZLE9BQU87QUFDbkIscUNBQXVCLFNBQVM7QUFBQSxZQUNwQztBQUdBLG1CQUFPLHNCQUFzQixLQUFLLElBQUk7QUFBQSxVQUMxQztBQUVBLGVBQUssa0JBQWtCLFNBQVUsT0FBTztBQUNwQywyQkFBZSxlQUFlLEtBQUs7QUFDbkMsZ0JBQUksQ0FBQyxrQkFBa0IsR0FBRztBQUN0QixtQkFBSyxTQUFTLE9BQU8sS0FBSztBQUFBLFlBQzlCO0FBQUEsVUFDSjtBQUVBLGVBQUssYUFBYSxXQUFZO0FBQzFCLHdCQUFZO0FBQ1osZ0NBQW9CO0FBQ3BCLGtDQUFzQixLQUFLLElBQUk7QUFBQSxVQUNuQztBQUVBLGVBQUssWUFBWSxTQUFTLFNBQVM7QUFDL0IsaUJBQUssU0FBUyxLQUFLLE9BQU8sT0FBTyxPQUFPO0FBQUEsVUFDNUM7QUFFQSxlQUFLLGFBQWEsU0FBUyxTQUFTO0FBQ2hDLGlCQUFLLFNBQVMsS0FBSyxPQUFPLFFBQVEsT0FBTztBQUFBLFVBQzdDO0FBRUEsZUFBSyxVQUFVLFdBQVk7QUFDdkIsZ0JBQUksa0JBQWtCLE1BQU07QUFDeEIsK0JBQWlCLGVBQWUsY0FBYyxTQUFTLENBQUM7QUFBQSxZQUM1RDtBQUNBLGtDQUFzQixLQUFLLElBQUk7QUFFL0IsZ0JBQUksa0JBQWtCLE1BQU07QUFDeEIsdUJBQVMsYUFBYSxnQkFBZ0I7QUFDcEMsK0JBQWUsU0FBUyxFQUFFLFFBQVE7QUFBQSxjQUNwQztBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBR0EsMkJBQWlCO0FBQUEsWUFDYixnQkFBZ0IsY0FBYyxTQUFTLElBQUk7QUFBQSxVQUMvQztBQUNBLGNBQUksZUFBZSxrQkFBa0I7QUFDckMsY0FBSSxnQkFBZ0IsTUFBTTtBQUN0Qix3QkFBWSxlQUFlLFlBQVk7QUFBQSxVQUMzQztBQUNBLGdDQUFzQixLQUFLLElBQUk7QUFBQSxRQUNqQztBQVFBLHdCQUFnQixJQUFJLE9BQU87QUFFM0Isc0JBQWMsWUFBWSxTQUFTQSxXQUFVLE1BQU07QUFDL0MsY0FBSyxPQUFPLFNBQVMsWUFBWSxPQUFPLFNBQVMsWUFBYSxTQUFTLElBQUk7QUFDdkUsa0JBQU0sSUFBSSxVQUFVLGdEQUFnRDtBQUFBLFVBQ3hFO0FBRUEsY0FBSUMsVUFBUyxlQUFlLElBQUk7QUFDaEMsY0FBSSxDQUFDQSxTQUFRO0FBQ1QsWUFBQUEsVUFBUyxlQUFlLElBQUksSUFBSSxJQUFJO0FBQUEsY0FDaEM7QUFBQSxjQUNBLGNBQWM7QUFBQSxZQUNsQjtBQUFBLFVBQ0o7QUFDQSxpQkFBT0E7QUFBQSxRQUNYO0FBR0EsWUFBSSxPQUFRLE9BQU8sV0FBVyxnQkFBaUIsT0FBTyxNQUFNO0FBQzVELHNCQUFjLGFBQWEsV0FBVztBQUNsQyxjQUFJLE9BQU8sV0FBVyxpQkFDZixPQUFPLFFBQVEsZUFBZTtBQUNqQyxtQkFBTyxNQUFNO0FBQUEsVUFDakI7QUFFQSxpQkFBTztBQUFBLFFBQ1g7QUFFQSxzQkFBYyxhQUFhLFNBQVMsYUFBYTtBQUM3QyxpQkFBTztBQUFBLFFBQ1g7QUFHQSxzQkFBYyxTQUFTLElBQUk7QUFFM0IsZUFBTztBQUFBLE1BQ1gsQ0FBQztBQUFBO0FBQUE7OztBQ3BXRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNkJBLHdCQUFxQjtBQUdyQixNQUFNLGdCQUFpQixPQUFPLFlBQVksZUFBZSxRQUFRLE9BQU8sUUFDcEUsU0FDQTtBQUVKLGtCQUFBQyxRQUFTLGdCQUFnQixhQUFhO0FBUy9CLFdBQVMsVUFBVSxNQUFNO0FBQzlCLFdBQU8sZ0JBQUFBLFFBQVMsVUFBVSxJQUFJO0FBQUEsRUFDaEM7QUFNQSxNQUFJLE9BQU8sZUFBZSxhQUFhO0FBQ3JDLGVBQVcsV0FBVyxnQkFBQUE7QUFBQSxFQUN4QjtBQUVBLE1BQU8saUJBQVEsZ0JBQUFBOzs7QUN6RGY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDZCQUFBQztBQUFBLElBQUEsa0JBQUFDO0FBQUEsSUFBQSw4QkFBQUM7QUFBQSxJQUFBLHlDQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBLG1DQUFBQztBQUFBLElBQUE7QUFBQSxrQ0FBQUM7QUFBQSxJQUFBLHFCQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlCQSxXQUFTQSxlQUFjQyxPQUFNO0FBQzNCLFdBQU9BLE1BQ0osS0FBSyxFQUNMLFFBQVEsUUFBUSxHQUFHLEVBQ25CLEtBQUs7QUFBQSxFQUNWO0FBTUEsV0FBUyxRQUFRLElBQUk7QUFDbkIsVUFBTSxPQUFPLElBQUksS0FBSyxLQUFLLEdBQUk7QUFDL0IsV0FBTyxLQUFLLG1CQUFtQixTQUFTLEVBQUUsT0FBTyxTQUFTLEtBQUssV0FBVyxNQUFNLFVBQVUsQ0FBQztBQUFBLEVBQzdGO0FBVUEsV0FBU1AsbUJBQWtCTyxPQUFNO0FBQy9CLFFBQUksT0FBT0EsVUFBUyxTQUFVLFFBQU9BO0FBQ3JDLFFBQUksVUFBVUE7QUFFZCxjQUFVLFFBQVEsUUFBUSxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsWUFBWSxFQUFFO0FBRXBFLGNBQVUsUUFBUSxRQUFRLFlBQVksRUFBRSxFQUFFLFFBQVEsWUFBWSxFQUFFO0FBQ2hFLFdBQU8sUUFBUSxLQUFLO0FBQUEsRUFDdEI7QUFNQSxXQUFTTCx3QkFBdUJLLE9BQU07QUFDcEMsUUFBSUEsU0FBUSxRQUFRLE9BQU9BLFVBQVMsU0FBVSxRQUFPO0FBRXJELFVBQU0sVUFBVVAsbUJBQWtCTyxLQUFJO0FBRXRDLGFBQVMsUUFBUSxHQUFHLFFBQVEsUUFBUSxRQUFRLFNBQVMsR0FBRztBQUN0RCxVQUFJLFFBQVEsS0FBSyxNQUFNLElBQUs7QUFFNUIsVUFBSSxRQUFRO0FBQ1osVUFBSSxXQUFXO0FBQ2YsVUFBSSxZQUFZO0FBRWhCLGVBQVMsUUFBUSxPQUFPLFFBQVEsUUFBUSxRQUFRLFNBQVMsR0FBRztBQUMxRCxjQUFNLE9BQU8sUUFBUSxLQUFLO0FBRTFCLFlBQUksVUFBVTtBQUNaLGNBQUksV0FBVztBQUNiLHdCQUFZO0FBQ1o7QUFBQSxVQUNGO0FBQ0EsY0FBSSxTQUFTLE1BQU07QUFDakIsd0JBQVk7QUFDWjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLFNBQVMsS0FBSztBQUNoQix1QkFBVztBQUFBLFVBQ2I7QUFDQTtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFNBQVMsS0FBSztBQUNoQixxQkFBVztBQUNYO0FBQUEsUUFDRjtBQUVBLFlBQUksU0FBUyxLQUFLO0FBQ2hCLG1CQUFTO0FBQ1Q7QUFBQSxRQUNGO0FBRUEsWUFBSSxTQUFTLElBQUs7QUFFbEIsaUJBQVM7QUFDVCxZQUFJLFVBQVUsRUFBRztBQUVqQixjQUFNLFlBQVksUUFBUSxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQ2hELFlBQUk7QUFDRixpQkFBTyxLQUFLLE1BQU0sU0FBUztBQUFBLFFBQzdCLFFBQVE7QUFDTjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBTUEsV0FBU04sWUFBV00sT0FBTTtBQUN4QixRQUFJQSxTQUFRLEtBQU0sUUFBTztBQUN6QixRQUFJLE9BQU9BLFVBQVMsU0FBVSxRQUFPTixZQUFXLE9BQU9NLEtBQUksQ0FBQztBQUM1RCxVQUFNLE1BQU07QUFBQSxNQUNWLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxJQUNQO0FBQ0EsV0FBT0EsTUFBSyxRQUFRLFlBQVksQ0FBQUMsT0FBSyxJQUFJQSxFQUFDLENBQUM7QUFBQSxFQUM3QztBQVNBLFdBQVNMLG1DQUFrQyxTQUFTO0FBQ2xELFVBQU0sUUFBUSxRQUFRLE1BQU0sSUFBSSxFQUFFLElBQUksT0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sT0FBSyxFQUFFLFNBQVMsQ0FBQztBQUc3RSxlQUFXLFFBQVEsT0FBTztBQUN4QixVQUFJLEtBQUssU0FBUyxHQUFHLEdBQUc7QUFDdEIsY0FBTSxDQUFDLE9BQU8sT0FBTyxJQUFJLEtBQUssTUFBTSxHQUFHLEVBQUUsSUFBSSxPQUFLLEVBQUUsS0FBSyxDQUFDO0FBQzFELFlBQUksU0FBUyxTQUFTO0FBQ3BCLGlCQUFPLEVBQUUsT0FBTyxRQUFRO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBQ0EsVUFBSSxLQUFLLFlBQVksRUFBRSxTQUFTLE1BQU0sR0FBRztBQUN2QyxjQUFNLENBQUMsT0FBTyxPQUFPLElBQUksS0FBSyxNQUFNLFdBQVcsRUFBRSxJQUFJLE9BQUssRUFBRSxLQUFLLENBQUM7QUFDbEUsWUFBSSxTQUFTLFNBQVM7QUFDcEIsaUJBQU8sRUFBRSxPQUFPLFFBQVE7QUFBQSxRQUMxQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBR0EsVUFBTSxZQUFZLE1BQU0sQ0FBQztBQUN6QixXQUFPO0FBQUEsTUFDTCxPQUFPLGFBQWE7QUFBQSxNQUNwQixTQUFTLE1BQU0sS0FBSyxPQUFLLEVBQUUsWUFBWSxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQUs7QUFBQSxJQUMzRTtBQUFBLEVBQ0Y7QUFVQSxXQUFTRSx3QkFBdUIsT0FBTyxTQUFTO0FBQzlDLFFBQUksYUFBYSxNQUNkLE1BQU0sR0FBRyxFQUNULElBQUksVUFBUSxLQUFLLE9BQU8sQ0FBQyxFQUFFLFlBQVksSUFBSSxLQUFLLE1BQU0sQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUN0RSxLQUFLLEdBQUc7QUFHWCxpQkFBYSxXQUNWLFFBQVEscUNBQXFDLEVBQUUsRUFDL0MsS0FBSztBQUVSLFdBQU8sY0FBYztBQUFBLEVBQ3ZCO0FBTUEsV0FBUyxVQUFVSSxPQUFNO0FBQ3ZCLFVBQU0sV0FBVyxTQUFTLGNBQWMsVUFBVTtBQUNsRCxhQUFTLFlBQVksT0FBT0EsU0FBUSxFQUFFO0FBQ3RDLGFBQVMsUUFBUSxpQkFBaUIsbUNBQW1DLEVBQUUsUUFBUSxVQUFRLEtBQUssT0FBTyxDQUFDO0FBQ3BHLFdBQU8sU0FBUyxRQUFRLGVBQWU7QUFBQSxFQUN6QztBQU1BLFdBQVMsYUFBYUYsT0FBTSxZQUFZLEtBQUs7QUFDM0MsUUFBSUEsTUFBSyxVQUFVLFVBQVcsUUFBT0E7QUFHckMsUUFBSSxZQUFZQSxNQUFLLFVBQVUsR0FBRyxTQUFTO0FBRzNDLFVBQU0sWUFBWSxVQUFVLFlBQVksR0FBRztBQUMzQyxRQUFJLFlBQVksS0FBSyxNQUFNLFlBQVksSUFBSSxHQUFHO0FBQzVDLGtCQUFZLFVBQVUsVUFBVSxHQUFHLFNBQVM7QUFBQSxJQUM5QztBQUVBLFdBQU8sWUFBWTtBQUFBLEVBQ3JCO0FBS0EsV0FBUyxnQkFBZ0JBLE9BQU07QUFDN0IsV0FBT0EsTUFDSixNQUFNLEdBQUcsRUFDVCxJQUFJLFVBQVEsS0FBSyxPQUFPLENBQUMsRUFBRSxZQUFZLElBQUksS0FBSyxNQUFNLENBQUMsRUFBRSxZQUFZLENBQUMsRUFDdEUsS0FBSyxHQUFHO0FBQUEsRUFDYjtBQU9BLFdBQVMsVUFBVSxPQUFPLFVBQVUsUUFBUTtBQUMxQyxXQUFPLFVBQVUsSUFBSSxXQUFXO0FBQUEsRUFDbEM7QUFNQSxXQUFTLGVBQWUsSUFBSTtBQUMxQixVQUFNLFVBQVUsS0FBSyxNQUFNLEtBQUssR0FBSTtBQUNwQyxVQUFNLFVBQVUsS0FBSyxNQUFNLFVBQVUsRUFBRTtBQUN2QyxVQUFNLFFBQVEsS0FBSyxNQUFNLFVBQVUsRUFBRTtBQUVyQyxRQUFJLFFBQVEsRUFBRyxRQUFPLEdBQUcsS0FBSyxLQUFLLFVBQVUsRUFBRTtBQUMvQyxRQUFJLFVBQVUsRUFBRyxRQUFPLEdBQUcsT0FBTyxLQUFLLFVBQVUsRUFBRTtBQUNuRCxXQUFPLEdBQUcsT0FBTztBQUFBLEVBQ25CO0FBTUEsV0FBUyxRQUFRLEdBQUc7QUFDbEIsVUFBTSxJQUFJLENBQUMsTUFBTSxNQUFNLE1BQU0sSUFBSTtBQUNqQyxVQUFNRyxLQUFJLElBQUk7QUFDZCxXQUFPLEtBQUssR0FBR0EsS0FBSSxNQUFNLEVBQUUsS0FBSyxFQUFFQSxFQUFDLEtBQUssRUFBRSxDQUFDO0FBQUEsRUFDN0M7QUFLQSxNQUFNLHVCQUF1QjtBQUFBLElBQzNCLE1BQWtCO0FBQUEsSUFDbEIsY0FBa0I7QUFBQSxJQUNsQixlQUFrQjtBQUFBLElBQ2xCLGdCQUFrQjtBQUFBLElBQ2xCLGFBQWtCO0FBQUEsSUFDbEIsWUFBa0I7QUFBQSxJQUNsQixlQUFrQjtBQUFBLElBQ2xCLFlBQWtCO0FBQUEsSUFDbEIsa0JBQWtCO0FBQUEsRUFDcEI7QUFLQSxNQUFNLDZCQUE2QjtBQUFBLElBQ2pDLE1BQWtCO0FBQUEsSUFDbEIsY0FBa0I7QUFBQSxJQUNsQixlQUFrQjtBQUFBLElBQ2xCLGdCQUFrQjtBQUFBLElBQ2xCLGFBQWtCO0FBQUEsSUFDbEIsWUFBa0I7QUFBQSxJQUNsQixlQUFrQjtBQUFBLElBQ2xCLFlBQWtCO0FBQUEsSUFDbEIsa0JBQWtCO0FBQUEsRUFDcEI7QUFPQSxXQUFTTix5QkFBd0IsT0FBTztBQUN0QyxRQUFJLENBQUMsTUFBTyxRQUFPO0FBQ25CLFdBQU8scUJBQXFCLEtBQUssS0FBSyxPQUFPLEtBQUssRUFBRSxRQUFRLE1BQU0sR0FBRztBQUFBLEVBQ3ZFO0FBc0JBLE1BQU0sYUFBYSxFQUFFLE9BQU8sSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLE9BQU8sR0FBRztBQUM5RCxNQUFNLG9CQUFvQjtBQUUxQixXQUFTLGVBQWUsT0FBTyxTQUFTLFdBQVcsQ0FBQyxHQUFHO0FBQ3JELFVBQU0sUUFBUTtBQUFBLE1BQ1osWUFBVyxvQkFBSSxLQUFLLEdBQUUsWUFBWTtBQUFBLE1BQ2xDO0FBQUEsTUFDQSxTQUFTLE9BQU8sT0FBTztBQUFBLE1BQ3ZCLEdBQUc7QUFBQSxJQUNMO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFNLFNBQVM7QUFBQSxJQUNiLE9BQU87QUFBQSxJQUVQLFNBQVMsVUFBVTtBQUNqQixVQUFJLFdBQVcsUUFBUSxLQUFLLE1BQU07QUFDaEMsYUFBSyxRQUFRO0FBQUEsTUFDZjtBQUFBLElBQ0Y7QUFBQSxJQUVBLFVBQVUsT0FBTztBQUNmLFVBQUksV0FBVyxLQUFLLEtBQUssS0FBTSxRQUFPO0FBQ3RDLGFBQU8sV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUs7QUFBQSxJQUNuRDtBQUFBLElBRUEsSUFBSSxPQUFPLFNBQVMsV0FBVyxDQUFDLEdBQUc7QUFDakMsVUFBSSxDQUFDLEtBQUssVUFBVSxLQUFLLEVBQUcsUUFBTztBQUVuQyxZQUFNLFFBQVEsZUFBZSxPQUFPLFNBQVMsUUFBUTtBQUNyRCxZQUFNLFlBQVksS0FBSyxVQUFVLEtBQUs7QUFFdEMsVUFBSSxPQUFPLFlBQVksYUFBYTtBQUNsQyxZQUFJLFVBQVUsUUFBUyxTQUFRLE1BQU0sU0FBUztBQUFBLGlCQUNyQyxVQUFVLE9BQVEsU0FBUSxLQUFLLFNBQVM7QUFBQSxZQUM1QyxTQUFRLElBQUksU0FBUztBQUFBLE1BQzVCO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLE1BQU0sU0FBUyxXQUFXLENBQUMsR0FBRztBQUFFLGFBQU8sS0FBSyxJQUFJLFNBQVMsU0FBUyxRQUFRO0FBQUEsSUFBRztBQUFBLElBQzdFLEtBQUssU0FBUyxXQUFXLENBQUMsR0FBRztBQUFFLGFBQU8sS0FBSyxJQUFJLFFBQVEsU0FBUyxRQUFRO0FBQUEsSUFBRztBQUFBLElBQzNFLEtBQUssU0FBUyxXQUFXLENBQUMsR0FBRztBQUFFLGFBQU8sS0FBSyxJQUFJLFFBQVEsU0FBUyxRQUFRO0FBQUEsSUFBRztBQUFBLElBQzNFLE1BQU0sU0FBUyxXQUFXLENBQUMsR0FBRztBQUFFLGFBQU8sS0FBSyxJQUFJLFNBQVMsU0FBUyxRQUFRO0FBQUEsSUFBRztBQUFBLElBRTdFLE1BQU0sUUFBUSxXQUFXLENBQUMsR0FBRztBQUMzQixhQUFPLEtBQUssS0FBSyxTQUFTLE1BQU0sSUFBSSxFQUFFLFFBQVEsR0FBRyxTQUFTLENBQUM7QUFBQSxJQUM3RDtBQUFBLEVBQ0Y7QUFFQSxNQUFJLE9BQU8sZUFBZSxhQUFhO0FBQ3JDLGVBQVcsU0FBUztBQUFBLEVBQ3RCOzs7QUNwWEE7QUFBQTtBQUFBO0FBQUEsdUJBQUFPO0FBQUEsSUFBQSxlQUFBQztBQUFBLElBQUEscUJBQUFDO0FBQUEsSUFBQTtBQUFBLHVCQUFBQztBQUFBLElBQUEscUJBQUFDO0FBQUEsSUFBQSxrQ0FBQUM7QUFBQSxJQUFBLDJCQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBOzs7QUNBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLCtCQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkFBQUM7QUFBQSxJQUFBLGtCQUFBQztBQUFBLElBQUE7QUFBQTtBQW9CQSxNQUFNLHNCQUFzQixDQUFDO0FBQzdCLE1BQU0sbUJBQXNCO0FBQzVCLE1BQU0scUJBQXNCO0FBRzVCLFdBQVMsMEJBQTBCLE1BQU07QUFDdkMsUUFBSTtBQUNGLFlBQU0sU0FBUyxPQUFPLEtBQUssQ0FBQyxNQUFNLFdBQVcsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUc7QUFDaEUsVUFBSSxDQUFDLE9BQVEsUUFBTztBQUNwQixZQUFNLE1BQU0sSUFBSSxJQUFJLFFBQVEsT0FBTyxTQUFTLE1BQU07QUFDbEQsYUFBTyxJQUFJLGFBQWEseUJBQXlCLElBQUksYUFBYTtBQUFBLElBQ3BFLFNBQVNDLElBQUc7QUFDVixhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFZQSxpQkFBZSxrQkFBa0IsT0FBT0MsT0FBTSxVQUFVO0FBQ3RELFFBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPQSxLQUFJLENBQUMsRUFBRyxRQUFPO0FBQ3RELFFBQUksVUFBVTtBQUNaLFVBQUk7QUFDRixjQUFNLE9BQU8sTUFBTSxTQUFTLE1BQU0sRUFBRSxLQUFLO0FBQ3pDLFlBQUksUUFBUSxLQUFLLGlCQUFpQixLQUFLLGtCQUFrQixvQkFBcUIsUUFBTztBQUFBLE1BQ3ZGLFNBQVNELElBQUc7QUFBQSxNQUEwQztBQUFBLElBQ3hEO0FBQ0EsOEJBQTBCO0FBQzFCLFdBQU8sSUFBSSxRQUFRLGFBQVcsb0JBQW9CLEtBQUssT0FBTyxDQUFDO0FBQUEsRUFDakU7QUFFQSxXQUFTLDRCQUE0QjtBQUNuQyxVQUFNLFNBQWMsU0FBUyxlQUFlLHlCQUF5QjtBQUNyRSxVQUFNLGFBQWMsU0FBUyxlQUFlLHNCQUFzQjtBQUNsRSxVQUFNLGNBQWMsU0FBUyxlQUFlLG9CQUFvQjtBQUNoRSxRQUFJLENBQUMsT0FBUTtBQUNiLFdBQU8sTUFBTSxVQUFVO0FBQ3ZCLFFBQUksa0JBQWtCO0FBQUUsb0JBQWMsZ0JBQWdCO0FBQUcseUJBQW1CO0FBQUEsSUFBTTtBQUNsRix5QkFBcUI7QUFDckIsUUFBSSxXQUFhLFlBQVcsY0FBZTtBQUMzQyxRQUFJLFlBQWEsYUFBWSxjQUFjLEdBQUcsa0JBQWtCO0FBQ2hFLHVCQUFtQixZQUFZLE1BQU07QUFDbkM7QUFDQSxVQUFJLHNCQUFzQixHQUFHO0FBQzNCLHNCQUFjLGdCQUFnQjtBQUFHLDJCQUFtQjtBQUNwRCx5QkFBaUI7QUFBQSxNQUNuQixPQUFPO0FBQ0wsWUFBSSxZQUFhLGFBQVksY0FBYyxHQUFHLGtCQUFrQjtBQUFBLE1BQ2xFO0FBQUEsSUFDRixHQUFHLEdBQUk7QUFBQSxFQUNUO0FBRUEsV0FBUyxtQkFBbUI7QUFDMUIsUUFBSSxrQkFBa0I7QUFBRSxvQkFBYyxnQkFBZ0I7QUFBRyx5QkFBbUI7QUFBQSxJQUFNO0FBQ2xGLFVBQU0sU0FBUyxTQUFTLGVBQWUseUJBQXlCO0FBQ2hFLFFBQUksT0FBUSxRQUFPLE1BQU0sVUFBVTtBQUNuQyxXQUFPLG9CQUFvQixPQUFRLHFCQUFvQixNQUFNLEVBQUUsSUFBSTtBQUFBLEVBQ3JFO0FBRUEsV0FBUyxrQkFBa0I7QUFDekIsUUFBSSxrQkFBa0I7QUFBRSxvQkFBYyxnQkFBZ0I7QUFBRyx5QkFBbUI7QUFBQSxJQUFNO0FBQ2xGLFVBQU0sU0FBUyxTQUFTLGVBQWUseUJBQXlCO0FBQ2hFLFFBQUksT0FBUSxRQUFPLE1BQU0sVUFBVTtBQUNuQyxXQUFPLG9CQUFvQixPQUFRLHFCQUFvQixNQUFNLEVBQUUsS0FBSztBQUFBLEVBQ3RFO0FBTUEsV0FBU0YsVUFBUyxLQUFLLFVBQVUsQ0FBQyxHQUFHO0FBQ25DLFFBQUksT0FBTyx5QkFBeUI7QUFDbEMsY0FBUSxTQUFTLE9BQU8sd0JBQXdCO0FBQUEsSUFDbEQ7QUFDQSxXQUFPLE1BQU0sS0FBSyxPQUFPO0FBQUEsRUFDM0I7QUFFQSxXQUFTLHNCQUFzQjtBQUM3QixRQUFJLE9BQU8seUJBQXlCO0FBQ2xDLGFBQU8sd0JBQXdCLE1BQU07QUFDckMsYUFBTywwQkFBMEI7QUFDakMsTUFBQUMsWUFBVyxLQUFLO0FBQ2hCLFVBQUksT0FBTyxrQkFBa0IsV0FBWSxlQUFjLFVBQVUseUJBQW9CO0FBQUEsSUFDdkY7QUFBQSxFQUNGO0FBTUEsTUFBSSxtQkFBbUI7QUFDdkIsTUFBSSxnQkFBbUI7QUFFdkIsV0FBUyxrQkFBa0IsU0FBUyxPQUFPO0FBQ3pDLFVBQU0sVUFBVyxTQUFTLGVBQWUsa0JBQWtCO0FBQzNELFVBQU0sVUFBVyxTQUFTLGVBQWUsZ0JBQWdCO0FBQ3pELFVBQU0sVUFBVyxTQUFTLGVBQWUsa0JBQWtCO0FBQzNELFFBQUksQ0FBQyxRQUFTO0FBRWQsUUFBSSxTQUFTO0FBQ1gsY0FBUSxVQUFVLElBQUksU0FBUztBQUMvQixjQUFRLFVBQVUsT0FBTyxNQUFNO0FBQy9CLFVBQUksUUFBUyxTQUFRLGNBQWMsU0FBUztBQUM1QyxVQUFJLFFBQVUsU0FBUSxjQUFjO0FBRXBDLHNCQUFnQixLQUFLLElBQUk7QUFDekIsb0JBQWMsZ0JBQWdCO0FBQzlCLHlCQUFtQixZQUFZLE1BQU07QUFDbkMsY0FBTSxPQUFPLEtBQUssT0FBTyxLQUFLLElBQUksSUFBSSxpQkFBaUIsR0FBSTtBQUMzRCxjQUFNLEtBQUssT0FBTyxLQUFLLE1BQU0sT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUN4RCxjQUFNLEtBQUssT0FBTyxPQUFPLEVBQUUsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUM1QyxZQUFJLFFBQVMsU0FBUSxjQUFjLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDOUMsWUFBSSxRQUFRLE1BQU0sQ0FBQyxRQUFRLFVBQVUsU0FBUyxNQUFNLEdBQUc7QUFDckQsa0JBQVEsVUFBVSxJQUFJLE1BQU07QUFBQSxRQUM5QjtBQUFBLE1BQ0YsR0FBRyxHQUFJO0FBQUEsSUFDVCxPQUFPO0FBQ0wsb0JBQWMsZ0JBQWdCO0FBQzlCLHlCQUFtQjtBQUNuQixzQkFBbUI7QUFDbkIsY0FBUSxVQUFVLE9BQU8sV0FBVyxNQUFNO0FBQzFDLFVBQUksUUFBUyxTQUFRLGNBQWM7QUFDbkMsVUFBSSxRQUFVLFNBQVEsY0FBYztBQUNwQywyQkFBcUI7QUFBQSxJQUN2QjtBQUFBLEVBQ0Y7QUFHQSxXQUFTRixxQkFBb0IsU0FBUyxPQUFPO0FBQzNDLHNCQUFrQixTQUFTLEtBQUs7QUFFaEMsVUFBTSxNQUFNLFNBQVMsZUFBZSxnQkFBZ0I7QUFDcEQsVUFBTSxXQUFXLFNBQVMsZUFBZSxjQUFjO0FBQ3ZELFVBQU0sWUFBWSxTQUFTLGVBQWUsZ0JBQWdCO0FBQzFELFVBQU0sV0FBVyxTQUFTLGVBQWUsZUFBZTtBQUN4RCxRQUFJLENBQUMsSUFBSztBQUVWLFFBQUksU0FBUztBQUNYLFVBQUksTUFBTSxVQUFVO0FBQ3BCLFVBQUksU0FBVSxVQUFTLE1BQU0sVUFBVTtBQUN2QyxVQUFJLFVBQVcsV0FBVSxjQUFjLFNBQVM7QUFDaEQsVUFBSSxVQUFVO0FBQ1osaUJBQVMsTUFBTSxVQUFVO0FBQ3pCLGlCQUFTLFdBQVc7QUFBQSxNQUN0QjtBQUFBLElBQ0YsT0FBTztBQUNMLFVBQUksU0FBVSxVQUFTLE1BQU0sVUFBVTtBQUN2QyxVQUFJLFNBQVUsVUFBUyxNQUFNLFVBQVU7QUFDdkMsVUFBSSxNQUFNLFVBQVU7QUFBQSxJQUN0QjtBQUFBLEVBQ0Y7QUFFQSxpQkFBZSx1QkFBdUI7QUFDcEMsVUFBTSxVQUFVLFNBQVMsZUFBZSxpQkFBaUI7QUFDekQsUUFBSSxDQUFDLFFBQVM7QUFDZCxRQUFJO0FBQ0YsWUFBTSxNQUFPLE1BQU0sTUFBTSxvQkFBb0I7QUFDN0MsVUFBSSxDQUFDLElBQUksR0FBSTtBQUNiLFlBQU0sT0FBTyxNQUFNLElBQUksS0FBSztBQUM1QixVQUFJLENBQUMsS0FBSyxHQUFJO0FBQ2QsWUFBTSxNQUFTLEtBQUssb0JBQW9CO0FBQ3hDLFlBQU0sTUFBUyxLQUFLLGtCQUFvQjtBQUN4QyxZQUFNLFFBQVMsS0FBSyxpQkFBaUI7QUFDckMsWUFBTSxNQUFTLEtBQUssTUFBTyxNQUFNLE1BQU8sR0FBRztBQUMzQyxZQUFNLFNBQVMsT0FBTyxNQUFPLElBQUksTUFBTSxLQUFNLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHO0FBQ25FLFlBQU0sU0FBUyxPQUFPLE1BQU8sR0FBRyxLQUFLLE1BQU0sTUFBTSxHQUFJLENBQUMsTUFBTyxHQUFHLEdBQUc7QUFDbkUsY0FBUSxjQUFjLEdBQUcsUUFBUSxLQUFLLEdBQUcsR0FBRyxNQUFNLE1BQU0sTUFBTSxLQUFLLEdBQUc7QUFBQSxJQUN4RSxTQUFTRyxJQUFHO0FBQUEsSUFBd0I7QUFBQSxFQUN0QztBQU1BLFdBQVNELFlBQVcsU0FBUyxPQUFPO0FBQ2xDLFFBQUksT0FBTyxpQkFBaUIsZUFBZSxjQUFjLFlBQVk7QUFDbkUsbUJBQWEsV0FBVyxPQUFPO0FBQUEsSUFDakM7QUFFQSxRQUFJLFNBQVM7QUFDWCxhQUFPLDBCQUEwQixJQUFJLGdCQUFnQjtBQUVyRCxZQUFNRyxZQUFXLFNBQVMsZUFBZSxXQUFXO0FBQ3BELFlBQU0sYUFBYSxTQUFTLGVBQWUsYUFBYTtBQUN4RCxZQUFNLFlBQVksU0FBUyxlQUFlLGFBQWE7QUFDdkQsVUFBSUEsV0FBVSxVQUFVLFNBQVMsV0FBVyxHQUFHO0FBQzdDLFFBQUFBLFVBQVMsVUFBVSxPQUFPLFdBQVc7QUFDckMsb0JBQVksVUFBVSxPQUFPLFVBQVU7QUFDdkMsWUFBSSxVQUFXLFdBQVUsY0FBYztBQUFBLE1BQ3pDO0FBQUEsSUFDRixPQUFPO0FBQ0wsYUFBTywwQkFBMEI7QUFBQSxJQUNuQztBQUVBLElBQUFMLHFCQUFvQixTQUFTLEtBQUs7QUFHbEMsVUFBTSxXQUFXLFNBQVMsZUFBZSxXQUFXO0FBQ3BELFVBQU0sUUFBUSxZQUFZO0FBQzFCLFVBQU0saUJBQWlCLFFBQVEsRUFBRSxRQUFRLFNBQU87QUFBRSxVQUFJLFdBQVc7QUFBQSxJQUFTLENBQUM7QUFDM0UsVUFBTSxVQUFVLFNBQVMsZUFBZSxlQUFlO0FBQ3ZELFFBQUksUUFBUyxTQUFRLFdBQVc7QUFFaEMsUUFBSSxNQUFNLFNBQVMsZUFBZSxzQkFBc0I7QUFDeEQsUUFBSSxTQUFTO0FBQ1gsVUFBSSxDQUFDLEtBQUs7QUFDUixjQUFNLFNBQVMsY0FBYyxLQUFLO0FBQ2xDLFlBQUksS0FBSztBQUNULGlCQUFTLEtBQUssUUFBUSxHQUFHO0FBQUEsTUFDM0I7QUFDQSw0QkFBc0IsTUFBTTtBQUFFLFlBQUksTUFBTSxRQUFRO0FBQUEsTUFBTyxDQUFDO0FBQ3hELFVBQUksTUFBTyxLQUFJLFFBQVE7QUFBQSxJQUN6QixPQUFPO0FBQ0wsVUFBSSxLQUFLO0FBQ1AsWUFBSSxNQUFNLFFBQVE7QUFDbEIsbUJBQVcsTUFBTSxJQUFJLE9BQU8sR0FBRyxHQUFHO0FBQUEsTUFDcEM7QUFBQSxJQUNGO0FBRUEsYUFBUyxpQkFBaUIsY0FBYyxFQUFFLFFBQVEsUUFBTTtBQUN0RCxTQUFHLFVBQVUsT0FBTyxnQkFBZ0IsT0FBTztBQUFBLElBQzdDLENBQUM7QUFBQSxFQUNIOzs7QUQzT0EsTUFBTSxNQUFNLFVBQVUsWUFBWTtBQUtsQyxNQUFNTSxlQUFjO0FBQUEsSUFDbEIsWUFBc0I7QUFBQSxJQUN0QixjQUFzQjtBQUFBLElBQ3RCLFVBQXNCO0FBQUEsSUFDdEIsYUFBc0I7QUFBQSxJQUN0QixnQkFBc0I7QUFBQSxJQUN0QixzQkFBc0I7QUFBQSxFQUN4QjtBQUVBLE1BQU0sa0JBQWtCO0FBRXhCLFdBQVNDLHVCQUFzQjtBQUM3QixRQUFJLE9BQU8sV0FBVyxlQUFlLENBQUMsT0FBTyxTQUFVLFFBQU87QUFDOUQsV0FBTyxJQUFJLGdCQUFnQixPQUFPLFNBQVMsTUFBTSxFQUFFLElBQUksU0FBUztBQUFBLEVBQ2xFO0FBRUEsV0FBU0MsaUJBQWdCO0FBQ3ZCLFFBQUksT0FBTyxtQkFBbUIsWUFBYSxRQUFPO0FBQ2xELFFBQUksUUFBUSxlQUFlLFFBQVEsZUFBZTtBQUNsRCxRQUFJLENBQUMsT0FBTztBQUNWLFVBQUksT0FBTyxXQUFXLGVBQWUsT0FBTyxPQUFPLGVBQWUsWUFBWTtBQUM1RSxnQkFBUSxPQUFPLFdBQVc7QUFBQSxNQUM1QixPQUFPO0FBQ0wsZ0JBQVEsT0FBTyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFBQSxNQUN0RTtBQUNBLHFCQUFlLFFBQVEsaUJBQWlCLEtBQUs7QUFBQSxJQUMvQztBQUNBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBU0MsNEJBQTJCQyxhQUFZLE1BQU07QUFDcEQsVUFBTSxrQkFBa0JBLGNBQWFILHFCQUFvQjtBQUN6RCxXQUFPLGtCQUNILEdBQUdELGFBQVksUUFBUSxJQUFJLGVBQWUsS0FDMUNBLGFBQVk7QUFBQSxFQUNsQjtBQUVBLFdBQVMseUJBQXlCLFVBQVU7QUFDMUMsV0FBTyxhQUFhLHVCQUNmLGFBQWEseUJBQ2IsYUFBYTtBQUFBLEVBQ3BCO0FBRUEsV0FBUywwQkFBMEIsT0FBT0ssUUFBTyxDQUFDLEdBQUc7QUFDbkQsUUFBSSxPQUFPLFdBQVcsZUFBZSxDQUFDLE9BQU8sVUFBVTtBQUNyRCxhQUFPLENBQUMsT0FBT0EsS0FBSTtBQUFBLElBQ3JCO0FBRUEsVUFBTSxNQUFNLElBQUksSUFBSSxPQUFPLFVBQVUsV0FBVyxRQUFRLE1BQU0sS0FBSyxPQUFPLFNBQVMsTUFBTTtBQUN6RixRQUFJLENBQUMsSUFBSSxTQUFTLFdBQVcsT0FBTyxHQUFHO0FBQ3JDLGFBQU8sQ0FBQyxPQUFPQSxLQUFJO0FBQUEsSUFDckI7QUFFQSxVQUFNLGFBQWFILGVBQWM7QUFDakMsUUFBSSxDQUFDLElBQUksYUFBYSxJQUFJLGFBQWEsS0FBSyxDQUFDLHlCQUF5QixJQUFJLFFBQVEsS0FBSyxZQUFZO0FBQ2pHLFVBQUksYUFBYSxJQUFJLGVBQWUsVUFBVTtBQUFBLElBQ2hEO0FBRUEsVUFBTUUsYUFBWUgscUJBQW9CO0FBQ3RDLFFBQUksQ0FBQ0csWUFBVztBQUNkLGFBQU8sQ0FBQyxJQUFJLFNBQVMsR0FBR0MsS0FBSTtBQUFBLElBQzlCO0FBRUEsVUFBTSxVQUFVQSxNQUFLLFVBQVUsT0FBTyxZQUFZO0FBQ2xELFVBQU0sV0FBVyxFQUFFLEdBQUdBLE1BQUs7QUFDM0IsVUFBTSxVQUFVLElBQUksUUFBUUEsTUFBSyxXQUFXLENBQUMsQ0FBQztBQUU5QyxRQUFJLENBQUMsSUFBSSxhQUFhLElBQUksWUFBWSxLQUFLLENBQUMseUJBQXlCLElBQUksUUFBUSxHQUFHO0FBQ2xGLFVBQUksYUFBYSxJQUFJLGNBQWNELFVBQVM7QUFBQSxJQUM5QztBQUVBLFVBQU0sbUJBQW1CLENBQUMsQ0FBQyxPQUFPLE1BQU0sRUFBRSxTQUFTLE1BQU07QUFDekQsVUFBTSxPQUFPLFNBQVM7QUFDdEIsVUFBTSxhQUFhLE9BQU8sYUFBYSxlQUFlLGdCQUFnQjtBQUN0RSxVQUFNLG9CQUFvQixPQUFPLG9CQUFvQixlQUFlLGdCQUFnQjtBQUNwRixVQUFNLGNBQWMsUUFBUSxJQUFJLGNBQWMsS0FBSztBQUVuRCxRQUFJLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxtQkFBbUI7QUFDekQsVUFBSSxVQUFVLENBQUM7QUFDZixVQUFJLE9BQU8sU0FBUyxZQUFZLEtBQUssS0FBSyxHQUFHO0FBQzNDLFlBQUk7QUFDRixvQkFBVSxLQUFLLE1BQU0sSUFBSTtBQUFBLFFBQzNCLFNBQVNFLElBQUc7QUFDVixpQkFBTyxDQUFDLElBQUksU0FBUyxHQUFHLFFBQVE7QUFBQSxRQUNsQztBQUFBLE1BQ0YsV0FBVyxRQUFRLE1BQU07QUFDdkIsa0JBQVUsQ0FBQztBQUFBLE1BQ2IsV0FBVyxPQUFPLFNBQVMsVUFBVTtBQUNuQyxrQkFBVSxFQUFFLEdBQUcsS0FBSztBQUFBLE1BQ3RCO0FBRUEsVUFBSSxRQUFRLGNBQWMsUUFBUSxDQUFDLHlCQUF5QixJQUFJLFFBQVEsR0FBRztBQUN6RSxnQkFBUSxhQUFhRjtBQUFBLE1BQ3ZCO0FBQ0EsVUFBSSxRQUFRLGVBQWUsUUFBUSxDQUFDLHlCQUF5QixJQUFJLFFBQVEsR0FBRztBQUMxRSxZQUFJLFdBQVksU0FBUSxjQUFjO0FBQUEsTUFDeEM7QUFFQSxlQUFTLE9BQU8sS0FBSyxVQUFVLE9BQU87QUFDdEMsVUFBSSxDQUFDLGFBQWE7QUFDaEIsZ0JBQVEsSUFBSSxnQkFBZ0Isa0JBQWtCO0FBQUEsTUFDaEQ7QUFBQSxJQUNGO0FBRUEsYUFBUyxVQUFVO0FBQ25CLFdBQU8sQ0FBQyxJQUFJLFNBQVMsR0FBRyxRQUFRO0FBQUEsRUFDbEM7QUFFQSxNQUFNLGVBQWUsT0FBTyxXQUFXLGVBQWUsT0FBTyxPQUFPLFVBQVUsYUFDMUUsT0FBTyxNQUFNLEtBQUssTUFBTSxJQUN2QixPQUFPLFdBQVcsVUFBVSxhQUFhLFdBQVcsTUFBTSxLQUFLLFVBQVUsSUFBSTtBQUVsRixpQkFBZSxrQkFBa0IsT0FBT0MsUUFBTyxDQUFDLEdBQUc7QUFDakQsUUFBSSxnQkFBZ0IsTUFBTTtBQUN4QixZQUFNLElBQUksTUFBTSx3QkFBd0I7QUFBQSxJQUMxQztBQUNBLFVBQU0sQ0FBQyxXQUFXLFFBQVEsSUFBSSwwQkFBMEIsT0FBT0EsS0FBSTtBQUNuRSxRQUFJLE9BQU8sTUFBTSxhQUFhLFdBQVcsUUFBUTtBQUNqRCxRQUFJLEtBQUssV0FBVyxLQUFLO0FBQ3ZCLFlBQU0sY0FBYyxNQUFNLGtCQUFrQixXQUFXLFVBQVUsSUFBSTtBQUNyRSxVQUFJLFlBQWEsUUFBTyxNQUFNLGFBQWEsV0FBVyxRQUFRO0FBQUEsSUFDaEU7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksT0FBTyxXQUFXLGVBQWUsT0FBTyxPQUFPLFVBQVUsWUFBWTtBQUN2RSxXQUFPLFFBQVE7QUFBQSxFQUNqQjtBQVNBLGlCQUFlRSxTQUFRLFFBQVEsVUFBVSxPQUFPLE1BQU07QUFDcEQsVUFBTSxVQUFVO0FBQUEsTUFDZDtBQUFBLE1BQ0EsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxJQUNoRDtBQUVBLFFBQUksU0FBUyxXQUFXLFVBQVUsV0FBVyxRQUFRO0FBQ25ELGNBQVEsT0FBTyxLQUFLLFVBQVUsSUFBSTtBQUFBLElBQ3BDO0FBRUEsUUFBSTtBQUNGLFlBQU0sV0FBVyxNQUFNLGtCQUFrQixVQUFVLE9BQU87QUFHMUQsVUFBSSxTQUFTLFdBQVcsS0FBSztBQUMzQixZQUFJLEtBQUssdUJBQXVCLFFBQVEsRUFBRTtBQUMxQyxjQUFNLElBQUksTUFBTSx1Q0FBdUM7QUFBQSxNQUN6RDtBQUVBLFVBQUksQ0FBQyxTQUFTLElBQUk7QUFDaEIsWUFBSSxNQUFNLGdCQUFnQixNQUFNLElBQUksUUFBUSxLQUFLLFNBQVMsUUFBUSxTQUFTLFVBQVU7QUFDckYsWUFBSSxlQUFlLFNBQVM7QUFDNUIsWUFBSTtBQUNGLGdCQUFNLFlBQVksTUFBTSxTQUFTLEtBQUs7QUFDdEMsY0FBSSxhQUFhLE9BQU8sY0FBYyxVQUFVO0FBQzlDLDJCQUFlLFVBQVUsU0FBUyxVQUFVLFdBQVc7QUFBQSxVQUN6RDtBQUFBLFFBQ0YsU0FBU0QsSUFBRztBQUFBLFFBRVo7QUFDQSxjQUFNLElBQUksTUFBTSxHQUFHLFNBQVMsTUFBTSxLQUFLLFlBQVksRUFBRTtBQUFBLE1BQ3ZEO0FBRUEsWUFBTSxPQUFPLE1BQU0sU0FBUyxLQUFLO0FBQ2pDLGFBQU87QUFBQSxJQUNULFNBQVMsT0FBTztBQUNkLFVBQUksTUFBTSxvQkFBb0IsTUFBTSxJQUFJLFFBQVEsSUFBSSxLQUFLO0FBQ3pELFlBQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQU1BLGlCQUFlRSxpQkFBZ0I7QUFDN0IsV0FBT0QsU0FBUSxRQUFRLG1CQUFtQjtBQUFBLEVBQzVDO0FBRUEsaUJBQWVFLGVBQWM7QUFDM0IsVUFBTSxTQUFTLE1BQU1GLFNBQVEsT0FBTyxhQUFhO0FBR2pELFVBQU0sV0FBVyxRQUFRLGdCQUFnQjtBQUN6QyxRQUFJLFVBQVU7QUFDWixpQkFBVyxrQkFBa0I7QUFBQSxJQUMvQjtBQUNBLFFBQUksT0FBTyxXQUFXLG9CQUFvQixZQUFZO0FBQ3BELGlCQUFXLGdCQUFnQixRQUFRLGdCQUFnQixDQUFDLEdBQUcsUUFBUTtBQUFBLElBQ2pFO0FBR0EsUUFBSSxPQUFPLFdBQVcsd0JBQXdCLGNBQWMsVUFBVSxDQUFDLE9BQU8sUUFBUTtBQUNwRixpQkFBVyxvQkFBb0IsTUFBTTtBQUFBLElBQ3ZDO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFNQSxpQkFBZSxnQkFBZ0I7QUFDN0IsV0FBT0EsU0FBUSxPQUFPLGVBQWU7QUFBQSxFQUN2QztBQUVBLGlCQUFlLGVBQWUsVUFBVTtBQUN0QyxXQUFPQSxTQUFRLE9BQU8saUJBQWlCLEVBQUUsU0FBUyxDQUFDO0FBQUEsRUFDckQ7OztBRTFPQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGtCQUFBRztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsd0JBQUFDO0FBQUE7QUFhQSxNQUFNQyxPQUFNLFVBQVUsZUFBZTtBQVNyQyxNQUFNQyxVQUFTO0FBQUEsSUFDYixNQUFrQjtBQUFBLElBQ2xCLGNBQWtCO0FBQUEsSUFDbEIsZUFBa0I7QUFBQSxJQUNsQixnQkFBa0I7QUFBQSxJQUNsQixhQUFrQjtBQUFBLElBQ2xCLFlBQWtCO0FBQUEsSUFDbEIsZUFBa0I7QUFBQSxJQUNsQixrQkFBa0I7QUFBQSxJQUNsQixZQUFrQjtBQUFBLEVBQ3BCO0FBRUEsTUFBTSxnQkFBZ0I7QUFBQSxJQUNwQixDQUFDQSxRQUFPLElBQUksR0FBZTtBQUFBLElBQzNCLENBQUNBLFFBQU8sWUFBWSxHQUFPO0FBQUEsSUFDM0IsQ0FBQ0EsUUFBTyxhQUFhLEdBQU07QUFBQSxJQUMzQixDQUFDQSxRQUFPLGNBQWMsR0FBSztBQUFBLElBQzNCLENBQUNBLFFBQU8sV0FBVyxHQUFRO0FBQUEsSUFDM0IsQ0FBQ0EsUUFBTyxVQUFVLEdBQVM7QUFBQSxJQUMzQixDQUFDQSxRQUFPLGFBQWEsR0FBTTtBQUFBLElBQzNCLENBQUNBLFFBQU8sZ0JBQWdCLEdBQUc7QUFBQSxJQUMzQixDQUFDQSxRQUFPLFVBQVUsR0FBUztBQUFBLEVBQzdCO0FBRUEsV0FBUyx3QkFBd0IsT0FBTztBQUN0QyxXQUFPLGNBQWMsS0FBSyxLQUFLO0FBQUEsRUFDakM7QUFRQSxNQUFNLG9CQUFvQjtBQUFBLElBQ3hCLE1BQWdCO0FBQUEsSUFDaEIsZUFBZ0I7QUFBQSxJQUNoQixXQUFnQjtBQUFBLElBQ2hCLGdCQUFnQjtBQUFBLEVBQ2xCO0FBRUEsTUFBTSx5QkFBeUI7QUFFL0IsV0FBUywrQkFBK0I7QUFDdEMsV0FBTztBQUFBLE1BQ0wsT0FBTyxrQkFBa0I7QUFBQSxNQUN6QixrQkFBa0I7QUFBQSxNQUNsQixnQkFBZ0I7QUFBQSxNQUNoQixpQkFBaUI7QUFBQSxNQUNqQixtQkFBbUI7QUFBQSxNQUNuQixnQkFBZ0I7QUFBQSxNQUNoQixxQkFBcUI7QUFBQSxNQUNyQixpQkFBaUI7QUFBQSxNQUNqQix1QkFBdUI7QUFBQSxNQUN2QixhQUFhO0FBQUEsTUFDYix5QkFBeUI7QUFBQSxNQUN6QixrQkFBa0I7QUFBQSxNQUNsQixvQkFBb0I7QUFBQSxNQUNwQixrQkFBa0I7QUFBQSxNQUNsQixhQUFhO0FBQUEsTUFDYixpQkFBaUI7QUFBQSxNQUNqQiw0QkFBNEI7QUFBQSxNQUM1QiwwQkFBMEI7QUFBQSxNQUMxQixhQUFhLENBQUM7QUFBQSxNQUNkLG1CQUFtQjtBQUFBLElBQ3JCO0FBQUEsRUFDRjtBQUVBLFdBQVMsa0JBQWtCLE9BQU87QUFDaEMsV0FBTyxPQUFPLFNBQVMsS0FBSyxJQUFJLFFBQVE7QUFBQSxFQUMxQztBQUVBLFdBQVMsK0JBQStCLE9BQU87QUFDN0MsVUFBTSxZQUFZO0FBQUEsTUFDaEIsa0JBQWtCLE1BQU0sMEJBQTBCO0FBQUEsTUFDbEQsa0JBQWtCLE1BQU0sd0JBQXdCO0FBQUEsSUFDbEQsRUFBRSxPQUFPLFdBQVMsVUFBVSxJQUFJO0FBQ2hDLFdBQU8sVUFBVSxTQUFTLElBQUksS0FBSyxJQUFJLEdBQUcsU0FBUyxJQUFJO0FBQUEsRUFDekQ7QUFFQSxXQUFTLG9CQUFvQjtBQUMzQixVQUFNLFlBQVksV0FBVztBQUM3QixRQUFJLFdBQVcsWUFBWTtBQUN6QixhQUFPLFdBQVcsVUFBVSxXQUFXLENBQUM7QUFBQSxJQUMxQztBQUVBLFFBQUksV0FBVyxpQkFBaUI7QUFDOUIsWUFBTSxRQUFRLElBQUksV0FBVyxFQUFFO0FBQy9CLGdCQUFVLGdCQUFnQixLQUFLO0FBQy9CLFlBQU0sUUFBUSxNQUFNLEtBQUssT0FBTyxVQUFRLEtBQUssU0FBUyxFQUFFLEVBQUUsU0FBUyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUNuRixhQUFPLFdBQVcsS0FBSztBQUFBLElBQ3pCO0FBRUEsSUFBQUQsS0FBSSxLQUFLLDBGQUEwRjtBQUNuRyxXQUFPLFdBQVcsS0FBSyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQUEsRUFDdEY7QUFFQSxXQUFTLDRCQUE0QixPQUFPO0FBQzFDLFVBQU0sbUJBQW1CLFFBQVEsTUFBTSxnQkFBZ0I7QUFDdkQsVUFBTSxrQkFBa0I7QUFBQSxNQUN0QixNQUFNLG9CQUNELE1BQU0sVUFBVSxrQkFBa0Isa0JBQ2xDLGtCQUFrQixNQUFNLHdCQUF3QixNQUFNO0FBQUEsSUFDN0Q7QUFFQSxRQUFJLENBQUMsa0JBQWtCO0FBQ3JCLGFBQU87QUFBQSxRQUNMLFVBQVU7QUFBQSxRQUNWLFNBQVM7QUFBQSxRQUNULFlBQVk7QUFBQSxRQUNaO0FBQUEsUUFDQSxPQUFPO0FBQUEsUUFDUCxXQUFXO0FBQUEsUUFDWCxNQUFNO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFFQSxVQUFNLGtCQUFrQixrQkFBa0IsTUFBTSxlQUFlLEtBQUs7QUFDcEUsVUFBTSx1QkFBdUIsK0JBQStCLEtBQUs7QUFDakUsVUFBTSxVQUFVLHlCQUF5QixRQUFRLGtCQUFrQjtBQUNuRSxVQUFNLGFBQWEsV0FBVztBQUU5QixRQUFJLFlBQVk7QUFDZCxhQUFPO0FBQUEsUUFDTCxVQUFVO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxPQUFPO0FBQUEsUUFDUCxXQUFXO0FBQUEsUUFDWCxNQUFNO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFNBQVM7QUFDWCxhQUFPO0FBQUEsUUFDTCxVQUFVO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxPQUFPO0FBQUEsUUFDUCxXQUFXO0FBQUEsUUFDWCxNQUFNO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsTUFDTCxVQUFVO0FBQUEsTUFDVjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxPQUFPO0FBQUEsTUFDUCxXQUFXO0FBQUEsTUFDWCxNQUFNO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLDZCQUE2QjtBQUNwQyxRQUFJLE9BQU8sV0FBVyxlQUFlLE9BQU8sT0FBTyxrQkFBa0IsWUFBWTtBQUMvRTtBQUFBLElBQ0Y7QUFDQSxXQUFPLGNBQWMsSUFBSSxZQUFZLHdCQUF3QjtBQUFBLE1BQzNELFFBQVE7QUFBQSxRQUNOLGlCQUFpQixFQUFFLEdBQUcsZ0JBQWdCO0FBQUEsUUFDdEMsaUJBQWlCLDRCQUE0QixlQUFlO0FBQUEsTUFDOUQ7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFHQSxNQUFJLGFBQWE7QUFDakIsTUFBSSxZQUFZO0FBQ2hCLE1BQUksVUFBVTtBQUFBLElBQ1osVUFBVTtBQUFBLElBQ1YsZ0JBQWdCO0FBQUEsSUFDaEIsSUFBSTtBQUFBLEVBQ047QUFDQSxNQUFJLG1CQUFtQjtBQUFBLElBQ3JCLGFBQWE7QUFBQSxJQUNiLGNBQWM7QUFBQSxJQUNkLE1BQU07QUFBQTtBQUFBLElBQ04sTUFBTTtBQUFBLEVBQ1I7QUFDQSxNQUFJLFlBQVk7QUFDaEIsTUFBSSxpQkFBaUJDLFFBQU87QUFDNUIsTUFBSSxpQkFBaUI7QUFDckIsTUFBTSx3QkFBd0IsQ0FBQztBQUUvQixNQUFJLHVCQUF1QjtBQUMzQixNQUFJLG1CQUFtQjtBQUt2QixNQUFJLGtCQUFrQiw2QkFBNkI7QUFJbkQsTUFBSSxXQUFXO0FBR2YsTUFBTUMsZ0JBQWU7QUFBQTtBQUFBLElBRW5CLGVBQWUsTUFBTTtBQUFBLElBQ3JCLGVBQWUsQ0FBQyxRQUFRO0FBQUUsbUJBQWE7QUFBSyw4QkFBd0I7QUFBQSxJQUFHO0FBQUEsSUFDdkUsaUJBQWlCLE1BQU0sd0JBQXdCLGNBQWM7QUFBQTtBQUFBLElBRzdELFdBQVcsTUFBTTtBQUFBLElBQ2pCLFlBQVksQ0FBQyxZQUFZO0FBQ3ZCLGtCQUFZO0FBQUEsSUFDZDtBQUFBO0FBQUEsSUFHQSxZQUFZLENBQUMsUUFBUSxRQUFRLEdBQUc7QUFBQSxJQUNoQyxlQUFlLE9BQU8sRUFBRSxHQUFHLFFBQVE7QUFBQSxJQUNuQyxZQUFZLENBQUMsS0FBSyxTQUFTO0FBQUUsY0FBUSxHQUFHLElBQUk7QUFBTSw4QkFBd0I7QUFBQSxJQUFHO0FBQUE7QUFBQSxJQUc3RSxxQkFBcUIsTUFBTTtBQUFBLElBQzNCLHFCQUFxQixDQUFDLFVBQVU7QUFBRSx5QkFBbUIsRUFBRSxHQUFHLGtCQUFrQixHQUFHLE1BQU07QUFBRyw4QkFBd0I7QUFBQSxJQUFHO0FBQUE7QUFBQSxJQUduSCxnQkFBZ0IsTUFBTTtBQUFBLElBQ3RCLG1CQUFtQixDQUFDLGlCQUFpQjtBQUFFLHVCQUFpQixRQUFRLFlBQVk7QUFBQSxJQUFHO0FBQUE7QUFBQSxJQUcvRSxjQUFjLE1BQU07QUFBQSxJQUNwQixjQUFjLENBQUMsT0FBTztBQUFFLGtCQUFZO0FBQUksbUJBQWEsUUFBUUMsYUFBWSxZQUFZLEVBQUU7QUFBQSxJQUFHO0FBQUE7QUFBQSxJQUcxRix5QkFBeUIsTUFBTTtBQUFBLElBQy9CLHFCQUFxQixNQUFNO0FBQUEsSUFDM0IsaUJBQWlCLENBQUMsVUFBVSxVQUFVO0FBQUUsNkJBQXVCLFlBQVk7QUFBTSx5QkFBbUIsU0FBUztBQUFNLDhCQUF3QjtBQUFBLElBQUc7QUFBQTtBQUFBLElBRzlJLFVBQVUsTUFBTTtBQUFBLElBQ2hCLFVBQVUsQ0FBQyxVQUFVO0FBQ25CLHVCQUFpQjtBQUNqQiw4QkFBd0I7QUFDeEIsNEJBQXNCLFFBQVEsUUFBTTtBQUFFLFlBQUk7QUFBRSxhQUFHLEtBQUs7QUFBQSxRQUFHLFNBQVMsR0FBRztBQUFBLFFBQWU7QUFBQSxNQUFFLENBQUM7QUFBQSxJQUN2RjtBQUFBLElBQ0EsZUFBZSxDQUFDLE9BQU87QUFBRSxVQUFJLE9BQU8sT0FBTyxXQUFZLHVCQUFzQixLQUFLLEVBQUU7QUFBQSxJQUFHO0FBQUEsSUFDdkYsaUJBQWlCLE1BQU0sd0JBQXdCLGNBQWM7QUFBQTtBQUFBLElBRzdELDBCQUEwQixNQUFNLE9BQU8seUJBQXlCLENBQUM7QUFBQSxJQUNqRSwwQkFBMEIsQ0FBQyxjQUFjO0FBQUUsYUFBTyx3QkFBd0I7QUFBQSxJQUFXO0FBQUE7QUFBQSxJQUdyRixvQkFBb0IsTUFBTSxPQUFPLG1CQUFtQixDQUFDO0FBQUEsSUFDckQsb0JBQW9CLENBQUMsWUFBWTtBQUFFLGFBQU8sa0JBQWtCO0FBQUEsSUFBUztBQUFBO0FBQUEsSUFHckUsMkJBQTJCLE1BQU0sT0FBTywwQkFBMEI7QUFBQSxJQUNsRSwyQkFBMkIsQ0FBQyxRQUFRO0FBQUUsYUFBTyx5QkFBeUI7QUFBSyw4QkFBd0I7QUFBQSxJQUFHO0FBQUE7QUFBQSxJQUd0RyxhQUFhLE1BQU07QUFBQSxJQUNuQixhQUFhLENBQUMsVUFBVTtBQUFFLGlCQUFXO0FBQU8sOEJBQXdCO0FBQUEsSUFBRztBQUFBLElBQ3ZFLGVBQWUsTUFBTTtBQUFFLGlCQUFXO0FBQU0sOEJBQXdCO0FBQUEsSUFBRztBQUFBO0FBQUEsSUFHbkUsb0JBQW9CLE1BQU07QUFBQSxJQUMxQixvQkFBb0IsTUFBTSw0QkFBNEIsZUFBZTtBQUFBLElBQ3JFLG9CQUFvQixDQUFDLFdBQVc7QUFDOUIsd0JBQWtCLEVBQUUsR0FBRyxpQkFBaUIsR0FBRyxPQUFPO0FBQ2xELDhCQUF3QjtBQUN4QixpQ0FBMkI7QUFBQSxJQUM3QjtBQUFBLElBQ0Esb0JBQW9CLE1BQU07QUFDeEIsd0JBQWtCO0FBQUEsUUFDaEIsR0FBRztBQUFBLFFBQ0gsa0JBQWtCLGtCQUFrQixnQkFBZ0IsZUFBZSxLQUFLLEtBQUs7QUFBQSxNQUMvRTtBQUNBLDhCQUF3QjtBQUN4QixpQ0FBMkI7QUFBQSxJQUM3QjtBQUFBLElBQ0Esc0JBQXNCLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDckMsWUFBTSxrQkFBa0Isa0JBQWtCLGdCQUFnQixlQUFlLEtBQUs7QUFDOUUsd0JBQWtCO0FBQUEsUUFDaEIsR0FBRztBQUFBLFFBQ0gsR0FBRztBQUFBLFFBQ0gsT0FBTyxrQkFBa0I7QUFBQSxRQUN6QixrQkFBa0I7QUFBQSxRQUNsQixpQkFBaUI7QUFBQSxRQUNqQiw0QkFBNEI7QUFBQSxNQUM5QjtBQUNBLDhCQUF3QjtBQUN4QixpQ0FBMkI7QUFBQSxJQUM3QjtBQUFBLElBQ0EscUJBQXFCLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDcEMsd0JBQWtCO0FBQUEsUUFDaEIsR0FBRztBQUFBLFFBQ0gsR0FBRztBQUFBLFFBQ0gsT0FBTyxrQkFBa0I7QUFBQSxRQUN6QixpQkFBaUI7QUFBQSxNQUNuQjtBQUNBLDhCQUF3QjtBQUN4QixpQ0FBMkI7QUFBQSxJQUM3QjtBQUFBLElBQ0Esb0JBQW9CLENBQUMsY0FBYyxNQUFNLFNBQVMsQ0FBQyxNQUFNO0FBQ3ZELFlBQU0sa0JBQWtCLGtCQUFrQixnQkFBZ0IsZUFBZSxLQUFLO0FBQzlFLHdCQUFrQjtBQUFBLFFBQ2hCLEdBQUc7QUFBQSxRQUNILEdBQUc7QUFBQSxRQUNILE9BQU8sa0JBQWtCO0FBQUEsUUFDekIsaUJBQWlCO0FBQUEsUUFDakIsa0JBQWtCLGVBQWUsT0FBTyxxQkFBb0Isb0JBQUksS0FBSyxHQUFFLFlBQVk7QUFBQSxRQUNuRiwwQkFBMEI7QUFBQSxNQUM1QjtBQUNBLDhCQUF3QjtBQUN4QixpQ0FBMkI7QUFBQSxJQUM3QjtBQUFBLElBQ0Esc0JBQXNCLE1BQU07QUFDMUIsd0JBQWtCLDZCQUE2QjtBQUMvQyw4QkFBd0I7QUFDeEIsaUNBQTJCO0FBQUEsSUFDN0I7QUFBQSxJQUNBLGdCQUFnQixDQUFDLFFBQVEsaUJBQWlCO0FBQ3hDLHdCQUFrQjtBQUFBLFFBQ2hCLEdBQUc7QUFBQSxRQUNILGFBQW1CLE1BQU0sUUFBUSxNQUFNLElBQUksU0FBUyxDQUFDO0FBQUEsUUFDckQsbUJBQW1CLGdCQUFnQjtBQUFBLE1BQ3JDO0FBQ0EsOEJBQXdCO0FBQ3hCLGlDQUEyQjtBQUFBLElBQzdCO0FBQUEsSUFDQSxrQkFBa0IsTUFBTTtBQUN0Qix3QkFBa0I7QUFBQSxRQUNoQixHQUFHO0FBQUEsUUFDSCxhQUFtQixDQUFDO0FBQUEsUUFDcEIsbUJBQW1CO0FBQUEsTUFDckI7QUFDQSw4QkFBd0I7QUFDeEIsaUNBQTJCO0FBQUEsSUFDN0I7QUFBQSxJQUNBLGdCQUFzQixNQUFNLGdCQUFnQixlQUFlLENBQUM7QUFBQSxJQUM1RCxzQkFBc0IsTUFBTSxnQkFBZ0IscUJBQXFCO0FBQUEsRUFDbkU7QUFLQSxXQUFTLGtCQUFrQjtBQUN6QixpQkFBYTtBQUNiLGdCQUFZO0FBQ1osY0FBVTtBQUFBLE1BQ1IsVUFBVTtBQUFBLE1BQ1YsZ0JBQWdCO0FBQUEsTUFDaEIsSUFBSTtBQUFBLElBQ047QUFDQSx1QkFBbUI7QUFBQSxNQUNqQixhQUFhO0FBQUEsTUFDYixjQUFjO0FBQUEsTUFDZCxNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsSUFDUjtBQUNBLFdBQU8sd0JBQXdCLENBQUM7QUFDaEMsV0FBTyxrQkFBa0IsQ0FBQztBQUMxQixxQkFBaUJGLFFBQU87QUFDeEIsc0JBQWtCLDZCQUE2QjtBQUcvQyxRQUFJLFdBQVcsYUFBYSxRQUFRRSxhQUFZLFVBQVU7QUFDMUQsUUFBSSxDQUFDLFVBQVU7QUFDYixpQkFBVyxrQkFBa0I7QUFDN0IsbUJBQWEsUUFBUUEsYUFBWSxZQUFZLFFBQVE7QUFBQSxJQUN2RDtBQUNBLGdCQUFZO0FBRVosNEJBQXdCO0FBQ3hCLCtCQUEyQjtBQUFBLEVBQzdCO0FBS0EsV0FBUyw0QkFBNEI7QUFDbkMsUUFBSTtBQUNGLFlBQU0sUUFBUSxhQUFhLFFBQVFBLGFBQVksUUFBUTtBQUN2RCxVQUFJLENBQUMsTUFBTyxRQUFPO0FBRW5CLFlBQU0sT0FBTyxLQUFLLE1BQU0sS0FBSztBQUc3QixZQUFNLE1BQU0sS0FBSyxJQUFJLEtBQUssS0FBSyxhQUFhO0FBQzVDLFVBQUksTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFNO0FBQzdCLHFCQUFhLFdBQVdBLGFBQVksUUFBUTtBQUM1QyxlQUFPO0FBQUEsTUFDVDtBQUdBLFVBQUksS0FBSyxTQUFTO0FBQ2hCLGtCQUFVLEVBQUUsR0FBRyxTQUFTLEdBQUcsS0FBSyxRQUFRO0FBQUEsTUFDMUM7QUFFQSxVQUFJLEtBQUssWUFBWTtBQUNuQixxQkFBYSxLQUFLO0FBQUEsTUFDcEI7QUFHQSxVQUFJLEtBQUssa0JBQWtCO0FBQ3pCLDJCQUFtQixFQUFFLEdBQUcsa0JBQWtCLEdBQUcsS0FBSyxpQkFBaUI7QUFBQSxNQUNyRTtBQUdBLFVBQUksS0FBSyx3QkFBd0I7QUFDL0IsZUFBTyx5QkFBeUIsS0FBSztBQUFBLE1BQ3ZDO0FBR0EsVUFBSSxLQUFLLHNCQUFzQjtBQUM3QiwrQkFBdUIsS0FBSztBQUFBLE1BQzlCO0FBQ0EsVUFBSSxLQUFLLGtCQUFrQjtBQUN6QiwyQkFBbUIsS0FBSztBQUFBLE1BQzFCO0FBR0EsVUFBSSxLQUFLLHVCQUF1QjtBQUM5QixlQUFPLHdCQUF3QixLQUFLO0FBQUEsTUFDdEM7QUFDQSxVQUFJLEtBQUssaUJBQWlCO0FBQ3hCLGVBQU8sa0JBQWtCLEtBQUs7QUFBQSxNQUNoQztBQUdBLFVBQUksS0FBSyxnQkFBZ0I7QUFDdkIseUJBQWlCLEtBQUs7QUFBQSxNQUN4QjtBQUdBLFVBQUksS0FBSyxpQkFBaUI7QUFDeEIsMEJBQWtCLEVBQUUsR0FBRyxpQkFBaUIsR0FBRyxLQUFLLGdCQUFnQjtBQUFBLE1BQ2xFO0FBR0EsVUFBSSxLQUFLLFVBQVU7QUFDakIsbUJBQVcsS0FBSztBQUFBLE1BQ2xCO0FBRUEsaUNBQTJCO0FBQzNCLGFBQU87QUFBQSxJQUNULFNBQVMsT0FBTztBQUNkLE1BQUFILEtBQUksS0FBSywyQ0FBMkMsS0FBSztBQUN6RCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFLQSxXQUFTLDBCQUEwQjtBQUNqQyxRQUFJO0FBQ0YsWUFBTSxhQUFhO0FBQUEsUUFDakIsV0FBVyxLQUFLLElBQUk7QUFBQSxRQUNwQjtBQUFBLFFBQ0E7QUFBQSxRQUNBLHdCQUF3QixPQUFPO0FBQUEsUUFDL0IsdUJBQXVCLE9BQU87QUFBQSxRQUM5QixpQkFBaUIsT0FBTztBQUFBLFFBQ3hCO0FBQUEsUUFDQTtBQUFBO0FBQUEsUUFFQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFFQSxtQkFBYSxRQUFRRyxhQUFZLFVBQVUsS0FBSyxVQUFVLFVBQVUsQ0FBQztBQUFBLElBQ3ZFLFNBQVMsT0FBTztBQUNkLE1BQUFILEtBQUksS0FBSyx5Q0FBeUMsS0FBSztBQUFBLElBQ3pEO0FBQUEsRUFDRjtBQUtBLFdBQVMsYUFBYTtBQUNwQixvQkFBZ0I7QUFDaEIsV0FBTyxPQUFPRyxZQUFXLEVBQUUsUUFBUSxTQUFPLGFBQWEsV0FBVyxHQUFHLENBQUM7QUFBQSxFQUN4RTs7O0FDemZBO0FBQUE7QUFBQSwyQkFBQUM7QUFBQSxJQUFBLHdCQUFBQztBQUFBLElBQUEsa0NBQUFDO0FBQUE7QUEyQkEsTUFBSSxTQUFTO0FBUWIsaUJBQXNCQyxvQkFBbUI7QUFDdkMsUUFBSSxXQUFXLEtBQU0sUUFBTztBQUM1QixRQUFJO0FBQ0YsWUFBTSxPQUFPLE1BQU0sTUFBTSxnQkFBZ0I7QUFDekMsVUFBSSxLQUFLLElBQUk7QUFDWCxjQUFNLE9BQU8sTUFBTSxLQUFLLEtBQUs7QUFDN0IsaUJBQVMsS0FBSyxhQUFhLENBQUM7QUFBQSxNQUM5QjtBQUFBLElBQ0YsUUFBUTtBQUFBLElBRVI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQVFPLFdBQVNDLGlCQUFnQixVQUFVO0FBQ3hDLFdBQU8sU0FBVSxPQUFPLFFBQVEsS0FBSyxPQUFRO0FBQUEsRUFDL0M7QUFRTyxXQUFTQyw0QkFBMkIsTUFBTTtBQUMvQyxVQUFNLFdBQVksS0FBSyxZQUFlLGlDQUFvQztBQUMxRSxVQUFNLFdBQVksS0FBSyxlQUFlLGdDQUFvQztBQUMxRSxVQUFNLFlBQVksS0FBSyxZQUFlLFlBQVk7QUFDbEQsVUFBTSxZQUFZLEtBQUssZUFBZSxZQUFZO0FBRWxELFVBQU0sUUFBUTtBQUFBLE1BQ1osS0FBSyxXQUFjLFlBQVlDLFlBQVcsS0FBSyxRQUFRLENBQUMsZ0VBQTBFO0FBQUEsTUFDbEksS0FBSyxjQUFjLFlBQVlBLFlBQVcsS0FBSyxXQUFXLENBQUMsd0VBQXdFO0FBQUEsTUFDbkksS0FBSyxjQUFjLFlBQVlBLFlBQVcsS0FBSyxXQUFXLENBQUMsbUVBQXdFO0FBQUEsSUFDckksRUFBRSxPQUFPLE9BQU87QUFFaEIsV0FBTyxxSUFDbUQsU0FBUyxNQUFNLFFBQVEsbUVBQ3ZCLFNBQVMsTUFBTSxRQUFRLHlEQUNqQ0EsWUFBVyxLQUFLLElBQUksQ0FBQyxVQUNoRSxNQUFNLFNBQVMsNkNBQTZDLE1BQU0sSUFBSSxPQUFLLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxNQUNsSDtBQUFBLEVBQ047OztBQ25GQTtBQUFBO0FBQUEsZ0NBQUFDO0FBQUEsSUFBQTtBQUFBO0FBQUEsMkJBQUFDO0FBQUEsSUFBQTtBQUFBLHlCQUFBQztBQUFBLElBQUEsc0JBQUFDO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsMEJBQUFDO0FBQUEsSUFBQTtBQUFBO0FBQUEsd0JBQUFDO0FBQUEsSUFBQTtBQUFBO0FBQUEsMkJBQUFDO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQUFBQztBQUFBLElBQUEsNEJBQUFDO0FBQUE7QUFhQSxNQUFNQyxPQUFNLFVBQVUsU0FBUztBQWdCL0IsTUFBTSxjQUFjLENBQUM7QUFHckIsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QixNQUFJLGdCQUFnQjtBQUNwQixNQUFNLDJCQUEyQjtBQUVqQyxXQUFTLDZCQUE2QjtBQUNwQyxVQUFNLFdBQVc7QUFBQSxNQUNmLFFBQVE7QUFBQSxNQUNSLE9BQU87QUFBQSxNQUNQLGFBQWE7QUFBQSxNQUNiLFdBQVc7QUFBQSxJQUNiO0FBQ0EsUUFBSTtBQUNGLFlBQU0sTUFBTSxhQUFhLFFBQVEsd0JBQXdCO0FBQ3pELFVBQUksQ0FBQyxJQUFLLFFBQU87QUFDakIsWUFBTSxTQUFTLEtBQUssTUFBTSxHQUFHO0FBQzdCLGFBQU87QUFBQSxRQUNMLFFBQVEsS0FBSyxJQUFJLEtBQUssT0FBTyxPQUFPLFVBQVUsU0FBUyxNQUFNLENBQUM7QUFBQSxRQUM5RCxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU8sT0FBTyxTQUFTLFNBQVMsS0FBSyxDQUFDO0FBQUEsUUFDNUQsYUFBYSxLQUFLLElBQUksR0FBRyxPQUFPLE9BQU8sZUFBZSxTQUFTLFdBQVcsQ0FBQztBQUFBLFFBQzNFLFdBQVcsT0FBTyxjQUFjO0FBQUEsTUFDbEM7QUFBQSxJQUNGLFFBQVE7QUFDTixhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxXQUFTLDBCQUEwQixRQUFRO0FBQ3pDLFFBQUk7QUFDRixtQkFBYSxRQUFRLDBCQUEwQixLQUFLLFVBQVUsTUFBTSxDQUFDO0FBQUEsSUFDdkUsU0FBUyxPQUFPO0FBQ2QsTUFBQUEsS0FBSSxLQUFLLDJDQUEyQyxLQUFLO0FBQUEsSUFDM0Q7QUFBQSxFQUNGO0FBRUEsV0FBUyxxQkFBcUIsTUFBTSxLQUFLLG1CQUFtQixNQUFNO0FBQ2hFLFFBQUksb0JBQW9CLE9BQU8sa0JBQWtCO0FBQy9DLGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxTQUFTLE1BQU0sVUFBVSxHQUFHLEtBQUs7QUFDdkMsVUFBTSxTQUFTLE1BQU0sV0FBVyxHQUFHLEtBQUs7QUFDeEMsUUFBSSxXQUFXLE1BQU8sUUFBTyxpQ0FBaUMsVUFBVSxRQUFRO0FBQ2hGLFFBQUksV0FBVyxTQUFVLFFBQU8saUJBQWlCLFVBQVUsUUFBUTtBQUNuRSxRQUFJLFdBQVcsU0FBVSxRQUFPO0FBQ2hDLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyx1QkFBdUIsTUFBTSxtQkFBbUIsTUFBTTtBQUM3RCxVQUFNLGdCQUFnQjtBQUFBLE1BQ3BCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFDQSxrQkFBYyxRQUFRLENBQUMsUUFBUTtBQUM3QixZQUFNLEtBQUssU0FBUyxlQUFlLFVBQVUsR0FBRyxFQUFFO0FBQ2xELFVBQUksQ0FBQyxHQUFJO0FBQ1QsU0FBRyxjQUFjLHFCQUFxQixNQUFNLEtBQUssZ0JBQWdCO0FBQ2pFLFlBQU0sYUFBYSxvQkFBb0IsT0FBTztBQUM5QyxZQUFNLFdBQVcsUUFBUSxNQUFNLFNBQVMsR0FBRyxDQUFDO0FBQzVDLFNBQUcsTUFBTSxRQUFRLGFBQWEsWUFBYSxXQUFXLFlBQVk7QUFBQSxJQUNwRSxDQUFDO0FBQUEsRUFDSDtBQUVBLFdBQVMsbUJBQW1CLFNBQVMsT0FBTyxRQUFRO0FBQ2xELFVBQU0sS0FBSyxTQUFTLGVBQWUscUJBQXFCO0FBQ3hELFFBQUksQ0FBQyxHQUFJO0FBQ1QsT0FBRyxNQUFNLFVBQVU7QUFDbkIsUUFBSSxTQUFTLFdBQVc7QUFDdEIsU0FBRyxNQUFNLGFBQWE7QUFDdEIsU0FBRyxNQUFNLFNBQVM7QUFDbEIsU0FBRyxNQUFNLFFBQVE7QUFBQSxJQUNuQixXQUFXLFNBQVMsU0FBUztBQUMzQixTQUFHLE1BQU0sYUFBYTtBQUN0QixTQUFHLE1BQU0sU0FBUztBQUNsQixTQUFHLE1BQU0sUUFBUTtBQUFBLElBQ25CLE9BQU87QUFDTCxTQUFHLE1BQU0sYUFBYTtBQUN0QixTQUFHLE1BQU0sU0FBUztBQUNsQixTQUFHLE1BQU0sUUFBUTtBQUFBLElBQ25CO0FBQ0EsT0FBRyxjQUFjO0FBQUEsRUFDbkI7QUFFQSxXQUFTLGtDQUFrQztBQUN6QyxXQUFPO0FBQUEsTUFDTCxLQUFLO0FBQUEsUUFDSCxrQkFBa0IsU0FBUyxlQUFlLCtCQUErQixHQUFHLE9BQU8sS0FBSyxLQUFLO0FBQUEsUUFDN0YsZUFBZSxTQUFTLGVBQWUsNEJBQTRCLEdBQUcsT0FBTyxLQUFLLEtBQUs7QUFBQSxRQUN2Rix5QkFBeUIsT0FBTyxTQUFTLGVBQWUsOEJBQThCLEdBQUcsU0FBUyxHQUFHO0FBQUEsUUFDckcsYUFBYSxPQUFPLFNBQVMsZUFBZSwwQkFBMEIsR0FBRyxTQUFTLEdBQUc7QUFBQSxNQUN2RjtBQUFBLE1BQ0EsWUFBWTtBQUFBLFFBQ1YsWUFBWSxPQUFPLFNBQVMsZUFBZSx5QkFBeUIsR0FBRyxTQUFTLEVBQUU7QUFBQSxRQUNsRixrQkFBa0IsT0FBTyxTQUFTLGVBQWUsK0JBQStCLEdBQUcsU0FBUyxDQUFDO0FBQUEsUUFDN0Ysa0JBQWtCLE9BQU8sU0FBUyxlQUFlLCtCQUErQixHQUFHLFNBQVMsRUFBRTtBQUFBLFFBQzlGLHNCQUFzQixTQUFTLGVBQWUsMkJBQTJCLEdBQUcsT0FBTyxLQUFLLEtBQUs7QUFBQSxRQUM3RixTQUFTO0FBQUEsVUFDUCxVQUFVLFFBQVEsU0FBUyxlQUFlLDBCQUEwQixHQUFHLE9BQU87QUFBQSxVQUM5RSxXQUFXLFFBQVEsU0FBUyxlQUFlLDJCQUEyQixHQUFHLE9BQU87QUFBQSxVQUNoRixZQUFZLFFBQVEsU0FBUyxlQUFlLDRCQUE0QixHQUFHLE9BQU87QUFBQSxRQUNwRjtBQUFBLFFBQ0EsZ0JBQWdCLFFBQVEsU0FBUyxlQUFlLDZCQUE2QixHQUFHLE9BQU87QUFBQSxNQUN6RjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsV0FBUyw4QkFBOEI7QUFDckMsV0FBTztBQUFBLE1BQ0wsUUFBUSxPQUFPLFNBQVMsZUFBZSx3QkFBd0IsR0FBRyxTQUFTLElBQUk7QUFBQSxNQUMvRSxPQUFPLE9BQU8sU0FBUyxlQUFlLHVCQUF1QixHQUFHLFNBQVMsR0FBSztBQUFBLE1BQzlFLGFBQWEsT0FBTyxTQUFTLGVBQWUsNkJBQTZCLEdBQUcsU0FBUyxDQUFDO0FBQUEsTUFDdEYsV0FBVyxRQUFRLFNBQVMsZUFBZSxxQkFBcUIsR0FBRyxPQUFPO0FBQUEsSUFDNUU7QUFBQSxFQUNGO0FBRUEsV0FBUyxzQkFBc0IsU0FBUztBQUN0QyxVQUFNLFdBQVcsU0FBUyxZQUFZLENBQUM7QUFDdkMsVUFBTSxNQUFNLFNBQVMsT0FBTyxDQUFDO0FBQzdCLFVBQU0sYUFBYSxTQUFTLGNBQWMsQ0FBQztBQUMzQyxVQUFNLFVBQVUsV0FBVyxXQUFXLENBQUM7QUFDdkMsVUFBTSxrQkFBa0IsU0FBUyxTQUFTLEtBQUssWUFBWTtBQUMzRCxVQUFNLGVBQWUsU0FBUyxTQUFTLEtBQUssU0FBUztBQUNyRCxVQUFNLG1CQUFtQixDQUFDO0FBQzFCLFFBQUksZ0JBQWlCLGtCQUFpQixzQkFBc0IsSUFBSTtBQUNoRSxRQUFJLGFBQWMsa0JBQWlCLG1CQUFtQixJQUFJO0FBRTFELFVBQU0sV0FBVyxDQUFDLElBQUksVUFBVTtBQUM5QixZQUFNLEtBQUssU0FBUyxlQUFlLEVBQUU7QUFDckMsVUFBSSxHQUFJLElBQUcsUUFBUSxTQUFTO0FBQUEsSUFDOUI7QUFDQSxVQUFNLGFBQWEsQ0FBQyxJQUFJLFVBQVU7QUFDaEMsWUFBTSxLQUFLLFNBQVMsZUFBZSxFQUFFO0FBQ3JDLFVBQUksR0FBSSxJQUFHLFVBQVUsUUFBUSxLQUFLO0FBQUEsSUFDcEM7QUFFQSxhQUFTLGlDQUFpQyxtQkFBbUIsSUFBSSxvQkFBb0IsRUFBRTtBQUN2RixhQUFTLDhCQUE4QixnQkFBZ0IsSUFBSSxpQkFBaUIsRUFBRTtBQUM5RSxhQUFTLGdDQUFnQyxJQUFJLDJCQUEyQixHQUFHO0FBQzNFLGFBQVMsNEJBQTRCLElBQUksZUFBZSxHQUFHO0FBRTNELGFBQVMsMkJBQTJCLFdBQVcsY0FBYyxFQUFFO0FBQy9ELGFBQVMsaUNBQWlDLFdBQVcsb0JBQW9CLENBQUM7QUFDMUUsYUFBUyxpQ0FBaUMsV0FBVyxvQkFBb0IsRUFBRTtBQUMzRSxhQUFTLDZCQUE2QixXQUFXLHdCQUF3QixRQUFRO0FBRWpGLGVBQVcsNEJBQTRCLFFBQVEsUUFBUTtBQUN2RCxlQUFXLDZCQUE2QixRQUFRLFNBQVM7QUFDekQsZUFBVyw4QkFBOEIsUUFBUSxVQUFVO0FBQzNELGVBQVcsK0JBQStCLFdBQVcsY0FBYztBQUVuRSxVQUFNLGNBQWMsMkJBQTJCO0FBQy9DLGFBQVMsMEJBQTBCLFlBQVksTUFBTTtBQUNyRCxhQUFTLHlCQUF5QixZQUFZLEtBQUs7QUFDbkQsYUFBUywrQkFBK0IsWUFBWSxXQUFXO0FBQy9ELGVBQVcsdUJBQXVCLFlBQVksU0FBUztBQUV2RCwyQkFBdUIsUUFBUSxRQUFRLENBQUMsR0FBRyxnQkFBZ0I7QUFFM0QsVUFBTSxTQUFTLFNBQVMsZUFBZSxzQkFBc0I7QUFDN0QsUUFBSSxRQUFRO0FBQ1YsYUFBTyxjQUFjLFNBQVMsTUFBTSxjQUNoQyxnQkFBZ0IsUUFBUSxLQUFLLFdBQVcsS0FDeEM7QUFBQSxJQUNOO0FBQUEsRUFDRjtBQUVBLGlCQUFlLHNCQUFzQjtBQUNuQyxRQUFJO0FBQ0YseUJBQW1CLHVCQUF1QixNQUFNO0FBQ2hELFlBQU0sQ0FBQyxRQUFRLE1BQU0sSUFBSSxNQUFNLFFBQVEsSUFBSSxDQUFDLGNBQWMsR0FBR0MsYUFBWSxFQUFFLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQztBQUM3Riw0QkFBc0IsTUFBTTtBQUU1QixZQUFNLFNBQVMsU0FBUyxlQUFlLDZCQUE2QjtBQUNwRSxVQUFJLFVBQVUsT0FBUSxRQUFPLFVBQVUsUUFBUSxPQUFPLGNBQWM7QUFDcEUseUJBQW1CLG9CQUFvQixTQUFTO0FBQUEsSUFDbEQsU0FBUyxPQUFPO0FBQ2QseUJBQW1CLDRCQUE0QixNQUFNLFdBQVcsS0FBSyxJQUFJLE9BQU87QUFBQSxJQUNsRjtBQUFBLEVBQ0Y7QUFFQSxpQkFBZSxvQkFBb0I7QUFDakMsVUFBTSxVQUFVLFNBQVMsZUFBZSxtQkFBbUI7QUFDM0QsUUFBSTtBQUNGLFVBQUksU0FBUztBQUNYLGdCQUFRLFdBQVc7QUFDbkIsZ0JBQVEsY0FBYztBQUFBLE1BQ3hCO0FBQ0EseUJBQW1CLHNCQUFzQixNQUFNO0FBQy9DLFlBQU0sVUFBVSxnQ0FBZ0M7QUFDaEQsWUFBTSxnQkFBZ0IsUUFBUSxRQUFRLFlBQVksY0FBYztBQUNoRSxZQUFNLFNBQVMsTUFBTSxlQUFlLE9BQU87QUFDM0MsZ0NBQTBCLDRCQUE0QixDQUFDO0FBQ3ZELHNCQUFnQjtBQUNoQiw0QkFBc0IsTUFBTTtBQUU1QixVQUFJO0FBQ0YsY0FBTUMsU0FBUSxRQUFRLDRCQUE0QixFQUFFLGdCQUFnQixjQUFjLENBQUM7QUFBQSxNQUNyRixTQUFTQyxJQUFHO0FBQUEsTUFBa0I7QUFDOUIseUJBQW1CLGdDQUFnQyxTQUFTO0FBQUEsSUFDOUQsU0FBUyxPQUFPO0FBQ2QseUJBQW1CLDRCQUE0QixNQUFNLFdBQVcsS0FBSyxJQUFJLE9BQU87QUFBQSxJQUNsRixVQUFFO0FBQ0EsVUFBSSxTQUFTO0FBQ1gsZ0JBQVEsV0FBVztBQUNuQixnQkFBUSxjQUFjO0FBQUEsTUFDeEI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLGlCQUFlLG9CQUFvQjtBQUNqQyxVQUFNLFVBQVUsU0FBUyxlQUFlLHdCQUF3QjtBQUNoRSxRQUFJLENBQUMsUUFBUztBQUNkLFlBQVEsTUFBTSxVQUFVO0FBQ3hCLGdCQUFZLEtBQUssU0FBUyxhQUFhO0FBQ3ZDLElBQUFDLGlCQUFnQix3QkFBd0I7QUFDeEMsSUFBQUMsV0FBVSx3QkFBd0I7QUFDbEMsVUFBTSxvQkFBb0I7QUFBQSxFQUM1QjtBQUVBLFdBQVMscUJBQXFCO0FBQzVCLFVBQU0sVUFBVSxTQUFTLGVBQWUsd0JBQXdCO0FBQ2hFLFFBQUksUUFBUyxTQUFRLE1BQU0sVUFBVTtBQUNyQyxJQUFBQyxjQUFhO0FBQUEsRUFDZjtBQU9BLFdBQVMscUJBQXFCLFdBQVc7QUFDdkMsVUFBTSxxQkFBcUI7QUFBQSxNQUN6QjtBQUFBLE1BQVc7QUFBQSxNQUEwQjtBQUFBLE1BQ3JDO0FBQUEsTUFBNEI7QUFBQSxNQUM1QjtBQUFBLElBQ0YsRUFBRSxLQUFLLElBQUk7QUFDWCxXQUFPLE1BQU0sS0FBSyxVQUFVLGlCQUFpQixrQkFBa0IsQ0FBQztBQUFBLEVBQ2xFO0FBT0EsV0FBU0YsaUJBQWdCLFNBQVM7QUFDaEMsVUFBTSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzdDLFFBQUksQ0FBQyxNQUFPO0FBR1osVUFBTSxjQUFjLE1BQU0sY0FBYyw0QkFBNEIsS0FDaEQsTUFBTSxjQUFjLG9CQUFvQixLQUN4QyxNQUFNLGNBQWMsUUFBUTtBQUVoRCxRQUFJLGFBQWE7QUFFZixpQkFBVyxNQUFNLFlBQVksTUFBTSxHQUFHLEVBQUU7QUFBQSxJQUMxQztBQUFBLEVBQ0Y7QUFPQSxXQUFTQyxXQUFVLFNBQVM7QUFDMUIsVUFBTSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzdDLFFBQUksQ0FBQyxNQUFPO0FBRVosVUFBTSxvQkFBb0IscUJBQXFCLEtBQUs7QUFDcEQsUUFBSSxrQkFBa0IsV0FBVyxFQUFHO0FBRXBDLFVBQU0sZUFBZSxrQkFBa0IsQ0FBQztBQUN4QyxVQUFNLGNBQWMsa0JBQWtCLGtCQUFrQixTQUFTLENBQUM7QUFFbEUsVUFBTSxXQUFXLENBQUMsTUFBTTtBQUN0QixVQUFJLEVBQUUsUUFBUSxNQUFPO0FBRXJCLFlBQU0sVUFBVSxFQUFFO0FBQ2xCLFlBQU0sV0FBVyxTQUFTO0FBRTFCLFVBQUksU0FBUztBQUNYLFlBQUksYUFBYSxjQUFjO0FBQzdCLFlBQUUsZUFBZTtBQUNqQixzQkFBWSxNQUFNO0FBQUEsUUFDcEI7QUFBQSxNQUNGLE9BQU87QUFDTCxZQUFJLGFBQWEsYUFBYTtBQUM1QixZQUFFLGVBQWU7QUFDakIsdUJBQWEsTUFBTTtBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxhQUFTLGlCQUFpQixXQUFXLFFBQVE7QUFDN0Msb0JBQWdCLEtBQUssUUFBUTtBQUFBLEVBQy9CO0FBS0EsV0FBU0MsZ0JBQWU7QUFDdEIsVUFBTSxLQUFLLFlBQVksSUFBSTtBQUMzQixRQUFJLE1BQU0sT0FBTyxHQUFHLFVBQVUsV0FBWSxJQUFHLE1BQU07QUFFbkQsVUFBTSxXQUFXLGdCQUFnQixJQUFJO0FBQ3JDLFFBQUksU0FBVSxVQUFTLG9CQUFvQixXQUFXLFFBQVE7QUFBQSxFQUNoRTtBQUVBLFdBQVNDLGdCQUFlLElBQUk7QUFDMUIsZ0JBQVksS0FBSyxNQUFNLFNBQVMsYUFBYTtBQUFBLEVBQy9DO0FBR0EsTUFBTSxhQUFhO0FBQUEsSUFDakIsS0FBZ0IsQ0FBQyxPQUFPLFFBQVE7QUFBQSxJQUNoQyxVQUFnQixDQUFDLFVBQVU7QUFBQSxJQUMzQixnQkFBZ0IsQ0FBQyxTQUFTLGFBQWEsY0FBYyxjQUFjLGlCQUFpQix1QkFBdUIsa0JBQWtCLGtCQUFrQix1QkFBdUIsV0FBVztBQUFBLElBQ2pMLFNBQWdCLENBQUMsU0FBUztBQUFBLElBQzFCLE9BQWdCLENBQUMsT0FBTztBQUFBLElBQ3hCLFFBQWdCLENBQUMsUUFBUTtBQUFBLElBQ3pCLFVBQWdCLENBQUMsa0JBQWtCLFVBQVU7QUFBQSxJQUM3QyxjQUFnQixDQUFDLGNBQWM7QUFBQSxJQUMvQixXQUFnQixDQUFDLFdBQVc7QUFBQSxJQUM1QixnQkFBZ0IsQ0FBQyxnQkFBZ0I7QUFBQSxJQUNqQyxXQUFnQixDQUFDLFdBQVc7QUFBQSxJQUM1QixTQUFnQixDQUFDLFNBQVM7QUFBQSxFQUM1QjtBQVNBLFdBQVNDLGVBQWMsU0FBUyxFQUFFLGVBQWUsTUFBTSxjQUFjLFVBQVUsU0FBUyxNQUFNLElBQUksQ0FBQyxHQUFHO0FBQ3BHLFdBQU8sSUFBSSxRQUFRLGFBQVc7QUFDNUIsWUFBTSxnQkFBZ0IsU0FBUztBQUcvQixVQUFJLFVBQVUsU0FBUyxlQUFlLHdCQUF3QjtBQUM5RCxVQUFJLENBQUMsU0FBUztBQUNaLGtCQUFVLFNBQVMsY0FBYyxLQUFLO0FBQ3RDLGdCQUFRLEtBQUs7QUFDYixnQkFBUSxNQUFNLFVBQ1o7QUFFRixnQkFBUSxZQUNOO0FBV0YsaUJBQVMsS0FBSyxZQUFZLE9BQU87QUFBQSxNQUNuQztBQUVBLFlBQU0sUUFBWSxTQUFTLGVBQWUsbUJBQW1CO0FBQzdELFlBQU0sWUFBWSxTQUFTLGVBQWUsdUJBQXVCO0FBQ2pFLFlBQU0sUUFBWSxTQUFTLGVBQWUsb0JBQW9CO0FBRTlELFlBQU0sY0FBdUI7QUFDN0IsWUFBTSxjQUF1QjtBQUM3QixnQkFBVSxjQUFtQjtBQUM3QixZQUFNLE1BQU0sYUFBaUIsU0FBUyxZQUFZO0FBRWxELGNBQVEsTUFBTSxVQUFVO0FBQ3hCLFlBQU0sTUFBTTtBQUdaLFlBQU1ILGFBQVksQ0FBQyxNQUFNO0FBQ3ZCLFlBQUksRUFBRSxRQUFRLE1BQU87QUFDckIsVUFBRSxlQUFlO0FBQ2pCLGNBQU0sVUFBVSxTQUFTO0FBQ3pCLFlBQUksRUFBRSxVQUFVO0FBQ2QsV0FBQyxZQUFZLFlBQVksUUFBUSxXQUFXLE1BQU07QUFBQSxRQUNwRCxPQUFPO0FBQ0wsV0FBQyxZQUFZLFFBQVEsWUFBWSxPQUFPLE1BQU07QUFBQSxRQUNoRDtBQUFBLE1BQ0Y7QUFDQSxjQUFRLGlCQUFpQixXQUFXQSxVQUFTO0FBRTdDLFlBQU0sU0FBUyxDQUFDLFdBQVc7QUFDekIsZ0JBQVEsTUFBTSxVQUFVO0FBQ3hCLGdCQUFRLG9CQUFvQixXQUFXQSxVQUFTO0FBRWhELGNBQU0sWUFBWSxNQUFNLFVBQVUsSUFBSSxDQUFDO0FBQ3ZDLGtCQUFVLFlBQVksVUFBVSxVQUFVLElBQUksQ0FBQztBQUMvQyxZQUFJLGlCQUFpQixPQUFPLGNBQWMsVUFBVSxZQUFZO0FBQzlELHdCQUFjLE1BQU07QUFBQSxRQUN0QjtBQUNBLGdCQUFRLE1BQU07QUFBQSxNQUNoQjtBQUdBLGNBQVEsaUJBQWlCLFdBQVcsQ0FBQyxNQUFNO0FBQUUsWUFBSSxFQUFFLFFBQVEsU0FBVSxRQUFPLEtBQUs7QUFBQSxNQUFHLEdBQUcsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUdyRyxlQUFTLGVBQWUsbUJBQW1CLEVBQUUsaUJBQWlCLFNBQWEsTUFBTSxPQUFPLElBQUksR0FBSSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQzlHLGVBQVMsZUFBZSx1QkFBdUIsRUFBRSxpQkFBaUIsU0FBUyxNQUFNLE9BQU8sS0FBSyxHQUFHLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDOUcsY0FBUSxpQkFBaUIsU0FBUyxPQUFLO0FBQUUsWUFBSSxFQUFFLFdBQVcsUUFBUyxRQUFPLEtBQUs7QUFBQSxNQUFHLEdBQUcsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUFBLElBQ3JHLENBQUM7QUFBQSxFQUNIO0FBU0EsV0FBUyxzQkFBc0I7QUFFN0IsYUFBUyxpQkFBaUIsTUFBTSxFQUFFLFFBQVEsU0FBTztBQUMvQyxVQUFJLGlCQUFpQixTQUFTLENBQUMsTUFBTTtBQUNuQyxjQUFNLFVBQVUsRUFBRSxPQUFPLEdBQUcsUUFBUSxRQUFRLEVBQUU7QUFDOUMsa0JBQVUsT0FBTztBQUFBLE1BQ25CLENBQUM7QUFHRCxVQUFJLGlCQUFpQixXQUFXLENBQUMsTUFBTTtBQUVyQyxZQUFJLEVBQUUsUUFBUSxXQUFXLEVBQUUsUUFBUSxLQUFLO0FBQ3RDLFlBQUUsZUFBZTtBQUNqQixZQUFFLE9BQU8sTUFBTTtBQUNmO0FBQUEsUUFDRjtBQUVBLFlBQUksQ0FBQyxhQUFhLGNBQWMsUUFBUSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRztBQUM5RCxZQUFFLGVBQWU7QUFDakIsZ0JBQU0sT0FBTyxNQUFNLEtBQUssU0FBUyxpQkFBaUIsb0NBQW9DLENBQUM7QUFDdkYsZ0JBQU0sZUFBZSxLQUFLLFFBQVEsRUFBRSxNQUFNO0FBRTFDLGNBQUk7QUFDSixjQUFJLEVBQUUsUUFBUSxlQUFlLEVBQUUsUUFBUSxRQUFRO0FBQzdDLHNCQUFVLEVBQUUsUUFBUSxTQUFTLEtBQUssQ0FBQyxJQUFJLE1BQU0sZUFBZSxJQUFJLEtBQUssVUFBVSxLQUFLLE1BQU07QUFBQSxVQUM1RixPQUFPO0FBQ0wsc0JBQVUsRUFBRSxRQUFRLFFBQVEsS0FBSyxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sZUFBZSxLQUFLLEtBQUssTUFBTTtBQUFBLFVBQzNGO0FBRUEsY0FBSSxTQUFTO0FBQ1gsb0JBQVEsTUFBTTtBQUNkLG9CQUFRLE1BQU07QUFBQSxVQUNoQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNILENBQUM7QUFHRCxVQUFNLGVBQWUsU0FBUyxlQUFlLGVBQWU7QUFDNUQsUUFBSSxjQUFjO0FBQ2hCLG1CQUFhLGlCQUFpQixZQUFZLENBQUMsTUFBTTtBQUMvQyxZQUFJLEVBQUUsUUFBUSxXQUFXLENBQUMsRUFBRSxVQUFVO0FBQ3BDLFlBQUUsZUFBZTtBQUNqQixjQUFJLE9BQU8sV0FBVyxnQkFBZ0IsWUFBWTtBQUNoRCx1QkFBVyxZQUFZO0FBQUEsVUFDekI7QUFBQSxRQUNGO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUdBLGFBQVMsaUJBQWlCLFdBQVcsQ0FBQyxNQUFNO0FBQzFDLFVBQUksRUFBRSxRQUFRLFVBQVU7QUFDdEIsdUJBQWU7QUFBQSxNQUNqQjtBQUFBLElBQ0YsQ0FBQztBQUdELGFBQVMsaUJBQWlCLGlCQUFpQixFQUFFLFFBQVEsV0FBUztBQUM1RCxZQUFNLGlCQUFpQixTQUFTLENBQUMsTUFBTTtBQUNyQyxZQUFJLEVBQUUsV0FBVyxPQUFPO0FBQ3RCLHFCQUFXLE1BQU0sRUFBRTtBQUFBLFFBQ3JCO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSCxDQUFDO0FBQUEsRUFDSDtBQU9BLFdBQVNJLGdCQUFlLEtBQUs7QUFDM0IsZUFBVyxDQUFDLE9BQU8sSUFBSSxLQUFLLE9BQU8sUUFBUSxVQUFVLEdBQUc7QUFDdEQsVUFBSSxLQUFLLFNBQVMsR0FBRyxFQUFHLFFBQU87QUFBQSxJQUNqQztBQUNBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxrQkFBa0I7QUFDekIsVUFBTSxZQUFZQyxjQUFhLGNBQWM7QUFDN0MsV0FBT0QsZ0JBQWUsU0FBUyxLQUFLLHdCQUF3QkMsY0FBYSxTQUFTLENBQUM7QUFBQSxFQUNyRjtBQUtBLFdBQVMseUJBQXlCO0FBQ2hDLFVBQU0sU0FBVSxTQUFTLGVBQWUsU0FBUztBQUNqRCxVQUFNLFVBQVUsU0FBUyxlQUFlLGlCQUFpQjtBQUN6RCxVQUFNLFdBQVcsU0FBUyxlQUFlLGtCQUFrQjtBQUMzRCxRQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxTQUFVO0FBQ3RDLFlBQVEsTUFBTSxVQUFXLE9BQU8sYUFBYSxJQUFJLEtBQUs7QUFDdEQsYUFBUyxNQUFNLFVBQVUsT0FBTyxhQUFhLE9BQU8sY0FBYyxPQUFPLGNBQWMsSUFBSSxLQUFLO0FBQUEsRUFDbEc7QUFNQSxXQUFTQyxzQkFBcUIsT0FBTztBQUNuQyxVQUFNLFlBQVksV0FBVyxLQUFLLEtBQUssQ0FBQztBQUN4QyxhQUFTLGlCQUFpQixNQUFNLEVBQUUsUUFBUSxTQUFPO0FBQy9DLFVBQUksTUFBTSxVQUFVLFVBQVUsU0FBUyxJQUFJLFFBQVEsR0FBRyxJQUFJLEtBQUs7QUFBQSxJQUNqRSxDQUFDO0FBRUQsVUFBTSxTQUFTLFNBQVMsZUFBZSxTQUFTO0FBQ2hELFFBQUksT0FBUSxRQUFPLGFBQWE7QUFDaEMsMkJBQXVCO0FBQUEsRUFDekI7QUFZQSxXQUFTLGFBQWE7QUFDcEIsVUFBTSxrQkFBa0IsU0FBUyxjQUFjLG1CQUFtQjtBQUNsRSxVQUFNLGFBQWEsU0FBUyxjQUFjLGNBQWM7QUFFeEQsUUFBSSxpQkFBaUI7QUFDbkIsWUFBTSxjQUFjLGdCQUFnQixVQUFVLE9BQU8sV0FBVztBQUNoRSxVQUFJLFlBQVk7QUFDZCxtQkFBVyxNQUFNLE9BQU8sY0FBYyxhQUFhO0FBQUEsTUFDckQ7QUFFQSxZQUFNLFlBQVksU0FBUyxlQUFlLGFBQWE7QUFDdkQsVUFBSSxXQUFXO0FBQ2Isa0JBQVUsYUFBYSxpQkFBaUIsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUM1RCxrQkFBVSxhQUFhLGNBQWMsY0FBYyxzQkFBc0IscUJBQXFCO0FBQUEsTUFDaEc7QUFDQSxVQUFJO0FBQ0YscUJBQWEsUUFBUUMsYUFBWSxnQkFBZ0IsV0FBVztBQUFBLE1BQzlELFNBQVMsR0FBRztBQUNWLFFBQUFaLEtBQUksS0FBSywyQkFBMkI7QUFBQSxNQUN0QztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBTUEsV0FBUyxVQUFVLFNBQVM7QUFDMUIsVUFBTSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzdDLFFBQUksT0FBTztBQUVULGtCQUFZLEtBQUssU0FBUyxhQUFhO0FBRXZDLFlBQU0sVUFBVSxJQUFJLFNBQVM7QUFDN0IsWUFBTSxhQUFhLGVBQWUsT0FBTztBQUV6QyxlQUFTLEtBQUssTUFBTSxXQUFXO0FBRy9CLE1BQUFJLGlCQUFnQixPQUFPO0FBQ3ZCLE1BQUFDLFdBQVUsT0FBTztBQUFBLElBQ25CO0FBQUEsRUFDRjtBQU1BLFdBQVMsV0FBVyxTQUFTO0FBQzNCLFVBQU0sUUFBUSxTQUFTLGVBQWUsT0FBTztBQUM3QyxRQUFJLE9BQU87QUFDVCxVQUFJLE1BQU0sUUFBUSxvQkFBb0IsSUFBSztBQUMzQyxZQUFNLFVBQVUsT0FBTyxTQUFTO0FBQ2hDLFlBQU0sYUFBYSxlQUFlLE1BQU07QUFFeEMsVUFBSSxDQUFDLFNBQVMsY0FBYyx5QkFBeUIsR0FBRztBQUN0RCxpQkFBUyxLQUFLLE1BQU0sV0FBVztBQUFBLE1BQ2pDO0FBRUEsTUFBQUMsY0FBYTtBQUFBLElBQ2Y7QUFBQSxFQUNGO0FBS0EsV0FBUyxpQkFBaUI7QUFDeEIsYUFBUyxpQkFBaUIsaUJBQWlCLEVBQUUsUUFBUSxXQUFTO0FBQzVELFVBQUksTUFBTSxRQUFRLG9CQUFvQixJQUFLO0FBQzNDLFlBQU0sVUFBVSxPQUFPLFNBQVM7QUFDaEMsWUFBTSxhQUFhLGVBQWUsTUFBTTtBQUN4QyxVQUFJLE1BQU0sTUFBTSxXQUFXLE1BQU0sTUFBTSxZQUFZLFFBQVE7QUFDekQsY0FBTSxNQUFNLFVBQVU7QUFBQSxNQUN4QjtBQUFBLElBQ0YsQ0FBQztBQUNELGFBQVMsS0FBSyxNQUFNLFdBQVc7QUFFL0IsSUFBQUEsY0FBYTtBQUFBLEVBQ2Y7QUFJQSxNQUFJLGFBQWE7QUFDakIsTUFBSSxrQkFBa0I7QUFDdEIsTUFBSSwwQkFBMEIsb0JBQUksSUFBSTtBQUN0QyxNQUFJLHdCQUF3QjtBQUM1QixNQUFJLHFCQUFxQjtBQUN6QixNQUFJLHlCQUF5QjtBQUM3QixNQUFJLHdCQUF3QjtBQUM1QixNQUFJLHdCQUF3QjtBQUM1QixNQUFJLG1CQUFtQjtBQUN2QixNQUFJLCtCQUErQjtBQUduQyxXQUFTLDRCQUE0QjtBQUNuQyxRQUFJO0FBQ0YsWUFBTSxRQUFRLGFBQWEsUUFBUU0sYUFBWSxRQUFRO0FBQ3ZELGFBQU8sUUFBUyxLQUFLLE1BQU0sS0FBSyxLQUFLLENBQUMsSUFBSyxDQUFDO0FBQUEsSUFDOUMsUUFBUTtBQUNOLGFBQU8sQ0FBQztBQUFBLElBQ1Y7QUFBQSxFQUNGO0FBRUEsV0FBUyx5QkFBeUIsT0FBTztBQUN2QyxRQUFJO0FBQ0YsWUFBTSxTQUFTLDBCQUEwQjtBQUN6QyxtQkFBYSxRQUFRQSxhQUFZLFVBQVUsS0FBSyxVQUFVLEVBQUUsR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFBQSxJQUNwRixTQUFTLEdBQUc7QUFDVixNQUFBWixLQUFJLEtBQUssZ0RBQWdELENBQUM7QUFBQSxJQUM1RDtBQUFBLEVBQ0Y7QUFFQSxXQUFTLG1CQUFtQixVQUFVLE9BQU87QUFDM0MsUUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFPO0FBQ3pCLFVBQU0sU0FBUywwQkFBMEI7QUFDekMsVUFBTSxXQUFXLE1BQU0sUUFBUSxPQUFPLFlBQVksSUFBSSxPQUFPLGVBQWUsQ0FBQztBQUM3RSxVQUFNLFdBQVcsU0FBUyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssYUFBYSxZQUFZLEtBQUssVUFBVSxNQUFNO0FBQ2hHLGFBQVMsUUFBUSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBQ3BDLDZCQUF5QixFQUFFLGNBQWMsU0FBUyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFBQSxFQUNqRTtBQUVBLFdBQVNhLHNCQUFxQixNQUFNQyxPQUFNLE9BQU8sSUFBSSxVQUFVLElBQUk7QUFDakUsVUFBTSxPQUFPLFNBQVMsZUFBZSxpQkFBaUI7QUFDdEQsVUFBTSxRQUFRLFNBQVMsZUFBZSxrQkFBa0I7QUFDeEQsVUFBTSxTQUFTLFNBQVMsZUFBZSxpQkFBaUI7QUFDeEQsUUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFPO0FBRXJCLFVBQU0sVUFBVTtBQUFBLE1BQ2QsZUFBZTtBQUFBLE1BQ2YsaUJBQWlCO0FBQUEsTUFDakIsU0FBUztBQUFBLElBQ1g7QUFDQSxVQUFNLGlCQUFpQixRQUFRLElBQUksS0FBSyxRQUFRO0FBQ2hELFVBQU0saUJBQWlCO0FBQUEsTUFDckIsY0FBYztBQUFBLE1BQ2QsWUFBWTtBQUFBLE1BQ1osWUFBWTtBQUFBLE1BQ1osV0FBVztBQUFBLE1BQ1gsaUJBQWlCO0FBQUEsTUFDakIsZ0JBQWdCO0FBQUEsTUFDaEIsYUFBYTtBQUFBLE1BQ2IsT0FBTztBQUFBLElBQ1Q7QUFDQSxTQUFLLFVBQVUsT0FBTyxpQkFBaUIsbUJBQW1CLFdBQVcsZ0JBQWdCLGNBQWMsY0FBYyxhQUFhLGlCQUFpQixnQkFBZ0IsZUFBZSxPQUFPO0FBQ3JMLFFBQUksZUFBZ0IsTUFBSyxVQUFVLElBQUksY0FBYztBQUNyRCxVQUFNLGNBQWNBO0FBQ3BCLFVBQU0sYUFBYTtBQUFBLE1BQ2pCLGNBQWM7QUFBQSxNQUNkLFlBQVk7QUFBQSxNQUNaLFlBQVk7QUFBQSxNQUNaLFdBQVc7QUFBQSxNQUNYLGlCQUFpQjtBQUFBLE1BQ2pCLGdCQUFnQjtBQUFBLE1BQ2hCLGFBQWE7QUFBQSxNQUNiLE9BQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxXQUFXLFFBQVEsV0FBVyxjQUFjLEtBQUs7QUFDdkQsUUFBSSxPQUFRLFFBQU8sY0FBYztBQUNqQyxVQUFNLGNBQWMsV0FBVyxlQUFlLGNBQWMsS0FBSztBQUNqRSxTQUFLLFFBQVE7QUFDYixRQUFJLE9BQVEsUUFBTyxRQUFRO0FBQzNCLFVBQU0sUUFBUTtBQUFBLEVBQ2hCO0FBRUEsaUJBQWUsb0JBQW9CO0FBQ2pDLFFBQUksc0JBQXVCO0FBQzNCLDRCQUF3QjtBQUN4QixRQUFJO0FBQ0YsbUJBQWEsTUFBTVosU0FBUSxPQUFPLFlBQVk7QUFFOUMsVUFBSTtBQUNGLGNBQU0sUUFBUSxhQUFhLFFBQVFVLGFBQVksUUFBUTtBQUN2RCxZQUFJLE9BQU87QUFDVCxnQkFBTSxTQUFTLEtBQUssTUFBTSxLQUFLO0FBQy9CLGNBQUksVUFBVSxFQUFFLGNBQWMsV0FBVyxhQUFhLE9BQU8sc0JBQXNCO0FBQ2pGLHlCQUFhLGNBQWMsQ0FBQztBQUM1Qix1QkFBVyxXQUFXLE9BQU87QUFBQSxVQUMvQjtBQUNBLGNBQUksVUFBVSxFQUFFLGNBQWMsV0FBVyxVQUFVLE9BQU8sa0JBQWtCO0FBQzFFLHlCQUFhLGNBQWMsQ0FBQztBQUM1Qix1QkFBVyxRQUFRLE9BQU87QUFBQSxVQUM1QjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLFNBQVMsR0FBRztBQUNWLFFBQUFaLEtBQUksS0FBSyxpREFBaUQsQ0FBQztBQUFBLE1BQzdEO0FBQ0EsWUFBTSxRQUFRLFNBQVMsZUFBZSxxQkFBcUI7QUFDM0QsVUFBSSxPQUFPO0FBQ1QsY0FBTSxPQUFRLFdBQVc7QUFDekIsY0FBTSxRQUFRLFdBQVcsU0FBUztBQUNsQyxjQUFNLGNBQWMsT0FBTyxHQUFHLElBQUksU0FBTSxLQUFLLEtBQUs7QUFBQSxNQUNwRDtBQUNBLFVBQUksY0FBYyxXQUFXLFVBQVU7QUFDckMsa0NBQTBCLG9CQUFJLElBQUksQ0FBQyxXQUFXLFFBQVEsQ0FBQztBQUN2RCxRQUFBYSxzQkFBcUIsY0FBYyxHQUFHLFdBQVcsUUFBUSxhQUFhO0FBQUEsTUFDeEUsT0FBTztBQUNMLFFBQUFBLHNCQUFxQixnQkFBZ0IsZ0JBQWdCO0FBQUEsTUFDdkQ7QUFBQSxJQUNGLFNBQVMsR0FBRztBQUNWLE1BQUFiLEtBQUksS0FBSyw4QkFBOEIsQ0FBQztBQUFBLElBQzFDLFVBQUU7QUFDQSw4QkFBd0I7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLG9CQUFvQixVQUFVLFlBQVk7QUFDakQsVUFBTSxZQUFZLFdBQVcsSUFBSSxRQUFRO0FBQ3pDLFdBQU8sWUFBWSxnQkFBZ0I7QUFBQSxFQUNyQztBQUVBLFdBQVMsc0JBQXNCLFVBQVU7QUFDdkMsVUFBTSxhQUFhO0FBQUEsTUFDakIsaUJBQWlCO0FBQUEsTUFDakIsU0FBUztBQUFBLE1BQ1QsUUFBUTtBQUFBLE1BQ1IsZUFBZTtBQUFBLElBQ2pCO0FBQ0EsUUFBSSxXQUFXLFFBQVEsRUFBRyxRQUFPLFdBQVcsUUFBUTtBQUNwRCxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMseUJBQXlCLE1BQU07QUFDdEMsVUFBTSxTQUFTLDBCQUEwQjtBQUN6QyxVQUFNLFVBQVUsTUFBTSxRQUFRLE9BQU8sWUFBWSxJQUFJLE9BQU8sZUFBZSxDQUFDO0FBQzVFLFVBQU0sU0FBUyxDQUFDO0FBRWhCLGVBQVcsVUFBVSxTQUFTO0FBQzVCLFlBQU0sTUFBTSxLQUFLLEtBQUssQ0FBQyxRQUFRLElBQUksYUFBYSxPQUFPLFlBQVksSUFBSSxVQUFVLE9BQU8sS0FBSztBQUM3RixVQUFJLElBQUssUUFBTyxLQUFLLEdBQUc7QUFBQSxJQUMxQjtBQUVBLFVBQU0sVUFBVSxDQUFDLEdBQUcsSUFBSSxFQUNyQixLQUFLLENBQUMsR0FBR2UsT0FBTTtBQUNkLFlBQU0sS0FBSyxPQUFPLEVBQUUsc0JBQXNCLEdBQUc7QUFDN0MsWUFBTSxLQUFLLE9BQU9BLEdBQUUsc0JBQXNCLEdBQUc7QUFDN0MsVUFBSSxPQUFPLEdBQUksUUFBTyxLQUFLO0FBQzNCLFlBQU0sS0FBSyxPQUFPLEVBQUUsa0JBQWtCLENBQUM7QUFDdkMsWUFBTSxLQUFLLE9BQU9BLEdBQUUsa0JBQWtCLENBQUM7QUFDdkMsYUFBTyxLQUFLO0FBQUEsSUFDZCxDQUFDO0FBRUgsZUFBVyxRQUFRLFNBQVM7QUFDMUIsVUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxhQUFhLEtBQUssWUFBWSxFQUFFLFVBQVUsS0FBSyxLQUFLLEdBQUc7QUFDL0UsZUFBTyxLQUFLLElBQUk7QUFBQSxNQUNsQjtBQUFBLElBQ0Y7QUFFQSxXQUFPLE9BQU8sTUFBTSxHQUFHLENBQUM7QUFBQSxFQUMxQjtBQUVBLFdBQVMsc0JBQXNCLE1BQU07QUFDbkMsVUFBTSxVQUFVLFNBQVMsZUFBZSxrQkFBa0I7QUFDMUQsUUFBSSxDQUFDLFFBQVM7QUFDZCxZQUFRLFlBQVk7QUFFcEIsVUFBTSxhQUFhLHlCQUF5QixRQUFRLENBQUMsQ0FBQztBQUN0RCxlQUFXLFFBQVEsWUFBWTtBQUM3QixZQUFNLFdBQVcsS0FBSyxhQUFhLFlBQVksWUFBWSxLQUFLLFVBQVUsWUFBWTtBQUN0RixZQUFNLFNBQVMsU0FBUyxjQUFjLFFBQVE7QUFDOUMsYUFBTyxZQUFZO0FBQ25CLGFBQU8sTUFBTSxVQUFVO0FBQ3ZCLGFBQU8sTUFBTSxXQUFXO0FBQ3hCLGFBQU8sTUFBTSxhQUFhLFdBQVcsWUFBWTtBQUNqRCxhQUFPLE1BQU0sUUFBUSxXQUFXLFlBQVk7QUFDNUMsYUFBTyxNQUFNLGNBQWMsV0FBVyxZQUFZO0FBQ2xELGFBQU8sUUFBUSxHQUFHLEtBQUssUUFBUSxTQUFNLEtBQUssS0FBSztBQUMvQyxhQUFPLGNBQWMsR0FBRyxLQUFLLFFBQVEsU0FBTSxLQUFLLEtBQUs7QUFDckQsYUFBTyxpQkFBaUIsU0FBUyxZQUFZO0FBQzNDLGNBQU0sU0FBUyxLQUFLLE9BQU8sS0FBSyxRQUFRO0FBQUEsTUFDMUMsQ0FBQztBQUNELGNBQVEsWUFBWSxNQUFNO0FBQUEsSUFDNUI7QUFBQSxFQUNGO0FBRUEsV0FBUyx5QkFBeUI7QUFDaEMsVUFBTSxPQUFPLFNBQVMsZUFBZSx1QkFBdUI7QUFDNUQsVUFBTSxTQUFTLFNBQVMsZUFBZSxxQkFBcUI7QUFDNUQsVUFBTSxTQUFTLFNBQVMsZUFBZSxvQkFBb0I7QUFDM0QsUUFBSSxLQUFNLE1BQUssTUFBTSxVQUFVLHdCQUF3QixLQUFLO0FBQzVELFFBQUksT0FBUSxRQUFPLE1BQU0sVUFBVSx3QkFBd0IsS0FBSztBQUNoRSxRQUFJLE9BQVEsUUFBTyxjQUFjLHdCQUF3QixzQkFBc0I7QUFBQSxFQUNqRjtBQUVBLFdBQVMsK0JBQStCO0FBQ3RDLDRCQUF3QixDQUFDO0FBQ3pCLDJCQUF1QjtBQUFBLEVBQ3pCO0FBS0EsaUJBQWUsZ0JBQWdCLFVBQVU7QUFDdkMsVUFBTSxVQUFhLFNBQVMsZUFBZSx5QkFBeUI7QUFDcEUsVUFBTSxXQUFhLFNBQVMsZUFBZSxzQkFBc0I7QUFDakUsVUFBTSxXQUFhLFNBQVMsZUFBZSx5QkFBeUI7QUFDcEUsVUFBTSxXQUFhLFNBQVMsZUFBZSxzQkFBc0I7QUFDakUsVUFBTSxZQUFhLFNBQVMsZUFBZSx1QkFBdUI7QUFFbEUsUUFBSSxDQUFDLFFBQVM7QUFHZCxRQUFJLFNBQVcsVUFBUyxNQUFNLFVBQVc7QUFDekMsUUFBSSxTQUFXLFVBQVMsTUFBTSxVQUFXO0FBQ3pDLFFBQUksU0FBVyxVQUFTLFFBQVE7QUFDaEMsUUFBSSxVQUFXLFdBQVUsY0FBYztBQUV2QyxRQUFJLENBQUMsVUFBVTtBQUNiLGNBQVEsWUFBWTtBQUNwQjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFdBQVc7QUFDZixRQUFJO0FBQ0YsWUFBTSxPQUFPLE1BQU0sTUFBTSxrQ0FBa0M7QUFDM0QsVUFBSSxLQUFLLElBQUk7QUFDWCxjQUFNLE9BQU8sTUFBTSxLQUFLLEtBQUs7QUFDN0Isb0JBQVksS0FBSyxhQUFhLENBQUMsR0FBRyxRQUFRLEtBQUs7QUFBQSxNQUNqRDtBQUFBLElBQ0YsUUFBUTtBQUFBLElBQWtCO0FBRTFCLFVBQU0sV0FBYSxVQUFVLGFBQWM7QUFDM0MsVUFBTSxRQUFhLFVBQVUsU0FBYztBQUMzQyxVQUFNLFdBQWEsVUFBVSxhQUFjO0FBQzNDLFVBQU0sWUFBYSxVQUFVLGVBQWU7QUFDNUMsVUFBTSxRQUFhLFVBQVUsVUFBYztBQUMzQyxVQUFNLFNBQWEsVUFBVSxVQUFjO0FBQzNDLFVBQU0sU0FBYSxVQUFVLFdBQWM7QUFDM0MsVUFBTSxXQUFhLFVBQVUsVUFBYztBQUUzQyxVQUFNLGFBQWEsUUFDZix1S0FDQTtBQUdKLFFBQUksY0FBYztBQUNsQixRQUFJLGNBQWM7QUFDbEIsUUFBSSxXQUFXLE9BQU87QUFDcEIsb0JBQWMsaUNBQWlDLFVBQVUsUUFBUTtBQUNqRSxvQkFBYyw2QkFBNkIsTUFBTTtBQUFBLElBR25ELFdBQVcsV0FBVyxVQUFVO0FBQzlCLG9CQUFjLHNCQUFzQixVQUFVLFFBQVE7QUFDdEQsb0JBQWMseUJBQXlCLE1BQU07QUFBQSxJQUcvQyxXQUFXLFdBQVcsVUFBVTtBQUM5QixvQkFBYztBQUNkLG9CQUFjO0FBQUEsSUFDaEI7QUFFQSxVQUFNLFdBQVcsY0FDYixpQ0FBaUNDLFlBQVcsV0FBVyxDQUFDLCtMQUV4RDtBQUVKLFVBQU0sa0JBQWtCLGNBQ3BCLHVEQUF1RCxXQUFXLFlBQVksU0FBUyxNQUFNQSxZQUFXLFdBQVcsQ0FBQyxHQUFHLFFBQVEsWUFDL0g7QUFJSixVQUFNLGFBQWEsV0FBVyxRQUFRLHlCQUF5QjtBQUMvRCxVQUFNLFlBQWEsU0FDZixHQUFHLFVBQVUsVUFBVUEsWUFBVyxNQUFNLENBQUMsWUFDekM7QUFDSixVQUFNLGlCQUFpQixXQUNuQix1TEFDeUMsU0FBUyw0SEFFckIsVUFBVSx5REFDdkM7QUFFSixVQUFNLGFBQWEsWUFDZixZQUFZQSxZQUFXLFNBQVMsQ0FBQyxnR0FDakM7QUFFSixZQUFRLFlBQ04sOENBQ2FBLFlBQVcsS0FBSyxDQUFDLGFBQWEsVUFBVSxHQUFHLGVBQWUsTUFDdEUsYUFBYSxxQ0FBcUMsVUFBVSxZQUFZLE1BQ3pFLFlBQ0MsV0FBVyw4REFBOERBLFlBQVcsUUFBUSxDQUFDLFNBQVMsTUFDdkc7QUFFRixRQUFJLGFBQWEsV0FBVztBQUMxQixVQUFJLFVBQVU7QUFDWixpQkFBUyxNQUFNLFVBQVU7QUFDekIsWUFBSSxVQUFVO0FBR1osbUJBQVMsV0FBVztBQUNwQixtQkFBUyxNQUFNLFVBQVU7QUFDekIsbUJBQVMsY0FBYyxRQUFRLDJDQUEyQztBQUMxRSxtQkFBUyxRQUFRLFdBQVc7QUFBQSxRQUM5QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLFdBQVcsYUFBYSxlQUFlO0FBQ3JDLFVBQUksVUFBVTtBQUNaLGlCQUFTLE1BQU0sVUFBVTtBQUN6QixjQUFNLDBCQUEwQjtBQUFBLE1BQ2xDO0FBQUEsSUFDRixXQUFXLGFBQWEsT0FBTztBQUM3QixjQUFRLGFBQ047QUFBQSxJQUdKLE9BQU87QUFDTCxjQUFRLGFBQ047QUFBQSxJQUVKO0FBQUEsRUFDRjtBQUVBLGlCQUFlLDRCQUE0QjtBQUN6QyxVQUFNLFdBQVcsU0FBUyxlQUFlLG1CQUFtQjtBQUM1RCxVQUFNLFdBQVksU0FBUyxlQUFlLHNCQUFzQjtBQUNoRSxVQUFNLFlBQVksU0FBUyxlQUFlLHVCQUF1QjtBQUNqRSxVQUFNLFNBQVksU0FBUyxlQUFlLGlCQUFpQjtBQUMzRCxVQUFNLFNBQVksU0FBUyxlQUFlLGlCQUFpQjtBQUMzRCxRQUFJLENBQUMsU0FBVTtBQUVmLFFBQUksT0FBUyxRQUFPLGNBQWM7QUFDbEMsUUFBSSxPQUFTLFFBQU8sTUFBTSxVQUFVO0FBRXBDLFFBQUk7QUFDRixZQUFNLEtBQUssTUFBTSxNQUFNLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO0FBQzNFLFVBQUksR0FBRyxlQUFlO0FBQ3BCLGlCQUFTLGNBQWM7QUFDdkIsWUFBSSxTQUFVLFVBQVMsTUFBTSxVQUFVO0FBQ3ZDLFlBQUksVUFBVyxXQUFVLE1BQU0sVUFBVTtBQUN6QyxRQUFBSCxzQkFBcUIsaUJBQWlCLGVBQWU7QUFBQSxNQUN2RCxXQUFXLEdBQUcsU0FBUztBQUNyQixpQkFBUyxjQUFjO0FBQ3ZCLFlBQUksU0FBVSxVQUFTLE1BQU0sVUFBVTtBQUN2QyxZQUFJLFVBQVcsV0FBVSxNQUFNLFVBQVU7QUFDekMsUUFBQUEsc0JBQXFCLFdBQVcsd0JBQXdCLFFBQUc7QUFBQSxNQUM3RCxPQUFPO0FBQ0wsaUJBQVMsY0FBYztBQUN2QixZQUFJLFNBQVUsVUFBUyxNQUFNLFVBQVU7QUFDdkMsWUFBSSxVQUFXLFdBQVUsTUFBTSxVQUFVO0FBQ3pDLFFBQUFBLHNCQUFxQixtQkFBbUIsMkJBQTJCO0FBQUEsTUFDckU7QUFBQSxJQUNGLFFBQVE7QUFDTixlQUFTLGNBQWM7QUFBQSxJQUN6QjtBQUFBLEVBQ0Y7QUFFQSxpQkFBZSxxQkFBcUI7QUFDbEMsVUFBTSxXQUFZLFNBQVMsZUFBZSxzQkFBc0I7QUFDaEUsVUFBTSxZQUFZLFNBQVMsZUFBZSx1QkFBdUI7QUFDakUsVUFBTSxXQUFZLFVBQVUsU0FBUyxZQUFZO0FBQ2pELFVBQU0sU0FBYSxVQUFVLFNBQVMsSUFBSSxLQUFLO0FBRS9DLFFBQUksQ0FBQyxPQUFPO0FBQ1YsVUFBSSxXQUFXO0FBQUUsa0JBQVUsY0FBYztBQUE2QixrQkFBVSxNQUFNLFFBQVE7QUFBQSxNQUFXO0FBQ3pHO0FBQUEsSUFDRjtBQUNBLFFBQUksQ0FBQyxVQUFVO0FBQ2IsVUFBSSxXQUFXO0FBQUUsa0JBQVUsY0FBYztBQUF5QixrQkFBVSxNQUFNLFFBQVE7QUFBQSxNQUFXO0FBQ3JHO0FBQUEsSUFDRjtBQUVBLFFBQUksV0FBVztBQUFFLGdCQUFVLGNBQWM7QUFBVyxnQkFBVSxNQUFNLFFBQVE7QUFBQSxJQUFXO0FBQ3ZGLFFBQUk7QUFDRixZQUFNWCxTQUFRLFFBQVEsNkJBQTZCLEVBQUUsVUFBVSxXQUFXLE1BQU0sQ0FBQztBQUNqRixVQUFJLFNBQVcsVUFBUyxRQUFRO0FBQ2hDLFVBQUksV0FBVztBQUNiLGtCQUFVLGNBQWM7QUFDeEIsa0JBQVUsTUFBTSxRQUFRO0FBQUEsTUFDMUI7QUFFQSxZQUFNLGdCQUFnQixRQUFRO0FBQUEsSUFDaEMsU0FBUyxHQUFHO0FBQ1YsVUFBSSxXQUFXO0FBQUUsa0JBQVUsY0FBYyxVQUFVLEVBQUUsV0FBVyxDQUFDO0FBQUksa0JBQVUsTUFBTSxRQUFRO0FBQUEsTUFBVztBQUFBLElBQzFHO0FBQUEsRUFDRjtBQUVBLFdBQVMseUJBQXlCO0FBQ2hDLFVBQU0sUUFBUyxTQUFTLGVBQWUsc0JBQXNCO0FBQzdELFVBQU0sU0FBUyxTQUFTLGVBQWUsdUJBQXVCO0FBQzlELFFBQUksQ0FBQyxNQUFPO0FBQ1osVUFBTSxXQUFXLE1BQU0sU0FBUztBQUNoQyxVQUFNLE9BQU8sV0FBVyxTQUFTO0FBQ2pDLFFBQUksT0FBUSxRQUFPLGNBQWMsV0FBVyxjQUFPO0FBQUEsRUFDckQ7QUFFQSxpQkFBZSw2QkFBNkI7QUFDMUMsVUFBTSxXQUFXLFNBQVMsZUFBZSxtQkFBbUI7QUFDNUQsVUFBTSxTQUFTLFNBQVMsZUFBZSxpQkFBaUI7QUFDeEQsVUFBTSxTQUFTLFNBQVMsZUFBZSxpQkFBaUI7QUFDeEQsUUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBUTtBQUVyQyx5QkFBcUIseUNBQXlDO0FBQzlELFFBQUk7QUFDRixZQUFNLFVBQVUsTUFBTSxNQUFNLDJCQUEyQixFQUFFLFFBQVEsT0FBTyxDQUFDO0FBQ3pFLFVBQUksQ0FBQyxRQUFRLEdBQUksT0FBTSxJQUFJLE1BQU0sTUFBTSxRQUFRLEtBQUssQ0FBQztBQUNyRCxZQUFNLE9BQU8sTUFBTSxRQUFRLEtBQUs7QUFFaEMsYUFBTyxjQUFjLEtBQUssYUFBYTtBQUN2QyxhQUFPLE9BQU8sS0FBSyxvQkFBb0I7QUFDdkMsYUFBTyxNQUFNLFVBQVU7QUFDdkIsZUFBUyxjQUFjO0FBQ3ZCLGFBQU8sS0FBSyxPQUFPLE1BQU0sUUFBUTtBQUVqQyxZQUFNLE1BQU0sMEJBQTBCLEVBQUUsUUFBUSxPQUFPLENBQUM7QUFDeEQsTUFBQVcsc0JBQXFCLFdBQVcsd0JBQXdCLFFBQUc7QUFDM0QsVUFBSSxzQkFBdUIsZUFBYyxxQkFBcUI7QUFDOUQsOEJBQXdCLFlBQVksWUFBWTtBQUM5QyxZQUFJO0FBQ0YsZ0JBQU0sS0FBSyxNQUFNLE1BQU0sMEJBQTBCLEVBQUUsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDM0UsY0FBSSxHQUFHLGVBQWU7QUFDcEIsMEJBQWMscUJBQXFCO0FBQ25DLG9DQUF3QjtBQUN4QixrQkFBTSwwQkFBMEI7QUFBQSxVQUNsQztBQUFBLFFBQ0YsUUFBUTtBQUFBLFFBRVI7QUFBQSxNQUNGLEdBQUcsR0FBSTtBQUFBLElBQ1QsU0FBUyxPQUFPO0FBQ2QsZUFBUyxjQUFjLHNCQUFzQixNQUFNLFdBQVcsS0FBSztBQUFBLElBQ3JFLFVBQUU7QUFDQSwyQkFBcUI7QUFBQSxJQUN2QjtBQUFBLEVBQ0Y7QUFFQSxpQkFBZSw4QkFBOEI7QUFDM0MsVUFBTSxNQUFNLDRCQUE0QixFQUFFLFFBQVEsT0FBTyxDQUFDO0FBQzFELFVBQU0sMEJBQTBCO0FBQUEsRUFDbEM7QUFFQSxXQUFTLHlCQUF5QjtBQUNoQyxVQUFNLFFBQVEsU0FBUyxlQUFlLHFCQUFxQjtBQUMzRCxRQUFJLENBQUMsTUFBTztBQUNaLFVBQU0sVUFBVSxNQUFNO0FBQ3BCLFVBQUksbUJBQW1CLE9BQU8sZ0JBQWdCLFdBQVcsWUFBWTtBQUNuRSx3QkFBZ0IsT0FBTyxNQUFNLFNBQVMsRUFBRSxFQUFFLEtBQUs7QUFBQSxNQUNqRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsV0FBUywwQkFBMEI7QUFDakMsVUFBTSxTQUFTLFNBQVMsZUFBZSxxQkFBcUI7QUFDNUQsUUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFZO0FBRTVCLFVBQU0sWUFBWSxNQUFNLFFBQVEsV0FBVyxTQUFTLElBQ2hELFdBQVcsWUFDWCxNQUFNLEtBQUssSUFBSSxLQUFLLFdBQVcsY0FBYyxDQUFDLEdBQUcsSUFBSSxPQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLO0FBQ2pHLFVBQU0sYUFBYSxJQUFJLElBQUksV0FBVyx1QkFBdUIsQ0FBQyxDQUFDO0FBRS9ELFFBQUksQ0FBQyw4QkFBOEI7QUFDakMscUNBQStCLFdBQVcsWUFBWSxVQUFVLENBQUMsS0FBSztBQUFBLElBQ3hFO0FBQ0EsUUFBSSw4QkFBOEI7QUFDaEMsZ0NBQTBCLG9CQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztBQUFBLElBQ2xFO0FBR0EsV0FBTyxpQkFBaUIsNEJBQTRCLEVBQUUsUUFBUSxRQUFNO0FBQ2xFLGFBQU8sV0FBVyxTQUFTLFlBQVksRUFBRSxHQUFHLFFBQVE7QUFBQSxJQUN0RCxDQUFDO0FBRUQsV0FBTyxZQUFZO0FBQ25CLGNBQVUsUUFBUSxjQUFZO0FBQzVCLFlBQU0sVUFBVSxhQUFhO0FBQzdCLFlBQU0sY0FBYyxvQkFBb0IsVUFBVSxVQUFVO0FBQzVELFlBQU0sT0FBTyxnQkFBZ0IsUUFBUTtBQUVyQyxZQUFNLFFBQVEsU0FBUyxjQUFjLE9BQU87QUFDNUMsWUFBTSxNQUFNLFVBQVU7QUFDdEIsWUFBTSxZQUNKLDJEQUEyREcsWUFBVyxRQUFRLENBQUMsS0FBSyxVQUFVLFlBQVksRUFBRSw4QkFDbkdBLFlBQVcsc0JBQXNCLFFBQVEsQ0FBQyxDQUFDLHlEQUNGQSxZQUFXLFdBQVcsQ0FBQztBQUczRSxVQUFJLE1BQU07QUFDUixjQUFNLE1BQU0sU0FBUyxjQUFjLFFBQVE7QUFDM0MsWUFBSSxPQUFPO0FBQ1gsWUFBSSxhQUFhLGNBQWMsZUFBZTtBQUM5QyxZQUFJLGFBQWEsa0JBQWtCLFNBQVM7QUFDNUMsWUFBSSxhQUFhLG1CQUFtQixPQUFPO0FBQzNDLFlBQUksYUFBYSxxQkFBcUIsT0FBTztBQUM3QyxZQUFJLGFBQWEsZ0JBQWdCLE1BQU07QUFDdkMsWUFBSSxhQUFhLHFCQUFxQixNQUFNO0FBQzVDLFlBQUksYUFBYSxtQkFBbUIsMkJBQTJCLElBQUksQ0FBQztBQUNwRSxZQUFJLE1BQU0sVUFBVTtBQUNwQixZQUFJLGNBQWM7QUFFbEIsWUFBSSxpQkFBaUIsU0FBUyxPQUFLLEVBQUUsZ0JBQWdCLENBQUM7QUFDdEQsY0FBTSxZQUFZLEdBQUc7QUFHckIsOEJBQXNCLE1BQU07QUFDMUIsY0FBSSxPQUFPLFdBQVcsU0FBUztBQUM3QixnQkFBSSxPQUFPLFVBQVUsUUFBUSxLQUFLLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFBQSxVQUN2RDtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFFQSxZQUFNLFdBQVcsTUFBTSxjQUFjLE9BQU87QUFDNUMsZUFBUyxpQkFBaUIsVUFBVSxNQUFNO0FBQ3hDLFlBQUksQ0FBQyxTQUFTLFFBQVM7QUFDdkIsdUNBQStCO0FBQy9CLGtDQUEwQixvQkFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzVDLDhCQUFzQjtBQUFBLE1BQ3hCLENBQUM7QUFFRCxhQUFPLFlBQVksS0FBSztBQUFBLElBQzFCLENBQUM7QUFFRCwwQkFBc0I7QUFBQSxFQUN4QjtBQUVBLFdBQVMscUJBQXFCLFNBQVM7QUFDckMsVUFBTSxVQUFVLFNBQVMsZUFBZSwyQkFBMkI7QUFDbkUsVUFBTSxZQUFZLFNBQVMsZUFBZSwyQkFBMkI7QUFDckUsUUFBSSxVQUFXLFdBQVUsY0FBYyxXQUFXO0FBQ2xELFFBQUksUUFBUyxTQUFRLE1BQU0sVUFBVTtBQUFBLEVBQ3ZDO0FBRUEsV0FBUyx1QkFBdUI7QUFDOUIsVUFBTSxVQUFVLFNBQVMsZUFBZSwyQkFBMkI7QUFDbkUsUUFBSSxRQUFTLFNBQVEsTUFBTSxVQUFVO0FBQUEsRUFDdkM7QUFFQSxXQUFTLG9CQUFvQixNQUFNO0FBQ2pDLHVCQUFtQixDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxTQUFTLElBQUksSUFBSSxPQUFPO0FBQ3hELFVBQU0sUUFBUTtBQUFBLE1BQ1osR0FBRyxTQUFTLGVBQWUscUJBQXFCO0FBQUEsTUFDaEQsR0FBRyxTQUFTLGVBQWUsaUJBQWlCO0FBQUEsTUFDNUMsR0FBRyxTQUFTLGVBQWUsbUJBQW1CO0FBQUEsTUFDOUMsR0FBRyxTQUFTLGVBQWUsb0JBQW9CO0FBQUEsSUFDakQ7QUFDQSxXQUFPLFFBQVEsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNO0FBQzNDLFVBQUksR0FBSSxJQUFHLE1BQU0sVUFBVSxPQUFPLEdBQUcsTUFBTSxtQkFBbUIsS0FBSztBQUFBLElBQ3JFLENBQUM7QUFDRCxRQUFJLHFCQUFxQixHQUFHO0FBQzFCLHNCQUFnQiw0QkFBNEI7QUFBQSxJQUM5QztBQUNBLDBCQUFzQjtBQUFBLEVBQ3hCO0FBRUEsV0FBUyxnQ0FBZ0M7QUFDdkMsS0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLFlBQVk7QUFDaEMsWUFBTSxTQUFTLFNBQVMsZUFBZSx1QkFBdUIsT0FBTyxFQUFFO0FBQ3ZFLFVBQUksQ0FBQyxPQUFRO0FBQ2IsWUFBTSxVQUFVLE9BQU8sY0FBYyx1QkFBdUI7QUFDNUQsYUFBTyxVQUFVLE9BQU8sYUFBYSxlQUFlLGFBQWE7QUFDakUsVUFBSSxVQUFVLGtCQUFrQjtBQUM5QixlQUFPLFVBQVUsSUFBSSxhQUFhO0FBQ2xDLGVBQU8sYUFBYSxnQkFBZ0IsT0FBTztBQUMzQyxZQUFJLFFBQVMsU0FBUSxjQUFjO0FBQUEsTUFDckMsV0FBVyxZQUFZLGtCQUFrQjtBQUN2QyxlQUFPLFVBQVUsSUFBSSxXQUFXO0FBQ2hDLGVBQU8sYUFBYSxnQkFBZ0IsTUFBTTtBQUMxQyxZQUFJLFFBQVMsU0FBUSxjQUFjLE9BQU8sT0FBTztBQUFBLE1BQ25ELE9BQU87QUFDTCxlQUFPLFVBQVUsSUFBSSxhQUFhO0FBQ2xDLGVBQU8sYUFBYSxnQkFBZ0IsT0FBTztBQUMzQyxZQUFJLFFBQVMsU0FBUSxjQUFjLE9BQU8sT0FBTztBQUFBLE1BQ25EO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUVBLFdBQVMsd0JBQXdCO0FBQy9CLFVBQU0sWUFBYSxTQUFTLGVBQWUseUJBQXlCO0FBQ3BFLFVBQU0sVUFBYSxTQUFTLGVBQWUsdUJBQXVCO0FBQ2xFLFVBQU0sVUFBYSxTQUFTLGVBQWUsdUJBQXVCO0FBQ2xFLFVBQU0sVUFBYSxTQUFTLGVBQWUsZ0JBQWdCO0FBQzNELFVBQU0sYUFBYSxTQUFTLGVBQWUscUJBQXFCO0FBQ2hFLFVBQU0sU0FBYSxTQUFTLGNBQWMsc0JBQXNCO0FBRWhFLGtDQUE4QjtBQUU5QixRQUFJLFdBQVc7QUFDYixZQUFNLFNBQVM7QUFBQSxRQUNiLEdBQUc7QUFBQSxRQUNILEdBQUc7QUFBQSxRQUNILEdBQUc7QUFBQSxRQUNILEdBQUc7QUFBQSxNQUNMO0FBQ0EsZ0JBQVUsY0FBYyxPQUFPLGdCQUFnQixLQUFLO0FBQUEsSUFDdEQ7QUFFQSxRQUFJLFNBQVM7QUFDWCxjQUFRLFdBQVcscUJBQXFCO0FBQ3hDLGNBQVEsTUFBTSxVQUFVLHFCQUFxQixJQUFJLFNBQVM7QUFBQSxJQUM1RDtBQUVBLFFBQUksU0FBUztBQUNYLGNBQVEsTUFBTSxVQUFXLHFCQUFxQixLQUFLLHFCQUFxQixJQUFLLEtBQUs7QUFDbEYsY0FBUSxXQUFXLHFCQUFxQixLQUFLLENBQUM7QUFDOUMsY0FBUSxjQUFjLHFCQUFxQixJQUFJLFNBQVM7QUFBQSxJQUMxRDtBQUNBLFFBQUksUUFBWSxTQUFRLE1BQU0sVUFBYSxxQkFBcUIsSUFBSSxLQUFLO0FBQ3pFLFFBQUksV0FBWSxZQUFXLE1BQU0sVUFBVSxxQkFBcUIsSUFBSSxLQUFLO0FBQ3pFLFFBQUksT0FBUSxRQUFPLE1BQU0saUJBQWtCLHFCQUFxQixJQUFJLFdBQVc7QUFBQSxFQUNqRjtBQUVBLGlCQUFlLGlDQUFpQztBQUM5QyxRQUFJLENBQUMsNkJBQThCLFFBQU87QUFFMUMsVUFBTSxZQUFZLFNBQVMsZUFBZSxzQkFBc0I7QUFDaEUsUUFBSSxXQUFXO0FBQ2IsZ0JBQVUsTUFBTSxVQUFVO0FBQzFCLGdCQUFVLE1BQU0sUUFBUTtBQUN4QixnQkFBVSxZQUFZO0FBQUEsSUFDeEI7QUFFQSx5QkFBcUIsOEJBQThCO0FBQ25ELFFBQUk7QUFDRixnQ0FBMEIsb0JBQUksSUFBSSxDQUFDLDRCQUE0QixDQUFDO0FBQ2hFLGlCQUFXLFdBQVc7QUFDdEIsWUFBTSxpQ0FBaUM7QUFDdkMsVUFBSSxXQUFXO0FBQ2Isa0JBQVUsTUFBTSxVQUFVO0FBQzFCLGtCQUFVLGNBQWM7QUFBQSxNQUMxQjtBQUNBLGFBQU87QUFBQSxJQUNULFNBQVMsT0FBTztBQUNkLE1BQUFoQixLQUFJLEtBQUssZ0RBQWdELEtBQUs7QUFDOUQsVUFBSSxXQUFXO0FBQ2Isa0JBQVUsTUFBTSxVQUFVO0FBQzFCLGtCQUFVLGNBQWM7QUFDeEIsa0JBQVUsTUFBTSxRQUFRO0FBQUEsTUFDMUI7QUFDQSxhQUFPO0FBQUEsSUFDVCxVQUFFO0FBQ0EsMkJBQXFCO0FBQUEsSUFDdkI7QUFBQSxFQUNGO0FBRUEsaUJBQWUsaUJBQWlCO0FBQzlCLFFBQUkscUJBQXFCLEdBQUc7QUFDMUIsVUFBSSxDQUFDLDZCQUE4QjtBQUNuQywwQkFBb0IsQ0FBQztBQUNyQjtBQUFBLElBQ0Y7QUFDQSxRQUFJLHFCQUFxQixHQUFHO0FBQzFCLFlBQU0sU0FBUyxNQUFNLCtCQUErQjtBQUNwRCxVQUFJLENBQUMsT0FBUTtBQUNiLDBCQUFvQixDQUFDO0FBQUEsSUFDdkI7QUFBQSxFQUNGO0FBRUEsV0FBUyxxQkFBcUI7QUFDNUIsUUFBSSxxQkFBcUIsR0FBRztBQUFFLDBCQUFvQixDQUFDO0FBQUc7QUFBQSxJQUFRO0FBQzlELFFBQUkscUJBQXFCLEdBQUc7QUFBRSwwQkFBb0IsQ0FBQztBQUFHO0FBQUEsSUFBUTtBQUM5RCxRQUFJLHFCQUFxQixHQUFHO0FBQUUsMEJBQW9CLENBQUM7QUFBQSxJQUFHO0FBQUEsRUFDeEQ7QUFFQSxpQkFBZSxtQ0FBbUM7QUFDaEQsUUFBSSxDQUFDLFdBQVk7QUFDakIsUUFBSSxvQkFBb0I7QUFDdEIsK0JBQXlCO0FBQ3pCO0FBQUEsSUFDRjtBQUNBLHlCQUFxQjtBQUVyQixRQUFJO0FBQ0YsWUFBTSxXQUFXLE1BQU0sS0FBSyx1QkFBdUI7QUFDbkQsVUFBSSxDQUFDLFNBQVMsUUFBUTtBQUNwQixrQ0FBMEIsb0JBQUksSUFBSSxDQUFDLFdBQVcsUUFBUSxDQUFDO0FBQUEsTUFDekQ7QUFFQSxZQUFNLGlCQUFpQixtQkFBbUIsTUFBTSxLQUFLLHVCQUF1QixFQUFFLEtBQUssR0FBRyxDQUFDO0FBQ3ZGLFlBQU0sVUFBVSxNQUFNRSxTQUFRLE9BQU8sZ0NBQWdDLGNBQWMsRUFBRTtBQUNyRixpQkFBVyxhQUFhLFFBQVEsY0FBYyxDQUFDO0FBQy9DLGlCQUFXLHFCQUFxQixRQUFRLHNCQUFzQixXQUFXO0FBQ3pFLGlCQUFXLGlCQUFpQixRQUFRLGtCQUFrQixXQUFXO0FBQ2pFLFVBQUksTUFBTSxRQUFRLFFBQVEsU0FBUyxLQUFLLFFBQVEsVUFBVSxRQUFRO0FBQ2hFLG1CQUFXLFlBQVksUUFBUTtBQUFBLE1BQ2pDO0FBQ0EsVUFBSSxNQUFNLFFBQVEsUUFBUSxtQkFBbUIsR0FBRztBQUM5QyxtQkFBVyxzQkFBc0IsUUFBUTtBQUFBLE1BQzNDO0FBQUEsSUFDRixTQUFTLE9BQU87QUFDZCxNQUFBRixLQUFJLEtBQUssMkRBQTJELEtBQUs7QUFBQSxJQUMzRSxVQUFFO0FBQ0EsMkJBQXFCO0FBQUEsSUFDdkI7QUFFQSw0QkFBd0I7QUFDeEIscUJBQWlCO0FBRWpCLFFBQUksd0JBQXdCO0FBQzFCLCtCQUF5QjtBQUN6QixZQUFNLGlDQUFpQztBQUFBLElBQ3pDO0FBQUEsRUFDRjtBQUVBLGlCQUFlLGlCQUFpQjtBQUM5QixVQUFNLFVBQVUsU0FBUyxlQUFlLHFCQUFxQjtBQUM3RCxRQUFJLENBQUMsUUFBUztBQUVkLFFBQUksQ0FBQyxZQUFZO0FBQ2YsWUFBTSxrQkFBa0I7QUFBQSxJQUMxQjtBQUNBLFVBQU0saUJBQWlCO0FBQ3ZCLFFBQUksQ0FBQyw4QkFBOEI7QUFDakMscUNBQStCLFlBQVksWUFBWTtBQUFBLElBQ3pEO0FBQ0EsVUFBTSxpQkFBaUIsU0FBUyxlQUFlLHVCQUF1QjtBQUN0RSxRQUFJLGdCQUFnQjtBQUNsQixxQkFBZSxjQUFjO0FBQUEsSUFDL0I7QUFDQSw0QkFBd0I7QUFDeEIsMkJBQXVCO0FBQ3ZCLDJCQUF1QjtBQUN2Qix3QkFBb0IsQ0FBQztBQUNyQix5QkFBcUI7QUFDckIsWUFBUSxNQUFNLFVBQVU7QUFDeEIsZ0JBQVksS0FBSyxTQUFTLGFBQWE7QUFDdkMsSUFBQUksaUJBQWdCLHFCQUFxQjtBQUNyQyxJQUFBQyxXQUFVLHFCQUFxQjtBQUFBLEVBQ2pDO0FBRUEsV0FBU1ksbUJBQWtCO0FBQ3pCLFVBQU0sVUFBVSxTQUFTLGVBQWUscUJBQXFCO0FBQzdELFFBQUksUUFBUyxTQUFRLE1BQU0sVUFBVTtBQUNyQyx3QkFBb0IsQ0FBQztBQUNyQix5QkFBcUI7QUFDckIsUUFBSSx1QkFBdUI7QUFDekIsb0JBQWMscUJBQXFCO0FBQ25DLDhCQUF3QjtBQUFBLElBQzFCO0FBQ0EsSUFBQVgsY0FBYTtBQUFBLEVBQ2Y7QUFFQSxXQUFTLDBCQUEwQixJQUFJLFVBQVU7QUFDL0MsT0FBRyxVQUFVLE9BQU8sb0JBQW9CLFFBQVE7QUFDaEQsT0FBRyxNQUFNLFVBQVUsV0FDZix5REFDQTtBQUVKLFVBQU0sUUFBUSxHQUFHLGFBQWEsWUFBWSxLQUFLO0FBQy9DLFVBQU0sWUFBWSxHQUFHLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDeEMsUUFBSSxXQUFXO0FBQ2IsZ0JBQVUsWUFBWSxHQUFHVSxZQUFXLEtBQUssQ0FBQyxNQUN2QyxXQUFXLDJFQUEyRTtBQUFBLElBQzNGO0FBQUEsRUFDRjtBQUVBLFdBQVMsMkJBQTJCO0FBQ2xDLFVBQU0sUUFBUSxTQUFTLGVBQWUsa0JBQWtCO0FBQ3hELFFBQUksQ0FBQyxTQUFTLENBQUMsV0FBWTtBQUUzQixVQUFNLGlCQUFpQixXQUFXO0FBQ2xDLFVBQU0sY0FBYyxXQUFXO0FBQy9CLFVBQU0saUJBQWlCLElBQUksRUFBRSxRQUFRLFFBQU07QUFDekMsWUFBTSxXQUNKLEdBQUcsYUFBYSxlQUFlLE1BQU0sa0JBQ3JDLEdBQUcsYUFBYSxZQUFZLE1BQU07QUFFcEMsZ0NBQTBCLElBQUksUUFBUTtBQUFBLElBQ3hDLENBQUM7QUFBQSxFQUNIO0FBRUEsV0FBUyxtQkFBbUI7QUFDMUIsVUFBTSxRQUFRLFNBQVMsZUFBZSxrQkFBa0I7QUFDeEQsVUFBTSxRQUFRLFNBQVMsZUFBZSxrQkFBa0I7QUFDeEQsUUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFZO0FBRTNCLFVBQU0sa0JBQWtCLFdBQVc7QUFDbkMsVUFBTSxlQUFrQixXQUFXO0FBR25DLFFBQUksT0FBTztBQUNULFlBQU0sTUFBTTtBQUNaLFlBQU0sWUFDSiwrREFDZ0IsR0FBRyw2QkFDSCxHQUFHLDBCQUNILEdBQUcsOENBQ0gsR0FBRyxtR0FDSCxHQUFHLHFHQUNILEdBQUcsZ0lBQ0gsR0FBRywyQkFDSCxHQUFHO0FBQUEsSUFFdkI7QUFHQSxRQUFJLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLFVBQVUsWUFBWSxjQUFjLEdBQUc7QUFDcEYsVUFBSTtBQUNGLDBCQUFrQixFQUFFLGNBQWMsRUFBRSxVQUFVO0FBQzlDLHdCQUFnQixRQUFRO0FBQUEsTUFDMUIsU0FBUyxHQUFHO0FBQ1YsUUFBQWhCLEtBQUksS0FBSyxnRUFBZ0UsQ0FBQztBQUFBLE1BQzVFLFVBQUU7QUFDQSwwQkFBa0I7QUFBQSxNQUNwQjtBQUFBLElBQ0Y7QUFHQSxRQUFJLE9BQVEsV0FBVyxjQUFjLFdBQVcsV0FBVyxTQUN2RCxXQUFXLFdBQVcsT0FBTyxPQUFLLEVBQUUsS0FBSyxLQUN4QyxXQUFXLGFBQWEsQ0FBQyxHQUFHO0FBQUEsTUFBSSxPQUMvQixPQUFPLE1BQU0sV0FDVCxFQUFFLEdBQUcsR0FBRyxVQUFVLGdCQUFnQixJQUNsQyxFQUFFLE9BQU8sR0FBRyxVQUFVLGdCQUFnQjtBQUFBLElBQzVDO0FBRUosMEJBQXNCLElBQUk7QUFDMUIsVUFBTSxZQUFZO0FBQ2xCLFVBQU0sU0FBVTtBQUNoQixVQUFNLFVBQVUsQ0FBQWtCLE9BQU1BLE1BQUssT0FBUSxNQUFNLE9BQU9BLEVBQUMsRUFBRSxRQUFRQSxLQUFJLElBQUksSUFBSSxDQUFDLElBQUk7QUFDNUUsVUFBTSxlQUFlLFlBQVU7QUFDN0IsVUFBSSxXQUFXLGlCQUFpQjtBQUM5QixlQUFPO0FBQUEsTUFDVDtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxZQUFZLE9BQUs7QUFDckIsVUFBSSxNQUFNLGVBQWU7QUFDdkIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUNBLFVBQU0sVUFBVSxDQUFBQSxPQUFLO0FBQ25CLFVBQUlBLE1BQUssS0FBTSxRQUFPO0FBQ3RCLFVBQUlBLE9BQU0sRUFBSyxRQUFPO0FBQ3RCLGFBQU8sT0FBT0EsRUFBQyxFQUFFLFFBQVFBLEtBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJO0FBQUEsSUFDbEQ7QUFFQSxTQUFLLFFBQVEsVUFBUTtBQUNuQixZQUFNLFdBQWEsS0FBSyxZQUFZO0FBQ3BDLFlBQU1DLEtBQWEsS0FBSztBQUN4QixZQUFNLE1BQWEsS0FBSyxpQkFBaUIsT0FBTyxLQUFLLGNBQWMsRUFBRSxlQUFlLElBQUk7QUFDeEYsWUFBTSxTQUFhLEtBQUssVUFBVTtBQUNsQyxZQUFNLGNBQWMsS0FBSyxnQkFBZ0I7QUFDekMsWUFBTSxRQUFhLEtBQUssU0FBUztBQUNqQyxZQUFNLGFBQWMsYUFBYSxtQkFBbUJBLE9BQU07QUFFMUQsWUFBTSxLQUFLLFNBQVMsY0FBYyxJQUFJO0FBQ3RDLFNBQUcsYUFBYSxpQkFBaUIsUUFBUTtBQUN6QyxTQUFHLGFBQWEsY0FBY0EsRUFBQztBQUMvQixnQ0FBMEIsSUFBSSxVQUFVO0FBQ3hDLFNBQUcsaUJBQWlCLGFBQWEsTUFBTTtBQUNyQyxZQUFJLENBQUMsR0FBRyxVQUFVLFNBQVMsa0JBQWtCLEVBQUcsSUFBRyxNQUFNLGFBQWE7QUFBQSxNQUN4RSxDQUFDO0FBQ0QsU0FBRyxpQkFBaUIsWUFBWSxNQUFNO0FBQ3BDLFlBQUksQ0FBQyxHQUFHLFVBQVUsU0FBUyxrQkFBa0IsRUFBRyxJQUFHLE1BQU0sYUFBYTtBQUFBLE1BQ3hFLENBQUM7QUFFRCxTQUFHLFlBQ0QsY0FBYyxNQUFNLHdDQUF3Q0gsWUFBVyxzQkFBc0IsUUFBUSxDQUFDLENBQUMsbUJBQ3pGLE1BQU0sS0FBS0EsWUFBV0csRUFBQyxDQUFDLG1CQUN4QixNQUFNLDhFQUE4RSxHQUFHLG1CQUN2RixNQUFNLDhFQUE4RSxRQUFRLEtBQUssVUFBVSxDQUFDLEdBQUcsYUFBYSxXQUFXLENBQUMsbUJBQ3hJLE1BQU0sOEVBQThFLFFBQVEsS0FBSyxXQUFXLENBQUMsR0FBRyxhQUFhLFdBQVcsQ0FBQyxtQkFDekksTUFBTSw4RUFBOEUsUUFBUSxLQUFLLGtCQUFrQixDQUFDLG1CQUNwSCxNQUFNLHlCQUF5QixVQUFVLE1BQU0sQ0FBQyxtQkFDaEQsTUFBTSxvQkFBb0JILFlBQVcsS0FBSyxDQUFDO0FBQzNELFlBQU0sWUFBWSxFQUFFO0FBQUEsSUFDdEIsQ0FBQztBQUdELFVBQU0sVUFBVSxPQUFPSSxXQUFVO0FBQy9CLFlBQU0sS0FBS0EsT0FBTSxPQUFPLFFBQVEsSUFBSTtBQUNwQyxVQUFJLENBQUMsR0FBSTtBQUNULFlBQU0sV0FBVyxHQUFHLGFBQWEsZUFBZTtBQUNoRCxZQUFNLFFBQVEsR0FBRyxhQUFhLFlBQVk7QUFDMUMsVUFBSSxDQUFDLE1BQU87QUFHWixTQUFHLE1BQU0sVUFBVTtBQUNuQixZQUFNLFlBQVksR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLFVBQUksV0FBVztBQUNiLGtCQUFVLFlBQ1IsZ0lBQWdJSixZQUFXLEtBQUssQ0FBQztBQUFBLE1BQ3JKO0FBQ0EsWUFBTSxTQUFTLFNBQVMsZUFBZSxtQkFBbUI7QUFDMUQsVUFBSSxRQUFRO0FBQ1YsZUFBTyxNQUFNLFVBQVU7QUFDdkIsZUFBTyxNQUFNLFFBQVU7QUFDdkIsZUFBTyxZQUNMLDhJQUE4SUEsWUFBVyxLQUFLLENBQUM7QUFBQSxNQUNuSztBQUVBLFlBQU0sU0FBUyxPQUFPLFFBQVE7QUFBQSxJQUNoQztBQUdBLFFBQUksT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsV0FBVztBQUN0Qyx3QkFBa0IsRUFBRSxjQUFjLEVBQUUsVUFBVTtBQUFBLFFBQzVDLFFBQVE7QUFBQSxRQUNSLFdBQVc7QUFBQSxRQUNYLE1BQU07QUFBQSxRQUNOLGVBQWU7QUFBQSxRQUNmLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFBQSxRQUM5QixXQUFXO0FBQUEsUUFDWCxVQUFVLEVBQUUsUUFBUSxVQUFVO0FBQUEsUUFDOUIsY0FBYyxXQUFXO0FBQ3ZCLGdCQUFNLE1BQU0sS0FBSyxJQUFJO0FBQ3JCLGdCQUFNLFNBQVMsRUFBRSxvQkFBb0I7QUFDckMsZ0JBQU0sZUFBZSxPQUFPLEtBQUsscUJBQXFCLEVBQUUsU0FBUztBQUNqRSxjQUFJLENBQUMsY0FBYztBQUNqQixrQkFBTSxhQUFhLEVBQUUsb0NBQW9DO0FBQ3pELGdCQUFJLFFBQVEsRUFBRSxNQUFNLFNBQVMsUUFBUTtBQUNuQyxvQkFBTSxRQUFRLEVBQUUsSUFBSSxPQUFPLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSztBQUN6RCxvQkFBTSxNQUFNLEVBQUUsdUZBQXVGO0FBQ3JHLG9CQUFNLFNBQVMsRUFBRSxXQUFXO0FBQUEsZ0JBQzFCLE1BQU07QUFBQSxnQkFDTixhQUFhO0FBQUEsZ0JBQ2IsT0FBTztBQUFBLGNBQ1QsQ0FBQztBQUNELGtCQUFJLE9BQU8sTUFBTTtBQUNqQix5QkFBVyxPQUFPLEdBQUc7QUFBQSxZQUN2QixDQUFDO0FBQ0QsbUJBQU8sT0FBTyxVQUFVO0FBQUEsVUFDMUI7QUFFQSxjQUFJLFFBQVEsRUFBRSxNQUFNLFNBQVMsUUFBUTtBQUNuQyxrQkFBTSxTQUFTLEVBQUUsMkNBQTJDLEVBQUUsR0FBRyxNQUFNLEVBQUUsS0FBSyxPQUFPO0FBQ3JGLGdCQUFJLENBQUMsT0FBTyxPQUFRO0FBQ3BCLG1CQUFPLElBQUksd0RBQXdEO0FBQ25FLG1CQUFPLEdBQUcscUJBQXFCLFNBQVNJLFFBQU87QUFBRSxjQUFBQSxPQUFNLGdCQUFnQjtBQUFBLFlBQUcsQ0FBQztBQUMzRSxtQkFBTyxHQUFHLHdDQUF3QyxXQUFXO0FBQzNELG9CQUFNLFFBQVEsS0FBSztBQUNuQixrQkFBSSxJQUFJLE9BQU8sTUFBTSxFQUFFLE9BQU8sTUFBTSxPQUFPO0FBQ3pDLG9CQUFJLE9BQU8sTUFBTSxFQUFFLE9BQU8sS0FBSyxFQUFFLEtBQUs7QUFBQSxjQUN4QztBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0gsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsNkJBQXlCO0FBR3pCLHlCQUFxQjtBQUFBLEVBQ3ZCO0FBRUEsaUJBQWUsU0FBUyxPQUFPLFVBQVU7QUFDdkMsUUFBSSxDQUFDLE1BQU87QUFDWix5QkFBcUIsa0JBQWtCLEtBQUssS0FBSztBQUNqRCxRQUFJO0FBQ0YsWUFBTSxVQUFVLFdBQVcsRUFBRSxPQUFPLFNBQVMsSUFBSSxFQUFFLE1BQU07QUFDekQsWUFBTWxCLFNBQVEsUUFBUSxjQUFjLE9BQU87QUFDM0MsVUFBSSxZQUFZO0FBQ2QsbUJBQVcsUUFBUTtBQUNuQixZQUFJLFNBQVUsWUFBVyxXQUFXO0FBQUEsTUFDdEM7QUFDQSxZQUFNLG9CQUFxQixjQUFjLFdBQVcsWUFBYTtBQUNqRSxZQUFNLFFBQVEsU0FBUyxlQUFlLHFCQUFxQjtBQUMzRCxVQUFJLE9BQU87QUFDVCxjQUFNLGNBQWMsb0JBQW9CLEdBQUcsaUJBQWlCLFNBQU0sS0FBSyxLQUFLO0FBQUEsTUFDOUU7QUFDQSx5QkFBbUIsbUJBQW1CLEtBQUs7QUFDM0MsK0JBQXlCO0FBQ3pCLDRCQUF1QixjQUFjLFdBQVcsY0FBZSxDQUFDLENBQUM7QUFDakUsTUFBQVcsc0JBQXFCLGNBQWMsR0FBRyxxQkFBcUIsVUFBVSxhQUFhO0FBRWxGLCtCQUF5QjtBQUFBLFFBQ3ZCLHNCQUFzQixxQkFBcUI7QUFBQSxRQUMzQyxrQkFBa0IsU0FBUztBQUFBLE1BQzdCLENBQUM7QUFDRCxVQUFJLE9BQU8sV0FBVyxvQkFBb0IsWUFBWTtBQUNwRCxtQkFBVyxnQkFBZ0IsQ0FBQyxHQUFHLHFCQUFxQixJQUFJO0FBQUEsTUFDMUQ7QUFDQSxZQUFNLDBCQUEwQjtBQUNoQyxZQUFNLGlCQUFpQjtBQUFBLElBQ3pCLFNBQVMsR0FBRztBQUNWLE1BQUFiLEtBQUksTUFBTSwyQkFBMkIsQ0FBQztBQUN0QyxZQUFNLE1BQU0sRUFBRSxXQUFXLE9BQU8sQ0FBQztBQUNqQywrQkFBeUI7QUFDekIsWUFBTSxTQUFTLFNBQVMsZUFBZSxtQkFBbUI7QUFDMUQsVUFBSSxRQUFRO0FBQ1YsZUFBTyxNQUFNLFVBQVU7QUFDdkIsZUFBTyxNQUFNLFFBQVE7QUFDckIsZUFBTyxjQUFjLFVBQUssR0FBRztBQUFBLE1BQy9CO0FBQ0EsVUFBSSxPQUFPLGtCQUFrQixZQUFZO0FBQ3ZDLHNCQUFjLFVBQVUsK0JBQTBCLEdBQUcsRUFBRTtBQUFBLE1BQ3pEO0FBQUEsSUFDRixVQUFFO0FBQ0EsMkJBQXFCO0FBQUEsSUFDdkI7QUFBQSxFQUNGO0FBRUEsaUJBQWUsbUJBQW1CO0FBRWhDLFVBQU0sUUFBUyxTQUFTLGVBQWUsa0JBQWtCO0FBQ3pELFVBQU0sU0FBUyxTQUFTLGVBQWUsbUJBQW1CO0FBQzFELFVBQU0sTUFBUyxTQUFTLGVBQWUsZ0JBQWdCO0FBRXZELFVBQU0sT0FBTztBQUNiLFVBQU0sS0FBTztBQUNiLFVBQU0sT0FBTztBQUViLFVBQU0sYUFBYSxNQUFNO0FBQ3ZCLFVBQUksT0FBUTtBQUFFLGNBQU0sY0FBZTtBQUFNLGNBQU0sTUFBTSxVQUFXO0FBQUksY0FBTSxRQUFTO0FBQUEsTUFBWTtBQUMvRixVQUFJLFFBQVE7QUFBRSxlQUFPLFlBQWMsR0FBRyxJQUFJO0FBQXdCLGVBQU8sTUFBTSxVQUFVO0FBQUEsTUFBSTtBQUM3RixVQUFJLEtBQVE7QUFBRSxZQUFJLFdBQVc7QUFBTSxZQUFJLGNBQWM7QUFBQSxNQUFjO0FBQ25FLE1BQUFhLHNCQUFxQixjQUFjLG9CQUFlLFFBQUc7QUFBQSxJQUN2RDtBQUVBLFVBQU0sUUFBUSxDQUFDLGNBQWM7QUFDM0IsWUFBTSxNQUFNLG9CQUFlLFNBQVM7QUFDcEMsVUFBSSxPQUFRO0FBQUUsY0FBTSxjQUFlO0FBQUssY0FBTSxNQUFNLFVBQVc7QUFBSSxjQUFNLFFBQVM7QUFBQSxNQUFLO0FBQ3ZGLFVBQUksUUFBUTtBQUFFLGVBQU8sWUFBYyxHQUFHLEVBQUUsSUFBSSxHQUFHO0FBQUksZUFBTyxNQUFNLFFBQVE7QUFBVyxlQUFPLE1BQU0sVUFBVTtBQUFBLE1BQUk7QUFDOUcsVUFBSSxLQUFRO0FBQUUsWUFBSSxXQUFXO0FBQU8sWUFBSSxZQUFZO0FBQUEsTUFBNEI7QUFDaEYsTUFBQUEsc0JBQXFCLGFBQWEsWUFBWSxTQUFTLE9BQU8sUUFBRztBQUNqRSxZQUFNLGlCQUFpQixTQUFTLGVBQWUsdUJBQXVCO0FBQ3RFLFVBQUksZ0JBQWdCO0FBQ2xCLHVCQUFlLGNBQWMsMEJBQTBCLFNBQVM7QUFBQSxNQUNsRTtBQUNBLDBCQUFvQixDQUFDO0FBQUEsSUFDdkI7QUFFQSxVQUFNLFVBQVUsQ0FBQyxXQUFXO0FBQzFCLFVBQUksT0FBUTtBQUFFLGNBQU0sY0FBZTtBQUFNLGNBQU0sTUFBTSxVQUFXO0FBQUksY0FBTSxRQUFTO0FBQUEsTUFBUTtBQUMzRixVQUFJLFFBQVE7QUFDVixlQUFPLFlBQWMsR0FBRyxJQUFJLGlCQUFpQixPQUFPLFFBQVEsTUFBTSxRQUFRLENBQUM7QUFDM0UsZUFBTyxNQUFNLFFBQVE7QUFDckIsZUFBTyxNQUFNLFVBQVU7QUFBQSxNQUN6QjtBQUNBLFVBQUksS0FBUTtBQUFFLFlBQUksV0FBVztBQUFPLFlBQUksWUFBWTtBQUFBLE1BQTRCO0FBQ2hGLE1BQUFBLHNCQUFxQixTQUFTLHFCQUFxQixVQUFLLE1BQU07QUFDOUQsVUFBSSxxQkFBcUIsR0FBRztBQUMxQiw0QkFBb0IsQ0FBQztBQUFBLE1BQ3ZCO0FBQUEsSUFDRjtBQUVBLGVBQVc7QUFDWCx5QkFBcUIsNkJBQTZCO0FBQ2xELFFBQUk7QUFDRixZQUFNLFNBQVMsTUFBTVgsU0FBUSxRQUFRLGlCQUFpQjtBQUN0RCxVQUFJLE9BQU8sSUFBSTtBQUNiLGNBQU0sT0FBTyxVQUFVO0FBQ3ZCLGVBQU87QUFBQSxNQUNUO0FBQ0EsY0FBUSxPQUFPLFNBQVMsZUFBZTtBQUN2QyxhQUFPO0FBQUEsSUFDVCxTQUFTLEdBQUc7QUFDVixjQUFRLEVBQUUsV0FBVyxPQUFPLENBQUMsQ0FBQztBQUM5QixhQUFPO0FBQUEsSUFDVCxVQUFFO0FBQ0EsMkJBQXFCO0FBQUEsSUFDdkI7QUFBQSxFQUNGO0FBRUEsV0FBUyx1QkFBdUI7QUFDOUIsVUFBTSxLQUFLLFNBQVMsZUFBZSx1QkFBdUI7QUFDMUQsUUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFZO0FBQ3hCLFVBQU0sS0FBUyxXQUFXO0FBQzFCLFVBQU0sU0FBUyxXQUFXO0FBRTFCLFVBQU0sY0FBZSxXQUFXLGVBQzVCLDJJQUVBO0FBRUosUUFBSSxDQUFDLElBQUk7QUFBRSxTQUFHLFlBQVksV0FBVyxXQUFXO0FBQUk7QUFBQSxJQUFRO0FBQzVELFFBQUk7QUFDRixZQUFNLElBQU0sSUFBSSxLQUFLLEVBQUU7QUFDdkIsWUFBTSxNQUFNLG9CQUFJLEtBQUs7QUFDckIsWUFBTSxJQUFNLEtBQUssT0FBTyxNQUFNLEtBQUssSUFBUztBQUM1QyxZQUFNLE1BQU0sSUFBSSxJQUFJLGFBQWEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDO0FBQzdFLFNBQUcsWUFBWSxjQUFjLFdBQVcscUJBQXFCLEdBQUc7QUFBQSxJQUNsRSxRQUFRO0FBQUUsU0FBRyxZQUFZLFdBQVcsV0FBVztBQUFBLElBQUk7QUFBQSxFQUNyRDtBQUVBLGlCQUFlLHNCQUFzQjtBQUNuQyxVQUFNLE1BQU0sU0FBUyxlQUFlLHFCQUFxQjtBQUN6RCxVQUFNLE1BQU0sU0FBUyxlQUFlLHVCQUF1QjtBQUMzRCxRQUFJLEtBQUs7QUFBRSxVQUFJLFdBQVc7QUFBTSxVQUFJLGNBQWM7QUFBQSxJQUFlO0FBQ2pFLHlCQUFxQiw2QkFBNkI7QUFDbEQsUUFBSTtBQUNGLFlBQU1BLFNBQVEsUUFBUSw0QkFBNEI7QUFFbEQsbUJBQWEsTUFBTUEsU0FBUSxPQUFPLFlBQVk7QUFDOUMsdUJBQWlCO0FBQUEsSUFDbkIsU0FBUyxHQUFHO0FBQ1YsVUFBSSxJQUFLLEtBQUksY0FBYztBQUMzQixNQUFBRixLQUFJLE1BQU0sMkJBQTJCLENBQUM7QUFBQSxJQUN4QyxVQUFFO0FBQ0EsMkJBQXFCO0FBQ3JCLFVBQUksS0FBSztBQUFFLFlBQUksV0FBVztBQUFPLFlBQUksY0FBYztBQUFBLE1BQW9CO0FBQUEsSUFDekU7QUFBQSxFQUNGO0FBSUEsV0FBU3FCLDhCQUE2QixjQUFjO0FBRWxELFVBQU0sa0JBQWtCO0FBQUEsTUFDdEI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFFQSxVQUFNLGtCQUFrQjtBQUFBLE1BQ3RCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBRUEsVUFBTSxlQUFlO0FBQUEsTUFDbkIsUUFBb0I7QUFBQSxNQUNwQixnQkFBb0I7QUFBQSxNQUNwQixpQkFBb0I7QUFBQSxNQUNwQixrQkFBb0I7QUFBQSxNQUNwQixlQUFvQjtBQUFBLE1BQ3BCLGNBQW9CO0FBQUEsTUFDcEIsaUJBQW9CO0FBQUEsTUFDcEIsb0JBQW9CO0FBQUEsTUFDcEIsY0FBb0I7QUFBQTtBQUFBLE1BRXBCLE9BQW9CO0FBQUEsTUFDcEIsVUFBb0I7QUFBQSxNQUNwQixZQUFvQjtBQUFBLElBQ3RCO0FBQ0EsVUFBTSxxQkFBcUIsQ0FBQyxvQkFBb0IsWUFBWSxFQUFFLFNBQVMsWUFBWTtBQUNuRixVQUFNLGFBQWEsYUFBYSxZQUFZLEtBQUs7QUFFakQsYUFBUyxtQkFBbUIsSUFBSTtBQUM5QixVQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsU0FBUyxXQUFXLEVBQUc7QUFDL0MsU0FBRyxVQUFVLElBQUksV0FBVztBQUM1QixTQUFHLGFBQWEsUUFBUSxRQUFRO0FBQ2hDLFNBQUcsYUFBYSxZQUFZLEdBQUc7QUFDL0IsVUFBSSxDQUFDLEdBQUcsaUJBQWlCO0FBQ3ZCLFdBQUcsa0JBQWtCLENBQUMsTUFBTTtBQUMxQixjQUFJLEVBQUUsUUFBUSxXQUFXLEVBQUUsUUFBUSxLQUFLO0FBQ3RDLGNBQUUsZUFBZTtBQUNqQixlQUFHLE1BQU07QUFBQSxVQUNYO0FBQUEsUUFDRjtBQUNBLFdBQUcsaUJBQWlCLFdBQVcsR0FBRyxlQUFlO0FBQUEsTUFDbkQ7QUFBQSxJQUNGO0FBRUEsYUFBUyxlQUFlLElBQUk7QUFDMUIsVUFBSSxDQUFDLEdBQUk7QUFDVCxTQUFHLFVBQVUsT0FBTyxXQUFXO0FBQy9CLFNBQUcsZ0JBQWdCLE1BQU07QUFDekIsU0FBRyxhQUFhLFlBQVksSUFBSTtBQUNoQyxVQUFJLEdBQUcsaUJBQWlCO0FBQ3RCLFdBQUcsb0JBQW9CLFdBQVcsR0FBRyxlQUFlO0FBQ3BELGVBQU8sR0FBRztBQUFBLE1BQ1o7QUFBQSxJQUNGO0FBRUEsb0JBQWdCLFFBQVEsQ0FBQyxJQUFJLFFBQVE7QUFDbkMsWUFBTSxLQUFLLFNBQVMsZUFBZSxFQUFFO0FBQ3JDLFVBQUksQ0FBQyxHQUFJO0FBQ1QsVUFBSSxPQUFPLGNBQWMsb0JBQW9CO0FBQzNDLDJCQUFtQixFQUFFO0FBQUEsTUFDdkIsT0FBTztBQUNMLHVCQUFlLEVBQUU7QUFBQSxNQUNuQjtBQUFBLElBQ0YsQ0FBQztBQUVELG9CQUFnQixRQUFRLFFBQU07QUFDNUIsWUFBTSxLQUFLLFNBQVMsZUFBZSxFQUFFO0FBQ3JDLFVBQUksQ0FBQyxHQUFJO0FBQ1QsVUFBSSxvQkFBb0I7QUFDdEIsMkJBQW1CLEVBQUU7QUFBQSxNQUN2QixPQUFPO0FBQ0wsdUJBQWUsRUFBRTtBQUFBLE1BQ25CO0FBQUEsSUFDRixDQUFDO0FBR0QsVUFBTSxhQUFhLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxlQUFlO0FBQzFELGVBQVcsUUFBUSxRQUFNO0FBQ3ZCLFlBQU0sS0FBSyxTQUFTLGVBQWUsRUFBRTtBQUNyQyxVQUFJLEdBQUksSUFBRyxnQkFBZ0IsY0FBYztBQUFBLElBQzNDLENBQUM7QUFHRCxVQUFNLGVBQWUscUJBQXFCLGtCQUFrQixnQkFBZ0IsVUFBVTtBQUN0RixRQUFJLGNBQWM7QUFDaEIsWUFBTSxXQUFXLFNBQVMsZUFBZSxZQUFZO0FBQ3JELFVBQUksU0FBVSxVQUFTLGFBQWEsZ0JBQWdCLE1BQU07QUFBQSxJQUM1RDtBQUFBLEVBQ0Y7QUFHQSxXQUFTLGlCQUFpQixvQkFBb0IsTUFBTTtBQUNsRCxzQkFBa0I7QUFHbEIsVUFBTSxTQUFXLFNBQVMsZUFBZSxTQUFTO0FBQ2xELFVBQU0sVUFBVyxTQUFTLGVBQWUsaUJBQWlCO0FBQzFELFVBQU0sV0FBVyxTQUFTLGVBQWUsa0JBQWtCO0FBQzNELFFBQUksVUFBVSxXQUFXLFVBQVU7QUFDakMsY0FBUSxpQkFBaUIsU0FBVSxNQUFNO0FBQUUsZUFBTyxTQUFTLEVBQUUsTUFBTSxNQUFNLFVBQVUsU0FBUyxDQUFDO0FBQUEsTUFBRyxDQUFDO0FBQ2pHLGVBQVMsaUJBQWlCLFNBQVMsTUFBTTtBQUFFLGVBQU8sU0FBUyxFQUFFLE1BQU8sS0FBSyxVQUFVLFNBQVMsQ0FBQztBQUFBLE1BQUcsQ0FBQztBQUNqRyxhQUFPLGlCQUFpQixVQUFVLHNCQUFzQjtBQUN4RCxVQUFJLGVBQWUsc0JBQXNCLEVBQUUsUUFBUSxNQUFNO0FBQUEsSUFDM0Q7QUFHQSxJQUFBVixzQkFBcUIsS0FBSztBQUMxQixJQUFBVSw4QkFBNkIsS0FBSztBQUdsQyxRQUFJLE9BQU9YLGVBQWMsa0JBQWtCLFlBQVk7QUFDckQsTUFBQUEsY0FBYSxjQUFjLENBQUMsVUFBVTtBQUNwQyxRQUFBVyw4QkFBNkIsS0FBSztBQUFBLE1BQ3BDLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFFRixDQUFDOzs7QUNsMkREO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxxQ0FBQUM7QUFBQSxJQUFBLGtDQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUE7QUFBQTtBQUFBO0FBQUEsMkJBQUFDO0FBQUEsSUFBQSwwQkFBQUM7QUFBQSxJQUFBLHNCQUFBQztBQUFBO0FBY0EsV0FBUywyQkFBMkI7QUFDbEMsYUFBUyxjQUFjLElBQUksWUFBWSxtQkFBbUIsQ0FBQztBQUFBLEVBQzdEO0FBRUEsV0FBUyxVQUFVLE9BQU87QUFDeEIsV0FBTyxPQUFPLFVBQVUsV0FBVyxNQUFNLEtBQUssSUFBSTtBQUFBLEVBQ3BEO0FBRUEsV0FBUyxjQUFjLE9BQU87QUFDNUIsV0FBTyxTQUFTLE9BQU8sVUFBVSxXQUFXLFFBQVEsQ0FBQztBQUFBLEVBQ3ZEO0FBRUEsV0FBUyxpQkFBaUIsT0FBTztBQUMvQixVQUFNQyxRQUFPLFVBQVUsS0FBSztBQUM1QixRQUFJLENBQUNBLE1BQU0sUUFBTztBQUVsQixRQUFJLHNCQUFzQixLQUFLQSxLQUFJLEdBQUc7QUFDcEMsWUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUlBLE1BQUssTUFBTSxHQUFHO0FBQ3pDLGFBQU8sR0FBRyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUk7QUFBQSxJQUNoQztBQUVBLFVBQU0sU0FBUyxJQUFJLEtBQUtBLEtBQUk7QUFDNUIsUUFBSSxDQUFDLE9BQU8sTUFBTSxPQUFPLFFBQVEsQ0FBQyxHQUFHO0FBQ25DLGFBQU8sT0FBTyxZQUFZLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFBQSxJQUN6QztBQUNBLFdBQU9BO0FBQUEsRUFDVDtBQUVBLFdBQVMsc0JBQXNCO0FBQzdCLFVBQU1DLG1CQUFrQixjQUFjLFdBQVcsY0FBYyxxQkFBcUIsQ0FBQztBQUNyRixVQUFNLFFBQVEsT0FBT0EsaUJBQWdCLGNBQWM7QUFDbkQsUUFBSSxPQUFPLFNBQVMsS0FBSyxLQUFLLFFBQVEsR0FBRztBQUN2QyxhQUFPLFVBQVUsS0FBSyxRQUFRLFVBQVUsSUFBSSxLQUFLLEdBQUc7QUFBQSxJQUN0RDtBQUVBLFVBQU0sV0FBVyxPQUFPQSxpQkFBZ0IsaUJBQWlCO0FBQ3pELFFBQUksT0FBTyxTQUFTLFFBQVEsS0FBSyxXQUFXLEdBQUc7QUFDN0MsYUFBTyxVQUFVLFNBQVMsUUFBUSxDQUFDLENBQUM7QUFBQSxJQUN0QztBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxzQkFBc0I7QUFDN0IsVUFBTSxTQUFTLGNBQWMsT0FBTyxhQUFhO0FBQ2pELFVBQU0sV0FBVyxjQUFjLFdBQVcsY0FBYyxhQUFhLFVBQVUsQ0FBQztBQUNoRixVQUFNLG1CQUFtQixVQUFVLFNBQVMsZUFBZSxnQkFBZ0IsR0FBRyxlQUFlLEVBQUU7QUFFL0YsVUFBTSxPQUFPO0FBQUEsTUFDWCxPQUFPLFFBQ0YsU0FBUyxhQUNULFNBQVMsU0FDVCxTQUFTLGlCQUNUO0FBQUEsSUFDUDtBQUNBLFVBQU0sVUFBVSxVQUFVLE9BQU8sV0FBVyxTQUFTLGdCQUFnQixTQUFTLFdBQVcsRUFBRTtBQUMzRixVQUFNLGNBQWM7QUFBQSxNQUNsQixPQUFPLGdCQUNGLFNBQVMsZ0JBQ1QsU0FBUyxvQkFDVDtBQUFBLElBQ1A7QUFFQSxVQUFNLFVBQVUsUUFBUSxVQUNwQixHQUFHLElBQUksTUFBTSxPQUFPLEtBQ25CLFFBQVEsV0FBVztBQUN4QixRQUFJLENBQUMsUUFBUyxRQUFPO0FBQ3JCLFFBQUksQ0FBQyxZQUFhLFFBQU87QUFDekIsV0FBTyxHQUFHLE9BQU8sS0FBSyxXQUFXO0FBQUEsRUFDbkM7QUFFQSxXQUFTLGNBQWMsVUFBVSxNQUFNLFdBQVcsQ0FBQyxXQUFXLFNBQVMsR0FBRztBQUN4RSxXQUFPLFNBQVMsT0FBTyxhQUFXLFFBQVEsU0FBUyxRQUFRLFNBQVMsU0FBUyxRQUFRLE1BQU0sQ0FBQyxFQUFFO0FBQUEsRUFDaEc7QUFFQSxXQUFTLG9CQUFvQixPQUFPLFVBQVU7QUFDNUMsVUFBTSxjQUFjLFNBQ2pCLE9BQU8sYUFBVyxRQUFRLFNBQVMsVUFBVSxRQUFRLFdBQVcsU0FBUyxFQUN6RSxJQUFJLGFBQVcsUUFBUSxPQUFPLEVBQzlCLE9BQU8sT0FBTztBQUVqQixRQUFJLFlBQVksU0FBUyxHQUFHO0FBQzFCLFlBQU0sVUFBVSxZQUFZLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBQ2pELFlBQU0sU0FBUyxZQUFZLFNBQVMsSUFBSSxLQUFLLFlBQVksU0FBUyxDQUFDLFVBQVU7QUFDN0UsYUFBTyxpQkFBaUIsT0FBTyxHQUFHLE1BQU07QUFBQSxJQUMxQztBQUVBLFVBQU0sUUFBUSxTQUFTLE9BQU8sYUFBVyxRQUFRLGVBQWUsV0FBVyxRQUFRLGVBQWUsU0FBUyxFQUFFO0FBQzdHLFVBQU0sVUFBVSxTQUFTLE9BQU8sYUFBVyxRQUFRLGVBQWUsU0FBUyxFQUFFO0FBQzdFLFVBQU0sY0FBYyxPQUFPLFFBQVEsTUFBTSxrQkFBa0IsQ0FBQyxDQUFDLEVBQzFELE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLE9BQU8sVUFBVSxZQUFZLFFBQVEsQ0FBQyxFQUM1RCxLQUFLLENBQUMsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQ3hDLE1BQU0sR0FBRyxDQUFDLEVBQ1YsSUFBSSxDQUFDLENBQUMsU0FBUyxLQUFLLE1BQU0sR0FBRyxPQUFPLElBQUksS0FBSyxNQUFNLEtBQUssQ0FBQyxHQUFHO0FBRS9ELFFBQUksWUFBWSxTQUFTLEdBQUc7QUFDMUIsYUFBTyxpQkFBaUIsWUFBWSxLQUFLLFVBQUssQ0FBQztBQUFBLElBQ2pEO0FBRUEsUUFBSSxRQUFRLEtBQUssVUFBVSxHQUFHO0FBQzVCLGFBQU8sa0JBQWtCLEtBQUssaUJBQVksT0FBTztBQUFBLElBQ25EO0FBRUEsV0FBTyxVQUFVLE1BQU0sU0FBUyxRQUFRO0FBQUEsRUFDMUM7QUFFQSxXQUFTLHNCQUFzQixPQUFPO0FBQ3BDLFVBQU0sV0FBVyxNQUFNLFFBQVEsT0FBTyxjQUFjLElBQUksTUFBTSxpQkFBaUIsQ0FBQztBQUNoRixVQUFNLFVBQVUsT0FBTyxPQUFPLFlBQVksV0FBVyxLQUFLLE1BQU0sTUFBTSxPQUFPLElBQUk7QUFFakYsUUFBSSxZQUFZLE1BQU07QUFDcEIsYUFBTyxFQUFFLFNBQVMsTUFBTSxNQUFNLElBQUksUUFBUSxJQUFJLFNBQVM7QUFBQSxJQUN6RDtBQUVBLFFBQUksU0FBUyxXQUFXLEdBQUc7QUFDekIsYUFBTztBQUFBLFFBQ0w7QUFBQSxRQUNBLE1BQU0sV0FBVyxPQUFPO0FBQUEsUUFDeEIsUUFBUSxVQUFVLE1BQU0sU0FBUyxRQUFRO0FBQUEsUUFDekM7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFVBQU0sWUFBWSxTQUFTLE9BQU8sYUFBVyxRQUFRLFNBQVMsTUFBTSxFQUFFO0FBQ3RFLFVBQU0sWUFBWSxTQUFTLE9BQU8sYUFBVyxRQUFRLFNBQVMsTUFBTSxFQUFFO0FBQ3RFLFVBQU0sYUFBYSxTQUFTLE9BQU8sYUFBVyxRQUFRLFNBQVMsT0FBTyxFQUFFO0FBQ3hFLFVBQU0sZUFBZSxDQUFDO0FBRXRCLFFBQUksWUFBWSxHQUFHO0FBQ2pCLG1CQUFhLEtBQUssUUFBUSxjQUFjLFVBQVUsTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFO0FBQUEsSUFDMUU7QUFDQSxRQUFJLFlBQVksR0FBRztBQUNqQixtQkFBYSxLQUFLLFFBQVEsY0FBYyxVQUFVLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBRTtBQUFBLElBQzFFO0FBQ0EsUUFBSSxhQUFhLEdBQUc7QUFDbEIsbUJBQWEsS0FBSyxTQUFTLGNBQWMsVUFBVSxPQUFPLENBQUMsSUFBSSxVQUFVLEVBQUU7QUFBQSxJQUM3RTtBQUVBLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQSxNQUFNLGFBQWEsS0FBSyxVQUFLLEtBQUssV0FBVyxPQUFPO0FBQUEsTUFDcEQsUUFBUSxvQkFBb0IsT0FBTyxRQUFRO0FBQUEsTUFDM0M7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFdBQVMsa0JBQWtCLE9BQU87QUFDaEMsVUFBTSxTQUFTLFNBQVMsZUFBZSxrQkFBa0I7QUFDekQsVUFBTSxVQUFVLFNBQVMsZUFBZSxtQkFBbUI7QUFDM0QsVUFBTSxjQUFjLFNBQVMsZUFBZSx3QkFBd0I7QUFDcEUsVUFBTSxnQkFBZ0IsU0FBUyxlQUFlLDBCQUEwQjtBQUV4RSxRQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsY0FBZTtBQUUzRCxVQUFNLFdBQVcsTUFBTSxRQUFRLE9BQU8sY0FBYyxJQUFJLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsVUFBTSxXQUFXLFNBQVMsT0FBTyxNQUFNLFlBQVk7QUFDbkQsVUFBTSxrQkFBa0Isb0JBQW9CO0FBQzVDLFVBQU0sa0JBQWtCLG9CQUFvQjtBQUU1QyxRQUFJLENBQUMsVUFBVTtBQUNiLGFBQU8sTUFBTSxVQUFVO0FBQ3ZCLGNBQVEsTUFBTSxVQUFVO0FBQ3hCLGtCQUFZLGNBQWM7QUFDMUIsb0JBQWMsY0FBYztBQUM1QjtBQUFBLElBQ0Y7QUFFQSxXQUFPLE1BQU0sVUFBVTtBQUV2QixVQUFNLGlCQUFpQixzQkFBc0IsS0FBSztBQUNsRCxVQUFNLFlBQVksQ0FBQyxlQUFlLE1BQU0sZUFBZSxFQUFFLE9BQU8sT0FBTztBQUN2RSxVQUFNLGNBQWMsQ0FBQyxpQkFBaUIsZUFBZSxNQUFNLEVBQUUsT0FBTyxPQUFPO0FBRTNFLFFBQUksVUFBVSxXQUFXLEtBQUssWUFBWSxXQUFXLEtBQUssU0FBUyxXQUFXLEdBQUc7QUFDL0UsY0FBUSxNQUFNLFVBQVU7QUFDeEIsa0JBQVksY0FBYztBQUMxQixvQkFBYyxjQUFjO0FBQzVCO0FBQUEsSUFDRjtBQUVBLGdCQUFZLGNBQWMsVUFBVSxLQUFLLFVBQUs7QUFDOUMsa0JBQWMsY0FBYyxZQUFZLEtBQUssVUFBSztBQUNsRCxZQUFRLE1BQU0sVUFBVTtBQUFBLEVBQzFCO0FBRUEsV0FBU0YsZ0JBQWUsT0FBTztBQUM3QixzQkFBa0IsS0FBSztBQUV2QixVQUFNLFFBQVUsU0FBUyxlQUFlLGlCQUFpQjtBQUN6RCxVQUFNLFVBQVUsU0FBUyxlQUFlLGlCQUFpQjtBQUN6RCxRQUFJLENBQUMsU0FBUyxDQUFDLFNBQVM7QUFDdEIsK0JBQXlCO0FBQ3pCO0FBQUEsSUFDRjtBQUVBLFFBQUksQ0FBQyxTQUFTLE9BQU8sTUFBTSxZQUFZLFVBQVU7QUFDL0MsWUFBTSxNQUFNLFVBQVU7QUFDdEIsK0JBQXlCO0FBQ3pCO0FBQUEsSUFDRjtBQUVBLFVBQU0sVUFBVSxLQUFLLE1BQU0sTUFBTSxPQUFPO0FBQ3hDLFlBQVEsY0FBYyxHQUFHLE9BQU87QUFDaEMsVUFBTSxNQUFNLFVBQVU7QUFFdEIsVUFBTSxVQUFVLE9BQU8sY0FBYyxnQkFBZ0IsV0FBVztBQUNoRSxRQUFJLFdBQVcsSUFBSTtBQUNqQixZQUFNLFVBQVUsSUFBSSxZQUFZO0FBQUEsSUFDbEMsV0FBVyxXQUFXLElBQUk7QUFDeEIsWUFBTSxVQUFVLElBQUksY0FBYztBQUFBLElBQ3BDLE9BQU87QUFDTCxZQUFNLFVBQVUsSUFBSSxXQUFXO0FBQUEsSUFDakM7QUFFQSxVQUFNLGFBQWEsY0FBYyxvQkFBb0IsT0FBTyxNQUFNLE1BQU0sU0FBUyxRQUFRLEdBQUc7QUFDNUYsNkJBQXlCO0FBQUEsRUFDM0I7QUFRQSxpQkFBZUYsaUJBQWdCLFFBQVEscUJBQXFCO0FBQzFELFVBQU1LLGFBQVksV0FBVyxjQUFjLGVBQWU7QUFDMUQsUUFBSSxDQUFDQSxXQUFXO0FBQ2hCLFFBQUk7QUFDRixZQUFNLE1BQU0sTUFBTSxNQUFNLHFCQUFxQjtBQUFBLFFBQzNDLFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxZQUFZQSxZQUFXLE1BQU0sQ0FBQztBQUFBLE1BQ3ZELENBQUM7QUFDRCxVQUFJLENBQUMsSUFBSSxHQUFJO0FBQ2IsWUFBTSxPQUFPLE1BQU0sSUFBSSxLQUFLO0FBQzVCLFVBQUksS0FBSyxNQUFNLEtBQUssV0FBVztBQUM3QixtQkFBVyxjQUFjLGNBQWMsS0FBSyxTQUFTO0FBQ3JELFFBQUFILGdCQUFlLEtBQUssU0FBUztBQUFBLE1BQy9CO0FBQUEsSUFDRixTQUFTSSxLQUFJO0FBQUEsSUFFYjtBQUFBLEVBQ0Y7QUFHQSxNQUFJLG1CQUFtQjtBQUN2QixXQUFTTCxvQkFBbUIsUUFBUSxxQkFBcUI7QUFDdkQsaUJBQWEsZ0JBQWdCO0FBQzdCLHVCQUFtQixXQUFXLE1BQU1ELGlCQUFnQixLQUFLLEdBQUcsR0FBRztBQUFBLEVBQ2pFO0FBRUEsV0FBUywyQkFBMkI7QUFDbEMsVUFBTSxRQUFRLFdBQVcsY0FBYyxjQUFjO0FBQ3JELFFBQUksU0FBUyxPQUFPLE1BQU0sWUFBWSxVQUFVO0FBQzlDLHdCQUFrQixLQUFLO0FBQUEsSUFDekI7QUFBQSxFQUNGO0FBRUEsTUFBSSxPQUFPLFdBQVcsYUFBYTtBQUNqQyxXQUFPLGlCQUFpQixzQ0FBc0MsTUFBTTtBQUNsRSwrQkFBeUI7QUFBQSxJQUMzQixDQUFDO0FBQUEsRUFDSDtBQUVBLE1BQUksT0FBTyxhQUFhLGFBQWE7QUFDbkMsVUFBTSxrQkFBa0IsU0FBUyxlQUFlLGdCQUFnQjtBQUNoRSxRQUFJLG1CQUFtQixPQUFPLHFCQUFxQixhQUFhO0FBQzlELFlBQU0sZ0JBQWdCLElBQUksaUJBQWlCLE1BQU07QUFDL0MsaUNBQXlCO0FBQUEsTUFDM0IsQ0FBQztBQUNELG9CQUFjLFFBQVEsaUJBQWlCO0FBQUEsUUFDckMsV0FBVztBQUFBLFFBQ1gsZUFBZTtBQUFBLFFBQ2YsU0FBUztBQUFBLE1BQ1gsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGOzs7QUNsU0E7QUFBQTtBQUFBLDhCQUFBTztBQUFBLElBQUE7QUFBQSxtQ0FBQUM7QUFBQSxJQUFBO0FBQUEsZ0NBQUFDO0FBQUEsSUFBQSxxQkFBQUM7QUFBQSxJQUFBO0FBQUEseUJBQUFDO0FBQUEsSUFBQSwwQkFBQUM7QUFBQSxJQUFBLDRCQUFBQztBQUFBO0FBa0JBLE1BQU1DLE9BQU0sVUFBVSxlQUFlO0FBSXJDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkIsV0FBU0Msc0JBQXFCO0FBQzVCLFdBQU8sY0FBYyxRQUFRO0FBQzNCLFlBQU0sRUFBRSxNQUFNLE1BQUFDLE1BQUssSUFBSSxjQUFjLE1BQU07QUFDM0MsTUFBQUMsZUFBYyxNQUFNRCxLQUFJO0FBQUEsSUFDMUI7QUFBQSxFQUNGO0FBRUEsV0FBU0Usc0JBQXFCRixPQUFNO0FBQ2xDLFVBQU0sZUFBZSxTQUFTLGVBQWUsY0FBYztBQUMzRCxVQUFNLFVBQVUsU0FBUyxjQUFjLEtBQUs7QUFDNUMsWUFBUSxZQUFZO0FBQ3BCLFVBQU0sVUFBVSxTQUFTLGNBQWMsS0FBSztBQUM1QyxZQUFRLFlBQVk7QUFDcEIsWUFBUSxZQUFZLDRDQUE0Q0EsS0FBSTtBQUNwRSxZQUFRLFlBQVksT0FBTztBQUMzQixpQkFBYSxZQUFZLE9BQU87QUFDaEMsaUJBQWEsWUFBWSxhQUFhO0FBQ3RDLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBU0csc0JBQXFCLGdCQUFnQjtBQUM1QyxRQUFJLGtCQUFrQixlQUFlLFlBQVk7QUFDL0MscUJBQWUsV0FBVyxZQUFZLGNBQWM7QUFBQSxJQUN0RDtBQUFBLEVBQ0Y7QUFHQSxXQUFTLGtCQUFrQixNQUFNQyxPQUFNO0FBQ3JDLFVBQU0sZUFBZSxTQUFTLGVBQWUsY0FBYztBQUMzRCxVQUFNLFVBQVUsU0FBUyxjQUFjLEtBQUs7QUFDNUMsWUFBUSxZQUFZLFdBQVcsSUFBSTtBQUNuQyxVQUFNLFVBQVUsU0FBUyxjQUFjLEtBQUs7QUFDNUMsWUFBUSxZQUFZO0FBQ3BCLFlBQVEsWUFBWUE7QUFDcEIsWUFBUSxZQUFZLE9BQU87QUFDM0IsaUJBQWEsWUFBWSxPQUFPO0FBQ2hDLGlCQUFhLFlBQVksYUFBYTtBQUFBLEVBQ3hDO0FBTUEsTUFBTSwwQkFBMEI7QUFDaEMsTUFBTSwwQkFBMEI7QUFNaEMsV0FBUyx3QkFBd0JBLE9BQU0sU0FBUztBQUM5QyxVQUFNLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDaEMsUUFBSSxNQUFNLFVBQVUsMkJBQTJCLFFBQVEsVUFBVSx5QkFBeUI7QUFDeEYsYUFBTyxFQUFFLE1BQUFBLE9BQU0sYUFBYSxNQUFNO0FBQUEsSUFDcEM7QUFHQSxVQUFNLGVBQWUsTUFBTSxNQUFNLEdBQUcsdUJBQXVCO0FBQzNELFVBQU0sY0FBY0MsWUFBVyxhQUFhLEtBQUssSUFBSSxDQUFDLEVBQ25ELFFBQVEsa0JBQWtCLHFCQUFxQixFQUMvQyxRQUFRLGNBQWMsYUFBYSxFQUNuQyxRQUFRLGNBQWMsaUJBQWlCLEVBQ3ZDLFFBQVEsT0FBTyxNQUFNO0FBRXhCLFVBQU0sV0FBVyxNQUFNLFNBQVM7QUFDaEMsVUFBTSxLQUFLLGVBQWUsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRTlFLFVBQU0sVUFBVTtBQUFBLG1DQUNpQixFQUFFLGFBQWEsV0FBVztBQUFBLGdDQUM3QixFQUFFLCtCQUErQkQsS0FBSTtBQUFBO0FBQUEsdUNBRTlCLEVBQUU7QUFBQSx1Q0FDRixFQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUEsNEVBSW1DLFFBQVEsYUFBYSxhQUFhLElBQUksS0FBSyxHQUFHO0FBQUE7QUFBQSxtQ0FFdkYsUUFBUSxhQUFhLGFBQWEsSUFBSSxLQUFLLEdBQUc7QUFFL0UsV0FBTyxFQUFFLE1BQU0sU0FBUyxhQUFhLEtBQUs7QUFBQSxFQUM1QztBQUVBLFdBQVNILGVBQWMsTUFBTUQsT0FBTTtBQUNqQyxVQUFNLGVBQWUsU0FBUyxlQUFlLGNBQWM7QUFDM0QsUUFBSSxDQUFDLGNBQWM7QUFFakIsb0JBQWMsS0FBSyxFQUFFLE1BQU0sTUFBQUEsTUFBSyxDQUFDO0FBQ2pDLGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxVQUFVLFNBQVMsY0FBYyxLQUFLO0FBQzVDLFlBQVEsWUFBWSxXQUFXLElBQUk7QUFDbkMsVUFBTSxVQUFVLFNBQVMsY0FBYyxLQUFLO0FBQzVDLFlBQVEsWUFBWTtBQUdwQixVQUFNLFVBQVUsT0FBT0EsVUFBUyxXQUFXQSxRQUFPLEtBQUssVUFBVUEsT0FBTSxNQUFNLENBQUM7QUFDOUUsVUFBTSxlQUFlSyxZQUFXLE9BQU8sRUFDcEMsUUFBUSxrQkFBa0IscUJBQXFCLEVBQy9DLFFBQVEsY0FBYyxhQUFhLEVBQ25DLFFBQVEsY0FBYyxpQkFBaUIsRUFDdkMsUUFBUSxPQUFPLE1BQU07QUFHeEIsUUFBSSxTQUFTLFVBQVUsU0FBUyxhQUFhO0FBQzNDLFlBQU0sRUFBRSxNQUFBRCxPQUFNLFlBQVksSUFBSSx3QkFBd0IsY0FBYyxPQUFPO0FBQzNFLGNBQVEsWUFBWUE7QUFDcEIsVUFBSSxZQUFhLFNBQVEsVUFBVSxJQUFJLGlCQUFpQjtBQUFBLElBQzFELE9BQU87QUFDTCxjQUFRLFlBQVk7QUFBQSxJQUN0QjtBQUNBLFlBQVEsWUFBWSxPQUFPO0FBRzNCLFVBQU0sZUFBZSxRQUFRLE1BQU0sd0JBQXdCO0FBQzNELFFBQUksZ0JBQWdCLFNBQVMsYUFBYTtBQUN4QyxZQUFNLFVBQVUsYUFBYSxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsSUFBSSxTQUFPLElBQUksS0FBSyxDQUFDO0FBQ2hFLFlBQU0sa0JBQWtCLFNBQVMsY0FBYyxLQUFLO0FBQ3BELHNCQUFnQixNQUFNLFVBQVU7QUFDaEMsY0FBUSxRQUFRLFlBQVU7QUFDeEIsY0FBTSxNQUFNLFNBQVMsY0FBYyxRQUFRO0FBQzNDLFlBQUksY0FBYztBQUNsQixZQUFJLFlBQVk7QUFDaEIsWUFBSSxNQUFNLFVBQVU7QUFDcEIsWUFBSSxVQUFVLE1BQU07QUFDbEIsbUJBQVMsZUFBZSxlQUFlLEVBQUUsUUFBUTtBQUNqRCxjQUFJLE9BQU8sZ0JBQWdCLFdBQVksYUFBWTtBQUFBLFFBQ3JEO0FBQ0Esd0JBQWdCLFlBQVksR0FBRztBQUFBLE1BQ2pDLENBQUM7QUFDRCxjQUFRLFlBQVksZUFBZTtBQUFBLElBQ3JDO0FBRUEsaUJBQWEsWUFBWSxPQUFPO0FBQ2hDLGlCQUFhLFlBQVksYUFBYTtBQUN0QyxXQUFPO0FBQUEsRUFDVDtBQVFBLFdBQVNFLG9CQUFtQk4sT0FBTSxTQUFTLGFBQWEsU0FBUyxXQUFXLE1BQU07QUFDaEYsVUFBTSxlQUFlLFNBQVMsZUFBZSxjQUFjO0FBQzNELFVBQU0sVUFBVSxTQUFTLGNBQWMsS0FBSztBQUM1QyxZQUFRLFlBQVk7QUFDcEIsVUFBTSxVQUFVLFNBQVMsY0FBYyxLQUFLO0FBQzVDLFlBQVEsWUFBWTtBQUNwQixVQUFNLFVBQVVLLFlBQVdMLEtBQUk7QUFDL0IsWUFBUSxZQUFZLFFBQ2pCLFFBQVEsa0JBQWtCLHFCQUFxQixFQUMvQyxRQUFRLE9BQU8sTUFBTTtBQUN4QixZQUFRLFlBQVksT0FBTztBQUMzQixRQUFJLE9BQU8sWUFBWSxZQUFZO0FBQ2pDLFlBQU0sTUFBTSxTQUFTLGNBQWMsUUFBUTtBQUMzQyxVQUFJLGNBQWM7QUFDbEIsVUFBSSxNQUFNLFVBQVU7QUFDcEIsVUFBSSxVQUFVLE1BQU07QUFBRSxnQkFBUSxPQUFPO0FBQUcsZ0JBQVE7QUFBQSxNQUFHO0FBQ25ELGNBQVEsWUFBWSxHQUFHO0FBQUEsSUFDekI7QUFDQSxRQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ2xDLFlBQU0sWUFBWSxTQUFTLGNBQWMsUUFBUTtBQUNqRCxnQkFBVSxjQUFjO0FBQ3hCLGdCQUFVLE1BQU0sVUFBVTtBQUMxQixnQkFBVSxVQUFVLE1BQU07QUFBRSxnQkFBUSxPQUFPO0FBQUcsaUJBQVM7QUFBQSxNQUFHO0FBQzFELGNBQVEsWUFBWSxTQUFTO0FBQUEsSUFDL0I7QUFDQSxpQkFBYSxZQUFZLE9BQU87QUFDaEMsaUJBQWEsWUFBWSxhQUFhO0FBQ3RDLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBU08seUJBQXdCLFFBQVE7QUFDdkMsUUFBSTtBQUNGLFlBQU0sY0FBY0MsbUJBQWtCLE1BQU07QUFDNUMsWUFBTSxPQUFPLE9BQU8sZ0JBQWdCLFdBQVcsS0FBSyxNQUFNLFdBQVcsSUFBSTtBQUV6RSxVQUFJLFFBQVEsT0FBTyxTQUFTLGFBQWEsS0FBSyxTQUFTLEtBQUssa0JBQWtCO0FBQzVFLGNBQU0sZUFBZSxTQUFTLGVBQWUsY0FBYztBQUMzRCxjQUFNLFVBQVUsU0FBUyxjQUFjLEtBQUs7QUFDNUMsZ0JBQVEsWUFBWTtBQUNwQixjQUFNLFVBQVUsU0FBUyxjQUFjLEtBQUs7QUFDNUMsZ0JBQVEsWUFBWTtBQUVwQixZQUFJSixRQUFPO0FBQ1gsWUFBSSxLQUFLLE1BQVEsQ0FBQUEsU0FBUSxpQ0FBaUMsS0FBSyxLQUFLLE9BQU8sS0FBSyxXQUFXLFNBQVM7QUFDcEcsWUFBSSxLQUFLLE9BQVEsQ0FBQUEsU0FBUSwrQkFBK0IsS0FBSyxNQUFNO0FBRW5FLFlBQUksS0FBSyxpQkFBaUIsUUFBUTtBQUNoQyxVQUFBQSxTQUFRO0FBQ1IsZUFBSyxnQkFBZ0IsUUFBUSxPQUFLO0FBQUUsWUFBQUEsU0FBUSxPQUFPLENBQUM7QUFBQSxVQUFTLENBQUM7QUFDOUQsVUFBQUEsU0FBUTtBQUFBLFFBQ1Y7QUFDQSxZQUFJLEtBQUssa0JBQWtCLFFBQVE7QUFDakMsVUFBQUEsU0FBUTtBQUNSLGVBQUssaUJBQWlCLFFBQVEsT0FBSztBQUFFLFlBQUFBLFNBQVEsT0FBTyxDQUFDO0FBQUEsVUFBUyxDQUFDO0FBQy9ELFVBQUFBLFNBQVE7QUFBQSxRQUNWO0FBQ0EsWUFBSSxLQUFLLDJCQUEyQixRQUFRO0FBQzFDLFVBQUFBLFNBQVE7QUFDUixlQUFLLDBCQUEwQixRQUFRLE9BQUs7QUFBRSxZQUFBQSxTQUFRLE9BQU8sQ0FBQztBQUFBLFVBQVMsQ0FBQztBQUN4RSxVQUFBQSxTQUFRO0FBQUEsUUFDVjtBQUNBLFlBQUksS0FBSyxjQUFjLFFBQVE7QUFDN0IsVUFBQUEsU0FBUTtBQUNSLGVBQUssYUFBYSxRQUFRLFFBQU07QUFDOUIsWUFBQUEsU0FBUSxzSUFBc0ksRUFBRTtBQUFBLFVBQ2xKLENBQUM7QUFDRCxVQUFBQSxTQUFRO0FBQUEsUUFDVjtBQUVBLGdCQUFRLFlBQVlBO0FBQ3BCLGdCQUFRLFlBQVksT0FBTztBQUMzQixxQkFBYSxZQUFZLE9BQU87QUFDaEMscUJBQWEsWUFBWSxhQUFhO0FBQUEsTUFDeEMsT0FBTztBQUNMLFFBQUFILGVBQWMsYUFBYSxNQUFNO0FBQUEsTUFDbkM7QUFBQSxJQUNGLFNBQVMsR0FBRztBQUNWLE1BQUFILEtBQUksTUFBTSwyQkFBMkIsQ0FBQztBQUN0QyxNQUFBRyxlQUFjLGFBQWEsTUFBTTtBQUFBLElBQ25DO0FBQUEsRUFDRjtBQUVBLFdBQVMsd0JBQXdCLFVBQVU7QUFDekMsUUFBSTtBQUNGLFlBQU0sT0FBTyxPQUFPLGFBQWEsV0FBVyxLQUFLLE1BQU0sUUFBUSxJQUFJO0FBQ25FLFVBQUksUUFBUSxPQUFPLFNBQVMsYUFBYSxLQUFLLFNBQVMsS0FBSyxrQkFBa0I7QUFDNUUsUUFBQU0seUJBQXdCLFFBQVE7QUFBQSxNQUNsQyxPQUFPO0FBQ0wsUUFBQU4sZUFBYyxhQUFhLFFBQVE7QUFBQSxNQUNyQztBQUFBLElBQ0YsU0FBUyxHQUFHO0FBQ1YsTUFBQUEsZUFBYyxhQUFhLFFBQVE7QUFBQSxJQUNyQztBQUFBLEVBQ0Y7QUFJQSxXQUFTUSxlQUFjTCxPQUFNO0FBQzNCLFVBQU0sZUFBZSxTQUFTLGVBQWUsY0FBYztBQUMzRCxRQUFJLENBQUMsYUFBYztBQUNuQixpQkFBYSxtQkFBbUIsYUFBYUEsS0FBSTtBQUNqRCxpQkFBYSxZQUFZLGFBQWE7QUFBQSxFQUN4Qzs7O0FDOVFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwrQkFBQU07QUFBQSxJQUFBO0FBQUEsNkJBQUFDO0FBQUEsSUFBQSxtQ0FBQUM7QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0NBQUFDO0FBQUEsSUFBQTtBQUFBLHFCQUFBQztBQUFBLElBQUEsNkJBQUFDO0FBQUEsSUFBQSxzQkFBQUM7QUFBQTtBQTJCQSxNQUFNQyxPQUFNLFVBQVUsbUJBQW1CO0FBTXpDLE1BQUlDLGtCQUFpQjtBQUFBLElBQ25CLGFBQWEsQ0FBQztBQUFBO0FBQUEsSUFDZCxRQUFRLENBQUM7QUFBQTtBQUFBLEVBQ1g7QUFDQSxNQUFJLG9CQUFvQjtBQUN4QixNQUFJLHdCQUF3QjtBQUc1QixNQUFNLGVBQWUsQ0FBQztBQUV0QixXQUFTLHVCQUF1QixTQUFTO0FBQ3ZDLFFBQUksQ0FBQyxRQUFTO0FBQ2QsVUFBTSxVQUFVLFNBQVMsZUFBZSxrQkFBa0I7QUFDMUQsUUFBSSxDQUFDLFFBQVM7QUFDZCxVQUFNLFFBQVEsQ0FBQztBQUNmLFlBQVEsaUJBQWlCLHlCQUF5QixFQUFFLFFBQVEsUUFBTTtBQUNoRSxVQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsU0FBUyxPQUFRO0FBQ2xDLFlBQU0sR0FBRyxFQUFFLElBQUssR0FBRyxTQUFTLGNBQWMsR0FBRyxTQUFTLFVBQVcsR0FBRyxVQUFVLEdBQUc7QUFBQSxJQUNuRixDQUFDO0FBQ0QsUUFBSSxPQUFPLEtBQUssS0FBSyxFQUFFLFNBQVMsR0FBRztBQUNqQyxtQkFBYSxPQUFPLElBQUk7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLDBCQUEwQixTQUFTO0FBQzFDLFVBQU0sU0FBUyxhQUFhLE9BQU87QUFDbkMsUUFBSSxDQUFDLE9BQVE7QUFDYixXQUFPLFFBQVEsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNO0FBQzlDLFlBQU0sS0FBSyxTQUFTLGVBQWUsRUFBRTtBQUNyQyxVQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxZQUFZLEdBQUcsU0FBUyxPQUFRO0FBQzdELFVBQUksR0FBRyxTQUFTLGNBQWMsR0FBRyxTQUFTLFNBQVM7QUFDakQsV0FBRyxVQUFVO0FBQUEsTUFDZixPQUFPO0FBQ0wsV0FBRyxRQUFRO0FBQUEsTUFDYjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFFQSxXQUFTLHFCQUFxQjtBQUM1QixXQUFPQyxjQUFhLGNBQWM7QUFBQSxFQUNwQztBQUVBLFdBQVMsd0JBQXdCO0FBQy9CLFdBQU9BLGNBQWEsZUFBZTtBQUFBLEVBQ3JDO0FBSUEsV0FBU0MseUJBQXdCO0FBQy9CLFFBQUk7QUFDRixZQUFNLFVBQVcsT0FBTyxtQkFBbUIsT0FBTyxnQkFBZ0Isd0JBQXlCRixnQkFBZSxlQUFlLENBQUM7QUFDMUgsWUFBTSxZQUFhLE9BQU8sbUJBQW1CLE9BQU8sZ0JBQWdCLG1CQUFvQkEsZ0JBQWUsVUFBVSxDQUFDO0FBQ2xILFlBQU0sVUFBVyxPQUFPLG1CQUFtQixPQUFPLGdCQUFnQix5QkFBMEIsT0FBTyx3QkFBd0IsQ0FBQztBQUU1SCxZQUFNLGNBQWMsT0FBTyxPQUFPLE9BQU8sRUFBRSxPQUFPLENBQUFHLE9BQUtBLE9BQU0sU0FBUyxFQUFFO0FBQ3hFLFlBQU0sZ0JBQWdCLE9BQU8sT0FBTyxTQUFTLEVBQUUsT0FBTyxDQUFBQSxPQUFLQSxPQUFNLFNBQVMsRUFBRTtBQUM1RSxZQUFNLGNBQWMsT0FBTyxPQUFPLE9BQU8sRUFBRSxPQUFPLENBQUFBLE9BQUtBLE9BQU0sU0FBUyxFQUFFO0FBRXhFLFlBQU0sU0FBUyxTQUFTLGVBQWUsZ0JBQWdCO0FBQ3ZELFlBQU0sV0FBVyxTQUFTLGVBQWUsbUJBQW1CO0FBQzVELFlBQU0sU0FBUyxTQUFTLGVBQWUseUJBQXlCO0FBRWhFLFVBQUksT0FBUSxRQUFPLGNBQWMsd0JBQWlCLGNBQWMsT0FBTyxjQUFjLE1BQU0sRUFBRTtBQUM3RixVQUFJLFNBQVUsVUFBUyxjQUFjLHlCQUFhLGdCQUFnQixPQUFPLGdCQUFnQixNQUFNLEVBQUU7QUFDakcsVUFBSSxPQUFRLFFBQU8sY0FBYyx5QkFBa0IsY0FBYyxPQUFPLGNBQWMsTUFBTSxFQUFFO0FBQUEsSUFDaEcsU0FBUyxHQUFHO0FBQUUsTUFBQUosS0FBSSxLQUFLLHNDQUFzQyxDQUFDO0FBQUEsSUFBRztBQUFBLEVBQ25FO0FBSUEsV0FBUyxxQkFBcUIsUUFBUSxTQUFTO0FBQzdDLFFBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxTQUFTLENBQUMsT0FBTyxNQUFNLFFBQVE7QUFDcEQsY0FBUSxZQUFZO0FBQ3BCO0FBQUEsSUFDRjtBQUVBLFVBQU0sT0FBVyxPQUFPLFlBQVksQ0FBQztBQUNyQyxVQUFNLE9BQVcsS0FBSyxRQUFZLEtBQUssWUFBWTtBQUNuRCxVQUFNLFVBQVcsS0FBSyxXQUFZO0FBQ2xDLFVBQU0sV0FBVyxRQUFRLFVBQVUsR0FBRyxJQUFJLFdBQU0sT0FBTyxLQUFLLFFBQVEsV0FBVztBQUUvRSxVQUFNLFFBQVEsRUFBRSxRQUFRLGFBQU0sU0FBUyxhQUFNLFNBQVMsWUFBSztBQUMzRCxVQUFNLFNBQVM7QUFBQSxNQUNiLFFBQVMsT0FBSyxFQUFFLFNBQVMsS0FBSyxJQUFJLFlBQWE7QUFBQSxNQUMvQyxTQUFTLE9BQUssRUFBRSxTQUFTLEtBQUssSUFBSSxhQUFhLEVBQUUsV0FBVyxjQUFjLElBQUksaUJBQWlCO0FBQUEsTUFDL0YsU0FBUyxNQUFNO0FBQUEsSUFDakI7QUFFQSxVQUFNLG1CQUFtQixvQkFBSSxJQUFJLENBQUMsUUFBUSxTQUFTLE9BQU8sQ0FBQztBQUMzRCxVQUFNLFNBQVMsT0FBTyxTQUFTLENBQUMsR0FBRyxPQUFPLE9BQUs7QUFDN0MsWUFBTSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUUsWUFBWTtBQUNwRCxhQUFPLGlCQUFpQixJQUFJLEdBQUcsS0FBSyxNQUFNO0FBQUEsSUFDNUMsQ0FBQztBQUVELFVBQU0sTUFBTSxPQUFPLHdCQUF3QixhQUFhLG9CQUFvQixJQUFJO0FBQ2hGLFVBQU0sZUFBZSxNQUFNLGVBQWUsbUJBQW1CLEdBQUcsQ0FBQyxLQUFLO0FBRXRFLFFBQUksV0FBVztBQUNmLGVBQVcsS0FBSyxPQUFPO0FBQ3JCLFlBQU0sTUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFlBQVk7QUFDdEQsWUFBTSxPQUFRLE1BQU0sR0FBRyxLQUFNO0FBQzdCLFlBQU0sUUFBUSxPQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUk7QUFDN0Msa0JBQVk7QUFBQTtBQUFBLHlDQUV5QixJQUFJO0FBQUE7QUFBQSx5RUFFNEIsS0FBSztBQUFBLG1IQUNxQyxXQUFXLENBQUMsQ0FBQztBQUFBO0FBQUEsaUNBRS9GLG1CQUFtQixDQUFDLENBQUMsR0FBRyxZQUFZLGVBQWUsV0FBVyxDQUFDLENBQUM7QUFBQTtBQUFBO0FBQUEsSUFHL0Y7QUFFQSxZQUFRLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsd0RBTWtDLFdBQVcsUUFBUSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJbEUsUUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1sQjtBQUtBLE1BQU0sd0JBQXdCLG9CQUFJLElBQUk7QUFDdEMsTUFBTSxrQkFBa0Isb0JBQUksSUFBSSxDQUFDLFNBQVMsYUFBYSxjQUFjLGNBQWMsaUJBQWlCLHVCQUF1QixrQkFBa0Isa0JBQWtCLHVCQUF1QixXQUFXLENBQUM7QUFFbE0sV0FBUyw4QkFBOEI7QUFDckMsMEJBQXNCLFFBQVEsVUFBUTtBQUNwQyxZQUFNLEtBQUssU0FBUyxlQUFlLE9BQU8sSUFBSSxFQUFFO0FBQ2hELFVBQUksR0FBSSxJQUFHLFVBQVUsSUFBSSxjQUFjO0FBQUEsSUFDekMsQ0FBQztBQUFBLEVBQ0g7QUFFQSxXQUFTSyxXQUFVLEtBQUs7QUFFdEIsUUFBSSxPQUFPLG1CQUFtQixXQUFZLGdCQUFlO0FBR3pELDJCQUF1QkgsY0FBYSxjQUFjLENBQUM7QUFHbkQsUUFBSSxPQUFPLG1CQUFtQixjQUFjLE9BQU8seUJBQXlCLFlBQVk7QUFDdEYsWUFBTSxXQUFXLGVBQWUsR0FBRztBQUNuQyxVQUFJLFVBQVU7QUFDWiw2QkFBcUIsUUFBUTtBQUM3Qiw0QkFBb0IsUUFBUTtBQUFBLE1BQzlCO0FBQUEsSUFDRjtBQUVBLFFBQUksT0FBT0EsZUFBYyxhQUFhLGNBQWMsT0FBTyxpQ0FBaUMsWUFBWTtBQUN0RyxtQ0FBNkJBLGNBQWEsU0FBUyxDQUFDO0FBQUEsSUFDdEQ7QUFHQSxhQUFTLGlCQUFpQixNQUFNLEVBQUUsUUFBUSxPQUFLO0FBQzdDLFFBQUUsVUFBVSxPQUFPLFFBQVE7QUFDM0IsUUFBRSxhQUFhLGlCQUFpQixPQUFPO0FBQ3ZDLFFBQUUsYUFBYSxZQUFZLElBQUk7QUFBQSxJQUNqQyxDQUFDO0FBQ0QsVUFBTSxZQUFZLFNBQVMsZUFBZSxPQUFPLEdBQUcsRUFBRTtBQUN0RCxRQUFJLFdBQVc7QUFDYixnQkFBVSxVQUFVLElBQUksUUFBUTtBQUNoQyxnQkFBVSxhQUFhLGlCQUFpQixNQUFNO0FBQzlDLGdCQUFVLGFBQWEsWUFBWSxHQUFHO0FBQ3RDLFlBQU0sV0FBVyxTQUFTLGVBQWUsa0JBQWtCO0FBQzNELFVBQUksU0FBVSxVQUFTLGFBQWEsbUJBQW1CLE9BQU8sR0FBRyxFQUFFO0FBQUEsSUFDckU7QUFDQSxJQUFBQSxjQUFhLGNBQWMsR0FBRztBQUc5QixRQUFJLGdCQUFnQixJQUFJLEdBQUcsR0FBRztBQUM1Qiw0QkFBc0IsSUFBSSxHQUFHO0FBQzdCLGtDQUE0QjtBQUFBLElBQzlCO0FBR0EsVUFBTSxZQUFZLFNBQVMsZUFBZSwwQkFBMEI7QUFDcEUsUUFBSSxhQUFhLFdBQVc7QUFDMUIsZ0JBQVUsY0FBYztBQUN4QixpQkFBVyxNQUFNO0FBQUUsa0JBQVUsY0FBYyxnQkFBZ0IsVUFBVSxZQUFZLEtBQUssQ0FBQztBQUFBLE1BQUksR0FBRyxFQUFFO0FBQUEsSUFDbEc7QUFHQSxRQUFJLE9BQU8sNEJBQTRCLFdBQVkseUJBQXdCLEdBQUc7QUFHOUUsVUFBTSxVQUFVLFNBQVMsZUFBZSxrQkFBa0I7QUFDMUQsWUFBUSxVQUFVLE9BQU8sY0FBYyxRQUFRLFVBQVU7QUFHekQsbUJBQWUsR0FBRztBQUFBLEVBQ3BCO0FBRUEsaUJBQWUsZUFBZSxLQUFLO0FBQ2pDLFVBQU0sVUFBVSxTQUFTLGVBQWUsa0JBQWtCO0FBQzFELFVBQU1JLFdBQVUsbUJBQW1CO0FBRW5DLFFBQUk7QUFDSixjQUFRLEtBQUs7QUFBQSxRQUNYLEtBQUs7QUFDSCxnQkFBTSxlQUFlO0FBQ3JCO0FBQUEsUUFDRixLQUFLO0FBQ0gsY0FBSSxPQUFPLHFCQUFxQixXQUFZLE9BQU0saUJBQWlCO0FBQ25FO0FBQUEsUUFDRixLQUFLO0FBQ0gsY0FBSUEsU0FBUSxVQUFVO0FBQ3BCLGdDQUFvQkEsU0FBUSxRQUFRO0FBQUEsVUFDdEMsT0FBTztBQUNMLG9CQUFRLFlBQVk7QUFBQSxVQUN0QjtBQUNBO0FBQUEsUUFDRixLQUFLO0FBQ0gsK0JBQXFCO0FBQ3JCO0FBQUEsUUFDRixLQUFLO0FBQ0gsVUFBQUQsV0FBVSxZQUFZO0FBQ3RCO0FBQUEsUUFDRixLQUFLO0FBQ0gsZ0JBQU0sa0JBQWtCLGFBQWE7QUFDckM7QUFBQSxRQUNGLEtBQUs7QUFDSCxnQkFBTSx3QkFBd0I7QUFDOUI7QUFBQSxRQUNGLEtBQUs7QUFDSCxnQkFBTSxrQkFBa0IsUUFBUTtBQUNoQztBQUFBLFFBQ0YsS0FBSztBQUNILGdCQUFNLGtCQUFrQixjQUFjO0FBQ3RDO0FBQUEsUUFDRixLQUFLO0FBQ0gsZ0JBQU0seUJBQXlCO0FBQy9CO0FBQUEsUUFDRixLQUFLO0FBQ0gsZ0JBQU0sa0JBQWtCLFNBQVM7QUFDakM7QUFBQSxRQUNGLEtBQUs7QUFDSCxnQkFBTSxrQkFBa0IsY0FBYztBQUN0QztBQUFBLFFBQ0YsS0FBSztBQUNILGNBQUksT0FBTyx3QkFBd0IsV0FBWSxPQUFNLG9CQUFvQjtBQUN6RTtBQUFBLFFBQ0YsS0FBSztBQUNILGNBQUksT0FBTyxvQkFBb0I7QUFDN0I7QUFBQSxjQUNFLE9BQU8sbUJBQW1CO0FBQUEsY0FDMUIsT0FBTyxtQkFBbUI7QUFBQSxZQUM1QjtBQUFBLFVBQ0YsT0FBTztBQUNMLG9CQUFRLFlBQVk7QUFDcEIsZ0JBQUk7QUFDRixvQkFBTSxPQUFPLE1BQU0sUUFBUSxPQUFPLGVBQWU7QUFDakQsa0JBQUksS0FBSyxVQUFVO0FBQ2pCLG1DQUFtQixLQUFLLFVBQVUsS0FBSyx1QkFBdUIsQ0FBQyxDQUFDO0FBQUEsY0FDbEUsT0FBTztBQUNMLHdCQUFRLFlBQVk7QUFBQSxjQUN0QjtBQUFBLFlBQ0YsU0FBUyxHQUFHO0FBQ1Ysc0JBQVEsWUFBWTtBQUFBLFlBQ3RCO0FBQUEsVUFDRjtBQUNBO0FBQUEsUUFDRixLQUFLO0FBQ0gsZ0JBQU0sb0JBQW9CO0FBQzFCO0FBQUEsUUFDRixLQUFLO0FBQ0gsK0JBQXFCQyxTQUFRLElBQUksT0FBTztBQUN4QztBQUFBLFFBQ0YsS0FBSztBQUNILGNBQUlBLFNBQVEsTUFBTSxPQUFPLEtBQUtBLFNBQVEsRUFBRSxFQUFFLFNBQVMsR0FBRztBQUNwRCxrQkFBTSxvQkFBb0JBLFNBQVEsRUFBRTtBQUFBLFVBQ3RDLE9BQU87QUFDTCxvQkFBUSxZQUFZO0FBQUEsVUFDdEI7QUFDQTtBQUFBLFFBQ0YsS0FBSztBQUNILGdCQUFNLHNCQUFzQjtBQUM1QjtBQUFBLFFBQ0YsS0FBSztBQUNILHFDQUEyQjtBQUMzQjtBQUFBLFFBQ0YsS0FBSztBQUNILGdCQUFNLG9CQUFvQjtBQUMxQjtBQUFBLFFBQ0YsS0FBSztBQUNILGNBQUksT0FBTyx1QkFBdUIsV0FBWSxPQUFNLG1CQUFtQjtBQUN2RTtBQUFBLFFBQ0YsS0FBSztBQUNILGNBQUksT0FBTyw2QkFBNkIsV0FBWSxPQUFNLHlCQUF5QjtBQUNuRjtBQUFBLFFBQ0YsS0FBSztBQUNILGNBQUksT0FBTyx3QkFBd0IsV0FBWSxPQUFNLG9CQUFvQjtBQUN6RTtBQUFBLFFBQ0YsS0FBSztBQUNILGdCQUFNLGtCQUFrQjtBQUN4QjtBQUFBLFFBQ0YsS0FBSztBQUNILGdCQUFNLHVCQUF1QjtBQUM3QjtBQUFBLFFBQ0YsS0FBSztBQUNILGdCQUFNLHFCQUFxQjtBQUMzQjtBQUFBLE1BQ0o7QUFBQSxJQUNBLFNBQVMsT0FBTztBQUNkLE1BQUFOLEtBQUksTUFBTSxxQkFBcUIsR0FBRyxLQUFLLEtBQUs7QUFHNUMsWUFBTSxlQUFlLFNBQVMsY0FBYyxHQUFHO0FBQy9DLG1CQUFhLE1BQU0sVUFBVTtBQUM3QixtQkFBYSxjQUFjLDBCQUEwQixNQUFNLE9BQU87QUFDbEUsY0FBUSxZQUFZLFlBQVk7QUFDaEM7QUFBQSxJQUNGO0FBR0EsOEJBQTBCLEdBQUc7QUFBQSxFQUMvQjtBQUlBLGlCQUFlTyx3QkFBdUI7QUFDcEMsUUFBSSxDQUFDLE9BQU8sd0JBQXdCO0FBQ2xDLG9CQUFjLGFBQWEscUVBQXFFO0FBQ2hHO0FBQUEsSUFDRjtBQUVBLElBQUFGLFdBQVUsWUFBWTtBQUN0QixrQkFBYyxhQUFhLDhPQUFvTztBQUFBLEVBQ2pRO0FBS0EsTUFBSSxtQkFBbUI7QUFDdkIsaUJBQWUsa0JBQWtCO0FBQy9CLFFBQUksaUJBQWtCLFFBQU87QUFDN0IsUUFBSTtBQUNGLFlBQU1HLGFBQVlOLGNBQWEsZ0JBQWdCQSxjQUFhLGFBQWE7QUFDekUsWUFBTSxNQUFNTSxhQUFZLCtCQUErQixtQkFBbUJBLFVBQVMsQ0FBQyxLQUFLO0FBQ3pGLFlBQU0sTUFBTyxNQUFNLE1BQU0sR0FBRztBQUM1QixVQUFJLENBQUMsSUFBSSxHQUFJLFFBQVEsbUJBQW1CLENBQUM7QUFDekMsWUFBTSxNQUFPLE1BQU0sSUFBSSxLQUFLO0FBQzVCLFlBQU0sZUFBZSxDQUFDO0FBQ3RCLFlBQU0saUJBQWlCLENBQUM7QUFDeEIsYUFBTyxRQUFRLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLEtBQUssTUFBTTtBQUM5QyxxQkFBYSxNQUFNLFlBQVksQ0FBQyxJQUFJO0FBQ3BDLGNBQU0sS0FBSyxNQUFNLFlBQVk7QUFDN0IsU0FBQyxlQUFlLEVBQUUsSUFBSSxlQUFlLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLO0FBQUEsTUFDNUQsQ0FBQztBQUNELHlCQUFtQixFQUFFLGNBQWMsZUFBZTtBQUFBLElBQ3BELFNBQVNDLElBQUc7QUFBRSx5QkFBbUIsQ0FBQztBQUFBLElBQUc7QUFDckMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLHFCQUFxQixJQUFJLFFBQVE7QUFDeEMsUUFBSSxDQUFDLFVBQVcsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLE9BQU8sZUFBaUIsUUFBTztBQUN4RSxVQUFNLEtBQUssR0FBRyxZQUFZO0FBRTFCLFFBQUksT0FBTyxhQUFhLEVBQUUsRUFBRyxRQUFPLE1BQU0sT0FBTyxhQUFhLEVBQUUsQ0FBQztBQUVqRSxVQUFNLFVBQVUsT0FBTyxrQkFBa0IsT0FBTyxlQUFlLEVBQUU7QUFDakUsUUFBSSxXQUFXLFFBQVEsT0FBUSxRQUFPLEtBQUssUUFBUSxLQUFLLElBQUksQ0FBQztBQUM3RCxXQUFPO0FBQUEsRUFDVDtBQUVBLGlCQUFlLG9CQUFvQixRQUFRO0FBQ3pDLFVBQU0sVUFBVSxTQUFTLGVBQWUsa0JBQWtCO0FBQzFELFFBQUk7QUFJRixVQUFJO0FBQ0osVUFBSSxXQUFXLFFBQVEsT0FBTyxXQUFXLFVBQVU7QUFDakQsZUFBTztBQUFBLE1BQ1QsT0FBTztBQUNMLGNBQU0sY0FBYyxrQkFBa0IsTUFBTTtBQUM1QyxlQUFPLE9BQU8sZ0JBQWdCLFdBQVcsS0FBSyxNQUFNLFdBQVcsSUFBSTtBQUFBLE1BQ3JFO0FBR0EsTUFBQVAsY0FBYSxXQUFXLFlBQVksTUFBTTtBQUMxQyxrQkFBWTtBQUdaLFVBQUlRLFFBQU87QUFDWCxNQUFBQSxTQUFRO0FBQ1IsTUFBQUEsU0FBUSxPQUFPLEtBQUssU0FBUyxNQUFNO0FBQ25DLFVBQUksS0FBSyxRQUFTLENBQUFBLFNBQVEsZ0NBQXlCLEtBQUssT0FBTztBQUMvRCxNQUFBQSxTQUFRO0FBQ1IsVUFBSSxLQUFLLFFBQVE7QUFDZixjQUFNLE9BQU8sS0FBSztBQUNsQixZQUFJLFlBQVk7QUFDaEIsWUFBSSxZQUFZO0FBQ2hCLFlBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIsY0FBSSxRQUFRLEtBQUs7QUFBRSx3QkFBWTtBQUFJLHdCQUFZLDRCQUE0QixLQUFLLE1BQU0sT0FBTyxHQUFHLENBQUM7QUFBQSxVQUFNLFdBQzlGLFFBQVEsS0FBSztBQUFFLHdCQUFZO0FBQU0sd0JBQVksOEJBQThCLEtBQUssTUFBTSxPQUFPLEdBQUcsQ0FBQztBQUFBLFVBQStCLE9BQ3BJO0FBQUUsd0JBQVk7QUFBTSx3QkFBWSwyQkFBMkIsS0FBSyxNQUFNLE9BQU8sR0FBRyxDQUFDO0FBQUEsVUFBMkQ7QUFBQSxRQUNuSjtBQUNBLFFBQUFBLFNBQVEsa0NBQWtDLFdBQVcsYUFBYSwyQkFBMkIsQ0FBQyxlQUFRLFdBQVcsS0FBSyxNQUFNLENBQUMsR0FBRyxTQUFTO0FBQUEsTUFDM0k7QUFDQSxVQUFJLEtBQUssV0FBWSxDQUFBQSxTQUFRLHFDQUE4QixLQUFLLFVBQVU7QUFDMUUsVUFBSSxLQUFLLGtCQUFtQixDQUFBQSxTQUFRLHFDQUE4QixLQUFLLGlCQUFpQjtBQUN4RixNQUFBQSxTQUFRO0FBR1IsWUFBTSxpQkFBaUIsTUFBTSxRQUFRLEtBQUssZUFBZSxJQUFJLEtBQUssa0JBQWtCLENBQUM7QUFDckYsWUFBTSxlQUFlLE9BQU8saUJBQWlCLENBQUM7QUFDOUMsVUFBSSxlQUFlLFNBQVMsS0FBSyxhQUFhLFNBQVMsR0FBRztBQUN4RCxjQUFNLFVBQVUsZUFBZTtBQUFBLFVBQU8sV0FDcEMsQ0FBQyxhQUFhLEtBQUssUUFBTSxHQUFHLFNBQVMsTUFBTSxZQUFZLENBQUMsS0FBSyxNQUFNLFlBQVksRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUFBLFFBQy9GO0FBQ0EsWUFBSSxRQUFRLFNBQVMsR0FBRztBQUN0QixVQUFBQSxTQUFRLGdEQUEyQyxRQUFRLE1BQU0sa0JBQWtCLFFBQVEsU0FBUyxJQUFJLE1BQU0sRUFBRSwwQ0FBMEMsUUFBUSxLQUFLLElBQUksQ0FBQztBQUFBLFFBQzlLO0FBQUEsTUFDRjtBQUdBLFVBQUksZUFBZSxTQUFTLEdBQUc7QUFDN0IsUUFBQUEsU0FBUTtBQUNSLHVCQUFlLFFBQVEsV0FBUztBQUM5QixnQkFBTSxZQUFZLGFBQWEsU0FBUyxLQUFLLENBQUMsYUFBYTtBQUFBLFlBQ3pELFFBQU0sR0FBRyxTQUFTLE1BQU0sWUFBWSxDQUFDLEtBQUssTUFBTSxZQUFZLEVBQUUsU0FBUyxFQUFFO0FBQUEsVUFDM0U7QUFDQSxVQUFBQSxTQUFRLDJCQUEyQixZQUFZLGFBQWEsRUFBRSxZQUFZLFlBQVkscUJBQXFCLG9CQUFvQixLQUFLLEtBQUssR0FBRyxZQUFZLHFEQUFxRCxFQUFFO0FBQUEsUUFDak4sQ0FBQztBQUNELFFBQUFBLFNBQVE7QUFBQSxNQUNWO0FBR0EsWUFBTSxZQUFZO0FBQUEsUUFDaEIsR0FBSSxNQUFNLFFBQVEsS0FBSyxnQkFBZ0IsSUFBSSxLQUFLLG1CQUFtQixDQUFDO0FBQUEsUUFDcEUsR0FBSSxNQUFNLFFBQVEsS0FBSyx5QkFBeUIsSUFBSSxLQUFLLDRCQUE0QixDQUFDO0FBQUEsTUFDeEY7QUFDQSxVQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3hCLFFBQUFBLFNBQVE7QUFDUixrQkFBVSxRQUFRLFVBQVE7QUFBRSxVQUFBQSxTQUFRLE9BQU8sSUFBSTtBQUFBLFFBQVMsQ0FBQztBQUN6RCxRQUFBQSxTQUFRO0FBQUEsTUFDVjtBQUdBLFlBQU0sU0FBUyxNQUFNLFFBQVEsS0FBSyxZQUFZLElBQUksS0FBSyxlQUFlLENBQUM7QUFDdkUsVUFBSSxPQUFPLFNBQVMsR0FBRztBQUNyQixjQUFNLFNBQVMsTUFBTSxnQkFBZ0I7QUFDckMsUUFBQUEsU0FBUTtBQUNSLGVBQU8sUUFBUSxDQUFDLElBQUksUUFBUTtBQUMxQixnQkFBTSxhQUFhLHFCQUFxQixJQUFJLE1BQU07QUFDbEQsZ0JBQU0sWUFBYSxhQUFhLG9CQUFvQixXQUFXLEtBQUssVUFBVSxDQUFDLE1BQU07QUFDckYsZ0JBQU0sWUFBYSxhQUFhLCtEQUErRCxXQUFXLFVBQVUsQ0FBQyxZQUFZO0FBQ2pJLFVBQUFBLFNBQVEseUJBQXlCLFNBQVMsMkJBQTJCLE1BQU0sQ0FBQyxVQUFVLFdBQVcsRUFBRSxDQUFDLEdBQUcsU0FBUztBQUFBLFFBQ2xILENBQUM7QUFDRCxRQUFBQSxTQUFRO0FBQUEsTUFDVjtBQUdBLFlBQU0sVUFBVSxNQUFNLFFBQVEsS0FBSyxrQkFBa0IsSUFBSSxLQUFLLHFCQUFxQixDQUFDO0FBQ3BGLFVBQUksUUFBUSxTQUFTLEdBQUc7QUFDdEIsUUFBQUEsU0FBUTtBQUNSLGdCQUFRLFFBQVEsT0FBSztBQUFFLFVBQUFBLFNBQVEsT0FBTyxDQUFDO0FBQUEsUUFBUyxDQUFDO0FBQ2pELFFBQUFBLFNBQVE7QUFBQSxNQUNWO0FBR0EsWUFBTSxXQUFXLE1BQU0sUUFBUSxLQUFLLHNCQUFzQixJQUFJLEtBQUsseUJBQXlCLENBQUM7QUFDN0YsVUFBSSxTQUFTLFNBQVMsR0FBRztBQUN2QixRQUFBQSxTQUFRO0FBQ1IsaUJBQVMsUUFBUSxPQUFLO0FBQUUsVUFBQUEsU0FBUSxPQUFPLENBQUM7QUFBQSxRQUFTLENBQUM7QUFDbEQsUUFBQUEsU0FBUTtBQUFBLE1BQ1Y7QUFFQSxNQUFBQSxTQUFRO0FBQ1IsTUFBQUEsU0FBUTtBQUNSLGNBQVEsWUFBWUE7QUFBQSxJQUN0QixTQUFTLEdBQUc7QUFDVixNQUFBVixLQUFJLE1BQU0sMkJBQTJCLEdBQUcsb0JBQW9CLE1BQU07QUFDbEUsY0FBUSxZQUFZLHNIQUFpSCxXQUFXLEVBQUUsT0FBTyxDQUFDLGtEQUFrRCxXQUFXLEtBQUssVUFBVSxRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFBQSxJQUN6UDtBQUFBLEVBQ0Y7QUFJQSxpQkFBZVcsNkJBQTRCLFVBQVU7QUFDbkQsUUFBSTtBQUVGLFlBQU0sT0FBUSxhQUFhLFFBQVEsT0FBTyxhQUFhLFdBQ25ELFdBQ0EsdUJBQXVCLFFBQVE7QUFDbkMsVUFBSSxDQUFDLE1BQU07QUFDVCxzQkFBYyxhQUFhLE9BQU8sYUFBYSxXQUFXLFdBQVcsRUFBRTtBQUN2RTtBQUFBLE1BQ0Y7QUFFQSxVQUFJLFNBQVMsS0FBSywyQkFBMkIsS0FBSyxxQkFBcUI7QUFDckUsUUFBQVQsY0FBYSxXQUFXLGtCQUFrQixJQUFJO0FBQzlDLGVBQU8seUJBQXlCO0FBQ2hDLG9CQUFZO0FBRVosWUFBSSxDQUFDLHNCQUFzQixHQUFHO0FBQzVCLHdCQUFjLGFBQWEsOE9BQW9PO0FBQy9QLFVBQUFHLFdBQVUsWUFBWTtBQUFBLFFBQ3hCO0FBQUEsTUFDRixXQUFXLENBQUMsc0JBQXNCLEdBQUc7QUFDbkMsc0JBQWMsYUFBYSxRQUFRO0FBQUEsTUFDckM7QUFBQSxJQUNGLFNBQVMsR0FBRztBQUNWLE1BQUFMLEtBQUksTUFBTSxpQ0FBaUMsQ0FBQztBQUM1QyxVQUFJLENBQUMsc0JBQXNCLEdBQUc7QUFDNUIsc0JBQWMsYUFBYSxRQUFRO0FBQUEsTUFDckM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQWdFQSxpQkFBZSxrQkFBa0IsTUFBTTtBQUNyQyxVQUFNLFVBQVUsU0FBUyxlQUFlLGtCQUFrQjtBQUMxRCxVQUFNLGlCQUFpQlksY0FBYSxXQUFXLGdCQUFnQjtBQUUvRCxRQUFJLENBQUMsT0FBTywwQkFBMEIsQ0FBQyxnQkFBZ0I7QUFDckQsY0FBUSxZQUFZO0FBQ3BCO0FBQUEsSUFDRjtBQUVBLFVBQU0sYUFBYTtBQUFBLE1BQ2pCLGFBQWUsRUFBRSxPQUFPLElBQUksTUFBTSx5RkFBaUcsV0FBVyw2QkFBK0I7QUFBQSxNQUM3SyxRQUFlLEVBQUUsT0FBTywwQkFBd0IsTUFBTSwwREFBc0YsV0FBVyx5QkFBK0I7QUFBQSxNQUN0TCxjQUFlLEVBQUUsT0FBTywwQkFBd0IsTUFBTSxvRkFBcUYsV0FBVywrQkFBZ0M7QUFBQSxNQUN0TCxTQUFlLEVBQUUsT0FBTyxrQ0FBMkIsTUFBTSxzRkFBdUYsV0FBVywwQkFBNkI7QUFBQSxNQUN4TCxjQUFlLEVBQUUsT0FBTywwQkFBd0IsTUFBTSw0RUFBcUYsV0FBVywrQkFBK0I7QUFBQSxJQUN2TDtBQUNBLFVBQU0sTUFBTSxXQUFXLElBQUksS0FBSyxDQUFDO0FBRWpDLFVBQU0sYUFBYSxTQUFTLGdCQUFnQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFRdkMsSUFBSSxRQUFRLGdDQUFnQyxJQUFJLEtBQUssVUFBVTtBQUVwRSxVQUFNLFVBQVU7QUFBQSxNQUNkLFFBQWM7QUFBQSxNQUNkLGNBQWM7QUFBQSxNQUNkLGNBQWM7QUFBQSxJQUNoQjtBQUNBLFVBQU0sY0FBYztBQUFBLE1BQ2xCLGFBQWM7QUFBQSxNQUNkLFFBQWM7QUFBQSxNQUNkLGNBQWM7QUFBQSxNQUNkLGNBQWM7QUFBQSxJQUNoQjtBQUNBLFVBQU0sVUFBVSxTQUFTLFlBQVksS0FBSztBQUFBLDZCQUNmLFNBQVMsZ0JBQWdCLGFBQWEsRUFBRTtBQUFBLFFBQzdELFFBQVEsSUFBSSxLQUFLLEVBQUU7QUFBQSxRQUNuQixZQUFZLElBQUksS0FBSyxFQUFFO0FBQUE7QUFHN0IsWUFBUSxZQUFZO0FBQUEsTUFDaEIsVUFBVTtBQUFBLE1BQ1YsSUFBSSxPQUFPLGlFQUFpRSxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUFBLGVBQ2xHLElBQUksU0FBUztBQUFBLE1BQ3RCLE9BQU87QUFBQTtBQUdYLFdBQU8sb0JBQW9CO0FBQzNCLFlBQVEsTUFBTTtBQUFBLE1BQ1osS0FBSztBQUNILGNBQU0sMkJBQTJCO0FBQ2pDLFFBQUFDLHFCQUFvQjtBQUNwQjtBQUFBLE1BQ0YsS0FBSztBQUNILGNBQU0sdUJBQXVCO0FBQzdCO0FBQUEsTUFDRixLQUFLO0FBQ0gsY0FBTSw2QkFBNkI7QUFDbkM7QUFBQSxNQUNGLEtBQUs7QUFDSCxjQUFNLHlCQUF5QjtBQUMvQjtBQUFBLE1BQ0YsS0FBSztBQUNILGNBQU0sNkJBQTZCO0FBQ25DO0FBQUEsSUFDSjtBQUFBLEVBQ0Y7QUFHQSxTQUFPLG9CQUFvQjtBQUUzQixpQkFBZSxtQkFBbUIsTUFBTTtBQUV0QyxhQUFTLGlCQUFpQixnQkFBZ0IsRUFBRSxRQUFRLFNBQU87QUFDekQsVUFBSSxVQUFVLE9BQU8sVUFBVSxJQUFJLFFBQVEsU0FBUyxJQUFJO0FBQUEsSUFDMUQsQ0FBQztBQUdELGFBQVMsaUJBQWlCLGNBQWMsRUFBRSxRQUFRLE9BQUssRUFBRSxNQUFNLFVBQVUsTUFBTTtBQUMvRSxVQUFNLFNBQVMsU0FBUyxlQUFlLGVBQWUsSUFBSSxFQUFFO0FBQzVELFFBQUksT0FBUSxRQUFPLE1BQU0sVUFBVTtBQUVuQyxXQUFPLG9CQUFvQjtBQUczQixRQUFJLENBQUMsT0FBTyxxQkFBcUIsQ0FBQyxPQUFPLGtCQUFrQixJQUFJLEdBQUc7QUFDaEUsWUFBTSxnQkFBZ0IsSUFBSTtBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUVBLGlCQUFlLGdCQUFnQixNQUFNO0FBQ25DLFFBQUksQ0FBQyxPQUFPLGtCQUFtQixRQUFPLG9CQUFvQixDQUFDO0FBQzNELFFBQUk7QUFDRixjQUFRLE1BQU07QUFBQSxRQUNaLEtBQUs7QUFBaUIsZ0JBQU0sMkJBQTJCO0FBQUk7QUFBQSxRQUMzRCxLQUFLO0FBQWlCLGdCQUFNLHVCQUF1QjtBQUFTO0FBQUEsUUFDNUQsS0FBSztBQUFpQixnQkFBTSw2QkFBNkI7QUFBRztBQUFBLFFBQzVELEtBQUs7QUFBaUIsZ0JBQU0seUJBQXlCO0FBQU87QUFBQSxRQUM1RCxLQUFLO0FBQWlCLGdCQUFNLDZCQUE2QjtBQUFHO0FBQUEsUUFDNUQ7QUFBUztBQUFBLE1BQ1g7QUFDQSxhQUFPLGtCQUFrQixJQUFJLElBQUk7QUFBQSxJQUNuQyxTQUFTLE9BQU87QUFDZCxhQUFPLE9BQU8sa0JBQWtCLElBQUk7QUFDcEMsWUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBSUEsV0FBU0EsdUJBQXNCO0FBQzdCLFVBQU0sU0FBUyxTQUFTLGVBQWUsc0JBQXNCO0FBQzdELFFBQUksQ0FBQyxPQUFRO0FBRWIsVUFBTSxRQUFRLFNBQVMsZUFBZSxVQUFVO0FBQ2hELFVBQU0sT0FBTyxTQUFTLGVBQWUsU0FBUztBQUM5QyxVQUFNLE9BQU8sU0FBUyxlQUFlLFNBQVM7QUFFOUMsUUFBSSxNQUFPLE9BQU0sY0FBYztBQUMvQixRQUFJLEtBQU0sTUFBSyxNQUFNLFFBQVE7QUFDN0IsUUFBSSxLQUFNLE1BQUssY0FBYztBQUU3QixVQUFNLFVBQVU7QUFBQSxNQUNkLHNCQUFzQjtBQUFBLFFBQ3BCLEdBQUssT0FBTyxtQkFBbUIsT0FBTyxnQkFBZ0Isd0JBQXlCLENBQUM7QUFBQSxRQUNoRixHQUFJQyxnQkFBZSxlQUFlLENBQUM7QUFBQSxNQUNyQztBQUFBLE1BQ0EsaUJBQWlCO0FBQUEsUUFDZixHQUFLLE9BQU8sbUJBQW1CLE9BQU8sZ0JBQWdCLG1CQUFvQixDQUFDO0FBQUEsUUFDM0UsR0FBSUEsZ0JBQWUsVUFBVSxDQUFDO0FBQUEsTUFDaEM7QUFBQSxNQUNBLHVCQUNHLE9BQU8sbUJBQW1CLE9BQU8sZ0JBQWdCLHlCQUMvQyxPQUFPLHdCQUNQLENBQUM7QUFBQSxNQUVOLHVCQUNHLE9BQU8sbUJBQW1CLE9BQU8sZ0JBQWdCLHlCQUMvQyxPQUFPLHdCQUNQLENBQUM7QUFBQSxNQUVOLHdCQUF3QixPQUFPLHNCQUFzQjtBQUFBLElBQ3ZEO0FBRUEsVUFBTSxZQUFZLEVBQUU7QUFDcEIsaUJBQWEsaUJBQWlCO0FBQzlCLHdCQUFvQixXQUFXLFlBQVk7QUFDekMsVUFBSTtBQUNGLGNBQU0sV0FBVyxNQUFNLFFBQVEsUUFBUSwyQkFBMkIsT0FBTztBQUN6RSxZQUFJLENBQUMsU0FBUyxHQUFJLE9BQU0sSUFBSSxNQUFNLFNBQVMsU0FBUyxpQkFBaUI7QUFDckUsWUFBSSxjQUFjLHNCQUF1QjtBQUV6QyxjQUFNLFFBQVEsT0FBTyxTQUFTLHVCQUF1QixDQUFDO0FBQ3RELGNBQU0sTUFBTSxLQUFLLElBQUksS0FBTSxRQUFRLElBQUssR0FBRztBQUMzQyxjQUFNLGFBQWEsT0FBTyxTQUFTLHlCQUF5QixDQUFDO0FBRTdELFlBQUksTUFBTTtBQUNWLFlBQUksU0FBUztBQUNiLFlBQUksV0FBVyxTQUFTLG9CQUFvQixPQUFPLFdBQU07QUFDekQsWUFBSSxTQUFTLHFCQUFxQjtBQUNoQyxnQkFBTSxRQUFRLElBQUksU0FBUztBQUMzQixtQkFBUyxRQUFRLElBQUksWUFBWTtBQUNqQyxxQkFBVyxRQUFRLElBQUksY0FBTztBQUFBLFFBQ2hDO0FBRUEsY0FBTSxjQUFjLFNBQVMsb0JBQW9CLE9BQzdDLFVBQVUsU0FBUyxnQkFBZ0IsUUFBUSxTQUFTLHFCQUFxQixJQUFJLEtBQUssR0FBRyxLQUNyRixjQUFjLE1BQU0sUUFBUSxDQUFDLENBQUM7QUFDbEMsY0FBTSxrQkFBa0IsU0FBUyxvQkFBb0IsT0FDakQsS0FDQSxLQUFLLEtBQUssTUFBTSxhQUFhLEdBQUcsQ0FBQztBQUNyQyxjQUFNLGtCQUFrQixNQUFNLFFBQVEsU0FBUyxZQUFZLEtBQUssU0FBUyxhQUFhLFNBQVMsSUFDM0YsSUFBSSxTQUFTLGFBQWEsQ0FBQyxDQUFDLE1BQzVCO0FBQ0osY0FBTSxjQUFjLFNBQVMsa0NBQWtDLFNBQVMsb0JBQW9CLE9BQ3hGLGdDQUNBO0FBRUosZUFBTyxZQUFZLGlCQUFpQixHQUFHO0FBQ3ZDLFlBQUksT0FBTztBQUNULGdCQUFNLGNBQWMsR0FBRyxXQUFXLEdBQUcsZUFBZSxJQUFJLGVBQWUsR0FBRyxXQUFXLEdBQUcsS0FBSztBQUFBLFFBQy9GO0FBQ0EsWUFBSSxNQUFNO0FBQ1IsZUFBSyxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQ3pCLGVBQUssTUFBTSxhQUFhO0FBQUEsUUFDMUI7QUFDQSxZQUFJLEtBQU0sTUFBSyxjQUFjO0FBRTdCLFFBQUFGLGNBQWEsbUJBQW1CO0FBQUEsVUFDOUIsbUJBQW1CLFNBQVMsdUJBQXVCO0FBQUEsVUFDbkQsZ0JBQWdCLFNBQVMsb0JBQW9CO0FBQUEsVUFDN0MscUJBQXFCLFNBQVMseUJBQXlCO0FBQUEsVUFDdkQsaUJBQWlCLFNBQVMscUJBQXFCO0FBQUEsVUFDL0MsdUJBQXVCLFFBQVEsU0FBUyw4QkFBOEI7QUFBQSxVQUN0RSxhQUFhLFFBQVEsU0FBUyxtQkFBbUI7QUFBQSxRQUNuRCxDQUFDO0FBQUEsTUFDSCxTQUFTLE9BQU87QUFDZCxZQUFJLGNBQWMsc0JBQXVCO0FBQ3pDLGVBQU8sWUFBWTtBQUNuQixZQUFJLE1BQU8sT0FBTSxjQUFjLGdDQUFnQyxNQUFNLE9BQU87QUFDNUUsWUFBSSxNQUFNO0FBQ1IsZUFBSyxNQUFNLFFBQVE7QUFDbkIsZUFBSyxNQUFNLGFBQWE7QUFBQSxRQUMxQjtBQUNBLFlBQUksS0FBTSxNQUFLLGNBQWM7QUFBQSxNQUMvQjtBQUFBLElBQ0YsR0FBRyxHQUFHO0FBQUEsRUFDUjtBQUlBLFdBQVNHLG1CQUFrQixRQUFRLFFBQVEsTUFBTTtBQUUvQyxVQUFNLE1BQU0sU0FBUyxlQUNqQixTQUFTLGNBQWMsbUJBQW1CLE1BQU0sSUFBSSxJQUNwRCxTQUFTLGNBQWMsa0JBQWtCLE1BQU0sSUFBSTtBQUV2RCxVQUFNLFVBQVUsSUFBSSxpQkFBaUIsV0FBVztBQUNoRCxZQUFRLFFBQVEsU0FBTztBQUNyQixVQUFJLFVBQVUsT0FBTyxRQUFRO0FBQzdCLFVBQUksSUFBSSxhQUFhLGNBQWMsRUFBRyxLQUFJLGFBQWEsZ0JBQWdCLE9BQU87QUFBQSxJQUNoRixDQUFDO0FBR0QsVUFBTSxhQUFhLElBQUksY0FBYyxpQkFBaUIsTUFBTSxJQUFJO0FBQ2hFLGVBQVcsVUFBVSxJQUFJLFFBQVE7QUFDakMsUUFBSSxXQUFXLGFBQWEsY0FBYyxFQUFHLFlBQVcsYUFBYSxnQkFBZ0IsTUFBTTtBQUczRixRQUFJLFNBQVMsY0FBYztBQUN6QixNQUFBRCxnQkFBZSxZQUFZLE1BQU0sSUFBSTtBQUNyQyxhQUFPLHNCQUFzQixPQUFPLHVCQUF1QixFQUFFLGFBQWEsb0JBQUksSUFBSSxHQUFHLFFBQVEsb0JBQUksSUFBSSxFQUFFO0FBQ3ZHLGFBQU8sb0JBQW9CLFlBQVksSUFBSSxNQUFNO0FBQUEsSUFDbkQsT0FBTztBQUNMLE1BQUFBLGdCQUFlLE9BQU8sTUFBTSxJQUFJO0FBQ2hDLGFBQU8sc0JBQXNCLE9BQU8sdUJBQXVCLEVBQUUsYUFBYSxvQkFBSSxJQUFJLEdBQUcsUUFBUSxvQkFBSSxJQUFJLEVBQUU7QUFDdkcsYUFBTyxvQkFBb0IsT0FBTyxJQUFJLE1BQU07QUFBQSxJQUM5QztBQUNBLElBQUFELHFCQUFvQjtBQUFBLEVBQ3RCO0FBT0EsV0FBUyxXQUFXLFFBQVEsTUFBTTtBQUNoQyxVQUFNLFVBQVcsU0FBUyxlQUFlLDZCQUE2QjtBQUN0RSxVQUFNLE9BQVcsT0FBTywwQkFBMEIsQ0FBQztBQUNuRCxVQUFNLEtBQVcsRUFBRSxHQUFHLFVBQVUsWUFBWSxPQUFPLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxJQUFJO0FBR2hGLFVBQU0sT0FBTyxLQUNULEdBQUcsS0FBSyxFQUFFLFFBQVEsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsSUFDL0MsTUFBTSxLQUFLLFNBQVMsaUJBQWlCLEdBQUcsT0FBTyxXQUFXLENBQUM7QUFFL0QsU0FBSyxRQUFRLFNBQU87QUFDbEIsWUFBTSxRQUFXLElBQUksUUFBUTtBQUM3QixZQUFNLFVBQVcsSUFBSSxRQUFRO0FBQzdCLFlBQU0sU0FBVyxTQUFTO0FBQzFCLFVBQUksQ0FBQyxPQUFRO0FBRWIsVUFBSSxpQkFBaUI7QUFDckIsVUFBSSxXQUFXLGVBQWU7QUFDNUIseUJBQWlCLFNBQVMsZUFDdEIsbUJBQW1CLFFBQVEsSUFBSSxJQUMvQixxQkFBcUIsUUFBUSxJQUFJO0FBQUEsTUFDdkM7QUFHQSxVQUFJLGlCQUFpQixXQUFXLEVBQUUsUUFBUSxTQUFPO0FBQy9DLFlBQUksVUFBVSxPQUFPLFFBQVE7QUFDN0IsWUFBSSxJQUFJLGFBQWEsY0FBYyxFQUFHLEtBQUksYUFBYSxnQkFBZ0IsT0FBTztBQUFBLE1BQ2hGLENBQUM7QUFDRCxZQUFNLFNBQVMsSUFBSSxjQUFjLGlCQUFpQixjQUFjLElBQUk7QUFDcEUsVUFBSSxRQUFRO0FBQ1YsZUFBTyxVQUFVLElBQUksUUFBUTtBQUM3QixZQUFJLE9BQU8sYUFBYSxjQUFjLEVBQUcsUUFBTyxhQUFhLGdCQUFnQixNQUFNO0FBQUEsTUFDckY7QUFHQSxVQUFJLFNBQVMsY0FBYztBQUN6QixRQUFBQyxnQkFBZSxZQUFZLE1BQU0sSUFBSTtBQUFBLE1BQ3ZDLE9BQU87QUFDTCxRQUFBQSxnQkFBZSxPQUFPLE1BQU0sSUFBSTtBQUFBLE1BQ2xDO0FBQUEsSUFDRixDQUFDO0FBQ0QsSUFBQUQscUJBQW9CO0FBQUEsRUFDdEI7QUFFQSxXQUFTLG1CQUFtQixPQUFPLE1BQU07QUFDdkMsVUFBTSxNQUFNLDRCQUE0QixPQUFPLElBQUk7QUFDbkQsUUFBSSxRQUFRLFlBQWdCLFFBQU87QUFDbkMsUUFBSSxRQUFRLFVBQWdCLFFBQU87QUFDbkMsUUFBSSxRQUFRLGVBQWdCLFFBQU87QUFDbkMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLHFCQUFxQixXQUFXLE1BQU07QUFDN0MsVUFBTSxNQUFNLHVCQUF1QixXQUFXLElBQUk7QUFDbEQsUUFBSSxRQUFRLFlBQWdCLFFBQU87QUFDbkMsUUFBSSxRQUFRLFVBQWdCLFFBQU87QUFDbkMsUUFBSSxRQUFRLGVBQWdCLFFBQU87QUFDbkMsV0FBTztBQUFBLEVBQ1Q7QUFJQSxpQkFBZSwyQkFBMkI7QUFDeEMsVUFBTSxVQUFVLFNBQVMsZUFBZSxrQkFBa0I7QUFDMUQsUUFBSSxDQUFDLFFBQVM7QUFDZCxZQUFRLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFJcEIsUUFBSSxPQUFPLDhCQUE4QixZQUFZO0FBQ25ELFlBQU0sMEJBQTBCO0FBQUEsSUFDbEM7QUFBQSxFQUNGOzs7QUM3NkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUNBQUFHO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQSw2QkFBQUM7QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw2QkFBQUM7QUFBQSxJQUFBO0FBQUE7QUFvQkEsTUFBTUMsT0FBTSxVQUFVLGdCQUFnQjtBQUl0QyxXQUFTLG9DQUFvQyxPQUFPO0FBQ2xELFVBQU0sT0FBTyxXQUFXLFFBQVE7QUFDaEMsUUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLFFBQVEsS0FBSywwQkFBMEIsRUFBRyxRQUFPO0FBQ3JFLFdBQU8sS0FBSywyQkFBMkIsS0FBSyxDQUFDLFFBQVEsT0FBTyxLQUFLLE1BQU0sS0FBSyxpQkFBaUIsRUFBRSxNQUFNLE9BQU8sS0FBSyxDQUFDLEtBQUs7QUFBQSxFQUN6SDtBQUlBLE1BQU0sY0FBYztBQUFBLElBQ2xCO0FBQUEsSUFBTztBQUFBLElBQVk7QUFBQSxJQUFrQjtBQUFBLElBQVc7QUFBQSxJQUFTO0FBQUEsSUFDekQ7QUFBQSxJQUFZO0FBQUEsSUFBZ0I7QUFBQSxJQUFhO0FBQUEsSUFBa0I7QUFBQSxJQUFhO0FBQUEsRUFDMUU7QUFDQSxNQUFNLGdCQUFnQjtBQUFBLElBQ3BCLEtBQWdCO0FBQUEsSUFDaEIsVUFBZ0I7QUFBQSxJQUNoQixnQkFBZ0I7QUFBQSxJQUNoQixTQUFnQjtBQUFBLElBQ2hCLE9BQWdCO0FBQUEsSUFDaEIsUUFBZ0I7QUFBQSxJQUNoQixVQUFnQjtBQUFBLElBQ2hCLGNBQWdCO0FBQUEsSUFDaEIsV0FBZ0I7QUFBQSxJQUNoQixnQkFBZ0I7QUFBQSxJQUNoQixXQUFnQjtBQUFBLElBQ2hCLFNBQWdCO0FBQUEsRUFDbEI7QUFDQSxNQUFNLGlCQUFpQjtBQUFBLElBQ3JCLDBCQUEwQjtBQUFBLElBQzFCLGFBQWE7QUFBQSxFQUNmO0FBRUEsTUFBTSxrQkFBa0I7QUFBQSxJQUN0QixVQUFVO0FBQUEsRUFDWjtBQUVBLFdBQVMsc0NBQXNDO0FBQzdDLFVBQU0sWUFBWUMsY0FBYSxtQkFBbUI7QUFDbEQsVUFBTUMsbUJBQWtCRCxjQUFhLG1CQUFtQjtBQUN4RCxVQUFNLGFBQWEsU0FBUyxlQUFlLGFBQWE7QUFFeEQsUUFBSSxZQUFZO0FBQ2QsaUJBQVcsVUFBVSxPQUFPLFNBQVMsZ0JBQWdCO0FBQ3JELFlBQU0sUUFBUSxXQUFXLGNBQWMsYUFBYSxHQUFHLGFBQWE7QUFDcEUsWUFBTSxjQUFjLFdBQVcsY0FBYyxvQkFBb0IsR0FBRyxhQUFhO0FBQ2pGLFlBQU0sYUFBYSxVQUFVLFVBQ3pCLHNFQUNBO0FBQ0osVUFBSSxVQUFVLFNBQVM7QUFDckIsbUJBQVcsVUFBVSxJQUFJLE9BQU87QUFDaEMsWUFBSSxVQUFVLFdBQVksWUFBVyxVQUFVLElBQUksZ0JBQWdCO0FBQUEsTUFDckU7QUFDQSxpQkFBVyxZQUFZLDBCQUFtQixVQUFVLEdBQUcsY0FBYyxJQUFJLFdBQVcsS0FBSyxFQUFFLEdBQUcsUUFBUSxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQUEsSUFDeEg7QUFFQSxVQUFNLHNCQUFzQixVQUFVLFdBQVc7QUFBQSxNQUMvQ0MsaUJBQWdCLG9CQUFvQkEsaUJBQWdCLFVBQVU7QUFBQSxJQUNoRTtBQUNBLFdBQU8sUUFBUSxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU07QUFDeEQsWUFBTSxRQUFRLFNBQVMsZUFBZSxPQUFPLEdBQUcsRUFBRTtBQUNsRCxVQUFJLENBQUMsTUFBTztBQUNaLFlBQU0sVUFBVSxPQUFPLGFBQWEsb0JBQW9CO0FBQ3hELFVBQUkscUJBQXFCO0FBQ3ZCLGNBQU0sVUFBVSxJQUFJLFdBQVc7QUFDL0IsWUFBSSxVQUFVLFdBQVksT0FBTSxVQUFVLElBQUksb0JBQW9CO0FBQ2xFLGNBQU0sWUFBWSxHQUFHLEtBQUs7QUFBQSxNQUM1QixPQUFPO0FBQ0wsY0FBTSxjQUFjO0FBQUEsTUFDdEI7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBSUEsaUJBQWUsWUFBWSxNQUFNLFVBQVU7QUFDekMsUUFBSTtBQUNGLFlBQU0sT0FBTyxXQUFXLEVBQUMsT0FBTyxNQUFNLFNBQVEsSUFBSSxFQUFDLE9BQU8sS0FBSTtBQUM5RCxZQUFNLE1BQU8sTUFBTSxNQUFNLHNCQUFzQjtBQUFBLFFBQzdDLFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBQyxnQkFBZ0IsbUJBQWtCO0FBQUEsUUFDNUMsTUFBTSxLQUFLLFVBQVUsSUFBSTtBQUFBLE1BQzNCLENBQUM7QUFDRCxZQUFNLE9BQU8sTUFBTSxJQUFJLEtBQUs7QUFDNUIsVUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSTtBQUN2QiwyQkFBbUIsc0NBQWlDLEtBQUssU0FBUyxrQkFBa0IsTUFBTSxZQUFZLE1BQU0sUUFBUSxDQUFDO0FBQ3JIO0FBQUEsTUFDRjtBQUNBLG9CQUFjLGFBQWEsNkJBQXdCLElBQUksZ0RBQWdEO0FBQ3ZHLFVBQUksU0FBVSxlQUFjLFVBQVUsZ0NBQWdDLFFBQVEsR0FBRztBQUNqRixZQUFNLFlBQVk7QUFHbEIsWUFBTSxTQUFTO0FBQUEsUUFDYixLQUFnQjtBQUFBLFFBQ2hCLFVBQWdCO0FBQUEsUUFDaEIsZ0JBQWdCO0FBQUEsUUFDaEIsU0FBZ0I7QUFBQSxRQUNoQixPQUFnQjtBQUFBLE1BQ2xCO0FBQ0EsWUFBTSxjQUFjLE9BQU8sSUFBSSxLQUFLLE9BQU8sS0FBSyxLQUFLLEtBQUs7QUFDMUQsVUFBSSxZQUFhLFdBQVUsV0FBVztBQUFBLElBQ3hDLFNBQVMsS0FBSztBQUNaLHlCQUFtQiwwQ0FBcUMsSUFBSSxTQUFTLE1BQU0sWUFBWSxJQUFJLENBQUM7QUFBQSxJQUM5RjtBQUFBLEVBQ0Y7QUFVQSxXQUFTLHVCQUF1QixNQUFNLE1BQU0sV0FBVztBQUNyRCxVQUFNLFVBQWEsWUFBWSxRQUFRLElBQUk7QUFFM0MsVUFBTSxhQUFhLFlBQVksTUFBTSxVQUFVLENBQUMsRUFBRSxPQUFPLE9BQUs7QUFDNUQsWUFBTSxLQUFLLFNBQVMsZUFBZSxRQUFRLENBQUMsRUFBRTtBQUM5QyxhQUFPLE1BQU0sR0FBRyxVQUFVLFNBQVMsV0FBVztBQUFBLElBQ2hELENBQUM7QUFDRCxVQUFNLFlBQWEsY0FBYyxJQUFJLEtBQUs7QUFFMUMsVUFBTSxRQUFRLFNBQVMsVUFDbkIsaUJBQVksU0FBUyxNQUNyQiwyQkFBc0IsU0FBUztBQUNuQyxVQUFNLFdBQVcsU0FBUyxVQUN0Qix1RkFDQTtBQUNKLFVBQU0sT0FBTztBQUViLFVBQU0sV0FBVyxXQUNkLElBQUksT0FBSyw4QkFBOEIsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQ25FLEtBQUssRUFBRTtBQUVWLFVBQU0sVUFBVSxTQUFTLGNBQWMsS0FBSztBQUM1QyxZQUFRLEtBQUs7QUFDYixZQUFRLE1BQU0sVUFBVTtBQUFBO0FBRXhCLFlBQVEsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFLWixXQUFXLEtBQUssQ0FBQztBQUFBLGlFQUNzQyxXQUFXLFFBQVEsQ0FBQztBQUFBLHFGQUNBLFFBQVE7QUFBQSxtRUFDMUIsV0FBVyxJQUFJLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT2pGLGFBQVMsS0FBSyxZQUFZLE9BQU87QUFDakMsaUNBQTZCLFNBQVM7QUFDdEMsUUFBSSxPQUFPLGNBQWMsV0FBWSxXQUFVLHVCQUF1QjtBQUN0RSxhQUFTLGVBQWUsbUJBQW1CLEVBQUUsTUFBTTtBQUVuRCxVQUFNLFFBQVEsTUFBTTtBQUFFLGNBQVEsT0FBTztBQUFHLG1CQUFhO0FBQUEsSUFBRztBQUN4RCxhQUFTLGVBQWUsa0JBQWtCLEVBQUUsaUJBQWlCLFNBQVMsS0FBSztBQUMzRSxhQUFTLGVBQWUsbUJBQW1CLEVBQUUsaUJBQWlCLFNBQVMsTUFBTTtBQUFFLFlBQU07QUFBRyxnQkFBVTtBQUFBLElBQUcsQ0FBQztBQUN0RyxZQUFRLGlCQUFpQixTQUFTLE9BQUs7QUFBRSxVQUFJLEVBQUUsV0FBVyxRQUFTLE9BQU07QUFBQSxJQUFHLENBQUM7QUFDN0UsWUFBUSxpQkFBaUIsV0FBVyxPQUFLO0FBQUUsVUFBSSxFQUFFLFFBQVEsU0FBVSxPQUFNO0FBQUEsSUFBRyxDQUFDO0FBQUEsRUFDL0U7QUFFQSxXQUFTQyxtQkFBa0IsTUFBTTtBQUMvQiwyQkFBdUIsTUFBTSxTQUFTLE1BQU0sWUFBWSxJQUFJLENBQUM7QUFBQSxFQUMvRDtBQU9BLFdBQVMsZ0JBQWdCLE1BQU0sVUFBVSxXQUFXLGdCQUFnQixhQUFhLFNBQVMsaUJBQWlCO0FBQ3pHLFFBQUksZ0JBQWlCLFFBQU8sWUFBWSxvRUFBMEQ7QUFDbEcsUUFBSSxRQUFpQixRQUFPLFlBQVksb0RBQXlEO0FBQ2pHLFFBQUksZUFBaUIsUUFBTztBQUM1QixRQUFJLFlBQVksVUFBYyxRQUFPO0FBQ3JDLFFBQUksZUFBZSxVQUFXLFFBQU87QUFDckMsUUFBSSxZQUEwQixRQUFPO0FBQ3JDLFdBQU87QUFBQSxFQUNUO0FBT0EsV0FBU0MseUJBQXdCLFNBQVM7QUFDeEMsVUFBTSxZQUFZO0FBQUEsTUFDaEIsT0FBaUI7QUFBQSxNQUNqQixZQUFpQjtBQUFBLE1BQ2pCLGFBQWlCO0FBQUEsTUFDakIsY0FBaUI7QUFBQSxNQUNqQixXQUFpQjtBQUFBLE1BQ2pCLFNBQWlCO0FBQUEsTUFDakIsVUFBaUI7QUFBQSxNQUNqQixrQkFBaUI7QUFBQSxNQUNqQixZQUFpQjtBQUFBLE1BQ2pCLGdCQUFpQjtBQUFBLE1BQ2pCLGFBQWlCO0FBQUEsTUFDakIsa0JBQWlCO0FBQUEsTUFDakIsYUFBaUI7QUFBQSxNQUNqQixXQUFpQjtBQUFBLElBQ25CO0FBQ0EsVUFBTSxhQUFhLFVBQVUsT0FBTyxLQUFLO0FBRXpDLFFBQUksYUFBYTtBQUNqQixnQkFBWSxRQUFRLFVBQVE7QUFDMUIsWUFBTSxLQUFLLFNBQVMsZUFBZSxRQUFRLElBQUksRUFBRTtBQUNqRCxVQUFJLE1BQU0sR0FBRyxVQUFVLFNBQVMsUUFBUSxFQUFHLGNBQWE7QUFBQSxJQUMxRCxDQUFDO0FBRUQsZ0JBQVksUUFBUSxVQUFRO0FBQzFCLFlBQU0sS0FBSyxTQUFTLGVBQWUsUUFBUSxJQUFJLEVBQUU7QUFDakQsVUFBSSxDQUFDLEdBQUk7QUFFVCxZQUFNLFlBQWlCLFNBQVM7QUFDaEMsWUFBTSxXQUFpQixTQUFTO0FBQ2hDLFlBQU0saUJBQWlCLFlBQVksQ0FBQyxDQUFDLGNBQWMsZUFBZTtBQUNsRSxZQUFNLGNBQWlCLEdBQUcsVUFBVSxTQUFTLFdBQVc7QUFDeEQsWUFBTSxVQUFpQixHQUFHLFVBQVUsU0FBUyxPQUFPO0FBQ3BELFlBQU0sa0JBQWtCLEdBQUcsVUFBVSxTQUFTLGdCQUFnQjtBQUU5RCxTQUFHLFVBQVUsT0FBTyxXQUFpQixTQUFTO0FBQzlDLFNBQUcsVUFBVSxPQUFPLGlCQUFpQixjQUFjO0FBRW5ELFlBQU0sY0FBYyxnQkFBZ0IsTUFBTSxVQUFVLFdBQVcsZ0JBQWdCLGFBQWEsU0FBUyxlQUFlO0FBQ3BILFVBQUksYUFBYTtBQUNmLFdBQUcsYUFBYSxrQkFBcUIsU0FBUztBQUM5QyxXQUFHLGFBQWEscUJBQXFCLFFBQVE7QUFDN0MsV0FBRyxhQUFhLGlCQUFxQixXQUFXO0FBQ2hELFlBQUksT0FBTyxjQUFjLGFBQWE7QUFDcEMsZ0JBQU0sTUFBTSxVQUFVLFFBQVEsWUFBWSxFQUFFO0FBQzVDLGNBQUksSUFBSyxLQUFJLFdBQVcsRUFBRSxrQkFBa0IsWUFBWSxDQUFDO0FBQUEsY0FDaEQsS0FBSSxVQUFVLFFBQVEsRUFBRTtBQUFBLFFBQ25DO0FBQUEsTUFDRixPQUFPO0FBQ0wsV0FBRyxnQkFBZ0IsZ0JBQWdCO0FBQ25DLFdBQUcsZ0JBQWdCLGVBQWU7QUFDbEMsWUFBSSxPQUFPLGNBQWMsYUFBYTtBQUNwQyxnQkFBTSxNQUFNLFVBQVUsUUFBUSxZQUFZLEVBQUU7QUFDNUMsY0FBSSxJQUFLLEtBQUksUUFBUTtBQUFBLFFBQ3ZCO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFRQSxpQkFBZSxxQ0FBcUMsV0FBVztBQUM3RCxVQUFNLFlBQVksT0FBTyx5QkFBeUIsQ0FBQztBQUNuRCxVQUFNLFVBQVksT0FBTyxtQkFBbUIsQ0FBQztBQUc3QyxRQUFJLENBQUMsVUFBVSxRQUFRO0FBQUUsWUFBTSxVQUFVO0FBQUc7QUFBQSxJQUFRO0FBRXBELFVBQU0sVUFBVSxTQUFTLGNBQWMsS0FBSztBQUM1QyxZQUFRLEtBQUs7QUFDYixZQUFRLE1BQU0sVUFBVTtBQUV4QixVQUFNLFdBQVcsVUFBVSxJQUFJLENBQUNDLElBQUcsTUFBTTtBQUN2QyxZQUFNLFFBQVNBLEdBQUUsUUFBUSxpQkFBaUIsSUFBSSxDQUFDO0FBQy9DLFlBQU0sUUFBUyxXQUFXQSxHQUFFLFlBQVksRUFBRTtBQUMxQyxZQUFNLFNBQVMsV0FBVyxRQUFRLEtBQUssS0FBSyxFQUFFO0FBQzlDLFlBQU0sVUFBVSxNQUFNLFFBQVFBLEdBQUUsT0FBTyxJQUFJQSxHQUFFLFVBQVUsQ0FBQztBQUV4RCxVQUFJLFFBQVEsUUFBUTtBQUNsQixjQUFNLFNBQVMsUUFBUSxJQUFJLE9BQUs7QUFBQTtBQUFBLDJDQUVLLFdBQVcsS0FBSyxDQUFDLFlBQVksV0FBVyxDQUFDLENBQUM7QUFBQSxjQUN2RSxRQUFRLEtBQUssTUFBTSxJQUFJLFlBQVksRUFBRTtBQUFBLDJDQUNSLFdBQVcsQ0FBQyxDQUFDO0FBQUEsaUJBQ3ZDLEVBQUUsS0FBSyxFQUFFO0FBQ3BCLGVBQU87QUFBQTtBQUFBLDRGQUUrRSxLQUFLO0FBQUEsWUFDckYsTUFBTTtBQUFBO0FBQUEsTUFFZDtBQUNBLGFBQU87QUFBQTtBQUFBLCtCQUVvQixXQUFXLEtBQUssQ0FBQyw4RUFBOEUsS0FBSztBQUFBLGlDQUNsRyxXQUFXLEtBQUssQ0FBQyxnQkFBZ0IsV0FBVyxLQUFLLENBQUM7QUFBQTtBQUFBLFdBRXhFLE1BQU07QUFBQTtBQUFBLElBRWYsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUVWLFlBQVEsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQVNaLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNoQixhQUFTLEtBQUssWUFBWSxPQUFPO0FBQ2pDLFFBQUksT0FBTywrQkFBK0IsWUFBYSxRQUFPLDZCQUE2QixTQUFTO0FBQ3BHLFFBQUksT0FBTyxjQUFjLFdBQVksV0FBVSxvQkFBb0I7QUFDbkUsWUFBUSxjQUFjLGtCQUFrQixFQUFFLE1BQU07QUFFaEQsYUFBU0MsY0FBYTtBQUNwQixjQUFRLE9BQU87QUFDZixVQUFJLE9BQU8saUJBQWlCLFdBQVksY0FBYTtBQUFBLElBQ3ZEO0FBRUEsWUFBUSxjQUFjLG9CQUFvQixFQUFFLGlCQUFpQixTQUFTQSxXQUFVO0FBQ2hGLFlBQVEsaUJBQWlCLFNBQVMsT0FBSztBQUFFLFVBQUksRUFBRSxXQUFXLFFBQVMsQ0FBQUEsWUFBVztBQUFBLElBQUcsQ0FBQztBQUNsRixZQUFRLGlCQUFpQixXQUFXLE9BQUs7QUFBRSxVQUFJLEVBQUUsUUFBUSxTQUFVLENBQUFBLFlBQVc7QUFBQSxJQUFHLENBQUM7QUFFbEYsWUFBUSxjQUFjLGtCQUFrQixFQUFFLGlCQUFpQixTQUFTLE1BQU07QUFDeEUsTUFBQUEsWUFBVztBQUNYLGdCQUFVO0FBQUEsSUFDWixDQUFDO0FBRUQsWUFBUSxjQUFjLGtCQUFrQixFQUFFLGlCQUFpQixTQUFTLFlBQVk7QUFDOUUsWUFBTSxPQUFVLFNBQVMsZUFBZSxpQkFBaUI7QUFDekQsWUFBTSxVQUFVLENBQUM7QUFDakIsZ0JBQVUsUUFBUSxDQUFDRCxJQUFHLE1BQU07QUFDMUIsY0FBTSxRQUFRQSxHQUFFLFFBQVEsaUJBQWlCLElBQUksQ0FBQztBQUM5QyxjQUFNLEtBQVEsS0FBSyxjQUFjLGVBQWUsS0FBSyxJQUFJO0FBQ3pELFlBQUksQ0FBQyxHQUFJO0FBQ1QsWUFBSSxHQUFHLFNBQVMsU0FBUztBQUN2QixnQkFBTSxVQUFVLEtBQUssY0FBYyxlQUFlLEtBQUssWUFBWTtBQUNuRSxjQUFJLFFBQVMsU0FBUSxLQUFLLElBQUksUUFBUTtBQUFBLFFBQ3hDLE9BQU87QUFDTCxnQkFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLO0FBQzFCLGNBQUksSUFBSyxTQUFRLEtBQUssSUFBSTtBQUFBLFFBQzVCO0FBQUEsTUFDRixDQUFDO0FBRUQsTUFBQUMsWUFBVztBQUNYLFVBQUk7QUFDRixjQUFNLE1BQU0sZ0NBQWdDO0FBQUEsVUFDMUMsUUFBUTtBQUFBLFVBQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxVQUM5QyxNQUFNLEtBQUssVUFBVSxFQUFFLFdBQVcsU0FBUyxRQUFRLENBQUM7QUFBQSxRQUN0RCxDQUFDO0FBQ0QsZUFBTyxrQkFBa0I7QUFBQSxNQUMzQixTQUFTQyxLQUFJO0FBQUEsTUFBK0Q7QUFDNUUsWUFBTSxVQUFVO0FBQUEsSUFDbEIsQ0FBQztBQUFBLEVBQ0g7QUFFQSxpQkFBZSxXQUFXLE1BQU07QUFFOUIsUUFBSSxTQUFTLFlBQVk7QUFDdkIsWUFBTSxxQ0FBcUMsTUFBTSxtQkFBbUIsVUFBVSxDQUFDO0FBQy9FO0FBQUEsSUFDRjtBQUNBLFVBQU0sbUJBQW1CLElBQUk7QUFBQSxFQUMvQjtBQUVBLGlCQUFlLG1CQUFtQixNQUFNO0FBQ3RDLFVBQU0sYUFBYSxxQkFBcUIscUJBQWdCLElBQUksUUFBRztBQUMvRCxlQUFXLE1BQU0sY0FBYyxJQUFJLFFBQUc7QUFDdEMsUUFBSTtBQUNGLFlBQU0sTUFBTyxNQUFNLE1BQU0scUJBQXFCO0FBQUEsUUFDNUMsUUFBUTtBQUFBLFFBQ1IsU0FBUyxFQUFDLGdCQUFnQixtQkFBa0I7QUFBQSxRQUM1QyxNQUFNLEtBQUssVUFBVSxFQUFDLE9BQU8sS0FBSSxDQUFDO0FBQUEsTUFDcEMsQ0FBQztBQUNELFlBQU0sT0FBTyxNQUFNLElBQUksS0FBSztBQUM1QiwyQkFBcUIsVUFBVTtBQUMvQixpQkFBVyxLQUFLO0FBRWhCLFVBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUk7QUFDdkIsMkJBQW1CLDRCQUF1QixLQUFLLFNBQVMsa0JBQWtCLE1BQU0sV0FBVyxJQUFJLENBQUM7QUFDaEc7QUFBQSxNQUNGO0FBRUEsb0JBQWMsYUFBYSxVQUFLLElBQUksb0ZBQStFO0FBQ25ILFlBQU0sWUFBWTtBQUdsQixVQUFJLFNBQVMsUUFBVyxRQUFPLG1CQUFvQjtBQUNuRCxVQUFJLFNBQVMsVUFBVyxRQUFPLHFCQUFxQjtBQUdwRCxZQUFNLFNBQVM7QUFBQSxRQUNiLFVBQWdCO0FBQUEsUUFDaEIsZ0JBQWdCO0FBQUEsUUFDaEIsU0FBZ0I7QUFBQSxRQUNoQixPQUFnQjtBQUFBLE1BQ2xCO0FBQ0EsVUFBSSxPQUFPLElBQUksRUFBRyxXQUFVLE9BQU8sSUFBSSxDQUFDO0FBR3hDLFVBQUksS0FBSyxnQkFBZ0IsS0FBSyxZQUFZO0FBQ3hDLG1CQUFXLE1BQU0sdUJBQXVCLE1BQU0sS0FBSyxjQUFjLEtBQUssVUFBVSxHQUFHLEdBQUc7QUFBQSxNQUN4RjtBQUFBLElBRUYsU0FBUyxLQUFLO0FBQ1osMkJBQXFCLFVBQVU7QUFDL0IsaUJBQVcsS0FBSztBQUNoQix5QkFBbUIseUNBQW9DLElBQUksU0FBUyxNQUFNLFdBQVcsSUFBSSxDQUFDO0FBQUEsSUFDNUY7QUFBQSxFQUNGO0FBWUEsV0FBUyx1QkFBdUIsTUFBTSxhQUFhLFdBQVc7QUFDNUQsUUFBSSxTQUFTLFdBQVc7QUFDdEIsWUFBTSxXQUFXLElBQUksS0FBSyxZQUFZLG9CQUFvQixDQUFDLEdBQUcsSUFBSSxPQUFLLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwRixZQUFNLFdBQVksVUFBVSxvQkFBcUIsQ0FBQztBQUNsRCxpQkFBVyxRQUFRLFVBQVU7QUFDM0IsY0FBTSxLQUFVLE9BQU8sS0FBSyxNQUFNLEVBQUU7QUFDcEMsY0FBTSxTQUFVLEdBQUcsUUFBUSxtQkFBbUIsR0FBRztBQUNqRCxjQUFNLEtBQVUsU0FBUyxlQUFlLFdBQVcsTUFBTSxFQUFFO0FBQzNELFlBQUksQ0FBQyxHQUFJO0FBQ1QsY0FBTSxRQUFZLENBQUMsU0FBUyxJQUFJLEVBQUU7QUFDbEMsY0FBTSxhQUFhLFlBQVksb0JBQW9CLENBQUMsR0FBRyxLQUFLLE9BQUssT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFO0FBQ3BGLGNBQU0sVUFBWSxTQUFVLGFBQWEsVUFBVSxhQUFhLEtBQUs7QUFDckUsWUFBSSxRQUFTLGNBQWEsRUFBRTtBQUFBLE1BQzlCO0FBQ0E7QUFBQSxJQUNGO0FBRUEsUUFBSSxTQUFTLGtCQUFrQjtBQUM3QixZQUFNLGNBQWMsSUFBSTtBQUFBLFNBQ3JCLFlBQVksZ0JBQWdCLDhCQUE4QixDQUFDLEdBQUcsSUFBSSxPQUFLLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFBQSxNQUN0RjtBQUNBLFlBQU0sYUFBYyxVQUFVLGdCQUFnQiw4QkFBOEIsQ0FBQztBQUM3RSxpQkFBVyxPQUFPLFlBQVk7QUFDNUIsY0FBTSxLQUFPLE9BQU8sSUFBSSxNQUFNLEVBQUU7QUFDaEMsY0FBTSxLQUFPLFNBQVMsY0FBYyxtQkFBbUIsSUFBSSxPQUFPLEVBQUUsQ0FBQyxJQUFJO0FBQ3pFLFlBQUksQ0FBQyxHQUFJO0FBQ1QsY0FBTSxTQUFTLFlBQVksZ0JBQWdCLDhCQUE4QixDQUFDLEdBQUcsS0FBSyxPQUFLLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRTtBQUMxRyxZQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsS0FBTSxTQUFTLE1BQU0sbUJBQW1CLElBQUksZ0JBQWlCO0FBQ2xGLHVCQUFhLEVBQUU7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFFQSxZQUFNLGNBQWMsSUFBSTtBQUFBLFNBQ3JCLFlBQVksZ0JBQWdCLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxRQUFNLEVBQUUsU0FBUyxJQUFJLFlBQVksQ0FBQztBQUFBLE1BQ2xHO0FBQ0EsWUFBTSxlQUFlLFVBQVUsZ0JBQWdCLHlCQUF5QixDQUFDO0FBQ3pFLGlCQUFXLE9BQU8sY0FBYztBQUM5QixjQUFNLFFBQVEsSUFBSSxTQUFTLElBQUksWUFBWTtBQUMzQyxjQUFNLEtBQU8sU0FBUyxjQUFjLGtCQUFrQixJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUk7QUFDMUUsWUFBSSxDQUFDLEdBQUk7QUFDVCxjQUFNLFNBQVMsWUFBWSxnQkFBZ0IseUJBQXlCLENBQUMsR0FBRztBQUFBLFVBQ3RFLFFBQU0sRUFBRSxTQUFTLElBQUksWUFBWSxNQUFNO0FBQUEsUUFDekM7QUFDQSxZQUFJLENBQUMsWUFBWSxJQUFJLElBQUksS0FBTSxTQUFTLE1BQU0sbUJBQW1CLElBQUksZ0JBQWlCO0FBQ3BGLHVCQUFhLEVBQUU7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBR0EsV0FBUyxhQUFhLElBQUk7QUFDeEIsT0FBRyxhQUFhLGdCQUFnQixNQUFNO0FBRXRDLGVBQVcsTUFBTSxHQUFHLGdCQUFnQixjQUFjLEdBQUcsSUFBSTtBQUFBLEVBQzNEO0FBSUEsaUJBQWVDLG1CQUFrQixPQUFPLFVBQVU7QUFFaEQsUUFBSSxlQUFlLENBQUM7QUFDcEIsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxpQkFBaUI7QUFDckIsUUFBSSxvQkFBb0I7QUFDeEIsUUFBSSxvQkFBb0I7QUFDeEIsUUFBSSxxQkFBcUI7QUFDekIsUUFBSTtBQUNGLFlBQU0sYUFBYSxNQUFNLE1BQU0sMkJBQTJCO0FBQUEsUUFDeEQsUUFBUTtBQUFBLFFBQVEsU0FBUyxFQUFDLGdCQUFlLG1CQUFrQjtBQUFBLFFBQzNELE1BQU0sS0FBSyxVQUFVLEVBQUMsZUFBZSxNQUFLLENBQUM7QUFBQSxNQUM3QyxDQUFDO0FBQ0QsVUFBSSxDQUFDLFdBQVcsSUFBSTtBQUNsQixZQUFJLGFBQWEsUUFBUSxXQUFXLE1BQU07QUFDMUMsWUFBSTtBQUNGLGdCQUFNLFVBQVUsTUFBTSxXQUFXLEtBQUs7QUFDdEMsdUJBQWEsUUFBUSxTQUFTLFFBQVEsV0FBVztBQUFBLFFBQ25ELFNBQVNDLElBQUc7QUFBQSxRQUFnQztBQUM1QyxjQUFNLElBQUksTUFBTSxVQUFVO0FBQUEsTUFDNUI7QUFFQSxZQUFNLGNBQWMsTUFBTSxXQUFXLEtBQUs7QUFDMUMscUJBQWlCLFlBQVksY0FBYyxZQUFZLFdBQVcsZ0JBQWlCLENBQUM7QUFFcEYsWUFBTSxZQUFZLG9DQUFvQyxLQUFLO0FBQzNELFlBQU0saUJBQWlCLGFBQWEsT0FBTyxVQUFVLGlCQUFpQixXQUNsRSxVQUFVLGVBQ1Y7QUFDSixVQUFJLE1BQU0sUUFBUSxnQkFBZ0IsS0FBSyxLQUFLLGVBQWUsTUFBTSxTQUFTLEdBQUc7QUFDM0Usd0JBQWdCLGVBQWU7QUFDL0IseUJBQWlCO0FBQ2pCLDRCQUFvQixPQUFPLGVBQWUsYUFBYSxFQUFFLEVBQUUsS0FBSztBQUNoRSw0QkFBb0IsT0FBTyxlQUFlLGNBQWMsRUFBRSxFQUFFLEtBQUs7QUFDakUsNkJBQXFCLE9BQU8sZUFBZSxzQkFBc0IsRUFBRSxFQUFFLEtBQUs7QUFBQSxNQUM1RTtBQUdBLFVBQUksQ0FBQyxlQUFlO0FBQ2xCLFlBQUk7QUFDRixnQkFBTSxjQUFjLE1BQU0sTUFBTSw0Q0FBNEMsbUJBQW1CLEtBQUssQ0FBQyxFQUFFO0FBQ3ZHLGNBQUksWUFBWSxJQUFJO0FBQ2xCLGtCQUFNLGVBQWUsTUFBTSxZQUFZLEtBQUs7QUFDNUMsNEJBQWdCLGFBQWEsa0JBQWtCO0FBQy9DLDZCQUFpQixhQUFhLG9CQUFvQjtBQUFBLFVBQ3BELE9BQU87QUFDTCxZQUFBVCxLQUFJLEtBQUssMENBQTBDLFlBQVksTUFBTTtBQUFBLFVBQ3ZFO0FBQUEsUUFDRixTQUFTLEdBQUc7QUFDVixVQUFBQSxLQUFJLEtBQUssMENBQTBDLENBQUM7QUFBQSxRQUN0RDtBQUFBLE1BQ0Y7QUFBQSxJQUNGLFNBQVMsR0FBRztBQUNWLFlBQU0sWUFBWSxFQUFFLFlBQVksb0JBQzVCLDBDQUNBLEVBQUU7QUFDTix5QkFBbUIsb0NBQStCLFdBQVcsTUFBTVEsbUJBQWtCLE9BQU8sUUFBUSxDQUFDO0FBQ3JHO0FBQUEsSUFDRjtBQUNBLFFBQUksQ0FBQyxhQUFhLFFBQVE7QUFDeEIsb0JBQWMsVUFBVSw2Q0FBNkM7QUFDckU7QUFBQSxJQUNGO0FBR0EsUUFBSSxPQUFPLCtCQUErQixhQUFhO0FBQ3JELG1DQUE2QixTQUFTO0FBQUEsSUFDeEM7QUFHQSxVQUFNLFFBQVEsU0FBUyxjQUFjLEtBQUs7QUFDMUMsVUFBTSxLQUFLO0FBQ1gsVUFBTSxhQUFhLFFBQVEsUUFBUTtBQUNuQyxVQUFNLGFBQWEsY0FBYyxNQUFNO0FBQ3ZDLFVBQU0sYUFBYSxtQkFBbUIsc0JBQXNCO0FBQzVELFVBQU0sTUFBTSxVQUFVO0FBQUE7QUFBQTtBQUl0QixVQUFNLGVBQWUsaUJBQ2pCO0FBQUEsNEZBRUE7QUFDSixVQUFNLGlCQUFpQixxQkFBcUIscUJBQXFCLHFCQUM3RDtBQUFBLFVBQ0ksb0JBQW9CLHVDQUF1QyxXQUFXLGlCQUFpQixDQUFDLFdBQVcsRUFBRTtBQUFBLFVBQ3JHLG9CQUFvQixxQ0FBcUMsV0FBVyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUU7QUFBQSxVQUNuRyxxQkFBcUIsNkNBQTZDLFdBQVcsa0JBQWtCLENBQUMsV0FBVyxFQUFFO0FBQUEsZ0JBRWpIO0FBRUosVUFBTSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHVFQU1tRCxRQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVdkUsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSVosWUFBWTtBQUFBLG1FQUM2QyxLQUFLO0FBQUEsa0VBQ04sS0FBSztBQUFBO0FBQUE7QUFHckUsYUFBUyxLQUFLLFlBQVksS0FBSztBQUMvQixRQUFJLE9BQU8sY0FBYyxXQUFZLFdBQVUsc0JBQXNCO0FBQ3JFLFFBQUksT0FBTyxvQkFBb0IsV0FBWSxpQkFBZ0Isc0JBQXNCO0FBR2pGLFVBQU0sYUFBYSxDQUFDLE1BQU07QUFDeEIsVUFBSSxFQUFFLFFBQVEsVUFBVTtBQUN0QixVQUFFLGVBQWU7QUFDakIscUJBQWE7QUFDYixjQUFNLE9BQU87QUFDYixpQkFBUyxvQkFBb0IsV0FBVyxVQUFVO0FBQUEsTUFDcEQ7QUFBQSxJQUNGO0FBQ0EsYUFBUyxpQkFBaUIsV0FBVyxVQUFVO0FBRy9DLFVBQU0sT0FBTyxTQUFTLGVBQWUscUJBQXFCO0FBQzFELGlCQUFhLFFBQVEsQ0FBQyxLQUFLLFFBQVE7QUFDakMsWUFBTUUsUUFBUSxPQUFPLFFBQVEsV0FBWSxJQUFJLFFBQVEsS0FBTSxPQUFPLEdBQUc7QUFDckUsWUFBTSxLQUFLLFNBQVMsY0FBYyxJQUFJO0FBQ3RDLFNBQUcsUUFBUSxZQUFZO0FBQ3ZCLFNBQUcsTUFBTSxVQUFVO0FBQUE7QUFFbkIsU0FBRyxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw4Q0FXMkJBLEtBQUk7QUFDOUMsV0FBSyxZQUFZLEVBQUU7QUFBQSxJQUNyQixDQUFDO0FBQ0Qsd0JBQW9CO0FBR3BCLFFBQUksa0JBQWtCLGVBQWU7QUFDbkMsZUFBUyxlQUFlLG1CQUFtQixHQUFHLGlCQUFpQixTQUFTLE1BQU07QUFDNUUsMEJBQWtCLGFBQWE7QUFBQSxNQUNqQyxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGtCQUFrQixPQUFPO0FBQ2hDLFVBQU0sT0FBTyxTQUFTLGVBQWUscUJBQXFCO0FBQzFELFFBQUksQ0FBQyxLQUFNO0FBQ1gsVUFBTSxRQUFRLE1BQU0sS0FBSyxLQUFLLGlCQUFpQixJQUFJLENBQUM7QUFFcEQsVUFBTSxTQUFTLENBQUM7QUFDaEIsVUFBTSxRQUFRLFFBQU07QUFBRSxhQUFPLFNBQVMsR0FBRyxRQUFRLFdBQVcsRUFBRSxDQUFDLElBQUk7QUFBQSxJQUFJLENBQUM7QUFFeEUsVUFBTSxTQUFTLElBQUksSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDO0FBQ3hDLFVBQU0sUUFBUSxTQUFPO0FBQUUsVUFBSSxPQUFPLEdBQUcsRUFBRyxNQUFLLFlBQVksT0FBTyxHQUFHLENBQUM7QUFBQSxJQUFHLENBQUM7QUFDeEUsVUFBTSxRQUFRLFFBQU07QUFDbEIsVUFBSSxDQUFDLE9BQU8sSUFBSSxTQUFTLEdBQUcsUUFBUSxXQUFXLEVBQUUsQ0FBQyxFQUFHLE1BQUssWUFBWSxFQUFFO0FBQUEsSUFDMUUsQ0FBQztBQUNELHdCQUFvQjtBQUFBLEVBQ3RCO0FBRUEsV0FBUyxXQUFXLEtBQUssV0FBVztBQUNsQyxVQUFNLEtBQU8sSUFBSSxRQUFRLElBQUk7QUFDN0IsVUFBTSxPQUFPLEdBQUc7QUFDaEIsUUFBSSxjQUFjLE1BQU0sR0FBRyx3QkFBd0I7QUFDakQsV0FBSyxhQUFhLElBQUksR0FBRyxzQkFBc0I7QUFBQSxJQUNqRCxXQUFXLGNBQWMsS0FBTSxHQUFHLG9CQUFvQjtBQUNwRCxXQUFLLGFBQWEsR0FBRyxvQkFBb0IsRUFBRTtBQUFBLElBQzdDO0FBQ0Esd0JBQW9CO0FBQUEsRUFDdEI7QUFFQSxXQUFTLHNCQUFzQjtBQUM3QixVQUFNLE9BQU8sU0FBUyxlQUFlLHFCQUFxQjtBQUMxRCxRQUFJLENBQUMsS0FBTTtBQUNYLFVBQU0sUUFBUSxLQUFLLGlCQUFpQixJQUFJO0FBQ3hDLFVBQU0sUUFBUSxDQUFDLElBQUksUUFBUTtBQUN6QixZQUFNLENBQUMsT0FBTyxPQUFPLElBQUksR0FBRyxpQkFBaUIsUUFBUTtBQUNyRCxZQUFNLFdBQWEsUUFBUTtBQUMzQixjQUFRLFdBQVcsUUFBUSxNQUFNLFNBQVM7QUFDMUMsWUFBTSxNQUFNLFVBQVksTUFBTSxXQUFhLFFBQVE7QUFDbkQsY0FBUSxNQUFNLFVBQVUsUUFBUSxXQUFXLFFBQVE7QUFBQSxJQUNyRCxDQUFDO0FBQUEsRUFDSDtBQUVBLGlCQUFlLGdCQUFnQixPQUFPO0FBQ3BDLFVBQU0sT0FBUSxTQUFTLGVBQWUscUJBQXFCO0FBQzNELFVBQU0sUUFBUSxPQUFPLEtBQUssaUJBQWlCLElBQUksSUFBSSxDQUFDO0FBQ3BELFVBQU0sUUFBUSxNQUFNLEtBQUssS0FBSyxFQUFFLElBQUksUUFBTSxTQUFTLEdBQUcsUUFBUSxXQUFXLEVBQUUsQ0FBQztBQUM1RSxRQUFJO0FBQ0YsWUFBTSxNQUFPLE1BQU0sTUFBTSx3QkFBd0I7QUFBQSxRQUMvQyxRQUFRO0FBQUEsUUFBUSxTQUFTLEVBQUMsZ0JBQWUsbUJBQWtCO0FBQUEsUUFDM0QsTUFBTSxLQUFLLFVBQVUsRUFBQyxlQUFlLE9BQU8sTUFBSyxDQUFDO0FBQUEsTUFDcEQsQ0FBQztBQUNELFlBQU0sT0FBTyxNQUFNLElBQUksS0FBSztBQUM1QixVQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJO0FBQ3ZCLDJCQUFtQiwwQ0FBcUMsS0FBSyxTQUFPLFlBQVksTUFBTSxnQkFBZ0IsS0FBSyxDQUFDO0FBQzVHO0FBQUEsTUFDRjtBQUNBLG9CQUFjLGFBQWEsb0VBQStEO0FBQzFGLGVBQVMsZUFBZSxzQkFBc0IsR0FBRyxPQUFPO0FBQUEsSUFDMUQsU0FBUSxHQUFHO0FBQ1QseUJBQW1CLCtDQUEwQyxFQUFFLFNBQVMsTUFBTSxnQkFBZ0IsS0FBSyxDQUFDO0FBQUEsSUFDdEc7QUFBQSxFQUNGO0FBRUEsaUJBQWUsaUJBQWlCLE9BQU87QUFDckMsUUFBSTtBQUNGLFlBQU0sTUFBTyxNQUFNLE1BQU0sd0JBQXdCO0FBQUEsUUFDL0MsUUFBUTtBQUFBLFFBQVEsU0FBUyxFQUFDLGdCQUFlLG1CQUFrQjtBQUFBLFFBQzNELE1BQU0sS0FBSyxVQUFVLEVBQUMsZUFBZSxPQUFPLE9BQU8sQ0FBQyxFQUFDLENBQUM7QUFBQSxNQUN4RCxDQUFDO0FBQ0QsWUFBTSxPQUFPLE1BQU0sSUFBSSxLQUFLO0FBQzVCLFVBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUk7QUFDdkIsMkJBQW1CLDJDQUFzQyxLQUFLLFNBQU8sWUFBWSxNQUFNLGlCQUFpQixLQUFLLENBQUM7QUFDOUc7QUFBQSxNQUNGO0FBQ0Esb0JBQWMsYUFBYSxpRUFBNEQ7QUFDdkYsbUJBQWE7QUFDYixlQUFTLGVBQWUsc0JBQXNCLEdBQUcsT0FBTztBQUFBLElBQzFELFNBQVEsR0FBRztBQUNULHlCQUFtQixrREFBNkMsRUFBRSxTQUFTLE1BQU0saUJBQWlCLEtBQUssQ0FBQztBQUFBLElBQzFHO0FBQUEsRUFDRjtBQUtBLE1BQU0scUJBQXFCO0FBQUEsSUFDekI7QUFBQSxJQUFRO0FBQUEsSUFBZ0I7QUFBQSxJQUFpQjtBQUFBLElBQ3pDO0FBQUEsSUFBZTtBQUFBLElBQWM7QUFBQSxJQUFpQjtBQUFBLElBQW9CO0FBQUEsRUFDcEU7QUFHQSxNQUFNLHNCQUFzQjtBQUFBLElBQzFCLFVBQWdCO0FBQUE7QUFBQSxJQUNoQixnQkFBZ0I7QUFBQTtBQUFBLElBQ2hCLFNBQWdCO0FBQUE7QUFBQSxJQUNoQixPQUFnQjtBQUFBO0FBQUEsSUFDaEIsUUFBZ0I7QUFBQTtBQUFBLElBQ2hCLFVBQWdCO0FBQUE7QUFBQSxJQUNoQixjQUFnQjtBQUFBLElBQ2hCLFdBQWdCO0FBQUEsSUFDaEIsZ0JBQWdCO0FBQUEsSUFDaEIsV0FBZ0I7QUFBQSxJQUNoQixTQUFnQjtBQUFBLEVBQ2xCO0FBSUEsV0FBUyxvQkFBb0IsUUFBUTtBQUtuQyxVQUFNLFdBQVcsb0JBQUksSUFBSTtBQUd6QixVQUFNLGVBQWUsb0JBQUksSUFBSSxDQUFDLFlBQVksa0JBQWtCLFdBQVcsU0FBUyxRQUFRLENBQUM7QUFHekYsVUFBTSxjQUFjO0FBQUEsTUFDbEIsS0FBZ0I7QUFBQSxNQUNoQixVQUFnQjtBQUFBLE1BQ2hCLGdCQUFnQjtBQUFBLE1BQ2hCLFNBQWdCO0FBQUEsTUFDaEIsT0FBZ0I7QUFBQSxNQUNoQixRQUFnQjtBQUFBLE1BQ2hCLFVBQWdCO0FBQUEsTUFDaEIsY0FBZ0I7QUFBQSxNQUNoQixXQUFnQjtBQUFBLE1BQ2hCLGdCQUFnQjtBQUFBLE1BQ2hCLFdBQWdCO0FBQUEsTUFDaEIsU0FBZ0I7QUFBQSxJQUNsQjtBQUdBLFVBQU0sUUFBUSxPQUFPLFNBQVM7QUFFOUIsVUFBTSxhQUFhLFVBQVUsT0FBTyxvQkFBb0IsVUFBVSxPQUFPO0FBQ3pFLFVBQU0sT0FBTztBQUFBLE1BQ1gsS0FBZ0IsQ0FBQyxDQUFDLE9BQU87QUFBQSxNQUN6QixVQUFnQixDQUFDLENBQUMsT0FBTztBQUFBLE1BQ3pCLGdCQUFnQixDQUFDLENBQUMsT0FBTztBQUFBLE1BQ3pCLFNBQWdCLFVBQVUsT0FBTyxrQkFBbUIsQ0FBQyxDQUFDLE9BQU87QUFBQSxNQUM3RCxPQUFnQixVQUFVLE9BQU8sY0FBYyxVQUFVLE9BQU8saUJBQ2hELFVBQVUsT0FBTyxvQkFBb0IsVUFBVSxPQUFPO0FBQUEsTUFDdEUsUUFBZ0I7QUFBQSxNQUNoQixVQUFnQjtBQUFBLE1BQ2hCLGNBQWdCO0FBQUEsTUFDaEIsV0FBZ0I7QUFBQSxNQUNoQixnQkFBZ0I7QUFBQSxNQUNoQixXQUFnQjtBQUFBLE1BQ2hCLFNBQWdCO0FBQUEsSUFDbEI7QUFJQSxVQUFNLGtCQUFrQixtQkFBbUIsUUFBUSxPQUFPLGlCQUFpQixFQUFFO0FBQzdFLFVBQU0sa0JBQWtCLG1CQUFtQixRQUFRLEtBQUs7QUFHeEQsVUFBTSxjQUFjO0FBQUEsTUFDbEIsUUFBb0I7QUFBQSxNQUNwQixnQkFBb0I7QUFBQSxNQUNwQixpQkFBb0I7QUFBQSxNQUNwQixrQkFBb0I7QUFBQSxNQUNwQixlQUFvQjtBQUFBLE1BQ3BCLGNBQW9CO0FBQUEsTUFDcEIsaUJBQW9CO0FBQUEsTUFDcEIsb0JBQW9CO0FBQUEsTUFDcEIsY0FBb0I7QUFBQSxJQUN0QjtBQUNBLFVBQU0sYUFBYSxZQUFZLEtBQUssS0FBSztBQUd6QyxVQUFNLGdCQUFnQixPQUFPLE9BQU8sRUFBQyxRQUFRLE1BQUssR0FBRyxXQUFXO0FBQ2hFLFVBQU0sY0FBYyxPQUFPLFlBQ3RCLGNBQWMsT0FBTyxhQUFhLEtBQUssT0FBTyxpQkFBaUIsT0FDaEU7QUFFSixVQUFNLFVBQVU7QUFBQSxNQUNkO0FBQUEsTUFBTztBQUFBLE1BQVk7QUFBQSxNQUFrQjtBQUFBLE1BQVc7QUFBQSxNQUFTO0FBQUEsTUFDekQ7QUFBQSxNQUFZO0FBQUEsTUFBZ0I7QUFBQSxNQUFhO0FBQUEsTUFBa0I7QUFBQSxNQUFhO0FBQUEsSUFDMUU7QUFDQSxVQUFNLGFBQWEsSUFBSSxJQUFJLE9BQU8sZUFBZSxDQUFDLENBQUM7QUFDbkQsWUFBUSxRQUFRLFVBQVE7QUFDdEIsWUFBTSxLQUFLLFNBQVMsZUFBZSxRQUFRLElBQUksRUFBRTtBQUNqRCxVQUFJLENBQUMsR0FBSTtBQUVULFVBQUksU0FBUyxJQUFJLElBQUksRUFBRztBQUN4QixTQUFHLFVBQVUsT0FBTyxVQUFVLGFBQWEsYUFBYSxZQUFZLFNBQVMsY0FBYztBQUUzRixVQUFJLFFBQVEsWUFBWSxJQUFJLEtBQUs7QUFFakMsVUFBSSxTQUFTLFlBQVk7QUFDdkIsV0FBRyxVQUFVLElBQUksUUFBUTtBQUV6QixZQUFJLE9BQU8sYUFBYSxnQkFBZ0IsTUFBTTtBQUM1QyxtQkFBUztBQUFBLFFBQ1g7QUFBQSxNQUNGLFdBQVcsS0FBSyxJQUFJLEdBQUc7QUFDckIsV0FBRyxVQUFVLElBQUksV0FBVztBQUU1QixXQUFHLFVBQVUsSUFBSSxXQUFXO0FBRTVCLFlBQUksYUFBYSxJQUFJLElBQUksR0FBRztBQUMxQixnQkFBTSxhQUFhLGNBQWMsSUFBSSxLQUFLO0FBQzFDLG1CQUFTLGtEQUFrRCxVQUFVO0FBQUEsMEJBQ25ELElBQUk7QUFBQSxnRUFDa0MsSUFBSTtBQUFBO0FBQUEsUUFFOUQ7QUFBQSxNQUNGLFdBQVcsbUJBQW1CLE1BQU0sb0JBQW9CLElBQUksS0FBSyxhQUFhLG1CQUNoRSxrQkFBa0IsaUJBQWlCO0FBRS9DLFdBQUcsVUFBVSxJQUFJLGdCQUFnQixXQUFXO0FBQzVDLGlCQUFTO0FBQUEsTUFDWDtBQUdBLFVBQUksV0FBVyxJQUFJLElBQUksRUFBRyxJQUFHLFVBQVUsSUFBSSxPQUFPO0FBR2xELFlBQU0sVUFBa0IsV0FBVyxJQUFJLElBQUk7QUFDM0MsWUFBTSxrQkFBa0IsR0FBRyxVQUFVLFNBQVMsZ0JBQWdCO0FBQzlELFlBQU0sV0FBa0IsR0FBRyxVQUFVLFNBQVMsUUFBUTtBQUN0RCxZQUFNLGNBQWtCLEdBQUcsVUFBVSxTQUFTLFdBQVc7QUFDekQsWUFBTSxZQUFrQixHQUFHLFVBQVUsU0FBUyxjQUFjO0FBQzVELFlBQU0sVUFBVSxrQkFBa0IsdUNBQzlCLFVBQWMsNENBQ2QsV0FBYyxvQkFDZCxjQUFjLGlCQUNkLFlBQWMsdURBQ2Q7QUFDSixVQUFJLFFBQVMsVUFBUyx5QkFBeUIsT0FBTztBQUV0RCxTQUFHLFlBQVk7QUFBQSxJQUNqQixDQUFDO0FBRUQsd0NBQW9DO0FBSXBDLFFBQUksQ0FBQyxTQUFTLGVBQWUsa0JBQWtCLEdBQUc7QUFDaEQsWUFBTSxJQUFJLFNBQVMsY0FBYyxPQUFPO0FBQ3hDLFFBQUUsS0FBSztBQUNQLFFBQUUsY0FBYztBQUNoQixlQUFTLEtBQUssWUFBWSxDQUFDO0FBQUEsSUFDN0I7QUFHQSxRQUFJLE9BQU8seUJBQXlCLFlBQVk7QUFDOUMsMkJBQXFCLFVBQVU7QUFBQSxJQUNqQztBQUNBLHdCQUFvQixVQUFVO0FBRzlCLElBQUFOLHlCQUF3QkgsY0FBYSxjQUFjLENBQUM7QUFBQSxFQUN0RDtBQUVBLE1BQUksT0FBTyxXQUFXLGFBQWE7QUFDakMsV0FBTyxpQkFBaUIsd0JBQXdCLG1DQUFtQztBQUNuRixXQUFPLGlCQUFpQix3QkFBd0IsOEJBQThCO0FBQUEsRUFDaEY7QUFTQSxXQUFTLGlDQUFpQztBQUN4QyxVQUFNLGNBQWNBLGNBQWEsZUFBZTtBQUNoRCxVQUFNLGVBQWUsQ0FBQztBQUV0QixpQkFBYSxRQUFRLFVBQVE7QUFDM0IsWUFBTSxLQUFLLFNBQVMsZUFBZSxRQUFRLElBQUksRUFBRTtBQUNqRCxVQUFJLENBQUMsR0FBSTtBQUVULFlBQU0sVUFBVSxZQUFZLFNBQVMsSUFBSTtBQUN6QyxTQUFHLFVBQVUsT0FBTyxTQUFTLE9BQU87QUFHcEMsWUFBTSxZQUFZLEdBQUcsY0FBYyxhQUFhLEdBQUcsYUFBYTtBQUNoRSxZQUFNLFFBQVksY0FBYyxJQUFJLEtBQUs7QUFDekMsWUFBTSxRQUFZLFVBQ2QsNkVBQ0E7QUFDSixTQUFHLFlBQVksR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLFlBQVksSUFBSSxTQUFTLEtBQUssRUFBRTtBQUFBLElBQ3BFLENBQUM7QUFBQSxFQUNIO0FBSUEsV0FBUyxnQkFBZ0IsTUFBTTtBQUM3QixVQUFNLFlBQVk7QUFBQSxNQUNoQixVQUFnQjtBQUFBLE1BQ2hCLGdCQUFnQjtBQUFBLE1BQ2hCLFNBQWdCO0FBQUEsTUFDaEIsT0FBZ0I7QUFBQSxNQUNoQixRQUFnQjtBQUFBLE1BQ2hCLFVBQWdCO0FBQUEsTUFDaEIsY0FBZ0I7QUFBQSxNQUNoQixXQUFnQjtBQUFBLE1BQ2hCLGdCQUFnQjtBQUFBLE1BQ2hCLFdBQWdCO0FBQUEsTUFDaEIsU0FBZ0I7QUFBQSxJQUNsQjtBQUNBLFVBQU0sVUFBVSxVQUFVLElBQUk7QUFDOUIsUUFBSSxDQUFDLFFBQVM7QUFDZCxRQUFJLE9BQU8seUJBQXlCLFdBQVksc0JBQXFCLElBQUk7QUFDekUsY0FBVSxPQUFPO0FBQUEsRUFDbkI7QUFNQSxXQUFTLGdCQUFnQixNQUFNO0FBQzdCLFVBQU0sS0FBSyxTQUFTLGVBQWUsUUFBUSxJQUFJLEVBQUU7QUFDakQsUUFBSSxDQUFDLEdBQUk7QUFHVCxRQUFJLFNBQVMsT0FBTztBQUNsQixVQUFJLEdBQUcsVUFBVSxTQUFTLFdBQVcsS0FBSyxHQUFHLFVBQVUsU0FBUyxRQUFRLEdBQUc7QUFDekUsa0JBQVUsS0FBSztBQUFBLE1BQ2pCLE9BQU87QUFDTCx5QkFBaUI7QUFBQSxNQUNuQjtBQUNBO0FBQUEsSUFDRjtBQUdBLFFBQUksR0FBRyxVQUFVLFNBQVMsY0FBYyxHQUFHO0FBQ3pDLFlBQU0sUUFBUSxjQUFjLElBQUksS0FBSztBQUNyQyxVQUFJLE9BQU8sa0JBQWtCLFlBQVk7QUFDdkM7QUFBQSxVQUNFLGlCQUFpQixLQUFLO0FBQUE7QUFBQTtBQUFBLFVBQ3RCLEVBQUUsY0FBYyxjQUFjLGFBQWEsWUFBWTtBQUFBLFFBQ3pELEVBQUUsS0FBSyxlQUFhO0FBQUUsY0FBSSxVQUFXLGlCQUFnQixJQUFJO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFDL0QsT0FBTztBQUNMLHdCQUFnQixJQUFJO0FBQUEsTUFDdEI7QUFDQTtBQUFBLElBQ0Y7QUFHQSxRQUFJLENBQUMsR0FBRyxVQUFVLFNBQVMsV0FBVyxLQUFLLENBQUMsR0FBRyxVQUFVLFNBQVMsUUFBUSxFQUFHO0FBRTdFLFVBQU0scUNBQXFDLE1BQU07QUFDL0MsWUFBTSxLQUFLLE1BQU0sUUFBUSxPQUFPLHFCQUFxQixJQUFJLE9BQU8sd0JBQXdCLENBQUM7QUFDekYsVUFBSSxHQUFHLFdBQVcsRUFBRyxRQUFPO0FBQzVCLFlBQU0sVUFBVyxPQUFPLG1CQUFtQixPQUFPLE9BQU8sb0JBQW9CLFdBQ3pFLE9BQU8sa0JBQ1AsQ0FBQztBQUNMLGFBQU8sR0FBRyxLQUFLLENBQUFJLE9BQUs7QUFDbEIsY0FBTSxRQUFRLFFBQVFBLEdBQUUsSUFBSTtBQUM1QixlQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sS0FBSyxFQUFFLEtBQUs7QUFBQSxNQUN2QyxDQUFDO0FBQUEsSUFDSDtBQUVBLFVBQU0sWUFBWTtBQUFBLE1BQ2hCLFVBQWdCLG1DQUFtQyxJQUFJLGNBQWM7QUFBQSxNQUNyRSxnQkFBZ0I7QUFBQSxNQUNoQixTQUFnQjtBQUFBLE1BQ2hCLE9BQWdCO0FBQUEsTUFDaEIsUUFBZ0I7QUFBQSxNQUNoQixVQUFnQjtBQUFBLE1BQ2hCLGNBQWdCO0FBQUEsTUFDaEIsV0FBZ0I7QUFBQSxNQUNoQixnQkFBZ0I7QUFBQSxNQUNoQixXQUFnQjtBQUFBLE1BQ2hCLFNBQWdCO0FBQUEsSUFDbEI7QUFDQSxVQUFNLFVBQVUsVUFBVSxJQUFJO0FBQzlCLFFBQUksQ0FBQyxRQUFTO0FBRWQsVUFBTSxhQUFhLE1BQU07QUFDdkIsVUFBSSxPQUFPLHlCQUF5QixXQUFZLHNCQUFxQixJQUFJO0FBQ3pFLGdCQUFVLE9BQU87QUFBQSxJQUNuQjtBQUlBLFFBQUksR0FBRyxVQUFVLFNBQVMsV0FBVyxLQUFLLENBQUMsR0FBRyxVQUFVLFNBQVMsUUFBUSxHQUFHO0FBQzFFLFlBQU0sVUFBVSxZQUFZLFFBQVEsSUFBSTtBQUN4QyxZQUFNLHlCQUF5QixZQUFZLE1BQU0sVUFBVSxDQUFDLEVBQUUsS0FBSyxPQUFLO0FBQ3RFLGNBQU0sYUFBYSxTQUFTLGVBQWUsUUFBUSxDQUFDLEVBQUU7QUFDdEQsZUFBTyxjQUFjLFdBQVcsVUFBVSxTQUFTLFdBQVc7QUFBQSxNQUNoRSxDQUFDO0FBQ0QsVUFBSSx3QkFBd0I7QUFDMUIsK0JBQXVCLE1BQU0sWUFBWSxVQUFVO0FBQ25EO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxlQUFXO0FBQUEsRUFDYjs7O0FKN2hDQSxNQUFNTSxPQUFNLFVBQVUsb0JBQW9CO0FBVTFDLE1BQUksZ0NBQWdDO0FBUzdCLFdBQVMsT0FBTyxJQUFJO0FBQ3pCLFdBQU8sS0FBSyxNQUFNLEtBQUssT0FBTyxFQUFFLElBQUk7QUFBQSxFQUN0QztBQUVBLFdBQVMsY0FBYyxPQUFPLGVBQWUsT0FBTztBQUNsRCxRQUFJLE9BQU8sVUFBVSxVQUFXLFFBQU87QUFDdkMsUUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3QixZQUFNLGFBQWEsTUFBTSxLQUFLLEVBQUUsWUFBWTtBQUM1QyxVQUFJLENBQUMsS0FBSyxRQUFRLE9BQU8sSUFBSSxFQUFFLFNBQVMsVUFBVSxFQUFHLFFBQU87QUFDNUQsVUFBSSxDQUFDLEtBQUssU0FBUyxNQUFNLEtBQUssRUFBRSxTQUFTLFVBQVUsRUFBRyxRQUFPO0FBQUEsSUFDL0Q7QUFDQSxRQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFdBQU8sUUFBUSxLQUFLO0FBQUEsRUFDdEI7QUFJQSxNQUFNLG1CQUFtQixDQUFDO0FBQzFCLE1BQU0sa0JBQWtCO0FBRXhCLFdBQVMsaUJBQWlCO0FBQ3hCLFdBQU9DLGNBQWEsV0FBVyxJQUFJLEtBQUssQ0FBQztBQUFBLEVBQzNDO0FBRUEsV0FBUyxrQkFBa0IsaUJBQWlCO0FBQzFDLElBQUFBLGNBQWEsV0FBVyxNQUFNLGVBQWU7QUFBQSxFQUMvQztBQUVBLFdBQVMsZUFBZUMsT0FBTTtBQUM1QixzQkFBa0IsRUFBRSxHQUFHLGVBQWUsR0FBRyxVQUFVQSxNQUFLLENBQUM7QUFBQSxFQUMzRDtBQUVBLFdBQVMsb0JBQW9CO0FBQzNCLFdBQU9ELGVBQWMscUJBQXFCLEdBQUcsa0JBQWtCO0FBQUEsRUFDakU7QUFFQSxXQUFTLG9CQUFvQixVQUFVO0FBQ3JDLFVBQU1FLGFBQVlGLGVBQWMsZUFBZTtBQUMvQyxVQUFNLFNBQVNFLGFBQ1gsZUFBZSxtQkFBbUJBLFVBQVMsQ0FBQyxLQUM1QztBQUNKLFdBQU8sMEJBQTBCLG1CQUFtQixRQUFRLENBQUMsR0FBRyxNQUFNO0FBQUEsRUFDeEU7QUFFQSxXQUFTLDBCQUEwQixpQkFBaUIsTUFBTTtBQUN4RCxVQUFNLFlBQVksU0FBUyxlQUFlLHVCQUF1QjtBQUNqRSxRQUFJLENBQUMsVUFBVztBQUVoQixVQUFNLE9BQU8sZ0JBQWdCLFFBQVEsQ0FBQztBQUN0QyxVQUFNLGdCQUFnQixDQUFDLFVBQVUsWUFBWTtBQUM3QyxVQUFNLHFCQUFxQixjQUFjLE9BQU8sQ0FBQyxnQkFBZ0IsZUFBZSxJQUFJO0FBRXBGLFFBQUksbUJBQW1CLFdBQVcsR0FBRztBQUNuQyxnQkFBVSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLdEI7QUFBQSxJQUNGO0FBRUEsVUFBTSxpQkFBaUI7QUFBQSxNQUNyQixRQUFRO0FBQUEsTUFDUixZQUFZO0FBQUEsSUFDZDtBQUVBLGNBQVUsWUFBWSxtQkFBbUIsSUFBSSxDQUFDLGdCQUFnQjtBQUM1RCxZQUFNLFdBQVcsS0FBSyxXQUFXLEtBQUssQ0FBQztBQUN2QyxZQUFNLEtBQUssUUFBUSxTQUFTLEVBQUU7QUFDOUIsWUFBTSxTQUFTLFNBQVMsbUJBQW1CLFNBQVMsU0FBUztBQUM3RCxZQUFNLGdCQUFnQixlQUFlLFdBQVcsS0FBSztBQUNyRCxZQUFNLGNBQWMsS0FDaEIsNEVBQTRFLG9CQUFvQixXQUFXLENBQUMsb0NBQW9DLGFBQWEsZUFDN0osZ0RBQWdELGFBQWE7QUFFakUsYUFBTztBQUFBLHVDQUM0QixLQUFLLGFBQWEsV0FBVztBQUFBO0FBQUE7QUFBQSxjQUd0RCxXQUFXO0FBQUE7QUFBQSwrQ0FFc0JDLFlBQVcsTUFBTSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJL0QsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUFBLEVBQ1o7QUFFQSxXQUFTLHdCQUF3QixhQUFhO0FBQzVDLFFBQUksQ0FBQyxhQUFhLFNBQVM7QUFDekI7QUFBQSxJQUNGO0FBRUEsVUFBTSxVQUFVLFlBQVksVUFBVSxDQUFDLEdBQ3BDLElBQUksV0FBUztBQUNaLFlBQU1DLFFBQU8sT0FBTyxVQUFVLFdBQzFCLFFBQ0MsT0FBTyxVQUFVLE9BQU8sU0FBUyxLQUFLLFVBQVUsS0FBSztBQUMxRCxhQUFPLE9BQU9ELFlBQVdDLEtBQUksQ0FBQztBQUFBLElBQ2hDLENBQUMsRUFDQSxLQUFLLEVBQUU7QUFFVjtBQUFBLE1BQ0U7QUFBQSxNQUNBLHdFQUE4REQsWUFBVyxZQUFZLFdBQVcsbUZBQW1GLENBQUMsdUNBQXVDLE1BQU07QUFBQSxJQUNuTztBQUFBLEVBQ0Y7QUFFQSxXQUFTLDJCQUEyQixjQUFjLENBQUMsR0FBRztBQUNwRCxXQUFPO0FBQUEsTUFDTCxXQUFXLFlBQVksYUFBYTtBQUFBLE1BQ3BDLGtCQUFrQixZQUFZLG9CQUFvQixZQUFZLGVBQWU7QUFBQSxNQUM3RSxnQkFBZ0IsWUFBWSxrQkFBa0IsWUFBWSxXQUFXO0FBQUEsTUFDckUsY0FBYyxZQUFZLGlCQUFpQjtBQUFBLElBQzdDO0FBQUEsRUFDRjtBQUVBLFdBQVMsNEJBQTRCO0FBQ25DLFdBQU9ILGNBQWEsbUJBQW1CLEVBQUUsbUJBQW1CO0FBQUEsRUFDOUQ7QUFFQSxXQUFTLDBCQUEwQixXQUFXO0FBQzVDLFFBQUksQ0FBQyxVQUFXLFFBQU87QUFDdkIsVUFBTSxTQUFTLElBQUksS0FBSyxTQUFTO0FBQ2pDLFFBQUksT0FBTyxNQUFNLE9BQU8sUUFBUSxDQUFDLEVBQUcsUUFBTztBQUMzQyxXQUFPLE9BQU8sZUFBZSxDQUFDLEdBQUcsRUFBRSxPQUFPLFNBQVMsS0FBSyxXQUFXLE1BQU0sV0FBVyxRQUFRLFVBQVUsQ0FBQztBQUFBLEVBQ3pHO0FBRUEsV0FBUywrQkFBK0IsV0FBVztBQUNqRCxRQUFJLENBQUMsV0FBVyxTQUFVLFFBQU87QUFDakMsVUFBTSxPQUFPLFVBQVUsYUFBYSxXQUFPLFVBQVUsVUFBVSxNQUFNO0FBQ3JFLFdBQU8sc0NBQXNDLFVBQVUsSUFBSTtBQUFBLGtCQUMzQ0csWUFBVyxVQUFVLGFBQWEsRUFBRSxDQUFDO0FBQUEsNkRBQ00sSUFBSTtBQUFBLDJDQUN0QkEsWUFBVyxVQUFVLFNBQVMsRUFBRSxDQUFDO0FBQUE7QUFBQSxFQUU1RTtBQUVBLFdBQVMsNEJBQTRCO0FBQ25DLFVBQU0sWUFBWSxTQUFTLGVBQWUsdUJBQXVCO0FBQ2pFLFFBQUksQ0FBQyxVQUFXO0FBQ2hCLFVBQU0sWUFBWUgsY0FBYSxtQkFBbUI7QUFDbEQsVUFBTUssbUJBQWtCTCxjQUFhLG1CQUFtQjtBQUN4RCxRQUFJLENBQUNLLGlCQUFnQixrQkFBa0I7QUFDckMsZ0JBQVUsWUFBWTtBQUN0QixnQkFBVSxNQUFNLFVBQVU7QUFDMUI7QUFBQSxJQUNGO0FBQ0EsVUFBTSxzQkFBc0IsT0FBTyxTQUFTQSxpQkFBZ0IsMEJBQTBCLElBQ2xGQSxpQkFBZ0IsNkJBQTZCO0FBQ2pELFVBQU0sa0JBQWtCLE9BQU8sU0FBU0EsaUJBQWdCLGVBQWUsSUFDbkVBLGlCQUFnQixrQkFBa0I7QUFDdEMsVUFBTSx1QkFBdUIsd0JBQXdCLFFBQVEsb0JBQW9CLE9BQzdFLEtBQUssSUFBSSxHQUFHLGtCQUFrQixtQkFBbUIsSUFBSTtBQUN6RCxVQUFNLGlCQUFpQiwwQkFBMEJBLGlCQUFnQixrQkFBa0I7QUFDbkYsVUFBTSxjQUFjLENBQUM7QUFDckIsUUFBSSxlQUFnQixhQUFZLEtBQUsscUJBQXFCLGNBQWMsRUFBRTtBQUMxRSxRQUFJQSxpQkFBZ0IsbUJBQW1CQSxpQkFBZ0IsYUFBYTtBQUNsRSxZQUFNLGlCQUFpQiwwQkFBMEJBLGlCQUFnQixXQUFXO0FBQzVFLFVBQUksZUFBZ0IsYUFBWSxLQUFLLG9CQUFvQixjQUFjLEVBQUU7QUFBQSxJQUMzRTtBQUNBLFFBQUksVUFBVSxTQUFTO0FBQ3JCLFVBQUksdUJBQXVCLEdBQUc7QUFDNUIsb0JBQVksS0FBSyxHQUFHLG9CQUFvQixrQkFBa0IseUJBQXlCLElBQUksS0FBSyxHQUFHLHFCQUFxQjtBQUFBLE1BQ3RILE9BQU87QUFDTCxvQkFBWSxLQUFLLGtEQUFrRDtBQUFBLE1BQ3JFO0FBQUEsSUFDRixXQUFXQSxpQkFBZ0IsbUJBQW1CQSxpQkFBZ0IsVUFBVSxhQUFhO0FBQ25GLGtCQUFZLEtBQUssdURBQXVEO0FBQUEsSUFDMUUsT0FBTztBQUNMLGtCQUFZLEtBQUssNkNBQTZDO0FBQUEsSUFDaEU7QUFDQSxVQUFNLGFBQWFBLGlCQUFnQixtQkFBbUJBLGlCQUFnQixVQUFVLGNBQzVFLDBCQUEwQjtBQUU5QixVQUFNLEtBQUtBLGlCQUFnQixrQkFBa0JBLGlCQUFnQjtBQUM3RCxRQUFJLGlCQUFpQjtBQUNyQixRQUFJLE9BQU8sUUFBUSxPQUFPLFFBQVc7QUFDbkMsWUFBTSxVQUFXQSxpQkFBZ0IsbUJBQW1CLE9BQU8sR0FBRyxFQUFFLFFBQVEsT0FBTyxJQUFJLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxRQUFRLE9BQU8sSUFBSSxNQUFNLEVBQUU7QUFDakksWUFBTSxTQUFXQSxpQkFBZ0I7QUFDakMsdUJBQWlCLHVDQUF1QyxTQUFTLFVBQVUsRUFBRSxZQUFZLFNBQVMseUNBQXlDLHlCQUF5QixLQUFLLFNBQVMsWUFBTyxZQUFLLEdBQUdGLFlBQVcsT0FBTyxDQUFDO0FBQUEsSUFDdE47QUFDQSxjQUFVLFlBQVk7QUFBQSw2Q0FDcUIsVUFBVSxJQUFJO0FBQUE7QUFBQSxVQUVqRCwrQkFBK0IsU0FBUyxDQUFDO0FBQUEsb0RBQ0NBLFlBQVcsVUFBVSxDQUFDO0FBQUEsVUFDaEUsY0FBYztBQUFBO0FBQUE7QUFBQSxVQUdkLFlBQVksSUFBSSxDQUFDLFNBQVMsUUFBUUEsWUFBVyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQUE7QUFBQTtBQUc1RSxjQUFVLE1BQU0sVUFBVTtBQUFBLEVBQzVCO0FBRUEsV0FBUywyQkFBMkI7QUFDbEMsVUFBTSxVQUFVLFNBQVMsZUFBZSxzQkFBc0I7QUFDOUQsUUFBSSxDQUFDLFFBQVM7QUFFZCxVQUFNLFlBQVlILGNBQWEsbUJBQW1CO0FBQ2xELFVBQU0sa0JBQWtCLDBCQUEwQjtBQUNsRCxVQUFNLGNBQWMsa0NBQWtDO0FBRXRELFFBQUksQ0FBQyxVQUFVLFdBQVcsYUFBYTtBQUNyQyxVQUFJLENBQUMsVUFBVSxRQUFTLGlDQUFnQztBQUN4RCxjQUFRLE1BQU0sVUFBVTtBQUN4QjtBQUFBLElBQ0Y7QUFFQSxZQUFRLE1BQU0sVUFBVTtBQUFBLEVBQzFCO0FBRUEsV0FBUywyQkFBMkI7QUFDbEMsVUFBTSxZQUFZQSxjQUFhLG1CQUFtQjtBQUNsRCxVQUFNSyxtQkFBa0JMLGNBQWEsbUJBQW1CO0FBQ3hELFVBQU0sYUFBYyxTQUFTLGVBQWUsb0JBQW9CO0FBQ2hFLFVBQU0sV0FBVyxTQUFTLGVBQWUseUJBQXlCO0FBRWxFLDhCQUEwQjtBQUMxQiw2QkFBeUI7QUFDekIsNkJBQXlCO0FBRXpCLFVBQU0sY0FBY0EsY0FBYSxlQUFlO0FBQ2hELFVBQU0sV0FBVyxZQUFZLFNBQVM7QUFFdEMsVUFBTSxjQUFjSyxpQkFBZ0Isb0JBQW9CLENBQUMsVUFBVSxXQUFXLENBQUNBLGlCQUFnQixtQkFBbUIsQ0FBQyxXQUMvRyxVQUNBO0FBRUosUUFBSSxXQUFhLFlBQVcsTUFBTSxVQUFXO0FBQzdDLFVBQU0sU0FBUyxTQUFTLGVBQWUsc0JBQXNCO0FBQzdELFFBQUksT0FBUSxRQUFPLE1BQU0sVUFBVTtBQUVuQyxRQUFJLFVBQVU7QUFDWixlQUFTLE1BQU0sVUFBVUEsaUJBQWdCLG9CQUNwQyxDQUFDLFVBQVUsV0FDWCxDQUFDLGFBQ0FBLGlCQUFnQixtQkFBbUJBLGlCQUFnQixVQUFVLGVBQy9ELFVBQ0E7QUFBQSxJQUNOO0FBQUEsRUFDRjtBQU1BLGlCQUFlQyw4QkFBNkI7QUFDMUMsVUFBTSxpQkFBaUIsU0FBUyxlQUFlLGtCQUFrQjtBQUNqRSxRQUFJLENBQUMsZUFBZ0I7QUFHckIsUUFBSSxDQUFDLGVBQWUsY0FBYywyQkFBMkIsR0FBRztBQUM5RCxxQkFBZSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxSTNCLHNDQUFnQztBQUFBLElBQ2xDO0FBR0EsVUFBTSxnQkFBZ0JOLGVBQWMsa0JBQWtCLEdBQUc7QUFDekQsUUFBSSxlQUFlO0FBQ2pCLFlBQU0sUUFBUSxTQUFTLGVBQWUsc0JBQXNCO0FBQzVELFVBQUksT0FBTztBQUNULGNBQU0sS0FBSyxXQUFXLGFBQWEsS0FBSztBQUN4QyxjQUFNLFFBQVE7QUFDZCxjQUFNLFlBQVksU0FBUyxlQUFlLHNCQUFzQjtBQUNoRSxZQUFJLFVBQVcsV0FBVSxjQUFjLFVBQVksT0FBTyxFQUFFLENBQUM7QUFBQSxNQUMvRDtBQUFBLElBQ0Y7QUFDQSxVQUFNLGtCQUFrQkEsZUFBYyxrQkFBa0IsR0FBRztBQUMzRCxRQUFJLGlCQUFpQjtBQUNuQixZQUFNLFFBQVEsU0FBUyxlQUFlLG1CQUFtQjtBQUN6RCxVQUFJLE1BQU8sT0FBTSxRQUFRLFdBQVcsZUFBZSxLQUFLO0FBQUEsSUFDMUQ7QUFDQSxVQUFNLHlCQUF5QixTQUFTLGVBQWUsbUNBQW1DO0FBQzFGLFFBQUksd0JBQXdCO0FBQzFCLFlBQU0sZUFBZUEsZUFBYyxrQkFBa0IsS0FBSyxDQUFDO0FBQzNELFlBQU0scUJBQXFCQSxlQUFjLGFBQWEsZ0JBQWdCLEtBQUssQ0FBQztBQUM1RSxZQUFNLHlCQUNKLGFBQWEsK0JBQ1YsY0FBYyxnQkFBZ0IsK0JBQzlCLG1CQUFtQiwrQkFDbkIsbUJBQW1CLDJCQUNuQixtQkFBbUIsa0NBQ25CO0FBQ0wsNkJBQXVCLFVBQVUsY0FBYyx3QkFBd0IsS0FBSztBQUFBLElBQzlFO0FBQ0EsVUFBTSw2QkFBNkIsU0FBUyxlQUFlLCtCQUErQjtBQUMxRixRQUFJLDRCQUE0QjtBQUM5QixZQUFNLGVBQWVBLGVBQWMsa0JBQWtCLEtBQUssQ0FBQztBQUMzRCxZQUFNLHFCQUFxQkEsZUFBYyxhQUFhLGdCQUFnQixLQUFLLENBQUM7QUFDNUUsWUFBTSxpQkFDSixhQUFhLDBCQUNWLGNBQWMsZ0JBQWdCLDBCQUM5QixtQkFBbUIsMEJBQ25CO0FBQ0wsWUFBTSxRQUFRLENBQUMsVUFBVSxTQUFTLFlBQVk7QUFDOUMsaUNBQTJCLFFBQVEsTUFBTSxTQUFTLGNBQWMsSUFBSSxpQkFBaUI7QUFBQSxJQUN2RjtBQUVBLDhCQUEwQixrQkFBa0IsQ0FBQztBQU03QyxVQUFNLGFBQWEsZUFBZSxFQUFFLFFBQVEsS0FBSztBQUNqRCxRQUFJLFlBQVk7QUFDZCwyQkFBcUIsVUFBVTtBQUFBLElBQ2pDLE9BQU87QUFDTCxvQ0FBOEI7QUFBQSxJQUNoQztBQUdBLFVBQU0sMEJBQTBCO0FBQ2hDLDZCQUF5QjtBQUd6Qix1QkFBbUI7QUFBQSxFQUNyQjtBQUVBLGlCQUFlLHFCQUFxQjtBQUNsQyxVQUFNLFNBQVMsU0FBUyxlQUFlLHNCQUFzQjtBQUM3RCxRQUFJLENBQUMsT0FBUTtBQUNiLFFBQUk7QUFDRixZQUFNLE1BQU0sTUFBTSxNQUFNLHFCQUFxQjtBQUM3QyxVQUFJLENBQUMsSUFBSSxHQUFJO0FBQ2IsWUFBTSxPQUFPLE1BQU0sSUFBSSxLQUFLO0FBQzVCLFVBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxLQUFLLGdCQUFpQjtBQUN2QyxZQUFNLFFBQVEsS0FBSztBQUNuQixZQUFNLFNBQVMsUUFBUTtBQUN2QixZQUFNLFFBQVEsU0FBUyxZQUFZO0FBQ25DLFlBQU0sS0FBUSxTQUFTLFlBQVk7QUFDbkMsWUFBTSxTQUFTLFNBQVMsWUFBWTtBQUNwQyxZQUFNLE1BQVEsU0FDVixxQkFBZ0IsS0FBSyx5SEFDckIscUJBQWdCLEtBQUs7QUFDekIsYUFBTyxNQUFNLFVBQVUscUVBQXFFLE1BQU0sZUFBZSxFQUFFLFVBQVUsS0FBSztBQUNsSSxhQUFPLGNBQWM7QUFBQSxJQUN2QixTQUFTTyxJQUFHO0FBQUEsSUFBOEI7QUFBQSxFQUM1QztBQUtBLFdBQVMsa0NBQWtDO0FBQ3pDLFVBQU0sV0FBb0IsU0FBUyxlQUFlLHVCQUF1QjtBQUN6RSxVQUFNLGFBQW9CLFNBQVMsZUFBZSxvQkFBb0I7QUFDdEUsVUFBTSxhQUFvQixTQUFTLGVBQWUseUJBQXlCO0FBQzNFLFVBQU0sZ0JBQW9CLFNBQVMsZUFBZSwrQkFBK0I7QUFDakYsVUFBTSxvQkFBb0IsU0FBUyxlQUFlLDBCQUEwQjtBQUM1RSxVQUFNLG1CQUFvQixTQUFTLGVBQWUsbUJBQW1CO0FBQ3JFLFVBQU0sZ0JBQW9CLFNBQVMsY0FBYyxpQkFBaUI7QUFDbEUsVUFBTSxtQkFBb0IsU0FBUyxlQUFlLDJCQUEyQjtBQUM3RSxVQUFNLGdCQUFvQixTQUFTLGVBQWUsc0JBQXNCO0FBQ3hFLFVBQU0sa0JBQW9CLFNBQVMsZUFBZSxtQkFBbUI7QUFDckUsVUFBTSx5QkFBeUIsU0FBUyxlQUFlLG1DQUFtQztBQUMxRixVQUFNLDZCQUE2QixTQUFTLGVBQWUsK0JBQStCO0FBRTFGLFFBQUksb0JBQW9CLGlCQUFpQixtQkFBbUIsd0JBQXdCO0FBQ2xGLHVCQUFpQjtBQUFBLFFBQ2Y7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNKLGNBQWM7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLHVCQUF1QjtBQUFBLFVBQ3ZCLDRCQUE0QixTQUFTO0FBQUEsUUFDdkM7QUFBQSxNQUNGO0FBQ0Esb0JBQWMsaUJBQWlCLFNBQVMsTUFBTTtBQUM1QyxjQUFNLFlBQVksU0FBUyxlQUFlLHNCQUFzQjtBQUNoRSxZQUFJLFdBQVc7QUFDYixnQkFBTSxLQUFLLFdBQVcsY0FBYyxLQUFLO0FBQ3pDLG9CQUFVLGNBQWMsTUFBTSxFQUFFLElBQUksT0FBTyxVQUFZLE9BQU8sRUFBRSxDQUFDO0FBQUEsUUFDbkU7QUFBQSxNQUNGLENBQUM7QUFDRCxvQkFBYyxpQkFBaUIsWUFBWSxDQUFDLE1BQU07QUFDaEQsWUFBSSxFQUFFLFFBQVEsU0FBUztBQUNyQjtBQUFBLFlBQ0UsY0FBYztBQUFBLFlBQ2QsZ0JBQWdCO0FBQUEsWUFDaEIsdUJBQXVCO0FBQUEsWUFDdkIsNEJBQTRCLFNBQVM7QUFBQSxVQUN2QztBQUFBLFFBQ0Y7QUFBQSxNQUNGLENBQUM7QUFDRCxzQkFBZ0IsaUJBQWlCLFlBQVksQ0FBQyxNQUFNO0FBQ2xELFlBQUksRUFBRSxRQUFRLFNBQVM7QUFDckI7QUFBQSxZQUNFLGNBQWM7QUFBQSxZQUNkLGdCQUFnQjtBQUFBLFlBQ2hCLHVCQUF1QjtBQUFBLFlBQ3ZCLDRCQUE0QixTQUFTO0FBQUEsVUFDdkM7QUFBQSxRQUNGO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUVBLFFBQUksVUFBVTtBQUNaLGVBQVMsaUJBQWlCLFNBQVMsTUFBTTtBQUN2QyxjQUFNLGNBQWMsaUJBQWlCLE1BQU0sS0FBSztBQUNoRCxZQUFJLENBQUMsYUFBYTtBQUNoQixVQUFBQyxlQUFjLFVBQVUsNkRBQW1EO0FBQzNFO0FBQUEsUUFDRjtBQUNBLCtCQUF1QixXQUFXO0FBQUEsTUFDcEMsQ0FBQztBQUFBLElBQ0g7QUFFQSxRQUFJLFlBQVk7QUFDZCxpQkFBVyxpQkFBaUIsU0FBUyxtQkFBbUI7QUFBQSxJQUMxRDtBQUVBLFFBQUksWUFBWTtBQUNkLGlCQUFXLGlCQUFpQixTQUFTLG9CQUFvQjtBQUFBLElBQzNEO0FBRUEsUUFBSSxlQUFlO0FBQ2pCLG9CQUFjLGlCQUFpQixTQUFTLDZCQUE2QjtBQUFBLElBQ3ZFO0FBRUEsUUFBSSxtQkFBbUI7QUFDckIsd0JBQWtCLGlCQUFpQixTQUFTLE1BQU07QUFDaEQsd0NBQWdDLDBCQUEwQjtBQUMxRCxpQ0FBeUI7QUFBQSxNQUMzQixDQUFDO0FBQUEsSUFDSDtBQUVBLFFBQUksZUFBZTtBQUNqQixvQkFBYyxpQkFBaUIsU0FBUyxDQUFDLE1BQU07QUFDN0MsVUFBRSxPQUFPLGNBQWMsRUFBRSxPQUFPLGdCQUFnQixXQUFNLFdBQU07QUFDNUQsY0FBTSxjQUFjLFNBQVMsZUFBZSxxQkFBcUI7QUFDakUsWUFBSSxhQUFhO0FBQ2Ysc0JBQVksVUFBVSxPQUFPLFdBQVc7QUFBQSxRQUMxQztBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFHQSxRQUFJLGtCQUFrQjtBQUNwQix1QkFBaUIsaUJBQWlCLFlBQVksQ0FBQyxNQUFNO0FBQ25ELFlBQUksRUFBRSxRQUFRLFdBQVcsQ0FBQyxFQUFFLFVBQVU7QUFDcEMsWUFBRSxlQUFlO0FBQ2pCLG9CQUFVLE1BQU07QUFBQSxRQUNsQjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFHQSxVQUFNLHlCQUF5QixTQUFTLGVBQWUsMkJBQTJCO0FBQ2xGLFVBQU0sbUJBQXlCLFNBQVMsZUFBZSw4QkFBOEI7QUFFckYsUUFBSSx3QkFBd0I7QUFDMUIsNkJBQXVCLGlCQUFpQixTQUFTLHNCQUFzQjtBQUFBLElBQ3pFO0FBRUEsUUFBSSxrQkFBa0I7QUFDcEIsdUJBQWlCLGlCQUFpQixTQUFTLE1BQU07QUFDL0MsY0FBTSxPQUFPUixjQUFhLHFCQUFxQixLQUFLO0FBQ3BELFFBQUFTLG1CQUFrQixJQUFJO0FBQUEsTUFDeEIsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBS0EsaUJBQWUsb0JBQW9CLGVBQWUsaUJBQWlCLDJCQUEyQixPQUFPLHVCQUF1QixjQUFjO0FBQ3hJLFVBQU0sV0FBVyxTQUFTLGVBQWUsd0JBQXdCO0FBQ2pFLFVBQU0saUJBQWlCLFdBQVcsYUFBYTtBQUMvQyxVQUFNLG1CQUFtQixXQUFXLGVBQWU7QUFDbkQsUUFBSSxNQUFNLGNBQWMsS0FBSyxpQkFBaUIsS0FBSyxpQkFBaUIsSUFBSTtBQUN0RSxVQUFJLFNBQVUsVUFBUyxjQUFjO0FBQ3JDO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxnQkFBZ0IsS0FBSyxtQkFBbUIsT0FBTyxtQkFBbUIsS0FBSztBQUMvRSxVQUFJLFNBQVUsVUFBUyxjQUFjO0FBQ3JDO0FBQUEsSUFDRjtBQUNBLFFBQUk7QUFDRixVQUFJLFNBQVUsVUFBUyxjQUFjO0FBQ3JDLFlBQU0sVUFBVSxNQUFNQyxTQUFRLFFBQVEsd0JBQXdCO0FBQUEsUUFDNUQsZ0JBQWdCLEdBQUcsY0FBYztBQUFBLFFBQ2pDLGFBQWEsR0FBRyxnQkFBZ0I7QUFBQSxRQUNoQyw2QkFBNkIsUUFBUSx3QkFBd0I7QUFBQSxRQUM3RCx3QkFBd0I7QUFBQSxNQUMxQixDQUFDO0FBQ0QsVUFBSSxDQUFDLFFBQVEsR0FBSSxPQUFNLElBQUksTUFBTSxRQUFRLFNBQVMsYUFBYTtBQUUvRCxVQUFJLFNBQVUsVUFBUyxjQUFjO0FBQ3JDLFlBQU0sYUFBYSxNQUFNQSxTQUFRLFFBQVEsNEJBQTRCLEVBQUUsa0JBQWtCLDBCQUEwQixFQUFFLENBQUM7QUFDdEgsVUFBSSxXQUFXLE1BQU0sV0FBVyxNQUFNO0FBQ3BDLDZCQUFxQixXQUFXLElBQUk7QUFDcEMsdUJBQWUsV0FBVyxJQUFJO0FBQzlCLHdDQUFnQztBQUNoQyxRQUFBVixlQUFjLHVCQUF1QjtBQUFBLFVBQ25DLGtCQUFrQjtBQUFBLFVBQ2xCLGdCQUFnQixXQUFXLG1CQUFtQjtBQUFBLFVBQzlDLG1CQUFtQixXQUFXLHVCQUF1QjtBQUFBLFVBQ3JELGdCQUFnQixXQUFXLG9CQUFvQjtBQUFBLFVBQy9DLHFCQUFxQixXQUFXLHlCQUF5QjtBQUFBLFVBQ3pELGlCQUFpQixXQUFXLHFCQUFxQjtBQUFBLFVBQ2pELGFBQWEsUUFBUSxXQUFXLG1CQUFtQjtBQUFBLFVBQ25ELG9CQUFvQixXQUFXLHlCQUF3QixvQkFBSSxLQUFLLEdBQUUsWUFBWTtBQUFBLFVBQzlFLGtCQUFrQixXQUFXLHNCQUFzQjtBQUFBLFFBQ3JELENBQUM7QUFDRCxrQ0FBMEIsV0FBVyxtQkFBbUIsSUFBSTtBQUM1RCxpQ0FBeUI7QUFDekIsU0FBQyxXQUFXLG9CQUFvQixDQUFDLEdBQUcsUUFBUSxDQUFBVyxPQUFLO0FBQy9DLGNBQUksT0FBTyxjQUFjLFdBQVksV0FBVUEsR0FBRSxTQUFTLFdBQVcsR0FBSTtBQUFBLFFBQzNFLENBQUM7QUFBQSxNQUNIO0FBQ0EsVUFBSSxVQUFVO0FBQUUsaUJBQVMsY0FBYztBQUFhLG1CQUFXLE1BQU07QUFBRSxtQkFBUyxjQUFjO0FBQUEsUUFBSSxHQUFHLEdBQUk7QUFBQSxNQUFHO0FBQUEsSUFDOUcsU0FBUyxLQUFLO0FBQ1osVUFBSSxTQUFVLFVBQVMsY0FBYztBQUNyQyxNQUFBSCxlQUFjLFVBQVUsd0dBQW1HO0FBQUEsSUFDN0g7QUFBQSxFQUNGO0FBT0EsaUJBQWUsdUJBQXVCLGlCQUFpQjtBQUNyRCxVQUFNLGNBQWMsZUFBZSxFQUFFLFFBQVEsS0FBSztBQUVsRCxxQkFBaUIsS0FBSztBQUFBLE1BQ3BCLE1BQU07QUFBQSxNQUNOLGVBQWUsT0FBTyxzQkFBc0IsQ0FBQyxHQUFHLElBQUksUUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQUEsSUFDckUsQ0FBQztBQUNELFFBQUksaUJBQWlCLFNBQVMsaUJBQWlCO0FBQzdDLHVCQUFpQixNQUFNO0FBQUEsSUFDekI7QUFFQSxRQUFJO0FBQ0YscUJBQWUsSUFBSTtBQUNuQixZQUFNLFdBQVcsTUFBTUUsU0FBUSxRQUFRLDZCQUE2QixFQUFFLGFBQWEsZ0JBQWdCLENBQUM7QUFFcEcsVUFBSSxDQUFDLFNBQVMsSUFBSTtBQUNoQixZQUFJLFNBQVMsVUFBVSxXQUFXO0FBQ2hDLGtDQUF3QixTQUFTLFVBQVUsZUFBZTtBQUFBLFFBQzVELE9BQU87QUFDTCxrQ0FBd0IsU0FBUyxZQUFZO0FBQzdDLGNBQUksWUFBWSx1QkFBYVAsWUFBVyxTQUFTLEtBQUssQ0FBQyxXQUFNQSxZQUFXLFNBQVMsV0FBVyxFQUFFLENBQUM7QUFDL0YsY0FBSSxTQUFTLGlCQUFpQixRQUFXO0FBQ3ZDLHlCQUFhLGtVQUFrVUEsWUFBVyxTQUFTLGdCQUFnQixTQUFTLENBQUM7QUFBQSxVQUMvWDtBQUNBLDRCQUFrQixVQUFVLFNBQVM7QUFBQSxRQUN2QztBQUNBO0FBQUEsTUFDRjtBQUVBLFlBQU0sa0JBQWtCLFNBQVMsb0JBQW9CO0FBRXJELFVBQUksb0JBQW9CLFdBQVc7QUFFakMsY0FBTSxZQUFZLFNBQVMsYUFBYSxDQUFDO0FBQ3pDLFlBQUksVUFBVSxXQUFXLEdBQUc7QUFDMUIsVUFBQUssZUFBYyxVQUFVLG9GQUEwRTtBQUFBLFFBQ3BHLE9BQU87QUFDTCxpQ0FBdUIsU0FBUztBQUNoQyxnQkFBTSxRQUFRLFNBQVMsZUFBZSx5QkFBeUI7QUFDL0QsY0FBSSxNQUFPLE9BQU0sTUFBTSxVQUFVO0FBQUEsUUFDbkM7QUFDQSxpQkFBUyxlQUFlLG1CQUFtQixFQUFFLFFBQVE7QUFDckQ7QUFBQSxNQUNGO0FBR0EsWUFBTSxVQUFVLFNBQVM7QUFDekIsMkJBQXFCLE9BQU87QUFDNUIsOEJBQXdCLFNBQVMsWUFBWTtBQUM3QyxxQkFBZSxPQUFPO0FBQ3RCLHNDQUFnQztBQUNoQyxNQUFBUixlQUFjLHVCQUF1QjtBQUFBLFFBQ25DLGtCQUFrQjtBQUFBLFFBQ2xCLGdCQUFnQixTQUFTLG1CQUFtQjtBQUFBLFFBQzVDLGlCQUFpQjtBQUFBLFFBQ2pCLG1CQUFtQixTQUFTLHVCQUF1QjtBQUFBLFFBQ25ELGdCQUFnQixTQUFTLG9CQUFvQjtBQUFBLFFBQzdDLHFCQUFxQixTQUFTLHlCQUF5QjtBQUFBLFFBQ3ZELGlCQUFpQixTQUFTLHFCQUFxQjtBQUFBLFFBQy9DLGFBQWEsUUFBUSxTQUFTLG1CQUFtQjtBQUFBLFFBQ2pELG9CQUFvQixTQUFTLHlCQUF3QixvQkFBSSxLQUFLLEdBQUUsWUFBWTtBQUFBLFFBQzVFLGtCQUFrQixTQUFTLHNCQUFzQjtBQUFBLE1BQ25ELENBQUM7QUFDRCxnQ0FBMEIsU0FBUyxtQkFBbUIsSUFBSTtBQUUxRCxZQUFNLGNBQWM7QUFBQSxRQUNsQixZQUFXLG9CQUFJLEtBQUssR0FBRSxtQkFBbUI7QUFBQSxRQUN6QyxrQkFBa0I7QUFBQSxRQUNsQixnQkFBZ0IsU0FBUztBQUFBLFFBQ3pCLGNBQWM7QUFBQSxNQUNoQjtBQUNBLDhCQUF3QixXQUFXO0FBQ25DLDhCQUF3QixHQUFHLFNBQVMsY0FBYyxVQUFVLGtCQUFRLFNBQUksR0FBRyxTQUFTLE9BQU8sRUFBRTtBQUM3RixlQUFTLGVBQWUsbUJBQW1CLEVBQUUsUUFBUTtBQUNyRCwrQkFBeUI7QUFBQSxJQUUzQixTQUFTLE9BQU87QUFDZCxNQUFBUSxlQUFjLFVBQVUsOEhBQXlIO0FBQUEsSUFDbkosVUFBRTtBQUNBLHFCQUFlLEtBQUs7QUFBQSxJQUN0QjtBQUFBLEVBQ0Y7QUFVQSxpQkFBZSx3QkFBd0IsaUJBQWlCO0FBdUJ0RCxVQUFNLGNBQWMsZUFBZSxFQUFFLFFBQVEsS0FBSztBQUNsRCxVQUFNLG9CQUFvQixPQUFPLHNCQUFzQixDQUFDO0FBR3hELHFCQUFpQixLQUFLO0FBQUEsTUFDcEIsTUFBTTtBQUFBLE1BQ04sZUFBZSxPQUFPLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxRQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7QUFBQSxJQUNyRSxDQUFDO0FBQ0QsUUFBSSxpQkFBaUIsU0FBUyxpQkFBaUI7QUFDN0MsdUJBQWlCLE1BQU07QUFBQSxJQUN6QjtBQUVBLFFBQUk7QUFDRixxQkFBZSxJQUFJO0FBR25CLFVBQUk7QUFDSixZQUFNLFdBQVdSLGVBQWMscUJBQXFCLEtBQUssQ0FBQztBQUMxRCxZQUFNLHFCQUFxQixTQUFTLG9CQUFvQixTQUFTLFVBQVU7QUFFM0UsVUFBSSxvQkFBb0I7QUFDdEIsbUJBQVcsTUFBTVUsU0FBUSxRQUFRLHlCQUF5QjtBQUFBLFVBQ3hELGFBQWE7QUFBQSxVQUNiLGtCQUFrQiwwQkFBMEI7QUFBQSxRQUM5QyxDQUFDO0FBQUEsTUFDSCxPQUFPO0FBQ0wsbUJBQVcsTUFBTUEsU0FBUSxRQUFRLDJCQUEyQjtBQUFBLFVBQzFELGFBQWE7QUFBQSxVQUNiLGNBQWM7QUFBQSxVQUNkLG9CQUFvQjtBQUFBLFFBQ3RCLENBQUM7QUFBQSxNQUNIO0FBRUEsVUFBSSxDQUFDLFNBQVMsSUFBSTtBQUNoQixZQUFJLFNBQVMsVUFBVSxXQUFXO0FBQ2hDLGtDQUF3QixTQUFTLFVBQVUsZUFBZTtBQUFBLFFBQzVELE9BQU87QUFDTCxrQ0FBd0IsU0FBUyxZQUFZO0FBQzdDLGNBQUksWUFBWSx1QkFBYVAsWUFBVyxTQUFTLEtBQUssQ0FBQyxXQUFNQSxZQUFXLFNBQVMsV0FBVyxFQUFFLENBQUM7QUFDL0YsY0FBSSxTQUFTLGlCQUFpQixRQUFXO0FBQ3ZDLHlCQUFhLGtVQUFrVUEsWUFBVyxTQUFTLGdCQUFnQixTQUFTLENBQUM7QUFBQSxVQUMvWDtBQUNBLDRCQUFrQixVQUFVLFNBQVM7QUFBQSxRQUN2QztBQUNBO0FBQUEsTUFDRjtBQUdBLFlBQU0sVUFBVSxTQUFTO0FBQ3pCLDJCQUFxQixPQUFPO0FBRTVCLDhCQUF3QixTQUFTLFlBQVk7QUFHN0MscUJBQWUsT0FBTztBQUN0QixzQ0FBZ0M7QUFDaEMsTUFBQUgsZUFBYyx1QkFBdUI7QUFBQSxRQUNuQyxrQkFBa0I7QUFBQSxRQUNsQixnQkFBZ0IsU0FBUyxtQkFBbUI7QUFBQSxRQUM1QyxpQkFBaUI7QUFBQSxRQUNqQixtQkFBbUIsU0FBUyx1QkFBdUI7QUFBQSxRQUNuRCxnQkFBZ0IsU0FBUyxvQkFBb0I7QUFBQSxRQUM3QyxxQkFBcUIsU0FBUyx5QkFBeUI7QUFBQSxRQUN2RCxpQkFBaUIsU0FBUyxxQkFBcUI7QUFBQSxRQUMvQyxhQUFhLFFBQVEsU0FBUyxtQkFBbUI7QUFBQSxRQUNqRCxvQkFBb0IsU0FBUyx5QkFBd0Isb0JBQUksS0FBSyxHQUFFLFlBQVk7QUFBQSxRQUM1RSxrQkFBa0IsU0FBUyxzQkFBc0I7QUFBQSxNQUNuRCxDQUFDO0FBQ0QsZ0NBQTBCLFNBQVMsbUJBQW1CLElBQUk7QUFHMUQsWUFBTSxjQUFjO0FBQUEsUUFDbEIsWUFBVyxvQkFBSSxLQUFLLEdBQUUsbUJBQW1CO0FBQUEsUUFDekMsa0JBQWtCO0FBQUEsUUFDbEIsZ0JBQWdCLFNBQVM7QUFBQSxRQUN6QixjQUFjO0FBQUEsTUFDaEI7QUFDQSw4QkFBd0IsV0FBVztBQUduQyw4QkFBd0IsR0FBRyxTQUFTLGNBQWMsVUFBVSxrQkFBUSxTQUFJLEdBQUcsU0FBUyxPQUFPLEVBQUU7QUFHN0YsZUFBUyxlQUFlLG1CQUFtQixFQUFFLFFBQVE7QUFDckQsK0JBQXlCO0FBQUEsSUFFM0IsU0FBUyxPQUFPO0FBQ2QsTUFBQVEsZUFBYyxVQUFVLHlIQUFvSDtBQUFBLElBQzlJLFVBQUU7QUFDQSxxQkFBZSxLQUFLO0FBQUEsSUFDdEI7QUFBQSxFQUNGO0FBT0EsV0FBUyxxQkFBcUIsTUFBTTtBQUNsQyxXQUFPO0FBQUEsTUFDTCxrQkFBcUI7QUFBQSxNQUNyQixnQkFBcUIsS0FBSyxtQkFBd0I7QUFBQSxNQUNsRCxtQkFBcUIsS0FBSyx1QkFBd0I7QUFBQSxNQUNsRCxnQkFBcUIsS0FBSyxvQkFBeUI7QUFBQSxNQUNuRCxxQkFBcUIsS0FBSyx5QkFBeUI7QUFBQSxNQUNuRCxpQkFBcUIsS0FBSyxxQkFBeUI7QUFBQSxNQUNuRCxhQUFxQixRQUFRLEtBQUssbUJBQW1CO0FBQUEsTUFDckQsb0JBQXFCLEtBQUsseUJBQXlCLG9CQUFJLEtBQUssR0FBRSxZQUFZO0FBQUEsTUFDMUUsa0JBQXFCLEtBQUssc0JBQXlCO0FBQUEsSUFDckQ7QUFBQSxFQUNGO0FBa0JBLGlCQUFlLGdDQUFnQztBQUM3QyxVQUFNLFdBQWNSLGVBQWMscUJBQXFCLEtBQUssQ0FBQztBQUM3RCxVQUFNLGNBQWMsU0FBUyxVQUFVLGtCQUFrQixhQUNyQyxTQUFTLFVBQVUsa0JBQWtCO0FBRXpELHVCQUFtQixNQUFNLGNBQWMsK0JBQTBCLDBCQUFxQjtBQUN0RixRQUFJO0FBSUYsVUFBSSxDQUFDLGFBQWE7QUFDaEIsWUFBSTtBQUNGLGdCQUFNLE9BQU8sTUFBTVUsU0FBUSxRQUFRLDRCQUE0QixDQUFDLENBQUM7QUFDakUsY0FBSSxLQUFLLE1BQU0sS0FBSyxNQUFNO0FBQ3hCLGlDQUFxQixLQUFLLElBQUk7QUFDOUIsMkJBQWUsS0FBSyxJQUFJO0FBQ3hCLDRDQUFnQztBQUNoQyxZQUFBVixlQUFjLHVCQUF1QixxQkFBcUIsSUFBSSxDQUFDO0FBQy9ELHNDQUEwQixLQUFLLG1CQUFtQixJQUFJO0FBQ3RELHFDQUF5QjtBQUN6QixhQUFDLEtBQUssb0JBQW9CLENBQUMsR0FBRyxRQUFRLENBQUFXLE9BQUs7QUFDekMsa0JBQUksT0FBTyxjQUFjLFdBQVksV0FBVUEsR0FBRSxTQUFTLFdBQVcsR0FBSTtBQUFBLFlBQzNFLENBQUM7QUFDRDtBQUFBLFVBQ0Y7QUFBQSxRQUNGLFNBQVNDLEtBQUk7QUFBQSxRQUViO0FBQUEsTUFDRjtBQUtBLFVBQUk7QUFDRiwyQkFBbUIsTUFBTSw2QkFBd0I7QUFDakQsY0FBTSxPQUFPLE1BQU1GLFNBQVEsT0FBTyxrQkFBa0I7QUFDcEQsWUFBSSxLQUFLLE1BQU0sS0FBSyxNQUFNO0FBQ3hCLCtCQUFxQixLQUFLLElBQUk7QUFDOUIseUJBQWUsS0FBSyxJQUFJO0FBQ3hCLG1DQUF5QjtBQUN6QjtBQUFBLFFBQ0Y7QUFDQSxRQUFBWCxLQUFJLEtBQUssaUNBQWlDLEtBQUssU0FBUyxrQkFBa0I7QUFBQSxNQUM1RSxTQUFTYSxLQUFJO0FBQUEsTUFFYjtBQUFBLElBQ0YsVUFBRTtBQUNBLHlCQUFtQixLQUFLO0FBQUEsSUFDMUI7QUFBQSxFQUNGO0FBS0EsV0FBUyxxQkFBcUJYLE9BQU07QUFDbEMsVUFBTSxVQUFVLFNBQVMsZUFBZSxnQkFBZ0I7QUFDeEQsUUFBSSxDQUFDLFFBQVM7QUFFZCx1QkFBbUIsS0FBSztBQUN4QixZQUFRLFNBQVMsTUFBTSx1QkFBdUIsT0FBTztBQUNyRCxZQUFRLGFBQWEsV0FBVyxtQkFBbUI7QUFDbkQsWUFBUSxhQUFhLGtCQUFrQixhQUFhO0FBQ3BELFlBQVEsU0FBU0E7QUFFakIsVUFBTSxNQUFNLFFBQVEsbUJBQW1CLFFBQVEsZUFBZTtBQUM5RCxRQUFJLEtBQUssZUFBZSxZQUFZO0FBQ2xDLDZCQUF1QixPQUFPO0FBQUEsSUFDaEM7QUFBQSxFQUNGO0FBS0EsV0FBUyx1QkFBdUIsU0FBUztBQUN2QyxVQUFNLE1BQU0sU0FBUyxtQkFBbUIsU0FBUyxlQUFlO0FBQ2hFLFVBQU0sWUFBWSxTQUFTLFFBQVEsMkJBQTJCO0FBQzlELFFBQUksQ0FBQyxPQUFPLENBQUMsVUFBVztBQUV4QixVQUFNLGdCQUFnQixJQUFJLGNBQWMsaUJBQWlCLEtBQUssSUFBSTtBQUNsRSxRQUFJLENBQUMsY0FBZTtBQUVwQixVQUFNLGlCQUFpQixLQUFLLElBQUksVUFBVSxjQUFjLElBQUksQ0FBQztBQUM3RCxVQUFNLGVBQWUsS0FBSztBQUFBLE1BQ3hCLEtBQUssS0FBSyxjQUFjLGVBQWUsQ0FBQztBQUFBLE1BQ3hDLEtBQUssS0FBSyxjQUFjLHNCQUFzQixFQUFFLFNBQVMsQ0FBQztBQUFBLE1BQzFEO0FBQUEsSUFDRjtBQUNBLFVBQU0sUUFBUSxLQUFLLElBQUksR0FBRyxpQkFBaUIsWUFBWTtBQUV2RCxRQUFJLGdCQUFnQixNQUFNLGFBQWE7QUFDdkMsUUFBSSxLQUFLLE1BQU0sU0FBUztBQUN4QixRQUFJLEtBQUssTUFBTSxVQUFVO0FBQ3pCLFFBQUksS0FBSyxNQUFNLGFBQWE7QUFDNUIsUUFBSSxLQUFLLE1BQU0sWUFBWTtBQUUzQixrQkFBYyxNQUFNLE9BQU8sR0FBRyxLQUFLO0FBQ25DLGtCQUFjLE1BQU0sWUFBWTtBQUNoQyxrQkFBYyxNQUFNLGtCQUFrQjtBQUN0QyxrQkFBYyxNQUFNLFNBQVM7QUFDN0IsWUFBUSxNQUFNLFdBQVc7QUFBQSxFQUMzQjtBQUtBLFdBQVMsd0JBQXdCLGFBQWE7QUFFNUMsUUFBSSxDQUFDLE9BQU8sb0JBQW9CO0FBQzlCLGFBQU8scUJBQXFCLENBQUM7QUFBQSxJQUMvQjtBQUVBLFdBQU8sbUJBQW1CLEtBQUssMkJBQTJCLFdBQVcsQ0FBQztBQUN0RSw2QkFBeUI7QUFBQSxFQUMzQjtBQUtBLFdBQVMsMkJBQTJCO0FBQ2xDLFVBQU0sY0FBYyxTQUFTLGVBQWUscUJBQXFCO0FBQ2pFLFFBQUksQ0FBQyxZQUFhO0FBRWxCLFVBQU0sZUFBZSxPQUFPLHNCQUFzQixDQUFDO0FBQ25ELGdCQUFZLFlBQVk7QUFDeEIsVUFBTSxVQUFVLGFBQWEsU0FBUztBQUN0QyxpQkFBYSxRQUFRLENBQUMsYUFBYSxVQUFVO0FBQzNDLFlBQU0sUUFBUSxTQUFTLGNBQWMsS0FBSztBQUMxQyxZQUFNLFlBQVk7QUFDbEIsWUFBTSxTQUFTLFVBQVU7QUFDekIsWUFBTSxXQUFXLFNBQ2IsMERBQTBELEtBQUssNEJBQy9EO0FBQUE7QUFFSixZQUFNLFlBQVk7QUFBQSxzQ0FDZ0IsWUFBWSxhQUFhLEVBQUU7QUFBQSxzQ0FDM0JFLFlBQVcsWUFBWSxvQkFBb0IsRUFBRSxDQUFDO0FBQUEsNkNBQ3ZDQSxZQUFXLFlBQVksa0JBQWtCLEVBQUUsQ0FBQztBQUFBLFFBQ2pGLFFBQVE7QUFBQTtBQUVaLGtCQUFZLFlBQVksS0FBSztBQUFBLElBQy9CLENBQUM7QUFHRCxhQUFTLGVBQWUsbUJBQW1CLEVBQUUsZUFBZSxPQUFPLHNCQUFzQixDQUFDLEdBQUc7QUFBQSxFQUMvRjtBQUtBLGlCQUFlLCtCQUErQjtBQUM1QyxRQUFJO0FBQ0YsWUFBTSxXQUFXLE1BQU1PLFNBQVEsT0FBTyxxQkFBcUI7QUFDM0QsVUFBSSxDQUFDLFVBQVUsZ0JBQWdCLENBQUMsTUFBTSxRQUFRLFNBQVMsWUFBWSxHQUFHO0FBQ3BFLGVBQU8sT0FBTyxzQkFBc0IsQ0FBQztBQUFBLE1BQ3ZDO0FBRUEsYUFBTyxTQUFTLGFBQWEsSUFBSSxDQUFDLGdCQUFnQiwyQkFBMkIsV0FBVyxDQUFDO0FBQUEsSUFDM0YsU0FBUyxRQUFRO0FBQ2YsYUFBTyxPQUFPLHNCQUFzQixDQUFDO0FBQUEsSUFDdkM7QUFBQSxFQUNGO0FBRUEsaUJBQWUsNEJBQTRCO0FBQ3pDLFdBQU8scUJBQXFCLE1BQU0sNkJBQTZCO0FBQy9ELDZCQUF5QjtBQUN6Qiw2QkFBeUI7QUFBQSxFQUMzQjtBQUVBLGlCQUFlLGdDQUFnQztBQUM3QyxRQUFJO0FBQ0YscUJBQWUsSUFBSTtBQUNuQixZQUFNLDhCQUE4QjtBQUNwQyw4QkFBd0IscURBQWdEO0FBQUEsSUFDMUUsU0FBUyxPQUFPO0FBQ2QsTUFBQUYsZUFBYyxVQUFVLHFJQUFnSTtBQUN4Six5QkFBbUIsS0FBSztBQUFBLElBQzFCLFVBQUU7QUFDQSxxQkFBZSxLQUFLO0FBQUEsSUFDdEI7QUFBQSxFQUNGO0FBS0EsV0FBUyxlQUFlLE1BQU07QUFDNUIsVUFBTSxZQUFZLFNBQVMsZUFBZSxzQkFBc0I7QUFDaEUsUUFBSSxXQUFXO0FBQ2IsZ0JBQVUsTUFBTSxVQUFVLE9BQU8sVUFBVTtBQUFBLElBQzdDO0FBQUEsRUFDRjtBQU9BLFdBQVMsbUJBQW1CLE1BQU0sVUFBVSxJQUFJO0FBQzlDLFVBQU0sVUFBVSxTQUFTLGVBQWUseUJBQXlCO0FBQ2pFLFFBQUksQ0FBQyxRQUFTO0FBQ2QsWUFBUSxNQUFNLFVBQVUsT0FBTyxTQUFTO0FBQ3hDLFVBQU0sUUFBUSxTQUFTLGVBQWUscUJBQXFCO0FBQzNELFFBQUksTUFBTyxPQUFNLGNBQWM7QUFBQSxFQUNqQztBQUtBLFdBQVMsd0JBQXdCLFNBQVM7QUFDeEMsVUFBTSxVQUFVLFNBQVMsZUFBZSxzQkFBc0I7QUFDOUQsUUFBSSxDQUFDLFFBQVM7QUFFZCxZQUFRLGNBQWM7QUFDdEIsWUFBUSxNQUFNLFVBQVU7QUFHeEIsZUFBVyxNQUFNO0FBQ2YsY0FBUSxNQUFNLFVBQVU7QUFBQSxJQUMxQixHQUFHLEdBQUk7QUFBQSxFQUNUO0FBTUEsV0FBUyx3QkFBd0IsVUFBVSxxQkFBcUI7QUFDOUQsVUFBTSxVQUFVLFNBQVMsZUFBZSxtQkFBbUI7QUFDM0QsVUFBTSxZQUFZLFVBQVUsUUFBUSxRQUFRLEtBQUssS0FBSyxRQUFRLGFBQWE7QUFDM0UsUUFBSSxDQUFDLFVBQVc7QUFFaEIsVUFBTSxnQkFBZ0IsU0FBUyxlQUFlLDRCQUE0QjtBQUMxRSxRQUFJLGNBQWUsZUFBYyxPQUFPO0FBRXhDLFVBQU0sUUFBUSxTQUFTLGNBQWMsS0FBSztBQUMxQyxVQUFNLEtBQUs7QUFDWCxVQUFNLGFBQWEsUUFBUSxPQUFPO0FBQ2xDLFVBQU0sTUFBTSxVQUFVO0FBQ3RCLFVBQU0sWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlFQUk2Q0wsWUFBVyxRQUFRLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsMERBTTNCQSxZQUFXLG1CQUFtQixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZdkYsY0FBVSxZQUFZLEtBQUs7QUFFM0IsVUFBTSxZQUFhLE1BQU0sY0FBYyw2QkFBNkI7QUFDcEUsVUFBTSxZQUFhLE1BQU0sY0FBYyw4QkFBOEI7QUFDckUsVUFBTSxZQUFhLE1BQU0sY0FBYyw4QkFBOEI7QUFFckUsY0FBVSxNQUFNO0FBQ2hCLGNBQVUsa0JBQWtCLFVBQVUsTUFBTSxRQUFRLFVBQVUsTUFBTSxNQUFNO0FBRTFFLGNBQVUsaUJBQWlCLFNBQVMsTUFBTTtBQUN4QyxZQUFNLFlBQVksVUFBVSxNQUFNLEtBQUs7QUFDdkMsWUFBTSxPQUFPO0FBQ2IsVUFBSSxhQUFhLGNBQWMscUJBQXFCO0FBQ2xELGdDQUF3QixTQUFTO0FBQUEsTUFDbkM7QUFBQSxJQUNGLENBQUM7QUFDRCxjQUFVLGlCQUFpQixTQUFTLE1BQU0sTUFBTSxPQUFPLENBQUM7QUFDeEQsY0FBVSxpQkFBaUIsV0FBVyxPQUFLO0FBQ3pDLFVBQUksRUFBRSxRQUFRLFdBQVcsQ0FBQyxFQUFFLFVBQVU7QUFBRSxVQUFFLGVBQWU7QUFBRyxrQkFBVSxNQUFNO0FBQUEsTUFBRztBQUMvRSxVQUFJLEVBQUUsUUFBUSxTQUFVLFdBQVUsTUFBTTtBQUFBLElBQzFDLENBQUM7QUFBQSxFQUNIO0FBT0EsV0FBUyxnQkFBZ0IsUUFBUTtBQUMvQixRQUFJLGlCQUFpQixXQUFXLEdBQUc7QUFDakMsTUFBQUssZUFBYyxVQUFVLCtCQUFxQjtBQUM3QztBQUFBLElBQ0Y7QUFFQSxVQUFNLFdBQVcsaUJBQWlCLElBQUk7QUFDdEMsV0FBTyxxQkFBcUIsU0FBUztBQUVyQyx5QkFBcUIsU0FBUyxJQUFJO0FBQ2xDLG1CQUFlLFNBQVMsSUFBSTtBQUM1Qiw2QkFBeUI7QUFDekIsSUFBQUEsZUFBYyxVQUFVLDhDQUFvQztBQUFBLEVBQzlEO0FBRUEsU0FBTyxpQkFBaUIsVUFBVSxNQUFNO0FBQ3RDLFVBQU0sVUFBVSxTQUFTLGVBQWUsZ0JBQWdCO0FBQ3hELFFBQUksU0FBUztBQUNYLDZCQUF1QixPQUFPO0FBQUEsSUFDaEM7QUFBQSxFQUNGLENBQUM7QUFFRCxpQkFBZSxzQkFBc0I7QUFDbkMsUUFBSTtBQUNGLHFCQUFlLElBQUk7QUFFbkIsWUFBTSxZQUFZUixjQUFhLG1CQUFtQjtBQUNsRCxVQUFJLFVBQVUsU0FBUztBQUNyQixjQUFNLElBQUksTUFBTSx1RUFBdUU7QUFBQSxNQUN6RjtBQUVBLFlBQU0sYUFBYSxNQUFNVSxTQUFRLFFBQVEsMEJBQTBCLEVBQUUsa0JBQWtCLDBCQUEwQixFQUFFLENBQUM7QUFDcEgsVUFBSSxDQUFDLFlBQVksSUFBSTtBQUNuQixjQUFNLElBQUksTUFBTSxZQUFZLFNBQVMsMkJBQTJCO0FBQUEsTUFDbEU7QUFFQSxNQUFBVixjQUFhLG9CQUFvQjtBQUFBLFFBQy9CLGFBQWEsV0FBVyxpQkFBZ0Isb0JBQUksS0FBSyxHQUFFLFlBQVk7QUFBQSxNQUNqRSxDQUFDO0FBQ0QsOEJBQXdCLG1FQUE4RDtBQUN0RixNQUFBUSxlQUFjLGFBQWEsdUZBQWtGO0FBQzdHLCtCQUF5QjtBQUFBLElBQzNCLFNBQVMsT0FBTztBQUNkLE1BQUFBLGVBQWMsVUFBVSw0R0FBdUc7QUFBQSxJQUNqSSxVQUFFO0FBQ0EscUJBQWUsS0FBSztBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUVBLGlCQUFlLHVCQUF1QjtBQXFCcEMsUUFBSTtBQUNGLHFCQUFlLElBQUk7QUFFbkIsWUFBTSxZQUFZUixjQUFhLG1CQUFtQjtBQUNsRCxZQUFNSyxtQkFBa0JMLGNBQWEsbUJBQW1CO0FBQ3hELFVBQUksVUFBVSxTQUFTO0FBQ3JCLGNBQU0sSUFBSSxNQUFNLDRFQUE0RTtBQUFBLE1BQzlGO0FBQ0EsVUFBSSxDQUFDSyxpQkFBZ0IsbUJBQW1CQSxpQkFBZ0IsVUFBVSxhQUFhO0FBQzdFLGNBQU0sbUJBQW1CLE9BQU8sc0JBQXNCLENBQUMsR0FBRyxTQUFTO0FBQ25FLFlBQUksaUJBQWlCO0FBQ25CLGdCQUFNLElBQUksTUFBTSwrQ0FBK0M7QUFBQSxRQUNqRTtBQUVBLGNBQU0sYUFBYSxNQUFNSyxTQUFRLFFBQVEsMEJBQTBCLEVBQUUsa0JBQWtCLDBCQUEwQixFQUFFLENBQUM7QUFDcEgsWUFBSSxDQUFDLFlBQVksSUFBSTtBQUNuQixnQkFBTSxJQUFJLE1BQU0sWUFBWSxTQUFTLGdDQUFnQztBQUFBLFFBQ3ZFO0FBQ0EsUUFBQVYsY0FBYSxvQkFBb0IsRUFBRSxhQUFhLFdBQVcsaUJBQWdCLG9CQUFJLEtBQUssR0FBRSxZQUFZLEVBQUUsQ0FBQztBQUFBLE1BQ3ZHO0FBRUEsWUFBTSxXQUFXLE1BQU1VLFNBQVEsUUFBUSwwQkFBMEIsQ0FBQyxDQUFDO0FBQ25FLFVBQUksQ0FBQyxVQUFVLE1BQU0sQ0FBQyxTQUFTLFNBQVM7QUFDdEMsY0FBTSxJQUFJLE1BQU0sVUFBVSxTQUFTLHFDQUFxQztBQUFBLE1BQzFFO0FBRUEsd0JBQWtCLFNBQVMsT0FBTztBQUNsQyxNQUFBVixjQUFhLG1CQUFtQixTQUFTLGdCQUFnQixNQUFNO0FBQUEsUUFDN0QsbUJBQW1CLFNBQVMsdUJBQXVCO0FBQUEsUUFDbkQsZ0JBQWdCLFNBQVMsb0JBQW9CO0FBQUEsTUFDL0MsQ0FBQztBQUVELE1BQUFhLG9CQUFtQixpQkFBaUI7QUFFcEMsTUFBQWIsY0FBYSxTQUFTLGtCQUFrQjtBQUN4QyxNQUFBYyxXQUFVLGdCQUFnQjtBQUMxQixNQUFBTixlQUFjLGFBQWEseURBQW9EO0FBQUEsSUFDakYsU0FBUyxPQUFPO0FBQ2QsTUFBQUEsZUFBYyxVQUFVLDBDQUFxQyxNQUFNLE9BQU8sNkdBQTZHO0FBQUEsSUFDekwsVUFBRTtBQUNBLHFCQUFlLEtBQUs7QUFBQSxJQUN0QjtBQUFBLEVBQ0Y7QUFFQSxpQkFBZU8sNkJBQTRCO0FBQ3pDLFVBQU0sWUFBWWYsY0FBYSxtQkFBbUI7QUFDbEQsVUFBTUssbUJBQWtCTCxjQUFhLG1CQUFtQjtBQUN4RCxRQUFJLFVBQVUsUUFBUyxRQUFPLDhCQUE4QjtBQUM1RCxRQUFJSyxpQkFBZ0IsbUJBQW1CQSxpQkFBZ0IsVUFBVSxhQUFhO0FBQzVFLGFBQU8scUJBQXFCO0FBQUEsSUFDOUI7QUFDQSxXQUFPLG9CQUFvQjtBQUFBLEVBQzdCO0FBRUEsaUJBQWUsdUJBQXVCO0FBQ3BDLFdBQU9VLDJCQUEwQjtBQUFBLEVBQ25DO0FBRUEsTUFBSSxPQUFPLFdBQVcsYUFBYTtBQUNqQyxXQUFPLGlCQUFpQix3QkFBd0Isd0JBQXdCO0FBQUEsRUFDMUU7QUFPQSxpQkFBZSx3QkFBd0I7QUFDckMsVUFBTSxRQUFhLFNBQVMsZUFBZSxtQkFBbUI7QUFDOUQsVUFBTSxhQUFhLFNBQVMsZUFBZSw2QkFBNkI7QUFDeEUsVUFBTSxRQUFhLFNBQVMsZUFBZSx5QkFBeUI7QUFFcEUsVUFBTSxjQUFjLE9BQU8sTUFBTSxLQUFLO0FBQ3RDLFFBQUksQ0FBQyxhQUFhO0FBQ2hCLE1BQUFQLGVBQWMsVUFBVSw2RUFBbUU7QUFDM0Y7QUFBQSxJQUNGO0FBRUEsUUFBSSxXQUFZLFlBQVcsTUFBTSxVQUFVO0FBQzNDLFFBQUksTUFBYSxPQUFNLE1BQU0sVUFBVTtBQUV2QyxRQUFJO0FBQ0YsWUFBTSxNQUFNLE1BQU1FLFNBQVEsUUFBUSxrQ0FBa0MsRUFBRSxZQUFZLENBQUM7QUFDbkYsVUFBSSxDQUFDLEtBQUssSUFBSTtBQUNaLFFBQUFGLGVBQWMsVUFBVSxvSEFBK0c7QUFDdkk7QUFBQSxNQUNGO0FBQ0EsWUFBTSxZQUFZLElBQUksYUFBYSxDQUFDO0FBQ3BDLFVBQUksVUFBVSxXQUFXLEdBQUc7QUFDMUIsUUFBQUEsZUFBYyxVQUFVLDRFQUFrRTtBQUMxRjtBQUFBLE1BQ0Y7QUFDQSw2QkFBdUIsU0FBUztBQUNoQyxVQUFJLE1BQU8sT0FBTSxNQUFNLFVBQVU7QUFBQSxJQUNuQyxTQUFTLEtBQUs7QUFDWixNQUFBQSxlQUFjLFVBQVUsb0ZBQStFO0FBQUEsSUFDekcsVUFBRTtBQUNBLFVBQUksV0FBWSxZQUFXLE1BQU0sVUFBVTtBQUFBLElBQzdDO0FBQUEsRUFDRjtBQU1BLFdBQVMsdUJBQXVCLFdBQVc7QUFDekMsVUFBTSxRQUFRLFNBQVMsZUFBZSx5QkFBeUI7QUFDL0QsUUFBSSxDQUFDLE1BQU87QUFFWixVQUFNLFdBQVcsU0FBUyxlQUFlLDJCQUEyQjtBQUVwRSxVQUFNLFlBQVk7QUFBQSwyQ0FDdUIsVUFBVSxNQUFNLFlBQVksVUFBVSxXQUFXLElBQUksTUFBTSxFQUFFO0FBQUEsTUFDbEcsVUFBVSxJQUFJLENBQUMsR0FBRyxNQUFNO0FBQUEsNkRBQytCTCxZQUFXLEVBQUUsRUFBRSxDQUFDLDBCQUEwQixDQUFDO0FBQUE7QUFBQSw4Q0FFMUQsRUFBRSxTQUFTLFlBQVksWUFBWSxRQUFRO0FBQUEsNENBQzdDQSxZQUFXLEVBQUUsUUFBUSxDQUFDO0FBQUE7QUFBQTtBQUFBLG9FQUdFQSxZQUFXLEVBQUUsUUFBUSxDQUFDO0FBQUEsbUVBQ3ZCQSxZQUFXLEVBQUUsUUFBUSxDQUFDO0FBQUE7QUFBQSxVQUUvRSxFQUFFLFNBQVMsb0NBQW9DQSxZQUFXLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFPbEYsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUFBO0FBSXJCLFVBQU0sUUFBUSxZQUFZLEtBQUssVUFBVSxTQUFTO0FBRWxELFFBQUksU0FBVSxVQUFTLE1BQU0sVUFBVTtBQUFBLEVBQ3pDO0FBTUEsaUJBQWUseUJBQXlCO0FBQ3RDLFVBQU0sUUFBVyxTQUFTLGVBQWUseUJBQXlCO0FBQ2xFLFVBQU0sV0FBVyxTQUFTLGVBQWUsMkJBQTJCO0FBRXBFLFVBQU0sZUFBZSxLQUFLLE1BQU0sT0FBTyxRQUFRLGFBQWEsSUFBSTtBQUNoRSxVQUFNLGFBQWUsT0FBTyxpQkFBaUIsNEJBQTRCLEtBQUssQ0FBQztBQUUvRSxVQUFNLFdBQVcsYUFBYSxPQUFPLENBQUNJLElBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxPQUFPO0FBQ3JFLFFBQUksU0FBUyxXQUFXLEdBQUc7QUFDekIsTUFBQUMsZUFBYyxVQUFVLHdFQUE4RDtBQUN0RjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFNBQVUsVUFBUyxXQUFXO0FBRWxDLFFBQUk7QUFDRixZQUFNLE1BQU0sTUFBTUUsU0FBUSxRQUFRLGlDQUFpQyxFQUFFLFNBQVMsQ0FBQztBQUMvRSxVQUFJLENBQUMsS0FBSyxJQUFJO0FBQ1osUUFBQUYsZUFBYyxVQUFVLDJDQUFzQyxLQUFLLFNBQVMsZUFBZSxFQUFFO0FBQzdGO0FBQUEsTUFDRjtBQUVBLE1BQUFSLGNBQWE7QUFBQSxRQUNYLElBQUksZ0JBQWdCLENBQUMsWUFBWSxRQUFRO0FBQUEsUUFDekMsSUFBSSx1QkFBdUI7QUFBQSxNQUM3QjtBQUVBLE1BQUFRLGVBQWMsYUFBYSxVQUFLLElBQUksYUFBYSxrQkFBa0IsSUFBSSxrQkFBa0IsSUFBSSxNQUFNLEVBQUUsK0NBQStDO0FBR3BKLFVBQUksT0FBTztBQUFFLGNBQU0sWUFBWTtBQUFJLGNBQU0sTUFBTSxVQUFVO0FBQVEsY0FBTSxRQUFRLFlBQVk7QUFBQSxNQUFNO0FBQ2pHLFVBQUksU0FBVSxVQUFTLE1BQU0sVUFBVTtBQUV2QywrQkFBeUI7QUFBQSxJQUMzQixTQUFTLEtBQUs7QUFDWixNQUFBQSxlQUFjLFVBQVUsOEVBQXlFO0FBQUEsSUFDbkcsVUFBRTtBQUNBLFVBQUksU0FBVSxVQUFTLFdBQVc7QUFBQSxJQUNwQztBQUFBLEVBQ0Y7QUFLQSxXQUFTLDJCQUEyQjtBQUNsQyxVQUFNLFVBQVUsU0FBUyxlQUFlLHNCQUFzQjtBQUM5RCxRQUFJLENBQUMsUUFBUztBQUNkLFVBQU0sUUFBUVIsY0FBYSxlQUFlO0FBQzFDLFlBQVEsTUFBTSxVQUFVLE1BQU0sU0FBUyxJQUFJLFVBQVU7QUFBQSxFQUN2RDs7O0FLdDhDQTtBQUFBO0FBQUEsZ0NBQUFnQjtBQUFBLElBQUEsNkJBQUFDO0FBQUEsSUFBQSxnQ0FBQUM7QUFBQSxJQUFBLDJCQUFBQztBQUFBO0FBcUJBLE1BQU1DLE9BQU0sVUFBVSxZQUFZO0FBR2xDLFdBQVNDLHFCQUFvQixNQUFNO0FBQ2pDLFVBQU0sV0FBVztBQUFBLE1BQ2Y7QUFBQSxNQUFTO0FBQUEsTUFBZ0I7QUFBQSxNQUN6QjtBQUFBLE1BQTJCO0FBQUEsTUFDM0I7QUFBQSxNQUFzQjtBQUFBLE1BQW1CO0FBQUEsTUFBYztBQUFBLE1BQ3ZEO0FBQUEsTUFBMEI7QUFBQSxNQUFnQjtBQUFBLE1BQzFDO0FBQUEsTUFBd0I7QUFBQSxNQUN4QjtBQUFBLE1BQXlCO0FBQUEsTUFDekI7QUFBQSxNQUFnQjtBQUFBLE1BQXVCO0FBQUEsSUFDekM7QUFDQSxVQUFNLFVBQVUsU0FBUyxPQUFPLENBQUFDLE9BQUssRUFBRUEsTUFBSyxLQUFLO0FBQ2pELFFBQUksUUFBUSxRQUFRO0FBQ2xCLE1BQUFGLEtBQUksS0FBSyx5Q0FBeUMsU0FBUyxJQUFJO0FBQUEsSUFDakU7QUFDQSxRQUFJLDZCQUE2QixRQUFRLENBQUMsTUFBTSxRQUFRLEtBQUssdUJBQXVCLEdBQUc7QUFDckYsTUFBQUEsS0FBSSxLQUFLLHFFQUFxRSxLQUFLLHVCQUF1QjtBQUFBLElBQzVHO0FBQ0EsUUFBSSx3QkFBd0IsUUFBUSxDQUFDLE1BQU0sUUFBUSxLQUFLLGtCQUFrQixHQUFHO0FBQzNFLE1BQUFBLEtBQUksS0FBSyxnRUFBZ0UsS0FBSyxrQkFBa0I7QUFBQSxJQUNsRztBQUNBLFdBQU87QUFBQSxFQUNUO0FBR0EsV0FBU0csMEJBQXlCLE1BQU07QUFDdEMsUUFBSSxDQUFDLE1BQU0sUUFBUSxLQUFLLFFBQVEsR0FBRztBQUNqQyxNQUFBSCxLQUFJLEtBQUssMkRBQTJELElBQUk7QUFBQSxJQUMxRSxPQUFPO0FBQ0wsWUFBTSxlQUFlLENBQUMsUUFBUSxpQkFBaUIsYUFBYSxTQUFTLFdBQVcsZ0JBQWdCLG9CQUFvQjtBQUNwSCxXQUFLLFNBQVMsUUFBUSxDQUFDLEdBQUcsTUFBTTtBQUM5QixjQUFNLFVBQVUsYUFBYSxPQUFPLENBQUFFLE9BQUssRUFBRUEsTUFBSyxFQUFFO0FBQ2xELFlBQUksUUFBUSxPQUFRLENBQUFGLEtBQUksS0FBSyx1Q0FBdUMsQ0FBQyxxQkFBcUIsU0FBUyxDQUFDO0FBQUEsTUFDdEcsQ0FBQztBQUFBLElBQ0g7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUdBLFdBQVNJLHVCQUFzQixNQUFNO0FBQ25DLFVBQU0sV0FBVyxDQUFDLE1BQU0sWUFBWSx1QkFBdUIsT0FBTztBQUNsRSxVQUFNLFVBQVUsU0FBUyxPQUFPLENBQUFGLE9BQUssRUFBRUEsTUFBSyxLQUFLO0FBQ2pELFFBQUksUUFBUSxPQUFRLENBQUFGLEtBQUksS0FBSywyQ0FBMkMsU0FBUyxJQUFJO0FBQ3JGLFFBQUksY0FBYyxRQUFRLENBQUMsTUFBTSxRQUFRLEtBQUssUUFBUSxHQUFHO0FBQ3ZELE1BQUFBLEtBQUksS0FBSyx3REFBd0QsS0FBSyxRQUFRO0FBQUEsSUFDaEY7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUdBLFdBQVNLLHNCQUFxQixNQUFNO0FBQ2xDLFFBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxLQUFLLE9BQU87QUFDM0IsTUFBQUwsS0FBSSxLQUFLLDZEQUE2RCxJQUFJO0FBQUEsSUFDNUU7QUFDQSxXQUFPO0FBQUEsRUFDVDs7O0FDOUVBO0FBQUE7QUFBQSw4Q0FBQU07QUFBQSxJQUFBLGdDQUFBQztBQUFBLElBQUEsK0JBQUFDO0FBQUEsSUFBQSxvQ0FBQUM7QUFBQSxJQUFBLDBCQUFBQztBQUFBLElBQUEsOEJBQUFDO0FBQUEsSUFBQSxtQ0FBQUM7QUFBQSxJQUFBLDBCQUFBQztBQUFBLElBQUEseUJBQUFDO0FBQUEsSUFBQSw4QkFBQUM7QUFBQTtBQWlCQSxNQUFNQyxPQUFNLFVBQVUsd0JBQXdCO0FBTzlDLFdBQVMsWUFBWSxPQUFPLE1BQU07QUFDaEMsUUFBSSxDQUFDLE1BQU0sUUFBUSxLQUFLLDBCQUEwQixHQUFHO0FBQ25ELE1BQUFBLEtBQUksS0FBSyxxRkFBcUYsS0FBSztBQUNuRyxhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8sS0FBSywyQkFBMkIsS0FBSyxPQUFLLEVBQUUsT0FBTyxTQUFTLEVBQUUsa0JBQWtCLEtBQUssS0FBSztBQUFBLEVBQ25HO0FBR0EsV0FBUyxjQUFjLE9BQU8sTUFBTTtBQUNsQyxRQUFJLENBQUMsTUFBTSxRQUFRLEtBQUsscUJBQXFCLEdBQUc7QUFDOUMsTUFBQUEsS0FBSSxLQUFLLGdGQUFnRixLQUFLO0FBQzlGLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTyxLQUFLLHNCQUFzQixLQUFLLE9BQUssRUFBRSxVQUFVLFNBQVMsRUFBRSxTQUFTLEtBQUssS0FBSztBQUFBLEVBQ3hGO0FBR0EsV0FBUyxpQkFBaUIsTUFBTTtBQUM5QixVQUFNLEtBQUssUUFBUSxJQUFJLFlBQVk7QUFDbkMsUUFBSSxFQUFFLFNBQVMsV0FBVyxFQUFHLFFBQU8sRUFBRSxPQUFPLGFBQWEsTUFBTSx1QkFBdUI7QUFDdkYsUUFBSSxFQUFFLFNBQVMsVUFBVSxFQUFJLFFBQU8sRUFBRSxPQUFPLFlBQWEsTUFBTSxzQkFBdUI7QUFDdkYsUUFBSSxFQUFFLFNBQVMsTUFBTSxFQUFRLFFBQU8sRUFBRSxPQUFPLFFBQWEsTUFBTSxrQkFBdUI7QUFDdkYsUUFBSSxFQUFFLFNBQVMsUUFBUSxFQUFNLFFBQU8sRUFBRSxPQUFPLFVBQWEsTUFBTSxvQkFBdUI7QUFDdkYsUUFBSSxFQUFFLFNBQVMsS0FBSyxFQUFTLFFBQU8sRUFBRSxPQUFPLE9BQWEsTUFBTSxpQkFBdUI7QUFDdkYsV0FBTztBQUFBLEVBQ1Q7QUFNQSxXQUFTQyw2QkFBNEIsT0FBTyxNQUFNO0FBQ2hELFVBQU0sTUFBTSxZQUFZLE9BQU8sSUFBSTtBQUNuQyxRQUFJLE9BQU8sSUFBSSxlQUFnQixRQUFPLElBQUk7QUFFMUMsUUFBSSxLQUFLLHVCQUEyQixLQUFLLG9CQUFvQixTQUFTLEtBQUssRUFBTyxRQUFPO0FBQ3pGLFFBQUksS0FBSywyQkFBMkIsS0FBSyx3QkFBd0IsU0FBUyxLQUFLLEVBQUcsUUFBTztBQUN6RixXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVNDLG9CQUFtQixPQUFPLE1BQU07QUFDdkMsVUFBTSxNQUFNLFlBQVksT0FBTyxJQUFJO0FBQ25DLFdBQVEsT0FBTyxpQkFBaUIsSUFBSSxVQUFVLEtBQU0sRUFBRSxPQUFPLFVBQVUsTUFBTSxvQkFBb0I7QUFBQSxFQUNuRztBQUVBLFdBQVNDLHdCQUF1QixPQUFPLE1BQU07QUFDM0MsVUFBTSxNQUFNLFlBQVksT0FBTyxJQUFJO0FBQ25DLFdBQVEsT0FBTyxJQUFJLGFBQWM7QUFBQSxFQUNuQztBQU1BLFdBQVNDLHdCQUF1QixPQUFPLE1BQU07QUFDM0MsVUFBTSxNQUFNLGNBQWMsT0FBTyxJQUFJO0FBQ3JDLFFBQUksT0FBTyxJQUFJLGVBQWdCLFFBQU8sSUFBSTtBQUMxQyxRQUFJLEtBQUssc0JBQXNCLEtBQUssbUJBQW1CLFNBQVMsS0FBSyxFQUFHLFFBQU87QUFDL0UsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTQyxvQkFBbUIsT0FBTyxNQUFNO0FBQ3ZDLFVBQU0sTUFBTSxjQUFjLE9BQU8sSUFBSTtBQUNyQyxRQUFJLEtBQUs7QUFDUCxZQUFNLFNBQVMsaUJBQWlCLElBQUksVUFBVTtBQUM5QyxVQUFJLE9BQVEsUUFBTztBQUFBLElBQ3JCO0FBQ0EsUUFBSSxLQUFLLHNCQUFzQixLQUFLLG1CQUFtQixTQUFTLEtBQUssR0FBRztBQUN0RSxhQUFPLEVBQUUsT0FBTyxVQUFVLE1BQU0sb0JBQW9CO0FBQUEsSUFDdEQ7QUFDQSxXQUFPLEVBQUUsT0FBTyxPQUFPLE1BQU0saUJBQWlCO0FBQUEsRUFDaEQ7QUFFQSxXQUFTQyxtQkFBa0IsT0FBTyxNQUFNO0FBQ3RDLFVBQU0sTUFBTSxjQUFjLE9BQU8sSUFBSTtBQUNyQyxRQUFJLE9BQU8sSUFBSSxVQUFXLFFBQU8sSUFBSTtBQUNyQyxRQUFJLEtBQUssc0JBQXNCLEtBQUssbUJBQW1CLFNBQVMsS0FBSyxHQUFHO0FBQ3RFLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFNQSxXQUFTQyw4QkFBNkIsT0FBTyxNQUFNO0FBQ2pELFFBQUksS0FBSywrQkFBK0IsTUFBTSxRQUFRLEtBQUssMkJBQTJCLEdBQUc7QUFDdkYsWUFBTSxNQUFNLEtBQUssNEJBQTRCLEtBQUssT0FBSyxFQUFFLE9BQU8sS0FBSztBQUNyRSxVQUFJLE9BQU8sSUFBSSxlQUFnQixRQUFPLElBQUk7QUFBQSxJQUM1QztBQUNBLFFBQUksS0FBSyw0QkFBNEIsS0FBSyx5QkFBeUIsU0FBUyxLQUFLLEdBQUc7QUFDbEYsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVNDLDBCQUF5QixPQUFPLE1BQU0sZUFBZTtBQUM1RCxRQUFJLEtBQUssK0JBQStCLE1BQU0sUUFBUSxLQUFLLDJCQUEyQixHQUFHO0FBQ3ZGLFlBQU0sTUFBTSxLQUFLLDRCQUE0QixLQUFLLE9BQUssRUFBRSxPQUFPLEtBQUs7QUFDckUsVUFBSSxPQUFPLElBQUksWUFBWTtBQUN6QixjQUFNLE9BQU8sSUFBSSxXQUFXLFlBQVk7QUFDeEMsWUFBSSxLQUFLLFNBQVMsV0FBVyxFQUFHLFFBQU8sRUFBRSxPQUFPLGFBQWEsTUFBTSxZQUFZO0FBQy9FLFlBQUksS0FBSyxTQUFTLE1BQU0sRUFBUSxRQUFPLEVBQUUsT0FBTyxRQUFhLE1BQU0sT0FBWTtBQUMvRSxZQUFJLEtBQUssU0FBUyxRQUFRLEVBQU0sUUFBTyxFQUFFLE9BQU8sVUFBYSxNQUFNLFNBQVk7QUFDL0UsWUFBSSxLQUFLLFNBQVMsVUFBVSxFQUFJLFFBQU8sRUFBRSxPQUFPLFlBQWEsTUFBTSxXQUFZO0FBQy9FLFlBQUksS0FBSyxTQUFTLEtBQUssRUFBUyxRQUFPLEVBQUUsT0FBTyxPQUFhLE1BQU0sTUFBWTtBQUFBLE1BQ2pGO0FBQUEsSUFDRjtBQUNBLFVBQU0sTUFBTSxpQkFBaUI7QUFDN0IsUUFBSSxPQUFPLEVBQUcsUUFBTyxFQUFFLE9BQU8sYUFBYSxNQUFNLFlBQVk7QUFDN0QsUUFBSSxPQUFPLEVBQUcsUUFBTyxFQUFFLE9BQU8sUUFBYSxNQUFNLE9BQVk7QUFDN0QsUUFBSSxPQUFPLEVBQUcsUUFBTyxFQUFFLE9BQU8sVUFBYSxNQUFNLFNBQVk7QUFDN0QsUUFBSSxPQUFPLEVBQUcsUUFBTyxFQUFFLE9BQU8sT0FBYSxNQUFNLE1BQVk7QUFDN0QsV0FBTyxFQUFFLE9BQU8sWUFBWSxNQUFNLFdBQVc7QUFBQSxFQUMvQztBQUVBLFdBQVNDLHlCQUF3QixPQUFPLE1BQU0sS0FBSztBQUNqRCxRQUFJLEtBQUssK0JBQStCLE1BQU0sUUFBUSxLQUFLLDJCQUEyQixHQUFHO0FBQ3ZGLFlBQU0sTUFBTSxLQUFLLDRCQUE0QixLQUFLLE9BQUssRUFBRSxPQUFPLEtBQUs7QUFDckUsVUFBSSxPQUFPLElBQUksVUFBVyxRQUFPLElBQUk7QUFBQSxJQUN2QztBQUNBLFVBQU0sZUFBZSxJQUFJLGdCQUFnQixDQUFDLEdBQUcsS0FBSyxJQUFJO0FBQ3RELFFBQUksS0FBSyw0QkFBNEIsS0FBSyx5QkFBeUIsU0FBUyxLQUFLLEdBQUc7QUFDbEYsYUFBTyxjQUNILDRDQUE0QyxXQUFXLE1BQ3ZEO0FBQUEsSUFDTjtBQUNBLFdBQU8sY0FDSCxpQkFBaUIsV0FBVyxrREFDNUI7QUFBQSxFQUNOO0FBTUEsV0FBU0Msb0NBQW1DLE1BQU07QUFDaEQsVUFBTSxZQUFZLENBQUM7QUFFbkIsUUFBSSxLQUFLLFlBQVk7QUFDbkIsZ0JBQVUsS0FBSztBQUFBLFFBQ2IsVUFBVSw4QkFBOEIsS0FBSyxVQUFVO0FBQUEsUUFDdkQsTUFBTTtBQUFBLFFBQ04sU0FBUyxDQUFDLHlCQUF5Qiw4QkFBOEIsa0NBQWtDO0FBQUEsTUFDckcsQ0FBQztBQUFBLElBQ0g7QUFFQSxRQUFJLEtBQUssbUJBQW1CLEtBQUssZ0JBQWdCLEtBQUssV0FDbEQsTUFBTSxZQUFZLEVBQUUsU0FBUyxZQUFZLEtBQ3pDLE1BQU0sWUFBWSxFQUFFLFNBQVMsWUFBWSxLQUN6QyxNQUFNLFlBQVksRUFBRSxTQUFTLE1BQU0sQ0FBQyxHQUFHO0FBQ3pDLGdCQUFVLEtBQUs7QUFBQSxRQUNiLFVBQVU7QUFBQSxRQUNWLE1BQU07QUFBQSxRQUNOLFNBQVMsQ0FBQyx3QkFBd0Isc0JBQXNCLHNCQUFzQjtBQUFBLE1BQ2hGLENBQUM7QUFBQSxJQUNIO0FBRUEsUUFBSSxLQUFLLFFBQVE7QUFDZixnQkFBVSxLQUFLO0FBQUEsUUFDYixVQUFVLGtCQUFrQixLQUFLLE1BQU07QUFBQSxRQUN2QyxNQUFNO0FBQUEsUUFDTixTQUFTLENBQUMsMENBQTBDLGdDQUFnQyw2QkFBNkI7QUFBQSxNQUNuSCxDQUFDO0FBQUEsSUFDSDtBQUVBLFFBQUksS0FBSyxTQUFTO0FBQ2hCLGdCQUFVLEtBQUs7QUFBQSxRQUNiLFVBQVUsT0FBTyxLQUFLLE9BQU87QUFBQSxRQUM3QixNQUFNO0FBQUEsUUFDTixTQUFTLENBQUMsOEJBQThCLGdDQUFnQyx3QkFBd0IsOENBQThDO0FBQUEsTUFDaEosQ0FBQztBQUFBLElBQ0g7QUFFQSxXQUFPO0FBQUEsRUFDVDs7O0FDek1BO0FBQUE7QUFBQSwyQkFBQUM7QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBLDBCQUFBQztBQUFBLElBQUEsd0JBQUFDO0FBQUEsSUFBQSxpQkFBQUM7QUFBQSxJQUFBLDJCQUFBQztBQUFBO0FBcUJBLFdBQVMsY0FBYyxJQUFJLFNBQVM7QUFDbEMsT0FBRyxjQUFjO0FBQ2pCLFVBQU0sUUFBUSxPQUFPLFdBQVcsRUFBRSxFQUFFLE1BQU0sSUFBSTtBQUM5QyxVQUFNLFFBQVEsQ0FBQyxNQUFNLE1BQU07QUFDekIsU0FBRyxZQUFZLFNBQVMsZUFBZSxJQUFJLENBQUM7QUFDNUMsVUFBSSxJQUFJLE1BQU0sU0FBUyxFQUFHLElBQUcsWUFBWSxTQUFTLGNBQWMsSUFBSSxDQUFDO0FBQUEsSUFDdkUsQ0FBQztBQUFBLEVBQ0g7QUFFQSxXQUFTQyxnQkFBZSxPQUFPLFNBQVM7QUFDdEMsYUFBUyxlQUFlLG1CQUFtQixFQUFFLGNBQWM7QUFDM0Qsa0JBQWMsU0FBUyxlQUFlLHFCQUFxQixHQUFHLE9BQU87QUFDckUsYUFBUyxlQUFlLHFCQUFxQixFQUFFLE1BQU0sVUFBVTtBQU8vRCxRQUFJLE9BQU8sbUJBQW1CLFdBQVksZ0JBQWUsU0FBUyxhQUFhO0FBQy9FLFFBQUksT0FBTyxvQkFBb0IsV0FBWSxpQkFBZ0IscUJBQXFCO0FBQ2hGLFFBQUksT0FBTyxjQUFjLFdBQVksV0FBVSxxQkFBcUI7QUFBQSxFQUN0RTtBQUVBLFdBQVNDLG1CQUFrQjtBQUN6QixhQUFTLGVBQWUscUJBQXFCLEVBQUUsTUFBTSxVQUFVO0FBQy9ELFFBQUksT0FBTyxpQkFBaUIsV0FBWSxjQUFhO0FBQUEsRUFDdkQ7QUFNQSxNQUFJLGtCQUFrQjtBQUN0QixNQUFJLHdCQUF3QjtBQUU1QixXQUFTQyxrQkFBaUIsT0FBTyxTQUFTLFVBQVUsTUFBTTtBQUN4RCw0QkFBd0IsU0FBUztBQUNqQyxhQUFTLGVBQWUscUJBQXFCLEVBQUUsY0FBYztBQUM3RCxrQkFBYyxTQUFTLGVBQWUsdUJBQXVCLEdBQUcsT0FBTztBQUN2RSxVQUFNLFFBQVEsU0FBUyxlQUFlLGtCQUFrQjtBQUN4RCxRQUFJLE1BQU8sT0FBTSxjQUFjO0FBQy9CLGFBQVMsZUFBZSx1QkFBdUIsRUFBRSxNQUFNLFVBQVU7QUFDakUsUUFBSSxNQUFPLE9BQU0sTUFBTTtBQUN2QixRQUFJLE9BQU8sY0FBYyxXQUFZLFdBQVUsdUJBQXVCO0FBQ3RFLFdBQU8sSUFBSSxRQUFRLGFBQVc7QUFBRSx3QkFBa0I7QUFBQSxJQUFTLENBQUM7QUFBQSxFQUM5RDtBQUVBLFdBQVMsa0JBQWtCLFFBQVE7QUFDakMsYUFBUyxlQUFlLHVCQUF1QixFQUFFLE1BQU0sVUFBVTtBQUNqRSxRQUFJLE9BQU8saUJBQWlCLFdBQVksY0FBYTtBQUNyRCxRQUFJLGlCQUFpQjtBQUFFLHNCQUFnQixNQUFNO0FBQUcsd0JBQWtCO0FBQUEsSUFBTTtBQUN4RSxRQUFJLHlCQUF5QixPQUFPLHNCQUFzQixVQUFVLFlBQVk7QUFDOUUsNEJBQXNCLE1BQU07QUFBQSxJQUM5QjtBQUNBLDRCQUF3QjtBQUFBLEVBQzFCO0FBTUEsV0FBU0MsV0FBVSxTQUFTLE9BQU8sV0FBVyxXQUFXLEtBQU07QUFDN0QsVUFBTSxZQUFZLFNBQVMsZUFBZSxpQkFBaUI7QUFDM0QsUUFBSSxDQUFDLFVBQVc7QUFDaEIsVUFBTSxRQUFRLFNBQVMsY0FBYyxLQUFLO0FBQzFDLFVBQU0sWUFBWSxlQUFlLElBQUk7QUFDckMsVUFBTSxjQUFjO0FBQ3BCLGNBQVUsWUFBWSxLQUFLO0FBQzNCLDBCQUFzQixNQUFNO0FBQUUsNEJBQXNCLE1BQU07QUFBRSxjQUFNLFVBQVUsSUFBSSxZQUFZO0FBQUEsTUFBRyxDQUFDO0FBQUEsSUFBRyxDQUFDO0FBQ3BHLGVBQVcsTUFBTTtBQUNmLFlBQU0sVUFBVSxPQUFPLFlBQVk7QUFDbkMsWUFBTSxpQkFBaUIsaUJBQWlCLE1BQU0sTUFBTSxPQUFPLEdBQUcsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUFBLElBQzlFLEdBQUcsUUFBUTtBQUFBLEVBQ2I7QUFFQSxXQUFTLHdCQUF3QjtBQUMvQixVQUFNLGFBQWEsU0FBUyxlQUFlLHVCQUF1QjtBQUNsRSxVQUFNLFlBQVksU0FBUyxlQUFlLFlBQVk7QUFDdEQsVUFBTSxZQUFZQyxjQUFhLG1CQUFtQjtBQUNsRCxVQUFNQyxtQkFBa0JELGNBQWEsbUJBQW1CO0FBRXhELFFBQUksWUFBWTtBQUNkLGlCQUFXLE1BQU0sVUFBVSxVQUFVLFdBQVcsS0FBSztBQUNyRCxpQkFBVyxZQUFZLHlCQUF5QixVQUFVLElBQUk7QUFDOUQsaUJBQVcsYUFBYSxjQUFjLFVBQVUsYUFBYSxFQUFFO0FBQy9ELGlCQUFXLFlBQVksVUFBVSxXQUM3QiwwREFBMEQsVUFBVSxhQUFhLFdBQU8sVUFBVSxVQUFVLE1BQU0sUUFBSSwrQ0FBK0MsVUFBVSxLQUFLLFlBQ3BMO0FBQUEsSUFDTjtBQUVBLFFBQUksV0FBVztBQUNiLFVBQUksVUFBVSxTQUFTO0FBQ3JCLGtCQUFVLGNBQWM7QUFDeEIsa0JBQVUsUUFBUTtBQUFBLE1BQ3BCLFdBQVdDLGlCQUFnQixtQkFBbUJBLGlCQUFnQixVQUFVLGFBQWE7QUFDbkYsa0JBQVUsY0FBYztBQUN4QixrQkFBVSxRQUFRO0FBQUEsTUFDcEIsT0FBTztBQUNMLGtCQUFVLGNBQWM7QUFDeEIsa0JBQVUsUUFBUTtBQUFBLE1BQ3BCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGlDQUFpQztBQUN4QyxRQUFJLE9BQU8seUJBQXlCLFdBQVksc0JBQXFCLFFBQVE7QUFDN0UsUUFBSSxPQUFPQyx5QkFBd0IsV0FBWSxDQUFBQSxxQkFBb0IsUUFBUTtBQUMzRSxRQUFJLE9BQU8sY0FBYyxXQUFZLFdBQVUsUUFBUTtBQUFBLEVBQ3pEO0FBT0EsTUFBTSxpQkFBaUI7QUFBQSxJQUNyQjtBQUFBLElBQWU7QUFBQSxJQUFpQjtBQUFBLElBQ2hDO0FBQUEsSUFBZTtBQUFBLElBQWE7QUFBQSxJQUM1QjtBQUFBLElBQWM7QUFBQSxJQUE4QjtBQUFBLEVBQzlDO0FBR0EsTUFBTSxvQkFBb0I7QUFBQSxJQUN4QixLQUFnQjtBQUFBLElBQ2hCLFVBQWdCO0FBQUEsSUFDaEIsZ0JBQWdCO0FBQUEsSUFDaEIsU0FBZ0I7QUFBQSxJQUNoQixPQUFnQjtBQUFBLElBQ2hCLFVBQWdCO0FBQUEsSUFDaEIsUUFBZ0I7QUFBQSxJQUNoQixnQkFBZ0I7QUFBQSxJQUNoQixVQUFnQjtBQUFBLEVBQ2xCO0FBTUEsV0FBU0EscUJBQW9CLE9BQU87QUFDbEMsVUFBTSxXQUFXLGtCQUFrQixLQUFLLEtBQUs7QUFDN0MsbUJBQWUsUUFBUSxRQUFNO0FBQzNCLFlBQU0sS0FBSyxTQUFTLGVBQWUsRUFBRTtBQUNyQyxVQUFJLEdBQUksSUFBRyxNQUFNLFVBQVcsT0FBTyxXQUFZLEtBQUs7QUFBQSxJQUN0RCxDQUFDO0FBQ0QsMEJBQXNCO0FBQUEsRUFDeEI7QUFFQSxNQUFJLE9BQU8sV0FBVyxhQUFhO0FBQ2pDLFdBQU8saUJBQWlCLHdCQUF3QixxQkFBcUI7QUFBQSxFQUN2RTs7O0FDM0tBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTZCTyxXQUFTLElBQUksS0FBSztBQUN2QixXQUFPLE9BQU8sT0FBTyxFQUFFLEVBQ3BCLFFBQVEsTUFBTSxPQUFPLEVBQ3JCLFFBQVEsTUFBTSxNQUFNLEVBQ3BCLFFBQVEsTUFBTSxNQUFNLEVBQ3BCLFFBQVEsTUFBTSxRQUFRO0FBQUEsRUFDM0I7QUEwQk8sV0FBUyxrQkFBa0IsTUFBTSxPQUFPLENBQUMsR0FBRztBQUNqRCxVQUFNO0FBQUEsTUFDSixXQUFXO0FBQUEsTUFDWCxtQkFBbUI7QUFBQSxNQUNuQixrQkFBa0I7QUFBQSxJQUNwQixJQUFJO0FBRUosVUFBTSxVQUFVLEtBQUssVUFBVSxhQUFhO0FBQzVDLFVBQU0sUUFBUSxHQUFHLFFBQVEsUUFBUSxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQzdDLFVBQU0sV0FBVyxHQUFHLFFBQVEsV0FBVyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ25ELFVBQU0sYUFBYSxHQUFHLFFBQVEsUUFBUSxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ2xELFVBQU0sWUFBWSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsR0FBRyxlQUFlLEVBQUU7QUFFN0QsVUFBTSxZQUFZLFFBQVEsS0FBSyxVQUFVO0FBQ3pDLFVBQU0sZUFBZSxZQUNqQixnREFBZ0QsSUFBSSxLQUFLLEVBQUUsQ0FBQywwQ0FBMEMsUUFBUSxrTEFDOUc7QUFDSixVQUFNLGNBQWMsWUFDaEIsWUFBWSxRQUFRLGlOQUFpTixJQUFJLEtBQUssVUFBVSxDQUFDLFdBQ3pQO0FBRUosV0FBTztBQUFBLGNBQ0ssS0FBSztBQUFBO0FBQUEscUNBRWtCLFVBQVUsVUFBVSxnQkFBZ0IsS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDLElBQUksT0FBTztBQUFBLHdCQUM3RSxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBT2pCLElBQUksS0FBSyxhQUFhLEVBQUUsQ0FBQyxHQUFHLEtBQUssbUJBQW1CLEVBQUU7QUFBQTtBQUFBLHlGQUVtQixJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7QUFBQSxjQUNoRyxLQUFLLFlBQVksRUFBRTtBQUFBLGNBQ25CLEtBQUssV0FBVztBQUFBO0FBQUE7QUFBQSxpTUFHbUssSUFBSSxLQUFLLFFBQVEsQ0FBQztBQUFBLHNCQUM3TCxFQUFFO0FBQUEsY0FDVixLQUFLLFdBQVc7QUFBQTtBQUFBO0FBQUEsNk1BRytLLElBQUksS0FBSyxRQUFRLENBQUM7QUFBQSxzQkFDek0sRUFBRTtBQUFBLGNBQ1YsV0FBVztBQUFBO0FBQUE7QUFBQSxjQUdYLEtBQUssY0FBYyxFQUFFO0FBQUEsY0FDckIsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLMUI7QUFRTyxXQUFTLDJCQUEyQixhQUFhLFVBQVUsV0FBVyxDQUFDLEdBQUc7QUFDL0UsUUFBSSxDQUFDLFlBQWE7QUFDbEIsVUFBTSxXQUFXLDZCQUE2QixRQUFRO0FBQ3RELFFBQUksWUFBWSxRQUFRLFFBQVEsRUFBRztBQUNuQyxnQkFBWSxRQUFRLFFBQVEsSUFBSTtBQUVoQyxnQkFBWSxpQkFBaUIsU0FBUyxDQUFDQyxXQUFVO0FBQy9DLFlBQU0sU0FBU0EsT0FBTSxPQUFPLFFBQVEseUJBQXlCO0FBQzdELFVBQUksQ0FBQyxPQUFRO0FBQ2IsWUFBTSxLQUFLLE9BQU8sUUFBUTtBQUMxQixZQUFNLFdBQVcsU0FBUyxlQUFlLEdBQUcsUUFBUSxXQUFXLEVBQUUsRUFBRTtBQUNuRSxVQUFJLFVBQVU7QUFDWixjQUFNLGFBQWEsU0FBUyxNQUFNLFlBQVk7QUFDOUMsaUJBQVMsTUFBTSxVQUFVLGFBQWEsVUFBVTtBQUNoRCxlQUFPLGFBQWEsaUJBQWlCLE9BQU8sVUFBVSxDQUFDO0FBQUEsTUFDekQ7QUFDQSxVQUFJLE9BQU8sU0FBUyxzQkFBc0IsV0FBWSxVQUFTLGtCQUFrQixFQUFFO0FBQUEsSUFDckYsQ0FBQztBQUFBLEVBQ0g7OztBQzlJQTtBQUFBO0FBQUEsaUNBQUFDO0FBQUEsSUFBQTtBQUFBO0FBeUJBLE1BQU1DLFFBQU0sVUFBVSxTQUFTO0FBSS9CLE1BQUksZ0JBQWdCO0FBR3BCLFdBQVMsb0JBQW9CO0FBQzNCLG9CQUFnQjtBQUFBLEVBQ2xCO0FBTUEsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxzQkFBc0I7QUFNNUIsV0FBUyxnQkFBZ0JDLE9BQU07QUFDN0IsVUFBTSxVQUFVQyxZQUFXRCxLQUFJO0FBQy9CLFVBQU0sUUFBVUEsTUFBSyxNQUFNLElBQUk7QUFFL0IsUUFBSSxNQUFNLFVBQVUsdUJBQXVCQSxNQUFLLFVBQVUscUJBQXFCO0FBQzdFLGFBQU8sNkJBQTZCLE9BQU87QUFBQSxJQUM3QztBQUVBLFVBQU0sY0FBYyxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsRUFBRSxLQUFLLElBQUk7QUFDakUsVUFBTSxXQUFjLE1BQU0sU0FBUztBQUNuQyxVQUFNLEtBQWMsVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbEYsVUFBTSxRQUFjLFFBQVEsUUFBUSxhQUFhLGFBQWEsSUFBSSxLQUFLLEdBQUc7QUFFMUUsV0FBTztBQUFBLGdEQUN1QyxFQUFFLGFBQWFDLFlBQVcsV0FBVyxDQUFDO0FBQUEsZ0RBQ3RDLEVBQUUsK0JBQStCLE9BQU87QUFBQTtBQUFBO0FBQUEseUNBRy9DLEVBQUU7QUFBQSx5Q0FDRixFQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUEseUVBSThCLEtBQUs7QUFBQTtBQUFBLGtCQUU1RCxLQUFLO0FBQUEsRUFDdkI7QUFNQSxXQUFTLG1CQUFtQixJQUFJO0FBQzlCLFVBQU0sZUFBZSxTQUFTLGVBQWUsY0FBYztBQUMzRCxRQUFJLENBQUMsYUFBYztBQUVuQixVQUFNLEtBQUssR0FBRyxZQUNWLElBQUksS0FBSyxHQUFHLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxXQUFXLFFBQVEsV0FBVyxRQUFRLFVBQVUsQ0FBQyxJQUN2RztBQUVKLFVBQU0sT0FBVyxNQUFNLFFBQVEsR0FBRyxRQUFRLElBQUksR0FBRyxXQUFXLENBQUM7QUFDN0QsVUFBTSxXQUFXLEtBQUs7QUFHdEIsVUFBTSxhQUFhLEtBQ2hCLElBQUksQ0FBQUMsT0FBSyxLQUFLQSxHQUFFLFFBQVEsV0FBVyxZQUFZLENBQUM7QUFBQSxFQUFNQSxHQUFFLFdBQVcsRUFBRSxFQUFFLEVBQ3ZFLEtBQUssc0VBQW9CO0FBRTVCLFVBQU0sZUFBZSxPQUFPLEdBQUcsYUFBYSxXQUFXLEdBQUcsV0FBVztBQUVyRSxVQUFNQyxRQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUNBSW9CLFFBQVEsV0FBVyxhQUFhLElBQUksS0FBSyxHQUFHO0FBQUEsUUFDdkUsS0FBSyw0QkFBNEJGLFlBQVcsRUFBRSxDQUFDLFlBQVksRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSTdELGdCQUFnQixVQUFVLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUkzQixnQkFBZ0IsWUFBWSxDQUFDO0FBQUE7QUFHbkMsVUFBTSxVQUFVLFNBQVMsY0FBYyxLQUFLO0FBQzVDLFlBQVEsWUFBWTtBQUNwQixVQUFNLFVBQVUsU0FBUyxjQUFjLEtBQUs7QUFDNUMsWUFBUSxZQUFZO0FBQ3BCLFlBQVEsWUFBWUU7QUFDcEIsWUFBUSxZQUFZLE9BQU87QUFDM0IsaUJBQWEsWUFBWSxPQUFPO0FBQ2hDLGlCQUFhLFlBQVksYUFBYTtBQUFBLEVBQ3hDO0FBV0EsaUJBQWVDLHlCQUF3QjtBQUNyQyxVQUFNQyxhQUFZQyxxQkFBb0I7QUFDdEMsUUFBSSxDQUFDRCxXQUFXO0FBRWhCLFFBQUk7QUFDRixZQUFNLE1BQU0sTUFBTTtBQUFBLFFBQ2hCLDJCQUEyQixtQkFBbUJBLFVBQVMsQ0FBQyxVQUFVLGFBQWE7QUFBQSxNQUNqRjtBQUNBLFVBQUksQ0FBQyxJQUFJLElBQUk7QUFDWCxRQUFBTixNQUFJLEtBQUssd0JBQXdCLElBQUksTUFBTTtBQUMzQztBQUFBLE1BQ0Y7QUFDQSxZQUFNLE9BQWUsTUFBTSxJQUFJLEtBQUs7QUFDcEMsWUFBTSxlQUFlLE1BQU0sUUFBUSxLQUFLLFlBQVksSUFBSSxLQUFLLGVBQWUsQ0FBQztBQUU3RSxpQkFBVyxNQUFNLGNBQWM7QUFDN0IsMkJBQW1CLEVBQUU7QUFBQSxNQUN2QjtBQUdBLFVBQUksT0FBTyxLQUFLLFVBQVUsVUFBVTtBQUNsQyx3QkFBZ0IsS0FBSztBQUFBLE1BQ3ZCO0FBQUEsSUFDRixTQUFTLEtBQUs7QUFDWixNQUFBQSxNQUFJLE1BQU0sZ0NBQWdDLEdBQUc7QUFBQSxJQUMvQztBQUFBLEVBQ0Y7OztBQzlKQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDJCQUFBUTtBQUFBO0FBbUJBLE1BQUksaUJBQWlCO0FBRXJCLFdBQVMsb0JBQW9CLFVBQVU7QUFDckMsUUFBSSxDQUFDLFlBQVksT0FBTyxhQUFhLFNBQVUsUUFBTztBQUN0RCxVQUFNLFVBQVU7QUFBQSxNQUNkLFFBQVE7QUFBQSxNQUNSLGlCQUFpQjtBQUFBLE1BQ2pCLFNBQVM7QUFBQSxNQUNULFFBQVE7QUFBQSxNQUNSLGVBQWU7QUFBQSxJQUNqQjtBQUNBLFFBQUksUUFBUSxRQUFRLEVBQUcsUUFBTyxRQUFRLFFBQVE7QUFDOUMsV0FBTyxTQUNKLE1BQU0sU0FBUyxFQUNmLE9BQU8sT0FBTyxFQUNkLElBQUksVUFBUSxLQUFLLE9BQU8sQ0FBQyxFQUFFLFlBQVksSUFBSSxLQUFLLE1BQU0sQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUN0RSxLQUFLLEdBQUc7QUFBQSxFQUNiO0FBRUEsV0FBU0MsaUJBQWdCLFlBQVksV0FBVyxNQUFNO0FBQ3BELFVBQU0sY0FBYyxTQUFTLGVBQWUsb0JBQW9CO0FBQ2hFLFVBQU0sYUFBYyxTQUFTLGVBQWUsaUJBQWlCO0FBQzdELFVBQU0sY0FBYyxTQUFTLGVBQWUsa0JBQWtCO0FBRTlELFVBQU0sT0FBTyxTQUFTLGVBQWUsaUJBQWlCO0FBQ3RELFVBQU0sV0FBVyxTQUFTLGVBQWUsaUJBQWlCO0FBQzFELFVBQU0sWUFBWSxTQUFTLGVBQWUsa0JBQWtCO0FBRTVELFVBQU0sYUFBYSxDQUFDLE1BQU1DLE9BQU0sYUFBYTtBQUMzQyxVQUFJLGVBQWUsY0FBYyxhQUFhO0FBQzVDLG9CQUFZLFVBQVUsT0FBTyxpQkFBaUIsbUJBQW1CLFNBQVM7QUFDMUUsb0JBQVksVUFBVSxJQUFJLElBQUk7QUFDOUIsWUFBSSxTQUFTLGVBQWUsU0FBUyxhQUFjLGFBQVksVUFBVSxJQUFJLGVBQWU7QUFDNUYsWUFBSSxTQUFTLGFBQWMsYUFBWSxVQUFVLElBQUksU0FBUztBQUM5RCxZQUFJLFNBQVMsa0JBQWtCLFNBQVMsbUJBQW1CLFNBQVMsa0JBQWtCLFNBQVMsaUJBQWlCLFNBQVMsUUFBUyxhQUFZLFVBQVUsSUFBSSxpQkFBaUI7QUFDN0ssbUJBQVcsY0FBYztBQUN6QixvQkFBWSxjQUFjQTtBQUFBLE1BQzVCO0FBQ0EsVUFBSSxRQUFRLFlBQVksV0FBVztBQUNqQyxhQUFLLFVBQVUsT0FBTyxpQkFBaUIsbUJBQW1CLFdBQVcsZ0JBQWdCLGNBQWMsY0FBYyxhQUFhLGlCQUFpQixnQkFBZ0IsZUFBZSxPQUFPO0FBQ3JMLGFBQUssVUFBVSxJQUFJLElBQUk7QUFDdkIsWUFBSSxTQUFTLGVBQWUsU0FBUyxhQUFjLE1BQUssVUFBVSxJQUFJLGVBQWU7QUFDckYsWUFBSSxTQUFTLGFBQWMsTUFBSyxVQUFVLElBQUksU0FBUztBQUN2RCxZQUFJLFNBQVMsa0JBQWtCLFNBQVMsbUJBQW1CLFNBQVMsa0JBQWtCLFNBQVMsaUJBQWlCLFNBQVMsUUFBUyxNQUFLLFVBQVUsSUFBSSxpQkFBaUI7QUFDdEssaUJBQVMsY0FBYztBQUN2QixrQkFBVSxjQUFjQTtBQUN4QixjQUFNLGFBQWE7QUFBQSxVQUNqQixjQUFjO0FBQUEsVUFDZCxZQUFZO0FBQUEsVUFDWixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsVUFDWCxpQkFBaUI7QUFBQSxVQUNqQixnQkFBZ0I7QUFBQSxVQUNoQixhQUFhO0FBQUEsVUFDYixPQUFPO0FBQUEsUUFDVDtBQUNBLGNBQU0sTUFBTSxXQUFXLElBQUksS0FBSztBQUNoQyxhQUFLLFFBQVE7QUFDYixpQkFBUyxRQUFRO0FBQ2pCLGtCQUFVLFFBQVE7QUFBQSxNQUNwQjtBQUFBLElBQ0Y7QUFFQSxVQUFNLGlCQUFpQixZQUFZLE9BQU8sbUJBQW1CO0FBQzdELFVBQU0saUJBQWlCLG1CQUFtQjtBQUkxQyxVQUFNLFVBQVUsU0FBUyxlQUFlLDRCQUE0QjtBQUNwRSxRQUFJLFdBQVcsZ0JBQWdCO0FBQzdCLFlBQU0sT0FBT0MsaUJBQWdCLGNBQWM7QUFDM0MsY0FBUSxNQUFNLFVBQVcsUUFBUSxLQUFLLGlCQUFpQixPQUFRLEtBQUs7QUFBQSxJQUN0RTtBQUVBLFFBQUksa0JBQWtCLENBQUMsZ0JBQWdCO0FBQ3JDLGlCQUFXLGNBQWMsR0FBRyxvQkFBb0IsY0FBYyxDQUFDLGVBQWUsUUFBRztBQUNqRjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFdBQVcsZUFBZTtBQUM1QixpQkFBVyxhQUFhLGlCQUFpQixRQUFHO0FBQUEsSUFDOUMsV0FBVyxXQUFXLFNBQVM7QUFDN0IsaUJBQVcsY0FBYyw4QkFBeUIsUUFBRztBQUFBLElBQ3ZELE9BQU87QUFDTCxpQkFBVyxpQkFBaUIscUJBQXFCLFdBQUk7QUFBQSxJQUN2RDtBQUFBLEVBQ0Y7QUFFQSxXQUFTLHdCQUF3QjtBQUMvQixRQUFJLGdCQUFnQjtBQUFFLG9CQUFjLGNBQWM7QUFBRyx1QkFBaUI7QUFBQSxJQUFNO0FBQzVFLFFBQUksT0FBTyxvQkFBb0IsWUFBWTtBQUN6QyxzQkFBZ0I7QUFDaEI7QUFBQSxJQUNGO0FBQ0EsVUFBTSxnQkFBZ0IsU0FBUyxlQUFlLG9CQUFvQjtBQUNsRSxRQUFJLGNBQWUsZUFBYyxVQUFVLE9BQU8sU0FBUztBQUMzRCxRQUFJLE9BQU8saUJBQWlCLFdBQVksY0FBYTtBQUFBLEVBQ3ZEOzs7QUNwSEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLCtCQUFBQztBQUFBO0FBc0JBLE1BQUksc0JBQXNCO0FBRTFCLGlCQUFlLHFCQUFxQjtBQUNsQyxRQUFJLG9CQUFxQixRQUFPO0FBQ2hDLFFBQUk7QUFDRixZQUFNQyxhQUFZQyxlQUFjLGVBQWU7QUFDL0MsWUFBTSxNQUFNRCxhQUFZLCtCQUErQixtQkFBbUJBLFVBQVMsQ0FBQyxLQUFLO0FBQ3pGLFlBQU0sTUFBTSxNQUFNLE1BQU0sR0FBRztBQUMzQixVQUFJLENBQUMsSUFBSSxHQUFJLFFBQVEsc0JBQXNCLENBQUM7QUFDNUMsWUFBTSxNQUFNLE1BQU0sSUFBSSxLQUFLO0FBQzNCLFlBQU0sZUFBZSxDQUFDO0FBQ3RCLFlBQU0saUJBQWlCLENBQUM7QUFDeEIsYUFBTyxRQUFRLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLEtBQUssTUFBTTtBQUM5QyxxQkFBYSxNQUFNLFlBQVksQ0FBQyxJQUFJO0FBQ3BDLGNBQU0sS0FBSyxNQUFNLFlBQVk7QUFDN0IsU0FBQyxlQUFlLEVBQUUsSUFBSSxlQUFlLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLO0FBQUEsTUFDNUQsQ0FBQztBQUNELDRCQUFzQixFQUFFLGNBQWMsZUFBZTtBQUFBLElBQ3ZELFNBQVNFLElBQUc7QUFBRSw0QkFBc0IsQ0FBQztBQUFBLElBQUc7QUFDeEMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLGlCQUFpQixJQUFJLFFBQVE7QUFDcEMsUUFBSSxDQUFDLFVBQVcsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLE9BQU8sZUFBaUIsUUFBTztBQUN4RSxVQUFNLE1BQU0sTUFBTSxJQUFJLFlBQVk7QUFDbEMsUUFBSSxPQUFPLGdCQUFnQixPQUFPLGFBQWEsRUFBRSxFQUFHLFFBQU8sS0FBSyxPQUFPLGFBQWEsRUFBRSxDQUFDO0FBQ3ZGLFVBQU0sVUFBVSxPQUFPLGtCQUFrQixPQUFPLGVBQWUsRUFBRTtBQUNqRSxRQUFJLFdBQVcsUUFBUSxPQUFRLFFBQU8sU0FBUyxRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2pFLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBTSxhQUFhO0FBQUEsSUFDakIsQ0FBQyxRQUFRLG1CQUFtQjtBQUFBLElBQzVCLENBQUMsUUFBUSxrQkFBa0I7QUFBQSxJQUMzQixDQUFDLFNBQVMsdUJBQWtCO0FBQUEsRUFDOUI7QUFFQSxXQUFTLGVBQWUsU0FBUztBQUMvQixXQUFPLFNBQVMsV0FBVyxTQUFTLFFBQVEsWUFBWTtBQUFBLEVBQzFEO0FBRUEsV0FBUyxhQUFhLFNBQVM7QUFDN0IsV0FBTyxTQUFTLFFBQVE7QUFBQSxFQUMxQjtBQUVBLFdBQVMsY0FBYyxTQUFTO0FBQzlCLFdBQU8sZUFBZSxPQUFPLE1BQU0sYUFBYSxTQUFTLGVBQWU7QUFBQSxFQUMxRTtBQUVBLFdBQVMsZ0JBQWdCLFNBQVM7QUFDaEMsV0FBTyxlQUFlLE9BQU8sTUFBTSxhQUFhLFNBQVMsZUFBZTtBQUFBLEVBQzFFO0FBRUEsV0FBUyxrQkFBa0IsU0FBUztBQUNsQyxRQUFJLGVBQWUsT0FBTyxNQUFNLFVBQVcsUUFBTztBQUNsRCxRQUFJLGdCQUFnQixPQUFPLEVBQUcsUUFBTztBQUNyQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsb0JBQW9CLFNBQVM7QUFDcEMsUUFBSSxlQUFlLE9BQU8sTUFBTSxXQUFXO0FBQ3pDLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxnQkFBZ0IsT0FBTyxHQUFHO0FBQzVCLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLG9CQUFvQixPQUFPLFVBQVUsUUFBUTtBQUNwRCxRQUFJLFNBQVMsV0FBVyxFQUFHLFFBQU87QUFFbEMsVUFBTSxhQUFhLFNBQVMsT0FBTyxhQUFhLEVBQUU7QUFDbEQsVUFBTSxlQUFlLFNBQVMsT0FBTyxlQUFlLEVBQUU7QUFDdEQsVUFBTSxlQUFlLFNBQVMsT0FBTyxhQUFXLGVBQWUsT0FBTyxNQUFNLFNBQVMsRUFBRTtBQUN2RixVQUFNLFNBQVMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxVQUFVO0FBQ2pELFlBQU0sV0FBVyxrQkFBa0IsSUFBSSxJQUFJLGtCQUFrQixLQUFLO0FBQ2xFLFVBQUksYUFBYSxFQUFHLFFBQU87QUFDM0IsYUFBTyxPQUFPLEtBQUssV0FBVyxLQUFLLFFBQVEsRUFBRSxFQUFFLGNBQWMsT0FBTyxNQUFNLFdBQVcsTUFBTSxRQUFRLEVBQUUsQ0FBQztBQUFBLElBQ3hHLENBQUM7QUFFRCxXQUFPO0FBQUE7QUFBQSxpRUFFd0RDLFlBQVcsS0FBSyxDQUFDO0FBQUEsdUVBQ1gsVUFBVSxpQkFBWSxZQUFZLG1CQUFjLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQVV2SCxPQUFPLElBQUksYUFBVztBQUN0QixZQUFNLEtBQUssUUFBUSxXQUFXLFFBQVEsUUFBUTtBQUM5QyxZQUFNLFdBQVcsTUFBTSxRQUFRLFFBQVEsbUJBQW1CLEtBQUssUUFBUSxvQkFBb0IsU0FBUyxJQUNoRyxRQUFRLG9CQUFvQixLQUFLLElBQUksSUFDckM7QUFDSixZQUFNLFdBQVcsaUJBQWlCLElBQUksTUFBTTtBQUM1QyxZQUFNLFVBQVUsV0FDWix3RkFBd0ZBLFlBQVcsUUFBUSxDQUFDLFdBQzVHO0FBQ0osYUFBTztBQUFBO0FBQUE7QUFBQSxnRUFHNkNBLFlBQVcsRUFBRSxDQUFDO0FBQUEsMEZBQ1lBLFlBQVcsYUFBYSxPQUFPLENBQUMsQ0FBQztBQUFBLG9CQUN2RyxPQUFPO0FBQUE7QUFBQSwyQ0FFZ0Isb0JBQW9CLE9BQU8sQ0FBQztBQUFBLHlEQUNkQSxZQUFXLFFBQVEsQ0FBQztBQUFBO0FBQUEsSUFFbkUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJckI7QUFVQSxXQUFTLGtCQUFrQixHQUFHO0FBQzVCLFFBQUksRUFBRSxRQUFRLFNBQVUscUJBQW9CO0FBQUEsRUFDOUM7QUFFQSxpQkFBZSxxQkFBcUI7QUFDbEMsSUFBQUMsZ0JBQWUsU0FBUyxhQUFhO0FBQ3JDLFVBQU0sVUFBVSxTQUFTLGVBQWUsMEJBQTBCO0FBQ2xFLFlBQVEsTUFBTSxVQUFVO0FBQ3hCLGFBQVMsaUJBQWlCLFdBQVcsaUJBQWlCO0FBRXRELFVBQU0sV0FBVyxRQUFRLGNBQWMsMkJBQTJCO0FBQ2xFLFFBQUksU0FBVSxVQUFTLE1BQU07QUFDN0IsSUFBQUMsV0FBVSwwQkFBMEI7QUFDcEMsVUFBTSxPQUFPLFNBQVMsZUFBZSx1QkFBdUI7QUFNNUQsVUFBTSxTQUFTSixlQUFjLGNBQWM7QUFDM0MsUUFBSSxRQUFRO0FBQ1YsV0FBSyxZQUFZLGlCQUFpQixRQUFRLHVCQUF1QixDQUFDLENBQUM7QUFDbkU7QUFBQSxJQUNGO0FBRUEsU0FBSyxZQUFZO0FBQ2pCLFFBQUk7QUFDRixZQUFNRCxhQUFZQyxlQUFjLGVBQWU7QUFDL0MsWUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLE1BQU0sUUFBUSxJQUFJO0FBQUEsUUFDdEMsbUJBQW1CO0FBQUEsUUFDbkIsTUFBTSxxQkFBcUI7QUFBQSxVQUN6QixRQUFRO0FBQUEsVUFDUixTQUFTLEVBQUUsZ0JBQWdCLG1CQUFtQjtBQUFBLFVBQzlDLE1BQU0sS0FBSyxVQUFVLEVBQUUsWUFBWUQsWUFBVyxPQUFPLG9CQUFvQixDQUFDO0FBQUEsUUFDNUUsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUNELFlBQU0sT0FBTyxNQUFNLElBQUksS0FBSztBQUM1QixVQUFJLEtBQUssTUFBTSxLQUFLLFdBQVc7QUFDN0IsUUFBQUMsZUFBYyxjQUFjLEtBQUssU0FBUztBQUMxQyxRQUFBSyxnQkFBZSxLQUFLLFNBQVM7QUFDN0IsYUFBSyxZQUFZLGlCQUFpQixLQUFLLFdBQVcsTUFBTTtBQUFBLE1BQzFELE9BQU87QUFDTCxhQUFLLFlBQVkscUVBQXFFSCxZQUFXLEtBQUssU0FBUyxlQUFlLENBQUM7QUFBQSxNQUNqSTtBQUFBLElBQ0YsU0FBUyxHQUFHO0FBQ1YsV0FBSyxZQUFZLGlEQUFpREEsWUFBVyxFQUFFLE9BQU8sQ0FBQztBQUFBLElBQ3pGO0FBQUEsRUFDRjtBQUVBLFdBQVMsc0JBQXNCO0FBQzdCLGFBQVMsZUFBZSwwQkFBMEIsRUFBRSxNQUFNLFVBQVU7QUFDcEUsYUFBUyxvQkFBb0IsV0FBVyxpQkFBaUI7QUFDekQsSUFBQUksY0FBYTtBQUFBLEVBQ2Y7QUFLQSxXQUFTLGlCQUFpQixPQUFPLFFBQVE7QUFDdkMsVUFBTSxVQUFVLEtBQUssTUFBTSxNQUFNLFdBQVcsQ0FBQztBQUM3QyxVQUFNLE9BQU8sS0FBSyxNQUFNLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsVUFBTSxPQUFPLEtBQUssTUFBTSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELFVBQU0sYUFBYSxXQUFXLEtBQUssWUFBWSxXQUFXLEtBQUssWUFBWTtBQUUzRSxVQUFNLFdBQVcsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxVQUFNLFlBQVksU0FBUyxPQUFPLGFBQVcsZUFBZSxPQUFPLE1BQU0sU0FBUztBQUNsRixVQUFNLGNBQWMsVUFBVSxPQUFPLGFBQVcsYUFBYSxPQUFPLE1BQU0sTUFBTTtBQUNoRixVQUFNLGdCQUFnQixXQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxvQkFBb0IsT0FBTyxTQUFTLE9BQU8sYUFBVyxhQUFhLE9BQU8sTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQ3JILEtBQUssRUFBRTtBQUVWLFVBQU0sZ0JBQWdCLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsVUFBTSxXQUFXLE9BQU8sS0FBSyxhQUFhLEVBQUUsV0FBVyxJQUFJLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUl4RCxPQUFPLFFBQVEsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNO0FBQUE7QUFBQSxtRkFFdUJKLFlBQVcsR0FBRyxDQUFDO0FBQUEseUVBQ3pCLEtBQUssTUFBTSxHQUFHLENBQUM7QUFBQSxnQkFDeEUsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUFBO0FBQUE7QUFJeEIsV0FBTztBQUFBO0FBQUE7QUFBQSw0REFHbUQsVUFBVSxNQUFNLE9BQU87QUFBQTtBQUFBLG1GQUVBLElBQUk7QUFBQSxrRkFDTCxJQUFJO0FBQUEsK0VBQ1BBLFlBQVcsTUFBTSxTQUFTLFFBQVEsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRMUcsYUFBYTtBQUFBLFFBQ2IsUUFBUTtBQUFBLFFBQ1IsWUFBWSxTQUFTLElBQUk7QUFBQTtBQUFBLHNFQUVxQyxZQUFZLE1BQU07QUFBQSwwREFDOUIsWUFBWSxJQUFJLGFBQVdBLFlBQVcsUUFBUSxXQUFXLFFBQVEsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQztBQUFBLGtCQUNoSSxFQUFFO0FBQUEsUUFDWixVQUFVLFNBQVMsWUFBWSxTQUFTO0FBQUE7QUFBQSxtRUFFbUIsVUFBVSxTQUFTLFlBQVksTUFBTTtBQUFBLDBEQUM5QyxVQUFVLE9BQU8sYUFBVyxhQUFhLE9BQU8sTUFBTSxNQUFNLEVBQUUsSUFBSSxhQUFXQSxZQUFXLFFBQVEsV0FBVyxRQUFRLFFBQVEsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUM7QUFBQSxrQkFDbEwsRUFBRTtBQUFBO0FBQUEsRUFFcEI7QUFTQSxXQUFTLDBCQUEwQixHQUFHO0FBQ3BDLFFBQUksRUFBRSxRQUFRLFNBQVUsdUJBQXNCO0FBQUEsRUFDaEQ7QUFFQSxXQUFTLHVCQUF1QjtBQUM5QixJQUFBQyxnQkFBZSxTQUFTLGFBQWE7QUFDckMsVUFBTSxVQUFVLFNBQVMsZUFBZSw0QkFBNEI7QUFDcEUsWUFBUSxNQUFNLFVBQVU7QUFDeEIsYUFBUyxpQkFBaUIsV0FBVyx5QkFBeUI7QUFDOUQsVUFBTSxXQUFXLFFBQVEsY0FBYywyQkFBMkI7QUFDbEUsUUFBSSxTQUFVLFVBQVMsTUFBTTtBQUM3QixJQUFBQyxXQUFVLDRCQUE0QjtBQUN0QyxVQUFNLE9BQU8sU0FBUyxlQUFlLHlCQUF5QjtBQUU5RCxVQUFNLFdBQVdKLGNBQWEsV0FBVyxVQUFVO0FBQ25ELFFBQUksVUFBVTtBQUVaLFlBQU0sTUFBTSxTQUFTLGNBQWMsS0FBSztBQUN4QyxVQUFJLE1BQU0sVUFBVTtBQUNwQixXQUFLLFlBQVk7QUFDakIsV0FBSyxZQUFZLEdBQUc7QUFFcEIsNEJBQXNCLEtBQUssUUFBUTtBQUFBLElBQ3JDLE9BQU87QUFDTCxXQUFLLFlBQVk7QUFBQSxJQUNuQjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLHdCQUF3QjtBQUMvQixhQUFTLGVBQWUsNEJBQTRCLEVBQUUsTUFBTSxVQUFVO0FBQ3RFLGFBQVMsb0JBQW9CLFdBQVcseUJBQXlCO0FBQ2pFLElBQUFNLGNBQWE7QUFBQSxFQUNmO0FBTUEsV0FBUyxzQkFBc0IsSUFBSSxRQUFRO0FBQ3pDLFFBQUksQ0FBQyxRQUFRO0FBQ1gsU0FBRyxZQUFZO0FBQ2Y7QUFBQSxJQUNGO0FBR0EsVUFBTSxTQUFTLENBQUMsUUFBUTtBQUN0QixZQUFNLE9BQU8sb0JBQUksSUFBSTtBQUNyQixjQUFRLE9BQU8sQ0FBQyxHQUFHLE9BQU8sVUFBUTtBQUNoQyxjQUFNLE1BQU0sT0FBTyxPQUFPLFNBQVMsV0FBVyxPQUFPLEtBQUssV0FBVyxLQUFLLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZO0FBQ3pHLFlBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxHQUFHLEVBQUcsUUFBTztBQUNsQyxhQUFLLElBQUksR0FBRztBQUNaLGVBQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUNIO0FBQ0EsVUFBTSxNQUFNLE9BQU8sT0FBTyxlQUFlO0FBQ3pDLFVBQU0sT0FBTyxPQUFPLE9BQU8sb0JBQW9CLE9BQU8sWUFBWTtBQUNsRSxVQUFNLFdBQVcsT0FBTyxPQUFPLFlBQVk7QUFDM0MsVUFBTSxVQUFVLE9BQU8sc0JBQXNCLENBQUM7QUFDOUMsVUFBTSxXQUFXLE9BQU8sMEJBQTBCLENBQUM7QUFDbkQsVUFBTSxVQUFVLE9BQU8sb0JBQW9CLENBQUM7QUFFNUMsT0FBRyxZQUFZO0FBQUE7QUFBQTtBQUFBLHNFQUdxREosWUFBVyxPQUFPLGFBQWEsT0FBTyxTQUFTLE1BQU0sQ0FBQztBQUFBLFVBQ2xILE9BQU8sVUFBVSwrQkFBK0JBLFlBQVcsT0FBTyxPQUFPLENBQUMsV0FBVyxFQUFFO0FBQUEsVUFDdkYsT0FBTyxTQUFTLDBJQUEwSUEsWUFBVyxPQUFPLE1BQU0sQ0FBQyxZQUFZLEVBQUU7QUFBQTtBQUFBO0FBQUEsUUFHbk0sUUFBUSxTQUFTLElBQUk7QUFBQTtBQUFBO0FBQUEsdURBRzBCLFFBQVEsSUFBSSxPQUFLQSxZQUFXLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBSyxDQUFDO0FBQUEsa0JBQ2hGLEVBQUU7QUFBQTtBQUFBLFFBRVosSUFBSSxTQUFTLElBQUk7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQUlYLElBQUksSUFBSSxPQUFLLCtEQUErRCxRQUFRLFNBQVMsQ0FBQyxJQUFFLFlBQVUsU0FBUyxVQUFVLFFBQVEsU0FBUyxDQUFDLElBQUUsWUFBVSxTQUFTLHVCQUF1QkEsWUFBVyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQUE7QUFBQSxrQkFFdk4sRUFBRTtBQUFBO0FBQUEsUUFFWixLQUFLLFNBQVMsSUFBSTtBQUFBO0FBQUE7QUFBQSxrRUFHd0MsS0FBSyxJQUFJLE9BQUssT0FBT0EsWUFBVyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQUEsa0JBQ25HLEVBQUU7QUFBQTtBQUFBLFFBRVosU0FBUyxTQUFTLElBQUk7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQUloQixTQUFTLElBQUksQ0FBQ0ssSUFBRyxNQUFNLGdJQUFnSSxJQUFJLElBQUksWUFBWSxJQUFFLENBQUMsZUFBZSxFQUFFLEdBQUdMLFlBQVcsT0FBT0ssT0FBTSxXQUFXQSxLQUFJQSxHQUFFLFdBQVdBLEdBQUUsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQUE7QUFBQSxrQkFFbFIsRUFBRTtBQUFBO0FBQUEsUUFFWixTQUFTLFNBQVMsSUFBSTtBQUFBO0FBQUE7QUFBQSxrRUFHb0MsU0FBUyxJQUFJLE9BQUssT0FBT0wsWUFBVyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQUEsa0JBQ3ZHLEVBQUU7QUFBQTtBQUFBLFFBRVosUUFBUSxTQUFTLElBQUk7QUFBQTtBQUFBO0FBQUEsa0VBR3FDLFFBQVEsSUFBSSxPQUFLLE9BQU9BLFlBQVcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUFBLGtCQUN0RyxFQUFFO0FBQUE7QUFBQSxFQUVwQjtBQVVBLGlCQUFlTSx1QkFBc0I7QUFDbkMsVUFBTSxVQUFVLFNBQVMsZUFBZSxrQkFBa0I7QUFDMUQsUUFBSSxDQUFDLFFBQVM7QUFFZCxVQUFNLFNBQVNSLGVBQWMsY0FBYztBQUMzQyxRQUFJLFFBQVE7QUFDVixjQUFRLFlBQVksK0NBQStDLGlCQUFpQixNQUFNLENBQUM7QUFDM0Y7QUFBQSxJQUNGO0FBRUEsWUFBUSxZQUFZO0FBQUEsRUFDdEI7QUFXQSxXQUFTLGlCQUFpQixxQkFBcUIsTUFBTTtBQUNuRCxVQUFNLFFBQVEsU0FBUyxlQUFlLGlCQUFpQjtBQUN2RCxVQUFNLFVBQVUsU0FBUyxNQUFNLE1BQU0sWUFBWTtBQUNqRCxVQUFNLFlBQVksU0FBUyxlQUFlLGdCQUFnQjtBQUMxRCxVQUFNLGNBQWMsU0FBUyxlQUFlLGtCQUFrQjtBQUM5RCxRQUFJLFVBQVcsV0FBVSxNQUFNLFVBQVUsVUFBVSxpQkFBaUI7QUFDcEUsUUFBSSxZQUFhLGFBQVksTUFBTSxVQUFVLFVBQVUsaUJBQWlCO0FBQUEsRUFDMUUsQ0FBQzs7O0FDbmFEO0FBQUE7QUFBQSwwQkFBQVM7QUFBQSxJQUFBO0FBQUEsc0JBQUFDO0FBQUEsSUFBQSwyQkFBQUM7QUFBQTtBQTJCQSxNQUFNQyxRQUFNLFVBQVUsaUJBQWlCO0FBTXZDLE1BQU1DLGtCQUFpQjtBQUFBLElBQ3JCLGFBQTBCO0FBQUEsSUFDMUIsMEJBQTBCO0FBQUEsSUFDMUIsYUFBMEI7QUFBQSxFQUM1QjtBQUVBLGlCQUFlQyxZQUFXLFFBQVE7QUFDaEMsUUFBSUMsY0FBYSxVQUFVLEVBQUc7QUFFOUIsVUFBTSxhQUFhLHFCQUFxQixhQUFhLE1BQU0sS0FBSztBQUNoRSxlQUFXLE1BQU1GLGdCQUFlLE1BQU0sS0FBSyxHQUFHLE9BQU8sUUFBUSxNQUFNLEdBQUcsQ0FBQyxRQUFHO0FBRTFFLFFBQUk7QUFDRixZQUFNLFVBQVUsRUFBRSxPQUFPO0FBQ3pCLFVBQUksV0FBVyw4QkFBOEIsT0FBTyxpQkFBaUI7QUFDbkUsZ0JBQVEsbUJBQW1CLE9BQU87QUFBQSxNQUNwQztBQUVBLFlBQU0sTUFBTSxNQUFNLFNBQVMsZUFBZTtBQUFBLFFBQ3hDLFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVUsT0FBTztBQUFBLE1BQzlCLENBQUM7QUFDRCxZQUFNLE9BQU8scUJBQXFCLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFFbEQsMkJBQXFCLFVBQVU7QUFFL0IsVUFBSSxLQUFLLE9BQU87QUFDZCwyQkFBbUIsbUJBQWMsS0FBSyxPQUFPLE1BQU1DLFlBQVcsTUFBTSxDQUFDO0FBQUEsTUFDdkUsV0FBVyxXQUFXLDRCQUE0QjtBQUNoRCxjQUFNLG9CQUFvQixLQUFLLFFBQVEsY0FBYyxrQkFBa0IsS0FBSztBQUM1RSxjQUFNLDRCQUE0QixpQkFBaUI7QUFBQSxNQUNyRCxXQUFXLFdBQVcsZUFBZTtBQUNuQyxjQUFNLGdCQUFnQixjQUFjLGFBQWEsd0VBQXlEO0FBQzFHLGlCQUFTLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSztBQUM1QixnQkFBTSxJQUFJLFFBQVEsT0FBSyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLGNBQUk7QUFDRixrQkFBTSxZQUFhLE1BQU0sTUFBTSxhQUFhO0FBQzVDLGtCQUFNLGFBQWEsb0JBQW9CLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFDN0Qsa0JBQU0sV0FBYSxXQUFXLHVCQUF1QixDQUFDO0FBQ3RELGdCQUFJLFNBQVMsU0FBUyxHQUFHO0FBQ3ZCLG9CQUFNLFFBQVEsU0FBUztBQUN2QixvQkFBTSxZQUFZLFNBQVMsT0FBTyxPQUFLLEVBQUUsV0FBVyxVQUFVLEVBQUU7QUFDaEUsb0JBQU0sU0FBUyxTQUFTLEtBQUssT0FBSyxFQUFFLFdBQVcsVUFBVTtBQUN6RCxvQkFBTSxZQUFZLFNBQ2QsR0FBRyxPQUFPLEtBQUssUUFBUSxNQUFNLEdBQUcsQ0FBQyxLQUFLLFlBQVksQ0FBQyxPQUFPLEtBQUssTUFDL0QsR0FBRyxLQUFLLE9BQU8sS0FBSztBQUN4QixrQkFBSSxPQUFPLHdCQUF3QixZQUFZO0FBQzdDLG9DQUFvQixNQUFNLGtCQUFrQixTQUFTLFFBQUc7QUFBQSxjQUMxRDtBQUNBLG9CQUFNLFFBQVEsU0FBUztBQUFBLGdCQUFJLE9BQ3pCLEdBQUcsRUFBRSxXQUFXLGFBQWEsV0FBTSxRQUFHLElBQUksRUFBRSxLQUFLLFFBQVEsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLGFBQWEsSUFBSSxFQUFFLFVBQVUsUUFBUSxFQUFFO0FBQUEsY0FDbEgsRUFBRSxLQUFLLFVBQUs7QUFDWixrQkFBSSxjQUFlLGVBQWMsY0FBYyxVQUFVLEVBQUUsY0FBYyxrQkFBa0IsS0FBSztBQUFBLFlBQ2xHO0FBQ0EsZ0JBQUksU0FBUyxNQUFNLE9BQUssRUFBRSxXQUFXLFVBQVUsS0FBSyxTQUFTLFNBQVMsRUFBRztBQUFBLFVBQzNFLFNBQVNFLEtBQUk7QUFBQSxVQUFpQztBQUFBLFFBQ2hEO0FBQ0Esc0JBQWMsYUFBYSxzREFBc0Q7QUFDakYsUUFBQUQsY0FBYSxXQUFXLE1BQU0sS0FBSyxNQUFNO0FBQ3pDLHdCQUFnQixpQkFBaUI7QUFDakMsa0JBQVUsUUFBUTtBQUFBLE1BQ3BCLE9BQU87QUFDTCxzQkFBYyxhQUFhLEtBQUssTUFBTTtBQUFBLE1BQ3hDO0FBQUEsSUFDRixTQUFTLE9BQU87QUFDZCxNQUFBSCxNQUFJLE1BQU0sNkJBQTZCLFFBQVEsS0FBSztBQUNwRCwyQkFBcUIsVUFBVTtBQUMvQixVQUFJLE1BQU0sU0FBUyxjQUFjO0FBQy9CLDJCQUFtQixtQkFBYyxNQUFNLFNBQVMsTUFBTUUsWUFBVyxNQUFNLENBQUM7QUFBQSxNQUMxRTtBQUFBLElBQ0Y7QUFFQSxlQUFXLEtBQUs7QUFDaEIsVUFBTSxZQUFZO0FBQ2xCLFFBQUksT0FBTywwQkFBMEIsV0FBWSx1QkFBc0I7QUFBQSxFQUN6RTtBQUVBLGlCQUFlLGNBQWM7QUFDM0IsUUFBSTtBQUNGLFlBQU0sTUFBTyxNQUFNLE1BQU0sYUFBYSxFQUFFLFFBQVEsT0FBTyxDQUFDO0FBQ3hELFlBQU0sT0FBTyxNQUFNLElBQUksS0FBSztBQUM1QixVQUFJLEtBQUssSUFBSTtBQUNYLFlBQUksS0FBSyxhQUFjLGNBQWEsUUFBUUcsYUFBWSxjQUFjLEtBQUssWUFBWTtBQUN2RixzQkFBYyxVQUFVLDZCQUE2QjtBQUFBLE1BQ3ZELE9BQU87QUFDTCwyQkFBbUIsa0NBQTZCLEtBQUssT0FBTyxXQUFXO0FBQUEsTUFDekU7QUFBQSxJQUNGLFNBQVMsT0FBTztBQUNkLE1BQUFMLE1BQUksTUFBTSw4QkFBOEIsS0FBSztBQUM3Qyx5QkFBbUIsbUJBQWMsTUFBTSxTQUFTLFdBQVc7QUFBQSxJQUM3RDtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGVBQWUsT0FBTztBQUM3QixVQUFNTSxRQUFPLE9BQU8sU0FBUyxFQUFFLEVBQUUsS0FBSztBQUN0QyxRQUFJLENBQUNBLE1BQU0sUUFBTztBQUNsQixRQUFJLHNCQUFzQixLQUFLQSxLQUFJLEdBQUc7QUFDcEMsWUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUlBLE1BQUssTUFBTSxHQUFHO0FBQ3pDLGFBQU8sR0FBRyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUk7QUFBQSxJQUNoQztBQUNBLFVBQU0sU0FBUyxJQUFJLEtBQUtBLEtBQUk7QUFDNUIsUUFBSSxDQUFDLE9BQU8sTUFBTSxPQUFPLFFBQVEsQ0FBQyxHQUFHO0FBQ25DLGFBQU8sT0FBTyxZQUFZLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFBQSxJQUN6QztBQUNBLFdBQU9BO0FBQUEsRUFDVDtBQUVBLFdBQVNDLHFCQUFvQixTQUFTLENBQUMsR0FBRztBQUN4QyxVQUFNLGFBQWEsU0FBUyxlQUFlLGdCQUFnQjtBQUMzRCxRQUFJLENBQUMsV0FBWTtBQUVqQixVQUFNLHVCQUF1QjtBQUM3QixRQUFJLFNBQVMsT0FBTyxpQkFBaUIsSUFBSSxTQUFTLEVBQUUsS0FBSztBQUN6RCxRQUFJLFVBQVU7QUFDZCxRQUFJLGNBQWM7QUFFbEIsUUFBSSxDQUFDLFNBQVMsT0FBTyxjQUFjO0FBQ2pDLFVBQUk7QUFDRixjQUFNLFdBQVcsT0FBTyxPQUFPLGlCQUFpQixXQUM1QyxLQUFLLE1BQU0sa0JBQWtCLE9BQU8sWUFBWSxDQUFDLElBQ2pELE9BQU87QUFDWCxjQUFNLFFBQVEsVUFBVSxhQUFhLFVBQVUsU0FBUyxVQUFVLGlCQUFpQjtBQUNuRixnQkFBUSx1QkFBdUIsT0FBTyxVQUFVLE9BQU87QUFDdkQsbUJBQVcsVUFBVSxnQkFBZ0IsVUFBVSxXQUFXLElBQUksS0FBSztBQUNuRSxzQkFBYyxlQUFlLFVBQVUsZ0JBQWdCLFVBQVUsb0JBQW9CLEVBQUU7QUFBQSxNQUN6RixTQUFTLE9BQU87QUFDZCxRQUFBUCxNQUFJLEtBQUssMkNBQTJDLEtBQUs7QUFBQSxNQUMzRDtBQUFBLElBQ0Y7QUFFQSxRQUFJLENBQUMsU0FBUyxPQUFPLHNCQUFzQjtBQUN6QyxZQUFNLFNBQVMsa0NBQWtDLE9BQU8sb0JBQW9CO0FBQzVFLGNBQVEsdUJBQXVCLE9BQU8sT0FBTyxPQUFPLE9BQU87QUFDM0QsVUFBSSxDQUFDLFFBQVMsWUFBVyxPQUFPLFdBQVcsSUFBSSxLQUFLO0FBQUEsSUFDdEQ7QUFFQSxlQUFXLGNBQWM7QUFDekIsYUFBUyxRQUFRLFFBQVEsR0FBRyxLQUFLLHVCQUFrQjtBQUVuRCxVQUFNLG9CQUFvQixTQUFTLGVBQWUsa0JBQWtCO0FBQ3BFLFFBQUksbUJBQW1CO0FBQ3JCLFlBQU0sU0FBUyxPQUFPLGlCQUFpQixDQUFDO0FBQ3hDLFlBQU0sZ0JBQWdCLE9BQU8sV0FBVyxJQUFJLEtBQUssS0FBSztBQUN0RCxZQUFNLFlBQVksZUFBZSxlQUFlLE9BQU8sZ0JBQWdCLEVBQUU7QUFDekUsWUFBTSxXQUFXLENBQUMsY0FBYyxTQUFTLEVBQUUsT0FBTyxPQUFPLEVBQUUsS0FBSyxVQUFPO0FBQ3ZFLHdCQUFrQixjQUFjO0FBQ2hDLHdCQUFrQixNQUFNLFVBQVUsV0FBVyxLQUFLO0FBQUEsSUFDcEQ7QUFFQSxVQUFNLFlBQVksU0FBUyxlQUFlLG9CQUFvQjtBQUM5RCxRQUFJLFVBQVcsV0FBVSxNQUFNLFVBQVUsUUFBUSxLQUFLO0FBQ3RELFFBQUksT0FBTyxpQ0FBaUMsWUFBWTtBQUN0RCxtQ0FBNkIsRUFBRSxlQUFlLE9BQU8sT0FBTyxPQUFPLFNBQVMsS0FBSyxDQUFDO0FBQUEsSUFDcEY7QUFBQSxFQUNGOzs7QUM1TEE7QUFBQTtBQUFBLHNCQUFBUTtBQUFBLElBQUE7QUFBQSxzQ0FBQUM7QUFBQSxJQUFBLHNDQUFBQztBQUFBO0FBeUJBLE1BQU1DLFFBQU0sVUFBVSxjQUFjO0FBVXBDLFdBQVNDLGdDQUErQixjQUFjO0FBQ3BELFFBQUksQ0FBQyxNQUFNLFFBQVEsWUFBWSxFQUFHLFFBQU8sQ0FBQztBQUMxQyxXQUFPLGFBQ0osT0FBTyxDQUFBQyxPQUFLQSxNQUFLLE9BQU9BLEdBQUUsYUFBYSxZQUFZQSxHQUFFLFNBQVMsS0FBSyxDQUFDLEVBQ3BFLElBQUksQ0FBQ0EsSUFBRyxTQUFTO0FBQUEsTUFDaEIsVUFBVUEsR0FBRSxTQUFTLEtBQUs7QUFBQSxNQUMxQixPQUFXQSxHQUFFLFFBQVEsaUJBQWlCLE1BQU0sQ0FBQyxJQUFJLFNBQVM7QUFBQSxNQUMxRCxTQUFVLE1BQU0sUUFBUUEsR0FBRSxPQUFPLElBQUlBLEdBQUUsVUFBVSxDQUFDO0FBQUEsSUFDcEQsRUFBRTtBQUFBLEVBQ047QUFNQSxXQUFTLDRDQUE0Q0MsT0FBTTtBQUN6RCxRQUFJLE9BQU9BLFVBQVMsWUFBWSxDQUFDQSxNQUFLLEtBQUssRUFBRyxRQUFPLENBQUM7QUFDdEQsVUFBTSxhQUFhQSxNQUFLLFFBQVEsU0FBUyxJQUFJO0FBQzdDLFVBQU0sU0FBUyxXQUFXLE1BQU0sZUFBZTtBQUMvQyxRQUFJLE9BQU8sVUFBVSxFQUFHLFFBQU8sQ0FBQztBQUNoQyxXQUFPLE9BQ0osTUFBTSxDQUFDLEVBQ1AsSUFBSSxDQUFDLE9BQU8sUUFBUTtBQUNuQixZQUFNLFdBQVcsTUFBTSxLQUFLO0FBQzVCLFVBQUksQ0FBQyxTQUFVLFFBQU87QUFDdEIsYUFBTyxFQUFFLFVBQVUsU0FBUyxNQUFNLEdBQUcsR0FBSSxHQUFHLE1BQU0saUJBQWlCLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFO0FBQUEsSUFDNUYsQ0FBQyxFQUNBLE9BQU8sT0FBTyxFQUNkLE1BQU0sR0FBRyxDQUFDO0FBQUEsRUFDZjtBQU1BLFdBQVNDLDRCQUEyQixtQkFBbUIsbUJBQW1CO0FBQ3hFLFVBQU0sV0FBV0gsZ0NBQStCLGlCQUFpQjtBQUNqRSxVQUFNLFdBQVdBLGdDQUErQixpQkFBaUI7QUFFakUsVUFBTSxTQUFnQixDQUFDLEdBQUcsUUFBUTtBQUNsQyxVQUFNLGlCQUFpQixJQUFJLElBQUksU0FBUyxJQUFJLENBQUFDLE9BQUtBLEdBQUUsU0FBUyxZQUFZLEVBQUUsUUFBUSxRQUFRLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0RyxVQUFNLFlBQWlCLElBQUksSUFBSSxTQUFTLElBQUksQ0FBQUEsT0FBS0EsR0FBRSxJQUFJLENBQUM7QUFFeEQsYUFBUyxRQUFRLENBQUNBLElBQUcsUUFBUTtBQUMzQixZQUFNLE1BQU1BLEdBQUUsU0FBUyxZQUFZLEVBQUUsUUFBUSxRQUFRLEdBQUcsRUFBRSxLQUFLO0FBQy9ELFVBQUksQ0FBQyxPQUFPLGVBQWUsSUFBSSxHQUFHLEVBQUc7QUFDckMsVUFBSSxPQUFPQSxHQUFFLFFBQVEsaUJBQWlCLE9BQU8sU0FBUyxNQUFNLENBQUM7QUFDN0QsVUFBSSxVQUFVLElBQUksSUFBSSxFQUFHLFFBQU8sR0FBRyxJQUFJLElBQUksT0FBTyxTQUFTLE1BQU0sQ0FBQztBQUNsRSxhQUFPLEtBQUssRUFBRSxVQUFVQSxHQUFFLFVBQVUsTUFBTSxTQUFTLE1BQU0sUUFBUUEsR0FBRSxPQUFPLElBQUlBLEdBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztBQUM5RixxQkFBZSxJQUFJLEdBQUc7QUFDdEIsZ0JBQVUsSUFBSSxJQUFJO0FBQUEsSUFDcEIsQ0FBQztBQUVELFdBQU87QUFBQSxFQUNUO0FBTUEsaUJBQWVHLGNBQWE7QUFDMUIsUUFBSUMsY0FBYSxVQUFVLEVBQUc7QUFFOUIsUUFBSSxDQUFDLGFBQWEsUUFBUUMsYUFBWSxvQkFBb0IsR0FBRztBQUMzRCxvQkFBYyxVQUFVLHNJQUE2SDtBQUNySixtQkFBYSxRQUFRQSxhQUFZLHNCQUFzQixHQUFHO0FBQUEsSUFDNUQ7QUFFQSxVQUFNLGFBQWEscUJBQXFCLDhCQUE4QjtBQUN0RSxlQUFXLE1BQU0saUNBQTRCO0FBRTdDLFFBQUk7QUFDRixZQUFNLE1BQU8sTUFBTSxTQUFTLGVBQWU7QUFBQSxRQUN6QyxRQUFRO0FBQUEsUUFDUixTQUFTLEVBQUUsZ0JBQWdCLG1CQUFtQjtBQUFBLFFBQzlDLE1BQU0sS0FBSyxVQUFVLEVBQUUsUUFBUSxjQUFjLENBQUM7QUFBQSxNQUNoRCxDQUFDO0FBQ0QsWUFBTSxPQUFPLHFCQUFxQixNQUFNLElBQUksS0FBSyxDQUFDO0FBRWxELDJCQUFxQixVQUFVO0FBRS9CLFVBQUksS0FBSyxPQUFPO0FBQ2QsMkJBQW1CLG1CQUFjLEtBQUssT0FBT0YsV0FBVTtBQUFBLE1BQ3pELE9BQU87QUFDTCxjQUFNLFNBQWUsS0FBSztBQUMxQixjQUFNLGVBQWUsT0FBTyxXQUFXLFdBQVcsU0FBVSxRQUFRLFFBQVM7QUFDN0UsY0FBTSxlQUFlLE9BQU8sV0FBVyxZQUFZLFdBQVcsT0FDekQsT0FBTyxjQUFjLGdCQUFnQixTQUN0QztBQUNKLGNBQU0sbUJBQW9CLE9BQU8sV0FBVyxZQUFZLFdBQVcsT0FDL0QsT0FBTyxjQUFjLDBCQUNyQjtBQUNKLGNBQU0sc0JBQXNCRDtBQUFBLFVBQzFCO0FBQUEsVUFDQyxvQkFBb0IsaUJBQWlCLFNBQVMsSUFDM0MsQ0FBQyxJQUNELDRDQUE0QyxZQUFZO0FBQUEsUUFDOUQ7QUFFQSxZQUFJLGFBQWMsZUFBYyxhQUFhLFlBQVk7QUFDekQsZ0NBQXdCLFlBQVk7QUFDcEMsUUFBQUUsY0FBYSxXQUFXLFlBQVksWUFBWTtBQUNoRCx3QkFBZ0IsVUFBVTtBQUMxQixrQkFBVSxVQUFVO0FBRXBCLGNBQU0sc0JBQXNCLFlBQVk7QUFDdEMsZ0JBQU0seUJBQXlCLGNBQWMsbUJBQW1CO0FBQUEsUUFDbEU7QUFFQSxZQUFJO0FBQ0YsZ0JBQU0sWUFBYSxNQUFNLFNBQVMsc0JBQXNCO0FBQ3hELGdCQUFNLGFBQWEsTUFBTSxVQUFVLEtBQUs7QUFDeEMsY0FBSSxXQUFXLFdBQVc7QUFDeEIsa0JBQU0sb0JBQW9CLG1CQUFtQjtBQUFBLFVBQy9DLE9BQU87QUFDTCxrQkFBTSx1QkFBdUIsbUJBQW1CO0FBQUEsVUFDbEQ7QUFBQSxRQUNGLFNBQVNFLEtBQUk7QUFDWCxnQkFBTSxvQkFBb0I7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLFNBQVMsT0FBTztBQUNkLE1BQUFSLE1BQUksTUFBTSw2QkFBNkIsS0FBSztBQUM1QywyQkFBcUIsVUFBVTtBQUMvQixVQUFJLE1BQU0sU0FBUyxjQUFjO0FBQy9CLDJCQUFtQixtQkFBYyxNQUFNLFNBQVNLLFdBQVU7QUFBQSxNQUM1RDtBQUFBLElBQ0Y7QUFFQSxlQUFXLEtBQUs7QUFFaEIsUUFBSTtBQUNGLFlBQU0sZUFBZSxNQUFNLFlBQVk7QUFDdkMsVUFBSSxnQkFBZ0IsT0FBTyx3QkFBd0IsWUFBWTtBQUM3RCw0QkFBb0IsWUFBWTtBQUFBLE1BQ2xDO0FBQUEsSUFDRixTQUFTRyxLQUFJO0FBQUEsSUFBa0I7QUFDL0IsUUFBSSxPQUFPLDBCQUEwQixXQUFZLHVCQUFzQjtBQUFBLEVBQ3pFOzs7QUM3S0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNEJBQUFDO0FBQUEsSUFBQTtBQUFBO0FBZ0NBLE1BQU1DLFFBQU0sVUFBVSxPQUFPO0FBRTdCLE1BQU0saUJBQWlCO0FBQUEsSUFDckIsbUJBQXNCO0FBQUEsSUFDdEIsb0JBQXNCO0FBQUEsSUFDdEIsZUFBc0I7QUFBQSxJQUN0QixzQkFBc0I7QUFBQSxJQUN0QixrQkFBc0I7QUFBQSxJQUN0QixtQkFBc0I7QUFBQSxJQUN0QixlQUFzQjtBQUFBLElBQ3RCLG1CQUFzQjtBQUFBLElBQ3RCLGVBQXNCO0FBQUEsRUFDeEI7QUFHQSxNQUFNLElBQUk7QUFBQSxJQUNSLFNBQVk7QUFBQSxJQUNaLFFBQVk7QUFBQSxJQUNaLFVBQVk7QUFBQSxJQUNaLE9BQVk7QUFBQSxJQUNaLE1BQVk7QUFBQSxJQUNaLFVBQVk7QUFBQSxJQUNaLEtBQVk7QUFBQSxJQUNaLE9BQVk7QUFBQSxJQUNaLFlBQVk7QUFBQSxJQUNaLFlBQVk7QUFBQSxFQUNkO0FBRUEsaUJBQXNCQyxvQkFBbUI7QUFDdkMsVUFBTSxVQUFVLFNBQVMsZUFBZSxrQkFBa0I7QUFDMUQsUUFBSSxDQUFDLFFBQVM7QUFFZCxZQUFRLFlBQVk7QUFBQTtBQUFBO0FBQUEsa0JBR0osRUFBRSxLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsMENBT2lCLEVBQUUsT0FBTztBQUFBLHNCQUM3QixFQUFFLE1BQU07QUFBQTtBQUFBO0FBQUEsa0NBR0ksRUFBRSxRQUFRO0FBQUEsa0RBQ00sRUFBRSxLQUFLO0FBQUE7QUFBQTtBQUFBLHNCQUduQyxFQUFFLElBQUk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw4QkFPRSxFQUFFLFVBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQ0FJVixFQUFFLFVBQVU7QUFBQTtBQUFBO0FBQUEsa0VBR3NCLEVBQUUsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDZEQU9aLEVBQUUsR0FBRztBQUFBO0FBQUE7QUFBQSxnQ0FHbEMsZUFBZSxhQUFhO0FBQUEsMkNBQ2pCLEVBQUUsUUFBUTtBQUFBLCtCQUN0QixFQUFFLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsOEJBTVIsRUFBRSxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0NBSVYsRUFBRSxVQUFVO0FBQUE7QUFBQTtBQUFBLGtFQUdzQixFQUFFLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDhCQVEzQyxFQUFFLEdBQUc7QUFBQTtBQUFBO0FBQUE7QUFBQSxrQ0FJRCxlQUFlLG9CQUFvQjtBQUFBLDZDQUN4QixFQUFFLFFBQVE7QUFBQSxpQ0FDdEIsRUFBRSxLQUFLO0FBQUE7QUFBQSw4QkFFVixFQUFFLEdBQUc7QUFBQTtBQUFBO0FBQUE7QUFBQSxrQ0FJRCxlQUFlLGdCQUFnQjtBQUFBLDZDQUNwQixFQUFFLFFBQVE7QUFBQSxpQ0FDdEIsRUFBRSxLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsMENBVUUsRUFBRSxPQUFPO0FBQUEsc0JBQzdCLEVBQUUsTUFBTTtBQUFBO0FBQUE7QUFBQSxrQ0FHSSxFQUFFLFFBQVE7QUFBQSx3REFDWSxFQUFFLEtBQUs7QUFBQTtBQUFBO0FBQUEsc0JBR3pDLEVBQUUsSUFBSTtBQUFBO0FBQUE7QUFBQSx3QkFHSixFQUFFLEdBQUc7QUFBQTtBQUFBO0FBQUEsNEJBR0QsZUFBZSxhQUFhO0FBQUEsdUNBQ2pCLEVBQUUsUUFBUTtBQUFBLDJCQUN0QixFQUFFLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsMENBTVEsRUFBRSxPQUFPO0FBQUEsc0JBQzdCLEVBQUUsTUFBTTtBQUFBO0FBQUE7QUFBQSwwQkFHSixFQUFFLFFBQVE7QUFBQSx3REFDb0IsRUFBRSxLQUFLO0FBQUEsMENBQ3JCLEVBQUUsS0FBSztBQUFBO0FBQUE7QUFBQSxzQkFHM0IsRUFBRSxJQUFJO0FBQUE7QUFBQTtBQUFBLHdCQUdKLEVBQUUsR0FBRztBQUFBO0FBQUE7QUFBQSw0QkFHRCxlQUFlLGFBQWE7QUFBQSx3Q0FDaEIsRUFBRSxRQUFRO0FBQUEsMkJBQ3ZCLEVBQUUsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwwQ0FNUSxFQUFFLE9BQU87QUFBQSxzQkFDN0IsRUFBRSxNQUFNO0FBQUE7QUFBQSx5QkFFTCxFQUFFLEtBQUs7QUFBQTtBQUFBLG9CQUVaLEVBQUUsSUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw0Q0Fla0IsRUFBRSxLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBeUIvQixFQUFFLEdBQUc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY3ZCLFVBQU0scUJBQXFCO0FBQUEsRUFDN0I7QUFNTyxXQUFTLG1CQUFtQixTQUFTO0FBQzFDLFVBQU0sTUFBTTtBQUFBLE1BQ1YsT0FBYSxFQUFFLElBQUkscUJBQTJCLE1BQU0saUJBQXVCO0FBQUEsTUFDM0UsYUFBYSxFQUFFLElBQUksMkJBQTJCLE1BQU0sdUJBQXVCO0FBQUEsTUFDM0UsYUFBYSxFQUFFLElBQUksMkJBQTJCLE1BQU0sdUJBQXVCO0FBQUEsSUFDN0U7QUFDQSxVQUFNLE1BQU0sSUFBSSxPQUFPO0FBQ3ZCLFFBQUksQ0FBQyxJQUFLO0FBQ1YsVUFBTSxLQUFPLFNBQVMsZUFBZSxJQUFJLEVBQUU7QUFDM0MsVUFBTSxPQUFPLFNBQVMsZUFBZSxJQUFJLElBQUk7QUFDN0MsUUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFNO0FBQ2xCLFNBQUssTUFBTSxVQUFnQixHQUFHLFVBQVUsTUFBUztBQUNqRCxTQUFLLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxTQUFTO0FBQUEsRUFDbkQ7QUFNTyxXQUFTLHFCQUFxQjtBQUNuQyxVQUFNLGdCQUFnQixTQUFTLGVBQWUseUJBQXlCO0FBQ3ZFLFVBQU0sYUFBZ0IsZUFBZSxXQUFXO0FBQ2hELFVBQU0sY0FBZ0IsU0FBUyxlQUFlLG9CQUFvQjtBQUNsRSxVQUFNLFdBQWdCLFNBQVMsZUFBZSxpQkFBaUI7QUFDL0QsUUFBSSxZQUFhLGFBQVksTUFBTSxVQUFVLGFBQWEsU0FBVztBQUNyRSxRQUFJLFNBQWEsVUFBUyxNQUFNLFVBQWEsYUFBYSxTQUFXO0FBQUEsRUFDdkU7QUFNQSxpQkFBZSx1QkFBdUI7QUFDcEMsUUFBSTtBQUNGLFlBQU0sT0FBUSxNQUFNLFFBQVEsT0FBTyxhQUFhO0FBQ2hELFlBQU0sUUFBUSxNQUFNO0FBQ3BCLFVBQUksQ0FBQyxNQUFPO0FBR1osWUFBTSxlQUFvQixTQUFTLGVBQWUsbUJBQW1CO0FBQ3JFLFlBQU0sbUJBQW9CLFNBQVMsZUFBZSx5QkFBeUI7QUFDM0UsWUFBTSxvQkFBb0IsU0FBUyxlQUFlLHlCQUF5QjtBQUUzRSxVQUFJLGdCQUFxQixNQUFNLHFCQUFzQixLQUFNLGNBQWEsVUFBZSxNQUFNO0FBQzdGLFVBQUksb0JBQXFCLE1BQU0scUJBQXNCLEtBQU0sa0JBQWlCLFVBQVcsTUFBTTtBQUM3RixVQUFJLHFCQUFxQixNQUFNLHFCQUFzQixLQUFNLG1CQUFrQixVQUFVLE1BQU07QUFFN0YseUJBQW1CLEtBQUs7QUFDeEIseUJBQW1CLFdBQVc7QUFDOUIseUJBQW1CLFdBQVc7QUFHOUIsVUFBSSxNQUFNLG9CQUFvQjtBQUM1QixjQUFNLFFBQVEsU0FBUztBQUFBLFVBQ3JCLHVDQUF1QyxNQUFNLGtCQUFrQjtBQUFBLFFBQUk7QUFDckUsWUFBSSxNQUFPLE9BQU0sVUFBVTtBQUMzQiwyQkFBbUI7QUFBQSxNQUNyQjtBQUdBLFlBQU0sV0FBa0IsU0FBUyxlQUFlLHFCQUFxQjtBQUNyRSxZQUFNLGlCQUFrQixTQUFTLGVBQWUsNEJBQTRCO0FBQzVFLFlBQU0sYUFBa0IsU0FBUyxlQUFlLHdCQUF3QjtBQUN4RSxZQUFNLGVBQWtCLFNBQVMsZUFBZSxxQkFBcUI7QUFDckUsWUFBTSxlQUFrQixTQUFTLGVBQWUscUJBQXFCO0FBRXJFLFVBQUksWUFBa0IsTUFBTSxpQkFBeUIsS0FBTSxVQUFTLFFBQWMsTUFBTTtBQUN4RixVQUFJLGtCQUFrQixNQUFNLHdCQUF5QixLQUFNLGdCQUFlLFFBQVEsTUFBTTtBQUN4RixVQUFJLGNBQWtCLE1BQU0sb0JBQXlCLEtBQU0sWUFBVyxRQUFZLE1BQU07QUFDeEYsVUFBSSxnQkFBa0IsTUFBTSxpQkFBeUIsS0FBTSxjQUFhLFFBQVUsTUFBTTtBQUN4RixVQUFJLGdCQUFrQixNQUFNLGlCQUF5QixLQUFNLGNBQWEsUUFBVSxNQUFNO0FBR3hGLFlBQU0sa0JBQWtCLFNBQVMsZUFBZSx3QkFBd0I7QUFDeEUsWUFBTSxpQkFBa0IsU0FBUyxlQUFlLHdCQUF3QjtBQUN4RSxVQUFJLG1CQUFtQixLQUFLLGNBQWMsTUFBTTtBQUM5Qyx3QkFBZ0IsUUFBUSxLQUFLO0FBQzdCLFlBQUksZUFBZ0IsZ0JBQWUsY0FBYyxLQUFLO0FBQUEsTUFDeEQ7QUFDQSxZQUFNLGNBQWMsQ0FBQyxVQUFVLG9CQUFvQixjQUFjLGFBQWE7QUFDOUUsWUFBTSxlQUFlLEtBQUssd0JBQXdCO0FBQ2xELFlBQU0sY0FBZSxTQUFTLGVBQWUsMkJBQTJCO0FBQ3hFLFlBQU0sY0FBZSxTQUFTLGVBQWUsMkJBQTJCO0FBQ3hFLFVBQUksYUFBYTtBQUNmLGNBQU0sVUFBVSxZQUFZLFNBQVMsWUFBWTtBQUNqRCxvQkFBWSxRQUFRLFVBQVUsZUFBZTtBQUM3QyxZQUFJLGFBQWE7QUFDZixzQkFBWSxNQUFNLFVBQVUsVUFBVSxTQUFTO0FBQy9DLGNBQUksQ0FBQyxRQUFTLGFBQVksUUFBUTtBQUFBLFFBQ3BDO0FBQUEsTUFDRjtBQUFBLElBQ0YsU0FBUyxLQUFLO0FBQ1osTUFBQUQsTUFBSSxLQUFLLGlEQUFpRCxHQUFHO0FBQUEsSUFDL0Q7QUFBQSxFQUNGO0FBTUEsaUJBQXNCLHNCQUFzQjtBQUMxQyxVQUFNLFdBQVcsU0FBUyxlQUFlLGNBQWM7QUFHdkQsVUFBTSxhQUFrQixTQUFTLGVBQWUsbUJBQW1CLEdBQUcsV0FBZ0I7QUFDdEYsVUFBTSxpQkFBa0IsU0FBUyxlQUFlLHlCQUF5QixHQUFHLFdBQVc7QUFDdkYsVUFBTSxrQkFBa0IsU0FBUyxlQUFlLHlCQUF5QixHQUFHLFdBQVc7QUFHdkYsVUFBTSxVQUFpQixTQUFTLGNBQWMsc0NBQXNDLEdBQUcsU0FBUztBQUNoRyxVQUFNLFdBQWlCLFNBQVMsU0FBUyxlQUFlLHFCQUFxQixHQUFHLE9BQWMsRUFBRTtBQUNoRyxVQUFNLGlCQUFpQixTQUFTLFNBQVMsZUFBZSw0QkFBNEIsR0FBRyxPQUFPLEVBQUU7QUFDaEcsVUFBTSxhQUFpQixTQUFTLFNBQVMsZUFBZSx3QkFBd0IsR0FBRyxPQUFXLEVBQUU7QUFDaEcsVUFBTSxXQUFpQixTQUFTLFNBQVMsZUFBZSxxQkFBcUIsR0FBRyxPQUFjLEVBQUU7QUFDaEcsVUFBTSxXQUFpQixTQUFTLFNBQVMsZUFBZSxxQkFBcUIsR0FBRyxPQUFjLEVBQUU7QUFHaEcsUUFBSSxZQUFZO0FBQ2QsVUFBSSxZQUFZLFlBQVk7QUFDMUIsWUFBSSxDQUFDLFlBQVksV0FBVyxLQUFLLFdBQVcsSUFBSTtBQUM5QyxxQkFBVyxVQUFVLDZDQUE4QixNQUFNO0FBQUc7QUFBQSxRQUM5RDtBQUFBLE1BQ0YsT0FBTztBQUNMLFlBQUksQ0FBQyxrQkFBa0IsaUJBQWlCLEtBQUssaUJBQWlCLElBQUk7QUFDaEUscUJBQVcsVUFBVSx3REFBeUMsTUFBTTtBQUFHO0FBQUEsUUFDekU7QUFDQSxZQUFJLENBQUMsY0FBYyxhQUFhLEtBQUssYUFBYSxJQUFJO0FBQ3BELHFCQUFXLFVBQVUsbUVBQW9ELE1BQU07QUFBRztBQUFBLFFBQ3BGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxRQUFJLG1CQUFvQixDQUFDLFlBQWEsV0FBWSxLQUFNLFdBQVksSUFBUTtBQUFFLGlCQUFXLFVBQVUsNENBQXNDLE1BQU07QUFBRztBQUFBLElBQVE7QUFDMUosUUFBSSxvQkFBb0IsQ0FBQyxZQUFhLFdBQVksT0FBTyxXQUFXLE1BQVE7QUFBRSxpQkFBVyxVQUFVLG9EQUFxQyxNQUFNO0FBQUc7QUFBQSxJQUFRO0FBR3pKLFVBQU0sVUFBVTtBQUFBLE1BQ2QsbUJBQW9CO0FBQUEsTUFDcEIsbUJBQW9CO0FBQUEsTUFDcEIsbUJBQW9CO0FBQUEsTUFDcEIsb0JBQW9CO0FBQUEsSUFDdEI7QUFFQSxRQUFJLFlBQVk7QUFDZCxVQUFJLFlBQVksWUFBWTtBQUMxQixnQkFBUSxnQkFBZ0I7QUFBQSxNQUMxQixPQUFPO0FBQ0wsZ0JBQVEsdUJBQXVCO0FBQy9CLGdCQUFRLG1CQUF1QjtBQUFBLE1BQ2pDO0FBQUEsSUFDRjtBQUNBLFFBQUksZUFBaUIsU0FBUSxnQkFBZ0I7QUFDN0MsUUFBSSxnQkFBaUIsU0FBUSxnQkFBZ0I7QUFFN0MsZUFBVyxVQUFVLGdCQUFXLE1BQU07QUFFdEMsUUFBSTtBQUNGLFlBQU0sUUFBUSxRQUFRLHlCQUF5QixPQUFPO0FBQ3RELGlCQUFXLFVBQVUsZ0JBQVcsSUFBSTtBQUNwQyxpQkFBVyxNQUFNO0FBQUUsWUFBSSxTQUFVLFVBQVMsY0FBYztBQUFBLE1BQUksR0FBRyxHQUFJO0FBQUEsSUFDckUsU0FBUyxLQUFLO0FBQ1osTUFBQUEsTUFBSSxNQUFNLG9DQUFvQyxHQUFHO0FBQ2pELGlCQUFXLFVBQVUsa0NBQWtDLE9BQU87QUFBQSxJQUNoRTtBQUFBLEVBQ0Y7QUFNTyxXQUFTLDJCQUEyQjtBQUN6QyxVQUFNLE1BQVMsU0FBUyxlQUFlLDJCQUEyQjtBQUNsRSxVQUFNLFNBQVMsU0FBUyxlQUFlLDJCQUEyQjtBQUNsRSxRQUFJLENBQUMsSUFBSztBQUNWLFFBQUksSUFBSSxVQUFVLGNBQWM7QUFDOUIsVUFBSSxRQUFRO0FBQUUsZUFBTyxNQUFNLFVBQVU7QUFBSSxlQUFPLE1BQU07QUFBQSxNQUFHO0FBQUEsSUFDM0QsT0FBTztBQUNMLFVBQUksT0FBUSxRQUFPLE1BQU0sVUFBVTtBQUNuQyw0QkFBc0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0Y7QUFPQSxpQkFBc0Isd0JBQXdCO0FBQzVDLFVBQU0sV0FBVyxTQUFTLGVBQWUsdUJBQXVCO0FBQ2hFLFVBQU0sU0FBVyxTQUFTLGVBQWUsd0JBQXdCO0FBQ2pFLFVBQU0sTUFBVyxTQUFTLGVBQWUsMkJBQTJCO0FBQ3BFLFVBQU0sU0FBVyxTQUFTLGVBQWUsMkJBQTJCO0FBRXBFLFVBQU0sWUFBWSxTQUFTLFNBQVMsT0FBTyxPQUFPLEVBQUUsSUFBSTtBQUN4RCxVQUFNLFFBQVksS0FBSyxVQUFVLGVBQzVCLFFBQVEsT0FBTyxLQUFLLEtBQUssT0FDekIsS0FBSyxTQUFTO0FBRW5CLFFBQUksQ0FBQyxhQUFhLENBQUMsTUFBTztBQUUxQixVQUFNLFVBQVUsQ0FBQztBQUNqQixRQUFJLGFBQWEsYUFBYSxFQUFHLFNBQVEsYUFBc0I7QUFDL0QsUUFBSSxNQUE2QixTQUFRLHVCQUF1QjtBQUVoRSxlQUFXLFVBQVUsZ0JBQVcsTUFBTTtBQUN0QyxRQUFJO0FBQ0YsWUFBTSxRQUFRLFFBQVEsNEJBQTRCLE9BQU87QUFDekQsaUJBQVcsVUFBVSxnQkFBVyxJQUFJO0FBQ3BDLGlCQUFXLE1BQU07QUFBRSxZQUFJLFNBQVUsVUFBUyxjQUFjO0FBQUEsTUFBSSxHQUFHLEdBQUk7QUFBQSxJQUNyRSxTQUFTLEtBQUs7QUFDWixNQUFBQSxNQUFJLEtBQUssdUNBQXVDLEdBQUc7QUFDbkQsaUJBQVcsVUFBVSxlQUFlLE9BQU87QUFBQSxJQUM3QztBQUFBLEVBQ0Y7QUFHQSxXQUFTLFdBQVcsSUFBSSxTQUFTLE9BQU87QUFDdEMsUUFBSSxDQUFDLEdBQUk7QUFDVCxVQUFNLFVBQVU7QUFBQSxNQUNkLElBQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLE1BQU87QUFBQSxNQUNQLE1BQU87QUFBQSxJQUNUO0FBQ0EsT0FBRyxNQUFNLFFBQVMsUUFBUSxLQUFLLEtBQUssUUFBUTtBQUM1QyxPQUFHLGNBQWU7QUFBQSxFQUNwQjs7O0FDemVBO0FBQUE7QUFBQTtBQUFBO0FBQUEscUNBQUFFO0FBQUEsSUFBQTtBQUFBLHFDQUFBQztBQUFBLElBQUE7QUFBQSx1Q0FBQUM7QUFBQSxJQUFBO0FBQUEsZ0NBQUFDO0FBQUEsSUFBQSwrQkFBQUM7QUFBQSxJQUFBLDhCQUFBQztBQUFBLElBQUEscUNBQUFDO0FBQUEsSUFBQSx1QkFBQUM7QUFBQSxJQUFBLDZCQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUEsMEJBQUFDO0FBQUEsSUFBQTtBQUFBLHVCQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUE4QkEsTUFBTUMsUUFBTSxVQUFVLGlCQUFpQjtBQVV2QyxXQUFTQyx5QkFBd0IsT0FBTztBQUN0QyxRQUFJLENBQUMsTUFBTyxRQUFPO0FBQ25CLFdBQU8sMkJBQTJCLEtBQUssS0FBSyxPQUFPLEtBQUssRUFBRSxRQUFRLE1BQU0sR0FBRztBQUFBLEVBQzdFO0FBTUEsV0FBU0MsNkJBQTRCO0FBQ25DLFFBQUksT0FBTyx3QkFBd0IsWUFBWTtBQUM3QyxhQUFPLG9CQUFvQjtBQUFBLElBQzdCO0FBQ0EsUUFBSTtBQUNGLGFBQU8sSUFBSSxnQkFBZ0IsT0FBTyxTQUFTLE1BQU0sRUFBRSxJQUFJLFNBQVM7QUFBQSxJQUNsRSxTQUFTQyxJQUFHO0FBQ1YsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsV0FBUyw2QkFBNkI7QUFDcEMsUUFBSSxPQUFPLGtCQUFrQixZQUFZO0FBQ3ZDLGFBQU8sY0FBYztBQUFBLElBQ3ZCO0FBQ0EsUUFBSTtBQUNGLGFBQU8sZUFBZSxRQUFRLHdCQUF3QjtBQUFBLElBQ3hELFNBQVNBLElBQUc7QUFDVixhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxXQUFTQywyQkFBMEIsU0FBUyxDQUFDLEdBQUc7QUFDOUMsVUFBTSxnQkFBZ0IsT0FBTyxpQkFBaUIsSUFBSSxTQUFTLEVBQUUsS0FBSztBQUNsRSxVQUFNLFFBQVFILHlCQUF3QixPQUFPLEtBQUs7QUFDbEQsUUFBSSxjQUFjO0FBQ2hCLGFBQU8sR0FBRyxZQUFZLFNBQU0sS0FBSztBQUFBLElBQ25DO0FBQ0EsV0FBT0MsMkJBQTBCLElBQUksZ0JBQWEsS0FBSyxLQUFLO0FBQUEsRUFDOUQ7QUFFQSxXQUFTRywrQkFBOEIsU0FBUztBQUFBLElBQzlDLG1CQUFtQkgsMkJBQTBCO0FBQUEsRUFDL0MsSUFBSSxDQUFDLEdBQUc7QUFDTixRQUFJLENBQUMsV0FBVyxPQUFPLFlBQVksVUFBVTtBQUMzQyxhQUFPLEVBQUUsT0FBTyxXQUFXLFdBQVcsNEJBQTRCLFdBQVcsTUFBTTtBQUFBLElBQ3JGO0FBRUEsVUFBTSxtQkFBbUIsUUFBUSxnQkFBZ0IsS0FBSyxRQUFRLGVBQWU7QUFDN0UsVUFBTSxZQUFZLFFBQVEsUUFBUSxrQkFBa0I7QUFFcEQsUUFBSSxrQkFBa0I7QUFDcEIsYUFBTyxFQUFFLE9BQU8sZUFBZSxXQUFXLDBCQUEwQixXQUFXLEtBQUs7QUFBQSxJQUN0RjtBQUNBLFFBQUksV0FBVztBQUNiLGFBQU8sRUFBRSxPQUFPLHFCQUFxQixXQUFXLDBCQUEwQixXQUFXLE1BQU07QUFBQSxJQUM3RjtBQUNBLFFBQUksUUFBUSxTQUFTO0FBQ25CLGFBQU8sRUFBRSxPQUFPLHdCQUF3QixXQUFXLHdCQUF3QixXQUFXLE1BQU07QUFBQSxJQUM5RjtBQUNBLFdBQU8sRUFBRSxPQUFPLGFBQWEsV0FBVyw0QkFBNEIsV0FBVyxNQUFNO0FBQUEsRUFDdkY7QUFFQSxXQUFTSSx3QkFBdUIsV0FBVyxFQUFFLGNBQWMsS0FBSyxJQUFJLENBQUMsR0FBRztBQUN0RSxRQUFJLENBQUMsVUFBVyxRQUFPO0FBQ3ZCLFFBQUk7QUFDRixhQUFPLElBQUksS0FBSyxTQUFTLEVBQUUsZUFBZSxTQUFTO0FBQUEsUUFDakQsT0FBTztBQUFBLFFBQVMsS0FBSztBQUFBLFFBQVcsTUFBTTtBQUFBLFFBQ3RDLEdBQUksY0FBYyxFQUFFLE1BQU0sV0FBVyxRQUFRLFVBQVUsSUFBSSxDQUFDO0FBQUEsTUFDOUQsQ0FBQztBQUFBLElBQ0gsU0FBU0gsSUFBRztBQUNWLGFBQU8sT0FBTyxTQUFTLEVBQUUsUUFBUSxLQUFLLEdBQUcsRUFBRSxNQUFNLEdBQUcsY0FBYyxLQUFLLEVBQUU7QUFBQSxJQUMzRTtBQUFBLEVBQ0Y7QUFNQSxNQUFNLHlCQUF5QjtBQU0vQixXQUFTLG1CQUFtQixTQUFTO0FBQ25DLFVBQU0sV0FBVyxTQUFTLGVBQWUseUJBQXlCO0FBQ2xFLFVBQU0sU0FBVyxTQUFTLGVBQWUsdUJBQXVCO0FBQ2hFLFVBQU0sV0FBVyxTQUFTLGVBQWUseUJBQXlCO0FBQ2xFLFVBQU0sV0FBVyxTQUFTLGVBQWUsd0JBQXdCO0FBQ2pFLFVBQU0sV0FBVyxTQUFTLGVBQWUsd0JBQXdCO0FBQ2pFLFFBQUksU0FBVSxVQUFTLE1BQU0sVUFBVSxZQUFZLFlBQVksS0FBSztBQUNwRSxRQUFJLE9BQVUsUUFBTyxNQUFNLFVBQVksWUFBWSxVQUFZLEtBQUs7QUFDcEUsUUFBSSxTQUFVLFVBQVMsTUFBTSxVQUFVLFlBQVksWUFBWSxLQUFLO0FBRXBFLFFBQUksU0FBVSxVQUFTLE1BQU0sVUFBVyxZQUFZLGFBQWEsWUFBWSxVQUFXLFNBQVM7QUFDakcsUUFBSSxTQUFVLFVBQVMsTUFBTSxVQUFVLFlBQVksWUFBWSxTQUFTO0FBRXhFLFVBQU0sZ0JBQWdCLFdBQVcsU0FBUyxjQUFjLGdCQUFnQixJQUFJO0FBQzVFLFFBQUksZUFBZTtBQUNqQixVQUFJLFlBQVksU0FBUztBQUN2QixzQkFBYyxjQUFjO0FBQzVCLHNCQUFjLFVBQVUsTUFBTTtBQUFFLDRCQUFrQjtBQUFHLGNBQUksT0FBTyxzQkFBc0IsV0FBWSxtQkFBa0I7QUFBQSxRQUFHO0FBQUEsTUFDekgsT0FBTztBQUNMLHNCQUFjLGNBQWM7QUFDNUIsc0JBQWMsVUFBVSxNQUFNO0FBQzVCLDRCQUFrQjtBQUNsQixjQUFJLE9BQU8sY0FBYyxXQUFZLFdBQVUsS0FBSztBQUFBLFFBQ3REO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBT0EsV0FBUyxvQkFBb0IsY0FBYztBQUN6QyxVQUFNLFVBQVcsU0FBUyxlQUFlLDBCQUEwQjtBQUNuRSxVQUFNLFNBQVcsU0FBUyxlQUFlLDJCQUEyQjtBQUNwRSxVQUFNLFdBQVcsU0FBUyxlQUFlLHlCQUF5QjtBQUNsRSxRQUFJLE9BQVUsUUFBTyxjQUFnQixnQkFBZ0I7QUFDckQsUUFBSSxTQUFVLFVBQVMsY0FBYztBQUNyQyx1QkFBbUIsU0FBUztBQUM1QixRQUFJLFNBQVM7QUFDWCxjQUFRLE1BQU0sVUFBVTtBQUN4QiwrQkFBeUIsT0FBTztBQUFBLElBQ2xDO0FBQUEsRUFDRjtBQU9BLGlCQUFlSSx5QkFBd0I7QUFDckMsUUFBSTtBQUNGLFVBQUksYUFBYSxRQUFRLHNCQUFzQixFQUFHO0FBQUEsSUFDcEQsU0FBU0osSUFBRztBQUFBLElBQUM7QUFDYixRQUFJLFVBQVU7QUFDZCxRQUFJO0FBQ0YsWUFBTSxNQUFNLE1BQU0sTUFBTSw2QkFBNkI7QUFDckQsVUFBSSxJQUFJLElBQUk7QUFDVixjQUFNLE9BQU8sTUFBTSxJQUFJLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQyxFQUFFO0FBQzlDLFlBQUksQ0FBQyxLQUFLLFFBQVE7QUFDaEIsZ0JBQU0sU0FBUyxTQUFTLGVBQWUsMkJBQTJCO0FBQ2xFLGNBQUksT0FBUSxRQUFPLGNBQWMsS0FBSyxRQUFRO0FBQzlDLG9CQUFVO0FBQUEsUUFDWixXQUFXLEtBQUssVUFBVTtBQUN4QixvQkFBVTtBQUFBLFFBQ1o7QUFBQSxNQUNGO0FBQUEsSUFDRixTQUFTQSxJQUFHO0FBQUEsSUFBQztBQUNiLFVBQU0sV0FBVyxTQUFTLGVBQWUseUJBQXlCO0FBQ2xFLFFBQUksU0FBVSxVQUFTLGNBQWM7QUFDckMsdUJBQW1CLE9BQU87QUFDMUIsVUFBTSxVQUFVLFNBQVMsZUFBZSwwQkFBMEI7QUFDbEUsUUFBSSxTQUFTO0FBQ1gsY0FBUSxNQUFNLFVBQVU7QUFDeEIsK0JBQXlCLE9BQU87QUFBQSxJQUNsQztBQUFBLEVBQ0Y7QUFHQSxXQUFTLHlCQUF5QixTQUFTO0FBQ3pDLFFBQUksT0FBTyxXQUFXLG9CQUFvQixXQUFZLFlBQVcsZ0JBQWdCLDBCQUEwQjtBQUMzRyxRQUFJLE9BQU8sV0FBVyxjQUFjLFdBQWtCLFlBQVcsVUFBVSwwQkFBMEI7QUFDckcsUUFBSSxDQUFDLFFBQVEsdUJBQXVCO0FBQ2xDLGNBQVEsd0JBQXdCLENBQUMsTUFBTTtBQUNyQyxZQUFJLEVBQUUsUUFBUSxTQUFVLG1CQUFrQjtBQUFBLE1BQzVDO0FBQ0EsY0FBUSxpQkFBaUIsV0FBVyxRQUFRLHFCQUFxQjtBQUFBLElBQ25FO0FBQUEsRUFDRjtBQU1BLGlCQUFlLG1CQUFtQjtBQUNoQyxRQUFJLFVBQVU7QUFDZCxRQUFJO0FBQ0YsWUFBTSxNQUFNLE1BQU0sTUFBTSw2QkFBNkI7QUFDckQsVUFBSSxJQUFJLElBQUk7QUFDVixjQUFNLE9BQU8sTUFBTSxJQUFJLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQyxFQUFFO0FBQzlDLFlBQUksQ0FBQyxLQUFLLFFBQVE7QUFDaEIsZ0JBQU0sU0FBUyxTQUFTLGVBQWUsMkJBQTJCO0FBQ2xFLGNBQUksT0FBUSxRQUFPLGNBQWMsS0FBSyxRQUFRO0FBQzlDLG9CQUFVO0FBQUEsUUFDWixXQUFXLEtBQUssVUFBVTtBQUN4QixvQkFBVTtBQUFBLFFBQ1o7QUFBQSxNQUNGO0FBQUEsSUFDRixTQUFTQSxJQUFHO0FBQUEsSUFBQztBQUNiLFVBQU0sV0FBVyxTQUFTLGVBQWUseUJBQXlCO0FBQ2xFLFFBQUksU0FBVSxVQUFTLGNBQWM7QUFDckMsdUJBQW1CLE9BQU87QUFDMUIsVUFBTSxVQUFVLFNBQVMsZUFBZSwwQkFBMEI7QUFDbEUsUUFBSSxTQUFTO0FBQ1gsY0FBUSxNQUFNLFVBQVU7QUFDeEIsK0JBQXlCLE9BQU87QUFBQSxJQUNsQztBQUFBLEVBQ0Y7QUFNQSxXQUFTLG9CQUFvQjtBQUMzQixVQUFNLFVBQVcsU0FBUyxlQUFlLDBCQUEwQjtBQUNuRSxVQUFNLFdBQVcsU0FBUyxlQUFlLHlCQUF5QjtBQUNsRSxRQUFJLFNBQVM7QUFDWCxjQUFRLE1BQU0sVUFBVTtBQUN4QixVQUFJLFFBQVEsdUJBQXVCO0FBQ2pDLGdCQUFRLG9CQUFvQixXQUFXLFFBQVEscUJBQXFCO0FBQ3BFLGVBQU8sUUFBUTtBQUFBLE1BQ2pCO0FBQUEsSUFDRjtBQUNBLFFBQUksWUFBWSxTQUFTLFNBQVM7QUFDaEMsVUFBSTtBQUFFLHFCQUFhLFFBQVEsd0JBQXdCLEdBQUc7QUFBQSxNQUFHLFNBQVNBLElBQUc7QUFBQSxNQUFDO0FBQUEsSUFDeEU7QUFDQSxRQUFJLE9BQU8sV0FBVyxpQkFBaUIsV0FBWSxZQUFXLGFBQWE7QUFBQSxFQUM3RTtBQU1BLGlCQUFlLCtCQUErQjtBQUM1QyxVQUFNLE1BQVcsU0FBUyxlQUFlLHVCQUF1QjtBQUNoRSxVQUFNLFdBQVcsU0FBUyxlQUFlLHlCQUF5QjtBQUNsRSxRQUFJLElBQUssS0FBSSxXQUFXO0FBQ3hCLFFBQUksU0FBVSxVQUFTLGNBQWM7QUFDckMsUUFBSTtBQUNGLFlBQU0sTUFBTyxNQUFNLE1BQU0sK0JBQStCLEVBQUUsUUFBUSxPQUFPLENBQUM7QUFDMUUsWUFBTSxPQUFPLE1BQU0sSUFBSSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUMsRUFBRTtBQUM5QyxVQUFJLENBQUMsSUFBSSxJQUFJO0FBQ1gsY0FBTSxNQUFNLEtBQUssVUFBVSxtQkFDdkIsdURBQ0MsS0FBSyxTQUFTLGdCQUFnQixJQUFJLE1BQU07QUFDN0MsWUFBSSxTQUFVLFVBQVMsY0FBYztBQUNyQyxZQUFJLElBQUssS0FBSSxXQUFXO0FBQ3hCO0FBQUEsTUFDRjtBQUVBLFVBQUksU0FBVSxVQUFTLGNBQWM7QUFDckMsWUFBTUssNkJBQTRCO0FBQUEsSUFDcEMsU0FBUyxLQUFLO0FBQ1osVUFBSSxTQUFVLFVBQVMsY0FBYyxVQUFVLElBQUksT0FBTztBQUMxRCxVQUFJLElBQUssS0FBSSxXQUFXO0FBQUEsSUFDMUI7QUFBQSxFQUNGO0FBTUEsaUJBQWVBLCtCQUE4QjtBQUMzQyxVQUFNLE9BQU8sTUFBTSxjQUFjO0FBQ2pDLFFBQUksS0FBSyxVQUFVLHFCQUFxQjtBQUN0QywwQkFBb0IsS0FBSyxrQkFBa0IsRUFBRTtBQUM3QztBQUFBLElBQ0Y7QUFDQSxRQUFJLENBQUMsS0FBSyxXQUFZLE9BQU0sSUFBSSxNQUFNLDBCQUEwQjtBQUtoRSxRQUFJO0FBQUUsbUJBQWEsV0FBVyx5QkFBeUI7QUFBQSxJQUFHLFNBQVNMLElBQUc7QUFBQSxJQUFDO0FBQ3ZFLFdBQU8sU0FBUyxPQUFPLEtBQUssZ0JBQWdCLGFBQWEsS0FBSyxVQUFVLEVBQUU7QUFBQSxFQUM1RTtBQUVBLGlCQUFlLDJCQUEyQjtBQUN4QyxVQUFNLE9BQU8sTUFBTSxjQUFjO0FBQ2pDLFFBQUksS0FBSyxVQUFVLHFCQUFxQjtBQUN0QywwQkFBb0IsS0FBSyxrQkFBa0IsRUFBRTtBQUM3QztBQUFBLElBQ0Y7QUFDQSxRQUFJLENBQUMsS0FBSyxXQUFZLE9BQU0sSUFBSSxNQUFNLDBCQUEwQjtBQUNoRSxXQUFPLEtBQUssS0FBSyxnQkFBZ0IsYUFBYSxLQUFLLFVBQVUsSUFBSSxVQUFVLFVBQVU7QUFBQSxFQUN2RjtBQU1BLGlCQUFlLHFCQUFxQixrQkFBa0I7QUFDcEQsVUFBTSxNQUFNLE1BQU0sTUFBTSx1QkFBdUI7QUFBQSxNQUM3QyxRQUFRO0FBQUEsTUFDUixTQUFTLEVBQUUsZ0JBQWdCLG1CQUFtQjtBQUFBLE1BQzlDLE1BQU0sS0FBSyxVQUFVO0FBQUEsUUFDbkIsWUFBWTtBQUFBLFFBQ1osYUFBYSxjQUFjO0FBQUEsTUFDN0IsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUVELFVBQU0sT0FBTyxNQUFNLElBQUksS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDLEVBQUU7QUFDOUMsUUFBSSxJQUFJLE1BQU0sS0FBSyxPQUFPLE1BQU8sUUFBTztBQUV4QyxRQUFJLElBQUksV0FBVyxPQUFPLEtBQUssVUFBVSxpQkFBaUI7QUFDeEQsWUFBTSxTQUFTLE1BQU07QUFBQSxRQUNuQjtBQUFBLE1BQ0Y7QUFDQSxVQUFJLFdBQVcsT0FBTztBQUNwQixjQUFNSyw2QkFBNEI7QUFDbEMsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLFdBQVcsWUFBWTtBQUN6QixpQ0FBeUIsaURBQWlEO0FBQzFFLDBCQUFrQixFQUFFLFVBQVUsS0FBSyxDQUFDO0FBQ3BDLGVBQU87QUFBQSxNQUNUO0FBRUEsWUFBTSxjQUFjLE1BQU0sTUFBTSwwQkFBMEI7QUFBQSxRQUN4RCxRQUFRO0FBQUEsUUFDUixTQUFTLEVBQUUsZ0JBQWdCLG1CQUFtQjtBQUFBLFFBQzlDLE1BQU0sS0FBSyxVQUFVO0FBQUEsVUFDbkIsWUFBWTtBQUFBLFVBQ1osYUFBYSxjQUFjO0FBQUEsUUFDN0IsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUNELFlBQU0sZUFBZSxNQUFNLFlBQVksS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDLEVBQUU7QUFDOUQsVUFBSSxDQUFDLFlBQVksSUFBSTtBQUNuQixjQUFNLElBQUksTUFBTSxhQUFhLFNBQVMsNkJBQTZCO0FBQUEsTUFDckU7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksSUFBSSxXQUFXLE9BQU8sS0FBSyxVQUFVLHFCQUFxQjtBQUM1RCwrQkFBeUIsMEVBQTBFO0FBQ25HLHdCQUFrQixFQUFFLFVBQVUsS0FBSyxDQUFDO0FBQ3BDLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTSxJQUFJLE1BQU0sS0FBSyxTQUFTLDRCQUE0QixJQUFJLE1BQU0sR0FBRztBQUFBLEVBQ3pFO0FBTUEsV0FBUyx5QkFBeUIsVUFBVSxJQUFJO0FBQzlDLElBQUFDLGNBQWEsY0FBYyxLQUFLO0FBQ2hDLElBQUFBLGNBQWEsU0FBU0MsUUFBTyxJQUFJO0FBQ2pDLHdCQUFvQixLQUFLO0FBQ3pCLHdCQUFvQixDQUFDLENBQUM7QUFFdEIsVUFBTSxVQUFVLFNBQVMsZUFBZSxrQkFBa0I7QUFDMUQsUUFBSSxDQUFDLFFBQVM7QUFFZCxZQUFRLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBV2QsVUFBVSxnRUFBZ0UsV0FBVyxPQUFPLENBQUMsU0FBUyxFQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTWhIO0FBRUEsV0FBUyxvQkFBb0IsY0FBYztBQUN6QyxVQUFNLGNBQWM7QUFBQSxNQUNsQixDQUFDQSxRQUFPLElBQUksR0FBZTtBQUFBLE1BQzNCLENBQUNBLFFBQU8sWUFBWSxHQUFPO0FBQUEsTUFDM0IsQ0FBQ0EsUUFBTyxhQUFhLEdBQU07QUFBQSxNQUMzQixDQUFDQSxRQUFPLGNBQWMsR0FBSztBQUFBLE1BQzNCLENBQUNBLFFBQU8sV0FBVyxHQUFRO0FBQUEsTUFDM0IsQ0FBQ0EsUUFBTyxVQUFVLEdBQVM7QUFBQSxNQUMzQixDQUFDQSxRQUFPLGFBQWEsR0FBTTtBQUFBLE1BQzNCLENBQUNBLFFBQU8sZ0JBQWdCLEdBQUc7QUFBQSxNQUMzQixDQUFDQSxRQUFPLFVBQVUsR0FBUztBQUFBLElBQzdCO0FBQ0EsVUFBTSxZQUFZLFlBQVksWUFBWSxLQUFLO0FBRS9DLFFBQUksT0FBTyxjQUFjLFlBQVk7QUFDbkMsZ0JBQVUsU0FBUztBQUFBLElBQ3JCLE9BQU87QUFDTCxNQUFBRCxjQUFhLGNBQWMsU0FBUztBQUFBLElBQ3RDO0FBQUEsRUFDRjtBQUVBLFdBQVMsc0JBQXNCLFlBQVk7QUFDekMsVUFBTSxRQUFRLFlBQVksU0FBU0MsUUFBTztBQUcxQyxRQUFJLENBQUMsWUFBWSxjQUFjO0FBQzdCLGFBQU9BLFFBQU87QUFBQSxJQUNoQjtBQU9BLFNBQ0csVUFBVUEsUUFBTyxpQkFBaUIsVUFBVUEsUUFBTyxtQkFDakQsQ0FBQyxZQUFZLGdCQUNoQjtBQUNBLGFBQU9BLFFBQU87QUFBQSxJQUNoQjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBTUEsaUJBQWVDLHdCQUF1QjtBQUNwQyxVQUFNLGVBQWUsb0JBQW9CO0FBQ3pDLFFBQUksQ0FBQyxjQUFjO0FBQ2pCLCtCQUF5QjtBQUN6Qix3QkFBa0IsRUFBRSxVQUFVLEtBQUssQ0FBQztBQUNwQyxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFGLGNBQWEsYUFBYSxZQUFZO0FBQ3RDLFdBQU8scUJBQXFCLFlBQVk7QUFBQSxFQUMxQztBQUVBLFdBQVMsa0NBQWtDO0FBQ3pDLFVBQU0sUUFBUUEsY0FBYSxTQUFTO0FBQ3BDLFVBQU0saUJBQWlCQSxjQUFhLFdBQVcsZ0JBQWdCLEtBQUssT0FBTztBQUMzRSxVQUFNLFFBQVEsQ0FBQztBQUVmLFFBQUksZ0JBQWdCO0FBQ2xCLFlBQU0sWUFBWSxlQUFlLDJCQUEyQixDQUFDLEdBQUc7QUFDaEUsVUFBSSxXQUFXLEVBQUcsT0FBTSxLQUFLLEdBQUcsUUFBUSxjQUFjLGFBQWEsSUFBSSxNQUFNLEVBQUUsY0FBYztBQUM3RixZQUFNLGNBQWMsZUFBZSxzQkFBc0IsQ0FBQyxHQUFHO0FBQzdELFVBQUksYUFBYSxFQUFHLE9BQU0sS0FBSyxHQUFHLFVBQVUsU0FBUyxlQUFlLElBQUksTUFBTSxFQUFFLGNBQWM7QUFBQSxJQUNoRztBQUVBLFVBQU0sWUFBWSxPQUFPLG1CQUFtQixDQUFDO0FBQzdDLFVBQU0sbUJBQW1CLE1BQU0sUUFBUSxPQUFPLGdCQUFnQixJQUFJLE9BQU8saUJBQWlCLFNBQ3RGLE9BQU8sS0FBSyxVQUFVLHdCQUF3QixDQUFDLENBQUMsRUFBRTtBQUN0RCxRQUFJLG1CQUFtQixFQUFHLE9BQU0sS0FBSyxHQUFHLGdCQUFnQixXQUFXLHFCQUFxQixJQUFJLE1BQU0sRUFBRSxXQUFXO0FBRS9HLFVBQU0sTUFBTUEsY0FBYSxZQUFZO0FBQ3JDLFFBQUksT0FBTyxPQUFPLElBQUksWUFBWSxVQUFVO0FBQzFDLFlBQU0sS0FBSyxhQUFhLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHO0FBQUEsSUFDcEQ7QUFFQSxRQUFJLE1BQU0sU0FBUyxHQUFHO0FBQ3BCLFlBQU0sYUFBYSwyQkFBMkIsS0FBSyxLQUFLLE9BQU8sS0FBSyxFQUFFLFFBQVEsTUFBTSxHQUFHO0FBQ3ZGLFlBQU0sY0FBYyxPQUFPLHdCQUF3QixRQUFRLE9BQU8scUJBQXFCLEtBQUs7QUFDNUYsb0JBQWMsVUFBVSxxQkFBYyxXQUFXLGNBQWMsVUFBVSxXQUFNLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRztBQUFBLElBQ3BHO0FBQUEsRUFDRjtBQUVBLGlCQUFlRyxrQkFBaUI7QUFDOUIsUUFBSTtBQUNGLE1BQUFILGNBQWEsa0JBQWtCLElBQUk7QUFFbkMsWUFBTSxrQkFBa0Isb0JBQW9CLEtBQUssYUFBYSxRQUFRLFlBQVksVUFBVTtBQUM1RixVQUFJLENBQUMsaUJBQWlCO0FBQ3BCLFFBQUFBLGNBQWEsa0JBQWtCLEtBQUs7QUFDcEM7QUFBQSxNQUNGO0FBQ0EsTUFBQUEsY0FBYSxhQUFhLGVBQWU7QUFHekMsWUFBTSxhQUFhLE1BQU0sTUFBTSxjQUFjO0FBQzdDLFVBQUksV0FBVyxJQUFJO0FBQ2pCLGNBQU0sY0FBYyxNQUFNLFdBQVcsS0FBSztBQUcxQyxjQUFNLGVBQWUsU0FBUyxlQUFlLGNBQWM7QUFDM0QscUJBQWEsWUFBWTtBQUd6QixZQUFJLFlBQVksV0FBVyxZQUFZLFFBQVEsU0FBUyxHQUFHO0FBRXpELHNCQUFZLFFBQVEsUUFBUSxTQUFPO0FBQ2pDLGdCQUFJLElBQUksU0FBUyxRQUFRO0FBQ3ZCLDRCQUFjLFFBQVEsSUFBSSxPQUFPO0FBQUEsWUFDbkMsV0FBVyxJQUFJLFNBQVMsYUFBYTtBQUNuQyw0QkFBYyxhQUFhLElBQUksT0FBTztBQUFBLFlBQ3hDO0FBQUEsVUFDRixDQUFDO0FBRUQsd0JBQWMsVUFBVSx5Q0FBa0M7QUFDMUQsVUFBQVQsTUFBSSxLQUFLLFlBQVksWUFBWSxRQUFRLE1BQU0sd0JBQXdCO0FBQUEsUUFDekU7QUFHQSxZQUFJLFlBQVksT0FBTztBQUNyQixVQUFBUyxjQUFhLFNBQVMsWUFBWSxLQUFLO0FBQUEsUUFDekM7QUFBQSxNQUNGO0FBSUEsWUFBTSxnQkFBZ0IsTUFBTSxvQkFBb0I7QUFHaEQscUJBQWUsRUFBRSxhQUFhLGNBQWMsQ0FBQztBQUc3QyxVQUFJLGVBQWU7QUFDakIsd0NBQWdDO0FBQUEsTUFDbEM7QUFFQSxNQUFBQSxjQUFhLGtCQUFrQixLQUFLO0FBR3BDLFVBQUksT0FBTyxXQUFXLHFCQUFxQixZQUFZO0FBQ3JELG1CQUFXLGlCQUFpQixFQUFFLE1BQU0sTUFBTTtBQUFBLFFBQUMsQ0FBQztBQUFBLE1BQzlDO0FBQUEsSUFFRixTQUFTLE9BQU87QUFDZCxNQUFBVCxNQUFJLEtBQUssK0JBQStCLEtBQUs7QUFDN0Msb0JBQWMsVUFBVSxxRUFBMkQsTUFBTSxPQUFPLEdBQUc7QUFDbkcsTUFBQVMsY0FBYSxrQkFBa0IsS0FBSztBQUFBLElBQ3RDO0FBQUEsRUFDRjtBQUVBLFdBQVMsMkJBQTJCLFlBQVk7QUFDOUMsV0FBTyxtQkFBbUIsQ0FBQztBQUMzQixRQUFJO0FBQ0YsVUFBSSxXQUFXLHFCQUFxQixPQUFPLEtBQUssV0FBVyxpQkFBaUIsRUFBRSxTQUFTLEdBQUc7QUFDeEYsbUJBQVcsQ0FBQ0ksSUFBR0MsRUFBQyxLQUFLLE9BQU8sUUFBUSxXQUFXLGlCQUFpQixHQUFHO0FBQ2pFLGdCQUFNLE1BQU0sU0FBU0QsSUFBRyxFQUFFO0FBQzFCLGdCQUFNLFdBQVcsTUFBTSxRQUFRQyxFQUFDLElBQUlBLEtBQUksQ0FBQ0EsRUFBQztBQUMxQyxpQkFBTyxpQkFBaUIsR0FBRyxJQUFJLFNBQVMsSUFBSSxVQUFRO0FBQ2xELGdCQUFJLFFBQVEsT0FBTyxTQUFTLFlBQVksQ0FBQyxNQUFNLFFBQVEsSUFBSSxHQUFHO0FBQzVELHFCQUFPO0FBQUEsZ0JBQ0wsTUFBTSxPQUFPLEtBQUssUUFBUSxLQUFLLGVBQWUsS0FBSyxXQUFXLEVBQUU7QUFBQSxnQkFDaEUsUUFBUSxRQUFRLEtBQUssTUFBTTtBQUFBLGNBQzdCO0FBQUEsWUFDRjtBQUNBLG1CQUFPO0FBQUEsY0FDTCxNQUFNLE9BQU8sUUFBUSxFQUFFO0FBQUEsY0FDdkIsUUFBUTtBQUFBLFlBQ1Y7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0YsU0FBU0MsS0FBSTtBQUFBLElBQWtCO0FBRS9CLFdBQU8sa0JBQWtCO0FBQUEsTUFDdkIsc0JBQXNCLFdBQVcsd0JBQXdCLENBQUM7QUFBQSxNQUMxRCxpQkFBc0IsV0FBVyxtQkFBd0IsQ0FBQztBQUFBLE1BQzFELHVCQUFzQixXQUFXLHlCQUF5QixDQUFDO0FBQUEsTUFDM0QsdUJBQXNCLFdBQVcseUJBQXlCLENBQUM7QUFBQSxNQUMzRCx3QkFBd0IsV0FBVywwQkFBMEI7QUFBQSxNQUM3RCxjQUF3QixXQUFXLGdCQUFnQixDQUFDO0FBQUEsTUFDcEQscUJBQXdCLFdBQVcsdUJBQXVCLENBQUM7QUFBQSxJQUM3RDtBQUNBLFdBQU8sa0JBQWtCLFdBQVcsbUJBQW1CLENBQUM7QUFDeEQsV0FBTyxxQkFBcUIsV0FBVywwQkFBMEIsV0FBVyx3QkFBd0I7QUFDcEcsV0FBTyxvQkFBb0IsV0FBVyx1QkFBdUIsQ0FBQztBQUM5RCxXQUFPLGdCQUFnQixXQUFXLFVBQVUsT0FBTyxXQUFXLFdBQVcsV0FDckUsV0FBVyxTQUNYLENBQUM7QUFDTCxXQUFPLHdCQUF3QixNQUFNLFFBQVEsV0FBVyx1QkFBdUIsSUFDM0UsV0FBVywwQkFDWCxDQUFDO0FBQ0wsV0FBTyxrQkFBbUIsV0FBVyx5QkFBeUIsT0FBTyxXQUFXLDBCQUEwQixXQUN0RyxXQUFXLHdCQUNYLENBQUM7QUFDTCxXQUFPLHdCQUF3QixXQUFXLGlCQUFpQjtBQUFBLEVBQzdEO0FBRUEsV0FBUyx1QkFBdUIsWUFBWTtBQUMxQyxVQUFNLGNBQWMsV0FBVyxpQkFBaUIsVUFBYSxXQUFXLGlCQUFpQjtBQUN6RixVQUFNLG9CQUFvQixXQUFXLG1CQUFtQixVQUFhLFdBQVcsbUJBQW1CO0FBQ25HLFVBQU0sb0JBQW9CLFdBQVcsb0JBQW9CLFVBQWEsV0FBVyxvQkFBb0I7QUFFckcsSUFBQU4sY0FBYSxXQUFXLFlBQVksY0FBYyxXQUFXLGVBQWUsSUFBSTtBQUNoRixJQUFBQSxjQUFhLFdBQVcsa0JBQWtCLG9CQUFvQixXQUFXLGlCQUFpQixJQUFJO0FBQzlGLElBQUFBLGNBQWEsV0FBVyxNQUFNLG9CQUFvQixXQUFXLGtCQUFrQixJQUFJO0FBQ25GLFdBQU8seUJBQXlCLG9CQUFvQixXQUFXLGlCQUFpQjtBQUVoRixRQUFJLGFBQWE7QUFDZixzQkFBZ0IsVUFBVTtBQUFBLElBQzVCO0FBRUEsV0FBTyxlQUFlLHFCQUFxQjtBQUFBLEVBQzdDO0FBRUEsaUJBQWUsc0JBQXNCO0FBRW5DLFFBQUk7QUFDRixZQUFNLFlBQVksTUFBTSxNQUFNLGFBQWE7QUFDM0MsVUFBSSxDQUFDLFVBQVUsR0FBSSxRQUFPO0FBQzFCLFlBQU0sYUFBYSxvQkFBb0IsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUU3RCxVQUFJLE9BQU8sb0JBQW9CLFlBQVk7QUFDekMsd0JBQWdCLFdBQVcsZ0JBQWdCLENBQUMsR0FBRyxXQUFXLGdCQUFnQixJQUFJO0FBQUEsTUFDaEY7QUFFQSxpQ0FBMkIsVUFBVTtBQUVyQyxVQUFJLGdCQUFnQix1QkFBdUIsVUFBVTtBQUVyRCxVQUFJLFdBQVcsaUJBQWlCLFVBQWEsV0FBVyxpQkFBaUIsTUFBTTtBQUM3RSxRQUFBVCxNQUFJLEtBQUssNENBQTRDO0FBQUEsTUFDdkQ7QUFDQSxVQUFJLFdBQVcsbUJBQW1CLFVBQWEsV0FBVyxtQkFBbUIsTUFBTTtBQUNqRixRQUFBQSxNQUFJLEtBQUssa0RBQWtEO0FBQUEsTUFDN0Q7QUFDQSxVQUFJLFdBQVcsb0JBQW9CLFVBQWEsV0FBVyxvQkFBb0IsTUFBTTtBQUNuRixRQUFBQSxNQUFJLEtBQUssc0NBQXNDO0FBQUEsTUFDakQ7QUFFQSxVQUFJO0FBQ0YsY0FBTSxnQkFBZ0IsTUFBTSxNQUFNLDBCQUEwQjtBQUM1RCxZQUFJLGNBQWMsSUFBSTtBQUNwQixnQkFBTSxpQkFBaUIsTUFBTSxjQUFjLEtBQUs7QUFDaEQsY0FBSSxnQkFBZ0IsSUFBSTtBQUN0QixrQkFBTSxvQkFBb0IsUUFBUSxlQUFlLFNBQVM7QUFDMUQsa0JBQU0sNkJBQTZCO0FBQUEsY0FDakMsZUFBZSxxQkFDVixlQUFlLHNCQUNmO0FBQUEsWUFDUDtBQUVBLFlBQUFTLGNBQWEsbUJBQW1CO0FBQUEsY0FDOUIsT0FBTyxlQUFlLFNBQVM7QUFBQSxjQUMvQixrQkFBa0IsUUFBUSxlQUFlLGlCQUFpQjtBQUFBLGNBQzFELGdCQUFnQixlQUFlLG1CQUFtQjtBQUFBLGNBQ2xELGlCQUFpQixRQUFRLGVBQWUsZ0JBQWdCO0FBQUEsY0FDeEQsbUJBQW1CLGVBQWUsdUJBQXVCO0FBQUEsY0FDekQsZ0JBQWdCLGVBQWUsb0JBQW9CO0FBQUEsY0FDbkQscUJBQXFCLGVBQWUseUJBQXlCO0FBQUEsY0FDN0QsaUJBQWlCLGVBQWUscUJBQXFCO0FBQUEsY0FDckQsdUJBQXVCO0FBQUEsZ0JBQ3JCLGVBQWU7QUFBQSxjQUNqQjtBQUFBLGNBQ0EsYUFBYSxRQUFRLGVBQWUsbUJBQW1CO0FBQUEsY0FDdkQseUJBQXlCLGVBQWUsNkJBQTZCO0FBQUEsY0FDckUsa0JBQWtCLGVBQWUsc0JBQXNCO0FBQUEsY0FDdkQsb0JBQW9CLGVBQWUsd0JBQXdCO0FBQUEsY0FDM0Qsa0JBQWtCLGVBQWUsc0JBQXNCO0FBQUEsY0FDdkQsYUFBYSxlQUFlLGdCQUFnQjtBQUFBO0FBQUEsY0FFNUMsa0JBQWtCLFdBQVc7QUFDM0Isc0JBQU1LLEtBQUksZUFBZSxvQkFBb0IsZUFBZTtBQUM1RCx1QkFBUUEsT0FBTSxVQUFhQSxPQUFNLE9BQVEsSUFBSyxPQUFPLFNBQVMsT0FBT0EsRUFBQyxDQUFDLElBQUksT0FBT0EsRUFBQyxJQUFJO0FBQUEsY0FDekYsR0FBRztBQUFBLGNBQ0gsNEJBQTRCLGVBQWUsaUNBQWlDLGVBQWUsOEJBQThCO0FBQUEsY0FDekgsMEJBQTBCLGVBQWUsK0JBQStCLGVBQWUsNEJBQTRCO0FBQUEsWUFDckgsQ0FBQztBQUVELGdCQUFJLG1CQUFtQjtBQUNyQixjQUFBTCxjQUFhLFlBQVksZUFBZSxTQUFTO0FBQUEsWUFDbkQsT0FBTztBQUNMLGNBQUFBLGNBQWEsY0FBYztBQUFBLFlBQzdCO0FBRUEsZ0JBQUksNEJBQTRCO0FBQzlCLDhCQUFnQjtBQUFBLFlBQ2xCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLFNBQVNNLEtBQUk7QUFBQSxNQUFrQjtBQUUvQixZQUFNLGdCQUFnQixzQkFBc0IsVUFBVTtBQUN0RCxNQUFBTixjQUFhLFNBQVMsYUFBYTtBQUNuQywwQkFBb0IsYUFBYTtBQUdqQyxVQUFJLE9BQU8sd0JBQXdCLFdBQVkscUJBQW9CLFVBQVU7QUFFN0UsVUFBSSxPQUFPLDBCQUEwQixXQUFZLHVCQUFzQjtBQUV2RSxVQUFJLENBQUMsV0FBVyxpQkFBaUIsQ0FBQyxXQUFXLGNBQWM7QUFDekQsY0FBTSxhQUFnQixhQUFhLFFBQVEsWUFBWSxZQUFZO0FBQ25FLGNBQU0sZ0JBQWdCLGFBQWEsUUFBUSxZQUFZLFVBQVU7QUFDakUsY0FBTSxpQkFBaUIsc0JBQXNCLG9CQUFvQixJQUFJO0FBS3JFLFlBQUksY0FBYyxpQkFBaUIsa0JBQWtCLGdCQUFnQjtBQUtuRSxnQkFBTSxTQUFTLE1BQU1PLGlCQUFnQixZQUFZLEVBQUUsb0JBQW9CLE1BQU0sQ0FBQztBQUM5RSxjQUFJLE9BQVEsUUFBTztBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUVBLGFBQU87QUFBQSxJQUNULFNBQVMsT0FBTztBQUNkLE1BQUFoQixNQUFJLEtBQUssb0NBQW9DLEtBQUs7QUFDbEQsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsaUJBQWVnQixpQkFBZ0IsTUFBTSxFQUFFLHFCQUFxQixLQUFLLElBQUksQ0FBQyxHQUFHO0FBQ3ZFLFFBQUk7QUFDRixvQkFBYyxVQUFVLDBDQUFtQztBQUMzRCxZQUFNLE1BQU0sTUFBTSxNQUFNLHFCQUFxQjtBQUFBLFFBQzNDLFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxLQUFLLENBQUM7QUFBQSxNQUMvQixDQUFDO0FBQ0QsVUFBSSxDQUFDLElBQUksSUFBSTtBQUNYLGNBQU0sTUFBTSxNQUFNLElBQUksS0FBSztBQUMzQixzQkFBYyxVQUFVLHFDQUFnQyxJQUFJLEtBQUssRUFBRTtBQUNuRSxlQUFPO0FBQUEsTUFDVDtBQUNBLFlBQU0sT0FBTyxNQUFNLElBQUksS0FBSztBQUU1QixVQUFJLEtBQUssZ0JBQWdCLG9CQUFvQixNQUFNLEtBQUssWUFBWTtBQUNsRSxZQUFJLENBQUMsb0JBQW9CO0FBS3ZCLFVBQUFoQixNQUFJO0FBQUEsWUFDRjtBQUFBLFlBQ0Esb0JBQW9CO0FBQUEsWUFBRyxLQUFLO0FBQUEsVUFDOUI7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFDQSxlQUFPLFNBQVMsT0FBTyxLQUFLLFlBQVk7QUFDeEMsZUFBTztBQUFBLE1BQ1Q7QUFFQSxtQkFBYSxRQUFRLFlBQVksY0FBYyxLQUFLLGdCQUFnQixJQUFJO0FBR3hFLGFBQU8sd0JBQXdCO0FBRy9CLFlBQU0sYUFBYSxNQUFNLE1BQU0sY0FBYztBQUM3QyxVQUFJLFdBQVcsSUFBSTtBQUNqQixjQUFNLGNBQWMsTUFBTSxXQUFXLEtBQUs7QUFDMUMsY0FBTSxPQUFPLFNBQVMsZUFBZSxjQUFjO0FBQ25ELGFBQUssWUFBWTtBQUNqQixTQUFDLFlBQVksV0FBVyxDQUFDLEdBQUcsUUFBUSxTQUFPO0FBQ3pDLGNBQUksSUFBSSxTQUFTLFNBQVUsZUFBYyxJQUFJLE1BQU0sSUFBSSxPQUFPO0FBQUEsUUFDaEUsQ0FBQztBQUFBLE1BQ0gsT0FBTztBQUNMLHNCQUFjLFVBQVUsZ0RBQTJDO0FBQUEsTUFDckU7QUFFQSxZQUFNLFlBQVk7QUFHbEIsVUFBSSxPQUFPLFdBQVcscUJBQXFCLFlBQVk7QUFDckQsbUJBQVcsaUJBQWlCLEVBQUUsTUFBTSxNQUFNO0FBQUEsUUFBQyxDQUFDO0FBQUEsTUFDOUM7QUFHQSxZQUFNLGVBQWUsS0FBSyxTQUFTVSxRQUFPO0FBQzFDLFlBQU0sY0FBYztBQUFBLFFBQ2xCLENBQUNBLFFBQU8sSUFBSSxHQUFlO0FBQUEsUUFDM0IsQ0FBQ0EsUUFBTyxZQUFZLEdBQU87QUFBQSxRQUMzQixDQUFDQSxRQUFPLGFBQWEsR0FBTTtBQUFBLFFBQzNCLENBQUNBLFFBQU8sY0FBYyxHQUFLO0FBQUEsUUFDM0IsQ0FBQ0EsUUFBTyxXQUFXLEdBQVE7QUFBQSxRQUMzQixDQUFDQSxRQUFPLFVBQVUsR0FBUztBQUFBLFFBQzNCLENBQUNBLFFBQU8sYUFBYSxHQUFNO0FBQUEsUUFDM0IsQ0FBQ0EsUUFBTyxnQkFBZ0IsR0FBRztBQUFBLFFBQzNCLENBQUNBLFFBQU8sVUFBVSxHQUFTO0FBQUEsTUFDN0I7QUFDQSxZQUFNLFlBQVksWUFBWSxZQUFZLEtBQUs7QUFFL0MsWUFBTSxzQkFBc0I7QUFBQSxRQUMxQkEsUUFBTztBQUFBLFFBQWVBLFFBQU87QUFBQSxRQUFnQkEsUUFBTztBQUFBLFFBQ3BEQSxRQUFPO0FBQUEsUUFBWUEsUUFBTztBQUFBLFFBQWVBLFFBQU87QUFBQSxRQUFrQkEsUUFBTztBQUFBLE1BQzNFO0FBQ0EsVUFBSSxvQkFBb0IsU0FBUyxZQUFZLEdBQUc7QUFDOUMsWUFBSTtBQUNGLGdCQUFNLEtBQUssTUFBTSxNQUFNLGFBQWE7QUFDcEMsZ0JBQU0sS0FBSyxvQkFBb0IsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM5QyxxQ0FBMkIsRUFBRTtBQUM3QixpQ0FBdUIsRUFBRTtBQUFBLFFBQzNCLFNBQVNQLElBQUc7QUFBQSxRQUFrQjtBQUFBLE1BQ2hDO0FBR0EsVUFBSSxpQkFBaUJPLFFBQU8sZ0JBQWdCO0FBQzFDLFlBQUk7QUFDRixnQkFBTSxLQUFLLE1BQU0sTUFBTSxlQUFlO0FBQ3RDLGNBQUksR0FBRyxJQUFJO0FBQ1Qsa0JBQU0sS0FBSyxzQkFBc0IsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUNoRCxrQkFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDO0FBQ2pDLGtCQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQztBQUM1QywrQkFBbUIsQ0FBQztBQUNwQiwrQkFBbUIsVUFBVSxRQUFRO0FBQUEsVUFDdkM7QUFBQSxRQUNGLFNBQVNQLElBQUc7QUFBQSxRQUFrQjtBQUFBLE1BQ2hDO0FBRUEsZ0JBQVUsU0FBUztBQUNuQixvQkFBYyxVQUFVLDRCQUF1QixLQUFLLGlCQUFpQixTQUFTLEtBQUsscUJBQXFCLEtBQUssS0FBSyxLQUFLLE9BQU8sS0FBSyxTQUFTTyxRQUFPLElBQUksRUFBRSxRQUFRLE1BQU0sR0FBRyxDQUFDLEdBQUc7QUFDOUssYUFBTztBQUFBLElBQ1QsU0FBUyxLQUFLO0FBQ1osb0JBQWMsVUFBVSxtQ0FBOEIsSUFBSSxPQUFPLEVBQUU7QUFDbkUsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBTUEsaUJBQWUsNkJBQTZCO0FBQzFDLFVBQU0sVUFBVSxTQUFTLGVBQWUsZ0JBQWdCO0FBQ3hELFVBQU0sWUFBWSxTQUFTLGVBQWUsb0JBQW9CO0FBQzlELFVBQU0sV0FBVyxTQUFTLGVBQWUsSUFBSSxLQUFLO0FBR2xELFVBQU0sVUFBVSxTQUFTLGNBQWMsTUFBTTtBQUM3QyxZQUFRLE1BQU0sVUFBVTtBQUN4QixVQUFNLFFBQVEsU0FBUyxjQUFjLE9BQU87QUFDNUMsVUFBTSxPQUFPO0FBQ2IsVUFBTSxRQUFRO0FBQ2QsVUFBTSxhQUFhLGNBQWMsa0JBQWtCO0FBQ25ELFVBQU0sTUFBTSxVQUFVO0FBQ3RCLFVBQU0sUUFBUSxTQUFTLGNBQWMsUUFBUTtBQUM3QyxVQUFNLGNBQWM7QUFDcEIsVUFBTSxRQUFRO0FBQ2QsVUFBTSxhQUFhLGNBQWMsYUFBYTtBQUM5QyxVQUFNLE1BQU0sVUFBVTtBQUN0QixVQUFNLFlBQVksU0FBUyxjQUFjLFFBQVE7QUFDakQsY0FBVSxjQUFjO0FBQ3hCLGNBQVUsUUFBUTtBQUNsQixjQUFVLGFBQWEsY0FBYyxlQUFlO0FBQ3BELGNBQVUsTUFBTSxVQUFVO0FBQzFCLFlBQVEsT0FBTyxPQUFPLE9BQU8sU0FBUztBQUV0QyxRQUFJLFFBQVMsU0FBUSxNQUFNLFVBQVU7QUFDckMsUUFBSSxVQUFXLFdBQVUsTUFBTSxVQUFVO0FBQ3pDLGFBQVMsZUFBZSxhQUFhLFNBQVMsT0FBTztBQUNyRCxVQUFNLE1BQU07QUFDWixVQUFNLE9BQU87QUFFYixtQkFBZSxXQUFXO0FBQ3hCLFlBQU0sVUFBVSxNQUFNLE1BQU0sS0FBSztBQUNqQyxjQUFRO0FBQ1IsVUFBSSxDQUFDLFdBQVcsWUFBWSxRQUFTO0FBQ3JDLFVBQUk7QUFDRixjQUFNLE1BQU8sTUFBTSxNQUFNLCtCQUErQjtBQUFBLFVBQ3RELFFBQVE7QUFBQSxVQUFRLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsVUFDOUQsTUFBTSxLQUFLLFVBQVUsRUFBRSxVQUFVLFFBQVEsQ0FBQztBQUFBLFFBQzVDLENBQUM7QUFDRCxjQUFNLE9BQU8sTUFBTSxJQUFJLEtBQUs7QUFDNUIsWUFBSSxLQUFLLEdBQUksT0FBTSxZQUFZO0FBQUEsaUJBQ3RCLE9BQU8sY0FBYyxXQUFZLFdBQVUsa0JBQWtCLEtBQUssS0FBSyxJQUFJLE9BQU87QUFBQSxNQUM3RixTQUFTLEdBQUc7QUFDVixZQUFJLE9BQU8sY0FBYyxXQUFZLFdBQVUsaUJBQWlCLEVBQUUsT0FBTyxJQUFJLE9BQU87QUFBQSxNQUN0RjtBQUFBLElBQ0Y7QUFFQSxhQUFTLFVBQVU7QUFDakIsY0FBUSxPQUFPO0FBQ2YsVUFBSSxRQUFTLFNBQVEsTUFBTSxVQUFVO0FBQ3JDLFVBQUksVUFBVyxXQUFVLE1BQU0sVUFBVTtBQUFBLElBQzNDO0FBRUEsVUFBTSxpQkFBaUIsU0FBUyxRQUFRO0FBQ3hDLGNBQVUsaUJBQWlCLFNBQVMsT0FBTztBQUMzQyxVQUFNLGlCQUFpQixXQUFXLE9BQUs7QUFDckMsVUFBSSxFQUFFLFFBQVEsUUFBUyxVQUFTO0FBQ2hDLFVBQUksRUFBRSxRQUFRLFNBQVUsU0FBUTtBQUFBLElBQ2xDLENBQUM7QUFBQSxFQUNIO0FBRUEsV0FBU08sZUFBYztBQUNyQixRQUFJO0FBQ0YsbUJBQWEsUUFBUSwyQkFBMkJSLGNBQWEsYUFBYSxDQUFDLEdBQUcsS0FBSyxVQUFVO0FBQUEsUUFDM0YsU0FBU0EsY0FBYSxjQUFjO0FBQUEsUUFDcEMsWUFBWUEsY0FBYSxjQUFjO0FBQUEsUUFDdkMsd0JBQXdCLE9BQU8sMEJBQTBCO0FBQUEsUUFDekQsa0JBQWtCQSxjQUFhLG9CQUFvQjtBQUFBLFFBQ25ELGtCQUFrQixPQUFPLHFCQUFxQjtBQUFBLFFBQzlDLFdBQVcsS0FBSyxJQUFJO0FBQUEsTUFDdEIsQ0FBQyxDQUFDO0FBQUEsSUFDSixTQUFTLE9BQU87QUFDZCxNQUFBVCxNQUFJLEtBQUssNEJBQTRCLEtBQUs7QUFBQSxJQUM1QztBQUFBLEVBQ0Y7QUFFQSxXQUFTLGVBQWUsRUFBRSxjQUFjLE1BQU0sSUFBSSxDQUFDLEdBQUc7QUFDcEQsUUFBSTtBQUNGLFlBQU0sUUFBUSxhQUFhLFFBQVEsMkJBQTJCUyxjQUFhLGFBQWEsQ0FBQyxDQUFDO0FBQzFGLFVBQUksT0FBTztBQUNULGNBQU0sT0FBTyxLQUFLLE1BQU0sS0FBSztBQUU3QixjQUFNLE1BQU0sS0FBSyxJQUFJLEtBQUssS0FBSyxhQUFhO0FBQzVDLFlBQUksTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFNO0FBQzdCLGNBQUksQ0FBQyxhQUFhO0FBQ2hCLGdCQUFJLEtBQUssU0FBUztBQUNoQixxQkFBTyxRQUFRLEtBQUssT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNO0FBQ3JELGdCQUFBQSxjQUFhLFdBQVcsS0FBSyxLQUFLO0FBQUEsY0FDcEMsQ0FBQztBQUFBLFlBQ0g7QUFDQSxnQkFBSSxLQUFLLHdCQUF3QjtBQUMvQixxQkFBTyx5QkFBeUIsS0FBSztBQUFBLFlBQ3ZDO0FBQ0EsZ0JBQUksS0FBSyxrQkFBa0I7QUFDekIsY0FBQUEsY0FBYSxvQkFBb0IsS0FBSyxnQkFBZ0I7QUFBQSxZQUN4RDtBQUFBLFVBQ0Y7QUFDQSxjQUFJLEtBQUssa0JBQWtCO0FBQ3pCLG1CQUFPLG9CQUFvQixLQUFLO0FBQUEsVUFDbEM7QUFFQSxVQUFBVCxNQUFJLEtBQUssb0RBQW9ELFdBQVcsR0FBRztBQUFBLFFBQzdFLE9BQU87QUFDTCx1QkFBYSxXQUFXLDJCQUEyQlMsY0FBYSxhQUFhLENBQUMsQ0FBQztBQUFBLFFBQ2pGO0FBQUEsTUFDRjtBQUFBLElBQ0YsU0FBUyxPQUFPO0FBQ2QsTUFBQVQsTUFBSSxLQUFLLCtCQUErQixLQUFLO0FBQUEsSUFDL0M7QUFBQSxFQUNGOzs7QUNqOEJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDBCQUFBa0I7QUFBQSxJQUFBLHdCQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDS08sV0FBU0MsSUFBNEc7QUFDMUgsV0FBTyxFQUNMLE9BQU8sT0FDUCxRQUFRLE9BQ1IsWUFBWSxNQUNaLEtBQUssTUFDTCxPQUFPLE1BQ1AsVUFBVSxPQUNWLFVBQVUsTUFDVixRQUFRLE9BQ1IsV0FBVyxNQUNYLFlBQVksS0FDZDtFQUNGO0FBRU8sTUFBSUMsSUFBcUNELEVBQWE7QUFFdEQsV0FBU0UsRUFBK0RDLElBQTBEO0FBQ3ZJRixRQUFZRTtFQUNkO0FDeEJBLE1BQU1DLElBQVcsRUFBRSxNQUFNLE1BQU0sS0FBSztBQUVwQyxXQUFTQyxFQUFLQyxJQUF3QkMsSUFBTSxJQUFJO0FBQzlDLFFBQUlDLElBQVMsT0FBT0YsTUFBVSxXQUFXQSxLQUFRQSxHQUFNLFFBQ2pERyxJQUFNLEVBQ1YsU0FBUyxDQUFDQyxHQUF1QkMsTUFBeUI7QUFDeEQsVUFBSUMsSUFBWSxPQUFPRCxLQUFRLFdBQVdBLElBQU1BLEVBQUk7QUFDcEQsYUFBQUMsSUFBWUEsRUFBVSxRQUFRQyxFQUFNLE9BQU8sSUFBSSxHQUMvQ0wsSUFBU0EsRUFBTyxRQUFRRSxHQUFNRSxDQUFTLEdBQ2hDSDtJQUNULEdBQ0EsVUFBVSxNQUNELElBQUksT0FBT0QsR0FBUUQsQ0FBRyxFQUVqQztBQUNBLFdBQU9FO0VBQ1Q7QUFFQSxNQUFNSyxNQUFzQixNQUFNO0FBQ2xDLFFBQUk7QUFFRixhQUFPLENBQUMsQ0FBQyxJQUFJLE9BQU8sY0FBYztJQUNwQyxRQUFRO0FBR04sYUFBTztJQUNUO0VBQ0EsR0FBRztBQVRILE1BV2FELElBQVEsRUFDbkIsa0JBQWtCLDBCQUNsQixtQkFBbUIsZUFDbkIsd0JBQXdCLGlCQUN4QixnQkFBZ0IsUUFDaEIsWUFBWSxNQUNaLG1CQUFtQixNQUNuQixpQkFBaUIsTUFDakIsY0FBYyxRQUNkLG1CQUFtQixPQUNuQixlQUFlLE9BQ2YscUJBQXFCLFFBQ3JCLFdBQVcsWUFDWCxpQkFBaUIscUJBQ2pCLGlCQUFpQixZQUNqQix5QkFBeUIsa0NBQ3pCLDBCQUEwQixvQkFDMUIsb0JBQW9CLDJCQUNwQixZQUFZLGtCQUNaLGlCQUFpQixnQkFDakIsa0JBQWtCLGFBQ2xCLFNBQVMsVUFDVCxjQUFjLFlBQ2QsZ0JBQWdCLFFBQ2hCLGlCQUFpQixjQUNqQixtQkFBbUIsYUFDbkIsaUJBQWlCLGFBQ2pCLGtCQUFrQixjQUNsQixnQkFBZ0IsYUFDaEIsV0FBVyxTQUNYLFNBQVMsV0FDVCxtQkFBbUIsa0NBQ25CLGlCQUFpQixvQ0FDakIsbUJBQW1CLE1BQ25CLGlCQUFpQixNQUNqQixtQkFBbUIsaUNBQ25CLHFCQUFxQixpQkFDckIsWUFBWSxXQUNaLGVBQWUsWUFDZixvQkFBb0IscURBQ3BCLHVCQUF1QixzREFDdkIsT0FBTyxnQkFDUCxlQUFlLFFBQ2YsVUFBVSxPQUNWLFdBQVcsT0FDWCxXQUFXLFNBQ1gsZ0JBQWdCLFlBQ2hCLFdBQVcsVUFDWCxlQUFlLFFBQ2YsZUFBZSxPQUNmLGVBQWdCRSxDQUFBQSxPQUFpQixJQUFJLE9BQU8sV0FBV0EsRUFBSSw4QkFBK0IsR0FDMUYsaUJBQWtCQyxDQUFBQSxPQUFtQixJQUFJLE9BQU8sUUFBUSxLQUFLLElBQUksR0FBR0EsS0FBUyxDQUFDLENBQUMsb0RBQXFELEdBQ3BJLFNBQVVBLENBQUFBLE9BQW1CLElBQUksT0FBTyxRQUFRLEtBQUssSUFBSSxHQUFHQSxLQUFTLENBQUMsQ0FBQyxvREFBb0QsR0FDM0gsa0JBQW1CQSxDQUFBQSxPQUFtQixJQUFJLE9BQU8sUUFBUSxLQUFLLElBQUksR0FBR0EsS0FBUyxDQUFDLENBQUMsaUJBQWlCLEdBQ2pHLG1CQUFvQkEsQ0FBQUEsT0FBbUIsSUFBSSxPQUFPLFFBQVEsS0FBSyxJQUFJLEdBQUdBLEtBQVMsQ0FBQyxDQUFDLElBQUksR0FDckYsZ0JBQWlCQSxDQUFBQSxPQUFtQixJQUFJLE9BQU8sUUFBUSxLQUFLLElBQUksR0FBR0EsS0FBUyxDQUFDLENBQUMsc0JBQXNCLEdBQUcsR0FDdkcsc0JBQXVCQSxDQUFBQSxPQUFtQixJQUFJLE9BQU8sUUFBUSxLQUFLLElBQUksR0FBR0EsS0FBUyxDQUFDLENBQUMsSUFBSSxFQUMxRjtBQXBFQSxNQTBFTUMsS0FBVTtBQTFFaEIsTUEyRU1DLEtBQVk7QUEzRWxCLE1BNEVNQyxLQUFTO0FBNUVmLE1BNkVNQyxJQUFLO0FBN0VYLE1BOEVNQyxLQUFVO0FBOUVoQixNQStFTUMsSUFBUztBQS9FZixNQWdGTUMsS0FBZTtBQWhGckIsTUFpRk1DLEtBQVduQixFQUFLa0IsRUFBWSxFQUMvQixRQUFRLFNBQVNELENBQU0sRUFDdkIsUUFBUSxjQUFjLG1CQUFtQixFQUN6QyxRQUFRLFdBQVcsdUJBQXVCLEVBQzFDLFFBQVEsZUFBZSxTQUFTLEVBQ2hDLFFBQVEsWUFBWSxjQUFjLEVBQ2xDLFFBQVEsU0FBUyxtQkFBbUIsRUFDcEMsUUFBUSxZQUFZLEVBQUUsRUFDdEIsU0FBUztBQXpGWixNQTBGTUcsS0FBY3BCLEVBQUtrQixFQUFZLEVBQ2xDLFFBQVEsU0FBU0QsQ0FBTSxFQUN2QixRQUFRLGNBQWMsbUJBQW1CLEVBQ3pDLFFBQVEsV0FBVyx1QkFBdUIsRUFDMUMsUUFBUSxlQUFlLFNBQVMsRUFDaEMsUUFBUSxZQUFZLGNBQWMsRUFDbEMsUUFBUSxTQUFTLG1CQUFtQixFQUNwQyxRQUFRLFVBQVUsbUNBQW1DLEVBQ3JELFNBQVM7QUFsR1osTUFtR01JLElBQWE7QUFuR25CLE1Bb0dNQyxLQUFZO0FBcEdsQixNQXFHTUMsSUFBYztBQXJHcEIsTUFzR01DLEtBQU14QixFQUFLLDZHQUE2RyxFQUMzSCxRQUFRLFNBQVN1QixDQUFXLEVBQzVCLFFBQVEsU0FBUyw4REFBOEQsRUFDL0UsU0FBUztBQXpHWixNQTJHTUUsS0FBT3pCLEVBQUssZ0NBQWdDLEVBQy9DLFFBQVEsU0FBU2lCLENBQU0sRUFDdkIsU0FBUztBQTdHWixNQStHTVMsSUFBTztBQS9HYixNQXFITUMsSUFBVztBQXJIakIsTUFzSE1DLEtBQU81QixFQUNYLDZkQVNLLEdBQUcsRUFDUCxRQUFRLFdBQVcyQixDQUFRLEVBQzNCLFFBQVEsT0FBT0QsQ0FBSSxFQUNuQixRQUFRLGFBQWEsMEVBQTBFLEVBQy9GLFNBQVM7QUFwSVosTUFzSU1HLEtBQVk3QixFQUFLcUIsQ0FBVSxFQUM5QixRQUFRLE1BQU1OLENBQUUsRUFDaEIsUUFBUSxXQUFXLHVCQUF1QixFQUMxQyxRQUFRLGFBQWEsRUFBRSxFQUN2QixRQUFRLFVBQVUsRUFBRSxFQUNwQixRQUFRLGNBQWMsU0FBUyxFQUMvQixRQUFRLFVBQVUsZ0RBQWdELEVBQ2xFLFFBQVEsUUFBUSw2QkFBNkIsRUFDN0MsUUFBUSxRQUFRLDZEQUE2RCxFQUM3RSxRQUFRLE9BQU9XLENBQUksRUFDbkIsU0FBUztBQWhKWixNQWtKTUksS0FBYTlCLEVBQUsseUNBQXlDLEVBQzlELFFBQVEsYUFBYTZCLEVBQVMsRUFDOUIsU0FBUztBQXBKWixNQTBKTUUsSUFBYyxFQUNsQixZQUFBRCxJQUNBLE1BQU1qQixJQUNOLEtBQUFXLElBQ0EsUUFBQVYsSUFDQSxTQUFBRSxJQUNBLElBQUFELEdBQ0EsTUFBQWEsSUFDQSxVQUFBVCxJQUNBLE1BQUFNLElBQ0EsU0FBQWIsSUFDQSxXQUFBaUIsSUFDQSxPQUFPOUIsR0FDUCxNQUFNdUIsR0FDUjtBQXhLQSxNQWdMTVUsS0FBV2hDLEVBQ2YsNkpBRXNGLEVBQ3JGLFFBQVEsTUFBTWUsQ0FBRSxFQUNoQixRQUFRLFdBQVcsdUJBQXVCLEVBQzFDLFFBQVEsY0FBYyxTQUFTLEVBQy9CLFFBQVEsUUFBUSx3QkFBeUIsRUFDekMsUUFBUSxVQUFVLGdEQUFnRCxFQUNsRSxRQUFRLFFBQVEsNkJBQTZCLEVBQzdDLFFBQVEsUUFBUSw2REFBNkQsRUFDN0UsUUFBUSxPQUFPVyxDQUFJLEVBQ25CLFNBQVM7QUE1TFosTUE4TE1PLEtBQXNDLEVBQzFDLEdBQUdGLEdBQ0gsVUFBVVgsSUFDVixPQUFPWSxJQUNQLFdBQVdoQyxFQUFLcUIsQ0FBVSxFQUN2QixRQUFRLE1BQU1OLENBQUUsRUFDaEIsUUFBUSxXQUFXLHVCQUF1QixFQUMxQyxRQUFRLGFBQWEsRUFBRSxFQUN2QixRQUFRLFNBQVNpQixFQUFRLEVBQ3pCLFFBQVEsY0FBYyxTQUFTLEVBQy9CLFFBQVEsVUFBVSxnREFBZ0QsRUFDbEUsUUFBUSxRQUFRLDZCQUE2QixFQUM3QyxRQUFRLFFBQVEsNkRBQTZELEVBQzdFLFFBQVEsT0FBT04sQ0FBSSxFQUNuQixTQUFTLEVBQ2Q7QUE3TUEsTUFtTk1RLEtBQTJDLEVBQy9DLEdBQUdILEdBQ0gsTUFBTS9CLEVBQ0osd0lBRXdFLEVBQ3ZFLFFBQVEsV0FBVzJCLENBQVEsRUFDM0IsUUFBUSxRQUFRLG1LQUdrQixFQUNsQyxTQUFTLEdBQ1osS0FBSyxxRUFDTCxTQUFTLDBCQUNULFFBQVE1QixHQUNSLFVBQVUsb0NBQ1YsV0FBV0MsRUFBS3FCLENBQVUsRUFDdkIsUUFBUSxNQUFNTixDQUFFLEVBQ2hCLFFBQVEsV0FBVztFQUFpQixFQUNwQyxRQUFRLFlBQVlJLEVBQVEsRUFDNUIsUUFBUSxVQUFVLEVBQUUsRUFDcEIsUUFBUSxjQUFjLFNBQVMsRUFDL0IsUUFBUSxXQUFXLEVBQUUsRUFDckIsUUFBUSxTQUFTLEVBQUUsRUFDbkIsUUFBUSxTQUFTLEVBQUUsRUFDbkIsUUFBUSxRQUFRLEVBQUUsRUFDbEIsU0FBUyxFQUNkO0FBOU9BLE1Bb1BNZ0IsS0FBUztBQXBQZixNQXFQTUMsS0FBYTtBQXJQbkIsTUFzUE1DLEtBQUs7QUF0UFgsTUF1UE1DLEtBQWE7QUF2UG5CLE1BMFBNQyxJQUFlO0FBMVByQixNQTJQTUMsSUFBc0I7QUEzUDVCLE1BNFBNQyxJQUF5QjtBQTVQL0IsTUE2UE1DLEtBQWMxQyxFQUFLLHlCQUF5QixHQUFHLEVBQ2xELFFBQVEsZUFBZXdDLENBQW1CLEVBQUUsU0FBUztBQTlQeEQsTUFpUU1HLEtBQTBCO0FBalFoQyxNQWtRTUMsS0FBaUM7QUFsUXZDLE1BbVFNQyxLQUFvQztBQW5RMUMsTUFzUU1DLEtBQVk5QyxFQUFLLDBCQUEwQixHQUFHLEVBQ2pELFFBQVEsUUFBUSxtR0FBbUcsRUFDbkgsUUFBUSxZQUFZUyxLQUFxQixhQUFhLFdBQVcsRUFDakUsUUFBUSxRQUFRLHlCQUF5QixFQUN6QyxRQUFRLFFBQVEsZ0JBQWdCLEVBQ2hDLFNBQVM7QUEzUVosTUE2UU1zQyxLQUFxQjtBQTdRM0IsTUErUU1DLEtBQWlCaEQsRUFBSytDLElBQW9CLEdBQUcsRUFDaEQsUUFBUSxVQUFVUixDQUFZLEVBQzlCLFNBQVM7QUFqUlosTUFtUk1VLEtBQW9CakQsRUFBSytDLElBQW9CLEdBQUcsRUFDbkQsUUFBUSxVQUFVSixFQUF1QixFQUN6QyxTQUFTO0FBclJaLE1BdVJNTyxLQUNKO0FBeFJGLE1BaVNNQyxLQUFvQm5ELEVBQUtrRCxJQUF1QixJQUFJLEVBQ3ZELFFBQVEsa0JBQWtCVCxDQUFzQixFQUNoRCxRQUFRLGVBQWVELENBQW1CLEVBQzFDLFFBQVEsVUFBVUQsQ0FBWSxFQUM5QixTQUFTO0FBclNaLE1BdVNNYSxLQUF1QnBELEVBQUtrRCxJQUF1QixJQUFJLEVBQzFELFFBQVEsa0JBQWtCTCxFQUFpQyxFQUMzRCxRQUFRLGVBQWVELEVBQThCLEVBQ3JELFFBQVEsVUFBVUQsRUFBdUIsRUFDekMsU0FBUztBQTNTWixNQThTTVUsS0FBb0JyRCxFQUN4QixvTkFNaUMsSUFBSSxFQUNwQyxRQUFRLGtCQUFrQnlDLENBQXNCLEVBQ2hELFFBQVEsZUFBZUQsQ0FBbUIsRUFDMUMsUUFBUSxVQUFVRCxDQUFZLEVBQzlCLFNBQVM7QUF6VFosTUE0VE1lLEtBQVl0RCxFQUFLLCtCQUErQixHQUFHLEVBQ3RELFFBQVEsVUFBVXVDLENBQVksRUFDOUIsU0FBUztBQTlUWixNQWlVTWdCLEtBQ0o7QUFsVUYsTUEwVU1DLEtBQVl4RCxFQUFLdUQsSUFBZSxJQUFJLEVBQ3ZDLFFBQVEsa0JBQWtCZCxDQUFzQixFQUNoRCxRQUFRLGVBQWVELENBQW1CLEVBQzFDLFFBQVEsVUFBVUQsQ0FBWSxFQUM5QixTQUFTO0FBOVVaLE1BZ1ZNa0IsS0FBaUJ6RCxFQUFLLGFBQWEsSUFBSSxFQUMxQyxRQUFRLFVBQVV1QyxDQUFZLEVBQzlCLFNBQVM7QUFsVlosTUFvVk1tQixLQUFXMUQsRUFBSyxxQ0FBcUMsRUFDeEQsUUFBUSxVQUFVLDhCQUE4QixFQUNoRCxRQUFRLFNBQVMsOElBQThJLEVBQy9KLFNBQVM7QUF2VlosTUF5Vk0yRCxLQUFpQjNELEVBQUsyQixDQUFRLEVBQUUsUUFBUSxhQUFhLEtBQUssRUFBRSxTQUFTO0FBelYzRSxNQTBWTWlDLEtBQU01RCxFQUNWLDBKQUtzQyxFQUNyQyxRQUFRLFdBQVcyRCxFQUFjLEVBQ2pDLFFBQVEsYUFBYSw2RUFBNkUsRUFDbEcsU0FBUztBQW5XWixNQXFXTUUsSUFBZTtBQXJXckIsTUF1V01DLEtBQU85RCxFQUFLLDRFQUE0RSxFQUMzRixRQUFRLFNBQVM2RCxDQUFZLEVBQzdCLFFBQVEsUUFBUSx5Q0FBeUMsRUFDekQsUUFBUSxTQUFTLDZEQUE2RCxFQUM5RSxTQUFTO0FBM1daLE1BNldNRSxLQUFVL0QsRUFBSyx5QkFBeUIsRUFDM0MsUUFBUSxTQUFTNkQsQ0FBWSxFQUM3QixRQUFRLE9BQU90QyxDQUFXLEVBQzFCLFNBQVM7QUFoWFosTUFrWE15QyxLQUFTaEUsRUFBSyx1QkFBdUIsRUFDeEMsUUFBUSxPQUFPdUIsQ0FBVyxFQUMxQixTQUFTO0FBcFhaLE1Bc1hNMEMsS0FBZ0JqRSxFQUFLLHlCQUF5QixHQUFHLEVBQ3BELFFBQVEsV0FBVytELEVBQU8sRUFDMUIsUUFBUSxVQUFVQyxFQUFNLEVBQ3hCLFNBQVM7QUF6WFosTUEyWE1FLEtBQTJCO0FBM1hqQyxNQWlZTUMsSUFBZSxFQUNuQixZQUFZcEUsR0FDWixnQkFBQTBELElBQ0EsVUFBQUMsSUFDQSxXQUFBWixJQUNBLElBQUFULElBQ0EsTUFBTUQsSUFDTixLQUFLckMsR0FDTCxXQUFXQSxHQUNYLFdBQVdBLEdBQ1gsZ0JBQUFpRCxJQUNBLG1CQUFBRyxJQUNBLG1CQUFBRSxJQUNBLFFBQUFsQixJQUNBLE1BQUEyQixJQUNBLFFBQUFFLElBQ0EsYUFBQXRCLElBQ0EsU0FBQXFCLElBQ0EsZUFBQUUsSUFDQSxLQUFBTCxJQUNBLE1BQU10QixJQUNOLEtBQUt2QyxFQUNQO0FBdlpBLE1BK1pNcUUsS0FBNkMsRUFDakQsR0FBR0QsR0FDSCxNQUFNbkUsRUFBSyx5QkFBeUIsRUFDakMsUUFBUSxTQUFTNkQsQ0FBWSxFQUM3QixTQUFTLEdBQ1osU0FBUzdELEVBQUssK0JBQStCLEVBQzFDLFFBQVEsU0FBUzZELENBQVksRUFDN0IsU0FBUyxFQUNkO0FBdmFBLE1BNmFNUSxJQUF3QyxFQUM1QyxHQUFHRixHQUNILG1CQUFtQmYsSUFDbkIsZ0JBQWdCSCxJQUNoQixXQUFBSyxJQUNBLFdBQUFFLElBQ0EsS0FBS3hELEVBQUssZ0VBQWdFLEVBQ3ZFLFFBQVEsWUFBWWtFLEVBQXdCLEVBQzVDLFFBQVEsU0FBUywyRUFBMkUsRUFDNUYsU0FBUyxHQUNaLFlBQVksOEVBQ1osS0FBSywyRUFDTCxNQUFNbEUsRUFBSyxxTkFBcU4sRUFDN04sUUFBUSxZQUFZa0UsRUFBd0IsRUFDNUMsU0FBUyxFQUNkO0FBNWJBLE1Ba2NNSSxLQUEyQyxFQUMvQyxHQUFHRCxHQUNILElBQUlyRSxFQUFLcUMsRUFBRSxFQUFFLFFBQVEsUUFBUSxHQUFHLEVBQUUsU0FBUyxHQUMzQyxNQUFNckMsRUFBS3FFLEVBQVUsSUFBSSxFQUN0QixRQUFRLFFBQVEsZUFBZSxFQUMvQixRQUFRLFdBQVcsR0FBRyxFQUN0QixTQUFTLEVBQ2Q7QUF6Y0EsTUErY2FFLElBQVEsRUFDbkIsUUFBUXhDLEdBQ1IsS0FBS0UsSUFDTCxVQUFVQyxHQUNaO0FBbmRBLE1BcWRhc0MsSUFBUyxFQUNwQixRQUFRTCxHQUNSLEtBQUtFLEdBQ0wsUUFBUUMsSUFDUixVQUFVRixHQUNaO0FDdmVBLE1BQU1LLEtBQWtELEVBQ3RELEtBQUssU0FDTCxLQUFLLFFBQ0wsS0FBSyxRQUNMLEtBQUssVUFDTCxLQUFLLFFBQ1A7QUFOQSxNQU9NQyxLQUF3QkMsQ0FBQUEsT0FBZUYsR0FBbUJFLEVBQUU7QUFFM0QsV0FBU0MsRUFBbUJoRCxJQUFjaUQsR0FBa0I7QUFDakUsUUFBSUEsR0FBQUE7QUFDRixVQUFJckUsRUFBTSxXQUFXLEtBQUtvQixFQUFJLEVBQzVCLFFBQU9BLEdBQUssUUFBUXBCLEVBQU0sZUFBZWtFLEVBQW9CO0lBQUEsV0FHM0RsRSxFQUFNLG1CQUFtQixLQUFLb0IsRUFBSSxFQUNwQyxRQUFPQSxHQUFLLFFBQVFwQixFQUFNLHVCQUF1QmtFLEVBQW9CO0FBSXpFLFdBQU85QztFQUNUO0FBRU8sV0FBU2tELEVBQVNDLElBQWM7QUFDckMsUUFBSTtBQUNGQSxNQUFBQSxLQUFPLFVBQVVBLEVBQUksRUFBRSxRQUFRdkUsRUFBTSxlQUFlLEdBQUc7SUFDekQsUUFBUTtBQUNOLGFBQU87SUFDVDtBQUNBLFdBQU91RTtFQUNUO0FBRU8sV0FBU0MsRUFBV0MsSUFBa0JDLEdBQWdCO0FBRzNELFFBQU1DLElBQU1GLEdBQVMsUUFBUXpFLEVBQU0sVUFBVSxDQUFDNEUsR0FBT0MsR0FBUUMsTUFBUTtBQUNqRSxVQUFJQyxJQUFVLE9BQ1ZDLElBQU9IO0FBQ1gsYUFBTyxFQUFFRyxLQUFRLEtBQUtGLEVBQUlFLENBQUksTUFBTSxPQUFNRCxLQUFVLENBQUNBO0FBQ3JELGFBQUlBLElBR0ssTUFHQTtJQUVYLENBQUMsR0FDREUsSUFBUU4sRUFBSSxNQUFNM0UsRUFBTSxTQUFTLEdBQy9Ca0YsSUFBSTtBQVVSLFFBUEtELEVBQU0sQ0FBQyxFQUFFLEtBQUssS0FDakJBLEVBQU0sTUFBTSxHQUVWQSxFQUFNLFNBQVMsS0FBSyxDQUFDQSxFQUFNLEdBQUcsRUFBRSxHQUFHLEtBQUssS0FDMUNBLEVBQU0sSUFBSSxHQUdSUCxFQUNGLEtBQUlPLEVBQU0sU0FBU1AsRUFDakJPLEdBQU0sT0FBT1AsQ0FBSztRQUVsQixRQUFPTyxFQUFNLFNBQVNQLElBQU9PLEdBQU0sS0FBSyxFQUFFO0FBSTlDLFdBQU9DLElBQUlELEVBQU0sUUFBUUMsSUFFdkJELEdBQU1DLENBQUMsSUFBSUQsRUFBTUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRbEYsRUFBTSxXQUFXLEdBQUc7QUFFekQsV0FBT2lGO0VBQ1Q7QUFVTyxXQUFTRSxFQUFNTCxJQUFhTSxHQUFXQyxHQUFrQjtBQUM5RCxRQUFNQyxJQUFJUixHQUFJO0FBQ2QsUUFBSVEsTUFBTSxFQUNSLFFBQU87QUFJVCxRQUFJQyxJQUFVO0FBR2QsV0FBT0EsSUFBVUQsS0FBRztBQUNsQixVQUFNRSxJQUFXVixHQUFJLE9BQU9RLElBQUlDLElBQVUsQ0FBQztBQUMzQyxVQUFJQyxNQUFhSixLQUFLLENBQUNDLEVBQ3JCRTtlQUNTQyxNQUFhSixLQUFLQyxFQUMzQkU7VUFFQTtJQUVKO0FBRUEsV0FBT1QsR0FBSSxNQUFNLEdBQUdRLElBQUlDLENBQU87RUFDakM7QUFFTyxXQUFTRSxHQUFtQlgsSUFBYVksR0FBVztBQUN6RCxRQUFJWixHQUFJLFFBQVFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FDeEIsUUFBTztBQUdULFFBQUlDLElBQVE7QUFDWixhQUFTVCxJQUFJLEdBQUdBLElBQUlKLEdBQUksUUFBUUksSUFDOUIsS0FBSUosR0FBSUksQ0FBQyxNQUFNLEtBQ2JBO2FBQ1NKLEdBQUlJLENBQUMsTUFBTVEsRUFBRSxDQUFDLEVBQ3ZCQzthQUNTYixHQUFJSSxDQUFDLE1BQU1RLEVBQUUsQ0FBQyxNQUN2QkMsS0FDSUEsSUFBUSxHQUNWLFFBQU9UO0FBSWIsV0FBSVMsSUFBUSxJQUNILEtBR0Y7RUFDVDtBQUVPLFdBQVNDLEdBQVdDLElBQWMxRixJQUFTLEdBQUc7QUFDbkQsUUFBSTJGLElBQU0zRixHQUNONEYsSUFBVztBQUNmLGFBQVdDLEtBQVFILEdBQ2pCLEtBQUlHLE1BQVMsS0FBTTtBQUNqQixVQUFNQyxJQUFRLElBQUtILElBQU07QUFDekJDLFdBQVksSUFBSSxPQUFPRSxDQUFLLEdBQzVCSCxLQUFPRztJQUNULE1BQ0VGLE1BQVlDLEdBQ1pGO0FBSUosV0FBT0M7RUFDVDtBQzNJQSxXQUFTRyxHQUFXQyxJQUFlN0MsR0FBMkM4QyxHQUFhQyxHQUFlQyxHQUEwQztBQUNsSixRQUFNL0IsSUFBT2pCLEVBQUssTUFDWmlELElBQVFqRCxFQUFLLFNBQVMsTUFDdEJrRCxJQUFPTCxHQUFJLENBQUMsRUFBRSxRQUFRRyxFQUFNLE1BQU0sbUJBQW1CLElBQUk7QUFFL0RELE1BQU0sTUFBTSxTQUFTO0FBQ3JCLFFBQU1JLElBQW9DLEVBQ3hDLE1BQU1OLEdBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLE1BQU0sVUFBVSxRQUMzQyxLQUFBQyxHQUNBLE1BQUE3QixHQUNBLE9BQUFnQyxHQUNBLE1BQUFDLEdBQ0EsUUFBUUgsRUFBTSxhQUFhRyxDQUFJLEVBQ2pDO0FBQ0EsV0FBQUgsRUFBTSxNQUFNLFNBQVMsT0FDZEk7RUFDVDtBQUVBLFdBQVNDLEdBQXVCTixJQUFhSSxHQUFjRixHQUFjO0FBQ3ZFLFFBQU1LLElBQW9CUCxHQUFJLE1BQU1FLEVBQU0sTUFBTSxzQkFBc0I7QUFFdEUsUUFBSUssTUFBc0IsS0FDeEIsUUFBT0g7QUFHVCxRQUFNSSxJQUFlRCxFQUFrQixDQUFDO0FBRXhDLFdBQU9ILEVBQ0osTUFBTTtDQUFJLEVBQ1YsSUFBSUssT0FBUTtBQUNYLFVBQU1DLElBQW9CRCxFQUFLLE1BQU1QLEVBQU0sTUFBTSxjQUFjO0FBQy9ELFVBQUlRLE1BQXNCLEtBQ3hCLFFBQU9EO0FBR1QsVUFBTSxDQUFDRSxDQUFZLElBQUlEO0FBRXZCLGFBQUlDLEVBQWEsVUFBVUgsRUFBYSxTQUMvQkMsRUFBSyxNQUFNRCxFQUFhLE1BQU0sSUFHaENDO0lBQ1QsQ0FBQyxFQUNBLEtBQUs7Q0FBSTtFQUNkO0FBS08sTUFBTUcsSUFBTixNQUFpRTtJQUt0RSxZQUFZQyxHQUF1RDtBQUpuRTtBQUNBO0FBQ0E7QUFHRSxXQUFLLFVBQVVBLEtBQVc3SDtJQUM1QjtJQUVBLE1BQU04SCxHQUF1QztBQUMzQyxVQUFNZixJQUFNLEtBQUssTUFBTSxNQUFNLFFBQVEsS0FBS2UsQ0FBRztBQUM3QyxVQUFJZixLQUFPQSxFQUFJLENBQUMsRUFBRSxTQUFTLEVBQ3pCLFFBQU8sRUFDTCxNQUFNLFNBQ04sS0FBS0EsRUFBSSxDQUFDLEVBQ1o7SUFFSjtJQUVBLEtBQUtlLEdBQXNDO0FBQ3pDLFVBQU1mLElBQU0sS0FBSyxNQUFNLE1BQU0sS0FBSyxLQUFLZSxDQUFHO0FBQzFDLFVBQUlmLEdBQUs7QUFDUCxZQUFNSyxJQUFPTCxFQUFJLENBQUMsRUFBRSxRQUFRLEtBQUssTUFBTSxNQUFNLGtCQUFrQixFQUFFO0FBQ2pFLGVBQU8sRUFDTCxNQUFNLFFBQ04sS0FBS0EsRUFBSSxDQUFDLEdBQ1YsZ0JBQWdCLFlBQ2hCLE1BQU8sS0FBSyxRQUFRLFdBRWhCSyxJQURBckIsRUFBTXFCLEdBQU07Q0FBSSxFQUV0QjtNQUNGO0lBQ0Y7SUFFQSxPQUFPVSxHQUFzQztBQUMzQyxVQUFNZixJQUFNLEtBQUssTUFBTSxNQUFNLE9BQU8sS0FBS2UsQ0FBRztBQUM1QyxVQUFJZixHQUFLO0FBQ1AsWUFBTUMsSUFBTUQsRUFBSSxDQUFDLEdBQ1hLLElBQU9FLEdBQXVCTixHQUFLRCxFQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssS0FBSztBQUVqRSxlQUFPLEVBQ0wsTUFBTSxRQUNOLEtBQUFDLEdBQ0EsTUFBTUQsRUFBSSxDQUFDLElBQUlBLEVBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEtBQUssTUFBTSxPQUFPLGdCQUFnQixJQUFJLElBQUlBLEVBQUksQ0FBQyxHQUNwRixNQUFBSyxFQUNGO01BQ0Y7SUFDRjtJQUVBLFFBQVFVLEdBQXlDO0FBQy9DLFVBQU1mLElBQU0sS0FBSyxNQUFNLE1BQU0sUUFBUSxLQUFLZSxDQUFHO0FBQzdDLFVBQUlmLEdBQUs7QUFDUCxZQUFJSyxJQUFPTCxFQUFJLENBQUMsRUFBRSxLQUFLO0FBR3ZCLFlBQUksS0FBSyxNQUFNLE1BQU0sV0FBVyxLQUFLSyxDQUFJLEdBQUc7QUFDMUMsY0FBTVcsSUFBVWhDLEVBQU1xQixHQUFNLEdBQUc7QUFBQSxXQUMzQixLQUFLLFFBQVEsWUFFTixDQUFDVyxLQUFXLEtBQUssTUFBTSxNQUFNLGdCQUFnQixLQUFLQSxDQUFPLE9BRWxFWCxJQUFPVyxFQUFRLEtBQUs7UUFFeEI7QUFFQSxlQUFPLEVBQ0wsTUFBTSxXQUNOLEtBQUtoQixFQUFJLENBQUMsR0FDVixPQUFPQSxFQUFJLENBQUMsRUFBRSxRQUNkLE1BQUFLLEdBQ0EsUUFBUSxLQUFLLE1BQU0sT0FBT0EsQ0FBSSxFQUNoQztNQUNGO0lBQ0Y7SUFFQSxHQUFHVSxHQUFvQztBQUNyQyxVQUFNZixJQUFNLEtBQUssTUFBTSxNQUFNLEdBQUcsS0FBS2UsQ0FBRztBQUN4QyxVQUFJZixFQUNGLFFBQU8sRUFDTCxNQUFNLE1BQ04sS0FBS2hCLEVBQU1nQixFQUFJLENBQUMsR0FBRztDQUFJLEVBQ3pCO0lBRUo7SUFFQSxXQUFXZSxHQUE0QztBQUNyRCxVQUFNZixJQUFNLEtBQUssTUFBTSxNQUFNLFdBQVcsS0FBS2UsQ0FBRztBQUNoRCxVQUFJZixHQUFLO0FBQ1AsWUFBSWlCLElBQVFqQyxFQUFNZ0IsRUFBSSxDQUFDLEdBQUc7Q0FBSSxFQUFFLE1BQU07Q0FBSSxHQUN0Q0MsSUFBTSxJQUNOSSxJQUFPLElBQ0xhLElBQWtCLENBQUM7QUFFekIsZUFBT0QsRUFBTSxTQUFTLEtBQUc7QUFDdkIsY0FBSUUsSUFBZSxPQUNiQyxJQUFlLENBQUMsR0FFbEJyQztBQUNKLGVBQUtBLElBQUksR0FBR0EsSUFBSWtDLEVBQU0sUUFBUWxDLElBRTVCLEtBQUksS0FBSyxNQUFNLE1BQU0sZ0JBQWdCLEtBQUtrQyxFQUFNbEMsQ0FBQyxDQUFDLEVBQ2hEcUMsR0FBYSxLQUFLSCxFQUFNbEMsQ0FBQyxDQUFDLEdBQzFCb0MsSUFBZTttQkFDTixDQUFDQSxFQUNWQyxHQUFhLEtBQUtILEVBQU1sQyxDQUFDLENBQUM7Y0FFMUI7QUFHSmtDLGNBQVFBLEVBQU0sTUFBTWxDLENBQUM7QUFFckIsY0FBTXNDLElBQWFELEVBQWEsS0FBSztDQUFJLEdBQ25DRSxJQUFjRCxFQUVqQixRQUFRLEtBQUssTUFBTSxNQUFNLHlCQUF5QjtPQUFVLEVBQzVELFFBQVEsS0FBSyxNQUFNLE1BQU0sMEJBQTBCLEVBQUU7QUFDeERwQixjQUFNQSxJQUFNLEdBQUdBLENBQUc7RUFBS29CLENBQVUsS0FBS0EsR0FDdENoQixJQUFPQSxJQUFPLEdBQUdBLENBQUk7RUFBS2lCLENBQVcsS0FBS0E7QUFJMUMsY0FBTUMsSUFBTSxLQUFLLE1BQU0sTUFBTTtBQU03QixjQUxBLEtBQUssTUFBTSxNQUFNLE1BQU0sTUFDdkIsS0FBSyxNQUFNLFlBQVlELEdBQWFKLEdBQVEsSUFBSSxHQUNoRCxLQUFLLE1BQU0sTUFBTSxNQUFNSyxHQUduQk4sRUFBTSxXQUFXLEVBQ25CO0FBR0YsY0FBTU8sSUFBWU4sRUFBTyxHQUFHLEVBQUU7QUFFOUIsY0FBSU0sR0FBVyxTQUFTLE9BRXRCO0FBQ0ssY0FBSUEsR0FBVyxTQUFTLGNBQWM7QUFFM0MsZ0JBQU1DLElBQVdELEdBQ1hFLElBQVVELEVBQVMsTUFBTTtJQUFPUixFQUFNLEtBQUs7Q0FBSSxHQUMvQ1UsS0FBVyxLQUFLLFdBQVdELENBQU87QUFDeENSLGNBQU9BLEVBQU8sU0FBUyxDQUFDLElBQUlTLElBRTVCMUIsSUFBTUEsRUFBSSxVQUFVLEdBQUdBLEVBQUksU0FBU3dCLEVBQVMsSUFBSSxNQUFNLElBQUlFLEdBQVMsS0FDcEV0QixJQUFPQSxFQUFLLFVBQVUsR0FBR0EsRUFBSyxTQUFTb0IsRUFBUyxLQUFLLE1BQU0sSUFBSUUsR0FBUztBQUN4RTtVQUNGLFdBQVdILEdBQVcsU0FBUyxRQUFRO0FBRXJDLGdCQUFNQyxJQUFXRCxHQUNYRSxJQUFVRCxFQUFTLE1BQU07SUFBT1IsRUFBTSxLQUFLO0NBQUksR0FDL0NVLEtBQVcsS0FBSyxLQUFLRCxDQUFPO0FBQ2xDUixjQUFPQSxFQUFPLFNBQVMsQ0FBQyxJQUFJUyxJQUU1QjFCLElBQU1BLEVBQUksVUFBVSxHQUFHQSxFQUFJLFNBQVN1QixFQUFVLElBQUksTUFBTSxJQUFJRyxHQUFTLEtBQ3JFdEIsSUFBT0EsRUFBSyxVQUFVLEdBQUdBLEVBQUssU0FBU29CLEVBQVMsSUFBSSxNQUFNLElBQUlFLEdBQVMsS0FDdkVWLElBQVFTLEVBQVEsVUFBVVIsRUFBTyxHQUFHLEVBQUUsRUFBRyxJQUFJLE1BQU0sRUFBRSxNQUFNO0NBQUk7QUFDL0Q7VUFDRjtRQUNGO0FBRUEsZUFBTyxFQUNMLE1BQU0sY0FDTixLQUFBakIsR0FDQSxRQUFBaUIsR0FDQSxNQUFBYixFQUNGO01BQ0Y7SUFDRjtJQUVBLEtBQUtVLEdBQXNDO0FBQ3pDLFVBQUlmLElBQU0sS0FBSyxNQUFNLE1BQU0sS0FBSyxLQUFLZSxDQUFHO0FBQ3hDLFVBQUlmLEdBQUs7QUFDUCxZQUFJakcsSUFBT2lHLEVBQUksQ0FBQyxFQUFFLEtBQUssR0FDakI0QixJQUFZN0gsRUFBSyxTQUFTLEdBRTFCZSxJQUFvQixFQUN4QixNQUFNLFFBQ04sS0FBSyxJQUNMLFNBQVM4RyxHQUNULE9BQU9BLElBQVksQ0FBQzdILEVBQUssTUFBTSxHQUFHLEVBQUUsSUFBSSxJQUN4QyxPQUFPLE9BQ1AsT0FBTyxDQUFDLEVBQ1Y7QUFFQUEsWUFBTzZILElBQVksYUFBYTdILEVBQUssTUFBTSxFQUFFLENBQUMsS0FBSyxLQUFLQSxDQUFJLElBRXhELEtBQUssUUFBUSxhQUNmQSxJQUFPNkgsSUFBWTdILElBQU87QUFJNUIsWUFBTThILElBQVksS0FBSyxNQUFNLE1BQU0sY0FBYzlILENBQUksR0FDakQrSCxJQUFvQjtBQUV4QixlQUFPZixLQUFLO0FBQ1YsY0FBSWdCLElBQVcsT0FDWDlCLElBQU0sSUFDTitCLElBQWU7QUFLbkIsY0FKSSxFQUFFaEMsSUFBTTZCLEVBQVUsS0FBS2QsQ0FBRyxNQUkxQixLQUFLLE1BQU0sTUFBTSxHQUFHLEtBQUtBLENBQUcsRUFDOUI7QUFHRmQsY0FBTUQsRUFBSSxDQUFDLEdBQ1hlLElBQU1BLEVBQUksVUFBVWQsRUFBSSxNQUFNO0FBRTlCLGNBQUlQLElBQU9ELEdBQVdPLEVBQUksQ0FBQyxFQUFFLE1BQU07R0FBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxFQUFJLENBQUMsRUFBRSxNQUFNLEdBQ3pEaUMsSUFBV2xCLEVBQUksTUFBTTtHQUFNLENBQUMsRUFBRSxDQUFDLEdBQy9CbUIsSUFBWSxDQUFDeEMsRUFBSyxLQUFLLEdBRXZCMUYsSUFBUztBQW1CYixjQWxCSSxLQUFLLFFBQVEsWUFDZkEsSUFBUyxHQUNUZ0ksSUFBZXRDLEVBQUssVUFBVSxLQUNyQndDLElBQ1RsSSxJQUFTZ0csRUFBSSxDQUFDLEVBQUUsU0FBUyxLQUV6QmhHLElBQVMwRixFQUFLLE9BQU8sS0FBSyxNQUFNLE1BQU0sWUFBWSxHQUNsRDFGLElBQVNBLElBQVMsSUFBSSxJQUFJQSxHQUMxQmdJLElBQWV0QyxFQUFLLE1BQU0xRixDQUFNLEdBQ2hDQSxLQUFVZ0csRUFBSSxDQUFDLEVBQUUsU0FHZmtDLEtBQWEsS0FBSyxNQUFNLE1BQU0sVUFBVSxLQUFLRCxDQUFRLE1BQ3ZEaEMsS0FBT2dDLElBQVc7R0FDbEJsQixJQUFNQSxFQUFJLFVBQVVrQixFQUFTLFNBQVMsQ0FBQyxHQUN2Q0YsSUFBVyxPQUdULENBQUNBLEdBQVU7QUFDYixnQkFBTUksS0FBa0IsS0FBSyxNQUFNLE1BQU0sZ0JBQWdCbkksQ0FBTSxHQUN6RG9JLElBQVUsS0FBSyxNQUFNLE1BQU0sUUFBUXBJLENBQU0sR0FDekNxSSxLQUFtQixLQUFLLE1BQU0sTUFBTSxpQkFBaUJySSxDQUFNLEdBQzNEc0ksS0FBb0IsS0FBSyxNQUFNLE1BQU0sa0JBQWtCdEksQ0FBTSxHQUM3RHVJLEtBQWlCLEtBQUssTUFBTSxNQUFNLGVBQWV2SSxDQUFNLEdBQ3ZEd0ksS0FBdUIsS0FBSyxNQUFNLE1BQU0scUJBQXFCeEksQ0FBTTtBQUd6RSxtQkFBTytHLEtBQUs7QUFDVixrQkFBTTBCLElBQVUxQixFQUFJLE1BQU07R0FBTSxDQUFDLEVBQUUsQ0FBQyxHQUNoQzJCO0FBcUNKLGtCQXBDQVQsSUFBV1EsR0FHUCxLQUFLLFFBQVEsWUFDZlIsSUFBV0EsRUFBUyxRQUFRLEtBQUssTUFBTSxNQUFNLG9CQUFvQixJQUFJLEdBQ3JFUyxJQUFzQlQsS0FFdEJTLElBQXNCVCxFQUFTLFFBQVEsS0FBSyxNQUFNLE1BQU0sZUFBZSxNQUFNLEdBSTNFSSxHQUFpQixLQUFLSixDQUFRLEtBSzlCSyxHQUFrQixLQUFLTCxDQUFRLEtBSy9CTSxHQUFlLEtBQUtOLENBQVEsS0FLNUJPLEdBQXFCLEtBQUtQLENBQVEsS0FLbENFLEdBQWdCLEtBQUtGLENBQVEsS0FLN0JHLEVBQVEsS0FBS0gsQ0FBUSxFQUN2QjtBQUdGLGtCQUFJUyxFQUFvQixPQUFPLEtBQUssTUFBTSxNQUFNLFlBQVksS0FBSzFJLEtBQVUsQ0FBQ2lJLEVBQVMsS0FBSyxFQUN4RkQsTUFBZ0I7SUFBT1UsRUFBb0IsTUFBTTFJLENBQU07bUJBQ2xEO0FBZ0JMLG9CQWRJa0ksS0FLQXhDLEVBQUssUUFBUSxLQUFLLE1BQU0sTUFBTSxlQUFlLE1BQU0sRUFBRSxPQUFPLEtBQUssTUFBTSxNQUFNLFlBQVksS0FBSyxLQUc5RjJDLEdBQWlCLEtBQUszQyxDQUFJLEtBRzFCNEMsR0FBa0IsS0FBSzVDLENBQUksS0FHM0IwQyxFQUFRLEtBQUsxQyxDQUFJLEVBQ25CO0FBR0ZzQyxxQkFBZ0I7SUFBT0M7Y0FDekI7QUFFQUMsa0JBQVksQ0FBQ0QsRUFBUyxLQUFLLEdBRTNCaEMsS0FBT3dDLElBQVU7R0FDakIxQixJQUFNQSxFQUFJLFVBQVUwQixFQUFRLFNBQVMsQ0FBQyxHQUN0Qy9DLElBQU9nRCxFQUFvQixNQUFNMUksQ0FBTTtZQUN6QztVQUNGO0FBRUtjLFlBQUssVUFFSmdILElBQ0ZoSCxFQUFLLFFBQVEsT0FDSixLQUFLLE1BQU0sTUFBTSxnQkFBZ0IsS0FBS21GLENBQUcsTUFDbEQ2QixJQUFvQixRQUl4QmhILEVBQUssTUFBTSxLQUFLLEVBQ2QsTUFBTSxhQUNOLEtBQUFtRixHQUNBLE1BQU0sQ0FBQyxDQUFDLEtBQUssUUFBUSxPQUFPLEtBQUssTUFBTSxNQUFNLFdBQVcsS0FBSytCLENBQVksR0FDekUsT0FBTyxPQUNQLE1BQU1BLEdBQ04sUUFBUSxDQUFDLEVBQ1gsQ0FBQyxHQUVEbEgsRUFBSyxPQUFPbUY7UUFDZDtBQUdBLFlBQU0wQyxJQUFXN0gsRUFBSyxNQUFNLEdBQUcsRUFBRTtBQUNqQyxZQUFJNkgsRUFDRkEsR0FBUyxNQUFNQSxFQUFTLElBQUksUUFBUSxHQUNwQ0EsRUFBUyxPQUFPQSxFQUFTLEtBQUssUUFBUTtZQUd0QztBQUVGN0gsVUFBSyxNQUFNQSxFQUFLLElBQUksUUFBUTtBQUc1QixpQkFBVzhILEtBQVE5SCxFQUFLLE9BQU87QUFHN0IsY0FGQSxLQUFLLE1BQU0sTUFBTSxNQUFNLE9BQ3ZCOEgsRUFBSyxTQUFTLEtBQUssTUFBTSxZQUFZQSxFQUFLLE1BQU0sQ0FBQyxDQUFDLEdBQzlDQSxFQUFLLE1BQU07QUFHYixnQkFEQUEsRUFBSyxPQUFPQSxFQUFLLEtBQUssUUFBUSxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsRUFBRSxHQUM5REEsRUFBSyxPQUFPLENBQUMsR0FBRyxTQUFTLFVBQVVBLEVBQUssT0FBTyxDQUFDLEdBQUcsU0FBUyxhQUFhO0FBQzNFQSxnQkFBSyxPQUFPLENBQUMsRUFBRSxNQUFNQSxFQUFLLE9BQU8sQ0FBQyxFQUFFLElBQUksUUFBUSxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsRUFBRSxHQUNwRkEsRUFBSyxPQUFPLENBQUMsRUFBRSxPQUFPQSxFQUFLLE9BQU8sQ0FBQyxFQUFFLEtBQUssUUFBUSxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsRUFBRTtBQUN0Rix1QkFBUzdELElBQUksS0FBSyxNQUFNLFlBQVksU0FBUyxHQUFHQSxLQUFLLEdBQUdBLElBQ3RELEtBQUksS0FBSyxNQUFNLE1BQU0sV0FBVyxLQUFLLEtBQUssTUFBTSxZQUFZQSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ25FLHFCQUFLLE1BQU0sWUFBWUEsQ0FBQyxFQUFFLE1BQU0sS0FBSyxNQUFNLFlBQVlBLENBQUMsRUFBRSxJQUFJLFFBQVEsS0FBSyxNQUFNLE1BQU0saUJBQWlCLEVBQUU7QUFDMUc7Y0FDRjtZQUVKO0FBRUEsZ0JBQU04RCxJQUFVLEtBQUssTUFBTSxNQUFNLGlCQUFpQixLQUFLRCxFQUFLLEdBQUc7QUFDL0QsZ0JBQUlDLEdBQVM7QUFDWCxrQkFBTUMsSUFBaUMsRUFDckMsTUFBTSxZQUNOLEtBQUtELEVBQVEsQ0FBQyxJQUFJLEtBQ2xCLFNBQVNBLEVBQVEsQ0FBQyxNQUFNLE1BQzFCO0FBQ0FELGdCQUFLLFVBQVVFLEVBQWMsU0FDekJoSSxFQUFLLFFBQ0g4SCxFQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxNQUFNLEVBQUUsU0FBU0EsRUFBSyxPQUFPLENBQUMsRUFBRSxJQUFJLEtBQUssWUFBWUEsRUFBSyxPQUFPLENBQUMsS0FBS0EsRUFBSyxPQUFPLENBQUMsRUFBRSxVQUN4SEEsRUFBSyxPQUFPLENBQUMsRUFBRSxNQUFNRSxFQUFjLE1BQU1GLEVBQUssT0FBTyxDQUFDLEVBQUUsS0FDeERBLEVBQUssT0FBTyxDQUFDLEVBQUUsT0FBT0UsRUFBYyxNQUFNRixFQUFLLE9BQU8sQ0FBQyxFQUFFLE1BQ3pEQSxFQUFLLE9BQU8sQ0FBQyxFQUFFLE9BQU8sUUFBUUUsQ0FBYSxLQUUzQ0YsRUFBSyxPQUFPLFFBQVEsRUFDbEIsTUFBTSxhQUNOLEtBQUtFLEVBQWMsS0FDbkIsTUFBTUEsRUFBYyxLQUNwQixRQUFRLENBQUNBLENBQWEsRUFDeEIsQ0FBQyxJQUdIRixFQUFLLE9BQU8sUUFBUUUsQ0FBYTtZQUVyQztVQUNGO0FBRUEsY0FBSSxDQUFDaEksRUFBSyxPQUFPO0FBRWYsZ0JBQU1pSSxJQUFVSCxFQUFLLE9BQU8sT0FBT0ksT0FBS0EsRUFBRSxTQUFTLE9BQU8sR0FDcERDLElBQXdCRixFQUFRLFNBQVMsS0FBS0EsRUFBUSxLQUFLQyxPQUFLLEtBQUssTUFBTSxNQUFNLFFBQVEsS0FBS0EsRUFBRSxHQUFHLENBQUM7QUFFMUdsSSxjQUFLLFFBQVFtSTtVQUNmO1FBQ0Y7QUFHQSxZQUFJbkksRUFBSyxNQUNQLFVBQVc4SCxLQUFROUgsRUFBSyxPQUFPO0FBQzdCOEgsWUFBSyxRQUFRO0FBQ2IsbUJBQVd0QyxLQUFTc0MsRUFBSyxPQUNuQnRDLEdBQU0sU0FBUyxXQUNqQkEsRUFBTSxPQUFPO1FBR25CO0FBR0YsZUFBT3hGO01BQ1Q7SUFDRjtJQUVBLEtBQUtpRyxHQUFzQztBQUN6QyxVQUFNZixJQUFNLEtBQUssTUFBTSxNQUFNLEtBQUssS0FBS2UsQ0FBRztBQUMxQyxVQUFJZixFQVFGLFFBUDJCLEVBQ3pCLE1BQU0sUUFDTixPQUFPLE1BQ1AsS0FBS0EsRUFBSSxDQUFDLEdBQ1YsS0FBS0EsRUFBSSxDQUFDLE1BQU0sU0FBU0EsRUFBSSxDQUFDLE1BQU0sWUFBWUEsRUFBSSxDQUFDLE1BQU0sU0FDM0QsTUFBTUEsRUFBSSxDQUFDLEVBQ2I7SUFHSjtJQUVBLElBQUllLEdBQXFDO0FBQ3ZDLFVBQU1mLElBQU0sS0FBSyxNQUFNLE1BQU0sSUFBSSxLQUFLZSxDQUFHO0FBQ3pDLFVBQUlmLEdBQUs7QUFDUCxZQUFNL0MsSUFBTStDLEVBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxRQUFRLEtBQUssTUFBTSxNQUFNLHFCQUFxQixHQUFHLEdBQzVFNUIsSUFBTzRCLEVBQUksQ0FBQyxJQUFJQSxFQUFJLENBQUMsRUFBRSxRQUFRLEtBQUssTUFBTSxNQUFNLGNBQWMsSUFBSSxFQUFFLFFBQVEsS0FBSyxNQUFNLE9BQU8sZ0JBQWdCLElBQUksSUFBSSxJQUN0SEksSUFBUUosRUFBSSxDQUFDLElBQUlBLEVBQUksQ0FBQyxFQUFFLFVBQVUsR0FBR0EsRUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsUUFBUSxLQUFLLE1BQU0sT0FBTyxnQkFBZ0IsSUFBSSxJQUFJQSxFQUFJLENBQUM7QUFDckgsZUFBTyxFQUNMLE1BQU0sT0FDTixLQUFBL0MsR0FDQSxLQUFLK0MsRUFBSSxDQUFDLEdBQ1YsTUFBQTVCLEdBQ0EsT0FBQWdDLEVBQ0Y7TUFDRjtJQUNGO0lBRUEsTUFBTVcsR0FBdUM7QUFDM0MsVUFBTWYsSUFBTSxLQUFLLE1BQU0sTUFBTSxNQUFNLEtBQUtlLENBQUc7QUFLM0MsVUFKSSxDQUFDZixLQUlELENBQUMsS0FBSyxNQUFNLE1BQU0sZUFBZSxLQUFLQSxFQUFJLENBQUMsQ0FBQyxFQUU5QztBQUdGLFVBQU1rRCxJQUFVN0UsRUFBVzJCLEVBQUksQ0FBQyxDQUFDLEdBQzNCbUQsSUFBU25ELEVBQUksQ0FBQyxFQUFFLFFBQVEsS0FBSyxNQUFNLE1BQU0saUJBQWlCLEVBQUUsRUFBRSxNQUFNLEdBQUcsR0FDdkVvRCxJQUFPcEQsRUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJQSxFQUFJLENBQUMsRUFBRSxRQUFRLEtBQUssTUFBTSxNQUFNLG1CQUFtQixFQUFFLEVBQUUsTUFBTTtDQUFJLElBQUksQ0FBQyxHQUU5RjRDLElBQXFCLEVBQ3pCLE1BQU0sU0FDTixLQUFLNUMsRUFBSSxDQUFDLEdBQ1YsUUFBUSxDQUFDLEdBQ1QsT0FBTyxDQUFDLEdBQ1IsTUFBTSxDQUFDLEVBQ1Q7QUFFQSxVQUFJa0QsRUFBUSxXQUFXQyxFQUFPLFFBSzlCO0FBQUEsaUJBQVdFLEtBQVNGLEVBQ2QsTUFBSyxNQUFNLE1BQU0sZ0JBQWdCLEtBQUtFLENBQUssSUFDN0NULEVBQUssTUFBTSxLQUFLLE9BQU8sSUFDZCxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsS0FBS1MsQ0FBSyxJQUNyRFQsRUFBSyxNQUFNLEtBQUssUUFBUSxJQUNmLEtBQUssTUFBTSxNQUFNLGVBQWUsS0FBS1MsQ0FBSyxJQUNuRFQsRUFBSyxNQUFNLEtBQUssTUFBTSxJQUV0QkEsRUFBSyxNQUFNLEtBQUssSUFBSTtBQUl4QixpQkFBUzdELElBQUksR0FBR0EsSUFBSW1FLEVBQVEsUUFBUW5FLElBQ2xDNkQsR0FBSyxPQUFPLEtBQUssRUFDZixNQUFNTSxFQUFRbkUsQ0FBQyxHQUNmLFFBQVEsS0FBSyxNQUFNLE9BQU9tRSxFQUFRbkUsQ0FBQyxDQUFDLEdBQ3BDLFFBQVEsTUFDUixPQUFPNkQsRUFBSyxNQUFNN0QsQ0FBQyxFQUNyQixDQUFDO0FBR0gsaUJBQVdQLEtBQU80RSxFQUNoQlIsR0FBSyxLQUFLLEtBQUt2RSxFQUFXRyxHQUFLb0UsRUFBSyxPQUFPLE1BQU0sRUFBRSxJQUFJLENBQUNVLEdBQU12RSxPQUNyRCxFQUNMLE1BQU11RSxHQUNOLFFBQVEsS0FBSyxNQUFNLE9BQU9BLENBQUksR0FDOUIsUUFBUSxPQUNSLE9BQU9WLEVBQUssTUFBTTdELENBQUMsRUFDckIsRUFDRCxDQUFDO0FBR0osZUFBTzZEO01BQUFBO0lBQ1Q7SUFFQSxTQUFTN0IsR0FBeUM7QUFDaEQsVUFBTWYsSUFBTSxLQUFLLE1BQU0sTUFBTSxTQUFTLEtBQUtlLENBQUc7QUFDOUMsVUFBSWYsR0FBSztBQUNQLFlBQU1LLElBQU9MLEVBQUksQ0FBQyxFQUFFLEtBQUs7QUFDekIsZUFBTyxFQUNMLE1BQU0sV0FDTixLQUFLQSxFQUFJLENBQUMsR0FDVixPQUFPQSxFQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxNQUFNLElBQUksR0FDdEMsTUFBQUssR0FDQSxRQUFRLEtBQUssTUFBTSxPQUFPQSxDQUFJLEVBQ2hDO01BQ0Y7SUFDRjtJQUVBLFVBQVVVLEdBQTJDO0FBQ25ELFVBQU1mLElBQU0sS0FBSyxNQUFNLE1BQU0sVUFBVSxLQUFLZSxDQUFHO0FBQy9DLFVBQUlmLEdBQUs7QUFDUCxZQUFNSyxJQUFPTCxFQUFJLENBQUMsRUFBRSxPQUFPQSxFQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTTtJQUM5Q0EsRUFBSSxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsSUFDbEJBLEVBQUksQ0FBQztBQUNULGVBQU8sRUFDTCxNQUFNLGFBQ04sS0FBS0EsRUFBSSxDQUFDLEdBQ1YsTUFBQUssR0FDQSxRQUFRLEtBQUssTUFBTSxPQUFPQSxDQUFJLEVBQ2hDO01BQ0Y7SUFDRjtJQUVBLEtBQUtVLEdBQXNDO0FBQ3pDLFVBQU1mLElBQU0sS0FBSyxNQUFNLE1BQU0sS0FBSyxLQUFLZSxDQUFHO0FBQzFDLFVBQUlmLEVBQ0YsUUFBTyxFQUNMLE1BQU0sUUFDTixLQUFLQSxFQUFJLENBQUMsR0FDVixNQUFNQSxFQUFJLENBQUMsR0FDWCxRQUFRLEtBQUssTUFBTSxPQUFPQSxFQUFJLENBQUMsQ0FBQyxFQUNsQztJQUVKO0lBRUEsT0FBT2UsR0FBd0M7QUFDN0MsVUFBTWYsSUFBTSxLQUFLLE1BQU0sT0FBTyxPQUFPLEtBQUtlLENBQUc7QUFDN0MsVUFBSWYsRUFDRixRQUFPLEVBQ0wsTUFBTSxVQUNOLEtBQUtBLEVBQUksQ0FBQyxHQUNWLE1BQU1BLEVBQUksQ0FBQyxFQUNiO0lBRUo7SUFFQSxJQUFJZSxHQUFxQztBQUN2QyxVQUFNZixJQUFNLEtBQUssTUFBTSxPQUFPLElBQUksS0FBS2UsQ0FBRztBQUMxQyxVQUFJZixFQUNGLFFBQUksQ0FBQyxLQUFLLE1BQU0sTUFBTSxVQUFVLEtBQUssTUFBTSxNQUFNLFVBQVUsS0FBS0EsRUFBSSxDQUFDLENBQUMsSUFDcEUsS0FBSyxNQUFNLE1BQU0sU0FBUyxPQUNqQixLQUFLLE1BQU0sTUFBTSxVQUFVLEtBQUssTUFBTSxNQUFNLFFBQVEsS0FBS0EsRUFBSSxDQUFDLENBQUMsTUFDeEUsS0FBSyxNQUFNLE1BQU0sU0FBUyxRQUV4QixDQUFDLEtBQUssTUFBTSxNQUFNLGNBQWMsS0FBSyxNQUFNLE1BQU0sa0JBQWtCLEtBQUtBLEVBQUksQ0FBQyxDQUFDLElBQ2hGLEtBQUssTUFBTSxNQUFNLGFBQWEsT0FDckIsS0FBSyxNQUFNLE1BQU0sY0FBYyxLQUFLLE1BQU0sTUFBTSxnQkFBZ0IsS0FBS0EsRUFBSSxDQUFDLENBQUMsTUFDcEYsS0FBSyxNQUFNLE1BQU0sYUFBYSxRQUd6QixFQUNMLE1BQU0sUUFDTixLQUFLQSxFQUFJLENBQUMsR0FDVixRQUFRLEtBQUssTUFBTSxNQUFNLFFBQ3pCLFlBQVksS0FBSyxNQUFNLE1BQU0sWUFDN0IsT0FBTyxPQUNQLE1BQU1BLEVBQUksQ0FBQyxFQUNiO0lBRUo7SUFFQSxLQUFLZSxHQUFxRDtBQUN4RCxVQUFNZixJQUFNLEtBQUssTUFBTSxPQUFPLEtBQUssS0FBS2UsQ0FBRztBQUMzQyxVQUFJZixHQUFLO0FBQ1AsWUFBTXVELElBQWF2RCxFQUFJLENBQUMsRUFBRSxLQUFLO0FBQy9CLFlBQUksQ0FBQyxLQUFLLFFBQVEsWUFBWSxLQUFLLE1BQU0sTUFBTSxrQkFBa0IsS0FBS3VELENBQVUsR0FBRztBQUVqRixjQUFJLENBQUUsS0FBSyxNQUFNLE1BQU0sZ0JBQWdCLEtBQUtBLENBQVUsRUFDcEQ7QUFJRixjQUFNQyxJQUFheEUsRUFBTXVFLEVBQVcsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJO0FBQ3RELGVBQUtBLEVBQVcsU0FBU0MsRUFBVyxVQUFVLE1BQU0sRUFDbEQ7UUFFSixPQUFPO0FBRUwsY0FBTUMsSUFBaUJuRSxHQUFtQlUsRUFBSSxDQUFDLEdBQUcsSUFBSTtBQUN0RCxjQUFJeUQsTUFBbUIsR0FFckI7QUFHRixjQUFJQSxJQUFpQixJQUFJO0FBRXZCLGdCQUFNQyxLQURRMUQsRUFBSSxDQUFDLEVBQUUsUUFBUSxHQUFHLE1BQU0sSUFBSSxJQUFJLEtBQ3RCQSxFQUFJLENBQUMsRUFBRSxTQUFTeUQ7QUFDeEN6RCxjQUFJLENBQUMsSUFBSUEsRUFBSSxDQUFDLEVBQUUsVUFBVSxHQUFHeUQsQ0FBYyxHQUMzQ3pELEVBQUksQ0FBQyxJQUFJQSxFQUFJLENBQUMsRUFBRSxVQUFVLEdBQUcwRCxDQUFPLEVBQUUsS0FBSyxHQUMzQzFELEVBQUksQ0FBQyxJQUFJO1VBQ1g7UUFDRjtBQUNBLFlBQUk1QixJQUFPNEIsRUFBSSxDQUFDLEdBQ1pJLElBQVE7QUFDWixZQUFJLEtBQUssUUFBUSxVQUFVO0FBRXpCLGNBQU1qRCxJQUFPLEtBQUssTUFBTSxNQUFNLGtCQUFrQixLQUFLaUIsQ0FBSTtBQUVyRGpCLGdCQUNGaUIsSUFBT2pCLEVBQUssQ0FBQyxHQUNiaUQsSUFBUWpELEVBQUssQ0FBQztRQUVsQixNQUNFaUQsS0FBUUosRUFBSSxDQUFDLElBQUlBLEVBQUksQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLElBQUk7QUFHekMsZUFBQTVCLElBQU9BLEVBQUssS0FBSyxHQUNiLEtBQUssTUFBTSxNQUFNLGtCQUFrQixLQUFLQSxDQUFJLE1BQzFDLEtBQUssUUFBUSxZQUFZLENBQUUsS0FBSyxNQUFNLE1BQU0sZ0JBQWdCLEtBQUttRixDQUFVLElBRTdFbkYsSUFBT0EsRUFBSyxNQUFNLENBQUMsSUFFbkJBLElBQU9BLEVBQUssTUFBTSxHQUFHLEVBQUUsSUFHcEIyQixHQUFXQyxHQUFLLEVBQ3JCLE1BQU01QixLQUFPQSxFQUFLLFFBQVEsS0FBSyxNQUFNLE9BQU8sZ0JBQWdCLElBQUksR0FDaEUsT0FBT2dDLEtBQVFBLEVBQU0sUUFBUSxLQUFLLE1BQU0sT0FBTyxnQkFBZ0IsSUFBSSxFQUNyRSxHQUFHSixFQUFJLENBQUMsR0FBRyxLQUFLLE9BQU8sS0FBSyxLQUFLO01BQ25DO0lBQ0Y7SUFFQSxRQUFRZSxHQUFhNEMsR0FBb0U7QUFDdkYsVUFBSTNEO0FBQ0osV0FBS0EsSUFBTSxLQUFLLE1BQU0sT0FBTyxRQUFRLEtBQUtlLENBQUcsT0FDdkNmLElBQU0sS0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFLZSxDQUFHLElBQUk7QUFDL0MsWUFBTTZDLEtBQWM1RCxFQUFJLENBQUMsS0FBS0EsRUFBSSxDQUFDLEdBQUcsUUFBUSxLQUFLLE1BQU0sTUFBTSxxQkFBcUIsR0FBRyxHQUNqRjdDLElBQU93RyxFQUFNQyxFQUFXLFlBQVksQ0FBQztBQUMzQyxZQUFJLENBQUN6RyxHQUFNO0FBQ1QsY0FBTWtELElBQU9MLEVBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQztBQUM1QixpQkFBTyxFQUNMLE1BQU0sUUFDTixLQUFLSyxHQUNMLE1BQUFBLEVBQ0Y7UUFDRjtBQUNBLGVBQU9OLEdBQVdDLEdBQUs3QyxHQUFNNkMsRUFBSSxDQUFDLEdBQUcsS0FBSyxPQUFPLEtBQUssS0FBSztNQUM3RDtJQUNGO0lBRUEsU0FBU2UsR0FBYThDLEdBQW1CQyxJQUFXLElBQTJDO0FBQzdGLFVBQUlyRixJQUFRLEtBQUssTUFBTSxPQUFPLGVBQWUsS0FBS3NDLENBQUc7QUFLckQsVUFKSSxDQUFDdEMsS0FDRCxDQUFDQSxFQUFNLENBQUMsS0FBSyxDQUFDQSxFQUFNLENBQUMsS0FBSyxDQUFDQSxFQUFNLENBQUMsS0FBSyxDQUFDQSxFQUFNLENBQUMsS0FHL0NBLEVBQU0sQ0FBQyxLQUFLcUYsRUFBUyxNQUFNLEtBQUssTUFBTSxNQUFNLG1CQUFtQixFQUFHO0FBSXRFLFVBQUksRUFGYXJGLEVBQU0sQ0FBQyxLQUFLQSxFQUFNLENBQUMsS0FBSyxPQUV4QixDQUFDcUYsS0FBWSxLQUFLLE1BQU0sT0FBTyxZQUFZLEtBQUtBLENBQVEsR0FBRztBQUUxRSxZQUFNQyxJQUFVLENBQUMsR0FBR3RGLEVBQU0sQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUNuQ3VGLEdBQVFDLEdBQVNDLElBQWFILEdBQVNJLElBQWdCLEdBRXJEQyxJQUFTM0YsRUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLE1BQU0sS0FBSyxNQUFNLE9BQU8sb0JBQW9CLEtBQUssTUFBTSxPQUFPO0FBTTdGLGFBTEEyRixFQUFPLFlBQVksR0FHbkJQLElBQVlBLEVBQVUsTUFBTSxLQUFLOUMsRUFBSSxTQUFTZ0QsQ0FBTyxJQUU3Q3RGLElBQVEyRixFQUFPLEtBQUtQLENBQVMsTUFBTSxRQUFNO0FBRy9DLGNBRkFHLElBQVN2RixFQUFNLENBQUMsS0FBS0EsRUFBTSxDQUFDLEtBQUtBLEVBQU0sQ0FBQyxLQUFLQSxFQUFNLENBQUMsS0FBS0EsRUFBTSxDQUFDLEtBQUtBLEVBQU0sQ0FBQyxHQUV4RSxDQUFDdUYsRUFBUTtBQUliLGNBRkFDLElBQVUsQ0FBQyxHQUFHRCxDQUFNLEVBQUUsUUFFbEJ2RixFQUFNLENBQUMsS0FBS0EsRUFBTSxDQUFDLEdBQUc7QUFDeEJ5RixpQkFBY0Q7QUFDZDtVQUNGLFlBQVd4RixFQUFNLENBQUMsS0FBS0EsRUFBTSxDQUFDLE1BQ3hCc0YsSUFBVSxLQUFLLEdBQUdBLElBQVVFLEtBQVcsSUFBSTtBQUM3Q0UsaUJBQWlCRjtBQUNqQjtVQUNGO0FBS0YsY0FGQUMsS0FBY0QsR0FFVkMsSUFBYSxFQUFHO0FBR3BCRCxjQUFVLEtBQUssSUFBSUEsR0FBU0EsSUFBVUMsSUFBYUMsQ0FBYTtBQUVoRSxjQUFNRSxJQUFpQixDQUFDLEdBQUc1RixFQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUNsQ3dCLElBQU1jLEVBQUksTUFBTSxHQUFHZ0QsSUFBVXRGLEVBQU0sUUFBUTRGLElBQWlCSixDQUFPO0FBR3pFLGNBQUksS0FBSyxJQUFJRixHQUFTRSxDQUFPLElBQUksR0FBRztBQUNsQyxnQkFBTTVELElBQU9KLEVBQUksTUFBTSxHQUFHLEVBQUU7QUFDNUIsbUJBQU8sRUFDTCxNQUFNLE1BQ04sS0FBQUEsR0FDQSxNQUFBSSxHQUNBLFFBQVEsS0FBSyxNQUFNLGFBQWFBLENBQUksRUFDdEM7VUFDRjtBQUdBLGNBQU1BLElBQU9KLEVBQUksTUFBTSxHQUFHLEVBQUU7QUFDNUIsaUJBQU8sRUFDTCxNQUFNLFVBQ04sS0FBQUEsR0FDQSxNQUFBSSxHQUNBLFFBQVEsS0FBSyxNQUFNLGFBQWFBLENBQUksRUFDdEM7UUFDRjtNQUNGO0lBQ0Y7SUFFQSxTQUFTVSxHQUEwQztBQUNqRCxVQUFNZixJQUFNLEtBQUssTUFBTSxPQUFPLEtBQUssS0FBS2UsQ0FBRztBQUMzQyxVQUFJZixHQUFLO0FBQ1AsWUFBSUssSUFBT0wsRUFBSSxDQUFDLEVBQUUsUUFBUSxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsR0FBRyxHQUMzRHNFLElBQW1CLEtBQUssTUFBTSxNQUFNLGFBQWEsS0FBS2pFLENBQUksR0FDMURrRSxJQUEwQixLQUFLLE1BQU0sTUFBTSxrQkFBa0IsS0FBS2xFLENBQUksS0FBSyxLQUFLLE1BQU0sTUFBTSxnQkFBZ0IsS0FBS0EsQ0FBSTtBQUMzSCxlQUFJaUUsS0FBb0JDLE1BQ3RCbEUsSUFBT0EsRUFBSyxVQUFVLEdBQUdBLEVBQUssU0FBUyxDQUFDLElBRW5DLEVBQ0wsTUFBTSxZQUNOLEtBQUtMLEVBQUksQ0FBQyxHQUNWLE1BQUFLLEVBQ0Y7TUFDRjtJQUNGO0lBRUEsR0FBR1UsR0FBb0M7QUFDckMsVUFBTWYsSUFBTSxLQUFLLE1BQU0sT0FBTyxHQUFHLEtBQUtlLENBQUc7QUFDekMsVUFBSWYsRUFDRixRQUFPLEVBQ0wsTUFBTSxNQUNOLEtBQUtBLEVBQUksQ0FBQyxFQUNaO0lBRUo7SUFFQSxJQUFJZSxHQUFhOEMsR0FBbUJDLElBQVcsSUFBNEI7QUFDekUsVUFBSXJGLElBQVEsS0FBSyxNQUFNLE9BQU8sVUFBVSxLQUFLc0MsQ0FBRztBQUNoRCxVQUFJLENBQUN0QyxFQUFPO0FBSVosVUFBSSxFQUZhQSxFQUFNLENBQUMsS0FBSyxPQUVaLENBQUNxRixLQUFZLEtBQUssTUFBTSxPQUFPLFlBQVksS0FBS0EsQ0FBUSxHQUFHO0FBRTFFLFlBQU1DLElBQVUsQ0FBQyxHQUFHdEYsRUFBTSxDQUFDLENBQUMsRUFBRSxTQUFTLEdBQ25DdUYsR0FBUUMsR0FBU0MsSUFBYUgsR0FFNUJLLElBQVMsS0FBSyxNQUFNLE9BQU87QUFNakMsYUFMQUEsRUFBTyxZQUFZLEdBR25CUCxJQUFZQSxFQUFVLE1BQU0sS0FBSzlDLEVBQUksU0FBU2dELENBQU8sSUFFN0N0RixJQUFRMkYsRUFBTyxLQUFLUCxDQUFTLE1BQU0sUUFBTTtBQU8vQyxjQU5BRyxJQUFTdkYsRUFBTSxDQUFDLEtBQUtBLEVBQU0sQ0FBQyxLQUFLQSxFQUFNLENBQUMsS0FBS0EsRUFBTSxDQUFDLEtBQUtBLEVBQU0sQ0FBQyxLQUFLQSxFQUFNLENBQUMsR0FFeEUsQ0FBQ3VGLE1BRUxDLElBQVUsQ0FBQyxHQUFHRCxDQUFNLEVBQUUsUUFFbEJDLE1BQVlGLEdBQVM7QUFFekIsY0FBSXRGLEVBQU0sQ0FBQyxLQUFLQSxFQUFNLENBQUMsR0FBRztBQUN4QnlGLGlCQUFjRDtBQUNkO1VBQ0Y7QUFJQSxjQUZBQyxLQUFjRCxHQUVWQyxJQUFhLEVBQUc7QUFHcEJELGNBQVUsS0FBSyxJQUFJQSxHQUFTQSxJQUFVQyxDQUFVO0FBRWhELGNBQU1HLElBQWlCLENBQUMsR0FBRzVGLEVBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQ2xDd0IsSUFBTWMsRUFBSSxNQUFNLEdBQUdnRCxJQUFVdEYsRUFBTSxRQUFRNEYsSUFBaUJKLENBQU8sR0FHbkU1RCxJQUFPSixFQUFJLE1BQU04RCxHQUFTLENBQUNBLENBQU87QUFDeEMsaUJBQU8sRUFDTCxNQUFNLE9BQ04sS0FBQTlELEdBQ0EsTUFBQUksR0FDQSxRQUFRLEtBQUssTUFBTSxhQUFhQSxDQUFJLEVBQ3RDO1FBQ0Y7TUFDRjtJQUNGO0lBRUEsU0FBU1UsR0FBc0M7QUFDN0MsVUFBTWYsSUFBTSxLQUFLLE1BQU0sT0FBTyxTQUFTLEtBQUtlLENBQUc7QUFDL0MsVUFBSWYsR0FBSztBQUNQLFlBQUlLLEdBQU1qQztBQUNWLGVBQUk0QixFQUFJLENBQUMsTUFBTSxPQUNiSyxJQUFPTCxFQUFJLENBQUMsR0FDWjVCLElBQU8sWUFBWWlDLE1BRW5CQSxJQUFPTCxFQUFJLENBQUMsR0FDWjVCLElBQU9pQyxJQUdGLEVBQ0wsTUFBTSxRQUNOLEtBQUtMLEVBQUksQ0FBQyxHQUNWLE1BQUFLLEdBQ0EsTUFBQWpDLEdBQ0EsUUFBUSxDQUNOLEVBQ0UsTUFBTSxRQUNOLEtBQUtpQyxHQUNMLE1BQUFBLEVBQ0YsQ0FDRixFQUNGO01BQ0Y7SUFDRjtJQUVBLElBQUlVLEdBQXNDO0FBQ3hDLFVBQUlmO0FBQ0osVUFBSUEsSUFBTSxLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUtlLENBQUcsR0FBRztBQUN6QyxZQUFJVixHQUFNakM7QUFDVixZQUFJNEIsRUFBSSxDQUFDLE1BQU0sSUFDYkssS0FBT0wsRUFBSSxDQUFDLEdBQ1o1QixJQUFPLFlBQVlpQzthQUNkO0FBRUwsY0FBSW1FO0FBQ0o7QUFDRUEsZ0JBQWN4RSxFQUFJLENBQUMsR0FDbkJBLEVBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxPQUFPLFdBQVcsS0FBS0EsRUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUs7aUJBQ3BEd0UsTUFBZ0J4RSxFQUFJLENBQUM7QUFDOUJLLGNBQU9MLEVBQUksQ0FBQyxHQUNSQSxFQUFJLENBQUMsTUFBTSxTQUNiNUIsSUFBTyxZQUFZNEIsRUFBSSxDQUFDLElBRXhCNUIsSUFBTzRCLEVBQUksQ0FBQztRQUVoQjtBQUNBLGVBQU8sRUFDTCxNQUFNLFFBQ04sS0FBS0EsRUFBSSxDQUFDLEdBQ1YsTUFBQUssR0FDQSxNQUFBakMsR0FDQSxRQUFRLENBQ04sRUFDRSxNQUFNLFFBQ04sS0FBS2lDLEdBQ0wsTUFBQUEsRUFDRixDQUNGLEVBQ0Y7TUFDRjtJQUNGO0lBRUEsV0FBV1UsR0FBc0M7QUFDL0MsVUFBTWYsSUFBTSxLQUFLLE1BQU0sT0FBTyxLQUFLLEtBQUtlLENBQUc7QUFDM0MsVUFBSWYsR0FBSztBQUNQLFlBQU1wQixJQUFVLEtBQUssTUFBTSxNQUFNO0FBQ2pDLGVBQU8sRUFDTCxNQUFNLFFBQ04sS0FBS29CLEVBQUksQ0FBQyxHQUNWLE1BQU1BLEVBQUksQ0FBQyxHQUNYLFNBQUFwQixFQUNGO01BQ0Y7SUFDRjtFQUNGO0FDcDdCTyxNQUFNNkYsSUFBTixNQUFNQyxFQUF1RDtJQWFsRSxZQUFZNUQsR0FBdUQ7QUFabkU7QUFDQTtBQUNBO0FBTU87QUFFQztBQUlOLFdBQUssU0FBUyxDQUFDLEdBQ2YsS0FBSyxPQUFPLFFBQVEsdUJBQU8sT0FBTyxJQUFJLEdBQ3RDLEtBQUssVUFBVUEsS0FBVzdILEdBQzFCLEtBQUssUUFBUSxZQUFZLEtBQUssUUFBUSxhQUFhLElBQUk0SCxLQUN2RCxLQUFLLFlBQVksS0FBSyxRQUFRLFdBQzlCLEtBQUssVUFBVSxVQUFVLEtBQUssU0FDOUIsS0FBSyxVQUFVLFFBQVEsTUFDdkIsS0FBSyxjQUFjLENBQUMsR0FDcEIsS0FBSyxRQUFRLEVBQ1gsUUFBUSxPQUNSLFlBQVksT0FDWixLQUFLLEtBQ1A7QUFFQSxVQUFNVixJQUFRLEVBQ1osT0FBQXRHLEdBQ0EsT0FBTytELEVBQU0sUUFDYixRQUFRQyxFQUFPLE9BQ2pCO0FBRUksV0FBSyxRQUFRLFlBQ2ZzQyxFQUFNLFFBQVF2QyxFQUFNLFVBQ3BCdUMsRUFBTSxTQUFTdEMsRUFBTyxZQUNiLEtBQUssUUFBUSxRQUN0QnNDLEVBQU0sUUFBUXZDLEVBQU0sS0FDaEIsS0FBSyxRQUFRLFNBQ2Z1QyxFQUFNLFNBQVN0QyxFQUFPLFNBRXRCc0MsRUFBTSxTQUFTdEMsRUFBTyxNQUcxQixLQUFLLFVBQVUsUUFBUXNDO0lBQ3pCO0lBS0EsV0FBVyxRQUFRO0FBQ2pCLGFBQU8sRUFDTCxPQUFBdkMsR0FDQSxRQUFBQyxFQUNGO0lBQ0Y7SUFLQSxPQUFPLElBQW9Ea0QsR0FBYUQsR0FBdUQ7QUFFN0gsYUFEYyxJQUFJNEQsRUFBcUM1RCxDQUFPLEVBQ2pELElBQUlDLENBQUc7SUFDdEI7SUFLQSxPQUFPLFVBQTBEQSxHQUFhRCxHQUF1RDtBQUVuSSxhQURjLElBQUk0RCxFQUFxQzVELENBQU8sRUFDakQsYUFBYUMsQ0FBRztJQUMvQjtJQUtBLElBQUlBLEdBQWE7QUFDZkEsVUFBTUEsRUFBSSxRQUFRbEgsRUFBTSxnQkFBZ0I7Q0FBSSxHQUU1QyxLQUFLLFlBQVlrSCxHQUFLLEtBQUssTUFBTTtBQUVqQyxlQUFTaEMsSUFBSSxHQUFHQSxJQUFJLEtBQUssWUFBWSxRQUFRQSxLQUFLO0FBQ2hELFlBQU00RixJQUFPLEtBQUssWUFBWTVGLENBQUM7QUFDL0IsYUFBSyxhQUFhNEYsRUFBSyxLQUFLQSxFQUFLLE1BQU07TUFDekM7QUFDQSxhQUFBLEtBQUssY0FBYyxDQUFDLEdBRWIsS0FBSztJQUNkO0lBT0EsWUFBWTVELEdBQWFHLElBQWtCLENBQUMsR0FBRzBELElBQXVCLE9BQU87QUFNM0UsV0FMQSxLQUFLLFVBQVUsUUFBUSxNQUNuQixLQUFLLFFBQVEsYUFDZjdELElBQU1BLEVBQUksUUFBUWxILEVBQU0sZUFBZSxNQUFNLEVBQUUsUUFBUUEsRUFBTSxXQUFXLEVBQUUsSUFHckVrSCxLQUFLO0FBQ1YsWUFBSVQ7QUFFSixZQUFJLEtBQUssUUFBUSxZQUFZLE9BQU8sS0FBTXVFLFFBQ3BDdkUsSUFBUXVFLEVBQWEsS0FBSyxFQUFFLE9BQU8sS0FBSyxHQUFHOUQsR0FBS0csQ0FBTSxNQUN4REgsSUFBTUEsRUFBSSxVQUFVVCxFQUFNLElBQUksTUFBTSxHQUNwQ1ksRUFBTyxLQUFLWixDQUFLLEdBQ1YsUUFFRixLQUNSLEVBQ0M7QUFJRixZQUFJQSxJQUFRLEtBQUssVUFBVSxNQUFNUyxDQUFHLEdBQUc7QUFDckNBLGNBQU1BLEVBQUksVUFBVVQsRUFBTSxJQUFJLE1BQU07QUFDcEMsY0FBTWtCLElBQVlOLEVBQU8sR0FBRyxFQUFFO0FBQzFCWixZQUFNLElBQUksV0FBVyxLQUFLa0IsTUFBYyxTQUcxQ0EsRUFBVSxPQUFPO0lBRWpCTixFQUFPLEtBQUtaLENBQUs7QUFFbkI7UUFDRjtBQUdBLFlBQUlBLElBQVEsS0FBSyxVQUFVLEtBQUtTLENBQUcsR0FBRztBQUNwQ0EsY0FBTUEsRUFBSSxVQUFVVCxFQUFNLElBQUksTUFBTTtBQUNwQyxjQUFNa0IsSUFBWU4sRUFBTyxHQUFHLEVBQUU7QUFFMUJNLGFBQVcsU0FBUyxlQUFlQSxHQUFXLFNBQVMsVUFDekRBLEVBQVUsUUFBUUEsRUFBVSxJQUFJLFNBQVM7Q0FBSSxJQUFJLEtBQUs7S0FBUWxCLEVBQU0sS0FDcEVrQixFQUFVLFFBQVE7SUFBT2xCLEVBQU0sTUFDL0IsS0FBSyxZQUFZLEdBQUcsRUFBRSxFQUFHLE1BQU1rQixFQUFVLFFBRXpDTixFQUFPLEtBQUtaLENBQUs7QUFFbkI7UUFDRjtBQUdBLFlBQUlBLElBQVEsS0FBSyxVQUFVLE9BQU9TLENBQUcsR0FBRztBQUN0Q0EsY0FBTUEsRUFBSSxVQUFVVCxFQUFNLElBQUksTUFBTSxHQUNwQ1ksRUFBTyxLQUFLWixDQUFLO0FBQ2pCO1FBQ0Y7QUFHQSxZQUFJQSxJQUFRLEtBQUssVUFBVSxRQUFRUyxDQUFHLEdBQUc7QUFDdkNBLGNBQU1BLEVBQUksVUFBVVQsRUFBTSxJQUFJLE1BQU0sR0FDcENZLEVBQU8sS0FBS1osQ0FBSztBQUNqQjtRQUNGO0FBR0EsWUFBSUEsSUFBUSxLQUFLLFVBQVUsR0FBR1MsQ0FBRyxHQUFHO0FBQ2xDQSxjQUFNQSxFQUFJLFVBQVVULEVBQU0sSUFBSSxNQUFNLEdBQ3BDWSxFQUFPLEtBQUtaLENBQUs7QUFDakI7UUFDRjtBQUdBLFlBQUlBLElBQVEsS0FBSyxVQUFVLFdBQVdTLENBQUcsR0FBRztBQUMxQ0EsY0FBTUEsRUFBSSxVQUFVVCxFQUFNLElBQUksTUFBTSxHQUNwQ1ksRUFBTyxLQUFLWixDQUFLO0FBQ2pCO1FBQ0Y7QUFHQSxZQUFJQSxJQUFRLEtBQUssVUFBVSxLQUFLUyxDQUFHLEdBQUc7QUFDcENBLGNBQU1BLEVBQUksVUFBVVQsRUFBTSxJQUFJLE1BQU0sR0FDcENZLEVBQU8sS0FBS1osQ0FBSztBQUNqQjtRQUNGO0FBR0EsWUFBSUEsSUFBUSxLQUFLLFVBQVUsS0FBS1MsQ0FBRyxHQUFHO0FBQ3BDQSxjQUFNQSxFQUFJLFVBQVVULEVBQU0sSUFBSSxNQUFNLEdBQ3BDWSxFQUFPLEtBQUtaLENBQUs7QUFDakI7UUFDRjtBQUdBLFlBQUlBLElBQVEsS0FBSyxVQUFVLElBQUlTLENBQUcsR0FBRztBQUNuQ0EsY0FBTUEsRUFBSSxVQUFVVCxFQUFNLElBQUksTUFBTTtBQUNwQyxjQUFNa0IsSUFBWU4sRUFBTyxHQUFHLEVBQUU7QUFDMUJNLGFBQVcsU0FBUyxlQUFlQSxHQUFXLFNBQVMsVUFDekRBLEVBQVUsUUFBUUEsRUFBVSxJQUFJLFNBQVM7Q0FBSSxJQUFJLEtBQUs7S0FBUWxCLEVBQU0sS0FDcEVrQixFQUFVLFFBQVE7SUFBT2xCLEVBQU0sS0FDL0IsS0FBSyxZQUFZLEdBQUcsRUFBRSxFQUFHLE1BQU1rQixFQUFVLFFBQy9CLEtBQUssT0FBTyxNQUFNbEIsRUFBTSxHQUFHLE1BQ3JDLEtBQUssT0FBTyxNQUFNQSxFQUFNLEdBQUcsSUFBSSxFQUM3QixNQUFNQSxFQUFNLE1BQ1osT0FBT0EsRUFBTSxNQUNmLEdBQ0FZLEVBQU8sS0FBS1osQ0FBSztBQUVuQjtRQUNGO0FBR0EsWUFBSUEsSUFBUSxLQUFLLFVBQVUsTUFBTVMsQ0FBRyxHQUFHO0FBQ3JDQSxjQUFNQSxFQUFJLFVBQVVULEVBQU0sSUFBSSxNQUFNLEdBQ3BDWSxFQUFPLEtBQUtaLENBQUs7QUFDakI7UUFDRjtBQUdBLFlBQUlBLElBQVEsS0FBSyxVQUFVLFNBQVNTLENBQUcsR0FBRztBQUN4Q0EsY0FBTUEsRUFBSSxVQUFVVCxFQUFNLElBQUksTUFBTSxHQUNwQ1ksRUFBTyxLQUFLWixDQUFLO0FBQ2pCO1FBQ0Y7QUFJQSxZQUFJd0UsSUFBUy9EO0FBQ2IsWUFBSSxLQUFLLFFBQVEsWUFBWSxZQUFZO0FBQ3ZDLGNBQUlnRSxJQUFhLElBQUEsR0FDWEMsSUFBVWpFLEVBQUksTUFBTSxDQUFDLEdBQ3ZCa0U7QUFDSixlQUFLLFFBQVEsV0FBVyxXQUFXLFFBQVNDLE9BQWtCO0FBQzVERCxnQkFBWUMsRUFBYyxLQUFLLEVBQUUsT0FBTyxLQUFLLEdBQUdGLENBQU8sR0FDbkQsT0FBT0MsS0FBYyxZQUFZQSxLQUFhLE1BQ2hERixJQUFhLEtBQUssSUFBSUEsR0FBWUUsQ0FBUztVQUUvQyxDQUFDLEdBQ0dGLElBQWEsSUFBQSxLQUFZQSxLQUFjLE1BQ3pDRCxJQUFTL0QsRUFBSSxVQUFVLEdBQUdnRSxJQUFhLENBQUM7UUFFNUM7QUFDQSxZQUFJLEtBQUssTUFBTSxRQUFRekUsSUFBUSxLQUFLLFVBQVUsVUFBVXdFLENBQU0sSUFBSTtBQUNoRSxjQUFNdEQsSUFBWU4sRUFBTyxHQUFHLEVBQUU7QUFDMUIwRCxlQUF3QnBELEdBQVcsU0FBUyxlQUM5Q0EsRUFBVSxRQUFRQSxFQUFVLElBQUksU0FBUztDQUFJLElBQUksS0FBSztLQUFRbEIsRUFBTSxLQUNwRWtCLEVBQVUsUUFBUTtJQUFPbEIsRUFBTSxNQUMvQixLQUFLLFlBQVksSUFBSSxHQUNyQixLQUFLLFlBQVksR0FBRyxFQUFFLEVBQUcsTUFBTWtCLEVBQVUsUUFFekNOLEVBQU8sS0FBS1osQ0FBSyxHQUVuQnNFLElBQXVCRSxFQUFPLFdBQVcvRCxFQUFJLFFBQzdDQSxJQUFNQSxFQUFJLFVBQVVULEVBQU0sSUFBSSxNQUFNO0FBQ3BDO1FBQ0Y7QUFHQSxZQUFJQSxJQUFRLEtBQUssVUFBVSxLQUFLUyxDQUFHLEdBQUc7QUFDcENBLGNBQU1BLEVBQUksVUFBVVQsRUFBTSxJQUFJLE1BQU07QUFDcEMsY0FBTWtCLElBQVlOLEVBQU8sR0FBRyxFQUFFO0FBQzFCTSxhQUFXLFNBQVMsVUFDdEJBLEVBQVUsUUFBUUEsRUFBVSxJQUFJLFNBQVM7Q0FBSSxJQUFJLEtBQUs7S0FBUWxCLEVBQU0sS0FDcEVrQixFQUFVLFFBQVE7SUFBT2xCLEVBQU0sTUFDL0IsS0FBSyxZQUFZLElBQUksR0FDckIsS0FBSyxZQUFZLEdBQUcsRUFBRSxFQUFHLE1BQU1rQixFQUFVLFFBRXpDTixFQUFPLEtBQUtaLENBQUs7QUFFbkI7UUFDRjtBQUVBLFlBQUlTLEdBQUs7QUFDUCxjQUFNb0UsSUFBUyw0QkFBNEJwRSxFQUFJLFdBQVcsQ0FBQztBQUMzRCxjQUFJLEtBQUssUUFBUSxRQUFRO0FBQ3ZCLG9CQUFRLE1BQU1vRSxDQUFNO0FBQ3BCO1VBQ0YsTUFDRSxPQUFNLElBQUksTUFBTUEsQ0FBTTtRQUUxQjtNQUNGO0FBRUEsYUFBQSxLQUFLLE1BQU0sTUFBTSxNQUNWakU7SUFDVDtJQUVBLE9BQU9ILEdBQWFHLElBQWtCLENBQUMsR0FBRztBQUN4QyxhQUFBLEtBQUssWUFBWSxLQUFLLEVBQUUsS0FBQUgsR0FBSyxRQUFBRyxFQUFPLENBQUMsR0FDOUJBO0lBQ1Q7SUFLQSxhQUFhSCxHQUFhRyxJQUFrQixDQUFDLEdBQVk7QUFDdkQsV0FBSyxVQUFVLFFBQVE7QUFFdkIsVUFBSTJDLElBQVk5QyxHQUNadEMsSUFBZ0M7QUFHcEMsVUFBSSxLQUFLLE9BQU8sT0FBTztBQUNyQixZQUFNa0YsSUFBUSxPQUFPLEtBQUssS0FBSyxPQUFPLEtBQUs7QUFDM0MsWUFBSUEsRUFBTSxTQUFTLEVBQ2pCLFNBQVFsRixJQUFRLEtBQUssVUFBVSxNQUFNLE9BQU8sY0FBYyxLQUFLb0YsQ0FBUyxNQUFNLE9BQ3hFRixHQUFNLFNBQVNsRixFQUFNLENBQUMsRUFBRSxNQUFNQSxFQUFNLENBQUMsRUFBRSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxNQUNsRW9GLElBQVlBLEVBQVUsTUFBTSxHQUFHcEYsRUFBTSxLQUFLLElBQ3RDLE1BQU0sSUFBSSxPQUFPQSxFQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxNQUN4Q29GLEVBQVUsTUFBTSxLQUFLLFVBQVUsTUFBTSxPQUFPLGNBQWMsU0FBUztNQUkvRTtBQUdBLGNBQVFwRixJQUFRLEtBQUssVUFBVSxNQUFNLE9BQU8sZUFBZSxLQUFLb0YsQ0FBUyxNQUFNLE9BQzdFQSxLQUFZQSxFQUFVLE1BQU0sR0FBR3BGLEVBQU0sS0FBSyxJQUFJLE9BQU9vRixFQUFVLE1BQU0sS0FBSyxVQUFVLE1BQU0sT0FBTyxlQUFlLFNBQVM7QUFJM0gsVUFBSW5GO0FBQ0osY0FBUUQsSUFBUSxLQUFLLFVBQVUsTUFBTSxPQUFPLFVBQVUsS0FBS29GLENBQVMsTUFBTSxPQUN4RW5GLEtBQVNELEVBQU0sQ0FBQyxJQUFJQSxFQUFNLENBQUMsRUFBRSxTQUFTLEdBQ3RDb0YsSUFBWUEsRUFBVSxNQUFNLEdBQUdwRixFQUFNLFFBQVFDLENBQU0sSUFBSSxNQUFNLElBQUksT0FBT0QsRUFBTSxDQUFDLEVBQUUsU0FBU0MsSUFBUyxDQUFDLElBQUksTUFBTW1GLEVBQVUsTUFBTSxLQUFLLFVBQVUsTUFBTSxPQUFPLFVBQVUsU0FBUztBQUkvS0EsVUFBWSxLQUFLLFFBQVEsT0FBTyxjQUFjLEtBQUssRUFBRSxPQUFPLEtBQUssR0FBR0EsQ0FBUyxLQUFLQTtBQUVsRixVQUFJdUIsSUFBZSxPQUNmdEIsSUFBVztBQUNmLGFBQU8vQyxLQUFLO0FBQ0xxRSxjQUNIdEIsSUFBVyxLQUVic0IsSUFBZTtBQUVmLFlBQUk5RTtBQUdKLFlBQUksS0FBSyxRQUFRLFlBQVksUUFBUSxLQUFNdUUsUUFDckN2RSxJQUFRdUUsRUFBYSxLQUFLLEVBQUUsT0FBTyxLQUFLLEdBQUc5RCxHQUFLRyxDQUFNLE1BQ3hESCxJQUFNQSxFQUFJLFVBQVVULEVBQU0sSUFBSSxNQUFNLEdBQ3BDWSxFQUFPLEtBQUtaLENBQUssR0FDVixRQUVGLEtBQ1IsRUFDQztBQUlGLFlBQUlBLElBQVEsS0FBSyxVQUFVLE9BQU9TLENBQUcsR0FBRztBQUN0Q0EsY0FBTUEsRUFBSSxVQUFVVCxFQUFNLElBQUksTUFBTSxHQUNwQ1ksRUFBTyxLQUFLWixDQUFLO0FBQ2pCO1FBQ0Y7QUFHQSxZQUFJQSxJQUFRLEtBQUssVUFBVSxJQUFJUyxDQUFHLEdBQUc7QUFDbkNBLGNBQU1BLEVBQUksVUFBVVQsRUFBTSxJQUFJLE1BQU0sR0FDcENZLEVBQU8sS0FBS1osQ0FBSztBQUNqQjtRQUNGO0FBR0EsWUFBSUEsSUFBUSxLQUFLLFVBQVUsS0FBS1MsQ0FBRyxHQUFHO0FBQ3BDQSxjQUFNQSxFQUFJLFVBQVVULEVBQU0sSUFBSSxNQUFNLEdBQ3BDWSxFQUFPLEtBQUtaLENBQUs7QUFDakI7UUFDRjtBQUdBLFlBQUlBLElBQVEsS0FBSyxVQUFVLFFBQVFTLEdBQUssS0FBSyxPQUFPLEtBQUssR0FBRztBQUMxREEsY0FBTUEsRUFBSSxVQUFVVCxFQUFNLElBQUksTUFBTTtBQUNwQyxjQUFNa0IsSUFBWU4sRUFBTyxHQUFHLEVBQUU7QUFDMUJaLFlBQU0sU0FBUyxVQUFVa0IsR0FBVyxTQUFTLFVBQy9DQSxFQUFVLE9BQU9sQixFQUFNLEtBQ3ZCa0IsRUFBVSxRQUFRbEIsRUFBTSxRQUV4QlksRUFBTyxLQUFLWixDQUFLO0FBRW5CO1FBQ0Y7QUFHQSxZQUFJQSxJQUFRLEtBQUssVUFBVSxTQUFTUyxHQUFLOEMsR0FBV0MsQ0FBUSxHQUFHO0FBQzdEL0MsY0FBTUEsRUFBSSxVQUFVVCxFQUFNLElBQUksTUFBTSxHQUNwQ1ksRUFBTyxLQUFLWixDQUFLO0FBQ2pCO1FBQ0Y7QUFHQSxZQUFJQSxJQUFRLEtBQUssVUFBVSxTQUFTUyxDQUFHLEdBQUc7QUFDeENBLGNBQU1BLEVBQUksVUFBVVQsRUFBTSxJQUFJLE1BQU0sR0FDcENZLEVBQU8sS0FBS1osQ0FBSztBQUNqQjtRQUNGO0FBR0EsWUFBSUEsSUFBUSxLQUFLLFVBQVUsR0FBR1MsQ0FBRyxHQUFHO0FBQ2xDQSxjQUFNQSxFQUFJLFVBQVVULEVBQU0sSUFBSSxNQUFNLEdBQ3BDWSxFQUFPLEtBQUtaLENBQUs7QUFDakI7UUFDRjtBQUdBLFlBQUlBLElBQVEsS0FBSyxVQUFVLElBQUlTLEdBQUs4QyxHQUFXQyxDQUFRLEdBQUc7QUFDeEQvQyxjQUFNQSxFQUFJLFVBQVVULEVBQU0sSUFBSSxNQUFNLEdBQ3BDWSxFQUFPLEtBQUtaLENBQUs7QUFDakI7UUFDRjtBQUdBLFlBQUlBLElBQVEsS0FBSyxVQUFVLFNBQVNTLENBQUcsR0FBRztBQUN4Q0EsY0FBTUEsRUFBSSxVQUFVVCxFQUFNLElBQUksTUFBTSxHQUNwQ1ksRUFBTyxLQUFLWixDQUFLO0FBQ2pCO1FBQ0Y7QUFHQSxZQUFJLENBQUMsS0FBSyxNQUFNLFdBQVdBLElBQVEsS0FBSyxVQUFVLElBQUlTLENBQUcsSUFBSTtBQUMzREEsY0FBTUEsRUFBSSxVQUFVVCxFQUFNLElBQUksTUFBTSxHQUNwQ1ksRUFBTyxLQUFLWixDQUFLO0FBQ2pCO1FBQ0Y7QUFJQSxZQUFJd0UsSUFBUy9EO0FBQ2IsWUFBSSxLQUFLLFFBQVEsWUFBWSxhQUFhO0FBQ3hDLGNBQUlnRSxJQUFhLElBQUEsR0FDWEMsSUFBVWpFLEVBQUksTUFBTSxDQUFDLEdBQ3ZCa0U7QUFDSixlQUFLLFFBQVEsV0FBVyxZQUFZLFFBQVNDLE9BQWtCO0FBQzdERCxnQkFBWUMsRUFBYyxLQUFLLEVBQUUsT0FBTyxLQUFLLEdBQUdGLENBQU8sR0FDbkQsT0FBT0MsS0FBYyxZQUFZQSxLQUFhLE1BQ2hERixJQUFhLEtBQUssSUFBSUEsR0FBWUUsQ0FBUztVQUUvQyxDQUFDLEdBQ0dGLElBQWEsSUFBQSxLQUFZQSxLQUFjLE1BQ3pDRCxJQUFTL0QsRUFBSSxVQUFVLEdBQUdnRSxJQUFhLENBQUM7UUFFNUM7QUFDQSxZQUFJekUsSUFBUSxLQUFLLFVBQVUsV0FBV3dFLENBQU0sR0FBRztBQUM3Qy9ELGNBQU1BLEVBQUksVUFBVVQsRUFBTSxJQUFJLE1BQU0sR0FDaENBLEVBQU0sSUFBSSxNQUFNLEVBQUUsTUFBTSxRQUMxQndELElBQVd4RCxFQUFNLElBQUksTUFBTSxFQUFFLElBRS9COEUsSUFBZTtBQUNmLGNBQU01RCxJQUFZTixFQUFPLEdBQUcsRUFBRTtBQUMxQk0sYUFBVyxTQUFTLFVBQ3RCQSxFQUFVLE9BQU9sQixFQUFNLEtBQ3ZCa0IsRUFBVSxRQUFRbEIsRUFBTSxRQUV4QlksRUFBTyxLQUFLWixDQUFLO0FBRW5CO1FBQ0Y7QUFFQSxZQUFJUyxHQUFLO0FBQ1AsY0FBTW9FLElBQVMsNEJBQTRCcEUsRUFBSSxXQUFXLENBQUM7QUFDM0QsY0FBSSxLQUFLLFFBQVEsUUFBUTtBQUN2QixvQkFBUSxNQUFNb0UsQ0FBTTtBQUNwQjtVQUNGLE1BQ0UsT0FBTSxJQUFJLE1BQU1BLENBQU07UUFFMUI7TUFDRjtBQUVBLGFBQU9qRTtJQUNUO0VBQ0Y7QUNqZE8sTUFBTW1FLElBQU4sTUFBZ0U7SUFHckUsWUFBWXZFLEdBQXVEO0FBRm5FO0FBQ0E7QUFFRSxXQUFLLFVBQVVBLEtBQVc3SDtJQUM1QjtJQUVBLE1BQU1xSCxHQUFxQztBQUN6QyxhQUFPO0lBQ1Q7SUFFQSxLQUFLLEVBQUUsTUFBQUQsR0FBTSxNQUFBaUYsR0FBTSxTQUFBMUcsRUFBUSxHQUFnQztBQUN6RCxVQUFNMkcsS0FBY0QsS0FBUSxJQUFJLE1BQU16TCxFQUFNLGFBQWEsSUFBSSxDQUFDLEdBRXhEMkwsSUFBT25GLEVBQUssUUFBUXhHLEVBQU0sZUFBZSxFQUFFLElBQUk7O0FBRXJELGFBQUswTCxJQU1FLGdDQUNIdEgsRUFBbUJzSCxDQUFVLElBQzdCLFFBQ0MzRyxJQUFVNEcsSUFBT3ZILEVBQW1CdUgsR0FBTSxJQUFJLEtBQy9DO0lBVEssaUJBQ0Y1RyxJQUFVNEcsSUFBT3ZILEVBQW1CdUgsR0FBTSxJQUFJLEtBQy9DOztJQVFSO0lBRUEsV0FBVyxFQUFFLFFBQUF0RSxFQUFPLEdBQXNDO0FBRXhELGFBQU87RUFETSxLQUFLLE9BQU8sTUFBTUEsQ0FBTSxDQUNUOztJQUM5QjtJQUVBLEtBQUssRUFBRSxNQUFBYixFQUFLLEdBQTZDO0FBQ3ZELGFBQU9BO0lBQ1Q7SUFFQSxJQUFJQyxHQUFtQztBQUNyQyxhQUFPO0lBQ1Q7SUFFQSxRQUFRLEVBQUUsUUFBQVksR0FBUSxPQUFBdUUsRUFBTSxHQUFtQztBQUN6RCxhQUFPLEtBQUtBLENBQUssSUFBSSxLQUFLLE9BQU8sWUFBWXZFLENBQU0sQ0FBQyxNQUFNdUUsQ0FBSzs7SUFDakU7SUFFQSxHQUFHbkYsR0FBa0M7QUFDbkMsYUFBTzs7SUFDVDtJQUVBLEtBQUtBLEdBQW9DO0FBQ3ZDLFVBQU1vRixJQUFVcEYsRUFBTSxTQUNoQnFGLElBQVFyRixFQUFNLE9BRWhCc0YsSUFBTztBQUNYLGVBQVNDLElBQUksR0FBR0EsSUFBSXZGLEVBQU0sTUFBTSxRQUFRdUYsS0FBSztBQUMzQyxZQUFNakQsSUFBT3RDLEVBQU0sTUFBTXVGLENBQUM7QUFDMUJELGFBQVEsS0FBSyxTQUFTaEQsQ0FBSTtNQUM1QjtBQUVBLFVBQU1rRCxJQUFPSixJQUFVLE9BQU8sTUFDeEJLLElBQWFMLEtBQVdDLE1BQVUsSUFBTSxhQUFhQSxJQUFRLE1BQU87QUFDMUUsYUFBTyxNQUFNRyxJQUFPQyxJQUFZO0lBQVFILElBQU8sT0FBT0UsSUFBTzs7SUFDL0Q7SUFFQSxTQUFTbEQsR0FBdUM7QUFDOUMsYUFBTyxPQUFPLEtBQUssT0FBTyxNQUFNQSxFQUFLLE1BQU0sQ0FBQzs7SUFDOUM7SUFFQSxTQUFTLEVBQUUsU0FBQW9ELEVBQVEsR0FBb0M7QUFDckQsYUFBTyxhQUNGQSxJQUFVLGdCQUFnQixNQUMzQjtJQUNOO0lBRUEsVUFBVSxFQUFFLFFBQUE5RSxFQUFPLEdBQXFDO0FBQ3RELGFBQU8sTUFBTSxLQUFLLE9BQU8sWUFBWUEsQ0FBTSxDQUFDOztJQUM5QztJQUVBLE1BQU1aLEdBQXFDO0FBQ3pDLFVBQUkyRixJQUFTLElBR1QzQyxJQUFPO0FBQ1gsZUFBU3VDLElBQUksR0FBR0EsSUFBSXZGLEVBQU0sT0FBTyxRQUFRdUYsSUFDdkN2QyxNQUFRLEtBQUssVUFBVWhELEVBQU0sT0FBT3VGLENBQUMsQ0FBQztBQUV4Q0ksV0FBVSxLQUFLLFNBQVMsRUFBRSxNQUFNM0MsRUFBcUIsQ0FBQztBQUV0RCxVQUFJc0MsSUFBTztBQUNYLGVBQVNDLElBQUksR0FBR0EsSUFBSXZGLEVBQU0sS0FBSyxRQUFRdUYsS0FBSztBQUMxQyxZQUFNckgsSUFBTThCLEVBQU0sS0FBS3VGLENBQUM7QUFFeEJ2QyxZQUFPO0FBQ1AsaUJBQVM0QyxJQUFJLEdBQUdBLElBQUkxSCxFQUFJLFFBQVEwSCxJQUM5QjVDLE1BQVEsS0FBSyxVQUFVOUUsRUFBSTBILENBQUMsQ0FBQztBQUcvQk4sYUFBUSxLQUFLLFNBQVMsRUFBRSxNQUFNdEMsRUFBcUIsQ0FBQztNQUN0RDtBQUNBLGFBQUlzQyxNQUFNQSxJQUFPLFVBQVVBLENBQUksYUFFeEI7O0lBRUhLLElBQ0E7SUFDQUwsSUFDQTs7SUFDTjtJQUVBLFNBQVMsRUFBRSxNQUFBdkYsRUFBSyxHQUFrRDtBQUNoRSxhQUFPO0VBQVNBLENBQUk7O0lBQ3RCO0lBRUEsVUFBVUMsR0FBeUM7QUFDakQsVUFBTTZGLElBQVUsS0FBSyxPQUFPLFlBQVk3RixFQUFNLE1BQU0sR0FDOUN3RixJQUFPeEYsRUFBTSxTQUFTLE9BQU87QUFJbkMsY0FIWUEsRUFBTSxRQUNkLElBQUl3RixDQUFJLFdBQVd4RixFQUFNLEtBQUssT0FDOUIsSUFBSXdGLENBQUksT0FDQ0ssSUFBVSxLQUFLTCxDQUFJOztJQUNsQztJQUtBLE9BQU8sRUFBRSxRQUFBNUUsRUFBTyxHQUFrQztBQUNoRCxhQUFPLFdBQVcsS0FBSyxPQUFPLFlBQVlBLENBQU0sQ0FBQztJQUNuRDtJQUVBLEdBQUcsRUFBRSxRQUFBQSxFQUFPLEdBQThCO0FBQ3hDLGFBQU8sT0FBTyxLQUFLLE9BQU8sWUFBWUEsQ0FBTSxDQUFDO0lBQy9DO0lBRUEsU0FBUyxFQUFFLE1BQUFiLEVBQUssR0FBb0M7QUFDbEQsYUFBTyxTQUFTcEMsRUFBbUJvQyxHQUFNLElBQUksQ0FBQztJQUNoRDtJQUVBLEdBQUdDLEdBQWtDO0FBQ25DLGFBQU87SUFDVDtJQUVBLElBQUksRUFBRSxRQUFBWSxFQUFPLEdBQStCO0FBQzFDLGFBQU8sUUFBUSxLQUFLLE9BQU8sWUFBWUEsQ0FBTSxDQUFDO0lBQ2hEO0lBRUEsS0FBSyxFQUFFLE1BQUE5QyxHQUFNLE9BQUFnQyxHQUFPLFFBQUFjLEVBQU8sR0FBZ0M7QUFDekQsVUFBTWIsSUFBTyxLQUFLLE9BQU8sWUFBWWEsQ0FBTSxHQUNyQ2tGLElBQVlqSSxFQUFTQyxDQUFJO0FBQy9CLFVBQUlnSSxNQUFjLEtBQ2hCLFFBQU8vRjtBQUVUakMsVUFBT2dJO0FBQ1AsVUFBSUMsSUFBTSxjQUFjakksSUFBTztBQUMvQixhQUFJZ0MsTUFDRmlHLEtBQU8sYUFBY3BJLEVBQW1CbUMsQ0FBSyxJQUFLLE1BRXBEaUcsS0FBTyxNQUFNaEcsSUFBTyxRQUNiZ0c7SUFDVDtJQUVBLE1BQU0sRUFBRSxNQUFBakksR0FBTSxPQUFBZ0MsR0FBTyxNQUFBQyxHQUFNLFFBQUFhLEVBQU8sR0FBaUM7QUFDN0RBLFlBQ0ZiLElBQU8sS0FBSyxPQUFPLFlBQVlhLEdBQVEsS0FBSyxPQUFPLFlBQVk7QUFFakUsVUFBTWtGLElBQVlqSSxFQUFTQyxDQUFJO0FBQy9CLFVBQUlnSSxNQUFjLEtBQ2hCLFFBQU9uSSxFQUFtQm9DLENBQUk7QUFFaENqQyxVQUFPZ0k7QUFFUCxVQUFJQyxJQUFNLGFBQWFqSSxDQUFJLFVBQVVILEVBQW1Cb0MsQ0FBSSxDQUFDO0FBQzdELGFBQUlELE1BQ0ZpRyxLQUFPLFdBQVdwSSxFQUFtQm1DLENBQUssQ0FBQyxNQUU3Q2lHLEtBQU8sS0FDQUE7SUFDVDtJQUVBLEtBQUsvRixHQUFvRDtBQUN2RCxhQUFPLFlBQVlBLEtBQVNBLEVBQU0sU0FDOUIsS0FBSyxPQUFPLFlBQVlBLEVBQU0sTUFBTSxJQUNuQyxhQUFhQSxLQUFTQSxFQUFNLFVBQVVBLEVBQU0sT0FBeUJyQyxFQUFtQnFDLEVBQU0sSUFBSTtJQUN6RztFQUNGO0FDL0xPLE1BQU1nRyxLQUFOLE1BQTZDO0lBRWxELE9BQU8sRUFBRSxNQUFBakcsRUFBSyxHQUFrQztBQUM5QyxhQUFPQTtJQUNUO0lBRUEsR0FBRyxFQUFFLE1BQUFBLEVBQUssR0FBOEI7QUFDdEMsYUFBT0E7SUFDVDtJQUVBLFNBQVMsRUFBRSxNQUFBQSxFQUFLLEdBQW9DO0FBQ2xELGFBQU9BO0lBQ1Q7SUFFQSxJQUFJLEVBQUUsTUFBQUEsRUFBSyxHQUErQjtBQUN4QyxhQUFPQTtJQUNUO0lBRUEsS0FBSyxFQUFFLE1BQUFBLEVBQUssR0FBNkM7QUFDdkQsYUFBT0E7SUFDVDtJQUVBLEtBQUssRUFBRSxNQUFBQSxFQUFLLEdBQTZEO0FBQ3ZFLGFBQU9BO0lBQ1Q7SUFFQSxLQUFLLEVBQUUsTUFBQUEsRUFBSyxHQUFnQztBQUMxQyxhQUFPLEtBQUtBO0lBQ2Q7SUFFQSxNQUFNLEVBQUUsTUFBQUEsRUFBSyxHQUFpQztBQUM1QyxhQUFPLEtBQUtBO0lBQ2Q7SUFFQSxLQUFxQjtBQUNuQixhQUFPO0lBQ1Q7SUFFQSxTQUFTLEVBQUUsS0FBQUosRUFBSSxHQUFvQztBQUNqRCxhQUFPQTtJQUNUO0VBQ0Y7QUN0Q08sTUFBTXNHLElBQU4sTUFBTUMsR0FBd0Q7SUFJbkUsWUFBWTFGLEdBQXVEO0FBSG5FO0FBQ0E7QUFDQTtBQUVFLFdBQUssVUFBVUEsS0FBVzdILEdBQzFCLEtBQUssUUFBUSxXQUFXLEtBQUssUUFBUSxZQUFZLElBQUlvTSxLQUNyRCxLQUFLLFdBQVcsS0FBSyxRQUFRLFVBQzdCLEtBQUssU0FBUyxVQUFVLEtBQUssU0FDN0IsS0FBSyxTQUFTLFNBQVMsTUFDdkIsS0FBSyxlQUFlLElBQUlpQjtJQUMxQjtJQUtBLE9BQU8sTUFBc0RwRixHQUFpQkosR0FBdUQ7QUFFbkksYUFEZSxJQUFJMEYsR0FBc0MxRixDQUFPLEVBQ2xELE1BQU1JLENBQU07SUFDNUI7SUFLQSxPQUFPLFlBQTREQSxHQUFpQkosR0FBdUQ7QUFFekksYUFEZSxJQUFJMEYsR0FBc0MxRixDQUFPLEVBQ2xELFlBQVlJLENBQU07SUFDbEM7SUFLQSxNQUFNQSxHQUErQjtBQUNuQyxXQUFLLFNBQVMsU0FBUztBQUN2QixVQUFJbUYsSUFBTTtBQUVWLGVBQVN0SCxJQUFJLEdBQUdBLElBQUltQyxFQUFPLFFBQVFuQyxLQUFLO0FBQ3RDLFlBQU0wSCxJQUFXdkYsRUFBT25DLENBQUM7QUFHekIsWUFBSSxLQUFLLFFBQVEsWUFBWSxZQUFZMEgsRUFBUyxJQUFJLEdBQUc7QUFDdkQsY0FBTUMsSUFBZUQsR0FDZkUsSUFBTSxLQUFLLFFBQVEsV0FBVyxVQUFVRCxFQUFhLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxLQUFLLEdBQUdBLENBQVk7QUFDcEcsY0FBSUMsTUFBUSxTQUFTLENBQUMsQ0FBQyxTQUFTLE1BQU0sV0FBVyxRQUFRLFNBQVMsY0FBYyxRQUFRLFFBQVEsT0FBTyxhQUFhLE1BQU0sRUFBRSxTQUFTRCxFQUFhLElBQUksR0FBRztBQUN2SkwsaUJBQU9NLEtBQU87QUFDZDtVQUNGO1FBQ0Y7QUFFQSxZQUFNckcsSUFBUW1HO0FBRWQsZ0JBQVFuRyxFQUFNLE1BQU07VUFDbEIsS0FBSyxTQUFTO0FBQ1orRixpQkFBTyxLQUFLLFNBQVMsTUFBTS9GLENBQUs7QUFDaEM7VUFDRjtVQUNBLEtBQUssTUFBTTtBQUNUK0YsaUJBQU8sS0FBSyxTQUFTLEdBQUcvRixDQUFLO0FBQzdCO1VBQ0Y7VUFDQSxLQUFLLFdBQVc7QUFDZCtGLGlCQUFPLEtBQUssU0FBUyxRQUFRL0YsQ0FBSztBQUNsQztVQUNGO1VBQ0EsS0FBSyxRQUFRO0FBQ1grRixpQkFBTyxLQUFLLFNBQVMsS0FBSy9GLENBQUs7QUFDL0I7VUFDRjtVQUNBLEtBQUssU0FBUztBQUNaK0YsaUJBQU8sS0FBSyxTQUFTLE1BQU0vRixDQUFLO0FBQ2hDO1VBQ0Y7VUFDQSxLQUFLLGNBQWM7QUFDakIrRixpQkFBTyxLQUFLLFNBQVMsV0FBVy9GLENBQUs7QUFDckM7VUFDRjtVQUNBLEtBQUssUUFBUTtBQUNYK0YsaUJBQU8sS0FBSyxTQUFTLEtBQUsvRixDQUFLO0FBQy9CO1VBQ0Y7VUFDQSxLQUFLLFlBQVk7QUFDZitGLGlCQUFPLEtBQUssU0FBUyxTQUFTL0YsQ0FBSztBQUNuQztVQUNGO1VBQ0EsS0FBSyxRQUFRO0FBQ1grRixpQkFBTyxLQUFLLFNBQVMsS0FBSy9GLENBQUs7QUFDL0I7VUFDRjtVQUNBLEtBQUssT0FBTztBQUNWK0YsaUJBQU8sS0FBSyxTQUFTLElBQUkvRixDQUFLO0FBQzlCO1VBQ0Y7VUFDQSxLQUFLLGFBQWE7QUFDaEIrRixpQkFBTyxLQUFLLFNBQVMsVUFBVS9GLENBQUs7QUFDcEM7VUFDRjtVQUNBLEtBQUssUUFBUTtBQUNYK0YsaUJBQU8sS0FBSyxTQUFTLEtBQUsvRixDQUFLO0FBQy9CO1VBQ0Y7VUFFQSxTQUFTO0FBQ1AsZ0JBQU02RSxJQUFTLGlCQUFpQjdFLEVBQU0sT0FBTztBQUM3QyxnQkFBSSxLQUFLLFFBQVEsT0FDZixRQUFBLFFBQVEsTUFBTTZFLENBQU0sR0FDYjtBQUVQLGtCQUFNLElBQUksTUFBTUEsQ0FBTTtVQUUxQjtRQUNGO01BQ0Y7QUFFQSxhQUFPa0I7SUFDVDtJQUtBLFlBQVluRixHQUFpQjBGLElBQW9GLEtBQUssVUFBd0I7QUFDNUksV0FBSyxTQUFTLFNBQVM7QUFDdkIsVUFBSVAsSUFBTTtBQUVWLGVBQVN0SCxJQUFJLEdBQUdBLElBQUltQyxFQUFPLFFBQVFuQyxLQUFLO0FBQ3RDLFlBQU0wSCxJQUFXdkYsRUFBT25DLENBQUM7QUFHekIsWUFBSSxLQUFLLFFBQVEsWUFBWSxZQUFZMEgsRUFBUyxJQUFJLEdBQUc7QUFDdkQsY0FBTUUsSUFBTSxLQUFLLFFBQVEsV0FBVyxVQUFVRixFQUFTLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxLQUFLLEdBQUdBLENBQVE7QUFDNUYsY0FBSUUsTUFBUSxTQUFTLENBQUMsQ0FBQyxVQUFVLFFBQVEsUUFBUSxTQUFTLFVBQVUsTUFBTSxZQUFZLE1BQU0sT0FBTyxNQUFNLEVBQUUsU0FBU0YsRUFBUyxJQUFJLEdBQUc7QUFDbElKLGlCQUFPTSxLQUFPO0FBQ2Q7VUFDRjtRQUNGO0FBRUEsWUFBTXJHLElBQVFtRztBQUVkLGdCQUFRbkcsRUFBTSxNQUFNO1VBQ2xCLEtBQUssVUFBVTtBQUNiK0YsaUJBQU9PLEVBQVMsS0FBS3RHLENBQUs7QUFDMUI7VUFDRjtVQUNBLEtBQUssUUFBUTtBQUNYK0YsaUJBQU9PLEVBQVMsS0FBS3RHLENBQUs7QUFDMUI7VUFDRjtVQUNBLEtBQUssUUFBUTtBQUNYK0YsaUJBQU9PLEVBQVMsS0FBS3RHLENBQUs7QUFDMUI7VUFDRjtVQUNBLEtBQUssU0FBUztBQUNaK0YsaUJBQU9PLEVBQVMsTUFBTXRHLENBQUs7QUFDM0I7VUFDRjtVQUNBLEtBQUssWUFBWTtBQUNmK0YsaUJBQU9PLEVBQVMsU0FBU3RHLENBQUs7QUFDOUI7VUFDRjtVQUNBLEtBQUssVUFBVTtBQUNiK0YsaUJBQU9PLEVBQVMsT0FBT3RHLENBQUs7QUFDNUI7VUFDRjtVQUNBLEtBQUssTUFBTTtBQUNUK0YsaUJBQU9PLEVBQVMsR0FBR3RHLENBQUs7QUFDeEI7VUFDRjtVQUNBLEtBQUssWUFBWTtBQUNmK0YsaUJBQU9PLEVBQVMsU0FBU3RHLENBQUs7QUFDOUI7VUFDRjtVQUNBLEtBQUssTUFBTTtBQUNUK0YsaUJBQU9PLEVBQVMsR0FBR3RHLENBQUs7QUFDeEI7VUFDRjtVQUNBLEtBQUssT0FBTztBQUNWK0YsaUJBQU9PLEVBQVMsSUFBSXRHLENBQUs7QUFDekI7VUFDRjtVQUNBLEtBQUssUUFBUTtBQUNYK0YsaUJBQU9PLEVBQVMsS0FBS3RHLENBQUs7QUFDMUI7VUFDRjtVQUNBLFNBQVM7QUFDUCxnQkFBTTZFLElBQVMsaUJBQWlCN0UsRUFBTSxPQUFPO0FBQzdDLGdCQUFJLEtBQUssUUFBUSxPQUNmLFFBQUEsUUFBUSxNQUFNNkUsQ0FBTSxHQUNiO0FBRVAsa0JBQU0sSUFBSSxNQUFNQSxDQUFNO1VBRTFCO1FBQ0Y7TUFDRjtBQUNBLGFBQU9rQjtJQUNUO0VBQ0Y7O0FDdE1PLE1BQU1RLEtBQU4sV0FBNkQ7SUFJbEUsWUFBWS9GLEdBQXVEO0FBSG5FO0FBQ0E7QUFHRSxXQUFLLFVBQVVBLEtBQVc3SDtJQUM1QjtJQWtCQSxXQUFXNk4sR0FBa0I7QUFDM0IsYUFBT0E7SUFDVDtJQUtBLFlBQVk3TCxHQUFvQjtBQUM5QixhQUFPQTtJQUNUO0lBS0EsaUJBQWlCaUcsR0FBOEI7QUFDN0MsYUFBT0E7SUFDVDtJQUtBLGFBQWFILEdBQWE7QUFDeEIsYUFBT0E7SUFDVDtJQUtBLGVBQWU7QUFDYixhQUFPLEtBQUssUUFBUTBELEVBQU8sTUFBTUEsRUFBTztJQUMxQztJQUtBLGdCQUFnQjtBQUNkLGFBQU8sS0FBSyxRQUFROEIsRUFBUSxRQUFzQ0EsRUFBUTtJQUM1RTtFQUNGLEdBdERFLGNBUkssSUFRRSxvQkFBbUIsb0JBQUksSUFBSSxDQUNoQyxjQUNBLGVBQ0Esb0JBQ0EsY0FDRixDQUFDLElBRUQsY0FmSyxJQWVFLGdDQUErQixvQkFBSSxJQUFJLENBQzVDLGNBQ0EsZUFDQSxrQkFDRixDQUFDLElBbkJJO0FDVUEsTUFBTVEsSUFBTixNQUE2RDtJQWNsRSxlQUFlQyxHQUF1RDtBQWJ0RSxzQ0FBV2hPLEVBQTJDO0FBQ3RELHFDQUFVLEtBQUs7QUFFZixtQ0FBUSxLQUFLLGNBQWMsSUFBSTtBQUMvQix5Q0FBYyxLQUFLLGNBQWMsS0FBSztBQUV0QyxvQ0FBU3VOO0FBQ1Qsc0NBQVdsQjtBQUNYLDBDQUFlaUI7QUFDZixtQ0FBUTdCO0FBQ1IsdUNBQVk1RDtBQUNaLG1DQUFRZ0c7QUFHTixXQUFLLElBQUksR0FBR0csQ0FBSTtJQUNsQjtJQUtBLFdBQVc5RixHQUE4QitGLEdBQTJEO0FBQ2xHLFVBQUlDLElBQXlCLENBQUM7QUFDOUIsZUFBVzVHLEtBQVNZLEVBRWxCLFNBREFnRyxJQUFTQSxFQUFPLE9BQU9ELEVBQVMsS0FBSyxNQUFNM0csQ0FBSyxDQUFDLEdBQ3pDQSxFQUFNLE1BQU07UUFDbEIsS0FBSyxTQUFTO0FBQ1osY0FBTTZHLElBQWE3RztBQUNuQixtQkFBV2dELEtBQVE2RCxFQUFXLE9BQzVCRCxLQUFTQSxFQUFPLE9BQU8sS0FBSyxXQUFXNUQsRUFBSyxRQUFRMkQsQ0FBUSxDQUFDO0FBRS9ELG1CQUFXekksS0FBTzJJLEVBQVcsS0FDM0IsVUFBVzdELEtBQVE5RSxFQUNqQjBJLEtBQVNBLEVBQU8sT0FBTyxLQUFLLFdBQVc1RCxFQUFLLFFBQVEyRCxDQUFRLENBQUM7QUFHakU7UUFDRjtRQUNBLEtBQUssUUFBUTtBQUNYLGNBQU1HLElBQVk5RztBQUNsQjRHLGNBQVNBLEVBQU8sT0FBTyxLQUFLLFdBQVdFLEVBQVUsT0FBT0gsQ0FBUSxDQUFDO0FBQ2pFO1FBQ0Y7UUFDQSxTQUFTO0FBQ1AsY0FBTVAsSUFBZXBHO0FBQ2pCLGVBQUssU0FBUyxZQUFZLGNBQWNvRyxFQUFhLElBQUksSUFDM0QsS0FBSyxTQUFTLFdBQVcsWUFBWUEsRUFBYSxJQUFJLEVBQUUsUUFBU1csT0FBZ0I7QUFDL0UsZ0JBQU1uRyxJQUFTd0YsRUFBYVcsQ0FBVyxFQUFFLEtBQUssSUFBQSxDQUFRO0FBQ3RESCxnQkFBU0EsRUFBTyxPQUFPLEtBQUssV0FBV2hHLEdBQVErRixDQUFRLENBQUM7VUFDMUQsQ0FBQyxJQUNRUCxFQUFhLFdBQ3RCUSxJQUFTQSxFQUFPLE9BQU8sS0FBSyxXQUFXUixFQUFhLFFBQVFPLENBQVEsQ0FBQztRQUV6RTtNQUNGO0FBRUYsYUFBT0M7SUFDVDtJQUVBLE9BQU9GLEdBQXVEO0FBQzVELFVBQU1NLElBQXdFLEtBQUssU0FBUyxjQUFjLEVBQUUsV0FBVyxDQUFDLEdBQUcsYUFBYSxDQUFDLEVBQUU7QUFFM0ksYUFBQU4sRUFBSyxRQUFTTyxPQUFTO0FBRXJCLFlBQU1DLElBQU8sRUFBRSxHQUFHRCxFQUFLO0FBNER2QixZQXpEQUMsRUFBSyxRQUFRLEtBQUssU0FBUyxTQUFTQSxFQUFLLFNBQVMsT0FHOUNELEVBQUssZUFDUEEsRUFBSyxXQUFXLFFBQVNFLE9BQVE7QUFDL0IsY0FBSSxDQUFDQSxFQUFJLEtBQ1AsT0FBTSxJQUFJLE1BQU0seUJBQXlCO0FBRTNDLGNBQUksY0FBY0EsR0FBSztBQUNyQixnQkFBTUMsSUFBZUosRUFBVyxVQUFVRyxFQUFJLElBQUk7QUFDOUNDLGdCQUVGSixFQUFXLFVBQVVHLEVBQUksSUFBSSxJQUFJLFlBQVlULEdBQU07QUFDakQsa0JBQUlMLElBQU1jLEVBQUksU0FBUyxNQUFNLE1BQU1ULENBQUk7QUFDdkMscUJBQUlMLE1BQVEsVUFDVkEsSUFBTWUsRUFBYSxNQUFNLE1BQU1WLENBQUksSUFFOUJMO1lBQ1QsSUFFQVcsRUFBVyxVQUFVRyxFQUFJLElBQUksSUFBSUEsRUFBSTtVQUV6QztBQUNBLGNBQUksZUFBZUEsR0FBSztBQUN0QixnQkFBSSxDQUFDQSxFQUFJLFNBQVVBLEVBQUksVUFBVSxXQUFXQSxFQUFJLFVBQVUsU0FDeEQsT0FBTSxJQUFJLE1BQU0sNkNBQTZDO0FBRS9ELGdCQUFNRSxJQUFXTCxFQUFXRyxFQUFJLEtBQUs7QUFDakNFLGdCQUNGQSxFQUFTLFFBQVFGLEVBQUksU0FBUyxJQUU5QkgsRUFBV0csRUFBSSxLQUFLLElBQUksQ0FBQ0EsRUFBSSxTQUFTLEdBRXBDQSxFQUFJLFVBQ0ZBLEVBQUksVUFBVSxVQUNaSCxFQUFXLGFBQ2JBLEVBQVcsV0FBVyxLQUFLRyxFQUFJLEtBQUssSUFFcENILEVBQVcsYUFBYSxDQUFDRyxFQUFJLEtBQUssSUFFM0JBLEVBQUksVUFBVSxhQUNuQkgsRUFBVyxjQUNiQSxFQUFXLFlBQVksS0FBS0csRUFBSSxLQUFLLElBRXJDSCxFQUFXLGNBQWMsQ0FBQ0csRUFBSSxLQUFLO1VBSTNDO0FBQ0ksMkJBQWlCQSxLQUFPQSxFQUFJLGdCQUM5QkgsRUFBVyxZQUFZRyxFQUFJLElBQUksSUFBSUEsRUFBSTtRQUUzQyxDQUFDLEdBQ0RELEVBQUssYUFBYUYsSUFJaEJDLEVBQUssVUFBVTtBQUNqQixjQUFNWCxJQUFXLEtBQUssU0FBUyxZQUFZLElBQUl2QixFQUF3QyxLQUFLLFFBQVE7QUFDcEcsbUJBQVd1QyxLQUFRTCxFQUFLLFVBQVU7QUFDaEMsZ0JBQUksRUFBRUssS0FBUWhCLEdBQ1osT0FBTSxJQUFJLE1BQU0sYUFBYWdCLENBQUksa0JBQWtCO0FBRXJELGdCQUFJLENBQUMsV0FBVyxRQUFRLEVBQUUsU0FBU0EsQ0FBSSxFQUVyQztBQUVGLGdCQUFNQyxJQUFlRCxHQUNmRSxJQUFlUCxFQUFLLFNBQVNNLENBQVksR0FDekNILElBQWVkLEVBQVNpQixDQUFZO0FBRTFDakIsY0FBU2lCLENBQVksSUFBSSxJQUFJYixNQUFvQjtBQUMvQyxrQkFBSUwsSUFBTW1CLEVBQWEsTUFBTWxCLEdBQVVJLENBQUk7QUFDM0MscUJBQUlMLE1BQVEsVUFDVkEsSUFBTWUsRUFBYSxNQUFNZCxHQUFVSSxDQUFJLElBRWpDTCxLQUFPO1lBQ2pCO1VBQ0Y7QUFDQWEsWUFBSyxXQUFXWjtRQUNsQjtBQUNBLFlBQUlXLEVBQUssV0FBVztBQUNsQixjQUFNUSxJQUFZLEtBQUssU0FBUyxhQUFhLElBQUlsSCxFQUF5QyxLQUFLLFFBQVE7QUFDdkcsbUJBQVcrRyxLQUFRTCxFQUFLLFdBQVc7QUFDakMsZ0JBQUksRUFBRUssS0FBUUcsR0FDWixPQUFNLElBQUksTUFBTSxjQUFjSCxDQUFJLGtCQUFrQjtBQUV0RCxnQkFBSSxDQUFDLFdBQVcsU0FBUyxPQUFPLEVBQUUsU0FBU0EsQ0FBSSxFQUU3QztBQUVGLGdCQUFNSSxJQUFnQkosR0FDaEJLLElBQWdCVixFQUFLLFVBQVVTLENBQWEsR0FDNUNFLElBQWdCSCxFQUFVQyxDQUFhO0FBRzdDRCxjQUFVQyxDQUFhLElBQUksSUFBSWhCLE1BQW9CO0FBQ2pELGtCQUFJTCxJQUFNc0IsRUFBYyxNQUFNRixHQUFXZixDQUFJO0FBQzdDLHFCQUFJTCxNQUFRLFVBQ1ZBLElBQU11QixFQUFjLE1BQU1ILEdBQVdmLENBQUksSUFFcENMO1lBQ1Q7VUFDRjtBQUNBYSxZQUFLLFlBQVlPO1FBQ25CO0FBR0EsWUFBSVIsRUFBSyxPQUFPO0FBQ2QsY0FBTVksSUFBUSxLQUFLLFNBQVMsU0FBUyxJQUFJdEI7QUFDekMsbUJBQVdlLEtBQVFMLEVBQUssT0FBTztBQUM3QixnQkFBSSxFQUFFSyxLQUFRTyxHQUNaLE9BQU0sSUFBSSxNQUFNLFNBQVNQLENBQUksa0JBQWtCO0FBRWpELGdCQUFJLENBQUMsV0FBVyxPQUFPLEVBQUUsU0FBU0EsQ0FBSSxFQUVwQztBQUVGLGdCQUFNUSxJQUFZUixHQUNaUyxJQUFZZCxFQUFLLE1BQU1hLENBQVMsR0FDaENFLElBQVdILEVBQU1DLENBQVM7QUFDNUJ2QixjQUFPLGlCQUFpQixJQUFJZSxDQUFJLElBRWxDTyxFQUFNQyxDQUFTLElBQUtHLE9BQWlCO0FBQ25DLGtCQUFJLEtBQUssU0FBUyxTQUFTMUIsRUFBTyw2QkFBNkIsSUFBSWUsQ0FBSSxFQUNyRSxTQUFRLFlBQVc7QUFDakIsb0JBQU1qQixJQUFNLE1BQU0wQixFQUFVLEtBQUtGLEdBQU9JLENBQUc7QUFDM0MsdUJBQU9ELEVBQVMsS0FBS0gsR0FBT3hCLENBQUc7Y0FDakMsR0FBRztBQUdMLGtCQUFNQSxJQUFNMEIsRUFBVSxLQUFLRixHQUFPSSxDQUFHO0FBQ3JDLHFCQUFPRCxFQUFTLEtBQUtILEdBQU94QixDQUFHO1lBQ2pDLElBR0F3QixFQUFNQyxDQUFTLElBQUksSUFBSXBCLE1BQW9CO0FBQ3pDLGtCQUFJLEtBQUssU0FBUyxNQUNoQixTQUFRLFlBQVc7QUFDakIsb0JBQUlMLElBQU0sTUFBTTBCLEVBQVUsTUFBTUYsR0FBT25CLENBQUk7QUFDM0MsdUJBQUlMLE1BQVEsVUFDVkEsSUFBTSxNQUFNMkIsRUFBUyxNQUFNSCxHQUFPbkIsQ0FBSSxJQUVqQ0w7Y0FDVCxHQUFHO0FBR0wsa0JBQUlBLElBQU0wQixFQUFVLE1BQU1GLEdBQU9uQixDQUFJO0FBQ3JDLHFCQUFJTCxNQUFRLFVBQ1ZBLElBQU0yQixFQUFTLE1BQU1ILEdBQU9uQixDQUFJLElBRTNCTDtZQUNUO1VBRUo7QUFDQWEsWUFBSyxRQUFRVztRQUNmO0FBR0EsWUFBSVosRUFBSyxZQUFZO0FBQ25CLGNBQU1pQixJQUFhLEtBQUssU0FBUyxZQUMzQkMsSUFBaUJsQixFQUFLO0FBQzVCQyxZQUFLLGFBQWEsU0FBU2xILEdBQU87QUFDaEMsZ0JBQUk0RyxJQUF5QixDQUFDO0FBQzlCLG1CQUFBQSxFQUFPLEtBQUt1QixFQUFlLEtBQUssTUFBTW5JLENBQUssQ0FBQyxHQUN4Q2tJLE1BQ0Z0QixJQUFTQSxFQUFPLE9BQU9zQixFQUFXLEtBQUssTUFBTWxJLENBQUssQ0FBQyxJQUU5QzRHO1VBQ1Q7UUFDRjtBQUVBLGFBQUssV0FBVyxFQUFFLEdBQUcsS0FBSyxVQUFVLEdBQUdNLEVBQUs7TUFDOUMsQ0FBQyxHQUVNO0lBQ1Q7SUFFQSxXQUFXak8sR0FBa0Q7QUFDM0QsYUFBQSxLQUFLLFdBQVcsRUFBRSxHQUFHLEtBQUssVUFBVSxHQUFHQSxFQUFJLEdBQ3BDO0lBQ1Q7SUFFQSxNQUFNd0gsR0FBYUQsR0FBdUQ7QUFDeEUsYUFBTzJELEVBQU8sSUFBSTFELEdBQUtELEtBQVcsS0FBSyxRQUFRO0lBQ2pEO0lBRUEsT0FBT0ksR0FBaUJKLEdBQXVEO0FBQzdFLGFBQU95RixFQUFRLE1BQW9DckYsR0FBUUosS0FBVyxLQUFLLFFBQVE7SUFDckY7SUFFUSxjQUFjNEgsR0FBb0I7QUF1RXhDLGFBL0QrQixDQUFDM0gsR0FBYUQsTUFBc0U7QUFDakgsWUFBTTZILElBQVUsRUFBRSxHQUFHN0gsRUFBUSxHQUN2QnZILElBQU0sRUFBRSxHQUFHLEtBQUssVUFBVSxHQUFHb1AsRUFBUSxHQUVyQ0MsSUFBYSxLQUFLLFFBQVEsQ0FBQyxDQUFDclAsRUFBSSxRQUFRLENBQUMsQ0FBQ0EsRUFBSSxLQUFLO0FBR3pELFlBQUksS0FBSyxTQUFTLFVBQVUsUUFBUW9QLEVBQVEsVUFBVSxNQUNwRCxRQUFPQyxFQUFXLElBQUksTUFBTSxvSUFBb0ksQ0FBQztBQUluSyxZQUFJLE9BQU83SCxJQUFRLE9BQWVBLE1BQVEsS0FDeEMsUUFBTzZILEVBQVcsSUFBSSxNQUFNLGdEQUFnRCxDQUFDO0FBRS9FLFlBQUksT0FBTzdILEtBQVEsU0FDakIsUUFBTzZILEVBQVcsSUFBSSxNQUFNLDBDQUN4QixPQUFPLFVBQVUsU0FBUyxLQUFLN0gsQ0FBRyxJQUFJLG1CQUFtQixDQUFDO0FBUWhFLFlBTEl4SCxFQUFJLFVBQ05BLEVBQUksTUFBTSxVQUFVQSxHQUNwQkEsRUFBSSxNQUFNLFFBQVFtUCxJQUdoQm5QLEVBQUksTUFDTixTQUFRLFlBQVc7QUFDakIsY0FBTXNQLElBQWV0UCxFQUFJLFFBQVEsTUFBTUEsRUFBSSxNQUFNLFdBQVd3SCxDQUFHLElBQUlBLEdBRTdERyxJQUFTLE9BREQzSCxFQUFJLFFBQVEsTUFBTUEsRUFBSSxNQUFNLGFBQWEsSUFBS21QLElBQVlqRSxFQUFPLE1BQU1BLEVBQU8sV0FDakVvRSxHQUFjdFAsQ0FBRyxHQUN0Q3VQLElBQWtCdlAsRUFBSSxRQUFRLE1BQU1BLEVBQUksTUFBTSxpQkFBaUIySCxDQUFNLElBQUlBO0FBQzNFM0gsWUFBSSxjQUNOLE1BQU0sUUFBUSxJQUFJLEtBQUssV0FBV3VQLEdBQWlCdlAsRUFBSSxVQUFVLENBQUM7QUFHcEUsY0FBTTBCLElBQU8sT0FERTFCLEVBQUksUUFBUSxNQUFNQSxFQUFJLE1BQU0sY0FBYyxJQUFLbVAsSUFBWW5DLEVBQVEsUUFBUUEsRUFBUSxhQUN4RXVDLEdBQWlCdlAsQ0FBRztBQUM5QyxpQkFBT0EsRUFBSSxRQUFRLE1BQU1BLEVBQUksTUFBTSxZQUFZMEIsQ0FBSSxJQUFJQTtRQUN6RCxHQUFHLEVBQUUsTUFBTTJOLENBQVU7QUFHdkIsWUFBSTtBQUNFclAsWUFBSSxVQUNOd0gsSUFBTXhILEVBQUksTUFBTSxXQUFXd0gsQ0FBRztBQUdoQyxjQUFJRyxLQURVM0gsRUFBSSxRQUFRQSxFQUFJLE1BQU0sYUFBYSxJQUFLbVAsSUFBWWpFLEVBQU8sTUFBTUEsRUFBTyxXQUNuRTFELEdBQUt4SCxDQUFHO0FBQ3ZCQSxZQUFJLFVBQ04ySCxJQUFTM0gsRUFBSSxNQUFNLGlCQUFpQjJILENBQU0sSUFFeEMzSCxFQUFJLGNBQ04sS0FBSyxXQUFXMkgsR0FBUTNILEVBQUksVUFBVTtBQUd4QyxjQUFJMEIsS0FEVzFCLEVBQUksUUFBUUEsRUFBSSxNQUFNLGNBQWMsSUFBS21QLElBQVluQyxFQUFRLFFBQVFBLEVBQVEsYUFDMUVyRixHQUFRM0gsQ0FBRztBQUM3QixpQkFBSUEsRUFBSSxVQUNOMEIsSUFBTzFCLEVBQUksTUFBTSxZQUFZMEIsQ0FBSSxJQUU1QkE7UUFDVCxTQUFROE4sR0FBRztBQUNULGlCQUFPSCxFQUFXRyxDQUFVO1FBQzlCO01BQ0Y7SUFHRjtJQUVRLFFBQVFDLEdBQWlCQyxHQUFnQjtBQUMvQyxhQUFRRixPQUF1QztBQUc3QyxZQUZBQSxFQUFFLFdBQVc7NERBRVRDLEdBQVE7QUFDVixjQUFNRSxJQUFNLG1DQUNSakwsRUFBbUI4SyxFQUFFLFVBQVUsSUFBSSxJQUFJLElBQ3ZDO0FBQ0osaUJBQUlFLElBQ0ssUUFBUSxRQUFRQyxDQUFHLElBRXJCQTtRQUNUO0FBRUEsWUFBSUQsRUFDRixRQUFPLFFBQVEsT0FBT0YsQ0FBQztBQUV6QixjQUFNQTtNQUNSO0lBQ0Y7RUFDRjtBQ2hXQSxNQUFNSSxJQUFpQixJQUFJcEM7QUFxQnBCLFdBQVNxQyxFQUFPckksSUFBYXhILEdBQXNEO0FBQ3hGLFdBQU80UCxFQUFlLE1BQU1wSSxJQUFLeEgsQ0FBRztFQUN0QztBQU9BNlAsSUFBTyxVQUNMQSxFQUFPLGFBQWEsU0FBU3RJLElBQXdCO0FBQ25ELFdBQUFxSSxFQUFlLFdBQVdySSxFQUFPLEdBQ2pDc0ksRUFBTyxXQUFXRCxFQUFlLFVBQ2pDalEsRUFBZWtRLEVBQU8sUUFBUSxHQUN2QkE7RUFDVDtBQUtGQSxJQUFPLGNBQWNwUTtBQUVyQm9RLElBQU8sV0FBV25RO0FBTWxCbVEsSUFBTyxNQUFNLFlBQVlwQyxJQUF5QjtBQUNoRCxXQUFBbUMsRUFBZSxJQUFJLEdBQUduQyxFQUFJLEdBQzFCb0MsRUFBTyxXQUFXRCxFQUFlLFVBQ2pDalEsRUFBZWtRLEVBQU8sUUFBUSxHQUN2QkE7RUFDVDtBQU1BQSxJQUFPLGFBQWEsU0FBU2xJLElBQThCK0YsR0FBMkQ7QUFDcEgsV0FBT2tDLEVBQWUsV0FBV2pJLElBQVErRixDQUFRO0VBQ25EO0FBU0FtQyxJQUFPLGNBQWNELEVBQWU7QUFLcENDLElBQU8sU0FBUzdDO0FBQ2hCNkMsSUFBTyxTQUFTN0MsRUFBUTtBQUN4QjZDLElBQU8sV0FBVy9EO0FBQ2xCK0QsSUFBTyxlQUFlOUM7QUFDdEI4QyxJQUFPLFFBQVEzRTtBQUNmMkUsSUFBTyxRQUFRM0UsRUFBTztBQUN0QjJFLElBQU8sWUFBWXZJO0FBQ25CdUksSUFBTyxRQUFRdkM7QUFDZnVDLElBQU8sUUFBUUE7QUFFUixNQUFNdEksS0FBVXNJLEVBQU87QUFBdkIsTUFDTUMsS0FBYUQsRUFBTztBQUQxQixNQUVNRSxLQUFNRixFQUFPO0FBRm5CLE1BR01aLEtBQWFZLEVBQU87QUFIMUIsTUFJTUcsS0FBY0gsRUFBTztBQUozQixNQU1NSSxLQUFTQyxFQUFRO0FBTnZCLE1BT01DLEtBQVFDLEVBQU87OztBQzdHNUIsTUFBTTtJQUNKQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztFQUNELElBQUdDO0FBRUosTUFBSTtJQUFFQztJQUFRQztJQUFNQztFQUFNLElBQUtIO0FBQy9CLE1BQUk7SUFBRUk7SUFBT0M7RUFBVyxJQUFHLE9BQU9DLFlBQVksZUFBZUE7QUFFN0QsTUFBSSxDQUFDTCxRQUFRO0FBQ1hBLGFBQVMsU0FBQUEsUUFBYU0sSUFBSTtBQUN4QixhQUFPQTs7RUFFWDtBQUVBLE1BQUksQ0FBQ0wsTUFBTTtBQUNUQSxXQUFPLFNBQUFBLE1BQWFLLElBQUk7QUFDdEIsYUFBT0E7O0VBRVg7QUFFQSxNQUFJLENBQUNILE9BQU87QUFDVkEsWUFBUSxTQUFBQSxPQUNOSSxNQUNBQyxTQUNjO0FBQUEsZUFBQUMsT0FBQUMsVUFBQUMsUUFBWEMsT0FBVyxJQUFBQyxNQUFBSixPQUFBQSxJQUFBQSxPQUFBLElBQUEsQ0FBQSxHQUFBSyxPQUFBLEdBQUFBLE9BQUFMLE1BQUFLLFFBQUE7QUFBWEYsYUFBV0UsT0FBQUosQ0FBQUEsSUFBQUEsVUFBQUksSUFBQTtNQUFBO0FBRWQsYUFBT1AsS0FBS0osTUFBTUssU0FBU0ksSUFBSTs7RUFFbkM7QUFFQSxNQUFJLENBQUNSLFdBQVc7QUFDZEEsZ0JBQVksU0FBQUEsV0FBYVcsTUFBK0M7QUFBQSxlQUFBQyxRQUFBTixVQUFBQyxRQUFYQyxPQUFXLElBQUFDLE1BQUFHLFFBQUFBLElBQUFBLFFBQUEsSUFBQSxDQUFBLEdBQUFDLFFBQUEsR0FBQUEsUUFBQUQsT0FBQUMsU0FBQTtBQUFYTCxhQUFXSyxRQUFBUCxDQUFBQSxJQUFBQSxVQUFBTyxLQUFBO01BQUE7QUFDdEUsYUFBTyxJQUFJRixLQUFLLEdBQUdILElBQUk7O0VBRTNCO0FBRUEsTUFBTU0sZUFBZUMsUUFBUU4sTUFBTU8sVUFBVUMsT0FBTztBQUVwRCxNQUFNQyxtQkFBbUJILFFBQVFOLE1BQU1PLFVBQVVHLFdBQVc7QUFDNUQsTUFBTUMsV0FBV0wsUUFBUU4sTUFBTU8sVUFBVUssR0FBRztBQUM1QyxNQUFNQyxZQUFZUCxRQUFRTixNQUFNTyxVQUFVTyxJQUFJO0FBRTlDLE1BQU1DLGNBQWNULFFBQVFOLE1BQU1PLFVBQVVTLE1BQU07QUFFbEQsTUFBTUMsb0JBQW9CWCxRQUFRWSxPQUFPWCxVQUFVWSxXQUFXO0FBQzlELE1BQU1DLGlCQUFpQmQsUUFBUVksT0FBT1gsVUFBVWMsUUFBUTtBQUN4RCxNQUFNQyxjQUFjaEIsUUFBUVksT0FBT1gsVUFBVWdCLEtBQUs7QUFDbEQsTUFBTUMsZ0JBQWdCbEIsUUFBUVksT0FBT1gsVUFBVWtCLE9BQU87QUFDdEQsTUFBTUMsZ0JBQWdCcEIsUUFBUVksT0FBT1gsVUFBVW9CLE9BQU87QUFDdEQsTUFBTUMsYUFBYXRCLFFBQVFZLE9BQU9YLFVBQVVzQixJQUFJO0FBRWhELE1BQU1DLHVCQUF1QnhCLFFBQVFwQixPQUFPcUIsVUFBVXdCLGNBQWM7QUFFcEUsTUFBTUMsYUFBYTFCLFFBQVEyQixPQUFPMUIsVUFBVTJCLElBQUk7QUFFaEQsTUFBTUMsa0JBQWtCQyxZQUFZQyxTQUFTO0FBUTdDLFdBQVMvQixRQUNQWixNQUF5QztBQUV6QyxXQUFPLFNBQUNDLFNBQW1DO0FBQ3pDLFVBQUlBLG1CQUFtQnNDLFFBQVE7QUFDN0J0QyxnQkFBUTJDLFlBQVk7TUFDdEI7QUFBQyxlQUFBQyxRQUFBMUMsVUFBQUMsUUFIc0JDLE9BQVcsSUFBQUMsTUFBQXVDLFFBQUFBLElBQUFBLFFBQUEsSUFBQSxDQUFBLEdBQUFDLFFBQUEsR0FBQUEsUUFBQUQsT0FBQUMsU0FBQTtBQUFYekMsYUFBV3lDLFFBQUEzQyxDQUFBQSxJQUFBQSxVQUFBMkMsS0FBQTtNQUFBO0FBS2xDLGFBQU9sRCxNQUFNSSxNQUFNQyxTQUFTSSxJQUFJOztFQUVwQztBQVFBLFdBQVNxQyxZQUNQbEMsTUFBK0I7QUFFL0IsV0FBTyxXQUFBO0FBQUEsZUFBQXVDLFFBQUE1QyxVQUFBQyxRQUFJQyxPQUFXQyxJQUFBQSxNQUFBeUMsS0FBQSxHQUFBQyxRQUFBLEdBQUFBLFFBQUFELE9BQUFDLFNBQUE7QUFBWDNDLGFBQVcyQyxLQUFBLElBQUE3QyxVQUFBNkMsS0FBQTtNQUFBO0FBQUEsYUFBUW5ELFVBQVVXLE1BQU1ILElBQUk7SUFBQztFQUNyRDtBQVVBLFdBQVM0QyxTQUNQQyxLQUNBQyxPQUN5RTtBQUFBLFFBQXpFQyxvQkFBQUEsVUFBQUEsU0FBQUEsS0FBQUEsVUFBQUEsQ0FBQUEsTUFBQUEsU0FBQUEsVUFBQUEsQ0FBQUEsSUFBd0Q3QjtBQUV4RCxRQUFJbkMsZ0JBQWdCO0FBSWxCQSxxQkFBZThELEtBQUssSUFBSTtJQUMxQjtBQUVBLFFBQUlHLElBQUlGLE1BQU0vQztBQUNkLFdBQU9pRCxLQUFLO0FBQ1YsVUFBSUMsVUFBVUgsTUFBTUUsQ0FBQztBQUNyQixVQUFJLE9BQU9DLFlBQVksVUFBVTtBQUMvQixjQUFNQyxZQUFZSCxrQkFBa0JFLE9BQU87QUFDM0MsWUFBSUMsY0FBY0QsU0FBUztBQUV6QixjQUFJLENBQUNqRSxTQUFTOEQsS0FBSyxHQUFHO0FBQ25CQSxrQkFBZ0JFLENBQUMsSUFBSUU7VUFDeEI7QUFFQUQsb0JBQVVDO1FBQ1o7TUFDRjtBQUVBTCxVQUFJSSxPQUFPLElBQUk7SUFDakI7QUFFQSxXQUFPSjtFQUNUO0FBUUEsV0FBU00sV0FBY0wsT0FBVTtBQUMvQixhQUFTTSxRQUFRLEdBQUdBLFFBQVFOLE1BQU0vQyxRQUFRcUQsU0FBUztBQUNqRCxZQUFNQyxrQkFBa0J0QixxQkFBcUJlLE9BQU9NLEtBQUs7QUFFekQsVUFBSSxDQUFDQyxpQkFBaUI7QUFDcEJQLGNBQU1NLEtBQUssSUFBSTtNQUNqQjtJQUNGO0FBRUEsV0FBT047RUFDVDtBQVFBLFdBQVNRLE1BQXFDQyxRQUFTO0FBQ3JELFVBQU1DLFlBQVlsRSxPQUFPLElBQUk7QUFFN0IsZUFBVyxDQUFDbUUsVUFBVUMsS0FBSyxLQUFLNUUsUUFBUXlFLE1BQU0sR0FBRztBQUMvQyxZQUFNRixrQkFBa0J0QixxQkFBcUJ3QixRQUFRRSxRQUFRO0FBRTdELFVBQUlKLGlCQUFpQjtBQUNuQixZQUFJcEQsTUFBTTBELFFBQVFELEtBQUssR0FBRztBQUN4QkYsb0JBQVVDLFFBQVEsSUFBSU4sV0FBV08sS0FBSztRQUN4QyxXQUNFQSxTQUNBLE9BQU9BLFVBQVUsWUFDakJBLE1BQU1FLGdCQUFnQnpFLFFBQ3RCO0FBQ0FxRSxvQkFBVUMsUUFBUSxJQUFJSCxNQUFNSSxLQUFLO1FBQ25DLE9BQU87QUFDTEYsb0JBQVVDLFFBQVEsSUFBSUM7UUFDeEI7TUFDRjtJQUNGO0FBRUEsV0FBT0Y7RUFDVDtBQVNBLFdBQVNLLGFBQ1BOLFFBQ0FPLE1BQVk7QUFFWixXQUFPUCxXQUFXLE1BQU07QUFDdEIsWUFBTVEsT0FBTzdFLHlCQUF5QnFFLFFBQVFPLElBQUk7QUFFbEQsVUFBSUMsTUFBTTtBQUNSLFlBQUlBLEtBQUtDLEtBQUs7QUFDWixpQkFBT3pELFFBQVF3RCxLQUFLQyxHQUFHO1FBQ3pCO0FBRUEsWUFBSSxPQUFPRCxLQUFLTCxVQUFVLFlBQVk7QUFDcEMsaUJBQU9uRCxRQUFRd0QsS0FBS0wsS0FBSztRQUMzQjtNQUNGO0FBRUFILGVBQVN0RSxlQUFlc0UsTUFBTTtJQUNoQztBQUVBLGFBQVNVLGdCQUFhO0FBQ3BCLGFBQU87SUFDVDtBQUVBLFdBQU9BO0VBQ1Q7QUNqTk8sTUFBTUMsU0FBTzlFLE9BQU8sQ0FDekIsS0FDQSxRQUNBLFdBQ0EsV0FDQSxRQUNBLFdBQ0EsU0FDQSxTQUNBLEtBQ0EsT0FDQSxPQUNBLE9BQ0EsU0FDQSxjQUNBLFFBQ0EsTUFDQSxVQUNBLFVBQ0EsV0FDQSxVQUNBLFFBQ0EsUUFDQSxPQUNBLFlBQ0EsV0FDQSxRQUNBLFlBQ0EsTUFDQSxhQUNBLE9BQ0EsV0FDQSxPQUNBLFVBQ0EsT0FDQSxPQUNBLE1BQ0EsTUFDQSxXQUNBLE1BQ0EsWUFDQSxjQUNBLFVBQ0EsUUFDQSxVQUNBLFFBQ0EsTUFDQSxNQUNBLE1BQ0EsTUFDQSxNQUNBLE1BQ0EsUUFDQSxVQUNBLFVBQ0EsTUFDQSxRQUNBLEtBQ0EsT0FDQSxTQUNBLE9BQ0EsT0FDQSxTQUNBLFVBQ0EsTUFDQSxRQUNBLE9BQ0EsUUFDQSxXQUNBLFFBQ0EsWUFDQSxTQUNBLE9BQ0EsUUFDQSxNQUNBLFlBQ0EsVUFDQSxVQUNBLEtBQ0EsV0FDQSxPQUNBLFlBQ0EsS0FDQSxNQUNBLE1BQ0EsUUFDQSxLQUNBLFFBQ0EsVUFDQSxXQUNBLFVBQ0EsVUFDQSxRQUNBLFNBQ0EsVUFDQSxVQUNBLFFBQ0EsVUFDQSxVQUNBLFNBQ0EsT0FDQSxXQUNBLE9BQ0EsU0FDQSxTQUNBLE1BQ0EsWUFDQSxZQUNBLFNBQ0EsTUFDQSxTQUNBLFFBQ0EsTUFDQSxTQUNBLE1BQ0EsS0FDQSxNQUNBLE9BQ0EsU0FDQSxLQUFLLENBQ0c7QUFFSCxNQUFNK0UsUUFBTS9FLE9BQU8sQ0FDeEIsT0FDQSxLQUNBLFlBQ0EsZUFDQSxnQkFDQSxnQkFDQSxpQkFDQSxvQkFDQSxVQUNBLFlBQ0EsUUFDQSxRQUNBLFdBQ0EsZ0JBQ0EsZUFDQSxVQUNBLFFBQ0EsS0FDQSxTQUNBLFlBQ0EsU0FDQSxTQUNBLGFBQ0EsUUFDQSxrQkFDQSxVQUNBLFFBQ0EsWUFDQSxTQUNBLFFBQ0EsUUFDQSxXQUNBLFdBQ0EsWUFDQSxrQkFDQSxRQUNBLFFBQ0EsU0FDQSxVQUNBLFVBQ0EsUUFDQSxZQUNBLFNBQ0EsUUFDQSxTQUNBLFFBQ0EsT0FBTyxDQUNDO0FBRUgsTUFBTWdGLGFBQWFoRixPQUFPLENBQy9CLFdBQ0EsaUJBQ0EsdUJBQ0EsZUFDQSxvQkFDQSxxQkFDQSxxQkFDQSxrQkFDQSxnQkFDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0Esa0JBQ0EsV0FDQSxXQUNBLGVBQ0EsZ0JBQ0EsWUFDQSxnQkFDQSxzQkFDQSxlQUNBLFVBQ0EsY0FBYyxDQUNOO0FBTUgsTUFBTWlGLGdCQUFnQmpGLE9BQU8sQ0FDbEMsV0FDQSxpQkFDQSxVQUNBLFdBQ0EsYUFDQSxvQkFDQSxrQkFDQSxpQkFDQSxpQkFDQSxpQkFDQSxTQUNBLGFBQ0EsUUFDQSxnQkFDQSxhQUNBLFdBQ0EsaUJBQ0EsVUFDQSxPQUNBLGNBQ0EsV0FDQSxLQUFLLENBQ0c7QUFFSCxNQUFNa0YsV0FBU2xGLE9BQU8sQ0FDM0IsUUFDQSxZQUNBLFVBQ0EsV0FDQSxTQUNBLFVBQ0EsTUFDQSxjQUNBLGlCQUNBLE1BQ0EsTUFDQSxTQUNBLFdBQ0EsWUFDQSxTQUNBLFFBQ0EsTUFDQSxVQUNBLFNBQ0EsVUFDQSxRQUNBLFFBQ0EsV0FDQSxVQUNBLE9BQ0EsU0FDQSxPQUNBLFVBQ0EsY0FDQSxhQUFhLENBQ0w7QUFJSCxNQUFNbUYsbUJBQW1CbkYsT0FBTyxDQUNyQyxXQUNBLGVBQ0EsY0FDQSxZQUNBLGFBQ0EsV0FDQSxXQUNBLFVBQ0EsVUFDQSxTQUNBLGFBQ0EsY0FDQSxrQkFDQSxlQUNBLE1BQU0sQ0FDRTtBQUVILE1BQU1vRixPQUFPcEYsT0FBTyxDQUFDLE9BQU8sQ0FBVTtBQzFSdEMsTUFBTThFLE9BQU85RSxPQUFPLENBQ3pCLFVBQ0EsVUFDQSxTQUNBLE9BQ0Esa0JBQ0EsZ0JBQ0Esd0JBQ0EsWUFDQSxjQUNBLFdBQ0EsVUFDQSxXQUNBLGVBQ0EsZUFDQSxXQUNBLFFBQ0EsU0FDQSxTQUNBLFNBQ0EsUUFDQSxXQUNBLFlBQ0EsZ0JBQ0EsVUFDQSxlQUNBLFlBQ0EsWUFDQSxXQUNBLE9BQ0EsWUFDQSwyQkFDQSx5QkFDQSxZQUNBLGFBQ0EsV0FDQSxnQkFDQSxlQUNBLFFBQ0EsT0FDQSxXQUNBLFVBQ0EsVUFDQSxRQUNBLFFBQ0EsWUFDQSxNQUNBLFNBQ0EsYUFDQSxhQUNBLFNBQ0EsUUFDQSxTQUNBLFFBQ0EsUUFDQSxXQUNBLFFBQ0EsT0FDQSxPQUNBLGFBQ0EsU0FDQSxVQUNBLE9BQ0EsYUFDQSxZQUNBLFNBQ0EsUUFDQSxTQUNBLFdBQ0EsY0FDQSxVQUNBLFFBQ0EsV0FDQSxRQUNBLFdBQ0EsZUFDQSxlQUNBLFdBQ0EsaUJBQ0EsdUJBQ0EsVUFDQSxXQUNBLFdBQ0EsY0FDQSxZQUNBLE9BQ0EsWUFDQSxPQUNBLFlBQ0EsUUFDQSxRQUNBLFdBQ0EsY0FDQSxTQUNBLFlBQ0EsU0FDQSxRQUNBLFNBQ0EsUUFDQSxRQUNBLFdBQ0EsU0FDQSxPQUNBLFVBQ0EsUUFDQSxTQUNBLFdBQ0EsWUFDQSxTQUNBLGFBQ0EsUUFDQSxVQUNBLFVBQ0EsU0FDQSxTQUNBLFFBQ0EsU0FDQSxNQUFNLENBQ0U7QUFFSCxNQUFNK0UsTUFBTS9FLE9BQU8sQ0FDeEIsaUJBQ0EsY0FDQSxZQUNBLHNCQUNBLGFBQ0EsVUFDQSxpQkFDQSxpQkFDQSxXQUNBLGlCQUNBLGtCQUNBLFNBQ0EsUUFDQSxNQUNBLFNBQ0EsUUFDQSxpQkFDQSxhQUNBLGFBQ0EsU0FDQSx1QkFDQSwrQkFDQSxpQkFDQSxtQkFDQSxNQUNBLE1BQ0EsS0FDQSxNQUNBLE1BQ0EsbUJBQ0EsYUFDQSxXQUNBLFdBQ0EsT0FDQSxZQUNBLGFBQ0EsT0FDQSxZQUNBLFFBQ0EsZ0JBQ0EsYUFDQSxVQUNBLGVBQ0EsZUFDQSxpQkFDQSxlQUNBLGFBQ0Esb0JBQ0EsZ0JBQ0EsY0FDQSxnQkFDQSxlQUNBLE1BQ0EsTUFDQSxNQUNBLE1BQ0EsY0FDQSxZQUNBLGlCQUNBLHFCQUNBLFVBQ0EsUUFDQSxNQUNBLG1CQUNBLE1BQ0EsT0FDQSxhQUNBLEtBQ0EsTUFDQSxNQUNBLE1BQ0EsTUFDQSxXQUNBLGFBQ0EsY0FDQSxZQUNBLFFBQ0EsZ0JBQ0Esa0JBQ0EsZ0JBQ0Esb0JBQ0Esa0JBQ0EsU0FDQSxjQUNBLGNBQ0EsZ0JBQ0EsZ0JBQ0EsZUFDQSxlQUNBLG9CQUNBLGFBQ0EsT0FDQSxRQUNBLGFBQ0EsU0FDQSxVQUNBLFFBQ0EsT0FDQSxRQUNBLGNBQ0EsVUFDQSxZQUNBLFdBQ0EsU0FDQSxVQUNBLGVBQ0EsVUFDQSxZQUNBLGVBQ0EsUUFDQSxjQUNBLHVCQUNBLG9CQUNBLGdCQUNBLFVBQ0EsaUJBQ0EsdUJBQ0Esa0JBQ0EsS0FDQSxNQUNBLE1BQ0EsVUFDQSxRQUNBLFFBQ0EsZUFDQSxhQUNBLFdBQ0EsVUFDQSxVQUNBLFNBQ0EsUUFDQSxtQkFDQSxTQUNBLG9CQUNBLG9CQUNBLGdCQUNBLGVBQ0EsZ0JBQ0EsZUFDQSxjQUNBLGdCQUNBLG9CQUNBLHFCQUNBLGtCQUNBLG1CQUNBLHFCQUNBLGtCQUNBLFVBQ0EsZ0JBQ0EsU0FDQSxnQkFDQSxrQkFDQSxZQUNBLGVBQ0EsV0FDQSxXQUNBLGFBQ0Esb0JBQ0EsZUFDQSxtQkFDQSxrQkFDQSxjQUNBLFFBQ0EsTUFDQSxNQUNBLFdBQ0EsVUFDQSxXQUNBLGNBQ0EsV0FDQSxjQUNBLGlCQUNBLGlCQUNBLFNBQ0EsZ0JBQ0EsUUFDQSxnQkFDQSxvQkFDQSxvQkFDQSxLQUNBLE1BQ0EsTUFDQSxTQUNBLEtBQ0EsTUFDQSxNQUNBLEtBQ0EsWUFBWSxDQUNKO0FBRUgsTUFBTWtGLFNBQVNsRixPQUFPLENBQzNCLFVBQ0EsZUFDQSxTQUNBLFlBQ0EsU0FDQSxnQkFDQSxlQUNBLGNBQ0EsY0FDQSxTQUNBLE9BQ0EsV0FDQSxnQkFDQSxZQUNBLFNBQ0EsU0FDQSxVQUNBLFFBQ0EsTUFDQSxXQUNBLFVBQ0EsaUJBQ0EsVUFDQSxVQUNBLGtCQUNBLGFBQ0EsWUFDQSxlQUNBLFdBQ0EsV0FDQSxpQkFDQSxZQUNBLFlBQ0EsUUFDQSxZQUNBLFlBQ0EsY0FDQSxXQUNBLFVBQ0EsVUFDQSxlQUNBLGlCQUNBLHdCQUNBLGFBQ0EsYUFDQSxjQUNBLFlBQ0Esa0JBQ0Esa0JBQ0EsYUFDQSxXQUNBLFNBQ0EsT0FBTyxDQUNSO0FBRU0sTUFBTXFGLE1BQU1yRixPQUFPLENBQ3hCLGNBQ0EsVUFDQSxlQUNBLGFBQ0EsYUFBYSxDQUNMO0FDcFhILE1BQU1zRixnQkFBZ0JyRixLQUFLLDJCQUEyQjtBQUN0RCxNQUFNc0YsV0FBV3RGLEtBQUssdUJBQXVCO0FBQzdDLE1BQU11RixjQUFjdkYsS0FBSyxlQUFlO0FBQ3hDLE1BQU13RixZQUFZeEYsS0FBSyw4QkFBOEI7QUFDckQsTUFBTXlGLFlBQVl6RixLQUFLLGdCQUFnQjtBQUN2QyxNQUFNMEYsaUJBQWlCMUY7SUFDNUI7OztBQUVLLE1BQU0yRixvQkFBb0IzRixLQUFLLHVCQUF1QjtBQUN0RCxNQUFNNEYsa0JBQWtCNUY7SUFDN0I7OztBQUVLLE1BQU02RixlQUFlN0YsS0FBSyxTQUFTO0FBQ25DLE1BQU04RixpQkFBaUI5RixLQUFLLDBCQUEwQjs7Ozs7Ozs7Ozs7Ozs7QUNzQjdELE1BQU0rRixZQUFZO0lBQ2hCbkMsU0FBUztJQUNUb0MsV0FBVztJQUNYYixNQUFNO0lBQ05jLGNBQWM7SUFDZEMsaUJBQWlCOztJQUNqQkMsWUFBWTs7SUFDWkMsd0JBQXdCO0lBQ3hCQyxTQUFTO0lBQ1RDLFVBQVU7SUFDVkMsY0FBYztJQUNkQyxrQkFBa0I7SUFDbEJDLFVBQVU7OztBQUdaLE1BQU1DLFlBQVksU0FBWkEsYUFBWTtBQUNoQixXQUFPLE9BQU9DLFdBQVcsY0FBYyxPQUFPQTtFQUNoRDtBQVVBLE1BQU1DLDRCQUE0QixTQUE1QkEsMkJBQ0pDLGNBQ0FDLG1CQUFvQztBQUVwQyxRQUNFLE9BQU9ELGlCQUFpQixZQUN4QixPQUFPQSxhQUFhRSxpQkFBaUIsWUFDckM7QUFDQSxhQUFPO0lBQ1Q7QUFLQSxRQUFJQyxTQUFTO0FBQ2IsVUFBTUMsWUFBWTtBQUNsQixRQUFJSCxxQkFBcUJBLGtCQUFrQkksYUFBYUQsU0FBUyxHQUFHO0FBQ2xFRCxlQUFTRixrQkFBa0JLLGFBQWFGLFNBQVM7SUFDbkQ7QUFFQSxVQUFNRyxhQUFhLGVBQWVKLFNBQVMsTUFBTUEsU0FBUztBQUUxRCxRQUFJO0FBQ0YsYUFBT0gsYUFBYUUsYUFBYUssWUFBWTtRQUMzQ0MsV0FBV3hDLE9BQUk7QUFDYixpQkFBT0E7O1FBRVR5QyxnQkFBZ0JDLFdBQVM7QUFDdkIsaUJBQU9BO1FBQ1Q7TUFDRCxDQUFBO2FBQ01DLElBQUc7QUFJVkMsY0FBUUMsS0FDTix5QkFBeUJOLGFBQWEsd0JBQXdCO0FBRWhFLGFBQU87SUFDVDtFQUNGO0FBRUEsTUFBTU8sa0JBQWtCLFNBQWxCQSxtQkFBa0I7QUFDdEIsV0FBTztNQUNMQyx5QkFBeUIsQ0FBQTtNQUN6QkMsdUJBQXVCLENBQUE7TUFDdkJDLHdCQUF3QixDQUFBO01BQ3hCQywwQkFBMEIsQ0FBQTtNQUMxQkMsd0JBQXdCLENBQUE7TUFDeEJDLHlCQUF5QixDQUFBO01BQ3pCQyx1QkFBdUIsQ0FBQTtNQUN2QkMscUJBQXFCLENBQUE7TUFDckJDLHdCQUF3QixDQUFBOztFQUU1QjtBQUVBLFdBQVNDLGtCQUFnRDtBQUFBLFFBQWhDMUIsVUFBcUJsRyxVQUFBQyxTQUFBRCxLQUFBQSxVQUFBNkgsQ0FBQUEsTUFBQUEsU0FBQTdILFVBQUFpRyxDQUFBQSxJQUFBQSxVQUFTO0FBQ3JELFVBQU02QixZQUF3QkMsVUFBcUJILGdCQUFnQkcsSUFBSTtBQUV2RUQsY0FBVUUsVUFBVUM7QUFFcEJILGNBQVVJLFVBQVUsQ0FBQTtBQUVwQixRQUNFLENBQUNoQyxXQUNELENBQUNBLFFBQU9MLFlBQ1JLLFFBQU9MLFNBQVNzQyxhQUFhN0MsVUFBVU8sWUFDdkMsQ0FBQ0ssUUFBT2tDLFNBQ1I7QUFHQU4sZ0JBQVVPLGNBQWM7QUFFeEIsYUFBT1A7SUFDVDtBQUVBLFFBQUk7TUFBRWpDLFVBQUFBO0lBQVUsSUFBR0s7QUFFbkIsVUFBTW9DLG1CQUFtQnpDO0FBQ3pCLFVBQU0wQyxnQkFDSkQsaUJBQWlCQztBQUNuQixVQUFNO01BQ0pDO01BQ0FDO01BQ0FDO01BQ0FOO01BQ0FPO01BQ0FDLGVBQWUxQyxRQUFPMEMsZ0JBQWlCMUMsUUFBZTJDO01BQ3REQztNQUNBQztNQUNBM0M7SUFDRCxJQUFHRjtBQUVKLFVBQU04QyxtQkFBbUJaLFFBQVExSDtBQUVqQyxVQUFNdUksWUFBWWxGLGFBQWFpRixrQkFBa0IsV0FBVztBQUM1RCxVQUFNRSxTQUFTbkYsYUFBYWlGLGtCQUFrQixRQUFRO0FBQ3RELFVBQU1HLGlCQUFpQnBGLGFBQWFpRixrQkFBa0IsYUFBYTtBQUNuRSxVQUFNSSxnQkFBZ0JyRixhQUFhaUYsa0JBQWtCLFlBQVk7QUFDakUsVUFBTUssZ0JBQWdCdEYsYUFBYWlGLGtCQUFrQixZQUFZO0FBUWpFLFFBQUksT0FBT1Asd0JBQXdCLFlBQVk7QUFDN0MsWUFBTWEsV0FBV3pELFVBQVMwRCxjQUFjLFVBQVU7QUFDbEQsVUFBSUQsU0FBU0UsV0FBV0YsU0FBU0UsUUFBUUMsZUFBZTtBQUN0RDVELFFBQUFBLFlBQVd5RCxTQUFTRSxRQUFRQztNQUM5QjtJQUNGO0FBRUEsUUFBSUM7QUFDSixRQUFJQyxZQUFZO0FBRWhCLFVBQU07TUFDSkM7TUFDQUM7TUFDQUM7TUFDQUM7SUFBb0IsSUFDbEJsRTtBQUNKLFVBQU07TUFBRW1FO0lBQVksSUFBRzFCO0FBRXZCLFFBQUkyQixRQUFRL0MsZ0JBQWU7QUFLM0JZLGNBQVVPLGNBQ1IsT0FBT3JKLFlBQVksY0FDbkIsT0FBT3FLLGtCQUFrQixjQUN6Qk8sa0JBQ0FBLGVBQWVNLHVCQUF1QnJDO0FBRXhDLFVBQU07TUFDSmpELGVBQUFBO01BQ0FDLFVBQUFBO01BQ0FDLGFBQUFBO01BQ0FDLFdBQUFBO01BQ0FDLFdBQUFBO01BQ0FFLG1CQUFBQTtNQUNBQyxpQkFBQUE7TUFDQUUsZ0JBQUFBO0lBQ0QsSUFBRzhFO0FBRUosUUFBSTtNQUFFbEYsZ0JBQUFBO0lBQWdCLElBQUdrRjtBQVF6QixRQUFJQyxlQUFlO0FBQ25CLFVBQU1DLHVCQUF1QnZILFNBQVMsQ0FBQSxHQUFJLENBQ3hDLEdBQUd3SCxRQUNILEdBQUdBLE9BQ0gsR0FBR0EsWUFDSCxHQUFHQSxVQUNILEdBQUdBLElBQVMsQ0FDYjtBQUdELFFBQUlDLGVBQWU7QUFDbkIsVUFBTUMsdUJBQXVCMUgsU0FBUyxDQUFBLEdBQUksQ0FDeEMsR0FBRzJILE1BQ0gsR0FBR0EsS0FDSCxHQUFHQSxRQUNILEdBQUdBLEdBQVMsQ0FDYjtBQVFELFFBQUlDLDBCQUEwQnJMLE9BQU9FLEtBQ25DQyxPQUFPLE1BQU07TUFDWG1MLGNBQWM7UUFDWkMsVUFBVTtRQUNWQyxjQUFjO1FBQ2RDLFlBQVk7UUFDWmxILE9BQU87O01BRVRtSCxvQkFBb0I7UUFDbEJILFVBQVU7UUFDVkMsY0FBYztRQUNkQyxZQUFZO1FBQ1psSCxPQUFPOztNQUVUb0gsZ0NBQWdDO1FBQzlCSixVQUFVO1FBQ1ZDLGNBQWM7UUFDZEMsWUFBWTtRQUNabEgsT0FBTztNQUNSO0lBQ0YsQ0FBQSxDQUFDO0FBSUosUUFBSXFILGNBQWM7QUFHbEIsUUFBSUMsY0FBYztBQUdsQixVQUFNQyx5QkFBeUI5TCxPQUFPRSxLQUNwQ0MsT0FBTyxNQUFNO01BQ1g0TCxVQUFVO1FBQ1JSLFVBQVU7UUFDVkMsY0FBYztRQUNkQyxZQUFZO1FBQ1psSCxPQUFPOztNQUVUeUgsZ0JBQWdCO1FBQ2RULFVBQVU7UUFDVkMsY0FBYztRQUNkQyxZQUFZO1FBQ1psSCxPQUFPO01BQ1I7SUFDRixDQUFBLENBQUM7QUFJSixRQUFJMEgsa0JBQWtCO0FBR3RCLFFBQUlDLGtCQUFrQjtBQUd0QixRQUFJQywwQkFBMEI7QUFJOUIsUUFBSUMsMkJBQTJCO0FBSy9CLFFBQUlDLHFCQUFxQjtBQUt6QixRQUFJQyxlQUFlO0FBR25CLFFBQUlDLGlCQUFpQjtBQUdyQixRQUFJQyxhQUFhO0FBSWpCLFFBQUlDLGFBQWE7QUFNakIsUUFBSUMsYUFBYTtBQUlqQixRQUFJQyxzQkFBc0I7QUFJMUIsUUFBSUMsc0JBQXNCO0FBSzFCLFFBQUlDLGVBQWU7QUFlbkIsUUFBSUMsdUJBQXVCO0FBQzNCLFVBQU1DLDhCQUE4QjtBQUdwQyxRQUFJQyxlQUFlO0FBSW5CLFFBQUlDLFdBQVc7QUFHZixRQUFJQyxlQUEwQyxDQUFBO0FBRzlDLFFBQUlDLGtCQUFrQjtBQUN0QixVQUFNQywwQkFBMEIzSixTQUFTLENBQUEsR0FBSSxDQUMzQyxrQkFDQSxTQUNBLFlBQ0EsUUFDQSxpQkFDQSxRQUNBLFVBQ0EsUUFDQSxNQUNBLE1BQ0EsTUFDQSxNQUNBLFNBQ0EsV0FDQSxZQUNBLFlBQ0EsYUFDQSxVQUNBLFNBQ0EsT0FDQSxZQUNBLFNBQ0EsU0FDQSxTQUNBLEtBQUssQ0FDTjtBQUdELFFBQUk0SixnQkFBZ0I7QUFDcEIsVUFBTUMsd0JBQXdCN0osU0FBUyxDQUFBLEdBQUksQ0FDekMsU0FDQSxTQUNBLE9BQ0EsVUFDQSxTQUNBLE9BQU8sQ0FDUjtBQUdELFFBQUk4SixzQkFBc0I7QUFDMUIsVUFBTUMsOEJBQThCL0osU0FBUyxDQUFBLEdBQUksQ0FDL0MsT0FDQSxTQUNBLE9BQ0EsTUFDQSxTQUNBLFFBQ0EsV0FDQSxlQUNBLFFBQ0EsV0FDQSxTQUNBLFNBQ0EsU0FDQSxPQUFPLENBQ1I7QUFFRCxVQUFNZ0ssbUJBQW1CO0FBQ3pCLFVBQU1DLGdCQUFnQjtBQUN0QixVQUFNQyxpQkFBaUI7QUFFdkIsUUFBSUMsWUFBWUQ7QUFDaEIsUUFBSUUsaUJBQWlCO0FBR3JCLFFBQUlDLHFCQUFxQjtBQUN6QixVQUFNQyw2QkFBNkJ0SyxTQUNqQyxDQUFBLEdBQ0EsQ0FBQ2dLLGtCQUFrQkMsZUFBZUMsY0FBYyxHQUNoRHpMLGNBQWM7QUFHaEIsUUFBSThMLGlDQUFpQ3ZLLFNBQVMsQ0FBQSxHQUFJLENBQ2hELE1BQ0EsTUFDQSxNQUNBLE1BQ0EsT0FBTyxDQUNSO0FBRUQsUUFBSXdLLDBCQUEwQnhLLFNBQVMsQ0FBQSxHQUFJLENBQUMsZ0JBQWdCLENBQUM7QUFNN0QsVUFBTXlLLCtCQUErQnpLLFNBQVMsQ0FBQSxHQUFJLENBQ2hELFNBQ0EsU0FDQSxRQUNBLEtBQ0EsUUFBUSxDQUNUO0FBR0QsUUFBSTBLLG9CQUFtRDtBQUN2RCxVQUFNQywrQkFBK0IsQ0FBQyx5QkFBeUIsV0FBVztBQUMxRSxVQUFNQyw0QkFBNEI7QUFDbEMsUUFBSXpLLG9CQUEyRDtBQUcvRCxRQUFJMEssU0FBd0I7QUFLNUIsVUFBTUMsY0FBYy9ILFVBQVMwRCxjQUFjLE1BQU07QUFFakQsVUFBTXNFLG9CQUFvQixTQUFwQkEsbUJBQ0pDLFdBQWtCO0FBRWxCLGFBQU9BLHFCQUFxQjFMLFVBQVUwTCxxQkFBcUJDOztBQVM3RCxVQUFNQyxlQUFlLFNBQWZBLGdCQUF5QztBQUFBLFVBQWhCQyxNQUFBak8sVUFBQUMsU0FBQSxLQUFBRCxVQUFBLENBQUEsTUFBQTZILFNBQUE3SCxVQUFBLENBQUEsSUFBYyxDQUFBO0FBQzNDLFVBQUkyTixVQUFVQSxXQUFXTSxLQUFLO0FBQzVCO01BQ0Y7QUFHQSxVQUFJLENBQUNBLE9BQU8sT0FBT0EsUUFBUSxVQUFVO0FBQ25DQSxjQUFNLENBQUE7TUFDUjtBQUdBQSxZQUFNekssTUFBTXlLLEdBQUc7QUFFZlQ7TUFFRUMsNkJBQTZCM0wsUUFBUW1NLElBQUlULGlCQUFpQixNQUFNLEtBQzVERSw0QkFDQU8sSUFBSVQ7QUFHVnZLLDBCQUNFdUssc0JBQXNCLDBCQUNsQmpNLGlCQUNBSDtBQUdOZ0oscUJBQWVuSSxxQkFBcUJnTSxLQUFLLGNBQWMsSUFDbkRuTCxTQUFTLENBQUEsR0FBSW1MLElBQUk3RCxjQUFjbkgsaUJBQWlCLElBQ2hEb0g7QUFDSkUscUJBQWV0SSxxQkFBcUJnTSxLQUFLLGNBQWMsSUFDbkRuTCxTQUFTLENBQUEsR0FBSW1MLElBQUkxRCxjQUFjdEgsaUJBQWlCLElBQ2hEdUg7QUFDSjJDLDJCQUFxQmxMLHFCQUFxQmdNLEtBQUssb0JBQW9CLElBQy9EbkwsU0FBUyxDQUFBLEdBQUltTCxJQUFJZCxvQkFBb0I1TCxjQUFjLElBQ25ENkw7QUFDSlIsNEJBQXNCM0sscUJBQXFCZ00sS0FBSyxtQkFBbUIsSUFDL0RuTCxTQUNFVSxNQUFNcUosMkJBQTJCLEdBQ2pDb0IsSUFBSUMsbUJBQ0pqTCxpQkFBaUIsSUFFbkI0SjtBQUNKSCxzQkFBZ0J6SyxxQkFBcUJnTSxLQUFLLG1CQUFtQixJQUN6RG5MLFNBQ0VVLE1BQU1tSixxQkFBcUIsR0FDM0JzQixJQUFJRSxtQkFDSmxMLGlCQUFpQixJQUVuQjBKO0FBQ0pILHdCQUFrQnZLLHFCQUFxQmdNLEtBQUssaUJBQWlCLElBQ3pEbkwsU0FBUyxDQUFBLEdBQUltTCxJQUFJekIsaUJBQWlCdkosaUJBQWlCLElBQ25Ed0o7QUFDSnhCLG9CQUFjaEoscUJBQXFCZ00sS0FBSyxhQUFhLElBQ2pEbkwsU0FBUyxDQUFBLEdBQUltTCxJQUFJaEQsYUFBYWhJLGlCQUFpQixJQUMvQ08sTUFBTSxDQUFBLENBQUU7QUFDWjBILG9CQUFjakoscUJBQXFCZ00sS0FBSyxhQUFhLElBQ2pEbkwsU0FBUyxDQUFBLEdBQUltTCxJQUFJL0MsYUFBYWpJLGlCQUFpQixJQUMvQ08sTUFBTSxDQUFBLENBQUU7QUFDWitJLHFCQUFldEsscUJBQXFCZ00sS0FBSyxjQUFjLElBQ25EQSxJQUFJMUIsZUFDSjtBQUNKakIsd0JBQWtCMkMsSUFBSTNDLG9CQUFvQjtBQUMxQ0Msd0JBQWtCMEMsSUFBSTFDLG9CQUFvQjtBQUMxQ0MsZ0NBQTBCeUMsSUFBSXpDLDJCQUEyQjtBQUN6REMsaUNBQTJCd0MsSUFBSXhDLDZCQUE2QjtBQUM1REMsMkJBQXFCdUMsSUFBSXZDLHNCQUFzQjtBQUMvQ0MscUJBQWVzQyxJQUFJdEMsaUJBQWlCO0FBQ3BDQyx1QkFBaUJxQyxJQUFJckMsa0JBQWtCO0FBQ3ZDRyxtQkFBYWtDLElBQUlsQyxjQUFjO0FBQy9CQyw0QkFBc0JpQyxJQUFJakMsdUJBQXVCO0FBQ2pEQyw0QkFBc0JnQyxJQUFJaEMsdUJBQXVCO0FBQ2pESCxtQkFBYW1DLElBQUluQyxjQUFjO0FBQy9CSSxxQkFBZStCLElBQUkvQixpQkFBaUI7QUFDcENDLDZCQUF1QjhCLElBQUk5Qix3QkFBd0I7QUFDbkRFLHFCQUFlNEIsSUFBSTVCLGlCQUFpQjtBQUNwQ0MsaUJBQVcyQixJQUFJM0IsWUFBWTtBQUMzQnJILHlCQUFpQmdKLElBQUlHLHNCQUFzQmpFO0FBQzNDOEMsa0JBQVlnQixJQUFJaEIsYUFBYUQ7QUFDN0JLLHVDQUNFWSxJQUFJWixrQ0FBa0NBO0FBQ3hDQyxnQ0FDRVcsSUFBSVgsMkJBQTJCQTtBQUVqQzVDLGdDQUEwQnVELElBQUl2RCwyQkFBMkIsQ0FBQTtBQUN6RCxVQUNFdUQsSUFBSXZELDJCQUNKbUQsa0JBQWtCSSxJQUFJdkQsd0JBQXdCQyxZQUFZLEdBQzFEO0FBQ0FELGdDQUF3QkMsZUFDdEJzRCxJQUFJdkQsd0JBQXdCQztNQUNoQztBQUVBLFVBQ0VzRCxJQUFJdkQsMkJBQ0ptRCxrQkFBa0JJLElBQUl2RCx3QkFBd0JLLGtCQUFrQixHQUNoRTtBQUNBTCxnQ0FBd0JLLHFCQUN0QmtELElBQUl2RCx3QkFBd0JLO01BQ2hDO0FBRUEsVUFDRWtELElBQUl2RCwyQkFDSixPQUFPdUQsSUFBSXZELHdCQUF3Qk0sbUNBQ2pDLFdBQ0Y7QUFDQU4sZ0NBQXdCTSxpQ0FDdEJpRCxJQUFJdkQsd0JBQXdCTTtNQUNoQztBQUVBLFVBQUlVLG9CQUFvQjtBQUN0QkgsMEJBQWtCO01BQ3BCO0FBRUEsVUFBSVMscUJBQXFCO0FBQ3ZCRCxxQkFBYTtNQUNmO0FBR0EsVUFBSVEsY0FBYztBQUNoQm5DLHVCQUFldEgsU0FBUyxDQUFBLEdBQUl3SCxJQUFTO0FBQ3JDQyx1QkFBZS9LLE9BQU8sSUFBSTtBQUMxQixZQUFJK00sYUFBYW5JLFNBQVMsTUFBTTtBQUM5QnRCLG1CQUFTc0gsY0FBY0UsTUFBUztBQUNoQ3hILG1CQUFTeUgsY0FBY0UsSUFBVTtRQUNuQztBQUVBLFlBQUk4QixhQUFhbEksUUFBUSxNQUFNO0FBQzdCdkIsbUJBQVNzSCxjQUFjRSxLQUFRO0FBQy9CeEgsbUJBQVN5SCxjQUFjRSxHQUFTO0FBQ2hDM0gsbUJBQVN5SCxjQUFjRSxHQUFTO1FBQ2xDO0FBRUEsWUFBSThCLGFBQWFqSSxlQUFlLE1BQU07QUFDcEN4QixtQkFBU3NILGNBQWNFLFVBQWU7QUFDdEN4SCxtQkFBU3lILGNBQWNFLEdBQVM7QUFDaEMzSCxtQkFBU3lILGNBQWNFLEdBQVM7UUFDbEM7QUFFQSxZQUFJOEIsYUFBYS9ILFdBQVcsTUFBTTtBQUNoQzFCLG1CQUFTc0gsY0FBY0UsUUFBVztBQUNsQ3hILG1CQUFTeUgsY0FBY0UsTUFBWTtBQUNuQzNILG1CQUFTeUgsY0FBY0UsR0FBUztRQUNsQztNQUNGO0FBR0EsVUFBSSxDQUFDeEkscUJBQXFCZ00sS0FBSyxVQUFVLEdBQUc7QUFDMUM5QywrQkFBdUJDLFdBQVc7TUFDcEM7QUFFQSxVQUFJLENBQUNuSixxQkFBcUJnTSxLQUFLLFVBQVUsR0FBRztBQUMxQzlDLCtCQUF1QkUsaUJBQWlCO01BQzFDO0FBR0EsVUFBSTRDLElBQUlJLFVBQVU7QUFDaEIsWUFBSSxPQUFPSixJQUFJSSxhQUFhLFlBQVk7QUFDdENsRCxpQ0FBdUJDLFdBQVc2QyxJQUFJSTtRQUN4QyxPQUFPO0FBQ0wsY0FBSWpFLGlCQUFpQkMsc0JBQXNCO0FBQ3pDRCwyQkFBZTVHLE1BQU00RyxZQUFZO1VBQ25DO0FBRUF0SCxtQkFBU3NILGNBQWM2RCxJQUFJSSxVQUFVcEwsaUJBQWlCO1FBQ3hEO01BQ0Y7QUFFQSxVQUFJZ0wsSUFBSUssVUFBVTtBQUNoQixZQUFJLE9BQU9MLElBQUlLLGFBQWEsWUFBWTtBQUN0Q25ELGlDQUF1QkUsaUJBQWlCNEMsSUFBSUs7UUFDOUMsT0FBTztBQUNMLGNBQUkvRCxpQkFBaUJDLHNCQUFzQjtBQUN6Q0QsMkJBQWUvRyxNQUFNK0csWUFBWTtVQUNuQztBQUVBekgsbUJBQVN5SCxjQUFjMEQsSUFBSUssVUFBVXJMLGlCQUFpQjtRQUN4RDtNQUNGO0FBRUEsVUFBSWdMLElBQUlDLG1CQUFtQjtBQUN6QnBMLGlCQUFTOEoscUJBQXFCcUIsSUFBSUMsbUJBQW1CakwsaUJBQWlCO01BQ3hFO0FBRUEsVUFBSWdMLElBQUl6QixpQkFBaUI7QUFDdkIsWUFBSUEsb0JBQW9CQyx5QkFBeUI7QUFDL0NELDRCQUFrQmhKLE1BQU1nSixlQUFlO1FBQ3pDO0FBRUExSixpQkFBUzBKLGlCQUFpQnlCLElBQUl6QixpQkFBaUJ2SixpQkFBaUI7TUFDbEU7QUFFQSxVQUFJZ0wsSUFBSU0scUJBQXFCO0FBQzNCLFlBQUkvQixvQkFBb0JDLHlCQUF5QjtBQUMvQ0QsNEJBQWtCaEosTUFBTWdKLGVBQWU7UUFDekM7QUFFQTFKLGlCQUFTMEosaUJBQWlCeUIsSUFBSU0scUJBQXFCdEwsaUJBQWlCO01BQ3RFO0FBR0EsVUFBSW9KLGNBQWM7QUFDaEJqQyxxQkFBYSxPQUFPLElBQUk7TUFDMUI7QUFHQSxVQUFJd0IsZ0JBQWdCO0FBQ2xCOUksaUJBQVNzSCxjQUFjLENBQUMsUUFBUSxRQUFRLE1BQU0sQ0FBQztNQUNqRDtBQUdBLFVBQUlBLGFBQWFvRSxPQUFPO0FBQ3RCMUwsaUJBQVNzSCxjQUFjLENBQUMsT0FBTyxDQUFDO0FBQ2hDLGVBQU9hLFlBQVl3RDtNQUNyQjtBQUVBLFVBQUlSLElBQUlTLHNCQUFzQjtBQUM1QixZQUFJLE9BQU9ULElBQUlTLHFCQUFxQjlILGVBQWUsWUFBWTtBQUM3RCxnQkFBTXRFLGdCQUNKLDZFQUE2RTtRQUVqRjtBQUVBLFlBQUksT0FBTzJMLElBQUlTLHFCQUFxQjdILG9CQUFvQixZQUFZO0FBQ2xFLGdCQUFNdkUsZ0JBQ0osa0ZBQWtGO1FBRXRGO0FBR0FvSCw2QkFBcUJ1RSxJQUFJUztBQUd6Qi9FLG9CQUFZRCxtQkFBbUI5QyxXQUFXLEVBQUU7TUFDOUMsT0FBTztBQUVMLFlBQUk4Qyx1QkFBdUI3QixRQUFXO0FBQ3BDNkIsK0JBQXFCdkQsMEJBQ25CQyxjQUNBbUMsYUFBYTtRQUVqQjtBQUdBLFlBQUltQix1QkFBdUIsUUFBUSxPQUFPQyxjQUFjLFVBQVU7QUFDaEVBLHNCQUFZRCxtQkFBbUI5QyxXQUFXLEVBQUU7UUFDOUM7TUFDRjtBQUlBLFVBQUl0SCxRQUFRO0FBQ1ZBLGVBQU8yTyxHQUFHO01BQ1o7QUFFQU4sZUFBU007O0FBTVgsVUFBTVUsZUFBZTdMLFNBQVMsQ0FBQSxHQUFJLENBQ2hDLEdBQUd3SCxPQUNILEdBQUdBLFlBQ0gsR0FBR0EsYUFBa0IsQ0FDdEI7QUFDRCxVQUFNc0Usa0JBQWtCOUwsU0FBUyxDQUFBLEdBQUksQ0FDbkMsR0FBR3dILFVBQ0gsR0FBR0EsZ0JBQXFCLENBQ3pCO0FBUUQsVUFBTXVFLHVCQUF1QixTQUF2QkEsc0JBQWlDMUwsU0FBZ0I7QUFDckQsVUFBSTJMLFNBQVN6RixjQUFjbEcsT0FBTztBQUlsQyxVQUFJLENBQUMyTCxVQUFVLENBQUNBLE9BQU9DLFNBQVM7QUFDOUJELGlCQUFTO1VBQ1BFLGNBQWMvQjtVQUNkOEIsU0FBUzs7TUFFYjtBQUVBLFlBQU1BLFVBQVUzTixrQkFBa0IrQixRQUFRNEwsT0FBTztBQUNqRCxZQUFNRSxnQkFBZ0I3TixrQkFBa0IwTixPQUFPQyxPQUFPO0FBRXRELFVBQUksQ0FBQzVCLG1CQUFtQmhLLFFBQVE2TCxZQUFZLEdBQUc7QUFDN0MsZUFBTztNQUNUO0FBRUEsVUFBSTdMLFFBQVE2TCxpQkFBaUJqQyxlQUFlO0FBSTFDLFlBQUkrQixPQUFPRSxpQkFBaUJoQyxnQkFBZ0I7QUFDMUMsaUJBQU8rQixZQUFZO1FBQ3JCO0FBS0EsWUFBSUQsT0FBT0UsaUJBQWlCbEMsa0JBQWtCO0FBQzVDLGlCQUNFaUMsWUFBWSxVQUNYRSxrQkFBa0Isb0JBQ2pCNUIsK0JBQStCNEIsYUFBYTtRQUVsRDtBQUlBLGVBQU9DLFFBQVFQLGFBQWFJLE9BQU8sQ0FBQztNQUN0QztBQUVBLFVBQUk1TCxRQUFRNkwsaUJBQWlCbEMsa0JBQWtCO0FBSTdDLFlBQUlnQyxPQUFPRSxpQkFBaUJoQyxnQkFBZ0I7QUFDMUMsaUJBQU8rQixZQUFZO1FBQ3JCO0FBSUEsWUFBSUQsT0FBT0UsaUJBQWlCakMsZUFBZTtBQUN6QyxpQkFBT2dDLFlBQVksVUFBVXpCLHdCQUF3QjJCLGFBQWE7UUFDcEU7QUFJQSxlQUFPQyxRQUFRTixnQkFBZ0JHLE9BQU8sQ0FBQztNQUN6QztBQUVBLFVBQUk1TCxRQUFRNkwsaUJBQWlCaEMsZ0JBQWdCO0FBSTNDLFlBQ0U4QixPQUFPRSxpQkFBaUJqQyxpQkFDeEIsQ0FBQ08sd0JBQXdCMkIsYUFBYSxHQUN0QztBQUNBLGlCQUFPO1FBQ1Q7QUFFQSxZQUNFSCxPQUFPRSxpQkFBaUJsQyxvQkFDeEIsQ0FBQ08sK0JBQStCNEIsYUFBYSxHQUM3QztBQUNBLGlCQUFPO1FBQ1Q7QUFJQSxlQUNFLENBQUNMLGdCQUFnQkcsT0FBTyxNQUN2QnhCLDZCQUE2QndCLE9BQU8sS0FBSyxDQUFDSixhQUFhSSxPQUFPO01BRW5FO0FBR0EsVUFDRXZCLHNCQUFzQiwyQkFDdEJMLG1CQUFtQmhLLFFBQVE2TCxZQUFZLEdBQ3ZDO0FBQ0EsZUFBTztNQUNUO0FBTUEsYUFBTzs7QUFRVCxVQUFNRyxlQUFlLFNBQWZBLGNBQXlCQyxNQUFVO0FBQ3ZDcE8sZ0JBQVU4RyxVQUFVSSxTQUFTO1FBQUUvRSxTQUFTaU07TUFBTSxDQUFBO0FBRTlDLFVBQUk7QUFFRi9GLHNCQUFjK0YsSUFBSSxFQUFFQyxZQUFZRCxJQUFJO2VBQzdCckksSUFBRztBQUNWbUMsZUFBT2tHLElBQUk7TUFDYjs7QUFTRixVQUFNRSxtQkFBbUIsU0FBbkJBLGtCQUE2QkMsTUFBY3BNLFNBQWdCO0FBQy9ELFVBQUk7QUFDRm5DLGtCQUFVOEcsVUFBVUksU0FBUztVQUMzQjNDLFdBQVdwQyxRQUFRcU0saUJBQWlCRCxJQUFJO1VBQ3hDRSxNQUFNdE07UUFDUCxDQUFBO2VBQ000RCxJQUFHO0FBQ1YvRixrQkFBVThHLFVBQVVJLFNBQVM7VUFDM0IzQyxXQUFXO1VBQ1hrSyxNQUFNdE07UUFDUCxDQUFBO01BQ0g7QUFFQUEsY0FBUXVNLGdCQUFnQkgsSUFBSTtBQUc1QixVQUFJQSxTQUFTLE1BQU07QUFDakIsWUFBSXhELGNBQWNDLHFCQUFxQjtBQUNyQyxjQUFJO0FBQ0ZtRCx5QkFBYWhNLE9BQU87VUFDdEIsU0FBUzRELElBQUc7VUFBQTtRQUNkLE9BQU87QUFDTCxjQUFJO0FBQ0Y1RCxvQkFBUXdNLGFBQWFKLE1BQU0sRUFBRTtVQUMvQixTQUFTeEksSUFBRztVQUFBO1FBQ2Q7TUFDRjs7QUFTRixVQUFNNkksZ0JBQWdCLFNBQWhCQSxlQUEwQkMsT0FBYTtBQUUzQyxVQUFJQyxNQUFNO0FBQ1YsVUFBSUMsb0JBQW9CO0FBRXhCLFVBQUlqRSxZQUFZO0FBQ2QrRCxnQkFBUSxzQkFBc0JBO01BQ2hDLE9BQU87QUFFTCxjQUFNRyxVQUFVdk8sWUFBWW9PLE9BQU8sYUFBYTtBQUNoREUsNEJBQW9CQyxXQUFXQSxRQUFRLENBQUM7TUFDMUM7QUFFQSxVQUNFeEMsc0JBQXNCLDJCQUN0QlAsY0FBY0QsZ0JBQ2Q7QUFFQTZDLGdCQUNFLG1FQUNBQSxRQUNBO01BQ0o7QUFFQSxZQUFNSSxlQUFldkcscUJBQ2pCQSxtQkFBbUI5QyxXQUFXaUosS0FBSyxJQUNuQ0E7QUFLSixVQUFJNUMsY0FBY0QsZ0JBQWdCO0FBQ2hDLFlBQUk7QUFDRjhDLGdCQUFNLElBQUkvRyxVQUFTLEVBQUdtSCxnQkFBZ0JELGNBQWN6QyxpQkFBaUI7UUFDdkUsU0FBU3pHLElBQUc7UUFBQTtNQUNkO0FBR0EsVUFBSSxDQUFDK0ksT0FBTyxDQUFDQSxJQUFJSyxpQkFBaUI7QUFDaENMLGNBQU1sRyxlQUFld0csZUFBZW5ELFdBQVcsWUFBWSxJQUFJO0FBQy9ELFlBQUk7QUFDRjZDLGNBQUlLLGdCQUFnQkUsWUFBWW5ELGlCQUM1QnZELFlBQ0FzRztpQkFDR2xKLElBQUc7UUFDVjtNQUVKO0FBRUEsWUFBTXVKLE9BQU9SLElBQUlRLFFBQVFSLElBQUlLO0FBRTdCLFVBQUlOLFNBQVNFLG1CQUFtQjtBQUM5Qk8sYUFBS0MsYUFDSDFLLFVBQVMySyxlQUFlVCxpQkFBaUIsR0FDekNPLEtBQUtHLFdBQVcsQ0FBQyxLQUFLLElBQUk7TUFFOUI7QUFHQSxVQUFJeEQsY0FBY0QsZ0JBQWdCO0FBQ2hDLGVBQU9qRCxxQkFBcUIyRyxLQUMxQlosS0FDQWxFLGlCQUFpQixTQUFTLE1BQU0sRUFDaEMsQ0FBQztNQUNMO0FBRUEsYUFBT0EsaUJBQWlCa0UsSUFBSUssa0JBQWtCRzs7QUFTaEQsVUFBTUssc0JBQXNCLFNBQXRCQSxxQkFBZ0M1SSxNQUFVO0FBQzlDLGFBQU84QixtQkFBbUI2RztRQUN4QjNJLEtBQUswQixpQkFBaUIxQjtRQUN0QkE7O1FBRUFZLFdBQVdpSSxlQUNUakksV0FBV2tJLGVBQ1hsSSxXQUFXbUksWUFDWG5JLFdBQVdvSSw4QkFDWHBJLFdBQVdxSTtRQUNiO01BQUk7O0FBVVIsVUFBTUMsZUFBZSxTQUFmQSxjQUF5QjlOLFNBQWdCO0FBQzdDLGFBQ0VBLG1CQUFtQjJGLG9CQUNsQixPQUFPM0YsUUFBUStOLGFBQWEsWUFDM0IsT0FBTy9OLFFBQVFnTyxnQkFBZ0IsWUFDL0IsT0FBT2hPLFFBQVFrTSxnQkFBZ0IsY0FDL0IsRUFBRWxNLFFBQVFpTyxzQkFBc0J4SSxpQkFDaEMsT0FBT3pGLFFBQVF1TSxvQkFBb0IsY0FDbkMsT0FBT3ZNLFFBQVF3TSxpQkFBaUIsY0FDaEMsT0FBT3hNLFFBQVE2TCxpQkFBaUIsWUFDaEMsT0FBTzdMLFFBQVFvTixpQkFBaUIsY0FDaEMsT0FBT3BOLFFBQVFrTyxrQkFBa0I7O0FBVXZDLFVBQU1DLFVBQVUsU0FBVkEsU0FBb0IxTixPQUFjO0FBQ3RDLGFBQU8sT0FBTzhFLFNBQVMsY0FBYzlFLGlCQUFpQjhFOztBQUd4RCxhQUFTNkksY0FDUHRILFFBQ0F1SCxhQUNBQyxNQUFzQjtBQUV0QmpSLG1CQUFheUosUUFBUXlILFVBQVc7QUFDOUJBLGFBQUtoQixLQUFLNUksV0FBVzBKLGFBQWFDLE1BQU05RCxNQUFNO01BQ2hELENBQUM7SUFDSDtBQVdBLFVBQU1nRSxvQkFBb0IsU0FBcEJBLG1CQUE4QkgsYUFBZ0I7QUFDbEQsVUFBSWhJLFVBQVU7QUFHZCtILG9CQUFjdEgsTUFBTTFDLHdCQUF3QmlLLGFBQWEsSUFBSTtBQUc3RCxVQUFJUCxhQUFhTyxXQUFXLEdBQUc7QUFDN0JyQyxxQkFBYXFDLFdBQVc7QUFDeEIsZUFBTztNQUNUO0FBR0EsWUFBTXpDLFVBQVU5TCxrQkFBa0J1TyxZQUFZTixRQUFRO0FBR3RESyxvQkFBY3RILE1BQU12QyxxQkFBcUI4SixhQUFhO1FBQ3BEekM7UUFDQTZDLGFBQWF4SDtNQUNkLENBQUE7QUFHRCxVQUNFdUIsZ0JBQ0E2RixZQUFZSCxjQUFhLEtBQ3pCLENBQUNDLFFBQVFFLFlBQVlLLGlCQUFpQixLQUN0QzFQLFdBQVcsWUFBWXFQLFlBQVluQixTQUFTLEtBQzVDbE8sV0FBVyxZQUFZcVAsWUFBWUwsV0FBVyxHQUM5QztBQUNBaEMscUJBQWFxQyxXQUFXO0FBQ3hCLGVBQU87TUFDVDtBQUdBLFVBQUlBLFlBQVlySixhQUFhN0MsVUFBVUssd0JBQXdCO0FBQzdEd0oscUJBQWFxQyxXQUFXO0FBQ3hCLGVBQU87TUFDVDtBQUdBLFVBQ0U3RixnQkFDQTZGLFlBQVlySixhQUFhN0MsVUFBVU0sV0FDbkN6RCxXQUFXLFdBQVdxUCxZQUFZQyxJQUFJLEdBQ3RDO0FBQ0F0QyxxQkFBYXFDLFdBQVc7QUFDeEIsZUFBTztNQUNUO0FBR0EsVUFDRSxFQUNFckcsdUJBQXVCQyxvQkFBb0IyQyxZQUMzQzVDLHVCQUF1QkMsU0FBUzJELE9BQU8sT0FFeEMsQ0FBQzNFLGFBQWEyRSxPQUFPLEtBQUs5RCxZQUFZOEQsT0FBTyxJQUM5QztBQUVBLFlBQUksQ0FBQzlELFlBQVk4RCxPQUFPLEtBQUsrQyxzQkFBc0IvQyxPQUFPLEdBQUc7QUFDM0QsY0FDRXJFLHdCQUF3QkMsd0JBQXdCdkksVUFDaERELFdBQVd1SSx3QkFBd0JDLGNBQWNvRSxPQUFPLEdBQ3hEO0FBQ0EsbUJBQU87VUFDVDtBQUVBLGNBQ0VyRSx3QkFBd0JDLHdCQUF3Qm9ELFlBQ2hEckQsd0JBQXdCQyxhQUFhb0UsT0FBTyxHQUM1QztBQUNBLG1CQUFPO1VBQ1Q7UUFDRjtBQUdBLFlBQUkxQyxnQkFBZ0IsQ0FBQ0csZ0JBQWdCdUMsT0FBTyxHQUFHO0FBQzdDLGdCQUFNZ0QsYUFBYTFJLGNBQWNtSSxXQUFXLEtBQUtBLFlBQVlPO0FBQzdELGdCQUFNdEIsYUFBYXJILGNBQWNvSSxXQUFXLEtBQUtBLFlBQVlmO0FBRTdELGNBQUlBLGNBQWNzQixZQUFZO0FBQzVCLGtCQUFNQyxhQUFhdkIsV0FBV3hRO0FBRTlCLHFCQUFTZ1MsSUFBSUQsYUFBYSxHQUFHQyxLQUFLLEdBQUcsRUFBRUEsR0FBRztBQUN4QyxvQkFBTUMsYUFBYWpKLFVBQVV3SCxXQUFXd0IsQ0FBQyxHQUFHLElBQUk7QUFDaERDLHlCQUFXQyxrQkFBa0JYLFlBQVlXLGtCQUFrQixLQUFLO0FBQ2hFSix5QkFBV3hCLGFBQWEyQixZQUFZL0ksZUFBZXFJLFdBQVcsQ0FBQztZQUNqRTtVQUNGO1FBQ0Y7QUFFQXJDLHFCQUFhcUMsV0FBVztBQUN4QixlQUFPO01BQ1Q7QUFHQSxVQUFJQSx1QkFBdUJwSixXQUFXLENBQUN5RyxxQkFBcUIyQyxXQUFXLEdBQUc7QUFDeEVyQyxxQkFBYXFDLFdBQVc7QUFDeEIsZUFBTztNQUNUO0FBR0EsV0FDR3pDLFlBQVksY0FDWEEsWUFBWSxhQUNaQSxZQUFZLGVBQ2Q1TSxXQUFXLCtCQUErQnFQLFlBQVluQixTQUFTLEdBQy9EO0FBQ0FsQixxQkFBYXFDLFdBQVc7QUFDeEIsZUFBTztNQUNUO0FBR0EsVUFBSTlGLHNCQUFzQjhGLFlBQVlySixhQUFhN0MsVUFBVVosTUFBTTtBQUVqRThFLGtCQUFVZ0ksWUFBWUw7QUFFdEIzUSxxQkFBYSxDQUFDb0UsZ0JBQWVDLFdBQVVDLFlBQVcsR0FBSXNOLFVBQWdCO0FBQ3BFNUksb0JBQVU3SCxjQUFjNkgsU0FBUzRJLE1BQU0sR0FBRztRQUM1QyxDQUFDO0FBRUQsWUFBSVosWUFBWUwsZ0JBQWdCM0gsU0FBUztBQUN2Q3hJLG9CQUFVOEcsVUFBVUksU0FBUztZQUFFL0UsU0FBU3FPLFlBQVl2SSxVQUFTO1VBQUUsQ0FBRTtBQUNqRXVJLHNCQUFZTCxjQUFjM0g7UUFDNUI7TUFDRjtBQUdBK0gsb0JBQWN0SCxNQUFNN0MsdUJBQXVCb0ssYUFBYSxJQUFJO0FBRTVELGFBQU87O0FBWVQsVUFBTWEsb0JBQW9CLFNBQXBCQSxtQkFDSkMsT0FDQUMsUUFDQTNPLE9BQWE7QUFHYixVQUFJc0gsWUFBWXFILE1BQU0sR0FBRztBQUN2QixlQUFPO01BQ1Q7QUFHQSxVQUNFckcsaUJBQ0NxRyxXQUFXLFFBQVFBLFdBQVcsWUFDOUIzTyxTQUFTaUMsYUFBWWpDLFNBQVNnSyxjQUMvQjtBQUNBLGVBQU87TUFDVDtBQU1BLFVBQ0VyQyxtQkFDQSxDQUFDTCxZQUFZcUgsTUFBTSxLQUNuQnBRLFdBQVc0QyxZQUFXd04sTUFBTSxFQUM1QjtlQUVTakgsbUJBQW1CbkosV0FBVzZDLFlBQVd1TixNQUFNLEVBQUc7ZUFJM0RwSCx1QkFBdUJFLDBCQUEwQjBDLFlBQ2pENUMsdUJBQXVCRSxlQUFla0gsUUFBUUQsS0FBSyxFQUNuRDtlQUdTLENBQUMvSCxhQUFhZ0ksTUFBTSxLQUFLckgsWUFBWXFILE1BQU0sR0FBRztBQUN2RDs7OztVQUlHVCxzQkFBc0JRLEtBQUssTUFDeEI1SCx3QkFBd0JDLHdCQUF3QnZJLFVBQ2hERCxXQUFXdUksd0JBQXdCQyxjQUFjMkgsS0FBSyxLQUNyRDVILHdCQUF3QkMsd0JBQXdCb0QsWUFDL0NyRCx3QkFBd0JDLGFBQWEySCxLQUFLLE9BQzVDNUgsd0JBQXdCSyw4QkFBOEIzSSxVQUN0REQsV0FBV3VJLHdCQUF3Qkssb0JBQW9Cd0gsTUFBTSxLQUM1RDdILHdCQUF3QkssOEJBQThCZ0QsWUFDckRyRCx3QkFBd0JLLG1CQUFtQndILFFBQVFELEtBQUs7O1VBRzdEQyxXQUFXLFFBQ1Y3SCx3QkFBd0JNLG1DQUN0Qk4sd0JBQXdCQyx3QkFBd0J2SSxVQUNoREQsV0FBV3VJLHdCQUF3QkMsY0FBYy9HLEtBQUssS0FDckQ4Ryx3QkFBd0JDLHdCQUF3Qm9ELFlBQy9DckQsd0JBQXdCQyxhQUFhL0csS0FBSztTQUNoRDthQUdLO0FBQ0wsaUJBQU87UUFDVDtNQUVGLFdBQVdnSixvQkFBb0IyRixNQUFNLEVBQUc7ZUFLdENwUSxXQUFXOEMsa0JBQWdCdEQsY0FBY2lDLE9BQU91QixrQkFBaUIsRUFBRSxDQUFDLEVBQ3BFO2dCQUtDb04sV0FBVyxTQUFTQSxXQUFXLGdCQUFnQkEsV0FBVyxXQUMzREQsVUFBVSxZQUNWelEsY0FBYytCLE9BQU8sT0FBTyxNQUFNLEtBQ2xDOEksY0FBYzRGLEtBQUssRUFDbkI7ZUFNQTlHLDJCQUNBLENBQUNySixXQUFXK0Msb0JBQW1CdkQsY0FBY2lDLE9BQU91QixrQkFBaUIsRUFBRSxDQUFDLEVBQ3hFO2VBR1N2QixPQUFPO0FBQ2hCLGVBQU87TUFDVCxNQUFPO0FBS1AsYUFBTzs7QUFXVCxVQUFNa08sd0JBQXdCLFNBQXhCQSx1QkFBa0MvQyxTQUFlO0FBQ3JELGFBQU9BLFlBQVksb0JBQW9CdE4sWUFBWXNOLFNBQVMxSixlQUFjOztBQWE1RSxVQUFNbU4sc0JBQXNCLFNBQXRCQSxxQkFBZ0NoQixhQUFvQjtBQUV4REQsb0JBQWN0SCxNQUFNM0MsMEJBQTBCa0ssYUFBYSxJQUFJO0FBRS9ELFlBQU07UUFBRUo7TUFBWSxJQUFHSTtBQUd2QixVQUFJLENBQUNKLGNBQWNILGFBQWFPLFdBQVcsR0FBRztBQUM1QztNQUNGO0FBRUEsWUFBTWlCLFlBQVk7UUFDaEJDLFVBQVU7UUFDVkMsV0FBVztRQUNYQyxVQUFVO1FBQ1ZDLG1CQUFtQnRJO1FBQ25CdUksZUFBZWpMOztBQUVqQixVQUFJM0UsSUFBSWtPLFdBQVduUjtBQUduQixhQUFPaUQsS0FBSztBQUNWLGNBQU02UCxPQUFPM0IsV0FBV2xPLENBQUM7QUFDekIsY0FBTTtVQUFFcU07VUFBTVA7VUFBY3BMLE9BQU8rTztRQUFTLElBQUtJO0FBQ2pELGNBQU1SLFNBQVN0UCxrQkFBa0JzTSxJQUFJO0FBRXJDLGNBQU15RCxZQUFZTDtBQUNsQixZQUFJL08sUUFBUTJMLFNBQVMsVUFBVXlELFlBQVlqUixXQUFXaVIsU0FBUztBQUcvRFAsa0JBQVVDLFdBQVdIO0FBQ3JCRSxrQkFBVUUsWUFBWS9PO0FBQ3RCNk8sa0JBQVVHLFdBQVc7QUFDckJILGtCQUFVSyxnQkFBZ0JqTDtBQUMxQjBKLHNCQUFjdEgsTUFBTXhDLHVCQUF1QitKLGFBQWFpQixTQUFTO0FBQ2pFN08sZ0JBQVE2TyxVQUFVRTtBQUtsQixZQUFJeEcseUJBQXlCb0csV0FBVyxRQUFRQSxXQUFXLFNBQVM7QUFFbEVqRCwyQkFBaUJDLE1BQU1pQyxXQUFXO0FBR2xDNU4sa0JBQVF3SSw4QkFBOEJ4STtRQUN4QztBQUdBLFlBQ0UrSCxnQkFDQXhKLFdBQ0Usc0ZBQ0F5QixLQUFLLEdBRVA7QUFDQTBMLDJCQUFpQkMsTUFBTWlDLFdBQVc7QUFDbEM7UUFDRjtBQUdBLFlBQUllLFdBQVcsbUJBQW1COVEsWUFBWW1DLE9BQU8sTUFBTSxHQUFHO0FBQzVEMEwsMkJBQWlCQyxNQUFNaUMsV0FBVztBQUNsQztRQUNGO0FBR0EsWUFBSWlCLFVBQVVLLGVBQWU7QUFDM0I7UUFDRjtBQUdBLFlBQUksQ0FBQ0wsVUFBVUcsVUFBVTtBQUN2QnRELDJCQUFpQkMsTUFBTWlDLFdBQVc7QUFDbEM7UUFDRjtBQUdBLFlBQUksQ0FBQy9GLDRCQUE0QnRKLFdBQVcsUUFBUXlCLEtBQUssR0FBRztBQUMxRDBMLDJCQUFpQkMsTUFBTWlDLFdBQVc7QUFDbEM7UUFDRjtBQUdBLFlBQUk5RixvQkFBb0I7QUFDdEJsTCx1QkFBYSxDQUFDb0UsZ0JBQWVDLFdBQVVDLFlBQVcsR0FBSXNOLFVBQWdCO0FBQ3BFeE8sb0JBQVFqQyxjQUFjaUMsT0FBT3dPLE1BQU0sR0FBRztVQUN4QyxDQUFDO1FBQ0g7QUFHQSxjQUFNRSxRQUFRclAsa0JBQWtCdU8sWUFBWU4sUUFBUTtBQUNwRCxZQUFJLENBQUNtQixrQkFBa0JDLE9BQU9DLFFBQVEzTyxLQUFLLEdBQUc7QUFDNUMwTCwyQkFBaUJDLE1BQU1pQyxXQUFXO0FBQ2xDO1FBQ0Y7QUFHQSxZQUNFOUgsc0JBQ0EsT0FBT3RELGlCQUFpQixZQUN4QixPQUFPQSxhQUFhNk0scUJBQXFCLFlBQ3pDO0FBQ0EsY0FBSWpFLGFBQWM7ZUFFWDtBQUNMLG9CQUFRNUksYUFBYTZNLGlCQUFpQlgsT0FBT0MsTUFBTSxHQUFDO2NBQ2xELEtBQUssZUFBZTtBQUNsQjNPLHdCQUFROEYsbUJBQW1COUMsV0FBV2hELEtBQUs7QUFDM0M7Y0FDRjtjQUVBLEtBQUssb0JBQW9CO0FBQ3ZCQSx3QkFBUThGLG1CQUFtQjdDLGdCQUFnQmpELEtBQUs7QUFDaEQ7Y0FDRjtZQUtGO1VBQ0Y7UUFDRjtBQUdBLFlBQUlBLFVBQVVvUCxXQUFXO0FBQ3ZCLGNBQUk7QUFDRixnQkFBSWhFLGNBQWM7QUFDaEJ3QywwQkFBWTBCLGVBQWVsRSxjQUFjTyxNQUFNM0wsS0FBSztZQUN0RCxPQUFPO0FBRUw0TiwwQkFBWTdCLGFBQWFKLE1BQU0zTCxLQUFLO1lBQ3RDO0FBRUEsZ0JBQUlxTixhQUFhTyxXQUFXLEdBQUc7QUFDN0JyQywyQkFBYXFDLFdBQVc7WUFDMUIsT0FBTztBQUNMMVEsdUJBQVNnSCxVQUFVSSxPQUFPO1lBQzVCO21CQUNPbkIsSUFBRztBQUNWdUksNkJBQWlCQyxNQUFNaUMsV0FBVztVQUNwQztRQUNGO01BQ0Y7QUFHQUQsb0JBQWN0SCxNQUFNOUMseUJBQXlCcUssYUFBYSxJQUFJOztBQVFoRSxVQUFNMkIscUJBQXFCLFNBQXJCQSxvQkFBK0JDLFVBQTBCO0FBQzdELFVBQUlDLGFBQWE7QUFDakIsWUFBTUMsaUJBQWlCM0Msb0JBQW9CeUMsUUFBUTtBQUduRDdCLG9CQUFjdEgsTUFBTXpDLHlCQUF5QjRMLFVBQVUsSUFBSTtBQUUzRCxhQUFRQyxhQUFhQyxlQUFlQyxTQUFRLEdBQUs7QUFFL0NoQyxzQkFBY3RILE1BQU10Qyx3QkFBd0IwTCxZQUFZLElBQUk7QUFHNUQxQiwwQkFBa0IwQixVQUFVO0FBRzVCYiw0QkFBb0JhLFVBQVU7QUFHOUIsWUFBSUEsV0FBVzdKLG1CQUFtQmhCLGtCQUFrQjtBQUNsRDJLLFVBQUFBLG9CQUFtQkUsV0FBVzdKLE9BQU87UUFDdkM7TUFDRjtBQUdBK0gsb0JBQWN0SCxNQUFNNUMsd0JBQXdCK0wsVUFBVSxJQUFJOztBQUk1RHRMLGNBQVUwTCxXQUFXLFNBQVUzRCxPQUFlO0FBQUEsVUFBUjVCLE1BQUdqTyxVQUFBQyxTQUFBLEtBQUFELFVBQUEsQ0FBQSxNQUFBNkgsU0FBQTdILFVBQUEsQ0FBQSxJQUFHLENBQUE7QUFDMUMsVUFBSXNRLE9BQU87QUFDWCxVQUFJbUQsZUFBZTtBQUNuQixVQUFJakMsY0FBYztBQUNsQixVQUFJa0MsYUFBYTtBQUlqQnhHLHVCQUFpQixDQUFDMkM7QUFDbEIsVUFBSTNDLGdCQUFnQjtBQUNsQjJDLGdCQUFRO01BQ1Y7QUFHQSxVQUFJLE9BQU9BLFVBQVUsWUFBWSxDQUFDeUIsUUFBUXpCLEtBQUssR0FBRztBQUNoRCxZQUFJLE9BQU9BLE1BQU1yTyxhQUFhLFlBQVk7QUFDeENxTyxrQkFBUUEsTUFBTXJPLFNBQVE7QUFDdEIsY0FBSSxPQUFPcU8sVUFBVSxVQUFVO0FBQzdCLGtCQUFNdk4sZ0JBQWdCLGlDQUFpQztVQUN6RDtRQUNGLE9BQU87QUFDTCxnQkFBTUEsZ0JBQWdCLDRCQUE0QjtRQUNwRDtNQUNGO0FBR0EsVUFBSSxDQUFDd0YsVUFBVU8sYUFBYTtBQUMxQixlQUFPd0g7TUFDVDtBQUdBLFVBQUksQ0FBQ2hFLFlBQVk7QUFDZm1DLHFCQUFhQyxHQUFHO01BQ2xCO0FBR0FuRyxnQkFBVUksVUFBVSxDQUFBO0FBR3BCLFVBQUksT0FBTzJILFVBQVUsVUFBVTtBQUM3QnZELG1CQUFXO01BQ2I7QUFFQSxVQUFJQSxVQUFVO0FBRVosWUFBS3VELE1BQWVxQixVQUFVO0FBQzVCLGdCQUFNbkMsVUFBVTlMLGtCQUFtQjRNLE1BQWVxQixRQUFRO0FBQzFELGNBQUksQ0FBQzlHLGFBQWEyRSxPQUFPLEtBQUs5RCxZQUFZOEQsT0FBTyxHQUFHO0FBQ2xELGtCQUFNek0sZ0JBQ0oseURBQXlEO1VBRTdEO1FBQ0Y7TUFDRixXQUFXdU4saUJBQWlCbkgsTUFBTTtBQUdoQzRILGVBQU9WLGNBQWMsU0FBUztBQUM5QjZELHVCQUFlbkQsS0FBSzdHLGNBQWNPLFdBQVc2RixPQUFPLElBQUk7QUFDeEQsWUFDRTRELGFBQWF0TCxhQUFhN0MsVUFBVW5DLFdBQ3BDc1EsYUFBYXZDLGFBQWEsUUFDMUI7QUFFQVosaUJBQU9tRDtRQUNULFdBQVdBLGFBQWF2QyxhQUFhLFFBQVE7QUFDM0NaLGlCQUFPbUQ7UUFDVCxPQUFPO0FBRUxuRCxlQUFLcUQsWUFBWUYsWUFBWTtRQUMvQjtNQUNGLE9BQU87QUFFTCxZQUNFLENBQUMxSCxjQUNELENBQUNMLHNCQUNELENBQUNFO1FBRURpRSxNQUFNL04sUUFBUSxHQUFHLE1BQU0sSUFDdkI7QUFDQSxpQkFBTzRILHNCQUFzQnVDLHNCQUN6QnZDLG1CQUFtQjlDLFdBQVdpSixLQUFLLElBQ25DQTtRQUNOO0FBR0FTLGVBQU9WLGNBQWNDLEtBQUs7QUFHMUIsWUFBSSxDQUFDUyxNQUFNO0FBQ1QsaUJBQU92RSxhQUFhLE9BQU9FLHNCQUFzQnRDLFlBQVk7UUFDL0Q7TUFDRjtBQUdBLFVBQUkyRyxRQUFReEUsWUFBWTtBQUN0QnFELHFCQUFhbUIsS0FBS3NELFVBQVU7TUFDOUI7QUFHQSxZQUFNQyxlQUFlbEQsb0JBQW9CckUsV0FBV3VELFFBQVFTLElBQUk7QUFHaEUsYUFBUWtCLGNBQWNxQyxhQUFhTixTQUFRLEdBQUs7QUFFOUM1QiwwQkFBa0JILFdBQVc7QUFHN0JnQiw0QkFBb0JoQixXQUFXO0FBRy9CLFlBQUlBLFlBQVloSSxtQkFBbUJoQixrQkFBa0I7QUFDbkQySyw2QkFBbUIzQixZQUFZaEksT0FBTztRQUN4QztNQUNGO0FBR0EsVUFBSThDLFVBQVU7QUFDWixlQUFPdUQ7TUFDVDtBQUdBLFVBQUk5RCxZQUFZO0FBQ2QsWUFBSUMscUJBQXFCO0FBQ3ZCMEgsdUJBQWE1Six1QkFBdUI0RyxLQUFLSixLQUFLN0csYUFBYTtBQUUzRCxpQkFBTzZHLEtBQUtzRCxZQUFZO0FBRXRCRix1QkFBV0MsWUFBWXJELEtBQUtzRCxVQUFVO1VBQ3hDO1FBQ0YsT0FBTztBQUNMRix1QkFBYXBEO1FBQ2Y7QUFFQSxZQUFJL0YsYUFBYXVKLGNBQWN2SixhQUFhd0osZ0JBQWdCO0FBUTFETCx1QkFBYTFKLFdBQVcwRyxLQUFLcEksa0JBQWtCb0wsWUFBWSxJQUFJO1FBQ2pFO0FBRUEsZUFBT0E7TUFDVDtBQUVBLFVBQUlNLGlCQUFpQnBJLGlCQUFpQjBFLEtBQUsyRCxZQUFZM0QsS0FBS0Q7QUFHNUQsVUFDRXpFLGtCQUNBeEIsYUFBYSxVQUFVLEtBQ3ZCa0csS0FBSzdHLGlCQUNMNkcsS0FBSzdHLGNBQWN5SyxXQUNuQjVELEtBQUs3RyxjQUFjeUssUUFBUTNFLFFBQzNCcE4sV0FBV2dJLGNBQTBCbUcsS0FBSzdHLGNBQWN5SyxRQUFRM0UsSUFBSSxHQUNwRTtBQUNBeUUseUJBQ0UsZUFBZTFELEtBQUs3RyxjQUFjeUssUUFBUTNFLE9BQU8sUUFBUXlFO01BQzdEO0FBR0EsVUFBSXRJLG9CQUFvQjtBQUN0QmxMLHFCQUFhLENBQUNvRSxnQkFBZUMsV0FBVUMsWUFBVyxHQUFJc04sVUFBZ0I7QUFDcEU0QiwyQkFBaUJyUyxjQUFjcVMsZ0JBQWdCNUIsTUFBTSxHQUFHO1FBQzFELENBQUM7TUFDSDtBQUVBLGFBQU8xSSxzQkFBc0J1QyxzQkFDekJ2QyxtQkFBbUI5QyxXQUFXb04sY0FBYyxJQUM1Q0E7O0FBR05sTSxjQUFVcU0sWUFBWSxXQUFrQjtBQUFBLFVBQVJsRyxNQUFHak8sVUFBQUMsU0FBQSxLQUFBRCxVQUFBLENBQUEsTUFBQTZILFNBQUE3SCxVQUFBLENBQUEsSUFBRyxDQUFBO0FBQ3BDZ08sbUJBQWFDLEdBQUc7QUFDaEJwQyxtQkFBYTs7QUFHZi9ELGNBQVVzTSxjQUFjLFdBQUE7QUFDdEJ6RyxlQUFTO0FBQ1Q5QixtQkFBYTs7QUFHZi9ELGNBQVV1TSxtQkFBbUIsU0FBVUMsS0FBS3ZCLE1BQU1uUCxPQUFLO0FBRXJELFVBQUksQ0FBQytKLFFBQVE7QUFDWEsscUJBQWEsQ0FBQSxDQUFFO01BQ2pCO0FBRUEsWUFBTXNFLFFBQVFyUCxrQkFBa0JxUixHQUFHO0FBQ25DLFlBQU0vQixTQUFTdFAsa0JBQWtCOFAsSUFBSTtBQUNyQyxhQUFPVixrQkFBa0JDLE9BQU9DLFFBQVEzTyxLQUFLOztBQUcvQ2tFLGNBQVV5TSxVQUFVLFNBQ2xCQyxZQUNBQyxjQUEwQjtBQUUxQixVQUFJLE9BQU9BLGlCQUFpQixZQUFZO0FBQ3RDO01BQ0Y7QUFFQXpULGdCQUFVaUosTUFBTXVLLFVBQVUsR0FBR0MsWUFBWTs7QUFHM0MzTSxjQUFVNE0sYUFBYSxTQUNyQkYsWUFDQUMsY0FBMEI7QUFFMUIsVUFBSUEsaUJBQWlCNU0sUUFBVztBQUM5QixjQUFNdkUsUUFBUTFDLGlCQUFpQnFKLE1BQU11SyxVQUFVLEdBQUdDLFlBQVk7QUFFOUQsZUFBT25SLFVBQVUsS0FDYnVFLFNBQ0EzRyxZQUFZK0ksTUFBTXVLLFVBQVUsR0FBR2xSLE9BQU8sQ0FBQyxFQUFFLENBQUM7TUFDaEQ7QUFFQSxhQUFPeEMsU0FBU21KLE1BQU11SyxVQUFVLENBQUM7O0FBR25DMU0sY0FBVTZNLGNBQWMsU0FBVUgsWUFBMEI7QUFDMUR2SyxZQUFNdUssVUFBVSxJQUFJLENBQUE7O0FBR3RCMU0sY0FBVThNLGlCQUFpQixXQUFBO0FBQ3pCM0ssY0FBUS9DLGdCQUFlOztBQUd6QixXQUFPWTtFQUNUO0FBRUEsTUFBQSxTQUFlRixnQkFBZTs7O0FoQnRyRDlCLE1BQU1pTixRQUFNLFVBQVUsV0FBVztBQVdqQyxXQUFTLGVBQWVDLE9BQU07QUFDNUIsVUFBTSxNQUFNLEVBQU8sTUFBTUEsT0FBTSxFQUFFLEtBQUssTUFBTSxRQUFRLEtBQUssQ0FBQztBQUMxRCxXQUFPLE9BQVUsU0FBUyxLQUFLLEVBQUUsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQUEsRUFDM0Q7QUFNQSxpQkFBZUMsa0JBQWlCO0FBQzlCLFVBQU0sVUFBVSxTQUFTLGVBQWUsa0JBQWtCO0FBQzFELFFBQUk7QUFDRixZQUFNLE1BQU0sTUFBTSxNQUFNLGFBQWE7QUFDckMsWUFBTSxPQUFPLE1BQU0sSUFBSSxLQUFLO0FBRTVCLFVBQUksS0FBSyxzQkFBc0I7QUFDN0IsY0FBTSxVQUFVLEtBQUs7QUFDckIsY0FBTSxlQUFlLEtBQUssaUJBQWlCO0FBQzNDLGNBQU0sU0FBUyxLQUFLLFdBQVc7QUFDL0IsY0FBTSxZQUFZLGVBQ2QsV0FBVyxZQUFZLElBQ3ZCO0FBQ0osY0FBTSxlQUFnQixnQkFBZ0IsU0FDbEMsWUFBWSxXQUFXLE1BQU0sQ0FBQywyRkFBMkYsU0FBUyxTQUNsSTtBQUNKLFlBQUlDLFFBQU8sU0FBUyxlQUFlO0FBQ25DLFlBQUksUUFBUTtBQUNWLFVBQUFBLFNBQVEsb0pBQW9KLFdBQVcsTUFBTSxDQUFDLGNBQWMsV0FBVyxNQUFNLENBQUMsMkZBQTJGLFdBQVcsTUFBTSxDQUFDO0FBQUEsUUFDN1Q7QUFFQSxRQUFBQSxTQUFRLDRHQUE0RyxlQUFlLE9BQU8sSUFBSTtBQUU5SSxjQUFNLGFBQWEsS0FBSyxVQUFVQyxRQUFPLE9BQ3JDLGdIQUNBO0FBQ0osUUFBQUQsU0FBUSxtQ0FBbUMsYUFBYTtBQUN4RCxnQkFBUSxZQUFZQTtBQUFBLE1BQ3RCLE9BQU87QUFDTCxjQUFNRSxrQkFBaUI7QUFDdkI7QUFBQSxNQUNGO0FBQUEsSUFDRixTQUFTLE9BQU87QUFDZCxNQUFBTCxNQUFJLE1BQU0sa0NBQWtDLEtBQUs7QUFDakQsWUFBTUssa0JBQWlCO0FBQUEsSUFDekI7QUFBQSxFQUNGO0FBTUEsaUJBQWVBLG9CQUFtQjtBQUNoQyxRQUFJQyxjQUFhLGNBQWMsTUFBTSxPQUFPO0FBQzFDLGdCQUFVLEtBQUs7QUFBQSxJQUNqQjtBQUVBLFVBQU0sVUFBVSxTQUFTLGVBQWUsa0JBQWtCO0FBQzFELFlBQVEsWUFBWTtBQUVwQixZQUFRLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzRnBCLDBCQUFzQjtBQUFBLEVBQ3hCO0FBTUEsV0FBUyxrQkFBa0IsUUFBUTtBQUNqQyxhQUFTLGlCQUFpQixZQUFZLEVBQUUsUUFBUSxTQUFPLElBQUksVUFBVSxPQUFPLFFBQVEsQ0FBQztBQUNyRixVQUFNLE9BQU8sVUFBVSxJQUFJLFFBQVE7QUFFbkMsYUFBUyxpQkFBaUIsZUFBZSxFQUFFLFFBQVEsV0FBUyxNQUFNLFVBQVUsT0FBTyxRQUFRLENBQUM7QUFDNUYsYUFBUyxlQUFlLFNBQVMsU0FBUyxFQUFFLFVBQVUsSUFBSSxRQUFRO0FBQUEsRUFDcEU7QUFNQSxNQUFJLHFCQUFxQjtBQUV6QixXQUFTLGVBQWVDLFFBQU87QUFDN0IsSUFBQUEsT0FBTSxlQUFlO0FBQ3JCLGFBQVMsZUFBZSxnQkFBZ0IsRUFBRSxVQUFVLE9BQU8sV0FBVztBQUN0RSxVQUFNLE9BQU9BLE9BQU0sYUFBYSxNQUFNLENBQUM7QUFDdkMsUUFBSSxLQUFNLG9CQUFtQixJQUFJO0FBQUEsRUFDbkM7QUFFQSxXQUFTLG1CQUFtQixNQUFNO0FBQ2hDLFFBQUksQ0FBQyxLQUFNO0FBRVgsVUFBTSxVQUFXLEtBQUssUUFBUSxPQUFPLE9BQU8sUUFBUSxDQUFDO0FBQ3JELFVBQU0sVUFBVSxLQUFLLE9BQU8sT0FBTyxPQUFPLEdBQUcsTUFBTSxRQUFRLElBQUksS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDLENBQUM7QUFDM0YsVUFBTSxRQUFVLFNBQVMsZUFBZSxtQkFBbUI7QUFDM0QsVUFBTSxTQUFVLFNBQVMsZUFBZSxtQkFBbUI7QUFFM0QsVUFBTSxlQUFlO0FBQUEsTUFBQztBQUFBLE1BQW1CO0FBQUEsTUFDdkM7QUFBQSxNQUNBO0FBQUEsTUFBYztBQUFBLElBQVc7QUFDM0IsVUFBTSxjQUFlLENBQUMsUUFBUSxRQUFRLFNBQVMsUUFBUSxTQUFTLE1BQU07QUFDdEUsVUFBTSxNQUFNLE9BQU8sS0FBSyxLQUFLLE1BQU0sR0FBRyxFQUFFLElBQUksS0FBSyxJQUFJLFlBQVk7QUFDakUsVUFBTSxTQUFTLGFBQWEsS0FBSyxDQUFBQyxPQUFLLEtBQUssS0FBSyxXQUFXQSxFQUFDLENBQUMsS0FBSyxLQUFLLFNBQVM7QUFDaEYsVUFBTSxRQUFTLFlBQVksU0FBUyxHQUFHO0FBQ3ZDLFFBQUksQ0FBQyxVQUFVLENBQUMsT0FBTztBQUNyQixZQUFNLGNBQWdCLDBCQUEwQixPQUFPLEtBQUssSUFBSTtBQUNoRSxZQUFNLE1BQU0sVUFBVTtBQUN0QixVQUFJLE9BQVEsUUFBTyxNQUFNLFVBQVU7QUFDbkMsZUFBUyxlQUFlLGlCQUFpQixFQUFFLE1BQU0sVUFBVTtBQUMzRDtBQUFBLElBQ0Y7QUFFQSxRQUFJLEtBQUssT0FBTyxLQUFLLE9BQU8sTUFBTTtBQUNoQyxZQUFNLGNBQWdCLHNCQUFzQixNQUFNO0FBQ2xELFlBQU0sTUFBTSxVQUFVO0FBQ3RCLFVBQUksT0FBUSxRQUFPLE1BQU0sVUFBVTtBQUNuQyxlQUFTLGVBQWUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVO0FBQzNEO0FBQUEsSUFDRjtBQUVBLHlCQUFxQjtBQUNyQixhQUFTLGVBQWUsb0JBQW9CLEVBQUUsY0FBZSxLQUFLO0FBQ2xFLGFBQVMsZUFBZSxvQkFBb0IsRUFBRSxjQUFlLElBQUksT0FBTztBQUN4RSxhQUFTLGVBQWUsb0JBQW9CLEVBQUUsTUFBTSxVQUFVO0FBQzlELGFBQVMsZUFBZSxpQkFBaUIsRUFBRSxNQUFNLFVBQWE7QUFDOUQsVUFBTSxNQUFNLFVBQVU7QUFFdEIsUUFBSSxRQUFRO0FBQ1YsVUFBSSxLQUFLLE9BQU8sSUFBSSxPQUFPLE1BQU07QUFDL0IsZUFBTyxjQUFnQixzQkFBaUIsTUFBTTtBQUM5QyxlQUFPLE1BQU0sVUFBVTtBQUFBLE1BQ3pCLE9BQU87QUFDTCxlQUFPLE1BQU0sVUFBVTtBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLG9CQUFvQjtBQUMzQix5QkFBcUI7QUFDckIsYUFBUyxlQUFlLGdCQUFnQixFQUFFLFFBQVE7QUFDbEQsYUFBUyxlQUFlLG9CQUFvQixFQUFFLE1BQU0sVUFBVTtBQUM5RCxhQUFTLGVBQWUsaUJBQWlCLEVBQUUsTUFBTSxVQUFZO0FBQzdELGFBQVMsZUFBZSxtQkFBbUIsRUFBRSxNQUFNLFVBQVU7QUFDN0QsVUFBTSxPQUFPLFNBQVMsZUFBZSxtQkFBbUI7QUFDeEQsUUFBSSxLQUFNLE1BQUssTUFBTSxVQUFVO0FBQUEsRUFDakM7QUFFQSxpQkFBZSxnQkFBZ0I7QUFDN0IsUUFBSSxDQUFDLG1CQUFvQjtBQUV6QixVQUFNLFFBQWEsU0FBUyxlQUFlLG1CQUFtQjtBQUM5RCxVQUFNLFVBQWEsU0FBUyxlQUFlLHFCQUFxQjtBQUNoRSxVQUFNLFlBQWEsU0FBUyxlQUFlLGlCQUFpQjtBQUU1RCxVQUFNLE1BQU0sVUFBYTtBQUN6QixZQUFRLE1BQU0sVUFBVztBQUN6QixjQUFVLFdBQWU7QUFFekIsUUFBSTtBQUNGLFlBQU0sV0FBVyxJQUFJLFNBQVM7QUFDOUIsZUFBUyxPQUFPLFFBQVEsa0JBQWtCO0FBRTFDLFlBQU0sT0FBTyxNQUFNLE1BQU0sb0JBQW9CLEVBQUUsUUFBUSxRQUFRLE1BQU0sU0FBUyxDQUFDO0FBQy9FLFlBQU0sT0FBTyxNQUFNLEtBQUssS0FBSztBQUU3QixVQUFJLENBQUMsS0FBSyxNQUFNLEtBQUssT0FBTztBQUMxQixjQUFNLElBQUksTUFBTSxLQUFLLFdBQVcsS0FBSyxTQUFTLGdCQUFnQixLQUFLLE1BQU0sRUFBRTtBQUFBLE1BQzdFO0FBRUEsWUFBTSxVQUFVLE1BQU0sTUFBTSxZQUFZO0FBQUEsUUFDdEMsUUFBUTtBQUFBLFFBQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxRQUM5QyxNQUFNLEtBQUssVUFBVSxFQUFFLFVBQVUsS0FBSyxLQUFLLENBQUM7QUFBQSxNQUM5QyxDQUFDO0FBQ0QsWUFBTSxVQUFVLE1BQU0sUUFBUSxLQUFLO0FBQ25DLFVBQUksQ0FBQyxRQUFRLEdBQUksT0FBTSxJQUFJLE1BQU0sUUFBUSxTQUFTLG1DQUFtQztBQUVyRixVQUFJLFFBQVEsT0FBTztBQUNqQixzQkFBYyxVQUFVLFlBQVksUUFBUSxLQUFLO0FBQUEsTUFDbkQsT0FBTztBQUNMLFFBQUFGLGNBQWEsV0FBVyxPQUFPLEtBQUssSUFBSTtBQUN4QyxvQkFBWTtBQUNaLHNCQUFjLGFBQWEsdUNBQWtDLEtBQUssUUFBUSxNQUFNLEtBQUssZUFBZSxlQUFlLENBQUMsVUFBVTtBQUM5SCxjQUFNLFdBQVc7QUFBQSxNQUNuQjtBQUFBLElBQ0YsU0FBUyxLQUFLO0FBQ1osWUFBTSxjQUFnQixJQUFJO0FBQzFCLFlBQU0sTUFBTSxVQUFVO0FBQUEsSUFDeEIsVUFBRTtBQUNBLGNBQVEsTUFBTSxVQUFVO0FBQ3hCLGdCQUFVLFdBQWM7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFNQSxNQUFNLGtCQUFrQjtBQUV4QixXQUFTLHdCQUF3QjtBQUMvQixVQUFNLE9BQU8sU0FBUyxlQUFlLGdCQUFnQixHQUFHLFNBQVMsSUFBSSxLQUFLO0FBQzFFLFVBQU0sVUFBVSxTQUFTLGVBQWUsa0JBQWtCO0FBQzFELFFBQUksQ0FBQyxRQUFTO0FBQ2QsVUFBTSxJQUFJLElBQUk7QUFDZCxRQUFJLE1BQU0sR0FBRztBQUNYLGNBQVEsTUFBTSxRQUFRO0FBQ3RCLGNBQVEsY0FBYywyQ0FBMkMsZUFBZTtBQUFBLElBQ2xGLFdBQVcsSUFBSSxpQkFBaUI7QUFDOUIsY0FBUSxNQUFNLFFBQVE7QUFDdEIsY0FBUSxjQUFjLEdBQUcsQ0FBQyxNQUFNLGVBQWUsK0NBQTBDLGVBQWU7QUFBQSxJQUMxRyxPQUFPO0FBQ0wsY0FBUSxNQUFNLFFBQVE7QUFDdEIsY0FBUSxjQUFjLEdBQUcsQ0FBQyxNQUFNLGVBQWU7QUFBQSxJQUNqRDtBQUFBLEVBQ0Y7QUFFQSxXQUFTLHNCQUFzQjtBQUM3QixVQUFNLE9BQU8sU0FBUyxlQUFlLGdCQUFnQixHQUFHLFNBQVMsSUFBSSxLQUFLO0FBQzFFLDBCQUFzQjtBQUN0QixRQUFJLElBQUksU0FBUyxLQUFLLElBQUksU0FBUyxpQkFBaUI7QUFDbEQsc0JBQWdCLGtCQUFrQixlQUFlLDZEQUF3RCxlQUFlLGNBQWM7QUFBQSxJQUN4SSxPQUFPO0FBQ0wsdUJBQWlCLGtCQUFrQixhQUFhO0FBQUEsSUFDbEQ7QUFBQSxFQUNGO0FBRUEsaUJBQWUsZ0JBQWdCO0FBbUI3QixVQUFNLFlBQVksU0FBUyxlQUFlLGdCQUFnQjtBQUMxRCxVQUFNLFVBQVUsVUFBVSxNQUFNLEtBQUs7QUFFckMsUUFBSSxDQUFDLFNBQVM7QUFDWixzQkFBZ0Isa0JBQWtCLGVBQWUsbURBQW1EO0FBQ3BHLGdCQUFVLE1BQU07QUFDaEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxRQUFRLFNBQVMsaUJBQWlCO0FBQ3BDLHNCQUFnQixrQkFBa0IsZUFBZSw2REFBd0QsZUFBZSxjQUFjO0FBQ3RJLGdCQUFVLE1BQU07QUFDaEI7QUFBQSxJQUNGO0FBQ0EscUJBQWlCLGtCQUFrQixhQUFhO0FBRWhELGVBQVcsTUFBTSxpQ0FBNEI7QUFDN0Msa0JBQWMsUUFBUSwrQkFBK0I7QUFFckQsUUFBSTtBQUNGLFlBQU0sV0FBVyxNQUFNLE1BQU0sWUFBWTtBQUFBLFFBQ3ZDLFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxVQUFVLFFBQVEsQ0FBQztBQUFBLE1BQzVDLENBQUM7QUFFRCxZQUFNLE9BQU8sTUFBTSxTQUFTLEtBQUs7QUFFakMsVUFBSSxLQUFLLE9BQU87QUFDZCx3QkFBZ0Isa0JBQWtCLGVBQWUsS0FBSyxLQUFLO0FBQzNELDJCQUFtQixtQkFBYyxLQUFLLE9BQU8sYUFBYTtBQUFBLE1BQzVELE9BQU87QUFDTCx5QkFBaUIsa0JBQWtCLGFBQWE7QUFDaEQsUUFBQUEsY0FBYSxXQUFXLE9BQU8sT0FBTztBQUN0QyxvQkFBWTtBQUNaLHNCQUFjLGFBQWEsZ0RBQTJDO0FBRXRFLFlBQUksT0FBTyx5QkFBeUIsWUFBWTtBQUM5QywrQkFBcUIsS0FBSztBQUFBLFFBQzVCO0FBQ0Esa0JBQVUsS0FBSztBQUNmLG1CQUFXLEtBQUs7QUFDaEIsY0FBTSxXQUFXO0FBQ2pCO0FBQUEsTUFDRjtBQUFBLElBQ0YsU0FBUyxPQUFPO0FBQ2QsTUFBQU4sTUFBSSxNQUFNLHlCQUF5QixLQUFLO0FBQ3hDLHlCQUFtQiw4Q0FBeUMsTUFBTSxTQUFTLGFBQWE7QUFBQSxJQUMxRjtBQUVBLGVBQVcsS0FBSztBQUFBLEVBQ2xCO0FBTUEsV0FBUyxvQkFBb0I7QUFDM0IsVUFBTSxPQUFPLFNBQVMsZUFBZSxlQUFlLEdBQUcsU0FBUyxJQUFJLEtBQUs7QUFDekUsUUFBSSxDQUFDLEtBQUs7QUFBRSx1QkFBaUIsaUJBQWlCLFdBQVc7QUFBRztBQUFBLElBQVE7QUFDcEUsUUFBSTtBQUNGLFlBQU1TLEtBQUksSUFBSSxJQUFJLEdBQUc7QUFDckIsVUFBSSxDQUFDLENBQUMsU0FBUyxRQUFRLEVBQUUsU0FBU0EsR0FBRSxRQUFRLEVBQUcsT0FBTSxJQUFJLE1BQU0seUJBQXlCO0FBQ3hGLHVCQUFpQixpQkFBaUIsV0FBVztBQUFBLElBQy9DLFFBQVE7QUFDTixzQkFBZ0IsaUJBQWlCLGFBQWEsNERBQTREO0FBQUEsSUFDNUc7QUFBQSxFQUNGO0FBRUEsaUJBQWUsa0JBQWtCO0FBQy9CLFVBQU0sV0FBVyxTQUFTLGVBQWUsZUFBZTtBQUN4RCxVQUFNLE1BQU0sU0FBUyxNQUFNLEtBQUs7QUFFaEMsUUFBSSxDQUFDLEtBQUs7QUFDUixzQkFBZ0IsaUJBQWlCLGFBQWEscUNBQXFDO0FBQ25GLGVBQVMsTUFBTTtBQUNmO0FBQUEsSUFDRjtBQUNBLFFBQUk7QUFDRixZQUFNQSxLQUFJLElBQUksSUFBSSxHQUFHO0FBQ3JCLFVBQUksQ0FBQyxDQUFDLFNBQVMsUUFBUSxFQUFFLFNBQVNBLEdBQUUsUUFBUSxFQUFHLE9BQU0sSUFBSSxNQUFNO0FBQy9ELHVCQUFpQixpQkFBaUIsV0FBVztBQUFBLElBQy9DLFFBQVE7QUFDTixzQkFBZ0IsaUJBQWlCLGFBQWEsNERBQTREO0FBQzFHLGVBQVMsTUFBTTtBQUNmO0FBQUEsSUFDRjtBQUVBLGVBQVcsTUFBTSw2QkFBd0I7QUFDekMsa0JBQWMsUUFBUSxzQ0FBc0MsR0FBRyxFQUFFO0FBRWpFLFFBQUk7QUFDRixZQUFNLFdBQVcsTUFBTSxNQUFNLHNCQUFzQjtBQUFBLFFBQ2pELFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxJQUFTLENBQUM7QUFBQSxNQUNuQyxDQUFDO0FBRUQsWUFBTSxPQUFPLE1BQU0sU0FBUyxLQUFLO0FBRWpDLFVBQUksS0FBSyxPQUFPO0FBQ2QsWUFBSSxlQUFlLEtBQUs7QUFDeEIsWUFBSSxjQUFjLEtBQUssV0FBVztBQUVsQyxZQUFJLEtBQUssZ0JBQWdCO0FBQ3ZCLHlCQUFlLEdBQUcsS0FBSyxTQUFTO0FBQ2hDLHdCQUFjLEtBQUs7QUFFbkIsY0FBSSxLQUFLLGdCQUFnQixLQUFLLGFBQWEsU0FBUyxHQUFHO0FBQ3JELDJCQUFlLDBCQUEwQixLQUFLLGFBQWEsSUFBSSxDQUFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEtBQUssSUFBSTtBQUFBLFVBQzVHO0FBRUEsaUNBQXVCLEtBQUssV0FBVyxLQUFLLFNBQVMsS0FBSyxZQUFZO0FBQUEsUUFDeEUsV0FBVyxLQUFLLGNBQWM7QUFDNUIseUJBQWUsK0JBQStCLEtBQUssYUFBYSxJQUFJLENBQUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsS0FBSyxJQUFJO0FBQy9HLHlCQUFlLG1CQUFtQixHQUFHLFlBQVk7QUFBQTtBQUFBLEVBQU8sV0FBVyxFQUFFO0FBQUEsUUFDdkUsT0FBTztBQUNMLDBCQUFnQixpQkFBaUIsYUFBYSxZQUFZO0FBQzFELHlCQUFlLFNBQVMsR0FBRyxZQUFZLEdBQUcsY0FBYyxTQUFTLGNBQWMsRUFBRSxFQUFFO0FBQUEsUUFDckY7QUFFQSxzQkFBYyxVQUFVLFVBQUssWUFBWSxLQUFLLEtBQUssV0FBVywwQkFBMEIsRUFBRTtBQUFBLE1BQzVGLE9BQU87QUFDTCxRQUFBSCxjQUFhLFdBQVcsT0FBTyxLQUFLLFFBQVE7QUFDNUMsb0JBQVk7QUFDWixzQkFBYyxhQUFhLFVBQUssS0FBSyxPQUFPLGFBQWEsS0FBSyxrQkFBa0IsU0FBUyxnR0FBeUY7QUFDbEwsbUJBQVcsS0FBSztBQUNoQixrQkFBVSxLQUFLO0FBQ2YsY0FBTUosZ0JBQWU7QUFDckI7QUFBQSxNQUNGO0FBQUEsSUFDRixTQUFTLE9BQU87QUFDZCxNQUFBRixNQUFJLE1BQU0sdUJBQXVCLEtBQUs7QUFDdEMsc0JBQWdCLGlCQUFpQixhQUFhLGtCQUFrQixNQUFNLE9BQU8sRUFBRTtBQUMvRSx5QkFBbUIsMkJBQTJCLE1BQU0sT0FBTyx1REFBdUQsZUFBZTtBQUNqSSxxQkFBZSxpQkFBaUIseUhBQXlIO0FBQUEsSUFDM0o7QUFFQSxlQUFXLEtBQUs7QUFBQSxFQUNsQjtBQUVBLFdBQVMsdUJBQXVCLFVBQVUsU0FBUyxjQUFjO0FBQy9ELFFBQUksbUJBQW1CO0FBQ3ZCLFFBQUksZ0JBQWdCLGFBQWEsU0FBUyxHQUFHO0FBQzNDLHlCQUFtQixxREFDRCxhQUFhLElBQUksVUFBUSw4QkFBOEIsSUFBSSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQzNFO0FBQUEsSUFDcEI7QUFFQSxVQUFNLFdBQVcsV0FBVyxRQUFRO0FBQ3BDLFVBQU0sY0FBYyxXQUFXLE9BQU87QUFDdEMsVUFBTSxlQUFlO0FBQUE7QUFBQSwwQkFFSixRQUFRO0FBQUE7QUFBQSxTQUVsQixXQUFXO0FBQUEsTUFDZCxnQkFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1wQixtQkFBZSxHQUFHLFFBQVEsbUJBQW1CLFlBQVk7QUFBQSxFQUMzRDtBQU1BLFdBQVMsZ0JBQWdCO0FBQ3ZCLFVBQU0sS0FBSyxTQUFTLGVBQWUsZ0JBQWdCO0FBQ25ELFFBQUksR0FBSSxJQUFHLFFBQVE7QUFBQSxFQUNyQjtBQUVBLFdBQVMsZ0JBQWdCO0FBQ3ZCLFVBQU0sS0FBSyxTQUFTLGVBQWUsZUFBZTtBQUNsRCxRQUFJLEdBQUksSUFBRyxRQUFRO0FBQUEsRUFDckI7QUFNQSxXQUFTLGdCQUFnQixTQUFTLFNBQVMsS0FBSztBQUM5QyxVQUFNLE1BQU8sU0FBUyxlQUFlLE9BQU87QUFDNUMsVUFBTSxPQUFPLFNBQVMsZUFBZSxPQUFPO0FBQzVDLFFBQUksTUFBTztBQUFFLFdBQUssY0FBYztBQUFLLFdBQUssVUFBVSxJQUFJLFNBQVM7QUFBQSxJQUFHO0FBQ3BFLFFBQUksS0FBTztBQUNULFVBQUksVUFBVSxJQUFJLGVBQWU7QUFDakMsVUFBSSxhQUFhLGdCQUFnQixNQUFNO0FBQUEsSUFDekM7QUFBQSxFQUNGO0FBRUEsV0FBUyxpQkFBaUIsU0FBUyxTQUFTO0FBQzFDLFVBQU0sTUFBTyxTQUFTLGVBQWUsT0FBTztBQUM1QyxVQUFNLE9BQU8sU0FBUyxlQUFlLE9BQU87QUFDNUMsUUFBSSxNQUFPO0FBQUUsV0FBSyxjQUFjO0FBQUksV0FBSyxVQUFVLE9BQU8sU0FBUztBQUFBLElBQUc7QUFDdEUsUUFBSSxLQUFPO0FBQ1QsVUFBSSxVQUFVLE9BQU8sZUFBZTtBQUNwQyxVQUFJLGFBQWEsZ0JBQWdCLE9BQU87QUFBQSxJQUMxQztBQUFBLEVBQ0Y7OztBaUIxakJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsK0JBQUFVO0FBQUEsSUFBQSw4QkFBQUM7QUFBQSxJQUFBO0FBQUE7QUFBQSx1QkFBQUM7QUFBQTtBQTZCQSxNQUFNQyxRQUFNLFVBQVUsa0JBQWtCO0FBS3hDLE1BQUksaUNBQWlDO0FBQ3JDLE1BQU1DLDRCQUEyQjtBQUNqQyxNQUFJLHFCQUFxQjtBQUN6QixNQUFJLGNBQWM7QUFDbEIsTUFBSSxpQkFBaUI7QUFFckIsV0FBUyxvQkFBb0I7QUFDM0IsUUFBSSxhQUFhO0FBQ2YsbUJBQWEsV0FBVztBQUN4QixvQkFBYztBQUFBLElBQ2hCO0FBQ0EsUUFBSSxnQkFBZ0I7QUFDbEIsb0JBQWMsY0FBYztBQUM1Qix1QkFBaUI7QUFBQSxJQUNuQjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGtCQUFrQjtBQUN6QixVQUFNLFdBQVc7QUFBQSxNQUNmLFFBQVE7QUFBQSxNQUNSLE9BQU87QUFBQSxNQUNQLGFBQWE7QUFBQSxNQUNiLFdBQVc7QUFBQSxJQUNiO0FBQ0EsUUFBSTtBQUNGLFlBQU0sTUFBTSxhQUFhLFFBQVFBLHlCQUF3QjtBQUN6RCxVQUFJLENBQUMsSUFBSyxRQUFPO0FBQ2pCLFlBQU0sU0FBUyxLQUFLLE1BQU0sR0FBRztBQUM3QixhQUFPO0FBQUEsUUFDTCxRQUFRLEtBQUssSUFBSSxLQUFLLE9BQU8sT0FBTyxVQUFVLFNBQVMsTUFBTSxDQUFDO0FBQUEsUUFDOUQsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPLE9BQU8sU0FBUyxTQUFTLEtBQUssQ0FBQztBQUFBLFFBQzVELGFBQWEsS0FBSyxJQUFJLEdBQUcsT0FBTyxPQUFPLGVBQWUsU0FBUyxXQUFXLENBQUM7QUFBQSxRQUMzRSxXQUFXLE9BQU8sY0FBYztBQUFBLE1BQ2xDO0FBQUEsSUFDRixRQUFRO0FBQ04sYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsV0FBUyx1QkFBdUIsTUFBTSxPQUFPO0FBQzNDLFVBQU0sU0FBUyxnQkFBZ0I7QUFDL0IsVUFBTSxNQUFNLEtBQUssSUFBSSxPQUFPLE9BQU8sT0FBTyxTQUFVLEtBQUssa0JBQW1CO0FBQzVFLFVBQU0sU0FBUyxLQUFLLE1BQU0sT0FBTyxNQUFNLEtBQUssT0FBTyxJQUFJLEtBQUs7QUFDNUQsUUFBSSxVQUFVLEtBQUssSUFBSSxPQUFPLE9BQU8sTUFBTSxNQUFNO0FBRWpELFFBQUksU0FBUyxnQkFBZ0I7QUFDM0IsWUFBTSxnQkFBZ0IsT0FBTyxPQUFPLGlCQUFpQixDQUFDO0FBQ3RELFVBQUksZ0JBQWdCLEdBQUc7QUFDckIsa0JBQVUsS0FBSyxJQUFJLFNBQVMsZ0JBQWdCLEdBQUk7QUFBQSxNQUNsRDtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsZUFBZUMsT0FBTSxTQUFTLE9BQU87QUFDNUMsc0JBQWtCO0FBQ2xCLFVBQU0sU0FBUyxnQkFBZ0I7QUFHL0IsVUFBTSxnQkFBZ0Isb0JBQUksSUFBSSxDQUFDLGdCQUFnQixlQUFlLENBQUM7QUFDL0QsVUFBTSxlQUFlLE9BQU8sYUFDdkIscUJBQXFCLE9BQU8sZUFDNUIsQ0FBQyxjQUFjLElBQUksUUFBUSxJQUFJO0FBRXBDLFVBQU0sVUFBVSx1QkFBdUIsUUFBUSxNQUFNLEtBQUs7QUFDMUQsVUFBTSxlQUFlLEtBQUssSUFBSSxHQUFHLEtBQUssS0FBSyxVQUFVLEdBQUksQ0FBQztBQUUxRCxVQUFNLGNBQWMsTUFBTTtBQUN4QixZQUFNLFFBQVEsU0FBUyxlQUFlLGVBQWU7QUFDckQsVUFBSSxNQUFPLE9BQU0sUUFBUUE7QUFDekIsTUFBQUMsYUFBWTtBQUFBLElBQ2Q7QUFFQSxRQUFJO0FBQ0osVUFBTSxXQUFXLGVBQWUsTUFBTTtBQUNwQyx3QkFBa0I7QUFDbEIsVUFBSSxhQUFjLGNBQWEsT0FBTztBQUFBLElBQ3hDLElBQUk7QUFFSixtQkFBZTtBQUFBLE1BQ2IsZ0JBQU0sTUFBTSxPQUFPO0FBQUEsTUFDbkIsTUFBTTtBQUNKLDBCQUFrQjtBQUNsQiw4QkFBc0I7QUFDdEIsb0JBQVk7QUFBQSxNQUNkO0FBQUEsTUFDQSxlQUFlLFlBQVksWUFBWSxNQUFNO0FBQUEsTUFDN0M7QUFBQSxJQUNGO0FBRUEsUUFBSSxDQUFDLGFBQWM7QUFFbkIsVUFBTSxXQUFXLGNBQWMsY0FBYyxRQUFRO0FBQ3JELFFBQUksWUFBWTtBQUNoQixRQUFJLFVBQVU7QUFDWixlQUFTLGNBQWMsWUFBWSxTQUFTO0FBQzVDLFVBQUksUUFBUSxTQUFTLGdCQUFnQjtBQUNuQyxpQkFBUyxXQUFXO0FBQ3BCLGlCQUFTLE1BQU0sVUFBVTtBQUN6QixpQkFBUyxNQUFNLFNBQVM7QUFBQSxNQUMxQjtBQUFBLElBQ0Y7QUFFQSxxQkFBaUIsWUFBWSxNQUFNO0FBQ2pDLG1CQUFhO0FBQ2IsVUFBSSxZQUFZLFlBQVksR0FBRztBQUM3QixpQkFBUyxjQUFjLFlBQVksU0FBUztBQUFBLE1BQzlDO0FBQ0EsVUFBSSxhQUFhLEdBQUc7QUFDbEIsWUFBSSxVQUFVO0FBQ1osbUJBQVMsY0FBYztBQUN2QixtQkFBUyxXQUFXO0FBQ3BCLG1CQUFTLE1BQU0sVUFBVTtBQUN6QixtQkFBUyxNQUFNLFNBQVM7QUFBQSxRQUMxQjtBQUNBLHNCQUFjLGNBQWM7QUFDNUIseUJBQWlCO0FBQUEsTUFDbkI7QUFBQSxJQUNGLEdBQUcsR0FBSTtBQUVQLGtCQUFjLFdBQVcsTUFBTTtBQUM3QixvQkFBYztBQUNkLDRCQUFzQjtBQUN0QixvQkFBYyxPQUFPO0FBQ3JCLGtCQUFZO0FBQUEsSUFDZCxHQUFHLE9BQU87QUFBQSxFQUNaO0FBRUEsaUJBQWUsc0JBQXNCLFVBQVUsVUFBVTtBQUN2RCxVQUFNLFNBQVMsT0FBTyxVQUFVLFVBQVUsQ0FBQztBQUMzQyxVQUFNLGFBQWEsVUFBVSxjQUFjO0FBQzNDLFVBQU0sZUFBZSxVQUFVLFNBQVMsSUFBSSxjQUFjLEtBQUssSUFBSSxZQUFZO0FBQy9FLFVBQU0sTUFBTSxNQUFNLFNBQVMsS0FBSztBQUVoQyxRQUFJLENBQUMsU0FBUyxJQUFJO0FBQ2hCLFVBQUksU0FBUztBQUNiLFVBQUksWUFBWSxTQUFTLGtCQUFrQixHQUFHO0FBQzVDLFlBQUk7QUFDRixnQkFBTSxVQUFVLEtBQUssTUFBTSxPQUFPLElBQUk7QUFDdEMsbUJBQVMsU0FBUyxTQUFTLFNBQVMsV0FBVztBQUFBLFFBQ2pELFFBQVE7QUFBQSxRQUVSO0FBQUEsTUFDRixZQUFZLE9BQU8sSUFBSSxLQUFLLEVBQUUsV0FBVyxHQUFHLEdBQUc7QUFDN0MsaUJBQVM7QUFBQSxNQUNYLFlBQVksT0FBTyxJQUFJLEtBQUssR0FBRztBQUM3QixpQkFBUyxJQUFJLEtBQUssRUFBRSxNQUFNLEdBQUcsR0FBRztBQUFBLE1BQ2xDO0FBQ0EsWUFBTSxRQUFRLElBQUksTUFBTSxHQUFHLE1BQU0sS0FBSyxNQUFNLEVBQUU7QUFDOUMsWUFBTSxTQUFTO0FBQ2YsWUFBTSxnQkFBZ0IsT0FBTyxVQUFVLFNBQVMsSUFBSSxhQUFhLEtBQUssQ0FBQztBQUN2RSxZQUFNO0FBQUEsSUFDUjtBQUVBLFFBQUksQ0FBQyxZQUFZLFNBQVMsa0JBQWtCLEdBQUc7QUFDN0MsWUFBTSxXQUFXLE9BQU8sSUFBSSxLQUFLLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFDOUMsWUFBTSxJQUFJO0FBQUEsUUFDUixzQkFBc0IsUUFBUSxTQUFTLGVBQWUsc0JBQXNCLEdBQUcsVUFBVSxLQUFLLE9BQU8sS0FBSyxFQUFFO0FBQUEsTUFDOUc7QUFBQSxJQUNGO0FBRUEsUUFBSTtBQUNGLGFBQU8scUJBQXFCLEtBQUssTUFBTSxPQUFPLElBQUksQ0FBQztBQUFBLElBQ3JELFNBQVMsT0FBTztBQUNkLFlBQU0sSUFBSSxZQUFZLHFCQUFxQixRQUFRLEtBQUssTUFBTSxPQUFPLEVBQUU7QUFBQSxJQUN6RTtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGlCQUFpQixNQUFNRCxPQUFNLE9BQU8sSUFBSSxVQUFVLElBQUk7QUFDN0QsUUFBSSxPQUFPLHlCQUF5QixZQUFZO0FBQzlDLDJCQUFxQixNQUFNQSxPQUFNLE1BQU0sT0FBTztBQUFBLElBQ2hEO0FBQUEsRUFDRjtBQUVBLFdBQVMsa0JBQWtCLE9BQU87QUFDaEMsVUFBTSxVQUFVLE9BQU8sT0FBTyxXQUFXLFNBQVMsZUFBZTtBQUNqRSxVQUFNLFFBQVEsUUFBUSxZQUFZO0FBQ2xDLFVBQU0sU0FBUyxPQUFPLE9BQU8sVUFBVSxDQUFDO0FBRXhDLFFBQUksV0FBVyxPQUFPLFdBQVcsT0FBTyxRQUFRLFdBQVcsTUFBTSxLQUFLLFFBQVEsV0FBVyxNQUFNLEtBQUssTUFBTSxTQUFTLE1BQU0sR0FBRztBQUMxSCxhQUFPO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixNQUFNO0FBQUEsUUFDTixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFFQSxRQUFJLFdBQVcsT0FBTyxRQUFRLFdBQVcsTUFBTSxLQUFLLE1BQU0sU0FBUyxZQUFZLEdBQUc7QUFDaEYsYUFBTztBQUFBLFFBQ0wsTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBRUEsUUFDRSxXQUFXLE9BQ1gsV0FBVyxPQUNYLFdBQVcsT0FDWCxRQUFRLFdBQVcsTUFBTSxLQUN6QixRQUFRLFdBQVcsTUFBTSxLQUN6QixRQUFRLFdBQVcsTUFBTSxLQUN6QixNQUFNLFNBQVMsU0FBUyxLQUN4QixNQUFNLFNBQVMsYUFBYSxLQUM1QixNQUFNLFNBQVMsY0FBYyxHQUM3QjtBQUNBLGFBQU87QUFBQSxRQUNMLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxNQUNYO0FBQUEsSUFDRjtBQUdBLFFBQUksVUFBVSxPQUFPLFNBQVMsS0FBSztBQUNqQyxhQUFPO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixNQUFNO0FBQUEsUUFDTixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDWDtBQUFBLEVBQ0Y7QUFNQSxpQkFBZSxrQkFBa0JBLE9BQU07QUFDckMsc0JBQWtCO0FBQ2xCLGVBQVcsTUFBTSxnQkFBVztBQUM1QixxQkFBaUIsY0FBYyxvQkFBZSxVQUFLLDhCQUE4QjtBQUNqRixRQUFJLGdCQUFnQjtBQUNwQixRQUFJO0FBQ0YsWUFBTSxNQUFNLE1BQU0sU0FBUyxnQkFBZ0I7QUFBQSxRQUN6QyxRQUFRO0FBQUEsUUFDUixTQUFTLEVBQUUsZ0JBQWdCLG1CQUFtQjtBQUFBLFFBQzlDLE1BQU0sS0FBSyxVQUFVLEVBQUUsU0FBU0EsTUFBSyxDQUFDO0FBQUEsTUFDeEMsQ0FBQztBQUNELFlBQU0sT0FBTyxNQUFNLHNCQUFzQixLQUFLLGNBQWM7QUFFNUQsVUFBSSxLQUFLLE9BQU87QUFDZCxjQUFNLFdBQVcsS0FBSyxNQUFNLFNBQVM7QUFDckMsY0FBTSxVQUFVLGtCQUFrQixJQUFJLE1BQU0sUUFBUSxDQUFDO0FBQ3JELHlCQUFpQixRQUFRLE1BQU0sUUFBUSxNQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU87QUFDMUUsdUJBQWVBLE9BQU0sU0FBUyxJQUFJLE1BQU0sUUFBUSxDQUFDO0FBQ2pELHdCQUFnQjtBQUNoQixRQUFBRixNQUFJLE1BQU0saUJBQWlCLEtBQUssS0FBSztBQUFBLE1BQ3ZDLFdBQVcsS0FBSyxVQUFVO0FBQ3hCLFlBQUk7QUFDRixnQkFBTSxnQkFBZ0IsS0FBSztBQUMzQixnQkFBTSxzQkFBc0IsdUJBQXVCLGFBQWE7QUFDaEUsY0FBSSx3QkFBd0Isb0JBQW9CLDJCQUEyQixvQkFBb0IscUJBQXFCO0FBQ2xILGtCQUFNLFlBQVksY0FBYyxRQUFRLEdBQUc7QUFDM0Msa0JBQU0saUJBQWlCLFlBQVksSUFBSSxjQUFjLFVBQVUsR0FBRyxTQUFTLEVBQUUsS0FBSyxJQUFJO0FBQ3RGLGdCQUFJLGtCQUFrQixDQUFDLGVBQWUsU0FBUyxZQUFZLEdBQUc7QUFDNUQsNEJBQWMsYUFBYSxjQUFjO0FBQUEsWUFDM0M7QUFDQSxrQkFBTSw0QkFBNEIsbUJBQW1CO0FBQUEsVUFDdkQsT0FBTztBQUNMLGdCQUFJLGNBQWMsS0FBSyxFQUFFLFNBQVMsR0FBRztBQUNuQyw0QkFBYyxhQUFhLGFBQWE7QUFBQSxZQUMxQztBQUFBLFVBQ0Y7QUFBQSxRQUNGLFNBQVMsS0FBSztBQUNaLFVBQUFBLE1BQUksTUFBTSxzQ0FBc0MsS0FBSyxLQUFLLFFBQVE7QUFDbEUsZ0JBQU0sVUFBVSxrQkFBa0IsR0FBRztBQUNyQywyQkFBaUIsUUFBUSxNQUFNLFFBQVEsTUFBTSxRQUFRLE1BQU0sUUFBUSxPQUFPO0FBQzFFLHdCQUFjLFVBQVUsaUVBQXVELElBQUksT0FBTyxvQ0FBb0M7QUFDOUgsMEJBQWdCO0FBQUEsUUFDbEI7QUFDQSxjQUFNLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxNQUFNLGFBQWEsTUFBTSxVQUFLLFNBQVMscURBQXFEO0FBQ3hJLHlCQUFpQixlQUFlLE1BQU0sZUFBZSxNQUFNLGVBQWUsTUFBTSxlQUFlLE9BQU87QUFDdEcsd0JBQWdCO0FBQ2hCLDZCQUFxQjtBQUFBLE1BQ3ZCO0FBQUEsSUFDRixTQUFTLE9BQU87QUFDZCxNQUFBQSxNQUFJLE1BQU0seUJBQXlCLE1BQU0sTUFBTSxNQUFNLFNBQVMsTUFBTSxLQUFLO0FBQ3pFLFVBQUksTUFBTSxTQUFTLGNBQWM7QUFFL0IsbUJBQVcsS0FBSztBQUNoQjtBQUFBLE1BQ0Y7QUFDQSxZQUFNLFVBQVUsa0JBQWtCLEtBQUs7QUFDdkMsdUJBQWlCLFFBQVEsTUFBTSxRQUFRLE1BQU0sUUFBUSxNQUFNLFFBQVEsT0FBTztBQUMxRSxxQkFBZUUsT0FBTSxTQUFTLEtBQUs7QUFDbkMsc0JBQWdCO0FBQUEsSUFDbEI7QUFDQSxlQUFXLEtBQUs7QUFDaEIsVUFBTSxZQUFZO0FBQ2xCLFFBQUksZUFBZTtBQUNqQix1QkFBaUIsY0FBYyxNQUFNLGNBQWMsTUFBTSxjQUFjLE1BQU0sY0FBYyxPQUFPO0FBQUEsSUFDcEc7QUFDQSxRQUFJLE9BQU8sMEJBQTBCLFdBQVksdUJBQXNCO0FBQUEsRUFDekU7QUFPQSxNQUFNLG1CQUFtQjtBQUFBLElBQ3ZCO0FBQUEsTUFDRSxNQUFNLE9BQUssRUFBRSxZQUFZLEVBQUUsU0FBUyx3QkFBd0IsS0FBSyxFQUFFLFlBQVksTUFBTTtBQUFBLE1BQ3JGLFFBQVEsWUFBWSxxQkFBcUI7QUFBQSxJQUMzQztBQUFBLElBQ0E7QUFBQSxNQUNFLE1BQU0sTUFBTSxPQUFPO0FBQUEsTUFDbkIsUUFBUSxPQUFNLE1BQUsseUJBQXlCLENBQUM7QUFBQSxJQUMvQztBQUFBLElBQ0E7QUFBQSxNQUNFLE1BQU0sTUFBTSxPQUFPO0FBQUEsTUFDbkIsUUFBUSxPQUFNLE1BQUsscUJBQXFCLENBQUM7QUFBQSxJQUMzQztBQUFBLElBQ0E7QUFBQTtBQUFBLE1BRUUsTUFBTSxNQUFNLE9BQU87QUFBQSxNQUNuQixRQUFRLE9BQU0sTUFBSztBQUNqQixjQUFNLGtCQUFrQix1QkFBdUIsQ0FBQztBQUNoRCxtQkFBVyxNQUFNLGdCQUFXO0FBQzVCLFlBQUk7QUFDRixnQkFBTSxNQUFNLE1BQU0sU0FBUyxnQkFBZ0I7QUFBQSxZQUN6QyxRQUFRO0FBQUEsWUFDUixTQUFTLEVBQUUsZ0JBQWdCLG1CQUFtQjtBQUFBLFlBQzlDLE1BQU0sS0FBSyxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFBQSxVQUNyQyxDQUFDO0FBQ0QsZ0JBQU0sT0FBTyxNQUFNLHNCQUFzQixLQUFLLGNBQWM7QUFDNUQsY0FBSSxLQUFLLE9BQU87QUFDZCxZQUFBRixNQUFJLE1BQU0sMkNBQTJDLEtBQUssS0FBSztBQUFBLFVBQ2pFLFdBQVcsS0FBSyxZQUFZLENBQUMsaUJBQWlCO0FBQzVDLDBCQUFjLGFBQWEsS0FBSyxRQUFRO0FBQUEsVUFDMUM7QUFBQSxRQUNGLFNBQVMsS0FBSztBQUNaLGNBQUksSUFBSSxTQUFTLGFBQWMsQ0FBQUEsTUFBSSxNQUFNLHdDQUF3QyxHQUFHO0FBQUEsUUFDdEY7QUFDQSxtQkFBVyxLQUFLO0FBQ2hCLFlBQUksQ0FBQyxnQkFBaUIsT0FBTSxrQkFBa0IsQ0FBQztBQUFBLE1BQ2pEO0FBQUEsSUFDRjtBQUFBLElBQ0E7QUFBQSxNQUNFLE1BQU0sT0FBSyxFQUFFLFlBQVksTUFBTTtBQUFBLE1BQy9CLFFBQVEsWUFBWSxPQUFPLHlCQUN2QixxQkFBcUIsSUFDckIsV0FBVywwQkFBMEI7QUFBQSxJQUMzQztBQUFBLElBQ0E7QUFBQSxNQUNFLE1BQU0sTUFBTTtBQUFBLE1BQ1osUUFBUTtBQUFBLElBQ1Y7QUFBQSxFQUNGO0FBRUEsaUJBQWVHLGVBQWM7QUFDM0IsVUFBTSxRQUFRLFNBQVMsZUFBZSxlQUFlO0FBQ3JELFVBQU1ELFFBQU8sY0FBYyxNQUFNLEtBQUs7QUFDdEMsUUFBSSxDQUFDQSxTQUFRRSxjQUFhLFVBQVUsRUFBRztBQUV2QyxRQUFJLENBQUNDLHFCQUFvQixHQUFHO0FBQzFCLG9CQUFjLFVBQVUsbUZBQXlFO0FBQ2pHO0FBQUEsSUFDRjtBQUVBLGtCQUFjLFFBQVFILEtBQUk7QUFDMUIsVUFBTSxRQUFRO0FBRWQsZUFBVyxXQUFXLGtCQUFrQjtBQUN0QyxVQUFJLFFBQVEsS0FBS0EsS0FBSSxHQUFHO0FBQ3RCLGNBQU0sUUFBUSxPQUFPQSxLQUFJO0FBQ3pCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBTUEsaUJBQWVJLHdCQUF1QixlQUFlLE1BQU07QUFDekQsUUFBSSxPQUFPLGlCQUFpQixZQUFZO0FBQ3RDLHVDQUFpQztBQUFBLElBQ25DO0FBRUEsUUFBSSxZQUFZLEVBQUMsTUFBTSxJQUFJLFNBQVMsSUFBSSxjQUFjLEdBQUU7QUFDeEQsUUFBSTtBQUNGLFlBQU0sTUFBTyxNQUFNLFNBQVMsc0JBQXNCO0FBQ2xELFlBQU0sT0FBTyxNQUFNLElBQUksS0FBSztBQUM1QixVQUFJLEtBQUssV0FBVztBQUNsQixjQUFNQyxxQkFBb0IsWUFBWTtBQUN0QztBQUFBLE1BQ0Y7QUFDQSxrQkFBWTtBQUFBLElBQ2QsU0FBU0MsS0FBSTtBQUFBLElBQXlDO0FBRXRELFVBQU0sUUFBUSxVQUFVLGlCQUFnQixvQkFBSSxLQUFLLEdBQUUsWUFBWSxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQzVFLFVBQU0sV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwyREFNd0MsV0FBVyxVQUFVLFFBQVEsRUFBRSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw4REFLN0IsV0FBVyxVQUFVLFdBQVcsRUFBRSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwyREFLdEMsV0FBVyxLQUFLLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPMUUsa0JBQWMsUUFBUTtBQUV0QixVQUFNLFlBQVksU0FBUyxlQUFlLG1CQUFtQjtBQUM3RCxRQUFJLGFBQWEsQ0FBQyxVQUFVLE1BQU0sS0FBSyxFQUFHLFdBQVUsTUFBTTtBQUFBLEVBQzVEO0FBRUEsaUJBQWUsa0JBQWtCLGVBQWUsTUFBTTtBQUNwRCxVQUFNLFFBQWdCLFNBQVMsZUFBZSxtQkFBbUIsR0FBRyxTQUFZLElBQUksS0FBSztBQUN6RixVQUFNLFdBQWdCLFNBQVMsZUFBZSxzQkFBc0IsR0FBRyxTQUFTLElBQUksS0FBSztBQUN6RixVQUFNLGdCQUFnQixTQUFTLGVBQWUsbUJBQW1CLEdBQUcsU0FBWSxJQUFJLEtBQUs7QUFFekYsVUFBTSxNQUFNLFNBQVMsZUFBZSxvQkFBb0I7QUFDeEQsUUFBSSxJQUFLLEtBQUksV0FBVztBQUV4QixRQUFJO0FBQ0YsWUFBTSxTQUFTLHVCQUF1QjtBQUFBLFFBQ3BDLFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBQyxnQkFBZ0IsbUJBQWtCO0FBQUEsUUFDNUMsTUFBTSxLQUFLLFVBQVUsRUFBQyxNQUFNLFNBQVMsYUFBWSxDQUFDO0FBQUEsTUFDcEQsQ0FBQztBQUFBLElBQ0gsU0FBU0EsS0FBSTtBQUFBLElBQWtCO0FBRS9CLGFBQVMsZUFBZSxxQkFBcUIsR0FBRyxPQUFPO0FBQ3ZELFVBQU1ELHFCQUFvQixZQUFZO0FBQUEsRUFDeEM7QUFFQSxpQkFBZSxnQkFBZ0IsZUFBZSxNQUFNO0FBQ2xELGFBQVMsZUFBZSxxQkFBcUIsR0FBRyxPQUFPO0FBQ3ZELFVBQU1BLHFCQUFvQixZQUFZO0FBQUEsRUFDeEM7QUFFQSxpQkFBZUEscUJBQW9CLGVBQWUsTUFBTTtBQUN0RCxVQUFNLHdCQUNILE9BQU8saUJBQWlCLGNBQWMsZ0JBQ3BDLG1DQUNDLFlBQVksV0FBVztBQUU3QixRQUFJO0FBQ0YsWUFBTSxNQUFPLE1BQU0sU0FBUywyQkFBMkI7QUFDdkQsWUFBTSxPQUFPLE1BQU0sSUFBSSxLQUFLO0FBQzVCLFVBQUksS0FBSyxTQUFTLEtBQUssV0FBVyxLQUFLLFFBQVEsU0FBUyxHQUFHO0FBQ3pELGNBQU0sT0FBTyxLQUFLLFFBQVEsQ0FBQztBQUMzQix5Q0FBaUM7QUFDakMsY0FBTSwwQkFBMEIsSUFBSTtBQUNwQztBQUFBLE1BQ0Y7QUFBQSxJQUNGLFNBQVNDLEtBQUk7QUFBQSxJQUFxQjtBQUVsQyxxQ0FBaUM7QUFDakMsVUFBTSxzQkFBc0I7QUFBQSxFQUM5QjtBQUVBLGlCQUFlLDBCQUEwQixPQUFPO0FBQzlDLFVBQU0sV0FBVyxXQUFXLE1BQU0sUUFBUSxNQUFNLGlCQUFpQixnQkFBZ0I7QUFDakYsVUFBTSxhQUFhO0FBQUE7QUFBQTtBQUFBLG9FQUd3QyxRQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1uRSxrQkFBYyxVQUFVO0FBRXhCLFdBQU8sdUJBQXVCLE1BQU0sV0FBVyxDQUFDO0FBQUEsRUFDbEQ7QUFFQSxpQkFBZSw4QkFBOEI7QUFDM0MsYUFBUyxlQUFlLG1CQUFtQixHQUFHLE9BQU87QUFDckQsV0FBTyxPQUFPO0FBQ2QsVUFBTSxlQUFlLG1DQUFtQyxZQUFZLFdBQVc7QUFDL0UscUNBQWlDO0FBQ2pDLFVBQU0sYUFBYTtBQUFBLEVBQ3JCO0FBRUEsaUJBQWUsMkJBQTJCO0FBQ3hDLGFBQVMsZUFBZSxtQkFBbUIsR0FBRyxPQUFPO0FBQ3JELFVBQU0sVUFBVSxPQUFPLHdCQUF3QixDQUFDO0FBQ2hELFdBQU8sT0FBTztBQUNkLFFBQUksT0FBTyxvQkFBb0IsWUFBWSxvQkFBb0IsTUFBTTtBQUNuRSxhQUFPLE9BQU8saUJBQWlCLE9BQU87QUFBQSxJQUN4QyxPQUFPO0FBQ0wsYUFBTyxrQkFBa0IsT0FBTyxPQUFPLENBQUMsR0FBRyxPQUFPO0FBQUEsSUFDcEQ7QUFDQSxVQUFNLGVBQWUsbUNBQW1DLFlBQVksV0FBVztBQUMvRSxxQ0FBaUM7QUFDakMsVUFBTSxhQUFhO0FBQUEsRUFDckI7OztBQ3BpQkE7QUFBQTtBQUFBLG9DQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUEsa0NBQUFDO0FBQUEsSUFBQTtBQUFBO0FBQUEsZ0NBQUFDO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdUJBLE1BQU1DLFFBQU0sVUFBVSxpQkFBaUI7QUFRdkMsaUJBQWUsMkJBQTJCO0FBQ3hDLFFBQUk7QUFDRixVQUFJLENBQUMsTUFBTSxRQUFRLE9BQU8scUJBQXFCLEdBQUc7QUFDaEQsZUFBTyx3QkFBd0IsQ0FBQztBQUFBLE1BQ2xDO0FBQ0EsVUFBSSxDQUFDLE9BQU8sbUJBQW1CLE9BQU8sT0FBTyxvQkFBb0IsVUFBVTtBQUN6RSxlQUFPLGtCQUFrQixDQUFDO0FBQUEsTUFDNUI7QUFFQSxZQUFNLE1BQU0sZ0NBQWdDO0FBQUEsUUFDMUMsUUFBUTtBQUFBLFFBQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxRQUM5QyxNQUFNLEtBQUssVUFBVTtBQUFBLFVBQ25CLFdBQVcsT0FBTztBQUFBLFVBQ2xCLFNBQVMsT0FBTztBQUFBLFFBQ2xCLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNILFNBQVMsT0FBTztBQUNkLE1BQUFBLE1BQUksS0FBSywwQ0FBMEMsS0FBSztBQUFBLElBQzFEO0FBQUEsRUFDRjtBQU1BLFdBQVMsdUJBQXVCLGNBQWM7QUFDNUMsVUFBTSxPQUFPLFdBQVcsZ0JBQWdCLEVBQUU7QUFDMUMsV0FBTyxLQUNKLFFBQVEsa0JBQWtCLHFCQUFxQixFQUMvQyxRQUFRLGNBQWMsYUFBYSxFQUNuQyxRQUFRLGNBQWMsaUJBQWlCLEVBQ3ZDLFFBQVEsT0FBTyxNQUFNO0FBQUEsRUFDMUI7QUFNQSxpQkFBZSxrQ0FBa0MsY0FBYztBQUM3RCxRQUFJO0FBQ0YsWUFBTSxNQUFNLE1BQU0sTUFBTSxnQ0FBZ0M7QUFBQSxRQUN0RCxRQUFRO0FBQUEsUUFDUixTQUFTLEVBQUUsZ0JBQWdCLG1CQUFtQjtBQUFBLFFBQzlDLE1BQU0sS0FBSyxVQUFVLEVBQUUsVUFBVSxhQUFhLENBQUM7QUFBQSxNQUNqRCxDQUFDO0FBQ0QsVUFBSSxDQUFDLElBQUksR0FBSSxRQUFPLENBQUM7QUFDckIsWUFBTSxVQUFVLE1BQU0sSUFBSSxLQUFLO0FBQy9CLGFBQU8sK0JBQStCLFFBQVEsU0FBUztBQUFBLElBQ3pELFNBQVMsVUFBVTtBQUNqQixNQUFBQSxNQUFJLEtBQUssNENBQTRDLFFBQVE7QUFDN0QsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFNQSxpQkFBZUMsMEJBQXlCLGdCQUFnQixxQkFBcUIsTUFBTTtBQUNqRixRQUFJO0FBQ0YsVUFBSTtBQUNKLFVBQUksbUJBQW1CLFFBQVEsT0FBTyxtQkFBbUIsVUFBVTtBQUNqRSxlQUFPO0FBQUEsTUFDVCxPQUFPO0FBQ0wsY0FBTSxjQUFjLGtCQUFrQixjQUFjO0FBQ3BELGVBQU8sT0FBTyxnQkFBZ0IsV0FBVyxLQUFLLE1BQU0sV0FBVyxJQUFJO0FBQUEsTUFDckU7QUFFQSxhQUFPLHdCQUF3QiwyQkFBMkIsQ0FBQyxHQUFHLGtCQUFrQjtBQUVoRixVQUFJLE9BQU8sc0JBQXNCLFdBQVcsR0FBRztBQUM3QyxlQUFPLHdCQUF3QixNQUFNLGtDQUFrQyxJQUFJO0FBQUEsTUFDN0U7QUFFQSxVQUFJLE9BQU8sc0JBQXNCLFdBQVcsR0FBRztBQUM3QyxlQUFPLHdCQUF3QixtQ0FBbUMsSUFBSTtBQUFBLE1BQ3hFO0FBRUEsVUFBSSxDQUFDLE9BQU8sbUJBQW1CLE9BQU8sT0FBTyxvQkFBb0IsVUFBVTtBQUN6RSxlQUFPLGtCQUFrQixDQUFDO0FBQUEsTUFDNUI7QUFDQSxZQUFNLHlCQUF5QjtBQUUvQixVQUFJLE9BQU8sc0JBQXNCLFNBQVMsR0FBRztBQUMzQyw2QkFBcUI7QUFDckIsa0JBQVUsV0FBVztBQUFBLE1BQ3ZCLE9BQU87QUFDTCxzQkFBYyxhQUFhLG1HQUE4RjtBQUN6SCxjQUFNLFdBQVcsMEJBQTBCO0FBQUEsTUFDN0M7QUFBQSxJQUNGLFNBQVMsR0FBRztBQUNWLE1BQUFELE1BQUksTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRCxvQkFBYyxhQUFhLGlFQUFpRTtBQUFBLElBQzlGO0FBQUEsRUFDRjtBQU1BLFdBQVNFLHdCQUF1QjtBQUM5QixVQUFNLFVBQVUsU0FBUyxlQUFlLGtCQUFrQjtBQUMxRCxRQUFJLENBQUMsUUFBUztBQUVkLFFBQUksQ0FBQ0MsY0FBYSxXQUFXLFVBQVUsR0FBRztBQUN4QyxjQUFRLFlBQVk7QUFDcEI7QUFBQSxJQUNGO0FBRUEsVUFBTSxlQUFlLE1BQU0sUUFBUSxPQUFPLHFCQUFxQixLQUFLLE9BQU8sc0JBQXNCLFNBQVM7QUFDMUcsUUFBSSxDQUFDLGNBQWM7QUFDakIsY0FBUSxZQUFZO0FBQ3BCO0FBQUEsSUFDRjtBQUVBLG9CQUFnQjtBQUNoQixZQUFRLFlBQVk7QUFDcEIseUJBQXFCO0FBQUEsRUFDdkI7QUFNQSxXQUFTLHVCQUF1QjtBQUM5QixVQUFNLEtBQUssT0FBTyx5QkFBeUIsQ0FBQztBQUM1QyxRQUFJLEdBQUcsV0FBVyxFQUFHO0FBRXJCLFVBQU0sVUFBVSxTQUFTLGVBQWUsa0JBQWtCO0FBQzFELFFBQUksQ0FBQyxRQUFTO0FBRWQsVUFBTSxXQUFXLFFBQVEsY0FBYyxrQkFBa0I7QUFDekQsUUFBSSxTQUFVLFVBQVMsT0FBTztBQUU5QixVQUFNLFFBQWEsR0FBRztBQUN0QixVQUFNLFlBQWEsS0FBSyxLQUFLLFFBQVEsVUFBVTtBQUUvQyxvQkFBbUIsS0FBSyxJQUFJLGVBQWUsWUFBWSxDQUFDO0FBQ3hELFVBQU0sYUFBYSxnQkFBZ0I7QUFDbkMsVUFBTSxXQUFhLEtBQUssSUFBSSxhQUFhLFlBQVksS0FBSztBQUMxRCxVQUFNLFVBQWEsR0FBRyxNQUFNLFlBQVksUUFBUTtBQUNoRCxVQUFNLGNBQWMsa0JBQWtCLFlBQVk7QUFFbEQsVUFBTSxrQkFBbUIsT0FBTyxtQkFBbUIsT0FBTyxPQUFPLG9CQUFvQixXQUNqRixPQUFPLGtCQUFrQixDQUFDO0FBRTlCLFVBQU0sYUFBYSxZQUFZLElBQzNCLFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxTQUFTLEtBQzFDLEdBQUcsS0FBSyxZQUFZLFFBQVEsSUFBSSxNQUFNLEVBQUU7QUFFNUMsUUFBSSxZQUFZO0FBQUE7QUFBQSw0Q0FFMEIsVUFBVTtBQUVwRCxZQUFRLFFBQVEsQ0FBQ0MsSUFBRyxhQUFhO0FBQy9CLFlBQU0sTUFBTSxhQUFhO0FBQ3pCLFlBQU0sZUFBZSxnQkFBZ0JBLEdBQUUsSUFBSSxLQUFLLElBQUksU0FBUztBQUM3RCxZQUFNLGFBQWMsWUFBWSxLQUFLLEVBQUUsU0FBUztBQUNoRCxZQUFNLG1CQUFtQix1QkFBdUJBLEdBQUUsUUFBUTtBQUMxRCxZQUFNLFNBQVNBLEdBQUUsV0FBVyxDQUFDLEdBQUc7QUFBQSxRQUFJLENBQUMsR0FBRyxPQUN0QyxxQ0FBcUMsR0FBRyxnQkFBZ0IsRUFBRSxnQ0FBZ0MsR0FBRyxNQUFNLFdBQVcsQ0FBQyxDQUFDO0FBQUEsTUFDbEgsRUFBRSxLQUFLLEVBQUU7QUFDVCxtQkFBYTtBQUFBLGlDQUNnQixhQUFhLGNBQWMsRUFBRSxnQkFBZ0IsR0FBRztBQUFBO0FBQUEsZ0NBRWpELE1BQU0sQ0FBQyxLQUFLLGdCQUFnQjtBQUFBLFlBQ2hELGFBQWEsMERBQXFELEVBQUU7QUFBQTtBQUFBLFVBRXRFLFFBQVEsd0JBQXdCLEtBQUssV0FBVyxFQUFFO0FBQUE7QUFBQSxrREFFVixHQUFHLDZEQUF3RCxHQUFHLE1BQU0sV0FBVyxXQUFXLENBQUM7QUFBQSx3REFDckYsR0FBRyxvQ0FBb0MsR0FBRztBQUFBO0FBQUE7QUFBQSxJQUdoRyxDQUFDO0FBRUQsUUFBSSxhQUFhO0FBQ2YsbUJBQWE7QUFBQSxJQUNmLE9BQU87QUFDTCxtQkFBYSw2SkFBd0osUUFBUSxPQUFPLEtBQUs7QUFBQSxJQUMzTDtBQUNBLGlCQUFhO0FBRWIsWUFBUSxtQkFBbUIsYUFBYSxTQUFTO0FBR2pELFlBQVEsUUFBUSxDQUFDQSxJQUFHLGFBQWE7QUFDL0IsWUFBTSxNQUFNLGFBQWE7QUFDekIsWUFBTSxTQUFTLGdCQUFnQkEsR0FBRSxJQUFJLEtBQUssSUFBSSxTQUFTLEVBQUUsS0FBSztBQUM5RCxVQUFJLENBQUMsTUFBTztBQUNaLFlBQU0sT0FBTyxTQUFTLGVBQWUsVUFBVSxHQUFHLEVBQUU7QUFDcEQsVUFBSSxDQUFDLEtBQU07QUFDWCxXQUFLLGlCQUFpQixTQUFTLEVBQUUsUUFBUSxVQUFRO0FBQy9DLGFBQUssS0FBSyxlQUFlLElBQUksS0FBSyxNQUFNLE1BQU8sTUFBSyxVQUFVLElBQUksVUFBVTtBQUFBLE1BQzlFLENBQUM7QUFBQSxJQUNILENBQUM7QUFFRCxvQkFBZ0I7QUFBQSxFQUNsQjtBQXdCQSxpQkFBZSxzQkFBc0IsS0FBSztBQUN4QyxVQUFNLEtBQUssT0FBTyx5QkFBeUIsQ0FBQztBQUM1QyxVQUFNQyxLQUFLLEdBQUcsR0FBRztBQUNqQixRQUFJLENBQUNBLEdBQUc7QUFFUixVQUFNLE1BQU0sU0FBUyxlQUFlLGVBQWUsR0FBRyxFQUFFO0FBQ3hELFVBQU0sS0FBTSxTQUFTLGVBQWUsV0FBVyxHQUFHLEVBQUU7QUFDcEQsUUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFJO0FBRWpCLFFBQUksV0FBVztBQUNmLFFBQUksWUFBWTtBQUVoQixRQUFJO0FBQ0YsVUFBSSxrQkFBa0I7QUFDdEIsWUFBTSxnQkFBZ0JDLGNBQWEsV0FBVyxVQUFVO0FBQ3hELFVBQUksZUFBZTtBQUNqQixZQUFJO0FBQ0YsZ0JBQU0sVUFBVSxrQkFBa0IsYUFBYTtBQUMvQyw0QkFBa0IsT0FBTyxZQUFZLFdBQVcsS0FBSyxNQUFNLE9BQU8sSUFBSTtBQUFBLFFBQ3hFLFNBQVNDLElBQUc7QUFBQSxRQUFpQjtBQUFBLE1BQy9CO0FBRUEsWUFBTSxNQUFNLE1BQU0sTUFBTSxxQ0FBcUM7QUFBQSxRQUMzRCxRQUFRO0FBQUEsUUFDUixTQUFTLEVBQUUsZ0JBQWdCLG1CQUFtQjtBQUFBLFFBQzlDLE1BQU0sS0FBSyxVQUFVLEVBQUUsVUFBVUYsR0FBRSxVQUFVLGVBQWVBLEdBQUUsTUFBTSxVQUFVLGdCQUFnQixDQUFDO0FBQUEsTUFDakcsQ0FBQztBQUNELFlBQU0sT0FBTyxNQUFNLElBQUksS0FBSztBQUM1QixVQUFJLEtBQUssTUFBTSxLQUFLLE1BQU07QUFDeEIsV0FBRyxRQUFRLEtBQUs7QUFDaEIsd0JBQWdCO0FBQ2hCLGNBQU0sT0FBTyxTQUFTLGVBQWUsVUFBVSxHQUFHLEVBQUU7QUFDcEQsWUFBSSxLQUFNLE1BQUssaUJBQWlCLFNBQVMsRUFBRSxRQUFRLE9BQUssRUFBRSxVQUFVLE9BQU8sVUFBVSxDQUFDO0FBQ3RGLHVCQUFlLEtBQUssSUFBSTtBQUN4QixzQkFBYyxhQUFhLDRCQUF1QixNQUFNLENBQUM7QUFBQTtBQUFBLEVBQVEsS0FBSyxJQUFJO0FBQUE7QUFBQSxzREFBMkQ7QUFBQSxNQUN2SSxPQUFPO0FBQ0wsUUFBQUcsTUFBSSxLQUFLLDRCQUE0QixLQUFLLEtBQUs7QUFDL0MsdUJBQWUsS0FBSyxLQUFLLFNBQVMsdUNBQWtDO0FBQUEsTUFDdEU7QUFBQSxJQUNGLFNBQVMsS0FBSztBQUNaLE1BQUFBLE1BQUksTUFBTSxzQkFBc0IsR0FBRztBQUNuQyxxQkFBZSxLQUFLLHdDQUFtQztBQUFBLElBQ3pELFVBQUU7QUFDQSxVQUFJLFdBQVc7QUFDZixVQUFJLFlBQVk7QUFBQSxJQUNsQjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLFlBQVksS0FBSyxNQUFNO0FBQzlCLFVBQU0sUUFBUSxTQUFTLGVBQWUsVUFBVSxJQUFJLEVBQUU7QUFDdEQsUUFBSSxPQUFPO0FBQ1QsWUFBTSxpQkFBaUIsU0FBUyxFQUFFLFFBQVEsT0FBSyxFQUFFLFVBQVUsT0FBTyxVQUFVLENBQUM7QUFBQSxJQUMvRTtBQUNBLFFBQUksVUFBVSxJQUFJLFVBQVU7QUFDNUIsVUFBTSxXQUFXLFNBQVMsZUFBZSxXQUFXLElBQUksRUFBRTtBQUMxRCxRQUFJLFVBQVU7QUFDWixlQUFTLFFBQVEsSUFBSTtBQUNyQixzQkFBZ0I7QUFBQSxJQUNsQjtBQUVBLFVBQU1ILE1BQUssT0FBTyx5QkFBeUIsQ0FBQyxHQUFHLElBQUk7QUFDbkQsUUFBSUEsSUFBRztBQUNMLFVBQUksQ0FBQyxPQUFPLG1CQUFtQixPQUFPLE9BQU8sb0JBQW9CLFVBQVU7QUFDekUsZUFBTyxrQkFBa0IsQ0FBQztBQUFBLE1BQzVCO0FBQ0EsYUFBTyxnQkFBZ0JBLEdBQUUsSUFBSSxJQUFJLElBQUk7QUFDckMsK0JBQXlCO0FBQUEsSUFDM0I7QUFBQSxFQUNGO0FBR0EsTUFBSSxnQkFBZ0I7QUFDcEIsTUFBTSxhQUFhO0FBR25CLE1BQUksd0JBQXdCO0FBRTVCLFdBQVMsZUFBZSxLQUFLO0FBQzNCLG9CQUFnQjtBQUNoQixVQUFNQSxNQUFLLE9BQU8seUJBQXlCLENBQUMsR0FBRyxHQUFHO0FBQ2xELFFBQUksQ0FBQ0EsR0FBRztBQUNSLFVBQU0sS0FBSyxTQUFTLGVBQWUsV0FBVyxHQUFHLEVBQUU7QUFDbkQsUUFBSSxDQUFDLEdBQUk7QUFDVCxRQUFJLENBQUMsT0FBTyxtQkFBbUIsT0FBTyxPQUFPLG9CQUFvQixVQUFVO0FBQ3pFLGFBQU8sa0JBQWtCLENBQUM7QUFBQSxJQUM1QjtBQUNBLFdBQU8sZ0JBQWdCQSxHQUFFLElBQUksSUFBSSxHQUFHO0FBR3BDLGlCQUFhLHFCQUFxQjtBQUNsQyw0QkFBd0IsV0FBVyxNQUFNLHlCQUF5QixHQUFHLEdBQUc7QUFBQSxFQUMxRTtBQUVBLFdBQVMsa0JBQWtCO0FBQ3pCLFVBQU0sS0FBSyxPQUFPLHlCQUF5QixDQUFDO0FBQzVDLFVBQU0sZ0JBQWdCLE9BQU8sbUJBQW1CLENBQUM7QUFDakQsVUFBTSxhQUFhLGdCQUFnQjtBQUNuQyxVQUFNLFdBQWEsS0FBSyxJQUFJLGFBQWEsWUFBWSxHQUFHLE1BQU07QUFHOUQsVUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDQSxJQUFHLFFBQVE7QUFDckMsVUFBSSxPQUFPLGNBQWMsTUFBTSxVQUFVO0FBQ3ZDLGNBQU0sS0FBSyxTQUFTLGVBQWUsV0FBVyxHQUFHLEVBQUU7QUFDbkQsZUFBTyxLQUFLLEdBQUcsTUFBTSxLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUMsRUFBRSxjQUFjQSxHQUFFLElBQUksS0FBSyxJQUFJLEtBQUs7QUFBQSxNQUNoRjtBQUNBLGFBQU8sQ0FBQyxFQUFFLGNBQWNBLEdBQUUsSUFBSSxLQUFLLElBQUksS0FBSztBQUFBLElBQzlDLENBQUMsRUFBRTtBQUVILFVBQU0sZ0JBQWdCLEdBQUcsTUFBTSxZQUFZLFFBQVEsRUFBRSxPQUFPLENBQUNBLElBQUcsT0FBTztBQUNyRSxZQUFNLEtBQUssU0FBUyxlQUFlLFdBQVcsYUFBYSxFQUFFLEVBQUU7QUFDL0QsYUFBTyxLQUFLLEdBQUcsTUFBTSxLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUMsRUFBRSxjQUFjQSxHQUFFLElBQUksS0FBSyxJQUFJLEtBQUs7QUFBQSxJQUNoRixDQUFDLEVBQUU7QUFFSCxVQUFNLFlBQWEsS0FBSyxLQUFLLEdBQUcsU0FBUyxVQUFVO0FBQ25ELFVBQU0sYUFBYSxZQUFZLElBQzNCLFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxTQUFTLEtBQzFDLEdBQUcsR0FBRyxNQUFNLFlBQVksR0FBRyxTQUFTLElBQUksTUFBTSxFQUFFO0FBRXBELFVBQU0sYUFBYSxTQUFTLGVBQWUsWUFBWTtBQUN2RCxRQUFJLFlBQVk7QUFDZCxpQkFBVyxjQUFjLEdBQUcsVUFBVSxXQUFNLFFBQVEsT0FBTyxHQUFHLE1BQU07QUFBQSxJQUN0RTtBQUNBLFVBQU0sWUFBWSxTQUFTLGVBQWUsY0FBYztBQUN4RCxRQUFJLFdBQVc7QUFDYixZQUFNLG1CQUFtQixXQUFXO0FBQ3BDLGdCQUFVLFdBQVcsZ0JBQWdCO0FBQUEsSUFDdkM7QUFBQSxFQUNGO0FBRUEsaUJBQWUsbUJBQW1CO0FBbUJoQyxVQUFNLEtBQUssT0FBTyx5QkFBeUIsQ0FBQztBQUM1QyxPQUFHLFFBQVEsQ0FBQ0EsSUFBRyxRQUFRO0FBQ3JCLFlBQU0sS0FBSyxTQUFTLGVBQWUsV0FBVyxHQUFHLEVBQUU7QUFDbkQsVUFBSSxNQUFNLEdBQUcsTUFBTSxLQUFLLEdBQUc7QUFDekIsZUFBTyxnQkFBZ0JBLEdBQUUsSUFBSSxJQUFJLEdBQUcsTUFBTSxLQUFLO0FBQUEsTUFDakQ7QUFBQSxJQUNGLENBQUM7QUFDRCxVQUFNLHlCQUF5QjtBQUUvQixVQUFNLE1BQU0sU0FBUyxlQUFlLGNBQWM7QUFDbEQsUUFBSSxLQUFLO0FBQ1AsVUFBSSxXQUFXO0FBQ2YsVUFBSSxZQUFZO0FBQUEsSUFDbEI7QUFFQSxRQUFJO0FBQ0Ysb0JBQWMsYUFBYSxxQkFBZ0IsR0FBRyxNQUFNLFVBQVUsR0FBRyxTQUFTLElBQUksTUFBTSxFQUFFLHdEQUFtRDtBQUN6SSxZQUFNLFdBQVcsMEJBQTBCO0FBQUEsSUFDN0MsVUFBRTtBQUNBLFVBQUksS0FBSztBQUNQLFlBQUksV0FBVztBQUNmLFlBQUksWUFBWTtBQUFBLE1BQ2xCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGVBQWUsS0FBSyxTQUFTO0FBQ3BDLFVBQU0sTUFBTSxTQUFTLGNBQWMsV0FBVyxHQUFHLGdCQUFnQjtBQUNqRSxRQUFJLENBQUMsSUFBSztBQUNWLFFBQUksUUFBUSxTQUFTLGVBQWUsZUFBZSxHQUFHLEVBQUU7QUFDeEQsUUFBSSxDQUFDLFNBQVM7QUFDWixVQUFJLE1BQU8sT0FBTSxPQUFPO0FBQ3hCO0FBQUEsSUFDRjtBQUNBLFFBQUksQ0FBQyxPQUFPO0FBQ1YsY0FBUSxTQUFTLGNBQWMsS0FBSztBQUNwQyxZQUFNLEtBQUssZUFBZSxHQUFHO0FBQzdCLFlBQU0sWUFBWTtBQUNsQixVQUFJLHNCQUFzQixZQUFZLEtBQUs7QUFBQSxJQUM3QztBQUNBLFVBQU0sY0FBYyxVQUFLLE9BQU87QUFBQSxFQUNsQztBQUdBLFdBQVMsbUJBQW1CO0FBQUUseUJBQXFCO0FBQUEsRUFBRztBQUV0RCxXQUFTSSx3QkFBdUIsU0FBUztBQUN2QyxRQUFJLENBQUMsT0FBTyx5QkFBeUIsT0FBTyxzQkFBc0IsV0FBVyxFQUFHLFFBQU87QUFDdkYsUUFBSSxDQUFDLE9BQU8sMkJBQTRCLFFBQU87QUFDL0MsVUFBTSxNQUFNLE9BQU8sd0JBQXdCO0FBQzNDLFVBQU1KLEtBQUksT0FBTyxzQkFBc0IsR0FBRztBQUMxQyxRQUFJLENBQUNBLEdBQUcsUUFBTztBQUNmLFdBQU8sZ0JBQWdCQSxHQUFFLElBQUksSUFBSTtBQUNqQyxXQUFPLDZCQUE2QjtBQUNwQyxXQUFPLHVCQUF1QixNQUFNO0FBQ3BDLDZCQUF5QjtBQUN6Qix5QkFBcUI7QUFDckIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLDhCQUE4QjtBQUNyQyxXQUFPLDZCQUE2QjtBQUNwQyxrQkFBYyxhQUFhLG1GQUFvRjtBQUFBLEVBQ2pIOzs7QUNqZEE7QUFBQTtBQUFBO0FBQUE7QUFNQSxXQUFTLGVBQWU7QUFDdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRVDs7O0FDZkE7QUFBQTtBQUFBO0FBQUEsc0NBQUFLO0FBQUEsSUFBQTtBQUFBLG9DQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBcUJBLE1BQU1DLFFBQU0sVUFBVSxtQkFBbUI7QUFLekMsV0FBU0MscUNBQW9DLE9BQU8sTUFBTTtBQUN4RCxRQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sUUFBUSxLQUFLLDBCQUEwQixFQUFHLFFBQU87QUFDckUsV0FBTyxLQUFLLDJCQUEyQixLQUFLLENBQUMsUUFBUSxPQUFPLEtBQUssTUFBTSxLQUFLLGlCQUFpQixFQUFFLE1BQU0sT0FBTyxLQUFLLENBQUMsS0FBSztBQUFBLEVBQ3pIO0FBRUEsV0FBUyw2QkFBNkIsT0FBTztBQUMzQyxRQUFJLENBQUMsTUFBTSxRQUFRLEtBQUssS0FBSyxNQUFNLFNBQVMsRUFBRyxRQUFPO0FBQ3RELFdBQU8sTUFBTSxJQUFJLENBQUMsUUFBUSxPQUFPLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTTtBQUFBLEVBQ2hFO0FBSUEsaUJBQWUscUJBQXFCLE9BQU87QUFDekMsUUFBSTtBQUNGLFlBQU0sTUFBTSxNQUFNLE1BQU0sMkJBQTJCO0FBQUEsUUFDakQsUUFBUTtBQUFBLFFBQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxRQUM5QyxNQUFNLEtBQUssVUFBVSxFQUFFLGVBQWUsTUFBTSxDQUFDO0FBQUEsTUFDL0MsQ0FBQztBQUVELFVBQUksSUFBSSxJQUFJO0FBQ1YsY0FBTSxPQUFPLE1BQU0sSUFBSSxLQUFLO0FBQzVCLGVBQU8sS0FBSyxjQUFjO0FBQUEsTUFDNUIsT0FBTztBQUNMLFFBQUFELE1BQUksS0FBSywwQ0FBMEMsS0FBSztBQUN4RCxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0YsU0FBUyxPQUFPO0FBQ2QsTUFBQUEsTUFBSSxLQUFLLHNDQUFzQyxLQUFLO0FBQ3BELGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUdBLFdBQVMsa0JBQWtCO0FBQ3pCLFFBQUk7QUFDRixZQUFNLE1BQU0sSUFBSSxnQkFBZ0IsT0FBTyxTQUFTLE1BQU0sRUFBRSxJQUFJLFNBQVM7QUFDckUsYUFBTyxNQUFNLFlBQVksR0FBRyxLQUFLO0FBQUEsSUFDbkMsU0FBU0UsSUFBRztBQUFFLGFBQU87QUFBQSxJQUFNO0FBQUEsRUFDN0I7QUFDQSxXQUFTLGlCQUFpQixnQkFBZ0I7QUFDeEMsVUFBTSxNQUFNLGdCQUFnQjtBQUM1QixRQUFJLENBQUMsSUFBSztBQUNWLFFBQUk7QUFBRSxtQkFBYSxRQUFRLEtBQUssS0FBSyxVQUFVLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztBQUFBLElBQUcsU0FBU0EsSUFBRztBQUFBLElBQUM7QUFBQSxFQUNyRjtBQUNBLFdBQVMsa0JBQWtCO0FBQ3pCLFVBQU0sTUFBTSxnQkFBZ0I7QUFDNUIsUUFBSSxDQUFDLElBQUssUUFBTztBQUNqQixRQUFJO0FBQ0YsWUFBTSxNQUFNLGFBQWEsUUFBUSxHQUFHO0FBQ3BDLGFBQU8sTUFBTSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxJQUFJO0FBQUEsSUFDMUMsU0FBU0EsSUFBRztBQUFFLGFBQU87QUFBQSxJQUFNO0FBQUEsRUFDN0I7QUFJQSxpQkFBZUMsOEJBQTZCO0FBQzFDLFVBQU0sT0FBTyxPQUFPO0FBQ3BCLFVBQU0sWUFBWSxTQUFTLGVBQWUsNEJBQTRCO0FBQ3RFLFFBQUksQ0FBQyxVQUFXO0FBRWhCLGNBQVUsWUFBWTtBQUV0QixRQUFJLG1CQUFtQixDQUFDO0FBQ3hCLFFBQUksZ0JBQWdCLENBQUM7QUFDckIsUUFBSTtBQUNGLFlBQU0sWUFBWSxNQUFNLE1BQU0sYUFBYTtBQUMzQyxZQUFNLGFBQWEsb0JBQW9CLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFDN0QseUJBQW1CLFdBQVcsc0JBQXNCLEtBQUssMkJBQTJCLENBQUM7QUFDckYsc0JBQW1CLE1BQU0sUUFBUSxXQUFXLG9CQUFvQixJQUFJLFdBQVcsdUJBQXVCLENBQUM7QUFBQSxJQUN6RyxTQUFTLE9BQU87QUFDZCx5QkFBbUIsS0FBSywyQkFBMkIsQ0FBQztBQUFBLElBQ3REO0FBRUEsVUFBTSxpQkFBaUIsSUFBSSxJQUFJLEtBQUssMkJBQTJCLENBQUMsQ0FBQztBQUdqRSxVQUFNLHlCQUF5QixDQUFDO0FBQ2hDLGVBQVcsU0FBUyxrQkFBa0I7QUFDcEMsWUFBTSxVQUFVLE1BQU0scUJBQXFCLEtBQUs7QUFDaEQsNkJBQXVCLEtBQUssRUFBRSxJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQUEsSUFDcEQ7QUFLQSxRQUFJLENBQUMsT0FBTyxxQkFBcUI7QUFDL0IsVUFBSSxjQUFjLFNBQVMsR0FBRztBQUU1QixjQUFNLFdBQVcsT0FBTyxZQUFZLGNBQWMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekUsK0JBQXVCLEtBQUssQ0FBQyxHQUFHQyxPQUFNO0FBQ3BDLGdCQUFNLEtBQUssU0FBUyxFQUFFLEVBQUUsS0FBSyxjQUFjO0FBQzNDLGdCQUFNLEtBQUssU0FBU0EsR0FBRSxFQUFFLEtBQUssY0FBYztBQUMzQyxpQkFBTyxLQUFLO0FBQUEsUUFDZCxDQUFDO0FBQUEsTUFDSCxPQUFPO0FBRUwsY0FBTSxlQUFlLEVBQUUsV0FBVyxHQUFHLFNBQVMsR0FBRyxnQkFBZ0IsR0FBRyxTQUFTLEVBQUU7QUFDL0UsY0FBTSxlQUFlLENBQUMsUUFBUTtBQUM1QixnQkFBTSxPQUFPLElBQUksU0FBUyxZQUFZLElBQUksU0FBUyxPQUFPLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDakYsY0FBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLFdBQVcsT0FBTyxTQUFTLEVBQUUsU0FBUyxHQUFHLEVBQUcsUUFBTztBQUMzRSxjQUFJLFVBQVUsS0FBSyxHQUFHLEVBQUcsUUFBTyxNQUFNO0FBQ3RDLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGNBQU0saUJBQWlCLENBQUMsUUFBUTtBQUM5QixnQkFBTSxNQUFNLDRCQUE0QixJQUFJLElBQUksSUFBSTtBQUNwRCxjQUFJLENBQUMsSUFBSyxRQUFPO0FBQ2pCLGNBQUksUUFBUSxZQUFnQixRQUFPO0FBQ25DLGNBQUksUUFBUSxVQUFnQixRQUFPO0FBQ25DLGNBQUksUUFBUSxlQUFnQixRQUFPO0FBQ25DLGNBQUksUUFBUSxPQUFnQixRQUFPO0FBQ25DLGlCQUFPO0FBQUEsUUFDVDtBQUNBLCtCQUF1QixLQUFLLENBQUMsR0FBR0EsT0FBTTtBQUNwQyxnQkFBTSxXQUFXLGVBQWUsQ0FBQyxJQUFJLGVBQWVBLEVBQUM7QUFDckQsY0FBSSxhQUFhLEVBQUcsUUFBTztBQUMzQixpQkFBTyxhQUFhQSxFQUFDLEVBQUUsY0FBYyxhQUFhLENBQUMsQ0FBQztBQUFBLFFBQ3RELENBQUM7QUFBQSxNQUNIO0FBQ0EsYUFBTyxzQkFBc0I7QUFBQSxJQUMvQixPQUFPO0FBRUwsWUFBTSxXQUFXLElBQUksSUFBSSxPQUFPLG9CQUFvQixJQUFJLE9BQUssRUFBRSxFQUFFLENBQUM7QUFDbEUsaUJBQVcsT0FBTyx3QkFBd0I7QUFDeEMsWUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUUsRUFBRyxRQUFPLG9CQUFvQixLQUFLLEdBQUc7QUFBQSxNQUNoRTtBQUFBLElBQ0Y7QUFHQSxVQUFNLGNBQWMsZ0JBQWdCO0FBQ3BDLFVBQU0scUJBQXFCLGNBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsY0FBYyxFQUFFLE9BQU8sUUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUM5RCxvQkFBSSxJQUFJO0FBQ1oscUJBQWlCLGNBQWM7QUFHL0IsVUFBTSxlQUFlLE9BQU8saUJBQWlCLHdCQUF3QixDQUFDO0FBQ3RFLGVBQVcsRUFBRSxJQUFJLE1BQU0sS0FBSyxPQUFPLHFCQUFxQjtBQUN0RCxZQUFNLGlCQUFpQiw0QkFBNEIsT0FBTyxJQUFJO0FBQzlELFlBQU0sZ0JBQWlCLGVBQWUsSUFBSSxLQUFLO0FBQy9DLFVBQUksZ0JBQWdCO0FBQ3BCLFVBQVMsbUJBQW1CLFlBQWdCLGlCQUFnQjtBQUFBLGVBQ25ELG1CQUFtQixVQUFnQixpQkFBZ0I7QUFBQSxlQUNuRCxtQkFBbUIsZUFBZ0IsaUJBQWdCO0FBQUEsZUFDbkQsbUJBQW1CLE9BQWdCLGlCQUFnQjtBQUFBLGVBQ25ELGNBQW1DLGlCQUFnQjtBQUM1RCxxQkFBZSxZQUFZLEtBQUssSUFBSSxhQUFhLEtBQUssS0FBSztBQUFBLElBQzdEO0FBRUEsMkJBQXVCLFdBQVcsZ0JBQWdCLE1BQU0sa0JBQWtCO0FBQUEsRUFDNUU7QUFJQSxXQUFTLHVCQUF1QixXQUFXLGdCQUFnQixNQUFNLHFCQUFxQixvQkFBSSxJQUFJLEdBQUc7QUFDL0YsUUFBSSxDQUFDLFVBQVcsYUFBWSxTQUFTLGVBQWUsNEJBQTRCO0FBQ2hGLFFBQUksQ0FBQyxVQUFXO0FBQ2hCLFFBQUksQ0FBQyxlQUFnQixrQkFBaUIsSUFBSSxJQUFLLE9BQU8sd0JBQXdCLDJCQUE0QixDQUFDLENBQUM7QUFDNUcsUUFBSSxDQUFDLEtBQU0sUUFBTyxPQUFPO0FBR3pCLFFBQUksRUFBRSxHQUFHLFVBQVUsWUFBWSwwQkFBMEIsR0FBRztBQUMxRCxRQUFFLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxRQUFRO0FBQUEsSUFDcEQ7QUFFQSxVQUFNLE9BQU8sT0FBTyx1QkFBdUIsQ0FBQztBQUM1QyxRQUFJLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVoQixTQUFLLFFBQVEsQ0FBQyxFQUFFLElBQUksT0FBTyxRQUFRLEdBQUcsV0FBVztBQUMvQyxZQUFNLGlCQUFvQiw0QkFBNEIsT0FBTyxJQUFJO0FBQ2pFLFlBQU0sYUFBb0IsbUJBQW1CLE9BQU8sSUFBSTtBQUN4RCxZQUFNLFlBQW9CLHVCQUF1QixPQUFPLElBQUk7QUFDNUQsWUFBTSxZQUFvQkgscUNBQW9DLE9BQU8sSUFBSTtBQUN6RSxZQUFNLGNBQW9CLGFBQWEsT0FBTyxVQUFVLGlCQUFpQixXQUFXLFVBQVUsZUFBZTtBQUM3RyxZQUFNLHFCQUFxQiw2QkFBNkIsYUFBYSxLQUFLO0FBQzFFLFlBQU0sUUFBb0IsVUFBVSxRQUFRLFFBQVU7QUFDdEQsWUFBTSxVQUFvQixVQUFVLFFBQVEsVUFBVTtBQUN0RCxZQUFNLFlBQW9CLFNBQVMsY0FBYztBQUNqRCxZQUFNLFVBQW9CLFNBQVMsWUFBYztBQUNqRCxZQUFNLFdBQW9CLFlBQVksR0FBRyxTQUFTLE1BQU0sT0FBTyxLQUFNLFNBQVMsWUFBWTtBQUMxRixZQUFNLGdCQUFvQixlQUFlLFlBQVksS0FBSyxLQUFLO0FBQy9ELFlBQU0scUJBQXFCLGtCQUFrQjtBQUM3QyxZQUFNLGtCQUFvQiw0Q0FBNEMsV0FBVyxLQUFLLEtBQUssV0FBVyxJQUFJO0FBQzFHLFlBQU0sb0JBQW9CLENBQUMsYUFBYSxtRkFBbUY7QUFDM0gsVUFBSSxtQkFBb0IsbUJBQWtCLEtBQUssMkJBQTJCLGtCQUFrQixHQUFHO0FBQy9GLFVBQUksYUFBYSxVQUFXLG1CQUFrQixLQUFLLE9BQU8sWUFBWSxTQUFTLENBQUM7QUFDaEYsVUFBSSxhQUFhLFdBQVksbUJBQWtCLEtBQUssZUFBZSxZQUFZLFVBQVUsRUFBRTtBQUMzRixVQUFJLGFBQWEsbUJBQW9CLG1CQUFrQixLQUFLLHVCQUF1QixZQUFZLGtCQUFrQixFQUFFO0FBQ25ILFlBQU0sZ0JBQW9CLGtCQUFrQixLQUFLLEdBQUc7QUFDcEQsWUFBTSxVQUFvQixXQUFXO0FBQ3JDLFlBQU0sU0FBb0IsV0FBVyxLQUFLLFNBQVM7QUFDbkQsWUFBTSxXQUFvQixXQUFXLEtBQUs7QUFDMUMsWUFBTSxnQkFBZ0IsbUJBQW1CLElBQUksS0FBSyxJQUM5Qyx3SEFDQTtBQUVKLG1CQUFhO0FBQUEseUJBQ1EsS0FBSyxzQkFBc0IsU0FBUztBQUFBO0FBQUEsb0JBRXpDLFFBQVEsWUFBWSxhQUFhO0FBQUEseUNBQ1osV0FBVyxPQUFPLENBQUM7QUFBQTtBQUFBLDBDQUVsQixXQUFXLFFBQVEsQ0FBQztBQUFBLHNCQUN4QyxXQUFXLGtCQUFrQixDQUFDO0FBQUEsY0FDdEMsZUFBZTtBQUFBLDhDQUNpQixXQUFXLGFBQWEsQ0FBQztBQUFBO0FBQUEsb0NBRW5DLGtCQUFrQixjQUFpQixXQUFXLEVBQUUsc0RBQXNELFFBQVEseUJBQXlCLGtCQUFrQixXQUFXO0FBQUEsb0NBQ3BLLGtCQUFrQixZQUFpQixXQUFXLEVBQUUsb0RBQW9ELFFBQVEsMkJBQTJCLGtCQUFrQixTQUFTO0FBQUEsb0NBQ2xLLGtCQUFrQixpQkFBaUIsV0FBVyxFQUFFLHlEQUF5RCxRQUFRLHNCQUFzQixrQkFBa0IsY0FBYztBQUFBLG9DQUN2SyxrQkFBa0IsWUFBaUIsV0FBVyxFQUFFLG9EQUFvRCxRQUFRLDJCQUEyQixrQkFBa0IsU0FBUyw4RUFBeUUsYUFBYSxDQUFDO0FBQUEsMkZBQ2xNLFFBQVEsWUFBWSxxQkFBcUIsNkNBQTZDLGtCQUFrQixNQUFNLHVCQUF1QjtBQUFBLDZFQUNuSixRQUFRLDJDQUEyQyxVQUFVLGFBQWEsRUFBRTtBQUFBLDZFQUM1RSxRQUFRLDJDQUEyQyxTQUFVLGFBQWEsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSXZKLENBQUM7QUFFRCxpQkFBYTtBQUNiLGNBQVUsWUFBWTtBQUd0QixjQUFVLGNBQWMsZ0NBQWdDLEdBQUcsaUJBQWlCLFNBQVMsT0FBSztBQUN4RixZQUFNLE1BQU0sRUFBRSxPQUFPLFFBQVEsV0FBVztBQUN4QyxVQUFJLENBQUMsSUFBSztBQUNWLFlBQU0sS0FBSyxJQUFJLFFBQVEsaUJBQWlCO0FBQ3hDLFVBQUksQ0FBQyxHQUFJO0FBQ1QsWUFBTSxRQUFTLEdBQUcsUUFBUTtBQUMxQixZQUFNLFNBQVMsSUFBSSxRQUFRO0FBQzNCLFVBQUksV0FBVyxXQUFXO0FBQ3hCLFVBQUUsZ0JBQWdCO0FBQ2xCLGNBQU0sVUFBVSxHQUFHLGNBQWMsUUFBUTtBQUN6QywwQkFBa0IsT0FBTyxVQUFVLFFBQVEsY0FBYyxFQUFFO0FBQUEsTUFDN0QsV0FBVyxXQUFXLFVBQVU7QUFDOUIsVUFBRSxnQkFBZ0I7QUFDbEIsMEJBQWtCLE9BQU8sRUFBRTtBQUFBLE1BQzdCLFdBQVcsV0FBVyxZQUFZO0FBQ2hDLFVBQUUsZ0JBQWdCO0FBQ2xCLDBCQUFrQixPQUFPLENBQUU7QUFBQSxNQUM3QixXQUFXLFFBQVE7QUFDakIsMEJBQWtCLE9BQU8sUUFBUSxZQUFZO0FBQUEsTUFDL0M7QUFBQSxJQUNGLENBQUM7QUFHRCxVQUFNLGFBQWEsU0FBUyxjQUFjLEtBQUs7QUFDL0MsZUFBVyxZQUFZO0FBQ3ZCLGVBQVcsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNkZBS29FLGFBQWEsQ0FBQztBQUFBO0FBRXpHLGNBQVUsYUFBYSxZQUFZLFVBQVUsVUFBVTtBQUd2RCxNQUFFLDBCQUEwQixFQUFFLFVBQVU7QUFBQSxNQUN0QyxRQUFRO0FBQUEsTUFDUixPQUFPLENBQUM7QUFBQSxNQUNSLFVBQVUsRUFBRSxRQUFRLHNCQUFzQjtBQUFBLElBQzVDLENBQUM7QUFDRCx3QkFBb0I7QUFBQSxFQUN0QjtBQUlBLFdBQVMsa0JBQWtCLE9BQU8sV0FBVztBQUMzQyxVQUFNLE1BQU0sT0FBTztBQUNuQixRQUFJLENBQUMsSUFBSztBQUNWLFVBQU0sTUFBTSxJQUFJLFVBQVUsT0FBSyxFQUFFLE9BQU8sS0FBSztBQUM3QyxRQUFJLE1BQU0sRUFBRztBQUNiLFVBQU0sU0FBUyxNQUFNO0FBQ3JCLFFBQUksU0FBUyxLQUFLLFVBQVUsSUFBSSxPQUFRO0FBQ3hDLEtBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ2hELFdBQU8sc0JBQXNCO0FBQzdCLDJCQUF1QixNQUFNLE1BQU0sSUFBSTtBQUV2QyxVQUFNLHFCQUFxQjtBQUFBLE1BQ3pCLFFBQVE7QUFBQSxNQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsTUFDOUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxNQUFNLGNBQWMsYUFBYSxJQUFJLElBQUksT0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQUEsSUFDOUUsQ0FBQyxFQUFFLE1BQU0sTUFBTTtBQUFBLElBQUMsQ0FBQztBQUFBLEVBQ25CO0FBSUEsaUJBQWVJLDBCQUF5QixTQUFTO0FBQy9DLFdBQU8sK0JBQStCO0FBQ3RDLFVBQU0sV0FBVyxRQUFRLFlBQVk7QUFFckMsUUFBSSxTQUFTLFNBQVMsS0FBSyxHQUFHO0FBQzVCLG9CQUFjLGFBQWEsa0RBQW1EO0FBQUEsSUFDaEYsV0FBVyxTQUFTLFNBQVMsSUFBSSxHQUFHO0FBQ2xDLG9CQUFjLGFBQWEsNkRBQThEO0FBQUEsSUFDM0YsV0FBVyxTQUFTLFNBQVMsT0FBTyxHQUFHO0FBQ3JDLG9CQUFjLGFBQWEseUNBQTBDO0FBQUEsSUFDdkUsT0FBTztBQUNMLG9CQUFjLGFBQWEsNkNBQThDO0FBQUEsSUFDM0U7QUFHQSxlQUFXLE1BQU0sbUJBQW1CLEdBQUcsR0FBRztBQUFBLEVBQzVDO0FBSUEsaUJBQWUsNEJBQTRCO0FBa0J6QyxVQUFNLFlBQVksZUFBZTtBQUNqQyxVQUFNLFFBQVEsT0FBTyxLQUFLLFNBQVMsRUFBRTtBQUVyQyxRQUFJLFVBQVUsR0FBRztBQUNmLHFCQUFlLGlCQUFpQixzRUFBc0U7QUFDdEc7QUFBQSxJQUNGO0FBRUEsUUFBSTtBQUNGLFlBQU0sV0FBVyxNQUFNLE1BQU0seUJBQXlCO0FBQUEsUUFDcEQsUUFBUTtBQUFBLFFBQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxRQUM5QyxNQUFNLEtBQUssVUFBVTtBQUFBLFVBQ25CLE1BQU07QUFBQSxVQUNOO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsVUFBSSxTQUFTLElBQUk7QUFDZixRQUFBQyxjQUFhLG1CQUFtQjtBQUNoQyxrQkFBVSwrQkFBK0IsS0FBSyxTQUFTO0FBQ3ZELDJCQUFtQjtBQUVuQixlQUFPLGtCQUFrQixPQUFPLG1CQUFtQixDQUFDO0FBQ3BELGVBQU8sZ0JBQWdCLHVCQUF1QjtBQUM5Qyx1QkFBZSxjQUFjLEVBQUUsR0FBRyxVQUFVO0FBQzVDLFlBQUksT0FBTywwQkFBMEIsV0FBWSx1QkFBc0I7QUFDdkUsa0JBQVUsWUFBWTtBQUFBLE1BQ3hCLE9BQU87QUFDTCxjQUFNLFFBQVEsTUFBTSxTQUFTLEtBQUs7QUFDbEMsa0JBQVUsVUFBVSxNQUFNLFNBQVMsMEJBQTBCLElBQUksT0FBTztBQUFBLE1BQzFFO0FBQUEsSUFDRixTQUFTLE9BQU87QUFDZCxNQUFBTixNQUFJLE1BQU0sMENBQTBDLEtBQUs7QUFDekQsZ0JBQVUsK0NBQStDLE9BQU87QUFBQSxJQUNsRTtBQUFBLEVBQ0Y7OztBQ2paQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsa0NBQUFPO0FBQUEsSUFBQSw0QkFBQUM7QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFCQSxNQUFNQyxRQUFNLFVBQVUsZUFBZTtBQU9yQyxXQUFTLGtCQUFrQixLQUFLO0FBQzlCLFFBQUksQ0FBQyxJQUFLLFFBQU87QUFDakIsVUFBTSxJQUFJLE9BQU8sR0FBRyxFQUFFLFlBQVksRUFBRSxLQUFLO0FBQ3pDLFFBQUksQ0FBQyxXQUFXLFdBQVcsT0FBTyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUcsU0FBTyxvQkFBSSxLQUFLLEdBQUUsWUFBWTtBQUN4RixVQUFNQyxLQUFJLEVBQUUsTUFBTSxrQkFBa0I7QUFDcEMsV0FBT0EsS0FBSSxTQUFTQSxHQUFFLENBQUMsR0FBRyxFQUFFLElBQUk7QUFBQSxFQUNsQztBQU9BLFdBQVMscUJBQXFCLEtBQUssZ0JBQWdCO0FBQ2pELFVBQU0sUUFBUSxJQUFJLEtBQUssT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFBQyxPQUFLLE9BQU9BLEVBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLE9BQU8sQ0FBQztBQUM1RSxRQUFJLE1BQU0sU0FBUyxFQUFHLFFBQU87QUFDN0IsUUFBSSxRQUFRO0FBQ1osVUFBTSxlQUFjLG9CQUFJLEtBQUssR0FBRSxZQUFZO0FBQzNDLGVBQVcsT0FBUSxrQkFBa0IsQ0FBQyxHQUFJO0FBQ3hDLFVBQUksQ0FBQyxPQUFPLE9BQU8sUUFBUSxTQUFVO0FBQ3JDLFlBQU0sUUFBUSxPQUFPLElBQUksTUFBTSxFQUFFLEVBQUUsS0FBSztBQUN4QyxVQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssRUFBRztBQUN2QixZQUFNLFlBQVksa0JBQWtCLElBQUksY0FBYyxJQUFJLEtBQUs7QUFDL0QsWUFBTSxVQUFZLGtCQUFrQixJQUFJLFlBQWMsSUFBSSxHQUFHLEtBQUs7QUFDbEUsZUFBUyxhQUFhLE9BQU8sSUFBSSxLQUFLLElBQUksR0FBRyxVQUFVLFlBQVksQ0FBQztBQUFBLElBQ3RFO0FBQ0EsV0FBTyxRQUFRLElBQUksUUFBUTtBQUFBLEVBQzdCO0FBRUEsaUJBQWUsdUJBQXVCLFdBQVcsV0FBVztBQUMxRCxVQUFNLGtCQUFrQixhQUFhLE9BQU8sT0FBTyxPQUFPLFNBQVMsRUFBRSxLQUFLLEtBQUs7QUFDL0UsVUFBTSxNQUFNLE9BQU8sa0JBQWtCLENBQUMsR0FBRyxLQUFLLFFBQU0sT0FBTyxNQUFNLFdBQVcsSUFBSSxFQUFFLFFBQVEsT0FBTyxTQUFTO0FBQzFHLFFBQUksTUFBTSxPQUFPLE9BQU8sU0FBVSxJQUFHLFFBQVEsbUJBQW1CO0FBRWhFLFVBQU0sV0FBVyxNQUFNLE1BQU0sMkJBQTJCO0FBQUEsTUFDdEQsUUFBUTtBQUFBLE1BQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxNQUM5QyxNQUFNLEtBQUssVUFBVSxFQUFFLE9BQU8sV0FBVyxPQUFPLGdCQUFnQixDQUFDO0FBQUEsSUFDbkUsQ0FBQztBQUVELFFBQUksQ0FBQyxTQUFTLElBQUk7QUFDaEIsWUFBTSxRQUFRLE1BQU0sU0FBUyxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUMsRUFBRTtBQUNwRCxZQUFNLElBQUksTUFBTSxNQUFNLFNBQVMsNEJBQTRCO0FBQUEsSUFDN0Q7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLGlCQUFlLDBCQUEwQixXQUFXLGNBQWM7QUFDaEUsVUFBTSxxQkFBcUIsZ0JBQWdCLE9BQU8sT0FBTyxPQUFPLFlBQVksRUFBRSxLQUFLLEtBQUs7QUFDeEYsVUFBTSxNQUFNLE9BQU8sa0JBQWtCLENBQUMsR0FBRyxLQUFLLFFBQU0sT0FBTyxNQUFNLFdBQVcsSUFBSSxFQUFFLFFBQVEsT0FBTyxTQUFTO0FBQzFHLFFBQUksTUFBTSxPQUFPLE9BQU8sVUFBVTtBQUNoQyxVQUFJLG1CQUFvQixJQUFHLFdBQVc7QUFBQSxVQUNqQyxRQUFPLEdBQUc7QUFBQSxJQUNqQjtBQUVBLFVBQU0sV0FBVyxNQUFNLE1BQU0sOEJBQThCO0FBQUEsTUFDekQsUUFBUTtBQUFBLE1BQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxNQUM5QyxNQUFNLEtBQUssVUFBVSxFQUFFLE9BQU8sV0FBVyxVQUFVLG1CQUFtQixDQUFDO0FBQUEsSUFDekUsQ0FBQztBQUVELFFBQUksQ0FBQyxTQUFTLElBQUk7QUFDaEIsWUFBTSxRQUFRLE1BQU0sU0FBUyxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUMsRUFBRTtBQUNwRCxZQUFNLElBQUksTUFBTSxNQUFNLFNBQVMsK0JBQStCO0FBQUEsSUFDaEU7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLGlCQUFlLG9CQUFvQixhQUFhLGFBQWE7QUFDM0QsVUFBTSxnQkFBZ0IsT0FBTyxlQUFlLEVBQUUsRUFBRSxLQUFLO0FBQ3JELFVBQU0sZ0JBQWdCLE9BQU8sZUFBZSxFQUFFLEVBQUUsS0FBSztBQUVyRCxVQUFNLFdBQVcsTUFBTSxNQUFNLGdDQUFnQztBQUFBLE1BQzNELFFBQVE7QUFBQSxNQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsTUFDOUMsTUFBTSxLQUFLLFVBQVU7QUFBQSxRQUNuQixRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxjQUFjO0FBQUEsTUFDaEIsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUVELFFBQUksQ0FBQyxTQUFTLElBQUk7QUFDaEIsWUFBTSxRQUFRLE1BQU0sU0FBUyxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUMsRUFBRTtBQUNwRCxZQUFNLElBQUksTUFBTSxNQUFNLFNBQVMsaUNBQWlDO0FBQUEsSUFDbEU7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLGlCQUFlLHVCQUF1QixtQkFBbUI7QUFDdkQsVUFBTSxrQkFBa0IsTUFBTSxLQUFLLElBQUk7QUFBQSxPQUNwQyxxQkFBcUIsQ0FBQyxHQUNwQixJQUFJLGNBQVksT0FBTyxZQUFZLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFDN0MsT0FBTyxPQUFPO0FBQUEsSUFDbkIsQ0FBQztBQUVELFVBQU0sV0FBVyxNQUFNLE1BQU0sZ0NBQWdDO0FBQUEsTUFDM0QsUUFBUTtBQUFBLE1BQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxNQUM5QyxNQUFNLEtBQUssVUFBVTtBQUFBLFFBQ25CLFFBQVE7QUFBQSxRQUNSLG9CQUFvQjtBQUFBLE1BQ3RCLENBQUM7QUFBQSxJQUNILENBQUM7QUFFRCxRQUFJLENBQUMsU0FBUyxJQUFJO0FBQ2hCLFlBQU0sUUFBUSxNQUFNLFNBQVMsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDLEVBQUU7QUFDcEQsWUFBTSxJQUFJLE1BQU0sTUFBTSxTQUFTLHFDQUFxQztBQUFBLElBQ3RFO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLHlCQUF5QixPQUFPO0FBQ3ZDLFVBQU0sWUFBWSxNQUFNLFFBQVEsS0FBSyxJQUFJLFFBQVEsT0FBTyxTQUFTLEVBQUUsRUFBRSxNQUFNLEdBQUc7QUFDOUUsV0FBTyxNQUFNLEtBQUssSUFBSTtBQUFBLE1BQ3BCLFVBQ0csSUFBSSxVQUFRLE9BQU8sUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQ3JDLE9BQU8sT0FBTztBQUFBLElBQ25CLENBQUM7QUFBQSxFQUNIO0FBRUEsV0FBUyxXQUFXLE9BQU87QUFDekIsV0FBTyxPQUFPLFVBQVUsV0FBVyxRQUFRLE9BQU8sT0FBTyxRQUFRLFNBQVMsRUFBRSxFQUFFLEtBQUs7QUFBQSxFQUNyRjtBQUVBLFdBQVMsMEJBQTBCLFVBQVUsRUFBRSxjQUFjLE1BQU0sSUFBSSxDQUFDLEdBQUc7QUFDekUsUUFBSSxPQUFPLGFBQWEsVUFBVTtBQUNoQyxZQUFNQyxRQUFPLFNBQVMsS0FBSztBQUMzQixhQUFPQSxRQUFPLEVBQUUsTUFBQUEsT0FBTSxRQUFRLEtBQUssSUFBSTtBQUFBLElBQ3pDO0FBQ0EsUUFBSSxDQUFDLFlBQVksT0FBTyxhQUFhLFNBQVUsUUFBTztBQUV0RCxVQUFNLE9BQU8sT0FBTyxTQUFTLFFBQVEsRUFBRSxFQUFFLEtBQUs7QUFDOUMsUUFBSSxDQUFDLEtBQU0sUUFBTztBQUVsQixVQUFNLGFBQWE7QUFBQSxNQUNqQixHQUFHO0FBQUEsTUFDSDtBQUFBLE1BQ0EsUUFBUTtBQUFBLElBQ1Y7QUFDQSxVQUFNLFlBQVkseUJBQXlCLFNBQVMsYUFBYSxTQUFTLGNBQWMsQ0FBQyxDQUFDO0FBQzFGLFFBQUksVUFBVSxTQUFTLEVBQUcsWUFBVyxZQUFZO0FBQUEsUUFDNUMsUUFBTyxXQUFXO0FBRXZCLFFBQUksZUFBZSxTQUFTLGdCQUFnQixTQUFTLGdCQUFnQjtBQUNuRSxpQkFBVyxlQUFlO0FBQzFCLGlCQUFXLGlCQUFpQjtBQUFBLElBQzlCO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLGtCQUFrQixPQUFPO0FBQ2hDLFFBQUksQ0FBQyxTQUFTLE9BQU8sVUFBVSxTQUFVLFFBQU8sV0FBVyxLQUFLO0FBQ2hFLFVBQU0sT0FBTyxXQUFXLEtBQUs7QUFDN0IsVUFBTSxnQkFBZ0IsT0FBTyxNQUFNLGlCQUFpQixFQUFFLEVBQUUsS0FBSztBQUM3RCxRQUFJLGNBQWUsUUFBTyxHQUFHLElBQUksS0FBSyxhQUFhO0FBRW5ELFVBQU0saUJBQWlCLENBQUM7QUFDeEIsVUFBTSxjQUFjLE9BQU8sTUFBTSxlQUFlLEVBQUUsRUFBRSxLQUFLO0FBQ3pELFFBQUksWUFBYSxnQkFBZSxLQUFLLFlBQVksT0FBTyxDQUFDLEVBQUUsWUFBWSxJQUFJLFlBQVksTUFBTSxDQUFDLENBQUM7QUFDL0YsNkJBQXlCLE1BQU0sYUFBYSxNQUFNLGNBQWMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxVQUFRLGVBQWUsS0FBSyxJQUFJLENBQUM7QUFDN0csUUFBSSxlQUFlLFNBQVMsRUFBRyxRQUFPLEdBQUcsSUFBSSxLQUFLLGVBQWUsS0FBSyxJQUFJLENBQUM7QUFDM0UsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLCtCQUErQixXQUFXLE1BQU07QUFDdkQsUUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLFFBQVEsS0FBSyxxQkFBcUIsRUFBRyxRQUFPO0FBQ2hFLFdBQU8sS0FBSyxzQkFBc0IsS0FBSyxDQUFDLFFBQVE7QUFDOUMsWUFBTSxVQUFVLE9BQU8sS0FBSyxTQUFTLEtBQUssUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVk7QUFDekUsYUFBTyxZQUFZLE9BQU8sYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVk7QUFBQSxJQUNoRSxDQUFDLEtBQUs7QUFBQSxFQUNSO0FBRUEsV0FBUyw4QkFBOEIsS0FBSyxPQUFPO0FBQ2pELFVBQU0sV0FBVyxPQUFPLE9BQU8sSUFBSSxhQUFhLFdBQVcsSUFBSSxXQUFXO0FBQzFFLFFBQUksQ0FBQyxTQUFVLFFBQU87QUFFdEIsVUFBTSxrQkFBa0IsT0FBTyxVQUFVLFdBQVcsT0FBTyxNQUFNLFlBQVksRUFBRSxFQUFFLEtBQUssSUFBSTtBQUMxRixVQUFNLGVBQWUsT0FBTyxVQUFVLFdBQVcsT0FBTyxNQUFNLFNBQVMsRUFBRSxFQUFFLEtBQUssSUFBSTtBQUNwRixVQUFNLG9CQUFvQixPQUFPLFNBQVMsWUFBWSxFQUFFLEVBQUUsS0FBSztBQUMvRCxVQUFNLGlCQUFpQixPQUFPLFNBQVMsU0FBUyxFQUFFLEVBQUUsS0FBSztBQUN6RCxVQUFNLGtCQUFrQixRQUFRLHFCQUFxQixzQkFBc0IsZUFBZTtBQUMxRixVQUFNLGVBQWUsUUFBUSxrQkFBa0IsbUJBQW1CLFlBQVk7QUFFOUUsUUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWMsUUFBTztBQUU5QyxVQUFNLGNBQWMsQ0FBQztBQUNyQixRQUFJLGlCQUFpQjtBQUNuQixrQkFBWSxLQUFLLGFBQWEsbUJBQW1CLGVBQWUsT0FBTyxpQkFBaUIsRUFBRTtBQUFBLElBQzVGO0FBQ0EsUUFBSSxjQUFjO0FBQ2hCLGtCQUFZLEtBQUssVUFBVSxnQkFBZ0IsTUFBTSxPQUFPLGNBQWMsRUFBRTtBQUFBLElBQzFFO0FBRUEsV0FBTztBQUFBLE1BQ0wsVUFBVTtBQUFBLE1BQ1YsT0FBTztBQUFBLE1BQ1A7QUFBQSxNQUNBO0FBQUEsTUFDQSxZQUFZLFlBQVksS0FBSyxLQUFLO0FBQUEsTUFDbEMsV0FBVyxPQUFPLFNBQVMsYUFBYSxFQUFFLEVBQUUsS0FBSztBQUFBLE1BQ2pELFdBQVcsT0FBTyxTQUFTLGNBQWMsRUFBRSxFQUFFLEtBQUs7QUFBQSxNQUNsRCxrQkFBa0IsT0FBTyxTQUFTLHNCQUFzQixFQUFFLEVBQUUsS0FBSztBQUFBLElBQ25FO0FBQUEsRUFDRjtBQUVBLFdBQVMsV0FBVyxPQUFPO0FBQ3pCLFFBQUksV0FBVyxPQUFPLE9BQU8sV0FBVyxJQUFJLFdBQVcsWUFBWTtBQUNqRSxhQUFPLFdBQVcsSUFBSSxPQUFPLE9BQU8sS0FBSyxDQUFDO0FBQUEsSUFDNUM7QUFDQSxXQUFPLE9BQU8sS0FBSyxFQUFFLFFBQVEsT0FBTyxNQUFNLEVBQUUsUUFBUSxNQUFNLEtBQUs7QUFBQSxFQUNqRTtBQUVBLFdBQVMsb0JBQW9CLFFBQVE7QUFDbkMsVUFBTSxhQUFhLG9CQUFJLElBQUk7QUFDM0IsVUFBTSxTQUFTLG9CQUFJLElBQUk7QUFDdkIsZUFBVyxTQUFTLFVBQVUsQ0FBQyxHQUFHO0FBQ2hDLFVBQUksQ0FBQyxTQUFTLE9BQU8sVUFBVSxTQUFVO0FBQ3pDLFlBQU0sWUFBWSxXQUFXLEtBQUs7QUFDbEMsWUFBTSxZQUFZLE9BQU8sTUFBTSxTQUFTLEVBQUUsRUFBRSxLQUFLO0FBQ2pELFVBQUksQ0FBQyxhQUFhLENBQUMsVUFBVztBQUM5QixVQUFJLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRyxRQUFPLElBQUksV0FBVyxDQUFDLENBQUM7QUFDcEQsYUFBTyxJQUFJLFNBQVMsRUFBRSxLQUFLLGtCQUFrQixLQUFLLENBQUM7QUFBQSxJQUNyRDtBQUVBLFdBQU8sUUFBUSxDQUFDLFFBQVEsY0FBYztBQUNwQyxZQUFNLFVBQVUsT0FBTyxLQUFLLElBQUk7QUFDaEMsWUFBTSxVQUFVLFFBQVEsVUFBVSxNQUFNLE9BQU8sVUFBVTtBQUN6RCxVQUFJLENBQUMsUUFBUztBQUNkLGlCQUFXLElBQUksV0FBVztBQUFBLFFBQ3hCO0FBQUEsUUFDQSxhQUFhLE9BQU87QUFBQSxRQUNwQixTQUFTLHNDQUFzQyxPQUFPLE1BQU0sWUFBWSxRQUFRLE1BQU07QUFBQSxNQUN4RixDQUFDO0FBQUEsSUFDSCxDQUFDO0FBRUQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxpQkFBZSwyQkFBMkIsV0FBVyxZQUFZO0FBQy9ELFVBQU0sa0JBQWtCLE9BQU8sYUFBYSxFQUFFLEVBQUUsS0FBSztBQUNyRCxRQUFJLENBQUMsZ0JBQWlCLE9BQU0sSUFBSSxNQUFNLHdCQUF3QjtBQUU5RCxVQUFNLHdCQUF3QixPQUFPLFlBQVksZUFBZSxFQUFFLEVBQUUsS0FBSztBQUN6RSxVQUFNLHNCQUFzQix5QkFBeUIsWUFBWSxTQUFTO0FBQzFFLFVBQU0sMEJBQTBCLE9BQU8sWUFBWSxpQkFBaUIsRUFBRSxFQUFFLEtBQUs7QUFDN0UsVUFBTSxzQkFBc0IsT0FBTyxZQUFZLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLEtBQUs7QUFFekYsVUFBTSxNQUFNLE9BQU8sa0JBQWtCLENBQUMsR0FBRyxLQUFLLFFBQU0sT0FBTyxNQUFNLFdBQVcsSUFBSSxFQUFFLFFBQVEsT0FBTyxlQUFlO0FBQ2hILFFBQUksTUFBTSxPQUFPLE9BQU8sVUFBVTtBQUNoQyxVQUFJLHNCQUF1QixJQUFHLGNBQWM7QUFBQSxVQUN2QyxRQUFPLEdBQUc7QUFFZixVQUFJLG9CQUFvQixTQUFTLEVBQUcsSUFBRyxZQUFZO0FBQUEsVUFDOUMsUUFBTyxHQUFHO0FBRWYsVUFBSSx3QkFBeUIsSUFBRyxnQkFBZ0I7QUFBQSxVQUMzQyxRQUFPLEdBQUc7QUFBQSxJQUNqQjtBQUVBLFVBQU0sVUFBVTtBQUFBLE1BQ2QsT0FBTztBQUFBLE1BQ1AsYUFBYTtBQUFBLE1BQ2IsV0FBVztBQUFBLE1BQ1gsZUFBZTtBQUFBLElBQ2pCO0FBQ0EsUUFBSSxpQkFBaUIsY0FBYyxDQUFDLElBQUk7QUFDdEMsY0FBUSxhQUFhO0FBQUEsSUFDdkI7QUFFQSxVQUFNLFdBQVcsTUFBTSxNQUFNLGdDQUFnQztBQUFBLE1BQzNELFFBQVE7QUFBQSxNQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsTUFDOUMsTUFBTSxLQUFLLFVBQVUsT0FBTztBQUFBLElBQzlCLENBQUM7QUFFRCxRQUFJLENBQUMsU0FBUyxJQUFJO0FBQ2hCLFlBQU0sUUFBUSxNQUFNLFNBQVMsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDLEVBQUU7QUFDcEQsWUFBTSxJQUFJLE1BQU0sTUFBTSxTQUFTLGlDQUFpQztBQUFBLElBQ2xFO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxpQkFBZSxxQkFBcUIsT0FBTztBQUN6QyxVQUFNLFVBQVU7QUFBQSxNQUNkLE1BQU0sT0FBTyxPQUFPLFFBQVEsRUFBRSxFQUFFLEtBQUs7QUFBQSxNQUNyQyxVQUFVLE9BQU8sT0FBTyxZQUFZLEVBQUUsRUFBRSxLQUFLO0FBQUEsTUFDN0MsT0FBTyxPQUFPLE9BQU8sU0FBUyxFQUFFLEVBQUUsS0FBSztBQUFBLE1BQ3ZDLGFBQWEsT0FBTyxPQUFPLGVBQWUsRUFBRSxFQUFFLEtBQUs7QUFBQSxNQUNuRCxXQUFXLHlCQUF5QixPQUFPLFNBQVM7QUFBQSxNQUNwRCxlQUFlLE9BQU8sT0FBTyxpQkFBaUIsRUFBRSxFQUFFLEtBQUs7QUFBQSxJQUN6RDtBQUNBLFFBQUksQ0FBQyxRQUFRLEtBQU0sT0FBTSxJQUFJLE1BQU0sd0JBQXdCO0FBRTNELFVBQU0sV0FBVyxNQUFNLE1BQU0seUJBQXlCO0FBQUEsTUFDcEQsUUFBUTtBQUFBLE1BQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxNQUM5QyxNQUFNLEtBQUssVUFBVSxPQUFPO0FBQUEsSUFDOUIsQ0FBQztBQUVELFFBQUksQ0FBQyxTQUFTLElBQUk7QUFDaEIsWUFBTSxRQUFRLE1BQU0sU0FBUyxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUMsRUFBRTtBQUNwRCxZQUFNLElBQUksTUFBTSxNQUFNLFNBQVMscUJBQXFCO0FBQUEsSUFDdEQ7QUFFQSxVQUFNLFNBQVMsTUFBTSxTQUFTLEtBQUs7QUFDbkMsVUFBTSxhQUFhLDBCQUEwQixPQUFPLE9BQU8sRUFBRSxhQUFhLEtBQUssQ0FBQztBQUNoRixRQUFJLENBQUMsV0FBWSxPQUFNLElBQUksTUFBTSwrQkFBK0I7QUFFaEUsVUFBTSxVQUFVLE1BQU0sUUFBUSxPQUFPLGNBQWMsSUFBSSxPQUFPLGlCQUFpQixDQUFDO0FBQ2hGLFdBQU8saUJBQWlCLENBQUMsWUFBWSxHQUFHLFFBQVEsT0FBTyxDQUFBQyxXQUFTLFdBQVdBLE1BQUssTUFBTSxXQUFXLElBQUksQ0FBQztBQUV0RyxXQUFPLGtCQUFrQixPQUFPLG1CQUFtQixDQUFDO0FBQ3BELFVBQU0saUJBQWlCLE1BQU0sUUFBUSxPQUFPLGdCQUFnQixZQUFZLElBQ3BFLE9BQU8sZ0JBQWdCLGVBQ3ZCLENBQUM7QUFDTCxXQUFPLGdCQUFnQixlQUFlO0FBQUEsTUFDcEM7QUFBQSxNQUNBLEdBQUcsZUFBZSxPQUFPLENBQUFBLFdBQVMsV0FBV0EsTUFBSyxNQUFNLFdBQVcsSUFBSTtBQUFBLElBQ3pFO0FBRUEsbUJBQWUsT0FBTyxXQUFXLElBQUksSUFBSSxlQUFlLE9BQU8sV0FBVyxJQUFJLEtBQUs7QUFDbkYsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLHdCQUF3QixPQUFPO0FBQ3RDLFFBQUksQ0FBQyxTQUFTLE9BQU8sVUFBVSxTQUFVLFFBQU87QUFDaEQsV0FBTyxPQUFPLE1BQU0sWUFBWSxFQUFFLEVBQUUsS0FBSyxLQUFLO0FBQUEsRUFDaEQ7QUFFQSxXQUFTLDBCQUEwQjtBQUNqQyxVQUFNLFNBQVMsTUFBTSxRQUFRLE9BQU8sY0FBYyxJQUFJLE9BQU8saUJBQWlCLENBQUM7QUFDL0UsVUFBTSxVQUFVLENBQUM7QUFDakIsZUFBVyxTQUFTLFFBQVE7QUFDMUIsWUFBTSxXQUFXLHdCQUF3QixLQUFLO0FBQzlDLFVBQUksWUFBWSxDQUFDLFFBQVEsU0FBUyxRQUFRLEVBQUcsU0FBUSxLQUFLLFFBQVE7QUFBQSxJQUNwRTtBQUNBLFdBQU8sc0JBQXNCO0FBQzdCLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyw0QkFBNEIsYUFBYSxhQUFhO0FBQzdELFVBQU0sZ0JBQWdCLE9BQU8sZUFBZSxFQUFFLEVBQUUsS0FBSztBQUNyRCxVQUFNLGdCQUFnQixPQUFPLGVBQWUsRUFBRSxFQUFFLEtBQUs7QUFDckQsUUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWU7QUFFdEMsZUFBVyxTQUFVLE9BQU8sa0JBQWtCLENBQUMsR0FBSTtBQUNqRCxVQUFJLENBQUMsU0FBUyxPQUFPLFVBQVUsU0FBVTtBQUN6QyxVQUFJLHdCQUF3QixLQUFLLE1BQU0sZUFBZTtBQUNwRCxjQUFNLFdBQVc7QUFBQSxNQUNuQjtBQUFBLElBQ0Y7QUFFQSxVQUFNLGVBQWUsTUFBTSxRQUFRLE9BQU8sbUJBQW1CLElBQ3pELE9BQU8sc0JBQ1Asd0JBQXdCO0FBQzVCLFdBQU8sc0JBQXNCLGFBQWEsSUFBSSxjQUM1QyxhQUFhLGdCQUFnQixnQkFBZ0IsUUFDOUMsRUFBRSxPQUFPLENBQUMsVUFBVSxPQUFPLFFBQVEsWUFBWSxJQUFJLFFBQVEsUUFBUSxNQUFNLEtBQUs7QUFBQSxFQUNqRjtBQUVBLFdBQVMsMEJBQTBCLGNBQWMsV0FBVztBQUMxRCxVQUFNLHFCQUFxQixPQUFPLGdCQUFnQixFQUFFLEVBQUUsS0FBSztBQUMzRCxVQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU8sbUJBQW1CLElBQ2xELENBQUMsR0FBRyxPQUFPLG1CQUFtQixJQUM5Qix3QkFBd0I7QUFDNUIsVUFBTSxRQUFRLE1BQU0sUUFBUSxrQkFBa0I7QUFDOUMsUUFBSSxRQUFRLEVBQUcsUUFBTztBQUN0QixVQUFNLFlBQVksUUFBUTtBQUMxQixRQUFJLFlBQVksS0FBSyxhQUFhLE1BQU0sT0FBUSxRQUFPO0FBQ3ZELEtBQUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sU0FBUyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQ2xFLFdBQU8sc0JBQXNCO0FBQzdCLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxpQ0FBaUM7QUFDeEMsVUFBTSxhQUFhLE1BQU0sUUFBUSxPQUFPLG1CQUFtQixJQUN2RCxPQUFPLHNCQUNQLHdCQUF3QjtBQUM1QixRQUFJLFdBQVcsV0FBVyxFQUFHLFFBQU87QUFFcEMsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUMsV0FBVyxJQUFJLENBQUMsVUFBVSxVQUFVO0FBQUEsbUVBQ3FCLFdBQVcsUUFBUSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBSWhFLFdBQVcsUUFBUSxDQUFDO0FBQUEsa0RBQ08sV0FBVyxRQUFRLENBQUM7QUFBQTtBQUFBO0FBQUEsZ0ZBR1UsV0FBVyxRQUFRLENBQUMsc0JBQXNCLFdBQVcsUUFBUSxDQUFDLDBDQUEwQyxVQUFVLElBQUksYUFBYSxFQUFFO0FBQUEsa0ZBQ25JLFdBQVcsUUFBUSxDQUFDLHNCQUFzQixXQUFXLFFBQVEsQ0FBQyw4Q0FBOEMsVUFBVSxXQUFXLFNBQVMsSUFBSSxhQUFhLEVBQUU7QUFBQTtBQUFBLFNBRXRPLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUluQjtBQUdBLFdBQVMsb0JBQW9CO0FBQzNCLFFBQUk7QUFDRixZQUFNLE1BQU0sSUFBSSxnQkFBZ0IsT0FBTyxTQUFTLE1BQU0sRUFBRSxJQUFJLFNBQVM7QUFDckUsYUFBTyxNQUFNLGNBQWMsR0FBRyxLQUFLO0FBQUEsSUFDckMsU0FBU0MsSUFBRztBQUFFLGFBQU87QUFBQSxJQUFNO0FBQUEsRUFDN0I7QUFDQSxXQUFTLG1CQUFtQixrQkFBa0I7QUFDNUMsVUFBTSxNQUFNLGtCQUFrQjtBQUM5QixRQUFJLENBQUMsSUFBSztBQUNWLFFBQUk7QUFBRSxtQkFBYSxRQUFRLEtBQUssS0FBSyxVQUFVLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQUEsSUFBRyxTQUFTQSxJQUFHO0FBQUEsSUFBQztBQUFBLEVBQ3ZGO0FBQ0EsV0FBUyxvQkFBb0I7QUFDM0IsVUFBTSxNQUFNLGtCQUFrQjtBQUM5QixRQUFJLENBQUMsSUFBSyxRQUFPO0FBQ2pCLFFBQUk7QUFDRixZQUFNLE1BQU0sYUFBYSxRQUFRLEdBQUc7QUFDcEMsYUFBTyxNQUFNLElBQUksSUFBSSxLQUFLLE1BQU0sR0FBRyxDQUFDLElBQUk7QUFBQSxJQUMxQyxTQUFTQSxJQUFHO0FBQUUsYUFBTztBQUFBLElBQU07QUFBQSxFQUM3QjtBQUlBLGlCQUFlQywwQkFBeUI7QUFDdEMsVUFBTSxPQUFPLE9BQU87QUFDcEIsVUFBTSxZQUFZLFNBQVMsZUFBZSx3QkFBd0I7QUFHbEUsVUFBTSxjQUFjQyxjQUFhLFdBQVcsVUFBVSxLQUFLLENBQUM7QUFDNUQsVUFBTSxlQUFlLElBQUksS0FBSyxZQUFZLG1CQUFzQixDQUFDLEdBQUcsSUFBSSxPQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDN0YsVUFBTSxlQUFlLElBQUksS0FBSyxZQUFZLHVCQUF1QixDQUFDLEdBQUcsSUFBSSxPQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFHOUYsUUFBSSxZQUFZLENBQUM7QUFDakIsUUFBSSx1QkFBdUIsQ0FBQztBQUM1QixRQUFJO0FBQ0YsWUFBTSxZQUFZLE1BQU0sTUFBTSxhQUFhO0FBQzNDLFlBQU0sYUFBYSxvQkFBb0IsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUM3RCxrQkFBWSxXQUFXLGNBQWMsQ0FBQztBQUN0Qyw2QkFBdUIsV0FBVyxnQkFBZ0IsQ0FBQztBQUNuRCxhQUFPLGtCQUFrQixXQUFXLG1CQUFtQixDQUFDO0FBQ3hELFlBQU0sZ0JBQWdCLFdBQVcsNkJBQTZCLENBQUM7QUFDL0QsYUFBTyxzQkFBc0IsT0FBTyx1QkFBdUIsQ0FBQztBQUM1RCxpQkFBVyxDQUFDLFdBQVcsU0FBUyxLQUFLLE9BQU8sUUFBUSxhQUFhLEdBQUc7QUFDbEUsWUFBSSxhQUFhLFVBQVUsWUFBWTtBQUNyQyxpQkFBTyxvQkFBb0IsVUFBVSxZQUFZLENBQUMsSUFBSSxVQUFVO0FBQUEsUUFDbEU7QUFBQSxNQUNGO0FBQUEsSUFDRixTQUFTLE9BQU87QUFDZCxNQUFBUCxNQUFJLE1BQU0sOEJBQThCLEtBQUs7QUFFN0Msa0JBQVksS0FBSyxzQkFBc0IsQ0FBQztBQUN4QyxhQUFPLGtCQUFrQixDQUFDO0FBQUEsSUFDNUI7QUFFQSxVQUFNLGtDQUFrQyx3QkFBd0IsQ0FBQyxHQUM5RCxJQUFJLFdBQVMsMEJBQTBCLE9BQU87QUFBQSxNQUM3QyxhQUFhLE9BQU8sVUFBVSxZQUFZLENBQUMsQ0FBQyxPQUFPO0FBQUEsSUFDckQsQ0FBQyxDQUFDLEVBQ0QsT0FBTyxPQUFPO0FBQ2pCLFFBQUksK0JBQStCLFNBQVMsR0FBRztBQUM3QyxZQUFNLGVBQWUsQ0FBQztBQUN0QixZQUFNLE9BQU8sb0JBQUksSUFBSTtBQUNyQixxQ0FBK0IsUUFBUSxXQUFTO0FBQzlDLFlBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxFQUFHO0FBQzFCLHFCQUFhLEtBQUssS0FBSztBQUN2QixhQUFLLElBQUksTUFBTSxJQUFJO0FBQUEsTUFDckIsQ0FBQztBQUNELGdCQUFVLFFBQVEsV0FBUztBQUN6QixjQUFNLFlBQVksV0FBVyxLQUFLO0FBQ2xDLFlBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxTQUFTLEVBQUc7QUFDdkMscUJBQWEsS0FBSyxLQUFLO0FBQ3ZCLGFBQUssSUFBSSxTQUFTO0FBQUEsTUFDcEIsQ0FBQztBQUNELGtCQUFZO0FBQUEsSUFDZDtBQUdBLFVBQU0sbUJBQW1CLElBQUksSUFBSSxVQUFVLElBQUksV0FBUyxXQUFXLEtBQUssQ0FBQyxDQUFDO0FBQzFFLFVBQU0sYUFBYSxLQUFLLHNCQUFzQixDQUFDLEdBQUcsT0FBTyxPQUFLLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDO0FBQ3RGLFdBQU8sb0JBQW9CO0FBQzNCLFFBQUksVUFBVSxTQUFTLEdBQUc7QUFDeEIsa0JBQVksQ0FBQyxHQUFHLFVBQVUsSUFBSSxRQUFNLEVBQUUsTUFBTSxHQUFHLFFBQVEsS0FBSyxFQUFFLEdBQUcsR0FBRyxTQUFTO0FBQUEsSUFDL0U7QUFFQSxRQUFJLFVBQVUsV0FBVyxHQUFHO0FBQzFCLGdCQUFVLFlBQVk7QUFDdEI7QUFBQSxJQUNGO0FBR0EsUUFBSSxDQUFDLE9BQU8sZ0JBQWdCO0FBQzFCLFlBQU0sc0JBQXNCLEVBQUUsYUFBYSxHQUFHLFdBQVcsR0FBRyxnQkFBZ0IsR0FBRyxRQUFRLEVBQUU7QUFDekYsWUFBTSxlQUFnQixVQUFVLE9BQU8sT0FBSyxDQUFDLEVBQUUsTUFBTTtBQUdyRCxZQUFNLGlCQUFpQixDQUFDO0FBQ3hCLGlCQUFXLFNBQVMsY0FBYztBQUNoQyxjQUFNLE1BQU8sT0FBTyxVQUFVLFdBQVksTUFBTSxZQUFZLEtBQU07QUFDbEUsY0FBTSxRQUFRLE9BQU8sVUFBVSxXQUFXLFFBQVEsTUFBTSxRQUFRLE9BQU8sWUFBWTtBQUNuRixZQUFJLEtBQUs7QUFDUCx5QkFBZSxHQUFHLEtBQUssZUFBZSxHQUFHLEtBQUssTUFDekMsYUFBYSxJQUFJLElBQUksSUFBSSxJQUFJLGFBQWEsSUFBSSxJQUFJLElBQUksSUFBSTtBQUFBLFFBQ2pFO0FBQUEsTUFDRjtBQUVBLFlBQU0sZUFBZ0IsYUFBYSxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUdRLE9BQU07QUFDeEQsY0FBTSxRQUFTLE9BQU8sTUFBTSxXQUFXLElBQUksRUFBRSxRQUFRO0FBQ3JELGNBQU0sUUFBUyxPQUFPQSxPQUFNLFdBQVdBLEtBQUlBLEdBQUUsUUFBUUE7QUFDckQsY0FBTSxPQUFTLG9CQUFvQix1QkFBdUIsT0FBTyxJQUFJLENBQUMsS0FBSztBQUMzRSxjQUFNLE9BQVMsb0JBQW9CLHVCQUF1QixPQUFPLElBQUksQ0FBQyxLQUFLO0FBQzNFLFlBQUksU0FBUyxLQUFNLFFBQU8sT0FBTztBQUVqQyxjQUFNLE9BQVMsT0FBTyxNQUFNLFdBQVksRUFBRSxZQUFZLEtBQU07QUFDNUQsY0FBTSxPQUFTLE9BQU9BLE9BQU0sV0FBWUEsR0FBRSxZQUFZLEtBQU07QUFDNUQsZ0JBQVEsZUFBZSxJQUFJLEtBQUssTUFBTSxlQUFlLElBQUksS0FBSztBQUFBLE1BQ2hFLENBQUM7QUFDRCxhQUFPLGlCQUFpQixDQUFDLEdBQUcsVUFBVSxPQUFPLE9BQUssRUFBRSxNQUFNLEdBQUcsR0FBRyxZQUFZO0FBRzVFLFlBQU0sZ0JBQWdCRCxjQUFhLFdBQVcsZ0JBQWdCLEtBQUssQ0FBQyxHQUFHO0FBQ3ZFLFVBQUksTUFBTSxRQUFRLFlBQVksS0FBSyxhQUFhLFNBQVMsR0FBRztBQUMxRCxlQUFPLHNCQUFzQjtBQUFBLE1BQy9CO0FBQUEsSUFDRixPQUFPO0FBQ0wsWUFBTSxhQUFhLElBQUksSUFBSSxPQUFPLGVBQWUsSUFBSSxPQUFNLE9BQU8sTUFBTSxXQUFXLElBQUksRUFBRSxRQUFRLENBQUUsQ0FBQztBQUNwRyxpQkFBVyxNQUFNLFdBQVc7QUFDMUIsY0FBTSxLQUFLLE9BQU8sT0FBTyxXQUFXLEtBQUssR0FBRyxRQUFRO0FBQ3BELFlBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxFQUFHLFFBQU8sZUFBZSxLQUFLLEVBQUU7QUFBQSxNQUN4RDtBQUFBLElBQ0Y7QUFFQSxVQUFNLGlCQUFpQixJQUFJLElBQUksS0FBSyxzQkFBc0IsQ0FBQyxDQUFDO0FBRzVELFVBQU0sZ0JBQWdCLGtCQUFrQjtBQUN4QyxVQUFNLHVCQUF1QixnQkFDekIsSUFBSSxJQUFJLENBQUMsR0FBRyxjQUFjLEVBQUUsT0FBTyxVQUFRLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQ3BFLG9CQUFJLElBQUk7QUFDWix1QkFBbUIsY0FBYztBQUdqQyxVQUFNLGlCQUFpQixPQUFPLGlCQUFpQixtQkFBbUIsQ0FBQztBQUNuRSxlQUFXLFNBQVMsT0FBTyxnQkFBZ0I7QUFDekMsWUFBTSxZQUFnQixPQUFPLFVBQVUsV0FBVyxRQUFRLE1BQU0sUUFBUTtBQUN4RSxZQUFNLFFBQWlCLE1BQU0sV0FBVztBQUN4QyxZQUFNLGdCQUFnQixlQUFlLElBQUksU0FBUztBQUNsRCxZQUFNLGlCQUFpQix1QkFBdUIsV0FBVyxJQUFJO0FBQzdELFVBQUksZ0JBQWdCO0FBQ3BCLFVBQVMsbUJBQW1CLFlBQWdCLGlCQUFnQjtBQUFBLGVBQ25ELG1CQUFtQixVQUFnQixpQkFBZ0I7QUFBQSxlQUNuRCxtQkFBbUIsZUFBZ0IsaUJBQWdCO0FBQUEsZUFDbkQsbUJBQW1CLE9BQWdCLGlCQUFnQjtBQUFBLGVBQ25ELGlCQUFpQixNQUFrQixpQkFBZ0I7QUFDNUQscUJBQWUsT0FBTyxTQUFTLElBQUksZUFBZSxTQUFTLEtBQUs7QUFBQSxJQUNsRTtBQUVBLHVCQUFtQixXQUFXLGdCQUFnQixNQUFNLGNBQWMsY0FBYyxvQkFBb0I7QUFBQSxFQUN0RztBQUlBLFdBQVMsbUJBQW1CLFdBQVcsZ0JBQWdCLE1BQU0sY0FBYyxjQUFjLHVCQUF1QixvQkFBSSxJQUFJLEdBQUc7QUFDekgsUUFBSSxDQUFDLFVBQVcsYUFBWSxTQUFTLGVBQWUsd0JBQXdCO0FBQzVFLFFBQUksQ0FBQyxVQUFXO0FBQ2hCLFFBQUksQ0FBQyxlQUFnQixrQkFBaUIsSUFBSSxJQUFLLE9BQU8sd0JBQXdCLHNCQUF1QixDQUFDLENBQUM7QUFDdkcsUUFBSSxDQUFDLEtBQU0sUUFBTyxPQUFPO0FBQ3pCLFFBQUksQ0FBQyxjQUFjO0FBQ2pCLFlBQU0sS0FBS0EsY0FBYSxXQUFXLFVBQVUsS0FBSyxDQUFDO0FBQ25ELHFCQUFlLElBQUksS0FBSyxHQUFHLG1CQUF1QixDQUFDLEdBQUcsSUFBSSxPQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDL0UscUJBQWUsSUFBSSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsR0FBRyxJQUFJLE9BQUssRUFBRSxZQUFZLENBQUMsQ0FBQztBQUFBLElBQ2pGO0FBRUEsUUFBSSxFQUFFLEdBQUcsVUFBVSxZQUFZLHNCQUFzQixHQUFHO0FBQ3RELFFBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLFFBQVE7QUFBQSxJQUNoRDtBQUVBLFVBQU0sU0FBUyxPQUFPLGtCQUFrQixDQUFDO0FBQ3pDLFVBQU0sZ0JBQWdCLG9CQUFvQixNQUFNO0FBQ2hELFVBQU0sc0JBQXNCLE1BQU0sS0FBSyxJQUFJO0FBQUEsTUFDekMsT0FDRyxJQUFJLFdBQVUsT0FBTyxVQUFVLFlBQVksTUFBTSxXQUFXLE9BQU8sTUFBTSxRQUFRLEVBQUUsS0FBSyxJQUFJLEVBQUcsRUFDL0YsT0FBTyxPQUFPO0FBQUEsSUFDbkIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLFVBQVUsS0FBSyxjQUFjLEtBQUssQ0FBQztBQUNsRCw0QkFBd0I7QUFDeEIsVUFBTSxpQkFBaUI7QUFDdkIsUUFBSSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDRHQVkwRixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFtQnBILCtCQUErQixDQUFDO0FBQUEsb0JBQ2xCLGNBQWM7QUFBQSxRQUMxQixvQkFBb0IsSUFBSSxjQUFZLGtCQUFrQixXQUFXLFFBQVEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFCdkcsVUFBTSxpQkFBaUIsTUFBTSxRQUFRLE9BQU8sZUFBZSxJQUFJLE9BQU8sa0JBQWtCLENBQUM7QUFDekYsVUFBTSxlQUFnQixPQUFPLG1CQUFtQixPQUFPLGdCQUFnQix1QkFBd0IsQ0FBQztBQUVoRyxVQUFNLGdCQUFnQixDQUFDLGNBQWM7QUFDbkMsWUFBTSxTQUFTLFVBQVUsWUFBWTtBQUNyQyxZQUFNLE1BQU0sQ0FBQztBQUNiLHFCQUFlLFFBQVEsQ0FBQyxRQUFRO0FBQzlCLFlBQUksQ0FBQyxPQUFPLE9BQU8sUUFBUSxTQUFVO0FBQ3JDLGNBQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxZQUFZLElBQUksSUFBSSxhQUFhLEtBQUssR0FBRyxJQUFJO0FBQzNFLGNBQU0sV0FBVyxDQUFDLElBQUksU0FBUyxJQUFJLElBQUksV0FBVyxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxZQUFZO0FBQ2pGLFlBQUksU0FBUyxTQUFTLE1BQU0sS0FBSyxJQUFJLEdBQUksS0FBSSxLQUFLLElBQUksRUFBRTtBQUFBLE1BQzFELENBQUM7QUFDRCxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sUUFBUSxDQUFDLE9BQU8sV0FBVztBQUNoQyxZQUFNLFlBQXVCLE9BQU8sVUFBVSxXQUFXLFFBQVEsTUFBTSxRQUFRO0FBQy9FLFlBQU0sUUFBd0IsTUFBTSxXQUFXO0FBQy9DLFlBQU0sdUJBQXVCLE9BQU8sVUFBVSxZQUFZLE1BQU0seUJBQXlCO0FBQ3pGLFlBQU0sZ0JBQXVCLGVBQWUsSUFBSSxTQUFTO0FBQ3pELFlBQU0saUJBQWlCLHVCQUF1QixXQUFXLElBQUk7QUFDN0QsWUFBTSxhQUFpQixtQkFBbUIsV0FBVyxJQUFJO0FBQ3pELFlBQU0sWUFBaUIsa0JBQWtCLFdBQVcsSUFBSTtBQUN4RCxZQUFNLFdBQWlCLCtCQUErQixXQUFXLElBQUk7QUFDckUsWUFBTSxxQkFBcUIsOEJBQThCLFVBQVUsS0FBSztBQUN4RSxZQUFNLGdCQUFpQixlQUFlLE9BQU8sU0FBUyxLQUFLO0FBQzNELFlBQU0sVUFBaUIsV0FBVztBQUNsQyxZQUFNLFNBQWlCLFdBQVcsT0FBTyxTQUFTO0FBQ2xELFlBQU0sZUFBaUIsV0FBVyxTQUFTO0FBRTNDLFlBQU0sV0FBVyxPQUFPLFVBQVUsV0FBWSxNQUFNLFNBQVMsS0FBTTtBQUNuRSxZQUFNLGVBQWUsY0FBYyxJQUFJLFFBQVE7QUFDL0MsWUFBTSxjQUFjLE9BQU8sVUFBVSxXQUFZLE1BQU0sWUFBWSxLQUFNO0FBQ3pFLFlBQU0saUJBQWlCLE9BQU8sVUFBVSxXQUFXLE9BQU8sTUFBTSxlQUFlLEVBQUUsRUFBRSxLQUFLLElBQUk7QUFDNUYsWUFBTSxZQUFZLE9BQU8sVUFBVSxXQUMvQixNQUFNLFFBQVEsTUFBTSxTQUFTLElBQzNCLE1BQU0sWUFDTixNQUFNLFFBQVEsTUFBTSxVQUFVLElBQzVCLE1BQU0sYUFDTixDQUFDLElBQ0wsQ0FBQztBQUNMLFlBQU0sbUJBQW1CLE9BQU8sVUFBVSxXQUFXLE9BQU8sTUFBTSxpQkFBaUIsRUFBRSxFQUFFLEtBQUssSUFBSTtBQUVoRyxZQUFNLFdBQVcsUUFDWixNQUFNLGlCQUNMLCtMQUNBLHlOQUNGO0FBQ0osWUFBTSxnQkFBZ0Isd0JBQXdCLE9BQU8sVUFBVSxXQUFXLE9BQU8sTUFBTSxZQUFZLEVBQUUsRUFBRSxLQUFLLElBQUk7QUFDaEgsWUFBTSxvQkFBb0I7QUFDMUIsWUFBTSxlQUFlLGdCQUFnQix3QkFBbUIsYUFBYSxLQUFLLHdCQUFtQixpQkFBaUI7QUFDOUcsWUFBTSxpQkFBaUIsdUJBQ25CLGdCQUFnQixXQUFXLFlBQVksQ0FBQyxpQkFBaUIsV0FBVyxZQUFZLENBQUMseUlBQW9JLGdCQUFnQixrQkFBa0IsaUJBQWlCLFlBQ3hRO0FBQ0osWUFBTSxlQUFlLHdCQUF3QixnQkFDekMsK0VBQStFLFdBQVcsYUFBYSxDQUFDLGFBQ3hHO0FBQ0osWUFBTSxnQkFBZ0IscUJBQXFCLElBQUksU0FBUyxJQUNwRCx3SEFDQTtBQUNKLFlBQU0saUJBQWtCLFVBQVUsWUFBWTtBQUM5QyxZQUFNLGlCQUFtQixPQUFPLHVCQUF1QixDQUFDLEdBQUcsY0FBYztBQUN6RSxZQUFNLFlBQWtCLGFBQWEsSUFBSSxjQUFjLElBQUksU0FDdkQsY0FBYyxJQUFJLGNBQWMsSUFBSSxTQUFTO0FBQ2pELFlBQU0saUJBQWtCLGlCQUFpQjtBQUN6QyxZQUFNLGdCQUFrQixDQUFDLENBQUMsaUJBQWlCLGtCQUFrQjtBQUM3RCxZQUFNLGdCQUFrQixtQkFBbUIsU0FBUyxTQUNoRCxtQkFBbUIsU0FBUyxPQUFPO0FBQ3ZDLFlBQU0sY0FBa0IsZ0JBQ3BCLGtCQUFrQixjQUFjLGVBQWUsYUFBYSxNQUFNLDRCQUNsRSxpQkFDRSxHQUFHLG1CQUFtQixTQUFTLGFBQWEsY0FBYyxrREFDMUQ7QUFDTixZQUFNLGNBQWtCLG1CQUFtQixTQUN2QyxvSUFBb0ksZ0JBQWdCLGtEQUFrRCxFQUFFLEtBQ3hNLG1CQUFtQixTQUNqQixvSUFBb0ksZ0JBQWdCLGtEQUFrRCxFQUFFLEtBQ3hNO0FBQ04sWUFBTSxjQUFrQixpQkFBa0IsbUJBQW1CLFNBQVMsU0FBUyxTQUFVO0FBQ3pGLFlBQU0saUJBQWtCLCtEQUErRCxZQUFZLHFCQUFxQixpQkFBaUIsRUFBRSxZQUFZLFdBQVcsWUFBWSxXQUFXLDZCQUE2QixrQkFBa0IsY0FBYyxzQkFBc0IsV0FBVztBQUN2UixZQUFNLHFCQUFxQixtQkFBbUIsTUFBTSxpQkFBaUIsNEJBQTZCLFFBQVEsMkJBQTJCO0FBQ3JJLFlBQU0sa0JBQXFCLDRDQUE0QyxXQUFXLEtBQUssS0FBSyxXQUFXLElBQUk7QUFDM0csWUFBTSxnQkFBcUIsY0FBYyxNQUFNLGlCQUMzQywwREFDQyxRQUNDLHFGQUNBO0FBQ04sWUFBTSxxQkFBcUIsb0JBQW9CLGNBQWM7QUFDN0QsWUFBTSxxQkFBcUIsb0JBQW9CLGFBQWE7QUFDNUQsWUFBTSxvQkFBb0Isb0JBQW9CLGFBQWE7QUFDM0QsWUFBTSxxQkFBcUIsb0JBQW9CLG9CQUFvQjtBQUNuRSxZQUFNLG9CQUFvQixDQUFDLGFBQWE7QUFDeEMsVUFBSSxtQkFBb0IsbUJBQWtCLEtBQUssV0FBVyxrQkFBa0IsRUFBRTtBQUM5RSxVQUFJLG1CQUFvQixtQkFBa0IsS0FBSyxrQkFBa0I7QUFDakUsVUFBSSxrQkFBbUIsbUJBQWtCLEtBQUssZUFBZSxpQkFBaUIsRUFBRTtBQUNoRixVQUFJLG1CQUFvQixtQkFBa0IsS0FBSyx1QkFBdUIsa0JBQWtCLEVBQUU7QUFDMUYsWUFBTSxvQkFBb0Isa0JBQWtCLE9BQU8sT0FBTyxFQUFFLEtBQUssR0FBRztBQUNwRSxZQUFNLFdBQXFCLFFBQVEsd0JBQXdCO0FBQzNELFlBQU0saUJBQWlCLFFBQVMsYUFBYSxTQUFTLEtBQUssY0FBYyxTQUFTLElBQUssQ0FBQztBQUN4RixZQUFNLGFBQWEsZUFBZSxLQUFLLElBQUk7QUFDM0MsWUFBTSxZQUFZLFFBQ2QsOEVBQ0E7QUFDSixZQUFNLGVBQWUsUUFBUSxxQkFBcUIsZ0JBQWdCLGNBQWMsSUFBSTtBQUNwRixZQUFNLFlBQVksZ0JBQWdCLE9BQzlCLElBQUksWUFBWSxNQUFNLGlCQUFpQixJQUFJLEtBQUssR0FBRyxLQUNsRCxRQUFRLGFBQWE7QUFFMUIsbUJBQWE7QUFBQSx3QkFDTyxZQUFZLFlBQVksUUFBUTtBQUFBLHNCQUNsQyxZQUFZLFlBQVksY0FBYyxHQUFHLGFBQWEsR0FBRyxRQUFRLEdBQUcsY0FBYyxHQUFHLFlBQVk7QUFBQTtBQUFBLHdFQUUvQyxZQUFZO0FBQUEscUJBQy9ELFdBQVcsV0FBVyxDQUFDO0FBQUEsb0JBQ3hCLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUl0QixvQkFBb0Isa0JBQWtCO0FBQUEsNkJBQ3JCLFdBQVcsbUJBQW1CLFFBQVEsQ0FBQztBQUFBLHlEQUNYLFlBQVksNkNBQTZDLFdBQVcsbUJBQW1CLFFBQVEsQ0FBQztBQUFBLG9CQUNySSxFQUFFO0FBQUE7QUFBQTtBQUFBLHFFQUcrQyxZQUFZO0FBQUEscUJBQzVELFdBQVcsUUFBUSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJN0Isb0JBQW9CLGVBQWU7QUFBQSw2QkFDbEIsV0FBVyxtQkFBbUIsS0FBSyxDQUFDO0FBQUEseURBQ1IsWUFBWSwwQ0FBMEMsV0FBVyxtQkFBbUIsS0FBSyxDQUFDO0FBQUEsb0JBQy9ILEVBQUU7QUFBQSxZQUNWLGVBQWUsMkNBQTJDLFdBQVcsYUFBYSxPQUFPLENBQUMsbUVBQThELFdBQVcsYUFBYSxPQUFPLENBQUMsV0FBVyxFQUFFO0FBQUE7QUFBQTtBQUFBLGdFQUdqSixZQUFZO0FBQUE7QUFBQTtBQUFBLCtCQUc3QyxDQUFDLGlCQUFpQixhQUFhLEVBQUU7QUFBQSx1Q0FDekIsbUJBQW1CLGFBQWEsYUFBYSxFQUFFO0FBQUEsdUNBQy9DLG1CQUFtQixhQUFhLGFBQWEsRUFBRTtBQUFBLDJDQUMzQyxtQkFBbUIsaUJBQWlCLGFBQWEsRUFBRTtBQUFBLHVDQUN2RCxtQkFBbUIsYUFBYSxhQUFhLEVBQUU7QUFBQSxxQ0FDakQsbUJBQW1CLFdBQVcsYUFBYSxFQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUEseUVBSVQsWUFBWTtBQUFBLHFCQUNoRSxXQUFXLFVBQVUsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw2RUFNd0IsWUFBWTtBQUFBLHFCQUNwRSxXQUFXLGdCQUFnQixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxzQkFLM0IsV0FBVyxrQkFBa0IsQ0FBQztBQUFBLGNBQ3RDLGVBQWU7QUFBQSw4Q0FDaUIsV0FBVyxpQkFBaUIsQ0FBQztBQUFBO0FBQUEsWUFFL0QsUUFBUTtBQUFBO0FBQUE7QUFBQSwwQkFHTSxZQUFZO0FBQUEscUJBQ2pCLFdBQVcsVUFBVSxDQUFDO0FBQUE7QUFBQSxxQkFFdEIsV0FBVyxTQUFTLENBQUM7QUFBQTtBQUFBLDJEQUVpQixZQUFZLGdKQUFnSixXQUFXLFNBQVMsQ0FBQyxZQUFZLDRDQUF1QztBQUFBO0FBQUE7QUFBQSxvQ0FHM1Asa0JBQWtCLGNBQWlCLFdBQVcsRUFBRSxzREFBc0QsWUFBWSxzQkFBc0Isa0JBQWtCLFdBQVc7QUFBQSxvQ0FDckssa0JBQWtCLFlBQWlCLFdBQVcsRUFBRSxvREFBb0QsWUFBWSx3QkFBd0Isa0JBQWtCLFNBQVM7QUFBQSxvQ0FDbkssa0JBQWtCLGlCQUFpQixXQUFXLEVBQUUseURBQXlELFlBQVksbUJBQW1CLGtCQUFrQixjQUFjO0FBQUEsb0NBQ3hLLGtCQUFrQixZQUFpQixXQUFXLEVBQUUsb0RBQW9ELFlBQVksd0JBQXdCLGtCQUFrQixTQUFTLDhFQUF5RSxhQUFhLENBQUM7QUFBQSw2RUFDak4sWUFBWSwrQkFBK0IsVUFBVSxhQUFhLEVBQUU7QUFBQSw2RUFDcEUsWUFBWSwrQkFBK0IsU0FBVSxhQUFhLEVBQUU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUkvSSxDQUFDO0FBRUQsaUJBQWE7QUFDYixjQUFVLFlBQVk7QUFHdEIsY0FBVSxjQUFjLHlCQUF5QixHQUFHLGlCQUFpQixVQUFVLE9BQUs7QUFDbEYsWUFBTSx1QkFBdUIsRUFBRSxPQUFPLFFBQVEsK0JBQStCO0FBQzdFLFVBQUksc0JBQXNCO0FBQ3hCLGNBQU0sYUFBYSxxQkFBcUIsUUFBUSw2QkFBNkI7QUFDN0UsY0FBTSxjQUFjLFlBQVksUUFBUSxZQUFZO0FBQ3BELGNBQU0sY0FBYyxxQkFBcUIsTUFBTSxLQUFLO0FBQ3BELFlBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxnQkFBZ0IsYUFBYTtBQUMvRCxjQUFJLFdBQVksc0JBQXFCLFFBQVE7QUFDN0M7QUFBQSxRQUNGO0FBQ0Esb0NBQTRCLGFBQWEsV0FBVztBQUNwRCw0QkFBb0IsYUFBYSxXQUFXLEVBQ3pDLEtBQUssTUFBTSxtQkFBbUIsV0FBVyxnQkFBZ0IsTUFBTSxjQUFjLFlBQVksQ0FBQyxFQUMxRixNQUFNLE1BQU07QUFDWCxzQ0FBNEIsYUFBYSxXQUFXO0FBQ3BELGNBQUksV0FBWSxzQkFBcUIsUUFBUTtBQUM3QyxvQkFBVSxvQ0FBb0MsT0FBTztBQUFBLFFBQ3ZELENBQUM7QUFBQSxNQUNMO0FBQUEsSUFDRixDQUFDO0FBRUQsY0FBVSxjQUFjLDRCQUE0QixHQUFHLGlCQUFpQixVQUFVLE9BQUs7QUFDckYsWUFBTSxnQkFBZ0IsRUFBRSxPQUFPLFFBQVEsdUJBQXVCO0FBRWhFLFlBQU0sZUFBZSxVQUFVLGNBQWMsaUJBQWlCO0FBQzlELFlBQU0scUJBQXFCLE1BQU07QUFDL0IsWUFBSSxDQUFDLGFBQWM7QUFDbkIscUJBQWEsTUFBTSxVQUFVLGFBQWEsTUFBTSxZQUFZLFNBQVMsVUFBVTtBQUFBLE1BQ2pGO0FBQ0EsZ0JBQVUsY0FBYyx3QkFBd0IsR0FBRyxpQkFBaUIsU0FBUyxrQkFBa0I7QUFDL0YsZ0JBQVUsY0FBYyxtQkFBbUIsR0FBRyxpQkFBaUIsU0FBUyxNQUFNO0FBQzVFLFlBQUksQ0FBQyxhQUFjO0FBQ25CLHFCQUFhLE1BQU07QUFDbkIscUJBQWEsTUFBTSxVQUFVO0FBQUEsTUFDL0IsQ0FBQztBQUNELG9CQUFjLGlCQUFpQixVQUFVLE9BQU1FLE9BQUs7QUFDbEQsUUFBQUEsR0FBRSxlQUFlO0FBQ2pCLGNBQU0sV0FBVyxJQUFJLFNBQVMsWUFBWTtBQUMxQyxZQUFJO0FBQ0YsZ0JBQU0scUJBQXFCO0FBQUEsWUFDekIsTUFBTSxTQUFTLElBQUksTUFBTTtBQUFBLFlBQ3pCLFVBQVUsU0FBUyxJQUFJLFVBQVU7QUFBQSxZQUNqQyxPQUFPLFNBQVMsSUFBSSxPQUFPO0FBQUEsWUFDM0IsYUFBYSxTQUFTLElBQUksYUFBYTtBQUFBLFlBQ3ZDLFdBQVcsU0FBUyxJQUFJLFdBQVc7QUFBQSxZQUNuQyxlQUFlLFNBQVMsSUFBSSxlQUFlO0FBQUEsVUFDN0MsQ0FBQztBQUNELG9CQUFVLDJCQUEyQjtBQUNyQyx1QkFBYSxNQUFNO0FBQ25CLHVCQUFhLE1BQU0sVUFBVTtBQUM3Qiw2QkFBbUIsV0FBVyxnQkFBZ0IsTUFBTSxjQUFjLFlBQVk7QUFBQSxRQUNoRixTQUFTLE9BQU87QUFDZCxvQkFBVSxNQUFNLFdBQVcsd0JBQXdCLE9BQU87QUFBQSxRQUM1RDtBQUFBLE1BQ0YsQ0FBQztBQUNDLFVBQUksZUFBZTtBQUNqQixjQUFNQyxhQUFZLGNBQWMsUUFBUTtBQUN4QyxjQUFNLGNBQWMsY0FBYyxNQUFNLEtBQUs7QUFDN0Msa0NBQTBCQSxZQUFXLFdBQVcsRUFBRSxNQUFNLE1BQU07QUFDNUQsb0JBQVUsa0NBQWtDLE9BQU87QUFBQSxRQUNyRCxDQUFDO0FBQ0Q7QUFBQSxNQUNGO0FBRUEsWUFBTSxRQUFRLEVBQUUsT0FBTyxRQUFRLG9CQUFvQjtBQUNuRCxVQUFJLE9BQU87QUFDVCxjQUFNQSxhQUFZLE1BQU0sUUFBUTtBQUNoQyxjQUFNLFdBQVcsTUFBTSxNQUFNLEtBQUs7QUFDbEMsK0JBQXVCQSxZQUFXLFFBQVEsRUFBRSxNQUFNLE1BQU07QUFDdEQsb0JBQVUsK0JBQStCLE9BQU87QUFBQSxRQUNsRCxDQUFDO0FBQ0Q7QUFBQSxNQUNGO0FBRUEsWUFBTSxpQkFBaUIsRUFBRSxPQUFPLFFBQVEsOEVBQThFO0FBQ3RILFVBQUksQ0FBQyxlQUFnQjtBQUNyQixZQUFNLFlBQVksZUFBZSxRQUFRO0FBQ3pDLFlBQU0sTUFBTSxlQUFlLFFBQVEsZ0JBQWdCO0FBQ25ELFVBQUksQ0FBQyxhQUFhLENBQUMsSUFBSztBQUN4QixZQUFNLGNBQWMsSUFBSSxjQUFjLDBCQUEwQixHQUFHLFNBQVM7QUFDNUUsWUFBTSxpQkFBaUIsSUFBSSxjQUFjLHdCQUF3QixHQUFHLFNBQVM7QUFDN0UsWUFBTSxnQkFBZ0IsSUFBSSxjQUFjLDRCQUE0QixHQUFHLFNBQVM7QUFDaEYsaUNBQTJCLFdBQVc7QUFBQSxRQUNwQztBQUFBLFFBQ0EsV0FBVztBQUFBLFFBQ1g7QUFBQSxNQUNGLENBQUMsRUFBRSxNQUFNLE1BQU07QUFDYixrQkFBVSxvQ0FBb0MsT0FBTztBQUFBLE1BQ3ZELENBQUM7QUFBQSxJQUNILENBQUM7QUFHRCxjQUFVLGNBQWMsNEJBQTRCLEdBQUcsaUJBQWlCLFNBQVMsT0FBSztBQUNwRixZQUFNLFFBQVEsRUFBRSxPQUFPLFFBQVEsb0JBQW9CO0FBQ25ELFVBQUksQ0FBQyxNQUFPO0FBQ1osWUFBTSxZQUFZLE1BQU0sUUFBUTtBQUNoQyxZQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQVIsT0FBS0EsR0FBRSxLQUFLLENBQUMsRUFBRSxPQUFPLE9BQU87QUFDcEUsWUFBTSxRQUFRLHFCQUFxQixLQUFLLGNBQWM7QUFDdEQsWUFBTSxPQUFPLFNBQVMsT0FBTyxJQUFJLEtBQUssTUFBTSxVQUFVLElBQUksS0FBSyxHQUFHLEtBQUs7QUFDdkUsWUFBTSxPQUFPLFVBQVUsY0FBYyxtQ0FBbUMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxJQUFJO0FBQ2pHLFVBQUksS0FBTSxNQUFLLGNBQWM7QUFBQSxJQUMvQixDQUFDO0FBRUQsY0FBVSxjQUFjLDRCQUE0QixHQUFHLGlCQUFpQixTQUFTLE9BQUs7QUFDcEYsWUFBTSxhQUFhLEVBQUUsT0FBTyxRQUFRLG9CQUFvQjtBQUN4RCxVQUFJLFlBQVk7QUFDZCxVQUFFLGVBQWU7QUFDakIsVUFBRSxnQkFBZ0I7QUFDbEIsY0FBTVEsYUFBWSxXQUFXLFFBQVE7QUFDckMsY0FBTSxXQUFXLFdBQVcsUUFBUSxZQUFZO0FBQ2hELGVBQU8sc0JBQXNCLE9BQU8sdUJBQXVCLENBQUM7QUFDNUQsWUFBSSxVQUFVO0FBQ1osaUJBQU8sb0JBQW9CQSxXQUFVLFlBQVksQ0FBQyxJQUFJO0FBQUEsUUFDeEQsT0FBTztBQUNMLGlCQUFPLE9BQU8sb0JBQW9CQSxXQUFVLFlBQVksQ0FBQztBQUFBLFFBQzNEO0FBQ0EsbUNBQTJCQSxZQUFXO0FBQUEsVUFDcEMsYUFBYSxVQUFVLGNBQWMsd0NBQXdDLFdBQVdBLFVBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUztBQUFBLFVBQ2xILFdBQVcsVUFBVSxjQUFjLHNDQUFzQyxXQUFXQSxVQUFTLENBQUMsSUFBSSxHQUFHLFNBQVM7QUFBQSxVQUM5RyxlQUFlLFVBQVUsY0FBYywwQ0FBMEMsV0FBV0EsVUFBUyxDQUFDLElBQUksR0FBRyxTQUFTO0FBQUEsVUFDdEgsWUFBWSxZQUFZO0FBQUEsUUFDMUIsQ0FBQyxFQUFFLEtBQUssTUFBTSxtQkFBbUIsV0FBVyxnQkFBZ0IsTUFBTSxjQUFjLFlBQVksQ0FBQyxFQUMxRixNQUFNLE1BQU0sVUFBVSx1Q0FBdUMsT0FBTyxDQUFDO0FBQ3hFO0FBQUEsTUFDRjtBQUVBLFlBQU0sUUFBUSxFQUFFLE9BQU8sUUFBUSxpQkFBaUI7QUFDaEQsVUFBSSxPQUFPO0FBQ1QsVUFBRSxlQUFlO0FBQ2pCLFVBQUUsZ0JBQWdCO0FBQ2xCLGNBQU1BLGFBQVksTUFBTSxRQUFRO0FBQ2hDLGNBQU0sUUFBUSxNQUFNLFFBQVE7QUFDNUIsY0FBTSxRQUFRLE1BQU0sUUFBUSxXQUFXO0FBQ3ZDLFlBQUksVUFBVSxZQUFZO0FBQ3hCLGdCQUFNLFFBQVEsVUFBVSxjQUFjLHFDQUFxQyxXQUFXQSxVQUFTLENBQUMsSUFBSTtBQUNwRyxjQUFJLE1BQU8sT0FBTSxRQUFRO0FBQ3pCLG9DQUEwQkEsWUFBVyxLQUFLLEVBQ3ZDLEtBQUssTUFBTSxtQkFBbUIsV0FBVyxnQkFBZ0IsTUFBTSxjQUFjLFlBQVksQ0FBQyxFQUMxRixNQUFNLE1BQU0sVUFBVSwyQ0FBMkMsT0FBTyxDQUFDO0FBQUEsUUFDOUUsV0FBVyxVQUFVLFNBQVM7QUFDNUIsZ0JBQU0sUUFBUSxVQUFVLGNBQWMsa0NBQWtDLFdBQVdBLFVBQVMsQ0FBQyxJQUFJO0FBQ2pHLGNBQUksTUFBTyxPQUFNLFFBQVE7QUFDekIsaUNBQXVCQSxZQUFXLEtBQUssRUFDcEMsS0FBSyxNQUFNLG1CQUFtQixXQUFXLGdCQUFnQixNQUFNLGNBQWMsWUFBWSxDQUFDLEVBQzFGLE1BQU0sTUFBTSxVQUFVLHdDQUF3QyxPQUFPLENBQUM7QUFBQSxRQUMzRTtBQUNBO0FBQUEsTUFDRjtBQUNBLFlBQU0sTUFBTSxFQUFFLE9BQU8sUUFBUSxXQUFXO0FBQ3hDLFVBQUksQ0FBQyxJQUFLO0FBQ1YsWUFBTSxLQUFLLElBQUksUUFBUSxnQkFBZ0I7QUFDdkMsVUFBSSxDQUFDLEdBQUk7QUFDVCxZQUFNLFlBQVksR0FBRyxRQUFRO0FBQzdCLFlBQU0sU0FBWSxJQUFJLFFBQVE7QUFDOUIsVUFBSSxXQUFXLFVBQVU7QUFDdkIsVUFBRSxnQkFBZ0I7QUFDbEIscUJBQWEsV0FBVyxFQUFFO0FBQUEsTUFDNUIsV0FBVyxXQUFXLFlBQVk7QUFDaEMsVUFBRSxnQkFBZ0I7QUFDbEIscUJBQWEsV0FBVyxDQUFFO0FBQUEsTUFDNUIsV0FBVyxRQUFRO0FBQ2pCLDBCQUFrQixXQUFXLFFBQVEsT0FBTztBQUFBLE1BQzlDO0FBQUEsSUFDRixDQUFDO0FBRUQsY0FBVSxjQUFjLHlCQUF5QixHQUFHLGlCQUFpQixTQUFTLE9BQUs7QUFDakYsWUFBTSxNQUFNLEVBQUUsT0FBTyxRQUFRLHFDQUFxQztBQUNsRSxVQUFJLENBQUMsSUFBSztBQUNWLFlBQU0sZUFBZSxJQUFJLFFBQVEsWUFBWTtBQUM3QyxZQUFNLFlBQVksSUFBSSxRQUFRLFdBQVcsZ0JBQWdCLEtBQUs7QUFDOUQsWUFBTSxlQUFlLDBCQUEwQixjQUFjLFNBQVM7QUFDdEUsVUFBSSxDQUFDLGFBQWM7QUFDbkIsNkJBQXVCLFlBQVksRUFDaEMsS0FBSyxNQUFNLG1CQUFtQixXQUFXLGdCQUFnQixNQUFNLGNBQWMsWUFBWSxDQUFDLEVBQzFGLE1BQU0sTUFBTTtBQUNYLGtDQUEwQixjQUFjLENBQUMsU0FBUztBQUNsRCxrQkFBVSx3Q0FBd0MsT0FBTztBQUFBLE1BQzNELENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxVQUFNLGVBQWUsU0FBUyxjQUFjLEtBQUs7QUFDakQsaUJBQWEsWUFBWTtBQUN6QixpQkFBYSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSx3RkFLNkQsYUFBYSxDQUFDO0FBQUE7QUFFcEcsY0FBVSxhQUFhLGNBQWMsVUFBVSxVQUFVO0FBRXpELE1BQUUsc0JBQXNCLEVBQUUsVUFBVTtBQUFBLE1BQ2xDLFFBQVE7QUFBQSxNQUNSLE9BQU8sQ0FBQztBQUFBLE1BQ1IsVUFBVSxFQUFFLFFBQVEsaUJBQWlCO0FBQUEsSUFDdkMsQ0FBQztBQUNELHdCQUFvQjtBQUFBLEVBQ3RCO0FBSUEsV0FBUyxhQUFhLFdBQVcsV0FBVztBQUMxQyxVQUFNLE1BQU0sT0FBTztBQUNuQixRQUFJLENBQUMsSUFBSztBQUNWLFVBQU0sTUFBTSxJQUFJLFVBQVUsUUFBTSxPQUFPLE1BQU0sV0FBVyxJQUFJLEVBQUUsUUFBUSxPQUFPLFNBQVM7QUFDdEYsUUFBSSxNQUFNLEVBQUc7QUFDYixVQUFNLFNBQVMsTUFBTTtBQUNyQixRQUFJLFNBQVMsS0FBSyxVQUFVLElBQUksT0FBUTtBQUN4QyxLQUFDLElBQUksR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUNoRCxXQUFPLGlCQUFpQjtBQUN4Qix1QkFBbUIsTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJO0FBQy9DLFVBQU0scUJBQXFCO0FBQUEsTUFDekIsUUFBUTtBQUFBLE1BQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxNQUM5QyxNQUFNLEtBQUssVUFBVSxFQUFFLE1BQU0sU0FBUyxhQUFhLElBQUksSUFBSSxPQUFNLE9BQU8sTUFBTSxXQUFXLElBQUksRUFBRSxRQUFRLENBQUUsRUFBRSxDQUFDO0FBQUEsSUFDOUcsQ0FBQyxFQUFFLE1BQU0sTUFBTTtBQUFBLElBQUMsQ0FBQztBQUFBLEVBQ25CO0FBSUEsaUJBQWVDLHNCQUFxQixTQUFTO0FBQzNDLFdBQU8sMkJBQTJCO0FBQ2xDLFVBQU0sV0FBVyxRQUFRLFlBQVk7QUFFckMsUUFBSSxTQUFTLFNBQVMsS0FBSyxHQUFHO0FBQzVCLG9CQUFjLGFBQWEsc0RBQXVEO0FBQUEsSUFDcEYsV0FBVyxTQUFTLFNBQVMsSUFBSSxLQUFLLFNBQVMsU0FBUyxRQUFRLEdBQUc7QUFDakUsb0JBQWMsYUFBYSw4RUFBOEU7QUFBQSxJQUMzRyxPQUFPO0FBQ0wsb0JBQWMsYUFBYSxpREFBa0Q7QUFBQSxJQUMvRTtBQUVBLDRCQUF3QjtBQUFBLEVBQzFCO0FBSUEsaUJBQWUsdUJBQXVCO0FBd0JwQyxVQUFNLFlBQVksZUFBZTtBQUNqQyxVQUFNLFFBQVEsT0FBTyxLQUFLLFNBQVMsRUFBRTtBQUVyQyxRQUFJLFVBQVUsR0FBRztBQUNmLHFCQUFlLGlCQUFpQixpRUFBaUU7QUFDakc7QUFBQSxJQUNGO0FBRUEsUUFBSTtBQUNGLFlBQU0sZUFBZSxPQUFPLGtCQUFrQixDQUFDLEdBQzVDLE9BQU8sV0FBUyxTQUFTLE9BQU8sVUFBVSxZQUFZLE1BQU0sTUFBTSxFQUNsRSxPQUFPLFdBQVM7QUFDZixjQUFNLFNBQVMsVUFBVSxXQUFXLEtBQUssQ0FBQztBQUMxQyxlQUFPLFdBQVcsYUFBYSxXQUFXLGVBQWUsV0FBVztBQUFBLE1BQ3RFLENBQUMsRUFDQSxJQUFJLFdBQVM7QUFDWixZQUFJLE1BQU0sZ0JBQWdCO0FBQ3hCLGlCQUFPO0FBQUEsWUFDTCxNQUFNLFdBQVcsS0FBSztBQUFBLFlBQ3RCLFVBQVUsT0FBTyxNQUFNLFlBQVksRUFBRSxFQUFFLEtBQUs7QUFBQSxZQUM1QyxPQUFPLE9BQU8sTUFBTSxTQUFTLEVBQUUsRUFBRSxLQUFLO0FBQUEsWUFDdEMsYUFBYSxPQUFPLE1BQU0sZUFBZSxFQUFFLEVBQUUsS0FBSztBQUFBLFlBQ2xELFdBQVcseUJBQXlCLE1BQU0sYUFBYSxNQUFNLGNBQWMsQ0FBQyxDQUFDO0FBQUEsWUFDN0UsZUFBZSxPQUFPLE1BQU0saUJBQWlCLEVBQUUsRUFBRSxLQUFLO0FBQUEsWUFDdEQsY0FBYztBQUFBLFVBQ2hCO0FBQUEsUUFDRjtBQUNBLGVBQU8sV0FBVyxLQUFLO0FBQUEsTUFDekIsQ0FBQztBQUNILFlBQU0sa0JBQWtCLFlBQVksSUFBSSxXQUFTLE9BQU8sVUFBVSxXQUFXLFFBQVEsTUFBTSxJQUFJO0FBRS9GLFlBQU0sY0FBYyxNQUFNLEtBQUssU0FBUyxpQkFBaUIsb0JBQW9CLENBQUM7QUFDOUUsWUFBTSxVQUFVLElBQUksS0FBSyxPQUFPLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxPQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sT0FBTyxDQUFDO0FBQ3JGLFlBQU0sb0JBQW9CLENBQUM7QUFDM0IsaUJBQVcsU0FBUyxhQUFhO0FBQy9CLGNBQU0sWUFBWSxNQUFNLFFBQVE7QUFDaEMsWUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsU0FBUyxTQUFTLEVBQUc7QUFDeEQsY0FBTSxNQUFNLE9BQU8sTUFBTSxTQUFTLEVBQUUsRUFDakMsTUFBTSxHQUFHLEVBQ1QsSUFBSSxDQUFDVCxPQUFNQSxHQUFFLEtBQUssQ0FBQyxFQUNuQixPQUFPLENBQUNBLE9BQU1BLE1BQUssUUFBUSxJQUFJQSxFQUFDLENBQUM7QUFDcEMsWUFBSSxJQUFJLFNBQVMsRUFBRyxtQkFBa0IsU0FBUyxJQUFJO0FBQUEsTUFDckQ7QUFFQSxZQUFNLFdBQVcsTUFBTSxNQUFNLHlCQUF5QjtBQUFBLFFBQ3BELFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVU7QUFBQSxVQUNuQixNQUFNO0FBQUEsVUFDTjtBQUFBLFVBQ0EsY0FBYztBQUFBLFVBQ2QscUJBQXFCO0FBQUEsUUFDdkIsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELFVBQUksU0FBUyxJQUFJO0FBQ2YsUUFBQUssY0FBYSxtQkFBbUI7QUFDaEMsY0FBTSxZQUFZLFlBQVksU0FBUyxJQUNuQyxLQUFLLFlBQVksTUFBTSx5RkFDdkI7QUFDSixrQkFBVSwwQkFBMEIsS0FBSyxVQUFVLFNBQVMsRUFBRTtBQUM5RCwyQkFBbUI7QUFFbkIsZUFBTyxrQkFBa0IsT0FBTyxtQkFBbUIsQ0FBQztBQUNwRCxlQUFPLGdCQUFnQixrQkFBa0I7QUFDekMsWUFBSSxDQUFDLE9BQU8sZ0JBQWdCLGFBQWMsUUFBTyxnQkFBZ0IsZUFBZSxDQUFDO0FBQ2pGLFlBQUksWUFBWSxTQUFTLEVBQUcsUUFBTyxnQkFBZ0IsZUFBZTtBQUNsRSxlQUFPLGdCQUFnQixzQkFBc0I7QUFDN0MsdUJBQWUsU0FBUyxFQUFFLEdBQUcsVUFBVTtBQUN2QyxZQUFJLE9BQU8sMEJBQTBCLFdBQVksdUJBQXNCO0FBQ3ZFLGtCQUFVLHFCQUFxQjtBQUFBLE1BQ2pDLE9BQU87QUFDTCxjQUFNLFFBQVEsTUFBTSxTQUFTLEtBQUs7QUFDbEMsa0JBQVUsVUFBVSxNQUFNLFNBQVMsMEJBQTBCLElBQUksT0FBTztBQUFBLE1BQzFFO0FBQUEsSUFDRixTQUFTLE9BQU87QUFDZCxNQUFBUCxNQUFJLE1BQU0scUNBQXFDLEtBQUs7QUFDcEQsZ0JBQVUsK0NBQStDLE9BQU87QUFBQSxJQUNsRTtBQUFBLEVBQ0Y7OztBQ3hyQ0E7QUFBQTtBQUFBO0FBQUEsMkJBQUFZO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1DQUFBQztBQUFBLElBQUEsb0NBQUFDO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnREEsTUFBSSw0QkFBNEIsQ0FBQztBQUNqQyxNQUFJLG9CQUFvQjtBQUV4QixNQUFJLG9CQUFvQjtBQUV4QixNQUFJLHNCQUFzQixvQkFBSSxJQUFJO0FBRWxDLFdBQVMsK0JBQStCLE9BQU87QUFDN0MsUUFBSSxTQUFTLE9BQU8sVUFBVSxZQUFZLENBQUMsTUFBTSxRQUFRLEtBQUssR0FBRztBQUMvRCxhQUFPO0FBQUEsUUFDTCxNQUFNLE9BQU8sTUFBTSxRQUFRLE1BQU0sZUFBZSxNQUFNLFdBQVcsRUFBRTtBQUFBLFFBQ25FLFFBQVEsUUFBUSxNQUFNLE1BQU07QUFBQSxNQUM5QjtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsTUFDTCxNQUFNLE9BQU8sU0FBUyxFQUFFO0FBQUEsTUFDeEIsUUFBUTtBQUFBLElBQ1Y7QUFBQSxFQUNGO0FBRUEsV0FBUyw4QkFBOEJDLFVBQVM7QUFDOUMsUUFBSSxDQUFDLE1BQU0sUUFBUUEsUUFBTyxFQUFHLFFBQU8sQ0FBQztBQUNyQyxXQUFPQSxTQUFRLElBQUksOEJBQThCO0FBQUEsRUFDbkQ7QUFFQSxXQUFTLHNCQUFzQixPQUFPO0FBQ3BDLFdBQU8sK0JBQStCLEtBQUssRUFBRTtBQUFBLEVBQy9DO0FBRUEsV0FBUyx3QkFBd0IsT0FBTztBQUN0QyxXQUFPLCtCQUErQixLQUFLLEVBQUU7QUFBQSxFQUMvQztBQUVBLFNBQU8sdUJBQXVCLENBQUM7QUFDL0IsU0FBTyx1QkFBdUI7QUFHOUIsaUJBQWUscUJBQXFCLEtBQUssT0FBTyxDQUFDLEdBQUcsVUFBVSxLQUFNO0FBQ2xFLFVBQU0sYUFBYSxJQUFJLGdCQUFnQjtBQUN2QyxVQUFNLFNBQVMsV0FBVztBQUMxQixVQUFNLEtBQUssV0FBVyxNQUFNLFdBQVcsTUFBTSxHQUFHLE9BQU87QUFDdkQsUUFBSTtBQUNGLFlBQU0sTUFBTSxNQUFNLE1BQU0sS0FBSyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRSxtQkFBYSxFQUFFO0FBQ2YsYUFBTztBQUFBLElBQ1QsU0FBUyxLQUFLO0FBQ1osbUJBQWEsRUFBRTtBQUNmLFlBQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUVBLFdBQVMsa0JBQWtCO0FBQ3pCLFFBQUk7QUFDRixZQUFNLE1BQU0sSUFBSSxnQkFBZ0IsT0FBTyxTQUFTLE1BQU0sRUFBRSxJQUFJLFNBQVM7QUFDckUsYUFBTyxNQUFNLFlBQVksR0FBRyxLQUFLO0FBQUEsSUFDbkMsU0FBU0MsSUFBRztBQUFFLGFBQU87QUFBQSxJQUFNO0FBQUEsRUFDN0I7QUFDQSxXQUFTLGlCQUFpQixnQkFBZ0I7QUFDeEMsVUFBTSxNQUFNLGdCQUFnQjtBQUM1QixRQUFJLENBQUMsSUFBSztBQUNWLFFBQUk7QUFBRSxtQkFBYSxRQUFRLEtBQUssS0FBSyxVQUFVLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztBQUFBLElBQUcsU0FBU0EsSUFBRztBQUFBLElBQUM7QUFBQSxFQUNyRjtBQUNBLFdBQVMsa0JBQWtCO0FBQ3pCLFVBQU0sTUFBTSxnQkFBZ0I7QUFDNUIsUUFBSSxDQUFDLElBQUssUUFBTztBQUNqQixRQUFJO0FBQ0YsWUFBTSxNQUFNLGFBQWEsUUFBUSxHQUFHO0FBQ3BDLGFBQU8sTUFBTSxJQUFJLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxJQUFJO0FBQUEsSUFDMUMsU0FBU0EsSUFBRztBQUFFLGFBQU87QUFBQSxJQUFNO0FBQUEsRUFDN0I7QUFFQSxpQkFBZUMsZ0NBQStCO0FBQzVDLFVBQU0sWUFBWSxTQUFTLGVBQWUsOEJBQThCO0FBQ3hFLFFBQUksQ0FBQyxVQUFXO0FBRWhCLGNBQVUsWUFBWTtBQUd0QixRQUFJLGtCQUFrQixDQUFDO0FBQ3ZCLFFBQUk7QUFDRixZQUFNLE1BQU0sTUFBTSxxQkFBcUIsZUFBZSxDQUFDLEdBQUcsR0FBSTtBQUM5RCxVQUFJLENBQUMsSUFBSSxHQUFJLE9BQU0sSUFBSSxNQUFNLGVBQWU7QUFDNUMsWUFBTSxhQUFhLE1BQU0sSUFBSSxLQUFLO0FBQ2xDLHdCQUFrQixXQUFXLG9CQUFvQixDQUFDO0FBQUEsSUFDcEQsU0FBUyxLQUFLO0FBRVosVUFBSTtBQUNGLGNBQU0sT0FBTyxNQUFNLHFCQUFxQixzQkFBc0IsQ0FBQyxHQUFHLEdBQUk7QUFDdEUsWUFBSSxDQUFDLEtBQUssR0FBSSxPQUFNLElBQUksTUFBTSxzQkFBc0I7QUFDcEQsY0FBTSxhQUFhLE1BQU0sS0FBSyxLQUFLO0FBQ25DLDBCQUFrQixXQUFXLHlCQUF5QixDQUFDO0FBQUEsTUFDekQsU0FBUyxNQUFNO0FBQ2Isa0JBQVUsWUFBWTtBQUN0QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsUUFBSSxnQkFBZ0IsV0FBVyxHQUFHO0FBQ2hDLGdCQUFVLFlBQVk7QUFDdEI7QUFBQSxJQUNGO0FBSUEsUUFBSTtBQUNGLFlBQU0sT0FBTyxPQUFPLDBCQUEwQixDQUFDO0FBQy9DLFlBQU0saUJBQWlCLElBQUksSUFBSSxLQUFLLDRCQUE0QixDQUFDLENBQUM7QUFHbEUsVUFBSSxDQUFDLE9BQU8sc0JBQXNCO0FBQ2hDLDBCQUFrQixDQUFDLEdBQUcsZUFBZSxFQUFFLEtBQUssQ0FBQyxHQUFHQyxPQUFNO0FBQ3BELGdCQUFNLE9BQU8sZUFBZSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUk7QUFDNUMsZ0JBQU0sT0FBTyxlQUFlLElBQUlBLEdBQUUsRUFBRSxJQUFJLElBQUk7QUFDNUMsY0FBSSxTQUFTLEtBQU0sUUFBTyxPQUFPO0FBQ2pDLGtCQUFRQSxHQUFFLGNBQWMsTUFBTSxFQUFFLGNBQWM7QUFBQSxRQUNoRCxDQUFDO0FBQ0QsZUFBTyx1QkFBdUI7QUFBQSxNQUNoQztBQUdBLGFBQU8sdUJBQXVCLENBQUM7QUFDL0IsYUFBTyxxQkFBcUIsUUFBUSxTQUFPO0FBQ3pDLGNBQU0sTUFBTSw2QkFBNkIsSUFBSSxJQUFJLElBQUk7QUFDckQsWUFBSSxnQkFBZ0I7QUFDcEIsWUFBSSxRQUFRLFlBQXFCLGlCQUFnQjtBQUFBLGlCQUN4QyxRQUFRLFVBQWdCLGlCQUFnQjtBQUFBLGlCQUN4QyxRQUFRLGVBQWdCLGlCQUFnQjtBQUFBLGlCQUN4QyxRQUFRLE9BQWdCLGlCQUFnQjtBQUNqRCxlQUFPLHFCQUFxQixJQUFJLEVBQUUsSUFBSTtBQUFBLE1BQ3hDLENBQUM7QUFFRCxZQUFNLGVBQWUsT0FBTyxpQkFBaUIseUJBQXlCLENBQUM7QUFDdkUsVUFBSSxPQUFPLEtBQUssWUFBWSxFQUFFLFNBQVMsRUFBRyxRQUFPLE9BQU8sT0FBTyxzQkFBc0IsWUFBWTtBQUlqRyxVQUFJLENBQUMsT0FBTyx1QkFBdUI7QUFDakMsWUFBSSxVQUFVO0FBQ2QsZUFBTyx5QkFBeUIsS0FBSywwQkFBMEIsQ0FBQyxHQUFHLElBQUksT0FBSztBQUMxRSxnQkFBTSxPQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNoQyxlQUFLLFVBQVUsU0FBUyxTQUFTO0FBQ2pDLGlCQUFPO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFDSDtBQUNBLGFBQU8sc0JBQXNCLFFBQVEsT0FBSztBQUN4QyxZQUFJLEVBQUUsRUFBRSxXQUFXLE9BQU8sc0JBQXVCLFFBQU8scUJBQXFCLEVBQUUsT0FBTyxJQUFJO0FBQUEsTUFDNUYsQ0FBQztBQUVELFlBQU0sY0FBYyxnQkFBZ0I7QUFDcEMsNEJBQXNCLGNBQ2xCLElBQUksSUFBSSxDQUFDLEdBQUcsY0FBYyxFQUFFLE9BQU8sUUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUM5RCxvQkFBSSxJQUFJO0FBQ1osdUJBQWlCLGNBQWM7QUFFL0IscUNBQStCLFNBQVM7QUFBQSxJQUMxQyxTQUFTLEtBQUs7QUFFWixjQUFRLE1BQU0sK0NBQStDLEdBQUc7QUFDaEUsZ0JBQVUsWUFBWTtBQUFBLElBQ3hCO0FBQUEsRUFDRjtBQUVBLFdBQVMsK0JBQStCLFdBQVc7QUFDakQsUUFBSSxDQUFDLFVBQVcsYUFBWSxTQUFTLGVBQWUsOEJBQThCO0FBQ2xGLFFBQUksQ0FBQyxVQUFXO0FBRWhCLFVBQU0sT0FBTyxPQUFPLDBCQUEwQixDQUFDO0FBQy9DLFVBQU0sY0FBZSxPQUFPLHdCQUF3QixDQUFDO0FBQ3JELFVBQU0sZ0JBQWdCLE9BQU8seUJBQXlCLENBQUM7QUFHdkQsUUFBSUMsUUFBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwrRkFNa0YsWUFBWSxTQUFTLGNBQWMsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZXRJLGdCQUFZLFFBQVEsQ0FBQyxLQUFLLFdBQVc7QUFDbkMsWUFBTSxLQUFpQixJQUFJLE1BQU0sSUFBSSxTQUFTO0FBQzlDLFlBQU0sUUFBaUIsSUFBSSxTQUFTO0FBQ3BDLFlBQU0sT0FBaUIsSUFBSSxlQUFlO0FBQzFDLFlBQU0saUJBQWlCLDZCQUE2QixJQUFJLElBQUk7QUFDNUQsWUFBTSxhQUFpQix5QkFBeUIsSUFBSSxNQUFNLElBQUksVUFBVTtBQUN4RSxZQUFNLFlBQWlCLHdCQUF3QixJQUFJLE1BQU0sR0FBRztBQUM1RCxZQUFNLGdCQUFpQixPQUFPLHFCQUFxQixFQUFFLEtBQUs7QUFDMUQsWUFBTSxrQkFBa0IsNENBQTRDLFdBQVcsS0FBSyxLQUFLLFdBQVcsSUFBSTtBQUN4RyxZQUFNLGdCQUFnQixvQkFBb0IsSUFBSSxFQUFFLElBQzVDLHdIQUNBO0FBQ0osWUFBTSxVQUFVLFdBQVc7QUFDM0IsWUFBTSxTQUFVLFdBQVcsWUFBWSxTQUFTO0FBRWhELE1BQUFBLFNBQVE7QUFBQSx5QkFDYSxXQUFXLEVBQUUsQ0FBQztBQUFBO0FBQUEsaUNBRU4sV0FBVyxFQUFFLENBQUM7QUFBQSxpQ0FDZCxXQUFXLEtBQUssQ0FBQztBQUFBO0FBQUEsb0RBRUUsV0FBVyxFQUFFLENBQUM7QUFBQSw2Q0FDckIsYUFBYTtBQUFBLG1DQUN2QixXQUFXLEVBQUUsQ0FBQztBQUFBO0FBQUE7QUFBQSxvREFHRyxXQUFXLEVBQUUsQ0FBQztBQUFBO0FBQUEsYUFFckQsV0FBVyxJQUFJLENBQUM7QUFBQTtBQUFBLHNCQUVQLFdBQVcsY0FBYyxDQUFDO0FBQUEsY0FDbEMsZUFBZTtBQUFBLDhDQUNpQixXQUFXLFNBQVMsQ0FBQztBQUFBO0FBQUEsb0NBRS9CLGtCQUFrQixjQUFpQixXQUFXLEVBQUUsc0RBQXNELFdBQVcsS0FBSyxDQUFDO0FBQUEsb0NBQ3ZILGtCQUFrQixZQUFpQixXQUFXLEVBQUUsb0RBQW9ELFdBQVcsS0FBSyxDQUFDO0FBQUEsb0NBQ3JILGtCQUFrQixpQkFBaUIsV0FBVyxFQUFFLHlEQUF5RCxXQUFXLEtBQUssQ0FBQztBQUFBLG9DQUMxSCxrQkFBa0IsWUFBaUIsV0FBVyxFQUFFLG9EQUFvRCxXQUFXLEtBQUssQ0FBQyxnRkFBMkUsYUFBYSxDQUFDO0FBQUEsNERBQ3RMLFdBQVcsS0FBSyxDQUFDLDJFQUEyRSxXQUFXLEVBQUUsQ0FBQztBQUFBLHNEQUNoSCxXQUFXLEtBQUssQ0FBQywrQkFBK0IsVUFBVSxhQUFhLEVBQUUsaUNBQWlDLFdBQVcsRUFBRSxDQUFDO0FBQUEsc0RBQ3hILFdBQVcsS0FBSyxDQUFDLCtCQUErQixTQUFVLGFBQWEsRUFBRSxpQ0FBaUMsV0FBVyxFQUFFLENBQUM7QUFBQSx3REFDdEgsV0FBVyxLQUFLLENBQUMsb0VBQW9FLFdBQVcsRUFBRSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJekosQ0FBQztBQUdELGtCQUFjLFFBQVEsQ0FBQyxNQUFNLFdBQVc7QUFDdEMsWUFBTSxTQUFjLEtBQUs7QUFDekIsWUFBTSxXQUFlLEtBQUssY0FBYyxVQUFVLFlBQVk7QUFDOUQsWUFBTSxZQUFjLFFBQVEsU0FBUyxNQUFNLElBQUksU0FBUyxRQUFRLFNBQVMsS0FBSyxJQUFJLFFBQVE7QUFDMUYsWUFBTSxXQUFjLEtBQUssY0FBYztBQUN2QyxZQUFNLGdCQUFnQixPQUFPLHFCQUFxQixNQUFNLEtBQUs7QUFDN0QsWUFBTSxVQUFjLFdBQVc7QUFDL0IsWUFBTSxTQUFjLFdBQVcsY0FBYyxTQUFTO0FBRXRELE1BQUFBLFNBQVE7QUFBQSx5QkFDYSxXQUFXLE1BQU0sQ0FBQztBQUFBO0FBQUE7QUFBQSxpQ0FHVixXQUFXLE1BQU0sQ0FBQztBQUFBLGlDQUNsQixXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7QUFBQTtBQUFBLHFEQUVSLFdBQVcsTUFBTSxDQUFDO0FBQUE7QUFBQSxtQ0FFcEMsV0FBVyxNQUFNLENBQUM7QUFBQTtBQUFBO0FBQUEscURBR0EsV0FBVyxNQUFNLENBQUM7QUFBQTtBQUFBLGFBRTFELFdBQVcsS0FBSyxlQUFlLEVBQUUsQ0FBQztBQUFBLFlBQ25DLEtBQUssZ0JBQWdCLDZDQUE2QyxXQUFXLEtBQUssYUFBYSxDQUFDLGFBQWEsRUFBRTtBQUFBO0FBQUE7QUFBQSx1REFHcEUsU0FBUyxLQUFLLFdBQVcsUUFBUSxDQUFDO0FBQUEsOENBQzNDLFdBQVcsS0FBSyxhQUFhLEVBQUUsQ0FBQztBQUFBO0FBQUEsb0NBRTFDLGtCQUFrQixjQUFpQixXQUFXLEVBQUU7QUFBQSxvQ0FDaEQsa0JBQWtCLFlBQWlCLFdBQVcsRUFBRTtBQUFBLG9DQUNoRCxrQkFBa0IsaUJBQWlCLFdBQVcsRUFBRTtBQUFBLG9DQUNoRCxrQkFBa0IsWUFBaUIsV0FBVyxFQUFFLGdJQUEySCxhQUFhLENBQUM7QUFBQSxvSUFDekYsV0FBVyxNQUFNLENBQUM7QUFBQSxpRkFDckUsVUFBVSxhQUFhLEVBQUUsMENBQTBDLFdBQVcsTUFBTSxDQUFDO0FBQUEsaUZBQ3JGLFNBQVUsYUFBYSxFQUFFLDBDQUEwQyxXQUFXLE1BQU0sQ0FBQztBQUFBLG1JQUNuQyxXQUFXLE1BQU0sQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBSW5KLENBQUM7QUFFRCxJQUFBQSxTQUFRO0FBQ1IsY0FBVSxZQUFZQTtBQUd0QixVQUFNLGFBQWEsU0FBUyxjQUFjLEtBQUs7QUFDL0MsZUFBVyxZQUFZO0FBQ3ZCLGVBQVcsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsMkZBS2tFLGFBQWEsQ0FBQztBQUFBO0FBRXZHLGNBQVUsYUFBYSxZQUFZLFVBQVUsVUFBVTtBQUd2RCxjQUFVLGNBQWMsT0FBTyxHQUFHLGlCQUFpQixTQUFTLE9BQUs7QUFDL0QsWUFBTSxNQUFNLEVBQUUsT0FBTyxRQUFRLHdCQUF3QjtBQUNyRCxVQUFJLENBQUMsSUFBSztBQUNWLFlBQU0sS0FBSyxJQUFJLFFBQVEsaUJBQWlCO0FBQ3hDLFVBQUksQ0FBQyxHQUFJO0FBQ1QsWUFBTSxTQUFTLElBQUksUUFBUTtBQUMzQixVQUFJLE9BQVEseUJBQXdCLEdBQUcsUUFBUSxPQUFPLE1BQU07QUFBQSxJQUM5RCxDQUFDO0FBQUEsRUFDSDtBQUVBLFdBQVMsc0JBQXNCLFFBQVE7QUFDckMsVUFBTSxPQUFPLE9BQU8sMEJBQTBCLENBQUM7QUFDL0MsYUFBUyxpQkFBaUIsa0RBQWtELEVBQUUsUUFBUSxTQUFPO0FBQzNGLFVBQUksSUFBSSxNQUFNLFlBQVksT0FBUTtBQUNsQyxZQUFNLFFBQVEsSUFBSSxRQUFRO0FBQzFCLFVBQUksQ0FBQyxNQUFPO0FBQ1osVUFBSSxpQkFBaUI7QUFDckIsVUFBSSxXQUFXLGVBQWU7QUFDNUIsWUFBSSxNQUFNLFdBQVcsUUFBUSxHQUFHO0FBQzlCLDJCQUFpQjtBQUFBLFFBQ25CLE9BQU87QUFDTCxnQkFBTSxNQUFNLDZCQUE2QixPQUFPLElBQUk7QUFDcEQsY0FBSSxRQUFRLFlBQXFCLGtCQUFpQjtBQUFBLG1CQUN6QyxRQUFRLFVBQWdCLGtCQUFpQjtBQUFBLG1CQUN6QyxRQUFRLGVBQWdCLGtCQUFpQjtBQUFBLGNBQ2pCLGtCQUFpQjtBQUFBLFFBQ3BEO0FBQUEsTUFDRjtBQUNBLDhCQUF3QixPQUFPLGNBQWM7QUFBQSxJQUMvQyxDQUFDO0FBQUEsRUFDSDtBQUVBLFdBQVMsd0JBQXdCLE9BQU8sUUFBUTtBQUM5QyxXQUFPLHFCQUFxQixLQUFLLElBQUk7QUFDckMsVUFBTSxNQUFNLFNBQVMsY0FBYyxtQkFBbUIsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJO0FBQzNFLFFBQUksQ0FBQyxJQUFLO0FBQ1YsUUFBSSxpQkFBaUIsV0FBVyxFQUFFLFFBQVEsU0FBTyxJQUFJLFVBQVUsT0FBTyxRQUFRLENBQUM7QUFDL0UsVUFBTSxZQUFZLElBQUksY0FBYyxpQkFBaUIsTUFBTSxJQUFJO0FBQy9ELFFBQUksVUFBVyxXQUFVLFVBQVUsSUFBSSxRQUFRO0FBQUEsRUFDakQ7QUFFQSxpQkFBZSw2QkFBNkI7QUFxQjFDLFVBQU0sZUFBZSxPQUFPLHdCQUF3QixDQUFDO0FBRXJELFVBQU0sWUFBWSxDQUFDO0FBQ25CLFVBQU0scUJBQXFCLENBQUM7QUFDNUIsZUFBVyxDQUFDQyxJQUFHQyxFQUFDLEtBQUssT0FBTyxRQUFRLFlBQVksR0FBRztBQUNqRCxVQUFJRCxHQUFFLFdBQVcsUUFBUSxFQUFHLG9CQUFtQkEsRUFBQyxJQUFJQztBQUFBLFVBQy9DLFdBQVVELEVBQUMsSUFBSUM7QUFBQSxJQUN0QjtBQUNBLFVBQU0sUUFBUSxPQUFPLEtBQUssWUFBWSxFQUFFO0FBQ3hDLFFBQUksVUFBVSxFQUFHO0FBRWpCLFVBQU0sZ0JBQWdCLE9BQU8seUJBQXlCLENBQUM7QUFDdkQsVUFBTSxzQkFBc0IsY0FDekIsT0FBTyxPQUFLO0FBQ1gsWUFBTSxTQUFTLG1CQUFtQixFQUFFLE9BQU87QUFDM0MsYUFBTyxXQUFXLGFBQWEsV0FBVztBQUFBLElBQzVDLENBQUMsRUFDQSxJQUFJLFFBQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxhQUFhLEVBQUUsYUFBYSxlQUFlLEVBQUUsZUFBZSxXQUFXLEVBQUUsVUFBVSxFQUFFO0FBQ3BILFFBQUk7QUFDRixZQUFNLFdBQVcsTUFBTSxNQUFNLHlCQUF5QjtBQUFBLFFBQ3BELFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixXQUFXLHNCQUFzQixvQkFBb0IsQ0FBQztBQUFBLE1BQ3JHLENBQUM7QUFDRCxVQUFJLFNBQVMsSUFBSTtBQUNmLFFBQUFDLGNBQWEsbUJBQW1CO0FBQ2hDLGtCQUFVLGlDQUFpQyxLQUFLLFNBQVM7QUFDekQsMkJBQW1CO0FBRW5CLGVBQU8sa0JBQWtCLE9BQU8sbUJBQW1CLENBQUM7QUFDcEQsZUFBTyxnQkFBZ0Isd0JBQXdCO0FBQy9DLFlBQUksdUJBQXVCLG9CQUFvQixTQUFTLEdBQUc7QUFDekQsaUJBQU8sZ0JBQWdCLGtDQUFrQztBQUFBLFFBQzNEO0FBQ0EsWUFBSSxPQUFPLDBCQUEwQixXQUFZLHVCQUFzQjtBQUN2RSxrQkFBVSxnQkFBZ0I7QUFBQSxNQUM1QixPQUFPO0FBQ0wsY0FBTSxNQUFNLE1BQU0sU0FBUyxLQUFLO0FBQ2hDLGtCQUFVLFVBQVUsSUFBSSxTQUFTLDJCQUEyQixJQUFJLE9BQU87QUFBQSxNQUN6RTtBQUFBLElBQ0YsU0FBUyxHQUFHO0FBQ1YsZ0JBQVUsNERBQTRELE9BQU87QUFBQSxJQUMvRTtBQUFBLEVBQ0Y7QUFFQSxXQUFTLG1CQUFtQixPQUFPLFdBQVc7QUFDNUMsVUFBTSxNQUFNLE9BQU87QUFDbkIsUUFBSSxDQUFDLElBQUs7QUFDVixVQUFNLE1BQU0sSUFBSSxVQUFVLE9BQUssRUFBRSxPQUFPLEtBQUs7QUFDN0MsUUFBSSxNQUFNLEVBQUc7QUFDYixVQUFNLFNBQVMsTUFBTTtBQUNyQixRQUFJLFNBQVMsS0FBSyxVQUFVLElBQUksT0FBUTtBQUN4QyxLQUFDLElBQUksR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUNoRCxXQUFPLHVCQUF1QjtBQUM5QixtQ0FBK0IsU0FBUyxlQUFlLDhCQUE4QixDQUFDO0FBQUEsRUFDeEY7QUFTQSxpQkFBZUMsMkJBQTBCO0FBQ3ZDLFVBQU0sWUFBWSxTQUFTLGVBQWUsa0JBQWtCO0FBQzVELFFBQUksQ0FBQyxVQUFXO0FBRWhCLGNBQVUsWUFBWTtBQUd0QixRQUFJLGNBQWMsQ0FBQztBQUNuQixRQUFJO0FBQ0YsWUFBTSxNQUFNLE1BQU0sTUFBTSxvQkFBb0I7QUFDNUMsWUFBTSxPQUFPLE1BQU0sSUFBSSxLQUFLO0FBQzVCLG9CQUFjLEtBQUssZUFBZSxDQUFDO0FBQUEsSUFDckMsU0FBU1AsSUFBRztBQUFBLElBQUM7QUFFYixRQUFJLFlBQVksV0FBVyxHQUFHO0FBQzVCLGdCQUFVLFlBQVk7QUFDdEI7QUFBQSxJQUNGO0FBR0EsV0FBTyxtQkFBbUIsT0FBTyxvQkFBb0IsQ0FBQztBQUN0RCxnQkFBWSxRQUFRLENBQUMsS0FBSyxXQUFXO0FBQ25DLFVBQUksQ0FBQyxPQUFPLGlCQUFpQixNQUFNLEdBQUc7QUFDcEMsZUFBTyxpQkFBaUIsTUFBTSxLQUFLLElBQUksb0JBQW9CLElBQUksZ0JBQWdCLENBQUMsR0FBRztBQUFBLFVBQUksT0FDckY7QUFBQSxZQUNFLE9BQU8sTUFBTSxXQUFXLElBQUssTUFBTSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsV0FBVyxPQUFRO0FBQUEsVUFDckY7QUFBQSxRQUNGO0FBQUEsTUFDRixPQUFPO0FBQ0wsZUFBTyxpQkFBaUIsTUFBTSxJQUFJLDhCQUE4QixPQUFPLGlCQUFpQixNQUFNLENBQUM7QUFBQSxNQUNqRztBQUFBLElBQ0YsQ0FBQztBQUVELFFBQUlHLFFBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVVYLFVBQU0sZUFBZ0IsT0FBTyxtQkFBbUIsT0FBTyxnQkFBZ0Isd0JBQXlCLGVBQWUsZUFBZSxDQUFDO0FBQy9ILGdCQUFZLFFBQVEsQ0FBQyxLQUFLLFdBQVc7QUFDbkMsWUFBTSxRQUFRLElBQUksTUFBTSxJQUFJLGlCQUFpQixRQUFRLE1BQU07QUFDM0QsWUFBTSxXQUFXLGFBQWEsS0FBSztBQUNuQyxVQUFJLGFBQWEsVUFBVztBQUM1QixZQUFNLFFBQVcsV0FBVyxJQUFJLFNBQVMsSUFBSSxZQUFZLGNBQWMsU0FBUyxDQUFDLEVBQUU7QUFDbkYsWUFBTSxVQUFXLFdBQVcsSUFBSSxXQUFXLElBQUksZ0JBQWdCLEVBQUU7QUFDakUsWUFBTSxXQUFXLE9BQU8saUJBQWlCLE1BQU0sRUFBRTtBQUVqRCxNQUFBQSxTQUFRO0FBQUE7QUFBQTtBQUFBLGtDQUdzQixLQUFLLEdBQUcsVUFBVSxtREFBbUQsT0FBTyxZQUFZLEVBQUU7QUFBQSx5REFDbkUsUUFBUSxVQUFVLGFBQWEsSUFBSSxNQUFNLEVBQUU7QUFBQTtBQUFBLDZEQUV2QyxNQUFNO0FBQUEsOEJBQ3JDLE1BQU07QUFBQTtBQUFBLHlDQUVLLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUk3QyxDQUFDO0FBRUQsSUFBQUEsU0FBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFSLGNBQVUsWUFBWUE7QUFHdEIsZ0JBQVksUUFBUSxDQUFDSCxJQUFHLFdBQVcsNEJBQTRCLE1BQU0sQ0FBQztBQUFBLEVBQ3hFO0FBR0EsTUFBTSxzQkFBc0Isb0JBQUksSUFBSSxDQUFDLE9BQU0sUUFBTyxNQUFLLE9BQU0sTUFBTSxDQUFDO0FBQ3BFLE1BQU0sa0JBQWtCLG9CQUFJLElBQUk7QUFBQSxJQUM5QjtBQUFBLElBQVc7QUFBQSxJQUFjO0FBQUEsSUFBUztBQUFBLElBQWU7QUFBQSxJQUNqRDtBQUFBLElBQWE7QUFBQSxJQUFTO0FBQUEsSUFBZTtBQUFBLEVBQ3ZDLENBQUM7QUFDRCxNQUFNLG9CQUFvQixvQkFBSSxJQUFJO0FBQUEsSUFDaEM7QUFBQSxJQUFjO0FBQUEsSUFBVztBQUFBLElBQWM7QUFBQSxJQUFZO0FBQUEsSUFDbkQ7QUFBQSxJQUFhO0FBQUEsSUFBUztBQUFBLElBQVk7QUFBQSxJQUFZO0FBQUEsSUFDOUM7QUFBQSxJQUFVO0FBQUEsSUFBTTtBQUFBLElBQVk7QUFBQSxJQUFlO0FBQUEsSUFDM0M7QUFBQSxJQUFXO0FBQUEsSUFBWTtBQUFBLElBQVc7QUFBQSxJQUFVO0FBQUEsSUFDNUM7QUFBQSxJQUFVO0FBQUEsSUFBYztBQUFBLElBQVc7QUFBQSxJQUFVO0FBQUEsSUFDN0M7QUFBQSxJQUFPO0FBQUEsSUFBYztBQUFBLElBQVc7QUFBQSxJQUFZO0FBQUEsSUFDNUM7QUFBQSxJQUFXO0FBQUEsSUFBVztBQUFBLElBQU07QUFBQSxJQUFVO0FBQUEsSUFBWTtBQUFBLElBQ2xEO0FBQUEsSUFBVztBQUFBLElBQVk7QUFBQSxJQUFTO0FBQUEsSUFBVTtBQUFBLElBQWE7QUFBQSxJQUN2RDtBQUFBLElBQVU7QUFBQSxJQUFVO0FBQUEsSUFBYztBQUFBLElBQWM7QUFBQSxJQUNoRDtBQUFBLElBQWM7QUFBQSxJQUFhO0FBQUEsRUFDN0IsQ0FBQztBQUVELFdBQVNRLGlCQUFnQkMsT0FBTTtBQUM3QixVQUFNLGFBQWFBLFNBQVEsSUFBSSxLQUFLLEVBQUUsTUFBTSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxRQUFRLFdBQVcsRUFBRTtBQUM5RixRQUFJLENBQUMsVUFBVyxRQUFPO0FBQ3ZCLFFBQUksb0JBQW9CLElBQUksU0FBUyxFQUFHLFFBQU8sRUFBRSxPQUFPLFdBQVcsTUFBTSxVQUFVO0FBQ25GLFFBQUksZ0JBQWdCLElBQUksU0FBUyxFQUFHLFFBQU8sRUFBRSxPQUFPLFFBQVcsTUFBTSxVQUFVO0FBQy9FLFFBQUksQ0FBQyxrQkFBa0IsSUFBSSxTQUFTLEVBQUcsUUFBTyxFQUFFLE9BQU8sV0FBVyxNQUFNLFVBQVU7QUFDbEYsV0FBTztBQUFBLEVBQ1Q7QUFLQSxXQUFTLDRCQUE0QixRQUFRO0FBQzNDLFVBQU0sU0FBUyxTQUFTLGVBQWUsWUFBWSxNQUFNLEVBQUU7QUFDM0QsUUFBSSxDQUFDLE9BQVE7QUFDYixVQUFNLE9BQU8sOEJBQThCLE9BQU8saUJBQWlCLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDaEYsV0FBTyxpQkFBaUIsTUFBTSxJQUFJO0FBRWxDLFFBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsYUFBTyxZQUFZO0FBQ25CO0FBQUEsSUFDRjtBQUVBLFdBQU8sWUFBWSxLQUFLLElBQUksQ0FBQyxPQUFPLFdBQVc7QUFDN0MsWUFBTUEsUUFBTyxzQkFBc0IsS0FBSztBQUN4QyxZQUFNLFNBQVMsd0JBQXdCLEtBQUs7QUFDNUMsWUFBTSxXQUFXRCxpQkFBZ0JDLEtBQUk7QUFDckMsWUFBTSxZQUFZLFdBQ2IsU0FBUyxVQUFVLFlBQ2hCLHNMQUFzTCxTQUFTLElBQUkseUhBQ25NLFNBQVMsVUFBVSxTQUNuQixrS0FBa0ssU0FBUyxJQUFJLHdIQUMvSyxxSkFBcUosU0FBUyxJQUFJLG1JQUV0SztBQUNKLGFBQU87QUFBQSx1QkFDWSxNQUFNLElBQUksTUFBTSxZQUFZLFNBQVMsMkJBQTJCLEVBQUU7QUFBQTtBQUFBLDRHQUVtQixNQUFNLElBQUksTUFBTTtBQUFBLDRHQUNoQixNQUFNLElBQUksTUFBTTtBQUFBO0FBQUE7QUFBQSwrQkFHN0YsTUFBTSxJQUFJLE1BQU07QUFBQTtBQUFBLDZEQUVjLFNBQVMsWUFBWSxVQUFVLFVBQVUsWUFBWSxZQUFZLFVBQVUsVUFBVSxTQUFTLFlBQVksU0FBUyw0RUFBNEUsU0FBUyxzQ0FBc0MsRUFBRTtBQUFBLDBDQUNuUSxNQUFNLElBQUksTUFBTTtBQUFBLHdDQUNsQixNQUFNLElBQUksTUFBTTtBQUFBLFNBQy9DLFdBQVdBLEtBQUksQ0FBQztBQUFBLFFBQ2pCLFNBQVM7QUFBQTtBQUFBO0FBQUEsa0NBR2lCLFNBQVMsV0FBVyxFQUFFLFlBQVksU0FBUyxnQ0FBZ0MsK0JBQStCO0FBQUEsd0JBQ3BILFNBQVMsZ0NBQWdDLCtCQUErQixtQkFBbUIsTUFBTTtBQUFBLDZDQUM1RSxNQUFNLElBQUksTUFBTTtBQUFBLHlCQUNwQyxTQUFTLFlBQVksU0FBUyxNQUFNLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSwrQ0FHNUIsTUFBTSxJQUFJLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQSx1Q0FJeEIsTUFBTSxJQUFJLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3JELENBQUMsRUFBRSxLQUFLLEVBQUU7QUFBQSxFQUNaO0FBR0EsTUFBSSxtQkFBbUI7QUFFdkIsV0FBUyxzQkFBc0IsUUFBUSxRQUFRLE9BQU87QUFDcEQsUUFBSSxDQUFDLE9BQU8saUJBQWlCLE1BQU0sRUFBRztBQUN0QyxVQUFNLFdBQVcsK0JBQStCLE9BQU8saUJBQWlCLE1BQU0sRUFBRSxNQUFNLENBQUM7QUFDdkYsYUFBUyxPQUFPO0FBQ2hCLFdBQU8saUJBQWlCLE1BQU0sRUFBRSxNQUFNLElBQUk7QUFHMUMsaUJBQWEsZ0JBQWdCO0FBQzdCLHVCQUFtQixXQUFXLFlBQVk7QUFDeEMsVUFBSTtBQUNGLGNBQU0sTUFBTSwrQkFBK0I7QUFBQSxVQUN6QyxRQUFRO0FBQUEsVUFDUixTQUFTLEVBQUUsZ0JBQWdCLG1CQUFtQjtBQUFBLFVBQzlDLE1BQU0sS0FBSyxVQUFVLEVBQUUsT0FBTyxPQUFPLGlCQUFpQixDQUFDO0FBQUEsUUFDekQsQ0FBQztBQUFBLE1BQ0gsU0FBU0MsS0FBSTtBQUFBLE1BQWdEO0FBQUEsSUFDL0QsR0FBRyxHQUFHO0FBQUEsRUFDUjtBQUVBLFdBQVMsd0JBQXdCLFFBQVEsUUFBUTtBQUMvQyxRQUFJLENBQUMsT0FBTyxpQkFBaUIsTUFBTSxFQUFHO0FBQ3RDLFVBQU0sV0FBVywrQkFBK0IsT0FBTyxpQkFBaUIsTUFBTSxFQUFFLE1BQU0sQ0FBQztBQUN2RixhQUFTLFNBQVMsQ0FBQyxTQUFTO0FBQzVCLFdBQU8saUJBQWlCLE1BQU0sRUFBRSxNQUFNLElBQUk7QUFDMUMsZ0NBQTRCLE1BQU07QUFBQSxFQUNwQztBQUVBLFdBQVMsZ0JBQWdCLFFBQVEsUUFBUSxLQUFLO0FBQzVDLFVBQU0sT0FBTyxPQUFPLGlCQUFpQixNQUFNO0FBQzNDLFFBQUksQ0FBQyxLQUFNO0FBQ1gsVUFBTSxTQUFTLFNBQVM7QUFDeEIsUUFBSSxTQUFTLEtBQUssVUFBVSxLQUFLLE9BQVE7QUFFekMsVUFBTSxLQUFLLFNBQVMsZUFBZSxZQUFZLE1BQU0sSUFBSSxNQUFNLEVBQUU7QUFDakUsUUFBSSxHQUFJLHVCQUFzQixRQUFRLFFBQVEsR0FBRyxLQUFLO0FBQ3RELEtBQUMsS0FBSyxNQUFNLEdBQUcsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxHQUFHLEtBQUssTUFBTSxDQUFDO0FBQzFELGdDQUE0QixNQUFNO0FBQUEsRUFDcEM7QUFFQSxpQkFBZSxrQkFBa0IsUUFBUSxRQUFRO0FBQy9DLFVBQU0sT0FBTyxPQUFPLGlCQUFpQixNQUFNO0FBQzNDLFFBQUksQ0FBQyxLQUFNO0FBQ1gsVUFBTSxZQUFZLE1BQU07QUFBQSxNQUN0QjtBQUFBLE1BQ0EsRUFBRSxjQUFjLFVBQVUsYUFBYSxVQUFVLFFBQVEsS0FBSztBQUFBLElBQ2hFO0FBQ0EsUUFBSSxDQUFDLFVBQVc7QUFDaEIsU0FBSyxPQUFPLFFBQVEsQ0FBQztBQUNyQixnQ0FBNEIsTUFBTTtBQUFBLEVBQ3BDO0FBRUEsV0FBUyxrQkFBa0IsUUFBUTtBQUNqQyxRQUFJLENBQUMsT0FBTyxpQkFBaUIsTUFBTSxFQUFHLFFBQU8saUJBQWlCLE1BQU0sSUFBSSxDQUFDO0FBQ3pFLFdBQU8saUJBQWlCLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxJQUFJLFFBQVEsTUFBTSxDQUFDO0FBQ2hFLGdDQUE0QixNQUFNO0FBRWxDLFVBQU0sU0FBUyxPQUFPLGlCQUFpQixNQUFNLEVBQUUsU0FBUztBQUN4RCxVQUFNLEtBQUssU0FBUyxlQUFlLFlBQVksTUFBTSxJQUFJLE1BQU0sRUFBRTtBQUNqRSxRQUFJLEdBQUksSUFBRyxNQUFNO0FBQUEsRUFDbkI7QUFFQSxpQkFBZSwwQkFBMEIsUUFBUSxRQUFRO0FBQ3ZELFVBQU0sS0FBSyxTQUFTLGVBQWUsWUFBWSxNQUFNLElBQUksTUFBTSxFQUFFO0FBQ2pFLFFBQUksQ0FBQyxHQUFJO0FBQ1QsVUFBTSxlQUFlLEdBQUcsTUFBTSxLQUFLO0FBQ25DLFFBQUksQ0FBQyxjQUFjO0FBQUUsZ0JBQVUsZ0NBQWdDLE9BQU87QUFBRztBQUFBLElBQVE7QUFFakYsZ0NBQTRCLENBQUM7QUFDN0Isd0JBQW9CO0FBQ3BCLHNCQUFrQixjQUFjLElBQUksTUFBTTtBQUFBLE1BQ3hDLGlCQUFpQjtBQUFBLE1BQ2pCLGtCQUFrQjtBQUFBLE1BQ2xCLFVBQVUsT0FBTyxlQUFlO0FBQzlCLDhCQUFzQixRQUFRLFFBQVEsVUFBVTtBQUNoRCxZQUFJLEdBQUksSUFBRyxRQUFRO0FBQ25CLDhCQUFzQixZQUFZLFVBQVU7QUFDNUMsa0JBQVUsaUJBQWlCO0FBQUEsTUFDN0I7QUFBQSxJQUNGLENBQUM7QUFDRCxVQUFNLFlBQVksWUFBWTtBQUFBLEVBQ2hDO0FBRUEsaUJBQWUsNkJBQTZCLE9BQU87QUFDakQsVUFBTSxPQUFPLE9BQU8sd0JBQXdCLENBQUMsR0FBRyxLQUFLLE9BQUssRUFBRSxPQUFPLEtBQUs7QUFDeEUsUUFBSSxDQUFDLElBQUs7QUFDVixVQUFNLGVBQWUsSUFBSSxlQUFlO0FBQ3hDLFFBQUksQ0FBQyxjQUFjO0FBQUUsZ0JBQVUscUNBQXFDLE9BQU87QUFBRztBQUFBLElBQVE7QUFFdEYsZ0NBQTRCLENBQUM7QUFDN0Isd0JBQW9CO0FBQ3BCLHNCQUFrQixjQUFjLElBQUksTUFBTTtBQUFBLE1BQ3hDLGlCQUFpQjtBQUFBLE1BQ2pCLFVBQVUsT0FBTyxlQUFlO0FBQzlCLGNBQU0sNkJBQTZCLE9BQU8sZUFBZSxVQUFVO0FBQ25FLGNBQU0sU0FBUyxTQUFTLGVBQWUsWUFBWSxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7QUFDdEUsWUFBSSxPQUFRLFFBQU8sUUFBUTtBQUMzQiw4QkFBc0IsWUFBWSxVQUFVO0FBQzVDLGtCQUFVLHNCQUFzQjtBQUFBLE1BQ2xDO0FBQUEsSUFDRixDQUFDO0FBQ0QsVUFBTSxZQUFZLFlBQVk7QUFBQSxFQUNoQztBQUVBLFdBQVMsa0JBQWtCLGNBQWMscUJBQXFCLG1CQUFtQixXQUFXO0FBQzFGLHdCQUFvQjtBQUVwQixVQUFNLGdCQUFnQixxQkFBcUIsT0FDdkMsMkVBQTJFLFdBQVcsaUJBQWlCLENBQUMsU0FDeEc7QUFFSixhQUFTLGVBQWUsbUJBQW1CLEVBQUUsY0FBYztBQUMzRCxhQUFTLGVBQWUscUJBQXFCLEVBQUUsWUFBWTtBQUFBO0FBQUE7QUFBQSxvRkFHdUIsV0FBVyxZQUFZLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUlwRyxhQUFhO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQVFaLFdBQVcsbUJBQW1CLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRdEMsYUFBUyxlQUFlLHFCQUFxQixFQUFFLE1BQU0sVUFBVTtBQUMvRCxpQ0FBNkIsU0FBUztBQUN0QyxvQkFBZ0IscUJBQXFCO0FBQ3JDLGNBQVUscUJBQXFCO0FBRS9CLGFBQVMsZUFBZSwwQkFBMEIsRUFBRSxVQUFVLE1BQU0sWUFBWSxZQUFZO0FBRTVGLDRCQUF3QixpQkFBaUI7QUFBQSxFQUMzQztBQUVBLFdBQVMsd0JBQXdCLFlBQVk7QUFDM0MsVUFBTSxZQUFZLFNBQVMsZUFBZSx3QkFBd0I7QUFDbEUsUUFBSSxDQUFDLFVBQVc7QUFDaEIsY0FBVSxXQUFXLGNBQWM7QUFDbkMsY0FBVSxVQUFVLGNBQWMsT0FBTyxPQUFPLFlBQVk7QUFDMUQsWUFBTSxrQkFBa0IsU0FBUyxVQUFVO0FBQzNDLHNCQUFnQjtBQUFBLElBQ2xCO0FBQUEsRUFDRjtBQUVBLGlCQUFlLHNCQUFzQixTQUFTLGNBQWM7QUFDMUQsUUFBSSxDQUFDLGtCQUFtQjtBQUN4QixVQUFNLFFBQVE7QUFDZCx3QkFBb0I7QUFDcEIsVUFBTSxPQUFPLEVBQUUsUUFBUSxPQUFPLFFBQVE7QUFDdEMsUUFBSSxnQkFBZ0IsS0FBTSxNQUFLLGdCQUFnQjtBQUMvQyxRQUFJO0FBQ0YsWUFBTSxNQUFNLG9DQUFvQztBQUFBLFFBQzlDLFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVUsSUFBSTtBQUFBLE1BQzNCLENBQUM7QUFBQSxJQUNILFNBQVNWLElBQUc7QUFBQSxJQUErQztBQUFBLEVBQzdEO0FBRUEsaUJBQWUsWUFBWSxjQUFjO0FBQ3ZDLFVBQU0saUJBQWlCLFNBQVMsZUFBZSwwQkFBMEI7QUFDekUsVUFBTSxtQkFBbUIsaUJBQWlCLGVBQWUsTUFBTSxLQUFLLElBQUk7QUFFeEUsVUFBTSxjQUFlLFNBQVMsZUFBZSwwQkFBMEI7QUFDdkUsVUFBTSxZQUFlLFNBQVMsZUFBZSx3QkFBd0I7QUFDckUsVUFBTSxZQUFlLFNBQVMsZUFBZSx3QkFBd0I7QUFDckUsVUFBTSxlQUFlLFNBQVMsZUFBZSx3QkFBd0I7QUFHckUsUUFBSSxjQUFjO0FBQ2hCLFlBQU0sT0FBTyxhQUFhLFlBQVksS0FBSztBQUMzQyxVQUFJLFFBQVEsU0FBUyxzQkFBaUIsQ0FBQyxLQUFLLFdBQVcsUUFBUSxLQUFLLENBQUMsMEJBQTBCLFNBQVMsSUFBSSxHQUFHO0FBQzdHLGtDQUEwQixLQUFLLElBQUk7QUFBQSxNQUNyQztBQUFBLElBQ0Y7QUFFQSxRQUFJLGFBQWE7QUFBRSxrQkFBWSxXQUFXO0FBQU0sa0JBQVksWUFBWTtBQUFBLElBQXFEO0FBQzdILFFBQUksV0FBYTtBQUFFLGdCQUFVLFdBQVc7QUFBQSxJQUFNO0FBQzlDLFFBQUksY0FBYztBQUFFLG1CQUFhLE1BQU0sUUFBUTtBQUFXLG1CQUFhLE1BQU0sWUFBWTtBQUFVLG1CQUFhLGNBQWM7QUFBQSxJQUFlO0FBRTdJLFFBQUk7QUFDRixZQUFNLE1BQU0sTUFBTSxNQUFNLDRCQUE0QjtBQUFBLFFBQ2xELFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVU7QUFBQSxVQUNuQixrQkFBc0I7QUFBQSxVQUN0QixrQkFBc0IsbUJBQW1CLG1CQUFtQjtBQUFBLFVBQzVELG1CQUFzQixtQkFBbUIsb0JBQW9CO0FBQUEsVUFDN0QsbUJBQXNCO0FBQUEsVUFDdEIsc0JBQXNCO0FBQUEsUUFDeEIsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUNELFlBQU0sT0FBTyxNQUFNLElBQUksS0FBSztBQUM1QixVQUFJLENBQUMsSUFBSSxHQUFJLE9BQU0sSUFBSSxNQUFNLEtBQUssU0FBUyxnQkFBZ0I7QUFFM0QsWUFBTSxZQUFZLEtBQUssYUFBYTtBQUNwQywwQkFBb0IsS0FBSyxVQUFVO0FBQ25DLFVBQUksY0FBYztBQUNoQixxQkFBYSxNQUFNLFFBQVE7QUFDM0IscUJBQWEsTUFBTSxZQUFZO0FBQy9CLHFCQUFhLGNBQWM7QUFBQSxNQUM3QjtBQUNBLDhCQUF3QixTQUFTO0FBQUEsSUFDbkMsU0FBUyxLQUFLO0FBQ1osVUFBSSxjQUFjO0FBQUUscUJBQWEsTUFBTSxRQUFRO0FBQVcscUJBQWEsTUFBTSxZQUFZO0FBQUkscUJBQWEsY0FBYyxVQUFVLElBQUksT0FBTztBQUFBLE1BQUk7QUFDakosZ0JBQVUsc0JBQXNCLElBQUksT0FBTyxJQUFJLE9BQU87QUFBQSxJQUN4RCxVQUFFO0FBQ0EsVUFBSSxhQUFhO0FBQUUsb0JBQVksV0FBVztBQUFPLG9CQUFZLGNBQWM7QUFBQSxNQUFZO0FBQ3ZGLFVBQUksV0FBYTtBQUFFLGtCQUFVLFdBQVc7QUFBQSxNQUFPO0FBQUEsSUFDakQ7QUFBQSxFQUNGO0FBS0EsaUJBQWUsNkJBQTZCLE9BQU8sT0FBTyxPQUFPO0FBQy9ELFVBQU0sT0FBTyxPQUFPLHdCQUF3QixDQUFDLEdBQUcsS0FBSyxPQUFLLEVBQUUsT0FBTyxLQUFLO0FBQ3hFLFVBQU0sV0FBVyxNQUFNLElBQUksS0FBSyxJQUFJO0FBQ3BDLFFBQUksSUFBSyxLQUFJLEtBQUssSUFBSTtBQUN0QixRQUFJO0FBQ0YsWUFBTSxNQUFNLE1BQU0sTUFBTSwyQkFBMkI7QUFBQSxRQUNqRCxRQUFRO0FBQUEsUUFDUixTQUFTLEVBQUUsZ0JBQWdCLG1CQUFtQjtBQUFBLFFBQzlDLE1BQU0sS0FBSyxVQUFVLEVBQUUsSUFBSSxPQUFPLE9BQU8sTUFBTSxDQUFDO0FBQUEsTUFDbEQsQ0FBQztBQUNELFVBQUksQ0FBQyxJQUFJLEdBQUksT0FBTSxJQUFJLE9BQU8sTUFBTSxJQUFJLEtBQUssR0FBRyxTQUFTLGFBQWE7QUFBQSxJQUN4RSxTQUFTLEtBQUs7QUFFWixVQUFJLE9BQU8sYUFBYSxPQUFXLEtBQUksS0FBSyxJQUFJO0FBQ2hELFlBQU0sS0FBSyxTQUFTLGVBQWUsVUFBVSxVQUFVLGFBQWEsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLFlBQVksSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO0FBQ3pILFVBQUksR0FBSSxJQUFHLFFBQVEsWUFBWTtBQUMvQixnQkFBVSwrQkFBK0IsSUFBSSxPQUFPLElBQUksT0FBTztBQUFBLElBQ2pFO0FBQUEsRUFDRjtBQUtBLGlCQUFlLDBCQUEwQixPQUFPO0FBQzlDLFVBQU0sWUFBWSxNQUFNO0FBQUEsTUFDdEI7QUFBQSxNQUNBLEVBQUUsY0FBYyxRQUFRLGFBQWEsVUFBVSxRQUFRLEtBQUs7QUFBQSxJQUM5RDtBQUNBLFFBQUksQ0FBQyxVQUFXO0FBQ2hCLFFBQUk7QUFDRixZQUFNLE1BQU0sTUFBTSxNQUFNLDJCQUEyQjtBQUFBLFFBQ2pELFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxJQUFJLE9BQU8sUUFBUSxTQUFTLENBQUM7QUFBQSxNQUN0RCxDQUFDO0FBQ0QsWUFBTSxPQUFPLE1BQU0sSUFBSSxLQUFLO0FBQzVCLFVBQUksS0FBSyxJQUFJO0FBQ1gsZUFBTyx3QkFBd0IsT0FBTyx3QkFBd0IsQ0FBQyxHQUFHLE9BQU8sT0FBSyxFQUFFLE9BQU8sS0FBSztBQUM1RixlQUFPLE9BQU8scUJBQXFCLEtBQUs7QUFDeEMsdUNBQStCO0FBQy9CLGtCQUFVLHNDQUFzQztBQUFBLE1BQ2xELE9BQU87QUFDTCxrQkFBVSxLQUFLLFNBQVMsa0JBQWtCLE9BQU87QUFBQSxNQUNuRDtBQUFBLElBQ0YsU0FBU0EsSUFBRztBQUNWLGdCQUFVLGlDQUFpQyxPQUFPO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBTUEsV0FBUyw4QkFBOEIsUUFBUSxPQUFPLE9BQU87QUFDM0QsVUFBTSxRQUFRLE9BQU8seUJBQXlCLENBQUMsR0FBRyxLQUFLLE9BQUssRUFBRSxZQUFZLE1BQU07QUFDaEYsUUFBSSxLQUFNLE1BQUssS0FBSyxJQUFJO0FBQUEsRUFDMUI7QUFLQSxpQkFBZSw4QkFBOEIsUUFBUTtBQUNuRCxVQUFNLFFBQVEsT0FBTyx5QkFBeUIsQ0FBQyxHQUFHLEtBQUssT0FBSyxFQUFFLFlBQVksTUFBTTtBQUNoRixRQUFJLENBQUMsS0FBTTtBQUNYLFVBQU0sZUFBZSxLQUFLLGVBQWU7QUFDekMsUUFBSSxDQUFDLGNBQWM7QUFBRSxnQkFBVSxxQ0FBcUMsT0FBTztBQUFHO0FBQUEsSUFBUTtBQUV0RixnQ0FBNEIsQ0FBQztBQUM3Qix3QkFBb0I7QUFDcEIsc0JBQWtCLGNBQWMsSUFBSSxNQUFNO0FBQUEsTUFDeEMsaUJBQWlCO0FBQUEsTUFDakIsVUFBVSxPQUFPLGVBQWU7QUFDOUIsc0NBQThCLFFBQVEsZUFBZSxVQUFVO0FBQy9ELGNBQU0sU0FBUyxTQUFTLGVBQWUsWUFBWSxNQUFNLEVBQUU7QUFDM0QsWUFBSSxPQUFRLFFBQU8sUUFBUTtBQUMzQiw4QkFBc0IsWUFBWSxVQUFVO0FBQzVDLGtCQUFVLHNCQUFzQjtBQUFBLE1BQ2xDO0FBQUEsSUFDRixDQUFDO0FBQ0QsVUFBTSxZQUFZLFlBQVk7QUFBQSxFQUNoQztBQU1BLFdBQVMsNEJBQTRCLFFBQVEsV0FBVztBQUN0RCxVQUFNLE1BQU0sT0FBTztBQUNuQixRQUFJLENBQUMsSUFBSztBQUNWLFVBQU0sTUFBTSxJQUFJLFVBQVUsT0FBSyxFQUFFLFlBQVksTUFBTTtBQUNuRCxRQUFJLE1BQU0sRUFBRztBQUNiLFVBQU0sU0FBUyxNQUFNO0FBQ3JCLFFBQUksU0FBUyxLQUFLLFVBQVUsSUFBSSxPQUFRO0FBQ3hDLEtBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ2hELG1DQUErQixTQUFTLGVBQWUsOEJBQThCLENBQUM7QUFBQSxFQUN4RjtBQU1BLGlCQUFlLDJCQUEyQixRQUFRO0FBQ2hELFVBQU0sWUFBWSxNQUFNLGNBQWMsOEJBQThCLEVBQUUsY0FBYyxVQUFVLFFBQVEsS0FBSyxDQUFDO0FBQzVHLFFBQUksQ0FBQyxVQUFXO0FBQ2hCLFdBQU8seUJBQXlCLE9BQU8seUJBQXlCLENBQUMsR0FBRyxPQUFPLE9BQUssRUFBRSxZQUFZLE1BQU07QUFDcEcsV0FBTyxPQUFPLHFCQUFxQixNQUFNO0FBQ3pDLG1DQUErQixTQUFTLGVBQWUsOEJBQThCLENBQUM7QUFBQSxFQUN4RjtBQUVBLGlCQUFlLGtDQUFrQztBQUMvQyxRQUFJO0FBRUYsZUFBUyxpQkFBaUIsbUJBQW1CLEVBQUUsUUFBUSxRQUFNO0FBQzNELGNBQU0sUUFBUSxHQUFHLEdBQUcsTUFBTSxHQUFHO0FBQzdCLFlBQUksTUFBTSxVQUFVLEdBQUc7QUFDckIsZ0JBQU0sU0FBUyxTQUFTLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLGdCQUFNLFNBQVMsU0FBUyxNQUFNLENBQUMsQ0FBQztBQUNoQyxjQUFJLENBQUMsTUFBTSxNQUFNLEtBQUssQ0FBQyxNQUFNLE1BQU0sS0FBSyxPQUFPLGlCQUFpQixNQUFNLEdBQUc7QUFDdkUsa0NBQXNCLFFBQVEsUUFBUSxHQUFHLEtBQUs7QUFBQSxVQUNoRDtBQUFBLFFBQ0Y7QUFBQSxNQUNGLENBQUM7QUFFRCxZQUFNLE1BQU0sTUFBTSxNQUFNLCtCQUErQjtBQUFBLFFBQ3JELFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxPQUFPLE9BQU8saUJBQWlCLENBQUM7QUFBQSxNQUN6RCxDQUFDO0FBQ0QsVUFBSSxDQUFDLElBQUksSUFBSTtBQUNYLGNBQU0sTUFBTSxNQUFNLElBQUksS0FBSztBQUMzQixrQkFBVSxpQkFBaUIsSUFBSSxTQUFTLGVBQWUsSUFBSSxPQUFPO0FBQ2xFO0FBQUEsTUFDRjtBQUNBLE1BQUFNLGNBQWEsbUJBQW1CO0FBQ2hDLGdCQUFVLDBCQUEwQjtBQUNwQyxnQkFBVSxlQUFlO0FBQUEsSUFDM0IsU0FBUyxHQUFHO0FBQ1YsZ0JBQVUscUNBQXFDLE9BQU87QUFBQSxJQUN4RDtBQUFBLEVBQ0Y7OztBQ2ovQkE7QUFBQTtBQUFBLHFDQUFBSztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXlDQSxpQkFBZUMsNkJBQTRCO0FBQ3pDLFVBQU0sWUFBWSxTQUFTLGVBQWUsMEJBQTBCO0FBQ3BFLFFBQUksQ0FBQyxVQUFXO0FBR2hCLFFBQUksa0JBQW1CO0FBQ3ZCLFFBQUksbUJBQW1CO0FBQ3ZCLFFBQUksbUJBQW1CO0FBRXZCLFFBQUk7QUFDRixZQUFNLE1BQVMsTUFBTSxNQUFNLGFBQWE7QUFDeEMsWUFBTSxTQUFTLElBQUksS0FBSyxNQUFNLElBQUksS0FBSyxJQUFJLENBQUM7QUFHNUMseUJBQW1CLE9BQU8sb0JBQW9CO0FBQzlDLHlCQUFtQixDQUFDLEVBQUUsT0FBTyx1QkFBdUIsT0FBTyxvQkFBb0I7QUFHL0UsWUFBTSxpQkFBaUIsT0FBTyxrQkFBa0IsQ0FBQztBQUNqRCx3QkFBa0IsZUFBZSxxQkFBcUI7QUFBQSxJQUN4RCxTQUFTQyxLQUFJO0FBQUEsSUFFYjtBQUVBLFVBQU0sVUFBWSxvQkFBb0I7QUFDdEMsVUFBTSxZQUFZLG1CQUNkLHlFQUNBO0FBRUosY0FBVSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxzRUFjOEMsU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUJBUTlELFdBQVcsT0FBTyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUs1QixtQkFBbUIsb0JBQW9CLG1CQUFtQjtBQUFBO0FBQUEsMkJBRXZDLFdBQVcsZUFBZSxDQUFDO0FBQUE7QUFBQSxjQUV4QyxFQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFPTixtQkFBbUIsb0hBQStHLDhIQUF5SDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQU9wUCxtQkFBbUIsS0FBSyxpQ0FBaUM7QUFBQTtBQUFBLFVBRWhFLG1CQUFtQixLQUFLLHNEQUFzRDtBQUFBO0FBQUE7QUFBQTtBQU10RixXQUFPLG1CQUFtQjtBQUFBLEVBQzVCO0FBSUEsV0FBUyx1QkFBdUI7QUFFOUIsVUFBTSxRQUFhLFNBQVMsZUFBZSx5QkFBeUI7QUFDcEUsVUFBTSxhQUFhLFNBQVMsZUFBZSx3QkFBd0I7QUFDbkUsUUFBSSxNQUFZLE9BQU0sTUFBTSxVQUFVO0FBQ3RDLFFBQUksV0FBWSxZQUFXLFlBQVk7QUFDdkMsVUFBTSxjQUFjLFNBQVMsZUFBZSxzQkFBc0I7QUFDbEUsUUFBSSxhQUFhO0FBQ2Ysa0JBQVksTUFBTSxVQUFnQjtBQUNsQyxrQkFBWSxNQUFNLFNBQWdCO0FBQ2xDLGtCQUFZLFFBQXNCO0FBQUEsSUFDcEM7QUFBQSxFQUNGO0FBSUEsV0FBUyx5QkFBeUI7QUFDaEMsVUFBTSxRQUFRLFNBQVMsZUFBZSxlQUFlO0FBQ3JELFFBQUksU0FBUyxPQUFPLGtCQUFrQjtBQUNwQyxZQUFNLFFBQVEsT0FBTztBQUNyQiwyQkFBcUI7QUFBQSxJQUN2QjtBQUFBLEVBQ0Y7QUFrQkEsaUJBQWUsaUJBQWlCO0FBQzlCLFVBQU0sUUFBUSxTQUFTLGVBQWUsZUFBZTtBQUNyRCxRQUFJLENBQUMsTUFBTztBQUVaLFVBQU0sY0FBYyxNQUFNLE1BQU0sS0FBSztBQUNyQyxRQUFJLENBQUMsYUFBYTtBQUNoQixnQkFBVSw2Q0FBNkMsT0FBTztBQUM5RDtBQUFBLElBQ0Y7QUFFQSxVQUFNLE1BQU0sU0FBUyxlQUFlLHFCQUFxQjtBQUN6RCxRQUFJLElBQUssS0FBSSxXQUFXO0FBRXhCLFFBQUk7QUFDRixZQUFNLFdBQVcsTUFBTSxNQUFNLHlCQUF5QjtBQUFBLFFBQ3BELFFBQVM7QUFBQSxRQUNULFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBUyxLQUFLLFVBQVUsRUFBRSxNQUFNLFdBQVcsV0FBVyxZQUFZLENBQUM7QUFBQSxNQUNyRSxDQUFDO0FBRUQsVUFBSSxDQUFDLFNBQVMsSUFBSTtBQUNoQixjQUFNLE1BQU0sTUFBTSxTQUFTLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQyxFQUFFO0FBQ2xELGtCQUFVLDJCQUEyQixJQUFJLFNBQVMsU0FBUyxVQUFVLElBQUksT0FBTztBQUNoRjtBQUFBLE1BQ0Y7QUFHQSxZQUFNLFFBQWEsU0FBUyxlQUFlLHlCQUF5QjtBQUNwRSxZQUFNLGFBQWEsU0FBUyxlQUFlLHdCQUF3QjtBQUNuRSxVQUFJLE9BQVk7QUFBRSxjQUFNLE1BQU0sVUFBVTtBQUFBLE1BQUk7QUFDNUMsVUFBSSxZQUFZO0FBQUUsbUJBQVcsWUFBWTtBQUFBLE1BQW1FO0FBRTVHLFlBQU0sY0FBYyxTQUFTLGVBQWUsc0JBQXNCO0FBQ2xFLFVBQUksYUFBYTtBQUNmLG9CQUFZLE1BQU0sVUFBVTtBQUM1QixvQkFBWSxNQUFNLFNBQVU7QUFDNUIsb0JBQVksUUFBZ0I7QUFBQSxNQUM5QjtBQUVBLE1BQUFDLGNBQWEsbUJBQW1CO0FBQ2hDLGdCQUFVLG9CQUFvQjtBQUFBLElBQ2hDLFNBQVMsR0FBRztBQUNWLGdCQUFVLGlDQUFpQyxPQUFPO0FBQUEsSUFDcEQsVUFBRTtBQUNBLFVBQUksSUFBSyxLQUFJLFdBQVc7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFJQSxpQkFBZSxrQkFBa0I7QUFFL0IsVUFBTSxjQUFjLFNBQVMsZUFBZSxzQkFBc0I7QUFDbEUsUUFBSSxlQUFlLFlBQVksTUFBTSxXQUFXLGVBQWU7QUFDN0QsZ0JBQVUsaURBQWlELE9BQU87QUFDbEU7QUFBQSxJQUNGO0FBQ0EsY0FBVSxnQkFBZ0I7QUFBQSxFQUM1Qjs7O0FDbE9BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0NBQUFDO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9DQSxpQkFBZUMsNEJBQTJCO0FBQ3hDLFVBQU0sWUFBWSxTQUFTLGVBQWUseUJBQXlCO0FBQ25FLFFBQUksQ0FBQyxVQUFXO0FBRWhCLFVBQU0sT0FBTyxPQUFPO0FBSXBCLFFBQUksd0JBQXdCLENBQUM7QUFDN0IsVUFBTSxDQUFDLFVBQVUsWUFBWSxJQUFJLE1BQU0sUUFBUSxXQUFXO0FBQUEsTUFDeEQsTUFBTSxvQkFBb0IsRUFBRSxLQUFLLE9BQUssRUFBRSxLQUFLLENBQUM7QUFBQSxNQUM5QyxNQUFNLGFBQWEsRUFBRSxLQUFLLE9BQUssRUFBRSxLQUFLLENBQUM7QUFBQSxJQUN6QyxDQUFDO0FBQ0QsUUFBSSxTQUFTLFdBQVcsZUFBZSxTQUFTLFNBQVMsU0FBUyxNQUFNLElBQUk7QUFDMUUsYUFBTyxPQUFPLHVCQUF1QixTQUFTLE1BQU0sMEJBQTBCLENBQUMsQ0FBQztBQUFBLElBQ2xGO0FBQ0EsUUFBSSxhQUFhLFdBQVcsZUFBZSxhQUFhLE9BQU87QUFFN0QsYUFBTyxPQUFPLHVCQUF1QixhQUFhLE1BQU0sMEJBQTBCLENBQUMsQ0FBQztBQUFBLElBQ3RGO0FBR0EsVUFBTSxpQkFBa0IsUUFBUSxLQUFLLGdDQUFpQztBQUN0RSxVQUFNLGlCQUFpQixpQkFDbkI7QUFBQTtBQUFBLHdGQUVrRixXQUFXLGNBQWMsQ0FBQztBQUFBLGlCQUU1RztBQUdKLGNBQVUsWUFBWTtBQUFBLE1BQ2xCLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUNsQiwrQkFBMkIscUJBQXFCO0FBR2hELFVBQU0sZ0JBQWdCLHNCQUFzQixjQUFjLEtBQUs7QUFDL0QsUUFBSSxlQUFlO0FBQ2pCLHFCQUFlLGVBQWUsNkNBQXdDO0FBQ3RFLGFBQU8scUJBQXFCO0FBQzVCLFlBQU0sMEJBQTBCLGNBQWM7QUFBQSxJQUNoRCxPQUFPO0FBQ0wsWUFBTSxxQkFBcUIsTUFBTSxJQUFJO0FBQUEsSUFDdkM7QUFBQSxFQUNGO0FBSUEsV0FBUywyQkFBMkIsdUJBQXVCO0FBQ3pELFVBQU0sa0JBQWtCLFNBQVMsZUFBZSxnQkFBZ0I7QUFDaEUsUUFBSSxDQUFDLGdCQUFpQjtBQUN0QixVQUFNLGFBQWEsT0FBTyxLQUFLLHFCQUFxQixFQUFFLE9BQU8sQ0FBQUMsT0FBS0EsT0FBTSxjQUFjO0FBQ3RGLFFBQUksV0FBVyxXQUFXLEdBQUc7QUFDM0Isc0JBQWdCLFlBQVk7QUFDNUI7QUFBQSxJQUNGO0FBQ0EsVUFBTSxhQUFhLE9BQU8sc0JBQXNCO0FBQ2hELG9CQUFnQixZQUFZLFdBQVcsSUFBSSxTQUFPO0FBQ2hELFlBQU0sV0FBVyxzQkFBc0IsR0FBRyxLQUFLLElBQUksTUFBTSxHQUFHLEdBQUc7QUFDL0QsWUFBTSxRQUFRLElBQUksUUFBUSxNQUFNLEdBQUcsRUFBRSxRQUFRLFNBQVMsT0FBSyxFQUFFLFlBQVksQ0FBQztBQUMxRSxZQUFNLFVBQVUsUUFBUSxhQUFhLFlBQVk7QUFDakQsYUFBTztBQUFBLDZIQUNrSCxVQUFVLDZDQUE2QyxFQUFFO0FBQUEsd0RBQzlILFdBQVcsR0FBRyxDQUFDLEtBQUssT0FBTztBQUFBLHdDQUMzQyxXQUFXLEdBQUcsQ0FBQztBQUFBLGtCQUNyQyxXQUFXLEtBQUssQ0FBQztBQUFBLG9FQUNpQyxXQUFXLE9BQU8sQ0FBQyxHQUFHLFFBQVEsV0FBVyxNQUFNLFdBQU0sRUFBRTtBQUFBO0FBQUEsSUFFekgsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUFBLEVBQ1o7QUFJQSxXQUFTLGVBQWVDLE9BQU0sYUFBYTtBQUN6QyxVQUFNLFNBQVksU0FBUyxlQUFlLGlCQUFpQjtBQUMzRCxVQUFNLFlBQVksU0FBUyxlQUFlLG9CQUFvQjtBQUM5RCxVQUFNLFdBQVksU0FBUyxlQUFlLG1CQUFtQjtBQUM3RCxRQUFJLFFBQVE7QUFDVixhQUFPLFFBQVFBO0FBQ2YsYUFBTyxNQUFNLFVBQVU7QUFBQSxJQUN6QjtBQUNBLFFBQUksVUFBVyxXQUFVLE1BQU0sVUFBVTtBQUN6QyxRQUFJLFNBQVcsVUFBUyxjQUFjLGVBQWU7QUFDckQsV0FBTyxzQkFBc0JBO0FBQzdCLG1DQUErQkEsS0FBSTtBQUFBLEVBQ3JDO0FBSUEsV0FBUyx5QkFBeUJBLE9BQU07QUFDdEMsUUFBSSxDQUFDQSxTQUFRLENBQUNBLE1BQUssS0FBSyxFQUFHLFFBQU8sQ0FBQztBQUNuQyxVQUFNLFdBQVcsQ0FBQztBQUVsQixVQUFNLGdCQUFnQixvRUFBb0UsS0FBS0EsS0FBSSxLQUM3RSxtQ0FBbUMsS0FBS0EsS0FBSTtBQUNsRSxRQUFJLENBQUMsZUFBZTtBQUNsQixlQUFTLEtBQUssa0hBQWtIO0FBQUEsSUFDbEk7QUFFQSxVQUFNLFdBQVcsT0FBTyxxQkFDckIsT0FBTywwQkFBMEIsT0FBTyx1QkFBdUIsZ0JBQWlCLENBQUM7QUFDcEYsVUFBTSxhQUFhLFNBQVMsU0FBUyxTQUFTLGFBQWEsSUFBSSxZQUFZLEVBQUUsS0FBSztBQUNsRixRQUFJLGFBQWEsVUFBVSxTQUFTLEdBQUc7QUFDckMsWUFBTSxZQUFZLFVBQVUsTUFBTSxTQUFTLEVBQUUsT0FBTyxDQUFBQyxPQUFLQSxHQUFFLFNBQVMsQ0FBQztBQUNyRSxZQUFNLFNBQVMsVUFBVSxLQUFLLFVBQVFELE1BQUssWUFBWSxFQUFFLFNBQVMsSUFBSSxDQUFDO0FBQ3ZFLFVBQUksQ0FBQyxRQUFRO0FBQ1gsaUJBQVMsS0FBSyxpQkFBaUIsV0FBVyxTQUFTLENBQUMsaUVBQTREO0FBQUEsTUFDbEg7QUFBQSxJQUNGO0FBRUEsVUFBTSxpQkFBaUIsQ0FBQyw0QkFBNEIsMkJBQTJCLHVCQUF1QjtBQUN0RyxlQUFXLFVBQVUsZ0JBQWdCO0FBQ25DLFVBQUlBLE1BQUssWUFBWSxFQUFFLFNBQVMsTUFBTSxHQUFHO0FBQ3ZDLGlCQUFTLEtBQUsseUNBQXlDLE1BQU0sK0NBQTBDO0FBQUEsTUFDekc7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLCtCQUErQkEsT0FBTTtBQUM1QyxRQUFJLFFBQVEsU0FBUyxlQUFlLDJCQUEyQjtBQUMvRCxRQUFJLENBQUMsT0FBTztBQUNWLFlBQU0sU0FBUyxTQUFTLGVBQWUsaUJBQWlCO0FBQ3hELFVBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxXQUFZO0FBQ25DLGNBQVEsU0FBUyxjQUFjLEtBQUs7QUFDcEMsWUFBTSxLQUFLO0FBQ1gsWUFBTSxNQUFNLFVBQVU7QUFDdEIsYUFBTyxXQUFXLGFBQWEsT0FBTyxPQUFPLFdBQVc7QUFBQSxJQUMxRDtBQUNBLFVBQU0sV0FBVyx5QkFBeUJBLEtBQUk7QUFDOUMsUUFBSSxTQUFTLFdBQVcsR0FBRztBQUN6QixZQUFNLFlBQVk7QUFBQSxJQUNwQixPQUFPO0FBQ0wsWUFBTSxZQUFZLFNBQVM7QUFBQSxRQUFJLENBQUFDLE9BQzdCLHFEQUFnREEsRUFBQztBQUFBLE1BQ25ELEVBQUUsS0FBSyxFQUFFO0FBQUEsSUFDWDtBQUFBLEVBQ0Y7QUFpQkEsaUJBQWUscUJBQXFCLGtCQUFrQixpQkFBaUI7QUFDckUsVUFBTSxNQUFXLFNBQVMsZUFBZSxtQkFBbUI7QUFDNUQsVUFBTSxXQUFXLFNBQVMsZUFBZSxtQkFBbUI7QUFDNUQsVUFBTSxTQUFXLFNBQVMsZUFBZSxpQkFBaUI7QUFDMUQsVUFBTSxZQUFZLFNBQVMsZUFBZSxvQkFBb0I7QUFDOUQsUUFBSSxJQUFVLEtBQUksV0FBVztBQUM3QixRQUFJLFNBQVUsVUFBUyxjQUFjO0FBRXJDLFFBQUksV0FBVztBQUFFLGdCQUFVLFlBQVk7QUFBd04sZ0JBQVUsTUFBTSxVQUFVO0FBQUEsSUFBSTtBQUM3UixRQUFJLE9BQVUsUUFBTyxNQUFNLFVBQVU7QUFHckMsZUFBVyxNQUFNLDBCQUFxQjtBQUV0QyxRQUFJO0FBQ0YsWUFBTSxPQUFPLENBQUM7QUFDZCxVQUFJLGlCQUFrQixNQUFLLG9CQUFvQjtBQUMvQyxVQUFJLGdCQUFrQixNQUFLLG1CQUFvQjtBQUUvQyxZQUFNLE1BQU8sTUFBTSxNQUFNLHlCQUF5QjtBQUFBLFFBQ2hELFFBQVM7QUFBQSxRQUNULFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBUyxLQUFLLFVBQVUsSUFBSTtBQUFBLE1BQzlCLENBQUM7QUFDRCxZQUFNLE9BQU8sTUFBTSxJQUFJLEtBQUs7QUFFNUIsVUFBSSxLQUFLLElBQUk7QUFDWCx1QkFBZSxLQUFLLFNBQVMsa0JBQWE7QUFDMUMsZUFBTyxxQkFBcUI7QUFDNUIsY0FBTSwwQkFBMEIsY0FBYztBQUM5QywyQkFBbUIsbUJBQW1CO0FBQUEsTUFDeEMsT0FBTztBQUNMLFlBQUksU0FBVSxVQUFTLGNBQWM7QUFDckMsWUFBSSxPQUFVLFFBQU8sWUFBWSxnQ0FBZ0MsV0FBVyxLQUFLLFNBQVMsb0JBQW9CLENBQUM7QUFBQSxNQUNqSDtBQUFBLElBQ0YsU0FBUyxLQUFLO0FBQ1osVUFBSSxTQUFVLFVBQVMsY0FBYztBQUNyQyxVQUFJLE9BQVUsUUFBTyxZQUFZO0FBQUEsSUFDbkMsVUFBRTtBQUNBLFVBQUksSUFBSyxLQUFJLFdBQVc7QUFDeEIsaUJBQVcsS0FBSztBQUFBLElBQ2xCO0FBQUEsRUFDRjtBQUlBLGlCQUFlLHNCQUFzQjtBQUNuQyxVQUFNLFFBQVUsU0FBUyxlQUFlLDBCQUEwQjtBQUNsRSxVQUFNLFNBQVUsUUFBUSxNQUFNLE1BQU0sS0FBSyxJQUFJO0FBQzdDLFVBQU0sVUFBVSxPQUFPLHVCQUF1QjtBQUM5QyxVQUFNLHFCQUFxQixVQUFVLE1BQU0sV0FBVyxJQUFJO0FBQUEsRUFDNUQ7QUFFQSxpQkFBZSxlQUFlO0FBQzVCLFdBQU8scUJBQXFCO0FBQzVCLFVBQU0sU0FBUyxTQUFTLGVBQWUsaUJBQWlCO0FBQ3hELFVBQU0sY0FBYyxTQUFTLE9BQU8sTUFBTSxLQUFLLElBQUssT0FBTyx1QkFBdUI7QUFDbEYsVUFBTSwwQkFBMEIsZ0JBQWdCLFdBQVc7QUFDM0QsdUJBQW1CLG1CQUFtQjtBQUN0QyxjQUFVLDJDQUEyQztBQUFBLEVBQ3ZEO0FBSUEsV0FBUyxpQkFBaUIsS0FBSztBQUM3QixXQUFPLHFCQUFxQjtBQUM1QixhQUFTLGlCQUFpQix1QkFBdUIsRUFBRSxRQUFRLFdBQVM7QUFDbEUsWUFBTSxRQUFRLE1BQU0sY0FBYyxtQkFBbUI7QUFDckQsWUFBTSxhQUFhLFNBQVMsTUFBTSxVQUFVO0FBQzVDLFlBQU0sTUFBTSxjQUFjLGFBQWEsWUFBWTtBQUNuRCxZQUFNLE1BQU0sYUFBYyxhQUFhLFlBQVk7QUFBQSxJQUNyRCxDQUFDO0FBQUEsRUFDSDtBQWtCQSxNQUFJLHVCQUF1QjtBQUUzQixXQUFTLHNCQUFzQjtBQUM3QixVQUFNLFNBQVMsU0FBUyxlQUFlLGlCQUFpQjtBQUN4RCxRQUFJLENBQUMsT0FBUTtBQUNiLFdBQU8sc0JBQXNCLE9BQU87QUFDcEMsbUNBQStCLE9BQU8sS0FBSztBQUMzQyxpQkFBYSxvQkFBb0I7QUFDakMsMkJBQXVCLFdBQVcsTUFBTTtBQUN0QyxnQ0FBMEIsZ0JBQWdCLE9BQU8sTUFBTSxLQUFLLENBQUM7QUFBQSxJQUMvRCxHQUFHLEdBQUc7QUFBQSxFQUNSO0FBRUEsaUJBQWUsMEJBQTBCLEtBQUtELE9BQU07QUFDbEQsUUFBSTtBQUNGLFlBQU0sVUFBVSxFQUFFLE1BQU0saUJBQWlCLFdBQVcsSUFBSTtBQUN4RCxVQUFJQSxVQUFTLFVBQWFBLFVBQVMsS0FBTSxTQUFRLGVBQWVBO0FBQ2hFLFlBQU0sV0FBVyxNQUFNLE1BQU0seUJBQXlCO0FBQUEsUUFDcEQsUUFBUTtBQUFBLFFBQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxRQUM5QyxNQUFNLEtBQUssVUFBVSxPQUFPO0FBQUEsTUFDOUIsQ0FBQztBQUNELGFBQU8sU0FBUztBQUFBLElBQ2xCLFNBQVMsR0FBRztBQUNWLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLGlCQUFlLDZCQUE2QjtBQUMxQyxVQUFNLE1BQU0sT0FBTztBQUNuQixRQUFJLENBQUMsSUFBSztBQUNWLFVBQU0sUUFBUSxNQUFNLDBCQUEwQixHQUFHO0FBQ2pELFFBQUksQ0FBQyxPQUFPO0FBQ1YsZ0JBQVUscUNBQXFDLE9BQU87QUFDdEQ7QUFBQSxJQUNGO0FBQ0EsSUFBQUUsY0FBYSxtQkFBbUI7QUFDaEMsdUJBQW1CLG1CQUFtQjtBQUN0QyxjQUFVLDZCQUE2QixJQUFJLFFBQVEsTUFBTSxHQUFHLENBQUMsR0FBRztBQUNoRSxjQUFVLHFCQUFxQjtBQUFBLEVBQ2pDOzs7QUN4V0E7QUFBQTtBQUFBLHdDQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdCQSxNQUFNQyxRQUFNLFVBQVUscUJBQXFCO0FBTTNDLFNBQU8sdUJBQXVCLENBQUM7QUFFL0IsU0FBTyx1QkFBdUIsQ0FBQztBQUkvQixpQkFBZUMsZ0NBQStCO0FBQzVDLFVBQU0sWUFBWSxTQUFTLGVBQWUsOEJBQThCO0FBRXhFLFVBQU0sVUFBWSxTQUFTLGVBQWUsNkJBQTZCLEtBQ3JELFNBQVMsZUFBZSwwQkFBMEI7QUFDcEUsVUFBTSxZQUFZLFNBQVMsY0FBYywwQ0FBMEM7QUFDbkYsUUFBSSxDQUFDLFVBQVc7QUFFaEIsY0FBVSxZQUFZO0FBRXRCLFFBQUksa0JBQWtCLENBQUM7QUFDdkIsUUFBSSxhQUFhO0FBQ2pCLFFBQUk7QUFDRixZQUFNLE1BQU8sTUFBTSxNQUFNLGtDQUFrQztBQUMzRCxZQUFNLE9BQU8sTUFBTSxJQUFJLEtBQUs7QUFDNUIsVUFBSSxDQUFDLEtBQUssSUFBSTtBQUFFLGtCQUFVLFlBQVksNEJBQTRCLFdBQVcsS0FBSyxTQUFTLDhCQUE4QixDQUFDO0FBQVE7QUFBQSxNQUFRO0FBQzFJLHdCQUFrQixLQUFLLG1CQUFtQixDQUFDO0FBQzNDLG1CQUFhLEtBQUssZUFBZSxnQkFBZ0I7QUFBQSxJQUNuRCxTQUFTLEtBQUs7QUFDWixNQUFBRCxNQUFJLE1BQU0sK0NBQStDLEdBQUc7QUFDNUQsZ0JBQVUsWUFBWTtBQUN0QjtBQUFBLElBQ0Y7QUFFQSxRQUFJLGdCQUFnQixXQUFXLEdBQUc7QUFFaEMsVUFBSSxRQUFTLFNBQVEsTUFBTSxVQUFVO0FBQ3JDLFVBQUksVUFBVyxXQUFVLE1BQU0sVUFBVTtBQUN6QyxnQkFBVSxZQUFZO0FBQ3RCO0FBQUEsSUFDRjtBQUdBLFFBQUksVUFBVyxXQUFVLE1BQU0sVUFBVTtBQUd6QyxVQUFNLFVBQVUsVUFBVSxRQUFRLGNBQWMsSUFBSSxJQUFJO0FBQ3hELFFBQUksU0FBUztBQUNYLGNBQVEsY0FBYztBQUFBLElBQ3hCO0FBR0EsVUFBTSxtQkFBbUIsZ0JBQWdCLE9BQU8sT0FBSyxFQUFFLG1CQUFtQixLQUFLLEVBQUU7QUFDakYsVUFBTSxjQUFjLFdBQVcsZ0JBQWdCLHdCQUF3QixVQUFVO0FBSWpGLFdBQU8sdUJBQXVCLENBQUM7QUFDL0Isb0JBQWdCLFFBQVEsU0FBTztBQUM3QixhQUFPLHFCQUFxQixJQUFJLFFBQVEsSUFBSSxJQUFJLG1CQUFtQjtBQUFBLElBQ3JFLENBQUM7QUFFRCxVQUFNLGVBQWUsT0FBTyxpQkFBaUIseUJBQXlCLENBQUM7QUFDdkUsUUFBSSxPQUFPLEtBQUssWUFBWSxFQUFFLFNBQVMsRUFBRyxRQUFPLE9BQU8sT0FBTyxzQkFBc0IsWUFBWTtBQUdqRyxXQUFPLHVCQUF1QixDQUFDLEdBQUcsZUFBZTtBQUVqRCxRQUFJLFlBQVk7QUFBQSxtRUFDaUQsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQzVFLFFBQUksa0JBQWtCO0FBQ3RCLG9CQUFnQixRQUFRLENBQUMsS0FBSyxRQUFRO0FBRXBDLFVBQUksQ0FBQyxtQkFBbUIsSUFBSSxtQkFBbUIsT0FBTztBQUNwRCwwQkFBa0I7QUFDbEIsY0FBTSxlQUFlO0FBQ3JCLHFCQUFhO0FBQUE7QUFBQSx1QkFFSSxZQUFZO0FBQUEsdUJBQ1osWUFBWTtBQUFBO0FBQUE7QUFBQSx1QkFHWixZQUFZO0FBQUEsdUJBQ1osWUFBWTtBQUFBLHVCQUNaLFlBQVk7QUFBQSx1QkFDWixZQUFZO0FBQUEsdUJBQ1osWUFBWTtBQUFBLHVCQUNaLFlBQVk7QUFBQSx1QkFDWixZQUFZO0FBQUE7QUFBQTtBQUFBLE1BRy9CO0FBRUEsWUFBTSxPQUFhLE1BQU07QUFDekIsWUFBTSxXQUFhLElBQUksc0JBQXNCLENBQUMsSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxPQUFPLE9BQU8sRUFBRSxLQUFLLElBQUk7QUFDdkcsWUFBTSxPQUFhLElBQUksUUFBUTtBQUMvQixZQUFNLFlBQWEsSUFBSSxrQkFBa0Isb0ZBQStFO0FBQ3hILFlBQU0sUUFBYSxJQUFJLGtCQUFrQixJQUFJLGtCQUFrQjtBQUMvRCxZQUFNLGFBQWEsSUFBSSxjQUFjO0FBQ3JDLFlBQU0sWUFBYSxlQUFlLFNBQVMsWUFBWSxlQUFlLFFBQVEsWUFBWTtBQUMxRixZQUFNLFlBQWEsYUFBYSxxQ0FBcUMsU0FBUyxzQkFBc0IsV0FBVyxVQUFVLENBQUMsWUFBWTtBQUN0SSxZQUFNLFlBQWEsSUFBSSxZQUFZLFVBQVUsV0FBVyxJQUFJLFNBQVMsQ0FBQyxhQUFhO0FBQ25GLFlBQU0sWUFBYSxJQUFJLGdCQUFnQixpQkFBaUIsV0FBVyxJQUFJLGFBQWEsQ0FBQyx1REFBa0Q7QUFDdkksWUFBTSxVQUFhLElBQUksWUFBWTtBQUNuQyxZQUFNLGFBQWEsT0FBTyxxQkFBcUIsT0FBTyxNQUFNO0FBQzVELFlBQU0sV0FBYSxJQUFJLG1CQUFtQixRQUFRLGlCQUFpQjtBQUVuRSxZQUFNLFVBQVUsUUFBUTtBQUN4QixZQUFNLFNBQVUsUUFBUSxnQkFBZ0IsU0FBUztBQUNqRCxtQkFBYTtBQUFBLDJCQUNVLFdBQVcsT0FBTyxDQUFDLFlBQVksUUFBUTtBQUFBLHlEQUNULElBQUk7QUFBQSx3Q0FDckIsV0FBVyxRQUFRLENBQUMsR0FBRyxTQUFTO0FBQUEseUNBQy9CLElBQUk7QUFBQSx5Q0FDSixTQUFTO0FBQUEseUNBQ1QsVUFBVSxXQUFNLFdBQVcsS0FBSyxpQkFBaUIsUUFBRztBQUFBLHlDQUNwRCxTQUFTO0FBQUEsY0FDcEMsU0FBUztBQUFBO0FBQUEscUNBRWMsYUFBYSxZQUFZLEVBQUUsMERBQTBELFdBQVcsT0FBTyxDQUFDO0FBQUEsc0RBQ3ZGLElBQUk7QUFBQSxxQ0FDckIsQ0FBQyxhQUFhLFlBQVksRUFBRSwwREFBMEQsV0FBVyxPQUFPLENBQUM7QUFBQSxzREFDeEYsSUFBSSxLQUFLLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSx5RUFHSixXQUFXLE9BQU8sQ0FBQztBQUFBLCtEQUM3QixVQUFVLGtDQUFrQyxFQUFFO0FBQUEsMkVBQ2xDLFdBQVcsT0FBTyxDQUFDO0FBQUEsbUVBQzNCLFNBQVMsa0NBQWtDLEVBQUU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUk5RyxDQUFDO0FBRUQsaUJBQWE7QUFDYixjQUFVLFlBQVk7QUFFdEIsY0FBVSxjQUFjLGtDQUFrQyxHQUFHLGlCQUFpQixTQUFTLE9BQUs7QUFDMUYsWUFBTSxNQUFNLEVBQUUsT0FBTyxRQUFRLFdBQVc7QUFDeEMsVUFBSSxDQUFDLE9BQU8sSUFBSSxTQUFVO0FBQzFCLFlBQU0sS0FBSyxJQUFJLFFBQVEsbUJBQW1CO0FBQzFDLFVBQUksQ0FBQyxHQUFJO0FBQ1QsWUFBTSxTQUFTLElBQUksUUFBUTtBQUMzQixVQUFTLFdBQVcsU0FBWSxpQkFBZ0IsR0FBRyxRQUFRLFNBQVMsSUFBSTtBQUFBLGVBQy9ELFdBQVcsU0FBWSxpQkFBZ0IsR0FBRyxRQUFRLFNBQVMsS0FBSztBQUFBLGVBQ2hFLFdBQVcsU0FBWSxZQUFXLElBQUksUUFBUSxTQUFTLEVBQUU7QUFBQSxlQUN6RCxXQUFXLFdBQVksWUFBVyxJQUFJLFFBQVEsU0FBUyxDQUFFO0FBQUEsSUFDcEUsQ0FBQztBQUFBLEVBQ0g7QUFJQSxXQUFTLHdCQUF3QixPQUFPO0FBQ3RDLFVBQU1FLEtBQUksTUFBTSxZQUFZO0FBQzVCLGFBQVMsaUJBQWlCLDJEQUEyRCxFQUFFLFFBQVEsU0FBTztBQUNwRyxVQUFJLE1BQU0sVUFBVUEsT0FBTSxNQUFNLElBQUksWUFBWSxZQUFZLEVBQUUsU0FBU0EsRUFBQyxJQUFJLEtBQUs7QUFBQSxJQUNuRixDQUFDO0FBQUEsRUFDSDtBQUlBLFdBQVMsV0FBVyxTQUFTLFdBQVc7QUFDdEMsVUFBTSxNQUFNLE9BQU87QUFDbkIsUUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQVE7QUFDekIsVUFBTSxNQUFNLElBQUksVUFBVSxPQUFLLEVBQUUsYUFBYSxPQUFPO0FBQ3JELFFBQUksTUFBTSxFQUFHO0FBQ2IsVUFBTSxTQUFTLE1BQU07QUFDckIsUUFBSSxTQUFTLEtBQUssVUFBVSxJQUFJLE9BQVE7QUFDeEMsS0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDaEQseUJBQXFCLEdBQUc7QUFFeEIsVUFBTSxxQkFBcUI7QUFBQSxNQUN6QixRQUFRO0FBQUEsTUFDUixTQUFTLEVBQUUsZ0JBQWdCLG1CQUFtQjtBQUFBLE1BQzlDLE1BQU0sS0FBSyxVQUFVLEVBQUUsTUFBTSxlQUFlLGFBQWEsSUFBSSxJQUFJLE9BQUssRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUFBLElBQ3JGLENBQUMsRUFBRSxNQUFNLE1BQU07QUFBQSxJQUFDLENBQUM7QUFBQSxFQUNuQjtBQUVBLFdBQVMscUJBQXFCLGlCQUFpQjtBQUM3QyxVQUFNLFFBQVEsU0FBUyxjQUFjLGtDQUFrQztBQUN2RSxRQUFJLENBQUMsTUFBTztBQUNaLFFBQUlDLFFBQU87QUFDWCxRQUFJLGtCQUFrQjtBQUN0QixvQkFBZ0IsUUFBUSxDQUFDLEtBQUssUUFBUTtBQUNwQyxVQUFJLENBQUMsbUJBQW1CLElBQUksbUJBQW1CLE9BQU87QUFDcEQsMEJBQWtCO0FBQ2xCLGNBQU0sS0FBSztBQUNYLFFBQUFBLFNBQVEsMENBQTBDLEVBQUUscUJBQXFCLEVBQUUsMkxBQWlMLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUU7QUFBQSxNQUMxWTtBQUNBLFlBQU0sT0FBYSxNQUFNO0FBQ3pCLFlBQU0sVUFBYSxJQUFJLFlBQVk7QUFDbkMsWUFBTSxXQUFhLElBQUksc0JBQXNCLENBQUMsSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxPQUFPLE9BQU8sRUFBRSxLQUFLLElBQUk7QUFDdkcsWUFBTSxPQUFhLElBQUksUUFBUTtBQUMvQixZQUFNLFlBQWEsSUFBSSxrQkFBa0Isb0ZBQStFO0FBQ3hILFlBQU0sUUFBYSxJQUFJLGtCQUFrQixJQUFJLGtCQUFrQjtBQUMvRCxZQUFNLGFBQWEsSUFBSSxjQUFjO0FBQ3JDLFlBQU0sWUFBYSxlQUFlLFNBQVMsWUFBWSxlQUFlLFFBQVEsWUFBWTtBQUMxRixZQUFNLFlBQWEsYUFBYSxxQ0FBcUMsU0FBUyxzQkFBc0IsV0FBVyxVQUFVLENBQUMsWUFBWTtBQUN0SSxZQUFNLFlBQWEsSUFBSSxZQUFZLFVBQVUsV0FBVyxJQUFJLFNBQVMsQ0FBQyxhQUFhO0FBQ25GLFlBQU0sWUFBYSxJQUFJLGdCQUFnQixpQkFBaUIsV0FBVyxJQUFJLGFBQWEsQ0FBQyx1REFBa0Q7QUFDdkksWUFBTSxhQUFhLE9BQU8scUJBQXFCLE9BQU8sTUFBTTtBQUM1RCxZQUFNLFdBQWEsSUFBSSxtQkFBbUIsUUFBUSxpQkFBaUI7QUFDbkUsWUFBTSxVQUFhLFFBQVE7QUFDM0IsWUFBTSxTQUFhLFFBQVEsZ0JBQWdCLFNBQVM7QUFDcEQsTUFBQUEsU0FBUSxzQkFBc0IsV0FBVyxPQUFPLENBQUMsWUFBWSxRQUFRO0FBQUEsdURBQ2xCLElBQUk7QUFBQSxzQ0FDckIsV0FBVyxRQUFRLENBQUMsR0FBRyxTQUFTO0FBQUEsdUNBQy9CLElBQUk7QUFBQSx1Q0FDSixTQUFTO0FBQUEsdUNBQ1QsVUFBVSxXQUFNLFdBQVcsS0FBSyxpQkFBaUIsUUFBRztBQUFBLHVDQUNwRCxTQUFTO0FBQUEsWUFDcEMsU0FBUztBQUFBO0FBQUEsaUNBRVksYUFBYSxZQUFZLEVBQUUsMERBQTBELFdBQVcsT0FBTyxDQUFDLGlFQUFpRSxJQUFJO0FBQUEsaUNBQzdLLENBQUMsYUFBYSxZQUFZLEVBQUUsMERBQTBELFdBQVcsT0FBTyxDQUFDLG1FQUFtRSxJQUFJLEtBQUssYUFBYSxDQUFDO0FBQUE7QUFBQTtBQUFBLHVFQUc3SixXQUFXLE9BQU8sQ0FBQyxzREFBc0QsVUFBVSxrQ0FBa0MsRUFBRTtBQUFBLHlFQUNySCxXQUFXLE9BQU8sQ0FBQywwREFBMEQsU0FBUyxrQ0FBa0MsRUFBRTtBQUFBO0FBQUE7QUFBQSxJQUdqTSxDQUFDO0FBQ0QsVUFBTSxZQUFZQTtBQUVsQixVQUFNLFlBQVksU0FBUyxlQUFlLGtCQUFrQixHQUFHLFNBQVM7QUFDeEUsUUFBSSxVQUFXLHlCQUF3QixTQUFTO0FBQUEsRUFDbEQ7QUFJQSxXQUFTLGdCQUFnQixTQUFTLFFBQVE7QUFDeEMsV0FBTyxxQkFBcUIsT0FBTyxJQUFJO0FBRXZDLFVBQU0sTUFBTSxTQUFTLGNBQWMscUJBQXFCLElBQUksT0FBTyxPQUFPLENBQUMsSUFBSTtBQUMvRSxRQUFJLENBQUMsSUFBSztBQUNWLFFBQUksaUJBQWlCLFdBQVcsRUFBRSxRQUFRLENBQUFDLFNBQU9BLEtBQUksVUFBVSxPQUFPLFFBQVEsQ0FBQztBQUMvRSxVQUFNLFNBQVMsU0FBUyxXQUFXO0FBQ25DLFVBQU0sTUFBTSxJQUFJLGNBQWMsaUJBQWlCLE1BQU0sSUFBSTtBQUN6RCxRQUFJLElBQUssS0FBSSxVQUFVLElBQUksUUFBUTtBQUFBLEVBQ3JDO0FBSUEsV0FBUyxjQUFjLE1BQU07QUFDM0IsVUFBTSxPQUFPLE9BQU8sd0JBQXdCLENBQUM7QUFDN0MsUUFBSSxDQUFDLEtBQUssT0FBUTtBQUVsQixTQUFLLFFBQVEsU0FBTztBQUNsQixZQUFNLFVBQVUsSUFBSTtBQUNwQixVQUFJO0FBQ0osVUFBSSxTQUFTLGVBQWU7QUFDMUIsaUJBQVMsSUFBSSxtQkFBbUI7QUFBQSxNQUNsQyxXQUFXLFNBQVMsY0FBYztBQUNoQyxpQkFBUztBQUFBLE1BQ1gsT0FBTztBQUNMLGlCQUFTO0FBQUEsTUFDWDtBQUNBLGFBQU8scUJBQXFCLE9BQU8sSUFBSTtBQUV2QyxZQUFNLE1BQU0sU0FBUyxjQUFjLHFCQUFxQixJQUFJLE9BQU8sT0FBTyxDQUFDLElBQUk7QUFDL0UsVUFBSSxDQUFDLElBQUs7QUFDVixVQUFJLGlCQUFpQix3REFBd0QsRUFBRSxRQUFRLFNBQU8sSUFBSSxVQUFVLE9BQU8sUUFBUSxDQUFDO0FBQzVILFlBQU0sU0FBUyxJQUFJLGNBQWMsaUJBQWlCLFNBQVMsV0FBVyxRQUFRLElBQUk7QUFDbEYsVUFBSSxPQUFRLFFBQU8sVUFBVSxJQUFJLFFBQVE7QUFBQSxJQUMzQyxDQUFDO0FBRUQsVUFBTSxXQUFXLE9BQU8sT0FBTyxPQUFPLG9CQUFvQixFQUFFLE9BQU8sT0FBTyxFQUFFO0FBQzVFLGNBQVUsd0JBQXdCLFFBQVEsY0FBYyxLQUFLLFNBQVMsUUFBUSxXQUFXO0FBQUEsRUFDM0Y7QUFJQSxpQkFBZSw2QkFBNkI7QUFpQjFDLFVBQU0sWUFBWSxPQUFPLHdCQUF3QixDQUFDO0FBQ2xELFVBQU0sUUFBUSxPQUFPLEtBQUssU0FBUyxFQUFFO0FBQ3JDLFFBQUksVUFBVSxHQUFHO0FBQ2YsZ0JBQVUscUNBQXFDLE9BQU87QUFDdEQ7QUFBQSxJQUNGO0FBR0EsUUFBSTtBQUNGLFlBQU0sV0FBVyxNQUFNLE1BQU0seUJBQXlCO0FBQUEsUUFDcEQsUUFBUTtBQUFBLFFBQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxRQUM5QyxNQUFNLEtBQUssVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLFdBQVcsT0FBTyxxQkFBcUIsQ0FBQztBQUFBLE1BQ3ZGLENBQUM7QUFFRCxVQUFJLFNBQVMsSUFBSTtBQUNmLFFBQUFDLGNBQWEsbUJBQW1CO0FBQ2hDLGNBQU0sV0FBVyxPQUFPLE9BQU8sT0FBTyxvQkFBb0IsRUFBRSxPQUFPLE9BQU8sRUFBRTtBQUM1RSxjQUFNLFdBQVcsUUFBUTtBQUN6QixrQkFBVSxpQ0FBaUMsUUFBUSxVQUFVLFFBQVEsV0FBVztBQUNoRixjQUFNLHVCQUF1QjtBQUFBLE1BQy9CLE9BQU87QUFDTCxjQUFNLE1BQU0sTUFBTSxTQUFTLEtBQUs7QUFDaEMsa0JBQVUsVUFBVSxJQUFJLFNBQVMsdUNBQXVDLElBQUksT0FBTztBQUFBLE1BQ3JGO0FBQUEsSUFDRixTQUFTLEtBQUs7QUFDWixNQUFBTCxNQUFJLE1BQU0sdUNBQXVDLEdBQUc7QUFDcEQsZ0JBQVUsNERBQTRELE9BQU87QUFBQSxJQUMvRTtBQUFBLEVBQ0Y7OztBQ2pYQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDhCQUFBTTtBQUFBLElBQUE7QUFBQSxrQ0FBQUM7QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsOEJBQUFDO0FBQUEsSUFBQSx3QkFBQUM7QUFBQSxJQUFBO0FBQUE7QUFBQSxrQ0FBQUM7QUFBQSxJQUFBO0FBQUE7QUFBQTtBQW9CQSxNQUFJQyxvQkFBbUIsQ0FBQztBQUN4QixNQUFJLHFCQUFxQjtBQUN6QixNQUFJLGlDQUFpQztBQUNyQyxNQUFJLHVCQUF1QixDQUFDO0FBQzVCLE1BQUkscUJBQXFCO0FBRXpCLFdBQVMscUJBQXFCO0FBQzVCLFFBQUksT0FBTyxXQUFXLGFBQWE7QUFDakM7QUFBQSxJQUNGO0FBQ0EsV0FBTyxtQkFBbUJBO0FBQzFCLFdBQU8scUJBQXFCO0FBQzVCLFdBQU8sb0JBQW9CO0FBQzNCLFdBQU8sb0JBQW9CO0FBQzNCLFdBQU8sMkJBQTJCO0FBQUEsRUFDcEM7QUFFQSxXQUFTLGdCQUFnQjtBQUN2QixRQUFJO0FBQ0YsWUFBTSxNQUFNLElBQUksZ0JBQWdCLE9BQU8sU0FBUyxNQUFNLEVBQUUsSUFBSSxTQUFTO0FBQ3JFLGFBQU8sTUFBTSxnQkFBZ0IsR0FBRyxLQUFLO0FBQUEsSUFDdkMsU0FBU0MsSUFBRztBQUFFLGFBQU87QUFBQSxJQUFNO0FBQUEsRUFDN0I7QUFFQSxXQUFTLG9CQUFvQjtBQUMzQixVQUFNLE1BQU0sY0FBYztBQUMxQixRQUFJLENBQUMsSUFBSztBQUNWLFFBQUk7QUFBRSxtQkFBYSxRQUFRLEtBQUssS0FBSyxVQUFVRCxpQkFBZ0IsQ0FBQztBQUFBLElBQUcsU0FBU0MsSUFBRztBQUFBLElBQUM7QUFBQSxFQUNsRjtBQUdBLE1BQUksdUJBQXVCLENBQUM7QUFFNUIsV0FBUyxvQkFBb0I7QUFDM0IsVUFBTSxNQUFNLGNBQWM7QUFDMUIsUUFBSSxDQUFDLElBQUs7QUFDVixVQUFNLGVBQWUsT0FBTyxLQUFLRCxpQkFBZ0IsRUFBRSxTQUFTO0FBQzVELFFBQUk7QUFDRixZQUFNLFFBQVEsS0FBSyxNQUFNLGFBQWEsUUFBUSxHQUFHLEtBQUssTUFBTTtBQUM1RCxVQUFJLFNBQVMsT0FBTyxVQUFVLFlBQVksQ0FBQyxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQy9ELGVBQU8sT0FBT0EsbUJBQWtCLEtBQUs7QUFDckMsMkJBQW1CO0FBQ25CLFlBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsT0FBTyxLQUFLQSxpQkFBZ0IsRUFBRSxTQUFTLEdBQUc7QUFDcEYsK0JBQXFCO0FBQ3JCLGNBQUksT0FBTyxjQUFjLFlBQVk7QUFDbkMsc0JBQVUsd0ZBQW1GLFdBQVcsR0FBSTtBQUFBLFVBQzlHO0FBQUEsUUFDRjtBQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0YsU0FBU0MsSUFBRztBQUFBLElBQUM7QUFJYixRQUFJLHFCQUFxQixTQUFTLEdBQUc7QUFDbkMsaUJBQVcsU0FBUyxzQkFBc0I7QUFDeEMsY0FBTSxLQUFLLE1BQU07QUFDakIsWUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLFFBQVM7QUFDM0IsUUFBQUQsa0JBQWlCLEVBQUUsSUFBSTtBQUFBLFVBQ3JCLFNBQVMsTUFBTTtBQUFBLFVBQ2YsWUFBWSxNQUFNLFlBQVksU0FBVSxNQUFNLFNBQVMsT0FBUTtBQUFBLFFBQ2pFO0FBQUEsTUFDRjtBQUNBLFVBQUksT0FBTyxLQUFLQSxpQkFBZ0IsRUFBRSxTQUFTLEdBQUc7QUFDNUMsMkJBQW1CO0FBQ25CLDBCQUFrQjtBQUNsQixZQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CO0FBQ3hDLCtCQUFxQjtBQUNyQixjQUFJLE9BQU8sY0FBYyxZQUFZO0FBQ25DLHNCQUFVLHdGQUFtRixXQUFXLEdBQUk7QUFBQSxVQUM5RztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLDJCQUEyQjtBQUNsQyxVQUFNLE1BQU0sY0FBYztBQUMxQixRQUFJLENBQUMsSUFBSztBQUNWLFFBQUk7QUFBRSxtQkFBYSxXQUFXLEdBQUc7QUFBQSxJQUFHLFNBQVNDLElBQUc7QUFBQSxJQUFDO0FBQUEsRUFDbkQ7QUFHQSxXQUFTLGVBQWU7QUFDdEIsUUFBSTtBQUNGLFlBQU0sTUFBTSxJQUFJLGdCQUFnQixPQUFPLFNBQVMsTUFBTSxFQUFFLElBQUksU0FBUztBQUNyRSxhQUFPLE1BQU0sZUFBZSxHQUFHLEtBQUs7QUFBQSxJQUN0QyxTQUFTQSxJQUFHO0FBQUUsYUFBTztBQUFBLElBQU07QUFBQSxFQUM3QjtBQUVBLFdBQVMscUJBQXFCLFVBQVU7QUFDdEMsVUFBTSxNQUFNLGFBQWE7QUFDekIsUUFBSSxDQUFDLElBQUs7QUFDVixVQUFNLE1BQU0sQ0FBQztBQUNiLGVBQVcsS0FBSyxVQUFVO0FBQ3hCLFlBQU0sU0FBUyxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsbUJBQW1CLEdBQUc7QUFDMUQsVUFBSSxNQUFNLElBQUksRUFBRSxZQUFZO0FBQUEsSUFDOUI7QUFDQSxRQUFJO0FBQUUsbUJBQWEsUUFBUSxLQUFLLEtBQUssVUFBVSxHQUFHLENBQUM7QUFBQSxJQUFHLFNBQVNBLElBQUc7QUFBQSxJQUFDO0FBQUEsRUFDckU7QUFFQSxXQUFTLHNCQUFzQjtBQUM3QixVQUFNLE1BQU0sYUFBYTtBQUN6QixRQUFJLENBQUMsSUFBSyxRQUFPO0FBQ2pCLFFBQUk7QUFBRSxhQUFPLEtBQUssTUFBTSxhQUFhLFFBQVEsR0FBRyxLQUFLLE1BQU07QUFBQSxJQUFHLFNBQVNBLElBQUc7QUFBRSxhQUFPO0FBQUEsSUFBTTtBQUFBLEVBQzNGO0FBRUEsV0FBUyx3QkFBd0I7QUFDL0IsVUFBTSxNQUFNLGFBQWE7QUFDekIsUUFBSSxDQUFDLElBQUs7QUFDVixRQUFJO0FBQUUsbUJBQWEsV0FBVyxHQUFHO0FBQUEsSUFBRyxTQUFTQSxJQUFHO0FBQUEsSUFBQztBQUFBLEVBQ25EO0FBRUEsaUJBQWVDLDBCQUF5QjtBQUN0QyxVQUFNLGFBQWEscUJBQXFCLG1DQUFtQztBQUMzRSxlQUFXLE1BQU0sMEJBQXFCO0FBQ3RDLFFBQUk7QUFDRixZQUFNLE1BQU0sTUFBTSxNQUFNLGVBQWU7QUFDdkMsWUFBTSxPQUFPLHNCQUFzQixNQUFNLElBQUksS0FBSyxDQUFDO0FBQ25ELDJCQUFxQixVQUFVO0FBQy9CLGlCQUFXLEtBQUs7QUFDaEIsVUFBSSxDQUFDLElBQUksSUFBSTtBQUNYLDJCQUFtQixzQ0FBaUMsS0FBSyxTQUFTLGtCQUFrQkEsdUJBQXNCO0FBQzFHO0FBQUEsTUFDRjtBQUNBLFlBQU0sV0FBVyxLQUFLLFlBQVksQ0FBQztBQUNuQyxZQUFNLFdBQVcsS0FBSyx1QkFBdUIsQ0FBQztBQUM5Qyw2QkFBdUIsS0FBSyxpQkFBaUIsQ0FBQztBQUc5Qyx1Q0FBaUMsU0FBUyxXQUFXO0FBQ3JELFVBQUksU0FBUyxTQUFTLEdBQUc7QUFDdkIsY0FBTSxNQUFNLGtCQUFRLFNBQVMsTUFBTSxzQkFBc0IsU0FBUyxTQUFTLElBQUksTUFBTSxFQUFFO0FBQ3ZGLHNCQUFjLGFBQWEsR0FBRztBQUFBLE1BQ2hDO0FBR0EsTUFBQUYsb0JBQW1CLENBQUM7QUFDcEIseUJBQW1CO0FBQ25CLE1BQUFHLG9CQUFtQixVQUFVLFFBQVE7QUFDckMsZ0JBQVUsU0FBUztBQUNuQixZQUFNLElBQUksU0FBUztBQUNuQixVQUFJLE1BQU0sR0FBRztBQUNYLHNCQUFjLGFBQWEsOE5BQWdOO0FBQUEsTUFDN08sT0FBTztBQUNMLHNCQUFjLGFBQWEseUdBQStGLENBQUMsaUNBQWlDLElBQUksSUFBSSxNQUFNLEVBQUUsd05BQW1OO0FBQUEsTUFDalk7QUFBQSxJQUNGLFNBQVMsS0FBSztBQUNaLDJCQUFxQixVQUFVO0FBQy9CLGlCQUFXLEtBQUs7QUFDaEIseUJBQW1CLG1CQUFjLElBQUksU0FBU0QsdUJBQXNCO0FBQUEsSUFDdEU7QUFBQSxFQUNGO0FBRUEsV0FBUyx5QkFBeUI7QUFDaEMsUUFBSSxDQUFDLHdCQUF3QixxQkFBcUIsV0FBVyxFQUFHLFFBQU87QUFFdkUsVUFBTSxlQUFlLEVBQUUsUUFBUSxVQUFLLFFBQVEsVUFBSyxNQUFNLGVBQUs7QUFDNUQsVUFBTSxnQkFBZ0IsRUFBRSxRQUFRLFlBQVksUUFBUSxZQUFZLE1BQU0sU0FBUztBQUUvRSxVQUFNLE9BQU8scUJBQXFCLElBQUksV0FBUztBQUM3QyxZQUFNLE9BQVEsYUFBYSxNQUFNLE9BQU8sS0FBSztBQUM3QyxZQUFNLFFBQVEsY0FBYyxNQUFNLE9BQU8sS0FBSyxNQUFNO0FBQ3BELFlBQU0sTUFBUSxXQUFXLE1BQU0sWUFBWSxNQUFNLFNBQVMsRUFBRTtBQUM1RCxZQUFNLE9BQVEsV0FBVyxNQUFNLFlBQVksRUFBRTtBQUM3QyxZQUFNLE9BQVEsV0FBVyxNQUFNLFlBQVksRUFBRTtBQUM3QyxZQUFNLE1BQVEsTUFBTSxZQUFZLFVBQVUsTUFBTSxRQUM1QyxzRUFBc0UsV0FBVyxNQUFNLEtBQUssQ0FBQyxXQUM3RjtBQUNKLGFBQU87QUFBQTtBQUFBO0FBQUEseUJBR2MsS0FBSyxLQUFLLElBQUk7QUFBQSwyQ0FDSSxLQUFLO0FBQUEsWUFDcEMsTUFBTSx3REFBbUQsR0FBRyxZQUFZLEVBQUU7QUFBQTtBQUFBLG9GQUVGLElBQUk7QUFBQSx1REFDakMsSUFBSTtBQUFBLFVBQ2pELEdBQUc7QUFBQTtBQUFBLElBRVgsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUVWLFdBQU87QUFBQTtBQUFBO0FBQUE7QUFBQSxtQ0FJMEIscUJBQXFCLE1BQU0sWUFBWSxxQkFBcUIsV0FBVyxJQUFJLEtBQUssR0FBRztBQUFBO0FBQUE7QUFBQSxzQ0FHaEYsSUFBSTtBQUFBO0FBQUEsRUFFMUM7QUFFQSxXQUFTQyxvQkFBbUIsVUFBVSxXQUFXLENBQUMsR0FBRztBQUNuRCx5QkFBcUIsRUFBRSxVQUFVLFNBQVM7QUFFMUMsMkJBQXVCLENBQUM7QUFDeEIsZUFBV0MsTUFBSyxVQUFVO0FBQ3hCLFVBQUksQ0FBQyxxQkFBcUJBLEdBQUUsRUFBRSxFQUFHLHNCQUFxQkEsR0FBRSxFQUFFLElBQUksQ0FBQztBQUMvRCwyQkFBcUJBLEdBQUUsRUFBRSxFQUFFLEtBQUtBLEVBQUM7QUFBQSxJQUNuQztBQUNBLHVCQUFtQjtBQUNuQixVQUFNLFVBQVUsU0FBUyxlQUFlLGtCQUFrQjtBQUMxRCxVQUFNLGNBQWMsU0FBUyxTQUFTO0FBR3RDLFFBQUksZUFBZTtBQUNuQixRQUFJLFNBQVMsU0FBUyxHQUFHO0FBQ3ZCLFlBQU0saUJBQWlCLENBQUM7QUFDeEIsZUFBUyxRQUFRLENBQUFBLE9BQUs7QUFDcEIsWUFBSSxDQUFDLGVBQWVBLEdBQUUsU0FBUyxFQUFHLGdCQUFlQSxHQUFFLFNBQVMsSUFBSTtBQUNoRSx1QkFBZUEsR0FBRSxTQUFTO0FBQUEsTUFDNUIsQ0FBQztBQUNELFlBQU0sZ0JBQWdCLE9BQU8sUUFBUSxjQUFjLEVBQ2hELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLEdBQUcsS0FBSyxJQUFJLEtBQUssUUFBUSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQzVELEtBQUssSUFBSTtBQUVaLHFCQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsOERBSTJDLGFBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUkvRCxTQUFTLElBQUksQ0FBQUEsT0FBSztBQUFBO0FBQUEsd0JBRU5BLEdBQUUsVUFBVSxRQUFRLE1BQU0sR0FBRyxDQUFDLGdCQUFnQkEsR0FBRSxRQUFRO0FBQUEsNkNBQ25DQSxHQUFFLE9BQU87QUFBQTtBQUFBLFdBRTNDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU9uQjtBQUdBLFVBQU0sZUFBZSxvQkFBb0I7QUFDekMsVUFBTSxrQkFBa0IsQ0FBQztBQUN6QixRQUFJLGNBQWM7QUFDaEIsaUJBQVcsS0FBSyxVQUFVO0FBQ3hCLGNBQU0sU0FBUyxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsbUJBQW1CLEdBQUc7QUFDMUQsWUFBSSxFQUFFLFVBQVUsZUFBZTtBQUM3QiwwQkFBZ0IsTUFBTSxJQUFJO0FBQUEsUUFDNUIsV0FBVyxhQUFhLE1BQU0sT0FBTyxFQUFFLFlBQVksS0FBSztBQUN0RCwwQkFBZ0IsTUFBTSxJQUFJO0FBQUEsUUFDNUI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLHlCQUFxQixRQUFRO0FBRTdCLFlBQVEsWUFBWSxlQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJM0IsY0FDSixzSEFDQSxzR0FBc0c7QUFBQTtBQUFBLDBEQUVsRCxjQUFjLEtBQUssc0JBQXNCO0FBQUE7QUFBQTtBQUFBLGlGQUd2QixTQUFTLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBUWpGLGNBQ0osU0FBUyxJQUFJLE9BQUs7QUFDaEIsWUFBTSxTQUFTLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxtQkFBbUIsR0FBRztBQUMxRCxhQUFPLGtCQUFrQixHQUFHLHFCQUFxQixFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsZ0JBQWdCLE1BQU0sS0FBSyxJQUFJO0FBQUEsSUFDL0YsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUNWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FPRztBQUFBO0FBQUE7QUFBQSxNQUdILHVCQUF1QixDQUFDO0FBQUE7QUFJNUIsc0JBQWtCO0FBRWxCLFFBQUksT0FBTyxLQUFLSixpQkFBZ0IsRUFBRSxTQUFTLEdBQUc7QUFDNUMsaUJBQVcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxPQUFPLFFBQVFBLGlCQUFnQixHQUFHO0FBQ3hELFlBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxRQUFTO0FBQzFCLFlBQUksSUFBSSxZQUFZLFVBQVUsSUFBSSxjQUFjLE1BQU07QUFHcEQsVUFBQUssb0JBQW1CLElBQUksTUFBTTtBQUM3QixnQkFBTSxLQUFLLFNBQVMsZUFBZSxlQUFlLEVBQUUsRUFBRTtBQUN0RCxjQUFJLElBQUk7QUFDTixlQUFHLFFBQVEsSUFBSTtBQUNmLDRCQUFnQixFQUFFO0FBQUEsVUFDcEI7QUFBQSxRQUNGLE9BQU87QUFDTCxVQUFBQSxvQkFBbUIsSUFBSSxJQUFJLE9BQU87QUFBQSxRQUNwQztBQUFBLE1BQ0Y7QUFDQSx5QkFBbUI7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFVQSxXQUFTLGdCQUFnQixVQUFVLFVBQVU7QUFFM0MsYUFBUyxTQUFTLEtBQUs7QUFBRSxjQUFRLE9BQU8sSUFBSSxNQUFNLE9BQU87QUFBQSxJQUFHO0FBRTVELFVBQU0sSUFBSSxTQUFTLFFBQVE7QUFDM0IsVUFBTUMsS0FBSSxTQUFTLFFBQVE7QUFDM0IsVUFBTUMsS0FBSSxFQUFFO0FBQ1osVUFBTSxJQUFJRCxHQUFFO0FBR1osVUFBTSxLQUFLLE1BQU0sS0FBSyxFQUFDLFFBQVFDLEtBQUksRUFBQyxHQUFHLE1BQU0sSUFBSSxNQUFNLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3JFLGFBQVNDLEtBQUksR0FBR0EsTUFBS0QsSUFBR0MsTUFBSztBQUMzQixlQUFTQyxLQUFJLEdBQUdBLE1BQUssR0FBR0EsTUFBSztBQUMzQixXQUFHRCxFQUFDLEVBQUVDLEVBQUMsSUFBSSxFQUFFRCxLQUFJLENBQUMsTUFBTUYsR0FBRUcsS0FBSSxDQUFDLElBQzNCLEdBQUdELEtBQUksQ0FBQyxFQUFFQyxLQUFJLENBQUMsSUFBSSxJQUNuQixLQUFLLElBQUksR0FBR0QsS0FBSSxDQUFDLEVBQUVDLEVBQUMsR0FBRyxHQUFHRCxFQUFDLEVBQUVDLEtBQUksQ0FBQyxDQUFDO0FBQUEsTUFDekM7QUFBQSxJQUNGO0FBR0EsVUFBTSxTQUFTLENBQUM7QUFDaEIsUUFBSSxJQUFJRixJQUFHRSxLQUFJO0FBQ2YsV0FBTyxJQUFJLEtBQUtBLEtBQUksR0FBRztBQUNyQixVQUFJLElBQUksS0FBS0EsS0FBSSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU1ILEdBQUVHLEtBQUksQ0FBQyxHQUFHO0FBQzNDLGVBQU8sUUFBUSxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLFlBQVcsQ0FBQztBQUNuRDtBQUFLLFFBQUFBO0FBQUEsTUFDUCxXQUFXQSxLQUFJLE1BQU0sTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFQSxLQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFQSxFQUFDLElBQUk7QUFDN0QsZUFBTyxRQUFRLEVBQUMsT0FBT0gsR0FBRUcsS0FBSSxDQUFDLEdBQUcsTUFBTSxRQUFPLENBQUM7QUFDL0MsUUFBQUE7QUFBQSxNQUNGLE9BQU87QUFDTCxlQUFPLFFBQVEsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBTSxVQUFTLENBQUM7QUFDakQ7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBR0EsV0FBUyxlQUFlLFFBQVE7QUFDOUIsV0FBTyxPQUFPLElBQUksT0FBSztBQUNyQixVQUFJLEVBQUUsU0FBUyxVQUFXLFFBQU8sNkJBQTZCLFdBQVcsRUFBRSxLQUFLLENBQUM7QUFDakYsVUFBSSxFQUFFLFNBQVMsUUFBVyxRQUFPLDJCQUEyQixXQUFXLEVBQUUsS0FBSyxDQUFDO0FBQy9FLGFBQU8sV0FBVyxFQUFFLEtBQUs7QUFBQSxJQUMzQixDQUFDLEVBQUUsS0FBSyxFQUFFO0FBQUEsRUFDWjtBQUVBLFdBQVMsa0JBQWtCLEdBQUcsZUFBZSxDQUFDLEdBQUcsZUFBZSxNQUFNO0FBQ3BFLFVBQU0saUJBQWlCLEVBQUUsU0FBUyxlQUFlLEVBQUUsc0JBQXNCO0FBQ3pFLFVBQU0sWUFBZ0IsaUJBQ2xCLGdFQUNBO0FBQ0osVUFBTSxjQUFnQixpQkFBaUIsUUFDbkMscUhBQ0EsaUJBQWlCLFlBQ2YsNkhBQ0E7QUFFTixVQUFNLGdCQUFpQixFQUFFLHVCQUF1QixDQUFDLEdBQzlDLElBQUksQ0FBQ0MsSUFBRyxRQUFRLHdEQUF3RCxNQUFNLENBQUMsVUFBVSxXQUFXQSxFQUFDLENBQUMsU0FBUyxFQUMvRyxLQUFLLEVBQUU7QUFDVixVQUFNLGFBQWEsRUFBRSxRQUFRLFdBQVcsUUFBUSxNQUFNLEdBQUc7QUFHekQsVUFBTSxTQUFZLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxtQkFBbUIsR0FBRztBQUc3RCxVQUFNLGFBQWEsZ0JBQWdCLEVBQUUsWUFBWSxJQUFJLEVBQUUsWUFBWSxFQUFFO0FBQ3JFLFVBQU0sV0FBYSxlQUFlLFVBQVU7QUFFNUMsV0FBTztBQUFBLDRDQUNtQyxNQUFNO0FBQUE7QUFBQSwwQ0FFUixXQUFXLFNBQVMsQ0FBQztBQUFBLDJDQUNwQixXQUFXLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQztBQUFBLFVBQy9ELFNBQVMsR0FBRyxXQUFXO0FBQUEsc0NBQ0ssTUFBTTtBQUFBO0FBQUE7QUFBQSx1REFHVyxNQUFNO0FBQUEsOEJBQy9CLFdBQVcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxLQUFLLFFBQVE7QUFBQSxrREFDckIsTUFBTTtBQUFBLG9DQUNwQixNQUFNLEtBQUssV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDO0FBQUE7QUFBQSxVQUVqRSxlQUFlLGlDQUFpQyxZQUFZLFdBQVcsRUFBRTtBQUFBLFVBQ3pFLEVBQUUsWUFBWTtBQUFBO0FBQUE7QUFBQSx1Q0FHZSxXQUFXLEVBQUUsU0FBUyxDQUFDO0FBQUEsWUFDbEQsRUFBRSxXQUFXLDZEQUE2RCxXQUFXLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRTtBQUFBLHNCQUNqRyxFQUFFO0FBQUEsVUFDZCxhQUFhLFNBQVMsSUFBSTtBQUFBO0FBQUEsWUFFeEIsYUFBYSxJQUFJLENBQUFOLE9BQUssbURBQW1EQSxHQUFFLFFBQVEsWUFBWSxXQUFXQSxHQUFFLE9BQU8sQ0FBQyxZQUFPLFdBQVdBLEdBQUUsVUFBVSxRQUFRLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQUEsa0JBQ2xMLEVBQUU7QUFBQTtBQUFBO0FBQUEsd0RBR29DLE1BQU0sdURBQXVELE1BQU07QUFBQSxzREFDckUsTUFBTSx5REFBeUQsTUFBTTtBQUFBLHdEQUNuRSxNQUFNLHVEQUF1RCxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJM0g7QUFFQSxXQUFTQyxvQkFBbUIsSUFBSSxTQUFTO0FBQ3ZDLFVBQU0sT0FBVSxTQUFTLGVBQWUsV0FBVyxFQUFFLEVBQUU7QUFDdkQsVUFBTSxVQUFVLFNBQVMsZUFBZSxZQUFZLEVBQUUsRUFBRTtBQUN4RCxVQUFNLFNBQVUsU0FBUyxlQUFlLFdBQVcsRUFBRSxFQUFFO0FBQ3ZELFFBQUksQ0FBQyxRQUFRLENBQUMsUUFBUztBQUd2QixTQUFLLFVBQVUsT0FBTyxZQUFZLFVBQVU7QUFDNUMsS0FBQyxVQUFVLFFBQVEsUUFBUSxFQUFFLFFBQVEsT0FBSztBQUN4QyxZQUFNLE1BQU0sU0FBUyxlQUFlLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUNuRCxXQUFLLFVBQVUsT0FBTyxRQUFRO0FBQzlCLFVBQUksSUFBSyxLQUFJLGFBQWEsZ0JBQWdCLE9BQU87QUFBQSxJQUNuRCxDQUFDO0FBQ0QsVUFBTSxpQkFBaUIsU0FBUyxlQUFlLHFCQUFxQixFQUFFLEVBQUU7QUFDeEUsUUFBSSxlQUFnQixnQkFBZSxNQUFNLFVBQVU7QUFFbkQsUUFBSSxZQUFZLFFBQVE7QUFFdEIsWUFBTSxjQUFjLFFBQVEsY0FBYyxrQkFBa0IsRUFBRSxFQUFFLEdBQUcsZUFDL0NMLGtCQUFpQixFQUFFLEdBQUcsY0FDdEI7QUFDcEIsVUFBSSxRQUFRO0FBQ1YsZUFBTyxNQUFNLFVBQVU7QUFDdkIsZUFBTyxNQUFNLFVBQVU7QUFDdkIsZUFBTyxNQUFNLGFBQWE7QUFBQSxNQUM1QjtBQUNBLGNBQVEsTUFBTSxVQUFVO0FBQ3hCLGNBQVEsWUFBWTtBQUFBO0FBQUEsa0NBRVUsRUFBRSxLQUFLLFdBQVcsV0FBVyxDQUFDO0FBQUE7QUFBQSwwQ0FFdEIsRUFBRTtBQUFBO0FBRXhDLFlBQU0sVUFBVSxTQUFTLGVBQWUsV0FBVyxFQUFFLEVBQUU7QUFDdkQsZUFBUyxVQUFVLElBQUksUUFBUTtBQUMvQixVQUFJLFFBQVMsU0FBUSxhQUFhLGdCQUFnQixNQUFNO0FBQUEsSUFFMUQsT0FBTztBQUVMLFlBQU0sV0FBVyxRQUFRLGNBQWMsVUFBVTtBQUNqRCxVQUFJLFVBQVU7QUFDWixjQUFNLE1BQU0sU0FBUztBQUNyQixnQkFBUSxZQUFZLDJCQUEyQixFQUFFLEtBQUssV0FBVyxHQUFHLENBQUM7QUFBQSxNQUN2RTtBQUVBLFVBQUksUUFBUTtBQUFFLGVBQU8sTUFBTSxVQUFVO0FBQUksZUFBTyxNQUFNLFVBQVU7QUFBSSxlQUFPLE1BQU0sYUFBYTtBQUFBLE1BQUk7QUFDbEcsY0FBUSxNQUFNLFVBQVU7QUFFeEIsTUFBQUEsa0JBQWlCLEVBQUUsSUFBSSxFQUFFLFNBQVMsWUFBWSxLQUFLO0FBQ25ELHdCQUFrQjtBQUNsQixXQUFLLFVBQVUsSUFBSSxZQUFZLFdBQVcsYUFBYSxVQUFVO0FBQ2pFLFlBQU0sWUFBWSxTQUFTLGVBQWUsTUFBTSxPQUFPLElBQUksRUFBRSxFQUFFO0FBQy9ELGlCQUFXLFVBQVUsSUFBSSxRQUFRO0FBQ2pDLFVBQUksVUFBVyxXQUFVLGFBQWEsZ0JBQWdCLE1BQU07QUFDNUQsWUFBTSxXQUFXLFNBQVMsZUFBZSxxQkFBcUIsRUFBRSxFQUFFO0FBQ2xFLFVBQUksVUFBVTtBQUNaLGlCQUFTLGNBQWMsWUFBWSxXQUFXLG9CQUFlO0FBQzdELGlCQUFTLE1BQU0sVUFBVTtBQUN6QixpQkFBUyxNQUFNLGFBQWEsWUFBWSxXQUFXLFlBQVk7QUFDL0QsaUJBQVMsTUFBTSxRQUFhLFlBQVksV0FBVyxZQUFZO0FBQUEsTUFDakU7QUFDQSx5QkFBbUI7QUFDbkIseUJBQW1CO0FBQ25CLGtDQUE0QixFQUFFO0FBQUEsSUFDaEM7QUFBQSxFQUNGO0FBRUEsV0FBUyw0QkFBNEIsU0FBUztBQUM1QyxVQUFNLFdBQVcsU0FBUyxpQkFBaUIsa0JBQWtCO0FBQzdELFFBQUksUUFBUTtBQUNaLGVBQVcsUUFBUSxVQUFVO0FBQzNCLFlBQU0sS0FBSyxLQUFLLEdBQUcsUUFBUSxZQUFZLEVBQUU7QUFDekMsVUFBSSxPQUFPLFNBQVM7QUFBRSxnQkFBUTtBQUFNO0FBQUEsTUFBVTtBQUM5QyxVQUFJLENBQUMsTUFBTztBQUNaLFVBQUksQ0FBQ0Esa0JBQWlCLEVBQUUsR0FBRztBQUN6QixhQUFLLGVBQWUsRUFBRSxVQUFVLFVBQVUsT0FBTyxTQUFTLENBQUM7QUFDM0Q7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGdCQUFnQixJQUFJO0FBQzNCLFVBQU0sV0FBYSxTQUFTLGVBQWUsZUFBZSxFQUFFLEVBQUU7QUFDOUQsVUFBTSxhQUFhLFdBQVcsU0FBUyxRQUFRO0FBQy9DLFVBQU0sVUFBYSxTQUFTLGVBQWUsWUFBWSxFQUFFLEVBQUU7QUFDM0QsVUFBTSxTQUFhLFNBQVMsZUFBZSxXQUFXLEVBQUUsRUFBRTtBQUMxRCxVQUFNLE9BQWEsU0FBUyxlQUFlLFdBQVcsRUFBRSxFQUFFO0FBQzFELFFBQUksQ0FBQyxXQUFXLENBQUMsS0FBTTtBQUd2QixZQUFRLFlBQVksMkJBQTJCLEVBQUUsS0FBSyxXQUFXLFVBQVUsQ0FBQztBQUM1RSxZQUFRLE1BQU0sVUFBVTtBQUd4QixRQUFJLFFBQVE7QUFDVixZQUFNLFdBQVcsT0FBTyxRQUFRLFlBQVk7QUFDNUMsYUFBTyxZQUFZLGVBQWUsZ0JBQWdCLFVBQVUsVUFBVSxDQUFDO0FBQ3ZFLGFBQU8sTUFBTSxVQUFVO0FBQ3ZCLGFBQU8sTUFBTSxVQUFVO0FBQ3ZCLGFBQU8sTUFBTSxhQUFhO0FBQUEsSUFDNUI7QUFFQSxJQUFBQSxrQkFBaUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxRQUFRLFlBQVksV0FBVztBQUNqRSxzQkFBa0I7QUFDbEIsU0FBSyxVQUFVLE9BQU8sVUFBVTtBQUNoQyxTQUFLLFVBQVUsSUFBSSxVQUFVO0FBQzdCLEtBQUMsVUFBVSxRQUFRLEVBQUUsUUFBUSxPQUFLO0FBQ2hDLFlBQU0sTUFBTSxTQUFTLGVBQWUsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFO0FBQ25ELFdBQUssVUFBVSxPQUFPLFFBQVE7QUFDOUIsVUFBSSxJQUFLLEtBQUksYUFBYSxnQkFBZ0IsT0FBTztBQUFBLElBQ25ELENBQUM7QUFDRCxVQUFNLGNBQWMsU0FBUyxlQUFlLFdBQVcsRUFBRSxFQUFFO0FBQzNELGlCQUFhLFVBQVUsSUFBSSxRQUFRO0FBQ25DLFFBQUksWUFBYSxhQUFZLGFBQWEsZ0JBQWdCLE1BQU07QUFDaEUsVUFBTSxlQUFlLFNBQVMsZUFBZSxxQkFBcUIsRUFBRSxFQUFFO0FBQ3RFLFFBQUksY0FBYztBQUNoQixtQkFBYSxjQUFjO0FBQzNCLG1CQUFhLE1BQU0sVUFBVTtBQUM3QixtQkFBYSxNQUFNLGFBQWE7QUFDaEMsbUJBQWEsTUFBTSxRQUFhO0FBQUEsSUFDbEM7QUFDQSx1QkFBbUI7QUFDbkIsdUJBQW1CO0FBQUEsRUFDckI7QUFFQSxXQUFTLHFCQUFxQjtBQUM1QixVQUFNLFFBQVEsU0FBUyxpQkFBaUIsZUFBZTtBQUN2RCxRQUFJLFdBQVcsR0FBRyxXQUFXLEdBQUcsVUFBVTtBQUMxQyxVQUFNLFFBQVEsVUFBUTtBQUNwQixZQUFNLEtBQU0sS0FBSyxHQUFHLFFBQVEsWUFBWSxFQUFFO0FBQzFDLFlBQU0sTUFBTUEsa0JBQWlCLEVBQUU7QUFDL0IsVUFBUyxDQUFDLElBQStDO0FBQUEsZUFDaEQsSUFBSSxZQUFZLFlBQVksSUFBSSxZQUFZLE9BQVE7QUFBQSxVQUNKO0FBQUEsSUFDM0QsQ0FBQztBQUVELFVBQU0sYUFBYSxTQUFTLGVBQWUsZ0JBQWdCO0FBQzNELFVBQU0sYUFBYSxTQUFTLGVBQWUsZ0JBQWdCO0FBQzNELFVBQU0sWUFBWSxTQUFTLGVBQWUsZUFBZTtBQUV6RCxRQUFJLFdBQVksWUFBVyxjQUFjO0FBQ3pDLFFBQUksV0FBWSxZQUFXLGNBQWM7QUFDekMsUUFBSSxVQUFXLFdBQVUsY0FBZTtBQUV4QyxVQUFNLFlBQVksU0FBUyxlQUFlLHFCQUFxQjtBQUMvRCxRQUFJLFdBQVc7QUFDYixZQUFNLFdBQVcsQ0FBQztBQUNsQixnQkFBVSxXQUFZLFVBQVUsS0FBTTtBQUN0QyxnQkFBVSxRQUFRLFdBQ2QsZ0VBQ0E7QUFBQSxJQUNOO0FBQUEsRUFDRjtBQUVBLGlCQUFlVywwQkFBeUI7QUFDdEMsUUFBSSxDQUFDLGdDQUFnQztBQUNuQyxZQUFNLFVBQVUsTUFBTTtBQUFBLFFBQ3BCO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQ0EsVUFBSSxDQUFDLFFBQVM7QUFBQSxJQUNoQjtBQWlCQSxVQUFNLFlBQVksT0FBTyxRQUFRWCxpQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsT0FBTztBQUFBLE1BQ3JFO0FBQUEsTUFDQSxTQUFZLElBQUk7QUFBQSxNQUNoQixZQUFZLElBQUksY0FBYztBQUFBLElBQ2hDLEVBQUU7QUFFRixVQUFNLGFBQWEscUJBQXFCLGlDQUFpQztBQUN6RSxlQUFXLE1BQU0sb0NBQStCO0FBQ2hELFFBQUk7QUFDRixZQUFNLE1BQU0sTUFBTSxNQUFNLHlCQUF5QjtBQUFBLFFBQy9DLFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxVQUFVLENBQUM7QUFBQSxNQUNwQyxDQUFDO0FBQ0QsWUFBTSxPQUFPLE1BQU0sSUFBSSxLQUFLO0FBQzVCLDJCQUFxQixVQUFVO0FBQy9CLGlCQUFXLEtBQUs7QUFFaEIsVUFBSSxDQUFDLElBQUksSUFBSTtBQUNYLDJCQUFtQixvQkFBZSxLQUFLLFNBQVMsdUNBQXVDVyx1QkFBc0I7QUFDN0c7QUFBQSxNQUNGO0FBRUEsWUFBTSxXQUFXLEtBQUssa0JBQWtCO0FBQ3hDLFlBQU0sV0FBVyxLQUFLLGtCQUFrQjtBQUN4QyxNQUFBQyxjQUFhLG1CQUFtQjtBQUNoQywrQkFBeUI7QUFDekIsNEJBQXNCO0FBQ3RCLG9CQUFjLGFBQWEsc0NBQWlDLFFBQVEsY0FBYyxRQUFRLHVDQUFrQztBQUM1SCx5QkFBbUIsbUJBQW1CO0FBQ3RDLGdCQUFVLE9BQU87QUFBQSxJQUNuQixTQUFTLEtBQUs7QUFDWiwyQkFBcUIsVUFBVTtBQUMvQixpQkFBVyxLQUFLO0FBQ2hCLHlCQUFtQixtQkFBYyxJQUFJLFNBQVNELHVCQUFzQjtBQUFBLElBQ3RFO0FBQUEsRUFDRjtBQUdBLFdBQVMsa0NBQWtDLE9BQU87QUFDaEQscUNBQWlDO0FBQUEsRUFDbkM7QUFHQSxXQUFTLG9CQUFvQjtBQUMzQixhQUFTLGlCQUFpQixlQUFlLEVBQUUsUUFBUSxVQUFRO0FBQ3pELFlBQU0sS0FBSyxLQUFLLEdBQUcsUUFBUSxZQUFZLEVBQUU7QUFDekMsVUFBSSxDQUFDWCxrQkFBaUIsRUFBRSxFQUFHLENBQUFLLG9CQUFtQixJQUFJLFFBQVE7QUFBQSxJQUM1RCxDQUFDO0FBQ0QsdUJBQW1CO0FBQUEsRUFDckI7QUFHQSxXQUFTLG9CQUFvQjtBQUMzQixhQUFTLGlCQUFpQixlQUFlLEVBQUUsUUFBUSxVQUFRO0FBQ3pELFlBQU0sS0FBSyxLQUFLLEdBQUcsUUFBUSxZQUFZLEVBQUU7QUFDekMsVUFBSSxDQUFDTCxrQkFBaUIsRUFBRSxFQUFHLENBQUFLLG9CQUFtQixJQUFJLFFBQVE7QUFBQSxJQUM1RCxDQUFDO0FBQ0QsdUJBQW1CO0FBQUEsRUFDckI7QUFHQSxXQUFTLDJCQUEyQjtBQUNsQyxVQUFNLFFBQVEsU0FBUyxlQUFlLGVBQWU7QUFDckQsVUFBTSxNQUFRLFNBQVMsZUFBZSxnQkFBZ0I7QUFDdEQsUUFBSSxDQUFDLE1BQU87QUFDWixVQUFNLFlBQVksTUFBTSxVQUFVLE9BQU8sY0FBYztBQUN2RCxRQUFJLEtBQUs7QUFDUCxVQUFJLFVBQVUsT0FBTyxVQUFVLFNBQVM7QUFDeEMsVUFBSSxjQUFjLFlBQVkscUJBQWdCO0FBQzlDLFVBQUksUUFBUSxZQUFZLDZCQUE2QjtBQUFBLElBQ3ZEO0FBQUEsRUFDRjtBQXFCQSxxQkFBbUI7OztBQy9zQm5CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUNBQUFRO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFDQUFBQztBQUFBO0FBa0JBLE1BQU1DLFFBQU0sVUFBVSxhQUFhO0FBS25DLE1BQUksYUFBYSxDQUFDO0FBQ2xCLE1BQUksbUJBQW1CO0FBSXZCLGlCQUFlQyx5QkFBd0I7QUFHckMsUUFBSSxPQUFPLGtCQUFrQjtBQUMzQixZQUFNLElBQUksT0FBTztBQUNqQixVQUFJLEVBQUUsU0FBUyxRQUFRO0FBQ3JCLGtDQUEwQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsY0FBYztBQUFBLE1BQ3BFLE9BQU87QUFDTCxjQUFNQyxXQUFVLFNBQVMsZUFBZSxrQkFBa0I7QUFDMUQsUUFBQUEsU0FBUSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLcEIsK0JBQXVCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxjQUFjO0FBQUEsTUFDdEY7QUFDQTtBQUFBLElBQ0Y7QUFFQSxVQUFNLFVBQVUsU0FBUyxlQUFlLGtCQUFrQjtBQUMxRCxZQUFRLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU3BCLGlCQUFhLENBQUM7QUFDZCxXQUFPLGVBQWUsQ0FBQztBQUV2QixRQUFJO0FBRUYsWUFBTSxjQUFjLE1BQU0sTUFBTSwyQkFBMkI7QUFDM0QsWUFBTSxlQUFlLE1BQU0sWUFBWSxLQUFLO0FBQzVDLFVBQUksQ0FBQyxhQUFhLElBQUk7QUFDcEIsaUJBQVMsZUFBZSxlQUFlLEVBQUUsWUFBWSxxREFBcUQsYUFBYSxTQUFTLGVBQWU7QUFDL0k7QUFBQSxNQUNGO0FBRUEsWUFBTSxXQUFXLGFBQWEsWUFBWSxDQUFDO0FBQzNDLFVBQUksU0FBUyxXQUFXLEdBQUc7QUFDekIsa0NBQTBCLHdDQUF3QztBQUNsRTtBQUFBLE1BQ0Y7QUFHQSxZQUFNLGtCQUFrQixDQUFDO0FBQ3pCLFlBQU0saUJBQWlCLGFBQWEsbUJBQW1CLENBQUM7QUFDeEQsVUFBSSxpQkFBaUI7QUFDckIsVUFBSSxnQkFBZ0I7QUFDcEIsVUFBSSxpQkFBaUIsYUFBYSxvQkFBb0I7QUFDdEQsaUJBQVcsV0FBVyxVQUFVO0FBQzlCLGNBQU0sTUFBTyxNQUFNLE1BQU0sb0JBQW9CO0FBQUEsVUFDM0MsUUFBUTtBQUFBLFVBQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxVQUM5QyxNQUFNLEtBQUssVUFBVSxFQUFFLE1BQU0sUUFBUSxNQUFNLFNBQVMsUUFBUSxRQUFRLENBQUM7QUFBQSxRQUN2RSxDQUFDO0FBQ0QsY0FBTSxPQUFPLE1BQU0sSUFBSSxLQUFLO0FBQzVCLFlBQUksS0FBSyxPQUFPO0FBQ2QsY0FBSSxLQUFLLGlCQUFrQixrQkFBaUIsS0FBSztBQUNqRCw0QkFBa0IsS0FBSyxNQUFNLHNCQUFzQjtBQUNuRCwyQkFBaUIsS0FBSyxNQUFNLHVCQUF1QjtBQUFBLFFBQ3JEO0FBQ0EsWUFBSSxLQUFLLE1BQU0sS0FBSyxlQUFlLEtBQUssWUFBWSxTQUFTLEdBQUc7QUFDOUQsMEJBQWdCLEtBQUssRUFBRSxTQUFTLGFBQWEsS0FBSyxZQUFZLENBQUM7QUFBQSxRQUNqRTtBQUFBLE1BQ0Y7QUFFQSxlQUFTLGVBQWUsZUFBZSxFQUFFLE1BQU0sVUFBVTtBQUV6RCxVQUFJLGdCQUFnQixXQUFXLEdBQUc7QUFDaEM7QUFBQSxVQUNFO0FBQUEsVUFDQSx1QkFBdUI7QUFBQSxZQUNyQixnQkFBZ0IsU0FBUztBQUFBLFlBQ3pCLGFBQWEsZUFBZSxjQUFjO0FBQUEsWUFDMUMsY0FBYyxlQUFlLGdCQUFnQjtBQUFBLFlBQzdDLG1CQUFtQixlQUFlLHFCQUFxQjtBQUFBLFlBQ3ZELGlCQUFpQjtBQUFBLFlBQ2pCLGdCQUFnQjtBQUFBLFVBQ2xCLENBQUM7QUFBQSxVQUNEO0FBQUEsUUFDRjtBQUNBO0FBQUEsTUFDRjtBQUdBLDZCQUF1QixpQkFBaUIsU0FBUyxRQUFRO0FBQUEsUUFDdkQsZ0JBQWdCLFNBQVM7QUFBQSxRQUN6QixhQUFhLGVBQWUsY0FBYztBQUFBLFFBQzFDLGNBQWMsZUFBZSxnQkFBZ0I7QUFBQSxRQUM3QyxtQkFBbUIsZUFBZSxxQkFBcUI7QUFBQSxRQUN2RCxpQkFBaUI7QUFBQSxRQUNqQixnQkFBZ0I7QUFBQSxNQUNsQixHQUFHLGNBQWM7QUFBQSxJQUVuQixTQUFTLEtBQUs7QUFDWixNQUFBRixNQUFJLE1BQU0sc0JBQXNCLEdBQUc7QUFDbkMsZUFBUyxlQUFlLGVBQWUsRUFBRSxZQUFZLDhEQUE4RCxJQUFJLE9BQU87QUFBQSxJQUNoSTtBQUFBLEVBQ0Y7QUFJQSxXQUFTLDBCQUEwQixTQUFTLFlBQVksSUFBSSxpQkFBaUIsR0FBRztBQUM5RSxXQUFPLG1CQUFtQixFQUFFLE1BQU0sUUFBUSxTQUFTLFdBQVcsZUFBZTtBQUM3RSx1QkFBbUIsT0FBTztBQUMxQixVQUFNLFVBQVUsU0FBUyxlQUFlLGtCQUFrQjtBQUMxRCxVQUFNLGFBQWEsQ0FBQztBQUNwQixRQUFJLFVBQVcsWUFBVyxLQUFLLDZEQUE2RCxXQUFXLFNBQVMsQ0FBQyxNQUFNO0FBQ3ZILFFBQUksaUJBQWlCLEVBQUcsWUFBVyxLQUFLLCtFQUErRSxlQUFlLGVBQWUsQ0FBQyxRQUFRLG1CQUFtQixJQUFJLE1BQU0sRUFBRSxNQUFNO0FBQ25NLFlBQVEsWUFBWTtBQUFBO0FBQUE7QUFBQSxtQ0FHYSxXQUFXLE9BQU8sQ0FBQztBQUFBLFFBQzlDLFdBQVcsS0FBSyxJQUFJLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSzdCO0FBRUEsaUJBQWUsd0JBQXdCO0FBQ3JDLFFBQUk7QUFDRixZQUFNLE1BQU8sTUFBTSxNQUFNLDZCQUE2QjtBQUFBLFFBQ3BELFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDO0FBQUEsTUFDMUMsQ0FBQztBQUNELFlBQU0sT0FBTyxNQUFNLElBQUksS0FBSztBQUM1QixVQUFJLENBQUMsSUFBSSxJQUFJO0FBQ1gsdUJBQWUsZ0JBQVcsK0JBQStCLEtBQUssU0FBUyxlQUFlLEVBQUU7QUFDeEY7QUFBQSxNQUNGO0FBQ0EsWUFBTSxVQUFVLE1BQU0sMEJBQTBCO0FBQ2hELFVBQUksQ0FBQyxRQUFTO0FBQ2QsTUFBQUcsY0FBYSxtQkFBbUI7QUFDaEMsb0JBQWMsYUFBYSx5RkFBMEU7QUFDckcseUJBQW1CLG1CQUFtQjtBQUN0QyxZQUFNLFlBQVk7QUFDbEIsWUFBTSxXQUFXLGFBQWE7QUFBQSxJQUNoQyxTQUFTLEtBQUs7QUFDWixxQkFBZSxnQkFBVyxzQkFBc0IsSUFBSSxPQUFPLEVBQUU7QUFBQSxJQUMvRDtBQUFBLEVBQ0Y7QUFJQSxXQUFTLHVCQUF1QixRQUFRLENBQUMsR0FBRztBQUMxQyxXQUFPO0FBQUEsTUFDTCxJQUFJLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLFdBQVcsTUFBTSxtQkFBbUIsSUFBSSxLQUFLLEdBQUc7QUFBQSxNQUMvRixJQUFJLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUFBLE1BQzVDLElBQUksTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7QUFBQSxNQUM3QyxJQUFJLE1BQU0scUJBQXFCLEdBQUcsZUFBZSxDQUFDLDJCQUEyQixNQUFNLHNCQUFzQixJQUFJLEtBQUssSUFBSTtBQUFBLE1BQ3RILElBQUksTUFBTSxtQkFBbUIsR0FBRyxlQUFlLENBQUM7QUFBQSxNQUNoRCxJQUFJLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLGlCQUFpQixNQUFNLG1CQUFtQixJQUFJLEtBQUssR0FBRztBQUFBLElBQ3ZHLEVBQUUsS0FBSyxRQUFLO0FBQUEsRUFDZDtBQUlBLFdBQVMsdUJBQXVCLGlCQUFpQixlQUFlLFFBQVEsQ0FBQyxHQUFHLGlCQUFpQixHQUFHO0FBQzlGLFdBQU8sbUJBQW1CLEVBQUUsTUFBTSxlQUFlLGlCQUFpQixlQUFlLE9BQU8sZUFBZTtBQUN2Ryx1QkFBbUIsT0FBTztBQUMxQixVQUFNLFVBQVUsU0FBUyxlQUFlLGVBQWU7QUFDdkQsWUFBUSxNQUFNLFVBQVU7QUFDeEIsVUFBTSxZQUFZLHVCQUF1QixLQUFLO0FBRTlDLFFBQUlDLFFBQU87QUFBQTtBQUFBLHVCQUVLLGdCQUFnQixPQUFPLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxZQUFZLFFBQVEsQ0FBQyxDQUFDLFNBQVMsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLE1BQU0sSUFBSSxFQUFFLFlBQVksUUFBUSxDQUFDLE1BQU0sSUFBSSxNQUFNLEVBQUU7QUFBQSxlQUN2SixnQkFBZ0IsTUFBTSxPQUFPLGFBQWEsV0FBVyxrQkFBa0IsSUFBSSxNQUFNLEVBQUU7QUFBQTtBQUFBLG9FQUU5QixXQUFXLFNBQVMsQ0FBQztBQUFBLFFBQ2pGLGlCQUFpQixJQUFJLHVGQUF1RixlQUFlLGVBQWUsQ0FBQyxRQUFRLG1CQUFtQixJQUFJLE1BQU0sRUFBRSxXQUFXLEVBQUU7QUFBQTtBQUFBO0FBSXJNLFVBQU0sZUFBZSxDQUFDLFFBQVE7QUFDNUIsWUFBTSxPQUFPLElBQUksV0FBVyxJQUFJLFlBQVk7QUFDNUMsWUFBTSxPQUFPLElBQUksWUFBWSxJQUFJLFlBQVk7QUFDN0MsVUFBSSxzQkFBc0IsS0FBSyxHQUFHLEtBQUssT0FBTyxLQUFLLEdBQUcsRUFBRyxRQUFPO0FBQ2hFLFVBQUksdUNBQXVDLEtBQUssR0FBRyxLQUFLLFVBQVUsS0FBSyxHQUFHLEVBQUcsUUFBTztBQUNwRixVQUFJLHVCQUF1QixLQUFLLEdBQUcsS0FBSyxRQUFRLEtBQUssR0FBRyxFQUFHLFFBQU87QUFDbEUsYUFBTztBQUFBLElBQ1Q7QUFFQSxvQkFBZ0IsUUFBUSxDQUFDLEVBQUUsU0FBUyxhQUFhLGVBQWUsTUFBTTtBQUNwRSxZQUFNLGNBQWMsQ0FBQyxHQUFHLGNBQWMsRUFBRSxLQUFLLENBQUMsR0FBR0MsT0FBTSxhQUFhLENBQUMsSUFBSSxhQUFhQSxFQUFDLENBQUM7QUFDeEYsTUFBQUQsU0FBUTtBQUFBLG9GQUN3RSxXQUFXLFFBQVEsS0FBSyxDQUFDO0FBQUEsOEpBQ2lELFdBQVcsUUFBUSxJQUFJLENBQUM7QUFBQTtBQUVsTCxrQkFBWSxRQUFRLENBQUMsS0FBSyxRQUFRO0FBQ2hDLGNBQU0sUUFBUSxPQUFPLFFBQVEsRUFBRSxJQUFJLEdBQUc7QUFDdEMsY0FBTSxPQUFPLElBQUksZ0JBQWdCLENBQUM7QUFDbEMsUUFBQUEsU0FBUTtBQUFBLDRDQUM4QixLQUFLLHNCQUFzQixXQUFXLFFBQVEsRUFBRSxDQUFDLGVBQWUsR0FBRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0hBS0ssV0FBVyxJQUFJLE9BQU8sQ0FBQztBQUFBLGlEQUMxRixXQUFXLElBQUksT0FBTyxDQUFDO0FBQUE7QUFBQSxpR0FFeUIsV0FBVyxJQUFJLE9BQU8sQ0FBQztBQUFBLGdCQUN4RyxLQUFLLFNBQVMsSUFBSTtBQUFBO0FBQUE7QUFBQSxrQkFHaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxPQUFPLG1FQUFtRSxXQUFXLFFBQVEsRUFBRSxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUU7QUFBQSx3RkFDdkQsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQUEsd0JBQ2xHLEVBQUU7QUFBQTtBQUFBLDhDQUVvQixLQUFLO0FBQUE7QUFBQSwyQkFFeEIsV0FBVyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFBQTtBQUFBLDBHQUVzRCxXQUFXLFFBQVEsRUFBRSxDQUFDLEtBQUssR0FBRztBQUFBLGdGQUN4RCxXQUFXLFFBQVEsRUFBRSxDQUFDLEtBQUssR0FBRztBQUFBO0FBQUE7QUFBQSw0RUFHbEMsV0FBVyxLQUFLLENBQUMsT0FBTyxXQUFXLFFBQVEsRUFBRSxDQUFDLE1BQU0sR0FBRyxNQUFNLFdBQVcsSUFBSSxPQUFPLENBQUM7QUFBQTtBQUFBLGtFQUU5RixXQUFXLElBQUksT0FBTyxDQUFDLE9BQU8sV0FBVyxLQUFLLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRM0csWUFBSSxDQUFDLE9BQU8sYUFBYyxRQUFPLGVBQWUsQ0FBQztBQUNqRCxlQUFPLGFBQWEsR0FBRyxRQUFRLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSTtBQUFBLFVBQzVDLFlBQWUsUUFBUTtBQUFBLFVBQ3ZCLGNBQWMsUUFBUTtBQUFBLFVBQ3RCLFVBQWMsUUFBUTtBQUFBLFVBQ3RCLFVBQWMsSUFBSTtBQUFBLFVBQ2xCLFlBQWUsS0FBSyxDQUFDLEtBQUs7QUFBQSxVQUMxQixRQUFjLElBQUk7QUFBQSxVQUNsQixRQUFjLElBQUk7QUFBQSxVQUNsQixNQUFjLElBQUksV0FBVztBQUFBLFVBQzdCLFNBQWM7QUFBQSxVQUNkLE9BQWMsSUFBSTtBQUFBLFFBQ3BCO0FBQUEsTUFDRixDQUFDO0FBQ0QsTUFBQUEsU0FBUTtBQUFBLElBQ1YsQ0FBQztBQUVELElBQUFBLFNBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtSLFlBQVEsWUFBWUE7QUFBQSxFQUN0QjtBQUlBLFdBQVMsMkJBQTJCLFdBQVcsS0FBSztBQUNsRCxVQUFNLE1BQVMsR0FBRyxTQUFTLElBQUksR0FBRztBQUNsQyxVQUFNLFNBQVUsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUc7QUFDOUMsUUFBSSxDQUFDLE1BQU87QUFDWixVQUFNLFFBQVMsU0FBUyxlQUFlLFlBQVksU0FBUyxJQUFJLEdBQUcsRUFBRTtBQUNyRSxVQUFNLFNBQVMsUUFBUSxNQUFNLE1BQU0sS0FBSyxJQUFJO0FBQzVDLFFBQUksQ0FBQyxPQUFRO0FBQ2IsVUFBTSxVQUFVO0FBQ2hCLFVBQU0sUUFBVTtBQUNoQixVQUFNLFFBQVEsU0FBUyxjQUFjLHNDQUFzQyxJQUFJLE9BQU8sU0FBUyxDQUFDLGdCQUFnQixHQUFHLElBQUk7QUFDdkgsUUFBSSxDQUFDLE1BQU87QUFDWixVQUFNLGNBQWMsTUFBTSxjQUFjLG1DQUFtQztBQUMzRSxRQUFJLGFBQWE7QUFDZixrQkFBWSxZQUFZLCtCQUErQixXQUFXLE1BQU0sUUFBUSxDQUFDLGtFQUE2RCxXQUFXLE1BQU0sQ0FBQztBQUFBLElBQ2xLO0FBQ0EsVUFBTSxNQUFNLFVBQVU7QUFBQSxFQUN4QjtBQUVBLFdBQVMsc0JBQXNCLFdBQVcsS0FBSyxRQUFRO0FBQ3JELFVBQU0sTUFBTyxHQUFHLFNBQVMsSUFBSSxHQUFHO0FBQ2hDLFVBQU0sU0FBUyxPQUFPLGdCQUFnQixDQUFDLEdBQUcsR0FBRztBQUM3QyxRQUFJLENBQUMsTUFBTztBQUVaLFVBQU0sUUFBUSxTQUFTLGNBQWMsc0NBQXNDLElBQUksT0FBTyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsSUFBSTtBQUN2SCxRQUFJLENBQUMsTUFBTztBQUNaLFVBQU0sVUFBVSxNQUFNLGlCQUFpQixrQkFBa0I7QUFDekQsVUFBTSxNQUFNLFFBQVEsTUFBTSxJQUFJLFFBQVEsTUFBTSxFQUFFLFlBQVksS0FBSyxJQUFJO0FBQ25FLFVBQU0sVUFBVTtBQUNoQixVQUFNLFFBQVU7QUFFaEIsVUFBTSxjQUFjLE1BQU0sY0FBYyxtQ0FBbUM7QUFDM0UsUUFBSSxhQUFhO0FBQ2Ysa0JBQVksWUFBWSwrQkFBK0IsV0FBVyxNQUFNLFFBQVEsQ0FBQyxrRUFBNkQsV0FBVyxHQUFHLENBQUM7QUFBQSxJQUMvSjtBQUNBLFVBQU0sTUFBTSxVQUFVO0FBQUEsRUFDeEI7QUFFQSxXQUFTLHVCQUF1QixPQUFPLFdBQVcsS0FBSyxNQUFNO0FBQzNELFVBQU0sTUFBUSxHQUFHLFNBQVMsSUFBSSxHQUFHO0FBQ2pDLFVBQU0sU0FBUyxPQUFPLGdCQUFnQixDQUFDLEdBQUcsR0FBRztBQUM3QyxRQUFJLE9BQU87QUFBRSxZQUFNLFVBQVU7QUFBVSxZQUFNLFFBQVE7QUFBQSxJQUFNO0FBQzNELFVBQU0sS0FBSyxTQUFTLGVBQWUsS0FBSztBQUN4QyxRQUFJLEdBQUksSUFBRyxNQUFNLFVBQVU7QUFBQSxFQUM3QjtBQUVBLGlCQUFlLGFBQWEsTUFBTSxPQUFPO0FBQ3ZDLFFBQUk7QUFDRixZQUFNLE1BQU0sTUFBTSxNQUFNLDBCQUEwQjtBQUFBLFFBQ2hELFFBQVE7QUFBQSxRQUNSLFNBQVMsRUFBRSxnQkFBZ0IsbUJBQW1CO0FBQUEsUUFDOUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxLQUFLLENBQUM7QUFBQSxNQUMvQixDQUFDO0FBQ0QsWUFBTSxPQUFPLE1BQU0sSUFBSSxLQUFLO0FBQzVCLFVBQUksS0FBSyxJQUFJO0FBQ1gsY0FBTSxLQUFLLFNBQVMsZUFBZSxLQUFLO0FBQ3hDLFlBQUksSUFBSTtBQUNOLGFBQUcsTUFBTSxVQUFVO0FBQ25CLGdCQUFNLE1BQU0sU0FBUyxjQUFjLEtBQUs7QUFDeEMsY0FBSSxNQUFNLFVBQVU7QUFDcEIsY0FBSSxjQUFjLElBQUksSUFBSTtBQUMxQixhQUFHLFlBQVksR0FBRztBQUFBLFFBQ3BCO0FBRUEsY0FBTSxRQUFRLE1BQU0sUUFBUSxTQUFTLEVBQUUsRUFBRSxNQUFNLEdBQUc7QUFDbEQsY0FBTSxNQUFNLFNBQVMsTUFBTSxJQUFJLEdBQUcsRUFBRTtBQUNwQyxjQUFNLFlBQVksTUFBTSxLQUFLLEdBQUc7QUFDaEMsY0FBTSxNQUFNLEdBQUcsU0FBUyxJQUFJLEdBQUc7QUFDL0IsY0FBTSxTQUFTLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxHQUFHO0FBQzdDLFlBQUksT0FBTztBQUFFLGdCQUFNLFVBQVU7QUFBWSxnQkFBTSxRQUFRO0FBQUEsUUFBTTtBQUFBLE1BQy9EO0FBQUEsSUFDRixTQUFTLEtBQUs7QUFDWixNQUFBSixNQUFJLE1BQU0sK0JBQStCLEdBQUc7QUFBQSxJQUM5QztBQUFBLEVBQ0Y7QUFJQSxpQkFBZSw0QkFBNEI7QUFFekMsVUFBTSxTQUFTLE1BQU0sWUFBWSxFQUFFLE1BQU0sT0FBTyxDQUFDLEVBQUU7QUFDbkQsUUFBSSxDQUFDLFFBQVEscUJBQXFCLFNBQVM7QUFDekMsWUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTU0sWUFBV0gsY0FBYSxZQUFZO0FBQzFDLFVBQU0sWUFBWUEsY0FBYSxtQkFBbUI7QUFDbEQsVUFBTSxXQUFXQSxjQUFhLG1CQUFtQjtBQUNqRCxVQUFNLHFCQUFxQixRQUFRLHVCQUF1QixDQUFDO0FBQzNELFVBQU0sUUFBUSxDQUFDLCtCQUErQjtBQUM5QyxRQUFJRyxjQUFhLFFBQVFBLGNBQWEsVUFBYSxPQUFPQSxVQUFTLFlBQVksVUFBVTtBQUN2RixZQUFNLEtBQUssc0JBQXNCLEtBQUssTUFBTUEsVUFBUyxPQUFPLENBQUMsR0FBRztBQUFBLElBQ2xFO0FBQ0EsUUFBSSxTQUFTLGFBQWE7QUFDeEIsWUFBTSxLQUFLLFNBQVMsa0JBQWtCLFNBQVM7QUFDL0MsWUFBTSxVQUFVLE9BQU8sT0FBUSxTQUFTLG1CQUFtQixPQUFPLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxLQUFNO0FBQ3hGLFlBQU0sU0FBUyxNQUFNO0FBQUEsUUFDbkI7QUFBQSxRQUNBLDBCQUEwQixVQUFVLEdBQUcsT0FBTyxRQUFRLE9BQU8sSUFBSSxNQUFNLEVBQUUsS0FBSyx1QkFBdUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQ3JHO0FBQUEsTUFDRjtBQUNBLFVBQUksQ0FBQyxPQUFRLFFBQU87QUFBQSxJQUN0QjtBQUNBLFFBQUksVUFBVSxTQUFTO0FBQ3JCLFlBQU0sS0FBSyxVQUFLLFVBQVUsU0FBUyxFQUFFO0FBQUEsSUFDdkM7QUFDQSxVQUFNLG1CQUFtQixDQUFDLGVBQWUsVUFBVSxjQUFjLEVBQUUsT0FBTyxDQUFBQyxPQUFLLG1CQUFtQkEsRUFBQyxDQUFDO0FBQ3BHLFFBQUksaUJBQWlCLFdBQVcsR0FBRztBQUNqQyxZQUFNLEtBQUssc0hBQTRHO0FBQUEsSUFDekg7QUFDQSxRQUFJLGtCQUFrQixHQUFHLHFCQUFxQjtBQUM5QyxXQUFPLE9BQU8sT0FBTyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsUUFBUSxVQUFRO0FBQzNELE9BQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxPQUFLO0FBQ3hCLGNBQU0sTUFBTSxPQUFPLE1BQU0sV0FBVyxJQUFNLEtBQUssRUFBRSxRQUFTO0FBQzFELFlBQUksQ0FBQyxJQUFJLEtBQUssS0FBTSxLQUFLLEVBQUUsT0FBUztBQUNwQyxjQUFNLE9BQU8sT0FBTyxvQkFBb0IsYUFBYSxnQkFBZ0IsR0FBRyxJQUFJO0FBQzVFLFlBQUksTUFBTSxVQUFVLFVBQVc7QUFBQSxpQkFDdEIsTUFBTSxVQUFVLE9BQVE7QUFBQSxNQUNuQyxDQUFDO0FBQUEsSUFDSCxDQUFDO0FBQ0QsUUFBSSxrQkFBa0IsS0FBSyxxQkFBcUIsR0FBRztBQUNqRCxZQUFNLFFBQVEsQ0FBQztBQUNmLFVBQUkscUJBQXFCLEVBQUcsT0FBTSxLQUFLLEdBQUcsa0JBQWtCLHFCQUFxQjtBQUNqRixVQUFJLGtCQUFrQixFQUFHLE9BQU0sS0FBSyxHQUFHLGVBQWUsMEJBQTBCLG9CQUFvQixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2xILFlBQU0sS0FBSyxVQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsc0ZBQWlGO0FBQUEsSUFDbkg7QUFDQSxVQUFNLEtBQUssWUFBWTtBQUN2QixXQUFPLGlCQUFpQixrQ0FBMkIsTUFBTSxLQUFLLElBQUksR0FBRyxjQUFjO0FBQUEsRUFDckY7QUFJQSxpQkFBZUMsNkJBQTRCO0FBbUJ6QyxVQUFNLGlCQUFpQixPQUFPLE9BQU8sT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsT0FBTyxPQUFLLEVBQUUsWUFBWSxTQUFTO0FBQ25HLFFBQUksZUFBZSxTQUFTLEdBQUc7QUFDN0IsWUFBTSxJQUFJLGVBQWU7QUFDekIsWUFBTSxZQUFZLE1BQU07QUFBQSxRQUN0QjtBQUFBLFFBQ0EsR0FBRyxDQUFDLFNBQVMsTUFBTSxJQUFJLFdBQVcsTUFBTTtBQUFBO0FBQUEsUUFDeEM7QUFBQSxNQUNGO0FBQ0EsVUFBSSxDQUFDLFVBQVc7QUFBQSxJQUNsQjtBQUdBLFVBQU0sUUFBUSxPQUFPLE9BQU8sT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsT0FBTyxPQUFLLEVBQUUsWUFBWSxTQUFTO0FBRTFGLFdBQU8sT0FBTyxPQUFPLGdCQUFnQixDQUFDLENBQUMsRUFBRSxRQUFRLE9BQUs7QUFDcEQsVUFBSSxFQUFFLFlBQVksV0FBVztBQUFFLFVBQUUsVUFBVTtBQUFVLGNBQU0sS0FBSyxDQUFDO0FBQUEsTUFBRztBQUFBLElBQ3RFLENBQUM7QUFDRCxpQkFBYTtBQUViLFVBQU0sYUFBYSxxQkFBcUIsb0NBQStCO0FBQ3ZFLGVBQVcsTUFBTSxvQ0FBK0I7QUFDaEQsUUFBSTtBQUNGLFlBQU0sTUFBTyxNQUFNLE1BQU0sNkJBQTZCO0FBQUEsUUFDcEQsUUFBUTtBQUFBLFFBQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxRQUM5QyxNQUFNLEtBQUssVUFBVSxFQUFFLGFBQWEsV0FBVyxDQUFDO0FBQUEsTUFDbEQsQ0FBQztBQUNELFlBQU0sT0FBTyxNQUFNLElBQUksS0FBSztBQUM1QiwyQkFBcUIsVUFBVTtBQUMvQixpQkFBVyxLQUFLO0FBQ2hCLFVBQUksQ0FBQyxJQUFJLElBQUk7QUFDWCx1QkFBZSxnQkFBVywrQkFBK0IsS0FBSyxTQUFTLGVBQWUsRUFBRTtBQUN4RjtBQUFBLE1BQ0Y7QUFDQSxNQUFBTCxjQUFhLG1CQUFtQjtBQUNoQyxZQUFNLFVBQVUsTUFBTSwwQkFBMEI7QUFDaEQsVUFBSSxDQUFDLFFBQVM7QUFDZCxvQkFBYyxhQUFhLHNDQUE0QixXQUFXLE1BQU0sUUFBUSxXQUFXLFdBQVcsSUFBSSxNQUFNLEVBQUUscUNBQWdDO0FBQ2xKLHlCQUFtQixtQkFBbUI7QUFDdEMsWUFBTSxZQUFZO0FBQ2xCLFlBQU0sV0FBVyxhQUFhO0FBQUEsSUFDaEMsU0FBUyxLQUFLO0FBQ1osMkJBQXFCLFVBQVU7QUFDL0IsaUJBQVcsS0FBSztBQUNoQixxQkFBZSxnQkFBVyxzQkFBc0IsSUFBSSxPQUFPLEVBQUU7QUFBQSxJQUMvRDtBQUFBLEVBQ0Y7OztBQ3ZlQTtBQUFBO0FBQUEsK0JBQUFNO0FBQUE7QUFnQkEsTUFBTUMsUUFBTSxVQUFVLGNBQWM7QUFJcEMsV0FBUywwQkFBMEIsU0FBUyxDQUFDLEdBQUc7QUFDOUMsVUFBTSxPQUFPLG9CQUFJLElBQUk7QUFDckIsVUFBTSxRQUFRLENBQUM7QUFDZixVQUFNLFdBQVcsTUFBTSxRQUFRLE9BQU8sS0FBSyxJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQy9ELFVBQU0saUJBQWlCO0FBQUEsTUFDckIsR0FBRztBQUFBLE1BQ0gsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLElBQ1QsRUFBRSxPQUFPLE9BQU87QUFFaEIsZUFBVyxZQUFZLGdCQUFnQjtBQUNyQyxVQUFJLEtBQUssSUFBSSxRQUFRLEVBQUc7QUFDeEIsV0FBSyxJQUFJLFFBQVE7QUFFakIsVUFBSSxPQUFPO0FBQ1gsVUFBSSxjQUFjO0FBQ2xCLFVBQUksU0FBUztBQUViLFVBQUksU0FBUyxTQUFTLE1BQU0sR0FBRztBQUM3QixlQUFPLFNBQVMsU0FBUyxLQUFLLElBQUksY0FBTztBQUN6QyxzQkFBYyxTQUFTLFNBQVMsS0FBSyxJQUNqQyxzRUFDQTtBQUNKLGlCQUFTO0FBQUEsTUFDWCxXQUFXLFNBQVMsU0FBUyxPQUFPLEdBQUc7QUFDckMsZUFBTztBQUNQLFlBQUksU0FBUyxXQUFXLGNBQWMsR0FBRztBQUN2Qyx3QkFBYztBQUFBLFFBQ2hCLFdBQVcsU0FBUyxXQUFXLFlBQVksR0FBRztBQUM1Qyx3QkFBYztBQUFBLFFBQ2hCLE9BQU87QUFDTCx3QkFBYyxTQUFTLFNBQVMsS0FBSyxJQUNqQyw4RUFDQTtBQUFBLFFBQ047QUFDQSxpQkFBUztBQUFBLE1BQ1gsV0FBVyxTQUFTLFNBQVMsT0FBTyxHQUFHO0FBQ3JDLGVBQU87QUFDUCxjQUFNLFlBQVksV0FBVyxLQUFLLFFBQVE7QUFDMUMsc0JBQWMsWUFDVix3RUFDQTtBQUNKLGlCQUFTLFlBQVksWUFBWTtBQUFBLE1BQ25DLFdBQVcsYUFBYSx1QkFBdUI7QUFDN0MsZUFBTztBQUNQLHNCQUFjO0FBQUEsTUFDaEI7QUFFQSxZQUFNLEtBQUssRUFBRSxVQUFVLGFBQWEsTUFBTSxPQUFPLENBQUM7QUFBQSxJQUNwRDtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyx5QkFBeUIsUUFBUSxTQUFTLFdBQVcsVUFBVTtBQUN0RSxRQUFJQyxRQUFPO0FBRVgsUUFBSSxjQUFjLE1BQU07QUFDdEIsWUFBTSxjQUFjLFlBQVksT0FBTyxZQUFZO0FBQ25ELE1BQUFBLFNBQVE7QUFBQSwyQkFDZSxjQUFjLFlBQVksU0FBUztBQUFBLGlDQUM3QixjQUFjLFlBQVksU0FBUztBQUFBO0FBQUE7QUFBQSxnQkFHcEQsU0FBUyxRQUFRLGNBQWMsSUFBSSxNQUFNLEVBQUU7QUFBQSxRQUNuRCxjQUNFLDBHQUNBLHlFQUFvRTtBQUFBO0FBQUEsSUFFNUU7QUFFQSxRQUFJLFVBQVU7QUFDWixNQUFBQSxTQUFRO0FBQUEsc0RBQ3FDLFdBQVcsUUFBUSxDQUFDO0FBQUE7QUFFakUsYUFBT0E7QUFBQSxJQUNUO0FBRUEsUUFBSSxDQUFDLE9BQU8sUUFBUTtBQUNsQixhQUFPQTtBQUFBLElBQ1Q7QUFFQSxVQUFNLGNBQWMsT0FBTyxLQUFLLENBQUMsVUFBVSxNQUFNLFNBQVMsMEJBQTBCLE1BQU0sV0FBVyxNQUFNO0FBQzNHLFVBQU0sZUFBZSxRQUFRLE9BQU8sSUFBSSxZQUFZLFFBQVEsT0FBTyxJQUFJLFlBQVk7QUFDbkYsVUFBTSxhQUFhLFFBQVEsT0FBTyxJQUFJLFdBQU0sUUFBUSxPQUFPLElBQUksV0FBTTtBQUVyRSxJQUFBQSxTQUFRO0FBQUE7QUFBQSx5RkFFK0UsWUFBWTtBQUFBLFVBQzNGLFVBQVUsc0JBQWlCLFFBQVEsSUFBSSxVQUFVLFFBQVEsSUFBSSxVQUFVLFFBQVEsSUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTTNGLGVBQVcsU0FBUyxRQUFRO0FBQzFCLFlBQU0sYUFBYSxNQUFNLFdBQVcsU0FBUyxZQUFZLE1BQU0sV0FBVyxTQUFTLFlBQVk7QUFDL0YsWUFBTSxPQUFPLE1BQU0sV0FBVyxTQUFTLFdBQU0sTUFBTSxXQUFXLFNBQVMsV0FBTTtBQUM3RSxZQUFNLGNBQWMsb0dBQW9HLFdBQVcsTUFBTSxNQUFNLENBQUM7QUFFaEosTUFBQUEsU0FBUSx5QkFBeUIsVUFBVTtBQUFBLHFDQUNWLFdBQVcsTUFBTSxLQUFLLENBQUM7QUFBQSxZQUNoRCxXQUFXO0FBQUEsdUNBQ2dCLElBQUk7QUFBQSxtQkFDeEIsV0FBVyxNQUFNLE1BQU0sQ0FBQztBQUFBO0FBQUEsSUFFekM7QUFFQSxJQUFBQSxTQUFRO0FBRVIsUUFBSSxRQUFRLE9BQU8sR0FBRztBQUNwQixNQUFBQSxTQUFRO0FBQUE7QUFBQSxRQUVKLGNBQ0UsNEhBQ0EsRUFBRTtBQUFBO0FBQUEsSUFFVjtBQUVBLFdBQU9BO0FBQUEsRUFDVDtBQUtBLE1BQU0sdUJBQXVCLG9CQUFJLElBQUk7QUFBQSxJQUNuQztBQUFBO0FBQUEsSUFDQTtBQUFBO0FBQUEsSUFDQTtBQUFBO0FBQUEsSUFDQTtBQUFBO0FBQUEsSUFDQTtBQUFBO0FBQUEsSUFDQTtBQUFBO0FBQUEsSUFDQTtBQUFBO0FBQUEsSUFDQTtBQUFBO0FBQUEsSUFDQTtBQUFBO0FBQUEsRUFDRixDQUFDO0FBRUQsV0FBUyxvQkFBb0IsT0FBTyxRQUFRLFNBQVMsY0FBYyxNQUFNLGdCQUFnQixNQUFNO0FBQzdGLFVBQU0sY0FBYyxPQUFPLEtBQUssQ0FBQyxVQUFVLE1BQU0sU0FBUywwQkFBMEIsTUFBTSxXQUFXLE1BQU07QUFDM0csVUFBTSxpQkFBaUIsQ0FBQyxVQUFVLE1BQU0sV0FBVyxVQUFVLENBQUMscUJBQXFCLElBQUksTUFBTSxJQUFJO0FBQ2pHLFVBQU0sWUFBWSxlQUFlLE9BQU8sS0FBSyxDQUFDLFVBQVUsTUFBTSxXQUFXLFVBQVUsZUFBZSxLQUFLLENBQUM7QUFDeEcsVUFBTSxZQUFZLGVBQWUsT0FBTyxLQUFLLENBQUMsVUFBVSxNQUFNLFdBQVcsVUFBVSxlQUFlLEtBQUssQ0FBQztBQUN4RyxVQUFNLFdBQVksZUFBZSxPQUFPLEtBQUssQ0FBQyxVQUFVLE1BQU0sV0FBVyxTQUFVLGVBQWUsS0FBSyxDQUFDO0FBRXhHLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUksYUFBYTtBQUNmLFVBQUk7QUFDRixjQUFNLElBQUksSUFBSSxLQUFLLFdBQVc7QUFDOUIsY0FBTSxVQUFVLEVBQUUsZUFBZSxTQUFTO0FBQUEsVUFDeEMsT0FBTztBQUFBLFVBQVMsS0FBSztBQUFBLFVBQVcsTUFBTTtBQUFBLFVBQ3RDLE1BQU07QUFBQSxVQUFXLFFBQVE7QUFBQSxRQUMzQixDQUFDO0FBQ0QseUJBQWtCLGlCQUFpQixnQkFBZ0IsSUFDL0MsUUFBUSxhQUFhLFdBQU0sT0FBTyxLQUNsQztBQUFBLE1BQ04sU0FBU0MsSUFBRztBQUFBLE1BQWU7QUFBQSxJQUM3QjtBQUVBLFFBQUlELFFBQU87QUFDWCxRQUFJLENBQUMsTUFBTSxRQUFRO0FBQ2pCLE1BQUFBLFNBQVE7QUFDUixNQUFBQSxTQUFRO0FBQ1IsYUFBT0E7QUFBQSxJQUNUO0FBRUEsZUFBVyxRQUFRLE9BQU87QUFDeEIsWUFBTSxVQUFXLEtBQUssV0FBVyxVQUFVLGFBQ3JDLEtBQUssV0FBVyxVQUFVLGFBQzFCLEtBQUssV0FBVyxTQUFTO0FBQy9CLFlBQU0sZUFBZSxVQUNqQiw0RUFDQTtBQUNKLFlBQU0saUJBQWlCLFVBQ25CLCtIQUNBO0FBQ0osWUFBTSxnQkFBZ0IsaUJBQ2xCLHlFQUF5RSxjQUFjLFdBQ3ZGO0FBRUosWUFBTSxlQUFlLEtBQUssV0FBVyxZQUNqQyx5UEFDQTtBQUVKLE1BQUFBLFNBQVE7QUFBQSwwQ0FDOEIsVUFBVSxrQkFBa0IsRUFBRSxHQUFHLEtBQUssV0FBVyxZQUFZLHlCQUF5QixFQUFFO0FBQUEscUNBQzdGLEtBQUssSUFBSTtBQUFBO0FBQUEsdUNBRVAsV0FBVyxLQUFLLFFBQVEsQ0FBQyxHQUFHLFlBQVk7QUFBQSw4Q0FDakMsV0FBVyxLQUFLLFdBQVcsQ0FBQztBQUFBLFlBQzlELGFBQWE7QUFBQSxZQUNiLGNBQWM7QUFBQTtBQUFBLFVBRWhCLFVBQ0UsZ0RBQWdELFlBQVksd0JBQzNELE1BQU07QUFDTCxjQUFNLE9BQU8sT0FBTyx3QkFBd0IsYUFBYSxvQkFBb0IsSUFBSTtBQUNqRixjQUFNLE1BQU8sT0FBTyxlQUFlLG1CQUFtQixJQUFJLENBQUMsS0FBSztBQUNoRSxlQUFPLDBCQUEwQixtQkFBbUIsS0FBSyxRQUFRLENBQUMsR0FBRyxHQUFHO0FBQUEsK0RBQ3ZCLFdBQVcsS0FBSyxRQUFRLENBQUM7QUFBQTtBQUFBLE1BRTVFLEdBQUcsQ0FBQztBQUFBO0FBQUEsSUFFZDtBQUVBLElBQUFBLFNBQVE7QUFDUixRQUFJLFFBQVEsT0FBTyxLQUFLLE1BQU0sUUFBUTtBQUNwQyxNQUFBQSxTQUFRO0FBQUEsSUFDVjtBQUNBLFdBQU9BO0FBQUEsRUFDVDtBQUVBLFdBQVMseUJBQXlCO0FBQ2hDLFdBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFrQlQ7QUFFQSxpQkFBZSx1QkFBdUI7QUFDcEMsUUFBSTtBQUNGLFlBQU0sV0FBVyxNQUFNLE1BQU0sdUJBQXVCO0FBQ3BELFlBQU0sT0FBTyxNQUFNLFNBQVMsS0FBSztBQUNqQyxVQUFJLENBQUMsU0FBUyxNQUFNLENBQUMsS0FBSyxJQUFJO0FBQzVCLGVBQU87QUFBQSxNQUNUO0FBRUEsWUFBTSxVQUFVLEtBQUssV0FBVyxFQUFFLFNBQVMsR0FBRyxjQUFjLEdBQUcsZUFBZSxFQUFFO0FBQ2hGLFlBQU0sV0FBVyxNQUFNLFFBQVEsS0FBSyxRQUFRLElBQUksS0FBSyxXQUFXLENBQUM7QUFDakUsWUFBTSxhQUFhLFFBQVEsWUFBWSxJQUFJLFlBQVksUUFBUSxXQUFXLElBQUksWUFBWTtBQUMxRixZQUFNLGFBQWEsUUFBUSxZQUFZLElBQ25DLGNBQ0EsUUFBUSxXQUFXLElBQ2pCLDRDQUNBO0FBRU4sVUFBSUEsUUFBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEscURBS3NDLFVBQVUsbUVBQW1FLFVBQVU7QUFBQTtBQUFBO0FBQUEsWUFHaEksUUFBUSxZQUFZLElBQUksUUFBUSxhQUFhLGdCQUFhLFFBQVEsT0FBTywwQkFBdUIsUUFBUSxVQUFVLElBQUksV0FBVyxVQUFVO0FBQUE7QUFBQTtBQUluSixVQUFJLFNBQVMsU0FBUyxHQUFHO0FBQ3ZCLFFBQUFBLFNBQVEseUNBQXlDLFFBQVEsV0FBVyxJQUFJLFVBQVUsTUFBTTtBQUN4RixtQkFBVyxXQUFXLFVBQVU7QUFDOUIsZ0JBQU0sV0FBVyxRQUFRLGFBQWEsWUFDbEMsRUFBRSxZQUFZLFdBQVcsUUFBUSxXQUFXLE9BQU8saUJBQVksSUFDL0QsRUFBRSxZQUFZLFdBQVcsUUFBUSxXQUFXLE9BQU8sY0FBUztBQUNoRSxnQkFBTSxnQkFBZ0IsUUFBUSxRQUFRLFFBQVEsS0FBSyxTQUFTLE1BQ3hELEdBQUcsUUFBUSxLQUFLLE1BQU0sR0FBRyxHQUFHLENBQUMsV0FDN0IsUUFBUSxRQUFRO0FBQ3BCLFVBQUFBLFNBQVEsK0RBQStELFNBQVMsVUFBVSwwQkFBMEIsU0FBUyxNQUFNO0FBQUE7QUFBQSxzQ0FFckcsU0FBUyxNQUFNLG1FQUFtRSxTQUFTLEtBQUs7QUFBQSxzQkFDaEgsUUFBUSxnQkFBZ0IsS0FBSyxDQUFDLEdBQUcsUUFBUSxTQUFTLFNBQU0sV0FBVyxRQUFRLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFBQTtBQUFBLDJFQUVwQyxXQUFXLGFBQWEsQ0FBQztBQUFBO0FBRTVGLHFCQUFXLFNBQVMsUUFBUSxVQUFVLENBQUMsR0FBRztBQUN4QyxZQUFBQSxTQUFRLGlFQUFpRSxXQUFXLE1BQU0sVUFBVSxDQUFDO0FBQUEsVUFDdkc7QUFDQSxVQUFBQSxTQUFRO0FBQUEsUUFDVjtBQUNBLFFBQUFBLFNBQVE7QUFBQSxNQUNWLE9BQU87QUFDTCxRQUFBQSxTQUFRO0FBQUEsTUFDVjtBQUdBLFlBQU0sTUFBTSxRQUFRO0FBQ3BCLFVBQUksS0FBSztBQUNQLFFBQUFBLFNBQVE7QUFBQTtBQUFBLHVFQUV5RCxXQUFXLElBQUksTUFBTSxDQUFDO0FBQUE7QUFBQSxNQUV6RjtBQUdBLFlBQU0sTUFBTSxRQUFRO0FBQ3BCLFVBQUksS0FBSztBQUNQLFFBQUFBLFNBQVE7QUFBQTtBQUFBLHVFQUV5RCxXQUFXLElBQUksTUFBTSxDQUFDO0FBQUE7QUFBQSxNQUV6RjtBQUVBLE1BQUFBLFNBQVE7QUFDUixhQUFPQTtBQUFBLElBQ1QsU0FBUyxPQUFPO0FBQ2QsTUFBQUQsTUFBSSxLQUFLLDRCQUE0QixLQUFLO0FBQzFDLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLGlCQUFlRyxxQkFBb0IsUUFBUTtBQUN6QyxJQUFBQyxjQUFhLFdBQVcsTUFBTSxNQUFNO0FBRXBDLFVBQU0sVUFBVSxTQUFTLGVBQWUsa0JBQWtCO0FBQzFELFFBQUksQ0FBQyxRQUFTO0FBRWQsUUFBSSxDQUFDLFVBQVcsT0FBTyxXQUFXLFlBQVksT0FBTyxLQUFLLE1BQU0sRUFBRSxXQUFXLEdBQUk7QUFDL0UsY0FBUSxZQUFZO0FBQ3BCO0FBQUEsSUFDRjtBQUVBLFlBQVEsWUFBWTtBQUVwQixRQUFJLFNBQVMsQ0FBQztBQUNkLFFBQUksWUFBWTtBQUNoQixRQUFJLFVBQVUsRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRTtBQUMxQyxRQUFJLFdBQVc7QUFDZixRQUFJO0FBQ0YsWUFBTSxXQUFXLE1BQU0sTUFBTSxtQkFBbUI7QUFDaEQsWUFBTSxPQUFPLE1BQU0sU0FBUyxLQUFLO0FBQ2pDLFVBQUksS0FBSyxJQUFJO0FBQ1gsaUJBQVMsS0FBSyxVQUFVLENBQUM7QUFDekIsb0JBQVksS0FBSyxjQUFjO0FBQy9CLGtCQUFVLEtBQUssV0FBVztBQUFBLE1BQzVCLE9BQU87QUFDTCxtQkFBVyxLQUFLLFNBQVM7QUFBQSxNQUMzQjtBQUFBLElBQ0YsU0FBUyxPQUFPO0FBQ2QsaUJBQVcsa0JBQWtCLE1BQU0sT0FBTztBQUFBLElBQzVDO0FBRUEsVUFBTSxRQUFRLDBCQUEwQixNQUFNO0FBQzlDLFFBQUlILFFBQU87QUFDWCxJQUFBQSxTQUFRO0FBQ1IsSUFBQUEsU0FBUSx5QkFBeUIsUUFBUSxTQUFTLFdBQVcsUUFBUTtBQUVyRSxVQUFNLGtCQUFtQixPQUFPLFVBQVUsb0JBQW9CLENBQUM7QUFDL0QsUUFBSSxnQkFBZ0IsUUFBUTtBQUMxQixNQUFBQSxTQUFRO0FBQUEsNkRBQzRDLGdCQUFnQixNQUFNO0FBQUE7QUFBQSxVQUVwRSxnQkFBZ0IsSUFBSSxDQUFBSSxPQUFLLGdDQUFnQyxXQUFXQSxFQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJL0Y7QUFFQSxVQUFNLHNCQUF1QixPQUFPLFVBQVUsd0JBQXdCLENBQUM7QUFDdkUsUUFBSSxvQkFBb0IsUUFBUTtBQUM5QixNQUFBSixTQUFRO0FBQUEsaUVBQ2dELG9CQUFvQixNQUFNO0FBQUE7QUFBQSxVQUU1RSxvQkFBb0IsSUFBSSxDQUFBSSxPQUFLLGdDQUFnQyxXQUFXQSxFQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJbkc7QUFFQSxVQUFNLHFCQUFzQixPQUFPLFVBQVUsd0JBQXdCLENBQUM7QUFDdEUsUUFBSSxtQkFBbUIsUUFBUTtBQUM3QixNQUFBSixTQUFRO0FBQUEsb0RBQ21DLG1CQUFtQixNQUFNO0FBQUE7QUFBQSxVQUU5RCxtQkFBbUIsSUFBSSxDQUFBSSxPQUFLLDJEQUEyRCxXQUFXQSxHQUFFLE9BQU8sQ0FBQyxTQUFNLFdBQVdBLEdBQUUsS0FBSyxDQUFDLGNBQWNBLEdBQUUsVUFBVSw0Q0FBNEMsV0FBV0EsR0FBRSxXQUFXLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJclE7QUFFQSxVQUFNLG9CQUFxQixPQUFPLFVBQVUsOEJBQThCLENBQUM7QUFDM0UsUUFBSSxrQkFBa0IsUUFBUTtBQUM1QixNQUFBSixTQUFRO0FBQUEsa0RBQ2lDLGtCQUFrQixNQUFNO0FBQUE7QUFBQSxVQUUzRCxrQkFBa0IsSUFBSSxDQUFBSSxPQUFLLDJEQUEyRCxXQUFXQSxHQUFFLE9BQU8sQ0FBQyxTQUFNLFdBQVdBLEdBQUUsS0FBSyxDQUFDLG9CQUFlQSxHQUFFLGlCQUFpQixJQUFJLHdCQUF3QixtQkFBbUIsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJOU87QUFFQSxVQUFNLHVCQUF3QixPQUFPLFVBQVUsMkJBQTJCLENBQUM7QUFDM0UsUUFBSSxxQkFBcUIsUUFBUTtBQUMvQixNQUFBSixTQUFRO0FBQUEsaURBQ2dDLHFCQUFxQixNQUFNO0FBQUE7QUFBQSxVQUU3RCxxQkFBcUIsSUFBSSxDQUFBSSxPQUFLLDJEQUEyRCxXQUFXQSxHQUFFLE9BQU8sQ0FBQyxTQUFNLFdBQVdBLEdBQUUsS0FBSyxDQUFDLG9CQUFlQSxHQUFFLFVBQVUsZUFBZSxVQUFVLEtBQUssYUFBYSxXQUFXQSxHQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUkvUDtBQUVBLFVBQU0seUJBQTBCLE9BQU8sVUFBVSw0QkFBNEIsQ0FBQztBQUM5RSxRQUFJLHVCQUF1QixRQUFRO0FBQ2pDLE1BQUFKLFNBQVE7QUFBQSxpREFDZ0MsdUJBQXVCLE1BQU07QUFBQTtBQUFBLFVBRS9ELHVCQUF1QixJQUFJLENBQUFLLE9BQUssMkRBQTJELFdBQVdBLEdBQUUsWUFBWUEsR0FBRSxJQUFJLENBQUMsNERBQTRELFlBQVlBLEdBQUUsWUFBWSxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJQSxHQUFFLFlBQVksSUFBSSxTQUFTLE1BQU0sV0FBTSxFQUFFLDhEQUE4RCxZQUFZQSxHQUFFLFVBQVUsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSUEsR0FBRSxVQUFVLElBQUksU0FBUyxNQUFNLFdBQU0sRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBSXpjO0FBRUEsVUFBTSxrQkFBbUIsT0FBTyx5QkFBeUIsQ0FBQztBQUMxRCxRQUFJLGdCQUFnQixRQUFRO0FBQzFCLE1BQUFMLFNBQVE7QUFBQSwwREFDeUMsZ0JBQWdCLE1BQU07QUFBQTtBQUFBLFVBRWpFLGdCQUFnQixJQUFJLENBQUFJLE9BQUssZUFBZSxXQUFXQSxHQUFFLE9BQU8sQ0FBQyxtQ0FBbUMsV0FBV0EsR0FBRSxPQUFPLENBQUMsOENBQThDLFdBQVdBLEdBQUUsbUJBQW1CLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJck87QUFFQSxVQUFNLGNBQWMsT0FBTyxVQUFVLG1CQUFtQjtBQUN4RCxVQUFNLGdCQUFnQixPQUFPLFVBQVUsa0JBQWtCO0FBQ3pELElBQUFKLFNBQVEsb0JBQW9CLE9BQU8sUUFBUSxTQUFTLGFBQWEsYUFBYTtBQUU5RSxRQUFJLE9BQU8sWUFBWTtBQUNyQixNQUFBQSxTQUFRO0FBQUEsMkNBQytCLFdBQVcsT0FBTyxVQUFVLENBQUM7QUFBQTtBQUFBLElBRXRFO0FBRUEsWUFBUSxZQUFZLEdBQUdBLEtBQUk7QUFDM0IsSUFBQUEsU0FBUSxNQUFNLHFCQUFxQjtBQUNuQyxJQUFBQSxTQUFRLHVCQUF1QjtBQUMvQixJQUFBQSxTQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLUixZQUFRLFlBQVlBO0FBQUEsRUFDdEI7OztBQ3JkQTtBQUFBO0FBQUEsbUNBQUFNO0FBQUEsSUFBQTtBQUFBO0FBaUJBLE1BQU1DLFFBQU0sVUFBVSxnQkFBZ0I7QUFNdEMsTUFBSSxlQUFlO0FBSW5CLFdBQVMsV0FBVyxVQUFVO0FBQzVCLFFBQUksQ0FBQyxTQUFVLFFBQU87QUFDdEIsVUFBTSxPQUFPLFNBQVMsTUFBTSxHQUFHLEVBQUUsSUFBSTtBQUNyQyxRQUFJLEtBQUssU0FBUyxNQUFNLEtBQUssS0FBSyxZQUFZLEVBQUUsU0FBUyxLQUFLO0FBQzVELGFBQU87QUFDVCxRQUFJLEtBQUssU0FBUyxNQUFNO0FBQ3RCLGFBQU87QUFDVCxRQUFJLEtBQUssU0FBUyxPQUFPLEtBQUssS0FBSyxZQUFZLEVBQUUsU0FBUyxLQUFLO0FBQzdELGFBQU87QUFDVCxRQUFJLEtBQUssU0FBUyxPQUFPO0FBQ3ZCLGFBQU87QUFDVCxRQUFJLEtBQUssU0FBUyxPQUFPO0FBQ3ZCLGFBQU87QUFDVCxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsVUFBVSxVQUFVO0FBQzNCLFFBQUksQ0FBQyxTQUFVLFFBQU87QUFDdEIsVUFBTSxJQUFJLFNBQVMsWUFBWTtBQUMvQixRQUFJLEVBQUUsU0FBUyxNQUFNLEVBQUksUUFBTyxFQUFFLFNBQVMsS0FBSyxJQUFJLGNBQU87QUFDM0QsUUFBSSxFQUFFLFNBQVMsT0FBTyxFQUFHLFFBQU87QUFDaEMsUUFBSSxFQUFFLFNBQVMsT0FBTyxFQUFHLFFBQU87QUFDaEMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLGlCQUFpQixVQUFVO0FBQ2xDLFFBQUksQ0FBQyxTQUFVLFFBQU87QUFDdEIsVUFBTSxJQUFJLFNBQVMsWUFBWTtBQUMvQixRQUFJLEVBQUUsU0FBUyxNQUFNLEtBQUssRUFBRSxTQUFTLEtBQUs7QUFDeEMsYUFBTztBQUNULFFBQUksRUFBRSxTQUFTLE1BQU07QUFDbkIsYUFBTztBQUNULFFBQUksRUFBRSxTQUFTLE9BQU8sS0FBSyxFQUFFLFNBQVMsS0FBSztBQUN6QyxhQUFPO0FBQ1QsUUFBSSxFQUFFLFNBQVMsT0FBTztBQUNwQixhQUFPO0FBQ1QsUUFBSSxFQUFFLFNBQVMsT0FBTztBQUNwQixhQUFPO0FBQ1QsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLGlCQUFpQixPQUFPO0FBRS9CLFVBQU0sUUFBUSxNQUFNLEtBQUssT0FBSyxFQUFFLFNBQVMsT0FBTyxLQUFLLENBQUMsRUFBRSxZQUFZLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFDckYsV0FBTyxTQUFTLE1BQU0sS0FBSyxPQUFLLEVBQUUsU0FBUyxPQUFPLENBQUMsS0FBSztBQUFBLEVBQzFEO0FBRUEsV0FBUyxtQkFBbUIsVUFBVTtBQUNwQyxRQUFJLENBQUMsU0FBVSxRQUFPO0FBQ3RCLFVBQU0sT0FBTyxTQUFTLE1BQU0sR0FBRyxFQUFFLElBQUk7QUFDckMsVUFBTSxNQUFNLGlCQUFpQixtQkFBbUIsSUFBSSxDQUFDO0FBQ3JELFdBQU87QUFBQSx5SEFDZ0gsZUFBZSxLQUFLLGVBQWU7QUFBQTtBQUFBO0FBQUEsOERBRzlGLFdBQVcsSUFBSSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBT3ZELEdBQUc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUTFCO0FBU0EsaUJBQWUseUJBQXlCLFNBQVMsQ0FBQyxHQUFHO0FBQ25ELFVBQU0sVUFBVSxTQUFTLGVBQWUsa0JBQWtCO0FBQzFELFFBQUksQ0FBQyxRQUFTO0FBR2QsVUFBTSxPQUFPLG9CQUFJLElBQUk7QUFDckIsVUFBTSxhQUFhO0FBQUEsTUFDakIsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsR0FBSSxNQUFNLFFBQVEsT0FBTyxLQUFLLElBQUksT0FBTyxRQUFRLENBQUM7QUFBQSxJQUNwRCxFQUFFLE9BQU8sT0FBTztBQUVoQixVQUFNLFFBQVEsQ0FBQztBQUNmLGVBQVcsWUFBWSxZQUFZO0FBQ2pDLFVBQUksS0FBSyxJQUFJLFFBQVEsRUFBRztBQUN4QixXQUFLLElBQUksUUFBUTtBQUNqQixVQUFJLFNBQVMsU0FBUyxNQUFNLEtBQUssYUFBYSxzQkFBdUI7QUFDckUsWUFBTSxLQUFLLFFBQVE7QUFBQSxJQUNyQjtBQUVBLFVBQU0sa0JBQWtCLGlCQUFpQixLQUFLO0FBRTlDLFFBQUlDLFFBQU87QUFDWCxJQUFBQSxTQUFRO0FBQ1IsSUFBQUEsU0FBUTtBQUVSLFFBQUksaUJBQWlCO0FBQ25CLFlBQU0sV0FBVyxlQUFlLGlCQUFpQjtBQUNqRCxNQUFBQSxTQUFRO0FBQUE7QUFBQSwrR0FFbUcsZUFBZSxZQUFZLE1BQU07QUFBQSwrQkFDakgsWUFBWTtBQUFBO0FBQUEsb0JBRTlCLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFJakIsTUFBQUEsU0FBUSxtQkFBbUIsZUFBZTtBQUFBLElBQzVDO0FBRUEsUUFBSSxNQUFNLFdBQVcsR0FBRztBQUN0QixNQUFBQSxTQUFRO0FBQUEsSUFDVixPQUFPO0FBQ0wsTUFBQUEsU0FBUTtBQUNSLGlCQUFXLFlBQVksT0FBTztBQUM1QixjQUFNLE9BQVMsU0FBUyxNQUFNLEdBQUcsRUFBRSxJQUFJO0FBQ3ZDLGNBQU0sT0FBUyxVQUFVLFFBQVE7QUFDakMsY0FBTSxRQUFTLFdBQVcsUUFBUTtBQUNsQyxjQUFNLE9BQVMsaUJBQWlCLFFBQVE7QUFDeEMsUUFBQUEsU0FBUTtBQUFBO0FBQUE7QUFBQTtBQUFBLDJDQUk2QixJQUFJO0FBQUE7QUFBQSwyRUFFNEIsV0FBVyxLQUFLLENBQUM7QUFBQSwwRUFDbEIsV0FBVyxJQUFJLENBQUM7QUFBQTtBQUFBLG1DQUV2RCxtQkFBbUIsSUFBSSxDQUFDO0FBQUEseUJBQ2xDLFdBQVcsSUFBSSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BU3JDO0FBQ0EsTUFBQUEsU0FBUTtBQUFBLElBQ1Y7QUFFQSxRQUFJLE9BQU8sWUFBWTtBQUNyQixNQUFBQSxTQUFRO0FBQUE7QUFBQTtBQUFBLDJDQUcrQixXQUFXLE9BQU8sVUFBVSxDQUFDO0FBQUE7QUFBQSxJQUV0RTtBQUVBLElBQUFBLFNBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNSLFlBQVEsWUFBWUE7QUFHcEIsUUFBSSxpQkFBaUI7QUFDbkIsWUFBTSxZQUFhLFFBQVEsY0FBYywyQkFBMkI7QUFDcEUsWUFBTSxXQUFhLFFBQVEsY0FBYywwQkFBMEI7QUFDbkUsWUFBTSxjQUFjLFFBQVEsY0FBYyxxQkFBcUI7QUFFL0QsWUFBTSxpQkFBaUIsQ0FBQyxTQUFTO0FBQy9CLHVCQUFlO0FBQ2YsWUFBSSxZQUFhLGFBQVksTUFBTSxVQUFVLE9BQU8sS0FBSztBQUN6RCxZQUFJLFdBQVc7QUFDYixvQkFBVSxjQUFjLE9BQU8sMkJBQW9CO0FBQ25ELG9CQUFVLGFBQWEsaUJBQWlCLE9BQU8sSUFBSSxDQUFDO0FBQ3BELG9CQUFVLE1BQU0sYUFBYSxPQUFPLFlBQVk7QUFBQSxRQUNsRDtBQUFBLE1BQ0Y7QUFFQSxpQkFBVyxpQkFBaUIsU0FBUyxNQUFNLGVBQWUsQ0FBQyxZQUFZLENBQUM7QUFDeEUsZ0JBQVUsaUJBQWlCLFNBQVUsTUFBTSxlQUFlLEtBQUssQ0FBQztBQUFBLElBQ2xFO0FBQUEsRUFDRjtBQVNBLGlCQUFlQywyQkFBMEI7QUFDdkMsUUFBSTtBQUNGLFlBQU0sTUFBTSxNQUFNLFFBQVEsUUFBUSxrQ0FBa0MsQ0FBQyxDQUFDO0FBQ3RFLFVBQUksQ0FBQyxLQUFLLElBQUk7QUFDWixjQUFNLElBQUksTUFBTSxLQUFLLFNBQVMsd0NBQXdDO0FBQUEsTUFDeEU7QUFDQSxNQUFBQyxjQUFhLFNBQVMsWUFBWTtBQUNsQyxnQkFBVSxVQUFVO0FBQ3BCLG9CQUFjLGFBQWEsZ0VBQTJEO0FBQUEsSUFDeEYsU0FBUyxLQUFLO0FBQ1osTUFBQUgsTUFBSSxNQUFNLGtDQUFrQyxHQUFHO0FBQy9DLG9CQUFjLFVBQVUsVUFBSyxJQUFJLE9BQU8sRUFBRTtBQUFBLElBQzVDO0FBQUEsRUFDRjs7O0FDblBBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxnREFBQUk7QUFBQSxJQUFBLHFDQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9DQSxNQUFNQyxRQUFNLFVBQVUsdUJBQXVCO0FBTTdDLE1BQUksV0FBVztBQUNmLE1BQUksc0JBQXNCO0FBQzFCLE1BQUksMEJBQTBCLENBQUM7QUFFL0IsV0FBUyxpQkFBaUI7QUFDeEIsZUFBVztBQUNYLDBCQUFzQjtBQUN0Qiw4QkFBMEIsQ0FBQztBQUFBLEVBQzdCO0FBSUEsV0FBU0MsaUNBQWdDO0FBTXZDLG1CQUFlO0FBQ2YsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQXFFVDtBQUVBLFdBQVNDLHdDQUF1QztBQUM5QyxXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVDtBQUlBLFdBQVMsMEJBQTBCO0FBQ2pDLFVBQU0sT0FBTyxTQUFTLGVBQWUsZ0JBQWdCO0FBQ3JELFVBQU0sTUFBTSxTQUFTLGVBQWUsZ0JBQWdCO0FBQ3BELFVBQU0sT0FBTyxTQUFTLGVBQWUsaUJBQWlCO0FBQ3RELFFBQUksQ0FBQyxRQUFRLENBQUMsSUFBSztBQUNuQixVQUFNLFdBQVcsS0FBSyxNQUFNLFlBQVk7QUFDeEMsU0FBSyxNQUFNLFVBQVUsV0FBVyxTQUFTO0FBQ3pDLFFBQUksYUFBYSxpQkFBaUIsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNuRCxRQUFJLEtBQU0sTUFBSyxjQUFjLFdBQVcsV0FBTTtBQUFBLEVBQ2hEO0FBRUEsV0FBUyxvQkFBb0IsTUFBTTtBQUNqQyxlQUFXO0FBQ1gsZUFBV0MsTUFBSyxDQUFDLGtCQUFrQixvQkFBb0IsR0FBRztBQUN4RCxZQUFNLE1BQU0sU0FBUyxlQUFlLFlBQVlBLEVBQUMsTUFBTTtBQUN2RCxZQUFNLE9BQU8sU0FBUyxlQUFlLE9BQU9BLEVBQUMsYUFBYTtBQUMxRCxZQUFNLFNBQVNBLE9BQU07QUFDckIsVUFBSSxLQUFLO0FBQ1AsWUFBSSxhQUFhLGlCQUFpQixPQUFPLE1BQU0sQ0FBQztBQUNoRCxZQUFJLE1BQU0sYUFBYSxTQUFTLG9CQUFvQjtBQUNwRCxZQUFJLE1BQU0sUUFBUSxTQUFTLDJCQUEyQjtBQUN0RCxZQUFJLE1BQU0sYUFBYSxTQUFTLFFBQVE7QUFBQSxNQUMxQztBQUNBLFVBQUksS0FBTSxNQUFLLE1BQU0sVUFBVSxTQUFTLFVBQVU7QUFBQSxJQUNwRDtBQUFBLEVBQ0Y7QUFJQSxpQkFBZSw2QkFBNkJDLFFBQU87QUFDakQsVUFBTSxPQUFPQSxPQUFNLE9BQU8sU0FBU0EsT0FBTSxPQUFPLE1BQU0sQ0FBQztBQUN2RCxRQUFJLENBQUMsS0FBTTtBQUNYLFVBQU0sV0FBVyxTQUFTLGVBQWUsWUFBWTtBQUNyRCxRQUFJLFNBQVUsVUFBUyxjQUFjLFdBQVcsS0FBSyxJQUFJO0FBQ3pELFFBQUk7QUFDRixZQUFNLFdBQVcsSUFBSSxTQUFTO0FBQzlCLGVBQVMsT0FBTyxRQUFRLElBQUk7QUFDNUIsWUFBTSxPQUFPLE1BQU0sTUFBTSxvQkFBb0IsRUFBRSxRQUFRLFFBQVEsTUFBTSxTQUFTLENBQUM7QUFDL0UsWUFBTSxPQUFPLE1BQU0sS0FBSyxLQUFLO0FBQzdCLFVBQUksQ0FBQyxLQUFLLE1BQU0sS0FBSyxPQUFPO0FBQzFCLGNBQU0sSUFBSSxNQUFNLEtBQUssV0FBVyxLQUFLLFNBQVMsZ0JBQWdCLEtBQUssTUFBTSxFQUFFO0FBQUEsTUFDN0U7QUFDQSxZQUFNLFdBQVcsU0FBUyxlQUFlLGtCQUFrQjtBQUMzRCxVQUFJLFNBQVUsVUFBUyxRQUFRLEtBQUs7QUFDcEMsVUFBSSxTQUFVLFVBQVMsY0FBYyxVQUFVLEtBQUssZUFBZSxlQUFlLENBQUMscUJBQXFCLEtBQUssUUFBUTtBQUFBLElBQ3ZILFNBQVMsS0FBSztBQUNaLE1BQUFKLE1BQUksTUFBTSx3Q0FBd0MsR0FBRztBQUNyRCxVQUFJLFNBQVUsVUFBUyxjQUFjLHVCQUF1QixJQUFJLE9BQU87QUFBQSxJQUN6RTtBQUFBLEVBQ0Y7QUFJQSxXQUFTLG9CQUFvQixNQUFNO0FBQ2pDLFdBQU8sU0FBUyxtQkFBbUIsdUNBQXVDO0FBQUEsRUFDNUU7QUFFQSxXQUFTLGlCQUFpQixNQUFNO0FBQzlCLFVBQU0sS0FBSyxTQUFTLGVBQWUsU0FBUyxtQkFBbUIsb0JBQW9CLGtCQUFrQjtBQUNyRyxXQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssSUFBSTtBQUFBLEVBQ2hDO0FBRUEsaUJBQWUsNEJBQTRCO0FBQ3pDLFVBQU0sUUFBUSxpQkFBaUIsUUFBUTtBQUN2QyxVQUFNLFdBQVcsU0FBUyxlQUFlLFlBQVk7QUFDckQsVUFBTSxhQUFhLFNBQVMsZUFBZSxpQkFBaUI7QUFDNUQsVUFBTSxXQUFXLFNBQVMsZUFBZSxZQUFZO0FBQ3JELFVBQU0sYUFBYSxTQUFTLGVBQWUsaUJBQWlCO0FBRTVELFFBQUksQ0FBQyxPQUFPO0FBQ1YsVUFBSSxTQUFVLFVBQVMsY0FBYyxhQUFhLG1CQUM5QyxzQ0FDQTtBQUNKO0FBQUEsSUFDRjtBQUVBLFFBQUksV0FBWSxZQUFXLFlBQVk7QUFDdkMsUUFBSSxTQUFVLFVBQVMsWUFBWTtBQUNuQyxhQUFTLGVBQWUsNkJBQTZCLEVBQUUsWUFBWTtBQUNuRSxRQUFJLFlBQVk7QUFBRSxpQkFBVyxXQUFXO0FBQU0saUJBQVcsY0FBYztBQUFBLElBQWM7QUFDckYsUUFBSSxTQUFVLFVBQVMsY0FBYztBQUVyQyxRQUFJO0FBQ0YsWUFBTSxPQUFPLEVBQUUsc0JBQXNCLHdCQUF3QjtBQUM3RCxXQUFLLGFBQWEsbUJBQW1CLGdCQUFnQixNQUFNLElBQUk7QUFDL0QsWUFBTSxPQUFPLE1BQU0sTUFBTSxvQkFBb0IsUUFBUSxHQUFHO0FBQUEsUUFDdEQsUUFBUTtBQUFBLFFBQ1IsU0FBUyxFQUFFLGdCQUFnQixtQkFBbUI7QUFBQSxRQUM5QyxNQUFNLEtBQUssVUFBVSxJQUFJO0FBQUEsTUFDM0IsQ0FBQztBQUNELFlBQU0sT0FBTyxNQUFNLEtBQUssS0FBSztBQUU3QixVQUFJLENBQUMsS0FBSyxNQUFNLEtBQUssT0FBTyxPQUFPO0FBQ2pDLFlBQUksU0FBVSxVQUFTLGNBQWMsVUFBVSxJQUFJLEtBQUssU0FBUyxlQUFlLENBQUM7QUFDakY7QUFBQSxNQUNGO0FBRUEsVUFBSSxLQUFLLHdCQUF3QjtBQUMvQixZQUFJLFNBQVUsVUFBUyxjQUFjO0FBQ3JDLG9DQUE0QixLQUFLLHdCQUF3QixLQUFLO0FBQzlEO0FBQUEsTUFDRjtBQUVBLGdDQUEwQixDQUFDO0FBQzNCLFlBQU0sVUFBVSxLQUFLLFdBQVcsQ0FBQztBQUNqQyxVQUFJLFNBQVUsVUFBUyxjQUFjO0FBRXJDLFVBQUksUUFBUSxXQUFXLEdBQUc7QUFDeEIsWUFBSSxXQUFZLFlBQVcsWUFBWTtBQUN2QztBQUFBLE1BQ0Y7QUFFQSw0QkFBc0IsRUFBRSxZQUFZLEtBQUssYUFBYSxRQUFRLFVBQVUsUUFBUTtBQUNoRiwyQkFBcUI7QUFBQSxJQUN2QixTQUFTLEtBQUs7QUFDWixNQUFBQSxNQUFJLE1BQU0scUNBQXFDLEdBQUc7QUFDbEQsVUFBSSxTQUFVLFVBQVMsY0FBYyxrQkFBa0IsSUFBSSxJQUFJLE9BQU8sQ0FBQztBQUFBLElBQ3pFLFVBQUU7QUFDQSxVQUFJLFlBQVk7QUFBRSxtQkFBVyxXQUFXO0FBQU8sbUJBQVcsY0FBYztBQUFBLE1BQWtCO0FBQUEsSUFDNUY7QUFBQSxFQUNGO0FBRUEsV0FBUyw4QkFBOEI7QUFDckMsMEJBQXNCO0FBQ3RCLDhCQUEwQixDQUFDO0FBQzNCLGFBQVMsZUFBZSxpQkFBaUIsRUFBRSxZQUFZO0FBQ3ZELGFBQVMsZUFBZSxZQUFZLEVBQUUsWUFBWTtBQUNsRCxhQUFTLGVBQWUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVO0FBQzNELFVBQU0sV0FBVyxTQUFTLGVBQWUsWUFBWTtBQUNyRCxRQUFJLFNBQVUsVUFBUyxjQUFjO0FBQUEsRUFDdkM7QUFVQSxXQUFTLDRCQUE0QixVQUFVLHFCQUFxQjtBQUNsRSxVQUFNLFlBQVksU0FBUyxlQUFlLDZCQUE2QjtBQUN2RSxRQUFJLENBQUMsV0FBVztBQUNkLE1BQUFBLE1BQUksS0FBSyxxRUFBcUU7QUFDOUU7QUFBQSxJQUNGO0FBRUEsVUFBTSxpQkFBaUIsU0FBUyxlQUFlLGlCQUFpQjtBQUVoRSxVQUFNLFFBQVEsU0FBUyxjQUFjLEtBQUs7QUFDMUMsVUFBTSxLQUFLO0FBQ1gsVUFBTSxhQUFhLFFBQVEsT0FBTztBQUNsQyxVQUFNLE1BQU0sVUFBVTtBQUN0QixVQUFNLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQSw2RUFJeUQsSUFBSSxRQUFRLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsMERBTWhDLElBQUksbUJBQW1CLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVloRixjQUFVLFlBQVk7QUFDdEIsY0FBVSxZQUFZLEtBQUs7QUFFM0IsVUFBTSxZQUFZLE1BQU0sY0FBYywwQkFBMEI7QUFDaEUsVUFBTSxZQUFZLE1BQU0sY0FBYywyQkFBMkI7QUFDakUsVUFBTSxZQUFZLE1BQU0sY0FBYywyQkFBMkI7QUFFakUsY0FBVSxNQUFNO0FBQ2hCLGNBQVUsa0JBQWtCLFVBQVUsTUFBTSxRQUFRLFVBQVUsTUFBTSxNQUFNO0FBRTFFLFVBQU0sdUJBQXVCLE1BQU07QUFDakMsWUFBTSxPQUFPO0FBQ2IsVUFBSSxlQUFnQixnQkFBZSxNQUFNO0FBQUEsSUFDM0M7QUFFQSxjQUFVLGlCQUFpQixTQUFTLE1BQU07QUFDeEMsWUFBTSxVQUFVLFVBQVUsTUFBTSxLQUFLO0FBQ3JDLFVBQUksU0FBUztBQUNYLGtDQUEwQixDQUFDLEdBQUcseUJBQXlCLEVBQUUsVUFBVSxRQUFRLFFBQVEsQ0FBQztBQUNwRixjQUFNLFVBQVUsU0FBUyxlQUFlLGFBQWEsbUJBQW1CLG9CQUFvQixrQkFBa0I7QUFDOUcsWUFBSSxRQUFTLFNBQVEsUUFBUTtBQUFBLE1BQy9CO0FBQ0EsMkJBQXFCO0FBQ3JCLFVBQUksUUFBUywyQkFBMEI7QUFBQSxJQUN6QyxDQUFDO0FBQ0QsY0FBVSxpQkFBaUIsU0FBUyxvQkFBb0I7QUFDeEQsY0FBVSxpQkFBaUIsV0FBVyxDQUFDLE1BQU07QUFDM0MsVUFBSSxFQUFFLFFBQVEsV0FBVyxDQUFDLEVBQUUsVUFBVTtBQUFFLFVBQUUsZUFBZTtBQUFHLGtCQUFVLE1BQU07QUFBQSxNQUFHO0FBQy9FLFVBQUksRUFBRSxRQUFRLFNBQVUsV0FBVSxNQUFNO0FBQUEsSUFDMUMsQ0FBQztBQUFBLEVBQ0g7QUFJQSxXQUFTLHNCQUFzQixRQUFRO0FBQ3JDLFVBQU0sV0FBVyxPQUFPO0FBQ3hCLFFBQUksT0FBTyxhQUFhLFNBQVUsUUFBTztBQUN6QyxRQUFJLFlBQVksT0FBTyxhQUFhLFVBQVU7QUFDNUMsVUFBSSxVQUFVLFNBQVUsUUFBTyxTQUFTO0FBQ3hDLFVBQUksVUFBVSxTQUFVLFFBQU8sU0FBUztBQUN4QyxhQUFPLEtBQUssVUFBVSxRQUFRO0FBQUEsSUFDaEM7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsYUFBYSxRQUFRO0FBQzVCLFFBQUksT0FBTyx1QkFBdUI7QUFDaEMsYUFBTztBQUFBLHFDQUNxQixJQUFJLE9BQU8scUJBQXFCLENBQUM7QUFBQTtBQUFBLElBRS9EO0FBQ0EsUUFBSSxPQUFPLG9CQUFvQixPQUFPLGlCQUFpQixRQUFRO0FBQzdELGFBQU87QUFBQSxpQ0FDaUIsSUFBSSxPQUFPLGlCQUFpQixLQUFLLElBQUksQ0FBQyxDQUFDO0FBQUE7QUFBQSxJQUVqRTtBQUNBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxlQUFlLFFBQVE7QUFDOUIsVUFBTSxRQUFRLENBQUM7QUFDZixRQUFJLE9BQU8sc0JBQXVCLE9BQU0sS0FBSyx5QkFBeUIsT0FBTyxxQkFBcUIsRUFBRTtBQUNwRyxRQUFJLE9BQU8sb0JBQW9CLE9BQU8saUJBQWlCLE9BQVEsT0FBTSxLQUFLLHFCQUFxQixPQUFPLGlCQUFpQixLQUFLLElBQUksQ0FBQyxFQUFFO0FBQ25JLFdBQU8sTUFBTSxTQUFTLEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLO0FBQUEsRUFDbEQ7QUFFQSxXQUFTLHVCQUF1QjtBQUM5QixVQUFNLGFBQWEsU0FBUyxlQUFlLGlCQUFpQjtBQUM1RCxVQUFNLGFBQWEsU0FBUyxlQUFlLGlCQUFpQjtBQUM1RCxRQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFxQjtBQUV6QyxVQUFNLFVBQVUsb0JBQW9CO0FBQ3BDLFVBQU0sV0FBVyxRQUFRLElBQUksQ0FBQyxNQUFNLGtCQUFrQjtBQUFBLE1BQ3BELElBQUksRUFBRTtBQUFBLE1BQ04sV0FBVyxFQUFFO0FBQUEsTUFDYixPQUFPLEVBQUU7QUFBQSxNQUNULFVBQVUsc0JBQXNCLENBQUM7QUFBQSxNQUNqQyxZQUFZLEVBQUU7QUFBQSxNQUNkLFVBQVUsYUFBYSxDQUFDO0FBQUEsTUFDeEIsU0FBUztBQUFBLElBQ1gsR0FBRztBQUFBLE1BQ0QsVUFBVTtBQUFBLE1BQ1Ysa0JBQWtCO0FBQUEsTUFDbEIsaUJBQWlCLGVBQWUsQ0FBQztBQUFBLElBQ25DLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUVYLFVBQU0sZUFBZSxRQUFRLE9BQU8sT0FBSyxFQUFFLHlCQUEwQixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixNQUFPLEVBQUU7QUFFdkgsZUFBVyxZQUFZO0FBQUEsc0RBQzZCLFFBQVEsTUFBTTtBQUFBO0FBQUEseUVBRUssUUFBUSxNQUFNLG1CQUFtQixRQUFRLFdBQVcsSUFBSSxLQUFLLEdBQUc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDREQUs3RSxRQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFPOUQsZUFBZSx5RUFBeUUsWUFBWSxRQUFRLGlCQUFpQixJQUFJLEtBQUssR0FBRyxtQ0FBbUMsRUFBRTtBQUVsTCxRQUFJLFdBQVksWUFBVyxNQUFNLFVBQVU7QUFFM0MsVUFBTSxZQUFZLFNBQVMsZUFBZSxpQkFBaUI7QUFDM0QsK0JBQTJCLFdBQVcsS0FBSztBQUMzQyxjQUFVLGlCQUFpQixvQkFBb0IsRUFBRSxRQUFRLENBQUMsT0FBTztBQUMvRCxTQUFHLGlCQUFpQixVQUFVLDRCQUE0QjtBQUFBLElBQzVELENBQUM7QUFDRCxpQ0FBNkI7QUFBQSxFQUMvQjtBQUVBLFdBQVMsK0JBQStCO0FBQ3RDLFVBQU0sVUFBVSxTQUFTLGlCQUFpQiw0QkFBNEI7QUFDdEUsVUFBTSxhQUFhLFNBQVMsZUFBZSxpQkFBaUI7QUFDNUQsVUFBTSxRQUFRLFNBQVMsZUFBZSxlQUFlO0FBQ3JELFVBQU0sU0FBUyxTQUFTLGVBQWUsb0JBQW9CO0FBQzNELFVBQU0sUUFBUSxTQUFTLGlCQUFpQixvQkFBb0IsRUFBRTtBQUM5RCxRQUFJLFlBQVk7QUFDZCxpQkFBVyxXQUFXLFFBQVEsV0FBVztBQUN6QyxpQkFBVyxNQUFNLFNBQVMsUUFBUSxXQUFXLElBQUksZ0JBQWdCO0FBQ2pFLGlCQUFXLE1BQU0sYUFBYSxRQUFRLFdBQVcsSUFBSSx3QkFBd0I7QUFBQSxJQUMvRTtBQUNBLFFBQUksTUFBTyxPQUFNLGFBQWEsY0FBYyxxQkFBcUIsS0FBSyxXQUFXLFFBQVEsTUFBTSxXQUFXO0FBQzFHLFFBQUksT0FBUSxRQUFPLGNBQWMsR0FBRyxRQUFRLE1BQU0sT0FBTyxLQUFLO0FBQUEsRUFDaEU7QUFFQSxXQUFTLCtCQUErQjtBQUN0QyxRQUFJLENBQUMsb0JBQXFCO0FBQzFCLFVBQU0sYUFBYSxJQUFJO0FBQUEsTUFDckIsb0JBQW9CLFFBQ2pCLE9BQU8sT0FBSyxFQUFFLHlCQUEwQixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixNQUFPLEVBQ3hGLElBQUksT0FBSyxFQUFFLEVBQUU7QUFBQSxJQUNsQjtBQUNBLGFBQVMsaUJBQWlCLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxPQUFPO0FBQzlELFVBQUksQ0FBQyxXQUFXLElBQUksR0FBRyxRQUFRLEtBQUssRUFBRyxJQUFHLFVBQVU7QUFBQSxJQUN0RCxDQUFDO0FBQ0QsaUNBQTZCO0FBQUEsRUFDL0I7QUFJQSxpQkFBZSw0QkFBNEI7QUFDekMsUUFBSSxDQUFDLG9CQUFxQjtBQUMxQixVQUFNLGNBQWMsTUFBTSxLQUFLLFNBQVMsaUJBQWlCLDRCQUE0QixDQUFDLEVBQUUsSUFBSSxRQUFNLEdBQUcsUUFBUSxLQUFLO0FBQ2xILFFBQUksWUFBWSxXQUFXLEVBQUc7QUFFOUIsVUFBTSxjQUFjLG9CQUFvQixXQUFXLG1CQUFtQixxQkFBcUI7QUFDM0YsVUFBTSxZQUFZLE9BQU8sT0FBTyxxQkFBcUIsYUFDakQ7QUFBQSxNQUNFLFNBQVMsWUFBWSxNQUFNLFVBQVUsWUFBWSxXQUFXLElBQUksS0FBSyxHQUFHO0FBQUEsTUFDeEUsU0FBUyxZQUFZLE1BQU0sVUFBVSxZQUFZLFdBQVcsSUFBSSxLQUFLLEdBQUcsNkJBQTZCLFdBQVc7QUFBQSxJQUVsSCxJQUNBLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxZQUFZLE1BQU0sc0ZBQXNGLENBQUM7QUFFckosUUFBSSxDQUFDLFVBQVc7QUFFaEIsVUFBTSxhQUFhLFNBQVMsZUFBZSxpQkFBaUI7QUFDNUQsVUFBTSxXQUFXLFNBQVMsZUFBZSxZQUFZO0FBQ3JELFFBQUksWUFBWTtBQUFFLGlCQUFXLFdBQVc7QUFBTSxpQkFBVyxjQUFjO0FBQUEsSUFBWTtBQUVuRixRQUFJO0FBQ0YsWUFBTSxPQUFPLE1BQU0sTUFBTSxtQ0FBbUM7QUFBQSxRQUMxRCxRQUFRO0FBQUEsUUFDUixTQUFTLEVBQUUsZ0JBQWdCLG1CQUFtQjtBQUFBLFFBQzlDLE1BQU0sS0FBSyxVQUFVLEVBQUUsYUFBYSxvQkFBb0IsWUFBWSxjQUFjLFlBQVksQ0FBQztBQUFBLE1BQ2pHLENBQUM7QUFDRCxZQUFNLE9BQU8sTUFBTSxLQUFLLEtBQUs7QUFFN0IsVUFBSSxLQUFLLE9BQU8sU0FBUyxLQUFLLGVBQWU7QUFDM0MsK0JBQXVCLEtBQUssZUFBZSxLQUFLLGtCQUFrQjtBQUNsRTtBQUFBLE1BQ0Y7QUFDQSxVQUFJLENBQUMsS0FBSyxJQUFJO0FBQ1osWUFBSSxTQUFVLFVBQVMsWUFBWSw0Q0FBNEMsSUFBSSxLQUFLLFNBQVMsZUFBZSxDQUFDO0FBQ2pIO0FBQUEsTUFDRjtBQUVBLFlBQU0sY0FBYyxPQUFPLFlBQVksb0JBQW9CLFFBQVEsSUFBSSxPQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLFlBQU0sZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsR0FDekMsT0FBTyxPQUFLLEVBQUUsT0FBTyxFQUNyQixJQUFJLE9BQUssT0FBTyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxFQUFFLEdBQUcsWUFBWSxXQUFNLElBQUksWUFBWSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFDMUgsS0FBSyxFQUFFO0FBRVYsWUFBTSxhQUFhLEtBQUssY0FBYyxZQUFZLElBQUksS0FBSyxXQUFXLENBQUMsTUFBTTtBQUM3RSxZQUFNLGFBQWEsS0FBSyxZQUNwQiwyRkFBaUYsSUFBSSxLQUFLLFdBQVcsV0FBVyxLQUFLLFNBQVMsQ0FBQyxTQUMvSDtBQUNKLFlBQU0sY0FBYyxLQUFLLGFBQ3JCLHlGQUErRSxJQUFJLEtBQUssVUFBVSxDQUFDLFNBQ25HO0FBRUosVUFBSSxVQUFVO0FBQ1osaUJBQVMsWUFBWTtBQUFBO0FBQUE7QUFBQSxxQkFHWCxLQUFLLGFBQWEsUUFBUSxLQUFLLGtCQUFrQixJQUFJLEtBQUssR0FBRyx3QkFBd0IsVUFBVTtBQUFBO0FBQUEsWUFFbkcsZUFBZSw2RkFBNkYsWUFBWSxVQUFVLEVBQUU7QUFBQSxZQUNwSSxVQUFVLEdBQUcsV0FBVztBQUFBO0FBQUEsTUFFaEM7QUFFQSxlQUFTLGVBQWUsaUJBQWlCLEVBQUUsWUFBWTtBQUN2RCxlQUFTLGVBQWUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVO0FBQzNELDRCQUFzQjtBQUN0QixnQ0FBMEIsQ0FBQztBQUFBLElBQzdCLFNBQVMsS0FBSztBQUNaLE1BQUFBLE1BQUksTUFBTSxxQ0FBcUMsR0FBRztBQUNsRCxVQUFJLFNBQVUsVUFBUyxZQUFZLDJDQUEyQyxJQUFJLElBQUksT0FBTyxDQUFDO0FBQUEsSUFDaEcsVUFBRTtBQUNBLFVBQUksWUFBWTtBQUFFLG1CQUFXLFdBQVc7QUFBTyxtQkFBVyxjQUFjO0FBQUEsTUFBcUI7QUFBQSxJQUMvRjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLHVCQUF1QixjQUFjLG1CQUFtQjtBQUMvRCxVQUFNLFdBQVcsU0FBUyxlQUFlLFlBQVk7QUFDckQsVUFBTSxXQUFXLElBQUksSUFBSSxhQUFhLElBQUksT0FBSyxFQUFFLEVBQUUsQ0FBQztBQUVwRCxhQUFTLGlCQUFpQixvQkFBb0IsRUFBRSxRQUFRLENBQUMsT0FBTztBQUM5RCxVQUFJLFNBQVMsSUFBSSxHQUFHLFFBQVEsS0FBSyxHQUFHO0FBQ2xDLFdBQUcsVUFBVTtBQUNiLFdBQUcsV0FBVztBQUNkLGNBQU0sTUFBTSxTQUFTLGVBQWUsV0FBVyxHQUFHLFFBQVEsS0FBSyxFQUFFO0FBQ2pFLFlBQUksSUFBSyxLQUFJLE1BQU0sVUFBVTtBQUFBLE1BQy9CO0FBQUEsSUFDRixDQUFDO0FBQ0QsaUNBQTZCO0FBRTdCLFVBQU0sU0FBUyxTQUFTLGVBQWUsb0JBQW9CO0FBQzNELFVBQU0sVUFBVSxHQUFHLGFBQWEsTUFBTSxRQUFRLGFBQWEsV0FBVyxJQUFJLFFBQVEsT0FBTyx3QkFBd0IsYUFBYSxXQUFXLElBQUksUUFBUSxNQUFNO0FBQzNKLFFBQUksT0FBUSxRQUFPLGNBQWM7QUFFakMsVUFBTSxZQUFZLGFBQWEsSUFBSSxPQUFLLE9BQU8sSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsV0FBTSxJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDdEcsUUFBSSxVQUFVO0FBQ1osZUFBUyxZQUFZO0FBQUE7QUFBQSwyR0FFNkUsT0FBTztBQUFBLG9HQUNULFNBQVM7QUFBQSxxRkFDeEIsa0JBQWtCLE1BQU0sUUFBUSxrQkFBa0IsV0FBVyxJQUFJLEtBQUssR0FBRyxJQUFJLGtCQUFrQixXQUFXLElBQUksT0FBTyxLQUFLO0FBQUE7QUFBQSxJQUU3TTtBQUFBLEVBQ0Y7OztBQ2xqQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNkJBQUFLO0FBQUEsSUFBQSx5QkFBQUM7QUFBQSxJQUFBLDRCQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdDQUFBQztBQUFBLElBQUE7QUFBQTtBQW1CQSxNQUFJLHNCQUFzQjtBQUkxQixNQUFJLDJCQUEyQjtBQVUvQixNQUFJLHNCQUFzQjtBQUMxQixNQUFJLDZCQUE2QjtBQUVqQyxXQUFTLHVCQUF1QixTQUFTLFFBQVE7QUFDL0MsVUFBTSxlQUFlLE9BQU8sV0FBVyxXQUFXLEVBQUUsS0FBSztBQUN6RCxVQUFNLGNBQWMsT0FBTyxVQUFVLFNBQVMsRUFBRSxLQUFLO0FBQ3JELDBCQUFzQixHQUFHLFlBQVksSUFBSSxXQUFXO0FBQUEsRUFDdEQ7QUFFQSxXQUFTLDRCQUE0QjtBQUNuQyxRQUFJLENBQUMsb0JBQXFCLFFBQU87QUFDakMsV0FBTztBQUFBO0FBQUEsNENBRW1DLFdBQVcsbUJBQW1CLENBQUM7QUFBQTtBQUFBO0FBQUEsRUFHM0U7QUFFQSxpQkFBZUYsbUJBQWtCLFlBQVksTUFBTTtBQUNqRCxRQUFJLGNBQWMsS0FBTSw0QkFBMkI7QUFDbkQsUUFBSSw0QkFBNEI7QUFDOUIsbUNBQTZCO0FBQUEsSUFDL0IsT0FBTztBQUNMLDRCQUFzQjtBQUFBLElBQ3hCO0FBQ0EsVUFBTSxVQUFVLDRCQUE0QixTQUFTLGVBQWUsa0JBQWtCO0FBQ3RGLFlBQVEsWUFBWTtBQUVwQixRQUFJLFdBQVcsQ0FBQztBQUNoQixRQUFJLFdBQVksQ0FBQztBQUVqQixRQUFJO0FBQ0YsWUFBTSxDQUFDLE9BQU8sS0FBSyxJQUFJLE1BQU0sUUFBUSxJQUFJO0FBQUEsUUFDdkMsTUFBTSwyQkFBMkI7QUFBQSxRQUNqQyxNQUFNLHVCQUF1QjtBQUFBLE1BQy9CLENBQUM7QUFDRCxpQkFBWSxNQUFNLE1BQU0sS0FBSyxLQUFNLENBQUM7QUFDcEMsaUJBQWEsTUFBTSxNQUFNLEtBQUssS0FBTSxDQUFDO0FBQUEsSUFDdkMsU0FBUyxLQUFLO0FBQ1osY0FBUSxZQUFZO0FBQ3BCO0FBQUEsSUFDRjtBQUVBLFVBQU0sZUFBZSxTQUFTLGlCQUFpQixDQUFDO0FBQ2hELFVBQU0sY0FBa0IsU0FBUyxjQUFjLENBQUM7QUFDaEQsV0FBTywyQkFBMkIsWUFDL0IsSUFBSSxDQUFDLFNBQVM7QUFBQSxNQUNiLElBQUksSUFBSSxNQUFNO0FBQUEsTUFDZCxPQUFPLEdBQUcsSUFBSSxTQUFTLE1BQU0sTUFBTSxJQUFJLFdBQVcsU0FBUztBQUFBLElBQzdELEVBQUUsRUFDRCxPQUFPLENBQUNHLE9BQU1BLEdBQUUsRUFBRTtBQUlyQixXQUFPLDRCQUE0QjtBQUNuQyxVQUFNLFNBQWtCLFNBQVMsVUFBVSxDQUFDO0FBQzVDLFVBQU0sWUFBa0IsU0FBUyxhQUFhLENBQUM7QUFDL0MsVUFBTSxTQUFrQixTQUFTLFVBQVUsQ0FBQztBQUM1QyxVQUFNLGlCQUFrQixTQUFTLGtCQUFrQixDQUFDO0FBQ3BELFVBQU0sZUFBa0IsU0FBUyx5QkFBeUIsQ0FBQztBQUMzRCxVQUFNLFlBQWtCLFNBQVMsMEJBQTBCLENBQUM7QUFFNUQsVUFBTSxlQUFnQixPQUFPLGlCQUFpQixlQUFlLGFBQWEsV0FDdEUsYUFBYSxTQUFTLElBQ3RCO0FBQ0osVUFBTSxrQkFBa0Isb0JBQUksSUFBSSxDQUFDLFFBQVEsY0FBYyxNQUFNLFFBQVcsRUFBRSxDQUFDO0FBQzNFLFVBQU0sYUFBYSxnQkFBZ0IsSUFBSSxZQUFZO0FBRW5ELFVBQU0sa0JBQWtCLGFBQWEsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSx1REFNVyxXQUFXLGdCQUFnQixTQUFTLENBQUM7QUFBQTtBQUFBO0FBSTFGLFlBQVEsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxrR0FTNEUsQ0FBQyxzQkFBc0IsY0FBYyxFQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG9JQVlMLGFBQWEsS0FBSyxXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BWTNKLGVBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQWFmLGFBQWEsOEJBQThCLElBQUkscUNBQXFDLENBQUM7QUFBQTtBQUFBLE1BRXJGLDBCQUEwQixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEseUNBSVEsV0FBVyxTQUFTLFFBQVEsY0FBYyxDQUFDO0FBQUEsUUFDNUUsU0FBUyxXQUFXLHdDQUF3QyxXQUFXLFNBQVMsUUFBUSxDQUFDLFdBQVcsRUFBRTtBQUFBLFFBQ3RHLFNBQVMsUUFBVyxrREFBd0MsV0FBVyxTQUFTLEtBQUssQ0FBQyxXQUFXLEVBQUU7QUFBQTtBQUFBLG1FQUV4QyxTQUFTLG9CQUFvQixRQUFHO0FBQUEsbUVBQ2hDLFNBQVMsZUFBZSxRQUFHO0FBQUEsbUVBQzNCLFNBQVMscUJBQXFCLFFBQUc7QUFBQSxtRUFDakMsU0FBUyxpQkFBaUIsUUFBRztBQUFBLG1FQUM3QixTQUFTLG1CQUFtQixRQUFHO0FBQUEsbUVBQy9CLFNBQVMscUJBQXFCLFFBQUc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQWExRix3QkFBd0IsWUFBWSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFhckMsdUJBQXVCLFdBQVcsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFRbkMsTUFBTSxRQUFRLE1BQU0sSUFBSSxxSEFBcUgsRUFBRTtBQUFBO0FBQUE7QUFBQSxVQUcvSSxxQkFBcUIsTUFBTSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFhNUIscUJBQXFCLFNBQVMsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQThFL0Isa0JBQWtCLE1BQU0sQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBYXpCLDBCQUEwQixjQUFjLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBaUJ6QywrQkFBK0IsWUFBWSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBa0I1QyxxQkFBcUIsU0FBUyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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LFNBQU87QUFBQSxJQUFPO0FBQUEsSUFDWjtBQUFBLElBQVE7QUFBQSxJQUFPO0FBQUEsSUFBVztBQUFBLElBQU87QUFBQSxJQUFjO0FBQUEsSUFBUTtBQUFBLElBQ3ZEO0FBQUEsSUFBWTtBQUFBLElBQXVCO0FBQUEsSUFBVztBQUFBLElBQzlDO0FBQUEsSUFBWTtBQUFBLElBQWM7QUFBQSxJQUMxQjtBQUFBLElBQWM7QUFBQSxJQUFlO0FBQUEsSUFBVztBQUFBLElBQWdCO0FBQUEsSUFDeEQ7QUFBQSxJQUNBO0FBQUEsSUFBZ0I7QUFBQSxJQUFVO0FBQUEsSUFBaUI7QUFBQSxJQUMzQztBQUFBLElBQ0E7QUFBQSxJQUFrQjtBQUFBLElBQWM7QUFBQSxJQUFvQjtBQUFBLElBQWU7QUFBQSxJQUFlO0FBQUEsSUFBb0I7QUFBQSxJQUN0RztBQUFBLElBQWU7QUFBQSxJQUFZO0FBQUEsSUFBYTtBQUFBLElBQWU7QUFBQSxJQUFlO0FBQUEsSUFBb0I7QUFBQSxJQUMxRjtBQUFBLElBQWE7QUFBQSxJQUFvQjtBQUFBLElBQVU7QUFBQSxJQUFlO0FBQUEsSUFBVTtBQUFBLElBQ3BFO0FBQUEsSUFBbUI7QUFBQSxJQUNuQjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGlCQUFpQixvQkFBd0IsSUFBSTsiLAogICJuYW1lcyI6IFsiZ2V0TG9nZ2VyIiwgImxvZ2dlciIsICJsb2dsZXZlbCIsICJjbGVhbkpzb25SZXNwb25zZSIsICJlc2NhcGVIdG1sIiwgImV4dHJhY3RGaXJzdEpzb25PYmplY3QiLCAiZXh0cmFjdFRpdGxlQW5kQ29tcGFueUZyb21Kb2JUZXh0IiwgImZvcm1hdFNlc3Npb25QaGFzZUxhYmVsIiwgIm5vcm1hbGl6ZVBvc2l0aW9uTGFiZWwiLCAibm9ybWFsaXplVGV4dCIsICJ0ZXh0IiwgIm0iLCAiaHRtbCIsICJ2IiwgIlN0b3JhZ2VLZXlzIiwgImFwaUNhbGwiLCAiY3JlYXRlU2Vzc2lvbiIsICJmZXRjaFN0YXR1cyIsICJnZXRPd25lclRva2VuIiwgImdldFNjb3BlZFRhYkRhdGFTdG9yYWdlS2V5IiwgImdldFNlc3Npb25JZEZyb21VUkwiLCAiX3VwZGF0ZUxMTVN0YXR1c0JhciIsICJsbG1GZXRjaCIsICJzZXRMb2FkaW5nIiwgIl8iLCAiaW5pdCIsICJjaGF0QXJlYSIsICJTdG9yYWdlS2V5cyIsICJnZXRTZXNzaW9uSWRGcm9tVVJMIiwgImdldE93bmVyVG9rZW4iLCAiZ2V0U2NvcGVkVGFiRGF0YVN0b3JhZ2VLZXkiLCAic2Vzc2lvbklkIiwgImluaXQiLCAiXyIsICJhcGlDYWxsIiwgImNyZWF0ZVNlc3Npb24iLCAiZmV0Y2hTdGF0dXMiLCAiUEhBU0VTIiwgInN0YXRlTWFuYWdlciIsICJsb2ciLCAiUEhBU0VTIiwgInN0YXRlTWFuYWdlciIsICJTdG9yYWdlS2V5cyIsICJnZXRQcm92aWRlckluZm8iLCAibG9hZFByb3ZpZGVySW5mbyIsICJwcm92aWRlckluZm9Qb3BvdmVyQ29udGVudCIsICJsb2FkUHJvdmlkZXJJbmZvIiwgImdldFByb3ZpZGVySW5mbyIsICJwcm92aWRlckluZm9Qb3BvdmVyQ29udGVudCIsICJlc2NhcGVIdG1sIiwgIl91cGRhdGVMbG1TdGF0dXNQaWxsIiwgImNsb3NlTW9kZWxNb2RhbCIsICJjb25maXJtRGlhbG9nIiwgImdldFN0YWdlRm9yVGFiIiwgInB1c2hGb2N1c1N0YWNrIiwgInJlc3RvcmVGb2N1cyIsICJzZXRJbml0aWFsRm9jdXMiLCAidHJhcEZvY3VzIiwgInVwZGF0ZVRhYkJhckZvclN0YWdlIiwgImxvZyIsICJmZXRjaFN0YXR1cyIsICJhcGlDYWxsIiwgIl8iLCAic2V0SW5pdGlhbEZvY3VzIiwgInRyYXBGb2N1cyIsICJyZXN0b3JlRm9jdXMiLCAicHVzaEZvY3VzU3RhY2siLCAiY29uZmlybURpYWxvZyIsICJnZXRTdGFnZUZvclRhYiIsICJzdGF0ZU1hbmFnZXIiLCAidXBkYXRlVGFiQmFyRm9yU3RhZ2UiLCAiU3RvcmFnZUtleXMiLCAiX3VwZGF0ZUxsbVN0YXR1c1BpbGwiLCAidGV4dCIsICJiIiwgImVzY2FwZUh0bWwiLCAiY2xvc2VNb2RlbE1vZGFsIiwgInYiLCAibSIsICJldmVudCIsICJ1cGRhdGVXb3JrZmxvd1N0ZXBzQ2xpY2thYmxlIiwgImhhbmRsZUxheW91dFByaW1hcnlBY3Rpb24iLCAiaW5pdGlhdGVMYXlvdXRJbnN0cnVjdGlvbnMiLCAicmVmcmVzaEF0c1Njb3JlIiwgInNjaGVkdWxlQXRzUmVmcmVzaCIsICJ1cGRhdGVBdHNCYWRnZSIsICJ0ZXh0IiwgImdlbmVyYXRpb25TdGF0ZSIsICJzZXNzaW9uSWQiLCAiX2UiLCAiX2ZsdXNoTWVzc2FnZVF1ZXVlIiwgImFwcGVuZEZvcm1hdHRlZEFuYWx5c2lzIiwgImFwcGVuZExvYWRpbmdNZXNzYWdlIiwgImFwcGVuZE1lc3NhZ2UiLCAiYXBwZW5kUmF3SHRtbCIsICJhcHBlbmRSZXRyeU1lc3NhZ2UiLCAicmVtb3ZlTG9hZGluZ01lc3NhZ2UiLCAibG9nIiwgIl9mbHVzaE1lc3NhZ2VRdWV1ZSIsICJ0ZXh0IiwgImFwcGVuZE1lc3NhZ2UiLCAiYXBwZW5kTG9hZGluZ01lc3NhZ2UiLCAicmVtb3ZlTG9hZGluZ01lc3NhZ2UiLCAiaHRtbCIsICJlc2NhcGVIdG1sIiwgImFwcGVuZFJldHJ5TWVzc2FnZSIsICJhcHBlbmRGb3JtYXR0ZWRBbmFseXNpcyIsICJjbGVhbkpzb25SZXNwb25zZSIsICJhcHBlbmRSYXdIdG1sIiwgIl91cGRhdGVQYWdlRXN0aW1hdGUiLCAiaGFuZGxlQWN0aW9uQ2xpY2siLCAiaGFuZGxlQ3VzdG9taXphdGlvblJlc3BvbnNlIiwgInNob3dUYWJsZUJhc2VkUmV2aWV3IiwgInN3aXRjaFRhYiIsICJ1cGRhdGVJbmNsdXNpb25Db3VudHMiLCAidXNlclNlbGVjdGlvbnMiLCAibG9nIiwgInVzZXJTZWxlY3Rpb25zIiwgInN0YXRlTWFuYWdlciIsICJ1cGRhdGVJbmNsdXNpb25Db3VudHMiLCAidiIsICJzd2l0Y2hUYWIiLCAidGFiRGF0YSIsICJzaG93VGFibGVCYXNlZFJldmlldyIsICJzZXNzaW9uSWQiLCAiXyIsICJodG1sIiwgImhhbmRsZUN1c3RvbWl6YXRpb25SZXNwb25zZSIsICJzdGF0ZU1hbmFnZXIiLCAiX3VwZGF0ZVBhZ2VFc3RpbWF0ZSIsICJ1c2VyU2VsZWN0aW9ucyIsICJoYW5kbGVBY3Rpb25DbGljayIsICJfdXBkYXRlVmlld2luZ0luZGljYXRvciIsICJjb25maXJtUmVSdW5QaGFzZSIsICJzaG93QnVsbGV0UmVvcmRlciIsICJsb2ciLCAic3RhdGVNYW5hZ2VyIiwgImdlbmVyYXRpb25TdGF0ZSIsICJjb25maXJtUmVSdW5QaGFzZSIsICJfdXBkYXRlVmlld2luZ0luZGljYXRvciIsICJxIiwgImNsb3NlTW9kYWwiLCAiX2UiLCAic2hvd0J1bGxldFJlb3JkZXIiLCAiXyIsICJ0ZXh0IiwgImxvZyIsICJzdGF0ZU1hbmFnZXIiLCAiaHRtbCIsICJzZXNzaW9uSWQiLCAiZXNjYXBlSHRtbCIsICJ0ZXh0IiwgImdlbmVyYXRpb25TdGF0ZSIsICJpbml0aWF0ZUxheW91dEluc3RydWN0aW9ucyIsICJfIiwgImFwcGVuZE1lc3NhZ2UiLCAiY29uZmlybVJlUnVuUGhhc2UiLCAiYXBpQ2FsbCIsICJ3IiwgIl9lIiwgInNjaGVkdWxlQXRzUmVmcmVzaCIsICJzd2l0Y2hUYWIiLCAiaGFuZGxlTGF5b3V0UHJpbWFyeUFjdGlvbiIsICJwYXJzZU1lc3NhZ2VSZXNwb25zZSIsICJwYXJzZVJld3JpdGVzUmVzcG9uc2UiLCAicGFyc2VTZXNzaW9uTGlzdFJlc3BvbnNlIiwgInBhcnNlU3RhdHVzUmVzcG9uc2UiLCAibG9nIiwgInBhcnNlU3RhdHVzUmVzcG9uc2UiLCAiayIsICJwYXJzZVNlc3Npb25MaXN0UmVzcG9uc2UiLCAicGFyc2VSZXdyaXRlc1Jlc3BvbnNlIiwgInBhcnNlTWVzc2FnZVJlc3BvbnNlIiwgImJ1aWxkRmFsbGJhY2tQb3N0QW5hbHlzaXNRdWVzdGlvbnMiLCAiZ2V0QWNoaWV2ZW1lbnRDb25maWRlbmNlIiwgImdldEFjaGlldmVtZW50UmVhc29uaW5nIiwgImdldEFjaGlldmVtZW50UmVjb21tZW5kYXRpb24iLCAiZ2V0Q29uZmlkZW5jZUxldmVsIiwgImdldEV4cGVyaWVuY2VSZWFzb25pbmciLCAiZ2V0RXhwZXJpZW5jZVJlY29tbWVuZGF0aW9uIiwgImdldFNraWxsQ29uZmlkZW5jZSIsICJnZXRTa2lsbFJlYXNvbmluZyIsICJnZXRTa2lsbFJlY29tbWVuZGF0aW9uIiwgImxvZyIsICJnZXRFeHBlcmllbmNlUmVjb21tZW5kYXRpb24iLCAiZ2V0Q29uZmlkZW5jZUxldmVsIiwgImdldEV4cGVyaWVuY2VSZWFzb25pbmciLCAiZ2V0U2tpbGxSZWNvbW1lbmRhdGlvbiIsICJnZXRTa2lsbENvbmZpZGVuY2UiLCAiZ2V0U2tpbGxSZWFzb25pbmciLCAiZ2V0QWNoaWV2ZW1lbnRSZWNvbW1lbmRhdGlvbiIsICJnZXRBY2hpZXZlbWVudENvbmZpZGVuY2UiLCAiZ2V0QWNoaWV2ZW1lbnRSZWFzb25pbmciLCAiYnVpbGRGYWxsYmFja1Bvc3RBbmFseXNpc1F1ZXN0aW9ucyIsICJjbG9zZUFsZXJ0TW9kYWwiLCAic2hvd0FsZXJ0TW9kYWwiLCAic2hvd0NvbmZpcm1Nb2RhbCIsICJzaG93VG9hc3QiLCAidXBkYXRlQWN0aW9uQnV0dG9ucyIsICJzaG93QWxlcnRNb2RhbCIsICJjbG9zZUFsZXJ0TW9kYWwiLCAic2hvd0NvbmZpcm1Nb2RhbCIsICJzaG93VG9hc3QiLCAic3RhdGVNYW5hZ2VyIiwgImdlbmVyYXRpb25TdGF0ZSIsICJ1cGRhdGVBY3Rpb25CdXR0b25zIiwgImV2ZW50IiwgImZldGNoQW5kRGlzcGxheUxsbUxvZyIsICJsb2ciLCAidGV4dCIsICJlc2NhcGVIdG1sIiwgIm0iLCAiaHRtbCIsICJmZXRjaEFuZERpc3BsYXlMbG1Mb2ciLCAic2Vzc2lvbklkIiwgImdldFNlc3Npb25JZEZyb21VUkwiLCAidXBkYXRlQXV0aEJhZGdlIiwgInVwZGF0ZUF1dGhCYWRnZSIsICJ0ZXh0IiwgImdldFByb3ZpZGVySW5mbyIsICJwb3B1bGF0ZUF0c1Njb3JlVGFiIiwgInNlc3Npb25JZCIsICJzdGF0ZU1hbmFnZXIiLCAiXyIsICJlc2NhcGVIdG1sIiwgInB1c2hGb2N1c1N0YWNrIiwgInRyYXBGb2N1cyIsICJ1cGRhdGVBdHNCYWRnZSIsICJyZXN0b3JlRm9jdXMiLCAiayIsICJwb3B1bGF0ZUF0c1Njb3JlVGFiIiwgIl9BQ1RJT05fTEFCRUxTIiwgInNlbmRBY3Rpb24iLCAidXBkYXRlUG9zaXRpb25UaXRsZSIsICJsb2ciLCAiX0FDVElPTl9MQUJFTFMiLCAic2VuZEFjdGlvbiIsICJzdGF0ZU1hbmFnZXIiLCAiX2UiLCAiU3RvcmFnZUtleXMiLCAidGV4dCIsICJ1cGRhdGVQb3NpdGlvblRpdGxlIiwgImFuYWx5emVKb2IiLCAibWVyZ2VQb3N0QW5hbHlzaXNRdWVzdGlvbnMiLCAibm9ybWFsaXplUG9zdEFuYWx5c2lzUXVlc3Rpb25zIiwgImxvZyIsICJub3JtYWxpemVQb3N0QW5hbHlzaXNRdWVzdGlvbnMiLCAicSIsICJ0ZXh0IiwgIm1lcmdlUG9zdEFuYWx5c2lzUXVlc3Rpb25zIiwgImFuYWx5emVKb2IiLCAic3RhdGVNYW5hZ2VyIiwgIlN0b3JhZ2VLZXlzIiwgIl9lIiwgInBvcHVsYXRlR29hbHNUYWIiLCAibG9nIiwgInBvcHVsYXRlR29hbHNUYWIiLCAiX2dldEN1cnJlbnRTZXNzaW9uSWRWYWx1ZSIsICJidWlsZFNlc3Npb25Td2l0Y2hlckxhYmVsIiwgImNyZWF0ZU5ld1Nlc3Npb25BbmROYXZpZ2F0ZSIsICJlbnN1cmVTZXNzaW9uQ29udGV4dCIsICJmb3JtYXRTZXNzaW9uUGhhc2VMYWJlbCIsICJmb3JtYXRTZXNzaW9uVGltZXN0YW1wIiwgImdldEFjdGl2ZVNlc3Npb25Pd25lcnNoaXBNZXRhIiwgImxvYWRTZXNzaW9uRmlsZSIsICJtYXliZVNob3dXZWxjb21lTW9kYWwiLCAicmVzdG9yZVNlc3Npb24iLCAic2F2ZVRhYkRhdGEiLCAibG9nIiwgImZvcm1hdFNlc3Npb25QaGFzZUxhYmVsIiwgIl9nZXRDdXJyZW50U2Vzc2lvbklkVmFsdWUiLCAiXyIsICJidWlsZFNlc3Npb25Td2l0Y2hlckxhYmVsIiwgImdldEFjdGl2ZVNlc3Npb25Pd25lcnNoaXBNZXRhIiwgImZvcm1hdFNlc3Npb25UaW1lc3RhbXAiLCAibWF5YmVTaG93V2VsY29tZU1vZGFsIiwgImNyZWF0ZU5ld1Nlc3Npb25BbmROYXZpZ2F0ZSIsICJzdGF0ZU1hbmFnZXIiLCAiUEhBU0VTIiwgImVuc3VyZVNlc3Npb25Db250ZXh0IiwgInJlc3RvcmVTZXNzaW9uIiwgImsiLCAidiIsICJfZSIsICJsb2FkU2Vzc2lvbkZpbGUiLCAic2F2ZVRhYkRhdGEiLCAicG9wdWxhdGVKb2JUYWIiLCAic2hvd0xvYWRKb2JQYW5lbCIsICJfZ2V0RGVmYXVsdHMiLCAiX2RlZmF1bHRzIiwgImNoYW5nZURlZmF1bHRzIiwgIm5ld0RlZmF1bHRzIiwgIm5vb3BUZXN0IiwgImVkaXQiLCAicmVnZXgiLCAib3B0IiwgInNvdXJjZSIsICJvYmoiLCAibmFtZSIsICJ2YWwiLCAidmFsU291cmNlIiwgIm90aGVyIiwgInN1cHBvcnRzTG9va2JlaGluZCIsICJidWxsIiwgImluZGVudCIsICJuZXdsaW5lIiwgImJsb2NrQ29kZSIsICJmZW5jZXMiLCAiaHIiLCAiaGVhZGluZyIsICJidWxsZXQiLCAibGhlYWRpbmdDb3JlIiwgImxoZWFkaW5nIiwgImxoZWFkaW5nR2ZtIiwgIl9wYXJhZ3JhcGgiLCAiYmxvY2tUZXh0IiwgIl9ibG9ja0xhYmVsIiwgImRlZiIsICJsaXN0IiwgIl90YWciLCAiX2NvbW1lbnQiLCAiaHRtbCIsICJwYXJhZ3JhcGgiLCAiYmxvY2txdW90ZSIsICJibG9ja05vcm1hbCIsICJnZm1UYWJsZSIsICJibG9ja0dmbSIsICJibG9ja1BlZGFudGljIiwgImVzY2FwZSIsICJpbmxpbmVDb2RlIiwgImJyIiwgImlubGluZVRleHQiLCAiX3B1bmN0dWF0aW9uIiwgIl9wdW5jdHVhdGlvbk9yU3BhY2UiLCAiX25vdFB1bmN0dWF0aW9uT3JTcGFjZSIsICJwdW5jdHVhdGlvbiIsICJfcHVuY3R1YXRpb25HZm1TdHJvbmdFbSIsICJfcHVuY3R1YXRpb25PclNwYWNlR2ZtU3Ryb25nRW0iLCAiX25vdFB1bmN0dWF0aW9uT3JTcGFjZUdmbVN0cm9uZ0VtIiwgImJsb2NrU2tpcCIsICJlbVN0cm9uZ0xEZWxpbUNvcmUiLCAiZW1TdHJvbmdMRGVsaW0iLCAiZW1TdHJvbmdMRGVsaW1HZm0iLCAiZW1TdHJvbmdSRGVsaW1Bc3RDb3JlIiwgImVtU3Ryb25nUkRlbGltQXN0IiwgImVtU3Ryb25nUkRlbGltQXN0R2ZtIiwgImVtU3Ryb25nUkRlbGltVW5kIiwgImRlbExEZWxpbSIsICJkZWxSRGVsaW1Db3JlIiwgImRlbFJEZWxpbSIsICJhbnlQdW5jdHVhdGlvbiIsICJhdXRvbGluayIsICJfaW5saW5lQ29tbWVudCIsICJ0YWciLCAiX2lubGluZUxhYmVsIiwgImxpbmsiLCAicmVmbGluayIsICJub2xpbmsiLCAicmVmbGlua1NlYXJjaCIsICJfY2FzZUluc2Vuc2l0aXZlUHJvdG9jb2wiLCAiaW5saW5lTm9ybWFsIiwgImlubGluZVBlZGFudGljIiwgImlubGluZUdmbSIsICJpbmxpbmVCcmVha3MiLCAiYmxvY2siLCAiaW5saW5lIiwgImVzY2FwZVJlcGxhY2VtZW50cyIsICJnZXRFc2NhcGVSZXBsYWNlbWVudCIsICJjaCIsICJlc2NhcGVIdG1sRW50aXRpZXMiLCAiZW5jb2RlIiwgImNsZWFuVXJsIiwgImhyZWYiLCAic3BsaXRDZWxscyIsICJ0YWJsZVJvdyIsICJjb3VudCIsICJyb3ciLCAibWF0Y2giLCAib2Zmc2V0IiwgInN0ciIsICJlc2NhcGVkIiwgImN1cnIiLCAiY2VsbHMiLCAiaSIsICJydHJpbSIsICJjIiwgImludmVydCIsICJsIiwgInN1ZmZMZW4iLCAiY3VyckNoYXIiLCAiZmluZENsb3NpbmdCcmFja2V0IiwgImIiLCAibGV2ZWwiLCAiZXhwYW5kVGFicyIsICJsaW5lIiwgImNvbCIsICJleHBhbmRlZCIsICJjaGFyIiwgImFkZGVkIiwgIm91dHB1dExpbmsiLCAiY2FwIiwgInJhdyIsICJsZXhlciIsICJydWxlcyIsICJ0aXRsZSIsICJ0ZXh0IiwgInRva2VuIiwgImluZGVudENvZGVDb21wZW5zYXRpb24iLCAibWF0Y2hJbmRlbnRUb0NvZGUiLCAiaW5kZW50VG9Db2RlIiwgIm5vZGUiLCAibWF0Y2hJbmRlbnRJbk5vZGUiLCAiaW5kZW50SW5Ob2RlIiwgIl9Ub2tlbml6ZXIiLCAib3B0aW9ucyIsICJzcmMiLCAidHJpbW1lZCIsICJsaW5lcyIsICJ0b2tlbnMiLCAiaW5CbG9ja3F1b3RlIiwgImN1cnJlbnRMaW5lcyIsICJjdXJyZW50UmF3IiwgImN1cnJlbnRUZXh0IiwgInRvcCIsICJsYXN0VG9rZW4iLCAib2xkVG9rZW4iLCAibmV3VGV4dCIsICJuZXdUb2tlbiIsICJpc29yZGVyZWQiLCAiaXRlbVJlZ2V4IiwgImVuZHNXaXRoQmxhbmtMaW5lIiwgImVuZEVhcmx5IiwgIml0ZW1Db250ZW50cyIsICJuZXh0TGluZSIsICJibGFua0xpbmUiLCAibmV4dEJ1bGxldFJlZ2V4IiwgImhyUmVnZXgiLCAiZmVuY2VzQmVnaW5SZWdleCIsICJoZWFkaW5nQmVnaW5SZWdleCIsICJodG1sQmVnaW5SZWdleCIsICJibG9ja3F1b3RlQmVnaW5SZWdleCIsICJyYXdMaW5lIiwgIm5leHRMaW5lV2l0aG91dFRhYnMiLCAibGFzdEl0ZW0iLCAiaXRlbSIsICJ0YXNrUmF3IiwgImNoZWNrYm94VG9rZW4iLCAic3BhY2VycyIsICJ0IiwgImhhc011bHRpcGxlTGluZUJyZWFrcyIsICJoZWFkZXJzIiwgImFsaWducyIsICJyb3dzIiwgImFsaWduIiwgImNlbGwiLCAidHJpbW1lZFVybCIsICJydHJpbVNsYXNoIiwgImxhc3RQYXJlbkluZGV4IiwgImxpbmtMZW4iLCAibGlua3MiLCAibGlua1N0cmluZyIsICJtYXNrZWRTcmMiLCAicHJldkNoYXIiLCAibExlbmd0aCIsICJyRGVsaW0iLCAickxlbmd0aCIsICJkZWxpbVRvdGFsIiwgIm1pZERlbGltVG90YWwiLCAiZW5kUmVnIiwgImxhc3RDaGFyTGVuZ3RoIiwgImhhc05vblNwYWNlQ2hhcnMiLCAiaGFzU3BhY2VDaGFyc09uQm90aEVuZHMiLCAicHJldkNhcFplcm8iLCAiX0xleGVyIiwgIl9fTGV4ZXIiLCAibmV4dCIsICJsYXN0UGFyYWdyYXBoQ2xpcHBlZCIsICJleHRUb2tlbml6ZXIiLCAiY3V0U3JjIiwgInN0YXJ0SW5kZXgiLCAidGVtcFNyYyIsICJ0ZW1wU3RhcnQiLCAiZ2V0U3RhcnRJbmRleCIsICJlcnJNc2ciLCAia2VlcFByZXZDaGFyIiwgIl9SZW5kZXJlciIsICJsYW5nIiwgImxhbmdTdHJpbmciLCAiY29kZSIsICJkZXB0aCIsICJvcmRlcmVkIiwgInN0YXJ0IiwgImJvZHkiLCAiaiIsICJ0eXBlIiwgInN0YXJ0QXR0ciIsICJjaGVja2VkIiwgImhlYWRlciIsICJrIiwgImNvbnRlbnQiLCAiY2xlYW5IcmVmIiwgIm91dCIsICJfVGV4dFJlbmRlcmVyIiwgIl9QYXJzZXIiLCAiX19QYXJzZXIiLCAiYW55VG9rZW4iLCAiZ2VuZXJpY1Rva2VuIiwgInJldCIsICJyZW5kZXJlciIsICJfSG9va3MiLCAibWFya2Rvd24iLCAiTWFya2VkIiwgImFyZ3MiLCAiY2FsbGJhY2siLCAidmFsdWVzIiwgInRhYmxlVG9rZW4iLCAibGlzdFRva2VuIiwgImNoaWxkVG9rZW5zIiwgImV4dGVuc2lvbnMiLCAicGFjayIsICJvcHRzIiwgImV4dCIsICJwcmV2UmVuZGVyZXIiLCAiZXh0TGV2ZWwiLCAicHJvcCIsICJyZW5kZXJlclByb3AiLCAicmVuZGVyZXJGdW5jIiwgInRva2VuaXplciIsICJ0b2tlbml6ZXJQcm9wIiwgInRva2VuaXplckZ1bmMiLCAicHJldlRva2VuaXplciIsICJob29rcyIsICJob29rc1Byb3AiLCAiaG9va3NGdW5jIiwgInByZXZIb29rIiwgImFyZyIsICJ3YWxrVG9rZW5zIiwgInBhY2tXYWxrdG9rZW5zIiwgImJsb2NrVHlwZSIsICJvcmlnT3B0IiwgInRocm93RXJyb3IiLCAicHJvY2Vzc2VkU3JjIiwgInByb2Nlc3NlZFRva2VucyIsICJlIiwgInNpbGVudCIsICJhc3luYyIsICJtc2ciLCAibWFya2VkSW5zdGFuY2UiLCAibWFya2VkIiwgInNldE9wdGlvbnMiLCAidXNlIiwgInBhcnNlSW5saW5lIiwgInBhcnNlciIsICJfUGFyc2VyIiwgImxleGVyIiwgIl9MZXhlciIsICJlbnRyaWVzIiwgInNldFByb3RvdHlwZU9mIiwgImlzRnJvemVuIiwgImdldFByb3RvdHlwZU9mIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJPYmplY3QiLCAiZnJlZXplIiwgInNlYWwiLCAiY3JlYXRlIiwgImFwcGx5IiwgImNvbnN0cnVjdCIsICJSZWZsZWN0IiwgIngiLCAiZnVuYyIsICJ0aGlzQXJnIiwgIl9sZW4iLCAiYXJndW1lbnRzIiwgImxlbmd0aCIsICJhcmdzIiwgIkFycmF5IiwgIl9rZXkiLCAiRnVuYyIsICJfbGVuMiIsICJfa2V5MiIsICJhcnJheUZvckVhY2giLCAidW5hcHBseSIsICJwcm90b3R5cGUiLCAiZm9yRWFjaCIsICJhcnJheUxhc3RJbmRleE9mIiwgImxhc3RJbmRleE9mIiwgImFycmF5UG9wIiwgInBvcCIsICJhcnJheVB1c2giLCAicHVzaCIsICJhcnJheVNwbGljZSIsICJzcGxpY2UiLCAic3RyaW5nVG9Mb3dlckNhc2UiLCAiU3RyaW5nIiwgInRvTG93ZXJDYXNlIiwgInN0cmluZ1RvU3RyaW5nIiwgInRvU3RyaW5nIiwgInN0cmluZ01hdGNoIiwgIm1hdGNoIiwgInN0cmluZ1JlcGxhY2UiLCAicmVwbGFjZSIsICJzdHJpbmdJbmRleE9mIiwgImluZGV4T2YiLCAic3RyaW5nVHJpbSIsICJ0cmltIiwgIm9iamVjdEhhc093blByb3BlcnR5IiwgImhhc093blByb3BlcnR5IiwgInJlZ0V4cFRlc3QiLCAiUmVnRXhwIiwgInRlc3QiLCAidHlwZUVycm9yQ3JlYXRlIiwgInVuY29uc3RydWN0IiwgIlR5cGVFcnJvciIsICJsYXN0SW5kZXgiLCAiX2xlbjMiLCAiX2tleTMiLCAiX2xlbjQiLCAiX2tleTQiLCAiYWRkVG9TZXQiLCAic2V0IiwgImFycmF5IiwgInRyYW5zZm9ybUNhc2VGdW5jIiwgImwiLCAiZWxlbWVudCIsICJsY0VsZW1lbnQiLCAiY2xlYW5BcnJheSIsICJpbmRleCIsICJpc1Byb3BlcnR5RXhpc3QiLCAiY2xvbmUiLCAib2JqZWN0IiwgIm5ld09iamVjdCIsICJwcm9wZXJ0eSIsICJ2YWx1ZSIsICJpc0FycmF5IiwgImNvbnN0cnVjdG9yIiwgImxvb2t1cEdldHRlciIsICJwcm9wIiwgImRlc2MiLCAiZ2V0IiwgImZhbGxiYWNrVmFsdWUiLCAiaHRtbCIsICJzdmciLCAic3ZnRmlsdGVycyIsICJzdmdEaXNhbGxvd2VkIiwgIm1hdGhNbCIsICJtYXRoTWxEaXNhbGxvd2VkIiwgInRleHQiLCAieG1sIiwgIk1VU1RBQ0hFX0VYUFIiLCAiRVJCX0VYUFIiLCAiVE1QTElUX0VYUFIiLCAiREFUQV9BVFRSIiwgIkFSSUFfQVRUUiIsICJJU19BTExPV0VEX1VSSSIsICJJU19TQ1JJUFRfT1JfREFUQSIsICJBVFRSX1dISVRFU1BBQ0UiLCAiRE9DVFlQRV9OQU1FIiwgIkNVU1RPTV9FTEVNRU5UIiwgIk5PREVfVFlQRSIsICJhdHRyaWJ1dGUiLCAiY2RhdGFTZWN0aW9uIiwgImVudGl0eVJlZmVyZW5jZSIsICJlbnRpdHlOb2RlIiwgInByb2dyZXNzaW5nSW5zdHJ1Y3Rpb24iLCAiY29tbWVudCIsICJkb2N1bWVudCIsICJkb2N1bWVudFR5cGUiLCAiZG9jdW1lbnRGcmFnbWVudCIsICJub3RhdGlvbiIsICJnZXRHbG9iYWwiLCAid2luZG93IiwgIl9jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3kiLCAidHJ1c3RlZFR5cGVzIiwgInB1cmlmeUhvc3RFbGVtZW50IiwgImNyZWF0ZVBvbGljeSIsICJzdWZmaXgiLCAiQVRUUl9OQU1FIiwgImhhc0F0dHJpYnV0ZSIsICJnZXRBdHRyaWJ1dGUiLCAicG9saWN5TmFtZSIsICJjcmVhdGVIVE1MIiwgImNyZWF0ZVNjcmlwdFVSTCIsICJzY3JpcHRVcmwiLCAiXyIsICJjb25zb2xlIiwgIndhcm4iLCAiX2NyZWF0ZUhvb2tzTWFwIiwgImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIiwgImFmdGVyU2FuaXRpemVFbGVtZW50cyIsICJhZnRlclNhbml0aXplU2hhZG93RE9NIiwgImJlZm9yZVNhbml0aXplQXR0cmlidXRlcyIsICJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIiwgImJlZm9yZVNhbml0aXplU2hhZG93RE9NIiwgInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsICJ1cG9uU2FuaXRpemVFbGVtZW50IiwgInVwb25TYW5pdGl6ZVNoYWRvd05vZGUiLCAiY3JlYXRlRE9NUHVyaWZ5IiwgInVuZGVmaW5lZCIsICJET01QdXJpZnkiLCAicm9vdCIsICJ2ZXJzaW9uIiwgIlZFUlNJT04iLCAicmVtb3ZlZCIsICJub2RlVHlwZSIsICJFbGVtZW50IiwgImlzU3VwcG9ydGVkIiwgIm9yaWdpbmFsRG9jdW1lbnQiLCAiY3VycmVudFNjcmlwdCIsICJEb2N1bWVudEZyYWdtZW50IiwgIkhUTUxUZW1wbGF0ZUVsZW1lbnQiLCAiTm9kZSIsICJOb2RlRmlsdGVyIiwgIk5hbWVkTm9kZU1hcCIsICJNb3pOYW1lZEF0dHJNYXAiLCAiSFRNTEZvcm1FbGVtZW50IiwgIkRPTVBhcnNlciIsICJFbGVtZW50UHJvdG90eXBlIiwgImNsb25lTm9kZSIsICJyZW1vdmUiLCAiZ2V0TmV4dFNpYmxpbmciLCAiZ2V0Q2hpbGROb2RlcyIsICJnZXRQYXJlbnROb2RlIiwgInRlbXBsYXRlIiwgImNyZWF0ZUVsZW1lbnQiLCAiY29udGVudCIsICJvd25lckRvY3VtZW50IiwgInRydXN0ZWRUeXBlc1BvbGljeSIsICJlbXB0eUhUTUwiLCAiaW1wbGVtZW50YXRpb24iLCAiY3JlYXRlTm9kZUl0ZXJhdG9yIiwgImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCAiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCAiaW1wb3J0Tm9kZSIsICJob29rcyIsICJjcmVhdGVIVE1MRG9jdW1lbnQiLCAiRVhQUkVTU0lPTlMiLCAiQUxMT1dFRF9UQUdTIiwgIkRFRkFVTFRfQUxMT1dFRF9UQUdTIiwgIlRBR1MiLCAiQUxMT1dFRF9BVFRSIiwgIkRFRkFVTFRfQUxMT1dFRF9BVFRSIiwgIkFUVFJTIiwgIkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HIiwgInRhZ05hbWVDaGVjayIsICJ3cml0YWJsZSIsICJjb25maWd1cmFibGUiLCAiZW51bWVyYWJsZSIsICJhdHRyaWJ1dGVOYW1lQ2hlY2siLCAiYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzIiwgIkZPUkJJRF9UQUdTIiwgIkZPUkJJRF9BVFRSIiwgIkVYVFJBX0VMRU1FTlRfSEFORExJTkciLCAidGFnQ2hlY2siLCAiYXR0cmlidXRlQ2hlY2siLCAiQUxMT1dfQVJJQV9BVFRSIiwgIkFMTE9XX0RBVEFfQVRUUiIsICJBTExPV19VTktOT1dOX1BST1RPQ09MUyIsICJBTExPV19TRUxGX0NMT1NFX0lOX0FUVFIiLCAiU0FGRV9GT1JfVEVNUExBVEVTIiwgIlNBRkVfRk9SX1hNTCIsICJXSE9MRV9ET0NVTUVOVCIsICJTRVRfQ09ORklHIiwgIkZPUkNFX0JPRFkiLCAiUkVUVVJOX0RPTSIsICJSRVRVUk5fRE9NX0ZSQUdNRU5UIiwgIlJFVFVSTl9UUlVTVEVEX1RZUEUiLCAiU0FOSVRJWkVfRE9NIiwgIlNBTklUSVpFX05BTUVEX1BST1BTIiwgIlNBTklUSVpFX05BTUVEX1BST1BTX1BSRUZJWCIsICJLRUVQX0NPTlRFTlQiLCAiSU5fUExBQ0UiLCAiVVNFX1BST0ZJTEVTIiwgIkZPUkJJRF9DT05URU5UUyIsICJERUZBVUxUX0ZPUkJJRF9DT05URU5UUyIsICJEQVRBX1VSSV9UQUdTIiwgIkRFRkFVTFRfREFUQV9VUklfVEFHUyIsICJVUklfU0FGRV9BVFRSSUJVVEVTIiwgIkRFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyIsICJNQVRITUxfTkFNRVNQQUNFIiwgIlNWR19OQU1FU1BBQ0UiLCAiSFRNTF9OQU1FU1BBQ0UiLCAiTkFNRVNQQUNFIiwgIklTX0VNUFRZX0lOUFVUIiwgIkFMTE9XRURfTkFNRVNQQUNFUyIsICJERUZBVUxUX0FMTE9XRURfTkFNRVNQQUNFUyIsICJNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFMiLCAiSFRNTF9JTlRFR1JBVElPTl9QT0lOVFMiLCAiQ09NTU9OX1NWR19BTkRfSFRNTF9FTEVNRU5UUyIsICJQQVJTRVJfTUVESUFfVFlQRSIsICJTVVBQT1JURURfUEFSU0VSX01FRElBX1RZUEVTIiwgIkRFRkFVTFRfUEFSU0VSX01FRElBX1RZUEUiLCAiQ09ORklHIiwgImZvcm1FbGVtZW50IiwgImlzUmVnZXhPckZ1bmN0aW9uIiwgInRlc3RWYWx1ZSIsICJGdW5jdGlvbiIsICJfcGFyc2VDb25maWciLCAiY2ZnIiwgIkFERF9VUklfU0FGRV9BVFRSIiwgIkFERF9EQVRBX1VSSV9UQUdTIiwgIkFMTE9XRURfVVJJX1JFR0VYUCIsICJBRERfVEFHUyIsICJBRERfQVRUUiIsICJBRERfRk9SQklEX0NPTlRFTlRTIiwgInRhYmxlIiwgInRib2R5IiwgIlRSVVNURURfVFlQRVNfUE9MSUNZIiwgIkFMTF9TVkdfVEFHUyIsICJBTExfTUFUSE1MX1RBR1MiLCAiX2NoZWNrVmFsaWROYW1lc3BhY2UiLCAicGFyZW50IiwgInRhZ05hbWUiLCAibmFtZXNwYWNlVVJJIiwgInBhcmVudFRhZ05hbWUiLCAiQm9vbGVhbiIsICJfZm9yY2VSZW1vdmUiLCAibm9kZSIsICJyZW1vdmVDaGlsZCIsICJfcmVtb3ZlQXR0cmlidXRlIiwgIm5hbWUiLCAiZ2V0QXR0cmlidXRlTm9kZSIsICJmcm9tIiwgInJlbW92ZUF0dHJpYnV0ZSIsICJzZXRBdHRyaWJ1dGUiLCAiX2luaXREb2N1bWVudCIsICJkaXJ0eSIsICJkb2MiLCAibGVhZGluZ1doaXRlc3BhY2UiLCAibWF0Y2hlcyIsICJkaXJ0eVBheWxvYWQiLCAicGFyc2VGcm9tU3RyaW5nIiwgImRvY3VtZW50RWxlbWVudCIsICJjcmVhdGVEb2N1bWVudCIsICJpbm5lckhUTUwiLCAiYm9keSIsICJpbnNlcnRCZWZvcmUiLCAiY3JlYXRlVGV4dE5vZGUiLCAiY2hpbGROb2RlcyIsICJjYWxsIiwgIl9jcmVhdGVOb2RlSXRlcmF0b3IiLCAiU0hPV19FTEVNRU5UIiwgIlNIT1dfQ09NTUVOVCIsICJTSE9XX1RFWFQiLCAiU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OIiwgIlNIT1dfQ0RBVEFfU0VDVElPTiIsICJfaXNDbG9iYmVyZWQiLCAibm9kZU5hbWUiLCAidGV4dENvbnRlbnQiLCAiYXR0cmlidXRlcyIsICJoYXNDaGlsZE5vZGVzIiwgIl9pc05vZGUiLCAiX2V4ZWN1dGVIb29rcyIsICJjdXJyZW50Tm9kZSIsICJkYXRhIiwgImhvb2siLCAiX3Nhbml0aXplRWxlbWVudHMiLCAiYWxsb3dlZFRhZ3MiLCAiZmlyc3RFbGVtZW50Q2hpbGQiLCAiX2lzQmFzaWNDdXN0b21FbGVtZW50IiwgInBhcmVudE5vZGUiLCAiY2hpbGRDb3VudCIsICJpIiwgImNoaWxkQ2xvbmUiLCAiX19yZW1vdmFsQ291bnQiLCAiZXhwciIsICJfaXNWYWxpZEF0dHJpYnV0ZSIsICJsY1RhZyIsICJsY05hbWUiLCAiX3Nhbml0aXplQXR0cmlidXRlcyIsICJob29rRXZlbnQiLCAiYXR0ck5hbWUiLCAiYXR0clZhbHVlIiwgImtlZXBBdHRyIiwgImFsbG93ZWRBdHRyaWJ1dGVzIiwgImZvcmNlS2VlcEF0dHIiLCAiYXR0ciIsICJpbml0VmFsdWUiLCAiZ2V0QXR0cmlidXRlVHlwZSIsICJzZXRBdHRyaWJ1dGVOUyIsICJfc2FuaXRpemVTaGFkb3dET00iLCAiZnJhZ21lbnQiLCAic2hhZG93Tm9kZSIsICJzaGFkb3dJdGVyYXRvciIsICJuZXh0Tm9kZSIsICJzYW5pdGl6ZSIsICJpbXBvcnRlZE5vZGUiLCAicmV0dXJuTm9kZSIsICJhcHBlbmRDaGlsZCIsICJmaXJzdENoaWxkIiwgIm5vZGVJdGVyYXRvciIsICJzaGFkb3dyb290IiwgInNoYWRvd3Jvb3Rtb2RlIiwgInNlcmlhbGl6ZWRIVE1MIiwgIm91dGVySFRNTCIsICJkb2N0eXBlIiwgInNldENvbmZpZyIsICJjbGVhckNvbmZpZyIsICJpc1ZhbGlkQXR0cmlidXRlIiwgInRhZyIsICJhZGRIb29rIiwgImVudHJ5UG9pbnQiLCAiaG9va0Z1bmN0aW9uIiwgInJlbW92ZUhvb2siLCAicmVtb3ZlSG9va3MiLCAicmVtb3ZlQWxsSG9va3MiLCAibG9nIiwgInRleHQiLCAicG9wdWxhdGVKb2JUYWIiLCAiaHRtbCIsICJQSEFTRVMiLCAic2hvd0xvYWRKb2JQYW5lbCIsICJzdGF0ZU1hbmFnZXIiLCAiZXZlbnQiLCAibSIsICJ1IiwgIl9wcm9jZWVkQWZ0ZXJJbnRha2UiLCAiX3Nob3dJbnRha2VDb25maXJtQ2FyZCIsICJzZW5kTWVzc2FnZSIsICJsb2ciLCAiUkVUUllfUE9MSUNZX1NUT1JBR0VfS0VZIiwgInRleHQiLCAic2VuZE1lc3NhZ2UiLCAic3RhdGVNYW5hZ2VyIiwgImdldFNlc3Npb25JZEZyb21VUkwiLCAiX3Nob3dJbnRha2VDb25maXJtQ2FyZCIsICJfcHJvY2VlZEFmdGVySW50YWtlIiwgIl9lIiwgImFza1Bvc3RBbmFseXNpc1F1ZXN0aW9ucyIsICJoYW5kbGVRdWVzdGlvblJlc3BvbnNlIiwgInBvcHVsYXRlUXVlc3Rpb25zVGFiIiwgImxvZyIsICJhc2tQb3N0QW5hbHlzaXNRdWVzdGlvbnMiLCAicG9wdWxhdGVRdWVzdGlvbnNUYWIiLCAic3RhdGVNYW5hZ2VyIiwgInEiLCAicSIsICJzdGF0ZU1hbmFnZXIiLCAiXyIsICJsb2ciLCAiaGFuZGxlUXVlc3Rpb25SZXNwb25zZSIsICJidWlsZEV4cGVyaWVuY2VSZXZpZXdUYWJsZSIsICJoYW5kbGVFeHBlcmllbmNlUmVzcG9uc2UiLCAibG9nIiwgIl9maW5kRXhwZXJpZW5jZVJlY29tbWVuZGF0aW9uUmVjb3JkIiwgIl8iLCAiYnVpbGRFeHBlcmllbmNlUmV2aWV3VGFibGUiLCAiYiIsICJoYW5kbGVFeHBlcmllbmNlUmVzcG9uc2UiLCAic3RhdGVNYW5hZ2VyIiwgImJ1aWxkU2tpbGxzUmV2aWV3VGFibGUiLCAiaGFuZGxlU2tpbGxzUmVzcG9uc2UiLCAibG9nIiwgIm0iLCAieCIsICJuYW1lIiwgInNraWxsIiwgIl8iLCAiYnVpbGRTa2lsbHNSZXZpZXdUYWJsZSIsICJzdGF0ZU1hbmFnZXIiLCAiYiIsICJlIiwgInNraWxsTmFtZSIsICJoYW5kbGVTa2lsbHNSZXNwb25zZSIsICJfYWNoVmVyYldhcm5pbmciLCAiYnVpbGRBY2hpZXZlbWVudHNFZGl0b3IiLCAiYnVpbGRBY2hpZXZlbWVudHNSZXZpZXdUYWJsZSIsICJlbnRyaWVzIiwgIl8iLCAiYnVpbGRBY2hpZXZlbWVudHNSZXZpZXdUYWJsZSIsICJiIiwgImh0bWwiLCAiayIsICJ2IiwgInN0YXRlTWFuYWdlciIsICJidWlsZEFjaGlldmVtZW50c0VkaXRvciIsICJfYWNoVmVyYldhcm5pbmciLCAidGV4dCIsICJfZSIsICJidWlsZFRhZ2xpbmVSZXZpZXdTZWN0aW9uIiwgImJ1aWxkVGFnbGluZVJldmlld1NlY3Rpb24iLCAiX2UiLCAic3RhdGVNYW5hZ2VyIiwgImJ1aWxkU3VtbWFyeUZvY3VzU2VjdGlvbiIsICJidWlsZFN1bW1hcnlGb2N1c1NlY3Rpb24iLCAiayIsICJ0ZXh0IiwgInciLCAic3RhdGVNYW5hZ2VyIiwgImJ1aWxkUHVibGljYXRpb25zUmV2aWV3VGFibGUiLCAibG9nIiwgImJ1aWxkUHVibGljYXRpb25zUmV2aWV3VGFibGUiLCAicSIsICJodG1sIiwgImJ0biIsICJzdGF0ZU1hbmFnZXIiLCAiYXBwbHlSZXdyaXRlQWN0aW9uIiwgImZldGNoQW5kUmV2aWV3UmV3cml0ZXMiLCAicmVuZGVyUmV3cml0ZVBhbmVsIiwgInJld3JpdGVEZWNpc2lvbnMiLCAic3VibWl0UmV3cml0ZURlY2lzaW9ucyIsICJyZXdyaXRlRGVjaXNpb25zIiwgIl8iLCAiZmV0Y2hBbmRSZXZpZXdSZXdyaXRlcyIsICJyZW5kZXJSZXdyaXRlUGFuZWwiLCAidyIsICJhcHBseVJld3JpdGVBY3Rpb24iLCAiYiIsICJtIiwgImkiLCAiaiIsICJrIiwgInN1Ym1pdFJld3JpdGVEZWNpc2lvbnMiLCAic3RhdGVNYW5hZ2VyIiwgInBvcHVsYXRlU3BlbGxDaGVja1RhYiIsICJzdWJtaXRTcGVsbENoZWNrRGVjaXNpb25zIiwgImxvZyIsICJwb3B1bGF0ZVNwZWxsQ2hlY2tUYWIiLCAiY29udGVudCIsICJzdGF0ZU1hbmFnZXIiLCAiaHRtbCIsICJiIiwgImF0c1Njb3JlIiwgImsiLCAic3VibWl0U3BlbGxDaGVja0RlY2lzaW9ucyIsICJwb3B1bGF0ZURvd25sb2FkVGFiIiwgImxvZyIsICJodG1sIiwgIl8iLCAicG9wdWxhdGVEb3dubG9hZFRhYiIsICJzdGF0ZU1hbmFnZXIiLCAidyIsICJtIiwgImZpbmFsR2VuZXJhdGlvbkNvbXBsZXRlIiwgImxvZyIsICJodG1sIiwgImZpbmFsR2VuZXJhdGlvbkNvbXBsZXRlIiwgInN0YXRlTWFuYWdlciIsICJyZW5kZXJNYXN0ZXJEYXRhQWlVcGRhdGVEaXNhYmxlZE5vdGUiLCAicmVuZGVyTWFzdGVyRGF0YUFpVXBkYXRlUGFuZWwiLCAibG9nIiwgInJlbmRlck1hc3RlckRhdGFBaVVwZGF0ZVBhbmVsIiwgInJlbmRlck1hc3RlckRhdGFBaVVwZGF0ZURpc2FibGVkTm90ZSIsICJtIiwgImV2ZW50IiwgIm9wZW5NYXN0ZXJDdk1vZGFsIiwgInBvcHVsYXRlTWFzdGVyVGFiIiwgInJlZG9NYXN0ZXJEYXRhQ2hhbmdlIiwgInVuZG9NYXN0ZXJEYXRhQ2hhbmdlIiwgIngiLCAidiIsICJ0ZXh0IiwgImsiLCAiXyIsICJzZXNzaW9uSWQiLCAiZXZlbnQiLCAiX3JlbmRlckNvbnNpc3RlbmN5UmVwb3J0IiwgInBvcHVsYXRlQ292ZXJMZXR0ZXJUYWIiLCAicG9wdWxhdGVDb3ZlckxldHRlclRhYiIsICJfIiwgInRleHQiLCAiX3JlbmRlckNvbnNpc3RlbmN5UmVwb3J0IiwgInN0YXRlTWFuYWdlciIsICJrIiwgInJlIiwgInBvcHVsYXRlU2NyZWVuaW5nVGFiIiwgInEiLCAiYiIsICJfIiwgInBvcHVsYXRlRmluYWxpc2VUYWIiLCAibG9nIiwgIm0iLCAicG9wdWxhdGVGaW5hbGlzZVRhYiIsICJodG1sIiwgIl9yZW5kZXJSZXdyaXRlQXVkaXRMb2ciLCAiXyIsICJhdHNTY29yZSIsICJwb3B1bGF0ZUludGVydmlld1ByZXBUYWIiLCAibG9nIiwgInBvcHVsYXRlSW50ZXJ2aWV3UHJlcFRhYiIsICJwb3B1bGF0ZVRoYW5rWW91VGFiIiwgImxvZyIsICJwb3B1bGF0ZVRoYW5rWW91VGFiIiwgInBvcHVsYXRlSGFydmVzdFRhYiIsICJsb2ciLCAiYiIsICJrIiwgInYiLCAicG9wdWxhdGVIYXJ2ZXN0VGFiIiwgIl91cGRhdGVTZXNzaW9uU3dpdGNoZXJIZWFkZXIiLCAib3BlblNlc3Npb25zTW9kYWwiLCAic2hvd093bmVyc2hpcENvbmZsaWN0RGlhbG9nIiwgIl8iLCAiX2NyZWF0ZWRJc29Gcm9tU2Vzc2lvblBhdGgiLCAiYiIsICJ2IiwgImV2ZW50IiwgImZtdERhdGUiLCAiaHRtbCIsICJpbml0S2V5Ym9hcmRTaG9ydGN1dHMiLCAicmVzZXRDYXJkRm9jdXMiLCAic2V0dXBFdmVudExpc3RlbmVycyIsICJ0ZXh0Il0KfQo=
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL2xvZ2xldmVsL2xpYi9sb2dsZXZlbC5qcyIsICJsb2dnZXIuanMiLCAidXRpbHMuanMiLCAiYXBpLWNsaWVudC5qcyIsICJmZXRjaC11dGlscy5qcyIsICJzdGF0ZS1tYW5hZ2VyLmpzIiwgInByb3ZpZGVyLWluZm8uanMiLCAidWktY29yZS5qcyIsICJ3b3JrZmxvdy1zdGVwcy5qcyIsICJsYXlvdXQtaW5zdHJ1Y3Rpb24uanMiLCAiYXRzLXJlZmluZW1lbnQuanMiLCAibWVzc2FnZS1xdWV1ZS5qcyIsICJyZXZpZXctdGFibGUtYmFzZS5qcyIsICJwcmV2aWV3LXJlbmRlci5qcyIsICJ2YWxpZGF0b3JzLmpzIiwgInJlY29tbWVuZGF0aW9uLWhlbHBlcnMuanMiLCAidWktaGVscGVycy5qcyIsICJwcm9wb3NhbC1yZXZpZXcuanMiLCAibGxtLWxvZy5qcyIsICJhdXRoLXByb3ZpZGVyLmpzIiwgImF0cy1tb2RhbHMuanMiLCAic2Vzc2lvbi1hY3Rpb25zLmpzIiwgImpvYi1hbmFseXNpcy5qcyIsICJnb2Fscy5qcyIsICJzZXNzaW9uLW1hbmFnZXIuanMiLCAiam9iLWlucHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL2RlZmF1bHRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL3J1bGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL2hlbHBlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvVG9rZW5pemVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL0xleGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL1JlbmRlcmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXJrZWQvc3JjL1RleHRSZW5kZXJlci50cyIsICIuLi9ub2RlX21vZHVsZXMvbWFya2VkL3NyYy9QYXJzZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvSG9va3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvSW5zdGFuY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL21hcmtlZC9zcmMvbWFya2VkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9kb21wdXJpZnkvc3JjL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9kb21wdXJpZnkvc3JjL3RhZ3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2RvbXB1cmlmeS9zcmMvYXR0cnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2RvbXB1cmlmeS9zcmMvcmVnZXhwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9kb21wdXJpZnkvc3JjL3B1cmlmeS50cyIsICJtZXNzYWdlLWRpc3BhdGNoLmpzIiwgInF1ZXN0aW9ucy1wYW5lbC5qcyIsICJyZXZpZXctaWNvbnMuanMiLCAiZXhwZXJpZW5jZS1yZXZpZXcuanMiLCAic2tpbGxzLXJldmlldy5qcyIsICJhY2hpZXZlbWVudHMtcmV2aWV3LmpzIiwgInRhZ2xpbmUtcmV2aWV3LmpzIiwgInN1bW1hcnktcmV2aWV3LmpzIiwgInB1YmxpY2F0aW9ucy1yZXZpZXcuanMiLCAicmV3cml0ZS1yZXZpZXcuanMiLCAic3BlbGwtY2hlY2suanMiLCAiZG93bmxvYWQtdGFiLmpzIiwgImZpbmFsLWdlbmVyYXRlLmpzIiwgIm1hc3Rlci1kYXRhLWFpLXVwZGF0ZS5qcyIsICJtYXN0ZXItY3YuanMiLCAiY292ZXItbGV0dGVyLmpzIiwgInNjcmVlbmluZy1xdWVzdGlvbnMuanMiLCAiZmluYWxpc2UuanMiLCAiaW50ZXJ2aWV3LXByZXAuanMiLCAidGhhbmsteW91LmpzIiwgImhhcnZlc3QuanMiLCAiZWFybHktcHJldmlldy1wYW5lbC5qcyIsICJzZXNzaW9uLXN3aXRjaGVyLXVpLmpzIiwgImtleWJvYXJkLXNob3J0Y3V0cy5qcyIsICJhcHAuanMiLCAic3JjL21haW4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG4qIGxvZ2xldmVsIC0gaHR0cHM6Ly9naXRodWIuY29tL3BpbXRlcnJ5L2xvZ2xldmVsXG4qXG4qIENvcHlyaWdodCAoYykgMjAxMyBUaW0gUGVycnlcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuKi9cbihmdW5jdGlvbiAocm9vdCwgZGVmaW5pdGlvbikge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5sb2cgPSBkZWZpbml0aW9uKCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAvLyBTbGlnaHRseSBkdWJpb3VzIHRyaWNrcyB0byBjdXQgZG93biBtaW5pbWl6ZWQgZmlsZSBzaXplXG4gICAgdmFyIG5vb3AgPSBmdW5jdGlvbigpIHt9O1xuICAgIHZhciB1bmRlZmluZWRUeXBlID0gXCJ1bmRlZmluZWRcIjtcbiAgICB2YXIgaXNJRSA9ICh0eXBlb2Ygd2luZG93ICE9PSB1bmRlZmluZWRUeXBlKSAmJiAodHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IHVuZGVmaW5lZFR5cGUpICYmIChcbiAgICAgICAgL1RyaWRlbnRcXC98TVNJRSAvLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpXG4gICAgKTtcblxuICAgIHZhciBsb2dNZXRob2RzID0gW1xuICAgICAgICBcInRyYWNlXCIsXG4gICAgICAgIFwiZGVidWdcIixcbiAgICAgICAgXCJpbmZvXCIsXG4gICAgICAgIFwid2FyblwiLFxuICAgICAgICBcImVycm9yXCJcbiAgICBdO1xuXG4gICAgdmFyIF9sb2dnZXJzQnlOYW1lID0ge307XG4gICAgdmFyIGRlZmF1bHRMb2dnZXIgPSBudWxsO1xuXG4gICAgLy8gQ3Jvc3MtYnJvd3NlciBiaW5kIGVxdWl2YWxlbnQgdGhhdCB3b3JrcyBhdCBsZWFzdCBiYWNrIHRvIElFNlxuICAgIGZ1bmN0aW9uIGJpbmRNZXRob2Qob2JqLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciBtZXRob2QgPSBvYmpbbWV0aG9kTmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kLmJpbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXRob2QuYmluZChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChtZXRob2QsIG9iaik7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gTWlzc2luZyBiaW5kIHNoaW0gb3IgSUU4ICsgTW9kZXJuaXpyLCBmYWxsYmFjayB0byB3cmFwcGluZ1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5hcHBseShtZXRob2QsIFtvYmosIGFyZ3VtZW50c10pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmFjZSgpIGRvZXNuJ3QgcHJpbnQgdGhlIG1lc3NhZ2UgaW4gSUUsIHNvIGZvciB0aGF0IGNhc2Ugd2UgbmVlZCB0byB3cmFwIGl0XG4gICAgZnVuY3Rpb24gdHJhY2VGb3JJRSgpIHtcbiAgICAgICAgaWYgKGNvbnNvbGUubG9nKSB7XG4gICAgICAgICAgICBpZiAoY29uc29sZS5sb2cuYXBwbHkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJbiBvbGQgSUUsIG5hdGl2ZSBjb25zb2xlIG1ldGhvZHMgdGhlbXNlbHZlcyBkb24ndCBoYXZlIGFwcGx5KCkuXG4gICAgICAgICAgICAgICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmFwcGx5KGNvbnNvbGUubG9nLCBbY29uc29sZSwgYXJndW1lbnRzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnNvbGUudHJhY2UpIGNvbnNvbGUudHJhY2UoKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCB0aGUgYmVzdCBsb2dnaW5nIG1ldGhvZCBwb3NzaWJsZSBmb3IgdGhpcyBlbnZcbiAgICAvLyBXaGVyZXZlciBwb3NzaWJsZSB3ZSB3YW50IHRvIGJpbmQsIG5vdCB3cmFwLCB0byBwcmVzZXJ2ZSBzdGFjayB0cmFjZXNcbiAgICBmdW5jdGlvbiByZWFsTWV0aG9kKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgaWYgKG1ldGhvZE5hbWUgPT09ICdkZWJ1ZycpIHtcbiAgICAgICAgICAgIG1ldGhvZE5hbWUgPSAnbG9nJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uc29sZSA9PT0gdW5kZWZpbmVkVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBtZXRob2QgcG9zc2libGUsIGZvciBub3cgLSBmaXhlZCBsYXRlciBieSBlbmFibGVMb2dnaW5nV2hlbkNvbnNvbGVBcnJpdmVzXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ3RyYWNlJyAmJiBpc0lFKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhY2VGb3JJRTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25zb2xlW21ldGhvZE5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBiaW5kTWV0aG9kKGNvbnNvbGUsIG1ldGhvZE5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnNvbGUubG9nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBiaW5kTWV0aG9kKGNvbnNvbGUsICdsb2cnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBub29wO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlc2UgcHJpdmF0ZSBmdW5jdGlvbnMgYWx3YXlzIG5lZWQgYHRoaXNgIHRvIGJlIHNldCBwcm9wZXJseVxuXG4gICAgZnVuY3Rpb24gcmVwbGFjZUxvZ2dpbmdNZXRob2RzKCkge1xuICAgICAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICAgICAgICB2YXIgbGV2ZWwgPSB0aGlzLmdldExldmVsKCk7XG5cbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgYWN0dWFsIG1ldGhvZHMuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9nTWV0aG9kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG1ldGhvZE5hbWUgPSBsb2dNZXRob2RzW2ldO1xuICAgICAgICAgICAgdGhpc1ttZXRob2ROYW1lXSA9IChpIDwgbGV2ZWwpID9cbiAgICAgICAgICAgICAgICBub29wIDpcbiAgICAgICAgICAgICAgICB0aGlzLm1ldGhvZEZhY3RvcnkobWV0aG9kTmFtZSwgbGV2ZWwsIHRoaXMubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZpbmUgbG9nLmxvZyBhcyBhbiBhbGlhcyBmb3IgbG9nLmRlYnVnXG4gICAgICAgIHRoaXMubG9nID0gdGhpcy5kZWJ1ZztcblxuICAgICAgICAvLyBSZXR1cm4gYW55IGltcG9ydGFudCB3YXJuaW5ncy5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSB1bmRlZmluZWRUeXBlICYmIGxldmVsIDwgdGhpcy5sZXZlbHMuU0lMRU5UKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJObyBjb25zb2xlIGF2YWlsYWJsZSBmb3IgbG9nZ2luZ1wiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW4gb2xkIElFIHZlcnNpb25zLCB0aGUgY29uc29sZSBpc24ndCBwcmVzZW50IHVudGlsIHlvdSBmaXJzdCBvcGVuIGl0LlxuICAgIC8vIFdlIGJ1aWxkIHJlYWxNZXRob2QoKSByZXBsYWNlbWVudHMgaGVyZSB0aGF0IHJlZ2VuZXJhdGUgbG9nZ2luZyBtZXRob2RzXG4gICAgZnVuY3Rpb24gZW5hYmxlTG9nZ2luZ1doZW5Db25zb2xlQXJyaXZlcyhtZXRob2ROYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IHVuZGVmaW5lZFR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9nZ2luZ01ldGhvZHMuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB0aGlzW21ldGhvZE5hbWVdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCwgd2UgdXNlIGNsb3NlbHkgYm91bmQgcmVhbCBtZXRob2RzIHdoZXJldmVyIHBvc3NpYmxlLCBhbmRcbiAgICAvLyBvdGhlcndpc2Ugd2Ugd2FpdCBmb3IgYSBjb25zb2xlIHRvIGFwcGVhciwgYW5kIHRoZW4gdHJ5IGFnYWluLlxuICAgIGZ1bmN0aW9uIGRlZmF1bHRNZXRob2RGYWN0b3J5KG1ldGhvZE5hbWUsIF9sZXZlbCwgX2xvZ2dlck5hbWUpIHtcbiAgICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgICAgcmV0dXJuIHJlYWxNZXRob2QobWV0aG9kTmFtZSkgfHxcbiAgICAgICAgICAgICAgIGVuYWJsZUxvZ2dpbmdXaGVuQ29uc29sZUFycml2ZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBMb2dnZXIobmFtZSwgZmFjdG9yeSkge1xuICAgICAgLy8gUHJpdmF0ZSBpbnN0YW5jZSB2YXJpYWJsZXMuXG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBsZXZlbCBpbmhlcml0ZWQgZnJvbSBhIHBhcmVudCBsb2dnZXIgKG9yIGEgZ2xvYmFsIGRlZmF1bHQpLiBXZVxuICAgICAgICogY2FjaGUgdGhpcyBoZXJlIHJhdGhlciB0aGFuIGRlbGVnYXRpbmcgdG8gdGhlIHBhcmVudCBzbyB0aGF0IGl0IHN0YXlzXG4gICAgICAgKiBpbiBzeW5jIHdpdGggdGhlIGFjdHVhbCBsb2dnaW5nIG1ldGhvZHMgdGhhdCB3ZSBoYXZlIGluc3RhbGxlZCAodGhlXG4gICAgICAgKiBwYXJlbnQgY291bGQgY2hhbmdlIGxldmVscyBidXQgd2UgbWlnaHQgbm90IGhhdmUgcmVidWlsdCB0aGUgbG9nZ2Vyc1xuICAgICAgICogaW4gdGhpcyBjaGlsZCB5ZXQpLlxuICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAqL1xuICAgICAgdmFyIGluaGVyaXRlZExldmVsO1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgZGVmYXVsdCBsZXZlbCBmb3IgdGhpcyBsb2dnZXIsIGlmIGFueS4gSWYgc2V0LCB0aGlzIG92ZXJyaWRlc1xuICAgICAgICogYGluaGVyaXRlZExldmVsYC5cbiAgICAgICAqIEB0eXBlIHtudW1iZXJ8bnVsbH1cbiAgICAgICAqL1xuICAgICAgdmFyIGRlZmF1bHRMZXZlbDtcbiAgICAgIC8qKlxuICAgICAgICogQSB1c2VyLXNwZWNpZmljIGxldmVsIGZvciB0aGlzIGxvZ2dlci4gSWYgc2V0LCB0aGlzIG92ZXJyaWRlc1xuICAgICAgICogYGRlZmF1bHRMZXZlbGAuXG4gICAgICAgKiBAdHlwZSB7bnVtYmVyfG51bGx9XG4gICAgICAgKi9cbiAgICAgIHZhciB1c2VyTGV2ZWw7XG5cbiAgICAgIHZhciBzdG9yYWdlS2V5ID0gXCJsb2dsZXZlbFwiO1xuICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHN0b3JhZ2VLZXkgKz0gXCI6XCIgKyBuYW1lO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikge1xuICAgICAgICBzdG9yYWdlS2V5ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBwZXJzaXN0TGV2ZWxJZlBvc3NpYmxlKGxldmVsTnVtKSB7XG4gICAgICAgICAgdmFyIGxldmVsTmFtZSA9IChsb2dNZXRob2RzW2xldmVsTnVtXSB8fCAnc2lsZW50JykudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSB1bmRlZmluZWRUeXBlIHx8ICFzdG9yYWdlS2V5KSByZXR1cm47XG5cbiAgICAgICAgICAvLyBVc2UgbG9jYWxTdG9yYWdlIGlmIGF2YWlsYWJsZVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Vbc3RvcmFnZUtleV0gPSBsZXZlbE5hbWU7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHt9XG5cbiAgICAgICAgICAvLyBVc2Ugc2Vzc2lvbiBjb29raWUgYXMgZmFsbGJhY2tcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuY29va2llID1cbiAgICAgICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RvcmFnZUtleSkgKyBcIj1cIiArIGxldmVsTmFtZSArIFwiO1wiO1xuICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZSkge31cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZ2V0UGVyc2lzdGVkTGV2ZWwoKSB7XG4gICAgICAgICAgdmFyIHN0b3JlZExldmVsO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IHVuZGVmaW5lZFR5cGUgfHwgIXN0b3JhZ2VLZXkpIHJldHVybjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN0b3JlZExldmVsID0gd2luZG93LmxvY2FsU3RvcmFnZVtzdG9yYWdlS2V5XTtcbiAgICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHt9XG5cbiAgICAgICAgICAvLyBGYWxsYmFjayB0byBjb29raWVzIGlmIGxvY2FsIHN0b3JhZ2UgZ2l2ZXMgdXMgbm90aGluZ1xuICAgICAgICAgIGlmICh0eXBlb2Ygc3RvcmVkTGV2ZWwgPT09IHVuZGVmaW5lZFR5cGUpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHZhciBjb29raWUgPSB3aW5kb3cuZG9jdW1lbnQuY29va2llO1xuICAgICAgICAgICAgICAgICAgdmFyIGNvb2tpZU5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoc3RvcmFnZUtleSk7XG4gICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBjb29raWUuaW5kZXhPZihjb29raWVOYW1lICsgXCI9XCIpO1xuICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgIHN0b3JlZExldmVsID0gL14oW147XSspLy5leGVjKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb29raWUuc2xpY2UobG9jYXRpb24gKyBjb29raWVOYW1lLmxlbmd0aCArIDEpXG4gICAgICAgICAgICAgICAgICAgICAgKVsxXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIElmIHRoZSBzdG9yZWQgbGV2ZWwgaXMgbm90IHZhbGlkLCB0cmVhdCBpdCBhcyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG4gICAgICAgICAgaWYgKHNlbGYubGV2ZWxzW3N0b3JlZExldmVsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHN0b3JlZExldmVsID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdG9yZWRMZXZlbDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY2xlYXJQZXJzaXN0ZWRMZXZlbCgpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gdW5kZWZpbmVkVHlwZSB8fCAhc3RvcmFnZUtleSkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gVXNlIGxvY2FsU3RvcmFnZSBpZiBhdmFpbGFibGVcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oc3RvcmFnZUtleSk7XG4gICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuXG4gICAgICAgICAgLy8gVXNlIHNlc3Npb24gY29va2llIGFzIGZhbGxiYWNrXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmNvb2tpZSA9XG4gICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0b3JhZ2VLZXkpICsgXCI9OyBleHBpcmVzPVRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgVVRDXCI7XG4gICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBub3JtYWxpemVMZXZlbChpbnB1dCkge1xuICAgICAgICAgIHZhciBsZXZlbCA9IGlucHV0O1xuICAgICAgICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09IFwic3RyaW5nXCIgJiYgc2VsZi5sZXZlbHNbbGV2ZWwudG9VcHBlckNhc2UoKV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBsZXZlbCA9IHNlbGYubGV2ZWxzW2xldmVsLnRvVXBwZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiICYmIGxldmVsID49IDAgJiYgbGV2ZWwgPD0gc2VsZi5sZXZlbHMuU0lMRU5UKSB7XG4gICAgICAgICAgICAgIHJldHVybiBsZXZlbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibG9nLnNldExldmVsKCkgY2FsbGVkIHdpdGggaW52YWxpZCBsZXZlbDogXCIgKyBpbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgICpcbiAgICAgICAqIFB1YmxpYyBsb2dnZXIgQVBJIC0gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9waW10ZXJyeS9sb2dsZXZlbCBmb3IgZGV0YWlsc1xuICAgICAgICpcbiAgICAgICAqL1xuXG4gICAgICBzZWxmLm5hbWUgPSBuYW1lO1xuXG4gICAgICBzZWxmLmxldmVscyA9IHsgXCJUUkFDRVwiOiAwLCBcIkRFQlVHXCI6IDEsIFwiSU5GT1wiOiAyLCBcIldBUk5cIjogMyxcbiAgICAgICAgICBcIkVSUk9SXCI6IDQsIFwiU0lMRU5UXCI6IDV9O1xuXG4gICAgICBzZWxmLm1ldGhvZEZhY3RvcnkgPSBmYWN0b3J5IHx8IGRlZmF1bHRNZXRob2RGYWN0b3J5O1xuXG4gICAgICBzZWxmLmdldExldmVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICh1c2VyTGV2ZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHVzZXJMZXZlbDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlZmF1bHRMZXZlbCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdExldmVsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaW5oZXJpdGVkTGV2ZWw7XG4gICAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgc2VsZi5zZXRMZXZlbCA9IGZ1bmN0aW9uIChsZXZlbCwgcGVyc2lzdCkge1xuICAgICAgICAgIHVzZXJMZXZlbCA9IG5vcm1hbGl6ZUxldmVsKGxldmVsKTtcbiAgICAgICAgICBpZiAocGVyc2lzdCAhPT0gZmFsc2UpIHsgIC8vIGRlZmF1bHRzIHRvIHRydWVcbiAgICAgICAgICAgICAgcGVyc2lzdExldmVsSWZQb3NzaWJsZSh1c2VyTGV2ZWwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE5PVEU6IGluIHYyLCB0aGlzIHNob3VsZCBjYWxsIHJlYnVpbGQoKSwgd2hpY2ggdXBkYXRlcyBjaGlsZHJlbi5cbiAgICAgICAgICByZXR1cm4gcmVwbGFjZUxvZ2dpbmdNZXRob2RzLmNhbGwoc2VsZik7XG4gICAgICB9O1xuXG4gICAgICBzZWxmLnNldERlZmF1bHRMZXZlbCA9IGZ1bmN0aW9uIChsZXZlbCkge1xuICAgICAgICAgIGRlZmF1bHRMZXZlbCA9IG5vcm1hbGl6ZUxldmVsKGxldmVsKTtcbiAgICAgICAgICBpZiAoIWdldFBlcnNpc3RlZExldmVsKCkpIHtcbiAgICAgICAgICAgICAgc2VsZi5zZXRMZXZlbChsZXZlbCwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHNlbGYucmVzZXRMZXZlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1c2VyTGV2ZWwgPSBudWxsO1xuICAgICAgICAgIGNsZWFyUGVyc2lzdGVkTGV2ZWwoKTtcbiAgICAgICAgICByZXBsYWNlTG9nZ2luZ01ldGhvZHMuY2FsbChzZWxmKTtcbiAgICAgIH07XG5cbiAgICAgIHNlbGYuZW5hYmxlQWxsID0gZnVuY3Rpb24ocGVyc2lzdCkge1xuICAgICAgICAgIHNlbGYuc2V0TGV2ZWwoc2VsZi5sZXZlbHMuVFJBQ0UsIHBlcnNpc3QpO1xuICAgICAgfTtcblxuICAgICAgc2VsZi5kaXNhYmxlQWxsID0gZnVuY3Rpb24ocGVyc2lzdCkge1xuICAgICAgICAgIHNlbGYuc2V0TGV2ZWwoc2VsZi5sZXZlbHMuU0lMRU5ULCBwZXJzaXN0KTtcbiAgICAgIH07XG5cbiAgICAgIHNlbGYucmVidWlsZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoZGVmYXVsdExvZ2dlciAhPT0gc2VsZikge1xuICAgICAgICAgICAgICBpbmhlcml0ZWRMZXZlbCA9IG5vcm1hbGl6ZUxldmVsKGRlZmF1bHRMb2dnZXIuZ2V0TGV2ZWwoKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcGxhY2VMb2dnaW5nTWV0aG9kcy5jYWxsKHNlbGYpO1xuXG4gICAgICAgICAgaWYgKGRlZmF1bHRMb2dnZXIgPT09IHNlbGYpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgY2hpbGROYW1lIGluIF9sb2dnZXJzQnlOYW1lKSB7XG4gICAgICAgICAgICAgICAgX2xvZ2dlcnNCeU5hbWVbY2hpbGROYW1lXS5yZWJ1aWxkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBJbml0aWFsaXplIGFsbCB0aGUgaW50ZXJuYWwgbGV2ZWxzLlxuICAgICAgaW5oZXJpdGVkTGV2ZWwgPSBub3JtYWxpemVMZXZlbChcbiAgICAgICAgICBkZWZhdWx0TG9nZ2VyID8gZGVmYXVsdExvZ2dlci5nZXRMZXZlbCgpIDogXCJXQVJOXCJcbiAgICAgICk7XG4gICAgICB2YXIgaW5pdGlhbExldmVsID0gZ2V0UGVyc2lzdGVkTGV2ZWwoKTtcbiAgICAgIGlmIChpbml0aWFsTGV2ZWwgIT0gbnVsbCkge1xuICAgICAgICAgIHVzZXJMZXZlbCA9IG5vcm1hbGl6ZUxldmVsKGluaXRpYWxMZXZlbCk7XG4gICAgICB9XG4gICAgICByZXBsYWNlTG9nZ2luZ01ldGhvZHMuY2FsbChzZWxmKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqXG4gICAgICogVG9wLWxldmVsIEFQSVxuICAgICAqXG4gICAgICovXG5cbiAgICBkZWZhdWx0TG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4gICAgZGVmYXVsdExvZ2dlci5nZXRMb2dnZXIgPSBmdW5jdGlvbiBnZXRMb2dnZXIobmFtZSkge1xuICAgICAgICBpZiAoKHR5cGVvZiBuYW1lICE9PSBcInN5bWJvbFwiICYmIHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiKSB8fCBuYW1lID09PSBcIlwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiWW91IG11c3Qgc3VwcGx5IGEgbmFtZSB3aGVuIGNyZWF0aW5nIGEgbG9nZ2VyLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2dnZXIgPSBfbG9nZ2Vyc0J5TmFtZVtuYW1lXTtcbiAgICAgICAgaWYgKCFsb2dnZXIpIHtcbiAgICAgICAgICAgIGxvZ2dlciA9IF9sb2dnZXJzQnlOYW1lW25hbWVdID0gbmV3IExvZ2dlcihcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMb2dnZXIubWV0aG9kRmFjdG9yeVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH07XG5cbiAgICAvLyBHcmFiIHRoZSBjdXJyZW50IGdsb2JhbCBsb2cgdmFyaWFibGUgaW4gY2FzZSBvZiBvdmVyd3JpdGVcbiAgICB2YXIgX2xvZyA9ICh0eXBlb2Ygd2luZG93ICE9PSB1bmRlZmluZWRUeXBlKSA/IHdpbmRvdy5sb2cgOiB1bmRlZmluZWQ7XG4gICAgZGVmYXVsdExvZ2dlci5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSB1bmRlZmluZWRUeXBlICYmXG4gICAgICAgICAgICAgICB3aW5kb3cubG9nID09PSBkZWZhdWx0TG9nZ2VyKSB7XG4gICAgICAgICAgICB3aW5kb3cubG9nID0gX2xvZztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZhdWx0TG9nZ2VyO1xuICAgIH07XG5cbiAgICBkZWZhdWx0TG9nZ2VyLmdldExvZ2dlcnMgPSBmdW5jdGlvbiBnZXRMb2dnZXJzKCkge1xuICAgICAgICByZXR1cm4gX2xvZ2dlcnNCeU5hbWU7XG4gICAgfTtcblxuICAgIC8vIEVTNiBkZWZhdWx0IGV4cG9ydCwgZm9yIGNvbXBhdGliaWxpdHlcbiAgICBkZWZhdWx0TG9nZ2VyWydkZWZhdWx0J10gPSBkZWZhdWx0TG9nZ2VyO1xuXG4gICAgcmV0dXJuIGRlZmF1bHRMb2dnZXI7XG59KSk7XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9sb2dnZXIuanNcbiAqIENlbnRyYWxpc2VkIGxvZ2dpbmcgdXNpbmcgdGhlIGxvZ2xldmVsIGxpYnJhcnkuXG4gKlxuICogVXNhZ2UgKHBlci1tb2R1bGUgbmFtZWQgbG9nZ2Vycyk6XG4gKiAgIGltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbiAqICAgY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdhcGktY2xpZW50Jyk7XG4gKiAgIGxvZy5pbmZvKCdyZXF1ZXN0IHN0YXJ0ZWQnLCBlbmRwb2ludCk7XG4gKiAgIGxvZy53YXJuKCdzZXNzaW9uIGNvbmZsaWN0Jyk7XG4gKiAgIGxvZy5lcnJvcignZmF0YWwnLCBlcnJvcik7XG4gKlxuICogUm9vdCBsb2dnZXIgKHVuY2hhbmdlZCBnbG9iYWwgbGV2ZWwpOlxuICogICBpbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyLmpzJztcbiAqICAgbG9nLnNldExldmVsKCdkZWJ1ZycpOyAgIC8vIGxvd2VyIHRoZSBnbG9iYWwgbWluaW11bVxuICpcbiAqIFRoZSBkZWZhdWx0IGxldmVsIGlzICd3YXJuJyBpbiBwcm9kdWN0aW9uIGJ1aWxkcyAoTk9ERV9FTlY9cHJvZHVjdGlvbikgYW5kXG4gKiAnZGVidWcnIGluIGRldmVsb3BtZW50LiAgSW5kaXZpZHVhbCBtb2R1bGUgbGV2ZWxzIGNhbiBiZSBvdmVycmlkZGVuIGF0XG4gKiBydW50aW1lIHZpYSB0aGUgYnJvd3NlciBjb25zb2xlOlxuICogICBsb2dsZXZlbC5nZXRMb2dnZXIoJ2FwaS1jbGllbnQnKS5zZXRMZXZlbCgndHJhY2UnKTtcbiAqXG4gKiBERVBFTkRFTkNJRVM6IGxvZ2xldmVsIChucG0pXG4gKi9cblxuaW1wb3J0IGxvZ2xldmVsIGZyb20gJ2xvZ2xldmVsJztcblxuLy8gRGVmYXVsdCBsZXZlbDogZGVidWcgaW4gZGV2LCB3YXJuIGluIHByb2QuXG5jb25zdCBERUZBVUxUX0xFVkVMID0gKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKVxuICA/ICd3YXJuJ1xuICA6ICdkZWJ1Zyc7XG5cbmxvZ2xldmVsLnNldERlZmF1bHRMZXZlbChERUZBVUxUX0xFVkVMKTtcblxuLyoqXG4gKiBHZXQgKG9yIGNyZWF0ZSkgYSBuYW1lZCBjaGlsZCBsb2dnZXIuXG4gKiBOYW1lZCBsb2dnZXJzIGluaGVyaXQgdGhlIHJvb3QgZGVmYXVsdCBsZXZlbCBidXQgY2FuIGJlIHR1bmVkIGluZGVwZW5kZW50bHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBNb2R1bGUgbmFtZSwgZS5nLiAnYXBpLWNsaWVudCdcbiAqIEByZXR1cm5zIHtpbXBvcnQoJ2xvZ2xldmVsJykuTG9nZ2VyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKG5hbWUpIHtcbiAgcmV0dXJuIGxvZ2xldmVsLmdldExvZ2dlcihuYW1lKTtcbn1cblxuLy8gRXhwb3NlIHJvb3QgbG9nbGV2ZWwgaW5zdGFuY2Ugb24gZ2xvYmFsVGhpcyBzbyB0aGUgYnJvd3NlciBjb25zb2xlIGNhblxuLy8gYWRqdXN0IGxldmVscyBhdCBydW50aW1lIHdpdGhvdXQgYSBidWlsZCBzdGVwOlxuLy8gICBsb2dsZXZlbC5zZXRMZXZlbCgnZGVidWcnKTtcbi8vICAgbG9nbGV2ZWwuZ2V0TG9nZ2VyKCdhcGktY2xpZW50Jykuc2V0TGV2ZWwoJ3RyYWNlJyk7XG5pZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnKSB7XG4gIGdsb2JhbFRoaXMubG9nbGV2ZWwgPSBsb2dsZXZlbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbG9nbGV2ZWw7XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHV0aWxzLmpzXG4gKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGV4dCBwcm9jZXNzaW5nLCBmb3JtYXR0aW5nLCBhbmQgZGF0YSBtYW5pcHVsYXRpb24uXG4gKiBObyBkZXBlbmRlbmNpZXMgb24gRE9NIG9yIGNvbXBsZXggc3RhdGUuIFB1cmUgZnVuY3Rpb25zLlxuICovXG5cbi8qKlxuICogTm9ybWFsaXplIHdoaXRlc3BhY2UgaW4gdGV4dDpcbiAqIC0gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuICogLSBDb2xsYXBzZSBpbnRlcm5hbCB3aGl0ZXNwYWNlIHRvIHNpbmdsZSBzcGFjZXNcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplVGV4dCh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnRyaW0oKSAgLy8gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJykgIC8vIENvbGxhcHNlIGludGVybmFsIHdoaXRlc3BhY2VcbiAgICAudHJpbSgpO1xufVxuXG4vKipcbiAqIEZvcm1hdCBhIFVuaXggdGltZXN0YW1wIGFzIGh1bWFuLXJlYWRhYmxlIGRhdGUgc3RyaW5nLlxuICogRXhhbXBsZTogMTcwOTIzNjgwMCBcdTIxOTIgXCJNYXIgMSwgMjAyNFwiXG4gKi9cbmZ1bmN0aW9uIGZtdERhdGUodHMpIHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRzICogMTAwMCk7XG4gIHJldHVybiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgeWVhcjogJ251bWVyaWMnIH0pO1xufVxuXG4vKipcbiAqIENsZWFuIEpTT04gcmVzcG9uc2UgYnkgcmVtb3ZpbmcgbWFya2Rvd24gY29kZSBibG9ja3MuXG4gKiBIYW5kbGVzIGNvbW1vbiBwYXR0ZXJuczpcbiAqIC0gYGBganNvbiAuLi4gYGBgXG4gKiAtIGBgYFxuICogICAuLi5cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBjbGVhbkpzb25SZXNwb25zZSh0ZXh0KSB7XG4gIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHJldHVybiB0ZXh0O1xuICBsZXQgY2xlYW5lZCA9IHRleHQ7XG4gIC8vIFJlbW92ZSBgYGBqc29uIHdyYXBwZXJcbiAgY2xlYW5lZCA9IGNsZWFuZWQucmVwbGFjZSgvXmBgYGpzb25cXHMqL2ksICcnKS5yZXBsYWNlKC9gYGBcXHMqJC9pLCAnJyk7XG4gIC8vIFJlbW92ZSBgYGAgd3JhcHBlclxuICBjbGVhbmVkID0gY2xlYW5lZC5yZXBsYWNlKC9eYGBgXFxzKi9pLCAnJykucmVwbGFjZSgvYGBgXFxzKiQvaSwgJycpO1xuICByZXR1cm4gY2xlYW5lZC50cmltKCk7XG59XG5cbi8qKlxuICogRXh0cmFjdCBhbmQgcGFyc2UgdGhlIGZpcnN0IHZhbGlkIEpTT04gb2JqZWN0IGVtYmVkZGVkIGluIGZyZWUtZm9ybSB0ZXh0LlxuICogUmV0dXJucyBudWxsIHdoZW4gbm8gY29tcGxldGUgcGFyc2VhYmxlIG9iamVjdCBpcyBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEZpcnN0SnNvbk9iamVjdCh0ZXh0KSB7XG4gIGlmICh0ZXh0ID09IG51bGwgfHwgdHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjbGVhbmVkID0gY2xlYW5Kc29uUmVzcG9uc2UodGV4dCk7XG5cbiAgZm9yIChsZXQgc3RhcnQgPSAwOyBzdGFydCA8IGNsZWFuZWQubGVuZ3RoOyBzdGFydCArPSAxKSB7XG4gICAgaWYgKGNsZWFuZWRbc3RhcnRdICE9PSAneycpIGNvbnRpbnVlO1xuXG4gICAgbGV0IGRlcHRoID0gMDtcbiAgICBsZXQgaW5TdHJpbmcgPSBmYWxzZTtcbiAgICBsZXQgaXNFc2NhcGVkID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0OyBpbmRleCA8IGNsZWFuZWQubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBjaGFyID0gY2xlYW5lZFtpbmRleF07XG5cbiAgICAgIGlmIChpblN0cmluZykge1xuICAgICAgICBpZiAoaXNFc2NhcGVkKSB7XG4gICAgICAgICAgaXNFc2NhcGVkID0gZmFsc2U7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXIgPT09ICdcXFxcJykge1xuICAgICAgICAgIGlzRXNjYXBlZCA9IHRydWU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXIgPT09ICdcIicpIHtcbiAgICAgICAgICBpblN0cmluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgICAgICBpblN0cmluZyA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhciA9PT0gJ3snKSB7XG4gICAgICAgIGRlcHRoICs9IDE7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhciAhPT0gJ30nKSBjb250aW51ZTtcblxuICAgICAgZGVwdGggLT0gMTtcbiAgICAgIGlmIChkZXB0aCAhPT0gMCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGNsZWFuZWQuc2xpY2Uoc3RhcnQsIGluZGV4ICsgMSk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShjYW5kaWRhdGUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEVzY2FwZSBIVE1MIHNwZWNpYWwgY2hhcmFjdGVycyB0byBwcmV2ZW50IGluamVjdGlvbi5cbiAqIENvbnZlcnRzOiAmIDwgPiBcIiAnXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUh0bWwodGV4dCkge1xuICBpZiAodGV4dCA9PSBudWxsKSByZXR1cm4gJyc7XG4gIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHJldHVybiBlc2NhcGVIdG1sKFN0cmluZyh0ZXh0KSk7XG4gIGNvbnN0IG1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmIzAzOTsnXG4gIH07XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UoL1smPD5cIiddL2csIG0gPT4gbWFwW21dKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRpdGxlIGFuZCBjb21wYW55IGZyb20gam9iIGRlc2NyaXB0aW9uIHRleHQuXG4gKiBQYXR0ZXJuczpcbiAqIC0gXCJUaXRsZSB8IENvbXBhbnlcIlxuICogLSBcIlRpdGxlIGF0IENvbXBhbnlcIlxuICogLSBGaXJzdCBsaW5lIGNvbnRhaW5pbmcgXCJ0aXRsZVwiLCBcInBvc2l0aW9uXCIsIFwicm9sZVwiLCBcImFyY2hpdGVjdFwiLCBldGMuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUaXRsZUFuZENvbXBhbnlGcm9tSm9iVGV4dChqb2JUZXh0KSB7XG4gIGNvbnN0IGxpbmVzID0gam9iVGV4dC5zcGxpdCgnXFxuJykubWFwKGwgPT4gbC50cmltKCkpLmZpbHRlcihsID0+IGwubGVuZ3RoID4gMCk7XG5cbiAgLy8gTG9vayBmb3IgcGF0dGVybnM6IFwiVGl0bGUgfCBDb21wYW55XCIgb3IgXCJUaXRsZSBhdCBDb21wYW55XCJcbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgaWYgKGxpbmUuaW5jbHVkZXMoJ3wnKSkge1xuICAgICAgY29uc3QgW3RpdGxlLCBjb21wYW55XSA9IGxpbmUuc3BsaXQoJ3wnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gICAgICBpZiAodGl0bGUgJiYgY29tcGFueSkge1xuICAgICAgICByZXR1cm4geyB0aXRsZSwgY29tcGFueSB9O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobGluZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCcgYXQgJykpIHtcbiAgICAgIGNvbnN0IFt0aXRsZSwgY29tcGFueV0gPSBsaW5lLnNwbGl0KC9cXHMrYXRcXHMrL2kpLm1hcChzID0+IHMudHJpbSgpKTtcbiAgICAgIGlmICh0aXRsZSAmJiBjb21wYW55KSB7XG4gICAgICAgIHJldHVybiB7IHRpdGxlLCBjb21wYW55IH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbGJhY2s6IHVzZSBmaXJzdCBub24tZW1wdHkgbGluZSBhcyB0aXRsZVxuICBjb25zdCB0aXRsZUxpbmUgPSBsaW5lc1swXTtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogdGl0bGVMaW5lIHx8ICdVbnRpdGxlZCBQb3NpdGlvbicsXG4gICAgY29tcGFueTogbGluZXMuZmluZChsID0+IGwudG9Mb3dlckNhc2UoKSAhPT0gdGl0bGVMaW5lLnRvTG93ZXJDYXNlKCkpIHx8ICdVbmtub3duIENvbXBhbnknXG4gIH07XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHBvc2l0aW9uIGxhYmVsOlxuICogLSBDYXBpdGFsaXplIGVhY2ggd29yZFxuICogLSBSZW1vdmUgdHJhaWxpbmcgXCJyb2xlXCIsIFwicG9zaXRpb25cIiwgXCJ0aXRsZVwiLCBcImpvYlwiXG4gKiBFeGFtcGxlczpcbiAqIC0gXCJzZW5pb3IgZGF0YSBzY2llbnRpc3RcIiBcdTIxOTIgXCJTZW5pb3IgRGF0YSBTY2llbnRpc3RcIlxuICogLSBcImRpcmVjdG9yIG9mIGVuZ2luZWVyaW5nXCIgXHUyMTkyIFwiRGlyZWN0b3Igb2YgRW5naW5lZXJpbmdcIlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQb3NpdGlvbkxhYmVsKHRpdGxlLCBjb21wYW55KSB7XG4gIGxldCBub3JtYWxpemVkID0gdGl0bGVcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKVxuICAgIC5qb2luKCcgJyk7XG5cbiAgLy8gUmVtb3ZlIGNvbW1vbiBzdWZmaXhlc1xuICBub3JtYWxpemVkID0gbm9ybWFsaXplZFxuICAgIC5yZXBsYWNlKC9cXHMrKHJvbGV8cG9zaXRpb258dGl0bGV8am9iKVxccyokL2ksICcnKVxuICAgIC50cmltKCk7XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWQgfHwgJ1Byb2Zlc3Npb25hbCBSb2xlJztcbn1cblxuLyoqXG4gKiBTdHJpcCBIVE1MIHRhZ3MgZnJvbSBzdHJpbmcuXG4gKiBVc2VzIGFuIGluZXJ0IHRlbXBsYXRlIGVsZW1lbnQsIHRoZW4gcmVtb3ZlcyBleGVjdXRhYmxlL25vbi12aXNpYmxlIG5vZGVzLlxuICovXG5mdW5jdGlvbiBzdHJpcEh0bWwoaHRtbCkge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gIHRlbXBsYXRlLmlubmVySFRNTCA9IFN0cmluZyhodG1sID8/ICcnKTtcbiAgdGVtcGxhdGUuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHQsIHN0eWxlLCBub3NjcmlwdCwgdGVtcGxhdGUnKS5mb3JFYWNoKG5vZGUgPT4gbm9kZS5yZW1vdmUoKSk7XG4gIHJldHVybiB0ZW1wbGF0ZS5jb250ZW50LnRleHRDb250ZW50IHx8ICcnO1xufVxuXG4vKipcbiAqIFRydW5jYXRlIHRleHQgdG8gbWF4IGxlbmd0aCB3aXRoIGVsbGlwc2lzLlxuICogUHJlc2VydmVzIHdvcmQgYm91bmRhcmllcyB3aGVuIHBvc3NpYmxlLlxuICovXG5mdW5jdGlvbiB0cnVuY2F0ZVRleHQodGV4dCwgbWF4TGVuZ3RoID0gMTAwKSB7XG4gIGlmICh0ZXh0Lmxlbmd0aCA8PSBtYXhMZW5ndGgpIHJldHVybiB0ZXh0O1xuXG4gIC8vIFRydW5jYXRlIGF0IG1heCBsZW5ndGhcbiAgbGV0IHRydW5jYXRlZCA9IHRleHQuc3Vic3RyaW5nKDAsIG1heExlbmd0aCk7XG5cbiAgLy8gVHJ5IHRvIGZpbmQgdGhlIGxhc3Qgc3BhY2UgdG8gYXZvaWQgY3V0dGluZyB3b3Jkc1xuICBjb25zdCBsYXN0U3BhY2UgPSB0cnVuY2F0ZWQubGFzdEluZGV4T2YoJyAnKTtcbiAgaWYgKGxhc3RTcGFjZSA+IE1hdGguZmxvb3IobWF4TGVuZ3RoICogMC43NSkpIHtcbiAgICB0cnVuY2F0ZWQgPSB0cnVuY2F0ZWQuc3Vic3RyaW5nKDAsIGxhc3RTcGFjZSk7XG4gIH1cblxuICByZXR1cm4gdHJ1bmNhdGVkICsgJ1x1MjAyNic7XG59XG5cbi8qKlxuICogQ2FwaXRhbGl6ZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkLlxuICovXG5mdW5jdGlvbiBjYXBpdGFsaXplV29yZHModGV4dCkge1xuICByZXR1cm4gdGV4dFxuICAgIC5zcGxpdCgnICcpXG4gICAgLm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCkpXG4gICAgLmpvaW4oJyAnKTtcbn1cblxuLyoqXG4gKiBDb25kaXRpb25hbCBwbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqIEV4YW1wbGU6IHBsdXJhbGl6ZSgxLCAnaXRlbScsICdpdGVtcycpIFx1MjE5MiAnaXRlbSdcbiAqICAgICAgICAgIHBsdXJhbGl6ZSgzLCAnaXRlbScsICdpdGVtcycpIFx1MjE5MiAnaXRlbXMnXG4gKi9cbmZ1bmN0aW9uIHBsdXJhbGl6ZShjb3VudCwgc2luZ3VsYXIsIHBsdXJhbCkge1xuICByZXR1cm4gY291bnQgPT09IDEgPyBzaW5ndWxhciA6IHBsdXJhbDtcbn1cblxuLyoqXG4gKiBIdW1hbi1yZWFkYWJsZSB0aW1lIGR1cmF0aW9uLlxuICogRXhhbXBsZTogNTAwMCBcdTIxOTIgXCI1IHNlY29uZHNcIiwgNjUwMDAgXHUyMTkyIFwiMSBtaW51dGVcIlxuICovXG5mdW5jdGlvbiBmb3JtYXREdXJhdGlvbihtcykge1xuICBjb25zdCBzZWNvbmRzID0gTWF0aC5mbG9vcihtcyAvIDEwMDApO1xuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApO1xuICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IobWludXRlcyAvIDYwKTtcblxuICBpZiAoaG91cnMgPiAwKSByZXR1cm4gYCR7aG91cnN9aCAke21pbnV0ZXMgJSA2MH1tYDtcbiAgaWYgKG1pbnV0ZXMgPiAwKSByZXR1cm4gYCR7bWludXRlc31tICR7c2Vjb25kcyAlIDYwfXNgO1xuICByZXR1cm4gYCR7c2Vjb25kc31zYDtcbn1cblxuLyoqXG4gKiBPcmRpbmFsIG51bWJlciBzdWZmaXguXG4gKiBFeGFtcGxlOiAxIFx1MjE5MiBcIjFzdFwiLCAyIFx1MjE5MiBcIjJuZFwiLCAzIFx1MjE5MiBcIjNyZFwiLCA0IFx1MjE5MiBcIjR0aFwiXG4gKi9cbmZ1bmN0aW9uIG9yZGluYWwobikge1xuICBjb25zdCBzID0gWyd0aCcsICdzdCcsICduZCcsICdyZCddO1xuICBjb25zdCB2ID0gbiAlIDEwMDtcbiAgcmV0dXJuIG4gKyAoc1sodiAtIDIwKSAlIDEwXSB8fCBzW3ZdIHx8IHNbMF0pO1xufVxuXG4vLyBVdGlsaXR5IGZ1bmN0aW9ucyBmb3Igc2Vzc2lvbiBtYW5hZ2VtZW50IGFuZCBmb3JtYXR0aW5nXG5cbi8vIEZ1bGwtbGVuZ3RoIHBoYXNlIGxhYmVscyBcdTIwMTQgdXNlZCBieSB3b3JrZmxvdyBzdGVwIGRpc3BsYXksIHN0YXR1cyB0ZXh0LCBldGMuXG5jb25zdCBTRVNTSU9OX1BIQVNFX0xBQkVMUyA9IHtcbiAgaW5pdDogICAgICAgICAgICAgJ0dldHRpbmcgU3RhcnRlZCcsXG4gIGpvYl9hbmFseXNpczogICAgICdKb2IgQW5hbHlzaXMnLFxuICBjdXN0b21pemF0aW9uOiAgICAnQ3VzdG9taXNhdGlvbicsXG4gIHJld3JpdGVfcmV2aWV3OiAgICdSZXdyaXRlIFJldmlldycsXG4gIHNwZWxsX2NoZWNrOiAgICAgICdTcGVsbCBDaGVjaycsXG4gIGdlbmVyYXRpb246ICAgICAgICdHZW5lcmF0aW9uJyxcbiAgbGF5b3V0X3JldmlldzogICAgJ0xheW91dCBSZXZpZXcnLFxuICByZWZpbmVtZW50OiAgICAgICAnRmluYWxpc2UnLFxuICBmaW5hbF9nZW5lcmF0aW9uOiAnRmluYWwgR2VuZXJhdGlvbicsXG59O1xuXG4vLyBBYmJyZXZpYXRlZCBwaGFzZSBsYWJlbHMgXHUyMDE0IHVzZWQgYnkgdGhlIGNvbXBhY3Qgc2Vzc2lvbi1zd2l0Y2hlciBVSS5cbi8vIEludGVudGlvbmFsbHkgc2VwYXJhdGUgZnJvbSBTRVNTSU9OX1BIQVNFX0xBQkVMUzogdGhlIHR3byBzZXRzIHNlcnZlIGRpZmZlcmVudFxuLy8gVUkgY29udGV4dHMgKHNwYWNlLWNvbnN0cmFpbmVkIGhlYWRlciBjaGlwIHZzLiBmdWxsIHdvcmtmbG93IHN0ZXAgbGFiZWwpLlxuY29uc3QgU0VTU0lPTl9QSEFTRV9MQUJFTFNfU0hPUlQgPSB7XG4gIGluaXQ6ICAgICAgICAgICAgICdTZXR1cCcsXG4gIGpvYl9hbmFseXNpczogICAgICdBbmFseXNpcycsXG4gIGN1c3RvbWl6YXRpb246ICAgICdDdXN0b21pc2luZycsXG4gIHJld3JpdGVfcmV2aWV3OiAgICdSZXdyaXRlcycsXG4gIHNwZWxsX2NoZWNrOiAgICAgICdTcGVsbCBDaGVjaycsXG4gIGdlbmVyYXRpb246ICAgICAgICdHZW5lcmF0ZScsXG4gIGxheW91dF9yZXZpZXc6ICAgICdMYXlvdXQnLFxuICByZWZpbmVtZW50OiAgICAgICAnRmluYWxpc2UnLFxuICBmaW5hbF9nZW5lcmF0aW9uOiAnRmluYWwgR2VuJyxcbn07XG5cbi8qKlxuICogRm9ybWF0IHNlc3Npb24gcGhhc2UgbGFiZWxzIChmdWxsIGZvcm0pLlxuICogQHBhcmFtIHtzdHJpbmd9IHBoYXNlIC0gVGhlIHBoYXNlIHN0cmluZyB0byBmb3JtYXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBmb3JtYXR0ZWQgcGhhc2UgbGFiZWwuXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFNlc3Npb25QaGFzZUxhYmVsKHBoYXNlKSB7XG4gIGlmICghcGhhc2UpIHJldHVybiAnaW5pdCc7XG4gIHJldHVybiBTRVNTSU9OX1BIQVNFX0xBQkVMU1twaGFzZV0gfHwgU3RyaW5nKHBoYXNlKS5yZXBsYWNlKC9fL2csICcgJyk7XG59XG5cbi8qKlxuICogRm9ybWF0IHNlc3Npb24gdGltZXN0YW1wcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0aW1lc3RhbXAgLSBUaGUgdGltZXN0YW1wIHRvIGZvcm1hdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gRm9ybWF0dGluZyBvcHRpb25zLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5pbmNsdWRlVGltZT10cnVlXSAtIFdoZXRoZXIgdG8gaW5jbHVkZSB0aW1lIGluIHRoZSBvdXRwdXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBmb3JtYXR0ZWQgdGltZXN0YW1wLlxuICovXG5mdW5jdGlvbiBmb3JtYXRTZXNzaW9uVGltZXN0YW1wKHRpbWVzdGFtcCwgeyBpbmNsdWRlVGltZSA9IHRydWUgfSA9IHt9KSB7XG4gIGlmICghdGltZXN0YW1wKSByZXR1cm4gJ1x1MjAxNCc7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCkudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgbW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAuLi4oaW5jbHVkZVRpbWUgPyB7IGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnMi1kaWdpdCcgfSA6IHt9KSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBTdHJpbmcodGltZXN0YW1wKS5yZXBsYWNlKCdUJywgJyAnKS5zbGljZSgwLCBpbmNsdWRlVGltZSA/IDE2IDogMTApO1xuICB9XG59XG5cbi8vIFN0cnVjdHVyZWQgbG9nZ2luZyBoZWxwZXIgKGdsb2JhbCBhbmQgdGVzdC1mcmllbmRseSkuXG5jb25zdCBMT0dfTEVWRUxTID0geyBkZWJ1ZzogMTAsIGluZm86IDIwLCB3YXJuOiAzMCwgZXJyb3I6IDQwIH07XG5jb25zdCBERUZBVUxUX0xPR19MRVZFTCA9ICdpbmZvJztcblxuZnVuY3Rpb24gY3JlYXRlTG9nRW50cnkobGV2ZWwsIG1lc3NhZ2UsIG1ldGFkYXRhID0ge30pIHtcbiAgY29uc3QgZW50cnkgPSB7XG4gICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgbGV2ZWwsXG4gICAgbWVzc2FnZTogU3RyaW5nKG1lc3NhZ2UpLFxuICAgIC4uLm1ldGFkYXRhLFxuICB9O1xuICByZXR1cm4gZW50cnk7XG59XG5cbmNvbnN0IGxvZ2dlciA9IHtcbiAgbGV2ZWw6IERFRkFVTFRfTE9HX0xFVkVMLFxuXG4gIHNldExldmVsKG5ld0xldmVsKSB7XG4gICAgaWYgKExPR19MRVZFTFNbbmV3TGV2ZWxdICE9IG51bGwpIHtcbiAgICAgIHRoaXMubGV2ZWwgPSBuZXdMZXZlbDtcbiAgICB9XG4gIH0sXG5cbiAgc2hvdWxkTG9nKGxldmVsKSB7XG4gICAgaWYgKExPR19MRVZFTFNbbGV2ZWxdID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gTE9HX0xFVkVMU1tsZXZlbF0gPj0gTE9HX0xFVkVMU1t0aGlzLmxldmVsXTtcbiAgfSxcblxuICBsb2cobGV2ZWwsIG1lc3NhZ2UsIG1ldGFkYXRhID0ge30pIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkTG9nKGxldmVsKSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBlbnRyeSA9IGNyZWF0ZUxvZ0VudHJ5KGxldmVsLCBtZXNzYWdlLCBtZXRhZGF0YSk7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gSlNPTi5zdHJpbmdpZnkoZW50cnkpO1xuXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKGxldmVsID09PSAnZXJyb3InKSBjb25zb2xlLmVycm9yKGZvcm1hdHRlZCk7XG4gICAgICBlbHNlIGlmIChsZXZlbCA9PT0gJ3dhcm4nKSBjb25zb2xlLndhcm4oZm9ybWF0dGVkKTtcbiAgICAgIGVsc2UgY29uc29sZS5sb2coZm9ybWF0dGVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cnk7XG4gIH0sXG5cbiAgZGVidWcobWVzc2FnZSwgbWV0YWRhdGEgPSB7fSkgeyByZXR1cm4gdGhpcy5sb2coJ2RlYnVnJywgbWVzc2FnZSwgbWV0YWRhdGEpOyB9LFxuICBpbmZvKG1lc3NhZ2UsIG1ldGFkYXRhID0ge30pIHsgcmV0dXJuIHRoaXMubG9nKCdpbmZvJywgbWVzc2FnZSwgbWV0YWRhdGEpOyB9LFxuICB3YXJuKG1lc3NhZ2UsIG1ldGFkYXRhID0ge30pIHsgcmV0dXJuIHRoaXMubG9nKCd3YXJuJywgbWVzc2FnZSwgbWV0YWRhdGEpOyB9LFxuICBlcnJvcihtZXNzYWdlLCBtZXRhZGF0YSA9IHt9KSB7IHJldHVybiB0aGlzLmxvZygnZXJyb3InLCBtZXNzYWdlLCBtZXRhZGF0YSk7IH0sXG5cbiAgZXZlbnQoYWN0aW9uLCBtZXRhZGF0YSA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuaW5mbyhgZXZlbnQ6JHthY3Rpb259YCwgeyBhY3Rpb24sIC4uLm1ldGFkYXRhIH0pO1xuICB9LFxufTtcblxuaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJykge1xuICBnbG9iYWxUaGlzLmxvZ2dlciA9IGxvZ2dlcjtcbn1cblxuZXhwb3J0IHtcbiAgbm9ybWFsaXplVGV4dCwgZm10RGF0ZSwgY2xlYW5Kc29uUmVzcG9uc2UsIGV4dHJhY3RGaXJzdEpzb25PYmplY3QsIGVzY2FwZUh0bWwsXG4gIGV4dHJhY3RUaXRsZUFuZENvbXBhbnlGcm9tSm9iVGV4dCwgbm9ybWFsaXplUG9zaXRpb25MYWJlbCxcbiAgc3RyaXBIdG1sLCB0cnVuY2F0ZVRleHQsIGNhcGl0YWxpemVXb3JkcywgcGx1cmFsaXplLFxuICBmb3JtYXREdXJhdGlvbiwgb3JkaW5hbCxcbiAgU0VTU0lPTl9QSEFTRV9MQUJFTFMsIFNFU1NJT05fUEhBU0VfTEFCRUxTX1NIT1JULFxuICBmb3JtYXRTZXNzaW9uUGhhc2VMYWJlbCxcbiAgbG9nZ2VyLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogYXBpLWNsaWVudC5qc1xuICogQ2VudHJhbGl6ZWQgSFRUUCBjb21tdW5pY2F0aW9uIGxheWVyLiBBbGwgQVBJIGNhbGxzIGdvIHRocm91Z2ggYXBpQ2FsbCgpLlxuICogUHJvdmlkZXMgZXJyb3IgaGFuZGxpbmcsIGxvZ2dpbmcsIGFuZCByZXRyeSBsb2dpYy5cbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBoYW5kbGU0MDlDb25mbGljdCB9IGZyb20gJy4vZmV0Y2gtdXRpbHMuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdhcGktY2xpZW50Jyk7XG5cbi8qKlxuICogQ2VudHJhbGl6ZWQgbG9jYWxTdG9yYWdlIGtleSBtYW5hZ2VtZW50IHRvIGF2b2lkIGR1cGxpY2F0aW9uXG4gKi9cbmNvbnN0IFN0b3JhZ2VLZXlzID0ge1xuICBTRVNTSU9OX0lEOiAgICAgICAgICAgICAgJ2N2LWJ1aWxkZXItc2Vzc2lvbi1pZCcsXG4gIFNFU1NJT05fUEFUSDogICAgICAgICAgICAnY3YtYnVpbGRlci1zZXNzaW9uLXBhdGgnLFxuICBUQUJfREFUQTogICAgICAgICAgICAgICAgJ2N2LWJ1aWxkZXItdGFiLWRhdGEnLFxuICBDVVJSRU5UX1RBQjogICAgICAgICAgICAgJ2N2LWJ1aWxkZXItY3VycmVudC10YWInLFxuICBDSEFUX0NPTExBUFNFRDogICAgICAgICAgJ2N2LWJ1aWxkZXItY2hhdC1jb2xsYXBzZWQnLFxuICBMTE1fRElTQ0xPU1VSRV9TSE9XTjogICAgJ2N2LWJ1aWxkZXItbGxtLWRpc2Nsb3N1cmUtc2hvd24nLFxuICBFQVJMWV9QUkVWSUVXX0NPTExBUFNFRDogJ2N2LWJ1aWxkZXItZWFybHktcHJldmlldy1jb2xsYXBzZWQnLFxufTtcblxuY29uc3QgT1dORVJfVE9LRU5fS0VZID0gJ2N2LWJ1aWxkZXItb3duZXItdG9rZW4nO1xuXG5mdW5jdGlvbiBnZXRTZXNzaW9uSWRGcm9tVVJMKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXdpbmRvdy5sb2NhdGlvbikgcmV0dXJuIG51bGw7XG4gIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgnc2Vzc2lvbicpO1xufVxuXG5mdW5jdGlvbiBnZXRPd25lclRva2VuKCkge1xuICBpZiAodHlwZW9mIHNlc3Npb25TdG9yYWdlID09PSAndW5kZWZpbmVkJykgcmV0dXJuIG51bGw7XG4gIGxldCB0b2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oT1dORVJfVE9LRU5fS0VZKTtcbiAgaWYgKCF0b2tlbikge1xuICAgIGlmICh0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY3J5cHRvLnJhbmRvbVVVSUQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRva2VuID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9rZW4gPSBgdGFiLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zbGljZSgyLCAxMCl9YDtcbiAgICB9XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShPV05FUl9UT0tFTl9LRVksIHRva2VuKTtcbiAgfVxuICByZXR1cm4gdG9rZW47XG59XG5cbmZ1bmN0aW9uIGdldFNjb3BlZFRhYkRhdGFTdG9yYWdlS2V5KHNlc3Npb25JZCA9IG51bGwpIHtcbiAgY29uc3Qgc2NvcGVkU2Vzc2lvbklkID0gc2Vzc2lvbklkIHx8IGdldFNlc3Npb25JZEZyb21VUkwoKTtcbiAgcmV0dXJuIHNjb3BlZFNlc3Npb25JZFxuICAgID8gYCR7U3RvcmFnZUtleXMuVEFCX0RBVEF9LSR7c2NvcGVkU2Vzc2lvbklkfWBcbiAgICA6IFN0b3JhZ2VLZXlzLlRBQl9EQVRBO1xufVxuXG5mdW5jdGlvbiBfaXNTZXNzaW9uTWFuYWdlbWVudFBhdGgocGF0aG5hbWUpIHtcbiAgcmV0dXJuIHBhdGhuYW1lID09PSAnL2FwaS9zZXNzaW9ucy9uZXcnXG4gICAgfHwgcGF0aG5hbWUgPT09ICcvYXBpL3Nlc3Npb25zL2NsYWltJ1xuICAgIHx8IHBhdGhuYW1lID09PSAnL2FwaS9zZXNzaW9ucy90YWtlb3Zlcic7XG59XG5cbmZ1bmN0aW9uIF9idWlsZFNlc3Npb25Bd2FyZVJlcXVlc3QoaW5wdXQsIGluaXQgPSB7fSkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXdpbmRvdy5sb2NhdGlvbikge1xuICAgIHJldHVybiBbaW5wdXQsIGluaXRdO1xuICB9XG5cbiAgY29uc3QgdXJsID0gbmV3IFVSTCh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gaW5wdXQgOiBpbnB1dC51cmwsIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICBpZiAoIXVybC5wYXRobmFtZS5zdGFydHNXaXRoKCcvYXBpLycpKSB7XG4gICAgcmV0dXJuIFtpbnB1dCwgaW5pdF07XG4gIH1cblxuICBjb25zdCBvd25lclRva2VuID0gZ2V0T3duZXJUb2tlbigpO1xuICBpZiAoIXVybC5zZWFyY2hQYXJhbXMuaGFzKCdvd25lcl90b2tlbicpICYmICFfaXNTZXNzaW9uTWFuYWdlbWVudFBhdGgodXJsLnBhdGhuYW1lKSAmJiBvd25lclRva2VuKSB7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ293bmVyX3Rva2VuJywgb3duZXJUb2tlbik7XG4gIH1cblxuICBjb25zdCBzZXNzaW9uSWQgPSBnZXRTZXNzaW9uSWRGcm9tVVJMKCk7XG4gIGlmICghc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIFt1cmwudG9TdHJpbmcoKSwgaW5pdF07XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSAoaW5pdC5tZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IG5leHRJbml0ID0geyAuLi5pbml0IH07XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbml0LmhlYWRlcnMgfHwge30pO1xuXG4gIGlmICghdXJsLnNlYXJjaFBhcmFtcy5oYXMoJ3Nlc3Npb25faWQnKSAmJiAhX2lzU2Vzc2lvbk1hbmFnZW1lbnRQYXRoKHVybC5wYXRobmFtZSkpIHtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnc2Vzc2lvbl9pZCcsIHNlc3Npb25JZCk7XG4gIH1cblxuICBjb25zdCBuZWVkc0JvZHlDb250ZXh0ID0gIVsnR0VUJywgJ0hFQUQnXS5pbmNsdWRlcyhtZXRob2QpO1xuICBjb25zdCBib2R5ID0gbmV4dEluaXQuYm9keTtcbiAgY29uc3QgaXNGb3JtRGF0YSA9IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhO1xuICBjb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIGJvZHkgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXM7XG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpIHx8ICcnO1xuXG4gIGlmIChuZWVkc0JvZHlDb250ZXh0ICYmICFpc0Zvcm1EYXRhICYmICFpc1VSTFNlYXJjaFBhcmFtcykge1xuICAgIGxldCBwYXlsb2FkID0ge307XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5LnRyaW0oKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGF5bG9hZCA9IEpTT04ucGFyc2UoYm9keSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIHJldHVybiBbdXJsLnRvU3RyaW5nKCksIG5leHRJbml0XTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgICAgcGF5bG9hZCA9IHt9O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdvYmplY3QnKSB7XG4gICAgICBwYXlsb2FkID0geyAuLi5ib2R5IH07XG4gICAgfVxuXG4gICAgaWYgKHBheWxvYWQuc2Vzc2lvbl9pZCA9PSBudWxsICYmICFfaXNTZXNzaW9uTWFuYWdlbWVudFBhdGgodXJsLnBhdGhuYW1lKSkge1xuICAgICAgcGF5bG9hZC5zZXNzaW9uX2lkID0gc2Vzc2lvbklkO1xuICAgIH1cbiAgICBpZiAocGF5bG9hZC5vd25lcl90b2tlbiA9PSBudWxsICYmICFfaXNTZXNzaW9uTWFuYWdlbWVudFBhdGgodXJsLnBhdGhuYW1lKSkge1xuICAgICAgaWYgKG93bmVyVG9rZW4pIHBheWxvYWQub3duZXJfdG9rZW4gPSBvd25lclRva2VuO1xuICAgIH1cblxuICAgIG5leHRJbml0LmJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTtcbiAgICBpZiAoIWNvbnRlbnRUeXBlKSB7XG4gICAgICBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICB9XG4gIH1cblxuICBuZXh0SW5pdC5oZWFkZXJzID0gaGVhZGVycztcbiAgcmV0dXJuIFt1cmwudG9TdHJpbmcoKSwgbmV4dEluaXRdO1xufVxuXG5jb25zdCBfbmF0aXZlRmV0Y2ggPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmZldGNoID09PSAnZnVuY3Rpb24nXG4gID8gd2luZG93LmZldGNoLmJpbmQod2luZG93KVxuICA6ICh0eXBlb2YgZ2xvYmFsVGhpcy5mZXRjaCA9PT0gJ2Z1bmN0aW9uJyA/IGdsb2JhbFRoaXMuZmV0Y2guYmluZChnbG9iYWxUaGlzKSA6IG51bGwpO1xuXG5hc3luYyBmdW5jdGlvbiBzZXNzaW9uQXdhcmVGZXRjaChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gIGlmIChfbmF0aXZlRmV0Y2ggPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZmV0Y2ggaXMgbm90IGF2YWlsYWJsZScpO1xuICB9XG4gIGNvbnN0IFtuZXh0SW5wdXQsIG5leHRJbml0XSA9IF9idWlsZFNlc3Npb25Bd2FyZVJlcXVlc3QoaW5wdXQsIGluaXQpO1xuICBsZXQgcmVzcCA9IGF3YWl0IF9uYXRpdmVGZXRjaChuZXh0SW5wdXQsIG5leHRJbml0KTtcbiAgaWYgKHJlc3Auc3RhdHVzID09PSA0MDkpIHtcbiAgICBjb25zdCBzaG91bGRSZXRyeSA9IGF3YWl0IGhhbmRsZTQwOUNvbmZsaWN0KG5leHRJbnB1dCwgbmV4dEluaXQsIHJlc3ApO1xuICAgIGlmIChzaG91bGRSZXRyeSkgcmVzcCA9IGF3YWl0IF9uYXRpdmVGZXRjaChuZXh0SW5wdXQsIG5leHRJbml0KTtcbiAgfVxuICByZXR1cm4gcmVzcDtcbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZmV0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgd2luZG93LmZldGNoID0gc2Vzc2lvbkF3YXJlRmV0Y2g7XG59XG5cbi8qKlxuICogQmFzZSBBUEkgY2FsbCBmdW5jdGlvbiB3aXRoIGVycm9yIGhhbmRsaW5nIGFuZCBsb2dnaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCAtIEhUVFAgbWV0aG9kIChHRVQsIFBPU1QsIGV0Yy4pXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5kcG9pbnQgLSBBUEkgZW5kcG9pbnQgKGUuZy4sICcvYXBpL3N0YXR1cycpXG4gKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIFJlcXVlc3QgYm9keSBkYXRhIChmb3IgUE9TVC9QVVQpXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxvYmplY3Q+fSBQYXJzZWQgSlNPTiByZXNwb25zZVxuICovXG5hc3luYyBmdW5jdGlvbiBhcGlDYWxsKG1ldGhvZCwgZW5kcG9pbnQsIGRhdGEgPSBudWxsKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgbWV0aG9kLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XG4gIH07XG5cbiAgaWYgKGRhdGEgJiYgKG1ldGhvZCA9PT0gJ1BPU1QnIHx8IG1ldGhvZCA9PT0gJ1BVVCcpKSB7XG4gICAgb3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2Vzc2lvbkF3YXJlRmV0Y2goZW5kcG9pbnQsIG9wdGlvbnMpO1xuXG4gICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCAoc2Vzc2lvbiBhbHJlYWR5IGFjdGl2ZSlcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDkpIHtcbiAgICAgIGxvZy53YXJuKGBTZXNzaW9uIGNvbmZsaWN0IG9uICR7ZW5kcG9pbnR9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nlc3Npb24gYWxyZWFkeSBhY3RpdmUgaW4gYW5vdGhlciB0YWInKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBsb2cuZXJyb3IoYEFQSSBlcnJvciBvbiAke21ldGhvZH0gJHtlbmRwb2ludH06YCwgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSByZXNwb25zZS5zdGF0dXNUZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZXJyb3JKc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBpZiAoZXJyb3JKc29uICYmIHR5cGVvZiBlcnJvckpzb24gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3JKc29uLmVycm9yIHx8IGVycm9ySnNvbi5tZXNzYWdlIHx8IGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gc3RhdHVzIHRleHQgd2hlbiByZXNwb25zZSBpcyBub3QgSlNPTi5cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtyZXNwb25zZS5zdGF0dXN9OiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBqc29uO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcihgQVBJIGNhbGwgZmFpbGVkOiAke21ldGhvZH0gJHtlbmRwb2ludH1gLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT1cbi8vIFNlc3Npb24gTWFuYWdlbWVudFxuLy8gPT09PT09PT09PT09PT09PT09PT1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU2Vzc2lvbigpIHtcbiAgcmV0dXJuIGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9zZXNzaW9ucy9uZXcnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hTdGF0dXMoKSB7XG4gIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGFwaUNhbGwoJ0dFVCcsICcvYXBpL3N0YXR1cycpO1xuXG4gIC8vIEtlZXAgcHJvdmlkZXIvYXV0aCBVSSBpbiBzeW5jIHdoZW5ldmVyIHN0YXR1cyBpcyBmZXRjaGVkLlxuICBjb25zdCBwcm92aWRlciA9IHN0YXR1cz8ubGxtX3Byb3ZpZGVyIHx8IG51bGw7XG4gIGlmIChwcm92aWRlcikge1xuICAgIGdsb2JhbFRoaXMuY3VycmVudFByb3ZpZGVyID0gcHJvdmlkZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLnVwZGF0ZUF1dGhCYWRnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGdsb2JhbFRoaXMudXBkYXRlQXV0aEJhZGdlKHN0YXR1cz8uY29waWxvdF9hdXRoIHx8IHt9LCBwcm92aWRlcik7XG4gIH1cblxuICAvLyBVcGRhdGUgd29ya2Zsb3cgc3RlcCBiYXIgKGNsaWNrYWJsZS9jb21wbGV0ZWQvYWN0aXZlIHN0YXRlKSBvbiBldmVyeSBzdGF0dXMgZmV0Y2guXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy51cGRhdGVXb3JrZmxvd1N0ZXBzID09PSAnZnVuY3Rpb24nICYmIHN0YXR1cyAmJiAhc3RhdHVzLl9lcnJvcikge1xuICAgIGdsb2JhbFRoaXMudXBkYXRlV29ya2Zsb3dTdGVwcyhzdGF0dXMpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXR1cztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT1cbi8vIFNldHRpbmdzXG4vLyA9PT09PT09PT09PT09PT09PT09PVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFNldHRpbmdzKCkge1xuICByZXR1cm4gYXBpQ2FsbCgnR0VUJywgJy9hcGkvc2V0dGluZ3MnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlU2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgcmV0dXJuIGFwaUNhbGwoJ1BVVCcsICcvYXBpL3NldHRpbmdzJywgeyBzZXR0aW5ncyB9KTtcbn1cblxuZXhwb3J0IHtcbiAgU3RvcmFnZUtleXMsXG4gIE9XTkVSX1RPS0VOX0tFWSxcbiAgYXBpQ2FsbCxcbiAgZ2V0U2Vzc2lvbklkRnJvbVVSTCxcbiAgZ2V0T3duZXJUb2tlbixcbiAgZ2V0U2NvcGVkVGFiRGF0YVN0b3JhZ2VLZXksXG4gIHNlc3Npb25Bd2FyZUZldGNoLFxuICBjcmVhdGVTZXNzaW9uLFxuICBmZXRjaFN0YXR1cyxcbiAgZmV0Y2hTZXR0aW5ncywgdXBkYXRlU2V0dGluZ3MsXG59O1xuXG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9mZXRjaC11dGlscy5qc1xuICogR2xvYmFsIGZldGNoIGludGVyY2VwdG9yLCA0MDktY29uZmxpY3QgcmV0cnkgcXVldWUsIExMTSBidXN5IG92ZXJsYXksIGFuZFxuICogdGhlIHNldExvYWRpbmcgaGVscGVyIHRoYXQgZHJpdmVzIGJ1dHRvbnMvcHJvZ3Jlc3MgYmFyL2Fib3J0IGNvbnRyb2xsZXIuXG4gKlxuICogREVQRU5ERU5DSUVTOiB1aS1jb3JlLmpzIGV4cG9ydHMgKHRyYXBGb2N1cyBldGMuKSBhdmFpbGFibGUgb24gZ2xvYmFsVGhpcy5cbiAqICAgICAgICAgICAgICAgc2V0TG9hZGluZyBjYWxscyBfdXBkYXRlTExNT3ZlcmxheSAoZGVmaW5lZCBoZXJlKSBhbmRcbiAqICAgICAgICAgICAgICAgYXBwZW5kTWVzc2FnZSAoZGVmaW5lZCBpbiBtZXNzYWdlLXF1ZXVlLmpzLCBvbiBnbG9iYWxUaGlzKS5cbiAqL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIDQwOSBDb25mbGljdCByZXRyeSBxdWV1ZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IF9jb25mbGljdFJldHJ5UXVldWUgPSBbXTtcbmxldCAgIF9jb25mbGljdFRpbWVySWQgICAgPSBudWxsO1xubGV0ICAgX2NvbmZsaWN0Q291bnRkb3duICA9IDA7XG5cbi8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIHJlcXVlc3Qgc2hvdWxkIGJlIGludGVyY2VwdGVkIGJ5IHRoZSA0MDkgaGFuZGxlci4gKi9cbmZ1bmN0aW9uIF9zaG91bGRIYW5kbGVCdXN5Q29uZmxpY3QoYXJncykge1xuICB0cnkge1xuICAgIGNvbnN0IHJhd1VybCA9IHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyA/IGFyZ3NbMF0gOiBhcmdzWzBdPy51cmw7XG4gICAgaWYgKCFyYXdVcmwpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmF3VXJsLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICByZXR1cm4gdXJsLnBhdGhuYW1lICE9PSAnL2FwaS9zZXNzaW9ucy9jbGFpbScgJiYgdXJsLnBhdGhuYW1lICE9PSAnL2FwaS9zZXNzaW9ucy90YWtlb3Zlcic7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEhhbmRsZSBhIDQwOSBDb25mbGljdCByZXNwb25zZTogc2hvdyB0aGUgYW1iZXIgYmFubmVyIGFuZCBhd2FpdCB1c2VyIGNob2ljZS5cbiAqIFJldHVybnMgYSBQcm9taXNlPGJvb2xlYW4+IFx1MjAxNCB0cnVlIG1lYW5zIFwicmV0cnlcIiwgZmFsc2UgbWVhbnMgXCJkaXNtaXNzXCIuXG4gKiBDYWxsZWQgZnJvbSBhcGktY2xpZW50LmpzIGluc2lkZSBzZXNzaW9uQXdhcmVGZXRjaCBzbyB0aGUgZnVsbCBmZXRjaCBwaXBlbGluZVxuICogaXMgb3duZWQgYnkgYSBzaW5nbGUgbW9kdWxlLWxldmVsIHdpbmRvdy5mZXRjaCBhc3NpZ25tZW50IHRoZXJlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfFJlcXVlc3R9IGlucHV0IC0gVGhlIHJlcXVlc3QgVVJML29iamVjdCAodXNlZCBmb3IgcGF0aCBmaWx0ZXJpbmcpLlxuICogQHBhcmFtIHtvYmplY3R9IGluaXQgLSBUaGUgZmV0Y2ggaW5pdCBvcHRpb25zLlxuICogQHBhcmFtIHtSZXNwb25zZX0gW3Jlc3BvbnNlXSAtIFRoZSA0MDkgcmVzcG9uc2UgKHVzZWQgdG8gY2hlY2sgY29uZmxpY3RfdHlwZSkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZTQwOUNvbmZsaWN0KGlucHV0LCBpbml0LCByZXNwb25zZSkge1xuICBpZiAoIV9zaG91bGRIYW5kbGVCdXN5Q29uZmxpY3QoW2lucHV0LCBpbml0XSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKHJlc3BvbnNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXNwb25zZS5jbG9uZSgpLmpzb24oKTtcbiAgICAgIGlmIChib2R5ICYmIGJvZHkuY29uZmxpY3RfdHlwZSAmJiBib2R5LmNvbmZsaWN0X3R5cGUgIT09ICdzZXNzaW9uX293bmVyc2hpcCcpIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChfKSB7IC8qIG5vbi1KU09OIGJvZHkgXHUyMDE0IHByb2NlZWQgdG8gYmFubmVyICovIH1cbiAgfVxuICBzaG93U2Vzc2lvbkNvbmZsaWN0QmFubmVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IF9jb25mbGljdFJldHJ5UXVldWUucHVzaChyZXNvbHZlKSk7XG59XG5cbmZ1bmN0aW9uIHNob3dTZXNzaW9uQ29uZmxpY3RCYW5uZXIoKSB7XG4gIGNvbnN0IGJhbm5lciAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nlc3Npb24tY29uZmxpY3QtYmFubmVyJyk7XG4gIGNvbnN0IGJhbm5lclRleHQgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZsaWN0LWJhbm5lci10ZXh0Jyk7XG4gIGNvbnN0IGNvdW50ZG93bkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZsaWN0LWNvdW50ZG93bicpO1xuICBpZiAoIWJhbm5lcikgcmV0dXJuO1xuICBiYW5uZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gIGlmIChfY29uZmxpY3RUaW1lcklkKSB7IGNsZWFySW50ZXJ2YWwoX2NvbmZsaWN0VGltZXJJZCk7IF9jb25mbGljdFRpbWVySWQgPSBudWxsOyB9XG4gIF9jb25mbGljdENvdW50ZG93biA9IDMwO1xuICBpZiAoYmFubmVyVGV4dCkgIGJhbm5lclRleHQudGV4dENvbnRlbnQgID0gJ1x1MjZBMCBBbm90aGVyIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcy4gQXV0by1yZXRyeWluZyBpbiAnO1xuICBpZiAoY291bnRkb3duRWwpIGNvdW50ZG93bkVsLnRleHRDb250ZW50ID0gYCR7X2NvbmZsaWN0Q291bnRkb3dufXNcdTIwMjZgO1xuICBfY29uZmxpY3RUaW1lcklkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIF9jb25mbGljdENvdW50ZG93bi0tO1xuICAgIGlmIChfY29uZmxpY3RDb3VudGRvd24gPD0gMCkge1xuICAgICAgY2xlYXJJbnRlcnZhbChfY29uZmxpY3RUaW1lcklkKTsgX2NvbmZsaWN0VGltZXJJZCA9IG51bGw7XG4gICAgICBjb25mbGljdFJldHJ5Tm93KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjb3VudGRvd25FbCkgY291bnRkb3duRWwudGV4dENvbnRlbnQgPSBgJHtfY29uZmxpY3RDb3VudGRvd259c1x1MjAyNmA7XG4gICAgfVxuICB9LCAxMDAwKTtcbn1cblxuZnVuY3Rpb24gY29uZmxpY3RSZXRyeU5vdygpIHtcbiAgaWYgKF9jb25mbGljdFRpbWVySWQpIHsgY2xlYXJJbnRlcnZhbChfY29uZmxpY3RUaW1lcklkKTsgX2NvbmZsaWN0VGltZXJJZCA9IG51bGw7IH1cbiAgY29uc3QgYmFubmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nlc3Npb24tY29uZmxpY3QtYmFubmVyJyk7XG4gIGlmIChiYW5uZXIpIGJhbm5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB3aGlsZSAoX2NvbmZsaWN0UmV0cnlRdWV1ZS5sZW5ndGgpIF9jb25mbGljdFJldHJ5UXVldWUuc2hpZnQoKSh0cnVlKTtcbn1cblxuZnVuY3Rpb24gY29uZmxpY3REaXNtaXNzKCkge1xuICBpZiAoX2NvbmZsaWN0VGltZXJJZCkgeyBjbGVhckludGVydmFsKF9jb25mbGljdFRpbWVySWQpOyBfY29uZmxpY3RUaW1lcklkID0gbnVsbDsgfVxuICBjb25zdCBiYW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Vzc2lvbi1jb25mbGljdC1iYW5uZXInKTtcbiAgaWYgKGJhbm5lcikgYmFubmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHdoaWxlIChfY29uZmxpY3RSZXRyeVF1ZXVlLmxlbmd0aCkgX2NvbmZsaWN0UmV0cnlRdWV1ZS5zaGlmdCgpKGZhbHNlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMTE0gZmV0Y2ggd3JhcHBlciAoYXR0YWNoZXMgYWJvcnQgc2lnbmFsKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGxsbUZldGNoKHVybCwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICh3aW5kb3cuX2N1cnJlbnRBYm9ydENvbnRyb2xsZXIpIHtcbiAgICBvcHRpb25zLnNpZ25hbCA9IHdpbmRvdy5fY3VycmVudEFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gIH1cbiAgcmV0dXJuIGZldGNoKHVybCwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGFib3J0Q3VycmVudFJlcXVlc3QoKSB7XG4gIGlmICh3aW5kb3cuX2N1cnJlbnRBYm9ydENvbnRyb2xsZXIpIHtcbiAgICB3aW5kb3cuX2N1cnJlbnRBYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB3aW5kb3cuX2N1cnJlbnRBYm9ydENvbnRyb2xsZXIgPSBudWxsO1xuICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgIGlmICh0eXBlb2YgYXBwZW5kTWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgJ1x1MjNGOSBSZXF1ZXN0IHN0b3BwZWQuJyk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMTE0gYnVzeSBvdmVybGF5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubGV0IF9sbG1FbGFwc2VkVGltZXIgPSBudWxsO1xubGV0IF9sbG1TdGFydFRpbWUgICAgPSBudWxsO1xuXG5mdW5jdGlvbiBfdXBkYXRlTExNT3ZlcmxheShsb2FkaW5nLCBsYWJlbCkge1xuICBjb25zdCBvdmVybGF5ICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG0tYnVzeS1vdmVybGF5Jyk7XG4gIGNvbnN0IGxhYmVsRWwgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbS1idXN5LWxhYmVsJyk7XG4gIGNvbnN0IGVsYXBzZWQgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbS1idXN5LWVsYXBzZWQnKTtcbiAgaWYgKCFvdmVybGF5KSByZXR1cm47XG5cbiAgaWYgKGxvYWRpbmcpIHtcbiAgICBvdmVybGF5LmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICBvdmVybGF5LmNsYXNzTGlzdC5yZW1vdmUoJ3Nsb3cnKTtcbiAgICBpZiAobGFiZWxFbCkgbGFiZWxFbC50ZXh0Q29udGVudCA9IGxhYmVsIHx8ICdSZWFzb25pbmdcdTIwMjYnO1xuICAgIGlmIChlbGFwc2VkKSAgZWxhcHNlZC50ZXh0Q29udGVudCA9ICcwOjAwJztcblxuICAgIF9sbG1TdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNsZWFySW50ZXJ2YWwoX2xsbUVsYXBzZWRUaW1lcik7XG4gICAgX2xsbUVsYXBzZWRUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IHNlY3MgPSBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gX2xsbVN0YXJ0VGltZSkgLyAxMDAwKTtcbiAgICAgIGNvbnN0IG1tID0gU3RyaW5nKE1hdGguZmxvb3Ioc2VjcyAvIDYwKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IHNzID0gU3RyaW5nKHNlY3MgJSA2MCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGlmIChlbGFwc2VkKSBlbGFwc2VkLnRleHRDb250ZW50ID0gYCR7bW19OiR7c3N9YDtcbiAgICAgIGlmIChzZWNzID49IDMwICYmICFvdmVybGF5LmNsYXNzTGlzdC5jb250YWlucygnc2xvdycpKSB7XG4gICAgICAgIG92ZXJsYXkuY2xhc3NMaXN0LmFkZCgnc2xvdycpO1xuICAgICAgfVxuICAgIH0sIDEwMDApO1xuICB9IGVsc2Uge1xuICAgIGNsZWFySW50ZXJ2YWwoX2xsbUVsYXBzZWRUaW1lcik7XG4gICAgX2xsbUVsYXBzZWRUaW1lciA9IG51bGw7XG4gICAgX2xsbVN0YXJ0VGltZSAgICA9IG51bGw7XG4gICAgb3ZlcmxheS5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJywgJ3Nsb3cnKTtcbiAgICBpZiAobGFiZWxFbCkgbGFiZWxFbC50ZXh0Q29udGVudCA9ICdSZWFzb25pbmdcdTIwMjYnO1xuICAgIGlmIChlbGFwc2VkKSAgZWxhcHNlZC50ZXh0Q29udGVudCA9ICcwOjAwJztcbiAgICBfcmVmcmVzaENvbnRleHRTdGF0cygpO1xuICB9XG59XG5cbi8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHRlc3RzL2ltcG9ydHMgdGhhdCBzdGlsbCByZWZlcmVuY2UgdGhlIG9sZCBuYW1lLlxuZnVuY3Rpb24gX3VwZGF0ZUxMTVN0YXR1c0Jhcihsb2FkaW5nLCBsYWJlbCkge1xuICBfdXBkYXRlTExNT3ZlcmxheShsb2FkaW5nLCBsYWJlbCk7XG5cbiAgY29uc3QgYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbS1zdGF0dXMtYmFyJyk7XG4gIGNvbnN0IHRoaW5raW5nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbS10aGlua2luZycpO1xuICBjb25zdCBzdGVwTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtLXN0ZXAtbGFiZWwnKTtcbiAgY29uc3QgYWJvcnRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtLWFib3J0LWJ0bicpO1xuICBpZiAoIWJhcikgcmV0dXJuO1xuXG4gIGlmIChsb2FkaW5nKSB7XG4gICAgYmFyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgaWYgKHRoaW5raW5nKSB0aGlua2luZy5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIGlmIChzdGVwTGFiZWwpIHN0ZXBMYWJlbC50ZXh0Q29udGVudCA9IGxhYmVsIHx8ICdSZWFzb25pbmdcdTIwMjYnO1xuICAgIGlmIChhYm9ydEJ0bikge1xuICAgICAgYWJvcnRCdG4uc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgYWJvcnRCdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoaW5raW5nKSB0aGlua2luZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGlmIChhYm9ydEJ0bikgYWJvcnRCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBiYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVmcmVzaENvbnRleHRTdGF0cygpIHtcbiAgY29uc3QgdG9rZW5FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG0tdG9rZW4tY291bnQnKTtcbiAgaWYgKCF0b2tlbkVsKSByZXR1cm47XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL2NvbnRleHQtc3RhdHMnKTtcbiAgICBpZiAoIXJlcy5vaykgcmV0dXJuO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmICghZGF0YS5vaykgcmV0dXJuO1xuICAgIGNvbnN0IGVzdCAgICA9IGRhdGEuZXN0aW1hdGVkX3Rva2VucyB8fCAwO1xuICAgIGNvbnN0IHdpbiAgICA9IGRhdGEuY29udGV4dF93aW5kb3cgICB8fCAxMjhfMDAwO1xuICAgIGNvbnN0IGV4YWN0ICA9IGRhdGEudG9rZW5fc291cmNlID09PSAnZXhhY3QnO1xuICAgIGNvbnN0IHBjdCAgICA9IE1hdGgucm91bmQoKGVzdCAvIHdpbikgKiAxMDApO1xuICAgIGNvbnN0IGVzdFN0ciA9IGVzdCA+PSAxMDAwID8gYCR7KGVzdCAvIDEwMDApLnRvRml4ZWQoMSl9S2AgOiBgJHtlc3R9YDtcbiAgICBjb25zdCB3aW5TdHIgPSB3aW4gPj0gMTAwMCA/IGAke01hdGgucm91bmQod2luIC8gMTAwMCl9S2AgIDogYCR7d2lufWA7XG4gICAgdG9rZW5FbC50ZXh0Q29udGVudCA9IGAke2V4YWN0ID8gJycgOiAnfid9JHtlc3RTdHJ9IC8gJHt3aW5TdHJ9ICgke3BjdH0lKWA7XG4gIH0gY2F0Y2ggKF8pIHsgLyogc2lsZW50bHkgaWdub3JlICovIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2FkaW5nIHN0YXRlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gc2V0TG9hZGluZyhsb2FkaW5nLCBsYWJlbCkge1xuICBpZiAodHlwZW9mIHN0YXRlTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcgJiYgc3RhdGVNYW5hZ2VyPy5zZXRMb2FkaW5nKSB7XG4gICAgc3RhdGVNYW5hZ2VyLnNldExvYWRpbmcobG9hZGluZyk7XG4gIH1cblxuICBpZiAobG9hZGluZykge1xuICAgIHdpbmRvdy5fY3VycmVudEFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAvLyBFeHBhbmQgY2hhdCBwYW5lbCBpZiBjb2xsYXBzZWRcbiAgICBjb25zdCBjaGF0QXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0LWFyZWEnKTtcbiAgICBjb25zdCB2aWV3ZXJBcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZXdlci1hcmVhJyk7XG4gICAgY29uc3QgdG9nZ2xlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvZ2dsZS1jaGF0Jyk7XG4gICAgaWYgKGNoYXRBcmVhPy5jbGFzc0xpc3QuY29udGFpbnMoJ2NvbGxhcHNlZCcpKSB7XG4gICAgICBjaGF0QXJlYS5jbGFzc0xpc3QucmVtb3ZlKCdjb2xsYXBzZWQnKTtcbiAgICAgIHZpZXdlckFyZWE/LmNsYXNzTGlzdC5yZW1vdmUoJ2V4cGFuZGVkJyk7XG4gICAgICBpZiAodG9nZ2xlQnRuKSB0b2dnbGVCdG4udGV4dENvbnRlbnQgPSAnXHUyNUMwJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2luZG93Ll9jdXJyZW50QWJvcnRDb250cm9sbGVyID0gbnVsbDtcbiAgfVxuXG4gIF91cGRhdGVMTE1TdGF0dXNCYXIobG9hZGluZywgbGFiZWwpO1xuXG4gIC8vIE9ubHkgZGlzYWJsZSBidXR0b25zIGluc2lkZSB0aGUgY2hhdC9pbnRlcmFjdGlvbiBhcmVhIFx1MjAxNCBub3QgdGhlIHdob2xlIHBhZ2UuXG4gIGNvbnN0IGNoYXRBcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXQtYXJlYScpO1xuICBjb25zdCBzY29wZSA9IGNoYXRBcmVhIHx8IGRvY3VtZW50O1xuICBzY29wZS5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKS5mb3JFYWNoKGJ0biA9PiB7IGJ0bi5kaXNhYmxlZCA9IGxvYWRpbmc7IH0pO1xuICBjb25zdCBzdG9wQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbS1idXN5LXN0b3AnKTtcbiAgaWYgKHN0b3BCdG4pIHN0b3BCdG4uZGlzYWJsZWQgPSBmYWxzZTtcblxuICBsZXQgYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvYWRpbmctcHJvZ3Jlc3MtYmFyJyk7XG4gIGlmIChsb2FkaW5nKSB7XG4gICAgaWYgKCFiYXIpIHtcbiAgICAgIGJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgYmFyLmlkID0gJ2xvYWRpbmctcHJvZ3Jlc3MtYmFyJztcbiAgICAgIGRvY3VtZW50LmJvZHkucHJlcGVuZChiYXIpO1xuICAgIH1cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4geyBiYXIuc3R5bGUud2lkdGggPSAnNzAlJzsgfSk7XG4gICAgaWYgKGxhYmVsKSBiYXIudGl0bGUgPSBsYWJlbDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYmFyKSB7XG4gICAgICBiYXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IGJhci5yZW1vdmUoKSwgNDAwKTtcbiAgICB9XG4gIH1cblxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RlcC5hY3RpdmUnKS5mb3JFYWNoKGVsID0+IHtcbiAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKCdsb2FkaW5nLXN0ZXAnLCBsb2FkaW5nKTtcbiAgfSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFUyBtb2R1bGUgZXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB7XG4gIGhhbmRsZTQwOUNvbmZsaWN0LFxuICBzaG93U2Vzc2lvbkNvbmZsaWN0QmFubmVyLCBjb25mbGljdFJldHJ5Tm93LCBjb25mbGljdERpc21pc3MsXG4gIGxsbUZldGNoLCBhYm9ydEN1cnJlbnRSZXF1ZXN0LFxuICBfdXBkYXRlTExNU3RhdHVzQmFyLFxuICBfdXBkYXRlTExNT3ZlcmxheSwgX3JlZnJlc2hDb250ZXh0U3RhdHMsXG4gIHNldExvYWRpbmcsXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiBzdGF0ZS1tYW5hZ2VyLmpzXG4gKiBNYW5hZ2VzIHNlc3Npb24gc3RhdGUsIGxvY2FsU3RvcmFnZSBwZXJzaXN0ZW5jZSwgYW5kIHN0YXRlIGluaXRpYWxpemF0aW9uLlxuICogQ2VudHJhbGl6ZXMgYWxsIHN0YXRlIG1hbmFnZW1lbnQgbG9naWMgKGN1cnJlbnRUYWIsIGludGVyYWN0aXZlU3RhdGUsIHNlc3Npb25JZCwgZXRjLilcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ3N0YXRlLW1hbmFnZXInKTtcblxuaW1wb3J0IHsgU3RvcmFnZUtleXMgfSBmcm9tICcuL2FwaS1jbGllbnQuanMnO1xuXG4vKipcbiAqIE1pcnJvciBvZiB0aGUgUHl0aG9uIFBoYXNlIGVudW0gaW4gc2NyaXB0cy91dGlscy9jb252ZXJzYXRpb25fbWFuYWdlci5weS5cbiAqIFB5dGhvbiBpcyB0aGUgU09VUkNFIE9GIFRSVVRIIFx1MjAxNCB1cGRhdGUgYm90aCBmaWxlcyB0b2dldGhlciB3aGVuZXZlciBhZGRpbmdcbiAqIG9yIHJlbmFtaW5nIGEgcGhhc2UuXG4gKi9cbmNvbnN0IFBIQVNFUyA9IHtcbiAgSU5JVDogICAgICAgICAgICAgJ2luaXQnLFxuICBKT0JfQU5BTFlTSVM6ICAgICAnam9iX2FuYWx5c2lzJyxcbiAgQ1VTVE9NSVpBVElPTjogICAgJ2N1c3RvbWl6YXRpb24nLFxuICBSRVdSSVRFX1JFVklFVzogICAncmV3cml0ZV9yZXZpZXcnLFxuICBTUEVMTF9DSEVDSzogICAgICAnc3BlbGxfY2hlY2snLFxuICBHRU5FUkFUSU9OOiAgICAgICAnZ2VuZXJhdGlvbicsXG4gIExBWU9VVF9SRVZJRVc6ICAgICdsYXlvdXRfcmV2aWV3JyxcbiAgRklOQUxfR0VORVJBVElPTjogJ2ZpbmFsX2dlbmVyYXRpb24nLFxuICBSRUZJTkVNRU5UOiAgICAgICAncmVmaW5lbWVudCcsXG59O1xuXG5jb25zdCBQSEFTRV9UT19TVEVQID0ge1xuICBbUEhBU0VTLklOSVRdOiAgICAgICAgICAgICAnam9iJyxcbiAgW1BIQVNFUy5KT0JfQU5BTFlTSVNdOiAgICAgJ2FuYWx5c2lzJyxcbiAgW1BIQVNFUy5DVVNUT01JWkFUSU9OXTogICAgJ2N1c3RvbWl6YXRpb25zJyxcbiAgW1BIQVNFUy5SRVdSSVRFX1JFVklFV106ICAgJ3Jld3JpdGUnLFxuICBbUEhBU0VTLlNQRUxMX0NIRUNLXTogICAgICAnc3BlbGwnLFxuICBbUEhBU0VTLkdFTkVSQVRJT05dOiAgICAgICAnbGF5b3V0JyxcbiAgW1BIQVNFUy5MQVlPVVRfUkVWSUVXXTogICAgJ2xheW91dCcsXG4gIFtQSEFTRVMuRklOQUxfR0VORVJBVElPTl06ICdkb3dubG9hZCcsXG4gIFtQSEFTRVMuUkVGSU5FTUVOVF06ICAgICAgICdkb3dubG9hZCcsXG59O1xuXG5mdW5jdGlvbiBnZXRXb3JrZmxvd1N0ZXBGb3JQaGFzZShwaGFzZSkge1xuICByZXR1cm4gUEhBU0VfVE9fU1RFUFtwaGFzZV0gfHwgJ2pvYic7XG59XG5cbi8qKlxuICogU3RhZ2VkIGdlbmVyYXRpb24gd29ya2Zsb3cgcGhhc2VzIChHQVAtMjAgaW1wbGVtZW50YXRpb24pLlxuICogVGhlc2UgdHJhY2sgdGhlIHByZXZpZXcvbGF5b3V0IHJldmlldyBcdTIxOTIgY29uZmlybWVkIFx1MjE5MiBmaW5hbCBwaXBlbGluZVxuICogaW5kZXBlbmRlbnRseSBvZiB0aGUgbWFpbiBjb252ZXJzYXRpb24gUEhBU0VTIGFib3ZlLlxuICogQmFja2VuZCBzb3VyY2Ugb2YgdHJ1dGggaXMgc2Vzc2lvbl9kYXRhWydnZW5lcmF0aW9uX3N0YXRlJ11bJ3BoYXNlJ10uXG4gKi9cbmNvbnN0IEdFTkVSQVRJT05fUEhBU0VTID0ge1xuICBJRExFOiAgICAgICAgICAgJ2lkbGUnLFxuICBMQVlPVVRfUkVWSUVXOiAgJ2xheW91dF9yZXZpZXcnLFxuICBDT05GSVJNRUQ6ICAgICAgJ2NvbmZpcm1lZCcsXG4gIEZJTkFMX0NPTVBMRVRFOiAnZmluYWxfY29tcGxldGUnLFxufTtcblxuY29uc3QgR0VORVJBVElPTl9TVEFURV9FVkVOVCA9ICdjdmJ1aWxkZXI6Z2VuZXJhdGlvbi1zdGF0ZS1jaGFuZ2VkJztcblxuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdEdlbmVyYXRpb25TdGF0ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBwaGFzZTogR0VORVJBVElPTl9QSEFTRVMuSURMRSxcbiAgICBwcmV2aWV3QXZhaWxhYmxlOiBmYWxzZSxcbiAgICBwcmV2aWV3T3V0cHV0czogbnVsbCxcbiAgICBsYXlvdXRDb25maXJtZWQ6IGZhbHNlLFxuICAgIHBhZ2VDb3VudEVzdGltYXRlOiBudWxsLFxuICAgIHBhZ2VDb3VudEV4YWN0OiBudWxsLFxuICAgIHBhZ2VDb3VudENvbmZpZGVuY2U6IG51bGwsXG4gICAgcGFnZUNvdW50U291cmNlOiBudWxsLFxuICAgIHBhZ2VOZWVkc0V4YWN0UmVjaGVjazogZmFsc2UsXG4gICAgcGFnZVdhcm5pbmc6IGZhbHNlLFxuICAgIGxheW91dEluc3RydWN0aW9uc0NvdW50OiAwLFxuICAgIGZpbmFsR2VuZXJhdGVkQXQ6IG51bGwsXG4gICAgcHJldmlld0dlbmVyYXRlZEF0OiBudWxsLFxuICAgIHByZXZpZXdSZXF1ZXN0SWQ6IG51bGwsXG4gICAgY29uZmlybWVkQXQ6IG51bGwsXG4gICAgY29udGVudFJldmlzaW9uOiAwLFxuICAgIGxhc3RQcmV2aWV3Q29udGVudFJldmlzaW9uOiBudWxsLFxuICAgIGxhc3RGaW5hbENvbnRlbnRSZXZpc2lvbjogbnVsbCxcbiAgICBkaXJ0eVBoYXNlczogW10sXG4gICAgZWFybGllc3REaXJ0eVN0ZXA6IG51bGwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJldmlzaW9uKHZhbHVlKSB7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRMYXN0UmVuZGVyZWRDb250ZW50UmV2aXNpb24oc3RhdGUpIHtcbiAgY29uc3QgcmV2aXNpb25zID0gW1xuICAgIG5vcm1hbGl6ZVJldmlzaW9uKHN0YXRlLmxhc3RQcmV2aWV3Q29udGVudFJldmlzaW9uKSxcbiAgICBub3JtYWxpemVSZXZpc2lvbihzdGF0ZS5sYXN0RmluYWxDb250ZW50UmV2aXNpb24pLFxuICBdLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCk7XG4gIHJldHVybiByZXZpc2lvbnMubGVuZ3RoID4gMCA/IE1hdGgubWF4KC4uLnJldmlzaW9ucykgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNlc3Npb25JZCgpIHtcbiAgY29uc3QgY3J5cHRvQXBpID0gZ2xvYmFsVGhpcy5jcnlwdG87XG4gIGlmIChjcnlwdG9BcGk/LnJhbmRvbVVVSUQpIHtcbiAgICByZXR1cm4gYHNlc3Npb24tJHtjcnlwdG9BcGkucmFuZG9tVVVJRCgpfWA7XG4gIH1cblxuICBpZiAoY3J5cHRvQXBpPy5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICBjcnlwdG9BcGkuZ2V0UmFuZG9tVmFsdWVzKGJ5dGVzKTtcbiAgICBjb25zdCB0b2tlbiA9IEFycmF5LmZyb20oYnl0ZXMsIGJ5dGUgPT4gYnl0ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG4gICAgcmV0dXJuIGBzZXNzaW9uLSR7dG9rZW59YDtcbiAgfVxuXG4gIGxvZy53YXJuKCdXZWIgQ3J5cHRvIEFQSSB1bmF2YWlsYWJsZTsgZmFsbGluZyBiYWNrIHRvIHRpbWVzdGFtcC1wbHVzLXJhbmRvbSBzZXNzaW9uIGlkIGdlbmVyYXRpb24uJyk7XG4gIHJldHVybiBgc2Vzc2lvbi0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDExKX1gO1xufVxuXG5mdW5jdGlvbiBnZXRMYXlvdXRGcmVzaG5lc3NGcm9tU3RhdGUoc3RhdGUpIHtcbiAgY29uc3QgcHJldmlld0F2YWlsYWJsZSA9IEJvb2xlYW4oc3RhdGUucHJldmlld0F2YWlsYWJsZSk7XG4gIGNvbnN0IGhhc0ZpbmFsT3V0cHV0cyA9IEJvb2xlYW4oXG4gICAgc3RhdGUuZmluYWxHZW5lcmF0ZWRBdFxuICAgICAgfHwgc3RhdGUucGhhc2UgPT09IEdFTkVSQVRJT05fUEhBU0VTLkZJTkFMX0NPTVBMRVRFXG4gICAgICB8fCBub3JtYWxpemVSZXZpc2lvbihzdGF0ZS5sYXN0RmluYWxDb250ZW50UmV2aXNpb24pICE9PSBudWxsXG4gICk7XG5cbiAgaWYgKCFwcmV2aWV3QXZhaWxhYmxlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dDaGlwOiBmYWxzZSxcbiAgICAgIGlzU3RhbGU6IGZhbHNlLFxuICAgICAgaXNDcml0aWNhbDogZmFsc2UsXG4gICAgICBoYXNGaW5hbE91dHB1dHMsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBhcmlhTGFiZWw6ICcnLFxuICAgICAgdG9uZTogJ2hpZGRlbicsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnRSZXZpc2lvbiA9IG5vcm1hbGl6ZVJldmlzaW9uKHN0YXRlLmNvbnRlbnRSZXZpc2lvbikgPz8gMDtcbiAgY29uc3QgbGFzdFJlbmRlcmVkUmV2aXNpb24gPSBnZXRMYXN0UmVuZGVyZWRDb250ZW50UmV2aXNpb24oc3RhdGUpO1xuICBjb25zdCBpc1N0YWxlID0gbGFzdFJlbmRlcmVkUmV2aXNpb24gIT09IG51bGwgJiYgY29udGVudFJldmlzaW9uID4gbGFzdFJlbmRlcmVkUmV2aXNpb247XG4gIGNvbnN0IGlzQ3JpdGljYWwgPSBpc1N0YWxlICYmIGhhc0ZpbmFsT3V0cHV0cztcblxuICBpZiAoaXNDcml0aWNhbCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93Q2hpcDogdHJ1ZSxcbiAgICAgIGlzU3RhbGUsXG4gICAgICBpc0NyaXRpY2FsLFxuICAgICAgaGFzRmluYWxPdXRwdXRzLFxuICAgICAgbGFiZWw6ICdGaWxlcyBvdXRkYXRlZCcsXG4gICAgICBhcmlhTGFiZWw6ICdGaWxlcyBvdXRkYXRlZC4gQWN0aXZhdGUgdG8gcmV2aWV3IGxheW91dCBhbmQgcmVnZW5lcmF0ZSBvdXRwdXRzLicsXG4gICAgICB0b25lOiAnY3JpdGljYWwnLFxuICAgIH07XG4gIH1cblxuICBpZiAoaXNTdGFsZSkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93Q2hpcDogdHJ1ZSxcbiAgICAgIGlzU3RhbGUsXG4gICAgICBpc0NyaXRpY2FsLFxuICAgICAgaGFzRmluYWxPdXRwdXRzLFxuICAgICAgbGFiZWw6ICdMYXlvdXQgb3V0ZGF0ZWQnLFxuICAgICAgYXJpYUxhYmVsOiAnTGF5b3V0IG91dGRhdGVkLiBBY3RpdmF0ZSB0byByZXZpZXcgYW5kIHJlZ2VuZXJhdGUgcHJldmlldy4nLFxuICAgICAgdG9uZTogJ3N0YWxlJyxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzaG93Q2hpcDogdHJ1ZSxcbiAgICBpc1N0YWxlLFxuICAgIGlzQ3JpdGljYWwsXG4gICAgaGFzRmluYWxPdXRwdXRzLFxuICAgIGxhYmVsOiAnTGF5b3V0IGN1cnJlbnQnLFxuICAgIGFyaWFMYWJlbDogJ0xheW91dCBjdXJyZW50LiBQcmV2aWV3IG1hdGNoZXMgbGF0ZXN0IGNvbnRlbnQuJyxcbiAgICB0b25lOiAnZnJlc2gnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBlbWl0R2VuZXJhdGlvblN0YXRlQ2hhbmdlZCgpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cuZGlzcGF0Y2hFdmVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoR0VORVJBVElPTl9TVEFURV9FVkVOVCwge1xuICAgIGRldGFpbDoge1xuICAgICAgZ2VuZXJhdGlvblN0YXRlOiB7IC4uLmdlbmVyYXRpb25TdGF0ZSB9LFxuICAgICAgbGF5b3V0RnJlc2huZXNzOiBnZXRMYXlvdXRGcmVzaG5lc3NGcm9tU3RhdGUoZ2VuZXJhdGlvblN0YXRlKSxcbiAgICB9LFxuICB9KSk7XG59XG5cbi8vIEdsb2JhbCBzdGF0ZSB2YXJpYWJsZXMgKG1vdmVkIGludG8gbW9kdWxlIGZvciBjbGFyaXR5KVxubGV0IGN1cnJlbnRUYWIgPSAnam9iJztcbmxldCBpc0xvYWRpbmcgPSBmYWxzZTtcbmxldCB0YWJEYXRhID0ge1xuICBhbmFseXNpczogbnVsbCxcbiAgY3VzdG9taXphdGlvbnM6IG51bGwsXG4gIGN2OiBudWxsXG59O1xubGV0IGludGVyYWN0aXZlU3RhdGUgPSB7XG4gIGlzUmV2aWV3aW5nOiBmYWxzZSxcbiAgY3VycmVudEluZGV4OiAwLFxuICB0eXBlOiBudWxsLCAvLyAnZXhwZXJpZW5jZXMnIG9yICdza2lsbHMnXG4gIGRhdGE6IG51bGxcbn07XG5sZXQgc2Vzc2lvbklkID0gbnVsbDtcbmxldCBsYXN0S25vd25QaGFzZSA9IFBIQVNFUy5JTklUO1xubGV0IGlzUmVjb25uZWN0aW5nID0gZmFsc2U7XG5jb25zdCBfcGhhc2VDaGFuZ2VMaXN0ZW5lcnMgPSBbXTtcbi8vIEN1cnJlbnQgbW9kZWwvcHJvdmlkZXIgc2VsZWN0aW9uIChwZXJzaXN0ZWQgdG8gbG9jYWxTdG9yYWdlKVxubGV0IGN1cnJlbnRNb2RlbFByb3ZpZGVyID0gbnVsbDtcbmxldCBjdXJyZW50TW9kZWxOYW1lID0gbnVsbDtcblxuXG4vLyBTdGFnZWQgZ2VuZXJhdGlvbiBzdGF0ZSAoR0FQLTIwKTogdHJhY2tzIHByZXZpZXcgXHUyMTkyIGNvbmZpcm0gXHUyMTkyIGZpbmFsIHBpcGVsaW5lLlxuLy8gU3luY2VkIGZyb20gL2FwaS9jdi9nZW5lcmF0aW9uLXN0YXRlIG9uIHBhZ2UgbG9hZCBhbmQgYWZ0ZXIga2V5IHRyYW5zaXRpb25zLlxubGV0IGdlbmVyYXRpb25TdGF0ZSA9IGNyZWF0ZURlZmF1bHRHZW5lcmF0aW9uU3RhdGUoKTtcblxuLy8gQVRTIHNjb3JlIHN0YXRlIChHQVAtMjEpOiBjYWNoZWQgc2NvcmUgZnJvbSAvYXBpL2N2L2F0cy1zY29yZS5cbi8vIE51bGwgdW50aWwgZmlyc3Qgc2NvcmUgaXMgZmV0Y2hlZC5cbmxldCBhdHNTY29yZSA9IG51bGw7XG5cbi8vIEV4cG9ydCBzdGF0ZSBnZXR0ZXJzL3NldHRlcnNcbmNvbnN0IHN0YXRlTWFuYWdlciA9IHtcbiAgLy8gVGFiIHN0YXRlXG4gIGdldEN1cnJlbnRUYWI6ICgpID0+IGN1cnJlbnRUYWIsXG4gIHNldEN1cnJlbnRUYWI6ICh0YWIpID0+IHsgY3VycmVudFRhYiA9IHRhYjsgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKTsgfSxcbiAgZ2V0Q3VycmVudFN0YWdlOiAoKSA9PiBnZXRXb3JrZmxvd1N0ZXBGb3JQaGFzZShsYXN0S25vd25QaGFzZSksXG5cbiAgLy8gTG9hZGluZyBzdGF0ZVxuICBpc0xvYWRpbmc6ICgpID0+IGlzTG9hZGluZyxcbiAgc2V0TG9hZGluZzogKGxvYWRpbmcpID0+IHtcbiAgICBpc0xvYWRpbmcgPSBsb2FkaW5nO1xuICB9LFxuXG4gIC8vIFRhYiBkYXRhIChhbmFseXNpcywgY3VzdG9taXphdGlvbnMsIENWKVxuICBnZXRUYWJEYXRhOiAodGFiKSA9PiB0YWJEYXRhW3RhYl0sXG4gIGdldEFsbFRhYkRhdGE6ICgpID0+ICh7IC4uLnRhYkRhdGEgfSksXG4gIHNldFRhYkRhdGE6ICh0YWIsIGRhdGEpID0+IHsgdGFiRGF0YVt0YWJdID0gZGF0YTsgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKTsgfSxcblxuICAvLyBJbnRlcmFjdGl2ZSBzdGF0ZSAoZm9yIGV4cGVyaWVuY2Uvc2tpbGwgc2VsZWN0aW9uIHJldmlldylcbiAgZ2V0SW50ZXJhY3RpdmVTdGF0ZTogKCkgPT4gaW50ZXJhY3RpdmVTdGF0ZSxcbiAgc2V0SW50ZXJhY3RpdmVTdGF0ZTogKHN0YXRlKSA9PiB7IGludGVyYWN0aXZlU3RhdGUgPSB7IC4uLmludGVyYWN0aXZlU3RhdGUsIC4uLnN0YXRlIH07IHNhdmVTdGF0ZVRvTG9jYWxTdG9yYWdlKCk7IH0sXG5cbiAgLy8gUmVjb25uZWN0IHN0YXRlXG4gIGlzUmVjb25uZWN0aW5nOiAoKSA9PiBpc1JlY29ubmVjdGluZyxcbiAgc2V0SXNSZWNvbm5lY3Rpbmc6IChyZWNvbm5lY3RpbmcpID0+IHsgaXNSZWNvbm5lY3RpbmcgPSBCb29sZWFuKHJlY29ubmVjdGluZyk7IH0sXG5cbiAgLy8gU2Vzc2lvbiBtYW5hZ2VtZW50XG4gIGdldFNlc3Npb25JZDogKCkgPT4gc2Vzc2lvbklkLFxuICBzZXRTZXNzaW9uSWQ6IChpZCkgPT4geyBzZXNzaW9uSWQgPSBpZDsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU3RvcmFnZUtleXMuU0VTU0lPTl9JRCwgaWQpOyB9LFxuXG4gIC8vIE1vZGVsL3Byb3ZpZGVyIHNlbGVjdGlvblxuICBnZXRDdXJyZW50TW9kZWxQcm92aWRlcjogKCkgPT4gY3VycmVudE1vZGVsUHJvdmlkZXIsXG4gIGdldEN1cnJlbnRNb2RlbE5hbWU6ICgpID0+IGN1cnJlbnRNb2RlbE5hbWUsXG4gIHNldEN1cnJlbnRNb2RlbDogKHByb3ZpZGVyLCBtb2RlbCkgPT4geyBjdXJyZW50TW9kZWxQcm92aWRlciA9IHByb3ZpZGVyIHx8IG51bGw7IGN1cnJlbnRNb2RlbE5hbWUgPSBtb2RlbCB8fCBudWxsOyBzYXZlU3RhdGVUb0xvY2FsU3RvcmFnZSgpOyB9LFxuXG4gIC8vIFBoYXNlIHRyYWNraW5nXG4gIGdldFBoYXNlOiAoKSA9PiBsYXN0S25vd25QaGFzZSxcbiAgc2V0UGhhc2U6IChwaGFzZSkgPT4ge1xuICAgIGxhc3RLbm93blBoYXNlID0gcGhhc2U7XG4gICAgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgICBfcGhhc2VDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChmbiA9PiB7IHRyeSB7IGZuKHBoYXNlKTsgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfSB9KTtcbiAgfSxcbiAgb25QaGFzZUNoYW5nZTogKGZuKSA9PiB7IGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIF9waGFzZUNoYW5nZUxpc3RlbmVycy5wdXNoKGZuKTsgfSxcbiAgZ2V0V29ya2Zsb3dTdGVwOiAoKSA9PiBnZXRXb3JrZmxvd1N0ZXBGb3JQaGFzZShsYXN0S25vd25QaGFzZSksXG5cbiAgLy8gUG9zdC1hbmFseXNpcyBxdWVzdGlvbnNcbiAgZ2V0UG9zdEFuYWx5c2lzUXVlc3Rpb25zOiAoKSA9PiB3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zIHx8IFtdLFxuICBzZXRQb3N0QW5hbHlzaXNRdWVzdGlvbnM6IChxdWVzdGlvbnMpID0+IHsgd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyA9IHF1ZXN0aW9uczsgfSxcblxuICAvLyBRdWVzdGlvbiBhbnN3ZXJzXG4gIGdldFF1ZXN0aW9uQW5zd2VyczogKCkgPT4gd2luZG93LnF1ZXN0aW9uQW5zd2VycyB8fCB7fSxcbiAgc2V0UXVlc3Rpb25BbnN3ZXJzOiAoYW5zd2VycykgPT4geyB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzID0gYW5zd2VyczsgfSxcblxuICAvLyBQZW5kaW5nIHJlY29tbWVuZGF0aW9uc1xuICBnZXRQZW5kaW5nUmVjb21tZW5kYXRpb25zOiAoKSA9PiB3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucyB8fCBudWxsLFxuICBzZXRQZW5kaW5nUmVjb21tZW5kYXRpb25zOiAocmVjKSA9PiB7IHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zID0gcmVjOyBzYXZlU3RhdGVUb0xvY2FsU3RvcmFnZSgpOyB9LFxuXG4gIC8vIEFUUyBzY29yZSBzdGF0ZSAoR0FQLTIxKVxuICBnZXRBdHNTY29yZTogKCkgPT4gYXRzU2NvcmUsXG4gIHNldEF0c1Njb3JlOiAoc2NvcmUpID0+IHsgYXRzU2NvcmUgPSBzY29yZTsgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKTsgfSxcbiAgY2xlYXJBdHNTY29yZTogKCkgPT4geyBhdHNTY29yZSA9IG51bGw7IHNhdmVTdGF0ZVRvTG9jYWxTdG9yYWdlKCk7IH0sXG5cbiAgLy8gU3RhZ2VkIGdlbmVyYXRpb24gc3RhdGUgKEdBUC0yMClcbiAgZ2V0R2VuZXJhdGlvblN0YXRlOiAoKSA9PiBnZW5lcmF0aW9uU3RhdGUsXG4gIGdldExheW91dEZyZXNobmVzczogKCkgPT4gZ2V0TGF5b3V0RnJlc2huZXNzRnJvbVN0YXRlKGdlbmVyYXRpb25TdGF0ZSksXG4gIHNldEdlbmVyYXRpb25TdGF0ZTogKHVwZGF0ZSkgPT4ge1xuICAgIGdlbmVyYXRpb25TdGF0ZSA9IHsgLi4uZ2VuZXJhdGlvblN0YXRlLCAuLi51cGRhdGUgfTtcbiAgICBzYXZlU3RhdGVUb0xvY2FsU3RvcmFnZSgpO1xuICAgIGVtaXRHZW5lcmF0aW9uU3RhdGVDaGFuZ2VkKCk7XG4gIH0sXG4gIG1hcmtDb250ZW50Q2hhbmdlZDogKCkgPT4ge1xuICAgIGdlbmVyYXRpb25TdGF0ZSA9IHtcbiAgICAgIC4uLmdlbmVyYXRpb25TdGF0ZSxcbiAgICAgIGNvbnRlbnRSZXZpc2lvbjogKG5vcm1hbGl6ZVJldmlzaW9uKGdlbmVyYXRpb25TdGF0ZS5jb250ZW50UmV2aXNpb24pID8/IDApICsgMSxcbiAgICB9O1xuICAgIHNhdmVTdGF0ZVRvTG9jYWxTdG9yYWdlKCk7XG4gICAgZW1pdEdlbmVyYXRpb25TdGF0ZUNoYW5nZWQoKTtcbiAgfSxcbiAgbWFya1ByZXZpZXdHZW5lcmF0ZWQ6ICh1cGRhdGUgPSB7fSkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRSZXZpc2lvbiA9IG5vcm1hbGl6ZVJldmlzaW9uKGdlbmVyYXRpb25TdGF0ZS5jb250ZW50UmV2aXNpb24pID8/IDA7XG4gICAgZ2VuZXJhdGlvblN0YXRlID0ge1xuICAgICAgLi4uZ2VuZXJhdGlvblN0YXRlLFxuICAgICAgLi4udXBkYXRlLFxuICAgICAgcGhhc2U6IEdFTkVSQVRJT05fUEhBU0VTLkxBWU9VVF9SRVZJRVcsXG4gICAgICBwcmV2aWV3QXZhaWxhYmxlOiB0cnVlLFxuICAgICAgbGF5b3V0Q29uZmlybWVkOiBmYWxzZSxcbiAgICAgIGxhc3RQcmV2aWV3Q29udGVudFJldmlzaW9uOiBjb250ZW50UmV2aXNpb24sXG4gICAgfTtcbiAgICBzYXZlU3RhdGVUb0xvY2FsU3RvcmFnZSgpO1xuICAgIGVtaXRHZW5lcmF0aW9uU3RhdGVDaGFuZ2VkKCk7XG4gIH0sXG4gIG1hcmtMYXlvdXRDb25maXJtZWQ6ICh1cGRhdGUgPSB7fSkgPT4ge1xuICAgIGdlbmVyYXRpb25TdGF0ZSA9IHtcbiAgICAgIC4uLmdlbmVyYXRpb25TdGF0ZSxcbiAgICAgIC4uLnVwZGF0ZSxcbiAgICAgIHBoYXNlOiBHRU5FUkFUSU9OX1BIQVNFUy5DT05GSVJNRUQsXG4gICAgICBsYXlvdXRDb25maXJtZWQ6IHRydWUsXG4gICAgfTtcbiAgICBzYXZlU3RhdGVUb0xvY2FsU3RvcmFnZSgpO1xuICAgIGVtaXRHZW5lcmF0aW9uU3RhdGVDaGFuZ2VkKCk7XG4gIH0sXG4gIG1hcmtGaW5hbEdlbmVyYXRlZDogKGdlbmVyYXRlZEF0ID0gbnVsbCwgdXBkYXRlID0ge30pID0+IHtcbiAgICBjb25zdCBjb250ZW50UmV2aXNpb24gPSBub3JtYWxpemVSZXZpc2lvbihnZW5lcmF0aW9uU3RhdGUuY29udGVudFJldmlzaW9uKSA/PyAwO1xuICAgIGdlbmVyYXRpb25TdGF0ZSA9IHtcbiAgICAgIC4uLmdlbmVyYXRpb25TdGF0ZSxcbiAgICAgIC4uLnVwZGF0ZSxcbiAgICAgIHBoYXNlOiBHRU5FUkFUSU9OX1BIQVNFUy5GSU5BTF9DT01QTEVURSxcbiAgICAgIGxheW91dENvbmZpcm1lZDogdHJ1ZSxcbiAgICAgIGZpbmFsR2VuZXJhdGVkQXQ6IGdlbmVyYXRlZEF0IHx8IHVwZGF0ZS5maW5hbEdlbmVyYXRlZEF0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxhc3RGaW5hbENvbnRlbnRSZXZpc2lvbjogY29udGVudFJldmlzaW9uLFxuICAgIH07XG4gICAgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgICBlbWl0R2VuZXJhdGlvblN0YXRlQ2hhbmdlZCgpO1xuICB9LFxuICByZXNldEdlbmVyYXRpb25TdGF0ZTogKCkgPT4ge1xuICAgIGdlbmVyYXRpb25TdGF0ZSA9IGNyZWF0ZURlZmF1bHRHZW5lcmF0aW9uU3RhdGUoKTtcbiAgICBzYXZlU3RhdGVUb0xvY2FsU3RvcmFnZSgpO1xuICAgIGVtaXRHZW5lcmF0aW9uU3RhdGVDaGFuZ2VkKCk7XG4gIH0sXG4gIHNldERpcnR5UGhhc2VzOiAocGhhc2VzLCBlYXJsaWVzdFN0ZXApID0+IHtcbiAgICBnZW5lcmF0aW9uU3RhdGUgPSB7XG4gICAgICAuLi5nZW5lcmF0aW9uU3RhdGUsXG4gICAgICBkaXJ0eVBoYXNlczogICAgICAgQXJyYXkuaXNBcnJheShwaGFzZXMpID8gcGhhc2VzIDogW10sXG4gICAgICBlYXJsaWVzdERpcnR5U3RlcDogZWFybGllc3RTdGVwIHx8IG51bGwsXG4gICAgfTtcbiAgICBzYXZlU3RhdGVUb0xvY2FsU3RvcmFnZSgpO1xuICAgIGVtaXRHZW5lcmF0aW9uU3RhdGVDaGFuZ2VkKCk7XG4gIH0sXG4gIGNsZWFyRGlydHlQaGFzZXM6ICgpID0+IHtcbiAgICBnZW5lcmF0aW9uU3RhdGUgPSB7XG4gICAgICAuLi5nZW5lcmF0aW9uU3RhdGUsXG4gICAgICBkaXJ0eVBoYXNlczogICAgICAgW10sXG4gICAgICBlYXJsaWVzdERpcnR5U3RlcDogbnVsbCxcbiAgICB9O1xuICAgIHNhdmVTdGF0ZVRvTG9jYWxTdG9yYWdlKCk7XG4gICAgZW1pdEdlbmVyYXRpb25TdGF0ZUNoYW5nZWQoKTtcbiAgfSxcbiAgZ2V0RGlydHlQaGFzZXM6ICAgICAgICgpID0+IGdlbmVyYXRpb25TdGF0ZS5kaXJ0eVBoYXNlcyB8fCBbXSxcbiAgZ2V0RWFybGllc3REaXJ0eVN0ZXA6ICgpID0+IGdlbmVyYXRpb25TdGF0ZS5lYXJsaWVzdERpcnR5U3RlcCB8fCBudWxsLFxufTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGZyZXNoIHN0YXRlIG9iamVjdCB3aXRoIGFsbCBkZWZhdWx0IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gaW5pdGlhbGl6ZVN0YXRlKCkge1xuICBjdXJyZW50VGFiID0gJ2pvYic7XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuICB0YWJEYXRhID0ge1xuICAgIGFuYWx5c2lzOiBudWxsLFxuICAgIGN1c3RvbWl6YXRpb25zOiBudWxsLFxuICAgIGN2OiBudWxsXG4gIH07XG4gIGludGVyYWN0aXZlU3RhdGUgPSB7XG4gICAgaXNSZXZpZXdpbmc6IGZhbHNlLFxuICAgIGN1cnJlbnRJbmRleDogMCxcbiAgICB0eXBlOiBudWxsLFxuICAgIGRhdGE6IG51bGxcbiAgfTtcbiAgd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyA9IFtdO1xuICB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzID0ge307XG4gIGxhc3RLbm93blBoYXNlID0gUEhBU0VTLklOSVQ7XG4gIGdlbmVyYXRpb25TdGF0ZSA9IGNyZWF0ZURlZmF1bHRHZW5lcmF0aW9uU3RhdGUoKTtcblxuICAvLyBHZXQgb3IgZ2VuZXJhdGUgc2Vzc2lvbiBJRFxuICBsZXQgc3RvcmVkSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5TRVNTSU9OX0lEKTtcbiAgaWYgKCFzdG9yZWRJZCkge1xuICAgIHN0b3JlZElkID0gZ2VuZXJhdGVTZXNzaW9uSWQoKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTdG9yYWdlS2V5cy5TRVNTSU9OX0lELCBzdG9yZWRJZCk7XG4gIH1cbiAgc2Vzc2lvbklkID0gc3RvcmVkSWQ7XG5cbiAgc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKTtcbiAgZW1pdEdlbmVyYXRpb25TdGF0ZUNoYW5nZWQoKTtcbn1cblxuLyoqXG4gKiBMb2FkIHN0YXRlIGZyb20gYnJvd3NlciBsb2NhbFN0b3JhZ2UuXG4gKi9cbmZ1bmN0aW9uIGxvYWRTdGF0ZUZyb21Mb2NhbFN0b3JhZ2UoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5UQUJfREFUQSk7XG4gICAgaWYgKCFzYXZlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc2F2ZWQpO1xuXG4gICAgLy8gT25seSByZXN0b3JlIGlmIGRhdGEgaXMgcmVjZW50ICh3aXRoaW4gMjQgaG91cnMpXG4gICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIChkYXRhLnRpbWVzdGFtcCB8fCAwKTtcbiAgICBpZiAoYWdlID4gMjQgKiA2MCAqIDYwICogMTAwMCkge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU3RvcmFnZUtleXMuVEFCX0RBVEEpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgdGFiIGRhdGFcbiAgICBpZiAoZGF0YS50YWJEYXRhKSB7XG4gICAgICB0YWJEYXRhID0geyAuLi50YWJEYXRhLCAuLi5kYXRhLnRhYkRhdGEgfTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5jdXJyZW50VGFiKSB7XG4gICAgICBjdXJyZW50VGFiID0gZGF0YS5jdXJyZW50VGFiO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgaW50ZXJhY3RpdmUgc3RhdGVcbiAgICBpZiAoZGF0YS5pbnRlcmFjdGl2ZVN0YXRlKSB7XG4gICAgICBpbnRlcmFjdGl2ZVN0YXRlID0geyAuLi5pbnRlcmFjdGl2ZVN0YXRlLCAuLi5kYXRhLmludGVyYWN0aXZlU3RhdGUgfTtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIHBlbmRpbmcgcmVjb21tZW5kYXRpb25zXG4gICAgaWYgKGRhdGEucGVuZGluZ1JlY29tbWVuZGF0aW9ucykge1xuICAgICAgd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgPSBkYXRhLnBlbmRpbmdSZWNvbW1lbmRhdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBzYXZlZCBtb2RlbC9wcm92aWRlciBzZWxlY3Rpb25cbiAgICBpZiAoZGF0YS5jdXJyZW50TW9kZWxQcm92aWRlcikge1xuICAgICAgY3VycmVudE1vZGVsUHJvdmlkZXIgPSBkYXRhLmN1cnJlbnRNb2RlbFByb3ZpZGVyO1xuICAgIH1cbiAgICBpZiAoZGF0YS5jdXJyZW50TW9kZWxOYW1lKSB7XG4gICAgICBjdXJyZW50TW9kZWxOYW1lID0gZGF0YS5jdXJyZW50TW9kZWxOYW1lO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgcG9zdC1hbmFseXNpcyBzdGF0ZVxuICAgIGlmIChkYXRhLnBvc3RBbmFseXNpc1F1ZXN0aW9ucykge1xuICAgICAgd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyA9IGRhdGEucG9zdEFuYWx5c2lzUXVlc3Rpb25zO1xuICAgIH1cbiAgICBpZiAoZGF0YS5xdWVzdGlvbkFuc3dlcnMpIHtcbiAgICAgIHdpbmRvdy5xdWVzdGlvbkFuc3dlcnMgPSBkYXRhLnF1ZXN0aW9uQW5zd2VycztcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIHBoYXNlXG4gICAgaWYgKGRhdGEubGFzdEtub3duUGhhc2UpIHtcbiAgICAgIGxhc3RLbm93blBoYXNlID0gZGF0YS5sYXN0S25vd25QaGFzZTtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIHN0YWdlZCBnZW5lcmF0aW9uIHN0YXRlXG4gICAgaWYgKGRhdGEuZ2VuZXJhdGlvblN0YXRlKSB7XG4gICAgICBnZW5lcmF0aW9uU3RhdGUgPSB7IC4uLmdlbmVyYXRpb25TdGF0ZSwgLi4uZGF0YS5nZW5lcmF0aW9uU3RhdGUgfTtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIEFUUyBzY29yZVxuICAgIGlmIChkYXRhLmF0c1Njb3JlKSB7XG4gICAgICBhdHNTY29yZSA9IGRhdGEuYXRzU2NvcmU7XG4gICAgfVxuXG4gICAgZW1pdEdlbmVyYXRpb25TdGF0ZUNoYW5nZWQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cud2FybignRmFpbGVkIHRvIGxvYWQgc3RhdGUgZnJvbSBsb2NhbFN0b3JhZ2U6JywgZXJyb3IpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFNhdmUgY3VycmVudCBzdGF0ZSB0byBicm93c2VyIGxvY2FsU3RvcmFnZS5cbiAqL1xuZnVuY3Rpb24gc2F2ZVN0YXRlVG9Mb2NhbFN0b3JhZ2UoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YVRvU2F2ZSA9IHtcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIHRhYkRhdGEsXG4gICAgICBpbnRlcmFjdGl2ZVN0YXRlLFxuICAgICAgcGVuZGluZ1JlY29tbWVuZGF0aW9uczogd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMsXG4gICAgICBwb3N0QW5hbHlzaXNRdWVzdGlvbnM6IHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMsXG4gICAgICBxdWVzdGlvbkFuc3dlcnM6IHdpbmRvdy5xdWVzdGlvbkFuc3dlcnMsXG4gICAgICBsYXN0S25vd25QaGFzZSxcbiAgICAgIGN1cnJlbnRUYWIsXG4gICAgICAvLyBQZXJzaXN0IGxhc3Qtc2VsZWN0ZWQgbW9kZWwvcHJvdmlkZXIgc28gVUkgc2VsZWN0aW9ucyBzdXJ2aXZlIHJlbG9hZHNcbiAgICAgIGN1cnJlbnRNb2RlbFByb3ZpZGVyLFxuICAgICAgY3VycmVudE1vZGVsTmFtZSxcbiAgICAgIGdlbmVyYXRpb25TdGF0ZSxcbiAgICAgIGF0c1Njb3JlLFxuICAgIH07XG5cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTdG9yYWdlS2V5cy5UQUJfREFUQSwgSlNPTi5zdHJpbmdpZnkoZGF0YVRvU2F2ZSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy53YXJuKCdGYWlsZWQgdG8gc2F2ZSBzdGF0ZSB0byBsb2NhbFN0b3JhZ2U6JywgZXJyb3IpO1xuICB9XG59XG5cbi8qKlxuICogQ2xlYXIgYWxsIHN0YXRlIChvbiBuZXcgc2Vzc2lvbiBvciByZXNldCBhY3Rpb24pLlxuICovXG5mdW5jdGlvbiBjbGVhclN0YXRlKCkge1xuICBpbml0aWFsaXplU3RhdGUoKTtcbiAgT2JqZWN0LnZhbHVlcyhTdG9yYWdlS2V5cykuZm9yRWFjaChrZXkgPT4gbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KSk7XG59XG5cbi8vIFRoZSBhdXRob3JpdGF0aXZlIHJlc3RvcmVTZXNzaW9uL3Jlc3RvcmVCYWNrZW5kU3RhdGUvbG9hZFNlc3Npb25GaWxlXG4vLyBpbXBsZW1lbnRhdGlvbnMgbGl2ZSBpbiBgd2ViL2FwcC5qc2AuIFJlbW92ZSBkdXBsaWNhdGUgaW1wbGVtZW50YXRpb25zXG4vLyBmcm9tIHRoaXMgbW9kdWxlIHRvIGF2b2lkIGNvbmZsaWN0aW5nIGJlaGF2aW9yIGFuZCBlbnN1cmUgYSBzaW5nbGVcbi8vIHJlc3RvcmUgcGF0aCBpcyB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbi5cblxuZXhwb3J0IHtcbiAgUEhBU0VTLFxuICBQSEFTRV9UT19TVEVQLFxuICBHRU5FUkFUSU9OX1BIQVNFUyxcbiAgR0VORVJBVElPTl9TVEFURV9FVkVOVCxcbiAgc3RhdGVNYW5hZ2VyLFxuICBnZXRXb3JrZmxvd1N0ZXBGb3JQaGFzZSxcbiAgaW5pdGlhbGl6ZVN0YXRlLCBsb2FkU3RhdGVGcm9tTG9jYWxTdG9yYWdlLCBzYXZlU3RhdGVUb0xvY2FsU3RvcmFnZSxcbiAgY2xlYXJTdGF0ZSxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9wcm92aWRlci1pbmZvLmpzIFx1MjAxNCBMTE0gcHJvdmlkZXIgZGlzcGxheSBtZXRhZGF0YSBjbGllbnQuXG4gKlxuICogUHJvdmlkZXIgZGF0YSBpcyBub3cgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggaW4gc2NyaXB0cy91dGlscy9wcm92aWRlcl9yZWdpc3RyeS5weVxuICogYW5kIHNlcnZlZCBieSBHRVQgL2FwaS9wcm92aWRlcnMuIFRoaXMgbW9kdWxlIGZldGNoZXMgYW5kIGNhY2hlcyB0aGF0IGRhdGEuXG4gKlxuICogQWxsIHByb3ZpZGVyIGRlc2NyaXB0aW9ucywgVVJMcywgYW5kIHRpZXIvcHJpdmFjeSBmbGFncyBzaG91bGQgYmUgZWRpdGVkIGluXG4gKiBwcm92aWRlcl9yZWdpc3RyeS5weSByYXRoZXIgdGhhbiBoZXJlLlxuICpcbiAqIFNlcnZlciBmaWVsZCBuYW1lcyAoc25ha2VfY2FzZSwgbWF0Y2hpbmcgUHl0aG9uKTpcbiAqICAgZnJlZV90aWVyICAgXHUyMDE0IHdoZXRoZXIgYSBuby1jb3N0IEFQSSBlbnRyeSB0aWVyIGlzIGF2YWlsYWJsZVxuICogICBjb25maWRlbnRpYWwgXHUyMDE0IHdoZXRoZXIgdGhlIHByb3ZpZGVyIGNvbW1pdHMgbm90IHRvIHRyYWluIG9uIEFQSSByZXF1ZXN0IGRhdGFcbiAqICAgbm90ZSAgICAgICAgXHUyMDE0IG9uZS1zZW50ZW5jZSBwbGFpbi10ZXh0IGRlc2NyaXB0aW9uXG4gKiAgIGhvbWVwYWdlICAgIFx1MjAxNCBwcm92aWRlciBsYW5kaW5nIHBhZ2UgVVJMIChudWxsIGlmIG5vdCBhcHBsaWNhYmxlKVxuICogICBwcmljaW5nX3VybCBcdTIwMTQgcHJpY2luZyAvIHBsYW5zIHBhZ2UgVVJMIChudWxsIGlmIG5vdCBhcHBsaWNhYmxlKVxuICogICBwcml2YWN5X3VybCBcdTIwMTQgcHJpdmFjeSBwb2xpY3kgb3IgZGF0YS11c2UgcG9saWN5IFVSTCAobnVsbCBpZiBub3QgYXBwbGljYWJsZSlcbiAqL1xuXG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgb2JqZWN0PnxudWxsfSAqL1xubGV0IF9jYWNoZSA9IG51bGw7XG5cbi8qKlxuICogRmV0Y2ggcHJvdmlkZXIgZGlzcGxheSBtZXRhZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgYW5kIGNhY2hlIGl0LlxuICogU2FmZSB0byBjYWxsIG11bHRpcGxlIHRpbWVzIFx1MjAxNCByZXR1cm5zIHRoZSBjYWNoZSBpZiBwb3B1bGF0ZWQsIHJldHJpZXMgaWZcbiAqIHRoZSBpbml0aWFsIGZldGNoIGZhaWxlZCAobm9uLWZhdGFsLCBwb3BvdmVycyB3aWxsIGp1c3Qgbm90IGFwcGVhcikuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+fG51bGw+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFByb3ZpZGVySW5mbygpIHtcbiAgaWYgKF9jYWNoZSAhPT0gbnVsbCkgcmV0dXJuIF9jYWNoZTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2goJy9hcGkvcHJvdmlkZXJzJyk7XG4gICAgaWYgKHJlc3Aub2spIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwLmpzb24oKTtcbiAgICAgIF9jYWNoZSA9IGRhdGEucHJvdmlkZXJzIHx8IHt9O1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gTm9uLWZhdGFsOiBwb3BvdmVycyBzaW1wbHkgd29uJ3QgYXBwZWFyLlxuICB9XG4gIHJldHVybiBfY2FjaGU7XG59XG5cbi8qKlxuICogUmV0dXJuIGNhY2hlZCBkaXNwbGF5IGluZm8gZm9yIGEgcHJvdmlkZXIsIG9yIG51bGwgaWYgbm90IGxvYWRlZCAvIHVua25vd24uXG4gKiBDYWxsIGxvYWRQcm92aWRlckluZm8oKSBmaXJzdCAoZS5nLiBpbiBvcGVuTW9kZWxNb2RhbCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvdmlkZXJcbiAqIEByZXR1cm5zIHtvYmplY3R8bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3ZpZGVySW5mbyhwcm92aWRlcikge1xuICByZXR1cm4gX2NhY2hlID8gKF9jYWNoZVtwcm92aWRlcl0gfHwgbnVsbCkgOiBudWxsO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBIVE1MIGNvbnRlbnQgc3RyaW5nIGZvciBhIHByb3ZpZGVyIGluZm8gQm9vdHN0cmFwIDUgcG9wb3Zlci5cbiAqIFVzZXMgc25ha2VfY2FzZSBmaWVsZCBuYW1lcyBhcyByZXR1cm5lZCBieSBHRVQgL2FwaS9wcm92aWRlcnMuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5mbyAtIFByb3ZpZGVyIGluZm8gZW50cnkgZnJvbSBnZXRQcm92aWRlckluZm8oKVxuICogQHJldHVybnMge3N0cmluZ30gSFRNTCBzdHJpbmcgKHNhZmUgdG8gcGFzcyB0byBCUzUgUG9wb3ZlciB3aXRoIHNhbml0aXplOmZhbHNlKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZXJJbmZvUG9wb3ZlckNvbnRlbnQoaW5mbykge1xuICBjb25zdCB0aWVySWNvbiAgPSBpbmZvLmZyZWVfdGllciAgICA/ICcmIzEwMDAzOyBGcmVlIHRpZXIgYXZhaWxhYmxlJyAgICA6ICcmIzEwMDA3OyBQYWlkIG9ubHkgKG5vIGZyZWUgQVBJIHRpZXIpJztcbiAgY29uc3QgcHJpdkljb24gID0gaW5mby5jb25maWRlbnRpYWwgPyAnJiMxMjgyNzQ7IERhdGEgY29uZmlkZW50aWFsJyAgICAgOiAnJiM5ODg4OyYjNjUwMzk7IERhdGEgbWF5IGJlIHJldmlld2VkL3JldGFpbmVkJztcbiAgY29uc3QgdGllckNvbG9yID0gaW5mby5mcmVlX3RpZXIgICAgPyAnIzA2NWY0NicgOiAnIzkyNDAwZSc7XG4gIGNvbnN0IHByaXZDb2xvciA9IGluZm8uY29uZmlkZW50aWFsID8gJyMxZTQwYWYnIDogJyM5MjQwMGUnO1xuXG4gIGNvbnN0IGxpbmtzID0gW1xuICAgIGluZm8uaG9tZXBhZ2UgICAgPyBgPGEgaHJlZj1cIiR7ZXNjYXBlSHRtbChpbmZvLmhvbWVwYWdlKX1cIiAgICB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+SG9tZXBhZ2U8L2E+YCAgICAgICAgICAgOiAnJyxcbiAgICBpbmZvLnByaWNpbmdfdXJsID8gYDxhIGhyZWY9XCIke2VzY2FwZUh0bWwoaW5mby5wcmljaW5nX3VybCl9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlByaWNpbmcgJmFtcDsgcGxhbnM8L2E+YCA6ICcnLFxuICAgIGluZm8ucHJpdmFjeV91cmwgPyBgPGEgaHJlZj1cIiR7ZXNjYXBlSHRtbChpbmZvLnByaXZhY3lfdXJsKX1cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+UHJpdmFjeSBwb2xpY3k8L2E+YCAgICAgIDogJycsXG4gIF0uZmlsdGVyKEJvb2xlYW4pO1xuXG4gIHJldHVybiAnPGRpdiBzdHlsZT1cIm1pbi13aWR0aDoyMjBweDttYXgtd2lkdGg6MzAwcHg7Zm9udC1zaXplOjAuODJlbTtsaW5lLWhlaWdodDoxLjU7XCI+J1xuICAgICsgYDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjZweDtcIj48c3BhbiBzdHlsZT1cImNvbG9yOiR7dGllckNvbG9yfTtcIj4ke3RpZXJJY29ufTwvc3Bhbj48L2Rpdj5gXG4gICAgKyBgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206OHB4O1wiPjxzcGFuIHN0eWxlPVwiY29sb3I6JHtwcml2Q29sb3J9O1wiPiR7cHJpdkljb259PC9zcGFuPjwvZGl2PmBcbiAgICArIGA8cCBzdHlsZT1cIm1hcmdpbjowIDAgOHB4O2NvbG9yOiMzNzQxNTE7XCI+JHtlc2NhcGVIdG1sKGluZm8ubm90ZSl9PC9wPmBcbiAgICArIChsaW5rcy5sZW5ndGggPyAnPHVsIHN0eWxlPVwibWFyZ2luOjA7cGFkZGluZy1sZWZ0OjE2cHg7XCI+JyArIGxpbmtzLm1hcChsID0+IGA8bGk+JHtsfTwvbGk+YCkuam9pbignJykgKyAnPC91bD4nIDogJycpXG4gICAgKyAnPC9kaXY+Jztcbn1cbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogdWktY29yZS5qc1xuICogQ29yZSBVSSByb3V0aW5nLCB0YWIgbWFuYWdlbWVudCwgbW9kYWwgbWFuYWdlbWVudCwgYW5kIHBhZ2UgaW5pdGlhbGl6YXRpb24uXG4gKiBFbnRyeSBwb2ludCBmb3IgdGhlIGFwcGxpY2F0aW9uIC0gbG9hZHMgb24gRE9NQ29udGVudExvYWRlZC5cbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ3VpLWNvcmUnKTtcblxuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IHsgU3RvcmFnZUtleXMsIGFwaUNhbGwsIGZldGNoU3RhdHVzLCBmZXRjaFNldHRpbmdzLCB1cGRhdGVTZXR0aW5ncyB9IGZyb20gJy4vYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQge1xuICBnZXRXb3JrZmxvd1N0ZXBGb3JQaGFzZSxcbiAgaW5pdGlhbGl6ZVN0YXRlLFxuICBsb2FkU3RhdGVGcm9tTG9jYWxTdG9yYWdlLFxuICBzdGF0ZU1hbmFnZXIsXG59IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5pbXBvcnQgeyBfU1RFUF9ESVNQTEFZIH0gZnJvbSAnLi93b3JrZmxvdy1zdGVwcy5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuLy8gQWNjZXNzaWJpbGl0eTogRm9jdXMgTWFuYWdlbWVudCBmb3IgTW9kYWxzXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqIFN0YWNrIG9mIGVsZW1lbnRzIHRoYXQgb3BlbmVkIGVhY2ggbW9kYWwgKHN1cHBvcnRzIG5lc3RlZCBtb2RhbHMpLiAqL1xuY29uc3QgX2ZvY3VzU3RhY2sgPSBbXTtcblxuLyoqIFN0YWNrIG9mIGZvY3VzLXRyYXAgbGlzdGVuZXJzIChvbmUgcGVyIG9wZW4gbW9kYWwpLiAqL1xuY29uc3QgX2ZvY3VzVHJhcFN0YWNrID0gW107XG5sZXQgX3NldHRpbmdzRGF0YSA9IG51bGw7XG5jb25zdCBSRVRSWV9QT0xJQ1lfU1RPUkFHRV9LRVkgPSAnY3YtYnVpbGRlci1yZXRyeS1wb2xpY3knO1xuXG5mdW5jdGlvbiBfZ2V0UmV0cnlQb2xpY3lGcm9tU3RvcmFnZSgpIHtcbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgYmFzZU1zOiAxNTAwLFxuICAgIGNhcE1zOiA2MDAwMCxcbiAgICBtYXhBdHRlbXB0czogNixcbiAgICBhdXRvUmV0cnk6IHRydWUsXG4gIH07XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oUkVUUllfUE9MSUNZX1NUT1JBR0VfS0VZKTtcbiAgICBpZiAoIXJhdykgcmV0dXJuIGRlZmF1bHRzO1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICByZXR1cm4ge1xuICAgICAgYmFzZU1zOiBNYXRoLm1heCgyMDAsIE51bWJlcihwYXJzZWQuYmFzZU1zIHx8IGRlZmF1bHRzLmJhc2VNcykpLFxuICAgICAgY2FwTXM6IE1hdGgubWF4KDEwMDAsIE51bWJlcihwYXJzZWQuY2FwTXMgfHwgZGVmYXVsdHMuY2FwTXMpKSxcbiAgICAgIG1heEF0dGVtcHRzOiBNYXRoLm1heCgxLCBOdW1iZXIocGFyc2VkLm1heEF0dGVtcHRzIHx8IGRlZmF1bHRzLm1heEF0dGVtcHRzKSksXG4gICAgICBhdXRvUmV0cnk6IHBhcnNlZC5hdXRvUmV0cnkgIT09IGZhbHNlLFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0cztcbiAgfVxufVxuXG5mdW5jdGlvbiBfc2F2ZVJldHJ5UG9saWN5VG9TdG9yYWdlKHBvbGljeSkge1xuICB0cnkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFJFVFJZX1BPTElDWV9TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkocG9saWN5KSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLndhcm4oJ0NvdWxkIG5vdCBzYXZlIHJldHJ5IHBvbGljeSBwcmVmZXJlbmNlOicsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfc2V0dGluZ3NTb3VyY2VMYWJlbChtZXRhLCBrZXksIHJ1bnRpbWVPdmVycmlkZXMgPSBudWxsKSB7XG4gIGlmIChydW50aW1lT3ZlcnJpZGVzICYmIGtleSBpbiBydW50aW1lT3ZlcnJpZGVzKSB7XG4gICAgcmV0dXJuICdTb3VyY2U6IHJ1bnRpbWUgc2VsZWN0aW9uJztcbiAgfVxuICBjb25zdCBzb3VyY2UgPSBtZXRhPy5zb3VyY2VzPy5ba2V5XSB8fCAnZGVmYXVsdCc7XG4gIGNvbnN0IGVudktleSA9IG1ldGE/LmVudl9rZXlzPy5ba2V5XSB8fCBudWxsO1xuICBpZiAoc291cmNlID09PSAnZW52JykgcmV0dXJuIGBTb3VyY2U6IGVudmlyb25tZW50IHZhcmlhYmxlICgke2VudktleSB8fCAnbG9ja2VkJ30pYDtcbiAgaWYgKHNvdXJjZSA9PT0gJ2RvdGVudicpIHJldHVybiBgU291cmNlOiAuZW52ICgke2VudktleSB8fCAnbG9ja2VkJ30pYDtcbiAgaWYgKHNvdXJjZSA9PT0gJ2NvbmZpZycpIHJldHVybiAnU291cmNlOiBjb25maWcueWFtbCc7XG4gIHJldHVybiAnU291cmNlOiBidWlsdC1pbiBkZWZhdWx0Jztcbn1cblxuZnVuY3Rpb24gX3JlbmRlclNldHRpbmdzU291cmNlcyhtZXRhLCBydW50aW1lT3ZlcnJpZGVzID0gbnVsbCkge1xuICBjb25zdCBzb3VyY2VUYXJnZXRzID0gW1xuICAgICdsbG0uZGVmYXVsdF9wcm92aWRlcicsXG4gICAgJ2xsbS5kZWZhdWx0X21vZGVsJyxcbiAgICAnbGxtLnJlcXVlc3RfdGltZW91dF9zZWNvbmRzJyxcbiAgICAnbGxtLnRlbXBlcmF0dXJlJyxcbiAgICAnZ2VuZXJhdGlvbi5tYXhfc2tpbGxzJyxcbiAgICAnZ2VuZXJhdGlvbi5tYXhfYWNoaWV2ZW1lbnRzJyxcbiAgICAnZ2VuZXJhdGlvbi5tYXhfcHVibGljYXRpb25zJyxcbiAgICAnZ2VuZXJhdGlvbi5za2lsbHNfc2VjdGlvbl90aXRsZScsXG4gICAgJ2dlbmVyYXRpb24uZm9ybWF0cy5hdHNfZG9jeCcsXG4gICAgJ2dlbmVyYXRpb24uZm9ybWF0cy5odW1hbl9wZGYnLFxuICAgICdnZW5lcmF0aW9uLmZvcm1hdHMuaHVtYW5fZG9jeCcsXG4gIF07XG4gIHNvdXJjZVRhcmdldHMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc291cmNlLSR7a2V5fWApO1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBlbC50ZXh0Q29udGVudCA9IF9zZXR0aW5nc1NvdXJjZUxhYmVsKG1ldGEsIGtleSwgcnVudGltZU92ZXJyaWRlcyk7XG4gICAgY29uc3QgcnVudGltZUtleSA9IHJ1bnRpbWVPdmVycmlkZXMgJiYga2V5IGluIHJ1bnRpbWVPdmVycmlkZXM7XG4gICAgY29uc3QgaXNMb2NrZWQgPSBCb29sZWFuKG1ldGE/LmxvY2tlZD8uW2tleV0pO1xuICAgIGVsLnN0eWxlLmNvbG9yID0gcnVudGltZUtleSA/ICcjMWU0MGFmJyA6IChpc0xvY2tlZCA/ICcjYjQ1MzA5JyA6ICcjNjQ3NDhiJyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfc2V0U2V0dGluZ3NTdGF0dXMobWVzc2FnZSwga2luZCA9ICdpbmZvJykge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1zdGF0dXMtbXNnJyk7XG4gIGlmICghZWwpIHJldHVybjtcbiAgZWwuc3R5bGUuZGlzcGxheSA9ICcnO1xuICBpZiAoa2luZCA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgZWwuc3R5bGUuYmFja2dyb3VuZCA9ICcjZWNmZGY1JztcbiAgICBlbC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICM4NmVmYWMnO1xuICAgIGVsLnN0eWxlLmNvbG9yID0gJyMxNjY1MzQnO1xuICB9IGVsc2UgaWYgKGtpbmQgPT09ICdlcnJvcicpIHtcbiAgICBlbC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmZWYyZjInO1xuICAgIGVsLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2ZlY2FjYSc7XG4gICAgZWwuc3R5bGUuY29sb3IgPSAnIzk5MWIxYic7XG4gIH0gZWxzZSB7XG4gICAgZWwuc3R5bGUuYmFja2dyb3VuZCA9ICcjZWZmNmZmJztcbiAgICBlbC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNiZmRiZmUnO1xuICAgIGVsLnN0eWxlLmNvbG9yID0gJyMxZTQwYWYnO1xuICB9XG4gIGVsLnRleHRDb250ZW50ID0gbWVzc2FnZTtcbn1cblxuZnVuY3Rpb24gX2NvbGxlY3RTZXR0aW5nc1BheWxvYWRGcm9tRm9ybSgpIHtcbiAgcmV0dXJuIHtcbiAgICBsbG06IHtcbiAgICAgIGRlZmF1bHRfcHJvdmlkZXI6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1sbG0tZGVmYXVsdC1wcm92aWRlcicpPy52YWx1ZT8udHJpbSgpIHx8IG51bGwsXG4gICAgICBkZWZhdWx0X21vZGVsOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtbGxtLWRlZmF1bHQtbW9kZWwnKT8udmFsdWU/LnRyaW0oKSB8fCBudWxsLFxuICAgICAgcmVxdWVzdF90aW1lb3V0X3NlY29uZHM6IE51bWJlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtbGxtLXJlcXVlc3QtdGltZW91dCcpPy52YWx1ZSB8fCAxMjApLFxuICAgICAgdGVtcGVyYXR1cmU6IE51bWJlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtbGxtLXRlbXBlcmF0dXJlJyk/LnZhbHVlIHx8IDAuNyksXG4gICAgfSxcbiAgICBnZW5lcmF0aW9uOiB7XG4gICAgICBtYXhfc2tpbGxzOiBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLWdlbi1tYXgtc2tpbGxzJyk/LnZhbHVlIHx8IDIwKSxcbiAgICAgIG1heF9hY2hpZXZlbWVudHM6IE51bWJlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtZ2VuLW1heC1hY2hpZXZlbWVudHMnKT8udmFsdWUgfHwgNSksXG4gICAgICBtYXhfcHVibGljYXRpb25zOiBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLWdlbi1tYXgtcHVibGljYXRpb25zJyk/LnZhbHVlIHx8IDEwKSxcbiAgICAgIHNraWxsc19zZWN0aW9uX3RpdGxlOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtZ2VuLXNraWxscy10aXRsZScpPy52YWx1ZT8udHJpbSgpIHx8ICdTa2lsbHMnLFxuICAgICAgZm9ybWF0czoge1xuICAgICAgICBhdHNfZG9jeDogQm9vbGVhbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtZm9ybWF0LWF0cy1kb2N4Jyk/LmNoZWNrZWQpLFxuICAgICAgICBodW1hbl9wZGY6IEJvb2xlYW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLWZvcm1hdC1odW1hbi1wZGYnKT8uY2hlY2tlZCksXG4gICAgICAgIGh1bWFuX2RvY3g6IEJvb2xlYW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLWZvcm1hdC1odW1hbi1kb2N4Jyk/LmNoZWNrZWQpLFxuICAgICAgfSxcbiAgICAgIGFpX2F0dHJpYnV0aW9uOiBCb29sZWFuKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1nZW4tYWktYXR0cmlidXRpb24nKT8uY2hlY2tlZCksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gX2NvbGxlY3RSZXRyeVBvbGljeUZyb21Gb3JtKCkge1xuICByZXR1cm4ge1xuICAgIGJhc2VNczogTnVtYmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1yZXRyeS1iYXNlLW1zJyk/LnZhbHVlIHx8IDE1MDApLFxuICAgIGNhcE1zOiBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLXJldHJ5LWNhcC1tcycpPy52YWx1ZSB8fCA2MDAwMCksXG4gICAgbWF4QXR0ZW1wdHM6IE51bWJlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtcmV0cnktbWF4LWF0dGVtcHRzJyk/LnZhbHVlIHx8IDYpLFxuICAgIGF1dG9SZXRyeTogQm9vbGVhbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3MtcmV0cnktYXV0bycpPy5jaGVja2VkKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclNldHRpbmdzVG9Gb3JtKHBheWxvYWQpIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBwYXlsb2FkPy5zZXR0aW5ncyB8fCB7fTtcbiAgY29uc3QgbGxtID0gc2V0dGluZ3MubGxtIHx8IHt9O1xuICBjb25zdCBnZW5lcmF0aW9uID0gc2V0dGluZ3MuZ2VuZXJhdGlvbiB8fCB7fTtcbiAgY29uc3QgZm9ybWF0cyA9IGdlbmVyYXRpb24uZm9ybWF0cyB8fCB7fTtcbiAgY29uc3QgcnVudGltZVByb3ZpZGVyID0gcGF5bG9hZD8ucnVudGltZT8ubGxtPy5wcm92aWRlciB8fCBudWxsO1xuICBjb25zdCBydW50aW1lTW9kZWwgPSBwYXlsb2FkPy5ydW50aW1lPy5sbG0/Lm1vZGVsIHx8IG51bGw7XG4gIGNvbnN0IHJ1bnRpbWVPdmVycmlkZXMgPSB7fTtcbiAgaWYgKHJ1bnRpbWVQcm92aWRlcikgcnVudGltZU92ZXJyaWRlc1snbGxtLmRlZmF1bHRfcHJvdmlkZXInXSA9IHJ1bnRpbWVQcm92aWRlcjtcbiAgaWYgKHJ1bnRpbWVNb2RlbCkgcnVudGltZU92ZXJyaWRlc1snbGxtLmRlZmF1bHRfbW9kZWwnXSA9IHJ1bnRpbWVNb2RlbDtcblxuICBjb25zdCBzZXRWYWx1ZSA9IChpZCwgdmFsdWUpID0+IHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoZWwpIGVsLnZhbHVlID0gdmFsdWUgPz8gJyc7XG4gIH07XG4gIGNvbnN0IHNldENoZWNrZWQgPSAoaWQsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGVsKSBlbC5jaGVja2VkID0gQm9vbGVhbih2YWx1ZSk7XG4gIH07XG5cbiAgc2V0VmFsdWUoJ3NldHRpbmdzLWxsbS1kZWZhdWx0LXByb3ZpZGVyJywgcnVudGltZVByb3ZpZGVyIHx8IGxsbS5kZWZhdWx0X3Byb3ZpZGVyIHx8ICcnKTtcbiAgc2V0VmFsdWUoJ3NldHRpbmdzLWxsbS1kZWZhdWx0LW1vZGVsJywgcnVudGltZU1vZGVsIHx8IGxsbS5kZWZhdWx0X21vZGVsIHx8ICcnKTtcbiAgc2V0VmFsdWUoJ3NldHRpbmdzLWxsbS1yZXF1ZXN0LXRpbWVvdXQnLCBsbG0ucmVxdWVzdF90aW1lb3V0X3NlY29uZHMgPz8gMTIwKTtcbiAgc2V0VmFsdWUoJ3NldHRpbmdzLWxsbS10ZW1wZXJhdHVyZScsIGxsbS50ZW1wZXJhdHVyZSA/PyAwLjcpO1xuXG4gIHNldFZhbHVlKCdzZXR0aW5ncy1nZW4tbWF4LXNraWxscycsIGdlbmVyYXRpb24ubWF4X3NraWxscyA/PyAyMCk7XG4gIHNldFZhbHVlKCdzZXR0aW5ncy1nZW4tbWF4LWFjaGlldmVtZW50cycsIGdlbmVyYXRpb24ubWF4X2FjaGlldmVtZW50cyA/PyA1KTtcbiAgc2V0VmFsdWUoJ3NldHRpbmdzLWdlbi1tYXgtcHVibGljYXRpb25zJywgZ2VuZXJhdGlvbi5tYXhfcHVibGljYXRpb25zID8/IDEwKTtcbiAgc2V0VmFsdWUoJ3NldHRpbmdzLWdlbi1za2lsbHMtdGl0bGUnLCBnZW5lcmF0aW9uLnNraWxsc19zZWN0aW9uX3RpdGxlIHx8ICdTa2lsbHMnKTtcblxuICBzZXRDaGVja2VkKCdzZXR0aW5ncy1mb3JtYXQtYXRzLWRvY3gnLCBmb3JtYXRzLmF0c19kb2N4KTtcbiAgc2V0Q2hlY2tlZCgnc2V0dGluZ3MtZm9ybWF0LWh1bWFuLXBkZicsIGZvcm1hdHMuaHVtYW5fcGRmKTtcbiAgc2V0Q2hlY2tlZCgnc2V0dGluZ3MtZm9ybWF0LWh1bWFuLWRvY3gnLCBmb3JtYXRzLmh1bWFuX2RvY3gpO1xuICBzZXRDaGVja2VkKCdzZXR0aW5ncy1nZW4tYWktYXR0cmlidXRpb24nLCBnZW5lcmF0aW9uLmFpX2F0dHJpYnV0aW9uKTtcblxuICBjb25zdCByZXRyeVBvbGljeSA9IF9nZXRSZXRyeVBvbGljeUZyb21TdG9yYWdlKCk7XG4gIHNldFZhbHVlKCdzZXR0aW5ncy1yZXRyeS1iYXNlLW1zJywgcmV0cnlQb2xpY3kuYmFzZU1zKTtcbiAgc2V0VmFsdWUoJ3NldHRpbmdzLXJldHJ5LWNhcC1tcycsIHJldHJ5UG9saWN5LmNhcE1zKTtcbiAgc2V0VmFsdWUoJ3NldHRpbmdzLXJldHJ5LW1heC1hdHRlbXB0cycsIHJldHJ5UG9saWN5Lm1heEF0dGVtcHRzKTtcbiAgc2V0Q2hlY2tlZCgnc2V0dGluZ3MtcmV0cnktYXV0bycsIHJldHJ5UG9saWN5LmF1dG9SZXRyeSk7XG5cbiAgX3JlbmRlclNldHRpbmdzU291cmNlcyhwYXlsb2FkLm1ldGEgfHwge30sIHJ1bnRpbWVPdmVycmlkZXMpO1xuXG4gIGNvbnN0IHBhdGhFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1jb25maWctcGF0aCcpO1xuICBpZiAocGF0aEVsKSB7XG4gICAgcGF0aEVsLnRleHRDb250ZW50ID0gcGF5bG9hZD8ubWV0YT8uY29uZmlnX3BhdGhcbiAgICAgID8gYENvbmZpZyBmaWxlOiAke3BheWxvYWQubWV0YS5jb25maWdfcGF0aH1gXG4gICAgICA6ICcnO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlbG9hZFNldHRpbmdzTW9kYWwoKSB7XG4gIHRyeSB7XG4gICAgX3NldFNldHRpbmdzU3RhdHVzKCdMb2FkaW5nIHNldHRpbmdzLi4uJywgJ2luZm8nKTtcbiAgICBjb25zdCBbcmVzdWx0LCBzdGF0dXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW2ZldGNoU2V0dGluZ3MoKSwgZmV0Y2hTdGF0dXMoKS5jYXRjaCgoKSA9PiBudWxsKV0pO1xuICAgIF9yZW5kZXJTZXR0aW5nc1RvRm9ybShyZXN1bHQpO1xuICAgIC8vIGFpX2F0dHJpYnV0aW9uIGlzIHBlci1zZXNzaW9uLCBub3QgaW4gY29uZmlnLnlhbWwgXHUyMDE0IHJlYWQgZnJvbSBzZXNzaW9uIHN0YXR1c1xuICAgIGNvbnN0IGF0dHJFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1nZW4tYWktYXR0cmlidXRpb24nKTtcbiAgICBpZiAoYXR0ckVsICYmIHN0YXR1cykgYXR0ckVsLmNoZWNrZWQgPSBCb29sZWFuKHN0YXR1cy5haV9hdHRyaWJ1dGlvbik7XG4gICAgX3NldFNldHRpbmdzU3RhdHVzKCdTZXR0aW5ncyBsb2FkZWQuJywgJ3N1Y2Nlc3MnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBfc2V0U2V0dGluZ3NTdGF0dXMoYEZhaWxlZCB0byBsb2FkIHNldHRpbmdzOiAke2Vycm9yLm1lc3NhZ2UgfHwgZXJyb3J9YCwgJ2Vycm9yJyk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZVNldHRpbmdzTW9kYWwoKSB7XG4gIGNvbnN0IHNhdmVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0dGluZ3Mtc2F2ZS1idG4nKTtcbiAgdHJ5IHtcbiAgICBpZiAoc2F2ZUJ0bikge1xuICAgICAgc2F2ZUJ0bi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICBzYXZlQnRuLnRleHRDb250ZW50ID0gJ1NhdmluZy4uLic7XG4gICAgfVxuICAgIF9zZXRTZXR0aW5nc1N0YXR1cygnU2F2aW5nIHNldHRpbmdzLi4uJywgJ2luZm8nKTtcbiAgICBjb25zdCBwYXlsb2FkID0gX2NvbGxlY3RTZXR0aW5nc1BheWxvYWRGcm9tRm9ybSgpO1xuICAgIGNvbnN0IGFpQXR0cmlidXRpb24gPSBCb29sZWFuKHBheWxvYWQuZ2VuZXJhdGlvbj8uYWlfYXR0cmlidXRpb24pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHVwZGF0ZVNldHRpbmdzKHBheWxvYWQpO1xuICAgIF9zYXZlUmV0cnlQb2xpY3lUb1N0b3JhZ2UoX2NvbGxlY3RSZXRyeVBvbGljeUZyb21Gb3JtKCkpO1xuICAgIF9zZXR0aW5nc0RhdGEgPSByZXN1bHQ7XG4gICAgX3JlbmRlclNldHRpbmdzVG9Gb3JtKHJlc3VsdCk7XG4gICAgLy8gYWlfYXR0cmlidXRpb24gaXMgcGVyLXNlc3Npb24gc3RhdGUsIG5vdCBhIGNvbmZpZy55YW1sIGtleSBcdTIwMTQgc2F2ZSBpdCBzZXBhcmF0ZWx5XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9nZW5lcmF0aW9uLXNldHRpbmdzJywgeyBhaV9hdHRyaWJ1dGlvbjogYWlBdHRyaWJ1dGlvbiB9KTtcbiAgICB9IGNhdGNoIChfKSB7IC8qIG5vbi1mYXRhbCAqLyB9XG4gICAgX3NldFNldHRpbmdzU3RhdHVzKCdTZXR0aW5ncyBzYXZlZCBzdWNjZXNzZnVsbHkuJywgJ3N1Y2Nlc3MnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBfc2V0U2V0dGluZ3NTdGF0dXMoYEZhaWxlZCB0byBzYXZlIHNldHRpbmdzOiAke2Vycm9yLm1lc3NhZ2UgfHwgZXJyb3J9YCwgJ2Vycm9yJyk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHNhdmVCdG4pIHtcbiAgICAgIHNhdmVCdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIHNhdmVCdG4udGV4dENvbnRlbnQgPSAnU2F2ZSBTZXR0aW5ncyc7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5TZXR0aW5nc01vZGFsKCkge1xuICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NldHRpbmdzLW1vZGFsLW92ZXJsYXknKTtcbiAgaWYgKCFvdmVybGF5KSByZXR1cm47XG4gIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzU3RhY2sucHVzaChkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgc2V0SW5pdGlhbEZvY3VzKCdzZXR0aW5ncy1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnc2V0dGluZ3MtbW9kYWwtb3ZlcmxheScpO1xuICBhd2FpdCByZWxvYWRTZXR0aW5nc01vZGFsKCk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlU2V0dGluZ3NNb2RhbCgpIHtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1tb2RhbC1vdmVybGF5Jyk7XG4gIGlmIChvdmVybGF5KSBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG4vKipcbiAqIEdldCBhbGwgZm9jdXNhYmxlIGVsZW1lbnRzIHdpdGhpbiBhIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciAtIFRoZSBtb2RhbCBvciBjb250YWluZXIgZWxlbWVudFxuICogQHJldHVybnMge0hUTUxFbGVtZW50W119IEFycmF5IG9mIGZvY3VzYWJsZSBlbGVtZW50c1xuICovXG5mdW5jdGlvbiBnZXRGb2N1c2FibGVFbGVtZW50cyhjb250YWluZXIpIHtcbiAgY29uc3QgZm9jdXNhYmxlU2VsZWN0b3JzID0gW1xuICAgICdhW2hyZWZdJywgJ2J1dHRvbjpub3QoW2Rpc2FibGVkXSknLCAnaW5wdXQ6bm90KFtkaXNhYmxlZF0pJyxcbiAgICAndGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pJywgJ3NlbGVjdDpub3QoW2Rpc2FibGVkXSknLFxuICAgICdbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknLFxuICBdLmpvaW4oJywgJyk7XG4gIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGZvY3VzYWJsZVNlbGVjdG9ycykpO1xufVxuXG4vKipcbiAqIFNldCBpbml0aWFsIGZvY3VzIHRvIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBpbiBhIG1vZGFsLlxuICogUHJpb3JpdGl6ZXMgZWxlbWVudHMgd2l0aCBpZD1cIlttb2RhbElkXS1mb2N1cy10YXJnZXRcIiBpZiBwcmVzZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGFsSWQgLSBJRCBvZiB0aGUgbW9kYWxcbiAqL1xuZnVuY3Rpb24gc2V0SW5pdGlhbEZvY3VzKG1vZGFsSWQpIHtcbiAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtb2RhbElkKTtcbiAgaWYgKCFtb2RhbCkgcmV0dXJuO1xuXG4gIC8vIFRyeSB0byBmb2N1cyBhbiBleHBsaWNpdCB0YXJnZXQgKGUuZy4sIGlucHV0IGZpZWxkIHdpdGggY2xhc3MvaWQpXG4gIGNvbnN0IGZvY3VzVGFyZ2V0ID0gbW9kYWwucXVlcnlTZWxlY3RvcignW2RhdGEtZm9jdXMtdGFyZ2V0PVwidHJ1ZVwiXScpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cInRleHRcIl0nKSB8fFxuICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuXG4gIGlmIChmb2N1c1RhcmdldCkge1xuICAgIC8vIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBtb2RhbCByZW5kZXIgKyBhY3R1YWwgZGlzcGxheVxuICAgIHNldFRpbWVvdXQoKCkgPT4gZm9jdXNUYXJnZXQuZm9jdXMoKSwgNTApO1xuICB9XG59XG5cbi8qKlxuICogVHJhcCBmb2N1cyB3aXRoaW4gYSBtb2RhbCB1c2luZyBUYWIvU2hpZnQrVGFiLlxuICogUHJldmVudHMgdXNlciB0YWJiaW5nIHRvIGVsZW1lbnRzIG91dHNpZGUgdGhlIG1vZGFsLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGFsSWQgLSBJRCBvZiB0aGUgbW9kYWxcbiAqL1xuZnVuY3Rpb24gdHJhcEZvY3VzKG1vZGFsSWQpIHtcbiAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtb2RhbElkKTtcbiAgaWYgKCFtb2RhbCkgcmV0dXJuO1xuXG4gIGNvbnN0IGZvY3VzYWJsZUVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlRWxlbWVudHMobW9kYWwpO1xuICBpZiAoZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgY29uc3QgZmlyc3RFbGVtZW50ID0gZm9jdXNhYmxlRWxlbWVudHNbMF07XG4gIGNvbnN0IGxhc3RFbGVtZW50ID0gZm9jdXNhYmxlRWxlbWVudHNbZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbGlzdGVuZXIgPSAoZSkgPT4ge1xuICAgIGlmIChlLmtleSAhPT0gJ1RhYicpIHJldHVybjtcblxuICAgIGNvbnN0IGlzU2hpZnQgPSBlLnNoaWZ0S2V5O1xuICAgIGNvbnN0IGFjdGl2ZUVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgIGlmIChpc1NoaWZ0KSB7XG4gICAgICBpZiAoYWN0aXZlRWwgPT09IGZpcnN0RWxlbWVudCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxhc3RFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChhY3RpdmVFbCA9PT0gbGFzdEVsZW1lbnQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBmaXJzdEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGxpc3RlbmVyKTtcbiAgX2ZvY3VzVHJhcFN0YWNrLnB1c2gobGlzdGVuZXIpO1xufVxuXG4vKipcbiAqIFJlc3RvcmUgZm9jdXMgdG8gdGhlIGVsZW1lbnQgdGhhdCBvcGVuZWQgdGhlIG1vZGFsLlxuICovXG5mdW5jdGlvbiByZXN0b3JlRm9jdXMoKSB7XG4gIGNvbnN0IGVsID0gX2ZvY3VzU3RhY2sucG9wKCk7XG4gIGlmIChlbCAmJiB0eXBlb2YgZWwuZm9jdXMgPT09ICdmdW5jdGlvbicpIGVsLmZvY3VzKCk7XG5cbiAgY29uc3QgbGlzdGVuZXIgPSBfZm9jdXNUcmFwU3RhY2sucG9wKCk7XG4gIGlmIChsaXN0ZW5lcikgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGxpc3RlbmVyKTtcbn1cblxuZnVuY3Rpb24gcHVzaEZvY3VzU3RhY2soZWwpIHtcbiAgX2ZvY3VzU3RhY2sucHVzaChlbCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbn1cblxuLyoqIE1hcHMgZWFjaCB3b3JrZmxvdyBzdGFnZSAodG9wIGJhcikgdG8gdGhlIHRhYnMgc2hvd24gaW4gdGhlIHNlY29uZCBuYXYgYmFyLiAqL1xuY29uc3QgU1RBR0VfVEFCUyA9IHtcbiAgam9iOiAgICAgICAgICAgIFsnam9iJywgJ21hc3RlciddLFxuICBhbmFseXNpczogICAgICAgWydhbmFseXNpcyddLFxuICBjdXN0b21pemF0aW9uczogWydnb2FscycsICdxdWVzdGlvbnMnLCAnZXhwLXJldmlldycsICdhY2gtZWRpdG9yJywgJ3NraWxscy1yZXZpZXcnLCAnYWNoaWV2ZW1lbnRzLXJldmlldycsICd0YWdsaW5lLXJldmlldycsICdzdW1tYXJ5LXJldmlldycsICdwdWJsaWNhdGlvbnMtcmV2aWV3JywgJ2F0cy1zY29yZSddLFxuICByZXdyaXRlOiAgICAgICAgWydyZXdyaXRlJ10sXG4gIHNwZWxsOiAgICAgICAgICBbJ3NwZWxsJ10sXG4gIGxheW91dDogICAgICAgICBbJ2xheW91dCddLFxuICBkb3dubG9hZDogICAgICAgWydmaW5hbF9nZW5lcmF0ZScsICdkb3dubG9hZCddLFxuICBjb3Zlcl9sZXR0ZXI6ICAgWydjb3Zlci1sZXR0ZXInXSxcbiAgc2NyZWVuaW5nOiAgICAgIFsnc2NyZWVuaW5nJ10sXG4gIGludGVydmlld19wcmVwOiBbJ2ludGVydmlldy1wcmVwJ10sXG4gIHRoYW5rX3lvdTogICAgICBbJ3RoYW5rLXlvdSddLFxuICBoYXJ2ZXN0OiAgICAgICAgWydoYXJ2ZXN0J10sXG59O1xuXG4vKipcbiAqIEN1c3RvbSBjb25maXJtIGRpYWxvZyBcdTIwMTQgcmV0dXJucyBhIFByb21pc2U8Ym9vbGVhbj4uXG4gKiBSZXBsYWNlcyBicm93c2VyIGNvbmZpcm0oKSB3aGljaCBjYW4gYmUgc2lsZW50bHkgc3VwcHJlc3NlZCBvbmNlIHRoZSB1c2VyXG4gKiBjaGVja3MgXCJQcmV2ZW50IHRoaXMgcGFnZSBmcm9tIGNyZWF0aW5nIGFkZGl0aW9uYWwgZGlhbG9nc1wiLlxuICpcbiAqIFVzYWdlOiAgaWYgKGF3YWl0IGNvbmZpcm1EaWFsb2coJ0FyZSB5b3Ugc3VyZT8nKSkgeyAuLi4gfVxuICovXG5mdW5jdGlvbiBjb25maXJtRGlhbG9nKG1lc3NhZ2UsIHsgY29uZmlybUxhYmVsID0gJ09LJywgY2FuY2VsTGFiZWwgPSAnQ2FuY2VsJywgZGFuZ2VyID0gZmFsc2UgfSA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCBwcmV2aW91c0ZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgIC8vIFJldXNlIG9yIGNyZWF0ZSB0aGUgc2hhcmVkIG92ZXJsYXkgZWxlbWVudFxuICAgIGxldCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZpcm0tZGlhbG9nLW92ZXJsYXknKTtcbiAgICBpZiAoIW92ZXJsYXkpIHtcbiAgICAgIG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIG92ZXJsYXkuaWQgPSAnY29uZmlybS1kaWFsb2ctb3ZlcmxheSc7XG4gICAgICBvdmVybGF5LnN0eWxlLmNzc1RleHQgPVxuICAgICAgICAnZGlzcGxheTpub25lOyBwb3NpdGlvbjpmaXhlZDsgaW5zZXQ6MDsgYmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNDUpOyB6LWluZGV4Ojk5OTk7JyArXG4gICAgICAgICdhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7JztcbiAgICAgIG92ZXJsYXkuaW5uZXJIVE1MID1cbiAgICAgICAgJzxkaXYgaWQ9XCJjb25maXJtLWRpYWxvZy1ib3hcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIicgK1xuICAgICAgICAnIGFyaWEtbGFiZWxsZWRieT1cImNvbmZpcm0tZGlhbG9nLW1zZ1wiJyArXG4gICAgICAgICcgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZmY7IGJvcmRlci1yYWRpdXM6OHB4OyBwYWRkaW5nOjI0cHggMjhweDsnICtcbiAgICAgICAgJ21heC13aWR0aDo0MDBweDsgd2lkdGg6OTAlOyBib3gtc2hhZG93OjAgOHB4IDMycHggcmdiYSgwLDAsMCwwLjE4KTsgZm9udC1mYW1pbHk6aW5oZXJpdDtcIj4nICtcbiAgICAgICAgJzxwIGlkPVwiY29uZmlybS1kaWFsb2ctbXNnXCIgc3R5bGU9XCJtYXJnaW46MCAwIDIwcHg7IGZvbnQtc2l6ZTowLjk1ZW07IGNvbG9yOiMxZTI5M2I7IHdoaXRlLXNwYWNlOnByZS13cmFwO1wiPjwvcD4nICtcbiAgICAgICAgJzxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7IGdhcDo4cHg7IGp1c3RpZnktY29udGVudDpmbGV4LWVuZDtcIj4nICtcbiAgICAgICAgJzxidXR0b24gaWQ9XCJjb25maXJtLWRpYWxvZy1jYW5jZWxcIiBzdHlsZT1cInBhZGRpbmc6NnB4IDE2cHg7IGJvcmRlcjoxcHggc29saWQgI2NiZDVlMTsnICtcbiAgICAgICAgJ2JvcmRlci1yYWRpdXM6NXB4OyBiYWNrZ3JvdW5kOiNmOGZhZmM7IGN1cnNvcjpwb2ludGVyOyBjb2xvcjojNDc1NTY5O1wiPjwvYnV0dG9uPicgK1xuICAgICAgICAnPGJ1dHRvbiBpZD1cImNvbmZpcm0tZGlhbG9nLW9rXCIgc3R5bGU9XCJwYWRkaW5nOjZweCAxNnB4OyBib3JkZXI6bm9uZTsnICtcbiAgICAgICAgJ2JvcmRlci1yYWRpdXM6NXB4OyBjdXJzb3I6cG9pbnRlcjsgY29sb3I6I2ZmZjsgZm9udC13ZWlnaHQ6NjAwO1wiPjwvYnV0dG9uPicgK1xuICAgICAgICAnPC9kaXY+PC9kaXY+JztcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3ZlcmxheSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb2tCdG4gICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZpcm0tZGlhbG9nLW9rJyk7XG4gICAgY29uc3QgY2FuY2VsQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZpcm0tZGlhbG9nLWNhbmNlbCcpO1xuICAgIGNvbnN0IG1zZ0VsICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtLWRpYWxvZy1tc2cnKTtcblxuICAgIG1zZ0VsLnRleHRDb250ZW50ICAgICAgICAgID0gbWVzc2FnZTtcbiAgICBva0J0bi50ZXh0Q29udGVudCAgICAgICAgICA9IGNvbmZpcm1MYWJlbDtcbiAgICBjYW5jZWxCdG4udGV4dENvbnRlbnQgICAgICA9IGNhbmNlbExhYmVsO1xuICAgIG9rQnRuLnN0eWxlLmJhY2tncm91bmQgICAgID0gZGFuZ2VyID8gJyNkYzI2MjYnIDogJyMzYjgyZjYnO1xuXG4gICAgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIG9rQnRuLmZvY3VzKCk7XG5cbiAgICAvLyBGb2N1cyB0cmFwIFx1MjAxNCBrZWVwIFRhYi9TaGlmdCtUYWIgaW5zaWRlIHRoZSB0d28gYnV0dG9uc1xuICAgIGNvbnN0IHRyYXBGb2N1cyA9IChlKSA9PiB7XG4gICAgICBpZiAoZS5rZXkgIT09ICdUYWInKSByZXR1cm47XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBmb2N1c2VkID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgIChmb2N1c2VkID09PSBjYW5jZWxCdG4gPyBva0J0biA6IGNhbmNlbEJ0bikuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChmb2N1c2VkID09PSBva0J0biA/IGNhbmNlbEJ0biA6IG9rQnRuKS5mb2N1cygpO1xuICAgICAgfVxuICAgIH07XG4gICAgb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdHJhcEZvY3VzKTtcblxuICAgIGNvbnN0IGZpbmlzaCA9IChyZXN1bHQpID0+IHtcbiAgICAgIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIG92ZXJsYXkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRyYXBGb2N1cyk7XG4gICAgICAvLyBSZW1vdmUgbGlzdGVuZXJzIHRvIGF2b2lkIHN0YWNraW5nIGhhbmRsZXJzXG4gICAgICBva0J0bi5yZXBsYWNlV2l0aChva0J0bi5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgY2FuY2VsQnRuLnJlcGxhY2VXaXRoKGNhbmNlbEJ0bi5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgaWYgKHByZXZpb3VzRm9jdXMgJiYgdHlwZW9mIHByZXZpb3VzRm9jdXMuZm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJldmlvdXNGb2N1cy5mb2N1cygpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH07XG5cbiAgICAvLyBFc2NhcGUga2V5IGNhbmNlbHNcbiAgICBvdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4geyBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBmaW5pc2goZmFsc2UpOyB9LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgICAvLyBSZWJpbmQgY2xvbmVkIGJ1dHRvbnNcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uZmlybS1kaWFsb2ctb2snKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICAgICAoKSA9PiBmaW5pc2godHJ1ZSksICB7IG9uY2U6IHRydWUgfSk7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZpcm0tZGlhbG9nLWNhbmNlbCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gZmluaXNoKGZhbHNlKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHsgaWYgKGUudGFyZ2V0ID09PSBvdmVybGF5KSBmaW5pc2goZmFsc2UpOyB9LCB7IG9uY2U6IHRydWUgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIGFwcGxpY2F0aW9uIG9uIERPTSByZWFkeS5cbiAqIFNldHMgdXAgZXZlbnQgbGlzdGVuZXJzLCByZXN0b3JlcyBzZXNzaW9uLCBhbmQgbG9hZHMgaW5pdGlhbCB0YWIuXG4gKi9cbi8qKlxuICogU2V0IHVwIGFsbCBnbG9iYWwgZXZlbnQgbGlzdGVuZXJzLlxuICovXG5mdW5jdGlvbiBzZXR1cEV2ZW50TGlzdGVuZXJzKCkge1xuICAvLyBUYWIgYnV0dG9uc1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGFiJykuZm9yRWFjaCh0YWIgPT4ge1xuICAgIHRhYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICBjb25zdCB0YWJOYW1lID0gZS50YXJnZXQuaWQucmVwbGFjZSgndGFiLScsICcnKTtcbiAgICAgIHN3aXRjaFRhYih0YWJOYW1lKTtcbiAgICB9KTtcblxuICAgIC8vIEtleWJvYXJkIG5hdmlnYXRpb24gZm9yIHRhYnMgKFdDQUcgMi4xIEFBIHRhYmxpc3QgcGF0dGVybilcbiAgICB0YWIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgICAvLyBFbnRlci9TcGFjZSBhY3RpdmF0ZSB0aGUgZm9jdXNlZCB0YWJcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS50YXJnZXQuY2xpY2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gQXJyb3cvSG9tZS9FbmQgbmF2aWdhdGUgYW5kIGFjdGl2YXRlXG4gICAgICBpZiAoWydBcnJvd0xlZnQnLCAnQXJyb3dSaWdodCcsICdIb21lJywgJ0VuZCddLmluY2x1ZGVzKGUua2V5KSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50YWI6bm90KFtzdHlsZSo9XCJkaXNwbGF5OiBub25lXCJdKScpKTtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGFicy5pbmRleE9mKGUudGFyZ2V0KTtcblxuICAgICAgICBsZXQgbmV4dFRhYjtcbiAgICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBlLmtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICAgICAgbmV4dFRhYiA9IGUua2V5ID09PSAnSG9tZScgPyB0YWJzWzBdIDogdGFic1soY3VycmVudEluZGV4IC0gMSArIHRhYnMubGVuZ3RoKSAlIHRhYnMubGVuZ3RoXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0VGFiID0gZS5rZXkgPT09ICdFbmQnID8gdGFic1t0YWJzLmxlbmd0aCAtIDFdIDogdGFic1soY3VycmVudEluZGV4ICsgMSkgJSB0YWJzLmxlbmd0aF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dFRhYikge1xuICAgICAgICAgIG5leHRUYWIuZm9jdXMoKTtcbiAgICAgICAgICBuZXh0VGFiLmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gTWVzc2FnZSBpbnB1dCAoRW50ZXIga2V5IHRvIHNlbmQpXG4gIGNvbnN0IG1lc3NhZ2VJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZXNzYWdlLWlucHV0Jyk7XG4gIGlmIChtZXNzYWdlSW5wdXQpIHtcbiAgICBtZXNzYWdlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCAoZSkgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLnNlbmRNZXNzYWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZ2xvYmFsVGhpcy5zZW5kTWVzc2FnZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBNb2RhbCBjbG9zZSBvbiBFU0Mga2V5XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIGNsb3NlQWxsTW9kYWxzKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBDbG9zZSBtb2RhbHMgb24gYmFja2dyb3VuZCBjbGlja1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT1cImRpYWxvZ1wiXScpLmZvckVhY2gobW9kYWwgPT4ge1xuICAgIG1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICAgIGlmIChlLnRhcmdldCA9PT0gbW9kYWwpIHtcbiAgICAgICAgY2xvc2VNb2RhbChtb2RhbC5pZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgc3RhZ2UgdGhhdCBvd25zIGEgZ2l2ZW4gdGFiLCBvciBudWxsIGlmIHVubWFwcGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhYlxuICogQHJldHVybnMge3N0cmluZ3xudWxsfVxuICovXG5mdW5jdGlvbiBnZXRTdGFnZUZvclRhYih0YWIpIHtcbiAgZm9yIChjb25zdCBbc3RhZ2UsIHRhYnNdIG9mIE9iamVjdC5lbnRyaWVzKFNUQUdFX1RBQlMpKSB7XG4gICAgaWYgKHRhYnMuaW5jbHVkZXModGFiKSkgcmV0dXJuIHN0YWdlO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRWaXNpYmxlU3RhZ2UoKSB7XG4gIGNvbnN0IGFjdGl2ZVRhYiA9IHN0YXRlTWFuYWdlci5nZXRDdXJyZW50VGFiKCk7XG4gIHJldHVybiBnZXRTdGFnZUZvclRhYihhY3RpdmVUYWIpIHx8IGdldFdvcmtmbG93U3RlcEZvclBoYXNlKHN0YXRlTWFuYWdlci5nZXRQaGFzZSgpKTtcbn1cblxuLyoqXG4gKiBTaG93L2hpZGUgdGhlIHNjcm9sbCBhcnJvdyBidXR0b25zIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHRhYiBiYXIgaXMgc2Nyb2xsYWJsZS5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlVGFiU2Nyb2xsQnV0dG9ucygpIHtcbiAgY29uc3QgdGFiQmFyICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWItYmFyJyk7XG4gIGNvbnN0IGxlZnRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLXNjcm9sbC1sZWZ0Jyk7XG4gIGNvbnN0IHJpZ2h0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYi1zY3JvbGwtcmlnaHQnKTtcbiAgaWYgKCF0YWJCYXIgfHwgIWxlZnRCdG4gfHwgIXJpZ2h0QnRuKSByZXR1cm47XG4gIGxlZnRCdG4uc3R5bGUuZGlzcGxheSAgPSB0YWJCYXIuc2Nyb2xsTGVmdCA+IDAgPyAnJyA6ICdub25lJztcbiAgcmlnaHRCdG4uc3R5bGUuZGlzcGxheSA9IHRhYkJhci5zY3JvbGxMZWZ0IDwgdGFiQmFyLnNjcm9sbFdpZHRoIC0gdGFiQmFyLmNsaWVudFdpZHRoIC0gMSA/ICcnIDogJ25vbmUnO1xufVxuXG4vKipcbiAqIFNob3cgb25seSB0aGUgdGFicyB0aGF0IGJlbG9uZyB0byB0aGUgZ2l2ZW4gc3RhZ2UgaW4gdGhlIHNlY29uZCBuYXYgYmFyLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0YWdlIC0gS2V5IGZyb20gU1RBR0VfVEFCU1xuICovXG5mdW5jdGlvbiB1cGRhdGVUYWJCYXJGb3JTdGFnZShzdGFnZSkge1xuICBjb25zdCBzdGFnZVRhYnMgPSBTVEFHRV9UQUJTW3N0YWdlXSB8fCBbXTtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRhYicpLmZvckVhY2godGFiID0+IHtcbiAgICB0YWIuc3R5bGUuZGlzcGxheSA9IHN0YWdlVGFicy5pbmNsdWRlcyh0YWIuZGF0YXNldC50YWIpID8gJycgOiAnbm9uZSc7XG4gIH0pO1xuICAvLyBSZXNldCBzY3JvbGwgcG9zaXRpb24gdG8gc2hvdyBhY3RpdmUgdGFiLCB0aGVuIHJlZnJlc2ggYXJyb3cgdmlzaWJpbGl0eVxuICBjb25zdCB0YWJCYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLWJhcicpO1xuICBpZiAodGFiQmFyKSB0YWJCYXIuc2Nyb2xsTGVmdCA9IDA7XG4gIHVwZGF0ZVRhYlNjcm9sbEJ1dHRvbnMoKTtcblxuICAvLyBHQVAtMTYgKFBhcnQgQSk6IHN1cmZhY2Ugd2hpY2ggd29ya2Zsb3cgc3RlcCdzIHN1Yi10YWJzIGFyZSBjdXJyZW50bHlcbiAgLy8gc2hvd24uIFZpc2libGUtb25seSBsYWJlbCBcdTIwMTQgbm8gYXJpYS1saXZlIGhlcmU7IHN3aXRjaFRhYigpIGluXG4gIC8vIHJldmlldy10YWJsZS1iYXNlLmpzIGlzIHRoZSBzb2xlIGxpdmUtc3BlZWNoIHNvdXJjZSBmb3IgdGhpcyBldmVudCwgdG9cbiAgLy8gYXZvaWQgYSBkb3VibGUtYW5ub3VuY2UgZnJvbSB0d28gaW5kZXBlbmRlbnQgbGl2ZSByZWdpb25zLlxuICBjb25zdCBsYWJlbEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYi1zdGFnZS1sYWJlbCcpO1xuICBpZiAobGFiZWxFbCkge1xuICAgIGNvbnN0IHN0ZXBMYWJlbCA9IF9TVEVQX0RJU1BMQVlbc3RhZ2VdIHx8IHN0YWdlO1xuICAgIGxhYmVsRWwudGV4dENvbnRlbnQgPSBzdGVwTGFiZWwgPyBgTm93IHZpZXdpbmc6ICR7c3RlcExhYmVsfWAgOiAnJztcbiAgfVxufVxuXG4vLyBsb2FkVGFiQ29udGVudCgpIGxpdmVzIGluIHdlYi9yZXZpZXctdGFibGUtYmFzZS5qcywgd2hpY2ggb3ducyB0aGVcbi8vIGZ1bGwgfjIwLWNhc2UgdGFiIGRpc3BhdGNoICh0aGlzIGZpbGUncyBjb3B5IG9ubHkgZXZlciBoYW5kbGVkIDUgb2YgdGhlbVxuLy8gYW5kIHdhcyBuZXZlciBjYWxsZWQgaW50ZXJuYWxseSBcdTIwMTQgZGVhZCBjb2RlLCBzdXBlcnNlZGVkIG9uY2UgdGhlIHRhYlxuLy8gc3lzdGVtIGdyZXcpLiByZXZpZXctdGFibGUtYmFzZS5qcydzIHZlcnNpb24gbm93IGNhcnJpZXMgdGhlIHNhbWVcbi8vIHNhZmUgdGV4dENvbnRlbnQtYmFzZWQgZXJyb3IgcmVuZGVyaW5nIHRoaXMgY29weSBoYWQ7IHNlZSBpdHMgb3duXG4vLyB0cnkvY2F0Y2guIFJlbW92ZWQgaGVyZSByYXRoZXIgdGhhbiBsZWZ0IHRvIGRyaWZ0IGZ1cnRoZXIgb3V0IG9mIHN5bmMuXG5cbi8qKlxuICogVG9nZ2xlIGNvbGxhcHNpYmxlIGNoYXQgcGFuZWwgKGludGVyYWN0aW9uIGFyZWEpLlxuICovXG5mdW5jdGlvbiB0b2dnbGVDaGF0KCkge1xuICBjb25zdCBpbnRlcmFjdGlvbkFyZWEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaW50ZXJhY3Rpb24tYXJlYScpO1xuICBjb25zdCB2aWV3ZXJBcmVhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnZpZXdlci1hcmVhJyk7XG5cbiAgaWYgKGludGVyYWN0aW9uQXJlYSkge1xuICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gaW50ZXJhY3Rpb25BcmVhLmNsYXNzTGlzdC50b2dnbGUoJ2NvbGxhcHNlZCcpO1xuICAgIGlmICh2aWV3ZXJBcmVhKSB7XG4gICAgICB2aWV3ZXJBcmVhLnN0eWxlLmZsZXggPSBpc0NvbGxhcHNlZCA/ICcxIDEgMTAwJScgOiAnMCAxIDYwJSc7XG4gICAgfVxuICAgIC8vIEtlZXAgYXJpYS1sYWJlbCBhbmQgYXJpYS1leHBhbmRlZCBpbiBzeW5jIHdpdGggY29sbGFwc2VkIHN0YXRlXG4gICAgY29uc3QgdG9nZ2xlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvZ2dsZS1jaGF0Jyk7XG4gICAgaWYgKHRvZ2dsZUJ0bikge1xuICAgICAgdG9nZ2xlQnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIFN0cmluZyghaXNDb2xsYXBzZWQpKTtcbiAgICAgIHRvZ2dsZUJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBpc0NvbGxhcHNlZCA/ICdFeHBhbmQgY2hhdCBwYW5lbCcgOiAnQ29sbGFwc2UgY2hhdCBwYW5lbCcpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU3RvcmFnZUtleXMuQ0hBVF9DT0xMQVBTRUQsIGlzQ29sbGFwc2VkKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybignQ291bGQgbm90IHNhdmUgY2hhdCBzdGF0ZScpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE9wZW4gYSBtb2RhbCBieSBJRC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RhbElkIC0gSUQgb2YgbW9kYWwgZWxlbWVudFxuICovXG5mdW5jdGlvbiBvcGVuTW9kYWwobW9kYWxJZCkge1xuICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1vZGFsSWQpO1xuICBpZiAobW9kYWwpIHtcbiAgICAvLyBTYXZlIGZvY3VzIGJlZm9yZSBvcGVuaW5nIG1vZGFsXG4gICAgX2ZvY3VzU3RhY2sucHVzaChkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcblxuICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XG4gICAgLy8gTG9jayBib2R5IHNjcm9sbFxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcblxuICAgIC8vIFNldCBpbml0aWFsIGZvY3VzIGFuZCB0cmFwIGZvY3VzIHdpdGhpbiBtb2RhbFxuICAgIHNldEluaXRpYWxGb2N1cyhtb2RhbElkKTtcbiAgICB0cmFwRm9jdXMobW9kYWxJZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDbG9zZSBhIG1vZGFsIGJ5IElELlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGFsSWQgLSBJRCBvZiBtb2RhbCBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGNsb3NlTW9kYWwobW9kYWxJZCkge1xuICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1vZGFsSWQpO1xuICBpZiAobW9kYWwpIHtcbiAgICBpZiAobW9kYWwuZGF0YXNldC5kaXNtaXNzRGlzYWJsZWQgPT09ICcxJykgcmV0dXJuO1xuICAgIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc2libGUnKTtcbiAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAvLyBSZXN0b3JlIGJvZHkgc2Nyb2xsXG4gICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbcm9sZT1cImRpYWxvZ1wiXS52aXNpYmxlJykpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJztcbiAgICB9XG4gICAgLy8gUmVzdG9yZSBmb2N1c1xuICAgIHJlc3RvcmVGb2N1cygpO1xuICB9XG59XG5cbi8qKlxuICogQ2xvc2UgYWxsIG9wZW4gbW9kYWxzLlxuICovXG5mdW5jdGlvbiBjbG9zZUFsbE1vZGFscygpIHtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9XCJkaWFsb2dcIl0nKS5mb3JFYWNoKG1vZGFsID0+IHtcbiAgICBpZiAobW9kYWwuZGF0YXNldC5kaXNtaXNzRGlzYWJsZWQgPT09ICcxJykgcmV0dXJuO1xuICAgIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc2libGUnKTtcbiAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICBpZiAobW9kYWwuc3R5bGUuZGlzcGxheSAmJiBtb2RhbC5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScpIHtcbiAgICAgIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICB9KTtcbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICcnO1xuICAvLyBSZXN0b3JlIGZvY3VzXG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgTW9kZWwgc2VsZWN0b3IgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmxldCBfbW9kZWxEYXRhID0gbnVsbDsgLy8gY2FjaGVkIGZyb20gbGFzdCBsb2FkTW9kZWxTZWxlY3RvcigpIGNhbGxcbmxldCBfbW9kZWxEYXRhVGFibGUgPSBudWxsO1xubGV0IF9zZWxlY3RlZE1vZGVsUHJvdmlkZXJzID0gbmV3IFNldCgpO1xubGV0IF9tb2RlbFNlbGVjdG9yTG9hZGluZyA9IGZhbHNlOyAgIC8vIGd1YXJkOiBsb2FkTW9kZWxTZWxlY3RvcigpIGluIGZsaWdodFxubGV0IF9jYXRhbG9nUmVmcmVzaGluZyA9IGZhbHNlOyAgICAgIC8vIGd1YXJkOiBfcmVmcmVzaE1vZGVsQ2F0YWxvZ0ZvclNlbGVjdGlvbigpIGluIGZsaWdodFxubGV0IF9jYXRhbG9nUmVmcmVzaFBlbmRpbmcgPSBmYWxzZTsgIC8vIHF1ZXVlIG9uZSByZXJ1biB3aGVuIHRvZ2dsZXMgaGFwcGVuIG1pZC1yZWZyZXNoXG5sZXQgX3Nob3dGdWxsTW9kZWxDYXRhbG9nID0gZmFsc2U7XG5sZXQgX2NvcGlsb3RBdXRoUG9sbFRpbWVyID0gbnVsbDtcbmxldCBfbW9kZWxXaXphcmRTdGVwID0gMTtcbmxldCBfbW9kZWxXaXphcmRTZWxlY3RlZFByb3ZpZGVyID0gbnVsbDtcblxuXG5mdW5jdGlvbiBfZ2V0TW9kZWxQcmVmc0Zyb21TdG9yYWdlKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU3RvcmFnZUtleXMuVEFCX0RBVEEpO1xuICAgIHJldHVybiBzYXZlZCA/IChKU09OLnBhcnNlKHNhdmVkKSB8fCB7fSkgOiB7fTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmZ1bmN0aW9uIF9zYXZlTW9kZWxQcmVmc1RvU3RvcmFnZShwYXRjaCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IF9nZXRNb2RlbFByZWZzRnJvbVN0b3JhZ2UoKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTdG9yYWdlS2V5cy5UQUJfREFUQSwgSlNPTi5zdHJpbmdpZnkoeyAuLi5wYXJzZWQsIC4uLnBhdGNoIH0pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy53YXJuKCdGYWlsZWQgdG8gcGVyc2lzdCBtb2RlbCBwcmVmZXJlbmNlcyBsb2NhbGx5OicsIGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hcHBlbmRSZWNlbnRNb2RlbChwcm92aWRlciwgbW9kZWwpIHtcbiAgaWYgKCFwcm92aWRlciB8fCAhbW9kZWwpIHJldHVybjtcbiAgY29uc3QgcGFyc2VkID0gX2dldE1vZGVsUHJlZnNGcm9tU3RvcmFnZSgpO1xuICBjb25zdCBleGlzdGluZyA9IEFycmF5LmlzQXJyYXkocGFyc2VkLnJlY2VudE1vZGVscykgPyBwYXJzZWQucmVjZW50TW9kZWxzIDogW107XG4gIGNvbnN0IGZpbHRlcmVkID0gZXhpc3RpbmcuZmlsdGVyKChpdGVtKSA9PiAhKGl0ZW0ucHJvdmlkZXIgPT09IHByb3ZpZGVyICYmIGl0ZW0ubW9kZWwgPT09IG1vZGVsKSk7XG4gIGZpbHRlcmVkLnVuc2hpZnQoeyBwcm92aWRlciwgbW9kZWwgfSk7XG4gIF9zYXZlTW9kZWxQcmVmc1RvU3RvcmFnZSh7IHJlY2VudE1vZGVsczogZmlsdGVyZWQuc2xpY2UoMCwgNikgfSk7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVMbG1TdGF0dXNQaWxsKGtpbmQsIHRleHQsIGljb24gPSAnJywgdG9vbHRpcCA9ICcnKSB7XG4gIGNvbnN0IHBpbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtLXN0YXR1cy1waWxsJyk7XG4gIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbS1zdGF0dXMtbGFiZWwnKTtcbiAgY29uc3QgaWNvbkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbS1zdGF0dXMtaWNvbicpO1xuICBpZiAoIXBpbGwgfHwgIWxhYmVsKSByZXR1cm47XG5cbiAgY29uc3QgYWxpYXNlcyA9IHtcbiAgICBhdXRoZW50aWNhdGVkOiAnY29ubmVjdGVkJyxcbiAgICB1bmF1dGhlbnRpY2F0ZWQ6ICd1bmNvbmZpZ3VyZWQnLFxuICAgIHBvbGxpbmc6ICdjb25uZWN0aW5nJyxcbiAgfTtcbiAgY29uc3Qgbm9ybWFsaXplZEtpbmQgPSBhbGlhc2VzW2tpbmRdIHx8IGtpbmQgfHwgJ3VuY29uZmlndXJlZCc7XG4gIGNvbnN0IGRlZmF1bHRUb29sdGlwID0ge1xuICAgIHVuY29uZmlndXJlZDogJ05vIHByb3ZpZGVyL21vZGVsIGlzIGNvbmZpZ3VyZWQgeWV0LicsXG4gICAgY29uZmlndXJlZDogJ1Byb3ZpZGVyL21vZGVsIGlzIGNvbmZpZ3VyZWQuIENvbm5lY3Rpdml0eSBub3QgeWV0IHZlcmlmaWVkLicsXG4gICAgY29ubmVjdGluZzogJ1Rlc3Rpbmcgb3IgY29ubmVjdGluZyB0byB0aGUgc2VsZWN0ZWQgcHJvdmlkZXIuJyxcbiAgICBjb25uZWN0ZWQ6ICdQcm92aWRlciByZXNwb25kZWQgc3VjY2Vzc2Z1bGx5IHRvIGEgbGl2ZSByZXF1ZXN0LicsXG4gICAgJ2F1dGgtcmVxdWlyZWQnOiAnQXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQuIENoZWNrIEFQSSBrZXkgb3Igc2lnbiBpbi4nLFxuICAgICdyYXRlLWxpbWl0ZWQnOiAnUmF0ZSBsaW1pdCByZWFjaGVkLiBXYWl0IGJlZm9yZSByZXRyeWluZyByZXF1ZXN0cy4nLFxuICAgIHVuYXZhaWxhYmxlOiAnUHJvdmlkZXIgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUgb3IgdW5yZWFjaGFibGUuJyxcbiAgICBlcnJvcjogJ0Nvbm5lY3Rpb24gZmFpbGVkLiBPcGVuIG1vZGVsIHNldHRpbmdzIGZvciBkZXRhaWxzLicsXG4gIH07XG4gIHBpbGwuY2xhc3NMaXN0LnJlbW92ZSgnYXV0aGVudGljYXRlZCcsICd1bmF1dGhlbnRpY2F0ZWQnLCAncG9sbGluZycsICd1bmNvbmZpZ3VyZWQnLCAnY29uZmlndXJlZCcsICdjb25uZWN0aW5nJywgJ2Nvbm5lY3RlZCcsICdhdXRoLXJlcXVpcmVkJywgJ3JhdGUtbGltaXRlZCcsICd1bmF2YWlsYWJsZScsICdlcnJvcicpO1xuICBpZiAobm9ybWFsaXplZEtpbmQpIHBpbGwuY2xhc3NMaXN0LmFkZChub3JtYWxpemVkS2luZCk7XG4gIGxhYmVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgY29uc3QgaWNvbkJ5S2luZCA9IHtcbiAgICB1bmNvbmZpZ3VyZWQ6ICdcdTI1Q0InLFxuICAgIGNvbmZpZ3VyZWQ6ICdcdTI1RDQnLFxuICAgIGNvbm5lY3Rpbmc6ICdcdTI5RDcnLFxuICAgIGNvbm5lY3RlZDogJ1x1MjcxMycsXG4gICAgJ2F1dGgtcmVxdWlyZWQnOiAnXHVEODNEXHVERDExJyxcbiAgICAncmF0ZS1saW1pdGVkJzogJ1x1MjNGMycsXG4gICAgdW5hdmFpbGFibGU6ICdcdTI2MDEnLFxuICAgIGVycm9yOiAnXHUyNkEwJyxcbiAgfTtcbiAgY29uc3QgaWNvblRleHQgPSBpY29uIHx8IGljb25CeUtpbmRbbm9ybWFsaXplZEtpbmRdIHx8ICdcdTI2QTAnO1xuICBpZiAoaWNvbkVsKSBpY29uRWwudGV4dENvbnRlbnQgPSBpY29uVGV4dDtcbiAgY29uc3QgdG9vbHRpcFRleHQgPSB0b29sdGlwIHx8IGRlZmF1bHRUb29sdGlwW25vcm1hbGl6ZWRLaW5kXSB8fCAnJztcbiAgcGlsbC50aXRsZSA9IHRvb2x0aXBUZXh0O1xuICBpZiAoaWNvbkVsKSBpY29uRWwudGl0bGUgPSB0b29sdGlwVGV4dDtcbiAgbGFiZWwudGl0bGUgPSB0b29sdGlwVGV4dDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZE1vZGVsU2VsZWN0b3IoKSB7XG4gIGlmIChfbW9kZWxTZWxlY3RvckxvYWRpbmcpIHJldHVybjtcbiAgX21vZGVsU2VsZWN0b3JMb2FkaW5nID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBfbW9kZWxEYXRhID0gYXdhaXQgYXBpQ2FsbCgnR0VUJywgJy9hcGkvbW9kZWwnKTtcbiAgICAvLyBJZiBiYWNrZW5kIGRpZG4ndCByZXR1cm4gYSBwZXJzaXN0ZW50IHNlbGVjdGlvbiwgcHJlZmVyIGEgbG9jYWxseS1zYXZlZCBjaG9pY2VcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5UQUJfREFUQSk7XG4gICAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShzYXZlZCk7XG4gICAgICAgIGlmIChwYXJzZWQgJiYgIShfbW9kZWxEYXRhICYmIF9tb2RlbERhdGEucHJvdmlkZXIpICYmIHBhcnNlZC5jdXJyZW50TW9kZWxQcm92aWRlcikge1xuICAgICAgICAgIF9tb2RlbERhdGEgPSBfbW9kZWxEYXRhIHx8IHt9O1xuICAgICAgICAgIF9tb2RlbERhdGEucHJvdmlkZXIgPSBwYXJzZWQuY3VycmVudE1vZGVsUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlZCAmJiAhKF9tb2RlbERhdGEgJiYgX21vZGVsRGF0YS5tb2RlbCkgJiYgcGFyc2VkLmN1cnJlbnRNb2RlbE5hbWUpIHtcbiAgICAgICAgICBfbW9kZWxEYXRhID0gX21vZGVsRGF0YSB8fCB7fTtcbiAgICAgICAgICBfbW9kZWxEYXRhLm1vZGVsID0gcGFyc2VkLmN1cnJlbnRNb2RlbE5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybignQ291bGQgbm90IHJlYWQgc2F2ZWQgbW9kZWwgZnJvbSBsb2NhbFN0b3JhZ2U6JywgZSk7XG4gICAgfVxuICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWN1cnJlbnQtbGFiZWwnKTtcbiAgICBpZiAobGFiZWwpIHtcbiAgICAgIGNvbnN0IHByb3YgID0gX21vZGVsRGF0YS5wcm92aWRlcjtcbiAgICAgIGNvbnN0IG1vZGVsID0gX21vZGVsRGF0YS5tb2RlbCB8fCAnXHUyMDE0JztcbiAgICAgIGxhYmVsLnRleHRDb250ZW50ID0gcHJvdiA/IGAke3Byb3Z9IFx1MDBCNyAke21vZGVsfWAgOiBtb2RlbDtcbiAgICB9XG4gICAgaWYgKF9tb2RlbERhdGEgJiYgX21vZGVsRGF0YS5wcm92aWRlcikge1xuICAgICAgX3NlbGVjdGVkTW9kZWxQcm92aWRlcnMgPSBuZXcgU2V0KFtfbW9kZWxEYXRhLnByb3ZpZGVyXSk7XG4gICAgICBfdXBkYXRlTGxtU3RhdHVzUGlsbCgnY29uZmlndXJlZCcsIGAke19tb2RlbERhdGEucHJvdmlkZXJ9IGNvbmZpZ3VyZWRgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3VwZGF0ZUxsbVN0YXR1c1BpbGwoJ3VuY29uZmlndXJlZCcsICdOb3QgY29uZmlndXJlZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy53YXJuKCdDb3VsZCBub3QgbG9hZCBtb2RlbCBsaXN0OicsIGUpO1xuICB9IGZpbmFsbHkge1xuICAgIF9tb2RlbFNlbGVjdG9yTG9hZGluZyA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9wcm92aWRlclN0YWdlTGFiZWwocHJvdmlkZXIsIGNhcGFibGVTZXQpIHtcbiAgY29uc3QgaXNDYXBhYmxlID0gY2FwYWJsZVNldC5oYXMocHJvdmlkZXIpO1xuICByZXR1cm4gaXNDYXBhYmxlID8gJ2xpc3RfbW9kZWxzJyA6ICdmYWxsYmFjayc7XG59XG5cbmZ1bmN0aW9uIF9wcm92aWRlckRpc3BsYXlMYWJlbChwcm92aWRlcikge1xuICBjb25zdCBkZXByZWNhdGVkID0ge1xuICAgICdjb3BpbG90LW9hdXRoJzogJ0NvcGlsb3QgT0F1dGggKGRlcHJlY2F0ZWQpJyxcbiAgICBjb3BpbG90OiAnQ29waWxvdCAoZGVwcmVjYXRlZCknLFxuICAgIGdpdGh1YjogJ0dpdEh1YiBNb2RlbHMgKGRlcHJlY2F0ZWQpJyxcbiAgICAnY29waWxvdC1zZGsnOiAnQ29waWxvdCBTREsgKHJlY29tbWVuZGVkKScsXG4gIH07XG4gIGlmIChkZXByZWNhdGVkW3Byb3ZpZGVyXSkgcmV0dXJuIGRlcHJlY2F0ZWRbcHJvdmlkZXJdO1xuICByZXR1cm4gcHJvdmlkZXI7XG59XG5cbmZ1bmN0aW9uIF9nZXRRdWlja01vZGVsQ2FuZGlkYXRlcyhyb3dzKSB7XG4gIGNvbnN0IHBhcnNlZCA9IF9nZXRNb2RlbFByZWZzRnJvbVN0b3JhZ2UoKTtcbiAgY29uc3QgcmVjZW50cyA9IEFycmF5LmlzQXJyYXkocGFyc2VkLnJlY2VudE1vZGVscykgPyBwYXJzZWQucmVjZW50TW9kZWxzIDogW107XG4gIGNvbnN0IHJhbmtlZCA9IFtdO1xuXG4gIGZvciAoY29uc3QgcmVjZW50IG9mIHJlY2VudHMpIHtcbiAgICBjb25zdCBoaXQgPSByb3dzLmZpbmQoKHJvdykgPT4gcm93LnByb3ZpZGVyID09PSByZWNlbnQucHJvdmlkZXIgJiYgcm93Lm1vZGVsID09PSByZWNlbnQubW9kZWwpO1xuICAgIGlmIChoaXQpIHJhbmtlZC5wdXNoKGhpdCk7XG4gIH1cblxuICBjb25zdCBwb3B1bGFyID0gWy4uLnJvd3NdXG4gICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFtID0gTnVtYmVyKGEuY29waWxvdF9tdWx0aXBsaWVyID8/IDk5OSk7XG4gICAgICBjb25zdCBibSA9IE51bWJlcihiLmNvcGlsb3RfbXVsdGlwbGllciA/PyA5OTkpO1xuICAgICAgaWYgKGFtICE9PSBibSkgcmV0dXJuIGFtIC0gYm07XG4gICAgICBjb25zdCBhYyA9IE51bWJlcihhLmNvbnRleHRfd2luZG93IHx8IDApO1xuICAgICAgY29uc3QgYmMgPSBOdW1iZXIoYi5jb250ZXh0X3dpbmRvdyB8fCAwKTtcbiAgICAgIHJldHVybiBiYyAtIGFjO1xuICAgIH0pO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBwb3B1bGFyKSB7XG4gICAgaWYgKCFyYW5rZWQuc29tZSgocikgPT4gci5wcm92aWRlciA9PT0gaXRlbS5wcm92aWRlciAmJiByLm1vZGVsID09PSBpdGVtLm1vZGVsKSkge1xuICAgICAgcmFua2VkLnB1c2goaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJhbmtlZC5zbGljZSgwLCA4KTtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclF1aWNrTW9kZWxMaXN0KHJvd3MpIHtcbiAgY29uc3QgcXVpY2tFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1xdWljay1saXN0Jyk7XG4gIGlmICghcXVpY2tFbCkgcmV0dXJuO1xuICBxdWlja0VsLmlubmVySFRNTCA9ICcnO1xuXG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBfZ2V0UXVpY2tNb2RlbENhbmRpZGF0ZXMocm93cyB8fCBbXSk7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgY29uc3QgaXNBY3RpdmUgPSBpdGVtLnByb3ZpZGVyID09PSBfbW9kZWxEYXRhPy5wcm92aWRlciAmJiBpdGVtLm1vZGVsID09PSBfbW9kZWxEYXRhPy5tb2RlbDtcbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICBidXR0b24uY2xhc3NOYW1lID0gJ2hlYWRlci1waWxsLWJ0bic7XG4gICAgYnV0dG9uLnN0eWxlLnBhZGRpbmcgPSAnNXB4IDEwcHgnO1xuICAgIGJ1dHRvbi5zdHlsZS5mb250U2l6ZSA9ICcwLjgyZW0nO1xuICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kID0gaXNBY3RpdmUgPyAnI2RiZWFmZScgOiAnI2Y4ZmFmYyc7XG4gICAgYnV0dG9uLnN0eWxlLmNvbG9yID0gaXNBY3RpdmUgPyAnIzFlM2E4YScgOiAnIzMzNDE1NSc7XG4gICAgYnV0dG9uLnN0eWxlLmJvcmRlckNvbG9yID0gaXNBY3RpdmUgPyAnIzkzYzVmZCcgOiAnI2NiZDVlMSc7XG4gICAgYnV0dG9uLnRpdGxlID0gYCR7aXRlbS5wcm92aWRlcn0gXHUwMEI3ICR7aXRlbS5tb2RlbH1gO1xuICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9IGAke2l0ZW0ucHJvdmlkZXJ9IFx1MDBCNyAke2l0ZW0ubW9kZWx9YDtcbiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBzZXRNb2RlbChpdGVtLm1vZGVsLCBpdGVtLnByb3ZpZGVyKTtcbiAgICB9KTtcbiAgICBxdWlja0VsLmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3N5bmNDYXRhbG9nVmlzaWJpbGl0eSgpIHtcbiAgY29uc3Qgd3JhcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1mdWxsLXRhYmxlLXdyYXAnKTtcbiAgY29uc3Qgc2VhcmNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWdsb2JhbC1zZWFyY2gnKTtcbiAgY29uc3QgdG9nZ2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXNob3ctYWxsLWJ0bicpO1xuICBpZiAod3JhcCkgd3JhcC5zdHlsZS5kaXNwbGF5ID0gX3Nob3dGdWxsTW9kZWxDYXRhbG9nID8gJycgOiAnbm9uZSc7XG4gIGlmIChzZWFyY2gpIHNlYXJjaC5zdHlsZS5kaXNwbGF5ID0gX3Nob3dGdWxsTW9kZWxDYXRhbG9nID8gJycgOiAnbm9uZSc7XG4gIGlmICh0b2dnbGUpIHRvZ2dsZS50ZXh0Q29udGVudCA9IF9zaG93RnVsbE1vZGVsQ2F0YWxvZyA/ICdIaWRlIEZ1bGwgQ2F0YWxvZycgOiAnU2hvdyBGdWxsIENhdGFsb2cnO1xufVxuXG5mdW5jdGlvbiB0b2dnbGVNb2RlbENhdGFsb2dWaXNpYmlsaXR5KCkge1xuICBfc2hvd0Z1bGxNb2RlbENhdGFsb2cgPSAhX3Nob3dGdWxsTW9kZWxDYXRhbG9nO1xuICBfc3luY0NhdGFsb2dWaXNpYmlsaXR5KCk7XG59XG5cbi8vIF9yZW5kZXJBdXRoU3RlcCBcdTIwMTQgY2FsbGVkIGJ5IF9zZXRNb2RlbFdpemFyZFN0ZXAgd2hlbiBlbnRlcmluZyBTdGVwIDIuXG4vLyBSZW5kZXJzIHByb3ZpZGVyLXNwZWNpZmljIGNvbnRlbnQgaW50byAjbW9kZWwtYXV0aC1zdGVwLWNvbnRlbnQgYW5kIHNob3dzXG4vLyB0aGUgYXBwcm9wcmlhdGUgc3ViLXBhbmVsIChrZXkgaW5wdXQsIGRldmljZS1mbG93LCBDTEkgbm90aWNlLCBvciBub25lKS5cbmFzeW5jIGZ1bmN0aW9uIF9yZW5kZXJBdXRoU3RlcChwcm92aWRlcikge1xuICBjb25zdCBjb250ZW50ICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWF1dGgtc3RlcC1jb250ZW50Jyk7XG4gIGNvbnN0IGtleVBhbmVsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtYXV0aC1rZXktcGFuZWwnKTtcbiAgY29uc3QgZGV2UGFuZWwgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1hdXRoLWRldmljZS1wYW5lbCcpO1xuICBjb25zdCBrZXlJbnB1dCAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWF1dGgta2V5LWlucHV0Jyk7XG4gIGNvbnN0IGtleVN0YXR1cyAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtYXV0aC1rZXktc3RhdHVzJyk7XG5cbiAgaWYgKCFjb250ZW50KSByZXR1cm47XG5cbiAgLy8gUmVzZXQgc3ViLXBhbmVsc1xuICBpZiAoa2V5UGFuZWwpICBrZXlQYW5lbC5zdHlsZS5kaXNwbGF5ICA9ICdub25lJztcbiAgaWYgKGRldlBhbmVsKSAgZGV2UGFuZWwuc3R5bGUuZGlzcGxheSAgPSAnbm9uZSc7XG4gIGlmIChrZXlJbnB1dCkgIGtleUlucHV0LnZhbHVlID0gJyc7XG4gIGlmIChrZXlTdGF0dXMpIGtleVN0YXR1cy50ZXh0Q29udGVudCA9ICcnO1xuXG4gIGlmICghcHJvdmlkZXIpIHtcbiAgICBjb250ZW50LmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImNvbG9yOiM2NDc0OGI7XCI+U2VsZWN0IGEgcHJvdmlkZXIgaW4gU3RlcCAxIGZpcnN0LjwvcD4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBjcmVkRGF0YSA9IG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGZldGNoKCcvYXBpL3NldHRpbmdzL2NyZWRlbnRpYWxzL3N0YXR1cycpO1xuICAgIGlmIChyZXNwLm9rKSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcC5qc29uKCk7XG4gICAgICBjcmVkRGF0YSA9IChkYXRhLnByb3ZpZGVycyB8fCB7fSlbcHJvdmlkZXJdIHx8IG51bGw7XG4gICAgfVxuICB9IGNhdGNoIHsgLyogbm9uLWZhdGFsICovIH1cblxuICBjb25zdCBhdXRoVHlwZSAgID0gY3JlZERhdGE/LmF1dGhfdHlwZSAgfHwgJ2FwaV9rZXknO1xuICBjb25zdCBsYWJlbCAgICAgID0gY3JlZERhdGE/LmxhYmVsICAgICAgfHwgcHJvdmlkZXI7XG4gIGNvbnN0IGhlbHBUZXh0ICAgPSBjcmVkRGF0YT8uaGVscF90ZXh0ICB8fCAnJztcbiAgY29uc3QgZ2V0S2V5VXJsICA9IGNyZWREYXRhPy5nZXRfa2V5X3VybCB8fCAnJztcbiAgY29uc3QgaXNTZXQgICAgICA9IGNyZWREYXRhPy5pc19zZXQgICAgIHx8IGZhbHNlO1xuICBjb25zdCBzb3VyY2UgICAgID0gY3JlZERhdGE/LnNvdXJjZSAgICAgfHwgJ3Vuc2V0JztcbiAgY29uc3QgZW52VmFyICAgICA9IGNyZWREYXRhPy5lbnZfdmFyICAgIHx8IG51bGw7XG4gIGNvbnN0IGlzTG9ja2VkICAgPSBjcmVkRGF0YT8ubG9ja2VkICAgICB8fCBmYWxzZTtcblxuICBjb25zdCBpc1NldEJhZGdlID0gaXNTZXRcbiAgICA/ICc8c3BhbiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6I2QxZmFlNTtjb2xvcjojMDY1ZjQ2O2ZvbnQtc2l6ZTowLjhlbTtmb250LXdlaWdodDo2MDA7XCI+JiMxMDAwMzsgS2V5IHNhdmVkPC9zcGFuPidcbiAgICA6ICc8c3BhbiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6I2ZlZTJlMjtjb2xvcjojOTkxYjFiO2ZvbnQtc2l6ZTowLjhlbTtmb250LXdlaWdodDo2MDA7XCI+Tm90IGNvbmZpZ3VyZWQ8L3NwYW4+JztcblxuICAvLyBTb3VyY2UgbGFiZWwgKyBcdTI0RDggdG9vbHRpcCBcdTIwMTQgbWlycm9ycyB0aGUgc2V0dGluZ3MgZGlhbG9nIHBhdHRlcm4uXG4gIGxldCBzb3VyY2VMYWJlbCA9ICcnO1xuICBsZXQgdG9vbHRpcFRleHQgPSAnJztcbiAgaWYgKHNvdXJjZSA9PT0gJ2VudicpIHtcbiAgICBzb3VyY2VMYWJlbCA9IGBTb3VyY2U6IGVudmlyb25tZW50IHZhcmlhYmxlICgke2VudlZhciB8fCAnbG9ja2VkJ30pYDtcbiAgICB0b29sdGlwVGV4dCA9IGBDdXJyZW50bHkgbG9hZGVkIGZyb20gdGhlICR7ZW52VmFyfSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gYCArXG4gICAgICBgVG8gY2hhbmdlIGl0IHBlcm1hbmVudGx5LCB1cGRhdGUgeW91ciBzaGVsbCBjb25maWcgKGUuZy4gfi8uenNocmMpIGFuZCByZXN0YXJ0IHRoZSBzZXJ2ZXIuIGAgK1xuICAgICAgYFlvdSBjYW4gc3RpbGwgc2F2ZSBhIHZhbHVlIGJlbG93IFx1MjAxNCBpdCB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHkgYnV0IHdpbGwgYmUgb3ZlcnJpZGRlbiBieSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgb24gbmV4dCByZXN0YXJ0LmA7XG4gIH0gZWxzZSBpZiAoc291cmNlID09PSAnZG90ZW52Jykge1xuICAgIHNvdXJjZUxhYmVsID0gYFNvdXJjZTogLmVudiBmaWxlICgke2VudlZhciB8fCAnbG9ja2VkJ30pYDtcbiAgICB0b29sdGlwVGV4dCA9IGBDdXJyZW50bHkgbG9hZGVkIGZyb20gJHtlbnZWYXJ9IGluIHlvdXIgLmVudiBmaWxlLiBgICtcbiAgICAgIGBUbyBjaGFuZ2UgaXQgcGVybWFuZW50bHksIGVkaXQgdGhlIC5lbnYgZmlsZSBpbiB0aGUgcHJvamVjdCBkaXJlY3RvcnkgYW5kIHJlc3RhcnQgdGhlIHNlcnZlci4gYCArXG4gICAgICBgWW91IGNhbiBzdGlsbCBzYXZlIGEgdmFsdWUgYmVsb3cgXHUyMDE0IGl0IHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseSBidXQgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IC5lbnYgb24gbmV4dCByZXN0YXJ0LmA7XG4gIH0gZWxzZSBpZiAoc291cmNlID09PSAnY29uZmlnJykge1xuICAgIHNvdXJjZUxhYmVsID0gJ1NvdXJjZTogY29uZmlnLnlhbWwnO1xuICAgIHRvb2x0aXBUZXh0ID0gJ1N0b3JlZCBpbiBjb25maWcueWFtbC4gVXBkYXRlIGl0IHVzaW5nIHRoZSBpbnB1dCBiZWxvdy4nO1xuICB9XG5cbiAgY29uc3QgaW5mb0ljb24gPSB0b29sdGlwVGV4dFxuICAgID8gYCA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0aXRsZT1cIiR7ZXNjYXBlSHRtbCh0b29sdGlwVGV4dCl9XCIgYXJpYS1sYWJlbD1cIldoZXJlIGlzIHRoaXMga2V5IHN0b3JlZD9cIiBgICtcbiAgICAgIGBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtjdXJzb3I6aGVscDtjb2xvcjojNjQ3NDhiO2ZvbnQtc2l6ZTowLjg1ZW07cGFkZGluZzowIDJweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MTtcIj5cdTI0RDg8L2J1dHRvbj5gXG4gICAgOiAnJztcblxuICBjb25zdCBzb3VyY2VMYWJlbEh0bWwgPSBzb3VyY2VMYWJlbFxuICAgID8gYDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6MTBweDtmb250LXNpemU6MC44ZW07Y29sb3I6JHtpc0xvY2tlZCA/ICcjYjQ1MzA5JyA6ICcjNjQ3NDhiJ307XCI+JHtlc2NhcGVIdG1sKHNvdXJjZUxhYmVsKX0ke2luZm9JY29ufTwvc3Bhbj5gXG4gICAgOiAnJztcblxuICAvLyBBbWJlciB3YXJuaW5nIHdoZW4gYSBsb2NrZWQgc291cmNlIGV4aXN0cyBcdTIwMTQgaW5wdXQgcmVtYWlucyBlbmFibGVkIHNvIHRoZVxuICAvLyB1c2VyIGNhbiBzYXZlIGEgc2Vzc2lvbi9jb25maWcgb3ZlcnJpZGUsIGJ1dCB0aGUgcHJlY2VkZW5jZSBydWxlIGlzIGNsZWFyLlxuICBjb25zdCBzb3VyY2VEZXNjID0gc291cmNlID09PSAnZW52JyA/ICdlbnZpcm9ubWVudCB2YXJpYWJsZScgOiAnLmVudiBmaWxlJztcbiAgY29uc3Qgc291cmNlUmVmICA9IGVudlZhclxuICAgID8gYCR7c291cmNlRGVzY30gPGNvZGU+JHtlc2NhcGVIdG1sKGVudlZhcil9PC9jb2RlPmBcbiAgICA6IHNvdXJjZURlc2M7XG4gIGNvbnN0IGxvY2tlZFdhcm5IdG1sID0gaXNMb2NrZWRcbiAgICA/IGA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmVmM2M3O2JvcmRlcjoxcHggc29saWQgI2Y1OWUwYjtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjhweCAxMnB4O21hcmdpbjo4cHggMDtmb250LXNpemU6MC44NWVtO2NvbG9yOiM5MjQwMGU7XCI+YCArXG4gICAgICBgXHUyNkEwIFRoaXMga2V5IGlzIGxvYWRlZCBmcm9tIHRoZSA8c3Ryb25nPiR7c291cmNlUmVmfTwvc3Ryb25nPi4gYCArXG4gICAgICBgQW55IHZhbHVlIHNhdmVkIGJlbG93IHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseSBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvbiwgYnV0IHdpbGwgYmUgYCArXG4gICAgICBgPHN0cm9uZz5vdmVycmlkZGVuIGJ5IHRoZSAke3NvdXJjZURlc2N9IHdoZW4gdGhlIHNlcnZlciByZXN0YXJ0cyBvciByZWxvYWRzPC9zdHJvbmc+LjwvZGl2PmBcbiAgICA6ICcnO1xuXG4gIGNvbnN0IGdldEtleUxpbmsgPSBnZXRLZXlVcmxcbiAgICA/IGA8YSBocmVmPVwiJHtlc2NhcGVIdG1sKGdldEtleVVybCl9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIHN0eWxlPVwiY29sb3I6IzI1NjNlYjtcIj5HZXQgeW91ciBrZXkgJiM4NTk5OzwvYT5gXG4gICAgOiAnJztcblxuICBjb250ZW50LmlubmVySFRNTCA9XG4gICAgYDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjEwcHg7XCI+YCArXG4gICAgYCAgPHN0cm9uZz4ke2VzY2FwZUh0bWwobGFiZWwpfTwvc3Ryb25nPiAke2lzU2V0QmFkZ2V9JHtzb3VyY2VMYWJlbEh0bWx9YCArXG4gICAgKGdldEtleUxpbmsgPyBgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjEwcHg7XCI+JHtnZXRLZXlMaW5rfTwvc3Bhbj5gIDogJycpICtcbiAgICBgPC9kaXY+YCArXG4gICAgKGhlbHBUZXh0ID8gYDxwIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtjb2xvcjojNDc1NTY5O21hcmdpbjowIDAgMTJweDtcIj4ke2VzY2FwZUh0bWwoaGVscFRleHQpfTwvcD5gIDogJycpICtcbiAgICBsb2NrZWRXYXJuSHRtbDtcblxuICBpZiAoYXV0aFR5cGUgPT09ICdhcGlfa2V5Jykge1xuICAgIGlmIChrZXlQYW5lbCkge1xuICAgICAga2V5UGFuZWwuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgaWYgKGtleUlucHV0KSB7XG4gICAgICAgIC8vIEFsd2F5cyBlbmFibGUgaW5wdXQgXHUyMDE0IHVzZXIgY2FuIHNhdmUgYSBuZXcgdmFsdWUgZXZlbiB3aGVuIGVudi9kb3RlbnYgaXMgdGhlIGN1cnJlbnRcbiAgICAgICAgLy8gc291cmNlLiBUaGUgd2FybmluZyBiYW5uZXIgYWJvdmUgY29tbXVuaWNhdGVzIHRoZSByZXN0YXJ0LXByZWNlZGVuY2UgYmVoYXZpb3VyLlxuICAgICAgICBrZXlJbnB1dC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBrZXlJbnB1dC5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgICAgIGtleUlucHV0LnBsYWNlaG9sZGVyID0gaXNTZXQgPyAnRW50ZXIgbmV3IGtleSB0byByZXBsYWNlIHRoZSBzYXZlZCBvbmUnIDogJ1Bhc3RlIHlvdXIgQVBJIGtleSBoZXJlJztcbiAgICAgICAga2V5SW5wdXQuZGF0YXNldC5wcm92aWRlciA9IHByb3ZpZGVyO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChhdXRoVHlwZSA9PT0gJ2RldmljZV9mbG93Jykge1xuICAgIGlmIChkZXZQYW5lbCkge1xuICAgICAgZGV2UGFuZWwuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgYXdhaXQgX3JlZnJlc2hDb3BpbG90QXV0aFN0YXR1cygpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhdXRoVHlwZSA9PT0gJ2NsaScpIHtcbiAgICBjb250ZW50LmlubmVySFRNTCArPVxuICAgICAgYDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmMGZkZjQ7Ym9yZGVyOjFweCBzb2xpZCAjYmJmN2QwO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZTowLjg4ZW07XCI+YCArXG4gICAgICBgPHAgc3R5bGU9XCJtYXJnaW46MCAwIDZweDtcIj5SdW4gdGhpcyBjb21tYW5kIGluIGEgdGVybWluYWwsIHRoZW4gcmV0dXJuIGhlcmUgYW5kIGNsaWNrIDxzdHJvbmc+TmV4dDwvc3Ryb25nPjo8L3A+YCArXG4gICAgICBgPGNvZGUgc3R5bGU9XCJmb250LXNpemU6MWVtO1wiPmdoIGF1dGggbG9naW48L2NvZGU+PC9kaXY+YDtcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50LmlubmVySFRNTCArPVxuICAgICAgYDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmOGZhZmM7Ym9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZTowLjg4ZW07Y29sb3I6IzQ3NTU2OTtcIj5gICtcbiAgICAgIGBObyBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCBmb3IgdGhpcyBwcm92aWRlci48L2Rpdj5gO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9yZWZyZXNoQ29waWxvdEF1dGhTdGF0dXMoKSB7XG4gIGNvbnN0IHN0YXR1c0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWF1dGgtc3RhdHVzJyk7XG4gIGNvbnN0IHN0YXJ0QnRuICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1hdXRoLXN0YXJ0LWJ0bicpO1xuICBjb25zdCBsb2dvdXRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtYXV0aC1sb2dvdXQtYnRuJyk7XG4gIGNvbnN0IGNvZGVFbCAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1hdXRoLWNvZGUnKTtcbiAgY29uc3QgbGlua0VsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWF1dGgtbGluaycpO1xuICBpZiAoIXN0YXR1c0VsKSByZXR1cm47XG5cbiAgaWYgKGNvZGVFbCkgIGNvZGVFbC50ZXh0Q29udGVudCA9ICcnO1xuICBpZiAobGlua0VsKSAgbGlua0VsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzdCA9IGF3YWl0IGZldGNoKCcvYXBpL2NvcGlsb3QtYXV0aC9zdGF0dXMnKS50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpO1xuICAgIGlmIChzdC5hdXRoZW50aWNhdGVkKSB7XG4gICAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdBdXRoZW50aWNhdGVkIHdpdGggR2l0SHViIENvcGlsb3QuJztcbiAgICAgIGlmIChzdGFydEJ0bikgc3RhcnRCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIGlmIChsb2dvdXRCdG4pIGxvZ291dEJ0bi5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICBfdXBkYXRlTGxtU3RhdHVzUGlsbCgnYXV0aGVudGljYXRlZCcsICdDb3BpbG90IHJlYWR5Jyk7XG4gICAgfSBlbHNlIGlmIChzdC5wb2xsaW5nKSB7XG4gICAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdXYWl0aW5nIGZvciBkZXZpY2UgYXBwcm92YWxcdTIwMjYnO1xuICAgICAgaWYgKHN0YXJ0QnRuKSBzdGFydEJ0bi5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICBpZiAobG9nb3V0QnRuKSBsb2dvdXRCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIF91cGRhdGVMbG1TdGF0dXNQaWxsKCdwb2xsaW5nJywgJ0NvcGlsb3QgYXV0aCBwZW5kaW5nJywgJ1x1MjlENycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdOb3QgYXV0aGVudGljYXRlZC4gU3RhcnQgc2lnbi1pbiB0byBlbmFibGUgQ29waWxvdCBPQXV0aC4nO1xuICAgICAgaWYgKHN0YXJ0QnRuKSBzdGFydEJ0bi5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICBpZiAobG9nb3V0QnRuKSBsb2dvdXRCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIF91cGRhdGVMbG1TdGF0dXNQaWxsKCd1bmF1dGhlbnRpY2F0ZWQnLCAnQ29waWxvdCBub3QgYXV0aGVudGljYXRlZCcpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnVW5hYmxlIHRvIGxvYWQgYXV0aCBzdGF0dXMuJztcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlUHJvdmlkZXJBcGlLZXkoKSB7XG4gIGNvbnN0IGtleUlucHV0ICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1hdXRoLWtleS1pbnB1dCcpO1xuICBjb25zdCBrZXlTdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtYXV0aC1rZXktc3RhdHVzJyk7XG4gIGNvbnN0IHByb3ZpZGVyICA9IGtleUlucHV0Py5kYXRhc2V0Py5wcm92aWRlciB8fCBfbW9kZWxXaXphcmRTZWxlY3RlZFByb3ZpZGVyO1xuICBjb25zdCB2YWx1ZSAgICAgPSAoa2V5SW5wdXQ/LnZhbHVlIHx8ICcnKS50cmltKCk7XG5cbiAgaWYgKCF2YWx1ZSkge1xuICAgIGlmIChrZXlTdGF0dXMpIHsga2V5U3RhdHVzLnRleHRDb250ZW50ID0gJ1BsZWFzZSBlbnRlciBhIGtleSB2YWx1ZS4nOyBrZXlTdGF0dXMuc3R5bGUuY29sb3IgPSAnI2I5MWMxYyc7IH1cbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFwcm92aWRlcikge1xuICAgIGlmIChrZXlTdGF0dXMpIHsga2V5U3RhdHVzLnRleHRDb250ZW50ID0gJ05vIHByb3ZpZGVyIHNlbGVjdGVkLic7IGtleVN0YXR1cy5zdHlsZS5jb2xvciA9ICcjYjkxYzFjJzsgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChrZXlTdGF0dXMpIHsga2V5U3RhdHVzLnRleHRDb250ZW50ID0gJ1NhdmluZ1x1MjAyNic7IGtleVN0YXR1cy5zdHlsZS5jb2xvciA9ICcjNDc1NTY5JzsgfVxuICB0cnkge1xuICAgIGF3YWl0IGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9zZXR0aW5ncy9jcmVkZW50aWFscycsIHsgcHJvdmlkZXIsIGtleV92YWx1ZTogdmFsdWUgfSk7XG4gICAgaWYgKGtleUlucHV0KSAga2V5SW5wdXQudmFsdWUgPSAnJztcbiAgICBpZiAoa2V5U3RhdHVzKSB7XG4gICAgICBrZXlTdGF0dXMudGV4dENvbnRlbnQgPSAnS2V5IHNhdmVkIHN1Y2Nlc3NmdWxseS4nO1xuICAgICAga2V5U3RhdHVzLnN0eWxlLmNvbG9yID0gJyMwNjVmNDYnO1xuICAgIH1cbiAgICAvLyBSZS1yZW5kZXIgYmFkZ2UgdG8gc2hvdyBrZXkgaXMgbm93IHNldFxuICAgIGF3YWl0IF9yZW5kZXJBdXRoU3RlcChwcm92aWRlcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoa2V5U3RhdHVzKSB7IGtleVN0YXR1cy50ZXh0Q29udGVudCA9IGBFcnJvcjogJHtlLm1lc3NhZ2UgfHwgZX1gOyBrZXlTdGF0dXMuc3R5bGUuY29sb3IgPSAnI2I5MWMxYyc7IH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0b2dnbGVBcGlLZXlWaXNpYmlsaXR5KCkge1xuICBjb25zdCBpbnB1dCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtYXV0aC1rZXktaW5wdXQnKTtcbiAgY29uc3QgdG9nZ2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWF1dGgta2V5LXRvZ2dsZScpO1xuICBpZiAoIWlucHV0KSByZXR1cm47XG4gIGNvbnN0IGlzSGlkZGVuID0gaW5wdXQudHlwZSA9PT0gJ3Bhc3N3b3JkJztcbiAgaW5wdXQudHlwZSA9IGlzSGlkZGVuID8gJ3RleHQnIDogJ3Bhc3N3b3JkJztcbiAgaWYgKHRvZ2dsZSkgdG9nZ2xlLnRleHRDb250ZW50ID0gaXNIaWRkZW4gPyAnXHVEODNEXHVERTQ4JyA6ICdcdUQ4M0RcdURDNDEnO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydENvcGlsb3RBdXRoRnJvbVdpemFyZCgpIHtcbiAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtYXV0aC1zdGF0dXMnKTtcbiAgY29uc3QgY29kZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWF1dGgtY29kZScpO1xuICBjb25zdCBsaW5rRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtYXV0aC1saW5rJyk7XG4gIGlmICghc3RhdHVzRWwgfHwgIWNvZGVFbCB8fCAhbGlua0VsKSByZXR1cm47XG5cbiAgX3Nob3dNb2RlbFdpemFyZEJ1c3koJ1N0YXJ0aW5nIEdpdEh1YiBkZXZpY2UgYXV0aG9yaXphdGlvbi4uLicpO1xuICB0cnkge1xuICAgIGNvbnN0IGZsb3dSZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9jb3BpbG90LWF1dGgvc3RhcnQnLCB7IG1ldGhvZDogJ1BPU1QnIH0pO1xuICAgIGlmICghZmxvd1Jlcy5vaykgdGhyb3cgbmV3IEVycm9yKGF3YWl0IGZsb3dSZXMudGV4dCgpKTtcbiAgICBjb25zdCBmbG93ID0gYXdhaXQgZmxvd1Jlcy5qc29uKCk7XG5cbiAgICBjb2RlRWwudGV4dENvbnRlbnQgPSBmbG93LnVzZXJfY29kZSB8fCAnJztcbiAgICBsaW5rRWwuaHJlZiA9IGZsb3cudmVyaWZpY2F0aW9uX3VyaSB8fCAnaHR0cHM6Ly9naXRodWIuY29tL2xvZ2luL2RldmljZSc7XG4gICAgbGlua0VsLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdPcGVuIEdpdEh1YiwgZW50ZXIgdGhlIGNvZGUsIHRoZW4gcmV0dXJuIGhlcmUuJztcbiAgICB3aW5kb3cub3BlbihsaW5rRWwuaHJlZiwgJ19ibGFuaycpO1xuXG4gICAgYXdhaXQgZmV0Y2goJy9hcGkvY29waWxvdC1hdXRoL3BvbGwnLCB7IG1ldGhvZDogJ1BPU1QnIH0pO1xuICAgIF91cGRhdGVMbG1TdGF0dXNQaWxsKCdwb2xsaW5nJywgJ0NvcGlsb3QgYXV0aCBwZW5kaW5nJywgJ1x1MjlENycpO1xuICAgIGlmIChfY29waWxvdEF1dGhQb2xsVGltZXIpIGNsZWFySW50ZXJ2YWwoX2NvcGlsb3RBdXRoUG9sbFRpbWVyKTtcbiAgICBfY29waWxvdEF1dGhQb2xsVGltZXIgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdCA9IGF3YWl0IGZldGNoKCcvYXBpL2NvcGlsb3QtYXV0aC9zdGF0dXMnKS50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpO1xuICAgICAgICBpZiAoc3QuYXV0aGVudGljYXRlZCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoX2NvcGlsb3RBdXRoUG9sbFRpbWVyKTtcbiAgICAgICAgICBfY29waWxvdEF1dGhQb2xsVGltZXIgPSBudWxsO1xuICAgICAgICAgIGF3YWl0IF9yZWZyZXNoQ29waWxvdEF1dGhTdGF0dXMoKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGtlZXAgcG9sbGluZyBzaWxlbnRseSB1bnRpbCBjbG9zZVxuICAgICAgfVxuICAgIH0sIDUwMDApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gYEF1dGggc3RhcnQgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2UgfHwgZXJyb3J9YDtcbiAgfSBmaW5hbGx5IHtcbiAgICBfaGlkZU1vZGVsV2l6YXJkQnVzeSgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvZ291dENvcGlsb3RBdXRoRnJvbVdpemFyZCgpIHtcbiAgYXdhaXQgZmV0Y2goJy9hcGkvY29waWxvdC1hdXRoL2xvZ291dCcsIHsgbWV0aG9kOiAnUE9TVCcgfSk7XG4gIGF3YWl0IF9yZWZyZXNoQ29waWxvdEF1dGhTdGF0dXMoKTtcbn1cblxuZnVuY3Rpb24gX3dpcmVHbG9iYWxNb2RlbFNlYXJjaCgpIHtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtZ2xvYmFsLXNlYXJjaCcpO1xuICBpZiAoIWlucHV0KSByZXR1cm47XG4gIGlucHV0Lm9uaW5wdXQgPSAoKSA9PiB7XG4gICAgaWYgKF9tb2RlbERhdGFUYWJsZSAmJiB0eXBlb2YgX21vZGVsRGF0YVRhYmxlLnNlYXJjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgX21vZGVsRGF0YVRhYmxlLnNlYXJjaChpbnB1dC52YWx1ZSB8fCAnJykuZHJhdygpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclByb3ZpZGVyU2VsZWN0b3IoKSB7XG4gIGNvbnN0IGxpc3RFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1wcm92aWRlci1saXN0Jyk7XG4gIGlmICghbGlzdEVsIHx8ICFfbW9kZWxEYXRhKSByZXR1cm47XG5cbiAgY29uc3QgcHJvdmlkZXJzID0gQXJyYXkuaXNBcnJheShfbW9kZWxEYXRhLnByb3ZpZGVycylcbiAgICA/IF9tb2RlbERhdGEucHJvdmlkZXJzXG4gICAgOiBBcnJheS5mcm9tKG5ldyBTZXQoKF9tb2RlbERhdGEuYWxsX21vZGVscyB8fCBbXSkubWFwKHIgPT4gci5wcm92aWRlcikuZmlsdGVyKEJvb2xlYW4pKSkuc29ydCgpO1xuICBjb25zdCBjYXBhYmxlU2V0ID0gbmV3IFNldChfbW9kZWxEYXRhLmxpc3RfbW9kZWxzX2NhcGFibGUgfHwgW10pO1xuXG4gIGlmICghX21vZGVsV2l6YXJkU2VsZWN0ZWRQcm92aWRlcikge1xuICAgIF9tb2RlbFdpemFyZFNlbGVjdGVkUHJvdmlkZXIgPSBfbW9kZWxEYXRhLnByb3ZpZGVyIHx8IHByb3ZpZGVyc1swXSB8fCBudWxsO1xuICB9XG4gIGlmIChfbW9kZWxXaXphcmRTZWxlY3RlZFByb3ZpZGVyKSB7XG4gICAgX3NlbGVjdGVkTW9kZWxQcm92aWRlcnMgPSBuZXcgU2V0KFtfbW9kZWxXaXphcmRTZWxlY3RlZFByb3ZpZGVyXSk7XG4gIH1cblxuICAvLyBEaXNwb3NlIGFueSBleGlzdGluZyBCUzUgcG9wb3ZlcnMgYmVmb3JlIGNsZWFyaW5nIHRoZSBsaXN0LlxuICBsaXN0RWwucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtYnMtdG9nZ2xlPVwicG9wb3ZlclwiXScpLmZvckVhY2goZWwgPT4ge1xuICAgIHdpbmRvdy5ib290c3RyYXA/LlBvcG92ZXI/LmdldEluc3RhbmNlKGVsKT8uZGlzcG9zZSgpO1xuICB9KTtcblxuICBsaXN0RWwuaW5uZXJIVE1MID0gJyc7XG4gIHByb3ZpZGVycy5mb3JFYWNoKHByb3ZpZGVyID0+IHtcbiAgICBjb25zdCBjaGVja2VkID0gcHJvdmlkZXIgPT09IF9tb2RlbFdpemFyZFNlbGVjdGVkUHJvdmlkZXI7XG4gICAgY29uc3Qgc291cmNlTGFiZWwgPSBfcHJvdmlkZXJTdGFnZUxhYmVsKHByb3ZpZGVyLCBjYXBhYmxlU2V0KTtcbiAgICBjb25zdCBpbmZvID0gZ2V0UHJvdmlkZXJJbmZvKHByb3ZpZGVyKTtcblxuICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgICBsYWJlbC5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6NnB4OyBwYWRkaW5nOjRweCA4cHg7IGJvcmRlcjoxcHggc29saWQgI2NiZDVlMTsgYm9yZGVyLXJhZGl1czo5OTlweDsgZm9udC1zaXplOjAuODJlbTsgYmFja2dyb3VuZDojZmZmOyBjdXJzb3I6cG9pbnRlcjsnO1xuICAgIGxhYmVsLmlubmVySFRNTCA9XG4gICAgICBgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJtb2RlbC1wcm92aWRlci1jaG9pY2VcIiB2YWx1ZT1cIiR7ZXNjYXBlSHRtbChwcm92aWRlcil9XCIgJHtjaGVja2VkID8gJ2NoZWNrZWQnIDogJyd9IHN0eWxlPVwibWFyZ2luOjA7XCIgLz5gICtcbiAgICAgIGA8c3Bhbj4ke2VzY2FwZUh0bWwoX3Byb3ZpZGVyRGlzcGxheUxhYmVsKHByb3ZpZGVyKSl9PC9zcGFuPmAgK1xuICAgICAgYDxzcGFuIHN0eWxlPVwiY29sb3I6IzY0NzQ4YjsgZm9udC1zaXplOjAuOGVtO1wiPigke2VzY2FwZUh0bWwoc291cmNlTGFiZWwpfSk8L3NwYW4+YDtcblxuICAgIC8vIEFwcGVuZCBhIFx1MjREOCBidXR0b24gd2lyZWQgdG8gYSBCUzUgSFRNTCBwb3BvdmVyIHNvIGxpbmtzIGluc2lkZSBhcmUgY2xpY2thYmxlLlxuICAgIGlmIChpbmZvKSB7XG4gICAgICBjb25zdCBidG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgIGJ0bi50eXBlID0gJ2J1dHRvbic7XG4gICAgICBidG4uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ1Byb3ZpZGVyIGluZm8nKTtcbiAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdG9nZ2xlJywgJ3BvcG92ZXInKTtcbiAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdHJpZ2dlcicsICdjbGljaycpO1xuICAgICAgYnRuLnNldEF0dHJpYnV0ZSgnZGF0YS1icy1wbGFjZW1lbnQnLCAncmlnaHQnKTtcbiAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtaHRtbCcsICd0cnVlJyk7XG4gICAgICBidG4uc2V0QXR0cmlidXRlKCdkYXRhLWJzLWNvbnRhaW5lcicsICdib2R5Jyk7XG4gICAgICBidG4uc2V0QXR0cmlidXRlKCdkYXRhLWJzLWNvbnRlbnQnLCBwcm92aWRlckluZm9Qb3BvdmVyQ29udGVudChpbmZvKSk7XG4gICAgICBidG4uc3R5bGUuY3NzVGV4dCA9ICdiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY0NzQ4Yjtmb250LXNpemU6MC45ZW07cGFkZGluZzowIDFweDtsaW5lLWhlaWdodDoxO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsnO1xuICAgICAgYnRuLnRleHRDb250ZW50ID0gJ1x1MjREOCc7XG4gICAgICAvLyBQcmV2ZW50IHRoZSByYWRpby1sYWJlbCBjbGljayBmcm9tIHByb3BhZ2F0aW5nIHRvIHRoZSByYWRpbyBidXR0b24uXG4gICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCkpO1xuICAgICAgbGFiZWwuYXBwZW5kQ2hpbGQoYnRuKTtcblxuICAgICAgLy8gSW5pdGlhbGlzZSBhZnRlciBhcHBlbmQgXHUyMDE0IEJTNSBtdXN0IGZpbmQgdGhlIGVsZW1lbnQgaW4gdGhlIERPTS5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGlmICh3aW5kb3cuYm9vdHN0cmFwPy5Qb3BvdmVyKSB7XG4gICAgICAgICAgbmV3IHdpbmRvdy5ib290c3RyYXAuUG9wb3ZlcihidG4sIHsgc2FuaXRpemU6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGVja2JveCA9IGxhYmVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgaWYgKCFjaGVja2JveC5jaGVja2VkKSByZXR1cm47XG4gICAgICBfbW9kZWxXaXphcmRTZWxlY3RlZFByb3ZpZGVyID0gcHJvdmlkZXI7XG4gICAgICBfc2VsZWN0ZWRNb2RlbFByb3ZpZGVycyA9IG5ldyBTZXQoW3Byb3ZpZGVyXSk7XG4gICAgICBfdXBkYXRlTW9kZWxXaXphcmROYXYoKTtcbiAgICB9KTtcblxuICAgIGxpc3RFbC5hcHBlbmRDaGlsZChsYWJlbCk7XG4gIH0pO1xuXG4gIF91cGRhdGVNb2RlbFdpemFyZE5hdigpO1xufVxuXG5mdW5jdGlvbiBfc2hvd01vZGVsV2l6YXJkQnVzeShtZXNzYWdlKSB7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtd2l6YXJkLWJ1c3ktb3ZlcmxheScpO1xuICBjb25zdCBtZXNzYWdlRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtd2l6YXJkLWJ1c3ktbWVzc2FnZScpO1xuICBpZiAobWVzc2FnZUVsKSBtZXNzYWdlRWwudGV4dENvbnRlbnQgPSBtZXNzYWdlIHx8ICdXb3JraW5nLi4uJztcbiAgaWYgKG92ZXJsYXkpIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdmbGV4Jztcbn1cblxuZnVuY3Rpb24gX2hpZGVNb2RlbFdpemFyZEJ1c3koKSB7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtd2l6YXJkLWJ1c3ktb3ZlcmxheScpO1xuICBpZiAob3ZlcmxheSkgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xufVxuXG5mdW5jdGlvbiBfc2V0TW9kZWxXaXphcmRTdGVwKHN0ZXApIHtcbiAgX21vZGVsV2l6YXJkU3RlcCA9IFsxLCAyLCAzLCA0XS5pbmNsdWRlcyhzdGVwKSA/IHN0ZXAgOiAxO1xuICBjb25zdCBwYW5lcyA9IHtcbiAgICAxOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtc3RlcC1wcm92aWRlcicpLFxuICAgIDI6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1zdGVwLWF1dGgnKSxcbiAgICAzOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtc3RlcC1tb2RlbHMnKSxcbiAgICA0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtc3RlcC1zdWNjZXNzJyksXG4gIH07XG4gIE9iamVjdC5lbnRyaWVzKHBhbmVzKS5mb3JFYWNoKChbbnVtLCBlbF0pID0+IHtcbiAgICBpZiAoZWwpIGVsLnN0eWxlLmRpc3BsYXkgPSBOdW1iZXIobnVtKSA9PT0gX21vZGVsV2l6YXJkU3RlcCA/ICcnIDogJ25vbmUnO1xuICB9KTtcbiAgaWYgKF9tb2RlbFdpemFyZFN0ZXAgPT09IDIpIHtcbiAgICBfcmVuZGVyQXV0aFN0ZXAoX21vZGVsV2l6YXJkU2VsZWN0ZWRQcm92aWRlcik7XG4gIH1cbiAgX3VwZGF0ZU1vZGVsV2l6YXJkTmF2KCk7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVNb2RlbFdpemFyZFByb2dyZXNzQmFyKCkge1xuICBbMSwgMiwgMywgNF0uZm9yRWFjaCgoc3RlcE51bSkgPT4ge1xuICAgIGNvbnN0IHN0ZXBFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBtb2RlbC1wcm9ncmVzcy1zdGVwLSR7c3RlcE51bX1gKTtcbiAgICBpZiAoIXN0ZXBFbCkgcmV0dXJuO1xuICAgIGNvbnN0IGJhZGdlRWwgPSBzdGVwRWwucXVlcnlTZWxlY3RvcignLm1vZGVsLXByb2dyZXNzLWJhZGdlJyk7XG4gICAgc3RlcEVsLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScsICdpcy1jb21wbGV0ZScsICdpcy11cGNvbWluZycpO1xuICAgIGlmIChzdGVwTnVtIDwgX21vZGVsV2l6YXJkU3RlcCkge1xuICAgICAgc3RlcEVsLmNsYXNzTGlzdC5hZGQoJ2lzLWNvbXBsZXRlJyk7XG4gICAgICBzdGVwRWwuc2V0QXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnLCAnZmFsc2UnKTtcbiAgICAgIGlmIChiYWRnZUVsKSBiYWRnZUVsLnRleHRDb250ZW50ID0gJ1x1MjcxMyc7XG4gICAgfSBlbHNlIGlmIChzdGVwTnVtID09PSBfbW9kZWxXaXphcmRTdGVwKSB7XG4gICAgICBzdGVwRWwuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyk7XG4gICAgICBzdGVwRWwuc2V0QXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnLCAnc3RlcCcpO1xuICAgICAgaWYgKGJhZGdlRWwpIGJhZGdlRWwudGV4dENvbnRlbnQgPSBTdHJpbmcoc3RlcE51bSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ZXBFbC5jbGFzc0xpc3QuYWRkKCdpcy11cGNvbWluZycpO1xuICAgICAgc3RlcEVsLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ2ZhbHNlJyk7XG4gICAgICBpZiAoYmFkZ2VFbCkgYmFkZ2VFbC50ZXh0Q29udGVudCA9IFN0cmluZyhzdGVwTnVtKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlTW9kZWxXaXphcmROYXYoKSB7XG4gIGNvbnN0IHN0ZXBMYWJlbCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtd2l6YXJkLXN0ZXAtbGFiZWwnKTtcbiAgY29uc3QgYmFja0J0biAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC13aXphcmQtYmFjay1idG4nKTtcbiAgY29uc3QgbmV4dEJ0biAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC13aXphcmQtbmV4dC1idG4nKTtcbiAgY29uc3QgdGVzdEJ0biAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC10ZXN0LWJ0bicpO1xuICBjb25zdCByZWZyZXNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByaWNpbmctcmVmcmVzaC1idG4nKTtcbiAgY29uc3QgZm9vdGVyICAgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tb2RlbC13aXphcmQtZm9vdGVyJyk7XG5cbiAgX3VwZGF0ZU1vZGVsV2l6YXJkUHJvZ3Jlc3NCYXIoKTtcblxuICBpZiAoc3RlcExhYmVsKSB7XG4gICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgMTogJ1N0ZXAgMSBvZiA0OiBDaG9vc2UgcHJvdmlkZXInLFxuICAgICAgMjogJ1N0ZXAgMiBvZiA0OiBTZXQgdXAgYXV0aGVudGljYXRpb24nLFxuICAgICAgMzogJ1N0ZXAgMyBvZiA0OiBDaG9vc2UgbW9kZWwgYW5kIHRlc3QgY29ubmVjdGlvbicsXG4gICAgICA0OiAnU3RlcCA0IG9mIDQ6IENvbXBsZXRlJyxcbiAgICB9O1xuICAgIHN0ZXBMYWJlbC50ZXh0Q29udGVudCA9IGxhYmVsc1tfbW9kZWxXaXphcmRTdGVwXSB8fCAnJztcbiAgfVxuXG4gIGlmIChiYWNrQnRuKSB7XG4gICAgYmFja0J0bi5kaXNhYmxlZCA9IF9tb2RlbFdpemFyZFN0ZXAgPT09IDE7XG4gICAgYmFja0J0bi5zdHlsZS5kaXNwbGF5ID0gX21vZGVsV2l6YXJkU3RlcCA9PT0gNCA/ICdub25lJyA6ICcnO1xuICB9XG4gIC8vIE5leHQgYnV0dG9uOiB2aXNpYmxlIG9uIHN0ZXBzIDEgYW5kIDJcbiAgaWYgKG5leHRCdG4pIHtcbiAgICBuZXh0QnRuLnN0eWxlLmRpc3BsYXkgPSAoX21vZGVsV2l6YXJkU3RlcCA9PT0gMSB8fCBfbW9kZWxXaXphcmRTdGVwID09PSAyKSA/ICcnIDogJ25vbmUnO1xuICAgIG5leHRCdG4uZGlzYWJsZWQgPSBfbW9kZWxXaXphcmRTdGVwID09PSAxICYmICFfbW9kZWxXaXphcmRTZWxlY3RlZFByb3ZpZGVyO1xuICAgIG5leHRCdG4udGV4dENvbnRlbnQgPSBfbW9kZWxXaXphcmRTdGVwID09PSAyID8gJ05leHQnIDogJ05leHQnO1xuICB9XG4gIGlmICh0ZXN0QnRuKSAgICB0ZXN0QnRuLnN0eWxlLmRpc3BsYXkgICAgPSBfbW9kZWxXaXphcmRTdGVwID09PSAzID8gJycgOiAnbm9uZSc7XG4gIGlmIChyZWZyZXNoQnRuKSByZWZyZXNoQnRuLnN0eWxlLmRpc3BsYXkgPSBfbW9kZWxXaXphcmRTdGVwID09PSAzID8gJycgOiAnbm9uZSc7XG4gIGlmIChmb290ZXIpIGZvb3Rlci5zdHlsZS5qdXN0aWZ5Q29udGVudCAgPSBfbW9kZWxXaXphcmRTdGVwID09PSA0ID8gJ2NlbnRlcicgOiAnc3BhY2UtYmV0d2Vlbic7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9sb2FkTW9kZWxzRm9yU2VsZWN0ZWRQcm92aWRlcigpIHtcbiAgaWYgKCFfbW9kZWxXaXphcmRTZWxlY3RlZFByb3ZpZGVyKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgbG9hZGluZ0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLW1vZGVscy1sb2FkaW5nJyk7XG4gIGlmIChsb2FkaW5nRWwpIHtcbiAgICBsb2FkaW5nRWwuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIGxvYWRpbmdFbC5zdHlsZS5jb2xvciA9ICcjNDc1NTY5JztcbiAgICBsb2FkaW5nRWwuaW5uZXJIVE1MID0gJzxzcGFuIGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCIgc3R5bGU9XCJ3aWR0aDoxNHB4O2hlaWdodDoxNHB4O2JvcmRlci13aWR0aDoycHg7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDo2cHg7XCI+PC9zcGFuPkxvYWRpbmcgbW9kZWxzIGZvciBzZWxlY3RlZCBwcm92aWRlci4uLic7XG4gIH1cblxuICBfc2hvd01vZGVsV2l6YXJkQnVzeSgnUXVlcnlpbmcgYXZhaWxhYmxlIG1vZGVscy4uLicpO1xuICB0cnkge1xuICAgIF9zZWxlY3RlZE1vZGVsUHJvdmlkZXJzID0gbmV3IFNldChbX21vZGVsV2l6YXJkU2VsZWN0ZWRQcm92aWRlcl0pO1xuICAgIF9tb2RlbERhdGEucHJvdmlkZXIgPSBfbW9kZWxXaXphcmRTZWxlY3RlZFByb3ZpZGVyO1xuICAgIGF3YWl0IF9yZWZyZXNoTW9kZWxDYXRhbG9nRm9yU2VsZWN0aW9uKCk7XG4gICAgaWYgKGxvYWRpbmdFbCkge1xuICAgICAgbG9hZGluZ0VsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBsb2FkaW5nRWwudGV4dENvbnRlbnQgPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLndhcm4oJ0NvdWxkIG5vdCBsb2FkIG1vZGVscyBmb3Igc2VsZWN0ZWQgcHJvdmlkZXI6JywgZXJyb3IpO1xuICAgIGlmIChsb2FkaW5nRWwpIHtcbiAgICAgIGxvYWRpbmdFbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICBsb2FkaW5nRWwudGV4dENvbnRlbnQgPSAnRmFpbGVkIHRvIGxvYWQgbW9kZWxzIGZvciBzZWxlY3RlZCBwcm92aWRlci4nO1xuICAgICAgbG9hZGluZ0VsLnN0eWxlLmNvbG9yID0gJyNiOTFjMWMnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZmluYWxseSB7XG4gICAgX2hpZGVNb2RlbFdpemFyZEJ1c3koKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBuZXh0V2l6YXJkU3RlcCgpIHtcbiAgaWYgKF9tb2RlbFdpemFyZFN0ZXAgPT09IDEpIHtcbiAgICBpZiAoIV9tb2RlbFdpemFyZFNlbGVjdGVkUHJvdmlkZXIpIHJldHVybjtcbiAgICBfc2V0TW9kZWxXaXphcmRTdGVwKDIpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoX21vZGVsV2l6YXJkU3RlcCA9PT0gMikge1xuICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IF9sb2FkTW9kZWxzRm9yU2VsZWN0ZWRQcm92aWRlcigpO1xuICAgIGlmICghbG9hZGVkKSByZXR1cm47XG4gICAgX3NldE1vZGVsV2l6YXJkU3RlcCgzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmV2aW91c1dpemFyZFN0ZXAoKSB7XG4gIGlmIChfbW9kZWxXaXphcmRTdGVwID09PSAyKSB7IF9zZXRNb2RlbFdpemFyZFN0ZXAoMSk7IHJldHVybjsgfVxuICBpZiAoX21vZGVsV2l6YXJkU3RlcCA9PT0gMykgeyBfc2V0TW9kZWxXaXphcmRTdGVwKDIpOyByZXR1cm47IH1cbiAgaWYgKF9tb2RlbFdpemFyZFN0ZXAgPT09IDQpIHsgX3NldE1vZGVsV2l6YXJkU3RlcCgzKTsgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVmcmVzaE1vZGVsQ2F0YWxvZ0ZvclNlbGVjdGlvbigpIHtcbiAgaWYgKCFfbW9kZWxEYXRhKSByZXR1cm47XG4gIGlmIChfY2F0YWxvZ1JlZnJlc2hpbmcpIHtcbiAgICBfY2F0YWxvZ1JlZnJlc2hQZW5kaW5nID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgX2NhdGFsb2dSZWZyZXNoaW5nID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gQXJyYXkuZnJvbShfc2VsZWN0ZWRNb2RlbFByb3ZpZGVycyk7XG4gICAgaWYgKCFzZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgIF9zZWxlY3RlZE1vZGVsUHJvdmlkZXJzID0gbmV3IFNldChbX21vZGVsRGF0YS5wcm92aWRlcl0pO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3ZpZGVyc1BhcmFtID0gZW5jb2RlVVJJQ29tcG9uZW50KEFycmF5LmZyb20oX3NlbGVjdGVkTW9kZWxQcm92aWRlcnMpLmpvaW4oJywnKSk7XG4gICAgY29uc3QgY2F0YWxvZyA9IGF3YWl0IGFwaUNhbGwoJ0dFVCcsIGAvYXBpL21vZGVsLWNhdGFsb2c/cHJvdmlkZXJzPSR7cHJvdmlkZXJzUGFyYW19YCk7XG4gICAgX21vZGVsRGF0YS5hbGxfbW9kZWxzID0gY2F0YWxvZy5hbGxfbW9kZWxzIHx8IFtdO1xuICAgIF9tb2RlbERhdGEucHJpY2luZ191cGRhdGVkX2F0ID0gY2F0YWxvZy5wcmljaW5nX3VwZGF0ZWRfYXQgfHwgX21vZGVsRGF0YS5wcmljaW5nX3VwZGF0ZWRfYXQ7XG4gICAgX21vZGVsRGF0YS5wcmljaW5nX3NvdXJjZSA9IGNhdGFsb2cucHJpY2luZ19zb3VyY2UgfHwgX21vZGVsRGF0YS5wcmljaW5nX3NvdXJjZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjYXRhbG9nLnByb3ZpZGVycykgJiYgY2F0YWxvZy5wcm92aWRlcnMubGVuZ3RoKSB7XG4gICAgICBfbW9kZWxEYXRhLnByb3ZpZGVycyA9IGNhdGFsb2cucHJvdmlkZXJzO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjYXRhbG9nLmxpc3RfbW9kZWxzX2NhcGFibGUpKSB7XG4gICAgICBfbW9kZWxEYXRhLmxpc3RfbW9kZWxzX2NhcGFibGUgPSBjYXRhbG9nLmxpc3RfbW9kZWxzX2NhcGFibGU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy53YXJuKCdDb3VsZCBub3QgcmVmcmVzaCBtb2RlbCBjYXRhbG9nIGZvciBzZWxlY3RlZCBwcm92aWRlcnM6JywgZXJyb3IpO1xuICB9IGZpbmFsbHkge1xuICAgIF9jYXRhbG9nUmVmcmVzaGluZyA9IGZhbHNlO1xuICB9XG5cbiAgX3JlbmRlclByb3ZpZGVyU2VsZWN0b3IoKTtcbiAgX2J1aWxkTW9kZWxUYWJsZSgpO1xuXG4gIGlmIChfY2F0YWxvZ1JlZnJlc2hQZW5kaW5nKSB7XG4gICAgX2NhdGFsb2dSZWZyZXNoUGVuZGluZyA9IGZhbHNlO1xuICAgIGF3YWl0IF9yZWZyZXNoTW9kZWxDYXRhbG9nRm9yU2VsZWN0aW9uKCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gb3Blbk1vZGVsTW9kYWwoKSB7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtbW9kYWwtb3ZlcmxheScpO1xuICBpZiAoIW92ZXJsYXkpIHJldHVybjtcblxuICBpZiAoIV9tb2RlbERhdGEpIHtcbiAgICBhd2FpdCBsb2FkTW9kZWxTZWxlY3RvcigpO1xuICB9XG4gIGF3YWl0IGxvYWRQcm92aWRlckluZm8oKTtcbiAgaWYgKCFfbW9kZWxXaXphcmRTZWxlY3RlZFByb3ZpZGVyKSB7XG4gICAgX21vZGVsV2l6YXJkU2VsZWN0ZWRQcm92aWRlciA9IF9tb2RlbERhdGE/LnByb3ZpZGVyIHx8IG51bGw7XG4gIH1cbiAgY29uc3Qgc3VjY2Vzc1N1bW1hcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtc3VjY2Vzcy1zdW1tYXJ5Jyk7XG4gIGlmIChzdWNjZXNzU3VtbWFyeSkge1xuICAgIHN1Y2Nlc3NTdW1tYXJ5LnRleHRDb250ZW50ID0gJ1Byb3ZpZGVyIGFuZCBtb2RlbCBhcmUgY29uZmlndXJlZCBhbmQgdGhlIGNvbm5lY3Rpb24gY2hlY2sgc3VjY2VlZGVkLic7XG4gIH1cbiAgX3JlbmRlclByb3ZpZGVyU2VsZWN0b3IoKTtcbiAgX3N5bmNDYXRhbG9nVmlzaWJpbGl0eSgpO1xuICBfd2lyZUdsb2JhbE1vZGVsU2VhcmNoKCk7XG4gIF9zZXRNb2RlbFdpemFyZFN0ZXAoMSk7XG4gIF9oaWRlTW9kZWxXaXphcmRCdXN5KCk7XG4gIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzU3RhY2sucHVzaChkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgc2V0SW5pdGlhbEZvY3VzKCdtb2RlbC1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbW9kZWwtbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBjbG9zZU1vZGVsTW9kYWwoKSB7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtbW9kYWwtb3ZlcmxheScpO1xuICBpZiAob3ZlcmxheSkgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBfc2V0TW9kZWxXaXphcmRTdGVwKDEpO1xuICBfaGlkZU1vZGVsV2l6YXJkQnVzeSgpO1xuICBpZiAoX2NvcGlsb3RBdXRoUG9sbFRpbWVyKSB7XG4gICAgY2xlYXJJbnRlcnZhbChfY29waWxvdEF1dGhQb2xsVGltZXIpO1xuICAgIF9jb3BpbG90QXV0aFBvbGxUaW1lciA9IG51bGw7XG4gIH1cbiAgcmVzdG9yZUZvY3VzKCk7XG59XG5cbmZ1bmN0aW9uIF9hcHBseU1vZGVsUm93VmlzdWFsU3RhdGUodHIsIGlzQWN0aXZlKSB7XG4gIHRyLmNsYXNzTGlzdC50b2dnbGUoJ21vZGVsLXJvdy1hY3RpdmUnLCBpc0FjdGl2ZSk7XG4gIHRyLnN0eWxlLmNzc1RleHQgPSBpc0FjdGl2ZVxuICAgID8gJ2JhY2tncm91bmQ6I2VmZjZmZjsgZm9udC13ZWlnaHQ6NjAwOyBjdXJzb3I6cG9pbnRlcjsnXG4gICAgOiAnY3Vyc29yOnBvaW50ZXI7JztcblxuICBjb25zdCBtb2RlbCA9IHRyLmdldEF0dHJpYnV0ZSgnZGF0YS1tb2RlbCcpIHx8ICcnO1xuICBjb25zdCBtb2RlbENlbGwgPSB0ci5jZWxscyAmJiB0ci5jZWxsc1sxXTtcbiAgaWYgKG1vZGVsQ2VsbCkge1xuICAgIG1vZGVsQ2VsbC5pbm5lckhUTUwgPSBgJHtlc2NhcGVIdG1sKG1vZGVsKX1gICtcbiAgICAgIChpc0FjdGl2ZSA/ICcgPHNwYW4gc3R5bGU9XCJjb2xvcjojM2I4MmY2OyBmb250LXNpemU6MC43NWVtO1wiPiYjMTAwMDM7IGFjdGl2ZTwvc3Bhbj4nIDogJycpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9zeW5jTW9kZWxUYWJsZVNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtdGFibGUtYm9keScpO1xuICBpZiAoIXRib2R5IHx8ICFfbW9kZWxEYXRhKSByZXR1cm47XG5cbiAgY29uc3QgYWN0aXZlUHJvdmlkZXIgPSBfbW9kZWxEYXRhLnByb3ZpZGVyO1xuICBjb25zdCBhY3RpdmVNb2RlbCA9IF9tb2RlbERhdGEubW9kZWw7XG4gIHRib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJykuZm9yRWFjaCh0ciA9PiB7XG4gICAgY29uc3QgaXNBY3RpdmUgPSAoXG4gICAgICB0ci5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJvdmlkZXInKSA9PT0gYWN0aXZlUHJvdmlkZXIgJiZcbiAgICAgIHRyLmdldEF0dHJpYnV0ZSgnZGF0YS1tb2RlbCcpID09PSBhY3RpdmVNb2RlbFxuICAgICk7XG4gICAgX2FwcGx5TW9kZWxSb3dWaXN1YWxTdGF0ZSh0ciwgaXNBY3RpdmUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX2J1aWxkTW9kZWxUYWJsZSgpIHtcbiAgY29uc3QgdGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtdGFibGUtYm9keScpO1xuICBjb25zdCB0aGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC10YWJsZS1oZWFkJyk7XG4gIGlmICghdGJvZHkgfHwgIV9tb2RlbERhdGEpIHJldHVybjtcblxuICBjb25zdCBjdXJyZW50UHJvdmlkZXIgPSBfbW9kZWxEYXRhLnByb3ZpZGVyO1xuICBjb25zdCBjdXJyZW50TW9kZWwgICAgPSBfbW9kZWxEYXRhLm1vZGVsO1xuXG4gIC8vIEZpeGVkIDctY29sdW1uIGhlYWRlcnMgXHUyMDE0IG5vIGR5bmFtaWMgcmVidWlsZGluZyBuZWVkZWRcbiAgaWYgKHRoZWFkKSB7XG4gICAgY29uc3QgdGhTID0gJ3BhZGRpbmc6MTBweCAxNHB4OyB3aGl0ZS1zcGFjZTpub3dyYXA7JztcbiAgICB0aGVhZC5pbm5lckhUTUwgPVxuICAgICAgYDx0ciBzdHlsZT1cImJhY2tncm91bmQ6I2YxZjVmOTsgdGV4dC1hbGlnbjpsZWZ0O1wiPmAgK1xuICAgICAgICBgPHRoIHN0eWxlPVwiJHt0aFN9XCI+UHJvdmlkZXI8L3RoPmAgK1xuICAgICAgICBgPHRoIHN0eWxlPVwiJHt0aFN9XCI+TW9kZWw8L3RoPmAgK1xuICAgICAgICBgPHRoIHN0eWxlPVwiJHt0aFN9IHRleHQtYWxpZ246cmlnaHQ7XCI+Q29udGV4dDwvdGg+YCArXG4gICAgICAgIGA8dGggc3R5bGU9XCIke3RoU30gdGV4dC1hbGlnbjpyaWdodDtcIiB0aXRsZT1cIlVTRCBwZXIgMU0gaW5wdXQgdG9rZW5zIChkaXJlY3QgQVBJIGJpbGxpbmcpXCI+JC8xTSBpbjwvdGg+YCArXG4gICAgICAgIGA8dGggc3R5bGU9XCIke3RoU30gdGV4dC1hbGlnbjpyaWdodDtcIiB0aXRsZT1cIlVTRCBwZXIgMU0gb3V0cHV0IHRva2VucyAoZGlyZWN0IEFQSSBiaWxsaW5nKVwiPiQvMU0gb3V0PC90aD5gICtcbiAgICAgICAgYDx0aCBzdHlsZT1cIiR7dGhTfSB0ZXh0LWFsaWduOnJpZ2h0O1wiIHRpdGxlPVwiR2l0SHViIENvcGlsb3QgcHJlbWl1bS1yZXF1ZXN0IG11bHRpcGxpZXIgKDAgPSBmcmVlIGZvciBwYWlkIHN1YnNjcmliZXJzKVwiPkNvcGlsb3Q8L3RoPmAgK1xuICAgICAgICBgPHRoIHN0eWxlPVwiJHt0aFN9XCI+U291cmNlPC90aD5gICtcbiAgICAgICAgYDx0aCBzdHlsZT1cIiR7dGhTfVwiPk5vdGVzPC90aD5gICtcbiAgICAgIGA8L3RyPmA7XG4gIH1cblxuICAvLyBUZWFyIGRvd24gYW55IGV4aXN0aW5nIERhdGFUYWJsZSBiZWZvcmUgcmVidWlsZGluZyByb3dzLlxuICBpZiAod2luZG93LiQgJiYgJC5mbiAmJiAkLmZuLkRhdGFUYWJsZSAmJiAkLmZuLkRhdGFUYWJsZS5pc0RhdGFUYWJsZSgnI21vZGVsLXRhYmxlJykpIHtcbiAgICB0cnkge1xuICAgICAgX21vZGVsRGF0YVRhYmxlID0gJCgnI21vZGVsLXRhYmxlJykuRGF0YVRhYmxlKCk7XG4gICAgICBfbW9kZWxEYXRhVGFibGUuZGVzdHJveSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKCdEYXRhVGFibGUuZGVzdHJveSgpIGZhaWxlZCAodGFibGUgbWF5IGFscmVhZHkgYmUgdG9ybiBkb3duKTonLCBlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgX21vZGVsRGF0YVRhYmxlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBQcmVmZXIgY3Jvc3MtcHJvdmlkZXIgbGlzdDsgZmFsbCBiYWNrIHRvIGN1cnJlbnQtcHJvdmlkZXIgYXZhaWxhYmxlIGxpc3RcbiAgbGV0IHJvd3MgPSAoX21vZGVsRGF0YS5hbGxfbW9kZWxzICYmIF9tb2RlbERhdGEuYWxsX21vZGVscy5sZW5ndGgpXG4gICAgPyBfbW9kZWxEYXRhLmFsbF9tb2RlbHMuZmlsdGVyKHIgPT4gci5tb2RlbClcbiAgICA6IChfbW9kZWxEYXRhLmF2YWlsYWJsZSB8fCBbXSkubWFwKHIgPT5cbiAgICAgICAgdHlwZW9mIHIgPT09ICdvYmplY3QnXG4gICAgICAgICAgPyB7IC4uLnIsIHByb3ZpZGVyOiBjdXJyZW50UHJvdmlkZXIgfVxuICAgICAgICAgIDogeyBtb2RlbDogciwgcHJvdmlkZXI6IGN1cnJlbnRQcm92aWRlciB9XG4gICAgICApO1xuXG4gIF9yZW5kZXJRdWlja01vZGVsTGlzdChyb3dzKTtcbiAgdGJvZHkuaW5uZXJIVE1MID0gJyc7XG4gIGNvbnN0IHRkQmFzZSAgPSAncGFkZGluZzo5cHggMTRweDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2UyZThmMDsnO1xuICBjb25zdCBmbXRDb3N0ID0gdiA9PiAodiAhPSBudWxsKSA/ICckJyArIE51bWJlcih2KS50b0ZpeGVkKHYgPCAxID8gMyA6IDIpIDogJ1x1MjAxNCc7XG4gIGNvbnN0IGZtdFByaWNlSGludCA9IHNvdXJjZSA9PiB7XG4gICAgaWYgKHNvdXJjZSA9PT0gJ3J1bnRpbWVfY2FjaGUnKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIHRpdGxlPVwiUHJpY2UgZnJvbSBydW50aW1lIGNhY2hlXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDo2cHg7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBwYWRkaW5nOjFweCA1cHg7IGJvcmRlci1yYWRpdXM6OTk5cHg7IGJhY2tncm91bmQ6I2VjZmVmZjsgY29sb3I6IzBmNzY2ZTsgZm9udC1zaXplOjAuNzJlbTsgZm9udC13ZWlnaHQ6NjAwOyB2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XCI+Y2FjaGU8L3NwYW4+JztcbiAgICB9XG4gICAgcmV0dXJuICc8c3BhbiB0aXRsZT1cIlByaWNlIGZyb20gc3RhdGljIGJhc2VsaW5lXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDo2cHg7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBwYWRkaW5nOjFweCA1cHg7IGJvcmRlci1yYWRpdXM6OTk5cHg7IGJhY2tncm91bmQ6I2Y4ZmFmYzsgY29sb3I6IzY0NzQ4YjsgZm9udC1zaXplOjAuNzJlbTsgZm9udC13ZWlnaHQ6NjAwOyB2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XCI+c3RhdGljPC9zcGFuPic7XG4gIH07XG4gIGNvbnN0IGZtdFNvdXJjZSA9IHMgPT4ge1xuICAgIGlmIChzID09PSAnbGlzdF9tb2RlbHMnKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7IHBhZGRpbmc6MnB4IDZweDsgYm9yZGVyLXJhZGl1czo5OTlweDsgYmFja2dyb3VuZDojZWNmZWZmOyBjb2xvcjojMGY3NjZlOyBmb250LXNpemU6MC43OGVtOyBmb250LXdlaWdodDo2MDA7XCI+bGlzdF9tb2RlbHM8L3NwYW4+JztcbiAgICB9XG4gICAgcmV0dXJuICc8c3BhbiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrOyBwYWRkaW5nOjJweCA2cHg7IGJvcmRlci1yYWRpdXM6OTk5cHg7IGJhY2tncm91bmQ6I2YxZjVmOTsgY29sb3I6IzQ3NTU2OTsgZm9udC1zaXplOjAuNzhlbTsgZm9udC13ZWlnaHQ6NjAwO1wiPmZhbGxiYWNrX3N0YXRpYzwvc3Bhbj4nO1xuICB9O1xuICBjb25zdCBmbXRNdWx0ID0gdiA9PiB7XG4gICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuICdcdTIwMTQnO1xuICAgIGlmICh2ID09PSAwKSAgIHJldHVybiAnPHNwYW4gc3R5bGU9XCJjb2xvcjojMTZhMzRhOyBmb250LXdlaWdodDo2MDA7XCI+ZnJlZTwvc3Bhbj4nO1xuICAgIHJldHVybiBOdW1iZXIodikudG9GaXhlZCh2ICUgMSA9PT0gMCA/IDAgOiAyKSArICcmdGltZXM7JztcbiAgfTtcblxuICByb3dzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgY29uc3QgcHJvdmlkZXIgICA9IGl0ZW0ucHJvdmlkZXIgfHwgY3VycmVudFByb3ZpZGVyO1xuICAgIGNvbnN0IG0gICAgICAgICAgPSBpdGVtLm1vZGVsO1xuICAgIGNvbnN0IGN0eCAgICAgICAgPSBpdGVtLmNvbnRleHRfd2luZG93ID8gTnVtYmVyKGl0ZW0uY29udGV4dF93aW5kb3cpLnRvTG9jYWxlU3RyaW5nKCkgOiAnXHUyMDE0JztcbiAgICBjb25zdCBzb3VyY2UgICAgID0gaXRlbS5zb3VyY2UgfHwgJ2ZhbGxiYWNrX3N0YXRpYyc7XG4gICAgY29uc3QgcHJpY2VTb3VyY2UgPSBpdGVtLnByaWNlX3NvdXJjZSB8fCAnc3RhdGljX2Jhc2VsaW5lJztcbiAgICBjb25zdCBub3RlcyAgICAgID0gaXRlbS5ub3RlcyB8fCAnJztcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gKHByb3ZpZGVyID09PSBjdXJyZW50UHJvdmlkZXIgJiYgbSA9PT0gY3VycmVudE1vZGVsKTtcblxuICAgIGNvbnN0IHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTtcbiAgICB0ci5zZXRBdHRyaWJ1dGUoJ2RhdGEtcHJvdmlkZXInLCBwcm92aWRlcik7XG4gICAgdHIuc2V0QXR0cmlidXRlKCdkYXRhLW1vZGVsJywgbSk7XG4gICAgX2FwcGx5TW9kZWxSb3dWaXN1YWxTdGF0ZSh0ciwgaXNTZWxlY3RlZCk7XG4gICAgdHIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgKCkgPT4ge1xuICAgICAgaWYgKCF0ci5jbGFzc0xpc3QuY29udGFpbnMoJ21vZGVsLXJvdy1hY3RpdmUnKSkgdHIuc3R5bGUuYmFja2dyb3VuZCA9ICcjZjhmYWZjJztcbiAgICB9KTtcbiAgICB0ci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICgpID0+IHtcbiAgICAgIGlmICghdHIuY2xhc3NMaXN0LmNvbnRhaW5zKCdtb2RlbC1yb3ctYWN0aXZlJykpIHRyLnN0eWxlLmJhY2tncm91bmQgPSAnJztcbiAgICB9KTtcblxuICAgIHRyLmlubmVySFRNTCA9XG4gICAgICBgPHRkIHN0eWxlPVwiJHt0ZEJhc2V9IGNvbG9yOiM2NDc0OGI7IHdoaXRlLXNwYWNlOm5vd3JhcDtcIj4ke2VzY2FwZUh0bWwoX3Byb3ZpZGVyRGlzcGxheUxhYmVsKHByb3ZpZGVyKSl9PC90ZD5gICtcbiAgICAgIGA8dGQgc3R5bGU9XCIke3RkQmFzZX1cIj4ke2VzY2FwZUh0bWwobSl9PC90ZD5gICtcbiAgICAgIGA8dGQgc3R5bGU9XCIke3RkQmFzZX0gd2hpdGUtc3BhY2U6bm93cmFwOyB0ZXh0LWFsaWduOnJpZ2h0OyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXM7XCI+JHtjdHh9PC90ZD5gICtcbiAgICAgIGA8dGQgc3R5bGU9XCIke3RkQmFzZX0gdGV4dC1hbGlnbjpyaWdodDsgZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zOyB3aGl0ZS1zcGFjZTpub3dyYXA7XCI+JHtmbXRDb3N0KGl0ZW0uY29zdF9pbnB1dCl9JHtmbXRQcmljZUhpbnQocHJpY2VTb3VyY2UpfTwvdGQ+YCArXG4gICAgICBgPHRkIHN0eWxlPVwiJHt0ZEJhc2V9IHRleHQtYWxpZ246cmlnaHQ7IGZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtczsgd2hpdGUtc3BhY2U6bm93cmFwO1wiPiR7Zm10Q29zdChpdGVtLmNvc3Rfb3V0cHV0KX0ke2ZtdFByaWNlSGludChwcmljZVNvdXJjZSl9PC90ZD5gICtcbiAgICAgIGA8dGQgc3R5bGU9XCIke3RkQmFzZX0gdGV4dC1hbGlnbjpyaWdodDsgZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zOyB3aGl0ZS1zcGFjZTpub3dyYXA7XCI+JHtmbXRNdWx0KGl0ZW0uY29waWxvdF9tdWx0aXBsaWVyKX08L3RkPmAgK1xuICAgICAgYDx0ZCBzdHlsZT1cIiR7dGRCYXNlfSB3aGl0ZS1zcGFjZTpub3dyYXA7XCI+JHtmbXRTb3VyY2Uoc291cmNlKX08L3RkPmAgK1xuICAgICAgYDx0ZCBzdHlsZT1cIiR7dGRCYXNlfSBjb2xvcjojNjQ3NDhiO1wiPiR7ZXNjYXBlSHRtbChub3Rlcyl9PC90ZD5gO1xuICAgIHRib2R5LmFwcGVuZENoaWxkKHRyKTtcbiAgfSk7XG5cbiAgLy8gUmViaW5kIHJvdyBjbGljayB1c2luZyBkZWxlZ2F0aW9uIHNvIHNvcnRpbmcvZmlsdGVyIHJlZHJhd3Mgc3RpbGwgd29yay5cbiAgdGJvZHkub25jbGljayA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRyID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJ3RyJyk7XG4gICAgaWYgKCF0cikgcmV0dXJuO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdHIuZ2V0QXR0cmlidXRlKCdkYXRhLXByb3ZpZGVyJyk7XG4gICAgY29uc3QgbW9kZWwgPSB0ci5nZXRBdHRyaWJ1dGUoJ2RhdGEtbW9kZWwnKTtcbiAgICBpZiAoIW1vZGVsKSByZXR1cm47XG5cbiAgICAvLyBJbW1lZGlhdGUgZmVlZGJhY2sgd2hpbGUgdGhlIEFQSSBjYWxsIGlzIGluLWZsaWdodFxuICAgIHRyLnN0eWxlLmNzc1RleHQgPSAnYmFja2dyb3VuZDojZmVmM2M3OyBjdXJzb3I6d2FpdDsgb3BhY2l0eTowLjg1Oyc7XG4gICAgY29uc3QgbW9kZWxDZWxsID0gdHIuY2VsbHMgJiYgdHIuY2VsbHNbMV07XG4gICAgaWYgKG1vZGVsQ2VsbCkge1xuICAgICAgbW9kZWxDZWxsLmlubmVySFRNTCA9XG4gICAgICAgIGA8c3BhbiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiIHN0eWxlPVwid2lkdGg6MTRweDtoZWlnaHQ6MTRweDtib3JkZXItd2lkdGg6MnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tcmlnaHQ6NnB4O1wiPjwvc3Bhbj4ke2VzY2FwZUh0bWwobW9kZWwpfWA7XG4gICAgfVxuICAgIGNvbnN0IHN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC10ZXN0LXN0YXR1cycpO1xuICAgIGlmIChzdGF0dXMpIHtcbiAgICAgIHN0YXR1cy5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICBzdGF0dXMuc3R5bGUuY29sb3IgICA9ICcjOTI0MDBlJztcbiAgICAgIHN0YXR1cy5pbm5lckhUTUwgICAgID1cbiAgICAgICAgYDxzcGFuIGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCIgc3R5bGU9XCJ3aWR0aDoxNHB4O2hlaWdodDoxNHB4O2JvcmRlci13aWR0aDoycHg7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDo2cHg7XCI+PC9zcGFuPiBTd2l0Y2hpbmcgdG8gJHtlc2NhcGVIdG1sKG1vZGVsKX1cXHUyMDI2YDtcbiAgICB9XG5cbiAgICBhd2FpdCBzZXRNb2RlbChtb2RlbCwgcHJvdmlkZXIpO1xuICB9O1xuXG4gIC8vIEVuaGFuY2Ugd2l0aCBEYXRhVGFibGVzIGZvciBzb3J0aW5nL3NlYXJjaGluZzsga2VlcCBwYWdpbmcgZGlzYWJsZWQuXG4gIGlmICh3aW5kb3cuJCAmJiAkLmZuICYmICQuZm4uRGF0YVRhYmxlKSB7XG4gICAgX21vZGVsRGF0YVRhYmxlID0gJCgnI21vZGVsLXRhYmxlJykuRGF0YVRhYmxlKHtcbiAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICBzZWFyY2hpbmc6IHRydWUsXG4gICAgICBpbmZvOiBmYWxzZSxcbiAgICAgIG9yZGVyQ2VsbHNUb3A6IHRydWUsXG4gICAgICBvcmRlcjogW1swLCAnYXNjJ10sIFsxLCAnYXNjJ11dLFxuICAgICAgYXV0b1dpZHRoOiBmYWxzZSxcbiAgICAgIGxhbmd1YWdlOiB7IHNlYXJjaDogJ0ZpbHRlcjonIH0sXG4gICAgICBpbml0Q29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCBhcGkgPSB0aGlzLmFwaSgpO1xuICAgICAgICBjb25zdCAkdGhlYWQgPSAkKCcjbW9kZWwtdGFibGUgdGhlYWQnKTtcbiAgICAgICAgY29uc3QgaGFzRmlsdGVyUm93ID0gJHRoZWFkLmZpbmQoJ3RyLm1vZGVsLWZpbHRlci1yb3cnKS5sZW5ndGggPiAwO1xuICAgICAgICBpZiAoIWhhc0ZpbHRlclJvdykge1xuICAgICAgICAgIGNvbnN0ICRmaWx0ZXJSb3cgPSAkKCc8dHIgY2xhc3M9XCJtb2RlbC1maWx0ZXItcm93XCI+PC90cj4nKTtcbiAgICAgICAgICBhcGkuY29sdW1ucygpLmV2ZXJ5KGZ1bmN0aW9uKGNvbElkeCkge1xuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSAkKGFwaS5jb2x1bW4oY29sSWR4KS5oZWFkZXIoKSkudGV4dCgpLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0ICR0aCA9ICQoJzx0aCBzdHlsZT1cInBhZGRpbmc6NnB4IDEwcHg7IGJhY2tncm91bmQ6I2Y4ZmFmYzsgYm9yZGVyLXRvcDoxcHggc29saWQgI2UyZThmMDtcIj48L3RoPicpO1xuICAgICAgICAgICAgY29uc3QgJGlucHV0ID0gJCgnPGlucHV0PicsIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGl0bGUsXG4gICAgICAgICAgICAgIHN0eWxlOiAnd2lkdGg6MTAwJTsgcGFkZGluZzo0cHggNnB4OyBib3JkZXI6MXB4IHNvbGlkICNjYmQ1ZTE7IGJvcmRlci1yYWRpdXM6NHB4OyBmb250LXNpemU6MC44MmVtOycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICR0aC5hcHBlbmQoJGlucHV0KTtcbiAgICAgICAgICAgICRmaWx0ZXJSb3cuYXBwZW5kKCR0aCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgJHRoZWFkLmFwcGVuZCgkZmlsdGVyUm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwaS5jb2x1bW5zKCkuZXZlcnkoZnVuY3Rpb24oY29sSWR4KSB7XG4gICAgICAgICAgY29uc3QgJGlucHV0ID0gJCgnI21vZGVsLXRhYmxlIHRoZWFkIHRyLm1vZGVsLWZpbHRlci1yb3cgdGgnKS5lcShjb2xJZHgpLmZpbmQoJ2lucHV0Jyk7XG4gICAgICAgICAgaWYgKCEkaW5wdXQubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgJGlucHV0Lm9mZignY2xpY2subW9kZWxGaWx0ZXIga2V5dXAubW9kZWxGaWx0ZXIgY2hhbmdlLm1vZGVsRmlsdGVyJyk7XG4gICAgICAgICAgJGlucHV0Lm9uKCdjbGljay5tb2RlbEZpbHRlcicsIGZ1bmN0aW9uKGV2ZW50KSB7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB9KTtcbiAgICAgICAgICAkaW5wdXQub24oJ2tleXVwLm1vZGVsRmlsdGVyIGNoYW5nZS5tb2RlbEZpbHRlcicsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgaWYgKGFwaS5jb2x1bW4oY29sSWR4KS5zZWFyY2goKSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgYXBpLmNvbHVtbihjb2xJZHgpLnNlYXJjaCh2YWx1ZSkuZHJhdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBfc3luY01vZGVsVGFibGVTZWxlY3Rpb24oKTtcblxuICAvLyBVcGRhdGUgcHJpY2luZyBmcmVzaG5lc3MgZm9vdGVyXG4gIF91cGRhdGVQcmljaW5nRm9vdGVyKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldE1vZGVsKG1vZGVsLCBwcm92aWRlcikge1xuICBpZiAoIW1vZGVsKSByZXR1cm47XG4gIF9zaG93TW9kZWxXaXphcmRCdXN5KGBBcHBseWluZyBtb2RlbCAke21vZGVsfS4uLmApO1xuICB0cnkge1xuICAgIGNvbnN0IHBheWxvYWQgPSBwcm92aWRlciA/IHsgbW9kZWwsIHByb3ZpZGVyIH0gOiB7IG1vZGVsIH07XG4gICAgYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL21vZGVsJywgcGF5bG9hZCk7XG4gICAgaWYgKF9tb2RlbERhdGEpIHtcbiAgICAgIF9tb2RlbERhdGEubW9kZWwgPSBtb2RlbDtcbiAgICAgIGlmIChwcm92aWRlcikgX21vZGVsRGF0YS5wcm92aWRlciA9IHByb3ZpZGVyO1xuICAgIH1cbiAgICBjb25zdCBlZmZlY3RpdmVQcm92aWRlciA9IChfbW9kZWxEYXRhICYmIF9tb2RlbERhdGEucHJvdmlkZXIpIHx8IHByb3ZpZGVyO1xuICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLWN1cnJlbnQtbGFiZWwnKTtcbiAgICBpZiAobGFiZWwpIHtcbiAgICAgIGxhYmVsLnRleHRDb250ZW50ID0gZWZmZWN0aXZlUHJvdmlkZXIgPyBgJHtlZmZlY3RpdmVQcm92aWRlcn0gXHUwMEI3ICR7bW9kZWx9YCA6IG1vZGVsO1xuICAgIH1cbiAgICBfYXBwZW5kUmVjZW50TW9kZWwoZWZmZWN0aXZlUHJvdmlkZXIsIG1vZGVsKTtcbiAgICBfc3luY01vZGVsVGFibGVTZWxlY3Rpb24oKTtcbiAgICBfcmVuZGVyUXVpY2tNb2RlbExpc3QoKF9tb2RlbERhdGEgJiYgX21vZGVsRGF0YS5hbGxfbW9kZWxzKSB8fCBbXSk7XG4gICAgX3VwZGF0ZUxsbVN0YXR1c1BpbGwoJ2NvbmZpZ3VyZWQnLCBgJHtlZmZlY3RpdmVQcm92aWRlciB8fCAnUHJvdmlkZXInfSBjb25maWd1cmVkYCk7XG5cbiAgICBfc2F2ZU1vZGVsUHJlZnNUb1N0b3JhZ2Uoe1xuICAgICAgY3VycmVudE1vZGVsUHJvdmlkZXI6IGVmZmVjdGl2ZVByb3ZpZGVyIHx8IG51bGwsXG4gICAgICBjdXJyZW50TW9kZWxOYW1lOiBtb2RlbCB8fCBudWxsLFxuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy51cGRhdGVBdXRoQmFkZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGdsb2JhbFRoaXMudXBkYXRlQXV0aEJhZGdlKHt9LCBlZmZlY3RpdmVQcm92aWRlciB8fCBudWxsKTtcbiAgICB9XG4gICAgYXdhaXQgX3JlZnJlc2hDb3BpbG90QXV0aFN0YXR1cygpO1xuICAgIGF3YWl0IHRlc3RDdXJyZW50TW9kZWwoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5lcnJvcignRmFpbGVkIHRvIHN3aXRjaCBtb2RlbDonLCBlKTtcbiAgICBjb25zdCBtc2cgPSBlLm1lc3NhZ2UgfHwgU3RyaW5nKGUpO1xuICAgIF9zeW5jTW9kZWxUYWJsZVNlbGVjdGlvbigpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC10ZXN0LXN0YXR1cycpO1xuICAgIGlmIChzdGF0dXMpIHtcbiAgICAgIHN0YXR1cy5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICBzdGF0dXMuc3R5bGUuY29sb3IgPSAnI2RjMjYyNic7XG4gICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSBgXHUyNzRDICR7bXNnfWA7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYXBwZW5kTWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgYFx1Mjc0QyBNb2RlbCBzd2l0Y2ggZmFpbGVkOiAke21zZ31gKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgX2hpZGVNb2RlbFdpemFyZEJ1c3koKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB0ZXN0Q3VycmVudE1vZGVsKCkge1xuICAvLyBVcGRhdGUgYm90aCB0aGUgaGVhZGVyIGJhZGdlIGFuZCB0aGUgbW9kYWwgc3RhdHVzIGxpbmVcbiAgY29uc3QgYmFkZ2UgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXRlc3QtYmFkZ2UnKTtcbiAgY29uc3Qgc3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVsLXRlc3Qtc3RhdHVzJyk7XG4gIGNvbnN0IGJ0biAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC10ZXN0LWJ0bicpO1xuXG4gIGNvbnN0IFNQSU4gPSAnXHUyM0YzJztcbiAgY29uc3QgT0sgICA9ICdcdTI3MDUnO1xuICBjb25zdCBGQUlMID0gJ1x1Mjc0Qyc7XG5cbiAgY29uc3Qgc2V0UnVubmluZyA9ICgpID0+IHtcbiAgICBpZiAoYmFkZ2UpICB7IGJhZGdlLnRleHRDb250ZW50ICA9IFNQSU47IGJhZGdlLnN0eWxlLmRpc3BsYXkgID0gJyc7IGJhZGdlLnRpdGxlICA9ICdUZXN0aW5nXHUyMDI2JzsgfVxuICAgIGlmIChzdGF0dXMpIHsgc3RhdHVzLmlubmVySFRNTCAgID0gYCR7U1BJTn0gVGVzdGluZyBjb25uZWN0aW9uXHUyMDI2YDsgc3RhdHVzLnN0eWxlLmRpc3BsYXkgPSAnJzsgfVxuICAgIGlmIChidG4pICAgIHsgYnRuLmRpc2FibGVkID0gdHJ1ZTsgYnRuLnRleHRDb250ZW50ID0gJ1x1MjNGMyBUZXN0aW5nXHUyMDI2JzsgfVxuICAgIF91cGRhdGVMbG1TdGF0dXNQaWxsKCdjb25uZWN0aW5nJywgJ0Nvbm5lY3RpbmdcdTIwMjYnLCAnXHUyOUQ3Jyk7XG4gIH07XG5cbiAgY29uc3Qgc2V0T2sgPSAobGF0ZW5jeU1zKSA9PiB7XG4gICAgY29uc3QgdGlwID0gYENvbm5lY3RlZCBcdTIwMTQgJHtsYXRlbmN5TXN9bXNgO1xuICAgIGlmIChiYWRnZSkgIHsgYmFkZ2UudGV4dENvbnRlbnQgID0gT0s7ICBiYWRnZS5zdHlsZS5kaXNwbGF5ICA9ICcnOyBiYWRnZS50aXRsZSAgPSB0aXA7IH1cbiAgICBpZiAoc3RhdHVzKSB7IHN0YXR1cy5pbm5lckhUTUwgICA9IGAke09LfSAke3RpcH1gOyBzdGF0dXMuc3R5bGUuY29sb3IgPSAnIzE2YTM0YSc7IHN0YXR1cy5zdHlsZS5kaXNwbGF5ID0gJyc7IH1cbiAgICBpZiAoYnRuKSAgICB7IGJ0bi5kaXNhYmxlZCA9IGZhbHNlOyBidG4uaW5uZXJIVE1MID0gJyYjMTAwMDM7IFRlc3QgY29ubmVjdGlvbic7IH1cbiAgICBfdXBkYXRlTGxtU3RhdHVzUGlsbCgnY29ubmVjdGVkJywgYEhlYWx0aHkgKCR7bGF0ZW5jeU1zfW1zKWAsICdcdTI3MTMnKTtcbiAgICBjb25zdCBzdWNjZXNzU3VtbWFyeSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlbC1zdWNjZXNzLXN1bW1hcnknKTtcbiAgICBpZiAoc3VjY2Vzc1N1bW1hcnkpIHtcbiAgICAgIHN1Y2Nlc3NTdW1tYXJ5LnRleHRDb250ZW50ID0gYENvbm5lY3Rpb24gdmVyaWZpZWQgaW4gJHtsYXRlbmN5TXN9bXMuIFlvdSBjYW4gY2xvc2UgdGhlIHdpemFyZCBhbmQgY29udGludWUuYDtcbiAgICB9XG4gICAgX3NldE1vZGVsV2l6YXJkU3RlcCg0KTtcbiAgfTtcblxuICBjb25zdCBzZXRGYWlsID0gKGVyck1zZykgPT4ge1xuICAgIGlmIChiYWRnZSkgIHsgYmFkZ2UudGV4dENvbnRlbnQgID0gRkFJTDsgYmFkZ2Uuc3R5bGUuZGlzcGxheSAgPSAnJzsgYmFkZ2UudGl0bGUgID0gZXJyTXNnOyB9XG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgc3RhdHVzLmlubmVySFRNTCAgID0gYCR7RkFJTH0gPHNwYW4gdGl0bGU9XCIke2Vyck1zZy5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyl9XCIgc3R5bGU9XCJjdXJzb3I6aGVscDsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7XCI+Q29ubmVjdGlvbiBmYWlsZWQ8L3NwYW4+YDtcbiAgICAgIHN0YXR1cy5zdHlsZS5jb2xvciA9ICcjZGMyNjI2JztcbiAgICAgIHN0YXR1cy5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgfVxuICAgIGlmIChidG4pICAgIHsgYnRuLmRpc2FibGVkID0gZmFsc2U7IGJ0bi5pbm5lckhUTUwgPSAnJiMxMDAwMzsgVGVzdCBjb25uZWN0aW9uJzsgfVxuICAgIF91cGRhdGVMbG1TdGF0dXNQaWxsKCdlcnJvcicsICdDb25uZWN0aW9uIGZhaWxlZCcsICdcdTI2QTAnLCBlcnJNc2cpO1xuICAgIGlmIChfbW9kZWxXaXphcmRTdGVwID09PSAzKSB7XG4gICAgICBfc2V0TW9kZWxXaXphcmRTdGVwKDIpO1xuICAgIH1cbiAgfTtcblxuICBzZXRSdW5uaW5nKCk7XG4gIF9zaG93TW9kZWxXaXphcmRCdXN5KCdUZXN0aW5nIG1vZGVsIGNvbm5lY3Rpb24uLi4nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvbW9kZWwvdGVzdCcpO1xuICAgIGlmIChyZXN1bHQub2spIHtcbiAgICAgIHNldE9rKHJlc3VsdC5sYXRlbmN5X21zKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzZXRGYWlsKHJlc3VsdC5lcnJvciB8fCAnVW5rbm93biBlcnJvcicpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNldEZhaWwoZS5tZXNzYWdlIHx8IFN0cmluZyhlKSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGZpbmFsbHkge1xuICAgIF9oaWRlTW9kZWxXaXphcmRCdXN5KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3VwZGF0ZVByaWNpbmdGb290ZXIoKSB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByaWNpbmctdXBkYXRlZC1sYWJlbCcpO1xuICBpZiAoIWVsIHx8ICFfbW9kZWxEYXRhKSByZXR1cm47XG4gIGNvbnN0IHRzICAgICA9IF9tb2RlbERhdGEucHJpY2luZ191cGRhdGVkX2F0O1xuICBjb25zdCBzb3VyY2UgPSBfbW9kZWxEYXRhLnByaWNpbmdfc291cmNlO1xuXG4gIGNvbnN0IHNvdXJjZUxhYmVsID0gKHNvdXJjZSA9PT0gJ29wZW5yb3V0ZXInKVxuICAgID8gJzxhIGhyZWY9XCJodHRwczovL29wZW5yb3V0ZXIuYWlcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lclwiICcgK1xuICAgICAgJ3N0eWxlPVwiY29sb3I6aW5oZXJpdDsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7XCI+T3BlblJvdXRlcjwvYT4nXG4gICAgOiAnc3RhdGljIGJhc2VsaW5lIChNYXJjaCAyMDI2KSc7XG5cbiAgaWYgKCF0cykgeyBlbC5pbm5lckhUTUwgPSBgUHJpY2VzOiAke3NvdXJjZUxhYmVsfWA7IHJldHVybjsgfVxuICB0cnkge1xuICAgIGNvbnN0IGQgICA9IG5ldyBEYXRlKHRzKTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGggICA9IE1hdGgucm91bmQoKG5vdyAtIGQpIC8gM182MDBfMDAwKTtcbiAgICBjb25zdCBhZ2UgPSBoIDwgMSA/ICdqdXN0IG5vdycgOiBoIDwgMjQgPyBgJHtofWggYWdvYCA6IGAke01hdGgucm91bmQoaCAvIDI0KX1kIGFnb2A7XG4gICAgZWwuaW5uZXJIVE1MID0gYFByaWNlcyB2aWEgJHtzb3VyY2VMYWJlbH0gJm1pZGRvdDsgdXBkYXRlZCAke2FnZX1gO1xuICB9IGNhdGNoIHsgZWwuaW5uZXJIVE1MID0gYFByaWNlczogJHtzb3VyY2VMYWJlbH1gOyB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hNb2RlbFByaWNpbmcoKSB7XG4gIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmljaW5nLXJlZnJlc2gtYnRuJyk7XG4gIGNvbnN0IGxibCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmljaW5nLXVwZGF0ZWQtbGFiZWwnKTtcbiAgaWYgKGJ0bikgeyBidG4uZGlzYWJsZWQgPSB0cnVlOyBidG4udGV4dENvbnRlbnQgPSAnUmVmcmVzaGluZ1x1MjAyNic7IH1cbiAgX3Nob3dNb2RlbFdpemFyZEJ1c3koJ1JlZnJlc2hpbmcgbW9kZWwgcHJpY2luZy4uLicpO1xuICB0cnkge1xuICAgIGF3YWl0IGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9tb2RlbC1wcmljaW5nL3JlZnJlc2gnKTtcbiAgICAvLyBSZS1mZXRjaCBtb2RlbCBkYXRhIHNvIHRoZSB0YWJsZSBnZXRzIGZyZXNoIHByaWNlc1xuICAgIF9tb2RlbERhdGEgPSBhd2FpdCBhcGlDYWxsKCdHRVQnLCAnL2FwaS9tb2RlbCcpO1xuICAgIF9idWlsZE1vZGVsVGFibGUoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChsYmwpIGxibC50ZXh0Q29udGVudCA9ICdSZWZyZXNoIGZhaWxlZCc7XG4gICAgbG9nLmVycm9yKCdQcmljaW5nIHJlZnJlc2ggZmFpbGVkOicsIGUpO1xuICB9IGZpbmFsbHkge1xuICAgIF9oaWRlTW9kZWxXaXphcmRCdXN5KCk7XG4gICAgaWYgKGJ0bikgeyBidG4uZGlzYWJsZWQgPSBmYWxzZTsgYnRuLnRleHRDb250ZW50ID0gJ1x1MjFCQiBSZWZyZXNoIHByaWNlcyc7IH1cbiAgfVxufVxuXG5cbi8vIEhlbHBlcjogdXBkYXRlIHdvcmtmbG93IHN0ZXAgYmFyIGNsaWNrYWJsZSBzdGF0ZVxuZnVuY3Rpb24gdXBkYXRlV29ya2Zsb3dTdGVwc0NsaWNrYWJsZShjdXJyZW50UGhhc2UpIHtcbiAgLy8gU2VxdWVudGlhbCBwcmUtbGF5b3V0IHN0ZXBzIHVubG9jayBvbmUtYnktb25lIGFzIHRoZSB1c2VyIHByb2dyZXNzZXMuXG4gIGNvbnN0IHNlcXVlbnRpYWxTdGVwcyA9IFtcbiAgICAnc3RlcC1qb2InLFxuICAgICdzdGVwLWFuYWx5c2lzJyxcbiAgICAnc3RlcC1jdXN0b21pemF0aW9ucycsXG4gICAgJ3N0ZXAtcmV3cml0ZScsXG4gICAgJ3N0ZXAtc3BlbGwnLFxuICAgICdzdGVwLWxheW91dCcsXG4gIF07XG4gIC8vIFBvc3QtbGF5b3V0IHN0ZXBzIGFsbCB1bmxvY2sgc2ltdWx0YW5lb3VzbHkgb25jZSBsYXlvdXQgaXMgY29uZmlybWVkLlxuICBjb25zdCBwb3N0TGF5b3V0U3RlcHMgPSBbXG4gICAgJ3N0ZXAtZG93bmxvYWQnLFxuICAgICdzdGVwLWNvdmVyX2xldHRlcicsXG4gICAgJ3N0ZXAtc2NyZWVuaW5nJyxcbiAgICAnc3RlcC1pbnRlcnZpZXdfcHJlcCcsXG4gICAgJ3N0ZXAtdGhhbmtfeW91JyxcbiAgICAnc3RlcC1oYXJ2ZXN0JyxcbiAgXTtcbiAgLy8gTWFwIGJhY2tlbmQgcGhhc2Ugc3RyaW5ncyB0byBob3cgbWFueSBzZXF1ZW50aWFsIHN0ZXBzIGFyZSB1bmxvY2tlZCAoMC1iYXNlZCBpbmRleCkuXG4gIGNvbnN0IHBoYXNlVG9JbmRleCA9IHtcbiAgICAnaW5pdCc6ICAgICAgICAgICAgIDAsXG4gICAgJ2pvYl9hbmFseXNpcyc6ICAgICAxLFxuICAgICdjdXN0b21pemF0aW9uJzogICAgMixcbiAgICAncmV3cml0ZV9yZXZpZXcnOiAgIDMsXG4gICAgJ3NwZWxsX2NoZWNrJzogICAgICA0LFxuICAgICdnZW5lcmF0aW9uJzogICAgICAgNSxcbiAgICAnbGF5b3V0X3Jldmlldyc6ICAgIDUsXG4gICAgJ2ZpbmFsX2dlbmVyYXRpb24nOiA1LFxuICAgICdyZWZpbmVtZW50JzogICAgICAgNSxcbiAgICAvLyBMZWdhY3kgZmFsbGJhY2tzIChzdGVwIG5hbWVzIHNvbWV0aW1lcyBwYXNzZWQgb24gRE9NQ29udGVudExvYWRlZClcbiAgICAnam9iJzogICAgICAgICAgICAgIDAsXG4gICAgJ2xheW91dCc6ICAgICAgICAgICA1LFxuICAgICdmaW5hbGlzZSc6ICAgICAgICAgNSxcbiAgfTtcbiAgY29uc3QgcG9zdExheW91dFVubG9ja2VkID0gWydmaW5hbF9nZW5lcmF0aW9uJywgJ3JlZmluZW1lbnQnXS5pbmNsdWRlcyhjdXJyZW50UGhhc2UpO1xuICBjb25zdCBjdXJyZW50SWR4ID0gcGhhc2VUb0luZGV4W2N1cnJlbnRQaGFzZV0gPz8gMDtcblxuICBmdW5jdGlvbiBfbWFrZVN0ZXBDbGlja2FibGUoZWwpIHtcbiAgICBpZiAoIWVsIHx8IGVsLmNsYXNzTGlzdC5jb250YWlucygnY2xpY2thYmxlJykpIHJldHVybjtcbiAgICBlbC5jbGFzc0xpc3QuYWRkKCdjbGlja2FibGUnKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnYnV0dG9uJyk7XG4gICAgZWwuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgaWYgKCFlbC5fc3RlcEtleUhhbmRsZXIpIHtcbiAgICAgIGVsLl9zdGVwS2V5SGFuZGxlciA9IChlKSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGVsLmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZWwuX3N0ZXBLZXlIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfbWFrZVN0ZXBJbmVydChlbCkge1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdjbGlja2FibGUnKTtcbiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgaWYgKGVsLl9zdGVwS2V5SGFuZGxlcikge1xuICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGVsLl9zdGVwS2V5SGFuZGxlcik7XG4gICAgICBkZWxldGUgZWwuX3N0ZXBLZXlIYW5kbGVyO1xuICAgIH1cbiAgfVxuXG4gIHNlcXVlbnRpYWxTdGVwcy5mb3JFYWNoKChpZCwgaWR4KSA9PiB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGlmIChpZHggPD0gY3VycmVudElkeCB8fCBwb3N0TGF5b3V0VW5sb2NrZWQpIHtcbiAgICAgIF9tYWtlU3RlcENsaWNrYWJsZShlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9tYWtlU3RlcEluZXJ0KGVsKTtcbiAgICB9XG4gIH0pO1xuXG4gIHBvc3RMYXlvdXRTdGVwcy5mb3JFYWNoKGlkID0+IHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgaWYgKHBvc3RMYXlvdXRVbmxvY2tlZCkge1xuICAgICAgX21ha2VTdGVwQ2xpY2thYmxlKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX21ha2VTdGVwSW5lcnQoZWwpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gTWFyayB0aGUgY3VycmVudGx5IGFjdGl2ZSBzdGVwIGZvciBzY3JlZW4gcmVhZGVycy5cbiAgY29uc3QgYWxsU3RlcElkcyA9IFsuLi5zZXF1ZW50aWFsU3RlcHMsIC4uLnBvc3RMYXlvdXRTdGVwc107XG4gIGFsbFN0ZXBJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGVsKSBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcpO1xuICB9KTtcbiAgLy8gRm9yIHBvc3QtbGF5b3V0IHBoYXNlcywgbWFyayBzdGVwLWRvd25sb2FkIGFzIHRoZSBhY3RpdmUgc3RlcCBzbyBzY3JlZW4gcmVhZGVyc1xuICAvLyBoYXZlIGEgcHJvZ3JhbW1hdGljIGN1cnJlbnQtcG9zaXRpb24gaW5kaWNhdG9yLlxuICBjb25zdCBhY3RpdmVTdGVwSWQgPSBwb3N0TGF5b3V0VW5sb2NrZWQgPyAnc3RlcC1kb3dubG9hZCcgOiBzZXF1ZW50aWFsU3RlcHNbY3VycmVudElkeF07XG4gIGlmIChhY3RpdmVTdGVwSWQpIHtcbiAgICBjb25zdCBhY3RpdmVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFjdGl2ZVN0ZXBJZCk7XG4gICAgaWYgKGFjdGl2ZUVsKSBhY3RpdmVFbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsICdzdGVwJyk7XG4gIH1cbn1cblxuLy8gSW5pdGlhbGl6ZSBvbiBwYWdlIGxvYWQgXHUyMDE0IGRlbGVnYXRlcyB0byBhcHAuanMgaW5pdCgpIHdoaWNoIGlzIGxvYWRlZCBhZnRlciB0aGlzIGZpbGVcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gIGxvYWRNb2RlbFNlbGVjdG9yKCk7XG5cbiAgLy8gV2lyZSB1cCB0YWIgc2Nyb2xsIGFycm93IGJ1dHRvbnNcbiAgY29uc3QgdGFiQmFyICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLWJhcicpO1xuICBjb25zdCBsZWZ0QnRuICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWItc2Nyb2xsLWxlZnQnKTtcbiAgY29uc3QgcmlnaHRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLXNjcm9sbC1yaWdodCcpO1xuICBpZiAodGFiQmFyICYmIGxlZnRCdG4gJiYgcmlnaHRCdG4pIHtcbiAgICBsZWZ0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgICgpID0+IHsgdGFiQmFyLnNjcm9sbEJ5KHsgbGVmdDogLTE2MCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pOyB9KTtcbiAgICByaWdodEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsgdGFiQmFyLnNjcm9sbEJ5KHsgbGVmdDogIDE2MCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pOyB9KTtcbiAgICB0YWJCYXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlVGFiU2Nyb2xsQnV0dG9ucyk7XG4gICAgbmV3IFJlc2l6ZU9ic2VydmVyKHVwZGF0ZVRhYlNjcm9sbEJ1dHRvbnMpLm9ic2VydmUodGFiQmFyKTtcbiAgfVxuXG4gIC8vIFNob3cgb25seSB0aGUgSm9iIHRhYiB1bnRpbCBmZXRjaFN0YXR1cyByZXNvbHZlcyB0aGUgYWN0dWFsIHN0YWdlXG4gIHVwZGF0ZVRhYkJhckZvclN0YWdlKCdqb2InKTtcbiAgdXBkYXRlV29ya2Zsb3dTdGVwc0NsaWNrYWJsZSgnam9iJyk7XG5cbiAgLy8gTGlzdGVuIGZvciBwaGFzZSBjaGFuZ2VzIHRvIHVwZGF0ZSBjbGlja2FibGUgc3RlcHNcbiAgaWYgKHR5cGVvZiBzdGF0ZU1hbmFnZXI/Lm9uUGhhc2VDaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdGF0ZU1hbmFnZXIub25QaGFzZUNoYW5nZSgocGhhc2UpID0+IHtcbiAgICAgIHVwZGF0ZVdvcmtmbG93U3RlcHNDbGlja2FibGUocGhhc2UpO1xuICAgIH0pO1xuICB9XG5cbn0pO1xuXG4vLyBcdTI1MDBcdTI1MDAgRVMgbW9kdWxlIGV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICAvLyBGb2N1cyAvIGFjY2Vzc2liaWxpdHlcbiAgc2V0SW5pdGlhbEZvY3VzLCB0cmFwRm9jdXMsIHJlc3RvcmVGb2N1cywgcHVzaEZvY3VzU3RhY2ssXG4gIC8vIERpYWxvZ3MgJiBtb2RhbHNcbiAgY29uZmlybURpYWxvZywgb3Blbk1vZGFsLCBjbG9zZU1vZGFsLCBjbG9zZUFsbE1vZGFscyxcbiAgLy8gVGFiICYgc3RhZ2UgbWFuYWdlbWVudFxuICBzZXR1cEV2ZW50TGlzdGVuZXJzLCBnZXRTdGFnZUZvclRhYiwgZ2V0VmlzaWJsZVN0YWdlLCB1cGRhdGVUYWJCYXJGb3JTdGFnZSxcbiAgLy8gQ2hhdFxuICB0b2dnbGVDaGF0LFxuICAvLyBNb2RlbCBzZWxlY3RvclxuICBsb2FkTW9kZWxTZWxlY3Rvciwgb3Blbk1vZGVsTW9kYWwsIGNsb3NlTW9kZWxNb2RhbCwgc2V0TW9kZWwsIHRlc3RDdXJyZW50TW9kZWwsIHJlZnJlc2hNb2RlbFByaWNpbmcsXG4gIHRvZ2dsZU1vZGVsQ2F0YWxvZ1Zpc2liaWxpdHksIHN0YXJ0Q29waWxvdEF1dGhGcm9tV2l6YXJkLCBsb2dvdXRDb3BpbG90QXV0aEZyb21XaXphcmQsXG4gIG5leHRXaXphcmRTdGVwLCBwcmV2aW91c1dpemFyZFN0ZXAsXG4gIHNhdmVQcm92aWRlckFwaUtleSwgdG9nZ2xlQXBpS2V5VmlzaWJpbGl0eSxcbiAgX3VwZGF0ZUxsbVN0YXR1c1BpbGwsXG4gIC8vIFNldHRpbmdzIG1vZGFsXG4gIG9wZW5TZXR0aW5nc01vZGFsLCBjbG9zZVNldHRpbmdzTW9kYWwsIHNhdmVTZXR0aW5nc01vZGFsLCByZWxvYWRTZXR0aW5nc01vZGFsLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3dvcmtmbG93LXN0ZXBzLmpzXG4gKiBXb3JrZmxvdyBwcm9ncmVzcyBiYXIsIHBoYXNlIHJlLXJ1bi9iYWNrLW5hdiwgYW5kIGJ1bGxldCByZW9yZGVyIG1vZGFsLlxuICpcbiAqIERlcGVuZGVuY2llcyAocmVzb2x2ZWQgdGhyb3VnaCBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICBQSEFTRVMsIGVzY2FwZUh0bWwsXG4gKiAgIGFwcGVuZExvYWRpbmdNZXNzYWdlLCByZW1vdmVMb2FkaW5nTWVzc2FnZSwgYXBwZW5kUmV0cnlNZXNzYWdlLCBhcHBlbmRNZXNzYWdlLFxuICogICBzZXRMb2FkaW5nLCBmZXRjaFN0YXR1cywgc3dpdGNoVGFiLCBzZW5kQWN0aW9uLFxuICogICBzaG93TG9hZEpvYlBhbmVsLCB1cGRhdGVBY3Rpb25CdXR0b25zLCB1cGRhdGVUYWJCYXJGb3JTdGFnZSxcbiAqICAgdHJhcEZvY3VzLCByZXN0b3JlRm9jdXMsIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsLFxuICogICBwb3N0QW5hbHlzaXNRdWVzdGlvbnMsIHF1ZXN0aW9uQW5zd2VycywgQ1NTXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCd3b3JrZmxvdy1zdGVwcycpO1xuXG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIsIEdFTkVSQVRJT05fU1RBVEVfRVZFTlQgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuXG5mdW5jdGlvbiBfZmluZEV4cGVyaWVuY2VSZWNvbW1lbmRhdGlvblJlY29yZChleHBJZCkge1xuICBjb25zdCBkYXRhID0gZ2xvYmFsVGhpcy53aW5kb3c/LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnM7XG4gIGlmICghZGF0YSB8fCAhQXJyYXkuaXNBcnJheShkYXRhLmV4cGVyaWVuY2VfcmVjb21tZW5kYXRpb25zKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBkYXRhLmV4cGVyaWVuY2VfcmVjb21tZW5kYXRpb25zLmZpbmQoKHJlYykgPT4gU3RyaW5nKHJlYz8uaWQgfHwgcmVjPy5leHBlcmllbmNlX2lkIHx8ICcnKSA9PT0gU3RyaW5nKGV4cElkKSkgfHwgbnVsbDtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFN0ZXAtb3JkZXIgY29uc3RhbnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5jb25zdCBfU1RFUF9PUkRFUiA9IFtcbiAgJ2pvYicsICdhbmFseXNpcycsICdjdXN0b21pemF0aW9ucycsICdyZXdyaXRlJywgJ3NwZWxsJywgJ2xheW91dCcsXG4gICdkb3dubG9hZCcsICdjb3Zlcl9sZXR0ZXInLCAnc2NyZWVuaW5nJywgJ2ludGVydmlld19wcmVwJywgJ3RoYW5rX3lvdScsICdoYXJ2ZXN0Jyxcbl07XG5jb25zdCBfU1RFUF9ESVNQTEFZID0ge1xuICBqb2I6ICAgICAgICAgICAgJ0pvYiBJbnB1dCcsXG4gIGFuYWx5c2lzOiAgICAgICAnSm9iIEFuYWx5c2lzJyxcbiAgY3VzdG9taXphdGlvbnM6ICdDdXN0b21pc2UnLFxuICByZXdyaXRlOiAgICAgICAgJ1Jld3JpdGUgUmV2aWV3JyxcbiAgc3BlbGw6ICAgICAgICAgICdTcGVsbCBDaGVjaycsXG4gIGxheW91dDogICAgICAgICAnTGF5b3V0IFJldmlldycsXG4gIGRvd25sb2FkOiAgICAgICAnRmlsZSBSZXZpZXcnLFxuICBjb3Zlcl9sZXR0ZXI6ICAgJ0NvdmVyIExldHRlcicsXG4gIHNjcmVlbmluZzogICAgICAnU2NyZWVuaW5nJyxcbiAgaW50ZXJ2aWV3X3ByZXA6ICdJbnRlcnZpZXcgUHJlcCcsXG4gIHRoYW5rX3lvdTogICAgICAnVGhhbmsgWW91JyxcbiAgaGFydmVzdDogICAgICAgICdIYXJ2ZXN0Jyxcbn07XG5jb25zdCBfQUNUSU9OX0xBQkVMUyA9IHtcbiAgcmVjb21tZW5kX2N1c3RvbWl6YXRpb25zOiAnU2VsZWN0aW5nIGV4cGVyaWVuY2VzICYgc2tpbGxzXHUyMDI2JyxcbiAgZ2VuZXJhdGVfY3Y6ICdHZW5lcmF0aW5nIENWXHUyMDI2Jyxcbn07XG5cbmNvbnN0IF9OQVZfVEFCX0xBQkVMUyA9IHtcbiAgZG93bmxvYWQ6ICdcdTJCMDdcdUZFMEYgRmlsZSBSZXZpZXcnLFxufTtcblxuZnVuY3Rpb24gYXBwbHlMYXlvdXRGcmVzaG5lc3NOYXZpZ2F0aW9uU3RhdGUoKSB7XG4gIGNvbnN0IGZyZXNobmVzcyA9IHN0YXRlTWFuYWdlci5nZXRMYXlvdXRGcmVzaG5lc3MoKTtcbiAgY29uc3QgZ2VuZXJhdGlvblN0YXRlID0gc3RhdGVNYW5hZ2VyLmdldEdlbmVyYXRpb25TdGF0ZSgpO1xuICBjb25zdCBsYXlvdXRTdGVwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZXAtbGF5b3V0Jyk7XG5cbiAgaWYgKGxheW91dFN0ZXApIHtcbiAgICBsYXlvdXRTdGVwLmNsYXNzTGlzdC5yZW1vdmUoJ3N0YWxlJywgJ3N0YWxlLWNyaXRpY2FsJyk7XG4gICAgY29uc3QgcmVydW4gPSBsYXlvdXRTdGVwLnF1ZXJ5U2VsZWN0b3IoJy5zdGVwLXJlcnVuJyk/Lm91dGVySFRNTCB8fCAnJztcbiAgICBjb25zdCByZWZpbmVCYWRnZSA9IGxheW91dFN0ZXAucXVlcnlTZWxlY3RvcignLnN0ZXAtaW5saW5lLWJhZGdlJyk/Lm91dGVySFRNTCB8fCAnJztcbiAgICBjb25zdCBzdGFsZUJhZGdlID0gZnJlc2huZXNzLmlzU3RhbGVcbiAgICAgID8gJyA8c3BhbiBjbGFzcz1cInN0ZXAtaW5saW5lLWJhZGdlIHN0ZXAtc3RhbGUtYmFkZ2VcIj5PdXRkYXRlZDwvc3Bhbj4nXG4gICAgICA6ICcnO1xuICAgIGlmIChmcmVzaG5lc3MuaXNTdGFsZSkge1xuICAgICAgbGF5b3V0U3RlcC5jbGFzc0xpc3QuYWRkKCdzdGFsZScpO1xuICAgICAgaWYgKGZyZXNobmVzcy5pc0NyaXRpY2FsKSBsYXlvdXRTdGVwLmNsYXNzTGlzdC5hZGQoJ3N0YWxlLWNyaXRpY2FsJyk7XG4gICAgfVxuICAgIGxheW91dFN0ZXAuaW5uZXJIVE1MID0gYFx1RDgzQ1x1REZBOCBMYXlvdXQgUmV2aWV3JHtzdGFsZUJhZGdlfSR7cmVmaW5lQmFkZ2UgPyBgICR7cmVmaW5lQmFkZ2V9YCA6ICcnfSR7cmVydW4gPyBgICR7cmVydW59YCA6ICcnfWA7XG4gIH1cblxuICBjb25zdCBzaG93RG93bnN0cmVhbUJhZGdlID0gZnJlc2huZXNzLmlzU3RhbGUgJiYgQm9vbGVhbihcbiAgICBnZW5lcmF0aW9uU3RhdGUuZmluYWxHZW5lcmF0ZWRBdCB8fCBnZW5lcmF0aW9uU3RhdGUucGhhc2UgPT09ICdmaW5hbF9jb21wbGV0ZSdcbiAgKTtcbiAgT2JqZWN0LmVudHJpZXMoX05BVl9UQUJfTEFCRUxTKS5mb3JFYWNoKChbdGFiLCBsYWJlbF0pID0+IHtcbiAgICBjb25zdCB0YWJFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGB0YWItJHt0YWJ9YCk7XG4gICAgaWYgKCF0YWJFbCkgcmV0dXJuO1xuICAgIHRhYkVsLmNsYXNzTGlzdC5yZW1vdmUoJ3RhYi1zdGFsZScsICd0YWItc3RhbGUtY3JpdGljYWwnKTtcbiAgICBpZiAoc2hvd0Rvd25zdHJlYW1CYWRnZSkge1xuICAgICAgdGFiRWwuY2xhc3NMaXN0LmFkZCgndGFiLXN0YWxlJyk7XG4gICAgICBpZiAoZnJlc2huZXNzLmlzQ3JpdGljYWwpIHRhYkVsLmNsYXNzTGlzdC5hZGQoJ3RhYi1zdGFsZS1jcml0aWNhbCcpO1xuICAgICAgdGFiRWwuaW5uZXJIVE1MID0gYCR7bGFiZWx9IDxzcGFuIGNsYXNzPVwidGFiLXN0YWxlLWJhZGdlXCI+T3V0ZGF0ZWQ8L3NwYW4+YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFiRWwudGV4dENvbnRlbnQgPSBsYWJlbDtcbiAgICB9XG4gIH0pO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgQmFjayB0byBwaGFzZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gYmFja1RvUGhhc2Uoc3RlcCwgZmVlZGJhY2spIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBib2R5ID0gZmVlZGJhY2sgPyB7cGhhc2U6IHN0ZXAsIGZlZWRiYWNrfSA6IHtwaGFzZTogc3RlcH07XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL2JhY2stdG8tcGhhc2UnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmICghcmVzLm9rIHx8ICFkYXRhLm9rKSB7XG4gICAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoJ1x1MjZBMCBDb3VsZCBub3QgbmF2aWdhdGUgYmFjazogJyArIChkYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJyksICgpID0+IGJhY2tUb1BoYXNlKHN0ZXAsIGZlZWRiYWNrKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIGBcdTIxQkIgTmF2aWdhdGluZyBiYWNrIHRvICR7c3RlcH0uIFByaW9yIGRlY2lzaW9ucyBhbmQgYXBwcm92YWxzIGFyZSBwcmVzZXJ2ZWQuYCk7XG4gICAgaWYgKGZlZWRiYWNrKSBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgUmVmaW5lbWVudCBmZWVkYmFjayBxdWV1ZWQ6IFwiJHtmZWVkYmFja31cImApO1xuICAgIGF3YWl0IGZldGNoU3RhdHVzKCk7XG5cbiAgICAvLyBTd2l0Y2ggdG8gdGhlIGFwcHJvcHJpYXRlIHZpZXdlciB0YWJcbiAgICBjb25zdCB0YWJNYXAgPSB7XG4gICAgICBqb2I6ICAgICAgICAgICAgbnVsbCxcbiAgICAgIGFuYWx5c2lzOiAgICAgICAnYW5hbHlzaXMnLFxuICAgICAgY3VzdG9taXphdGlvbnM6ICdnb2FscycsXG4gICAgICByZXdyaXRlOiAgICAgICAgJ3Jld3JpdGUnLFxuICAgICAgc3BlbGw6ICAgICAgICAgICdzcGVsbCcsXG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlZFRhYiA9IHRhYk1hcFtzdGVwXSB8fCB0YWJNYXBbZGF0YS5waGFzZV0gfHwgbnVsbDtcbiAgICBpZiAocmVzb2x2ZWRUYWIpIHN3aXRjaFRhYihyZXNvbHZlZFRhYik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGFwcGVuZFJldHJ5TWVzc2FnZSgnXHUyNkEwIE5ldHdvcmsgZXJyb3IgaW4gYmFja1RvUGhhc2U6ICcgKyBlcnIubWVzc2FnZSwgKCkgPT4gYmFja1RvUGhhc2Uoc3RlcCkpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZS1ydW4gY29uZmlybSBtb2RhbCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBTaG93IGEgZG93bnN0cmVhbS1hd2FyZSBjb25maXJtYXRpb24gbW9kYWwgYmVmb3JlIHJlLXJ1bm5pbmcgb3IgYmFjay1uYXZpZ2F0aW5nLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgc3RlcCAgICAgIC0gVGhlIHRhcmdldCBzdGVwIGtleVxuICogQHBhcmFtIHsncmVydW4nfCdiYWNrLW5hdid9IG1vZGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uQ29uZmlybSAtIENhbGxlZCBpZiB0aGUgdXNlciBjbGlja3MgUHJvY2VlZFxuICovXG5mdW5jdGlvbiBfc2hvd1JlUnVuQ29uZmlybU1vZGFsKHN0ZXAsIG1vZGUsIG9uQ29uZmlybSkge1xuICBjb25zdCBzdGVwSWR4ICAgID0gX1NURVBfT1JERVIuaW5kZXhPZihzdGVwKTtcbiAgLy8gT25seSBzaG93IGRvd25zdHJlYW0gc3RhZ2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGNvbXBsZXRlZFxuICBjb25zdCBkb3duc3RyZWFtID0gX1NURVBfT1JERVIuc2xpY2Uoc3RlcElkeCArIDEpLmZpbHRlcihzID0+IHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzdGVwLSR7c31gKTtcbiAgICByZXR1cm4gZWwgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdjb21wbGV0ZWQnKTtcbiAgfSk7XG4gIGNvbnN0IHN0ZXBMYWJlbCAgPSBfU1RFUF9ESVNQTEFZW3N0ZXBdIHx8IHN0ZXA7XG5cbiAgY29uc3QgdGl0bGUgPSBtb2RlID09PSAncmVydW4nXG4gICAgPyBgXHUyMUJCIFJlLXJ1biAke3N0ZXBMYWJlbH0/YFxuICAgIDogYFx1MjE5MCBOYXZpZ2F0ZSBiYWNrIHRvICR7c3RlcExhYmVsfT9gO1xuICBjb25zdCBib2R5VGV4dCA9IG1vZGUgPT09ICdyZXJ1bidcbiAgICA/ICdUaGUgZm9sbG93aW5nIHN0YWdlcyB3aWxsIHNlZSB1cGRhdGVkIGlucHV0cyBhbmQgbWF5IHNob3cgY2hhbmdlZCByZWNvbW1lbmRhdGlvbnM6J1xuICAgIDogJ1lvdSBhcmUgbmF2aWdhdGluZyBiYWNrIHBhc3QgdGhlIGZvbGxvd2luZyBjb21wbGV0ZWQgc3RhZ2VzOic7XG4gIGNvbnN0IG5vdGUgPSAnQWxsIGV4aXN0aW5nIGFwcHJvdmFscyBhbmQgcmV3cml0ZXMgYXJlIHByZXNlcnZlZCBhcyBjb250ZXh0Lic7XG5cbiAgY29uc3QgbGlzdEh0bWwgPSBkb3duc3RyZWFtXG4gICAgLm1hcChzID0+IGA8bGkgc3R5bGU9XCJwYWRkaW5nOjJweCAwO1wiPiR7X1NURVBfRElTUExBWVtzXSB8fCBzfTwvbGk+YClcbiAgICAuam9pbignJyk7XG5cbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBvdmVybGF5LmlkID0gJ3JlcnVuLWNvbmZpcm0tb3ZlcmxheSc7XG4gIG92ZXJsYXkuc3R5bGUuY3NzVGV4dCA9IGBwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO1xuICAgIHotaW5kZXg6MTAwMDA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2A7XG4gIG92ZXJsYXkuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCIgYXJpYS1sYWJlbGxlZGJ5PVwicmVydW4tY29uZmlybS10aXRsZVwiXG4gICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoyNHB4IDI4cHg7bWF4LXdpZHRoOjQ0MHB4O1xuICAgICAgICAgICAgICAgIHdpZHRoOjkyJTtib3gtc2hhZG93OjAgMjBweCA2MHB4IHJnYmEoMCwwLDAsMC4zKTtcIj5cbiAgICAgIDxoMyBpZD1cInJlcnVuLWNvbmZpcm0tdGl0bGVcIiBzdHlsZT1cIm1hcmdpbjowIDAgMTBweDtmb250LXNpemU6MS4xZW07Y29sb3I6IzFlMjkzYjtcIj5cbiAgICAgICAgJHtlc2NhcGVIdG1sKHRpdGxlKX08L2gzPlxuICAgICAgPHAgc3R5bGU9XCJtYXJnaW46MCAwIDhweDtmb250LXNpemU6MC45ZW07Y29sb3I6IzQ3NTU2OTtcIj4ke2VzY2FwZUh0bWwoYm9keVRleHQpfTwvcD5cbiAgICAgIDx1bCBzdHlsZT1cIm1hcmdpbjowIDAgMTJweDtwYWRkaW5nLWxlZnQ6MjBweDtmb250LXNpemU6MC45ZW07Y29sb3I6IzM3NDE1MTtcIj4ke2xpc3RIdG1sfTwvdWw+XG4gICAgICA8cCBzdHlsZT1cIm1hcmdpbjowIDAgMThweDtmb250LXNpemU6MC44NWVtO2NvbG9yOiM2YjcyODA7XCI+JHtlc2NhcGVIdG1sKG5vdGUpfTwvcD5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO1wiPlxuICAgICAgICA8YnV0dG9uIGlkPVwicmVydW4tY2FuY2VsLWJ0blwiIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGlkPVwicmVydW4tcHJvY2VlZC1idG5cIiBjbGFzcz1cImJ0bi1wcmltYXJ5XCI+UHJvY2VlZDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIGlmICh0eXBlb2YgdHJhcEZvY3VzID09PSAnZnVuY3Rpb24nKSB0cmFwRm9jdXMoJ3JlcnVuLWNvbmZpcm0tb3ZlcmxheScpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVydW4tcHJvY2VlZC1idG4nKS5mb2N1cygpO1xuXG4gIGNvbnN0IGNsb3NlID0gKCkgPT4geyBvdmVybGF5LnJlbW92ZSgpOyByZXN0b3JlRm9jdXMoKTsgfTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcnVuLWNhbmNlbC1idG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcnVuLXByb2NlZWQtYnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7IGNsb3NlKCk7IG9uQ29uZmlybSgpOyB9KTtcbiAgb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4geyBpZiAoZS50YXJnZXQgPT09IG92ZXJsYXkpIGNsb3NlKCk7IH0pO1xuICBvdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBlID0+IHsgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgY2xvc2UoKTsgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbmZpcm1SZVJ1blBoYXNlKHN0ZXApIHtcbiAgX3Nob3dSZVJ1bkNvbmZpcm1Nb2RhbChzdGVwLCAncmVydW4nLCAoKSA9PiBiYWNrVG9QaGFzZShzdGVwKSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBWaWV3LWN1cnNvciBpbmRpY2F0b3IgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKlxuICogUmV0dXJuIGEgdG9vbHRpcCBzdHJpbmcgZm9yIGEgc3RlcCBwaWxsIGJhc2VkIG9uIGl0cyBjb21iaW5lZCBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gX2dldFN0ZXBUb29sdGlwKHN0ZXAsIGlzQWN0aXZlLCBpc1ZpZXdpbmcsIGlzQnJvd3NpbmdBd2F5LCBpc0NvbXBsZXRlZCwgaXNTdGFsZSwgaXNTdGFsZUNyaXRpY2FsKSB7XG4gIGlmIChpc1N0YWxlQ3JpdGljYWwpIHJldHVybiBpc1ZpZXdpbmcgPyAnQ3JpdGljYWwgY2hhbmdlcyBcdTIwMTQgcmV2aWV3IHJlcXVpcmVkLiBDbGljayBcdTIxQkIgdG8gcmVydW4uJyA6ICdDcml0aWNhbCBjaGFuZ2VzIFx1MjAxNCByZXZpZXcgcmVxdWlyZWQuJztcbiAgaWYgKGlzU3RhbGUpICAgICAgICAgcmV0dXJuIGlzVmlld2luZyA/ICdSZXN1bHRzIG1heSBiZSBvdXRkYXRlZC4gQ2xpY2sgXHUyMUJCIHRvIHJlcnVuLicgICAgICAgICAgIDogJ1Jlc3VsdHMgbWF5IGJlIG91dGRhdGVkLic7XG4gIGlmIChpc0Jyb3dzaW5nQXdheSkgIHJldHVybiAnQWN0aXZlIHN0ZXAgXHUyMDE0IGNsaWNrIHRvIHJldHVybic7XG4gIGlmIChpc0FjdGl2ZSAmJiBpc1ZpZXdpbmcpICAgIHJldHVybiAnQ3VycmVudCBzdGVwJztcbiAgaWYgKGlzQ29tcGxldGVkICYmIGlzVmlld2luZykgcmV0dXJuICdDbGljayBcdTIxQkIgdG8gcmVydW4gZnJvbSBoZXJlJztcbiAgaWYgKGlzQ29tcGxldGVkKSAgICAgICAgICAgICAgcmV0dXJuICdDbGljayB0byB2aWV3JztcbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIFN5bmMgdGhlIGJsdWUgcmluZyAodmlldyBjdXJzb3IpIGFuZCBhbWJlciBwdWxzaW5nIHJpbmcgKGJyb3dzaW5nLWF3YXkpXG4gKiB0byB0aGUgY3VycmVudGx5IHZpc2libGUgdGFiLiBDYWxsZWQgYWZ0ZXIgZXZlcnkgdGFiIHN3aXRjaCBhbmQgc3RhdHVzIHVwZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWJOYW1lIC0gVGhlIGN1cnJlbnRseSB2aXNpYmxlIHRhYiBpZCAoZS5nLiAnYW5hbHlzaXMnLCAnZXhwLXJldmlldycpXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVWaWV3aW5nSW5kaWNhdG9yKHRhYk5hbWUpIHtcbiAgY29uc3QgdGFiVG9TdGVwID0ge1xuICAgICdqb2InOiAgICAgICAgICAgJ2pvYicsXG4gICAgJ2FuYWx5c2lzJzogICAgICAnYW5hbHlzaXMnLFxuICAgICdxdWVzdGlvbnMnOiAgICAgJ2FuYWx5c2lzJyxcbiAgICAnZXhwLXJldmlldyc6ICAgICdjdXN0b21pemF0aW9ucycsXG4gICAgJ3Jld3JpdGUnOiAgICAgICAncmV3cml0ZScsXG4gICAgJ3NwZWxsJzogICAgICAgICAnc3BlbGwnLFxuICAgICdsYXlvdXQnOiAgICAgICAgJ2xheW91dCcsXG4gICAgJ2ZpbmFsX2dlbmVyYXRlJzonZG93bmxvYWQnLFxuICAgICdkb3dubG9hZCc6ICAgICAgJ2Rvd25sb2FkJyxcbiAgICAnY292ZXItbGV0dGVyJzogICdjb3Zlcl9sZXR0ZXInLFxuICAgICdzY3JlZW5pbmcnOiAgICAgJ3NjcmVlbmluZycsXG4gICAgJ2ludGVydmlldy1wcmVwJzonaW50ZXJ2aWV3X3ByZXAnLFxuICAgICd0aGFuay15b3UnOiAgICAgJ3RoYW5rX3lvdScsXG4gICAgJ2hhcnZlc3QnOiAgICAgICAnaGFydmVzdCcsXG4gIH07XG4gIGNvbnN0IHZpZXdlZFN0ZXAgPSB0YWJUb1N0ZXBbdGFiTmFtZV0gfHwgbnVsbDtcblxuICBsZXQgYWN0aXZlU3RlcCA9IG51bGw7XG4gIF9TVEVQX09SREVSLmZvckVhY2goc3RlcCA9PiB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc3RlcC0ke3N0ZXB9YCk7XG4gICAgaWYgKGVsICYmIGVsLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIGFjdGl2ZVN0ZXAgPSBzdGVwO1xuICB9KTtcblxuICBfU1RFUF9PUkRFUi5mb3JFYWNoKHN0ZXAgPT4ge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHN0ZXAtJHtzdGVwfWApO1xuICAgIGlmICghZWwpIHJldHVybjtcblxuICAgIGNvbnN0IGlzVmlld2luZyAgICAgID0gc3RlcCA9PT0gdmlld2VkU3RlcDtcbiAgICBjb25zdCBpc0FjdGl2ZSAgICAgICA9IHN0ZXAgPT09IGFjdGl2ZVN0ZXA7XG4gICAgY29uc3QgaXNCcm93c2luZ0F3YXkgPSBpc0FjdGl2ZSAmJiAhIXZpZXdlZFN0ZXAgJiYgdmlld2VkU3RlcCAhPT0gYWN0aXZlU3RlcDtcbiAgICBjb25zdCBpc0NvbXBsZXRlZCAgICA9IGVsLmNsYXNzTGlzdC5jb250YWlucygnY29tcGxldGVkJyk7XG4gICAgY29uc3QgaXNTdGFsZSAgICAgICAgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoJ3N0YWxlJyk7XG4gICAgY29uc3QgaXNTdGFsZUNyaXRpY2FsID0gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdzdGFsZS1jcml0aWNhbCcpO1xuXG4gICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgndmlld2luZycsICAgICAgIGlzVmlld2luZyk7XG4gICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnYnJvd3NpbmctYXdheScsIGlzQnJvd3NpbmdBd2F5KTtcblxuICAgIGNvbnN0IHRvb2x0aXBUZXh0ID0gX2dldFN0ZXBUb29sdGlwKHN0ZXAsIGlzQWN0aXZlLCBpc1ZpZXdpbmcsIGlzQnJvd3NpbmdBd2F5LCBpc0NvbXBsZXRlZCwgaXNTdGFsZSwgaXNTdGFsZUNyaXRpY2FsKTtcbiAgICBpZiAodG9vbHRpcFRleHQpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS1icy10b2dnbGUnLCAgICAndG9vbHRpcCcpO1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXBsYWNlbWVudCcsICdib3R0b20nKTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS1icy10aXRsZScsICAgICB0b29sdGlwVGV4dCk7XG4gICAgICBpZiAodHlwZW9mIGJvb3RzdHJhcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc3QgdGlwID0gYm9vdHN0cmFwLlRvb2x0aXAuZ2V0SW5zdGFuY2UoZWwpO1xuICAgICAgICBpZiAodGlwKSB0aXAuc2V0Q29udGVudCh7ICcudG9vbHRpcC1pbm5lcic6IHRvb2x0aXBUZXh0IH0pO1xuICAgICAgICBlbHNlICAgICBuZXcgYm9vdHN0cmFwLlRvb2x0aXAoZWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtYnMtdG9nZ2xlJyk7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtYnMtdGl0bGUnKTtcbiAgICAgIGlmICh0eXBlb2YgYm9vdHN0cmFwICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zdCB0aXAgPSBib290c3RyYXAuVG9vbHRpcC5nZXRJbnN0YW5jZShlbCk7XG4gICAgICAgIGlmICh0aXApIHRpcC5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFJlLXJ1biBwaGFzZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBTaG93IGFuIGFtZW5kLWNsYXJpZmljYXRpb25zIG1vZGFsIGJlZm9yZSByZS1ydW5uaW5nIHRoZSBhbmFseXNpcyBwaGFzZS5cbiAqIENhbGxzIG9uUHJvY2VlZCgpIGlmIHRoZSB1c2VyIGNvbmZpcm1zICh3aXRoIG9yIHdpdGhvdXQgdXBkYXRpbmcgYW5zd2VycykuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIF9zaG93QW5hbHlzaXNDbGFyaWZpY2F0aW9uQW1lbmRNb2RhbChvblByb2NlZWQpIHtcbiAgY29uc3QgcXVlc3Rpb25zID0gd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyB8fCBbXTtcbiAgY29uc3QgYW5zd2VycyAgID0gd2luZG93LnF1ZXN0aW9uQW5zd2VycyB8fCB7fTtcblxuICAvLyBObyBwcmlvciBxdWVzdGlvbnMgXHUyMDE0IHNraXAgdGhlIG1vZGFsIGFuZCBwcm9jZWVkIGRpcmVjdGx5LlxuICBpZiAoIXF1ZXN0aW9ucy5sZW5ndGgpIHsgYXdhaXQgb25Qcm9jZWVkKCk7IHJldHVybjsgfVxuXG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgb3ZlcmxheS5pZCA9ICdjbGFyLWFtZW5kLW92ZXJsYXknO1xuICBvdmVybGF5LnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC41KTt6LWluZGV4OjEwMDAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtvdmVyZmxvdy15OmF1dG87JztcblxuICBjb25zdCBmb3JtUm93cyA9IHF1ZXN0aW9ucy5tYXAoKHEsIGkpID0+IHtcbiAgICBjb25zdCBxdHlwZSAgPSBxLnR5cGUgfHwgYGNsYXJpZmljYXRpb25fJHtpICsgMX1gO1xuICAgIGNvbnN0IHF0ZXh0ICA9IGVzY2FwZUh0bWwocS5xdWVzdGlvbiB8fCAnJyk7XG4gICAgY29uc3QgY3VyQW5zID0gZXNjYXBlSHRtbChhbnN3ZXJzW3F0eXBlXSB8fCAnJyk7XG4gICAgY29uc3QgY2hvaWNlcyA9IEFycmF5LmlzQXJyYXkocS5jaG9pY2VzKSA/IHEuY2hvaWNlcyA6IFtdO1xuXG4gICAgaWYgKGNob2ljZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCByYWRpb3MgPSBjaG9pY2VzLm1hcChjID0+IGBcbiAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O21hcmdpbi1ib3R0b206NHB4O2N1cnNvcjpwb2ludGVyO1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiY2xhci0ke2VzY2FwZUh0bWwocXR5cGUpfVwiIHZhbHVlPVwiJHtlc2NhcGVIdG1sKGMpfVwiXG4gICAgICAgICAgICAke2Fuc3dlcnNbcXR5cGVdID09PSBjID8gJ2NoZWNrZWQnIDogJyd9IHN0eWxlPVwiZmxleC1zaHJpbms6MDtcIj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjllbTtcIj4ke2VzY2FwZUh0bWwoYyl9PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPmApLmpvaW4oJycpO1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjAuOWVtO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo2cHg7XCI+JHtxdGV4dH08L2xhYmVsPlxuICAgICAgICAgICR7cmFkaW9zfVxuICAgICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gYFxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImNsYXItYW5zLSR7ZXNjYXBlSHRtbChxdHlwZSl9XCIgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjAuOWVtO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7XCI+JHtxdGV4dH08L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgaWQ9XCJjbGFyLWFucy0ke2VzY2FwZUh0bWwocXR5cGUpfVwiIG5hbWU9XCJjbGFyLSR7ZXNjYXBlSHRtbChxdHlwZSl9XCIgcm93cz1cIjJcIlxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MC45ZW07cmVzaXplOnZlcnRpY2FsO1wiXG4gICAgICAgID4ke2N1ckFuc308L3RleHRhcmVhPlxuICAgICAgPC9kaXY+YDtcbiAgfSkuam9pbignJyk7XG5cbiAgb3ZlcmxheS5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBhcmlhLWxhYmVsbGVkYnk9XCJjbGFyLWFtZW5kLXRpdGxlXCJcbiAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjI0cHggMjhweDttYXgtd2lkdGg6NTAwcHg7d2lkdGg6OTQlO1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6MCAyMHB4IDYwcHggcmdiYSgwLDAsMCwwLjMpO21hcmdpbjoyMHB4IGF1dG87XCI+XG4gICAgICA8aDMgaWQ9XCJjbGFyLWFtZW5kLXRpdGxlXCIgc3R5bGU9XCJtYXJnaW46MCAwIDZweDtmb250LXNpemU6MS4xZW07Y29sb3I6IzFlMjkzYjtcIj5cdTIxQkIgQW1lbmQgQ2xhcmlmaWNhdGlvbiBBbnN3ZXJzPC9oMz5cbiAgICAgIDxwIHN0eWxlPVwibWFyZ2luOjAgMCAxNnB4O2ZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzZiNzI4MDtcIj5cbiAgICAgICAgVXBkYXRlIHlvdXIgYW5zd2VycyBiZWZvcmUgcmVydW5uaW5nIGFuYWx5c2lzLCBvciBrZWVwIHRoZW0gYXMtaXMuXG4gICAgICA8L3A+XG4gICAgICA8Zm9ybSBpZD1cImNsYXItYW1lbmQtZm9ybVwiIG9uc3VibWl0PVwicmV0dXJuIGZhbHNlO1wiPlxuICAgICAgICAke2Zvcm1Sb3dzfVxuICAgICAgPC9mb3JtPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6MTBweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luLXRvcDo4cHg7ZmxleC13cmFwOndyYXA7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJjbGFyLWFtZW5kLWNhbmNlbFwiIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGlkPVwiY2xhci1hbWVuZC1rZWVwXCIgICBjbGFzcz1cImJ0bi1zZWNvbmRhcnlcIj5LZWVwIEV4aXN0aW5nIEFuc3dlcnM8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImNsYXItYW1lbmQtc2F2ZVwiICAgY2xhc3M9XCJidG4tcHJpbWFyeVwiPlVwZGF0ZSAmYW1wOyBSZXJ1bjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICBpZiAodHlwZW9mIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsICE9PSAndW5kZWZpbmVkJykgd2luZG93Ll9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgaWYgKHR5cGVvZiB0cmFwRm9jdXMgPT09ICdmdW5jdGlvbicpIHRyYXBGb2N1cygnY2xhci1hbWVuZC1vdmVybGF5Jyk7XG4gIG92ZXJsYXkucXVlcnlTZWxlY3RvcignI2NsYXItYW1lbmQtc2F2ZScpLmZvY3VzKCk7XG5cbiAgZnVuY3Rpb24gY2xvc2VNb2RhbCgpIHtcbiAgICBvdmVybGF5LnJlbW92ZSgpO1xuICAgIGlmICh0eXBlb2YgcmVzdG9yZUZvY3VzID09PSAnZnVuY3Rpb24nKSByZXN0b3JlRm9jdXMoKTtcbiAgfVxuXG4gIG92ZXJsYXkucXVlcnlTZWxlY3RvcignI2NsYXItYW1lbmQtY2FuY2VsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZU1vZGFsKTtcbiAgb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4geyBpZiAoZS50YXJnZXQgPT09IG92ZXJsYXkpIGNsb3NlTW9kYWwoKTsgfSk7XG4gIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGUgPT4geyBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBjbG9zZU1vZGFsKCk7IH0pO1xuXG4gIG92ZXJsYXkucXVlcnlTZWxlY3RvcignI2NsYXItYW1lbmQta2VlcCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGNsb3NlTW9kYWwoKTtcbiAgICBvblByb2NlZWQoKTtcbiAgfSk7XG5cbiAgb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcjY2xhci1hbWVuZC1zYXZlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZm9ybSAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGFyLWFtZW5kLWZvcm0nKTtcbiAgICBjb25zdCB1cGRhdGVkID0ge307XG4gICAgcXVlc3Rpb25zLmZvckVhY2goKHEsIGkpID0+IHtcbiAgICAgIGNvbnN0IHF0eXBlID0gcS50eXBlIHx8IGBjbGFyaWZpY2F0aW9uXyR7aSArIDF9YDtcbiAgICAgIGNvbnN0IGVsICAgID0gZm9ybS5xdWVyeVNlbGVjdG9yKGBbbmFtZT1cImNsYXItJHtxdHlwZX1cIl1gKTtcbiAgICAgIGlmICghZWwpIHJldHVybjtcbiAgICAgIGlmIChlbC50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoYFtuYW1lPVwiY2xhci0ke3F0eXBlfVwiXTpjaGVja2VkYCk7XG4gICAgICAgIGlmIChjaGVja2VkKSB1cGRhdGVkW3F0eXBlXSA9IGNoZWNrZWQudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWwgPSBlbC52YWx1ZS50cmltKCk7XG4gICAgICAgIGlmICh2YWwpIHVwZGF0ZWRbcXR5cGVdID0gdmFsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY2xvc2VNb2RhbCgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmZXRjaCgnL2FwaS9wb3N0LWFuYWx5c2lzLXJlc3BvbnNlcycsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHF1ZXN0aW9ucywgYW5zd2VyczogdXBkYXRlZCB9KSxcbiAgICAgIH0pO1xuICAgICAgd2luZG93LnF1ZXN0aW9uQW5zd2VycyA9IHVwZGF0ZWQ7XG4gICAgfSBjYXRjaCAoX2UpIHsgLyogc2lsZW50IFx1MjAxNCBwcm9jZWVkIHdpdGggd2hhdGV2ZXIgdGhlIGJhY2tlbmQgYWxyZWFkeSBoYXMgKi8gfVxuICAgIGF3YWl0IG9uUHJvY2VlZCgpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVSdW5QaGFzZShzdGVwKSB7XG4gIC8vIEludGVyY2VwdCBhbmFseXNpcyByZXJ1bnMgdG8gbGV0IHRoZSB1c2VyIGFtZW5kIHByaW9yIGNsYXJpZmljYXRpb24gYW5zd2Vycy5cbiAgaWYgKHN0ZXAgPT09ICdhbmFseXNpcycpIHtcbiAgICBhd2FpdCBfc2hvd0FuYWx5c2lzQ2xhcmlmaWNhdGlvbkFtZW5kTW9kYWwoKCkgPT4gX2V4ZWN1dGVSZVJ1blBoYXNlKCdhbmFseXNpcycpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgX2V4ZWN1dGVSZVJ1blBoYXNlKHN0ZXApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfZXhlY3V0ZVJlUnVuUGhhc2Uoc3RlcCkge1xuICBjb25zdCBsb2FkaW5nTXNnID0gYXBwZW5kTG9hZGluZ01lc3NhZ2UoYFx1MjFCQiBSZS1ydW5uaW5nICR7c3RlcH1cdTIwMjZgKTtcbiAgc2V0TG9hZGluZyh0cnVlLCBgUmUtcnVubmluZyAke3N0ZXB9XHUyMDI2YCk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3JlLXJ1bi1waGFzZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe3BoYXNlOiBzdGVwfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgcmVtb3ZlTG9hZGluZ01lc3NhZ2UobG9hZGluZ01zZyk7XG4gICAgc2V0TG9hZGluZyhmYWxzZSk7XG5cbiAgICBpZiAoIXJlcy5vayB8fCAhZGF0YS5vaykge1xuICAgICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI2QTAgUmUtcnVuIGZhaWxlZDogJyArIChkYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJyksICgpID0+IHJlUnVuUGhhc2Uoc3RlcCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIGBcdTI3MDUgJHtzdGVwfSByZS1ydW4gY29tcGxldGUuIFJldmlldyB0aGUgdXBkYXRlZCByZXN1bHRzIFx1MjAxNCBjaGFuZ2VkIGl0ZW1zIGFyZSBoaWdobGlnaHRlZC5gKTtcbiAgICBhd2FpdCBmZXRjaFN0YXR1cygpO1xuXG4gICAgLy8gQ2xlYXIgcGVyLXBoYXNlIGNhY2hlcyBzbyBiYWNrLW5hdmlnYXRpb24gZmV0Y2hlcyBmcmVzaCByZXN1bHRzXG4gICAgaWYgKHN0ZXAgPT09ICdzcGVsbCcpICAgd2luZG93Ll9zcGVsbENoZWNrQ2FjaGUgID0gbnVsbDtcbiAgICBpZiAoc3RlcCA9PT0gJ3Jld3JpdGUnKSB3aW5kb3cuX3Jld3JpdGVQYW5lbENhY2hlID0gbnVsbDtcblxuICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBzdGVwJ3Mgdmlld2VyIHRhYlxuICAgIGNvbnN0IHRhYk1hcCA9IHtcbiAgICAgIGFuYWx5c2lzOiAgICAgICAnYW5hbHlzaXMnLFxuICAgICAgY3VzdG9taXphdGlvbnM6ICdnb2FscycsXG4gICAgICByZXdyaXRlOiAgICAgICAgJ3Jld3JpdGUnLFxuICAgICAgc3BlbGw6ICAgICAgICAgICdzcGVsbCcsXG4gICAgfTtcbiAgICBpZiAodGFiTWFwW3N0ZXBdKSBzd2l0Y2hUYWIodGFiTWFwW3N0ZXBdKTtcblxuICAgIC8vIENvbXB1dGUgY2hhbmdlZC1pdGVtIElEcyBmcm9tIHByaW9yIHZzIG5ldyBvdXRwdXQgYW5kIGhpZ2hsaWdodCB0aGVtLlxuICAgIGlmIChkYXRhLnByaW9yX291dHB1dCAmJiBkYXRhLm5ld19vdXRwdXQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gX2hpZ2hsaWdodENoYW5nZWRJdGVtcyhzdGVwLCBkYXRhLnByaW9yX291dHB1dCwgZGF0YS5uZXdfb3V0cHV0KSwgMzAwKTtcbiAgICB9XG5cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmVtb3ZlTG9hZGluZ01lc3NhZ2UobG9hZGluZ01zZyk7XG4gICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI2QTAgTmV0d29yayBlcnJvciBpbiByZVJ1blBoYXNlOiAnICsgZXJyLm1lc3NhZ2UsICgpID0+IHJlUnVuUGhhc2Uoc3RlcCkpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBIaWdobGlnaHQgY2hhbmdlZCBpdGVtcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBDb21wYXJlIHByaW9yIGFuZCBuZXcgcmUtcnVuIG91dHB1dHM7IG1hcmsgRE9NIGVsZW1lbnRzIGZvciBjaGFuZ2VkIGVudGl0aWVzLlxuICpcbiAqIFN0cmF0ZWdpZXMgYnkgc3RlcDpcbiAqICAgcmV3cml0ZSAgICAgICAgXHUyMDE0IGNvbXBhcmUgcmV3cml0ZSBJRHM7IG1hcmsgcnctY2FyZC08aWQ+XG4gKiAgIGN1c3RvbWl6YXRpb25zIFx1MjAxNCBjb21wYXJlIGV4cGVyaWVuY2UgSURzOyBtYXJrIHRyW2RhdGEtZXhwLWlkXSBhbmQgdHJbZGF0YS1za2lsbF1cbiAqICAgYW5hbHlzaXMgICAgICAgXHUyMDE0IG5vIHBlci1lbnRpdHkgRE9NIHRhcmdldGluZzsgc2tpcFxuICovXG5mdW5jdGlvbiBfaGlnaGxpZ2h0Q2hhbmdlZEl0ZW1zKHN0ZXAsIHByaW9yT3V0cHV0LCBuZXdPdXRwdXQpIHtcbiAgaWYgKHN0ZXAgPT09ICdyZXdyaXRlJykge1xuICAgIGNvbnN0IHByaW9ySWRzID0gbmV3IFNldCgocHJpb3JPdXRwdXQucGVuZGluZ19yZXdyaXRlcyB8fCBbXSkubWFwKHIgPT4gU3RyaW5nKHIuaWQpKSk7XG4gICAgY29uc3QgbmV3SXRlbXMgID0gbmV3T3V0cHV0LnBlbmRpbmdfcmV3cml0ZXMgIHx8IFtdO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBuZXdJdGVtcykge1xuICAgICAgY29uc3QgaWQgICAgICA9IFN0cmluZyhpdGVtLmlkIHx8ICcnKTtcbiAgICAgIGNvbnN0IGNhcmRJZCAgPSBpZC5yZXBsYWNlKC9bXmEtekEtWjAtOV8tXS9nLCAnXycpO1xuICAgICAgY29uc3QgZWwgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBydy1jYXJkLSR7Y2FyZElkfWApO1xuICAgICAgaWYgKCFlbCkgY29udGludWU7XG4gICAgICBjb25zdCBpc05ldyAgICAgPSAhcHJpb3JJZHMuaGFzKGlkKTtcbiAgICAgIGNvbnN0IHByaW9ySXRlbSA9IChwcmlvck91dHB1dC5wZW5kaW5nX3Jld3JpdGVzIHx8IFtdKS5maW5kKHIgPT4gU3RyaW5nKHIuaWQpID09PSBpZCk7XG4gICAgICBjb25zdCBjaGFuZ2VkICAgPSBpc05ldyB8fCAocHJpb3JJdGVtICYmIHByaW9ySXRlbS5wcm9wb3NlZCAhPT0gaXRlbS5wcm9wb3NlZCk7XG4gICAgICBpZiAoY2hhbmdlZCkgX21hcmtDaGFuZ2VkKGVsKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHN0ZXAgPT09ICdjdXN0b21pemF0aW9ucycpIHtcbiAgICBjb25zdCBwcmlvckV4cElkcyA9IG5ldyBTZXQoXG4gICAgICAocHJpb3JPdXRwdXQuY3VzdG9taXphdGlvbnM/LmV4cGVyaWVuY2VfcmVjb21tZW5kYXRpb25zIHx8IFtdKS5tYXAociA9PiBTdHJpbmcoci5pZCkpXG4gICAgKTtcbiAgICBjb25zdCBuZXdFeHBSZWNzICA9IG5ld091dHB1dC5jdXN0b21pemF0aW9ucz8uZXhwZXJpZW5jZV9yZWNvbW1lbmRhdGlvbnMgfHwgW107XG4gICAgZm9yIChjb25zdCByZWMgb2YgbmV3RXhwUmVjcykge1xuICAgICAgY29uc3QgaWQgICA9IFN0cmluZyhyZWMuaWQgfHwgJycpO1xuICAgICAgY29uc3QgZWwgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHRyW2RhdGEtZXhwLWlkPVwiJHtDU1MuZXNjYXBlKGlkKX1cIl1gKTtcbiAgICAgIGlmICghZWwpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgcHJpb3IgPSAocHJpb3JPdXRwdXQuY3VzdG9taXphdGlvbnM/LmV4cGVyaWVuY2VfcmVjb21tZW5kYXRpb25zIHx8IFtdKS5maW5kKHIgPT4gU3RyaW5nKHIuaWQpID09PSBpZCk7XG4gICAgICBpZiAoIXByaW9yRXhwSWRzLmhhcyhpZCkgfHwgKHByaW9yICYmIHByaW9yLnJlY29tbWVuZGF0aW9uICE9PSByZWMucmVjb21tZW5kYXRpb24pKSB7XG4gICAgICAgIF9tYXJrQ2hhbmdlZChlbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJpb3JTa2lsbHMgPSBuZXcgU2V0KFxuICAgICAgKHByaW9yT3V0cHV0LmN1c3RvbWl6YXRpb25zPy5za2lsbF9yZWNvbW1lbmRhdGlvbnMgfHwgW10pLm1hcChyID0+IChyLnNraWxsIHx8ICcnKS50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gICAgY29uc3QgbmV3U2tpbGxSZWNzID0gbmV3T3V0cHV0LmN1c3RvbWl6YXRpb25zPy5za2lsbF9yZWNvbW1lbmRhdGlvbnMgfHwgW107XG4gICAgZm9yIChjb25zdCByZWMgb2YgbmV3U2tpbGxSZWNzKSB7XG4gICAgICBjb25zdCBuYW1lID0gKHJlYy5za2lsbCB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGVsICAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGB0cltkYXRhLXNraWxsPVwiJHtDU1MuZXNjYXBlKG5hbWUpfVwiXWApO1xuICAgICAgaWYgKCFlbCkgY29udGludWU7XG4gICAgICBjb25zdCBwcmlvciA9IChwcmlvck91dHB1dC5jdXN0b21pemF0aW9ucz8uc2tpbGxfcmVjb21tZW5kYXRpb25zIHx8IFtdKS5maW5kKFxuICAgICAgICByID0+IChyLnNraWxsIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSBuYW1lXG4gICAgICApO1xuICAgICAgaWYgKCFwcmlvclNraWxscy5oYXMobmFtZSkgfHwgKHByaW9yICYmIHByaW9yLnJlY29tbWVuZGF0aW9uICE9PSByZWMucmVjb21tZW5kYXRpb24pKSB7XG4gICAgICAgIF9tYXJrQ2hhbmdlZChlbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxufVxuXG4vKiogQXBwbHkgZGF0YS1jaGFuZ2VkIGF0dHJpYnV0ZSBhbmQgdHJpZ2dlciBoaWdobGlnaHQgYW5pbWF0aW9uIG9uIGFuIGVsZW1lbnQuICovXG5mdW5jdGlvbiBfbWFya0NoYW5nZWQoZWwpIHtcbiAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLWNoYW5nZWQnLCAndHJ1ZScpO1xuICAvLyBSZW1vdmUgdGhlIGF0dHJpYnV0ZSBhZnRlciB0aGUgYW5pbWF0aW9uIGNvbXBsZXRlcyBzbyBpdCBjYW4gYmUgcmUtdHJpZ2dlcmVkIG9uIGEgc2Vjb25kIHJlcnVuLlxuICBzZXRUaW1lb3V0KCgpID0+IGVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1jaGFuZ2VkJyksIDI1MDApO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgQnVsbGV0IHJlb3JkZXIgbW9kYWwgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dCdWxsZXRSZW9yZGVyKGV4cElkLCBleHBUaXRsZSkge1xuICAvLyBGZXRjaCBhY2hpZXZlbWVudHMgKHJlcXVpcmVkKSBhbmQgc3VnZ2VzdGVkIG9yZGVyIChiZXN0LWVmZm9ydCkuXG4gIGxldCBhY2hpZXZlbWVudHMgPSBbXTtcbiAgbGV0IHByb3Bvc2VkT3JkZXIgPSBudWxsO1xuICBsZXQgaGFzSm9iQW5hbHlzaXMgPSBmYWxzZTtcbiAgbGV0IHByb3Bvc2VkUmVhc29uaW5nID0gJyc7XG4gIGxldCBwcm9wb3NlZEF0c0ltcGFjdCA9ICcnO1xuICBsZXQgcHJvcG9zZWRQYWdlSW1wYWN0ID0gJyc7XG4gIHRyeSB7XG4gICAgY29uc3QgZGV0YWlsc1JlcyA9IGF3YWl0IGZldGNoKCcvYXBpL2V4cGVyaWVuY2UtZGV0YWlscycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb24nfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtleHBlcmllbmNlX2lkOiBleHBJZH0pLFxuICAgIH0pO1xuICAgIGlmICghZGV0YWlsc1Jlcy5vaykge1xuICAgICAgbGV0IGRldGFpbHNFcnIgPSBgSFRUUCAke2RldGFpbHNSZXMuc3RhdHVzfWA7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgZGV0YWlsc1Jlcy5qc29uKCk7XG4gICAgICAgIGRldGFpbHNFcnIgPSBwYXlsb2FkLmVycm9yIHx8IHBheWxvYWQubWVzc2FnZSB8fCBkZXRhaWxzRXJyO1xuICAgICAgfSBjYXRjaCAoXykgeyAvKiBrZWVwIHN0YXR1cy1iYXNlZCBlcnJvciAqLyB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZGV0YWlsc0Vycik7XG4gICAgfVxuXG4gICAgY29uc3QgZGV0YWlsc0RhdGEgPSBhd2FpdCBkZXRhaWxzUmVzLmpzb24oKTtcbiAgICBhY2hpZXZlbWVudHMgID0gKGRldGFpbHNEYXRhLmV4cGVyaWVuY2UgJiYgZGV0YWlsc0RhdGEuZXhwZXJpZW5jZS5hY2hpZXZlbWVudHMpIHx8IFtdO1xuXG4gICAgY29uc3QgcmVjUmVjb3JkID0gX2ZpbmRFeHBlcmllbmNlUmVjb21tZW5kYXRpb25SZWNvcmQoZXhwSWQpO1xuICAgIGNvbnN0IGxsbUJ1bGxldE9yZGVyID0gcmVjUmVjb3JkICYmIHR5cGVvZiByZWNSZWNvcmQuYnVsbGV0X29yZGVyID09PSAnb2JqZWN0J1xuICAgICAgPyByZWNSZWNvcmQuYnVsbGV0X29yZGVyXG4gICAgICA6IG51bGw7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGxtQnVsbGV0T3JkZXI/Lm9yZGVyKSAmJiBsbG1CdWxsZXRPcmRlci5vcmRlci5sZW5ndGggPiAxKSB7XG4gICAgICBwcm9wb3NlZE9yZGVyID0gbGxtQnVsbGV0T3JkZXIub3JkZXI7XG4gICAgICBoYXNKb2JBbmFseXNpcyA9IHRydWU7XG4gICAgICBwcm9wb3NlZFJlYXNvbmluZyA9IFN0cmluZyhsbG1CdWxsZXRPcmRlci5yZWFzb25pbmcgfHwgJycpLnRyaW0oKTtcbiAgICAgIHByb3Bvc2VkQXRzSW1wYWN0ID0gU3RyaW5nKGxsbUJ1bGxldE9yZGVyLmF0c19pbXBhY3QgfHwgJycpLnRyaW0oKTtcbiAgICAgIHByb3Bvc2VkUGFnZUltcGFjdCA9IFN0cmluZyhsbG1CdWxsZXRPcmRlci5wYWdlX2xlbmd0aF9pbXBhY3QgfHwgJycpLnRyaW0oKTtcbiAgICB9XG5cbiAgICAvLyBTdWdnZXN0ZWQgb3JkZXIgaXMgb3B0aW9uYWw7IGZhaWx1cmVzIHNob3VsZCBub3QgYmxvY2sgb3BlbmluZyB0aGUgbW9kYWwuXG4gICAgaWYgKCFwcm9wb3NlZE9yZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9wb3NlZFJlcyA9IGF3YWl0IGZldGNoKGAvYXBpL3Byb3Bvc2VkLWJ1bGxldC1vcmRlcj9leHBlcmllbmNlX2lkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGV4cElkKX1gKTtcbiAgICAgICAgaWYgKHByb3Bvc2VkUmVzLm9rKSB7XG4gICAgICAgICAgY29uc3QgcHJvcG9zZWREYXRhID0gYXdhaXQgcHJvcG9zZWRSZXMuanNvbigpO1xuICAgICAgICAgIHByb3Bvc2VkT3JkZXIgPSBwcm9wb3NlZERhdGEucHJvcG9zZWRfb3JkZXIgfHwgbnVsbDtcbiAgICAgICAgICBoYXNKb2JBbmFseXNpcyA9IHByb3Bvc2VkRGF0YS5oYXNfam9iX2FuYWx5c2lzIHx8IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy53YXJuKCdDb3VsZCBub3QgbG9hZCBzdWdnZXN0ZWQgYnVsbGV0IG9yZGVyOicsIHByb3Bvc2VkUmVzLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLndhcm4oJ0NvdWxkIG5vdCBsb2FkIHN1Z2dlc3RlZCBidWxsZXQgb3JkZXI6JywgZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgZXJyb3JUZXh0ID0gZS5tZXNzYWdlID09PSAnRmFpbGVkIHRvIGZldGNoJ1xuICAgICAgPyAnRmFpbGVkIHRvIGZldGNoIChzZXJ2ZXIgdW5hdmFpbGFibGUpLidcbiAgICAgIDogZS5tZXNzYWdlO1xuICAgIGFwcGVuZFJldHJ5TWVzc2FnZSgnXHUyNkEwIENvdWxkIG5vdCBsb2FkIGJ1bGxldHM6ICcgKyBlcnJvclRleHQsICgpID0+IHNob3dCdWxsZXRSZW9yZGVyKGV4cElkLCBleHBUaXRsZSkpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWFjaGlldmVtZW50cy5sZW5ndGgpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnTm8gYnVsbGV0IHBvaW50cyBmb3VuZCBmb3IgdGhpcyBleHBlcmllbmNlLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNhdmUgZm9jdXMgb3JpZ2luIGZvciByZXN0b3JhdGlvbiBvbiBjbG9zZSAoR0FQLTE3NilcbiAgaWYgKHR5cGVvZiBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICAvLyBCdWlsZCBtb2RhbCBjb250ZW50XG4gIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG1vZGFsLmlkID0gJ2J1bGxldC1yZW9yZGVyLW1vZGFsJztcbiAgbW9kYWwuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpO1xuICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCAndHJ1ZScpO1xuICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsICdidWxsZXQtcmVvcmRlci10aXRsZScpO1xuICBtb2RhbC5zdHlsZS5jc3NUZXh0ID0gYFxuICAgIHBvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO1xuICAgIHotaW5kZXg6OTk5OTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7YDtcblxuICBjb25zdCBzdWdnZXN0ZWRCdG4gPSBoYXNKb2JBbmFseXNpc1xuICAgID8gYDxidXR0b24gY2xhc3M9XCJidG4tc2Vjb25kYXJ5XCIgaWQ9XCJ1c2UtbGxtLW9yZGVyLWJ0blwiIHRpdGxlPVwiQXBwbHkgam9iLXJlbGV2YW5jZSByYW5raW5nIGZyb20geW91ciBqb2IgYW5hbHlzaXNcIlxuICAgICAgICAgc3R5bGU9XCJjb2xvcjojNjM2NmYxO2JvcmRlci1jb2xvcjojNjM2NmYxO1wiPlx1MjcyOCBVc2UgU3VnZ2VzdGVkIE9yZGVyPC9idXR0b24+YFxuICAgIDogJyc7XG4gIGNvbnN0IHN1Z2dlc3Rpb25NZXRhID0gcHJvcG9zZWRSZWFzb25pbmcgfHwgcHJvcG9zZWRBdHNJbXBhY3QgfHwgcHJvcG9zZWRQYWdlSW1wYWN0XG4gICAgPyBgPGRpdiBpZD1cImJ1bGxldC1vcmRlci1haS1ub3RlXCIgc3R5bGU9XCJmb250LXNpemU6MC44MmVtO2NvbG9yOiM0MzM4Y2E7YmFja2dyb3VuZDojZWVmMmZmO2JvcmRlcjoxcHggc29saWQgI2M3ZDJmZTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHggMTJweDttYXJnaW4tYm90dG9tOjEycHg7XCI+XG4gICAgICAgICR7cHJvcG9zZWRSZWFzb25pbmcgPyBgPGRpdj48c3Ryb25nPkFJIHJhdGlvbmFsZTo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKHByb3Bvc2VkUmVhc29uaW5nKX08L2Rpdj5gIDogJyd9XG4gICAgICAgICR7cHJvcG9zZWRBdHNJbXBhY3QgPyBgPGRpdj48c3Ryb25nPkFUUyBpbXBhY3Q6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbChwcm9wb3NlZEF0c0ltcGFjdCl9PC9kaXY+YCA6ICcnfVxuICAgICAgICAke3Byb3Bvc2VkUGFnZUltcGFjdCA/IGA8ZGl2PjxzdHJvbmc+UGFnZSBsZW5ndGggaW1wYWN0Ojwvc3Ryb25nPiAke2VzY2FwZUh0bWwocHJvcG9zZWRQYWdlSW1wYWN0KX08L2Rpdj5gIDogJyd9XG4gICAgICA8L2Rpdj5gXG4gICAgOiAnJztcblxuICBtb2RhbC5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjI0cHg7bWF4LXdpZHRoOjY0MHB4O3dpZHRoOjkyJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0Ojgwdmg7b3ZlcmZsb3cteTphdXRvO2JveC1zaGFkb3c6MCAyMHB4IDYwcHggcmdiYSgwLDAsMCwwLjMpO1wiPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O21hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8aDMgaWQ9XCJidWxsZXQtcmVvcmRlci10aXRsZVwiIHN0eWxlPVwibWFyZ2luOjA7Y29sb3I6IzFmMjkzNztcIj5cdTIxOTUgUmVvcmRlciBCdWxsZXRzPC9oMz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IzZiNzI4MDtmb250LXNpemU6MC45ZW07bWFyZ2luLXRvcDo0cHg7XCI+JHtleHBUaXRsZX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gYXJpYS1sYWJlbD1cIkNsb3NlIHJlb3JkZXIgZGlhbG9nXCJcbiAgICAgICAgICBvbmNsaWNrPVwicmVzdG9yZUZvY3VzKCk7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1bGxldC1yZW9yZGVyLW1vZGFsJykucmVtb3ZlKClcIlxuICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxLjRlbTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNmI3MjgwO1wiPlx1MjcxNTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgICAgVXNlIFx1MjE5MSBcdTIxOTMgdG8gcmVvcmRlci4gQnVsbGV0cyBoaWdoZXIgaW4gdGhlIGxpc3QgYXBwZWFyIGZpcnN0IG9uIHlvdXIgQ1YuXG4gICAgICAgIFRoZSBtb3N0IHJlbGV2YW50IGJ1bGxldCB3aWxsIGJlIGF1dG8tcmFua2VkIGhpZ2hlc3QgaWYgeW91IHJlc2V0LlxuICAgICAgPC9kaXY+XG4gICAgICAke3N1Z2dlc3Rpb25NZXRhfVxuICAgICAgPG9sIGlkPVwiYnVsbGV0LXJlb3JkZXItbGlzdFwiIHN0eWxlPVwicGFkZGluZzowO21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZTtcIj5cbiAgICAgIDwvb2w+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDoxMHB4O21hcmdpbi10b3A6MThweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7XCI+XG4gICAgICAgICR7c3VnZ2VzdGVkQnRufVxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiIG9uY2xpY2s9XCJyZXNldEJ1bGxldE9yZGVyKCcke2V4cElkfScpXCI+XHUyMUJBIFJlc2V0IHRvIEF1dG88L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1wcmltYXJ5XCIgICBvbmNsaWNrPVwic2F2ZUJ1bGxldE9yZGVyKCcke2V4cElkfScpO3Jlc3RvcmVGb2N1cygpXCI+U2F2ZSBPcmRlcjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtb2RhbCk7XG4gIGlmICh0eXBlb2YgdHJhcEZvY3VzID09PSAnZnVuY3Rpb24nKSB0cmFwRm9jdXMoJ2J1bGxldC1yZW9yZGVyLW1vZGFsJyk7XG4gIGlmICh0eXBlb2Ygc2V0SW5pdGlhbEZvY3VzID09PSAnZnVuY3Rpb24nKSBzZXRJbml0aWFsRm9jdXMoJ2J1bGxldC1yZW9yZGVyLW1vZGFsJyk7XG5cbiAgLy8gQ2xvc2Ugb24gRXNjYXBlXG4gIGNvbnN0IGVzY0hhbmRsZXIgPSAoZSkgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJlc3RvcmVGb2N1cygpO1xuICAgICAgbW9kYWwucmVtb3ZlKCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZXNjSGFuZGxlcik7XG4gICAgfVxuICB9O1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZXNjSGFuZGxlcik7XG5cbiAgLy8gUG9wdWxhdGUgbGlzdCBpdGVtc1xuICBjb25zdCBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1bGxldC1yZW9yZGVyLWxpc3QnKTtcbiAgYWNoaWV2ZW1lbnRzLmZvckVhY2goKGFjaCwgaWR4KSA9PiB7XG4gICAgY29uc3QgdGV4dCA9ICh0eXBlb2YgYWNoID09PSAnb2JqZWN0JyA/IChhY2gudGV4dCB8fCAnJykgOiBTdHJpbmcoYWNoKSk7XG4gICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgIGxpLmRhdGFzZXQub3JpZ0luZGV4ID0gaWR4O1xuICAgIGxpLnN0eWxlLmNzc1RleHQgPSBgZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjhweDtwYWRkaW5nOjhweDttYXJnaW4tYm90dG9tOjZweDtcbiAgICAgIGJhY2tncm91bmQ6I2Y4ZmFmYztib3JkZXI6MXB4IHNvbGlkICNlMmU4ZjA7Ym9yZGVyLXJhZGl1czo2cHg7YDtcbiAgICBsaS5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4O2ZsZXgtc2hyaW5rOjA7XCI+XG4gICAgICAgIDxidXR0b24gdGl0bGU9XCJNb3ZlIHVwXCIgYXJpYS1sYWJlbD1cIk1vdmUgYnVsbGV0IHVwXCJcbiAgICAgICAgICBvbmNsaWNrPVwibW92ZUJ1bGxldCh0aGlzLC0xKVwiXG4gICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6M3B4O1xuICAgICAgICAgICAgICAgICBjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjFweCA1cHg7bGluZS1oZWlnaHQ6MS4yO2ZvbnQtc2l6ZTowLjllbTtcIj5cdTIxOTE8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0aXRsZT1cIk1vdmUgZG93blwiIGFyaWEtbGFiZWw9XCJNb3ZlIGJ1bGxldCBkb3duXCJcbiAgICAgICAgICBvbmNsaWNrPVwibW92ZUJ1bGxldCh0aGlzLCsxKVwiXG4gICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6M3B4O1xuICAgICAgICAgICAgICAgICBjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjFweCA1cHg7bGluZS1oZWlnaHQ6MS4yO2ZvbnQtc2l6ZTowLjllbTtcIj5cdTIxOTM8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OjE7Zm9udC1zaXplOjAuOWVtO1wiPiR7dGV4dH08L3NwYW4+YDtcbiAgICBsaXN0LmFwcGVuZENoaWxkKGxpKTtcbiAgfSk7XG4gIF91cGRhdGVCdWxsZXRBcnJvd3MoKTtcblxuICAvLyBXaXJlIHVwIFwiVXNlIFN1Z2dlc3RlZCBPcmRlclwiIGJ1dHRvbiBpZiBqb2IgYW5hbHlzaXMgaXMgYXZhaWxhYmxlXG4gIGlmIChoYXNKb2JBbmFseXNpcyAmJiBwcm9wb3NlZE9yZGVyKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZS1sbG0tb3JkZXItYnRuJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgX2FwcGx5QnVsbGV0T3JkZXIocHJvcG9zZWRPcmRlcik7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FwcGx5QnVsbGV0T3JkZXIob3JkZXIpIHtcbiAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidWxsZXQtcmVvcmRlci1saXN0Jyk7XG4gIGlmICghbGlzdCkgcmV0dXJuO1xuICBjb25zdCBpdGVtcyA9IEFycmF5LmZyb20obGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpKTtcbiAgLy8gQnVpbGQgYSBtYXAgZnJvbSBvcmlnSW5kZXggXHUyMTkyIGxpIGVsZW1lbnRcbiAgY29uc3QgYnlPcmlnID0ge307XG4gIGl0ZW1zLmZvckVhY2gobGkgPT4geyBieU9yaWdbcGFyc2VJbnQobGkuZGF0YXNldC5vcmlnSW5kZXgsIDEwKV0gPSBsaTsgfSk7XG4gIC8vIFJlLWFwcGVuZCBpbiBwcm9wb3NlZCBvcmRlciwgdGhlbiBhbnkgbm90IGxpc3RlZFxuICBjb25zdCBsaXN0ZWQgPSBuZXcgU2V0KG9yZGVyLm1hcChOdW1iZXIpKTtcbiAgb3JkZXIuZm9yRWFjaChpZHggPT4geyBpZiAoYnlPcmlnW2lkeF0pIGxpc3QuYXBwZW5kQ2hpbGQoYnlPcmlnW2lkeF0pOyB9KTtcbiAgaXRlbXMuZm9yRWFjaChsaSA9PiB7XG4gICAgaWYgKCFsaXN0ZWQuaGFzKHBhcnNlSW50KGxpLmRhdGFzZXQub3JpZ0luZGV4LCAxMCkpKSBsaXN0LmFwcGVuZENoaWxkKGxpKTtcbiAgfSk7XG4gIF91cGRhdGVCdWxsZXRBcnJvd3MoKTtcbn1cblxuZnVuY3Rpb24gbW92ZUJ1bGxldChidG4sIGRpcmVjdGlvbikge1xuICBjb25zdCBsaSAgID0gYnRuLmNsb3Nlc3QoJ2xpJyk7XG4gIGNvbnN0IGxpc3QgPSBsaS5wYXJlbnROb2RlO1xuICBpZiAoZGlyZWN0aW9uID09PSAtMSAmJiBsaS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgbGlzdC5pbnNlcnRCZWZvcmUobGksIGxpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gKzEgJiYgbGkubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgbGlzdC5pbnNlcnRCZWZvcmUobGkubmV4dEVsZW1lbnRTaWJsaW5nLCBsaSk7XG4gIH1cbiAgX3VwZGF0ZUJ1bGxldEFycm93cygpO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlQnVsbGV0QXJyb3dzKCkge1xuICBjb25zdCBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1bGxldC1yZW9yZGVyLWxpc3QnKTtcbiAgaWYgKCFsaXN0KSByZXR1cm47XG4gIGNvbnN0IGl0ZW1zID0gbGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpO1xuICBpdGVtcy5mb3JFYWNoKChsaSwgaWR4KSA9PiB7XG4gICAgY29uc3QgW3VwQnRuLCBkb3duQnRuXSA9IGxpLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpO1xuICAgIHVwQnRuLmRpc2FibGVkICAgPSBpZHggPT09IDA7XG4gICAgZG93bkJ0bi5kaXNhYmxlZCA9IGlkeCA9PT0gaXRlbXMubGVuZ3RoIC0gMTtcbiAgICB1cEJ0bi5zdHlsZS5vcGFjaXR5ICAgPSB1cEJ0bi5kaXNhYmxlZCAgID8gJzAuMycgOiAnMSc7XG4gICAgZG93bkJ0bi5zdHlsZS5vcGFjaXR5ID0gZG93bkJ0bi5kaXNhYmxlZCA/ICcwLjMnIDogJzEnO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZUJ1bGxldE9yZGVyKGV4cElkKSB7XG4gIGNvbnN0IGxpc3QgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1bGxldC1yZW9yZGVyLWxpc3QnKTtcbiAgY29uc3QgaXRlbXMgPSBsaXN0ID8gbGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpIDogW107XG4gIGNvbnN0IG9yZGVyID0gQXJyYXkuZnJvbShpdGVtcykubWFwKGxpID0+IHBhcnNlSW50KGxpLmRhdGFzZXQub3JpZ0luZGV4LCAxMCkpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZW9yZGVyLWJ1bGxldHMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJ30sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7ZXhwZXJpZW5jZV9pZDogZXhwSWQsIG9yZGVyfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKCFyZXMub2sgfHwgIWRhdGEub2spIHtcbiAgICAgIGFwcGVuZFJldHJ5TWVzc2FnZSgnXHUyNkEwIENvdWxkIG5vdCBzYXZlIGJ1bGxldCBvcmRlcjogJyArIChkYXRhLmVycm9yfHwnVW5rbm93bicpLCAoKSA9PiBzYXZlQnVsbGV0T3JkZXIoZXhwSWQpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ1x1MjE5NSBCdWxsZXQgb3JkZXIgc2F2ZWQuIEl0IHdpbGwgYXBwbHkgd2hlbiB5b3UgZ2VuZXJhdGUgdGhlIENWLicpO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidWxsZXQtcmVvcmRlci1tb2RhbCcpPy5yZW1vdmUoKTtcbiAgfSBjYXRjaChlKSB7XG4gICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI2QTAgTmV0d29yayBlcnJvciBzYXZpbmcgYnVsbGV0IG9yZGVyOiAnICsgZS5tZXNzYWdlLCAoKSA9PiBzYXZlQnVsbGV0T3JkZXIoZXhwSWQpKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXNldEJ1bGxldE9yZGVyKGV4cElkKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3Jlb3JkZXItYnVsbGV0cycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb24nfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtleHBlcmllbmNlX2lkOiBleHBJZCwgb3JkZXI6IFtdfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKCFyZXMub2sgfHwgIWRhdGEub2spIHtcbiAgICAgIGFwcGVuZFJldHJ5TWVzc2FnZSgnXHUyNkEwIENvdWxkIG5vdCByZXNldCBidWxsZXQgb3JkZXI6ICcgKyAoZGF0YS5lcnJvcnx8J1Vua25vd24nKSwgKCkgPT4gcmVzZXRCdWxsZXRPcmRlcihleHBJZCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnXHUyMUJBIEJ1bGxldCBvcmRlciByZXNldC4gUmVsZXZhbmNlLWJhc2VkIG9yZGVyaW5nIHdpbGwgYXBwbHkuJyk7XG4gICAgcmVzdG9yZUZvY3VzKCk7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1bGxldC1yZW9yZGVyLW1vZGFsJyk/LnJlbW92ZSgpO1xuICB9IGNhdGNoKGUpIHtcbiAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoJ1x1MjZBMCBOZXR3b3JrIGVycm9yIHJlc2V0dGluZyBidWxsZXQgb3JkZXI6ICcgKyBlLm1lc3NhZ2UsICgpID0+IHJlc2V0QnVsbGV0T3JkZXIoZXhwSWQpKTtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgRm9yd2FyZC1za2lwIHBoYXNlIHdhdGVybWFyayAoR0FQLTEwMSkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8vIEJhY2tlbmQgcGhhc2Ugb3JkZXJpbmcgKG1hdGNoZXMgY29udmVyc2F0aW9uX21hbmFnZXIucHkgX1BIQVNFX09SREVSKS5cbmNvbnN0IF9QSEFTRV9QUk9HUkVTU0lPTiA9IFtcbiAgJ2luaXQnLCAnam9iX2FuYWx5c2lzJywgJ2N1c3RvbWl6YXRpb24nLCAncmV3cml0ZV9yZXZpZXcnLFxuICAnc3BlbGxfY2hlY2snLCAnZ2VuZXJhdGlvbicsICdsYXlvdXRfcmV2aWV3JywgJ2ZpbmFsX2dlbmVyYXRpb24nLCAncmVmaW5lbWVudCcsXG5dO1xuXG4vLyBNaW5pbXVtIGhpZ2hlc3RQaGFzZSBpbmRleCByZXF1aXJlZCBmb3IgZWFjaCBzdGVwIHRvIGJlIGZvcndhcmQtc2tpcHBhYmxlLlxuY29uc3QgX1NURVBfRldEX1BIQVNFX01JTiA9IHtcbiAgYW5hbHlzaXM6ICAgICAgIDEsICAgLy8gam9iX2FuYWx5c2lzXG4gIGN1c3RvbWl6YXRpb25zOiAyLCAgIC8vIGN1c3RvbWl6YXRpb25cbiAgcmV3cml0ZTogICAgICAgIDMsICAgLy8gcmV3cml0ZV9yZXZpZXdcbiAgc3BlbGw6ICAgICAgICAgIDQsICAgLy8gc3BlbGxfY2hlY2tcbiAgbGF5b3V0OiAgICAgICAgIDUsICAgLy8gZ2VuZXJhdGlvblxuICBkb3dubG9hZDogICAgICAgNywgICAvLyBmaW5hbF9nZW5lcmF0aW9uXG4gIGNvdmVyX2xldHRlcjogICA3LFxuICBzY3JlZW5pbmc6ICAgICAgNyxcbiAgaW50ZXJ2aWV3X3ByZXA6IDcsXG4gIHRoYW5rX3lvdTogICAgICA3LFxuICBoYXJ2ZXN0OiAgICAgICAgNyxcbn07XG5cbi8vIFx1MjUwMFx1MjUwMCBXb3JrZmxvdyBzdGVwIGJhciBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gdXBkYXRlV29ya2Zsb3dTdGVwcyhzdGF0dXMpIHtcbiAgLy8gMTItc3RlcCB3b3JrZmxvdyBiYXI6IEpvYiBJbnB1dCBcdTIxOTIgQW5hbHlzaXMgXHUyMTkyIEN1c3RvbWlzZSBcdTIxOTIgUmV3cml0ZXMgXHUyMTkyXG4gIC8vICAgU3BlbGwgQ2hlY2sgXHUyMTkyIExheW91dCBSZXZpZXcgXHUyMTkyIERvd25sb2FkIFx1MjE5MiBDb3ZlciBMZXR0ZXIgXHUyMTkyIFNjcmVlbmluZyBcdTIxOTJcbiAgLy8gICBJbnRlcnZpZXcgUHJlcCBcdTIxOTIgVGhhbmsgWW91IFx1MjE5MiBIYXJ2ZXN0XG4gIC8vXG4gIGNvbnN0IFVQQ09NSU5HID0gbmV3IFNldCgpO1xuXG4gIC8vIFN0ZXBzIHRoYXQgc3VwcG9ydCBMTE0gcmUtZXhlY3V0aW9uIHZpYSAvYXBpL3JlLXJ1bi1waGFzZVxuICBjb25zdCBSRV9SVU5fU1RFUFMgPSBuZXcgU2V0KFsnYW5hbHlzaXMnLCAnY3VzdG9taXphdGlvbnMnLCAncmV3cml0ZScsICdzcGVsbCcsICdsYXlvdXQnXSk7XG5cbiAgLy8gQmFzZSBsYWJlbCBmb3IgZWFjaCBzdGVwICh1c2VkIHdoZW4gaW5qZWN0aW5nIFx1MjFCQiBidXR0b24pXG4gIGNvbnN0IFNURVBfTEFCRUxTID0ge1xuICAgIGpvYjogICAgICAgICAgICAnXHVEODNEXHVEQ0U1IEpvYiBJbnB1dCcsXG4gICAgYW5hbHlzaXM6ICAgICAgICdcdUQ4M0RcdUREMEQgQW5hbHlzaXMnLFxuICAgIGN1c3RvbWl6YXRpb25zOiAnXHUyNjk5XHVGRTBGIEN1c3RvbWlzZScsXG4gICAgcmV3cml0ZTogICAgICAgICdcdTI3MEZcdUZFMEYgUmV3cml0ZXMnLFxuICAgIHNwZWxsOiAgICAgICAgICAnXHVEODNEXHVERDI0IFNwZWxsIENoZWNrJyxcbiAgICBsYXlvdXQ6ICAgICAgICAgJ1x1RDgzQ1x1REZBOCBMYXlvdXQgUmV2aWV3JyxcbiAgICBkb3dubG9hZDogICAgICAgJ1x1MkIwN1x1RkUwRiBEb3dubG9hZCBGaWxlcycsXG4gICAgY292ZXJfbGV0dGVyOiAgICdcdUQ4M0RcdURDRTkgQ292ZXIgTGV0dGVyJyxcbiAgICBzY3JlZW5pbmc6ICAgICAgJ1x1RDgzRFx1RENDQiBTY3JlZW5pbmcnLFxuICAgIGludGVydmlld19wcmVwOiAnXHVEODNDXHVERkE0IEludGVydmlldyBQcmVwJyxcbiAgICB0aGFua195b3U6ICAgICAgJ1x1RDgzRFx1REU0RiBUaGFuayBZb3UnLFxuICAgIGhhcnZlc3Q6ICAgICAgICAnXHVEODNDXHVERjNFIEhhcnZlc3QnLFxuICB9O1xuXG4gIC8vIERldGVybWluZSB3aGljaCBzdGVwcyBhcmUgZG9uZSBiYXNlZCBvbiBzZXNzaW9uIHN0YXRlIGZpZWxkcy5cbiAgY29uc3QgcGhhc2UgPSBzdGF0dXMucGhhc2UgfHwgJyc7XG4gIC8vIEFsbCBwb3N0LWxheW91dCBwaGFzZXMgdW5sb2NrIHNpbXVsdGFuZW91c2x5IG9uY2UgbGF5b3V0IGlzIGNvbmZpcm1lZC5cbiAgY29uc3QgcG9zdExheW91dCA9IHBoYXNlID09PSBQSEFTRVMuRklOQUxfR0VORVJBVElPTiB8fCBwaGFzZSA9PT0gUEhBU0VTLlJFRklORU1FTlQ7XG4gIGNvbnN0IGRvbmUgPSB7XG4gICAgam9iOiAgICAgICAgICAgICEhc3RhdHVzLmpvYl9kZXNjcmlwdGlvbixcbiAgICBhbmFseXNpczogICAgICAgISFzdGF0dXMuam9iX2FuYWx5c2lzLFxuICAgIGN1c3RvbWl6YXRpb25zOiAhIXN0YXR1cy5jdXN0b21pemF0aW9ucyxcbiAgICByZXdyaXRlOiAgICAgICAgcGhhc2UgIT09IFBIQVNFUy5SRVdSSVRFX1JFVklFVyAmJiAoISFzdGF0dXMuY3VzdG9taXphdGlvbnMpLFxuICAgIHNwZWxsOiAgICAgICAgICBwaGFzZSA9PT0gUEhBU0VTLkdFTkVSQVRJT04gfHwgcGhhc2UgPT09IFBIQVNFUy5MQVlPVVRfUkVWSUVXIHx8XG4gICAgICAgICAgICAgICAgICAgIHBoYXNlID09PSBQSEFTRVMuRklOQUxfR0VORVJBVElPTiB8fCBwaGFzZSA9PT0gUEhBU0VTLlJFRklORU1FTlQsXG4gICAgbGF5b3V0OiAgICAgICAgIHBvc3RMYXlvdXQsXG4gICAgZG93bmxvYWQ6ICAgICAgIHBvc3RMYXlvdXQsXG4gICAgY292ZXJfbGV0dGVyOiAgIHBvc3RMYXlvdXQsXG4gICAgc2NyZWVuaW5nOiAgICAgIHBvc3RMYXlvdXQsXG4gICAgaW50ZXJ2aWV3X3ByZXA6IHBvc3RMYXlvdXQsXG4gICAgdGhhbmtfeW91OiAgICAgIHBvc3RMYXlvdXQsXG4gICAgaGFydmVzdDogICAgICAgIHBvc3RMYXlvdXQsXG4gIH07XG5cbiAgLy8gRm9yd2FyZC1za2lwIHdhdGVybWFyayAoR0FQLTEwMSk6IHN0ZXBzIHByZXZpb3VzbHkgcmVhY2hlZCBidXQgbm90IGN1cnJlbnRseVxuICAvLyBcImRvbmVcIiBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGhhc2UgYXJlIHN0aWxsIG5hdmlnYWJsZSB3aXRoIGEgY29uZmlybWF0aW9uLlxuICBjb25zdCBoaWdoZXN0UGhhc2VJZHggPSBfUEhBU0VfUFJPR1JFU1NJT04uaW5kZXhPZihzdGF0dXMuaGlnaGVzdF9waGFzZSB8fCAnJyk7XG4gIGNvbnN0IGN1cnJlbnRQaGFzZUlkeCA9IF9QSEFTRV9QUk9HUkVTU0lPTi5pbmRleE9mKHBoYXNlKTtcblxuICAvLyBEZXRlcm1pbmUgdGhlIGFjdGl2ZSBzdGVwIGZyb20gdGhlIGJhY2tlbmQgcGhhc2Ugc3RyaW5nLlxuICBjb25zdCBwaGFzZVRvU3RlcCA9IHtcbiAgICAnaW5pdCc6ICAgICAgICAgICAgICdqb2InLFxuICAgICdqb2JfYW5hbHlzaXMnOiAgICAgJ2FuYWx5c2lzJyxcbiAgICAnY3VzdG9taXphdGlvbic6ICAgICdjdXN0b21pemF0aW9ucycsXG4gICAgJ3Jld3JpdGVfcmV2aWV3JzogICAncmV3cml0ZScsXG4gICAgJ3NwZWxsX2NoZWNrJzogICAgICAnc3BlbGwnLFxuICAgICdnZW5lcmF0aW9uJzogICAgICAgJ2xheW91dCcsXG4gICAgJ2xheW91dF9yZXZpZXcnOiAgICAnbGF5b3V0JyxcbiAgICAnZmluYWxfZ2VuZXJhdGlvbic6ICdkb3dubG9hZCcsXG4gICAgJ3JlZmluZW1lbnQnOiAgICAgICAnZG93bmxvYWQnLFxuICB9O1xuICBjb25zdCBhY3RpdmVTdGVwID0gcGhhc2VUb1N0ZXBbcGhhc2VdIHx8ICdqb2InO1xuXG4gIC8vIFJlc29sdmUgdGhlIHJlZW50cnkgc3RlcCBmb3IgdGhlIFwiUmVmaW5pbmdcIiBiYWRnZVxuICBjb25zdCBfcGhhc2VUb1N0ZXAyID0gT2JqZWN0LmFzc2lnbih7J2luaXQnOiAnam9iJ30sIHBoYXNlVG9TdGVwKTtcbiAgY29uc3QgcmVlbnRyeVN0ZXAgPSBzdGF0dXMuaXRlcmF0aW5nXG4gICAgPyAoX3BoYXNlVG9TdGVwMltzdGF0dXMucmVlbnRyeV9waGFzZV0gfHwgc3RhdHVzLnJlZW50cnlfcGhhc2UgfHwgbnVsbClcbiAgICA6IG51bGw7XG5cbiAgY29uc3Qgc3RlcElkcyA9IFtcbiAgICAnam9iJywgJ2FuYWx5c2lzJywgJ2N1c3RvbWl6YXRpb25zJywgJ3Jld3JpdGUnLCAnc3BlbGwnLCAnbGF5b3V0JyxcbiAgICAnZG93bmxvYWQnLCAnY292ZXJfbGV0dGVyJywgJ3NjcmVlbmluZycsICdpbnRlcnZpZXdfcHJlcCcsICd0aGFua195b3UnLCAnaGFydmVzdCcsXG4gIF07XG4gIGNvbnN0IHN0YWxlU3RlcHMgPSBuZXcgU2V0KHN0YXR1cy5zdGFsZV9zdGVwcyB8fCBbXSk7XG4gIHN0ZXBJZHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzdGVwLSR7c3RlcH1gKTtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgLy8gVXBjb21pbmcgc3RlcHMgYXJlIGZpeGVkIFx1MjAxNCBuZXZlciBjaGFuZ2UgdGhlaXIgY2xhc3MuXG4gICAgaWYgKFVQQ09NSU5HLmhhcyhzdGVwKSkgcmV0dXJuO1xuICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScsICdjb21wbGV0ZWQnLCAnY2xpY2thYmxlJywgJ3VwY29taW5nJywgJ3N0YWxlJywgJ2ZvcndhcmQtc2tpcCcpO1xuXG4gICAgbGV0IGxhYmVsID0gU1RFUF9MQUJFTFNbc3RlcF0gfHwgc3RlcDtcblxuICAgIGlmIChzdGVwID09PSBhY3RpdmVTdGVwKSB7XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgIC8vIFwiXHUyMUJCIFJlZmluaW5nXCIgYmFkZ2Ugc2hvd24gb24gdGhlIGFjdGl2ZSBzdGVwIHdoZW4gaXRlcmF0aW5nXG4gICAgICBpZiAoc3RhdHVzLml0ZXJhdGluZyAmJiByZWVudHJ5U3RlcCA9PT0gc3RlcCkge1xuICAgICAgICBsYWJlbCArPSAnIDxzcGFuIGNsYXNzPVwic3RlcC1pbmxpbmUtYmFkZ2VcIj5cdTIxQkIgUmVmaW5pbmc8L3NwYW4+JztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRvbmVbc3RlcF0pIHtcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2NvbXBsZXRlZCcpO1xuICAgICAgLy8gQ29tcGxldGVkIHN0ZXBzIGFyZSBjbGlja2FibGUgZm9yIGJhY2stbmF2aWdhdGlvbi5cbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2NsaWNrYWJsZScpO1xuICAgICAgLy8gQWRkIFx1MjFCQiByZS1ydW4gYnV0dG9uIGZvciBzdGVwcyB0aGF0IHN1cHBvcnQgTExNIHJlLWV4ZWN1dGlvblxuICAgICAgaWYgKFJFX1JVTl9TVEVQUy5oYXMoc3RlcCkpIHtcbiAgICAgICAgY29uc3QgcmVydW5MYWJlbCA9IF9TVEVQX0RJU1BMQVlbc3RlcF0gfHwgc3RlcDtcbiAgICAgICAgbGFiZWwgKz0gYCA8YnV0dG9uIGNsYXNzPVwic3RlcC1yZXJ1blwiIGFyaWEtbGFiZWw9XCJSZS1ydW4gJHtyZXJ1bkxhYmVsfVwiXG4gICAgICAgICAgdGl0bGU9XCJSZS1ydW4gJHtzdGVwfSB3aXRoIHVwZGF0ZWQgaW5wdXRzXCJcbiAgICAgICAgICBvbmNsaWNrPVwiZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uZmlybVJlUnVuUGhhc2UoJyR7c3RlcH0nKVwiXG4gICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MC44ZW07b3BhY2l0eTowLjM1O3RyYW5zaXRpb246b3BhY2l0eSAwLjE1czttYXJnaW4tbGVmdDoycHg7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO3BhZGRpbmc6MDtjb2xvcjppbmhlcml0O2xpbmUtaGVpZ2h0OjE7XCI+XHUyMUJCPC9idXR0b24+YDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhpZ2hlc3RQaGFzZUlkeCA+PSAwICYmIChfU1RFUF9GV0RfUEhBU0VfTUlOW3N0ZXBdID8/IEluZmluaXR5KSA8PSBoaWdoZXN0UGhhc2VJZHhcbiAgICAgICAgICAgICAgICYmIGhpZ2hlc3RQaGFzZUlkeCA+IGN1cnJlbnRQaGFzZUlkeCkge1xuICAgICAgLy8gRm9yd2FyZC1za2lwOiBzdGVwIHdhcyBjb21wbGV0ZWQgaW4gYSBwcmlvciBpdGVyYXRpb24gYnV0IGlzIGFoZWFkIG9mIGN1cnJlbnQgcGhhc2UuXG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKCdmb3J3YXJkLXNraXAnLCAnY2xpY2thYmxlJyk7XG4gICAgICBsYWJlbCArPSAnIDxzcGFuIGNsYXNzPVwic3RlcC1pbmxpbmUtYmFkZ2Ugc3RlcC1md2QtYmFkZ2VcIiB0aXRsZT1cIlByZXZpb3VzbHkgY29tcGxldGVkIFx1MjAxNCBjbGljayB0byBqdW1wIGFoZWFkXCI+XHUyM0U5PC9zcGFuPic7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgc3RhbGUgY2xhc3MgZm9yIHN0ZXBzIGRvd25zdHJlYW0gb2YgYSByZS1ydW5cbiAgICBpZiAoc3RhbGVTdGVwcy5oYXMoc3RlcCkpIGVsLmNsYXNzTGlzdC5hZGQoJ3N0YWxlJyk7XG5cbiAgICAvLyBBcHBlbmQgc3Itb25seSBzdGF0ZSBkZXNjcmlwdGlvbiBmb3Igc2NyZWVuIHJlYWRlciB1c2Vyc1xuICAgIGNvbnN0IGlzU3RhbGUgICAgICAgICA9IHN0YWxlU3RlcHMuaGFzKHN0ZXApO1xuICAgIGNvbnN0IGlzU3RhbGVDcml0aWNhbCA9IGVsLmNsYXNzTGlzdC5jb250YWlucygnc3RhbGUtY3JpdGljYWwnKTtcbiAgICBjb25zdCBpc0FjdGl2ZSAgICAgICAgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpO1xuICAgIGNvbnN0IGlzQ29tcGxldGVkICAgICA9IGVsLmNsYXNzTGlzdC5jb250YWlucygnY29tcGxldGVkJyk7XG4gICAgY29uc3QgaXNGd2RTa2lwICAgICAgID0gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdmb3J3YXJkLXNraXAnKTtcbiAgICBjb25zdCBzclN0YXRlID0gaXNTdGFsZUNyaXRpY2FsID8gJyAoY3JpdGljYWwgXHUyMDE0IHJldmlldyByZXF1aXJlZCknXG4gICAgICA6IGlzU3RhbGUgICAgID8gJyAoc3RhbGUgXHUyMDE0IHJlc3VsdHMgbWF5IGJlIG91dGRhdGVkKSdcbiAgICAgIDogaXNBY3RpdmUgICAgPyAnIChjdXJyZW50IHN0ZXApJ1xuICAgICAgOiBpc0NvbXBsZXRlZCA/ICcgKGNvbXBsZXRlZCknXG4gICAgICA6IGlzRndkU2tpcCAgID8gJyAocHJldmlvdXNseSBjb21wbGV0ZWQgXHUyMDE0IGNsaWNrIHRvIGp1bXAgYWhlYWQpJ1xuICAgICAgOiAnJztcbiAgICBpZiAoc3JTdGF0ZSkgbGFiZWwgKz0gYDxzcGFuIGNsYXNzPVwic3Itb25seVwiPiR7c3JTdGF0ZX08L3NwYW4+YDtcblxuICAgIGVsLmlubmVySFRNTCA9IGxhYmVsO1xuICB9KTtcblxuICBhcHBseUxheW91dEZyZXNobmVzc05hdmlnYXRpb25TdGF0ZSgpO1xuXG4gIC8vIFNob3cgXHUyMUJCIGljb25zIHZpYSBDU1MgOmhvdmVyIG9uIHRoZSBwYXJlbnQgLmNvbXBsZXRlZCBzdGVwXG4gIC8vIChpbmplY3QgYSA8c3R5bGU+IG9ubHkgb25jZSlcbiAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlcC1yZXJ1bi1zdHlsZScpKSB7XG4gICAgY29uc3QgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgcy5pZCA9ICdzdGVwLXJlcnVuLXN0eWxlJztcbiAgICBzLnRleHRDb250ZW50ID0gJy5zdGVwLmNvbXBsZXRlZDpob3ZlciAuc3RlcC1yZXJ1biwgLnN0ZXAuY29tcGxldGVkOmZvY3VzLXdpdGhpbiAuc3RlcC1yZXJ1biB7IG9wYWNpdHk6IDEgIWltcG9ydGFudDsgfSAuc3RlcC1yZXJ1bjpmb2N1cy12aXNpYmxlIHsgb3V0bGluZTogMnB4IHNvbGlkICMzYjgyZjY7IG91dGxpbmUtb2Zmc2V0OiAycHg7IG9wYWNpdHk6IDEgIWltcG9ydGFudDsgfSc7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTtcbiAgfVxuXG4gIC8vIFN5bmMgc2Vjb25kLWJhciB0YWIgdmlzaWJpbGl0eSBhbmQgYWN0aW9uIGJ1dHRvbnMgdG8gdGhlIGFjdGl2ZSB3b3JrZmxvdyBzdGVwXG4gIGlmICh0eXBlb2YgdXBkYXRlVGFiQmFyRm9yU3RhZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICB1cGRhdGVUYWJCYXJGb3JTdGFnZShhY3RpdmVTdGVwKTtcbiAgfVxuICB1cGRhdGVBY3Rpb25CdXR0b25zKGFjdGl2ZVN0ZXApO1xuXG4gIC8vIFN5bmMgdmlldy1jdXJzb3IgcmluZyB0byB0aGUgY3VycmVudGx5IHZpc2libGUgdGFiXG4gIF91cGRhdGVWaWV3aW5nSW5kaWNhdG9yKHN0YXRlTWFuYWdlci5nZXRDdXJyZW50VGFiKCkpO1xufVxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoR0VORVJBVElPTl9TVEFURV9FVkVOVCwgYXBwbHlMYXlvdXRGcmVzaG5lc3NOYXZpZ2F0aW9uU3RhdGUpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihHRU5FUkFUSU9OX1NUQVRFX0VWRU5ULCBhcHBseURpcnR5UGhhc2VOYXZpZ2F0aW9uU3RhdGUpO1xufVxuXG4vKipcbiAqIE1hcmsgb3IgdW5tYXJrIHdvcmtmbG93IHN0ZXAgcGlsbHMgYXMgc3RhbGUgYmFzZWQgb24gZGlydHkgcGhhc2VzIHNldCBieVxuICogbGF5b3V0LXBoYXNlIGNvbnRlbnQgZWRpdHMgKFBPU1QgL2FwaS9jdi9hcHBseS1jb250ZW50LWNoYW5nZXMpLlxuICpcbiAqIE9ubHkgYWZmZWN0cyBzdGVwcyBsaXN0ZWQgaW4gc3RhdGVNYW5hZ2VyLmdldERpcnR5UGhhc2VzKCkgdGhhdCBhcmUgTk9UXG4gKiBhbHJlYWR5IGhhbmRsZWQgYnkgYXBwbHlMYXlvdXRGcmVzaG5lc3NOYXZpZ2F0aW9uU3RhdGUgKGkuZS4gbm90ICdsYXlvdXQnKS5cbiAqL1xuZnVuY3Rpb24gYXBwbHlEaXJ0eVBoYXNlTmF2aWdhdGlvblN0YXRlKCkge1xuICBjb25zdCBkaXJ0eVBoYXNlcyA9IHN0YXRlTWFuYWdlci5nZXREaXJ0eVBoYXNlcygpO1xuICBjb25zdCBzdGVwc1RvQ2xlYXIgPSBbXTsgICAgLy8gc3RlcHMgd2UgbWFuYWdlIGhlcmUgKG5vdCAnbGF5b3V0JylcblxuICBzdGVwc1RvQ2xlYXIuZm9yRWFjaChzdGVwID0+IHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzdGVwLSR7c3RlcH1gKTtcbiAgICBpZiAoIWVsKSByZXR1cm47XG5cbiAgICBjb25zdCBpc0RpcnR5ID0gZGlydHlQaGFzZXMuaW5jbHVkZXMoc3RlcCk7XG4gICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnc3RhbGUnLCBpc0RpcnR5KTtcblxuICAgIC8vIFByZXNlcnZlIGV4aXN0aW5nIHJlcnVuIGJ1dHRvbiBtYXJrdXAsIHVwZGF0ZSB0ZXh0ICsgYmFkZ2VcbiAgICBjb25zdCByZXJ1bkh0bWwgPSBlbC5xdWVyeVNlbGVjdG9yKCcuc3RlcC1yZXJ1bicpPy5vdXRlckhUTUwgfHwgJyc7XG4gICAgY29uc3QgbGFiZWwgICAgID0gX1NURVBfRElTUExBWVtzdGVwXSB8fCBzdGVwO1xuICAgIGNvbnN0IGJhZGdlICAgICA9IGlzRGlydHlcbiAgICAgID8gJyA8c3BhbiBjbGFzcz1cInN0ZXAtaW5saW5lLWJhZGdlIHN0ZXAtc3RhbGUtYmFkZ2VcIj5Db250ZW50IGNoYW5nZWQ8L3NwYW4+J1xuICAgICAgOiAnJztcbiAgICBlbC5pbm5lckhUTUwgPSBgJHtsYWJlbH0ke2JhZGdlfSR7cmVydW5IdG1sID8gYCAke3JlcnVuSHRtbH1gIDogJyd9YDtcbiAgfSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBTdGVwIG5hdmlnYXRpb24gaGVscGVyIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBfZG9TdGVwTmF2aWdhdGUoc3RlcCkge1xuICBjb25zdCBzdGVwVG9UYWIgPSB7XG4gICAgYW5hbHlzaXM6ICAgICAgICdhbmFseXNpcycsXG4gICAgY3VzdG9taXphdGlvbnM6ICdnb2FscycsXG4gICAgcmV3cml0ZTogICAgICAgICdyZXdyaXRlJyxcbiAgICBzcGVsbDogICAgICAgICAgJ3NwZWxsJyxcbiAgICBsYXlvdXQ6ICAgICAgICAgJ2xheW91dCcsXG4gICAgZG93bmxvYWQ6ICAgICAgICdmaW5hbF9nZW5lcmF0ZScsXG4gICAgY292ZXJfbGV0dGVyOiAgICdjb3Zlci1sZXR0ZXInLFxuICAgIHNjcmVlbmluZzogICAgICAnc2NyZWVuaW5nJyxcbiAgICBpbnRlcnZpZXdfcHJlcDogJ2ludGVydmlldy1wcmVwJyxcbiAgICB0aGFua195b3U6ICAgICAgJ3RoYW5rLXlvdScsXG4gICAgaGFydmVzdDogICAgICAgICdoYXJ2ZXN0JyxcbiAgfTtcbiAgY29uc3QgdGFiTmFtZSA9IHN0ZXBUb1RhYltzdGVwXTtcbiAgaWYgKCF0YWJOYW1lKSByZXR1cm47XG4gIGlmICh0eXBlb2YgdXBkYXRlVGFiQmFyRm9yU3RhZ2UgPT09ICdmdW5jdGlvbicpIHVwZGF0ZVRhYkJhckZvclN0YWdlKHN0ZXApO1xuICBzd2l0Y2hUYWIodGFiTmFtZSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBTdGVwIGNsaWNrIChiYWNrLW5hdikgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8vIEJhY2stbmF2aWdhdGlvbjogY2xpY2tpbmcgYSBjb21wbGV0ZWQgd29ya2Zsb3cgc3RlcCBuYXZpZ2F0ZXMgdG8gaXRzIHZpZXdlciB0YWIuXG4vLyBDbGlja2luZyB0aGUgam9iIHN0ZXAgYWx3YXlzIG9wZW5zIHRoZSBsb2FkLWpvYiBwYW5lbC5cbmZ1bmN0aW9uIGhhbmRsZVN0ZXBDbGljayhzdGVwKSB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHN0ZXAtJHtzdGVwfWApO1xuICBpZiAoIWVsKSByZXR1cm47XG5cbiAgLy8gSm9iIHN0ZXA6IHNob3cgam9iIGNvbnRlbnQgaWYgYSBqb2IgaXMgbG9hZGVkLCBvdGhlcndpc2Ugb3BlbiB0aGUgbG9hZCBwYW5lbC5cbiAgaWYgKHN0ZXAgPT09ICdqb2InKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucygnY29tcGxldGVkJykgfHwgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSkge1xuICAgICAgc3dpdGNoVGFiKCdqb2InKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd0xvYWRKb2JQYW5lbCgpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3J3YXJkLXNraXA6IHByZXZpb3VzbHkgcmVhY2hlZCBzdGFnZSB0aGF0IGlzIGFoZWFkIG9mIGN1cnJlbnQgcGhhc2UuXG4gIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZvcndhcmQtc2tpcCcpKSB7XG4gICAgY29uc3QgbGFiZWwgPSBfU1RFUF9ESVNQTEFZW3N0ZXBdIHx8IHN0ZXA7XG4gICAgaWYgKHR5cGVvZiBjb25maXJtRGlhbG9nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25maXJtRGlhbG9nKFxuICAgICAgICBgSnVtcCBhaGVhZCB0byAke2xhYmVsfT9cXG5cXG5JbnRlcm1lZGlhdGUgc3RhZ2VzIG1heSBuZWVkIHJlLXJ1bm5pbmcgaWYgeW91IG1ha2UgY2hhbmdlcyBoZXJlLmAsXG4gICAgICAgIHsgY29uZmlybUxhYmVsOiAnSnVtcCBhaGVhZCcsIGNhbmNlbExhYmVsOiAnU3RheSBoZXJlJyB9XG4gICAgICApLnRoZW4oY29uZmlybWVkID0+IHsgaWYgKGNvbmZpcm1lZCkgX2RvU3RlcE5hdmlnYXRlKHN0ZXApOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgX2RvU3RlcE5hdmlnYXRlKHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBPbmx5IG5hdmlnYXRlIGlmIHRoZSBzdGVwIGlzIGNvbXBsZXRlZCAoYmFjay1uYXYpIG9yIGFjdGl2ZS5cbiAgaWYgKCFlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2NvbXBsZXRlZCcpICYmICFlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSByZXR1cm47XG5cbiAgY29uc3QgaGFzVW5hbnN3ZXJlZFBvc3RBbmFseXNpc1F1ZXN0aW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBxcyA9IEFycmF5LmlzQXJyYXkod2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucykgPyB3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zIDogW107XG4gICAgaWYgKHFzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGFuc3dlcnMgPSAod2luZG93LnF1ZXN0aW9uQW5zd2VycyAmJiB0eXBlb2Ygd2luZG93LnF1ZXN0aW9uQW5zd2VycyA9PT0gJ29iamVjdCcpXG4gICAgICA/IHdpbmRvdy5xdWVzdGlvbkFuc3dlcnNcbiAgICAgIDoge307XG4gICAgcmV0dXJuIHFzLnNvbWUocSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGFuc3dlcnNbcS50eXBlXTtcbiAgICAgIHJldHVybiAhdmFsdWUgfHwgIVN0cmluZyh2YWx1ZSkudHJpbSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHN0ZXBUb1RhYiA9IHtcbiAgICBhbmFseXNpczogICAgICAgaGFzVW5hbnN3ZXJlZFBvc3RBbmFseXNpc1F1ZXN0aW9ucygpID8gJ3F1ZXN0aW9ucycgOiAnYW5hbHlzaXMnLFxuICAgIGN1c3RvbWl6YXRpb25zOiAnZ29hbHMnLFxuICAgIHJld3JpdGU6ICAgICAgICAncmV3cml0ZScsXG4gICAgc3BlbGw6ICAgICAgICAgICdzcGVsbCcsXG4gICAgbGF5b3V0OiAgICAgICAgICdsYXlvdXQnLFxuICAgIGRvd25sb2FkOiAgICAgICAnZmluYWxfZ2VuZXJhdGUnLFxuICAgIGNvdmVyX2xldHRlcjogICAnY292ZXItbGV0dGVyJyxcbiAgICBzY3JlZW5pbmc6ICAgICAgJ3NjcmVlbmluZycsXG4gICAgaW50ZXJ2aWV3X3ByZXA6ICdpbnRlcnZpZXctcHJlcCcsXG4gICAgdGhhbmtfeW91OiAgICAgICd0aGFuay15b3UnLFxuICAgIGhhcnZlc3Q6ICAgICAgICAnaGFydmVzdCcsXG4gIH07XG4gIGNvbnN0IHRhYk5hbWUgPSBzdGVwVG9UYWJbc3RlcF07XG4gIGlmICghdGFiTmFtZSkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvTmF2aWdhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB1cGRhdGVUYWJCYXJGb3JTdGFnZSA9PT0gJ2Z1bmN0aW9uJykgdXBkYXRlVGFiQmFyRm9yU3RhZ2Uoc3RlcCk7XG4gICAgc3dpdGNoVGFiKHRhYk5hbWUpO1xuICB9O1xuXG4gIC8vIFNob3cgYSBkb3duc3RyZWFtLWF3YXJlbmVzcyBkaWFsb2cgd2hlbiBiYWNrLW5hdmlnYXRpbmcgdG8gYSBjb21wbGV0ZWQgc3RlcFxuICAvLyB0aGF0IGhhcyBkb3duc3RyZWFtIGNvbXBsZXRlZCBzdGVwcyAobm90IHdoZW4gdGhlIHN0ZXAgaXMgYWN0aXZlKS5cbiAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucygnY29tcGxldGVkJykgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcbiAgICBjb25zdCBzdGVwSWR4ID0gX1NURVBfT1JERVIuaW5kZXhPZihzdGVwKTtcbiAgICBjb25zdCBoYXNEb3duc3RyZWFtQ29tcGxldGVkID0gX1NURVBfT1JERVIuc2xpY2Uoc3RlcElkeCArIDEpLnNvbWUocyA9PiB7XG4gICAgICBjb25zdCBkb3duc3RyZWFtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHN0ZXAtJHtzfWApO1xuICAgICAgcmV0dXJuIGRvd25zdHJlYW0gJiYgZG93bnN0cmVhbS5jbGFzc0xpc3QuY29udGFpbnMoJ2NvbXBsZXRlZCcpO1xuICAgIH0pO1xuICAgIGlmIChoYXNEb3duc3RyZWFtQ29tcGxldGVkKSB7XG4gICAgICBfc2hvd1JlUnVuQ29uZmlybU1vZGFsKHN0ZXAsICdiYWNrLW5hdicsIGRvTmF2aWdhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGRvTmF2aWdhdGUoKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB7XG4gIF9TVEVQX09SREVSLFxuICBfU1RFUF9ESVNQTEFZLFxuICBiYWNrVG9QaGFzZSxcbiAgX3Nob3dSZVJ1bkNvbmZpcm1Nb2RhbCxcbiAgX3Nob3dBbmFseXNpc0NsYXJpZmljYXRpb25BbWVuZE1vZGFsLFxuICBjb25maXJtUmVSdW5QaGFzZSxcbiAgcmVSdW5QaGFzZSxcbiAgX2V4ZWN1dGVSZVJ1blBoYXNlLFxuICBfZ2V0U3RlcFRvb2x0aXAsXG4gIF91cGRhdGVWaWV3aW5nSW5kaWNhdG9yLFxuICBfaGlnaGxpZ2h0Q2hhbmdlZEl0ZW1zLFxuICBfbWFya0NoYW5nZWQsXG4gIGFwcGx5TGF5b3V0RnJlc2huZXNzTmF2aWdhdGlvblN0YXRlLFxuICBhcHBseURpcnR5UGhhc2VOYXZpZ2F0aW9uU3RhdGUsXG4gIHNob3dCdWxsZXRSZW9yZGVyLFxuICBfYXBwbHlCdWxsZXRPcmRlcixcbiAgbW92ZUJ1bGxldCxcbiAgX3VwZGF0ZUJ1bGxldEFycm93cyxcbiAgc2F2ZUJ1bGxldE9yZGVyLFxuICByZXNldEJ1bGxldE9yZGVyLFxuICB1cGRhdGVXb3JrZmxvd1N0ZXBzLFxuICBoYW5kbGVTdGVwQ2xpY2ssXG4gIF9BQ1RJT05fTEFCRUxTLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogbGF5b3V0LWluc3RydWN0aW9uLmpzXG4gKiBGcm9udGVuZCBVSSBmb3IgbmF0dXJhbC1sYW5ndWFnZSBsYXlvdXQgaW5zdHJ1Y3Rpb24gd29ya2Zsb3cuXG4gKiBIYW5kbGVzIGluc3RydWN0aW9uIHN1Ym1pc3Npb24sIHByZXZpZXcgdXBkYXRlcywgYW5kIGluc3RydWN0aW9uIGhpc3RvcnkuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdsYXlvdXQtaW5zdHJ1Y3Rpb24nKTtcblxuaW1wb3J0IHsgYXBpQ2FsbCB9IGZyb20gJy4vYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBzY2hlZHVsZUF0c1JlZnJlc2ggfSBmcm9tICcuL2F0cy1yZWZpbmVtZW50LmpzJztcbmltcG9ydCB7IGFwcGVuZE1lc3NhZ2UsIGFwcGVuZE1lc3NhZ2VIdG1sIH0gZnJvbSAnLi9tZXNzYWdlLXF1ZXVlLmpzJztcbmltcG9ydCB7IHN3aXRjaFRhYiB9IGZyb20gJy4vcmV2aWV3LXRhYmxlLWJhc2UuanMnO1xuaW1wb3J0IHsgc3RhdGVNYW5hZ2VyLCBHRU5FUkFUSU9OX1NUQVRFX0VWRU5ULCBHRU5FUkFUSU9OX1BIQVNFUyB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgeyBjb25maXJtUmVSdW5QaGFzZSB9IGZyb20gJy4vd29ya2Zsb3ctc3RlcHMuanMnO1xuaW1wb3J0IHsgcmVuZGVySHRtbEludG9JZnJhbWUgfSBmcm9tICcuL3ByZXZpZXctcmVuZGVyLmpzJztcblxubGV0IGRpc21pc3NlZFN0YWxlQ2FsbG91dFJldmlzaW9uID0gbnVsbDtcblxuLyoqXG4gKiBDb252ZXJ0IGEgQ1NTIHBpeGVsIHZhbHVlIHRvIGl0cyB0eXBvZ3JhcGhpYyBwb2ludCBlcXVpdmFsZW50LlxuICogQXNzdW1lcyB0aGUgc3RhbmRhcmQgc2NyZWVuIHJlc29sdXRpb24gY29udmVudGlvbjogOTYgcHgvaW4sIDcyIHB0L2luLFxuICogc28gMXB4ID0gMC43NSBwdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBweFxuICogQHJldHVybnMge251bWJlcn0gcHQgdmFsdWUgcm91bmRlZCB0byBvbmUgZGVjaW1hbCBwbGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHhUb1B0KHB4KSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHB4ICogMC43NSAqIDEwKSAvIDEwO1xufVxuXG5mdW5jdGlvbiBjb2VyY2VCb29sZWFuKHZhbHVlLCBkZWZhdWx0VmFsdWUgPSBmYWxzZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiB2YWx1ZTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKFsnMScsICd0cnVlJywgJ3llcycsICdvbiddLmluY2x1ZGVzKG5vcm1hbGl6ZWQpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoWycwJywgJ2ZhbHNlJywgJ25vJywgJ29mZiddLmluY2x1ZGVzKG5vcm1hbGl6ZWQpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuLy8gVW5kbyBzdGFjayBcdTIwMTQgZWFjaCBlbnRyeSBpcyB7IGh0bWwsIGluc3RydWN0aW9ucyB9IHNuYXBzaG90dGVkIGJlZm9yZSBhXG4vLyBsYXlvdXQgaW5zdHJ1Y3Rpb24gaXMgYXBwbGllZC4gIENhcCBhdCAyMCBlbnRyaWVzIHRvIGJvdW5kIG1lbW9yeS5cbmNvbnN0IF9sYXlvdXRVbmRvU3RhY2sgPSBbXTtcbmNvbnN0IF9VTkRPX1NUQUNLX01BWCA9IDIwO1xuXG5mdW5jdGlvbiBnZXRDdkFydGlmYWN0cygpIHtcbiAgcmV0dXJuIHN0YXRlTWFuYWdlci5nZXRUYWJEYXRhKCdjdicpIHx8IHt9O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDdkFydGlmYWN0cyhuZXh0Q3ZBcnRpZmFjdHMpIHtcbiAgc3RhdGVNYW5hZ2VyLnNldFRhYkRhdGEoJ2N2JywgbmV4dEN2QXJ0aWZhY3RzKTtcbn1cblxuZnVuY3Rpb24gc2V0UHJldmlld0h0bWwoaHRtbCkge1xuICB1cGRhdGVDdkFydGlmYWN0cyh7IC4uLmdldEN2QXJ0aWZhY3RzKCksICcqLmh0bWwnOiBodG1sIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRQcmV2aWV3T3V0cHV0cygpIHtcbiAgcmV0dXJuIHN0YXRlTWFuYWdlcj8uZ2V0R2VuZXJhdGlvblN0YXRlPy4oKT8ucHJldmlld091dHB1dHMgfHwgbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJldmlld091dHB1dFVybChyZW5kZXJlcikge1xuICBjb25zdCBzZXNzaW9uSWQgPSBzdGF0ZU1hbmFnZXI/LmdldFNlc3Npb25JZD8uKCk7XG4gIGNvbnN0IHN1ZmZpeCA9IHNlc3Npb25JZFxuICAgID8gYD9zZXNzaW9uX2lkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlc3Npb25JZCl9YFxuICAgIDogJyc7XG4gIHJldHVybiBgL2FwaS9jdi9wcmV2aWV3LW91dHB1dC8ke2VuY29kZVVSSUNvbXBvbmVudChyZW5kZXJlcil9JHtzdWZmaXh9YDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyUHJldmlld091dHB1dFN0YXR1cyhwcmV2aWV3T3V0cHV0cyA9IG51bGwpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZXZpZXctb3V0cHV0LXN0YXR1cycpO1xuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuXG4gIGNvbnN0IHBkZnMgPSBwcmV2aWV3T3V0cHV0cz8ucGRmcyB8fCB7fTtcbiAgY29uc3QgcmVuZGVyZXJPcmRlciA9IFsnY2hyb21lJywgJ3dlYXN5cHJpbnQnXTtcbiAgY29uc3QgYXZhaWxhYmxlUmVuZGVyZXJzID0gcmVuZGVyZXJPcmRlci5maWx0ZXIoKHJlbmRlcmVyS2V5KSA9PiByZW5kZXJlcktleSBpbiBwZGZzKTtcblxuICBpZiAoYXZhaWxhYmxlUmVuZGVyZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1vdXRwdXQtZW1wdHlcIj5cbiAgICAgICAgUHJldmlldyBQREZzIHdpbGwgYXBwZWFyIGhlcmUgYWZ0ZXIgdGhlIGN1cnJlbnQgbGF5b3V0IGlzIHJlbmRlcmVkLlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZW5kZXJlckxhYmVscyA9IHtcbiAgICBjaHJvbWU6ICdDaHJvbWUnLFxuICAgIHdlYXN5cHJpbnQ6ICdXZWFzeVByaW50JyxcbiAgfTtcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gYXZhaWxhYmxlUmVuZGVyZXJzLm1hcCgocmVuZGVyZXJLZXkpID0+IHtcbiAgICBjb25zdCByZW5kZXJlciA9IHBkZnNbcmVuZGVyZXJLZXldIHx8IHt9O1xuICAgIGNvbnN0IG9rID0gQm9vbGVhbihyZW5kZXJlci5vayk7XG4gICAgY29uc3QgZGV0YWlsID0gcmVuZGVyZXIucmVuZGVyZXJfZGV0YWlsIHx8IHJlbmRlcmVyLmVycm9yIHx8ICdObyBkZXRhaWwgYXZhaWxhYmxlJztcbiAgICBjb25zdCByZW5kZXJlckxhYmVsID0gcmVuZGVyZXJMYWJlbHNbcmVuZGVyZXJLZXldIHx8IHJlbmRlcmVyS2V5O1xuICAgIGNvbnN0IGJhZGdlTWFya3VwID0gb2tcbiAgICAgID8gYDxhIGNsYXNzPVwicHJldmlldy1vdXRwdXQtYmFkZ2UgcHJldmlldy1vdXRwdXQtYmFkZ2UtbGluayBpcy1yZWFkeVwiIGhyZWY9XCIke2dldFByZXZpZXdPdXRwdXRVcmwocmVuZGVyZXJLZXkpfVwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyXCI+JHtyZW5kZXJlckxhYmVsfSBSZWFkeTwvYT5gXG4gICAgICA6IGA8c3BhbiBjbGFzcz1cInByZXZpZXctb3V0cHV0LWJhZGdlIGlzLWZhaWxlZFwiPiR7cmVuZGVyZXJMYWJlbH0gRmFpbGVkPC9zcGFuPmA7XG5cbiAgICByZXR1cm4gYFxuICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctb3V0cHV0LXJvdyAke29rID8gJ2lzLXJlYWR5JyA6ICdpcy1mYWlsZWQnfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1vdXRwdXQtY29weVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LW91dHB1dC10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICR7YmFkZ2VNYXJrdXB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctb3V0cHV0LWRldGFpbFwiPiR7ZXNjYXBlSHRtbChkZXRhaWwpfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH0pLmpvaW4oJycpO1xufVxuXG5mdW5jdGlvbiBhcHBlbmRMYXlvdXRTYWZldHlBbGVydChzYWZldHlBbGVydCkge1xuICBpZiAoIXNhZmV0eUFsZXJ0Py5mbGFnZ2VkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXNzdWVzID0gKHNhZmV0eUFsZXJ0Lmlzc3VlcyB8fCBbXSlcbiAgICAubWFwKGlzc3VlID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSB0eXBlb2YgaXNzdWUgPT09ICdzdHJpbmcnXG4gICAgICAgID8gaXNzdWVcbiAgICAgICAgOiAoaXNzdWU/LmRldGFpbCB8fCBpc3N1ZT8uaXNzdWUgfHwgSlNPTi5zdHJpbmdpZnkoaXNzdWUpKTtcbiAgICAgIHJldHVybiBgPGxpPiR7ZXNjYXBlSHRtbCh0ZXh0KX08L2xpPmA7XG4gICAgfSlcbiAgICAuam9pbignJyk7XG5cbiAgYXBwZW5kTWVzc2FnZUh0bWwoXG4gICAgJ3N5c3RlbScsXG4gICAgYDxzdHJvbmc+XHUyNkEwXHVGRTBGIExheW91dCBzYWZldHkgc2FuaXRpemF0aW9uIGFwcGxpZWQuPC9zdHJvbmc+PGJyPiR7ZXNjYXBlSHRtbChzYWZldHlBbGVydC5tZXNzYWdlIHx8ICdQb3RlbnRpYWwgcHJvbXB0IHBheWxvYWRzIG9yIHVuc2FmZSBIVE1MIHdlcmUgcmVtb3ZlZCBiZWZvcmUgYXBwbHlpbmcgdGhlIGNoYW5nZS4nKX08YnI+PHVsIHN0eWxlPVwibWFyZ2luOjZweCAwIDAgMThweFwiPiR7aXNzdWVzfTwvdWw+YCxcbiAgKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTGF5b3V0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIHRpbWVzdGFtcDogaW5zdHJ1Y3Rpb24udGltZXN0YW1wIHx8ICcnLFxuICAgIGluc3RydWN0aW9uX3RleHQ6IGluc3RydWN0aW9uLmluc3RydWN0aW9uX3RleHQgfHwgaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb24gfHwgJycsXG4gICAgY2hhbmdlX3N1bW1hcnk6IGluc3RydWN0aW9uLmNoYW5nZV9zdW1tYXJ5IHx8IGluc3RydWN0aW9uLnN1bW1hcnkgfHwgJycsXG4gICAgY29uZmlybWF0aW9uOiBpbnN0cnVjdGlvbi5jb25maXJtYXRpb24gIT09IGZhbHNlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29udGVudFJldmlzaW9uKCkge1xuICByZXR1cm4gc3RhdGVNYW5hZ2VyLmdldEdlbmVyYXRpb25TdGF0ZSgpLmNvbnRlbnRSZXZpc2lvbiA/PyAwO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRHZW5lcmF0aW9uVGltZXN0YW1wKHRpbWVzdGFtcCkge1xuICBpZiAoIXRpbWVzdGFtcCkgcmV0dXJuICcnO1xuICBjb25zdCBwYXJzZWQgPSBuZXcgRGF0ZSh0aW1lc3RhbXApO1xuICBpZiAoTnVtYmVyLmlzTmFOKHBhcnNlZC5nZXRUaW1lKCkpKSByZXR1cm4gJyc7XG4gIHJldHVybiBwYXJzZWQudG9Mb2NhbGVTdHJpbmcoW10sIHsgbW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJzItZGlnaXQnIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZExheW91dEZyZXNobmVzc0NoaXBNYXJrdXAoZnJlc2huZXNzKSB7XG4gIGlmICghZnJlc2huZXNzPy5zaG93Q2hpcCkgcmV0dXJuICcnO1xuICBjb25zdCBpY29uID0gZnJlc2huZXNzLmlzQ3JpdGljYWwgPyAnXHUyMUJCJyA6IChmcmVzaG5lc3MuaXNTdGFsZSA/ICchJyA6ICdcdTI3MTMnKTtcbiAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cImxheW91dC1mcmVzaG5lc3MtY2hpcCAke2ZyZXNobmVzcy50b25lfSBsYXlvdXQtcGFuZS1mcmVzaG5lc3MtY2hpcFwiXG4gICAgYXJpYS1sYWJlbD1cIiR7ZXNjYXBlSHRtbChmcmVzaG5lc3MuYXJpYUxhYmVsIHx8ICcnKX1cIj5cbiAgICA8c3BhbiBjbGFzcz1cImxheW91dC1mcmVzaG5lc3MtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiR7aWNvbn08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJsYXlvdXQtZnJlc2huZXNzLWxhYmVsXCI+JHtlc2NhcGVIdG1sKGZyZXNobmVzcy5sYWJlbCB8fCAnJyl9PC9zcGFuPlxuICA8L3NwYW4+YDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTGF5b3V0UHJldmlld1N0YXR1cygpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheW91dC1wcmV2aWV3LXN0YXR1cycpO1xuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICBjb25zdCBmcmVzaG5lc3MgPSBzdGF0ZU1hbmFnZXIuZ2V0TGF5b3V0RnJlc2huZXNzKCk7XG4gIGNvbnN0IGdlbmVyYXRpb25TdGF0ZSA9IHN0YXRlTWFuYWdlci5nZXRHZW5lcmF0aW9uU3RhdGUoKTtcbiAgaWYgKCFnZW5lcmF0aW9uU3RhdGUucHJldmlld0F2YWlsYWJsZSkge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcbiAgICBjb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbGFzdFByZXZpZXdSZXZpc2lvbiA9IE51bWJlci5pc0Zpbml0ZShnZW5lcmF0aW9uU3RhdGUubGFzdFByZXZpZXdDb250ZW50UmV2aXNpb24pXG4gICAgPyBnZW5lcmF0aW9uU3RhdGUubGFzdFByZXZpZXdDb250ZW50UmV2aXNpb24gOiBudWxsO1xuICBjb25zdCBjdXJyZW50UmV2aXNpb24gPSBOdW1iZXIuaXNGaW5pdGUoZ2VuZXJhdGlvblN0YXRlLmNvbnRlbnRSZXZpc2lvbilcbiAgICA/IGdlbmVyYXRpb25TdGF0ZS5jb250ZW50UmV2aXNpb24gOiBudWxsO1xuICBjb25zdCBwZW5kaW5nUmV2aXNpb25Db3VudCA9IGxhc3RQcmV2aWV3UmV2aXNpb24gIT09IG51bGwgJiYgY3VycmVudFJldmlzaW9uICE9PSBudWxsXG4gICAgPyBNYXRoLm1heCgwLCBjdXJyZW50UmV2aXNpb24gLSBsYXN0UHJldmlld1JldmlzaW9uKSA6IDA7XG4gIGNvbnN0IHRpbWVzdGFtcExhYmVsID0gZm9ybWF0R2VuZXJhdGlvblRpbWVzdGFtcChnZW5lcmF0aW9uU3RhdGUucHJldmlld0dlbmVyYXRlZEF0KTtcbiAgY29uc3QgZGV0YWlsTGluZXMgPSBbXTtcbiAgaWYgKHRpbWVzdGFtcExhYmVsKSBkZXRhaWxMaW5lcy5wdXNoKGBQcmV2aWV3IGdlbmVyYXRlZCAke3RpbWVzdGFtcExhYmVsfWApO1xuICBpZiAoZ2VuZXJhdGlvblN0YXRlLmxheW91dENvbmZpcm1lZCAmJiBnZW5lcmF0aW9uU3RhdGUuY29uZmlybWVkQXQpIHtcbiAgICBjb25zdCBjb25maXJtZWRMYWJlbCA9IGZvcm1hdEdlbmVyYXRpb25UaW1lc3RhbXAoZ2VuZXJhdGlvblN0YXRlLmNvbmZpcm1lZEF0KTtcbiAgICBpZiAoY29uZmlybWVkTGFiZWwpIGRldGFpbExpbmVzLnB1c2goYExheW91dCBjb25maXJtZWQgJHtjb25maXJtZWRMYWJlbH1gKTtcbiAgfVxuICBpZiAoZnJlc2huZXNzLmlzU3RhbGUpIHtcbiAgICBpZiAocGVuZGluZ1JldmlzaW9uQ291bnQgPiAwKSB7XG4gICAgICBkZXRhaWxMaW5lcy5wdXNoKGAke3BlbmRpbmdSZXZpc2lvbkNvdW50fSBjb250ZW50IGNoYW5nZSR7cGVuZGluZ1JldmlzaW9uQ291bnQgPT09IDEgPyAnJyA6ICdzJ30gc2luY2UgdGhpcyBwcmV2aWV3YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRldGFpbExpbmVzLnB1c2goJ0NvbnRlbnQgY2hhbmdlZCBhZnRlciB0aGlzIHByZXZpZXcgd2FzIGdlbmVyYXRlZCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChnZW5lcmF0aW9uU3RhdGUubGF5b3V0Q29uZmlybWVkIHx8IGdlbmVyYXRpb25TdGF0ZS5waGFzZSA9PT0gJ2NvbmZpcm1lZCcpIHtcbiAgICBkZXRhaWxMaW5lcy5wdXNoKCdDb25maXJtZWQgcHJldmlldyBtYXRjaGVzIHRoZSBsYXRlc3QgYXBwcm92ZWQgY29udGVudCcpO1xuICB9IGVsc2Uge1xuICAgIGRldGFpbExpbmVzLnB1c2goJ1ByZXZpZXcgbWF0Y2hlcyB0aGUgbGF0ZXN0IGFwcHJvdmVkIGNvbnRlbnQnKTtcbiAgfVxuICBjb25zdCBzdGFnZUxhYmVsID0gZ2VuZXJhdGlvblN0YXRlLmxheW91dENvbmZpcm1lZCB8fCBnZW5lcmF0aW9uU3RhdGUucGhhc2UgPT09ICdjb25maXJtZWQnXG4gICAgPyAnUmVhZHkgZm9yIGZpbmFsIGZpbGVzJyA6ICdSZWFkeSBmb3IgbGF5b3V0IHJldmlldyc7XG4gIC8vIFBhZ2UgY291bnQgYmFkZ2U6IHNob3duIHdoZW4gYSBwYWdlIGNvdW50IGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBwcmV2aWV3XG4gIGNvbnN0IHBjID0gZ2VuZXJhdGlvblN0YXRlLnBhZ2VDb3VudEV4YWN0ID8/IGdlbmVyYXRpb25TdGF0ZS5wYWdlQ291bnRFc3RpbWF0ZTtcbiAgbGV0IHBhZ2VDb3VudEJhZGdlID0gJyc7XG4gIGlmIChwYyAhPT0gbnVsbCAmJiBwYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcGNMYWJlbCAgPSBnZW5lcmF0aW9uU3RhdGUucGFnZUNvdW50RXhhY3QgIT09IG51bGwgPyBgJHtwY30gcGFnZSR7cGMgIT09IDEgPyAncycgOiAnJ31gIDogYH4ke3BjfSBwYWdlJHtwYyAhPT0gMSA/ICdzJyA6ICcnfWA7XG4gICAgY29uc3QgcGNXYXJuICAgPSBnZW5lcmF0aW9uU3RhdGUucGFnZVdhcm5pbmc7XG4gICAgcGFnZUNvdW50QmFkZ2UgPSBgPHNwYW4gY2xhc3M9XCJsYXlvdXQtcGFnZS1jb3VudC1iYWRnZSR7cGNXYXJuID8gJyB3YXJuJyA6ICcnfVwiIHRpdGxlPVwiJHtwY1dhcm4gPyAnUGFnZSBjb3VudCBvdXRzaWRlIHJlY29tbWVuZGVkIHJhbmdlJyA6ICdQYWdlIGNvdW50IHdpdGhpbiByYW5nZSd9XCI+JHtwY1dhcm4gPyAnXHUyNkEwICcgOiAnXHVEODNEXHVEQ0M0ICd9JHtlc2NhcGVIdG1sKHBjTGFiZWwpfTwvc3Bhbj5gO1xuICB9XG4gIGNvbnRhaW5lci5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1wcmV2aWV3LXN0YXR1cy1jYXJkICR7ZnJlc2huZXNzLnRvbmV9XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXByZXZpZXctc3RhdHVzLWhlYWRlclwiPlxuICAgICAgICAke2J1aWxkTGF5b3V0RnJlc2huZXNzQ2hpcE1hcmt1cChmcmVzaG5lc3MpfVxuICAgICAgICA8c3BhbiBjbGFzcz1cImxheW91dC1wcmV2aWV3LXN0YXR1cy1zdGFnZVwiPiR7ZXNjYXBlSHRtbChzdGFnZUxhYmVsKX08L3NwYW4+XG4gICAgICAgICR7cGFnZUNvdW50QmFkZ2V9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtcHJldmlldy1zdGF0dXMtZGV0YWlsc1wiPlxuICAgICAgICAke2RldGFpbExpbmVzLm1hcCgobGluZSkgPT4gYDxkaXY+JHtlc2NhcGVIdG1sKGxpbmUpfTwvZGl2PmApLmpvaW4oJycpfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcbiAgY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xufVxuXG5mdW5jdGlvbiByZW5kZXJMYXlvdXRTdGFsZUNhbGxvdXQoKSB7XG4gIGNvbnN0IGNhbGxvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5b3V0LXN0YWxlLWNhbGxvdXQnKTtcbiAgaWYgKCFjYWxsb3V0KSByZXR1cm47XG5cbiAgY29uc3QgZnJlc2huZXNzID0gc3RhdGVNYW5hZ2VyLmdldExheW91dEZyZXNobmVzcygpO1xuICBjb25zdCBjb250ZW50UmV2aXNpb24gPSBnZXRDdXJyZW50Q29udGVudFJldmlzaW9uKCk7XG4gIGNvbnN0IGlzRGlzbWlzc2VkID0gZGlzbWlzc2VkU3RhbGVDYWxsb3V0UmV2aXNpb24gPT09IGNvbnRlbnRSZXZpc2lvbjtcblxuICBpZiAoIWZyZXNobmVzcy5pc1N0YWxlIHx8IGlzRGlzbWlzc2VkKSB7XG4gICAgaWYgKCFmcmVzaG5lc3MuaXNTdGFsZSkgZGlzbWlzc2VkU3RhbGVDYWxsb3V0UmV2aXNpb24gPSBudWxsO1xuICAgIGNhbGxvdXQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICByZXR1cm47XG4gIH1cblxuICBjYWxsb3V0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xufVxuXG5mdW5jdGlvbiByZWZyZXNoTGF5b3V0UmV2aWV3U3RhdGUoKSB7XG4gIGNvbnN0IGZyZXNobmVzcyA9IHN0YXRlTWFuYWdlci5nZXRMYXlvdXRGcmVzaG5lc3MoKTtcbiAgY29uc3QgZ2VuZXJhdGlvblN0YXRlID0gc3RhdGVNYW5hZ2VyLmdldEdlbmVyYXRpb25TdGF0ZSgpO1xuICBjb25zdCBjb25maXJtQnRuICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtLWxheW91dC1idG4nKTtcbiAgY29uc3QgZmluYWxCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvY2VlZC10by1maW5hbGlzZS1idG4nKTtcblxuICByZW5kZXJMYXlvdXRQcmV2aWV3U3RhdHVzKCk7XG4gIHJlbmRlckxheW91dFN0YWxlQ2FsbG91dCgpO1xuICByZW5kZXJEaXJ0eVBoYXNlc0NhbGxvdXQoKTtcblxuICBjb25zdCBkaXJ0eVBoYXNlcyA9IHN0YXRlTWFuYWdlci5nZXREaXJ0eVBoYXNlcygpO1xuICBjb25zdCBoYXNEaXJ0eSA9IGRpcnR5UGhhc2VzLmxlbmd0aCA+IDA7XG5cbiAgY29uc3Qgc2hvd0NvbmZpcm0gPSBnZW5lcmF0aW9uU3RhdGUucHJldmlld0F2YWlsYWJsZSAmJiAhZnJlc2huZXNzLmlzU3RhbGUgJiYgIWdlbmVyYXRpb25TdGF0ZS5sYXlvdXRDb25maXJtZWQgJiYgIWhhc0RpcnR5XG4gICAgPyAnYmxvY2snXG4gICAgOiAnbm9uZSc7XG5cbiAgaWYgKGNvbmZpcm1CdG4pICBjb25maXJtQnRuLnN0eWxlLmRpc3BsYXkgID0gc2hvd0NvbmZpcm07XG4gIGNvbnN0IGhpbnRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXlvdXQtdHdvLXN0ZXAtaGludCcpO1xuICBpZiAoaGludEVsKSBoaW50RWwuc3R5bGUuZGlzcGxheSA9IHNob3dDb25maXJtO1xuXG4gIGlmIChmaW5hbEJ0bikge1xuICAgIGZpbmFsQnRuLnN0eWxlLmRpc3BsYXkgPSBnZW5lcmF0aW9uU3RhdGUucHJldmlld0F2YWlsYWJsZVxuICAgICAgJiYgIWZyZXNobmVzcy5pc1N0YWxlXG4gICAgICAmJiAhaGFzRGlydHlcbiAgICAgICYmIChnZW5lcmF0aW9uU3RhdGUubGF5b3V0Q29uZmlybWVkIHx8IGdlbmVyYXRpb25TdGF0ZS5waGFzZSA9PT0gJ2NvbmZpcm1lZCcpXG4gICAgICA/ICdibG9jaydcbiAgICAgIDogJ25vbmUnO1xuICB9XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBsYXlvdXQgaW5zdHJ1Y3Rpb24gVUkgYW5kIGV2ZW50IGhhbmRsZXJzLlxuICogQ2FsbGVkIHdoZW4gbGF5b3V0IHRhYiBpcyBhY3RpdmF0ZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRpYXRlTGF5b3V0SW5zdHJ1Y3Rpb25zKCkge1xuICBjb25zdCBpbnN0cnVjdGlvblRhYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGlmICghaW5zdHJ1Y3Rpb25UYWIpIHJldHVybjtcblxuICAvLyBDcmVhdGUgdHdvLWNvbHVtbiBsYXlvdXQgaWYgaXQgZG9lc24ndCBleGlzdFxuICBpZiAoIWluc3RydWN0aW9uVGFiLnF1ZXJ5U2VsZWN0b3IoJy5sYXlvdXQtaW5zdHJ1Y3Rpb24tcGFuZWwnKSkge1xuICAgIGluc3RydWN0aW9uVGFiLmlubmVySFRNTCA9IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtaW5zdHJ1Y3Rpb24tcGFuZWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxheW91dC1wcmV2aWV3LXBhbmVcIj5cbiAgICAgICAgICA8aDM+Q3VycmVudCBMYXlvdXQgUHJldmlldzwvaDM+XG4gICAgICAgICAgPGRpdiBpZD1cImxheW91dC1wcmV2aWV3LXN0YXR1c1wiIGNsYXNzPVwibGF5b3V0LXByZXZpZXctc3RhdHVzXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctaWZyYW1lLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBpZD1cInByZXZpZXctbG9hZGluZy1vdmVybGF5XCIgY2xhc3M9XCJwcmV2aWV3LWxvYWRpbmctb3ZlcmxheVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInByZXZpZXctbG9hZGluZy1sYWJlbFwiPlJlbmRlcmluZyBwcmV2aWV3XHUyMDI2PC9wPlxuICAgICAgICAgICAgICA8cCBpZD1cInByZXZpZXctbG9hZGluZy1sb2dcIiBjbGFzcz1cInByZXZpZXctbG9hZGluZy1sb2dcIj48L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpZnJhbWUgaWQ9XCJsYXlvdXQtcHJldmlld1wiIGNsYXNzPVwibGF5b3V0LXByZXZpZXctaWZyYW1lXCIgdGl0bGU9XCJDViBMYXlvdXQgUHJldmlld1wiIHNhbmRib3g9XCJhbGxvdy1zYW1lLW9yaWdpblwiIHJlZmVycmVycG9saWN5PVwibm8tcmVmZXJyZXJcIj48L2lmcmFtZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxheW91dC1pbnB1dC1wYW5lXCI+XG4gICAgICAgICAgPGgzPkxheW91dCBSZXZpZXc8L2gzPlxuICAgICAgICAgIDxwIGNsYXNzPVwibGF5b3V0LXNjb3BlLWxhYmVsXCI+XHVEODNEXHVEQ0ExIERlc2NyaWJlIGEgbGF5b3V0IGNoYW5nZSAoc3BhY2luZywgbWFyZ2lucywgY29sdW1uIHdpZHRocywgc2VjdGlvbiBvcmRlcikuIFRleHQgY29udGVudCBpcyBmaW5hbGlzZWQgXHUyMDE0IGNvbnRlbnQgZWRpdHMgYXJlIG5vdCBhcHBsaWVkIGhlcmUuPC9wPlxuICAgICAgICAgIDxkaXYgaWQ9XCJsYXlvdXQtcGFnZS1lc3RpbWF0ZVwiIHN0eWxlPVwiZGlzcGxheTpub25lO21hcmdpbi1ib3R0b206MTBweDtcIj48L2Rpdj5cblxuICAgICAgICAgIDxkaXYgaWQ9XCJsYXlvdXQtc3RhbGUtY2FsbG91dFwiIGNsYXNzPVwibGF5b3V0LXN0YWxlLWNhbGxvdXRcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cbiAgICAgICAgICAgIDxoND5MYXlvdXQgcHJldmlldyBpcyBvdXQgb2YgZGF0ZTwvaDQ+XG4gICAgICAgICAgICA8cD5Zb3UgY2hhbmdlZCBDViBjb250ZW50IGFmdGVyIHRoZSBjdXJyZW50IHByZXZpZXcgd2FzIGdlbmVyYXRlZC4gUmVnZW5lcmF0ZSB0aGUgcHJldmlldyBiZWZvcmUgdHJ1c3RpbmcgcGFnZSBjb3VudCwgbGF5b3V0IGZlZWRiYWNrLCBvciBmaW5hbCBmaWxlcy48L3A+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXN0YWxlLWNhbGxvdXQtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwicmVnZW5lcmF0ZS1sYXlvdXQtcHJldmlldy1idG5cIiBjbGFzcz1cImJ0bi13YXJuaW5nIGxheW91dC1hY3Rpb24tYnRuXCI+UmVnZW5lcmF0ZSBwcmV2aWV3PC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJkaXNtaXNzLWxheW91dC1zdGFsZS1idG5cIiBjbGFzcz1cImJ0bi1zZWNvbmRhcnkgbGF5b3V0LWFjdGlvbi1idG5cIj5LZWVwIHJldmlld2luZyBjdXJyZW50IHByZXZpZXc8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctb3V0cHV0LWNhcmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LW91dHB1dC1jYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8aDQ+UHJldmlldyBQREZzPC9oND5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcmV2aWV3LW91dHB1dC1jYXJkLW5vdGVcIj5DaHJvbWUgYW5kIFdlYXN5UHJpbnQgcmVuZGVyIGluIHBhcmFsbGVsPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGlkPVwicHJldmlldy1vdXRwdXQtc3RhdHVzXCIgY2xhc3M9XCJwcmV2aWV3LW91dHB1dC1zdGF0dXNcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtc2V0dGluZ3Mtcm93XCIgc3R5bGU9XCJkaXNwbGF5OmZsZXg7IGZsZXgtd3JhcDp3cmFwOyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxMHB4OyBtYXJnaW4tYm90dG9tOjE0cHg7IHBhZGRpbmc6OHB4IDEwcHg7IGJhY2tncm91bmQ6I2Y4ZmFmYzsgYm9yZGVyOjFweCBzb2xpZCAjZTJlOGYwOyBib3JkZXItcmFkaXVzOjZweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJiYXNlLWZvbnQtc2l6ZS1pbnB1dFwiIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTsgZm9udC13ZWlnaHQ6NjAwOyBjb2xvcjojNDc1NTY5OyB3aGl0ZS1zcGFjZTpub3dyYXA7XCI+QmFzZSBmb250IHNpemU6PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBpZD1cImJhc2UtZm9udC1zaXplLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgIG1pbj1cIjZcIiBtYXg9XCIxNlwiIHN0ZXA9XCIwLjVcIlxuICAgICAgICAgICAgICB2YWx1ZT1cIjEzXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDo2MHB4OyBwYWRkaW5nOjNweCA2cHg7IGJvcmRlcjoxcHggc29saWQgI2NiZDVlMTsgYm9yZGVyLXJhZGl1czo0cHg7IGZvbnQtc2l6ZTowLjllbTtcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkNvbnRyb2xzIHRoZSByb290IGZvbnQgc2l6ZSBmb3IgdGhlIENWLiBBbGwgcmVtLWJhc2VkIHNpemVzIHNjYWxlIHdpdGggdGhpcyB2YWx1ZS5cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuIGlkPVwiZm9udC1zaXplLXB0LWRpc3BsYXlcIiBzdHlsZT1cImZvbnQtc2l6ZTowLjgyZW07IGNvbG9yOiM2NDc0OGI7IHdoaXRlLXNwYWNlOm5vd3JhcDtcIj5weCZuYnNwOyg5LjgmbmJzcDtwdCk8L3NwYW4+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwicGFnZS1tYXJnaW4taW5wdXRcIiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07IGZvbnQtd2VpZ2h0OjYwMDsgY29sb3I6IzQ3NTU2OTsgd2hpdGUtc3BhY2U6bm93cmFwOyBtYXJnaW4tbGVmdDo4cHg7XCI+UGFnZSBtYXJnaW4gKGluKTo8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGlkPVwicGFnZS1tYXJnaW4taW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgbWluPVwiMC41XCIgbWF4PVwiMS41XCIgc3RlcD1cIjAuMDVcIlxuICAgICAgICAgICAgICB2YWx1ZT1cIjAuNVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NzJweDsgcGFkZGluZzozcHggNnB4OyBib3JkZXI6MXB4IHNvbGlkICNjYmQ1ZTE7IGJvcmRlci1yYWRpdXM6NHB4OyBmb250LXNpemU6MC45ZW07XCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJDb250cm9scyB0aGUgcHJpbnQgcGFnZSBtYXJnaW5zIGZvciBhbGwgUERGIHBhZ2VzLlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInB1YmxpY2F0aW9ucy1zdGFydC1uZXctcGFnZS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6NnB4OyBmb250LXNpemU6MC44M2VtOyBjb2xvcjojMzM0MTU1OyBtYXJnaW4tbGVmdDo4cHg7XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cInB1YmxpY2F0aW9ucy1zdGFydC1uZXctcGFnZS1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIC8+XG4gICAgICAgICAgICAgIFN0YXJ0IFB1YmxpY2F0aW9ucyBvbiBuZXcgcGFnZVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJza2lsbHMtc2hvdy1leHBlcmllbmNlLXNlbGVjdFwiIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTsgZm9udC13ZWlnaHQ6NjAwOyBjb2xvcjojNDc1NTY5OyB3aGl0ZS1zcGFjZTpub3dyYXA7IG1hcmdpbi1sZWZ0OjhweDtcIj5Ta2lsbCBleHBlcmllbmNlIGxldmVsOjwvbGFiZWw+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIGlkPVwic2tpbGxzLXNob3ctZXhwZXJpZW5jZS1zZWxlY3RcIlxuICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6M3B4IDZweDsgYm9yZGVyOjFweCBzb2xpZCAjY2JkNWUxOyBib3JkZXItcmFkaXVzOjRweDsgZm9udC1zaXplOjAuOWVtO1wiXG4gICAgICAgICAgICAgIHRpdGxlPVwiQ29udHJvbHMgd2hldGhlciB5ZWFycyBvZiBleHBlcmllbmNlIGFyZSBzaG93biBuZXh0IHRvIGVhY2ggc2tpbGwuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImluZGl2aWR1YWxcIj5JbmRpdmlkdWFsIHNldHRpbmc8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsd2F5c1wiPkFsd2F5czwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibmV2ZXJcIj5OZXZlcjwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwiYXBwbHktbGF5b3V0LXNldHRpbmdzLWJ0blwiIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiIHN0eWxlPVwicGFkZGluZzozcHggMTBweDsgZm9udC1zaXplOjAuODVlbTtcIj5BcHBseTwvYnV0dG9uPlxuICAgICAgICAgICAgPHNwYW4gaWQ9XCJsYXlvdXQtc2V0dGluZ3Mtc3RhdHVzXCIgc3R5bGU9XCJmb250LXNpemU6MC44ZW07IGNvbG9yOiM2NDc0OGI7XCI+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBpZD1cImluc3RydWN0aW9uLWlucHV0XCJcbiAgICAgICAgICAgIGNsYXNzPVwibGF5b3V0LWluc3RydWN0aW9uLXRleHRhcmVhXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiwgTW92ZSBQdWJsaWNhdGlvbnMgc2VjdGlvbiBhZnRlciBTa2lsbHMmIzEwO29yOiBTaG9ydGVuIHRoZSBzZWNvbmQgYnVsbGV0IHVuZGVyIEdlbmVudGVjaCB0byBmb2N1cyBvbiBpbXBhY3QmIzEwO29yOiBLZWVwIHRoZSBHZW5lbnRlY2ggZW50cnkgb24gb25lIHBhZ2VcIlxuICAgICAgICAgICAgcm93cz1cIjZcIj48L3RleHRhcmVhPlxuXG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImFwcGx5LWluc3RydWN0aW9uLWJ0blwiIGNsYXNzPVwiYnRuLXByaW1hcnkgbGF5b3V0LWFjdGlvbi1idG5cIj5cbiAgICAgICAgICAgIEFwcGx5XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uIGlkPVwiY29uZmlybS1sYXlvdXQtYnRuXCIgY2xhc3M9XCJjb250aW51ZS1idG4gbGF5b3V0LWFjdGlvbi1idG5cIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cbiAgICAgICAgICAgIENvbmZpcm0gTGF5b3V0XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8cCBpZD1cImxheW91dC10d28tc3RlcC1oaW50XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7Zm9udC1zaXplOjAuODJlbTtjb2xvcjojNmI3MjgwO21hcmdpbjo2cHggMCAycHg7XCI+XG4gICAgICAgICAgICBPbmNlIHRoZSBwcmV2aWV3IGxvb2tzIHJpZ2h0LCBjb25maXJtIHRoZSBsYXlvdXQgXHUyMDE0IHRoZW4gZ2VuZXJhdGUgeW91ciBmaW5hbCBzdWJtaXNzaW9uIGZpbGVzLlxuICAgICAgICAgIDwvcD5cblxuICAgICAgICAgIDxkaXYgaWQ9XCJwcm9jZXNzaW5nLWluZGljYXRvclwiIGNsYXNzPVwicHJvY2Vzc2luZy1pbmRpY2F0b3JcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PlxuICAgICAgICAgICAgPHA+QXBwbHlpbmcgaW5zdHJ1Y3Rpb24uLi48L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGlkPVwiY29uZmlybWF0aW9uLW1lc3NhZ2VcIiBjbGFzcz1cImNvbmZpcm1hdGlvbi1tZXNzYWdlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxheW91dC1oaXN0b3J5LXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxoND5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoaXN0b3J5LXRvZ2dsZVwiPlx1MjVCQzwvc3Bhbj5cbiAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gSGlzdG9yeSAoPHNwYW4gaWQ9XCJpbnN0cnVjdGlvbi1jb3VudFwiPjA8L3NwYW4+KVxuICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJpbnN0cnVjdGlvbi1oaXN0b3J5XCIgY2xhc3M9XCJpbnN0cnVjdGlvbi1oaXN0b3J5LWxpc3RcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxidXR0b24gaWQ9XCJwcm9jZWVkLXRvLWZpbmFsaXNlLWJ0blwiIGNsYXNzPVwiY29udGludWUtYnRuIGxheW91dC1hY3Rpb24tYnRuXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuICAgICAgICAgICAgR2VuZXJhdGUgRmluYWwgRmlsZXNcbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxkaXYgaWQ9XCJjb250ZW50LXByb3Bvc2FsLXByb2Nlc3NpbmdcIiBjbGFzcz1cInByb2Nlc3NpbmctaW5kaWNhdG9yXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PlxuICAgICAgICAgICAgPHA+R2VuZXJhdGluZyBjb250ZW50IHByb3Bvc2Fsc1x1MjAyNjwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGlkPVwiY29udGVudC1wcm9wb3NhbHMtcGFuZWxcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj48L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYXBwbHktY29udGVudC1jaGFuZ2VzLWJ0blwiIGNsYXNzPVwiYnRuLXdhcm5pbmcgbGF5b3V0LWFjdGlvbi1idG5cIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cbiAgICAgICAgICAgIEFwcGx5IEFwcHJvdmVkIENoYW5nZXNcbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxkaXYgaWQ9XCJkaXJ0eS1waGFzZXMtY2FsbG91dFwiIGNsYXNzPVwiZGlydHktcGhhc2VzLWNhbGxvdXRcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cbiAgICAgICAgICAgIDxoND5cdTI2QTAgQ29udGVudCBDaGFuZ2VkIFx1MjAxNCBSZS1ydW4gUmVxdWlyZWQ8L2g0PlxuICAgICAgICAgICAgPHA+VGV4dCBlZGl0cyBoYXZlIGJlZW4gc3RhZ2VkLiBUaGUgY3VycmVudCBwcmV2aWV3IG5vIGxvbmdlciByZWZsZWN0cyB0aGUgdXBkYXRlZCBjb250ZW50LjwvcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtc3RhbGUtY2FsbG91dC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJyZXR1cm4tdG8tZWFybGllc3QtZGlydHktYnRuXCIgY2xhc3M9XCJidG4td2FybmluZyBsYXlvdXQtYWN0aW9uLWJ0blwiPlx1MjFCQiBSZXR1cm4gdG8gR2VuZXJhdGUgQ1Y8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG5cbiAgICAvLyBXaXJlIHVwIGV2ZW50IGxpc3RlbmVyc1xuICAgIHNldHVwTGF5b3V0SW5zdHJ1Y3Rpb25MaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8vIFJlc3RvcmUgc2F2ZWQgZm9udCBzaXplIGZyb20gc2Vzc2lvbiBzdGF0ZSBpZiBhdmFpbGFibGVcbiAgY29uc3Qgc2F2ZWRGb250U2l6ZSA9IHN0YXRlTWFuYWdlcj8uZ2V0U2Vzc2lvblN0YXRlPy4oKT8uYmFzZV9mb250X3NpemU7XG4gIGlmIChzYXZlZEZvbnRTaXplKSB7XG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFzZS1mb250LXNpemUtaW5wdXQnKTtcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIGNvbnN0IHB4ID0gcGFyc2VGbG9hdChzYXZlZEZvbnRTaXplKSB8fCAxMztcbiAgICAgIGlucHV0LnZhbHVlID0gcHg7XG4gICAgICBjb25zdCBwdERpc3BsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9udC1zaXplLXB0LWRpc3BsYXknKTtcbiAgICAgIGlmIChwdERpc3BsYXkpIHB0RGlzcGxheS50ZXh0Q29udGVudCA9IGBweFxcdTAwYTAoJHtweFRvUHQocHgpfVxcdTAwYTBwdClgO1xuICAgIH1cbiAgfVxuICBjb25zdCBzYXZlZFBhZ2VNYXJnaW4gPSBzdGF0ZU1hbmFnZXI/LmdldFNlc3Npb25TdGF0ZT8uKCk/LnBhZ2VfbWFyZ2luO1xuICBpZiAoc2F2ZWRQYWdlTWFyZ2luKSB7XG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZS1tYXJnaW4taW5wdXQnKTtcbiAgICBpZiAoaW5wdXQpIGlucHV0LnZhbHVlID0gcGFyc2VGbG9hdChzYXZlZFBhZ2VNYXJnaW4pIHx8IDAuNTtcbiAgfVxuICBjb25zdCBwdWJsaWNhdGlvbnNTdGFydElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1YmxpY2F0aW9ucy1zdGFydC1uZXctcGFnZS1pbnB1dCcpO1xuICBpZiAocHVibGljYXRpb25zU3RhcnRJbnB1dCkge1xuICAgIGNvbnN0IHNlc3Npb25TdGF0ZSA9IHN0YXRlTWFuYWdlcj8uZ2V0U2Vzc2lvblN0YXRlPy4oKSB8fCB7fTtcbiAgICBjb25zdCBjdXN0b21pemF0aW9uU3RhdGUgPSBzdGF0ZU1hbmFnZXI/LmdldFRhYkRhdGE/LignY3VzdG9taXphdGlvbnMnKSB8fCB7fTtcbiAgICBjb25zdCBzYXZlZFB1YmxpY2F0aW9uc1N0YXJ0ID1cbiAgICAgIHNlc3Npb25TdGF0ZS5wdWJsaWNhdGlvbnNfc3RhcnRfbmV3X3BhZ2VcbiAgICAgID8/IHNlc3Npb25TdGF0ZT8uY3VzdG9taXphdGlvbnM/LnB1YmxpY2F0aW9uc19zdGFydF9uZXdfcGFnZVxuICAgICAgPz8gY3VzdG9taXphdGlvblN0YXRlLnB1YmxpY2F0aW9uc19zdGFydF9uZXdfcGFnZVxuICAgICAgPz8gY3VzdG9taXphdGlvblN0YXRlLnB1YmxpY2F0aW9uc19wYWdlX2JyZWFrXG4gICAgICA/PyBjdXN0b21pemF0aW9uU3RhdGUuc3RhcnRfcHVibGljYXRpb25zX29uX25ld19wYWdlXG4gICAgICA/PyBmYWxzZTtcbiAgICBwdWJsaWNhdGlvbnNTdGFydElucHV0LmNoZWNrZWQgPSBjb2VyY2VCb29sZWFuKHNhdmVkUHVibGljYXRpb25zU3RhcnQsIGZhbHNlKTtcbiAgfVxuICBjb25zdCBza2lsbHNTaG93RXhwZXJpZW5jZVNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbHMtc2hvdy1leHBlcmllbmNlLXNlbGVjdCcpO1xuICBpZiAoc2tpbGxzU2hvd0V4cGVyaWVuY2VTZWxlY3QpIHtcbiAgICBjb25zdCBzZXNzaW9uU3RhdGUgPSBzdGF0ZU1hbmFnZXI/LmdldFNlc3Npb25TdGF0ZT8uKCkgfHwge307XG4gICAgY29uc3QgY3VzdG9taXphdGlvblN0YXRlID0gc3RhdGVNYW5hZ2VyPy5nZXRUYWJEYXRhPy4oJ2N1c3RvbWl6YXRpb25zJykgfHwge307XG4gICAgY29uc3Qgc2F2ZWRTa2lsbHNFeHAgPVxuICAgICAgc2Vzc2lvblN0YXRlLnNraWxsc19zaG93X2V4cGVyaWVuY2VcbiAgICAgID8/IHNlc3Npb25TdGF0ZT8uY3VzdG9taXphdGlvbnM/LnNraWxsc19zaG93X2V4cGVyaWVuY2VcbiAgICAgID8/IGN1c3RvbWl6YXRpb25TdGF0ZS5za2lsbHNfc2hvd19leHBlcmllbmNlXG4gICAgICA/PyAnaW5kaXZpZHVhbCc7XG4gICAgY29uc3QgdmFsaWQgPSBbJ2Fsd2F5cycsICduZXZlcicsICdpbmRpdmlkdWFsJ107XG4gICAgc2tpbGxzU2hvd0V4cGVyaWVuY2VTZWxlY3QudmFsdWUgPSB2YWxpZC5pbmNsdWRlcyhzYXZlZFNraWxsc0V4cCkgPyBzYXZlZFNraWxsc0V4cCA6ICdpbmRpdmlkdWFsJztcbiAgfVxuXG4gIHJlbmRlclByZXZpZXdPdXRwdXRTdGF0dXMoZ2V0UHJldmlld091dHB1dHMoKSk7XG5cbiAgLy8gTG9hZCBhbmQgZGlzcGxheSBjdXJyZW50IEhUTUwgcHJldmlldyB2aWEgdGhlIHN0YWdlZCBnZW5lcmF0aW9uIGNvbnRyYWN0LlxuICAvLyAvYXBpL2N2L2dlbmVyYXRlLXByZXZpZXcgZ2VuZXJhdGVzIGZyZXNoIEhUTUwgYW5kIHN0b3JlcyBpdCBpbiBzZXNzaW9uIHN0YXRlLlxuICAvLyBGYWxsIGJhY2sgdG8gdGhlIGxlZ2FjeSAvYXBpL2xheW91dC1odG1sIGVuZHBvaW50IGlmIHRoZSBzZXNzaW9uIGhhcyBub1xuICAvLyBjdXN0b21pemF0aW9uIGRhdGEgeWV0IChlLmcuIHNlc3Npb24gcmVzdG9yZWQgYWZ0ZXIgZnVsbCBnZW5lcmF0aW9uKS5cbiAgY29uc3QgY2FjaGVkSHRtbCA9IGdldEN2QXJ0aWZhY3RzKClbJyouaHRtbCddIHx8ICcnO1xuICBpZiAoY2FjaGVkSHRtbCkge1xuICAgIGRpc3BsYXlMYXlvdXRQcmV2aWV3KGNhY2hlZEh0bWwpO1xuICB9IGVsc2Uge1xuICAgIF9mZXRjaEFuZERpc3BsYXlMYXlvdXRQcmV2aWV3KCk7XG4gIH1cblxuICAvLyBSZXN0b3JlIGFueSBwcmlvciBpbnN0cnVjdGlvbnMgZnJvbSBzZXNzaW9uXG4gIGF3YWl0IHJlc3RvcmVJbnN0cnVjdGlvbkhpc3RvcnkoKTtcbiAgcmVmcmVzaExheW91dFJldmlld1N0YXRlKCk7XG5cbiAgLy8gU2hvdyBhIHByb2FjdGl2ZSBwYWdlLWxlbmd0aCBlc3RpbWF0ZSBzbyB1c2VycyBjYW4gYWRqdXN0IGNvbnRlbnQgYmVmb3JlIGdlbmVyYXRpbmdcbiAgX2ZldGNoUGFnZUVzdGltYXRlKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9mZXRjaFBhZ2VFc3RpbWF0ZSgpIHtcbiAgY29uc3QgYmFubmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheW91dC1wYWdlLWVzdGltYXRlJyk7XG4gIGlmICghYmFubmVyKSByZXR1cm47XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvZXN0aW1hdGUtcGFnZXMnKTtcbiAgICBpZiAoIXJlcy5vaykgcmV0dXJuO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmICghZGF0YS5vayB8fCAhZGF0YS5lc3RpbWF0ZWRfcGFnZXMpIHJldHVybjtcbiAgICBjb25zdCBwYWdlcyA9IGRhdGEuZXN0aW1hdGVkX3BhZ2VzO1xuICAgIGNvbnN0IGlzT3ZlciA9IHBhZ2VzID4gMztcbiAgICBjb25zdCBjb2xvciA9IGlzT3ZlciA/ICcjOTI0MDBlJyA6ICcjMTY2NTM0JztcbiAgICBjb25zdCBiZyAgICA9IGlzT3ZlciA/ICcjZmVmM2M3JyA6ICcjZjBmZGY0JztcbiAgICBjb25zdCBib3JkZXIgPSBpc092ZXIgPyAnI2ZjZDM0ZCcgOiAnI2JiZjdkMCc7XG4gICAgY29uc3QgbXNnICAgPSBpc092ZXJcbiAgICAgID8gYFx1MjZBMCBFc3RpbWF0ZWQgfiR7cGFnZXN9IHBhZ2VzIFx1MjAxNCBzZW5pb3IgY2FuZGlkYXRlIHRhcmdldCBpcyAyXHUyMDEzMyBwYWdlcy4gQ29uc2lkZXIgcmVkdWNpbmcgc2VsZWN0ZWQgYnVsbGV0IHBvaW50cyBiZWZvcmUgZ2VuZXJhdGluZy5gXG4gICAgICA6IGBcdTI3MTMgRXN0aW1hdGVkIH4ke3BhZ2VzfSBwYWdlcyBcdTIwMTQgd2l0aGluIHRoZSAyXHUyMDEzMyBwYWdlIHRhcmdldCBmb3Igc2VuaW9yIGNhbmRpZGF0ZXMuYDtcbiAgICBiYW5uZXIuc3R5bGUuY3NzVGV4dCA9IGBkaXNwbGF5OmJsb2NrO3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyOjFweCBzb2xpZCAke2JvcmRlcn07YmFja2dyb3VuZDoke2JnfTtjb2xvcjoke2NvbG9yfTtmb250LXNpemU6MC44N2VtO2A7XG4gICAgYmFubmVyLnRleHRDb250ZW50ID0gbXNnO1xuICB9IGNhdGNoIChfKSB7IC8qIHNpbGVudCBcdTIwMTQgbm9uLWNyaXRpY2FsICovIH1cbn1cblxuLyoqXG4gKiBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzIGZvciBsYXlvdXQgaW5zdHJ1Y3Rpb24gVUkuXG4gKi9cbmZ1bmN0aW9uIHNldHVwTGF5b3V0SW5zdHJ1Y3Rpb25MaXN0ZW5lcnMoKSB7XG4gIGNvbnN0IGFwcGx5QnRuICAgICAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcGx5LWluc3RydWN0aW9uLWJ0bicpO1xuICBjb25zdCBjb25maXJtQnRuICAgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtLWxheW91dC1idG4nKTtcbiAgY29uc3QgcHJvY2VlZEJ0biAgICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvY2VlZC10by1maW5hbGlzZS1idG4nKTtcbiAgY29uc3QgcmVnZW5lcmF0ZUJ0biAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVnZW5lcmF0ZS1sYXlvdXQtcHJldmlldy1idG4nKTtcbiAgY29uc3QgZGlzbWlzc0NhbGxvdXRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGlzbWlzcy1sYXlvdXQtc3RhbGUtYnRuJyk7XG4gIGNvbnN0IGluc3RydWN0aW9uSW5wdXQgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luc3RydWN0aW9uLWlucHV0Jyk7XG4gIGNvbnN0IGhpc3RvcnlUb2dnbGUgICAgID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmhpc3RvcnktdG9nZ2xlJyk7XG4gIGNvbnN0IGFwcGx5U2V0dGluZ3NCdG4gID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcGx5LWxheW91dC1zZXR0aW5ncy1idG4nKTtcbiAgY29uc3QgZm9udFNpemVJbnB1dCAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFzZS1mb250LXNpemUtaW5wdXQnKTtcbiAgY29uc3QgcGFnZU1hcmdpbklucHV0ICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZS1tYXJnaW4taW5wdXQnKTtcbiAgY29uc3QgcHVibGljYXRpb25zU3RhcnRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWJsaWNhdGlvbnMtc3RhcnQtbmV3LXBhZ2UtaW5wdXQnKTtcbiAgY29uc3Qgc2tpbGxzU2hvd0V4cGVyaWVuY2VTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGxzLXNob3ctZXhwZXJpZW5jZS1zZWxlY3QnKTtcblxuICBpZiAoYXBwbHlTZXR0aW5nc0J0biAmJiBmb250U2l6ZUlucHV0ICYmIHBhZ2VNYXJnaW5JbnB1dCAmJiBwdWJsaWNhdGlvbnNTdGFydElucHV0KSB7XG4gICAgYXBwbHlTZXR0aW5nc0J0bi5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgICgpID0+IGFwcGx5TGF5b3V0U2V0dGluZ3MoXG4gICAgICAgIGZvbnRTaXplSW5wdXQudmFsdWUsXG4gICAgICAgIHBhZ2VNYXJnaW5JbnB1dC52YWx1ZSxcbiAgICAgICAgcHVibGljYXRpb25zU3RhcnRJbnB1dC5jaGVja2VkLFxuICAgICAgICBza2lsbHNTaG93RXhwZXJpZW5jZVNlbGVjdD8udmFsdWUgfHwgJ2luZGl2aWR1YWwnLFxuICAgICAgKSxcbiAgICApO1xuICAgIGZvbnRTaXplSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBwdERpc3BsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9udC1zaXplLXB0LWRpc3BsYXknKTtcbiAgICAgIGlmIChwdERpc3BsYXkpIHtcbiAgICAgICAgY29uc3QgcHggPSBwYXJzZUZsb2F0KGZvbnRTaXplSW5wdXQudmFsdWUpO1xuICAgICAgICBwdERpc3BsYXkudGV4dENvbnRlbnQgPSBpc05hTihweCkgPyAncHgnIDogYHB4XFx1MDBhMCgke3B4VG9QdChweCl9XFx1MDBhMHB0KWA7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9udFNpemVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIChlKSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgYXBwbHlMYXlvdXRTZXR0aW5ncyhcbiAgICAgICAgICBmb250U2l6ZUlucHV0LnZhbHVlLFxuICAgICAgICAgIHBhZ2VNYXJnaW5JbnB1dC52YWx1ZSxcbiAgICAgICAgICBwdWJsaWNhdGlvbnNTdGFydElucHV0LmNoZWNrZWQsXG4gICAgICAgICAgc2tpbGxzU2hvd0V4cGVyaWVuY2VTZWxlY3Q/LnZhbHVlIHx8ICdpbmRpdmlkdWFsJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBwYWdlTWFyZ2luSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCAoZSkgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGFwcGx5TGF5b3V0U2V0dGluZ3MoXG4gICAgICAgICAgZm9udFNpemVJbnB1dC52YWx1ZSxcbiAgICAgICAgICBwYWdlTWFyZ2luSW5wdXQudmFsdWUsXG4gICAgICAgICAgcHVibGljYXRpb25zU3RhcnRJbnB1dC5jaGVja2VkLFxuICAgICAgICAgIHNraWxsc1Nob3dFeHBlcmllbmNlU2VsZWN0Py52YWx1ZSB8fCAnaW5kaXZpZHVhbCcsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoYXBwbHlCdG4pIHtcbiAgICBhcHBseUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIGNvbnN0IGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25JbnB1dC52YWx1ZS50cmltKCk7XG4gICAgICBpZiAoIWluc3RydWN0aW9uKSB7XG4gICAgICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsICdcdTI2QTBcdUZFMEYgUGxlYXNlIGVudGVyIGFuIGluc3RydWN0aW9uIGJlZm9yZSBzdWJtaXR0aW5nLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzdWJtaXRTbWFydEluc3RydWN0aW9uKGluc3RydWN0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjb25maXJtQnRuKSB7XG4gICAgY29uZmlybUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNvbmZpcm1MYXlvdXRSZXZpZXcpO1xuICB9XG5cbiAgaWYgKHByb2NlZWRCdG4pIHtcbiAgICBwcm9jZWVkQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZ2VuZXJhdGVGaW5hbE91dHB1dHMpO1xuICB9XG5cbiAgaWYgKHJlZ2VuZXJhdGVCdG4pIHtcbiAgICByZWdlbmVyYXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlUmVnZW5lcmF0ZVByZXZpZXdBY3Rpb24pO1xuICB9XG5cbiAgaWYgKGRpc21pc3NDYWxsb3V0QnRuKSB7XG4gICAgZGlzbWlzc0NhbGxvdXRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICBkaXNtaXNzZWRTdGFsZUNhbGxvdXRSZXZpc2lvbiA9IGdldEN1cnJlbnRDb250ZW50UmV2aXNpb24oKTtcbiAgICAgIHJlbmRlckxheW91dFN0YWxlQ2FsbG91dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGhpc3RvcnlUb2dnbGUpIHtcbiAgICBoaXN0b3J5VG9nZ2xlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICAgIGUudGFyZ2V0LnRleHRDb250ZW50ID0gZS50YXJnZXQudGV4dENvbnRlbnQgPT09ICdcdTI1QkMnID8gJ1x1MjVCNicgOiAnXHUyNUJDJztcbiAgICAgIGNvbnN0IGhpc3RvcnlMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luc3RydWN0aW9uLWhpc3RvcnknKTtcbiAgICAgIGlmIChoaXN0b3J5TGlzdCkge1xuICAgICAgICBoaXN0b3J5TGlzdC5jbGFzc0xpc3QudG9nZ2xlKCdjb2xsYXBzZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIEFsbG93IEVudGVyIGtleSB0byBzdWJtaXQgaW4gdGV4dGFyZWEgKFNoaWZ0K0VudGVyIGZvciBuZXcgbGluZSlcbiAgaWYgKGluc3RydWN0aW9uSW5wdXQpIHtcbiAgICBpbnN0cnVjdGlvbklucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgKGUpID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGFwcGx5QnRuPy5jbGljaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ29udGVudCBwcm9wb3NhbCBhbmQgZGlydHktcGhhc2UgYnV0dG9uc1xuICBjb25zdCBhcHBseUNvbnRlbnRDaGFuZ2VzQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcGx5LWNvbnRlbnQtY2hhbmdlcy1idG4nKTtcbiAgY29uc3QgcmV0dXJuVG9EaXJ0eUJ0biAgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXR1cm4tdG8tZWFybGllc3QtZGlydHktYnRuJyk7XG5cbiAgaWYgKGFwcGx5Q29udGVudENoYW5nZXNCdG4pIHtcbiAgICBhcHBseUNvbnRlbnRDaGFuZ2VzQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXBwbHlBY2NlcHRlZFByb3Bvc2Fscyk7XG4gIH1cblxuICBpZiAocmV0dXJuVG9EaXJ0eUJ0bikge1xuICAgIHJldHVyblRvRGlydHlCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdGVwID0gc3RhdGVNYW5hZ2VyLmdldEVhcmxpZXN0RGlydHlTdGVwKCkgfHwgJ2dlbmVyYXRlJztcbiAgICAgIGNvbmZpcm1SZVJ1blBoYXNlKHN0ZXApO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogU2F2ZSBsYXlvdXQgZGlzcGxheSBzZXR0aW5ncyB0byBzZXNzaW9uIHN0YXRlLCB0aGVuIHJlLXJlbmRlciB0aGUgcHJldmlldy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXBwbHlMYXlvdXRTZXR0aW5ncyhmb250U2l6ZVZhbHVlLCBwYWdlTWFyZ2luVmFsdWUsIHB1YmxpY2F0aW9uc1N0YXJ0TmV3UGFnZSA9IGZhbHNlLCBza2lsbHNTaG93RXhwZXJpZW5jZSA9ICdpbmRpdmlkdWFsJykge1xuICBjb25zdCBzdGF0dXNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXlvdXQtc2V0dGluZ3Mtc3RhdHVzJyk7XG4gIGNvbnN0IHBhcnNlZEZvbnRTaXplID0gcGFyc2VGbG9hdChmb250U2l6ZVZhbHVlKTtcbiAgY29uc3QgcGFyc2VkUGFnZU1hcmdpbiA9IHBhcnNlRmxvYXQocGFnZU1hcmdpblZhbHVlKTtcbiAgaWYgKGlzTmFOKHBhcnNlZEZvbnRTaXplKSB8fCBwYXJzZWRGb250U2l6ZSA8IDYgfHwgcGFyc2VkRm9udFNpemUgPiAxNikge1xuICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnXHUyNkEwXHVGRTBGIEZvbnQgbXVzdCBiZSA2XHUyMDEzMTYnO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaXNOYU4ocGFyc2VkUGFnZU1hcmdpbikgfHwgcGFyc2VkUGFnZU1hcmdpbiA8IDAuNSB8fCBwYXJzZWRQYWdlTWFyZ2luID4gMS41KSB7XG4gICAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdcdTI2QTBcdUZFMEYgTWFyZ2luIG11c3QgYmUgMC41XHUyMDEzMS41JztcbiAgICByZXR1cm47XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ1NhdmluZ1x1MjAyNic7XG4gICAgY29uc3Qgc2F2ZVJlcyA9IGF3YWl0IGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9sYXlvdXQtc2V0dGluZ3MnLCB7XG4gICAgICBiYXNlX2ZvbnRfc2l6ZTogYCR7cGFyc2VkRm9udFNpemV9cHhgLFxuICAgICAgcGFnZV9tYXJnaW46IGAke3BhcnNlZFBhZ2VNYXJnaW59aW5gLFxuICAgICAgcHVibGljYXRpb25zX3N0YXJ0X25ld19wYWdlOiBCb29sZWFuKHB1YmxpY2F0aW9uc1N0YXJ0TmV3UGFnZSksXG4gICAgICBza2lsbHNfc2hvd19leHBlcmllbmNlOiBza2lsbHNTaG93RXhwZXJpZW5jZSxcbiAgICB9KTtcbiAgICBpZiAoIXNhdmVSZXMub2spIHRocm93IG5ldyBFcnJvcihzYXZlUmVzLmVycm9yIHx8ICdzYXZlIGZhaWxlZCcpO1xuXG4gICAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdSZS1yZW5kZXJpbmdcdTIwMjYnO1xuICAgIGNvbnN0IHByZXZpZXdSZXMgPSBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvY3YvZ2VuZXJhdGUtcHJldmlldycsIHsgY29udGVudF9yZXZpc2lvbjogZ2V0Q3VycmVudENvbnRlbnRSZXZpc2lvbigpIH0pO1xuICAgIGlmIChwcmV2aWV3UmVzLm9rICYmIHByZXZpZXdSZXMuaHRtbCkge1xuICAgICAgZGlzcGxheUxheW91dFByZXZpZXcocHJldmlld1Jlcy5odG1sKTtcbiAgICAgIHNldFByZXZpZXdIdG1sKHByZXZpZXdSZXMuaHRtbCk7XG4gICAgICBkaXNtaXNzZWRTdGFsZUNhbGxvdXRSZXZpc2lvbiA9IG51bGw7XG4gICAgICBzdGF0ZU1hbmFnZXI/Lm1hcmtQcmV2aWV3R2VuZXJhdGVkPy4oe1xuICAgICAgICBwcmV2aWV3QXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBwcmV2aWV3T3V0cHV0czogcHJldmlld1Jlcy5wcmV2aWV3X291dHB1dHMgfHwgbnVsbCxcbiAgICAgICAgcGFnZUNvdW50RXN0aW1hdGU6IHByZXZpZXdSZXMucGFnZV9jb3VudF9lc3RpbWF0ZSA/PyBudWxsLFxuICAgICAgICBwYWdlQ291bnRFeGFjdDogcHJldmlld1Jlcy5wYWdlX2NvdW50X2V4YWN0ID8/IG51bGwsXG4gICAgICAgIHBhZ2VDb3VudENvbmZpZGVuY2U6IHByZXZpZXdSZXMucGFnZV9jb3VudF9jb25maWRlbmNlID8/IG51bGwsXG4gICAgICAgIHBhZ2VDb3VudFNvdXJjZTogcHJldmlld1Jlcy5wYWdlX2NvdW50X3NvdXJjZSB8fCBudWxsLFxuICAgICAgICBwYWdlV2FybmluZzogQm9vbGVhbihwcmV2aWV3UmVzLnBhZ2VfbGVuZ3RoX3dhcm5pbmcpLFxuICAgICAgICBwcmV2aWV3R2VuZXJhdGVkQXQ6IHByZXZpZXdSZXMucHJldmlld19nZW5lcmF0ZWRfYXQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBwcmV2aWV3UmVxdWVzdElkOiBwcmV2aWV3UmVzLnByZXZpZXdfcmVxdWVzdF9pZCB8fCBudWxsLFxuICAgICAgfSk7XG4gICAgICByZW5kZXJQcmV2aWV3T3V0cHV0U3RhdHVzKHByZXZpZXdSZXMucHJldmlld19vdXRwdXRzIHx8IG51bGwpO1xuICAgICAgcmVmcmVzaExheW91dFJldmlld1N0YXRlKCk7XG4gICAgICAocHJldmlld1Jlcy5jb250ZW50X3dhcm5pbmdzIHx8IFtdKS5mb3JFYWNoKHcgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgc2hvd1RvYXN0KHcubWVzc2FnZSwgJ3dhcm5pbmcnLCA4MDAwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzRWwpIHsgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnXHUyNzA1IEFwcGxpZWQnOyBzZXRUaW1lb3V0KCgpID0+IHsgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnJzsgfSwgMjAwMCk7IH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9IGBcdTI3NEMgRmFpbGVkIHRvIGFwcGx5IFx1MjAxNCB0cnkgYWdhaW4gb3IgcmVmcmVzaC5gO1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdTI3NEMgQ291bGQgbm90IGFwcGx5IHRoZSBpbnN0cnVjdGlvbi4gVHJ5IHJlcGhyYXNpbmcgaXQgb3IgcmVmcmVzaCB0aGUgcGFnZSBpZiB0aGUgcHJvYmxlbSBwZXJzaXN0cy5gKTtcbiAgfVxufVxuXG4vKipcbiAqIFN1Ym1pdCBhbiBpbnN0cnVjdGlvbiB0aHJvdWdoIHRoZSB1bmlmaWVkIHNtYXJ0LWluc3RydWN0aW9uIGVuZHBvaW50LlxuICogVGhlIGJhY2tlbmQgY2xhc3NpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gYXMgbGF5b3V0IG9yIGNvbnRlbnQgYW5kIGRlbGVnYXRlc1xuICogdG8gdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXIuIFRoZSByZXNwb25zZSBpcyByb3V0ZWQgYWNjb3JkaW5nbHkgaGVyZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3VibWl0U21hcnRJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRleHQpIHtcbiAgY29uc3QgY3VycmVudEh0bWwgPSBnZXRDdkFydGlmYWN0cygpWycqLmh0bWwnXSB8fCAnJztcbiAgLy8gU25hcHNob3Qgc3RhdGUgZm9yIHVuZG8gYmVmb3JlIGFwcGx5aW5nLlxuICBfbGF5b3V0VW5kb1N0YWNrLnB1c2goe1xuICAgIGh0bWw6IGN1cnJlbnRIdG1sLFxuICAgIGluc3RydWN0aW9uczogKHdpbmRvdy5sYXlvdXRJbnN0cnVjdGlvbnMgfHwgW10pLm1hcChpID0+ICh7IC4uLmkgfSkpLFxuICB9KTtcbiAgaWYgKF9sYXlvdXRVbmRvU3RhY2subGVuZ3RoID4gX1VORE9fU1RBQ0tfTUFYKSB7XG4gICAgX2xheW91dFVuZG9TdGFjay5zaGlmdCgpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBzaG93UHJvY2Vzc2luZyh0cnVlKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9jdi9zbWFydC1pbnN0cnVjdGlvbicsIHsgaW5zdHJ1Y3Rpb246IGluc3RydWN0aW9uVGV4dCB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGlmIChyZXNwb25zZS5lcnJvciA9PT0gJ2NsYXJpZnknKSB7XG4gICAgICAgIHNob3dDbGFyaWZpY2F0aW9uRGlhbG9nKHJlc3BvbnNlLnF1ZXN0aW9uLCBpbnN0cnVjdGlvblRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXBwZW5kTGF5b3V0U2FmZXR5QWxlcnQocmVzcG9uc2Uuc2FmZXR5X2FsZXJ0KTtcbiAgICAgICAgbGV0IGVycm9ySHRtbCA9IGBcdTI2QTBcdUZFMEYgRXJyb3I6ICR7ZXNjYXBlSHRtbChyZXNwb25zZS5lcnJvcil9IFx1MjAxNCAke2VzY2FwZUh0bWwocmVzcG9uc2UuZGV0YWlscyB8fCAnJyl9YDtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJhd19yZXNwb25zZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXJyb3JIdG1sICs9IGA8YnI+PGRldGFpbHMgc3R5bGU9XCJtYXJnaW4tdG9wOjZweFwiPjxzdW1tYXJ5IHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjAuODVlbTtjb2xvcjojNjQ3NDhiXCI+UmF3IExMTSByZXNwb25zZTwvc3VtbWFyeT48cHJlIHN0eWxlPVwiZm9udC1zaXplOjAuNzVlbTt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3b3JkLWJyZWFrOmJyZWFrLWFsbDttYXgtaGVpZ2h0OjIwMHB4O292ZXJmbG93LXk6YXV0bztiYWNrZ3JvdW5kOiNmOGZhZmM7Ym9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6OHB4O21hcmdpbi10b3A6NHB4XCI+JHtlc2NhcGVIdG1sKHJlc3BvbnNlLnJhd19yZXNwb25zZSB8fCAnKGVtcHR5KScpfTwvcHJlPjwvZGV0YWlscz5gO1xuICAgICAgICB9XG4gICAgICAgIGFwcGVuZE1lc3NhZ2VIdG1sKCdzeXN0ZW0nLCBlcnJvckh0bWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RydWN0aW9uVHlwZSA9IHJlc3BvbnNlLmluc3RydWN0aW9uX3R5cGUgfHwgJ2xheW91dCc7XG5cbiAgICBpZiAoaW5zdHJ1Y3Rpb25UeXBlID09PSAnY29udGVudCcpIHtcbiAgICAgIC8vIENvbnRlbnQgcGF0aDogcmVuZGVyIHByb3Bvc2FscyBmb3IgcmV2aWV3XG4gICAgICBjb25zdCBwcm9wb3NhbHMgPSByZXNwb25zZS5wcm9wb3NhbHMgfHwgW107XG4gICAgICBpZiAocHJvcG9zYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHUyNkEwXHVGRTBGIE5vIGNvbnRlbnQgcHJvcG9zYWxzIHdlcmUgZ2VuZXJhdGVkLiBUcnkgcmVwaHJhc2luZyB5b3VyIGluc3RydWN0aW9uLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVuZGVyQ29udGVudFByb3Bvc2Fscyhwcm9wb3NhbHMpO1xuICAgICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50LXByb3Bvc2Fscy1wYW5lbCcpO1xuICAgICAgICBpZiAocGFuZWwpIHBhbmVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luc3RydWN0aW9uLWlucHV0JykudmFsdWUgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBMYXlvdXQgcGF0aDogdXBkYXRlIHByZXZpZXdcbiAgICBjb25zdCBuZXdIdG1sID0gcmVzcG9uc2UuaHRtbDtcbiAgICBkaXNwbGF5TGF5b3V0UHJldmlldyhuZXdIdG1sKTtcbiAgICBhcHBlbmRMYXlvdXRTYWZldHlBbGVydChyZXNwb25zZS5zYWZldHlfYWxlcnQpO1xuICAgIHNldFByZXZpZXdIdG1sKG5ld0h0bWwpO1xuICAgIGRpc21pc3NlZFN0YWxlQ2FsbG91dFJldmlzaW9uID0gbnVsbDtcbiAgICBzdGF0ZU1hbmFnZXI/Lm1hcmtQcmV2aWV3R2VuZXJhdGVkPy4oe1xuICAgICAgcHJldmlld0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHByZXZpZXdPdXRwdXRzOiByZXNwb25zZS5wcmV2aWV3X291dHB1dHMgfHwgbnVsbCxcbiAgICAgIGxheW91dENvbmZpcm1lZDogZmFsc2UsXG4gICAgICBwYWdlQ291bnRFc3RpbWF0ZTogcmVzcG9uc2UucGFnZV9jb3VudF9lc3RpbWF0ZSA/PyBudWxsLFxuICAgICAgcGFnZUNvdW50RXhhY3Q6IHJlc3BvbnNlLnBhZ2VfY291bnRfZXhhY3QgPz8gbnVsbCxcbiAgICAgIHBhZ2VDb3VudENvbmZpZGVuY2U6IHJlc3BvbnNlLnBhZ2VfY291bnRfY29uZmlkZW5jZSA/PyBudWxsLFxuICAgICAgcGFnZUNvdW50U291cmNlOiByZXNwb25zZS5wYWdlX2NvdW50X3NvdXJjZSB8fCBudWxsLFxuICAgICAgcGFnZVdhcm5pbmc6IEJvb2xlYW4ocmVzcG9uc2UucGFnZV9sZW5ndGhfd2FybmluZyksXG4gICAgICBwcmV2aWV3R2VuZXJhdGVkQXQ6IHJlc3BvbnNlLnByZXZpZXdfZ2VuZXJhdGVkX2F0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHByZXZpZXdSZXF1ZXN0SWQ6IHJlc3BvbnNlLnByZXZpZXdfcmVxdWVzdF9pZCB8fCBudWxsLFxuICAgIH0pO1xuICAgIHJlbmRlclByZXZpZXdPdXRwdXRTdGF0dXMocmVzcG9uc2UucHJldmlld19vdXRwdXRzIHx8IG51bGwpO1xuXG4gICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9Mb2NhbGVUaW1lU3RyaW5nKCksXG4gICAgICBpbnN0cnVjdGlvbl90ZXh0OiBpbnN0cnVjdGlvblRleHQsXG4gICAgICBjaGFuZ2Vfc3VtbWFyeTogcmVzcG9uc2Uuc3VtbWFyeSxcbiAgICAgIGNvbmZpcm1hdGlvbjogdHJ1ZSxcbiAgICB9O1xuICAgIGFkZFRvSW5zdHJ1Y3Rpb25IaXN0b3J5KGluc3RydWN0aW9uKTtcbiAgICBzaG93Q29uZmlybWF0aW9uTWVzc2FnZShgJHtyZXNwb25zZS5zYWZldHlfYWxlcnQ/LmZsYWdnZWQgPyAnXHUyNkEwXHVGRTBGICcgOiAnXHUyNzA1ICd9JHtyZXNwb25zZS5zdW1tYXJ5fWApO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnN0cnVjdGlvbi1pbnB1dCcpLnZhbHVlID0gJyc7XG4gICAgcmVmcmVzaExheW91dFJldmlld1N0YXRlKCk7XG5cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHUyNzRDIENvdWxkIG5vdCBhcHBseSB0aGUgaW5zdHJ1Y3Rpb24uIFRyeSByZXBocmFzaW5nIGl0LCBvciBjbGljayBcIlJlZ2VuZXJhdGUgUHJldmlld1wiIHRvIHJlc2V0IHRoZSBwcmV2aWV3IGFuZCB0cnkgYWdhaW4uYCk7XG4gIH0gZmluYWxseSB7XG4gICAgc2hvd1Byb2Nlc3NpbmcoZmFsc2UpO1xuICB9XG59XG5cbi8qKlxuICogU3VibWl0IGxheW91dCBpbnN0cnVjdGlvbiB0byBiYWNrZW5kIGZvciBwcm9jZXNzaW5nLlxuICpcbiAqIFVzZXMgUE9TVCAvYXBpL2N2L2xheW91dC1yZWZpbmUgKHN0YWdlZCBnZW5lcmF0aW9uIGNvbnRyYWN0KSB3aGVuIGFcbiAqIHNlc3Npb24tc3RvcmVkIHByZXZpZXcgaXMgYXZhaWxhYmxlLiAgRmFsbHMgYmFjayB0byB0aGUgbGVnYWN5XG4gKiBQT1NUIC9hcGkvbGF5b3V0LWluc3RydWN0aW9uIGVuZHBvaW50ICh3aGljaCByZXF1aXJlcyB0aGUgSFRNTCBpbiB0aGVcbiAqIHJlcXVlc3QgYm9keSkgd2hlbiBubyBzZXNzaW9uIHByZXZpZXcgZXhpc3RzLlxuICovXG5hc3luYyBmdW5jdGlvbiBzdWJtaXRMYXlvdXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRleHQpIHtcbiAgLyogZHVja2Zsb3c6XG4gICAqICAgaWQ6IGxheW91dF91aV9yZWZpbmVfbGl2ZVxuICAgKiAgIGtpbmQ6IHVpXG4gICAqICAgdGltZXN0YW1wOiAnMjAyNi0wMy0yNlQwMDoyNDowMFonXG4gICAqICAgc3RhdHVzOiBsaXZlXG4gICAqICAgaGFuZGxlczpcbiAgICogICAtIHVpOmxheW91dC5zdWJtaXQtaW5zdHJ1Y3Rpb25cbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9jdi9sYXlvdXQtcmVmaW5lXG4gICAqICAgLSBQT1NUIC9hcGkvbGF5b3V0LWluc3RydWN0aW9uXG4gICAqICAgcmVhZHM6XG4gICAqICAgLSBkb206I2luc3RydWN0aW9uLWlucHV0LnZhbHVlXG4gICAqICAgLSBzdGF0ZTpnZW5lcmF0aW9uX3N0YXRlLnByZXZpZXdBdmFpbGFibGVcbiAgICogICAtIHN0YXRlOmdlbmVyYXRpb25fc3RhdGUucGhhc2VcbiAgICogICAtIHdpbmRvdzpsYXlvdXRJbnN0cnVjdGlvbnNcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9jdi9sYXlvdXQtcmVmaW5lLmluc3RydWN0aW9uXG4gICAqICAgLSBkb206I2xheW91dC1wcmV2aWV3XG4gICAqICAgLSB3aW5kb3c6bGF5b3V0SW5zdHJ1Y3Rpb25zXG4gICAqICAgLSBzdGF0ZTpnZW5lcmF0aW9uX3N0YXRlLnByZXZpZXdfb3V0cHV0c1xuICAgKiAgIG5vdGVzOiBTdWJtaXRzIGEgbmF0dXJhbC1sYW5ndWFnZSBsYXlvdXQgaW5zdHJ1Y3Rpb24gYWdhaW5zdCB0aGUgc3RhZ2VkIHByZXZpZXcgd2hlbiBhdmFpbGFibGUsIHRoZW4gcmVmcmVzaGVzIHRoZSBwcmV2aWV3IGFuZCBsb2NhbCBpbnN0cnVjdGlvbiBoaXN0b3J5IGZyb20gdGhlIHJldHVybmVkIEhUTUwuXG4gICAqL1xuICBjb25zdCBjdXJyZW50SHRtbCA9IGdldEN2QXJ0aWZhY3RzKClbJyouaHRtbCddIHx8ICcnO1xuICBjb25zdCBwcmlvckluc3RydWN0aW9ucyA9IHdpbmRvdy5sYXlvdXRJbnN0cnVjdGlvbnMgfHwgW107XG5cbiAgLy8gU25hcHNob3Qgc3RhdGUgYmVmb3JlIGFwcGx5aW5nIHNvIFVuZG8gY2FuIHJlc3RvcmUgaXQuXG4gIF9sYXlvdXRVbmRvU3RhY2sucHVzaCh7XG4gICAgaHRtbDogY3VycmVudEh0bWwsXG4gICAgaW5zdHJ1Y3Rpb25zOiAod2luZG93LmxheW91dEluc3RydWN0aW9ucyB8fCBbXSkubWFwKGkgPT4gKHsgLi4uaSB9KSksXG4gIH0pO1xuICBpZiAoX2xheW91dFVuZG9TdGFjay5sZW5ndGggPiBfVU5ET19TVEFDS19NQVgpIHtcbiAgICBfbGF5b3V0VW5kb1N0YWNrLnNoaWZ0KCk7XG4gIH1cblxuICB0cnkge1xuICAgIHNob3dQcm9jZXNzaW5nKHRydWUpO1xuXG4gICAgLy8gUHJlZmVyIHRoZSBzZXNzaW9uLWJhY2tlZCBlbmRwb2ludDsgaXQgbWFuYWdlcyBIVE1MIHNlcnZlci1zaWRlLlxuICAgIGxldCByZXNwb25zZTtcbiAgICBjb25zdCBnZW5TdGF0ZSA9IHN0YXRlTWFuYWdlcj8uZ2V0R2VuZXJhdGlvblN0YXRlPy4oKSB8fCB7fTtcbiAgICBjb25zdCB1c2VTZXNzaW9uRW5kcG9pbnQgPSBnZW5TdGF0ZS5wcmV2aWV3QXZhaWxhYmxlIHx8IGdlblN0YXRlLnBoYXNlID09PSAnbGF5b3V0X3Jldmlldyc7XG5cbiAgICBpZiAodXNlU2Vzc2lvbkVuZHBvaW50KSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9jdi9sYXlvdXQtcmVmaW5lJywge1xuICAgICAgICBpbnN0cnVjdGlvbjogaW5zdHJ1Y3Rpb25UZXh0LFxuICAgICAgICBjb250ZW50X3JldmlzaW9uOiBnZXRDdXJyZW50Q29udGVudFJldmlzaW9uKCksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvbGF5b3V0LWluc3RydWN0aW9uJywge1xuICAgICAgICBpbnN0cnVjdGlvbjogaW5zdHJ1Y3Rpb25UZXh0LFxuICAgICAgICBjdXJyZW50X2h0bWw6IGN1cnJlbnRIdG1sLFxuICAgICAgICBwcmlvcl9pbnN0cnVjdGlvbnM6IHByaW9ySW5zdHJ1Y3Rpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgaWYgKHJlc3BvbnNlLmVycm9yID09PSAnY2xhcmlmeScpIHtcbiAgICAgICAgc2hvd0NsYXJpZmljYXRpb25EaWFsb2cocmVzcG9uc2UucXVlc3Rpb24sIGluc3RydWN0aW9uVGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcHBlbmRMYXlvdXRTYWZldHlBbGVydChyZXNwb25zZS5zYWZldHlfYWxlcnQpO1xuICAgICAgICBsZXQgZXJyb3JIdG1sID0gYFx1MjZBMFx1RkUwRiBFcnJvcjogJHtlc2NhcGVIdG1sKHJlc3BvbnNlLmVycm9yKX0gXHUyMDE0ICR7ZXNjYXBlSHRtbChyZXNwb25zZS5kZXRhaWxzIHx8ICcnKX1gO1xuICAgICAgICBpZiAocmVzcG9uc2UucmF3X3Jlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBlcnJvckh0bWwgKz0gYDxicj48ZGV0YWlscyBzdHlsZT1cIm1hcmdpbi10b3A6NnB4XCI+PHN1bW1hcnkgc3R5bGU9XCJjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MC44NWVtO2NvbG9yOiM2NDc0OGJcIj5SYXcgTExNIHJlc3BvbnNlPC9zdW1tYXJ5PjxwcmUgc3R5bGU9XCJmb250LXNpemU6MC43NWVtO3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstYWxsO21heC1oZWlnaHQ6MjAwcHg7b3ZlcmZsb3cteTphdXRvO2JhY2tncm91bmQ6I2Y4ZmFmYztib3JkZXI6MXB4IHNvbGlkICNlMmU4ZjA7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzo4cHg7bWFyZ2luLXRvcDo0cHhcIj4ke2VzY2FwZUh0bWwocmVzcG9uc2UucmF3X3Jlc3BvbnNlIHx8ICcoZW1wdHkpJyl9PC9wcmU+PC9kZXRhaWxzPmA7XG4gICAgICAgIH1cbiAgICAgICAgYXBwZW5kTWVzc2FnZUh0bWwoJ3N5c3RlbScsIGVycm9ySHRtbCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHByZXZpZXcgd2l0aCBuZXcgSFRNTFxuICAgIGNvbnN0IG5ld0h0bWwgPSByZXNwb25zZS5odG1sO1xuICAgIGRpc3BsYXlMYXlvdXRQcmV2aWV3KG5ld0h0bWwpO1xuXG4gICAgYXBwZW5kTGF5b3V0U2FmZXR5QWxlcnQocmVzcG9uc2Uuc2FmZXR5X2FsZXJ0KTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZVxuICAgIHNldFByZXZpZXdIdG1sKG5ld0h0bWwpO1xuICAgIGRpc21pc3NlZFN0YWxlQ2FsbG91dFJldmlzaW9uID0gbnVsbDtcbiAgICBzdGF0ZU1hbmFnZXI/Lm1hcmtQcmV2aWV3R2VuZXJhdGVkPy4oe1xuICAgICAgcHJldmlld0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHByZXZpZXdPdXRwdXRzOiByZXNwb25zZS5wcmV2aWV3X291dHB1dHMgfHwgbnVsbCxcbiAgICAgIGxheW91dENvbmZpcm1lZDogZmFsc2UsXG4gICAgICBwYWdlQ291bnRFc3RpbWF0ZTogcmVzcG9uc2UucGFnZV9jb3VudF9lc3RpbWF0ZSA/PyBudWxsLFxuICAgICAgcGFnZUNvdW50RXhhY3Q6IHJlc3BvbnNlLnBhZ2VfY291bnRfZXhhY3QgPz8gbnVsbCxcbiAgICAgIHBhZ2VDb3VudENvbmZpZGVuY2U6IHJlc3BvbnNlLnBhZ2VfY291bnRfY29uZmlkZW5jZSA/PyBudWxsLFxuICAgICAgcGFnZUNvdW50U291cmNlOiByZXNwb25zZS5wYWdlX2NvdW50X3NvdXJjZSB8fCBudWxsLFxuICAgICAgcGFnZVdhcm5pbmc6IEJvb2xlYW4ocmVzcG9uc2UucGFnZV9sZW5ndGhfd2FybmluZyksXG4gICAgICBwcmV2aWV3R2VuZXJhdGVkQXQ6IHJlc3BvbnNlLnByZXZpZXdfZ2VuZXJhdGVkX2F0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHByZXZpZXdSZXF1ZXN0SWQ6IHJlc3BvbnNlLnByZXZpZXdfcmVxdWVzdF9pZCB8fCBudWxsLFxuICAgIH0pO1xuICAgIHJlbmRlclByZXZpZXdPdXRwdXRTdGF0dXMocmVzcG9uc2UucHJldmlld19vdXRwdXRzIHx8IG51bGwpO1xuXG4gICAgLy8gQWRkIHRvIGluc3RydWN0aW9uIGhpc3RvcnlcbiAgICBjb25zdCBpbnN0cnVjdGlvbiA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0xvY2FsZVRpbWVTdHJpbmcoKSxcbiAgICAgIGluc3RydWN0aW9uX3RleHQ6IGluc3RydWN0aW9uVGV4dCxcbiAgICAgIGNoYW5nZV9zdW1tYXJ5OiByZXNwb25zZS5zdW1tYXJ5LFxuICAgICAgY29uZmlybWF0aW9uOiB0cnVlXG4gICAgfTtcbiAgICBhZGRUb0luc3RydWN0aW9uSGlzdG9yeShpbnN0cnVjdGlvbik7XG5cbiAgICAvLyBTaG93IGNvbmZpcm1hdGlvblxuICAgIHNob3dDb25maXJtYXRpb25NZXNzYWdlKGAke3Jlc3BvbnNlLnNhZmV0eV9hbGVydD8uZmxhZ2dlZCA/ICdcdTI2QTBcdUZFMEYgJyA6ICdcdTI3MDUgJ30ke3Jlc3BvbnNlLnN1bW1hcnl9YCk7XG5cbiAgICAvLyBDbGVhciBpbnB1dCBhbmQgcmVmcmVzaCB0aGUgc3RhZ2VkIGNvbnRyb2xzLlxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnN0cnVjdGlvbi1pbnB1dCcpLnZhbHVlID0gJyc7XG4gICAgcmVmcmVzaExheW91dFJldmlld1N0YXRlKCk7XG5cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHUyNzRDIENvdWxkIG5vdCBhcHBseSB0aGUgbGF5b3V0IGluc3RydWN0aW9uLiBUcnkgcmVwaHJhc2luZyBpdCwgb3IgY2xpY2sgXCJSZWdlbmVyYXRlIFByZXZpZXdcIiB0byByZXNldCBhbmQgdHJ5IGFnYWluLmApO1xuICB9IGZpbmFsbHkge1xuICAgIHNob3dQcm9jZXNzaW5nKGZhbHNlKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBtYXJrUHJldmlld0dlbmVyYXRlZCBwYXlsb2FkIGZyb20gYSAvYXBpL2N2L2dlbmVyYXRlLXByZXZpZXcgcmVzcG9uc2UuXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YSAtIFJlc3BvbnNlIGZyb20gdGhlIGdlbmVyYXRlLXByZXZpZXcgZW5kcG9pbnQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBQYXlsb2FkIHN1aXRhYmxlIGZvciBzdGF0ZU1hbmFnZXIubWFya1ByZXZpZXdHZW5lcmF0ZWQoKS5cbiAqL1xuZnVuY3Rpb24gX2J1aWxkUHJldmlld1BheWxvYWQoZGF0YSkge1xuICByZXR1cm4ge1xuICAgIHByZXZpZXdBdmFpbGFibGU6ICAgIHRydWUsXG4gICAgcHJldmlld091dHB1dHM6ICAgICAgZGF0YS5wcmV2aWV3X291dHB1dHMgICAgICB8fCBudWxsLFxuICAgIHBhZ2VDb3VudEVzdGltYXRlOiAgIGRhdGEucGFnZV9jb3VudF9lc3RpbWF0ZSAgPz8gbnVsbCxcbiAgICBwYWdlQ291bnRFeGFjdDogICAgICBkYXRhLnBhZ2VfY291bnRfZXhhY3QgICAgICA/PyBudWxsLFxuICAgIHBhZ2VDb3VudENvbmZpZGVuY2U6IGRhdGEucGFnZV9jb3VudF9jb25maWRlbmNlID8/IG51bGwsXG4gICAgcGFnZUNvdW50U291cmNlOiAgICAgZGF0YS5wYWdlX2NvdW50X3NvdXJjZSAgICAgfHwgbnVsbCxcbiAgICBwYWdlV2FybmluZzogICAgICAgICBCb29sZWFuKGRhdGEucGFnZV9sZW5ndGhfd2FybmluZyksXG4gICAgcHJldmlld0dlbmVyYXRlZEF0OiAgZGF0YS5wcmV2aWV3X2dlbmVyYXRlZF9hdCAgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHByZXZpZXdSZXF1ZXN0SWQ6ICAgIGRhdGEucHJldmlld19yZXF1ZXN0X2lkICAgIHx8IG51bGwsXG4gIH07XG59XG5cbi8qKlxuICogRmV0Y2ggdGhlIENWIEhUTUwgcHJldmlldyB2aWEgdGhlIHN0YWdlZCBnZW5lcmF0aW9uIGNvbnRyYWN0LlxuICpcbiAqIFN0cmF0ZWd5IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiBzdGF0ZTpcbiAqXG4gKiAtIHBoYXNlIGlzIG5vdCBjb25maXJtZWQvZmluYWxfY29tcGxldGU6XG4gKiAgIEFsd2F5cyBjYWxscyBQT1NUIC9hcGkvY3YvZ2VuZXJhdGUtcHJldmlldywgd2hpY2ggc3RvcmVzIHByZXZpZXdfaHRtbCBpblxuICogICBnZW5lcmF0aW9uX3N0YXRlIChyZXF1aXJlZCBmb3IgY29uZmlybS1sYXlvdXQpIGFuZCBjYWxscyBtYXJrUHJldmlld0dlbmVyYXRlZC5cbiAqICAgVGhpcyBib290c3RyYXBzIHRoZSBzdGFnZWQgc3RhdGUgZXZlbiBhZnRlciBsZWdhY3kgZ2VuZXJhdGVfY3YgYWN0aW9ucyB0aGF0XG4gKiAgIHdyaXRlIGZpbGVzIHRvIGRpc2sgd2l0aG91dCBwb3B1bGF0aW5nIGdlbmVyYXRpb25fc3RhdGUucHJldmlld19odG1sLlxuICogICBGYWxscyBiYWNrIHRvIEdFVCAvYXBpL2xheW91dC1odG1sIChwYXNzaXZlLCBubyBzdGF0ZSBjaGFuZ2UpIHdoZW5cbiAqICAgZ2VuZXJhdGUtcHJldmlldyBpcyB1bmF2YWlsYWJsZSAoZS5nLiBzZXNzaW9uIGhhcyBubyBqb2JfYW5hbHlzaXMgeWV0KS5cbiAqXG4gKiAtIHBoYXNlIGlzIGNvbmZpcm1lZC9maW5hbF9jb21wbGV0ZSAocGFzc2l2ZSByZXN0b3JlKTpcbiAqICAgUmVhZHMgSFRNTCBmcm9tIGRpc2sgdmlhIEdFVCAvYXBpL2xheW91dC1odG1sIHdpdGhvdXQgdG91Y2hpbmcgc2Vzc2lvbiBzdGF0ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gX2ZldGNoQW5kRGlzcGxheUxheW91dFByZXZpZXcoKSB7XG4gIGNvbnN0IGdlblN0YXRlICAgID0gc3RhdGVNYW5hZ2VyPy5nZXRHZW5lcmF0aW9uU3RhdGU/LigpIHx8IHt9O1xuICBjb25zdCBpc0NvbmZpcm1lZCA9IGdlblN0YXRlLnBoYXNlID09PSBHRU5FUkFUSU9OX1BIQVNFUy5DT05GSVJNRURcbiAgICAgICAgICAgICAgICAgICB8fCBnZW5TdGF0ZS5waGFzZSA9PT0gR0VORVJBVElPTl9QSEFTRVMuRklOQUxfQ09NUExFVEU7XG5cbiAgc2hvd1ByZXZpZXdMb2FkaW5nKHRydWUsIGlzQ29uZmlybWVkID8gJ0xvYWRpbmcgc2F2ZWQgbGF5b3V0XHUyMDI2JyA6ICdHZW5lcmF0aW5nIHByZXZpZXdcdTIwMjYnKTtcbiAgdHJ5IHtcbiAgICAvLyBGcmVzaC1yZW5kZXIgcGF0aDogYWx3YXlzIHBvcHVsYXRlIGdlbmVyYXRpb25fc3RhdGUucHJldmlld19odG1sIG9uIHRoZSBiYWNrZW5kXG4gICAgLy8gc28gdGhhdCBjb25maXJtLWxheW91dCBzdWNjZWVkcy4gQ292ZXJzIGJvdGggdGhlIG5vcm1hbCBzdGFnZWQgcGF0aCBhbmQgdGhlXG4gICAgLy8gbGVnYWN5IGdlbmVyYXRlX2N2IHBhdGggdGhhdCBkb2VzIG5vdCBjYWxsIGdlbmVyYXRlLXByZXZpZXcgaXRzZWxmLlxuICAgIGlmICghaXNDb25maXJtZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvY3YvZ2VuZXJhdGUtcHJldmlldycsIHt9KTtcbiAgICAgICAgaWYgKGRhdGEub2sgJiYgZGF0YS5odG1sKSB7XG4gICAgICAgICAgZGlzcGxheUxheW91dFByZXZpZXcoZGF0YS5odG1sKTtcbiAgICAgICAgICBzZXRQcmV2aWV3SHRtbChkYXRhLmh0bWwpO1xuICAgICAgICAgIGRpc21pc3NlZFN0YWxlQ2FsbG91dFJldmlzaW9uID0gbnVsbDtcbiAgICAgICAgICBzdGF0ZU1hbmFnZXI/Lm1hcmtQcmV2aWV3R2VuZXJhdGVkPy4oX2J1aWxkUHJldmlld1BheWxvYWQoZGF0YSkpO1xuICAgICAgICAgIHJlbmRlclByZXZpZXdPdXRwdXRTdGF0dXMoZGF0YS5wcmV2aWV3X291dHB1dHMgfHwgbnVsbCk7XG4gICAgICAgICAgcmVmcmVzaExheW91dFJldmlld1N0YXRlKCk7XG4gICAgICAgICAgKGRhdGEuY29udGVudF93YXJuaW5ncyB8fCBbXSkuZm9yRWFjaCh3ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3Qody5tZXNzYWdlLCAnd2FybmluZycsIDgwMDApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoX2UpIHtcbiAgICAgICAgLy8gZmFsbCB0aHJvdWdoIHRvIGxlZ2FjeSBkaXNrIHJlYWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQYXNzaXZlIHJlc3RvcmUgcGF0aDogbG9hZCBzdG9yZWQgSFRNTCBmcm9tIGRpc2sgd2l0aG91dCB0b3VjaGluZyBnZW5lcmF0aW9uIHN0YXRlLlxuICAgIC8vIFVzZWQgZm9yIGNvbmZpcm1lZC9maW5hbF9jb21wbGV0ZSBsYXlvdXRzLCBvciBhcyBmYWxsYmFjayB3aGVuIGdlbmVyYXRlLXByZXZpZXdcbiAgICAvLyBpcyB1bmF2YWlsYWJsZSAoZS5nLiBzZXNzaW9uIGhhcyBubyBqb2JfYW5hbHlzaXMgeWV0KS5cbiAgICB0cnkge1xuICAgICAgc2hvd1ByZXZpZXdMb2FkaW5nKHRydWUsICdMb2FkaW5nIHN0b3JlZCBsYXlvdXRcdTIwMjYnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBhcGlDYWxsKCdHRVQnLCAnL2FwaS9sYXlvdXQtaHRtbCcpO1xuICAgICAgaWYgKGRhdGEub2sgJiYgZGF0YS5odG1sKSB7XG4gICAgICAgIGRpc3BsYXlMYXlvdXRQcmV2aWV3KGRhdGEuaHRtbCk7XG4gICAgICAgIHNldFByZXZpZXdIdG1sKGRhdGEuaHRtbCk7XG4gICAgICAgIHJlZnJlc2hMYXlvdXRSZXZpZXdTdGF0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsb2cud2FybignTGF5b3V0IHByZXZpZXcgbm90IGF2YWlsYWJsZTonLCBkYXRhLmVycm9yIHx8ICdubyBIVE1MIHJldHVybmVkJyk7XG4gICAgfSBjYXRjaCAoX2UpIHtcbiAgICAgIC8vIG5vIHByZXZpZXcgYXZhaWxhYmxlXG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHNob3dQcmV2aWV3TG9hZGluZyhmYWxzZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwbGF5IEhUTUwgcHJldmlldyBpbiBpZnJhbWUuXG4gKi9cbmZ1bmN0aW9uIGRpc3BsYXlMYXlvdXRQcmV2aWV3KGh0bWwpIHtcbiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXlvdXQtcHJldmlldycpO1xuICBpZiAoIXByZXZpZXcpIHJldHVybjtcblxuICBzaG93UHJldmlld0xvYWRpbmcoZmFsc2UpO1xuICBwcmV2aWV3Lm9ubG9hZCA9ICgpID0+IGZpdExheW91dFByZXZpZXdUb1BhbmUocHJldmlldyk7XG4gIHJlbmRlckh0bWxJbnRvSWZyYW1lKHByZXZpZXcsIGh0bWwpO1xuXG4gIGNvbnN0IGRvYyA9IHByZXZpZXcuY29udGVudERvY3VtZW50IHx8IHByZXZpZXcuY29udGVudFdpbmRvdz8uZG9jdW1lbnQ7XG4gIGlmIChkb2M/LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICBmaXRMYXlvdXRQcmV2aWV3VG9QYW5lKHByZXZpZXcpO1xuICB9XG59XG5cbi8qKlxuICogU2NhbGUgdGhlIHByZXZpZXcgc28gYW4gZW50aXJlIENWIHBhZ2Ugd2lkdGggZml0cyB3aXRoaW4gdGhlIHByZXZpZXcgcGFuZS5cbiAqL1xuZnVuY3Rpb24gZml0TGF5b3V0UHJldmlld1RvUGFuZShwcmV2aWV3KSB7XG4gIGNvbnN0IGRvYyA9IHByZXZpZXc/LmNvbnRlbnREb2N1bWVudCB8fCBwcmV2aWV3Py5jb250ZW50V2luZG93Py5kb2N1bWVudDtcbiAgY29uc3QgY29udGFpbmVyID0gcHJldmlldz8uY2xvc2VzdCgnLnByZXZpZXctaWZyYW1lLWNvbnRhaW5lcicpO1xuICBpZiAoIWRvYyB8fCAhY29udGFpbmVyKSByZXR1cm47XG5cbiAgY29uc3QgcGFnZUNvbnRhaW5lciA9IGRvYy5xdWVyeVNlbGVjdG9yKCcucGFnZS1jb250YWluZXInKSB8fCBkb2MuYm9keTtcbiAgaWYgKCFwYWdlQ29udGFpbmVyKSByZXR1cm47XG5cbiAgY29uc3QgY29udGFpbmVyV2lkdGggPSBNYXRoLm1heChjb250YWluZXIuY2xpZW50V2lkdGggLSAyNCwgMSk7XG4gIGNvbnN0IGNvbnRlbnRXaWR0aCA9IE1hdGgubWF4KFxuICAgIE1hdGguY2VpbChwYWdlQ29udGFpbmVyLnNjcm9sbFdpZHRoIHx8IDApLFxuICAgIE1hdGguY2VpbChwYWdlQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDApLFxuICAgIDFcbiAgKTtcbiAgY29uc3Qgc2NhbGUgPSBNYXRoLm1pbigxLCBjb250YWluZXJXaWR0aCAvIGNvbnRlbnRXaWR0aCk7XG5cbiAgZG9jLmRvY3VtZW50RWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmOGZhZmMnO1xuICBkb2MuYm9keS5zdHlsZS5tYXJnaW4gPSAnMCc7XG4gIGRvYy5ib2R5LnN0eWxlLnBhZGRpbmcgPSAnMCc7XG4gIGRvYy5ib2R5LnN0eWxlLmJhY2tncm91bmQgPSAnI2Y4ZmFmYyc7XG4gIGRvYy5ib2R5LnN0eWxlLm92ZXJmbG93WCA9ICdhdXRvJztcblxuICBwYWdlQ29udGFpbmVyLnN0eWxlLnpvb20gPSBgJHtzY2FsZX1gO1xuICBwYWdlQ29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICBwYWdlQ29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9ICcnO1xuICBwYWdlQ29udGFpbmVyLnN0eWxlLm1hcmdpbiA9ICcxMnB4JztcbiAgcHJldmlldy5zdHlsZS5taW5XaWR0aCA9ICcnO1xufVxuXG4vKipcbiAqIEFkZCBpbnN0cnVjdGlvbiB0byBoaXN0b3J5IHBhbmVsLlxuICovXG5mdW5jdGlvbiBhZGRUb0luc3RydWN0aW9uSGlzdG9yeShpbnN0cnVjdGlvbikge1xuICAvLyBJbml0aWFsaXplIGdsb2JhbCBpbnN0cnVjdGlvbiBsaXN0IGlmIG5lZWRlZFxuICBpZiAoIXdpbmRvdy5sYXlvdXRJbnN0cnVjdGlvbnMpIHtcbiAgICB3aW5kb3cubGF5b3V0SW5zdHJ1Y3Rpb25zID0gW107XG4gIH1cblxuICB3aW5kb3cubGF5b3V0SW5zdHJ1Y3Rpb25zLnB1c2gobm9ybWFsaXplTGF5b3V0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pKTtcbiAgcmVuZGVySW5zdHJ1Y3Rpb25IaXN0b3J5KCk7XG59XG5cbi8qKlxuICogUmVuZGVyIGluc3RydWN0aW9uIGhpc3RvcnkgZnJvbSBjdXJyZW50IHN0YXRlIHdpdGhvdXQgbXV0YXRpbmcgaXQuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckluc3RydWN0aW9uSGlzdG9yeSgpIHtcbiAgY29uc3QgaGlzdG9yeUxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5zdHJ1Y3Rpb24taGlzdG9yeScpO1xuICBpZiAoIWhpc3RvcnlMaXN0KSByZXR1cm47XG5cbiAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gd2luZG93LmxheW91dEluc3RydWN0aW9ucyB8fCBbXTtcbiAgaGlzdG9yeUxpc3QuaW5uZXJIVE1MID0gJyc7XG4gIGNvbnN0IGxhc3RJZHggPSBpbnN0cnVjdGlvbnMubGVuZ3RoIC0gMTtcbiAgaW5zdHJ1Y3Rpb25zLmZvckVhY2goKGluc3RydWN0aW9uLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZW50cnkuY2xhc3NOYW1lID0gJ2luc3RydWN0aW9uLWhpc3RvcnktZW50cnknO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBsYXN0SWR4O1xuICAgIGNvbnN0IHVuZG9IdG1sID0gaXNMYXN0XG4gICAgICA/IGA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0bi1zbVwiIG9uY2xpY2s9XCJ1bmRvSW5zdHJ1Y3Rpb24oJHtpbmRleH0pXCI+XHUyMUE5IFVuZG88L2J1dHRvbj5gXG4gICAgICA6IGA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0bi1zbVwiIGRpc2FibGVkIHRpdGxlPVwiVW5kbyBpcyBzZXF1ZW50aWFsIFx1MjAxNCB1bmRvIHRoZSBtb3N0IHJlY2VudCBpbnN0cnVjdGlvbiBmaXJzdFwiXG4gICAgICAgICAgIHN0eWxlPVwib3BhY2l0eTowLjM7Y3Vyc29yOm5vdC1hbGxvd2VkO1wiPlx1MjFBOSBVbmRvPC9idXR0b24+YDtcbiAgICBlbnRyeS5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5zdHJ1Y3Rpb24tdGltZVwiPiR7aW5zdHJ1Y3Rpb24udGltZXN0YW1wIHx8ICcnfTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImluc3RydWN0aW9uLXRleHRcIj4ke2VzY2FwZUh0bWwoaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25fdGV4dCB8fCAnJyl9PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5zdHJ1Y3Rpb24tc3VtbWFyeVwiPjxlbT4ke2VzY2FwZUh0bWwoaW5zdHJ1Y3Rpb24uY2hhbmdlX3N1bW1hcnkgfHwgJycpfTwvZW0+PC9kaXY+XG4gICAgICAke3VuZG9IdG1sfVxuICAgIGA7XG4gICAgaGlzdG9yeUxpc3QuYXBwZW5kQ2hpbGQoZW50cnkpO1xuICB9KTtcblxuICAvLyBVcGRhdGUgY291bnRcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luc3RydWN0aW9uLWNvdW50JykudGV4dENvbnRlbnQgPSAod2luZG93LmxheW91dEluc3RydWN0aW9ucyB8fCBbXSkubGVuZ3RoO1xufVxuXG4vKipcbiAqIFJlc3RvcmUgaW5zdHJ1Y3Rpb24gaGlzdG9yeSBmcm9tIHNlc3Npb24gc3RhdGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRMYXlvdXRJbnN0cnVjdGlvbkhpc3RvcnkoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDYWxsKCdHRVQnLCAnL2FwaS9sYXlvdXQtaGlzdG9yeScpO1xuICAgIGlmICghcmVzcG9uc2U/Lmluc3RydWN0aW9ucyB8fCAhQXJyYXkuaXNBcnJheShyZXNwb25zZS5pbnN0cnVjdGlvbnMpKSB7XG4gICAgICByZXR1cm4gd2luZG93LmxheW91dEluc3RydWN0aW9ucyB8fCBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2UuaW5zdHJ1Y3Rpb25zLm1hcCgoaW5zdHJ1Y3Rpb24pID0+IG5vcm1hbGl6ZUxheW91dEluc3RydWN0aW9uKGluc3RydWN0aW9uKSk7XG4gIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgIHJldHVybiB3aW5kb3cubGF5b3V0SW5zdHJ1Y3Rpb25zIHx8IFtdO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc3RvcmVJbnN0cnVjdGlvbkhpc3RvcnkoKSB7XG4gIHdpbmRvdy5sYXlvdXRJbnN0cnVjdGlvbnMgPSBhd2FpdCBsb2FkTGF5b3V0SW5zdHJ1Y3Rpb25IaXN0b3J5KCk7XG4gIHJlbmRlckluc3RydWN0aW9uSGlzdG9yeSgpO1xuICByZWZyZXNoTGF5b3V0UmV2aWV3U3RhdGUoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVnZW5lcmF0ZVByZXZpZXdBY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgc2hvd1Byb2Nlc3NpbmcodHJ1ZSk7XG4gICAgYXdhaXQgX2ZldGNoQW5kRGlzcGxheUxheW91dFByZXZpZXcoKTtcbiAgICBzaG93Q29uZmlybWF0aW9uTWVzc2FnZSgnXHUyNzA1IFByZXZpZXcgcmVnZW5lcmF0ZWQgZnJvbSB0aGUgbGF0ZXN0IGNvbnRlbnQuJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgYFx1Mjc0QyBDb3VsZCBub3QgcmVnZW5lcmF0ZSB0aGUgcHJldmlldy4gQ2hlY2sgdGhhdCB5b3VyIHNlc3Npb24gaXMgYWN0aXZlIGFuZCB0cnkgYWdhaW4uIElmIHRoZSBwcm9ibGVtIHBlcnNpc3RzLCByZWxvYWQgdGhlIHBhZ2UuYCk7XG4gICAgc2hvd1ByZXZpZXdMb2FkaW5nKGZhbHNlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzaG93UHJvY2Vzc2luZyhmYWxzZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG93IHByb2Nlc3Npbmcgc3Bpbm5lciAocmlnaHQtcGFuZSBpbmRpY2F0b3IgZm9yIGxheW91dC1pbnN0cnVjdGlvbiBhcHBseSkuXG4gKi9cbmZ1bmN0aW9uIHNob3dQcm9jZXNzaW5nKHNob3cpIHtcbiAgY29uc3QgaW5kaWNhdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2Nlc3NpbmctaW5kaWNhdG9yJyk7XG4gIGlmIChpbmRpY2F0b3IpIHtcbiAgICBpbmRpY2F0b3Iuc3R5bGUuZGlzcGxheSA9IHNob3cgPyAnYmxvY2snIDogJ25vbmUnO1xuICB9XG59XG5cbi8qKlxuICogU2hvdyBvciBoaWRlIHRoZSBwcmV2aWV3LWFyZWEgbG9hZGluZyBvdmVybGF5LlxuICogQHBhcmFtIHtib29sZWFufSBzaG93XG4gKiBAcGFyYW0ge3N0cmluZ30gW2xvZ1RleHRdIE9wdGlvbmFsIHN0YXR1cyBsaW5lIHNob3duIGJlbG93IHRoZSBzcGlubmVyLlxuICovXG5mdW5jdGlvbiBzaG93UHJldmlld0xvYWRpbmcoc2hvdywgbG9nVGV4dCA9ICcnKSB7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJldmlldy1sb2FkaW5nLW92ZXJsYXknKTtcbiAgaWYgKCFvdmVybGF5KSByZXR1cm47XG4gIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IHNob3cgPyAnZmxleCcgOiAnbm9uZSc7XG4gIGNvbnN0IGxvZ0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZXZpZXctbG9hZGluZy1sb2cnKTtcbiAgaWYgKGxvZ0VsKSBsb2dFbC50ZXh0Q29udGVudCA9IGxvZ1RleHQ7XG59XG5cbi8qKlxuICogU2hvdyBjb25maXJtYXRpb24gbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gc2hvd0NvbmZpcm1hdGlvbk1lc3NhZ2UobWVzc2FnZSkge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZpcm1hdGlvbi1tZXNzYWdlJyk7XG4gIGlmICghZWxlbWVudCkgcmV0dXJuO1xuXG4gIGVsZW1lbnQudGV4dENvbnRlbnQgPSBtZXNzYWdlO1xuICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG4gIC8vIEF1dG8taGlkZSBhZnRlciAzIHNlY29uZHNcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9LCAzMDAwKTtcbn1cblxuLyoqXG4gKiBTaG93IGlubGluZSBjbGFyaWZpY2F0aW9uIHBhbmVsIHdoZW4gTExNIG5lZWRzIG1vcmUgaW5mby5cbiAqIFJlcGxhY2VzIHdpbmRvdy5wcm9tcHQoKSB3aXRoIGFuIGFjY2Vzc2libGUgaW5saW5lIGZvcm0uXG4gKi9cbmZ1bmN0aW9uIHNob3dDbGFyaWZpY2F0aW9uRGlhbG9nKHF1ZXN0aW9uLCBvcmlnaW5hbEluc3RydWN0aW9uKSB7XG4gIGNvbnN0IGlucHV0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5zdHJ1Y3Rpb24taW5wdXQnKTtcbiAgY29uc3QgY29udGFpbmVyID0gaW5wdXRFbCA/IGlucHV0RWwuY2xvc2VzdCgnZGl2JykgfHwgaW5wdXRFbC5wYXJlbnROb2RlIDogbnVsbDtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICBjb25zdCBleGlzdGluZ1BhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheW91dC1jbGFyaWZpY2F0aW9uLXBhbmVsJyk7XG4gIGlmIChleGlzdGluZ1BhbmVsKSBleGlzdGluZ1BhbmVsLnJlbW92ZSgpO1xuXG4gIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHBhbmVsLmlkID0gJ2xheW91dC1jbGFyaWZpY2F0aW9uLXBhbmVsJztcbiAgcGFuZWwuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2FsZXJ0Jyk7XG4gIHBhbmVsLnN0eWxlLmNzc1RleHQgPSAnYmFja2dyb3VuZDojZmVmOWMzO2JvcmRlcjoxcHggc29saWQgI2ZkZTA0Nztib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE0cHg7bWFyZ2luLXRvcDoxMHB4Oyc7XG4gIHBhbmVsLmlubmVySFRNTCA9IGBcbiAgICA8cCBzdHlsZT1cIm1hcmdpbjowIDAgOHB4O2ZvbnQtc2l6ZTowLjllbTtjb2xvcjojOTI0MDBlO2ZvbnQtd2VpZ2h0OjYwMDtcIj5cbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlx1Mjc1Mzwvc3Bhbj4gQ2xhcmlmaWNhdGlvbiBuZWVkZWRcbiAgICA8L3A+XG4gICAgPHAgc3R5bGU9XCJtYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjAuODhlbTtjb2xvcjojNzgzNTBmO1wiPiR7ZXNjYXBlSHRtbChxdWVzdGlvbil9PC9wPlxuICAgIDxsYWJlbCBmb3I9XCJsYXlvdXQtY2xhcmlmaWNhdGlvbi1pbnB1dFwiIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtmb250LXdlaWdodDo2MDA7Y29sb3I6IzM3NDE1MTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O1wiPlxuICAgICAgWW91ciBjbGFyaWZpY2F0aW9uOlxuICAgIDwvbGFiZWw+XG4gICAgPHRleHRhcmVhIGlkPVwibGF5b3V0LWNsYXJpZmljYXRpb24taW5wdXRcIiByb3dzPVwiMlwiXG4gICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2ZkZTA0Nztib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC44OGVtO3Jlc2l6ZTp2ZXJ0aWNhbDtcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsYXJpZmljYXRpb24gZm9yIGxheW91dCBpbnN0cnVjdGlvblwiPiR7ZXNjYXBlSHRtbChvcmlnaW5hbEluc3RydWN0aW9uKX08L3RleHRhcmVhPlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjhweDttYXJnaW4tdG9wOjhweDtcIj5cbiAgICAgIDxidXR0b24gaWQ9XCJsYXlvdXQtY2xhcmlmaWNhdGlvbi1zdWJtaXRcIlxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6I2Q5NzcwNjtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6NnB4IDE0cHg7Zm9udC1zaXplOjAuODVlbTtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7XCI+XG4gICAgICAgIFN1Ym1pdCBjbGFyaWZpY2F0aW9uXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gaWQ9XCJsYXlvdXQtY2xhcmlmaWNhdGlvbi1jYW5jZWxcIlxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6MXB4IHNvbGlkICNkOTc3MDY7Y29sb3I6IzkyNDAwZTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjZweCAxNHB4O2ZvbnQtc2l6ZTowLjg1ZW07Y3Vyc29yOnBvaW50ZXI7XCI+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+YDtcblxuICBjb250YWluZXIuYXBwZW5kQ2hpbGQocGFuZWwpO1xuXG4gIGNvbnN0IGNsYXJJbnB1dCAgPSBwYW5lbC5xdWVyeVNlbGVjdG9yKCcjbGF5b3V0LWNsYXJpZmljYXRpb24taW5wdXQnKTtcbiAgY29uc3Qgc3VibWl0QnRuICA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3IoJyNsYXlvdXQtY2xhcmlmaWNhdGlvbi1zdWJtaXQnKTtcbiAgY29uc3QgY2FuY2VsQnRuICA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3IoJyNsYXlvdXQtY2xhcmlmaWNhdGlvbi1jYW5jZWwnKTtcblxuICBjbGFySW5wdXQuZm9jdXMoKTtcbiAgY2xhcklucHV0LnNldFNlbGVjdGlvblJhbmdlKGNsYXJJbnB1dC52YWx1ZS5sZW5ndGgsIGNsYXJJbnB1dC52YWx1ZS5sZW5ndGgpO1xuXG4gIHN1Ym1pdEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBjb25zdCBjbGFyaWZpZWQgPSBjbGFySW5wdXQudmFsdWUudHJpbSgpO1xuICAgIHBhbmVsLnJlbW92ZSgpO1xuICAgIGlmIChjbGFyaWZpZWQgJiYgY2xhcmlmaWVkICE9PSBvcmlnaW5hbEluc3RydWN0aW9uKSB7XG4gICAgICBzdWJtaXRMYXlvdXRJbnN0cnVjdGlvbihjbGFyaWZpZWQpO1xuICAgIH1cbiAgfSk7XG4gIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHBhbmVsLnJlbW92ZSgpKTtcbiAgY2xhcklucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBlID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBzdWJtaXRCdG4uY2xpY2soKTsgfVxuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGNhbmNlbEJ0bi5jbGljaygpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBVbmRvIHRoZSBsYXN0IGxheW91dCBpbnN0cnVjdGlvbiBieSByZXN0b3JpbmcgdGhlIHByZXZpb3VzIHNuYXBzaG90LlxuICogVGhlIGluZGV4IHBhcmFtZXRlciBpcyBhY2NlcHRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBidXQgaXMgaWdub3JlZCBcdTIwMTRcbiAqIHRoZSB1bmRvIHN0YWNrIGFsd2F5cyByZXN0b3JlcyB0aGUgbW9zdCByZWNlbnQgcHJlLWluc3RydWN0aW9uIHN0YXRlLlxuICovXG5mdW5jdGlvbiB1bmRvSW5zdHJ1Y3Rpb24oX2luZGV4KSB7XG4gIGlmIChfbGF5b3V0VW5kb1N0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsICdcdTIxMzlcdUZFMEYgTm90aGluZyB0byB1bmRvLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNuYXBzaG90ID0gX2xheW91dFVuZG9TdGFjay5wb3AoKTtcbiAgd2luZG93LmxheW91dEluc3RydWN0aW9ucyA9IHNuYXBzaG90Lmluc3RydWN0aW9ucztcblxuICBkaXNwbGF5TGF5b3V0UHJldmlldyhzbmFwc2hvdC5odG1sKTtcbiAgc2V0UHJldmlld0h0bWwoc25hcHNob3QuaHRtbCk7XG4gIHJlbmRlckluc3RydWN0aW9uSGlzdG9yeSgpO1xuICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHUyMUE5XHVGRTBGIExhc3QgbGF5b3V0IGluc3RydWN0aW9uIHVuZG9uZS4nKTtcbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcbiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXlvdXQtcHJldmlldycpO1xuICBpZiAocHJldmlldykge1xuICAgIGZpdExheW91dFByZXZpZXdUb1BhbmUocHJldmlldyk7XG4gIH1cbn0pO1xuXG5hc3luYyBmdW5jdGlvbiBjb25maXJtTGF5b3V0UmV2aWV3KCkge1xuICB0cnkge1xuICAgIHNob3dQcm9jZXNzaW5nKHRydWUpO1xuXG4gICAgY29uc3QgZnJlc2huZXNzID0gc3RhdGVNYW5hZ2VyLmdldExheW91dEZyZXNobmVzcygpO1xuICAgIGlmIChmcmVzaG5lc3MuaXNTdGFsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcmV2aWV3IGlzIG91dGRhdGVkLiBSZWdlbmVyYXRlIHRoZSBwcmV2aWV3IGJlZm9yZSBjb25maXJtaW5nIGxheW91dC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maXJtUmVzID0gYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL2N2L2NvbmZpcm0tbGF5b3V0JywgeyBjb250ZW50X3JldmlzaW9uOiBnZXRDdXJyZW50Q29udGVudFJldmlzaW9uKCkgfSk7XG4gICAgaWYgKCFjb25maXJtUmVzPy5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGNvbmZpcm1SZXM/LmVycm9yIHx8ICdGYWlsZWQgdG8gY29uZmlybSBsYXlvdXQuJyk7XG4gICAgfVxuXG4gICAgc3RhdGVNYW5hZ2VyLm1hcmtMYXlvdXRDb25maXJtZWQoe1xuICAgICAgY29uZmlybWVkQXQ6IGNvbmZpcm1SZXMuY29uZmlybWVkX2F0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9KTtcbiAgICBzaG93Q29uZmlybWF0aW9uTWVzc2FnZSgnXHUyNzA1IExheW91dCBjb25maXJtZWQuIEdlbmVyYXRlIGZpbmFsIGZpbGVzIHdoZW4geW91IGFyZSByZWFkeS4nKTtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnXHUyNzA1IExheW91dCBjb25maXJtZWQuIFJldmlldyB0aGUgcHJldmlldyBpZiBuZWVkZWQsIHRoZW4gZ2VuZXJhdGUgdGhlIGZpbmFsIGZpbGVzLicpO1xuICAgIHJlZnJlc2hMYXlvdXRSZXZpZXdTdGF0ZSgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdTI3NEMgQ291bGQgbm90IGNvbmZpcm0gdGhlIGxheW91dC4gVHJ5IGNsaWNraW5nIENvbmZpcm0gYWdhaW4uIElmIHRoZSBwcm9ibGVtIHBlcnNpc3RzLCByZWxvYWQgdGhlIHBhZ2UuYCk7XG4gIH0gZmluYWxseSB7XG4gICAgc2hvd1Byb2Nlc3NpbmcoZmFsc2UpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRmluYWxPdXRwdXRzKCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogbGF5b3V0X3VpX2dlbmVyYXRlX2ZpbmFsX2xpdmVcbiAgICogICBraW5kOiB1aVxuICAgKiAgIHRpbWVzdGFtcDogJzIwMjYtMDMtMjZUMDA6MjQ6MDBaJ1xuICAgKiAgIHN0YXR1czogbGl2ZVxuICAgKiAgIGhhbmRsZXM6XG4gICAqICAgLSB1aTpsYXlvdXQuZ2VuZXJhdGUtZmluYWxcbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9jdi9nZW5lcmF0ZS1maW5hbFxuICAgKiAgIC0gUE9TVCAvYXBpL2xheW91dC1jb21wbGV0ZVxuICAgKiAgIHJlYWRzOlxuICAgKiAgIC0gc3RhdGU6Z2VuZXJhdGlvbl9zdGF0ZS5sYXlvdXRDb25maXJtZWRcbiAgICogICAtIHN0YXRlOmdlbmVyYXRpb25fc3RhdGUucGhhc2VcbiAgICogICAtIHN0YXRlOmxheW91dF9mcmVzaG5lc3NcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSB0YWI6Y3ZBcnRpZmFjdHNcbiAgICogICAtIHN0YXRlOmdlbmVyYXRpb25fc3RhdGUuZmluYWxfZ2VuZXJhdGVkX2F0XG4gICAqICAgLSB1aTp3b3JrZmxvdy5yZWZpbmVtZW50XG4gICAqICAgbm90ZXM6IEdlbmVyYXRlcyB0aGUgZmluYWwgaHVtYW4tcmVhZGFibGUgb3V0cHV0cyBmcm9tIHRoZSBjb25maXJtZWQgcHJldmlldyBhbmQgYWR2YW5jZXMgdGhlIFVJIGludG8gZmlsZSByZXZpZXcvZmluYWxpc2Ugd2l0aCB0aGUgbmV3IGFydGlmYWN0IHNldC5cbiAgICovXG4gIHRyeSB7XG4gICAgc2hvd1Byb2Nlc3NpbmcodHJ1ZSk7XG5cbiAgICBjb25zdCBmcmVzaG5lc3MgPSBzdGF0ZU1hbmFnZXIuZ2V0TGF5b3V0RnJlc2huZXNzKCk7XG4gICAgY29uc3QgZ2VuZXJhdGlvblN0YXRlID0gc3RhdGVNYW5hZ2VyLmdldEdlbmVyYXRpb25TdGF0ZSgpO1xuICAgIGlmIChmcmVzaG5lc3MuaXNTdGFsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcmV2aWV3IGlzIG91dGRhdGVkLiBSZWdlbmVyYXRlIHRoZSBwcmV2aWV3IGJlZm9yZSBnZW5lcmF0aW5nIGZpbmFsIGZpbGVzLicpO1xuICAgIH1cbiAgICBpZiAoIWdlbmVyYXRpb25TdGF0ZS5sYXlvdXRDb25maXJtZWQgJiYgZ2VuZXJhdGlvblN0YXRlLnBoYXNlICE9PSAnY29uZmlybWVkJykge1xuICAgICAgY29uc3QgaGFzSW5zdHJ1Y3Rpb25zID0gKHdpbmRvdy5sYXlvdXRJbnN0cnVjdGlvbnMgfHwgW10pLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoaGFzSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29uZmlybSBsYXlvdXQgYmVmb3JlIGdlbmVyYXRpbmcgZmluYWwgZmlsZXMuJyk7XG4gICAgICB9XG4gICAgICAvLyBObyBpbnN0cnVjdGlvbnMgYWRkZWQgXHUyMDE0IGF1dG8tY29uZmlybSBzbyB1c2VycyBhcmVuJ3QgYmxvY2tlZCBieSBhIHJlZHVuZGFudCBjbGljay5cbiAgICAgIGNvbnN0IGNvbmZpcm1SZXMgPSBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvY3YvY29uZmlybS1sYXlvdXQnLCB7IGNvbnRlbnRfcmV2aXNpb246IGdldEN1cnJlbnRDb250ZW50UmV2aXNpb24oKSB9KTtcbiAgICAgIGlmICghY29uZmlybVJlcz8ub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNvbmZpcm1SZXM/LmVycm9yIHx8ICdGYWlsZWQgdG8gYXV0by1jb25maXJtIGxheW91dC4nKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlTWFuYWdlci5tYXJrTGF5b3V0Q29uZmlybWVkKHsgY29uZmlybWVkQXQ6IGNvbmZpcm1SZXMuY29uZmlybWVkX2F0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5hbFJlcyA9IGF3YWl0IGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9jdi9nZW5lcmF0ZS1maW5hbCcsIHt9KTtcbiAgICBpZiAoIWZpbmFsUmVzPy5vayB8fCAhZmluYWxSZXMub3V0cHV0cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZpbmFsUmVzPy5lcnJvciB8fCAnRmFpbGVkIHRvIGdlbmVyYXRlIGZpbmFsIENWIG91dHB1dC4nKTtcbiAgICB9XG5cbiAgICB1cGRhdGVDdkFydGlmYWN0cyhmaW5hbFJlcy5vdXRwdXRzKTtcbiAgICBzdGF0ZU1hbmFnZXIubWFya0ZpbmFsR2VuZXJhdGVkKGZpbmFsUmVzLmdlbmVyYXRlZF9hdCB8fCBudWxsLCB7XG4gICAgICBwYWdlQ291bnRFc3RpbWF0ZTogZmluYWxSZXMucGFnZV9jb3VudF9lc3RpbWF0ZSA/PyBudWxsLFxuICAgICAgcGFnZUNvdW50RXhhY3Q6IGZpbmFsUmVzLnBhZ2VfY291bnRfZXhhY3QgPz8gbnVsbCxcbiAgICB9KTtcblxuICAgIHNjaGVkdWxlQXRzUmVmcmVzaCgncG9zdF9nZW5lcmF0aW9uJyk7XG5cbiAgICBzdGF0ZU1hbmFnZXIuc2V0UGhhc2UoJ2ZpbmFsX2dlbmVyYXRpb24nKTtcbiAgICBzd2l0Y2hUYWIoJ2ZpbmFsX2dlbmVyYXRlJyk7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ1x1MjcwNSBGaW5hbCBmaWxlcyBnZW5lcmF0ZWQgZnJvbSB0aGUgY29uZmlybWVkIGxheW91dC4nKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHUyNzRDIENvdWxkIG5vdCBnZW5lcmF0ZSBmaW5hbCBmaWxlczogJHtlcnJvci5tZXNzYWdlfSBUcnkgY2xpY2tpbmcgR2VuZXJhdGUgYWdhaW4uIElmIGxheW91dCBjb25maXJtYXRpb24gaXMgbmVlZGVkIGZpcnN0LCBjbGljayBDb25maXJtIExheW91dCwgdGhlbiB0cnkgYWdhaW4uYCk7XG4gIH0gZmluYWxseSB7XG4gICAgc2hvd1Byb2Nlc3NpbmcoZmFsc2UpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUxheW91dFByaW1hcnlBY3Rpb24oKSB7XG4gIGNvbnN0IGZyZXNobmVzcyA9IHN0YXRlTWFuYWdlci5nZXRMYXlvdXRGcmVzaG5lc3MoKTtcbiAgY29uc3QgZ2VuZXJhdGlvblN0YXRlID0gc3RhdGVNYW5hZ2VyLmdldEdlbmVyYXRpb25TdGF0ZSgpO1xuICBpZiAoZnJlc2huZXNzLmlzU3RhbGUpIHJldHVybiBoYW5kbGVSZWdlbmVyYXRlUHJldmlld0FjdGlvbigpO1xuICBpZiAoZ2VuZXJhdGlvblN0YXRlLmxheW91dENvbmZpcm1lZCB8fCBnZW5lcmF0aW9uU3RhdGUucGhhc2UgPT09ICdjb25maXJtZWQnKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlRmluYWxPdXRwdXRzKCk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpcm1MYXlvdXRSZXZpZXcoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGxldGVMYXlvdXRSZXZpZXcoKSB7XG4gIHJldHVybiBoYW5kbGVMYXlvdXRQcmltYXJ5QWN0aW9uKCk7XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihHRU5FUkFUSU9OX1NUQVRFX0VWRU5ULCByZWZyZXNoTGF5b3V0UmV2aWV3U3RhdGUpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgQ29udGVudCBwcm9wb3NhbCBmdW5jdGlvbnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKlxuICogU3VibWl0IGEgbmF0dXJhbC1sYW5ndWFnZSBjb250ZW50IGVkaXQgcmVxdWVzdCB0byB0aGUgYmFja2VuZCBhbmQgcmVuZGVyIHByb3Bvc2Fscy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3VibWl0Q29udGVudFByb3Bvc2FsKCkge1xuICBjb25zdCBpbnB1dCAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luc3RydWN0aW9uLWlucHV0Jyk7XG4gIGNvbnN0IHByb2Nlc3NpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudC1wcm9wb3NhbC1wcm9jZXNzaW5nJyk7XG4gIGNvbnN0IHBhbmVsICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudC1wcm9wb3NhbHMtcGFuZWwnKTtcblxuICBjb25zdCBpbnN0cnVjdGlvbiA9IGlucHV0Py52YWx1ZS50cmltKCk7XG4gIGlmICghaW5zdHJ1Y3Rpb24pIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHUyNkEwXHVGRTBGIFBsZWFzZSBkZXNjcmliZSB0aGUgY29udGVudCBjaGFuZ2UgeW91IHdhbnQgYmVmb3JlIHN1Ym1pdHRpbmcuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb2Nlc3NpbmcpIHByb2Nlc3Npbmcuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgaWYgKHBhbmVsKSAgICAgICBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL2N2L3Byb3Bvc2UtY29udGVudC1jaGFuZ2UnLCB7IGluc3RydWN0aW9uIH0pO1xuICAgIGlmICghcmVzPy5vaykge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgYFx1Mjc0QyBDb3VsZCBub3QgZ2VuZXJhdGUgY29udGVudCBwcm9wb3NhbHMuIFRyeSByZXBocmFzaW5nIHlvdXIgaW5zdHJ1Y3Rpb24gb3IgY2hlY2sgdGhlIHNlc3Npb24gaXMgc3RpbGwgYWN0aXZlLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm9wb3NhbHMgPSByZXMucHJvcG9zYWxzIHx8IFtdO1xuICAgIGlmIChwcm9wb3NhbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHUyNkEwXHVGRTBGIE5vIHByb3Bvc2FscyB3ZXJlIGdlbmVyYXRlZC4gVHJ5IHJlcGhyYXNpbmcgeW91ciBpbnN0cnVjdGlvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVuZGVyQ29udGVudFByb3Bvc2Fscyhwcm9wb3NhbHMpO1xuICAgIGlmIChwYW5lbCkgcGFuZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdTI3NEMgQ291bGQgbm90IHN1Ym1pdCB0aGUgY29udGVudCBwcm9wb3NhbC4gQ2hlY2sgeW91ciBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4uYCk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHByb2Nlc3NpbmcpIHByb2Nlc3Npbmcuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlciBhIGxpc3Qgb2YgY29udGVudCBwcm9wb3NhbHMgYXMgcmV2aWV3YWJsZSBjYXJkcyBpbnNpZGUgI2NvbnRlbnQtcHJvcG9zYWxzLXBhbmVsLlxuICogQHBhcmFtIHtBcnJheTx7aWQsIHR5cGUsIGxvY2F0aW9uLCBvcmlnaW5hbCwgcHJvcG9zZWQsIHJlYXNvbn0+fSBwcm9wb3NhbHNcbiAqL1xuZnVuY3Rpb24gcmVuZGVyQ29udGVudFByb3Bvc2Fscyhwcm9wb3NhbHMpIHtcbiAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudC1wcm9wb3NhbHMtcGFuZWwnKTtcbiAgaWYgKCFwYW5lbCkgcmV0dXJuO1xuXG4gIGNvbnN0IGFwcGx5QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcGx5LWNvbnRlbnQtY2hhbmdlcy1idG4nKTtcblxuICBwYW5lbC5pbm5lckhUTUwgPSBgXG4gICAgPHAgY2xhc3M9XCJjb250ZW50LXByb3Bvc2Fscy1oZWFkaW5nXCI+JHtwcm9wb3NhbHMubGVuZ3RofSBwcm9wb3NhbCR7cHJvcG9zYWxzLmxlbmd0aCAhPT0gMSA/ICdzJyA6ICcnfSBcdTIwMTQgYXBwcm92ZSB0aGUgY2hhbmdlcyB5b3Ugd2FudCB0byBhcHBseTo8L3A+XG4gICAgJHtwcm9wb3NhbHMubWFwKChwLCBpKSA9PiBgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1wcm9wb3NhbC1jYXJkXCIgZGF0YS1wcm9wb3NhbC1pZD1cIiR7ZXNjYXBlSHRtbChwLmlkKX1cIiBkYXRhLXByb3Bvc2FsLWluZGV4PVwiJHtpfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcG9zYWwtbWV0YVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvcG9zYWwtdHlwZS1iYWRnZVwiPiR7cC50eXBlID09PSAnc3VtbWFyeScgPyAnU3VtbWFyeScgOiAnQnVsbGV0J308L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9wb3NhbC1sb2NhdGlvblwiPiR7ZXNjYXBlSHRtbChwLmxvY2F0aW9uKX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcG9zYWwtZGlmZlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wb3NhbC1vcmlnaW5hbFwiPjxzdHJvbmc+QmVmb3JlOjwvc3Ryb25nPiAke2VzY2FwZUh0bWwocC5vcmlnaW5hbCl9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInByb3Bvc2FsLXByb3Bvc2VkXCI+PHN0cm9uZz5BZnRlcjo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKHAucHJvcG9zZWQpfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgJHtwLnJlYXNvbiA/IGA8ZGl2IGNsYXNzPVwicHJvcG9zYWwtcmVhc29uXCI+PGVtPiR7ZXNjYXBlSHRtbChwLnJlYXNvbil9PC9lbT48L2Rpdj5gIDogJyd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wb3NhbC1hY3Rpb25zXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwicHJvcG9zYWwtYXBwcm92ZS1sYWJlbFwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwicHJvcG9zYWwtYXBwcm92ZS1jaGVja2JveFwiIGNoZWNrZWQ+XG4gICAgICAgICAgICBBcHByb3ZlIHRoaXMgY2hhbmdlXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gKS5qb2luKCcnKX1cbiAgYDtcblxuICAvLyBTdG9yZSBwcm9wb3NhbHMgZm9yIGxhdGVyIHJldHJpZXZhbFxuICBwYW5lbC5kYXRhc2V0LnByb3Bvc2FscyA9IEpTT04uc3RyaW5naWZ5KHByb3Bvc2Fscyk7XG5cbiAgaWYgKGFwcGx5QnRuKSBhcHBseUJ0bi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGFwcHJvdmVkIHByb3Bvc2FscyBhbmQgUE9TVCB0aGVtIHRvIC9hcGkvY3YvYXBwbHktY29udGVudC1jaGFuZ2VzLlxuICogVXBkYXRlcyBkaXJ0eS1waGFzZSBzdGF0ZSBhbmQgc2hvd3MgdGhlIHJldHVybiBjYWxsb3V0LlxuICovXG5hc3luYyBmdW5jdGlvbiBhcHBseUFjY2VwdGVkUHJvcG9zYWxzKCkge1xuICBjb25zdCBwYW5lbCAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50LXByb3Bvc2Fscy1wYW5lbCcpO1xuICBjb25zdCBhcHBseUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHBseS1jb250ZW50LWNoYW5nZXMtYnRuJyk7XG5cbiAgY29uc3QgYWxsUHJvcG9zYWxzID0gSlNPTi5wYXJzZShwYW5lbD8uZGF0YXNldC5wcm9wb3NhbHMgfHwgJ1tdJyk7XG4gIGNvbnN0IGNoZWNrYm94ZXMgICA9IHBhbmVsPy5xdWVyeVNlbGVjdG9yQWxsKCcucHJvcG9zYWwtYXBwcm92ZS1jaGVja2JveCcpIHx8IFtdO1xuXG4gIGNvbnN0IGFjY2VwdGVkID0gYWxsUHJvcG9zYWxzLmZpbHRlcigoXywgaSkgPT4gY2hlY2tib3hlc1tpXT8uY2hlY2tlZCk7XG4gIGlmIChhY2NlcHRlZC5sZW5ndGggPT09IDApIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHUyNkEwXHVGRTBGIE5vIHByb3Bvc2FscyBhcHByb3ZlZC4gVGljayBhdCBsZWFzdCBvbmUgY2hhbmdlIHRvIGFwcGx5LicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhcHBseUJ0bikgYXBwbHlCdG4uZGlzYWJsZWQgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL2N2L2FwcGx5LWNvbnRlbnQtY2hhbmdlcycsIHsgYWNjZXB0ZWQgfSk7XG4gICAgaWYgKCFyZXM/Lm9rKSB7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHUyNzRDIEZhaWxlZCB0byBhcHBseSBjb250ZW50IGNoYW5nZXM6ICR7cmVzPy5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhdGVNYW5hZ2VyLnNldERpcnR5UGhhc2VzKFxuICAgICAgcmVzLmRpcnR5X3BoYXNlcyB8fCBbJ2dlbmVyYXRlJywgJ2xheW91dCddLFxuICAgICAgcmVzLmVhcmxpZXN0X2RpcnR5X3N0ZXAgfHwgJ2dlbmVyYXRlJyxcbiAgICApO1xuXG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgYFx1MjcwNSAke3Jlcy5hcHBsaWVkX2NvdW50fSBjb250ZW50IGNoYW5nZSR7cmVzLmFwcGxpZWRfY291bnQgIT09IDEgPyAncycgOiAnJ30gc3RhZ2VkLiBSZXR1cm4gdG8gR2VuZXJhdGUgQ1YgdG8gYXBwbHkgdGhlbS5gKTtcblxuICAgIC8vIENsZWFyIHRoZSBwcm9wb3NhbCBwYW5lbFxuICAgIGlmIChwYW5lbCkgeyBwYW5lbC5pbm5lckhUTUwgPSAnJzsgcGFuZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgcGFuZWwuZGF0YXNldC5wcm9wb3NhbHMgPSAnW10nOyB9XG4gICAgaWYgKGFwcGx5QnRuKSBhcHBseUJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgcmVmcmVzaExheW91dFJldmlld1N0YXRlKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdTI3NEMgQ291bGQgbm90IGFwcGx5IGNvbnRlbnQgY2hhbmdlcy4gQ2hlY2sgeW91ciBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4uYCk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGFwcGx5QnRuKSBhcHBseUJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogU2hvdyBvciBoaWRlIHRoZSBkaXJ0eS1waGFzZXMgY2FsbG91dCBiYXNlZCBvbiBzdGF0ZU1hbmFnZXIuZ2V0RGlydHlQaGFzZXMoKS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyRGlydHlQaGFzZXNDYWxsb3V0KCkge1xuICBjb25zdCBjYWxsb3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpcnR5LXBoYXNlcy1jYWxsb3V0Jyk7XG4gIGlmICghY2FsbG91dCkgcmV0dXJuO1xuICBjb25zdCBkaXJ0eSA9IHN0YXRlTWFuYWdlci5nZXREaXJ0eVBoYXNlcygpO1xuICBjYWxsb3V0LnN0eWxlLmRpc3BsYXkgPSBkaXJ0eS5sZW5ndGggPiAwID8gJ2Jsb2NrJyA6ICdub25lJztcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEVTIG1vZHVsZSBleHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZXhwb3J0IHtcbiAgaW5pdGlhdGVMYXlvdXRJbnN0cnVjdGlvbnMsXG4gIGNvbXBsZXRlTGF5b3V0UmV2aWV3LFxuICBjb25maXJtTGF5b3V0UmV2aWV3LFxuICBnZW5lcmF0ZUZpbmFsT3V0cHV0cyxcbiAgaGFuZGxlTGF5b3V0UHJpbWFyeUFjdGlvbixcbiAgbG9hZExheW91dEluc3RydWN0aW9uSGlzdG9yeSxcbiAgcmVuZGVyUHJldmlld091dHB1dFN0YXR1cyxcbiAgcmVuZGVyTGF5b3V0UHJldmlld1N0YXR1cyxcbiAgZGlzcGxheUxheW91dFByZXZpZXcsXG4gIHN1Ym1pdExheW91dEluc3RydWN0aW9uLFxuICBzdWJtaXRTbWFydEluc3RydWN0aW9uLFxuICAvLyBoZWxwZXJzIGV4cG9ydGVkIGZvciB1bml0IHRlc3RzXG4gIHNob3dQcm9jZXNzaW5nLFxuICBzaG93Q29uZmlybWF0aW9uTWVzc2FnZSxcbiAgcmVuZGVySW5zdHJ1Y3Rpb25IaXN0b3J5LFxuICBhZGRUb0luc3RydWN0aW9uSGlzdG9yeSxcbiAgdW5kb0luc3RydWN0aW9uLFxuICAvLyBjb250ZW50IHByb3Bvc2FsXG4gIHN1Ym1pdENvbnRlbnRQcm9wb3NhbCxcbiAgcmVuZGVyQ29udGVudFByb3Bvc2FscyxcbiAgYXBwbHlBY2NlcHRlZFByb3Bvc2FscyxcbiAgcmVuZGVyRGlydHlQaGFzZXNDYWxsb3V0LFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL2F0cy1yZWZpbmVtZW50LmpzXG4gKiBBVFMgc2NvcmUgYmFkZ2UgZGlzcGxheSBhbmQgZGVib3VuY2VkIHJlZnJlc2ggc2NoZWR1bGluZy5cbiAqXG4gKiBERVBFTkRFTkNJRVM6XG4gKiAgIC0gZ2xvYmFsVGhpcy5zdGF0ZU1hbmFnZXIgZnJvbSBzdGF0ZS1tYW5hZ2VyLmpzIChhY2Nlc3NlZCB2aWEgZ2xvYmFsVGhpcyB0aHJvdWdob3V0KVxuICovXG5cbmZ1bmN0aW9uIF9kaXNwYXRjaEF0c1Njb3JlVXBkYXRlZCgpIHtcbiAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2F0cy1zY29yZS11cGRhdGVkJykpO1xufVxuXG5mdW5jdGlvbiBfc2FmZVRleHQodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS50cmltKCkgOiAnJztcbn1cblxuZnVuY3Rpb24gX2NvZXJjZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIDoge307XG59XG5cbmZ1bmN0aW9uIF9mb3JtYXREYXRlTGFiZWwodmFsdWUpIHtcbiAgY29uc3QgdGV4dCA9IF9zYWZlVGV4dCh2YWx1ZSk7XG4gIGlmICghdGV4dCkgcmV0dXJuICcnO1xuXG4gIGlmICgvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdCh0ZXh0KSkge1xuICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IHRleHQuc3BsaXQoJy0nKTtcbiAgICByZXR1cm4gYCR7bW9udGh9LyR7ZGF5fS8ke3llYXJ9YDtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKHRleHQpO1xuICBpZiAoIU51bWJlci5pc05hTihwYXJzZWQuZ2V0VGltZSgpKSkge1xuICAgIHJldHVybiBwYXJzZWQudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7XG4gIH1cbiAgcmV0dXJuIHRleHQ7XG59XG5cbmZ1bmN0aW9uIF9nZXRQYWdlTGVuZ3RoTGFiZWwoKSB7XG4gIGNvbnN0IGdlbmVyYXRpb25TdGF0ZSA9IF9jb2VyY2VPYmplY3QoZ2xvYmFsVGhpcy5zdGF0ZU1hbmFnZXI/LmdldEdlbmVyYXRpb25TdGF0ZT8uKCkpO1xuICBjb25zdCBleGFjdCA9IE51bWJlcihnZW5lcmF0aW9uU3RhdGUucGFnZUNvdW50RXhhY3QpO1xuICBpZiAoTnVtYmVyLmlzRmluaXRlKGV4YWN0KSAmJiBleGFjdCA+IDApIHtcbiAgICByZXR1cm4gYExlbmd0aCAke2V4YWN0fSBwYWdlJHtleGFjdCA9PT0gMSA/ICcnIDogJ3MnfWA7XG4gIH1cblxuICBjb25zdCBlc3RpbWF0ZSA9IE51bWJlcihnZW5lcmF0aW9uU3RhdGUucGFnZUNvdW50RXN0aW1hdGUpO1xuICBpZiAoTnVtYmVyLmlzRmluaXRlKGVzdGltYXRlKSAmJiBlc3RpbWF0ZSA+IDApIHtcbiAgICByZXR1cm4gYExlbmd0aCAke2VzdGltYXRlLnRvRml4ZWQoMSl9IHBhZ2VzIGVzdGA7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIF9nZXRKb2JTdW1tYXJ5TGFiZWwoKSB7XG4gIGNvbnN0IGludGFrZSA9IF9jb2VyY2VPYmplY3Qod2luZG93Ll9zdGF0dXNJbnRha2UpO1xuICBjb25zdCBhbmFseXNpcyA9IF9jb2VyY2VPYmplY3QoZ2xvYmFsVGhpcy5zdGF0ZU1hbmFnZXI/LmdldFRhYkRhdGE/LignYW5hbHlzaXMnKSk7XG4gIGNvbnN0IHBvc2l0aW9uRmFsbGJhY2sgPSBfc2FmZVRleHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bvc2l0aW9uLXRpdGxlJyk/LnRleHRDb250ZW50IHx8ICcnKTtcblxuICBjb25zdCByb2xlID0gX3NhZmVUZXh0KFxuICAgIGludGFrZS5yb2xlXG4gICAgICB8fCBhbmFseXNpcy5qb2JfdGl0bGVcbiAgICAgIHx8IGFuYWx5c2lzLnRpdGxlXG4gICAgICB8fCBhbmFseXNpcy5wb3NpdGlvbl9uYW1lXG4gICAgICB8fCAnJ1xuICApO1xuICBjb25zdCBjb21wYW55ID0gX3NhZmVUZXh0KGludGFrZS5jb21wYW55IHx8IGFuYWx5c2lzLmNvbXBhbnlfbmFtZSB8fCBhbmFseXNpcy5jb21wYW55IHx8ICcnKTtcbiAgY29uc3QgZGF0ZUFwcGxpZWQgPSBfZm9ybWF0RGF0ZUxhYmVsKFxuICAgIGludGFrZS5kYXRlX2FwcGxpZWRcbiAgICAgIHx8IGFuYWx5c2lzLmRhdGVfYXBwbGllZFxuICAgICAgfHwgYW5hbHlzaXMuYXBwbGljYXRpb25fZGF0ZVxuICAgICAgfHwgJydcbiAgKTtcblxuICBjb25zdCBwcmltYXJ5ID0gcm9sZSAmJiBjb21wYW55XG4gICAgPyBgJHtyb2xlfSBAICR7Y29tcGFueX1gXG4gICAgOiAocm9sZSB8fCBjb21wYW55IHx8IHBvc2l0aW9uRmFsbGJhY2spO1xuICBpZiAoIXByaW1hcnkpIHJldHVybiAnJztcbiAgaWYgKCFkYXRlQXBwbGllZCkgcmV0dXJuIHByaW1hcnk7XG4gIHJldHVybiBgJHtwcmltYXJ5fSAoJHtkYXRlQXBwbGllZH0pYDtcbn1cblxuZnVuY3Rpb24gX2tleXdvcmRDb3VudChrZXl3b3JkcywgdHlwZSwgc3RhdHVzZXMgPSBbJ21hdGNoZWQnLCAncGFydGlhbCddKSB7XG4gIHJldHVybiBrZXl3b3Jkcy5maWx0ZXIoa2V5d29yZCA9PiBrZXl3b3JkLnR5cGUgPT09IHR5cGUgJiYgc3RhdHVzZXMuaW5jbHVkZXMoa2V5d29yZC5zdGF0dXMpKS5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIF9idWlsZFN1bW1hcnlEZXRhaWwoc2NvcmUsIGtleXdvcmRzKSB7XG4gIGNvbnN0IG1pc3NpbmdIYXJkID0ga2V5d29yZHNcbiAgICAuZmlsdGVyKGtleXdvcmQgPT4ga2V5d29yZC50eXBlID09PSAnaGFyZCcgJiYga2V5d29yZC5zdGF0dXMgPT09ICdtaXNzaW5nJylcbiAgICAubWFwKGtleXdvcmQgPT4ga2V5d29yZC5rZXl3b3JkKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKG1pc3NpbmdIYXJkLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBwcmV2aWV3ID0gbWlzc2luZ0hhcmQuc2xpY2UoMCwgMikuam9pbignLCAnKTtcbiAgICBjb25zdCBzdWZmaXggPSBtaXNzaW5nSGFyZC5sZW5ndGggPiAyID8gYCArJHttaXNzaW5nSGFyZC5sZW5ndGggLSAyfSBtb3JlYCA6ICcnO1xuICAgIHJldHVybiBgTWlzc2luZyBoYXJkOiAke3ByZXZpZXd9JHtzdWZmaXh9YDtcbiAgfVxuXG4gIGNvbnN0IGV4YWN0ID0ga2V5d29yZHMuZmlsdGVyKGtleXdvcmQgPT4ga2V5d29yZC5tYXRjaF90eXBlID09PSAnZXhhY3QnIHx8IGtleXdvcmQubWF0Y2hfdHlwZSA9PT0gJ3N5bm9ueW0nKS5sZW5ndGg7XG4gIGNvbnN0IHBhcnRpYWwgPSBrZXl3b3Jkcy5maWx0ZXIoa2V5d29yZCA9PiBrZXl3b3JkLm1hdGNoX3R5cGUgPT09ICdwYXJ0aWFsJykubGVuZ3RoO1xuICBjb25zdCB0b3BTZWN0aW9ucyA9IE9iamVjdC5lbnRyaWVzKHNjb3JlLnNlY3Rpb25fc2NvcmVzIHx8IHt9KVxuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+IDApXG4gICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiByaWdodFsxXSAtIGxlZnRbMV0pXG4gICAgLnNsaWNlKDAsIDIpXG4gICAgLm1hcCgoW3NlY3Rpb24sIHZhbHVlXSkgPT4gYCR7c2VjdGlvbn0gJHtNYXRoLnJvdW5kKHZhbHVlKX0lYCk7XG5cbiAgaWYgKHRvcFNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gYFRvcCBzZWN0aW9uczogJHt0b3BTZWN0aW9ucy5qb2luKCcgXHUyMDIyICcpfWA7XG4gIH1cblxuICBpZiAoZXhhY3QgPiAwIHx8IHBhcnRpYWwgPiAwKSB7XG4gICAgcmV0dXJuIGBNYXRjaCBxdWFsaXR5OiAke2V4YWN0fSBleGFjdCBcdTIwMjIgJHtwYXJ0aWFsfSBwYXJ0aWFsYDtcbiAgfVxuXG4gIHJldHVybiBgQmFzaXM6ICR7c2NvcmUuYmFzaXMgfHwgJ3Jldmlldyd9YDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0QXRzU2NvcmVTdW1tYXJ5KHNjb3JlKSB7XG4gIGNvbnN0IGtleXdvcmRzID0gQXJyYXkuaXNBcnJheShzY29yZT8ua2V5d29yZF9zdGF0dXMpID8gc2NvcmUua2V5d29yZF9zdGF0dXMgOiBbXTtcbiAgY29uc3Qgb3ZlcmFsbCA9IHR5cGVvZiBzY29yZT8ub3ZlcmFsbCA9PT0gJ251bWJlcicgPyBNYXRoLnJvdW5kKHNjb3JlLm92ZXJhbGwpIDogbnVsbDtcblxuICBpZiAob3ZlcmFsbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB7IG92ZXJhbGw6IG51bGwsIGxpbmU6ICcnLCBkZXRhaWw6ICcnLCBrZXl3b3JkcyB9O1xuICB9XG5cbiAgaWYgKGtleXdvcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBvdmVyYWxsLFxuICAgICAgbGluZTogYE92ZXJhbGwgJHtvdmVyYWxsfSVgLFxuICAgICAgZGV0YWlsOiBgQmFzaXM6ICR7c2NvcmUuYmFzaXMgfHwgJ3Jldmlldyd9YCxcbiAgICAgIGtleXdvcmRzLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBoYXJkVG90YWwgPSBrZXl3b3Jkcy5maWx0ZXIoa2V5d29yZCA9PiBrZXl3b3JkLnR5cGUgPT09ICdoYXJkJykubGVuZ3RoO1xuICBjb25zdCBzb2Z0VG90YWwgPSBrZXl3b3Jkcy5maWx0ZXIoa2V5d29yZCA9PiBrZXl3b3JkLnR5cGUgPT09ICdzb2Z0JykubGVuZ3RoO1xuICBjb25zdCBib251c1RvdGFsID0ga2V5d29yZHMuZmlsdGVyKGtleXdvcmQgPT4ga2V5d29yZC50eXBlID09PSAnYm9udXMnKS5sZW5ndGg7XG4gIGNvbnN0IHN1bW1hcnlQYXJ0cyA9IFtdO1xuXG4gIGlmIChoYXJkVG90YWwgPiAwKSB7XG4gICAgc3VtbWFyeVBhcnRzLnB1c2goYEhhcmQgJHtfa2V5d29yZENvdW50KGtleXdvcmRzLCAnaGFyZCcpfS8ke2hhcmRUb3RhbH1gKTtcbiAgfVxuICBpZiAoc29mdFRvdGFsID4gMCkge1xuICAgIHN1bW1hcnlQYXJ0cy5wdXNoKGBTb2Z0ICR7X2tleXdvcmRDb3VudChrZXl3b3JkcywgJ3NvZnQnKX0vJHtzb2Z0VG90YWx9YCk7XG4gIH1cbiAgaWYgKGJvbnVzVG90YWwgPiAwKSB7XG4gICAgc3VtbWFyeVBhcnRzLnB1c2goYEJvbnVzICR7X2tleXdvcmRDb3VudChrZXl3b3JkcywgJ2JvbnVzJyl9LyR7Ym9udXNUb3RhbH1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb3ZlcmFsbCxcbiAgICBsaW5lOiBzdW1tYXJ5UGFydHMuam9pbignIFx1MjAyMiAnKSB8fCBgT3ZlcmFsbCAke292ZXJhbGx9JWAsXG4gICAgZGV0YWlsOiBfYnVpbGRTdW1tYXJ5RGV0YWlsKHNjb3JlLCBrZXl3b3JkcyksXG4gICAga2V5d29yZHMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVBdHNTdW1tYXJ5KHNjb3JlKSB7XG4gIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdHMtc2NvcmUtaGVhZGVyJyk7XG4gIGNvbnN0IHN1bW1hcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXRzLXNjb3JlLXN1bW1hcnknKTtcbiAgY29uc3Qgc3VtbWFyeUxpbmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXRzLXNjb3JlLXN1bW1hcnktbGluZScpO1xuICBjb25zdCBzdW1tYXJ5RGV0YWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F0cy1zY29yZS1zdW1tYXJ5LWRldGFpbCcpO1xuXG4gIGlmICghaGVhZGVyIHx8ICFzdW1tYXJ5IHx8ICFzdW1tYXJ5TGluZSB8fCAhc3VtbWFyeURldGFpbCkgcmV0dXJuO1xuXG4gIGNvbnN0IGtleXdvcmRzID0gQXJyYXkuaXNBcnJheShzY29yZT8ua2V5d29yZF9zdGF0dXMpID8gc2NvcmUua2V5d29yZF9zdGF0dXMgOiBbXTtcbiAgY29uc3QgaGFzU2NvcmUgPSBzY29yZSAmJiB0eXBlb2Ygc2NvcmUub3ZlcmFsbCA9PT0gJ251bWJlcic7XG4gIGNvbnN0IHBhZ2VMZW5ndGhMYWJlbCA9IF9nZXRQYWdlTGVuZ3RoTGFiZWwoKTtcbiAgY29uc3Qgam9iU3VtbWFyeUxhYmVsID0gX2dldEpvYlN1bW1hcnlMYWJlbCgpO1xuXG4gIGlmICghaGFzU2NvcmUpIHtcbiAgICBoZWFkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBzdW1tYXJ5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgc3VtbWFyeUxpbmUudGV4dENvbnRlbnQgPSAnJztcbiAgICBzdW1tYXJ5RGV0YWlsLnRleHRDb250ZW50ID0gJyc7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaGVhZGVyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG5cbiAgY29uc3Qgc3VtbWFyeUNvbnRlbnQgPSBmb3JtYXRBdHNTY29yZVN1bW1hcnkoc2NvcmUpO1xuICBjb25zdCBsaW5lUGFydHMgPSBbc3VtbWFyeUNvbnRlbnQubGluZSwgcGFnZUxlbmd0aExhYmVsXS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IGRldGFpbFBhcnRzID0gW2pvYlN1bW1hcnlMYWJlbCwgc3VtbWFyeUNvbnRlbnQuZGV0YWlsXS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKGxpbmVQYXJ0cy5sZW5ndGggPT09IDAgJiYgZGV0YWlsUGFydHMubGVuZ3RoID09PSAwICYmIGtleXdvcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHN1bW1hcnkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBzdW1tYXJ5TGluZS50ZXh0Q29udGVudCA9ICcnO1xuICAgIHN1bW1hcnlEZXRhaWwudGV4dENvbnRlbnQgPSAnJztcbiAgICByZXR1cm47XG4gIH1cblxuICBzdW1tYXJ5TGluZS50ZXh0Q29udGVudCA9IGxpbmVQYXJ0cy5qb2luKCcgXHUyMDIyICcpO1xuICBzdW1tYXJ5RGV0YWlsLnRleHRDb250ZW50ID0gZGV0YWlsUGFydHMuam9pbignIFx1MjAyMiAnKTtcbiAgc3VtbWFyeS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVBdHNCYWRnZShzY29yZSkge1xuICBfdXBkYXRlQXRzU3VtbWFyeShzY29yZSk7XG5cbiAgY29uc3QgYmFkZ2UgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdHMtc2NvcmUtYmFkZ2UnKTtcbiAgY29uc3QgdmFsdWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdHMtc2NvcmUtdmFsdWUnKTtcbiAgaWYgKCFiYWRnZSB8fCAhdmFsdWVFbCkge1xuICAgIF9kaXNwYXRjaEF0c1Njb3JlVXBkYXRlZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghc2NvcmUgfHwgdHlwZW9mIHNjb3JlLm92ZXJhbGwgIT09ICdudW1iZXInKSB7XG4gICAgYmFkZ2Uuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBfZGlzcGF0Y2hBdHNTY29yZVVwZGF0ZWQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvdmVyYWxsID0gTWF0aC5yb3VuZChzY29yZS5vdmVyYWxsKTtcbiAgdmFsdWVFbC50ZXh0Q29udGVudCA9IGAke292ZXJhbGx9JWA7XG4gIGJhZGdlLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG5cbiAgYmFkZ2UuY2xhc3NMaXN0LnJlbW92ZSgnc2NvcmUtaGlnaCcsICdzY29yZS1tZWRpdW0nLCAnc2NvcmUtbG93Jyk7XG4gIGlmIChvdmVyYWxsID49IDc1KSB7XG4gICAgYmFkZ2UuY2xhc3NMaXN0LmFkZCgnc2NvcmUtaGlnaCcpO1xuICB9IGVsc2UgaWYgKG92ZXJhbGwgPj0gNTApIHtcbiAgICBiYWRnZS5jbGFzc0xpc3QuYWRkKCdzY29yZS1tZWRpdW0nKTtcbiAgfSBlbHNlIHtcbiAgICBiYWRnZS5jbGFzc0xpc3QuYWRkKCdzY29yZS1sb3cnKTtcbiAgfVxuXG4gIGJhZGdlLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGBBVFMgbWF0Y2ggc2NvcmU6ICR7b3ZlcmFsbH0lICgke3Njb3JlLmJhc2lzIHx8ICdyZXZpZXcnfSlgKTtcbiAgX2Rpc3BhdGNoQXRzU2NvcmVVcGRhdGVkKCk7XG59XG5cbi8qKlxuICogRmV0Y2ggQVRTIHNjb3JlIGZyb20gYmFja2VuZCBhbmQgdXBkYXRlIGJhZGdlICsgc3RhdGVNYW5hZ2VyLlxuICogU2FmZSB0byBjYWxsIGF0IGFueSBwaGFzZSBcdTIwMTQgZG9lcyBub3RoaW5nIHdoZW4gbm8gc2Vzc2lvbi9hbmFseXNpcyBhdmFpbGFibGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtiYXNpc10gIFwiYW5hbHlzaXNcIiB8IFwicmV2aWV3X2NoZWNrcG9pbnRcIiB8IFwicG9zdF9nZW5lcmF0aW9uXCJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEF0c1Njb3JlKGJhc2lzID0gJ3Jldmlld19jaGVja3BvaW50Jykge1xuICBjb25zdCBzZXNzaW9uSWQgPSBnbG9iYWxUaGlzLnN0YXRlTWFuYWdlcj8uZ2V0U2Vzc2lvbklkPy4oKTtcbiAgaWYgKCFzZXNzaW9uSWQpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9jdi9hdHMtc2NvcmUnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzZXNzaW9uX2lkOiBzZXNzaW9uSWQsIGJhc2lzIH0pLFxuICAgIH0pO1xuICAgIGlmICghcmVzLm9rKSByZXR1cm47XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2sgJiYgZGF0YS5hdHNfc2NvcmUpIHtcbiAgICAgIGdsb2JhbFRoaXMuc3RhdGVNYW5hZ2VyPy5zZXRBdHNTY29yZT8uKGRhdGEuYXRzX3Njb3JlKTtcbiAgICAgIHVwZGF0ZUF0c0JhZGdlKGRhdGEuYXRzX3Njb3JlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKF9lKSB7XG4gICAgLy8gTm9uLWZhdGFsIFx1MjAxNCBiYWRnZSBzdGF5cyBoaWRkZW4gb3Igc2hvd3Mgc3RhbGUgdmFsdWVcbiAgfVxufVxuXG4vKiogRGVib3VuY2VkOiBkZWZlcnMgcmVmcmVzaCA2MDBtcyBhZnRlciB0aGUgbGFzdCBjYWxsLiAqL1xubGV0IF9hdHNSZWZyZXNoVGltZXIgPSBudWxsO1xuZnVuY3Rpb24gc2NoZWR1bGVBdHNSZWZyZXNoKGJhc2lzID0gJ3Jldmlld19jaGVja3BvaW50Jykge1xuICBjbGVhclRpbWVvdXQoX2F0c1JlZnJlc2hUaW1lcik7XG4gIF9hdHNSZWZyZXNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlZnJlc2hBdHNTY29yZShiYXNpcyksIDYwMCk7XG59XG5cbmZ1bmN0aW9uIF9yZWZyZXNoU3VtbWFyeUZyb21TdGF0ZSgpIHtcbiAgY29uc3Qgc2NvcmUgPSBnbG9iYWxUaGlzLnN0YXRlTWFuYWdlcj8uZ2V0QXRzU2NvcmU/LigpO1xuICBpZiAoc2NvcmUgJiYgdHlwZW9mIHNjb3JlLm92ZXJhbGwgPT09ICdudW1iZXInKSB7XG4gICAgX3VwZGF0ZUF0c1N1bW1hcnkoc2NvcmUpO1xuICB9XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY3ZidWlsZGVyOmdlbmVyYXRpb24tc3RhdGUtY2hhbmdlZCcsICgpID0+IHtcbiAgICBfcmVmcmVzaFN1bW1hcnlGcm9tU3RhdGUoKTtcbiAgfSk7XG59XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gIGNvbnN0IHBvc2l0aW9uVGl0bGVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3NpdGlvbi10aXRsZScpO1xuICBpZiAocG9zaXRpb25UaXRsZUVsICYmIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHRpdGxlT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICBfcmVmcmVzaFN1bW1hcnlGcm9tU3RhdGUoKTtcbiAgICB9KTtcbiAgICB0aXRsZU9ic2VydmVyLm9ic2VydmUocG9zaXRpb25UaXRsZUVsLCB7XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgRVMgbW9kdWxlIGV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQgeyB1cGRhdGVBdHNCYWRnZSwgcmVmcmVzaEF0c1Njb3JlLCBzY2hlZHVsZUF0c1JlZnJlc2gsIGZvcm1hdEF0c1Njb3JlU3VtbWFyeSB9O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvbWVzc2FnZS1xdWV1ZS5qc1xuICogQ29udmVyc2F0aW9uIG1lc3NhZ2UgYXBwZW5kaW5nLCBsb2FkaW5nIG1lc3NhZ2VzLCBhbmQgdGhlIHByZS1ET00gYnVmZmVyXG4gKiBxdWV1ZSB0aGF0IGhvbGRzIG1lc3NhZ2VzIGVtaXR0ZWQgYmVmb3JlICNjb252ZXJzYXRpb24gZXhpc3RzLlxuICpcbiAqIERFUEVOREVOQ0lFUzpcbiAqICAgLSBjbGVhbkpzb25SZXNwb25zZSwgZXNjYXBlSHRtbCBmcm9tIHV0aWxzLmpzXG4gKiAgIC0gc2VuZE1lc3NhZ2UgZnJvbSBtZXNzYWdlLWRpc3BhdGNoLmpzIChvbiBnbG9iYWxUaGlzLCBmb3IgaW5saW5lIGJ1dHRvbnMpXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgY2xlYW5Kc29uUmVzcG9uc2UsIGVzY2FwZUh0bWwgfSBmcm9tICcuL3V0aWxzLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcignbWVzc2FnZS1xdWV1ZScpO1xuXG4vLyBCdWZmZXIgZm9yIG1lc3NhZ2VzIGVtaXR0ZWQgYmVmb3JlIHRoZSAjY29udmVyc2F0aW9uIGRpdiBleGlzdHMuXG4vLyBGbHVzaGVkIGF0IHRoZSBzdGFydCBvZiBpbml0KCkgb25jZSB0aGUgRE9NIGlzIGZ1bGx5IHJlYWR5LlxuY29uc3QgX21lc3NhZ2VRdWV1ZSA9IFtdO1xuXG5mdW5jdGlvbiBfZmx1c2hNZXNzYWdlUXVldWUoKSB7XG4gIHdoaWxlIChfbWVzc2FnZVF1ZXVlLmxlbmd0aCkge1xuICAgIGNvbnN0IHsgdHlwZSwgdGV4dCB9ID0gX21lc3NhZ2VRdWV1ZS5zaGlmdCgpO1xuICAgIGFwcGVuZE1lc3NhZ2UodHlwZSwgdGV4dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwZW5kTG9hZGluZ01lc3NhZ2UodGV4dCkge1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udmVyc2F0aW9uJyk7XG4gIGNvbnN0IG1lc3NhZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbWVzc2FnZS5jbGFzc05hbWUgPSAnbWVzc2FnZSBzeXN0ZW0nO1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNvbnRlbnQuY2xhc3NOYW1lID0gJ2NvbnRlbnQgbG9hZGluZy1tZXNzYWdlJztcbiAgY29udGVudC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPjwvZGl2PjxzcGFuPiR7dGV4dH08L3NwYW4+YDtcbiAgbWVzc2FnZS5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgY29udmVyc2F0aW9uLmFwcGVuZENoaWxkKG1lc3NhZ2UpO1xuICBjb252ZXJzYXRpb24uc2Nyb2xsVG9wID0gY29udmVyc2F0aW9uLnNjcm9sbEhlaWdodDtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUxvYWRpbmdNZXNzYWdlKG1lc3NhZ2VFbGVtZW50KSB7XG4gIGlmIChtZXNzYWdlRWxlbWVudCAmJiBtZXNzYWdlRWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgbWVzc2FnZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChtZXNzYWdlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqIFJlc3RvcmVzIGEgcHJldmlvdXNseS1zYXZlZCBtZXNzYWdlIHdob3NlIGNvbnRlbnQgaXMgYWxyZWFkeSBIVE1MIChzYXZlZCB2aWEgaW5uZXJIVE1MKS4gKi9cbmZ1bmN0aW9uIGFwcGVuZE1lc3NhZ2VIdG1sKHR5cGUsIGh0bWwpIHtcbiAgY29uc3QgY29udmVyc2F0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnZlcnNhdGlvbicpO1xuICBjb25zdCBtZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG1lc3NhZ2UuY2xhc3NOYW1lID0gYG1lc3NhZ2UgJHt0eXBlfWA7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgY29udGVudC5jbGFzc05hbWUgPSAnY29udGVudCc7XG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgbWVzc2FnZS5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgY29udmVyc2F0aW9uLmFwcGVuZENoaWxkKG1lc3NhZ2UpO1xuICBjb252ZXJzYXRpb24uc2Nyb2xsVG9wID0gY29udmVyc2F0aW9uLnNjcm9sbEhlaWdodDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb2xsYXBzaWJsZSBsb25nLWNvbnRlbnQgaGVscGVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgQ09MTEFQU0VfTElORV9USFJFU0hPTEQgPSA4OyAgLy8gbGluZXMgYmVmb3JlIGNvbGxhcHNpbmdcbmNvbnN0IENPTExBUFNFX0NIQVJfVEhSRVNIT0xEID0gNDgwOyAvLyBjaGFycyBiZWZvcmUgY29sbGFwc2luZ1xuXG4vKipcbiAqIFdyYXAgcmVuZGVyZWQgSFRNTCBpbiBhIGNvbGxhcHNpYmxlIGNvbnRhaW5lciB3aGVuIHRoZSBjb250ZW50IGV4Y2VlZHMgdGhlXG4gKiB0aHJlc2hvbGQsIHNob3dpbmcgdGhlIGZpcnN0IGZldyBsaW5lcyB3aXRoIGEgdG9nZ2xlIGJ1dHRvbi5cbiAqL1xuZnVuY3Rpb24gX21ha2VDb2xsYXBzaWJsZUNvbnRlbnQoaHRtbCwgdGV4dFN0cikge1xuICBjb25zdCBsaW5lcyA9IHRleHRTdHIuc3BsaXQoJ1xcbicpO1xuICBpZiAobGluZXMubGVuZ3RoIDw9IENPTExBUFNFX0xJTkVfVEhSRVNIT0xEICYmIHRleHRTdHIubGVuZ3RoIDw9IENPTExBUFNFX0NIQVJfVEhSRVNIT0xEKSB7XG4gICAgcmV0dXJuIHsgaHRtbCwgY29sbGFwc2libGU6IGZhbHNlIH07XG4gIH1cblxuICAvLyBCdWlsZCBwcmV2aWV3OiBmaXJzdCBDT0xMQVBTRV9MSU5FX1RIUkVTSE9MRCBsaW5lcyB3b3J0aCBvZiBlc2NhcGVkIHRleHRcbiAgY29uc3QgcHJldmlld0xpbmVzID0gbGluZXMuc2xpY2UoMCwgQ09MTEFQU0VfTElORV9USFJFU0hPTEQpO1xuICBjb25zdCBwcmV2aWV3SHRtbCA9IGVzY2FwZUh0bWwocHJldmlld0xpbmVzLmpvaW4oJ1xcbicpKVxuICAgIC5yZXBsYWNlKC9cXCpcXCooLis/KVxcKlxcKi9nLCAnPHN0cm9uZz4kMTwvc3Ryb25nPicpXG4gICAgLnJlcGxhY2UoL1xcKiguKz8pXFwqL2csICc8ZW0+JDE8L2VtPicpXG4gICAgLnJlcGxhY2UoL2AoW15gXSspYC9nLCAnPGNvZGU+JDE8L2NvZGU+JylcbiAgICAucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XG5cbiAgY29uc3Qgb3ZlcmZsb3cgPSBsaW5lcy5sZW5ndGggLSBDT0xMQVBTRV9MSU5FX1RIUkVTSE9MRDtcbiAgY29uc3QgaWQgPSBgY29sbGFwc2libGUtJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDcpfWA7XG5cbiAgY29uc3Qgd3JhcHBlZCA9IGBcbiAgICA8ZGl2IGNsYXNzPVwibXNnLXByZXZpZXdcIiBpZD1cIiR7aWR9LXByZXZpZXdcIj4ke3ByZXZpZXdIdG1sfTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtc2ctZnVsbFwiIGlkPVwiJHtpZH0tZnVsbFwiIHN0eWxlPVwiZGlzcGxheTpub25lXCI+JHtodG1sfTwvZGl2PlxuICAgIDxidXR0b24gY2xhc3M9XCJtc2ctdG9nZ2xlLWJ0blwiIG9uY2xpY2s9XCIoZnVuY3Rpb24oYnRuKXtcbiAgICAgIHZhciBwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcke2lkfS1wcmV2aWV3JyksXG4gICAgICAgICAgZj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnJHtpZH0tZnVsbCcpO1xuICAgICAgaWYoZi5zdHlsZS5kaXNwbGF5PT09J25vbmUnKXtcbiAgICAgICAgcC5zdHlsZS5kaXNwbGF5PSdub25lJzsgZi5zdHlsZS5kaXNwbGF5PSdibG9jayc7IGJ0bi50ZXh0Q29udGVudD0nU2hvdyBsZXNzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHAuc3R5bGUuZGlzcGxheT0nJzsgZi5zdHlsZS5kaXNwbGF5PSdub25lJzsgYnRuLnRleHRDb250ZW50PSdTaG93ICR7b3ZlcmZsb3d9IG1vcmUgbGluZSR7b3ZlcmZsb3cgPT09IDEgPyAnJyA6ICdzJ31cdTIwMjYnO1xuICAgICAgfVxuICAgIH0pKHRoaXMpXCIgdHlwZT1cImJ1dHRvblwiPlNob3cgJHtvdmVyZmxvd30gbW9yZSBsaW5lJHtvdmVyZmxvdyA9PT0gMSA/ICcnIDogJ3MnfVx1MjAyNjwvYnV0dG9uPmA7XG5cbiAgcmV0dXJuIHsgaHRtbDogd3JhcHBlZCwgY29sbGFwc2libGU6IHRydWUgfTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kTWVzc2FnZSh0eXBlLCB0ZXh0KSB7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb252ZXJzYXRpb24nKTtcbiAgaWYgKCFjb252ZXJzYXRpb24pIHtcbiAgICAvLyBET00gbm90IHJlYWR5IHlldCBcdTIwMTQgYnVmZmVyIHVudGlsIF9mbHVzaE1lc3NhZ2VRdWV1ZSgpIGlzIGNhbGxlZCBmcm9tIGluaXQoKVxuICAgIF9tZXNzYWdlUXVldWUucHVzaCh7IHR5cGUsIHRleHQgfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBtZXNzYWdlLmNsYXNzTmFtZSA9IGBtZXNzYWdlICR7dHlwZX1gO1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNvbnRlbnQuY2xhc3NOYW1lID0gJ2NvbnRlbnQnO1xuXG4gIC8vIFNpbXBsZSBtYXJrZG93biByZW5kZXJpbmc6IGNvbnZlcnQgKip0ZXh0KiogdG8gPHN0cm9uZz4gYW5kIHByZXNlcnZlIG5ld2xpbmVzXG4gIGNvbnN0IHRleHRTdHIgPSB0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgPyB0ZXh0IDogSlNPTi5zdHJpbmdpZnkodGV4dCwgbnVsbCwgMik7XG4gIGNvbnN0IHJlbmRlcmVkSHRtbCA9IGVzY2FwZUh0bWwodGV4dFN0cilcbiAgICAucmVwbGFjZSgvXFwqXFwqKC4rPylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKVxuICAgIC5yZXBsYWNlKC9cXCooLis/KVxcKi9nLCAnPGVtPiQxPC9lbT4nKVxuICAgIC5yZXBsYWNlKC9gKFteYF0rKWAvZywgJzxjb2RlPiQxPC9jb2RlPicpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCAnPGJyPicpO1xuXG4gIC8vIEFwcGx5IGNvbGxhcHNpYmxlIHdyYXBwZXIgZm9yIGxvbmcgdXNlci9hc3Npc3RhbnQgbWVzc2FnZXNcbiAgaWYgKHR5cGUgPT09ICd1c2VyJyB8fCB0eXBlID09PSAnYXNzaXN0YW50Jykge1xuICAgIGNvbnN0IHsgaHRtbCwgY29sbGFwc2libGUgfSA9IF9tYWtlQ29sbGFwc2libGVDb250ZW50KHJlbmRlcmVkSHRtbCwgdGV4dFN0cik7XG4gICAgY29udGVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgIGlmIChjb2xsYXBzaWJsZSkgY29udGVudC5jbGFzc0xpc3QuYWRkKCdjb2xsYXBzaWJsZS1tc2cnKTtcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50LmlubmVySFRNTCA9IHJlbmRlcmVkSHRtbDtcbiAgfVxuICBtZXNzYWdlLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuXG4gIC8vIENoZWNrIGlmIG1lc3NhZ2UgZW5kcyB3aXRoIHJlc3BvbnNlIG9wdGlvbnMgbGlrZSAoeWVzL25vL21heWJlKVxuICBjb25zdCBvcHRpb25zTWF0Y2ggPSB0ZXh0U3RyLm1hdGNoKC9cXCgoW14pXStcXC9bXildKylcXClcXHMqJC8pO1xuICBpZiAob3B0aW9uc01hdGNoICYmIHR5cGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbnNNYXRjaFsxXS5zcGxpdCgnLycpLm1hcChvcHQgPT4gb3B0LnRyaW0oKSk7XG4gICAgY29uc3QgYnV0dG9uQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYnV0dG9uQ29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSAnbWFyZ2luLXRvcDogMTJweDsgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGZsZXgtd3JhcDogd3JhcDsnO1xuICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgY29uc3QgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICBidG4udGV4dENvbnRlbnQgPSBvcHRpb247XG4gICAgICBidG4uY2xhc3NOYW1lID0gJ2FjdGlvbi1idG4nO1xuICAgICAgYnRuLnN0eWxlLmNzc1RleHQgPSAncGFkZGluZzogOHB4IDE2cHg7IGJhY2tncm91bmQ6ICMzYjgyZjY7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyOiBub25lOyBib3JkZXItcmFkaXVzOiA2cHg7IGN1cnNvcjogcG9pbnRlcjsnO1xuICAgICAgYnRuLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZXNzYWdlLWlucHV0JykudmFsdWUgPSBvcHRpb247XG4gICAgICAgIGlmICh0eXBlb2Ygc2VuZE1lc3NhZ2UgPT09ICdmdW5jdGlvbicpIHNlbmRNZXNzYWdlKCk7XG4gICAgICB9O1xuICAgICAgYnV0dG9uQ29udGFpbmVyLmFwcGVuZENoaWxkKGJ0bik7XG4gICAgfSk7XG4gICAgbWVzc2FnZS5hcHBlbmRDaGlsZChidXR0b25Db250YWluZXIpO1xuICB9XG5cbiAgY29udmVyc2F0aW9uLmFwcGVuZENoaWxkKG1lc3NhZ2UpO1xuICBjb252ZXJzYXRpb24uc2Nyb2xsVG9wID0gY29udmVyc2F0aW9uLnNjcm9sbEhlaWdodDtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbi8qKlxuICogQXBwZW5kcyBhIHN5c3RlbSBlcnJvciBtZXNzYWdlIHdpdGggYW4gb3B0aW9uYWwgUmV0cnkgYnV0dG9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgdGV4dCAgICAgICAtIEVycm9yIG1lc3NhZ2UgdGV4dCAoc3VwcG9ydHMgKipib2xkKiogbWFya2Rvd24pXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmV0cnlGbl0gIC0gQ2FsbGVkIHdoZW4gUmV0cnkgaXMgY2xpY2tlZDsgb21pdCBmb3Igbm9uLXJldHJ5YWJsZSBlcnJvcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIFtyZXRyeUxhYmVsXSAtIFJldHJ5IGJ1dHRvbiBsYWJlbCAoZGVmYXVsdCAnUmV0cnknKVxuICovXG5mdW5jdGlvbiBhcHBlbmRSZXRyeU1lc3NhZ2UodGV4dCwgcmV0cnlGbiwgcmV0cnlMYWJlbCA9ICdSZXRyeScsIGNhbmNlbEZuID0gbnVsbCkge1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udmVyc2F0aW9uJyk7XG4gIGNvbnN0IG1lc3NhZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbWVzc2FnZS5jbGFzc05hbWUgPSAnbWVzc2FnZSBzeXN0ZW0nO1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNvbnRlbnQuY2xhc3NOYW1lID0gJ2NvbnRlbnQnO1xuICBjb25zdCBlc2NhcGVkID0gZXNjYXBlSHRtbCh0ZXh0KTtcbiAgY29udGVudC5pbm5lckhUTUwgPSBlc2NhcGVkXG4gICAgLnJlcGxhY2UoL1xcKlxcKiguKz8pXFwqXFwqL2csICc8c3Ryb25nPiQxPC9zdHJvbmc+JylcbiAgICAucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XG4gIG1lc3NhZ2UuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gIGlmICh0eXBlb2YgcmV0cnlGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIGJ0bi50ZXh0Q29udGVudCA9IHJldHJ5TGFiZWw7XG4gICAgYnRuLnN0eWxlLmNzc1RleHQgPSAnbWFyZ2luLXRvcDo4cHg7cGFkZGluZzo2cHggMTRweDtiYWNrZ3JvdW5kOiMzYjgyZjY7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjZweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MC44NXJlbTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6OHB4Oyc7XG4gICAgYnRuLm9uY2xpY2sgPSAoKSA9PiB7IG1lc3NhZ2UucmVtb3ZlKCk7IHJldHJ5Rm4oKTsgfTtcbiAgICBtZXNzYWdlLmFwcGVuZENoaWxkKGJ0bik7XG4gIH1cbiAgaWYgKHR5cGVvZiBjYW5jZWxGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGNhbmNlbEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIGNhbmNlbEJ0bi50ZXh0Q29udGVudCA9ICdTdG9wIHJldHJpZXMnO1xuICAgIGNhbmNlbEJ0bi5zdHlsZS5jc3NUZXh0ID0gJ21hcmdpbi10b3A6OHB4O3BhZGRpbmc6NnB4IDE0cHg7YmFja2dyb3VuZDojNmI3MjgwO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo2cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjAuODVyZW07ZGlzcGxheTppbmxpbmUtYmxvY2s7JztcbiAgICBjYW5jZWxCdG4ub25jbGljayA9ICgpID0+IHsgbWVzc2FnZS5yZW1vdmUoKTsgY2FuY2VsRm4oKTsgfTtcbiAgICBtZXNzYWdlLmFwcGVuZENoaWxkKGNhbmNlbEJ0bik7XG4gIH1cbiAgY29udmVyc2F0aW9uLmFwcGVuZENoaWxkKG1lc3NhZ2UpO1xuICBjb252ZXJzYXRpb24uc2Nyb2xsVG9wID0gY29udmVyc2F0aW9uLnNjcm9sbEhlaWdodDtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZEZvcm1hdHRlZEFuYWx5c2lzKHJlc3VsdCkge1xuICB0cnkge1xuICAgIGNvbnN0IGNsZWFuUmVzdWx0ID0gY2xlYW5Kc29uUmVzcG9uc2UocmVzdWx0KTtcbiAgICBjb25zdCBkYXRhID0gdHlwZW9mIGNsZWFuUmVzdWx0ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoY2xlYW5SZXN1bHQpIDogY2xlYW5SZXN1bHQ7XG5cbiAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgKGRhdGEudGl0bGUgfHwgZGF0YS5yZXF1aXJlZF9za2lsbHMpKSB7XG4gICAgICBjb25zdCBjb252ZXJzYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udmVyc2F0aW9uJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBtZXNzYWdlLmNsYXNzTmFtZSA9ICdtZXNzYWdlIGFzc2lzdGFudCc7XG4gICAgICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBjb250ZW50LmNsYXNzTmFtZSA9ICdjb250ZW50IGpvYi1hbmFseXNpcyc7XG5cbiAgICAgIGxldCBodG1sID0gJzxoMz5cdUQ4M0RcdURDQ0IgSm9iIEFuYWx5c2lzIENvbXBsZXRlPC9oMz4nO1xuICAgICAgaWYgKGRhdGEudGl0bGUpICBodG1sICs9IGA8cD48c3Ryb25nPlBvc2l0aW9uOjwvc3Ryb25nPiAke2RhdGEudGl0bGV9IGF0ICR7ZGF0YS5jb21wYW55IHx8ICdDb21wYW55J308L3A+YDtcbiAgICAgIGlmIChkYXRhLmRvbWFpbikgaHRtbCArPSBgPHA+PHN0cm9uZz5Eb21haW46PC9zdHJvbmc+ICR7ZGF0YS5kb21haW59PC9wPmA7XG5cbiAgICAgIGlmIChkYXRhLnJlcXVpcmVkX3NraWxscz8ubGVuZ3RoKSB7XG4gICAgICAgIGh0bWwgKz0gJzxoND5cdUQ4M0NcdURGQUYgUmVxdWlyZWQgU2tpbGxzOjwvaDQ+PHVsPic7XG4gICAgICAgIGRhdGEucmVxdWlyZWRfc2tpbGxzLmZvckVhY2gocyA9PiB7IGh0bWwgKz0gYDxsaT4ke3N9PC9saT5gOyB9KTtcbiAgICAgICAgaHRtbCArPSAnPC91bD4nO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEucHJlZmVycmVkX3NraWxscz8ubGVuZ3RoKSB7XG4gICAgICAgIGh0bWwgKz0gJzxoND5cdTJCNTAgUHJlZmVycmVkIFNraWxsczo8L2g0Pjx1bD4nO1xuICAgICAgICBkYXRhLnByZWZlcnJlZF9za2lsbHMuZm9yRWFjaChzID0+IHsgaHRtbCArPSBgPGxpPiR7c308L2xpPmA7IH0pO1xuICAgICAgICBodG1sICs9ICc8L3VsPic7XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5uaWNlX3RvX2hhdmVfcmVxdWlyZW1lbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgaHRtbCArPSAnPGg0Plx1MjcyOCBOaWNlIHRvIEhhdmU6PC9oND48dWw+JztcbiAgICAgICAgZGF0YS5uaWNlX3RvX2hhdmVfcmVxdWlyZW1lbnRzLmZvckVhY2gociA9PiB7IGh0bWwgKz0gYDxsaT4ke3J9PC9saT5gOyB9KTtcbiAgICAgICAgaHRtbCArPSAnPC91bD4nO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEuYXRzX2tleXdvcmRzPy5sZW5ndGgpIHtcbiAgICAgICAgaHRtbCArPSAnPGg0Plx1RDgzRFx1REQxMSBBVFMgS2V5d29yZHM6PC9oND48cCBzdHlsZT1cImxpbmUtaGVpZ2h0OiAyO1wiPic7XG4gICAgICAgIGRhdGEuYXRzX2tleXdvcmRzLmZvckVhY2goa3cgPT4ge1xuICAgICAgICAgIGh0bWwgKz0gYDxzcGFuIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZDojZGJlYWZlO2NvbG9yOiMxZTQwYWY7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoycHggOHB4O21hcmdpbjoycHg7Zm9udC1zaXplOjAuODVlbTtcIj4ke2t3fTwvc3Bhbj5gO1xuICAgICAgICB9KTtcbiAgICAgICAgaHRtbCArPSAnPC9wPic7XG4gICAgICB9XG5cbiAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIG1lc3NhZ2UuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgICBjb252ZXJzYXRpb24uYXBwZW5kQ2hpbGQobWVzc2FnZSk7XG4gICAgICBjb252ZXJzYXRpb24uc2Nyb2xsVG9wID0gY29udmVyc2F0aW9uLnNjcm9sbEhlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgcmVzdWx0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3IoJ0FuYWx5c2lzIGRpc3BsYXkgZXJyb3I6JywgZSk7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgcmVzdWx0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBlbmRGb3JtYXR0ZWRSZXNwb25zZShyZXNwb25zZSkge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgcmVzcG9uc2UgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXNwb25zZSkgOiByZXNwb25zZTtcbiAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgKGRhdGEudGl0bGUgfHwgZGF0YS5yZXF1aXJlZF9za2lsbHMpKSB7XG4gICAgICBhcHBlbmRGb3JtYXR0ZWRBbmFseXNpcyhyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIHJlc3BvbnNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCByZXNwb25zZSk7XG4gIH1cbn1cblxuLy8gYXBwZW5kUmF3SHRtbCBpcyBuZWVkZWQgYnkgbWVzc2FnZS1kaXNwYXRjaDsgZGVmaW5lZCBoZXJlIHNpbmNlIGl0IHVzZXMgdGhlXG4vLyBjb252ZXJzYXRpb24gZWxlbWVudCBwYXR0ZXJuLlxuZnVuY3Rpb24gYXBwZW5kUmF3SHRtbChodG1sKSB7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb252ZXJzYXRpb24nKTtcbiAgaWYgKCFjb252ZXJzYXRpb24pIHJldHVybjtcbiAgY29udmVyc2F0aW9uLmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgaHRtbCk7XG4gIGNvbnZlcnNhdGlvbi5zY3JvbGxUb3AgPSBjb252ZXJzYXRpb24uc2Nyb2xsSGVpZ2h0O1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgRVMgbW9kdWxlIGV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICBfbWVzc2FnZVF1ZXVlLCBfZmx1c2hNZXNzYWdlUXVldWUsXG4gIGFwcGVuZExvYWRpbmdNZXNzYWdlLCByZW1vdmVMb2FkaW5nTWVzc2FnZSxcbiAgYXBwZW5kTWVzc2FnZUh0bWwsIGFwcGVuZE1lc3NhZ2UsXG4gIGFwcGVuZFJldHJ5TWVzc2FnZSxcbiAgYXBwZW5kRm9ybWF0dGVkQW5hbHlzaXMsIGFwcGVuZEZvcm1hdHRlZFJlc3BvbnNlLFxuICBhcHBlbmRSYXdIdG1sLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3Jldmlldy10YWJsZS1iYXNlLmpzXG4gKiBUYWIgc3dpdGNoaW5nLCBhbmFseXNpcyB0YWIsIGN1c3RvbWl6YXRpb24gcmVzcG9uc2UgaGFuZGxlciwgcmV2aWV3LXBhbmVcbiAqIGNvb3JkaW5hdGlvbiwgYW5kIHRoZSBwYWdlLWVzdGltYXRlIHdpZGdldC5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKGFsbCByZXNvbHZlZCB0aHJvdWdoIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIGFwcGVuZE1lc3NhZ2UsIHNhdmVUYWJEYXRhLCBjbGVhbkpzb25SZXNwb25zZSwgZXNjYXBlSHRtbCxcbiAqICAgZ2V0U3RhZ2VGb3JUYWIsIHVwZGF0ZVRhYkJhckZvclN0YWdlLCB1cGRhdGVBY3Rpb25CdXR0b25zLFxuICogICBwb3B1bGF0ZUpvYlRhYiwgcG9wdWxhdGVRdWVzdGlvbnNUYWIsIGJ1aWxkQWNoaWV2ZW1lbnRzRWRpdG9yLFxuICogICByZW5kZXJSZXdyaXRlUGFuZWwsIHBvcHVsYXRlQ1ZFZGl0b3JUYWIsXG4gKiAgIHBvcHVsYXRlRG93bmxvYWRUYWIsIHBvcHVsYXRlU3BlbGxDaGVja1RhYiwgaW5pdGlhdGVMYXlvdXRJbnN0cnVjdGlvbnMsXG4gKiAgIHBvcHVsYXRlRmluYWxpc2VUYWIsIHBvcHVsYXRlTWFzdGVyVGFiLCBwb3B1bGF0ZUNvdmVyTGV0dGVyVGFiLFxuICogICBwb3B1bGF0ZVNjcmVlbmluZ1RhYiwgZXh0cmFjdEZpcnN0SnNvbk9iamVjdCxcbiAqICAgZmV0Y2hTdGF0dXMsIGFwaUNhbGwsXG4gKiAgIGJ1aWxkRXhwZXJpZW5jZVJldmlld1RhYmxlLCBidWlsZFNraWxsc1Jldmlld1RhYmxlLFxuICogICBidWlsZEFjaGlldmVtZW50c1Jldmlld1RhYmxlLCBidWlsZFN1bW1hcnlGb2N1c1NlY3Rpb24sXG4gKiAgIGJ1aWxkUHVibGljYXRpb25zUmV2aWV3VGFibGUsIGdldEV4cGVyaWVuY2VEZXRhaWxzLFxuICogICBnZXRFeHBlcmllbmNlUmVjb21tZW5kYXRpb24sIGFjaGlldmVtZW50RGVjaXNpb25zXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdyZXZpZXctdGFibGUtYmFzZScpO1xuXG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgX1NURVBfRElTUExBWSB9IGZyb20gJy4vd29ya2Zsb3ctc3RlcHMuanMnO1xuXG4vLyBcdTI1MDBcdTI1MDAgTW9kdWxlLWxldmVsIHN0YXRlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5sZXQgdXNlclNlbGVjdGlvbnMgPSB7XG4gIGV4cGVyaWVuY2VzOiB7fSwgIC8vIGV4cF9pZCAtPiAnZW1waGFzaXplJ3wnaW5jbHVkZSd8J2RlLWVtcGhhc2l6ZSd8J2V4Y2x1ZGUnXG4gIHNraWxsczoge30gICAgICAgIC8vIHNraWxsX25hbWUgLT4gJ2VtcGhhc2l6ZSd8J2luY2x1ZGUnfCdkZS1lbXBoYXNpemUnfCdleGNsdWRlJ1xufTtcbmxldCBwYWdlRXN0aW1hdGVUaW1lciA9IG51bGw7XG5sZXQgcGFnZUVzdGltYXRlUmVxdWVzdElkID0gMDtcblxuLy8gRHJhZnQgaW5wdXQgY2FjaGUgXHUyMDEzIHByZXNlcnZlcyB1c2VyLXR5cGVkIHZhbHVlcyBhY3Jvc3MgdGFiIHN3aXRjaGVzXG5jb25zdCBfZHJhZnRJbnB1dHMgPSB7fTtcblxuZnVuY3Rpb24gX3NhdmVEcmFmdElucHV0c0ZvclRhYih0YWJOYW1lKSB7XG4gIGlmICghdGFiTmFtZSkgcmV0dXJuO1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250ZW50KSByZXR1cm47XG4gIGNvbnN0IHNhdmVkID0ge307XG4gIGNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgndGV4dGFyZWEsIGlucHV0LCBzZWxlY3QnKS5mb3JFYWNoKGVsID0+IHtcbiAgICBpZiAoIWVsLmlkIHx8IGVsLnR5cGUgPT09ICdmaWxlJykgcmV0dXJuO1xuICAgIHNhdmVkW2VsLmlkXSA9IChlbC50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsLnR5cGUgPT09ICdyYWRpbycpID8gZWwuY2hlY2tlZCA6IGVsLnZhbHVlO1xuICB9KTtcbiAgaWYgKE9iamVjdC5rZXlzKHNhdmVkKS5sZW5ndGggPiAwKSB7XG4gICAgX2RyYWZ0SW5wdXRzW3RhYk5hbWVdID0gc2F2ZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc3RvcmVEcmFmdElucHV0c0ZvclRhYih0YWJOYW1lKSB7XG4gIGNvbnN0IGNhY2hlZCA9IF9kcmFmdElucHV0c1t0YWJOYW1lXTtcbiAgaWYgKCFjYWNoZWQpIHJldHVybjtcbiAgT2JqZWN0LmVudHJpZXMoY2FjaGVkKS5mb3JFYWNoKChbaWQsIHZhbHVlXSkgPT4ge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmICghZWwgfHwgZWwucmVhZE9ubHkgfHwgZWwuZGlzYWJsZWQgfHwgZWwudHlwZSA9PT0gJ2ZpbGUnKSByZXR1cm47XG4gICAgaWYgKGVsLnR5cGUgPT09ICdjaGVja2JveCcgfHwgZWwudHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgZWwuY2hlY2tlZCA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZVRhYkRhdGFTdGF0ZSgpIHtcbiAgcmV0dXJuIHN0YXRlTWFuYWdlci5nZXRBbGxUYWJEYXRhKCk7XG59XG5cbmZ1bmN0aW9uIGlzUmVjb25uZWN0SW5Qcm9ncmVzcygpIHtcbiAgcmV0dXJuIHN0YXRlTWFuYWdlci5pc1JlY29ubmVjdGluZygpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgSW5jbHVzaW9uIGNvdW50cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gdXBkYXRlSW5jbHVzaW9uQ291bnRzKCkge1xuICB0cnkge1xuICAgIGNvbnN0IGV4cERlY3MgPSAod2luZG93Ll9zYXZlZERlY2lzaW9ucyAmJiB3aW5kb3cuX3NhdmVkRGVjaXNpb25zLmV4cGVyaWVuY2VfZGVjaXNpb25zKSB8fCB1c2VyU2VsZWN0aW9ucy5leHBlcmllbmNlcyB8fCB7fTtcbiAgICBjb25zdCBza2lsbERlY3MgPSAod2luZG93Ll9zYXZlZERlY2lzaW9ucyAmJiB3aW5kb3cuX3NhdmVkRGVjaXNpb25zLnNraWxsX2RlY2lzaW9ucykgfHwgdXNlclNlbGVjdGlvbnMuc2tpbGxzIHx8IHt9O1xuICAgIGNvbnN0IGFjaERlY3MgPSAod2luZG93Ll9zYXZlZERlY2lzaW9ucyAmJiB3aW5kb3cuX3NhdmVkRGVjaXNpb25zLmFjaGlldmVtZW50X2RlY2lzaW9ucykgfHwgd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zIHx8IHt9O1xuXG4gICAgY29uc3QgZXhwSW5jbHVkZWQgPSBPYmplY3QudmFsdWVzKGV4cERlY3MpLmZpbHRlcih2ID0+IHYgIT09ICdleGNsdWRlJykubGVuZ3RoO1xuICAgIGNvbnN0IHNraWxsSW5jbHVkZWQgPSBPYmplY3QudmFsdWVzKHNraWxsRGVjcykuZmlsdGVyKHYgPT4gdiAhPT0gJ2V4Y2x1ZGUnKS5sZW5ndGg7XG4gICAgY29uc3QgYWNoSW5jbHVkZWQgPSBPYmplY3QudmFsdWVzKGFjaERlY3MpLmZpbHRlcih2ID0+IHYgIT09ICdleGNsdWRlJykubGVuZ3RoO1xuXG4gICAgY29uc3QgZXhwVGFiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYi1leHAtcmV2aWV3Jyk7XG4gICAgY29uc3Qgc2tpbGxUYWIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLXNraWxscy1yZXZpZXcnKTtcbiAgICBjb25zdCBhY2hUYWIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLWFjaGlldmVtZW50cy1yZXZpZXcnKTtcblxuICAgIGlmIChleHBUYWIpIGV4cFRhYi50ZXh0Q29udGVudCA9IGBcdUQ4M0RcdURDQ0EgRXhwZXJpZW5jZXMke2V4cEluY2x1ZGVkID8gJyAoJyArIGV4cEluY2x1ZGVkICsgJyknIDogJyd9YDtcbiAgICBpZiAoc2tpbGxUYWIpIHNraWxsVGFiLnRleHRDb250ZW50ID0gYFx1RDgzRFx1REVFMFx1RkUwRiBTa2lsbHMke3NraWxsSW5jbHVkZWQgPyAnICgnICsgc2tpbGxJbmNsdWRlZCArICcpJyA6ICcnfWA7XG4gICAgaWYgKGFjaFRhYikgYWNoVGFiLnRleHRDb250ZW50ID0gYFx1RDgzQ1x1REZDNiBBY2hpZXZlbWVudHMke2FjaEluY2x1ZGVkID8gJyAoJyArIGFjaEluY2x1ZGVkICsgJyknIDogJyd9YDtcbiAgfSBjYXRjaCAoZSkgeyBsb2cud2FybignRmFpbGVkIHRvIHVwZGF0ZSBpbmNsdXNpb24gY291bnRzOicsIGUpOyB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBHZW5lcmF0ZSBDViB0YWIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIF9wb3B1bGF0ZUdlbmVyYXRlVGFiKGN2RGF0YSwgY29udGVudCkge1xuICBpZiAoIWN2RGF0YSB8fCAhY3ZEYXRhLmZpbGVzIHx8ICFjdkRhdGEuZmlsZXMubGVuZ3RoKSB7XG4gICAgY29udGVudC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+PGRpdiBjbGFzcz1cImljb25cIj5cdUQ4M0RcdURDQzQ8L2Rpdj48aDM+R2VuZXJhdGVkIENWPC9oMz48cD5HZW5lcmF0ZSBDViB0byBzZWUgcHJldmlldzwvcD48L2Rpdj4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG1ldGEgICAgID0gY3ZEYXRhLm1ldGFkYXRhIHx8IHt9O1xuICBjb25zdCByb2xlICAgICA9IG1ldGEucm9sZSAgICAgfHwgbWV0YS5wb3NpdGlvbiB8fCAnJztcbiAgY29uc3QgY29tcGFueSAgPSBtZXRhLmNvbXBhbnkgIHx8ICcnO1xuICBjb25zdCBzdWJ0aXRsZSA9IHJvbGUgJiYgY29tcGFueSA/IGAke3JvbGV9IFx1MjAxNCAke2NvbXBhbnl9YCA6IHJvbGUgfHwgY29tcGFueSB8fCAnQ1YgZ2VuZXJhdGVkJztcblxuICBjb25zdCBJQ09OUyA9IHsgJy5wZGYnOiAnXHVEODNEXHVEQ0M0JywgJy5kb2N4JzogJ1x1RDgzRFx1RENERCcsICcuaHRtbCc6ICdcdUQ4M0NcdURGMTAnIH07XG4gIGNvbnN0IExBQkVMUyA9IHtcbiAgICAnLnBkZic6ICBmID0+IGYuaW5jbHVkZXMoJ0FUUycpID8gJ0FUUyBQREYnICA6ICdIdW1hbiBQREYnLFxuICAgICcuZG9jeCc6IGYgPT4gZi5pbmNsdWRlcygnQVRTJykgPyAnQVRTIERPQ1gnIDogZi5zdGFydHNXaXRoKCdDb3ZlckxldHRlcl8nKSA/ICdDb3ZlciBMZXR0ZXInIDogJ0h1bWFuIERPQ1gnLFxuICAgICcuaHRtbCc6ICgpID0+ICdIVE1MJyxcbiAgfTtcblxuICBjb25zdCBkb3dubG9hZGFibGVFeHRzID0gbmV3IFNldChbJy5wZGYnLCAnLmRvY3gnLCAnLmh0bWwnXSk7XG4gIGNvbnN0IGZpbGVzID0gKGN2RGF0YS5maWxlcyB8fCBbXSkuZmlsdGVyKGYgPT4ge1xuICAgIGNvbnN0IGV4dCA9IGYuc2xpY2UoZi5sYXN0SW5kZXhPZignLicpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBkb3dubG9hZGFibGVFeHRzLmhhcyhleHQpICYmIGYgIT09ICdqb2JfZGVzY3JpcHRpb24udHh0JztcbiAgfSk7XG5cbiAgY29uc3Qgc2lkID0gdHlwZW9mIGdldFNlc3Npb25JZEZyb21VUkwgPT09ICdmdW5jdGlvbicgPyBnZXRTZXNzaW9uSWRGcm9tVVJMKCkgOiBudWxsO1xuICBjb25zdCBzZXNzaW9uUGFyYW0gPSBzaWQgPyBgP3Nlc3Npb25faWQ9JHtlbmNvZGVVUklDb21wb25lbnQoc2lkKX1gIDogJyc7XG5cbiAgbGV0IGZpbGVSb3dzID0gJyc7XG4gIGZvciAoY29uc3QgZiBvZiBmaWxlcykge1xuICAgIGNvbnN0IGV4dCAgID0gZi5zbGljZShmLmxhc3RJbmRleE9mKCcuJykpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgaWNvbiAgPSBJQ09OU1tleHRdICB8fCAnXHVEODNEXHVEQ0MxJztcbiAgICBjb25zdCBsYWJlbCA9IExBQkVMU1tleHRdID8gTEFCRUxTW2V4dF0oZikgOiBmO1xuICAgIGZpbGVSb3dzICs9IGBcbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O3BhZGRpbmc6MTBweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmMWY1Zjk7XCI+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjEuNGVtO1wiPiR7aWNvbn08L3NwYW4+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OjE7bWluLXdpZHRoOjA7XCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7XCI+JHtsYWJlbH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuNzhlbTtjb2xvcjojOWNhM2FmO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztcIj4ke2VzY2FwZUh0bWwoZil9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YSBocmVmPVwiL2FwaS9kb3dubG9hZC8ke2VuY29kZVVSSUNvbXBvbmVudChmKX0ke3Nlc3Npb25QYXJhbX1cIiBkb3dubG9hZD1cIiR7ZXNjYXBlSHRtbChmKX1cIlxuICAgICAgICAgICBjbGFzcz1cImJ0bi1zZWNvbmRhcnlcIiBzdHlsZT1cInBhZGRpbmc6NnB4IDE0cHg7Zm9udC1zaXplOjAuODVlbTt0ZXh0LWRlY29yYXRpb246bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jaztcIj5Eb3dubG9hZDwvYT5cbiAgICAgIDwvZGl2PmA7XG4gIH1cblxuICBjb250ZW50LmlubmVySFRNTCA9IGBcbiAgICA8ZGl2IHN0eWxlPVwibWF4LXdpZHRoOjY0MHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoyNHB4IDA7XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjI0cHg7XCI+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjJlbTtcIj5cdTI3MDU8L3NwYW4+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGgyIHN0eWxlPVwibWFyZ2luOjA7Zm9udC1zaXplOjEuMmVtO2NvbG9yOiMxMTE4Mjc7XCI+Q1YgR2VuZXJhdGVkPC9oMj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuOWVtO2NvbG9yOiM2YjcyODA7XCI+JHtlc2NhcGVIdG1sKHN1YnRpdGxlKX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MCAxNnB4O21hcmdpbi1ib3R0b206MjRweDtcIj5cbiAgICAgICAgJHtmaWxlUm93c31cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm5hdi1idXR0b25zIG5hdi1lbmRcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRpbnVlLWJ0blwiIG9uY2xpY2s9XCJzd2l0Y2hUYWIoJ2xheW91dCcpXCI+T3BlbiBMYXlvdXQgUmV2aWV3IFx1MjE5MjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFRhYiBzd2l0Y2hpbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8vIFRyYWNrcyB3aGljaCBjdXN0b21pc2Utc3RhZ2Ugc3ViLXRhYnMgaGF2ZSBiZWVuIHZpZXdlZCB0aGlzIHNlc3Npb24gKEdBUC0yNjkpLlxuY29uc3QgX3Zpc2l0ZWRDdXN0b21pc2VUYWJzID0gbmV3IFNldCgpO1xuY29uc3QgX0NVU1RPTUlTRV9UQUJTID0gbmV3IFNldChbJ2dvYWxzJywgJ3F1ZXN0aW9ucycsICdleHAtcmV2aWV3JywgJ2FjaC1lZGl0b3InLCAnc2tpbGxzLXJldmlldycsICdhY2hpZXZlbWVudHMtcmV2aWV3JywgJ3RhZ2xpbmUtcmV2aWV3JywgJ3N1bW1hcnktcmV2aWV3JywgJ3B1YmxpY2F0aW9ucy1yZXZpZXcnLCAnYXRzLXNjb3JlJ10pO1xuXG5mdW5jdGlvbiBfdXBkYXRlVmlzaXRlZFRhYkluZGljYXRvcnMoKSB7XG4gIF92aXNpdGVkQ3VzdG9taXNlVGFicy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHRhYi0ke25hbWV9YCk7XG4gICAgaWYgKGVsKSBlbC5jbGFzc0xpc3QuYWRkKCd0YWItLXZpc2l0ZWQnKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHN3aXRjaFRhYih0YWIpIHtcbiAgLy8gQ2xlYXIga2V5Ym9hcmQtZm9jdXNlZCBjYXJkIHN0YXRlIHdoZW4gbGVhdmluZyBhIHJldmlldyB0YWJcbiAgaWYgKHR5cGVvZiByZXNldENhcmRGb2N1cyA9PT0gJ2Z1bmN0aW9uJykgcmVzZXRDYXJkRm9jdXMoKTtcblxuICAvLyBTYXZlIHVuc2F2ZWQgdXNlciBpbnB1dCBmcm9tIHRoZSB0YWIgd2UgYXJlIGxlYXZpbmdcbiAgX3NhdmVEcmFmdElucHV0c0ZvclRhYihzdGF0ZU1hbmFnZXIuZ2V0Q3VycmVudFRhYigpKTtcblxuICAvLyBTeW5jIHNlY29uZC1iYXIgdmlzaWJpbGl0eSB0byB0aGlzIHRhYidzIHN0YWdlXG4gIGxldCBfc3dpdGNoVGFiU3RhZ2UgPSBudWxsO1xuICBpZiAodHlwZW9mIGdldFN0YWdlRm9yVGFiID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB1cGRhdGVUYWJCYXJGb3JTdGFnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIF9zd2l0Y2hUYWJTdGFnZSA9IGdldFN0YWdlRm9yVGFiKHRhYik7XG4gICAgaWYgKF9zd2l0Y2hUYWJTdGFnZSkge1xuICAgICAgdXBkYXRlVGFiQmFyRm9yU3RhZ2UoX3N3aXRjaFRhYlN0YWdlKTtcbiAgICAgIHVwZGF0ZUFjdGlvbkJ1dHRvbnMoX3N3aXRjaFRhYlN0YWdlKTtcbiAgICB9XG4gIH1cbiAgLy8gQWx3YXlzIHVwZGF0ZSB3b3JrZmxvdyBjbGlja2FibGUgc3RhdGUgdXNpbmcgY3VycmVudCBwaGFzZVxuICBpZiAodHlwZW9mIHN0YXRlTWFuYWdlcj8uZ2V0UGhhc2UgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHVwZGF0ZVdvcmtmbG93U3RlcHNDbGlja2FibGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB1cGRhdGVXb3JrZmxvd1N0ZXBzQ2xpY2thYmxlKHN0YXRlTWFuYWdlci5nZXRQaGFzZSgpKTtcbiAgfVxuXG4gIC8vIEdBUC0xNiBQYXJ0IEI6IHNob3cvaGlkZSBhbmQgKHJlKXJlbmRlciB0aGUgZWFybHkgQ1YgcHJldmlldyBwYW5lbCBmb3JcbiAgLy8gdGhpcyB0YWIuIHRvZ2dsZUVhcmx5UHJldmlld1BhbmVsJ3Mgb3duIGluLXNjb3BlIGNoZWNrIGRlY2lkZXMgdmlzaWJpbGl0eS5cbiAgaWYgKHR5cGVvZiB0b2dnbGVFYXJseVByZXZpZXdQYW5lbCA9PT0gJ2Z1bmN0aW9uJykgdG9nZ2xlRWFybHlQcmV2aWV3UGFuZWwodGFiKTtcblxuICAvLyBVcGRhdGUgYWN0aXZlIHRhYiwgQVJJQSBzdGF0ZSwgYW5kIHJvdmluZyB0YWJpbmRleCAoV0NBRyAyLjEgdGFibGlzdCBwYXR0ZXJuKVxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGFiJykuZm9yRWFjaCh0ID0+IHtcbiAgICB0LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuICAgIHQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgdC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gIH0pO1xuICBjb25zdCBhY3RpdmVUYWIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgdGFiLSR7dGFifWApO1xuICBpZiAoYWN0aXZlVGFiKSB7XG4gICAgYWN0aXZlVGFiLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgIGFjdGl2ZVRhYi5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgIGFjdGl2ZVRhYi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICBjb25zdCB0YWJwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gICAgaWYgKHRhYnBhbmVsKSB0YWJwYW5lbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGB0YWItJHt0YWJ9YCk7XG4gIH1cbiAgc3RhdGVNYW5hZ2VyLnNldEN1cnJlbnRUYWIodGFiKTtcblxuICAvLyBNYXJrIHRoaXMgdGFiIGFzIHZpc2l0ZWQgYW5kIHJlZnJlc2ggdGhlIHZpc2l0ZWQgaW5kaWNhdG9ycyAoR0FQLTI2OSlcbiAgaWYgKF9DVVNUT01JU0VfVEFCUy5oYXModGFiKSkge1xuICAgIF92aXNpdGVkQ3VzdG9taXNlVGFicy5hZGQodGFiKTtcbiAgICBfdXBkYXRlVmlzaXRlZFRhYkluZGljYXRvcnMoKTtcbiAgfVxuXG4gIC8vIEFubm91bmNlIHRoZSB0YWIgY2hhbmdlIHRvIHNjcmVlbiByZWFkZXJzIChHQVAtNzMpLiBDb21iaW5lZCB3aXRoIHRoZVxuICAvLyBzdGFnZSBuYW1lIChHQVAtMTYgUGFydCBBKSBpbnRvIGEgc2luZ2xlIG1lc3NhZ2UgZnJvbSB0aGlzIG9uZSBjYWxsIHNpdGVcbiAgLy8gXHUyMDE0ICN0YWItc3RhZ2UtbGFiZWwgaXMgYSB2aXNpYmxlLW9ubHkgbGFiZWwsIG5vdCBhIHNlY29uZCBsaXZlIHJlZ2lvbiwgdG9cbiAgLy8gYXZvaWQgYSBkb3VibGUtYW5ub3VuY2Ugb2YgdGhlIHNhbWUgbmF2aWdhdGlvbiBldmVudC5cbiAgY29uc3QgYW5ub3VuY2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dvcmtmbG93LXN0YWdlLWFubm91bmNlcicpO1xuICBpZiAoYW5ub3VuY2VyICYmIGFjdGl2ZVRhYikge1xuICAgIGNvbnN0IHN0YWdlTGFiZWwgPSBfc3dpdGNoVGFiU3RhZ2UgPyBfU1RFUF9ESVNQTEFZW19zd2l0Y2hUYWJTdGFnZV0gOiBudWxsO1xuICAgIGNvbnN0IHRhYkxhYmVsID0gYWN0aXZlVGFiLnRleHRDb250ZW50LnRyaW0oKTtcbiAgICBjb25zdCBtZXNzYWdlID0gc3RhZ2VMYWJlbCA/IGBOb3cgdmlld2luZzogJHtzdGFnZUxhYmVsfSBcdTIwMTQgJHt0YWJMYWJlbH1gIDogYE5vdyB2aWV3aW5nOiAke3RhYkxhYmVsfWA7XG4gICAgYW5ub3VuY2VyLnRleHRDb250ZW50ID0gJyc7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IGFubm91bmNlci50ZXh0Q29udGVudCA9IG1lc3NhZ2U7IH0sIDUwKTtcbiAgfVxuXG4gIC8vIFN5bmMgdmlldy1jdXJzb3IgcmluZyB0byB0aGUgbmV3bHkgdmlzaWJsZSB0YWJcbiAgaWYgKHR5cGVvZiBfdXBkYXRlVmlld2luZ0luZGljYXRvciA9PT0gJ2Z1bmN0aW9uJykgX3VwZGF0ZVZpZXdpbmdJbmRpY2F0b3IodGFiKTtcblxuICAvLyBBbGwgdGFicyBleGNlcHQgJ2N2JyB1c2UgZnVsbC13aWR0aCBsYXlvdXQgKG5vIHBhcGVyLXNpemVkIGNlbnRlcmluZylcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGNvbnRlbnQuY2xhc3NMaXN0LnRvZ2dsZSgnZnVsbC13aWR0aCcsIHRhYiAhPT0gJ2dlbmVyYXRlJyk7XG5cbiAgLy8gTG9hZCBjb250ZW50IGZvciB0YWJcbiAgbG9hZFRhYkNvbnRlbnQodGFiKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZFRhYkNvbnRlbnQodGFiKSB7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICBjb25zdCB0YWJEYXRhID0gZW5zdXJlVGFiRGF0YVN0YXRlKCk7XG5cbiAgdHJ5IHtcbiAgc3dpdGNoICh0YWIpIHtcbiAgICBjYXNlICdqb2InOlxuICAgICAgYXdhaXQgcG9wdWxhdGVKb2JUYWIoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2dvYWxzJzpcbiAgICAgIGlmICh0eXBlb2YgcG9wdWxhdGVHb2Fsc1RhYiA9PT0gJ2Z1bmN0aW9uJykgYXdhaXQgcG9wdWxhdGVHb2Fsc1RhYigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYW5hbHlzaXMnOlxuICAgICAgaWYgKHRhYkRhdGEuYW5hbHlzaXMpIHtcbiAgICAgICAgcG9wdWxhdGVBbmFseXNpc1RhYih0YWJEYXRhLmFuYWx5c2lzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPjxkaXYgY2xhc3M9XCJpY29uXCI+XHVEODNEXHVERDBEPC9kaXY+PGgzPkpvYiBBbmFseXNpczwvaDM+PHA+Q2xpY2sgXCJBbmFseXplIEpvYlwiIHRvIGdlbmVyYXRlIGFuYWx5c2lzPC9wPjwvZGl2Pic7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdxdWVzdGlvbnMnOlxuICAgICAgcG9wdWxhdGVRdWVzdGlvbnNUYWIoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2N1c3RvbWl6YXRpb25zJzpcbiAgICAgIHN3aXRjaFRhYignZXhwLXJldmlldycpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgJ2V4cC1yZXZpZXcnOlxuICAgICAgYXdhaXQgcG9wdWxhdGVSZXZpZXdUYWIoJ2V4cGVyaWVuY2VzJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdhY2gtZWRpdG9yJzpcbiAgICAgIGF3YWl0IGJ1aWxkQWNoaWV2ZW1lbnRzRWRpdG9yKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdza2lsbHMtcmV2aWV3JzpcbiAgICAgIGF3YWl0IHBvcHVsYXRlUmV2aWV3VGFiKCdza2lsbHMnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2FjaGlldmVtZW50cy1yZXZpZXcnOlxuICAgICAgYXdhaXQgcG9wdWxhdGVSZXZpZXdUYWIoJ2FjaGlldmVtZW50cycpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGFnbGluZS1yZXZpZXcnOlxuICAgICAgYXdhaXQgcG9wdWxhdGVUYWdsaW5lUmV2aWV3VGFiKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzdW1tYXJ5LXJldmlldyc6XG4gICAgICBhd2FpdCBwb3B1bGF0ZVJldmlld1RhYignc3VtbWFyeScpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncHVibGljYXRpb25zLXJldmlldyc6XG4gICAgICBhd2FpdCBwb3B1bGF0ZVJldmlld1RhYigncHVibGljYXRpb25zJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdhdHMtc2NvcmUnOlxuICAgICAgaWYgKHR5cGVvZiBwb3B1bGF0ZUF0c1Njb3JlVGFiID09PSAnZnVuY3Rpb24nKSBhd2FpdCBwb3B1bGF0ZUF0c1Njb3JlVGFiKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyZXdyaXRlJzpcbiAgICAgIGlmICh3aW5kb3cuX3Jld3JpdGVQYW5lbENhY2hlKSB7XG4gICAgICAgIHJlbmRlclJld3JpdGVQYW5lbChcbiAgICAgICAgICB3aW5kb3cuX3Jld3JpdGVQYW5lbENhY2hlLnJld3JpdGVzLFxuICAgICAgICAgIHdpbmRvdy5fcmV3cml0ZVBhbmVsQ2FjaGUud2FybmluZ3MsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZW50LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj48ZGl2IGNsYXNzPVwiaWNvblwiPlx1MjcwRlx1RkUwRjwvZGl2PjxoMz5SZXdyaXRlczwvaDM+PHA+TG9hZGluZyByZXdyaXRlc1x1MjAyNjwvcD48L2Rpdj4nO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBhcGlDYWxsKCdHRVQnLCAnL2FwaS9yZXdyaXRlcycpO1xuICAgICAgICAgIGlmIChkYXRhLnJld3JpdGVzKSB7XG4gICAgICAgICAgICByZW5kZXJSZXdyaXRlUGFuZWwoZGF0YS5yZXdyaXRlcywgZGF0YS5wZXJzdWFzaW9uX3dhcm5pbmdzIHx8IFtdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGVudC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+PGRpdiBjbGFzcz1cImljb25cIj5cdTI3MEZcdUZFMEY8L2Rpdj48aDM+UmV3cml0ZXM8L2gzPjxwPkNvbXBsZXRlIGN1c3RvbWl6YXRpb25zIHRvIHJlYWNoIHRoaXMgc3RlcDwvcD48L2Rpdj4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPjxkaXYgY2xhc3M9XCJpY29uXCI+XHUyNzBGXHVGRTBGPC9kaXY+PGgzPlJld3JpdGVzPC9oMz48cD5Db21wbGV0ZSBjdXN0b21pemF0aW9ucyB0byByZWFjaCB0aGlzIHN0ZXA8L3A+PC9kaXY+JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZWRpdG9yJzpcbiAgICAgIGF3YWl0IHBvcHVsYXRlQ1ZFZGl0b3JUYWIoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2dlbmVyYXRlJzpcbiAgICAgIF9wb3B1bGF0ZUdlbmVyYXRlVGFiKHRhYkRhdGEuY3YsIGNvbnRlbnQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZG93bmxvYWQnOlxuICAgICAgaWYgKHRhYkRhdGEuY3YgJiYgT2JqZWN0LmtleXModGFiRGF0YS5jdikubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCBwb3B1bGF0ZURvd25sb2FkVGFiKHRhYkRhdGEuY3YpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGVudC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+PGRpdiBjbGFzcz1cImljb25cIj5cdTJCMDdcdUZFMEY8L2Rpdj48aDM+RG93bmxvYWQ8L2gzPjxwPkdlbmVyYXRlIENWIHRvIGVuYWJsZSBkb3dubG9hZHM8L3A+PC9kaXY+JztcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NwZWxsJzpcbiAgICAgIGF3YWl0IHBvcHVsYXRlU3BlbGxDaGVja1RhYigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGF5b3V0JzpcbiAgICAgIGluaXRpYXRlTGF5b3V0SW5zdHJ1Y3Rpb25zKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaW5hbGlzZSc6XG4gICAgICBhd2FpdCBwb3B1bGF0ZUZpbmFsaXNlVGFiKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdoYXJ2ZXN0JzpcbiAgICAgIGlmICh0eXBlb2YgcG9wdWxhdGVIYXJ2ZXN0VGFiID09PSAnZnVuY3Rpb24nKSBhd2FpdCBwb3B1bGF0ZUhhcnZlc3RUYWIoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ludGVydmlldy1wcmVwJzpcbiAgICAgIGlmICh0eXBlb2YgcG9wdWxhdGVJbnRlcnZpZXdQcmVwVGFiID09PSAnZnVuY3Rpb24nKSBhd2FpdCBwb3B1bGF0ZUludGVydmlld1ByZXBUYWIoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RoYW5rLXlvdSc6XG4gICAgICBpZiAodHlwZW9mIHBvcHVsYXRlVGhhbmtZb3VUYWIgPT09ICdmdW5jdGlvbicpIGF3YWl0IHBvcHVsYXRlVGhhbmtZb3VUYWIoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ21hc3Rlcic6XG4gICAgICBhd2FpdCBwb3B1bGF0ZU1hc3RlclRhYigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY292ZXItbGV0dGVyJzpcbiAgICAgIGF3YWl0IHBvcHVsYXRlQ292ZXJMZXR0ZXJUYWIoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NjcmVlbmluZyc6XG4gICAgICBhd2FpdCBwb3B1bGF0ZVNjcmVlbmluZ1RhYigpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cuZXJyb3IoYEVycm9yIGxvYWRpbmcgdGFiICR7dGFifTpgLCBlcnJvcik7XG4gICAgLy8gdGV4dENvbnRlbnQsIG5vdCBpbm5lckhUTUwgXHUyMDE0IGEgdGhyb3duIGVycm9yIG1lc3NhZ2UgbXVzdCBuZXZlciBiZVxuICAgIC8vIGludGVycHJldGVkIGFzIEhUTUwgKGUuZy4gYW4gZXJyb3Igc3RyaW5nIGNvbnRhaW5pbmcgYSBzdHJheSA8aW1nPikuXG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuICAgIGVycm9yTWVzc2FnZS5zdHlsZS5jc3NUZXh0ID0gJ3BhZGRpbmc6IDIwcHg7IGNvbG9yOiAjYzQxZTNhOyc7XG4gICAgZXJyb3JNZXNzYWdlLnRleHRDb250ZW50ID0gYEVycm9yIGxvYWRpbmcgY29udGVudDogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgY29udGVudC5hcHBlbmRDaGlsZChlcnJvck1lc3NhZ2UpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFJlc3RvcmUgdW5zYXZlZCB1c2VyIGlucHV0IGZvciB0aGUgbmV3bHkgbG9hZGVkIHRhYlxuICBfcmVzdG9yZURyYWZ0SW5wdXRzRm9yVGFiKHRhYik7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZXZpZXcgdGFiIChmbGF0LCBvbmUgcGFuZSBwZXIgdG9wLWxldmVsIHRhYikgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dUYWJsZUJhc2VkUmV2aWV3KCkge1xuICBpZiAoIXdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zKSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ05vIHJlY29tbWVuZGF0aW9ucyB0byByZXZpZXcuIFBsZWFzZSBnZW5lcmF0ZSBjdXN0b21pemF0aW9ucyBmaXJzdC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBzd2l0Y2hUYWIoJ2V4cC1yZXZpZXcnKTtcbiAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ1x1MjcwNSBDdXN0b21pemF0aW9ucyBnZW5lcmF0ZWQhIFBsZWFzZSByZXZpZXcgZWFjaCBzZWN0aW9uIGluIHRoZSAqKkN1c3RvbWl6YXRpb25zKiogdGFiIFx1MjAxNCBFeHBlcmllbmNlcywgQWNoaWV2ZW1lbnRzLCBTa2lsbHMsIFN1bW1hcnksIGFuZCBQdWJsaWNhdGlvbnMuIFNlbGVjdCB5b3VyIHByZWZlcmVuY2VzIHVzaW5nIHRoZSBhY3Rpb24gYnV0dG9ucywgdGhlbiBzdWJtaXQgeW91ciBkZWNpc2lvbnMuJyk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBBbmFseXNpcyB0YWIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8vIENhY2hlZCBzeW5vbnltIG1hcDogYWxpYXMgKGxvd2VyKSBcdTIxOTIgY2Fub25pY2FsLCBhbmQgY2Fub25pY2FsIChsb3dlcikgXHUyMTkyIFthbGlhc2VzXVxubGV0IF9zeW5vbnltTWFwQ2FjaGUgPSBudWxsO1xuYXN5bmMgZnVuY3Rpb24gX2xvYWRTeW5vbnltTWFwKCkge1xuICBpZiAoX3N5bm9ueW1NYXBDYWNoZSkgcmV0dXJuIF9zeW5vbnltTWFwQ2FjaGU7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gc3RhdGVNYW5hZ2VyLmdldFNlc3Npb25JZCAmJiBzdGF0ZU1hbmFnZXIuZ2V0U2Vzc2lvbklkKCk7XG4gICAgY29uc3QgdXJsID0gc2Vzc2lvbklkID8gYC9hcGkvc3lub255bS1tYXA/c2Vzc2lvbl9pZD0ke2VuY29kZVVSSUNvbXBvbmVudChzZXNzaW9uSWQpfWAgOiAnL2FwaS9zeW5vbnltLW1hcCc7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgaWYgKCFyZXMub2spIHJldHVybiAoX3N5bm9ueW1NYXBDYWNoZSA9IHt9KTtcbiAgICBjb25zdCByYXcgID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBjb25zdCBhbGlhc1RvQ2Fub24gPSB7fTtcbiAgICBjb25zdCBjYW5vblRvQWxpYXNlcyA9IHt9O1xuICAgIE9iamVjdC5lbnRyaWVzKHJhdykuZm9yRWFjaCgoW2FsaWFzLCBjYW5vbl0pID0+IHtcbiAgICAgIGFsaWFzVG9DYW5vblthbGlhcy50b0xvd2VyQ2FzZSgpXSA9IGNhbm9uO1xuICAgICAgY29uc3QgY2wgPSBjYW5vbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgKGNhbm9uVG9BbGlhc2VzW2NsXSA9IGNhbm9uVG9BbGlhc2VzW2NsXSB8fCBbXSkucHVzaChhbGlhcyk7XG4gICAgfSk7XG4gICAgX3N5bm9ueW1NYXBDYWNoZSA9IHsgYWxpYXNUb0Nhbm9uLCBjYW5vblRvQWxpYXNlcyB9O1xuICB9IGNhdGNoIChfKSB7IF9zeW5vbnltTWFwQ2FjaGUgPSB7fTsgfVxuICByZXR1cm4gX3N5bm9ueW1NYXBDYWNoZTtcbn1cblxuZnVuY3Rpb24gX2t3U3lub255bUFubm90YXRpb24oa3csIHN5bk1hcCkge1xuICBpZiAoIXN5bk1hcCB8fCAoIXN5bk1hcC5hbGlhc1RvQ2Fub24gJiYgIXN5bk1hcC5jYW5vblRvQWxpYXNlcykpIHJldHVybiAnJztcbiAgY29uc3Qga2wgPSBrdy50b0xvd2VyQ2FzZSgpO1xuICAvLyBJcyBrdyBhbiBhbGlhcz8gU2hvdyBjYW5vbmljYWwgZm9ybS5cbiAgaWYgKHN5bk1hcC5hbGlhc1RvQ2Fub25ba2xdKSByZXR1cm4gYCA9ICR7c3luTWFwLmFsaWFzVG9DYW5vbltrbF19YDtcbiAgLy8gSXMga3cgYSBjYW5vbmljYWwgZm9ybT8gU2hvdyBhbGlhc2VzLlxuICBjb25zdCBhbGlhc2VzID0gc3luTWFwLmNhbm9uVG9BbGlhc2VzICYmIHN5bk1hcC5jYW5vblRvQWxpYXNlc1trbF07XG4gIGlmIChhbGlhc2VzICYmIGFsaWFzZXMubGVuZ3RoKSByZXR1cm4gYCAoJHthbGlhc2VzLmpvaW4oJywgJyl9KWA7XG4gIHJldHVybiAnJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVBbmFseXNpc1RhYihyZXN1bHQpIHtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIHRyeSB7XG4gICAgLy8gcmVzdWx0IG1heSBhbHJlYWR5IGJlIGEgcGFyc2VkIG9iamVjdCAoZS5nLiBjb21pbmcgZnJvbSBzdGF0ZU1hbmFnZXIpIG9yIGFcbiAgICAvLyByYXcgSlNPTiBzdHJpbmcuICBjbGVhbkpzb25SZXNwb25zZSBvbmx5IGhhbmRsZXMgc3RyaW5ncywgc28gc2tpcCBpdCB3aGVuXG4gICAgLy8gdGhlIHZhbHVlIGlzIGFscmVhZHkgYW4gb2JqZWN0IHRvIGF2b2lkIFwiY2xlYW5lZC5yZXBsYWNlIGlzIG5vdCBhIGZ1bmN0aW9uXCIuXG4gICAgbGV0IGRhdGE7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0Jykge1xuICAgICAgZGF0YSA9IHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2xlYW5SZXN1bHQgPSBjbGVhbkpzb25SZXNwb25zZShyZXN1bHQpO1xuICAgICAgZGF0YSA9IHR5cGVvZiBjbGVhblJlc3VsdCA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGNsZWFuUmVzdWx0KSA6IGNsZWFuUmVzdWx0O1xuICAgIH1cblxuICAgIC8vIFBlcnNpc3Qgb25seSBhZnRlciB0aGUgYW5hbHlzaXMgcGF5bG9hZCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gICAgc3RhdGVNYW5hZ2VyLnNldFRhYkRhdGEoJ2FuYWx5c2lzJywgcmVzdWx0KTtcbiAgICBzYXZlVGFiRGF0YSgpO1xuXG4gICAgLy8gXHUyNTAwXHUyNTAwIFNlY3Rpb24gMTogUm9sZSAmIERvbWFpbiBjYXJkIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICAgIGxldCBodG1sID0gJzxkaXYgY2xhc3M9XCJhbmFseXNpcy1wYWdlXCI+JztcbiAgICBodG1sICs9ICc8ZGl2IGNsYXNzPVwiYW5hbHlzaXMtcm9sZS1jYXJkXCI+JztcbiAgICBodG1sICs9IGA8aDE+JHtkYXRhLnRpdGxlIHx8ICdSb2xlJ308L2gxPmA7XG4gICAgaWYgKGRhdGEuY29tcGFueSkgaHRtbCArPSBgPHAgY2xhc3M9XCJjb21wYW55XCI+XHVEODNDXHVERkUyICR7ZGF0YS5jb21wYW55fTwvcD5gO1xuICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJtZXRhXCI+JztcbiAgICBpZiAoZGF0YS5kb21haW4pIHtcbiAgICAgIGNvbnN0IGNvbmYgPSBkYXRhLmRvbWFpbl9jb25maWRlbmNlO1xuICAgICAgbGV0IGNvbmZMYWJlbCA9ICcnO1xuICAgICAgbGV0IGNvbmZUaXRsZSA9ICcnO1xuICAgICAgaWYgKHR5cGVvZiBjb25mID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoY29uZiA+PSAwLjgpIHsgY29uZkxhYmVsID0gJyc7IGNvbmZUaXRsZSA9IGBEb21haW4gY29uZmlkZW5jZTogSGlnaCAoJHtNYXRoLnJvdW5kKGNvbmYgKiAxMDApfSUpYDsgfVxuICAgICAgICBlbHNlIGlmIChjb25mID49IDAuNikgeyBjb25mTGFiZWwgPSAnIFx1MjZBMCc7IGNvbmZUaXRsZSA9IGBEb21haW4gY29uZmlkZW5jZTogTWVkaXVtICgke01hdGgucm91bmQoY29uZiAqIDEwMCl9JSkgXHUyMDE0IHZlcmlmeSB0aGlzIGlzIGNvcnJlY3RgOyB9XG4gICAgICAgIGVsc2UgeyBjb25mTGFiZWwgPSAnIFx1MjZBMCc7IGNvbmZUaXRsZSA9IGBEb21haW4gY29uZmlkZW5jZTogTG93ICgke01hdGgucm91bmQoY29uZiAqIDEwMCl9JSkgXHUyMDE0IHRoZSBKRCBzcGFucyBtdWx0aXBsZSBkb21haW5zOyBjb25zaWRlciBvdmVycmlkaW5nYDsgfVxuICAgICAgfVxuICAgICAgaHRtbCArPSBgPHNwYW4gY2xhc3M9XCJtZXRhLWNoaXBcIiB0aXRsZT1cIiR7ZXNjYXBlSHRtbChjb25mVGl0bGUgfHwgJ0luZmVycmVkIHRlY2huaWNhbCBkb21haW4nKX1cIj5cdUQ4M0RcdUREMkMgJHtlc2NhcGVIdG1sKGRhdGEuZG9tYWluKX0ke2NvbmZMYWJlbH08L3NwYW4+YDtcbiAgICB9XG4gICAgaWYgKGRhdGEucm9sZV9sZXZlbCkgaHRtbCArPSBgPHNwYW4gY2xhc3M9XCJtZXRhLWNoaXBcIj5cdUQ4M0RcdURDQ0EgJHtkYXRhLnJvbGVfbGV2ZWx9PC9zcGFuPmA7XG4gICAgaWYgKGRhdGEuc3VnZ2VzdGVkX3N1bW1hcnkpIGh0bWwgKz0gYDxzcGFuIGNsYXNzPVwibWV0YS1jaGlwXCI+XHVEODNEXHVEQ0FDICR7ZGF0YS5zdWdnZXN0ZWRfc3VtbWFyeX08L3NwYW4+YDtcbiAgICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nO1xuXG4gICAgLy8gXHUyNTAwXHUyNTAwIE1pc21hdGNoIGNhbGxvdXQgKGNvbXB1dGVkIGZyb20gbWFzdGVyIHNraWxscykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAgY29uc3QgcmVxdWlyZWRTa2lsbHMgPSBBcnJheS5pc0FycmF5KGRhdGEucmVxdWlyZWRfc2tpbGxzKSA/IGRhdGEucmVxdWlyZWRfc2tpbGxzIDogW107XG4gICAgY29uc3QgbWFzdGVyU2tpbGxzID0gd2luZG93Ll9tYXN0ZXJTa2lsbHMgfHwgW107XG4gICAgaWYgKHJlcXVpcmVkU2tpbGxzLmxlbmd0aCA+IDAgJiYgbWFzdGVyU2tpbGxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1pc3NpbmcgPSByZXF1aXJlZFNraWxscy5maWx0ZXIoc2tpbGwgPT5cbiAgICAgICAgIW1hc3RlclNraWxscy5zb21lKG1zID0+IG1zLmluY2x1ZGVzKHNraWxsLnRvTG93ZXJDYXNlKCkpIHx8IHNraWxsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobXMpKVxuICAgICAgKTtcbiAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaHRtbCArPSBgPGRpdiBjbGFzcz1cIm1pc21hdGNoLWNhbGxvdXRcIj5cdTI2QTAgPHN0cm9uZz4ke21pc3NpbmcubGVuZ3RofSByZXF1aXJlZCBza2lsbCR7bWlzc2luZy5sZW5ndGggPiAxID8gJ3MnIDogJyd9IG5vdCBmb3VuZCBpbiB5b3VyIG1hc3RlciBDVjo8L3N0cm9uZz4gJHttaXNzaW5nLmpvaW4oJywgJyl9PC9kaXY+YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgU2VjdGlvbiAyOiBSZXF1aXJlZCBTa2lsbHMgZ3JpZCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBpZiAocmVxdWlyZWRTa2lsbHMubGVuZ3RoID4gMCkge1xuICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cImFuYWx5c2lzLXNlY3Rpb25cIj48aDI+XHVEODNDXHVERkFGIFJlcXVpcmVkIFNraWxsczwvaDI+PGRpdiBjbGFzcz1cInNraWxsLWdyaWRcIj4nO1xuICAgICAgcmVxdWlyZWRTa2lsbHMuZm9yRWFjaChza2lsbCA9PiB7XG4gICAgICAgIGNvbnN0IGlzTWlzc2luZyA9IG1hc3RlclNraWxscy5sZW5ndGggPiAwICYmICFtYXN0ZXJTa2lsbHMuc29tZShcbiAgICAgICAgICBtcyA9PiBtcy5pbmNsdWRlcyhza2lsbC50b0xvd2VyQ2FzZSgpKSB8fCBza2lsbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG1zKVxuICAgICAgICApO1xuICAgICAgICBodG1sICs9IGA8c3BhbiBjbGFzcz1cInNraWxsLWJhZGdlJHtpc01pc3NpbmcgPyAnIG1pc3NpbmcnIDogJyd9XCIgdGl0bGU9XCIke2lzTWlzc2luZyA/ICdOb3QgaW4gbWFzdGVyIENWJyA6ICdGb3VuZCBpbiBtYXN0ZXIgQ1YnfVwiPiR7c2tpbGx9JHtpc01pc3NpbmcgPyAnPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+IChub3QgaW4gbWFzdGVyIENWKTwvc3Bhbj4nIDogJyd9PC9zcGFuPmA7XG4gICAgICB9KTtcbiAgICAgIGh0bWwgKz0gJzwvZGl2PjwvZGl2Pic7XG4gICAgfVxuXG4gICAgLy8gXHUyNTAwXHUyNTAwIFNlY3Rpb24gMzogUHJlZmVycmVkIC8gTmljZS10by1IYXZlIGxpc3QgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAgY29uc3QgcHJlZmVycmVkID0gW1xuICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZGF0YS5wcmVmZXJyZWRfc2tpbGxzKSA/IGRhdGEucHJlZmVycmVkX3NraWxscyA6IFtdKSxcbiAgICAgIC4uLihBcnJheS5pc0FycmF5KGRhdGEubmljZV90b19oYXZlX3JlcXVpcmVtZW50cykgPyBkYXRhLm5pY2VfdG9faGF2ZV9yZXF1aXJlbWVudHMgOiBbXSksXG4gICAgXTtcbiAgICBpZiAocHJlZmVycmVkLmxlbmd0aCA+IDApIHtcbiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJhbmFseXNpcy1zZWN0aW9uXCI+PGgyPlx1MkI1MCBQcmVmZXJyZWQgLyBOaWNlLXRvLUhhdmU8L2gyPjx1bCBjbGFzcz1cInByZWZlcnJlZC1saXN0XCI+JztcbiAgICAgIHByZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4geyBodG1sICs9IGA8bGk+JHtpdGVtfTwvbGk+YDsgfSk7XG4gICAgICBodG1sICs9ICc8L3VsPjwvZGl2Pic7XG4gICAgfVxuXG4gICAgLy8gXHUyNTAwXHUyNTAwIFNlY3Rpb24gNDogQVRTIEtleXdvcmRzIHdpdGggcmFuayBiYWRnZXMgYW5kIHN5bm9ueW0gYW5ub3RhdGlvbnMgXHUyNTAwXHUyNTAwXG4gICAgY29uc3QgYXRzS3dzID0gQXJyYXkuaXNBcnJheShkYXRhLmF0c19rZXl3b3JkcykgPyBkYXRhLmF0c19rZXl3b3JkcyA6IFtdO1xuICAgIGlmIChhdHNLd3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc3luTWFwID0gYXdhaXQgX2xvYWRTeW5vbnltTWFwKCk7XG4gICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPVwiYW5hbHlzaXMtc2VjdGlvblwiPjxoMj5cdUQ4M0RcdUREMTEgQVRTIEtleXdvcmRzIDxzbWFsbCBzdHlsZT1cImZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjQ3NDhiO2ZvbnQtc2l6ZToxMnB4O1wiPihoaWdoZXIgcmFuayA9IGhpZ2hlciBwcmlvcml0eSk8L3NtYWxsPjwvaDI+PGRpdiBjbGFzcz1cImt3LWJhZGdlc1wiPic7XG4gICAgICBhdHNLd3MuZm9yRWFjaCgoa3csIGlkeCkgPT4ge1xuICAgICAgICBjb25zdCBhbm5vdGF0aW9uID0gX2t3U3lub255bUFubm90YXRpb24oa3csIHN5bk1hcCk7XG4gICAgICAgIGNvbnN0IHRpdGxlQXR0ciAgPSBhbm5vdGF0aW9uID8gYCB0aXRsZT1cIlN5bm9ueW06ICR7ZXNjYXBlSHRtbChrdyArIGFubm90YXRpb24pfVwiYCA6ICcnO1xuICAgICAgICBjb25zdCBhbm5vdEh0bWwgID0gYW5ub3RhdGlvbiA/IGA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToxMHB4O2NvbG9yOiM2NDc0OGI7bWFyZ2luLWxlZnQ6M3B4O1wiPiR7ZXNjYXBlSHRtbChhbm5vdGF0aW9uKX08L3NwYW4+YCA6ICcnO1xuICAgICAgICBodG1sICs9IGA8c3BhbiBjbGFzcz1cImt3LWJhZGdlXCIke3RpdGxlQXR0cn0+PHNwYW4gY2xhc3M9XCJrdy1yYW5rXCI+IyR7aWR4ICsgMX08L3NwYW4+JHtlc2NhcGVIdG1sKGt3KX0ke2Fubm90SHRtbH08L3NwYW4+YDtcbiAgICAgIH0pO1xuICAgICAgaHRtbCArPSAnPC9kaXY+PC9kaXY+JztcbiAgICB9XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgQ3VsdHVyZSBpbmRpY2F0b3JzIChvcHRpb25hbCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAgY29uc3QgY3VsdHVyZSA9IEFycmF5LmlzQXJyYXkoZGF0YS5jdWx0dXJlX2luZGljYXRvcnMpID8gZGF0YS5jdWx0dXJlX2luZGljYXRvcnMgOiBbXTtcbiAgICBpZiAoY3VsdHVyZS5sZW5ndGggPiAwKSB7XG4gICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPVwiYW5hbHlzaXMtc2VjdGlvblwiPjxoMj5cdUQ4M0NcdURGRTIgQ3VsdHVyZSBJbmRpY2F0b3JzPC9oMj48dWwgY2xhc3M9XCJwcmVmZXJyZWQtbGlzdFwiPic7XG4gICAgICBjdWx0dXJlLmZvckVhY2goYyA9PiB7IGh0bWwgKz0gYDxsaT4ke2N9PC9saT5gOyB9KTtcbiAgICAgIGh0bWwgKz0gJzwvdWw+PC9kaXY+JztcbiAgICB9XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgTXVzdC1oYXZlIHJlcXVpcmVtZW50cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBjb25zdCBtdXN0SGF2ZSA9IEFycmF5LmlzQXJyYXkoZGF0YS5tdXN0X2hhdmVfcmVxdWlyZW1lbnRzKSA/IGRhdGEubXVzdF9oYXZlX3JlcXVpcmVtZW50cyA6IFtdO1xuICAgIGlmIChtdXN0SGF2ZS5sZW5ndGggPiAwKSB7XG4gICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPVwiYW5hbHlzaXMtc2VjdGlvblwiPjxoMj5cdTI3MDUgTXVzdC1IYXZlIFJlcXVpcmVtZW50czwvaDI+PHVsIGNsYXNzPVwicHJlZmVycmVkLWxpc3RcIj4nO1xuICAgICAgbXVzdEhhdmUuZm9yRWFjaChyID0+IHsgaHRtbCArPSBgPGxpPiR7cn08L2xpPmA7IH0pO1xuICAgICAgaHRtbCArPSAnPC91bD48L2Rpdj4nO1xuICAgIH1cblxuICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJuYXYtYnV0dG9ucyBuYXYtZW5kXCI+PGJ1dHRvbiBjbGFzcz1cImNvbnRpbnVlLWJ0blwiIG9uY2xpY2s9XCJzZW5kQWN0aW9uKFxcdTAwMjdyZWNvbW1lbmRfY3VzdG9taXphdGlvbnNcXHUwMDI3KVwiPkNvbnRpbnVlIHRvIEN1c3RvbWl6YXRpb25zIFx1MjE5MjwvYnV0dG9uPjwvZGl2Pic7XG4gICAgaHRtbCArPSAnPC9kaXY+JzsgLy8gLmFuYWx5c2lzLXBhZ2VcbiAgICBjb250ZW50LmlubmVySFRNTCA9IGh0bWw7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3IoJ0FuYWx5c2lzIHBhcnNpbmcgZXJyb3I6JywgZSwgJ09yaWdpbmFsIHJlc3VsdDonLCByZXN1bHQpO1xuICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPjxkaXYgY2xhc3M9XCJpY29uXCI+XHUyNzRDPC9kaXY+PGgzPkFuYWx5c2lzIEVycm9yPC9oMz48cD5Db3VsZCBub3QgcGFyc2UgYW5hbHlzaXMgcmVzdWx0czogJHtlc2NhcGVIdG1sKGUubWVzc2FnZSl9PC9wPjxkZXRhaWxzPjxzdW1tYXJ5PkRlYnVnIEluZm88L3N1bW1hcnk+PHByZT4ke2VzY2FwZUh0bWwoSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKSl9PC9wcmU+PC9kZXRhaWxzPjwvZGl2PmA7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEN1c3RvbWl6YXRpb24gcmVzcG9uc2UgaGFuZGxlciBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQ3VzdG9taXphdGlvblJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIHRyeSB7XG4gICAgLy8gQWNjZXB0IGEgcHJlLXBhcnNlZCBvYmplY3Qgb3IgYSByYXcgc3RyaW5nIChwYXJzZSBhdCBib3VuZGFyeSkuXG4gICAgY29uc3QgZGF0YSA9IChyZXNwb25zZSAhPT0gbnVsbCAmJiB0eXBlb2YgcmVzcG9uc2UgPT09ICdvYmplY3QnKVxuICAgICAgPyByZXNwb25zZVxuICAgICAgOiBleHRyYWN0Rmlyc3RKc29uT2JqZWN0KHJlc3BvbnNlKTtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycgPyByZXNwb25zZSA6ICcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiAoZGF0YS5yZWNvbW1lbmRlZF9leHBlcmllbmNlcyB8fCBkYXRhLnJlY29tbWVuZGVkX3NraWxscykpIHtcbiAgICAgIHN0YXRlTWFuYWdlci5zZXRUYWJEYXRhKCdjdXN0b21pemF0aW9ucycsIGRhdGEpO1xuICAgICAgd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgPSBkYXRhO1xuICAgICAgc2F2ZVRhYkRhdGEoKTtcblxuICAgICAgaWYgKCFpc1JlY29ubmVjdEluUHJvZ3Jlc3MoKSkge1xuICAgICAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnXHUyNzA1IEN1c3RvbWl6YXRpb25zIGdlbmVyYXRlZCEgUGxlYXNlIHJldmlldyBlYWNoIHNlY3Rpb24gaW4gdGhlICoqQ3VzdG9taXphdGlvbnMqKiB0YWIgXHUyMDE0IEV4cGVyaWVuY2VzLCBBY2hpZXZlbWVudHMsIFNraWxscywgU3VtbWFyeSwgYW5kIFB1YmxpY2F0aW9ucy4gU2VsZWN0IHlvdXIgcHJlZmVyZW5jZXMgdXNpbmcgdGhlIGFjdGlvbiBidXR0b25zLCB0aGVuIHN1Ym1pdCB5b3VyIGRlY2lzaW9ucy4nKTtcbiAgICAgICAgc3dpdGNoVGFiKCdleHAtcmV2aWV3Jyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNSZWNvbm5lY3RJblByb2dyZXNzKCkpIHtcbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIHJlc3BvbnNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3IoJ0N1c3RvbWl6YXRpb24gcmVzcG9uc2UgZXJyb3I6JywgZSk7XG4gICAgaWYgKCFpc1JlY29ubmVjdEluUHJvZ3Jlc3MoKSkge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgcmVzcG9uc2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFN5bmMgdGhlIHNraWxscy10aXRsZSBzZWxlY3QvY3VzdG9tLWlucHV0IGNvbnRyb2xzIHRvIGEgZ2l2ZW4gdGl0bGUgdmFsdWUsXG4gKiBhbmQgYXR0YWNoIGNoYW5nZSBsaXN0ZW5lcnMgc28gdXBkYXRlcyBhcmUgc2F2ZWQgdmlhIHRoZSBBUEkuXG4gKiBkdWNrZmxvdzpcbiAqICAgaWQ6IGdlbmVyYXRpb25fc2V0dGluZ3Mud2ViX3Jldmlld190YWJsZV9iYXNlLkwzMzBcbiAqICAga2luZDogdWlcbiAqICAgdGltZXN0YW1wOiAnMjAyNi0wMy0yN1QwMToyMzoyOFonXG4gKiAgIHN0YXR1czogbGl2ZVxuICogICBoYW5kbGVzOlxuICogICAtIHVpOmdlbmVyYXRpb24tc2V0dGluZ3Muc3luYy1za2lsbHMtdGl0bGVcbiAqICAgY2FsbHM6XG4gKiAgIC0gUE9TVCAvYXBpL2dlbmVyYXRpb24tc2V0dGluZ3NcbiAqICAgcmVhZHM6XG4gKiAgIC0gcmVzcG9uc2U6R0VUIC9hcGkvc3RhdHVzLnNraWxsc19zZWN0aW9uX3RpdGxlXG4gKiAgIHdyaXRlczpcbiAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9nZW5lcmF0aW9uLXNldHRpbmdzLnNraWxsc19zZWN0aW9uX3RpdGxlXG4gKiAgIG5vdGVzOiBLZWVwcyB0aGUgVUkgc2tpbGxzLXRpdGxlIGNvbnRyb2xzIGluIHN5bmMgd2l0aCBzdGF0dXMgZGF0YSBhbmQgcGVyc2lzdHMgdGl0bGUgY2hhbmdlcyBiYWNrIHRvIHRoZSBzZXNzaW9uIHNldHRpbmdzIHJvdXRlLlxuICovXG5mdW5jdGlvbiBfc3luY1NraWxsc1RpdGxlQ29udHJvbHMoY3VycmVudFRpdGxlKSB7XG4gIGNvbnN0IGtub3duT3B0aW9ucyA9IFsnU2tpbGxzJywgJ1RlY2huaWNhbCBTa2lsbHMnLCAnS2V5IFNraWxscycsICdDb3JlIFNraWxscyddO1xuICBjb25zdCBzZWwgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxscy10aXRsZS1zZWxlY3QnKTtcbiAgY29uc3QgY3VzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbHMtdGl0bGUtY3VzdG9tJyk7XG4gIGlmICghc2VsKSByZXR1cm47XG5cbiAgY29uc3QgaXNLbm93biA9IGtub3duT3B0aW9ucy5pbmNsdWRlcyhjdXJyZW50VGl0bGUpO1xuICBpZiAoaXNLbm93bikge1xuICAgIHNlbC52YWx1ZSA9IGN1cnJlbnRUaXRsZTtcbiAgICBpZiAoY3VzdCkgY3VzdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9IGVsc2Uge1xuICAgIHNlbC52YWx1ZSA9ICdfX2N1c3RvbV9fJztcbiAgICBpZiAoY3VzdCkge1xuICAgICAgY3VzdC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICBjdXN0LnZhbHVlID0gY3VycmVudFRpdGxlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNhdmVUaXRsZSA9IGFzeW5jICh0aXRsZSkgPT4ge1xuICAgIHRyeSB7IGF3YWl0IGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9nZW5lcmF0aW9uLXNldHRpbmdzJywgeyBza2lsbHNfc2VjdGlvbl90aXRsZTogdGl0bGUgfSk7IH1cbiAgICBjYXRjaCAoZSkgeyBsb2cud2FybignRmFpbGVkIHRvIHNhdmUgc2tpbGxzX3NlY3Rpb25fdGl0bGUgc2V0dGluZzonLCBlKTsgfVxuICB9O1xuXG4gIHNlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgaWYgKHNlbC52YWx1ZSA9PT0gJ19fY3VzdG9tX18nKSB7XG4gICAgICBpZiAoY3VzdCkgeyBjdXN0LnN0eWxlLmRpc3BsYXkgPSAnJzsgY3VzdC5mb2N1cygpOyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjdXN0KSBjdXN0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBzYXZlVGl0bGUoc2VsLnZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChjdXN0KSB7XG4gICAgY3VzdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2ID0gY3VzdC52YWx1ZS50cmltKCk7XG4gICAgICBpZiAodikgc2F2ZVRpdGxlKHYpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVuZGVycyBvbmUgb2YgdGhlIDUgcmV2aWV3IHBhbmVzIGFzIGEgdG9wLWxldmVsIHRhYi5cbiAqIFJlcGxhY2VzIHRoZSBvbGQgc3ViLXRhYiBhcHByb2FjaCB3aXRoIGEgZmxhdCBzaW5nbGUtbGV2ZWwgdGFiIHN0cnVjdHVyZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVSZXZpZXdUYWIocGFuZSkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgY29uc3QgY3VzdG9taXphdGlvbnMgPSBzdGF0ZU1hbmFnZXIuZ2V0VGFiRGF0YSgnY3VzdG9taXphdGlvbnMnKTtcblxuICBpZiAoIXdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zIHx8ICFjdXN0b21pemF0aW9ucykge1xuICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPjxkaXYgY2xhc3M9XCJpY29uXCI+XHUyNjk5XHVGRTBGPC9kaXY+PGgzPlJldmlldyBDdXN0b21pemF0aW9uczwvaDM+PHA+Q2xpY2sgXCJSZWNvbW1lbmQgQ3VzdG9taXphdGlvbnNcIiB0byBnZW5lcmF0ZSByZWNvbW1lbmRhdGlvbnMuPC9wPjwvZGl2Pic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFuZUNvbmZpZyA9IHtcbiAgICBleHBlcmllbmNlczogICB7IHRpdGxlOiAnJywgZGVzYzogJ1NvcnRlZCBieSBkYXRlIChtb3N0IHJlY2VudCBmaXJzdCkuIENsaWNrIGFjdGlvbiBidXR0b25zIHRvIG92ZXJyaWRlIHJlY29tbWVuZGF0aW9ucy4nLCAgICAgICAgIGNvbnRhaW5lcjogJ2V4cGVyaWVuY2UtdGFibGUtY29udGFpbmVyJyAgIH0sXG4gICAgc2tpbGxzOiAgICAgICAgeyB0aXRsZTogJ1x1RDgzRFx1REVFMFx1RkUwRiBTa2lsbHMnLCAgICAgICAgICAgZGVzYzogJ1NvcnRlZCBieSByZWxldmFuY2UuIFNlbGVjdCBob3cgdG8gZmVhdHVyZSBlYWNoIHNraWxsLicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6ICdza2lsbHMtdGFibGUtY29udGFpbmVyJyAgICAgICB9LFxuICAgIGFjaGlldmVtZW50czogIHsgdGl0bGU6ICdcdUQ4M0NcdURGQzYgQWNoaWV2ZW1lbnRzJywgICAgICBkZXNjOiAnU2VsZWN0IGhvdyB0byBmZWF0dXJlIGVhY2gga2V5IGFjaGlldmVtZW50LiBBSSByZWNvbW1lbmRhdGlvbnMgYXJlIHByZS1zZWxlY3RlZC4nLCAgY29udGFpbmVyOiAnYWNoaWV2ZW1lbnRzLXRhYmxlLWNvbnRhaW5lcicgIH0sXG4gICAgc3VtbWFyeTogICAgICAgeyB0aXRsZTogJ1x1RDgzRFx1RENERCBQcm9mZXNzaW9uYWwgU3VtbWFyeScsIGRlc2M6ICdTZWxlY3Qgd2hpY2ggcHJvZmVzc2lvbmFsIHN1bW1hcnkgdG8gdXNlLiBUaGUgQUlcXCdzIHJlY29tbWVuZGF0aW9uIGlzIHByZS1zZWxlY3RlZC4nLCBjb250YWluZXI6ICdzdW1tYXJ5LWZvY3VzLWNvbnRhaW5lcicgICAgfSxcbiAgICBwdWJsaWNhdGlvbnM6ICB7IHRpdGxlOiAnXHVEODNEXHVEQ0M0IFB1YmxpY2F0aW9ucycsICAgICAgZGVzYzogJ0FsbCBwdWJsaWNhdGlvbnMgcmFua2VkIGJ5IHJlbGV2YW5jZS4gQWNjZXB0IG9yIHJlamVjdCBlYWNoIGZvciB5b3VyIENWLicsICAgICAgICAgIGNvbnRhaW5lcjogJ3B1YmxpY2F0aW9ucy10YWJsZS1jb250YWluZXInIH0sXG4gIH07XG4gIGNvbnN0IGNmZyA9IHBhbmVDb25maWdbcGFuZV0gfHwge307XG5cbiAgY29uc3QgaGVhZGVySHRtbCA9IHBhbmUgPT09ICdleHBlcmllbmNlcycgPyBgXG4gICAgPGgxPlx1MjY5OVx1RkUwRiBSZXZpZXcgQ3VzdG9taXphdGlvbiBSZWNvbW1lbmRhdGlvbnM8L2gxPlxuICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjE2cHg7XCI+UmV2aWV3IHRoZSBBSSdzIHJlY29tbWVuZGF0aW9ucy4gVXNlIHRoZSBhY3Rpb24gYnV0dG9ucyB0byBhZGp1c3QgZWFjaCBpdGVtLCB0aGVuIHNhdmUgeW91ciBkZWNpc2lvbnMgYmVmb3JlIGdlbmVyYXRpbmcgdGhlIENWLjwvcD5cbiAgICA8ZGl2IGlkPVwicGFnZS1lc3RpbWF0ZS13aWRnZXRcIiBjbGFzcz1cInBhZ2UtZXN0aW1hdGUgb2tcIj5cbiAgICAgIDxzcGFuIGlkPVwicGUtaWNvblwiPlx1RDgzRFx1RENDNDwvc3Bhbj5cbiAgICAgIDxzcGFuIGlkPVwicGUtbGFiZWxcIj5Fc3RpbWF0ZWQgbGVuZ3RoOiBjYWxjdWxhdGluZ1x1MjAyNjwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwZS1iYXJcIj48ZGl2IGNsYXNzPVwicGUtZmlsbFwiIGlkPVwicGUtZmlsbFwiIHN0eWxlPVwid2lkdGg6MCU7YmFja2dyb3VuZDojODZlZmFjO1wiPjwvZGl2PjwvZGl2PlxuICAgIDwvZGl2PlxuICBgIDogKGNmZy50aXRsZSA/IGA8aDIgc3R5bGU9XCJtYXJnaW46MCAwIDEycHg7XCI+JHtjZmcudGl0bGV9PC9oMj5gIDogJycpO1xuXG4gIGNvbnN0IG5hdkJhY2sgPSB7XG4gICAgc2tpbGxzOiAgICAgICBgPGJ1dHRvbiBjbGFzcz1cImJhY2stYnRuXCIgb25jbGljaz1cInN3aXRjaFRhYignYWNoLWVkaXRvcicpXCI+XHUyMTkwIEJhY2sgdG8gRXhwZXJpZW5jZSBCdWxsZXRzPC9idXR0b24+YCxcbiAgICBhY2hpZXZlbWVudHM6IGA8YnV0dG9uIGNsYXNzPVwiYmFjay1idG5cIiBvbmNsaWNrPVwic3dpdGNoVGFiKCdza2lsbHMtcmV2aWV3JylcIj5cdTIxOTAgQmFjayB0byBTa2lsbHM8L2J1dHRvbj5gLFxuICAgIHB1YmxpY2F0aW9uczogYDxidXR0b24gY2xhc3M9XCJiYWNrLWJ0blwiIG9uY2xpY2s9XCJzd2l0Y2hUYWIoJ3N1bW1hcnktcmV2aWV3JylcIj5cdTIxOTAgQmFjayB0byBTdW1tYXJ5PC9idXR0b24+YCxcbiAgfTtcbiAgY29uc3QgbmF2Q29udGludWUgPSB7XG4gICAgZXhwZXJpZW5jZXM6ICBgPGJ1dHRvbiBjbGFzcz1cImNvbnRpbnVlLWJ0blwiIG9uY2xpY2s9XCJzdWJtaXRFeHBlcmllbmNlRGVjaXNpb25zKClcIj5Db250aW51ZSB0byBFeHBlcmllbmNlIEJ1bGxldHMgXHUyMTkyPC9idXR0b24+YCxcbiAgICBza2lsbHM6ICAgICAgIGA8YnV0dG9uIGNsYXNzPVwiY29udGludWUtYnRuXCIgb25jbGljaz1cInN1Ym1pdFNraWxsRGVjaXNpb25zKClcIj5Db250aW51ZSB0byBBY2hpZXZlbWVudHMgXHUyMTkyPC9idXR0b24+YCxcbiAgICBhY2hpZXZlbWVudHM6IGA8YnV0dG9uIGNsYXNzPVwiY29udGludWUtYnRuXCIgb25jbGljaz1cInN1Ym1pdEFjaGlldmVtZW50RGVjaXNpb25zKClcIj5Db250aW51ZSB0byBUYWdsaW5lIFx1MjE5MjwvYnV0dG9uPmAsXG4gICAgcHVibGljYXRpb25zOiBgPGJ1dHRvbiBjbGFzcz1cImNvbnRpbnVlLWJ0blwiIG9uY2xpY2s9XCJzdWJtaXRQdWJsaWNhdGlvbkRlY2lzaW9ucygpXCI+Q29udGludWUgdG8gUmV3cml0ZSBcdTIxOTI8L2J1dHRvbj5gLFxuICB9O1xuICBjb25zdCBuYXZIdG1sID0gcGFuZSA9PT0gJ3N1bW1hcnknID8gJycgOiBgXG4gICAgPGRpdiBjbGFzcz1cIm5hdi1idXR0b25zJHtwYW5lID09PSAnZXhwZXJpZW5jZXMnID8gJyBuYXYtZW5kJyA6ICcnfVwiIHN0eWxlPVwibWFyZ2luOjE2cHggMDtcIj5cbiAgICAgICR7bmF2QmFja1twYW5lXSB8fCAnJ31cbiAgICAgICR7bmF2Q29udGludWVbcGFuZV0gfHwgJyd9XG4gICAgPC9kaXY+YDtcblxuICBjb250ZW50LmlubmVySFRNTCA9IGBcbiAgICAke2hlYWRlckh0bWx9XG4gICAgJHtjZmcuZGVzYyA/IGA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjAuOTVlbTttYXJnaW4tYm90dG9tOjE2cHg7XCI+JHtlc2NhcGVIdG1sKGNmZy5kZXNjKX08L3A+YCA6ICcnfVxuICAgIDxkaXYgaWQ9XCIke2NmZy5jb250YWluZXJ9XCI+PC9kaXY+XG4gICAgJHtuYXZIdG1sfVxuICBgO1xuXG4gIHdpbmRvdy5fYWN0aXZlUmV2aWV3UGFuZSA9IHBhbmU7XG4gIHN3aXRjaCAocGFuZSkge1xuICAgIGNhc2UgJ2V4cGVyaWVuY2VzJzpcbiAgICAgIGF3YWl0IGJ1aWxkRXhwZXJpZW5jZVJldmlld1RhYmxlKCk7XG4gICAgICBfdXBkYXRlUGFnZUVzdGltYXRlKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdza2lsbHMnOlxuICAgICAgYXdhaXQgYnVpbGRTa2lsbHNSZXZpZXdUYWJsZSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYWNoaWV2ZW1lbnRzJzpcbiAgICAgIGF3YWl0IGJ1aWxkQWNoaWV2ZW1lbnRzUmV2aWV3VGFibGUoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3N1bW1hcnknOlxuICAgICAgYXdhaXQgYnVpbGRTdW1tYXJ5Rm9jdXNTZWN0aW9uKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwdWJsaWNhdGlvbnMnOlxuICAgICAgYXdhaXQgYnVpbGRQdWJsaWNhdGlvbnNSZXZpZXdUYWJsZSgpO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuLy8gVHJhY2sgd2hpY2ggcGFuZSBpcyBjdXJyZW50bHkgYWN0aXZlXG53aW5kb3cuX2FjdGl2ZVJldmlld1BhbmUgPSAnZXhwZXJpZW5jZXMnO1xuXG5hc3luYyBmdW5jdGlvbiBzd2l0Y2hSZXZpZXdTdWJ0YWIocGFuZSkge1xuICAvLyBVcGRhdGUgYnV0dG9uIHN0YXRlc1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucmV2aWV3LXN1YnRhYicpLmZvckVhY2goYnRuID0+IHtcbiAgICBidG4uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJywgYnRuLmRhdGFzZXQucGFuZSA9PT0gcGFuZSk7XG4gIH0pO1xuXG4gIC8vIEhpZGUgYWxsIHBhbmVzLCBzaG93IHRoZSBzZWxlY3RlZCBvbmVcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJldmlldy1wYW5lJykuZm9yRWFjaChwID0+IHAuc3R5bGUuZGlzcGxheSA9ICdub25lJyk7XG4gIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGByZXZpZXctcGFuZS0ke3BhbmV9YCk7XG4gIGlmICh0YXJnZXQpIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblxuICB3aW5kb3cuX2FjdGl2ZVJldmlld1BhbmUgPSBwYW5lO1xuXG4gIC8vIExhenktbG9hZCBwYW5lIGNvbnRlbnQgb24gZmlyc3QgdmlzaXRcbiAgaWYgKCF3aW5kb3cuX3Jldmlld1BhbmVMb2FkZWQgfHwgIXdpbmRvdy5fcmV2aWV3UGFuZUxvYWRlZFtwYW5lXSkge1xuICAgIGF3YWl0IF9sb2FkUmV2aWV3UGFuZShwYW5lKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBfbG9hZFJldmlld1BhbmUocGFuZSkge1xuICBpZiAoIXdpbmRvdy5fcmV2aWV3UGFuZUxvYWRlZCkgd2luZG93Ll9yZXZpZXdQYW5lTG9hZGVkID0ge307XG4gIHRyeSB7XG4gICAgc3dpdGNoIChwYW5lKSB7XG4gICAgICBjYXNlICdleHBlcmllbmNlcyc6ICAgYXdhaXQgYnVpbGRFeHBlcmllbmNlUmV2aWV3VGFibGUoKTsgIGJyZWFrO1xuICAgICAgY2FzZSAnc2tpbGxzJzogICAgICAgIGF3YWl0IGJ1aWxkU2tpbGxzUmV2aWV3VGFibGUoKTsgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhY2hpZXZlbWVudHMnOiAgYXdhaXQgYnVpbGRBY2hpZXZlbWVudHNSZXZpZXdUYWJsZSgpOyBicmVhaztcbiAgICAgIGNhc2UgJ3N1bW1hcnknOiAgICAgICBhd2FpdCBidWlsZFN1bW1hcnlGb2N1c1NlY3Rpb24oKTsgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncHVibGljYXRpb25zJzogIGF3YWl0IGJ1aWxkUHVibGljYXRpb25zUmV2aWV3VGFibGUoKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgfVxuICAgIHdpbmRvdy5fcmV2aWV3UGFuZUxvYWRlZFtwYW5lXSA9IHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZGVsZXRlIHdpbmRvdy5fcmV2aWV3UGFuZUxvYWRlZFtwYW5lXTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgUGFnZS1lc3RpbWF0ZSB3aWRnZXQgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIF91cGRhdGVQYWdlRXN0aW1hdGUoKSB7XG4gIGNvbnN0IHdpZGdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlLWVzdGltYXRlLXdpZGdldCcpO1xuICBpZiAoIXdpZGdldCkgcmV0dXJuO1xuXG4gIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BlLWxhYmVsJyk7XG4gIGNvbnN0IGZpbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGUtZmlsbCcpO1xuICBjb25zdCBpY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BlLWljb24nKTtcblxuICBpZiAobGFiZWwpIGxhYmVsLnRleHRDb250ZW50ID0gJ1VwZGF0aW5nIHNlcnZlciBsYXlvdXQgZXN0aW1hdGVcdTIwMjYnO1xuICBpZiAoZmlsbCkgZmlsbC5zdHlsZS53aWR0aCA9ICcwJSc7XG4gIGlmIChpY29uKSBpY29uLnRleHRDb250ZW50ID0gJ1x1MjNGMyc7XG5cbiAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICBleHBlcmllbmNlX2RlY2lzaW9uczoge1xuICAgICAgLi4uKCh3aW5kb3cuX3NhdmVkRGVjaXNpb25zICYmIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMuZXhwZXJpZW5jZV9kZWNpc2lvbnMpIHx8IHt9KSxcbiAgICAgIC4uLih1c2VyU2VsZWN0aW9ucy5leHBlcmllbmNlcyB8fCB7fSksXG4gICAgfSxcbiAgICBza2lsbF9kZWNpc2lvbnM6IHtcbiAgICAgIC4uLigod2luZG93Ll9zYXZlZERlY2lzaW9ucyAmJiB3aW5kb3cuX3NhdmVkRGVjaXNpb25zLnNraWxsX2RlY2lzaW9ucykgfHwge30pLFxuICAgICAgLi4uKHVzZXJTZWxlY3Rpb25zLnNraWxscyB8fCB7fSksXG4gICAgfSxcbiAgICBhY2hpZXZlbWVudF9kZWNpc2lvbnM6IChcbiAgICAgICh3aW5kb3cuX3NhdmVkRGVjaXNpb25zICYmIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMuYWNoaWV2ZW1lbnRfZGVjaXNpb25zKVxuICAgICAgfHwgd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zXG4gICAgICB8fCB7fVxuICAgICksXG4gICAgcHVibGljYXRpb25fZGVjaXNpb25zOiAoXG4gICAgICAod2luZG93Ll9zYXZlZERlY2lzaW9ucyAmJiB3aW5kb3cuX3NhdmVkRGVjaXNpb25zLnB1YmxpY2F0aW9uX2RlY2lzaW9ucylcbiAgICAgIHx8IHdpbmRvdy5wdWJsaWNhdGlvbkRlY2lzaW9uc1xuICAgICAgfHwge31cbiAgICApLFxuICAgIHN1bW1hcnlfZm9jdXNfb3ZlcnJpZGU6IHdpbmRvdy5zZWxlY3RlZFN1bW1hcnlLZXkgfHwgbnVsbCxcbiAgfTtcblxuICBjb25zdCByZXF1ZXN0SWQgPSArK3BhZ2VFc3RpbWF0ZVJlcXVlc3RJZDtcbiAgY2xlYXJUaW1lb3V0KHBhZ2VFc3RpbWF0ZVRpbWVyKTtcbiAgcGFnZUVzdGltYXRlVGltZXIgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDYWxsKCdQT1NUJywgJy9hcGkvY3YvbGF5b3V0LWVzdGltYXRlJywgcGF5bG9hZCk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3IgfHwgJ2VzdGltYXRlIGZhaWxlZCcpO1xuICAgICAgaWYgKHJlcXVlc3RJZCAhPT0gcGFnZUVzdGltYXRlUmVxdWVzdElkKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHBhZ2VzID0gTnVtYmVyKHJlc3BvbnNlLnBhZ2VfY291bnRfZXN0aW1hdGUgfHwgMCk7XG4gICAgICBjb25zdCBwY3QgPSBNYXRoLm1pbigxMDAsIChwYWdlcyAvIDMpICogMTAwKTtcbiAgICAgIGNvbnN0IGNvbmZpZGVuY2UgPSBOdW1iZXIocmVzcG9uc2UucGFnZV9jb3VudF9jb25maWRlbmNlIHx8IDApO1xuXG4gICAgICBsZXQgY2xzID0gJ29rJztcbiAgICAgIGxldCBjb2xvdXIgPSAnIzIyYzU1ZSc7XG4gICAgICBsZXQgaWNvblRleHQgPSByZXNwb25zZS5wYWdlX2NvdW50X2V4YWN0ICE9IG51bGwgPyAnXHUyNzA1JyA6ICdcdUQ4M0RcdURDQzQnO1xuICAgICAgaWYgKHJlc3BvbnNlLnBhZ2VfbGVuZ3RoX3dhcm5pbmcpIHtcbiAgICAgICAgY2xzID0gcGFnZXMgPiAzID8gJ292ZXInIDogJ3dhcm4nO1xuICAgICAgICBjb2xvdXIgPSBwYWdlcyA+IDMgPyAnI2VmNDQ0NCcgOiAnI2Y1OWUwYic7XG4gICAgICAgIGljb25UZXh0ID0gcGFnZXMgPiAzID8gJ1x1RDgzRFx1REVBOCcgOiAnXHUyNkEwXHVGRTBGJztcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlTGFiZWwgPSByZXNwb25zZS5wYWdlX2NvdW50X2V4YWN0ICE9IG51bGxcbiAgICAgICAgPyBgRXhhY3Q6ICR7cmVzcG9uc2UucGFnZV9jb3VudF9leGFjdH0gcGFnZSR7cmVzcG9uc2UucGFnZV9jb3VudF9leGFjdCA9PT0gMSA/ICcnIDogJ3MnfWBcbiAgICAgICAgOiBgRXN0aW1hdGVkOiAke3BhZ2VzLnRvRml4ZWQoMSl9IHBhZ2VzYDtcbiAgICAgIGNvbnN0IGNvbmZpZGVuY2VMYWJlbCA9IHJlc3BvbnNlLnBhZ2VfY291bnRfZXhhY3QgIT0gbnVsbFxuICAgICAgICA/ICcnXG4gICAgICAgIDogYCAoJHtNYXRoLnJvdW5kKGNvbmZpZGVuY2UgKiAxMDApfSUgY29uZmlkZW5jZSlgO1xuICAgICAgY29uc3QgY29udHJpYnV0b3JUZXh0ID0gQXJyYXkuaXNBcnJheShyZXNwb25zZS5jb250cmlidXRvcnMpICYmIHJlc3BvbnNlLmNvbnRyaWJ1dG9ycy5sZW5ndGggPiAwXG4gICAgICAgID8gYCAke3Jlc3BvbnNlLmNvbnRyaWJ1dG9yc1swXX0uYFxuICAgICAgICA6ICcnO1xuICAgICAgY29uc3QgcmVjaGVja1RleHQgPSByZXNwb25zZS5wYWdlX2NvdW50X25lZWRzX2V4YWN0X3JlY2hlY2sgJiYgcmVzcG9uc2UucGFnZV9jb3VudF9leGFjdCA9PSBudWxsXG4gICAgICAgID8gJyBFeGFjdCByZWNoZWNrIHJlY29tbWVuZGVkLidcbiAgICAgICAgOiAnJztcblxuICAgICAgd2lkZ2V0LmNsYXNzTmFtZSA9IGBwYWdlLWVzdGltYXRlICR7Y2xzfWA7XG4gICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgbGFiZWwudGV4dENvbnRlbnQgPSBgJHtzb3VyY2VMYWJlbH0ke2NvbmZpZGVuY2VMYWJlbH0uJHtjb250cmlidXRvclRleHR9JHtyZWNoZWNrVGV4dH1gLnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWxsKSB7XG4gICAgICAgIGZpbGwuc3R5bGUud2lkdGggPSBgJHtwY3R9JWA7XG4gICAgICAgIGZpbGwuc3R5bGUuYmFja2dyb3VuZCA9IGNvbG91cjtcbiAgICAgIH1cbiAgICAgIGlmIChpY29uKSBpY29uLnRleHRDb250ZW50ID0gaWNvblRleHQ7XG5cbiAgICAgIHN0YXRlTWFuYWdlci5zZXRHZW5lcmF0aW9uU3RhdGUoe1xuICAgICAgICBwYWdlQ291bnRFc3RpbWF0ZTogcmVzcG9uc2UucGFnZV9jb3VudF9lc3RpbWF0ZSA/PyBudWxsLFxuICAgICAgICBwYWdlQ291bnRFeGFjdDogcmVzcG9uc2UucGFnZV9jb3VudF9leGFjdCA/PyBudWxsLFxuICAgICAgICBwYWdlQ291bnRDb25maWRlbmNlOiByZXNwb25zZS5wYWdlX2NvdW50X2NvbmZpZGVuY2UgPz8gbnVsbCxcbiAgICAgICAgcGFnZUNvdW50U291cmNlOiByZXNwb25zZS5wYWdlX2NvdW50X3NvdXJjZSB8fCBudWxsLFxuICAgICAgICBwYWdlTmVlZHNFeGFjdFJlY2hlY2s6IEJvb2xlYW4ocmVzcG9uc2UucGFnZV9jb3VudF9uZWVkc19leGFjdF9yZWNoZWNrKSxcbiAgICAgICAgcGFnZVdhcm5pbmc6IEJvb2xlYW4ocmVzcG9uc2UucGFnZV9sZW5ndGhfd2FybmluZyksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHJlcXVlc3RJZCAhPT0gcGFnZUVzdGltYXRlUmVxdWVzdElkKSByZXR1cm47XG4gICAgICB3aWRnZXQuY2xhc3NOYW1lID0gJ3BhZ2UtZXN0aW1hdGUgd2Fybic7XG4gICAgICBpZiAobGFiZWwpIGxhYmVsLnRleHRDb250ZW50ID0gYExheW91dCBlc3RpbWF0ZSB1bmF2YWlsYWJsZTogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICBpZiAoZmlsbCkge1xuICAgICAgICBmaWxsLnN0eWxlLndpZHRoID0gJzAlJztcbiAgICAgICAgZmlsbC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmNTllMGInO1xuICAgICAgfVxuICAgICAgaWYgKGljb24pIGljb24udGV4dENvbnRlbnQgPSAnXHUyNkEwXHVGRTBGJztcbiAgICB9XG4gIH0sIDI1MCk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBTaGFyZWQgYWN0aW9uIGNsaWNrIGhhbmRsZXJzIChleHBlcmllbmNlICsgc2tpbGxzIHRhYmxlcykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIGhhbmRsZUFjdGlvbkNsaWNrKGl0ZW1JZCwgYWN0aW9uLCB0eXBlKSB7XG4gIC8vIFJlbW92ZSBhY3RpdmUgY2xhc3MgZnJvbSBhbGwgYnV0dG9ucyBpbiB0aGlzIHJvd1xuICBjb25zdCByb3cgPSB0eXBlID09PSAnZXhwZXJpZW5jZSdcbiAgICA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHRyW2RhdGEtZXhwLWlkPVwiJHtpdGVtSWR9XCJdYClcbiAgICA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHRyW2RhdGEtc2tpbGw9XCIke2l0ZW1JZH1cIl1gKTtcblxuICBjb25zdCBidXR0b25zID0gcm93LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pY29uLWJ0bicpO1xuICBidXR0b25zLmZvckVhY2goYnRuID0+IHtcbiAgICBidG4uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XG4gICAgaWYgKGJ0bi5oYXNBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcpKSBidG4uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAnZmFsc2UnKTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFjdGl2ZSBjbGFzcyB0byBjbGlja2VkIGJ1dHRvblxuICBjb25zdCBjbGlja2VkQnRuID0gcm93LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWFjdGlvbj1cIiR7YWN0aW9ufVwiXWApO1xuICBjbGlja2VkQnRuLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICBpZiAoY2xpY2tlZEJ0bi5oYXNBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcpKSBjbGlja2VkQnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgJ3RydWUnKTtcblxuICAvLyBTdG9yZSBzZWxlY3Rpb24gYW5kIHJlY29yZCBleHBsaWNpdCByZXZpZXdcbiAgaWYgKHR5cGUgPT09ICdleHBlcmllbmNlJykge1xuICAgIHVzZXJTZWxlY3Rpb25zLmV4cGVyaWVuY2VzW2l0ZW1JZF0gPSBhY3Rpb247XG4gICAgd2luZG93Ll9leHBsaWNpdGx5UmV2aWV3ZWQgPSB3aW5kb3cuX2V4cGxpY2l0bHlSZXZpZXdlZCB8fCB7IGV4cGVyaWVuY2VzOiBuZXcgU2V0KCksIHNraWxsczogbmV3IFNldCgpIH07XG4gICAgd2luZG93Ll9leHBsaWNpdGx5UmV2aWV3ZWQuZXhwZXJpZW5jZXMuYWRkKGl0ZW1JZCk7XG4gIH0gZWxzZSB7XG4gICAgdXNlclNlbGVjdGlvbnMuc2tpbGxzW2l0ZW1JZF0gPSBhY3Rpb247XG4gICAgd2luZG93Ll9leHBsaWNpdGx5UmV2aWV3ZWQgPSB3aW5kb3cuX2V4cGxpY2l0bHlSZXZpZXdlZCB8fCB7IGV4cGVyaWVuY2VzOiBuZXcgU2V0KCksIHNraWxsczogbmV3IFNldCgpIH07XG4gICAgd2luZG93Ll9leHBsaWNpdGx5UmV2aWV3ZWQuc2tpbGxzLmFkZChpdGVtSWQpO1xuICB9XG4gIF91cGRhdGVQYWdlRXN0aW1hdGUoKTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIGJ1bGsgYWN0aW9uIHRvIGFsbCB2aXNpYmxlIChEYXRhVGFibGUtZmlsdGVyZWQpIHJvd3MgaW4gb25lIHRhYmxlLlxuICogYWN0aW9uOiAnZW1waGFzaXplJyB8ICdpbmNsdWRlJyB8ICdkZS1lbXBoYXNpemUnIHwgJ2V4Y2x1ZGUnIHwgJ3JlY29tbWVuZGVkJ1xuICogdHlwZTogICAnZXhwZXJpZW5jZScgfCAnc2tpbGwnXG4gKi9cbmZ1bmN0aW9uIGJ1bGtBY3Rpb24oYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHRhYmxlSWQgID0gdHlwZSA9PT0gJ2V4cGVyaWVuY2UnID8gJyNleHBlcmllbmNlLXJldmlldy10YWJsZScgOiAnI3NraWxscy1yZXZpZXctdGFibGUnO1xuICBjb25zdCBkYXRhICAgICA9IHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zIHx8IHt9O1xuICBjb25zdCBkdCAgICAgICA9ICQuZm4uRGF0YVRhYmxlLmlzRGF0YVRhYmxlKHRhYmxlSWQpID8gJCh0YWJsZUlkKS5EYXRhVGFibGUoKSA6IG51bGw7XG5cbiAgLy8gSXRlcmF0ZSBvbmx5IHRoZSByb3dzIHRoYXQgRGF0YVRhYmxlIGN1cnJlbnRseSBzaG93cyAocmVzcGVjdHMgc2VhcmNoIGZpbHRlcilcbiAgY29uc3Qgcm93cyA9IGR0XG4gICAgPyBkdC5yb3dzKHsgc2VhcmNoOiAnYXBwbGllZCcgfSkubm9kZXMoKS50b0FycmF5KClcbiAgICA6IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgJHt0YWJsZUlkfSB0Ym9keSB0cmApKTtcblxuICByb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICBjb25zdCBleHBJZCAgICA9IHJvdy5kYXRhc2V0LmV4cElkO1xuICAgIGNvbnN0IHNraWxsSWQgID0gcm93LmRhdGFzZXQuc2tpbGw7XG4gICAgY29uc3QgaXRlbUlkICAgPSBleHBJZCB8fCBza2lsbElkO1xuICAgIGlmICghaXRlbUlkKSByZXR1cm47XG5cbiAgICBsZXQgcmVzb2x2ZWRBY3Rpb24gPSBhY3Rpb247XG4gICAgaWYgKGFjdGlvbiA9PT0gJ3JlY29tbWVuZGVkJykge1xuICAgICAgcmVzb2x2ZWRBY3Rpb24gPSB0eXBlID09PSAnZXhwZXJpZW5jZSdcbiAgICAgICAgPyBfcmVzb2x2ZWRFeHBBY3Rpb24oaXRlbUlkLCBkYXRhKVxuICAgICAgICA6IF9yZXNvbHZlZFNraWxsQWN0aW9uKGl0ZW1JZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGJ1dHRvbiBzdGF0ZXNcbiAgICByb3cucXVlcnlTZWxlY3RvckFsbCgnLmljb24tYnRuJykuZm9yRWFjaChidG4gPT4ge1xuICAgICAgYnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuICAgICAgaWYgKGJ0bi5oYXNBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcpKSBidG4uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAnZmFsc2UnKTtcbiAgICB9KTtcbiAgICBjb25zdCB0YXJnZXQgPSByb3cucXVlcnlTZWxlY3RvcihgW2RhdGEtYWN0aW9uPVwiJHtyZXNvbHZlZEFjdGlvbn1cIl1gKTtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICB0YXJnZXQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgICBpZiAodGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJykpIHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICd0cnVlJyk7XG4gICAgfVxuXG4gICAgLy8gU3RvcmUgc2VsZWN0aW9uXG4gICAgaWYgKHR5cGUgPT09ICdleHBlcmllbmNlJykge1xuICAgICAgdXNlclNlbGVjdGlvbnMuZXhwZXJpZW5jZXNbaXRlbUlkXSA9IHJlc29sdmVkQWN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB1c2VyU2VsZWN0aW9ucy5za2lsbHNbaXRlbUlkXSA9IHJlc29sdmVkQWN0aW9uO1xuICAgIH1cbiAgfSk7XG4gIF91cGRhdGVQYWdlRXN0aW1hdGUoKTtcbn1cblxuZnVuY3Rpb24gX3Jlc29sdmVkRXhwQWN0aW9uKGV4cElkLCBkYXRhKSB7XG4gIGNvbnN0IHJlYyA9IGdldEV4cGVyaWVuY2VSZWNvbW1lbmRhdGlvbihleHBJZCwgZGF0YSk7XG4gIGlmIChyZWMgPT09ICdFbXBoYXNpemUnKSAgICByZXR1cm4gJ2VtcGhhc2l6ZSc7XG4gIGlmIChyZWMgPT09ICdJbmNsdWRlJykgICAgICByZXR1cm4gJ2luY2x1ZGUnO1xuICBpZiAocmVjID09PSAnRGUtZW1waGFzaXplJykgcmV0dXJuICdkZS1lbXBoYXNpemUnO1xuICByZXR1cm4gJ2V4Y2x1ZGUnO1xufVxuXG5mdW5jdGlvbiBfcmVzb2x2ZWRTa2lsbEFjdGlvbihza2lsbE5hbWUsIGRhdGEpIHtcbiAgY29uc3QgcmVjID0gZ2V0U2tpbGxSZWNvbW1lbmRhdGlvbihza2lsbE5hbWUsIGRhdGEpO1xuICBpZiAocmVjID09PSAnRW1waGFzaXplJykgICAgcmV0dXJuICdlbXBoYXNpemUnO1xuICBpZiAocmVjID09PSAnSW5jbHVkZScpICAgICAgcmV0dXJuICdpbmNsdWRlJztcbiAgaWYgKHJlYyA9PT0gJ0RlLWVtcGhhc2l6ZScpIHJldHVybiAnZGUtZW1waGFzaXplJztcbiAgcmV0dXJuICdleGNsdWRlJztcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFRhZ2xpbmUgcmV2aWV3IHRhYiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVUYWdsaW5lUmV2aWV3VGFiKCkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250ZW50KSByZXR1cm47XG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgIDxoMiBzdHlsZT1cIm1hcmdpbjowIDAgMTZweDtcIj5cdUQ4M0NcdURGRjdcdUZFMEYgQXBwbGljYW50IFRhZ2xpbmU8L2gyPlxuICAgIDxkaXYgaWQ9XCJ0YWdsaW5lLXJldmlldy1jb250YWluZXJcIj48L2Rpdj5cbiAgYDtcbiAgaWYgKHR5cGVvZiBidWlsZFRhZ2xpbmVSZXZpZXdTZWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXdhaXQgYnVpbGRUYWdsaW5lUmV2aWV3U2VjdGlvbigpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFeHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQge1xuICB1c2VyU2VsZWN0aW9ucyxcbiAgdXBkYXRlSW5jbHVzaW9uQ291bnRzLFxuICBzd2l0Y2hUYWIsXG4gIGxvYWRUYWJDb250ZW50LFxuICBwb3B1bGF0ZUFuYWx5c2lzVGFiLFxuICBoYW5kbGVDdXN0b21pemF0aW9uUmVzcG9uc2UsXG4gIHNob3dUYWJsZUJhc2VkUmV2aWV3LFxuICBwb3B1bGF0ZVJldmlld1RhYixcbiAgcG9wdWxhdGVUYWdsaW5lUmV2aWV3VGFiLFxuICBzd2l0Y2hSZXZpZXdTdWJ0YWIsXG4gIF9sb2FkUmV2aWV3UGFuZSxcbiAgX3VwZGF0ZVBhZ2VFc3RpbWF0ZSxcbiAgaGFuZGxlQWN0aW9uQ2xpY2ssXG4gIGJ1bGtBY3Rpb24sXG4gIF9yZXNvbHZlZEV4cEFjdGlvbixcbiAgX3Jlc29sdmVkU2tpbGxBY3Rpb24sXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvcHJldmlldy1yZW5kZXIuanNcbiAqIFNoYXJlZCwgc2lkZS1lZmZlY3QtZnJlZSBoZWxwZXIgZm9yIHNhZmVseSByZW5kZXJpbmcgQ1YgSFRNTCBpbnRvIGFcbiAqIHNhbmRib3hlZCBpZnJhbWUuIERlbGliZXJhdGVseSBoYXMgbm8gcmVmZXJlbmNlIHRvIHN0YXRlTWFuYWdlciwgYXBpQ2FsbCxcbiAqIG9yIGFueSBmZXRjaCBsb2dpYyBcdTIwMTQgaXQgb25seSB0b3VjaGVzIHRoZSBET00gXHUyMDE0IHNvIGl0IGNhbiBiZSBzYWZlbHlcbiAqIGltcG9ydGVkIGJ5IGJvdGggdGhlIG11dGF0aW5nIGxheW91dC1yZXZpZXcgZmxvdyAobGF5b3V0LWluc3RydWN0aW9uLmpzKVxuICogYW5kIHRoZSByZWFkLW9ubHkgZWFybHktcHJldmlldyBwYW5lbCAoZWFybHktcHJldmlldy1wYW5lbC5qcykgd2l0aG91dFxuICogY3JlYXRpbmcgYSBzaGFyZWQgaW1wb3J0IHBhdGggYmFjayB0byBhbnkgbXV0YXRpbmcgZW5kcG9pbnQuXG4gKi9cblxuLyoqXG4gKiBSZW5kZXIgYW4gSFRNTCBzdHJpbmcgaW50byBhbiBpZnJhbWUgdmlhIHNyY2RvYywgd2l0aCB0aGUgc2FuZGJveFxuICogYXR0cmlidXRlcyBhbHJlYWR5IGVzdGFibGlzaGVkIGZvciBDViBwcmV2aWV3cyBlbHNld2hlcmUgaW4gdGhlIGFwcC5cbiAqIEBwYXJhbSB7SFRNTElGcmFtZUVsZW1lbnR9IGlmcmFtZUVsXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuICovXG5mdW5jdGlvbiByZW5kZXJIdG1sSW50b0lmcmFtZShpZnJhbWVFbCwgaHRtbCkge1xuICBpZiAoIWlmcmFtZUVsKSByZXR1cm47XG4gIGlmcmFtZUVsLnNldEF0dHJpYnV0ZSgnc2FuZGJveCcsICdhbGxvdy1zYW1lLW9yaWdpbicpO1xuICBpZnJhbWVFbC5zZXRBdHRyaWJ1dGUoJ3JlZmVycmVycG9saWN5JywgJ25vLXJlZmVycmVyJyk7XG4gIGlmcmFtZUVsLnNyY2RvYyA9IGh0bWw7XG59XG5cbmV4cG9ydCB7IHJlbmRlckh0bWxJbnRvSWZyYW1lIH07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi92YWxpZGF0b3JzLmpzXG4gKiBBUEkgcmVzcG9uc2UgdmFsaWRhdG9ycyBcdTIwMTQgRFRPIG1pcnJvcnMgb2YgUHl0aG9uIGRhdGFjbGFzc2VzIGluIHdlYl9hcHAucHkuXG4gKlxuICogRWFjaCBmdW5jdGlvbiBjaGVja3MgdGhhdCByZXF1aXJlZCBmaWVsZHMgYXJlIHByZXNlbnQgaW4gYW4gQVBJIHJlc3BvbnNlIGFuZFxuICogbG9ncyBhIGNvbnNvbGUud2FybiBpZiBhbnkgYXJlIG1pc3Npbmcgb3IgaGF2ZSBhbiB1bmV4cGVjdGVkIHR5cGUuICBWYWxpZGF0b3JzXG4gKiByZXR1cm4gdGhlIG9yaWdpbmFsIGRhdGEgb2JqZWN0IHVuY2hhbmdlZCBzbyB0aGV5IGNhbiBiZSB1c2VkIGlubGluZS5cbiAqXG4gKiBVcGRhdGUgYm90aCB0aGlzIGZpbGUgYW5kIHRoZSBQeXRob24gZGF0YWNsYXNzZXMgaW4gd2ViX2FwcC5weSB0b2dldGhlclxuICogd2hlbmV2ZXIgYWRkaW5nIG9yIHJlbW92aW5nIHJlc3BvbnNlIGZpZWxkcy5cbiAqXG4gKiBERVBFTkRFTkNJRVM6IG5vbmVcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ3ZhbGlkYXRvcnMnKTtcblxuLyoqIFZhbGlkYXRlIEdFVCAvYXBpL3N0YXR1cyByZXNwb25zZS4gKi9cbmZ1bmN0aW9uIHBhcnNlU3RhdHVzUmVzcG9uc2UoZGF0YSkge1xuICBjb25zdCByZXF1aXJlZCA9IFtcbiAgICAncGhhc2UnLCAnbGxtX3Byb3ZpZGVyJywgJ2pvYl9kZXNjcmlwdGlvbicsXG4gICAgJ3Bvc3RfYW5hbHlzaXNfcXVlc3Rpb25zJywgJ3Bvc3RfYW5hbHlzaXNfYW5zd2VycycsXG4gICAgJ2FsbF9leHBlcmllbmNlX2lkcycsICdhbGxfZXhwZXJpZW5jZXMnLCAnYWxsX3NraWxscycsICdhbGxfYWNoaWV2ZW1lbnRzJyxcbiAgICAncHJvZmVzc2lvbmFsX3N1bW1hcmllcycsICdjb3BpbG90X2F1dGgnLCAnaXRlcmF0aW5nJyxcbiAgICAnZXhwZXJpZW5jZV9kZWNpc2lvbnMnLCAnc2tpbGxfZGVjaXNpb25zJyxcbiAgICAnYWNoaWV2ZW1lbnRfZGVjaXNpb25zJywgJ3B1YmxpY2F0aW9uX2RlY2lzaW9ucycsXG4gICAgJ2V4dHJhX3NraWxscycsICdleHRyYV9za2lsbF9tYXRjaGVzJywgJ3Nlc3Npb25fZmlsZScsXG4gIF07XG4gIGNvbnN0IG1pc3NpbmcgPSByZXF1aXJlZC5maWx0ZXIoayA9PiAhKGsgaW4gZGF0YSkpO1xuICBpZiAobWlzc2luZy5sZW5ndGgpIHtcbiAgICBsb2cud2FybignW3BhcnNlU3RhdHVzUmVzcG9uc2VdIE1pc3NpbmcgZmllbGRzOicsIG1pc3NpbmcsIGRhdGEpO1xuICB9XG4gIGlmICgncG9zdF9hbmFseXNpc19xdWVzdGlvbnMnIGluIGRhdGEgJiYgIUFycmF5LmlzQXJyYXkoZGF0YS5wb3N0X2FuYWx5c2lzX3F1ZXN0aW9ucykpIHtcbiAgICBsb2cud2FybignW3BhcnNlU3RhdHVzUmVzcG9uc2VdIHBvc3RfYW5hbHlzaXNfcXVlc3Rpb25zIHNob3VsZCBiZSBhbiBhcnJheTonLCBkYXRhLnBvc3RfYW5hbHlzaXNfcXVlc3Rpb25zKTtcbiAgfVxuICBpZiAoJ2FsbF9leHBlcmllbmNlX2lkcycgaW4gZGF0YSAmJiAhQXJyYXkuaXNBcnJheShkYXRhLmFsbF9leHBlcmllbmNlX2lkcykpIHtcbiAgICBsb2cud2FybignW3BhcnNlU3RhdHVzUmVzcG9uc2VdIGFsbF9leHBlcmllbmNlX2lkcyBzaG91bGQgYmUgYW4gYXJyYXk6JywgZGF0YS5hbGxfZXhwZXJpZW5jZV9pZHMpO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKiogVmFsaWRhdGUgR0VUIC9hcGkvc2Vzc2lvbnMgcmVzcG9uc2UuICovXG5mdW5jdGlvbiBwYXJzZVNlc3Npb25MaXN0UmVzcG9uc2UoZGF0YSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YS5zZXNzaW9ucykpIHtcbiAgICBsb2cud2FybignW3BhcnNlU2Vzc2lvbkxpc3RSZXNwb25zZV0gc2Vzc2lvbnMgc2hvdWxkIGJlIGFuIGFycmF5OicsIGRhdGEpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGl0ZW1SZXF1aXJlZCA9IFsncGF0aCcsICdwb3NpdGlvbl9uYW1lJywgJ3RpbWVzdGFtcCcsICdwaGFzZScsICdoYXNfam9iJywgJ2hhc19hbmFseXNpcycsICdoYXNfY3VzdG9taXphdGlvbnMnXTtcbiAgICBkYXRhLnNlc3Npb25zLmZvckVhY2goKHMsIGkpID0+IHtcbiAgICAgIGNvbnN0IG1pc3NpbmcgPSBpdGVtUmVxdWlyZWQuZmlsdGVyKGsgPT4gIShrIGluIHMpKTtcbiAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCkgbG9nLndhcm4oYFtwYXJzZVNlc3Npb25MaXN0UmVzcG9uc2VdIHNlc3Npb25zWyR7aX1dIG1pc3NpbmcgZmllbGRzOmAsIG1pc3NpbmcsIHMpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKiogVmFsaWRhdGUgR0VUIC9hcGkvcmV3cml0ZXMgcmVzcG9uc2UuICovXG5mdW5jdGlvbiBwYXJzZVJld3JpdGVzUmVzcG9uc2UoZGF0YSkge1xuICBjb25zdCByZXF1aXJlZCA9IFsnb2snLCAncmV3cml0ZXMnLCAncGVyc3Vhc2lvbl93YXJuaW5ncycsICdwaGFzZSddO1xuICBjb25zdCBtaXNzaW5nID0gcmVxdWlyZWQuZmlsdGVyKGsgPT4gIShrIGluIGRhdGEpKTtcbiAgaWYgKG1pc3NpbmcubGVuZ3RoKSBsb2cud2FybignW3BhcnNlUmV3cml0ZXNSZXNwb25zZV0gTWlzc2luZyBmaWVsZHM6JywgbWlzc2luZywgZGF0YSk7XG4gIGlmICgncmV3cml0ZXMnIGluIGRhdGEgJiYgIUFycmF5LmlzQXJyYXkoZGF0YS5yZXdyaXRlcykpIHtcbiAgICBsb2cud2FybignW3BhcnNlUmV3cml0ZXNSZXNwb25zZV0gcmV3cml0ZXMgc2hvdWxkIGJlIGFuIGFycmF5OicsIGRhdGEucmV3cml0ZXMpO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKiogVmFsaWRhdGUgUE9TVCAvYXBpL21lc3NhZ2UgYW5kIFBPU1QgL2FwaS9hY3Rpb24gcmVzcG9uc2VzLiAqL1xuZnVuY3Rpb24gcGFyc2VNZXNzYWdlUmVzcG9uc2UoZGF0YSkge1xuICBpZiAoIWRhdGEub2sgJiYgIWRhdGEuZXJyb3IpIHtcbiAgICBsb2cud2FybignW3BhcnNlTWVzc2FnZVJlc3BvbnNlXSBSZXNwb25zZSBoYXMgbmVpdGhlciBvayBub3IgZXJyb3I6JywgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFUyBtb2R1bGUgZXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB7XG4gIHBhcnNlU3RhdHVzUmVzcG9uc2UsXG4gIHBhcnNlU2Vzc2lvbkxpc3RSZXNwb25zZSxcbiAgcGFyc2VSZXdyaXRlc1Jlc3BvbnNlLFxuICBwYXJzZU1lc3NhZ2VSZXNwb25zZSxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9yZWNvbW1lbmRhdGlvbi1oZWxwZXJzLmpzXG4gKiBQdXJlIGhlbHBlciBmdW5jdGlvbnMgZm9yIGxvb2tpbmcgdXAgTExNIHJlY29tbWVuZGF0aW9uIGRhdGEgZnJvbSB0aGVcbiAqIC9hcGkvc3RhdHVzIHJlc3BvbnNlIG9iamVjdC4gIFN1cHBvcnRzIGV4cGVyaWVuY2UsIHNraWxsLCBhbmQgYWNoaWV2ZW1lbnRcbiAqIHJlY29tbWVuZGF0aW9ucyB3aXRoIGJhY2t3YXJkcy1jb21wYXRpYmxlIGZsYXQtbGlzdCBmYWxsYmFja3MgZm9yIG9sZFxuICogc2Vzc2lvbiBkYXRhLlxuICpcbiAqIERFUEVOREVOQ0lFUzogbm9uZVxuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcigncmVjb21tZW5kYXRpb24taGVscGVycycpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEludGVybmFsIGxvb2t1cCBoZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIExvb2sgdXAgYSBzaW5nbGUgZXhwZXJpZW5jZSBlbnRyeSBpbiBleHBlcmllbmNlX3JlY29tbWVuZGF0aW9ucy4gKi9cbmZ1bmN0aW9uIF9maW5kRXhwUmVjKGV4cElkLCBkYXRhKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShkYXRhLmV4cGVyaWVuY2VfcmVjb21tZW5kYXRpb25zKSkge1xuICAgIGxvZy53YXJuKCdbcmVjb21tZW5kYXRpb25dIGV4cGVyaWVuY2VfcmVjb21tZW5kYXRpb25zIG1pc3Npbmc7IHVzaW5nIGZsYXQtbGlzdCBmYWxsYmFjayBmb3InLCBleHBJZCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGRhdGEuZXhwZXJpZW5jZV9yZWNvbW1lbmRhdGlvbnMuZmluZChyID0+IHIuaWQgPT09IGV4cElkIHx8IHIuZXhwZXJpZW5jZV9pZCA9PT0gZXhwSWQpIHx8IG51bGw7XG59XG5cbi8qKiBMb29rIHVwIGEgc2luZ2xlIHNraWxsIGVudHJ5IGluIHNraWxsX3JlY29tbWVuZGF0aW9ucy4gKi9cbmZ1bmN0aW9uIF9maW5kU2tpbGxSZWMoc2tpbGwsIGRhdGEpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEuc2tpbGxfcmVjb21tZW5kYXRpb25zKSkge1xuICAgIGxvZy53YXJuKCdbcmVjb21tZW5kYXRpb25dIHNraWxsX3JlY29tbWVuZGF0aW9ucyBtaXNzaW5nOyB1c2luZyBmbGF0LWxpc3QgZmFsbGJhY2sgZm9yJywgc2tpbGwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBkYXRhLnNraWxsX3JlY29tbWVuZGF0aW9ucy5maW5kKHIgPT4gci5za2lsbCA9PT0gc2tpbGwgfHwgci5uYW1lID09PSBza2lsbCkgfHwgbnVsbDtcbn1cblxuLyoqIFBhcnNlIGEgcmF3IGNvbmZpZGVuY2Ugc3RyaW5nIHRvIGEge2xldmVsLCB0ZXh0fSBvYmplY3QsIG9yIG51bGwgaWYgdW5yZWNvZ25pc2VkLiAqL1xuZnVuY3Rpb24gX3BhcnNlQ29uZmlkZW5jZShjb25mKSB7XG4gIGNvbnN0IGMgPSAoY29uZiB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGMuaW5jbHVkZXMoJ3ZlcnkgaGlnaCcpKSByZXR1cm4geyBsZXZlbDogJ3ZlcnktaGlnaCcsIHRleHQ6ICdWZXJ5IEhpZ2ggQ29uZmlkZW5jZScgfTtcbiAgaWYgKGMuaW5jbHVkZXMoJ3ZlcnkgbG93JykpICByZXR1cm4geyBsZXZlbDogJ3ZlcnktbG93JywgIHRleHQ6ICdWZXJ5IExvdyBDb25maWRlbmNlJyAgfTtcbiAgaWYgKGMuaW5jbHVkZXMoJ2hpZ2gnKSkgICAgICByZXR1cm4geyBsZXZlbDogJ2hpZ2gnLCAgICAgIHRleHQ6ICdIaWdoIENvbmZpZGVuY2UnICAgICAgfTtcbiAgaWYgKGMuaW5jbHVkZXMoJ21lZGl1bScpKSAgICByZXR1cm4geyBsZXZlbDogJ21lZGl1bScsICAgIHRleHQ6ICdNZWRpdW0gQ29uZmlkZW5jZScgICAgfTtcbiAgaWYgKGMuaW5jbHVkZXMoJ2xvdycpKSAgICAgICByZXR1cm4geyBsZXZlbDogJ2xvdycsICAgICAgIHRleHQ6ICdMb3cgQ29uZmlkZW5jZScgICAgICAgfTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhwZXJpZW5jZSByZWNvbW1lbmRhdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRFeHBlcmllbmNlUmVjb21tZW5kYXRpb24oZXhwSWQsIGRhdGEpIHtcbiAgY29uc3QgcmVjID0gX2ZpbmRFeHBSZWMoZXhwSWQsIGRhdGEpO1xuICBpZiAocmVjICYmIHJlYy5yZWNvbW1lbmRhdGlvbikgcmV0dXJuIHJlYy5yZWNvbW1lbmRhdGlvbjtcbiAgLy8gQmFja3dhcmRzLWNvbXBhdCBmbGF0LWxpc3QgZmFsbGJhY2tcbiAgaWYgKGRhdGEub21pdHRlZF9leHBlcmllbmNlcyAgICAgJiYgZGF0YS5vbWl0dGVkX2V4cGVyaWVuY2VzLmluY2x1ZGVzKGV4cElkKSkgICAgIHJldHVybiAnT21pdCc7XG4gIGlmIChkYXRhLnJlY29tbWVuZGVkX2V4cGVyaWVuY2VzICYmIGRhdGEucmVjb21tZW5kZWRfZXhwZXJpZW5jZXMuaW5jbHVkZXMoZXhwSWQpKSByZXR1cm4gJ0VtcGhhc2l6ZSc7XG4gIHJldHVybiAnSW5jbHVkZSc7XG59XG5cbmZ1bmN0aW9uIGdldENvbmZpZGVuY2VMZXZlbChleHBJZCwgZGF0YSkge1xuICBjb25zdCByZWMgPSBfZmluZEV4cFJlYyhleHBJZCwgZGF0YSk7XG4gIHJldHVybiAocmVjICYmIF9wYXJzZUNvbmZpZGVuY2UocmVjLmNvbmZpZGVuY2UpKSB8fCB7IGxldmVsOiAnbWVkaXVtJywgdGV4dDogJ01lZGl1bSBDb25maWRlbmNlJyB9O1xufVxuXG5mdW5jdGlvbiBnZXRFeHBlcmllbmNlUmVhc29uaW5nKGV4cElkLCBkYXRhKSB7XG4gIGNvbnN0IHJlYyA9IF9maW5kRXhwUmVjKGV4cElkLCBkYXRhKTtcbiAgcmV0dXJuIChyZWMgJiYgcmVjLnJlYXNvbmluZykgfHwgJ1RoaXMgZXhwZXJpZW5jZSB3YXMgc2VsZWN0ZWQgYmFzZWQgb24gaXRzIHJlbGV2YW5jZSB0byB0aGUgcG9zaXRpb24gcmVxdWlyZW1lbnRzLic7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2tpbGwgcmVjb21tZW5kYXRpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZ2V0U2tpbGxSZWNvbW1lbmRhdGlvbihza2lsbCwgZGF0YSkge1xuICBjb25zdCByZWMgPSBfZmluZFNraWxsUmVjKHNraWxsLCBkYXRhKTtcbiAgaWYgKHJlYyAmJiByZWMucmVjb21tZW5kYXRpb24pIHJldHVybiByZWMucmVjb21tZW5kYXRpb247XG4gIGlmIChkYXRhLnJlY29tbWVuZGVkX3NraWxscyAmJiBkYXRhLnJlY29tbWVuZGVkX3NraWxscy5pbmNsdWRlcyhza2lsbCkpIHJldHVybiAnSW5jbHVkZSc7XG4gIHJldHVybiAnT21pdCc7XG59XG5cbmZ1bmN0aW9uIGdldFNraWxsQ29uZmlkZW5jZShza2lsbCwgZGF0YSkge1xuICBjb25zdCByZWMgPSBfZmluZFNraWxsUmVjKHNraWxsLCBkYXRhKTtcbiAgaWYgKHJlYykge1xuICAgIGNvbnN0IHBhcnNlZCA9IF9wYXJzZUNvbmZpZGVuY2UocmVjLmNvbmZpZGVuY2UpO1xuICAgIGlmIChwYXJzZWQpIHJldHVybiBwYXJzZWQ7XG4gIH1cbiAgaWYgKGRhdGEucmVjb21tZW5kZWRfc2tpbGxzICYmIGRhdGEucmVjb21tZW5kZWRfc2tpbGxzLmluY2x1ZGVzKHNraWxsKSkge1xuICAgIHJldHVybiB7IGxldmVsOiAnbWVkaXVtJywgdGV4dDogJ01lZGl1bSBDb25maWRlbmNlJyB9O1xuICB9XG4gIHJldHVybiB7IGxldmVsOiAnbG93JywgdGV4dDogJ0xvdyBDb25maWRlbmNlJyB9O1xufVxuXG5mdW5jdGlvbiBnZXRTa2lsbFJlYXNvbmluZyhza2lsbCwgZGF0YSkge1xuICBjb25zdCByZWMgPSBfZmluZFNraWxsUmVjKHNraWxsLCBkYXRhKTtcbiAgaWYgKHJlYyAmJiByZWMucmVhc29uaW5nKSByZXR1cm4gcmVjLnJlYXNvbmluZztcbiAgaWYgKGRhdGEucmVjb21tZW5kZWRfc2tpbGxzICYmIGRhdGEucmVjb21tZW5kZWRfc2tpbGxzLmluY2x1ZGVzKHNraWxsKSkge1xuICAgIHJldHVybiAnVGhpcyBza2lsbCB3YXMgaWRlbnRpZmllZCBhcyByZWxldmFudCB0byB0aGUgcG9zaXRpb24gcmVxdWlyZW1lbnRzLic7XG4gIH1cbiAgcmV0dXJuICdUaGlzIHNraWxsIHdhcyBub3Qgc3BlY2lmaWNhbGx5IG1lbnRpb25lZCBpbiB0aGUgam9iIHJlcXVpcmVtZW50cy4nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEFjaGlldmVtZW50IHJlY29tbWVuZGF0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGdldEFjaGlldmVtZW50UmVjb21tZW5kYXRpb24oYWNoSWQsIGRhdGEpIHtcbiAgaWYgKGRhdGEuYWNoaWV2ZW1lbnRfcmVjb21tZW5kYXRpb25zICYmIEFycmF5LmlzQXJyYXkoZGF0YS5hY2hpZXZlbWVudF9yZWNvbW1lbmRhdGlvbnMpKSB7XG4gICAgY29uc3QgcmVjID0gZGF0YS5hY2hpZXZlbWVudF9yZWNvbW1lbmRhdGlvbnMuZmluZChyID0+IHIuaWQgPT09IGFjaElkKTtcbiAgICBpZiAocmVjICYmIHJlYy5yZWNvbW1lbmRhdGlvbikgcmV0dXJuIHJlYy5yZWNvbW1lbmRhdGlvbjtcbiAgfVxuICBpZiAoZGF0YS5yZWNvbW1lbmRlZF9hY2hpZXZlbWVudHMgJiYgZGF0YS5yZWNvbW1lbmRlZF9hY2hpZXZlbWVudHMuaW5jbHVkZXMoYWNoSWQpKSB7XG4gICAgcmV0dXJuICdJbmNsdWRlJztcbiAgfVxuICByZXR1cm4gJ0RlLWVtcGhhc2l6ZSc7XG59XG5cbmZ1bmN0aW9uIGdldEFjaGlldmVtZW50Q29uZmlkZW5jZShhY2hJZCwgZGF0YSwgYWNoSW1wb3J0YW5jZSkge1xuICBpZiAoZGF0YS5hY2hpZXZlbWVudF9yZWNvbW1lbmRhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShkYXRhLmFjaGlldmVtZW50X3JlY29tbWVuZGF0aW9ucykpIHtcbiAgICBjb25zdCByZWMgPSBkYXRhLmFjaGlldmVtZW50X3JlY29tbWVuZGF0aW9ucy5maW5kKHIgPT4gci5pZCA9PT0gYWNoSWQpO1xuICAgIGlmIChyZWMgJiYgcmVjLmNvbmZpZGVuY2UpIHtcbiAgICAgIGNvbnN0IGNvbmYgPSByZWMuY29uZmlkZW5jZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNvbmYuaW5jbHVkZXMoJ3ZlcnkgaGlnaCcpKSByZXR1cm4geyBsZXZlbDogJ3ZlcnktaGlnaCcsIHRleHQ6ICdWZXJ5IEhpZ2gnIH07XG4gICAgICBpZiAoY29uZi5pbmNsdWRlcygnaGlnaCcpKSAgICAgIHJldHVybiB7IGxldmVsOiAnaGlnaCcsICAgICAgdGV4dDogJ0hpZ2gnICAgICAgfTtcbiAgICAgIGlmIChjb25mLmluY2x1ZGVzKCdtZWRpdW0nKSkgICAgcmV0dXJuIHsgbGV2ZWw6ICdtZWRpdW0nLCAgICB0ZXh0OiAnTWVkaXVtJyAgICB9O1xuICAgICAgaWYgKGNvbmYuaW5jbHVkZXMoJ3ZlcnkgbG93JykpICByZXR1cm4geyBsZXZlbDogJ3ZlcnktbG93JywgIHRleHQ6ICdWZXJ5IExvdycgIH07XG4gICAgICBpZiAoY29uZi5pbmNsdWRlcygnbG93JykpICAgICAgIHJldHVybiB7IGxldmVsOiAnbG93JywgICAgICAgdGV4dDogJ0xvdycgICAgICAgfTtcbiAgICB9XG4gIH1cbiAgY29uc3QgaW1wID0gYWNoSW1wb3J0YW5jZSB8fCA1O1xuICBpZiAoaW1wID49IDkpIHJldHVybiB7IGxldmVsOiAndmVyeS1oaWdoJywgdGV4dDogJ1ZlcnkgSGlnaCcgfTtcbiAgaWYgKGltcCA+PSA3KSByZXR1cm4geyBsZXZlbDogJ2hpZ2gnLCAgICAgIHRleHQ6ICdIaWdoJyAgICAgIH07XG4gIGlmIChpbXAgPj0gNSkgcmV0dXJuIHsgbGV2ZWw6ICdtZWRpdW0nLCAgICB0ZXh0OiAnTWVkaXVtJyAgICB9O1xuICBpZiAoaW1wID49IDMpIHJldHVybiB7IGxldmVsOiAnbG93JywgICAgICAgdGV4dDogJ0xvdycgICAgICAgfTtcbiAgcmV0dXJuIHsgbGV2ZWw6ICd2ZXJ5LWxvdycsIHRleHQ6ICdWZXJ5IExvdycgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QWNoaWV2ZW1lbnRSZWFzb25pbmcoYWNoSWQsIGRhdGEsIGFjaCkge1xuICBpZiAoZGF0YS5hY2hpZXZlbWVudF9yZWNvbW1lbmRhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShkYXRhLmFjaGlldmVtZW50X3JlY29tbWVuZGF0aW9ucykpIHtcbiAgICBjb25zdCByZWMgPSBkYXRhLmFjaGlldmVtZW50X3JlY29tbWVuZGF0aW9ucy5maW5kKHIgPT4gci5pZCA9PT0gYWNoSWQpO1xuICAgIGlmIChyZWMgJiYgcmVjLnJlYXNvbmluZykgcmV0dXJuIHJlYy5yZWFzb25pbmc7XG4gIH1cbiAgY29uc3QgcmVsZXZhbnRGb3IgPSAoYWNoLnJlbGV2YW50X2ZvciB8fCBbXSkuam9pbignLCAnKTtcbiAgaWYgKGRhdGEucmVjb21tZW5kZWRfYWNoaWV2ZW1lbnRzICYmIGRhdGEucmVjb21tZW5kZWRfYWNoaWV2ZW1lbnRzLmluY2x1ZGVzKGFjaElkKSkge1xuICAgIHJldHVybiByZWxldmFudEZvclxuICAgICAgPyBgUmVjb21tZW5kZWQgZm9yIHRoaXMgcm9sZS4gUmVsZXZhbnQgZm9yOiAke3JlbGV2YW50Rm9yfS5gXG4gICAgICA6ICdSZWNvbW1lbmRlZCBieSBBSSBhcyByZWxldmFudCB0byB0aGlzIHJvbGUuJztcbiAgfVxuICByZXR1cm4gcmVsZXZhbnRGb3JcbiAgICA/IGBSZWxldmFudCBmb3I6ICR7cmVsZXZhbnRGb3J9LiBOb3Qgc3BlY2lmaWNhbGx5IGhpZ2hsaWdodGVkIGZvciB0aGlzIHJvbGUuYFxuICAgIDogJ05vdCBzcGVjaWZpY2FsbHkgaGlnaGxpZ2h0ZWQgZm9yIHRoaXMgcm9sZSBiYXNlZCBvbiBqb2IgcmVxdWlyZW1lbnRzLic7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRmFsbGJhY2sgcXVlc3Rpb24gZ2VuZXJhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGJ1aWxkRmFsbGJhY2tQb3N0QW5hbHlzaXNRdWVzdGlvbnMoZGF0YSkge1xuICBjb25zdCBxdWVzdGlvbnMgPSBbXTtcblxuICBpZiAoZGF0YS5yb2xlX2xldmVsKSB7XG4gICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgcXVlc3Rpb246IGBUaGlzIHJvbGUgYXBwZWFycyB0byBiZSBhdCAke2RhdGEucm9sZV9sZXZlbH0gbGV2ZWwuIFNob3VsZCBJIGVtcGhhc2l6ZSB5b3VyIG1vc3Qgc2VuaW9yIGV4cGVyaWVuY2VzIG9yIGluY2x1ZGUgYSBicm9hZGVyIHJhbmdlIHRvIHNob3cgY2FyZWVyIHByb2dyZXNzaW9uP2AsXG4gICAgICB0eXBlOiAnZXhwZXJpZW5jZV9sZXZlbCcsXG4gICAgICBjaG9pY2VzOiBbJ0VtcGhhc2l6ZSBtb3N0IHNlbmlvcicsICdCcm9hZGVyIGNhcmVlciBwcm9ncmVzc2lvbicsICdMZXQgeW91IGRlY2lkZSBiYXNlZCBvbiBhbmFseXNpcyddLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGRhdGEucmVxdWlyZWRfc2tpbGxzICYmIGRhdGEucmVxdWlyZWRfc2tpbGxzLnNvbWUoc2tpbGwgPT5cbiAgICAgIHNraWxsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2xlYWRlcnNoaXAnKSB8fFxuICAgICAgc2tpbGwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnbWFuYWdlbWVudCcpIHx8XG4gICAgICBza2lsbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0ZWFtJykpKSB7XG4gICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgcXVlc3Rpb246ICdUaGlzIHJvbGUgaGFzIGxlYWRlcnNoaXAgY29tcG9uZW50cy4gV291bGQgeW91IHByZWZlciBtZSB0byBlbXBoYXNpemUgeW91ciBtYW5hZ2VtZW50IGV4cGVyaWVuY2Ugb3IgZm9jdXMgbW9yZSBvbiB5b3VyIHRlY2huaWNhbCBjb250cmlidXRpb25zPycsXG4gICAgICB0eXBlOiAnbGVhZGVyc2hpcF9mb2N1cycsXG4gICAgICBjaG9pY2VzOiBbJ0VtcGhhc2l6ZSBtYW5hZ2VtZW50JywgJ0ZvY3VzIG9uIHRlY2huaWNhbCcsICdCYWxhbmNlIGJvdGggZXF1YWxseSddLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGRhdGEuZG9tYWluKSB7XG4gICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgcXVlc3Rpb246IGBUaGUgcm9sZSBpcyBpbiAke2RhdGEuZG9tYWlufS4gRG8geW91IGhhdmUgcGFydGljdWxhciBwcm9qZWN0cyBvciBhY2hpZXZlbWVudHMgaW4gdGhpcyBkb21haW4gdGhhdCB5b3UnZCBsaWtlIG1lIHRvIGhpZ2hsaWdodD9gLFxuICAgICAgdHlwZTogJ2RvbWFpbl9leHBlcnRpc2UnLFxuICAgICAgY2hvaWNlczogWydIaWdobGlnaHQgZG9tYWluLXNwZWNpZmljIGFjaGlldmVtZW50cycsICdVc2UgYWxsIGF2YWlsYWJsZSBleHBlcmllbmNlJywgJ1ByaW9yaXRpemUgbW9zdCByZWNlbnQgd29yayddLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGRhdGEuY29tcGFueSkge1xuICAgIHF1ZXN0aW9ucy5wdXNoKHtcbiAgICAgIHF1ZXN0aW9uOiBgRm9yICR7ZGF0YS5jb21wYW55fSwgd291bGQgeW91IGxpa2UgbWUgdG8gdGFpbG9yIGVtcGhhc2lzIHRvd2FyZCB0aGVpciBjdWx0dXJlIGFuZCB2YWx1ZXM/IElmIHNvLCB3aGF0IHNob3VsZCBJIHByaW9yaXRpemU/YCxcbiAgICAgIHR5cGU6ICdjb21wYW55X2N1bHR1cmUnLFxuICAgICAgY2hvaWNlczogWydSZXNlYXJjaC1kcml2ZW4gLyBhY2FkZW1pYycsICdJbmR1c3RyeSAvIGNvbW1lcmNpYWwgaW1wYWN0JywgJ0lubm92YXRpb24gLyBzdGFydHVwJywgJ1VzZSBjdWx0dXJhbCBpbmRpY2F0b3JzIGZyb20gam9iIGRlc2NyaXB0aW9uJ10sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcXVlc3Rpb25zO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgRVMgbW9kdWxlIGV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICBnZXRFeHBlcmllbmNlUmVjb21tZW5kYXRpb24sIGdldENvbmZpZGVuY2VMZXZlbCwgZ2V0RXhwZXJpZW5jZVJlYXNvbmluZyxcbiAgZ2V0U2tpbGxSZWNvbW1lbmRhdGlvbiwgZ2V0U2tpbGxDb25maWRlbmNlLCBnZXRTa2lsbFJlYXNvbmluZyxcbiAgZ2V0QWNoaWV2ZW1lbnRSZWNvbW1lbmRhdGlvbiwgZ2V0QWNoaWV2ZW1lbnRDb25maWRlbmNlLCBnZXRBY2hpZXZlbWVudFJlYXNvbmluZyxcbiAgYnVpbGRGYWxsYmFja1Bvc3RBbmFseXNpc1F1ZXN0aW9ucyxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi91aS1oZWxwZXJzLmpzXG4gKiBMaWdodHdlaWdodCBET00gaGVscGVyczogdG9hc3RzLCBhbGVydC9jb25maXJtIG1vZGFscywgY2hhdCB0b2dnbGUsIGFuZFxuICogd29ya2Zsb3ctc3RhZ2UgYWN0aW9uLWJ1dHRvbiBtYW5hZ2VtZW50LlxuICpcbiAqIERFUEVOREVOQ0lFUzogdWktY29yZS5qcyBleHBvcnRzICh0cmFwRm9jdXMsIHJlc3RvcmVGb2N1cywgc2V0SW5pdGlhbEZvY3VzLFxuICogICAgICAgICAgICAgICBwdXNoRm9jdXNTdGFjaykgYXZhaWxhYmxlIG9uIGdsb2JhbFRoaXMgYXQgcnVudGltZS5cbiAqL1xuXG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIsIEdFTkVSQVRJT05fU1RBVEVfRVZFTlQgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEFsZXJ0IG1vZGFsIChpbmZvcm1hdGlvbmFsIFx1MjAxNCBzaW5nbGUgT0sgYnV0dG9uKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIF9zZXRNb2RhbFRleHQoZWwsIG1lc3NhZ2UpIHtcbiAgZWwudGV4dENvbnRlbnQgPSAnJztcbiAgY29uc3QgcGFydHMgPSBTdHJpbmcobWVzc2FnZSB8fCAnJykuc3BsaXQoJ1xcbicpO1xuICBwYXJ0cy5mb3JFYWNoKChwYXJ0LCBpKSA9PiB7XG4gICAgZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGFydCkpO1xuICAgIGlmIChpIDwgcGFydHMubGVuZ3RoIC0gMSkgZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzaG93QWxlcnRNb2RhbCh0aXRsZSwgbWVzc2FnZSkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWxlcnQtbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9IHRpdGxlO1xuICBfc2V0TW9kYWxUZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbGVydC1tb2RhbC1tZXNzYWdlJyksIG1lc3NhZ2UpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWxlcnQtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAvLyBwdXNoRm9jdXNTdGFjayAoR0FQLTE5NykgcGFpcnMgd2l0aCB0cmFwRm9jdXMvcmVzdG9yZUZvY3VzIGJlbG93IFx1MjAxNCB1c2luZ1xuICAvLyB0aGUgc2hhcmVkIGZvY3VzLXN0YWNrIG1lY2hhbmlzbSwgbm90IGEgbG9jYWwgdmFyaWFibGUsIHNvIGNsb3NlQWxlcnRNb2RhbFxuICAvLyBhbHNvIHBvcHMgdGhlIGtleWRvd24gbGlzdGVuZXIgdHJhcEZvY3VzIHJlZ2lzdGVycyBvbiBkb2N1bWVudC4gQSBwcmlvclxuICAvLyB2ZXJzaW9uIHRyYWNrZWQgaXRzIG93biBgX2FsZXJ0UHJldmlvdXNGb2N1c2AgYW5kIG5ldmVyIGNhbGxlZFxuICAvLyByZXN0b3JlRm9jdXMoKSwgd2hpY2ggbGVmdCB0aGF0IHRyYXBGb2N1cyBsaXN0ZW5lciBwZXJtYW5lbnRseSBhdHRhY2hlZFxuICAvLyBhZnRlciBldmVyeSBhbGVydCBtb2RhbCBjbG9zZS5cbiAgaWYgKHR5cGVvZiBwdXNoRm9jdXNTdGFjayA9PT0gJ2Z1bmN0aW9uJykgcHVzaEZvY3VzU3RhY2soZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gIGlmICh0eXBlb2Ygc2V0SW5pdGlhbEZvY3VzID09PSAnZnVuY3Rpb24nKSBzZXRJbml0aWFsRm9jdXMoJ2FsZXJ0LW1vZGFsLW92ZXJsYXknKTtcbiAgaWYgKHR5cGVvZiB0cmFwRm9jdXMgPT09ICdmdW5jdGlvbicpIHRyYXBGb2N1cygnYWxlcnQtbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBjbG9zZUFsZXJ0TW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbGVydC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaWYgKHR5cGVvZiByZXN0b3JlRm9jdXMgPT09ICdmdW5jdGlvbicpIHJlc3RvcmVGb2N1cygpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvbmZpcm0gbW9kYWwgKHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZS9mYWxzZSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5sZXQgX2NvbmZpcm1SZXNvbHZlID0gbnVsbDtcbmxldCBfY29uZmlybVByZXZpb3VzRm9jdXMgPSBudWxsO1xuXG5mdW5jdGlvbiBzaG93Q29uZmlybU1vZGFsKHRpdGxlLCBtZXNzYWdlLCBva0xhYmVsID0gJ09LJykge1xuICBfY29uZmlybVByZXZpb3VzRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uZmlybS1tb2RhbC10aXRsZScpLnRleHRDb250ZW50ID0gdGl0bGU7XG4gIF9zZXRNb2RhbFRleHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZpcm0tbW9kYWwtbWVzc2FnZScpLCBtZXNzYWdlKTtcbiAgY29uc3Qgb2tCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uZmlybS1tb2RhbC1vaycpO1xuICBpZiAob2tCdG4pIG9rQnRuLnRleHRDb250ZW50ID0gb2tMYWJlbDtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZpcm0tbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICBpZiAob2tCdG4pIG9rQnRuLmZvY3VzKCk7XG4gIGlmICh0eXBlb2YgdHJhcEZvY3VzID09PSAnZnVuY3Rpb24nKSB0cmFwRm9jdXMoJ2NvbmZpcm0tbW9kYWwtb3ZlcmxheScpO1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7IF9jb25maXJtUmVzb2x2ZSA9IHJlc29sdmU7IH0pO1xufVxuXG5mdW5jdGlvbiBjbG9zZUNvbmZpcm1Nb2RhbChyZXN1bHQpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZpcm0tbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGlmICh0eXBlb2YgcmVzdG9yZUZvY3VzID09PSAnZnVuY3Rpb24nKSByZXN0b3JlRm9jdXMoKTtcbiAgaWYgKF9jb25maXJtUmVzb2x2ZSkgeyBfY29uZmlybVJlc29sdmUocmVzdWx0KTsgX2NvbmZpcm1SZXNvbHZlID0gbnVsbDsgfVxuICBpZiAoX2NvbmZpcm1QcmV2aW91c0ZvY3VzICYmIHR5cGVvZiBfY29uZmlybVByZXZpb3VzRm9jdXMuZm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBfY29uZmlybVByZXZpb3VzRm9jdXMuZm9jdXMoKTtcbiAgfVxuICBfY29uZmlybVByZXZpb3VzRm9jdXMgPSBudWxsO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRvYXN0IG5vdGlmaWNhdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBzaG93VG9hc3QobWVzc2FnZSwgdHlwZSA9ICdzdWNjZXNzJywgZHVyYXRpb24gPSAzMDAwKSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2FzdC1jb250YWluZXInKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgY29uc3QgdG9hc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgdG9hc3QuY2xhc3NOYW1lID0gYHRvYXN0IHRvYXN0LSR7dHlwZX1gO1xuICB0b2FzdC50ZXh0Q29udGVudCA9IG1lc3NhZ2U7XG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0b2FzdCk7XG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7IHRvYXN0LmNsYXNzTGlzdC5hZGQoJ3RvYXN0LXNob3cnKTsgfSk7IH0pO1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICB0b2FzdC5jbGFzc0xpc3QucmVtb3ZlKCd0b2FzdC1zaG93Jyk7XG4gICAgdG9hc3QuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsICgpID0+IHRvYXN0LnJlbW92ZSgpLCB7IG9uY2U6IHRydWUgfSk7XG4gIH0sIGR1cmF0aW9uKTtcbn1cblxuZnVuY3Rpb24gcmVmcmVzaExheW91dFN0YXR1c1VJKCkge1xuICBjb25zdCBsYXlvdXRDaGlwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheW91dC1mcmVzaG5lc3MtY2hpcCcpO1xuICBjb25zdCBsYXlvdXRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5b3V0LWJ0bicpO1xuICBjb25zdCBmcmVzaG5lc3MgPSBzdGF0ZU1hbmFnZXIuZ2V0TGF5b3V0RnJlc2huZXNzKCk7XG4gIGNvbnN0IGdlbmVyYXRpb25TdGF0ZSA9IHN0YXRlTWFuYWdlci5nZXRHZW5lcmF0aW9uU3RhdGUoKTtcblxuICBpZiAobGF5b3V0Q2hpcCkge1xuICAgIGxheW91dENoaXAuc3R5bGUuZGlzcGxheSA9IGZyZXNobmVzcy5zaG93Q2hpcCA/ICcnIDogJ25vbmUnO1xuICAgIGxheW91dENoaXAuY2xhc3NOYW1lID0gYGxheW91dC1mcmVzaG5lc3MtY2hpcCAke2ZyZXNobmVzcy50b25lfWA7XG4gICAgbGF5b3V0Q2hpcC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBmcmVzaG5lc3MuYXJpYUxhYmVsIHx8ICcnKTtcbiAgICBsYXlvdXRDaGlwLmlubmVySFRNTCA9IGZyZXNobmVzcy5zaG93Q2hpcFxuICAgICAgPyBgPHNwYW4gY2xhc3M9XCJsYXlvdXQtZnJlc2huZXNzLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke2ZyZXNobmVzcy5pc0NyaXRpY2FsID8gJ1x1MjFCQicgOiAoZnJlc2huZXNzLmlzU3RhbGUgPyAnIScgOiAnXHUyNzEzJyl9PC9zcGFuPjxzcGFuIGNsYXNzPVwibGF5b3V0LWZyZXNobmVzcy1sYWJlbFwiPiR7ZnJlc2huZXNzLmxhYmVsfTwvc3Bhbj5gXG4gICAgICA6ICcnO1xuICB9XG5cbiAgaWYgKGxheW91dEJ0bikge1xuICAgIGlmIChmcmVzaG5lc3MuaXNTdGFsZSkge1xuICAgICAgbGF5b3V0QnRuLnRleHRDb250ZW50ID0gJ1x1MjFCQiBSZWdlbmVyYXRlIFByZXZpZXcnO1xuICAgICAgbGF5b3V0QnRuLnRpdGxlID0gJ1ByZXZpZXcgaXMgb3V0IG9mIGRhdGUgXHUyMDE0IHJlZ2VuZXJhdGUgYmVmb3JlIGNvbmZpcm1pbmcgbGF5b3V0JztcbiAgICB9IGVsc2UgaWYgKGdlbmVyYXRpb25TdGF0ZS5sYXlvdXRDb25maXJtZWQgfHwgZ2VuZXJhdGlvblN0YXRlLnBoYXNlID09PSAnY29uZmlybWVkJykge1xuICAgICAgbGF5b3V0QnRuLnRleHRDb250ZW50ID0gJ1x1MkIwN1x1RkUwRiBHZW5lcmF0ZSBGaW5hbCBGaWxlcyc7XG4gICAgICBsYXlvdXRCdG4udGl0bGUgPSAnTGF5b3V0IGNvbmZpcm1lZCBcdTIwMTQgcHJvZHVjZSBmaW5hbCBzdWJtaXNzaW9uLXJlYWR5IERPQ1ggYW5kIFBERiBmaWxlcyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxheW91dEJ0bi50ZXh0Q29udGVudCA9ICdcdTI3MDUgQ29uZmlybSBMYXlvdXQnO1xuICAgICAgbGF5b3V0QnRuLnRpdGxlID0gJ1N0ZXAgMiBvZiAzOiBDb25maXJtIHRoZSBsYXlvdXQgbG9va3MgcmlnaHQgYmVmb3JlIGdlbmVyYXRpbmcgZmluYWwgZmlsZXMnO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVMYXlvdXRGcmVzaG5lc3NDaGlwQ2xpY2soKSB7XG4gIGlmICh0eXBlb2YgdXBkYXRlVGFiQmFyRm9yU3RhZ2UgPT09ICdmdW5jdGlvbicpIHVwZGF0ZVRhYkJhckZvclN0YWdlKCdsYXlvdXQnKTtcbiAgaWYgKHR5cGVvZiB1cGRhdGVBY3Rpb25CdXR0b25zID09PSAnZnVuY3Rpb24nKSB1cGRhdGVBY3Rpb25CdXR0b25zKCdsYXlvdXQnKTtcbiAgaWYgKHR5cGVvZiBzd2l0Y2hUYWIgPT09ICdmdW5jdGlvbicpIHN3aXRjaFRhYignbGF5b3V0Jyk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV29ya2Zsb3ctc3RhZ2UgcHJpbWFyeSBhY3Rpb24gYnV0dG9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBbGwgc3RhZ2Utc3BlY2lmaWMgcHJpbWFyeSBhY3Rpb24gYnV0dG9uIElEcyAoZXhjbHVkZXMgcmVzZXQgd2hpY2ggaXMgYWx3YXlzIHZpc2libGUpLiAqL1xuY29uc3QgX1NUQUdFX0JVVFRPTlMgPSBbXG4gICdhbmFseXplLWJ0bicsICdyZWNvbW1lbmQtYnRuJywgJ2dlbmVyYXRlLWJ0bicsXG4gICdyZXdyaXRlLWJ0bicsICdzcGVsbC1idG4nLCAnZ2VuZXJhdGUtcHJvY2VlZC1idG4nLFxuICAnbGF5b3V0LWJ0bicsICdmaW5hbC1nZW5lcmF0ZS1wcm9jZWVkLWJ0bicsICdmaW5hbGlzZS1hY3Rpb24tYnRuJyxcbl07XG5cbi8qKiBNYXBzIGVhY2ggd29ya2Zsb3cgc3RhZ2UgdG8gaXRzIG9uZSBwcmltYXJ5IGFjdGlvbiBidXR0b24uICovXG5jb25zdCBfU1RBR0VfQlVUVE9OX01BUCA9IHtcbiAgam9iOiAgICAgICAgICAgICdhbmFseXplLWJ0bicsXG4gIGFuYWx5c2lzOiAgICAgICAncmVjb21tZW5kLWJ0bicsXG4gIGN1c3RvbWl6YXRpb25zOiAnZ2VuZXJhdGUtYnRuJyxcbiAgcmV3cml0ZTogICAgICAgICdyZXdyaXRlLWJ0bicsXG4gIHNwZWxsOiAgICAgICAgICAnc3BlbGwtYnRuJyxcbiAgZ2VuZXJhdGU6ICAgICAgICdnZW5lcmF0ZS1wcm9jZWVkLWJ0bicsXG4gIGxheW91dDogICAgICAgICAnbGF5b3V0LWJ0bicsXG4gIGZpbmFsX2dlbmVyYXRlOiAnZmluYWwtZ2VuZXJhdGUtcHJvY2VlZC1idG4nLFxuICBmaW5hbGlzZTogICAgICAgJ2ZpbmFsaXNlLWFjdGlvbi1idG4nLFxufTtcblxuLyoqXG4gKiBTaG93IG9ubHkgdGhlIHByaW1hcnkgYWN0aW9uIGJ1dHRvbiBmb3IgdGhlIGdpdmVuIHdvcmtmbG93IHN0YWdlLlxuICogUmVzZXQgaXMgYWx3YXlzIHZpc2libGUuICBBbGwgb3RoZXIgc3RhZ2UgYnV0dG9ucyBhcmUgaGlkZGVuLlxuICovXG5mdW5jdGlvbiB1cGRhdGVBY3Rpb25CdXR0b25zKHN0YWdlKSB7XG4gIGNvbnN0IGFjdGl2ZUlkID0gX1NUQUdFX0JVVFRPTl9NQVBbc3RhZ2VdIHx8IG51bGw7XG4gIF9TVEFHRV9CVVRUT05TLmZvckVhY2goaWQgPT4ge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlbCkgZWwuc3R5bGUuZGlzcGxheSA9IChpZCA9PT0gYWN0aXZlSWQpID8gJycgOiAnbm9uZSc7XG4gIH0pO1xuICByZWZyZXNoTGF5b3V0U3RhdHVzVUkoKTtcbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKEdFTkVSQVRJT05fU1RBVEVfRVZFTlQsIHJlZnJlc2hMYXlvdXRTdGF0dXNVSSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFUyBtb2R1bGUgZXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB7XG4gIHNob3dBbGVydE1vZGFsLCBjbG9zZUFsZXJ0TW9kYWwsXG4gIHNob3dDb25maXJtTW9kYWwsIGNsb3NlQ29uZmlybU1vZGFsLFxuICBzaG93VG9hc3QsXG4gIHJlZnJlc2hMYXlvdXRTdGF0dXNVSSxcbiAgaGFuZGxlTGF5b3V0RnJlc2huZXNzQ2hpcENsaWNrLFxuICB1cGRhdGVBY3Rpb25CdXR0b25zLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogU2hhcmVkIHByb3Bvc2FsLXJldmlldyByb3cgcmVuZGVyZXIsIGV4dHJhY3RlZCBmcm9tIHdlYi9oYXJ2ZXN0LmpzIHNvIHRoZVxuICogR0FQLTAxIFwiVXBkYXRlIHZpYSBBSVwiIHBhbmVsICh3ZWIvbWFzdGVyLWRhdGEtYWktdXBkYXRlLmpzKSBkb2Vzbid0XG4gKiBkdXBsaWNhdGUgb3IgZm9yayB0aGUgc2FtZSBiZWZvcmUvYWZ0ZXIgZGlmZi1yb3cgVUkgYSB0aGlyZCB0aW1lLlxuICpcbiAqIFJvdyBtYXJrdXAgdXNlcyBgZGF0YS10b2dnbGUtcmVhc29uaW5nPVwiSURcImAgYXR0cmlidXRlcyBpbnN0ZWFkIG9mIGlubGluZVxuICogYG9uY2xpY2s9XCIuLi5cImAgaGFuZGxlcnMgXHUyMDE0IHRoZSBjYWxsZXIgYXR0YWNoZXMgT05FIGRlbGVnYXRlZCBjbGlja1xuICogbGlzdGVuZXIgKGF0dGFjaFByb3Bvc2FsUm93TGlzdGVuZXJzKSByYXRoZXIgdGhhbiBlYWNoIHJvdyB3aXJpbmcgaXRzIG93blxuICogaW5saW5lIGhhbmRsZXIuIFRoaXMgbWF0dGVycyBiZWNhdXNlIGhhcnZlc3QuanMncyBvcmlnaW5hbCBpbmxpbmUtb25jbGlja1xuICogdmVyc2lvbiBjYWxsZWQgaGFydmVzdC5qcy1zcGVjaWZpYyBnbG9iYWwgZnVuY3Rpb25zIGRpcmVjdGx5OyBhIHJvd1xuICogcmVuZGVyZWQgYnkgYSBkaWZmZXJlbnQgbW9kdWxlIChtYXN0ZXItZGF0YS1haS11cGRhdGUuanMpIG11c3Qgbm90XG4gKiBzaWxlbnRseSByZWZlcmVuY2UgZnVuY3Rpb25zIHRoYXQgZG9uJ3QgZXhpc3QgdGhlcmUuXG4gKlxuICogYGlkUHJlZml4YCBrZWVwcyBlYWNoIGNhbGxlcidzIGV4aXN0aW5nIERPTS1pZCBjb252ZW50aW9uIGludGFjdCAoZS5nLlxuICogaGFydmVzdC5qcydzIGBoYXJ2ZXN0LXJvdy0qYC9gaGFydmVzdC1jaGstKmAsIHJlZmVyZW5jZWQgZWxzZXdoZXJlIGluIHRoYXRcbiAqIGZpbGUsIG5vdGFibHkgYXBwbHlIYXJ2ZXN0U2VsZWN0aW9ucykgcmF0aGVyIHRoYW4gZm9yY2luZyBhIHJlbmFtZS5cbiAqXG4gKiBQdWJsaWMgZXhwb3J0czpcbiAqICAgZXNjKHN0cilcbiAqICAgcmVuZGVyUHJvcG9zYWxSb3coaXRlbSwgb3B0cylcbiAqICAgYXR0YWNoUHJvcG9zYWxSb3dMaXN0ZW5lcnMoY29udGFpbmVyRWwsIGlkUHJlZml4LCBoYW5kbGVycylcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXNjKHN0cikge1xuICByZXR1cm4gU3RyaW5nKHN0ciA/PyAnJylcbiAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXG4gICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgb25lIHByb3Bvc2FsLXJldmlldyByb3cgKGNoZWNrYm94ICsgYmVmb3JlL2FmdGVyICsgb3B0aW9uYWxcbiAqIGNvbGxhcHNpYmxlIGRldGFpbCArIG9wdGlvbmFsIGJhZGdlcy9mbGFnIGJhbm5lcikuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGl0ZW1cbiAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtLmlkXG4gKiBAcGFyYW0ge3N0cmluZ30gaXRlbS50eXBlTGFiZWwgICAgIC0gc21hbGwgY2FwcyBsYWJlbCBhYm92ZSB0aGUgcm93IChlLmcuIHNlY3Rpb24gbmFtZSlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbaXRlbS5zb3VyY2VCYWRnZUh0bWxdXG4gKiBAcGFyYW0ge3N0cmluZ30gaXRlbS5sYWJlbCAgICAgICAgIC0gc2Vjb25kYXJ5IHN1bW1hcnkgbGluZVxuICogQHBhcmFtIHtzdHJpbmd9IFtpdGVtLm9yaWdpbmFsXSAgICAtIFwiQmVmb3JlXCIgYmxvY2sgdGV4dCAob21pdCBmb3IgYWRkLW9ubHkgcHJvcG9zYWxzKVxuICogQHBhcmFtIHtzdHJpbmd9IFtpdGVtLnByb3Bvc2VkXSAgICAtIFwiQWZ0ZXJcIiBibG9jayB0ZXh0IChhbHJlYWR5IGRpc3BsYXktcmVhZHksIG5vdCBhIHJhdyBvYmplY3QpXG4gKiBAcGFyYW0ge3N0cmluZ30gW2l0ZW0uZGV0YWlsVGV4dF0gIC0gY29sbGFwc2libGUgZGV0YWlsIChoYXJ2ZXN0OiByZWFzb25pbmc7IEdBUC0wMTogcmF0aW9uYWxlKVxuICogQHBhcmFtIHtzdHJpbmd9IFtpdGVtLmJhZGdlc0h0bWxdICAtIHByZS1yZW5kZXJlZCByaWdodC1zaWRlIGJhZGdlIEhUTUwgKGNhbGxlci1zcGVjaWZpYylcbiAqIEBwYXJhbSB7c3RyaW5nfSBbaXRlbS5mbGFnSHRtbF0gICAgLSBwcmUtcmVuZGVyZWQgYWR2aXNvcnkvd2FybmluZyBiYW5uZXIgKGUuZy4gcG9zc2libGUtZHVwbGljYXRlLCBzdGFsZSlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2l0ZW0uY2hlY2tlZF1cbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5pZFByZWZpeCAgICAgICAgICAtIHNoYXJlZCBwcmVmaXggZm9yIHJvdy9yZWFzb24vY2hlY2tib3ggaWRzLCBlLmcuICdoYXJ2ZXN0JyBvciAnbWR1J1xuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNoZWNrYm94RGF0YUF0dHJdIC0ga2ViYWItY2FzZSBkYXRhLWF0dHJpYnV0ZSBzdWZmaXgsIGUuZy4gJ2hhcnZlc3QtaWQnIG9yICdtZHUtaWQnXG4gKiAgIChOT1QgY2FtZWxDYXNlIFx1MjAxNCB0aGlzIGlzIGludGVycG9sYXRlZCB2ZXJiYXRpbSBpbnRvIGBkYXRhLSR7Y2hlY2tib3hEYXRhQXR0cn1gIGluIHRoZSBIVE1MIHN0cmluZztcbiAqICAgYSBjYW1lbENhc2UgdmFsdWUgbGlrZSAnaGFydmVzdElkJyBwcm9kdWNlcyB0aGUgbGl0ZXJhbCBhdHRyaWJ1dGUgYGRhdGEtaGFydmVzdElkYCwgd2hpY2ggdGhlIEhUTUxcbiAqICAgcGFyc2VyIGxvd2VyY2FzZXMgdG8gYGRhdGEtaGFydmVzdGlkYCBvbiBpbnNlcnRpb24sIHNpbGVudGx5IGJyZWFraW5nIGAuZGF0YXNldC5oYXJ2ZXN0SWRgIC9cbiAqICAgYFtkYXRhLWhhcnZlc3QtaWRdYCBsb29rdXBzIGVsc2V3aGVyZS4gVGhpcyBiaXQgbWFzdGVyLWRhdGEtYWktdXBkYXRlLmpzJ3Mgb3duIGZpcnN0IGRyYWZ0LilcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5hcmlhTGFiZWxTdWZmaXhdICAtIGFwcGVuZGVkIHRvIHRoZSBjaGVja2JveCdzIGFyaWEtbGFiZWwgYWZ0ZXIgYGxhYmVsYCAoZS5nLiBkdXBsaWNhdGUvZmxhZyB0ZXh0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUHJvcG9zYWxSb3coaXRlbSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCA9ICdwcm9wb3NhbCcsXG4gICAgY2hlY2tib3hEYXRhQXR0ciA9ICdwcm9wb3NhbC1pZCcsXG4gICAgYXJpYUxhYmVsU3VmZml4ID0gJycsXG4gIH0gPSBvcHRzO1xuXG4gIGNvbnN0IGNoZWNrZWQgPSBpdGVtLmNoZWNrZWQgPyAnIGNoZWNrZWQnIDogJyc7XG4gIGNvbnN0IHJvd0lkID0gYCR7aWRQcmVmaXh9LXJvdy0ke2VzYyhpdGVtLmlkKX1gO1xuICBjb25zdCByZWFzb25JZCA9IGAke2lkUHJlZml4fS1yZWFzb24tJHtlc2MoaXRlbS5pZCl9YDtcbiAgY29uc3QgY2hlY2tib3hJZCA9IGAke2lkUHJlZml4fS1jaGstJHtlc2MoaXRlbS5pZCl9YDtcbiAgY29uc3QgYXJpYUxhYmVsID0gZXNjKGAke2l0ZW0ubGFiZWwgfHwgJyd9JHthcmlhTGFiZWxTdWZmaXh9YCk7XG5cbiAgY29uc3QgaGFzRGV0YWlsID0gQm9vbGVhbihpdGVtLmRldGFpbFRleHQpO1xuICBjb25zdCBkZXRhaWxUb2dnbGUgPSBoYXNEZXRhaWxcbiAgICA/IGA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLXRvZ2dsZS1yZWFzb25pbmc9XCIke2VzYyhpdGVtLmlkKX1cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWNvbnRyb2xzPVwiJHtyZWFzb25JZH1cIiBzdHlsZT1cImZvbnQtc2l6ZTowLjc1ZW07YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2NvbG9yOnZhcigtLWN2LWdyYXktNTAwKTtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjAgNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIiB0aXRsZT1cIlRvZ2dsZSBkZXRhaWxzXCI+XHVEODNEXHVEQ0FDPC9idXR0b24+YFxuICAgIDogJyc7XG4gIGNvbnN0IGRldGFpbEJsb2NrID0gaGFzRGV0YWlsXG4gICAgPyBgPGRpdiBpZD1cIiR7cmVhc29uSWR9XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7bWFyZ2luLXRvcDo2cHg7cGFkZGluZzo4cHggMTBweDtiYWNrZ3JvdW5kOnZhcigtLWN2LWJnLWxpZ2h0KTtib3JkZXItbGVmdDozcHggc29saWQgdmFyKC0tY3Ytc2xhdGUtNDAwKTtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC44MmVtO2NvbG9yOnZhcigtLWN2LXRleHQtbXV0ZWQpO2xpbmUtaGVpZ2h0OjEuNTtcIj4ke2VzYyhpdGVtLmRldGFpbFRleHQpfTwvZGl2PmBcbiAgICA6ICcnO1xuXG4gIHJldHVybiBgXG4gICAgPHRyIGlkPVwiJHtyb3dJZH1cIiBzdHlsZT1cImJvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWN2LWJnLXN1YnRsZSk7XCI+XG4gICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjEwcHggMTJweDt3aWR0aDozNnB4O3ZlcnRpY2FsLWFsaWduOnRvcDtcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiJHtjaGVja2JveElkfVwiIGRhdGEtJHtjaGVja2JveERhdGFBdHRyfT1cIiR7ZXNjKGl0ZW0uaWQpfVwiJHtjaGVja2VkfVxuICAgICAgICAgIGFyaWEtbGFiZWw9XCIke2FyaWFMYWJlbH1cIlxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTZweDtoZWlnaHQ6MTZweDtjdXJzb3I6cG9pbnRlcjttYXJnaW4tdG9wOjJweDtcIj5cbiAgICAgIDwvdGQ+XG4gICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjEwcHggMTJweDtcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7XCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6MTttaW4td2lkdGg6MjAwcHg7XCI+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuNzhlbTtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tY3YtdGV4dC1zZWNvbmRhcnkpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzowLjA0ZW07bWFyZ2luLWJvdHRvbTo0cHg7XCI+XG4gICAgICAgICAgICAgICR7ZXNjKGl0ZW0udHlwZUxhYmVsIHx8ICcnKX0ke2l0ZW0uc291cmNlQmFkZ2VIdG1sIHx8ICcnfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuODdlbTtjb2xvcjp2YXIoLS1jdi1zbGF0ZS00MDApO21hcmdpbi1ib3R0b206NnB4O1wiPiR7ZXNjKGl0ZW0ubGFiZWwgfHwgJycpfTwvZGl2PlxuICAgICAgICAgICAgJHtpdGVtLmZsYWdIdG1sIHx8ICcnfVxuICAgICAgICAgICAgJHtpdGVtLm9yaWdpbmFsID8gYFxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206NnB4O1wiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuNzJlbTtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tY3YtZ3JheS01MDApO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzowLjAzZW07bWFyZ2luLWJvdHRvbToycHg7XCI+QmVmb3JlPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOnZhcigtLWN2LWdyYXktNTAwKTtiYWNrZ3JvdW5kOnZhcigtLWN2LWJnLWxpZ2h0KTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjZweCA4cHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkIHZhcigtLWN2LWdyYXktMzAwKTtsaW5lLWhlaWdodDoxLjU7XCI+JHtlc2MoaXRlbS5vcmlnaW5hbCl9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gIDogJyd9XG4gICAgICAgICAgICAke2l0ZW0ucHJvcG9zZWQgPyBgXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTo0cHg7XCI+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC43MmVtO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS1jdi1ncmF5LTUwMCk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOjAuMDNlbTttYXJnaW4tYm90dG9tOjJweDtcIj5BZnRlcjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtjb2xvcjp2YXIoLS1jdi10ZXh0LXByaW1hcnkpO2JhY2tncm91bmQ6dmFyKC0tY3Ytc3VjY2Vzcy1iZyk7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzo2cHggOHB4O2JvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1jdi1zdWNjZXNzLWJvcmRlcik7bGluZS1oZWlnaHQ6MS41O1wiPiR7ZXNjKGl0ZW0ucHJvcG9zZWQpfTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+YCA6ICcnfVxuICAgICAgICAgICAgJHtkZXRhaWxCbG9ja31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2FsaWduLWl0ZW1zOmZsZXgtZW5kO2ZsZXgtc2hyaW5rOjA7XCI+XG4gICAgICAgICAgICAke2l0ZW0uYmFkZ2VzSHRtbCB8fCAnJ31cbiAgICAgICAgICAgICR7ZGV0YWlsVG9nZ2xlfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5gO1xufVxuXG4vKipcbiAqIEF0dGFjaCBvbmUgZGVsZWdhdGVkIGNsaWNrIGxpc3RlbmVyIHRvIGBjb250YWluZXJFbGAgY292ZXJpbmcgZXZlcnlcbiAqIGBbZGF0YS10b2dnbGUtcmVhc29uaW5nXWAgZWxlbWVudCByZW5kZXJlZCBieSByZW5kZXJQcm9wb3NhbFJvdyB3aXRoIHRoZVxuICogbWF0Y2hpbmcgYGlkUHJlZml4YC4gR3VhcmRzIGFnYWluc3QgZG91YmxlLWF0dGFjaGluZyBhY3Jvc3MgcmVwZWF0ZWRcbiAqIGNhbGxzIChlLmcuIGEgdGFiIGJlaW5nIHJlLXBvcHVsYXRlZCkgdmlhIGEgbWFya2VyIG9uIGBjb250YWluZXJFbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hQcm9wb3NhbFJvd0xpc3RlbmVycyhjb250YWluZXJFbCwgaWRQcmVmaXgsIGhhbmRsZXJzID0ge30pIHtcbiAgaWYgKCFjb250YWluZXJFbCkgcmV0dXJuO1xuICBjb25zdCBndWFyZEtleSA9IGBwcm9wb3NhbExpc3RlbmVyc0F0dGFjaGVkXyR7aWRQcmVmaXh9YDtcbiAgaWYgKGNvbnRhaW5lckVsLmRhdGFzZXRbZ3VhcmRLZXldKSByZXR1cm47XG4gIGNvbnRhaW5lckVsLmRhdGFzZXRbZ3VhcmRLZXldID0gJzEnO1xuXG4gIGNvbnRhaW5lckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdG9nZ2xlID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZS1yZWFzb25pbmddJyk7XG4gICAgaWYgKCF0b2dnbGUpIHJldHVybjtcbiAgICBjb25zdCBpZCA9IHRvZ2dsZS5kYXRhc2V0LnRvZ2dsZVJlYXNvbmluZztcbiAgICBjb25zdCByZWFzb25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2lkUHJlZml4fS1yZWFzb24tJHtpZH1gKTtcbiAgICBpZiAocmVhc29uRWwpIHtcbiAgICAgIGNvbnN0IG5vd1Zpc2libGUgPSByZWFzb25FbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZSc7XG4gICAgICByZWFzb25FbC5zdHlsZS5kaXNwbGF5ID0gbm93VmlzaWJsZSA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgICB0b2dnbGUuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgU3RyaW5nKG5vd1Zpc2libGUpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVycy5vblRvZ2dsZVJlYXNvbmluZyA9PT0gJ2Z1bmN0aW9uJykgaGFuZGxlcnMub25Ub2dnbGVSZWFzb25pbmcoaWQpO1xuICB9KTtcbn1cbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL2xsbS1sb2cuanNcbiAqIEZldGNoZXMgcmF3IExMTSBpbnRlcmFjdGlvbiBsb2cgZW50cmllcyBmcm9tIC9hcGkvbGxtLWxvZyBhbmQgZGlzcGxheXNcbiAqIHRoZW0gaW4gdGhlIENvbnZlcnNhdGlvbiBwYW5lbCBhcyBjb2xsYXBzaWJsZSB0cmFuc2NyaXB0IGVudHJpZXMuXG4gKlxuICogRWFjaCBMTE0gY2FsbCBzaG93czpcbiAqICAgLSBIZWFkZXI6IHRpbWVzdGFtcCBhbmQgbWVzc2FnZS1jb3VudCBzdW1tYXJ5XG4gKiAgIC0gUHJvbXB0IHNlY3Rpb246IGFsbCBtZXNzYWdlcyBzZW50IChyb2xlLXByZWZpeGVkKSwgY29sbGFwc2libGUgd2hlbiBsb25nXG4gKiAgIC0gUmVzcG9uc2Ugc2VjdGlvbjogcmF3IExMTSByZXNwb25zZSwgY29sbGFwc2libGUgd2hlbiBsb25nXG4gKlxuICogREVQRU5ERU5DSUVTIChnbG9iYWxUaGlzKTpcbiAqICAgLSBhcHBlbmRNZXNzYWdlSHRtbCAgKG1lc3NhZ2UtcXVldWUuanMpXG4gKiAgIC0gZ2V0U2Vzc2lvbklkRnJvbVVSTCAoYXBpLWNsaWVudC5qcylcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgeyBnZXRTZXNzaW9uSWRGcm9tVVJMIH0gZnJvbSAnLi9hcGktY2xpZW50LmpzJztcblxuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdsbG0tbG9nJyk7XG5cbi8vIEN1cnNvciB0cmFja3MgdGhlIG5leHQgaW5kZXggdG8gZmV0Y2ggZnJvbSAvYXBpL2xsbS1sb2cuXG4vLyBJbmNyZW1lbnQgYWZ0ZXIgZWFjaCBzdWNjZXNzZnVsIGZldGNoIGJ5IGB0b3RhbGAgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLlxubGV0IF9sbG1Mb2dDdXJzb3IgPSAwO1xuXG4vKiogUmVzZXQgdGhlIGN1cnNvciB0byAwIChjYWxsIHdoZW4gYSBuZXcgc2Vzc2lvbiBpcyBsb2FkZWQpLiAqL1xuZnVuY3Rpb24gcmVzZXRMbG1Mb2dDdXJzb3IoKSB7XG4gIF9sbG1Mb2dDdXJzb3IgPSAwO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvbGxhcHNpYmxlIEhUTUwgYnVpbGRlciAobWlycm9ycyBfbWFrZUNvbGxhcHNpYmxlQ29udGVudCBpbiBtZXNzYWdlLXF1ZXVlLmpzKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IF9MT0dfQ09MTEFQU0VfTElORVMgPSA4O1xuY29uc3QgX0xPR19DT0xMQVBTRV9DSEFSUyA9IDQ4MDtcblxuLyoqXG4gKiBXcmFwIGB0ZXh0YCBpbiBhIGNvbGxhcHNpYmxlIDxwcmU+IGJsb2NrIHdoZW4gaXQgZXhjZWVkcyB0aGUgdGhyZXNob2xkLlxuICogUmV0dXJucyBhbiBIVE1MIHN0cmluZyByZWFkeSBmb3IgaW5zZXJ0aW9uIHZpYSBpbm5lckhUTUwuXG4gKi9cbmZ1bmN0aW9uIF9jb2xsYXBzaWJsZVByZSh0ZXh0KSB7XG4gIGNvbnN0IGVzY2FwZWQgPSBlc2NhcGVIdG1sKHRleHQpO1xuICBjb25zdCBsaW5lcyAgID0gdGV4dC5zcGxpdCgnXFxuJyk7XG5cbiAgaWYgKGxpbmVzLmxlbmd0aCA8PSBfTE9HX0NPTExBUFNFX0xJTkVTICYmIHRleHQubGVuZ3RoIDw9IF9MT0dfQ09MTEFQU0VfQ0hBUlMpIHtcbiAgICByZXR1cm4gYDxwcmUgY2xhc3M9XCJsbG0tbG9nLXRleHRcIj4ke2VzY2FwZWR9PC9wcmU+YDtcbiAgfVxuXG4gIGNvbnN0IHByZXZpZXdUZXh0ID0gbGluZXMuc2xpY2UoMCwgX0xPR19DT0xMQVBTRV9MSU5FUykuam9pbignXFxuJyk7XG4gIGNvbnN0IG92ZXJmbG93ICAgID0gbGluZXMubGVuZ3RoIC0gX0xPR19DT0xMQVBTRV9MSU5FUztcbiAgY29uc3QgaWQgICAgICAgICAgPSBgbGxtbG9nLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA3KX1gO1xuICBjb25zdCBsYWJlbCAgICAgICA9IGBTaG93ICR7b3ZlcmZsb3d9IG1vcmUgbGluZSR7b3ZlcmZsb3cgPT09IDEgPyAnJyA6ICdzJ31cdTIwMjZgO1xuXG4gIHJldHVybiBgXG4gICAgPHByZSBjbGFzcz1cImxsbS1sb2ctdGV4dCBtc2ctcHJldmlld1wiIGlkPVwiJHtpZH0tcHJldmlld1wiPiR7ZXNjYXBlSHRtbChwcmV2aWV3VGV4dCl9XHUyMDI2PC9wcmU+XG4gICAgPHByZSBjbGFzcz1cImxsbS1sb2ctdGV4dCBtc2ctZnVsbFwiICAgIGlkPVwiJHtpZH0tZnVsbFwiIHN0eWxlPVwiZGlzcGxheTpub25lXCI+JHtlc2NhcGVkfTwvcHJlPlxuICAgIDxidXR0b24gY2xhc3M9XCJtc2ctdG9nZ2xlLWJ0blwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgb25jbGljaz1cIihmdW5jdGlvbihidG4pe1xuICAgICAgICB2YXIgcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnJHtpZH0tcHJldmlldycpLFxuICAgICAgICAgICAgZj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnJHtpZH0tZnVsbCcpO1xuICAgICAgICBpZihmLnN0eWxlLmRpc3BsYXk9PT0nbm9uZScpe1xuICAgICAgICAgIHAuc3R5bGUuZGlzcGxheT0nbm9uZSc7IGYuc3R5bGUuZGlzcGxheT0nYmxvY2snOyBidG4udGV4dENvbnRlbnQ9J1Nob3cgbGVzcyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcC5zdHlsZS5kaXNwbGF5PScnOyBmLnN0eWxlLmRpc3BsYXk9J25vbmUnOyBidG4udGV4dENvbnRlbnQ9JyR7bGFiZWx9JztcbiAgICAgICAgfVxuICAgICAgfSkodGhpcylcIj4ke2xhYmVsfTwvYnV0dG9uPmA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVuZGVyIG9uZSBpbnRlcmFjdGlvbiBpbnRvIHRoZSBjb252ZXJzYXRpb24gcGFuZWxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBfcmVuZGVySW50ZXJhY3Rpb24oaXgpIHtcbiAgY29uc3QgY29udmVyc2F0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnZlcnNhdGlvbicpO1xuICBpZiAoIWNvbnZlcnNhdGlvbikgcmV0dXJuO1xuXG4gIGNvbnN0IHRzID0gaXgudGltZXN0YW1wXG4gICAgPyBuZXcgRGF0ZShpeC50aW1lc3RhbXApLnRvTG9jYWxlVGltZVN0cmluZyhbXSwgeyBob3VyOiAnMi1kaWdpdCcsIG1pbnV0ZTogJzItZGlnaXQnLCBzZWNvbmQ6ICcyLWRpZ2l0JyB9KVxuICAgIDogJyc7XG5cbiAgY29uc3QgbXNncyAgICAgPSBBcnJheS5pc0FycmF5KGl4Lm1lc3NhZ2VzKSA/IGl4Lm1lc3NhZ2VzIDogW107XG4gIGNvbnN0IG1zZ0NvdW50ID0gbXNncy5sZW5ndGg7XG5cbiAgLy8gQnVpbGQgZm9ybWF0dGVkIHByb21wdCB0ZXh0OiBlYWNoIG1lc3NhZ2Ugb24gaXRzIG93biBsYWJlbGxlZCBibG9ja1xuICBjb25zdCBwcm9tcHRUZXh0ID0gbXNnc1xuICAgIC5tYXAobSA9PiBgWyR7KG0ucm9sZSB8fCAndW5rbm93bicpLnRvVXBwZXJDYXNlKCl9XVxcbiR7bS5jb250ZW50IHx8ICcnfWApXG4gICAgLmpvaW4oJ1xcblxcblx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxcblxcbicpO1xuXG4gIGNvbnN0IHJlc3BvbnNlVGV4dCA9IHR5cGVvZiBpeC5yZXNwb25zZSA9PT0gJ3N0cmluZycgPyBpeC5yZXNwb25zZSA6ICcnO1xuXG4gIGNvbnN0IGh0bWwgPSBgXG4gICAgPGRpdiBjbGFzcz1cImxsbS1sb2ctaGVhZGVyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImxsbS1sb2ctaWNvblwiPlx1RDgzRVx1REQxNjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibGxtLWxvZy1sYWJlbFwiPkxMTSBJbnRlcmFjdGlvbjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibGxtLWxvZy1tZXRhXCI+JHttc2dDb3VudH0gbWVzc2FnZSR7bXNnQ291bnQgPT09IDEgPyAnJyA6ICdzJ308L3NwYW4+XG4gICAgICAke3RzID8gYDxzcGFuIGNsYXNzPVwibGxtLWxvZy10c1wiPiR7ZXNjYXBlSHRtbCh0cyl9PC9zcGFuPmAgOiAnJ31cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibGxtLWxvZy1zZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGxtLWxvZy1zZWN0aW9uLWxhYmVsXCI+UHJvbXB0PC9kaXY+XG4gICAgICAke19jb2xsYXBzaWJsZVByZShwcm9tcHRUZXh0KX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibGxtLWxvZy1zZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGxtLWxvZy1zZWN0aW9uLWxhYmVsXCI+UmVzcG9uc2U8L2Rpdj5cbiAgICAgICR7X2NvbGxhcHNpYmxlUHJlKHJlc3BvbnNlVGV4dCl9XG4gICAgPC9kaXY+YDtcblxuICBjb25zdCBtZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG1lc3NhZ2UuY2xhc3NOYW1lID0gJ21lc3NhZ2UgbGxtLXJhdyc7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgY29udGVudC5jbGFzc05hbWUgPSAnY29udGVudCc7XG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgbWVzc2FnZS5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgY29udmVyc2F0aW9uLmFwcGVuZENoaWxkKG1lc3NhZ2UpO1xuICBjb252ZXJzYXRpb24uc2Nyb2xsVG9wID0gY29udmVyc2F0aW9uLnNjcm9sbEhlaWdodDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWMgQVBJXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBGZXRjaCBMTE0gaW50ZXJhY3Rpb24gbG9nIGVudHJpZXMgYWRkZWQgc2luY2UgdGhlIGxhc3QgY2FsbCBhbmQgZGlzcGxheVxuICogZWFjaCBvbmUgaW4gdGhlIENvbnZlcnNhdGlvbiBwYW5lbC4gIFNhZmUgdG8gY2FsbCBhZnRlciBldmVyeSBiYWNrZW5kXG4gKiBvcGVyYXRpb24gdGhhdCBtYXkgdHJpZ2dlciBMTE0gY2FsbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQW5kRGlzcGxheUxsbUxvZygpIHtcbiAgY29uc3Qgc2Vzc2lvbklkID0gZ2V0U2Vzc2lvbklkRnJvbVVSTCgpO1xuICBpZiAoIXNlc3Npb25JZCkgcmV0dXJuO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICBgL2FwaS9sbG0tbG9nP3Nlc3Npb25faWQ9JHtlbmNvZGVVUklDb21wb25lbnQoc2Vzc2lvbklkKX0mc2luY2U9JHtfbGxtTG9nQ3Vyc29yfWAsXG4gICAgKTtcbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgbG9nLndhcm4oJ2xsbS1sb2cgZmV0Y2ggZmFpbGVkJywgcmVzLnN0YXR1cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgICAgICAgICA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgY29uc3QgaW50ZXJhY3Rpb25zID0gQXJyYXkuaXNBcnJheShkYXRhLmludGVyYWN0aW9ucykgPyBkYXRhLmludGVyYWN0aW9ucyA6IFtdO1xuXG4gICAgZm9yIChjb25zdCBpeCBvZiBpbnRlcmFjdGlvbnMpIHtcbiAgICAgIF9yZW5kZXJJbnRlcmFjdGlvbihpeCk7XG4gICAgfVxuXG4gICAgLy8gQWR2YW5jZSBjdXJzb3IgdG8gdGhlIG5ldyB0b3RhbCBzbyB0aGUgbmV4dCBjYWxsIGZldGNoZXMgb25seSBuZXcgZW50cmllcy5cbiAgICBpZiAodHlwZW9mIGRhdGEudG90YWwgPT09ICdudW1iZXInKSB7XG4gICAgICBfbGxtTG9nQ3Vyc29yID0gZGF0YS50b3RhbDtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcignZmV0Y2hBbmREaXNwbGF5TGxtTG9nIGVycm9yOicsIGVycik7XG4gIH1cbn1cblxuZXhwb3J0IHsgZmV0Y2hBbmREaXNwbGF5TGxtTG9nLCByZXNldExsbUxvZ0N1cnNvciB9O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvYXV0aC1wcm92aWRlci5qc1xuICogQ29waWxvdCAvIEdpdEh1YiBPQXV0aCBhdXRoIGZsb3csIGJhZGdlIHVwZGF0ZXMsIGFuZCBwcm92aWRlciBsYWJlbCBmb3JtYXR0aW5nLlxuICpcbiAqIERFUEVOREVOQ0lFUzpcbiAqICAgLSBjb25maXJtRGlhbG9nIGZyb20gdWktY29yZS5qcyAob24gZ2xvYmFsVGhpcylcbiAqICAgLSBzZXRJbml0aWFsRm9jdXMsIHRyYXBGb2N1cywgcmVzdG9yZUZvY3VzIGZyb20gdWktY29yZS5qcyAob24gZ2xvYmFsVGhpcylcbiAqICAgLSB1cGRhdGVBdXRoQmFkZ2UgKHNlbGYtcmVmZXJlbmNlOyBleHBvcnRlZCB0byBnbG9iYWxUaGlzKVxuICogICAtIGdldFByb3ZpZGVySW5mbyBmcm9tIHByb3ZpZGVyLWluZm8uanMgKGltcG9ydGVkIGRpcmVjdGx5KVxuICovXG5cbmltcG9ydCB7IGdldFByb3ZpZGVySW5mbyB9IGZyb20gJy4vcHJvdmlkZXItaW5mby5qcyc7XG5cbmxldCBfYXV0aFBvbGxUaW1lciA9IG51bGw7XG5cbmZ1bmN0aW9uIGZvcm1hdFByb3ZpZGVyTGFiZWwocHJvdmlkZXIpIHtcbiAgaWYgKCFwcm92aWRlciB8fCB0eXBlb2YgcHJvdmlkZXIgIT09ICdzdHJpbmcnKSByZXR1cm4gJ1Byb3ZpZGVyJztcbiAgY29uc3QgYWxpYXNlcyA9IHtcbiAgICBvcGVuYWk6ICdPcGVuQUknLFxuICAgICdjb3BpbG90LW9hdXRoJzogJ0NvcGlsb3QgT0F1dGggKGRlcHJlY2F0ZWQpJyxcbiAgICBjb3BpbG90OiAnQ29waWxvdCAoZGVwcmVjYXRlZCknLFxuICAgIGdpdGh1YjogJ0dpdEh1YiBNb2RlbHMgKGRlcHJlY2F0ZWQpJyxcbiAgICAnY29waWxvdC1zZGsnOiAnQ29waWxvdCBTREsgKHJlY29tbWVuZGVkKScsXG4gIH07XG4gIGlmIChhbGlhc2VzW3Byb3ZpZGVyXSkgcmV0dXJuIGFsaWFzZXNbcHJvdmlkZXJdO1xuICByZXR1cm4gcHJvdmlkZXJcbiAgICAuc3BsaXQoL1stX1xcc10rLylcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLm1hcChwYXJ0ID0+IHBhcnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwYXJ0LnNsaWNlKDEpLnRvTG93ZXJDYXNlKCkpXG4gICAgLmpvaW4oJyAnKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQXV0aEJhZGdlKGF1dGhTdGF0dXMsIHByb3ZpZGVyID0gbnVsbCkge1xuICBjb25zdCBsZWdhY3lCYWRnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb3BpbG90LWF1dGgtYmFkZ2UnKTtcbiAgY29uc3QgbGVnYWN5SWNvbiAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aC1iYWRnZS1pY29uJyk7XG4gIGNvbnN0IGxlZ2FjeUxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1dGgtYmFkZ2UtbGFiZWwnKTtcblxuICBjb25zdCBwaWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbS1zdGF0dXMtcGlsbCcpO1xuICBjb25zdCBwaWxsSWNvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG0tc3RhdHVzLWljb24nKTtcbiAgY29uc3QgcGlsbExhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbS1zdGF0dXMtbGFiZWwnKTtcblxuICBjb25zdCBhcHBseVN0YXRlID0gKGtpbmQsIHRleHQsIGljb25UZXh0KSA9PiB7XG4gICAgaWYgKGxlZ2FjeUJhZGdlICYmIGxlZ2FjeUljb24gJiYgbGVnYWN5TGFiZWwpIHtcbiAgICAgIGxlZ2FjeUJhZGdlLmNsYXNzTGlzdC5yZW1vdmUoJ2F1dGhlbnRpY2F0ZWQnLCAndW5hdXRoZW50aWNhdGVkJywgJ3BvbGxpbmcnKTtcbiAgICAgIGxlZ2FjeUJhZGdlLmNsYXNzTGlzdC5hZGQoa2luZCk7XG4gICAgICBpZiAoa2luZCA9PT0gJ2Nvbm5lY3RlZCcgfHwga2luZCA9PT0gJ2NvbmZpZ3VyZWQnKSBsZWdhY3lCYWRnZS5jbGFzc0xpc3QuYWRkKCdhdXRoZW50aWNhdGVkJyk7XG4gICAgICBpZiAoa2luZCA9PT0gJ2Nvbm5lY3RpbmcnKSBsZWdhY3lCYWRnZS5jbGFzc0xpc3QuYWRkKCdwb2xsaW5nJyk7XG4gICAgICBpZiAoa2luZCA9PT0gJ3VuY29uZmlndXJlZCcgfHwga2luZCA9PT0gJ2F1dGgtcmVxdWlyZWQnIHx8IGtpbmQgPT09ICdyYXRlLWxpbWl0ZWQnIHx8IGtpbmQgPT09ICd1bmF2YWlsYWJsZScgfHwga2luZCA9PT0gJ2Vycm9yJykgbGVnYWN5QmFkZ2UuY2xhc3NMaXN0LmFkZCgndW5hdXRoZW50aWNhdGVkJyk7XG4gICAgICBsZWdhY3lJY29uLnRleHRDb250ZW50ID0gaWNvblRleHQ7XG4gICAgICBsZWdhY3lMYWJlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgfVxuICAgIGlmIChwaWxsICYmIHBpbGxJY29uICYmIHBpbGxMYWJlbCkge1xuICAgICAgcGlsbC5jbGFzc0xpc3QucmVtb3ZlKCdhdXRoZW50aWNhdGVkJywgJ3VuYXV0aGVudGljYXRlZCcsICdwb2xsaW5nJywgJ3VuY29uZmlndXJlZCcsICdjb25maWd1cmVkJywgJ2Nvbm5lY3RpbmcnLCAnY29ubmVjdGVkJywgJ2F1dGgtcmVxdWlyZWQnLCAncmF0ZS1saW1pdGVkJywgJ3VuYXZhaWxhYmxlJywgJ2Vycm9yJyk7XG4gICAgICBwaWxsLmNsYXNzTGlzdC5hZGQoa2luZCk7XG4gICAgICBpZiAoa2luZCA9PT0gJ2Nvbm5lY3RlZCcgfHwga2luZCA9PT0gJ2NvbmZpZ3VyZWQnKSBwaWxsLmNsYXNzTGlzdC5hZGQoJ2F1dGhlbnRpY2F0ZWQnKTtcbiAgICAgIGlmIChraW5kID09PSAnY29ubmVjdGluZycpIHBpbGwuY2xhc3NMaXN0LmFkZCgncG9sbGluZycpO1xuICAgICAgaWYgKGtpbmQgPT09ICd1bmNvbmZpZ3VyZWQnIHx8IGtpbmQgPT09ICdhdXRoLXJlcXVpcmVkJyB8fCBraW5kID09PSAncmF0ZS1saW1pdGVkJyB8fCBraW5kID09PSAndW5hdmFpbGFibGUnIHx8IGtpbmQgPT09ICdlcnJvcicpIHBpbGwuY2xhc3NMaXN0LmFkZCgndW5hdXRoZW50aWNhdGVkJyk7XG4gICAgICBwaWxsSWNvbi50ZXh0Q29udGVudCA9IGljb25UZXh0O1xuICAgICAgcGlsbExhYmVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgICAgIGNvbnN0IHRvb2x0aXBNYXAgPSB7XG4gICAgICAgIHVuY29uZmlndXJlZDogJ05vIHByb3ZpZGVyL21vZGVsIGlzIGNvbmZpZ3VyZWQgeWV0LicsXG4gICAgICAgIGNvbmZpZ3VyZWQ6ICdQcm92aWRlci9tb2RlbCBpcyBjb25maWd1cmVkLiBDb25uZWN0aXZpdHkgbm90IHlldCB2ZXJpZmllZC4nLFxuICAgICAgICBjb25uZWN0aW5nOiAnVGVzdGluZyBvciBjb25uZWN0aW5nIHRvIHRoZSBzZWxlY3RlZCBwcm92aWRlci4nLFxuICAgICAgICBjb25uZWN0ZWQ6ICdQcm92aWRlciByZXNwb25kZWQgc3VjY2Vzc2Z1bGx5IHRvIGEgbGl2ZSByZXF1ZXN0LicsXG4gICAgICAgICdhdXRoLXJlcXVpcmVkJzogJ0F1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkLiBDaGVjayBBUEkga2V5IG9yIHNpZ24gaW4uJyxcbiAgICAgICAgJ3JhdGUtbGltaXRlZCc6ICdSYXRlIGxpbWl0IHJlYWNoZWQuIFdhaXQgYmVmb3JlIHJldHJ5aW5nIHJlcXVlc3RzLicsXG4gICAgICAgIHVuYXZhaWxhYmxlOiAnUHJvdmlkZXIgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUgb3IgdW5yZWFjaGFibGUuJyxcbiAgICAgICAgZXJyb3I6ICdDb25uZWN0aW9uIGZhaWxlZC4gT3BlbiBtb2RlbCBzZXR0aW5ncyBmb3IgZGV0YWlscy4nLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRpcCA9IHRvb2x0aXBNYXBba2luZF0gfHwgJyc7XG4gICAgICBwaWxsLnRpdGxlID0gdGlwO1xuICAgICAgcGlsbEljb24udGl0bGUgPSB0aXA7XG4gICAgICBwaWxsTGFiZWwudGl0bGUgPSB0aXA7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGFjdGl2ZVByb3ZpZGVyID0gcHJvdmlkZXIgfHwgd2luZG93LmN1cnJlbnRQcm92aWRlciB8fCBudWxsO1xuICBjb25zdCBpc0NvcGlsb3RPQXV0aCA9IGFjdGl2ZVByb3ZpZGVyID09PSAnY29waWxvdC1vYXV0aCc7XG5cbiAgLy8gTm9uLWNvbmZpZGVudGlhbCBiYWRnZTogc2hvdyB1bmxlc3MgdGhlIHByb3ZpZGVyIGV4cGxpY2l0bHkgbWFya3MgY29uZmlkZW50aWFsOnRydWUuXG4gIC8vIERlZmF1bHQgaXMgbm9uLWNvbmZpZGVudGlhbCAoZmFpbC1zYWZlIFx1MjAxNCBtb3N0IHByb3ZpZGVycyByZXRhaW4vcmV2aWV3IEFQSSBkYXRhKS5cbiAgY29uc3QgbmNCYWRnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG0tbm9uLWNvbmZpZGVudGlhbC1iYWRnZScpO1xuICBpZiAobmNCYWRnZSAmJiBhY3RpdmVQcm92aWRlcikge1xuICAgIGNvbnN0IGluZm8gPSBnZXRQcm92aWRlckluZm8oYWN0aXZlUHJvdmlkZXIpO1xuICAgIG5jQmFkZ2Uuc3R5bGUuZGlzcGxheSA9IChpbmZvICYmIGluZm8uY29uZmlkZW50aWFsICE9PSB0cnVlKSA/ICcnIDogJ25vbmUnO1xuICB9XG5cbiAgaWYgKGFjdGl2ZVByb3ZpZGVyICYmICFpc0NvcGlsb3RPQXV0aCkge1xuICAgIGFwcGx5U3RhdGUoJ2NvbmZpZ3VyZWQnLCBgJHtmb3JtYXRQcm92aWRlckxhYmVsKGFjdGl2ZVByb3ZpZGVyKX0gY29uZmlndXJlZGAsICdcdTI1RDQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXV0aFN0YXR1cy5hdXRoZW50aWNhdGVkKSB7XG4gICAgYXBwbHlTdGF0ZSgnY29ubmVjdGVkJywgJ0NvcGlsb3QgcmVhZHknLCAnXHUyNzEzJyk7XG4gIH0gZWxzZSBpZiAoYXV0aFN0YXR1cy5wb2xsaW5nKSB7XG4gICAgYXBwbHlTdGF0ZSgnY29ubmVjdGluZycsICdXYWl0aW5nIGZvciBhcHByb3ZhbFx1MjAyNicsICdcdTI5RDcnKTtcbiAgfSBlbHNlIHtcbiAgICBhcHBseVN0YXRlKCdhdXRoLXJlcXVpcmVkJywgJ05vdCBhdXRoZW50aWNhdGVkJywgJ1x1RDgzRFx1REQxMScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb3NlQ29waWxvdEF1dGhNb2RhbCgpIHtcbiAgaWYgKF9hdXRoUG9sbFRpbWVyKSB7IGNsZWFySW50ZXJ2YWwoX2F1dGhQb2xsVGltZXIpOyBfYXV0aFBvbGxUaW1lciA9IG51bGw7IH1cbiAgaWYgKHR5cGVvZiBjbG9zZU1vZGVsTW9kYWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjbG9zZU1vZGVsTW9kYWwoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbGVnYWN5T3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoLW1vZGFsLW92ZXJsYXknKTtcbiAgaWYgKGxlZ2FjeU92ZXJsYXkpIGxlZ2FjeU92ZXJsYXkuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpO1xuICBpZiAodHlwZW9mIHJlc3RvcmVGb2N1cyA9PT0gJ2Z1bmN0aW9uJykgcmVzdG9yZUZvY3VzKCk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFUyBtb2R1bGUgZXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB7XG4gIGZvcm1hdFByb3ZpZGVyTGFiZWwsIHVwZGF0ZUF1dGhCYWRnZSxcbiAgY2xvc2VDb3BpbG90QXV0aE1vZGFsLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogYXRzLW1vZGFscy5qc1xuICogQVRTIFJlcG9ydCBhbmQgSm9iIEFuYWx5c2lzIG1vZGFsIGRpYWxvZ3MgKyBBVFMgU2NvcmUgdGFiIHJlbmRlcmVyLlxuICpcbiAqIERFUEVOREVOQ0lFUzpcbiAqIC0gc3RhdGUtbWFuYWdlci5qcyBmb3IgcGVyc2lzdGVkIEFUUyBzY29yZSArIGFuYWx5c2lzIGRhdGFcbiAqIC0gdXRpbHMuanMgZm9yIEhUTUwgZXNjYXBpbmdcbiAqIC0gYXRzLXJlZmluZW1lbnQuanMgZm9yIEFUUyBmZXRjaC9iYWRnZSB1cGRhdGVzXG4gKiAtIGluZGV4Lmh0bWwgbW9kYWwgb3ZlcmxheXM6ICNhdHMtcmVwb3J0LW1vZGFsLW92ZXJsYXksICNqb2ItYW5hbHlzaXMtbW9kYWwtb3ZlcmxheVxuICovXG5cbmltcG9ydCB7IHJlZnJlc2hBdHNTY29yZSwgdXBkYXRlQXRzQmFkZ2UgfSBmcm9tICcuL2F0cy1yZWZpbmVtZW50LmpzJztcbmltcG9ydCB7IHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgeyB0cmFwRm9jdXMsIHJlc3RvcmVGb2N1cywgcHVzaEZvY3VzU3RhY2sgfSBmcm9tICcuL3VpLWNvcmUuanMnO1xuXG5sZXQgX2F0c1N5bm9ueW1NYXBDYWNoZSA9IG51bGw7XG5cbmFzeW5jIGZ1bmN0aW9uIF9sb2FkQXRzU3lub255bU1hcCgpIHtcbiAgaWYgKF9hdHNTeW5vbnltTWFwQ2FjaGUpIHJldHVybiBfYXRzU3lub255bU1hcENhY2hlO1xuICB0cnkge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHN0YXRlTWFuYWdlcj8uZ2V0U2Vzc2lvbklkPy4oKTtcbiAgICBjb25zdCB1cmwgPSBzZXNzaW9uSWQgPyBgL2FwaS9zeW5vbnltLW1hcD9zZXNzaW9uX2lkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlc3Npb25JZCl9YCA6ICcvYXBpL3N5bm9ueW0tbWFwJztcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGlmICghcmVzLm9rKSByZXR1cm4gKF9hdHNTeW5vbnltTWFwQ2FjaGUgPSB7fSk7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBjb25zdCBhbGlhc1RvQ2Fub24gPSB7fTtcbiAgICBjb25zdCBjYW5vblRvQWxpYXNlcyA9IHt9O1xuICAgIE9iamVjdC5lbnRyaWVzKHJhdykuZm9yRWFjaCgoW2FsaWFzLCBjYW5vbl0pID0+IHtcbiAgICAgIGFsaWFzVG9DYW5vblthbGlhcy50b0xvd2VyQ2FzZSgpXSA9IGNhbm9uO1xuICAgICAgY29uc3QgY2wgPSBjYW5vbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgKGNhbm9uVG9BbGlhc2VzW2NsXSA9IGNhbm9uVG9BbGlhc2VzW2NsXSB8fCBbXSkucHVzaChhbGlhcyk7XG4gICAgfSk7XG4gICAgX2F0c1N5bm9ueW1NYXBDYWNoZSA9IHsgYWxpYXNUb0Nhbm9uLCBjYW5vblRvQWxpYXNlcyB9O1xuICB9IGNhdGNoIChfKSB7IF9hdHNTeW5vbnltTWFwQ2FjaGUgPSB7fTsgfVxuICByZXR1cm4gX2F0c1N5bm9ueW1NYXBDYWNoZTtcbn1cblxuZnVuY3Rpb24gX2t3U3luQW5ub3RhdGlvbihrdywgc3luTWFwKSB7XG4gIGlmICghc3luTWFwIHx8ICghc3luTWFwLmFsaWFzVG9DYW5vbiAmJiAhc3luTWFwLmNhbm9uVG9BbGlhc2VzKSkgcmV0dXJuICcnO1xuICBjb25zdCBrbCA9IChrdyB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgaWYgKHN5bk1hcC5hbGlhc1RvQ2Fub24gJiYgc3luTWFwLmFsaWFzVG9DYW5vbltrbF0pIHJldHVybiBgPSAke3N5bk1hcC5hbGlhc1RvQ2Fub25ba2xdfWA7XG4gIGNvbnN0IGFsaWFzZXMgPSBzeW5NYXAuY2Fub25Ub0FsaWFzZXMgJiYgc3luTWFwLmNhbm9uVG9BbGlhc2VzW2tsXTtcbiAgaWYgKGFsaWFzZXMgJiYgYWxpYXNlcy5sZW5ndGgpIHJldHVybiBgYWxzbzogJHthbGlhc2VzLmpvaW4oJywgJyl9YDtcbiAgcmV0dXJuICcnO1xufVxuXG5jb25zdCBBVFNfR1JPVVBTID0gW1xuICBbJ2hhcmQnLCAnSGFyZCBSZXF1aXJlbWVudHMnXSxcbiAgWydzb2Z0JywgJ1ByZWZlcnJlZCBTa2lsbHMnXSxcbiAgWydib251cycsICdcdTI2MDUgQm9udXMgS2V5d29yZHMnXSxcbl07XG5cbmZ1bmN0aW9uIF9rZXl3b3JkU3RhdHVzKGtleXdvcmQpIHtcbiAgcmV0dXJuIGtleXdvcmQ/LnN0YXR1cyB8fCAoa2V5d29yZD8uZm91bmQgPyAnbWF0Y2hlZCcgOiAnbWlzc2luZycpO1xufVxuXG5mdW5jdGlvbiBfa2V5d29yZFR5cGUoa2V5d29yZCkge1xuICByZXR1cm4ga2V5d29yZD8udHlwZSB8fCAnb3RoZXInO1xufVxuXG5mdW5jdGlvbiBfaXNFeGFjdE1hdGNoKGtleXdvcmQpIHtcbiAgcmV0dXJuIF9rZXl3b3JkU3RhdHVzKGtleXdvcmQpID09PSAnbWF0Y2hlZCcgJiYga2V5d29yZD8ubWF0Y2hfdHlwZSAhPT0gJ3BhcnRpYWwnO1xufVxuXG5mdW5jdGlvbiBfaXNQYXJ0aWFsTWF0Y2goa2V5d29yZCkge1xuICByZXR1cm4gX2tleXdvcmRTdGF0dXMoa2V5d29yZCkgPT09ICdwYXJ0aWFsJyB8fCBrZXl3b3JkPy5tYXRjaF90eXBlID09PSAncGFydGlhbCc7XG59XG5cbmZ1bmN0aW9uIF9rZXl3b3JkU29ydFZhbHVlKGtleXdvcmQpIHtcbiAgaWYgKF9rZXl3b3JkU3RhdHVzKGtleXdvcmQpID09PSAnbWlzc2luZycpIHJldHVybiAwO1xuICBpZiAoX2lzUGFydGlhbE1hdGNoKGtleXdvcmQpKSByZXR1cm4gMTtcbiAgcmV0dXJuIDI7XG59XG5cbmZ1bmN0aW9uIF9rZXl3b3JkU3RhdHVzQmFkZ2Uoa2V5d29yZCkge1xuICBpZiAoX2tleXdvcmRTdGF0dXMoa2V5d29yZCkgPT09ICdtaXNzaW5nJykge1xuICAgIHJldHVybiAnPHNwYW4gc3R5bGU9XCJkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOiNmZWUyZTI7Y29sb3I6Izk5MWIxYjtmb250LXNpemU6MC44ZW07Zm9udC13ZWlnaHQ6NjAwO1wiPlx1Mjc0QyBNaXNzaW5nPC9zcGFuPic7XG4gIH1cbiAgaWYgKF9pc1BhcnRpYWxNYXRjaChrZXl3b3JkKSkge1xuICAgIHJldHVybiAnPHNwYW4gc3R5bGU9XCJkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOiNmZWYzYzc7Y29sb3I6IzkyNDAwZTtmb250LXNpemU6MC44ZW07Zm9udC13ZWlnaHQ6NjAwO1wiPlx1MjZBMCBQYXJ0aWFsPC9zcGFuPic7XG4gIH1cbiAgcmV0dXJuICc8c3BhbiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6I2RjZmNlNztjb2xvcjojMTY2NTM0O2ZvbnQtc2l6ZTowLjhlbTtmb250LXdlaWdodDo2MDA7XCI+XHUyNzA1IE1hdGNoZWQ8L3NwYW4+Jztcbn1cblxuZnVuY3Rpb24gX3JlbmRlcktleXdvcmRHcm91cCh0aXRsZSwga2V5d29yZHMsIHN5bk1hcCkge1xuICBpZiAoa2V5d29yZHMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG5cbiAgY29uc3QgZXhhY3RDb3VudCA9IGtleXdvcmRzLmZpbHRlcihfaXNFeGFjdE1hdGNoKS5sZW5ndGg7XG4gIGNvbnN0IHBhcnRpYWxDb3VudCA9IGtleXdvcmRzLmZpbHRlcihfaXNQYXJ0aWFsTWF0Y2gpLmxlbmd0aDtcbiAgY29uc3QgbWlzc2luZ0NvdW50ID0ga2V5d29yZHMuZmlsdGVyKGtleXdvcmQgPT4gX2tleXdvcmRTdGF0dXMoa2V5d29yZCkgPT09ICdtaXNzaW5nJykubGVuZ3RoO1xuICBjb25zdCBzb3J0ZWQgPSBbLi4ua2V5d29yZHNdLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiB7XG4gICAgY29uc3QgcHJpb3JpdHkgPSBfa2V5d29yZFNvcnRWYWx1ZShsZWZ0KSAtIF9rZXl3b3JkU29ydFZhbHVlKHJpZ2h0KTtcbiAgICBpZiAocHJpb3JpdHkgIT09IDApIHJldHVybiBwcmlvcml0eTtcbiAgICByZXR1cm4gU3RyaW5nKGxlZnQua2V5d29yZCB8fCBsZWZ0LnRlcm0gfHwgJycpLmxvY2FsZUNvbXBhcmUoU3RyaW5nKHJpZ2h0LmtleXdvcmQgfHwgcmlnaHQudGVybSB8fCAnJykpO1xuICB9KTtcblxuICByZXR1cm4gYFxuICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjE2cHg7XCI+XG4gICAgICA8aDQgc3R5bGU9XCJtYXJnaW46MCAwIDhweDtmb250LXNpemU6MXJlbTtjb2xvcjojMzM0MTU1O1wiPiR7ZXNjYXBlSHRtbCh0aXRsZSl9PC9oND5cbiAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC44MmVtO2NvbG9yOiM2NDc0OGI7bWFyZ2luLWJvdHRvbTo4cHg7XCI+JHtleGFjdENvdW50fSBleGFjdCBcdTIwMjIgJHtwYXJ0aWFsQ291bnR9IHBhcnRpYWwgXHUyMDIyICR7bWlzc2luZ0NvdW50fSBtaXNzaW5nPC9kaXY+XG4gICAgICA8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MC45ZW07XCI+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHIgc3R5bGU9XCJ0ZXh0LWFsaWduOmxlZnQ7Y29sb3I6IzY0NzQ4Yjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTJlOGYwO1wiPlxuICAgICAgICAgICAgPHRoIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O1wiPktleXdvcmQ8L3RoPlxuICAgICAgICAgICAgPHRoIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O1wiPkNvdmVyYWdlPC90aD5cbiAgICAgICAgICAgIDx0aCBzdHlsZT1cInBhZGRpbmc6NnB4IDhweDtcIj5TZWN0aW9uczwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgICR7c29ydGVkLm1hcChrZXl3b3JkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGt3ID0ga2V5d29yZC5rZXl3b3JkIHx8IGtleXdvcmQudGVybSB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25zID0gQXJyYXkuaXNBcnJheShrZXl3b3JkLm1hdGNoZWRfaW5fc2VjdGlvbnMpICYmIGtleXdvcmQubWF0Y2hlZF9pbl9zZWN0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8ga2V5d29yZC5tYXRjaGVkX2luX3NlY3Rpb25zLmpvaW4oJywgJylcbiAgICAgICAgICAgICAgOiAnTm90IGZvdW5kJztcbiAgICAgICAgICAgIGNvbnN0IHN5bkFubm90ID0gX2t3U3luQW5ub3RhdGlvbihrdywgc3luTWFwKTtcbiAgICAgICAgICAgIGNvbnN0IHN5bkh0bWwgPSBzeW5Bbm5vdFxuICAgICAgICAgICAgICA/IGA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuNzhlbTtjb2xvcjojNjQ3NDhiO21hcmdpbi10b3A6MnB4O1wiIHRpdGxlPVwiU3lub255bSBncm91cGluZ1wiPiR7ZXNjYXBlSHRtbChzeW5Bbm5vdCl9PC9kaXY+YFxuICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgPHRyIHN0eWxlPVwiYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2YxZjVmOTt2ZXJ0aWNhbC1hbGlnbjp0b3A7XCI+XG4gICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo4cHg7XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxZTI5M2I7XCI+JHtlc2NhcGVIdG1sKGt3KX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC44ZW07Y29sb3I6Izk0YTNiODt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplO1wiPiR7ZXNjYXBlSHRtbChfa2V5d29yZFR5cGUoa2V5d29yZCkpfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgJHtzeW5IdG1sfVxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo4cHg7XCI+JHtfa2V5d29yZFN0YXR1c0JhZGdlKGtleXdvcmQpfTwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo4cHg7Y29sb3I6IzQ3NTU2OTtcIj4ke2VzY2FwZUh0bWwoc2VjdGlvbnMpfTwvdGQ+XG4gICAgICAgICAgICAgIDwvdHI+YDtcbiAgICAgICAgICB9KS5qb2luKCcnKX1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+YDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBBVFMgUmVwb3J0IE1vZGFsXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBPcGVuIHRoZSBBVFMgUmVwb3J0IG1vZGFsLiBSZW5kZXJzIHRoZSBjYWNoZWQgQVRTIHNjb3JlIGZyb20gc3RhdGUsIG9yXG4gKiBmZXRjaGVzIGEgZnJlc2ggc2NvcmUgaWYgbm9uZSBpcyBjYWNoZWQuXG4gKi9cbmZ1bmN0aW9uIF9hdHNFc2NhcGVIYW5kbGVyKGUpIHtcbiAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgY2xvc2VBdHNSZXBvcnRNb2RhbCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuQXRzUmVwb3J0TW9kYWwoKSB7XG4gIHB1c2hGb2N1c1N0YWNrKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F0cy1yZXBvcnQtbW9kYWwtb3ZlcmxheScpO1xuICBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBfYXRzRXNjYXBlSGFuZGxlcik7XG4gIC8vIE1vdmUgZm9jdXMgdG8gdGhlIENsb3NlIGJ1dHRvbiBpbiB0aGUgbW9kYWwgZm9vdGVyXG4gIGNvbnN0IGNsb3NlQnRuID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcubW9kYWwtZm9vdGVyIC5hY3Rpb24tYnRuJyk7XG4gIGlmIChjbG9zZUJ0bikgY2xvc2VCdG4uZm9jdXMoKTtcbiAgdHJhcEZvY3VzKCdhdHMtcmVwb3J0LW1vZGFsLW92ZXJsYXknKTtcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdHMtcmVwb3J0LW1vZGFsLWJvZHknKTtcblxuICAvLyBBIGNhY2hlZCBzY29yZSByZW5kZXJzIGltbWVkaWF0ZWx5IHVzaW5nIHdoYXRldmVyIHN5bm9ueW0gbWFwIGlzIGFscmVhZHlcbiAgLy8gY2FjaGVkIChvciBub25lKSByYXRoZXIgdGhhbiBibG9ja2luZyBvbiBhIG5ldHdvcmsgcm91bmQtdHJpcCBmb3IgaXQgXHUyMDE0XG4gIC8vIHRoZSBhbm5vdGF0aW9ucyBhcmUgYW4gZW5yaWNobWVudCwgbm90IHJlcXVpcmVkIGZvciBfcmVuZGVyQXRzUmVwb3J0IHRvXG4gIC8vIHdvcmssIGFuZCBhIGNhY2hlZC1zY29yZSBvcGVuIHNob3VsZCBiZSBpbnN0YW50LlxuICBjb25zdCBjYWNoZWQgPSBzdGF0ZU1hbmFnZXI/LmdldEF0c1Njb3JlPy4oKTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIGJvZHkuaW5uZXJIVE1MID0gX3JlbmRlckF0c1JlcG9ydChjYWNoZWQsIF9hdHNTeW5vbnltTWFwQ2FjaGUgfHwge30pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGJvZHkuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O3BhZGRpbmc6MjRweDtjb2xvcjojNmI3MjgwO1wiPjxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyLXdpZHRoOjJweDtmbGV4LXNocmluazowO1wiPjwvZGl2PjxzcGFuPkZldGNoaW5nIEFUUyBzY29yZVx1MjAyNjwvc3Bhbj48L2Rpdj4nO1xuICB0cnkge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHN0YXRlTWFuYWdlcj8uZ2V0U2Vzc2lvbklkPy4oKTtcbiAgICBjb25zdCBbc3luTWFwLCByZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgX2xvYWRBdHNTeW5vbnltTWFwKCksXG4gICAgICBmZXRjaCgnL2FwaS9jdi9hdHMtc2NvcmUnLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzZXNzaW9uX2lkOiBzZXNzaW9uSWQsIGJhc2lzOiAncmV2aWV3X2NoZWNrcG9pbnQnIH0pLFxuICAgICAgfSksXG4gICAgXSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2sgJiYgZGF0YS5hdHNfc2NvcmUpIHtcbiAgICAgIHN0YXRlTWFuYWdlcj8uc2V0QXRzU2NvcmU/LihkYXRhLmF0c19zY29yZSk7XG4gICAgICB1cGRhdGVBdHNCYWRnZShkYXRhLmF0c19zY29yZSk7XG4gICAgICBib2R5LmlubmVySFRNTCA9IF9yZW5kZXJBdHNSZXBvcnQoZGF0YS5hdHNfc2NvcmUsIHN5bk1hcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHkuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwicGFkZGluZzoyNHB4O2NvbG9yOiNlZjQ0NDQ7XCI+Q291bGQgbm90IGxvYWQgQVRTIHJlcG9ydDogJHtlc2NhcGVIdG1sKGRhdGEuZXJyb3IgfHwgJ3Vua25vd24gZXJyb3InKX08L3A+YDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBib2R5LmlubmVySFRNTCA9IGA8cCBzdHlsZT1cInBhZGRpbmc6MjRweDtjb2xvcjojZWY0NDQ0O1wiPkVycm9yOiAke2VzY2FwZUh0bWwoZS5tZXNzYWdlKX08L3A+YDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9zZUF0c1JlcG9ydE1vZGFsKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXRzLXJlcG9ydC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIF9hdHNFc2NhcGVIYW5kbGVyKTtcbiAgcmVzdG9yZUZvY3VzKCk7XG59XG5cbi8qKlxuICogUmVuZGVyIGFuIEFUUyBzY29yZSBvYmplY3QgaW50byBIVE1MIGZvciB0aGUgbW9kYWwgYm9keS5cbiAqL1xuZnVuY3Rpb24gX3JlbmRlckF0c1JlcG9ydChzY29yZSwgc3luTWFwKSB7XG4gIGNvbnN0IG92ZXJhbGwgPSBNYXRoLnJvdW5kKHNjb3JlLm92ZXJhbGwgPz8gMCk7XG4gIGNvbnN0IGhhcmQgPSBNYXRoLnJvdW5kKHNjb3JlLmhhcmRfcmVxdWlyZW1lbnRfc2NvcmUgPz8gMCk7XG4gIGNvbnN0IHNvZnQgPSBNYXRoLnJvdW5kKHNjb3JlLnNvZnRfcmVxdWlyZW1lbnRfc2NvcmUgPz8gMCk7XG5cbiAgY29uc3Qgc2NvcmVDb2xvciA9IG92ZXJhbGwgPj0gNzUgPyAnIzEwYjk4MScgOiBvdmVyYWxsID49IDUwID8gJyNmNTllMGInIDogJyNlZjQ0NDQnO1xuXG4gIGNvbnN0IGtleXdvcmRzID0gc2NvcmUua2V5d29yZF9zdGF0dXMgfHwgW107XG4gIGNvbnN0IG1pc3NpbmdLdyA9IGtleXdvcmRzLmZpbHRlcihrZXl3b3JkID0+IF9rZXl3b3JkU3RhdHVzKGtleXdvcmQpID09PSAnbWlzc2luZycpO1xuICBjb25zdCBtaXNzaW5nSGFyZCA9IG1pc3NpbmdLdy5maWx0ZXIoa2V5d29yZCA9PiBfa2V5d29yZFR5cGUoa2V5d29yZCkgPT09ICdoYXJkJyk7XG4gIGNvbnN0IGtleXdvcmRHcm91cHMgPSBBVFNfR1JPVVBTXG4gICAgLm1hcCgoW3R5cGUsIHRpdGxlXSkgPT4gX3JlbmRlcktleXdvcmRHcm91cCh0aXRsZSwga2V5d29yZHMuZmlsdGVyKGtleXdvcmQgPT4gX2tleXdvcmRUeXBlKGtleXdvcmQpID09PSB0eXBlKSwgc3luTWFwKSlcbiAgICAuam9pbignJyk7XG5cbiAgY29uc3Qgc2VjdGlvblNjb3JlcyA9IHNjb3JlLnNlY3Rpb25fc2NvcmVzIHx8IHt9O1xuICBjb25zdCBzZWN0SHRtbCA9IE9iamVjdC5rZXlzKHNlY3Rpb25TY29yZXMpLmxlbmd0aCA9PT0gMCA/ICcnIDogYFxuICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjE2cHg7XCI+XG4gICAgICA8aDQgc3R5bGU9XCJtYXJnaW46MCAwIDhweDtmb250LXNpemU6MXJlbTtjb2xvcjojMzM0MTU1O1wiPlNlY3Rpb24gU2NvcmVzPC9oND5cbiAgICAgIDx0YWJsZSBzdHlsZT1cIndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2ZvbnQtc2l6ZTowLjllbTtcIj5cbiAgICAgICAgJHtPYmplY3QuZW50cmllcyhzZWN0aW9uU2NvcmVzKS5tYXAoKFtzZWMsIHZhbF0pID0+IGBcbiAgICAgICAgICA8dHIgc3R5bGU9XCJib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjFmNWY5O1wiPlxuICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo0cHggOHB4O3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7Y29sb3I6IzQ3NTU2OTtcIj4ke2VzY2FwZUh0bWwoc2VjKX08L3RkPlxuICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo0cHggOHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMWUyOTNiO1wiPiR7TWF0aC5yb3VuZCh2YWwpfSU8L3RkPlxuICAgICAgICAgIDwvdHI+YCkuam9pbignJyl9XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PmA7XG5cbiAgcmV0dXJuIGBcbiAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzoyMHB4O1wiPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjI0cHg7bWFyZ2luLWJvdHRvbToyMHB4O1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjIuNGVtO2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjoke3Njb3JlQ29sb3J9O1wiPiR7b3ZlcmFsbH0lPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjllbTtjb2xvcjojNDc1NTY5O1wiPkhhcmQgcmVxdWlyZW1lbnRzOiA8c3Ryb25nPiR7aGFyZH0lPC9zdHJvbmc+PC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjllbTtjb2xvcjojNDc1NTY5O1wiPlByZWZlcnJlZCBza2lsbHM6IDxzdHJvbmc+JHtzb2Z0fSU8L3N0cm9uZz48L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuNzVlbTtjb2xvcjojOTRhM2I4O21hcmdpbi10b3A6MnB4O1wiPkJhc2lzOiAke2VzY2FwZUh0bWwoc2NvcmUuYmFzaXMgfHwgJ3JldmlldycpfTwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC43NWVtO2NvbG9yOiM5NGEzYjg7bWFyZ2luLXRvcDo0cHg7XCIgdGl0bGU9XCJTY29yZSB0aHJlc2hvbGRzXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImNvbG9yOiMxMGI5ODE7XCI+XHUyNUNGPC9zcGFuPiBcdTIyNjU3NSUgU3Ryb25nIG1hdGNoICZuYnNwO1xuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJjb2xvcjojZjU5ZTBiO1wiPlx1MjVDRjwvc3Bhbj4gNTBcdTIwMTM3NCUgUGFydGlhbCBtYXRjaCAmbmJzcDtcbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6I2VmNDQ0NDtcIj5cdTI1Q0Y8L3NwYW4+ICZsdDs1MCUgTG93IG1hdGNoXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICAke2tleXdvcmRHcm91cHN9XG4gICAgICAke3NlY3RIdG1sfVxuICAgICAgJHttaXNzaW5nSGFyZC5sZW5ndGggPiAwID8gYFxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoxNnB4O3BhZGRpbmc6MTJweDtiYWNrZ3JvdW5kOiNmZmY3ZWQ7Ym9yZGVyOjFweCBzb2xpZCAjZmVkN2FhO2JvcmRlci1yYWRpdXM6NnB4O1wiPlxuICAgICAgICAgIDxzdHJvbmcgc3R5bGU9XCJjb2xvcjojOWEzNDEyO1wiPk1pc3NpbmcgaGFyZCByZXF1aXJlbWVudHMgKCR7bWlzc2luZ0hhcmQubGVuZ3RofSk6PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjojN2MyZDEyO2ZvbnQtc2l6ZTowLjllbTtcIj4gJHttaXNzaW5nSGFyZC5tYXAoa2V5d29yZCA9PiBlc2NhcGVIdG1sKGtleXdvcmQua2V5d29yZCB8fCBrZXl3b3JkLnRlcm0gfHwgJycpKS5qb2luKCcsICcpfTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+YCA6ICcnfVxuICAgICAgJHttaXNzaW5nS3cubGVuZ3RoID4gbWlzc2luZ0hhcmQubGVuZ3RoID8gYFxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoxNnB4O3BhZGRpbmc6MTJweDtiYWNrZ3JvdW5kOiNmZmY3ZWQ7Ym9yZGVyOjFweCBzb2xpZCAjZmVkN2FhO2JvcmRlci1yYWRpdXM6NnB4O1wiPlxuICAgICAgICAgIDxzdHJvbmcgc3R5bGU9XCJjb2xvcjojOWEzNDEyO1wiPlJlbWFpbmluZyBrZXl3b3JkIGdhcHMgKCR7bWlzc2luZ0t3Lmxlbmd0aCAtIG1pc3NpbmdIYXJkLmxlbmd0aH0pOjwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IzdjMmQxMjtmb250LXNpemU6MC45ZW07XCI+ICR7bWlzc2luZ0t3LmZpbHRlcihrZXl3b3JkID0+IF9rZXl3b3JkVHlwZShrZXl3b3JkKSAhPT0gJ2hhcmQnKS5tYXAoa2V5d29yZCA9PiBlc2NhcGVIdG1sKGtleXdvcmQua2V5d29yZCB8fCBrZXl3b3JkLnRlcm0gfHwgJycpKS5qb2luKCcsICcpfTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+YCA6ICcnfVxuICAgIDwvZGl2PmA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSm9iIEFuYWx5c2lzIE1vZGFsXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBPcGVuIHRoZSBKb2IgQW5hbHlzaXMgbW9kYWwuIFJldXNlcyB0YWJEYXRhLmFuYWx5c2lzIGlmIGF2YWlsYWJsZS5cbiAqL1xuZnVuY3Rpb24gX2pvYkFuYWx5c2lzRXNjYXBlSGFuZGxlcihlKSB7XG4gIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGNsb3NlSm9iQW5hbHlzaXNNb2RhbCgpO1xufVxuXG5mdW5jdGlvbiBvcGVuSm9iQW5hbHlzaXNNb2RhbCgpIHtcbiAgcHVzaEZvY3VzU3RhY2soZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnam9iLWFuYWx5c2lzLW1vZGFsLW92ZXJsYXknKTtcbiAgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgX2pvYkFuYWx5c2lzRXNjYXBlSGFuZGxlcik7XG4gIGNvbnN0IGNsb3NlQnRuID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcubW9kYWwtZm9vdGVyIC5hY3Rpb24tYnRuJyk7XG4gIGlmIChjbG9zZUJ0bikgY2xvc2VCdG4uZm9jdXMoKTtcbiAgdHJhcEZvY3VzKCdqb2ItYW5hbHlzaXMtbW9kYWwtb3ZlcmxheScpO1xuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pvYi1hbmFseXNpcy1tb2RhbC1ib2R5Jyk7XG5cbiAgY29uc3QgYW5hbHlzaXMgPSBzdGF0ZU1hbmFnZXIuZ2V0VGFiRGF0YSgnYW5hbHlzaXMnKTtcbiAgaWYgKGFuYWx5c2lzKSB7XG4gICAgLy8gUmVuZGVyIGludG8gYSB0ZW1wIGRpdiB1c2luZyBwb3B1bGF0ZUFuYWx5c2lzVGFiJ3Mgb3V0cHV0IHBhdHRlcm5cbiAgICBjb25zdCB0bXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0bXAuc3R5bGUucGFkZGluZyA9ICcyMHB4JztcbiAgICBib2R5LmlubmVySFRNTCA9ICcnO1xuICAgIGJvZHkuYXBwZW5kQ2hpbGQodG1wKTtcbiAgICAvLyBwb3B1bGF0ZUFuYWx5c2lzVGFiIHdyaXRlcyB0byAjZG9jdW1lbnQtY29udGVudDsgdXNlIGEgc2hpbVxuICAgIF9yZW5kZXJBbmFseXNpc0ludG9FbCh0bXAsIGFuYWx5c2lzKTtcbiAgfSBlbHNlIHtcbiAgICBib2R5LmlubmVySFRNTCA9ICc8cCBzdHlsZT1cInBhZGRpbmc6MjRweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojNmI3MjgwO1wiPk5vIGpvYiBhbmFseXNpcyBhdmFpbGFibGUuIFJ1biBqb2IgYW5hbHlzaXMgZmlyc3QuPC9wPic7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvc2VKb2JBbmFseXNpc01vZGFsKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnam9iLWFuYWx5c2lzLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgX2pvYkFuYWx5c2lzRXNjYXBlSGFuZGxlcik7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG4vKipcbiAqIFJlbmRlciBqb2IgYW5hbHlzaXMgZGF0YSBpbnRvIGFuIGFyYml0cmFyeSBjb250YWluZXIgZWxlbWVudC5cbiAqIE1pcnJvcnMgdGhlIHN0cnVjdHVyZSBmcm9tIHBvcHVsYXRlQW5hbHlzaXNUYWIgaW4gYXBwLmpzLlxuICovXG5mdW5jdGlvbiBfcmVuZGVyQW5hbHlzaXNJbnRvRWwoZWwsIHJlc3VsdCkge1xuICBpZiAoIXJlc3VsdCkge1xuICAgIGVsLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7XCI+Tm8gYW5hbHlzaXMgZGF0YS48L3A+JztcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZWR1cGxpY2F0ZSBsaXN0czogY2FzZS1pbnNlbnNpdGl2ZSwga2VlcCBmaXJzdCBvY2N1cnJlbmNlIG9mIGVhY2ggbm9ybWFsaXNlZCBmb3JtLlxuICBjb25zdCBfZGVkdXAgPSAoYXJyKSA9PiB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKTtcbiAgICByZXR1cm4gKGFyciB8fCBbXSkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgY29uc3Qga2V5ID0gU3RyaW5nKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyA/IGl0ZW0gOiBpdGVtLmtleXdvcmQgfHwgaXRlbS50ZXJtIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICgha2V5IHx8IHNlZW4uaGFzKGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgcmVxID0gX2RlZHVwKHJlc3VsdC5yZXF1aXJlZF9za2lsbHMpO1xuICBjb25zdCBwcmVmID0gX2RlZHVwKHJlc3VsdC5wcmVmZXJyZWRfc2tpbGxzIHx8IHJlc3VsdC5uaWNlX3RvX2hhdmUpO1xuICBjb25zdCBrZXl3b3JkcyA9IF9kZWR1cChyZXN1bHQuYXRzX2tleXdvcmRzKTtcbiAgY29uc3QgY3VsdHVyZSA9IHJlc3VsdC5jdWx0dXJlX2luZGljYXRvcnMgfHwgW107XG4gIGNvbnN0IG11c3RIYXZlID0gcmVzdWx0Lm11c3RfaGF2ZV9yZXF1aXJlbWVudHMgfHwgW107XG4gIGNvbnN0IG1pc3NpbmcgPSByZXN1bHQubWlzc2luZ19yZXF1aXJlZCB8fCBbXTtcblxuICBlbC5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjk1ZW07bGluZS1oZWlnaHQ6MS42O1wiPlxuICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2Y4ZmFmYztib3JkZXI6MXB4IHNvbGlkICNlMmU4ZjA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNHB4IDE2cHg7bWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjEuMWVtO2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMWUyOTNiO1wiPiR7ZXNjYXBlSHRtbChyZXN1bHQuam9iX3RpdGxlIHx8IHJlc3VsdC50aXRsZSB8fCAnUm9sZScpfTwvZGl2PlxuICAgICAgICAke3Jlc3VsdC5jb21wYW55ID8gYDxkaXYgc3R5bGU9XCJjb2xvcjojNDc1NTY5O1wiPiR7ZXNjYXBlSHRtbChyZXN1bHQuY29tcGFueSl9PC9kaXY+YCA6ICcnfVxuICAgICAgICAke3Jlc3VsdC5kb21haW4gPyBgPHNwYW4gc3R5bGU9XCJkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjZweDtwYWRkaW5nOjJweCA4cHg7YmFja2dyb3VuZDojZGJlYWZlO2NvbG9yOiMxZTQwYWY7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZTowLjhlbTtcIj4ke2VzY2FwZUh0bWwocmVzdWx0LmRvbWFpbil9PC9zcGFuPmAgOiAnJ31cbiAgICAgIDwvZGl2PlxuXG4gICAgICAke21pc3NpbmcubGVuZ3RoID4gMCA/IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZmZjdlZDtib3JkZXI6MXB4IHNvbGlkICNmZWQ3YWE7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMHB4IDE0cHg7bWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgIDxzdHJvbmcgc3R5bGU9XCJjb2xvcjojOWEzNDEyO1wiPlx1MjZBMCBNaXNzaW5nIHJlcXVpcmVkIHNraWxsczo8L3N0cm9uZz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IzdjMmQxMjttYXJnaW4tdG9wOjRweDtcIj4ke21pc3NpbmcubWFwKHMgPT4gZXNjYXBlSHRtbChzKSkuam9pbignIFx1MDBCNyAnKX08L2Rpdj5cbiAgICAgICAgPC9kaXY+YCA6ICcnfVxuXG4gICAgICAke3JlcS5sZW5ndGggPiAwID8gYFxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgIDxoNCBzdHlsZT1cIm1hcmdpbjowIDAgOHB4O2ZvbnQtc2l6ZTowLjk1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi41cHg7Y29sb3I6IzMzNDE1NTtcIj5SZXF1aXJlZCBTa2lsbHM8L2g0PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweDtcIj5cbiAgICAgICAgICAgICR7cmVxLm1hcChzID0+IGA8c3BhbiBzdHlsZT1cInBhZGRpbmc6MnB4IDEwcHg7Ym9yZGVyLXJhZGl1czoxMnB4O2JhY2tncm91bmQ6JHttaXNzaW5nLmluY2x1ZGVzKHMpPycjZmVlMmUyJzonI2RjZmNlNyd9O2NvbG9yOiR7bWlzc2luZy5pbmNsdWRlcyhzKT8nIzk5MWIxYic6JyMxNjY1MzQnfTtmb250LXNpemU6MC44NWVtO1wiPiR7ZXNjYXBlSHRtbChzKX08L3NwYW4+YCkuam9pbignJyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmAgOiAnJ31cblxuICAgICAgJHtwcmVmLmxlbmd0aCA+IDAgPyBgXG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgPGg0IHN0eWxlPVwibWFyZ2luOjAgMCA4cHg7Zm9udC1zaXplOjAuOTVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjVweDtjb2xvcjojMzM0MTU1O1wiPlByZWZlcnJlZCAvIE5pY2UtdG8taGF2ZTwvaDQ+XG4gICAgICAgICAgPHVsIHN0eWxlPVwibWFyZ2luOjA7cGFkZGluZy1sZWZ0OjE4cHg7Y29sb3I6IzQ3NTU2OTtcIj4ke3ByZWYubWFwKHMgPT4gYDxsaT4ke2VzY2FwZUh0bWwocyl9PC9saT5gKS5qb2luKCcnKX08L3VsPlxuICAgICAgICA8L2Rpdj5gIDogJyd9XG5cbiAgICAgICR7a2V5d29yZHMubGVuZ3RoID4gMCA/IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgICA8aDQgc3R5bGU9XCJtYXJnaW46MCAwIDhweDtmb250LXNpemU6MC45NWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouNXB4O2NvbG9yOiMzMzQxNTU7XCI+QVRTIEtleXdvcmRzPC9oND5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7XCI+XG4gICAgICAgICAgICAke2tleXdvcmRzLm1hcCgoaywgaSkgPT4gYDxzcGFuIHN0eWxlPVwicGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MTJweDtiYWNrZ3JvdW5kOiNmMGY5ZmY7Ym9yZGVyOjFweCBzb2xpZCAjYmFlNmZkO2NvbG9yOiMwMzY5YTE7Zm9udC1zaXplOjAuODJlbTtcIj4ke2kgPCA1ID8gYDxzdHJvbmc+IyR7aSsxfTwvc3Ryb25nPiBgIDogJyd9JHtlc2NhcGVIdG1sKHR5cGVvZiBrID09PSAnc3RyaW5nJyA/IGsgOiBrLmtleXdvcmQgfHwgay50ZXJtIHx8ICcnKX08L3NwYW4+YCkuam9pbignJyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmAgOiAnJ31cblxuICAgICAgJHttdXN0SGF2ZS5sZW5ndGggPiAwID8gYFxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgIDxoNCBzdHlsZT1cIm1hcmdpbjowIDAgOHB4O2ZvbnQtc2l6ZTowLjk1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi41cHg7Y29sb3I6IzMzNDE1NTtcIj5NdXN0LWhhdmUgUmVxdWlyZW1lbnRzPC9oND5cbiAgICAgICAgICA8dWwgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nLWxlZnQ6MThweDtjb2xvcjojNDc1NTY5O1wiPiR7bXVzdEhhdmUubWFwKHMgPT4gYDxsaT4ke2VzY2FwZUh0bWwocyl9PC9saT5gKS5qb2luKCcnKX08L3VsPlxuICAgICAgICA8L2Rpdj5gIDogJyd9XG5cbiAgICAgICR7Y3VsdHVyZS5sZW5ndGggPiAwID8gYFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxoNCBzdHlsZT1cIm1hcmdpbjowIDAgOHB4O2ZvbnQtc2l6ZTowLjk1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi41cHg7Y29sb3I6IzMzNDE1NTtcIj5DdWx0dXJlIEluZGljYXRvcnM8L2g0PlxuICAgICAgICAgIDx1bCBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmctbGVmdDoxOHB4O2NvbG9yOiM0NzU1Njk7XCI+JHtjdWx0dXJlLm1hcChzID0+IGA8bGk+JHtlc2NhcGVIdG1sKHMpfTwvbGk+YCkuam9pbignJyl9PC91bD5cbiAgICAgICAgPC9kaXY+YCA6ICcnfVxuICAgIDwvZGl2PmA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQVRTIFNjb3JlIFRhYiAoaW4gY3VzdG9taXplIHBoYXNlKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogUG9wdWxhdGUgdGhlIEFUUyBTY29yZSB0YWIgY29udGVudCBhcmVhLlxuICogQ2FsbGVkIGJ5IGFwcC5qcyBzd2l0Y2hUYWIgd2hlbiBjYXNlICdhdHMtc2NvcmUnIGlzIHNlbGVjdGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBwb3B1bGF0ZUF0c1Njb3JlVGFiKCkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250ZW50KSByZXR1cm47XG5cbiAgY29uc3QgY2FjaGVkID0gc3RhdGVNYW5hZ2VyPy5nZXRBdHNTY29yZT8uKCk7XG4gIGlmIChjYWNoZWQpIHtcbiAgICBjb250ZW50LmlubmVySFRNTCA9IGA8ZGl2IHN0eWxlPVwibWF4LXdpZHRoOjY4MHB4O21hcmdpbjowIGF1dG87XCI+JHtfcmVuZGVyQXRzUmVwb3J0KGNhY2hlZCl9PC9kaXY+YDtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250ZW50LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj48ZGl2IGNsYXNzPVwiaWNvblwiPlx1RDgzRFx1RENDQTwvZGl2PjxoMz5BVFMgU2NvcmU8L2gzPjxwPkNvbXBsZXRlIGpvYiBhbmFseXNpcyBhbmQgc2tpbGxzIHJldmlldyB0byBzZWUgeW91ciBBVFMgc2NvcmU8L3A+PGJ1dHRvbiBjbGFzcz1cImJ0bi1wcmltYXJ5XCIgb25jbGljaz1cInJlZnJlc2hBdHNTY29yZShcXCdyZXZpZXdfY2hlY2twb2ludFxcJykudGhlbigoKT0+cG9wdWxhdGVBdHNTY29yZVRhYigpKVwiPkNvbXB1dGUgQVRTIFNjb3JlPC9idXR0b24+PC9kaXY+Jztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTaG93L2hpZGUgdGhlIG1vZGFsIHNob3J0Y3V0IGJ1dHRvbnMgd2hlbiBBVFMgYmFkZ2UgYmVjb21lcyB2aXNpYmxlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBTaG93IG9yIGhpZGUgdGhlIEFUUyBSZXBvcnQgYW5kIEpvYiBBbmFseXNpcyBzaG9ydGN1dCBidXR0b25zLlxuICogRHJpdmVuIGJ5IHRoZSAnYXRzLXNjb3JlLXVwZGF0ZWQnIGN1c3RvbSBldmVudCBkaXNwYXRjaGVkIGJ5IGFwcC5qc1xuICogd2hlbmV2ZXIgdXBkYXRlQXRzQmFkZ2UoKSBydW5zLiBObyBtb25rZXktcGF0Y2hpbmcgcmVxdWlyZWQuXG4gKi9cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2F0cy1zY29yZS11cGRhdGVkJywgKCkgPT4ge1xuICBjb25zdCBiYWRnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdHMtc2NvcmUtYmFkZ2UnKTtcbiAgY29uc3QgdmlzaWJsZSA9IGJhZGdlICYmIGJhZGdlLnN0eWxlLmRpc3BsYXkgIT09ICdub25lJztcbiAgY29uc3QgcmVwb3J0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F0cy1yZXBvcnQtYnRuJyk7XG4gIGNvbnN0IGFuYWx5c2lzQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pvYi1hbmFseXNpcy1idG4nKTtcbiAgaWYgKHJlcG9ydEJ0bikgcmVwb3J0QnRuLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID8gJ2lubGluZS1ibG9jaycgOiAnbm9uZSc7XG4gIGlmIChhbmFseXNpc0J0bikgYW5hbHlzaXNCdG4uc3R5bGUuZGlzcGxheSA9IHZpc2libGUgPyAnaW5saW5lLWJsb2NrJyA6ICdub25lJztcbn0pO1xuXG5leHBvcnQge1xuICBvcGVuQXRzUmVwb3J0TW9kYWwsXG4gIGNsb3NlQXRzUmVwb3J0TW9kYWwsXG4gIF9yZW5kZXJBdHNSZXBvcnQsXG4gIG9wZW5Kb2JBbmFseXNpc01vZGFsLFxuICBjbG9zZUpvYkFuYWx5c2lzTW9kYWwsXG4gIF9yZW5kZXJBbmFseXNpc0ludG9FbCxcbiAgcG9wdWxhdGVBdHNTY29yZVRhYixcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9zZXNzaW9uLWFjdGlvbnMuanNcbiAqIFNlc3Npb24tbGV2ZWwgZGlzcGF0Y2ggKHNlbmRBY3Rpb24pLCBzYXZlLCBhbmQgcG9zaXRpb24gdGl0bGUgdXBkYXRlcy5cbiAqXG4gKiBERVBFTkRFTkNJRVMgKGFsbCBvbiBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICAtIHN0YXRlTWFuYWdlciAoc3RhdGUtbWFuYWdlci5qcyBcdTIwMTQgaXNMb2FkaW5nKCkvc2V0VGFiRGF0YSgpKVxuICogICAtIHVzZXJTZWxlY3Rpb25zICh3aW5kb3cgZ2xvYmFsIGZyb20gYXBwKVxuICogICAtIGFwcGVuZExvYWRpbmdNZXNzYWdlLCByZW1vdmVMb2FkaW5nTWVzc2FnZSwgYXBwZW5kTWVzc2FnZSwgYXBwZW5kUmV0cnlNZXNzYWdlXG4gKiAgIC0gc2V0TG9hZGluZywgbGxtRmV0Y2ggKGZldGNoLXV0aWxzLmpzKVxuICogICAtIHBhcnNlTWVzc2FnZVJlc3BvbnNlLCBwYXJzZVN0YXR1c1Jlc3BvbnNlICh2YWxpZGF0b3JzLmpzKVxuICogICAtIGhhbmRsZUN1c3RvbWl6YXRpb25SZXNwb25zZSAocmV2aWV3LXRhYmxlLWJhc2UuanMsIFRpZXIgNClcbiAqICAgLSByZWZyZXNoQXRzU2NvcmUsIHN3aXRjaFRhYiwgZmV0Y2hTdGF0dXMgKGdsb2JhbFRoaXMpXG4gKiAgIC0gY2xlYXJTdGF0ZSwgU3RvcmFnZUtleXMgKHN0YXRlLW1hbmFnZXIuanMgLyBhcGktY2xpZW50LmpzKVxuICogICAtIHNob3dMb2FkSm9iUGFuZWwsIGNsZWFySm9iSW5wdXQsIGNsZWFyVVJMSW5wdXQsIF9jbGVhckZpZWxkRXJyb3IsXG4gKiAgICAgX3VwZGF0ZVBhc3RlQ2hhckNvdW50IChqb2ItaW5wdXQuanMsIFRpZXIgMylcbiAqICAgLSBub3JtYWxpemVQb3NpdGlvbkxhYmVsLCBleHRyYWN0VGl0bGVBbmRDb21wYW55RnJvbUpvYlRleHQsXG4gKiAgICAgY2xlYW5Kc29uUmVzcG9uc2UgKHV0aWxzLmpzKVxuICogICAtIF91cGRhdGVTZXNzaW9uU3dpdGNoZXJIZWFkZXIgKHNlc3Npb24tc3dpdGNoZXItdWkuanMsIFRpZXIgNylcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ3Nlc3Npb24tYWN0aW9ucycpO1xuXG5pbXBvcnQgeyBTdG9yYWdlS2V5cyB9IGZyb20gJy4vYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuXG4vKiogTWFwcyBhY3Rpb24gaWRlbnRpZmllcnMgdG8gaHVtYW4tcmVhZGFibGUgTExNIHN0YXR1cyBiYXIgbGFiZWxzLiAqL1xuY29uc3QgX0FDVElPTl9MQUJFTFMgPSB7XG4gIGFuYWx5emVfam9iOiAgICAgICAgICAgICAgJ0FuYWx5c2luZyBqb2IgZGVzY3JpcHRpb25cdTIwMjYnLFxuICByZWNvbW1lbmRfY3VzdG9taXphdGlvbnM6ICdHZW5lcmF0aW5nIGN1c3RvbWlzYXRpb24gcmVjb21tZW5kYXRpb25zXHUyMDI2JyxcbiAgZ2VuZXJhdGVfY3Y6ICAgICAgICAgICAgICAnR2VuZXJhdGluZyBDViBmaWxlc1x1MjAyNicsXG59O1xuXG5hc3luYyBmdW5jdGlvbiBzZW5kQWN0aW9uKGFjdGlvbikge1xuICBpZiAoc3RhdGVNYW5hZ2VyLmlzTG9hZGluZygpKSByZXR1cm47XG5cbiAgY29uc3QgbG9hZGluZ01zZyA9IGFwcGVuZExvYWRpbmdNZXNzYWdlKGBFeGVjdXRpbmcgJHthY3Rpb259Li4uYCk7XG4gIHNldExvYWRpbmcodHJ1ZSwgX0FDVElPTl9MQUJFTFNbYWN0aW9uXSB8fCBgJHthY3Rpb24ucmVwbGFjZSgvXy9nLCAnICcpfVx1MjAyNmApO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgYWN0aW9uIH07XG4gICAgaWYgKGFjdGlvbiA9PT0gJ3JlY29tbWVuZF9jdXN0b21pemF0aW9ucycgJiYgd2luZG93LnF1ZXN0aW9uQW5zd2Vycykge1xuICAgICAgcGF5bG9hZC51c2VyX3ByZWZlcmVuY2VzID0gd2luZG93LnF1ZXN0aW9uQW5zd2VycztcbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBsbG1GZXRjaCgnL2FwaS9hY3Rpb24nLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlTWVzc2FnZVJlc3BvbnNlKGF3YWl0IHJlcy5qc29uKCkpO1xuXG4gICAgcmVtb3ZlTG9hZGluZ01lc3NhZ2UobG9hZGluZ01zZyk7XG5cbiAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI3NEMgRXJyb3I6ICcgKyBkYXRhLmVycm9yLCAoKSA9PiBzZW5kQWN0aW9uKGFjdGlvbikpO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAncmVjb21tZW5kX2N1c3RvbWl6YXRpb25zJykge1xuICAgICAgY29uc3QgY3VzdG9taXphdGlvbkRhdGEgPSBkYXRhLnJlc3VsdD8uY29udGV4dF9kYXRhPy5jdXN0b21pemF0aW9ucyA/PyBkYXRhLnJlc3VsdDtcbiAgICAgIGF3YWl0IGhhbmRsZUN1c3RvbWl6YXRpb25SZXNwb25zZShjdXN0b21pemF0aW9uRGF0YSk7XG4gICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdnZW5lcmF0ZV9jdicpIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRpb25Nc2cgPSBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnXHUyM0YzIEdlbmVyYXRpbmcgQ1YgZmlsZXMgKEFUUyBET0NYIFx1MjE5MiBIVE1MIFx1MjE5MiBIdW1hbiBET0NYKS4uLicpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjA7IGkrKykge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNTAwKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhdHVzUmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3N0YXR1cycpO1xuICAgICAgICAgIGNvbnN0IHN0YXR1c0RhdGEgPSBwYXJzZVN0YXR1c1Jlc3BvbnNlKGF3YWl0IHN0YXR1c1Jlcy5qc29uKCkpO1xuICAgICAgICAgIGNvbnN0IHByb2dyZXNzICAgPSBzdGF0dXNEYXRhLmdlbmVyYXRpb25fcHJvZ3Jlc3MgfHwgW107XG4gICAgICAgICAgaWYgKHByb2dyZXNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gcHJvZ3Jlc3MubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgZG9uZUNvdW50ID0gcHJvZ3Jlc3MuZmlsdGVyKHAgPT4gcC5zdGF0dXMgPT09ICdjb21wbGV0ZScpLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHByb2dyZXNzLmZpbmQocCA9PiBwLnN0YXR1cyAhPT0gJ2NvbXBsZXRlJyk7XG4gICAgICAgICAgICBjb25zdCBzdGVwTGFiZWwgPSBhY3RpdmVcbiAgICAgICAgICAgICAgPyBgJHthY3RpdmUuc3RlcC5yZXBsYWNlKC9fL2csICcgJyl9ICgke2RvbmVDb3VudCArIDF9IG9mICR7dG90YWx9KWBcbiAgICAgICAgICAgICAgOiBgJHt0b3RhbH0gb2YgJHt0b3RhbH0gY29tcGxldGVgO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBfdXBkYXRlTExNU3RhdHVzQmFyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIF91cGRhdGVMTE1TdGF0dXNCYXIodHJ1ZSwgYEdlbmVyYXRpbmcgQ1Y6ICR7c3RlcExhYmVsfVx1MjAyNmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3RlcHMgPSBwcm9ncmVzcy5tYXAocCA9PlxuICAgICAgICAgICAgICBgJHtwLnN0YXR1cyA9PT0gJ2NvbXBsZXRlJyA/ICdcdTI3MTMnIDogJ1x1MjNGMyd9ICR7cC5zdGVwLnJlcGxhY2UoL18vZywgJyAnKX0gJHtwLmVsYXBzZWRfbXMgPyBgKCR7cC5lbGFwc2VkX21zfW1zKWAgOiAnJ31gXG4gICAgICAgICAgICApLmpvaW4oJyBcdTIwMjIgJyk7XG4gICAgICAgICAgICBpZiAoZ2VuZXJhdGlvbk1zZykgZ2VuZXJhdGlvbk1zZy5xdWVyeVNlbGVjdG9yKCcuY29udGVudCcpLnRleHRDb250ZW50ID0gYEdlbmVyYXRpbmcgQ1Y6ICR7c3RlcHN9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByb2dyZXNzLmV2ZXJ5KHAgPT4gcC5zdGF0dXMgPT09ICdjb21wbGV0ZScpICYmIHByb2dyZXNzLmxlbmd0aCA+IDApIGJyZWFrO1xuICAgICAgICB9IGNhdGNoIChfZSkgeyAvKiBwb2xsaW5nIGVycm9yIFx1MjAxNCBjb250aW51ZSAqLyB9XG4gICAgICB9XG4gICAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnQ1YgZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseSEgUmV2aWV3IHlvdXIgbGF5b3V0IGJlbG93LicpO1xuICAgICAgc3RhdGVNYW5hZ2VyLnNldFRhYkRhdGEoJ2N2JywgZGF0YS5yZXN1bHQpO1xuICAgICAgcmVmcmVzaEF0c1Njb3JlKCdwb3N0X2dlbmVyYXRpb24nKTtcbiAgICAgIHN3aXRjaFRhYignbGF5b3V0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIGRhdGEucmVzdWx0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLmVycm9yKCc9PT0gU0VORCBBQ1RJT04gRVJST1IgPT09JywgYWN0aW9uLCBlcnJvcik7XG4gICAgcmVtb3ZlTG9hZGluZ01lc3NhZ2UobG9hZGluZ01zZyk7XG4gICAgaWYgKGVycm9yLm5hbWUgIT09ICdBYm9ydEVycm9yJykge1xuICAgICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI3NEMgRXJyb3I6ICcgKyBlcnJvci5tZXNzYWdlLCAoKSA9PiBzZW5kQWN0aW9uKGFjdGlvbikpO1xuICAgIH1cbiAgfVxuXG4gIHNldExvYWRpbmcoZmFsc2UpO1xuICBhd2FpdCBmZXRjaFN0YXR1cygpO1xuICBpZiAodHlwZW9mIGZldGNoQW5kRGlzcGxheUxsbUxvZyA9PT0gJ2Z1bmN0aW9uJykgZmV0Y2hBbmREaXNwbGF5TGxtTG9nKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVTZXNzaW9uKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9zYXZlJywgeyBtZXRob2Q6ICdQT1NUJyB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgaWYgKGRhdGEuc2Vzc2lvbl9maWxlKSBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTdG9yYWdlS2V5cy5TRVNTSU9OX1BBVEgsIGRhdGEuc2Vzc2lvbl9maWxlKTtcbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsICdTZXNzaW9uIHNhdmVkIHN1Y2Nlc3NmdWxseS4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI3NEMgRXJyb3Igc2F2aW5nIHNlc3Npb246ICcgKyBkYXRhLmVycm9yLCBzYXZlU2Vzc2lvbik7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcignPT09IFNBVkUgU0VTU0lPTiBFUlJPUiA9PT0nLCBlcnJvcik7XG4gICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI3NEMgRXJyb3I6ICcgKyBlcnJvci5tZXNzYWdlLCBzYXZlU2Vzc2lvbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2Zvcm1hdEJhckRhdGUodmFsdWUpIHtcbiAgY29uc3QgdGV4dCA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpO1xuICBpZiAoIXRleHQpIHJldHVybiAnJztcbiAgaWYgKC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLy50ZXN0KHRleHQpKSB7XG4gICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gdGV4dC5zcGxpdCgnLScpO1xuICAgIHJldHVybiBgJHttb250aH0vJHtkYXl9LyR7eWVhcn1gO1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKHRleHQpO1xuICBpZiAoIU51bWJlci5pc05hTihwYXJzZWQuZ2V0VGltZSgpKSkge1xuICAgIHJldHVybiBwYXJzZWQudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7XG4gIH1cbiAgcmV0dXJuIHRleHQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVBvc2l0aW9uVGl0bGUoc3RhdHVzID0ge30pIHtcbiAgY29uc3QgcG9zaXRpb25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3NpdGlvbi10aXRsZScpO1xuICBpZiAoIXBvc2l0aW9uRWwpIHJldHVybjtcblxuICBjb25zdCBmYWxsYmFja0Jyb3dzZXJUaXRsZSA9ICdDViBCdWlsZGVyIFx1MjAxNCBQcm9mZXNzaW9uYWwgV2ViIFVJJztcbiAgbGV0IGxhYmVsID0gKHN0YXR1cy5wb3NpdGlvbl9uYW1lIHx8ICcnKS50b1N0cmluZygpLnRyaW0oKTtcbiAgbGV0IGNvbXBhbnkgPSAnJztcbiAgbGV0IGRhdGVBcHBsaWVkID0gJyc7XG5cbiAgaWYgKCFsYWJlbCAmJiBzdGF0dXMuam9iX2FuYWx5c2lzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFuYWx5c2lzID0gdHlwZW9mIHN0YXR1cy5qb2JfYW5hbHlzaXMgPT09ICdzdHJpbmcnXG4gICAgICAgID8gSlNPTi5wYXJzZShjbGVhbkpzb25SZXNwb25zZShzdGF0dXMuam9iX2FuYWx5c2lzKSlcbiAgICAgICAgOiBzdGF0dXMuam9iX2FuYWx5c2lzO1xuICAgICAgY29uc3QgdGl0bGUgPSBhbmFseXNpcz8uam9iX3RpdGxlIHx8IGFuYWx5c2lzPy50aXRsZSB8fCBhbmFseXNpcz8ucG9zaXRpb25fbmFtZSB8fCAnJztcbiAgICAgIGxhYmVsID0gbm9ybWFsaXplUG9zaXRpb25MYWJlbCh0aXRsZSwgYW5hbHlzaXM/LmNvbXBhbnkpO1xuICAgICAgY29tcGFueSA9IChhbmFseXNpcz8uY29tcGFueV9uYW1lIHx8IGFuYWx5c2lzPy5jb21wYW55IHx8ICcnKS50cmltKCk7XG4gICAgICBkYXRlQXBwbGllZCA9IF9mb3JtYXRCYXJEYXRlKGFuYWx5c2lzPy5kYXRlX2FwcGxpZWQgfHwgYW5hbHlzaXM/LmFwcGxpY2F0aW9uX2RhdGUgfHwgJycpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2cud2FybignRmFpbGVkIHRvIHBhcnNlIGpvYl9hbmFseXNpcyBmb3IgdGl0bGU6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghbGFiZWwgJiYgc3RhdHVzLmpvYl9kZXNjcmlwdGlvbl90ZXh0KSB7XG4gICAgY29uc3QgcGFyc2VkID0gZXh0cmFjdFRpdGxlQW5kQ29tcGFueUZyb21Kb2JUZXh0KHN0YXR1cy5qb2JfZGVzY3JpcHRpb25fdGV4dCk7XG4gICAgbGFiZWwgPSBub3JtYWxpemVQb3NpdGlvbkxhYmVsKHBhcnNlZC50aXRsZSwgcGFyc2VkLmNvbXBhbnkpO1xuICAgIGlmICghY29tcGFueSkgY29tcGFueSA9IChwYXJzZWQuY29tcGFueSB8fCAnJykudHJpbSgpO1xuICB9XG5cbiAgcG9zaXRpb25FbC50ZXh0Q29udGVudCA9IGxhYmVsO1xuICBkb2N1bWVudC50aXRsZSA9IGxhYmVsID8gYCR7bGFiZWx9IFx1MjAxNCBDViBCdWlsZGVyYCA6IGZhbGxiYWNrQnJvd3NlclRpdGxlO1xuXG4gIGNvbnN0IHBvc2l0aW9uQ29tcGFueUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bvc2l0aW9uLWNvbXBhbnknKTtcbiAgaWYgKHBvc2l0aW9uQ29tcGFueUVsKSB7XG4gICAgY29uc3QgaW50YWtlID0gd2luZG93Ll9zdGF0dXNJbnRha2UgfHwge307XG4gICAgY29uc3QgZmluYWxDb21wYW55ID0gKGludGFrZS5jb21wYW55IHx8ICcnKS50cmltKCkgfHwgY29tcGFueTtcbiAgICBjb25zdCBmaW5hbERhdGUgPSBkYXRlQXBwbGllZCB8fCBfZm9ybWF0QmFyRGF0ZShpbnRha2UuZGF0ZV9hcHBsaWVkIHx8ICcnKTtcbiAgICBjb25zdCBzdWJ0aXRsZSA9IFtmaW5hbENvbXBhbnksIGZpbmFsRGF0ZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAgXHUwMEI3ICAnKTtcbiAgICBwb3NpdGlvbkNvbXBhbnlFbC50ZXh0Q29udGVudCA9IHN1YnRpdGxlO1xuICAgIHBvc2l0aW9uQ29tcGFueUVsLnN0eWxlLmRpc3BsYXkgPSBzdWJ0aXRsZSA/ICcnIDogJ25vbmUnO1xuICB9XG5cbiAgY29uc3QgcmVuYW1lQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlbmFtZS1zZXNzaW9uLWJ0bicpO1xuICBpZiAocmVuYW1lQnRuKSByZW5hbWVCdG4uc3R5bGUuZGlzcGxheSA9IGxhYmVsID8gJycgOiAnbm9uZSc7XG4gIGlmICh0eXBlb2YgX3VwZGF0ZVNlc3Npb25Td2l0Y2hlckhlYWRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIF91cGRhdGVTZXNzaW9uU3dpdGNoZXJIZWFkZXIoeyBwb3NpdGlvbl9uYW1lOiBsYWJlbCwgcGhhc2U6IHN0YXR1cy5waGFzZSB8fCBudWxsIH0pO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFUyBtb2R1bGUgZXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB7IHNlbmRBY3Rpb24sIHNhdmVTZXNzaW9uLCB1cGRhdGVQb3NpdGlvblRpdGxlLCBfQUNUSU9OX0xBQkVMUyB9O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvam9iLWFuYWx5c2lzLmpzXG4gKiBKb2IgYW5hbHlzaXMgb3JjaGVzdHJhdGlvbjogZmlyZXMgYW5hbHl6ZV9qb2IgYWN0aW9uLCBtZXJnZXMgcG9zdC1hbmFseXNpc1xuICogcXVlc3Rpb25zLCBhbmQgdHJhbnNpdGlvbnMgdGhlIFVJIHRvIHRoZSBhbmFseXNpcyB0YWIuXG4gKlxuICogREVQRU5ERU5DSUVTIChhbGwgb24gZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgLSBzdGF0ZU1hbmFnZXIgKHN0YXRlLW1hbmFnZXIuanMgXHUyMDE0IGlzTG9hZGluZygpL3NldFRhYkRhdGEoKSlcbiAqICAgLSBsbG1GZXRjaCwgc2V0TG9hZGluZyAoZmV0Y2gtdXRpbHMuanMpXG4gKiAgIC0gYXBwZW5kTG9hZGluZ01lc3NhZ2UsIHJlbW92ZUxvYWRpbmdNZXNzYWdlLCBhcHBlbmRNZXNzYWdlLFxuICogICAgIGFwcGVuZFJldHJ5TWVzc2FnZSwgYXBwZW5kRm9ybWF0dGVkQW5hbHlzaXMgKG1lc3NhZ2UtcXVldWUuanMpXG4gKiAgIC0gcGFyc2VNZXNzYWdlUmVzcG9uc2UgKHZhbGlkYXRvcnMuanMpXG4gKiAgIC0gYXNrUG9zdEFuYWx5c2lzUXVlc3Rpb25zIChxdWVzdGlvbnMtcGFuZWwuanMpXG4gKiAgIC0gcmVmcmVzaEF0c1Njb3JlIChhdHMtcmVmaW5lbWVudC5qcylcbiAqICAgLSBzd2l0Y2hUYWIgKHJldmlldy10YWJsZS1iYXNlLmpzLCBUaWVyIDQpXG4gKiAgIC0gZmV0Y2hTdGF0dXMgKGFwcC5qcyBvcmNoZXN0cmF0b3IsIFRpZXIgOClcbiAqICAgLSBfc2hvd0ludGFrZUNvbmZpcm1DYXJkLCBfcHJvY2VlZEFmdGVySW50YWtlIChtZXNzYWdlLWRpc3BhdGNoLmpzLCBUaWVyIDMpXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdqb2ItYW5hbHlzaXMnKTtcblxuaW1wb3J0IHsgU3RvcmFnZUtleXMgfSBmcm9tICcuL2FwaS1jbGllbnQuanMnO1xuaW1wb3J0IHsgc3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi9zdGF0ZS1tYW5hZ2VyLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQb3N0LWFuYWx5c2lzIHF1ZXN0aW9uIGhlbHBlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTm9ybWFsaXNlIGEgcmF3IHF1ZXN0aW9ucyBhcnJheSB0byBbe3F1ZXN0aW9uLCB0eXBlLCBjaG9pY2VzfV0uICovXG5mdW5jdGlvbiBub3JtYWxpemVQb3N0QW5hbHlzaXNRdWVzdGlvbnMocmF3UXVlc3Rpb25zKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyYXdRdWVzdGlvbnMpKSByZXR1cm4gW107XG4gIHJldHVybiByYXdRdWVzdGlvbnNcbiAgICAuZmlsdGVyKHEgPT4gcSAmJiB0eXBlb2YgcS5xdWVzdGlvbiA9PT0gJ3N0cmluZycgJiYgcS5xdWVzdGlvbi50cmltKCkpXG4gICAgLm1hcCgocSwgaWR4KSA9PiAoe1xuICAgICAgcXVlc3Rpb246IHEucXVlc3Rpb24udHJpbSgpLFxuICAgICAgdHlwZTogICAgIChxLnR5cGUgfHwgYGNsYXJpZmljYXRpb25fJHtpZHggKyAxfWApLnRvU3RyaW5nKCksXG4gICAgICBjaG9pY2VzOiAgQXJyYXkuaXNBcnJheShxLmNob2ljZXMpID8gcS5jaG9pY2VzIDogW10sXG4gICAgfSkpO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgbnVtYmVyZWQtbGlzdCBxdWVzdGlvbnMgZnJvbSB1bnN0cnVjdHVyZWQgYXNzaXN0YW50IHRleHQuXG4gKiBSZXR1cm5zIGF0IG1vc3QgNCBxdWVzdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTdHJ1Y3R1cmVkUXVlc3Rpb25zRnJvbUFzc2lzdGFudFRleHQodGV4dCkge1xuICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnIHx8ICF0ZXh0LnRyaW0oKSkgcmV0dXJuIFtdO1xuICBjb25zdCBub3JtYWxpemVkID0gdGV4dC5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpO1xuICBjb25zdCBibG9ja3MgPSBub3JtYWxpemVkLnNwbGl0KC9eXFxzKlxcZCtcXC5cXHMrL20pO1xuICBpZiAoYmxvY2tzLmxlbmd0aCA8PSAxKSByZXR1cm4gW107XG4gIHJldHVybiBibG9ja3NcbiAgICAuc2xpY2UoMSlcbiAgICAubWFwKChibG9jaywgaWR4KSA9PiB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IGJsb2NrLnRyaW0oKTtcbiAgICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHsgcXVlc3Rpb246IHF1ZXN0aW9uLnNsaWNlKDAsIDQwMDApLCB0eXBlOiBgY2xhcmlmaWNhdGlvbl8ke2lkeCArIDF9YCwgY2hvaWNlczogW10gfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuc2xpY2UoMCwgNCk7XG59XG5cbi8qKlxuICogTWVyZ2Ugc2VydmVyLXByb3ZpZGVkIHF1ZXN0aW9ucyB3aXRoIHRob3NlIGV4dHJhY3RlZCBmcm9tIHRoZSBhc3Npc3RhbnQgdGV4dCxcbiAqIGRlLWR1cGxpY2F0aW5nIGJ5IHF1ZXN0aW9uIHRleHQgYW5kIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlUG9zdEFuYWx5c2lzUXVlc3Rpb25zKGV4aXN0aW5nUXVlc3Rpb25zLCBpbmNvbWluZ1F1ZXN0aW9ucykge1xuICBjb25zdCBleGlzdGluZyA9IG5vcm1hbGl6ZVBvc3RBbmFseXNpc1F1ZXN0aW9ucyhleGlzdGluZ1F1ZXN0aW9ucyk7XG4gIGNvbnN0IGluY29taW5nID0gbm9ybWFsaXplUG9zdEFuYWx5c2lzUXVlc3Rpb25zKGluY29taW5nUXVlc3Rpb25zKTtcblxuICBjb25zdCBtZXJnZWQgICAgICAgID0gWy4uLmV4aXN0aW5nXTtcbiAgY29uc3Qgc2VlbkJ5UXVlc3Rpb24gPSBuZXcgU2V0KGV4aXN0aW5nLm1hcChxID0+IHEucXVlc3Rpb24udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpKSk7XG4gIGNvbnN0IHVzZWRUeXBlcyAgICAgID0gbmV3IFNldChleGlzdGluZy5tYXAocSA9PiBxLnR5cGUpKTtcblxuICBpbmNvbWluZy5mb3JFYWNoKChxLCBpZHgpID0+IHtcbiAgICBjb25zdCBrZXkgPSBxLnF1ZXN0aW9uLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgICBpZiAoIWtleSB8fCBzZWVuQnlRdWVzdGlvbi5oYXMoa2V5KSkgcmV0dXJuO1xuICAgIGxldCB0eXBlID0gcS50eXBlIHx8IGBjbGFyaWZpY2F0aW9uXyR7bWVyZ2VkLmxlbmd0aCArIGlkeCArIDF9YDtcbiAgICBpZiAodXNlZFR5cGVzLmhhcyh0eXBlKSkgdHlwZSA9IGAke3R5cGV9XyR7bWVyZ2VkLmxlbmd0aCArIGlkeCArIDF9YDtcbiAgICBtZXJnZWQucHVzaCh7IHF1ZXN0aW9uOiBxLnF1ZXN0aW9uLCB0eXBlLCBjaG9pY2VzOiBBcnJheS5pc0FycmF5KHEuY2hvaWNlcykgPyBxLmNob2ljZXMgOiBbXSB9KTtcbiAgICBzZWVuQnlRdWVzdGlvbi5hZGQoa2V5KTtcbiAgICB1c2VkVHlwZXMuYWRkKHR5cGUpO1xuICB9KTtcblxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGFuYWx5emVKb2Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5hc3luYyBmdW5jdGlvbiBhbmFseXplSm9iKCkge1xuICBpZiAoc3RhdGVNYW5hZ2VyLmlzTG9hZGluZygpKSByZXR1cm47XG5cbiAgaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5MTE1fRElTQ0xPU1VSRV9TSE9XTikpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHUyMTM5XHVGRTBGIENvbnRlbnQgeW91IHN1Ym1pdCBpcyBzZW50IHRvIHRoZSBjb25maWd1cmVkIExMTSBwcm92aWRlciBmb3IgYW5hbHlzaXMuIFJldmlldyB5b3VyIHByb3ZpZGVyXFwncyBkYXRhIHBvbGljeSBmb3IgZGV0YWlscy4nKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTdG9yYWdlS2V5cy5MTE1fRElTQ0xPU1VSRV9TSE9XTiwgJzEnKTtcbiAgfVxuXG4gIGNvbnN0IGxvYWRpbmdNc2cgPSBhcHBlbmRMb2FkaW5nTWVzc2FnZSgnQW5hbHl6aW5nIGpvYiBkZXNjcmlwdGlvbi4uLicpO1xuICBzZXRMb2FkaW5nKHRydWUsICdBbmFseXNpbmcgam9iIGRlc2NyaXB0aW9uXHUyMDI2Jyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgbGxtRmV0Y2goJy9hcGkvYWN0aW9uJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiAnYW5hbHl6ZV9qb2InIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZU1lc3NhZ2VSZXNwb25zZShhd2FpdCByZXMuanNvbigpKTtcblxuICAgIHJlbW92ZUxvYWRpbmdNZXNzYWdlKGxvYWRpbmdNc2cpO1xuXG4gICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgIGFwcGVuZFJldHJ5TWVzc2FnZSgnXHUyNzRDIEVycm9yOiAnICsgZGF0YS5lcnJvciwgYW5hbHl6ZUpvYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3VsdCAgICAgICA9IGRhdGEucmVzdWx0O1xuICAgICAgY29uc3QgYW5hbHlzaXNUZXh0ID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgPyByZXN1bHQgOiAocmVzdWx0Py50ZXh0KSB8fCBudWxsO1xuICAgICAgY29uc3QgYW5hbHlzaXNEYXRhID0gdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0ICE9PSBudWxsXG4gICAgICAgID8gKHJlc3VsdC5jb250ZXh0X2RhdGE/LmpvYl9hbmFseXNpcyA/PyByZXN1bHQpXG4gICAgICAgIDogcmVzdWx0O1xuICAgICAgY29uc3QgY29udGV4dFF1ZXN0aW9ucyA9ICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQgIT09IG51bGwpXG4gICAgICAgID8gcmVzdWx0LmNvbnRleHRfZGF0YT8ucG9zdF9hbmFseXNpc19xdWVzdGlvbnNcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3Qgc3RydWN0dXJlZFF1ZXN0aW9ucyA9IG1lcmdlUG9zdEFuYWx5c2lzUXVlc3Rpb25zKFxuICAgICAgICBjb250ZXh0UXVlc3Rpb25zLFxuICAgICAgICAoY29udGV4dFF1ZXN0aW9ucyAmJiBjb250ZXh0UXVlc3Rpb25zLmxlbmd0aCA+IDApXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogZXh0cmFjdFN0cnVjdHVyZWRRdWVzdGlvbnNGcm9tQXNzaXN0YW50VGV4dChhbmFseXNpc1RleHQpLFxuICAgICAgKTtcblxuICAgICAgaWYgKGFuYWx5c2lzVGV4dCkgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgYW5hbHlzaXNUZXh0KTtcbiAgICAgIGFwcGVuZEZvcm1hdHRlZEFuYWx5c2lzKGFuYWx5c2lzRGF0YSk7XG4gICAgICBzdGF0ZU1hbmFnZXIuc2V0VGFiRGF0YSgnYW5hbHlzaXMnLCBhbmFseXNpc0RhdGEpO1xuICAgICAgcmVmcmVzaEF0c1Njb3JlKCdhbmFseXNpcycpO1xuICAgICAgc3dpdGNoVGFiKCdhbmFseXNpcycpO1xuXG4gICAgICBjb25zdCBjb250aW51ZUFmdGVySW50YWtlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBhc2tQb3N0QW5hbHlzaXNRdWVzdGlvbnMoYW5hbHlzaXNEYXRhLCBzdHJ1Y3R1cmVkUXVlc3Rpb25zKTtcbiAgICAgIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGludGFrZVJlcyAgPSBhd2FpdCBsbG1GZXRjaCgnL2FwaS9pbnRha2UtbWV0YWRhdGEnKTtcbiAgICAgICAgY29uc3QgaW50YWtlRGF0YSA9IGF3YWl0IGludGFrZVJlcy5qc29uKCk7XG4gICAgICAgIGlmIChpbnRha2VEYXRhLmNvbmZpcm1lZCkge1xuICAgICAgICAgIGF3YWl0IF9wcm9jZWVkQWZ0ZXJJbnRha2UoY29udGludWVBZnRlckludGFrZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgX3Nob3dJbnRha2VDb25maXJtQ2FyZChjb250aW51ZUFmdGVySW50YWtlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoX2UpIHtcbiAgICAgICAgYXdhaXQgY29udGludWVBZnRlckludGFrZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cuZXJyb3IoJz09PSBBTkFMWVpFIEpPQiBFUlJPUiA9PT0nLCBlcnJvcik7XG4gICAgcmVtb3ZlTG9hZGluZ01lc3NhZ2UobG9hZGluZ01zZyk7XG4gICAgaWYgKGVycm9yLm5hbWUgIT09ICdBYm9ydEVycm9yJykge1xuICAgICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI3NEMgRXJyb3I6ICcgKyBlcnJvci5tZXNzYWdlLCBhbmFseXplSm9iKTtcbiAgICB9XG4gIH1cblxuICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbi10aXRsZSBiYXIgd2l0aCB0aGUgbGF0ZXN0IHNlc3Npb24gbmFtZSBhZnRlciBhbmFseXNpcy5cbiAgdHJ5IHtcbiAgICBjb25zdCBsYXRlc3RTdGF0dXMgPSBhd2FpdCBmZXRjaFN0YXR1cygpO1xuICAgIGlmIChsYXRlc3RTdGF0dXMgJiYgdHlwZW9mIHVwZGF0ZVBvc2l0aW9uVGl0bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHVwZGF0ZVBvc2l0aW9uVGl0bGUobGF0ZXN0U3RhdHVzKTtcbiAgICB9XG4gIH0gY2F0Y2ggKF9lKSB7IC8qIG5vbi1mYXRhbCAqLyB9XG4gIGlmICh0eXBlb2YgZmV0Y2hBbmREaXNwbGF5TGxtTG9nID09PSAnZnVuY3Rpb24nKSBmZXRjaEFuZERpc3BsYXlMbG1Mb2coKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEVTIG1vZHVsZSBleHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZXhwb3J0IHtcbiAgbm9ybWFsaXplUG9zdEFuYWx5c2lzUXVlc3Rpb25zLFxuICBleHRyYWN0U3RydWN0dXJlZFF1ZXN0aW9uc0Zyb21Bc3Npc3RhbnRUZXh0LFxuICBtZXJnZVBvc3RBbmFseXNpc1F1ZXN0aW9ucyxcbiAgYW5hbHl6ZUpvYixcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9nb2Fscy5qcyBcdTIwMTQgR2VuZXJhdGlvbiBHb2FscyBjb25maWd1cmF0aW9uIHRhYi5cbiAqXG4gKiBBbGxvd3MgdGhlIHVzZXIgdG8gc2V0IGRvY3VtZW50LWxlbmd0aCBhbmQgY2hhcmFjdGVyLWNvdW50IGNvbnN0cmFpbnRzIHRoYXRcbiAqIGFyZSBpbmplY3RlZCBpbnRvIGV2ZXJ5IExMTSBwcm9tcHQgYW5kIHVzZWQgdG8gY29udHJvbCB0aGUgZmluYWwgUERGIGxlbmd0aC5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIHBkZl9wYWdlc19lbmFibGVkICAgIFx1MjAxNCB3aGV0aGVyIHRoZSBQREYgcGFnZSBnb2FsIGlzIGFjdGl2ZVxuICogICBtYXhfcGRmX3BhZ2VzX21vZGUgICBcdTIwMTQgJ2NvbWJpbmVkJyB8ICdzcGxpdCdcbiAqICAgbWF4X3BkZl9wYWdlcyAgICAgICAgXHUyMDE0IGNvbWJpbmVkIHRvdGFsIFBERiBwYWdlIGdvYWwgKG1vZGU9Y29tYmluZWQpXG4gKiAgIG1heF9wZGZfcmVzdW1lX3BhZ2VzIFx1MjAxNCByZXN1bWUtcG9ydGlvbiBwYWdlIGdvYWwgKG1vZGU9c3BsaXQpXG4gKiAgIG1heF9wZGZfY3ZfcGFnZXMgICAgIFx1MjAxNCBDVi9wdWJsaWNhdGlvbnMgcG9ydGlvbiBwYWdlIGdvYWwgKG1vZGU9c3BsaXQpXG4gKiAgIGF0c19wYWdlc19lbmFibGVkICAgIFx1MjAxNCB3aGV0aGVyIHRoZSBBVFMgcGFnZSBnb2FsIGlzIGFjdGl2ZVxuICogICBtYXhfYXRzX3BhZ2VzICAgICAgICBcdTIwMTQgdGFyZ2V0IHBhZ2UgY291bnQgZm9yIEFUUyBwbGFpbi10ZXh0IG91dHB1dFxuICogICBhdHNfY2hhcnNfZW5hYmxlZCAgICBcdTIwMTQgd2hldGhlciB0aGUgQVRTIGNoYXJhY3RlciBsaW1pdCBpcyBhY3RpdmUgKGRlZmF1bHQgZmFsc2UpXG4gKiAgIG1heF9hdHNfY2hhcnMgICAgICAgIFx1MjAxNCBtYXhpbXVtIGNoYXJhY3RlcnMgKGluY2x1ZGluZyBzcGFjZXMpIGZvciBBVFMgdGV4dFxuICpcbiAqIEVhY2ggZ29hbCBoYXMgYSBjaGVja2JveCB0byBlbmFibGUgb3IgZGlzYWJsZSBpdDsgZGlzYWJsZWQgZ29hbHMgYXJlIG5vdFxuICogc2VudCB0byB0aGUgYmFja2VuZCBhbmQgYXJlIG5vdCBpbmplY3RlZCBpbnRvIHByb21wdHMuXG4gKlxuICogREVQRU5ERU5DSUVTIChhdmFpbGFibGUgb24gZ2xvYmFsVGhpcyB2aWEgbWFpbi5qcyk6XG4gKiAgIGFwaUNhbGwgKGFwaS1jbGllbnQuanMpXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuXG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ2dvYWxzJyk7XG5cbmNvbnN0IEdPQUxTX0RFRkFVTFRTID0ge1xuICBwZGZfcGFnZXNfZW5hYmxlZDogICAgdHJ1ZSxcbiAgbWF4X3BkZl9wYWdlc19tb2RlOiAgICdjb21iaW5lZCcsXG4gIG1heF9wZGZfcGFnZXM6ICAgICAgICAyLFxuICBtYXhfcGRmX3Jlc3VtZV9wYWdlczogMixcbiAgbWF4X3BkZl9jdl9wYWdlczogICAgIDEsXG4gIGF0c19wYWdlc19lbmFibGVkOiAgICB0cnVlLFxuICBtYXhfYXRzX3BhZ2VzOiAgICAgICAgMSxcbiAgYXRzX2NoYXJzX2VuYWJsZWQ6ICAgIGZhbHNlLFxuICBtYXhfYXRzX2NoYXJzOiAgICAgICAgNTAwMCxcbn07XG5cbi8qKiBTaGFyZWQgaW5saW5lIHN0eWxlcyAqL1xuY29uc3QgUyA9IHtcbiAgc2VjdGlvbjogICAgJ21hcmdpbi1ib3R0b206MjBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlciwjZTBlMGUwKTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjE2cHgnLFxuICBoZWFkZXI6ICAgICAnZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjEycHgnLFxuICBjaGVja2JveDogICAnd2lkdGg6MTZweDtoZWlnaHQ6MTZweDtjdXJzb3I6cG9pbnRlcjtmbGV4LXNocmluazowJyxcbiAgbGFiZWw6ICAgICAgJ2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MXJlbTtjdXJzb3I6cG9pbnRlcjttYXJnaW46MCcsXG4gIGhpbnQ6ICAgICAgICdmb250LXNpemU6MC44NzVyZW07Y29sb3I6dmFyKC0tdGV4dC1zZWNvbmRhcnksIzU1NSk7bWFyZ2luOjAgMCA4cHgnLFxuICBudW1JbnB1dDogICAncGFkZGluZzo2cHggMTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlciwjY2NjKTtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MXJlbScsXG4gIHJvdzogICAgICAgICdkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHgnLFxuICBtdXRlZDogICAgICAnY29sb3I6dmFyKC0tdGV4dC1zZWNvbmRhcnksIzU1NSknLFxuICByYWRpb0xhYmVsOiAnZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjhweDtjdXJzb3I6cG9pbnRlcicsXG4gIHJhZGlvSW5wdXQ6ICdtYXJnaW4tdG9wOjNweCcsXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVHb2Fsc1RhYigpIHtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGlmICghY29udGVudCkgcmV0dXJuO1xuXG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgY2xhc3M9XCJnb2Fscy1wYW5lbFwiIHN0eWxlPVwibWF4LXdpZHRoOjY0MHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoyOHB4IDI0cHhcIj5cbiAgICAgIDxoMiBzdHlsZT1cIm1hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjhweFwiPlx1RDgzQ1x1REZBRiBHZW5lcmF0aW9uIEdvYWxzPC9oMj5cbiAgICAgIDxwIHN0eWxlPVwiJHtTLm11dGVkfTttYXJnaW4tYm90dG9tOjI0cHg7bGluZS1oZWlnaHQ6MS41XCI+XG4gICAgICAgIFNldCBvcHRpb25hbCBsZW5ndGggY29uc3RyYWludHMgZm9yIHRoZSBnZW5lcmF0ZWQgQ1YuXG4gICAgICAgIENoZWNrIGVhY2ggZ29hbCB5b3Ugd2FudCB0byBlbmZvcmNlOyB1bmNoZWNrZWQgZ29hbHMgYXJlIGlnbm9yZWQuXG4gICAgICAgIFRoZXNlIGd1aWRlIHRoZSBBSSBhdCBldmVyeSBlZGl0aW5nIHN0YWdlIGFuZCBjb250cm9sIHRoZSBmaW5hbCBkb2N1bWVudCBsZW5ndGguXG4gICAgICA8L3A+XG5cbiAgICAgIDwhLS0gXHUyNTAwXHUyNTAwIFBERiBQYWdlIExlbmd0aCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ29hbHMtc2VjdGlvblwiIHN0eWxlPVwiJHtTLnNlY3Rpb259XCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCIke1MuaGVhZGVyfVwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImdvYWxzLXBkZi1lbmFibGVkXCJcbiAgICAgICAgICAgICAgICAgb25jaGFuZ2U9XCJnb2Fsc1RvZ2dsZVNlY3Rpb24oJ3BkZicpXCJcbiAgICAgICAgICAgICAgICAgY2hlY2tlZCBzdHlsZT1cIiR7Uy5jaGVja2JveH1cIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZ29hbHMtcGRmLWVuYWJsZWRcIiBzdHlsZT1cIiR7Uy5sYWJlbH1cIj5QREYgUGFnZSBMZW5ndGg8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cImdvYWxzLXBkZi1ib2R5XCI+XG4gICAgICAgICAgPHAgc3R5bGU9XCIke1MuaGludH1cIj5cbiAgICAgICAgICAgIFRhcmdldCBwYWdlIGNvdW50IGZvciB0aGUgaHVtYW4tcmVhZGFibGUgUERGIChlLmcuIDFcdTIwMTMzKS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjEycHhcIj5cblxuICAgICAgICAgICAgPCEtLSBcdTI1MDBcdTI1MDAgU2luZ2xlIHRvdGFsIG9wdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgLS0+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCIke1MucmFkaW9MYWJlbH1cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImdvYWxzLXBkZi1tb2RlXCIgdmFsdWU9XCJjb21iaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZ29hbHMtcGRmLW1vZGUtY29tYmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICBvbmNoYW5nZT1cImdvYWxzVXBkYXRlUGRmTW9kZSgpXCIgY2hlY2tlZFxuICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIiR7Uy5yYWRpb0lucHV0fVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5TaW5nbGUgdG90YWw8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXNpemU6MC44NzVyZW07JHtTLm11dGVkfTttYXJnaW4tdG9wOjJweFwiPlxuICAgICAgICAgICAgICAgICAgICBPbmUgcGFnZSBnb2FsIGNvdmVyaW5nIHRoZSBlbnRpcmUgZG9jdW1lbnQsIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICBwdWJsaWNhdGlvbnMgYW5kIGNpdGF0aW9ucy5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXYgaWQ9XCJnb2Fscy1wZGYtY29tYmluZWRcIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1sZWZ0OjI0cHg7bWFyZ2luLXRvcDo4cHg7JHtTLnJvd31cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiZ29hbHMtbWF4LXBkZi1wYWdlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIiBtYXg9XCIxMFwiIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke0dPQUxTX0RFRkFVTFRTLm1heF9wZGZfcGFnZXN9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDo5MHB4OyR7Uy5udW1JbnB1dH1cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIiR7Uy5tdXRlZH1cIj5wYWdlcyB0b3RhbDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBcdTI1MDBcdTI1MDAgU3BsaXQgcG9ydGlvbnMgb3B0aW9uIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCAtLT5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cIiR7Uy5yYWRpb0xhYmVsfVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiZ29hbHMtcGRmLW1vZGVcIiB2YWx1ZT1cInNwbGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJnb2Fscy1wZGYtbW9kZS1zcGxpdFwiXG4gICAgICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPVwiZ29hbHNVcGRhdGVQZGZNb2RlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIiR7Uy5yYWRpb0lucHV0fVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5TcGxpdCBwb3J0aW9uczwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowLjg3NXJlbTske1MubXV0ZWR9O21hcmdpbi10b3A6MnB4XCI+XG4gICAgICAgICAgICAgICAgICAgIFNlcGFyYXRlIHBhZ2UgZ29hbHMgZm9yIHRoZSByZXN1bWUgcG9ydGlvbiAoZXhwZXJpZW5jZSwgc2tpbGxzKVxuICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIENWL3B1YmxpY2F0aW9ucyBwb3J0aW9uIChjaXRhdGlvbnMsIHB1YmxpY2F0aW9ucykuXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8ZGl2IGlkPVwiZ29hbHMtcGRmLXNwbGl0XCJcbiAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDoyNHB4O21hcmdpbi10b3A6OHB4O2Rpc3BsYXk6bm9uZTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCIke1Mucm93fVwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPVwibWluLXdpZHRoOjE4NXB4O2ZvbnQtc2l6ZTowLjlyZW1cIj5SZXN1bWUgcG9ydGlvbjo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImdvYWxzLW1heC1wZGYtcmVzdW1lLXBhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCIgbWF4PVwiMTBcIiBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke0dPQUxTX0RFRkFVTFRTLm1heF9wZGZfcmVzdW1lX3BhZ2VzfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDo5MHB4OyR7Uy5udW1JbnB1dH1cIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiJHtTLm11dGVkfVwiPnBhZ2VzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCIke1Mucm93fVwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPVwibWluLXdpZHRoOjE4NXB4O2ZvbnQtc2l6ZTowLjlyZW1cIj5DViAvIFB1YmxpY2F0aW9ucyBwb3J0aW9uOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiZ29hbHMtbWF4LXBkZi1jdi1wYWdlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiIG1heD1cIjEwXCIgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtHT0FMU19ERUZBVUxUUy5tYXhfcGRmX2N2X3BhZ2VzfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDo5MHB4OyR7Uy5udW1JbnB1dH1cIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiJHtTLm11dGVkfVwiPnBhZ2VzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9kaXY+PCEtLSBlbmQgbW9kZSBvcHRpb25zIGNvbHVtbiAtLT5cbiAgICAgICAgPC9kaXY+PCEtLSBlbmQgZ29hbHMtcGRmLWJvZHkgLS0+XG4gICAgICA8L2Rpdj48IS0tIGVuZCBQREYgc2VjdGlvbiAtLT5cblxuICAgICAgPCEtLSBcdTI1MDBcdTI1MDAgQVRTIFBsYWluLVRleHQgUGFnZSBMZW5ndGggXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImdvYWxzLXNlY3Rpb25cIiBzdHlsZT1cIiR7Uy5zZWN0aW9ufVwiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiJHtTLmhlYWRlcn1cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJnb2Fscy1hdHMtcGFnZXMtZW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgIG9uY2hhbmdlPVwiZ29hbHNUb2dnbGVTZWN0aW9uKCdhdHMtcGFnZXMnKVwiXG4gICAgICAgICAgICAgICAgIGNoZWNrZWQgc3R5bGU9XCIke1MuY2hlY2tib3h9XCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImdvYWxzLWF0cy1wYWdlcy1lbmFibGVkXCIgc3R5bGU9XCIke1MubGFiZWx9XCI+QVRTIFBsYWluLVRleHQgUGFnZSBMZW5ndGg8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cImdvYWxzLWF0cy1wYWdlcy1ib2R5XCI+XG4gICAgICAgICAgPHAgc3R5bGU9XCIke1MuaGludH1cIj5cbiAgICAgICAgICAgIFRhcmdldCBudW1iZXIgb2YgcGFnZXMgZm9yIHRoZSBBVFMtb3B0aW1pc2VkIHBsYWluLXRleHQgb3V0cHV0ICh0eXBpY2FsbHkgMVx1MjAxMzIpLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiJHtTLnJvd31cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJnb2Fscy1tYXgtYXRzLXBhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICBtaW49XCIxXCIgbWF4PVwiNVwiIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7R09BTFNfREVGQVVMVFMubWF4X2F0c19wYWdlc31cIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6OTBweDske1MubnVtSW5wdXR9XCI+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIiR7Uy5tdXRlZH1cIj5wYWdlczwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBcdTI1MDBcdTI1MDAgQVRTIENoYXJhY3RlciBDb3VudCAoZGlzYWJsZWQgYnkgZGVmYXVsdCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImdvYWxzLXNlY3Rpb25cIiBzdHlsZT1cIiR7Uy5zZWN0aW9ufTttYXJnaW4tYm90dG9tOjI4cHhcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIiR7Uy5oZWFkZXJ9XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiZ29hbHMtYXRzLWNoYXJzLWVuYWJsZWRcIlxuICAgICAgICAgICAgICAgICBvbmNoYW5nZT1cImdvYWxzVG9nZ2xlU2VjdGlvbignYXRzLWNoYXJzJylcIlxuICAgICAgICAgICAgICAgICBzdHlsZT1cIiR7Uy5jaGVja2JveH1cIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZ29hbHMtYXRzLWNoYXJzLWVuYWJsZWRcIiBzdHlsZT1cIiR7Uy5sYWJlbH1cIj5BVFMgQ2hhcmFjdGVyIENvdW50IExpbWl0PC9sYWJlbD5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjhyZW07JHtTLm11dGVkfTtmb250LXN0eWxlOml0YWxpY1wiPihvcHRpb25hbCBcdTIwMTQgdW5jb21tb24pPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cImdvYWxzLWF0cy1jaGFycy1ib2R5XCIgc3R5bGU9XCJvcGFjaXR5OjAuNDtwb2ludGVyLWV2ZW50czpub25lXCI+XG4gICAgICAgICAgPHAgc3R5bGU9XCIke1MuaGludH1cIj5cbiAgICAgICAgICAgIE1heGltdW0gY2hhcmFjdGVycyAoaW5jbHVkaW5nIHNwYWNlcykgaW4gdGhlIEFUUyBwbGFpbi10ZXh0IG91dHB1dC5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIiR7Uy5yb3d9XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiZ29hbHMtbWF4LWF0cy1jaGFyc1wiXG4gICAgICAgICAgICAgICAgICAgbWluPVwiNTAwXCIgbWF4PVwiMjAwMDBcIiBzdGVwPVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7R09BTFNfREVGQVVMVFMubWF4X2F0c19jaGFyc31cIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTEwcHg7JHtTLm51bUlucHV0fVwiPlxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCIke1MubXV0ZWR9XCI+Y2hhcmFjdGVyczwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBcdTI1MDBcdTI1MDAgR2VuZXJhdGlvbiBTZXR0aW5ncyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ29hbHMtc2VjdGlvblwiIHN0eWxlPVwiJHtTLnNlY3Rpb259O21hcmdpbi1ib3R0b206MjhweFwiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiJHtTLmhlYWRlcn1cIj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToxLjFyZW1cIj5cdTI2OTlcdUZFMEY8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCIke1MubGFiZWx9XCI+R2VuZXJhdGlvbiBTZXR0aW5nczwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwIHN0eWxlPVwiJHtTLmhpbnR9XCI+XG4gICAgICAgICAgQ29udHJvbHMgdGhlIHNoYXBlIG9mIHRoZSBnZW5lcmF0ZWQgQ1YgXHUyMDE0IGFwcGxpZWQgZHVyaW5nIGN1c3RvbWl6YXRpb24gYW5kIHJld3JpdGUgc3RlcHMuXG4gICAgICAgIDwvcD5cblxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTRweFwiPlxuICAgICAgICAgIDwhLS0gTWF4IHNraWxscyAtLT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcFwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImdvYWxzLW1heC1za2lsbHMtaW5wdXRcIiBzdHlsZT1cImZvbnQtc2l6ZTowLjlyZW07Y29sb3I6IzRiNTU2Mzt3aGl0ZS1zcGFjZTpub3dyYXA7bWluLXdpZHRoOjE2MHB4XCI+XG4gICAgICAgICAgICAgIE1heCBza2lsbHMgaW4gQ1Y6XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIGlkPVwiZ29hbHMtbWF4LXNraWxscy1pbnB1dFwiIG1pbj1cIjFcIiBtYXg9XCI2MFwiIHN0ZXA9XCIxXCIgdmFsdWU9XCIyMFwiXG4gICAgICAgICAgICAgICAgICAgb25pbnB1dD1cImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1tYXgtc2tpbGxzLXZhbHVlJykudGV4dENvbnRlbnQ9dGhpcy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9XCJnb2Fsc0F1dG9TYXZlU2V0dGluZ3MoKVwiXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmbGV4OjE7bWluLXdpZHRoOjEyMHB4O2FjY2VudC1jb2xvcjojM2I4MmY2XCI+XG4gICAgICAgICAgICA8c3BhbiBpZD1cImdvYWxzLW1heC1za2lsbHMtdmFsdWVcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMWUyOTNiO21pbi13aWR0aDoyZW07dGV4dC1hbGlnbjpyaWdodFwiPjIwPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC44MmVtOyR7Uy5tdXRlZH1cIj4oZGVmYXVsdDogMjApPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBTa2lsbHMgc2VjdGlvbiB0aXRsZSAtLT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcFwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImdvYWxzLXNraWxscy10aXRsZS1zZWxlY3RcIiBzdHlsZT1cImZvbnQtc2l6ZTowLjlyZW07Y29sb3I6IzRiNTU2Mzt3aGl0ZS1zcGFjZTpub3dyYXA7bWluLXdpZHRoOjE2MHB4XCI+XG4gICAgICAgICAgICAgIFNraWxscyBzZWN0aW9uIHRpdGxlOlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJnb2Fscy1za2lsbHMtdGl0bGUtc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9XCJnb2Fsc09uU2tpbGxzVGl0bGVTZWxlY3QoKVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOjAuOWVtO2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjRweCA4cHg7Y29sb3I6IzFlMjkzYlwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiU2tpbGxzXCI+U2tpbGxzPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJUZWNobmljYWwgU2tpbGxzXCI+VGVjaG5pY2FsIFNraWxsczwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiS2V5IFNraWxsc1wiPktleSBTa2lsbHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkNvcmUgU2tpbGxzXCI+Q29yZSBTa2lsbHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIl9fY3VzdG9tX19cIj5DdXN0b21cdTIwMjY8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJnb2Fscy1za2lsbHMtdGl0bGUtY3VzdG9tXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBjdXN0b20gdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPVwiZ29hbHNBdXRvU2F2ZVNldHRpbmdzKClcIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTpub25lO2ZvbnQtc2l6ZTowLjllbTtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzo0cHggOHB4O2NvbG9yOiMxZTI5M2I7bWluLXdpZHRoOjE2MHB4XCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBpZD1cImdvYWxzLXNldHRpbmdzLXN0YXR1c1wiIHN0eWxlPVwiZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MC44MnJlbTt0cmFuc2l0aW9uOmNvbG9yIDAuMnNcIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBzdHlsZT1cIiR7Uy5yb3d9O2dhcDoxNHB4XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJzYXZlLWdvYWxzLWJ0blwiXG4gICAgICAgICAgICAgICAgb25jbGljaz1cInNhdmVHZW5lcmF0aW9uR29hbHMoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOjhweCAyMnB4O2ZvbnQtc2l6ZTowLjk1cmVtXCI+XG4gICAgICAgICAgU2F2ZSBHb2Fsc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPHNwYW4gaWQ9XCJnb2Fscy1zdGF0dXNcIlxuICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTowLjg3NXJlbTt0cmFuc2l0aW9uOmNvbG9yIDAuMnNcIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcblxuICAvLyBSZXN0b3JlIHNhdmVkIGdvYWxzIGZyb20gdGhlIGJhY2tlbmQgc2Vzc2lvbiBzdGF0ZS5cbiAgYXdhaXQgX2xvYWRHb2Fsc0Zyb21TdGF0dXMoKTtcbn1cblxuLyoqXG4gKiBUb2dnbGUgdGhlIGVuYWJsZWQvZGlzYWJsZWQgYXBwZWFyYW5jZSBvZiBhIGdvYWwgc2VjdGlvbi5cbiAqIEV4cG9ydGVkIHNvIHRoZSBpbmxpbmUgb25jaGFuZ2U9XCJnb2Fsc1RvZ2dsZVNlY3Rpb24oLi4uKVwiIGhhbmRsZXJzIHdvcmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnb2Fsc1RvZ2dsZVNlY3Rpb24oc2VjdGlvbikge1xuICBjb25zdCBNQVAgPSB7XG4gICAgJ3BkZic6ICAgICAgIHsgY2I6ICdnb2Fscy1wZGYtZW5hYmxlZCcsICAgICAgIGJvZHk6ICdnb2Fscy1wZGYtYm9keScgICAgICAgfSxcbiAgICAnYXRzLXBhZ2VzJzogeyBjYjogJ2dvYWxzLWF0cy1wYWdlcy1lbmFibGVkJywgYm9keTogJ2dvYWxzLWF0cy1wYWdlcy1ib2R5JyB9LFxuICAgICdhdHMtY2hhcnMnOiB7IGNiOiAnZ29hbHMtYXRzLWNoYXJzLWVuYWJsZWQnLCBib2R5OiAnZ29hbHMtYXRzLWNoYXJzLWJvZHknIH0sXG4gIH07XG4gIGNvbnN0IHNlbCA9IE1BUFtzZWN0aW9uXTtcbiAgaWYgKCFzZWwpIHJldHVybjtcbiAgY29uc3QgY2IgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbC5jYik7XG4gIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWwuYm9keSk7XG4gIGlmICghY2IgfHwgIWJvZHkpIHJldHVybjtcbiAgYm9keS5zdHlsZS5vcGFjaXR5ICAgICAgID0gY2IuY2hlY2tlZCA/ICcxJyAgICA6ICcwLjQnO1xuICBib2R5LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBjYi5jaGVja2VkID8gJ2F1dG8nIDogJ25vbmUnO1xufVxuXG4vKipcbiAqIFNob3cvaGlkZSBjb21iaW5lZCB2cyBzcGxpdCBQREYgcGFnZSBpbnB1dHMgd2hlbiB0aGUgbW9kZSByYWRpbyBjaGFuZ2VzLlxuICogRXhwb3J0ZWQgc28gdGhlIGlubGluZSBvbmNoYW5nZT1cImdvYWxzVXBkYXRlUGRmTW9kZSgpXCIgaGFuZGxlciB3b3Jrcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdvYWxzVXBkYXRlUGRmTW9kZSgpIHtcbiAgY29uc3QgY29tYmluZWRSYWRpbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1wZGYtbW9kZS1jb21iaW5lZCcpO1xuICBjb25zdCBpc0NvbWJpbmVkICAgID0gY29tYmluZWRSYWRpbz8uY2hlY2tlZCA/PyB0cnVlO1xuICBjb25zdCBjb21iaW5lZERpdiAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLXBkZi1jb21iaW5lZCcpO1xuICBjb25zdCBzcGxpdERpdiAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLXBkZi1zcGxpdCcpO1xuICBpZiAoY29tYmluZWREaXYpIGNvbWJpbmVkRGl2LnN0eWxlLmRpc3BsYXkgPSBpc0NvbWJpbmVkID8gJ2ZsZXgnICAgOiAnbm9uZSc7XG4gIGlmIChzcGxpdERpdikgICAgc3BsaXREaXYuc3R5bGUuZGlzcGxheSAgICA9IGlzQ29tYmluZWQgPyAnbm9uZScgICA6ICdmbGV4Jztcbn1cblxuLyoqXG4gKiBGZXRjaCBjdXJyZW50IGdlbmVyYXRpb24gZ29hbHMgZnJvbSB0aGUgc2Vzc2lvbiBhbmQgcG9wdWxhdGUgdGhlIGZvcm0gaW5wdXRzLlxuICogQHByaXZhdGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gX2xvYWRHb2Fsc0Zyb21TdGF0dXMoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSAgPSBhd2FpdCBhcGlDYWxsKCdHRVQnLCAnL2FwaS9zdGF0dXMnKTtcbiAgICBjb25zdCBnb2FscyA9IGRhdGE/LmdlbmVyYXRpb25fZ29hbHM7XG4gICAgaWYgKCFnb2FscykgcmV0dXJuO1xuXG4gICAgLy8gXHUyNTAwXHUyNTAwIEVuYWJsZWQgY2hlY2tib3hlcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBjb25zdCBwZGZFbmFibGVkQ2IgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1wZGYtZW5hYmxlZCcpO1xuICAgIGNvbnN0IGF0c1BhZ2VFbmFibGVkQ2IgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLWF0cy1wYWdlcy1lbmFibGVkJyk7XG4gICAgY29uc3QgYXRzQ2hhcnNFbmFibGVkQ2IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtYXRzLWNoYXJzLWVuYWJsZWQnKTtcblxuICAgIGlmIChwZGZFbmFibGVkQ2IgICAgICAmJiBnb2Fscy5wZGZfcGFnZXNfZW5hYmxlZCAgIT0gbnVsbCkgcGRmRW5hYmxlZENiLmNoZWNrZWQgICAgICA9IGdvYWxzLnBkZl9wYWdlc19lbmFibGVkO1xuICAgIGlmIChhdHNQYWdlRW5hYmxlZENiICAmJiBnb2Fscy5hdHNfcGFnZXNfZW5hYmxlZCAgIT0gbnVsbCkgYXRzUGFnZUVuYWJsZWRDYi5jaGVja2VkICA9IGdvYWxzLmF0c19wYWdlc19lbmFibGVkO1xuICAgIGlmIChhdHNDaGFyc0VuYWJsZWRDYiAmJiBnb2Fscy5hdHNfY2hhcnNfZW5hYmxlZCAgIT0gbnVsbCkgYXRzQ2hhcnNFbmFibGVkQ2IuY2hlY2tlZCA9IGdvYWxzLmF0c19jaGFyc19lbmFibGVkO1xuXG4gICAgZ29hbHNUb2dnbGVTZWN0aW9uKCdwZGYnKTtcbiAgICBnb2Fsc1RvZ2dsZVNlY3Rpb24oJ2F0cy1wYWdlcycpO1xuICAgIGdvYWxzVG9nZ2xlU2VjdGlvbignYXRzLWNoYXJzJyk7XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgUERGIG1vZGUgcmFkaW8gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAgaWYgKGdvYWxzLm1heF9wZGZfcGFnZXNfbW9kZSkge1xuICAgICAgY29uc3QgcmFkaW8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgaW5wdXRbbmFtZT1cImdvYWxzLXBkZi1tb2RlXCJdW3ZhbHVlPVwiJHtnb2Fscy5tYXhfcGRmX3BhZ2VzX21vZGV9XCJdYCk7XG4gICAgICBpZiAocmFkaW8pIHJhZGlvLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgZ29hbHNVcGRhdGVQZGZNb2RlKCk7XG4gICAgfVxuXG4gICAgLy8gXHUyNTAwXHUyNTAwIE51bWVyaWMgdmFsdWVzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICAgIGNvbnN0IHBkZklucHV0ICAgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1tYXgtcGRmLXBhZ2VzJyk7XG4gICAgY29uc3QgcGRmUmVzdW1lSW5wdXQgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLW1heC1wZGYtcmVzdW1lLXBhZ2VzJyk7XG4gICAgY29uc3QgcGRmQ3ZJbnB1dCAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLW1heC1wZGYtY3YtcGFnZXMnKTtcbiAgICBjb25zdCBhdHNQYWdlSW5wdXQgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtbWF4LWF0cy1wYWdlcycpO1xuICAgIGNvbnN0IGF0c0NoYXJJbnB1dCAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1tYXgtYXRzLWNoYXJzJyk7XG5cbiAgICBpZiAocGRmSW5wdXQgICAgICAgJiYgZ29hbHMubWF4X3BkZl9wYWdlcyAgICAgICAgICE9IG51bGwpIHBkZklucHV0LnZhbHVlICAgICAgID0gZ29hbHMubWF4X3BkZl9wYWdlcztcbiAgICBpZiAocGRmUmVzdW1lSW5wdXQgJiYgZ29hbHMubWF4X3BkZl9yZXN1bWVfcGFnZXMgICE9IG51bGwpIHBkZlJlc3VtZUlucHV0LnZhbHVlID0gZ29hbHMubWF4X3BkZl9yZXN1bWVfcGFnZXM7XG4gICAgaWYgKHBkZkN2SW5wdXQgICAgICYmIGdvYWxzLm1heF9wZGZfY3ZfcGFnZXMgICAgICAhPSBudWxsKSBwZGZDdklucHV0LnZhbHVlICAgICA9IGdvYWxzLm1heF9wZGZfY3ZfcGFnZXM7XG4gICAgaWYgKGF0c1BhZ2VJbnB1dCAgICYmIGdvYWxzLm1heF9hdHNfcGFnZXMgICAgICAgICAhPSBudWxsKSBhdHNQYWdlSW5wdXQudmFsdWUgICA9IGdvYWxzLm1heF9hdHNfcGFnZXM7XG4gICAgaWYgKGF0c0NoYXJJbnB1dCAgICYmIGdvYWxzLm1heF9hdHNfY2hhcnMgICAgICAgICAhPSBudWxsKSBhdHNDaGFySW5wdXQudmFsdWUgICA9IGdvYWxzLm1heF9hdHNfY2hhcnM7XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgR2VuZXJhdGlvbiBTZXR0aW5ncyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBjb25zdCBtYXhTa2lsbHNTbGlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtbWF4LXNraWxscy1pbnB1dCcpO1xuICAgIGNvbnN0IG1heFNraWxsc0xhYmVsICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1tYXgtc2tpbGxzLXZhbHVlJyk7XG4gICAgaWYgKG1heFNraWxsc1NsaWRlciAmJiBkYXRhLm1heF9za2lsbHMgIT0gbnVsbCkge1xuICAgICAgbWF4U2tpbGxzU2xpZGVyLnZhbHVlID0gZGF0YS5tYXhfc2tpbGxzO1xuICAgICAgaWYgKG1heFNraWxsc0xhYmVsKSBtYXhTa2lsbHNMYWJlbC50ZXh0Q29udGVudCA9IGRhdGEubWF4X3NraWxscztcbiAgICB9XG4gICAgY29uc3Qga25vd25UaXRsZXMgPSBbJ1NraWxscycsICdUZWNobmljYWwgU2tpbGxzJywgJ0tleSBTa2lsbHMnLCAnQ29yZSBTa2lsbHMnXTtcbiAgICBjb25zdCBjdXJyZW50VGl0bGUgPSBkYXRhLnNraWxsc19zZWN0aW9uX3RpdGxlIHx8ICdTa2lsbHMnO1xuICAgIGNvbnN0IHRpdGxlU2VsZWN0ICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1za2lsbHMtdGl0bGUtc2VsZWN0Jyk7XG4gICAgY29uc3QgdGl0bGVDdXN0b20gID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLXNraWxscy10aXRsZS1jdXN0b20nKTtcbiAgICBpZiAodGl0bGVTZWxlY3QpIHtcbiAgICAgIGNvbnN0IGlzS25vd24gPSBrbm93blRpdGxlcy5pbmNsdWRlcyhjdXJyZW50VGl0bGUpO1xuICAgICAgdGl0bGVTZWxlY3QudmFsdWUgPSBpc0tub3duID8gY3VycmVudFRpdGxlIDogJ19fY3VzdG9tX18nO1xuICAgICAgaWYgKHRpdGxlQ3VzdG9tKSB7XG4gICAgICAgIHRpdGxlQ3VzdG9tLnN0eWxlLmRpc3BsYXkgPSBpc0tub3duID8gJ25vbmUnIDogJyc7XG4gICAgICAgIGlmICghaXNLbm93bikgdGl0bGVDdXN0b20udmFsdWUgPSBjdXJyZW50VGl0bGU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybignRmFpbGVkIHRvIGxvYWQgZ2VuZXJhdGlvbiBnb2FscyBmcm9tIGJhY2tlbmQ6JywgZXJyKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWQgdGhlIGZvcm0gaW5wdXRzLCB2YWxpZGF0ZSwgYW5kIFBPU1QgdG8gL2FwaS9nZW5lcmF0aW9uLWdvYWxzLlxuICogRXhwb3NlZCBvbiBnbG9iYWxUaGlzIHNvIHRoZSBpbmxpbmUgb25jbGljaz1cInNhdmVHZW5lcmF0aW9uR29hbHMoKVwiIHdvcmtzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZUdlbmVyYXRpb25Hb2FscygpIHtcbiAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtc3RhdHVzJyk7XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFJlYWQgZW5hYmxlZCBmbGFncyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgY29uc3QgcGRmRW5hYmxlZCAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLXBkZi1lbmFibGVkJyk/LmNoZWNrZWQgICAgICA/PyB0cnVlO1xuICBjb25zdCBhdHNQYWdlRW5hYmxlZCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtYXRzLXBhZ2VzLWVuYWJsZWQnKT8uY2hlY2tlZCA/PyB0cnVlO1xuICBjb25zdCBhdHNDaGFyc0VuYWJsZWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtYXRzLWNoYXJzLWVuYWJsZWQnKT8uY2hlY2tlZCA/PyBmYWxzZTtcblxuICAvLyBcdTI1MDBcdTI1MDAgUmVhZCBQREYgbW9kZSBhbmQgdmFsdWVzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICBjb25zdCBwZGZNb2RlICAgICAgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9XCJnb2Fscy1wZGYtbW9kZVwiXTpjaGVja2VkJyk/LnZhbHVlID8/ICdjb21iaW5lZCc7XG4gIGNvbnN0IHBkZlBhZ2VzICAgICAgID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLW1heC1wZGYtcGFnZXMnKT8udmFsdWUsICAgICAgICAxMCk7XG4gIGNvbnN0IHBkZlJlc3VtZVBhZ2VzID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLW1heC1wZGYtcmVzdW1lLXBhZ2VzJyk/LnZhbHVlLCAxMCk7XG4gIGNvbnN0IHBkZkN2UGFnZXMgICAgID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLW1heC1wZGYtY3YtcGFnZXMnKT8udmFsdWUsICAgICAxMCk7XG4gIGNvbnN0IGF0c1BhZ2VzICAgICAgID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLW1heC1hdHMtcGFnZXMnKT8udmFsdWUsICAgICAgICAxMCk7XG4gIGNvbnN0IGF0c0NoYXJzICAgICAgID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLW1heC1hdHMtY2hhcnMnKT8udmFsdWUsICAgICAgICAxMCk7XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFZhbGlkYXRlIG9ubHkgZW5hYmxlZCBmaWVsZHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIGlmIChwZGZFbmFibGVkKSB7XG4gICAgaWYgKHBkZk1vZGUgPT09ICdjb21iaW5lZCcpIHtcbiAgICAgIGlmICghcGRmUGFnZXMgfHwgcGRmUGFnZXMgPCAxIHx8IHBkZlBhZ2VzID4gMTApIHtcbiAgICAgICAgX3NldFN0YXR1cyhzdGF0dXNFbCwgJ1x1MjZBMFx1RkUwRiBQREYgcGFnZXMgbXVzdCBiZSAxXHUyMDEzMTAuJywgJ3dhcm4nKTsgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXBkZlJlc3VtZVBhZ2VzIHx8IHBkZlJlc3VtZVBhZ2VzIDwgMSB8fCBwZGZSZXN1bWVQYWdlcyA+IDEwKSB7XG4gICAgICAgIF9zZXRTdGF0dXMoc3RhdHVzRWwsICdcdTI2QTBcdUZFMEYgUmVzdW1lIHBvcnRpb24gcGFnZXMgbXVzdCBiZSAxXHUyMDEzMTAuJywgJ3dhcm4nKTsgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFwZGZDdlBhZ2VzIHx8IHBkZkN2UGFnZXMgPCAxIHx8IHBkZkN2UGFnZXMgPiAxMCkge1xuICAgICAgICBfc2V0U3RhdHVzKHN0YXR1c0VsLCAnXHUyNkEwXHVGRTBGIENWIC8gUHVibGljYXRpb25zIHBvcnRpb24gcGFnZXMgbXVzdCBiZSAxXHUyMDEzMTAuJywgJ3dhcm4nKTsgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYXRzUGFnZUVuYWJsZWQgICYmICghYXRzUGFnZXMgIHx8IGF0c1BhZ2VzICA8IDEgIHx8IGF0c1BhZ2VzICA+IDUpKSAgICAgeyBfc2V0U3RhdHVzKHN0YXR1c0VsLCAnXHUyNkEwXHVGRTBGIEFUUyBwYWdlcyBtdXN0IGJlIDFcdTIwMTM1LicsICAgICAgICAgICd3YXJuJyk7IHJldHVybjsgfVxuICBpZiAoYXRzQ2hhcnNFbmFibGVkICYmICghYXRzQ2hhcnMgIHx8IGF0c0NoYXJzICA8IDUwMCB8fCBhdHNDaGFycyA+IDIwMDAwKSkgeyBfc2V0U3RhdHVzKHN0YXR1c0VsLCAnXHUyNkEwXHVGRTBGIENoYXJhY3RlcnMgbXVzdCBiZSA1MDBcdTIwMTMyMCAwMDAuJywgJ3dhcm4nKTsgcmV0dXJuOyB9XG5cbiAgLy8gXHUyNTAwXHUyNTAwIEJ1aWxkIHBheWxvYWQgKGluY2x1ZGUgZW5hYmxlZCBmbGFncyArIGFjdGl2ZSB2YWx1ZXMgb25seSkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgcGRmX3BhZ2VzX2VuYWJsZWQ6ICBwZGZFbmFibGVkLFxuICAgIGF0c19wYWdlc19lbmFibGVkOiAgYXRzUGFnZUVuYWJsZWQsXG4gICAgYXRzX2NoYXJzX2VuYWJsZWQ6ICBhdHNDaGFyc0VuYWJsZWQsXG4gICAgbWF4X3BkZl9wYWdlc19tb2RlOiBwZGZNb2RlLFxuICB9O1xuXG4gIGlmIChwZGZFbmFibGVkKSB7XG4gICAgaWYgKHBkZk1vZGUgPT09ICdjb21iaW5lZCcpIHtcbiAgICAgIHBheWxvYWQubWF4X3BkZl9wYWdlcyA9IHBkZlBhZ2VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXlsb2FkLm1heF9wZGZfcmVzdW1lX3BhZ2VzID0gcGRmUmVzdW1lUGFnZXM7XG4gICAgICBwYXlsb2FkLm1heF9wZGZfY3ZfcGFnZXMgICAgID0gcGRmQ3ZQYWdlcztcbiAgICB9XG4gIH1cbiAgaWYgKGF0c1BhZ2VFbmFibGVkKSAgcGF5bG9hZC5tYXhfYXRzX3BhZ2VzID0gYXRzUGFnZXM7XG4gIGlmIChhdHNDaGFyc0VuYWJsZWQpIHBheWxvYWQubWF4X2F0c19jaGFycyA9IGF0c0NoYXJzO1xuXG4gIF9zZXRTdGF0dXMoc3RhdHVzRWwsICdTYXZpbmdcdTIwMjYnLCAnaW5mbycpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBpQ2FsbCgnUE9TVCcsICcvYXBpL2dlbmVyYXRpb24tZ29hbHMnLCBwYXlsb2FkKTtcbiAgICBfc2V0U3RhdHVzKHN0YXR1c0VsLCAnXHUyNzEzIFNhdmVkJywgJ29rJyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnJzsgfSwgMzAwMCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcignRmFpbGVkIHRvIHNhdmUgZ2VuZXJhdGlvbiBnb2FsczonLCBlcnIpO1xuICAgIF9zZXRTdGF0dXMoc3RhdHVzRWwsICdTYXZlIGZhaWxlZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnZXJyb3InKTtcbiAgfVxufVxuXG4vKipcbiAqIFNob3cvaGlkZSB0aGUgY3VzdG9tLXRpdGxlIGlucHV0IHdoZW4gdGhlIHNraWxscy10aXRsZSBzZWxlY3QgY2hhbmdlcy5cbiAqIEV4cG9ydGVkIHNvIHRoZSBpbmxpbmUgb25jaGFuZ2U9XCJnb2Fsc09uU2tpbGxzVGl0bGVTZWxlY3QoKVwiIGhhbmRsZXIgd29ya3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnb2Fsc09uU2tpbGxzVGl0bGVTZWxlY3QoKSB7XG4gIGNvbnN0IHNlbCAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1za2lsbHMtdGl0bGUtc2VsZWN0Jyk7XG4gIGNvbnN0IGN1c3RvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1za2lsbHMtdGl0bGUtY3VzdG9tJyk7XG4gIGlmICghc2VsKSByZXR1cm47XG4gIGlmIChzZWwudmFsdWUgPT09ICdfX2N1c3RvbV9fJykge1xuICAgIGlmIChjdXN0b20pIHsgY3VzdG9tLnN0eWxlLmRpc3BsYXkgPSAnJzsgY3VzdG9tLmZvY3VzKCk7IH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoY3VzdG9tKSBjdXN0b20uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBnb2Fsc0F1dG9TYXZlU2V0dGluZ3MoKTtcbiAgfVxufVxuXG4vKipcbiAqIEF1dG8tc2F2ZSB0aGUgZ2VuZXJhdGlvbiBzZXR0aW5ncyAobWF4X3NraWxscyArIHNraWxsc19zZWN0aW9uX3RpdGxlKVxuICogdmlhIFBPU1QgL2FwaS9nZW5lcmF0aW9uLXNldHRpbmdzIHdpdGhvdXQgYmxvY2tpbmcuXG4gKiBFeHBvcnRlZCBzbyBpbmxpbmUgb25jaGFuZ2U9XCJnb2Fsc0F1dG9TYXZlU2V0dGluZ3MoKVwiIGhhbmRsZXJzIHdvcmsuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnb2Fsc0F1dG9TYXZlU2V0dGluZ3MoKSB7XG4gIGNvbnN0IHN0YXR1c0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLXNldHRpbmdzLXN0YXR1cycpO1xuICBjb25zdCBzbGlkZXIgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2Fscy1tYXgtc2tpbGxzLWlucHV0Jyk7XG4gIGNvbnN0IHNlbCAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvYWxzLXNraWxscy10aXRsZS1zZWxlY3QnKTtcbiAgY29uc3QgY3VzdG9tICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29hbHMtc2tpbGxzLXRpdGxlLWN1c3RvbScpO1xuXG4gIGNvbnN0IG1heFNraWxscyA9IHNsaWRlciA/IHBhcnNlSW50KHNsaWRlci52YWx1ZSwgMTApIDogbnVsbDtcbiAgY29uc3QgdGl0bGUgICAgID0gc2VsPy52YWx1ZSA9PT0gJ19fY3VzdG9tX18nXG4gICAgPyAoY3VzdG9tPy52YWx1ZT8udHJpbSgpIHx8IG51bGwpXG4gICAgOiAoc2VsPy52YWx1ZSB8fCBudWxsKTtcblxuICBpZiAoIW1heFNraWxscyAmJiAhdGl0bGUpIHJldHVybjtcblxuICBjb25zdCBwYXlsb2FkID0ge307XG4gIGlmIChtYXhTa2lsbHMgJiYgbWF4U2tpbGxzID49IDEpIHBheWxvYWQubWF4X3NraWxscyAgICAgICAgICA9IG1heFNraWxscztcbiAgaWYgKHRpdGxlKSAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5za2lsbHNfc2VjdGlvbl90aXRsZSA9IHRpdGxlO1xuXG4gIF9zZXRTdGF0dXMoc3RhdHVzRWwsICdTYXZpbmdcdTIwMjYnLCAnaW5mbycpO1xuICB0cnkge1xuICAgIGF3YWl0IGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9nZW5lcmF0aW9uLXNldHRpbmdzJywgcGF5bG9hZCk7XG4gICAgX3NldFN0YXR1cyhzdGF0dXNFbCwgJ1x1MjcxMyBTYXZlZCcsICdvaycpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4geyBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJyc7IH0sIDIwMDApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybignRmFpbGVkIHRvIHNhdmUgZ2VuZXJhdGlvbiBzZXR0aW5nczonLCBlcnIpO1xuICAgIF9zZXRTdGF0dXMoc3RhdHVzRWwsICdTYXZlIGZhaWxlZCcsICdlcnJvcicpO1xuICB9XG59XG5cbi8qKiBAcHJpdmF0ZSAqL1xuZnVuY3Rpb24gX3NldFN0YXR1cyhlbCwgbWVzc2FnZSwgbGV2ZWwpIHtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuICBjb25zdCBjb2xvdXJzID0ge1xuICAgIG9rOiAgICAndmFyKC0tc3VjY2VzcywjMmU3ZDMyKScsXG4gICAgZXJyb3I6ICd2YXIoLS1kYW5nZXIsI2M2MjgyOCknLFxuICAgIHdhcm46ICAndmFyKC0td2FybmluZywjZTY1MTAwKScsXG4gICAgaW5mbzogICd2YXIoLS10ZXh0LXNlY29uZGFyeSwjNTU1KScsXG4gIH07XG4gIGVsLnN0eWxlLmNvbG9yICA9IGNvbG91cnNbbGV2ZWxdIHx8IGNvbG91cnMuaW5mbztcbiAgZWwudGV4dENvbnRlbnQgID0gbWVzc2FnZTtcbn1cbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3Nlc3Npb24tbWFuYWdlci5qc1xuICogU2Vzc2lvbiBsaWZlY3ljbGU6IGNyZWF0ZSwgY2xhaW0sIHJlc3RvcmUsIHNhdmUsIGxvYWQuXG4gKiBBbHNvIG93bnMgZm9ybWF0U2Vzc2lvblBoYXNlTGFiZWwgYW5kIHJlbGF0ZWQgc2Vzc2lvbi1sYWJlbCBoZWxwZXJzLlxuICpcbiAqIERFUEVOREVOQ0lFUyAoYWxsIG9uIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIC0gY3JlYXRlU2Vzc2lvbiwgZmV0Y2hTdGF0dXMgKGFwaS1jbGllbnQuanMpXG4gKiAgIC0gZ2V0U2Vzc2lvbklkRnJvbVVSTCwgZ2V0T3duZXJUb2tlbiwgU3RvcmFnZUtleXMsIGdldFNjb3BlZFRhYkRhdGFTdG9yYWdlS2V5IChzdGF0ZS1tYW5hZ2VyLmpzKVxuICogICAtIGFwcGVuZE1lc3NhZ2UsIGFwcGVuZFJldHJ5TWVzc2FnZSAobWVzc2FnZS1xdWV1ZS5qcylcbiAqICAgLSBwYXJzZVN0YXR1c1Jlc3BvbnNlLCBwYXJzZVJld3JpdGVzUmVzcG9uc2UgKHZhbGlkYXRvcnMuanMpXG4gKiAgIC0gcmVmcmVzaEF0c1Njb3JlIChhdHMtcmVmaW5lbWVudC5qcylcbiAqICAgLSB1cGRhdGVJbmNsdXNpb25Db3VudHMgKHJldmlldy10YWJsZS1iYXNlLmpzLCBUaWVyIDQpXG4gKiAgIC0gc3dpdGNoVGFiIChyZXZpZXctdGFibGUtYmFzZS5qcywgVGllciA0KVxuICogICAtIHJlbmRlclJld3JpdGVQYW5lbCAocmV3cml0ZS1yZXZpZXcuanMsIFRpZXIgNilcbiAqICAgLSBzaG93T3duZXJzaGlwQ29uZmxpY3REaWFsb2csIG9wZW5TZXNzaW9uc01vZGFsIChzZXNzaW9uLXN3aXRjaGVyLXVpLmpzLCBUaWVyIDcpXG4gKiAgIC0gdXBkYXRlQWN0aW9uQnV0dG9ucyAodWktaGVscGVycy5qcylcbiAqICAgLSB1cGRhdGVQb3NpdGlvblRpdGxlIChzZXNzaW9uLWFjdGlvbnMuanMpXG4gKiAgIC0gZXNjYXBlSHRtbCwgU0VTU0lPTl9QSEFTRV9MQUJFTFNfU0hPUlQgKHV0aWxzLmpzKVxuICogICAtIHN0YXRlTWFuYWdlciAoc3RhdGUtbWFuYWdlci5qcyBcdTIwMTQgZ2V0QWxsVGFiRGF0YSgpL2dldEN1cnJlbnRUYWIoKS9zZXRUYWJEYXRhKCkvc2V0Q3VycmVudFRhYigpKVxuICogICAtIHNlc3Npb25JZCwgaXNSZWNvbm5lY3RpbmcsIGxhc3RLbm93blBoYXNlLCBpbnRlcmFjdGl2ZVN0YXRlLFxuICogICAgIHJld3JpdGVEZWNpc2lvbnMsIFBIQVNFUyAod2luZG93IGdsb2JhbHMpXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdzZXNzaW9uLW1hbmFnZXInKTtcblxuaW1wb3J0IHsgU0VTU0lPTl9QSEFTRV9MQUJFTFNfU0hPUlQsIFNFU1NJT05fUEhBU0VfTEFCRUxTIH0gZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgeyBQSEFTRVMsIHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2Vzc2lvbiBwaGFzZSBsYWJlbHMgKGFiYnJldmlhdGVkIGZvcm0gXHUyMDE0IGZvciBjb21wYWN0IHNlc3Npb24tc3dpdGNoZXIgVUkpXG4vLyBGdWxsLWxlbmd0aCBsYWJlbHMgbGl2ZSBpbiB1dGlscy5qcyBTRVNTSU9OX1BIQVNFX0xBQkVMUy5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBmb3JtYXRTZXNzaW9uUGhhc2VMYWJlbChwaGFzZSkge1xuICBpZiAoIXBoYXNlKSByZXR1cm4gJ2luaXQnO1xuICByZXR1cm4gU0VTU0lPTl9QSEFTRV9MQUJFTFNfU0hPUlRbcGhhc2VdIHx8IFN0cmluZyhwaGFzZSkucmVwbGFjZSgvXy9nLCAnICcpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEN1cnJlbnQgc2Vzc2lvbiBpZGVudGl0eSBoZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gX2dldEN1cnJlbnRTZXNzaW9uSWRWYWx1ZSgpIHtcbiAgaWYgKHR5cGVvZiBnZXRTZXNzaW9uSWRGcm9tVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGdldFNlc3Npb25JZEZyb21VUkwoKTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgnc2Vzc2lvbicpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2dldEN1cnJlbnRPd25lclRva2VuVmFsdWUoKSB7XG4gIGlmICh0eXBlb2YgZ2V0T3duZXJUb2tlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBnZXRPd25lclRva2VuKCk7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnY3YtYnVpbGRlci1vd25lci10b2tlbicpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRTZXNzaW9uU3dpdGNoZXJMYWJlbChzdGF0dXMgPSB7fSkge1xuICBjb25zdCBwb3NpdGlvbk5hbWUgPSAoc3RhdHVzLnBvc2l0aW9uX25hbWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpO1xuICBjb25zdCBwaGFzZSA9IGZvcm1hdFNlc3Npb25QaGFzZUxhYmVsKHN0YXR1cy5waGFzZSk7XG4gIGlmIChwb3NpdGlvbk5hbWUpIHtcbiAgICByZXR1cm4gYCR7cG9zaXRpb25OYW1lfSBcdTAwQjcgJHtwaGFzZX1gO1xuICB9XG4gIHJldHVybiBfZ2V0Q3VycmVudFNlc3Npb25JZFZhbHVlKCkgPyBgU2Vzc2lvbiBcdTAwQjcgJHtwaGFzZX1gIDogJ1x1RDgzRFx1RENDMiBTZXNzaW9ucyc7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZVNlc3Npb25Pd25lcnNoaXBNZXRhKHNlc3Npb24sIHtcbiAgY3VycmVudFNlc3Npb25JZCA9IF9nZXRDdXJyZW50U2Vzc2lvbklkVmFsdWUoKSxcbn0gPSB7fSkge1xuICBpZiAoIXNlc3Npb24gfHwgdHlwZW9mIHNlc3Npb24gIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHsgbGFiZWw6ICdVbmtub3duJywgY2xhc3NOYW1lOiAnc2Vzc2lvbi1zdGF0dXMtdW5jbGFpbWVkJywgaXNDdXJyZW50OiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgaXNDdXJyZW50U2Vzc2lvbiA9IEJvb2xlYW4oY3VycmVudFNlc3Npb25JZCkgJiYgc2Vzc2lvbi5zZXNzaW9uX2lkID09PSBjdXJyZW50U2Vzc2lvbklkO1xuICBjb25zdCBzYW1lT3duZXIgPSBCb29sZWFuKHNlc3Npb24ub3duZWRfYnlfcmVxdWVzdGVyKTtcblxuICBpZiAoaXNDdXJyZW50U2Vzc2lvbikge1xuICAgIHJldHVybiB7IGxhYmVsOiAnQ3VycmVudCB0YWInLCBjbGFzc05hbWU6ICdzZXNzaW9uLXN0YXR1cy1jdXJyZW50JywgaXNDdXJyZW50OiB0cnVlIH07XG4gIH1cbiAgaWYgKHNhbWVPd25lcikge1xuICAgIHJldHVybiB7IGxhYmVsOiAnT3duZWQgYnkgdGhpcyB0YWInLCBjbGFzc05hbWU6ICdzZXNzaW9uLXN0YXR1cy1jdXJyZW50JywgaXNDdXJyZW50OiBmYWxzZSB9O1xuICB9XG4gIGlmIChzZXNzaW9uLmNsYWltZWQpIHtcbiAgICByZXR1cm4geyBsYWJlbDogJ093bmVkIGJ5IGFub3RoZXIgdGFiJywgY2xhc3NOYW1lOiAnc2Vzc2lvbi1zdGF0dXMtb3duZWQnLCBpc0N1cnJlbnQ6IGZhbHNlIH07XG4gIH1cbiAgcmV0dXJuIHsgbGFiZWw6ICdVbmNsYWltZWQnLCBjbGFzc05hbWU6ICdzZXNzaW9uLXN0YXR1cy11bmNsYWltZWQnLCBpc0N1cnJlbnQ6IGZhbHNlIH07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFNlc3Npb25UaW1lc3RhbXAodGltZXN0YW1wLCB7IGluY2x1ZGVUaW1lID0gdHJ1ZSB9ID0ge30pIHtcbiAgaWYgKCF0aW1lc3RhbXApIHJldHVybiAnXHUyMDE0JztcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wKS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICBtb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIHllYXI6ICdudW1lcmljJyxcbiAgICAgIC4uLihpbmNsdWRlVGltZSA/IHsgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JyB9IDoge30pLFxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIFN0cmluZyh0aW1lc3RhbXApLnJlcGxhY2UoJ1QnLCAnICcpLnNsaWNlKDAsIGluY2x1ZGVUaW1lID8gMTYgOiAxMCk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBXZWxjb21lIC8gb25ib2FyZGluZyBtb2RhbCAoR0FQLTM2IC8gR0FQLTM3KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IF9XRUxDT01FX0RJU01JU1NFRF9LRVkgPSAnY3YtYnVpbGRlci13ZWxjb21lLWRpc21pc3NlZCc7XG5cbi8qKlxuICogU3dpdGNoIHdoaWNoIGNvbnRlbnQgc2VjdGlvbiBpcyB2aXNpYmxlIGluc2lkZSB0aGUgd2VsY29tZSBtb2RhbC5cbiAqIEBwYXJhbSB7J3ByZXNlbnQnfCdtaXNzaW5nJ30gc2VjdGlvblxuICovXG5mdW5jdGlvbiBfc2V0V2VsY29tZVNlY3Rpb24oc2VjdGlvbikge1xuICBjb25zdCBzUHJlc2VudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3ZWxjb21lLXNlY3Rpb24tcHJlc2VudCcpO1xuICBjb25zdCBzRW1wdHkgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3ZWxjb21lLXNlY3Rpb24tZW1wdHknKTtcbiAgY29uc3Qgc01pc3NpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2VsY29tZS1zZWN0aW9uLW1pc3NpbmcnKTtcbiAgY29uc3QgZlByZXNlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2VsY29tZS1mb290ZXItcHJlc2VudCcpO1xuICBjb25zdCBmTWlzc2luZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3ZWxjb21lLWZvb3Rlci1taXNzaW5nJyk7XG4gIGlmIChzUHJlc2VudCkgc1ByZXNlbnQuc3R5bGUuZGlzcGxheSA9IHNlY3Rpb24gPT09ICdwcmVzZW50JyA/ICcnIDogJ25vbmUnO1xuICBpZiAoc0VtcHR5KSAgIHNFbXB0eS5zdHlsZS5kaXNwbGF5ICAgPSBzZWN0aW9uID09PSAnZW1wdHknICAgPyAnJyA6ICdub25lJztcbiAgaWYgKHNNaXNzaW5nKSBzTWlzc2luZy5zdHlsZS5kaXNwbGF5ID0gc2VjdGlvbiA9PT0gJ21pc3NpbmcnID8gJycgOiAnbm9uZSc7XG4gIC8vIEVtcHR5IHNrZWxldG9uOiBzaG93IFwicHJlc2VudFwiIGZvb3RlciAoQ2xvc2UvZGlzbWlzcykgbm90IFwibWlzc2luZ1wiIGZvb3RlciAoQ3JlYXRlL1JlbG9hZClcbiAgaWYgKGZQcmVzZW50KSBmUHJlc2VudC5zdHlsZS5kaXNwbGF5ID0gKHNlY3Rpb24gPT09ICdwcmVzZW50JyB8fCBzZWN0aW9uID09PSAnZW1wdHknKSA/ICdmbGV4JyA6ICdub25lJztcbiAgaWYgKGZNaXNzaW5nKSBmTWlzc2luZy5zdHlsZS5kaXNwbGF5ID0gc2VjdGlvbiA9PT0gJ21pc3NpbmcnID8gJ2ZsZXgnIDogJ25vbmUnO1xuICAvLyBGb3IgZW1wdHkgc3RhdGU6IGNoYW5nZSBDVEEgdG8gbmF2aWdhdGUgdG8gTWFzdGVyIENWIGluc3RlYWQgb2YganVzdCBjbG9zaW5nXG4gIGNvbnN0IGdldFN0YXJ0ZWRCdG4gPSBmUHJlc2VudCA/IGZQcmVzZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi5wcmltYXJ5JykgOiBudWxsO1xuICBpZiAoZ2V0U3RhcnRlZEJ0bikge1xuICAgIGlmIChzZWN0aW9uID09PSAnZW1wdHknKSB7XG4gICAgICBnZXRTdGFydGVkQnRuLnRleHRDb250ZW50ID0gJ09wZW4gTWFzdGVyIENWJztcbiAgICAgIGdldFN0YXJ0ZWRCdG4ub25jbGljayA9ICgpID0+IHsgY2xvc2VXZWxjb21lTW9kYWwoKTsgaWYgKHR5cGVvZiBvcGVuTWFzdGVyQ3ZNb2RhbCA9PT0gJ2Z1bmN0aW9uJykgb3Blbk1hc3RlckN2TW9kYWwoKTsgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0U3RhcnRlZEJ0bi50ZXh0Q29udGVudCA9ICdHZXQgU3RhcnRlZCc7XG4gICAgICBnZXRTdGFydGVkQnRuLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGNsb3NlV2VsY29tZU1vZGFsKCk7XG4gICAgICAgIGlmICh0eXBlb2Ygc3dpdGNoVGFiID09PSAnZnVuY3Rpb24nKSBzd2l0Y2hUYWIoJ2pvYicpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTaG93IHRoZSBvbmJvYXJkaW5nIG1vZGFsIGluIHRoZSBcIm1pc3NpbmcgbWFzdGVyIENWXCIgc3RhdGUuXG4gKiBDYWxsZWQgZnJvbSBjcmVhdGVOZXdTZXNzaW9uQW5kTmF2aWdhdGUoKSB3aGVuIHRoZSBiYWNrZW5kIHJldHVybnMgbWFzdGVyX2N2X21pc3NpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFzdGVyQ3ZQYXRoIC0gU2VydmVyLXJlcG9ydGVkIGV4cGVjdGVkIGZpbGUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gc2hvd09uYm9hcmRpbmdNb2RhbChtYXN0ZXJDdlBhdGgpIHtcbiAgY29uc3Qgb3ZlcmxheSAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb25ib2FyZGluZy1tb2RhbC1vdmVybGF5Jyk7XG4gIGNvbnN0IHBhdGhFbCAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29uYm9hcmRpbmctbWFzdGVyLWN2LXBhdGgnKTtcbiAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb25ib2FyZGluZy1tb2RhbC1zdGF0dXMnKTtcbiAgaWYgKHBhdGhFbCkgICBwYXRoRWwudGV4dENvbnRlbnQgICA9IG1hc3RlckN2UGF0aCB8fCAnKHVua25vd24pJztcbiAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICcnO1xuICBfc2V0V2VsY29tZVNlY3Rpb24oJ21pc3NpbmcnKTtcbiAgaWYgKG92ZXJsYXkpIHtcbiAgICBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgX29wZW5PbmJvYXJkaW5nRm9jdXNUcmFwKG92ZXJsYXkpO1xuICB9XG59XG5cbi8qKlxuICogU2hvdyB0aGUgd2VsY29tZSBtb2RhbCB1bmxlc3MgdGhlIHVzZXIgaGFzIGRpc21pc3NlZCBpdC5cbiAqIENhbGxzIC9hcGkvc2V0dXAvbWFzdGVyLWN2LXN0YXR1cyB0byBjaG9vc2Ugd2hpY2ggc2VjdGlvbiB0byBkaXNwbGF5LlxuICogU2FmZSB0byBjYWxsIG9uIGV2ZXJ5IHN0YXJ0dXAgXHUyMDE0IG5vLW9wcyBpbW1lZGlhdGVseSBpZiBkaXNtaXNzZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG1heWJlU2hvd1dlbGNvbWVNb2RhbCgpIHtcbiAgdHJ5IHtcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oX1dFTENPTUVfRElTTUlTU0VEX0tFWSkpIHJldHVybjtcbiAgfSBjYXRjaCAoXykge31cbiAgbGV0IHNlY3Rpb24gPSAncHJlc2VudCc7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvc2V0dXAvbWFzdGVyLWN2LXN0YXR1cycpO1xuICAgIGlmIChyZXMub2spIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgaWYgKCFkYXRhLmV4aXN0cykge1xuICAgICAgICBjb25zdCBwYXRoRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb25ib2FyZGluZy1tYXN0ZXItY3YtcGF0aCcpO1xuICAgICAgICBpZiAocGF0aEVsKSBwYXRoRWwudGV4dENvbnRlbnQgPSBkYXRhLnBhdGggfHwgJyh1bmtub3duKSc7XG4gICAgICAgIHNlY3Rpb24gPSAnbWlzc2luZyc7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEuaXNfZW1wdHkpIHtcbiAgICAgICAgc2VjdGlvbiA9ICdlbXB0eSc7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChfKSB7fVxuICBjb25zdCBzdGF0dXNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvbmJvYXJkaW5nLW1vZGFsLXN0YXR1cycpO1xuICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJyc7XG4gIF9zZXRXZWxjb21lU2VjdGlvbihzZWN0aW9uKTtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvbmJvYXJkaW5nLW1vZGFsLW92ZXJsYXknKTtcbiAgaWYgKG92ZXJsYXkpIHtcbiAgICBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgX29wZW5PbmJvYXJkaW5nRm9jdXNUcmFwKG92ZXJsYXkpO1xuICB9XG59XG5cbi8qKiBXaXJlIGZvY3VzIHRyYXAgYW5kIEVzY2FwZSBoYW5kbGVyIGZvciB0aGUgb25ib2FyZGluZyBvdmVybGF5IChXQ0FHIDIuMS4yKS4gKi9cbmZ1bmN0aW9uIF9vcGVuT25ib2FyZGluZ0ZvY3VzVHJhcChvdmVybGF5KSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5zZXRJbml0aWFsRm9jdXMgPT09ICdmdW5jdGlvbicpIGdsb2JhbFRoaXMuc2V0SW5pdGlhbEZvY3VzKCdvbmJvYXJkaW5nLW1vZGFsLW92ZXJsYXknKTtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLnRyYXBGb2N1cyA9PT0gJ2Z1bmN0aW9uJykgICAgICAgZ2xvYmFsVGhpcy50cmFwRm9jdXMoJ29uYm9hcmRpbmctbW9kYWwtb3ZlcmxheScpO1xuICBpZiAoIW92ZXJsYXkuX29uYm9hcmRpbmdFc2NIYW5kbGVyKSB7XG4gICAgb3ZlcmxheS5fb25ib2FyZGluZ0VzY0hhbmRsZXIgPSAoZSkgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgY2xvc2VXZWxjb21lTW9kYWwoKTtcbiAgICB9O1xuICAgIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG92ZXJsYXkuX29uYm9hcmRpbmdFc2NIYW5kbGVyKTtcbiAgfVxufVxuXG4vKipcbiAqIFNob3cgdGhlIHdlbGNvbWUgbW9kYWwgdW5jb25kaXRpb25hbGx5IChpZ25vcmVzIHRoZSBcImRvbid0IHNob3cgYWdhaW5cIiBmbGFnKS5cbiAqIFVzZWQgYnkgdGhlIEhlbHAgYnV0dG9uIHNvIHVzZXJzIGNhbiBhbHdheXMgcmVvcGVuIG9uYm9hcmRpbmcgbWlkLXNlc3Npb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNob3dXZWxjb21lTW9kYWwoKSB7XG4gIGxldCBzZWN0aW9uID0gJ3ByZXNlbnQnO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3NldHVwL21hc3Rlci1jdi1zdGF0dXMnKTtcbiAgICBpZiAocmVzLm9rKSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICAgIGlmICghZGF0YS5leGlzdHMpIHtcbiAgICAgICAgY29uc3QgcGF0aEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29uYm9hcmRpbmctbWFzdGVyLWN2LXBhdGgnKTtcbiAgICAgICAgaWYgKHBhdGhFbCkgcGF0aEVsLnRleHRDb250ZW50ID0gZGF0YS5wYXRoIHx8ICcodW5rbm93biknO1xuICAgICAgICBzZWN0aW9uID0gJ21pc3NpbmcnO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmlzX2VtcHR5KSB7XG4gICAgICAgIHNlY3Rpb24gPSAnZW1wdHknO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoXykge31cbiAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb25ib2FyZGluZy1tb2RhbC1zdGF0dXMnKTtcbiAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICcnO1xuICBfc2V0V2VsY29tZVNlY3Rpb24oc2VjdGlvbik7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb25ib2FyZGluZy1tb2RhbC1vdmVybGF5Jyk7XG4gIGlmIChvdmVybGF5KSB7XG4gICAgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIF9vcGVuT25ib2FyZGluZ0ZvY3VzVHJhcChvdmVybGF5KTtcbiAgfVxufVxuXG4vKipcbiAqIENsb3NlIHRoZSB3ZWxjb21lIG1vZGFsLlxuICogSWYgXCJEb24ndCBzaG93IGFnYWluXCIgaXMgY2hlY2tlZCwgcGVyc2lzdHMgdGhlIGRpc21pc3NhbCBpbiBsb2NhbFN0b3JhZ2UuXG4gKi9cbmZ1bmN0aW9uIGNsb3NlV2VsY29tZU1vZGFsKCkge1xuICBjb25zdCBvdmVybGF5ICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvbmJvYXJkaW5nLW1vZGFsLW92ZXJsYXknKTtcbiAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2VsY29tZS1kb250LXNob3ctYWdhaW4nKTtcbiAgaWYgKG92ZXJsYXkpIHtcbiAgICBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgaWYgKG92ZXJsYXkuX29uYm9hcmRpbmdFc2NIYW5kbGVyKSB7XG4gICAgICBvdmVybGF5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvdmVybGF5Ll9vbmJvYXJkaW5nRXNjSGFuZGxlcik7XG4gICAgICBkZWxldGUgb3ZlcmxheS5fb25ib2FyZGluZ0VzY0hhbmRsZXI7XG4gICAgfVxuICB9XG4gIGlmIChjaGVja2JveCAmJiBjaGVja2JveC5jaGVja2VkKSB7XG4gICAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oX1dFTENPTUVfRElTTUlTU0VEX0tFWSwgJzEnKTsgfSBjYXRjaCAoXykge31cbiAgfVxuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMucmVzdG9yZUZvY3VzID09PSAnZnVuY3Rpb24nKSBnbG9iYWxUaGlzLnJlc3RvcmVGb2N1cygpO1xufVxuXG4vKipcbiAqIENhbGxlZCBieSB0aGUgb25ib2FyZGluZyBtb2RhbCBcIkNyZWF0ZSBlbXB0eSBwcm9maWxlXCIgYnV0dG9uLlxuICogUE9TVHMgdG8gL2FwaS9zZXR1cC9jcmVhdGUtbWFzdGVyLWN2LCB0aGVuIG5hdmlnYXRlcyB0byBhIG5ldyBzZXNzaW9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBvbmJvYXJkaW5nQ3JlYXRlRW1wdHlQcm9maWxlKCkge1xuICBjb25zdCBidG4gICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvbmJvYXJkaW5nLWNyZWF0ZS1idG4nKTtcbiAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb25ib2FyZGluZy1tb2RhbC1zdGF0dXMnKTtcbiAgaWYgKGJ0bikgYnRuLmRpc2FibGVkID0gdHJ1ZTtcbiAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdDcmVhdGluZyBwcm9maWxlXHUyMDI2JztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvc2V0dXAvY3JlYXRlLW1hc3Rlci1jdicsIHsgbWV0aG9kOiAnUE9TVCcgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIGNvbnN0IG1zZyA9IGRhdGEuZXJyb3IgPT09ICdhbHJlYWR5X2V4aXN0cydcbiAgICAgICAgPyAnRmlsZSBhbHJlYWR5IGV4aXN0cyBcdTIwMTQgcGxlYXNlIHJlbG9hZCB0aGUgcGFnZS4nXG4gICAgICAgIDogKGRhdGEuZXJyb3IgfHwgYFNlcnZlciBlcnJvciAke3Jlcy5zdGF0dXN9YCk7XG4gICAgICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gbXNnO1xuICAgICAgaWYgKGJ0bikgYnRuLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEZpbGUgY3JlYXRlZCBcdTIwMTQgbm93IG5hdmlnYXRlIHRvIGEgbmV3IHNlc3Npb25cbiAgICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ1Byb2ZpbGUgY3JlYXRlZCEgU3RhcnRpbmcgc2Vzc2lvblx1MjAyNic7XG4gICAgYXdhaXQgY3JlYXRlTmV3U2Vzc2lvbkFuZE5hdmlnYXRlKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSBgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICBpZiAoYnRuKSBidG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlc3Npb24gY3JlYXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVOZXdTZXNzaW9uQW5kTmF2aWdhdGUoKSB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBjcmVhdGVTZXNzaW9uKCk7XG4gIGlmIChkYXRhLmVycm9yID09PSAnbWFzdGVyX2N2X21pc3NpbmcnKSB7XG4gICAgc2hvd09uYm9hcmRpbmdNb2RhbChkYXRhLm1hc3Rlcl9jdl9wYXRoIHx8ICcnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFkYXRhLnNlc3Npb25faWQpIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uJyk7XG4gIC8vIENsZWFyIGFueSBzdGFsZSBzZXNzaW9uIHBhdGggXHUyMDE0IHRoZSBuZXcgc2Vzc2lvbiBoYXMgbm8gc2F2ZWQgZmlsZSB5ZXQuXG4gIC8vIElmIFNFU1NJT05fUEFUSCB3ZXJlIGxlZnQgcG9pbnRpbmcgYXQgYSBwcmV2aW91cyBzZXNzaW9uJ3MgZmlsZSwgdGhlXG4gIC8vIGRpc2stcmVzdG9yZSBndWFyZCBpbiByZXN0b3JlQmFja2VuZFN0YXRlIGNvdWxkIGxvYWQgdGhlIHdyb25nIHNlc3Npb25cbiAgLy8gb24gdGhlIG5leHQgdmlzaXQgb25jZSBTRVNTSU9OX0lEIGlzIHVwZGF0ZWQgYnkgdGhlIGJlZm9yZXVubG9hZCBoYW5kbGVyLlxuICB0cnkgeyBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY3YtYnVpbGRlci1zZXNzaW9uLXBhdGgnKTsgfSBjYXRjaCAoXykge31cbiAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihkYXRhLnJlZGlyZWN0X3VybCB8fCBgLz9zZXNzaW9uPSR7ZGF0YS5zZXNzaW9uX2lkfWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVOZXdTZXNzaW9uSW5OZXdUYWIoKSB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBjcmVhdGVTZXNzaW9uKCk7XG4gIGlmIChkYXRhLmVycm9yID09PSAnbWFzdGVyX2N2X21pc3NpbmcnKSB7XG4gICAgc2hvd09uYm9hcmRpbmdNb2RhbChkYXRhLm1hc3Rlcl9jdl9wYXRoIHx8ICcnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFkYXRhLnNlc3Npb25faWQpIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uJyk7XG4gIHdpbmRvdy5vcGVuKGRhdGEucmVkaXJlY3RfdXJsIHx8IGAvP3Nlc3Npb249JHtkYXRhLnNlc3Npb25faWR9YCwgJ19ibGFuaycsICdub29wZW5lcicpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlc3Npb24gY2xhaW0gLyBvd25lcnNoaXBcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5hc3luYyBmdW5jdGlvbiBfY2xhaW1DdXJyZW50U2Vzc2lvbihzZXNzaW9uSWRUb0NsYWltKSB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3Nlc3Npb25zL2NsYWltJywge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHNlc3Npb25faWQ6IHNlc3Npb25JZFRvQ2xhaW0sXG4gICAgICBvd25lcl90b2tlbjogZ2V0T3duZXJUb2tlbigpLFxuICAgIH0pLFxuICB9KTtcblxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgaWYgKHJlcy5vayAmJiBkYXRhLm9rICE9PSBmYWxzZSkgcmV0dXJuIHRydWU7XG5cbiAgaWYgKHJlcy5zdGF0dXMgPT09IDQwOSAmJiBkYXRhLmVycm9yID09PSAnc2Vzc2lvbl9vd25lZCcpIHtcbiAgICBjb25zdCBhY3Rpb24gPSBhd2FpdCBzaG93T3duZXJzaGlwQ29uZmxpY3REaWFsb2coXG4gICAgICAnVGhpcyBzZXNzaW9uIGlzIGN1cnJlbnRseSBjbGFpbWVkIGJ5IGFub3RoZXIgYnJvd3NlciB0YWIuIFlvdSBjYW4gdGFrZSBpdCBvdmVyLCBzdGFydCBhIG5ldyBzZXNzaW9uLCBvciBsb2FkIGEgZGlmZmVyZW50IG9uZS4nXG4gICAgKTtcbiAgICBpZiAoYWN0aW9uID09PSAnbmV3Jykge1xuICAgICAgYXdhaXQgY3JlYXRlTmV3U2Vzc2lvbkFuZE5hdmlnYXRlKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhY3Rpb24gIT09ICd0YWtlb3ZlcicpIHtcbiAgICAgIHNob3dTZXNzaW9uc0xhbmRpbmdQYW5lbCgnU2VsZWN0IGEgZGlmZmVyZW50IHNlc3Npb24gb3IgY3JlYXRlIGEgbmV3IG9uZS4nKTtcbiAgICAgIG9wZW5TZXNzaW9uc01vZGFsKHsgcmVxdWlyZWQ6IHRydWUgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdGFrZW92ZXJSZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9zZXNzaW9ucy90YWtlb3ZlcicsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHNlc3Npb25faWQ6IHNlc3Npb25JZFRvQ2xhaW0sXG4gICAgICAgIG93bmVyX3Rva2VuOiBnZXRPd25lclRva2VuKCksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICBjb25zdCB0YWtlb3ZlckRhdGEgPSBhd2FpdCB0YWtlb3ZlclJlcy5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgaWYgKCF0YWtlb3ZlclJlcy5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRha2VvdmVyRGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIHRha2Ugb3ZlciBzZXNzaW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHJlcy5zdGF0dXMgPT09IDQwNCB8fCBkYXRhLmVycm9yID09PSAnc2Vzc2lvbl9ub3RfZm91bmQnKSB7XG4gICAgc2hvd1Nlc3Npb25zTGFuZGluZ1BhbmVsKCdUaGF0IHNlc3Npb24gaXMgbm8gbG9uZ2VyIGFjdGl2ZS4gTG9hZCBpdCBmcm9tIGRpc2sgb3IgY3JlYXRlIGEgbmV3IG9uZS4nKTtcbiAgICBvcGVuU2Vzc2lvbnNNb2RhbCh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihkYXRhLmVycm9yIHx8IGBGYWlsZWQgdG8gY2xhaW0gc2Vzc2lvbiAoJHtyZXMuc3RhdHVzfSlgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXNzaW9uIG5hdmlnYXRpb24gZnJvbSBsYW5kaW5nIHBhZ2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBzaG93U2Vzc2lvbnNMYW5kaW5nUGFuZWwobWVzc2FnZSA9ICcnKSB7XG4gIHN0YXRlTWFuYWdlci5zZXRDdXJyZW50VGFiKCdqb2InKTtcbiAgc3RhdGVNYW5hZ2VyLnNldFBoYXNlKFBIQVNFUy5JTklUKTtcbiAgdXBkYXRlQWN0aW9uQnV0dG9ucygnam9iJyk7XG4gIHVwZGF0ZVBvc2l0aW9uVGl0bGUoe30pO1xuXG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICBpZiAoIWNvbnRlbnQpIHJldHVybjtcblxuICBjb250ZW50LmlubmVySFRNTCA9IGBcbiAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1sYW5kaW5nLXNoZWxsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1sYW5kaW5nLWhlYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1sYW5kaW5nLWNvcHlcIj5cbiAgICAgICAgICA8aDI+U2VsZWN0IGEgU2Vzc2lvbjwvaDI+XG4gICAgICAgICAgPHA+RWFjaCBicm93c2VyIHRhYiBub3cgd29ya3MgYWdhaW5zdCBpdHMgb3duIFVSTC1zY29wZWQgc2Vzc2lvbi48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1sYW5kaW5nLWFjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJjcmVhdGVOZXdTZXNzaW9uSW5OZXdUYWIoKVwiPlx1RkYwQiBOZXcgU2Vzc2lvbiBpbiBOZXcgVGFiPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICAke21lc3NhZ2UgPyBgPHAgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjIwcHg7Y29sb3I6I2I0NTMwOTtmb250LXdlaWdodDo2MDA7XCI+JHtlc2NhcGVIdG1sKG1lc3NhZ2UpfTwvcD5gIDogJyd9XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDoxMnB4O21hcmdpbi1ib3R0b206MjRweDtmbGV4LXdyYXA6d3JhcDtcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gcHJpbWFyeVwiIG9uY2xpY2s9XCJjcmVhdGVOZXdTZXNzaW9uQW5kTmF2aWdhdGUoKVwiPisgTmV3IFNlc3Npb248L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xufVxuXG5mdW5jdGlvbiBfcmVzdG9yZVRhYkZvclBoYXNlKHNlc3Npb25QaGFzZSkge1xuICBjb25zdCBwaGFzZVRhYk1hcCA9IHtcbiAgICBbUEhBU0VTLklOSVRdOiAgICAgICAgICAgICAnam9iJyxcbiAgICBbUEhBU0VTLkpPQl9BTkFMWVNJU106ICAgICAnYW5hbHlzaXMnLFxuICAgIFtQSEFTRVMuQ1VTVE9NSVpBVElPTl06ICAgICdleHAtcmV2aWV3JyxcbiAgICBbUEhBU0VTLlJFV1JJVEVfUkVWSUVXXTogICAncmV3cml0ZScsXG4gICAgW1BIQVNFUy5TUEVMTF9DSEVDS106ICAgICAgJ3NwZWxsJyxcbiAgICBbUEhBU0VTLkdFTkVSQVRJT05dOiAgICAgICAnbGF5b3V0JyxcbiAgICBbUEhBU0VTLkxBWU9VVF9SRVZJRVddOiAgICAnbGF5b3V0JyxcbiAgICBbUEhBU0VTLkZJTkFMX0dFTkVSQVRJT05dOiAnZmluYWxfZ2VuZXJhdGUnLFxuICAgIFtQSEFTRVMuUkVGSU5FTUVOVF06ICAgICAgICdkb3dubG9hZCcsXG4gIH07XG4gIGNvbnN0IHRhcmdldFRhYiA9IHBoYXNlVGFiTWFwW3Nlc3Npb25QaGFzZV0gfHwgJ2pvYic7XG5cbiAgaWYgKHR5cGVvZiBzd2l0Y2hUYWIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzd2l0Y2hUYWIodGFyZ2V0VGFiKTtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZU1hbmFnZXIuc2V0Q3VycmVudFRhYih0YXJnZXRUYWIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9yZXNvbHZlUmVzdG9yZWRQaGFzZShzdGF0dXNEYXRhKSB7XG4gIGNvbnN0IHBoYXNlID0gc3RhdHVzRGF0YT8ucGhhc2UgfHwgUEhBU0VTLklOSVQ7XG5cbiAgLy8gR3VhcmQ6IG5vIGpvYl9hbmFseXNpcyBtZWFucyB3ZSBjYW5ub3QgYmUgcGFzdCB0aGUgaW5pdGlhbCBpbnB1dCBzdGVwLlxuICBpZiAoIXN0YXR1c0RhdGE/LmpvYl9hbmFseXNpcykge1xuICAgIHJldHVybiBQSEFTRVMuSU5JVDtcbiAgfVxuXG4gIC8vIEd1YXJkOiBwaGFzZSBjbGFpbXMgY3VzdG9taXphdGlvbnMgd2VyZSByZXZpZXdlZCwgYnV0IHRoZXkgd2VyZSBuZXZlclxuICAvLyBnZW5lcmF0ZWQgKGUuZy4gYmFja2VuZCByZXN0YXJ0ZWQgYWZ0ZXIgYW5hbHl6ZV9qb2IgYnV0IGJlZm9yZVxuICAvLyByZWNvbW1lbmRfY3VzdG9taXphdGlvbnMgcmFuLCBvciBsZWdhY3kgc2Vzc2lvbnMgc2F2ZWQgd2l0aCB0aGUgb2xkXG4gIC8vIHByZW1hdHVyZS1DVVNUT01JWkFUSU9OIGJ1ZykuIEZhbGwgYmFjayBzbyB0aGUgdXNlciBzZWVzIHRoZSBBbmFseXNpc1xuICAvLyBzdGVwIGFuZCBjYW4gcnVuIFJlY29tbWVuZCBDdXN0b21pemF0aW9ucyBmcm9tIHRoZXJlLlxuICBpZiAoXG4gICAgKHBoYXNlID09PSBQSEFTRVMuQ1VTVE9NSVpBVElPTiB8fCBwaGFzZSA9PT0gUEhBU0VTLlJFV1JJVEVfUkVWSUVXKVxuICAgICYmICFzdGF0dXNEYXRhPy5jdXN0b21pemF0aW9uc1xuICApIHtcbiAgICByZXR1cm4gUEhBU0VTLkpPQl9BTkFMWVNJUztcbiAgfVxuXG4gIHJldHVybiBwaGFzZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXNzaW9uIGNvbnRleHQgLyByZXN0b3JlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlU2Vzc2lvbkNvbnRleHQoKSB7XG4gIGNvbnN0IHVybFNlc3Npb25JZCA9IGdldFNlc3Npb25JZEZyb21VUkwoKTtcbiAgaWYgKCF1cmxTZXNzaW9uSWQpIHtcbiAgICBzaG93U2Vzc2lvbnNMYW5kaW5nUGFuZWwoKTtcbiAgICBvcGVuU2Vzc2lvbnNNb2RhbCh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRlTWFuYWdlci5zZXRTZXNzaW9uSWQodXJsU2Vzc2lvbklkKTtcbiAgcmV0dXJuIF9jbGFpbUN1cnJlbnRTZXNzaW9uKHVybFNlc3Npb25JZCk7XG59XG5cbmZ1bmN0aW9uIF9hcHBlbmRSZXN0b3JlZERlY2lzaW9uc1N1bW1hcnkoKSB7XG4gIGNvbnN0IHBoYXNlID0gc3RhdGVNYW5hZ2VyLmdldFBoYXNlKCk7XG4gIGNvbnN0IGN1c3RvbWl6YXRpb25zID0gc3RhdGVNYW5hZ2VyLmdldFRhYkRhdGEoJ2N1c3RvbWl6YXRpb25zJykgfHwgd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnM7XG4gIGNvbnN0IHBhcnRzID0gW107XG5cbiAgaWYgKGN1c3RvbWl6YXRpb25zKSB7XG4gICAgY29uc3QgZXhwQ291bnQgPSAoY3VzdG9taXphdGlvbnMucmVjb21tZW5kZWRfZXhwZXJpZW5jZXMgfHwgW10pLmxlbmd0aDtcbiAgICBpZiAoZXhwQ291bnQgPiAwKSBwYXJ0cy5wdXNoKGAke2V4cENvdW50fSBleHBlcmllbmNlJHtleHBDb3VudCAhPT0gMSA/ICdzJyA6ICcnfSByZWNvbW1lbmRlZGApO1xuICAgIGNvbnN0IHNraWxsQ291bnQgPSAoY3VzdG9taXphdGlvbnMucmVjb21tZW5kZWRfc2tpbGxzIHx8IFtdKS5sZW5ndGg7XG4gICAgaWYgKHNraWxsQ291bnQgPiAwKSBwYXJ0cy5wdXNoKGAke3NraWxsQ291bnR9IHNraWxsJHtza2lsbENvdW50ICE9PSAxID8gJ3MnIDogJyd9IHJlY29tbWVuZGVkYCk7XG4gIH1cblxuICBjb25zdCBkZWNpc2lvbnMgPSB3aW5kb3cuX3NhdmVkRGVjaXNpb25zIHx8IHt9O1xuICBjb25zdCBhcHByb3ZlZFJld3JpdGVzID0gQXJyYXkuaXNBcnJheSh3aW5kb3cuYXBwcm92ZWRSZXdyaXRlcykgPyB3aW5kb3cuYXBwcm92ZWRSZXdyaXRlcy5sZW5ndGhcbiAgICA6IE9iamVjdC5rZXlzKGRlY2lzaW9ucy5leHBlcmllbmNlX2RlY2lzaW9ucyB8fCB7fSkubGVuZ3RoO1xuICBpZiAoYXBwcm92ZWRSZXdyaXRlcyA+IDApIHBhcnRzLnB1c2goYCR7YXBwcm92ZWRSZXdyaXRlc30gcmV3cml0ZSR7YXBwcm92ZWRSZXdyaXRlcyAhPT0gMSA/ICdzJyA6ICcnfSBhcHByb3ZlZGApO1xuXG4gIGNvbnN0IGF0cyA9IHN0YXRlTWFuYWdlci5nZXRBdHNTY29yZSgpO1xuICBpZiAoYXRzICYmIHR5cGVvZiBhdHMub3ZlcmFsbCA9PT0gJ251bWJlcicpIHtcbiAgICBwYXJ0cy5wdXNoKGBBVFMgc2NvcmUgJHtNYXRoLnJvdW5kKGF0cy5vdmVyYWxsKX0lYCk7XG4gIH1cblxuICBpZiAocGFydHMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHBoYXNlTGFiZWwgPSBTRVNTSU9OX1BIQVNFX0xBQkVMU19TSE9SVFtwaGFzZV0gfHwgU3RyaW5nKHBoYXNlKS5yZXBsYWNlKC9fL2csICcgJyk7XG4gICAgY29uc3QgcG9zaXRpb25DdHggPSB3aW5kb3cuX3Jlc3RvcmVkUG9zaXRpb25OYW1lID8gYCBmb3IgJHt3aW5kb3cuX3Jlc3RvcmVkUG9zaXRpb25OYW1lfWAgOiAnJztcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHVEODNEXHVEQ0NCIFJlc3RvcmVkJHtwb3NpdGlvbkN0eH0gYXQgc3RhZ2U6ICR7cGhhc2VMYWJlbH0gXHUyMDE0ICR7cGFydHMuam9pbignLCAnKX0uYCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzdG9yZVNlc3Npb24oKSB7XG4gIHRyeSB7XG4gICAgc3RhdGVNYW5hZ2VyLnNldElzUmVjb25uZWN0aW5nKHRydWUpO1xuXG4gICAgY29uc3Qgc3RvcmVkU2Vzc2lvbklkID0gZ2V0U2Vzc2lvbklkRnJvbVVSTCgpIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFN0b3JhZ2VLZXlzLlNFU1NJT05fSUQpO1xuICAgIGlmICghc3RvcmVkU2Vzc2lvbklkKSB7XG4gICAgICBzdGF0ZU1hbmFnZXIuc2V0SXNSZWNvbm5lY3RpbmcoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGF0ZU1hbmFnZXIuc2V0U2Vzc2lvbklkKHN0b3JlZFNlc3Npb25JZCk7XG5cbiAgICAvLyBUcnkgdG8gcmVzdG9yZSBjb252ZXJzYXRpb24gaGlzdG9yeSBmcm9tIGJhY2tlbmRcbiAgICBjb25zdCBoaXN0b3J5UmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvaGlzdG9yeScpO1xuICAgIGlmIChoaXN0b3J5UmVzLm9rKSB7XG4gICAgICBjb25zdCBoaXN0b3J5RGF0YSA9IGF3YWl0IGhpc3RvcnlSZXMuanNvbigpO1xuXG4gICAgICAvLyBBbHdheXMgY2xlYXIgcGxhY2Vob2xkZXIgSFRNTCBjb250ZW50IG5vdyB0aGF0IHdlIGhhdmUgYSBsaXZlIHNlc3Npb24gcmVzcG9uc2UuXG4gICAgICBjb25zdCBjb252ZXJzYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udmVyc2F0aW9uJyk7XG4gICAgICBjb252ZXJzYXRpb24uaW5uZXJIVE1MID0gJyc7XG5cbiAgICAgIC8vIEFsd2F5cyByZXN0b3JlIGZyb20gdGhlIHNlcnZlciBzZXNzaW9uIGZpbGUgKGF1dGhvcml0YXRpdmUgaGlzdG9yeSBzb3VyY2UpLlxuICAgICAgaWYgKGhpc3RvcnlEYXRhLmhpc3RvcnkgJiYgaGlzdG9yeURhdGEuaGlzdG9yeS5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgaGlzdG9yeURhdGEuaGlzdG9yeS5mb3JFYWNoKG1zZyA9PiB7XG4gICAgICAgICAgaWYgKG1zZy5yb2xlID09PSAndXNlcicpIHtcbiAgICAgICAgICAgIGFwcGVuZE1lc3NhZ2UoJ3VzZXInLCBtc2cuY29udGVudCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChtc2cucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIG1zZy5jb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsICdcdUQ4M0RcdUREMDQgU2Vzc2lvbiByZXN0b3JlZCBmcm9tIHNlcnZlci4nKTtcbiAgICAgICAgbG9nLmluZm8oYFJlc3RvcmVkICR7aGlzdG9yeURhdGEuaGlzdG9yeS5sZW5ndGh9IG1lc3NhZ2VzIGZyb20gYmFja2VuZGApO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgcGhhc2VcbiAgICAgIGlmIChoaXN0b3J5RGF0YS5waGFzZSkge1xuICAgICAgICBzdGF0ZU1hbmFnZXIuc2V0UGhhc2UoaGlzdG9yeURhdGEucGhhc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyeSB0byByZXN0b3JlIGJhY2tlbmQgc3RhdGUuXG4gICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gc2VydmVyIGhhZCBsaXZlIHNlc3Npb24gZGF0YSAoaW4gbWVtb3J5IG9yIGxvYWRlZCBmcm9tIGRpc2spLlxuICAgIGNvbnN0IHNlcnZlckhhc0RhdGEgPSBhd2FpdCByZXN0b3JlQmFja2VuZFN0YXRlKCk7XG5cbiAgICAvLyBSZXN0b3JlIFVJLW9ubHkgcHJlZnMgKGFjdGl2ZVJldmlld1BhbmUpIGZyb20gbG9jYWxTdG9yYWdlLlxuICAgIHJlc3RvcmVUYWJEYXRhKHsgdWlQcmVmc09ubHk6IHNlcnZlckhhc0RhdGEgfSk7XG5cbiAgICAvLyBTaG93IGEgcmVzdG9yZWQtZGVjaXNpb25zIHN1bW1hcnkgd2hlbiB0aGUgYmFja2VuZCBoYWQgbGl2ZSBzZXNzaW9uIGRhdGEuXG4gICAgaWYgKHNlcnZlckhhc0RhdGEpIHtcbiAgICAgIF9hcHBlbmRSZXN0b3JlZERlY2lzaW9uc1N1bW1hcnkoKTtcbiAgICB9XG5cbiAgICBzdGF0ZU1hbmFnZXIuc2V0SXNSZWNvbm5lY3RpbmcoZmFsc2UpO1xuXG4gICAgLy8gUnVuIGEgYmFja2dyb3VuZCBoZWFsdGggY2hlY2sgc28gdGhlIHN0YXR1cyBwaWxsIHJlZmxlY3RzIGxpdmUgY29ubmVjdGl2aXR5LlxuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy50ZXN0Q3VycmVudE1vZGVsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBnbG9iYWxUaGlzLnRlc3RDdXJyZW50TW9kZWwoKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgfVxuXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLndhcm4oJ1Nlc3Npb24gcmVzdG9yYXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHUyNkEwXHVGRTBGIENvdWxkIG5vdCByZXN0b3JlIHByZXZpb3VzIHNlc3Npb24uIFN0YXJ0aW5nIGZyZXNoLiAoJHtlcnJvci5tZXNzYWdlfSlgKTtcbiAgICBzdGF0ZU1hbmFnZXIuc2V0SXNSZWNvbm5lY3RpbmcoZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9oeWRyYXRlU3RhdHVzRGVyaXZlZFN0YXRlKHN0YXR1c0RhdGEpIHtcbiAgd2luZG93LmFjaGlldmVtZW50RWRpdHMgPSB7fTtcbiAgdHJ5IHtcbiAgICBpZiAoc3RhdHVzRGF0YS5hY2hpZXZlbWVudF9lZGl0cyAmJiBPYmplY3Qua2V5cyhzdGF0dXNEYXRhLmFjaGlldmVtZW50X2VkaXRzKS5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhzdGF0dXNEYXRhLmFjaGlldmVtZW50X2VkaXRzKSkge1xuICAgICAgICBjb25zdCBpZHggPSBwYXJzZUludChrLCAxMCk7XG4gICAgICAgIGNvbnN0IHJhd0l0ZW1zID0gQXJyYXkuaXNBcnJheSh2KSA/IHYgOiBbdl07XG4gICAgICAgIHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2lkeF0gPSByYXdJdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0ZXh0OiBTdHJpbmcoaXRlbS50ZXh0ID8/IGl0ZW0uZGVzY3JpcHRpb24gPz8gaXRlbS5jb250ZW50ID8/ICcnKSxcbiAgICAgICAgICAgICAgaGlkZGVuOiBCb29sZWFuKGl0ZW0uaGlkZGVuKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiBTdHJpbmcoaXRlbSA/PyAnJyksXG4gICAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoX2UpIHsgLyogbm9uLWZhdGFsICovIH1cblxuICB3aW5kb3cuX3NhdmVkRGVjaXNpb25zID0ge1xuICAgIGV4cGVyaWVuY2VfZGVjaXNpb25zOiBzdGF0dXNEYXRhLmV4cGVyaWVuY2VfZGVjaXNpb25zIHx8IHt9LFxuICAgIHNraWxsX2RlY2lzaW9uczogICAgICBzdGF0dXNEYXRhLnNraWxsX2RlY2lzaW9ucyAgICAgIHx8IHt9LFxuICAgIGFjaGlldmVtZW50X2RlY2lzaW9uczpzdGF0dXNEYXRhLmFjaGlldmVtZW50X2RlY2lzaW9ucyB8fCB7fSxcbiAgICBwdWJsaWNhdGlvbl9kZWNpc2lvbnM6c3RhdHVzRGF0YS5wdWJsaWNhdGlvbl9kZWNpc2lvbnMgfHwge30sXG4gICAgc3VtbWFyeV9mb2N1c19vdmVycmlkZTogc3RhdHVzRGF0YS5zdW1tYXJ5X2ZvY3VzX292ZXJyaWRlIHx8IG51bGwsXG4gICAgZXh0cmFfc2tpbGxzOiAgICAgICAgICAgc3RhdHVzRGF0YS5leHRyYV9za2lsbHMgfHwgW10sXG4gICAgZXh0cmFfc2tpbGxfbWF0Y2hlczogICAgc3RhdHVzRGF0YS5leHRyYV9za2lsbF9tYXRjaGVzIHx8IHt9LFxuICB9O1xuICB3aW5kb3cuX2FsbEV4cGVyaWVuY2VzID0gc3RhdHVzRGF0YS5hbGxfZXhwZXJpZW5jZXMgfHwgW107XG4gIHdpbmRvdy5zZWxlY3RlZFN1bW1hcnlLZXkgPSBzdGF0dXNEYXRhLnN1bW1hcnlfZm9jdXNfb3ZlcnJpZGUgfHwgc3RhdHVzRGF0YS5zZWxlY3RlZF9zdW1tYXJ5X2tleSB8fCBudWxsO1xuICB3aW5kb3cuX25ld1NraWxsc0Zyb21MTE0gPSBzdGF0dXNEYXRhLm5ld19za2lsbHNfZnJvbV9sbG0gfHwgW107XG4gIHdpbmRvdy5fc3RhdHVzSW50YWtlID0gc3RhdHVzRGF0YS5pbnRha2UgJiYgdHlwZW9mIHN0YXR1c0RhdGEuaW50YWtlID09PSAnb2JqZWN0J1xuICAgID8gc3RhdHVzRGF0YS5pbnRha2VcbiAgICA6IHt9O1xuICB3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zID0gQXJyYXkuaXNBcnJheShzdGF0dXNEYXRhLnBvc3RfYW5hbHlzaXNfcXVlc3Rpb25zKVxuICAgID8gc3RhdHVzRGF0YS5wb3N0X2FuYWx5c2lzX3F1ZXN0aW9uc1xuICAgIDogW107XG4gIHdpbmRvdy5xdWVzdGlvbkFuc3dlcnMgPSAoc3RhdHVzRGF0YS5wb3N0X2FuYWx5c2lzX2Fuc3dlcnMgJiYgdHlwZW9mIHN0YXR1c0RhdGEucG9zdF9hbmFseXNpc19hbnN3ZXJzID09PSAnb2JqZWN0JylcbiAgICA/IHN0YXR1c0RhdGEucG9zdF9hbmFseXNpc19hbnN3ZXJzXG4gICAgOiB7fTtcbiAgd2luZG93Ll9yZXN0b3JlZFBvc2l0aW9uTmFtZSA9IHN0YXR1c0RhdGEucG9zaXRpb25fbmFtZSB8fCBudWxsO1xufVxuXG5mdW5jdGlvbiBfaHlkcmF0ZVN0YXR1c1RhYlN0YXRlKHN0YXR1c0RhdGEpIHtcbiAgY29uc3QgaGFzQW5hbHlzaXMgPSBzdGF0dXNEYXRhLmpvYl9hbmFseXNpcyAhPT0gdW5kZWZpbmVkICYmIHN0YXR1c0RhdGEuam9iX2FuYWx5c2lzICE9PSBudWxsO1xuICBjb25zdCBoYXNDdXN0b21pemF0aW9ucyA9IHN0YXR1c0RhdGEuY3VzdG9taXphdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBzdGF0dXNEYXRhLmN1c3RvbWl6YXRpb25zICE9PSBudWxsO1xuICBjb25zdCBoYXNHZW5lcmF0ZWRGaWxlcyA9IHN0YXR1c0RhdGEuZ2VuZXJhdGVkX2ZpbGVzICE9PSB1bmRlZmluZWQgJiYgc3RhdHVzRGF0YS5nZW5lcmF0ZWRfZmlsZXMgIT09IG51bGw7XG5cbiAgc3RhdGVNYW5hZ2VyLnNldFRhYkRhdGEoJ2FuYWx5c2lzJywgaGFzQW5hbHlzaXMgPyBzdGF0dXNEYXRhLmpvYl9hbmFseXNpcyA6IG51bGwpO1xuICBzdGF0ZU1hbmFnZXIuc2V0VGFiRGF0YSgnY3VzdG9taXphdGlvbnMnLCBoYXNDdXN0b21pemF0aW9ucyA/IHN0YXR1c0RhdGEuY3VzdG9taXphdGlvbnMgOiBudWxsKTtcbiAgc3RhdGVNYW5hZ2VyLnNldFRhYkRhdGEoJ2N2JywgaGFzR2VuZXJhdGVkRmlsZXMgPyBzdGF0dXNEYXRhLmdlbmVyYXRlZF9maWxlcyA6IG51bGwpO1xuICB3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucyA9IGhhc0N1c3RvbWl6YXRpb25zID8gc3RhdHVzRGF0YS5jdXN0b21pemF0aW9ucyA6IG51bGw7XG5cbiAgaWYgKGhhc0FuYWx5c2lzKSB7XG4gICAgcmVmcmVzaEF0c1Njb3JlKCdhbmFseXNpcycpO1xuICB9XG5cbiAgcmV0dXJuIGhhc0FuYWx5c2lzIHx8IGhhc0N1c3RvbWl6YXRpb25zIHx8IGhhc0dlbmVyYXRlZEZpbGVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXN0b3JlQmFja2VuZFN0YXRlKCkge1xuICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNlcnZlciBoYWQgYW55IGxpdmUgc2Vzc2lvbiBkYXRhLlxuICB0cnkge1xuICAgIGNvbnN0IHN0YXR1c1JlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3N0YXR1cycpO1xuICAgIGlmICghc3RhdHVzUmVzLm9rKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3Qgc3RhdHVzRGF0YSA9IHBhcnNlU3RhdHVzUmVzcG9uc2UoYXdhaXQgc3RhdHVzUmVzLmpzb24oKSk7XG5cbiAgICBpZiAodHlwZW9mIHVwZGF0ZUF1dGhCYWRnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdXBkYXRlQXV0aEJhZGdlKHN0YXR1c0RhdGEuY29waWxvdF9hdXRoIHx8IHt9LCBzdGF0dXNEYXRhLmxsbV9wcm92aWRlciB8fCBudWxsKTtcbiAgICB9XG5cbiAgICBfaHlkcmF0ZVN0YXR1c0Rlcml2ZWRTdGF0ZShzdGF0dXNEYXRhKTtcblxuICAgIGxldCBzZXJ2ZXJIYXNEYXRhID0gX2h5ZHJhdGVTdGF0dXNUYWJTdGF0ZShzdGF0dXNEYXRhKTtcblxuICAgIGlmIChzdGF0dXNEYXRhLmpvYl9hbmFseXNpcyAhPT0gdW5kZWZpbmVkICYmIHN0YXR1c0RhdGEuam9iX2FuYWx5c2lzICE9PSBudWxsKSB7XG4gICAgICBsb2cuaW5mbygnUmVzdG9yZWQgYW5hbHlzaXMgZGF0YSBmcm9tIGJhY2tlbmQgbWVtb3J5Jyk7XG4gICAgfVxuICAgIGlmIChzdGF0dXNEYXRhLmN1c3RvbWl6YXRpb25zICE9PSB1bmRlZmluZWQgJiYgc3RhdHVzRGF0YS5jdXN0b21pemF0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgbG9nLmluZm8oJ1Jlc3RvcmVkIGN1c3RvbWl6YXRpb25zIGRhdGEgZnJvbSBiYWNrZW5kIG1lbW9yeScpO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzRGF0YS5nZW5lcmF0ZWRfZmlsZXMgIT09IHVuZGVmaW5lZCAmJiBzdGF0dXNEYXRhLmdlbmVyYXRlZF9maWxlcyAhPT0gbnVsbCkge1xuICAgICAgbG9nLmluZm8oJ1Jlc3RvcmVkIENWIGRhdGEgZnJvbSBiYWNrZW5kIG1lbW9yeScpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBnZW5lcmF0aW9uUmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvY3YvZ2VuZXJhdGlvbi1zdGF0ZScpO1xuICAgICAgaWYgKGdlbmVyYXRpb25SZXMub2spIHtcbiAgICAgICAgY29uc3QgZ2VuZXJhdGlvbkRhdGEgPSBhd2FpdCBnZW5lcmF0aW9uUmVzLmpzb24oKTtcbiAgICAgICAgaWYgKGdlbmVyYXRpb25EYXRhPy5vaykge1xuICAgICAgICAgIGNvbnN0IGhhc0NhY2hlZEF0c1Njb3JlID0gQm9vbGVhbihnZW5lcmF0aW9uRGF0YS5hdHNfc2NvcmUpO1xuICAgICAgICAgIGNvbnN0IGhhc1BlcnNpc3RlZEdlbmVyYXRpb25EYXRhID0gQm9vbGVhbihcbiAgICAgICAgICAgIGdlbmVyYXRpb25EYXRhLnByZXZpZXdfYXZhaWxhYmxlXG4gICAgICAgICAgICAgIHx8IGdlbmVyYXRpb25EYXRhLmZpbmFsX2dlbmVyYXRlZF9hdFxuICAgICAgICAgICAgICB8fCBoYXNDYWNoZWRBdHNTY29yZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBzdGF0ZU1hbmFnZXIuc2V0R2VuZXJhdGlvblN0YXRlKHtcbiAgICAgICAgICAgIHBoYXNlOiBnZW5lcmF0aW9uRGF0YS5waGFzZSB8fCAnaWRsZScsXG4gICAgICAgICAgICBwcmV2aWV3QXZhaWxhYmxlOiBCb29sZWFuKGdlbmVyYXRpb25EYXRhLnByZXZpZXdfYXZhaWxhYmxlKSxcbiAgICAgICAgICAgIHByZXZpZXdPdXRwdXRzOiBnZW5lcmF0aW9uRGF0YS5wcmV2aWV3X291dHB1dHMgfHwgbnVsbCxcbiAgICAgICAgICAgIGxheW91dENvbmZpcm1lZDogQm9vbGVhbihnZW5lcmF0aW9uRGF0YS5sYXlvdXRfY29uZmlybWVkKSxcbiAgICAgICAgICAgIHBhZ2VDb3VudEVzdGltYXRlOiBnZW5lcmF0aW9uRGF0YS5wYWdlX2NvdW50X2VzdGltYXRlID8/IG51bGwsXG4gICAgICAgICAgICBwYWdlQ291bnRFeGFjdDogZ2VuZXJhdGlvbkRhdGEucGFnZV9jb3VudF9leGFjdCA/PyBudWxsLFxuICAgICAgICAgICAgcGFnZUNvdW50Q29uZmlkZW5jZTogZ2VuZXJhdGlvbkRhdGEucGFnZV9jb3VudF9jb25maWRlbmNlID8/IG51bGwsXG4gICAgICAgICAgICBwYWdlQ291bnRTb3VyY2U6IGdlbmVyYXRpb25EYXRhLnBhZ2VfY291bnRfc291cmNlIHx8IG51bGwsXG4gICAgICAgICAgICBwYWdlTmVlZHNFeGFjdFJlY2hlY2s6IEJvb2xlYW4oXG4gICAgICAgICAgICAgIGdlbmVyYXRpb25EYXRhLnBhZ2VfY291bnRfbmVlZHNfZXhhY3RfcmVjaGVjayxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBwYWdlV2FybmluZzogQm9vbGVhbihnZW5lcmF0aW9uRGF0YS5wYWdlX2xlbmd0aF93YXJuaW5nKSxcbiAgICAgICAgICAgIGxheW91dEluc3RydWN0aW9uc0NvdW50OiBnZW5lcmF0aW9uRGF0YS5sYXlvdXRfaW5zdHJ1Y3Rpb25zX2NvdW50IHx8IDAsXG4gICAgICAgICAgICBmaW5hbEdlbmVyYXRlZEF0OiBnZW5lcmF0aW9uRGF0YS5maW5hbF9nZW5lcmF0ZWRfYXQgfHwgbnVsbCxcbiAgICAgICAgICAgIHByZXZpZXdHZW5lcmF0ZWRBdDogZ2VuZXJhdGlvbkRhdGEucHJldmlld19nZW5lcmF0ZWRfYXQgfHwgbnVsbCxcbiAgICAgICAgICAgIHByZXZpZXdSZXF1ZXN0SWQ6IGdlbmVyYXRpb25EYXRhLnByZXZpZXdfcmVxdWVzdF9pZCB8fCBudWxsLFxuICAgICAgICAgICAgY29uZmlybWVkQXQ6IGdlbmVyYXRpb25EYXRhLmNvbmZpcm1lZF9hdCB8fCBudWxsLFxuICAgICAgICAgICAgLy8gT3B0aW9uYWwgc2VydmVyLXByb3ZpZGVkIHJldmlzaW9uIG1ldGFkYXRhIChpZiBiYWNrZW5kIGV4cG9zZXMgdGhlbSlcbiAgICAgICAgICAgIGNvbnRlbnRSZXZpc2lvbjogKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBjb25zdCB2ID0gZ2VuZXJhdGlvbkRhdGEuY29udGVudF9yZXZpc2lvbiA/PyBnZW5lcmF0aW9uRGF0YS5jb250ZW50UmV2aXNpb247XG4gICAgICAgICAgICAgIHJldHVybiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpID8gMCA6IChOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHYpKSA/IE51bWJlcih2KSA6IDApO1xuICAgICAgICAgICAgfSkoKSxcbiAgICAgICAgICAgIGxhc3RQcmV2aWV3Q29udGVudFJldmlzaW9uOiBnZW5lcmF0aW9uRGF0YS5sYXN0X3ByZXZpZXdfY29udGVudF9yZXZpc2lvbiA/PyBnZW5lcmF0aW9uRGF0YS5sYXN0UHJldmlld0NvbnRlbnRSZXZpc2lvbiA/PyBudWxsLFxuICAgICAgICAgICAgbGFzdEZpbmFsQ29udGVudFJldmlzaW9uOiBnZW5lcmF0aW9uRGF0YS5sYXN0X2ZpbmFsX2NvbnRlbnRfcmV2aXNpb24gPz8gZ2VuZXJhdGlvbkRhdGEubGFzdEZpbmFsQ29udGVudFJldmlzaW9uID8/IG51bGwsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoaGFzQ2FjaGVkQXRzU2NvcmUpIHtcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zZXRBdHNTY29yZShnZW5lcmF0aW9uRGF0YS5hdHNfc2NvcmUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZU1hbmFnZXIuY2xlYXJBdHNTY29yZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChoYXNQZXJzaXN0ZWRHZW5lcmF0aW9uRGF0YSkge1xuICAgICAgICAgICAgc2VydmVySGFzRGF0YSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoX2UpIHsgLyogbm9uLWZhdGFsICovIH1cblxuICAgIGNvbnN0IHJlc3RvcmVkUGhhc2UgPSBfcmVzb2x2ZVJlc3RvcmVkUGhhc2Uoc3RhdHVzRGF0YSk7XG4gICAgc3RhdGVNYW5hZ2VyLnNldFBoYXNlKHJlc3RvcmVkUGhhc2UpO1xuICAgIF9yZXN0b3JlVGFiRm9yUGhhc2UocmVzdG9yZWRQaGFzZSk7XG5cbiAgICAvLyBLZWVwIHRoZSBwb3NpdGlvbi10aXRsZSBlbGVtZW50IGluIHN5bmMgd2hlbmV2ZXIgd2UgcmVzdG9yZSBzdGF0dXMgZGF0YS5cbiAgICBpZiAodHlwZW9mIHVwZGF0ZVBvc2l0aW9uVGl0bGUgPT09ICdmdW5jdGlvbicpIHVwZGF0ZVBvc2l0aW9uVGl0bGUoc3RhdHVzRGF0YSk7XG5cbiAgICBpZiAodHlwZW9mIHVwZGF0ZUluY2x1c2lvbkNvdW50cyA9PT0gJ2Z1bmN0aW9uJykgdXBkYXRlSW5jbHVzaW9uQ291bnRzKCk7XG5cbiAgICBpZiAoIXN0YXR1c0RhdGEucG9zaXRpb25fbmFtZSAmJiAhc3RhdHVzRGF0YS5qb2JfYW5hbHlzaXMpIHtcbiAgICAgIGNvbnN0IHN0b3JlZFBhdGggICAgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5TRVNTSU9OX1BBVEgpO1xuICAgICAgY29uc3Qgc3RvcmVkU2Vzc2lvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFN0b3JhZ2VLZXlzLlNFU1NJT05fSUQpO1xuICAgICAgY29uc3QgY3VycmVudFNlc3Npb24gPSBnZXRTZXNzaW9uSWRGcm9tVVJMID8gZ2V0U2Vzc2lvbklkRnJvbVVSTCgpIDogbnVsbDtcbiAgICAgIC8vIE9ubHkgYXV0by1yZXN0b3JlIGZyb20gZGlzayB3aGVuIHJlY29ubmVjdGluZyB0byB0aGUgU0FNRSBzZXNzaW9uXG4gICAgICAvLyAoc3RvcmVkU2Vzc2lvbiBtYXRjaGVzIHRoZSBjdXJyZW50IFVSTCBzZXNzaW9uX2lkKS4gIEEgZnJlc2ggbmV3IHNlc3Npb25cbiAgICAgIC8vIHdpbGwgaGF2ZSBhIGRpZmZlcmVudCBJRCwgc28gdGhpcyBndWFyZCBwcmV2ZW50cyB0aGUgbmV3IHNlc3Npb24gZnJvbVxuICAgICAgLy8gc2lsZW50bHkgbG9hZGluZyB0aGUgcHJldmlvdXMgc2Vzc2lvbidzIGRhdGEgb2ZmIGRpc2suXG4gICAgICBpZiAoc3RvcmVkUGF0aCAmJiBzdG9yZWRTZXNzaW9uICYmIHN0b3JlZFNlc3Npb24gPT09IGN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICAgIC8vIFBhc3MgcmVkaXJlY3RPbk1pc21hdGNoOmZhbHNlIHNvIHRoYXQgaWYgdGhlIGZpbGUgb24gZGlzayBiZWxvbmdzIHRvIGFcbiAgICAgICAgLy8gZGlmZmVyZW50IHNlc3Npb24gKGUuZy4gU0VTU0lPTl9QQVRIIHdhcyBuZXZlciB1cGRhdGVkIGFmdGVyIGEgbmV3XG4gICAgICAgIC8vIHNlc3Npb24gd2FzIGNyZWF0ZWQpLCB3ZSBzaWxlbnRseSBza2lwIHRoZSByZXN0b3JlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vIG5hdmlnYXRpbmcgdGhlIGJyb3dzZXIgdG8gYSBzZXNzaW9uIHRoZSB1c2VyIGRpZG4ndCBhc2sgZm9yLlxuICAgICAgICBjb25zdCBsb2FkZWQgPSBhd2FpdCBsb2FkU2Vzc2lvbkZpbGUoc3RvcmVkUGF0aCwgeyByZWRpcmVjdE9uTWlzbWF0Y2g6IGZhbHNlIH0pO1xuICAgICAgICBpZiAobG9hZGVkKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VydmVySGFzRGF0YTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cud2FybignRmFpbGVkIHRvIHJlc3RvcmUgYmFja2VuZCBzdGF0ZTonLCBlcnJvcik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRTZXNzaW9uRmlsZShwYXRoLCB7IHJlZGlyZWN0T25NaXNtYXRjaCA9IHRydWUgfSA9IHt9KSB7XG4gIHRyeSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgJ1x1RDgzRFx1REQwNCBSZXN0b3Jpbmcgc2Vzc2lvbiBmcm9tIGZpbGUuLi4nKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9sb2FkLXNlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBwYXRoIH0pXG4gICAgfSk7XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIGNvbnN0IGVyciA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHUyNzRDIEZhaWxlZCB0byByZXN0b3JlIHNlc3Npb246ICR7ZXJyLmVycm9yfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgIGlmIChkYXRhLnJlZGlyZWN0X3VybCAmJiBnZXRTZXNzaW9uSWRGcm9tVVJMKCkgIT09IGRhdGEuc2Vzc2lvbl9pZCkge1xuICAgICAgaWYgKCFyZWRpcmVjdE9uTWlzbWF0Y2gpIHtcbiAgICAgICAgLy8gVGhlIGZpbGUgb24gZGlzayBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IHNlc3Npb24gdGhhbiB0aGUgb25lIGluIHRoZVxuICAgICAgICAvLyBVUkwuICBTaWxlbnRseSBhYm9ydCByYXRoZXIgdGhhbiByZWRpcmVjdGluZyB0aGUgYnJvd3NlciBcdTIwMTQgdGhlIGNhbGxlclxuICAgICAgICAvLyAocmVzdG9yZUJhY2tlbmRTdGF0ZSkgb25seSB3YW50cyB0byByZXN0b3JlIFRISVMgc2Vzc2lvbiwgbm90IGxvYWQgYVxuICAgICAgICAvLyBkaWZmZXJlbnQgb25lLlxuICAgICAgICBsb2cud2FybihcbiAgICAgICAgICAnbG9hZFNlc3Npb25GaWxlOiBzZXNzaW9uX2lkIG1pc21hdGNoICh1cmw9JXMsIGZpbGU9JXMpOyBza2lwcGluZyByZXN0b3JlJyxcbiAgICAgICAgICBnZXRTZXNzaW9uSWRGcm9tVVJMKCksIGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihkYXRhLnJlZGlyZWN0X3VybCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTdG9yYWdlS2V5cy5TRVNTSU9OX1BBVEgsIGRhdGEuc2Vzc2lvbl9maWxlIHx8IHBhdGgpO1xuXG4gICAgLy8gUmVzZXQgc2Vzc2lvbi1zY29wZWQgc3VnZ2VzdGlvbiBzdGF0ZVxuICAgIHdpbmRvdy5fc3VnZ2VzdGVkQWNoc09yZGVyZWQgPSBudWxsO1xuXG4gICAgLy8gUmVsb2FkIGNvbnZlcnNhdGlvbiBoaXN0b3J5IGZyb20gdGhlIGZyZXNobHktbG9hZGVkIGJhY2tlbmRcbiAgICBjb25zdCBoaXN0b3J5UmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvaGlzdG9yeScpO1xuICAgIGlmIChoaXN0b3J5UmVzLm9rKSB7XG4gICAgICBjb25zdCBoaXN0b3J5RGF0YSA9IGF3YWl0IGhpc3RvcnlSZXMuanNvbigpO1xuICAgICAgY29uc3QgY29udiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb252ZXJzYXRpb24nKTtcbiAgICAgIGNvbnYuaW5uZXJIVE1MID0gJyc7XG4gICAgICAoaGlzdG9yeURhdGEuaGlzdG9yeSB8fCBbXSkuZm9yRWFjaChtc2cgPT4ge1xuICAgICAgICBpZiAobXNnLnJvbGUgIT09ICdzeXN0ZW0nKSBhcHBlbmRNZXNzYWdlKG1zZy5yb2xlLCBtc2cuY29udGVudCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgJ1x1MjZBMCBDb3VsZCBub3QgcmVzdG9yZSBjb252ZXJzYXRpb24gaGlzdG9yeS4nKTtcbiAgICB9XG5cbiAgICBhd2FpdCBmZXRjaFN0YXR1cygpO1xuXG4gICAgLy8gUnVuIGEgYmFja2dyb3VuZCBoZWFsdGggY2hlY2sgc28gdGhlIHN0YXR1cyBwaWxsIHJlZmxlY3RzIGxpdmUgY29ubmVjdGl2aXR5LlxuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy50ZXN0Q3VycmVudE1vZGVsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBnbG9iYWxUaGlzLnRlc3RDdXJyZW50TW9kZWwoKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgfVxuXG4gICAgLy8gUmVoeWRyYXRlIHRhYkRhdGEgYW5kIHN3aXRjaCB0byB0aGUgY29ycmVjdCB0YWIgZm9yIHRoZSByZXN0b3JlZCBwaGFzZVxuICAgIGNvbnN0IHNlc3Npb25QaGFzZSA9IGRhdGEucGhhc2UgfHwgUEhBU0VTLklOSVQ7XG4gICAgY29uc3QgcGhhc2VUYWJNYXAgPSB7XG4gICAgICBbUEhBU0VTLklOSVRdOiAgICAgICAgICAgICAnam9iJyxcbiAgICAgIFtQSEFTRVMuSk9CX0FOQUxZU0lTXTogICAgICdhbmFseXNpcycsXG4gICAgICBbUEhBU0VTLkNVU1RPTUlaQVRJT05dOiAgICAnZXhwLXJldmlldycsXG4gICAgICBbUEhBU0VTLlJFV1JJVEVfUkVWSUVXXTogICAncmV3cml0ZScsXG4gICAgICBbUEhBU0VTLlNQRUxMX0NIRUNLXTogICAgICAnc3BlbGwnLFxuICAgICAgW1BIQVNFUy5HRU5FUkFUSU9OXTogICAgICAgJ2xheW91dCcsXG4gICAgICBbUEhBU0VTLkxBWU9VVF9SRVZJRVddOiAgICAnbGF5b3V0JyxcbiAgICAgIFtQSEFTRVMuRklOQUxfR0VORVJBVElPTl06ICdmaW5hbF9nZW5lcmF0ZScsXG4gICAgICBbUEhBU0VTLlJFRklORU1FTlRdOiAgICAgICAnZG93bmxvYWQnLFxuICAgIH07XG4gICAgY29uc3QgdGFyZ2V0VGFiID0gcGhhc2VUYWJNYXBbc2Vzc2lvblBoYXNlXSB8fCAnam9iJztcblxuICAgIGNvbnN0IGN1c3RvbWl6YXRpb25QaGFzZXMgPSBbXG4gICAgICBQSEFTRVMuQ1VTVE9NSVpBVElPTiwgUEhBU0VTLlJFV1JJVEVfUkVWSUVXLCBQSEFTRVMuU1BFTExfQ0hFQ0ssXG4gICAgICBQSEFTRVMuR0VORVJBVElPTiwgUEhBU0VTLkxBWU9VVF9SRVZJRVcsIFBIQVNFUy5GSU5BTF9HRU5FUkFUSU9OLCBQSEFTRVMuUkVGSU5FTUVOVCxcbiAgICBdO1xuICAgIGlmIChjdXN0b21pemF0aW9uUGhhc2VzLmluY2x1ZGVzKHNlc3Npb25QaGFzZSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHMyID0gYXdhaXQgZmV0Y2goJy9hcGkvc3RhdHVzJyk7XG4gICAgICAgIGNvbnN0IHNkID0gcGFyc2VTdGF0dXNSZXNwb25zZShhd2FpdCBzMi5qc29uKCkpO1xuICAgICAgICBfaHlkcmF0ZVN0YXR1c0Rlcml2ZWRTdGF0ZShzZCk7XG4gICAgICAgIF9oeWRyYXRlU3RhdHVzVGFiU3RhdGUoc2QpO1xuICAgICAgfSBjYXRjaCAoXykgeyAvKiBub24tZmF0YWwgKi8gfVxuICAgIH1cblxuICAgIC8vIEZvciByZXdyaXRlX3JldmlldyBwaGFzZSwgcHJlLXBvcHVsYXRlIHRoZSByZXdyaXRlIHBhbmVsIGNhY2hlXG4gICAgaWYgKHNlc3Npb25QaGFzZSA9PT0gUEhBU0VTLlJFV1JJVEVfUkVWSUVXKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByciA9IGF3YWl0IGZldGNoKCcvYXBpL3Jld3JpdGVzJyk7XG4gICAgICAgIGlmIChyci5vaykge1xuICAgICAgICAgIGNvbnN0IHJkID0gcGFyc2VSZXdyaXRlc1Jlc3BvbnNlKGF3YWl0IHJyLmpzb24oKSk7XG4gICAgICAgICAgY29uc3QgcmV3cml0ZXMgPSByZC5yZXdyaXRlcyB8fCBbXTtcbiAgICAgICAgICBjb25zdCB3YXJuaW5ncyA9IHJkLnBlcnN1YXNpb25fd2FybmluZ3MgfHwgW107XG4gICAgICAgICAgcmV3cml0ZURlY2lzaW9ucyA9IHt9O1xuICAgICAgICAgIHJlbmRlclJld3JpdGVQYW5lbChyZXdyaXRlcywgd2FybmluZ3MpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7IC8qIG5vbi1mYXRhbCAqLyB9XG4gICAgfVxuXG4gICAgc3dpdGNoVGFiKHRhcmdldFRhYik7XG4gICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgYFx1MjcwNSBTZXNzaW9uIHJlc3RvcmVkOiAke2RhdGEucG9zaXRpb25fbmFtZSB8fCAnVW5uYW1lZCd9ICgke1NFU1NJT05fUEhBU0VfTEFCRUxTW2RhdGEucGhhc2VdIHx8IFN0cmluZyhkYXRhLnBoYXNlIHx8IFBIQVNFUy5JTklUKS5yZXBsYWNlKC9fL2csICcgJyl9KWApO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCBgXHUyNzRDIEVycm9yIHJlc3RvcmluZyBzZXNzaW9uOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlbmFtZSAvIHRhYiBkYXRhIHBlcnNpc3RlbmNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0UmVuYW1lQ3VycmVudFNlc3Npb24oKSB7XG4gIGNvbnN0IHRpdGxlRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9zaXRpb24tdGl0bGUnKTtcbiAgY29uc3QgcmVuYW1lQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlbmFtZS1zZXNzaW9uLWJ0bicpO1xuICBjb25zdCBjdXJyZW50ID0gKHRpdGxlRWw/LnRleHRDb250ZW50IHx8ICcnKS50cmltKCk7XG5cbiAgLy8gQnVpbGQgaW5saW5lIGlucHV0IHdpZGdldCBzbyB3ZSBuZXZlciBjYWxsIHdpbmRvdy5wcm9tcHQoKVxuICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICB3cmFwcGVyLnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweDsnO1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gIGlucHV0LnR5cGUgPSAndGV4dCc7XG4gIGlucHV0LnZhbHVlID0gY3VycmVudDtcbiAgaW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ05ldyBzZXNzaW9uIG5hbWUnKTtcbiAgaW5wdXQuc3R5bGUuY3NzVGV4dCA9ICdmb250LXNpemU6aW5oZXJpdDtwYWRkaW5nOjFweCA0cHg7Ym9yZGVyOjFweCBzb2xpZCAjOTRhM2I4O2JvcmRlci1yYWRpdXM6M3B4O3dpZHRoOjIyMHB4Oyc7XG4gIGNvbnN0IG9rQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gIG9rQnRuLnRleHRDb250ZW50ID0gJ1x1MjcxMyc7XG4gIG9rQnRuLnRpdGxlID0gJ1NhdmUgcmVuYW1lJztcbiAgb2tCdG4uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ1NhdmUgcmVuYW1lJyk7XG4gIG9rQnRuLnN0eWxlLmNzc1RleHQgPSAnYmFja2dyb3VuZDojMTBiOTgxO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czozcHg7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzoxcHggNnB4O2ZvbnQtc2l6ZToxZW07JztcbiAgY29uc3QgY2FuY2VsQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gIGNhbmNlbEJ0bi50ZXh0Q29udGVudCA9ICdcdTI3MTUnO1xuICBjYW5jZWxCdG4udGl0bGUgPSAnQ2FuY2VsIHJlbmFtZSc7XG4gIGNhbmNlbEJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnQ2FuY2VsIHJlbmFtZScpO1xuICBjYW5jZWxCdG4uc3R5bGUuY3NzVGV4dCA9ICdiYWNrZ3JvdW5kOiM2YjcyODA7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjNweDtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjFweCA2cHg7Zm9udC1zaXplOjFlbTsnO1xuICB3cmFwcGVyLmFwcGVuZChpbnB1dCwgb2tCdG4sIGNhbmNlbEJ0bik7XG5cbiAgaWYgKHRpdGxlRWwpIHRpdGxlRWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaWYgKHJlbmFtZUJ0bikgcmVuYW1lQnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHRpdGxlRWw/LnBhcmVudEVsZW1lbnQ/Lmluc2VydEJlZm9yZSh3cmFwcGVyLCB0aXRsZUVsKTtcbiAgaW5wdXQuZm9jdXMoKTtcbiAgaW5wdXQuc2VsZWN0KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZG9SZW5hbWUoKSB7XG4gICAgY29uc3QgbmV3TmFtZSA9IGlucHV0LnZhbHVlLnRyaW0oKTtcbiAgICBjbGVhbnVwKCk7XG4gICAgaWYgKCFuZXdOYW1lIHx8IG5ld05hbWUgPT09IGN1cnJlbnQpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3JlbmFtZS1jdXJyZW50LXNlc3Npb24nLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBuZXdfbmFtZTogbmV3TmFtZSB9KSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBpZiAoZGF0YS5vaykgYXdhaXQgZmV0Y2hTdGF0dXMoKTtcbiAgICAgIGVsc2UgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHNob3dUb2FzdChgUmVuYW1lIGZhaWxlZDogJHtkYXRhLmVycm9yfWAsICdlcnJvcicpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYFJlbmFtZSBlcnJvcjogJHtlLm1lc3NhZ2V9YCwgJ2Vycm9yJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB3cmFwcGVyLnJlbW92ZSgpO1xuICAgIGlmICh0aXRsZUVsKSB0aXRsZUVsLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICBpZiAocmVuYW1lQnRuKSByZW5hbWVCdG4uc3R5bGUuZGlzcGxheSA9ICcnO1xuICB9XG5cbiAgb2tCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkb1JlbmFtZSk7XG4gIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsZWFudXApO1xuICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSBkb1JlbmFtZSgpO1xuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGNsZWFudXAoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNhdmVUYWJEYXRhKCkge1xuICB0cnkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGdldFNjb3BlZFRhYkRhdGFTdG9yYWdlS2V5KHN0YXRlTWFuYWdlci5nZXRTZXNzaW9uSWQoKSksIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHRhYkRhdGE6IHN0YXRlTWFuYWdlci5nZXRBbGxUYWJEYXRhKCksXG4gICAgICBjdXJyZW50VGFiOiBzdGF0ZU1hbmFnZXIuZ2V0Q3VycmVudFRhYigpLFxuICAgICAgcGVuZGluZ1JlY29tbWVuZGF0aW9uczogd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgfHwgbnVsbCxcbiAgICAgIGludGVyYWN0aXZlU3RhdGU6IHN0YXRlTWFuYWdlci5nZXRJbnRlcmFjdGl2ZVN0YXRlKCksXG4gICAgICBhY3RpdmVSZXZpZXdQYW5lOiB3aW5kb3cuX2FjdGl2ZVJldmlld1BhbmUgfHwgJ2V4cGVyaWVuY2VzJyxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICAgIH0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cud2FybignRmFpbGVkIHRvIHNhdmUgdGFiIGRhdGE6JywgZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVUYWJEYXRhKHsgdWlQcmVmc09ubHkgPSBmYWxzZSB9ID0ge30pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGdldFNjb3BlZFRhYkRhdGFTdG9yYWdlS2V5KHN0YXRlTWFuYWdlci5nZXRTZXNzaW9uSWQoKSkpO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc2F2ZWQpO1xuXG4gICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gKGRhdGEudGltZXN0YW1wIHx8IDApO1xuICAgICAgaWYgKGFnZSA8IDI0ICogNjAgKiA2MCAqIDEwMDApIHtcbiAgICAgICAgaWYgKCF1aVByZWZzT25seSkge1xuICAgICAgICAgIGlmIChkYXRhLnRhYkRhdGEpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGRhdGEudGFiRGF0YSkuZm9yRWFjaCgoW3RhYiwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zZXRUYWJEYXRhKHRhYiwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkYXRhLnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMpIHtcbiAgICAgICAgICAgIHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zID0gZGF0YS5wZW5kaW5nUmVjb21tZW5kYXRpb25zO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGF0YS5pbnRlcmFjdGl2ZVN0YXRlKSB7XG4gICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc2V0SW50ZXJhY3RpdmVTdGF0ZShkYXRhLmludGVyYWN0aXZlU3RhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5hY3RpdmVSZXZpZXdQYW5lKSB7XG4gICAgICAgICAgd2luZG93Ll9hY3RpdmVSZXZpZXdQYW5lID0gZGF0YS5hY3RpdmVSZXZpZXdQYW5lO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nLmluZm8oYFJlc3RvcmVkIHRhYiBkYXRhIGZyb20gbG9jYWxTdG9yYWdlICh1aVByZWZzT25seT0ke3VpUHJlZnNPbmx5fSlgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGdldFNjb3BlZFRhYkRhdGFTdG9yYWdlS2V5KHN0YXRlTWFuYWdlci5nZXRTZXNzaW9uSWQoKSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cud2FybignRmFpbGVkIHRvIHJlc3RvcmUgdGFiIGRhdGE6JywgZXJyb3IpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFUyBtb2R1bGUgZXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB7XG4gIGZvcm1hdFNlc3Npb25QaGFzZUxhYmVsLFxuICBfZ2V0Q3VycmVudFNlc3Npb25JZFZhbHVlLFxuICBfZ2V0Q3VycmVudE93bmVyVG9rZW5WYWx1ZSxcbiAgYnVpbGRTZXNzaW9uU3dpdGNoZXJMYWJlbCxcbiAgZ2V0QWN0aXZlU2Vzc2lvbk93bmVyc2hpcE1ldGEsXG4gIGZvcm1hdFNlc3Npb25UaW1lc3RhbXAsXG4gIGNyZWF0ZU5ld1Nlc3Npb25BbmROYXZpZ2F0ZSxcbiAgY3JlYXRlTmV3U2Vzc2lvbkluTmV3VGFiLFxuICBvbmJvYXJkaW5nQ3JlYXRlRW1wdHlQcm9maWxlLFxuICBzaG93T25ib2FyZGluZ01vZGFsLFxuICBtYXliZVNob3dXZWxjb21lTW9kYWwsXG4gIHNob3dXZWxjb21lTW9kYWwsXG4gIGNsb3NlV2VsY29tZU1vZGFsLFxuICBfY2xhaW1DdXJyZW50U2Vzc2lvbixcbiAgX3Jlc29sdmVSZXN0b3JlZFBoYXNlLFxuICBzaG93U2Vzc2lvbnNMYW5kaW5nUGFuZWwsXG4gIGVuc3VyZVNlc3Npb25Db250ZXh0LFxuICByZXN0b3JlU2Vzc2lvbixcbiAgcmVzdG9yZUJhY2tlbmRTdGF0ZSxcbiAgbG9hZFNlc3Npb25GaWxlLFxuICBwcm9tcHRSZW5hbWVDdXJyZW50U2Vzc2lvbixcbiAgc2F2ZVRhYkRhdGEsXG4gIHJlc3RvcmVUYWJEYXRhLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL2pvYi1pbnB1dC5qc1xuICogSm9iIGRlc2NyaXB0aW9uIGlucHV0IHBhbmVsOiBwYXN0ZSwgVVJMIGZldGNoLCBmaWxlIHVwbG9hZCwgbG9hZC1pdGVtcyB0YWJsZS5cbiAqXG4gKiBERVBFTkRFTkNJRVMgKGFsbCBvbiBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICAtIG1hcmtlZCwgZG9tcHVyaWZ5IChucG0gXHUyMDE0IGJ1bmRsZWQ7IHVzZWQgaW50ZXJuYWxseSBmb3Igc2FmZSBtYXJrZG93biByZW5kZXJpbmcpXG4gKiAgIC0gZXNjYXBlSHRtbCAodXRpbHMuanMpXG4gKiAgIC0gYXBwZW5kTWVzc2FnZSwgYXBwZW5kUmV0cnlNZXNzYWdlIChtZXNzYWdlLXF1ZXVlLmpzKVxuICogICAtIHNldExvYWRpbmcgKGZldGNoLXV0aWxzLmpzKVxuICogICAtIHNhdmVUYWJEYXRhIChzZXNzaW9uLW1hbmFnZXIuanMpXG4gKiAgIC0gc3dpdGNoVGFiIChyZXZpZXctdGFibGUtYmFzZS5qcywgVGllciA0KVxuICogICAtIGFuYWx5emVKb2IgKGpvYi1hbmFseXNpcy5qcylcbiAqICAgLSBmZXRjaFN0YXR1cyAoYXBpLWNsaWVudC5qcylcbiAqICAgLSBzaG93QWxlcnRNb2RhbCAodWktaGVscGVycy5qcylcbiAqICAgLSBzdGF0ZU1hbmFnZXIgKHN0YXRlLW1hbmFnZXIuanMgXHUyMDE0IGdldEN1cnJlbnRUYWIoKS9zZXRUYWJEYXRhKCkpXG4gKiAgIC0gUEhBU0VTICh3aW5kb3cgZ2xvYmFsKVxuICpcbiAqIEdBUC0yMyBpbnRha2UgY29uZmlybWF0aW9uOlxuICogICBBbGwgam9iLXRleHQgc3VibWlzc2lvbnMgKHBhc3RlLCBVUkwsIGZpbGUpIHJvdXRlIGRpcmVjdGx5IHRvIGFuYWx5emVKb2IoKVxuICogICBzbyBldmVyeSBzb3VyY2UgZm9sbG93cyB0aGUgc2FtZSBwb3N0LWFuYWx5c2lzIGludGFrZSBwYXRoLlxuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcignam9iLWlucHV0Jyk7XG5cbmltcG9ydCB7IFBIQVNFUywgc3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi9zdGF0ZS1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IG1hcmtlZCB9IGZyb20gJ21hcmtlZCc7XG5pbXBvcnQgRE9NUHVyaWZ5IGZyb20gJ2RvbXB1cmlmeSc7XG5cbi8vIFJlbmRlciBqb2IgZGVzY3JpcHRpb24gdGV4dCBzYWZlbHk6IG1hcmtlZCBwYXJzZXMgR0ZNIChpbmNsdWRpbmcgZW1iZWRkZWQgSFRNTFxuLy8gYW5kIGF1dG9saW5rcyksIERPTVB1cmlmeSBzYW5pdGl6ZXMgdGhlIG91dHB1dCBiZWZvcmUgd3JpdGluZyB0byBpbm5lckhUTUwuXG4vLyBGT1JCSURfQVRUUjogWydzdHlsZSddIHN0cmlwcyBpbmxpbmUgQ1NTIGZyb20gSFRNTCBlbWJlZGRlZCBpbiB0aGUgam9iIHRleHRcbi8vIChlLmcuIFdvcmQtc3R5bGUgZm9udC1zaXplL2ZvbnQtZmFtaWx5IGZyb20gSlNPTi1MRCBkZXNjcmlwdGlvbiBmaWVsZHMpLFxuLy8gc28gdGhlIHBhZ2UncyBvd24gc3R5bGVzaGVldCBjb250cm9scyBmb250IHJlbmRlcmluZyBjb25zaXN0ZW50bHkuXG5mdW5jdGlvbiBfcmVuZGVySm9iVGV4dCh0ZXh0KSB7XG4gIGNvbnN0IHJhdyA9IG1hcmtlZC5wYXJzZSh0ZXh0LCB7IGdmbTogdHJ1ZSwgYnJlYWtzOiB0cnVlIH0pO1xuICByZXR1cm4gRE9NUHVyaWZ5LnNhbml0aXplKHJhdywgeyBGT1JCSURfQVRUUjogWydzdHlsZSddIH0pO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEpvYiB0YWIgZGlzcGxheVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmFzeW5jIGZ1bmN0aW9uIHBvcHVsYXRlSm9iVGFiKCkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9zdGF0dXMnKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgIGlmIChkYXRhLmpvYl9kZXNjcmlwdGlvbl90ZXh0KSB7XG4gICAgICBjb25zdCBqb2JUZXh0ID0gZGF0YS5qb2JfZGVzY3JpcHRpb25fdGV4dDtcbiAgICAgIGNvbnN0IHBvc2l0aW9uTmFtZSA9IGRhdGEucG9zaXRpb25fbmFtZSB8fCBudWxsO1xuICAgICAgY29uc3Qgam9iVXJsID0gZGF0YS5qb2JfdXJsIHx8IG51bGw7XG4gICAgICBjb25zdCB0aXRsZVRleHQgPSBwb3NpdGlvbk5hbWVcbiAgICAgICAgPyBlc2NhcGVIdG1sKHBvc2l0aW9uTmFtZSlcbiAgICAgICAgOiAnPGVtIHN0eWxlPVwiY29sb3I6IzljYTNhZjtcIj5Qb3NpdGlvbiB0aXRsZSBub3QgeWV0IGV4dHJhY3RlZFx1MjAyNjwvZW0+JztcbiAgICAgIGNvbnN0IHRpdGxlQ29udGVudCA9IChwb3NpdGlvbk5hbWUgJiYgam9iVXJsKVxuICAgICAgICA/IGA8YSBocmVmPVwiJHtlc2NhcGVIdG1sKGpvYlVybCl9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIHN0eWxlPVwiY29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246bm9uZTtcIj4ke3RpdGxlVGV4dH08L2E+YFxuICAgICAgICA6IHRpdGxlVGV4dDtcbiAgICAgIGxldCBodG1sID0gJzxoMT4nICsgdGl0bGVDb250ZW50ICsgJzwvaDE+JztcbiAgICAgIGlmIChqb2JVcmwpIHtcbiAgICAgICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cIm1heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtjb2xvcjojNjQ3NDhiO2ZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luOi04cHggMCA4cHggMDtcIiB0aXRsZT1cIiR7ZXNjYXBlSHRtbChqb2JVcmwpfVwiPjxhIGhyZWY9XCIke2VzY2FwZUh0bWwoam9iVXJsKX1cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgc3R5bGU9XCJjb2xvcjojM2I4MmY2O3RleHQtZGVjb3JhdGlvbjpub25lO1wiPiR7ZXNjYXBlSHRtbChqb2JVcmwpfTwvYT48L2Rpdj5gO1xuICAgICAgfVxuXG4gICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwibGluZS1oZWlnaHQ6IDEuNjsgYmFja2dyb3VuZDogI2Y4ZjlmYTsgcGFkZGluZzogMjBweDsgYm9yZGVyLXJhZGl1czogOHB4OyBtYXJnaW46IDIwcHggMDtcIj4nICsgX3JlbmRlckpvYlRleHQoam9iVGV4dCkgKyAnPC9kaXY+JztcblxuICAgICAgY29uc3QgYW5hbHl6ZUJ0biA9IGRhdGEucGhhc2UgPT09IFBIQVNFUy5JTklUXG4gICAgICAgID8gJzxidXR0b24gb25jbGljaz1cImFuYWx5emVKb2IoKVwiIGNsYXNzPVwiYnRuLXByaW1hcnlcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDo4cHg7XCI+XHVEODNEXHVERDBEIEFuYWx5c2UgSm9iPC9idXR0b24+J1xuICAgICAgICA6ICcnO1xuICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MjBweDtcIj4nICsgYW5hbHl6ZUJ0biArICc8YnV0dG9uIG9uY2xpY2s9XCJzaG93TG9hZEpvYlBhbmVsKClcIiBjbGFzcz1cImJ0bi1zZWNvbmRhcnlcIj5cdUQ4M0RcdURDRTUgTG9hZCBEaWZmZXJlbnQgSm9iPC9idXR0b24+PC9kaXY+JztcbiAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgc2hvd0xvYWRKb2JQYW5lbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgam9iIGRlc2NyaXB0aW9uOicsIGVycm9yKTtcbiAgICBhd2FpdCBzaG93TG9hZEpvYlBhbmVsKCk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2FkLWpvYiBwYW5lbCAoc2Vzc2lvbnMgKyBzZXJ2ZXIgZmlsZXMgdGFibGUgKyBpbnB1dCBtZXRob2RzKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dMb2FkSm9iUGFuZWwoKSB7XG4gIGlmIChzdGF0ZU1hbmFnZXIuZ2V0Q3VycmVudFRhYigpICE9PSAnam9iJykge1xuICAgIHN3aXRjaFRhYignam9iJyk7XG4gIH1cblxuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgY29udGVudC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+PGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPjwvZGl2PjxwIHN0eWxlPVwibWFyZ2luLXRvcDoxMnB4O2NvbG9yOiM2NDc0OGI7XCI+TG9hZGluZ1x1MjAyNjwvcD48L2Rpdj4nO1xuXG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgc3R5bGU9XCJtYXgtd2lkdGg6ODIwcHg7bWFyZ2luOjAgYXV0bztwYWRkaW5nOjI0cHg7XCI+XG4gICAgICA8aDEgc3R5bGU9XCJmb250LXNpemU6MjJweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzFlMjkzYjttYXJnaW4tYm90dG9tOjZweDtcIj5cdUQ4M0RcdURDRTUgQWRkIEpvYiBEZXNjcmlwdGlvbjwvaDE+XG5cbiAgICAgIDxkaXYgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNlMmU4ZjA7Ym9yZGVyLXJhZGl1czo4cHg7b3ZlcmZsb3c6dmlzaWJsZTtcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2Y4ZmFmYztwYWRkaW5nOjEwcHggMTZweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTJlOGYwO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweDtjb2xvcjojNDc1NTY5O1wiPkFkZCBOZXcgSm9iIERlc2NyaXB0aW9uPC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOjIwcHg7XCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtbWV0aG9kLXRhYnNcIiBzdHlsZT1cIm1hcmdpbi10b3A6MDtcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbnB1dC10YWIgYWN0aXZlXCIgb25jbGljaz1cInN3aXRjaElucHV0TWV0aG9kKCdwYXN0ZScpXCI+XHVEODNEXHVEQ0REIFBhc3RlIFRleHQ8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbnB1dC10YWJcIiBvbmNsaWNrPVwic3dpdGNoSW5wdXRNZXRob2QoJ3VybCcpXCI+XHVEODNEXHVERDE3IEZyb20gVVJMPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaW5wdXQtdGFiXCIgb25jbGljaz1cInN3aXRjaElucHV0TWV0aG9kKCdmaWxlJylcIj5cdUQ4M0RcdURDQzEgVXBsb2FkIEZpbGU8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1tZXRob2QgYWN0aXZlXCIgaWQ9XCJwYXN0ZS1tZXRob2RcIj5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cImpvYi10ZXh0LWlucHV0XCIgcGxhY2Vob2xkZXI9XCJQYXN0ZSB0aGUgam9iIGRlc2NyaXB0aW9uIGhlcmVcdTIwMjZcIiByb3dzPVwiMTJcIlxuICAgICAgICAgICAgICBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJwYXN0ZS1jaGFyLWNvdW50IHBhc3RlLWVycm9yXCJcbiAgICAgICAgICAgICAgb25ibHVyPVwiX3ZhbGlkYXRlUGFzdGVGaWVsZCgpXCIgb25pbnB1dD1cIl91cGRhdGVQYXN0ZUNoYXJDb3VudCgpXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjE0cHg7cGFkZGluZzoxMnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtyZXNpemU6dmVydGljYWw7bWFyZ2luLXRvcDo4cHg7XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJwYXN0ZS1jaGFyLWNvdW50XCIgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MTJweDtjb2xvcjojOTRhM2I4O21hcmdpbi10b3A6NHB4O21pbi1oZWlnaHQ6MThweDtcIj48L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGlkPVwicGFzdGUtZXJyb3JcIiBjbGFzcz1cImZpZWxkLWVycm9yXCIgYXJpYS1saXZlPVwicG9saXRlXCI+PC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MTBweDtkaXNwbGF5OmZsZXg7Z2FwOjEycHg7XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz1cInN1Ym1pdEpvYlRleHQoKVwiIGNsYXNzPVwiYnRuLXByaW1hcnlcIj5TdWJtaXQgSm9iIERlc2NyaXB0aW9uPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz1cImNsZWFySm9iSW5wdXQoKVwiIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiPkNsZWFyPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1tZXRob2RcIiBpZD1cInVybC1tZXRob2RcIj5cbiAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luOjhweCAwIDEwcHg7XCI+RW50ZXIgYSBVUkwgdG8gYXV0b21hdGljYWxseSBleHRyYWN0IHRoZSBqb2IgZGVzY3JpcHRpb246PC9wPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ1cmxcIiBpZD1cImpvYi11cmwtaW5wdXRcIiBwbGFjZWhvbGRlcj1cImh0dHBzOi8vY29tcGFueS5jb20vam9iLXBvc3RpbmdcIlxuICAgICAgICAgICAgICBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJ1cmwtZXJyb3JcIlxuICAgICAgICAgICAgICBvbmJsdXI9XCJfdmFsaWRhdGVVUkxGaWVsZCgpXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO3BhZGRpbmc6MTJweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7XCIgLz5cbiAgICAgICAgICAgIDxzcGFuIGlkPVwidXJsLWVycm9yXCIgY2xhc3M9XCJmaWVsZC1lcnJvclwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjEwcHg7ZGlzcGxheTpmbGV4O2dhcDoxMnB4O1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJmZXRjaEpvYkZyb21VUkwoKVwiIGNsYXNzPVwiYnRuLXByaW1hcnlcIj5GZXRjaCBKb2IgRGVzY3JpcHRpb248L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwiY2xlYXJVUkxJbnB1dCgpXCIgY2xhc3M9XCJidG4tc2Vjb25kYXJ5XCI+Q2xlYXI8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MTRweDtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjEwcHg7Zm9udC1zaXplOjEzcHg7XCI+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmMGY5ZmY7Ym9yZGVyOjFweCBzb2xpZCAjMGVhNWU5O2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTBweDtcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMwMzY5YTE7bWFyZ2luLWJvdHRvbTo0cHg7XCI+XHUyNzA1IFdvcmtzIHdlbGwgd2l0aDo8L2Rpdj5cbiAgICAgICAgICAgICAgICA8dWwgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nLWxlZnQ6MTZweDtjb2xvcjojMDM2OWExO2xpbmUtaGVpZ2h0OjEuNztcIj48bGk+Q29tcGFueSBjYXJlZXIgcGFnZXM8L2xpPjxsaT5BbmdlbExpc3QsIFJlbW90ZU9LPC9saT48bGk+R292ZXJubWVudCAmYW1wOyB1bml2ZXJzaXR5IHNpdGVzPC9saT48L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZjNjNztib3JkZXI6MXB4IHNvbGlkICNmNTllMGI7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMHB4O1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7Y29sb3I6IzkyNDAwZTttYXJnaW4tYm90dG9tOjRweDtcIj5cdTI2QTBcdUZFMEYgQ29weSBtYW51YWxseSBmcm9tOjwvZGl2PlxuICAgICAgICAgICAgICAgIDx1bCBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmctbGVmdDoxNnB4O2NvbG9yOiM5MjQwMGU7bGluZS1oZWlnaHQ6MS43O1wiPjxsaT48c3Ryb25nPkxpbmtlZEluPC9zdHJvbmc+IChsb2dpbiByZXF1aXJlZCk8L2xpPjxsaT48c3Ryb25nPkluZGVlZDwvc3Ryb25nPiAoYW50aS1ib3QpPC9saT48bGk+PHN0cm9uZz5HbGFzc2Rvb3I8L3N0cm9uZz4gKGF1dGggcmVxdWlyZWQpPC9saT48L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LW1ldGhvZFwiIGlkPVwiZmlsZS1tZXRob2RcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJmaWxlLWRyb3Atem9uZVwiXG4gICAgICAgICAgICAgICAgIG9uZHJhZ292ZXI9XCJldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLmNsYXNzTGlzdC5hZGQoJ2RyYWctb3ZlcicpXCJcbiAgICAgICAgICAgICAgICAgb25kcmFnbGVhdmU9XCJ0aGlzLmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWctb3ZlcicpXCJcbiAgICAgICAgICAgICAgICAgb25kcm9wPVwiaGFuZGxlRmlsZURyb3AoZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgb25jbGljaz1cImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqb2ItZmlsZS1pbnB1dCcpLmNsaWNrKClcIlxuICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjoycHggZGFzaGVkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzozMnB4IDE2cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDAuMnMsYm9yZGVyLWNvbG9yIDAuMnM7bWFyZ2luOjhweCAwO1wiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjJyZW07bWFyZ2luLWJvdHRvbTo4cHg7XCI+XHVEODNEXHVEQ0M0PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+RHJvcCBhIGZpbGUgaGVyZSwgb3IgY2xpY2sgdG8gYnJvd3NlPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC44NXJlbTtjb2xvcjojNjQ3NDhiO1wiPi50eHQgJm5ic3A7XHUwMEI3Jm5ic3A7IC5tZCAmbmJzcDtcdTAwQjcmbmJzcDsgLmh0bWwgJm5ic3A7XHUwMEI3Jm5ic3A7IC5wZGYgJm5ic3A7XHUwMEI3Jm5ic3A7IC5kb2N4ICZuYnNwO1x1MDBCNyZuYnNwOyAucnRmPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwiam9iLWZpbGUtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiXG4gICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiLnR4dCwubWQsLnJzdCwudGV4dCwuaHRtbCwuaHRtLC5wZGYsLmRvY3gsLmRvYywucnRmXCJcbiAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiZmlsZS11cGxvYWQtZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPVwiaGFuZGxlRmlsZVNlbGVjdGVkKHRoaXMuZmlsZXNbMF0pXCI+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiZmlsZS1zZWxlY3RlZC1pbmZvXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7bWFyZ2luOjhweCAwO1wiPlxuICAgICAgICAgICAgICA8c3BhbiBpZD1cImZpbGUtc2VsZWN0ZWQtbmFtZVwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6NjAwO1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJmaWxlLXNlbGVjdGVkLXNpemVcIiBzdHlsZT1cImNvbG9yOiM2NDc0OGI7bWFyZ2luLWxlZnQ6OHB4O1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwiY2xlYXJTZWxlY3RlZEZpbGUoKVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6OHB4O2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjQ3NDhiO1wiPlx1MjcxNTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiZmlsZS11cGxvYWQtZXJyb3JcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtjb2xvcjojYzAzOTJiO21hcmdpbjo4cHggMDtmb250LXNpemU6MC44NXJlbTtcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJmaWxlLXNpemUtd2FybmluZ1wiIHN0eWxlPVwiZGlzcGxheTpub25lO2NvbG9yOiM5MjQwMGU7YmFja2dyb3VuZDojZmVmM2M3O2JvcmRlcjoxcHggc29saWQgI2ZjZDM0ZDtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjRweCA4cHg7bWFyZ2luOjRweCAwO2ZvbnQtc2l6ZTowLjg1cmVtO1wiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi10b3A6NHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImZpbGUtdXBsb2FkLWJ0blwiIG9uY2xpY2s9XCJ1cGxvYWRKb2JGaWxlKClcIiBjbGFzcz1cImJ0bi1wcmltYXJ5XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XHVEODNEXHVEQ0U0IFVzZSBUaGlzIEZpbGU8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGRpdiBpZD1cImZpbGUtdXBsb2FkLXNwaW5uZXJcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtmb250LXNpemU6MC44NXJlbTtjb2xvcjojNjQ3NDhiO1wiPlx1MjNGMyBQYXJzaW5nXHUyMDI2PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICAvLyBTaG93IG1pbmltdW0tbGVuZ3RoIGhpbnQgaW1tZWRpYXRlbHkgb24gZmlyc3QgcmVuZGVyIChHQVAtMjg4KS5cbiAgX3VwZGF0ZVBhc3RlQ2hhckNvdW50KCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSW5wdXQgbWV0aG9kIHN3aXRjaGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHN3aXRjaElucHV0TWV0aG9kKG1ldGhvZCkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW5wdXQtdGFiJykuZm9yRWFjaCh0YWIgPT4gdGFiLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTtcbiAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pbnB1dC1tZXRob2QnKS5mb3JFYWNoKHBhbmVsID0+IHBhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobWV0aG9kICsgJy1tZXRob2QnKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGaWxlIHVwbG9hZFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmxldCBfcGVuZGluZ1VwbG9hZEZpbGUgPSBudWxsO1xuXG5mdW5jdGlvbiBoYW5kbGVGaWxlRHJvcChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZS1kcm9wLXpvbmUnKS5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnLW92ZXInKTtcbiAgY29uc3QgZmlsZSA9IGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlc1swXTtcbiAgaWYgKGZpbGUpIGhhbmRsZUZpbGVTZWxlY3RlZChmaWxlKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlRmlsZVNlbGVjdGVkKGZpbGUpIHtcbiAgaWYgKCFmaWxlKSByZXR1cm47XG5cbiAgY29uc3Qgc2l6ZU1iICA9IChmaWxlLnNpemUgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDEpO1xuICBjb25zdCBzaXplU3RyID0gZmlsZS5zaXplID4gMTAyNCAqIDEwMjQgPyBgJHtzaXplTWJ9IE1CYCA6IGAkeyhmaWxlLnNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQmA7XG4gIGNvbnN0IGVyckVsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZS11cGxvYWQtZXJyb3InKTtcbiAgY29uc3Qgd2FybkVsICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLXNpemUtd2FybmluZycpO1xuXG4gIGNvbnN0IGFsbG93ZWRNaW1lcyA9IFsnYXBwbGljYXRpb24vcGRmJywgJ2FwcGxpY2F0aW9uL21zd29yZCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JyxcbiAgICAndGV4dC9wbGFpbicsICd0ZXh0L2h0bWwnXTtcbiAgY29uc3QgYWxsb3dlZEV4dHMgID0gWycucGRmJywgJy5kb2MnLCAnLmRvY3gnLCAnLnR4dCcsICcuaHRtbCcsICcuaHRtJ107XG4gIGNvbnN0IGV4dCA9ICcuJyArIChmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgbWltZU9rID0gYWxsb3dlZE1pbWVzLnNvbWUobSA9PiBmaWxlLnR5cGUuc3RhcnRzV2l0aChtKSkgfHwgZmlsZS50eXBlID09PSAnJztcbiAgY29uc3QgZXh0T2sgID0gYWxsb3dlZEV4dHMuaW5jbHVkZXMoZXh0KTtcbiAgaWYgKCFtaW1lT2sgJiYgIWV4dE9rKSB7XG4gICAgZXJyRWwudGV4dENvbnRlbnQgICA9IGBVbnN1cHBvcnRlZCBmaWxlIHR5cGUgXCIke2V4dCB8fCBmaWxlLnR5cGV9XCIuIFN1cHBvcnRlZCBmb3JtYXRzOiBQREYsIFdvcmQgKC5kb2MvLmRvY3gpLCBwbGFpbiB0ZXh0LCBIVE1MLmA7XG4gICAgZXJyRWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgaWYgKHdhcm5FbCkgd2FybkVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtdXBsb2FkLWJ0bicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZpbGUuc2l6ZSA+IDIwICogMTAyNCAqIDEwMjQpIHtcbiAgICBlcnJFbC50ZXh0Q29udGVudCAgID0gYEZpbGUgaXMgdG9vIGxhcmdlICgke3NpemVNYn0gTUIpLiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBpcyAyMCBNQi5gO1xuICAgIGVyckVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIGlmICh3YXJuRWwpIHdhcm5FbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLXVwbG9hZC1idG4nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIF9wZW5kaW5nVXBsb2FkRmlsZSA9IGZpbGU7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLXNlbGVjdGVkLW5hbWUnKS50ZXh0Q29udGVudCAgPSBmaWxlLm5hbWU7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLXNlbGVjdGVkLXNpemUnKS50ZXh0Q29udGVudCAgPSBgKCR7c2l6ZVN0cn0pYDtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtc2VsZWN0ZWQtaW5mbycpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZS11cGxvYWQtYnRuJykuc3R5bGUuZGlzcGxheSAgICA9ICdpbmxpbmUtYmxvY2snO1xuICBlcnJFbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gIGlmICh3YXJuRWwpIHtcbiAgICBpZiAoZmlsZS5zaXplID4gNSAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICB3YXJuRWwudGV4dENvbnRlbnQgICA9IGBcdTI2QTAgTGFyZ2UgZmlsZSAoJHtzaXplTWJ9IE1CKSBcdTIwMTQgcGFyc2luZyBtYXkgdGFrZSBhIG1vbWVudC5gO1xuICAgICAgd2FybkVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuRWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYXJTZWxlY3RlZEZpbGUoKSB7XG4gIF9wZW5kaW5nVXBsb2FkRmlsZSA9IG51bGw7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqb2ItZmlsZS1pbnB1dCcpLnZhbHVlID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLXNlbGVjdGVkLWluZm8nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZS11cGxvYWQtYnRuJykuc3R5bGUuZGlzcGxheSAgID0gJ25vbmUnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZS11cGxvYWQtZXJyb3InKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBjb25zdCB3YXJuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtc2l6ZS13YXJuaW5nJyk7XG4gIGlmICh3YXJuKSB3YXJuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEpvYkZpbGUoKSB7XG4gIGlmICghX3BlbmRpbmdVcGxvYWRGaWxlKSByZXR1cm47XG5cbiAgY29uc3QgZXJyRWwgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLXVwbG9hZC1lcnJvcicpO1xuICBjb25zdCBzcGlubmVyICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtdXBsb2FkLXNwaW5uZXInKTtcbiAgY29uc3QgdXBsb2FkQnRuICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlLXVwbG9hZC1idG4nKTtcblxuICBlcnJFbC5zdHlsZS5kaXNwbGF5ICAgID0gJ25vbmUnO1xuICBzcGlubmVyLnN0eWxlLmRpc3BsYXkgID0gJ2lubGluZSc7XG4gIHVwbG9hZEJ0bi5kaXNhYmxlZCAgICAgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBfcGVuZGluZ1VwbG9hZEZpbGUpO1xuXG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGZldGNoKCcvYXBpL3VwbG9hZC1maWxlJywgeyBtZXRob2Q6ICdQT1NUJywgYm9keTogZm9ybURhdGEgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3AuanNvbigpO1xuXG4gICAgaWYgKCFyZXNwLm9rIHx8IGRhdGEuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLm1lc3NhZ2UgfHwgZGF0YS5lcnJvciB8fCBgU2VydmVyIGVycm9yICR7cmVzcC5zdGF0dXN9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgam9iUmVzcCA9IGF3YWl0IGZldGNoKCcvYXBpL2pvYicsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGpvYl90ZXh0OiBkYXRhLnRleHQgfSlcbiAgICB9KTtcbiAgICBjb25zdCBqb2JEYXRhID0gYXdhaXQgam9iUmVzcC5qc29uKCk7XG4gICAgaWYgKCFqb2JSZXNwLm9rKSB0aHJvdyBuZXcgRXJyb3Ioam9iRGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIHByb2Nlc3Mgam9iIGRlc2NyaXB0aW9uJyk7XG5cbiAgICBpZiAoam9iRGF0YS5lcnJvcikge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgJ0Vycm9yOiAnICsgam9iRGF0YS5lcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlTWFuYWdlci5zZXRUYWJEYXRhKCdqb2InLCBkYXRhLnRleHQpO1xuICAgICAgc2F2ZVRhYkRhdGEoKTtcbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIGBcdTI3MDUgSm9iIGRlc2NyaXB0aW9uIGxvYWRlZCBmcm9tIFwiJHtkYXRhLmZpbGVuYW1lfVwiICgke2RhdGEuY29udGVudF9sZW5ndGgudG9Mb2NhbGVTdHJpbmcoKX0gY2hhcnMpLmApO1xuICAgICAgYXdhaXQgYW5hbHl6ZUpvYigpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyRWwudGV4dENvbnRlbnQgICA9IGVyci5tZXNzYWdlO1xuICAgIGVyckVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICB9IGZpbmFsbHkge1xuICAgIHNwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB1cGxvYWRCdG4uZGlzYWJsZWQgICAgPSBmYWxzZTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBhc3RlIHRleHQgc3VibWlzc2lvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IFBBU1RFX01JTl9DSEFSUyA9IDIwMDtcblxuZnVuY3Rpb24gX3VwZGF0ZVBhc3RlQ2hhckNvdW50KCkge1xuICBjb25zdCB2YWwgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pvYi10ZXh0LWlucHV0Jyk/LnZhbHVlIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGNvdW50RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFzdGUtY2hhci1jb3VudCcpO1xuICBpZiAoIWNvdW50RWwpIHJldHVybjtcbiAgY29uc3QgbiA9IHZhbC5sZW5ndGg7XG4gIGlmIChuID09PSAwKSB7XG4gICAgY291bnRFbC5zdHlsZS5jb2xvciA9ICcjOTRhM2I4JztcbiAgICBjb3VudEVsLnRleHRDb250ZW50ID0gYFBhc3RlIHRoZSBmdWxsIGpvYiBkZXNjcmlwdGlvbiAobWluaW11bSAke1BBU1RFX01JTl9DSEFSU30gY2hhcmFjdGVycyBmb3IgYmVzdCByZXN1bHRzKWA7XG4gIH0gZWxzZSBpZiAobiA8IFBBU1RFX01JTl9DSEFSUykge1xuICAgIGNvdW50RWwuc3R5bGUuY29sb3IgPSAnI2VmNDQ0NCc7XG4gICAgY291bnRFbC50ZXh0Q29udGVudCA9IGAke259IC8gJHtQQVNURV9NSU5fQ0hBUlN9IG1pbmltdW0gXHUyMDE0IFRvbyBzaG9ydCwgYWltIGZvciBhdCBsZWFzdCAke1BBU1RFX01JTl9DSEFSU30gY2hhcmFjdGVyc2A7XG4gIH0gZWxzZSB7XG4gICAgY291bnRFbC5zdHlsZS5jb2xvciA9ICcjMTZhMzRhJztcbiAgICBjb3VudEVsLnRleHRDb250ZW50ID0gYCR7bn0gLyAke1BBU1RFX01JTl9DSEFSU30gbWluaW11bSBcdTI3MTNgO1xuICB9XG59XG5cbmZ1bmN0aW9uIF92YWxpZGF0ZVBhc3RlRmllbGQoKSB7XG4gIGNvbnN0IHZhbCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnam9iLXRleHQtaW5wdXQnKT8udmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgX3VwZGF0ZVBhc3RlQ2hhckNvdW50KCk7XG4gIGlmICh2YWwubGVuZ3RoID4gMCAmJiB2YWwubGVuZ3RoIDwgUEFTVEVfTUlOX0NIQVJTKSB7XG4gICAgX3Nob3dGaWVsZEVycm9yKCdqb2ItdGV4dC1pbnB1dCcsICdwYXN0ZS1lcnJvcicsIGBKb2IgZGVzY3JpcHRpb24gaXMgdG9vIHNob3J0IFx1MjAxNCBwbGVhc2UgcGFzdGUgYXQgbGVhc3QgJHtQQVNURV9NSU5fQ0hBUlN9IGNoYXJhY3RlcnMuYCk7XG4gIH0gZWxzZSB7XG4gICAgX2NsZWFyRmllbGRFcnJvcignam9iLXRleHQtaW5wdXQnLCAncGFzdGUtZXJyb3InKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdWJtaXRKb2JUZXh0KCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogam9iX3VpX3N1Ym1pdF9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTAzLTMxVDEyOjQ5OjQ3WidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6am9iLWlucHV0LnN1Ym1pdC10ZXh0XG4gICAqICAgY2FsbHM6XG4gICAqICAgLSBQT1NUIC9hcGkvam9iXG4gICAqICAgLSBhbmFseXplSm9iXG4gICAqICAgcmVhZHM6XG4gICAqICAgLSBkb206I2pvYi10ZXh0LWlucHV0LnZhbHVlXG4gICAqICAgd3JpdGVzOlxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvam9iLmpvYl90ZXh0XG4gICAqICAgLSB0YWI6am9iXG4gICAqICAgLSB1aTp3b3JrZmxvdy5qb2JcbiAgICogICBub3RlczogU3VibWl0cyBwYXN0ZWQgam9iIHRleHQgdG8gdGhlIGJhY2tlbmQsIGNhY2hlcyB0aGUgc2FtZSB0ZXh0IGluIHRhYiBzdGF0ZSwgdGhlbiBydW5zIGFuYWx5emVKb2IoKSBzbyBhbGwgam9iIHNvdXJjZXMgc2hhcmUgdGhlIHNhbWUgYW5hbHlzaXMgYW5kIGludGFrZSBmbG93LlxuICAgKi9cbiAgY29uc3QgdGV4dElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pvYi10ZXh0LWlucHV0Jyk7XG4gIGNvbnN0IGpvYlRleHQgPSB0ZXh0SW5wdXQudmFsdWUudHJpbSgpO1xuXG4gIGlmICgham9iVGV4dCkge1xuICAgIF9zaG93RmllbGRFcnJvcignam9iLXRleHQtaW5wdXQnLCAncGFzdGUtZXJyb3InLCAnUGxlYXNlIGVudGVyIGEgam9iIGRlc2NyaXB0aW9uIGJlZm9yZSBzdWJtaXR0aW5nLicpO1xuICAgIHRleHRJbnB1dC5mb2N1cygpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoam9iVGV4dC5sZW5ndGggPCBQQVNURV9NSU5fQ0hBUlMpIHtcbiAgICBfc2hvd0ZpZWxkRXJyb3IoJ2pvYi10ZXh0LWlucHV0JywgJ3Bhc3RlLWVycm9yJywgYEpvYiBkZXNjcmlwdGlvbiBpcyB0b28gc2hvcnQgXHUyMDE0IHBsZWFzZSBwYXN0ZSBhdCBsZWFzdCAke1BBU1RFX01JTl9DSEFSU30gY2hhcmFjdGVycy5gKTtcbiAgICB0ZXh0SW5wdXQuZm9jdXMoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgX2NsZWFyRmllbGRFcnJvcignam9iLXRleHQtaW5wdXQnLCAncGFzdGUtZXJyb3InKTtcblxuICBzZXRMb2FkaW5nKHRydWUsICdBbmFseXNpbmcgam9iIGRlc2NyaXB0aW9uXHUyMDI2Jyk7XG4gIGFwcGVuZE1lc3NhZ2UoJ3VzZXInLCAnU3VibWl0dGluZyBqb2IgZGVzY3JpcHRpb24uLi4nKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvam9iJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgam9iX3RleHQ6IGpvYlRleHQgfSlcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgX3Nob3dGaWVsZEVycm9yKCdqb2ItdGV4dC1pbnB1dCcsICdwYXN0ZS1lcnJvcicsIGRhdGEuZXJyb3IpO1xuICAgICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI3NEMgRXJyb3I6ICcgKyBkYXRhLmVycm9yLCBzdWJtaXRKb2JUZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgX2NsZWFyRmllbGRFcnJvcignam9iLXRleHQtaW5wdXQnLCAncGFzdGUtZXJyb3InKTtcbiAgICAgIHN0YXRlTWFuYWdlci5zZXRUYWJEYXRhKCdqb2InLCBqb2JUZXh0KTtcbiAgICAgIHNhdmVUYWJEYXRhKCk7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnXHUyNzA1IEpvYiBkZXNjcmlwdGlvbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5LicpO1xuXG4gICAgICBpZiAodHlwZW9mIHVwZGF0ZVRhYkJhckZvclN0YWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHVwZGF0ZVRhYkJhckZvclN0YWdlKCdqb2InKTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaFRhYignam9iJyk7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIGF3YWl0IGFuYWx5emVKb2IoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLmVycm9yKCdFcnJvciBzdWJtaXR0aW5nIGpvYjonLCBlcnJvcik7XG4gICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI3NEMgRXJyb3Igc3VibWl0dGluZyBqb2IgZGVzY3JpcHRpb246ICcgKyBlcnJvci5tZXNzYWdlLCBzdWJtaXRKb2JUZXh0KTtcbiAgfVxuXG4gIHNldExvYWRpbmcoZmFsc2UpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFVSTCBmZXRjaFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIF92YWxpZGF0ZVVSTEZpZWxkKCkge1xuICBjb25zdCB2YWwgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pvYi11cmwtaW5wdXQnKT8udmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCF2YWwpIHsgX2NsZWFyRmllbGRFcnJvcignam9iLXVybC1pbnB1dCcsICd1cmwtZXJyb3InKTsgcmV0dXJuOyB9XG4gIHRyeSB7XG4gICAgY29uc3QgdSA9IG5ldyBVUkwodmFsKTtcbiAgICBpZiAoIVsnaHR0cDonLCAnaHR0cHM6J10uaW5jbHVkZXModS5wcm90b2NvbCkpIHRocm93IG5ldyBFcnJvcignUHJvdG9jb2wgbm90IGh0dHAvaHR0cHMnKTtcbiAgICBfY2xlYXJGaWVsZEVycm9yKCdqb2ItdXJsLWlucHV0JywgJ3VybC1lcnJvcicpO1xuICB9IGNhdGNoIHtcbiAgICBfc2hvd0ZpZWxkRXJyb3IoJ2pvYi11cmwtaW5wdXQnLCAndXJsLWVycm9yJywgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFVSTCBzdGFydGluZyB3aXRoIGh0dHBzOi8vIG9yIGh0dHA6Ly8nKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEpvYkZyb21VUkwoKSB7XG4gIGNvbnN0IHVybElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pvYi11cmwtaW5wdXQnKTtcbiAgY29uc3QgdXJsID0gdXJsSW5wdXQudmFsdWUudHJpbSgpO1xuXG4gIGlmICghdXJsKSB7XG4gICAgX3Nob3dGaWVsZEVycm9yKCdqb2ItdXJsLWlucHV0JywgJ3VybC1lcnJvcicsICdQbGVhc2UgZW50ZXIgYSBVUkwgYmVmb3JlIGZldGNoaW5nLicpO1xuICAgIHVybElucHV0LmZvY3VzKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgdSA9IG5ldyBVUkwodXJsKTtcbiAgICBpZiAoIVsnaHR0cDonLCAnaHR0cHM6J10uaW5jbHVkZXModS5wcm90b2NvbCkpIHRocm93IG5ldyBFcnJvcigpO1xuICAgIF9jbGVhckZpZWxkRXJyb3IoJ2pvYi11cmwtaW5wdXQnLCAndXJsLWVycm9yJyk7XG4gIH0gY2F0Y2gge1xuICAgIF9zaG93RmllbGRFcnJvcignam9iLXVybC1pbnB1dCcsICd1cmwtZXJyb3InLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMIHN0YXJ0aW5nIHdpdGggaHR0cHM6Ly8gb3IgaHR0cDovLycpO1xuICAgIHVybElucHV0LmZvY3VzKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc2V0TG9hZGluZyh0cnVlLCAnRmV0Y2hpbmcgam9iIGZyb20gVVJMXHUyMDI2Jyk7XG4gIGFwcGVuZE1lc3NhZ2UoJ3VzZXInLCBgRmV0Y2hpbmcgam9iIGRlc2NyaXB0aW9uIGZyb20gVVJMOiAke3VybH1gKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvZmV0Y2gtam9iLXVybCcsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHVybDogdXJsIH0pXG4gICAgfSk7XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXG4gICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yO1xuICAgICAgbGV0IGhlbHBNZXNzYWdlID0gZGF0YS5tZXNzYWdlIHx8ICcnO1xuXG4gICAgICBpZiAoZGF0YS5wcm90ZWN0ZWRfc2l0ZSkge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtkYXRhLnNpdGVfbmFtZX0gUHJvdGVjdGlvbiBEZXRlY3RlZGA7XG4gICAgICAgIGhlbHBNZXNzYWdlID0gZGF0YS5tZXNzYWdlO1xuXG4gICAgICAgIGlmIChkYXRhLmluc3RydWN0aW9ucyAmJiBkYXRhLmluc3RydWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaGVscE1lc3NhZ2UgKz0gJ1xcblxcbkhvdyB0byBwcm9jZWVkOlxcbicgKyBkYXRhLmluc3RydWN0aW9ucy5tYXAoKGluc3QsIGkpID0+IGAke2kgKyAxfS4gJHtpbnN0fWApLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2hvd1Byb3RlY3RlZFNpdGVNb2RhbChkYXRhLnNpdGVfbmFtZSwgZGF0YS5tZXNzYWdlLCBkYXRhLmluc3RydWN0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgIGhlbHBNZXNzYWdlICs9ICdcXG5cXG5TdWdnZXN0ZWQgc29sdXRpb25zOlxcbicgKyBkYXRhLmluc3RydWN0aW9ucy5tYXAoKGluc3QsIGkpID0+IGAke2kgKyAxfS4gJHtpbnN0fWApLmpvaW4oJ1xcbicpO1xuICAgICAgICBzaG93QWxlcnRNb2RhbCgnVVJMIEZldGNoIEVycm9yJywgYCR7ZXJyb3JNZXNzYWdlfVxcblxcbiR7aGVscE1lc3NhZ2V9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfc2hvd0ZpZWxkRXJyb3IoJ2pvYi11cmwtaW5wdXQnLCAndXJsLWVycm9yJywgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ0Vycm9yJywgYCR7ZXJyb3JNZXNzYWdlfSR7aGVscE1lc3NhZ2UgPyAnXFxuXFxuJyArIGhlbHBNZXNzYWdlIDogJyd9YCk7XG4gICAgICB9XG5cbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdTI3NEMgJHtlcnJvck1lc3NhZ2V9OiAke2RhdGEubWVzc2FnZSB8fCAnUGxlYXNlIHRyeSBtYW51YWwgaW5wdXQuJ31gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGVNYW5hZ2VyLnNldFRhYkRhdGEoJ2pvYicsIGRhdGEuam9iX3RleHQpO1xuICAgICAgc2F2ZVRhYkRhdGEoKTtcbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIGBcdTI3MDUgJHtkYXRhLm1lc3NhZ2V9ISBGZXRjaGVkICR7ZGF0YS5jb250ZW50X2xlbmd0aCB8fCAnY29udGVudCd9IGNoYXJhY3RlcnMuIFJldmlldyB0aGUgam9iIGRlc2NyaXB0aW9uIGJlbG93LCB0aGVuIGNsaWNrIFwiXHVEODNEXHVERDBEIEFuYWx5c2UgSm9iXCIgdG8gY29udGludWUuYCk7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHN3aXRjaFRhYignam9iJyk7XG4gICAgICBhd2FpdCBwb3B1bGF0ZUpvYlRhYigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIFVSTDonLCBlcnJvcik7XG4gICAgX3Nob3dGaWVsZEVycm9yKCdqb2ItdXJsLWlucHV0JywgJ3VybC1lcnJvcicsIGBOZXR3b3JrIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgYXBwZW5kUmV0cnlNZXNzYWdlKGBOZXR3b3JrIGVycm9yIG9jY3VycmVkOiAke2Vycm9yLm1lc3NhZ2V9LiBQbGVhc2UgY2hlY2sgeW91ciBjb25uZWN0aW9uIG9yIHRyeSBtYW51YWwgaW5wdXQuYCwgZmV0Y2hKb2JGcm9tVVJMKTtcbiAgICBzaG93QWxlcnRNb2RhbCgnTmV0d29yayBFcnJvcicsICdVbmFibGUgdG8gY29ubmVjdCB0byB0aGUgc2VydmVyLiBQbGVhc2UgdHJ5IGFnYWluIG9yIHVzZSB0aGUgXCJQYXN0ZSBUZXh0XCIgb3B0aW9uIHRvIGlucHV0IHRoZSBqb2IgZGVzY3JpcHRpb24gbWFudWFsbHkuJyk7XG4gIH1cblxuICBzZXRMb2FkaW5nKGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gc2hvd1Byb3RlY3RlZFNpdGVNb2RhbChzaXRlTmFtZSwgbWVzc2FnZSwgaW5zdHJ1Y3Rpb25zKSB7XG4gIGxldCBpbnN0cnVjdGlvbnNMaXN0ID0gJyc7XG4gIGlmIChpbnN0cnVjdGlvbnMgJiYgaW5zdHJ1Y3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICBpbnN0cnVjdGlvbnNMaXN0ID0gJzxvbCBzdHlsZT1cIm1hcmdpbjogMTZweCAwOyBwYWRkaW5nLWxlZnQ6IDIwcHg7XCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zLm1hcChpbnN0ID0+IGA8bGkgc3R5bGU9XCJtYXJnaW46IDhweCAwO1wiPiR7aW5zdH08L2xpPmApLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAnPC9vbD4nO1xuICB9XG5cbiAgY29uc3Qgc2FmZU5hbWUgPSBlc2NhcGVIdG1sKHNpdGVOYW1lKTtcbiAgY29uc3Qgc2FmZU1lc3NhZ2UgPSBlc2NhcGVIdG1sKG1lc3NhZ2UpO1xuICBjb25zdCBtb2RhbENvbnRlbnQgPSBgXG4gICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLWJvdHRvbTogMTZweDtcIj5cbiAgICAgIFx1RDgzRFx1REQxMiA8c3Ryb25nPiR7c2FmZU5hbWV9IHJlcXVpcmVzIG1hbnVhbCBpbnB1dDwvc3Ryb25nPlxuICAgIDwvZGl2PlxuICAgIDxwPiR7c2FmZU1lc3NhZ2V9PC9wPlxuICAgICR7aW5zdHJ1Y3Rpb25zTGlzdH1cbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMjBweDsgcGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogI2YwZjlmZjsgYm9yZGVyOiAxcHggc29saWQgIzBlYTVlOTsgYm9yZGVyLXJhZGl1czogNnB4O1wiPlxuICAgICAgPHN0cm9uZz5cdUQ4M0RcdURDQTEgVGlwOjwvc3Ryb25nPiBBZnRlciBjb3B5aW5nIHRoZSBqb2IgZGVzY3JpcHRpb24sIGNsaWNrIHRoZSBcIlBhc3RlIFRleHRcIiB0YWIgYWJvdmUgdG8gc3VibWl0IGl0IGRpcmVjdGx5LlxuICAgIDwvZGl2PlxuICBgO1xuXG4gIHNob3dBbGVydE1vZGFsKGAke3NhZmVOYW1lfSBJbnB1dCBSZXF1aXJlZGAsIG1vZGFsQ29udGVudCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ2xlYXIgaGVscGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGNsZWFySm9iSW5wdXQoKSB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pvYi10ZXh0LWlucHV0Jyk7XG4gIGlmIChlbCkgZWwudmFsdWUgPSAnJztcbn1cblxuZnVuY3Rpb24gY2xlYXJVUkxJbnB1dCgpIHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnam9iLXVybC1pbnB1dCcpO1xuICBpZiAoZWwpIGVsLnZhbHVlID0gJyc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRmllbGQgZXJyb3IgaGVscGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIF9zaG93RmllbGRFcnJvcihpbnB1dElkLCBlcnJvcklkLCBtc2cpIHtcbiAgY29uc3QgaW5wICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpO1xuICBjb25zdCBzcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXJyb3JJZCk7XG4gIGlmIChzcGFuKSAgeyBzcGFuLnRleHRDb250ZW50ID0gbXNnOyBzcGFuLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTsgfVxuICBpZiAoaW5wKSAgIHtcbiAgICBpbnAuY2xhc3NMaXN0LmFkZCgnZmllbGQtaW52YWxpZCcpO1xuICAgIGlucC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsICd0cnVlJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2NsZWFyRmllbGRFcnJvcihpbnB1dElkLCBlcnJvcklkKSB7XG4gIGNvbnN0IGlucCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dElkKTtcbiAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVycm9ySWQpO1xuICBpZiAoc3BhbikgIHsgc3Bhbi50ZXh0Q29udGVudCA9ICcnOyBzcGFuLmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc2libGUnKTsgfVxuICBpZiAoaW5wKSAgIHtcbiAgICBpbnAuY2xhc3NMaXN0LnJlbW92ZSgnZmllbGQtaW52YWxpZCcpO1xuICAgIGlucC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsICdmYWxzZScpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFUyBtb2R1bGUgZXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmV4cG9ydCB7XG4gIHBvcHVsYXRlSm9iVGFiLFxuICBzaG93TG9hZEpvYlBhbmVsLFxuICBzd2l0Y2hJbnB1dE1ldGhvZCxcbiAgX3BlbmRpbmdVcGxvYWRGaWxlLFxuICBoYW5kbGVGaWxlRHJvcCxcbiAgaGFuZGxlRmlsZVNlbGVjdGVkLFxuICBjbGVhclNlbGVjdGVkRmlsZSxcbiAgdXBsb2FkSm9iRmlsZSxcbiAgUEFTVEVfTUlOX0NIQVJTLFxuICBfdXBkYXRlUGFzdGVDaGFyQ291bnQsXG4gIF92YWxpZGF0ZVBhc3RlRmllbGQsXG4gIHN1Ym1pdEpvYlRleHQsXG4gIF92YWxpZGF0ZVVSTEZpZWxkLFxuICBmZXRjaEpvYkZyb21VUkwsXG4gIHNob3dQcm90ZWN0ZWRTaXRlTW9kYWwsXG4gIGNsZWFySm9iSW5wdXQsXG4gIGNsZWFyVVJMSW5wdXQsXG4gIF9zaG93RmllbGRFcnJvcixcbiAgX2NsZWFyRmllbGRFcnJvcixcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBNYXJrZWRPcHRpb25zIH0gZnJvbSAnLi9NYXJrZWRPcHRpb25zLnRzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBvcmlnaW5hbCBtYXJrZWQgZGVmYXVsdCBvcHRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gX2dldERlZmF1bHRzPFBhcnNlck91dHB1dCA9IHN0cmluZywgUmVuZGVyZXJPdXRwdXQgPSBzdHJpbmc+KCk6IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4ge1xuICByZXR1cm4ge1xuICAgIGFzeW5jOiBmYWxzZSxcbiAgICBicmVha3M6IGZhbHNlLFxuICAgIGV4dGVuc2lvbnM6IG51bGwsXG4gICAgZ2ZtOiB0cnVlLFxuICAgIGhvb2tzOiBudWxsLFxuICAgIHBlZGFudGljOiBmYWxzZSxcbiAgICByZW5kZXJlcjogbnVsbCxcbiAgICBzaWxlbnQ6IGZhbHNlLFxuICAgIHRva2VuaXplcjogbnVsbCxcbiAgICB3YWxrVG9rZW5zOiBudWxsLFxuICB9O1xufVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBsZXQgX2RlZmF1bHRzOiBNYXJrZWRPcHRpb25zPGFueSwgYW55PiA9IF9nZXREZWZhdWx0cygpO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlRGVmYXVsdHM8UGFyc2VyT3V0cHV0ID0gc3RyaW5nLCBSZW5kZXJlck91dHB1dCA9IHN0cmluZz4obmV3RGVmYXVsdHM6IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4pIHtcbiAgX2RlZmF1bHRzID0gbmV3RGVmYXVsdHM7XG59XG4iLCAiY29uc3Qgbm9vcFRlc3QgPSB7IGV4ZWM6ICgpID0+IG51bGwgfSBhcyB1bmtub3duIGFzIFJlZ0V4cDtcblxuZnVuY3Rpb24gZWRpdChyZWdleDogc3RyaW5nIHwgUmVnRXhwLCBvcHQgPSAnJykge1xuICBsZXQgc291cmNlID0gdHlwZW9mIHJlZ2V4ID09PSAnc3RyaW5nJyA/IHJlZ2V4IDogcmVnZXguc291cmNlO1xuICBjb25zdCBvYmogPSB7XG4gICAgcmVwbGFjZTogKG5hbWU6IHN0cmluZyB8IFJlZ0V4cCwgdmFsOiBzdHJpbmcgfCBSZWdFeHApID0+IHtcbiAgICAgIGxldCB2YWxTb3VyY2UgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbCA6IHZhbC5zb3VyY2U7XG4gICAgICB2YWxTb3VyY2UgPSB2YWxTb3VyY2UucmVwbGFjZShvdGhlci5jYXJldCwgJyQxJyk7XG4gICAgICBzb3VyY2UgPSBzb3VyY2UucmVwbGFjZShuYW1lLCB2YWxTb3VyY2UpO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIGdldFJlZ2V4OiAoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChzb3VyY2UsIG9wdCk7XG4gICAgfSxcbiAgfTtcbiAgcmV0dXJuIG9iajtcbn1cblxuY29uc3Qgc3VwcG9ydHNMb29rYmVoaW5kID0gKCgpID0+IHtcbnRyeSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVnZXgtbGl0ZXJhbHNcbiAgcmV0dXJuICEhbmV3IFJlZ0V4cCgnKD88PTEpKD88ITEpJyk7XG59IGNhdGNoIHtcbiAgLy8gU2VlIGJyb3dzZXIgc3VwcG9ydCBoZXJlOlxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9SZWd1bGFyX2V4cHJlc3Npb25zL0xvb2tiZWhpbmRfYXNzZXJ0aW9uXG4gIHJldHVybiBmYWxzZTtcbn1cbn0pKCk7XG5cbmV4cG9ydCBjb25zdCBvdGhlciA9IHtcbiAgY29kZVJlbW92ZUluZGVudDogL14oPzogezEsNH18IHswLDN9XFx0KS9nbSxcbiAgb3V0cHV0TGlua1JlcGxhY2U6IC9cXFxcKFtcXFtcXF1dKS9nLFxuICBpbmRlbnRDb2RlQ29tcGVuc2F0aW9uOiAvXihcXHMrKSg/OmBgYCkvLFxuICBiZWdpbm5pbmdTcGFjZTogL15cXHMrLyxcbiAgZW5kaW5nSGFzaDogLyMkLyxcbiAgc3RhcnRpbmdTcGFjZUNoYXI6IC9eIC8sXG4gIGVuZGluZ1NwYWNlQ2hhcjogLyAkLyxcbiAgbm9uU3BhY2VDaGFyOiAvW14gXS8sXG4gIG5ld0xpbmVDaGFyR2xvYmFsOiAvXFxuL2csXG4gIHRhYkNoYXJHbG9iYWw6IC9cXHQvZyxcbiAgbXVsdGlwbGVTcGFjZUdsb2JhbDogL1xccysvZyxcbiAgYmxhbmtMaW5lOiAvXlsgXFx0XSokLyxcbiAgZG91YmxlQmxhbmtMaW5lOiAvXFxuWyBcXHRdKlxcblsgXFx0XSokLyxcbiAgYmxvY2txdW90ZVN0YXJ0OiAvXiB7MCwzfT4vLFxuICBibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZTogL1xcbiB7MCwzfSgoPzo9K3wtKykgKikoPz1cXG58JCkvZyxcbiAgYmxvY2txdW90ZVNldGV4dFJlcGxhY2UyOiAvXiB7MCwzfT5bIFxcdF0/L2dtLFxuICBsaXN0UmVwbGFjZU5lc3Rpbmc6IC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csXG4gIGxpc3RJc1Rhc2s6IC9eXFxbWyB4WF1cXF0gK1xcUy8sXG4gIGxpc3RSZXBsYWNlVGFzazogL15cXFtbIHhYXVxcXSArLyxcbiAgbGlzdFRhc2tDaGVja2JveDogL1xcW1sgeFhdXFxdLyxcbiAgYW55TGluZTogL1xcbi4qXFxuLyxcbiAgaHJlZkJyYWNrZXRzOiAvXjwoLiopPiQvLFxuICB0YWJsZURlbGltaXRlcjogL1s6fF0vLFxuICB0YWJsZUFsaWduQ2hhcnM6IC9eXFx8fFxcfCAqJC9nLFxuICB0YWJsZVJvd0JsYW5rTGluZTogL1xcblsgXFx0XSokLyxcbiAgdGFibGVBbGlnblJpZ2h0OiAvXiAqLSs6ICokLyxcbiAgdGFibGVBbGlnbkNlbnRlcjogL14gKjotKzogKiQvLFxuICB0YWJsZUFsaWduTGVmdDogL14gKjotKyAqJC8sXG4gIHN0YXJ0QVRhZzogL148YSAvaSxcbiAgZW5kQVRhZzogL148XFwvYT4vaSxcbiAgc3RhcnRQcmVTY3JpcHRUYWc6IC9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcXHN8PikvaSxcbiAgZW5kUHJlU2NyaXB0VGFnOiAvXjxcXC8ocHJlfGNvZGV8a2JkfHNjcmlwdCkoXFxzfD4pL2ksXG4gIHN0YXJ0QW5nbGVCcmFja2V0OiAvXjwvLFxuICBlbmRBbmdsZUJyYWNrZXQ6IC8+JC8sXG4gIHBlZGFudGljSHJlZlRpdGxlOiAvXihbXidcIl0qW15cXHNdKVxccysoWydcIl0pKC4qKVxcMi8sXG4gIHVuaWNvZGVBbHBoYU51bWVyaWM6IC9bXFxwe0x9XFxwe059XS91LFxuICBlc2NhcGVUZXN0OiAvWyY8PlwiJ10vLFxuICBlc2NhcGVSZXBsYWNlOiAvWyY8PlwiJ10vZyxcbiAgZXNjYXBlVGVzdE5vRW5jb2RlOiAvWzw+XCInXXwmKD8hKCNcXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XFx3Kyk7KS8sXG4gIGVzY2FwZVJlcGxhY2VOb0VuY29kZTogL1s8PlwiJ118Jig/ISgjXFxkezEsN318I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFxcdyspOykvZyxcbiAgY2FyZXQ6IC8oXnxbXlxcW10pXFxeL2csXG4gIHBlcmNlbnREZWNvZGU6IC8lMjUvZyxcbiAgZmluZFBpcGU6IC9cXHwvZyxcbiAgc3BsaXRQaXBlOiAvIFxcfC8sXG4gIHNsYXNoUGlwZTogL1xcXFxcXHwvZyxcbiAgY2FycmlhZ2VSZXR1cm46IC9cXHJcXG58XFxyL2csXG4gIHNwYWNlTGluZTogL14gKyQvZ20sXG4gIG5vdFNwYWNlU3RhcnQ6IC9eXFxTKi8sXG4gIGVuZGluZ05ld2xpbmU6IC9cXG4kLyxcbiAgbGlzdEl0ZW1SZWdleDogKGJ1bGw6IHN0cmluZykgPT4gbmV3IFJlZ0V4cChgXiggezAsM30ke2J1bGx9KSgoPzpbXFx0IF1bXlxcXFxuXSopPyg/OlxcXFxufCQpKWApLFxuICBuZXh0QnVsbGV0UmVnZXg6IChpbmRlbnQ6IG51bWJlcikgPT4gbmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsIGluZGVudCAtIDEpfX0oPzpbKistXXxcXFxcZHsxLDl9Wy4pXSkoKD86WyBcXHRdW15cXFxcbl0qKT8oPzpcXFxcbnwkKSlgKSxcbiAgaHJSZWdleDogKGluZGVudDogbnVtYmVyKSA9PiBuZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMywgaW5kZW50IC0gMSl9fSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXFxcKiAqKXszLH0pKD86XFxcXG4rfCQpYCksXG4gIGZlbmNlc0JlZ2luUmVnZXg6IChpbmRlbnQ6IG51bWJlcikgPT4gbmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsIGluZGVudCAtIDEpfX0oPzpcXGBcXGBcXGB8fn5+KWApLFxuICBoZWFkaW5nQmVnaW5SZWdleDogKGluZGVudDogbnVtYmVyKSA9PiBuZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMywgaW5kZW50IC0gMSl9fSNgKSxcbiAgaHRtbEJlZ2luUmVnZXg6IChpbmRlbnQ6IG51bWJlcikgPT4gbmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsIGluZGVudCAtIDEpfX08KD86W2Etel0uKj58IS0tKWAsICdpJyksXG4gIGJsb2NrcXVvdGVCZWdpblJlZ2V4OiAoaW5kZW50OiBudW1iZXIpID0+IG5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLCBpbmRlbnQgLSAxKX19PmApLFxufTtcblxuLyoqXG4gKiBCbG9jay1MZXZlbCBHcmFtbWFyXG4gKi9cblxuY29uc3QgbmV3bGluZSA9IC9eKD86WyBcXHRdKig/OlxcbnwkKSkrLztcbmNvbnN0IGJsb2NrQ29kZSA9IC9eKCg/OiB7NH18IHswLDN9XFx0KVteXFxuXSsoPzpcXG4oPzpbIFxcdF0qKD86XFxufCQpKSopPykrLztcbmNvbnN0IGZlbmNlcyA9IC9eIHswLDN9KGB7Myx9KD89W15gXFxuXSooPzpcXG58JCkpfH57Myx9KShbXlxcbl0qKSg/OlxcbnwkKSg/OnwoW1xcc1xcU10qPykoPzpcXG58JCkpKD86IHswLDN9XFwxW35gXSogKig/PVxcbnwkKXwkKS87XG5jb25zdCBociA9IC9eIHswLDN9KCg/Oi1bXFx0IF0qKXszLH18KD86X1sgXFx0XSopezMsfXwoPzpcXCpbIFxcdF0qKXszLH0pKD86XFxuK3wkKS87XG5jb25zdCBoZWFkaW5nID0gL14gezAsM30oI3sxLDZ9KSg/PVxcc3wkKSguKikoPzpcXG4rfCQpLztcbmNvbnN0IGJ1bGxldCA9IC8gezAsM30oPzpbKistXXxcXGR7MSw5fVsuKV0pLztcbmNvbnN0IGxoZWFkaW5nQ29yZSA9IC9eKD8hYnVsbCB8YmxvY2tDb2RlfGZlbmNlc3xibG9ja3F1b3RlfGhlYWRpbmd8aHRtbHx0YWJsZSkoKD86LnxcXG4oPyFcXHMqP1xcbnxidWxsIHxibG9ja0NvZGV8ZmVuY2VzfGJsb2NrcXVvdGV8aGVhZGluZ3xodG1sfHRhYmxlKSkrPylcXG4gezAsM30oPSt8LSspICooPzpcXG4rfCQpLztcbmNvbnN0IGxoZWFkaW5nID0gZWRpdChsaGVhZGluZ0NvcmUpXG4gIC5yZXBsYWNlKC9idWxsL2csIGJ1bGxldCkgLy8gbGlzdHMgY2FuIGludGVycnVwdFxuICAucmVwbGFjZSgvYmxvY2tDb2RlL2csIC8oPzogezR9fCB7MCwzfVxcdCkvKSAvLyBpbmRlbnRlZCBjb2RlIGJsb2NrcyBjYW4gaW50ZXJydXB0XG4gIC5yZXBsYWNlKC9mZW5jZXMvZywgLyB7MCwzfSg/OmB7Myx9fH57Myx9KS8pIC8vIGZlbmNlZCBjb2RlIGJsb2NrcyBjYW4gaW50ZXJydXB0XG4gIC5yZXBsYWNlKC9ibG9ja3F1b3RlL2csIC8gezAsM30+LykgLy8gYmxvY2txdW90ZSBjYW4gaW50ZXJydXB0XG4gIC5yZXBsYWNlKC9oZWFkaW5nL2csIC8gezAsM30jezEsNn0vKSAvLyBBVFggaGVhZGluZyBjYW4gaW50ZXJydXB0XG4gIC5yZXBsYWNlKC9odG1sL2csIC8gezAsM308W15cXG4+XSs+XFxuLykgLy8gYmxvY2sgaHRtbCBjYW4gaW50ZXJydXB0XG4gIC5yZXBsYWNlKC9cXHx0YWJsZS9nLCAnJykgLy8gdGFibGUgbm90IGluIGNvbW1vbm1hcmtcbiAgLmdldFJlZ2V4KCk7XG5jb25zdCBsaGVhZGluZ0dmbSA9IGVkaXQobGhlYWRpbmdDb3JlKVxuICAucmVwbGFjZSgvYnVsbC9nLCBidWxsZXQpIC8vIGxpc3RzIGNhbiBpbnRlcnJ1cHRcbiAgLnJlcGxhY2UoL2Jsb2NrQ29kZS9nLCAvKD86IHs0fXwgezAsM31cXHQpLykgLy8gaW5kZW50ZWQgY29kZSBibG9ja3MgY2FuIGludGVycnVwdFxuICAucmVwbGFjZSgvZmVuY2VzL2csIC8gezAsM30oPzpgezMsfXx+ezMsfSkvKSAvLyBmZW5jZWQgY29kZSBibG9ja3MgY2FuIGludGVycnVwdFxuICAucmVwbGFjZSgvYmxvY2txdW90ZS9nLCAvIHswLDN9Pi8pIC8vIGJsb2NrcXVvdGUgY2FuIGludGVycnVwdFxuICAucmVwbGFjZSgvaGVhZGluZy9nLCAvIHswLDN9I3sxLDZ9LykgLy8gQVRYIGhlYWRpbmcgY2FuIGludGVycnVwdFxuICAucmVwbGFjZSgvaHRtbC9nLCAvIHswLDN9PFteXFxuPl0rPlxcbi8pIC8vIGJsb2NrIGh0bWwgY2FuIGludGVycnVwdFxuICAucmVwbGFjZSgvdGFibGUvZywgLyB7MCwzfVxcfD8oPzpbOlxcLSBdKlxcfCkrW1xcOlxcLSBdKlxcbi8pIC8vIHRhYmxlIGNhbiBpbnRlcnJ1cHRcbiAgLmdldFJlZ2V4KCk7XG5jb25zdCBfcGFyYWdyYXBoID0gL14oW15cXG5dKyg/Olxcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXFxuKVteXFxuXSspKikvO1xuY29uc3QgYmxvY2tUZXh0ID0gL15bXlxcbl0rLztcbmNvbnN0IF9ibG9ja0xhYmVsID0gLyg/IVxccypcXF0pKD86XFxcXFtcXHNcXFNdfFteXFxbXFxdXFxcXF0pKy87XG5jb25zdCBkZWYgPSBlZGl0KC9eIHswLDN9XFxbKGxhYmVsKVxcXTogKig/OlxcblsgXFx0XSopPyhbXjxcXHNdW15cXHNdKnw8Lio/PikoPzooPzogKyg/OlxcblsgXFx0XSopP3wgKlxcblsgXFx0XSopKHRpdGxlKSk/ICooPzpcXG4rfCQpLylcbiAgLnJlcGxhY2UoJ2xhYmVsJywgX2Jsb2NrTGFiZWwpXG4gIC5yZXBsYWNlKCd0aXRsZScsIC8oPzpcIig/OlxcXFxcIj98W15cIlxcXFxdKSpcInwnW14nXFxuXSooPzpcXG5bXidcXG5dKykqXFxuPyd8XFwoW14oKV0qXFwpKS8pXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCBsaXN0ID0gZWRpdCgvXihidWxsKShbIFxcdF1bXlxcbl0rPyk/KD86XFxufCQpLylcbiAgLnJlcGxhY2UoL2J1bGwvZywgYnVsbGV0KVxuICAuZ2V0UmVnZXgoKTtcblxuY29uc3QgX3RhZyA9ICdhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbidcbiAgKyAnfGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9uJ1xuICArICd8ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZSdcbiAgKyAnfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb24nXG4gICsgJ3xwfHBhcmFtfHNlYXJjaHxzZWN0aW9ufHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGUnXG4gICsgJ3x0cnx0cmFja3x1bCc7XG5jb25zdCBfY29tbWVudCA9IC88IS0tKD86LT8+fFtcXHNcXFNdKj8oPzotLT58JCkpLztcbmNvbnN0IGh0bWwgPSBlZGl0KFxuICAnXiB7MCwzfSg/OicgLy8gb3B0aW9uYWwgaW5kZW50YXRpb25cbisgJzwoc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbXFxcXHM+XVtcXFxcc1xcXFxTXSo/KD86PC9cXFxcMT5bXlxcXFxuXSpcXFxcbit8JCknIC8vICgxKVxuKyAnfGNvbW1lbnRbXlxcXFxuXSooXFxcXG4rfCQpJyAvLyAoMilcbisgJ3w8XFxcXD9bXFxcXHNcXFxcU10qPyg/OlxcXFw/PlxcXFxuKnwkKScgLy8gKDMpXG4rICd8PCFbQS1aXVtcXFxcc1xcXFxTXSo/KD86PlxcXFxuKnwkKScgLy8gKDQpXG4rICd8PCFcXFxcW0NEQVRBXFxcXFtbXFxcXHNcXFxcU10qPyg/OlxcXFxdXFxcXF0+XFxcXG4qfCQpJyAvLyAoNSlcbisgJ3w8Lz8odGFnKSg/OiArfFxcXFxufC8/PilbXFxcXHNcXFxcU10qPyg/Oig/OlxcXFxuWyBcXHRdKikrXFxcXG58JCknIC8vICg2KVxuKyAnfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXFxcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFxcXHRdKig/OlxcXFxufCQpKVtcXFxcc1xcXFxTXSo/KD86KD86XFxcXG5bIFxcdF0qKStcXFxcbnwkKScgLy8gKDcpIG9wZW4gdGFnXG4rICd8PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcXFx3LV0qXFxcXHMqPig/PVsgXFxcXHRdKig/OlxcXFxufCQpKVtcXFxcc1xcXFxTXSo/KD86KD86XFxcXG5bIFxcdF0qKStcXFxcbnwkKScgLy8gKDcpIGNsb3NpbmcgdGFnXG4rICcpJywgJ2knKVxuICAucmVwbGFjZSgnY29tbWVudCcsIF9jb21tZW50KVxuICAucmVwbGFjZSgndGFnJywgX3RhZylcbiAgLnJlcGxhY2UoJ2F0dHJpYnV0ZScsIC8gK1thLXpBLVo6X11bXFx3LjotXSooPzogKj0gKlwiW15cIlxcbl0qXCJ8ICo9IConW14nXFxuXSonfCAqPSAqW15cXHNcIic9PD5gXSspPy8pXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCBwYXJhZ3JhcGggPSBlZGl0KF9wYXJhZ3JhcGgpXG4gIC5yZXBsYWNlKCdocicsIGhyKVxuICAucmVwbGFjZSgnaGVhZGluZycsICcgezAsM30jezEsNn0oPzpcXFxcc3wkKScpXG4gIC5yZXBsYWNlKCd8bGhlYWRpbmcnLCAnJykgLy8gc2V0ZXh0IGhlYWRpbmdzIGRvbid0IGludGVycnVwdCBjb21tb25tYXJrIHBhcmFncmFwaHNcbiAgLnJlcGxhY2UoJ3x0YWJsZScsICcnKVxuICAucmVwbGFjZSgnYmxvY2txdW90ZScsICcgezAsM30+JylcbiAgLnJlcGxhY2UoJ2ZlbmNlcycsICcgezAsM30oPzpgezMsfSg/PVteYFxcXFxuXSpcXFxcbil8fnszLH0pW15cXFxcbl0qXFxcXG4nKVxuICAucmVwbGFjZSgnbGlzdCcsICcgezAsM30oPzpbKistXXwxWy4pXSlbIFxcXFx0XScpIC8vIG9ubHkgbGlzdHMgc3RhcnRpbmcgZnJvbSAxIGNhbiBpbnRlcnJ1cHRcbiAgLnJlcGxhY2UoJ2h0bWwnLCAnPC8/KD86dGFnKSg/OiArfFxcXFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKScpXG4gIC5yZXBsYWNlKCd0YWcnLCBfdGFnKSAvLyBwYXJzIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSB0eXBlICg2KSBodG1sIGJsb2Nrc1xuICAuZ2V0UmVnZXgoKTtcblxuY29uc3QgYmxvY2txdW90ZSA9IGVkaXQoL14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxcbl0qKSg/OlxcbnwkKSkrLylcbiAgLnJlcGxhY2UoJ3BhcmFncmFwaCcsIHBhcmFncmFwaClcbiAgLmdldFJlZ2V4KCk7XG5cbi8qKlxuICogTm9ybWFsIEJsb2NrIEdyYW1tYXJcbiAqL1xuXG5jb25zdCBibG9ja05vcm1hbCA9IHtcbiAgYmxvY2txdW90ZSxcbiAgY29kZTogYmxvY2tDb2RlLFxuICBkZWYsXG4gIGZlbmNlcyxcbiAgaGVhZGluZyxcbiAgaHIsXG4gIGh0bWwsXG4gIGxoZWFkaW5nLFxuICBsaXN0LFxuICBuZXdsaW5lLFxuICBwYXJhZ3JhcGgsXG4gIHRhYmxlOiBub29wVGVzdCxcbiAgdGV4dDogYmxvY2tUZXh0LFxufTtcblxudHlwZSBCbG9ja0tleXMgPSBrZXlvZiB0eXBlb2YgYmxvY2tOb3JtYWw7XG5cbi8qKlxuICogR0ZNIEJsb2NrIEdyYW1tYXJcbiAqL1xuXG5jb25zdCBnZm1UYWJsZSA9IGVkaXQoXG4gICdeICooW15cXFxcbiBdLiopXFxcXG4nIC8vIEhlYWRlclxuKyAnIHswLDN9KCg/OlxcXFx8ICopPzo/LSs6PyAqKD86XFxcXHwgKjo/LSs6PyAqKSooPzpcXFxcfCAqKT8pJyAvLyBBbGlnblxuKyAnKD86XFxcXG4oKD86KD8hICpcXFxcbnxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1sKS4qKD86XFxcXG58JCkpKilcXFxcbip8JCknKSAvLyBDZWxsc1xuICAucmVwbGFjZSgnaHInLCBocilcbiAgLnJlcGxhY2UoJ2hlYWRpbmcnLCAnIHswLDN9I3sxLDZ9KD86XFxcXHN8JCknKVxuICAucmVwbGFjZSgnYmxvY2txdW90ZScsICcgezAsM30+JylcbiAgLnJlcGxhY2UoJ2NvZGUnLCAnKD86IHs0fXwgezAsM31cXHQpW15cXFxcbl0nKVxuICAucmVwbGFjZSgnZmVuY2VzJywgJyB7MCwzfSg/OmB7Myx9KD89W15gXFxcXG5dKlxcXFxuKXx+ezMsfSlbXlxcXFxuXSpcXFxcbicpXG4gIC5yZXBsYWNlKCdsaXN0JywgJyB7MCwzfSg/OlsqKy1dfDFbLildKVsgXFxcXHRdJykgLy8gb25seSBsaXN0cyBzdGFydGluZyBmcm9tIDEgY2FuIGludGVycnVwdFxuICAucmVwbGFjZSgnaHRtbCcsICc8Lz8oPzp0YWcpKD86ICt8XFxcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pJylcbiAgLnJlcGxhY2UoJ3RhZycsIF90YWcpIC8vIHRhYmxlcyBjYW4gYmUgaW50ZXJydXB0ZWQgYnkgdHlwZSAoNikgaHRtbCBibG9ja3NcbiAgLmdldFJlZ2V4KCk7XG5cbmNvbnN0IGJsb2NrR2ZtOiBSZWNvcmQ8QmxvY2tLZXlzLCBSZWdFeHA+ID0ge1xuICAuLi5ibG9ja05vcm1hbCxcbiAgbGhlYWRpbmc6IGxoZWFkaW5nR2ZtLFxuICB0YWJsZTogZ2ZtVGFibGUsXG4gIHBhcmFncmFwaDogZWRpdChfcGFyYWdyYXBoKVxuICAgIC5yZXBsYWNlKCdocicsIGhyKVxuICAgIC5yZXBsYWNlKCdoZWFkaW5nJywgJyB7MCwzfSN7MSw2fSg/OlxcXFxzfCQpJylcbiAgICAucmVwbGFjZSgnfGxoZWFkaW5nJywgJycpIC8vIHNldGV4dCBoZWFkaW5ncyBkb24ndCBpbnRlcnJ1cHQgY29tbW9ubWFyayBwYXJhZ3JhcGhzXG4gICAgLnJlcGxhY2UoJ3RhYmxlJywgZ2ZtVGFibGUpIC8vIGludGVycnVwdCBwYXJhZ3JhcGhzIHdpdGggdGFibGVcbiAgICAucmVwbGFjZSgnYmxvY2txdW90ZScsICcgezAsM30+JylcbiAgICAucmVwbGFjZSgnZmVuY2VzJywgJyB7MCwzfSg/OmB7Myx9KD89W15gXFxcXG5dKlxcXFxuKXx+ezMsfSlbXlxcXFxuXSpcXFxcbicpXG4gICAgLnJlcGxhY2UoJ2xpc3QnLCAnIHswLDN9KD86WyorLV18MVsuKV0pWyBcXFxcdF0nKSAvLyBvbmx5IGxpc3RzIHN0YXJ0aW5nIGZyb20gMSBjYW4gaW50ZXJydXB0XG4gICAgLnJlcGxhY2UoJ2h0bWwnLCAnPC8/KD86dGFnKSg/OiArfFxcXFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKScpXG4gICAgLnJlcGxhY2UoJ3RhZycsIF90YWcpIC8vIHBhcnMgY2FuIGJlIGludGVycnVwdGVkIGJ5IHR5cGUgKDYpIGh0bWwgYmxvY2tzXG4gICAgLmdldFJlZ2V4KCksXG59O1xuXG4vKipcbiAqIFBlZGFudGljIGdyYW1tYXIgKG9yaWdpbmFsIEpvaG4gR3J1YmVyJ3MgbG9vc2UgbWFya2Rvd24gc3BlY2lmaWNhdGlvbilcbiAqL1xuXG5jb25zdCBibG9ja1BlZGFudGljOiBSZWNvcmQ8QmxvY2tLZXlzLCBSZWdFeHA+ID0ge1xuICAuLi5ibG9ja05vcm1hbCxcbiAgaHRtbDogZWRpdChcbiAgICAnXiAqKD86Y29tbWVudCAqKD86XFxcXG58XFxcXHMqJCknXG4gICAgKyAnfDwodGFnKVtcXFxcc1xcXFxTXSs/PC9cXFxcMT4gKig/OlxcXFxuezIsfXxcXFxccyokKScgLy8gY2xvc2VkIHRhZ1xuICAgICsgJ3w8dGFnKD86XCJbXlwiXSpcInxcXCdbXlxcJ10qXFwnfFxcXFxzW15cXCdcIi8+XFxcXHNdKikqPy8/PiAqKD86XFxcXG57Mix9fFxcXFxzKiQpKScpXG4gICAgLnJlcGxhY2UoJ2NvbW1lbnQnLCBfY29tbWVudClcbiAgICAucmVwbGFjZSgvdGFnL2csICcoPyEoPzonXG4gICAgICArICdhfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3ViJ1xuICAgICAgKyAnfHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZyknXG4gICAgICArICdcXFxcYilcXFxcdysoPyE6fFteXFxcXHdcXFxcc0BdKkApXFxcXGInKVxuICAgIC5nZXRSZWdleCgpLFxuICBkZWY6IC9eICpcXFsoW15cXF1dKylcXF06ICo8PyhbXlxccz5dKyk+Pyg/OiArKFtcIihdW15cXG5dK1tcIildKSk/ICooPzpcXG4rfCQpLyxcbiAgaGVhZGluZzogL14oI3sxLDZ9KSguKikoPzpcXG4rfCQpLyxcbiAgZmVuY2VzOiBub29wVGVzdCwgLy8gZmVuY2VzIG5vdCBzdXBwb3J0ZWRcbiAgbGhlYWRpbmc6IC9eKC4rPylcXG4gezAsM30oPSt8LSspICooPzpcXG4rfCQpLyxcbiAgcGFyYWdyYXBoOiBlZGl0KF9wYXJhZ3JhcGgpXG4gICAgLnJlcGxhY2UoJ2hyJywgaHIpXG4gICAgLnJlcGxhY2UoJ2hlYWRpbmcnLCAnICojezEsNn0gKlteXFxuXScpXG4gICAgLnJlcGxhY2UoJ2xoZWFkaW5nJywgbGhlYWRpbmcpXG4gICAgLnJlcGxhY2UoJ3x0YWJsZScsICcnKVxuICAgIC5yZXBsYWNlKCdibG9ja3F1b3RlJywgJyB7MCwzfT4nKVxuICAgIC5yZXBsYWNlKCd8ZmVuY2VzJywgJycpXG4gICAgLnJlcGxhY2UoJ3xsaXN0JywgJycpXG4gICAgLnJlcGxhY2UoJ3xodG1sJywgJycpXG4gICAgLnJlcGxhY2UoJ3x0YWcnLCAnJylcbiAgICAuZ2V0UmVnZXgoKSxcbn07XG5cbi8qKlxuICogSW5saW5lLUxldmVsIEdyYW1tYXJcbiAqL1xuXG5jb25zdCBlc2NhcGUgPSAvXlxcXFwoWyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BcXFtcXF1cXFxcXl9ge3x9fl0pLztcbmNvbnN0IGlubGluZUNvZGUgPSAvXihgKykoW15gXXxbXmBdW1xcc1xcU10qP1teYF0pXFwxKD8hYCkvO1xuY29uc3QgYnIgPSAvXiggezIsfXxcXFxcKVxcbig/IVxccyokKS87XG5jb25zdCBpbmxpbmVUZXh0ID0gL14oYCt8W15gXSkoPzooPz0gezIsfVxcbil8W1xcc1xcU10qPyg/Oig/PVtcXFxcPCFcXFtgKl9dfFxcYl98JCl8W14gXSg/PSB7Mix9XFxuKSkpLztcblxuLy8gbGlzdCBvZiB1bmljb2RlIHB1bmN0dWF0aW9uIG1hcmtzLCBwbHVzIGFueSBtaXNzaW5nIGNoYXJhY3RlcnMgZnJvbSBDb21tb25NYXJrIHNwZWNcbmNvbnN0IF9wdW5jdHVhdGlvbiA9IC9bXFxwe1B9XFxwe1N9XS91O1xuY29uc3QgX3B1bmN0dWF0aW9uT3JTcGFjZSA9IC9bXFxzXFxwe1B9XFxwe1N9XS91O1xuY29uc3QgX25vdFB1bmN0dWF0aW9uT3JTcGFjZSA9IC9bXlxcc1xccHtQfVxccHtTfV0vdTtcbmNvbnN0IHB1bmN0dWF0aW9uID0gZWRpdCgvXigoPyFbKl9dKXB1bmN0U3BhY2UpLywgJ3UnKVxuICAucmVwbGFjZSgvcHVuY3RTcGFjZS9nLCBfcHVuY3R1YXRpb25PclNwYWNlKS5nZXRSZWdleCgpO1xuXG4vLyBHRk0gYWxsb3dzIH4gaW5zaWRlIHN0cm9uZyBhbmQgZW0gZm9yIHN0cmlrZXRocm91Z2hcbmNvbnN0IF9wdW5jdHVhdGlvbkdmbVN0cm9uZ0VtID0gLyg/IX4pW1xccHtQfVxccHtTfV0vdTtcbmNvbnN0IF9wdW5jdHVhdGlvbk9yU3BhY2VHZm1TdHJvbmdFbSA9IC8oPyF+KVtcXHNcXHB7UH1cXHB7U31dL3U7XG5jb25zdCBfbm90UHVuY3R1YXRpb25PclNwYWNlR2ZtU3Ryb25nRW0gPSAvKD86W15cXHNcXHB7UH1cXHB7U31dfH4pL3U7XG5cbi8vIHNlcXVlbmNlcyBlbSBzaG91bGQgc2tpcCBvdmVyIFt0aXRsZV0obGluayksIGBjb2RlYCwgPGh0bWw+XG5jb25zdCBibG9ja1NraXAgPSBlZGl0KC9saW5rfHByZWNvZGUtY29kZXxodG1sLywgJ2cnKVxuICAucmVwbGFjZSgnbGluaycsIC9cXFsoPzpbXlxcW1xcXWBdfCg/PGE+YCspW15gXStcXGs8YT4oPyFgKSkqP1xcXVxcKCg/OlxcXFxbXFxzXFxTXXxbXlxcXFxcXChcXCldfFxcKCg/OlxcXFxbXFxzXFxTXXxbXlxcXFxcXChcXCldKSpcXCkpKlxcKS8pXG4gIC5yZXBsYWNlKCdwcmVjb2RlLScsIHN1cHBvcnRzTG9va2JlaGluZCA/ICcoPzwhYCkoKScgOiAnKF5efFteYF0pJylcbiAgLnJlcGxhY2UoJ2NvZGUnLCAvKD88Yj5gKylbXmBdK1xcazxiPig/IWApLylcbiAgLnJlcGxhY2UoJ2h0bWwnLCAvPCg/ISApW148Pl0qPz4vKVxuICAuZ2V0UmVnZXgoKTtcblxuY29uc3QgZW1TdHJvbmdMRGVsaW1Db3JlID0gL14oPzpcXCorKD86KCg/IVxcKilwdW5jdCl8KFteXFxzKl0pKT8pfF5fKyg/OigoPyFfKXB1bmN0KXwoW15cXHNfXSkpPy87XG5cbmNvbnN0IGVtU3Ryb25nTERlbGltID0gZWRpdChlbVN0cm9uZ0xEZWxpbUNvcmUsICd1JylcbiAgLnJlcGxhY2UoL3B1bmN0L2csIF9wdW5jdHVhdGlvbilcbiAgLmdldFJlZ2V4KCk7XG5cbmNvbnN0IGVtU3Ryb25nTERlbGltR2ZtID0gZWRpdChlbVN0cm9uZ0xEZWxpbUNvcmUsICd1JylcbiAgLnJlcGxhY2UoL3B1bmN0L2csIF9wdW5jdHVhdGlvbkdmbVN0cm9uZ0VtKVxuICAuZ2V0UmVnZXgoKTtcblxuY29uc3QgZW1TdHJvbmdSRGVsaW1Bc3RDb3JlID1cbiAgJ15bXl8qXSo/X19bXl8qXSo/XFxcXCpbXl8qXSo/KD89X18pJyAvLyBTa2lwIG9ycGhhbiBpbnNpZGUgc3Ryb25nXG4rICd8W14qXSsoPz1bXipdKScgLy8gQ29uc3VtZSB0byBkZWxpbVxuKyAnfCg/IVxcXFwqKXB1bmN0KFxcXFwqKykoPz1bXFxcXHNdfCQpJyAvLyAoMSkgIyoqKiBjYW4gb25seSBiZSBhIFJpZ2h0IERlbGltaXRlclxuKyAnfG5vdFB1bmN0U3BhY2UoXFxcXCorKSg/IVxcXFwqKSg/PXB1bmN0U3BhY2V8JCknIC8vICgyKSBhKioqIywgYSoqKiBjYW4gb25seSBiZSBhIFJpZ2h0IERlbGltaXRlclxuKyAnfCg/IVxcXFwqKXB1bmN0U3BhY2UoXFxcXCorKSg/PW5vdFB1bmN0U3BhY2UpJyAvLyAoMykgIyoqKmEsICoqKmEgY2FuIG9ubHkgYmUgTGVmdCBEZWxpbWl0ZXJcbisgJ3xbXFxcXHNdKFxcXFwqKykoPyFcXFxcKikoPz1wdW5jdCknIC8vICg0KSAqKiojIGNhbiBvbmx5IGJlIExlZnQgRGVsaW1pdGVyXG4rICd8KD8hXFxcXCopcHVuY3QoXFxcXCorKSg/IVxcXFwqKSg/PXB1bmN0KScgLy8gKDUpICMqKiojIGNhbiBiZSBlaXRoZXIgTGVmdCBvciBSaWdodCBEZWxpbWl0ZXJcbisgJ3xub3RQdW5jdFNwYWNlKFxcXFwqKykoPz1ub3RQdW5jdFNwYWNlKSc7IC8vICg2KSBhKioqYSBjYW4gYmUgZWl0aGVyIExlZnQgb3IgUmlnaHQgRGVsaW1pdGVyXG5cbmNvbnN0IGVtU3Ryb25nUkRlbGltQXN0ID0gZWRpdChlbVN0cm9uZ1JEZWxpbUFzdENvcmUsICdndScpXG4gIC5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2csIF9ub3RQdW5jdHVhdGlvbk9yU3BhY2UpXG4gIC5yZXBsYWNlKC9wdW5jdFNwYWNlL2csIF9wdW5jdHVhdGlvbk9yU3BhY2UpXG4gIC5yZXBsYWNlKC9wdW5jdC9nLCBfcHVuY3R1YXRpb24pXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCBlbVN0cm9uZ1JEZWxpbUFzdEdmbSA9IGVkaXQoZW1TdHJvbmdSRGVsaW1Bc3RDb3JlLCAnZ3UnKVxuICAucmVwbGFjZSgvbm90UHVuY3RTcGFjZS9nLCBfbm90UHVuY3R1YXRpb25PclNwYWNlR2ZtU3Ryb25nRW0pXG4gIC5yZXBsYWNlKC9wdW5jdFNwYWNlL2csIF9wdW5jdHVhdGlvbk9yU3BhY2VHZm1TdHJvbmdFbSlcbiAgLnJlcGxhY2UoL3B1bmN0L2csIF9wdW5jdHVhdGlvbkdmbVN0cm9uZ0VtKVxuICAuZ2V0UmVnZXgoKTtcblxuLy8gKDYpIE5vdCBhbGxvd2VkIGZvciBfXG5jb25zdCBlbVN0cm9uZ1JEZWxpbVVuZCA9IGVkaXQoXG4gICdeW15fKl0qP1xcXFwqXFxcXCpbXl8qXSo/X1teXypdKj8oPz1cXFxcKlxcXFwqKScgLy8gU2tpcCBvcnBoYW4gaW5zaWRlIHN0cm9uZ1xuKyAnfFteX10rKD89W15fXSknIC8vIENvbnN1bWUgdG8gZGVsaW1cbisgJ3woPyFfKXB1bmN0KF8rKSg/PVtcXFxcc118JCknIC8vICgxKSAjX19fIGNhbiBvbmx5IGJlIGEgUmlnaHQgRGVsaW1pdGVyXG4rICd8bm90UHVuY3RTcGFjZShfKykoPyFfKSg/PXB1bmN0U3BhY2V8JCknIC8vICgyKSBhX19fIywgYV9fXyBjYW4gb25seSBiZSBhIFJpZ2h0IERlbGltaXRlclxuKyAnfCg/IV8pcHVuY3RTcGFjZShfKykoPz1ub3RQdW5jdFNwYWNlKScgLy8gKDMpICNfX19hLCBfX19hIGNhbiBvbmx5IGJlIExlZnQgRGVsaW1pdGVyXG4rICd8W1xcXFxzXShfKykoPyFfKSg/PXB1bmN0KScgLy8gKDQpIF9fXyMgY2FuIG9ubHkgYmUgTGVmdCBEZWxpbWl0ZXJcbisgJ3woPyFfKXB1bmN0KF8rKSg/IV8pKD89cHVuY3QpJywgJ2d1JykgLy8gKDUpICNfX18jIGNhbiBiZSBlaXRoZXIgTGVmdCBvciBSaWdodCBEZWxpbWl0ZXJcbiAgLnJlcGxhY2UoL25vdFB1bmN0U3BhY2UvZywgX25vdFB1bmN0dWF0aW9uT3JTcGFjZSlcbiAgLnJlcGxhY2UoL3B1bmN0U3BhY2UvZywgX3B1bmN0dWF0aW9uT3JTcGFjZSlcbiAgLnJlcGxhY2UoL3B1bmN0L2csIF9wdW5jdHVhdGlvbilcbiAgLmdldFJlZ2V4KCk7XG5cbi8vIFRpbGRlIGxlZnQgZGVsaW1pdGVyIGZvciBzdHJpa2V0aHJvdWdoIChzaW1pbGFyIHRvIGVtU3Ryb25nTERlbGltIGZvciBhc3RlcmlzaylcbmNvbnN0IGRlbExEZWxpbSA9IGVkaXQoL15+fj8oPzooKD8hfilwdW5jdCl8W15cXHN+XSkvLCAndScpXG4gIC5yZXBsYWNlKC9wdW5jdC9nLCBfcHVuY3R1YXRpb24pXG4gIC5nZXRSZWdleCgpO1xuXG4vLyBUaWxkZSBkZWxpbWl0ZXIgcGF0dGVybnMgZm9yIHN0cmlrZXRocm91Z2ggKHNpbWlsYXIgdG8gYXN0ZXJpc2spXG5jb25zdCBkZWxSRGVsaW1Db3JlID1cbiAgJ15bXn5dKyg/PVtefl0pJyAvLyBDb25zdW1lIHRvIGRlbGltXG4rICd8KD8hfilwdW5jdCh+fj8pKD89W1xcXFxzXXwkKScgLy8gKDEpICN+fiBjYW4gb25seSBiZSBhIFJpZ2h0IERlbGltaXRlclxuKyAnfG5vdFB1bmN0U3BhY2Uofn4/KSg/IX4pKD89cHVuY3RTcGFjZXwkKScgLy8gKDIpIGF+fiMsIGF+fiBjYW4gb25seSBiZSBhIFJpZ2h0IERlbGltaXRlclxuKyAnfCg/IX4pcHVuY3RTcGFjZSh+fj8pKD89bm90UHVuY3RTcGFjZSknIC8vICgzKSAjfn5hLCB+fmEgY2FuIG9ubHkgYmUgTGVmdCBEZWxpbWl0ZXJcbisgJ3xbXFxcXHNdKH5+PykoPyF+KSg/PXB1bmN0KScgLy8gKDQpIH5+IyBjYW4gb25seSBiZSBMZWZ0IERlbGltaXRlclxuKyAnfCg/IX4pcHVuY3Qofn4/KSg/IX4pKD89cHVuY3QpJyAvLyAoNSkgI35+IyBjYW4gYmUgZWl0aGVyIExlZnQgb3IgUmlnaHQgRGVsaW1pdGVyXG4rICd8bm90UHVuY3RTcGFjZSh+fj8pKD89bm90UHVuY3RTcGFjZSknOyAvLyAoNikgYX5+YSBjYW4gYmUgZWl0aGVyIExlZnQgb3IgUmlnaHQgRGVsaW1pdGVyXG5cbmNvbnN0IGRlbFJEZWxpbSA9IGVkaXQoZGVsUkRlbGltQ29yZSwgJ2d1JylcbiAgLnJlcGxhY2UoL25vdFB1bmN0U3BhY2UvZywgX25vdFB1bmN0dWF0aW9uT3JTcGFjZSlcbiAgLnJlcGxhY2UoL3B1bmN0U3BhY2UvZywgX3B1bmN0dWF0aW9uT3JTcGFjZSlcbiAgLnJlcGxhY2UoL3B1bmN0L2csIF9wdW5jdHVhdGlvbilcbiAgLmdldFJlZ2V4KCk7XG5cbmNvbnN0IGFueVB1bmN0dWF0aW9uID0gZWRpdCgvXFxcXChwdW5jdCkvLCAnZ3UnKVxuICAucmVwbGFjZSgvcHVuY3QvZywgX3B1bmN0dWF0aW9uKVxuICAuZ2V0UmVnZXgoKTtcblxuY29uc3QgYXV0b2xpbmsgPSBlZGl0KC9ePChzY2hlbWU6W15cXHNcXHgwMC1cXHgxZjw+XSp8ZW1haWwpPi8pXG4gIC5yZXBsYWNlKCdzY2hlbWUnLCAvW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8pXG4gIC5yZXBsYWNlKCdlbWFpbCcsIC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrKD8hWy1fXSkvKVxuICAuZ2V0UmVnZXgoKTtcblxuY29uc3QgX2lubGluZUNvbW1lbnQgPSBlZGl0KF9jb21tZW50KS5yZXBsYWNlKCcoPzotLT58JCknLCAnLS0+JykuZ2V0UmVnZXgoKTtcbmNvbnN0IHRhZyA9IGVkaXQoXG4gICdeY29tbWVudCdcbiAgICArICd8XjwvW2EtekEtWl1bXFxcXHc6LV0qXFxcXHMqPicgLy8gc2VsZi1jbG9zaW5nIHRhZ1xuICAgICsgJ3xePFthLXpBLVpdW1xcXFx3LV0qKD86YXR0cmlidXRlKSo/XFxcXHMqLz8+JyAvLyBvcGVuIHRhZ1xuICAgICsgJ3xePFxcXFw/W1xcXFxzXFxcXFNdKj9cXFxcPz4nIC8vIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24sIGUuZy4gPD9waHAgPz5cbiAgICArICd8XjwhW2EtekEtWl0rXFxcXHNbXFxcXHNcXFxcU10qPz4nIC8vIGRlY2xhcmF0aW9uLCBlLmcuIDwhRE9DVFlQRSBodG1sPlxuICAgICsgJ3xePCFcXFxcW0NEQVRBXFxcXFtbXFxcXHNcXFxcU10qP1xcXFxdXFxcXF0+JykgLy8gQ0RBVEEgc2VjdGlvblxuICAucmVwbGFjZSgnY29tbWVudCcsIF9pbmxpbmVDb21tZW50KVxuICAucmVwbGFjZSgnYXR0cmlidXRlJywgL1xccytbYS16QS1aOl9dW1xcdy46LV0qKD86XFxzKj1cXHMqXCJbXlwiXSpcInxcXHMqPVxccyonW14nXSonfFxccyo9XFxzKlteXFxzXCInPTw+YF0rKT8vKVxuICAuZ2V0UmVnZXgoKTtcblxuY29uc3QgX2lubGluZUxhYmVsID0gLyg/OlxcWyg/OlxcXFxbXFxzXFxTXXxbXlxcW1xcXVxcXFxdKSpcXF18XFxcXFtcXHNcXFNdfGArKD8hYClbXmBdKj9gKyg/IWApfGBgKyg/PVxcXSl8W15cXFtcXF1cXFxcYF0pKj8vO1xuXG5jb25zdCBsaW5rID0gZWRpdCgvXiE/XFxbKGxhYmVsKVxcXVxcKFxccyooaHJlZikoPzooPzpbIFxcdF0rKD86XFxuWyBcXHRdKik/fFxcblsgXFx0XSopKHRpdGxlKSk/XFxzKlxcKS8pXG4gIC5yZXBsYWNlKCdsYWJlbCcsIF9pbmxpbmVMYWJlbClcbiAgLnJlcGxhY2UoJ2hyZWYnLCAvPCg/OlxcXFwufFteXFxuPD5cXFxcXSkrPnxbXiBcXHRcXG5cXHgwMC1cXHgxZl0qLylcbiAgLnJlcGxhY2UoJ3RpdGxlJywgL1wiKD86XFxcXFwiP3xbXlwiXFxcXF0pKlwifCcoPzpcXFxcJz98W14nXFxcXF0pKid8XFwoKD86XFxcXFxcKT98W14pXFxcXF0pKlxcKS8pXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCByZWZsaW5rID0gZWRpdCgvXiE/XFxbKGxhYmVsKVxcXVxcWyhyZWYpXFxdLylcbiAgLnJlcGxhY2UoJ2xhYmVsJywgX2lubGluZUxhYmVsKVxuICAucmVwbGFjZSgncmVmJywgX2Jsb2NrTGFiZWwpXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCBub2xpbmsgPSBlZGl0KC9eIT9cXFsocmVmKVxcXSg/OlxcW1xcXSk/LylcbiAgLnJlcGxhY2UoJ3JlZicsIF9ibG9ja0xhYmVsKVxuICAuZ2V0UmVnZXgoKTtcblxuY29uc3QgcmVmbGlua1NlYXJjaCA9IGVkaXQoJ3JlZmxpbmt8bm9saW5rKD8hXFxcXCgpJywgJ2cnKVxuICAucmVwbGFjZSgncmVmbGluaycsIHJlZmxpbmspXG4gIC5yZXBsYWNlKCdub2xpbmsnLCBub2xpbmspXG4gIC5nZXRSZWdleCgpO1xuXG5jb25zdCBfY2FzZUluc2Vuc2l0aXZlUHJvdG9jb2wgPSAvW2hIXVt0VF1bdFRdW3BQXVtzU10/fFtmRl1bdFRdW3BQXS87XG5cbi8qKlxuICogTm9ybWFsIElubGluZSBHcmFtbWFyXG4gKi9cblxuY29uc3QgaW5saW5lTm9ybWFsID0ge1xuICBfYmFja3BlZGFsOiBub29wVGVzdCwgLy8gb25seSB1c2VkIGZvciBHRk0gdXJsXG4gIGFueVB1bmN0dWF0aW9uLFxuICBhdXRvbGluayxcbiAgYmxvY2tTa2lwLFxuICBicixcbiAgY29kZTogaW5saW5lQ29kZSxcbiAgZGVsOiBub29wVGVzdCxcbiAgZGVsTERlbGltOiBub29wVGVzdCxcbiAgZGVsUkRlbGltOiBub29wVGVzdCxcbiAgZW1TdHJvbmdMRGVsaW0sXG4gIGVtU3Ryb25nUkRlbGltQXN0LFxuICBlbVN0cm9uZ1JEZWxpbVVuZCxcbiAgZXNjYXBlLFxuICBsaW5rLFxuICBub2xpbmssXG4gIHB1bmN0dWF0aW9uLFxuICByZWZsaW5rLFxuICByZWZsaW5rU2VhcmNoLFxuICB0YWcsXG4gIHRleHQ6IGlubGluZVRleHQsXG4gIHVybDogbm9vcFRlc3QsXG59O1xuXG50eXBlIElubGluZUtleXMgPSBrZXlvZiB0eXBlb2YgaW5saW5lTm9ybWFsO1xuXG4vKipcbiAqIFBlZGFudGljIElubGluZSBHcmFtbWFyXG4gKi9cblxuY29uc3QgaW5saW5lUGVkYW50aWM6IFJlY29yZDxJbmxpbmVLZXlzLCBSZWdFeHA+ID0ge1xuICAuLi5pbmxpbmVOb3JtYWwsXG4gIGxpbms6IGVkaXQoL14hP1xcWyhsYWJlbClcXF1cXCgoLio/KVxcKS8pXG4gICAgLnJlcGxhY2UoJ2xhYmVsJywgX2lubGluZUxhYmVsKVxuICAgIC5nZXRSZWdleCgpLFxuICByZWZsaW5rOiBlZGl0KC9eIT9cXFsobGFiZWwpXFxdXFxzKlxcWyhbXlxcXV0qKVxcXS8pXG4gICAgLnJlcGxhY2UoJ2xhYmVsJywgX2lubGluZUxhYmVsKVxuICAgIC5nZXRSZWdleCgpLFxufTtcblxuLyoqXG4gKiBHRk0gSW5saW5lIEdyYW1tYXJcbiAqL1xuXG5jb25zdCBpbmxpbmVHZm06IFJlY29yZDxJbmxpbmVLZXlzLCBSZWdFeHA+ID0ge1xuICAuLi5pbmxpbmVOb3JtYWwsXG4gIGVtU3Ryb25nUkRlbGltQXN0OiBlbVN0cm9uZ1JEZWxpbUFzdEdmbSxcbiAgZW1TdHJvbmdMRGVsaW06IGVtU3Ryb25nTERlbGltR2ZtLFxuICBkZWxMRGVsaW0sXG4gIGRlbFJEZWxpbSxcbiAgdXJsOiBlZGl0KC9eKCg/OnByb3RvY29sKTpcXC9cXC98d3d3XFwuKSg/OlthLXpBLVowLTlcXC1dK1xcLj8pK1teXFxzPF0qfF5lbWFpbC8pXG4gICAgLnJlcGxhY2UoJ3Byb3RvY29sJywgX2Nhc2VJbnNlbnNpdGl2ZVByb3RvY29sKVxuICAgIC5yZXBsYWNlKCdlbWFpbCcsIC9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcXC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8pXG4gICAgLmdldFJlZ2V4KCksXG4gIF9iYWNrcGVkYWw6IC8oPzpbXj8hLiw6OypfJ1wifigpJl0rfFxcKFteKV0qXFwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJ1wifildKyg/ISQpKSsvLFxuICBkZWw6IC9eKH5+PykoPz1bXlxcc35dKSgoPzpcXFxcW1xcc1xcU118W15cXFxcXSkqPyg/OlxcXFxbXFxzXFxTXXxbXlxcc35cXFxcXSkpXFwxKD89W15+XXwkKS8sXG4gIHRleHQ6IGVkaXQoL14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cXG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcXC89P19ge1xcfH1+LV0rQCl8W1xcc1xcU10qPyg/Oig/PVtcXFxcPCFcXFtgKn5fXXxcXGJffHByb3RvY29sOlxcL1xcL3x3d3dcXC58JCl8W14gXSg/PSB7Mix9XFxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1xcLz0/X2B7XFx8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcXC89P19ge1xcfH1+LV0rQCkpKS8pXG4gICAgLnJlcGxhY2UoJ3Byb3RvY29sJywgX2Nhc2VJbnNlbnNpdGl2ZVByb3RvY29sKVxuICAgIC5nZXRSZWdleCgpLFxufTtcblxuLyoqXG4gKiBHRk0gKyBMaW5lIEJyZWFrcyBJbmxpbmUgR3JhbW1hclxuICovXG5cbmNvbnN0IGlubGluZUJyZWFrczogUmVjb3JkPElubGluZUtleXMsIFJlZ0V4cD4gPSB7XG4gIC4uLmlubGluZUdmbSxcbiAgYnI6IGVkaXQoYnIpLnJlcGxhY2UoJ3syLH0nLCAnKicpLmdldFJlZ2V4KCksXG4gIHRleHQ6IGVkaXQoaW5saW5lR2ZtLnRleHQpXG4gICAgLnJlcGxhY2UoJ1xcXFxiXycsICdcXFxcYl98IHsyLH1cXFxcbicpXG4gICAgLnJlcGxhY2UoL1xcezIsXFx9L2csICcqJylcbiAgICAuZ2V0UmVnZXgoKSxcbn07XG5cbi8qKlxuICogZXhwb3J0c1xuICovXG5cbmV4cG9ydCBjb25zdCBibG9jayA9IHtcbiAgbm9ybWFsOiBibG9ja05vcm1hbCxcbiAgZ2ZtOiBibG9ja0dmbSxcbiAgcGVkYW50aWM6IGJsb2NrUGVkYW50aWMsXG59O1xuXG5leHBvcnQgY29uc3QgaW5saW5lID0ge1xuICBub3JtYWw6IGlubGluZU5vcm1hbCxcbiAgZ2ZtOiBpbmxpbmVHZm0sXG4gIGJyZWFrczogaW5saW5lQnJlYWtzLFxuICBwZWRhbnRpYzogaW5saW5lUGVkYW50aWMsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzIHtcbiAgb3RoZXI6IHR5cGVvZiBvdGhlclxuICBibG9jazogUmVjb3JkPEJsb2NrS2V5cywgUmVnRXhwPlxuICBpbmxpbmU6IFJlY29yZDxJbmxpbmVLZXlzLCBSZWdFeHA+XG59XG4iLCAiaW1wb3J0IHsgb3RoZXIgfSBmcm9tICcuL3J1bGVzLnRzJztcblxuLyoqXG4gKiBIZWxwZXJzXG4gKi9cbmNvbnN0IGVzY2FwZVJlcGxhY2VtZW50czogeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiMzOTsnLFxufTtcbmNvbnN0IGdldEVzY2FwZVJlcGxhY2VtZW50ID0gKGNoOiBzdHJpbmcpID0+IGVzY2FwZVJlcGxhY2VtZW50c1tjaF07XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVIdG1sRW50aXRpZXMoaHRtbDogc3RyaW5nLCBlbmNvZGU/OiBib29sZWFuKSB7XG4gIGlmIChlbmNvZGUpIHtcbiAgICBpZiAob3RoZXIuZXNjYXBlVGVzdC50ZXN0KGh0bWwpKSB7XG4gICAgICByZXR1cm4gaHRtbC5yZXBsYWNlKG90aGVyLmVzY2FwZVJlcGxhY2UsIGdldEVzY2FwZVJlcGxhY2VtZW50KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG90aGVyLmVzY2FwZVRlc3ROb0VuY29kZS50ZXN0KGh0bWwpKSB7XG4gICAgICByZXR1cm4gaHRtbC5yZXBsYWNlKG90aGVyLmVzY2FwZVJlcGxhY2VOb0VuY29kZSwgZ2V0RXNjYXBlUmVwbGFjZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBodG1sO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5VcmwoaHJlZjogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgaHJlZiA9IGVuY29kZVVSSShocmVmKS5yZXBsYWNlKG90aGVyLnBlcmNlbnREZWNvZGUsICclJyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBocmVmO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRDZWxscyh0YWJsZVJvdzogc3RyaW5nLCBjb3VudD86IG51bWJlcikge1xuICAvLyBlbnN1cmUgdGhhdCBldmVyeSBjZWxsLWRlbGltaXRpbmcgcGlwZSBoYXMgYSBzcGFjZVxuICAvLyBiZWZvcmUgaXQgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSBhbiBlc2NhcGVkIHBpcGVcbiAgY29uc3Qgcm93ID0gdGFibGVSb3cucmVwbGFjZShvdGhlci5maW5kUGlwZSwgKG1hdGNoLCBvZmZzZXQsIHN0cikgPT4ge1xuICAgICAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcbiAgICAgIGxldCBjdXJyID0gb2Zmc2V0O1xuICAgICAgd2hpbGUgKC0tY3VyciA+PSAwICYmIHN0cltjdXJyXSA9PT0gJ1xcXFwnKSBlc2NhcGVkID0gIWVzY2FwZWQ7XG4gICAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgICAvLyBvZGQgbnVtYmVyIG9mIHNsYXNoZXMgbWVhbnMgfCBpcyBlc2NhcGVkXG4gICAgICAgIC8vIHNvIHdlIGxlYXZlIGl0IGFsb25lXG4gICAgICAgIHJldHVybiAnfCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhZGQgc3BhY2UgYmVmb3JlIHVuZXNjYXBlZCB8XG4gICAgICAgIHJldHVybiAnIHwnO1xuICAgICAgfVxuICAgIH0pLFxuICAgIGNlbGxzID0gcm93LnNwbGl0KG90aGVyLnNwbGl0UGlwZSk7XG4gIGxldCBpID0gMDtcblxuICAvLyBGaXJzdC9sYXN0IGNlbGwgaW4gYSByb3cgY2Fubm90IGJlIGVtcHR5IGlmIGl0IGhhcyBubyBsZWFkaW5nL3RyYWlsaW5nIHBpcGVcbiAgaWYgKCFjZWxsc1swXS50cmltKCkpIHtcbiAgICBjZWxscy5zaGlmdCgpO1xuICB9XG4gIGlmIChjZWxscy5sZW5ndGggPiAwICYmICFjZWxscy5hdCgtMSk/LnRyaW0oKSkge1xuICAgIGNlbGxzLnBvcCgpO1xuICB9XG5cbiAgaWYgKGNvdW50KSB7XG4gICAgaWYgKGNlbGxzLmxlbmd0aCA+IGNvdW50KSB7XG4gICAgICBjZWxscy5zcGxpY2UoY291bnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aGlsZSAoY2VsbHMubGVuZ3RoIDwgY291bnQpIGNlbGxzLnB1c2goJycpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgaXMgaWdub3JlZCBwZXIgdGhlIGdmbSBzcGVjXG4gICAgY2VsbHNbaV0gPSBjZWxsc1tpXS50cmltKCkucmVwbGFjZShvdGhlci5zbGFzaFBpcGUsICd8Jyk7XG4gIH1cbiAgcmV0dXJuIGNlbGxzO1xufVxuXG4vKipcbiAqIFJlbW92ZSB0cmFpbGluZyAnYydzLiBFcXVpdmFsZW50IHRvIHN0ci5yZXBsYWNlKC9jKiQvLCAnJykuXG4gKiAvYyokLyBpcyB2dWxuZXJhYmxlIHRvIFJFRE9TLlxuICpcbiAqIEBwYXJhbSBzdHJcbiAqIEBwYXJhbSBjXG4gKiBAcGFyYW0gaW52ZXJ0IFJlbW92ZSBzdWZmaXggb2Ygbm9uLWMgY2hhcnMgaW5zdGVhZC4gRGVmYXVsdCBmYWxzZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydHJpbShzdHI6IHN0cmluZywgYzogc3RyaW5nLCBpbnZlcnQ/OiBib29sZWFuKSB7XG4gIGNvbnN0IGwgPSBzdHIubGVuZ3RoO1xuICBpZiAobCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIExlbmd0aCBvZiBzdWZmaXggbWF0Y2hpbmcgdGhlIGludmVydCBjb25kaXRpb24uXG4gIGxldCBzdWZmTGVuID0gMDtcblxuICAvLyBTdGVwIGxlZnQgdW50aWwgd2UgZmFpbCB0byBtYXRjaCB0aGUgaW52ZXJ0IGNvbmRpdGlvbi5cbiAgd2hpbGUgKHN1ZmZMZW4gPCBsKSB7XG4gICAgY29uc3QgY3VyckNoYXIgPSBzdHIuY2hhckF0KGwgLSBzdWZmTGVuIC0gMSk7XG4gICAgaWYgKGN1cnJDaGFyID09PSBjICYmICFpbnZlcnQpIHtcbiAgICAgIHN1ZmZMZW4rKztcbiAgICB9IGVsc2UgaWYgKGN1cnJDaGFyICE9PSBjICYmIGludmVydCkge1xuICAgICAgc3VmZkxlbisrO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyLnNsaWNlKDAsIGwgLSBzdWZmTGVuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDbG9zaW5nQnJhY2tldChzdHI6IHN0cmluZywgYjogc3RyaW5nKSB7XG4gIGlmIChzdHIuaW5kZXhPZihiWzFdKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBsZXQgbGV2ZWwgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHJbaV0gPT09ICdcXFxcJykge1xuICAgICAgaSsrO1xuICAgIH0gZWxzZSBpZiAoc3RyW2ldID09PSBiWzBdKSB7XG4gICAgICBsZXZlbCsrO1xuICAgIH0gZWxzZSBpZiAoc3RyW2ldID09PSBiWzFdKSB7XG4gICAgICBsZXZlbC0tO1xuICAgICAgaWYgKGxldmVsIDwgMCkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGxldmVsID4gMCkge1xuICAgIHJldHVybiAtMjtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZFRhYnMobGluZTogc3RyaW5nLCBpbmRlbnQgPSAwKSB7XG4gIGxldCBjb2wgPSBpbmRlbnQ7XG4gIGxldCBleHBhbmRlZCA9ICcnO1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgbGluZSkge1xuICAgIGlmIChjaGFyID09PSAnXFx0Jykge1xuICAgICAgY29uc3QgYWRkZWQgPSA0IC0gKGNvbCAlIDQpO1xuICAgICAgZXhwYW5kZWQgKz0gJyAnLnJlcGVhdChhZGRlZCk7XG4gICAgICBjb2wgKz0gYWRkZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkICs9IGNoYXI7XG4gICAgICBjb2wrKztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwYW5kZWQ7XG59XG4iLCAiaW1wb3J0IHsgX2RlZmF1bHRzIH0gZnJvbSAnLi9kZWZhdWx0cy50cyc7XG5pbXBvcnQge1xuICBydHJpbSxcbiAgc3BsaXRDZWxscyxcbiAgZmluZENsb3NpbmdCcmFja2V0LFxuICBleHBhbmRUYWJzLFxufSBmcm9tICcuL2hlbHBlcnMudHMnO1xuaW1wb3J0IHR5cGUgeyBSdWxlcyB9IGZyb20gJy4vcnVsZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBfTGV4ZXIgfSBmcm9tICcuL0xleGVyLnRzJztcbmltcG9ydCB0eXBlIHsgTGlua3MsIFRva2VucywgVG9rZW4gfSBmcm9tICcuL1Rva2Vucy50cyc7XG5pbXBvcnQgdHlwZSB7IE1hcmtlZE9wdGlvbnMgfSBmcm9tICcuL01hcmtlZE9wdGlvbnMudHMnO1xuXG5mdW5jdGlvbiBvdXRwdXRMaW5rKGNhcDogc3RyaW5nW10sIGxpbms6IFBpY2s8VG9rZW5zLkxpbmssICdocmVmJyB8ICd0aXRsZSc+LCByYXc6IHN0cmluZywgbGV4ZXI6IF9MZXhlciwgcnVsZXM6IFJ1bGVzKTogVG9rZW5zLkxpbmsgfCBUb2tlbnMuSW1hZ2Uge1xuICBjb25zdCBocmVmID0gbGluay5ocmVmO1xuICBjb25zdCB0aXRsZSA9IGxpbmsudGl0bGUgfHwgbnVsbDtcbiAgY29uc3QgdGV4dCA9IGNhcFsxXS5yZXBsYWNlKHJ1bGVzLm90aGVyLm91dHB1dExpbmtSZXBsYWNlLCAnJDEnKTtcblxuICBsZXhlci5zdGF0ZS5pbkxpbmsgPSB0cnVlO1xuICBjb25zdCB0b2tlbjogVG9rZW5zLkxpbmsgfCBUb2tlbnMuSW1hZ2UgPSB7XG4gICAgdHlwZTogY2FwWzBdLmNoYXJBdCgwKSA9PT0gJyEnID8gJ2ltYWdlJyA6ICdsaW5rJyxcbiAgICByYXcsXG4gICAgaHJlZixcbiAgICB0aXRsZSxcbiAgICB0ZXh0LFxuICAgIHRva2VuczogbGV4ZXIuaW5saW5lVG9rZW5zKHRleHQpLFxuICB9O1xuICBsZXhlci5zdGF0ZS5pbkxpbmsgPSBmYWxzZTtcbiAgcmV0dXJuIHRva2VuO1xufVxuXG5mdW5jdGlvbiBpbmRlbnRDb2RlQ29tcGVuc2F0aW9uKHJhdzogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIHJ1bGVzOiBSdWxlcykge1xuICBjb25zdCBtYXRjaEluZGVudFRvQ29kZSA9IHJhdy5tYXRjaChydWxlcy5vdGhlci5pbmRlbnRDb2RlQ29tcGVuc2F0aW9uKTtcblxuICBpZiAobWF0Y2hJbmRlbnRUb0NvZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGNvbnN0IGluZGVudFRvQ29kZSA9IG1hdGNoSW5kZW50VG9Db2RlWzFdO1xuXG4gIHJldHVybiB0ZXh0XG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAobm9kZSA9PiB7XG4gICAgICBjb25zdCBtYXRjaEluZGVudEluTm9kZSA9IG5vZGUubWF0Y2gocnVsZXMub3RoZXIuYmVnaW5uaW5nU3BhY2UpO1xuICAgICAgaWYgKG1hdGNoSW5kZW50SW5Ob2RlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbaW5kZW50SW5Ob2RlXSA9IG1hdGNoSW5kZW50SW5Ob2RlO1xuXG4gICAgICBpZiAoaW5kZW50SW5Ob2RlLmxlbmd0aCA+PSBpbmRlbnRUb0NvZGUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBub2RlLnNsaWNlKGluZGVudFRvQ29kZS5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9KVxuICAgIC5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBUb2tlbml6ZXJcbiAqL1xuZXhwb3J0IGNsYXNzIF9Ub2tlbml6ZXI8UGFyc2VyT3V0cHV0ID0gc3RyaW5nLCBSZW5kZXJlck91dHB1dCA9IHN0cmluZz4ge1xuICBvcHRpb25zOiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+O1xuICBydWxlcyE6IFJ1bGVzOyAvLyBzZXQgYnkgdGhlIGxleGVyXG4gIGxleGVyITogX0xleGVyPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+OyAvLyBzZXQgYnkgdGhlIGxleGVyXG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IF9kZWZhdWx0cztcbiAgfVxuXG4gIHNwYWNlKHNyYzogc3RyaW5nKTogVG9rZW5zLlNwYWNlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLm5ld2xpbmUuZXhlYyhzcmMpO1xuICAgIGlmIChjYXAgJiYgY2FwWzBdLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdzcGFjZScsXG4gICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBjb2RlKHNyYzogc3RyaW5nKTogVG9rZW5zLkNvZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCkge1xuICAgICAgY29uc3QgdGV4dCA9IGNhcFswXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIuY29kZVJlbW92ZUluZGVudCwgJycpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2NvZGUnLFxuICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgY29kZUJsb2NrU3R5bGU6ICdpbmRlbnRlZCcsXG4gICAgICAgIHRleHQ6ICF0aGlzLm9wdGlvbnMucGVkYW50aWNcbiAgICAgICAgICA/IHJ0cmltKHRleHQsICdcXG4nKVxuICAgICAgICAgIDogdGV4dCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZmVuY2VzKHNyYzogc3RyaW5nKTogVG9rZW5zLkNvZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICBjb25zdCByYXcgPSBjYXBbMF07XG4gICAgICBjb25zdCB0ZXh0ID0gaW5kZW50Q29kZUNvbXBlbnNhdGlvbihyYXcsIGNhcFszXSB8fCAnJywgdGhpcy5ydWxlcyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdjb2RlJyxcbiAgICAgICAgcmF3LFxuICAgICAgICBsYW5nOiBjYXBbMl0gPyBjYXBbMl0udHJpbSgpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sICckMScpIDogY2FwWzJdLFxuICAgICAgICB0ZXh0LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBoZWFkaW5nKHNyYzogc3RyaW5nKTogVG9rZW5zLkhlYWRpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCkge1xuICAgICAgbGV0IHRleHQgPSBjYXBbMl0udHJpbSgpO1xuXG4gICAgICAvLyByZW1vdmUgdHJhaWxpbmcgI3NcbiAgICAgIGlmICh0aGlzLnJ1bGVzLm90aGVyLmVuZGluZ0hhc2gudGVzdCh0ZXh0KSkge1xuICAgICAgICBjb25zdCB0cmltbWVkID0gcnRyaW0odGV4dCwgJyMnKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgICAgIHRleHQgPSB0cmltbWVkLnRyaW0oKTtcbiAgICAgICAgfSBlbHNlIGlmICghdHJpbW1lZCB8fCB0aGlzLnJ1bGVzLm90aGVyLmVuZGluZ1NwYWNlQ2hhci50ZXN0KHRyaW1tZWQpKSB7XG4gICAgICAgICAgLy8gQ29tbW9uTWFyayByZXF1aXJlcyBzcGFjZSBiZWZvcmUgdHJhaWxpbmcgI3NcbiAgICAgICAgICB0ZXh0ID0gdHJpbW1lZC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgZGVwdGg6IGNhcFsxXS5sZW5ndGgsXG4gICAgICAgIHRleHQsXG4gICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmUodGV4dCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGhyKHNyYzogc3RyaW5nKTogVG9rZW5zLkhyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnaHInLFxuICAgICAgICByYXc6IHJ0cmltKGNhcFswXSwgJ1xcbicpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBibG9ja3F1b3RlKHNyYzogc3RyaW5nKTogVG9rZW5zLkJsb2NrcXVvdGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCkge1xuICAgICAgbGV0IGxpbmVzID0gcnRyaW0oY2FwWzBdLCAnXFxuJykuc3BsaXQoJ1xcbicpO1xuICAgICAgbGV0IHJhdyA9ICcnO1xuICAgICAgbGV0IHRleHQgPSAnJztcbiAgICAgIGNvbnN0IHRva2VuczogVG9rZW5bXSA9IFtdO1xuXG4gICAgICB3aGlsZSAobGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgaW5CbG9ja3F1b3RlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lcyA9IFtdO1xuXG4gICAgICAgIGxldCBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAvLyBnZXQgbGluZXMgdXAgdG8gYSBjb250aW51YXRpb25cbiAgICAgICAgICBpZiAodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU3RhcnQudGVzdChsaW5lc1tpXSkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRMaW5lcy5wdXNoKGxpbmVzW2ldKTtcbiAgICAgICAgICAgIGluQmxvY2txdW90ZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICghaW5CbG9ja3F1b3RlKSB7XG4gICAgICAgICAgICBjdXJyZW50TGluZXMucHVzaChsaW5lc1tpXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IGxpbmVzLnNsaWNlKGkpO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRSYXcgPSBjdXJyZW50TGluZXMuam9pbignXFxuJyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUZXh0ID0gY3VycmVudFJhd1xuICAgICAgICAgIC8vIHByZWNlZGUgc2V0ZXh0IGNvbnRpbnVhdGlvbiB3aXRoIDQgc3BhY2VzIHNvIGl0IGlzbid0IGEgc2V0ZXh0XG4gICAgICAgICAgLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZSwgJ1xcbiAgICAkMScpXG4gICAgICAgICAgLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZTIsICcnKTtcbiAgICAgICAgcmF3ID0gcmF3ID8gYCR7cmF3fVxcbiR7Y3VycmVudFJhd31gIDogY3VycmVudFJhdztcbiAgICAgICAgdGV4dCA9IHRleHQgPyBgJHt0ZXh0fVxcbiR7Y3VycmVudFRleHR9YCA6IGN1cnJlbnRUZXh0O1xuXG4gICAgICAgIC8vIHBhcnNlIGJsb2NrcXVvdGUgbGluZXMgYXMgdG9wIGxldmVsIHRva2Vuc1xuICAgICAgICAvLyBtZXJnZSBwYXJhZ3JhcGhzIGlmIHRoaXMgaXMgYSBjb250aW51YXRpb25cbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5sZXhlci5zdGF0ZS50b3A7XG4gICAgICAgIHRoaXMubGV4ZXIuc3RhdGUudG9wID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sZXhlci5ibG9ja1Rva2VucyhjdXJyZW50VGV4dCwgdG9rZW5zLCB0cnVlKTtcbiAgICAgICAgdGhpcy5sZXhlci5zdGF0ZS50b3AgPSB0b3A7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gY29udGludWF0aW9uIHRoZW4gd2UgYXJlIGRvbmVcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdFRva2VuID0gdG9rZW5zLmF0KC0xKTtcblxuICAgICAgICBpZiAobGFzdFRva2VuPy50eXBlID09PSAnY29kZScpIHtcbiAgICAgICAgICAvLyBibG9ja3F1b3RlIGNvbnRpbnVhdGlvbiBjYW5ub3QgYmUgcHJlY2VkZWQgYnkgYSBjb2RlIGJsb2NrXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAobGFzdFRva2VuPy50eXBlID09PSAnYmxvY2txdW90ZScpIHtcbiAgICAgICAgICAvLyBpbmNsdWRlIGNvbnRpbnVhdGlvbiBpbiBuZXN0ZWQgYmxvY2txdW90ZVxuICAgICAgICAgIGNvbnN0IG9sZFRva2VuID0gbGFzdFRva2VuIGFzIFRva2Vucy5CbG9ja3F1b3RlO1xuICAgICAgICAgIGNvbnN0IG5ld1RleHQgPSBvbGRUb2tlbi5yYXcgKyAnXFxuJyArIGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgIGNvbnN0IG5ld1Rva2VuID0gdGhpcy5ibG9ja3F1b3RlKG5ld1RleHQpITtcbiAgICAgICAgICB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdID0gbmV3VG9rZW47XG5cbiAgICAgICAgICByYXcgPSByYXcuc3Vic3RyaW5nKDAsIHJhdy5sZW5ndGggLSBvbGRUb2tlbi5yYXcubGVuZ3RoKSArIG5ld1Rva2VuLnJhdztcbiAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgdGV4dC5sZW5ndGggLSBvbGRUb2tlbi50ZXh0Lmxlbmd0aCkgKyBuZXdUb2tlbi50ZXh0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3RUb2tlbj8udHlwZSA9PT0gJ2xpc3QnKSB7XG4gICAgICAgICAgLy8gaW5jbHVkZSBjb250aW51YXRpb24gaW4gbmVzdGVkIGxpc3RcbiAgICAgICAgICBjb25zdCBvbGRUb2tlbiA9IGxhc3RUb2tlbiBhcyBUb2tlbnMuTGlzdDtcbiAgICAgICAgICBjb25zdCBuZXdUZXh0ID0gb2xkVG9rZW4ucmF3ICsgJ1xcbicgKyBsaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgICAgICBjb25zdCBuZXdUb2tlbiA9IHRoaXMubGlzdChuZXdUZXh0KSE7XG4gICAgICAgICAgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSA9IG5ld1Rva2VuO1xuXG4gICAgICAgICAgcmF3ID0gcmF3LnN1YnN0cmluZygwLCByYXcubGVuZ3RoIC0gbGFzdFRva2VuLnJhdy5sZW5ndGgpICsgbmV3VG9rZW4ucmF3O1xuICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0Lmxlbmd0aCAtIG9sZFRva2VuLnJhdy5sZW5ndGgpICsgbmV3VG9rZW4ucmF3O1xuICAgICAgICAgIGxpbmVzID0gbmV3VGV4dC5zdWJzdHJpbmcodG9rZW5zLmF0KC0xKSEucmF3Lmxlbmd0aCkuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdibG9ja3F1b3RlJyxcbiAgICAgICAgcmF3LFxuICAgICAgICB0b2tlbnMsXG4gICAgICAgIHRleHQsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGxpc3Qoc3JjOiBzdHJpbmcpOiBUb2tlbnMuTGlzdCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCkge1xuICAgICAgbGV0IGJ1bGwgPSBjYXBbMV0udHJpbSgpO1xuICAgICAgY29uc3QgaXNvcmRlcmVkID0gYnVsbC5sZW5ndGggPiAxO1xuXG4gICAgICBjb25zdCBsaXN0OiBUb2tlbnMuTGlzdCA9IHtcbiAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICByYXc6ICcnLFxuICAgICAgICBvcmRlcmVkOiBpc29yZGVyZWQsXG4gICAgICAgIHN0YXJ0OiBpc29yZGVyZWQgPyArYnVsbC5zbGljZSgwLCAtMSkgOiAnJyxcbiAgICAgICAgbG9vc2U6IGZhbHNlLFxuICAgICAgICBpdGVtczogW10sXG4gICAgICB9O1xuXG4gICAgICBidWxsID0gaXNvcmRlcmVkID8gYFxcXFxkezEsOX1cXFxcJHtidWxsLnNsaWNlKC0xKX1gIDogYFxcXFwke2J1bGx9YDtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgICBidWxsID0gaXNvcmRlcmVkID8gYnVsbCA6ICdbKistXSc7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCBuZXh0IGxpc3QgaXRlbVxuICAgICAgY29uc3QgaXRlbVJlZ2V4ID0gdGhpcy5ydWxlcy5vdGhlci5saXN0SXRlbVJlZ2V4KGJ1bGwpO1xuICAgICAgbGV0IGVuZHNXaXRoQmxhbmtMaW5lID0gZmFsc2U7XG4gICAgICAvLyBDaGVjayBpZiBjdXJyZW50IGJ1bGxldCBwb2ludCBjYW4gc3RhcnQgYSBuZXcgTGlzdCBJdGVtXG4gICAgICB3aGlsZSAoc3JjKSB7XG4gICAgICAgIGxldCBlbmRFYXJseSA9IGZhbHNlO1xuICAgICAgICBsZXQgcmF3ID0gJyc7XG4gICAgICAgIGxldCBpdGVtQ29udGVudHMgPSAnJztcbiAgICAgICAgaWYgKCEoY2FwID0gaXRlbVJlZ2V4LmV4ZWMoc3JjKSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJ1bGVzLmJsb2NrLmhyLnRlc3Qoc3JjKSkgeyAvLyBFbmQgbGlzdCBpZiBidWxsZXQgd2FzIGFjdHVhbGx5IEhSIChwb3NzaWJseSBtb3ZlIGludG8gaXRlbVJlZ2V4PylcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJhdyA9IGNhcFswXTtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhyYXcubGVuZ3RoKTtcblxuICAgICAgICBsZXQgbGluZSA9IGV4cGFuZFRhYnMoY2FwWzJdLnNwbGl0KCdcXG4nLCAxKVswXSwgY2FwWzFdLmxlbmd0aCk7XG4gICAgICAgIGxldCBuZXh0TGluZSA9IHNyYy5zcGxpdCgnXFxuJywgMSlbMF07XG4gICAgICAgIGxldCBibGFua0xpbmUgPSAhbGluZS50cmltKCk7XG5cbiAgICAgICAgbGV0IGluZGVudCA9IDA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICAgICAgICBpbmRlbnQgPSAyO1xuICAgICAgICAgIGl0ZW1Db250ZW50cyA9IGxpbmUudHJpbVN0YXJ0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmxhbmtMaW5lKSB7XG4gICAgICAgICAgaW5kZW50ID0gY2FwWzFdLmxlbmd0aCArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5kZW50ID0gbGluZS5zZWFyY2godGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIpOyAvLyBGaW5kIGZpcnN0IG5vbi1zcGFjZSBjaGFyXG4gICAgICAgICAgaW5kZW50ID0gaW5kZW50ID4gNCA/IDEgOiBpbmRlbnQ7IC8vIFRyZWF0IGluZGVudGVkIGNvZGUgYmxvY2tzICg+IDQgc3BhY2VzKSBhcyBoYXZpbmcgb25seSAxIGluZGVudFxuICAgICAgICAgIGl0ZW1Db250ZW50cyA9IGxpbmUuc2xpY2UoaW5kZW50KTtcbiAgICAgICAgICBpbmRlbnQgKz0gY2FwWzFdLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChibGFua0xpbmUgJiYgdGhpcy5ydWxlcy5vdGhlci5ibGFua0xpbmUudGVzdChuZXh0TGluZSkpIHsgLy8gSXRlbXMgYmVnaW4gd2l0aCBhdCBtb3N0IG9uZSBibGFuayBsaW5lXG4gICAgICAgICAgcmF3ICs9IG5leHRMaW5lICsgJ1xcbic7XG4gICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhuZXh0TGluZS5sZW5ndGggKyAxKTtcbiAgICAgICAgICBlbmRFYXJseSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWVuZEVhcmx5KSB7XG4gICAgICAgICAgY29uc3QgbmV4dEJ1bGxldFJlZ2V4ID0gdGhpcy5ydWxlcy5vdGhlci5uZXh0QnVsbGV0UmVnZXgoaW5kZW50KTtcbiAgICAgICAgICBjb25zdCBoclJlZ2V4ID0gdGhpcy5ydWxlcy5vdGhlci5oclJlZ2V4KGluZGVudCk7XG4gICAgICAgICAgY29uc3QgZmVuY2VzQmVnaW5SZWdleCA9IHRoaXMucnVsZXMub3RoZXIuZmVuY2VzQmVnaW5SZWdleChpbmRlbnQpO1xuICAgICAgICAgIGNvbnN0IGhlYWRpbmdCZWdpblJlZ2V4ID0gdGhpcy5ydWxlcy5vdGhlci5oZWFkaW5nQmVnaW5SZWdleChpbmRlbnQpO1xuICAgICAgICAgIGNvbnN0IGh0bWxCZWdpblJlZ2V4ID0gdGhpcy5ydWxlcy5vdGhlci5odG1sQmVnaW5SZWdleChpbmRlbnQpO1xuICAgICAgICAgIGNvbnN0IGJsb2NrcXVvdGVCZWdpblJlZ2V4ID0gdGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlQmVnaW5SZWdleChpbmRlbnQpO1xuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgZm9sbG93aW5nIGxpbmVzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBMaXN0IEl0ZW1cbiAgICAgICAgICB3aGlsZSAoc3JjKSB7XG4gICAgICAgICAgICBjb25zdCByYXdMaW5lID0gc3JjLnNwbGl0KCdcXG4nLCAxKVswXTtcbiAgICAgICAgICAgIGxldCBuZXh0TGluZVdpdGhvdXRUYWJzO1xuICAgICAgICAgICAgbmV4dExpbmUgPSByYXdMaW5lO1xuXG4gICAgICAgICAgICAvLyBSZS1hbGlnbiB0byBmb2xsb3cgY29tbW9ubWFyayBuZXN0aW5nIHJ1bGVzXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgICAgICAgIG5leHRMaW5lID0gbmV4dExpbmUucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlTmVzdGluZywgJyAgJyk7XG4gICAgICAgICAgICAgIG5leHRMaW5lV2l0aG91dFRhYnMgPSBuZXh0TGluZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5leHRMaW5lV2l0aG91dFRhYnMgPSBuZXh0TGluZS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIudGFiQ2hhckdsb2JhbCwgJyAgICAnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRW5kIGxpc3QgaXRlbSBpZiBmb3VuZCBjb2RlIGZlbmNlc1xuICAgICAgICAgICAgaWYgKGZlbmNlc0JlZ2luUmVnZXgudGVzdChuZXh0TGluZSkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVuZCBsaXN0IGl0ZW0gaWYgZm91bmQgc3RhcnQgb2YgbmV3IGhlYWRpbmdcbiAgICAgICAgICAgIGlmIChoZWFkaW5nQmVnaW5SZWdleC50ZXN0KG5leHRMaW5lKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRW5kIGxpc3QgaXRlbSBpZiBmb3VuZCBzdGFydCBvZiBodG1sIGJsb2NrXG4gICAgICAgICAgICBpZiAoaHRtbEJlZ2luUmVnZXgudGVzdChuZXh0TGluZSkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVuZCBsaXN0IGl0ZW0gaWYgZm91bmQgc3RhcnQgb2YgYmxvY2txdW90ZVxuICAgICAgICAgICAgaWYgKGJsb2NrcXVvdGVCZWdpblJlZ2V4LnRlc3QobmV4dExpbmUpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBFbmQgbGlzdCBpdGVtIGlmIGZvdW5kIHN0YXJ0IG9mIG5ldyBidWxsZXRcbiAgICAgICAgICAgIGlmIChuZXh0QnVsbGV0UmVnZXgudGVzdChuZXh0TGluZSkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEhvcml6b250YWwgcnVsZSBmb3VuZFxuICAgICAgICAgICAgaWYgKGhyUmVnZXgudGVzdChuZXh0TGluZSkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXh0TGluZVdpdGhvdXRUYWJzLnNlYXJjaCh0aGlzLnJ1bGVzLm90aGVyLm5vblNwYWNlQ2hhcikgPj0gaW5kZW50IHx8ICFuZXh0TGluZS50cmltKCkpIHsgLy8gRGVkZW50IGlmIHBvc3NpYmxlXG4gICAgICAgICAgICAgIGl0ZW1Db250ZW50cyArPSAnXFxuJyArIG5leHRMaW5lV2l0aG91dFRhYnMuc2xpY2UoaW5kZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIG5vdCBlbm91Z2ggaW5kZW50YXRpb25cbiAgICAgICAgICAgICAgaWYgKGJsYW5rTGluZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gcGFyYWdyYXBoIGNvbnRpbnVhdGlvbiB1bmxlc3MgbGFzdCBsaW5lIHdhcyBhIGRpZmZlcmVudCBibG9jayBsZXZlbCBlbGVtZW50XG4gICAgICAgICAgICAgIGlmIChsaW5lLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJDaGFyR2xvYmFsLCAnICAgICcpLnNlYXJjaCh0aGlzLnJ1bGVzLm90aGVyLm5vblNwYWNlQ2hhcikgPj0gNCkgeyAvLyBpbmRlbnRlZCBjb2RlIGJsb2NrXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGZlbmNlc0JlZ2luUmVnZXgudGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChoZWFkaW5nQmVnaW5SZWdleC50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGhyUmVnZXgudGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaXRlbUNvbnRlbnRzICs9ICdcXG4nICsgbmV4dExpbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJsYW5rTGluZSA9ICFuZXh0TGluZS50cmltKCk7XG5cbiAgICAgICAgICAgIHJhdyArPSByYXdMaW5lICsgJ1xcbic7XG4gICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHJhd0xpbmUubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICBsaW5lID0gbmV4dExpbmVXaXRob3V0VGFicy5zbGljZShpbmRlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbGlzdC5sb29zZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBpdGVtIGVuZGVkIHdpdGggYSBibGFuayBsaW5lLCB0aGUgbGlzdCBpcyBsb29zZVxuICAgICAgICAgIGlmIChlbmRzV2l0aEJsYW5rTGluZSkge1xuICAgICAgICAgICAgbGlzdC5sb29zZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJ1bGVzLm90aGVyLmRvdWJsZUJsYW5rTGluZS50ZXN0KHJhdykpIHtcbiAgICAgICAgICAgIGVuZHNXaXRoQmxhbmtMaW5lID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsaXN0Lml0ZW1zLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdsaXN0X2l0ZW0nLFxuICAgICAgICAgIHJhdyxcbiAgICAgICAgICB0YXNrOiAhIXRoaXMub3B0aW9ucy5nZm0gJiYgdGhpcy5ydWxlcy5vdGhlci5saXN0SXNUYXNrLnRlc3QoaXRlbUNvbnRlbnRzKSxcbiAgICAgICAgICBsb29zZTogZmFsc2UsXG4gICAgICAgICAgdGV4dDogaXRlbUNvbnRlbnRzLFxuICAgICAgICAgIHRva2VuczogW10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxpc3QucmF3ICs9IHJhdztcbiAgICAgIH1cblxuICAgICAgLy8gRG8gbm90IGNvbnN1bWUgbmV3bGluZXMgYXQgZW5kIG9mIGZpbmFsIGl0ZW0uIEFsdGVybmF0aXZlbHksIG1ha2UgaXRlbVJlZ2V4ICpzdGFydCogd2l0aCBhbnkgbmV3bGluZXMgdG8gc2ltcGxpZnkvc3BlZWQgdXAgZW5kc1dpdGhCbGFua0xpbmUgbG9naWNcbiAgICAgIGNvbnN0IGxhc3RJdGVtID0gbGlzdC5pdGVtcy5hdCgtMSk7XG4gICAgICBpZiAobGFzdEl0ZW0pIHtcbiAgICAgICAgbGFzdEl0ZW0ucmF3ID0gbGFzdEl0ZW0ucmF3LnRyaW1FbmQoKTtcbiAgICAgICAgbGFzdEl0ZW0udGV4dCA9IGxhc3RJdGVtLnRleHQudHJpbUVuZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm90IGEgbGlzdCBzaW5jZSB0aGVyZSB3ZXJlIG5vIGl0ZW1zXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxpc3QucmF3ID0gbGlzdC5yYXcudHJpbUVuZCgpO1xuXG4gICAgICAvLyBJdGVtIGNoaWxkIHRva2VucyBoYW5kbGVkIGhlcmUgYXQgZW5kIGJlY2F1c2Ugd2UgbmVlZGVkIHRvIGhhdmUgdGhlIGZpbmFsIGl0ZW0gdG8gdHJpbSBpdCBmaXJzdFxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QuaXRlbXMpIHtcbiAgICAgICAgdGhpcy5sZXhlci5zdGF0ZS50b3AgPSBmYWxzZTtcbiAgICAgICAgaXRlbS50b2tlbnMgPSB0aGlzLmxleGVyLmJsb2NrVG9rZW5zKGl0ZW0udGV4dCwgW10pO1xuICAgICAgICBpZiAoaXRlbS50YXNrKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIGNoZWNrYm94IG1hcmtkb3duIGZyb20gaXRlbSB0b2tlbnNcbiAgICAgICAgICBpdGVtLnRleHQgPSBpdGVtLnRleHQucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlVGFzaywgJycpO1xuICAgICAgICAgIGlmIChpdGVtLnRva2Vuc1swXT8udHlwZSA9PT0gJ3RleHQnIHx8IGl0ZW0udG9rZW5zWzBdPy50eXBlID09PSAncGFyYWdyYXBoJykge1xuICAgICAgICAgICAgaXRlbS50b2tlbnNbMF0ucmF3ID0gaXRlbS50b2tlbnNbMF0ucmF3LnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZVRhc2ssICcnKTtcbiAgICAgICAgICAgIGl0ZW0udG9rZW5zWzBdLnRleHQgPSBpdGVtLnRva2Vuc1swXS50ZXh0LnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZVRhc2ssICcnKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmxleGVyLmlubGluZVF1ZXVlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnJ1bGVzLm90aGVyLmxpc3RJc1Rhc2sudGVzdCh0aGlzLmxleGVyLmlubGluZVF1ZXVlW2ldLnNyYykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxleGVyLmlubGluZVF1ZXVlW2ldLnNyYyA9IHRoaXMubGV4ZXIuaW5saW5lUXVldWVbaV0uc3JjLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZVRhc2ssICcnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRhc2tSYXcgPSB0aGlzLnJ1bGVzLm90aGVyLmxpc3RUYXNrQ2hlY2tib3guZXhlYyhpdGVtLnJhdyk7XG4gICAgICAgICAgaWYgKHRhc2tSYXcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrYm94VG9rZW46IFRva2Vucy5DaGVja2JveCA9IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICAgICAgcmF3OiB0YXNrUmF3WzBdICsgJyAnLFxuICAgICAgICAgICAgICBjaGVja2VkOiB0YXNrUmF3WzBdICE9PSAnWyBdJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpdGVtLmNoZWNrZWQgPSBjaGVja2JveFRva2VuLmNoZWNrZWQ7XG4gICAgICAgICAgICBpZiAobGlzdC5sb29zZSkge1xuICAgICAgICAgICAgICBpZiAoaXRlbS50b2tlbnNbMF0gJiYgWydwYXJhZ3JhcGgnLCAndGV4dCddLmluY2x1ZGVzKGl0ZW0udG9rZW5zWzBdLnR5cGUpICYmICd0b2tlbnMnIGluIGl0ZW0udG9rZW5zWzBdICYmIGl0ZW0udG9rZW5zWzBdLnRva2Vucykge1xuICAgICAgICAgICAgICAgIGl0ZW0udG9rZW5zWzBdLnJhdyA9IGNoZWNrYm94VG9rZW4ucmF3ICsgaXRlbS50b2tlbnNbMF0ucmF3O1xuICAgICAgICAgICAgICAgIGl0ZW0udG9rZW5zWzBdLnRleHQgPSBjaGVja2JveFRva2VuLnJhdyArIGl0ZW0udG9rZW5zWzBdLnRleHQ7XG4gICAgICAgICAgICAgICAgaXRlbS50b2tlbnNbMF0udG9rZW5zLnVuc2hpZnQoY2hlY2tib3hUb2tlbik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbS50b2tlbnMudW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICAgICAgICAgICAgICAgIHJhdzogY2hlY2tib3hUb2tlbi5yYXcsXG4gICAgICAgICAgICAgICAgICB0ZXh0OiBjaGVja2JveFRva2VuLnJhdyxcbiAgICAgICAgICAgICAgICAgIHRva2VuczogW2NoZWNrYm94VG9rZW5dLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpdGVtLnRva2Vucy51bnNoaWZ0KGNoZWNrYm94VG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbGlzdC5sb29zZSkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIGxpc3Qgc2hvdWxkIGJlIGxvb3NlXG4gICAgICAgICAgY29uc3Qgc3BhY2VycyA9IGl0ZW0udG9rZW5zLmZpbHRlcih0ID0+IHQudHlwZSA9PT0gJ3NwYWNlJyk7XG4gICAgICAgICAgY29uc3QgaGFzTXVsdGlwbGVMaW5lQnJlYWtzID0gc3BhY2Vycy5sZW5ndGggPiAwICYmIHNwYWNlcnMuc29tZSh0ID0+IHRoaXMucnVsZXMub3RoZXIuYW55TGluZS50ZXN0KHQucmF3KSk7XG5cbiAgICAgICAgICBsaXN0Lmxvb3NlID0gaGFzTXVsdGlwbGVMaW5lQnJlYWtzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBhbGwgaXRlbXMgdG8gbG9vc2UgaWYgbGlzdCBpcyBsb29zZVxuICAgICAgaWYgKGxpc3QubG9vc2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QuaXRlbXMpIHtcbiAgICAgICAgICBpdGVtLmxvb3NlID0gdHJ1ZTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIGl0ZW0udG9rZW5zKSB7XG4gICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgIHRva2VuLnR5cGUgPSAncGFyYWdyYXBoJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuICB9XG5cbiAgaHRtbChzcmM6IHN0cmluZyk6IFRva2Vucy5IVE1MIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhzcmMpO1xuICAgIGlmIChjYXApIHtcbiAgICAgIGNvbnN0IHRva2VuOiBUb2tlbnMuSFRNTCA9IHtcbiAgICAgICAgdHlwZTogJ2h0bWwnLFxuICAgICAgICBibG9jazogdHJ1ZSxcbiAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgIHByZTogY2FwWzFdID09PSAncHJlJyB8fCBjYXBbMV0gPT09ICdzY3JpcHQnIHx8IGNhcFsxXSA9PT0gJ3N0eWxlJyxcbiAgICAgICAgdGV4dDogY2FwWzBdLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG4gIH1cblxuICBkZWYoc3JjOiBzdHJpbmcpOiBUb2tlbnMuRGVmIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmRlZi5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCkge1xuICAgICAgY29uc3QgdGFnID0gY2FwWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLm11bHRpcGxlU3BhY2VHbG9iYWwsICcgJyk7XG4gICAgICBjb25zdCBocmVmID0gY2FwWzJdID8gY2FwWzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5ocmVmQnJhY2tldHMsICckMScpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sICckMScpIDogJyc7XG4gICAgICBjb25zdCB0aXRsZSA9IGNhcFszXSA/IGNhcFszXS5zdWJzdHJpbmcoMSwgY2FwWzNdLmxlbmd0aCAtIDEpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sICckMScpIDogY2FwWzNdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2RlZicsXG4gICAgICAgIHRhZyxcbiAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgIGhyZWYsXG4gICAgICAgIHRpdGxlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICB0YWJsZShzcmM6IHN0cmluZyk6IFRva2Vucy5UYWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKHNyYyk7XG4gICAgaWYgKCFjYXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucnVsZXMub3RoZXIudGFibGVEZWxpbWl0ZXIudGVzdChjYXBbMl0pKSB7XG4gICAgICAvLyBkZWxpbWl0ZXIgcm93IG11c3QgaGF2ZSBhIHBpcGUgKHwpIG9yIGNvbG9uICg6KSBvdGhlcndpc2UgaXQgaXMgYSBzZXRleHQgaGVhZGluZ1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnMgPSBzcGxpdENlbGxzKGNhcFsxXSk7XG4gICAgY29uc3QgYWxpZ25zID0gY2FwWzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJsZUFsaWduQ2hhcnMsICcnKS5zcGxpdCgnfCcpO1xuICAgIGNvbnN0IHJvd3MgPSBjYXBbM10/LnRyaW0oKSA/IGNhcFszXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIudGFibGVSb3dCbGFua0xpbmUsICcnKS5zcGxpdCgnXFxuJykgOiBbXTtcblxuICAgIGNvbnN0IGl0ZW06IFRva2Vucy5UYWJsZSA9IHtcbiAgICAgIHR5cGU6ICd0YWJsZScsXG4gICAgICByYXc6IGNhcFswXSxcbiAgICAgIGhlYWRlcjogW10sXG4gICAgICBhbGlnbjogW10sXG4gICAgICByb3dzOiBbXSxcbiAgICB9O1xuXG4gICAgaWYgKGhlYWRlcnMubGVuZ3RoICE9PSBhbGlnbnMubGVuZ3RoKSB7XG4gICAgICAvLyBoZWFkZXIgYW5kIGFsaWduIGNvbHVtbnMgbXVzdCBiZSBlcXVhbCwgcm93cyBjYW4gYmUgZGlmZmVyZW50LlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgYWxpZ24gb2YgYWxpZ25zKSB7XG4gICAgICBpZiAodGhpcy5ydWxlcy5vdGhlci50YWJsZUFsaWduUmlnaHQudGVzdChhbGlnbikpIHtcbiAgICAgICAgaXRlbS5hbGlnbi5wdXNoKCdyaWdodCcpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25DZW50ZXIudGVzdChhbGlnbikpIHtcbiAgICAgICAgaXRlbS5hbGlnbi5wdXNoKCdjZW50ZXInKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5ydWxlcy5vdGhlci50YWJsZUFsaWduTGVmdC50ZXN0KGFsaWduKSkge1xuICAgICAgICBpdGVtLmFsaWduLnB1c2goJ2xlZnQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0uYWxpZ24ucHVzaChudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW0uaGVhZGVyLnB1c2goe1xuICAgICAgICB0ZXh0OiBoZWFkZXJzW2ldLFxuICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lKGhlYWRlcnNbaV0pLFxuICAgICAgICBoZWFkZXI6IHRydWUsXG4gICAgICAgIGFsaWduOiBpdGVtLmFsaWduW2ldLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgaXRlbS5yb3dzLnB1c2goc3BsaXRDZWxscyhyb3csIGl0ZW0uaGVhZGVyLmxlbmd0aCkubWFwKChjZWxsLCBpKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGV4dDogY2VsbCxcbiAgICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lKGNlbGwpLFxuICAgICAgICAgIGhlYWRlcjogZmFsc2UsXG4gICAgICAgICAgYWxpZ246IGl0ZW0uYWxpZ25baV0sXG4gICAgICAgIH07XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICBsaGVhZGluZyhzcmM6IHN0cmluZyk6IFRva2Vucy5IZWFkaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmxoZWFkaW5nLmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gY2FwWzFdLnRyaW0oKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgIGRlcHRoOiBjYXBbMl0uY2hhckF0KDApID09PSAnPScgPyAxIDogMixcbiAgICAgICAgdGV4dCxcbiAgICAgICAgdG9rZW5zOiB0aGlzLmxleGVyLmlubGluZSh0ZXh0KSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcGFyYWdyYXBoKHNyYzogc3RyaW5nKTogVG9rZW5zLlBhcmFncmFwaCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhzcmMpO1xuICAgIGlmIChjYXApIHtcbiAgICAgIGNvbnN0IHRleHQgPSBjYXBbMV0uY2hhckF0KGNhcFsxXS5sZW5ndGggLSAxKSA9PT0gJ1xcbidcbiAgICAgICAgPyBjYXBbMV0uc2xpY2UoMCwgLTEpXG4gICAgICAgIDogY2FwWzFdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ3BhcmFncmFwaCcsXG4gICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICB0ZXh0LFxuICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lKHRleHQpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICB0ZXh0KHNyYzogc3RyaW5nKTogVG9rZW5zLlRleHQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgdGV4dDogY2FwWzBdLFxuICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lKGNhcFswXSksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGVzY2FwZShzcmM6IHN0cmluZyk6IFRva2Vucy5Fc2NhcGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2VzY2FwZScsXG4gICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICB0ZXh0OiBjYXBbMV0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHRhZyhzcmM6IHN0cmluZyk6IFRva2Vucy5UYWcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCkge1xuICAgICAgaWYgKCF0aGlzLmxleGVyLnN0YXRlLmluTGluayAmJiB0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0QVRhZy50ZXN0KGNhcFswXSkpIHtcbiAgICAgICAgdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmxleGVyLnN0YXRlLmluTGluayAmJiB0aGlzLnJ1bGVzLm90aGVyLmVuZEFUYWcudGVzdChjYXBbMF0pKSB7XG4gICAgICAgIHRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayAmJiB0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0UHJlU2NyaXB0VGFnLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICB0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2sgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2sgJiYgdGhpcy5ydWxlcy5vdGhlci5lbmRQcmVTY3JpcHRUYWcudGVzdChjYXBbMF0pKSB7XG4gICAgICAgIHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnaHRtbCcsXG4gICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICBpbkxpbms6IHRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLFxuICAgICAgICBpblJhd0Jsb2NrOiB0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssXG4gICAgICAgIGJsb2NrOiBmYWxzZSxcbiAgICAgICAgdGV4dDogY2FwWzBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBsaW5rKHNyYzogc3RyaW5nKTogVG9rZW5zLkxpbmsgfCBUb2tlbnMuSW1hZ2UgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmxpbmsuZXhlYyhzcmMpO1xuICAgIGlmIChjYXApIHtcbiAgICAgIGNvbnN0IHRyaW1tZWRVcmwgPSBjYXBbMl0udHJpbSgpO1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMucGVkYW50aWMgJiYgdGhpcy5ydWxlcy5vdGhlci5zdGFydEFuZ2xlQnJhY2tldC50ZXN0KHRyaW1tZWRVcmwpKSB7XG4gICAgICAgIC8vIGNvbW1vbm1hcmsgcmVxdWlyZXMgbWF0Y2hpbmcgYW5nbGUgYnJhY2tldHNcbiAgICAgICAgaWYgKCEodGhpcy5ydWxlcy5vdGhlci5lbmRBbmdsZUJyYWNrZXQudGVzdCh0cmltbWVkVXJsKSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmRpbmcgYW5nbGUgYnJhY2tldCBjYW5ub3QgYmUgZXNjYXBlZFxuICAgICAgICBjb25zdCBydHJpbVNsYXNoID0gcnRyaW0odHJpbW1lZFVybC5zbGljZSgwLCAtMSksICdcXFxcJyk7XG4gICAgICAgIGlmICgodHJpbW1lZFVybC5sZW5ndGggLSBydHJpbVNsYXNoLmxlbmd0aCkgJSAyID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmaW5kIGNsb3NpbmcgcGFyZW50aGVzaXNcbiAgICAgICAgY29uc3QgbGFzdFBhcmVuSW5kZXggPSBmaW5kQ2xvc2luZ0JyYWNrZXQoY2FwWzJdLCAnKCknKTtcbiAgICAgICAgaWYgKGxhc3RQYXJlbkluZGV4ID09PSAtMikge1xuICAgICAgICAgIC8vIG1vcmUgb3BlbiBwYXJlbnMgdGhhbiBjbG9zZWRcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdFBhcmVuSW5kZXggPiAtMSkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gY2FwWzBdLmluZGV4T2YoJyEnKSA9PT0gMCA/IDUgOiA0O1xuICAgICAgICAgIGNvbnN0IGxpbmtMZW4gPSBzdGFydCArIGNhcFsxXS5sZW5ndGggKyBsYXN0UGFyZW5JbmRleDtcbiAgICAgICAgICBjYXBbMl0gPSBjYXBbMl0uc3Vic3RyaW5nKDAsIGxhc3RQYXJlbkluZGV4KTtcbiAgICAgICAgICBjYXBbMF0gPSBjYXBbMF0uc3Vic3RyaW5nKDAsIGxpbmtMZW4pLnRyaW0oKTtcbiAgICAgICAgICBjYXBbM10gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IGhyZWYgPSBjYXBbMl07XG4gICAgICBsZXQgdGl0bGUgPSAnJztcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICAgICAgLy8gc3BsaXQgcGVkYW50aWMgaHJlZiBhbmQgdGl0bGVcbiAgICAgICAgY29uc3QgbGluayA9IHRoaXMucnVsZXMub3RoZXIucGVkYW50aWNIcmVmVGl0bGUuZXhlYyhocmVmKTtcblxuICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgIGhyZWYgPSBsaW5rWzFdO1xuICAgICAgICAgIHRpdGxlID0gbGlua1szXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGl0bGUgPSBjYXBbM10gPyBjYXBbM10uc2xpY2UoMSwgLTEpIDogJyc7XG4gICAgICB9XG5cbiAgICAgIGhyZWYgPSBocmVmLnRyaW0oKTtcbiAgICAgIGlmICh0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0QW5nbGVCcmFja2V0LnRlc3QoaHJlZikpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYyAmJiAhKHRoaXMucnVsZXMub3RoZXIuZW5kQW5nbGVCcmFja2V0LnRlc3QodHJpbW1lZFVybCkpKSB7XG4gICAgICAgICAgLy8gcGVkYW50aWMgYWxsb3dzIHN0YXJ0aW5nIGFuZ2xlIGJyYWNrZXQgd2l0aG91dCBlbmRpbmcgYW5nbGUgYnJhY2tldFxuICAgICAgICAgIGhyZWYgPSBocmVmLnNsaWNlKDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhyZWYgPSBocmVmLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG91dHB1dExpbmsoY2FwLCB7XG4gICAgICAgIGhyZWY6IGhyZWYgPyBocmVmLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sICckMScpIDogaHJlZixcbiAgICAgICAgdGl0bGU6IHRpdGxlID8gdGl0bGUucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwgJyQxJykgOiB0aXRsZSxcbiAgICAgIH0sIGNhcFswXSwgdGhpcy5sZXhlciwgdGhpcy5ydWxlcyk7XG4gICAgfVxuICB9XG5cbiAgcmVmbGluayhzcmM6IHN0cmluZywgbGlua3M6IExpbmtzKTogVG9rZW5zLkxpbmsgfCBUb2tlbnMuSW1hZ2UgfCBUb2tlbnMuVGV4dCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGNhcDtcbiAgICBpZiAoKGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyhzcmMpKVxuICAgICAgfHwgKGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKHNyYykpKSB7XG4gICAgICBjb25zdCBsaW5rU3RyaW5nID0gKGNhcFsyXSB8fCBjYXBbMV0pLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5tdWx0aXBsZVNwYWNlR2xvYmFsLCAnICcpO1xuICAgICAgY29uc3QgbGluayA9IGxpbmtzW2xpbmtTdHJpbmcudG9Mb3dlckNhc2UoKV07XG4gICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGNhcFswXS5jaGFyQXQoMCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIHJhdzogdGV4dCxcbiAgICAgICAgICB0ZXh0LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG91dHB1dExpbmsoY2FwLCBsaW5rLCBjYXBbMF0sIHRoaXMubGV4ZXIsIHRoaXMucnVsZXMpO1xuICAgIH1cbiAgfVxuXG4gIGVtU3Ryb25nKHNyYzogc3RyaW5nLCBtYXNrZWRTcmM6IHN0cmluZywgcHJldkNoYXIgPSAnJyk6IFRva2Vucy5FbSB8IFRva2Vucy5TdHJvbmcgfCB1bmRlZmluZWQge1xuICAgIGxldCBtYXRjaCA9IHRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nTERlbGltLmV4ZWMoc3JjKTtcbiAgICBpZiAoIW1hdGNoKSByZXR1cm47XG4gICAgaWYgKCFtYXRjaFsxXSAmJiAhbWF0Y2hbMl0gJiYgIW1hdGNoWzNdICYmICFtYXRjaFs0XSkgcmV0dXJuO1xuXG4gICAgLy8gXyBjYW4ndCBiZSBiZXR3ZWVuIHR3byBhbHBoYW51bWVyaWNzLiBcXHB7TH1cXHB7Tn0gaW5jbHVkZXMgbm9uLWVuZ2xpc2ggYWxwaGFiZXQvbnVtYmVycyBhcyB3ZWxsXG4gICAgaWYgKG1hdGNoWzRdICYmIHByZXZDaGFyLm1hdGNoKHRoaXMucnVsZXMub3RoZXIudW5pY29kZUFscGhhTnVtZXJpYykpIHJldHVybjtcblxuICAgIGNvbnN0IG5leHRDaGFyID0gbWF0Y2hbMV0gfHwgbWF0Y2hbM10gfHwgJyc7XG5cbiAgICBpZiAoIW5leHRDaGFyIHx8ICFwcmV2Q2hhciB8fCB0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKHByZXZDaGFyKSkge1xuICAgICAgLy8gdW5pY29kZSBSZWdleCBjb3VudHMgZW1vamkgYXMgMSBjaGFyOyBzcHJlYWQgaW50byBhcnJheSBmb3IgcHJvcGVyIGNvdW50ICh1c2VkIG11bHRpcGxlIHRpbWVzIGJlbG93KVxuICAgICAgY29uc3QgbExlbmd0aCA9IFsuLi5tYXRjaFswXV0ubGVuZ3RoIC0gMTtcbiAgICAgIGxldCByRGVsaW0sIHJMZW5ndGgsIGRlbGltVG90YWwgPSBsTGVuZ3RoLCBtaWREZWxpbVRvdGFsID0gMDtcblxuICAgICAgY29uc3QgZW5kUmVnID0gbWF0Y2hbMF1bMF0gPT09ICcqJyA/IHRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nUkRlbGltQXN0IDogdGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1VbmQ7XG4gICAgICBlbmRSZWcubGFzdEluZGV4ID0gMDtcblxuICAgICAgLy8gQ2xpcCBtYXNrZWRTcmMgdG8gc2FtZSBzZWN0aW9uIG9mIHN0cmluZyBhcyBzcmMgKG1vdmUgdG8gbGV4ZXI/KVxuICAgICAgbWFza2VkU3JjID0gbWFza2VkU3JjLnNsaWNlKC0xICogc3JjLmxlbmd0aCArIGxMZW5ndGgpO1xuXG4gICAgICB3aGlsZSAoKG1hdGNoID0gZW5kUmVnLmV4ZWMobWFza2VkU3JjKSkgIT0gbnVsbCkge1xuICAgICAgICByRGVsaW0gPSBtYXRjaFsxXSB8fCBtYXRjaFsyXSB8fCBtYXRjaFszXSB8fCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBtYXRjaFs2XTtcblxuICAgICAgICBpZiAoIXJEZWxpbSkgY29udGludWU7IC8vIHNraXAgc2luZ2xlICogaW4gX19hYmMqYWJjX19cblxuICAgICAgICByTGVuZ3RoID0gWy4uLnJEZWxpbV0ubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaFszXSB8fCBtYXRjaFs0XSkgeyAvLyBmb3VuZCBhbm90aGVyIExlZnQgRGVsaW1cbiAgICAgICAgICBkZWxpbVRvdGFsICs9IHJMZW5ndGg7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2hbNV0gfHwgbWF0Y2hbNl0pIHsgLy8gZWl0aGVyIExlZnQgb3IgUmlnaHQgRGVsaW1cbiAgICAgICAgICBpZiAobExlbmd0aCAlIDMgJiYgISgobExlbmd0aCArIHJMZW5ndGgpICUgMykpIHtcbiAgICAgICAgICAgIG1pZERlbGltVG90YWwgKz0gckxlbmd0aDtcbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBDb21tb25NYXJrIEVtcGhhc2lzIFJ1bGVzIDktMTBcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkZWxpbVRvdGFsIC09IHJMZW5ndGg7XG5cbiAgICAgICAgaWYgKGRlbGltVG90YWwgPiAwKSBjb250aW51ZTsgLy8gSGF2ZW4ndCBmb3VuZCBlbm91Z2ggY2xvc2luZyBkZWxpbWl0ZXJzXG5cbiAgICAgICAgLy8gUmVtb3ZlIGV4dHJhIGNoYXJhY3RlcnMuICphKioqIC0+ICphKlxuICAgICAgICByTGVuZ3RoID0gTWF0aC5taW4ockxlbmd0aCwgckxlbmd0aCArIGRlbGltVG90YWwgKyBtaWREZWxpbVRvdGFsKTtcbiAgICAgICAgLy8gY2hhciBsZW5ndGggY2FuIGJlID4xIGZvciB1bmljb2RlIGNoYXJhY3RlcnM7XG4gICAgICAgIGNvbnN0IGxhc3RDaGFyTGVuZ3RoID0gWy4uLm1hdGNoWzBdXVswXS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJhdyA9IHNyYy5zbGljZSgwLCBsTGVuZ3RoICsgbWF0Y2guaW5kZXggKyBsYXN0Q2hhckxlbmd0aCArIHJMZW5ndGgpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBgZW1gIGlmIHNtYWxsZXN0IGRlbGltaXRlciBoYXMgb2RkIGNoYXIgY291bnQuICphKioqXG4gICAgICAgIGlmIChNYXRoLm1pbihsTGVuZ3RoLCByTGVuZ3RoKSAlIDIpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gcmF3LnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2VtJyxcbiAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHRleHQpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgJ3N0cm9uZycgaWYgc21hbGxlc3QgZGVsaW1pdGVyIGhhcyBldmVuIGNoYXIgY291bnQuICoqYSoqKlxuICAgICAgICBjb25zdCB0ZXh0ID0gcmF3LnNsaWNlKDIsIC0yKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAnc3Ryb25nJyxcbiAgICAgICAgICByYXcsXG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHRleHQpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvZGVzcGFuKHNyYzogc3RyaW5nKTogVG9rZW5zLkNvZGVzcGFuIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmlubGluZS5jb2RlLmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICBsZXQgdGV4dCA9IGNhcFsyXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubmV3TGluZUNoYXJHbG9iYWwsICcgJyk7XG4gICAgICBjb25zdCBoYXNOb25TcGFjZUNoYXJzID0gdGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIudGVzdCh0ZXh0KTtcbiAgICAgIGNvbnN0IGhhc1NwYWNlQ2hhcnNPbkJvdGhFbmRzID0gdGhpcy5ydWxlcy5vdGhlci5zdGFydGluZ1NwYWNlQ2hhci50ZXN0KHRleHQpICYmIHRoaXMucnVsZXMub3RoZXIuZW5kaW5nU3BhY2VDaGFyLnRlc3QodGV4dCk7XG4gICAgICBpZiAoaGFzTm9uU3BhY2VDaGFycyAmJiBoYXNTcGFjZUNoYXJzT25Cb3RoRW5kcykge1xuICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMSwgdGV4dC5sZW5ndGggLSAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdjb2Rlc3BhbicsXG4gICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICB0ZXh0LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBicihzcmM6IHN0cmluZyk6IFRva2Vucy5CciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyhzcmMpO1xuICAgIGlmIChjYXApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdicicsXG4gICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBkZWwoc3JjOiBzdHJpbmcsIG1hc2tlZFNyYzogc3RyaW5nLCBwcmV2Q2hhciA9ICcnKTogVG9rZW5zLkRlbCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IG1hdGNoID0gdGhpcy5ydWxlcy5pbmxpbmUuZGVsTERlbGltLmV4ZWMoc3JjKTtcbiAgICBpZiAoIW1hdGNoKSByZXR1cm47XG5cbiAgICBjb25zdCBuZXh0Q2hhciA9IG1hdGNoWzFdIHx8ICcnO1xuXG4gICAgaWYgKCFuZXh0Q2hhciB8fCAhcHJldkNoYXIgfHwgdGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhwcmV2Q2hhcikpIHtcbiAgICAgIC8vIHVuaWNvZGUgUmVnZXggY291bnRzIGVtb2ppIGFzIDEgY2hhcjsgc3ByZWFkIGludG8gYXJyYXkgZm9yIHByb3BlciBjb3VudFxuICAgICAgY29uc3QgbExlbmd0aCA9IFsuLi5tYXRjaFswXV0ubGVuZ3RoIC0gMTtcbiAgICAgIGxldCByRGVsaW0sIHJMZW5ndGgsIGRlbGltVG90YWwgPSBsTGVuZ3RoO1xuXG4gICAgICBjb25zdCBlbmRSZWcgPSB0aGlzLnJ1bGVzLmlubGluZS5kZWxSRGVsaW07XG4gICAgICBlbmRSZWcubGFzdEluZGV4ID0gMDtcblxuICAgICAgLy8gQ2xpcCBtYXNrZWRTcmMgdG8gc2FtZSBzZWN0aW9uIG9mIHN0cmluZyBhcyBzcmNcbiAgICAgIG1hc2tlZFNyYyA9IG1hc2tlZFNyYy5zbGljZSgtMSAqIHNyYy5sZW5ndGggKyBsTGVuZ3RoKTtcblxuICAgICAgd2hpbGUgKChtYXRjaCA9IGVuZFJlZy5leGVjKG1hc2tlZFNyYykpICE9IG51bGwpIHtcbiAgICAgICAgckRlbGltID0gbWF0Y2hbMV0gfHwgbWF0Y2hbMl0gfHwgbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgbWF0Y2hbNl07XG5cbiAgICAgICAgaWYgKCFyRGVsaW0pIGNvbnRpbnVlO1xuXG4gICAgICAgIHJMZW5ndGggPSBbLi4uckRlbGltXS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHJMZW5ndGggIT09IGxMZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmIChtYXRjaFszXSB8fCBtYXRjaFs0XSkgeyAvLyBmb3VuZCBhbm90aGVyIExlZnQgRGVsaW1cbiAgICAgICAgICBkZWxpbVRvdGFsICs9IHJMZW5ndGg7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxpbVRvdGFsIC09IHJMZW5ndGg7XG5cbiAgICAgICAgaWYgKGRlbGltVG90YWwgPiAwKSBjb250aW51ZTsgLy8gSGF2ZW4ndCBmb3VuZCBlbm91Z2ggY2xvc2luZyBkZWxpbWl0ZXJzXG5cbiAgICAgICAgLy8gUmVtb3ZlIGV4dHJhIGNoYXJhY3RlcnNcbiAgICAgICAgckxlbmd0aCA9IE1hdGgubWluKHJMZW5ndGgsIHJMZW5ndGggKyBkZWxpbVRvdGFsKTtcbiAgICAgICAgLy8gY2hhciBsZW5ndGggY2FuIGJlID4xIGZvciB1bmljb2RlIGNoYXJhY3RlcnNcbiAgICAgICAgY29uc3QgbGFzdENoYXJMZW5ndGggPSBbLi4ubWF0Y2hbMF1dWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmF3ID0gc3JjLnNsaWNlKDAsIGxMZW5ndGggKyBtYXRjaC5pbmRleCArIGxhc3RDaGFyTGVuZ3RoICsgckxlbmd0aCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGRlbCB0b2tlbiAtIG9ubHkgc2luZ2xlIH4gb3IgZG91YmxlIH5+IHN1cHBvcnRlZFxuICAgICAgICBjb25zdCB0ZXh0ID0gcmF3LnNsaWNlKGxMZW5ndGgsIC1sTGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAnZGVsJyxcbiAgICAgICAgICByYXcsXG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHRleHQpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGF1dG9saW5rKHNyYzogc3RyaW5nKTogVG9rZW5zLkxpbmsgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMoc3JjKTtcbiAgICBpZiAoY2FwKSB7XG4gICAgICBsZXQgdGV4dCwgaHJlZjtcbiAgICAgIGlmIChjYXBbMl0gPT09ICdAJykge1xuICAgICAgICB0ZXh0ID0gY2FwWzFdO1xuICAgICAgICBocmVmID0gJ21haWx0bzonICsgdGV4dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgPSBjYXBbMV07XG4gICAgICAgIGhyZWYgPSB0ZXh0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICB0ZXh0LFxuICAgICAgICBocmVmLFxuICAgICAgICB0b2tlbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICByYXc6IHRleHQsXG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHVybChzcmM6IHN0cmluZyk6IFRva2Vucy5MaW5rIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgY2FwO1xuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmlubGluZS51cmwuZXhlYyhzcmMpKSB7XG4gICAgICBsZXQgdGV4dCwgaHJlZjtcbiAgICAgIGlmIChjYXBbMl0gPT09ICdAJykge1xuICAgICAgICB0ZXh0ID0gY2FwWzBdO1xuICAgICAgICBocmVmID0gJ21haWx0bzonICsgdGV4dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvIGV4dGVuZGVkIGF1dG9saW5rIHBhdGggdmFsaWRhdGlvblxuICAgICAgICBsZXQgcHJldkNhcFplcm87XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBwcmV2Q2FwWmVybyA9IGNhcFswXTtcbiAgICAgICAgICBjYXBbMF0gPSB0aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoY2FwWzBdKT8uWzBdID8/ICcnO1xuICAgICAgICB9IHdoaWxlIChwcmV2Q2FwWmVybyAhPT0gY2FwWzBdKTtcbiAgICAgICAgdGV4dCA9IGNhcFswXTtcbiAgICAgICAgaWYgKGNhcFsxXSA9PT0gJ3d3dy4nKSB7XG4gICAgICAgICAgaHJlZiA9ICdodHRwOi8vJyArIGNhcFswXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBocmVmID0gY2FwWzBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICB0ZXh0LFxuICAgICAgICBocmVmLFxuICAgICAgICB0b2tlbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICByYXc6IHRleHQsXG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGlubGluZVRleHQoc3JjOiBzdHJpbmcpOiBUb2tlbnMuVGV4dCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5pbmxpbmUudGV4dC5leGVjKHNyYyk7XG4gICAgaWYgKGNhcCkge1xuICAgICAgY29uc3QgZXNjYXBlZCA9IHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgIHRleHQ6IGNhcFswXSxcbiAgICAgICAgZXNjYXBlZCxcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgX1Rva2VuaXplciB9IGZyb20gJy4vVG9rZW5pemVyLnRzJztcbmltcG9ydCB7IF9kZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMudHMnO1xuaW1wb3J0IHsgb3RoZXIsIGJsb2NrLCBpbmxpbmUgfSBmcm9tICcuL3J1bGVzLnRzJztcbmltcG9ydCB0eXBlIHsgVG9rZW4sIFRva2Vuc0xpc3QsIFRva2VucyB9IGZyb20gJy4vVG9rZW5zLnRzJztcbmltcG9ydCB0eXBlIHsgTWFya2VkT3B0aW9ucyB9IGZyb20gJy4vTWFya2VkT3B0aW9ucy50cyc7XG5cbi8qKlxuICogQmxvY2sgTGV4ZXJcbiAqL1xuZXhwb3J0IGNsYXNzIF9MZXhlcjxQYXJzZXJPdXRwdXQgPSBzdHJpbmcsIFJlbmRlcmVyT3V0cHV0ID0gc3RyaW5nPiB7XG4gIHRva2VuczogVG9rZW5zTGlzdDtcbiAgb3B0aW9uczogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PjtcbiAgc3RhdGU6IHtcbiAgICBpbkxpbms6IGJvb2xlYW47XG4gICAgaW5SYXdCbG9jazogYm9vbGVhbjtcbiAgICB0b3A6IGJvb2xlYW47XG4gIH07XG5cbiAgcHVibGljIGlubGluZVF1ZXVlOiB7IHNyYzogc3RyaW5nLCB0b2tlbnM6IFRva2VuW10gfVtdO1xuXG4gIHByaXZhdGUgdG9rZW5pemVyOiBfVG9rZW5pemVyPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+KSB7XG4gICAgLy8gVG9rZW5MaXN0IGNhbm5vdCBiZSBjcmVhdGVkIGluIG9uZSBnb1xuICAgIHRoaXMudG9rZW5zID0gW10gYXMgdW5rbm93biBhcyBUb2tlbnNMaXN0O1xuICAgIHRoaXMudG9rZW5zLmxpbmtzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IF9kZWZhdWx0cztcbiAgICB0aGlzLm9wdGlvbnMudG9rZW5pemVyID0gdGhpcy5vcHRpb25zLnRva2VuaXplciB8fCBuZXcgX1Rva2VuaXplcjxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PigpO1xuICAgIHRoaXMudG9rZW5pemVyID0gdGhpcy5vcHRpb25zLnRva2VuaXplcjtcbiAgICB0aGlzLnRva2VuaXplci5vcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMudG9rZW5pemVyLmxleGVyID0gdGhpcztcbiAgICB0aGlzLmlubGluZVF1ZXVlID0gW107XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGluTGluazogZmFsc2UsXG4gICAgICBpblJhd0Jsb2NrOiBmYWxzZSxcbiAgICAgIHRvcDogdHJ1ZSxcbiAgICB9O1xuXG4gICAgY29uc3QgcnVsZXMgPSB7XG4gICAgICBvdGhlcixcbiAgICAgIGJsb2NrOiBibG9jay5ub3JtYWwsXG4gICAgICBpbmxpbmU6IGlubGluZS5ub3JtYWwsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICAgIHJ1bGVzLmJsb2NrID0gYmxvY2sucGVkYW50aWM7XG4gICAgICBydWxlcy5pbmxpbmUgPSBpbmxpbmUucGVkYW50aWM7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZ2ZtKSB7XG4gICAgICBydWxlcy5ibG9jayA9IGJsb2NrLmdmbTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYnJlYWtzKSB7XG4gICAgICAgIHJ1bGVzLmlubGluZSA9IGlubGluZS5icmVha3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBydWxlcy5pbmxpbmUgPSBpbmxpbmUuZ2ZtO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRva2VuaXplci5ydWxlcyA9IHJ1bGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9zZSBSdWxlc1xuICAgKi9cbiAgc3RhdGljIGdldCBydWxlcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmxvY2ssXG4gICAgICBpbmxpbmUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgTGV4IE1ldGhvZFxuICAgKi9cbiAgc3RhdGljIGxleDxQYXJzZXJPdXRwdXQgPSBzdHJpbmcsIFJlbmRlcmVyT3V0cHV0ID0gc3RyaW5nPihzcmM6IHN0cmluZywgb3B0aW9ucz86IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4pIHtcbiAgICBjb25zdCBsZXhlciA9IG5ldyBfTGV4ZXI8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4ob3B0aW9ucyk7XG4gICAgcmV0dXJuIGxleGVyLmxleChzcmMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBMZXggSW5saW5lIE1ldGhvZFxuICAgKi9cbiAgc3RhdGljIGxleElubGluZTxQYXJzZXJPdXRwdXQgPSBzdHJpbmcsIFJlbmRlcmVyT3V0cHV0ID0gc3RyaW5nPihzcmM6IHN0cmluZywgb3B0aW9ucz86IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4pIHtcbiAgICBjb25zdCBsZXhlciA9IG5ldyBfTGV4ZXI8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4ob3B0aW9ucyk7XG4gICAgcmV0dXJuIGxleGVyLmlubGluZVRva2VucyhzcmMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXByb2Nlc3NpbmdcbiAgICovXG4gIGxleChzcmM6IHN0cmluZykge1xuICAgIHNyYyA9IHNyYy5yZXBsYWNlKG90aGVyLmNhcnJpYWdlUmV0dXJuLCAnXFxuJyk7XG5cbiAgICB0aGlzLmJsb2NrVG9rZW5zKHNyYywgdGhpcy50b2tlbnMpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmlubGluZVF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy5pbmxpbmVRdWV1ZVtpXTtcbiAgICAgIHRoaXMuaW5saW5lVG9rZW5zKG5leHQuc3JjLCBuZXh0LnRva2Vucyk7XG4gICAgfVxuICAgIHRoaXMuaW5saW5lUXVldWUgPSBbXTtcblxuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfVxuXG4gIC8qKlxuICAgKiBMZXhpbmdcbiAgICovXG4gIGJsb2NrVG9rZW5zKHNyYzogc3RyaW5nLCB0b2tlbnM/OiBUb2tlbltdLCBsYXN0UGFyYWdyYXBoQ2xpcHBlZD86IGJvb2xlYW4pOiBUb2tlbltdO1xuICBibG9ja1Rva2VucyhzcmM6IHN0cmluZywgdG9rZW5zPzogVG9rZW5zTGlzdCwgbGFzdFBhcmFncmFwaENsaXBwZWQ/OiBib29sZWFuKTogVG9rZW5zTGlzdDtcbiAgYmxvY2tUb2tlbnMoc3JjOiBzdHJpbmcsIHRva2VuczogVG9rZW5bXSA9IFtdLCBsYXN0UGFyYWdyYXBoQ2xpcHBlZCA9IGZhbHNlKSB7XG4gICAgdGhpcy50b2tlbml6ZXIubGV4ZXIgPSB0aGlzO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICAgIHNyYyA9IHNyYy5yZXBsYWNlKG90aGVyLnRhYkNoYXJHbG9iYWwsICcgICAgJykucmVwbGFjZShvdGhlci5zcGFjZUxpbmUsICcnKTtcbiAgICB9XG5cbiAgICB3aGlsZSAoc3JjKSB7XG4gICAgICBsZXQgdG9rZW46IFRva2Vucy5HZW5lcmljIHwgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/LmJsb2NrPy5zb21lKChleHRUb2tlbml6ZXIpID0+IHtcbiAgICAgICAgaWYgKHRva2VuID0gZXh0VG9rZW5pemVyLmNhbGwoeyBsZXhlcjogdGhpcyB9LCBzcmMsIHRva2VucykpIHtcbiAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gbmV3bGluZVxuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuc3BhY2Uoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBsYXN0VG9rZW4gPSB0b2tlbnMuYXQoLTEpO1xuICAgICAgICBpZiAodG9rZW4ucmF3Lmxlbmd0aCA9PT0gMSAmJiBsYXN0VG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIGlmIHRoZXJlJ3MgYSBzaW5nbGUgXFxuIGFzIGEgc3BhY2VyLCBpdCdzIHRlcm1pbmF0aW5nIHRoZSBsYXN0IGxpbmUsXG4gICAgICAgICAgLy8gc28gbW92ZSBpdCB0aGVyZSBzbyB0aGF0IHdlIGRvbid0IGdldCB1bm5lY2Vzc2FyeSBwYXJhZ3JhcGggdGFnc1xuICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gJ1xcbic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBjb2RlXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5jb2RlKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgbGFzdFRva2VuID0gdG9rZW5zLmF0KC0xKTtcbiAgICAgICAgLy8gQW4gaW5kZW50ZWQgY29kZSBibG9jayBjYW5ub3QgaW50ZXJydXB0IGEgcGFyYWdyYXBoLlxuICAgICAgICBpZiAobGFzdFRva2VuPy50eXBlID09PSAncGFyYWdyYXBoJyB8fCBsYXN0VG9rZW4/LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gKGxhc3RUb2tlbi5yYXcuZW5kc1dpdGgoJ1xcbicpID8gJycgOiAnXFxuJykgKyB0b2tlbi5yYXc7XG4gICAgICAgICAgbGFzdFRva2VuLnRleHQgKz0gJ1xcbicgKyB0b2tlbi50ZXh0O1xuICAgICAgICAgIHRoaXMuaW5saW5lUXVldWUuYXQoLTEpIS5zcmMgPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGZlbmNlc1xuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuZmVuY2VzKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gaGVhZGluZ1xuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuaGVhZGluZyhzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGhyXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5ocihzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGJsb2NrcXVvdGVcbiAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmJsb2NrcXVvdGUoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBsaXN0XG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5saXN0KHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gaHRtbFxuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuaHRtbChzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGRlZlxuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuZGVmKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgbGFzdFRva2VuID0gdG9rZW5zLmF0KC0xKTtcbiAgICAgICAgaWYgKGxhc3RUb2tlbj8udHlwZSA9PT0gJ3BhcmFncmFwaCcgfHwgbGFzdFRva2VuPy50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICBsYXN0VG9rZW4ucmF3ICs9IChsYXN0VG9rZW4ucmF3LmVuZHNXaXRoKCdcXG4nKSA/ICcnIDogJ1xcbicpICsgdG9rZW4ucmF3O1xuICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9ICdcXG4nICsgdG9rZW4ucmF3O1xuICAgICAgICAgIHRoaXMuaW5saW5lUXVldWUuYXQoLTEpIS5zcmMgPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy50b2tlbnMubGlua3NbdG9rZW4udGFnXSkge1xuICAgICAgICAgIHRoaXMudG9rZW5zLmxpbmtzW3Rva2VuLnRhZ10gPSB7XG4gICAgICAgICAgICBocmVmOiB0b2tlbi5ocmVmLFxuICAgICAgICAgICAgdGl0bGU6IHRva2VuLnRpdGxlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0YWJsZSAoZ2ZtKVxuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIudGFibGUoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBsaGVhZGluZ1xuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIubGhlYWRpbmcoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0b3AtbGV2ZWwgcGFyYWdyYXBoXG4gICAgICAvLyBwcmV2ZW50IHBhcmFncmFwaCBjb25zdW1pbmcgZXh0ZW5zaW9ucyBieSBjbGlwcGluZyAnc3JjJyB0byBleHRlbnNpb24gc3RhcnRcbiAgICAgIGxldCBjdXRTcmMgPSBzcmM7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/LnN0YXJ0QmxvY2spIHtcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSBJbmZpbml0eTtcbiAgICAgICAgY29uc3QgdGVtcFNyYyA9IHNyYy5zbGljZSgxKTtcbiAgICAgICAgbGV0IHRlbXBTdGFydDtcbiAgICAgICAgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKChnZXRTdGFydEluZGV4KSA9PiB7XG4gICAgICAgICAgdGVtcFN0YXJ0ID0gZ2V0U3RhcnRJbmRleC5jYWxsKHsgbGV4ZXI6IHRoaXMgfSwgdGVtcFNyYyk7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0ZW1wU3RhcnQgPT09ICdudW1iZXInICYmIHRlbXBTdGFydCA+PSAwKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCwgdGVtcFN0YXJ0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc3RhcnRJbmRleCA8IEluZmluaXR5ICYmIHN0YXJ0SW5kZXggPj0gMCkge1xuICAgICAgICAgIGN1dFNyYyA9IHNyYy5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGF0ZS50b3AgJiYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIucGFyYWdyYXBoKGN1dFNyYykpKSB7XG4gICAgICAgIGNvbnN0IGxhc3RUb2tlbiA9IHRva2Vucy5hdCgtMSk7XG4gICAgICAgIGlmIChsYXN0UGFyYWdyYXBoQ2xpcHBlZCAmJiBsYXN0VG9rZW4/LnR5cGUgPT09ICdwYXJhZ3JhcGgnKSB7XG4gICAgICAgICAgbGFzdFRva2VuLnJhdyArPSAobGFzdFRva2VuLnJhdy5lbmRzV2l0aCgnXFxuJykgPyAnJyA6ICdcXG4nKSArIHRva2VuLnJhdztcbiAgICAgICAgICBsYXN0VG9rZW4udGV4dCArPSAnXFxuJyArIHRva2VuLnRleHQ7XG4gICAgICAgICAgdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKTtcbiAgICAgICAgICB0aGlzLmlubGluZVF1ZXVlLmF0KC0xKSEuc3JjID0gbGFzdFRva2VuLnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RQYXJhZ3JhcGhDbGlwcGVkID0gY3V0U3JjLmxlbmd0aCAhPT0gc3JjLmxlbmd0aDtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHRleHRcbiAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLnRleHQoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBsYXN0VG9rZW4gPSB0b2tlbnMuYXQoLTEpO1xuICAgICAgICBpZiAobGFzdFRva2VuPy50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICBsYXN0VG9rZW4ucmF3ICs9IChsYXN0VG9rZW4ucmF3LmVuZHNXaXRoKCdcXG4nKSA/ICcnIDogJ1xcbicpICsgdG9rZW4ucmF3O1xuICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9ICdcXG4nICsgdG9rZW4udGV4dDtcbiAgICAgICAgICB0aGlzLmlubGluZVF1ZXVlLnBvcCgpO1xuICAgICAgICAgIHRoaXMuaW5saW5lUXVldWUuYXQoLTEpIS5zcmMgPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgY29uc3QgZXJyTXNnID0gJ0luZmluaXRlIGxvb3Agb24gYnl0ZTogJyArIHNyYy5jaGFyQ29kZUF0KDApO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUudG9wID0gdHJ1ZTtcbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG5cbiAgaW5saW5lKHNyYzogc3RyaW5nLCB0b2tlbnM6IFRva2VuW10gPSBbXSkge1xuICAgIHRoaXMuaW5saW5lUXVldWUucHVzaCh7IHNyYywgdG9rZW5zIH0pO1xuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cblxuICAvKipcbiAgICogTGV4aW5nL0NvbXBpbGluZ1xuICAgKi9cbiAgaW5saW5lVG9rZW5zKHNyYzogc3RyaW5nLCB0b2tlbnM6IFRva2VuW10gPSBbXSk6IFRva2VuW10ge1xuICAgIHRoaXMudG9rZW5pemVyLmxleGVyID0gdGhpcztcbiAgICAvLyBTdHJpbmcgd2l0aCBsaW5rcyBtYXNrZWQgdG8gYXZvaWQgaW50ZXJmZXJlbmNlIHdpdGggZW0gYW5kIHN0cm9uZ1xuICAgIGxldCBtYXNrZWRTcmMgPSBzcmM7XG4gICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIE1hc2sgb3V0IHJlZmxpbmtzXG4gICAgaWYgKHRoaXMudG9rZW5zLmxpbmtzKSB7XG4gICAgICBjb25zdCBsaW5rcyA9IE9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtcbiAgICAgIGlmIChsaW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHdoaWxlICgobWF0Y2ggPSB0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKG1hc2tlZFNyYykpICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAobGlua3MuaW5jbHVkZXMobWF0Y2hbMF0uc2xpY2UobWF0Y2hbMF0ubGFzdEluZGV4T2YoJ1snKSArIDEsIC0xKSkpIHtcbiAgICAgICAgICAgIG1hc2tlZFNyYyA9IG1hc2tlZFNyYy5zbGljZSgwLCBtYXRjaC5pbmRleClcbiAgICAgICAgICAgICAgKyAnWycgKyAnYScucmVwZWF0KG1hdGNoWzBdLmxlbmd0aCAtIDIpICsgJ10nXG4gICAgICAgICAgICAgICsgbWFza2VkU3JjLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWFzayBvdXQgZXNjYXBlZCBjaGFyYWN0ZXJzXG4gICAgd2hpbGUgKChtYXRjaCA9IHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5leGVjKG1hc2tlZFNyYykpICE9IG51bGwpIHtcbiAgICAgIG1hc2tlZFNyYyA9IG1hc2tlZFNyYy5zbGljZSgwLCBtYXRjaC5pbmRleCkgKyAnKysnICsgbWFza2VkU3JjLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgpO1xuICAgIH1cblxuICAgIC8vIE1hc2sgb3V0IG90aGVyIGJsb2Nrc1xuICAgIGxldCBvZmZzZXQ7XG4gICAgd2hpbGUgKChtYXRjaCA9IHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyhtYXNrZWRTcmMpKSAhPSBudWxsKSB7XG4gICAgICBvZmZzZXQgPSBtYXRjaFsyXSA/IG1hdGNoWzJdLmxlbmd0aCA6IDA7XG4gICAgICBtYXNrZWRTcmMgPSBtYXNrZWRTcmMuc2xpY2UoMCwgbWF0Y2guaW5kZXggKyBvZmZzZXQpICsgJ1snICsgJ2EnLnJlcGVhdChtYXRjaFswXS5sZW5ndGggLSBvZmZzZXQgLSAyKSArICddJyArIG1hc2tlZFNyYy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7XG4gICAgfVxuXG4gICAgLy8gTWFzayBvdXQgYmxvY2tzIGZyb20gZXh0ZW5zaW9uc1xuICAgIG1hc2tlZFNyYyA9IHRoaXMub3B0aW9ucy5ob29rcz8uZW1TdHJvbmdNYXNrPy5jYWxsKHsgbGV4ZXI6IHRoaXMgfSwgbWFza2VkU3JjKSA/PyBtYXNrZWRTcmM7XG5cbiAgICBsZXQga2VlcFByZXZDaGFyID0gZmFsc2U7XG4gICAgbGV0IHByZXZDaGFyID0gJyc7XG4gICAgd2hpbGUgKHNyYykge1xuICAgICAgaWYgKCFrZWVwUHJldkNoYXIpIHtcbiAgICAgICAgcHJldkNoYXIgPSAnJztcbiAgICAgIH1cbiAgICAgIGtlZXBQcmV2Q2hhciA9IGZhbHNlO1xuXG4gICAgICBsZXQgdG9rZW46IFRva2Vucy5HZW5lcmljIHwgdW5kZWZpbmVkO1xuXG4gICAgICAvLyBleHRlbnNpb25zXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/LmlubGluZT8uc29tZSgoZXh0VG9rZW5pemVyKSA9PiB7XG4gICAgICAgIGlmICh0b2tlbiA9IGV4dFRva2VuaXplci5jYWxsKHsgbGV4ZXI6IHRoaXMgfSwgc3JjLCB0b2tlbnMpKSB7XG4gICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGVzY2FwZVxuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuZXNjYXBlKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gdGFnXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci50YWcoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBsaW5rXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5saW5rKHNyYykpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVmbGluaywgbm9saW5rXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5yZWZsaW5rKHNyYywgdGhpcy50b2tlbnMubGlua3MpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGxhc3RUb2tlbiA9IHRva2Vucy5hdCgtMSk7XG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSAndGV4dCcgJiYgbGFzdFRva2VuPy50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICBsYXN0VG9rZW4ucmF3ICs9IHRva2VuLnJhdztcbiAgICAgICAgICBsYXN0VG9rZW4udGV4dCArPSB0b2tlbi50ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZW0gJiBzdHJvbmdcbiAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmVtU3Ryb25nKHNyYywgbWFza2VkU3JjLCBwcmV2Q2hhcikpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gY29kZVxuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuY29kZXNwYW4oc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBiclxuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuYnIoc3JjKSkge1xuICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBkZWwgKGdmbSlcbiAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmRlbChzcmMsIG1hc2tlZFNyYywgcHJldkNoYXIpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGF1dG9saW5rXG4gICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5hdXRvbGluayhzcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHVybCAoZ2ZtKVxuICAgICAgaWYgKCF0aGlzLnN0YXRlLmluTGluayAmJiAodG9rZW4gPSB0aGlzLnRva2VuaXplci51cmwoc3JjKSkpIHtcbiAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gdGV4dFxuICAgICAgLy8gcHJldmVudCBpbmxpbmVUZXh0IGNvbnN1bWluZyBleHRlbnNpb25zIGJ5IGNsaXBwaW5nICdzcmMnIHRvIGV4dGVuc2lvbiBzdGFydFxuICAgICAgbGV0IGN1dFNyYyA9IHNyYztcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uc3RhcnRJbmxpbmUpIHtcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSBJbmZpbml0eTtcbiAgICAgICAgY29uc3QgdGVtcFNyYyA9IHNyYy5zbGljZSgxKTtcbiAgICAgICAgbGV0IHRlbXBTdGFydDtcbiAgICAgICAgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUuZm9yRWFjaCgoZ2V0U3RhcnRJbmRleCkgPT4ge1xuICAgICAgICAgIHRlbXBTdGFydCA9IGdldFN0YXJ0SW5kZXguY2FsbCh7IGxleGVyOiB0aGlzIH0sIHRlbXBTcmMpO1xuICAgICAgICAgIGlmICh0eXBlb2YgdGVtcFN0YXJ0ID09PSAnbnVtYmVyJyAmJiB0ZW1wU3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgc3RhcnRJbmRleCA9IE1hdGgubWluKHN0YXJ0SW5kZXgsIHRlbXBTdGFydCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHN0YXJ0SW5kZXggPCBJbmZpbml0eSAmJiBzdGFydEluZGV4ID49IDApIHtcbiAgICAgICAgICBjdXRTcmMgPSBzcmMuc3Vic3RyaW5nKDAsIHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuaW5saW5lVGV4dChjdXRTcmMpKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgIGlmICh0b2tlbi5yYXcuc2xpY2UoLTEpICE9PSAnXycpIHsgLy8gVHJhY2sgcHJldkNoYXIgYmVmb3JlIHN0cmluZyBvZiBfX19fIHN0YXJ0ZWRcbiAgICAgICAgICBwcmV2Q2hhciA9IHRva2VuLnJhdy5zbGljZSgtMSk7XG4gICAgICAgIH1cbiAgICAgICAga2VlcFByZXZDaGFyID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbGFzdFRva2VuID0gdG9rZW5zLmF0KC0xKTtcbiAgICAgICAgaWYgKGxhc3RUb2tlbj8udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgbGFzdFRva2VuLnJhdyArPSB0b2tlbi5yYXc7XG4gICAgICAgICAgbGFzdFRva2VuLnRleHQgKz0gdG9rZW4udGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgY29uc3QgZXJyTXNnID0gJ0luZmluaXRlIGxvb3Agb24gYnl0ZTogJyArIHNyYy5jaGFyQ29kZUF0KDApO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBfZGVmYXVsdHMgfSBmcm9tICcuL2RlZmF1bHRzLnRzJztcbmltcG9ydCB7XG4gIGNsZWFuVXJsLFxuICBlc2NhcGVIdG1sRW50aXRpZXMsXG59IGZyb20gJy4vaGVscGVycy50cyc7XG5pbXBvcnQgeyBvdGhlciB9IGZyb20gJy4vcnVsZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXJrZWRPcHRpb25zIH0gZnJvbSAnLi9NYXJrZWRPcHRpb25zLnRzJztcbmltcG9ydCB0eXBlIHsgVG9rZW5zIH0gZnJvbSAnLi9Ub2tlbnMudHMnO1xuaW1wb3J0IHR5cGUgeyBfUGFyc2VyIH0gZnJvbSAnLi9QYXJzZXIudHMnO1xuXG4vKipcbiAqIFJlbmRlcmVyXG4gKi9cbmV4cG9ydCBjbGFzcyBfUmVuZGVyZXI8UGFyc2VyT3V0cHV0ID0gc3RyaW5nLCBSZW5kZXJlck91dHB1dCA9IHN0cmluZz4ge1xuICBvcHRpb25zOiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+O1xuICBwYXJzZXIhOiBfUGFyc2VyPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+OyAvLyBzZXQgYnkgdGhlIHBhcnNlclxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0Pikge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgX2RlZmF1bHRzO1xuICB9XG5cbiAgc3BhY2UodG9rZW46IFRva2Vucy5TcGFjZSk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gJycgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICBjb2RlKHsgdGV4dCwgbGFuZywgZXNjYXBlZCB9OiBUb2tlbnMuQ29kZSk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICBjb25zdCBsYW5nU3RyaW5nID0gKGxhbmcgfHwgJycpLm1hdGNoKG90aGVyLm5vdFNwYWNlU3RhcnQpPy5bMF07XG5cbiAgICBjb25zdCBjb2RlID0gdGV4dC5yZXBsYWNlKG90aGVyLmVuZGluZ05ld2xpbmUsICcnKSArICdcXG4nO1xuXG4gICAgaWYgKCFsYW5nU3RyaW5nKSB7XG4gICAgICByZXR1cm4gJzxwcmU+PGNvZGU+J1xuICAgICAgICArIChlc2NhcGVkID8gY29kZSA6IGVzY2FwZUh0bWxFbnRpdGllcyhjb2RlLCB0cnVlKSlcbiAgICAgICAgKyAnPC9jb2RlPjwvcHJlPlxcbicgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuICc8cHJlPjxjb2RlIGNsYXNzPVwibGFuZ3VhZ2UtJ1xuICAgICAgKyBlc2NhcGVIdG1sRW50aXRpZXMobGFuZ1N0cmluZylcbiAgICAgICsgJ1wiPidcbiAgICAgICsgKGVzY2FwZWQgPyBjb2RlIDogZXNjYXBlSHRtbEVudGl0aWVzKGNvZGUsIHRydWUpKVxuICAgICAgKyAnPC9jb2RlPjwvcHJlPlxcbicgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICBibG9ja3F1b3RlKHsgdG9rZW5zIH06IFRva2Vucy5CbG9ja3F1b3RlKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLnBhcnNlci5wYXJzZSh0b2tlbnMpO1xuICAgIHJldHVybiBgPGJsb2NrcXVvdGU+XFxuJHtib2R5fTwvYmxvY2txdW90ZT5cXG5gIGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgaHRtbCh7IHRleHQgfTogVG9rZW5zLkhUTUwgfCBUb2tlbnMuVGFnKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiB0ZXh0IGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgZGVmKHRva2VuOiBUb2tlbnMuRGVmKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiAnJyBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGhlYWRpbmcoeyB0b2tlbnMsIGRlcHRoIH06IFRva2Vucy5IZWFkaW5nKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiBgPGgke2RlcHRofT4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2Vucyl9PC9oJHtkZXB0aH0+XFxuYCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGhyKHRva2VuOiBUb2tlbnMuSHIpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuICc8aHI+XFxuJyBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGxpc3QodG9rZW46IFRva2Vucy5MaXN0KTogUmVuZGVyZXJPdXRwdXQge1xuICAgIGNvbnN0IG9yZGVyZWQgPSB0b2tlbi5vcmRlcmVkO1xuICAgIGNvbnN0IHN0YXJ0ID0gdG9rZW4uc3RhcnQ7XG5cbiAgICBsZXQgYm9keSA9ICcnO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG9rZW4uaXRlbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0b2tlbi5pdGVtc1tqXTtcbiAgICAgIGJvZHkgKz0gdGhpcy5saXN0aXRlbShpdGVtKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gb3JkZXJlZCA/ICdvbCcgOiAndWwnO1xuICAgIGNvbnN0IHN0YXJ0QXR0ciA9IChvcmRlcmVkICYmIHN0YXJ0ICE9PSAxKSA/ICgnIHN0YXJ0PVwiJyArIHN0YXJ0ICsgJ1wiJykgOiAnJztcbiAgICByZXR1cm4gJzwnICsgdHlwZSArIHN0YXJ0QXR0ciArICc+XFxuJyArIGJvZHkgKyAnPC8nICsgdHlwZSArICc+XFxuJyBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGxpc3RpdGVtKGl0ZW06IFRva2Vucy5MaXN0SXRlbSk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gYDxsaT4ke3RoaXMucGFyc2VyLnBhcnNlKGl0ZW0udG9rZW5zKX08L2xpPlxcbmAgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICBjaGVja2JveCh7IGNoZWNrZWQgfTogVG9rZW5zLkNoZWNrYm94KTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiAnPGlucHV0ICdcbiAgICAgICsgKGNoZWNrZWQgPyAnY2hlY2tlZD1cIlwiICcgOiAnJylcbiAgICAgICsgJ2Rpc2FibGVkPVwiXCIgdHlwZT1cImNoZWNrYm94XCI+ICcgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICBwYXJhZ3JhcGgoeyB0b2tlbnMgfTogVG9rZW5zLlBhcmFncmFwaCk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gYDxwPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW5zKX08L3A+XFxuYCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIHRhYmxlKHRva2VuOiBUb2tlbnMuVGFibGUpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgbGV0IGhlYWRlciA9ICcnO1xuXG4gICAgLy8gaGVhZGVyXG4gICAgbGV0IGNlbGwgPSAnJztcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRva2VuLmhlYWRlci5sZW5ndGg7IGorKykge1xuICAgICAgY2VsbCArPSB0aGlzLnRhYmxlY2VsbCh0b2tlbi5oZWFkZXJbal0pO1xuICAgIH1cbiAgICBoZWFkZXIgKz0gdGhpcy50YWJsZXJvdyh7IHRleHQ6IGNlbGwgYXMgUGFyc2VyT3V0cHV0IH0pO1xuXG4gICAgbGV0IGJvZHkgPSAnJztcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRva2VuLnJvd3MubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJvdyA9IHRva2VuLnJvd3Nbal07XG5cbiAgICAgIGNlbGwgPSAnJztcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcm93Lmxlbmd0aDsgaysrKSB7XG4gICAgICAgIGNlbGwgKz0gdGhpcy50YWJsZWNlbGwocm93W2tdKTtcbiAgICAgIH1cblxuICAgICAgYm9keSArPSB0aGlzLnRhYmxlcm93KHsgdGV4dDogY2VsbCBhcyBQYXJzZXJPdXRwdXQgfSk7XG4gICAgfVxuICAgIGlmIChib2R5KSBib2R5ID0gYDx0Ym9keT4ke2JvZHl9PC90Ym9keT5gO1xuXG4gICAgcmV0dXJuICc8dGFibGU+XFxuJ1xuICAgICAgKyAnPHRoZWFkPlxcbidcbiAgICAgICsgaGVhZGVyXG4gICAgICArICc8L3RoZWFkPlxcbidcbiAgICAgICsgYm9keVxuICAgICAgKyAnPC90YWJsZT5cXG4nIGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgdGFibGVyb3coeyB0ZXh0IH06IFRva2Vucy5UYWJsZVJvdzxQYXJzZXJPdXRwdXQ+KTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiBgPHRyPlxcbiR7dGV4dH08L3RyPlxcbmAgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICB0YWJsZWNlbGwodG9rZW46IFRva2Vucy5UYWJsZUNlbGwpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2VuLnRva2Vucyk7XG4gICAgY29uc3QgdHlwZSA9IHRva2VuLmhlYWRlciA/ICd0aCcgOiAndGQnO1xuICAgIGNvbnN0IHRhZyA9IHRva2VuLmFsaWduXG4gICAgICA/IGA8JHt0eXBlfSBhbGlnbj1cIiR7dG9rZW4uYWxpZ259XCI+YFxuICAgICAgOiBgPCR7dHlwZX0+YDtcbiAgICByZXR1cm4gdGFnICsgY29udGVudCArIGA8LyR7dHlwZX0+XFxuYCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBzcGFuIGxldmVsIHJlbmRlcmVyXG4gICAqL1xuICBzdHJvbmcoeyB0b2tlbnMgfTogVG9rZW5zLlN0cm9uZyk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gYDxzdHJvbmc+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpfTwvc3Ryb25nPmAgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICBlbSh7IHRva2VucyB9OiBUb2tlbnMuRW0pOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuIGA8ZW0+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpfTwvZW0+YCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGNvZGVzcGFuKHsgdGV4dCB9OiBUb2tlbnMuQ29kZXNwYW4pOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuIGA8Y29kZT4ke2VzY2FwZUh0bWxFbnRpdGllcyh0ZXh0LCB0cnVlKX08L2NvZGU+YCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGJyKHRva2VuOiBUb2tlbnMuQnIpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuICc8YnI+JyBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGRlbCh7IHRva2VucyB9OiBUb2tlbnMuRGVsKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiBgPGRlbD4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2Vucyl9PC9kZWw+YCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGxpbmsoeyBocmVmLCB0aXRsZSwgdG9rZW5zIH06IFRva2Vucy5MaW5rKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpIGFzIHN0cmluZztcbiAgICBjb25zdCBjbGVhbkhyZWYgPSBjbGVhblVybChocmVmKTtcbiAgICBpZiAoY2xlYW5IcmVmID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGV4dCBhcyBSZW5kZXJlck91dHB1dDtcbiAgICB9XG4gICAgaHJlZiA9IGNsZWFuSHJlZjtcbiAgICBsZXQgb3V0ID0gJzxhIGhyZWY9XCInICsgaHJlZiArICdcIic7XG4gICAgaWYgKHRpdGxlKSB7XG4gICAgICBvdXQgKz0gJyB0aXRsZT1cIicgKyAoZXNjYXBlSHRtbEVudGl0aWVzKHRpdGxlKSkgKyAnXCInO1xuICAgIH1cbiAgICBvdXQgKz0gJz4nICsgdGV4dCArICc8L2E+JztcbiAgICByZXR1cm4gb3V0IGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgaW1hZ2UoeyBocmVmLCB0aXRsZSwgdGV4dCwgdG9rZW5zIH06IFRva2Vucy5JbWFnZSk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICBpZiAodG9rZW5zKSB7XG4gICAgICB0ZXh0ID0gdGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW5zLCB0aGlzLnBhcnNlci50ZXh0UmVuZGVyZXIpIGFzIHN0cmluZztcbiAgICB9XG4gICAgY29uc3QgY2xlYW5IcmVmID0gY2xlYW5VcmwoaHJlZik7XG4gICAgaWYgKGNsZWFuSHJlZiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGVzY2FwZUh0bWxFbnRpdGllcyh0ZXh0KSBhcyBSZW5kZXJlck91dHB1dDtcbiAgICB9XG4gICAgaHJlZiA9IGNsZWFuSHJlZjtcblxuICAgIGxldCBvdXQgPSBgPGltZyBzcmM9XCIke2hyZWZ9XCIgYWx0PVwiJHtlc2NhcGVIdG1sRW50aXRpZXModGV4dCl9XCJgO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgb3V0ICs9IGAgdGl0bGU9XCIke2VzY2FwZUh0bWxFbnRpdGllcyh0aXRsZSl9XCJgO1xuICAgIH1cbiAgICBvdXQgKz0gJz4nO1xuICAgIHJldHVybiBvdXQgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICB0ZXh0KHRva2VuOiBUb2tlbnMuVGV4dCB8IFRva2Vucy5Fc2NhcGUpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuICd0b2tlbnMnIGluIHRva2VuICYmIHRva2VuLnRva2Vuc1xuICAgICAgPyB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbi50b2tlbnMpIGFzIHVua25vd24gYXMgUmVuZGVyZXJPdXRwdXRcbiAgICAgIDogKCdlc2NhcGVkJyBpbiB0b2tlbiAmJiB0b2tlbi5lc2NhcGVkID8gdG9rZW4udGV4dCBhcyBSZW5kZXJlck91dHB1dCA6IGVzY2FwZUh0bWxFbnRpdGllcyh0b2tlbi50ZXh0KSBhcyBSZW5kZXJlck91dHB1dCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFRva2VucyB9IGZyb20gJy4vVG9rZW5zLnRzJztcblxuLyoqXG4gKiBUZXh0UmVuZGVyZXJcbiAqIHJldHVybnMgb25seSB0aGUgdGV4dHVhbCBwYXJ0IG9mIHRoZSB0b2tlblxuICovXG5leHBvcnQgY2xhc3MgX1RleHRSZW5kZXJlcjxSZW5kZXJlck91dHB1dCA9IHN0cmluZz4ge1xuICAvLyBubyBuZWVkIGZvciBibG9jayBsZXZlbCByZW5kZXJlcnNcbiAgc3Ryb25nKHsgdGV4dCB9OiBUb2tlbnMuU3Ryb25nKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiB0ZXh0IGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgZW0oeyB0ZXh0IH06IFRva2Vucy5FbSk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gdGV4dCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGNvZGVzcGFuKHsgdGV4dCB9OiBUb2tlbnMuQ29kZXNwYW4pOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuIHRleHQgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICBkZWwoeyB0ZXh0IH06IFRva2Vucy5EZWwpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuIHRleHQgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICBodG1sKHsgdGV4dCB9OiBUb2tlbnMuSFRNTCB8IFRva2Vucy5UYWcpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuIHRleHQgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICB0ZXh0KHsgdGV4dCB9OiBUb2tlbnMuVGV4dCB8IFRva2Vucy5Fc2NhcGUgfCBUb2tlbnMuVGFnKTogUmVuZGVyZXJPdXRwdXQge1xuICAgIHJldHVybiB0ZXh0IGFzIFJlbmRlcmVyT3V0cHV0O1xuICB9XG5cbiAgbGluayh7IHRleHQgfTogVG9rZW5zLkxpbmspOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuICcnICsgdGV4dCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGltYWdlKHsgdGV4dCB9OiBUb2tlbnMuSW1hZ2UpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuICcnICsgdGV4dCBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxuXG4gIGJyKCk6IFJlbmRlcmVyT3V0cHV0IHtcbiAgICByZXR1cm4gJycgYXMgUmVuZGVyZXJPdXRwdXQ7XG4gIH1cblxuICBjaGVja2JveCh7IHJhdyB9OiBUb2tlbnMuQ2hlY2tib3gpOiBSZW5kZXJlck91dHB1dCB7XG4gICAgcmV0dXJuIHJhdyBhcyBSZW5kZXJlck91dHB1dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IF9SZW5kZXJlciB9IGZyb20gJy4vUmVuZGVyZXIudHMnO1xuaW1wb3J0IHsgX1RleHRSZW5kZXJlciB9IGZyb20gJy4vVGV4dFJlbmRlcmVyLnRzJztcbmltcG9ydCB7IF9kZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXJrZWRUb2tlbiwgVG9rZW4sIFRva2VucyB9IGZyb20gJy4vVG9rZW5zLnRzJztcbmltcG9ydCB0eXBlIHsgTWFya2VkT3B0aW9ucyB9IGZyb20gJy4vTWFya2VkT3B0aW9ucy50cyc7XG5cbi8qKlxuICogUGFyc2luZyAmIENvbXBpbGluZ1xuICovXG5leHBvcnQgY2xhc3MgX1BhcnNlcjxQYXJzZXJPdXRwdXQgPSBzdHJpbmcsIFJlbmRlcmVyT3V0cHV0ID0gc3RyaW5nPiB7XG4gIG9wdGlvbnM6IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD47XG4gIHJlbmRlcmVyOiBfUmVuZGVyZXI8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD47XG4gIHRleHRSZW5kZXJlcjogX1RleHRSZW5kZXJlcjxSZW5kZXJlck91dHB1dD47XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBfZGVmYXVsdHM7XG4gICAgdGhpcy5vcHRpb25zLnJlbmRlcmVyID0gdGhpcy5vcHRpb25zLnJlbmRlcmVyIHx8IG5ldyBfUmVuZGVyZXI8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4oKTtcbiAgICB0aGlzLnJlbmRlcmVyID0gdGhpcy5vcHRpb25zLnJlbmRlcmVyO1xuICAgIHRoaXMucmVuZGVyZXIub3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLnJlbmRlcmVyLnBhcnNlciA9IHRoaXM7XG4gICAgdGhpcy50ZXh0UmVuZGVyZXIgPSBuZXcgX1RleHRSZW5kZXJlcjxSZW5kZXJlck91dHB1dD4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgUGFyc2UgTWV0aG9kXG4gICAqL1xuICBzdGF0aWMgcGFyc2U8UGFyc2VyT3V0cHV0ID0gc3RyaW5nLCBSZW5kZXJlck91dHB1dCA9IHN0cmluZz4odG9rZW5zOiBUb2tlbltdLCBvcHRpb25zPzogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0Pikge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBfUGFyc2VyPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+KG9wdGlvbnMpO1xuICAgIHJldHVybiBwYXJzZXIucGFyc2UodG9rZW5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgUGFyc2UgSW5saW5lIE1ldGhvZFxuICAgKi9cbiAgc3RhdGljIHBhcnNlSW5saW5lPFBhcnNlck91dHB1dCA9IHN0cmluZywgUmVuZGVyZXJPdXRwdXQgPSBzdHJpbmc+KHRva2VuczogVG9rZW5bXSwgb3B0aW9ucz86IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4pIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgX1BhcnNlcjxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PihvcHRpb25zKTtcbiAgICByZXR1cm4gcGFyc2VyLnBhcnNlSW5saW5lKHRva2Vucyk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgTG9vcFxuICAgKi9cbiAgcGFyc2UodG9rZW5zOiBUb2tlbltdKTogUGFyc2VyT3V0cHV0IHtcbiAgICB0aGlzLnJlbmRlcmVyLnBhcnNlciA9IHRoaXM7XG4gICAgbGV0IG91dCA9ICcnO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGFueVRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgICAvLyBSdW4gYW55IHJlbmRlcmVyIGV4dGVuc2lvbnNcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8ucmVuZGVyZXJzPy5bYW55VG9rZW4udHlwZV0pIHtcbiAgICAgICAgY29uc3QgZ2VuZXJpY1Rva2VuID0gYW55VG9rZW4gYXMgVG9rZW5zLkdlbmVyaWM7XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tnZW5lcmljVG9rZW4udHlwZV0uY2FsbCh7IHBhcnNlcjogdGhpcyB9LCBnZW5lcmljVG9rZW4pO1xuICAgICAgICBpZiAocmV0ICE9PSBmYWxzZSB8fCAhWydzcGFjZScsICdocicsICdoZWFkaW5nJywgJ2NvZGUnLCAndGFibGUnLCAnYmxvY2txdW90ZScsICdsaXN0JywgJ2h0bWwnLCAnZGVmJywgJ3BhcmFncmFwaCcsICd0ZXh0J10uaW5jbHVkZXMoZ2VuZXJpY1Rva2VuLnR5cGUpKSB7XG4gICAgICAgICAgb3V0ICs9IHJldCB8fCAnJztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0b2tlbiA9IGFueVRva2VuIGFzIE1hcmtlZFRva2VuO1xuXG4gICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnc3BhY2UnOiB7XG4gICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuc3BhY2UodG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2hyJzoge1xuICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmhyKHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdoZWFkaW5nJzoge1xuICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmhlYWRpbmcodG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2NvZGUnOiB7XG4gICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuY29kZSh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAndGFibGUnOiB7XG4gICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIudGFibGUodG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2Jsb2NrcXVvdGUnOiB7XG4gICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuYmxvY2txdW90ZSh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbGlzdCc6IHtcbiAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5saXN0KHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdjaGVja2JveCc6IHtcbiAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5jaGVja2JveCh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnaHRtbCc6IHtcbiAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5odG1sKHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdkZWYnOiB7XG4gICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuZGVmKHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdwYXJhZ3JhcGgnOiB7XG4gICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLnRleHQodG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnN0IGVyck1zZyA9ICdUb2tlbiB3aXRoIFwiJyArIHRva2VuLnR5cGUgKyAnXCIgdHlwZSB3YXMgbm90IGZvdW5kLic7XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICAgIHJldHVybiAnJyBhcyBQYXJzZXJPdXRwdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXQgYXMgUGFyc2VyT3V0cHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIElubGluZSBUb2tlbnNcbiAgICovXG4gIHBhcnNlSW5saW5lKHRva2VuczogVG9rZW5bXSwgcmVuZGVyZXI6IF9SZW5kZXJlcjxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PiB8IF9UZXh0UmVuZGVyZXI8UmVuZGVyZXJPdXRwdXQ+ID0gdGhpcy5yZW5kZXJlcik6IFBhcnNlck91dHB1dCB7XG4gICAgdGhpcy5yZW5kZXJlci5wYXJzZXIgPSB0aGlzO1xuICAgIGxldCBvdXQgPSAnJztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhbnlUb2tlbiA9IHRva2Vuc1tpXTtcblxuICAgICAgLy8gUnVuIGFueSByZW5kZXJlciBleHRlbnNpb25zXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/LnJlbmRlcmVycz8uW2FueVRva2VuLnR5cGVdKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1thbnlUb2tlbi50eXBlXS5jYWxsKHsgcGFyc2VyOiB0aGlzIH0sIGFueVRva2VuKTtcbiAgICAgICAgaWYgKHJldCAhPT0gZmFsc2UgfHwgIVsnZXNjYXBlJywgJ2h0bWwnLCAnbGluaycsICdpbWFnZScsICdzdHJvbmcnLCAnZW0nLCAnY29kZXNwYW4nLCAnYnInLCAnZGVsJywgJ3RleHQnXS5pbmNsdWRlcyhhbnlUb2tlbi50eXBlKSkge1xuICAgICAgICAgIG91dCArPSByZXQgfHwgJyc7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9rZW4gPSBhbnlUb2tlbiBhcyBNYXJrZWRUb2tlbjtcblxuICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2VzY2FwZSc6IHtcbiAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIudGV4dCh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnaHRtbCc6IHtcbiAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuaHRtbCh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbGluayc6IHtcbiAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIubGluayh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnaW1hZ2UnOiB7XG4gICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLmltYWdlKHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdjaGVja2JveCc6IHtcbiAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuY2hlY2tib3godG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3N0cm9uZyc6IHtcbiAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuc3Ryb25nKHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdlbSc6IHtcbiAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuZW0odG9rZW4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2NvZGVzcGFuJzoge1xuICAgICAgICAgIG91dCArPSByZW5kZXJlci5jb2Rlc3Bhbih0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnYnInOiB7XG4gICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLmJyKHRva2VuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdkZWwnOiB7XG4gICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLmRlbCh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAndGV4dCc6IHtcbiAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIudGV4dCh0b2tlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnN0IGVyck1zZyA9ICdUb2tlbiB3aXRoIFwiJyArIHRva2VuLnR5cGUgKyAnXCIgdHlwZSB3YXMgbm90IGZvdW5kLic7XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICAgIHJldHVybiAnJyBhcyBQYXJzZXJPdXRwdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0IGFzIFBhcnNlck91dHB1dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IF9kZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMudHMnO1xuaW1wb3J0IHsgX0xleGVyIH0gZnJvbSAnLi9MZXhlci50cyc7XG5pbXBvcnQgeyBfUGFyc2VyIH0gZnJvbSAnLi9QYXJzZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXJrZWRPcHRpb25zIH0gZnJvbSAnLi9NYXJrZWRPcHRpb25zLnRzJztcbmltcG9ydCB0eXBlIHsgVG9rZW4sIFRva2Vuc0xpc3QgfSBmcm9tICcuL1Rva2Vucy50cyc7XG5cbmV4cG9ydCBjbGFzcyBfSG9va3M8UGFyc2VyT3V0cHV0ID0gc3RyaW5nLCBSZW5kZXJlck91dHB1dCA9IHN0cmluZz4ge1xuICBvcHRpb25zOiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+O1xuICBibG9jaz86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IF9kZWZhdWx0cztcbiAgfVxuXG4gIHN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzID0gbmV3IFNldChbXG4gICAgJ3ByZXByb2Nlc3MnLFxuICAgICdwb3N0cHJvY2VzcycsXG4gICAgJ3Byb2Nlc3NBbGxUb2tlbnMnLFxuICAgICdlbVN0cm9uZ01hc2snLFxuICBdKTtcblxuICBzdGF0aWMgcGFzc1Rocm91Z2hIb29rc1Jlc3BlY3RBc3luYyA9IG5ldyBTZXQoW1xuICAgICdwcmVwcm9jZXNzJyxcbiAgICAncG9zdHByb2Nlc3MnLFxuICAgICdwcm9jZXNzQWxsVG9rZW5zJyxcbiAgXSk7XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgbWFya2Rvd24gYmVmb3JlIG1hcmtlZFxuICAgKi9cbiAgcHJlcHJvY2VzcyhtYXJrZG93bjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG1hcmtkb3duO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgSFRNTCBhZnRlciBtYXJrZWQgaXMgZmluaXNoZWRcbiAgICovXG4gIHBvc3Rwcm9jZXNzKGh0bWw6IFBhcnNlck91dHB1dCkge1xuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYWxsIHRva2VucyBiZWZvcmUgd2FsayB0b2tlbnNcbiAgICovXG4gIHByb2Nlc3NBbGxUb2tlbnModG9rZW5zOiBUb2tlbltdIHwgVG9rZW5zTGlzdCkge1xuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cblxuICAvKipcbiAgICogTWFzayBjb250ZW50cyB0aGF0IHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgZW0vc3Ryb25nIGRlbGltaXRlcnNcbiAgICovXG4gIGVtU3Ryb25nTWFzayhzcmM6IHN0cmluZykge1xuICAgIHJldHVybiBzcmM7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZSBmdW5jdGlvbiB0byB0b2tlbml6ZSBtYXJrZG93blxuICAgKi9cbiAgcHJvdmlkZUxleGVyKCkge1xuICAgIHJldHVybiB0aGlzLmJsb2NrID8gX0xleGVyLmxleCA6IF9MZXhlci5sZXhJbmxpbmU7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZSBmdW5jdGlvbiB0byBwYXJzZSB0b2tlbnNcbiAgICovXG4gIHByb3ZpZGVQYXJzZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2sgPyBfUGFyc2VyLnBhcnNlPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+IDogX1BhcnNlci5wYXJzZUlubGluZTxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PjtcbiAgfVxufVxuIiwgImltcG9ydCB7IF9nZXREZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMudHMnO1xuaW1wb3J0IHsgX0xleGVyIH0gZnJvbSAnLi9MZXhlci50cyc7XG5pbXBvcnQgeyBfUGFyc2VyIH0gZnJvbSAnLi9QYXJzZXIudHMnO1xuaW1wb3J0IHsgX0hvb2tzIH0gZnJvbSAnLi9Ib29rcy50cyc7XG5pbXBvcnQgeyBfUmVuZGVyZXIgfSBmcm9tICcuL1JlbmRlcmVyLnRzJztcbmltcG9ydCB7IF9Ub2tlbml6ZXIgfSBmcm9tICcuL1Rva2VuaXplci50cyc7XG5pbXBvcnQgeyBfVGV4dFJlbmRlcmVyIH0gZnJvbSAnLi9UZXh0UmVuZGVyZXIudHMnO1xuaW1wb3J0IHsgZXNjYXBlSHRtbEVudGl0aWVzIH0gZnJvbSAnLi9oZWxwZXJzLnRzJztcbmltcG9ydCB0eXBlIHsgTWFya2VkRXh0ZW5zaW9uLCBNYXJrZWRPcHRpb25zIH0gZnJvbSAnLi9NYXJrZWRPcHRpb25zLnRzJztcbmltcG9ydCB0eXBlIHsgVG9rZW4sIFRva2VucywgVG9rZW5zTGlzdCB9IGZyb20gJy4vVG9rZW5zLnRzJztcblxuZXhwb3J0IHR5cGUgTWF5YmVQcm9taXNlID0gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbnR5cGUgVW5rbm93bkZ1bmN0aW9uID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bjtcbnR5cGUgR2VuZXJpY1JlbmRlcmVyRnVuY3Rpb24gPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiBzdHJpbmcgfCBmYWxzZTtcblxuZXhwb3J0IGNsYXNzIE1hcmtlZDxQYXJzZXJPdXRwdXQgPSBzdHJpbmcsIFJlbmRlcmVyT3V0cHV0ID0gc3RyaW5nPiB7XG4gIGRlZmF1bHRzID0gX2dldERlZmF1bHRzPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+KCk7XG4gIG9wdGlvbnMgPSB0aGlzLnNldE9wdGlvbnM7XG5cbiAgcGFyc2UgPSB0aGlzLnBhcnNlTWFya2Rvd24odHJ1ZSk7XG4gIHBhcnNlSW5saW5lID0gdGhpcy5wYXJzZU1hcmtkb3duKGZhbHNlKTtcblxuICBQYXJzZXIgPSBfUGFyc2VyPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+O1xuICBSZW5kZXJlciA9IF9SZW5kZXJlcjxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PjtcbiAgVGV4dFJlbmRlcmVyID0gX1RleHRSZW5kZXJlcjxSZW5kZXJlck91dHB1dD47XG4gIExleGVyID0gX0xleGVyO1xuICBUb2tlbml6ZXIgPSBfVG9rZW5pemVyPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+O1xuICBIb29rcyA9IF9Ib29rczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0PjtcblxuICBjb25zdHJ1Y3RvciguLi5hcmdzOiBNYXJrZWRFeHRlbnNpb248UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD5bXSkge1xuICAgIHRoaXMudXNlKC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBjYWxsYmFjayBmb3IgZXZlcnkgdG9rZW5cbiAgICovXG4gIHdhbGtUb2tlbnModG9rZW5zOiBUb2tlbltdIHwgVG9rZW5zTGlzdCwgY2FsbGJhY2s6ICh0b2tlbjogVG9rZW4pID0+IE1heWJlUHJvbWlzZSB8IE1heWJlUHJvbWlzZVtdKSB7XG4gICAgbGV0IHZhbHVlczogTWF5YmVQcm9taXNlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdChjYWxsYmFjay5jYWxsKHRoaXMsIHRva2VuKSk7XG4gICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgY2FzZSAndGFibGUnOiB7XG4gICAgICAgICAgY29uc3QgdGFibGVUb2tlbiA9IHRva2VuIGFzIFRva2Vucy5UYWJsZTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNlbGwgb2YgdGFibGVUb2tlbi5oZWFkZXIpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQodGhpcy53YWxrVG9rZW5zKGNlbGwudG9rZW5zLCBjYWxsYmFjaykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiB0YWJsZVRva2VuLnJvd3MpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2VsbCBvZiByb3cpIHtcbiAgICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoY2VsbC50b2tlbnMsIGNhbGxiYWNrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2xpc3QnOiB7XG4gICAgICAgICAgY29uc3QgbGlzdFRva2VuID0gdG9rZW4gYXMgVG9rZW5zLkxpc3Q7XG4gICAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMobGlzdFRva2VuLml0ZW1zLCBjYWxsYmFjaykpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zdCBnZW5lcmljVG9rZW4gPSB0b2tlbiBhcyBUb2tlbnMuR2VuZXJpYztcbiAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0cy5leHRlbnNpb25zPy5jaGlsZFRva2Vucz8uW2dlbmVyaWNUb2tlbi50eXBlXSkge1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW2dlbmVyaWNUb2tlbi50eXBlXS5mb3JFYWNoKChjaGlsZFRva2VucykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0b2tlbnMgPSBnZW5lcmljVG9rZW5bY2hpbGRUb2tlbnNdLmZsYXQoSW5maW5pdHkpIGFzIFRva2VuW10gfCBUb2tlbnNMaXN0O1xuICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2Vucyh0b2tlbnMsIGNhbGxiYWNrKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGdlbmVyaWNUb2tlbi50b2tlbnMpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQodGhpcy53YWxrVG9rZW5zKGdlbmVyaWNUb2tlbi50b2tlbnMsIGNhbGxiYWNrKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICB1c2UoLi4uYXJnczogTWFya2VkRXh0ZW5zaW9uPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+W10pIHtcbiAgICBjb25zdCBleHRlbnNpb25zOiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+WydleHRlbnNpb25zJ10gPSB0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMgfHwgeyByZW5kZXJlcnM6IHt9LCBjaGlsZFRva2Vuczoge30gfTtcblxuICAgIGFyZ3MuZm9yRWFjaCgocGFjaykgPT4ge1xuICAgICAgLy8gY29weSBvcHRpb25zIHRvIG5ldyBvYmplY3RcbiAgICAgIGNvbnN0IG9wdHMgPSB7IC4uLnBhY2sgfSBhcyBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+O1xuXG4gICAgICAvLyBzZXQgYXN5bmMgdG8gdHJ1ZSBpZiBpdCB3YXMgc2V0IHRvIHRydWUgYmVmb3JlXG4gICAgICBvcHRzLmFzeW5jID0gdGhpcy5kZWZhdWx0cy5hc3luYyB8fCBvcHRzLmFzeW5jIHx8IGZhbHNlO1xuXG4gICAgICAvLyA9PS0tIFBhcnNlIFwiYWRkb25cIiBleHRlbnNpb25zIC0tPT0gLy9cbiAgICAgIGlmIChwYWNrLmV4dGVuc2lvbnMpIHtcbiAgICAgICAgcGFjay5leHRlbnNpb25zLmZvckVhY2goKGV4dCkgPT4ge1xuICAgICAgICAgIGlmICghZXh0Lm5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCdyZW5kZXJlcicgaW4gZXh0KSB7IC8vIFJlbmRlcmVyIGV4dGVuc2lvbnNcbiAgICAgICAgICAgIGNvbnN0IHByZXZSZW5kZXJlciA9IGV4dGVuc2lvbnMucmVuZGVyZXJzW2V4dC5uYW1lXTtcbiAgICAgICAgICAgIGlmIChwcmV2UmVuZGVyZXIpIHtcbiAgICAgICAgICAgICAgLy8gUmVwbGFjZSBleHRlbnNpb24gd2l0aCBmdW5jIHRvIHJ1biBuZXcgZXh0ZW5zaW9uIGJ1dCBmYWxsIGJhY2sgaWYgZmFsc2VcbiAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZXh0Lm5hbWVdID0gZnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGxldCByZXQgPSBleHQucmVuZGVyZXIuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgIHJldCA9IHByZXZSZW5kZXJlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGV4dGVuc2lvbnMucmVuZGVyZXJzW2V4dC5uYW1lXSA9IGV4dC5yZW5kZXJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCd0b2tlbml6ZXInIGluIGV4dCkgeyAvLyBUb2tlbml6ZXIgRXh0ZW5zaW9uc1xuICAgICAgICAgICAgaWYgKCFleHQubGV2ZWwgfHwgKGV4dC5sZXZlbCAhPT0gJ2Jsb2NrJyAmJiBleHQubGV2ZWwgIT09ICdpbmxpbmUnKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXh0TGV2ZWwgPSBleHRlbnNpb25zW2V4dC5sZXZlbF07XG4gICAgICAgICAgICBpZiAoZXh0TGV2ZWwpIHtcbiAgICAgICAgICAgICAgZXh0TGV2ZWwudW5zaGlmdChleHQudG9rZW5pemVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGV4dGVuc2lvbnNbZXh0LmxldmVsXSA9IFtleHQudG9rZW5pemVyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleHQuc3RhcnQpIHsgLy8gRnVuY3Rpb24gdG8gY2hlY2sgZm9yIHN0YXJ0IG9mIHRva2VuXG4gICAgICAgICAgICAgIGlmIChleHQubGV2ZWwgPT09ICdibG9jaycpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdGFydEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnN0YXJ0QmxvY2sucHVzaChleHQuc3RhcnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnN0YXJ0QmxvY2sgPSBbZXh0LnN0YXJ0XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0LmxldmVsID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zLnN0YXJ0SW5saW5lKSB7XG4gICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnN0YXJ0SW5saW5lLnB1c2goZXh0LnN0YXJ0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5zdGFydElubGluZSA9IFtleHQuc3RhcnRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ2NoaWxkVG9rZW5zJyBpbiBleHQgJiYgZXh0LmNoaWxkVG9rZW5zKSB7IC8vIENoaWxkIHRva2VucyB0byBiZSB2aXNpdGVkIGJ5IHdhbGtUb2tlbnNcbiAgICAgICAgICAgIGV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbZXh0Lm5hbWVdID0gZXh0LmNoaWxkVG9rZW5zO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG9wdHMuZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7XG4gICAgICB9XG5cbiAgICAgIC8vID09LS0gUGFyc2UgXCJvdmVyd3JpdGVcIiBleHRlbnNpb25zIC0tPT0gLy9cbiAgICAgIGlmIChwYWNrLnJlbmRlcmVyKSB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5kZWZhdWx0cy5yZW5kZXJlciB8fCBuZXcgX1JlbmRlcmVyPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+KHRoaXMuZGVmYXVsdHMpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gcGFjay5yZW5kZXJlcikge1xuICAgICAgICAgIGlmICghKHByb3AgaW4gcmVuZGVyZXIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyICcke3Byb3B9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoWydvcHRpb25zJywgJ3BhcnNlciddLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAvLyBpZ25vcmUgb3B0aW9ucyBwcm9wZXJ0eVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlbmRlcmVyUHJvcCA9IHByb3AgYXMgRXhjbHVkZTxrZXlvZiBfUmVuZGVyZXI8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4sICdvcHRpb25zJyB8ICdwYXJzZXInPjtcbiAgICAgICAgICBjb25zdCByZW5kZXJlckZ1bmMgPSBwYWNrLnJlbmRlcmVyW3JlbmRlcmVyUHJvcF0gYXMgR2VuZXJpY1JlbmRlcmVyRnVuY3Rpb247XG4gICAgICAgICAgY29uc3QgcHJldlJlbmRlcmVyID0gcmVuZGVyZXJbcmVuZGVyZXJQcm9wXSBhcyBHZW5lcmljUmVuZGVyZXJGdW5jdGlvbjtcbiAgICAgICAgICAvLyBSZXBsYWNlIHJlbmRlcmVyIHdpdGggZnVuYyB0byBydW4gZXh0ZW5zaW9uLCBidXQgZmFsbCBiYWNrIGlmIGZhbHNlXG4gICAgICAgICAgcmVuZGVyZXJbcmVuZGVyZXJQcm9wXSA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICAgIGxldCByZXQgPSByZW5kZXJlckZ1bmMuYXBwbHkocmVuZGVyZXIsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgcmV0ID0gcHJldlJlbmRlcmVyLmFwcGx5KHJlbmRlcmVyLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAocmV0IHx8ICcnKSBhcyBSZW5kZXJlck91dHB1dDtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIG9wdHMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgIH1cbiAgICAgIGlmIChwYWNrLnRva2VuaXplcikge1xuICAgICAgICBjb25zdCB0b2tlbml6ZXIgPSB0aGlzLmRlZmF1bHRzLnRva2VuaXplciB8fCBuZXcgX1Rva2VuaXplcjxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0Pih0aGlzLmRlZmF1bHRzKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHBhY2sudG9rZW5pemVyKSB7XG4gICAgICAgICAgaWYgKCEocHJvcCBpbiB0b2tlbml6ZXIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRva2VuaXplciAnJHtwcm9wfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFsnb3B0aW9ucycsICdydWxlcycsICdsZXhlciddLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAvLyBpZ25vcmUgb3B0aW9ucywgcnVsZXMsIGFuZCBsZXhlciBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdG9rZW5pemVyUHJvcCA9IHByb3AgYXMgRXhjbHVkZTxrZXlvZiBfVG9rZW5pemVyPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+LCAnb3B0aW9ucycgfCAncnVsZXMnIHwgJ2xleGVyJz47XG4gICAgICAgICAgY29uc3QgdG9rZW5pemVyRnVuYyA9IHBhY2sudG9rZW5pemVyW3Rva2VuaXplclByb3BdIGFzIFVua25vd25GdW5jdGlvbjtcbiAgICAgICAgICBjb25zdCBwcmV2VG9rZW5pemVyID0gdG9rZW5pemVyW3Rva2VuaXplclByb3BdIGFzIFVua25vd25GdW5jdGlvbjtcbiAgICAgICAgICAvLyBSZXBsYWNlIHRva2VuaXplciB3aXRoIGZ1bmMgdG8gcnVuIGV4dGVuc2lvbiwgYnV0IGZhbGwgYmFjayBpZiBmYWxzZVxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2Fubm90IHR5cGUgdG9rZW5pemVyIGZ1bmN0aW9uIGR5bmFtaWNhbGx5XG4gICAgICAgICAgdG9rZW5pemVyW3Rva2VuaXplclByb3BdID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJldCA9IHRva2VuaXplckZ1bmMuYXBwbHkodG9rZW5pemVyLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJldCA9IHByZXZUb2tlbml6ZXIuYXBwbHkodG9rZW5pemVyLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBvcHRzLnRva2VuaXplciA9IHRva2VuaXplcjtcbiAgICAgIH1cblxuICAgICAgLy8gPT0tLSBQYXJzZSBIb29rcyBleHRlbnNpb25zIC0tPT0gLy9cbiAgICAgIGlmIChwYWNrLmhvb2tzKSB7XG4gICAgICAgIGNvbnN0IGhvb2tzID0gdGhpcy5kZWZhdWx0cy5ob29rcyB8fCBuZXcgX0hvb2tzPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+KCk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBwYWNrLmhvb2tzKSB7XG4gICAgICAgICAgaWYgKCEocHJvcCBpbiBob29rcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaG9vayAnJHtwcm9wfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFsnb3B0aW9ucycsICdibG9jayddLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAvLyBpZ25vcmUgb3B0aW9ucyBhbmQgYmxvY2sgcHJvcGVydGllc1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGhvb2tzUHJvcCA9IHByb3AgYXMgRXhjbHVkZTxrZXlvZiBfSG9va3M8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4sICdvcHRpb25zJyB8ICdibG9jayc+O1xuICAgICAgICAgIGNvbnN0IGhvb2tzRnVuYyA9IHBhY2suaG9va3NbaG9va3NQcm9wXSBhcyBVbmtub3duRnVuY3Rpb247XG4gICAgICAgICAgY29uc3QgcHJldkhvb2sgPSBob29rc1tob29rc1Byb3BdIGFzIFVua25vd25GdW5jdGlvbjtcbiAgICAgICAgICBpZiAoX0hvb2tzLnBhc3NUaHJvdWdoSG9va3MuaGFzKHByb3ApKSB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNhbm5vdCB0eXBlIGhvb2sgZnVuY3Rpb24gZHluYW1pY2FsbHlcbiAgICAgICAgICAgIGhvb2tzW2hvb2tzUHJvcF0gPSAoYXJnOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRzLmFzeW5jICYmIF9Ib29rcy5wYXNzVGhyb3VnaEhvb2tzUmVzcGVjdEFzeW5jLmhhcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoYXN5bmMoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCBob29rc0Z1bmMuY2FsbChob29rcywgYXJnKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2SG9vay5jYWxsKGhvb2tzLCByZXQpO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXQgPSBob29rc0Z1bmMuY2FsbChob29rcywgYXJnKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHByZXZIb29rLmNhbGwoaG9va3MsIHJldCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNhbm5vdCB0eXBlIGhvb2sgZnVuY3Rpb24gZHluYW1pY2FsbHlcbiAgICAgICAgICAgIGhvb2tzW2hvb2tzUHJvcF0gPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRzLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChhc3luYygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCByZXQgPSBhd2FpdCBob29rc0Z1bmMuYXBwbHkoaG9va3MsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gYXdhaXQgcHJldkhvb2suYXBwbHkoaG9va3MsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGV0IHJldCA9IGhvb2tzRnVuYy5hcHBseShob29rcywgYXJncyk7XG4gICAgICAgICAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0ID0gcHJldkhvb2suYXBwbHkoaG9va3MsIGFyZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvcHRzLmhvb2tzID0gaG9va3M7XG4gICAgICB9XG5cbiAgICAgIC8vID09LS0gUGFyc2UgV2Fsa1Rva2VucyBleHRlbnNpb25zIC0tPT0gLy9cbiAgICAgIGlmIChwYWNrLndhbGtUb2tlbnMpIHtcbiAgICAgICAgY29uc3Qgd2Fsa1Rva2VucyA9IHRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucztcbiAgICAgICAgY29uc3QgcGFja1dhbGt0b2tlbnMgPSBwYWNrLndhbGtUb2tlbnM7XG4gICAgICAgIG9wdHMud2Fsa1Rva2VucyA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgICAgICAgbGV0IHZhbHVlczogTWF5YmVQcm9taXNlW10gPSBbXTtcbiAgICAgICAgICB2YWx1ZXMucHVzaChwYWNrV2Fsa3Rva2Vucy5jYWxsKHRoaXMsIHRva2VuKSk7XG4gICAgICAgICAgaWYgKHdhbGtUb2tlbnMpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQod2Fsa1Rva2Vucy5jYWxsKHRoaXMsIHRva2VuKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGVmYXVsdHMgPSB7IC4uLnRoaXMuZGVmYXVsdHMsIC4uLm9wdHMgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0T3B0aW9ucyhvcHQ6IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4pIHtcbiAgICB0aGlzLmRlZmF1bHRzID0geyAuLi50aGlzLmRlZmF1bHRzLCAuLi5vcHQgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxleGVyKHNyYzogc3RyaW5nLCBvcHRpb25zPzogTWFya2VkT3B0aW9uczxQYXJzZXJPdXRwdXQsIFJlbmRlcmVyT3V0cHV0Pikge1xuICAgIHJldHVybiBfTGV4ZXIubGV4KHNyYywgb3B0aW9ucyA/PyB0aGlzLmRlZmF1bHRzKTtcbiAgfVxuXG4gIHBhcnNlcih0b2tlbnM6IFRva2VuW10sIG9wdGlvbnM/OiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+KSB7XG4gICAgcmV0dXJuIF9QYXJzZXIucGFyc2U8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4odG9rZW5zLCBvcHRpb25zID8/IHRoaXMuZGVmYXVsdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU1hcmtkb3duKGJsb2NrVHlwZTogYm9vbGVhbikge1xuICAgIHR5cGUgb3ZlcmxvYWRlZFBhcnNlID0ge1xuICAgICAgKHNyYzogc3RyaW5nLCBvcHRpb25zOiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+ICYgeyBhc3luYzogdHJ1ZSB9KTogUHJvbWlzZTxQYXJzZXJPdXRwdXQ+O1xuICAgICAgKHNyYzogc3RyaW5nLCBvcHRpb25zOiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+ICYgeyBhc3luYzogZmFsc2UgfSk6IFBhcnNlck91dHB1dDtcbiAgICAgIChzcmM6IHN0cmluZywgb3B0aW9ucz86IE1hcmtlZE9wdGlvbnM8UGFyc2VyT3V0cHV0LCBSZW5kZXJlck91dHB1dD4gfCBudWxsKTogUGFyc2VyT3V0cHV0IHwgUHJvbWlzZTxQYXJzZXJPdXRwdXQ+O1xuICAgIH07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IHBhcnNlOiBvdmVybG9hZGVkUGFyc2UgPSAoc3JjOiBzdHJpbmcsIG9wdGlvbnM/OiBNYXJrZWRPcHRpb25zPFBhcnNlck91dHB1dCwgUmVuZGVyZXJPdXRwdXQ+IHwgbnVsbCk6IGFueSA9PiB7XG4gICAgICBjb25zdCBvcmlnT3B0ID0geyAuLi5vcHRpb25zIH07XG4gICAgICBjb25zdCBvcHQgPSB7IC4uLnRoaXMuZGVmYXVsdHMsIC4uLm9yaWdPcHQgfTtcblxuICAgICAgY29uc3QgdGhyb3dFcnJvciA9IHRoaXMub25FcnJvcighIW9wdC5zaWxlbnQsICEhb3B0LmFzeW5jKTtcblxuICAgICAgLy8gdGhyb3cgZXJyb3IgaWYgYW4gZXh0ZW5zaW9uIHNldCBhc3luYyB0byB0cnVlIGJ1dCBwYXJzZSB3YXMgY2FsbGVkIHdpdGggYXN5bmM6IGZhbHNlXG4gICAgICBpZiAodGhpcy5kZWZhdWx0cy5hc3luYyA9PT0gdHJ1ZSAmJiBvcmlnT3B0LmFzeW5jID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgRXJyb3IoJ21hcmtlZCgpOiBUaGUgYXN5bmMgb3B0aW9uIHdhcyBzZXQgdG8gdHJ1ZSBieSBhbiBleHRlbnNpb24uIFJlbW92ZSBhc3luYzogZmFsc2UgZnJvbSB0aGUgcGFyc2Ugb3B0aW9ucyBvYmplY3QgdG8gcmV0dXJuIGEgUHJvbWlzZS4nKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRocm93IGVycm9yIGluIGNhc2Ugb2Ygbm9uIHN0cmluZyBpbnB1dFxuICAgICAgaWYgKHR5cGVvZiBzcmMgPT09ICd1bmRlZmluZWQnIHx8IHNyYyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgRXJyb3IoJ21hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwnKSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHNyYyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IEVycm9yKCdtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgJ1xuICAgICAgICAgICsgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNyYykgKyAnLCBzdHJpbmcgZXhwZWN0ZWQnKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHQuaG9va3MpIHtcbiAgICAgICAgb3B0Lmhvb2tzLm9wdGlvbnMgPSBvcHQ7XG4gICAgICAgIG9wdC5ob29rcy5ibG9jayA9IGJsb2NrVHlwZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdC5hc3luYykge1xuICAgICAgICByZXR1cm4gKGFzeW5jKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZFNyYyA9IG9wdC5ob29rcyA/IGF3YWl0IG9wdC5ob29rcy5wcmVwcm9jZXNzKHNyYykgOiBzcmM7XG4gICAgICAgICAgY29uc3QgbGV4ZXIgPSBvcHQuaG9va3MgPyBhd2FpdCBvcHQuaG9va3MucHJvdmlkZUxleGVyKCkgOiAoYmxvY2tUeXBlID8gX0xleGVyLmxleCA6IF9MZXhlci5sZXhJbmxpbmUpO1xuICAgICAgICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IGxleGVyKHByb2Nlc3NlZFNyYywgb3B0KTtcbiAgICAgICAgICBjb25zdCBwcm9jZXNzZWRUb2tlbnMgPSBvcHQuaG9va3MgPyBhd2FpdCBvcHQuaG9va3MucHJvY2Vzc0FsbFRva2Vucyh0b2tlbnMpIDogdG9rZW5zO1xuICAgICAgICAgIGlmIChvcHQud2Fsa1Rva2Vucykge1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy53YWxrVG9rZW5zKHByb2Nlc3NlZFRva2Vucywgb3B0LndhbGtUb2tlbnMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcGFyc2VyID0gb3B0Lmhvb2tzID8gYXdhaXQgb3B0Lmhvb2tzLnByb3ZpZGVQYXJzZXIoKSA6IChibG9ja1R5cGUgPyBfUGFyc2VyLnBhcnNlIDogX1BhcnNlci5wYXJzZUlubGluZSk7XG4gICAgICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IHBhcnNlcihwcm9jZXNzZWRUb2tlbnMsIG9wdCk7XG4gICAgICAgICAgcmV0dXJuIG9wdC5ob29rcyA/IGF3YWl0IG9wdC5ob29rcy5wb3N0cHJvY2VzcyhodG1sKSA6IGh0bWw7XG4gICAgICAgIH0pKCkuY2F0Y2godGhyb3dFcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChvcHQuaG9va3MpIHtcbiAgICAgICAgICBzcmMgPSBvcHQuaG9va3MucHJlcHJvY2VzcyhzcmMpIGFzIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZXhlciA9IG9wdC5ob29rcyA/IG9wdC5ob29rcy5wcm92aWRlTGV4ZXIoKSA6IChibG9ja1R5cGUgPyBfTGV4ZXIubGV4IDogX0xleGVyLmxleElubGluZSk7XG4gICAgICAgIGxldCB0b2tlbnMgPSBsZXhlcihzcmMsIG9wdCk7XG4gICAgICAgIGlmIChvcHQuaG9va3MpIHtcbiAgICAgICAgICB0b2tlbnMgPSBvcHQuaG9va3MucHJvY2Vzc0FsbFRva2Vucyh0b2tlbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHQud2Fsa1Rva2Vucykge1xuICAgICAgICAgIHRoaXMud2Fsa1Rva2Vucyh0b2tlbnMsIG9wdC53YWxrVG9rZW5zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZXIgPSBvcHQuaG9va3MgPyBvcHQuaG9va3MucHJvdmlkZVBhcnNlcigpIDogKGJsb2NrVHlwZSA/IF9QYXJzZXIucGFyc2UgOiBfUGFyc2VyLnBhcnNlSW5saW5lKTtcbiAgICAgICAgbGV0IGh0bWwgPSBwYXJzZXIodG9rZW5zLCBvcHQpO1xuICAgICAgICBpZiAob3B0Lmhvb2tzKSB7XG4gICAgICAgICAgaHRtbCA9IG9wdC5ob29rcy5wb3N0cHJvY2VzcyhodG1sKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHBhcnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkVycm9yKHNpbGVudDogYm9vbGVhbiwgYXN5bmM6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gKGU6IEVycm9yKTogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICAgIGUubWVzc2FnZSArPSAnXFxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuJztcblxuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICBjb25zdCBtc2cgPSAnPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+J1xuICAgICAgICAgICsgZXNjYXBlSHRtbEVudGl0aWVzKGUubWVzc2FnZSArICcnLCB0cnVlKVxuICAgICAgICAgICsgJzwvcHJlPic7XG4gICAgICAgIGlmIChhc3luYykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobXNnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXNnO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgX0xleGVyIH0gZnJvbSAnLi9MZXhlci50cyc7XG5pbXBvcnQgeyBfUGFyc2VyIH0gZnJvbSAnLi9QYXJzZXIudHMnO1xuaW1wb3J0IHsgX1Rva2VuaXplciB9IGZyb20gJy4vVG9rZW5pemVyLnRzJztcbmltcG9ydCB7IF9SZW5kZXJlciB9IGZyb20gJy4vUmVuZGVyZXIudHMnO1xuaW1wb3J0IHsgX1RleHRSZW5kZXJlciB9IGZyb20gJy4vVGV4dFJlbmRlcmVyLnRzJztcbmltcG9ydCB7IF9Ib29rcyB9IGZyb20gJy4vSG9va3MudHMnO1xuaW1wb3J0IHsgTWFya2VkIH0gZnJvbSAnLi9JbnN0YW5jZS50cyc7XG5pbXBvcnQge1xuICBfZ2V0RGVmYXVsdHMsXG4gIGNoYW5nZURlZmF1bHRzLFxuICBfZGVmYXVsdHMsXG59IGZyb20gJy4vZGVmYXVsdHMudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXJrZWRFeHRlbnNpb24sIE1hcmtlZE9wdGlvbnMgfSBmcm9tICcuL01hcmtlZE9wdGlvbnMudHMnO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiwgVG9rZW5zTGlzdCB9IGZyb20gJy4vVG9rZW5zLnRzJztcbmltcG9ydCB0eXBlIHsgTWF5YmVQcm9taXNlIH0gZnJvbSAnLi9JbnN0YW5jZS50cyc7XG5cbmNvbnN0IG1hcmtlZEluc3RhbmNlID0gbmV3IE1hcmtlZCgpO1xuXG4vKipcbiAqIENvbXBpbGVzIG1hcmtkb3duIHRvIEhUTUwgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHBhcmFtIHNyYyBTdHJpbmcgb2YgbWFya2Rvd24gc291cmNlIHRvIGJlIGNvbXBpbGVkXG4gKiBAcGFyYW0gb3B0aW9ucyBIYXNoIG9mIG9wdGlvbnMsIGhhdmluZyBhc3luYzogdHJ1ZVxuICogQHJldHVybiBQcm9taXNlIG9mIHN0cmluZyBvZiBjb21waWxlZCBIVE1MXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXJrZWQoc3JjOiBzdHJpbmcsIG9wdGlvbnM6IE1hcmtlZE9wdGlvbnMgJiB7IGFzeW5jOiB0cnVlIH0pOiBQcm9taXNlPHN0cmluZz47XG5cbi8qKlxuICogQ29tcGlsZXMgbWFya2Rvd24gdG8gSFRNTC5cbiAqXG4gKiBAcGFyYW0gc3JjIFN0cmluZyBvZiBtYXJrZG93biBzb3VyY2UgdG8gYmUgY29tcGlsZWRcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGhhc2ggb2Ygb3B0aW9uc1xuICogQHJldHVybiBTdHJpbmcgb2YgY29tcGlsZWQgSFRNTC4gV2lsbCBiZSBhIFByb21pc2Ugb2Ygc3RyaW5nIGlmIGFzeW5jIGlzIHNldCB0byB0cnVlIGJ5IGFueSBleHRlbnNpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya2VkKHNyYzogc3RyaW5nLCBvcHRpb25zOiBNYXJrZWRPcHRpb25zICYgeyBhc3luYzogZmFsc2UgfSk6IHN0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBtYXJrZWQoc3JjOiBzdHJpbmcsIG9wdGlvbnM6IE1hcmtlZE9wdGlvbnMgJiB7IGFzeW5jOiB0cnVlIH0pOiBQcm9taXNlPHN0cmluZz47XG5leHBvcnQgZnVuY3Rpb24gbWFya2VkKHNyYzogc3RyaW5nLCBvcHRpb25zPzogTWFya2VkT3B0aW9ucyB8IG51bGwpOiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG5leHBvcnQgZnVuY3Rpb24gbWFya2VkKHNyYzogc3RyaW5nLCBvcHQ/OiBNYXJrZWRPcHRpb25zIHwgbnVsbCk6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBtYXJrZWRJbnN0YW5jZS5wYXJzZShzcmMsIG9wdCk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgZGVmYXVsdCBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIEhhc2ggb2Ygb3B0aW9uc1xuICovXG5tYXJrZWQub3B0aW9ucyA9XG4gIG1hcmtlZC5zZXRPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9uczogTWFya2VkT3B0aW9ucykge1xuICAgIG1hcmtlZEluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgbWFya2VkLmRlZmF1bHRzID0gbWFya2VkSW5zdGFuY2UuZGVmYXVsdHM7XG4gICAgY2hhbmdlRGVmYXVsdHMobWFya2VkLmRlZmF1bHRzKTtcbiAgICByZXR1cm4gbWFya2VkO1xuICB9O1xuXG4vKipcbiAqIEdldHMgdGhlIG9yaWdpbmFsIG1hcmtlZCBkZWZhdWx0IG9wdGlvbnMuXG4gKi9cbm1hcmtlZC5nZXREZWZhdWx0cyA9IF9nZXREZWZhdWx0cztcblxubWFya2VkLmRlZmF1bHRzID0gX2RlZmF1bHRzO1xuXG4vKipcbiAqIFVzZSBFeHRlbnNpb25cbiAqL1xuXG5tYXJrZWQudXNlID0gZnVuY3Rpb24oLi4uYXJnczogTWFya2VkRXh0ZW5zaW9uW10pIHtcbiAgbWFya2VkSW5zdGFuY2UudXNlKC4uLmFyZ3MpO1xuICBtYXJrZWQuZGVmYXVsdHMgPSBtYXJrZWRJbnN0YW5jZS5kZWZhdWx0cztcbiAgY2hhbmdlRGVmYXVsdHMobWFya2VkLmRlZmF1bHRzKTtcbiAgcmV0dXJuIG1hcmtlZDtcbn07XG5cbi8qKlxuICogUnVuIGNhbGxiYWNrIGZvciBldmVyeSB0b2tlblxuICovXG5cbm1hcmtlZC53YWxrVG9rZW5zID0gZnVuY3Rpb24odG9rZW5zOiBUb2tlbltdIHwgVG9rZW5zTGlzdCwgY2FsbGJhY2s6ICh0b2tlbjogVG9rZW4pID0+IE1heWJlUHJvbWlzZSB8IE1heWJlUHJvbWlzZVtdKSB7XG4gIHJldHVybiBtYXJrZWRJbnN0YW5jZS53YWxrVG9rZW5zKHRva2VucywgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBDb21waWxlcyBtYXJrZG93biB0byBIVE1MIHdpdGhvdXQgZW5jbG9zaW5nIGBwYCB0YWcuXG4gKlxuICogQHBhcmFtIHNyYyBTdHJpbmcgb2YgbWFya2Rvd24gc291cmNlIHRvIGJlIGNvbXBpbGVkXG4gKiBAcGFyYW0gb3B0aW9ucyBIYXNoIG9mIG9wdGlvbnNcbiAqIEByZXR1cm4gU3RyaW5nIG9mIGNvbXBpbGVkIEhUTUxcbiAqL1xubWFya2VkLnBhcnNlSW5saW5lID0gbWFya2VkSW5zdGFuY2UucGFyc2VJbmxpbmU7XG5cbi8qKlxuICogRXhwb3NlXG4gKi9cbm1hcmtlZC5QYXJzZXIgPSBfUGFyc2VyO1xubWFya2VkLnBhcnNlciA9IF9QYXJzZXIucGFyc2U7XG5tYXJrZWQuUmVuZGVyZXIgPSBfUmVuZGVyZXI7XG5tYXJrZWQuVGV4dFJlbmRlcmVyID0gX1RleHRSZW5kZXJlcjtcbm1hcmtlZC5MZXhlciA9IF9MZXhlcjtcbm1hcmtlZC5sZXhlciA9IF9MZXhlci5sZXg7XG5tYXJrZWQuVG9rZW5pemVyID0gX1Rva2VuaXplcjtcbm1hcmtlZC5Ib29rcyA9IF9Ib29rcztcbm1hcmtlZC5wYXJzZSA9IG1hcmtlZDtcblxuZXhwb3J0IGNvbnN0IG9wdGlvbnMgPSBtYXJrZWQub3B0aW9ucztcbmV4cG9ydCBjb25zdCBzZXRPcHRpb25zID0gbWFya2VkLnNldE9wdGlvbnM7XG5leHBvcnQgY29uc3QgdXNlID0gbWFya2VkLnVzZTtcbmV4cG9ydCBjb25zdCB3YWxrVG9rZW5zID0gbWFya2VkLndhbGtUb2tlbnM7XG5leHBvcnQgY29uc3QgcGFyc2VJbmxpbmUgPSBtYXJrZWQucGFyc2VJbmxpbmU7XG5leHBvcnQgY29uc3QgcGFyc2UgPSBtYXJrZWQ7XG5leHBvcnQgY29uc3QgcGFyc2VyID0gX1BhcnNlci5wYXJzZTtcbmV4cG9ydCBjb25zdCBsZXhlciA9IF9MZXhlci5sZXg7XG5leHBvcnQgeyBfZGVmYXVsdHMgYXMgZGVmYXVsdHMsIF9nZXREZWZhdWx0cyBhcyBnZXREZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMudHMnO1xuZXhwb3J0IHsgX0xleGVyIGFzIExleGVyIH0gZnJvbSAnLi9MZXhlci50cyc7XG5leHBvcnQgeyBfUGFyc2VyIGFzIFBhcnNlciB9IGZyb20gJy4vUGFyc2VyLnRzJztcbmV4cG9ydCB7IF9Ub2tlbml6ZXIgYXMgVG9rZW5pemVyIH0gZnJvbSAnLi9Ub2tlbml6ZXIudHMnO1xuZXhwb3J0IHsgX1JlbmRlcmVyIGFzIFJlbmRlcmVyIH0gZnJvbSAnLi9SZW5kZXJlci50cyc7XG5leHBvcnQgeyBfVGV4dFJlbmRlcmVyIGFzIFRleHRSZW5kZXJlciB9IGZyb20gJy4vVGV4dFJlbmRlcmVyLnRzJztcbmV4cG9ydCB7IF9Ib29rcyBhcyBIb29rcyB9IGZyb20gJy4vSG9va3MudHMnO1xuZXhwb3J0IHsgTWFya2VkIH0gZnJvbSAnLi9JbnN0YW5jZS50cyc7XG5leHBvcnQgdHlwZSAqIGZyb20gJy4vTWFya2VkT3B0aW9ucy50cyc7XG5leHBvcnQgdHlwZSAqIGZyb20gJy4vVG9rZW5zLnRzJztcbiIsICJjb25zdCB7XG4gIGVudHJpZXMsXG4gIHNldFByb3RvdHlwZU9mLFxuICBpc0Zyb3plbixcbiAgZ2V0UHJvdG90eXBlT2YsXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbn0gPSBPYmplY3Q7XG5cbmxldCB7IGZyZWV6ZSwgc2VhbCwgY3JlYXRlIH0gPSBPYmplY3Q7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xubGV0IHsgYXBwbHksIGNvbnN0cnVjdCB9ID0gdHlwZW9mIFJlZmxlY3QgIT09ICd1bmRlZmluZWQnICYmIFJlZmxlY3Q7XG5cbmlmICghZnJlZXplKSB7XG4gIGZyZWV6ZSA9IGZ1bmN0aW9uIDxUPih4OiBUKTogVCB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG5cbmlmICghc2VhbCkge1xuICBzZWFsID0gZnVuY3Rpb24gPFQ+KHg6IFQpOiBUIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cblxuaWYgKCFhcHBseSkge1xuICBhcHBseSA9IGZ1bmN0aW9uIDxUPihcbiAgICBmdW5jOiAodGhpc0FyZzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gVCxcbiAgICB0aGlzQXJnOiBhbnksXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogVCB7XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59XG5cbmlmICghY29uc3RydWN0KSB7XG4gIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIDxUPihGdW5jOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCAuLi5hcmdzOiBhbnlbXSk6IFQge1xuICAgIHJldHVybiBuZXcgRnVuYyguLi5hcmdzKTtcbiAgfTtcbn1cblxuY29uc3QgYXJyYXlGb3JFYWNoID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUuZm9yRWFjaCk7XG5jb25zdCBhcnJheUluZGV4T2YgPSB1bmFwcGx5KEFycmF5LnByb3RvdHlwZS5pbmRleE9mKTtcbmNvbnN0IGFycmF5TGFzdEluZGV4T2YgPSB1bmFwcGx5KEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZik7XG5jb25zdCBhcnJheVBvcCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLnBvcCk7XG5jb25zdCBhcnJheVB1c2ggPSB1bmFwcGx5KEFycmF5LnByb3RvdHlwZS5wdXNoKTtcbmNvbnN0IGFycmF5U2xpY2UgPSB1bmFwcGx5KEFycmF5LnByb3RvdHlwZS5zbGljZSk7XG5jb25zdCBhcnJheVNwbGljZSA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG5cbmNvbnN0IHN0cmluZ1RvTG93ZXJDYXNlID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKTtcbmNvbnN0IHN0cmluZ1RvU3RyaW5nID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKTtcbmNvbnN0IHN0cmluZ01hdGNoID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLm1hdGNoKTtcbmNvbnN0IHN0cmluZ1JlcGxhY2UgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG5jb25zdCBzdHJpbmdJbmRleE9mID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpO1xuY29uc3Qgc3RyaW5nVHJpbSA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS50cmltKTtcblxuY29uc3Qgb2JqZWN0SGFzT3duUHJvcGVydHkgPSB1bmFwcGx5KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG5jb25zdCByZWdFeHBUZXN0ID0gdW5hcHBseShSZWdFeHAucHJvdG90eXBlLnRlc3QpO1xuXG5jb25zdCB0eXBlRXJyb3JDcmVhdGUgPSB1bmNvbnN0cnVjdChUeXBlRXJyb3IpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aCBhIHNwZWNpZmllZCB0aGlzQXJnIGFuZCBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGZ1bmMgLSBUaGUgZnVuY3Rpb24gdG8gYmUgd3JhcHBlZCBhbmQgY2FsbGVkLlxuICogQHJldHVybnMgQSBuZXcgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aCBhIHNwZWNpZmllZCB0aGlzQXJnIGFuZCBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIHVuYXBwbHk8VD4oXG4gIGZ1bmM6ICh0aGlzQXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBUXG4pOiAodGhpc0FyZzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gVCB7XG4gIHJldHVybiAodGhpc0FyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IFQgPT4ge1xuICAgIGlmICh0aGlzQXJnIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICB0aGlzQXJnLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZnVuY3Rpb24gdGhhdCBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiBjb25zdHJ1Y3RvciBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGZ1bmMgLSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gdG8gYmUgd3JhcHBlZCBhbmQgY2FsbGVkLlxuICogQHJldHVybnMgQSBuZXcgZnVuY3Rpb24gdGhhdCBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiBjb25zdHJ1Y3RvciBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIHVuY29uc3RydWN0PFQ+KFxuICBGdW5jOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUXG4pOiAoLi4uYXJnczogYW55W10pID0+IFQge1xuICByZXR1cm4gKC4uLmFyZ3M6IGFueVtdKTogVCA9PiBjb25zdHJ1Y3QoRnVuYywgYXJncyk7XG59XG5cbi8qKlxuICogQWRkIHByb3BlcnRpZXMgdG8gYSBsb29rdXAgdGFibGVcbiAqXG4gKiBAcGFyYW0gc2V0IC0gVGhlIHNldCB0byB3aGljaCBlbGVtZW50cyB3aWxsIGJlIGFkZGVkLlxuICogQHBhcmFtIGFycmF5IC0gVGhlIGFycmF5IGNvbnRhaW5pbmcgZWxlbWVudHMgdG8gYmUgYWRkZWQgdG8gdGhlIHNldC5cbiAqIEBwYXJhbSB0cmFuc2Zvcm1DYXNlRnVuYyAtIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSB0aGUgY2FzZSBvZiBlYWNoIGVsZW1lbnQgYmVmb3JlIGFkZGluZyB0byB0aGUgc2V0LlxuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIHNldCB3aXRoIGFkZGVkIGVsZW1lbnRzLlxuICovXG5mdW5jdGlvbiBhZGRUb1NldChcbiAgc2V0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBhcnJheTogcmVhZG9ubHkgYW55W10sXG4gIHRyYW5zZm9ybUNhc2VGdW5jOiBSZXR1cm5UeXBlPHR5cGVvZiB1bmFwcGx5PHN0cmluZz4+ID0gc3RyaW5nVG9Mb3dlckNhc2Vcbik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAvLyBNYWtlICdpbicgYW5kIHRydXRoeSBjaGVja3MgbGlrZSBCb29sZWFuKHNldC5jb25zdHJ1Y3RvcilcbiAgICAvLyBpbmRlcGVuZGVudCBvZiBhbnkgcHJvcGVydGllcyBkZWZpbmVkIG9uIE9iamVjdC5wcm90b3R5cGUuXG4gICAgLy8gUHJldmVudCBwcm90b3R5cGUgc2V0dGVycyBmcm9tIGludGVyY2VwdGluZyBzZXQgYXMgYSB0aGlzIHZhbHVlLlxuICAgIHNldFByb3RvdHlwZU9mKHNldCwgbnVsbCk7XG4gIH1cblxuICBsZXQgbCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGwtLSkge1xuICAgIGxldCBlbGVtZW50ID0gYXJyYXlbbF07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbGNFbGVtZW50ID0gdHJhbnNmb3JtQ2FzZUZ1bmMoZWxlbWVudCk7XG4gICAgICBpZiAobGNFbGVtZW50ICE9PSBlbGVtZW50KSB7XG4gICAgICAgIC8vIENvbmZpZyBwcmVzZXRzIChlLmcuIHRhZ3MuanMsIGF0dHJzLmpzKSBhcmUgaW1tdXRhYmxlLlxuICAgICAgICBpZiAoIWlzRnJvemVuKGFycmF5KSkge1xuICAgICAgICAgIChhcnJheSBhcyBhbnlbXSlbbF0gPSBsY0VsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50ID0gbGNFbGVtZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldFtlbGVtZW50XSA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gc2V0O1xufVxuXG4vKipcbiAqIENsZWFuIHVwIGFuIGFycmF5IHRvIGhhcmRlbiBhZ2FpbnN0IENTUFBcbiAqXG4gKiBAcGFyYW0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gYmUgY2xlYW5lZC5cbiAqIEByZXR1cm5zIFRoZSBjbGVhbmVkIHZlcnNpb24gb2YgdGhlIGFycmF5XG4gKi9cbmZ1bmN0aW9uIGNsZWFuQXJyYXk8VD4oYXJyYXk6IFRbXSk6IEFycmF5PFQgfCBudWxsPiB7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBpc1Byb3BlcnR5RXhpc3QgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShhcnJheSwgaW5kZXgpO1xuXG4gICAgaWYgKCFpc1Byb3BlcnR5RXhpc3QpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vKipcbiAqIFNoYWxsb3cgY2xvbmUgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3QgdG8gYmUgY2xvbmVkLlxuICogQHJldHVybnMgQSBuZXcgb2JqZWN0IHRoYXQgY29waWVzIHRoZSBvcmlnaW5hbC5cbiAqL1xuZnVuY3Rpb24gY2xvbmU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KG9iamVjdDogVCk6IFQge1xuICBjb25zdCBuZXdPYmplY3QgPSBjcmVhdGUobnVsbCk7XG5cbiAgZm9yIChjb25zdCBbcHJvcGVydHksIHZhbHVlXSBvZiBlbnRyaWVzKG9iamVjdCkpIHtcbiAgICBjb25zdCBpc1Byb3BlcnR5RXhpc3QgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KTtcblxuICAgIGlmIChpc1Byb3BlcnR5RXhpc3QpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBuZXdPYmplY3RbcHJvcGVydHldID0gY2xlYW5BcnJheSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB2YWx1ZSAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHZhbHVlLmNvbnN0cnVjdG9yID09PSBPYmplY3RcbiAgICAgICkge1xuICAgICAgICBuZXdPYmplY3RbcHJvcGVydHldID0gY2xvbmUodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3T2JqZWN0W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdPYmplY3Q7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYXV0b21hdGljYWxseSBjaGVja3MgaWYgdGhlIHByb3AgaXMgZnVuY3Rpb24gb3IgZ2V0dGVyIGFuZCBiZWhhdmVzIGFjY29yZGluZ2x5LlxuICpcbiAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGxvb2sgdXAgdGhlIGdldHRlciBmdW5jdGlvbiBpbiBpdHMgcHJvdG90eXBlIGNoYWluLlxuICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSBmb3Igd2hpY2ggdG8gZmluZCB0aGUgZ2V0dGVyIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIGdldHRlciBmdW5jdGlvbiBmb3VuZCBpbiB0aGUgcHJvdG90eXBlIGNoYWluIG9yIGEgZmFsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGxvb2t1cEdldHRlcjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIG9iamVjdDogVCxcbiAgcHJvcDogc3RyaW5nXG4pOiBSZXR1cm5UeXBlPHR5cGVvZiB1bmFwcGx5PGFueT4+IHwgKCgpID0+IG51bGwpIHtcbiAgd2hpbGUgKG9iamVjdCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGRlc2MgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wKTtcblxuICAgIGlmIChkZXNjKSB7XG4gICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgcmV0dXJuIHVuYXBwbHkoZGVzYy5nZXQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGRlc2MudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHVuYXBwbHkoZGVzYy52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZhbGxiYWNrVmFsdWUoKTogbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbn1cblxuZXhwb3J0IHtcbiAgLy8gQXJyYXlcbiAgYXJyYXlGb3JFYWNoLFxuICBhcnJheUluZGV4T2YsXG4gIGFycmF5TGFzdEluZGV4T2YsXG4gIGFycmF5UG9wLFxuICBhcnJheVB1c2gsXG4gIGFycmF5U2xpY2UsXG4gIGFycmF5U3BsaWNlLFxuICAvLyBPYmplY3RcbiAgZW50cmllcyxcbiAgZnJlZXplLFxuICBnZXRQcm90b3R5cGVPZixcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICBpc0Zyb3plbixcbiAgc2V0UHJvdG90eXBlT2YsXG4gIHNlYWwsXG4gIGNsb25lLFxuICBjcmVhdGUsXG4gIG9iamVjdEhhc093blByb3BlcnR5LFxuICAvLyBSZWdFeHBcbiAgcmVnRXhwVGVzdCxcbiAgLy8gU3RyaW5nXG4gIHN0cmluZ0luZGV4T2YsXG4gIHN0cmluZ01hdGNoLFxuICBzdHJpbmdSZXBsYWNlLFxuICBzdHJpbmdUb0xvd2VyQ2FzZSxcbiAgc3RyaW5nVG9TdHJpbmcsXG4gIHN0cmluZ1RyaW0sXG4gIC8vIEVycm9yc1xuICB0eXBlRXJyb3JDcmVhdGUsXG4gIC8vIE90aGVyXG4gIGxvb2t1cEdldHRlcixcbiAgYWRkVG9TZXQsXG4gIC8vIFJlZmxlY3RcbiAgdW5hcHBseSxcbiAgdW5jb25zdHJ1Y3QsXG59O1xuIiwgImltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5leHBvcnQgY29uc3QgaHRtbCA9IGZyZWV6ZShbXG4gICdhJyxcbiAgJ2FiYnInLFxuICAnYWNyb255bScsXG4gICdhZGRyZXNzJyxcbiAgJ2FyZWEnLFxuICAnYXJ0aWNsZScsXG4gICdhc2lkZScsXG4gICdhdWRpbycsXG4gICdiJyxcbiAgJ2JkaScsXG4gICdiZG8nLFxuICAnYmlnJyxcbiAgJ2JsaW5rJyxcbiAgJ2Jsb2NrcXVvdGUnLFxuICAnYm9keScsXG4gICdicicsXG4gICdidXR0b24nLFxuICAnY2FudmFzJyxcbiAgJ2NhcHRpb24nLFxuICAnY2VudGVyJyxcbiAgJ2NpdGUnLFxuICAnY29kZScsXG4gICdjb2wnLFxuICAnY29sZ3JvdXAnLFxuICAnY29udGVudCcsXG4gICdkYXRhJyxcbiAgJ2RhdGFsaXN0JyxcbiAgJ2RkJyxcbiAgJ2RlY29yYXRvcicsXG4gICdkZWwnLFxuICAnZGV0YWlscycsXG4gICdkZm4nLFxuICAnZGlhbG9nJyxcbiAgJ2RpcicsXG4gICdkaXYnLFxuICAnZGwnLFxuICAnZHQnLFxuICAnZWxlbWVudCcsXG4gICdlbScsXG4gICdmaWVsZHNldCcsXG4gICdmaWdjYXB0aW9uJyxcbiAgJ2ZpZ3VyZScsXG4gICdmb250JyxcbiAgJ2Zvb3RlcicsXG4gICdmb3JtJyxcbiAgJ2gxJyxcbiAgJ2gyJyxcbiAgJ2gzJyxcbiAgJ2g0JyxcbiAgJ2g1JyxcbiAgJ2g2JyxcbiAgJ2hlYWQnLFxuICAnaGVhZGVyJyxcbiAgJ2hncm91cCcsXG4gICdocicsXG4gICdodG1sJyxcbiAgJ2knLFxuICAnaW1nJyxcbiAgJ2lucHV0JyxcbiAgJ2lucycsXG4gICdrYmQnLFxuICAnbGFiZWwnLFxuICAnbGVnZW5kJyxcbiAgJ2xpJyxcbiAgJ21haW4nLFxuICAnbWFwJyxcbiAgJ21hcmsnLFxuICAnbWFycXVlZScsXG4gICdtZW51JyxcbiAgJ21lbnVpdGVtJyxcbiAgJ21ldGVyJyxcbiAgJ25hdicsXG4gICdub2JyJyxcbiAgJ29sJyxcbiAgJ29wdGdyb3VwJyxcbiAgJ29wdGlvbicsXG4gICdvdXRwdXQnLFxuICAncCcsXG4gICdwaWN0dXJlJyxcbiAgJ3ByZScsXG4gICdwcm9ncmVzcycsXG4gICdxJyxcbiAgJ3JwJyxcbiAgJ3J0JyxcbiAgJ3J1YnknLFxuICAncycsXG4gICdzYW1wJyxcbiAgJ3NlYXJjaCcsXG4gICdzZWN0aW9uJyxcbiAgJ3NlbGVjdCcsXG4gICdzaGFkb3cnLFxuICAnc2xvdCcsXG4gICdzbWFsbCcsXG4gICdzb3VyY2UnLFxuICAnc3BhY2VyJyxcbiAgJ3NwYW4nLFxuICAnc3RyaWtlJyxcbiAgJ3N0cm9uZycsXG4gICdzdHlsZScsXG4gICdzdWInLFxuICAnc3VtbWFyeScsXG4gICdzdXAnLFxuICAndGFibGUnLFxuICAndGJvZHknLFxuICAndGQnLFxuICAndGVtcGxhdGUnLFxuICAndGV4dGFyZWEnLFxuICAndGZvb3QnLFxuICAndGgnLFxuICAndGhlYWQnLFxuICAndGltZScsXG4gICd0cicsXG4gICd0cmFjaycsXG4gICd0dCcsXG4gICd1JyxcbiAgJ3VsJyxcbiAgJ3ZhcicsXG4gICd2aWRlbycsXG4gICd3YnInLFxuXSBhcyBjb25zdCk7XG5cbmV4cG9ydCBjb25zdCBzdmcgPSBmcmVlemUoW1xuICAnc3ZnJyxcbiAgJ2EnLFxuICAnYWx0Z2x5cGgnLFxuICAnYWx0Z2x5cGhkZWYnLFxuICAnYWx0Z2x5cGhpdGVtJyxcbiAgJ2FuaW1hdGVjb2xvcicsXG4gICdhbmltYXRlbW90aW9uJyxcbiAgJ2FuaW1hdGV0cmFuc2Zvcm0nLFxuICAnY2lyY2xlJyxcbiAgJ2NsaXBwYXRoJyxcbiAgJ2RlZnMnLFxuICAnZGVzYycsXG4gICdlbGxpcHNlJyxcbiAgJ2VudGVya2V5aGludCcsXG4gICdleHBvcnRwYXJ0cycsXG4gICdmaWx0ZXInLFxuICAnZm9udCcsXG4gICdnJyxcbiAgJ2dseXBoJyxcbiAgJ2dseXBocmVmJyxcbiAgJ2hrZXJuJyxcbiAgJ2ltYWdlJyxcbiAgJ2lucHV0bW9kZScsXG4gICdsaW5lJyxcbiAgJ2xpbmVhcmdyYWRpZW50JyxcbiAgJ21hcmtlcicsXG4gICdtYXNrJyxcbiAgJ21ldGFkYXRhJyxcbiAgJ21wYXRoJyxcbiAgJ3BhcnQnLFxuICAncGF0aCcsXG4gICdwYXR0ZXJuJyxcbiAgJ3BvbHlnb24nLFxuICAncG9seWxpbmUnLFxuICAncmFkaWFsZ3JhZGllbnQnLFxuICAncmVjdCcsXG4gICdzdG9wJyxcbiAgJ3N0eWxlJyxcbiAgJ3N3aXRjaCcsXG4gICdzeW1ib2wnLFxuICAndGV4dCcsXG4gICd0ZXh0cGF0aCcsXG4gICd0aXRsZScsXG4gICd0cmVmJyxcbiAgJ3RzcGFuJyxcbiAgJ3ZpZXcnLFxuICAndmtlcm4nLFxuXSBhcyBjb25zdCk7XG5cbmV4cG9ydCBjb25zdCBzdmdGaWx0ZXJzID0gZnJlZXplKFtcbiAgJ2ZlQmxlbmQnLFxuICAnZmVDb2xvck1hdHJpeCcsXG4gICdmZUNvbXBvbmVudFRyYW5zZmVyJyxcbiAgJ2ZlQ29tcG9zaXRlJyxcbiAgJ2ZlQ29udm9sdmVNYXRyaXgnLFxuICAnZmVEaWZmdXNlTGlnaHRpbmcnLFxuICAnZmVEaXNwbGFjZW1lbnRNYXAnLFxuICAnZmVEaXN0YW50TGlnaHQnLFxuICAnZmVEcm9wU2hhZG93JyxcbiAgJ2ZlRmxvb2QnLFxuICAnZmVGdW5jQScsXG4gICdmZUZ1bmNCJyxcbiAgJ2ZlRnVuY0cnLFxuICAnZmVGdW5jUicsXG4gICdmZUdhdXNzaWFuQmx1cicsXG4gICdmZUltYWdlJyxcbiAgJ2ZlTWVyZ2UnLFxuICAnZmVNZXJnZU5vZGUnLFxuICAnZmVNb3JwaG9sb2d5JyxcbiAgJ2ZlT2Zmc2V0JyxcbiAgJ2ZlUG9pbnRMaWdodCcsXG4gICdmZVNwZWN1bGFyTGlnaHRpbmcnLFxuICAnZmVTcG90TGlnaHQnLFxuICAnZmVUaWxlJyxcbiAgJ2ZlVHVyYnVsZW5jZScsXG5dIGFzIGNvbnN0KTtcblxuLy8gTGlzdCBvZiBTVkcgZWxlbWVudHMgdGhhdCBhcmUgZGlzYWxsb3dlZCBieSBkZWZhdWx0LlxuLy8gV2Ugc3RpbGwgbmVlZCB0byBrbm93IHRoZW0gc28gdGhhdCB3ZSBjYW4gZG8gbmFtZXNwYWNlXG4vLyBjaGVja3MgcHJvcGVybHkgaW4gY2FzZSBvbmUgd2FudHMgdG8gYWRkIHRoZW0gdG9cbi8vIGFsbG93LWxpc3QuXG5leHBvcnQgY29uc3Qgc3ZnRGlzYWxsb3dlZCA9IGZyZWV6ZShbXG4gICdhbmltYXRlJyxcbiAgJ2NvbG9yLXByb2ZpbGUnLFxuICAnY3Vyc29yJyxcbiAgJ2Rpc2NhcmQnLFxuICAnZm9udC1mYWNlJyxcbiAgJ2ZvbnQtZmFjZS1mb3JtYXQnLFxuICAnZm9udC1mYWNlLW5hbWUnLFxuICAnZm9udC1mYWNlLXNyYycsXG4gICdmb250LWZhY2UtdXJpJyxcbiAgJ2ZvcmVpZ25vYmplY3QnLFxuICAnaGF0Y2gnLFxuICAnaGF0Y2hwYXRoJyxcbiAgJ21lc2gnLFxuICAnbWVzaGdyYWRpZW50JyxcbiAgJ21lc2hwYXRjaCcsXG4gICdtZXNocm93JyxcbiAgJ21pc3NpbmctZ2x5cGgnLFxuICAnc2NyaXB0JyxcbiAgJ3NldCcsXG4gICdzb2xpZGNvbG9yJyxcbiAgJ3Vua25vd24nLFxuICAndXNlJyxcbl0gYXMgY29uc3QpO1xuXG5leHBvcnQgY29uc3QgbWF0aE1sID0gZnJlZXplKFtcbiAgJ21hdGgnLFxuICAnbWVuY2xvc2UnLFxuICAnbWVycm9yJyxcbiAgJ21mZW5jZWQnLFxuICAnbWZyYWMnLFxuICAnbWdseXBoJyxcbiAgJ21pJyxcbiAgJ21sYWJlbGVkdHInLFxuICAnbW11bHRpc2NyaXB0cycsXG4gICdtbicsXG4gICdtbycsXG4gICdtb3ZlcicsXG4gICdtcGFkZGVkJyxcbiAgJ21waGFudG9tJyxcbiAgJ21yb290JyxcbiAgJ21yb3cnLFxuICAnbXMnLFxuICAnbXNwYWNlJyxcbiAgJ21zcXJ0JyxcbiAgJ21zdHlsZScsXG4gICdtc3ViJyxcbiAgJ21zdXAnLFxuICAnbXN1YnN1cCcsXG4gICdtdGFibGUnLFxuICAnbXRkJyxcbiAgJ210ZXh0JyxcbiAgJ210cicsXG4gICdtdW5kZXInLFxuICAnbXVuZGVyb3ZlcicsXG4gICdtcHJlc2NyaXB0cycsXG5dIGFzIGNvbnN0KTtcblxuLy8gU2ltaWxhcmx5IHRvIFNWRywgd2Ugd2FudCB0byBrbm93IGFsbCBNYXRoTUwgZWxlbWVudHMsXG4vLyBldmVuIHRob3NlIHRoYXQgd2UgZGlzYWxsb3cgYnkgZGVmYXVsdC5cbmV4cG9ydCBjb25zdCBtYXRoTWxEaXNhbGxvd2VkID0gZnJlZXplKFtcbiAgJ21hY3Rpb24nLFxuICAnbWFsaWduZ3JvdXAnLFxuICAnbWFsaWdubWFyaycsXG4gICdtbG9uZ2RpdicsXG4gICdtc2NhcnJpZXMnLFxuICAnbXNjYXJyeScsXG4gICdtc2dyb3VwJyxcbiAgJ21zdGFjaycsXG4gICdtc2xpbmUnLFxuICAnbXNyb3cnLFxuICAnc2VtYW50aWNzJyxcbiAgJ2Fubm90YXRpb24nLFxuICAnYW5ub3RhdGlvbi14bWwnLFxuICAnbXByZXNjcmlwdHMnLFxuICAnbm9uZScsXG5dIGFzIGNvbnN0KTtcblxuZXhwb3J0IGNvbnN0IHRleHQgPSBmcmVlemUoWycjdGV4dCddIGFzIGNvbnN0KTtcbiIsICJpbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuZXhwb3J0IGNvbnN0IGh0bWwgPSBmcmVlemUoW1xuICAnYWNjZXB0JyxcbiAgJ2FjdGlvbicsXG4gICdhbGlnbicsXG4gICdhbHQnLFxuICAnYXV0b2NhcGl0YWxpemUnLFxuICAnYXV0b2NvbXBsZXRlJyxcbiAgJ2F1dG9waWN0dXJlaW5waWN0dXJlJyxcbiAgJ2F1dG9wbGF5JyxcbiAgJ2JhY2tncm91bmQnLFxuICAnYmdjb2xvcicsXG4gICdib3JkZXInLFxuICAnY2FwdHVyZScsXG4gICdjZWxscGFkZGluZycsXG4gICdjZWxsc3BhY2luZycsXG4gICdjaGVja2VkJyxcbiAgJ2NpdGUnLFxuICAnY2xhc3MnLFxuICAnY2xlYXInLFxuICAnY29sb3InLFxuICAnY29scycsXG4gICdjb2xzcGFuJyxcbiAgJ2NvbnRyb2xzJyxcbiAgJ2NvbnRyb2xzbGlzdCcsXG4gICdjb29yZHMnLFxuICAnY3Jvc3NvcmlnaW4nLFxuICAnZGF0ZXRpbWUnLFxuICAnZGVjb2RpbmcnLFxuICAnZGVmYXVsdCcsXG4gICdkaXInLFxuICAnZGlzYWJsZWQnLFxuICAnZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUnLFxuICAnZGlzYWJsZXJlbW90ZXBsYXliYWNrJyxcbiAgJ2Rvd25sb2FkJyxcbiAgJ2RyYWdnYWJsZScsXG4gICdlbmN0eXBlJyxcbiAgJ2VudGVya2V5aGludCcsXG4gICdleHBvcnRwYXJ0cycsXG4gICdmYWNlJyxcbiAgJ2ZvcicsXG4gICdoZWFkZXJzJyxcbiAgJ2hlaWdodCcsXG4gICdoaWRkZW4nLFxuICAnaGlnaCcsXG4gICdocmVmJyxcbiAgJ2hyZWZsYW5nJyxcbiAgJ2lkJyxcbiAgJ2luZXJ0JyxcbiAgJ2lucHV0bW9kZScsXG4gICdpbnRlZ3JpdHknLFxuICAnaXNtYXAnLFxuICAna2luZCcsXG4gICdsYWJlbCcsXG4gICdsYW5nJyxcbiAgJ2xpc3QnLFxuICAnbG9hZGluZycsXG4gICdsb29wJyxcbiAgJ2xvdycsXG4gICdtYXgnLFxuICAnbWF4bGVuZ3RoJyxcbiAgJ21lZGlhJyxcbiAgJ21ldGhvZCcsXG4gICdtaW4nLFxuICAnbWlubGVuZ3RoJyxcbiAgJ211bHRpcGxlJyxcbiAgJ211dGVkJyxcbiAgJ25hbWUnLFxuICAnbm9uY2UnLFxuICAnbm9zaGFkZScsXG4gICdub3ZhbGlkYXRlJyxcbiAgJ25vd3JhcCcsXG4gICdvcGVuJyxcbiAgJ29wdGltdW0nLFxuICAncGFydCcsXG4gICdwYXR0ZXJuJyxcbiAgJ3BsYWNlaG9sZGVyJyxcbiAgJ3BsYXlzaW5saW5lJyxcbiAgJ3BvcG92ZXInLFxuICAncG9wb3ZlcnRhcmdldCcsXG4gICdwb3BvdmVydGFyZ2V0YWN0aW9uJyxcbiAgJ3Bvc3RlcicsXG4gICdwcmVsb2FkJyxcbiAgJ3B1YmRhdGUnLFxuICAncmFkaW9ncm91cCcsXG4gICdyZWFkb25seScsXG4gICdyZWwnLFxuICAncmVxdWlyZWQnLFxuICAncmV2JyxcbiAgJ3JldmVyc2VkJyxcbiAgJ3JvbGUnLFxuICAncm93cycsXG4gICdyb3dzcGFuJyxcbiAgJ3NwZWxsY2hlY2snLFxuICAnc2NvcGUnLFxuICAnc2VsZWN0ZWQnLFxuICAnc2hhcGUnLFxuICAnc2l6ZScsXG4gICdzaXplcycsXG4gICdzbG90JyxcbiAgJ3NwYW4nLFxuICAnc3JjbGFuZycsXG4gICdzdGFydCcsXG4gICdzcmMnLFxuICAnc3Jjc2V0JyxcbiAgJ3N0ZXAnLFxuICAnc3R5bGUnLFxuICAnc3VtbWFyeScsXG4gICd0YWJpbmRleCcsXG4gICd0aXRsZScsXG4gICd0cmFuc2xhdGUnLFxuICAndHlwZScsXG4gICd1c2VtYXAnLFxuICAndmFsaWduJyxcbiAgJ3ZhbHVlJyxcbiAgJ3dpZHRoJyxcbiAgJ3dyYXAnLFxuICAneG1sbnMnLFxuICAnc2xvdCcsXG5dIGFzIGNvbnN0KTtcblxuZXhwb3J0IGNvbnN0IHN2ZyA9IGZyZWV6ZShbXG4gICdhY2NlbnQtaGVpZ2h0JyxcbiAgJ2FjY3VtdWxhdGUnLFxuICAnYWRkaXRpdmUnLFxuICAnYWxpZ25tZW50LWJhc2VsaW5lJyxcbiAgJ2FtcGxpdHVkZScsXG4gICdhc2NlbnQnLFxuICAnYXR0cmlidXRlbmFtZScsXG4gICdhdHRyaWJ1dGV0eXBlJyxcbiAgJ2F6aW11dGgnLFxuICAnYmFzZWZyZXF1ZW5jeScsXG4gICdiYXNlbGluZS1zaGlmdCcsXG4gICdiZWdpbicsXG4gICdiaWFzJyxcbiAgJ2J5JyxcbiAgJ2NsYXNzJyxcbiAgJ2NsaXAnLFxuICAnY2xpcHBhdGh1bml0cycsXG4gICdjbGlwLXBhdGgnLFxuICAnY2xpcC1ydWxlJyxcbiAgJ2NvbG9yJyxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24nLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJyxcbiAgJ2NvbG9yLXByb2ZpbGUnLFxuICAnY29sb3ItcmVuZGVyaW5nJyxcbiAgJ2N4JyxcbiAgJ2N5JyxcbiAgJ2QnLFxuICAnZHgnLFxuICAnZHknLFxuICAnZGlmZnVzZWNvbnN0YW50JyxcbiAgJ2RpcmVjdGlvbicsXG4gICdkaXNwbGF5JyxcbiAgJ2Rpdmlzb3InLFxuICAnZHVyJyxcbiAgJ2VkZ2Vtb2RlJyxcbiAgJ2VsZXZhdGlvbicsXG4gICdlbmQnLFxuICAnZXhwb25lbnQnLFxuICAnZmlsbCcsXG4gICdmaWxsLW9wYWNpdHknLFxuICAnZmlsbC1ydWxlJyxcbiAgJ2ZpbHRlcicsXG4gICdmaWx0ZXJ1bml0cycsXG4gICdmbG9vZC1jb2xvcicsXG4gICdmbG9vZC1vcGFjaXR5JyxcbiAgJ2ZvbnQtZmFtaWx5JyxcbiAgJ2ZvbnQtc2l6ZScsXG4gICdmb250LXNpemUtYWRqdXN0JyxcbiAgJ2ZvbnQtc3RyZXRjaCcsXG4gICdmb250LXN0eWxlJyxcbiAgJ2ZvbnQtdmFyaWFudCcsXG4gICdmb250LXdlaWdodCcsXG4gICdmeCcsXG4gICdmeScsXG4gICdnMScsXG4gICdnMicsXG4gICdnbHlwaC1uYW1lJyxcbiAgJ2dseXBocmVmJyxcbiAgJ2dyYWRpZW50dW5pdHMnLFxuICAnZ3JhZGllbnR0cmFuc2Zvcm0nLFxuICAnaGVpZ2h0JyxcbiAgJ2hyZWYnLFxuICAnaWQnLFxuICAnaW1hZ2UtcmVuZGVyaW5nJyxcbiAgJ2luJyxcbiAgJ2luMicsXG4gICdpbnRlcmNlcHQnLFxuICAnaycsXG4gICdrMScsXG4gICdrMicsXG4gICdrMycsXG4gICdrNCcsXG4gICdrZXJuaW5nJyxcbiAgJ2tleXBvaW50cycsXG4gICdrZXlzcGxpbmVzJyxcbiAgJ2tleXRpbWVzJyxcbiAgJ2xhbmcnLFxuICAnbGVuZ3RoYWRqdXN0JyxcbiAgJ2xldHRlci1zcGFjaW5nJyxcbiAgJ2tlcm5lbG1hdHJpeCcsXG4gICdrZXJuZWx1bml0bGVuZ3RoJyxcbiAgJ2xpZ2h0aW5nLWNvbG9yJyxcbiAgJ2xvY2FsJyxcbiAgJ21hcmtlci1lbmQnLFxuICAnbWFya2VyLW1pZCcsXG4gICdtYXJrZXItc3RhcnQnLFxuICAnbWFya2VyaGVpZ2h0JyxcbiAgJ21hcmtlcnVuaXRzJyxcbiAgJ21hcmtlcndpZHRoJyxcbiAgJ21hc2tjb250ZW50dW5pdHMnLFxuICAnbWFza3VuaXRzJyxcbiAgJ21heCcsXG4gICdtYXNrJyxcbiAgJ21hc2stdHlwZScsXG4gICdtZWRpYScsXG4gICdtZXRob2QnLFxuICAnbW9kZScsXG4gICdtaW4nLFxuICAnbmFtZScsXG4gICdudW1vY3RhdmVzJyxcbiAgJ29mZnNldCcsXG4gICdvcGVyYXRvcicsXG4gICdvcGFjaXR5JyxcbiAgJ29yZGVyJyxcbiAgJ29yaWVudCcsXG4gICdvcmllbnRhdGlvbicsXG4gICdvcmlnaW4nLFxuICAnb3ZlcmZsb3cnLFxuICAncGFpbnQtb3JkZXInLFxuICAncGF0aCcsXG4gICdwYXRobGVuZ3RoJyxcbiAgJ3BhdHRlcm5jb250ZW50dW5pdHMnLFxuICAncGF0dGVybnRyYW5zZm9ybScsXG4gICdwYXR0ZXJudW5pdHMnLFxuICAncG9pbnRzJyxcbiAgJ3ByZXNlcnZlYWxwaGEnLFxuICAncHJlc2VydmVhc3BlY3RyYXRpbycsXG4gICdwcmltaXRpdmV1bml0cycsXG4gICdyJyxcbiAgJ3J4JyxcbiAgJ3J5JyxcbiAgJ3JhZGl1cycsXG4gICdyZWZ4JyxcbiAgJ3JlZnknLFxuICAncmVwZWF0Y291bnQnLFxuICAncmVwZWF0ZHVyJyxcbiAgJ3Jlc3RhcnQnLFxuICAncmVzdWx0JyxcbiAgJ3JvdGF0ZScsXG4gICdzY2FsZScsXG4gICdzZWVkJyxcbiAgJ3NoYXBlLXJlbmRlcmluZycsXG4gICdzbG9wZScsXG4gICdzcGVjdWxhcmNvbnN0YW50JyxcbiAgJ3NwZWN1bGFyZXhwb25lbnQnLFxuICAnc3ByZWFkbWV0aG9kJyxcbiAgJ3N0YXJ0b2Zmc2V0JyxcbiAgJ3N0ZGRldmlhdGlvbicsXG4gICdzdGl0Y2h0aWxlcycsXG4gICdzdG9wLWNvbG9yJyxcbiAgJ3N0b3Atb3BhY2l0eScsXG4gICdzdHJva2UtZGFzaGFycmF5JyxcbiAgJ3N0cm9rZS1kYXNob2Zmc2V0JyxcbiAgJ3N0cm9rZS1saW5lY2FwJyxcbiAgJ3N0cm9rZS1saW5lam9pbicsXG4gICdzdHJva2UtbWl0ZXJsaW1pdCcsXG4gICdzdHJva2Utb3BhY2l0eScsXG4gICdzdHJva2UnLFxuICAnc3Ryb2tlLXdpZHRoJyxcbiAgJ3N0eWxlJyxcbiAgJ3N1cmZhY2VzY2FsZScsXG4gICdzeXN0ZW1sYW5ndWFnZScsXG4gICd0YWJpbmRleCcsXG4gICd0YWJsZXZhbHVlcycsXG4gICd0YXJnZXR4JyxcbiAgJ3RhcmdldHknLFxuICAndHJhbnNmb3JtJyxcbiAgJ3RyYW5zZm9ybS1vcmlnaW4nLFxuICAndGV4dC1hbmNob3InLFxuICAndGV4dC1kZWNvcmF0aW9uJyxcbiAgJ3RleHQtcmVuZGVyaW5nJyxcbiAgJ3RleHRsZW5ndGgnLFxuICAndHlwZScsXG4gICd1MScsXG4gICd1MicsXG4gICd1bmljb2RlJyxcbiAgJ3ZhbHVlcycsXG4gICd2aWV3Ym94JyxcbiAgJ3Zpc2liaWxpdHknLFxuICAndmVyc2lvbicsXG4gICd2ZXJ0LWFkdi15JyxcbiAgJ3ZlcnQtb3JpZ2luLXgnLFxuICAndmVydC1vcmlnaW4teScsXG4gICd3aWR0aCcsXG4gICd3b3JkLXNwYWNpbmcnLFxuICAnd3JhcCcsXG4gICd3cml0aW5nLW1vZGUnLFxuICAneGNoYW5uZWxzZWxlY3RvcicsXG4gICd5Y2hhbm5lbHNlbGVjdG9yJyxcbiAgJ3gnLFxuICAneDEnLFxuICAneDInLFxuICAneG1sbnMnLFxuICAneScsXG4gICd5MScsXG4gICd5MicsXG4gICd6JyxcbiAgJ3pvb21hbmRwYW4nLFxuXSBhcyBjb25zdCk7XG5cbmV4cG9ydCBjb25zdCBtYXRoTWwgPSBmcmVlemUoW1xuICAnYWNjZW50JyxcbiAgJ2FjY2VudHVuZGVyJyxcbiAgJ2FsaWduJyxcbiAgJ2JldmVsbGVkJyxcbiAgJ2Nsb3NlJyxcbiAgJ2NvbHVtbnNhbGlnbicsXG4gICdjb2x1bW5saW5lcycsXG4gICdjb2x1bW5zcGFuJyxcbiAgJ2Rlbm9tYWxpZ24nLFxuICAnZGVwdGgnLFxuICAnZGlyJyxcbiAgJ2Rpc3BsYXknLFxuICAnZGlzcGxheXN0eWxlJyxcbiAgJ2VuY29kaW5nJyxcbiAgJ2ZlbmNlJyxcbiAgJ2ZyYW1lJyxcbiAgJ2hlaWdodCcsXG4gICdocmVmJyxcbiAgJ2lkJyxcbiAgJ2xhcmdlb3AnLFxuICAnbGVuZ3RoJyxcbiAgJ2xpbmV0aGlja25lc3MnLFxuICAnbHNwYWNlJyxcbiAgJ2xxdW90ZScsXG4gICdtYXRoYmFja2dyb3VuZCcsXG4gICdtYXRoY29sb3InLFxuICAnbWF0aHNpemUnLFxuICAnbWF0aHZhcmlhbnQnLFxuICAnbWF4c2l6ZScsXG4gICdtaW5zaXplJyxcbiAgJ21vdmFibGVsaW1pdHMnLFxuICAnbm90YXRpb24nLFxuICAnbnVtYWxpZ24nLFxuICAnb3BlbicsXG4gICdyb3dhbGlnbicsXG4gICdyb3dsaW5lcycsXG4gICdyb3dzcGFjaW5nJyxcbiAgJ3Jvd3NwYW4nLFxuICAncnNwYWNlJyxcbiAgJ3JxdW90ZScsXG4gICdzY3JpcHRsZXZlbCcsXG4gICdzY3JpcHRtaW5zaXplJyxcbiAgJ3NjcmlwdHNpemVtdWx0aXBsaWVyJyxcbiAgJ3NlbGVjdGlvbicsXG4gICdzZXBhcmF0b3InLFxuICAnc2VwYXJhdG9ycycsXG4gICdzdHJldGNoeScsXG4gICdzdWJzY3JpcHRzaGlmdCcsXG4gICdzdXBzY3JpcHRzaGlmdCcsXG4gICdzeW1tZXRyaWMnLFxuICAndm9mZnNldCcsXG4gICd3aWR0aCcsXG4gICd4bWxucycsXG5dKTtcblxuZXhwb3J0IGNvbnN0IHhtbCA9IGZyZWV6ZShbXG4gICd4bGluazpocmVmJyxcbiAgJ3htbDppZCcsXG4gICd4bGluazp0aXRsZScsXG4gICd4bWw6c3BhY2UnLFxuICAneG1sbnM6eGxpbmsnLFxuXSBhcyBjb25zdCk7XG4iLCAiaW1wb3J0IHsgc2VhbCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9iZXR0ZXItcmVnZXhcbmV4cG9ydCBjb25zdCBNVVNUQUNIRV9FWFBSID0gc2VhbCgvXFx7XFx7W1xcd1xcV10qfFtcXHdcXFddKlxcfVxcfS9nbSk7IC8vIFNwZWNpZnkgdGVtcGxhdGUgZGV0ZWN0aW9uIHJlZ2V4IGZvciBTQUZFX0ZPUl9URU1QTEFURVMgbW9kZVxuZXhwb3J0IGNvbnN0IEVSQl9FWFBSID0gc2VhbCgvPCVbXFx3XFxXXSp8W1xcd1xcV10qJT4vZ20pO1xuZXhwb3J0IGNvbnN0IFRNUExJVF9FWFBSID0gc2VhbCgvXFwkXFx7W1xcd1xcV10qL2dtKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSB1bmljb3JuL2JldHRlci1yZWdleFxuZXhwb3J0IGNvbnN0IERBVEFfQVRUUiA9IHNlYWwoL15kYXRhLVtcXC1cXHcuXFx1MDBCNy1cXHVGRkZGXSskLyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbmV4cG9ydCBjb25zdCBBUklBX0FUVFIgPSBzZWFsKC9eYXJpYS1bXFwtXFx3XSskLyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbmV4cG9ydCBjb25zdCBJU19BTExPV0VEX1VSSSA9IHNlYWwoXG4gIC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfHNtc3xjaWR8eG1wcHxtYXRyaXgpOnxbXmEtel18W2EteisuXFwtXSsoPzpbXmEteisuXFwtOl18JCkpL2kgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuKTtcbmV4cG9ydCBjb25zdCBJU19TQ1JJUFRfT1JfREFUQSA9IHNlYWwoL14oPzpcXHcrc2NyaXB0fGRhdGEpOi9pKTtcbmV4cG9ydCBjb25zdCBBVFRSX1dISVRFU1BBQ0UgPSBzZWFsKFxuICAvW1xcdTAwMDAtXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MTgwRVxcdTIwMDAtXFx1MjAyOVxcdTIwNUZcXHUzMDAwXS9nIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29udHJvbC1yZWdleFxuKTtcbmV4cG9ydCBjb25zdCBET0NUWVBFX05BTUUgPSBzZWFsKC9eaHRtbCQvaSk7XG5leHBvcnQgY29uc3QgQ1VTVE9NX0VMRU1FTlQgPSBzZWFsKC9eW2Etel1bLlxcd10qKC1bLlxcd10rKSskL2kpO1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cblxuaW1wb3J0IHR5cGUge1xuICBUcnVzdGVkSFRNTCxcbiAgVHJ1c3RlZFR5cGVzV2luZG93LFxufSBmcm9tICd0cnVzdGVkLXR5cGVzL2xpYi9pbmRleC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZywgVXNlUHJvZmlsZXNDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgKiBhcyBUQUdTIGZyb20gJy4vdGFncy5qcyc7XG5pbXBvcnQgKiBhcyBBVFRSUyBmcm9tICcuL2F0dHJzLmpzJztcbmltcG9ydCAqIGFzIEVYUFJFU1NJT05TIGZyb20gJy4vcmVnZXhwLmpzJztcbmltcG9ydCB7XG4gIGFkZFRvU2V0LFxuICBjbG9uZSxcbiAgZW50cmllcyxcbiAgZnJlZXplLFxuICBhcnJheUZvckVhY2gsXG4gIGFycmF5TGFzdEluZGV4T2YsXG4gIGFycmF5UG9wLFxuICBhcnJheVB1c2gsXG4gIGFycmF5U3BsaWNlLFxuICBzdHJpbmdNYXRjaCxcbiAgc3RyaW5nUmVwbGFjZSxcbiAgc3RyaW5nVG9Mb3dlckNhc2UsXG4gIHN0cmluZ1RvU3RyaW5nLFxuICBzdHJpbmdJbmRleE9mLFxuICBzdHJpbmdUcmltLFxuICByZWdFeHBUZXN0LFxuICB0eXBlRXJyb3JDcmVhdGUsXG4gIGxvb2t1cEdldHRlcixcbiAgY3JlYXRlLFxuICBvYmplY3RIYXNPd25Qcm9wZXJ0eSxcbn0gZnJvbSAnLi91dGlscy5qcyc7XG5cbmV4cG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuXG5kZWNsYXJlIGNvbnN0IFZFUlNJT046IHN0cmluZztcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGUvbm9kZVR5cGVcbmNvbnN0IE5PREVfVFlQRSA9IHtcbiAgZWxlbWVudDogMSxcbiAgYXR0cmlidXRlOiAyLFxuICB0ZXh0OiAzLFxuICBjZGF0YVNlY3Rpb246IDQsXG4gIGVudGl0eVJlZmVyZW5jZTogNSwgLy8gRGVwcmVjYXRlZFxuICBlbnRpdHlOb2RlOiA2LCAvLyBEZXByZWNhdGVkXG4gIHByb2dyZXNzaW5nSW5zdHJ1Y3Rpb246IDcsXG4gIGNvbW1lbnQ6IDgsXG4gIGRvY3VtZW50OiA5LFxuICBkb2N1bWVudFR5cGU6IDEwLFxuICBkb2N1bWVudEZyYWdtZW50OiAxMSxcbiAgbm90YXRpb246IDEyLCAvLyBEZXByZWNhdGVkXG59O1xuXG5jb25zdCBnZXRHbG9iYWwgPSBmdW5jdGlvbiAoKTogV2luZG93TGlrZSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiB3aW5kb3c7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuby1vcCBwb2xpY3kgZm9yIGludGVybmFsIHVzZSBvbmx5LlxuICogRG9uJ3QgZXhwb3J0IHRoaXMgZnVuY3Rpb24gb3V0c2lkZSB0aGlzIG1vZHVsZSFcbiAqIEBwYXJhbSB0cnVzdGVkVHlwZXMgVGhlIHBvbGljeSBmYWN0b3J5LlxuICogQHBhcmFtIHB1cmlmeUhvc3RFbGVtZW50IFRoZSBTY3JpcHQgZWxlbWVudCB1c2VkIHRvIGxvYWQgRE9NUHVyaWZ5ICh0byBkZXRlcm1pbmUgcG9saWN5IG5hbWUgc3VmZml4KS5cbiAqIEByZXR1cm4gVGhlIHBvbGljeSBjcmVhdGVkIChvciBudWxsLCBpZiBUcnVzdGVkIFR5cGVzXG4gKiBhcmUgbm90IHN1cHBvcnRlZCBvciBjcmVhdGluZyB0aGUgcG9saWN5IGZhaWxlZCkuXG4gKi9cbmNvbnN0IF9jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3kgPSBmdW5jdGlvbiAoXG4gIHRydXN0ZWRUeXBlczogVHJ1c3RlZFR5cGVQb2xpY3lGYWN0b3J5LFxuICBwdXJpZnlIb3N0RWxlbWVudDogSFRNTFNjcmlwdEVsZW1lbnRcbikge1xuICBpZiAoXG4gICAgdHlwZW9mIHRydXN0ZWRUeXBlcyAhPT0gJ29iamVjdCcgfHxcbiAgICB0eXBlb2YgdHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFsbG93IHRoZSBjYWxsZXJzIHRvIGNvbnRyb2wgdGhlIHVuaXF1ZSBwb2xpY3kgbmFtZVxuICAvLyBieSBhZGRpbmcgYSBkYXRhLXR0LXBvbGljeS1zdWZmaXggdG8gdGhlIHNjcmlwdCBlbGVtZW50IHdpdGggdGhlIERPTVB1cmlmeS5cbiAgLy8gUG9saWN5IGNyZWF0aW9uIHdpdGggZHVwbGljYXRlIG5hbWVzIHRocm93cyBpbiBUcnVzdGVkIFR5cGVzLlxuICBsZXQgc3VmZml4ID0gbnVsbDtcbiAgY29uc3QgQVRUUl9OQU1FID0gJ2RhdGEtdHQtcG9saWN5LXN1ZmZpeCc7XG4gIGlmIChwdXJpZnlIb3N0RWxlbWVudCAmJiBwdXJpZnlIb3N0RWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUl9OQU1FKSkge1xuICAgIHN1ZmZpeCA9IHB1cmlmeUhvc3RFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSX05BTUUpO1xuICB9XG5cbiAgY29uc3QgcG9saWN5TmFtZSA9ICdkb21wdXJpZnknICsgKHN1ZmZpeCA/ICcjJyArIHN1ZmZpeCA6ICcnKTtcblxuICB0cnkge1xuICAgIHJldHVybiB0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KHBvbGljeU5hbWUsIHtcbiAgICAgIGNyZWF0ZUhUTUwoaHRtbCkge1xuICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgIH0sXG4gICAgICBjcmVhdGVTY3JpcHRVUkwoc2NyaXB0VXJsKSB7XG4gICAgICAgIHJldHVybiBzY3JpcHRVcmw7XG4gICAgICB9LFxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7XG4gICAgLy8gUG9saWN5IGNyZWF0aW9uIGZhaWxlZCAobW9zdCBsaWtlbHkgYW5vdGhlciBET01QdXJpZnkgc2NyaXB0IGhhc1xuICAgIC8vIGFscmVhZHkgcnVuKS4gU2tpcCBjcmVhdGluZyB0aGUgcG9saWN5LCBhcyB0aGlzIHdpbGwgb25seSBjYXVzZSBlcnJvcnNcbiAgICAvLyBpZiBUVCBhcmUgZW5mb3JjZWQuXG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1RydXN0ZWRUeXBlcyBwb2xpY3kgJyArIHBvbGljeU5hbWUgKyAnIGNvdWxkIG5vdCBiZSBjcmVhdGVkLidcbiAgICApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5jb25zdCBfY3JlYXRlSG9va3NNYXAgPSBmdW5jdGlvbiAoKTogSG9va3NNYXAge1xuICByZXR1cm4ge1xuICAgIGFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzOiBbXSxcbiAgICBhZnRlclNhbml0aXplRWxlbWVudHM6IFtdLFxuICAgIGFmdGVyU2FuaXRpemVTaGFkb3dET006IFtdLFxuICAgIGJlZm9yZVNhbml0aXplQXR0cmlidXRlczogW10sXG4gICAgYmVmb3JlU2FuaXRpemVFbGVtZW50czogW10sXG4gICAgYmVmb3JlU2FuaXRpemVTaGFkb3dET006IFtdLFxuICAgIHVwb25TYW5pdGl6ZUF0dHJpYnV0ZTogW10sXG4gICAgdXBvblNhbml0aXplRWxlbWVudDogW10sXG4gICAgdXBvblNhbml0aXplU2hhZG93Tm9kZTogW10sXG4gIH07XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVET01QdXJpZnkod2luZG93OiBXaW5kb3dMaWtlID0gZ2V0R2xvYmFsKCkpOiBET01QdXJpZnkge1xuICBjb25zdCBET01QdXJpZnk6IERPTVB1cmlmeSA9IChyb290OiBXaW5kb3dMaWtlKSA9PiBjcmVhdGVET01QdXJpZnkocm9vdCk7XG5cbiAgRE9NUHVyaWZ5LnZlcnNpb24gPSBWRVJTSU9OO1xuXG4gIERPTVB1cmlmeS5yZW1vdmVkID0gW107XG5cbiAgaWYgKFxuICAgICF3aW5kb3cgfHxcbiAgICAhd2luZG93LmRvY3VtZW50IHx8XG4gICAgd2luZG93LmRvY3VtZW50Lm5vZGVUeXBlICE9PSBOT0RFX1RZUEUuZG9jdW1lbnQgfHxcbiAgICAhd2luZG93LkVsZW1lbnRcbiAgKSB7XG4gICAgLy8gTm90IHJ1bm5pbmcgaW4gYSBicm93c2VyLCBwcm92aWRlIGEgZmFjdG9yeSBmdW5jdGlvblxuICAgIC8vIHNvIHRoYXQgeW91IGNhbiBwYXNzIHlvdXIgb3duIFdpbmRvd1xuICAgIERPTVB1cmlmeS5pc1N1cHBvcnRlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIERPTVB1cmlmeTtcbiAgfVxuXG4gIGxldCB7IGRvY3VtZW50IH0gPSB3aW5kb3c7XG5cbiAgY29uc3Qgb3JpZ2luYWxEb2N1bWVudCA9IGRvY3VtZW50O1xuICBjb25zdCBjdXJyZW50U2NyaXB0OiBIVE1MU2NyaXB0RWxlbWVudCA9XG4gICAgb3JpZ2luYWxEb2N1bWVudC5jdXJyZW50U2NyaXB0IGFzIEhUTUxTY3JpcHRFbGVtZW50O1xuICBjb25zdCB7XG4gICAgRG9jdW1lbnRGcmFnbWVudCxcbiAgICBIVE1MVGVtcGxhdGVFbGVtZW50LFxuICAgIE5vZGUsXG4gICAgRWxlbWVudCxcbiAgICBOb2RlRmlsdGVyLFxuICAgIE5hbWVkTm9kZU1hcCA9IHdpbmRvdy5OYW1lZE5vZGVNYXAgfHwgKHdpbmRvdyBhcyBhbnkpLk1vek5hbWVkQXR0ck1hcCxcbiAgICBIVE1MRm9ybUVsZW1lbnQsXG4gICAgRE9NUGFyc2VyLFxuICAgIHRydXN0ZWRUeXBlcyxcbiAgfSA9IHdpbmRvdztcblxuICBjb25zdCBFbGVtZW50UHJvdG90eXBlID0gRWxlbWVudC5wcm90b3R5cGU7XG5cbiAgY29uc3QgY2xvbmVOb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdjbG9uZU5vZGUnKTtcbiAgY29uc3QgcmVtb3ZlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdyZW1vdmUnKTtcbiAgY29uc3QgZ2V0TmV4dFNpYmxpbmcgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ25leHRTaWJsaW5nJyk7XG4gIGNvbnN0IGdldENoaWxkTm9kZXMgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ2NoaWxkTm9kZXMnKTtcbiAgY29uc3QgZ2V0UGFyZW50Tm9kZSA9IGxvb2t1cEdldHRlcihFbGVtZW50UHJvdG90eXBlLCAncGFyZW50Tm9kZScpO1xuXG4gIC8vIEFzIHBlciBpc3N1ZSAjNDcsIHRoZSB3ZWItY29tcG9uZW50cyByZWdpc3RyeSBpcyBpbmhlcml0ZWQgYnkgYVxuICAvLyBuZXcgZG9jdW1lbnQgY3JlYXRlZCB2aWEgY3JlYXRlSFRNTERvY3VtZW50LiBBcyBwZXIgdGhlIHNwZWNcbiAgLy8gKGh0dHA6Ly93M2MuZ2l0aHViLmlvL3dlYmNvbXBvbmVudHMvc3BlYy9jdXN0b20vI2NyZWF0aW5nLWFuZC1wYXNzaW5nLXJlZ2lzdHJpZXMpXG4gIC8vIGEgbmV3IGVtcHR5IHJlZ2lzdHJ5IGlzIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRlbXBsYXRlIGNvbnRlbnRzIG93bmVyXG4gIC8vIGRvY3VtZW50LCBzbyB3ZSB1c2UgdGhhdCBhcyBvdXIgcGFyZW50IGRvY3VtZW50IHRvIGVuc3VyZSBub3RoaW5nXG4gIC8vIGlzIGluaGVyaXRlZC5cbiAgaWYgKHR5cGVvZiBIVE1MVGVtcGxhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgIGlmICh0ZW1wbGF0ZS5jb250ZW50ICYmIHRlbXBsYXRlLmNvbnRlbnQub3duZXJEb2N1bWVudCkge1xuICAgICAgZG9jdW1lbnQgPSB0ZW1wbGF0ZS5jb250ZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgbGV0IHRydXN0ZWRUeXBlc1BvbGljeTtcbiAgbGV0IGVtcHR5SFRNTCA9ICcnO1xuXG4gIGNvbnN0IHtcbiAgICBpbXBsZW1lbnRhdGlvbixcbiAgICBjcmVhdGVOb2RlSXRlcmF0b3IsXG4gICAgY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxcbiAgICBnZXRFbGVtZW50c0J5VGFnTmFtZSxcbiAgfSA9IGRvY3VtZW50O1xuICBjb25zdCB7IGltcG9ydE5vZGUgfSA9IG9yaWdpbmFsRG9jdW1lbnQ7XG5cbiAgbGV0IGhvb2tzID0gX2NyZWF0ZUhvb2tzTWFwKCk7XG5cbiAgLyoqXG4gICAqIEV4cG9zZSB3aGV0aGVyIHRoaXMgYnJvd3NlciBzdXBwb3J0cyBydW5uaW5nIHRoZSBmdWxsIERPTVB1cmlmeS5cbiAgICovXG4gIERPTVB1cmlmeS5pc1N1cHBvcnRlZCA9XG4gICAgdHlwZW9mIGVudHJpZXMgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgZ2V0UGFyZW50Tm9kZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIGltcGxlbWVudGF0aW9uICYmXG4gICAgaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50ICE9PSB1bmRlZmluZWQ7XG5cbiAgY29uc3Qge1xuICAgIE1VU1RBQ0hFX0VYUFIsXG4gICAgRVJCX0VYUFIsXG4gICAgVE1QTElUX0VYUFIsXG4gICAgREFUQV9BVFRSLFxuICAgIEFSSUFfQVRUUixcbiAgICBJU19TQ1JJUFRfT1JfREFUQSxcbiAgICBBVFRSX1dISVRFU1BBQ0UsXG4gICAgQ1VTVE9NX0VMRU1FTlQsXG4gIH0gPSBFWFBSRVNTSU9OUztcblxuICBsZXQgeyBJU19BTExPV0VEX1VSSSB9ID0gRVhQUkVTU0lPTlM7XG5cbiAgLyoqXG4gICAqIFdlIGNvbnNpZGVyIHRoZSBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyBiZWxvdyB0byBiZSBzYWZlLiBJZGVhbGx5XG4gICAqIGRvbid0IGFkZCBhbnkgbmV3IG9uZXMgYnV0IGZlZWwgZnJlZSB0byByZW1vdmUgdW53YW50ZWQgb25lcy5cbiAgICovXG5cbiAgLyogYWxsb3dlZCBlbGVtZW50IG5hbWVzICovXG4gIGxldCBBTExPV0VEX1RBR1MgPSBudWxsO1xuICBjb25zdCBERUZBVUxUX0FMTE9XRURfVEFHUyA9IGFkZFRvU2V0KHt9LCBbXG4gICAgLi4uVEFHUy5odG1sLFxuICAgIC4uLlRBR1Muc3ZnLFxuICAgIC4uLlRBR1Muc3ZnRmlsdGVycyxcbiAgICAuLi5UQUdTLm1hdGhNbCxcbiAgICAuLi5UQUdTLnRleHQsXG4gIF0pO1xuXG4gIC8qIEFsbG93ZWQgYXR0cmlidXRlIG5hbWVzICovXG4gIGxldCBBTExPV0VEX0FUVFIgPSBudWxsO1xuICBjb25zdCBERUZBVUxUX0FMTE9XRURfQVRUUiA9IGFkZFRvU2V0KHt9LCBbXG4gICAgLi4uQVRUUlMuaHRtbCxcbiAgICAuLi5BVFRSUy5zdmcsXG4gICAgLi4uQVRUUlMubWF0aE1sLFxuICAgIC4uLkFUVFJTLnhtbCxcbiAgXSk7XG5cbiAgLypcbiAgICogQ29uZmlndXJlIGhvdyBET01QdXJpZnkgc2hvdWxkIGhhbmRsZSBjdXN0b20gZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyBjdXN0b21pemVkIGJ1aWx0LWluIGVsZW1lbnRzLlxuICAgKiBAcHJvcGVydHkge1JlZ0V4cHxGdW5jdGlvbnxudWxsfSB0YWdOYW1lQ2hlY2sgb25lIG9mIFtudWxsLCByZWdleFBhdHRlcm4sIHByZWRpY2F0ZV0uIERlZmF1bHQ6IGBudWxsYCAoZGlzYWxsb3cgYW55IGN1c3RvbSBlbGVtZW50cylcbiAgICogQHByb3BlcnR5IHtSZWdFeHB8RnVuY3Rpb258bnVsbH0gYXR0cmlidXRlTmFtZUNoZWNrIG9uZSBvZiBbbnVsbCwgcmVnZXhQYXR0ZXJuLCBwcmVkaWNhdGVdLiBEZWZhdWx0OiBgbnVsbGAgKGRpc2FsbG93IGFueSBhdHRyaWJ1dGVzIG5vdCBvbiB0aGUgYWxsb3cgbGlzdClcbiAgICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgYWxsb3cgY3VzdG9tIGVsZW1lbnRzIGRlcml2ZWQgZnJvbSBidWlsdC1pbnMgaWYgdGhleSBwYXNzIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjay4gRGVmYXVsdDogYGZhbHNlYC5cbiAgICovXG4gIGxldCBDVVNUT01fRUxFTUVOVF9IQU5ETElORyA9IE9iamVjdC5zZWFsKFxuICAgIGNyZWF0ZShudWxsLCB7XG4gICAgICB0YWdOYW1lQ2hlY2s6IHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZU5hbWVDaGVjazoge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB9LFxuICAgICAgYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOiB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pXG4gICk7XG5cbiAgLyogRXhwbGljaXRseSBmb3JiaWRkZW4gdGFncyAob3ZlcnJpZGVzIEFMTE9XRURfVEFHUy9BRERfVEFHUykgKi9cbiAgbGV0IEZPUkJJRF9UQUdTID0gbnVsbDtcblxuICAvKiBFeHBsaWNpdGx5IGZvcmJpZGRlbiBhdHRyaWJ1dGVzIChvdmVycmlkZXMgQUxMT1dFRF9BVFRSL0FERF9BVFRSKSAqL1xuICBsZXQgRk9SQklEX0FUVFIgPSBudWxsO1xuXG4gIC8qIENvbmZpZyBvYmplY3QgdG8gc3RvcmUgQUREX1RBR1MvQUREX0FUVFIgZnVuY3Rpb25zICh3aGVuIHVzZWQgYXMgZnVuY3Rpb25zKSAqL1xuICBjb25zdCBFWFRSQV9FTEVNRU5UX0hBTkRMSU5HID0gT2JqZWN0LnNlYWwoXG4gICAgY3JlYXRlKG51bGwsIHtcbiAgICAgIHRhZ0NoZWNrOiB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVDaGVjazoge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB9LFxuICAgIH0pXG4gICk7XG5cbiAgLyogRGVjaWRlIGlmIEFSSUEgYXR0cmlidXRlcyBhcmUgb2theSAqL1xuICBsZXQgQUxMT1dfQVJJQV9BVFRSID0gdHJ1ZTtcblxuICAvKiBEZWNpZGUgaWYgY3VzdG9tIGRhdGEgYXR0cmlidXRlcyBhcmUgb2theSAqL1xuICBsZXQgQUxMT1dfREFUQV9BVFRSID0gdHJ1ZTtcblxuICAvKiBEZWNpZGUgaWYgdW5rbm93biBwcm90b2NvbHMgYXJlIG9rYXkgKi9cbiAgbGV0IEFMTE9XX1VOS05PV05fUFJPVE9DT0xTID0gZmFsc2U7XG5cbiAgLyogRGVjaWRlIGlmIHNlbGYtY2xvc2luZyB0YWdzIGluIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQuXG4gICAqIFVzdWFsbHkgcmVtb3ZlZCBkdWUgdG8gYSBtWFNTIGlzc3VlIGluIGpRdWVyeSAzLjAgKi9cbiAgbGV0IEFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiA9IHRydWU7XG5cbiAgLyogT3V0cHV0IHNob3VsZCBiZSBzYWZlIGZvciBjb21tb24gdGVtcGxhdGUgZW5naW5lcy5cbiAgICogVGhpcyBtZWFucywgRE9NUHVyaWZ5IHJlbW92ZXMgZGF0YSBhdHRyaWJ1dGVzLCBtdXN0YWNoZXMgYW5kIEVSQlxuICAgKi9cbiAgbGV0IFNBRkVfRk9SX1RFTVBMQVRFUyA9IGZhbHNlO1xuXG4gIC8qIE91dHB1dCBzaG91bGQgYmUgc2FmZSBldmVuIGZvciBYTUwgdXNlZCB3aXRoaW4gSFRNTCBhbmQgYWxpa2UuXG4gICAqIFRoaXMgbWVhbnMsIERPTVB1cmlmeSByZW1vdmVzIGNvbW1lbnRzIHdoZW4gY29udGFpbmluZyByaXNreSBjb250ZW50LlxuICAgKi9cbiAgbGV0IFNBRkVfRk9SX1hNTCA9IHRydWU7XG5cbiAgLyogRGVjaWRlIGlmIGRvY3VtZW50IHdpdGggPGh0bWw+Li4uIHNob3VsZCBiZSByZXR1cm5lZCAqL1xuICBsZXQgV0hPTEVfRE9DVU1FTlQgPSBmYWxzZTtcblxuICAvKiBUcmFjayB3aGV0aGVyIGNvbmZpZyBpcyBhbHJlYWR5IHNldCBvbiB0aGlzIGluc3RhbmNlIG9mIERPTVB1cmlmeS4gKi9cbiAgbGV0IFNFVF9DT05GSUcgPSBmYWxzZTtcblxuICAvKiBEZWNpZGUgaWYgYWxsIGVsZW1lbnRzIChlLmcuIHN0eWxlLCBzY3JpcHQpIG11c3QgYmUgY2hpbGRyZW4gb2ZcbiAgICogZG9jdW1lbnQuYm9keS4gQnkgZGVmYXVsdCwgYnJvd3NlcnMgbWlnaHQgbW92ZSB0aGVtIHRvIGRvY3VtZW50LmhlYWQgKi9cbiAgbGV0IEZPUkNFX0JPRFkgPSBmYWxzZTtcblxuICAvKiBEZWNpZGUgaWYgYSBET00gYEhUTUxCb2R5RWxlbWVudGAgc2hvdWxkIGJlIHJldHVybmVkLCBpbnN0ZWFkIG9mIGEgaHRtbFxuICAgKiBzdHJpbmcgKG9yIGEgVHJ1c3RlZEhUTUwgb2JqZWN0IGlmIFRydXN0ZWQgVHlwZXMgYXJlIHN1cHBvcnRlZCkuXG4gICAqIElmIGBXSE9MRV9ET0NVTUVOVGAgaXMgZW5hYmxlZCBhIGBIVE1MSHRtbEVsZW1lbnRgIHdpbGwgYmUgcmV0dXJuZWQgaW5zdGVhZFxuICAgKi9cbiAgbGV0IFJFVFVSTl9ET00gPSBmYWxzZTtcblxuICAvKiBEZWNpZGUgaWYgYSBET00gYERvY3VtZW50RnJhZ21lbnRgIHNob3VsZCBiZSByZXR1cm5lZCwgaW5zdGVhZCBvZiBhIGh0bWxcbiAgICogc3RyaW5nICAob3IgYSBUcnVzdGVkSFRNTCBvYmplY3QgaWYgVHJ1c3RlZCBUeXBlcyBhcmUgc3VwcG9ydGVkKSAqL1xuICBsZXQgUkVUVVJOX0RPTV9GUkFHTUVOVCA9IGZhbHNlO1xuXG4gIC8qIFRyeSB0byByZXR1cm4gYSBUcnVzdGVkIFR5cGUgb2JqZWN0IGluc3RlYWQgb2YgYSBzdHJpbmcsIHJldHVybiBhIHN0cmluZyBpblxuICAgKiBjYXNlIFRydXN0ZWQgVHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgICovXG4gIGxldCBSRVRVUk5fVFJVU1RFRF9UWVBFID0gZmFsc2U7XG5cbiAgLyogT3V0cHV0IHNob3VsZCBiZSBmcmVlIGZyb20gRE9NIGNsb2JiZXJpbmcgYXR0YWNrcz9cbiAgICogVGhpcyBzYW5pdGl6ZXMgbWFya3VwcyBuYW1lZCB3aXRoIGNvbGxpZGluZywgY2xvYmJlcmFibGUgYnVpbHQtaW4gRE9NIEFQSXMuXG4gICAqL1xuICBsZXQgU0FOSVRJWkVfRE9NID0gdHJ1ZTtcblxuICAvKiBBY2hpZXZlIGZ1bGwgRE9NIENsb2JiZXJpbmcgcHJvdGVjdGlvbiBieSBpc29sYXRpbmcgdGhlIG5hbWVzcGFjZSBvZiBuYW1lZFxuICAgKiBwcm9wZXJ0aWVzIGFuZCBKUyB2YXJpYWJsZXMsIG1pdGlnYXRpbmcgYXR0YWNrcyB0aGF0IGFidXNlIHRoZSBIVE1ML0RPTSBzcGVjIHJ1bGVzLlxuICAgKlxuICAgKiBIVE1ML0RPTSBzcGVjIHJ1bGVzIHRoYXQgZW5hYmxlIERPTSBDbG9iYmVyaW5nOlxuICAgKiAgIC0gTmFtZWQgQWNjZXNzIG9uIFdpbmRvdyAowqc3LjMuMylcbiAgICogICAtIERPTSBUcmVlIEFjY2Vzc29ycyAowqczLjEuNSlcbiAgICogICAtIEZvcm0gRWxlbWVudCBQYXJlbnQtQ2hpbGQgUmVsYXRpb25zICjCpzQuMTAuMylcbiAgICogICAtIElmcmFtZSBzcmNkb2MgLyBOZXN0ZWQgV2luZG93UHJveGllcyAowqc0LjguNSlcbiAgICogICAtIEhUTUxDb2xsZWN0aW9uICjCpzQuMi4xMC4yKVxuICAgKlxuICAgKiBOYW1lc3BhY2UgaXNvbGF0aW9uIGlzIGltcGxlbWVudGVkIGJ5IHByZWZpeGluZyBgaWRgIGFuZCBgbmFtZWAgYXR0cmlidXRlc1xuICAgKiB3aXRoIGEgY29uc3RhbnQgc3RyaW5nLCBpLmUuLCBgdXNlci1jb250ZW50LWBcbiAgICovXG4gIGxldCBTQU5JVElaRV9OQU1FRF9QUk9QUyA9IGZhbHNlO1xuICBjb25zdCBTQU5JVElaRV9OQU1FRF9QUk9QU19QUkVGSVggPSAndXNlci1jb250ZW50LSc7XG5cbiAgLyogS2VlcCBlbGVtZW50IGNvbnRlbnQgd2hlbiByZW1vdmluZyBlbGVtZW50PyAqL1xuICBsZXQgS0VFUF9DT05URU5UID0gdHJ1ZTtcblxuICAvKiBJZiBhIGBOb2RlYCBpcyBwYXNzZWQgdG8gc2FuaXRpemUoKSwgdGhlbiBwZXJmb3JtcyBzYW5pdGl6YXRpb24gaW4tcGxhY2UgaW5zdGVhZFxuICAgKiBvZiBpbXBvcnRpbmcgaXQgaW50byBhIG5ldyBEb2N1bWVudCBhbmQgcmV0dXJuaW5nIGEgc2FuaXRpemVkIGNvcHkgKi9cbiAgbGV0IElOX1BMQUNFID0gZmFsc2U7XG5cbiAgLyogQWxsb3cgdXNhZ2Ugb2YgcHJvZmlsZXMgbGlrZSBodG1sLCBzdmcgYW5kIG1hdGhNbCAqL1xuICBsZXQgVVNFX1BST0ZJTEVTOiBVc2VQcm9maWxlc0NvbmZpZyB8IGZhbHNlID0ge307XG5cbiAgLyogVGFncyB0byBpZ25vcmUgY29udGVudCBvZiB3aGVuIEtFRVBfQ09OVEVOVCBpcyB0cnVlICovXG4gIGxldCBGT1JCSURfQ09OVEVOVFMgPSBudWxsO1xuICBjb25zdCBERUZBVUxUX0ZPUkJJRF9DT05URU5UUyA9IGFkZFRvU2V0KHt9LCBbXG4gICAgJ2Fubm90YXRpb24teG1sJyxcbiAgICAnYXVkaW8nLFxuICAgICdjb2xncm91cCcsXG4gICAgJ2Rlc2MnLFxuICAgICdmb3JlaWdub2JqZWN0JyxcbiAgICAnaGVhZCcsXG4gICAgJ2lmcmFtZScsXG4gICAgJ21hdGgnLFxuICAgICdtaScsXG4gICAgJ21uJyxcbiAgICAnbW8nLFxuICAgICdtcycsXG4gICAgJ210ZXh0JyxcbiAgICAnbm9lbWJlZCcsXG4gICAgJ25vZnJhbWVzJyxcbiAgICAnbm9zY3JpcHQnLFxuICAgICdwbGFpbnRleHQnLFxuICAgICdzY3JpcHQnLFxuICAgICdzdHlsZScsXG4gICAgJ3N2ZycsXG4gICAgJ3RlbXBsYXRlJyxcbiAgICAndGhlYWQnLFxuICAgICd0aXRsZScsXG4gICAgJ3ZpZGVvJyxcbiAgICAneG1wJyxcbiAgXSk7XG5cbiAgLyogVGFncyB0aGF0IGFyZSBzYWZlIGZvciBkYXRhOiBVUklzICovXG4gIGxldCBEQVRBX1VSSV9UQUdTID0gbnVsbDtcbiAgY29uc3QgREVGQVVMVF9EQVRBX1VSSV9UQUdTID0gYWRkVG9TZXQoe30sIFtcbiAgICAnYXVkaW8nLFxuICAgICd2aWRlbycsXG4gICAgJ2ltZycsXG4gICAgJ3NvdXJjZScsXG4gICAgJ2ltYWdlJyxcbiAgICAndHJhY2snLFxuICBdKTtcblxuICAvKiBBdHRyaWJ1dGVzIHNhZmUgZm9yIHZhbHVlcyBsaWtlIFwiamF2YXNjcmlwdDpcIiAqL1xuICBsZXQgVVJJX1NBRkVfQVRUUklCVVRFUyA9IG51bGw7XG4gIGNvbnN0IERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyA9IGFkZFRvU2V0KHt9LCBbXG4gICAgJ2FsdCcsXG4gICAgJ2NsYXNzJyxcbiAgICAnZm9yJyxcbiAgICAnaWQnLFxuICAgICdsYWJlbCcsXG4gICAgJ25hbWUnLFxuICAgICdwYXR0ZXJuJyxcbiAgICAncGxhY2Vob2xkZXInLFxuICAgICdyb2xlJyxcbiAgICAnc3VtbWFyeScsXG4gICAgJ3RpdGxlJyxcbiAgICAndmFsdWUnLFxuICAgICdzdHlsZScsXG4gICAgJ3htbG5zJyxcbiAgXSk7XG5cbiAgY29uc3QgTUFUSE1MX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJztcbiAgY29uc3QgU1ZHX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG4gIGNvbnN0IEhUTUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnO1xuICAvKiBEb2N1bWVudCBuYW1lc3BhY2UgKi9cbiAgbGV0IE5BTUVTUEFDRSA9IEhUTUxfTkFNRVNQQUNFO1xuICBsZXQgSVNfRU1QVFlfSU5QVVQgPSBmYWxzZTtcblxuICAvKiBBbGxvd2VkIFhIVE1MK1hNTCBuYW1lc3BhY2VzICovXG4gIGxldCBBTExPV0VEX05BTUVTUEFDRVMgPSBudWxsO1xuICBjb25zdCBERUZBVUxUX0FMTE9XRURfTkFNRVNQQUNFUyA9IGFkZFRvU2V0KFxuICAgIHt9LFxuICAgIFtNQVRITUxfTkFNRVNQQUNFLCBTVkdfTkFNRVNQQUNFLCBIVE1MX05BTUVTUEFDRV0sXG4gICAgc3RyaW5nVG9TdHJpbmdcbiAgKTtcblxuICBsZXQgTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTID0gYWRkVG9TZXQoe30sIFtcbiAgICAnbWknLFxuICAgICdtbycsXG4gICAgJ21uJyxcbiAgICAnbXMnLFxuICAgICdtdGV4dCcsXG4gIF0pO1xuXG4gIGxldCBIVE1MX0lOVEVHUkFUSU9OX1BPSU5UUyA9IGFkZFRvU2V0KHt9LCBbJ2Fubm90YXRpb24teG1sJ10pO1xuXG4gIC8vIENlcnRhaW4gZWxlbWVudHMgYXJlIGFsbG93ZWQgaW4gYm90aCBTVkcgYW5kIEhUTUxcbiAgLy8gbmFtZXNwYWNlLiBXZSBuZWVkIHRvIHNwZWNpZnkgdGhlbSBleHBsaWNpdGx5XG4gIC8vIHNvIHRoYXQgdGhleSBkb24ndCBnZXQgZXJyb25lb3VzbHkgZGVsZXRlZCBmcm9tXG4gIC8vIEhUTUwgbmFtZXNwYWNlLlxuICBjb25zdCBDT01NT05fU1ZHX0FORF9IVE1MX0VMRU1FTlRTID0gYWRkVG9TZXQoe30sIFtcbiAgICAndGl0bGUnLFxuICAgICdzdHlsZScsXG4gICAgJ2ZvbnQnLFxuICAgICdhJyxcbiAgICAnc2NyaXB0JyxcbiAgXSk7XG5cbiAgLyogUGFyc2luZyBvZiBzdHJpY3QgWEhUTUwgZG9jdW1lbnRzICovXG4gIGxldCBQQVJTRVJfTUVESUFfVFlQRTogbnVsbCB8IERPTVBhcnNlclN1cHBvcnRlZFR5cGUgPSBudWxsO1xuICBjb25zdCBTVVBQT1JURURfUEFSU0VSX01FRElBX1RZUEVTID0gWydhcHBsaWNhdGlvbi94aHRtbCt4bWwnLCAndGV4dC9odG1sJ107XG4gIGNvbnN0IERFRkFVTFRfUEFSU0VSX01FRElBX1RZUEUgPSAndGV4dC9odG1sJztcbiAgbGV0IHRyYW5zZm9ybUNhc2VGdW5jOiBudWxsIHwgUGFyYW1ldGVyczx0eXBlb2YgYWRkVG9TZXQ+WzJdID0gbnVsbDtcblxuICAvKiBLZWVwIGEgcmVmZXJlbmNlIHRvIGNvbmZpZyB0byBwYXNzIHRvIGhvb2tzICovXG4gIGxldCBDT05GSUc6IENvbmZpZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qIElkZWFsbHksIGRvIG5vdCB0b3VjaCBhbnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgKi9cbiAgLyogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAqL1xuXG4gIGNvbnN0IGZvcm1FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xuXG4gIGNvbnN0IGlzUmVnZXhPckZ1bmN0aW9uID0gZnVuY3Rpb24gKFxuICAgIHRlc3RWYWx1ZTogdW5rbm93blxuICApOiB0ZXN0VmFsdWUgaXMgRnVuY3Rpb24gfCBSZWdFeHAge1xuICAgIHJldHVybiB0ZXN0VmFsdWUgaW5zdGFuY2VvZiBSZWdFeHAgfHwgdGVzdFZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb247XG4gIH07XG5cbiAgLyoqXG4gICAqIF9wYXJzZUNvbmZpZ1xuICAgKlxuICAgKiBAcGFyYW0gY2ZnIG9wdGlvbmFsIGNvbmZpZyBsaXRlcmFsXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICBjb25zdCBfcGFyc2VDb25maWcgPSBmdW5jdGlvbiAoY2ZnOiBDb25maWcgPSB7fSk6IHZvaWQge1xuICAgIGlmIChDT05GSUcgJiYgQ09ORklHID09PSBjZmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKiBTaGllbGQgY29uZmlndXJhdGlvbiBvYmplY3QgZnJvbSB0YW1wZXJpbmcgKi9cbiAgICBpZiAoIWNmZyB8fCB0eXBlb2YgY2ZnICE9PSAnb2JqZWN0Jykge1xuICAgICAgY2ZnID0ge307XG4gICAgfVxuXG4gICAgLyogU2hpZWxkIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZyb20gcHJvdG90eXBlIHBvbGx1dGlvbiAqL1xuICAgIGNmZyA9IGNsb25lKGNmZyk7XG5cbiAgICBQQVJTRVJfTUVESUFfVFlQRSA9XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItaW5jbHVkZXNcbiAgICAgIFNVUFBPUlRFRF9QQVJTRVJfTUVESUFfVFlQRVMuaW5kZXhPZihjZmcuUEFSU0VSX01FRElBX1RZUEUpID09PSAtMVxuICAgICAgICA/IERFRkFVTFRfUEFSU0VSX01FRElBX1RZUEVcbiAgICAgICAgOiBjZmcuUEFSU0VSX01FRElBX1RZUEU7XG5cbiAgICAvLyBIVE1MIHRhZ3MgYW5kIGF0dHJpYnV0ZXMgYXJlIG5vdCBjYXNlLXNlbnNpdGl2ZSwgY29udmVydGluZyB0byBsb3dlcmNhc2UuIEtlZXBpbmcgWEhUTUwgYXMgaXMuXG4gICAgdHJhbnNmb3JtQ2FzZUZ1bmMgPVxuICAgICAgUEFSU0VSX01FRElBX1RZUEUgPT09ICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnXG4gICAgICAgID8gc3RyaW5nVG9TdHJpbmdcbiAgICAgICAgOiBzdHJpbmdUb0xvd2VyQ2FzZTtcblxuICAgIC8qIFNldCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi9cbiAgICBBTExPV0VEX1RBR1MgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdBTExPV0VEX1RBR1MnKVxuICAgICAgPyBhZGRUb1NldCh7fSwgY2ZnLkFMTE9XRURfVEFHUywgdHJhbnNmb3JtQ2FzZUZ1bmMpXG4gICAgICA6IERFRkFVTFRfQUxMT1dFRF9UQUdTO1xuICAgIEFMTE9XRURfQVRUUiA9IG9iamVjdEhhc093blByb3BlcnR5KGNmZywgJ0FMTE9XRURfQVRUUicpXG4gICAgICA/IGFkZFRvU2V0KHt9LCBjZmcuQUxMT1dFRF9BVFRSLCB0cmFuc2Zvcm1DYXNlRnVuYylcbiAgICAgIDogREVGQVVMVF9BTExPV0VEX0FUVFI7XG4gICAgQUxMT1dFRF9OQU1FU1BBQ0VTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnQUxMT1dFRF9OQU1FU1BBQ0VTJylcbiAgICAgID8gYWRkVG9TZXQoe30sIGNmZy5BTExPV0VEX05BTUVTUEFDRVMsIHN0cmluZ1RvU3RyaW5nKVxuICAgICAgOiBERUZBVUxUX0FMTE9XRURfTkFNRVNQQUNFUztcbiAgICBVUklfU0FGRV9BVFRSSUJVVEVTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnQUREX1VSSV9TQUZFX0FUVFInKVxuICAgICAgPyBhZGRUb1NldChcbiAgICAgICAgICBjbG9uZShERUZBVUxUX1VSSV9TQUZFX0FUVFJJQlVURVMpLFxuICAgICAgICAgIGNmZy5BRERfVVJJX1NBRkVfQVRUUixcbiAgICAgICAgICB0cmFuc2Zvcm1DYXNlRnVuY1xuICAgICAgICApXG4gICAgICA6IERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUztcbiAgICBEQVRBX1VSSV9UQUdTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnQUREX0RBVEFfVVJJX1RBR1MnKVxuICAgICAgPyBhZGRUb1NldChcbiAgICAgICAgICBjbG9uZShERUZBVUxUX0RBVEFfVVJJX1RBR1MpLFxuICAgICAgICAgIGNmZy5BRERfREFUQV9VUklfVEFHUyxcbiAgICAgICAgICB0cmFuc2Zvcm1DYXNlRnVuY1xuICAgICAgICApXG4gICAgICA6IERFRkFVTFRfREFUQV9VUklfVEFHUztcbiAgICBGT1JCSURfQ09OVEVOVFMgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdGT1JCSURfQ09OVEVOVFMnKVxuICAgICAgPyBhZGRUb1NldCh7fSwgY2ZnLkZPUkJJRF9DT05URU5UUywgdHJhbnNmb3JtQ2FzZUZ1bmMpXG4gICAgICA6IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTO1xuICAgIEZPUkJJRF9UQUdTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnRk9SQklEX1RBR1MnKVxuICAgICAgPyBhZGRUb1NldCh7fSwgY2ZnLkZPUkJJRF9UQUdTLCB0cmFuc2Zvcm1DYXNlRnVuYylcbiAgICAgIDogY2xvbmUoe30pO1xuICAgIEZPUkJJRF9BVFRSID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnRk9SQklEX0FUVFInKVxuICAgICAgPyBhZGRUb1NldCh7fSwgY2ZnLkZPUkJJRF9BVFRSLCB0cmFuc2Zvcm1DYXNlRnVuYylcbiAgICAgIDogY2xvbmUoe30pO1xuICAgIFVTRV9QUk9GSUxFUyA9IG9iamVjdEhhc093blByb3BlcnR5KGNmZywgJ1VTRV9QUk9GSUxFUycpXG4gICAgICA/IGNmZy5VU0VfUFJPRklMRVNcbiAgICAgIDogZmFsc2U7XG4gICAgQUxMT1dfQVJJQV9BVFRSID0gY2ZnLkFMTE9XX0FSSUFfQVRUUiAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgIEFMTE9XX0RBVEFfQVRUUiA9IGNmZy5BTExPV19EQVRBX0FUVFIgIT09IGZhbHNlOyAvLyBEZWZhdWx0IHRydWVcbiAgICBBTExPV19VTktOT1dOX1BST1RPQ09MUyA9IGNmZy5BTExPV19VTktOT1dOX1BST1RPQ09MUyB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuICAgIEFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiA9IGNmZy5BTExPV19TRUxGX0NMT1NFX0lOX0FUVFIgIT09IGZhbHNlOyAvLyBEZWZhdWx0IHRydWVcbiAgICBTQUZFX0ZPUl9URU1QTEFURVMgPSBjZmcuU0FGRV9GT1JfVEVNUExBVEVTIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgU0FGRV9GT1JfWE1MID0gY2ZnLlNBRkVfRk9SX1hNTCAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgIFdIT0xFX0RPQ1VNRU5UID0gY2ZnLldIT0xFX0RPQ1VNRU5UIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgUkVUVVJOX0RPTSA9IGNmZy5SRVRVUk5fRE9NIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgUkVUVVJOX0RPTV9GUkFHTUVOVCA9IGNmZy5SRVRVUk5fRE9NX0ZSQUdNRU5UIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgUkVUVVJOX1RSVVNURURfVFlQRSA9IGNmZy5SRVRVUk5fVFJVU1RFRF9UWVBFIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgRk9SQ0VfQk9EWSA9IGNmZy5GT1JDRV9CT0RZIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgU0FOSVRJWkVfRE9NID0gY2ZnLlNBTklUSVpFX0RPTSAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgIFNBTklUSVpFX05BTUVEX1BST1BTID0gY2ZnLlNBTklUSVpFX05BTUVEX1BST1BTIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgS0VFUF9DT05URU5UID0gY2ZnLktFRVBfQ09OVEVOVCAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgIElOX1BMQUNFID0gY2ZnLklOX1BMQUNFIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgSVNfQUxMT1dFRF9VUkkgPSBjZmcuQUxMT1dFRF9VUklfUkVHRVhQIHx8IEVYUFJFU1NJT05TLklTX0FMTE9XRURfVVJJO1xuICAgIE5BTUVTUEFDRSA9IGNmZy5OQU1FU1BBQ0UgfHwgSFRNTF9OQU1FU1BBQ0U7XG4gICAgTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTID1cbiAgICAgIGNmZy5NQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFMgfHwgTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTO1xuICAgIEhUTUxfSU5URUdSQVRJT05fUE9JTlRTID1cbiAgICAgIGNmZy5IVE1MX0lOVEVHUkFUSU9OX1BPSU5UUyB8fCBIVE1MX0lOVEVHUkFUSU9OX1BPSU5UUztcblxuICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HIHx8IHt9O1xuICAgIGlmIChcbiAgICAgIGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORyAmJlxuICAgICAgaXNSZWdleE9yRnVuY3Rpb24oY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaylcbiAgICApIHtcbiAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayA9XG4gICAgICAgIGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2s7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HICYmXG4gICAgICBpc1JlZ2V4T3JGdW5jdGlvbihjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKVxuICAgICkge1xuICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrID1cbiAgICAgICAgY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaztcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiZcbiAgICAgIHR5cGVvZiBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzID09PVxuICAgICAgICAnYm9vbGVhbidcbiAgICApIHtcbiAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyA9XG4gICAgICAgIGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM7XG4gICAgfVxuXG4gICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgQUxMT1dfREFUQV9BVFRSID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgIFJFVFVSTl9ET00gPSB0cnVlO1xuICAgIH1cblxuICAgIC8qIFBhcnNlIHByb2ZpbGUgaW5mbyAqL1xuICAgIGlmIChVU0VfUFJPRklMRVMpIHtcbiAgICAgIEFMTE9XRURfVEFHUyA9IGFkZFRvU2V0KHt9LCBUQUdTLnRleHQpO1xuICAgICAgQUxMT1dFRF9BVFRSID0gY3JlYXRlKG51bGwpO1xuICAgICAgaWYgKFVTRV9QUk9GSUxFUy5odG1sID09PSB0cnVlKSB7XG4gICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgVEFHUy5odG1sKTtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBBVFRSUy5odG1sKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFVTRV9QUk9GSUxFUy5zdmcgPT09IHRydWUpIHtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBUQUdTLnN2Zyk7XG4gICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgQVRUUlMuc3ZnKTtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBBVFRSUy54bWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAoVVNFX1BST0ZJTEVTLnN2Z0ZpbHRlcnMgPT09IHRydWUpIHtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBUQUdTLnN2Z0ZpbHRlcnMpO1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIEFUVFJTLnN2Zyk7XG4gICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgQVRUUlMueG1sKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFVTRV9QUk9GSUxFUy5tYXRoTWwgPT09IHRydWUpIHtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBUQUdTLm1hdGhNbCk7XG4gICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgQVRUUlMubWF0aE1sKTtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBBVFRSUy54bWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIFByZXZlbnQgZnVuY3Rpb24tYmFzZWQgQUREX0FUVFIgLyBBRERfVEFHUyBmcm9tIGxlYWtpbmcgYWNyb3NzIGNhbGxzICovXG4gICAgaWYgKCFvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdBRERfVEFHUycpKSB7XG4gICAgICBFWFRSQV9FTEVNRU5UX0hBTkRMSU5HLnRhZ0NoZWNrID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIW9iamVjdEhhc093blByb3BlcnR5KGNmZywgJ0FERF9BVFRSJykpIHtcbiAgICAgIEVYVFJBX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlQ2hlY2sgPSBudWxsO1xuICAgIH1cblxuICAgIC8qIE1lcmdlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqL1xuICAgIGlmIChjZmcuQUREX1RBR1MpIHtcbiAgICAgIGlmICh0eXBlb2YgY2ZnLkFERF9UQUdTID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIEVYVFJBX0VMRU1FTlRfSEFORExJTkcudGFnQ2hlY2sgPSBjZmcuQUREX1RBR1M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoQUxMT1dFRF9UQUdTID09PSBERUZBVUxUX0FMTE9XRURfVEFHUykge1xuICAgICAgICAgIEFMTE9XRURfVEFHUyA9IGNsb25lKEFMTE9XRURfVEFHUyk7XG4gICAgICAgIH1cblxuICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIGNmZy5BRERfVEFHUywgdHJhbnNmb3JtQ2FzZUZ1bmMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjZmcuQUREX0FUVFIpIHtcbiAgICAgIGlmICh0eXBlb2YgY2ZnLkFERF9BVFRSID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIEVYVFJBX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlQ2hlY2sgPSBjZmcuQUREX0FUVFI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoQUxMT1dFRF9BVFRSID09PSBERUZBVUxUX0FMTE9XRURfQVRUUikge1xuICAgICAgICAgIEFMTE9XRURfQVRUUiA9IGNsb25lKEFMTE9XRURfQVRUUik7XG4gICAgICAgIH1cblxuICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIGNmZy5BRERfQVRUUiwgdHJhbnNmb3JtQ2FzZUZ1bmMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjZmcuQUREX1VSSV9TQUZFX0FUVFIpIHtcbiAgICAgIGFkZFRvU2V0KFVSSV9TQUZFX0FUVFJJQlVURVMsIGNmZy5BRERfVVJJX1NBRkVfQVRUUiwgdHJhbnNmb3JtQ2FzZUZ1bmMpO1xuICAgIH1cblxuICAgIGlmIChjZmcuRk9SQklEX0NPTlRFTlRTKSB7XG4gICAgICBpZiAoRk9SQklEX0NPTlRFTlRTID09PSBERUZBVUxUX0ZPUkJJRF9DT05URU5UUykge1xuICAgICAgICBGT1JCSURfQ09OVEVOVFMgPSBjbG9uZShGT1JCSURfQ09OVEVOVFMpO1xuICAgICAgfVxuXG4gICAgICBhZGRUb1NldChGT1JCSURfQ09OVEVOVFMsIGNmZy5GT1JCSURfQ09OVEVOVFMsIHRyYW5zZm9ybUNhc2VGdW5jKTtcbiAgICB9XG5cbiAgICBpZiAoY2ZnLkFERF9GT1JCSURfQ09OVEVOVFMpIHtcbiAgICAgIGlmIChGT1JCSURfQ09OVEVOVFMgPT09IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTKSB7XG4gICAgICAgIEZPUkJJRF9DT05URU5UUyA9IGNsb25lKEZPUkJJRF9DT05URU5UUyk7XG4gICAgICB9XG5cbiAgICAgIGFkZFRvU2V0KEZPUkJJRF9DT05URU5UUywgY2ZnLkFERF9GT1JCSURfQ09OVEVOVFMsIHRyYW5zZm9ybUNhc2VGdW5jKTtcbiAgICB9XG5cbiAgICAvKiBBZGQgI3RleHQgaW4gY2FzZSBLRUVQX0NPTlRFTlQgaXMgc2V0IHRvIHRydWUgKi9cbiAgICBpZiAoS0VFUF9DT05URU5UKSB7XG4gICAgICBBTExPV0VEX1RBR1NbJyN0ZXh0J10gPSB0cnVlO1xuICAgIH1cblxuICAgIC8qIEFkZCBodG1sLCBoZWFkIGFuZCBib2R5IHRvIEFMTE9XRURfVEFHUyBpbiBjYXNlIFdIT0xFX0RPQ1VNRU5UIGlzIHRydWUgKi9cbiAgICBpZiAoV0hPTEVfRE9DVU1FTlQpIHtcbiAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgWydodG1sJywgJ2hlYWQnLCAnYm9keSddKTtcbiAgICB9XG5cbiAgICAvKiBBZGQgdGJvZHkgdG8gQUxMT1dFRF9UQUdTIGluIGNhc2UgdGFibGVzIGFyZSBwZXJtaXR0ZWQsIHNlZSAjMjg2LCAjMzY1ICovXG4gICAgaWYgKEFMTE9XRURfVEFHUy50YWJsZSkge1xuICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBbJ3Rib2R5J10pO1xuICAgICAgZGVsZXRlIEZPUkJJRF9UQUdTLnRib2R5O1xuICAgIH1cblxuICAgIGlmIChjZmcuVFJVU1RFRF9UWVBFU19QT0xJQ1kpIHtcbiAgICAgIGlmICh0eXBlb2YgY2ZnLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZUhUTUwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKFxuICAgICAgICAgICdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSBcImNyZWF0ZUhUTUxcIiBob29rLidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBjZmcuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZShcbiAgICAgICAgICAnVFJVU1RFRF9UWVBFU19QT0xJQ1kgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBwcm92aWRlIGEgXCJjcmVhdGVTY3JpcHRVUkxcIiBob29rLidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3ZlcndyaXRlIGV4aXN0aW5nIFRydXN0ZWRUeXBlcyBwb2xpY3kuXG4gICAgICB0cnVzdGVkVHlwZXNQb2xpY3kgPSBjZmcuVFJVU1RFRF9UWVBFU19QT0xJQ1k7XG5cbiAgICAgIC8vIFNpZ24gbG9jYWwgdmFyaWFibGVzIHJlcXVpcmVkIGJ5IGBzYW5pdGl6ZWAuXG4gICAgICBlbXB0eUhUTUwgPSB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTCgnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVuaW5pdGlhbGl6ZWQgcG9saWN5LCBhdHRlbXB0IHRvIGluaXRpYWxpemUgdGhlIGludGVybmFsIGRvbXB1cmlmeSBwb2xpY3kuXG4gICAgICBpZiAodHJ1c3RlZFR5cGVzUG9saWN5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHJ1c3RlZFR5cGVzUG9saWN5ID0gX2NyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeShcbiAgICAgICAgICB0cnVzdGVkVHlwZXMsXG4gICAgICAgICAgY3VycmVudFNjcmlwdFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBjcmVhdGluZyB0aGUgaW50ZXJuYWwgcG9saWN5IHN1Y2NlZWRlZCBzaWduIGludGVybmFsIHZhcmlhYmxlcy5cbiAgICAgIGlmICh0cnVzdGVkVHlwZXNQb2xpY3kgIT09IG51bGwgJiYgdHlwZW9mIGVtcHR5SFRNTCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZW1wdHlIVE1MID0gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoJycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXZlbnQgZnVydGhlciBtYW5pcHVsYXRpb24gb2YgY29uZmlndXJhdGlvbi5cbiAgICAvLyBOb3QgYXZhaWxhYmxlIGluIElFOCwgU2FmYXJpIDUsIGV0Yy5cbiAgICBpZiAoZnJlZXplKSB7XG4gICAgICBmcmVlemUoY2ZnKTtcbiAgICB9XG5cbiAgICBDT05GSUcgPSBjZmc7XG4gIH07XG5cbiAgLyogS2VlcCB0cmFjayBvZiBhbGwgcG9zc2libGUgU1ZHIGFuZCBNYXRoTUwgdGFnc1xuICAgKiBzbyB0aGF0IHdlIGNhbiBwZXJmb3JtIHRoZSBuYW1lc3BhY2UgY2hlY2tzXG4gICAqIGNvcnJlY3RseS4gKi9cbiAgY29uc3QgQUxMX1NWR19UQUdTID0gYWRkVG9TZXQoe30sIFtcbiAgICAuLi5UQUdTLnN2ZyxcbiAgICAuLi5UQUdTLnN2Z0ZpbHRlcnMsXG4gICAgLi4uVEFHUy5zdmdEaXNhbGxvd2VkLFxuICBdKTtcbiAgY29uc3QgQUxMX01BVEhNTF9UQUdTID0gYWRkVG9TZXQoe30sIFtcbiAgICAuLi5UQUdTLm1hdGhNbCxcbiAgICAuLi5UQUdTLm1hdGhNbERpc2FsbG93ZWQsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gZWxlbWVudCBhIERPTSBlbGVtZW50IHdob3NlIG5hbWVzcGFjZSBpcyBiZWluZyBjaGVja2VkXG4gICAqIEByZXR1cm5zIFJldHVybiBmYWxzZSBpZiB0aGUgZWxlbWVudCBoYXMgYVxuICAgKiAgbmFtZXNwYWNlIHRoYXQgYSBzcGVjLWNvbXBsaWFudCBwYXJzZXIgd291bGQgbmV2ZXJcbiAgICogIHJldHVybi4gUmV0dXJuIHRydWUgb3RoZXJ3aXNlLlxuICAgKi9cbiAgY29uc3QgX2NoZWNrVmFsaWROYW1lc3BhY2UgPSBmdW5jdGlvbiAoZWxlbWVudDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGxldCBwYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gICAgLy8gSW4gSlNET00sIGlmIHdlJ3JlIGluc2lkZSBzaGFkb3cgRE9NLCB0aGVuIHBhcmVudE5vZGVcbiAgICAvLyBjYW4gYmUgbnVsbC4gV2UganVzdCBzaW11bGF0ZSBwYXJlbnQgaW4gdGhpcyBjYXNlLlxuICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQudGFnTmFtZSkge1xuICAgICAgcGFyZW50ID0ge1xuICAgICAgICBuYW1lc3BhY2VVUkk6IE5BTUVTUEFDRSxcbiAgICAgICAgdGFnTmFtZTogJ3RlbXBsYXRlJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdGFnTmFtZSA9IHN0cmluZ1RvTG93ZXJDYXNlKGVsZW1lbnQudGFnTmFtZSk7XG4gICAgY29uc3QgcGFyZW50VGFnTmFtZSA9IHN0cmluZ1RvTG93ZXJDYXNlKHBhcmVudC50YWdOYW1lKTtcblxuICAgIGlmICghQUxMT1dFRF9OQU1FU1BBQ0VTW2VsZW1lbnQubmFtZXNwYWNlVVJJXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSkge1xuICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHN3aXRjaCBmcm9tIEhUTUwgbmFtZXNwYWNlIHRvIFNWR1xuICAgICAgLy8gaXMgdmlhIDxzdmc+LiBJZiBpdCBoYXBwZW5zIHZpYSBhbnkgb3RoZXIgdGFnLCB0aGVuXG4gICAgICAvLyBpdCBzaG91bGQgYmUga2lsbGVkLlxuICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnc3ZnJztcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHN3aXRjaCBmcm9tIE1hdGhNTCB0byBTVkcgaXMgdmlhYFxuICAgICAgLy8gc3ZnIGlmIHBhcmVudCBpcyBlaXRoZXIgPGFubm90YXRpb24teG1sPiBvciBNYXRoTUxcbiAgICAgIC8vIHRleHQgaW50ZWdyYXRpb24gcG9pbnRzLlxuICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IE1BVEhNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0YWdOYW1lID09PSAnc3ZnJyAmJlxuICAgICAgICAgIChwYXJlbnRUYWdOYW1lID09PSAnYW5ub3RhdGlvbi14bWwnIHx8XG4gICAgICAgICAgICBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV0pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG9ubHkgYWxsb3cgZWxlbWVudHMgdGhhdCBhcmUgZGVmaW5lZCBpbiBTVkdcbiAgICAgIC8vIHNwZWMuIEFsbCBvdGhlcnMgYXJlIGRpc2FsbG93ZWQgaW4gU1ZHIG5hbWVzcGFjZS5cbiAgICAgIHJldHVybiBCb29sZWFuKEFMTF9TVkdfVEFHU1t0YWdOYW1lXSk7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBNQVRITUxfTkFNRVNQQUNFKSB7XG4gICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gSFRNTCBuYW1lc3BhY2UgdG8gTWF0aE1MXG4gICAgICAvLyBpcyB2aWEgPG1hdGg+LiBJZiBpdCBoYXBwZW5zIHZpYSBhbnkgb3RoZXIgdGFnLCB0aGVuXG4gICAgICAvLyBpdCBzaG91bGQgYmUga2lsbGVkLlxuICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnbWF0aCc7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBTVkcgdG8gTWF0aE1MIGlzIHZpYVxuICAgICAgLy8gPG1hdGg+IGFuZCBIVE1MIGludGVncmF0aW9uIHBvaW50c1xuICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UpIHtcbiAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdtYXRoJyAmJiBIVE1MX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXTtcbiAgICAgIH1cblxuICAgICAgLy8gV2Ugb25seSBhbGxvdyBlbGVtZW50cyB0aGF0IGFyZSBkZWZpbmVkIGluIE1hdGhNTFxuICAgICAgLy8gc3BlYy4gQWxsIG90aGVycyBhcmUgZGlzYWxsb3dlZCBpbiBNYXRoTUwgbmFtZXNwYWNlLlxuICAgICAgcmV0dXJuIEJvb2xlYW4oQUxMX01BVEhNTF9UQUdTW3RhZ05hbWVdKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gU1ZHIHRvIEhUTUwgaXMgdmlhXG4gICAgICAvLyBIVE1MIGludGVncmF0aW9uIHBvaW50cywgYW5kIGZyb20gTWF0aE1MIHRvIEhUTUxcbiAgICAgIC8vIGlzIHZpYSBNYXRoTUwgdGV4dCBpbnRlZ3JhdGlvbiBwb2ludHNcbiAgICAgIGlmIChcbiAgICAgICAgcGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSAmJlxuICAgICAgICAhSFRNTF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV1cbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgcGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSAmJlxuICAgICAgICAhTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTW3BhcmVudFRhZ05hbWVdXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBkaXNhbGxvdyB0YWdzIHRoYXQgYXJlIHNwZWNpZmljIGZvciBNYXRoTUxcbiAgICAgIC8vIG9yIFNWRyBhbmQgc2hvdWxkIG5ldmVyIGFwcGVhciBpbiBIVE1MIG5hbWVzcGFjZVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIUFMTF9NQVRITUxfVEFHU1t0YWdOYW1lXSAmJlxuICAgICAgICAoQ09NTU9OX1NWR19BTkRfSFRNTF9FTEVNRU5UU1t0YWdOYW1lXSB8fCAhQUxMX1NWR19UQUdTW3RhZ05hbWVdKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgWEhUTUwgYW5kIFhNTCBkb2N1bWVudHMgdGhhdCBzdXBwb3J0IGN1c3RvbSBuYW1lc3BhY2VzXG4gICAgaWYgKFxuICAgICAgUEFSU0VSX01FRElBX1RZUEUgPT09ICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnICYmXG4gICAgICBBTExPV0VEX05BTUVTUEFDRVNbZWxlbWVudC5uYW1lc3BhY2VVUkldXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBUaGUgY29kZSBzaG91bGQgbmV2ZXIgcmVhY2ggdGhpcyBwbGFjZSAodGhpcyBtZWFuc1xuICAgIC8vIHRoYXQgdGhlIGVsZW1lbnQgc29tZWhvdyBnb3QgbmFtZXNwYWNlIHRoYXQgaXMgbm90XG4gICAgLy8gSFRNTCwgU1ZHLCBNYXRoTUwgb3IgYWxsb3dlZCB2aWEgQUxMT1dFRF9OQU1FU1BBQ0VTKS5cbiAgICAvLyBSZXR1cm4gZmFsc2UganVzdCBpbiBjYXNlLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvKipcbiAgICogX2ZvcmNlUmVtb3ZlXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIGEgRE9NIG5vZGVcbiAgICovXG4gIGNvbnN0IF9mb3JjZVJlbW92ZSA9IGZ1bmN0aW9uIChub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7IGVsZW1lbnQ6IG5vZGUgfSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLXJlbW92ZVxuICAgICAgZ2V0UGFyZW50Tm9kZShub2RlKS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZW1vdmUobm9kZSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBfcmVtb3ZlQXR0cmlidXRlXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIGFuIEF0dHJpYnV0ZSBuYW1lXG4gICAqIEBwYXJhbSBlbGVtZW50IGEgRE9NIG5vZGVcbiAgICovXG4gIGNvbnN0IF9yZW1vdmVBdHRyaWJ1dGUgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBlbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGFycmF5UHVzaChET01QdXJpZnkucmVtb3ZlZCwge1xuICAgICAgICBhdHRyaWJ1dGU6IGVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShuYW1lKSxcbiAgICAgICAgZnJvbTogZWxlbWVudCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIGFycmF5UHVzaChET01QdXJpZnkucmVtb3ZlZCwge1xuICAgICAgICBhdHRyaWJ1dGU6IG51bGwsXG4gICAgICAgIGZyb206IGVsZW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblxuICAgIC8vIFdlIHZvaWQgYXR0cmlidXRlIHZhbHVlcyBmb3IgdW5yZW1vdmFibGUgXCJpc1wiIGF0dHJpYnV0ZXNcbiAgICBpZiAobmFtZSA9PT0gJ2lzJykge1xuICAgICAgaWYgKFJFVFVSTl9ET00gfHwgUkVUVVJOX0RPTV9GUkFHTUVOVCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIF9mb3JjZVJlbW92ZShlbGVtZW50KTtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgJycpO1xuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogX2luaXREb2N1bWVudFxuICAgKlxuICAgKiBAcGFyYW0gZGlydHkgLSBhIHN0cmluZyBvZiBkaXJ0eSBtYXJrdXBcbiAgICogQHJldHVybiBhIERPTSwgZmlsbGVkIHdpdGggdGhlIGRpcnR5IG1hcmt1cFxuICAgKi9cbiAgY29uc3QgX2luaXREb2N1bWVudCA9IGZ1bmN0aW9uIChkaXJ0eTogc3RyaW5nKTogRG9jdW1lbnQge1xuICAgIC8qIENyZWF0ZSBhIEhUTUwgZG9jdW1lbnQgKi9cbiAgICBsZXQgZG9jID0gbnVsbDtcbiAgICBsZXQgbGVhZGluZ1doaXRlc3BhY2UgPSBudWxsO1xuXG4gICAgaWYgKEZPUkNFX0JPRFkpIHtcbiAgICAgIGRpcnR5ID0gJzxyZW1vdmU+PC9yZW1vdmU+JyArIGRpcnR5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBJZiBGT1JDRV9CT0RZIGlzbid0IHVzZWQsIGxlYWRpbmcgd2hpdGVzcGFjZSBuZWVkcyB0byBiZSBwcmVzZXJ2ZWQgbWFudWFsbHkgKi9cbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBzdHJpbmdNYXRjaChkaXJ0eSwgL15bXFxyXFxuXFx0IF0rLyk7XG4gICAgICBsZWFkaW5nV2hpdGVzcGFjZSA9IG1hdGNoZXMgJiYgbWF0Y2hlc1swXTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBQQVJTRVJfTUVESUFfVFlQRSA9PT0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcgJiZcbiAgICAgIE5BTUVTUEFDRSA9PT0gSFRNTF9OQU1FU1BBQ0VcbiAgICApIHtcbiAgICAgIC8vIFJvb3Qgb2YgWEhUTUwgZG9jIG11c3QgY29udGFpbiB4bWxucyBkZWNsYXJhdGlvbiAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvbm9ybWF0aXZlLmh0bWwjc3RyaWN0KVxuICAgICAgZGlydHkgPVxuICAgICAgICAnPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+PGhlYWQ+PC9oZWFkPjxib2R5PicgK1xuICAgICAgICBkaXJ0eSArXG4gICAgICAgICc8L2JvZHk+PC9odG1sPic7XG4gICAgfVxuXG4gICAgY29uc3QgZGlydHlQYXlsb2FkID0gdHJ1c3RlZFR5cGVzUG9saWN5XG4gICAgICA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKGRpcnR5KVxuICAgICAgOiBkaXJ0eTtcbiAgICAvKlxuICAgICAqIFVzZSB0aGUgRE9NUGFyc2VyIEFQSSBieSBkZWZhdWx0LCBmYWxsYmFjayBsYXRlciBpZiBuZWVkcyBiZVxuICAgICAqIERPTVBhcnNlciBub3Qgd29yayBmb3Igc3ZnIHdoZW4gaGFzIG11bHRpcGxlIHJvb3QgZWxlbWVudC5cbiAgICAgKi9cbiAgICBpZiAoTkFNRVNQQUNFID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhkaXJ0eVBheWxvYWQsIFBBUlNFUl9NRURJQV9UWVBFKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfVxuXG4gICAgLyogVXNlIGNyZWF0ZUhUTUxEb2N1bWVudCBpbiBjYXNlIERPTVBhcnNlciBpcyBub3QgYXZhaWxhYmxlICovXG4gICAgaWYgKCFkb2MgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIGRvYyA9IGltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KE5BTUVTUEFDRSwgJ3RlbXBsYXRlJywgbnVsbCk7XG4gICAgICB0cnkge1xuICAgICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTCA9IElTX0VNUFRZX0lOUFVUXG4gICAgICAgICAgPyBlbXB0eUhUTUxcbiAgICAgICAgICA6IGRpcnR5UGF5bG9hZDtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgLy8gU3ludGF4IGVycm9yIGlmIGRpcnR5UGF5bG9hZCBpcyBpbnZhbGlkIHhtbFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keSB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXG4gICAgaWYgKGRpcnR5ICYmIGxlYWRpbmdXaGl0ZXNwYWNlKSB7XG4gICAgICBib2R5Lmluc2VydEJlZm9yZShcbiAgICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGVhZGluZ1doaXRlc3BhY2UpLFxuICAgICAgICBib2R5LmNoaWxkTm9kZXNbMF0gfHwgbnVsbFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiBXb3JrIG9uIHdob2xlIGRvY3VtZW50IG9yIGp1c3QgaXRzIGJvZHkgKi9cbiAgICBpZiAoTkFNRVNQQUNFID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgcmV0dXJuIGdldEVsZW1lbnRzQnlUYWdOYW1lLmNhbGwoXG4gICAgICAgIGRvYyxcbiAgICAgICAgV0hPTEVfRE9DVU1FTlQgPyAnaHRtbCcgOiAnYm9keSdcbiAgICAgIClbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIFdIT0xFX0RPQ1VNRU5UID8gZG9jLmRvY3VtZW50RWxlbWVudCA6IGJvZHk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBOb2RlSXRlcmF0b3Igb2JqZWN0IHRoYXQgeW91IGNhbiB1c2UgdG8gdHJhdmVyc2UgZmlsdGVyZWQgbGlzdHMgb2Ygbm9kZXMgb3IgZWxlbWVudHMgaW4gYSBkb2N1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHJvb3QgVGhlIHJvb3QgZWxlbWVudCBvciBub2RlIHRvIHN0YXJ0IHRyYXZlcnNpbmcgb24uXG4gICAqIEByZXR1cm4gVGhlIGNyZWF0ZWQgTm9kZUl0ZXJhdG9yXG4gICAqL1xuICBjb25zdCBfY3JlYXRlTm9kZUl0ZXJhdG9yID0gZnVuY3Rpb24gKHJvb3Q6IE5vZGUpOiBOb2RlSXRlcmF0b3Ige1xuICAgIHJldHVybiBjcmVhdGVOb2RlSXRlcmF0b3IuY2FsbChcbiAgICAgIHJvb3Qub3duZXJEb2N1bWVudCB8fCByb290LFxuICAgICAgcm9vdCxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCB8XG4gICAgICAgIE5vZGVGaWx0ZXIuU0hPV19DT01NRU5UIHxcbiAgICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFQgfFxuICAgICAgICBOb2RlRmlsdGVyLlNIT1dfUFJPQ0VTU0lOR19JTlNUUlVDVElPTiB8XG4gICAgICAgIE5vZGVGaWx0ZXIuU0hPV19DREFUQV9TRUNUSU9OLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIF9pc0Nsb2JiZXJlZFxuICAgKlxuICAgKiBAcGFyYW0gZWxlbWVudCBlbGVtZW50IHRvIGNoZWNrIGZvciBjbG9iYmVyaW5nIGF0dGFja3NcbiAgICogQHJldHVybiB0cnVlIGlmIGNsb2JiZXJlZCwgZmFsc2UgaWYgc2FmZVxuICAgKi9cbiAgY29uc3QgX2lzQ2xvYmJlcmVkID0gZnVuY3Rpb24gKGVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCAmJlxuICAgICAgKHR5cGVvZiBlbGVtZW50Lm5vZGVOYW1lICE9PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlb2YgZWxlbWVudC50ZXh0Q29udGVudCAhPT0gJ3N0cmluZycgfHxcbiAgICAgICAgdHlwZW9mIGVsZW1lbnQucmVtb3ZlQ2hpbGQgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgIShlbGVtZW50LmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBOYW1lZE5vZGVNYXApIHx8XG4gICAgICAgIHR5cGVvZiBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2YgZWxlbWVudC5zZXRBdHRyaWJ1dGUgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIGVsZW1lbnQubmFtZXNwYWNlVVJJICE9PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlb2YgZWxlbWVudC5pbnNlcnRCZWZvcmUgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIGVsZW1lbnQuaGFzQ2hpbGROb2RlcyAhPT0gJ2Z1bmN0aW9uJylcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgRE9NIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBvYmplY3QgdG8gY2hlY2sgd2hldGhlciBpdCdzIGEgRE9NIG5vZGVcbiAgICogQHJldHVybiB0cnVlIGlzIG9iamVjdCBpcyBhIERPTSBub2RlXG4gICAqL1xuICBjb25zdCBfaXNOb2RlID0gZnVuY3Rpb24gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgTm9kZSB7XG4gICAgcmV0dXJuIHR5cGVvZiBOb2RlID09PSAnZnVuY3Rpb24nICYmIHZhbHVlIGluc3RhbmNlb2YgTm9kZTtcbiAgfTtcblxuICBmdW5jdGlvbiBfZXhlY3V0ZUhvb2tzPFQgZXh0ZW5kcyBIb29rRnVuY3Rpb24+KFxuICAgIGhvb2tzOiBIb29rRnVuY3Rpb25bXSxcbiAgICBjdXJyZW50Tm9kZTogUGFyYW1ldGVyczxUPlswXSxcbiAgICBkYXRhOiBQYXJhbWV0ZXJzPFQ+WzFdXG4gICk6IHZvaWQge1xuICAgIGFycmF5Rm9yRWFjaChob29rcywgKGhvb2s6IFQpID0+IHtcbiAgICAgIGhvb2suY2FsbChET01QdXJpZnksIGN1cnJlbnROb2RlLCBkYXRhLCBDT05GSUcpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIF9zYW5pdGl6ZUVsZW1lbnRzXG4gICAqXG4gICAqIEBwcm90ZWN0IG5vZGVOYW1lXG4gICAqIEBwcm90ZWN0IHRleHRDb250ZW50XG4gICAqIEBwcm90ZWN0IHJlbW92ZUNoaWxkXG4gICAqIEBwYXJhbSBjdXJyZW50Tm9kZSB0byBjaGVjayBmb3IgcGVybWlzc2lvbiB0byBleGlzdFxuICAgKiBAcmV0dXJuIHRydWUgaWYgbm9kZSB3YXMga2lsbGVkLCBmYWxzZSBpZiBsZWZ0IGFsaXZlXG4gICAqL1xuICBjb25zdCBfc2FuaXRpemVFbGVtZW50cyA9IGZ1bmN0aW9uIChjdXJyZW50Tm9kZTogYW55KTogYm9vbGVhbiB7XG4gICAgbGV0IGNvbnRlbnQgPSBudWxsO1xuXG4gICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgIF9leGVjdXRlSG9va3MoaG9va3MuYmVmb3JlU2FuaXRpemVFbGVtZW50cywgY3VycmVudE5vZGUsIG51bGwpO1xuXG4gICAgLyogQ2hlY2sgaWYgZWxlbWVudCBpcyBjbG9iYmVyZWQgb3IgY2FuIGNsb2JiZXIgKi9cbiAgICBpZiAoX2lzQ2xvYmJlcmVkKGN1cnJlbnROb2RlKSkge1xuICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qIE5vdyBsZXQncyBjaGVjayB0aGUgZWxlbWVudCdzIHR5cGUgYW5kIG5hbWUgKi9cbiAgICBjb25zdCB0YWdOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoY3VycmVudE5vZGUubm9kZU5hbWUpO1xuXG4gICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgIF9leGVjdXRlSG9va3MoaG9va3MudXBvblNhbml0aXplRWxlbWVudCwgY3VycmVudE5vZGUsIHtcbiAgICAgIHRhZ05hbWUsXG4gICAgICBhbGxvd2VkVGFnczogQUxMT1dFRF9UQUdTLFxuICAgIH0pO1xuXG4gICAgLyogRGV0ZWN0IG1YU1MgYXR0ZW1wdHMgYWJ1c2luZyBuYW1lc3BhY2UgY29uZnVzaW9uICovXG4gICAgaWYgKFxuICAgICAgU0FGRV9GT1JfWE1MICYmXG4gICAgICBjdXJyZW50Tm9kZS5oYXNDaGlsZE5vZGVzKCkgJiZcbiAgICAgICFfaXNOb2RlKGN1cnJlbnROb2RlLmZpcnN0RWxlbWVudENoaWxkKSAmJlxuICAgICAgcmVnRXhwVGVzdCgvPFsvXFx3IV0vZywgY3VycmVudE5vZGUuaW5uZXJIVE1MKSAmJlxuICAgICAgcmVnRXhwVGVzdCgvPFsvXFx3IV0vZywgY3VycmVudE5vZGUudGV4dENvbnRlbnQpXG4gICAgKSB7XG4gICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyogUmVtb3ZlIGFueSBvY2N1cnJlbmNlIG9mIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zICovXG4gICAgaWYgKGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUucHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbikge1xuICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qIFJlbW92ZSBhbnkga2luZCBvZiBwb3NzaWJseSBoYXJtZnVsIGNvbW1lbnRzICovXG4gICAgaWYgKFxuICAgICAgU0FGRV9GT1JfWE1MICYmXG4gICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLmNvbW1lbnQgJiZcbiAgICAgIHJlZ0V4cFRlc3QoLzxbL1xcd10vZywgY3VycmVudE5vZGUuZGF0YSlcbiAgICApIHtcbiAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBSZW1vdmUgZWxlbWVudCBpZiBhbnl0aGluZyBmb3JiaWRzIGl0cyBwcmVzZW5jZSAqL1xuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIEVYVFJBX0VMRU1FTlRfSEFORExJTkcudGFnQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJlxuICAgICAgICBFWFRSQV9FTEVNRU5UX0hBTkRMSU5HLnRhZ0NoZWNrKHRhZ05hbWUpXG4gICAgICApICYmXG4gICAgICAoIUFMTE9XRURfVEFHU1t0YWdOYW1lXSB8fCBGT1JCSURfVEFHU1t0YWdOYW1lXSlcbiAgICApIHtcbiAgICAgIC8qIENoZWNrIGlmIHdlIGhhdmUgYSBjdXN0b20gZWxlbWVudCB0byBoYW5kbGUgKi9cbiAgICAgIGlmICghRk9SQklEX1RBR1NbdGFnTmFtZV0gJiYgX2lzQmFzaWNDdXN0b21FbGVtZW50KHRhZ05hbWUpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiZcbiAgICAgICAgICByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaywgdGFnTmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmXG4gICAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKHRhZ05hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBLZWVwIGNvbnRlbnQgZXhjZXB0IGZvciBiYWQtbGlzdGVkIGVsZW1lbnRzICovXG4gICAgICBpZiAoS0VFUF9DT05URU5UICYmICFGT1JCSURfQ09OVEVOVFNbdGFnTmFtZV0pIHtcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpIHx8IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBnZXRDaGlsZE5vZGVzKGN1cnJlbnROb2RlKSB8fCBjdXJyZW50Tm9kZS5jaGlsZE5vZGVzO1xuXG4gICAgICAgIGlmIChjaGlsZE5vZGVzICYmIHBhcmVudE5vZGUpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZENvdW50ID0gY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gY2hpbGRDb3VudCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZENsb25lID0gY2xvbmVOb2RlKGNoaWxkTm9kZXNbaV0sIHRydWUpO1xuICAgICAgICAgICAgY2hpbGRDbG9uZS5fX3JlbW92YWxDb3VudCA9IChjdXJyZW50Tm9kZS5fX3JlbW92YWxDb3VudCB8fCAwKSArIDE7XG4gICAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZENsb25lLCBnZXROZXh0U2libGluZyhjdXJyZW50Tm9kZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyogQ2hlY2sgd2hldGhlciBlbGVtZW50IGhhcyBhIHZhbGlkIG5hbWVzcGFjZSAqL1xuICAgIGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgIV9jaGVja1ZhbGlkTmFtZXNwYWNlKGN1cnJlbnROb2RlKSkge1xuICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qIE1ha2Ugc3VyZSB0aGF0IG9sZGVyIGJyb3dzZXJzIGRvbid0IGdldCBmYWxsYmFjay10YWcgbVhTUyAqL1xuICAgIGlmIChcbiAgICAgICh0YWdOYW1lID09PSAnbm9zY3JpcHQnIHx8XG4gICAgICAgIHRhZ05hbWUgPT09ICdub2VtYmVkJyB8fFxuICAgICAgICB0YWdOYW1lID09PSAnbm9mcmFtZXMnKSAmJlxuICAgICAgcmVnRXhwVGVzdCgvPFxcL25vKHNjcmlwdHxlbWJlZHxmcmFtZXMpL2ksIGN1cnJlbnROb2RlLmlubmVySFRNTClcbiAgICApIHtcbiAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBTYW5pdGl6ZSBlbGVtZW50IGNvbnRlbnQgdG8gYmUgdGVtcGxhdGUtc2FmZSAqL1xuICAgIGlmIChTQUZFX0ZPUl9URU1QTEFURVMgJiYgY3VycmVudE5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS50ZXh0KSB7XG4gICAgICAvKiBHZXQgdGhlIGVsZW1lbnQncyB0ZXh0IGNvbnRlbnQgKi9cbiAgICAgIGNvbnRlbnQgPSBjdXJyZW50Tm9kZS50ZXh0Q29udGVudDtcblxuICAgICAgYXJyYXlGb3JFYWNoKFtNVVNUQUNIRV9FWFBSLCBFUkJfRVhQUiwgVE1QTElUX0VYUFJdLCAoZXhwcjogUmVnRXhwKSA9PiB7XG4gICAgICAgIGNvbnRlbnQgPSBzdHJpbmdSZXBsYWNlKGNvbnRlbnQsIGV4cHIsICcgJyk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGN1cnJlbnROb2RlLnRleHRDb250ZW50ICE9PSBjb250ZW50KSB7XG4gICAgICAgIGFycmF5UHVzaChET01QdXJpZnkucmVtb3ZlZCwgeyBlbGVtZW50OiBjdXJyZW50Tm9kZS5jbG9uZU5vZGUoKSB9KTtcbiAgICAgICAgY3VycmVudE5vZGUudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICBfZXhlY3V0ZUhvb2tzKGhvb2tzLmFmdGVyU2FuaXRpemVFbGVtZW50cywgY3VycmVudE5vZGUsIG51bGwpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBfaXNWYWxpZEF0dHJpYnV0ZVxuICAgKlxuICAgKiBAcGFyYW0gbGNUYWcgTG93ZXJjYXNlIHRhZyBuYW1lIG9mIGNvbnRhaW5pbmcgZWxlbWVudC5cbiAgICogQHBhcmFtIGxjTmFtZSBMb3dlcmNhc2UgYXR0cmlidXRlIG5hbWUuXG4gICAqIEBwYXJhbSB2YWx1ZSBBdHRyaWJ1dGUgdmFsdWUuXG4gICAqIEByZXR1cm4gUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgdmFsaWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGNvbnN0IF9pc1ZhbGlkQXR0cmlidXRlID0gZnVuY3Rpb24gKFxuICAgIGxjVGFnOiBzdHJpbmcsXG4gICAgbGNOYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZ1xuICApOiBib29sZWFuIHtcbiAgICAvKiBGT1JCSURfQVRUUiBtdXN0IGFsd2F5cyB3aW4sIGV2ZW4gaWYgQUREX0FUVFIgcHJlZGljYXRlIHdvdWxkIGFsbG93IGl0ICovXG4gICAgaWYgKEZPUkJJRF9BVFRSW2xjTmFtZV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiBNYWtlIHN1cmUgYXR0cmlidXRlIGNhbm5vdCBjbG9iYmVyICovXG4gICAgaWYgKFxuICAgICAgU0FOSVRJWkVfRE9NICYmXG4gICAgICAobGNOYW1lID09PSAnaWQnIHx8IGxjTmFtZSA9PT0gJ25hbWUnKSAmJlxuICAgICAgKHZhbHVlIGluIGRvY3VtZW50IHx8IHZhbHVlIGluIGZvcm1FbGVtZW50KVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qIEFsbG93IHZhbGlkIGRhdGEtKiBhdHRyaWJ1dGVzOiBBdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGFmdGVyIFwiLVwiXG4gICAgICAgIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9kb20uaHRtbCNlbWJlZGRpbmctY3VzdG9tLW5vbi12aXNpYmxlLWRhdGEtd2l0aC10aGUtZGF0YS0qLWF0dHJpYnV0ZXMpXG4gICAgICAgIFhNTC1jb21wYXRpYmxlIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbmZyYXN0cnVjdHVyZS5odG1sI3htbC1jb21wYXRpYmxlIGFuZCBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwvI2QwZTgwNClcbiAgICAgICAgV2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgdmFsdWU7IGl0J3MgYWx3YXlzIFVSSSBzYWZlLiAqL1xuICAgIGlmIChcbiAgICAgIEFMTE9XX0RBVEFfQVRUUiAmJlxuICAgICAgIUZPUkJJRF9BVFRSW2xjTmFtZV0gJiZcbiAgICAgIHJlZ0V4cFRlc3QoREFUQV9BVFRSLCBsY05hbWUpXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIGF0dHJpYnV0ZSBpcyBzYWZlXG4gICAgfSBlbHNlIGlmIChBTExPV19BUklBX0FUVFIgJiYgcmVnRXhwVGVzdChBUklBX0FUVFIsIGxjTmFtZSkpIHtcbiAgICAgIC8vIFRoaXMgYXR0cmlidXRlIGlzIHNhZmVcbiAgICAgIC8qIENoZWNrIGlmIEFERF9BVFRSIGZ1bmN0aW9uIGFsbG93cyB0aGlzIGF0dHJpYnV0ZSAqL1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBFWFRSQV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiZcbiAgICAgIEVYVFJBX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlQ2hlY2sobGNOYW1lLCBsY1RhZylcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgYXR0cmlidXRlIGlzIHNhZmVcbiAgICAgIC8qIE90aGVyd2lzZSwgY2hlY2sgdGhlIG5hbWUgaXMgcGVybWl0dGVkICovXG4gICAgfSBlbHNlIGlmICghQUxMT1dFRF9BVFRSW2xjTmFtZV0gfHwgRk9SQklEX0FUVFJbbGNOYW1lXSkge1xuICAgICAgaWYgKFxuICAgICAgICAvLyBGaXJzdCBjb25kaXRpb24gZG9lcyBhIHZlcnkgYmFzaWMgY2hlY2sgaWYgYSkgaXQncyBiYXNpY2FsbHkgYSB2YWxpZCBjdXN0b20gZWxlbWVudCB0YWduYW1lIEFORFxuICAgICAgICAvLyBiKSBpZiB0aGUgdGFnTmFtZSBwYXNzZXMgd2hhdGV2ZXIgdGhlIHVzZXIgaGFzIGNvbmZpZ3VyZWQgZm9yIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVja1xuICAgICAgICAvLyBhbmQgYykgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIHBhc3NlcyB3aGF0ZXZlciB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBmb3IgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrXG4gICAgICAgIChfaXNCYXNpY0N1c3RvbUVsZW1lbnQobGNUYWcpICYmXG4gICAgICAgICAgKChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiZcbiAgICAgICAgICAgIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCBsY1RhZykpIHx8XG4gICAgICAgICAgICAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiZcbiAgICAgICAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKGxjVGFnKSkpICYmXG4gICAgICAgICAgKChDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiZcbiAgICAgICAgICAgIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrLCBsY05hbWUpKSB8fFxuICAgICAgICAgICAgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmXG4gICAgICAgICAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayhsY05hbWUsIGxjVGFnKSkpKSB8fFxuICAgICAgICAvLyBBbHRlcm5hdGl2ZSwgc2Vjb25kIGNvbmRpdGlvbiBjaGVja3MgaWYgaXQncyBhbiBgaXNgLWF0dHJpYnV0ZSwgQU5EXG4gICAgICAgIC8vIHRoZSB2YWx1ZSBwYXNzZXMgd2hhdGV2ZXIgdGhlIHVzZXIgaGFzIGNvbmZpZ3VyZWQgZm9yIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVja1xuICAgICAgICAobGNOYW1lID09PSAnaXMnICYmXG4gICAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzICYmXG4gICAgICAgICAgKChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiZcbiAgICAgICAgICAgIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCB2YWx1ZSkpIHx8XG4gICAgICAgICAgICAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiZcbiAgICAgICAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKHZhbHVlKSkpKVxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIHVzZXIgaGFzIHN1cHBsaWVkIGEgcmVnZXhwIG9yIGZ1bmN0aW9uIGluIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaywgd2UgbmVlZCB0byBhbHNvIGFsbG93IGRlcml2ZWQgY3VzdG9tIGVsZW1lbnRzIHVzaW5nIHRoZSBzYW1lIHRhZ05hbWUgdGVzdC5cbiAgICAgICAgLy8gQWRkaXRpb25hbGx5LCB3ZSBuZWVkIHRvIGFsbG93IGF0dHJpYnV0ZXMgcGFzc2luZyB0aGUgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrIHVzZXIgaGFzIGNvbmZpZ3VyZWQsIGFzIGN1c3RvbSBlbGVtZW50cyBjYW4gZGVmaW5lIHRoZXNlIGF0IHRoZWlyIG93biBkaXNjcmV0aW9uLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLyogQ2hlY2sgdmFsdWUgaXMgc2FmZS4gRmlyc3QsIGlzIGF0dHIgaW5lcnQ/IElmIHNvLCBpcyBzYWZlICovXG4gICAgfSBlbHNlIGlmIChVUklfU0FGRV9BVFRSSUJVVEVTW2xjTmFtZV0pIHtcbiAgICAgIC8vIFRoaXMgYXR0cmlidXRlIGlzIHNhZmVcbiAgICAgIC8qIENoZWNrIG5vIHNjcmlwdCwgZGF0YSBvciB1bmtub3duIHBvc3NpYmx5IHVuc2FmZSBVUklcbiAgICAgICAgdW5sZXNzIHdlIGtub3cgVVJJIHZhbHVlcyBhcmUgc2FmZSBmb3IgdGhhdCBhdHRyaWJ1dGUgKi9cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcmVnRXhwVGVzdChJU19BTExPV0VEX1VSSSwgc3RyaW5nUmVwbGFjZSh2YWx1ZSwgQVRUUl9XSElURVNQQUNFLCAnJykpXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIGF0dHJpYnV0ZSBpcyBzYWZlXG4gICAgICAvKiBLZWVwIGltYWdlIGRhdGEgVVJJcyBhbGl2ZSBpZiBzcmMveGxpbms6aHJlZiBpcyBhbGxvd2VkICovXG4gICAgICAvKiBGdXJ0aGVyIHByZXZlbnQgZ2FkZ2V0IFhTUyBmb3IgZHluYW1pY2FsbHkgYnVpbHQgc2NyaXB0IHRhZ3MgKi9cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKGxjTmFtZSA9PT0gJ3NyYycgfHwgbGNOYW1lID09PSAneGxpbms6aHJlZicgfHwgbGNOYW1lID09PSAnaHJlZicpICYmXG4gICAgICBsY1RhZyAhPT0gJ3NjcmlwdCcgJiZcbiAgICAgIHN0cmluZ0luZGV4T2YodmFsdWUsICdkYXRhOicpID09PSAwICYmXG4gICAgICBEQVRBX1VSSV9UQUdTW2xjVGFnXVxuICAgICkge1xuICAgICAgLy8gVGhpcyBhdHRyaWJ1dGUgaXMgc2FmZVxuICAgICAgLyogQWxsb3cgdW5rbm93biBwcm90b2NvbHM6IFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgbGlua3MgdGhhdFxuICAgICAgICBhcmUgaGFuZGxlZCBieSBwcm90b2NvbCBoYW5kbGVycyB3aGljaCBtYXkgYmUgdW5rbm93biBhaGVhZCBvZlxuICAgICAgICB0aW1lLCBlLmcuIGZiOiwgc3BvdGlmeTogKi9cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFMgJiZcbiAgICAgICFyZWdFeHBUZXN0KElTX1NDUklQVF9PUl9EQVRBLCBzdHJpbmdSZXBsYWNlKHZhbHVlLCBBVFRSX1dISVRFU1BBQ0UsICcnKSlcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgYXR0cmlidXRlIGlzIHNhZmVcbiAgICAgIC8qIENoZWNrIGZvciBiaW5hcnkgYXR0cmlidXRlcyAqL1xuICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQmluYXJ5IGF0dHJpYnV0ZXMgYXJlIHNhZmUgYXQgdGhpcyBwb2ludFxuICAgICAgLyogQW55dGhpbmcgZWxzZSwgcHJlc3VtZSB1bnNhZmUsIGRvIG5vdCBhZGQgaXQgYmFjayAqL1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBfaXNCYXNpY0N1c3RvbUVsZW1lbnRcbiAgICogY2hlY2tzIGlmIGF0IGxlYXN0IG9uZSBkYXNoIGlzIGluY2x1ZGVkIGluIHRhZ05hbWUsIGFuZCBpdCdzIG5vdCB0aGUgZmlyc3QgY2hhclxuICAgKiBmb3IgbW9yZSBzb3BoaXN0aWNhdGVkIGNoZWNraW5nIHNlZSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3ZhbGlkYXRlLWVsZW1lbnQtbmFtZVxuICAgKlxuICAgKiBAcGFyYW0gdGFnTmFtZSBuYW1lIG9mIHRoZSB0YWcgb2YgdGhlIG5vZGUgdG8gc2FuaXRpemVcbiAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSB0YWcgbmFtZSBtZWV0cyB0aGUgYmFzaWMgY3JpdGVyaWEgZm9yIGEgY3VzdG9tIGVsZW1lbnQsIG90aGVyd2lzZSBmYWxzZS5cbiAgICovXG4gIGNvbnN0IF9pc0Jhc2ljQ3VzdG9tRWxlbWVudCA9IGZ1bmN0aW9uICh0YWdOYW1lOiBzdHJpbmcpOiBSZWdFeHBNYXRjaEFycmF5IHtcbiAgICByZXR1cm4gdGFnTmFtZSAhPT0gJ2Fubm90YXRpb24teG1sJyAmJiBzdHJpbmdNYXRjaCh0YWdOYW1lLCBDVVNUT01fRUxFTUVOVCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIF9zYW5pdGl6ZUF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHByb3RlY3QgYXR0cmlidXRlc1xuICAgKiBAcHJvdGVjdCBub2RlTmFtZVxuICAgKiBAcHJvdGVjdCByZW1vdmVBdHRyaWJ1dGVcbiAgICogQHByb3RlY3Qgc2V0QXR0cmlidXRlXG4gICAqXG4gICAqIEBwYXJhbSBjdXJyZW50Tm9kZSB0byBzYW5pdGl6ZVxuICAgKi9cbiAgY29uc3QgX3Nhbml0aXplQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChjdXJyZW50Tm9kZTogRWxlbWVudCk6IHZvaWQge1xuICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICBfZXhlY3V0ZUhvb2tzKGhvb2tzLmJlZm9yZVNhbml0aXplQXR0cmlidXRlcywgY3VycmVudE5vZGUsIG51bGwpO1xuXG4gICAgY29uc3QgeyBhdHRyaWJ1dGVzIH0gPSBjdXJyZW50Tm9kZTtcblxuICAgIC8qIENoZWNrIGlmIHdlIGhhdmUgYXR0cmlidXRlczsgaWYgbm90IHdlIG1pZ2h0IGhhdmUgYSB0ZXh0IG5vZGUgKi9cbiAgICBpZiAoIWF0dHJpYnV0ZXMgfHwgX2lzQ2xvYmJlcmVkKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhvb2tFdmVudCA9IHtcbiAgICAgIGF0dHJOYW1lOiAnJyxcbiAgICAgIGF0dHJWYWx1ZTogJycsXG4gICAgICBrZWVwQXR0cjogdHJ1ZSxcbiAgICAgIGFsbG93ZWRBdHRyaWJ1dGVzOiBBTExPV0VEX0FUVFIsXG4gICAgICBmb3JjZUtlZXBBdHRyOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBsZXQgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoO1xuXG4gICAgLyogR28gYmFja3dhcmRzIG92ZXIgYWxsIGF0dHJpYnV0ZXM7IHNhZmVseSByZW1vdmUgYmFkIG9uZXMgKi9cbiAgICB3aGlsZSAobC0tKSB7XG4gICAgICBjb25zdCBhdHRyID0gYXR0cmlidXRlc1tsXTtcbiAgICAgIGNvbnN0IHsgbmFtZSwgbmFtZXNwYWNlVVJJLCB2YWx1ZTogYXR0clZhbHVlIH0gPSBhdHRyO1xuICAgICAgY29uc3QgbGNOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMobmFtZSk7XG5cbiAgICAgIGNvbnN0IGluaXRWYWx1ZSA9IGF0dHJWYWx1ZTtcbiAgICAgIGxldCB2YWx1ZSA9IG5hbWUgPT09ICd2YWx1ZScgPyBpbml0VmFsdWUgOiBzdHJpbmdUcmltKGluaXRWYWx1ZSk7XG5cbiAgICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICAgIGhvb2tFdmVudC5hdHRyTmFtZSA9IGxjTmFtZTtcbiAgICAgIGhvb2tFdmVudC5hdHRyVmFsdWUgPSB2YWx1ZTtcbiAgICAgIGhvb2tFdmVudC5rZWVwQXR0ciA9IHRydWU7XG4gICAgICBob29rRXZlbnQuZm9yY2VLZWVwQXR0ciA9IHVuZGVmaW5lZDsgLy8gQWxsb3dzIGRldmVsb3BlcnMgdG8gc2VlIHRoaXMgaXMgYSBwcm9wZXJ0eSB0aGV5IGNhbiBzZXRcbiAgICAgIF9leGVjdXRlSG9va3MoaG9va3MudXBvblNhbml0aXplQXR0cmlidXRlLCBjdXJyZW50Tm9kZSwgaG9va0V2ZW50KTtcbiAgICAgIHZhbHVlID0gaG9va0V2ZW50LmF0dHJWYWx1ZTtcblxuICAgICAgLyogRnVsbCBET00gQ2xvYmJlcmluZyBwcm90ZWN0aW9uIHZpYSBuYW1lc3BhY2UgaXNvbGF0aW9uLFxuICAgICAgICogUHJlZml4IGlkIGFuZCBuYW1lIGF0dHJpYnV0ZXMgd2l0aCBgdXNlci1jb250ZW50LWBcbiAgICAgICAqL1xuICAgICAgaWYgKFNBTklUSVpFX05BTUVEX1BST1BTICYmIChsY05hbWUgPT09ICdpZCcgfHwgbGNOYW1lID09PSAnbmFtZScpKSB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgYXR0cmlidXRlIHdpdGggdGhpcyB2YWx1ZVxuICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcblxuICAgICAgICAvLyBQcmVmaXggdGhlIHZhbHVlIGFuZCBsYXRlciByZS1jcmVhdGUgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW5pdGl6ZWQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBTQU5JVElaRV9OQU1FRF9QUk9QU19QUkVGSVggKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgLyogV29yayBhcm91bmQgYSBzZWN1cml0eSBpc3N1ZSB3aXRoIGNvbW1lbnRzIGluc2lkZSBhdHRyaWJ1dGVzICovXG4gICAgICBpZiAoXG4gICAgICAgIFNBRkVfRk9SX1hNTCAmJlxuICAgICAgICByZWdFeHBUZXN0KFxuICAgICAgICAgIC8oKC0tIT98XSk+KXw8XFwvKHN0eWxlfHNjcmlwdHx0aXRsZXx4bXB8dGV4dGFyZWF8bm9zY3JpcHR8aWZyYW1lfG5vZW1iZWR8bm9mcmFtZXMpL2ksXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLyogTWFrZSBzdXJlIHdlIGNhbm5vdCBlYXNpbHkgdXNlIGFuaW1hdGVkIGhyZWZzLCBldmVuIGlmIGFuaW1hdGlvbnMgYXJlIGFsbG93ZWQgKi9cbiAgICAgIGlmIChsY05hbWUgPT09ICdhdHRyaWJ1dGVuYW1lJyAmJiBzdHJpbmdNYXRjaCh2YWx1ZSwgJ2hyZWYnKSkge1xuICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8qIERpZCB0aGUgaG9va3MgYXBwcm92ZSBvZiB0aGUgYXR0cmlidXRlPyAqL1xuICAgICAgaWYgKGhvb2tFdmVudC5mb3JjZUtlZXBBdHRyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBEaWQgdGhlIGhvb2tzIGFwcHJvdmUgb2YgdGhlIGF0dHJpYnV0ZT8gKi9cbiAgICAgIGlmICghaG9va0V2ZW50LmtlZXBBdHRyKSB7XG4gICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLyogV29yayBhcm91bmQgYSBzZWN1cml0eSBpc3N1ZSBpbiBqUXVlcnkgMy4wICovXG4gICAgICBpZiAoIUFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiAmJiByZWdFeHBUZXN0KC9cXC8+L2ksIHZhbHVlKSkge1xuICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8qIFNhbml0aXplIGF0dHJpYnV0ZSBjb250ZW50IHRvIGJlIHRlbXBsYXRlLXNhZmUgKi9cbiAgICAgIGlmIChTQUZFX0ZPUl9URU1QTEFURVMpIHtcbiAgICAgICAgYXJyYXlGb3JFYWNoKFtNVVNUQUNIRV9FWFBSLCBFUkJfRVhQUiwgVE1QTElUX0VYUFJdLCAoZXhwcjogUmVnRXhwKSA9PiB7XG4gICAgICAgICAgdmFsdWUgPSBzdHJpbmdSZXBsYWNlKHZhbHVlLCBleHByLCAnICcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLyogSXMgYHZhbHVlYCB2YWxpZCBmb3IgdGhpcyBhdHRyaWJ1dGU/ICovXG4gICAgICBjb25zdCBsY1RhZyA9IHRyYW5zZm9ybUNhc2VGdW5jKGN1cnJlbnROb2RlLm5vZGVOYW1lKTtcbiAgICAgIGlmICghX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpKSB7XG4gICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLyogSGFuZGxlIGF0dHJpYnV0ZXMgdGhhdCByZXF1aXJlIFRydXN0ZWQgVHlwZXMgKi9cbiAgICAgIGlmIChcbiAgICAgICAgdHJ1c3RlZFR5cGVzUG9saWN5ICYmXG4gICAgICAgIHR5cGVvZiB0cnVzdGVkVHlwZXMgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHR5cGVvZiB0cnVzdGVkVHlwZXMuZ2V0QXR0cmlidXRlVHlwZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIGlmIChuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAvKiBOYW1lc3BhY2VzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCwgc2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEzMDUyOTMgKi9cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2l0Y2ggKHRydXN0ZWRUeXBlcy5nZXRBdHRyaWJ1dGVUeXBlKGxjVGFnLCBsY05hbWUpKSB7XG4gICAgICAgICAgICBjYXNlICdUcnVzdGVkSFRNTCc6IHtcbiAgICAgICAgICAgICAgdmFsdWUgPSB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTCh2YWx1ZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdUcnVzdGVkU2NyaXB0VVJMJzoge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVTY3JpcHRVUkwodmFsdWUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogSGFuZGxlIGludmFsaWQgZGF0YS0qIGF0dHJpYnV0ZSBzZXQgYnkgdHJ5LWNhdGNoaW5nIGl0ICovXG4gICAgICBpZiAodmFsdWUgIT09IGluaXRWYWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAgIGN1cnJlbnROb2RlLnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVSSSwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiBGYWxsYmFjayB0byBzZXRBdHRyaWJ1dGUoKSBmb3IgYnJvd3Nlci11bnJlY29nbml6ZWQgbmFtZXNwYWNlcyBlLmcuIFwieC1zY2hlbWFcIi4gKi9cbiAgICAgICAgICAgIGN1cnJlbnROb2RlLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF9pc0Nsb2JiZXJlZChjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFycmF5UG9wKERPTVB1cmlmeS5yZW1vdmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICBfZXhlY3V0ZUhvb2tzKGhvb2tzLmFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzLCBjdXJyZW50Tm9kZSwgbnVsbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIF9zYW5pdGl6ZVNoYWRvd0RPTVxuICAgKlxuICAgKiBAcGFyYW0gZnJhZ21lbnQgdG8gaXRlcmF0ZSBvdmVyIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBjb25zdCBfc2FuaXRpemVTaGFkb3dET00gPSBmdW5jdGlvbiAoZnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQpOiB2b2lkIHtcbiAgICBsZXQgc2hhZG93Tm9kZSA9IG51bGw7XG4gICAgY29uc3Qgc2hhZG93SXRlcmF0b3IgPSBfY3JlYXRlTm9kZUl0ZXJhdG9yKGZyYWdtZW50KTtcblxuICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICBfZXhlY3V0ZUhvb2tzKGhvb2tzLmJlZm9yZVNhbml0aXplU2hhZG93RE9NLCBmcmFnbWVudCwgbnVsbCk7XG5cbiAgICB3aGlsZSAoKHNoYWRvd05vZGUgPSBzaGFkb3dJdGVyYXRvci5uZXh0Tm9kZSgpKSkge1xuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgX2V4ZWN1dGVIb29rcyhob29rcy51cG9uU2FuaXRpemVTaGFkb3dOb2RlLCBzaGFkb3dOb2RlLCBudWxsKTtcblxuICAgICAgLyogU2FuaXRpemUgdGFncyBhbmQgZWxlbWVudHMgKi9cbiAgICAgIF9zYW5pdGl6ZUVsZW1lbnRzKHNoYWRvd05vZGUpO1xuXG4gICAgICAvKiBDaGVjayBhdHRyaWJ1dGVzIG5leHQgKi9cbiAgICAgIF9zYW5pdGl6ZUF0dHJpYnV0ZXMoc2hhZG93Tm9kZSk7XG5cbiAgICAgIC8qIERlZXAgc2hhZG93IERPTSBkZXRlY3RlZCAqL1xuICAgICAgaWYgKHNoYWRvd05vZGUuY29udGVudCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgX3Nhbml0aXplU2hhZG93RE9NKHNoYWRvd05vZGUuY29udGVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgIF9leGVjdXRlSG9va3MoaG9va3MuYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSwgZnJhZ21lbnQsIG51bGwpO1xuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIERPTVB1cmlmeS5zYW5pdGl6ZSA9IGZ1bmN0aW9uIChkaXJ0eSwgY2ZnID0ge30pIHtcbiAgICBsZXQgYm9keSA9IG51bGw7XG4gICAgbGV0IGltcG9ydGVkTm9kZSA9IG51bGw7XG4gICAgbGV0IGN1cnJlbnROb2RlID0gbnVsbDtcbiAgICBsZXQgcmV0dXJuTm9kZSA9IG51bGw7XG4gICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgYSBzdHJpbmcgdG8gc2FuaXRpemUuXG4gICAgICBETyBOT1QgcmV0dXJuIGVhcmx5LCBhcyB0aGlzIHdpbGwgcmV0dXJuIHRoZSB3cm9uZyB0eXBlIGlmXG4gICAgICB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGEgRE9NIG9iamVjdCByYXRoZXIgdGhhbiBhIHN0cmluZyAqL1xuICAgIElTX0VNUFRZX0lOUFVUID0gIWRpcnR5O1xuICAgIGlmIChJU19FTVBUWV9JTlBVVCkge1xuICAgICAgZGlydHkgPSAnPCEtLT4nO1xuICAgIH1cblxuICAgIC8qIFN0cmluZ2lmeSwgaW4gY2FzZSBkaXJ0eSBpcyBhbiBvYmplY3QgKi9cbiAgICBpZiAodHlwZW9mIGRpcnR5ICE9PSAnc3RyaW5nJyAmJiAhX2lzTm9kZShkaXJ0eSkpIHtcbiAgICAgIGlmICh0eXBlb2YgZGlydHkudG9TdHJpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGlydHkgPSBkaXJ0eS50b1N0cmluZygpO1xuICAgICAgICBpZiAodHlwZW9mIGRpcnR5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgnZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZycpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0eXBlRXJyb3JDcmVhdGUoJ3RvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogUmV0dXJuIGRpcnR5IEhUTUwgaWYgRE9NUHVyaWZ5IGNhbm5vdCBydW4gKi9cbiAgICBpZiAoIURPTVB1cmlmeS5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuIGRpcnR5O1xuICAgIH1cblxuICAgIC8qIEFzc2lnbiBjb25maWcgdmFycyAqL1xuICAgIGlmICghU0VUX0NPTkZJRykge1xuICAgICAgX3BhcnNlQ29uZmlnKGNmZyk7XG4gICAgfVxuXG4gICAgLyogQ2xlYW4gdXAgcmVtb3ZlZCBlbGVtZW50cyAqL1xuICAgIERPTVB1cmlmeS5yZW1vdmVkID0gW107XG5cbiAgICAvKiBDaGVjayBpZiBkaXJ0eSBpcyBjb3JyZWN0bHkgdHlwZWQgZm9yIElOX1BMQUNFICovXG4gICAgaWYgKHR5cGVvZiBkaXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIElOX1BMQUNFID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKElOX1BMQUNFKSB7XG4gICAgICAvKiBEbyBzb21lIGVhcmx5IHByZS1zYW5pdGl6YXRpb24gdG8gYXZvaWQgdW5zYWZlIHJvb3Qgbm9kZXMgKi9cbiAgICAgIGlmICgoZGlydHkgYXMgTm9kZSkubm9kZU5hbWUpIHtcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IHRyYW5zZm9ybUNhc2VGdW5jKChkaXJ0eSBhcyBOb2RlKS5ub2RlTmFtZSk7XG4gICAgICAgIGlmICghQUxMT1dFRF9UQUdTW3RhZ05hbWVdIHx8IEZPUkJJRF9UQUdTW3RhZ05hbWVdKSB7XG4gICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKFxuICAgICAgICAgICAgJ3Jvb3Qgbm9kZSBpcyBmb3JiaWRkZW4gYW5kIGNhbm5vdCBiZSBzYW5pdGl6ZWQgaW4tcGxhY2UnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlydHkgaW5zdGFuY2VvZiBOb2RlKSB7XG4gICAgICAvKiBJZiBkaXJ0eSBpcyBhIERPTSBlbGVtZW50LCBhcHBlbmQgdG8gYW4gZW1wdHkgZG9jdW1lbnQgdG8gYXZvaWRcbiAgICAgICAgIGVsZW1lbnRzIGJlaW5nIHN0cmlwcGVkIGJ5IHRoZSBwYXJzZXIgKi9cbiAgICAgIGJvZHkgPSBfaW5pdERvY3VtZW50KCc8IS0tLS0+Jyk7XG4gICAgICBpbXBvcnRlZE5vZGUgPSBib2R5Lm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShkaXJ0eSwgdHJ1ZSk7XG4gICAgICBpZiAoXG4gICAgICAgIGltcG9ydGVkTm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLmVsZW1lbnQgJiZcbiAgICAgICAgaW1wb3J0ZWROb2RlLm5vZGVOYW1lID09PSAnQk9EWSdcbiAgICAgICkge1xuICAgICAgICAvKiBOb2RlIGlzIGFscmVhZHkgYSBib2R5LCB1c2UgYXMgaXMgKi9cbiAgICAgICAgYm9keSA9IGltcG9ydGVkTm9kZTtcbiAgICAgIH0gZWxzZSBpZiAoaW1wb3J0ZWROb2RlLm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgICAgYm9keSA9IGltcG9ydGVkTm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1kb20tbm9kZS1hcHBlbmRcbiAgICAgICAgYm9keS5hcHBlbmRDaGlsZChpbXBvcnRlZE5vZGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBFeGl0IGRpcmVjdGx5IGlmIHdlIGhhdmUgbm90aGluZyB0byBkbyAqL1xuICAgICAgaWYgKFxuICAgICAgICAhUkVUVVJOX0RPTSAmJlxuICAgICAgICAhU0FGRV9GT1JfVEVNUExBVEVTICYmXG4gICAgICAgICFXSE9MRV9ET0NVTUVOVCAmJlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItaW5jbHVkZXNcbiAgICAgICAgZGlydHkuaW5kZXhPZignPCcpID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVzdGVkVHlwZXNQb2xpY3kgJiYgUkVUVVJOX1RSVVNURURfVFlQRVxuICAgICAgICAgID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoZGlydHkpXG4gICAgICAgICAgOiBkaXJ0eTtcbiAgICAgIH1cblxuICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZG9jdW1lbnQgdG8gd29yayBvbiAqL1xuICAgICAgYm9keSA9IF9pbml0RG9jdW1lbnQoZGlydHkpO1xuXG4gICAgICAvKiBDaGVjayB3ZSBoYXZlIGEgRE9NIG5vZGUgZnJvbSB0aGUgZGF0YSAqL1xuICAgICAgaWYgKCFib2R5KSB7XG4gICAgICAgIHJldHVybiBSRVRVUk5fRE9NID8gbnVsbCA6IFJFVFVSTl9UUlVTVEVEX1RZUEUgPyBlbXB0eUhUTUwgOiAnJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBSZW1vdmUgZmlyc3QgZWxlbWVudCBub2RlIChvdXJzKSBpZiBGT1JDRV9CT0RZIGlzIHNldCAqL1xuICAgIGlmIChib2R5ICYmIEZPUkNFX0JPRFkpIHtcbiAgICAgIF9mb3JjZVJlbW92ZShib2R5LmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIC8qIEdldCBub2RlIGl0ZXJhdG9yICovXG4gICAgY29uc3Qgbm9kZUl0ZXJhdG9yID0gX2NyZWF0ZU5vZGVJdGVyYXRvcihJTl9QTEFDRSA/IGRpcnR5IDogYm9keSk7XG5cbiAgICAvKiBOb3cgc3RhcnQgaXRlcmF0aW5nIG92ZXIgdGhlIGNyZWF0ZWQgZG9jdW1lbnQgKi9cbiAgICB3aGlsZSAoKGN1cnJlbnROb2RlID0gbm9kZUl0ZXJhdG9yLm5leHROb2RlKCkpKSB7XG4gICAgICAvKiBTYW5pdGl6ZSB0YWdzIGFuZCBlbGVtZW50cyAqL1xuICAgICAgX3Nhbml0aXplRWxlbWVudHMoY3VycmVudE5vZGUpO1xuXG4gICAgICAvKiBDaGVjayBhdHRyaWJ1dGVzIG5leHQgKi9cbiAgICAgIF9zYW5pdGl6ZUF0dHJpYnV0ZXMoY3VycmVudE5vZGUpO1xuXG4gICAgICAvKiBTaGFkb3cgRE9NIGRldGVjdGVkLCBzYW5pdGl6ZSBpdCAqL1xuICAgICAgaWYgKGN1cnJlbnROb2RlLmNvbnRlbnQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgIF9zYW5pdGl6ZVNoYWRvd0RPTShjdXJyZW50Tm9kZS5jb250ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBJZiB3ZSBzYW5pdGl6ZWQgYGRpcnR5YCBpbi1wbGFjZSwgcmV0dXJuIGl0LiAqL1xuICAgIGlmIChJTl9QTEFDRSkge1xuICAgICAgcmV0dXJuIGRpcnR5O1xuICAgIH1cblxuICAgIC8qIFJldHVybiBzYW5pdGl6ZWQgc3RyaW5nIG9yIERPTSAqL1xuICAgIGlmIChSRVRVUk5fRE9NKSB7XG4gICAgICBpZiAoUkVUVVJOX0RPTV9GUkFHTUVOVCkge1xuICAgICAgICByZXR1cm5Ob2RlID0gY3JlYXRlRG9jdW1lbnRGcmFnbWVudC5jYWxsKGJvZHkub3duZXJEb2N1bWVudCk7XG5cbiAgICAgICAgd2hpbGUgKGJvZHkuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1kb20tbm9kZS1hcHBlbmRcbiAgICAgICAgICByZXR1cm5Ob2RlLmFwcGVuZENoaWxkKGJvZHkuZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybk5vZGUgPSBib2R5O1xuICAgICAgfVxuXG4gICAgICBpZiAoQUxMT1dFRF9BVFRSLnNoYWRvd3Jvb3QgfHwgQUxMT1dFRF9BVFRSLnNoYWRvd3Jvb3Rtb2RlKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAgQWRvcHROb2RlKCkgaXMgbm90IHVzZWQgYmVjYXVzZSBpbnRlcm5hbCBzdGF0ZSBpcyBub3QgcmVzZXRcbiAgICAgICAgICAoZS5nLiB0aGUgcGFzdCBuYW1lcyBtYXAgb2YgYSBIVE1MRm9ybUVsZW1lbnQpLCB0aGlzIGlzIHNhZmVcbiAgICAgICAgICBpbiB0aGVvcnkgYnV0IHdlIHdvdWxkIHJhdGhlciBub3QgcmlzayBhbm90aGVyIGF0dGFjayB2ZWN0b3IuXG4gICAgICAgICAgVGhlIHN0YXRlIHRoYXQgaXMgY2xvbmVkIGJ5IGltcG9ydE5vZGUoKSBpcyBleHBsaWNpdGx5IGRlZmluZWRcbiAgICAgICAgICBieSB0aGUgc3BlY3MuXG4gICAgICAgICovXG4gICAgICAgIHJldHVybk5vZGUgPSBpbXBvcnROb2RlLmNhbGwob3JpZ2luYWxEb2N1bWVudCwgcmV0dXJuTm9kZSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXR1cm5Ob2RlO1xuICAgIH1cblxuICAgIGxldCBzZXJpYWxpemVkSFRNTCA9IFdIT0xFX0RPQ1VNRU5UID8gYm9keS5vdXRlckhUTUwgOiBib2R5LmlubmVySFRNTDtcblxuICAgIC8qIFNlcmlhbGl6ZSBkb2N0eXBlIGlmIGFsbG93ZWQgKi9cbiAgICBpZiAoXG4gICAgICBXSE9MRV9ET0NVTUVOVCAmJlxuICAgICAgQUxMT1dFRF9UQUdTWychZG9jdHlwZSddICYmXG4gICAgICBib2R5Lm93bmVyRG9jdW1lbnQgJiZcbiAgICAgIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlICYmXG4gICAgICBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lICYmXG4gICAgICByZWdFeHBUZXN0KEVYUFJFU1NJT05TLkRPQ1RZUEVfTkFNRSwgYm9keS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSlcbiAgICApIHtcbiAgICAgIHNlcmlhbGl6ZWRIVE1MID1cbiAgICAgICAgJzwhRE9DVFlQRSAnICsgYm9keS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSArICc+XFxuJyArIHNlcmlhbGl6ZWRIVE1MO1xuICAgIH1cblxuICAgIC8qIFNhbml0aXplIGZpbmFsIHN0cmluZyB0ZW1wbGF0ZS1zYWZlICovXG4gICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgYXJyYXlGb3JFYWNoKFtNVVNUQUNIRV9FWFBSLCBFUkJfRVhQUiwgVE1QTElUX0VYUFJdLCAoZXhwcjogUmVnRXhwKSA9PiB7XG4gICAgICAgIHNlcmlhbGl6ZWRIVE1MID0gc3RyaW5nUmVwbGFjZShzZXJpYWxpemVkSFRNTCwgZXhwciwgJyAnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVzdGVkVHlwZXNQb2xpY3kgJiYgUkVUVVJOX1RSVVNURURfVFlQRVxuICAgICAgPyB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTChzZXJpYWxpemVkSFRNTClcbiAgICAgIDogc2VyaWFsaXplZEhUTUw7XG4gIH07XG5cbiAgRE9NUHVyaWZ5LnNldENvbmZpZyA9IGZ1bmN0aW9uIChjZmcgPSB7fSkge1xuICAgIF9wYXJzZUNvbmZpZyhjZmcpO1xuICAgIFNFVF9DT05GSUcgPSB0cnVlO1xuICB9O1xuXG4gIERPTVB1cmlmeS5jbGVhckNvbmZpZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBDT05GSUcgPSBudWxsO1xuICAgIFNFVF9DT05GSUcgPSBmYWxzZTtcbiAgfTtcblxuICBET01QdXJpZnkuaXNWYWxpZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uICh0YWcsIGF0dHIsIHZhbHVlKSB7XG4gICAgLyogSW5pdGlhbGl6ZSBzaGFyZWQgY29uZmlnIHZhcnMgaWYgbmVjZXNzYXJ5LiAqL1xuICAgIGlmICghQ09ORklHKSB7XG4gICAgICBfcGFyc2VDb25maWcoe30pO1xuICAgIH1cblxuICAgIGNvbnN0IGxjVGFnID0gdHJhbnNmb3JtQ2FzZUZ1bmModGFnKTtcbiAgICBjb25zdCBsY05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhhdHRyKTtcbiAgICByZXR1cm4gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpO1xuICB9O1xuXG4gIERPTVB1cmlmeS5hZGRIb29rID0gZnVuY3Rpb24gKFxuICAgIGVudHJ5UG9pbnQ6IGtleW9mIEhvb2tzTWFwLFxuICAgIGhvb2tGdW5jdGlvbjogSG9va0Z1bmN0aW9uXG4gICkge1xuICAgIGlmICh0eXBlb2YgaG9va0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXJyYXlQdXNoKGhvb2tzW2VudHJ5UG9pbnRdLCBob29rRnVuY3Rpb24pO1xuICB9O1xuXG4gIERPTVB1cmlmeS5yZW1vdmVIb29rID0gZnVuY3Rpb24gKFxuICAgIGVudHJ5UG9pbnQ6IGtleW9mIEhvb2tzTWFwLFxuICAgIGhvb2tGdW5jdGlvbjogSG9va0Z1bmN0aW9uXG4gICkge1xuICAgIGlmIChob29rRnVuY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaW5kZXggPSBhcnJheUxhc3RJbmRleE9mKGhvb2tzW2VudHJ5UG9pbnRdLCBob29rRnVuY3Rpb24pO1xuXG4gICAgICByZXR1cm4gaW5kZXggPT09IC0xXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogYXJyYXlTcGxpY2UoaG9va3NbZW50cnlQb2ludF0sIGluZGV4LCAxKVswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXlQb3AoaG9va3NbZW50cnlQb2ludF0pO1xuICB9O1xuXG4gIERPTVB1cmlmeS5yZW1vdmVIb29rcyA9IGZ1bmN0aW9uIChlbnRyeVBvaW50OiBrZXlvZiBIb29rc01hcCkge1xuICAgIGhvb2tzW2VudHJ5UG9pbnRdID0gW107XG4gIH07XG5cbiAgRE9NUHVyaWZ5LnJlbW92ZUFsbEhvb2tzID0gZnVuY3Rpb24gKCkge1xuICAgIGhvb2tzID0gX2NyZWF0ZUhvb2tzTWFwKCk7XG4gIH07XG5cbiAgcmV0dXJuIERPTVB1cmlmeTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlRE9NUHVyaWZ5KCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRE9NUHVyaWZ5IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBET01QdXJpZnkgaW5zdGFuY2UgdXNpbmcgdGhlIGdpdmVuIHdpbmRvdy1saWtlIG9iamVjdC4gRGVmYXVsdHMgdG8gYHdpbmRvd2AuXG4gICAqL1xuICAocm9vdD86IFdpbmRvd0xpa2UpOiBET01QdXJpZnk7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gbGFiZWwsIGV4cG9zZWQgZm9yIGVhc2llciBjaGVja3NcbiAgICogaWYgRE9NUHVyaWZ5IGlzIHVwIHRvIGRhdGUgb3Igbm90XG4gICAqL1xuICB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIGVsZW1lbnRzIHRoYXQgRE9NUHVyaWZ5IHJlbW92ZWQgZHVyaW5nIHNhbml0YXRpb24uXG4gICAqIEVtcHR5IGlmIG5vdGhpbmcgd2FzIHJlbW92ZWQuXG4gICAqL1xuICByZW1vdmVkOiBBcnJheTxSZW1vdmVkRWxlbWVudCB8IFJlbW92ZWRBdHRyaWJ1dGU+O1xuXG4gIC8qKlxuICAgKiBFeHBvc2Ugd2hldGhlciB0aGlzIGJyb3dzZXIgc3VwcG9ydHMgcnVubmluZyB0aGUgZnVsbCBET01QdXJpZnkuXG4gICAqL1xuICBpc1N1cHBvcnRlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2V0IHRoZSBjb25maWd1cmF0aW9uIG9uY2UuXG4gICAqXG4gICAqIEBwYXJhbSBjZmcgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICovXG4gIHNldENvbmZpZyhjZmc/OiBDb25maWcpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgY2xlYXJDb25maWcoKTogdm9pZDtcblxuICAvKipcbiAgICogUHJvdmlkZXMgY29yZSBzYW5pdGF0aW9uIGZ1bmN0aW9uYWxpdHkuXG4gICAqXG4gICAqIEBwYXJhbSBkaXJ0eSBzdHJpbmcgb3IgRE9NIG5vZGVcbiAgICogQHBhcmFtIGNmZyBvYmplY3RcbiAgICogQHJldHVybnMgU2FuaXRpemVkIFRydXN0ZWRIVE1MLlxuICAgKi9cbiAgc2FuaXRpemUoXG4gICAgZGlydHk6IHN0cmluZyB8IE5vZGUsXG4gICAgY2ZnOiBDb25maWcgJiB7IFJFVFVSTl9UUlVTVEVEX1RZUEU6IHRydWUgfVxuICApOiBUcnVzdGVkSFRNTDtcblxuICAvKipcbiAgICogUHJvdmlkZXMgY29yZSBzYW5pdGF0aW9uIGZ1bmN0aW9uYWxpdHkuXG4gICAqXG4gICAqIEBwYXJhbSBkaXJ0eSBET00gbm9kZVxuICAgKiBAcGFyYW0gY2ZnIG9iamVjdFxuICAgKiBAcmV0dXJucyBTYW5pdGl6ZWQgRE9NIG5vZGUuXG4gICAqL1xuICBzYW5pdGl6ZShkaXJ0eTogTm9kZSwgY2ZnOiBDb25maWcgJiB7IElOX1BMQUNFOiB0cnVlIH0pOiBOb2RlO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBjb3JlIHNhbml0YXRpb24gZnVuY3Rpb25hbGl0eS5cbiAgICpcbiAgICogQHBhcmFtIGRpcnR5IHN0cmluZyBvciBET00gbm9kZVxuICAgKiBAcGFyYW0gY2ZnIG9iamVjdFxuICAgKiBAcmV0dXJucyBTYW5pdGl6ZWQgRE9NIG5vZGUuXG4gICAqL1xuICBzYW5pdGl6ZShkaXJ0eTogc3RyaW5nIHwgTm9kZSwgY2ZnOiBDb25maWcgJiB7IFJFVFVSTl9ET006IHRydWUgfSk6IE5vZGU7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGNvcmUgc2FuaXRhdGlvbiBmdW5jdGlvbmFsaXR5LlxuICAgKlxuICAgKiBAcGFyYW0gZGlydHkgc3RyaW5nIG9yIERPTSBub2RlXG4gICAqIEBwYXJhbSBjZmcgb2JqZWN0XG4gICAqIEByZXR1cm5zIFNhbml0aXplZCBkb2N1bWVudCBmcmFnbWVudC5cbiAgICovXG4gIHNhbml0aXplKFxuICAgIGRpcnR5OiBzdHJpbmcgfCBOb2RlLFxuICAgIGNmZzogQ29uZmlnICYgeyBSRVRVUk5fRE9NX0ZSQUdNRU5UOiB0cnVlIH1cbiAgKTogRG9jdW1lbnRGcmFnbWVudDtcblxuICAvKipcbiAgICogUHJvdmlkZXMgY29yZSBzYW5pdGF0aW9uIGZ1bmN0aW9uYWxpdHkuXG4gICAqXG4gICAqIEBwYXJhbSBkaXJ0eSBzdHJpbmcgb3IgRE9NIG5vZGVcbiAgICogQHBhcmFtIGNmZyBvYmplY3RcbiAgICogQHJldHVybnMgU2FuaXRpemVkIHN0cmluZy5cbiAgICovXG4gIHNhbml0aXplKGRpcnR5OiBzdHJpbmcgfCBOb2RlLCBjZmc/OiBDb25maWcpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbiBhdHRyaWJ1dGUgdmFsdWUgaXMgdmFsaWQuXG4gICAqIFVzZXMgbGFzdCBzZXQgY29uZmlnLCBpZiBhbnkuIE90aGVyd2lzZSwgdXNlcyBjb25maWcgZGVmYXVsdHMuXG4gICAqXG4gICAqIEBwYXJhbSB0YWcgVGFnIG5hbWUgb2YgY29udGFpbmluZyBlbGVtZW50LlxuICAgKiBAcGFyYW0gYXR0ciBBdHRyaWJ1dGUgbmFtZS5cbiAgICogQHBhcmFtIHZhbHVlIEF0dHJpYnV0ZSB2YWx1ZS5cbiAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgdmFsaWQuIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS5cbiAgICovXG4gIGlzVmFsaWRBdHRyaWJ1dGUodGFnOiBzdHJpbmcsIGF0dHI6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBET01QdXJpZnkgaG9vay5cbiAgICpcbiAgICogQHBhcmFtIGVudHJ5UG9pbnQgZW50cnkgcG9pbnQgZm9yIHRoZSBob29rIHRvIGFkZFxuICAgKiBAcGFyYW0gaG9va0Z1bmN0aW9uIGZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAgICovXG4gIGFkZEhvb2soZW50cnlQb2ludDogQmFzaWNIb29rTmFtZSwgaG9va0Z1bmN0aW9uOiBOb2RlSG9vayk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBET01QdXJpZnkgaG9vay5cbiAgICpcbiAgICogQHBhcmFtIGVudHJ5UG9pbnQgZW50cnkgcG9pbnQgZm9yIHRoZSBob29rIHRvIGFkZFxuICAgKiBAcGFyYW0gaG9va0Z1bmN0aW9uIGZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAgICovXG4gIGFkZEhvb2soZW50cnlQb2ludDogRWxlbWVudEhvb2tOYW1lLCBob29rRnVuY3Rpb246IEVsZW1lbnRIb29rKTogdm9pZDtcblxuICAvKipcbiAgICogQWRkcyBhIERPTVB1cmlmeSBob29rLlxuICAgKlxuICAgKiBAcGFyYW0gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gYWRkXG4gICAqIEBwYXJhbSBob29rRnVuY3Rpb24gZnVuY3Rpb24gdG8gZXhlY3V0ZVxuICAgKi9cbiAgYWRkSG9vayhcbiAgICBlbnRyeVBvaW50OiBEb2N1bWVudEZyYWdtZW50SG9va05hbWUsXG4gICAgaG9va0Z1bmN0aW9uOiBEb2N1bWVudEZyYWdtZW50SG9va1xuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgRE9NUHVyaWZ5IGhvb2suXG4gICAqXG4gICAqIEBwYXJhbSBlbnRyeVBvaW50IGVudHJ5IHBvaW50IGZvciB0aGUgaG9vayB0byBhZGRcbiAgICogQHBhcmFtIGhvb2tGdW5jdGlvbiBmdW5jdGlvbiB0byBleGVjdXRlXG4gICAqL1xuICBhZGRIb29rKFxuICAgIGVudHJ5UG9pbnQ6ICd1cG9uU2FuaXRpemVFbGVtZW50JyxcbiAgICBob29rRnVuY3Rpb246IFVwb25TYW5pdGl6ZUVsZW1lbnRIb29rXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBET01QdXJpZnkgaG9vay5cbiAgICpcbiAgICogQHBhcmFtIGVudHJ5UG9pbnQgZW50cnkgcG9pbnQgZm9yIHRoZSBob29rIHRvIGFkZFxuICAgKiBAcGFyYW0gaG9va0Z1bmN0aW9uIGZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAgICovXG4gIGFkZEhvb2soXG4gICAgZW50cnlQb2ludDogJ3Vwb25TYW5pdGl6ZUF0dHJpYnV0ZScsXG4gICAgaG9va0Z1bmN0aW9uOiBVcG9uU2FuaXRpemVBdHRyaWJ1dGVIb29rXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIERPTVB1cmlmeSBob29rIGF0IGEgZ2l2ZW4gZW50cnlQb2ludFxuICAgKiAocG9wcyBpdCBmcm9tIHRoZSBzdGFjayBvZiBob29rcyBpZiBob29rIG5vdCBzcGVjaWZpZWQpXG4gICAqXG4gICAqIEBwYXJhbSBlbnRyeVBvaW50IGVudHJ5IHBvaW50IGZvciB0aGUgaG9vayB0byByZW1vdmVcbiAgICogQHBhcmFtIGhvb2tGdW5jdGlvbiBvcHRpb25hbCBzcGVjaWZpYyBob29rIHRvIHJlbW92ZVxuICAgKiBAcmV0dXJucyByZW1vdmVkIGhvb2tcbiAgICovXG4gIHJlbW92ZUhvb2soXG4gICAgZW50cnlQb2ludDogQmFzaWNIb29rTmFtZSxcbiAgICBob29rRnVuY3Rpb24/OiBOb2RlSG9va1xuICApOiBOb2RlSG9vayB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmVtb3ZlIGEgRE9NUHVyaWZ5IGhvb2sgYXQgYSBnaXZlbiBlbnRyeVBvaW50XG4gICAqIChwb3BzIGl0IGZyb20gdGhlIHN0YWNrIG9mIGhvb2tzIGlmIGhvb2sgbm90IHNwZWNpZmllZClcbiAgICpcbiAgICogQHBhcmFtIGVudHJ5UG9pbnQgZW50cnkgcG9pbnQgZm9yIHRoZSBob29rIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gaG9va0Z1bmN0aW9uIG9wdGlvbmFsIHNwZWNpZmljIGhvb2sgdG8gcmVtb3ZlXG4gICAqIEByZXR1cm5zIHJlbW92ZWQgaG9va1xuICAgKi9cbiAgcmVtb3ZlSG9vayhcbiAgICBlbnRyeVBvaW50OiBFbGVtZW50SG9va05hbWUsXG4gICAgaG9va0Z1bmN0aW9uPzogRWxlbWVudEhvb2tcbiAgKTogRWxlbWVudEhvb2sgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIERPTVB1cmlmeSBob29rIGF0IGEgZ2l2ZW4gZW50cnlQb2ludFxuICAgKiAocG9wcyBpdCBmcm9tIHRoZSBzdGFjayBvZiBob29rcyBpZiBob29rIG5vdCBzcGVjaWZpZWQpXG4gICAqXG4gICAqIEBwYXJhbSBlbnRyeVBvaW50IGVudHJ5IHBvaW50IGZvciB0aGUgaG9vayB0byByZW1vdmVcbiAgICogQHBhcmFtIGhvb2tGdW5jdGlvbiBvcHRpb25hbCBzcGVjaWZpYyBob29rIHRvIHJlbW92ZVxuICAgKiBAcmV0dXJucyByZW1vdmVkIGhvb2tcbiAgICovXG4gIHJlbW92ZUhvb2soXG4gICAgZW50cnlQb2ludDogRG9jdW1lbnRGcmFnbWVudEhvb2tOYW1lLFxuICAgIGhvb2tGdW5jdGlvbj86IERvY3VtZW50RnJhZ21lbnRIb29rXG4gICk6IERvY3VtZW50RnJhZ21lbnRIb29rIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBET01QdXJpZnkgaG9vayBhdCBhIGdpdmVuIGVudHJ5UG9pbnRcbiAgICogKHBvcHMgaXQgZnJvbSB0aGUgc3RhY2sgb2YgaG9va3MgaWYgaG9vayBub3Qgc3BlY2lmaWVkKVxuICAgKlxuICAgKiBAcGFyYW0gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSBob29rRnVuY3Rpb24gb3B0aW9uYWwgc3BlY2lmaWMgaG9vayB0byByZW1vdmVcbiAgICogQHJldHVybnMgcmVtb3ZlZCBob29rXG4gICAqL1xuICByZW1vdmVIb29rKFxuICAgIGVudHJ5UG9pbnQ6ICd1cG9uU2FuaXRpemVFbGVtZW50JyxcbiAgICBob29rRnVuY3Rpb24/OiBVcG9uU2FuaXRpemVFbGVtZW50SG9va1xuICApOiBVcG9uU2FuaXRpemVFbGVtZW50SG9vayB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmVtb3ZlIGEgRE9NUHVyaWZ5IGhvb2sgYXQgYSBnaXZlbiBlbnRyeVBvaW50XG4gICAqIChwb3BzIGl0IGZyb20gdGhlIHN0YWNrIG9mIGhvb2tzIGlmIGhvb2sgbm90IHNwZWNpZmllZClcbiAgICpcbiAgICogQHBhcmFtIGVudHJ5UG9pbnQgZW50cnkgcG9pbnQgZm9yIHRoZSBob29rIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gaG9va0Z1bmN0aW9uIG9wdGlvbmFsIHNwZWNpZmljIGhvb2sgdG8gcmVtb3ZlXG4gICAqIEByZXR1cm5zIHJlbW92ZWQgaG9va1xuICAgKi9cbiAgcmVtb3ZlSG9vayhcbiAgICBlbnRyeVBvaW50OiAndXBvblNhbml0aXplQXR0cmlidXRlJyxcbiAgICBob29rRnVuY3Rpb24/OiBVcG9uU2FuaXRpemVBdHRyaWJ1dGVIb29rXG4gICk6IFVwb25TYW5pdGl6ZUF0dHJpYnV0ZUhvb2sgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIERPTVB1cmlmeSBob29rcyBhdCBhIGdpdmVuIGVudHJ5UG9pbnRcbiAgICpcbiAgICogQHBhcmFtIGVudHJ5UG9pbnQgZW50cnkgcG9pbnQgZm9yIHRoZSBob29rcyB0byByZW1vdmVcbiAgICovXG4gIHJlbW92ZUhvb2tzKGVudHJ5UG9pbnQ6IEhvb2tOYW1lKTogdm9pZDtcblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgRE9NUHVyaWZ5IGhvb2tzLlxuICAgKi9cbiAgcmVtb3ZlQWxsSG9va3MoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBbiBlbGVtZW50IHJlbW92ZWQgYnkgRE9NUHVyaWZ5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbW92ZWRFbGVtZW50IHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgd2FzIHJlbW92ZWQuXG4gICAqL1xuICBlbGVtZW50OiBOb2RlO1xufVxuXG4vKipcbiAqIEFuIGVsZW1lbnQgcmVtb3ZlZCBieSBET01QdXJpZnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3ZlZEF0dHJpYnV0ZSB7XG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlIHRoYXQgd2FzIHJlbW92ZWQuXG4gICAqL1xuICBhdHRyaWJ1dGU6IEF0dHIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0aGF0IHRoZSBhdHRyaWJ1dGUgd2FzIHJlbW92ZWQuXG4gICAqL1xuICBmcm9tOiBOb2RlO1xufVxuXG50eXBlIEJhc2ljSG9va05hbWUgPVxuICB8ICdiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzJ1xuICB8ICdhZnRlclNhbml0aXplRWxlbWVudHMnXG4gIHwgJ3Vwb25TYW5pdGl6ZVNoYWRvd05vZGUnO1xudHlwZSBFbGVtZW50SG9va05hbWUgPSAnYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzJyB8ICdhZnRlclNhbml0aXplQXR0cmlidXRlcyc7XG50eXBlIERvY3VtZW50RnJhZ21lbnRIb29rTmFtZSA9XG4gIHwgJ2JlZm9yZVNhbml0aXplU2hhZG93RE9NJ1xuICB8ICdhZnRlclNhbml0aXplU2hhZG93RE9NJztcbnR5cGUgVXBvblNhbml0aXplRWxlbWVudEhvb2tOYW1lID0gJ3Vwb25TYW5pdGl6ZUVsZW1lbnQnO1xudHlwZSBVcG9uU2FuaXRpemVBdHRyaWJ1dGVIb29rTmFtZSA9ICd1cG9uU2FuaXRpemVBdHRyaWJ1dGUnO1xuXG5pbnRlcmZhY2UgSG9va3NNYXAge1xuICBiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzOiBOb2RlSG9va1tdO1xuICBhZnRlclNhbml0aXplRWxlbWVudHM6IE5vZGVIb29rW107XG4gIGJlZm9yZVNhbml0aXplU2hhZG93RE9NOiBEb2N1bWVudEZyYWdtZW50SG9va1tdO1xuICB1cG9uU2FuaXRpemVTaGFkb3dOb2RlOiBOb2RlSG9va1tdO1xuICBhZnRlclNhbml0aXplU2hhZG93RE9NOiBEb2N1bWVudEZyYWdtZW50SG9va1tdO1xuICBiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXM6IEVsZW1lbnRIb29rW107XG4gIGFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzOiBFbGVtZW50SG9va1tdO1xuICB1cG9uU2FuaXRpemVFbGVtZW50OiBVcG9uU2FuaXRpemVFbGVtZW50SG9va1tdO1xuICB1cG9uU2FuaXRpemVBdHRyaWJ1dGU6IFVwb25TYW5pdGl6ZUF0dHJpYnV0ZUhvb2tbXTtcbn1cblxudHlwZSBBcnJheUVsZW1lbnQ8VD4gPSBUIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT4gPyBVIDogbmV2ZXI7XG5cbnR5cGUgSG9va0Z1bmN0aW9uID0gQXJyYXlFbGVtZW50PEhvb2tzTWFwW2tleW9mIEhvb2tzTWFwXT47XG5cbmV4cG9ydCB0eXBlIEhvb2tOYW1lID1cbiAgfCBCYXNpY0hvb2tOYW1lXG4gIHwgRWxlbWVudEhvb2tOYW1lXG4gIHwgRG9jdW1lbnRGcmFnbWVudEhvb2tOYW1lXG4gIHwgVXBvblNhbml0aXplRWxlbWVudEhvb2tOYW1lXG4gIHwgVXBvblNhbml0aXplQXR0cmlidXRlSG9va05hbWU7XG5cbmV4cG9ydCB0eXBlIE5vZGVIb29rID0gKFxuICB0aGlzOiBET01QdXJpZnksXG4gIGN1cnJlbnROb2RlOiBOb2RlLFxuICBob29rRXZlbnQ6IG51bGwsXG4gIGNvbmZpZzogQ29uZmlnXG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIEVsZW1lbnRIb29rID0gKFxuICB0aGlzOiBET01QdXJpZnksXG4gIGN1cnJlbnROb2RlOiBFbGVtZW50LFxuICBob29rRXZlbnQ6IG51bGwsXG4gIGNvbmZpZzogQ29uZmlnXG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50RnJhZ21lbnRIb29rID0gKFxuICB0aGlzOiBET01QdXJpZnksXG4gIGN1cnJlbnROb2RlOiBEb2N1bWVudEZyYWdtZW50LFxuICBob29rRXZlbnQ6IG51bGwsXG4gIGNvbmZpZzogQ29uZmlnXG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFVwb25TYW5pdGl6ZUVsZW1lbnRIb29rID0gKFxuICB0aGlzOiBET01QdXJpZnksXG4gIGN1cnJlbnROb2RlOiBOb2RlLFxuICBob29rRXZlbnQ6IFVwb25TYW5pdGl6ZUVsZW1lbnRIb29rRXZlbnQsXG4gIGNvbmZpZzogQ29uZmlnXG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFVwb25TYW5pdGl6ZUF0dHJpYnV0ZUhvb2sgPSAoXG4gIHRoaXM6IERPTVB1cmlmeSxcbiAgY3VycmVudE5vZGU6IEVsZW1lbnQsXG4gIGhvb2tFdmVudDogVXBvblNhbml0aXplQXR0cmlidXRlSG9va0V2ZW50LFxuICBjb25maWc6IENvbmZpZ1xuKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwb25TYW5pdGl6ZUVsZW1lbnRIb29rRXZlbnQge1xuICB0YWdOYW1lOiBzdHJpbmc7XG4gIGFsbG93ZWRUYWdzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcG9uU2FuaXRpemVBdHRyaWJ1dGVIb29rRXZlbnQge1xuICBhdHRyTmFtZTogc3RyaW5nO1xuICBhdHRyVmFsdWU6IHN0cmluZztcbiAga2VlcEF0dHI6IGJvb2xlYW47XG4gIGFsbG93ZWRBdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgZm9yY2VLZWVwQXR0cjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBBIGBXaW5kb3dgLWxpa2Ugb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgYW5kIHR5cGVzIHRoYXQgRE9NUHVyaWZ5IHJlcXVpcmVzLlxuICovXG5leHBvcnQgdHlwZSBXaW5kb3dMaWtlID0gUGljazxcbiAgdHlwZW9mIGdsb2JhbFRoaXMsXG4gIHwgJ0RvY3VtZW50RnJhZ21lbnQnXG4gIHwgJ0hUTUxUZW1wbGF0ZUVsZW1lbnQnXG4gIHwgJ05vZGUnXG4gIHwgJ0VsZW1lbnQnXG4gIHwgJ05vZGVGaWx0ZXInXG4gIHwgJ05hbWVkTm9kZU1hcCdcbiAgfCAnSFRNTEZvcm1FbGVtZW50J1xuICB8ICdET01QYXJzZXInXG4+ICYge1xuICBkb2N1bWVudD86IERvY3VtZW50O1xuICBNb3pOYW1lZEF0dHJNYXA/OiB0eXBlb2Ygd2luZG93Lk5hbWVkTm9kZU1hcDtcbn0gJiBQaWNrPFRydXN0ZWRUeXBlc1dpbmRvdywgJ3RydXN0ZWRUeXBlcyc+O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvbWVzc2FnZS1kaXNwYXRjaC5qc1xuICogQ2hhdCBtZXNzYWdlIGRpc3BhdGNoOiBzZW5kTWVzc2FnZSwgaW50YWtlIGNvbmZpcm1hdGlvbiBjYXJkLFxuICogcHJpb3ItY2xhcmlmaWNhdGlvbiBwcmVsb2FkLlxuICpcbiAqIERFUEVOREVOQ0lFUyAoYWxsIG9uIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIC0gcGFyc2VNZXNzYWdlUmVzcG9uc2UgKHZhbGlkYXRvcnMuanMpXG4gKiAgIC0gc2V0TG9hZGluZywgbGxtRmV0Y2ggKGZldGNoLXV0aWxzLmpzKVxuICogICAtIGFwcGVuZE1lc3NhZ2UsIGFwcGVuZFJldHJ5TWVzc2FnZSwgYXBwZW5kUmF3SHRtbCAobWVzc2FnZS1xdWV1ZS5qcylcbiAqICAgLSBub3JtYWxpemVUZXh0LCBlc2NhcGVIdG1sICh1dGlscy5qcylcbiAqICAgLSBmZXRjaFN0YXR1cyAoYXBpLWNsaWVudC5qcylcbiAqICAgLSBhbmFseXplSm9iIChqb2ItYW5hbHlzaXMuanMpXG4gKiAgIC0gc2VuZEFjdGlvbiAoc2Vzc2lvbi1hY3Rpb25zLmpzKVxuICogICAtIHNob3dUYWJsZUJhc2VkUmV2aWV3IChyZXZpZXctdGFibGUtYmFzZS5qcywgVGllciA0KVxuICogICAtIGhhbmRsZUV4cGVyaWVuY2VSZXNwb25zZSAoZXhwZXJpZW5jZS1yZXZpZXcuanMsIFRpZXIgNSlcbiAqICAgLSBoYW5kbGVTa2lsbHNSZXNwb25zZSAoc2tpbGxzLXJldmlldy5qcywgVGllciA1KVxuICogICAtIGhhbmRsZVF1ZXN0aW9uUmVzcG9uc2UgKHF1ZXN0aW9ucy1wYW5lbC5qcylcbiAqICAgLSBleHRyYWN0Rmlyc3RKc29uT2JqZWN0LCBoYW5kbGVDdXN0b21pemF0aW9uUmVzcG9uc2UgKGFwcC5qcyBvcmNoZXN0cmF0b3IpXG4gKiAgIC0gc3RhdGVNYW5hZ2VyIChzdGF0ZS1tYW5hZ2VyLmpzIFx1MjAxNCBpc0xvYWRpbmcoKSlcbiAqICAgLSBxdWVzdGlvbkFuc3dlcnMsIHBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgKHdpbmRvdyBnbG9iYWxzKVxuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcignbWVzc2FnZS1kaXNwYXRjaCcpO1xuXG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgZ2V0U2Vzc2lvbklkRnJvbVVSTCB9IGZyb20gJy4vYXBpLWNsaWVudC5qcyc7XG5cbmxldCBfcGVuZGluZ1Bvc3RJbnRha2VDb250aW51YXRpb24gPSBudWxsO1xuY29uc3QgUkVUUllfUE9MSUNZX1NUT1JBR0VfS0VZID0gJ2N2LWJ1aWxkZXItcmV0cnktcG9saWN5JztcbmxldCBfcmV0cnlBdHRlbXB0Q291bnQgPSAwO1xubGV0IF9yZXRyeVRpbWVyID0gbnVsbDtcbmxldCBfcmV0cnlJbnRlcnZhbCA9IG51bGw7XG5cbmZ1bmN0aW9uIF9jbGVhclJldHJ5VGltZXJzKCkge1xuICBpZiAoX3JldHJ5VGltZXIpIHtcbiAgICBjbGVhclRpbWVvdXQoX3JldHJ5VGltZXIpO1xuICAgIF9yZXRyeVRpbWVyID0gbnVsbDtcbiAgfVxuICBpZiAoX3JldHJ5SW50ZXJ2YWwpIHtcbiAgICBjbGVhckludGVydmFsKF9yZXRyeUludGVydmFsKTtcbiAgICBfcmV0cnlJbnRlcnZhbCA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2dldFJldHJ5UG9saWN5KCkge1xuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBiYXNlTXM6IDE1MDAsXG4gICAgY2FwTXM6IDYwMDAwLFxuICAgIG1heEF0dGVtcHRzOiA2LFxuICAgIGF1dG9SZXRyeTogdHJ1ZSxcbiAgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShSRVRSWV9QT0xJQ1lfU1RPUkFHRV9LRVkpO1xuICAgIGlmICghcmF3KSByZXR1cm4gZGVmYXVsdHM7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpO1xuICAgIHJldHVybiB7XG4gICAgICBiYXNlTXM6IE1hdGgubWF4KDIwMCwgTnVtYmVyKHBhcnNlZC5iYXNlTXMgfHwgZGVmYXVsdHMuYmFzZU1zKSksXG4gICAgICBjYXBNczogTWF0aC5tYXgoMTAwMCwgTnVtYmVyKHBhcnNlZC5jYXBNcyB8fCBkZWZhdWx0cy5jYXBNcykpLFxuICAgICAgbWF4QXR0ZW1wdHM6IE1hdGgubWF4KDEsIE51bWJlcihwYXJzZWQubWF4QXR0ZW1wdHMgfHwgZGVmYXVsdHMubWF4QXR0ZW1wdHMpKSxcbiAgICAgIGF1dG9SZXRyeTogcGFyc2VkLmF1dG9SZXRyeSAhPT0gZmFsc2UsXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRzO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jYWxjdWxhdGVSZXRyeURlbGF5TXMoa2luZCwgZXJyb3IpIHtcbiAgY29uc3QgcG9saWN5ID0gX2dldFJldHJ5UG9saWN5KCk7XG4gIGNvbnN0IGV4cCA9IE1hdGgubWluKHBvbGljeS5jYXBNcywgcG9saWN5LmJhc2VNcyAqICgyICoqIF9yZXRyeUF0dGVtcHRDb3VudCkpO1xuICBjb25zdCBqaXR0ZXIgPSBNYXRoLnJvdW5kKGV4cCAqICgwLjEgKyBNYXRoLnJhbmRvbSgpICogMC4xNSkpO1xuICBsZXQgZGVsYXlNcyA9IE1hdGgubWluKHBvbGljeS5jYXBNcywgZXhwICsgaml0dGVyKTtcblxuICBpZiAoa2luZCA9PT0gJ3JhdGUtbGltaXRlZCcpIHtcbiAgICBjb25zdCByZXRyeUFmdGVyU2VjID0gTnVtYmVyKGVycm9yPy5yZXRyeUFmdGVyU2VjIHx8IDApO1xuICAgIGlmIChyZXRyeUFmdGVyU2VjID4gMCkge1xuICAgICAgZGVsYXlNcyA9IE1hdGgubWF4KGRlbGF5TXMsIHJldHJ5QWZ0ZXJTZWMgKiAxMDAwKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlbGF5TXM7XG59XG5cbmZ1bmN0aW9uIF9zY2hlZHVsZVJldHJ5KHRleHQsIGRlcml2ZWQsIGVycm9yKSB7XG4gIF9jbGVhclJldHJ5VGltZXJzKCk7XG4gIGNvbnN0IHBvbGljeSA9IF9nZXRSZXRyeVBvbGljeSgpO1xuXG4gIC8vIENsaWVudCBlcnJvcnMgKDR4eCkgYW5kIGF1dGggZmFpbHVyZXMgYXJlIG5vdCB0cmFuc2llbnQ7IGRvIG5vdCBhdXRvLXJldHJ5LlxuICBjb25zdCBOT05fUkVUUllBQkxFID0gbmV3IFNldChbJ2NsaWVudC1lcnJvcicsICdhdXRoLXJlcXVpcmVkJ10pO1xuICBjb25zdCBjYW5BdXRvUmV0cnkgPSBwb2xpY3kuYXV0b1JldHJ5XG4gICAgJiYgX3JldHJ5QXR0ZW1wdENvdW50IDwgcG9saWN5Lm1heEF0dGVtcHRzXG4gICAgJiYgIU5PTl9SRVRSWUFCTEUuaGFzKGRlcml2ZWQua2luZCk7XG5cbiAgY29uc3QgZGVsYXlNcyA9IF9jYWxjdWxhdGVSZXRyeURlbGF5TXMoZGVyaXZlZC5raW5kLCBlcnJvcik7XG4gIGNvbnN0IHRvdGFsU2Vjb25kcyA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChkZWxheU1zIC8gMTAwMCkpO1xuXG4gIGNvbnN0IHJldHJ5QWN0aW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lc3NhZ2UtaW5wdXQnKTtcbiAgICBpZiAoaW5wdXQpIGlucHV0LnZhbHVlID0gdGV4dDtcbiAgICBzZW5kTWVzc2FnZSgpO1xuICB9O1xuXG4gIGxldCByZXRyeU1lc3NhZ2U7XG4gIGNvbnN0IGNhbmNlbEZuID0gY2FuQXV0b1JldHJ5ID8gKCkgPT4ge1xuICAgIF9jbGVhclJldHJ5VGltZXJzKCk7XG4gICAgaWYgKHJldHJ5TWVzc2FnZSkgcmV0cnlNZXNzYWdlLnJlbW92ZSgpO1xuICB9IDogbnVsbDtcblxuICByZXRyeU1lc3NhZ2UgPSBhcHBlbmRSZXRyeU1lc3NhZ2UoXG4gICAgYFx1MjZBMFx1RkUwRiAke2Vycm9yLm1lc3NhZ2V9YCxcbiAgICAoKSA9PiB7XG4gICAgICBfY2xlYXJSZXRyeVRpbWVycygpO1xuICAgICAgX3JldHJ5QXR0ZW1wdENvdW50ICs9IDE7XG4gICAgICByZXRyeUFjdGlvbigpO1xuICAgIH0sXG4gICAgY2FuQXV0b1JldHJ5ID8gYFJldHJ5IGluICR7dG90YWxTZWNvbmRzfXNgIDogJ1JldHJ5JyxcbiAgICBjYW5jZWxGbixcbiAgKTtcblxuICBpZiAoIWNhbkF1dG9SZXRyeSkgcmV0dXJuO1xuXG4gIGNvbnN0IHJldHJ5QnRuID0gcmV0cnlNZXNzYWdlPy5xdWVyeVNlbGVjdG9yKCdidXR0b24nKTtcbiAgbGV0IHJlbWFpbmluZyA9IHRvdGFsU2Vjb25kcztcbiAgaWYgKHJldHJ5QnRuKSB7XG4gICAgcmV0cnlCdG4udGV4dENvbnRlbnQgPSBgUmV0cnkgaW4gJHtyZW1haW5pbmd9c2A7XG4gICAgaWYgKGRlcml2ZWQua2luZCA9PT0gJ3JhdGUtbGltaXRlZCcpIHtcbiAgICAgIHJldHJ5QnRuLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHJldHJ5QnRuLnN0eWxlLm9wYWNpdHkgPSAnMC43JztcbiAgICAgIHJldHJ5QnRuLnN0eWxlLmN1cnNvciA9ICdub3QtYWxsb3dlZCc7XG4gICAgfVxuICB9XG5cbiAgX3JldHJ5SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgcmVtYWluaW5nIC09IDE7XG4gICAgaWYgKHJldHJ5QnRuICYmIHJlbWFpbmluZyA+IDApIHtcbiAgICAgIHJldHJ5QnRuLnRleHRDb250ZW50ID0gYFJldHJ5IGluICR7cmVtYWluaW5nfXNgO1xuICAgIH1cbiAgICBpZiAocmVtYWluaW5nIDw9IDApIHtcbiAgICAgIGlmIChyZXRyeUJ0bikge1xuICAgICAgICByZXRyeUJ0bi50ZXh0Q29udGVudCA9ICdSZXRyeSBOb3cnO1xuICAgICAgICByZXRyeUJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICByZXRyeUJ0bi5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgICAgIHJldHJ5QnRuLnN0eWxlLmN1cnNvciA9ICcnO1xuICAgICAgfVxuICAgICAgY2xlYXJJbnRlcnZhbChfcmV0cnlJbnRlcnZhbCk7XG4gICAgICBfcmV0cnlJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9LCAxMDAwKTtcblxuICBfcmV0cnlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIF9yZXRyeVRpbWVyID0gbnVsbDtcbiAgICBfcmV0cnlBdHRlbXB0Q291bnQgKz0gMTtcbiAgICByZXRyeU1lc3NhZ2U/LnJlbW92ZSgpO1xuICAgIHJldHJ5QWN0aW9uKCk7XG4gIH0sIGRlbGF5TXMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfcGFyc2VBcGlKc29uUmVzcG9uc2UocmVzcG9uc2UsIGVuZHBvaW50KSB7XG4gIGNvbnN0IHN0YXR1cyA9IE51bWJlcihyZXNwb25zZT8uc3RhdHVzIHx8IDApO1xuICBjb25zdCBzdGF0dXNUZXh0ID0gcmVzcG9uc2U/LnN0YXR1c1RleHQgfHwgJ1Vua25vd24gU3RhdHVzJztcbiAgY29uc3QgY29udGVudFR5cGUgPSAocmVzcG9uc2U/LmhlYWRlcnM/LmdldCgnY29udGVudC10eXBlJykgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHJhdyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgbGV0IGRldGFpbCA9IHN0YXR1c1RleHQ7XG4gICAgaWYgKGNvbnRlbnRUeXBlLmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHJhdyB8fCAne30nKTtcbiAgICAgICAgZGV0YWlsID0gcGF5bG9hZD8uZXJyb3IgfHwgcGF5bG9hZD8ubWVzc2FnZSB8fCBkZXRhaWw7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gS2VlcCBmYWxsYmFjayBkZXRhaWwgaWYgbWFsZm9ybWVkIEpTT04gZXJyb3IgcGF5bG9hZC5cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChyYXcgfHwgJycpLnRyaW0oKS5zdGFydHNXaXRoKCc8JykpIHtcbiAgICAgIGRldGFpbCA9ICdzZXJ2ZXIgcmV0dXJuZWQgSFRNTCBpbnN0ZWFkIG9mIEpTT04gKHBvc3NpYmxlIHNlc3Npb24gcmVkaXJlY3Qgb3IgYmFja2VuZCBlcnJvciknO1xuICAgIH0gZWxzZSBpZiAoKHJhdyB8fCAnJykudHJpbSgpKSB7XG4gICAgICBkZXRhaWwgPSByYXcudHJpbSgpLnNsaWNlKDAsIDIyMCk7XG4gICAgfVxuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGAke3N0YXR1c306ICR7ZGV0YWlsfWApO1xuICAgIGVycm9yLnN0YXR1cyA9IHN0YXR1cztcbiAgICBlcnJvci5yZXRyeUFmdGVyU2VjID0gTnVtYmVyKHJlc3BvbnNlPy5oZWFkZXJzPy5nZXQoJ3JldHJ5LWFmdGVyJykgfHwgMCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBpZiAoIWNvbnRlbnRUeXBlLmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICBjb25zdCBzbmlwcGV0ID0gKHJhdyB8fCAnJykudHJpbSgpLnNsaWNlKDAsIDgwKTtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXG4gICAgICBgRXhwZWN0ZWQgSlNPTiBmcm9tICR7ZW5kcG9pbnR9LCBnb3QgJHtjb250ZW50VHlwZSB8fCAndW5rbm93biBjb250ZW50IHR5cGUnfSR7c25pcHBldCA/IGA6ICR7c25pcHBldH1gIDogJyd9YCxcbiAgICApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VNZXNzYWdlUmVzcG9uc2UoSlNPTi5wYXJzZShyYXcgfHwgJ3t9JykpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBKU09OIGZyb20gJHtlbmRwb2ludH06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfc2V0TGl2ZUxsbVN0YXRlKGtpbmQsIHRleHQsIGljb24gPSAnJywgdG9vbHRpcCA9ICcnKSB7XG4gIGlmICh0eXBlb2YgX3VwZGF0ZUxsbVN0YXR1c1BpbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICBfdXBkYXRlTGxtU3RhdHVzUGlsbChraW5kLCB0ZXh0LCBpY29uLCB0b29sdGlwKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfZGVyaXZlRXJyb3JTdGF0ZShlcnJvcikge1xuICBjb25zdCBtZXNzYWdlID0gU3RyaW5nKGVycm9yPy5tZXNzYWdlIHx8IGVycm9yIHx8ICdVbmtub3duIGVycm9yJyk7XG4gIGNvbnN0IGxvd2VyID0gbWVzc2FnZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBzdGF0dXMgPSBOdW1iZXIoZXJyb3I/LnN0YXR1cyB8fCAwKTtcblxuICBpZiAoc3RhdHVzID09PSA0MDEgfHwgc3RhdHVzID09PSA0MDMgfHwgbWVzc2FnZS5zdGFydHNXaXRoKCc0MDE6JykgfHwgbWVzc2FnZS5zdGFydHNXaXRoKCc0MDM6JykgfHwgbG93ZXIuaW5jbHVkZXMoJ2F1dGgnKSkge1xuICAgIHJldHVybiB7XG4gICAgICBraW5kOiAnYXV0aC1yZXF1aXJlZCcsXG4gICAgICB0ZXh0OiAnQXV0aGVudGljYXRpb24gcmVxdWlyZWQnLFxuICAgICAgaWNvbjogJ1x1RDgzRFx1REQxMScsXG4gICAgICB0b29sdGlwOiAnQXV0aGVudGljYXRpb24gZmFpbGVkLiBDaGVjayBBUEkga2V5L3Rva2VuIG9yIHNpZ24gaW4gYWdhaW4uJyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHN0YXR1cyA9PT0gNDI5IHx8IG1lc3NhZ2Uuc3RhcnRzV2l0aCgnNDI5OicpIHx8IGxvd2VyLmluY2x1ZGVzKCdyYXRlIGxpbWl0JykpIHtcbiAgICByZXR1cm4ge1xuICAgICAga2luZDogJ3JhdGUtbGltaXRlZCcsXG4gICAgICB0ZXh0OiAnUmF0ZSBsaW1pdGVkJyxcbiAgICAgIGljb246ICdcdTIzRjMnLFxuICAgICAgdG9vbHRpcDogJ1Byb3ZpZGVyIHJhdGUgbGltaXQgcmVhY2hlZC4gV2FpdCBicmllZmx5IGFuZCByZXRyeS4nLFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgc3RhdHVzID09PSA1MDIgfHxcbiAgICBzdGF0dXMgPT09IDUwMyB8fFxuICAgIHN0YXR1cyA9PT0gNTA0IHx8XG4gICAgbWVzc2FnZS5zdGFydHNXaXRoKCc1MDI6JykgfHxcbiAgICBtZXNzYWdlLnN0YXJ0c1dpdGgoJzUwMzonKSB8fFxuICAgIG1lc3NhZ2Uuc3RhcnRzV2l0aCgnNTA0OicpIHx8XG4gICAgbG93ZXIuaW5jbHVkZXMoJ3RpbWVvdXQnKSB8fFxuICAgIGxvd2VyLmluY2x1ZGVzKCd1bmF2YWlsYWJsZScpIHx8XG4gICAgbG93ZXIuaW5jbHVkZXMoJ2Nhbm5vdCByZWFjaCcpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBraW5kOiAndW5hdmFpbGFibGUnLFxuICAgICAgdGV4dDogJ1Byb3ZpZGVyIHVuYXZhaWxhYmxlJyxcbiAgICAgIGljb246ICdcdTI2MDEnLFxuICAgICAgdG9vbHRpcDogJ1Byb3ZpZGVyIGlzIGN1cnJlbnRseSB1bmF2YWlsYWJsZSBvciB1bnJlYWNoYWJsZS4gUmV0cnkgc29vbi4nLFxuICAgIH07XG4gIH1cblxuICAvLyA0eHggY2xpZW50IGVycm9ycyBhcmUgbm90IHRyYW5zaWVudCBcdTIwMTQgcmV0cnlpbmcgd2lsbCBub3QgZml4IHRoZW0uXG4gIGlmIChzdGF0dXMgPj0gNDAwICYmIHN0YXR1cyA8IDUwMCkge1xuICAgIHJldHVybiB7XG4gICAgICBraW5kOiAnY2xpZW50LWVycm9yJyxcbiAgICAgIHRleHQ6ICdSZXF1ZXN0IGVycm9yJyxcbiAgICAgIGljb246ICdcdTI2QTAnLFxuICAgICAgdG9vbHRpcDogbWVzc2FnZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiAnZXJyb3InLFxuICAgIHRleHQ6ICdDb25uZWN0aW9uIGZhaWxlZCcsXG4gICAgaWNvbjogJ1x1MjZBMCcsXG4gICAgdG9vbHRpcDogbWVzc2FnZSxcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBEZWZhdWx0IExMTSBtZXNzYWdlIGhhbmRsZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5hc3luYyBmdW5jdGlvbiBfaGFuZGxlTExNTWVzc2FnZSh0ZXh0KSB7XG4gIF9jbGVhclJldHJ5VGltZXJzKCk7XG4gIHNldExvYWRpbmcodHJ1ZSwgJ1RoaW5raW5nXHUyMDI2Jyk7XG4gIF9zZXRMaXZlTGxtU3RhdGUoJ2Nvbm5lY3RpbmcnLCAnQ29ubmVjdGluZ1x1MjAyNicsICdcdTI5RDcnLCAnU2VuZGluZyByZXF1ZXN0IHRvIHByb3ZpZGVyLicpO1xuICBsZXQgdGVybWluYWxTdGF0ZSA9IG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgbGxtRmV0Y2goJy9hcGkvbWVzc2FnZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2U6IHRleHQgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IF9wYXJzZUFwaUpzb25SZXNwb25zZShyZXMsICcvYXBpL21lc3NhZ2UnKTtcblxuICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1zZyA9IGRhdGEuZXJyb3IudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGRlcml2ZWQgPSBfZGVyaXZlRXJyb3JTdGF0ZShuZXcgRXJyb3IoZXJyb3JNc2cpKTtcbiAgICAgIF9zZXRMaXZlTGxtU3RhdGUoZGVyaXZlZC5raW5kLCBkZXJpdmVkLnRleHQsIGRlcml2ZWQuaWNvbiwgZGVyaXZlZC50b29sdGlwKTtcbiAgICAgIF9zY2hlZHVsZVJldHJ5KHRleHQsIGRlcml2ZWQsIG5ldyBFcnJvcihlcnJvck1zZykpO1xuICAgICAgdGVybWluYWxTdGF0ZSA9IGRlcml2ZWQ7XG4gICAgICBsb2cuZXJyb3IoJ1NlcnZlciBlcnJvcjonLCBkYXRhLmVycm9yKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEucmVzcG9uc2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNsZWFuUmVzcG9uc2UgPSBkYXRhLnJlc3BvbnNlO1xuICAgICAgICBjb25zdCBwYXJzZWRDdXN0b21pemF0aW9uID0gZXh0cmFjdEZpcnN0SnNvbk9iamVjdChjbGVhblJlc3BvbnNlKTtcbiAgICAgICAgaWYgKHBhcnNlZEN1c3RvbWl6YXRpb24gJiYgKHBhcnNlZEN1c3RvbWl6YXRpb24ucmVjb21tZW5kZWRfZXhwZXJpZW5jZXMgfHwgcGFyc2VkQ3VzdG9taXphdGlvbi5yZWNvbW1lbmRlZF9za2lsbHMpKSB7XG4gICAgICAgICAgY29uc3QganNvblN0YXJ0ID0gY2xlYW5SZXNwb25zZS5pbmRleE9mKCd7Jyk7XG4gICAgICAgICAgY29uc3QgdGV4dEJlZm9yZUpzb24gPSBqc29uU3RhcnQgPiAwID8gY2xlYW5SZXNwb25zZS5zdWJzdHJpbmcoMCwganNvblN0YXJ0KS50cmltKCkgOiAnJztcbiAgICAgICAgICBpZiAodGV4dEJlZm9yZUpzb24gJiYgIXRleHRCZWZvcmVKc29uLmluY2x1ZGVzKCd7XCJhY3Rpb25cIjonKSkge1xuICAgICAgICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgdGV4dEJlZm9yZUpzb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBoYW5kbGVDdXN0b21pemF0aW9uUmVzcG9uc2UocGFyc2VkQ3VzdG9taXphdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGNsZWFuUmVzcG9uc2UudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIGNsZWFuUmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZy5lcnJvcignRXJyb3IgcHJvY2Vzc2luZyBtZXNzYWdlIHJlc3BvbnNlOicsIGVyciwgZGF0YS5yZXNwb25zZSk7XG4gICAgICAgIGNvbnN0IGRlcml2ZWQgPSBfZGVyaXZlRXJyb3JTdGF0ZShlcnIpO1xuICAgICAgICBfc2V0TGl2ZUxsbVN0YXRlKGRlcml2ZWQua2luZCwgZGVyaXZlZC50ZXh0LCBkZXJpdmVkLmljb24sIGRlcml2ZWQudG9vbHRpcCk7XG4gICAgICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdTI2QTBcdUZFMEYgSSBlbmNvdW50ZXJlZCBhbiBpc3N1ZSBwcm9jZXNzaW5nIHRoYXQgcmVzcG9uc2U6ICR7ZXJyLm1lc3NhZ2V9LiBUaGUgY29udmVyc2F0aW9uIGhhcyBiZWVuIHNhdmVkLmApO1xuICAgICAgICB0ZXJtaW5hbFN0YXRlID0gZGVyaXZlZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbm5lY3RlZFN0YXRlID0geyBraW5kOiAnY29ubmVjdGVkJywgdGV4dDogJ0Nvbm5lY3RlZCcsIGljb246ICdcdTI3MTMnLCB0b29sdGlwOiAnUHJvdmlkZXIgcmVzcG9uZGVkIHN1Y2Nlc3NmdWxseSB0byBhIGxpdmUgcmVxdWVzdC4nIH07XG4gICAgICBfc2V0TGl2ZUxsbVN0YXRlKGNvbm5lY3RlZFN0YXRlLmtpbmQsIGNvbm5lY3RlZFN0YXRlLnRleHQsIGNvbm5lY3RlZFN0YXRlLmljb24sIGNvbm5lY3RlZFN0YXRlLnRvb2x0aXApO1xuICAgICAgdGVybWluYWxTdGF0ZSA9IGNvbm5lY3RlZFN0YXRlO1xuICAgICAgX3JldHJ5QXR0ZW1wdENvdW50ID0gMDtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLmVycm9yKCc9PT0gTUVTU0FHRSBFUlJPUiA9PT0nLCBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjayk7XG4gICAgaWYgKGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgLy8gVXNlciBjbGlja2VkIFN0b3AgXHUyMDE0IG1lc3NhZ2UgYWxyZWFkeSBzaG93biBieSBhYm9ydEN1cnJlbnRSZXF1ZXN0KCkuXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGVyaXZlZCA9IF9kZXJpdmVFcnJvclN0YXRlKGVycm9yKTtcbiAgICBfc2V0TGl2ZUxsbVN0YXRlKGRlcml2ZWQua2luZCwgZGVyaXZlZC50ZXh0LCBkZXJpdmVkLmljb24sIGRlcml2ZWQudG9vbHRpcCk7XG4gICAgX3NjaGVkdWxlUmV0cnkodGV4dCwgZGVyaXZlZCwgZXJyb3IpO1xuICAgIHRlcm1pbmFsU3RhdGUgPSBkZXJpdmVkO1xuICB9XG4gIHNldExvYWRpbmcoZmFsc2UpO1xuICBhd2FpdCBmZXRjaFN0YXR1cygpO1xuICBpZiAodGVybWluYWxTdGF0ZSkge1xuICAgIF9zZXRMaXZlTGxtU3RhdGUodGVybWluYWxTdGF0ZS5raW5kLCB0ZXJtaW5hbFN0YXRlLnRleHQsIHRlcm1pbmFsU3RhdGUuaWNvbiwgdGVybWluYWxTdGF0ZS50b29sdGlwKTtcbiAgfVxuICBpZiAodHlwZW9mIGZldGNoQW5kRGlzcGxheUxsbUxvZyA9PT0gJ2Z1bmN0aW9uJykgZmV0Y2hBbmREaXNwbGF5TGxtTG9nKCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTWVzc2FnZSBkaXNwYXRjaCB0YWJsZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEhhbmRsZXJzIGNoZWNrZWQgaW4gb3JkZXI7IGZpcnN0IG1hdGNoaW5nIHRlc3QoKSB3aW5zLlxuY29uc3QgX21lc3NhZ2VIYW5kbGVycyA9IFtcbiAge1xuICAgIHRlc3Q6IHQgPT4gdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdyZXZpZXcgcmVjb21tZW5kYXRpb25zJykgfHwgdC50b0xvd2VyQ2FzZSgpID09PSAncmV2aWV3JyxcbiAgICBoYW5kbGU6IGFzeW5jICgpID0+IHNob3dUYWJsZUJhc2VkUmV2aWV3KCksXG4gIH0sXG4gIHtcbiAgICB0ZXN0OiAoKSA9PiB3aW5kb3cud2FpdGluZ0ZvckV4cGVyaWVuY2VSZXNwb25zZSxcbiAgICBoYW5kbGU6IGFzeW5jIHQgPT4gaGFuZGxlRXhwZXJpZW5jZVJlc3BvbnNlKHQpLFxuICB9LFxuICB7XG4gICAgdGVzdDogKCkgPT4gd2luZG93LndhaXRpbmdGb3JTa2lsbHNSZXNwb25zZSxcbiAgICBoYW5kbGU6IGFzeW5jIHQgPT4gaGFuZGxlU2tpbGxzUmVzcG9uc2UodCksXG4gIH0sXG4gIHtcbiAgICAvLyBQb3N0LWFuYWx5c2lzIHF1ZXN0aW9uIHJlc3BvbnNlIFx1MjAxNCBsb2NhbCBoYW5kbGVyICsgYmFja2VuZCBzYXZlLlxuICAgIHRlc3Q6ICgpID0+IHdpbmRvdy53YWl0aW5nRm9yUXVlc3Rpb25SZXNwb25zZSxcbiAgICBoYW5kbGU6IGFzeW5jIHQgPT4ge1xuICAgICAgY29uc3QgcXVlc3Rpb25IYW5kbGVkID0gaGFuZGxlUXVlc3Rpb25SZXNwb25zZSh0KTtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSwgJ1RoaW5raW5nXHUyMDI2Jyk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBsbG1GZXRjaCgnL2FwaS9tZXNzYWdlJywge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgbWVzc2FnZTogdCB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBfcGFyc2VBcGlKc29uUmVzcG9uc2UocmVzLCAnL2FwaS9tZXNzYWdlJyk7XG4gICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgbG9nLmVycm9yKCdCYWNrZW5kIGVycm9yIHNhdmluZyBxdWVzdGlvbiByZXNwb25zZTonLCBkYXRhLmVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnJlc3BvbnNlICYmICFxdWVzdGlvbkhhbmRsZWQpIHtcbiAgICAgICAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCBkYXRhLnJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIubmFtZSAhPT0gJ0Fib3J0RXJyb3InKSBsb2cuZXJyb3IoJz09PSBRVUVTVElPTiBSRVNQT05TRSBTQVZFIEVSUk9SID09PScsIGVycik7XG4gICAgICB9XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIGlmICghcXVlc3Rpb25IYW5kbGVkKSBhd2FpdCBfaGFuZGxlTExNTWVzc2FnZSh0KTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGVzdDogdCA9PiB0LnRvTG93ZXJDYXNlKCkgPT09ICdwcm9jZWVkJyxcbiAgICBoYW5kbGU6IGFzeW5jICgpID0+IHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zXG4gICAgICA/IHNob3dUYWJsZUJhc2VkUmV2aWV3KClcbiAgICAgIDogc2VuZEFjdGlvbigncmVjb21tZW5kX2N1c3RvbWl6YXRpb25zJyksXG4gIH0sXG4gIHtcbiAgICB0ZXN0OiAoKSA9PiB0cnVlLFxuICAgIGhhbmRsZTogX2hhbmRsZUxMTU1lc3NhZ2UsXG4gIH0sXG5dO1xuXG5hc3luYyBmdW5jdGlvbiBzZW5kTWVzc2FnZSgpIHtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVzc2FnZS1pbnB1dCcpO1xuICBjb25zdCB0ZXh0ID0gbm9ybWFsaXplVGV4dChpbnB1dC52YWx1ZSk7XG4gIGlmICghdGV4dCB8fCBzdGF0ZU1hbmFnZXIuaXNMb2FkaW5nKCkpIHJldHVybjtcblxuICBpZiAoIWdldFNlc3Npb25JZEZyb21VUkwoKSkge1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsICdcdTI2QTBcdUZFMEYgTm8gYWN0aXZlIHNlc3Npb24uIENyZWF0ZSBvciBsb2FkIGEgc2Vzc2lvbiBiZWZvcmUgc2VuZGluZyBtZXNzYWdlcy4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhcHBlbmRNZXNzYWdlKCd1c2VyJywgdGV4dCk7XG4gIGlucHV0LnZhbHVlID0gJyc7XG5cbiAgZm9yIChjb25zdCBoYW5kbGVyIG9mIF9tZXNzYWdlSGFuZGxlcnMpIHtcbiAgICBpZiAoaGFuZGxlci50ZXN0KHRleHQpKSB7XG4gICAgICBhd2FpdCBoYW5kbGVyLmhhbmRsZSh0ZXh0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBJbnRha2UgY29uZmlybWF0aW9uIGNhcmQgKEdBUC0yMylcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5hc3luYyBmdW5jdGlvbiBfc2hvd0ludGFrZUNvbmZpcm1DYXJkKGNvbnRpbnVhdGlvbiA9IG51bGwpIHtcbiAgaWYgKHR5cGVvZiBjb250aW51YXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBfcGVuZGluZ1Bvc3RJbnRha2VDb250aW51YXRpb24gPSBjb250aW51YXRpb247XG4gIH1cblxuICBsZXQgZXh0cmFjdGVkID0ge3JvbGU6ICcnLCBjb21wYW55OiAnJywgZGF0ZV9hcHBsaWVkOiAnJ307XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGxsbUZldGNoKCcvYXBpL2ludGFrZS1tZXRhZGF0YScpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLmNvbmZpcm1lZCkge1xuICAgICAgYXdhaXQgX3Byb2NlZWRBZnRlckludGFrZShjb250aW51YXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleHRyYWN0ZWQgPSBkYXRhO1xuICB9IGNhdGNoIChfZSkgeyAvKiBmYWxsIHRocm91Z2ggd2l0aCBlbXB0eSBkZWZhdWx0cyAqLyB9XG5cbiAgY29uc3QgdG9kYXkgPSBleHRyYWN0ZWQuZGF0ZV9hcHBsaWVkIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7XG4gIGNvbnN0IGNhcmRIdG1sID0gYFxuICAgIDxkaXYgY2xhc3M9XCJpbnRha2UtY29uZmlybS1jYXJkXCIgaWQ9XCJpbnRha2UtY29uZmlybS1jYXJkXCIgcm9sZT1cImZvcm1cIiBhcmlhLWxhYmVsPVwiQ29uZmlybSBqb2IgZGV0YWlsc1wiPlxuICAgICAgPGgzPlx1RDgzRFx1RENDQiBDb25maXJtIGpvYiBkZXRhaWxzPC9oMz5cbiAgICAgIDxwPlJldmlldyB0aGUgZXh0cmFjdGVkIGRldGFpbHMgYmVmb3JlIGFuYWx5c2lzIGJlZ2lucy4gRWRpdCBhbnkgZmllbGQgaWYgbmVlZGVkLjwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnRha2UtZmllbGQtcm93XCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJpbnRha2Utcm9sZS1pbnB1dFwiPlJvbGUgLyBKb2IgVGl0bGU8L2xhYmVsPlxuICAgICAgICA8aW5wdXQgaWQ9XCJpbnRha2Utcm9sZS1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCIke2VzY2FwZUh0bWwoZXh0cmFjdGVkLnJvbGUgfHwgJycpfVwiXG4gICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gU2VuaW9yIFNvZnR3YXJlIEVuZ2luZWVyXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnRha2UtZmllbGQtcm93XCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJpbnRha2UtY29tcGFueS1pbnB1dFwiPkNvbXBhbnk8L2xhYmVsPlxuICAgICAgICA8aW5wdXQgaWQ9XCJpbnRha2UtY29tcGFueS1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCIke2VzY2FwZUh0bWwoZXh0cmFjdGVkLmNvbXBhbnkgfHwgJycpfVwiXG4gICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gQWNtZSBDb3JwXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnRha2UtZmllbGQtcm93XCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJpbnRha2UtZGF0ZS1pbnB1dFwiPkRhdGUgQXBwbGllZDwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBpZD1cImludGFrZS1kYXRlLWlucHV0XCIgdHlwZT1cImRhdGVcIiB2YWx1ZT1cIiR7ZXNjYXBlSHRtbCh0b2RheSl9XCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnRha2UtYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiIG9uY2xpY2s9XCJfc2tpcEludGFrZUNhcmQoKVwiIHR5cGU9XCJidXR0b25cIj5Ta2lwPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tcHJpbWFyeVwiICAgb25jbGljaz1cIl9zdWJtaXRJbnRha2VDYXJkKClcIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJpbnRha2UtY29uZmlybS1idG5cIj5Db25maXJtICZhbXA7IENvbnRpbnVlPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gO1xuICBhcHBlbmRSYXdIdG1sKGNhcmRIdG1sKTtcblxuICBjb25zdCByb2xlSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW50YWtlLXJvbGUtaW5wdXQnKTtcbiAgaWYgKHJvbGVJbnB1dCAmJiAhcm9sZUlucHV0LnZhbHVlLnRyaW0oKSkgcm9sZUlucHV0LmZvY3VzKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9zdWJtaXRJbnRha2VDYXJkKGNvbnRpbnVhdGlvbiA9IG51bGwpIHtcbiAgY29uc3Qgcm9sZSAgICAgICAgID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnRha2Utcm9sZS1pbnB1dCcpPy52YWx1ZSAgICB8fCAnJykudHJpbSgpO1xuICBjb25zdCBjb21wYW55ICAgICAgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ludGFrZS1jb21wYW55LWlucHV0Jyk/LnZhbHVlIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGRhdGVfYXBwbGllZCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW50YWtlLWRhdGUtaW5wdXQnKT8udmFsdWUgICAgfHwgJycpLnRyaW0oKTtcblxuICBjb25zdCBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW50YWtlLWNvbmZpcm0tYnRuJyk7XG4gIGlmIChidG4pIGJ0bi5kaXNhYmxlZCA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBsbG1GZXRjaCgnL2FwaS9jb25maXJtLWludGFrZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe3JvbGUsIGNvbXBhbnksIGRhdGVfYXBwbGllZH0pLFxuICAgIH0pO1xuICB9IGNhdGNoIChfZSkgeyAvKiBub24tZmF0YWwgKi8gfVxuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnRha2UtY29uZmlybS1jYXJkJyk/LnJlbW92ZSgpO1xuICBhd2FpdCBfcHJvY2VlZEFmdGVySW50YWtlKGNvbnRpbnVhdGlvbik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9za2lwSW50YWtlQ2FyZChjb250aW51YXRpb24gPSBudWxsKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnRha2UtY29uZmlybS1jYXJkJyk/LnJlbW92ZSgpO1xuICBhd2FpdCBfcHJvY2VlZEFmdGVySW50YWtlKGNvbnRpbnVhdGlvbik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9wcm9jZWVkQWZ0ZXJJbnRha2UoY29udGludWF0aW9uID0gbnVsbCkge1xuICBjb25zdCBlZmZlY3RpdmVDb250aW51YXRpb24gPVxuICAgICh0eXBlb2YgY29udGludWF0aW9uID09PSAnZnVuY3Rpb24nICYmIGNvbnRpbnVhdGlvbilcbiAgICB8fCBfcGVuZGluZ1Bvc3RJbnRha2VDb250aW51YXRpb25cbiAgICB8fCAoYXN5bmMgKCkgPT4gYW5hbHl6ZUpvYigpKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBsbG1GZXRjaCgnL2FwaS9wcmlvci1jbGFyaWZpY2F0aW9ucycpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLmZvdW5kICYmIGRhdGEubWF0Y2hlcyAmJiBkYXRhLm1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYmVzdCA9IGRhdGEubWF0Y2hlc1swXTtcbiAgICAgIF9wZW5kaW5nUG9zdEludGFrZUNvbnRpbnVhdGlvbiA9IGVmZmVjdGl2ZUNvbnRpbnVhdGlvbjtcbiAgICAgIGF3YWl0IF9vZmZlclByaW9yQ2xhcmlmaWNhdGlvbnMoYmVzdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGNhdGNoIChfZSkgeyAvKiBmYWxsIHRocm91Z2ggKi8gfVxuXG4gIF9wZW5kaW5nUG9zdEludGFrZUNvbnRpbnVhdGlvbiA9IG51bGw7XG4gIGF3YWl0IGVmZmVjdGl2ZUNvbnRpbnVhdGlvbigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfb2ZmZXJQcmlvckNsYXJpZmljYXRpb25zKG1hdGNoKSB7XG4gIGNvbnN0IHJvbGVOYW1lID0gZXNjYXBlSHRtbChtYXRjaC5yb2xlIHx8IG1hdGNoLnBvc2l0aW9uX25hbWUgfHwgJ2Egc2ltaWxhciByb2xlJyk7XG4gIGNvbnN0IGJhbm5lckh0bWwgPSBgXG4gICAgPGRpdiBjbGFzcz1cInByaW9yLWNsYXJpZmljYXRpb25zLWJhbm5lclwiIGlkPVwicHJpb3ItY2xhci1iYW5uZXJcIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicGNiLXRleHRcIj5cbiAgICAgICAgXHVEODNEXHVEQ0ExIEZvdW5kIHByaW9yIGFuc3dlcnMgZnJvbSA8c3BhbiBjbGFzcz1cInBjYi1yb2xlXCI+JHtyb2xlTmFtZX08L3NwYW4+LlxuICAgICAgICBMb2FkIHRoZW0gYXMgZGVmYXVsdHMgZm9yIHRoZSBjbGFyaWZpY2F0aW9uIHF1ZXN0aW9ucz9cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1zZWNvbmRhcnlcIiBvbmNsaWNrPVwiX2Rpc21pc3NQcmlvckNsYXJpZmljYXRpb25zKClcIiB0eXBlPVwiYnV0dG9uXCI+Tm8gdGhhbmtzPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXByaW1hcnlcIiAgIG9uY2xpY2s9XCJfbG9hZFByaW9yQ2xhcmlmaWNhdGlvbnMoKVwiIHR5cGU9XCJidXR0b25cIiBpZD1cInBjYi1sb2FkLWJ0blwiPkxvYWQgZGVmYXVsdHM8L2J1dHRvbj5cbiAgICA8L2Rpdj5gO1xuICBhcHBlbmRSYXdIdG1sKGJhbm5lckh0bWwpO1xuXG4gIHdpbmRvdy5fcGVuZGluZ1ByaW9yQW5zd2VycyA9IG1hdGNoLmFuc3dlcnMgfHwge307XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9kaXNtaXNzUHJpb3JDbGFyaWZpY2F0aW9ucygpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByaW9yLWNsYXItYmFubmVyJyk/LnJlbW92ZSgpO1xuICBkZWxldGUgd2luZG93Ll9wZW5kaW5nUHJpb3JBbnN3ZXJzO1xuICBjb25zdCBjb250aW51YXRpb24gPSBfcGVuZGluZ1Bvc3RJbnRha2VDb250aW51YXRpb24gfHwgKGFzeW5jICgpID0+IGFuYWx5emVKb2IoKSk7XG4gIF9wZW5kaW5nUG9zdEludGFrZUNvbnRpbnVhdGlvbiA9IG51bGw7XG4gIGF3YWl0IGNvbnRpbnVhdGlvbigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfbG9hZFByaW9yQ2xhcmlmaWNhdGlvbnMoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmlvci1jbGFyLWJhbm5lcicpPy5yZW1vdmUoKTtcbiAgY29uc3QgYW5zd2VycyA9IHdpbmRvdy5fcGVuZGluZ1ByaW9yQW5zd2VycyB8fCB7fTtcbiAgZGVsZXRlIHdpbmRvdy5fcGVuZGluZ1ByaW9yQW5zd2VycztcbiAgaWYgKHR5cGVvZiBxdWVzdGlvbkFuc3dlcnMgPT09ICdvYmplY3QnICYmIHF1ZXN0aW9uQW5zd2VycyAhPT0gbnVsbCkge1xuICAgIE9iamVjdC5hc3NpZ24ocXVlc3Rpb25BbnN3ZXJzLCBhbnN3ZXJzKTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgYW5zd2Vycyk7XG4gIH1cbiAgY29uc3QgY29udGludWF0aW9uID0gX3BlbmRpbmdQb3N0SW50YWtlQ29udGludWF0aW9uIHx8IChhc3luYyAoKSA9PiBhbmFseXplSm9iKCkpO1xuICBfcGVuZGluZ1Bvc3RJbnRha2VDb250aW51YXRpb24gPSBudWxsO1xuICBhd2FpdCBjb250aW51YXRpb24oKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEVTIG1vZHVsZSBleHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZXhwb3J0IHtcbiAgX2hhbmRsZUxMTU1lc3NhZ2UsXG4gIF9tZXNzYWdlSGFuZGxlcnMsXG4gIHNlbmRNZXNzYWdlLFxuICBfc2hvd0ludGFrZUNvbmZpcm1DYXJkLFxuICBfc3VibWl0SW50YWtlQ2FyZCxcbiAgX3NraXBJbnRha2VDYXJkLFxuICBfcHJvY2VlZEFmdGVySW50YWtlLFxuICBfb2ZmZXJQcmlvckNsYXJpZmljYXRpb25zLFxuICBfZGlzbWlzc1ByaW9yQ2xhcmlmaWNhdGlvbnMsXG4gIF9sb2FkUHJpb3JDbGFyaWZpY2F0aW9ucyxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9xdWVzdGlvbnMtcGFuZWwuanNcbiAqIFBvc3QtYW5hbHlzaXMgY2xhcmlmeWluZyBxdWVzdGlvbnMgcGFuZWw6IHJlbmRlciwgZHJhZnQsIHN1Ym1pdC5cbiAqXG4gKiBERVBFTkRFTkNJRVMgKGFsbCBvbiBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICAtIGNsZWFuSnNvblJlc3BvbnNlICh1dGlscy5qcylcbiAqICAgLSBtZXJnZVBvc3RBbmFseXNpc1F1ZXN0aW9ucywgbm9ybWFsaXplUG9zdEFuYWx5c2lzUXVlc3Rpb25zIChqb2ItYW5hbHlzaXMuanMpXG4gKiAgIC0gYnVpbGRGYWxsYmFja1Bvc3RBbmFseXNpc1F1ZXN0aW9ucyAocmVjb21tZW5kYXRpb24taGVscGVycy5qcylcbiAqICAgLSBhcHBlbmRNZXNzYWdlIChtZXNzYWdlLXF1ZXVlLmpzKVxuICogICAtIHNlbmRBY3Rpb24gKHNlc3Npb24tYWN0aW9ucy5qcylcbiAqICAgLSBlc2NhcGVIdG1sICh1dGlscy5qcylcbiAqICAgLSBzd2l0Y2hUYWIgKHJldmlldy10YWJsZS1iYXNlLmpzLCBUaWVyIDQpXG4gKiAgIC0gc3RhdGVNYW5hZ2VyIChzdGF0ZS1tYW5hZ2VyLmpzIFx1MjAxNCBnZXRUYWJEYXRhKCkpXG4gKiAgIC0gcG9zdEFuYWx5c2lzUXVlc3Rpb25zLCBxdWVzdGlvbkFuc3dlcnMgKHdpbmRvdyBnbG9iYWxzKVxuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcigncXVlc3Rpb25zLXBhbmVsJyk7XG5cbmltcG9ydCB7IHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RhdGUgcGVyc2lzdGVuY2UgaGVscGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmFzeW5jIGZ1bmN0aW9uIHBlcnNpc3RQb3N0QW5hbHlzaXNTdGF0ZSgpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkod2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucykpIHtcbiAgICAgIHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cucXVlc3Rpb25BbnN3ZXJzIHx8IHR5cGVvZiB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzICE9PSAnb2JqZWN0Jykge1xuICAgICAgd2luZG93LnF1ZXN0aW9uQW5zd2VycyA9IHt9O1xuICAgIH1cblxuICAgIGF3YWl0IGZldGNoKCcvYXBpL3Bvc3QtYW5hbHlzaXMtcmVzcG9uc2VzJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgcXVlc3Rpb25zOiB3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zLFxuICAgICAgICBhbnN3ZXJzOiB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzXG4gICAgICB9KVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy53YXJuKCdGYWlsZWQgdG8gcGVyc2lzdCBwb3N0LWFuYWx5c2lzIHN0YXRlOicsIGVycm9yKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1hcmtkb3duIHJlbmRlcmVyIGZvciBxdWVzdGlvbiB0ZXh0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gcmVuZGVyUXVlc3Rpb25NYXJrZG93bihtYXJrZG93blRleHQpIHtcbiAgY29uc3Qgc2FmZSA9IGVzY2FwZUh0bWwobWFya2Rvd25UZXh0IHx8ICcnKTtcbiAgcmV0dXJuIHNhZmVcbiAgICAucmVwbGFjZSgvXFwqXFwqKC4rPylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKVxuICAgIC5yZXBsYWNlKC9cXCooLis/KVxcKi9nLCAnPGVtPiQxPC9lbT4nKVxuICAgIC5yZXBsYWNlKC9gKFteYF0rKWAvZywgJzxjb2RlPiQxPC9jb2RlPicpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCAnPGJyPicpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEFQSSBmZXRjaCBmb3IgcXVlc3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hQb3N0QW5hbHlzaXNRdWVzdGlvbnNGcm9tQXBpKGFuYWx5c2lzRGF0YSkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3Bvc3QtYW5hbHlzaXMtcXVlc3Rpb25zJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYW5hbHlzaXM6IGFuYWx5c2lzRGF0YSB9KVxuICAgIH0pO1xuICAgIGlmICghcmVzLm9rKSByZXR1cm4gW107XG4gICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVBvc3RBbmFseXNpc1F1ZXN0aW9ucyhwYXlsb2FkLnF1ZXN0aW9ucyk7XG4gIH0gY2F0Y2ggKGFwaUVycm9yKSB7XG4gICAgbG9nLndhcm4oJ0ZhaWxlZCB0byBmZXRjaCBwb3N0LWFuYWx5c2lzIHF1ZXN0aW9uczonLCBhcGlFcnJvcik7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTWFpbiBvcmNoZXN0cmF0b3I6IGNhbGxlZCBhZnRlciBhbmFseXplSm9iIGNvbXBsZXRlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmFzeW5jIGZ1bmN0aW9uIGFza1Bvc3RBbmFseXNpc1F1ZXN0aW9ucyhhbmFseXNpc1Jlc3VsdCwgcHJlZmVycmVkUXVlc3Rpb25zID0gbnVsbCkge1xuICB0cnkge1xuICAgIGxldCBkYXRhO1xuICAgIGlmIChhbmFseXNpc1Jlc3VsdCAhPT0gbnVsbCAmJiB0eXBlb2YgYW5hbHlzaXNSZXN1bHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBkYXRhID0gYW5hbHlzaXNSZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNsZWFuUmVzdWx0ID0gY2xlYW5Kc29uUmVzcG9uc2UoYW5hbHlzaXNSZXN1bHQpO1xuICAgICAgZGF0YSA9IHR5cGVvZiBjbGVhblJlc3VsdCA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGNsZWFuUmVzdWx0KSA6IGNsZWFuUmVzdWx0O1xuICAgIH1cblxuICAgIHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgPSBtZXJnZVBvc3RBbmFseXNpc1F1ZXN0aW9ucyhbXSwgcHJlZmVycmVkUXVlc3Rpb25zKTtcblxuICAgIGlmICh3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyA9IGF3YWl0IGZldGNoUG9zdEFuYWx5c2lzUXVlc3Rpb25zRnJvbUFwaShkYXRhKTtcbiAgICB9XG5cbiAgICBpZiAod2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgPSBidWlsZEZhbGxiYWNrUG9zdEFuYWx5c2lzUXVlc3Rpb25zKGRhdGEpO1xuICAgIH1cblxuICAgIGlmICghd2luZG93LnF1ZXN0aW9uQW5zd2VycyB8fCB0eXBlb2Ygd2luZG93LnF1ZXN0aW9uQW5zd2VycyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHdpbmRvdy5xdWVzdGlvbkFuc3dlcnMgPSB7fTtcbiAgICB9XG4gICAgYXdhaXQgcGVyc2lzdFBvc3RBbmFseXNpc1N0YXRlKCk7XG5cbiAgICBpZiAod2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZW5kZXJRdWVzdGlvbnNQYW5lbCgpO1xuICAgICAgc3dpdGNoVGFiKCdxdWVzdGlvbnMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ0FuYWx5c2lzIGNvbXBsZXRlISBObyBjbGFyaWZ5aW5nIHF1ZXN0aW9ucyBuZWVkZWQuIEdlbmVyYXRpbmcgY3VzdG9taXphdGlvbiByZWNvbW1lbmRhdGlvbnNcdTIwMjYnKTtcbiAgICAgIGF3YWl0IHNlbmRBY3Rpb24oJ3JlY29tbWVuZF9jdXN0b21pemF0aW9ucycpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5lcnJvcignRXJyb3IgcGFyc2luZyBhbmFseXNpcyBmb3IgcXVlc3Rpb25zOicsIGUpO1xuICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsICdBbmFseXNpcyBjb21wbGV0ZSEgQ2xpY2sgXCJSZWNvbW1lbmQgQ3VzdG9taXphdGlvbnNcIiB3aGVuIHJlYWR5LicpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGFiIHBvcHVsYXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBwb3B1bGF0ZVF1ZXN0aW9uc1RhYigpIHtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGlmICghY29udGVudCkgcmV0dXJuO1xuXG4gIGlmICghc3RhdGVNYW5hZ2VyLmdldFRhYkRhdGEoJ2FuYWx5c2lzJykpIHtcbiAgICBjb250ZW50LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj48ZGl2IGNsYXNzPVwiaWNvblwiPlx1RDgzRFx1RENBQzwvZGl2PjxoMz5ObyBRdWVzdGlvbnMgWWV0PC9oMz48cD5SdW4gXCJBbmFseXNlIEpvYlwiIGZpcnN0IHRvIGdlbmVyYXRlIGNsYXJpZnlpbmcgcXVlc3Rpb25zLjwvcD48L2Rpdj4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGhhc1F1ZXN0aW9ucyA9IEFycmF5LmlzQXJyYXkod2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucykgJiYgd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucy5sZW5ndGggPiAwO1xuICBpZiAoIWhhc1F1ZXN0aW9ucykge1xuICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPjxkaXYgY2xhc3M9XCJpY29uXCI+XHUyNzA1PC9kaXY+PGgzPlF1ZXN0aW9ucyBDb21wbGV0ZTwvaDM+PHA+Tm8gcGVuZGluZyBjbGFyaWZ5aW5nIHF1ZXN0aW9ucyBcdTIwMTQgY3VzdG9taXphdGlvbiByZWNvbW1lbmRhdGlvbnMgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS48L3A+PC9kaXY+JztcbiAgICByZXR1cm47XG4gIH1cblxuICBfY3VycmVudEdyb3VwID0gMDtcbiAgY29udGVudC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImFuYWx5c2lzLXBhZ2VcIj48ZGl2IGNsYXNzPVwiYW5hbHlzaXMtc2VjdGlvblwiPjxoMj5cdUQ4M0RcdURDQUMgQ2xhcmlmeWluZyBRdWVzdGlvbnM8L2gyPjxwIHN0eWxlPVwiY29sb3I6IzY0NzQ4YjsgbWFyZ2luOiAwO1wiPlBsZWFzZSBhbnN3ZXIgZWFjaCBxdWVzdGlvbiB0byBpbXByb3ZlIHJlY29tbWVuZGF0aW9uIHF1YWxpdHkuPC9wPjwvZGl2PjwvZGl2Pic7XG4gIHJlbmRlclF1ZXN0aW9uc1BhbmVsKCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUGFuZWwgcmVuZGVyZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiByZW5kZXJRdWVzdGlvbnNQYW5lbCgpIHtcbiAgY29uc3QgcXMgPSB3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zIHx8IFtdO1xuICBpZiAocXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGlmICghY29udGVudCkgcmV0dXJuO1xuXG4gIGNvbnN0IGV4aXN0aW5nID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcucXVlc3Rpb25zLXBhbmVsJyk7XG4gIGlmIChleGlzdGluZykgZXhpc3RpbmcucmVtb3ZlKCk7XG5cbiAgY29uc3QgdG90YWwgICAgICA9IHFzLmxlbmd0aDtcbiAgY29uc3QgbnVtR3JvdXBzICA9IE1hdGguY2VpbCh0b3RhbCAvIEdST1VQX1NJWkUpO1xuICAvLyBDbGFtcCBncm91cCBpbmRleCBpbiBjYXNlIHFzIHNocmFuayBzaW5jZSBsYXN0IHJlbmRlci5cbiAgX2N1cnJlbnRHcm91cCAgICA9IE1hdGgubWluKF9jdXJyZW50R3JvdXAsIG51bUdyb3VwcyAtIDEpO1xuICBjb25zdCBncm91cFN0YXJ0ID0gX2N1cnJlbnRHcm91cCAqIEdST1VQX1NJWkU7XG4gIGNvbnN0IGdyb3VwRW5kICAgPSBNYXRoLm1pbihncm91cFN0YXJ0ICsgR1JPVVBfU0laRSwgdG90YWwpO1xuICBjb25zdCBncm91cFFzICAgID0gcXMuc2xpY2UoZ3JvdXBTdGFydCwgZ3JvdXBFbmQpO1xuICBjb25zdCBpc0xhc3RHcm91cCA9IF9jdXJyZW50R3JvdXAgPT09IG51bUdyb3VwcyAtIDE7XG5cbiAgY29uc3QgZXhpc3RpbmdBbnN3ZXJzID0gKHdpbmRvdy5xdWVzdGlvbkFuc3dlcnMgJiYgdHlwZW9mIHdpbmRvdy5xdWVzdGlvbkFuc3dlcnMgPT09ICdvYmplY3QnKVxuICAgID8gd2luZG93LnF1ZXN0aW9uQW5zd2VycyA6IHt9O1xuXG4gIGNvbnN0IGdyb3VwTGFiZWwgPSBudW1Hcm91cHMgPiAxXG4gICAgPyBgR3JvdXAgJHtfY3VycmVudEdyb3VwICsgMX0gb2YgJHtudW1Hcm91cHN9YFxuICAgIDogYCR7dG90YWx9IHF1ZXN0aW9uJHt0b3RhbCA+IDEgPyAncycgOiAnJ31gO1xuXG4gIGNvbnN0IGdyb3VwTmF2SHRtbCA9IG51bUdyb3VwcyA+IDEgPyByZW5kZXJRR3JvdXBOYXYobnVtR3JvdXBzLCBxcywgZXhpc3RpbmdBbnN3ZXJzKSA6ICcnO1xuXG4gIGxldCBwYW5lbEh0bWwgPSBgPGRpdiBjbGFzcz1cInF1ZXN0aW9ucy1wYW5lbFwiIGlkPVwicXVlc3Rpb25zLXBhbmVsXCI+XG4gICAgPGgyPlx1RDgzRFx1RENBQyBBIGZldyBxdWljayBxdWVzdGlvbnM8L2gyPlxuICAgIDxwIGNsYXNzPVwicS1wcm9ncmVzc1wiIGlkPVwicS1wcm9ncmVzc1wiPiR7Z3JvdXBMYWJlbH0gXHUyMDE0IGFuc3dlciBlYWNoIHRvIGNvbnRpbnVlLjwvcD5cbiAgICAke2dyb3VwTmF2SHRtbH1gO1xuXG4gIGdyb3VwUXMuZm9yRWFjaCgocSwgbG9jYWxJZHgpID0+IHtcbiAgICBjb25zdCBpZHggPSBncm91cFN0YXJ0ICsgbG9jYWxJZHg7XG4gICAgY29uc3Qgc2F2ZWRBbnN3ZXIgPSAoZXhpc3RpbmdBbnN3ZXJzW3EudHlwZV0gfHwgJycpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgaXNBbnN3ZXJlZCAgPSBzYXZlZEFuc3dlci50cmltKCkubGVuZ3RoID4gMDtcbiAgICBjb25zdCByZW5kZXJlZFF1ZXN0aW9uID0gcmVuZGVyUXVlc3Rpb25NYXJrZG93bihxLnF1ZXN0aW9uKTtcbiAgICBjb25zdCBjaGlwcyA9IChxLmNob2ljZXMgfHwgW10pLm1hcCgoYywgY2kpID0+XG4gICAgICBgPGJ1dHRvbiBjbGFzcz1cInEtY2hpcFwiIGRhdGEtcWlkeD1cIiR7aWR4fVwiIGRhdGEtY2lkeD1cIiR7Y2l9XCIgb25jbGljaz1cInNlbGVjdFFDaGlwKHRoaXMsICR7aWR4fSlcIj4ke2VzY2FwZUh0bWwoYyl9PC9idXR0b24+YFxuICAgICkuam9pbignJyk7XG4gICAgcGFuZWxIdG1sICs9IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbi1pdGVtJHtpc0Fuc3dlcmVkID8gJyBhbnN3ZXJlZCcgOiAnJ31cIiBpZD1cInEtaXRlbS0ke2lkeH1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInEtaGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInEtdGV4dFwiPiR7aWR4ICsgMX0uICR7cmVuZGVyZWRRdWVzdGlvbn08L2Rpdj5cbiAgICAgICAgICAke2lzQW5zd2VyZWQgPyAnPHNwYW4gY2xhc3M9XCJxLWFuc3dlcmVkLWJhZGdlXCI+XHUyNzEzIEFuc3dlcmVkPC9zcGFuPicgOiAnJ31cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7Y2hpcHMgPyBgPGRpdiBjbGFzcz1cInEtY2hpcHNcIj4ke2NoaXBzfTwvZGl2PmAgOiAnJ31cbiAgICAgICAgPGRpdiBjbGFzcz1cInEtYW5zd2VyLXJvd1wiPlxuICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cInEtaW5wdXRcIiBpZD1cInEtaW5wdXQtJHtpZHh9XCIgcGxhY2Vob2xkZXI9XCJZb3VyIGFuc3dlclx1MjAyNlwiIG9uaW5wdXQ9XCJvblFJbnB1dENoYW5nZSgke2lkeH0pXCI+JHtlc2NhcGVIdG1sKHNhdmVkQW5zd2VyKX08L3RleHRhcmVhPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxLWRyYWZ0LWJ0blwiIGlkPVwicS1kcmFmdC1idG4tJHtpZHh9XCIgb25jbGljaz1cImRyYWZ0UXVlc3Rpb25SZXNwb25zZSgke2lkeH0pXCIgdGl0bGU9XCJHZW5lcmF0ZSBhIGRyYWZ0IGFuc3dlciB1c2luZyBBSVwiPlx1MjcyOCBEcmFmdDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gIH0pO1xuXG4gIGlmIChpc0xhc3RHcm91cCkge1xuICAgIHBhbmVsSHRtbCArPSBgPGJ1dHRvbiBjbGFzcz1cInF1ZXN0aW9ucy1zdWJtaXQtYnRuXCIgaWQ9XCJxLXN1Ym1pdC1idG5cIiBvbmNsaWNrPVwic3VibWl0QWxsQW5zd2VycygpXCIgZGlzYWJsZWQ+U3VibWl0IEFuc3dlcnM8L2J1dHRvbj5gO1xuICB9IGVsc2Uge1xuICAgIHBhbmVsSHRtbCArPSBgPGJ1dHRvbiBjbGFzcz1cInF1ZXN0aW9ucy1zdWJtaXQtYnRuXCIgaWQ9XCJxLXN1Ym1pdC1idG5cIiBvbmNsaWNrPVwiYWR2YW5jZVFHcm91cCgpXCIgZGlzYWJsZWQ+Q29udGludWUgXHUyMTkyIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuOGVtO2ZvbnQtd2VpZ2h0OjQwMDtcIj4oJHtncm91cEVuZH0gb2YgJHt0b3RhbH0gYW5zd2VyZWQpPC9zcGFuPjwvYnV0dG9uPmA7XG4gIH1cbiAgcGFuZWxIdG1sICs9ICc8L2Rpdj4nO1xuXG4gIGNvbnRlbnQuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBwYW5lbEh0bWwpO1xuXG4gIC8vIFJlc3RvcmUgY2hpcCBzZWxlY3Rpb24gZm9yIGFueSBxdWVzdGlvbiB3aG9zZSBzYXZlZCBhbnN3ZXIgbWF0Y2hlcyBhIGNoaXAgbGFiZWwuXG4gIGdyb3VwUXMuZm9yRWFjaCgocSwgbG9jYWxJZHgpID0+IHtcbiAgICBjb25zdCBpZHggPSBncm91cFN0YXJ0ICsgbG9jYWxJZHg7XG4gICAgY29uc3Qgc2F2ZWQgPSAoZXhpc3RpbmdBbnN3ZXJzW3EudHlwZV0gfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgIGlmICghc2F2ZWQpIHJldHVybjtcbiAgICBjb25zdCBpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHEtaXRlbS0ke2lkeH1gKTtcbiAgICBpZiAoIWl0ZW0pIHJldHVybjtcbiAgICBpdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJy5xLWNoaXAnKS5mb3JFYWNoKGNoaXAgPT4ge1xuICAgICAgaWYgKChjaGlwLnRleHRDb250ZW50IHx8ICcnKS50cmltKCkgPT09IHNhdmVkKSBjaGlwLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHVwZGF0ZVFQcm9ncmVzcygpO1xufVxuXG4vLyBHcm91cC1uYXZpZ2F0aW9uIHN0cmlwIChHQVAtMTYgUGFydCBEKTogbGV0cyB0aGUgdXNlciBqdW1wIGJhY2sgdG8gYW5cbi8vIGVhcmxpZXIgZ3JvdXAgdG8gcmV2aWV3L2VkaXQgaXQgd2l0aG91dCBsb3NpbmcgZm9yd2FyZCBwcm9ncmVzcy4gVGhlc2Vcbi8vIGFyZSBwbGFpbiBidXR0b25zLCBub3QgYW4gQVJJQSB0YWJsaXN0IFx1MjAxNCBubyBhcnJvdy1rZXkgcm92aW5nIGlzIGltcGxlbWVudGVkLFxuLy8gc28gYSB0YWIvdGFibGlzdCByb2xlIHdvdWxkIHNldCBhIGZhbHNlIGV4cGVjdGF0aW9uIGZvciBzY3JlZW4gcmVhZGVycy5cbmZ1bmN0aW9uIF9pc0dyb3VwRnVsbHlBbnN3ZXJlZChncm91cElkeCwgcXMsIGV4aXN0aW5nQW5zd2Vycykge1xuICBjb25zdCBncm91cFN0YXJ0ID0gZ3JvdXBJZHggKiBHUk9VUF9TSVpFO1xuICBjb25zdCBncm91cEVuZCAgICA9IE1hdGgubWluKGdyb3VwU3RhcnQgKyBHUk9VUF9TSVpFLCBxcy5sZW5ndGgpO1xuICBmb3IgKGxldCBpZHggPSBncm91cFN0YXJ0OyBpZHggPCBncm91cEVuZDsgaWR4KyspIHtcbiAgICBjb25zdCBxID0gcXNbaWR4XTtcbiAgICBpZiAoIXEpIGNvbnRpbnVlO1xuICAgIGlmICghKGV4aXN0aW5nQW5zd2Vyc1txLnR5cGVdIHx8ICcnKS50b1N0cmluZygpLnRyaW0oKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZW5kZXJRR3JvdXBOYXYobnVtR3JvdXBzLCBxcywgZXhpc3RpbmdBbnN3ZXJzKSB7XG4gIGNvbnN0IGRvdHMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Hcm91cHM7IGkrKykge1xuICAgIGNvbnN0IGlzQWN0aXZlID0gaSA9PT0gX2N1cnJlbnRHcm91cDtcbiAgICBjb25zdCBpc0RvbmUgICA9ICFpc0FjdGl2ZSAmJiBfaXNHcm91cEZ1bGx5QW5zd2VyZWQoaSwgcXMsIGV4aXN0aW5nQW5zd2Vycyk7XG4gICAgY29uc3QgY2xzID0gWydxLWdyb3VwLWRvdCddO1xuICAgIGlmIChpc0FjdGl2ZSkgY2xzLnB1c2goJ2FjdGl2ZScpO1xuICAgIGlmIChpc0RvbmUpIGNscy5wdXNoKCdkb25lJyk7XG4gICAgY29uc3Qgc3RhdGVMYWJlbCA9IGlzQWN0aXZlID8gJ2N1cnJlbnQnIDogaXNEb25lID8gJ2NvbXBsZXRlZCcgOiAnbm90IHlldCBhbnN3ZXJlZCc7XG4gICAgY29uc3QgYXJpYUxhYmVsID0gYFJldmlldyBhbnN3ZXJzIGZvciBHcm91cCAke2kgKyAxfSwgJHtzdGF0ZUxhYmVsfSBcdTIwMTQgbm8gcmVzdWJtaXNzaW9uLCB5b3VyIGRyYWZ0IGlzIHNhdmVkIGF1dG9tYXRpY2FsbHlgO1xuICAgIGRvdHMucHVzaChcbiAgICAgIGA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIiR7Y2xzLmpvaW4oJyAnKX1cIiBkYXRhLWdyb3VwPVwiJHtpfVwiYCArXG4gICAgICBgJHtpc0FjdGl2ZSA/ICcgYXJpYS1jdXJyZW50PVwic3RlcFwiJyA6ICcnfSBhcmlhLWxhYmVsPVwiJHtlc2NhcGVIdG1sKGFyaWFMYWJlbCl9XCJgICtcbiAgICAgIGAgb25jbGljaz1cImp1bXBUb1FHcm91cCgke2l9KVwiPiR7aXNEb25lID8gJ1x1MjcxMycgOiBpICsgMX08L2J1dHRvbj5gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gYDxkaXYgY2xhc3M9XCJxLWdyb3VwLW5hdlwiIGFyaWEtbGFiZWw9XCJRdWVzdGlvbiBncm91cHNcIj4ke2RvdHMuam9pbignJyl9PC9kaXY+YDtcbn1cblxuLy8gRmx1c2ggdGhlIGN1cnJlbnQgZ3JvdXAncyB0ZXh0YXJlYSB2YWx1ZXMgaW50byB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzLlxuLy8gU2hhcmVkIGJ5IGFkdmFuY2VRR3JvdXAoKSAoZm9yd2FyZCBwcm9ncmVzc2lvbikgYW5kIGp1bXBUb1FHcm91cCgpXG4vLyAoYmFja3dhcmQgbmF2aWdhdGlvbikgc28gYm90aCBwZXJzaXN0IGluLXByb2dyZXNzIGVkaXRzIHRoZSBzYW1lIHdheS5cbmZ1bmN0aW9uIF9mbHVzaEN1cnJlbnRHcm91cEFuc3dlcnMoKSB7XG4gIGNvbnN0IHFzID0gd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucyB8fCBbXTtcbiAgY29uc3QgZ3JvdXBTdGFydCA9IF9jdXJyZW50R3JvdXAgKiBHUk9VUF9TSVpFO1xuICBjb25zdCBncm91cEVuZCAgID0gTWF0aC5taW4oZ3JvdXBTdGFydCArIEdST1VQX1NJWkUsIHFzLmxlbmd0aCk7XG4gIGZvciAobGV0IGlkeCA9IGdyb3VwU3RhcnQ7IGlkeCA8IGdyb3VwRW5kOyBpZHgrKykge1xuICAgIGNvbnN0IHEgID0gcXNbaWR4XTtcbiAgICBjb25zdCB0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBxLWlucHV0LSR7aWR4fWApO1xuICAgIGlmIChxICYmIHRhICYmIHRhLnZhbHVlLnRyaW0oKSkge1xuICAgICAgaWYgKCF3aW5kb3cucXVlc3Rpb25BbnN3ZXJzKSB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzID0ge307XG4gICAgICB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzW3EudHlwZV0gPSB0YS52YWx1ZS50cmltKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkdmFuY2VRR3JvdXAoKSB7XG4gIF9mbHVzaEN1cnJlbnRHcm91cEFuc3dlcnMoKTtcbiAgcGVyc2lzdFBvc3RBbmFseXNpc1N0YXRlKCk7XG4gIF9jdXJyZW50R3JvdXArKztcbiAgcmVuZGVyUXVlc3Rpb25zUGFuZWwoKTtcbn1cblxuLy8gSnVtcCBiYWNrIChvciBmb3J3YXJkKSB0byBhIHNwZWNpZmljIGdyb3VwIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBjdXJyZW50XG4vLyBncm91cCB0byBiZSBjb21wbGV0ZS4gRmx1c2hlcyBpbi1wcm9ncmVzcyBhbnN3ZXJzIGZpcnN0IHNvIG5vdGhpbmcgdHlwZWRcbi8vIHNvIGZhciBpcyBsb3N0LCBidXQgXHUyMDE0IHVubGlrZSBhZHZhbmNlUUdyb3VwKCkgXHUyMDE0IGRvZXMgbm90IGdhdGUgb24gY29tcGxldGVuZXNzXG4vLyBhbmQgZG9lcyBub3QgcmVzdWJtaXQgYW55dGhpbmcuXG5mdW5jdGlvbiBqdW1wVG9RR3JvdXAodGFyZ2V0R3JvdXApIHtcbiAgX2ZsdXNoQ3VycmVudEdyb3VwQW5zd2VycygpO1xuICBwZXJzaXN0UG9zdEFuYWx5c2lzU3RhdGUoKTtcbiAgX2N1cnJlbnRHcm91cCA9IHRhcmdldEdyb3VwO1xuICByZW5kZXJRdWVzdGlvbnNQYW5lbCgpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEludGVyYWN0aW9uIGhhbmRsZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuYXN5bmMgZnVuY3Rpb24gZHJhZnRRdWVzdGlvblJlc3BvbnNlKGlkeCkge1xuICBjb25zdCBxcyA9IHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgfHwgW107XG4gIGNvbnN0IHEgID0gcXNbaWR4XTtcbiAgaWYgKCFxKSByZXR1cm47XG5cbiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHEtZHJhZnQtYnRuLSR7aWR4fWApO1xuICBjb25zdCB0YSAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcS1pbnB1dC0ke2lkeH1gKTtcbiAgaWYgKCFidG4gfHwgIXRhKSByZXR1cm47XG5cbiAgYnRuLmRpc2FibGVkID0gdHJ1ZTtcbiAgYnRuLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz1cInNwaW5uZXJcIiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjExcHg7aGVpZ2h0OjExcHg7Ym9yZGVyOjJweCBzb2xpZCBjdXJyZW50Q29sb3I7Ym9yZGVyLXRvcC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTthbmltYXRpb246c3BpbiAwLjdzIGxpbmVhciBpbmZpbml0ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XCI+PC9zcGFuPic7XG5cbiAgdHJ5IHtcbiAgICBsZXQgYW5hbHlzaXNQYXlsb2FkID0gbnVsbDtcbiAgICBjb25zdCBhbmFseXNpc1N0YXRlID0gc3RhdGVNYW5hZ2VyLmdldFRhYkRhdGEoJ2FuYWx5c2lzJyk7XG4gICAgaWYgKGFuYWx5c2lzU3RhdGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNsZWFuZWQgPSBjbGVhbkpzb25SZXNwb25zZShhbmFseXNpc1N0YXRlKTtcbiAgICAgICAgYW5hbHlzaXNQYXlsb2FkID0gdHlwZW9mIGNsZWFuZWQgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShjbGVhbmVkKSA6IGNsZWFuZWQ7XG4gICAgICB9IGNhdGNoIChfKSB7IC8qIHVzZSBudWxsICovIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9wb3N0LWFuYWx5c2lzLWRyYWZ0LXJlc3BvbnNlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcXVlc3Rpb246IHEucXVlc3Rpb24sIHF1ZXN0aW9uX3R5cGU6IHEudHlwZSwgYW5hbHlzaXM6IGFuYWx5c2lzUGF5bG9hZCB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vayAmJiBkYXRhLnRleHQpIHtcbiAgICAgIHRhLnZhbHVlID0gZGF0YS50ZXh0O1xuICAgICAgdXBkYXRlUVByb2dyZXNzKCk7XG4gICAgICBjb25zdCBpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHEtaXRlbS0ke2lkeH1gKTtcbiAgICAgIGlmIChpdGVtKSBpdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJy5xLWNoaXAnKS5mb3JFYWNoKGMgPT4gYy5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpKTtcbiAgICAgIHNob3dEcmFmdEVycm9yKGlkeCwgbnVsbCk7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCBgXHUyNzI4IERyYWZ0IGFuc3dlciBmb3IgUSR7aWR4ICsgMX06XFxuXFxuJHtkYXRhLnRleHR9XFxuXFxuUmV2aWV3IGFuZCBlZGl0IGluIHRoZSBmaWVsZCBiZWxvdyBiZWZvcmUgc3VibWl0dGluZy5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLndhcm4oJ0RyYWZ0IGdlbmVyYXRpb24gZmFpbGVkOicsIGRhdGEuZXJyb3IpO1xuICAgICAgc2hvd0RyYWZ0RXJyb3IoaWR4LCBkYXRhLmVycm9yIHx8ICdEcmFmdCBmYWlsZWQgXHUyMDE0IHBsZWFzZSB0cnkgYWdhaW4uJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3IoJ0RyYWZ0IGZldGNoIGVycm9yOicsIGVycik7XG4gICAgc2hvd0RyYWZ0RXJyb3IoaWR4LCAnTmV0d29yayBlcnJvciBcdTIwMTQgcGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBidG4uaW5uZXJIVE1MID0gJ1x1MjcyOCBEcmFmdCc7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0UUNoaXAoYnRuLCBxSWR4KSB7XG4gIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHEtaXRlbS0ke3FJZHh9YCk7XG4gIGlmIChwYW5lbCkge1xuICAgIHBhbmVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5xLWNoaXAnKS5mb3JFYWNoKGMgPT4gYy5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpKTtcbiAgfVxuICBidG4uY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcbiAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcS1pbnB1dC0ke3FJZHh9YCk7XG4gIGlmICh0ZXh0YXJlYSkge1xuICAgIHRleHRhcmVhLnZhbHVlID0gYnRuLnRleHRDb250ZW50O1xuICAgIHVwZGF0ZVFQcm9ncmVzcygpO1xuICB9XG4gIC8vIFBlcnNpc3QgdGhlIGNoaXAgYW5zd2VyIGltbWVkaWF0ZWx5IHNvIGl0IHN1cnZpdmVzIHRhYiBuYXZpZ2F0aW9uLlxuICBjb25zdCBxID0gKHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgfHwgW10pW3FJZHhdO1xuICBpZiAocSkge1xuICAgIGlmICghd2luZG93LnF1ZXN0aW9uQW5zd2VycyB8fCB0eXBlb2Ygd2luZG93LnF1ZXN0aW9uQW5zd2VycyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHdpbmRvdy5xdWVzdGlvbkFuc3dlcnMgPSB7fTtcbiAgICB9XG4gICAgd2luZG93LnF1ZXN0aW9uQW5zd2Vyc1txLnR5cGVdID0gYnRuLnRleHRDb250ZW50O1xuICAgIHBlcnNpc3RQb3N0QW5hbHlzaXNTdGF0ZSgpO1xuICB9XG59XG5cbi8vIEN1cnJlbnQgcXVlc3Rpb24tZ3JvdXAgaW5kZXggKFx1MjI2NDMtcGVyLWdyb3VwIGZsb3csIEdBUC0yMDEpLlxubGV0IF9jdXJyZW50R3JvdXAgPSAwO1xuY29uc3QgR1JPVVBfU0laRSA9IDM7XG5cbi8vIERlYm91bmNlIHRpbWVyIGZvciBwZXJzaXN0aW5nIGFuc3dlcnMgd2hpbGUgdGhlIHVzZXIgdHlwZXMuXG5sZXQgX3BlcnNpc3REZWJvdW5jZVRpbWVyID0gbnVsbDtcblxuZnVuY3Rpb24gb25RSW5wdXRDaGFuZ2UoaWR4KSB7XG4gIHVwZGF0ZVFQcm9ncmVzcygpO1xuICBjb25zdCBxID0gKHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgfHwgW10pW2lkeF07XG4gIGlmICghcSkgcmV0dXJuO1xuICBjb25zdCB0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBxLWlucHV0LSR7aWR4fWApO1xuICBpZiAoIXRhKSByZXR1cm47XG4gIGlmICghd2luZG93LnF1ZXN0aW9uQW5zd2VycyB8fCB0eXBlb2Ygd2luZG93LnF1ZXN0aW9uQW5zd2VycyAhPT0gJ29iamVjdCcpIHtcbiAgICB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzID0ge307XG4gIH1cbiAgd2luZG93LnF1ZXN0aW9uQW5zd2Vyc1txLnR5cGVdID0gdGEudmFsdWU7XG5cbiAgLy8gRGVib3VuY2UtcGVyc2lzdCBzbyBhbnN3ZXJzIHN1cnZpdmUgdGFiIG5hdmlnYXRpb24gYW5kIHN0YXR1cyBwb2xsaW5nLlxuICBjbGVhclRpbWVvdXQoX3BlcnNpc3REZWJvdW5jZVRpbWVyKTtcbiAgX3BlcnNpc3REZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBwZXJzaXN0UG9zdEFuYWx5c2lzU3RhdGUoKSwgNTAwKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUVByb2dyZXNzKCkge1xuICBjb25zdCBxcyA9IHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgfHwgW107XG4gIGNvbnN0IHN0b3JlZEFuc3dlcnMgPSB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzIHx8IHt9O1xuICBjb25zdCBncm91cFN0YXJ0ID0gX2N1cnJlbnRHcm91cCAqIEdST1VQX1NJWkU7XG4gIGNvbnN0IGdyb3VwRW5kICAgPSBNYXRoLm1pbihncm91cFN0YXJ0ICsgR1JPVVBfU0laRSwgcXMubGVuZ3RoKTtcblxuICAvLyBDb3VudCBhbnN3ZXJzOiB1c2UgRE9NIHZhbHVlcyBmb3IgdGhlIGN1cnJlbnQgZ3JvdXAgKGxpdmUpLCBzdG9yZWQgZm9yIG90aGVycy5cbiAgY29uc3QgYW5zd2VyZWQgPSBxcy5maWx0ZXIoKHEsIGlkeCkgPT4ge1xuICAgIGlmIChpZHggPj0gZ3JvdXBTdGFydCAmJiBpZHggPCBncm91cEVuZCkge1xuICAgICAgY29uc3QgdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcS1pbnB1dC0ke2lkeH1gKTtcbiAgICAgIHJldHVybiB0YSA/IHRhLnZhbHVlLnRyaW0oKS5sZW5ndGggPiAwIDogISEoc3RvcmVkQW5zd2Vyc1txLnR5cGVdIHx8ICcnKS50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiAhIShzdG9yZWRBbnN3ZXJzW3EudHlwZV0gfHwgJycpLnRyaW0oKTtcbiAgfSkubGVuZ3RoO1xuXG4gIGNvbnN0IGdyb3VwQW5zd2VyZWQgPSBxcy5zbGljZShncm91cFN0YXJ0LCBncm91cEVuZCkuZmlsdGVyKChxLCBsaSkgPT4ge1xuICAgIGNvbnN0IHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHEtaW5wdXQtJHtncm91cFN0YXJ0ICsgbGl9YCk7XG4gICAgcmV0dXJuIHRhID8gdGEudmFsdWUudHJpbSgpLmxlbmd0aCA+IDAgOiAhIShzdG9yZWRBbnN3ZXJzW3EudHlwZV0gfHwgJycpLnRyaW0oKTtcbiAgfSkubGVuZ3RoO1xuXG4gIGNvbnN0IG51bUdyb3VwcyAgPSBNYXRoLmNlaWwocXMubGVuZ3RoIC8gR1JPVVBfU0laRSk7XG4gIGNvbnN0IGdyb3VwTGFiZWwgPSBudW1Hcm91cHMgPiAxXG4gICAgPyBgR3JvdXAgJHtfY3VycmVudEdyb3VwICsgMX0gb2YgJHtudW1Hcm91cHN9YFxuICAgIDogYCR7cXMubGVuZ3RofSBxdWVzdGlvbiR7cXMubGVuZ3RoID4gMSA/ICdzJyA6ICcnfWA7XG5cbiAgY29uc3QgcHJvZ3Jlc3NFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxLXByb2dyZXNzJyk7XG4gIGlmIChwcm9ncmVzc0VsKSB7XG4gICAgcHJvZ3Jlc3NFbC50ZXh0Q29udGVudCA9IGAke2dyb3VwTGFiZWx9IFx1MjAxNCAke2Fuc3dlcmVkfSBvZiAke3FzLmxlbmd0aH0gYW5zd2VyZWRgO1xuICB9XG4gIGNvbnN0IHN1Ym1pdEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxLXN1Ym1pdC1idG4nKTtcbiAgaWYgKHN1Ym1pdEJ0bikge1xuICAgIGNvbnN0IGN1cnJlbnRHcm91cFNpemUgPSBncm91cEVuZCAtIGdyb3VwU3RhcnQ7XG4gICAgc3VibWl0QnRuLmRpc2FibGVkID0gZ3JvdXBBbnN3ZXJlZCA8IGN1cnJlbnRHcm91cFNpemU7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc3VibWl0QWxsQW5zd2VycygpIHtcbiAgLyogZHVja2Zsb3c6XG4gICAqICAgaWQ6IHF1ZXN0aW9uc191aV9zdWJtaXRfbGl2ZVxuICAgKiAgIGtpbmQ6IHVpXG4gICAqICAgdGltZXN0YW1wOiAnMjAyNi0wMy0yNVQyMTozOTo0OFonXG4gICAqICAgc3RhdHVzOiBsaXZlXG4gICAqICAgaGFuZGxlczpcbiAgICogICAtIHVpOnF1ZXN0aW9ucy5zdWJtaXQtYWxsXG4gICAqICAgY2FsbHM6XG4gICAqICAgLSBQT1NUIC9hcGkvcG9zdC1hbmFseXNpcy1yZXNwb25zZXNcbiAgICogICAtIFBPU1QgL2FwaS9hY3Rpb25cbiAgICogICByZWFkczpcbiAgICogICAtIHdpbmRvdzpwb3N0QW5hbHlzaXNRdWVzdGlvbnNcbiAgICogICAtIGRvbTpxLWlucHV0LSoudmFsdWVcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSB3aW5kb3c6cXVlc3Rpb25BbnN3ZXJzXG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9wb3N0LWFuYWx5c2lzLXJlc3BvbnNlcy5hbnN3ZXJzXG4gICAqICAgbm90ZXM6IENvbGxlY3RzIHRoZSBjbGFyaWZ5aW5nLXF1ZXN0aW9uIGFuc3dlcnMgZnJvbSB0aGUgVUksIHBlcnNpc3RzIHRoZW0gdG8gc2Vzc2lvbiBzdGF0ZSwgYW5kIHRoZW4gYWR2YW5jZXMgaW50byBjdXN0b21pemF0aW9uIHJlY29tbWVuZGF0aW9uIGdlbmVyYXRpb24uXG4gICAqL1xuICBjb25zdCBxcyA9IHdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgfHwgW107XG4gIHFzLmZvckVhY2goKHEsIGlkeCkgPT4ge1xuICAgIGNvbnN0IHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHEtaW5wdXQtJHtpZHh9YCk7XG4gICAgaWYgKHRhICYmIHRhLnZhbHVlLnRyaW0oKSkge1xuICAgICAgd2luZG93LnF1ZXN0aW9uQW5zd2Vyc1txLnR5cGVdID0gdGEudmFsdWUudHJpbSgpO1xuICAgIH1cbiAgfSk7XG4gIGF3YWl0IHBlcnNpc3RQb3N0QW5hbHlzaXNTdGF0ZSgpO1xuXG4gIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxLXN1Ym1pdC1idG4nKTtcbiAgaWYgKGJ0bikge1xuICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7XG4gICAgYnRuLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz1cInNwaW5uZXJcIiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7Ym9yZGVyOjJweCBzb2xpZCAjZmZmO2JvcmRlci10b3AtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czo1MCU7YW5pbWF0aW9uOnNwaW4gMC43cyBsaW5lYXIgaW5maW5pdGU7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDo2cHg7XCI+PC9zcGFuPlByb2Nlc3NpbmdcdTIwMjYnO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCBgXHUyNzEzIFRoYW5rIHlvdSEgJHtxcy5sZW5ndGh9IGFuc3dlciR7cXMubGVuZ3RoID4gMSA/ICdzJyA6ICcnfSBzYXZlZC4gR2VuZXJhdGluZyBjdXN0b21pemF0aW9uIHJlY29tbWVuZGF0aW9uc1x1MjAyNmApO1xuICAgIGF3YWl0IHNlbmRBY3Rpb24oJ3JlY29tbWVuZF9jdXN0b21pemF0aW9ucycpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChidG4pIHtcbiAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgYnRuLmlubmVySFRNTCA9ICdTdWJtaXQgQW5zd2Vycyc7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNob3dEcmFmdEVycm9yKGlkeCwgbWVzc2FnZSkge1xuICBjb25zdCByb3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjcS1pdGVtLSR7aWR4fSAucS1hbnN3ZXItcm93YCk7XG4gIGlmICghcm93KSByZXR1cm47XG4gIGxldCBlcnJFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBxLWRyYWZ0LWVyci0ke2lkeH1gKTtcbiAgaWYgKCFtZXNzYWdlKSB7XG4gICAgaWYgKGVyckVsKSBlcnJFbC5yZW1vdmUoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFlcnJFbCkge1xuICAgIGVyckVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZXJyRWwuaWQgPSBgcS1kcmFmdC1lcnItJHtpZHh9YDtcbiAgICBlcnJFbC5jbGFzc05hbWUgPSAncS1kcmFmdC1lcnJvcic7XG4gICAgcm93Lmluc2VydEFkamFjZW50RWxlbWVudCgnYWZ0ZXJlbmQnLCBlcnJFbCk7XG4gIH1cbiAgZXJyRWwudGV4dENvbnRlbnQgPSBgXHUyNkEwICR7bWVzc2FnZX1gO1xufVxuXG4vLyBMZWdhY3kgY29tcGF0aWJpbGl0eSBzaGltXG5mdW5jdGlvbiBzaG93TmV4dFF1ZXN0aW9uKCkgeyByZW5kZXJRdWVzdGlvbnNQYW5lbCgpOyB9XG5cbmZ1bmN0aW9uIGhhbmRsZVF1ZXN0aW9uUmVzcG9uc2UobWVzc2FnZSkge1xuICBpZiAoIXdpbmRvdy5wb3N0QW5hbHlzaXNRdWVzdGlvbnMgfHwgd2luZG93LnBvc3RBbmFseXNpc1F1ZXN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgaWYgKCF3aW5kb3cud2FpdGluZ0ZvclF1ZXN0aW9uUmVzcG9uc2UpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgaWR4ID0gd2luZG93LmN1cnJlbnRRdWVzdGlvbkluZGV4IHx8IDA7XG4gIGNvbnN0IHEgPSB3aW5kb3cucG9zdEFuYWx5c2lzUXVlc3Rpb25zW2lkeF07XG4gIGlmICghcSkgcmV0dXJuIGZhbHNlO1xuICB3aW5kb3cucXVlc3Rpb25BbnN3ZXJzW3EudHlwZV0gPSBtZXNzYWdlO1xuICB3aW5kb3cud2FpdGluZ0ZvclF1ZXN0aW9uUmVzcG9uc2UgPSBmYWxzZTtcbiAgd2luZG93LmN1cnJlbnRRdWVzdGlvbkluZGV4ID0gaWR4ICsgMTtcbiAgcGVyc2lzdFBvc3RBbmFseXNpc1N0YXRlKCk7XG4gIHJlbmRlclF1ZXN0aW9uc1BhbmVsKCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hQb3N0QW5hbHlzaXNRdWVzdGlvbnMoKSB7XG4gIHdpbmRvdy53YWl0aW5nRm9yUXVlc3Rpb25SZXNwb25zZSA9IGZhbHNlO1xuICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnVGhhbmsgeW91IGZvciB0aG9zZSBpbnNpZ2h0cyEgQ2xpY2sgXCJSZWNvbW1lbmQgQ3VzdG9taXphdGlvbnNcIiB3aGVuIHlvdVxcJ3JlIHJlYWR5LicpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgRVMgbW9kdWxlIGV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5leHBvcnQge1xuICBwZXJzaXN0UG9zdEFuYWx5c2lzU3RhdGUsXG4gIHJlbmRlclF1ZXN0aW9uTWFya2Rvd24sXG4gIGZldGNoUG9zdEFuYWx5c2lzUXVlc3Rpb25zRnJvbUFwaSxcbiAgYXNrUG9zdEFuYWx5c2lzUXVlc3Rpb25zLFxuICBwb3B1bGF0ZVF1ZXN0aW9uc1RhYixcbiAgcmVuZGVyUXVlc3Rpb25zUGFuZWwsXG4gIGRyYWZ0UXVlc3Rpb25SZXNwb25zZSxcbiAgc2VsZWN0UUNoaXAsXG4gIG9uUUlucHV0Q2hhbmdlLFxuICB1cGRhdGVRUHJvZ3Jlc3MsXG4gIHN1Ym1pdEFsbEFuc3dlcnMsXG4gIHNob3dEcmFmdEVycm9yLFxuICBzaG93TmV4dFF1ZXN0aW9uLFxuICBoYW5kbGVRdWVzdGlvblJlc3BvbnNlLFxuICBmaW5pc2hQb3N0QW5hbHlzaXNRdWVzdGlvbnMsXG4gIGFkdmFuY2VRR3JvdXAsXG4gIGp1bXBUb1FHcm91cCxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG5mdW5jdGlvbiBleWVTbGFzaEljb24oKSB7XG4gIHJldHVybiBgXG4gICAgPHN2ZyBjbGFzcz1cImljb24tZ2x5cGhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZm9jdXNhYmxlPVwiZmFsc2VcIj5cbiAgICAgIDxwYXRoIGQ9XCJNMyAzbDE4IDE4XCI+PC9wYXRoPlxuICAgICAgPHBhdGggZD1cIk0xMC41OCAxMC41OGEyIDIgMCAwIDAgMi44MyAyLjgzXCI+PC9wYXRoPlxuICAgICAgPHBhdGggZD1cIk05Ljg4IDUuMDlBMTAuOTQgMTAuOTQgMCAwIDEgMTIgNWM1IDAgOS4yNyAzLjExIDExIDctMS4wNCAyLjM1LTIuNzggNC4zMi00Ljk2IDUuNDVcIj48L3BhdGg+XG4gICAgICA8cGF0aCBkPVwiTTYuNjEgNi42MUM0LjYyIDcuOSAzLjAzIDkuNzkgMiAxMmMxLjczIDMuODkgNiA3IDEwIDcgMS41MiAwIDIuOTgtLjM2IDQuMjktMVwiPjwvcGF0aD5cbiAgICA8L3N2Zz5cbiAgYDtcbn1cblxuZXhwb3J0IHsgZXllU2xhc2hJY29uIH07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9leHBlcmllbmNlLXJldmlldy5qc1xuICogRXhwZXJpZW5jZS1yZXZpZXcgdGFibGU6IGZldGNoLCByZW5kZXIsIHJvdy1yZW9yZGVyLCBhbmQgc3VibWl0IGRlY2lzaW9ucy5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgdXNlclNlbGVjdGlvbnMsIHBlbmRpbmdSZWNvbW1lbmRhdGlvbnMsIF9zYXZlZERlY2lzaW9ucywgX2V4cGVyaWVuY2VzT3JkZXJlZCxcbiAqICAgcGFyc2VTdGF0dXNSZXNwb25zZSwgZ2V0RXhwZXJpZW5jZVJlY29tbWVuZGF0aW9uLCBnZXRDb25maWRlbmNlTGV2ZWwsXG4gKiAgIGdldEV4cGVyaWVuY2VSZWFzb25pbmcsIGVzY2FwZUh0bWwsIHNob3dCdWxsZXRSZW9yZGVyLFxuICogICBoYW5kbGVBY3Rpb25DbGljaywgYnVsa0FjdGlvbiwgX3VwZGF0ZVBhZ2VFc3RpbWF0ZSxcbiAqICAgdXBkYXRlSW5jbHVzaW9uQ291bnRzLCBzd2l0Y2hUYWIsXG4gKiAgIHNob3dBbGVydE1vZGFsLCBzaG93VG9hc3QsIHNjaGVkdWxlQXRzUmVmcmVzaCxcbiAqICAgJCwgJC5mbi5EYXRhVGFibGUgKGpRdWVyeSArIERhdGFUYWJsZXMpXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdleHBlcmllbmNlLXJldmlldycpO1xuXG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgZXllU2xhc2hJY29uIH0gZnJvbSAnLi9yZXZpZXctaWNvbnMuanMnO1xuXG5mdW5jdGlvbiBfZmluZEV4cGVyaWVuY2VSZWNvbW1lbmRhdGlvblJlY29yZChleHBJZCwgZGF0YSkge1xuICBpZiAoIWRhdGEgfHwgIUFycmF5LmlzQXJyYXkoZGF0YS5leHBlcmllbmNlX3JlY29tbWVuZGF0aW9ucykpIHJldHVybiBudWxsO1xuICByZXR1cm4gZGF0YS5leHBlcmllbmNlX3JlY29tbWVuZGF0aW9ucy5maW5kKChyZWMpID0+IFN0cmluZyhyZWM/LmlkIHx8IHJlYz8uZXhwZXJpZW5jZV9pZCB8fCAnJykgPT09IFN0cmluZyhleHBJZCkpIHx8IG51bGw7XG59XG5cbmZ1bmN0aW9uIF9mb3JtYXRTdWdnZXN0ZWRPcmRlclN1bW1hcnkob3JkZXIpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KG9yZGVyKSB8fCBvcmRlci5sZW5ndGggPCAyKSByZXR1cm4gJyc7XG4gIHJldHVybiBvcmRlci5tYXAoKGlkeCkgPT4gU3RyaW5nKE51bWJlcihpZHgpICsgMSkpLmpvaW4oJyAtPiAnKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cGVyaWVuY2UgZGV0YWlscyBmZXRjaCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gZ2V0RXhwZXJpZW5jZURldGFpbHMoZXhwSWQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9leHBlcmllbmNlLWRldGFpbHMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBleHBlcmllbmNlX2lkOiBleHBJZCB9KVxuICAgIH0pO1xuXG4gICAgaWYgKHJlcy5vaykge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICByZXR1cm4gZGF0YS5leHBlcmllbmNlIHx8IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy53YXJuKCdDb3VsZCBub3QgZmV0Y2ggZXhwZXJpZW5jZSBkZXRhaWxzIGZvcicsIGV4cElkKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2cud2FybignRXJyb3IgZmV0Y2hpbmcgZXhwZXJpZW5jZSBkZXRhaWxzOicsIGVycm9yKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgUmVydW4gc25hcHNob3QgKGNoYW5nZSBiYWRnZSBmb3IgZXhwZXJpZW5jZXMpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZnVuY3Rpb24gX2V4cFNuYXBzaG90S2V5KCkge1xuICB0cnkge1xuICAgIGNvbnN0IHNpZCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCdzZXNzaW9uJyk7XG4gICAgcmV0dXJuIHNpZCA/IGBleHBfc25hcF8ke3NpZH1gIDogbnVsbDtcbiAgfSBjYXRjaCAoXykgeyByZXR1cm4gbnVsbDsgfVxufVxuZnVuY3Rpb24gX3NhdmVFeHBTbmFwc2hvdChyZWNvbW1lbmRlZElkcykge1xuICBjb25zdCBrZXkgPSBfZXhwU25hcHNob3RLZXkoKTtcbiAgaWYgKCFrZXkpIHJldHVybjtcbiAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShbLi4ucmVjb21tZW5kZWRJZHNdKSk7IH0gY2F0Y2ggKF8pIHt9XG59XG5mdW5jdGlvbiBfZ2V0RXhwU25hcHNob3QoKSB7XG4gIGNvbnN0IGtleSA9IF9leHBTbmFwc2hvdEtleSgpO1xuICBpZiAoIWtleSkgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICByZXR1cm4gcmF3ID8gbmV3IFNldChKU09OLnBhcnNlKHJhdykpIDogbnVsbDtcbiAgfSBjYXRjaCAoXykgeyByZXR1cm4gbnVsbDsgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgQnVpbGQgcmV2aWV3IHRhYmxlIChmZXRjaCArIGluaXRpYWxpc2UpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBidWlsZEV4cGVyaWVuY2VSZXZpZXdUYWJsZSgpIHtcbiAgY29uc3QgZGF0YSA9IHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zO1xuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwZXJpZW5jZS10YWJsZS1jb250YWluZXInKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPjxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIj48L2Rpdj48cCBzdHlsZT1cIm1hcmdpbi10b3A6MTJweDtjb2xvcjojNjQ3NDhiO1wiPkxvYWRpbmcgZXhwZXJpZW5jZSByZWNvbW1lbmRhdGlvbnNcdTIwMjY8L3A+PC9kaXY+JztcblxuICBsZXQgYWxsRXhwZXJpZW5jZUlkcyA9IFtdO1xuICBsZXQgc2F2ZWRSb3dPcmRlciA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHN0YXR1c1JlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3N0YXR1cycpO1xuICAgIGNvbnN0IHN0YXR1c0RhdGEgPSBwYXJzZVN0YXR1c1Jlc3BvbnNlKGF3YWl0IHN0YXR1c1Jlcy5qc29uKCkpO1xuICAgIGFsbEV4cGVyaWVuY2VJZHMgPSBzdGF0dXNEYXRhLmFsbF9leHBlcmllbmNlX2lkcyB8fCBkYXRhLnJlY29tbWVuZGVkX2V4cGVyaWVuY2VzIHx8IFtdO1xuICAgIHNhdmVkUm93T3JkZXIgICAgPSBBcnJheS5pc0FycmF5KHN0YXR1c0RhdGEuZXhwZXJpZW5jZV9yb3dfb3JkZXIpID8gc3RhdHVzRGF0YS5leHBlcmllbmNlX3Jvd19vcmRlciA6IFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGFsbEV4cGVyaWVuY2VJZHMgPSBkYXRhLnJlY29tbWVuZGVkX2V4cGVyaWVuY2VzIHx8IFtdO1xuICB9XG5cbiAgY29uc3QgcmVjb21tZW5kZWRTZXQgPSBuZXcgU2V0KGRhdGEucmVjb21tZW5kZWRfZXhwZXJpZW5jZXMgfHwgW10pO1xuXG4gIC8vIEZldGNoIGFsbCBleHBlcmllbmNlIGRldGFpbHNcbiAgY29uc3QgZXhwZXJpZW5jZXNXaXRoRGV0YWlscyA9IFtdO1xuICBmb3IgKGNvbnN0IGV4cElkIG9mIGFsbEV4cGVyaWVuY2VJZHMpIHtcbiAgICBjb25zdCBkZXRhaWxzID0gYXdhaXQgZ2V0RXhwZXJpZW5jZURldGFpbHMoZXhwSWQpO1xuICAgIGV4cGVyaWVuY2VzV2l0aERldGFpbHMucHVzaCh7IGlkOiBleHBJZCwgZGV0YWlscyB9KTtcbiAgfVxuXG4gIC8vIE9uIGZpcnN0IGxvYWQ6IHJlc3RvcmUgdXNlcidzIHNhdmVkIG9yZGVyIGlmIHByZXNlbnQ7IG90aGVyd2lzZSBkZWZhdWx0LXNvcnRcbiAgLy8gd2l0aCBwcmVzZW50L2N1cnJlbnQgcG9zaXRpb25zIGZpcnN0LCB0aGVuIHJldmVyc2UtY2hyb25vbG9naWNhbCBieSBlbmQgZGF0ZS5cbiAgLy8gT24gcmUtcmVuZGVyLCBwcmVzZXJ2ZSB0aGUgaW4tbWVtb3J5IHVzZXIgb3JkZXIuXG4gIGlmICghd2luZG93Ll9leHBlcmllbmNlc09yZGVyZWQpIHtcbiAgICBpZiAoc2F2ZWRSb3dPcmRlci5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBSZXN0b3JlIHVzZXIncyBleHBsaWNpdGx5IHNhdmVkIG9yZGVyaW5nIGZyb20gdGhlIHNlc3Npb25cbiAgICAgIGNvbnN0IG9yZGVyTWFwID0gT2JqZWN0LmZyb21FbnRyaWVzKHNhdmVkUm93T3JkZXIubWFwKChpZCwgaSkgPT4gW2lkLCBpXSkpO1xuICAgICAgZXhwZXJpZW5jZXNXaXRoRGV0YWlscy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGFpID0gb3JkZXJNYXBbYS5pZF0gPz8gc2F2ZWRSb3dPcmRlci5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGJpID0gb3JkZXJNYXBbYi5pZF0gPz8gc2F2ZWRSb3dPcmRlci5sZW5ndGg7XG4gICAgICAgIHJldHVybiBhaSAtIGJpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmF1bHQ6IHNvcnQgYnkgTExNIHJlY29tbWVuZGF0aW9uIHN0cmVuZ3RoIGZpcnN0LCB0aGVuIHJldmVyc2UtY2hyb25vbG9naWNhbFxuICAgICAgY29uc3QgX0FDVElPTl9SQU5LID0geyBlbXBoYXNpemU6IDAsIGluY2x1ZGU6IDEsICdkZS1lbXBoYXNpemUnOiAyLCBleGNsdWRlOiAzIH07XG4gICAgICBjb25zdCBfcGFyc2VFbmRLZXkgPSAoZXhwKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhdyA9IChleHAuZGV0YWlscz8uZW5kX2RhdGUgfHwgZXhwLmRldGFpbHM/LmVuZCB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghcmF3IHx8IFsncHJlc2VudCcsICdjdXJyZW50JywgJ25vdycsICdvbmdvaW5nJ10uaW5jbHVkZXMocmF3KSkgcmV0dXJuICc5OTk5LTEyJztcbiAgICAgICAgaWYgKC9eXFxkezR9JC8udGVzdChyYXcpKSByZXR1cm4gcmF3ICsgJy0xMic7XG4gICAgICAgIHJldHVybiByYXc7XG4gICAgICB9O1xuICAgICAgY29uc3QgX2dldEFjdGlvblJhbmsgPSAoZXhwKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYyA9IGdldEV4cGVyaWVuY2VSZWNvbW1lbmRhdGlvbihleHAuaWQsIGRhdGEpO1xuICAgICAgICBpZiAoIXJlYykgcmV0dXJuIDE7IC8vIGRlZmF1bHQgdG8gJ2luY2x1ZGUnIHJhbmsgd2hlbiBubyByZWNvbW1lbmRhdGlvblxuICAgICAgICBpZiAocmVjID09PSAnRW1waGFzaXplJykgICAgcmV0dXJuIDA7XG4gICAgICAgIGlmIChyZWMgPT09ICdJbmNsdWRlJykgICAgICByZXR1cm4gMTtcbiAgICAgICAgaWYgKHJlYyA9PT0gJ0RlLWVtcGhhc2l6ZScpIHJldHVybiAyO1xuICAgICAgICBpZiAocmVjID09PSAnT21pdCcpICAgICAgICAgcmV0dXJuIDM7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfTtcbiAgICAgIGV4cGVyaWVuY2VzV2l0aERldGFpbHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCByYW5rRGlmZiA9IF9nZXRBY3Rpb25SYW5rKGEpIC0gX2dldEFjdGlvblJhbmsoYik7XG4gICAgICAgIGlmIChyYW5rRGlmZiAhPT0gMCkgcmV0dXJuIHJhbmtEaWZmO1xuICAgICAgICByZXR1cm4gX3BhcnNlRW5kS2V5KGIpLmxvY2FsZUNvbXBhcmUoX3BhcnNlRW5kS2V5KGEpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB3aW5kb3cuX2V4cGVyaWVuY2VzT3JkZXJlZCA9IGV4cGVyaWVuY2VzV2l0aERldGFpbHM7XG4gIH0gZWxzZSB7XG4gICAgLy8gTWVyZ2UgYW55IG5ld2x5IGRpc2NvdmVyZWQgZXhwZXJpZW5jZXMgaW50byB0aGUgY2FjaGVkIG9yZGVyXG4gICAgY29uc3Qga25vd25JZHMgPSBuZXcgU2V0KHdpbmRvdy5fZXhwZXJpZW5jZXNPcmRlcmVkLm1hcChlID0+IGUuaWQpKTtcbiAgICBmb3IgKGNvbnN0IGV4cCBvZiBleHBlcmllbmNlc1dpdGhEZXRhaWxzKSB7XG4gICAgICBpZiAoIWtub3duSWRzLmhhcyhleHAuaWQpKSB3aW5kb3cuX2V4cGVyaWVuY2VzT3JkZXJlZC5wdXNoKGV4cCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB3aGljaCByZWNvbW1lbmRhdGlvbnMgYXJlIG5ldyBzaW5jZSBsYXN0IHJlbmRlciAocmVydW4gY2hhbmdlIGJhZGdlcylcbiAgY29uc3QgcHJldkV4cFNuYXAgPSBfZ2V0RXhwU25hcHNob3QoKTtcbiAgY29uc3QgbmV3UmVjb21tZW5kZWRFeHBzID0gcHJldkV4cFNuYXBcbiAgICA/IG5ldyBTZXQoWy4uLnJlY29tbWVuZGVkU2V0XS5maWx0ZXIoaWQgPT4gIXByZXZFeHBTbmFwLmhhcyhpZCkpKVxuICAgIDogbmV3IFNldCgpO1xuICBfc2F2ZUV4cFNuYXBzaG90KHJlY29tbWVuZGVkU2V0KTtcblxuICAvLyBJbml0aWFsaXNlIHNhdmVkIGRlY2lzaW9uc1xuICBjb25zdCBzYXZlZEV4cERlY3MgPSB3aW5kb3cuX3NhdmVkRGVjaXNpb25zPy5leHBlcmllbmNlX2RlY2lzaW9ucyB8fCB7fTtcbiAgZm9yIChjb25zdCB7IGlkOiBleHBJZCB9IG9mIHdpbmRvdy5fZXhwZXJpZW5jZXNPcmRlcmVkKSB7XG4gICAgY29uc3QgcmVjb21tZW5kYXRpb24gPSBnZXRFeHBlcmllbmNlUmVjb21tZW5kYXRpb24oZXhwSWQsIGRhdGEpO1xuICAgIGNvbnN0IGlzUmVjb21tZW5kZWQgID0gcmVjb21tZW5kZWRTZXQuaGFzKGV4cElkKTtcbiAgICBsZXQgZGVmYXVsdEFjdGlvbiA9ICdleGNsdWRlJztcbiAgICBpZiAgICAgIChyZWNvbW1lbmRhdGlvbiA9PT0gJ0VtcGhhc2l6ZScpICAgIGRlZmF1bHRBY3Rpb24gPSAnZW1waGFzaXplJztcbiAgICBlbHNlIGlmIChyZWNvbW1lbmRhdGlvbiA9PT0gJ0luY2x1ZGUnKSAgICAgIGRlZmF1bHRBY3Rpb24gPSAnaW5jbHVkZSc7XG4gICAgZWxzZSBpZiAocmVjb21tZW5kYXRpb24gPT09ICdEZS1lbXBoYXNpemUnKSBkZWZhdWx0QWN0aW9uID0gJ2RlLWVtcGhhc2l6ZSc7XG4gICAgZWxzZSBpZiAocmVjb21tZW5kYXRpb24gPT09ICdPbWl0JykgICAgICAgICBkZWZhdWx0QWN0aW9uID0gJ2V4Y2x1ZGUnO1xuICAgIGVsc2UgaWYgKGlzUmVjb21tZW5kZWQpICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEFjdGlvbiA9ICdpbmNsdWRlJztcbiAgICB1c2VyU2VsZWN0aW9ucy5leHBlcmllbmNlc1tleHBJZF0gPSBzYXZlZEV4cERlY3NbZXhwSWRdIHx8IGRlZmF1bHRBY3Rpb247XG4gIH1cblxuICBfcmVuZGVyRXhwZXJpZW5jZVRhYmxlKGNvbnRhaW5lciwgcmVjb21tZW5kZWRTZXQsIGRhdGEsIG5ld1JlY29tbWVuZGVkRXhwcyk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZW5kZXIgdGFibGUgSFRNTCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gX3JlbmRlckV4cGVyaWVuY2VUYWJsZShjb250YWluZXIsIHJlY29tbWVuZGVkU2V0LCBkYXRhLCBuZXdSZWNvbW1lbmRlZEV4cHMgPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCFjb250YWluZXIpIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBlcmllbmNlLXRhYmxlLWNvbnRhaW5lcicpO1xuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICBpZiAoIXJlY29tbWVuZGVkU2V0KSByZWNvbW1lbmRlZFNldCA9IG5ldyBTZXQoKHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zPy5yZWNvbW1lbmRlZF9leHBlcmllbmNlcykgfHwgW10pO1xuICBpZiAoIWRhdGEpIGRhdGEgPSB3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucztcblxuICAvLyBEZXN0cm95IGFueSBleGlzdGluZyBEYXRhVGFibGUgYmVmb3JlIHJlYnVpbGRpbmdcbiAgaWYgKCQuZm4uRGF0YVRhYmxlLmlzRGF0YVRhYmxlKCcjZXhwZXJpZW5jZS1yZXZpZXctdGFibGUnKSkge1xuICAgICQoJyNleHBlcmllbmNlLXJldmlldy10YWJsZScpLkRhdGFUYWJsZSgpLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGNvbnN0IGV4cHMgPSB3aW5kb3cuX2V4cGVyaWVuY2VzT3JkZXJlZCB8fCBbXTtcbiAgbGV0IHRhYmxlSFRNTCA9IGBcbiAgICA8dGFibGUgaWQ9XCJleHBlcmllbmNlLXJldmlldy10YWJsZVwiIGNsYXNzPVwicmV2aWV3LXRhYmxlXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGg+RXhwZXJpZW5jZTwvdGg+XG4gICAgICAgICAgPHRoPkRhdGVzPC90aD5cbiAgICAgICAgICA8dGg+UmVjb21tZW5kYXRpb248L3RoPlxuICAgICAgICAgIDx0aD5Db25maWRlbmNlPC90aD5cbiAgICAgICAgICA8dGg+UmVhc29uaW5nPC90aD5cbiAgICAgICAgICA8dGg+WW91ciBTZWxlY3Rpb248L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgYDtcblxuICBleHBzLmZvckVhY2goKHsgaWQ6IGV4cElkLCBkZXRhaWxzIH0sIHJvd0lkeCkgPT4ge1xuICAgIGNvbnN0IHJlY29tbWVuZGF0aW9uICAgID0gZ2V0RXhwZXJpZW5jZVJlY29tbWVuZGF0aW9uKGV4cElkLCBkYXRhKTtcbiAgICBjb25zdCBjb25maWRlbmNlICAgICAgICA9IGdldENvbmZpZGVuY2VMZXZlbChleHBJZCwgZGF0YSk7XG4gICAgY29uc3QgcmVhc29uaW5nICAgICAgICAgPSBnZXRFeHBlcmllbmNlUmVhc29uaW5nKGV4cElkLCBkYXRhKTtcbiAgICBjb25zdCByZWNSZWNvcmQgICAgICAgICA9IF9maW5kRXhwZXJpZW5jZVJlY29tbWVuZGF0aW9uUmVjb3JkKGV4cElkLCBkYXRhKTtcbiAgICBjb25zdCBidWxsZXRPcmRlciAgICAgICA9IHJlY1JlY29yZCAmJiB0eXBlb2YgcmVjUmVjb3JkLmJ1bGxldF9vcmRlciA9PT0gJ29iamVjdCcgPyByZWNSZWNvcmQuYnVsbGV0X29yZGVyIDogbnVsbDtcbiAgICBjb25zdCBidWxsZXRPcmRlclN1bW1hcnkgPSBfZm9ybWF0U3VnZ2VzdGVkT3JkZXJTdW1tYXJ5KGJ1bGxldE9yZGVyPy5vcmRlcik7XG4gICAgY29uc3QgdGl0bGUgICAgICAgICAgICAgPSBkZXRhaWxzID8gZGV0YWlscy50aXRsZSAgIDogZXhwSWQ7XG4gICAgY29uc3QgY29tcGFueSAgICAgICAgICAgPSBkZXRhaWxzID8gZGV0YWlscy5jb21wYW55IDogJyc7XG4gICAgY29uc3Qgc3RhcnREYXRlICAgICAgICAgPSBkZXRhaWxzPy5zdGFydF9kYXRlIHx8ICcnO1xuICAgIGNvbnN0IGVuZERhdGUgICAgICAgICAgID0gZGV0YWlscz8uZW5kX2RhdGUgICB8fCAncHJlc2VudCc7XG4gICAgY29uc3QgZHVyYXRpb24gICAgICAgICAgPSBzdGFydERhdGUgPyBgJHtzdGFydERhdGV9IC0gJHtlbmREYXRlfWAgOiAoZGV0YWlscz8uZHVyYXRpb24gfHwgJycpO1xuICAgIGNvbnN0IGRlZmF1bHRBY3Rpb24gICAgID0gdXNlclNlbGVjdGlvbnMuZXhwZXJpZW5jZXNbZXhwSWRdIHx8ICdpbmNsdWRlJztcbiAgICBjb25zdCByZWNvbW1lbmRhdGlvblRleHQgPSByZWNvbW1lbmRhdGlvbiB8fCAnSW5jbHVkZSc7XG4gICAgY29uc3QgY29uZmlkZW5jZUJhZGdlICAgPSBgPHNwYW4gY2xhc3M9XCJjb25maWRlbmNlLWJhZGdlIGNvbmZpZGVuY2UtJHtjb25maWRlbmNlLmxldmVsfVwiPiR7Y29uZmlkZW5jZS50ZXh0fTwvc3Bhbj5gO1xuICAgIGNvbnN0IHJlYXNvbmluZ1NlZ21lbnRzID0gW3JlYXNvbmluZyB8fCAnVGhpcyBleHBlcmllbmNlIHdhcyBzZWxlY3RlZCBiYXNlZCBvbiBpdHMgcmVsZXZhbmNlIHRvIHRoZSBwb3NpdGlvbiByZXF1aXJlbWVudHMuJ107XG4gICAgaWYgKGJ1bGxldE9yZGVyU3VtbWFyeSkgcmVhc29uaW5nU2VnbWVudHMucHVzaChgU3VnZ2VzdGVkIGJ1bGxldCBvcmRlcjogJHtidWxsZXRPcmRlclN1bW1hcnl9LmApO1xuICAgIGlmIChidWxsZXRPcmRlcj8ucmVhc29uaW5nKSByZWFzb25pbmdTZWdtZW50cy5wdXNoKFN0cmluZyhidWxsZXRPcmRlci5yZWFzb25pbmcpKTtcbiAgICBpZiAoYnVsbGV0T3JkZXI/LmF0c19pbXBhY3QpIHJlYXNvbmluZ1NlZ21lbnRzLnB1c2goYEFUUyBpbXBhY3Q6ICR7YnVsbGV0T3JkZXIuYXRzX2ltcGFjdH1gKTtcbiAgICBpZiAoYnVsbGV0T3JkZXI/LnBhZ2VfbGVuZ3RoX2ltcGFjdCkgcmVhc29uaW5nU2VnbWVudHMucHVzaChgUGFnZSBsZW5ndGggaW1wYWN0OiAke2J1bGxldE9yZGVyLnBhZ2VfbGVuZ3RoX2ltcGFjdH1gKTtcbiAgICBjb25zdCByZWFzb25pbmdUZXh0ICAgICA9IHJlYXNvbmluZ1NlZ21lbnRzLmpvaW4oJyAnKTtcbiAgICBjb25zdCBpc0ZpcnN0ICAgICAgICAgICA9IHJvd0lkeCA9PT0gMDtcbiAgICBjb25zdCBpc0xhc3QgICAgICAgICAgICA9IHJvd0lkeCA9PT0gZXhwcy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IHRpdGxlRXNjICAgICAgICAgID0gZXNjYXBlSHRtbCh0aXRsZSk7XG4gICAgY29uc3QgcmVydW5OZXdCYWRnZSA9IG5ld1JlY29tbWVuZGVkRXhwcy5oYXMoZXhwSWQpXG4gICAgICA/ICc8c3BhbiBjbGFzcz1cInJ3LWNoYW5nZS1iYWRnZSBydy1jaGFuZ2UtbmV3XCIgYXJpYS1sYWJlbD1cIk5ldyByZWNvbW1lbmRhdGlvbiBzaW5jZSBwcmV2aW91cyBydW5cIj5cdUQ4M0NcdUREOTUgTmV3PC9zcGFuPidcbiAgICAgIDogJyc7XG5cbiAgICB0YWJsZUhUTUwgKz0gYFxuICAgICAgPHRyIGRhdGEtZXhwLWlkPVwiJHtleHBJZH1cIiBkYXRhLXN0YXJ0LWRhdGU9XCIke3N0YXJ0RGF0ZX1cIj5cbiAgICAgICAgPHRkPlxuICAgICAgICAgIDxzdHJvbmc+JHt0aXRsZUVzY308L3N0cm9uZz4ke3JlcnVuTmV3QmFkZ2V9PGJyPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtcIj4ke2VzY2FwZUh0bWwoY29tcGFueSl9PC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJ3aGl0ZS1zcGFjZTpub3dyYXA7XCI+JHtlc2NhcGVIdG1sKGR1cmF0aW9uKX08L3RkPlxuICAgICAgICA8dGQ+PHN0cm9uZz4ke2VzY2FwZUh0bWwocmVjb21tZW5kYXRpb25UZXh0KX08L3N0cm9uZz48L3RkPlxuICAgICAgICA8dGQ+JHtjb25maWRlbmNlQmFkZ2V9PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwibWF4LXdpZHRoOjMwMHB4O1wiPjxzbWFsbD4ke2VzY2FwZUh0bWwocmVhc29uaW5nVGV4dCl9PC9zbWFsbD48L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb24tYnRuc1wiIHN0eWxlPVwid2hpdGUtc3BhY2U6bm93cmFwO1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2RlZmF1bHRBY3Rpb24gPT09ICdlbXBoYXNpemUnICAgID8gJ2FjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImVtcGhhc2l6ZVwiICAgIGFyaWEtbGFiZWw9XCJFbXBoYXNpemUgJHt0aXRsZUVzY31cIiAgICAgICBhcmlhLXByZXNzZWQ9XCIke2RlZmF1bHRBY3Rpb24gPT09ICdlbXBoYXNpemUnfVwiICAgIHRpdGxlPVwiRW1waGFzaXplIFx1MjAxNCBmZWF0dXJlIHByb21pbmVudGx5XCIgc3R5bGU9XCJjb2xvcjojMTBiOTgxO1wiPlx1Mjc5NTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2RlZmF1bHRBY3Rpb24gPT09ICdpbmNsdWRlJyAgICAgID8gJ2FjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImluY2x1ZGVcIiAgICAgIGFyaWEtbGFiZWw9XCJJbmNsdWRlICR7dGl0bGVFc2N9XCIgICAgICAgICBhcmlhLXByZXNzZWQ9XCIke2RlZmF1bHRBY3Rpb24gPT09ICdpbmNsdWRlJ31cIiAgICAgIHRpdGxlPVwiSW5jbHVkZSBcdTIwMTQgc3RhbmRhcmQgdHJlYXRtZW50XCI+XHUyNzEzPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2RlLWVtcGhhc2l6ZScgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiZGUtZW1waGFzaXplXCIgYXJpYS1sYWJlbD1cIkRlLWVtcGhhc2l6ZSAke3RpdGxlRXNjfVwiICAgIGFyaWEtcHJlc3NlZD1cIiR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2RlLWVtcGhhc2l6ZSd9XCIgdGl0bGU9XCJEZS1lbXBoYXNpemUgXHUyMDE0IGJyaWVmIG1lbnRpb25cIiAgICBzdHlsZT1cImNvbG9yOiNmNTllMGI7XCI+XHUyNzk2PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2V4Y2x1ZGUnICAgICAgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiZXhjbHVkZVwiICAgICAgYXJpYS1sYWJlbD1cIkV4Y2x1ZGUgJHt0aXRsZUVzY31cIiAgICAgICAgIGFyaWEtcHJlc3NlZD1cIiR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2V4Y2x1ZGUnfVwiICAgICAgdGl0bGU9XCJFeGNsdWRlIFx1MjAxNCBvbWl0IGZyb20gQ1ZcIiAgICAgICAgICBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7XCI+JHtleWVTbGFzaEljb24oKX08L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBkYXRhLWFjdGlvbj1cInJlb3JkZXJcIiBhcmlhLWxhYmVsPVwiUmVvcmRlciBidWxsZXRzIGZvciAke3RpdGxlRXNjfVwiIHRpdGxlPVwiJHtidWxsZXRPcmRlclN1bW1hcnkgPyBgUmVvcmRlciBidWxsZXQgcG9pbnRzIChBSSBzdWdnZXN0ZWQgb3JkZXIgJHtidWxsZXRPcmRlclN1bW1hcnl9KWAgOiAnUmVvcmRlciBidWxsZXQgcG9pbnRzJ31cIiBzdHlsZT1cImNvbG9yOiM2MzY2ZjE7XCI+XHUyMTk1PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgZGF0YS1hY3Rpb249XCJyb3ctdXBcIiAgIGFyaWEtbGFiZWw9XCJNb3ZlICR7dGl0bGVFc2N9IGVhcmxpZXIgaW4gQ1ZcIiB0aXRsZT1cIk1vdmUgdXAgaW4gQ1ZcIiAgICR7aXNGaXJzdCA/ICdkaXNhYmxlZCcgOiAnJ30+XHUyMTkxPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgZGF0YS1hY3Rpb249XCJyb3ctZG93blwiIGFyaWEtbGFiZWw9XCJNb3ZlICR7dGl0bGVFc2N9IGxhdGVyIGluIENWXCIgICB0aXRsZT1cIk1vdmUgZG93biBpbiBDVlwiICR7aXNMYXN0ICA/ICdkaXNhYmxlZCcgOiAnJ30+XHUyMTkzPC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIGA7XG4gIH0pO1xuXG4gIHRhYmxlSFRNTCArPSAnPC90Ym9keT48L3RhYmxlPic7XG4gIGNvbnRhaW5lci5pbm5lckhUTUwgPSB0YWJsZUhUTUw7XG5cbiAgLy8gRGVsZWdhdGVkIGNsaWNrIGhhbmRsZXJcbiAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNleHBlcmllbmNlLXJldmlldy10YWJsZSB0Ym9keScpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xuICAgIGNvbnN0IGJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5pY29uLWJ0bicpO1xuICAgIGlmICghYnRuKSByZXR1cm47XG4gICAgY29uc3QgdHIgPSBidG4uY2xvc2VzdCgndHJbZGF0YS1leHAtaWRdJyk7XG4gICAgaWYgKCF0cikgcmV0dXJuO1xuICAgIGNvbnN0IGV4cElkICA9IHRyLmRhdGFzZXQuZXhwSWQ7XG4gICAgY29uc3QgYWN0aW9uID0gYnRuLmRhdGFzZXQuYWN0aW9uO1xuICAgIGlmIChhY3Rpb24gPT09ICdyZW9yZGVyJykge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IHRpdGxlRWwgPSB0ci5xdWVyeVNlbGVjdG9yKCdzdHJvbmcnKTtcbiAgICAgIHNob3dCdWxsZXRSZW9yZGVyKGV4cElkLCB0aXRsZUVsID8gdGl0bGVFbC50ZXh0Q29udGVudCA6ICcnKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3Jvdy11cCcpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBtb3ZlRXhwZXJpZW5jZVJvdyhleHBJZCwgLTEpO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAncm93LWRvd24nKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgbW92ZUV4cGVyaWVuY2VSb3coZXhwSWQsICsxKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbikge1xuICAgICAgaGFuZGxlQWN0aW9uQ2xpY2soZXhwSWQsIGFjdGlvbiwgJ2V4cGVyaWVuY2UnKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEJ1bGsgdG9vbGJhclxuICBjb25zdCBleHBUb29sYmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGV4cFRvb2xiYXIuY2xhc3NOYW1lID0gJ2J1bGstdG9vbGJhcic7XG4gIGV4cFRvb2xiYXIuaW5uZXJIVE1MID0gYFxuICAgIDxzcGFuPkJ1bGs6PC9zcGFuPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLXJlY29tbWVuZGVkXCIgb25jbGljaz1cImJ1bGtBY3Rpb24oJ3JlY29tbWVuZGVkJywnZXhwZXJpZW5jZScpXCIgdGl0bGU9XCJTZXQgYWxsIHRvIHRoZSBMTE0gcmVjb21tZW5kYXRpb25cIj5cdTI3MjggQWNjZXB0IEFsbCBSZWNvbW1lbmRlZDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLWVtcGhhc2l6ZVwiICAgb25jbGljaz1cImJ1bGtBY3Rpb24oJ2VtcGhhc2l6ZScsJ2V4cGVyaWVuY2UnKVwiPlx1Mjc5NSBFbXBoYXNpemUgQWxsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ1bGstYnRuIGJ1bGstaW5jbHVkZVwiICAgICBvbmNsaWNrPVwiYnVsa0FjdGlvbignaW5jbHVkZScsJ2V4cGVyaWVuY2UnKVwiPlx1MjcxMyBJbmNsdWRlIEFsbDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLWV4Y2x1ZGVcIiAgICAgb25jbGljaz1cImJ1bGtBY3Rpb24oJ2V4Y2x1ZGUnLCdleHBlcmllbmNlJylcIj4ke2V5ZVNsYXNoSWNvbigpfSBFeGNsdWRlIEFsbDwvYnV0dG9uPlxuICBgO1xuICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKGV4cFRvb2xiYXIsIGNvbnRhaW5lci5maXJzdENoaWxkKTtcblxuICAvLyBJbml0aWFsaXplIERhdGFUYWJsZSB3aXRoIG5vIGF1dG8tc29ydCAocm93cyBzdGF5IGluIHVzZXItc3BlY2lmaWVkIG9yZGVyKVxuICAkKCcjZXhwZXJpZW5jZS1yZXZpZXctdGFibGUnKS5EYXRhVGFibGUoe1xuICAgIHBhZ2luZzogZmFsc2UsXG4gICAgb3JkZXI6IFtdLFxuICAgIGxhbmd1YWdlOiB7IHNlYXJjaDogJ0ZpbHRlciBleHBlcmllbmNlczonIH1cbiAgfSk7XG4gIF91cGRhdGVQYWdlRXN0aW1hdGUoKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFJvdyByZW9yZGVyIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBtb3ZlRXhwZXJpZW5jZVJvdyhleHBJZCwgZGlyZWN0aW9uKSB7XG4gIGNvbnN0IGFyciA9IHdpbmRvdy5fZXhwZXJpZW5jZXNPcmRlcmVkO1xuICBpZiAoIWFycikgcmV0dXJuO1xuICBjb25zdCBpZHggPSBhcnIuZmluZEluZGV4KGUgPT4gZS5pZCA9PT0gZXhwSWQpO1xuICBpZiAoaWR4IDwgMCkgcmV0dXJuO1xuICBjb25zdCBuZXdJZHggPSBpZHggKyBkaXJlY3Rpb247XG4gIGlmIChuZXdJZHggPCAwIHx8IG5ld0lkeCA+PSBhcnIubGVuZ3RoKSByZXR1cm47XG4gIFthcnJbaWR4XSwgYXJyW25ld0lkeF1dID0gW2FycltuZXdJZHhdLCBhcnJbaWR4XV07XG4gIHdpbmRvdy5fZXhwZXJpZW5jZXNPcmRlcmVkID0gYXJyO1xuICBfcmVuZGVyRXhwZXJpZW5jZVRhYmxlKG51bGwsIG51bGwsIG51bGwpO1xuICAvLyBQZXJzaXN0IHRoZSBuZXcgb3JkZXIgdG8gdGhlIGJhY2tlbmQgKGZpcmUtYW5kLWZvcmdldDsgbm8gVUkgYmxvY2spXG4gIGZldGNoKCcvYXBpL3Jlb3JkZXItcm93cycsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdleHBlcmllbmNlJywgb3JkZXJlZF9pZHM6IGFyci5tYXAoZSA9PiBlLmlkKSB9KVxuICB9KS5jYXRjaCgoKSA9PiB7fSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBMZWdhY3kgaW50ZXJhY3RpdmUtbW9kZSByZXNwb25zZSBoYW5kbGVyIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVFeHBlcmllbmNlUmVzcG9uc2UobWVzc2FnZSkge1xuICB3aW5kb3cud2FpdGluZ0ZvckV4cGVyaWVuY2VSZXNwb25zZSA9IGZhbHNlO1xuICBjb25zdCByZXNwb25zZSA9IG1lc3NhZ2UudG9Mb3dlckNhc2UoKTtcblxuICBpZiAocmVzcG9uc2UuaW5jbHVkZXMoJ3llcycpKSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ0dyZWF0ISBJXFwnbGwgaW5jbHVkZSB0aGlzIGV4cGVyaWVuY2UgcHJvbWluZW50bHkuJyk7XG4gIH0gZWxzZSBpZiAocmVzcG9uc2UuaW5jbHVkZXMoJ25vJykpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnVW5kZXJzdG9vZC4gSVxcJ2xsIGV4Y2x1ZGUgdGhpcyBleHBlcmllbmNlIGZyb20gdGhlIGZpbmFsIENWLicpO1xuICB9IGVsc2UgaWYgKHJlc3BvbnNlLmluY2x1ZGVzKCdtYXliZScpKSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ0lcXCdsbCBpbmNsdWRlIGl0IGJ1dCB3aXRoIGxlc3MgZW1waGFzaXMuJyk7XG4gIH0gZWxzZSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ0lcXCdsbCBub3RlIHlvdXIgZmVlZGJhY2sgb24gdGhpcyBleHBlcmllbmNlLicpO1xuICB9XG5cbiAgLy8gTW92ZSB0byBuZXh0IGV4cGVyaWVuY2UgKGN1cnJlbnRJbmRleCBhbHJlYWR5IGluY3JlbWVudGVkIGluIHNob3dOZXh0RXhwZXJpZW5jZSlcbiAgc2V0VGltZW91dCgoKSA9PiBzaG93TmV4dEV4cGVyaWVuY2UoKSwgODAwKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFN1Ym1pdCBkZWNpc2lvbnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdEV4cGVyaWVuY2VEZWNpc2lvbnMoKSB7XG4gIC8qIGR1Y2tmbG93OlxuICAgKiAgIGlkOiBleHBlcmllbmNlX3VpX3N1Ym1pdF9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTAzLTI1VDIxOjM5OjQ4WidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6ZXhwZXJpZW5jZS1yZXZpZXcuc3VibWl0XG4gICAqICAgY2FsbHM6XG4gICAqICAgLSBQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9uc1xuICAgKiAgIC0gUE9TVCAvYXBpL2N2L2xheW91dC1lc3RpbWF0ZVxuICAgKiAgIHJlYWRzOlxuICAgKiAgIC0gd2luZG93OnVzZXJTZWxlY3Rpb25zLmV4cGVyaWVuY2VzXG4gICAqICAgd3JpdGVzOlxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9ucy5kZWNpc2lvbnNcbiAgICogICAtIHdpbmRvdzpfc2F2ZWREZWNpc2lvbnMuZXhwZXJpZW5jZV9kZWNpc2lvbnNcbiAgICogICBub3RlczogUGVyc2lzdHMgcGVyLWV4cGVyaWVuY2UgaW5jbHVzaW9uIGRlY2lzaW9ucyBhbmQgdHJpZ2dlcnMgZG93bnN0cmVhbSBBVFMvbGF5b3V0IHJlZnJlc2hlcyB0aGF0IGRlcGVuZCBvbiB0aGUgc2FtZSByZXZpZXcgY2hvaWNlcy5cbiAgICovXG4gIGNvbnN0IGRlY2lzaW9ucyA9IHVzZXJTZWxlY3Rpb25zLmV4cGVyaWVuY2VzO1xuICBjb25zdCBjb3VudCA9IE9iamVjdC5rZXlzKGRlY2lzaW9ucykubGVuZ3RoO1xuXG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIHNob3dBbGVydE1vZGFsKCdObyBTZWxlY3Rpb25zJywgJ1BsZWFzZSBzZWxlY3QgYWN0aW9ucyBmb3IgYXQgbGVhc3Qgb25lIGV4cGVyaWVuY2UgYmVmb3JlIHN1Ym1pdHRpbmcuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL3Jldmlldy1kZWNpc2lvbnMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB0eXBlOiAnZXhwZXJpZW5jZXMnLFxuICAgICAgICBkZWNpc2lvbnM6IGRlY2lzaW9uc1xuICAgICAgfSlcbiAgICB9KTtcblxuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgc3RhdGVNYW5hZ2VyLm1hcmtDb250ZW50Q2hhbmdlZCgpO1xuICAgICAgc2hvd1RvYXN0KGBFeHBlcmllbmNlIGRlY2lzaW9ucyBzYXZlZCAoJHtjb3VudH0gaXRlbXMpYCk7XG4gICAgICBzY2hlZHVsZUF0c1JlZnJlc2goKTtcbiAgICAgIC8vIFBlcnNpc3Qgc2F2ZWQgZGVjaXNpb25zIGxvY2FsbHkgc28gdGhlIFVJIHJlZmxlY3RzIHRoZW0gaW1tZWRpYXRlbHlcbiAgICAgIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMgPSB3aW5kb3cuX3NhdmVkRGVjaXNpb25zIHx8IHt9O1xuICAgICAgd2luZG93Ll9zYXZlZERlY2lzaW9ucy5leHBlcmllbmNlX2RlY2lzaW9ucyA9IGRlY2lzaW9ucztcbiAgICAgIHVzZXJTZWxlY3Rpb25zLmV4cGVyaWVuY2VzID0geyAuLi5kZWNpc2lvbnMgfTtcbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlSW5jbHVzaW9uQ291bnRzID09PSAnZnVuY3Rpb24nKSB1cGRhdGVJbmNsdXNpb25Db3VudHMoKTtcbiAgICAgIHN3aXRjaFRhYignYWNoLWVkaXRvcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIHNob3dUb2FzdChgRXJyb3I6ICR7ZXJyb3IuZXJyb3IgfHwgJ0ZhaWxlZCB0byBzYXZlIGRlY2lzaW9ucyd9YCwgJ2Vycm9yJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcignRXJyb3Igc3VibWl0dGluZyBleHBlcmllbmNlIGRlY2lzaW9uczonLCBlcnJvcik7XG4gICAgc2hvd1RvYXN0KCdGYWlsZWQgdG8gc2F2ZSBkZWNpc2lvbnMuIFBsZWFzZSB0cnkgYWdhaW4uJywgJ2Vycm9yJyk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB7XG4gIGdldEV4cGVyaWVuY2VEZXRhaWxzLFxuICBidWlsZEV4cGVyaWVuY2VSZXZpZXdUYWJsZSxcbiAgX3JlbmRlckV4cGVyaWVuY2VUYWJsZSxcbiAgbW92ZUV4cGVyaWVuY2VSb3csXG4gIGhhbmRsZUV4cGVyaWVuY2VSZXNwb25zZSxcbiAgc3VibWl0RXhwZXJpZW5jZURlY2lzaW9ucyxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9za2lsbHMtcmV2aWV3LmpzXG4gKiBTa2lsbHMtcmV2aWV3IHRhYmxlOiBmZXRjaCwgcmVuZGVyLCByb3ctcmVvcmRlciwgYW5kIHN1Ym1pdCBkZWNpc2lvbnMuXG4gKlxuICogRGVwZW5kZW5jaWVzIChyZXNvbHZlZCB0aHJvdWdoIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIHVzZXJTZWxlY3Rpb25zLCBwZW5kaW5nUmVjb21tZW5kYXRpb25zLCBfc2F2ZWREZWNpc2lvbnMsIF9za2lsbHNPcmRlcmVkLFxuICogICBfbmV3U2tpbGxzRnJvbUxMTSwgdGFiRGF0YSwgcGFyc2VTdGF0dXNSZXNwb25zZSxcbiAqICAgZ2V0U2tpbGxSZWNvbW1lbmRhdGlvbiwgZ2V0U2tpbGxDb25maWRlbmNlLCBnZXRTa2lsbFJlYXNvbmluZyxcbiAqICAgZXNjYXBlSHRtbCwgaGFuZGxlQWN0aW9uQ2xpY2ssIGJ1bGtBY3Rpb24sIF91cGRhdGVQYWdlRXN0aW1hdGUsXG4gKiAgIHVwZGF0ZUluY2x1c2lvbkNvdW50cywgc3dpdGNoVGFiLFxuICogICBzaG93QWxlcnRNb2RhbCwgc2hvd1RvYXN0LCBzY2hlZHVsZUF0c1JlZnJlc2gsXG4gKiAgICQsICQuZm4uRGF0YVRhYmxlIChqUXVlcnkgKyBEYXRhVGFibGVzKVxuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcignc2tpbGxzLXJldmlldycpO1xuXG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgZXllU2xhc2hJY29uIH0gZnJvbSAnLi9yZXZpZXctaWNvbnMuanMnO1xuXG4vLyBcdTI1MDBcdTI1MDAgWWVhcnMtZnJvbS1leHBlcmllbmNlIGhlbHBlcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIF9wYXJzZVllYXJGcm9tU3RyKHN0cikge1xuICBpZiAoIXN0cikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHMgPSBTdHJpbmcoc3RyKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgaWYgKFsnY3VycmVudCcsICdwcmVzZW50JywgJ25vdycsICdvbmdvaW5nJ10uaW5jbHVkZXMocykpIHJldHVybiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IG0gPSBzLm1hdGNoKC9cXGIoMTl8MjApXFxkezJ9XFxiLyk7XG4gIHJldHVybiBtID8gcGFyc2VJbnQobVswXSwgMTApIDogbnVsbDtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGxpc3Qgb2YgZXhwZXJpZW5jZSBJRHMgYW5kIHRoZSBmdWxsIGV4cGVyaWVuY2VzIGFycmF5LCByZXR1cm5cbiAqIHRoZSB0b3RhbCB5ZWFycyBvZiBleHBlcmllbmNlIChzdW0gb2YgZHVyYXRpb24gb2YgbWF0Y2hlZCBlbnRyaWVzKS5cbiAqIFJldHVybnMgbnVsbCBpZiBubyBtYXRjaGluZyBlbnRyaWVzIGZvdW5kLlxuICovXG5mdW5jdGlvbiBfY29tcHV0ZVllYXJzRnJvbUlkcyhpZHMsIGFsbEV4cGVyaWVuY2VzKSB7XG4gIGNvbnN0IGlkU2V0ID0gbmV3IFNldCgoaWRzIHx8IFtdKS5tYXAoeCA9PiBTdHJpbmcoeCkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikpO1xuICBpZiAoaWRTZXQuc2l6ZSA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIGxldCB0b3RhbCA9IDA7XG4gIGNvbnN0IGN1cnJlbnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICBmb3IgKGNvbnN0IGV4cCBvZiAoYWxsRXhwZXJpZW5jZXMgfHwgW10pKSB7XG4gICAgaWYgKCFleHAgfHwgdHlwZW9mIGV4cCAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGV4cElkID0gU3RyaW5nKGV4cC5pZCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghaWRTZXQuaGFzKGV4cElkKSkgY29udGludWU7XG4gICAgY29uc3Qgc3RhcnRZZWFyID0gX3BhcnNlWWVhckZyb21TdHIoZXhwLnN0YXJ0X2RhdGUgfHwgZXhwLnN0YXJ0KTtcbiAgICBjb25zdCBlbmRZZWFyICAgPSBfcGFyc2VZZWFyRnJvbVN0cihleHAuZW5kX2RhdGUgICB8fCBleHAuZW5kKSA/PyBjdXJyZW50WWVhcjtcbiAgICB0b3RhbCArPSBzdGFydFllYXIgPT0gbnVsbCA/IDEgOiBNYXRoLm1heCgxLCBlbmRZZWFyIC0gc3RhcnRZZWFyICsgMSk7XG4gIH1cbiAgcmV0dXJuIHRvdGFsID4gMCA/IHRvdGFsIDogbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZVNraWxsR3JvdXBPdmVycmlkZShza2lsbE5hbWUsIGdyb3VwTmFtZSkge1xuICBjb25zdCBub3JtYWxpemVkR3JvdXAgPSBncm91cE5hbWUgPT0gbnVsbCA/IG51bGwgOiBTdHJpbmcoZ3JvdXBOYW1lKS50cmltKCkgfHwgbnVsbDtcbiAgY29uc3Qgc2sgPSAod2luZG93Ll9za2lsbHNPcmRlcmVkIHx8IFtdKS5maW5kKHMgPT4gKHR5cGVvZiBzID09PSAnc3RyaW5nJyA/IHMgOiBzLm5hbWUgfHwgcykgPT09IHNraWxsTmFtZSk7XG4gIGlmIChzayAmJiB0eXBlb2Ygc2sgPT09ICdvYmplY3QnKSBzay5ncm91cCA9IG5vcm1hbGl6ZWRHcm91cCB8fCAnJztcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL3Jldmlldy1za2lsbC1ncm91cCcsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHNraWxsOiBza2lsbE5hbWUsIGdyb3VwOiBub3JtYWxpemVkR3JvdXAgfSksXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IuZXJyb3IgfHwgJ0ZhaWxlZCB0byBzYXZlIHNraWxsIGdyb3VwJyk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVTa2lsbENhdGVnb3J5T3ZlcnJpZGUoc2tpbGxOYW1lLCBjYXRlZ29yeU5hbWUpIHtcbiAgY29uc3Qgbm9ybWFsaXplZENhdGVnb3J5ID0gY2F0ZWdvcnlOYW1lID09IG51bGwgPyBudWxsIDogU3RyaW5nKGNhdGVnb3J5TmFtZSkudHJpbSgpIHx8IG51bGw7XG4gIGNvbnN0IHNrID0gKHdpbmRvdy5fc2tpbGxzT3JkZXJlZCB8fCBbXSkuZmluZChzID0+ICh0eXBlb2YgcyA9PT0gJ3N0cmluZycgPyBzIDogcy5uYW1lIHx8IHMpID09PSBza2lsbE5hbWUpO1xuICBpZiAoc2sgJiYgdHlwZW9mIHNrID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChub3JtYWxpemVkQ2F0ZWdvcnkpIHNrLmNhdGVnb3J5ID0gbm9ybWFsaXplZENhdGVnb3J5O1xuICAgIGVsc2UgZGVsZXRlIHNrLmNhdGVnb3J5O1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXZpZXctc2tpbGwtY2F0ZWdvcnknLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBza2lsbDogc2tpbGxOYW1lLCBjYXRlZ29yeTogbm9ybWFsaXplZENhdGVnb3J5IH0pLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9yLmVycm9yIHx8ICdGYWlsZWQgdG8gc2F2ZSBza2lsbCBjYXRlZ29yeScpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZW5hbWVTa2lsbENhdGVnb3J5KG9sZENhdGVnb3J5LCBuZXdDYXRlZ29yeSkge1xuICBjb25zdCBub3JtYWxpemVkT2xkID0gU3RyaW5nKG9sZENhdGVnb3J5IHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWROZXcgPSBTdHJpbmcobmV3Q2F0ZWdvcnkgfHwgJycpLnRyaW0oKTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL3Jldmlldy1za2lsbC1jYXRlZ29yaWVzJywge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGFjdGlvbjogJ3JlbmFtZScsXG4gICAgICBvbGRfY2F0ZWdvcnk6IG5vcm1hbGl6ZWRPbGQsXG4gICAgICBuZXdfY2F0ZWdvcnk6IG5vcm1hbGl6ZWROZXcsXG4gICAgfSksXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IuZXJyb3IgfHwgJ0ZhaWxlZCB0byByZW5hbWUgc2tpbGwgY2F0ZWdvcnknKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZVNraWxsQ2F0ZWdvcnlPcmRlcihvcmRlcmVkQ2F0ZWdvcmllcykge1xuICBjb25zdCBub3JtYWxpemVkT3JkZXIgPSBBcnJheS5mcm9tKG5ldyBTZXQoXG4gICAgKG9yZGVyZWRDYXRlZ29yaWVzIHx8IFtdKVxuICAgICAgLm1hcChjYXRlZ29yeSA9PiBTdHJpbmcoY2F0ZWdvcnkgfHwgJycpLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbiksXG4gICkpO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvcmV2aWV3LXNraWxsLWNhdGVnb3JpZXMnLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgYWN0aW9uOiAncmVvcmRlcicsXG4gICAgICBvcmRlcmVkX2NhdGVnb3JpZXM6IG5vcm1hbGl6ZWRPcmRlcixcbiAgICB9KSxcbiAgfSk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgc2tpbGwgY2F0ZWdvcnkgb3JkZXInKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuZnVuY3Rpb24gX25vcm1hbGl6ZVNraWxsU3Vic2tpbGxzKHZhbHVlKSB7XG4gIGNvbnN0IHJhd1ZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBTdHJpbmcodmFsdWUgfHwgJycpLnNwbGl0KCcsJyk7XG4gIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoXG4gICAgcmF3VmFsdWVzXG4gICAgICAubWFwKGl0ZW0gPT4gU3RyaW5nKGl0ZW0gfHwgJycpLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbiksXG4gICkpO1xufVxuXG5mdW5jdGlvbiBfc2tpbGxOYW1lKHNraWxsKSB7XG4gIHJldHVybiB0eXBlb2Ygc2tpbGwgPT09ICdzdHJpbmcnID8gc2tpbGwgOiBTdHJpbmcoc2tpbGw/Lm5hbWUgfHwgc2tpbGwgfHwgJycpLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gX25vcm1hbGl6ZUV4dHJhU2tpbGxFbnRyeShyYXdTa2lsbCwgeyB1c2VyQ3JlYXRlZCA9IGZhbHNlIH0gPSB7fSkge1xuICBpZiAodHlwZW9mIHJhd1NraWxsID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IG5hbWUgPSByYXdTa2lsbC50cmltKCk7XG4gICAgcmV0dXJuIG5hbWUgPyB7IG5hbWUsIF9pc05ldzogdHJ1ZSB9IDogbnVsbDtcbiAgfVxuICBpZiAoIXJhd1NraWxsIHx8IHR5cGVvZiByYXdTa2lsbCAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IG5hbWUgPSBTdHJpbmcocmF3U2tpbGwubmFtZSB8fCAnJykudHJpbSgpO1xuICBpZiAoIW5hbWUpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgLi4ucmF3U2tpbGwsXG4gICAgbmFtZSxcbiAgICBfaXNOZXc6IHRydWUsXG4gIH07XG4gIGNvbnN0IHN1YnNraWxscyA9IF9ub3JtYWxpemVTa2lsbFN1YnNraWxscyhyYXdTa2lsbC5zdWJza2lsbHMgfHwgcmF3U2tpbGwuc3ViX3NraWxscyB8fCBbXSk7XG4gIGlmIChzdWJza2lsbHMubGVuZ3RoID4gMCkgbm9ybWFsaXplZC5zdWJza2lsbHMgPSBzdWJza2lsbHM7XG4gIGVsc2UgZGVsZXRlIG5vcm1hbGl6ZWQuc3Vic2tpbGxzO1xuXG4gIGlmICh1c2VyQ3JlYXRlZCB8fCByYXdTa2lsbC51c2VyX2NyZWF0ZWQgfHwgcmF3U2tpbGwuX2lzVXNlckNyZWF0ZWQpIHtcbiAgICBub3JtYWxpemVkLnVzZXJfY3JlYXRlZCA9IHRydWU7XG4gICAgbm9ybWFsaXplZC5faXNVc2VyQ3JlYXRlZCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gX3NraWxsSW5saW5lTGFiZWwoc2tpbGwpIHtcbiAgaWYgKCFza2lsbCB8fCB0eXBlb2Ygc2tpbGwgPT09ICdzdHJpbmcnKSByZXR1cm4gX3NraWxsTmFtZShza2lsbCk7XG4gIGNvbnN0IG5hbWUgPSBfc2tpbGxOYW1lKHNraWxsKTtcbiAgY29uc3QgcGFyZW50aGV0aWNhbCA9IFN0cmluZyhza2lsbC5wYXJlbnRoZXRpY2FsIHx8ICcnKS50cmltKCk7XG4gIGlmIChwYXJlbnRoZXRpY2FsKSByZXR1cm4gYCR7bmFtZX0gKCR7cGFyZW50aGV0aWNhbH0pYDtcblxuICBjb25zdCBxdWFsaWZpZXJQYXJ0cyA9IFtdO1xuICBjb25zdCBwcm9maWNpZW5jeSA9IFN0cmluZyhza2lsbC5wcm9maWNpZW5jeSB8fCAnJykudHJpbSgpO1xuICBpZiAocHJvZmljaWVuY3kpIHF1YWxpZmllclBhcnRzLnB1c2gocHJvZmljaWVuY3kuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9maWNpZW5jeS5zbGljZSgxKSk7XG4gIF9ub3JtYWxpemVTa2lsbFN1YnNraWxscyhza2lsbC5zdWJza2lsbHMgfHwgc2tpbGwuc3ViX3NraWxscyB8fCBbXSkuZm9yRWFjaChpdGVtID0+IHF1YWxpZmllclBhcnRzLnB1c2goaXRlbSkpO1xuICBpZiAocXVhbGlmaWVyUGFydHMubGVuZ3RoID4gMCkgcmV0dXJuIGAke25hbWV9ICgke3F1YWxpZmllclBhcnRzLmpvaW4oJywgJyl9KWA7XG4gIHJldHVybiBuYW1lO1xufVxuXG5mdW5jdGlvbiBfZmluZFNraWxsUmVjb21tZW5kYXRpb25SZWNvcmQoc2tpbGxOYW1lLCBkYXRhKSB7XG4gIGlmICghZGF0YSB8fCAhQXJyYXkuaXNBcnJheShkYXRhLnNraWxsX3JlY29tbWVuZGF0aW9ucykpIHJldHVybiBudWxsO1xuICByZXR1cm4gZGF0YS5za2lsbF9yZWNvbW1lbmRhdGlvbnMuZmluZCgocmVjKSA9PiB7XG4gICAgY29uc3QgcmVjTmFtZSA9IFN0cmluZyhyZWM/LnNraWxsIHx8IHJlYz8ubmFtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHJlY05hbWUgPT09IFN0cmluZyhza2lsbE5hbWUgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICB9KSB8fCBudWxsO1xufVxuXG5mdW5jdGlvbiBfYnVpbGRTa2lsbEdyb3VwaW5nU3VnZ2VzdGlvbihyZWMsIHNraWxsKSB7XG4gIGNvbnN0IGdyb3VwaW5nID0gcmVjICYmIHR5cGVvZiByZWMuZ3JvdXBpbmcgPT09ICdvYmplY3QnID8gcmVjLmdyb3VwaW5nIDogbnVsbDtcbiAgaWYgKCFncm91cGluZykgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY3VycmVudENhdGVnb3J5ID0gdHlwZW9mIHNraWxsID09PSAnb2JqZWN0JyA/IFN0cmluZyhza2lsbC5jYXRlZ29yeSB8fCAnJykudHJpbSgpIDogJyc7XG4gIGNvbnN0IGN1cnJlbnRHcm91cCA9IHR5cGVvZiBza2lsbCA9PT0gJ29iamVjdCcgPyBTdHJpbmcoc2tpbGwuZ3JvdXAgfHwgJycpLnRyaW0oKSA6ICcnO1xuICBjb25zdCBzdWdnZXN0ZWRDYXRlZ29yeSA9IFN0cmluZyhncm91cGluZy5jYXRlZ29yeSB8fCAnJykudHJpbSgpO1xuICBjb25zdCBzdWdnZXN0ZWRHcm91cCA9IFN0cmluZyhncm91cGluZy5ncm91cCB8fCAnJykudHJpbSgpO1xuICBjb25zdCBjYXRlZ29yeUNoYW5nZWQgPSBCb29sZWFuKHN1Z2dlc3RlZENhdGVnb3J5ICYmIHN1Z2dlc3RlZENhdGVnb3J5ICE9PSBjdXJyZW50Q2F0ZWdvcnkpO1xuICBjb25zdCBncm91cENoYW5nZWQgPSBCb29sZWFuKHN1Z2dlc3RlZEdyb3VwICYmIHN1Z2dlc3RlZEdyb3VwICE9PSBjdXJyZW50R3JvdXApO1xuXG4gIGlmICghY2F0ZWdvcnlDaGFuZ2VkICYmICFncm91cENoYW5nZWQpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGNoYW5nZVBhcnRzID0gW107XG4gIGlmIChjYXRlZ29yeUNoYW5nZWQpIHtcbiAgICBjaGFuZ2VQYXJ0cy5wdXNoKGBDYXRlZ29yeTogJHtjdXJyZW50Q2F0ZWdvcnkgfHwgJ1VuY2F0ZWdvcml6ZWQnfSAtPiAke3N1Z2dlc3RlZENhdGVnb3J5fWApO1xuICB9XG4gIGlmIChncm91cENoYW5nZWQpIHtcbiAgICBjaGFuZ2VQYXJ0cy5wdXNoKGBHcm91cDogJHtjdXJyZW50R3JvdXAgfHwgJ05vbmUnfSAtPiAke3N1Z2dlc3RlZEdyb3VwfWApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjYXRlZ29yeTogc3VnZ2VzdGVkQ2F0ZWdvcnksXG4gICAgZ3JvdXA6IHN1Z2dlc3RlZEdyb3VwLFxuICAgIGNhdGVnb3J5Q2hhbmdlZCxcbiAgICBncm91cENoYW5nZWQsXG4gICAgY2hhbmdlVGV4dDogY2hhbmdlUGFydHMuam9pbignIHwgJyksXG4gICAgcmVhc29uaW5nOiBTdHJpbmcoZ3JvdXBpbmcucmVhc29uaW5nIHx8ICcnKS50cmltKCksXG4gICAgYXRzSW1wYWN0OiBTdHJpbmcoZ3JvdXBpbmcuYXRzX2ltcGFjdCB8fCAnJykudHJpbSgpLFxuICAgIHBhZ2VMZW5ndGhJbXBhY3Q6IFN0cmluZyhncm91cGluZy5wYWdlX2xlbmd0aF9pbXBhY3QgfHwgJycpLnRyaW0oKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gX2Nzc0VzY2FwZSh2YWx1ZSkge1xuICBpZiAoZ2xvYmFsVGhpcy5DU1MgJiYgdHlwZW9mIGdsb2JhbFRoaXMuQ1NTLmVzY2FwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLkNTUy5lc2NhcGUoU3RyaW5nKHZhbHVlKSk7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSkucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyk7XG59XG5cbmZ1bmN0aW9uIF9idWlsZEdyb3VwV2FybmluZ3Moc2tpbGxzKSB7XG4gIGNvbnN0IHdhcm5pbmdNYXAgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXAoKTtcbiAgZm9yIChjb25zdCBza2lsbCBvZiBza2lsbHMgfHwgW10pIHtcbiAgICBpZiAoIXNraWxsIHx8IHR5cGVvZiBza2lsbCAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHNraWxsTmFtZSA9IF9za2lsbE5hbWUoc2tpbGwpO1xuICAgIGNvbnN0IGdyb3VwTmFtZSA9IFN0cmluZyhza2lsbC5ncm91cCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghc2tpbGxOYW1lIHx8ICFncm91cE5hbWUpIGNvbnRpbnVlO1xuICAgIGlmICghZ3JvdXBzLmhhcyhncm91cE5hbWUpKSBncm91cHMuc2V0KGdyb3VwTmFtZSwgW10pO1xuICAgIGdyb3Vwcy5nZXQoZ3JvdXBOYW1lKS5wdXNoKF9za2lsbElubGluZUxhYmVsKHNraWxsKSk7XG4gIH1cblxuICBncm91cHMuZm9yRWFjaCgobGFiZWxzLCBncm91cE5hbWUpID0+IHtcbiAgICBjb25zdCBwcmV2aWV3ID0gbGFiZWxzLmpvaW4oJywgJyk7XG4gICAgY29uc3QgY3Jvd2RlZCA9IHByZXZpZXcubGVuZ3RoID49IDkwIHx8IGxhYmVscy5sZW5ndGggPj0gNTtcbiAgICBpZiAoIWNyb3dkZWQpIHJldHVybjtcbiAgICB3YXJuaW5nTWFwLnNldChncm91cE5hbWUsIHtcbiAgICAgIHByZXZpZXcsXG4gICAgICBtZW1iZXJDb3VudDogbGFiZWxzLmxlbmd0aCxcbiAgICAgIG1lc3NhZ2U6IGBJbmxpbmUgYnVsbGV0IG1heSBiZSBoYXJkIHRvIHNjYW4gKCR7bGFiZWxzLmxlbmd0aH0gc2tpbGxzLCAke3ByZXZpZXcubGVuZ3RofSBjaGFycykuYCxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHdhcm5pbmdNYXA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVTa2lsbFF1YWxpZmllck92ZXJyaWRlKHNraWxsTmFtZSwgcXVhbGlmaWVycykge1xuICBjb25zdCBub3JtYWxpemVkU2tpbGwgPSBTdHJpbmcoc2tpbGxOYW1lIHx8ICcnKS50cmltKCk7XG4gIGlmICghbm9ybWFsaXplZFNraWxsKSB0aHJvdyBuZXcgRXJyb3IoJ1NraWxsIG5hbWUgaXMgcmVxdWlyZWQnKTtcblxuICBjb25zdCBub3JtYWxpemVkUHJvZmljaWVuY3kgPSBTdHJpbmcocXVhbGlmaWVycz8ucHJvZmljaWVuY3kgfHwgJycpLnRyaW0oKTtcbiAgY29uc3Qgbm9ybWFsaXplZFN1YnNraWxscyA9IF9ub3JtYWxpemVTa2lsbFN1YnNraWxscyhxdWFsaWZpZXJzPy5zdWJza2lsbHMpO1xuICBjb25zdCBub3JtYWxpemVkUGFyZW50aGV0aWNhbCA9IFN0cmluZyhxdWFsaWZpZXJzPy5wYXJlbnRoZXRpY2FsIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRTa2lsbFR5cGUgPSBTdHJpbmcocXVhbGlmaWVycz8uc2tpbGxfdHlwZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkgfHwgbnVsbDtcblxuICBjb25zdCBzayA9ICh3aW5kb3cuX3NraWxsc09yZGVyZWQgfHwgW10pLmZpbmQocyA9PiAodHlwZW9mIHMgPT09ICdzdHJpbmcnID8gcyA6IHMubmFtZSB8fCBzKSA9PT0gbm9ybWFsaXplZFNraWxsKTtcbiAgaWYgKHNrICYmIHR5cGVvZiBzayA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAobm9ybWFsaXplZFByb2ZpY2llbmN5KSBzay5wcm9maWNpZW5jeSA9IG5vcm1hbGl6ZWRQcm9maWNpZW5jeTtcbiAgICBlbHNlIGRlbGV0ZSBzay5wcm9maWNpZW5jeTtcblxuICAgIGlmIChub3JtYWxpemVkU3Vic2tpbGxzLmxlbmd0aCA+IDApIHNrLnN1YnNraWxscyA9IG5vcm1hbGl6ZWRTdWJza2lsbHM7XG4gICAgZWxzZSBkZWxldGUgc2suc3Vic2tpbGxzO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRQYXJlbnRoZXRpY2FsKSBzay5wYXJlbnRoZXRpY2FsID0gbm9ybWFsaXplZFBhcmVudGhldGljYWw7XG4gICAgZWxzZSBkZWxldGUgc2sucGFyZW50aGV0aWNhbDtcbiAgfVxuXG4gIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgc2tpbGw6IG5vcm1hbGl6ZWRTa2lsbCxcbiAgICBwcm9maWNpZW5jeTogbm9ybWFsaXplZFByb2ZpY2llbmN5LFxuICAgIHN1YnNraWxsczogbm9ybWFsaXplZFN1YnNraWxscyxcbiAgICBwYXJlbnRoZXRpY2FsOiBub3JtYWxpemVkUGFyZW50aGV0aWNhbCxcbiAgfTtcbiAgaWYgKCdza2lsbF90eXBlJyBpbiAocXVhbGlmaWVycyB8fCB7fSkpIHtcbiAgICBwYXlsb2FkLnNraWxsX3R5cGUgPSBub3JtYWxpemVkU2tpbGxUeXBlO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXZpZXctc2tpbGwtcXVhbGlmaWVycycsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcbiAgfSk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgc2tpbGwgcXVhbGlmaWVycycpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlVXNlckNyZWF0ZWRTa2lsbChza2lsbCkge1xuICBjb25zdCBwYXlsb2FkID0ge1xuICAgIG5hbWU6IFN0cmluZyhza2lsbD8ubmFtZSB8fCAnJykudHJpbSgpLFxuICAgIGNhdGVnb3J5OiBTdHJpbmcoc2tpbGw/LmNhdGVnb3J5IHx8ICcnKS50cmltKCksXG4gICAgZ3JvdXA6IFN0cmluZyhza2lsbD8uZ3JvdXAgfHwgJycpLnRyaW0oKSxcbiAgICBwcm9maWNpZW5jeTogU3RyaW5nKHNraWxsPy5wcm9maWNpZW5jeSB8fCAnJykudHJpbSgpLFxuICAgIHN1YnNraWxsczogX25vcm1hbGl6ZVNraWxsU3Vic2tpbGxzKHNraWxsPy5zdWJza2lsbHMpLFxuICAgIHBhcmVudGhldGljYWw6IFN0cmluZyhza2lsbD8ucGFyZW50aGV0aWNhbCB8fCAnJykudHJpbSgpLFxuICB9O1xuICBpZiAoIXBheWxvYWQubmFtZSkgdGhyb3cgbmV3IEVycm9yKCdTa2lsbCBuYW1lIGlzIHJlcXVpcmVkJyk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXZpZXctc2tpbGwtYWRkJywge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9yLmVycm9yIHx8ICdGYWlsZWQgdG8gYWRkIHNraWxsJyk7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBfbm9ybWFsaXplRXh0cmFTa2lsbEVudHJ5KHJlc3VsdC5za2lsbCwgeyB1c2VyQ3JlYXRlZDogdHJ1ZSB9KTtcbiAgaWYgKCFub3JtYWxpemVkKSB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBkaWQgbm90IHJldHVybiBhIHNraWxsJyk7XG5cbiAgY29uc3QgY3VycmVudCA9IEFycmF5LmlzQXJyYXkod2luZG93Ll9za2lsbHNPcmRlcmVkKSA/IHdpbmRvdy5fc2tpbGxzT3JkZXJlZCA6IFtdO1xuICB3aW5kb3cuX3NraWxsc09yZGVyZWQgPSBbbm9ybWFsaXplZCwgLi4uY3VycmVudC5maWx0ZXIoc2tpbGwgPT4gX3NraWxsTmFtZShza2lsbCkgIT09IG5vcm1hbGl6ZWQubmFtZSldO1xuXG4gIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMgPSB3aW5kb3cuX3NhdmVkRGVjaXNpb25zIHx8IHt9O1xuICBjb25zdCBleGlzdGluZ0V4dHJhcyA9IEFycmF5LmlzQXJyYXkod2luZG93Ll9zYXZlZERlY2lzaW9ucy5leHRyYV9za2lsbHMpXG4gICAgPyB3aW5kb3cuX3NhdmVkRGVjaXNpb25zLmV4dHJhX3NraWxsc1xuICAgIDogW107XG4gIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMuZXh0cmFfc2tpbGxzID0gW1xuICAgIG5vcm1hbGl6ZWQsXG4gICAgLi4uZXhpc3RpbmdFeHRyYXMuZmlsdGVyKHNraWxsID0+IF9za2lsbE5hbWUoc2tpbGwpICE9PSBub3JtYWxpemVkLm5hbWUpLFxuICBdO1xuXG4gIHVzZXJTZWxlY3Rpb25zLnNraWxsc1tub3JtYWxpemVkLm5hbWVdID0gdXNlclNlbGVjdGlvbnMuc2tpbGxzW25vcm1hbGl6ZWQubmFtZV0gfHwgJ2luY2x1ZGUnO1xuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gX2VmZmVjdGl2ZVNraWxsQ2F0ZWdvcnkoc2tpbGwpIHtcbiAgaWYgKCFza2lsbCB8fCB0eXBlb2Ygc2tpbGwgPT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG4gIHJldHVybiBTdHJpbmcoc2tpbGwuY2F0ZWdvcnkgfHwgJycpLnRyaW0oKSB8fCAnR2VuZXJhbCc7XG59XG5cbmZ1bmN0aW9uIF9zeW5jU2tpbGxDYXRlZ29yeU9yZGVyKCkge1xuICBjb25zdCBza2lsbHMgPSBBcnJheS5pc0FycmF5KHdpbmRvdy5fc2tpbGxzT3JkZXJlZCkgPyB3aW5kb3cuX3NraWxsc09yZGVyZWQgOiBbXTtcbiAgY29uc3Qgb3JkZXJlZCA9IFtdO1xuICBmb3IgKGNvbnN0IHNraWxsIG9mIHNraWxscykge1xuICAgIGNvbnN0IGNhdGVnb3J5ID0gX2VmZmVjdGl2ZVNraWxsQ2F0ZWdvcnkoc2tpbGwpO1xuICAgIGlmIChjYXRlZ29yeSAmJiAhb3JkZXJlZC5pbmNsdWRlcyhjYXRlZ29yeSkpIG9yZGVyZWQucHVzaChjYXRlZ29yeSk7XG4gIH1cbiAgd2luZG93Ll9za2lsbENhdGVnb3J5T3JkZXIgPSBvcmRlcmVkO1xuICByZXR1cm4gb3JkZXJlZDtcbn1cblxuZnVuY3Rpb24gX3JlbmFtZVNraWxsQ2F0ZWdvcnlMb2NhbGx5KG9sZENhdGVnb3J5LCBuZXdDYXRlZ29yeSkge1xuICBjb25zdCBub3JtYWxpemVkT2xkID0gU3RyaW5nKG9sZENhdGVnb3J5IHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWROZXcgPSBTdHJpbmcobmV3Q2F0ZWdvcnkgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFub3JtYWxpemVkT2xkIHx8ICFub3JtYWxpemVkTmV3KSByZXR1cm47XG5cbiAgZm9yIChjb25zdCBza2lsbCBvZiAod2luZG93Ll9za2lsbHNPcmRlcmVkIHx8IFtdKSkge1xuICAgIGlmICghc2tpbGwgfHwgdHlwZW9mIHNraWxsICE9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgaWYgKF9lZmZlY3RpdmVTa2lsbENhdGVnb3J5KHNraWxsKSA9PT0gbm9ybWFsaXplZE9sZCkge1xuICAgICAgc2tpbGwuY2F0ZWdvcnkgPSBub3JtYWxpemVkTmV3O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRPcmRlciA9IEFycmF5LmlzQXJyYXkod2luZG93Ll9za2lsbENhdGVnb3J5T3JkZXIpXG4gICAgPyB3aW5kb3cuX3NraWxsQ2F0ZWdvcnlPcmRlclxuICAgIDogX3N5bmNTa2lsbENhdGVnb3J5T3JkZXIoKTtcbiAgd2luZG93Ll9za2lsbENhdGVnb3J5T3JkZXIgPSBjdXJyZW50T3JkZXIubWFwKGNhdGVnb3J5ID0+IChcbiAgICBjYXRlZ29yeSA9PT0gbm9ybWFsaXplZE9sZCA/IG5vcm1hbGl6ZWROZXcgOiBjYXRlZ29yeVxuICApKS5maWx0ZXIoKGNhdGVnb3J5LCBpbmRleCwgYXJyKSA9PiBjYXRlZ29yeSAmJiBhcnIuaW5kZXhPZihjYXRlZ29yeSkgPT09IGluZGV4KTtcbn1cblxuZnVuY3Rpb24gX21vdmVTa2lsbENhdGVnb3J5TG9jYWxseShjYXRlZ29yeU5hbWUsIGRpcmVjdGlvbikge1xuICBjb25zdCBub3JtYWxpemVkQ2F0ZWdvcnkgPSBTdHJpbmcoY2F0ZWdvcnlOYW1lIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IG9yZGVyID0gQXJyYXkuaXNBcnJheSh3aW5kb3cuX3NraWxsQ2F0ZWdvcnlPcmRlcilcbiAgICA/IFsuLi53aW5kb3cuX3NraWxsQ2F0ZWdvcnlPcmRlcl1cbiAgICA6IF9zeW5jU2tpbGxDYXRlZ29yeU9yZGVyKCk7XG4gIGNvbnN0IGluZGV4ID0gb3JkZXIuaW5kZXhPZihub3JtYWxpemVkQ2F0ZWdvcnkpO1xuICBpZiAoaW5kZXggPCAwKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggKyBkaXJlY3Rpb247XG4gIGlmIChuZXh0SW5kZXggPCAwIHx8IG5leHRJbmRleCA+PSBvcmRlci5sZW5ndGgpIHJldHVybiBudWxsO1xuICBbb3JkZXJbaW5kZXhdLCBvcmRlcltuZXh0SW5kZXhdXSA9IFtvcmRlcltuZXh0SW5kZXhdLCBvcmRlcltpbmRleF1dO1xuICB3aW5kb3cuX3NraWxsQ2F0ZWdvcnlPcmRlciA9IG9yZGVyO1xuICByZXR1cm4gb3JkZXI7XG59XG5cbmZ1bmN0aW9uIF9idWlsZFNraWxsQ2F0ZWdvcnlNYW5hZ2VySHRtbCgpIHtcbiAgY29uc3QgY2F0ZWdvcmllcyA9IEFycmF5LmlzQXJyYXkod2luZG93Ll9za2lsbENhdGVnb3J5T3JkZXIpXG4gICAgPyB3aW5kb3cuX3NraWxsQ2F0ZWdvcnlPcmRlclxuICAgIDogX3N5bmNTa2lsbENhdGVnb3J5T3JkZXIoKTtcbiAgaWYgKGNhdGVnb3JpZXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG5cbiAgcmV0dXJuIGBcbiAgICA8ZGl2IGNsYXNzPVwic2tpbGwtY2F0ZWdvcnktbWFuYWdlclwiIHN0eWxlPVwibWFyZ2luOjAgMCAxMnB4O3BhZGRpbmc6MTJweDtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6I2Y4ZmFmYztcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo4cHg7XCI+Q2F0ZWdvcnkgTGF5b3V0PC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4O1wiPlxuICAgICAgICAke2NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSwgaW5kZXgpID0+IGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2tpbGwtY2F0ZWdvcnktbWFuYWdlci1yb3dcIiBkYXRhLWNhdGVnb3J5PVwiJHtlc2NhcGVIdG1sKGNhdGVnb3J5KX1cIiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2tpbGwtY2F0ZWdvcnktbWFuYWdlci1pbnB1dFwiXG4gICAgICAgICAgICAgIHZhbHVlPVwiJHtlc2NhcGVIdG1sKGNhdGVnb3J5KX1cIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVuYW1lIHNraWxsIGNhdGVnb3J5ICR7ZXNjYXBlSHRtbChjYXRlZ29yeSl9XCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJmbGV4OjE7bWluLXdpZHRoOjA7cGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGRhdGEtYWN0aW9uPVwiY2F0ZWdvcnktdXBcIiBkYXRhLWNhdGVnb3J5PVwiJHtlc2NhcGVIdG1sKGNhdGVnb3J5KX1cIiBhcmlhLWxhYmVsPVwiTW92ZSAke2VzY2FwZUh0bWwoY2F0ZWdvcnkpfSBjYXRlZ29yeSB1cFwiIHRpdGxlPVwiTW92ZSBjYXRlZ29yeSB1cFwiICR7aW5kZXggPT09IDAgPyAnZGlzYWJsZWQnIDogJyd9Plx1MjE5MTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgZGF0YS1hY3Rpb249XCJjYXRlZ29yeS1kb3duXCIgZGF0YS1jYXRlZ29yeT1cIiR7ZXNjYXBlSHRtbChjYXRlZ29yeSl9XCIgYXJpYS1sYWJlbD1cIk1vdmUgJHtlc2NhcGVIdG1sKGNhdGVnb3J5KX0gY2F0ZWdvcnkgZG93blwiIHRpdGxlPVwiTW92ZSBjYXRlZ29yeSBkb3duXCIgJHtpbmRleCA9PT0gY2F0ZWdvcmllcy5sZW5ndGggLSAxID8gJ2Rpc2FibGVkJyA6ICcnfT5cdTIxOTM8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgYCkuam9pbignJyl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFJlcnVuIHNuYXBzaG90IChjaGFuZ2UgYmFkZ2UgZm9yIHNraWxscykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5mdW5jdGlvbiBfc2tpbGxTbmFwc2hvdEtleSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzaWQgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgnc2Vzc2lvbicpO1xuICAgIHJldHVybiBzaWQgPyBgc2tpbGxfc25hcF8ke3NpZH1gIDogbnVsbDtcbiAgfSBjYXRjaCAoXykgeyByZXR1cm4gbnVsbDsgfVxufVxuZnVuY3Rpb24gX3NhdmVTa2lsbFNuYXBzaG90KHJlY29tbWVuZGVkTmFtZXMpIHtcbiAgY29uc3Qga2V5ID0gX3NraWxsU25hcHNob3RLZXkoKTtcbiAgaWYgKCFrZXkpIHJldHVybjtcbiAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShbLi4ucmVjb21tZW5kZWROYW1lc10pKTsgfSBjYXRjaCAoXykge31cbn1cbmZ1bmN0aW9uIF9nZXRTa2lsbFNuYXBzaG90KCkge1xuICBjb25zdCBrZXkgPSBfc2tpbGxTbmFwc2hvdEtleSgpO1xuICBpZiAoIWtleSkgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICByZXR1cm4gcmF3ID8gbmV3IFNldChKU09OLnBhcnNlKHJhdykpIDogbnVsbDtcbiAgfSBjYXRjaCAoXykgeyByZXR1cm4gbnVsbDsgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgQnVpbGQgcmV2aWV3IHRhYmxlIChmZXRjaCArIGluaXRpYWxpc2UpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBidWlsZFNraWxsc1Jldmlld1RhYmxlKCkge1xuICBjb25zdCBkYXRhID0gd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnM7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbHMtdGFibGUtY29udGFpbmVyJyk7XG5cbiAgLy8gQnVpbGQgc2tpbGwtdHlwZSBsb29rdXAgZnJvbSBqb2IgYW5hbHlzaXMgKGF2YWlsYWJsZSBpbiB0YWJEYXRhLmFuYWx5c2lzKVxuICBjb25zdCBqb2JBbmFseXNpcyA9IHN0YXRlTWFuYWdlci5nZXRUYWJEYXRhKCdhbmFseXNpcycpIHx8IHt9O1xuICBjb25zdCBoYXJkU2tpbGxTZXQgPSBuZXcgU2V0KChqb2JBbmFseXNpcy5yZXF1aXJlZF9za2lsbHMgICAgfHwgW10pLm1hcChzID0+IHMudG9Mb3dlckNhc2UoKSkpO1xuICBjb25zdCBzb2Z0U2tpbGxTZXQgPSBuZXcgU2V0KChqb2JBbmFseXNpcy5uaWNlX3RvX2hhdmVfc2tpbGxzIHx8IFtdKS5tYXAocyA9PiBzLnRvTG93ZXJDYXNlKCkpKTtcblxuICAvLyBHZXQgYWxsIHNraWxscyBmcm9tIHRoZSBBUEkgc3RhdHVzXG4gIGxldCBhbGxTa2lsbHMgPSBbXTtcbiAgbGV0IHBlcnNpc3RlZEV4dHJhU2tpbGxzID0gW107XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdHVzUmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvc3RhdHVzJyk7XG4gICAgY29uc3Qgc3RhdHVzRGF0YSA9IHBhcnNlU3RhdHVzUmVzcG9uc2UoYXdhaXQgc3RhdHVzUmVzLmpzb24oKSk7XG4gICAgYWxsU2tpbGxzID0gc3RhdHVzRGF0YS5hbGxfc2tpbGxzIHx8IFtdO1xuICAgIHBlcnNpc3RlZEV4dHJhU2tpbGxzID0gc3RhdHVzRGF0YS5leHRyYV9za2lsbHMgfHwgW107XG4gICAgd2luZG93Ll9hbGxFeHBlcmllbmNlcyA9IHN0YXR1c0RhdGEuYWxsX2V4cGVyaWVuY2VzIHx8IFtdO1xuICAgIGNvbnN0IHF1YWxPdmVycmlkZXMgPSBzdGF0dXNEYXRhLnNraWxsX3F1YWxpZmllcl9vdmVycmlkZXMgfHwge307XG4gICAgd2luZG93Ll9za2lsbFR5cGVPdmVycmlkZXMgPSB3aW5kb3cuX3NraWxsVHlwZU92ZXJyaWRlcyB8fCB7fTtcbiAgICBmb3IgKGNvbnN0IFtza2lsbE5hbWUsIG92ZXJyaWRlc10gb2YgT2JqZWN0LmVudHJpZXMocXVhbE92ZXJyaWRlcykpIHtcbiAgICAgIGlmIChvdmVycmlkZXMgJiYgb3ZlcnJpZGVzLnNraWxsX3R5cGUpIHtcbiAgICAgICAgd2luZG93Ll9za2lsbFR5cGVPdmVycmlkZXNbc2tpbGxOYW1lLnRvTG93ZXJDYXNlKCldID0gb3ZlcnJpZGVzLnNraWxsX3R5cGU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcignRXJyb3IgZmV0Y2hpbmcgYWxsIHNraWxsczonLCBlcnJvcik7XG4gICAgLy8gRmFsbGJhY2sgdG8ganVzdCByZWNvbW1lbmRlZCBza2lsbHNcbiAgICBhbGxTa2lsbHMgPSBkYXRhLnJlY29tbWVuZGVkX3NraWxscyB8fCBbXTtcbiAgICB3aW5kb3cuX2FsbEV4cGVyaWVuY2VzID0gW107XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkUGVyc2lzdGVkRXh0cmFTa2lsbHMgPSAocGVyc2lzdGVkRXh0cmFTa2lsbHMgfHwgW10pXG4gICAgLm1hcChza2lsbCA9PiBfbm9ybWFsaXplRXh0cmFTa2lsbEVudHJ5KHNraWxsLCB7XG4gICAgICB1c2VyQ3JlYXRlZDogdHlwZW9mIHNraWxsID09PSAnb2JqZWN0JyAmJiAhIXNraWxsPy51c2VyX2NyZWF0ZWQsXG4gICAgfSkpXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKG5vcm1hbGl6ZWRQZXJzaXN0ZWRFeHRyYVNraWxscy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbWVyZ2VkU2tpbGxzID0gW107XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKTtcbiAgICBub3JtYWxpemVkUGVyc2lzdGVkRXh0cmFTa2lsbHMuZm9yRWFjaChza2lsbCA9PiB7XG4gICAgICBpZiAoc2Vlbi5oYXMoc2tpbGwubmFtZSkpIHJldHVybjtcbiAgICAgIG1lcmdlZFNraWxscy5wdXNoKHNraWxsKTtcbiAgICAgIHNlZW4uYWRkKHNraWxsLm5hbWUpO1xuICAgIH0pO1xuICAgIGFsbFNraWxscy5mb3JFYWNoKHNraWxsID0+IHtcbiAgICAgIGNvbnN0IHNraWxsTmFtZSA9IF9za2lsbE5hbWUoc2tpbGwpO1xuICAgICAgaWYgKCFza2lsbE5hbWUgfHwgc2Vlbi5oYXMoc2tpbGxOYW1lKSkgcmV0dXJuO1xuICAgICAgbWVyZ2VkU2tpbGxzLnB1c2goc2tpbGwpO1xuICAgICAgc2Vlbi5hZGQoc2tpbGxOYW1lKTtcbiAgICB9KTtcbiAgICBhbGxTa2lsbHMgPSBtZXJnZWRTa2lsbHM7XG4gIH1cblxuICAvLyBEZXRlY3Qgc2tpbGxzIHJlY29tbWVuZGVkIGJ5IExMTSB0aGF0IGFyZW4ndCBpbiBtYXN0ZXIgQ1YgYW5kIHByZXBlbmQgdGhlbVxuICBjb25zdCBtYXN0ZXJTa2lsbE5hbWVzID0gbmV3IFNldChhbGxTa2lsbHMubWFwKHNraWxsID0+IF9za2lsbE5hbWUoc2tpbGwpKSk7XG4gIGNvbnN0IG5ld1NraWxscyA9IChkYXRhLnJlY29tbWVuZGVkX3NraWxscyB8fCBbXSkuZmlsdGVyKHMgPT4gIW1hc3RlclNraWxsTmFtZXMuaGFzKHMpKTtcbiAgd2luZG93Ll9uZXdTa2lsbHNGcm9tTExNID0gbmV3U2tpbGxzO1xuICBpZiAobmV3U2tpbGxzLmxlbmd0aCA+IDApIHtcbiAgICBhbGxTa2lsbHMgPSBbLi4ubmV3U2tpbGxzLm1hcChzID0+ICh7IG5hbWU6IHMsIF9pc05ldzogdHJ1ZSB9KSksIC4uLmFsbFNraWxsc107XG4gIH1cblxuICBpZiAoYWxsU2tpbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJwYWRkaW5nOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzZiNzI4MDtcIj5ObyBza2lsbHMgZm91bmQgaW4gbWFzdGVyIENWIGRhdGEuPC9wPic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gT24gZmlyc3QgbG9hZDogc29ydCBieSByZWNvbW1lbmRhdGlvbjsgcHJlc2VydmUgdXNlciBvcmRlciBvbiByZS1yZW5kZXJcbiAgaWYgKCF3aW5kb3cuX3NraWxsc09yZGVyZWQpIHtcbiAgICBjb25zdCByZWNvbW1lbmRhdGlvbk9yZGVyID0geyAnRW1waGFzaXplJzogMCwgJ0luY2x1ZGUnOiAxLCAnRGUtZW1waGFzaXplJzogMiwgJ09taXQnOiAzIH07XG4gICAgY29uc3QgbWFzdGVyU2tpbGxzICA9IGFsbFNraWxscy5maWx0ZXIocyA9PiAhcy5faXNOZXcpO1xuXG4gICAgLy8gUm9sZS1hd2FyZSBjYXRlZ29yeSBzY29yaW5nOiBjYXRlZ29yaWVzIHdpdGggbW9yZSByZXF1aXJlZC9uaWNlLXRvLWhhdmUgam9iIHNraWxscyByYW5rIGhpZ2hlclxuICAgIGNvbnN0IGNhdGVnb3J5U2NvcmVzID0ge307XG4gICAgZm9yIChjb25zdCBza2lsbCBvZiBtYXN0ZXJTa2lsbHMpIHtcbiAgICAgIGNvbnN0IGNhdCAgPSB0eXBlb2Ygc2tpbGwgPT09ICdvYmplY3QnID8gKHNraWxsLmNhdGVnb3J5IHx8ICcnKSA6ICcnO1xuICAgICAgY29uc3QgbmFtZSA9ICh0eXBlb2Ygc2tpbGwgPT09ICdzdHJpbmcnID8gc2tpbGwgOiBza2lsbC5uYW1lIHx8IHNraWxsKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNhdCkge1xuICAgICAgICBjYXRlZ29yeVNjb3Jlc1tjYXRdID0gKGNhdGVnb3J5U2NvcmVzW2NhdF0gfHwgMClcbiAgICAgICAgICArIChoYXJkU2tpbGxTZXQuaGFzKG5hbWUpID8gMiA6IHNvZnRTa2lsbFNldC5oYXMobmFtZSkgPyAxIDogMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydGVkTWFzdGVyICA9IG1hc3RlclNraWxscy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFOYW1lICA9IHR5cGVvZiBhID09PSAnc3RyaW5nJyA/IGEgOiBhLm5hbWUgfHwgYTtcbiAgICAgIGNvbnN0IGJOYW1lICA9IHR5cGVvZiBiID09PSAnc3RyaW5nJyA/IGIgOiBiLm5hbWUgfHwgYjtcbiAgICAgIGNvbnN0IGFSZWMgICA9IHJlY29tbWVuZGF0aW9uT3JkZXJbZ2V0U2tpbGxSZWNvbW1lbmRhdGlvbihhTmFtZSwgZGF0YSldID8/IDM7XG4gICAgICBjb25zdCBiUmVjICAgPSByZWNvbW1lbmRhdGlvbk9yZGVyW2dldFNraWxsUmVjb21tZW5kYXRpb24oYk5hbWUsIGRhdGEpXSA/PyAzO1xuICAgICAgaWYgKGFSZWMgIT09IGJSZWMpIHJldHVybiBhUmVjIC0gYlJlYztcbiAgICAgIC8vIFdpdGhpbiB0aGUgc2FtZSByZWNvbW1lbmRhdGlvbiB0aWVyLCBzdXJmYWNlIHJvbGUtcmVsZXZhbnQgY2F0ZWdvcmllcyBmaXJzdFxuICAgICAgY29uc3QgYUNhdCAgID0gdHlwZW9mIGEgPT09ICdvYmplY3QnID8gKGEuY2F0ZWdvcnkgfHwgJycpIDogJyc7XG4gICAgICBjb25zdCBiQ2F0ICAgPSB0eXBlb2YgYiA9PT0gJ29iamVjdCcgPyAoYi5jYXRlZ29yeSB8fCAnJykgOiAnJztcbiAgICAgIHJldHVybiAoY2F0ZWdvcnlTY29yZXNbYkNhdF0gfHwgMCkgLSAoY2F0ZWdvcnlTY29yZXNbYUNhdF0gfHwgMCk7XG4gICAgfSk7XG4gICAgd2luZG93Ll9za2lsbHNPcmRlcmVkID0gWy4uLmFsbFNraWxscy5maWx0ZXIocyA9PiBzLl9pc05ldyksIC4uLnNvcnRlZE1hc3Rlcl07XG5cbiAgICAvLyBBcHBseSBqb2ItYW5hbHlzaXMtZGVyaXZlZCBjYXRlZ29yeSBvcmRlciBmcm9tIGJhY2tlbmQgKEdBUC04NilcbiAgICBjb25zdCBiYWNrZW5kT3JkZXIgPSAoc3RhdGVNYW5hZ2VyLmdldFRhYkRhdGEoJ2N1c3RvbWl6YXRpb25zJykgfHwge30pLnNraWxsX2NhdGVnb3J5X29yZGVyO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGJhY2tlbmRPcmRlcikgJiYgYmFja2VuZE9yZGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIHdpbmRvdy5fc2tpbGxDYXRlZ29yeU9yZGVyID0gYmFja2VuZE9yZGVyO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBrbm93bk5hbWVzID0gbmV3IFNldCh3aW5kb3cuX3NraWxsc09yZGVyZWQubWFwKHMgPT4gKHR5cGVvZiBzID09PSAnc3RyaW5nJyA/IHMgOiBzLm5hbWUgfHwgcykpKTtcbiAgICBmb3IgKGNvbnN0IHNrIG9mIGFsbFNraWxscykge1xuICAgICAgY29uc3Qgbm0gPSB0eXBlb2Ygc2sgPT09ICdzdHJpbmcnID8gc2sgOiBzay5uYW1lIHx8IHNrO1xuICAgICAgaWYgKCFrbm93bk5hbWVzLmhhcyhubSkpIHdpbmRvdy5fc2tpbGxzT3JkZXJlZC5wdXNoKHNrKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCByZWNvbW1lbmRlZFNldCA9IG5ldyBTZXQoZGF0YS5yZWNvbW1lbmRlZF9za2lsbHMgfHwgW10pO1xuXG4gIC8vIENvbXB1dGUgd2hpY2ggcmVjb21tZW5kYXRpb25zIGFyZSBuZXcgc2luY2UgbGFzdCByZW5kZXIgKHJlcnVuIGNoYW5nZSBiYWRnZXMpXG4gIGNvbnN0IHByZXZTa2lsbFNuYXAgPSBfZ2V0U2tpbGxTbmFwc2hvdCgpO1xuICBjb25zdCBuZXdSZWNvbW1lbmRlZFNraWxscyA9IHByZXZTa2lsbFNuYXBcbiAgICA/IG5ldyBTZXQoWy4uLnJlY29tbWVuZGVkU2V0XS5maWx0ZXIobmFtZSA9PiAhcHJldlNraWxsU25hcC5oYXMobmFtZSkpKVxuICAgIDogbmV3IFNldCgpO1xuICBfc2F2ZVNraWxsU25hcHNob3QocmVjb21tZW5kZWRTZXQpO1xuXG4gIC8vIEluaXRpYWxpc2Ugc2F2ZWQgZGVjaXNpb25zXG4gIGNvbnN0IHNhdmVkU2tpbGxEZWNzID0gd2luZG93Ll9zYXZlZERlY2lzaW9ucz8uc2tpbGxfZGVjaXNpb25zIHx8IHt9O1xuICBmb3IgKGNvbnN0IHNraWxsIG9mIHdpbmRvdy5fc2tpbGxzT3JkZXJlZCkge1xuICAgIGNvbnN0IHNraWxsTmFtZSAgICAgPSB0eXBlb2Ygc2tpbGwgPT09ICdzdHJpbmcnID8gc2tpbGwgOiBza2lsbC5uYW1lIHx8IHNraWxsO1xuICAgIGNvbnN0IGlzTmV3ICAgICAgICAgPSAoc2tpbGwuX2lzTmV3ID09PSB0cnVlKTtcbiAgICBjb25zdCBpc1JlY29tbWVuZGVkID0gcmVjb21tZW5kZWRTZXQuaGFzKHNraWxsTmFtZSk7XG4gICAgY29uc3QgcmVjb21tZW5kYXRpb24gPSBnZXRTa2lsbFJlY29tbWVuZGF0aW9uKHNraWxsTmFtZSwgZGF0YSk7XG4gICAgbGV0IGRlZmF1bHRBY3Rpb24gPSAnZXhjbHVkZSc7XG4gICAgaWYgICAgICAocmVjb21tZW5kYXRpb24gPT09ICdFbXBoYXNpemUnKSAgICBkZWZhdWx0QWN0aW9uID0gJ2VtcGhhc2l6ZSc7XG4gICAgZWxzZSBpZiAocmVjb21tZW5kYXRpb24gPT09ICdJbmNsdWRlJykgICAgICBkZWZhdWx0QWN0aW9uID0gJ2luY2x1ZGUnO1xuICAgIGVsc2UgaWYgKHJlY29tbWVuZGF0aW9uID09PSAnRGUtZW1waGFzaXplJykgZGVmYXVsdEFjdGlvbiA9ICdkZS1lbXBoYXNpemUnO1xuICAgIGVsc2UgaWYgKHJlY29tbWVuZGF0aW9uID09PSAnT21pdCcpICAgICAgICAgZGVmYXVsdEFjdGlvbiA9ICdleGNsdWRlJztcbiAgICBlbHNlIGlmIChpc1JlY29tbWVuZGVkIHx8IGlzTmV3KSAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24gPSAnaW5jbHVkZSc7XG4gICAgdXNlclNlbGVjdGlvbnMuc2tpbGxzW3NraWxsTmFtZV0gPSBzYXZlZFNraWxsRGVjc1tza2lsbE5hbWVdIHx8IGRlZmF1bHRBY3Rpb247XG4gIH1cblxuICBfcmVuZGVyU2tpbGxzVGFibGUoY29udGFpbmVyLCByZWNvbW1lbmRlZFNldCwgZGF0YSwgaGFyZFNraWxsU2V0LCBzb2Z0U2tpbGxTZXQsIG5ld1JlY29tbWVuZGVkU2tpbGxzKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFJlbmRlciB0YWJsZSBIVE1MIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBfcmVuZGVyU2tpbGxzVGFibGUoY29udGFpbmVyLCByZWNvbW1lbmRlZFNldCwgZGF0YSwgaGFyZFNraWxsU2V0LCBzb2Z0U2tpbGxTZXQsIG5ld1JlY29tbWVuZGVkU2tpbGxzID0gbmV3IFNldCgpKSB7XG4gIGlmICghY29udGFpbmVyKSBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGxzLXRhYmxlLWNvbnRhaW5lcicpO1xuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICBpZiAoIXJlY29tbWVuZGVkU2V0KSByZWNvbW1lbmRlZFNldCA9IG5ldyBTZXQoKHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zPy5yZWNvbW1lbmRlZF9za2lsbHMpIHx8IFtdKTtcbiAgaWYgKCFkYXRhKSBkYXRhID0gd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnM7XG4gIGlmICghaGFyZFNraWxsU2V0KSB7XG4gICAgY29uc3QgamEgPSBzdGF0ZU1hbmFnZXIuZ2V0VGFiRGF0YSgnYW5hbHlzaXMnKSB8fCB7fTtcbiAgICBoYXJkU2tpbGxTZXQgPSBuZXcgU2V0KChqYS5yZXF1aXJlZF9za2lsbHMgICAgIHx8IFtdKS5tYXAocyA9PiBzLnRvTG93ZXJDYXNlKCkpKTtcbiAgICBzb2Z0U2tpbGxTZXQgPSBuZXcgU2V0KChqYS5uaWNlX3RvX2hhdmVfc2tpbGxzIHx8IFtdKS5tYXAocyA9PiBzLnRvTG93ZXJDYXNlKCkpKTtcbiAgfVxuXG4gIGlmICgkLmZuLkRhdGFUYWJsZS5pc0RhdGFUYWJsZSgnI3NraWxscy1yZXZpZXctdGFibGUnKSkge1xuICAgICQoJyNza2lsbHMtcmV2aWV3LXRhYmxlJykuRGF0YVRhYmxlKCkuZGVzdHJveSgpO1xuICB9XG5cbiAgY29uc3Qgc2tpbGxzID0gd2luZG93Ll9za2lsbHNPcmRlcmVkIHx8IFtdO1xuICBjb25zdCBncm91cFdhcm5pbmdzID0gX2J1aWxkR3JvdXBXYXJuaW5ncyhza2lsbHMpO1xuICBjb25zdCBjYXRlZ29yeVN1Z2dlc3Rpb25zID0gQXJyYXkuZnJvbShuZXcgU2V0KFxuICAgIHNraWxsc1xuICAgICAgLm1hcChza2lsbCA9PiAodHlwZW9mIHNraWxsID09PSAnb2JqZWN0JyAmJiBza2lsbC5jYXRlZ29yeSA/IFN0cmluZyhza2lsbC5jYXRlZ29yeSkudHJpbSgpIDogJycpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSxcbiAgKSkuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQubG9jYWxlQ29tcGFyZShyaWdodCkpO1xuICBfc3luY1NraWxsQ2F0ZWdvcnlPcmRlcigpO1xuICBjb25zdCBjYXRlZ29yeUxpc3RJZCA9ICdza2lsbC1jYXRlZ29yeS1zdWdnZXN0aW9ucyc7XG4gIGxldCB0YWJsZUhUTUwgPSBgXG4gICAgPGRpdiBjbGFzcz1cInNraWxsLWFkZC1wYW5lbFwiIHN0eWxlPVwibWFyZ2luOjAgMCAxMnB4O3BhZGRpbmc6MTJweDtib3JkZXI6MXB4IHNvbGlkICNkYmVhZmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6I2VmZjZmZjtcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwO1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7XCI+U2Vzc2lvbi1Pbmx5IFNraWxsczwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOiM0NzU1Njk7XCI+QWRkIGEgc2tpbGwgZm9yIHRoaXMgQ1Ygd2l0aG91dCBjaGFuZ2luZyB0aGUgbWFzdGVyIHByb2ZpbGUuPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1bGstYnRuXCIgaWQ9XCJ0b2dnbGUtYWRkLXNraWxsLWZvcm1cIj4rIEFkZCBTa2lsbDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8Zm9ybSBpZD1cImFkZC1za2lsbC1mb3JtXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7bWFyZ2luLXRvcDoxMnB4O1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDE4MHB4LDFmcikpO2dhcDo4cHg7XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5hbWVcIiBwbGFjZWhvbGRlcj1cIlNraWxsIG5hbWVcIiBhcmlhLWxhYmVsPVwiTmV3IHNraWxsIG5hbWVcIiBzdHlsZT1cInBhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNiZmRiZmU7Ym9yZGVyLXJhZGl1czo2cHg7XCIgLz5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiY2F0ZWdvcnlcIiBwbGFjZWhvbGRlcj1cIkNhdGVnb3J5XCIgYXJpYS1sYWJlbD1cIk5ldyBza2lsbCBjYXRlZ29yeVwiIGxpc3Q9XCIke2NhdGVnb3J5TGlzdElkfVwiIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2JmZGJmZTtib3JkZXItcmFkaXVzOjZweDtcIiAvPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJncm91cFwiIHBsYWNlaG9sZGVyPVwiR3JvdXAga2V5XCIgYXJpYS1sYWJlbD1cIk5ldyBza2lsbCBncm91cFwiIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2JmZGJmZTtib3JkZXItcmFkaXVzOjZweDtcIiAvPlxuICAgICAgICAgIDxzZWxlY3QgbmFtZT1cInByb2ZpY2llbmN5XCIgYXJpYS1sYWJlbD1cIk5ldyBza2lsbCBwcm9maWNpZW5jeVwiIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2JmZGJmZTtib3JkZXItcmFkaXVzOjZweDtcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5ObyBwcm9maWNpZW5jeSBsYWJlbDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZ2lubmVyXCI+QmVnaW5uZXI8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmYW1pbGlhclwiPkZhbWlsaWFyPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaW50ZXJtZWRpYXRlXCI+SW50ZXJtZWRpYXRlPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWR2YW5jZWRcIj5BZHZhbmNlZDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImV4cGVydFwiPkV4cGVydDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzdWJza2lsbHNcIiBwbGFjZWhvbGRlcj1cIlN1Yi1za2lsbHNcIiBhcmlhLWxhYmVsPVwiTmV3IHNraWxsIHN1Yi1za2lsbHNcIiBzdHlsZT1cInBhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNiZmRiZmU7Ym9yZGVyLXJhZGl1czo2cHg7XCIgLz5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicGFyZW50aGV0aWNhbFwiIHBsYWNlaG9sZGVyPVwiUGFyZW50aGV0aWNhbCBub3RlXCIgYXJpYS1sYWJlbD1cIk5ldyBza2lsbCBwYXJlbnRoZXRpY2FsXCIgc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjYmZkYmZlO2JvcmRlci1yYWRpdXM6NnB4O1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21hcmdpbi10b3A6MTBweDtcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1bGstYnRuIGJ1bGstZXhjbHVkZVwiIGlkPVwiY2FuY2VsLWFkZC1za2lsbFwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnVsay1idG4gYnVsay1pbmNsdWRlXCI+U2F2ZSBTa2lsbDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgICAke19idWlsZFNraWxsQ2F0ZWdvcnlNYW5hZ2VySHRtbCgpfVxuICAgIDxkYXRhbGlzdCBpZD1cIiR7Y2F0ZWdvcnlMaXN0SWR9XCI+XG4gICAgICAke2NhdGVnb3J5U3VnZ2VzdGlvbnMubWFwKGNhdGVnb3J5ID0+IGA8b3B0aW9uIHZhbHVlPVwiJHtlc2NhcGVIdG1sKGNhdGVnb3J5KX1cIj48L29wdGlvbj5gKS5qb2luKCcnKX1cbiAgICA8L2RhdGFsaXN0PlxuICAgIDx0YWJsZSBpZD1cInNraWxscy1yZXZpZXctdGFibGVcIiBjbGFzcz1cInJldmlldy10YWJsZVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoPlNraWxsPC90aD5cbiAgICAgICAgICA8dGg+Q2F0ZWdvcnk8L3RoPlxuICAgICAgICAgIDx0aD5Hcm91cDwvdGg+XG4gICAgICAgICAgPHRoPlByb2ZpY2llbmN5PC90aD5cbiAgICAgICAgICA8dGg+U3ViLXNraWxsczwvdGg+XG4gICAgICAgICAgPHRoPlBhcmVudGhldGljYWw8L3RoPlxuICAgICAgICAgIDx0aD5SZWNvbW1lbmRhdGlvbjwvdGg+XG4gICAgICAgICAgPHRoPkNvbmZpZGVuY2U8L3RoPlxuICAgICAgICAgIDx0aD5SZWFzb25pbmc8L3RoPlxuICAgICAgICAgIDx0aD5NYXRjaGVkIEV4cGVyaWVuY2VzPC90aD5cbiAgICAgICAgICA8dGg+WW91ciBTZWxlY3Rpb248L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgYDtcblxuICBjb25zdCBhbGxFeHBlcmllbmNlcyA9IEFycmF5LmlzQXJyYXkod2luZG93Ll9hbGxFeHBlcmllbmNlcykgPyB3aW5kb3cuX2FsbEV4cGVyaWVuY2VzIDogW107XG4gIGNvbnN0IHNhdmVkTWF0Y2hlcyA9ICh3aW5kb3cuX3NhdmVkRGVjaXNpb25zICYmIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMuZXh0cmFfc2tpbGxfbWF0Y2hlcykgfHwge307XG5cbiAgY29uc3QgZGVyaXZlTWF0Y2hlcyA9IChza2lsbE5hbWUpID0+IHtcbiAgICBjb25zdCBuZWVkbGUgPSBza2lsbE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBpZHMgPSBbXTtcbiAgICBhbGxFeHBlcmllbmNlcy5mb3JFYWNoKChleHApID0+IHtcbiAgICAgIGlmICghZXhwIHx8IHR5cGVvZiBleHAgIT09ICdvYmplY3QnKSByZXR1cm47XG4gICAgICBjb25zdCBhY2ggPSBBcnJheS5pc0FycmF5KGV4cC5hY2hpZXZlbWVudHMpID8gZXhwLmFjaGlldmVtZW50cy5qb2luKCcgJykgOiAnJztcbiAgICAgIGNvbnN0IGhheXN0YWNrID0gW2V4cC50aXRsZSB8fCAnJywgZXhwLmNvbXBhbnkgfHwgJycsIGFjaF0uam9pbignICcpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoaGF5c3RhY2suaW5jbHVkZXMobmVlZGxlKSAmJiBleHAuaWQpIGlkcy5wdXNoKGV4cC5pZCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGlkcztcbiAgfTtcblxuICBza2lsbHMuZm9yRWFjaCgoc2tpbGwsIHJvd0lkeCkgPT4ge1xuICAgIGNvbnN0IHNraWxsTmFtZSAgICAgICAgICAgID0gdHlwZW9mIHNraWxsID09PSAnc3RyaW5nJyA/IHNraWxsIDogc2tpbGwubmFtZSB8fCBza2lsbDtcbiAgICBjb25zdCBpc05ldyAgICAgICAgICAgICAgICA9IChza2lsbC5faXNOZXcgPT09IHRydWUpO1xuICAgIGNvbnN0IGlzQ2FuZGlkYXRlVG9Db25maXJtID0gdHlwZW9mIHNraWxsID09PSAnb2JqZWN0JyAmJiBza2lsbC5jYW5kaWRhdGVfdG9fY29uZmlybSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBpc1JlY29tbWVuZGVkICAgICAgICA9IHJlY29tbWVuZGVkU2V0Lmhhcyhza2lsbE5hbWUpO1xuICAgIGNvbnN0IHJlY29tbWVuZGF0aW9uID0gZ2V0U2tpbGxSZWNvbW1lbmRhdGlvbihza2lsbE5hbWUsIGRhdGEpO1xuICAgIGNvbnN0IGNvbmZpZGVuY2UgICAgID0gZ2V0U2tpbGxDb25maWRlbmNlKHNraWxsTmFtZSwgZGF0YSk7XG4gICAgY29uc3QgcmVhc29uaW5nICAgICAgPSBnZXRTa2lsbFJlYXNvbmluZyhza2lsbE5hbWUsIGRhdGEpO1xuICAgIGNvbnN0IHNraWxsUmVjICAgICAgID0gX2ZpbmRTa2lsbFJlY29tbWVuZGF0aW9uUmVjb3JkKHNraWxsTmFtZSwgZGF0YSk7XG4gICAgY29uc3QgZ3JvdXBpbmdTdWdnZXN0aW9uID0gX2J1aWxkU2tpbGxHcm91cGluZ1N1Z2dlc3Rpb24oc2tpbGxSZWMsIHNraWxsKTtcbiAgICBjb25zdCBkZWZhdWx0QWN0aW9uICA9IHVzZXJTZWxlY3Rpb25zLnNraWxsc1tza2lsbE5hbWVdIHx8ICdpbmNsdWRlJztcbiAgICBjb25zdCBpc0ZpcnN0ICAgICAgICA9IHJvd0lkeCA9PT0gMDtcbiAgICBjb25zdCBpc0xhc3QgICAgICAgICA9IHJvd0lkeCA9PT0gc2tpbGxzLmxlbmd0aCAtIDE7XG4gICAgY29uc3Qgc2tpbGxOYW1lRXNjICAgPSBlc2NhcGVIdG1sKHNraWxsTmFtZSk7XG5cbiAgICBjb25zdCBncm91cEtleSA9IHR5cGVvZiBza2lsbCA9PT0gJ29iamVjdCcgPyAoc2tpbGwuZ3JvdXAgfHwgJycpIDogJyc7XG4gICAgY29uc3QgZ3JvdXBXYXJuaW5nID0gZ3JvdXBXYXJuaW5ncy5nZXQoZ3JvdXBLZXkpO1xuICAgIGNvbnN0IGNhdGVnb3J5S2V5ID0gdHlwZW9mIHNraWxsID09PSAnb2JqZWN0JyA/IChza2lsbC5jYXRlZ29yeSB8fCAnJykgOiAnJztcbiAgICBjb25zdCBwcm9maWNpZW5jeUtleSA9IHR5cGVvZiBza2lsbCA9PT0gJ29iamVjdCcgPyBTdHJpbmcoc2tpbGwucHJvZmljaWVuY3kgfHwgJycpLnRyaW0oKSA6ICcnO1xuICAgIGNvbnN0IHN1YnNraWxscyA9IHR5cGVvZiBza2lsbCA9PT0gJ29iamVjdCdcbiAgICAgID8gQXJyYXkuaXNBcnJheShza2lsbC5zdWJza2lsbHMpXG4gICAgICAgID8gc2tpbGwuc3Vic2tpbGxzXG4gICAgICAgIDogQXJyYXkuaXNBcnJheShza2lsbC5zdWJfc2tpbGxzKVxuICAgICAgICAgID8gc2tpbGwuc3ViX3NraWxsc1xuICAgICAgICAgIDogW11cbiAgICAgIDogW107XG4gICAgY29uc3QgcGFyZW50aGV0aWNhbEtleSA9IHR5cGVvZiBza2lsbCA9PT0gJ29iamVjdCcgPyBTdHJpbmcoc2tpbGwucGFyZW50aGV0aWNhbCB8fCAnJykudHJpbSgpIDogJyc7XG5cbiAgICBjb25zdCBuZXdCYWRnZSA9IGlzTmV3XG4gICAgICA/IChza2lsbC5faXNVc2VyQ3JlYXRlZFxuICAgICAgICA/ICc8c3BhbiB0aXRsZT1cIkFkZGVkIGZvciB0aGlzIHNlc3Npb24gb25seVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6NnB4O2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiMwZjc2NmU7Ym9yZGVyOjFweCBzb2xpZCAjMGY3NjZlO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MXB4IDVweDtjdXJzb3I6aGVscDtcIj5TZXNzaW9uIG9ubHk8L3NwYW4+J1xuICAgICAgICA6ICc8c3BhbiB0aXRsZT1cIkFJIHN1Z2dlc3RlZCBcdTIwMTQgbm90IHlldCBpbiBDViBwcm9maWxlXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDo2cHg7Zm9udC1zaXplOjEwcHg7Y29sb3I6I2RjNzkwMDtib3JkZXI6MXB4IHNvbGlkICNkYzc5MDA7Ym9yZGVyLXJhZGl1czozcHg7cGFkZGluZzoxcHggNXB4O2N1cnNvcjpoZWxwO1wiPlx1MjZBMCBOb3QgaW4gQ1YgcHJvZmlsZTwvc3Bhbj4nKVxuICAgICAgOiAnJztcbiAgICBjb25zdCBfZXZpZGVuY2VUZXh0ID0gaXNDYW5kaWRhdGVUb0NvbmZpcm0gJiYgdHlwZW9mIHNraWxsID09PSAnb2JqZWN0JyA/IFN0cmluZyhza2lsbC5ldmlkZW5jZSB8fCAnJykudHJpbSgpIDogJyc7XG4gICAgY29uc3QgX2V2aWRlbmNlRmFsbGJhY2sgPSAnQ29uZmlybSB0aGlzIHNraWxsIGlzIGdlbnVpbmVseSBkZW1vbnN0cmF0ZWQgaW4geW91ciBleHBlcmllbmNlIGJlZm9yZSBpbmNsdWRpbmcgaXQuJztcbiAgICBjb25zdCBfZXZpZGVuY2VUaXAgPSBfZXZpZGVuY2VUZXh0ID8gYFdlYWsgZXZpZGVuY2UgXHUyMDE0ICR7X2V2aWRlbmNlVGV4dH1gIDogYFdlYWsgZXZpZGVuY2UgXHUyMDE0ICR7X2V2aWRlbmNlRmFsbGJhY2t9YDtcbiAgICBjb25zdCBjYW5kaWRhdGVCYWRnZSA9IGlzQ2FuZGlkYXRlVG9Db25maXJtXG4gICAgICA/IGA8c3BhbiB0aXRsZT1cIiR7ZXNjYXBlSHRtbChfZXZpZGVuY2VUaXApfVwiIGFyaWEtbGFiZWw9XCIke2VzY2FwZUh0bWwoX2V2aWRlbmNlVGlwKX1cIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjZweDtmb250LXNpemU6MTBweDtjb2xvcjojOWYxMjM5O2JvcmRlcjoxcHggc29saWQgIzlmMTIzOTtib3JkZXItcmFkaXVzOjNweDtwYWRkaW5nOjFweCA1cHg7Y3Vyc29yOmhlbHA7XCI+XHUyNkEwICR7X2V2aWRlbmNlVGV4dCA/ICdXZWFrIGV2aWRlbmNlJyA6ICdWZXJpZnkgZXZpZGVuY2UnfTwvc3Bhbj5gXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGV2aWRlbmNlTm90ZSA9IGlzQ2FuZGlkYXRlVG9Db25maXJtICYmIF9ldmlkZW5jZVRleHRcbiAgICAgID8gYDxzbWFsbCBzdHlsZT1cImRpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDozcHg7Zm9udC1zaXplOjAuNzhlbTtjb2xvcjojOWYxMjM5O1wiPiR7ZXNjYXBlSHRtbChfZXZpZGVuY2VUZXh0KX08L3NtYWxsPmBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgcmVydW5OZXdCYWRnZSA9IG5ld1JlY29tbWVuZGVkU2tpbGxzLmhhcyhza2lsbE5hbWUpXG4gICAgICA/ICc8c3BhbiBjbGFzcz1cInJ3LWNoYW5nZS1iYWRnZSBydy1jaGFuZ2UtbmV3XCIgYXJpYS1sYWJlbD1cIk5ldyByZWNvbW1lbmRhdGlvbiBzaW5jZSBwcmV2aW91cyBydW5cIj5cdUQ4M0NcdUREOTUgTmV3PC9zcGFuPidcbiAgICAgIDogJyc7XG4gICAgY29uc3Qgc2tpbGxOYW1lTG93ZXIgID0gc2tpbGxOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgX3R5cGVPdmVycmlkZSAgID0gKHdpbmRvdy5fc2tpbGxUeXBlT3ZlcnJpZGVzIHx8IHt9KVtza2lsbE5hbWVMb3dlcl07XG4gICAgY29uc3QgX2Jhc2VUeXBlICAgICAgID0gaGFyZFNraWxsU2V0Lmhhcyhza2lsbE5hbWVMb3dlcikgPyAnaGFyZCdcbiAgICAgIDogc29mdFNraWxsU2V0Py5oYXMoc2tpbGxOYW1lTG93ZXIpID8gJ3NvZnQnIDogbnVsbDtcbiAgICBjb25zdCBfZWZmZWN0aXZlVHlwZSAgPSBfdHlwZU92ZXJyaWRlIHx8IF9iYXNlVHlwZTtcbiAgICBjb25zdCBfaXNPdmVycmlkZGVuICAgPSAhIV90eXBlT3ZlcnJpZGUgJiYgX3R5cGVPdmVycmlkZSAhPT0gX2Jhc2VUeXBlO1xuICAgIGNvbnN0IF90b2dnbGVUYXJnZXQgICA9IF9lZmZlY3RpdmVUeXBlID09PSAnaGFyZCcgPyAnc29mdCdcbiAgICAgIDogX2VmZmVjdGl2ZVR5cGUgPT09ICdzb2Z0JyA/IG51bGwgOiAnaGFyZCc7XG4gICAgY29uc3QgX2JhZGdlVGl0bGUgICAgID0gX2lzT3ZlcnJpZGRlblxuICAgICAgPyBgVXNlciBvdmVycmlkZTogJHtfZWZmZWN0aXZlVHlwZX0gKG9yaWdpbmFsOiAke19iYXNlVHlwZSB8fCAnbm9uZSd9KSBcdTIwMTQgY2xpY2sgdG8gY3ljbGVgXG4gICAgICA6IF9lZmZlY3RpdmVUeXBlXG4gICAgICAgID8gYCR7X2VmZmVjdGl2ZVR5cGUgPT09ICdoYXJkJyA/ICdSZXF1aXJlZCcgOiAnTmljZS10by1oYXZlJ30gcGVyIGpvYiBkZXNjcmlwdGlvbiBcdTIwMTQgY2xpY2sgdG8gb3ZlcnJpZGVgXG4gICAgICAgIDogJ05vdCBjbGFzc2lmaWVkIFx1MjAxNCBjbGljayB0byBtYXJrIGFzIEhhcmQnO1xuICAgIGNvbnN0IF9iYWRnZVN0eWxlICAgICA9IF9lZmZlY3RpdmVUeXBlID09PSAnaGFyZCdcbiAgICAgID8gYG1hcmdpbi1sZWZ0OjVweDtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzFkNGVkODtiYWNrZ3JvdW5kOiNkYmVhZmU7Ym9yZGVyLXJhZGl1czozcHg7cGFkZGluZzoxcHggNXB4O2N1cnNvcjpwb2ludGVyOyR7X2lzT3ZlcnJpZGRlbiA/ICdvdXRsaW5lOjJweCBzb2xpZCAjMWQ0ZWQ4O291dGxpbmUtb2Zmc2V0OjFweDsnIDogJyd9YFxuICAgICAgOiBfZWZmZWN0aXZlVHlwZSA9PT0gJ3NvZnQnXG4gICAgICAgID8gYG1hcmdpbi1sZWZ0OjVweDtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzZiMjFhODtiYWNrZ3JvdW5kOiNmM2U4ZmY7Ym9yZGVyLXJhZGl1czozcHg7cGFkZGluZzoxcHggNXB4O2N1cnNvcjpwb2ludGVyOyR7X2lzT3ZlcnJpZGRlbiA/ICdvdXRsaW5lOjJweCBzb2xpZCAjNmIyMWE4O291dGxpbmUtb2Zmc2V0OjFweDsnIDogJyd9YFxuICAgICAgICA6ICdtYXJnaW4tbGVmdDo1cHg7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM2YjcyODA7YmFja2dyb3VuZDojZjNmNGY2O2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MXB4IDVweDtjdXJzb3I6cG9pbnRlcjtib3JkZXI6MXB4IGRhc2hlZCAjOWNhM2FmOyc7XG4gICAgY29uc3QgX2JhZGdlTGFiZWwgICAgID0gX2VmZmVjdGl2ZVR5cGUgPyAoX2VmZmVjdGl2ZVR5cGUgPT09ICdoYXJkJyA/ICdIYXJkJyA6ICdTb2Z0JykgOiAnKyBUeXBlJztcbiAgICBjb25zdCBza2lsbFR5cGVCYWRnZSAgPSBgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJza2lsbC10eXBlLXRvZ2dsZVwiIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIiBkYXRhLXRvZ2dsZS10bz1cIiR7X3RvZ2dsZVRhcmdldCB8fCAnJ31cIiB0aXRsZT1cIiR7X2JhZGdlVGl0bGV9XCIgc3R5bGU9XCIke19iYWRnZVN0eWxlfVwiIGFyaWEtbGFiZWw9XCJTa2lsbCB0eXBlOiAke19lZmZlY3RpdmVUeXBlIHx8ICd1bmNsYXNzaWZpZWQnfSwgY2xpY2sgdG8gdG9nZ2xlXCI+JHtfYmFkZ2VMYWJlbH08L2J1dHRvbj5gO1xuICAgIGNvbnN0IHJlY29tbWVuZGF0aW9uVGV4dCA9IHJlY29tbWVuZGF0aW9uIHx8IChza2lsbC5faXNVc2VyQ3JlYXRlZCA/ICdJbmNsdWRlIChzZXNzaW9uLWFkZGVkKScgOiAoaXNOZXcgPyAnSW5jbHVkZSAoQUkgc3VnZ2VzdGVkKScgOiAnT21pdCcpKTtcbiAgICBjb25zdCBjb25maWRlbmNlQmFkZ2UgICAgPSBgPHNwYW4gY2xhc3M9XCJjb25maWRlbmNlLWJhZGdlIGNvbmZpZGVuY2UtJHtjb25maWRlbmNlLmxldmVsfVwiPiR7Y29uZmlkZW5jZS50ZXh0fTwvc3Bhbj5gO1xuICAgIGNvbnN0IHJlYXNvbmluZ1RleHQgICAgICA9IHJlYXNvbmluZyB8fCAoc2tpbGwuX2lzVXNlckNyZWF0ZWRcbiAgICAgID8gJ1lvdSBhZGRlZCB0aGlzIHNraWxsIGZvciB0aGUgY3VycmVudCBDViBzZXNzaW9uIG9ubHkuJ1xuICAgICAgOiAoaXNOZXdcbiAgICAgICAgPyAnUmVjb21tZW5kZWQgYnkgQUkgYmFzZWQgb24gam9iIHJlcXVpcmVtZW50cyBidXQgbm90IGN1cnJlbnRseSBpbiB5b3VyIG1hc3RlciBDVi4nXG4gICAgICAgIDogJ1RoaXMgc2tpbGwgd2FzIG5vdCBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGluIHRoZSBqb2IgcmVxdWlyZW1lbnRzLicpKTtcbiAgICBjb25zdCBncm91cGluZ0NoYW5nZVRleHQgPSBncm91cGluZ1N1Z2dlc3Rpb24/LmNoYW5nZVRleHQgfHwgJyc7XG4gICAgY29uc3QgZ3JvdXBpbmdSZWFzb25UZXh0ID0gZ3JvdXBpbmdTdWdnZXN0aW9uPy5yZWFzb25pbmcgfHwgJyc7XG4gICAgY29uc3QgZ3JvdXBpbmdBdHNJbXBhY3QgPSBncm91cGluZ1N1Z2dlc3Rpb24/LmF0c0ltcGFjdCB8fCAnJztcbiAgICBjb25zdCBncm91cGluZ1BhZ2VJbXBhY3QgPSBncm91cGluZ1N1Z2dlc3Rpb24/LnBhZ2VMZW5ndGhJbXBhY3QgfHwgJyc7XG4gICAgY29uc3QgcmVhc29uaW5nU2VnbWVudHMgPSBbcmVhc29uaW5nVGV4dF07XG4gICAgaWYgKGdyb3VwaW5nQ2hhbmdlVGV4dCkgcmVhc29uaW5nU2VnbWVudHMucHVzaChgQ2hhbmdlOiAke2dyb3VwaW5nQ2hhbmdlVGV4dH1gKTtcbiAgICBpZiAoZ3JvdXBpbmdSZWFzb25UZXh0KSByZWFzb25pbmdTZWdtZW50cy5wdXNoKGdyb3VwaW5nUmVhc29uVGV4dCk7XG4gICAgaWYgKGdyb3VwaW5nQXRzSW1wYWN0KSByZWFzb25pbmdTZWdtZW50cy5wdXNoKGBBVFMgaW1wYWN0OiAke2dyb3VwaW5nQXRzSW1wYWN0fWApO1xuICAgIGlmIChncm91cGluZ1BhZ2VJbXBhY3QpIHJlYXNvbmluZ1NlZ21lbnRzLnB1c2goYFBhZ2UgbGVuZ3RoIGltcGFjdDogJHtncm91cGluZ1BhZ2VJbXBhY3R9YCk7XG4gICAgY29uc3QgZnVsbFJlYXNvbmluZ1RleHQgPSByZWFzb25pbmdTZWdtZW50cy5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICAgIGNvbnN0IHJvd1N0eWxlICAgICAgICAgICA9IGlzTmV3ID8gJ2JhY2tncm91bmQ6I2ZmZmJlYjsnIDogJyc7XG4gICAgY29uc3QgZGVmYXVsdE1hdGNoZXMgPSBpc05ldyA/IChzYXZlZE1hdGNoZXNbc2tpbGxOYW1lXSB8fCBkZXJpdmVNYXRjaGVzKHNraWxsTmFtZSkpIDogW107XG4gICAgY29uc3QgbWF0Y2hWYWx1ZSA9IGRlZmF1bHRNYXRjaGVzLmpvaW4oJywgJyk7XG4gICAgY29uc3QgbWF0Y2hIZWxwID0gaXNOZXdcbiAgICAgID8gJ0NvbW1hLXNlcGFyYXRlZCBleHBlcmllbmNlIElEcy4gQXV0by1kZXJpdmVkOyB5b3UgY2FuIGVkaXQgYmVmb3JlIHN1Ym1pdC4nXG4gICAgICA6ICdPbmx5IHVzZWQgZm9yIEFJLXN1Z2dlc3RlZCBza2lsbHMuJztcbiAgICBjb25zdCBkZXJpdmVkWWVhcnMgPSBpc05ldyA/IF9jb21wdXRlWWVhcnNGcm9tSWRzKGRlZmF1bHRNYXRjaGVzLCBhbGxFeHBlcmllbmNlcykgOiBudWxsO1xuICAgIGNvbnN0IHllYXJzSGludCA9IGRlcml2ZWRZZWFycyAhPSBudWxsXG4gICAgICA/IGB+JHtkZXJpdmVkWWVhcnN9IHlyJHtkZXJpdmVkWWVhcnMgPT09IDEgPyAnJyA6ICdzJ31gXG4gICAgICA6IChpc05ldyA/ICdubyBtYXRjaCcgOiAnJyk7XG5cbiAgICB0YWJsZUhUTUwgKz0gYFxuICAgICAgPHRyIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIiBzdHlsZT1cIiR7cm93U3R5bGV9XCI+XG4gICAgICAgIDx0ZD48c3Ryb25nPiR7c2tpbGxOYW1lRXNjfTwvc3Ryb25nPiR7c2tpbGxUeXBlQmFkZ2V9JHtyZXJ1bk5ld0JhZGdlfSR7bmV3QmFkZ2V9JHtjYW5kaWRhdGVCYWRnZX0ke2V2aWRlbmNlTm90ZX08L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJtaW4td2lkdGg6MTQwcHg7XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJza2lsbC1jYXRlZ29yeS1pbnB1dFwiIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIlxuICAgICAgICAgICAgdmFsdWU9XCIke2VzY2FwZUh0bWwoY2F0ZWdvcnlLZXkpfVwiXG4gICAgICAgICAgICBsaXN0PVwiJHtjYXRlZ29yeUxpc3RJZH1cIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIFByb2dyYW1taW5nXCJcbiAgICAgICAgICAgIHRpdGxlPVwiU2Vzc2lvbi1vbmx5IGNhdGVnb3J5IGxhYmVsIHVzZWQgd2hlbiBncm91cGluZyBza2lsbHMgaW4gdGhlIGdlbmVyYXRlZCBDVlwiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Zm9udC1zaXplOjAuOGVtO3BhZGRpbmc6NHB4IDZweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo0cHg7XCIvPlxuICAgICAgICAgICR7Z3JvdXBpbmdTdWdnZXN0aW9uPy5jYXRlZ29yeUNoYW5nZWQgPyBgPGRpdiBjbGFzcz1cInNraWxsLWFpLWhpbnRcIiBzdHlsZT1cIm1hcmdpbi10b3A6NHB4O2ZvbnQtc2l6ZTowLjc1ZW07Y29sb3I6IzQzMzhjYTtcIj5cbiAgICAgICAgICAgIEFJIHN1Z2dlc3Rpb246ICR7ZXNjYXBlSHRtbChncm91cGluZ1N1Z2dlc3Rpb24uY2F0ZWdvcnkpfVxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNraWxsLWFwcGx5LWFpXCIgZGF0YS1za2lsbD1cIiR7c2tpbGxOYW1lRXNjfVwiIGRhdGEtYWktZmllbGQ9XCJjYXRlZ29yeVwiIGRhdGEtYWktdmFsdWU9XCIke2VzY2FwZUh0bWwoZ3JvdXBpbmdTdWdnZXN0aW9uLmNhdGVnb3J5KX1cIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjZweDtib3JkZXI6MXB4IHNvbGlkICNjN2QyZmU7YmFja2dyb3VuZDojZWVmMmZmO2NvbG9yOiM0MzM4Y2E7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoxcHggNnB4O2N1cnNvcjpwb2ludGVyO1wiPkFwcGx5PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+YCA6ICcnfVxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJtaW4td2lkdGg6MTAwcHg7XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJza2lsbC1ncm91cC1pbnB1dFwiIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIlxuICAgICAgICAgICAgdmFsdWU9XCIke2VzY2FwZUh0bWwoZ3JvdXBLZXkpfVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gY19mYW1pbHlcIlxuICAgICAgICAgICAgdGl0bGU9XCJTa2lsbHMgd2l0aCB0aGUgc2FtZSBncm91cCBrZXkgcmVuZGVyIGFzIG9uZSBjb21tYS1zZXBhcmF0ZWQgYnVsbGV0XCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtmb250LXNpemU6MC44ZW07cGFkZGluZzo0cHggNnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtcIi8+XG4gICAgICAgICAgJHtncm91cGluZ1N1Z2dlc3Rpb24/Lmdyb3VwQ2hhbmdlZCA/IGA8ZGl2IGNsYXNzPVwic2tpbGwtYWktaGludFwiIHN0eWxlPVwibWFyZ2luLXRvcDo0cHg7Zm9udC1zaXplOjAuNzVlbTtjb2xvcjojNDMzOGNhO1wiPlxuICAgICAgICAgICAgQUkgc3VnZ2VzdGlvbjogJHtlc2NhcGVIdG1sKGdyb3VwaW5nU3VnZ2VzdGlvbi5ncm91cCl9XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2tpbGwtYXBwbHktYWlcIiBkYXRhLXNraWxsPVwiJHtza2lsbE5hbWVFc2N9XCIgZGF0YS1haS1maWVsZD1cImdyb3VwXCIgZGF0YS1haS12YWx1ZT1cIiR7ZXNjYXBlSHRtbChncm91cGluZ1N1Z2dlc3Rpb24uZ3JvdXApfVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6NnB4O2JvcmRlcjoxcHggc29saWQgI2M3ZDJmZTtiYWNrZ3JvdW5kOiNlZWYyZmY7Y29sb3I6IzQzMzhjYTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjFweCA2cHg7Y3Vyc29yOnBvaW50ZXI7XCI+QXBwbHk8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5gIDogJyd9XG4gICAgICAgICAgJHtncm91cFdhcm5pbmcgPyBgPGRpdiBjbGFzcz1cInNraWxsLWdyb3VwLXdhcm5pbmdcIiB0aXRsZT1cIiR7ZXNjYXBlSHRtbChncm91cFdhcm5pbmcucHJldmlldyl9XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtmb250LXNpemU6MC43NWVtO2NvbG9yOiNiNDUzMDk7XCI+XHUyNkEwICR7ZXNjYXBlSHRtbChncm91cFdhcm5pbmcubWVzc2FnZSl9PC9kaXY+YCA6ICcnfVxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJtaW4td2lkdGg6MTIwcHg7XCI+XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInNraWxsLXByb2ZpY2llbmN5LWlucHV0XCIgZGF0YS1za2lsbD1cIiR7c2tpbGxOYW1lRXNjfVwiXG4gICAgICAgICAgICB0aXRsZT1cIlNlc3Npb24tb25seSBwcm9maWNpZW5jeSBsYWJlbCB1c2VkIHdoZW4gcmVuZGVyaW5nIGlubGluZSBza2lsbCBidWxsZXRzXCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtmb250LXNpemU6MC44ZW07cGFkZGluZzo0cHggNnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiAkeyFwcm9maWNpZW5jeUtleSA/ICdzZWxlY3RlZCcgOiAnJ30+Tm9uZTwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZ2lubmVyXCIgJHtwcm9maWNpZW5jeUtleSA9PT0gJ2JlZ2lubmVyJyA/ICdzZWxlY3RlZCcgOiAnJ30+QmVnaW5uZXI8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmYW1pbGlhclwiICR7cHJvZmljaWVuY3lLZXkgPT09ICdmYW1pbGlhcicgPyAnc2VsZWN0ZWQnIDogJyd9PkZhbWlsaWFyPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaW50ZXJtZWRpYXRlXCIgJHtwcm9maWNpZW5jeUtleSA9PT0gJ2ludGVybWVkaWF0ZScgPyAnc2VsZWN0ZWQnIDogJyd9PkludGVybWVkaWF0ZTwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFkdmFuY2VkXCIgJHtwcm9maWNpZW5jeUtleSA9PT0gJ2FkdmFuY2VkJyA/ICdzZWxlY3RlZCcgOiAnJ30+QWR2YW5jZWQ8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJleHBlcnRcIiAke3Byb2ZpY2llbmN5S2V5ID09PSAnZXhwZXJ0JyA/ICdzZWxlY3RlZCcgOiAnJ30+RXhwZXJ0PC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cIm1pbi13aWR0aDoxODBweDtcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cInNraWxsLXN1YnNraWxscy1pbnB1dFwiIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIlxuICAgICAgICAgICAgdmFsdWU9XCIke2VzY2FwZUh0bWwoc3Vic2tpbGxzLmpvaW4oJywgJykpfVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gUGFuZGFzLCBOdW1QeVwiXG4gICAgICAgICAgICB0aXRsZT1cIkNvbW1hLXNlcGFyYXRlZCBzdWItc2tpbGxzIHVzZWQgaW4gaW5saW5lIHNraWxsIGJ1bGxldHNcIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO2ZvbnQtc2l6ZTowLjhlbTtwYWRkaW5nOjRweCA2cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6NHB4O1wiLz5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwibWluLXdpZHRoOjE4MHB4O1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwic2tpbGwtcGFyZW50aGV0aWNhbC1pbnB1dFwiIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIlxuICAgICAgICAgICAgdmFsdWU9XCIke2VzY2FwZUh0bWwocGFyZW50aGV0aWNhbEtleSl9XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiT3B0aW9uYWwgaW5saW5lIG5vdGVcIlxuICAgICAgICAgICAgdGl0bGU9XCJGcmVlLWZvcm0gcGFyZW50aGV0aWNhbCBvdmVycmlkZSBmb3IgdGhlIHJlbmRlcmVkIGlubGluZSBza2lsbCBsYWJlbFwiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Zm9udC1zaXplOjAuOGVtO3BhZGRpbmc6NHB4IDZweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo0cHg7XCIvPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQ+PHN0cm9uZz4ke2VzY2FwZUh0bWwocmVjb21tZW5kYXRpb25UZXh0KX08L3N0cm9uZz48L3RkPlxuICAgICAgICA8dGQ+JHtjb25maWRlbmNlQmFkZ2V9PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwibWF4LXdpZHRoOjMwMHB4O1wiPjxzbWFsbD4ke2VzY2FwZUh0bWwoZnVsbFJlYXNvbmluZ1RleHQpfTwvc21hbGw+PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwibWluLXdpZHRoOjI2MHB4O1wiPlxuICAgICAgICAgICR7aXNOZXcgPyBgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cInNraWxsLW1hdGNoLWlucHV0XCJcbiAgICAgICAgICAgIGRhdGEtc2tpbGw9XCIke3NraWxsTmFtZUVzY31cIlxuICAgICAgICAgICAgdmFsdWU9XCIke2VzY2FwZUh0bWwobWF0Y2hWYWx1ZSl9XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZXhwXzEsIGV4cF8yXCJcbiAgICAgICAgICAgIHRpdGxlPVwiJHtlc2NhcGVIdG1sKG1hdGNoSGVscCl9XCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtmb250LXNpemU6MC44NWVtO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7XCJcbiAgICAgICAgICAvPjxzcGFuIGNsYXNzPVwiZGVyaXZlZC15ZWFycy1oaW50XCIgZGF0YS1za2lsbD1cIiR7c2tpbGxOYW1lRXNjfVwiIHRpdGxlPVwiRXN0aW1hdGVkIHllYXJzIGRlcml2ZWQgZnJvbSBtYXRjaGVkIGV4cGVyaWVuY2UgZW50cmllc1wiIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDo0cHg7Zm9udC1zaXplOjAuOGVtO2NvbG9yOiM2YjcyODA7XCI+JHtlc2NhcGVIdG1sKHllYXJzSGludCl9PC9zcGFuPmAgOiAnPHNwYW4gc3R5bGU9XCJjb2xvcjojOWNhM2FmO1wiPlx1MjAxNDwvc3Bhbj4nfVxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb24tYnRuc1wiIHN0eWxlPVwid2hpdGUtc3BhY2U6bm93cmFwO1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2RlZmF1bHRBY3Rpb24gPT09ICdlbXBoYXNpemUnICAgID8gJ2FjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImVtcGhhc2l6ZVwiICAgIGFyaWEtbGFiZWw9XCJFbXBoYXNpemUgJHtza2lsbE5hbWVFc2N9XCIgICAgYXJpYS1wcmVzc2VkPVwiJHtkZWZhdWx0QWN0aW9uID09PSAnZW1waGFzaXplJ31cIiAgICB0aXRsZT1cIkVtcGhhc2l6ZSBcdTIwMTQgZmVhdHVyZSBwcm9taW5lbnRseVwiIHN0eWxlPVwiY29sb3I6IzEwYjk4MTtcIj5cdTI3OTU8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4gJHtkZWZhdWx0QWN0aW9uID09PSAnaW5jbHVkZScgICAgICA/ICdhY3RpdmUnIDogJyd9XCIgZGF0YS1hY3Rpb249XCJpbmNsdWRlXCIgICAgICBhcmlhLWxhYmVsPVwiSW5jbHVkZSAke3NraWxsTmFtZUVzY31cIiAgICAgIGFyaWEtcHJlc3NlZD1cIiR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2luY2x1ZGUnfVwiICAgICAgdGl0bGU9XCJJbmNsdWRlIFx1MjAxNCBzdGFuZGFyZCBsaXN0aW5nXCI+XHUyNzEzPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2RlLWVtcGhhc2l6ZScgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiZGUtZW1waGFzaXplXCIgYXJpYS1sYWJlbD1cIkRlLWVtcGhhc2l6ZSAke3NraWxsTmFtZUVzY31cIiBhcmlhLXByZXNzZWQ9XCIke2RlZmF1bHRBY3Rpb24gPT09ICdkZS1lbXBoYXNpemUnfVwiIHRpdGxlPVwiRGUtZW1waGFzaXplIFx1MjAxNCBicmllZiBtZW50aW9uXCIgICAgc3R5bGU9XCJjb2xvcjojZjU5ZTBiO1wiPlx1Mjc5NjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2RlZmF1bHRBY3Rpb24gPT09ICdleGNsdWRlJyAgICAgID8gJ2FjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImV4Y2x1ZGVcIiAgICAgIGFyaWEtbGFiZWw9XCJFeGNsdWRlICR7c2tpbGxOYW1lRXNjfVwiICAgICAgYXJpYS1wcmVzc2VkPVwiJHtkZWZhdWx0QWN0aW9uID09PSAnZXhjbHVkZSd9XCIgICAgICB0aXRsZT1cIkV4Y2x1ZGUgXHUyMDE0IG9taXQgZnJvbSBDVlwiICAgICAgICAgIHN0eWxlPVwiY29sb3I6I2VmNDQ0NDtcIj4ke2V5ZVNsYXNoSWNvbigpfTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGRhdGEtYWN0aW9uPVwicm93LXVwXCIgICBhcmlhLWxhYmVsPVwiTW92ZSAke3NraWxsTmFtZUVzY30gZWFybGllclwiIHRpdGxlPVwiTW92ZSB1cFwiICAgJHtpc0ZpcnN0ID8gJ2Rpc2FibGVkJyA6ICcnfT5cdTIxOTE8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBkYXRhLWFjdGlvbj1cInJvdy1kb3duXCIgYXJpYS1sYWJlbD1cIk1vdmUgJHtza2lsbE5hbWVFc2N9IGxhdGVyXCIgICB0aXRsZT1cIk1vdmUgZG93blwiICR7aXNMYXN0ICA/ICdkaXNhYmxlZCcgOiAnJ30+XHUyMTkzPC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIGA7XG4gIH0pO1xuXG4gIHRhYmxlSFRNTCArPSAnPC90Ym9keT48L3RhYmxlPic7XG4gIGNvbnRhaW5lci5pbm5lckhUTUwgPSB0YWJsZUhUTUw7XG5cbiAgLy8gU2F2ZSBncm91cCBrZXkgZm9yIHRoaXMgc2Vzc2lvbiB3aGVuIHVzZXIgZmluaXNoZXMgZWRpdGluZ1xuICBjb250YWluZXIucXVlcnlTZWxlY3RvcignLnNraWxsLWNhdGVnb3J5LW1hbmFnZXInKT8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZSA9PiB7XG4gICAgY29uc3QgY2F0ZWdvcnlNYW5hZ2VySW5wdXQgPSBlLnRhcmdldC5jbG9zZXN0KCcuc2tpbGwtY2F0ZWdvcnktbWFuYWdlci1pbnB1dCcpO1xuICAgIGlmIChjYXRlZ29yeU1hbmFnZXJJbnB1dCkge1xuICAgICAgY29uc3QgbWFuYWdlclJvdyA9IGNhdGVnb3J5TWFuYWdlcklucHV0LmNsb3Nlc3QoJy5za2lsbC1jYXRlZ29yeS1tYW5hZ2VyLXJvdycpO1xuICAgICAgY29uc3Qgb2xkQ2F0ZWdvcnkgPSBtYW5hZ2VyUm93Py5kYXRhc2V0LmNhdGVnb3J5IHx8ICcnO1xuICAgICAgY29uc3QgbmV3Q2F0ZWdvcnkgPSBjYXRlZ29yeU1hbmFnZXJJbnB1dC52YWx1ZS50cmltKCk7XG4gICAgICBpZiAoIW9sZENhdGVnb3J5IHx8ICFuZXdDYXRlZ29yeSB8fCBvbGRDYXRlZ29yeSA9PT0gbmV3Q2F0ZWdvcnkpIHtcbiAgICAgICAgaWYgKG1hbmFnZXJSb3cpIGNhdGVnb3J5TWFuYWdlcklucHV0LnZhbHVlID0gb2xkQ2F0ZWdvcnk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF9yZW5hbWVTa2lsbENhdGVnb3J5TG9jYWxseShvbGRDYXRlZ29yeSwgbmV3Q2F0ZWdvcnkpO1xuICAgICAgcmVuYW1lU2tpbGxDYXRlZ29yeShvbGRDYXRlZ29yeSwgbmV3Q2F0ZWdvcnkpXG4gICAgICAgIC50aGVuKCgpID0+IF9yZW5kZXJTa2lsbHNUYWJsZShjb250YWluZXIsIHJlY29tbWVuZGVkU2V0LCBkYXRhLCBoYXJkU2tpbGxTZXQsIHNvZnRTa2lsbFNldCkpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgX3JlbmFtZVNraWxsQ2F0ZWdvcnlMb2NhbGx5KG5ld0NhdGVnb3J5LCBvbGRDYXRlZ29yeSk7XG4gICAgICAgICAgaWYgKG1hbmFnZXJSb3cpIGNhdGVnb3J5TWFuYWdlcklucHV0LnZhbHVlID0gb2xkQ2F0ZWdvcnk7XG4gICAgICAgICAgc2hvd1RvYXN0KCdGYWlsZWQgdG8gcmVuYW1lIHNraWxsIGNhdGVnb3J5LicsICdlcnJvcicpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcjc2tpbGxzLXJldmlldy10YWJsZSB0Ym9keScpPy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBlID0+IHtcbiAgICBjb25zdCBjYXRlZ29yeUlucHV0ID0gZS50YXJnZXQuY2xvc2VzdCgnLnNraWxsLWNhdGVnb3J5LWlucHV0Jyk7XG5cbiAgY29uc3QgYWRkU2tpbGxGb3JtID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNhZGQtc2tpbGwtZm9ybScpO1xuICBjb25zdCB0b2dnbGVBZGRTa2lsbEZvcm0gPSAoKSA9PiB7XG4gICAgaWYgKCFhZGRTa2lsbEZvcm0pIHJldHVybjtcbiAgICBhZGRTa2lsbEZvcm0uc3R5bGUuZGlzcGxheSA9IGFkZFNraWxsRm9ybS5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnYmxvY2snIDogJ25vbmUnO1xuICB9O1xuICBjb250YWluZXIucXVlcnlTZWxlY3RvcignI3RvZ2dsZS1hZGQtc2tpbGwtZm9ybScpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRvZ2dsZUFkZFNraWxsRm9ybSk7XG4gIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcjY2FuY2VsLWFkZC1za2lsbCcpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBpZiAoIWFkZFNraWxsRm9ybSkgcmV0dXJuO1xuICAgIGFkZFNraWxsRm9ybS5yZXNldCgpO1xuICAgIGFkZFNraWxsRm9ybS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9KTtcbiAgYWRkU2tpbGxGb3JtPy5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBhc3luYyBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoYWRkU2tpbGxGb3JtKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2F2ZVVzZXJDcmVhdGVkU2tpbGwoe1xuICAgICAgICBuYW1lOiBmb3JtRGF0YS5nZXQoJ25hbWUnKSxcbiAgICAgICAgY2F0ZWdvcnk6IGZvcm1EYXRhLmdldCgnY2F0ZWdvcnknKSxcbiAgICAgICAgZ3JvdXA6IGZvcm1EYXRhLmdldCgnZ3JvdXAnKSxcbiAgICAgICAgcHJvZmljaWVuY3k6IGZvcm1EYXRhLmdldCgncHJvZmljaWVuY3knKSxcbiAgICAgICAgc3Vic2tpbGxzOiBmb3JtRGF0YS5nZXQoJ3N1YnNraWxscycpLFxuICAgICAgICBwYXJlbnRoZXRpY2FsOiBmb3JtRGF0YS5nZXQoJ3BhcmVudGhldGljYWwnKSxcbiAgICAgIH0pO1xuICAgICAgc2hvd1RvYXN0KCdTZXNzaW9uLW9ubHkgc2tpbGwgYWRkZWQuJyk7XG4gICAgICBhZGRTa2lsbEZvcm0ucmVzZXQoKTtcbiAgICAgIGFkZFNraWxsRm9ybS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgX3JlbmRlclNraWxsc1RhYmxlKGNvbnRhaW5lciwgcmVjb21tZW5kZWRTZXQsIGRhdGEsIGhhcmRTa2lsbFNldCwgc29mdFNraWxsU2V0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2hvd1RvYXN0KGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBhZGQgc2tpbGwuJywgJ2Vycm9yJyk7XG4gICAgfVxuICB9KTtcbiAgICBpZiAoY2F0ZWdvcnlJbnB1dCkge1xuICAgICAgY29uc3Qgc2tpbGxOYW1lID0gY2F0ZWdvcnlJbnB1dC5kYXRhc2V0LnNraWxsO1xuICAgICAgY29uc3QgbmV3Q2F0ZWdvcnkgPSBjYXRlZ29yeUlucHV0LnZhbHVlLnRyaW0oKTtcbiAgICAgIHNhdmVTa2lsbENhdGVnb3J5T3ZlcnJpZGUoc2tpbGxOYW1lLCBuZXdDYXRlZ29yeSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICBzaG93VG9hc3QoJ0ZhaWxlZCB0byBzYXZlIHNraWxsIGNhdGVnb3J5LicsICdlcnJvcicpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBlLnRhcmdldC5jbG9zZXN0KCcuc2tpbGwtZ3JvdXAtaW5wdXQnKTtcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIGNvbnN0IHNraWxsTmFtZSA9IGlucHV0LmRhdGFzZXQuc2tpbGw7XG4gICAgICBjb25zdCBuZXdHcm91cCA9IGlucHV0LnZhbHVlLnRyaW0oKTtcbiAgICAgIHNhdmVTa2lsbEdyb3VwT3ZlcnJpZGUoc2tpbGxOYW1lLCBuZXdHcm91cCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICBzaG93VG9hc3QoJ0ZhaWxlZCB0byBzYXZlIHNraWxsIGdyb3VwLicsICdlcnJvcicpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcXVhbGlmaWVySW5wdXQgPSBlLnRhcmdldC5jbG9zZXN0KCcuc2tpbGwtcHJvZmljaWVuY3ktaW5wdXQsIC5za2lsbC1zdWJza2lsbHMtaW5wdXQsIC5za2lsbC1wYXJlbnRoZXRpY2FsLWlucHV0Jyk7XG4gICAgaWYgKCFxdWFsaWZpZXJJbnB1dCkgcmV0dXJuO1xuICAgIGNvbnN0IHNraWxsTmFtZSA9IHF1YWxpZmllcklucHV0LmRhdGFzZXQuc2tpbGw7XG4gICAgY29uc3Qgcm93ID0gcXVhbGlmaWVySW5wdXQuY2xvc2VzdCgndHJbZGF0YS1za2lsbF0nKTtcbiAgICBpZiAoIXNraWxsTmFtZSB8fCAhcm93KSByZXR1cm47XG4gICAgY29uc3QgcHJvZmljaWVuY3kgPSByb3cucXVlcnlTZWxlY3RvcignLnNraWxsLXByb2ZpY2llbmN5LWlucHV0Jyk/LnZhbHVlIHx8ICcnO1xuICAgIGNvbnN0IHN1YnNraWxsc1ZhbHVlID0gcm93LnF1ZXJ5U2VsZWN0b3IoJy5za2lsbC1zdWJza2lsbHMtaW5wdXQnKT8udmFsdWUgfHwgJyc7XG4gICAgY29uc3QgcGFyZW50aGV0aWNhbCA9IHJvdy5xdWVyeVNlbGVjdG9yKCcuc2tpbGwtcGFyZW50aGV0aWNhbC1pbnB1dCcpPy52YWx1ZSB8fCAnJztcbiAgICBzYXZlU2tpbGxRdWFsaWZpZXJPdmVycmlkZShza2lsbE5hbWUsIHtcbiAgICAgIHByb2ZpY2llbmN5LFxuICAgICAgc3Vic2tpbGxzOiBzdWJza2lsbHNWYWx1ZSxcbiAgICAgIHBhcmVudGhldGljYWwsXG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgc2hvd1RvYXN0KCdGYWlsZWQgdG8gc2F2ZSBza2lsbCBxdWFsaWZpZXJzLicsICdlcnJvcicpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBVcGRhdGUgZGVyaXZlZC15ZWFycyBoaW50IGxpdmUgYXMgdXNlciBlZGl0cyB0aGUgZXhwZXJpZW5jZSBtYXRjaCBpbnB1dFxuICBjb250YWluZXIucXVlcnlTZWxlY3RvcignI3NraWxscy1yZXZpZXctdGFibGUgdGJvZHknKT8uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBlID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5za2lsbC1tYXRjaC1pbnB1dCcpO1xuICAgIGlmICghaW5wdXQpIHJldHVybjtcbiAgICBjb25zdCBza2lsbE5hbWUgPSBpbnB1dC5kYXRhc2V0LnNraWxsO1xuICAgIGNvbnN0IGlkcyA9IGlucHV0LnZhbHVlLnNwbGl0KCcsJykubWFwKHggPT4geC50cmltKCkpLmZpbHRlcihCb29sZWFuKTtcbiAgICBjb25zdCB5ZWFycyA9IF9jb21wdXRlWWVhcnNGcm9tSWRzKGlkcywgYWxsRXhwZXJpZW5jZXMpO1xuICAgIGNvbnN0IGhpbnQgPSB5ZWFycyAhPSBudWxsID8gYH4ke3llYXJzfSB5ciR7eWVhcnMgPT09IDEgPyAnJyA6ICdzJ31gIDogJ25vIG1hdGNoJztcbiAgICBjb25zdCBzcGFuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYC5kZXJpdmVkLXllYXJzLWhpbnRbZGF0YS1za2lsbD1cIiR7Q1NTLmVzY2FwZShza2lsbE5hbWUpfVwiXWApO1xuICAgIGlmIChzcGFuKSBzcGFuLnRleHRDb250ZW50ID0gaGludDtcbiAgfSk7XG5cbiAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNza2lsbHMtcmV2aWV3LXRhYmxlIHRib2R5Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XG4gICAgY29uc3QgdHlwZVRvZ2dsZSA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5za2lsbC10eXBlLXRvZ2dsZScpO1xuICAgIGlmICh0eXBlVG9nZ2xlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3Qgc2tpbGxOYW1lID0gdHlwZVRvZ2dsZS5kYXRhc2V0LnNraWxsO1xuICAgICAgY29uc3QgdG9nZ2xlVG8gPSB0eXBlVG9nZ2xlLmRhdGFzZXQudG9nZ2xlVG8gfHwgbnVsbDtcbiAgICAgIHdpbmRvdy5fc2tpbGxUeXBlT3ZlcnJpZGVzID0gd2luZG93Ll9za2lsbFR5cGVPdmVycmlkZXMgfHwge307XG4gICAgICBpZiAodG9nZ2xlVG8pIHtcbiAgICAgICAgd2luZG93Ll9za2lsbFR5cGVPdmVycmlkZXNbc2tpbGxOYW1lLnRvTG93ZXJDYXNlKCldID0gdG9nZ2xlVG87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgd2luZG93Ll9za2lsbFR5cGVPdmVycmlkZXNbc2tpbGxOYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgICAgfVxuICAgICAgc2F2ZVNraWxsUXVhbGlmaWVyT3ZlcnJpZGUoc2tpbGxOYW1lLCB7XG4gICAgICAgIHByb2ZpY2llbmN5OiBjb250YWluZXIucXVlcnlTZWxlY3RvcihgLnNraWxsLXByb2ZpY2llbmN5LWlucHV0W2RhdGEtc2tpbGw9XCIke19jc3NFc2NhcGUoc2tpbGxOYW1lKX1cIl1gKT8udmFsdWUgfHwgJycsXG4gICAgICAgIHN1YnNraWxsczogY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYC5za2lsbC1zdWJza2lsbHMtaW5wdXRbZGF0YS1za2lsbD1cIiR7X2Nzc0VzY2FwZShza2lsbE5hbWUpfVwiXWApPy52YWx1ZSB8fCAnJyxcbiAgICAgICAgcGFyZW50aGV0aWNhbDogY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYC5za2lsbC1wYXJlbnRoZXRpY2FsLWlucHV0W2RhdGEtc2tpbGw9XCIke19jc3NFc2NhcGUoc2tpbGxOYW1lKX1cIl1gKT8udmFsdWUgfHwgJycsXG4gICAgICAgIHNraWxsX3R5cGU6IHRvZ2dsZVRvIHx8ICcnLFxuICAgICAgfSkudGhlbigoKSA9PiBfcmVuZGVyU2tpbGxzVGFibGUoY29udGFpbmVyLCByZWNvbW1lbmRlZFNldCwgZGF0YSwgaGFyZFNraWxsU2V0LCBzb2Z0U2tpbGxTZXQpKVxuICAgICAgICAuY2F0Y2goKCkgPT4gc2hvd1RvYXN0KCdGYWlsZWQgdG8gc2F2ZSBza2lsbCB0eXBlIG92ZXJyaWRlLicsICdlcnJvcicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhaUJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5za2lsbC1hcHBseS1haScpO1xuICAgIGlmIChhaUJ0bikge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IHNraWxsTmFtZSA9IGFpQnRuLmRhdGFzZXQuc2tpbGw7XG4gICAgICBjb25zdCBmaWVsZCA9IGFpQnRuLmRhdGFzZXQuYWlGaWVsZDtcbiAgICAgIGNvbnN0IHZhbHVlID0gYWlCdG4uZGF0YXNldC5haVZhbHVlIHx8ICcnO1xuICAgICAgaWYgKGZpZWxkID09PSAnY2F0ZWdvcnknKSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYC5za2lsbC1jYXRlZ29yeS1pbnB1dFtkYXRhLXNraWxsPVwiJHtfY3NzRXNjYXBlKHNraWxsTmFtZSl9XCJdYCk7XG4gICAgICAgIGlmIChpbnB1dCkgaW5wdXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgc2F2ZVNraWxsQ2F0ZWdvcnlPdmVycmlkZShza2lsbE5hbWUsIHZhbHVlKVxuICAgICAgICAgIC50aGVuKCgpID0+IF9yZW5kZXJTa2lsbHNUYWJsZShjb250YWluZXIsIHJlY29tbWVuZGVkU2V0LCBkYXRhLCBoYXJkU2tpbGxTZXQsIHNvZnRTa2lsbFNldCkpXG4gICAgICAgICAgLmNhdGNoKCgpID0+IHNob3dUb2FzdCgnRmFpbGVkIHRvIGFwcGx5IEFJIGNhdGVnb3J5IHN1Z2dlc3Rpb24uJywgJ2Vycm9yJykpO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZCA9PT0gJ2dyb3VwJykge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAuc2tpbGwtZ3JvdXAtaW5wdXRbZGF0YS1za2lsbD1cIiR7X2Nzc0VzY2FwZShza2lsbE5hbWUpfVwiXWApO1xuICAgICAgICBpZiAoaW5wdXQpIGlucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHNhdmVTa2lsbEdyb3VwT3ZlcnJpZGUoc2tpbGxOYW1lLCB2YWx1ZSlcbiAgICAgICAgICAudGhlbigoKSA9PiBfcmVuZGVyU2tpbGxzVGFibGUoY29udGFpbmVyLCByZWNvbW1lbmRlZFNldCwgZGF0YSwgaGFyZFNraWxsU2V0LCBzb2Z0U2tpbGxTZXQpKVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiBzaG93VG9hc3QoJ0ZhaWxlZCB0byBhcHBseSBBSSBncm91cCBzdWdnZXN0aW9uLicsICdlcnJvcicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgnLmljb24tYnRuJyk7XG4gICAgaWYgKCFidG4pIHJldHVybjtcbiAgICBjb25zdCB0ciA9IGJ0bi5jbG9zZXN0KCd0cltkYXRhLXNraWxsXScpO1xuICAgIGlmICghdHIpIHJldHVybjtcbiAgICBjb25zdCBza2lsbE5hbWUgPSB0ci5kYXRhc2V0LnNraWxsO1xuICAgIGNvbnN0IGFjdGlvbiAgICA9IGJ0bi5kYXRhc2V0LmFjdGlvbjtcbiAgICBpZiAoYWN0aW9uID09PSAncm93LXVwJykge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG1vdmVTa2lsbFJvdyhza2lsbE5hbWUsIC0xKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3Jvdy1kb3duJykge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG1vdmVTa2lsbFJvdyhza2lsbE5hbWUsICsxKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbikge1xuICAgICAgaGFuZGxlQWN0aW9uQ2xpY2soc2tpbGxOYW1lLCBhY3Rpb24sICdza2lsbCcpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5za2lsbC1jYXRlZ29yeS1tYW5hZ2VyJyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XG4gICAgY29uc3QgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgnLmljb24tYnRuW2RhdGEtYWN0aW9uXj1cImNhdGVnb3J5LVwiXScpO1xuICAgIGlmICghYnRuKSByZXR1cm47XG4gICAgY29uc3QgY2F0ZWdvcnlOYW1lID0gYnRuLmRhdGFzZXQuY2F0ZWdvcnkgfHwgJyc7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gYnRuLmRhdGFzZXQuYWN0aW9uID09PSAnY2F0ZWdvcnktdXAnID8gLTEgOiAxO1xuICAgIGNvbnN0IHVwZGF0ZWRPcmRlciA9IF9tb3ZlU2tpbGxDYXRlZ29yeUxvY2FsbHkoY2F0ZWdvcnlOYW1lLCBkaXJlY3Rpb24pO1xuICAgIGlmICghdXBkYXRlZE9yZGVyKSByZXR1cm47XG4gICAgc2F2ZVNraWxsQ2F0ZWdvcnlPcmRlcih1cGRhdGVkT3JkZXIpXG4gICAgICAudGhlbigoKSA9PiBfcmVuZGVyU2tpbGxzVGFibGUoY29udGFpbmVyLCByZWNvbW1lbmRlZFNldCwgZGF0YSwgaGFyZFNraWxsU2V0LCBzb2Z0U2tpbGxTZXQpKVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgX21vdmVTa2lsbENhdGVnb3J5TG9jYWxseShjYXRlZ29yeU5hbWUsIC1kaXJlY3Rpb24pO1xuICAgICAgICBzaG93VG9hc3QoJ0ZhaWxlZCB0byBzYXZlIHNraWxsIGNhdGVnb3J5IG9yZGVyLicsICdlcnJvcicpO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IHNraWxsVG9vbGJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBza2lsbFRvb2xiYXIuY2xhc3NOYW1lID0gJ2J1bGstdG9vbGJhcic7XG4gIHNraWxsVG9vbGJhci5pbm5lckhUTUwgPSBgXG4gICAgPHNwYW4+QnVsazo8L3NwYW4+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ1bGstYnRuIGJ1bGstcmVjb21tZW5kZWRcIiBvbmNsaWNrPVwiYnVsa0FjdGlvbigncmVjb21tZW5kZWQnLCdza2lsbCcpXCIgdGl0bGU9XCJTZXQgYWxsIHRvIHRoZSBMTE0gcmVjb21tZW5kYXRpb25cIj5cdTI3MjggQWNjZXB0IEFsbCBSZWNvbW1lbmRlZDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLWVtcGhhc2l6ZVwiICAgb25jbGljaz1cImJ1bGtBY3Rpb24oJ2VtcGhhc2l6ZScsJ3NraWxsJylcIj5cdTI3OTUgRW1waGFzaXplIEFsbDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLWluY2x1ZGVcIiAgICAgb25jbGljaz1cImJ1bGtBY3Rpb24oJ2luY2x1ZGUnLCdza2lsbCcpXCI+XHUyNzEzIEluY2x1ZGUgQWxsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ1bGstYnRuIGJ1bGstZXhjbHVkZVwiICAgICBvbmNsaWNrPVwiYnVsa0FjdGlvbignZXhjbHVkZScsJ3NraWxsJylcIj4ke2V5ZVNsYXNoSWNvbigpfSBFeGNsdWRlIEFsbDwvYnV0dG9uPlxuICBgO1xuICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKHNraWxsVG9vbGJhciwgY29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuXG4gICQoJyNza2lsbHMtcmV2aWV3LXRhYmxlJykuRGF0YVRhYmxlKHtcbiAgICBwYWdpbmc6IGZhbHNlLFxuICAgIG9yZGVyOiBbXSxcbiAgICBsYW5ndWFnZTogeyBzZWFyY2g6ICdGaWx0ZXIgc2tpbGxzOicgfVxuICB9KTtcbiAgX3VwZGF0ZVBhZ2VFc3RpbWF0ZSgpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgUm93IHJlb3JkZXIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIG1vdmVTa2lsbFJvdyhza2lsbE5hbWUsIGRpcmVjdGlvbikge1xuICBjb25zdCBhcnIgPSB3aW5kb3cuX3NraWxsc09yZGVyZWQ7XG4gIGlmICghYXJyKSByZXR1cm47XG4gIGNvbnN0IGlkeCA9IGFyci5maW5kSW5kZXgocyA9PiAodHlwZW9mIHMgPT09ICdzdHJpbmcnID8gcyA6IHMubmFtZSB8fCBzKSA9PT0gc2tpbGxOYW1lKTtcbiAgaWYgKGlkeCA8IDApIHJldHVybjtcbiAgY29uc3QgbmV3SWR4ID0gaWR4ICsgZGlyZWN0aW9uO1xuICBpZiAobmV3SWR4IDwgMCB8fCBuZXdJZHggPj0gYXJyLmxlbmd0aCkgcmV0dXJuO1xuICBbYXJyW2lkeF0sIGFycltuZXdJZHhdXSA9IFthcnJbbmV3SWR4XSwgYXJyW2lkeF1dO1xuICB3aW5kb3cuX3NraWxsc09yZGVyZWQgPSBhcnI7XG4gIF9yZW5kZXJTa2lsbHNUYWJsZShudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTtcbiAgZmV0Y2goJy9hcGkvcmVvcmRlci1yb3dzJywge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3NraWxsJywgb3JkZXJlZF9pZHM6IGFyci5tYXAocyA9PiAodHlwZW9mIHMgPT09ICdzdHJpbmcnID8gcyA6IHMubmFtZSB8fCBzKSkgfSlcbiAgfSkuY2F0Y2goKCkgPT4ge30pO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgTGVnYWN5IGludGVyYWN0aXZlLW1vZGUgcmVzcG9uc2UgaGFuZGxlciBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlU2tpbGxzUmVzcG9uc2UobWVzc2FnZSkge1xuICB3aW5kb3cud2FpdGluZ0ZvclNraWxsc1Jlc3BvbnNlID0gZmFsc2U7XG4gIGNvbnN0IHJlc3BvbnNlID0gbWVzc2FnZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChyZXNwb25zZS5pbmNsdWRlcygneWVzJykpIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnRXhjZWxsZW50ISBJXFwnbGwgdXNlIHRoaXMgc2tpbGxzIHN0cmF0ZWd5IGluIHlvdXIgQ1YuJyk7XG4gIH0gZWxzZSBpZiAocmVzcG9uc2UuaW5jbHVkZXMoJ25vJykgfHwgcmVzcG9uc2UuaW5jbHVkZXMoJ21vZGlmeScpKSB7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ0kgdW5kZXJzdGFuZC4gV2hhdCBjaGFuZ2VzIHdvdWxkIHlvdSBsaWtlIG1lIHRvIG1ha2UgdG8gdGhlIHNraWxscyBlbXBoYXNpcz8nKTtcbiAgfSBlbHNlIHtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnSVxcJ2xsIG5vdGUgeW91ciBmZWVkYmFjayBvbiB0aGUgc2tpbGxzIHN0cmF0ZWd5LicpO1xuICB9XG5cbiAgZmluaXNoSW50ZXJhY3RpdmVSZXZpZXcoKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFN1Ym1pdCBkZWNpc2lvbnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFNraWxsRGVjaXNpb25zKCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogc2tpbGxzX3VpX3N1Ym1pdF9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTAzLTI1VDIxOjM5OjQ4WidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6c2tpbGxzLXJldmlldy5zdWJtaXRcbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zXG4gICAqICAgLSBQT1NUIC9hcGkvY3YvbGF5b3V0LWVzdGltYXRlXG4gICAqICAgcmVhZHM6XG4gICAqICAgLSB3aW5kb3c6dXNlclNlbGVjdGlvbnMuc2tpbGxzXG4gICAqICAgLSB3aW5kb3c6X3NraWxsc09yZGVyZWRcbiAgICogICAtIGRvbTouc2tpbGwtbWF0Y2gtaW5wdXQudmFsdWVcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zLmRlY2lzaW9uc1xuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9ucy5leHRyYV9za2lsbHNcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL3Jldmlldy1kZWNpc2lvbnMuZXh0cmFfc2tpbGxfbWF0Y2hlc1xuICAgKiAgIC0gd2luZG93Ol9zYXZlZERlY2lzaW9ucy5za2lsbF9kZWNpc2lvbnNcbiAgICogICAtIHdpbmRvdzpfc2F2ZWREZWNpc2lvbnMuZXh0cmFfc2tpbGxzXG4gICAqICAgLSB3aW5kb3c6X3NhdmVkRGVjaXNpb25zLmV4dHJhX3NraWxsX21hdGNoZXNcbiAgICogICBub3RlczogU3VibWl0cyBza2lsbCBpbmNsdXNpb24gZGVjaXNpb25zIHRvZ2V0aGVyIHdpdGggc2Vzc2lvbi1vbmx5IGV4dHJhIHNraWxscyBhbmQgZXhwZXJpZW5jZS1tYXRjaCBldmlkZW5jZSBzbyBiYWNrZW5kIGdlbmVyYXRpb24gY2FuIG1hdGVyaWFsaXplIHRoZSBzYW1lIG92ZXJsYXkgc3RhdGUuXG4gICAqL1xuICBjb25zdCBkZWNpc2lvbnMgPSB1c2VyU2VsZWN0aW9ucy5za2lsbHM7XG4gIGNvbnN0IGNvdW50ID0gT2JqZWN0LmtleXMoZGVjaXNpb25zKS5sZW5ndGg7XG5cbiAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ05vIFNlbGVjdGlvbnMnLCAnUGxlYXNlIHNlbGVjdCBhY3Rpb25zIGZvciBhdCBsZWFzdCBvbmUgc2tpbGwgYmVmb3JlIHN1Ym1pdHRpbmcuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBleHRyYVNraWxscyA9ICh3aW5kb3cuX3NraWxsc09yZGVyZWQgfHwgW10pXG4gICAgICAuZmlsdGVyKHNraWxsID0+IHNraWxsICYmIHR5cGVvZiBza2lsbCA9PT0gJ29iamVjdCcgJiYgc2tpbGwuX2lzTmV3KVxuICAgICAgLmZpbHRlcihza2lsbCA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGRlY2lzaW9uc1tfc2tpbGxOYW1lKHNraWxsKV07XG4gICAgICAgIHJldHVybiBhY3Rpb24gPT09ICdpbmNsdWRlJyB8fCBhY3Rpb24gPT09ICdlbXBoYXNpemUnIHx8IGFjdGlvbiA9PT0gJ2RlLWVtcGhhc2l6ZSc7XG4gICAgICB9KVxuICAgICAgLm1hcChza2lsbCA9PiB7XG4gICAgICAgIGlmIChza2lsbC5faXNVc2VyQ3JlYXRlZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBfc2tpbGxOYW1lKHNraWxsKSxcbiAgICAgICAgICAgIGNhdGVnb3J5OiBTdHJpbmcoc2tpbGwuY2F0ZWdvcnkgfHwgJycpLnRyaW0oKSxcbiAgICAgICAgICAgIGdyb3VwOiBTdHJpbmcoc2tpbGwuZ3JvdXAgfHwgJycpLnRyaW0oKSxcbiAgICAgICAgICAgIHByb2ZpY2llbmN5OiBTdHJpbmcoc2tpbGwucHJvZmljaWVuY3kgfHwgJycpLnRyaW0oKSxcbiAgICAgICAgICAgIHN1YnNraWxsczogX25vcm1hbGl6ZVNraWxsU3Vic2tpbGxzKHNraWxsLnN1YnNraWxscyB8fCBza2lsbC5zdWJfc2tpbGxzIHx8IFtdKSxcbiAgICAgICAgICAgIHBhcmVudGhldGljYWw6IFN0cmluZyhza2lsbC5wYXJlbnRoZXRpY2FsIHx8ICcnKS50cmltKCksXG4gICAgICAgICAgICB1c2VyX2NyZWF0ZWQ6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3NraWxsTmFtZShza2lsbCk7XG4gICAgICB9KTtcbiAgICBjb25zdCBleHRyYVNraWxsTmFtZXMgPSBleHRyYVNraWxscy5tYXAoc2tpbGwgPT4gdHlwZW9mIHNraWxsID09PSAnc3RyaW5nJyA/IHNraWxsIDogc2tpbGwubmFtZSk7XG5cbiAgICBjb25zdCBtYXRjaElucHV0cyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnNraWxsLW1hdGNoLWlucHV0JykpO1xuICAgIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0KCh3aW5kb3cuX2FsbEV4cGVyaWVuY2VzIHx8IFtdKS5tYXAoZSA9PiBlLmlkKS5maWx0ZXIoQm9vbGVhbikpO1xuICAgIGNvbnN0IGV4dHJhU2tpbGxNYXRjaGVzID0ge307XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBtYXRjaElucHV0cykge1xuICAgICAgY29uc3Qgc2tpbGxOYW1lID0gaW5wdXQuZGF0YXNldC5za2lsbDtcbiAgICAgIGlmICghc2tpbGxOYW1lIHx8ICFleHRyYVNraWxsTmFtZXMuaW5jbHVkZXMoc2tpbGxOYW1lKSkgY29udGludWU7XG4gICAgICBjb25zdCBpZHMgPSBTdHJpbmcoaW5wdXQudmFsdWUgfHwgJycpXG4gICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgIC5tYXAoKHgpID0+IHgudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKCh4KSA9PiB4ICYmIGFsbG93ZWQuaGFzKHgpKTtcbiAgICAgIGlmIChpZHMubGVuZ3RoID4gMCkgZXh0cmFTa2lsbE1hdGNoZXNbc2tpbGxOYW1lXSA9IGlkcztcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL3Jldmlldy1kZWNpc2lvbnMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB0eXBlOiAnc2tpbGxzJyxcbiAgICAgICAgZGVjaXNpb25zOiBkZWNpc2lvbnMsXG4gICAgICAgIGV4dHJhX3NraWxsczogZXh0cmFTa2lsbHMsXG4gICAgICAgIGV4dHJhX3NraWxsX21hdGNoZXM6IGV4dHJhU2tpbGxNYXRjaGVzLFxuICAgICAgfSlcbiAgICB9KTtcblxuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgc3RhdGVNYW5hZ2VyLm1hcmtDb250ZW50Q2hhbmdlZCgpO1xuICAgICAgY29uc3QgZXh0cmFOb3RlID0gZXh0cmFTa2lsbHMubGVuZ3RoID4gMFxuICAgICAgICA/IGAgKCR7ZXh0cmFTa2lsbHMubGVuZ3RofSBuZXcgc2tpbGwocykgYWRkZWQgXHUyMDE0IGF2YWlsYWJsZSBmb3Igd3JpdGUtYmFjayB0byBtYXN0ZXIgQ1YgaW4gdGhlIEhhcnZlc3QgdGFiKWBcbiAgICAgICAgOiAnJztcbiAgICAgIHNob3dUb2FzdChgU2tpbGwgZGVjaXNpb25zIHNhdmVkICgke2NvdW50fSBpdGVtcykke2V4dHJhTm90ZX1gKTtcbiAgICAgIHNjaGVkdWxlQXRzUmVmcmVzaCgpO1xuICAgICAgLy8gUGVyc2lzdCBzYXZlZCBkZWNpc2lvbnMgbG9jYWxseSBzbyB0aGUgVUkgcmVmbGVjdHMgdGhlbSBpbW1lZGlhdGVseVxuICAgICAgd2luZG93Ll9zYXZlZERlY2lzaW9ucyA9IHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMgfHwge307XG4gICAgICB3aW5kb3cuX3NhdmVkRGVjaXNpb25zLnNraWxsX2RlY2lzaW9ucyA9IGRlY2lzaW9ucztcbiAgICAgIGlmICghd2luZG93Ll9zYXZlZERlY2lzaW9ucy5leHRyYV9za2lsbHMpIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMuZXh0cmFfc2tpbGxzID0gW107XG4gICAgICBpZiAoZXh0cmFTa2lsbHMubGVuZ3RoID4gMCkgd2luZG93Ll9zYXZlZERlY2lzaW9ucy5leHRyYV9za2lsbHMgPSBleHRyYVNraWxscztcbiAgICAgIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMuZXh0cmFfc2tpbGxfbWF0Y2hlcyA9IGV4dHJhU2tpbGxNYXRjaGVzO1xuICAgICAgdXNlclNlbGVjdGlvbnMuc2tpbGxzID0geyAuLi5kZWNpc2lvbnMgfTtcbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlSW5jbHVzaW9uQ291bnRzID09PSAnZnVuY3Rpb24nKSB1cGRhdGVJbmNsdXNpb25Db3VudHMoKTtcbiAgICAgIHN3aXRjaFRhYignYWNoaWV2ZW1lbnRzLXJldmlldycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIHNob3dUb2FzdChgRXJyb3I6ICR7ZXJyb3IuZXJyb3IgfHwgJ0ZhaWxlZCB0byBzYXZlIGRlY2lzaW9ucyd9YCwgJ2Vycm9yJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcignRXJyb3Igc3VibWl0dGluZyBza2lsbCBkZWNpc2lvbnM6JywgZXJyb3IpO1xuICAgIHNob3dUb2FzdCgnRmFpbGVkIHRvIHNhdmUgZGVjaXNpb25zLiBQbGVhc2UgdHJ5IGFnYWluLicsICdlcnJvcicpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFeHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQge1xuICBfcGFyc2VZZWFyRnJvbVN0cixcbiAgX2NvbXB1dGVZZWFyc0Zyb21JZHMsXG4gIHNhdmVTa2lsbEdyb3VwT3ZlcnJpZGUsXG4gIHNhdmVTa2lsbENhdGVnb3J5T3ZlcnJpZGUsXG4gIHJlbmFtZVNraWxsQ2F0ZWdvcnksXG4gIHNhdmVTa2lsbENhdGVnb3J5T3JkZXIsXG4gIHNhdmVTa2lsbFF1YWxpZmllck92ZXJyaWRlLFxuICBzYXZlVXNlckNyZWF0ZWRTa2lsbCxcbiAgYnVpbGRTa2lsbHNSZXZpZXdUYWJsZSxcbiAgX3JlbmRlclNraWxsc1RhYmxlLFxuICBtb3ZlU2tpbGxSb3csXG4gIGhhbmRsZVNraWxsc1Jlc3BvbnNlLFxuICBzdWJtaXRTa2lsbERlY2lzaW9ucyxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIGFjaGlldmVtZW50cy1yZXZpZXcuanNcbiAqIEVTIG1vZHVsZSBcdTIwMTQgQWNoaWV2ZW1lbnRzIHJldmlldyB0YWJsZSwgYWNoaWV2ZW1lbnRzIGVkaXRvciwgYW5kIEFJIHJld3JpdGUgbW9kYWwuXG4gKlxuICogRGVwZW5kZW5jaWVzIHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lOlxuICogICAtIHBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgICAgICAgICh3aW5kb3cpXG4gKiAgIC0gYWNoaWV2ZW1lbnREZWNpc2lvbnMgICAgICAgICAgKHdpbmRvdyBcdTIwMTQgYWxzbyBpbml0aWFsaXNlZCBoZXJlKVxuICogICAtIF9hY2hpZXZlbWVudHNPcmRlcmVkICAgICAgICAgICh3aW5kb3cgXHUyMDE0IGFsc28gaW5pdGlhbGlzZWQgaGVyZSlcbiAqICAgLSBfc3VnZ2VzdGVkQWNoc09yZGVyZWQgICAgICAgICAod2luZG93KVxuICogICAtIF9zYXZlZERlY2lzaW9ucyAgICAgICAgICAgICAgICh3aW5kb3cpXG4gKiAgIC0gYWNoaWV2ZW1lbnRFZGl0cyAgICAgICAgICAgICAgKHdpbmRvdylcbiAqICAgLSB1c2VyU2VsZWN0aW9ucyAgICAgICAgICAgICAgICAod2luZG93KVxuICogICAtIGdldEFjaGlldmVtZW50UmVjb21tZW5kYXRpb24gIChnbG9iYWxUaGlzIGZ1bmN0aW9uKVxuICogICAtIGdldEFjaGlldmVtZW50Q29uZmlkZW5jZSAgICAgIChnbG9iYWxUaGlzIGZ1bmN0aW9uKVxuICogICAtIGdldEFjaGlldmVtZW50UmVhc29uaW5nICAgICAgIChnbG9iYWxUaGlzIGZ1bmN0aW9uKVxuICogICAtIGVzY2FwZUh0bWwgICAgICAgICAgICAgICAgICAgIChnbG9iYWxUaGlzIGZ1bmN0aW9uKVxuICogICAtIGhhbmRsZUFjaGlldmVtZW50QWN0aW9uICAgICAgIChnbG9iYWxUaGlzIC8gdGhpcyBtb2R1bGUpXG4gKiAgIC0gYnVsa0FjaGlldmVtZW50QWN0aW9uICAgICAgICAgKGdsb2JhbFRoaXMgLyB0aGlzIG1vZHVsZSlcbiAqICAgLSBtb3ZlQWNoaWV2ZW1lbnRSb3cgICAgICAgICAgICAoZ2xvYmFsVGhpcyAvIHRoaXMgbW9kdWxlKVxuICogICAtIG1vdmVTdWdnZXN0ZWRBY2hpZXZlbWVudFJvdyAgIChnbG9iYWxUaGlzIC8gdGhpcyBtb2R1bGUpXG4gKiAgIC0gc2F2ZVRvcExldmVsQWNoaWV2ZW1lbnRGaWVsZCAgKGdsb2JhbFRoaXMgLyB0aGlzIG1vZHVsZSlcbiAqICAgLSBzYXZlU3VnZ2VzdGVkQWNoaWV2ZW1lbnRGaWVsZCAoZ2xvYmFsVGhpcyAvIHRoaXMgbW9kdWxlKVxuICogICAtIGFpUmV3cml0ZVRvcExldmVsQWNoaWV2ZW1lbnQgIChnbG9iYWxUaGlzIC8gdGhpcyBtb2R1bGUpXG4gKiAgIC0gYWlSZXdyaXRlU3VnZ2VzdGVkQWNoaWV2ZW1lbnQgKGdsb2JhbFRoaXMgLyB0aGlzIG1vZHVsZSlcbiAqICAgLSBkZWxldGVUb3BMZXZlbEFjaGlldmVtZW50ICAgICAoZ2xvYmFsVGhpcyAvIHRoaXMgbW9kdWxlKVxuICogICAtIGRlbGV0ZVN1Z2dlc3RlZEFjaGlldmVtZW50ICAgIChnbG9iYWxUaGlzIC8gdGhpcyBtb2R1bGUpXG4gKiAgIC0gc2hvd1RvYXN0ICAgICAgICAgICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gc2NoZWR1bGVBdHNSZWZyZXNoICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gdXBkYXRlSW5jbHVzaW9uQ291bnRzICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gc3dpdGNoVGFiICAgICAgICAgICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gY29uZmlybURpYWxvZyAgICAgICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gY2xvc2VBbGVydE1vZGFsICAgICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gc2V0SW5pdGlhbEZvY3VzICAgICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gdHJhcEZvY3VzICAgICAgICAgICAgICAgICAgICAgKGdsb2JhbFRoaXMgZnVuY3Rpb24pXG4gKiAgIC0gX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgICAgKGdsb2JhbFRoaXMpXG4gKiAgIC0gQ1NTLmVzY2FwZSAgICAgICAgICAgICAgICAgICAgKGJyb3dzZXIgYnVpbHQtaW4pXG4gKi9cblxuaW1wb3J0IHsgc3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi9zdGF0ZS1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IGV5ZVNsYXNoSWNvbiB9IGZyb20gJy4vcmV2aWV3LWljb25zLmpzJztcblxuLy8gTW9kdWxlLWxldmVsIHN0YXRlXG5sZXQgX3Jld3JpdGVTdWdnZXN0aW9uSGlzdG9yeSA9IFtdO1xubGV0IF9sYXN0UmV3cml0ZUxvZ0lkID0gbnVsbDtcbi8vIENhbGxiYWNrcyBmb3IgdGhlIGFjdGl2ZSByZXdyaXRlIG1vZGFsOiB7IGV4cGVyaWVuY2VJbmRleCwgb25BY2NlcHQgfVxubGV0IF9yZXdyaXRlQ2FsbGJhY2tzID0gbnVsbDtcbi8vIFRyYWNrcyBhY2hpZXZlbWVudHMgdGhhdCBhcmUgbmV3bHkgcmVjb21tZW5kZWQgc2luY2UgdGhlIHByZXZpb3VzIHJlbmRlciAoZm9yIFx1RDgzQ1x1REQ5NSBiYWRnZXMpXG5sZXQgX25ld1JlY29tbWVuZGVkQWNocyA9IG5ldyBTZXQoKTtcblxuZnVuY3Rpb24gX25vcm1hbGl6ZUFjaGlldmVtZW50RWRpdEVudHJ5KGVudHJ5KSB7XG4gIGlmIChlbnRyeSAmJiB0eXBlb2YgZW50cnkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGVudHJ5KSkge1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0OiBTdHJpbmcoZW50cnkudGV4dCA/PyBlbnRyeS5kZXNjcmlwdGlvbiA/PyBlbnRyeS5jb250ZW50ID8/ICcnKSxcbiAgICAgIGhpZGRlbjogQm9vbGVhbihlbnRyeS5oaWRkZW4pLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiBTdHJpbmcoZW50cnkgPz8gJycpLFxuICAgIGhpZGRlbjogZmFsc2UsXG4gIH07XG59XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVBY2hpZXZlbWVudEVkaXRMaXN0KGVudHJpZXMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGVudHJpZXMpKSByZXR1cm4gW107XG4gIHJldHVybiBlbnRyaWVzLm1hcChfbm9ybWFsaXplQWNoaWV2ZW1lbnRFZGl0RW50cnkpO1xufVxuXG5mdW5jdGlvbiBfYWNoaWV2ZW1lbnRFbnRyeVRleHQoZW50cnkpIHtcbiAgcmV0dXJuIF9ub3JtYWxpemVBY2hpZXZlbWVudEVkaXRFbnRyeShlbnRyeSkudGV4dDtcbn1cblxuZnVuY3Rpb24gX2FjaGlldmVtZW50RW50cnlIaWRkZW4oZW50cnkpIHtcbiAgcmV0dXJuIF9ub3JtYWxpemVBY2hpZXZlbWVudEVkaXRFbnRyeShlbnRyeSkuaGlkZGVuO1xufVxuXG53aW5kb3cuYWNoaWV2ZW1lbnREZWNpc2lvbnMgPSB7fTtcbndpbmRvdy5fYWNoaWV2ZW1lbnRzT3JkZXJlZCA9IG51bGw7XG5cbi8vIFNtYWxsIGZldGNoIGhlbHBlciB3aXRoIHRpbWVvdXQgdG8gYXZvaWQgbGVhdmluZyBsb2FkZXJzIHZpc2libGUgb24gaGFuZ2luZyByZXF1ZXN0c1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hKc29uV2l0aFRpbWVvdXQodXJsLCBvcHRzID0ge30sIHRpbWVvdXQgPSA3MDAwKSB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHNpZ25hbCA9IGNvbnRyb2xsZXIuc2lnbmFsO1xuICBjb25zdCBpZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aW1lb3V0KTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHsgc2lnbmFsIH0pKTtcbiAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgIHJldHVybiByZXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hY2hTbmFwc2hvdEtleSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzaWQgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgnc2Vzc2lvbicpO1xuICAgIHJldHVybiBzaWQgPyBgYWNoX3NuYXBfJHtzaWR9YCA6IG51bGw7XG4gIH0gY2F0Y2ggKF8pIHsgcmV0dXJuIG51bGw7IH1cbn1cbmZ1bmN0aW9uIF9zYXZlQWNoU25hcHNob3QocmVjb21tZW5kZWRJZHMpIHtcbiAgY29uc3Qga2V5ID0gX2FjaFNuYXBzaG90S2V5KCk7XG4gIGlmICgha2V5KSByZXR1cm47XG4gIHRyeSB7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkoWy4uLnJlY29tbWVuZGVkSWRzXSkpOyB9IGNhdGNoIChfKSB7fVxufVxuZnVuY3Rpb24gX2dldEFjaFNuYXBzaG90KCkge1xuICBjb25zdCBrZXkgPSBfYWNoU25hcHNob3RLZXkoKTtcbiAgaWYgKCFrZXkpIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgcmV0dXJuIHJhdyA/IG5ldyBTZXQoSlNPTi5wYXJzZShyYXcpKSA6IG51bGw7XG4gIH0gY2F0Y2ggKF8pIHsgcmV0dXJuIG51bGw7IH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRBY2hpZXZlbWVudHNSZXZpZXdUYWJsZSgpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaGlldmVtZW50cy10YWJsZS1jb250YWluZXInKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O3BhZGRpbmc6MjBweDtjb2xvcjojNmI3MjgwO1wiPjxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyLXdpZHRoOjJweDtmbGV4LXNocmluazowO1wiPjwvZGl2PjxzcGFuPkxvYWRpbmcgYWNoaWV2ZW1lbnRzXHUyMDI2PC9zcGFuPjwvZGl2Pic7XG5cbiAgLy8gUHJlZmVyIHNlc3Npb24tYXdhcmUgc3RhdHVzIGRhdGEgc28gcmV2aWV3LXRpbWUgb3ZlcmxheXMgYXJlIHJlZmxlY3RlZC5cbiAgbGV0IGFsbEFjaGlldmVtZW50cyA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoSnNvbldpdGhUaW1lb3V0KCcvYXBpL3N0YXR1cycsIHt9LCA3MDAwKTtcbiAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKCdzdGF0dXMgbm90IG9rJyk7XG4gICAgY29uc3Qgc3RhdHVzRGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgYWxsQWNoaWV2ZW1lbnRzID0gc3RhdHVzRGF0YS5hbGxfYWNoaWV2ZW1lbnRzIHx8IFtdO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBTZWNvbmRhcnkgZmFsbGJhY2s6IHJhdyBtYXN0ZXIgZmllbGRzLlxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMyID0gYXdhaXQgZmV0Y2hKc29uV2l0aFRpbWVvdXQoJy9hcGkvbWFzdGVyLWZpZWxkcycsIHt9LCA3MDAwKTtcbiAgICAgIGlmICghcmVzMi5vaykgdGhyb3cgbmV3IEVycm9yKCdtYXN0ZXItZmllbGRzIG5vdCBvaycpO1xuICAgICAgY29uc3QgbWFzdGVyRGF0YSA9IGF3YWl0IHJlczIuanNvbigpO1xuICAgICAgYWxsQWNoaWV2ZW1lbnRzID0gbWFzdGVyRGF0YS5zZWxlY3RlZF9hY2hpZXZlbWVudHMgfHwgW107XG4gICAgfSBjYXRjaCAoZXJyMikge1xuICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7cGFkZGluZzoyMHB4O1wiPkZhaWxlZCB0byBsb2FkIGFjaGlldmVtZW50cy48L3A+JztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoYWxsQWNoaWV2ZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJwYWRkaW5nOjIwcHg7Y29sb3I6IzZiNzI4MDtcIj5ObyBrZXkgYWNoaWV2ZW1lbnRzIGZvdW5kIGluIG1hc3RlciBDViBkYXRhLjwvcD4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFdyYXAgaW5pdGlhbGlzYXRpb24gKyByZW5kZXIgc28gYW4gdW5leHBlY3RlZCBleGNlcHRpb24gcmVwbGFjZXMgdGhlXG4gIC8vIHNwaW5uZXIgaW5zdGVhZCBvZiBsZWF2aW5nIGl0IGZyb3plbiBpbmRlZmluaXRlbHkuXG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IHdpbmRvdy5wZW5kaW5nUmVjb21tZW5kYXRpb25zIHx8IHt9O1xuICAgIGNvbnN0IHJlY29tbWVuZGVkU2V0ID0gbmV3IFNldChkYXRhLnJlY29tbWVuZGVkX2FjaGlldmVtZW50cyB8fCBbXSk7XG5cbiAgICAvLyBTb3J0OiByZWNvbW1lbmRlZCBmaXJzdCwgdGhlbiBieSBpbXBvcnRhbmNlIGRlc2NlbmRpbmcgKG9ubHkgb24gZmlyc3QgbG9hZClcbiAgICBpZiAoIXdpbmRvdy5fYWNoaWV2ZW1lbnRzT3JkZXJlZCkge1xuICAgICAgYWxsQWNoaWV2ZW1lbnRzID0gWy4uLmFsbEFjaGlldmVtZW50c10uc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBhUmVjID0gcmVjb21tZW5kZWRTZXQuaGFzKGEuaWQpID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IGJSZWMgPSByZWNvbW1lbmRlZFNldC5oYXMoYi5pZCkgPyAxIDogMDtcbiAgICAgICAgaWYgKGJSZWMgIT09IGFSZWMpIHJldHVybiBiUmVjIC0gYVJlYztcbiAgICAgICAgcmV0dXJuIChiLmltcG9ydGFuY2UgfHwgMCkgLSAoYS5pbXBvcnRhbmNlIHx8IDApO1xuICAgICAgfSk7XG4gICAgICB3aW5kb3cuX2FjaGlldmVtZW50c09yZGVyZWQgPSBhbGxBY2hpZXZlbWVudHM7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGlzZSBkZWNpc2lvbnNcbiAgICB3aW5kb3cuYWNoaWV2ZW1lbnREZWNpc2lvbnMgPSB7fTtcbiAgICB3aW5kb3cuX2FjaGlldmVtZW50c09yZGVyZWQuZm9yRWFjaChhY2ggPT4ge1xuICAgICAgY29uc3QgcmVjID0gZ2V0QWNoaWV2ZW1lbnRSZWNvbW1lbmRhdGlvbihhY2guaWQsIGRhdGEpO1xuICAgICAgbGV0IGRlZmF1bHRBY3Rpb24gPSAnaW5jbHVkZSc7XG4gICAgICBpZiAocmVjID09PSAnRW1waGFzaXplJykgICAgICAgICBkZWZhdWx0QWN0aW9uID0gJ2VtcGhhc2l6ZSc7XG4gICAgICBlbHNlIGlmIChyZWMgPT09ICdJbmNsdWRlJykgICAgICBkZWZhdWx0QWN0aW9uID0gJ2luY2x1ZGUnO1xuICAgICAgZWxzZSBpZiAocmVjID09PSAnRGUtZW1waGFzaXplJykgZGVmYXVsdEFjdGlvbiA9ICdkZS1lbXBoYXNpemUnO1xuICAgICAgZWxzZSBpZiAocmVjID09PSAnT21pdCcpICAgICAgICAgZGVmYXVsdEFjdGlvbiA9ICdleGNsdWRlJztcbiAgICAgIHdpbmRvdy5hY2hpZXZlbWVudERlY2lzaW9uc1thY2guaWRdID0gZGVmYXVsdEFjdGlvbjtcbiAgICB9KTtcbiAgICAvLyBBcHBseSBhbnkgcHJldmlvdXNseSBzYXZlZCB1c2VyIGRlY2lzaW9ucyBvdmVyIHRoZSBMTE0gZGVmYXVsdHNcbiAgICBjb25zdCBzYXZlZEFjaERlY3MgPSB3aW5kb3cuX3NhdmVkRGVjaXNpb25zPy5hY2hpZXZlbWVudF9kZWNpc2lvbnMgfHwge307XG4gICAgaWYgKE9iamVjdC5rZXlzKHNhdmVkQWNoRGVjcykubGVuZ3RoID4gMCkgT2JqZWN0LmFzc2lnbih3aW5kb3cuYWNoaWV2ZW1lbnREZWNpc2lvbnMsIHNhdmVkQWNoRGVjcyk7XG5cbiAgICAvLyBBbHNvIGhhbmRsZSBBSS1zdWdnZXN0ZWQgYWNoaWV2ZW1lbnRzIFx1MjAxNCBhc3NpZ24gc3RhYmxlIElEcyBvbmNlIG9uIGZpcnN0IGxvYWRcbiAgICAvLyBzbyB0aGF0IHJlb3JkZXIgLyBkZWxldGUgb3BlcmF0aW9ucyBuZXZlciBuZWVkIHRvIHJlbWFwIGRlY2lzaW9uIGtleXMuXG4gICAgaWYgKCF3aW5kb3cuX3N1Z2dlc3RlZEFjaHNPcmRlcmVkKSB7XG4gICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICB3aW5kb3cuX3N1Z2dlc3RlZEFjaHNPcmRlcmVkID0gKGRhdGEuc3VnZ2VzdGVkX2FjaGlldmVtZW50cyB8fCBbXSkubWFwKHMgPT4ge1xuICAgICAgICBjb25zdCBpdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgcyk7XG4gICAgICAgIGl0ZW0uX3N1Z2dJZCA9IGBzdWdnOjoke2NvdW50ZXIrK31gO1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB3aW5kb3cuX3N1Z2dlc3RlZEFjaHNPcmRlcmVkLmZvckVhY2gocyA9PiB7XG4gICAgICBpZiAoIShzLl9zdWdnSWQgaW4gd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zKSkgd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zW3MuX3N1Z2dJZF0gPSAnaW5jbHVkZSc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcmV2QWNoU25hcCA9IF9nZXRBY2hTbmFwc2hvdCgpO1xuICAgIF9uZXdSZWNvbW1lbmRlZEFjaHMgPSBwcmV2QWNoU25hcFxuICAgICAgPyBuZXcgU2V0KFsuLi5yZWNvbW1lbmRlZFNldF0uZmlsdGVyKGlkID0+ICFwcmV2QWNoU25hcC5oYXMoaWQpKSlcbiAgICAgIDogbmV3IFNldCgpO1xuICAgIF9zYXZlQWNoU25hcHNob3QocmVjb21tZW5kZWRTZXQpO1xuXG4gICAgX3JlbmRlckFjaGlldmVtZW50c1Jldmlld1RhYmxlKGNvbnRhaW5lcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlICovXG4gICAgY29uc29sZS5lcnJvcignYnVpbGRBY2hpZXZlbWVudHNSZXZpZXdUYWJsZTogcmVuZGVyIGVycm9yOicsIGVycik7XG4gICAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7cGFkZGluZzoyMHB4O1wiPkVycm9yIHJlbmRlcmluZyBhY2hpZXZlbWVudHMgdGFibGUuIFBsZWFzZSByZWxvYWQgYW5kIHRyeSBhZ2Fpbi48L3A+JztcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVuZGVyQWNoaWV2ZW1lbnRzUmV2aWV3VGFibGUoY29udGFpbmVyKSB7XG4gIGlmICghY29udGFpbmVyKSBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoaWV2ZW1lbnRzLXRhYmxlLWNvbnRhaW5lcicpO1xuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuXG4gIGNvbnN0IGRhdGEgPSB3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucyB8fCB7fTtcbiAgY29uc3Qgb3JkZXJlZEFjaHMgID0gd2luZG93Ll9hY2hpZXZlbWVudHNPcmRlcmVkIHx8IFtdO1xuICBjb25zdCBzdWdnZXN0ZWRBY2hzID0gd2luZG93Ll9zdWdnZXN0ZWRBY2hzT3JkZXJlZCB8fCBbXTtcblxuICAvLyBCdWlsZCBmaWx0ZXIgKyB0YWJsZSBIVE1MXG4gIGxldCBodG1sID0gYFxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjEycHg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiYWNoLXJldmlldy1maWx0ZXJcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBhY2hpZXZlbWVudHNcdTIwMjZcIlxuICAgICAgICBvbmlucHV0PVwiX2ZpbHRlckFjaGlldmVtZW50c1RhYmxlKHRoaXMudmFsdWUpXCJcbiAgICAgICAgc3R5bGU9XCJmbGV4OjE7cGFkZGluZzo2cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjAuOWVtO1wiPlxuICAgICAgPHNwYW4gaWQ9XCJhY2gtcmV2aWV3LWNvdW50XCIgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOiM2YjcyODA7d2hpdGUtc3BhY2U6bm93cmFwO1wiPiR7b3JkZXJlZEFjaHMubGVuZ3RoICsgc3VnZ2VzdGVkQWNocy5sZW5ndGh9IGFjaGlldmVtZW50czwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8dGFibGUgaWQ9XCJhY2hpZXZlbWVudHMtcmV2aWV3LXRhYmxlXCIgY2xhc3M9XCJyZXZpZXctdGFibGVcIiBzdHlsZT1cIndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO1wiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoPkFjaGlldmVtZW50PC90aD5cbiAgICAgICAgICA8dGg+UmVjb21tZW5kYXRpb248L3RoPlxuICAgICAgICAgIDx0aD5Db25maWRlbmNlPC90aD5cbiAgICAgICAgICA8dGg+UmVhc29uaW5nPC90aD5cbiAgICAgICAgICA8dGg+U2VsZWN0aW9uPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gIGA7XG5cbiAgb3JkZXJlZEFjaHMuZm9yRWFjaCgoYWNoLCByb3dJZHgpID0+IHtcbiAgICBjb25zdCBpZCAgICAgICAgICAgICA9IGFjaC5pZCB8fCBhY2gudGl0bGUgfHwgJyc7XG4gICAgY29uc3QgdGl0bGUgICAgICAgICAgPSBhY2gudGl0bGUgfHwgaWQ7XG4gICAgY29uc3QgZGVzYyAgICAgICAgICAgPSBhY2guZGVzY3JpcHRpb24gfHwgJyc7XG4gICAgY29uc3QgcmVjb21tZW5kYXRpb24gPSBnZXRBY2hpZXZlbWVudFJlY29tbWVuZGF0aW9uKGlkLCBkYXRhKTtcbiAgICBjb25zdCBjb25maWRlbmNlICAgICA9IGdldEFjaGlldmVtZW50Q29uZmlkZW5jZShpZCwgZGF0YSwgYWNoLmltcG9ydGFuY2UpO1xuICAgIGNvbnN0IHJlYXNvbmluZyAgICAgID0gZ2V0QWNoaWV2ZW1lbnRSZWFzb25pbmcoaWQsIGRhdGEsIGFjaCk7XG4gICAgY29uc3QgZGVmYXVsdEFjdGlvbiAgPSB3aW5kb3cuYWNoaWV2ZW1lbnREZWNpc2lvbnNbaWRdIHx8ICdpbmNsdWRlJztcbiAgICBjb25zdCBjb25maWRlbmNlQmFkZ2UgPSBgPHNwYW4gY2xhc3M9XCJjb25maWRlbmNlLWJhZGdlIGNvbmZpZGVuY2UtJHtjb25maWRlbmNlLmxldmVsfVwiPiR7Y29uZmlkZW5jZS50ZXh0fTwvc3Bhbj5gO1xuICAgIGNvbnN0IHJlcnVuTmV3QmFkZ2UgPSBfbmV3UmVjb21tZW5kZWRBY2hzLmhhcyhpZClcbiAgICAgID8gJzxzcGFuIGNsYXNzPVwicnctY2hhbmdlLWJhZGdlIHJ3LWNoYW5nZS1uZXdcIiBhcmlhLWxhYmVsPVwiTmV3IHJlY29tbWVuZGF0aW9uIHNpbmNlIHByZXZpb3VzIHJ1blwiPlx1RDgzQ1x1REQ5NSBOZXc8L3NwYW4+J1xuICAgICAgOiAnJztcbiAgICBjb25zdCBpc0ZpcnN0ID0gcm93SWR4ID09PSAwO1xuICAgIGNvbnN0IGlzTGFzdCAgPSByb3dJZHggPT09IG9yZGVyZWRBY2hzLmxlbmd0aCAtIDE7XG5cbiAgICBodG1sICs9IGBcbiAgICAgIDx0ciBkYXRhLWFjaC1pZD1cIiR7ZXNjYXBlSHRtbChpZCl9XCI+XG4gICAgICAgIDx0ZCBzdHlsZT1cIm1pbi13aWR0aDoyMjBweDtcIj5cbiAgICAgICAgICA8aW5wdXQgaWQ9XCJhY2gtdGl0bGUtJHtlc2NhcGVIdG1sKGlkKX1cIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIiB2YWx1ZT1cIiR7ZXNjYXBlSHRtbCh0aXRsZSl9XCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtmb250LXdlaWdodDo2MDA7cGFkZGluZzozcHggNnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC45ZW07Ym94LXNpemluZzpib3JkZXItYm94O1wiXG4gICAgICAgICAgICBvbmJsdXI9XCJzYXZlVG9wTGV2ZWxBY2hpZXZlbWVudEZpZWxkKCcke2VzY2FwZUh0bWwoaWQpfScsICd0aXRsZScsIHRoaXMudmFsdWUpXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBY2hpZXZlbWVudCB0aXRsZVwiPiR7cmVydW5OZXdCYWRnZX1cbiAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJhY2gtZGVzYy0ke2VzY2FwZUh0bWwoaWQpfVwiXG4gICAgICAgICAgICByb3dzPVwiMlwiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7bWFyZ2luLXRvcDo0cHg7cGFkZGluZzozcHggNnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC44NWVtO3Jlc2l6ZTp2ZXJ0aWNhbDtib3gtc2l6aW5nOmJvcmRlci1ib3g7XCJcbiAgICAgICAgICAgIG9uYmx1cj1cInNhdmVUb3BMZXZlbEFjaGlldmVtZW50RmllbGQoJyR7ZXNjYXBlSHRtbChpZCl9JywgJ2Rlc2NyaXB0aW9uJywgdGhpcy52YWx1ZSlcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFjaGlldmVtZW50IGRlc2NyaXB0aW9uXCJcbiAgICAgICAgICA+JHtlc2NhcGVIdG1sKGRlc2MpfTwvdGV4dGFyZWE+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZD48c3Ryb25nPiR7ZXNjYXBlSHRtbChyZWNvbW1lbmRhdGlvbil9PC9zdHJvbmc+PC90ZD5cbiAgICAgICAgPHRkPiR7Y29uZmlkZW5jZUJhZGdlfTwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cIm1heC13aWR0aDoyMDBweDtcIj48c21hbGw+JHtlc2NhcGVIdG1sKHJlYXNvbmluZyl9PC9zbWFsbD48L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb24tYnRuc1wiIHN0eWxlPVwid2hpdGUtc3BhY2U6bm93cmFwO1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2RlZmF1bHRBY3Rpb24gPT09ICdlbXBoYXNpemUnICAgID8gJ2FjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImVtcGhhc2l6ZVwiICAgIGFyaWEtbGFiZWw9XCJFbXBoYXNpemUgJHtlc2NhcGVIdG1sKHRpdGxlKX1cIiAgICB0aXRsZT1cIkVtcGhhc2l6ZSBcdTIwMTQgZmVhdHVyZSBwcm9taW5lbnRseVwiICBzdHlsZT1cImNvbG9yOiMxMGI5ODE7XCI+XHUyNzk1PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2luY2x1ZGUnICAgICAgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiaW5jbHVkZVwiICAgICAgYXJpYS1sYWJlbD1cIkluY2x1ZGUgJHtlc2NhcGVIdG1sKHRpdGxlKX1cIiAgICAgIHRpdGxlPVwiSW5jbHVkZSBcdTIwMTQgc3RhbmRhcmQgdHJlYXRtZW50XCI+XHUyNzEzPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2RlLWVtcGhhc2l6ZScgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiZGUtZW1waGFzaXplXCIgYXJpYS1sYWJlbD1cIkRlLWVtcGhhc2l6ZSAke2VzY2FwZUh0bWwodGl0bGUpfVwiIHRpdGxlPVwiRGUtZW1waGFzaXplIFx1MjAxNCBicmllZiBtZW50aW9uIG9ubHlcIiAgc3R5bGU9XCJjb2xvcjojZjU5ZTBiO1wiPlx1Mjc5NjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2RlZmF1bHRBY3Rpb24gPT09ICdleGNsdWRlJyAgICAgID8gJ2FjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImV4Y2x1ZGVcIiAgICAgIGFyaWEtbGFiZWw9XCJFeGNsdWRlICR7ZXNjYXBlSHRtbCh0aXRsZSl9XCIgICAgICB0aXRsZT1cIkV4Y2x1ZGUgXHUyMDE0IG9taXQgZnJvbSBDVlwiICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O1wiPiR7ZXllU2xhc2hJY29uKCl9PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgYXJpYS1sYWJlbD1cIkFJIHJld3JpdGUgJHtlc2NhcGVIdG1sKHRpdGxlKX1cIiB0aXRsZT1cIkFJIHJld3JpdGUgZGVzY3JpcHRpb25cIiBvbmNsaWNrPVwiYWlSZXdyaXRlVG9wTGV2ZWxBY2hpZXZlbWVudCgnJHtlc2NhcGVIdG1sKGlkKX0nKVwiPlx1MjcyODwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGFyaWEtbGFiZWw9XCJNb3ZlICR7ZXNjYXBlSHRtbCh0aXRsZSl9IGVhcmxpZXJcIiB0aXRsZT1cIk1vdmUgdXBcIiAgICR7aXNGaXJzdCA/ICdkaXNhYmxlZCcgOiAnJ30gb25jbGljaz1cIm1vdmVBY2hpZXZlbWVudFJvdygnJHtlc2NhcGVIdG1sKGlkKX0nLC0xKVwiPlx1MjE5MTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGFyaWEtbGFiZWw9XCJNb3ZlICR7ZXNjYXBlSHRtbCh0aXRsZSl9IGxhdGVyXCIgICB0aXRsZT1cIk1vdmUgZG93blwiICR7aXNMYXN0ICA/ICdkaXNhYmxlZCcgOiAnJ30gb25jbGljaz1cIm1vdmVBY2hpZXZlbWVudFJvdygnJHtlc2NhcGVIdG1sKGlkKX0nLCsxKVwiPlx1MjE5MzwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGFyaWEtbGFiZWw9XCJEZWxldGUgJHtlc2NhcGVIdG1sKHRpdGxlKX1cIiB0aXRsZT1cIkRlbGV0ZSBhY2hpZXZlbWVudFwiIG9uY2xpY2s9XCJkZWxldGVUb3BMZXZlbEFjaGlldmVtZW50KCcke2VzY2FwZUh0bWwoaWQpfScpXCIgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O1wiPlx1RDgzRFx1REREMTwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICBgO1xuICB9KTtcblxuICAvLyBBSS1zdWdnZXN0ZWQgYWNoaWV2ZW1lbnRzIFx1MjAxNCBmdWxsIGVkaXRpbmcvY29udHJvbCBwYXJpdHkgd2l0aCB1c2VyIGFjaGlldmVtZW50c1xuICBzdWdnZXN0ZWRBY2hzLmZvckVhY2goKHN1Z2csIHJvd0lkeCkgPT4ge1xuICAgIGNvbnN0IHN1Z2dJZCAgICAgID0gc3VnZy5fc3VnZ0lkO1xuICAgIGNvbnN0IGNvbmZSYXcgICAgID0gKHN1Z2cuY29uZmlkZW5jZSB8fCAnTWVkaXVtJykudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjb25mTGV2ZWwgICA9IGNvbmZSYXcuaW5jbHVkZXMoJ2hpZ2gnKSA/ICdoaWdoJyA6IGNvbmZSYXcuaW5jbHVkZXMoJ2xvdycpID8gJ2xvdycgOiAnbWVkaXVtJztcbiAgICBjb25zdCBjb25mVGV4dCAgICA9IHN1Z2cuY29uZmlkZW5jZSB8fCAnTWVkaXVtJztcbiAgICBjb25zdCBkZWZhdWx0QWN0aW9uID0gd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zW3N1Z2dJZF0gfHwgJ2luY2x1ZGUnO1xuICAgIGNvbnN0IGlzRmlyc3QgICAgID0gcm93SWR4ID09PSAwO1xuICAgIGNvbnN0IGlzTGFzdCAgICAgID0gcm93SWR4ID09PSBzdWdnZXN0ZWRBY2hzLmxlbmd0aCAtIDE7XG5cbiAgICBodG1sICs9IGBcbiAgICAgIDx0ciBkYXRhLWFjaC1pZD1cIiR7ZXNjYXBlSHRtbChzdWdnSWQpfVwiIHN0eWxlPVwiYmFja2dyb3VuZDojZmVmY2U4O1wiPlxuICAgICAgICA8dGQgc3R5bGU9XCJtaW4td2lkdGg6MjIwcHg7XCI+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kOiNmNTllMGI7Y29sb3I6I2ZmZjtmb250LXNpemU6MC43ZW07Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6MXB4IDZweDtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLWJvdHRvbTo0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO1wiPlx1MkI1MCBBSSBTdWdnZXN0ZWQ8L3NwYW4+XG4gICAgICAgICAgPGlucHV0IGlkPVwiYWNoLXRpdGxlLSR7ZXNjYXBlSHRtbChzdWdnSWQpfVwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiIHZhbHVlPVwiJHtlc2NhcGVIdG1sKHN1Z2cudGl0bGUgfHwgJycpfVwiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Zm9udC13ZWlnaHQ6NjAwO3BhZGRpbmc6M3B4IDZweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjAuOWVtO2JveC1zaXppbmc6Ym9yZGVyLWJveDtcIlxuICAgICAgICAgICAgb25ibHVyPVwic2F2ZVN1Z2dlc3RlZEFjaGlldmVtZW50RmllbGQoJyR7ZXNjYXBlSHRtbChzdWdnSWQpfScsICd0aXRsZScsIHRoaXMudmFsdWUpXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBY2hpZXZlbWVudCB0aXRsZVwiPlxuICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cImFjaC1kZXNjLSR7ZXNjYXBlSHRtbChzdWdnSWQpfVwiXG4gICAgICAgICAgICByb3dzPVwiMlwiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7bWFyZ2luLXRvcDo0cHg7cGFkZGluZzozcHggNnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC44NWVtO3Jlc2l6ZTp2ZXJ0aWNhbDtib3gtc2l6aW5nOmJvcmRlci1ib3g7XCJcbiAgICAgICAgICAgIG9uYmx1cj1cInNhdmVTdWdnZXN0ZWRBY2hpZXZlbWVudEZpZWxkKCcke2VzY2FwZUh0bWwoc3VnZ0lkKX0nLCAnZGVzY3JpcHRpb24nLCB0aGlzLnZhbHVlKVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWNoaWV2ZW1lbnQgZGVzY3JpcHRpb25cIlxuICAgICAgICAgID4ke2VzY2FwZUh0bWwoc3VnZy5kZXNjcmlwdGlvbiB8fCAnJyl9PC90ZXh0YXJlYT5cbiAgICAgICAgICAke3N1Z2cuZXhwZXJpZW5jZV9pZCA/IGA8c21hbGwgc3R5bGU9XCJjb2xvcjojOWNhM2FmO1wiPkV4cGVyaWVuY2U6ICR7ZXNjYXBlSHRtbChzdWdnLmV4cGVyaWVuY2VfaWQpfTwvc21hbGw+YCA6ICcnfVxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQ+PHN0cm9uZz5BZGQgTmV3PC9zdHJvbmc+PC90ZD5cbiAgICAgICAgPHRkPjxzcGFuIGNsYXNzPVwiY29uZmlkZW5jZS1iYWRnZSBjb25maWRlbmNlLSR7Y29uZkxldmVsfVwiPiR7ZXNjYXBlSHRtbChjb25mVGV4dCl9PC9zcGFuPjwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cIm1heC13aWR0aDoyMDBweDtcIj48c21hbGw+JHtlc2NhcGVIdG1sKHN1Z2cucmF0aW9uYWxlIHx8ICcnKX08L3NtYWxsPjwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImFjdGlvbi1idG5zXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTpub3dyYXA7XCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2VtcGhhc2l6ZScgICAgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiZW1waGFzaXplXCIgICAgYXJpYS1sYWJlbD1cIkVtcGhhc2l6ZVwiICAgIHRpdGxlPVwiRW1waGFzaXplIFx1MjAxNCBmZWF0dXJlIHByb21pbmVudGx5XCIgIHN0eWxlPVwiY29sb3I6IzEwYjk4MTtcIj5cdTI3OTU8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4gJHtkZWZhdWx0QWN0aW9uID09PSAnaW5jbHVkZScgICAgICA/ICdhY3RpdmUnIDogJyd9XCIgZGF0YS1hY3Rpb249XCJpbmNsdWRlXCIgICAgICBhcmlhLWxhYmVsPVwiSW5jbHVkZVwiICAgICAgdGl0bGU9XCJJbmNsdWRlIFx1MjAxNCBhZGQgdG8gQ1ZcIj5cdTI3MTM8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4gJHtkZWZhdWx0QWN0aW9uID09PSAnZGUtZW1waGFzaXplJyA/ICdhY3RpdmUnIDogJyd9XCIgZGF0YS1hY3Rpb249XCJkZS1lbXBoYXNpemVcIiBhcmlhLWxhYmVsPVwiRGUtZW1waGFzaXplXCIgdGl0bGU9XCJEZS1lbXBoYXNpemUgXHUyMDE0IGJyaWVmIG1lbnRpb24gb25seVwiICBzdHlsZT1cImNvbG9yOiNmNTllMGI7XCI+XHUyNzk2PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuICR7ZGVmYXVsdEFjdGlvbiA9PT0gJ2V4Y2x1ZGUnICAgICAgPyAnYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwiZXhjbHVkZVwiICAgICAgYXJpYS1sYWJlbD1cIkV4Y2x1ZGVcIiAgICAgIHRpdGxlPVwiU2tpcCBcdTIwMTQgZG8gbm90IGFkZFwiICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7XCI+JHtleWVTbGFzaEljb24oKX08L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBhcmlhLWxhYmVsPVwiQUkgcmV3cml0ZVwiIHRpdGxlPVwiQUkgcmV3cml0ZSBkZXNjcmlwdGlvblwiIG9uY2xpY2s9XCJhaVJld3JpdGVTdWdnZXN0ZWRBY2hpZXZlbWVudCgnJHtlc2NhcGVIdG1sKHN1Z2dJZCl9JylcIj5cdTI3Mjg8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBhcmlhLWxhYmVsPVwiTW92ZSBlYXJsaWVyXCIgdGl0bGU9XCJNb3ZlIHVwXCIgICAke2lzRmlyc3QgPyAnZGlzYWJsZWQnIDogJyd9IG9uY2xpY2s9XCJtb3ZlU3VnZ2VzdGVkQWNoaWV2ZW1lbnRSb3coJyR7ZXNjYXBlSHRtbChzdWdnSWQpfScsLTEpXCI+XHUyMTkxPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgYXJpYS1sYWJlbD1cIk1vdmUgbGF0ZXJcIiAgIHRpdGxlPVwiTW92ZSBkb3duXCIgJHtpc0xhc3QgID8gJ2Rpc2FibGVkJyA6ICcnfSBvbmNsaWNrPVwibW92ZVN1Z2dlc3RlZEFjaGlldmVtZW50Um93KCcke2VzY2FwZUh0bWwoc3VnZ0lkKX0nLCsxKVwiPlx1MjE5MzwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGFyaWEtbGFiZWw9XCJSZW1vdmUgc3VnZ2VzdGlvblwiIHRpdGxlPVwiUmVtb3ZlIHN1Z2dlc3Rpb25cIiBvbmNsaWNrPVwiZGVsZXRlU3VnZ2VzdGVkQWNoaWV2ZW1lbnQoJyR7ZXNjYXBlSHRtbChzdWdnSWQpfScpXCIgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O1wiPlx1RDgzRFx1REREMTwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICBgO1xuICB9KTtcblxuICBodG1sICs9ICc8L3Rib2R5PjwvdGFibGU+JztcbiAgY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWw7XG5cbiAgLy8gQnVsayB0b29sYmFyIGFib3ZlIHRoZSBmaWx0ZXIgcm93XG4gIGNvbnN0IGFjaFRvb2xiYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgYWNoVG9vbGJhci5jbGFzc05hbWUgPSAnYnVsay10b29sYmFyJztcbiAgYWNoVG9vbGJhci5pbm5lckhUTUwgPSBgXG4gICAgPHNwYW4+QnVsazo8L3NwYW4+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ1bGstYnRuIGJ1bGstcmVjb21tZW5kZWRcIiBvbmNsaWNrPVwiYnVsa0FjaGlldmVtZW50QWN0aW9uKCdyZWNvbW1lbmRlZCcpXCIgdGl0bGU9XCJTZXQgYWxsIHRvIHRoZSBMTE0gcmVjb21tZW5kYXRpb25cIj5cdTI3MjggQWNjZXB0IEFsbCBSZWNvbW1lbmRlZDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLWVtcGhhc2l6ZVwiICAgb25jbGljaz1cImJ1bGtBY2hpZXZlbWVudEFjdGlvbignZW1waGFzaXplJylcIj5cdTI3OTUgRW1waGFzaXplIEFsbDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidWxrLWJ0biBidWxrLWluY2x1ZGVcIiAgICAgb25jbGljaz1cImJ1bGtBY2hpZXZlbWVudEFjdGlvbignaW5jbHVkZScpXCI+XHUyNzEzIEluY2x1ZGUgQWxsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ1bGstYnRuIGJ1bGstZXhjbHVkZVwiICAgICBvbmNsaWNrPVwiYnVsa0FjaGlldmVtZW50QWN0aW9uKCdleGNsdWRlJylcIj4ke2V5ZVNsYXNoSWNvbigpfSBFeGNsdWRlIEFsbDwvYnV0dG9uPlxuICBgO1xuICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKGFjaFRvb2xiYXIsIGNvbnRhaW5lci5maXJzdENoaWxkKTtcblxuICAvLyBEZWxlZ2F0ZWQgY2xpY2sgaGFuZGxlciBmb3IgZGVjaXNpb24gYnV0dG9uc1xuICBjb250YWluZXIucXVlcnlTZWxlY3RvcigndGJvZHknKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcbiAgICBjb25zdCBidG4gPSBlLnRhcmdldC5jbG9zZXN0KCcuaWNvbi1idG5bZGF0YS1hY3Rpb25dJyk7XG4gICAgaWYgKCFidG4pIHJldHVybjtcbiAgICBjb25zdCB0ciA9IGJ0bi5jbG9zZXN0KCd0cltkYXRhLWFjaC1pZF0nKTtcbiAgICBpZiAoIXRyKSByZXR1cm47XG4gICAgY29uc3QgYWN0aW9uID0gYnRuLmRhdGFzZXQuYWN0aW9uO1xuICAgIGlmIChhY3Rpb24pIGhhbmRsZUFjaGlldmVtZW50QWN0aW9uKHRyLmRhdGFzZXQuYWNoSWQsIGFjdGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBidWxrQWNoaWV2ZW1lbnRBY3Rpb24oYWN0aW9uKSB7XG4gIGNvbnN0IGRhdGEgPSB3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucyB8fCB7fTtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2FjaGlldmVtZW50cy1yZXZpZXctdGFibGUgdGJvZHkgdHJbZGF0YS1hY2gtaWRdJykuZm9yRWFjaChyb3cgPT4ge1xuICAgIGlmIChyb3cuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSByZXR1cm47ICAgLy8gcmVzcGVjdCBmaWx0ZXJcbiAgICBjb25zdCBhY2hJZCA9IHJvdy5kYXRhc2V0LmFjaElkO1xuICAgIGlmICghYWNoSWQpIHJldHVybjtcbiAgICBsZXQgcmVzb2x2ZWRBY3Rpb24gPSBhY3Rpb247XG4gICAgaWYgKGFjdGlvbiA9PT0gJ3JlY29tbWVuZGVkJykge1xuICAgICAgaWYgKGFjaElkLnN0YXJ0c1dpdGgoJ3N1Z2c6OicpKSB7XG4gICAgICAgIHJlc29sdmVkQWN0aW9uID0gJ2luY2x1ZGUnOyAvLyBBSS1zdWdnZXN0ZWQgaXRlbXMgZGVmYXVsdCB0byBpbmNsdWRlIHdoZW4gYWNjZXB0aW5nIGFsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVjID0gZ2V0QWNoaWV2ZW1lbnRSZWNvbW1lbmRhdGlvbihhY2hJZCwgZGF0YSk7XG4gICAgICAgIGlmIChyZWMgPT09ICdFbXBoYXNpemUnKSAgICAgICAgIHJlc29sdmVkQWN0aW9uID0gJ2VtcGhhc2l6ZSc7XG4gICAgICAgIGVsc2UgaWYgKHJlYyA9PT0gJ0luY2x1ZGUnKSAgICAgIHJlc29sdmVkQWN0aW9uID0gJ2luY2x1ZGUnO1xuICAgICAgICBlbHNlIGlmIChyZWMgPT09ICdEZS1lbXBoYXNpemUnKSByZXNvbHZlZEFjdGlvbiA9ICdkZS1lbXBoYXNpemUnO1xuICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEFjdGlvbiA9ICdleGNsdWRlJztcbiAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlQWNoaWV2ZW1lbnRBY3Rpb24oYWNoSWQsIHJlc29sdmVkQWN0aW9uKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUFjaGlldmVtZW50QWN0aW9uKGFjaElkLCBhY3Rpb24pIHtcbiAgd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zW2FjaElkXSA9IGFjdGlvbjtcbiAgY29uc3Qgcm93ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgdHJbZGF0YS1hY2gtaWQ9XCIke0NTUy5lc2NhcGUoYWNoSWQpfVwiXWApO1xuICBpZiAoIXJvdykgcmV0dXJuO1xuICByb3cucXVlcnlTZWxlY3RvckFsbCgnLmljb24tYnRuJykuZm9yRWFjaChidG4gPT4gYnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTtcbiAgY29uc3QgYWN0aXZlQnRuID0gcm93LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWFjdGlvbj1cIiR7YWN0aW9ufVwiXWApO1xuICBpZiAoYWN0aXZlQnRuKSBhY3RpdmVCdG4uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdEFjaGlldmVtZW50RGVjaXNpb25zKCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogYWNoaWV2ZW1lbnRzX3VpX3N1Ym1pdF9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTAzLTI1VDIxOjM5OjQ4WidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6YWNoaWV2ZW1lbnRzLXJldmlldy5zdWJtaXRcbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zXG4gICAqICAgLSBQT1NUIC9hcGkvY3YvbGF5b3V0LWVzdGltYXRlXG4gICAqICAgcmVhZHM6XG4gICAqICAgLSB3aW5kb3c6YWNoaWV2ZW1lbnREZWNpc2lvbnNcbiAgICogICAtIHdpbmRvdzpfc3VnZ2VzdGVkQWNoc09yZGVyZWRcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zLmRlY2lzaW9uc1xuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9ucy5hY2NlcHRlZF9zdWdnZXN0aW9uc1xuICAgKiAgIC0gd2luZG93Ol9zYXZlZERlY2lzaW9ucy5hY2hpZXZlbWVudF9kZWNpc2lvbnNcbiAgICogICAtIHdpbmRvdzpfc2F2ZWREZWNpc2lvbnMuYWNjZXB0ZWRfc3VnZ2VzdGVkX2FjaGlldmVtZW50c1xuICAgKiAgIG5vdGVzOiBQZXJzaXN0cyBhY2hpZXZlbWVudCBpbmNsdXNpb24gZGVjaXNpb25zIGFuZCB0aGUgYWNjZXB0ZWQgQUktc3VnZ2VzdGVkIGFjaGlldmVtZW50cyB0aGF0IHNob3VsZCByZW1haW4gc2Vzc2lvbi1vbmx5IHVudGlsIGFuIGV4cGxpY2l0IGhhcnZlc3Qgc3RlcC5cbiAgICovXG4gIGNvbnN0IGFsbERlY2lzaW9ucyA9IHdpbmRvdy5hY2hpZXZlbWVudERlY2lzaW9ucyB8fCB7fTtcbiAgLy8gU2VwYXJhdGUgZXhpc3RpbmcgYWNoaWV2ZW1lbnRzIGZyb20gQUktc3VnZ2VzdGVkIG9uZXNcbiAgY29uc3QgZGVjaXNpb25zID0ge307XG4gIGNvbnN0IHN1Z2dlc3RlZERlY2lzaW9ucyA9IHt9O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhhbGxEZWNpc2lvbnMpKSB7XG4gICAgaWYgKGsuc3RhcnRzV2l0aCgnc3VnZzo6JykpIHN1Z2dlc3RlZERlY2lzaW9uc1trXSA9IHY7XG4gICAgZWxzZSBkZWNpc2lvbnNba10gPSB2O1xuICB9XG4gIGNvbnN0IGNvdW50ID0gT2JqZWN0LmtleXMoYWxsRGVjaXNpb25zKS5sZW5ndGg7XG4gIGlmIChjb3VudCA9PT0gMCkgcmV0dXJuO1xuICAvLyBSZXNvbHZlIHN1Z2dlc3RlZCBhY2hpZXZlbWVudCBvYmplY3RzIHRoYXQgd2VyZSBhY2NlcHRlZFxuICBjb25zdCBzdWdnZXN0ZWRBY2hzID0gd2luZG93Ll9zdWdnZXN0ZWRBY2hzT3JkZXJlZCB8fCBbXTtcbiAgY29uc3QgYWNjZXB0ZWRTdWdnZXN0aW9ucyA9IHN1Z2dlc3RlZEFjaHNcbiAgICAuZmlsdGVyKHMgPT4ge1xuICAgICAgY29uc3QgYWN0aW9uID0gc3VnZ2VzdGVkRGVjaXNpb25zW3MuX3N1Z2dJZF07XG4gICAgICByZXR1cm4gYWN0aW9uID09PSAnaW5jbHVkZScgfHwgYWN0aW9uID09PSAnZW1waGFzaXplJztcbiAgICB9KVxuICAgIC5tYXAocyA9PiAoeyB0aXRsZTogcy50aXRsZSwgZGVzY3JpcHRpb246IHMuZGVzY3JpcHRpb24sIGV4cGVyaWVuY2VfaWQ6IHMuZXhwZXJpZW5jZV9pZCwgcmF0aW9uYWxlOiBzLnJhdGlvbmFsZSB9KSk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXZpZXctZGVjaXNpb25zJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ2FjaGlldmVtZW50cycsIGRlY2lzaW9ucywgYWNjZXB0ZWRfc3VnZ2VzdGlvbnM6IGFjY2VwdGVkU3VnZ2VzdGlvbnMgfSlcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIHN0YXRlTWFuYWdlci5tYXJrQ29udGVudENoYW5nZWQoKTtcbiAgICAgIHNob3dUb2FzdChgQWNoaWV2ZW1lbnQgc2VsZWN0aW9ucyBzYXZlZCAoJHtjb3VudH0gaXRlbXMpYCk7XG4gICAgICBzY2hlZHVsZUF0c1JlZnJlc2goKTtcbiAgICAgIC8vIFBlcnNpc3QgbG9jYWxseSBzbyB0aGUgcmV2aWV3IFVJIGltbWVkaWF0ZWx5IHJlZmxlY3RzIHNhdmVkIGNob2ljZXNcbiAgICAgIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMgPSB3aW5kb3cuX3NhdmVkRGVjaXNpb25zIHx8IHt9O1xuICAgICAgd2luZG93Ll9zYXZlZERlY2lzaW9ucy5hY2hpZXZlbWVudF9kZWNpc2lvbnMgPSBkZWNpc2lvbnM7XG4gICAgICBpZiAoYWNjZXB0ZWRTdWdnZXN0aW9ucyAmJiBhY2NlcHRlZFN1Z2dlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgd2luZG93Ll9zYXZlZERlY2lzaW9ucy5hY2NlcHRlZF9zdWdnZXN0ZWRfYWNoaWV2ZW1lbnRzID0gYWNjZXB0ZWRTdWdnZXN0aW9ucztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlSW5jbHVzaW9uQ291bnRzID09PSAnZnVuY3Rpb24nKSB1cGRhdGVJbmNsdXNpb25Db3VudHMoKTtcbiAgICAgIHN3aXRjaFRhYigndGFnbGluZS1yZXZpZXcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXJyID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgc2hvd1RvYXN0KGBFcnJvcjogJHtlcnIuZXJyb3IgfHwgJ0ZhaWxlZCB0byBzYXZlIHNlbGVjdGlvbnMnfWAsICdlcnJvcicpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dUb2FzdCgnRmFpbGVkIHRvIHNhdmUgYWNoaWV2ZW1lbnQgc2VsZWN0aW9ucy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnZXJyb3InKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3ZlQWNoaWV2ZW1lbnRSb3coYWNoSWQsIGRpcmVjdGlvbikge1xuICBjb25zdCBhcnIgPSB3aW5kb3cuX2FjaGlldmVtZW50c09yZGVyZWQ7XG4gIGlmICghYXJyKSByZXR1cm47XG4gIGNvbnN0IGlkeCA9IGFyci5maW5kSW5kZXgoYSA9PiBhLmlkID09PSBhY2hJZCk7XG4gIGlmIChpZHggPCAwKSByZXR1cm47XG4gIGNvbnN0IG5ld0lkeCA9IGlkeCArIGRpcmVjdGlvbjtcbiAgaWYgKG5ld0lkeCA8IDAgfHwgbmV3SWR4ID49IGFyci5sZW5ndGgpIHJldHVybjtcbiAgW2FycltpZHhdLCBhcnJbbmV3SWR4XV0gPSBbYXJyW25ld0lkeF0sIGFycltpZHhdXTtcbiAgd2luZG93Ll9hY2hpZXZlbWVudHNPcmRlcmVkID0gYXJyO1xuICBfcmVuZGVyQWNoaWV2ZW1lbnRzUmV2aWV3VGFibGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaGlldmVtZW50cy10YWJsZS1jb250YWluZXInKSk7XG59XG5cbi8vID09PT0gQWNoaWV2ZW1lbnRzIEVkaXRvciBUYWIgPT09PVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBwZXItZXhwZXJpZW5jZSBhY2hpZXZlbWVudHMgZWRpdG9yIHRhYi5cbiAqIEVhY2ggZXhwZXJpZW5jZSBnZXRzIGEgY29sbGFwc2libGUgY2FyZCB3aXRoIGl0cyBhY2hpZXZlbWVudHMgbGlzdGVkLlxuICogRWFjaCBhY2hpZXZlbWVudCBzdXBwb3J0czogaW5saW5lIGVkaXQsIHJlb3JkZXIgKFx1MjE5MVx1MjE5MyksIGRlbGV0ZSwgYW5kIExMTSByZXdyaXRlLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZEFjaGlldmVtZW50c0VkaXRvcigpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O3BhZGRpbmc6MjBweDtjb2xvcjojNmI3MjgwO1wiPjxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyLXdpZHRoOjJweDtmbGV4LXNocmluazowO1wiPjwvZGl2PjxzcGFuPkxvYWRpbmcgZXhwZXJpZW5jZSBidWxsZXRzIGVkaXRvclx1MjAyNjwvc3Bhbj48L2Rpdj4nO1xuXG4gIC8vIEZldGNoIGV4cGVyaWVuY2VzICsgdGhlaXIgYWNoaWV2ZW1lbnRzIGZyb20gbWFzdGVyIGZpZWxkc1xuICBsZXQgZXhwZXJpZW5jZXMgPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZmllbGRzJyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgZXhwZXJpZW5jZXMgPSBkYXRhLmV4cGVyaWVuY2VzIHx8IFtdO1xuICB9IGNhdGNoIChfKSB7fVxuXG4gIGlmIChleHBlcmllbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwicGFkZGluZzoyMHB4O2NvbG9yOiM2YjcyODA7XCI+Tm8gZXhwZXJpZW5jZXMgZm91bmQgaW4gbWFzdGVyIENWLjwvcD4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEluaXRpYWxpc2UgZWRpdHMgc3RvcmUgXHUyMDE0IGtleWVkIGJ5IGV4cGVyaWVuY2UgaW5kZXgsIHZhbHVlIGlzIGFycmF5IG9mIHsgdGV4dCwgaGlkZGVuIH1cbiAgd2luZG93LmFjaGlldmVtZW50RWRpdHMgPSB3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0cyB8fCB7fTtcbiAgZXhwZXJpZW5jZXMuZm9yRWFjaCgoZXhwLCBleHBJZHgpID0+IHtcbiAgICBpZiAoIXdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF0pIHtcbiAgICAgIHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF0gPSAoZXhwLmtleV9hY2hpZXZlbWVudHMgfHwgZXhwLmFjaGlldmVtZW50cyB8fCBbXSkubWFwKGEgPT5cbiAgICAgICAgX25vcm1hbGl6ZUFjaGlldmVtZW50RWRpdEVudHJ5KFxuICAgICAgICAgIHR5cGVvZiBhID09PSAnc3RyaW5nJyA/IGEgOiAoYSAmJiAoYS50ZXh0IHx8IGEuZGVzY3JpcHRpb24gfHwgYS5jb250ZW50IHx8ICcnKSkgfHwgJydcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LmFjaGlldmVtZW50RWRpdHNbZXhwSWR4XSA9IF9ub3JtYWxpemVBY2hpZXZlbWVudEVkaXRMaXN0KHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IGh0bWwgPSBgXG4gICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6MTZweDtcIj5cbiAgICAgIDxoMiBzdHlsZT1cIm1hcmdpbjowIDAgNHB4O1wiPlx1MjcwRlx1RkUwRiBFeHBlcmllbmNlIEJ1bGxldHM8L2gyPlxuICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbjowIDAgMTZweDtmb250LXNpemU6MC45ZW07XCI+XG4gICAgICAgIEVkaXQsIHJlb3JkZXIsIGRlbGV0ZSwgb3IgQUktcmV3cml0ZSBpbmRpdmlkdWFsIGV4cGVyaWVuY2UgYnVsbGV0cyBwZXIgcm9sZS5cbiAgICAgICAgQ2hhbmdlcyBhcmUgc2F2ZWQgYXV0b21hdGljYWxseSBhbmQgdXNlZCBkdXJpbmcgQ1YgZ2VuZXJhdGlvbi5cbiAgICAgIDwvcD5cbiAgYDtcblxuICAvLyBGaWx0ZXIgb3V0IGV4cGVyaWVuY2VzIHRoYXQgdXNlciBtYXJrZWQgYXMgZXhjbHVkZWQgKHBlcnNpc3RlZCBkZWNpc2lvbnMpXG4gIGNvbnN0IGV4cERlY2lzaW9ucyA9ICh3aW5kb3cuX3NhdmVkRGVjaXNpb25zICYmIHdpbmRvdy5fc2F2ZWREZWNpc2lvbnMuZXhwZXJpZW5jZV9kZWNpc2lvbnMpIHx8IHVzZXJTZWxlY3Rpb25zLmV4cGVyaWVuY2VzIHx8IHt9O1xuICBleHBlcmllbmNlcy5mb3JFYWNoKChleHAsIGV4cElkeCkgPT4ge1xuICAgIGNvbnN0IGV4cElkID0gZXhwLmlkIHx8IGV4cC5leHBlcmllbmNlX2lkIHx8IGBleHA6OiR7ZXhwSWR4fWA7XG4gICAgY29uc3QgZGVjaXNpb24gPSBleHBEZWNpc2lvbnNbZXhwSWRdO1xuICAgIGlmIChkZWNpc2lvbiA9PT0gJ2V4Y2x1ZGUnKSByZXR1cm47IC8vIG9taXQgZXhjbHVkZWQgZXhwZXJpZW5jZXMgZnJvbSBlZGl0b3JcbiAgICBjb25zdCB0aXRsZSAgICA9IGVzY2FwZUh0bWwoZXhwLnRpdGxlIHx8IGV4cC5wb3NpdGlvbiB8fCBgRXhwZXJpZW5jZSAke2V4cElkeCArIDF9YCk7XG4gICAgY29uc3QgY29tcGFueSAgPSBlc2NhcGVIdG1sKGV4cC5jb21wYW55IHx8IGV4cC5vcmdhbml6YXRpb24gfHwgJycpO1xuICAgIGNvbnN0IGFjaENvdW50ID0gd2luZG93LmFjaGlldmVtZW50RWRpdHNbZXhwSWR4XS5sZW5ndGg7XG5cbiAgICBodG1sICs9IGBcbiAgICAgIDxkZXRhaWxzIG9wZW4gc3R5bGU9XCJtYXJnaW4tYm90dG9tOjEycHg7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6OHB4O292ZXJmbG93OmhpZGRlbjtcIj5cbiAgICAgICAgPHN1bW1hcnkgc3R5bGU9XCJwYWRkaW5nOjEycHggMTZweDtiYWNrZ3JvdW5kOiNmOWZhZmI7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtcIj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsZXg6MTtcIj4ke3RpdGxlfSR7Y29tcGFueSA/IGAgPHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDo0MDA7Y29sb3I6IzZiNzI4MDtcIj5AICR7Y29tcGFueX08L3NwYW4+YCA6ICcnfTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjhlbTtjb2xvcjojOWNhM2FmO1wiPiR7YWNoQ291bnR9IGJ1bGxldCR7YWNoQ291bnQgIT09IDEgPyAncycgOiAnJ308L3NwYW4+XG4gICAgICAgIDwvc3VtbWFyeT5cbiAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6MTJweCAxNnB4O1wiIGlkPVwiYWNoLWVkaXRvci1leHAtJHtleHBJZHh9XCI+XG4gICAgICAgICAgPGRpdiBpZD1cImFjaC1saXN0LSR7ZXhwSWR4fVwiPjwvZGl2PlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tc2Vjb25kYXJ5XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MC44NWVtO1wiXG4gICAgICAgICAgICBvbmNsaWNrPVwiYWRkQWNoaWV2ZW1lbnRSb3coJHtleHBJZHh9KVwiPisgQWRkIEJ1bGxldDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGV0YWlscz5cbiAgICBgO1xuICB9KTtcblxuICBodG1sICs9IGBcbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoyMHB4O2Rpc3BsYXk6ZmxleDtnYXA6MTJweDthbGlnbi1pdGVtczpjZW50ZXI7XCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYmFjay1idG5cIiBvbmNsaWNrPVwic3dpdGNoVGFiKCdleHAtcmV2aWV3JylcIj5cdTIxOTAgQmFjayB0byBFeHBlcmllbmNlczwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRpbnVlLWJ0blwiIG9uY2xpY2s9XCJzYXZlQWNoaWV2ZW1lbnRFZGl0c0FuZENvbnRpbnVlKClcIj5TYXZlICZhbXA7IENvbnRpbnVlIHRvIFNraWxscyBcdTIxOTI8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbDtcblxuICAvLyBSZW5kZXIgYWNoaWV2ZW1lbnQgcm93cyBmb3IgZWFjaCBleHBlcmllbmNlXG4gIGV4cGVyaWVuY2VzLmZvckVhY2goKF8sIGV4cElkeCkgPT4gcmVuZGVyQWNoaWV2ZW1lbnRFZGl0b3JSb3dzKGV4cElkeCkpO1xufVxuXG4vLyBWZXJicyB0aGF0IGdlbmVyYXRlIGEgd2Vhay12ZXJiIHdhcm5pbmcgYmFkZ2UgaW4gdGhlIGJ1bGxldCBlZGl0b3IuXG5jb25zdCBfQUNIX1BBU1NJVkVfU1RBUlRTID0gbmV3IFNldChbJ3dhcycsJ3dlcmUnLCdpcycsJ2FyZScsJ2JlZW4nXSk7XG5jb25zdCBfQUNIX1dFQUtfVkVSQlMgPSBuZXcgU2V0KFtcbiAgJ2Fzc2lzdGVkJywnY29udHJpYnV0ZWQnLCdoZWxwZWQnLCdwYXJ0aWNpcGF0ZWQnLCdzdXBwb3J0ZWQnLFxuICAnc3VwZXJ2aXNlZCcsJ3dvcmtlZCcsJ2NvbGxhYm9yYXRlZCcsJ2Nvb3BlcmF0ZWQnLFxuXSk7XG5jb25zdCBfQUNIX1NUUk9OR19WRVJCUyA9IG5ldyBTZXQoW1xuICAnYWNjZWxlcmF0ZWQnLCdhY2hpZXZlZCcsJ2FyY2hpdGVjdGVkJywnYXV0b21hdGVkJywnYnVpbHQnLFxuICAnY2hhbXBpb25lZCcsJ2NvaW5lZCcsJ2NvbmNlaXZlZCcsJ2NvbmR1Y3RlZCcsJ2NvbnNvbGlkYXRlZCcsXG4gICdjcmVhdGVkJywnY3V0JywnZGVsaXZlcmVkJywnZGVtb25zdHJhdGVkJywnZGVwbG95ZWQnLFxuICAnZGVzaWduZWQnLCdkZXZlbG9wZWQnLCdkaXJlY3RlZCcsJ2RvdWJsZWQnLCdkcm92ZScsXG4gICdlbmFibGVkJywnZXN0YWJsaXNoZWQnLCdleHBhbmRlZCcsJ2ZvdW5kZWQnLCdnZW5lcmF0ZWQnLFxuICAnZ3JldycsJ2ltcGxlbWVudGVkJywnaW1wcm92ZWQnLCdpbmNyZWFzZWQnLCdpbnRlZ3JhdGVkJyxcbiAgJ2ludmVudGVkJywnbGF1bmNoZWQnLCdsZWQnLCdtYW5hZ2VkJywnb3B0aW1pemVkJywncGlvbmVlcmVkJyxcbiAgJ3Byb3ZpZGVkJywncHVibGlzaGVkJywncmFpc2VkJywncmVkdWNlZCcsJ3JlZmFjdG9yZWQnLCdzY2FsZWQnLFxuICAnc2VjdXJlZCcsJ3NoaXBwZWQnLCdzcGVhcmhlYWRlZCcsJ3N0cmVhbWxpbmVkJywndGF1Z2h0JyxcbiAgJ3RyYW5zZm9ybWVkJywndHJhbnNsYXRlZCcsJ3RyaXBsZWQnLFxuXSk7XG5cbmZ1bmN0aW9uIF9hY2hWZXJiV2FybmluZyh0ZXh0KSB7XG4gIGNvbnN0IGZpcnN0V29yZCA9ICh0ZXh0IHx8ICcnKS50cmltKCkuc3BsaXQoL1tcXHMsLjo7XS8pWzBdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXpdL2csICcnKTtcbiAgaWYgKCFmaXJzdFdvcmQpIHJldHVybiBudWxsO1xuICBpZiAoX0FDSF9QQVNTSVZFX1NUQVJUUy5oYXMoZmlyc3RXb3JkKSkgcmV0dXJuIHsgbGV2ZWw6ICdwYXNzaXZlJywgd29yZDogZmlyc3RXb3JkIH07XG4gIGlmIChfQUNIX1dFQUtfVkVSQlMuaGFzKGZpcnN0V29yZCkpIHJldHVybiB7IGxldmVsOiAnd2VhaycsICAgIHdvcmQ6IGZpcnN0V29yZCB9O1xuICBpZiAoIV9BQ0hfU1RST05HX1ZFUkJTLmhhcyhmaXJzdFdvcmQpKSByZXR1cm4geyBsZXZlbDogJ25ldXRyYWwnLCB3b3JkOiBmaXJzdFdvcmQgfTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmVuZGVyIHRoZSBlZGl0YWJsZSBhY2hpZXZlbWVudCByb3dzIGZvciBvbmUgZXhwZXJpZW5jZS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyQWNoaWV2ZW1lbnRFZGl0b3JSb3dzKGV4cElkeCkge1xuICBjb25zdCBsaXN0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgYWNoLWxpc3QtJHtleHBJZHh9YCk7XG4gIGlmICghbGlzdEVsKSByZXR1cm47XG4gIGNvbnN0IGFjaHMgPSBfbm9ybWFsaXplQWNoaWV2ZW1lbnRFZGl0TGlzdCh3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdIHx8IFtdKTtcbiAgd2luZG93LmFjaGlldmVtZW50RWRpdHNbZXhwSWR4XSA9IGFjaHM7XG5cbiAgaWYgKGFjaHMubGVuZ3RoID09PSAwKSB7XG4gICAgbGlzdEVsLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImNvbG9yOiM5Y2EzYWY7Zm9udC1zaXplOjAuODVlbTtwYWRkaW5nOjRweCAwO1wiPk5vIGV4cGVyaWVuY2UgYnVsbGV0cyB5ZXQuPC9wPic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGlzdEVsLmlubmVySFRNTCA9IGFjaHMubWFwKChlbnRyeSwgYWNoSWR4KSA9PiB7XG4gICAgY29uc3QgdGV4dCA9IF9hY2hpZXZlbWVudEVudHJ5VGV4dChlbnRyeSk7XG4gICAgY29uc3QgaGlkZGVuID0gX2FjaGlldmVtZW50RW50cnlIaWRkZW4oZW50cnkpO1xuICAgIGNvbnN0IHZlcmJXYXJuID0gX2FjaFZlcmJXYXJuaW5nKHRleHQpO1xuICAgIGNvbnN0IHZlcmJCYWRnZSA9IHZlcmJXYXJuXG4gICAgICA/ICh2ZXJiV2Fybi5sZXZlbCA9PT0gJ3Bhc3NpdmUnXG4gICAgICAgICAgPyBgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjc4ZW07Y29sb3I6IzlmMTIzOTtiYWNrZ3JvdW5kOiNmZmYxZjI7Ym9yZGVyOjFweCBzb2xpZCAjZmVjZGQzO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MnB4IDZweDttYXJnaW4tdG9wOjNweDtcIiB0aXRsZT1cIkJ1bGxldCBvcGVucyB3aXRoIHBhc3NpdmUgdm9pY2UgKCcke3ZlcmJXYXJuLndvcmR9JykgXHUyMDE0IHJld3JpdGUgd2l0aCBhbiBhY3RpdmUgb3BlbmluZyB2ZXJiXCI+XHUyNkEwIFBhc3NpdmUgdm9pY2UgXHUyMDE0IHJld3JpdGUgd2l0aCBhbiBhY3RpdmUgb3BlbmluZyB2ZXJiPC9kaXY+YFxuICAgICAgICAgIDogdmVyYldhcm4ubGV2ZWwgPT09ICd3ZWFrJ1xuICAgICAgICAgID8gYDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC43OGVtO2NvbG9yOiNiNDUzMDk7YmFja2dyb3VuZDojZmZmYmViO2JvcmRlcjoxcHggc29saWQgI2ZkZTY4YTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjJweCA2cHg7bWFyZ2luLXRvcDozcHg7XCIgdGl0bGU9XCJPcGVuaW5nIHZlcmIgJyR7dmVyYldhcm4ud29yZH0nIGlzIHdlYWsgXHUyMDE0IGNvbnNpZGVyIExlZCwgQnVpbHQsIERyb3ZlLCBldGMuXCI+XHUyNkEwIFdlYWsgb3BlbmluZyB2ZXJiIFx1MjAxNCB1c2UgYSBzdHJvbmdlciBhY3Rpb24gdmVyYjwvZGl2PmBcbiAgICAgICAgICA6IGA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuNzhlbTtjb2xvcjojNmI3MjgwO2JhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoycHggNnB4O21hcmdpbi10b3A6M3B4O1wiIHRpdGxlPVwiJyR7dmVyYldhcm4ud29yZH0nIGlzIG5vdCBpbiB0aGUgc3Ryb25nLXZlcmIgbGlzdCBcdTIwMTQgdmVyaWZ5IGl0IG1ha2VzIGFuIGltcGFjdCBzdGF0ZW1lbnRcIj5cdTIxMzkgT3BlbmluZyB2ZXJiIG5vdCBpbiBzdHJvbmctdmVyYiBsaXN0PC9kaXY+YFxuICAgICAgICApXG4gICAgICA6ICcnO1xuICAgIHJldHVybiBgXG4gICAgPGRpdiBpZD1cImFjaC1yb3ctJHtleHBJZHh9LSR7YWNoSWR4fVwiIGNsYXNzPVwiJHtoaWRkZW4gPyAnYWNoaWV2ZW1lbnQtcm93LWhpZGRlbicgOiAnJ31cIiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luLWJvdHRvbTo4cHg7XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4O3BhZGRpbmctdG9wOjRweDtcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgdGl0bGU9XCJNb3ZlIHVwXCIgICBhcmlhLWxhYmVsPVwiTW92ZSBidWxsZXQgdXBcIiAgIG9uY2xpY2s9XCJtb3ZlQWNoaWV2ZW1lbnQoJHtleHBJZHh9LCR7YWNoSWR4fSwtMSlcIj5cdTI1QjI8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgdGl0bGU9XCJNb3ZlIGRvd25cIiBhcmlhLWxhYmVsPVwiTW92ZSBidWxsZXQgZG93blwiIG9uY2xpY2s9XCJtb3ZlQWNoaWV2ZW1lbnQoJHtleHBJZHh9LCR7YWNoSWR4fSwrMSlcIj5cdTI1QkM8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBzdHlsZT1cImZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO1wiPlxuICAgICAgPHRleHRhcmVhIGlkPVwiYWNoLXRleHQtJHtleHBJZHh9LSR7YWNoSWR4fVwiXG4gICAgICAgIHJvd3M9XCIyXCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICR7aGlkZGVuID8gJyNmNTllMGInIDogdmVyYldhcm4/LmxldmVsID09PSAncGFzc2l2ZScgPyAnI2ZlY2RkMycgOiB2ZXJiV2Fybj8ubGV2ZWwgPT09ICd3ZWFrJyA/ICcjZmRlNjhhJyA6ICcjZDFkNWRiJ307Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjAuOWVtO3Jlc2l6ZTp2ZXJ0aWNhbDtib3gtc2l6aW5nOmJvcmRlci1ib3g7JHtoaWRkZW4gPyAnYmFja2dyb3VuZDojZmZmYmViO2NvbG9yOiM5MjQwMGU7JyA6ICcnfVwiXG4gICAgICAgIG9uY2hhbmdlPVwidXBkYXRlQWNoaWV2ZW1lbnRUZXh0KCR7ZXhwSWR4fSwke2FjaElkeH0sdGhpcy52YWx1ZSlcIlxuICAgICAgICBvbmJsdXI9XCJ1cGRhdGVBY2hpZXZlbWVudFRleHQoJHtleHBJZHh9LCR7YWNoSWR4fSx0aGlzLnZhbHVlKVwiXG4gICAgICA+JHtlc2NhcGVIdG1sKHRleHQpfTwvdGV4dGFyZWE+XG4gICAgICAke3ZlcmJCYWRnZX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtwYWRkaW5nLXRvcDoycHg7XCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biAke2hpZGRlbiA/ICdhY3RpdmUnIDogJyd9XCIgdGl0bGU9XCIke2hpZGRlbiA/ICdTaG93IGJ1bGxldCBpbiBnZW5lcmF0ZWQgQ1YnIDogJ0hpZGUgYnVsbGV0IGZyb20gZ2VuZXJhdGVkIENWJ31cIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCIke2hpZGRlbiA/ICdTaG93IGJ1bGxldCBpbiBnZW5lcmF0ZWQgQ1YnIDogJ0hpZGUgYnVsbGV0IGZyb20gZ2VuZXJhdGVkIENWJ31cIiBhcmlhLXByZXNzZWQ9XCIke2hpZGRlbn1cIlxuICAgICAgICAgIG9uY2xpY2s9XCJ0b2dnbGVBY2hpZXZlbWVudEhpZGRlbigke2V4cElkeH0sJHthY2hJZHh9KVwiXG4gICAgICAgICAgc3R5bGU9XCJjb2xvcjoke2hpZGRlbiA/ICcjYjQ1MzA5JyA6ICcjNjQ3NDhiJ307XCI+JHtleWVTbGFzaEljb24oKX08L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgdGl0bGU9XCJBc2sgQUkgdG8gcmV3cml0ZVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkFzayBBSSB0byByZXdyaXRlIHRoaXMgYnVsbGV0XCJcbiAgICAgICAgICBvbmNsaWNrPVwicmV3cml0ZUFjaGlldmVtZW50V2l0aExMTSgke2V4cElkeH0sJHthY2hJZHh9KVwiXG4gICAgICAgICAgPlx1MjcyODwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiB0aXRsZT1cIkRlbGV0ZVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkRlbGV0ZSB0aGlzIGJ1bGxldFwiXG4gICAgICAgICAgb25jbGljaz1cImRlbGV0ZUFjaGlldmVtZW50KCR7ZXhwSWR4fSwke2FjaElkeH0pXCJcbiAgICAgICAgICBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7XCI+XHVEODNEXHVEREQxPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgfSkuam9pbignJyk7XG59XG5cbi8vIERlYm91bmNlIHRpbWVyIGZvciBhdXRvLXBlcnNpc3RpbmcgYWNoaWV2ZW1lbnQgdGV4dCBlZGl0cy5cbmxldCBfYWNoUGVyc2lzdFRpbWVyID0gbnVsbDtcblxuZnVuY3Rpb24gdXBkYXRlQWNoaWV2ZW1lbnRUZXh0KGV4cElkeCwgYWNoSWR4LCB2YWx1ZSkge1xuICBpZiAoIXdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF0pIHJldHVybjtcbiAgY29uc3QgZXhpc3RpbmcgPSBfbm9ybWFsaXplQWNoaWV2ZW1lbnRFZGl0RW50cnkod2luZG93LmFjaGlldmVtZW50RWRpdHNbZXhwSWR4XVthY2hJZHhdKTtcbiAgZXhpc3RpbmcudGV4dCA9IHZhbHVlO1xuICB3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdW2FjaElkeF0gPSBleGlzdGluZztcblxuICAvLyBEZWJvdW5jZS1wZXJzaXN0IHNvIGVkaXRzIHN1cnZpdmUgdGFiIG5hdmlnYXRpb24gYW5kIHN0YXR1cyBwb2xsaW5nLlxuICBjbGVhclRpbWVvdXQoX2FjaFBlcnNpc3RUaW1lcik7XG4gIF9hY2hQZXJzaXN0VGltZXIgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZmV0Y2goJy9hcGkvc2F2ZS1hY2hpZXZlbWVudC1lZGl0cycsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGVkaXRzOiB3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0cyB9KSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKF9lKSB7IC8qIHNpbGVudCBcdTIwMTQgdXNlciBzdGlsbCBoYXMgaW4tbWVtb3J5IHN0YXRlICovIH1cbiAgfSwgNTAwKTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlQWNoaWV2ZW1lbnRIaWRkZW4oZXhwSWR4LCBhY2hJZHgpIHtcbiAgaWYgKCF3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdKSByZXR1cm47XG4gIGNvbnN0IGV4aXN0aW5nID0gX25vcm1hbGl6ZUFjaGlldmVtZW50RWRpdEVudHJ5KHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF1bYWNoSWR4XSk7XG4gIGV4aXN0aW5nLmhpZGRlbiA9ICFleGlzdGluZy5oaWRkZW47XG4gIHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF1bYWNoSWR4XSA9IGV4aXN0aW5nO1xuICByZW5kZXJBY2hpZXZlbWVudEVkaXRvclJvd3MoZXhwSWR4KTtcbn1cblxuZnVuY3Rpb24gbW92ZUFjaGlldmVtZW50KGV4cElkeCwgYWNoSWR4LCBkaXIpIHtcbiAgY29uc3QgYWNocyA9IHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF07XG4gIGlmICghYWNocykgcmV0dXJuO1xuICBjb25zdCBuZXdJZHggPSBhY2hJZHggKyBkaXI7XG4gIGlmIChuZXdJZHggPCAwIHx8IG5ld0lkeCA+PSBhY2hzLmxlbmd0aCkgcmV0dXJuO1xuICAvLyBGbHVzaCBjdXJyZW50IHRleHRhcmVhIHZhbHVlIGJlZm9yZSBtb3ZpbmdcbiAgY29uc3QgdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgYWNoLXRleHQtJHtleHBJZHh9LSR7YWNoSWR4fWApO1xuICBpZiAodGEpIHVwZGF0ZUFjaGlldmVtZW50VGV4dChleHBJZHgsIGFjaElkeCwgdGEudmFsdWUpO1xuICBbYWNoc1thY2hJZHhdLCBhY2hzW25ld0lkeF1dID0gW2FjaHNbbmV3SWR4XSwgYWNoc1thY2hJZHhdXTtcbiAgcmVuZGVyQWNoaWV2ZW1lbnRFZGl0b3JSb3dzKGV4cElkeCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUFjaGlldmVtZW50KGV4cElkeCwgYWNoSWR4KSB7XG4gIGNvbnN0IGFjaHMgPSB3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdO1xuICBpZiAoIWFjaHMpIHJldHVybjtcbiAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgY29uZmlybURpYWxvZyhcbiAgICAnRGVsZXRlIHRoaXMgYnVsbGV0IGZyb20gdGhpcyBzZXNzaW9uPyBIaWRkZW4gYnVsbGV0cyByZW1haW4gYXZhaWxhYmxlIGZvciBsYXRlciBoYXJ2ZXN0LCBidXQgZGVsZXRlIHJlbW92ZXMgdGhlIGVkaXRlZCByb3cgZW50aXJlbHkuJyxcbiAgICB7IGNvbmZpcm1MYWJlbDogJ0RlbGV0ZScsIGNhbmNlbExhYmVsOiAnQ2FuY2VsJywgZGFuZ2VyOiB0cnVlIH0sXG4gICk7XG4gIGlmICghY29uZmlybWVkKSByZXR1cm47XG4gIGFjaHMuc3BsaWNlKGFjaElkeCwgMSk7XG4gIHJlbmRlckFjaGlldmVtZW50RWRpdG9yUm93cyhleHBJZHgpO1xufVxuXG5mdW5jdGlvbiBhZGRBY2hpZXZlbWVudFJvdyhleHBJZHgpIHtcbiAgaWYgKCF3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdKSB3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdID0gW107XG4gIHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzW2V4cElkeF0ucHVzaCh7IHRleHQ6ICcnLCBoaWRkZW46IGZhbHNlIH0pO1xuICByZW5kZXJBY2hpZXZlbWVudEVkaXRvclJvd3MoZXhwSWR4KTtcbiAgLy8gRm9jdXMgdGhlIG5ldyB0ZXh0YXJlYVxuICBjb25zdCBuZXdJZHggPSB3aW5kb3cuYWNoaWV2ZW1lbnRFZGl0c1tleHBJZHhdLmxlbmd0aCAtIDE7XG4gIGNvbnN0IHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGFjaC10ZXh0LSR7ZXhwSWR4fS0ke25ld0lkeH1gKTtcbiAgaWYgKHRhKSB0YS5mb2N1cygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXdyaXRlQWNoaWV2ZW1lbnRXaXRoTExNKGV4cElkeCwgYWNoSWR4KSB7XG4gIGNvbnN0IHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGFjaC10ZXh0LSR7ZXhwSWR4fS0ke2FjaElkeH1gKTtcbiAgaWYgKCF0YSkgcmV0dXJuO1xuICBjb25zdCBvcmlnaW5hbFRleHQgPSB0YS52YWx1ZS50cmltKCk7XG4gIGlmICghb3JpZ2luYWxUZXh0KSB7IHNob3dUb2FzdCgnUGxlYXNlIGVudGVyIGEgYnVsbGV0IGZpcnN0LicsICdlcnJvcicpOyByZXR1cm47IH1cblxuICBfcmV3cml0ZVN1Z2dlc3Rpb25IaXN0b3J5ID0gW107XG4gIF9sYXN0UmV3cml0ZUxvZ0lkID0gbnVsbDtcbiAgX29wZW5SZXdyaXRlTW9kYWwob3JpZ2luYWxUZXh0LCAnJywgbnVsbCwge1xuICAgIGV4cGVyaWVuY2VJbmRleDogZXhwSWR4LFxuICAgIGFjaGlldmVtZW50SW5kZXg6IGFjaElkeCxcbiAgICBvbkFjY2VwdDogYXN5bmMgKHN1Z2dlc3Rpb24pID0+IHtcbiAgICAgIHVwZGF0ZUFjaGlldmVtZW50VGV4dChleHBJZHgsIGFjaElkeCwgc3VnZ2VzdGlvbik7XG4gICAgICBpZiAodGEpIHRhLnZhbHVlID0gc3VnZ2VzdGlvbjtcbiAgICAgIF9yZWNvcmRSZXdyaXRlT3V0Y29tZSgnYWNjZXB0ZWQnLCBzdWdnZXN0aW9uKTtcbiAgICAgIHNob3dUb2FzdCgnQnVsbGV0IHVwZGF0ZWQuJyk7XG4gICAgfSxcbiAgfSk7XG4gIGF3YWl0IF9ydW5SZXdyaXRlKG9yaWdpbmFsVGV4dCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFpUmV3cml0ZVRvcExldmVsQWNoaWV2ZW1lbnQoYWNoSWQpIHtcbiAgY29uc3QgYWNoID0gKHdpbmRvdy5fYWNoaWV2ZW1lbnRzT3JkZXJlZCB8fCBbXSkuZmluZChhID0+IGEuaWQgPT09IGFjaElkKTtcbiAgaWYgKCFhY2gpIHJldHVybjtcbiAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gYWNoLmRlc2NyaXB0aW9uIHx8ICcnO1xuICBpZiAoIW9yaWdpbmFsVGV4dCkgeyBzaG93VG9hc3QoJ1BsZWFzZSBlbnRlciBhIGRlc2NyaXB0aW9uIGZpcnN0LicsICdlcnJvcicpOyByZXR1cm47IH1cblxuICBfcmV3cml0ZVN1Z2dlc3Rpb25IaXN0b3J5ID0gW107XG4gIF9sYXN0UmV3cml0ZUxvZ0lkID0gbnVsbDtcbiAgX29wZW5SZXdyaXRlTW9kYWwob3JpZ2luYWxUZXh0LCAnJywgbnVsbCwge1xuICAgIGV4cGVyaWVuY2VJbmRleDogbnVsbCxcbiAgICBvbkFjY2VwdDogYXN5bmMgKHN1Z2dlc3Rpb24pID0+IHtcbiAgICAgIGF3YWl0IHNhdmVUb3BMZXZlbEFjaGlldmVtZW50RmllbGQoYWNoSWQsICdkZXNjcmlwdGlvbicsIHN1Z2dlc3Rpb24pO1xuICAgICAgY29uc3QgZGVzY0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGFjaC1kZXNjLSR7Q1NTLmVzY2FwZShhY2hJZCl9YCk7XG4gICAgICBpZiAoZGVzY0VsKSBkZXNjRWwudmFsdWUgPSBzdWdnZXN0aW9uO1xuICAgICAgX3JlY29yZFJld3JpdGVPdXRjb21lKCdhY2NlcHRlZCcsIHN1Z2dlc3Rpb24pO1xuICAgICAgc2hvd1RvYXN0KCdBY2hpZXZlbWVudCB1cGRhdGVkLicpO1xuICAgIH0sXG4gIH0pO1xuICBhd2FpdCBfcnVuUmV3cml0ZShvcmlnaW5hbFRleHQpO1xufVxuXG5mdW5jdGlvbiBfb3BlblJld3JpdGVNb2RhbChvcmlnaW5hbFRleHQsIGN1cnJlbnRJbnN0cnVjdGlvbnMsIGN1cnJlbnRTdWdnZXN0aW9uLCBjYWxsYmFja3MpIHtcbiAgX3Jld3JpdGVDYWxsYmFja3MgPSBjYWxsYmFja3M7XG5cbiAgY29uc3Qgc3VnZ2VzdGVkSHRtbCA9IGN1cnJlbnRTdWdnZXN0aW9uICE9IG51bGxcbiAgICA/IGA8cCBpZD1cImFjaC1yZXdyaXRlLXN1Z2dlc3Rpb25cIiBzdHlsZT1cIm1hcmdpbjo0cHggMCAwO21pbi1oZWlnaHQ6Mi40ZW07XCI+JHtlc2NhcGVIdG1sKGN1cnJlbnRTdWdnZXN0aW9uKX08L3A+YFxuICAgIDogYDxwIGlkPVwiYWNoLXJld3JpdGUtc3VnZ2VzdGlvblwiIHN0eWxlPVwibWFyZ2luOjRweCAwIDA7bWluLWhlaWdodDoyLjRlbTtjb2xvcjojOWNhM2FmO2ZvbnQtc3R5bGU6aXRhbGljO1wiPlx1MjNGMyBHZW5lcmF0aW5nXHUyMDI2PC9wPmA7XG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FsZXJ0LW1vZGFsLXRpdGxlJykudGV4dENvbnRlbnQgPSAnXHUyNzI4IEFJIFJld3JpdGUnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWxlcnQtbW9kYWwtbWVzc2FnZScpLmlubmVySFRNTCA9IGBcbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxMHB4O1wiPlxuICAgICAgPHN0cm9uZz5PcmlnaW5hbDo8L3N0cm9uZz5cbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDttYXJnaW46NHB4IDAgMDtmb250LXN0eWxlOml0YWxpYztmb250LXNpemU6MC45MmVtO1wiPiR7ZXNjYXBlSHRtbChvcmlnaW5hbFRleHQpfTwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxMnB4O1wiPlxuICAgICAgPHN0cm9uZz5TdWdnZXN0ZWQ6PC9zdHJvbmc+XG4gICAgICAke3N1Z2dlc3RlZEh0bWx9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJhY2gtcmV3cml0ZS1pbnN0cnVjdGlvbnNcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MC45MmVtO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7XCI+SW5zdHJ1Y3Rpb25zIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2YjcyODA7XCI+KG9wdGlvbmFsKTwvc3Bhbj48L2xhYmVsPlxuICAgICAgPHRleHRhcmVhIGlkPVwiYWNoLXJld3JpdGUtaW5zdHJ1Y3Rpb25zXCJcbiAgICAgICAgcm93cz1cIjJcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gbWFrZSBpdCBtb3JlIGNvbmNpc2UsIGVtcGhhc2lzZSBsZWFkZXJzaGlwLCBhZGQgYSBtZXRyaWNcIlxuICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjAuOWVtO3Jlc2l6ZTp2ZXJ0aWNhbDtcIlxuICAgICAgPiR7ZXNjYXBlSHRtbChjdXJyZW50SW5zdHJ1Y3Rpb25zKX08L3RleHRhcmVhPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjhweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7XCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiIGlkPVwiYWNoLXJld3JpdGUtcmVqZWN0LWJ0blwiIG9uY2xpY2s9XCJfcmVjb3JkUmV3cml0ZU91dGNvbWUoJ3JlamVjdGVkJyk7IGNsb3NlQWxlcnRNb2RhbCgpXCI+UmVqZWN0PC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiIGlkPVwiYWNoLXJld3JpdGUtZ2VuZXJhdGUtYnRuXCI+R2VuZXJhdGU8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJjb250aW51ZS1idG5cIiAgaWQ9XCJhY2gtcmV3cml0ZS1hY2NlcHQtYnRuXCI+QWNjZXB0PC9idXR0b24+XG4gICAgPC9kaXY+YDtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWxlcnQtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHNldEluaXRpYWxGb2N1cygnYWxlcnQtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ2FsZXJ0LW1vZGFsLW92ZXJsYXknKTtcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLXJld3JpdGUtZ2VuZXJhdGUtYnRuJykub25jbGljayA9ICgpID0+IF9ydW5SZXdyaXRlKG9yaWdpbmFsVGV4dCk7XG5cbiAgX3VwZGF0ZVJld3JpdGVBY2NlcHRCdG4oY3VycmVudFN1Z2dlc3Rpb24pO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlUmV3cml0ZUFjY2VwdEJ0bihzdWdnZXN0aW9uKSB7XG4gIGNvbnN0IGFjY2VwdEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtcmV3cml0ZS1hY2NlcHQtYnRuJyk7XG4gIGlmICghYWNjZXB0QnRuKSByZXR1cm47XG4gIGFjY2VwdEJ0bi5kaXNhYmxlZCA9IHN1Z2dlc3Rpb24gPT0gbnVsbDtcbiAgYWNjZXB0QnRuLm9uY2xpY2sgPSBzdWdnZXN0aW9uID09IG51bGwgPyBudWxsIDogYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IF9yZXdyaXRlQ2FsbGJhY2tzLm9uQWNjZXB0KHN1Z2dlc3Rpb24pO1xuICAgIGNsb3NlQWxlcnRNb2RhbCgpO1xuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVjb3JkUmV3cml0ZU91dGNvbWUob3V0Y29tZSwgYWNjZXB0ZWRUZXh0KSB7XG4gIGlmICghX2xhc3RSZXdyaXRlTG9nSWQpIHJldHVybjtcbiAgY29uc3QgbG9nSWQgPSBfbGFzdFJld3JpdGVMb2dJZDtcbiAgX2xhc3RSZXdyaXRlTG9nSWQgPSBudWxsO1xuICBjb25zdCBib2R5ID0geyBsb2dfaWQ6IGxvZ0lkLCBvdXRjb21lIH07XG4gIGlmIChhY2NlcHRlZFRleHQgIT0gbnVsbCkgYm9keS5hY2NlcHRlZF90ZXh0ID0gYWNjZXB0ZWRUZXh0O1xuICB0cnkge1xuICAgIGF3YWl0IGZldGNoKCcvYXBpL3Jld3JpdGUtYWNoaWV2ZW1lbnQtb3V0Y29tZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoXykgeyAvKiBmaXJlLWFuZC1mb3JnZXQgXHUyMDE0IGRvbid0IGRpc3J1cHQgdGhlIFVJICovIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3J1blJld3JpdGUob3JpZ2luYWxUZXh0KSB7XG4gIGNvbnN0IGluc3RydWN0aW9uc0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaC1yZXdyaXRlLWluc3RydWN0aW9ucycpO1xuICBjb25zdCB1c2VySW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zRWwgPyBpbnN0cnVjdGlvbnNFbC52YWx1ZS50cmltKCkgOiAnJztcblxuICBjb25zdCBnZW5lcmF0ZUJ0biAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLXJld3JpdGUtZ2VuZXJhdGUtYnRuJyk7XG4gIGNvbnN0IGFjY2VwdEJ0biAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtcmV3cml0ZS1hY2NlcHQtYnRuJyk7XG4gIGNvbnN0IHJlamVjdEJ0biAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtcmV3cml0ZS1yZWplY3QtYnRuJyk7XG4gIGNvbnN0IHN1Z2dlc3Rpb25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtcmV3cml0ZS1zdWdnZXN0aW9uJyk7XG5cbiAgLy8gQ2FwdHVyZSB0aGUgY3VycmVudCBzdWdnZXN0aW9uIGFzIGEgcHJpb3IgYXR0ZW1wdCBiZWZvcmUgb3ZlcndyaXRpbmdcbiAgaWYgKHN1Z2dlc3Rpb25FbCkge1xuICAgIGNvbnN0IHByZXYgPSBzdWdnZXN0aW9uRWwudGV4dENvbnRlbnQudHJpbSgpO1xuICAgIGlmIChwcmV2ICYmIHByZXYgIT09ICdHZW5lcmF0aW5nXHUyMDI2JyAmJiAhcHJldi5zdGFydHNXaXRoKCdFcnJvcjonKSAmJiAhX3Jld3JpdGVTdWdnZXN0aW9uSGlzdG9yeS5pbmNsdWRlcyhwcmV2KSkge1xuICAgICAgX3Jld3JpdGVTdWdnZXN0aW9uSGlzdG9yeS5wdXNoKHByZXYpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChnZW5lcmF0ZUJ0bikgeyBnZW5lcmF0ZUJ0bi5kaXNhYmxlZCA9IHRydWU7IGdlbmVyYXRlQnRuLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz1cImJ0bi1zcGlubmVyXCI+PC9zcGFuPkdlbmVyYXRpbmdcXHUyMDI2JzsgfVxuICBpZiAoYWNjZXB0QnRuKSAgIHsgYWNjZXB0QnRuLmRpc2FibGVkID0gdHJ1ZTsgfVxuICBpZiAoc3VnZ2VzdGlvbkVsKSB7IHN1Z2dlc3Rpb25FbC5zdHlsZS5jb2xvciA9ICcjOWNhM2FmJzsgc3VnZ2VzdGlvbkVsLnN0eWxlLmZvbnRTdHlsZSA9ICdpdGFsaWMnOyBzdWdnZXN0aW9uRWwudGV4dENvbnRlbnQgPSAnR2VuZXJhdGluZ1x1MjAyNic7IH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3Jld3JpdGUtYWNoaWV2ZW1lbnQnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBhY2hpZXZlbWVudF90ZXh0OiAgICAgb3JpZ2luYWxUZXh0LFxuICAgICAgICBleHBlcmllbmNlX2luZGV4OiAgICAgX3Jld3JpdGVDYWxsYmFja3M/LmV4cGVyaWVuY2VJbmRleCA/PyBudWxsLFxuICAgICAgICBhY2hpZXZlbWVudF9pbmRleDogICAgX3Jld3JpdGVDYWxsYmFja3M/LmFjaGlldmVtZW50SW5kZXggPz8gbnVsbCxcbiAgICAgICAgdXNlcl9pbnN0cnVjdGlvbnM6ICAgIHVzZXJJbnN0cnVjdGlvbnMsXG4gICAgICAgIHByZXZpb3VzX3N1Z2dlc3Rpb25zOiBfcmV3cml0ZVN1Z2dlc3Rpb25IaXN0b3J5LFxuICAgICAgfSlcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKGRhdGEuZXJyb3IgfHwgJ1Jld3JpdGUgZmFpbGVkJyk7XG5cbiAgICBjb25zdCByZXdyaXR0ZW4gPSBkYXRhLnJld3JpdHRlbiB8fCAnJztcbiAgICBfbGFzdFJld3JpdGVMb2dJZCA9IGRhdGEubG9nX2lkIHx8IG51bGw7XG4gICAgaWYgKHN1Z2dlc3Rpb25FbCkge1xuICAgICAgc3VnZ2VzdGlvbkVsLnN0eWxlLmNvbG9yID0gJyc7XG4gICAgICBzdWdnZXN0aW9uRWwuc3R5bGUuZm9udFN0eWxlID0gJyc7XG4gICAgICBzdWdnZXN0aW9uRWwudGV4dENvbnRlbnQgPSByZXdyaXR0ZW47XG4gICAgfVxuICAgIF91cGRhdGVSZXdyaXRlQWNjZXB0QnRuKHJld3JpdHRlbik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzdWdnZXN0aW9uRWwpIHsgc3VnZ2VzdGlvbkVsLnN0eWxlLmNvbG9yID0gJyNlZjQ0NDQnOyBzdWdnZXN0aW9uRWwuc3R5bGUuZm9udFN0eWxlID0gJyc7IHN1Z2dlc3Rpb25FbC50ZXh0Q29udGVudCA9IGBFcnJvcjogJHtlcnIubWVzc2FnZX1gOyB9XG4gICAgc2hvd1RvYXN0KGBBSSByZXdyaXRlIGZhaWxlZDogJHtlcnIubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoZ2VuZXJhdGVCdG4pIHsgZ2VuZXJhdGVCdG4uZGlzYWJsZWQgPSBmYWxzZTsgZ2VuZXJhdGVCdG4udGV4dENvbnRlbnQgPSAnR2VuZXJhdGUnOyB9XG4gICAgaWYgKHJlamVjdEJ0bikgICB7IHJlamVjdEJ0bi5kaXNhYmxlZCA9IGZhbHNlOyB9XG4gIH1cbn1cblxuLyoqXG4gKiBTYXZlIGEgc2luZ2xlIGZpZWxkIG9mIGEgdG9wLWxldmVsIGFjaGlldmVtZW50IGluIHNlc3Npb24gc3RhdGUgYW5kIHVwZGF0ZSB0aGUgbG9jYWwgY2FjaGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNhdmVUb3BMZXZlbEFjaGlldmVtZW50RmllbGQoYWNoSWQsIGZpZWxkLCB2YWx1ZSkge1xuICBjb25zdCBhY2ggPSAod2luZG93Ll9hY2hpZXZlbWVudHNPcmRlcmVkIHx8IFtdKS5maW5kKGEgPT4gYS5pZCA9PT0gYWNoSWQpO1xuICBjb25zdCBwcmV2aW91cyA9IGFjaCA/IGFjaFtmaWVsZF0gOiB1bmRlZmluZWQ7XG4gIGlmIChhY2gpIGFjaFtmaWVsZF0gPSB2YWx1ZTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXZpZXctYWNoaWV2ZW1lbnQnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBpZDogYWNoSWQsIGZpZWxkLCB2YWx1ZSB9KSxcbiAgICB9KTtcbiAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKChhd2FpdCByZXMuanNvbigpKS5lcnJvciB8fCAnU2F2ZSBmYWlsZWQnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gUm9sbCBiYWNrIHRoZSBvcHRpbWlzdGljIHVwZGF0ZVxuICAgIGlmIChhY2ggJiYgcHJldmlvdXMgIT09IHVuZGVmaW5lZCkgYWNoW2ZpZWxkXSA9IHByZXZpb3VzO1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGQgPT09ICd0aXRsZScgPyBgYWNoLXRpdGxlLSR7Q1NTLmVzY2FwZShhY2hJZCl9YCA6IGBhY2gtZGVzYy0ke0NTUy5lc2NhcGUoYWNoSWQpfWApO1xuICAgIGlmIChlbCkgZWwudmFsdWUgPSBwcmV2aW91cyA/PyAnJztcbiAgICBzaG93VG9hc3QoYEZhaWxlZCB0byBzYXZlIGFjaGlldmVtZW50OiAke2Vyci5tZXNzYWdlfWAsICdlcnJvcicpO1xuICB9XG59XG5cbi8qKlxuICogSGlkZSBhIHRvcC1sZXZlbCBhY2hpZXZlbWVudCBmb3IgdGhpcyBzZXNzaW9uIGFmdGVyIGNvbmZpcm1hdGlvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsZXRlVG9wTGV2ZWxBY2hpZXZlbWVudChhY2hJZCkge1xuICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCBjb25maXJtRGlhbG9nKFxuICAgICdIaWRlIHRoaXMgYWNoaWV2ZW1lbnQgZm9yIHRoaXMgQ1Ygb25seT8gWW91IGNhbiByZXN0b3JlIGl0IGJ5IHN0YXJ0aW5nIG92ZXIgb3IgY2hhbmdpbmcgdGhlIHNlc3Npb24gc2VsZWN0aW9ucy4nLFxuICAgIHsgY29uZmlybUxhYmVsOiAnSGlkZScsIGNhbmNlbExhYmVsOiAnQ2FuY2VsJywgZGFuZ2VyOiB0cnVlIH0sXG4gICk7XG4gIGlmICghY29uZmlybWVkKSByZXR1cm47XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvcmV2aWV3LWFjaGlldmVtZW50Jywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgaWQ6IGFjaElkLCBhY3Rpb246ICdkZWxldGUnIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICB3aW5kb3cuX2FjaGlldmVtZW50c09yZGVyZWQgPSAod2luZG93Ll9hY2hpZXZlbWVudHNPcmRlcmVkIHx8IFtdKS5maWx0ZXIoYSA9PiBhLmlkICE9PSBhY2hJZCk7XG4gICAgICBkZWxldGUgd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zW2FjaElkXTtcbiAgICAgIF9yZW5kZXJBY2hpZXZlbWVudHNSZXZpZXdUYWJsZSgpO1xuICAgICAgc2hvd1RvYXN0KCdBY2hpZXZlbWVudCBoaWRkZW4gZm9yIHRoaXMgc2Vzc2lvbi4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd1RvYXN0KGRhdGEuZXJyb3IgfHwgJ0RlbGV0ZSBmYWlsZWQuJywgJ2Vycm9yJyk7XG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgc2hvd1RvYXN0KCdGYWlsZWQgdG8gZGVsZXRlIGFjaGlldmVtZW50LicsICdlcnJvcicpO1xuICB9XG59XG5cbi8qKlxuICogU2F2ZSBhbiBlZGl0ZWQgZmllbGQgb24gYW4gQUktc3VnZ2VzdGVkIGFjaGlldmVtZW50IChpbi1tZW1vcnkgb25seTtcbiAqIHN1Z2dlc3Rpb25zIGFyZSBub3QgcGVyc2lzdGVkIHRvIHRoZSBzZXJ2ZXIgdW50aWwgYWNjZXB0ZWQpLlxuICovXG5mdW5jdGlvbiBzYXZlU3VnZ2VzdGVkQWNoaWV2ZW1lbnRGaWVsZChzdWdnSWQsIGZpZWxkLCB2YWx1ZSkge1xuICBjb25zdCBzdWdnID0gKHdpbmRvdy5fc3VnZ2VzdGVkQWNoc09yZGVyZWQgfHwgW10pLmZpbmQocyA9PiBzLl9zdWdnSWQgPT09IHN1Z2dJZCk7XG4gIGlmIChzdWdnKSBzdWdnW2ZpZWxkXSA9IHZhbHVlO1xufVxuXG4vKipcbiAqIE9wZW4gdGhlIEFJIHJld3JpdGUgbW9kYWwgZm9yIGEgc3VnZ2VzdGVkIGFjaGlldmVtZW50IGRlc2NyaXB0aW9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBhaVJld3JpdGVTdWdnZXN0ZWRBY2hpZXZlbWVudChzdWdnSWQpIHtcbiAgY29uc3Qgc3VnZyA9ICh3aW5kb3cuX3N1Z2dlc3RlZEFjaHNPcmRlcmVkIHx8IFtdKS5maW5kKHMgPT4gcy5fc3VnZ0lkID09PSBzdWdnSWQpO1xuICBpZiAoIXN1Z2cpIHJldHVybjtcbiAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gc3VnZy5kZXNjcmlwdGlvbiB8fCAnJztcbiAgaWYgKCFvcmlnaW5hbFRleHQpIHsgc2hvd1RvYXN0KCdQbGVhc2UgZW50ZXIgYSBkZXNjcmlwdGlvbiBmaXJzdC4nLCAnZXJyb3InKTsgcmV0dXJuOyB9XG5cbiAgX3Jld3JpdGVTdWdnZXN0aW9uSGlzdG9yeSA9IFtdO1xuICBfbGFzdFJld3JpdGVMb2dJZCA9IG51bGw7XG4gIF9vcGVuUmV3cml0ZU1vZGFsKG9yaWdpbmFsVGV4dCwgJycsIG51bGwsIHtcbiAgICBleHBlcmllbmNlSW5kZXg6IG51bGwsXG4gICAgb25BY2NlcHQ6IGFzeW5jIChzdWdnZXN0aW9uKSA9PiB7XG4gICAgICBzYXZlU3VnZ2VzdGVkQWNoaWV2ZW1lbnRGaWVsZChzdWdnSWQsICdkZXNjcmlwdGlvbicsIHN1Z2dlc3Rpb24pO1xuICAgICAgY29uc3QgZGVzY0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGFjaC1kZXNjLSR7c3VnZ0lkfWApO1xuICAgICAgaWYgKGRlc2NFbCkgZGVzY0VsLnZhbHVlID0gc3VnZ2VzdGlvbjtcbiAgICAgIF9yZWNvcmRSZXdyaXRlT3V0Y29tZSgnYWNjZXB0ZWQnLCBzdWdnZXN0aW9uKTtcbiAgICAgIHNob3dUb2FzdCgnQWNoaWV2ZW1lbnQgdXBkYXRlZC4nKTtcbiAgICB9LFxuICB9KTtcbiAgYXdhaXQgX3J1blJld3JpdGUob3JpZ2luYWxUZXh0KTtcbn1cblxuLyoqXG4gKiBNb3ZlIGEgc3VnZ2VzdGVkIGFjaGlldmVtZW50IHVwIG9yIGRvd24gd2l0aGluIHRoZSBkaXNwbGF5IG9yZGVyLlxuICogU3RhYmxlIElEcyBtZWFuIG5vIGRlY2lzaW9uIHJlbWFwcGluZyBpcyBuZWVkZWQuXG4gKi9cbmZ1bmN0aW9uIG1vdmVTdWdnZXN0ZWRBY2hpZXZlbWVudFJvdyhzdWdnSWQsIGRpcmVjdGlvbikge1xuICBjb25zdCBhcnIgPSB3aW5kb3cuX3N1Z2dlc3RlZEFjaHNPcmRlcmVkO1xuICBpZiAoIWFycikgcmV0dXJuO1xuICBjb25zdCBpZHggPSBhcnIuZmluZEluZGV4KHMgPT4gcy5fc3VnZ0lkID09PSBzdWdnSWQpO1xuICBpZiAoaWR4IDwgMCkgcmV0dXJuO1xuICBjb25zdCBuZXdJZHggPSBpZHggKyBkaXJlY3Rpb247XG4gIGlmIChuZXdJZHggPCAwIHx8IG5ld0lkeCA+PSBhcnIubGVuZ3RoKSByZXR1cm47XG4gIFthcnJbaWR4XSwgYXJyW25ld0lkeF1dID0gW2FycltuZXdJZHhdLCBhcnJbaWR4XV07XG4gIF9yZW5kZXJBY2hpZXZlbWVudHNSZXZpZXdUYWJsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoaWV2ZW1lbnRzLXRhYmxlLWNvbnRhaW5lcicpKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBzdWdnZXN0ZWQgYWNoaWV2ZW1lbnQgZnJvbSB0aGUgbGlzdCBhZnRlciBjb25maXJtYXRpb24uXG4gKiBTdGFibGUgSURzIG1lYW4gbm8gb3RoZXIgZGVjaXNpb24ga2V5cyBuZWVkIHJlbWFwcGluZy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsZXRlU3VnZ2VzdGVkQWNoaWV2ZW1lbnQoc3VnZ0lkKSB7XG4gIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IGNvbmZpcm1EaWFsb2coJ1JlbW92ZSB0aGlzIEFJIHN1Z2dlc3Rpb24/JywgeyBjb25maXJtTGFiZWw6ICdSZW1vdmUnLCBkYW5nZXI6IHRydWUgfSk7XG4gIGlmICghY29uZmlybWVkKSByZXR1cm47XG4gIHdpbmRvdy5fc3VnZ2VzdGVkQWNoc09yZGVyZWQgPSAod2luZG93Ll9zdWdnZXN0ZWRBY2hzT3JkZXJlZCB8fCBbXSkuZmlsdGVyKHMgPT4gcy5fc3VnZ0lkICE9PSBzdWdnSWQpO1xuICBkZWxldGUgd2luZG93LmFjaGlldmVtZW50RGVjaXNpb25zW3N1Z2dJZF07XG4gIF9yZW5kZXJBY2hpZXZlbWVudHNSZXZpZXdUYWJsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoaWV2ZW1lbnRzLXRhYmxlLWNvbnRhaW5lcicpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZUFjaGlldmVtZW50RWRpdHNBbmRDb250aW51ZSgpIHtcbiAgdHJ5IHtcbiAgICAvLyBGbHVzaCBhbnkgY3VycmVudGx5LWZvY3VzZWQgdGV4dGFyZWFzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXj1cImFjaC10ZXh0LVwiXScpLmZvckVhY2godGEgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSB0YS5pZC5zcGxpdCgnLScpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSA0KSB7XG4gICAgICAgIGNvbnN0IGV4cElkeCA9IHBhcnNlSW50KHBhcnRzWzJdKTtcbiAgICAgICAgY29uc3QgYWNoSWR4ID0gcGFyc2VJbnQocGFydHNbM10pO1xuICAgICAgICBpZiAoIWlzTmFOKGV4cElkeCkgJiYgIWlzTmFOKGFjaElkeCkgJiYgd2luZG93LmFjaGlldmVtZW50RWRpdHNbZXhwSWR4XSkge1xuICAgICAgICAgIHVwZGF0ZUFjaGlldmVtZW50VGV4dChleHBJZHgsIGFjaElkeCwgdGEudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9zYXZlLWFjaGlldmVtZW50LWVkaXRzJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZWRpdHM6IHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzIH0pXG4gICAgfSk7XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIGNvbnN0IGVyciA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBzaG93VG9hc3QoYEVycm9yIHNhdmluZzogJHtlcnIuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWAsICdlcnJvcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGF0ZU1hbmFnZXIubWFya0NvbnRlbnRDaGFuZ2VkKCk7XG4gICAgc2hvd1RvYXN0KCdBY2hpZXZlbWVudCBlZGl0cyBzYXZlZC4nKTtcbiAgICBzd2l0Y2hUYWIoJ3NraWxscy1yZXZpZXcnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dUb2FzdCgnRmFpbGVkIHRvIHNhdmUgYWNoaWV2ZW1lbnQgZWRpdHMuJywgJ2Vycm9yJyk7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZmV0Y2hKc29uV2l0aFRpbWVvdXQsXG4gIF9hY2hWZXJiV2FybmluZyxcbiAgX2FjaFNuYXBzaG90S2V5LFxuICBfc2F2ZUFjaFNuYXBzaG90LFxuICBfZ2V0QWNoU25hcHNob3QsXG4gIGJ1aWxkQWNoaWV2ZW1lbnRzUmV2aWV3VGFibGUsXG4gIF9yZW5kZXJBY2hpZXZlbWVudHNSZXZpZXdUYWJsZSxcbiAgYnVsa0FjaGlldmVtZW50QWN0aW9uLFxuICBoYW5kbGVBY2hpZXZlbWVudEFjdGlvbixcbiAgc3VibWl0QWNoaWV2ZW1lbnREZWNpc2lvbnMsXG4gIG1vdmVBY2hpZXZlbWVudFJvdyxcbiAgYnVpbGRBY2hpZXZlbWVudHNFZGl0b3IsXG4gIHJlbmRlckFjaGlldmVtZW50RWRpdG9yUm93cyxcbiAgdXBkYXRlQWNoaWV2ZW1lbnRUZXh0LFxuICB0b2dnbGVBY2hpZXZlbWVudEhpZGRlbixcbiAgbW92ZUFjaGlldmVtZW50LFxuICBkZWxldGVBY2hpZXZlbWVudCxcbiAgYWRkQWNoaWV2ZW1lbnRSb3csXG4gIHJld3JpdGVBY2hpZXZlbWVudFdpdGhMTE0sXG4gIGFpUmV3cml0ZVRvcExldmVsQWNoaWV2ZW1lbnQsXG4gIF9vcGVuUmV3cml0ZU1vZGFsLFxuICBfdXBkYXRlUmV3cml0ZUFjY2VwdEJ0bixcbiAgX3JlY29yZFJld3JpdGVPdXRjb21lLFxuICBfcnVuUmV3cml0ZSxcbiAgc2F2ZVRvcExldmVsQWNoaWV2ZW1lbnRGaWVsZCxcbiAgZGVsZXRlVG9wTGV2ZWxBY2hpZXZlbWVudCxcbiAgc2F2ZVN1Z2dlc3RlZEFjaGlldmVtZW50RmllbGQsXG4gIGFpUmV3cml0ZVN1Z2dlc3RlZEFjaGlldmVtZW50LFxuICBtb3ZlU3VnZ2VzdGVkQWNoaWV2ZW1lbnRSb3csXG4gIGRlbGV0ZVN1Z2dlc3RlZEFjaGlldmVtZW50LFxuICBzYXZlQWNoaWV2ZW1lbnRFZGl0c0FuZENvbnRpbnVlLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3RhZ2xpbmUtcmV2aWV3LmpzXG4gKiBBcHBsaWNhbnQgdGFnbGluZSAoaGVhZGxpbmUpIHJldmlldzogZGlzcGxheSBBSS1wcm9wb3NlZCB0YWdsaW5lLFxuICogYWxsb3cgZWRpdGluZywgcmVxdWlyZSBleHBsaWNpdCB1c2VyIGNvbmZpcm1hdGlvbiBiZWZvcmUgY29udGludWluZy5cbiAqXG4gKiBUaGUgdGFnbGluZSBpcyB0aGUgb25lLWxpbmUgcHJvZmVzc2lvbmFsIGlkZW50aXR5IHNob3duIHVuZGVyIHRoZVxuICogYXBwbGljYW50J3MgbmFtZSBvbiB0aGUgQ1YuICBJdCBpcyBOT1QgdGhlIHNhbWUgYXMgdGhlIGpvYiB0aXRsZSBcdTIwMTRcbiAqIGl0IGRlc2NyaWJlcyB0aGUgYXBwbGljYW50IChlLmcuIFwiU2VuaW9yIERhdGEgU2NpZW50aXN0IHNwZWNpYWxpc2luZ1xuICogaW4gYmlvc3RhdGlzdGljcyBhbmQgTUxcIiksIG5vdCB0aGUgcm9sZSBiZWluZyBhcHBsaWVkIGZvci5cbiAqXG4gKiBVc2VyIE1VU1QgY2xpY2sgXCJDb25maXJtIFRhZ2xpbmVcIiBiZWZvcmUgZ2VuZXJhdGlvbiBpcyBhbGxvd2VkLlxuICogVGhlIGNvbmZpcm1lZCB0ZXh0IGlzIHN0b3JlZCB2aWEgUE9TVCAvYXBpL3Jldmlldy1kZWNpc2lvbnMgKHR5cGU6ICd0YWdsaW5lJykuXG4gKlxuICogRGVwZW5kZW5jaWVzIChyZXNvbHZlZCB0aHJvdWdoIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIGVzY2FwZUh0bWwsIHNob3dUb2FzdCwgc3dpdGNoVGFiLCBzdGF0ZU1hbmFnZXJcbiAqL1xuXG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuXG4vLyBcdTI1MDBcdTI1MDAgQnVpbGQgdGFnbGluZS1yZXZpZXcgc2VjdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBkdWNrZmxvdzpcbiAqICAgaWQ6IHRhZ2xpbmVfdWlfYnVpbGRcbiAqICAga2luZDogdWlcbiAqICAgdGltZXN0YW1wOiBcIjIwMjYtMDUtMjhUMDA6MDA6MDBaXCJcbiAqICAgc3RhdHVzOiBsaXZlXG4gKiAgIGhhbmRsZXM6IFtcInVpOnRhZ2xpbmUtcmV2aWV3LmJ1aWxkXCJdXG4gKiAgIHJlYWRzOlxuICogICAgIC0gXCJ3aW5kb3c6cGVuZGluZ1JlY29tbWVuZGF0aW9uc1wiXG4gKiAgICAgLSBcInJlc3BvbnNlOkdFVCAvYXBpL3N0YXR1cy50YWdsaW5lX292ZXJyaWRlXCJcbiAqICAgICAtIFwicmVzcG9uc2U6R0VUIC9hcGkvc3RhdHVzLmRlY2lzaW9uc19jb25maXJtZWRcIlxuICogICB3cml0ZXM6IFtcImRvbTojdGFnbGluZS1yZXZpZXctY29udGFpbmVyXCJdXG4gKiAgIG5vdGVzOiBcIlJlbmRlcnMgcHJvcG9zZWQgdGFnbGluZSAoZnJvbSBMTE0gY3VzdG9taXphdGlvbnMpIHdpdGggYW4gZWRpdGFibGUgaW5wdXQgYW5kIGNvbmZpcm0gYnV0dG9uLlwiXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkVGFnbGluZVJldmlld1NlY3Rpb24oKSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdsaW5lLXJldmlldy1jb250YWluZXInKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAvLyBGZXRjaCBjdXJyZW50IHN0YXR1cyB0byBnZXQgdGFnbGluZV9vdmVycmlkZSArIHByb3Bvc2VkIHRhZ2xpbmVcbiAgbGV0IHByb3Bvc2VkVGFnbGluZSAgPSAnJztcbiAgbGV0IGNvbmZpcm1lZFRhZ2xpbmUgPSAnJztcbiAgbGV0IGFscmVhZHlDb25maXJtZWQgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgICA9IGF3YWl0IGZldGNoKCcvYXBpL3N0YXR1cycpO1xuICAgIGNvbnN0IHN0YXR1cyA9IHJlcy5vayA/IGF3YWl0IHJlcy5qc29uKCkgOiB7fTtcblxuICAgIC8vIHRhZ2xpbmVfb3ZlcnJpZGUgaXMgdGhlIHVzZXItY29uZmlybWVkIHZhbHVlIChtYXkgYmUgbnVsbClcbiAgICBjb25maXJtZWRUYWdsaW5lID0gc3RhdHVzLnRhZ2xpbmVfb3ZlcnJpZGUgfHwgJyc7XG4gICAgYWxyZWFkeUNvbmZpcm1lZCA9ICEhKHN0YXR1cy5kZWNpc2lvbnNfY29uZmlybWVkICYmIHN0YXR1cy5kZWNpc2lvbnNfY29uZmlybWVkLnRhZ2xpbmUpO1xuXG4gICAgLy8gUHJvcG9zZWQgdGFnbGluZSBmcm9tIHRoZSBMTE0gcmVjb21tZW5kYXRpb25zXG4gICAgY29uc3QgY3VzdG9taXphdGlvbnMgPSBzdGF0dXMuY3VzdG9taXphdGlvbnMgfHwge307XG4gICAgcHJvcG9zZWRUYWdsaW5lID0gY3VzdG9taXphdGlvbnMuYXBwbGljYW50X3RhZ2xpbmUgfHwgJyc7XG4gIH0gY2F0Y2ggKF9lKSB7XG4gICAgLy8gTmV0d29yayBmYWlsdXJlIFx1MjAxNCBsZWF2ZSBmaWVsZHMgZW1wdHksIHVzZXIgY2FuIHN0aWxsIHR5cGUgbWFudWFsbHlcbiAgfVxuXG4gIGNvbnN0IGluaXRpYWwgICA9IGNvbmZpcm1lZFRhZ2xpbmUgfHwgcHJvcG9zZWRUYWdsaW5lO1xuICBjb25zdCBzdGF0dXNNc2cgPSBhbHJlYWR5Q29uZmlybWVkXG4gICAgPyAnPHNwYW4gc3R5bGU9XCJjb2xvcjojMDY1ZjQ2O2ZvbnQtd2VpZ2h0OjYwMDtcIj5cdTI3MTMgQ29uZmlybWVkPC9zcGFuPidcbiAgICA6ICc8c3BhbiBzdHlsZT1cImNvbG9yOiM5MjQwMGU7XCI+UmVxdWlyZXMgeW91ciBjb25maXJtYXRpb24gYmVmb3JlIGdlbmVyYXRpbmc8L3NwYW4+JztcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE2cHg7XCI+XG4gICAgICA8cCBzdHlsZT1cImNvbG9yOiMzNzQxNTE7Zm9udC1zaXplOjAuOTVlbTtsaW5lLWhlaWdodDoxLjY7bWFyZ2luOjAgMCA4cHg7XCI+XG4gICAgICAgIFRoZSA8c3Ryb25nPnRhZ2xpbmU8L3N0cm9uZz4gYXBwZWFycyBkaXJlY3RseSB1bmRlciB5b3VyIG5hbWUgb24gdGhlIENWLlxuICAgICAgICBJdCBzaG91bGQgZGVzY3JpYmUgPGVtPndobyB5b3UgYXJlPC9lbT4gYXMgYSBwcm9mZXNzaW9uYWwgXHUyMDE0IG5vdCB0aGUgam9iIHRpdGxlIHlvdSBhcmUgYXBwbHlpbmcgZm9yLlxuICAgICAgPC9wPlxuICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luOjA7XCI+XG4gICAgICAgIEV4YW1wbGU6IDxlbT5cIlNlbmlvciBEYXRhIFNjaWVudGlzdCBzcGVjaWFsaXNpbmcgaW4gYmlvc3RhdGlzdGljcyBhbmQgbWFjaGluZSBsZWFybmluZ1wiPC9lbT5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNkMWZhZTU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MjBweDtiYWNrZ3JvdW5kOiNmMGZkZjQ7XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O21hcmdpbi1ib3R0b206MTBweDtcIj5cbiAgICAgICAgPHN0cm9uZyBzdHlsZT1cImNvbG9yOiMwNjVmNDY7XCI+QXBwbGljYW50IFRhZ2xpbmU8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4gaWQ9XCJ0YWdsaW5lLWNvbmZpcm0tc3RhdHVzXCIgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO1wiPiR7c3RhdHVzTXNnfTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bGFiZWwgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMzc0MTUxO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7XCJcbiAgICAgICAgICAgICBmb3I9XCJ0YWdsaW5lLWlucHV0XCI+XG4gICAgICAgIEVkaXQgdGFnbGluZSAocmVxdWlyZWQpOlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxpbnB1dCBpZD1cInRhZ2xpbmUtaW5wdXRcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgIHZhbHVlPVwiJHtlc2NhcGVIdG1sKGluaXRpYWwpfVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBTZW5pb3IgRGF0YSBTY2llbnRpc3Qgc3BlY2lhbGlzaW5nIGluIGJpb3N0YXRpc3RpY3MgYW5kIE1MXCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC45NWVtO1wiXG4gICAgICAgIG9uaW5wdXQ9XCJvblRhZ2xpbmVJbnB1dENoYW5nZSgpXCIgLz5cblxuICAgICAgJHtwcm9wb3NlZFRhZ2xpbmUgJiYgcHJvcG9zZWRUYWdsaW5lICE9PSBjb25maXJtZWRUYWdsaW5lID8gYFxuICAgICAgPHAgc3R5bGU9XCJtYXJnaW46NnB4IDAgMDtmb250LXNpemU6MC44ZW07Y29sb3I6IzZiNzI4MDtcIj5cbiAgICAgICAgQUkgcHJvcG9zZWQ6IDxlbT4ke2VzY2FwZUh0bWwocHJvcG9zZWRUYWdsaW5lKX08L2VtPlxuICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJyZXNldFRhZ2xpbmVUb1Byb3Bvc2VkKClcIiBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojMjU2M2ViO2ZvbnQtc2l6ZTowLjhlbTtwYWRkaW5nOjAgNHB4O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCI+VXNlIHRoaXM8L2J1dHRvbj5cbiAgICAgIDwvcD5gIDogJyd9XG5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjEycHg7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJ0YWdsaW5lLWNvbmZpcm0tYnRuXCIgY2xhc3M9XCJzdWJtaXQtYnRuXCIgc3R5bGU9XCJmb250LXNpemU6MC45ZW07cGFkZGluZzo4cHggMjBweDtiYWNrZ3JvdW5kOiMxMGI5ODE7XCJcbiAgICAgICAgICBvbmNsaWNrPVwiY29uZmlybVRhZ2xpbmUoKVwiPlxuICAgICAgICAgIFx1MjcxMyBDb25maXJtIFRhZ2xpbmVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgICR7YWxyZWFkeUNvbmZpcm1lZCA/ICc8c3BhbiBpZD1cInRhZ2xpbmUtY29uZmlybWVkLWJhZGdlXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDoxMHB4O2ZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzA2NWY0NjtcIj5TYXZlZCBcdTI3MTM8L3NwYW4+JyA6ICc8c3BhbiBpZD1cInRhZ2xpbmUtY29uZmlybWVkLWJhZGdlXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7bWFyZ2luLWxlZnQ6MTBweDtmb250LXNpemU6MC44NWVtO2NvbG9yOiMwNjVmNDY7XCI+U2F2ZWQgXHUyNzEzPC9zcGFuPid9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJuYXYtYnV0dG9uc1wiIHN0eWxlPVwibWFyZ2luLXRvcDoxNnB4O1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhY2stYnRuXCIgb25jbGljaz1cInN3aXRjaFRhYignYWNoaWV2ZW1lbnRzLXJldmlldycpXCI+XHUyMTkwIEJhY2sgdG8gQWNoaWV2ZW1lbnRzPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGlkPVwidGFnbGluZS1jb250aW51ZS1idG5cIiBjbGFzcz1cImNvbnRpbnVlLWJ0blwiXG4gICAgICAgIHN0eWxlPVwiJHthbHJlYWR5Q29uZmlybWVkID8gJycgOiAnb3BhY2l0eTowLjU7Y3Vyc29yOm5vdC1hbGxvd2VkOyd9XCJcbiAgICAgICAgb25jbGljaz1cInRhZ2xpbmVDb250aW51ZSgpXCJcbiAgICAgICAgJHthbHJlYWR5Q29uZmlybWVkID8gJycgOiAndGl0bGU9XCJQbGVhc2UgY29uZmlybSB0aGUgdGFnbGluZSBiZWZvcmUgY29udGludWluZ1wiJ30+XG4gICAgICAgIENvbnRpbnVlIHRvIFN1bW1hcnkgXHUyMTkyXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5gO1xuXG4gIC8vIEV4cG9zZSBwcm9wb3NlZCB0YWdsaW5lIGZvciB0aGUgcmVzZXQgYnV0dG9uXG4gIHdpbmRvdy5fcHJvcG9zZWRUYWdsaW5lID0gcHJvcG9zZWRUYWdsaW5lO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgSW5wdXQgY2hhbmdlIGhhbmRsZXIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIG9uVGFnbGluZUlucHV0Q2hhbmdlKCkge1xuICAvLyBXaGVuIHVzZXIgZWRpdHMgdGhlIHRleHQsIHVuLWNvbmZpcm0gdGhlIHByZXZpb3VzIHNhdmUgc28gdGhleSBtdXN0IHJlLWNvbmZpcm1cbiAgY29uc3QgYmFkZ2UgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdsaW5lLWNvbmZpcm1lZC1iYWRnZScpO1xuICBjb25zdCBzdGF0dXNTcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ2xpbmUtY29uZmlybS1zdGF0dXMnKTtcbiAgaWYgKGJhZGdlKSAgICAgIGJhZGdlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGlmIChzdGF0dXNTcGFuKSBzdGF0dXNTcGFuLmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT1cImNvbG9yOiM5MjQwMGU7XCI+UmVxdWlyZXMgeW91ciBjb25maXJtYXRpb24gYmVmb3JlIGdlbmVyYXRpbmc8L3NwYW4+JztcbiAgY29uc3QgY29udGludWVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnbGluZS1jb250aW51ZS1idG4nKTtcbiAgaWYgKGNvbnRpbnVlQnRuKSB7XG4gICAgY29udGludWVCdG4uc3R5bGUub3BhY2l0eSAgICAgICA9ICcwLjUnO1xuICAgIGNvbnRpbnVlQnRuLnN0eWxlLmN1cnNvciAgICAgICAgPSAnbm90LWFsbG93ZWQnO1xuICAgIGNvbnRpbnVlQnRuLnRpdGxlICAgICAgICAgICAgICAgPSAnUGxlYXNlIGNvbmZpcm0gdGhlIHRhZ2xpbmUgYmVmb3JlIGNvbnRpbnVpbmcnO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZXNldCB0byBBSS1wcm9wb3NlZCB0YWdsaW5lIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiByZXNldFRhZ2xpbmVUb1Byb3Bvc2VkKCkge1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdsaW5lLWlucHV0Jyk7XG4gIGlmIChpbnB1dCAmJiB3aW5kb3cuX3Byb3Bvc2VkVGFnbGluZSkge1xuICAgIGlucHV0LnZhbHVlID0gd2luZG93Ll9wcm9wb3NlZFRhZ2xpbmU7XG4gICAgb25UYWdsaW5lSW5wdXRDaGFuZ2UoKTtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgQ29uZmlybSBhbmQgcGVyc2lzdCB0YWdsaW5lIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG4vKipcbiAqIGR1Y2tmbG93OlxuICogICBpZDogdGFnbGluZV91aV9jb25maXJtXG4gKiAgIGtpbmQ6IHVpXG4gKiAgIHRpbWVzdGFtcDogXCIyMDI2LTA1LTI4VDAwOjAwOjAwWlwiXG4gKiAgIHN0YXR1czogbGl2ZVxuICogICBoYW5kbGVzOiBbXCJ1aTp0YWdsaW5lLXJldmlldy5jb25maXJtXCJdXG4gKiAgIGNhbGxzOiBbXCJQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9uc1wiXVxuICogICByZWFkczogW1wiZG9tOiN0YWdsaW5lLWlucHV0XCJdXG4gKiAgIHdyaXRlczpcbiAqICAgICAtIFwicmVxdWVzdDpQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9ucy50eXBlPXRhZ2xpbmVcIlxuICogICAgIC0gXCJyZXF1ZXN0OlBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zLmRlY2lzaW9uc1wiXG4gKiAgIG5vdGVzOiBcIlBPU1RzIHRoZSBjb25maXJtZWQgdGFnbGluZSB0ZXh0OyBlbmFibGVzIHRoZSBjb250aW51ZSBidXR0b24gb24gc3VjY2Vzcy5cIlxuICovXG5hc3luYyBmdW5jdGlvbiBjb25maXJtVGFnbGluZSgpIHtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnbGluZS1pbnB1dCcpO1xuICBpZiAoIWlucHV0KSByZXR1cm47XG5cbiAgY29uc3QgdGFnbGluZVRleHQgPSBpbnB1dC52YWx1ZS50cmltKCk7XG4gIGlmICghdGFnbGluZVRleHQpIHtcbiAgICBzaG93VG9hc3QoJ1BsZWFzZSBlbnRlciBhIHRhZ2xpbmUgYmVmb3JlIGNvbmZpcm1pbmcuJywgJ2Vycm9yJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ2xpbmUtY29uZmlybS1idG4nKTtcbiAgaWYgKGJ0bikgYnRuLmRpc2FibGVkID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvcmV2aWV3LWRlY2lzaW9ucycsIHtcbiAgICAgIG1ldGhvZDogICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogICAgSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAndGFnbGluZScsIGRlY2lzaW9uczogdGFnbGluZVRleHQgfSksXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCBlcnIgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgICBzaG93VG9hc3QoYEZhaWxlZCB0byBzYXZlIHRhZ2xpbmU6ICR7ZXJyLmVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c1RleHR9YCwgJ2Vycm9yJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIFVJIHRvIHNob3cgY29uZmlybWVkIHN0YXRlXG4gICAgY29uc3QgYmFkZ2UgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdsaW5lLWNvbmZpcm1lZC1iYWRnZScpO1xuICAgIGNvbnN0IHN0YXR1c1NwYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnbGluZS1jb25maXJtLXN0YXR1cycpO1xuICAgIGlmIChiYWRnZSkgICAgICB7IGJhZGdlLnN0eWxlLmRpc3BsYXkgPSAnJzsgfVxuICAgIGlmIChzdGF0dXNTcGFuKSB7IHN0YXR1c1NwYW4uaW5uZXJIVE1MID0gJzxzcGFuIHN0eWxlPVwiY29sb3I6IzA2NWY0Njtmb250LXdlaWdodDo2MDA7XCI+XHUyNzEzIENvbmZpcm1lZDwvc3Bhbj4nOyB9XG5cbiAgICBjb25zdCBjb250aW51ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdsaW5lLWNvbnRpbnVlLWJ0bicpO1xuICAgIGlmIChjb250aW51ZUJ0bikge1xuICAgICAgY29udGludWVCdG4uc3R5bGUub3BhY2l0eSA9ICcnO1xuICAgICAgY29udGludWVCdG4uc3R5bGUuY3Vyc29yICA9ICcnO1xuICAgICAgY29udGludWVCdG4udGl0bGUgICAgICAgICA9ICcnO1xuICAgIH1cblxuICAgIHN0YXRlTWFuYWdlci5tYXJrQ29udGVudENoYW5nZWQoKTtcbiAgICBzaG93VG9hc3QoJ1RhZ2xpbmUgY29uZmlybWVkLicpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2hvd1RvYXN0KCdOZXR3b3JrIGVycm9yIHNhdmluZyB0YWdsaW5lLicsICdlcnJvcicpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChidG4pIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBDb250aW51ZSBuYXZpZ2F0aW9uIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiB0YWdsaW5lQ29udGludWUoKSB7XG4gIC8vIEd1YXJkOiBtdXN0IGJlIGNvbmZpcm1lZCBiZWZvcmUgcHJvY2VlZGluZ1xuICBjb25zdCBjb250aW51ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdsaW5lLWNvbnRpbnVlLWJ0bicpO1xuICBpZiAoY29udGludWVCdG4gJiYgY29udGludWVCdG4uc3R5bGUuY3Vyc29yID09PSAnbm90LWFsbG93ZWQnKSB7XG4gICAgc2hvd1RvYXN0KCdQbGVhc2UgY29uZmlybSB0aGUgdGFnbGluZSBiZWZvcmUgY29udGludWluZy4nLCAnZXJyb3InKTtcbiAgICByZXR1cm47XG4gIH1cbiAgc3dpdGNoVGFiKCdzdW1tYXJ5LXJldmlldycpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgRXhwb3J0cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHtcbiAgYnVpbGRUYWdsaW5lUmV2aWV3U2VjdGlvbixcbiAgb25UYWdsaW5lSW5wdXRDaGFuZ2UsXG4gIHJlc2V0VGFnbGluZVRvUHJvcG9zZWQsXG4gIGNvbmZpcm1UYWdsaW5lLFxuICB0YWdsaW5lQ29udGludWUsXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvc3VtbWFyeS1yZXZpZXcuanNcbiAqIFN1bW1hcnktZm9jdXMgc2VsZWN0aW9uOiBBSSBnZW5lcmF0aW9uLCBzdG9yZWQgdmFyaWFudHMsIHN1Ym1pdCBkZWNpc2lvbi5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgcGVuZGluZ1JlY29tbWVuZGF0aW9ucywgc2VsZWN0ZWRTdW1tYXJ5S2V5LCBfYWlHZW5lcmF0ZWRTdW1tYXJ5LFxuICogICBlc2NhcGVIdG1sLCBzaG93VG9hc3QsIHN3aXRjaFRhYiwgc2V0TG9hZGluZywgc2NoZWR1bGVBdHNSZWZyZXNoXG4gKi9cblxuaW1wb3J0IHsgc3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi9zdGF0ZS1tYW5hZ2VyLmpzJztcblxuLy8gXHUyNTAwXHUyNTAwIEJ1aWxkIHN1bW1hcnktZm9jdXMgc2VjdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBkdWNrZmxvdzpcbiAqICAgaWQ6IHN1bW1hcnlfdWlfYnVpbGRcbiAqICAga2luZDogdWlcbiAqICAgdGltZXN0YW1wOiBcIjIwMjYtMDMtMjdUMDE6MjM6MjhaXCJcbiAqICAgc3RhdHVzOiBzaGFyZWRcbiAqICAgaGFuZGxlczogW1widWk6c3VtbWFyeS1yZXZpZXcuYnVpbGRcIl1cbiAqICAgY2FsbHM6IFtcIkdFVCAvYXBpL21hc3Rlci1maWVsZHNcIiwgXCJHRVQgL2FwaS9zdGF0dXNcIiwgXCJ1aTpzdW1tYXJ5LXJldmlldy5nZW5lcmF0ZVwiXVxuICogICByZWFkczpcbiAqICAgICAtIFwid2luZG93OnBlbmRpbmdSZWNvbW1lbmRhdGlvbnNcIlxuICogICAgIC0gXCJyZXNwb25zZTpHRVQgL2FwaS9tYXN0ZXItZmllbGRzLnByb2Zlc3Npb25hbF9zdW1tYXJpZXNcIlxuICogICAgIC0gXCJyZXNwb25zZTpHRVQgL2FwaS9zdGF0dXMucHJvZmVzc2lvbmFsX3N1bW1hcmllc1wiXG4gKiAgICAgLSBcInN0YXRlOnNlc3Npb25fc3VtbWFyaWVzLmFpX2dlbmVyYXRlZFwiXG4gKiAgIHdyaXRlczogW1wiZG9tOiNzdW1tYXJ5LWZvY3VzLWNvbnRhaW5lclwiLCBcIndpbmRvdzpzZWxlY3RlZFN1bW1hcnlLZXlcIl1cbiAqICAgbm90ZXM6IFwiQnVpbGRzIHRoZSBzdW1tYXJ5IHJldmlldyBVSSBmcm9tIG1hc3RlciB2YXJpYW50cyBwbHVzIHNlc3Npb24gb3ZlcnJpZGVzIGFuZCBzZWVkcyB0aGUgc2VsZWN0ZWQga2V5LlwiXG4gKi9cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRTdW1tYXJ5Rm9jdXNTZWN0aW9uKCkge1xuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtbWFyeS1mb2N1cy1jb250YWluZXInKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICBjb25zdCBkYXRhID0gd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnM7XG5cbiAgLy8gXHUyNTAwXHUyNTAwIExvYWQgYWxsIGtub3duIHN1bW1hcmllcyAobWFzdGVyIGJhc2UgKyBzZXNzaW9uIG92ZXJyaWRlcykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIC8vIEZldGNoIG1hc3RlciBmaWVsZHMgYW5kIHN0YXR1cyBpbiBwYXJhbGxlbDsgc2Vzc2lvbiBzdW1tYXJpZXMgb3ZlcndyaXRlIG1hc3RlciB2YXJpYW50cy5cbiAgbGV0IHByb2Zlc3Npb25hbFN1bW1hcmllcyA9IHt9O1xuICBjb25zdCBbbWZSZXN1bHQsIHN0YXR1c1Jlc3VsdF0gPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgIGZldGNoKCcvYXBpL21hc3Rlci1maWVsZHMnKS50aGVuKHIgPT4gci5qc29uKCkpLFxuICAgIGZldGNoKCcvYXBpL3N0YXR1cycpLnRoZW4ociA9PiByLmpzb24oKSksXG4gIF0pO1xuICBpZiAobWZSZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBtZlJlc3VsdC52YWx1ZSAmJiBtZlJlc3VsdC52YWx1ZS5vaykge1xuICAgIE9iamVjdC5hc3NpZ24ocHJvZmVzc2lvbmFsU3VtbWFyaWVzLCBtZlJlc3VsdC52YWx1ZS5wcm9mZXNzaW9uYWxfc3VtbWFyaWVzIHx8IHt9KTtcbiAgfVxuICBpZiAoc3RhdHVzUmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgJiYgc3RhdHVzUmVzdWx0LnZhbHVlKSB7XG4gICAgLy8gU2Vzc2lvbiBzdW1tYXJpZXMgKGUuZy4gYWlfZ2VuZXJhdGVkKSBvdmVyd3JpdGUgbWFzdGVyIHZhcmlhbnRzXG4gICAgT2JqZWN0LmFzc2lnbihwcm9mZXNzaW9uYWxTdW1tYXJpZXMsIHN0YXR1c1Jlc3VsdC52YWx1ZS5wcm9mZXNzaW9uYWxfc3VtbWFyaWVzIHx8IHt9KTtcbiAgfVxuXG4gIC8vIFx1MjUwMFx1MjUwMCBTdWdnZXN0ZWQgY29udGVudCByZW9yZGVyaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICBjb25zdCByZW9yZGVyaW5nVGV4dCA9IChkYXRhICYmIGRhdGEuc3VnZ2VzdGVkX2NvbnRlbnRfcmVvcmRlcmluZykgfHwgJyc7XG4gIGNvbnN0IHJlb3JkZXJpbmdIVE1MID0gcmVvcmRlcmluZ1RleHRcbiAgICA/IGA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZWZmNmZmO2JvcmRlcjoxcHggc29saWQgI2JmZGJmZTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEycHg7bWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgICA8c3Ryb25nIHN0eWxlPVwiY29sb3I6IzFlNDBhZjtcIj5cdUQ4M0RcdURDQ0IgU3VnZ2VzdGVkIENvbnRlbnQgT3JkZXI6PC9zdHJvbmc+XG4gICAgICAgIDxwIHN0eWxlPVwibWFyZ2luOjZweCAwIDA7Y29sb3I6IzFlM2E4YTtmb250LXNpemU6MC45ZW07d2hpdGUtc3BhY2U6cHJlLWxpbmU7XCI+JHtlc2NhcGVIdG1sKHJlb3JkZXJpbmdUZXh0KX08L3A+XG4gICAgICAgPC9kaXY+YFxuICAgIDogJyc7XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFJlbmRlciBza2VsZXRvbiB3aGlsZSB3ZSBnZW5lcmF0ZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgY29udGFpbmVyLmlubmVySFRNTCA9IGBcbiAgICAke3Jlb3JkZXJpbmdIVE1MfVxuICAgIDxkaXYgaWQ9XCJhaS1zdW1tYXJ5LXBhbmVsXCIgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNkMWZhZTU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MjBweDtiYWNrZ3JvdW5kOiNmMGZkZjQ7XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O21hcmdpbi1ib3R0b206MTBweDtcIj5cbiAgICAgICAgPHN0cm9uZyBzdHlsZT1cImNvbG9yOiMwNjVmNDY7XCI+XHVEODNFXHVERDE2IEFJLVByb3Bvc2VkIFN1bW1hcnk8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4gaWQ9XCJhaS1zdW1tYXJ5LXN0YXR1c1wiIHN0eWxlPVwiZm9udC1zaXplOjAuOGVtO2NvbG9yOiM2YjcyODA7XCI+R2VuZXJhdGluZ1x1MjAyNjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cImFpLXN1bW1hcnktbG9hZGluZ1wiIHN0eWxlPVwiZm9udC1zaXplOjAuOWVtO2NvbG9yOiM5Y2EzYWY7bWluLWhlaWdodDo0MHB4O1wiPjxlbT5HZW5lcmF0aW5nIGEgdGFpbG9yZWQgc3VtbWFyeSBmb3IgdGhpcyBhcHBsaWNhdGlvblx1MjAyNjwvZW0+PC9kaXY+XG4gICAgICA8dGV4dGFyZWEgaWQ9XCJhaS1zdW1tYXJ5LXRleHRcIiByb3dzPVwiN1wiIG9uaW5wdXQ9XCJvblN1bW1hcnlUZXh0Q2hhbmdlKClcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkdlbmVyYXRpbmdcdTIwMjZcIlxuICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC45ZW07bGluZS1oZWlnaHQ6MS42O3Jlc2l6ZTp2ZXJ0aWNhbDtkaXNwbGF5Om5vbmU7XCI+PC90ZXh0YXJlYT5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjEycHg7XCI+XG4gICAgICAgIDxsYWJlbCBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweDtcIj5SZXF1ZXN0IGNoYW5nZXMgKG9wdGlvbmFsKTo8L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgaWQ9XCJzdW1tYXJ5LXJlZmluZW1lbnQtaW5wdXRcIiByb3dzPVwiMlwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuICdNYWtlIGl0IG1vcmUgY29uY2lzZScsICdFbXBoYXNpc2UgbXkgbGVhZGVyc2hpcCBleHBlcmllbmNlJywgJ1VzZSBhIG1vcmUgZm9ybWFsIHRvbmUnXHUyMDI2XCJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC44NWVtO3Jlc2l6ZTp2ZXJ0aWNhbDtcIj48L3RleHRhcmVhPlxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDo4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7XCI+XG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImFpLXJlZ2VuZXJhdGUtYnRuXCIgY2xhc3M9XCJzdWJtaXQtYnRuXCIgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO3BhZGRpbmc6NnB4IDE0cHg7XCJcbiAgICAgICAgICAgIG9uY2xpY2s9XCJyZWdlbmVyYXRlQUlTdW1tYXJ5KClcIj5SZWdlbmVyYXRlPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInN1Ym1pdC1idG5cIiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07cGFkZGluZzo2cHggMTRweDtiYWNrZ3JvdW5kOiMxMGI5ODE7XCJcbiAgICAgICAgICAgIG9uY2xpY2s9XCJ1c2VBSVN1bW1hcnkoKVwiPlVzZSBUaGlzIFN1bW1hcnk8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGlkPVwic3VtbWFyeS1zdG9yZWQtc2VjdGlvblwiPlxuICAgICAgPGRldGFpbHMgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjhweDtcIj5cbiAgICAgICAgPHN1bW1hcnkgc3R5bGU9XCJjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MC44NWVtO2NvbG9yOiM2YjcyODA7dXNlci1zZWxlY3Q6bm9uZTtcIj5cbiAgICAgICAgICBVc2UgYSBzdG9yZWQgc3VtbWFyeSB2YXJpYW50IGluc3RlYWRcbiAgICAgICAgPC9zdW1tYXJ5PlxuICAgICAgICA8ZGl2IGlkPVwic3VtbWFyeS1yYWRpb3NcIiBzdHlsZT1cIm1hcmdpbi10b3A6MTBweDtcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6OHB4O1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzdWJtaXQtYnRuXCIgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO3BhZGRpbmc6NnB4IDE0cHg7XCJcbiAgICAgICAgICAgIG9uY2xpY2s9XCJzdWJtaXRTdW1tYXJ5Rm9jdXNEZWNpc2lvbigpXCI+VXNlIFNlbGVjdGVkIFN0b3JlZCBTdW1tYXJ5PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kZXRhaWxzPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJuYXYtYnV0dG9uc1wiIHN0eWxlPVwibWFyZ2luLXRvcDoxNnB4O1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhY2stYnRuXCIgb25jbGljaz1cInN3aXRjaFRhYigndGFnbGluZS1yZXZpZXcnKVwiPlx1MjE5MCBCYWNrIHRvIFRhZ2xpbmU8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJjb250aW51ZS1idG5cIiBvbmNsaWNrPVwic3VibWl0U3VtbWFyeUZvY3VzRGVjaXNpb24oKVwiPkNvbnRpbnVlIHRvIFB1YmxpY2F0aW9ucyBcdTIxOTI8L2J1dHRvbj5cbiAgICA8L2Rpdj5gO1xuXG4gIC8vIFJlbmRlciBzdG9yZWQgc3VtbWFyaWVzIGluIHRoZSBjb2xsYXBzaWJsZSBzZWN0aW9uXG4gIF9yZW5kZXJTdG9yZWRTdW1tYXJ5UmFkaW9zKHByb2Zlc3Npb25hbFN1bW1hcmllcyk7XG5cbiAgLy8gXHUyNTAwXHUyNTAwIEF1dG8tZ2VuZXJhdGUgb3IgbG9hZCBjYWNoZWQgQUkgc3VtbWFyeSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgY29uc3QgY2FjaGVkU3VtbWFyeSA9IHByb2Zlc3Npb25hbFN1bW1hcmllc1snYWlfZ2VuZXJhdGVkJ10gfHwgJyc7XG4gIGlmIChjYWNoZWRTdW1tYXJ5KSB7XG4gICAgX3Nob3dBSVN1bW1hcnkoY2FjaGVkU3VtbWFyeSwgJyhjYWNoZWQgXHUyMDE0IGNsaWNrIFJlZ2VuZXJhdGUgdG8gcmVmcmVzaCknKTtcbiAgICB3aW5kb3cuc2VsZWN0ZWRTdW1tYXJ5S2V5ID0gJ2FpX2dlbmVyYXRlZCc7XG4gICAgYXdhaXQgc2F2ZVN1bW1hcnlGb2N1c1RvQmFja2VuZCgnYWlfZ2VuZXJhdGVkJyk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgX2NhbGxHZW5lcmF0ZVN1bW1hcnkobnVsbCwgbnVsbCk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFJlbmRlciBzdG9yZWQgc3VtbWFyeSByYWRpbyBidXR0b25zIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBfcmVuZGVyU3RvcmVkU3VtbWFyeVJhZGlvcyhwcm9mZXNzaW9uYWxTdW1tYXJpZXMpIHtcbiAgY29uc3QgcmFkaW9zQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bW1hcnktcmFkaW9zJyk7XG4gIGlmICghcmFkaW9zQ29udGFpbmVyKSByZXR1cm47XG4gIGNvbnN0IG1hc3RlcktleXMgPSBPYmplY3Qua2V5cyhwcm9mZXNzaW9uYWxTdW1tYXJpZXMpLmZpbHRlcihrID0+IGsgIT09ICdhaV9nZW5lcmF0ZWQnKTtcbiAgaWYgKG1hc3RlcktleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmFkaW9zQ29udGFpbmVyLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImNvbG9yOiM5Y2EzYWY7Zm9udC1zaXplOjAuODVlbTtcIj5ObyBzdG9yZWQgc3VtbWFyaWVzIGF2YWlsYWJsZS48L3A+JztcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY3VycmVudEtleSA9IHdpbmRvdy5zZWxlY3RlZFN1bW1hcnlLZXkgfHwgJyc7XG4gIHJhZGlvc0NvbnRhaW5lci5pbm5lckhUTUwgPSBtYXN0ZXJLZXlzLm1hcChrZXkgPT4ge1xuICAgIGNvbnN0IHByZXZpZXcgPSAocHJvZmVzc2lvbmFsU3VtbWFyaWVzW2tleV0gfHwgJycpLnNsaWNlKDAsIDIwMCk7XG4gICAgY29uc3QgbGFiZWwgPSBrZXkucmVwbGFjZSgvXy9nLCAnICcpLnJlcGxhY2UoL1xcYlxcdy9nLCBjID0+IGMudG9VcHBlckNhc2UoKSk7XG4gICAgY29uc3QgY2hlY2tlZCA9IGtleSA9PT0gY3VycmVudEtleSA/ICdjaGVja2VkJyA6ICcnO1xuICAgIHJldHVybiBgXG4gICAgICA8bGFiZWwgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEycHg7bWFyZ2luLWJvdHRvbTo4cHg7Y3Vyc29yOnBvaW50ZXI7JHtjaGVja2VkID8gJ2JvcmRlci1jb2xvcjojMTBiOTgxO2JhY2tncm91bmQ6I2YwZmRmNDsnIDogJyd9XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3VtbWFyeV9rZXlcIiB2YWx1ZT1cIiR7ZXNjYXBlSHRtbChrZXkpfVwiICR7Y2hlY2tlZH1cbiAgICAgICAgICBvbmNoYW5nZT1cInNlbGVjdFN1bW1hcnlLZXkoJyR7ZXNjYXBlSHRtbChrZXkpfScpXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6OHB4O1wiPlxuICAgICAgICA8c3Ryb25nPiR7ZXNjYXBlSHRtbChsYWJlbCl9PC9zdHJvbmc+IDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuNzVlbTtwYWRkaW5nOjFweCA2cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOiNlZmY2ZmY7Y29sb3I6IzFkNGVkODtib3JkZXI6MXB4IHNvbGlkICNiZmRiZmU7Zm9udC13ZWlnaHQ6NjAwO1wiPlx1RDgzRFx1RENDNCBGcm9tIHlvdXIgTWFzdGVyIENWPC9zcGFuPlxuICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbjo2cHggMCAwO2ZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzZiNzI4MDtcIj4ke2VzY2FwZUh0bWwocHJldmlldyl9JHtwcmV2aWV3Lmxlbmd0aCA9PT0gMjAwID8gJ1x1MjAyNicgOiAnJ308L3A+XG4gICAgICA8L2xhYmVsPmA7XG4gIH0pLmpvaW4oJycpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgU2hvdyBBSS1nZW5lcmF0ZWQgc3VtbWFyeSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gX3Nob3dBSVN1bW1hcnkodGV4dCwgc3RhdHVzTGFiZWwpIHtcbiAgY29uc3QgdGV4dEVsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FpLXN1bW1hcnktdGV4dCcpO1xuICBjb25zdCBsb2FkaW5nRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWktc3VtbWFyeS1sb2FkaW5nJyk7XG4gIGNvbnN0IHN0YXR1c0VsICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhaS1zdW1tYXJ5LXN0YXR1cycpO1xuICBpZiAodGV4dEVsKSB7XG4gICAgdGV4dEVsLnZhbHVlID0gdGV4dDtcbiAgICB0ZXh0RWwuc3R5bGUuZGlzcGxheSA9ICcnO1xuICB9XG4gIGlmIChsb2FkaW5nRWwpIGxvYWRpbmdFbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBpZiAoc3RhdHVzRWwpICBzdGF0dXNFbC50ZXh0Q29udGVudCA9IHN0YXR1c0xhYmVsIHx8ICcnO1xuICB3aW5kb3cuX2FpR2VuZXJhdGVkU3VtbWFyeSA9IHRleHQ7XG4gIF91cGRhdGVTdW1tYXJ5U3BlY2lmaWNpdHlCYWRnZSh0ZXh0KTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFN1bW1hcnkgc3BlY2lmaWNpdHkgdmFsaWRhdG9yIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBfY2hlY2tTdW1tYXJ5U3BlY2lmaWNpdHkodGV4dCkge1xuICBpZiAoIXRleHQgfHwgIXRleHQudHJpbSgpKSByZXR1cm4gW107XG4gIGNvbnN0IHdhcm5pbmdzID0gW107XG4gIC8vIENoZWNrIDE6IHF1YW50aWZpZWQgY2xhaW0gKG51bWJlciwgcGVyY2VudGFnZSwgb3IgeWVhciByYW5nZSlcbiAgY29uc3QgaGFzUXVhbnRpZmllZCA9IC9cXGJcXGRbXFxkLF0qXFxzKiglfHBlcmNlbnR8eXJzP3x5ZWFycz98bW9udGhzP3x4XFxifFxcK3xrXFxifG1cXGJ8XFwuXFxkKS9pLnRlc3QodGV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIC9cXGJcXGQrXFwrXFxzKih5ZWFycz98eXJzP3xtb250aHM/KS9pLnRlc3QodGV4dCk7XG4gIGlmICghaGFzUXVhbnRpZmllZCkge1xuICAgIHdhcm5pbmdzLnB1c2goJ05vIHF1YW50aWZpZWQgY2xhaW0gZGV0ZWN0ZWQgKGUuZy4gXCI1KyB5ZWFyc1wiLCBcIjMwJSByZWR1Y3Rpb25cIiwgXCIkMk1cIikuIEFkZGluZyBhIG51bWJlciBzdHJlbmd0aGVucyBjcmVkaWJpbGl0eS4nKTtcbiAgfVxuICAvLyBDaGVjayAyOiB0YXJnZXQgcm9sZSBrZXl3b3JkIHByZXNlbnRcbiAgY29uc3QgYW5hbHlzaXMgPSB3aW5kb3cuX2xhc3RBbmFseXNpc0RhdGEgfHxcbiAgICAod2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgJiYgd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMuam9iX2FuYWx5c2lzKSB8fCB7fTtcbiAgY29uc3Qgcm9sZVRpdGxlID0gKGFuYWx5c2lzLnRpdGxlIHx8IGFuYWx5c2lzLmpvYl90aXRsZSB8fCAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIGlmIChyb2xlVGl0bGUgJiYgcm9sZVRpdGxlLmxlbmd0aCA+IDMpIHtcbiAgICBjb25zdCByb2xlUGFydHMgPSByb2xlVGl0bGUuc3BsaXQoL1tcXHMvLF0rLykuZmlsdGVyKHcgPT4gdy5sZW5ndGggPiAzKTtcbiAgICBjb25zdCBpblRleHQgPSByb2xlUGFydHMuc29tZShwYXJ0ID0+IHRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhwYXJ0KSk7XG4gICAgaWYgKCFpblRleHQpIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goYFRhcmdldCByb2xlIChcIiR7ZXNjYXBlSHRtbChyb2xlVGl0bGUpfVwiKSBub3QgbWVudGlvbmVkIFx1MjAxNCBjb25zaWRlciBlY2hvaW5nIHRoZSByb2xlIG9yIGEgc3lub255bS5gKTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgMzogZmFsbGJhY2sgZ2VuZXJpYyBwbGFjZWhvbGRlclxuICBjb25zdCBnZW5lcmljUGhyYXNlcyA9IFsnZXhwZXJpZW5jZWQgcHJvZmVzc2lvbmFsJywgJ3RyYWNrIHJlY29yZCBvZiBzdWNjZXNzJywgJ3NlZWtpbmcgYSBjaGFsbGVuZ2luZyddO1xuICBmb3IgKGNvbnN0IHBocmFzZSBvZiBnZW5lcmljUGhyYXNlcykge1xuICAgIGlmICh0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocGhyYXNlKSkge1xuICAgICAgd2FybmluZ3MucHVzaChgR2VuZXJpYyBwbGFjZWhvbGRlciBwaHJhc2UgZGV0ZWN0ZWQgKFwiJHtwaHJhc2V9XCIpIFx1MjAxNCByZXBsYWNlIHdpdGggc3BlY2lmaWMgYWNoaWV2ZW1lbnRzLmApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gd2FybmluZ3M7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVTdW1tYXJ5U3BlY2lmaWNpdHlCYWRnZSh0ZXh0KSB7XG4gIGxldCBiYWRnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdW1tYXJ5LXNwZWNpZmljaXR5LWJhZGdlJyk7XG4gIGlmICghYmFkZ2UpIHtcbiAgICBjb25zdCB0ZXh0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWktc3VtbWFyeS10ZXh0Jyk7XG4gICAgaWYgKCF0ZXh0RWwgfHwgIXRleHRFbC5wYXJlbnROb2RlKSByZXR1cm47XG4gICAgYmFkZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBiYWRnZS5pZCA9ICdzdW1tYXJ5LXNwZWNpZmljaXR5LWJhZGdlJztcbiAgICBiYWRnZS5zdHlsZS5jc3NUZXh0ID0gJ21hcmdpbi10b3A6NnB4O2ZvbnQtc2l6ZTowLjgyZW07JztcbiAgICB0ZXh0RWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYmFkZ2UsIHRleHRFbC5uZXh0U2libGluZyk7XG4gIH1cbiAgY29uc3Qgd2FybmluZ3MgPSBfY2hlY2tTdW1tYXJ5U3BlY2lmaWNpdHkodGV4dCk7XG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICBiYWRnZS5pbm5lckhUTUwgPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjojMTBiOTgxO1wiPlx1MjcxMyBTdW1tYXJ5IGhhcyBzcGVjaWZpYywgcXVhbnRpZmllZCBjb250ZW50Ljwvc3Bhbj4nO1xuICB9IGVsc2Uge1xuICAgIGJhZGdlLmlubmVySFRNTCA9IHdhcm5pbmdzLm1hcCh3ID0+XG4gICAgICBgPGRpdiBzdHlsZT1cImNvbG9yOiNiNDUzMDk7bWFyZ2luLXRvcDoycHg7XCI+XHUyNkEwICR7d308L2Rpdj5gXG4gICAgKS5qb2luKCcnKTtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgQ2FsbCBnZW5lcmF0ZS1zdW1tYXJ5IEFQSSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBkdWNrZmxvdzpcbiAqICAgaWQ6IHN1bW1hcnlfdWlfZ2VuZXJhdGVcbiAqICAga2luZDogdWlcbiAqICAgdGltZXN0YW1wOiBcIjIwMjYtMDMtMjdUMDE6MjM6MjhaXCJcbiAqICAgc3RhdHVzOiBzaGFyZWRcbiAqICAgaGFuZGxlczogW1widWk6c3VtbWFyeS1yZXZpZXcuZ2VuZXJhdGVcIl1cbiAqICAgY2FsbHM6IFtcIlBPU1QgL2FwaS9nZW5lcmF0ZS1zdW1tYXJ5XCIsIFwidWk6c3VtbWFyeS1yZXZpZXcucGVyc2lzdFwiXVxuICogICByZWFkczogW1wicmVzcG9uc2U6UE9TVCAvYXBpL2dlbmVyYXRlLXN1bW1hcnkuc3VtbWFyeVwiLCBcIndpbmRvdzpfYWlHZW5lcmF0ZWRTdW1tYXJ5XCJdXG4gKiAgIHdyaXRlczogW1wiZG9tOiNhaS1zdW1tYXJ5LXRleHRcIiwgXCJkb206I2FpLXN1bW1hcnktc3RhdHVzXCIsIFwid2luZG93Ol9haUdlbmVyYXRlZFN1bW1hcnlcIiwgXCJ3aW5kb3c6c2VsZWN0ZWRTdW1tYXJ5S2V5XCJdXG4gKiAgIG5vdGVzOiBcIlJlcXVlc3RzIGEgZ2VuZXJhdGVkIG9yIHJlZmluZWQgc3VtbWFyeSwgdXBkYXRlcyB0aGUgbG9jYWwgVUksIGFuZCBwZXJzaXN0cyB0aGUgc2VsZWN0ZWQgc3VtbWFyeSBrZXkuXCJcbiAqL1xuXG5hc3luYyBmdW5jdGlvbiBfY2FsbEdlbmVyYXRlU3VtbWFyeShyZWZpbmVtZW50UHJvbXB0LCBwcmV2aW91c1N1bW1hcnkpIHtcbiAgY29uc3QgYnRuICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWktcmVnZW5lcmF0ZS1idG4nKTtcbiAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWktc3VtbWFyeS1zdGF0dXMnKTtcbiAgY29uc3QgdGV4dEVsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWktc3VtbWFyeS10ZXh0Jyk7XG4gIGNvbnN0IGxvYWRpbmdFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhaS1zdW1tYXJ5LWxvYWRpbmcnKTtcbiAgaWYgKGJ0bikgICAgICBidG4uZGlzYWJsZWQgPSB0cnVlO1xuICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ0dlbmVyYXRpbmdcdTIwMjYnO1xuICAvLyBTaG93IGxvYWRpbmcgaW5kaWNhdG9yOyBoaWRlIHRoZSB0ZXh0YXJlYSB3aGlsZSBnZW5lcmF0aW5nLlxuICBpZiAobG9hZGluZ0VsKSB7IGxvYWRpbmdFbC5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7Y29sb3I6IzZiNzI4MDtwYWRkaW5nOjhweCAwO1wiPjxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyLXdpZHRoOjJweDtcIj48L2Rpdj48ZW0+R2VuZXJhdGluZyBhIHRhaWxvcmVkIHN1bW1hcnlcdTIwMjY8L2VtPjwvZGl2Pic7IGxvYWRpbmdFbC5zdHlsZS5kaXNwbGF5ID0gJyc7IH1cbiAgaWYgKHRleHRFbCkgICB0ZXh0RWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAvLyBVc2UgdGhlIGdsb2JhbCBMTE0gc3RhdHVzIGJhciBmb3IgdmlzaWJpbGl0eVxuICBzZXRMb2FkaW5nKHRydWUsICdHZW5lcmF0aW5nIHN1bW1hcnlcdTIwMjYnKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGJvZHkgPSB7fTtcbiAgICBpZiAocmVmaW5lbWVudFByb21wdCkgYm9keS5yZWZpbmVtZW50X3Byb21wdCA9IHJlZmluZW1lbnRQcm9tcHQ7XG4gICAgaWYgKHByZXZpb3VzU3VtbWFyeSkgIGJvZHkucHJldmlvdXNfc3VtbWFyeSAgPSBwcmV2aW91c1N1bW1hcnk7XG5cbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvZ2VuZXJhdGUtc3VtbWFyeScsIHtcbiAgICAgIG1ldGhvZDogICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogICAgSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgX3Nob3dBSVN1bW1hcnkoZGF0YS5zdW1tYXJ5LCAnXHUyNzEzIGdlbmVyYXRlZCcpO1xuICAgICAgd2luZG93LnNlbGVjdGVkU3VtbWFyeUtleSA9ICdhaV9nZW5lcmF0ZWQnO1xuICAgICAgYXdhaXQgc2F2ZVN1bW1hcnlGb2N1c1RvQmFja2VuZCgnYWlfZ2VuZXJhdGVkJyk7XG4gICAgICBzY2hlZHVsZUF0c1JlZnJlc2goJ3Jldmlld19jaGVja3BvaW50Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnXHUyNkEwIGVycm9yJztcbiAgICAgIGlmICh0ZXh0RWwpICAgdGV4dEVsLmlubmVySFRNTCA9IGA8c3BhbiBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7XCI+JHtlc2NhcGVIdG1sKGRhdGEuZXJyb3IgfHwgJ0dlbmVyYXRpb24gZmFpbGVkLicpfTwvc3Bhbj5gO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdcdTI2QTAgbmV0d29yayBlcnJvcic7XG4gICAgaWYgKHRleHRFbCkgICB0ZXh0RWwuaW5uZXJIVE1MID0gJzxzcGFuIHN0eWxlPVwiY29sb3I6I2VmNDQ0NDtcIj5OZXR3b3JrIGVycm9yIFx1MjAxNCBwbGVhc2UgdHJ5IGFnYWluLjwvc3Bhbj4nO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChidG4pIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZWdlbmVyYXRlIC8gdXNlIEFJIHN1bW1hcnkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHJlZ2VuZXJhdGVBSVN1bW1hcnkoKSB7XG4gIGNvbnN0IGlucHV0ICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtbWFyeS1yZWZpbmVtZW50LWlucHV0Jyk7XG4gIGNvbnN0IHByb21wdCAgPSBpbnB1dCA/IGlucHV0LnZhbHVlLnRyaW0oKSA6ICcnO1xuICBjb25zdCBjdXJyZW50ID0gd2luZG93Ll9haUdlbmVyYXRlZFN1bW1hcnkgfHwgJyc7XG4gIGF3YWl0IF9jYWxsR2VuZXJhdGVTdW1tYXJ5KHByb21wdCB8fCBudWxsLCBjdXJyZW50IHx8IG51bGwpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1c2VBSVN1bW1hcnkoKSB7XG4gIHdpbmRvdy5zZWxlY3RlZFN1bW1hcnlLZXkgPSAnYWlfZ2VuZXJhdGVkJztcbiAgY29uc3QgdGV4dEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FpLXN1bW1hcnktdGV4dCcpO1xuICBjb25zdCBjdXJyZW50VGV4dCA9IHRleHRFbCA/IHRleHRFbC52YWx1ZS50cmltKCkgOiAod2luZG93Ll9haUdlbmVyYXRlZFN1bW1hcnkgfHwgJycpO1xuICBhd2FpdCBzYXZlU3VtbWFyeUZvY3VzVG9CYWNrZW5kKCdhaV9nZW5lcmF0ZWQnLCBjdXJyZW50VGV4dCk7XG4gIHNjaGVkdWxlQXRzUmVmcmVzaCgncmV2aWV3X2NoZWNrcG9pbnQnKTtcbiAgc2hvd1RvYXN0KCdBSS1nZW5lcmF0ZWQgc3VtbWFyeSBzZWxlY3RlZCBmb3IgeW91ciBDVicpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgU2VsZWN0IHN0b3JlZCBzdW1tYXJ5IGtleSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gc2VsZWN0U3VtbWFyeUtleShrZXkpIHtcbiAgd2luZG93LnNlbGVjdGVkU3VtbWFyeUtleSA9IGtleTtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3N1bW1hcnktcmFkaW9zIGxhYmVsJykuZm9yRWFjaChsYWJlbCA9PiB7XG4gICAgY29uc3QgcmFkaW8gPSBsYWJlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPXJhZGlvXScpO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSByYWRpbyAmJiByYWRpby52YWx1ZSA9PT0ga2V5O1xuICAgIGxhYmVsLnN0eWxlLmJvcmRlckNvbG9yID0gaXNTZWxlY3RlZCA/ICcjMTBiOTgxJyA6ICcjZTVlN2ViJztcbiAgICBsYWJlbC5zdHlsZS5iYWNrZ3JvdW5kICA9IGlzU2VsZWN0ZWQgPyAnI2YwZmRmNCcgOiAnJztcbiAgfSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBTYXZlIC8gc3VibWl0IFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG4vKipcbiAqIGR1Y2tmbG93OlxuICogICBpZDogc3VtbWFyeV91aV9wZXJzaXN0XG4gKiAgIGtpbmQ6IHVpXG4gKiAgIHRpbWVzdGFtcDogXCIyMDI2LTAzLTI3VDAxOjIzOjI4WlwiXG4gKiAgIHN0YXR1czogc2hhcmVkXG4gKiAgIGhhbmRsZXM6IFtcInVpOnN1bW1hcnktcmV2aWV3LnBlcnNpc3RcIl1cbiAqICAgY2FsbHM6IFtcIlBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zXCJdXG4gKiAgIHJlYWRzOiBbXCJ3aW5kb3c6c2VsZWN0ZWRTdW1tYXJ5S2V5XCJdXG4gKiAgIHdyaXRlczogW1wicmVxdWVzdDpQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9ucy5zdW1tYXJ5X2ZvY3VzXCJdXG4gKiAgIG5vdGVzOiBcIlBlcnNpc3RzIG9ubHkgdGhlIHNlbGVjdGVkIHN1bW1hcnkga2V5IHNvIGJhY2tlbmQgc3RhdGUgY2FuIHJlc29sdmUgdGhlIGFjdGl2ZSBzdW1tYXJ5IHZhcmlhbnQgbGF0ZXIuXCJcbiAqL1xuXG4vLyBEZWJvdW5jZSB0aW1lciBmb3IgYXV0by1wZXJzaXN0aW5nIGVkaXRzIHRvIHRoZSBzdW1tYXJ5IHRleHQuXG5sZXQgX3N1bW1hcnlQZXJzaXN0VGltZXIgPSBudWxsO1xuXG5mdW5jdGlvbiBvblN1bW1hcnlUZXh0Q2hhbmdlKCkge1xuICBjb25zdCB0ZXh0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWktc3VtbWFyeS10ZXh0Jyk7XG4gIGlmICghdGV4dEVsKSByZXR1cm47XG4gIHdpbmRvdy5fYWlHZW5lcmF0ZWRTdW1tYXJ5ID0gdGV4dEVsLnZhbHVlO1xuICBfdXBkYXRlU3VtbWFyeVNwZWNpZmljaXR5QmFkZ2UodGV4dEVsLnZhbHVlKTtcbiAgY2xlYXJUaW1lb3V0KF9zdW1tYXJ5UGVyc2lzdFRpbWVyKTtcbiAgX3N1bW1hcnlQZXJzaXN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBzYXZlU3VtbWFyeUZvY3VzVG9CYWNrZW5kKCdhaV9nZW5lcmF0ZWQnLCB0ZXh0RWwudmFsdWUudHJpbSgpKTtcbiAgfSwgNTAwKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZVN1bW1hcnlGb2N1c1RvQmFja2VuZChrZXksIHRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0geyB0eXBlOiAnc3VtbWFyeV9mb2N1cycsIGRlY2lzaW9uczoga2V5IH07XG4gICAgaWYgKHRleHQgIT09IHVuZGVmaW5lZCAmJiB0ZXh0ICE9PSBudWxsKSBwYXlsb2FkLnN1bW1hcnlfdGV4dCA9IHRleHQ7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXZpZXctZGVjaXNpb25zJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLm9rO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFN1bW1hcnlGb2N1c0RlY2lzaW9uKCkge1xuICBjb25zdCBrZXkgPSB3aW5kb3cuc2VsZWN0ZWRTdW1tYXJ5S2V5O1xuICBpZiAoIWtleSkgcmV0dXJuO1xuICBjb25zdCBzYXZlZCA9IGF3YWl0IHNhdmVTdW1tYXJ5Rm9jdXNUb0JhY2tlbmQoa2V5KTtcbiAgaWYgKCFzYXZlZCkge1xuICAgIHNob3dUb2FzdCgnRmFpbGVkIHRvIHNhdmUgc3VtbWFyeSBzZWxlY3Rpb24uJywgJ2Vycm9yJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHN0YXRlTWFuYWdlci5tYXJrQ29udGVudENoYW5nZWQoKTtcbiAgc2NoZWR1bGVBdHNSZWZyZXNoKCdyZXZpZXdfY2hlY2twb2ludCcpO1xuICBzaG93VG9hc3QoYFN1bW1hcnkgc2VsZWN0aW9uIHNhdmVkOiBcIiR7a2V5LnJlcGxhY2UoL18vZywgJyAnKX1cImApO1xuICBzd2l0Y2hUYWIoJ3B1YmxpY2F0aW9ucy1yZXZpZXcnKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB7XG4gIGJ1aWxkU3VtbWFyeUZvY3VzU2VjdGlvbixcbiAgX3JlbmRlclN0b3JlZFN1bW1hcnlSYWRpb3MsXG4gIF9zaG93QUlTdW1tYXJ5LFxuICBfY2FsbEdlbmVyYXRlU3VtbWFyeSxcbiAgcmVnZW5lcmF0ZUFJU3VtbWFyeSxcbiAgdXNlQUlTdW1tYXJ5LFxuICBvblN1bW1hcnlUZXh0Q2hhbmdlLFxuICBzZWxlY3RTdW1tYXJ5S2V5LFxuICBzYXZlU3VtbWFyeUZvY3VzVG9CYWNrZW5kLFxuICBfY2hlY2tTdW1tYXJ5U3BlY2lmaWNpdHksXG4gIF91cGRhdGVTdW1tYXJ5U3BlY2lmaWNpdHlCYWRnZSxcbiAgc3VibWl0U3VtbWFyeUZvY3VzRGVjaXNpb24sXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvcHVibGljYXRpb25zLXJldmlldy5qc1xuICogUHVibGljYXRpb25zIHJldmlldyB0YWJsZTogZmV0Y2gsIHJlbmRlciwgdG9nZ2xlIGFjY2VwdC9yZWplY3QsIHN1Ym1pdCBkZWNpc2lvbnMuXG4gKlxuICogRGVwZW5kZW5jaWVzIChyZXNvbHZlZCB0aHJvdWdoIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIHB1YmxpY2F0aW9uRGVjaXNpb25zLCBfc2F2ZWREZWNpc2lvbnMsXG4gKiAgIGVzY2FwZUh0bWwsIHNob3dUb2FzdCwgZmV0Y2hBbmRSZXZpZXdSZXdyaXRlcywgQ1NTXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdwdWJsaWNhdGlvbnMtcmV2aWV3Jyk7XG5cbmltcG9ydCB7IHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5pbXBvcnQgeyBleWVTbGFzaEljb24gfSBmcm9tICcuL3Jldmlldy1pY29ucy5qcyc7XG5cbi8vIFRyYWNrIHB1YmxpY2F0aW9uIGFjY2VwdC9yZWplY3QgZGVjaXNpb25zOiBjaXRlX2tleSBcdTIxOTIgdHJ1ZSAoYWNjZXB0KSB8IGZhbHNlIChyZWplY3QpXG53aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnMgPSB7fTtcbi8vIE9yZGVyZWQgbGlzdCBvZiBwdWJsaWNhdGlvbiBvYmplY3RzOyBtdXRhdGVkIGJ5IG1vdmVQdWJSb3coKVxud2luZG93Ll9wdWJsaWNhdGlvbnNPcmRlcmVkID0gW107XG5cbi8vIFx1MjUwMFx1MjUwMCBCdWlsZCBwdWJsaWNhdGlvbnMgcmV2aWV3IHRhYmxlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBidWlsZFB1YmxpY2F0aW9uc1Jldmlld1RhYmxlKCkge1xuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHVibGljYXRpb25zLXRhYmxlLWNvbnRhaW5lcicpO1xuICAvLyBJbiB0aGUgbmV3IHN1Yi10YWIgbGF5b3V0LCB3ZSB1c2UgdGhlIHBhbmUgd3JhcHBlciBpbnN0ZWFkIG9mIHRoZSBvbGQgc2VjdGlvblxuICBjb25zdCBzZWN0aW9uICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHVibGljYXRpb25zLXJldmlldy1zZWN0aW9uJykgfHxcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jldmlldy1wYW5lLXB1YmxpY2F0aW9ucycpO1xuICBjb25zdCBwdWJUYWJCdG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucmV2aWV3LXN1YnRhYltkYXRhLXBhbmU9XCJwdWJsaWNhdGlvbnNcIl0nKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O3BhZGRpbmc6MjBweDtjb2xvcjojNmI3MjgwO1wiPjxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyLXdpZHRoOjJweDtmbGV4LXNocmluazowO1wiPjwvZGl2PjxzcGFuPkxvYWRpbmcgcHVibGljYXRpb24gcmVjb21tZW5kYXRpb25zXFx1MjAyNjwvc3Bhbj48L2Rpdj4nO1xuXG4gIGxldCByZWNvbW1lbmRhdGlvbnMgPSBbXTtcbiAgbGV0IHRvdGFsQ291bnQgPSAwO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9wdWJsaWNhdGlvbi1yZWNvbW1lbmRhdGlvbnMnKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoIWRhdGEub2spIHsgY29udGFpbmVyLmlubmVySFRNTCA9IGA8cCBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj4ke2VzY2FwZUh0bWwoZGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIGxvYWQgcHVibGljYXRpb25zLicpfTwvcD5gOyByZXR1cm47IH1cbiAgICByZWNvbW1lbmRhdGlvbnMgPSBkYXRhLnJlY29tbWVuZGF0aW9ucyB8fCBbXTtcbiAgICB0b3RhbENvdW50ID0gZGF0YS50b3RhbF9jb3VudCB8fCByZWNvbW1lbmRhdGlvbnMubGVuZ3RoO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHB1YmxpY2F0aW9uIHJlY29tbWVuZGF0aW9uczonLCBlcnIpO1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJjb2xvcjogI2VmNDQ0NDsgcGFkZGluZzogMjBweDtcIj5GYWlsZWQgdG8gbG9hZCBwdWJsaWNhdGlvbiByZWNvbW1lbmRhdGlvbnMuPC9wPic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHJlY29tbWVuZGF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBObyBwdWJsaWNhdGlvbnMgXHUyMDE0IGhpZGUgdGhlIHBhbmUgYW5kIGRpc2FibGUgdGhlIHRhYiBidXR0b25cbiAgICBpZiAoc2VjdGlvbikgc2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGlmIChwdWJUYWJCdG4pIHB1YlRhYkJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJwYWRkaW5nOjIwcHg7Y29sb3I6IzZiNzI4MDtcIj5ObyBwdWJsaWNhdGlvbnMgZm91bmQuPC9wPic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2hvdyBzZWN0aW9uIGFuZCB0YWIgYnV0dG9uXG4gIGlmIChwdWJUYWJCdG4pIHB1YlRhYkJ0bi5zdHlsZS5kaXNwbGF5ID0gJyc7XG5cbiAgLy8gVXBkYXRlIGhlYWRpbmcgY291bnQgKGhhbmRsZSBib3RoIHBhbmUgYXBwcm9hY2ggYW5kIGxlZ2FjeSBzZWN0aW9uIGFwcHJvYWNoKVxuICBjb25zdCBoZWFkaW5nID0gc2VjdGlvbiA/IHNlY3Rpb24ucXVlcnlTZWxlY3RvcignaDInKSA6IG51bGw7XG4gIGlmIChoZWFkaW5nKSB7XG4gICAgaGVhZGluZy50ZXh0Q29udGVudCA9IGBcdUQ4M0RcdURDQzQgU2VsZWN0ZWQgUHVibGljYXRpb25zYDtcbiAgfVxuXG4gIC8vIENvdW50IHJlY29tbWVuZGVkIHZzIHRvdGFsXG4gIGNvbnN0IHJlY29tbWVuZGVkQ291bnQgPSByZWNvbW1lbmRhdGlvbnMuZmlsdGVyKHAgPT4gcC5pc19yZWNvbW1lbmRlZCAhPT0gZmFsc2UpLmxlbmd0aDtcbiAgY29uc3QgY29udGV4dE5vdGUgPSBgPHN0cm9uZz4ke3JlY29tbWVuZGVkQ291bnR9PC9zdHJvbmc+IG9mIDxzdHJvbmc+JHt0b3RhbENvdW50fTwvc3Ryb25nPiBwdWJsaWNhdGlvbnMgcmVjb21tZW5kZWQgZm9yIHRoaXMgcm9sZS4gYCArXG4gICAgYFJlY29tbWVuZGVkIHB1YmxpY2F0aW9ucyAodG9wKSBhcmUgcHJlLXNlbGVjdGVkIGZvciBpbmNsdXNpb247IG90aGVycyAoYmVsb3cgdGhlIGRpdmlkZXIpIGFyZSBwcmUtZXhjbHVkZWQuIEFkanVzdCB1c2luZyB0aGUgdG9nZ2xlcy5gO1xuXG4gIC8vIEluaXRpYWxpc2UgZGVjaXNpb25zIFx1MjAxNCByZWNvbW1lbmRlZD1hY2NlcHQsIG5vdC1yZWNvbW1lbmRlZD1yZWplY3QgYnkgZGVmYXVsdFxuICB3aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnMgPSB7fTtcbiAgcmVjb21tZW5kYXRpb25zLmZvckVhY2gocHViID0+IHtcbiAgICB3aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnNbcHViLmNpdGVfa2V5XSA9IHB1Yi5pc19yZWNvbW1lbmRlZCAhPT0gZmFsc2U7XG4gIH0pO1xuICAvLyBBcHBseSBhbnkgcHJldmlvdXNseSBzYXZlZCB1c2VyIGRlY2lzaW9ucyBvdmVyIHRoZSBBUEkgZGVmYXVsdHNcbiAgY29uc3Qgc2F2ZWRQdWJEZWNzID0gd2luZG93Ll9zYXZlZERlY2lzaW9ucz8ucHVibGljYXRpb25fZGVjaXNpb25zIHx8IHt9O1xuICBpZiAoT2JqZWN0LmtleXMoc2F2ZWRQdWJEZWNzKS5sZW5ndGggPiAwKSBPYmplY3QuYXNzaWduKHdpbmRvdy5wdWJsaWNhdGlvbkRlY2lzaW9ucywgc2F2ZWRQdWJEZWNzKTtcblxuICAvLyBTZWVkIHRoZSBvcmRlcmVkIGxpc3QgZm9yIHJlb3JkZXIgY29udHJvbHNcbiAgd2luZG93Ll9wdWJsaWNhdGlvbnNPcmRlcmVkID0gWy4uLnJlY29tbWVuZGF0aW9uc107XG5cbiAgbGV0IHRhYmxlSFRNTCA9IGBcbiAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjAuOWVtO21hcmdpbi1ib3R0b206MTJweDtcIj4ke2NvbnRleHROb3RlfTwvcD5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tYm90dG9tOjEwcHg7XCI+XG4gICAgICA8bGFiZWwgc3R5bGU9XCJmb250LXNpemU6MC45ZW07Y29sb3I6IzM3NDE1MTtcIj5GaWx0ZXIgcHVibGljYXRpb25zOlxuICAgICAgICA8aW5wdXQgdHlwZT1cInNlYXJjaFwiIGlkPVwicHViLWZpbHRlci1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBmaWx0ZXJcdTIwMjZcIlxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6OHB4O3BhZGRpbmc6NHB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjAuOWVtO1wiXG4gICAgICAgICAgb25pbnB1dD1cImZpbHRlclB1YmxpY2F0aW9uc1RhYmxlKHRoaXMudmFsdWUpXCI+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDphdXRvO2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtcIj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC44MmVtO2NvbG9yOiM2YjcyODA7XCI+QnVsazo8L3NwYW4+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIHN0eWxlPVwiZm9udC1zaXplOjAuOGVtO3BhZGRpbmc6NHB4IDEwcHg7XCJcbiAgICAgICAgICBvbmNsaWNrPVwiYnVsa1B1YkFjdGlvbigncmVjb21tZW5kZWQnKVwiIHRpdGxlPVwiQWNjZXB0IGFsbCByZWNvbW1lbmRlZCBhbmQgcmVqZWN0IHRoZSByZXN0XCI+QWNjZXB0IFJlY29tbWVuZGVkPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIHN0eWxlPVwiZm9udC1zaXplOjAuOGVtO3BhZGRpbmc6NHB4IDEwcHg7XCJcbiAgICAgICAgICBvbmNsaWNrPVwiYnVsa1B1YkFjdGlvbignYWNjZXB0LWFsbCcpXCIgdGl0bGU9XCJBY2NlcHQgYWxsIHB1YmxpY2F0aW9uc1wiPkFjY2VwdCBBbGw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gc2Vjb25kYXJ5XCIgc3R5bGU9XCJmb250LXNpemU6MC44ZW07cGFkZGluZzo0cHggMTBweDtcIlxuICAgICAgICAgIG9uY2xpY2s9XCJidWxrUHViQWN0aW9uKCdyZWplY3QtYWxsJylcIiB0aXRsZT1cIlJlamVjdCBhbGwgcHVibGljYXRpb25zXCI+UmVqZWN0IEFsbDwvYnV0dG9uPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDx0YWJsZSBpZD1cInB1YmxpY2F0aW9ucy1yZXZpZXctdGFibGVcIiBjbGFzcz1cInJldmlldy10YWJsZVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6NDBweDtcIj5SYW5rPC90aD5cbiAgICAgICAgICA8dGg+Q2l0YXRpb248L3RoPlxuICAgICAgICAgIDx0aD5ZZWFyPC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozNnB4O3RleHQtYWxpZ246Y2VudGVyO1wiIHRpdGxlPVwiRmlyc3QgYXV0aG9yXCI+MXN0XHUyNjA1PC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo1MHB4O1wiPlNjb3JlPC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo4MHB4O1wiPkNvbmZpZGVuY2U8L3RoPlxuICAgICAgICAgIDx0aD5SZWFzb25pbmc8L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjgwcHg7XCI+SW5jbHVkZT88L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjU2cHg7dGV4dC1hbGlnbjpjZW50ZXI7XCI+T3JkZXI8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgYDtcblxuICBsZXQgZGl2aWRlckluc2VydGVkID0gZmFsc2U7XG4gIHJlY29tbWVuZGF0aW9ucy5mb3JFYWNoKChwdWIsIGlkeCkgPT4ge1xuICAgIC8vIEluc2VydCBhIHNlY3Rpb24gZGl2aWRlciBiZWZvcmUgdGhlIGZpcnN0IG5vbi1yZWNvbW1lbmRlZCBwdWJsaWNhdGlvblxuICAgIGlmICghZGl2aWRlckluc2VydGVkICYmIHB1Yi5pc19yZWNvbW1lbmRlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGRpdmlkZXJJbnNlcnRlZCA9IHRydWU7XG4gICAgICBjb25zdCBkaXZpZGVyU3R5bGUgPSAnYmFja2dyb3VuZDojZjNmNGY2O2JvcmRlci10b3A6MnB4IHNvbGlkICNkMWQ1ZGI7cGFkZGluZzowOyc7XG4gICAgICB0YWJsZUhUTUwgKz0gYFxuICAgICAgICA8dHIgY2xhc3M9XCJwdWItZGl2aWRlci1yb3dcIj5cbiAgICAgICAgICA8dGQgc3R5bGU9XCIke2RpdmlkZXJTdHlsZX1cIj48L3RkPlxuICAgICAgICAgIDx0ZCBzdHlsZT1cIiR7ZGl2aWRlclN0eWxlfWNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjAuODJlbTtmb250LXN0eWxlOml0YWxpYztwYWRkaW5nOjZweCAxMnB4O3RleHQtYWxpZ246Y2VudGVyO1wiPlxuICAgICAgICAgICAgXHUyMDE0IFB1YmxpY2F0aW9ucyBiZWxvdyB3ZXJlIG5vdCByZWNvbW1lbmRlZCBmb3IgdGhpcyByb2xlIChwcmUtZXhjbHVkZWQpIFx1MjAxNFxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIHN0eWxlPVwiJHtkaXZpZGVyU3R5bGV9XCI+PC90ZD5cbiAgICAgICAgICA8dGQgc3R5bGU9XCIke2RpdmlkZXJTdHlsZX1cIj48L3RkPlxuICAgICAgICAgIDx0ZCBzdHlsZT1cIiR7ZGl2aWRlclN0eWxlfVwiPjwvdGQ+XG4gICAgICAgICAgPHRkIHN0eWxlPVwiJHtkaXZpZGVyU3R5bGV9XCI+PC90ZD5cbiAgICAgICAgICA8dGQgc3R5bGU9XCIke2RpdmlkZXJTdHlsZX1cIj48L3RkPlxuICAgICAgICAgIDx0ZCBzdHlsZT1cIiR7ZGl2aWRlclN0eWxlfVwiPjwvdGQ+XG4gICAgICAgICAgPHRkIHN0eWxlPVwiJHtkaXZpZGVyU3R5bGV9XCI+PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIGA7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuayAgICAgICA9IGlkeCArIDE7XG4gICAgY29uc3QgY2l0YXRpb24gICA9IHB1Yi5mb3JtYXR0ZWRfY2l0YXRpb24gfHwgW3B1Yi50aXRsZSwgcHViLnZlbnVlLCBwdWIueWVhcl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy4gJyk7XG4gICAgY29uc3QgeWVhciAgICAgICA9IHB1Yi55ZWFyIHx8ICdcdTIwMTQnO1xuICAgIGNvbnN0IGZpcnN0QXV0aCAgPSBwdWIuaXNfZmlyc3RfYXV0aG9yID8gJzxzcGFuIHN0eWxlPVwiY29sb3I6IzEwYjk4MTtmb250LXdlaWdodDo3MDA7XCIgdGl0bGU9XCJGaXJzdCBhdXRob3JcIj5cdTI2MDU8L3NwYW4+JyA6ICc8c3BhbiBzdHlsZT1cImNvbG9yOiNkMWQ1ZGI7XCI+XHUyNjA2PC9zcGFuPic7XG4gICAgY29uc3Qgc2NvcmUgICAgICA9IHB1Yi5yZWxldmFuY2Vfc2NvcmUgPyBwdWIucmVsZXZhbmNlX3Njb3JlIDogJ1x1MjAxNCc7XG4gICAgY29uc3QgY29uZmlkZW5jZSA9IHB1Yi5jb25maWRlbmNlIHx8ICcnO1xuICAgIGNvbnN0IGNvbmZDb2xvciAgPSBjb25maWRlbmNlID09PSAnSGlnaCcgPyAnIzEwYjk4MScgOiBjb25maWRlbmNlID09PSAnTG93JyA/ICcjZWY0NDQ0JyA6ICcjZjU5ZTBiJztcbiAgICBjb25zdCBjb25mQmFkZ2UgID0gY29uZmlkZW5jZSA/IGA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToxMXB4O2NvbG9yOiR7Y29uZkNvbG9yfTtmb250LXdlaWdodDo2MDA7XCI+JHtlc2NhcGVIdG1sKGNvbmZpZGVuY2UpfTwvc3Bhbj5gIDogJyc7XG4gICAgY29uc3QgcmVhc29uaW5nICA9IHB1Yi5yYXRpb25hbGUgPyBgPHNtYWxsPiR7ZXNjYXBlSHRtbChwdWIucmF0aW9uYWxlKX08L3NtYWxsPmAgOiAnJztcbiAgICBjb25zdCB2ZW51ZVdhcm4gID0gcHViLnZlbnVlX3dhcm5pbmcgPyBgIDxzcGFuIHRpdGxlPVwiJHtlc2NhcGVIdG1sKHB1Yi52ZW51ZV93YXJuaW5nKX1cIiBzdHlsZT1cImNvbG9yOiNkYzc5MDA7Y3Vyc29yOmhlbHA7XCI+XHUyNkEwPC9zcGFuPmAgOiAnJztcbiAgICBjb25zdCBjaXRlS2V5ICAgID0gcHViLmNpdGVfa2V5IHx8ICcnO1xuICAgIGNvbnN0IGlzQWNjZXB0ZWQgPSB3aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnNbY2l0ZUtleV0gIT09IGZhbHNlO1xuICAgIGNvbnN0IHJvd1N0eWxlICAgPSBwdWIuaXNfcmVjb21tZW5kZWQgPT09IGZhbHNlID8gJ29wYWNpdHk6MC43OycgOiAnJztcblxuICAgIGNvbnN0IGlzRmlyc3QgPSBpZHggPT09IDA7XG4gICAgY29uc3QgaXNMYXN0ICA9IGlkeCA9PT0gcmVjb21tZW5kYXRpb25zLmxlbmd0aCAtIDE7XG4gICAgdGFibGVIVE1MICs9IGBcbiAgICAgIDx0ciBkYXRhLWNpdGUta2V5PVwiJHtlc2NhcGVIdG1sKGNpdGVLZXkpfVwiIHN0eWxlPVwiJHtyb3dTdHlsZX1cIj5cbiAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6NzAwO1wiPiR7cmFua308L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJmb250LXNpemU6MC44N2VtO1wiPiR7ZXNjYXBlSHRtbChjaXRhdGlvbil9JHt2ZW51ZVdhcm59PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+JHt5ZWFyfTwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiR7Zmlyc3RBdXRofTwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiR7c2NvcmUgIT09ICdcdTIwMTQnID8gYDxzdHJvbmc+JHtzY29yZX08L3N0cm9uZz4vMTBgIDogJ1x1MjAxNCd9PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+JHtjb25mQmFkZ2V9PC90ZD5cbiAgICAgICAgPHRkPiR7cmVhc29uaW5nfTwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImFjdGlvbi1idG5zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4ke2lzQWNjZXB0ZWQgPyAnIGFjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImFjY2VwdFwiIGFyaWEtbGFiZWw9XCJJbmNsdWRlIHB1YmxpY2F0aW9uICR7ZXNjYXBlSHRtbChjaXRlS2V5KX1cIiB0aXRsZT1cIkluY2x1ZGUgaW4gQ1ZcIlxuICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiMxMGI5ODE7XCIgaWQ9XCJwdWItYWNjZXB0LSR7cmFua31cIj5cdTI3MTM8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biR7IWlzQWNjZXB0ZWQgPyAnIGFjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cInJlamVjdFwiIGFyaWEtbGFiZWw9XCJFeGNsdWRlIHB1YmxpY2F0aW9uICR7ZXNjYXBlSHRtbChjaXRlS2V5KX1cIiB0aXRsZT1cIkV4Y2x1ZGUgZnJvbSBDVlwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6I2VmNDQ0NDtcIiBpZD1cInB1Yi1yZWplY3QtJHtyYW5rfVwiPiR7ZXllU2xhc2hJY29uKCl9PC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBkYXRhLWFjdGlvbj1cInB1Yi11cFwiIGRhdGEtY2l0ZS1rZXk9XCIke2VzY2FwZUh0bWwoY2l0ZUtleSl9XCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJNb3ZlIHB1YmxpY2F0aW9uIHVwXCIgdGl0bGU9XCJNb3ZlIHVwXCIgJHtpc0ZpcnN0ID8gJ2Rpc2FibGVkIHN0eWxlPVwib3BhY2l0eTowLjM7XCInIDogJyd9Plx1MjE5MTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGRhdGEtYWN0aW9uPVwicHViLWRvd25cIiBkYXRhLWNpdGUta2V5PVwiJHtlc2NhcGVIdG1sKGNpdGVLZXkpfVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiTW92ZSBwdWJsaWNhdGlvbiBkb3duXCIgdGl0bGU9XCJNb3ZlIGRvd25cIiAke2lzTGFzdCA/ICdkaXNhYmxlZCBzdHlsZT1cIm9wYWNpdHk6MC4zO1wiJyA6ICcnfT5cdTIxOTM8L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgYDtcbiAgfSk7XG5cbiAgdGFibGVIVE1MICs9ICc8L3Rib2R5PjwvdGFibGU+JztcbiAgY29udGFpbmVyLmlubmVySFRNTCA9IHRhYmxlSFRNTDtcbiAgLy8gRGVsZWdhdGVkIGNsaWNrIGhhbmRsZXIgZm9yIHB1YmxpY2F0aW9uIGFjdGlvbiBidXR0b25zIChkYXRhLWNpdGUta2V5IG9uIDx0cj4gYXZvaWRzIG9uY2xpY2sgaW5qZWN0aW9uKVxuICBjb250YWluZXIucXVlcnlTZWxlY3RvcignI3B1YmxpY2F0aW9ucy1yZXZpZXctdGFibGUgdGJvZHknKT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcbiAgICBjb25zdCBidG4gPSBlLnRhcmdldC5jbG9zZXN0KCcuaWNvbi1idG4nKTtcbiAgICBpZiAoIWJ0biB8fCBidG4uZGlzYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCB0ciA9IGJ0bi5jbG9zZXN0KCd0cltkYXRhLWNpdGUta2V5XScpO1xuICAgIGlmICghdHIpIHJldHVybjtcbiAgICBjb25zdCBhY3Rpb24gPSBidG4uZGF0YXNldC5hY3Rpb247XG4gICAgaWYgICAgICAoYWN0aW9uID09PSAnYWNjZXB0JykgICBoYW5kbGVQdWJBY3Rpb24odHIuZGF0YXNldC5jaXRlS2V5LCB0cnVlKTtcbiAgICBlbHNlIGlmIChhY3Rpb24gPT09ICdyZWplY3QnKSAgIGhhbmRsZVB1YkFjdGlvbih0ci5kYXRhc2V0LmNpdGVLZXksIGZhbHNlKTtcbiAgICBlbHNlIGlmIChhY3Rpb24gPT09ICdwdWItdXAnKSAgIG1vdmVQdWJSb3coYnRuLmRhdGFzZXQuY2l0ZUtleSwgLTEpO1xuICAgIGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3B1Yi1kb3duJykgbW92ZVB1YlJvdyhidG4uZGF0YXNldC5jaXRlS2V5LCArMSk7XG4gIH0pO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgRmlsdGVyIHRhYmxlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBmaWx0ZXJQdWJsaWNhdGlvbnNUYWJsZShxdWVyeSkge1xuICBjb25zdCBxID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3B1YmxpY2F0aW9ucy1yZXZpZXctdGFibGUgdGJvZHkgdHI6bm90KC5wdWItZGl2aWRlci1yb3cpJykuZm9yRWFjaChyb3cgPT4ge1xuICAgIHJvdy5zdHlsZS5kaXNwbGF5ID0gcSA9PT0gJycgfHwgcm93LnRleHRDb250ZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSkgPyAnJyA6ICdub25lJztcbiAgfSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZW9yZGVyIHJvd3MgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIG1vdmVQdWJSb3coY2l0ZUtleSwgZGlyZWN0aW9uKSB7XG4gIGNvbnN0IGFyciA9IHdpbmRvdy5fcHVibGljYXRpb25zT3JkZXJlZDtcbiAgaWYgKCFhcnIgfHwgIWFyci5sZW5ndGgpIHJldHVybjtcbiAgY29uc3QgaWR4ID0gYXJyLmZpbmRJbmRleChwID0+IHAuY2l0ZV9rZXkgPT09IGNpdGVLZXkpO1xuICBpZiAoaWR4IDwgMCkgcmV0dXJuO1xuICBjb25zdCBuZXdJZHggPSBpZHggKyBkaXJlY3Rpb247XG4gIGlmIChuZXdJZHggPCAwIHx8IG5ld0lkeCA+PSBhcnIubGVuZ3RoKSByZXR1cm47XG4gIFthcnJbaWR4XSwgYXJyW25ld0lkeF1dID0gW2FycltuZXdJZHhdLCBhcnJbaWR4XV07XG4gIF9yZWJ1aWxkUHViVGFibGVCb2R5KGFycik7XG4gIC8vIFBlcnNpc3Qgb3JkZXIgdG8gYmFja2VuZCAoZmlyZS1hbmQtZm9yZ2V0KVxuICBmZXRjaCgnL2FwaS9yZW9yZGVyLXJvd3MnLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncHVibGljYXRpb24nLCBvcmRlcmVkX2lkczogYXJyLm1hcChwID0+IHAuY2l0ZV9rZXkpIH0pLFxuICB9KS5jYXRjaCgoKSA9PiB7fSk7XG59XG5cbmZ1bmN0aW9uIF9yZWJ1aWxkUHViVGFibGVCb2R5KHJlY29tbWVuZGF0aW9ucykge1xuICBjb25zdCB0Ym9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwdWJsaWNhdGlvbnMtcmV2aWV3LXRhYmxlIHRib2R5Jyk7XG4gIGlmICghdGJvZHkpIHJldHVybjtcbiAgbGV0IGh0bWwgPSAnJztcbiAgbGV0IGRpdmlkZXJJbnNlcnRlZCA9IGZhbHNlO1xuICByZWNvbW1lbmRhdGlvbnMuZm9yRWFjaCgocHViLCBpZHgpID0+IHtcbiAgICBpZiAoIWRpdmlkZXJJbnNlcnRlZCAmJiBwdWIuaXNfcmVjb21tZW5kZWQgPT09IGZhbHNlKSB7XG4gICAgICBkaXZpZGVySW5zZXJ0ZWQgPSB0cnVlO1xuICAgICAgY29uc3QgZHMgPSAnYmFja2dyb3VuZDojZjNmNGY2O2JvcmRlci10b3A6MnB4IHNvbGlkICNkMWQ1ZGI7cGFkZGluZzowOyc7XG4gICAgICBodG1sICs9IGA8dHIgY2xhc3M9XCJwdWItZGl2aWRlci1yb3dcIj48dGQgc3R5bGU9XCIke2RzfVwiPjwvdGQ+PHRkIHN0eWxlPVwiJHtkc31jb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjgyZW07Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzo2cHggMTJweDt0ZXh0LWFsaWduOmNlbnRlcjtcIj5cdTIwMTQgUHVibGljYXRpb25zIGJlbG93IHdlcmUgbm90IHJlY29tbWVuZGVkIGZvciB0aGlzIHJvbGUgKHByZS1leGNsdWRlZCkgXHUyMDE0PC90ZD48dGQgc3R5bGU9XCIke2RzfVwiPjwvdGQ+PHRkIHN0eWxlPVwiJHtkc31cIj48L3RkPjx0ZCBzdHlsZT1cIiR7ZHN9XCI+PC90ZD48dGQgc3R5bGU9XCIke2RzfVwiPjwvdGQ+PHRkIHN0eWxlPVwiJHtkc31cIj48L3RkPjx0ZCBzdHlsZT1cIiR7ZHN9XCI+PC90ZD48dGQgc3R5bGU9XCIke2RzfVwiPjwvdGQ+PC90cj5gO1xuICAgIH1cbiAgICBjb25zdCByYW5rICAgICAgID0gaWR4ICsgMTtcbiAgICBjb25zdCBjaXRlS2V5ICAgID0gcHViLmNpdGVfa2V5IHx8ICcnO1xuICAgIGNvbnN0IGNpdGF0aW9uICAgPSBwdWIuZm9ybWF0dGVkX2NpdGF0aW9uIHx8IFtwdWIudGl0bGUsIHB1Yi52ZW51ZSwgcHViLnllYXJdLmZpbHRlcihCb29sZWFuKS5qb2luKCcuICcpO1xuICAgIGNvbnN0IHllYXIgICAgICAgPSBwdWIueWVhciB8fCAnXHUyMDE0JztcbiAgICBjb25zdCBmaXJzdEF1dGggID0gcHViLmlzX2ZpcnN0X2F1dGhvciA/ICc8c3BhbiBzdHlsZT1cImNvbG9yOiMxMGI5ODE7Zm9udC13ZWlnaHQ6NzAwO1wiIHRpdGxlPVwiRmlyc3QgYXV0aG9yXCI+XHUyNjA1PC9zcGFuPicgOiAnPHNwYW4gc3R5bGU9XCJjb2xvcjojZDFkNWRiO1wiPlx1MjYwNjwvc3Bhbj4nO1xuICAgIGNvbnN0IHNjb3JlICAgICAgPSBwdWIucmVsZXZhbmNlX3Njb3JlID8gcHViLnJlbGV2YW5jZV9zY29yZSA6ICdcdTIwMTQnO1xuICAgIGNvbnN0IGNvbmZpZGVuY2UgPSBwdWIuY29uZmlkZW5jZSB8fCAnJztcbiAgICBjb25zdCBjb25mQ29sb3IgID0gY29uZmlkZW5jZSA9PT0gJ0hpZ2gnID8gJyMxMGI5ODEnIDogY29uZmlkZW5jZSA9PT0gJ0xvdycgPyAnI2VmNDQ0NCcgOiAnI2Y1OWUwYic7XG4gICAgY29uc3QgY29uZkJhZGdlICA9IGNvbmZpZGVuY2UgPyBgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MTFweDtjb2xvcjoke2NvbmZDb2xvcn07Zm9udC13ZWlnaHQ6NjAwO1wiPiR7ZXNjYXBlSHRtbChjb25maWRlbmNlKX08L3NwYW4+YCA6ICcnO1xuICAgIGNvbnN0IHJlYXNvbmluZyAgPSBwdWIucmF0aW9uYWxlID8gYDxzbWFsbD4ke2VzY2FwZUh0bWwocHViLnJhdGlvbmFsZSl9PC9zbWFsbD5gIDogJyc7XG4gICAgY29uc3QgdmVudWVXYXJuICA9IHB1Yi52ZW51ZV93YXJuaW5nID8gYCA8c3BhbiB0aXRsZT1cIiR7ZXNjYXBlSHRtbChwdWIudmVudWVfd2FybmluZyl9XCIgc3R5bGU9XCJjb2xvcjojZGM3OTAwO2N1cnNvcjpoZWxwO1wiPlx1MjZBMDwvc3Bhbj5gIDogJyc7XG4gICAgY29uc3QgaXNBY2NlcHRlZCA9IHdpbmRvdy5wdWJsaWNhdGlvbkRlY2lzaW9uc1tjaXRlS2V5XSAhPT0gZmFsc2U7XG4gICAgY29uc3Qgcm93U3R5bGUgICA9IHB1Yi5pc19yZWNvbW1lbmRlZCA9PT0gZmFsc2UgPyAnb3BhY2l0eTowLjc7JyA6ICcnO1xuICAgIGNvbnN0IGlzRmlyc3QgICAgPSBpZHggPT09IDA7XG4gICAgY29uc3QgaXNMYXN0ICAgICA9IGlkeCA9PT0gcmVjb21tZW5kYXRpb25zLmxlbmd0aCAtIDE7XG4gICAgaHRtbCArPSBgPHRyIGRhdGEtY2l0ZS1rZXk9XCIke2VzY2FwZUh0bWwoY2l0ZUtleSl9XCIgc3R5bGU9XCIke3Jvd1N0eWxlfVwiPlxuICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6NzAwO1wiPiR7cmFua308L3RkPlxuICAgICAgPHRkIHN0eWxlPVwiZm9udC1zaXplOjAuODdlbTtcIj4ke2VzY2FwZUh0bWwoY2l0YXRpb24pfSR7dmVudWVXYXJufTwvdGQ+XG4gICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4ke3llYXJ9PC90ZD5cbiAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiR7Zmlyc3RBdXRofTwvdGQ+XG4gICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4ke3Njb3JlICE9PSAnXHUyMDE0JyA/IGA8c3Ryb25nPiR7c2NvcmV9PC9zdHJvbmc+LzEwYCA6ICdcdTIwMTQnfTwvdGQ+XG4gICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4ke2NvbmZCYWRnZX08L3RkPlxuICAgICAgPHRkPiR7cmVhc29uaW5nfTwvdGQ+XG4gICAgICA8dGQgY2xhc3M9XCJhY3Rpb24tYnRuc1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4ke2lzQWNjZXB0ZWQgPyAnIGFjdGl2ZScgOiAnJ31cIiBkYXRhLWFjdGlvbj1cImFjY2VwdFwiIGFyaWEtbGFiZWw9XCJJbmNsdWRlIHB1YmxpY2F0aW9uICR7ZXNjYXBlSHRtbChjaXRlS2V5KX1cIiB0aXRsZT1cIkluY2x1ZGUgaW4gQ1ZcIiBzdHlsZT1cImNvbG9yOiMxMGI5ODE7XCIgaWQ9XCJwdWItYWNjZXB0LSR7cmFua31cIj5cdTI3MTM8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuJHshaXNBY2NlcHRlZCA/ICcgYWN0aXZlJyA6ICcnfVwiIGRhdGEtYWN0aW9uPVwicmVqZWN0XCIgYXJpYS1sYWJlbD1cIkV4Y2x1ZGUgcHVibGljYXRpb24gJHtlc2NhcGVIdG1sKGNpdGVLZXkpfVwiIHRpdGxlPVwiRXhjbHVkZSBmcm9tIENWXCIgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O1wiIGlkPVwicHViLXJlamVjdC0ke3Jhbmt9XCI+JHtleWVTbGFzaEljb24oKX08L2J1dHRvbj5cbiAgICAgIDwvdGQ+XG4gICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7XCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIGRhdGEtYWN0aW9uPVwicHViLXVwXCIgZGF0YS1jaXRlLWtleT1cIiR7ZXNjYXBlSHRtbChjaXRlS2V5KX1cIiBhcmlhLWxhYmVsPVwiTW92ZSBwdWJsaWNhdGlvbiB1cFwiIHRpdGxlPVwiTW92ZSB1cFwiICR7aXNGaXJzdCA/ICdkaXNhYmxlZCBzdHlsZT1cIm9wYWNpdHk6MC4zO1wiJyA6ICcnfT5cdTIxOTE8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgZGF0YS1hY3Rpb249XCJwdWItZG93blwiIGRhdGEtY2l0ZS1rZXk9XCIke2VzY2FwZUh0bWwoY2l0ZUtleSl9XCIgYXJpYS1sYWJlbD1cIk1vdmUgcHVibGljYXRpb24gZG93blwiIHRpdGxlPVwiTW92ZSBkb3duXCIgJHtpc0xhc3QgPyAnZGlzYWJsZWQgc3R5bGU9XCJvcGFjaXR5OjAuMztcIicgOiAnJ30+XHUyMTkzPC9idXR0b24+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+YDtcbiAgfSk7XG4gIHRib2R5LmlubmVySFRNTCA9IGh0bWw7XG4gIC8vIFJlLWFwcGx5IGFueSBhY3RpdmUgZmlsdGVyXG4gIGNvbnN0IGZpbHRlclZhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItZmlsdGVyLWlucHV0Jyk/LnZhbHVlIHx8ICcnO1xuICBpZiAoZmlsdGVyVmFsKSBmaWx0ZXJQdWJsaWNhdGlvbnNUYWJsZShmaWx0ZXJWYWwpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgVG9nZ2xlIGFjY2VwdCAvIHJlamVjdCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gaGFuZGxlUHViQWN0aW9uKGNpdGVLZXksIGFjY2VwdCkge1xuICB3aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnNbY2l0ZUtleV0gPSBhY2NlcHQ7XG4gIC8vIHVwZGF0ZSBidXR0b24gYWN0aXZlIHN0YXRlcyBpbiB0aGUgcm93XG4gIGNvbnN0IHJvdyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHRyW2RhdGEtY2l0ZS1rZXk9XCIke0NTUy5lc2NhcGUoY2l0ZUtleSl9XCJdYCk7XG4gIGlmICghcm93KSByZXR1cm47XG4gIHJvdy5xdWVyeVNlbGVjdG9yQWxsKCcuaWNvbi1idG4nKS5mb3JFYWNoKGJ0biA9PiBidG4uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpO1xuICBjb25zdCBhY3Rpb24gPSBhY2NlcHQgPyAnYWNjZXB0JyA6ICdyZWplY3QnO1xuICBjb25zdCBidG4gPSByb3cucXVlcnlTZWxlY3RvcihgW2RhdGEtYWN0aW9uPVwiJHthY3Rpb259XCJdYCk7XG4gIGlmIChidG4pIGJ0bi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEJ1bGsgYWN0aW9ucyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gYnVsa1B1YkFjdGlvbihtb2RlKSB7XG4gIGNvbnN0IHB1YnMgPSB3aW5kb3cuX3B1YmxpY2F0aW9uc09yZGVyZWQgfHwgW107XG4gIGlmICghcHVicy5sZW5ndGgpIHJldHVybjtcblxuICBwdWJzLmZvckVhY2gocHViID0+IHtcbiAgICBjb25zdCBjaXRlS2V5ID0gcHViLmNpdGVfa2V5O1xuICAgIGxldCBhY2NlcHQ7XG4gICAgaWYgKG1vZGUgPT09ICdyZWNvbW1lbmRlZCcpIHtcbiAgICAgIGFjY2VwdCA9IHB1Yi5pc19yZWNvbW1lbmRlZCAhPT0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChtb2RlID09PSAnYWNjZXB0LWFsbCcpIHtcbiAgICAgIGFjY2VwdCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY2VwdCA9IGZhbHNlO1xuICAgIH1cbiAgICB3aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnNbY2l0ZUtleV0gPSBhY2NlcHQ7XG4gICAgLy8gVXBkYXRlIGJ1dHRvbiBzdGF0ZXMgaW4gdGhlIERPTVxuICAgIGNvbnN0IHJvdyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHRyW2RhdGEtY2l0ZS1rZXk9XCIke0NTUy5lc2NhcGUoY2l0ZUtleSl9XCJdYCk7XG4gICAgaWYgKCFyb3cpIHJldHVybjtcbiAgICByb3cucXVlcnlTZWxlY3RvckFsbCgnLmljb24tYnRuW2RhdGEtYWN0aW9uPVwiYWNjZXB0XCJdLFtkYXRhLWFjdGlvbj1cInJlamVjdFwiXScpLmZvckVhY2goYnRuID0+IGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKSk7XG4gICAgY29uc3QgdGFyZ2V0ID0gcm93LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWFjdGlvbj1cIiR7YWNjZXB0ID8gJ2FjY2VwdCcgOiAncmVqZWN0J31cIl1gKTtcbiAgICBpZiAodGFyZ2V0KSB0YXJnZXQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gIH0pO1xuXG4gIGNvbnN0IGFjY2VwdGVkID0gT2JqZWN0LnZhbHVlcyh3aW5kb3cucHVibGljYXRpb25EZWNpc2lvbnMpLmZpbHRlcihCb29sZWFuKS5sZW5ndGg7XG4gIHNob3dUb2FzdChgQnVsayBhY3Rpb24gYXBwbGllZDogJHthY2NlcHRlZH0gYWNjZXB0ZWQsICR7cHVicy5sZW5ndGggLSBhY2NlcHRlZH0gZXhjbHVkZWRgKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFN1Ym1pdCBkZWNpc2lvbnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFB1YmxpY2F0aW9uRGVjaXNpb25zKCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogcHVibGljYXRpb25zX3VpX3N1Ym1pdF9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTAzLTI1VDIxOjM5OjQ4WidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6cHVibGljYXRpb25zLXJldmlldy5zdWJtaXRcbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9yZXZpZXctZGVjaXNpb25zXG4gICAqICAgLSBHRVQgL2FwaS9yZXdyaXRlc1xuICAgKiAgIHJlYWRzOlxuICAgKiAgIC0gd2luZG93OnB1YmxpY2F0aW9uRGVjaXNpb25zXG4gICAqICAgd3JpdGVzOlxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvcmV2aWV3LWRlY2lzaW9ucy5kZWNpc2lvbnNcbiAgICogICBub3RlczogUGVyc2lzdHMgcHVibGljYXRpb24gaW5jbHVkZS9leGNsdWRlIGRlY2lzaW9ucyBiZWZvcmUgdGhlIHJld3JpdGUgc3RhZ2UgZGVyaXZlcyBkb3duc3RyZWFtIGNvbnRlbnQgcHJvcG9zYWxzIGZyb20gdGhlIGFjY2VwdGVkIHB1YmxpY2F0aW9uIHNldC5cbiAgICovXG4gIGNvbnN0IGRlY2lzaW9ucyA9IHdpbmRvdy5wdWJsaWNhdGlvbkRlY2lzaW9ucyB8fCB7fTtcbiAgY29uc3QgY291bnQgPSBPYmplY3Qua2V5cyhkZWNpc2lvbnMpLmxlbmd0aDtcbiAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgc2hvd1RvYXN0KCdObyBwdWJsaWNhdGlvbiBkZWNpc2lvbnMgdG8gc2F2ZS4nLCAnZXJyb3InKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBQZXJzaXN0IGFzIGEgc3RydWN0dXJlZCBhbnN3ZXIgaW4gc2Vzc2lvbiBzdGF0ZVxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvcmV2aWV3LWRlY2lzaW9ucycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdwdWJsaWNhdGlvbnMnLCBkZWNpc2lvbnM6IHdpbmRvdy5wdWJsaWNhdGlvbkRlY2lzaW9ucyB9KVxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICBzdGF0ZU1hbmFnZXIubWFya0NvbnRlbnRDaGFuZ2VkKCk7XG4gICAgICBjb25zdCBhY2NlcHRlZCA9IE9iamVjdC52YWx1ZXMod2luZG93LnB1YmxpY2F0aW9uRGVjaXNpb25zKS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoO1xuICAgICAgY29uc3QgcmVqZWN0ZWQgPSBjb3VudCAtIGFjY2VwdGVkO1xuICAgICAgc2hvd1RvYXN0KGBQdWJsaWNhdGlvbiBzZWxlY3Rpb25zIHNhdmVkOiAke2FjY2VwdGVkfSBrZXB0LCAke3JlamVjdGVkfSBleGNsdWRlZGApO1xuICAgICAgYXdhaXQgZmV0Y2hBbmRSZXZpZXdSZXdyaXRlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnIgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBzaG93VG9hc3QoYEVycm9yOiAke2Vyci5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgcHVibGljYXRpb24gc2VsZWN0aW9ucyd9YCwgJ2Vycm9yJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3IoJ0Vycm9yIHNhdmluZyBwdWJsaWNhdGlvbiBkZWNpc2lvbnM6JywgZXJyKTtcbiAgICBzaG93VG9hc3QoJ0ZhaWxlZCB0byBzYXZlIHB1YmxpY2F0aW9uIHNlbGVjdGlvbnMuIFBsZWFzZSB0cnkgYWdhaW4uJywgJ2Vycm9yJyk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB7XG4gIGJ1aWxkUHVibGljYXRpb25zUmV2aWV3VGFibGUsXG4gIGJ1bGtQdWJBY3Rpb24sXG4gIGZpbHRlclB1YmxpY2F0aW9uc1RhYmxlLFxuICBoYW5kbGVQdWJBY3Rpb24sXG4gIHN1Ym1pdFB1YmxpY2F0aW9uRGVjaXNpb25zLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3Jld3JpdGUtcmV2aWV3LmpzXG4gKiBSZXdyaXRlIHJldmlldyBwYW5lbDogZmV0Y2ggcmV3cml0ZXMsIHJlbmRlciBjYXJkcyB3aXRoIHdvcmQtZGlmZixcbiAqIGFjY2VwdC9lZGl0L3JlamVjdCBkZWNpc2lvbnMsIHN1Ym1pdC5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgYXBwZW5kTG9hZGluZ01lc3NhZ2UsIHJlbW92ZUxvYWRpbmdNZXNzYWdlLCBhcHBlbmRSZXRyeU1lc3NhZ2UsIGFwcGVuZE1lc3NhZ2UsXG4gKiAgIHNldExvYWRpbmcsIHNlbmRBY3Rpb24sIHN3aXRjaFRhYiwgc2NoZWR1bGVBdHNSZWZyZXNoLFxuICogICBlc2NhcGVIdG1sLCBwYXJzZVJld3JpdGVzUmVzcG9uc2UsIFBIQVNFU1xuICovXG5cbmltcG9ydCB7IHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5cbi8vIE1vZHVsZS1sZXZlbCBzdGF0ZVxubGV0IHJld3JpdGVEZWNpc2lvbnMgPSB7fTtcbmxldCBfcmV3cml0ZVBhbmVsQ2FjaGUgPSBudWxsO1xubGV0IHBlcnN1YXNpb25XYXJuaW5nc0Fja25vd2xlZGdlZCA9IGZhbHNlO1xubGV0IF93YXJuaW5nc0J5UmV3cml0ZUlkID0ge307ICAvLyBNYXAgZnJvbSByZXdyaXRlIGlkIFx1MjE5MiB3YXJuaW5nIGxpc3QgKFBhdGggMSlcbmxldCBfcmVzdG9yZVRvYXN0U2hvd24gPSBmYWxzZTtcblxuZnVuY3Rpb24gc3luY1Jld3JpdGVHbG9iYWxzKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgd2luZG93LnJld3JpdGVEZWNpc2lvbnMgPSByZXdyaXRlRGVjaXNpb25zO1xuICB3aW5kb3cuX3Jld3JpdGVQYW5lbENhY2hlID0gX3Jld3JpdGVQYW5lbENhY2hlO1xuICB3aW5kb3cuYWNjZXB0QWxsUmV3cml0ZXMgPSBhY2NlcHRBbGxSZXdyaXRlcztcbiAgd2luZG93LnJlamVjdEFsbFJld3JpdGVzID0gcmVqZWN0QWxsUmV3cml0ZXM7XG4gIHdpbmRvdy50b2dnbGVSZXdyaXRlQ29tcGFjdE1vZGUgPSB0b2dnbGVSZXdyaXRlQ29tcGFjdE1vZGU7XG59XG5cbmZ1bmN0aW9uIF9kZWNpc2lvbnNLZXkoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2lkID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoJ3Nlc3Npb24nKTtcbiAgICByZXR1cm4gc2lkID8gYHJ3X2RlY2lzaW9uc18ke3NpZH1gIDogbnVsbDtcbiAgfSBjYXRjaCAoXykgeyByZXR1cm4gbnVsbDsgfVxufVxuXG5mdW5jdGlvbiBfcGVyc2lzdERlY2lzaW9ucygpIHtcbiAgY29uc3Qga2V5ID0gX2RlY2lzaW9uc0tleSgpO1xuICBpZiAoIWtleSkgcmV0dXJuO1xuICB0cnkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHJld3JpdGVEZWNpc2lvbnMpKTsgfSBjYXRjaCAoXykge31cbn1cblxuLy8gRmFsbGJhY2sgYXVkaXQgZnJvbSB0aGUgbGFzdCAvYXBpL3Jld3JpdGVzIHJlc3BvbnNlIFx1MjAxNCB1c2VkIGZvciBjb2xkLXJlc3RvcmUgKEdBUC0xODYpLlxubGV0IF9iYWNrZW5kUmV3cml0ZUF1ZGl0ID0gW107XG5cbmZ1bmN0aW9uIF9yZXN0b3JlRGVjaXNpb25zKCkge1xuICBjb25zdCBrZXkgPSBfZGVjaXNpb25zS2V5KCk7XG4gIGlmICgha2V5KSByZXR1cm47XG4gIGNvbnN0IGhhZERlY2lzaW9ucyA9IE9iamVjdC5rZXlzKHJld3JpdGVEZWNpc2lvbnMpLmxlbmd0aCA+IDA7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2F2ZWQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkgfHwgJ251bGwnKTtcbiAgICBpZiAoc2F2ZWQgJiYgdHlwZW9mIHNhdmVkID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzYXZlZCkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmV3cml0ZURlY2lzaW9ucywgc2F2ZWQpO1xuICAgICAgc3luY1Jld3JpdGVHbG9iYWxzKCk7XG4gICAgICBpZiAoIWhhZERlY2lzaW9ucyAmJiAhX3Jlc3RvcmVUb2FzdFNob3duICYmIE9iamVjdC5rZXlzKHJld3JpdGVEZWNpc2lvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgX3Jlc3RvcmVUb2FzdFNob3duID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzaG93VG9hc3QoJ1lvdXIgcHJldmlvdXMgcmV3cml0ZSBkZWNpc2lvbnMgaGF2ZSBiZWVuIHJlc3RvcmVkIFx1MjAxNCB5b3UgY2FuIHN0aWxsIGNoYW5nZSB0aGVtLicsICd3YXJuaW5nJywgNjAwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gY2F0Y2ggKF8pIHt9XG5cbiAgLy8gQ29sZC1yZXN0b3JlIGZhbGxiYWNrOiBzZWVkIGRlY2lzaW9ucyBmcm9tIGJhY2tlbmQgcmV3cml0ZV9hdWRpdCB3aGVuXG4gIC8vIGxvY2FsU3RvcmFnZSBoYXMgbm90aGluZyAoZGlmZmVyZW50IGRldmljZSwgaW5jb2duaXRvLCBjbGVhcmVkIHN0b3JhZ2UpLlxuICBpZiAoX2JhY2tlbmRSZXdyaXRlQXVkaXQubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgX2JhY2tlbmRSZXdyaXRlQXVkaXQpIHtcbiAgICAgIGNvbnN0IGlkID0gZW50cnkuaWQ7XG4gICAgICBpZiAoIWlkIHx8ICFlbnRyeS5vdXRjb21lKSBjb250aW51ZTtcbiAgICAgIHJld3JpdGVEZWNpc2lvbnNbaWRdID0ge1xuICAgICAgICBvdXRjb21lOiBlbnRyeS5vdXRjb21lLFxuICAgICAgICBmaW5hbF90ZXh0OiBlbnRyeS5vdXRjb21lID09PSAnZWRpdCcgPyAoZW50cnkuZmluYWwgPz8gbnVsbCkgOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHJld3JpdGVEZWNpc2lvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHN5bmNSZXdyaXRlR2xvYmFscygpO1xuICAgICAgX3BlcnNpc3REZWNpc2lvbnMoKTtcbiAgICAgIGlmICghaGFkRGVjaXNpb25zICYmICFfcmVzdG9yZVRvYXN0U2hvd24pIHtcbiAgICAgICAgX3Jlc3RvcmVUb2FzdFNob3duID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzaG93VG9hc3QoJ1lvdXIgcHJldmlvdXMgcmV3cml0ZSBkZWNpc2lvbnMgaGF2ZSBiZWVuIHJlc3RvcmVkIFx1MjAxNCB5b3UgY2FuIHN0aWxsIGNoYW5nZSB0aGVtLicsICd3YXJuaW5nJywgNjAwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gX2NsZWFyUGVyc2lzdGVkRGVjaXNpb25zKCkge1xuICBjb25zdCBrZXkgPSBfZGVjaXNpb25zS2V5KCk7XG4gIGlmICgha2V5KSByZXR1cm47XG4gIHRyeSB7IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7IH0gY2F0Y2ggKF8pIHt9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZXdyaXRlIHNuYXBzaG90IChjaGFuZ2VkLWl0ZW0gaGlnaGxpZ2h0aW5nKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmZ1bmN0aW9uIF9zbmFwc2hvdEtleSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzaWQgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgnc2Vzc2lvbicpO1xuICAgIHJldHVybiBzaWQgPyBgcndfc25hcHNob3RfJHtzaWR9YCA6IG51bGw7XG4gIH0gY2F0Y2ggKF8pIHsgcmV0dXJuIG51bGw7IH1cbn1cblxuZnVuY3Rpb24gX3NhdmVSZXdyaXRlU25hcHNob3QocmV3cml0ZXMpIHtcbiAgY29uc3Qga2V5ID0gX3NuYXBzaG90S2V5KCk7XG4gIGlmICgha2V5KSByZXR1cm47XG4gIGNvbnN0IG1hcCA9IHt9O1xuICBmb3IgKGNvbnN0IHIgb2YgcmV3cml0ZXMpIHtcbiAgICBjb25zdCBjYXJkSWQgPSBTdHJpbmcoci5pZCkucmVwbGFjZSgvW15hLXpBLVowLTlfLV0vZywgJ18nKTtcbiAgICBtYXBbY2FyZElkXSA9IHIucHJvcG9zZWQgfHwgJyc7XG4gIH1cbiAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShtYXApKTsgfSBjYXRjaCAoXykge31cbn1cblxuZnVuY3Rpb24gX2dldFJld3JpdGVTbmFwc2hvdCgpIHtcbiAgY29uc3Qga2V5ID0gX3NuYXBzaG90S2V5KCk7XG4gIGlmICgha2V5KSByZXR1cm4gbnVsbDtcbiAgdHJ5IHsgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSB8fCAnbnVsbCcpOyB9IGNhdGNoIChfKSB7IHJldHVybiBudWxsOyB9XG59XG5cbmZ1bmN0aW9uIF9jbGVhclJld3JpdGVTbmFwc2hvdCgpIHtcbiAgY29uc3Qga2V5ID0gX3NuYXBzaG90S2V5KCk7XG4gIGlmICgha2V5KSByZXR1cm47XG4gIHRyeSB7IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7IH0gY2F0Y2ggKF8pIHt9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQW5kUmV2aWV3UmV3cml0ZXMoKSB7XG4gIGNvbnN0IGxvYWRpbmdNc2cgPSBhcHBlbmRMb2FkaW5nTWVzc2FnZSgnQ2hlY2tpbmcgZm9yIHRleHQgaW1wcm92ZW1lbnRzLi4uJyk7XG4gIHNldExvYWRpbmcodHJ1ZSwgJ1Jldmlld2luZyByZXdyaXRlc1x1MjAyNicpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL3Jld3JpdGVzJyk7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlUmV3cml0ZXNSZXNwb25zZShhd2FpdCByZXMuanNvbigpKTtcbiAgICByZW1vdmVMb2FkaW5nTWVzc2FnZShsb2FkaW5nTXNnKTtcbiAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI3NEMgRXJyb3IgY2hlY2tpbmcgcmV3cml0ZXM6ICcgKyAoZGF0YS5lcnJvciB8fCAnVW5rbm93biBlcnJvcicpLCBmZXRjaEFuZFJldmlld1Jld3JpdGVzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmV3cml0ZXMgPSBkYXRhLnJld3JpdGVzIHx8IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzID0gZGF0YS5wZXJzdWFzaW9uX3dhcm5pbmdzIHx8IFtdOyAgLy8gUGhhc2UgMTBcbiAgICBfYmFja2VuZFJld3JpdGVBdWRpdCA9IGRhdGEucmV3cml0ZV9hdWRpdCB8fCBbXTtcblxuICAgIC8vIFNob3cgcGVyc3Vhc2lvbiB3YXJuaW5ncyBmaXJzdCAoUGhhc2UgMTApXG4gICAgcGVyc3Vhc2lvbldhcm5pbmdzQWNrbm93bGVkZ2VkID0gd2FybmluZ3MubGVuZ3RoID09PSAwOyAgLy8gTWFyayBhY2tub3dsZWRnZWQgaWYgbm8gd2FybmluZ3NcbiAgICBpZiAod2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbXNnID0gYFx1MjZBMFx1RkUwRiAqKiR7d2FybmluZ3MubGVuZ3RofSoqIHBlcnN1YXNpb24gY2hlY2ske3dhcm5pbmdzLmxlbmd0aCA+IDEgPyAncycgOiAnJ30gZmxhZ2dlZC4gUmV2aWV3IHRoZXNlIGJlZm9yZSBzdWJtaXR0aW5nLmA7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCBtc2cpO1xuICAgIH1cblxuICAgIC8vIFNob3cgcmV3cml0ZSByZXZpZXcgcGFuZWxcbiAgICByZXdyaXRlRGVjaXNpb25zID0ge307XG4gICAgc3luY1Jld3JpdGVHbG9iYWxzKCk7XG4gICAgcmVuZGVyUmV3cml0ZVBhbmVsKHJld3JpdGVzLCB3YXJuaW5ncyk7ICAvLyBQYXNzIHdhcm5pbmdzIHRvIHBhbmVsXG4gICAgc3dpdGNoVGFiKCdyZXdyaXRlJyk7XG4gICAgY29uc3QgbiA9IHJld3JpdGVzLmxlbmd0aDtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJ1x1MjcwRlx1RkUwRiBObyByZXdyaXRlIHN1Z2dlc3Rpb25zIHdlcmUgbmVlZGVkIFx1MjAxNCB5b3VyIHNlbGVjdGVkIGNvbnRlbnQgYWxyZWFkeSB1c2VzIHRoZSBqb2JcXCdzIHRlcm1pbm9sb2d5IHdlbGwuIFRoZSAqKlJld3JpdGVzKiogdGFiIGlzIHN0aWxsIGF2YWlsYWJsZSBzbyB5b3UgY2FuIGNvbmZpcm0gYW5kIGNvbnRpbnVlIHRvICoqU3BlbGwgQ2hlY2sqKiB3aGVuIHJlYWR5LicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCBgXHUyNzBGXHVGRTBGIFlvdSd2ZSBjb25maXJtZWQgeW91ciBleHBlcmllbmNlLCBza2lsbCwgYW5kIGFjaGlldmVtZW50IHNlbGVjdGlvbnMuIEhlcmUgYXJlIHRoZSBBSSdzICoqJHtufSoqIHRleHQgaW1wcm92ZW1lbnQgc3VnZ2VzdGlvbiR7biA+IDEgPyAncycgOiAnJ30gZm9yIHRoZSBpbmNsdWRlZCBidWxsZXRzIFx1MjAxNCBlYWNoIG9uZSBpbnRyb2R1Y2VzIGpvYi1yZWxldmFudCBrZXl3b3JkcyB3aGlsZSBwcmVzZXJ2aW5nIHlvdXIgZmFjdHMuIFJldmlldyBlYWNoIHN1Z2dlc3Rpb24gaW4gdGhlICoqUmV3cml0ZXMqKiB0YWIsIHRoZW4gYWNjZXB0LCBlZGl0LCBvciByZWplY3QgYmVmb3JlIGNvbnRpbnVpbmcgdG8gc3BlbGwgY2hlY2suYCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZW1vdmVMb2FkaW5nTWVzc2FnZShsb2FkaW5nTXNnKTtcbiAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICBhcHBlbmRSZXRyeU1lc3NhZ2UoJ1x1Mjc0QyBFcnJvcjogJyArIGVyci5tZXNzYWdlLCBmZXRjaEFuZFJldmlld1Jld3JpdGVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVuZGVyUmV3cml0ZUF1ZGl0TG9nKCkge1xuICBpZiAoIV9iYWNrZW5kUmV3cml0ZUF1ZGl0IHx8IF9iYWNrZW5kUmV3cml0ZUF1ZGl0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuXG4gIGNvbnN0IE9VVENPTUVfSUNPTiA9IHsgYWNjZXB0OiAnXHUyNzA1JywgcmVqZWN0OiAnXHUyNzRDJywgZWRpdDogJ1x1MjcwRlx1RkUwRicgfTtcbiAgY29uc3QgT1VUQ09NRV9MQUJFTCA9IHsgYWNjZXB0OiAnQWNjZXB0ZWQnLCByZWplY3Q6ICdSZWplY3RlZCcsIGVkaXQ6ICdFZGl0ZWQnIH07XG5cbiAgY29uc3Qgcm93cyA9IF9iYWNrZW5kUmV3cml0ZUF1ZGl0Lm1hcChlbnRyeSA9PiB7XG4gICAgY29uc3QgaWNvbiAgPSBPVVRDT01FX0lDT05bZW50cnkub3V0Y29tZV0gfHwgJ1x1Mjc1Myc7XG4gICAgY29uc3QgbGFiZWwgPSBPVVRDT01FX0xBQkVMW2VudHJ5Lm91dGNvbWVdIHx8IGVudHJ5Lm91dGNvbWU7XG4gICAgY29uc3QgbG9jICAgPSBlc2NhcGVIdG1sKGVudHJ5LmxvY2F0aW9uIHx8IGVudHJ5LmZpZWxkIHx8ICcnKTtcbiAgICBjb25zdCBvcmlnICA9IGVzY2FwZUh0bWwoZW50cnkub3JpZ2luYWwgfHwgJycpO1xuICAgIGNvbnN0IHByb3AgID0gZXNjYXBlSHRtbChlbnRyeS5wcm9wb3NlZCB8fCAnJyk7XG4gICAgY29uc3QgZmluICAgPSBlbnRyeS5vdXRjb21lID09PSAnZWRpdCcgJiYgZW50cnkuZmluYWxcbiAgICAgID8gYDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtjb2xvcjojMWQ0ZWQ4O2ZvbnQtc2l6ZTowLjg1ZW07XCI+RmluYWw6ICR7ZXNjYXBlSHRtbChlbnRyeS5maW5hbCl9PC9kaXY+YFxuICAgICAgOiAnJztcbiAgICByZXR1cm4gYFxuICAgICAgPGRpdiBzdHlsZT1cImJvcmRlci1ib3R0b206MXB4IHNvbGlkICNlMmU4ZjA7cGFkZGluZzo4cHggMDtmb250LXNpemU6MC44OGVtO1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O21hcmdpbi1ib3R0b206NHB4O1wiPlxuICAgICAgICAgIDxzcGFuIHRpdGxlPVwiJHtsYWJlbH1cIj4ke2ljb259PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmcgc3R5bGU9XCJjb2xvcjojMzc0MTUxO1wiPiR7bGFiZWx9PC9zdHJvbmc+XG4gICAgICAgICAgJHtsb2MgPyBgPHNwYW4gc3R5bGU9XCJjb2xvcjojOWNhM2FmO2ZvbnQtc2l6ZTowLjg1ZW07XCI+XHUyMDE0ICR7bG9jfTwvc3Bhbj5gIDogJyd9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IzZiNzI4MDt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdoO2ZvbnQtc2l6ZTowLjg1ZW07XCI+JHtvcmlnfTwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IzM3NDE1MTtmb250LXNpemU6MC44NWVtO1wiPiR7cHJvcH08L2Rpdj5cbiAgICAgICAgJHtmaW59XG4gICAgICA8L2Rpdj5gO1xuICB9KS5qb2luKCcnKTtcblxuICByZXR1cm4gYFxuICAgIDxkZXRhaWxzIHN0eWxlPVwibWFyZ2luLXRvcDoyNHB4O2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDtcIj5cbiAgICAgIDxzdW1tYXJ5IHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7bGlzdC1zdHlsZTpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtcIj5cbiAgICAgICAgPHNwYW4+XHVEODNEXHVEQ0NCPC9zcGFuPlxuICAgICAgICA8c3Bhbj5SZXdyaXRlIEF1ZGl0IExvZyAoJHtfYmFja2VuZFJld3JpdGVBdWRpdC5sZW5ndGh9IGRlY2lzaW9uJHtfYmFja2VuZFJld3JpdGVBdWRpdC5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30pPC9zcGFuPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OmF1dG87Y29sb3I6IzljYTNhZjtmb250LXNpemU6MC44NWVtO1wiPlx1MjVCQyBzaG93PC9zcGFuPlxuICAgICAgPC9zdW1tYXJ5PlxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MTJweDtcIj4ke3Jvd3N9PC9kaXY+XG4gICAgPC9kZXRhaWxzPmA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJld3JpdGVQYW5lbChyZXdyaXRlcywgd2FybmluZ3MgPSBbXSkge1xuICBfcmV3cml0ZVBhbmVsQ2FjaGUgPSB7IHJld3JpdGVzLCB3YXJuaW5ncyB9O1xuICAvLyBCdWlsZCBwZXItY2FyZCB3YXJuaW5nIGluZGV4IGZvciBQYXRoIDEgYmFkZ2VzXG4gIF93YXJuaW5nc0J5UmV3cml0ZUlkID0ge307XG4gIGZvciAoY29uc3QgdyBvZiB3YXJuaW5ncykge1xuICAgIGlmICghX3dhcm5pbmdzQnlSZXdyaXRlSWRbdy5pZF0pIF93YXJuaW5nc0J5UmV3cml0ZUlkW3cuaWRdID0gW107XG4gICAgX3dhcm5pbmdzQnlSZXdyaXRlSWRbdy5pZF0ucHVzaCh3KTtcbiAgfVxuICBzeW5jUmV3cml0ZUdsb2JhbHMoKTtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGNvbnN0IGhhc1Jld3JpdGVzID0gcmV3cml0ZXMubGVuZ3RoID4gMDtcblxuICAvLyBCdWlsZCBwZXJzdWFzaW9uIHdhcm5pbmdzIHNlY3Rpb24gKFBoYXNlIDEwKVxuICBsZXQgd2FybmluZ3NIdG1sID0gJyc7XG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgd2FybmluZ3NCeVR5cGUgPSB7fTtcbiAgICB3YXJuaW5ncy5mb3JFYWNoKHcgPT4ge1xuICAgICAgaWYgKCF3YXJuaW5nc0J5VHlwZVt3LmZsYWdfdHlwZV0pIHdhcm5pbmdzQnlUeXBlW3cuZmxhZ190eXBlXSA9IDA7XG4gICAgICB3YXJuaW5nc0J5VHlwZVt3LmZsYWdfdHlwZV0rKztcbiAgICB9KTtcbiAgICBjb25zdCB3YXJuaW5nQ291bnRzID0gT2JqZWN0LmVudHJpZXMod2FybmluZ3NCeVR5cGUpXG4gICAgICAubWFwKChbdHlwZSwgY291bnRdKSA9PiBgJHtjb3VudH0gJHt0eXBlLnJlcGxhY2UoL18vZywgJyAnKX1gKVxuICAgICAgLmpvaW4oJywgJyk7XG5cbiAgICB3YXJuaW5nc0h0bWwgPSBgXG4gICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmVmMmYyO2JvcmRlcjoxcHggc29saWQgI2ZlY2FjYTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE0cHg7bWFyZ2luLWJvdHRvbToyMHB4O1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjEwcHg7Y3Vyc29yOnBvaW50ZXI7XCIgb25jbGljaz1cInRoaXMucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjd2FybmluZ3MtZGV0YWlsJykuc3R5bGUuZGlzcGxheSA9IHRoaXMucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjd2FybmluZ3MtZGV0YWlsJykuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJztcIj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToyMHB4O1wiPlx1MjZBMFx1RkUwRjwvc3Bhbj5cbiAgICAgICAgICA8c3Ryb25nIHN0eWxlPVwiY29sb3I6Izk5MWIxYjtcIj5QZXJzdWFzaW9uIGNoZWNrczogJHt3YXJuaW5nQ291bnRzfTwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6YXV0bztjb2xvcjojN2YxZDFkO1wiPlx1MjVCQzwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJ3YXJuaW5ncy1kZXRhaWxcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTttYXJnaW4tdG9wOjEwcHg7cGFkZGluZy10b3A6MTBweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZmVjYWNhO1wiPlxuICAgICAgICAgICR7d2FybmluZ3MubWFwKHcgPT4gYFxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6OHB4O21hcmdpbi1ib3R0b206OHB4O2JhY2tncm91bmQ6I2ZmZjdlZDtib3JkZXItbGVmdDozcHggc29saWQgI2Y5NzMxNjtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC45ZW07XCI+XG4gICAgICAgICAgICAgIDxzdHJvbmc+JHt3LmZsYWdfdHlwZS5yZXBsYWNlKC9fL2csICcgJyl9PC9zdHJvbmc+IGF0ICR7dy5sb2NhdGlvbn08YnI+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IzdjMmQxMjtcIj4ke3cuZGV0YWlsc308L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgKS5qb2luKCcnKX1cbiAgICAgICAgICA8YnV0dG9uIHN0eWxlPVwibWFyZ2luLXRvcDoxMHB4O3BhZGRpbmc6OHB4IDEycHg7YmFja2dyb3VuZDojOTkxYjFiO2NvbG9yOndoaXRlO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpwb2ludGVyO1wiIG9uY2xpY2s9XCJzZXRQZXJzdWFzaW9uV2FybmluZ3NBY2tub3dsZWRnZWQodHJ1ZSk7IHRoaXMucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAnMC42JzsgdXBkYXRlUmV3cml0ZVRhbGx5KCk7XCI+XG4gICAgICAgICAgICBcdTI3MTMgQWNrbm93bGVkZ2VkXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8vIENvbXB1dGUgcGVyLWNhcmQgY2hhbmdlIHN0YXR1cyByZWxhdGl2ZSB0byBwcmV2aW91cyByZW5kZXIncyBzbmFwc2hvdC5cbiAgY29uc3QgcHJldlNuYXBzaG90ID0gX2dldFJld3JpdGVTbmFwc2hvdCgpO1xuICBjb25zdCBjaGFuZ2VTdGF0dXNNYXAgPSB7fTtcbiAgaWYgKHByZXZTbmFwc2hvdCkge1xuICAgIGZvciAoY29uc3QgciBvZiByZXdyaXRlcykge1xuICAgICAgY29uc3QgY2FyZElkID0gU3RyaW5nKHIuaWQpLnJlcGxhY2UoL1teYS16QS1aMC05Xy1dL2csICdfJyk7XG4gICAgICBpZiAoIShjYXJkSWQgaW4gcHJldlNuYXBzaG90KSkge1xuICAgICAgICBjaGFuZ2VTdGF0dXNNYXBbY2FyZElkXSA9ICduZXcnO1xuICAgICAgfSBlbHNlIGlmIChwcmV2U25hcHNob3RbY2FyZElkXSAhPT0gKHIucHJvcG9zZWQgfHwgJycpKSB7XG4gICAgICAgIGNoYW5nZVN0YXR1c01hcFtjYXJkSWRdID0gJ3VwZGF0ZWQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBTYXZlIGN1cnJlbnQgcmV3cml0ZXMgYXMgc25hcHNob3QgZm9yIG5leHQgcmVuZGVyIGNvbXBhcmlzb24uXG4gIF9zYXZlUmV3cml0ZVNuYXBzaG90KHJld3JpdGVzKTtcblxuICBjb250ZW50LmlubmVySFRNTCA9IHdhcm5pbmdzSHRtbCArIGBcbiAgICA8ZGl2IGlkPVwicmV3cml0ZS1wYW5lbFwiPlxuICAgICAgPGgxPlx1MjcwRlx1RkUwRiBSZXZpZXcgVGV4dCBJbXByb3ZlbWVudHM8L2gxPlxuICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MjBweDtcIj5cbiAgICAgICAgJHtoYXNSZXdyaXRlc1xuICAgID8gJ1JldmlldyBlYWNoIHN1Z2dlc3RlZCB0ZXh0IGltcHJvdmVtZW50LiBBY2NlcHQsIGVkaXQsIG9yIHJlamVjdCBhbGwgc3VnZ2VzdGlvbnMgYmVmb3JlIHByb2NlZWRpbmcgdG8gc3BlbGwgY2hlY2suJ1xuICAgIDogJ05vIHRleHQgaW1wcm92ZW1lbnRzIHdlcmUgc3VnZ2VzdGVkIGZvciB0aGlzIENWLiBDb250aW51ZSB3aGVuIHlvdSBhcmUgcmVhZHkgdG8gbW92ZSB0byBzcGVsbCBjaGVjay4nfVxuICAgICAgPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cInJld3JpdGUtdGFsbHktYmFyXCIgaWQ9XCJyZXdyaXRlLXRhbGx5XCIgJHtoYXNSZXdyaXRlcyA/ICcnIDogJ3N0eWxlPVwiZGlzcGxheTpub25lXCInfT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWxseS1hY2NlcHRlZFwiPlx1MjcxMyBBY2NlcHRlZDogPHN0cm9uZyBpZD1cInRhbGx5LWFjY2VwdGVkXCI+MDwvc3Ryb25nPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWxseS1yZWplY3RlZFwiPlx1MjcxNyBSZWplY3RlZDogPHN0cm9uZyBpZD1cInRhbGx5LXJlamVjdGVkXCI+MDwvc3Ryb25nPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWxseS1wZW5kaW5nXCI+XHUyM0YzIFBlbmRpbmc6IDxzdHJvbmcgaWQ9XCJ0YWxseS1wZW5kaW5nXCI+JHtyZXdyaXRlcy5sZW5ndGh9PC9zdHJvbmc+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicnctYnVsay1idG5cIiBvbmNsaWNrPVwiYWNjZXB0QWxsUmV3cml0ZXMoKVwiIHRpdGxlPVwiQWNjZXB0IGFsbCBwZW5kaW5nIHN1Z2dlc3Rpb25zXCI+XHUyNzEzIEFjY2VwdCBBbGw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJ3LWJ1bGstYnRuIHJ3LWJ1bGstcmVqZWN0XCIgb25jbGljaz1cInJlamVjdEFsbFJld3JpdGVzKClcIiB0aXRsZT1cIlJlamVjdCBhbGwgcGVuZGluZyBzdWdnZXN0aW9uc1wiPlx1MjcxNyBSZWplY3QgQWxsPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJydy1jb21wYWN0LXRvZ2dsZVwiIGlkPVwicnctY29tcGFjdC1idG5cIiBvbmNsaWNrPVwidG9nZ2xlUmV3cml0ZUNvbXBhY3RNb2RlKClcIiB0aXRsZT1cIlN3aXRjaCB0byBjb21wYWN0IHNpbmdsZS1saW5lIHZpZXcgZm9yIHJhcGlkIHJldmlld1wiPlx1MjI5RSBDb21wYWN0PC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJzdWJtaXQtcmV3cml0ZXMtYnRuXCIgaWQ9XCJzdWJtaXQtcmV3cml0ZXMtYnRuXCIgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICBvbmNsaWNrPVwic3VibWl0UmV3cml0ZURlY2lzaW9ucygpXCI+U3VibWl0IEFsbCBEZWNpc2lvbnM8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cInJld3JpdGUtY2FyZHNcIj5cbiAgICAgICAgJHtoYXNSZXdyaXRlc1xuICAgID8gcmV3cml0ZXMubWFwKHIgPT4ge1xuICAgICAgICBjb25zdCBjYXJkSWQgPSBTdHJpbmcoci5pZCkucmVwbGFjZSgvW15hLXpBLVowLTlfLV0vZywgJ18nKTtcbiAgICAgICAgcmV0dXJuIHJlbmRlclJld3JpdGVDYXJkKHIsIF93YXJuaW5nc0J5UmV3cml0ZUlkW3IuaWRdIHx8IFtdLCBjaGFuZ2VTdGF0dXNNYXBbY2FyZElkXSB8fCBudWxsKTtcbiAgICAgIH0pLmpvaW4oJycpXG4gICAgOiBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjI0cHg7XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiPlx1MjcwRlx1RkUwRjwvZGl2PlxuICAgICAgICAgICAgPGgzPk5vIFJld3JpdGUgU3VnZ2VzdGlvbnM8L2gzPlxuICAgICAgICAgICAgPHA+VGhpcyBkcmFmdCBhbHJlYWR5IHBhc3NlcyB0aGUgcmV3cml0ZSBzdGFnZSB3aXRob3V0IHN1Z2dlc3RlZCB3b3JkaW5nIGNoYW5nZXMuPC9wPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInN1Ym1pdC1idG5cIiBpZD1cInN1Ym1pdC1yZXdyaXRlcy1idG5cIiBvbmNsaWNrPVwic3VibWl0UmV3cml0ZURlY2lzaW9ucygpXCI+Q29udGludWUgdG8gU3BlbGwgQ2hlY2s8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgYH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgICR7X3JlbmRlclJld3JpdGVBdWRpdExvZygpfVxuICBgO1xuXG4gIC8vIFJlc3RvcmUgZGVjaXNpb25zIHBlcnNpc3RlZCBmcm9tIGEgcHJldmlvdXMgcGFnZSBsb2FkIChHQVAtMTY2KS5cbiAgX3Jlc3RvcmVEZWNpc2lvbnMoKTtcbiAgLy8gUmUtYXBwbHkgYW55IGRlY2lzaW9ucyBtYWRlIGJlZm9yZSB0aGUgbGFzdCB0YWIgbmF2aWdhdGlvbi5cbiAgaWYgKE9iamVjdC5rZXlzKHJld3JpdGVEZWNpc2lvbnMpLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgZGVjXSBvZiBPYmplY3QuZW50cmllcyhyZXdyaXRlRGVjaXNpb25zKSkge1xuICAgICAgaWYgKCFkZWMgfHwgIWRlYy5vdXRjb21lKSBjb250aW51ZTtcbiAgICAgIGlmIChkZWMub3V0Y29tZSA9PT0gJ2VkaXQnICYmIGRlYy5maW5hbF90ZXh0ICE9IG51bGwpIHtcbiAgICAgICAgLy8gRW50ZXIgZWRpdCBtb2RlLCBpbmplY3QgdGhlIHNhdmVkIHRleHQsIHRoZW4gc2F2ZSBzbyB0aGUgY2FyZFxuICAgICAgICAvLyBzaG93cyBhcyBhY2NlcHRlZCB3aXRoIHRoZSBjb3JyZWN0IGRpZmYgcmVuZGVyZWQuXG4gICAgICAgIGFwcGx5UmV3cml0ZUFjdGlvbihpZCwgJ2VkaXQnKTtcbiAgICAgICAgY29uc3QgdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcnctdGV4dGFyZWEtJHtpZH1gKTtcbiAgICAgICAgaWYgKHRhKSB7XG4gICAgICAgICAgdGEudmFsdWUgPSBkZWMuZmluYWxfdGV4dDtcbiAgICAgICAgICBzYXZlUmV3cml0ZUVkaXQoaWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcHBseVJld3JpdGVBY3Rpb24oaWQsIGRlYy5vdXRjb21lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlUmV3cml0ZVRhbGx5KCk7XG4gIH1cbn1cblxuLyoqXG4gKiBjb21wdXRlV29yZERpZmYob3JpZ2luYWwsIHByb3Bvc2VkKSBcdTIwMTQgTENTIHdvcmQtbGV2ZWwgZGlmZi5cbiAqXG4gKiBUb2tlbmlzZXMgYm90aCBzdHJpbmdzIGJ5IHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlIGJvdW5kYXJpZXMgd2hpbGVcbiAqIHByZXNlcnZpbmcgdGhlIHdoaXRlc3BhY2UgdG9rZW5zIHNvIHRoZSByZW5kZXJlZCBkaWZmIGhhcyB0aGUgc2FtZVxuICogc3BhY2luZyBhcyB0aGUgc291cmNlIHRleHQuICBSZXR1cm5zIGFuIGFycmF5IG9mXG4gKiB7dG9rZW46IHN0cmluZywgdHlwZTogJ3VuY2hhbmdlZCd8J3JlbW92ZWQnfCdhZGRlZCd9LlxuICovXG5mdW5jdGlvbiBjb21wdXRlV29yZERpZmYob3JpZ2luYWwsIHByb3Bvc2VkKSB7XG4gIC8vIFNwbGl0IG9uIHdoaXRlc3BhY2UgYnV0IGtlZXAgdGhlIHNlcGFyYXRvcnMgYXMgdG9rZW5zLlxuICBmdW5jdGlvbiB0b2tlbml6ZShzdHIpIHsgcmV0dXJuIChzdHIgfHwgJycpLnNwbGl0KC8oXFxzKykvKTsgfVxuXG4gIGNvbnN0IGEgPSB0b2tlbml6ZShvcmlnaW5hbCk7XG4gIGNvbnN0IGIgPSB0b2tlbml6ZShwcm9wb3NlZCk7XG4gIGNvbnN0IG0gPSBhLmxlbmd0aDtcbiAgY29uc3QgbiA9IGIubGVuZ3RoO1xuXG4gIC8vIEJ1aWxkIExDUyBEUCB0YWJsZSAoTyhtKm4pIFx1MjAxNCBhY2NlcHRhYmxlIGZvciBDViBidWxsZXQgbGVuZ3RocykuXG4gIGNvbnN0IGRwID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiBtICsgMX0sICgpID0+IG5ldyBBcnJheShuICsgMSkuZmlsbCgwKSk7XG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xuICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xuICAgICAgZHBbaV1bal0gPSBhW2kgLSAxXSA9PT0gYltqIC0gMV1cbiAgICAgICAgPyBkcFtpIC0gMV1baiAtIDFdICsgMVxuICAgICAgICA6IE1hdGgubWF4KGRwW2kgLSAxXVtqXSwgZHBbaV1baiAtIDFdKTtcbiAgICB9XG4gIH1cblxuICAvLyBCYWNrdHJhY2sgdG8gcHJvZHVjZSB0aGUgZGlmZiBzZXF1ZW5jZS5cbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGxldCBpID0gbSwgaiA9IG47XG4gIHdoaWxlIChpID4gMCB8fCBqID4gMCkge1xuICAgIGlmIChpID4gMCAmJiBqID4gMCAmJiBhW2kgLSAxXSA9PT0gYltqIC0gMV0pIHtcbiAgICAgIHJlc3VsdC51bnNoaWZ0KHt0b2tlbjogYVtpIC0gMV0sIHR5cGU6ICd1bmNoYW5nZWQnfSk7XG4gICAgICBpLS07IGotLTtcbiAgICB9IGVsc2UgaWYgKGogPiAwICYmIChpID09PSAwIHx8IGRwW2ldW2ogLSAxXSA+PSBkcFtpIC0gMV1bal0pKSB7XG4gICAgICByZXN1bHQudW5zaGlmdCh7dG9rZW46IGJbaiAtIDFdLCB0eXBlOiAnYWRkZWQnfSk7XG4gICAgICBqLS07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC51bnNoaWZ0KHt0b2tlbjogYVtpIC0gMV0sIHR5cGU6ICdyZW1vdmVkJ30pO1xuICAgICAgaS0tO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogUmVuZGVyIGEge3Rva2VuLCB0eXBlfSBkaWZmIGFycmF5IGludG8gYW4gSFRNTCBzdHJpbmcuICovXG5mdW5jdGlvbiByZW5kZXJEaWZmSHRtbCh0b2tlbnMpIHtcbiAgcmV0dXJuIHRva2Vucy5tYXAodCA9PiB7XG4gICAgaWYgKHQudHlwZSA9PT0gJ3JlbW92ZWQnKSByZXR1cm4gYDxkZWwgY2xhc3M9XCJkaWZmLXJlbW92ZWRcIj4ke2VzY2FwZUh0bWwodC50b2tlbil9PC9kZWw+YDtcbiAgICBpZiAodC50eXBlID09PSAnYWRkZWQnKSAgIHJldHVybiBgPGlucyBjbGFzcz1cImRpZmYtYWRkZWRcIj4ke2VzY2FwZUh0bWwodC50b2tlbil9PC9pbnM+YDtcbiAgICByZXR1cm4gZXNjYXBlSHRtbCh0LnRva2VuKTtcbiAgfSkuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJld3JpdGVDYXJkKHIsIGNhcmRXYXJuaW5ncyA9IFtdLCBjaGFuZ2VTdGF0dXMgPSBudWxsKSB7XG4gIGNvbnN0IGlzV2Vha1NraWxsQWRkID0gci50eXBlID09PSAnc2tpbGxfYWRkJyAmJiByLmV2aWRlbmNlX3N0cmVuZ3RoID09PSAnd2Vhayc7XG4gIGNvbnN0IHdlYWtCYWRnZSAgICAgPSBpc1dlYWtTa2lsbEFkZFxuICAgID8gYDxzcGFuIGNsYXNzPVwid2Vhay1iYWRnZVwiPlx1MjZBMCBDYW5kaWRhdGUgdG8gY29uZmlybTwvc3Bhbj5gXG4gICAgOiAnJztcbiAgY29uc3QgY2hhbmdlQmFkZ2UgICA9IGNoYW5nZVN0YXR1cyA9PT0gJ25ldydcbiAgICA/IGA8c3BhbiBjbGFzcz1cInJ3LWNoYW5nZS1iYWRnZSBydy1jaGFuZ2UtbmV3XCIgYXJpYS1sYWJlbD1cIk5ldyBzdWdnZXN0aW9uIG5vdCBpbiBwcmV2aW91cyBydW5cIj5cdUQ4M0NcdUREOTUgTmV3PC9zcGFuPmBcbiAgICA6IGNoYW5nZVN0YXR1cyA9PT0gJ3VwZGF0ZWQnXG4gICAgICA/IGA8c3BhbiBjbGFzcz1cInJ3LWNoYW5nZS1iYWRnZSBydy1jaGFuZ2UtdXBkYXRlZFwiIGFyaWEtbGFiZWw9XCJTdWdnZXN0aW9uIGNoYW5nZWQgc2luY2UgcHJldmlvdXMgcnVuXCI+XHUyMUJCIFVwZGF0ZWQ8L3NwYW4+YFxuICAgICAgOiAnJztcbiAgLy8gS2V5d29yZCBwaWxscyB3aXRoIHBvc2l0aW9uLWJhc2VkIHJhbmsgYmFkZ2UgKCMxLCAjMiwgXHUyMDI2KVxuICBjb25zdCBrZXl3b3JkUGlsbHMgID0gKHIua2V5d29yZHNfaW50cm9kdWNlZCB8fCBbXSlcbiAgICAubWFwKChrLCBpZHgpID0+IGA8c3BhbiBjbGFzcz1cInJld3JpdGUta2V5d29yZFwiPjxzcGFuIGNsYXNzPVwia3ctcmFua1wiPiMke2lkeCArIDF9PC9zcGFuPiR7ZXNjYXBlSHRtbChrKX08L3NwYW4+YClcbiAgICAuam9pbignJyk7XG4gIGNvbnN0IHR5cGVMYWJlbCA9IChyLnR5cGUgfHwgJ3Jld3JpdGUnKS5yZXBsYWNlKC9fL2csICcgJyk7XG4gIC8vIFNhbml0aXplIElEOiBrZWVwIG9ubHkgYWxwaGFudW1lcmljLCB1bmRlcnNjb3JlLCBhbmQgaHlwaGVuIHNvIGl0IGlzXG4gIC8vIHNhZmUgYXMgYm90aCBhbiBIVE1MIGF0dHJpYnV0ZSB2YWx1ZSBhbmQgYSBKUyBzdHJpbmcgbGl0ZXJhbCBpbiBvbmNsaWNrLlxuICBjb25zdCBjYXJkSWQgICAgPSBTdHJpbmcoci5pZCkucmVwbGFjZSgvW15hLXpBLVowLTlfLV0vZywgJ18nKTtcblxuICAvLyBDb21wdXRlIHdvcmQtbGV2ZWwgZGlmZiBmb3IgdGhlIGlubGluZSBkaXNwbGF5LlxuICBjb25zdCBkaWZmVG9rZW5zID0gY29tcHV0ZVdvcmREaWZmKHIub3JpZ2luYWwgfHwgJycsIHIucHJvcG9zZWQgfHwgJycpO1xuICBjb25zdCBkaWZmSHRtbCAgID0gcmVuZGVyRGlmZkh0bWwoZGlmZlRva2Vucyk7XG5cbiAgcmV0dXJuIGBcbiAgICA8ZGl2IGNsYXNzPVwicmV3cml0ZS1jYXJkXCIgaWQ9XCJydy1jYXJkLSR7Y2FyZElkfVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJld3JpdGUtY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXdyaXRlLWNhcmQtdHlwZVwiPiR7ZXNjYXBlSHRtbCh0eXBlTGFiZWwpfTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXdyaXRlLWNhcmQtdGl0bGVcIj4ke2VzY2FwZUh0bWwoci5sb2NhdGlvbiB8fCByLmlkKX08L3NwYW4+XG4gICAgICAgICR7d2Vha0JhZGdlfSR7Y2hhbmdlQmFkZ2V9XG4gICAgICAgIDxzcGFuIGlkPVwicnctZGVjaXNpb24tYmFkZ2UtJHtjYXJkSWR9XCIgYXJpYS1saXZlPVwicG9saXRlXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7Zm9udC1zaXplOjAuNzhlbTtmb250LXdlaWdodDo2MDA7cGFkZGluZzoxcHggN3B4O2JvcmRlci1yYWRpdXM6OXB4O21hcmdpbi1sZWZ0OmF1dG87XCI+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmV3cml0ZS1jYXJkLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJld3JpdGUtaW5saW5lLWRpZmZcIiBpZD1cInJ3LWRpZmYtJHtjYXJkSWR9XCJcbiAgICAgICAgICAgICBkYXRhLW9yaWdpbmFsPVwiJHtlc2NhcGVIdG1sKHIub3JpZ2luYWwgfHwgJycpfVwiPiR7ZGlmZkh0bWx9PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXdyaXRlLWFmdGVyXCIgaWQ9XCJydy1hZnRlci0ke2NhcmRJZH1cIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPlxuICAgICAgICAgIDxzcGFuIGlkPVwicnctYWZ0ZXItdGV4dC0ke2NhcmRJZH1cIj4ke2VzY2FwZUh0bWwoci5wcm9wb3NlZCB8fCAnJyl9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgJHtrZXl3b3JkUGlsbHMgPyBgPGRpdiBjbGFzcz1cInJld3JpdGUta2V5d29yZHNcIj4ke2tleXdvcmRQaWxsc308L2Rpdj5gIDogJyd9XG4gICAgICAgICR7ci5yYXRpb25hbGUgPyBgXG4gICAgICAgIDxkZXRhaWxzIGNsYXNzPVwicmV3cml0ZS1yYXRpb25hbGVcIj5cbiAgICAgICAgICA8c3VtbWFyeT5SYXRpb25hbGUgJmFtcDsgRXZpZGVuY2U8L3N1bW1hcnk+XG4gICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW46NnB4IDAgMDtcIj4ke2VzY2FwZUh0bWwoci5yYXRpb25hbGUpfTwvcD5cbiAgICAgICAgICAke3IuZXZpZGVuY2UgPyBgPHAgc3R5bGU9XCJjb2xvcjojOWNhM2FmO2ZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luOjRweCAwIDA7XCI+JHtlc2NhcGVIdG1sKHIuZXZpZGVuY2UpfTwvcD5gIDogJyd9XG4gICAgICAgIDwvZGV0YWlscz5gIDogJyd9XG4gICAgICAgICR7Y2FyZFdhcm5pbmdzLmxlbmd0aCA+IDAgPyBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXdyaXRlLXBlcnN1YXNpb24tYmFkZ2VzXCI+XG4gICAgICAgICAgJHtjYXJkV2FybmluZ3MubWFwKHcgPT4gYDxzcGFuIGNsYXNzPVwicGVyc3Vhc2lvbi1iYWRnZSBwZXJzdWFzaW9uLWJhZGdlLS0ke3cuc2V2ZXJpdHl9XCIgdGl0bGU9XCIke2VzY2FwZUh0bWwody5kZXRhaWxzKX1cIj5cdTI2QTAgJHtlc2NhcGVIdG1sKHcuZmxhZ190eXBlLnJlcGxhY2UoL18vZywgJyAnKSl9PC9zcGFuPmApLmpvaW4oJycpfVxuICAgICAgICA8L2Rpdj5gIDogJyd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXdyaXRlLWFjdGlvbnNcIj5cbiAgICAgICAgICA8YSBjbGFzcz1cInJ3LWJhY2stbGlua1wiIGhyZWY9XCIjXCIgb25jbGljaz1cImV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHN3aXRjaFRhYignY3VzdG9taXphdGlvbnMnKVwiIHRpdGxlPVwiR28gYmFjayB0byBDdXN0b21pc2UgdG8gcmVjb25zaWRlciB3aGV0aGVyIHRvIGluY2x1ZGUgdGhpcyBjb250ZW50XCI+XHUyMUE5IFJlY29uc2lkZXIgaW5jbHVzaW9uPC9hPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJydy1idG4gYWNjZXB0XCIgaWQ9XCJydy1hY2NlcHQtJHtjYXJkSWR9XCIgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIiBvbmNsaWNrPVwiYXBwbHlSZXdyaXRlQWN0aW9uKCcke2NhcmRJZH0nLCAnYWNjZXB0JylcIj5cdTI3MTMgQWNjZXB0PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJ3LWJ0biBlZGl0XCIgICBpZD1cInJ3LWVkaXQtJHtjYXJkSWR9XCIgICBhcmlhLXByZXNzZWQ9XCJmYWxzZVwiIG9uY2xpY2s9XCJhcHBseVJld3JpdGVBY3Rpb24oJyR7Y2FyZElkfScsICdlZGl0JylcIj5cdTI3MEUgRWRpdDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJydy1idG4gcmVqZWN0XCIgaWQ9XCJydy1yZWplY3QtJHtjYXJkSWR9XCIgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIiBvbmNsaWNrPVwiYXBwbHlSZXdyaXRlQWN0aW9uKCcke2NhcmRJZH0nLCAncmVqZWN0JylcIj5cdTI3MTcgUmVqZWN0PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gYXBwbHlSZXdyaXRlQWN0aW9uKGlkLCBvdXRjb21lKSB7XG4gIGNvbnN0IGNhcmQgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcnctY2FyZC0ke2lkfWApO1xuICBjb25zdCBhZnRlckVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHJ3LWFmdGVyLSR7aWR9YCk7XG4gIGNvbnN0IGRpZmZFbCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcnctZGlmZi0ke2lkfWApO1xuICBpZiAoIWNhcmQgfHwgIWFmdGVyRWwpIHJldHVybjtcblxuICAvLyBDbGVhciBhbnkgcHJldmlvdXMgb3V0Y29tZSBzdHlsaW5nXG4gIGNhcmQuY2xhc3NMaXN0LnJlbW92ZSgnYWNjZXB0ZWQnLCAncmVqZWN0ZWQnKTtcbiAgWydhY2NlcHQnLCAnZWRpdCcsICdyZWplY3QnXS5mb3JFYWNoKGEgPT4ge1xuICAgIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBydy0ke2F9LSR7aWR9YCk7XG4gICAgYnRuPy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICBpZiAoYnRuKSBidG4uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAnZmFsc2UnKTtcbiAgfSk7XG4gIGNvbnN0IF9kZWNpc2lvbkJhZGdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHJ3LWRlY2lzaW9uLWJhZGdlLSR7aWR9YCk7XG4gIGlmIChfZGVjaXNpb25CYWRnZSkgX2RlY2lzaW9uQmFkZ2Uuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICBpZiAob3V0Y29tZSA9PT0gJ2VkaXQnKSB7XG4gICAgLy8gS2VlcCB0aGUgaW5saW5lIGRpZmYgdmlzaWJsZSBhcyBhIHJlZmVyZW5jZTsgc2hvdyB0aGUgZWRpdGFibGUgdGV4dGFyZWEgYmVsb3cgaXQuXG4gICAgY29uc3QgY3VycmVudFRleHQgPSBhZnRlckVsLnF1ZXJ5U2VsZWN0b3IoYCNydy1hZnRlci10ZXh0LSR7aWR9YCk/LnRleHRDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICA/PyByZXdyaXRlRGVjaXNpb25zW2lkXT8uZmluYWxfdGV4dFxuICAgICAgICAgICAgICAgICAgICAgPz8gJyc7XG4gICAgaWYgKGRpZmZFbCkge1xuICAgICAgZGlmZkVsLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIGRpZmZFbC5zdHlsZS5vcGFjaXR5ID0gJzAuNTUnO1xuICAgICAgZGlmZkVsLnN0eWxlLmJvcmRlckxlZnQgPSAnM3B4IHNvbGlkICM5M2M1ZmQnO1xuICAgIH1cbiAgICBhZnRlckVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIGFmdGVyRWwuaW5uZXJIVE1MID0gYFxuICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjc4ZW07Y29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjRweDtcIj5cdTI3MEUgWW91ciBlZGl0IChBSSBzdWdnZXN0aW9uIHNob3duIGFib3ZlIGZvciByZWZlcmVuY2UpOjwvZGl2PlxuICAgICAgPHRleHRhcmVhIGlkPVwicnctdGV4dGFyZWEtJHtpZH1cIj4ke2VzY2FwZUh0bWwoY3VycmVudFRleHQpfTwvdGV4dGFyZWE+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwicnctc2F2ZS1lZGl0LWJ0blwiIHN0eWxlPVwibWFyZ2luLXRvcDo2cHhcIlxuICAgICAgICAgICAgICBvbmNsaWNrPVwic2F2ZVJld3JpdGVFZGl0KCcke2lkfScpXCI+U2F2ZTwvYnV0dG9uPlxuICAgIGA7XG4gICAgY29uc3QgZWRpdEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBydy1lZGl0LSR7aWR9YCk7XG4gICAgZWRpdEJ0bj8uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgaWYgKGVkaXRCdG4pIGVkaXRCdG4uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAndHJ1ZScpO1xuICAgIC8vIERlY2lzaW9uIGlzIHJlY29yZGVkIG9ubHkgd2hlbiB0aGUgdXNlciBjbGlja3MgU2F2ZVxuICB9IGVsc2Uge1xuICAgIC8vIFJlc3RvcmUgdGhlIGFmdGVyLXRleHQgc3BhbiBpZiB3ZSBwcmV2aW91c2x5IGVudGVyZWQgZWRpdCBtb2RlXG4gICAgY29uc3QgdGV4dGFyZWEgPSBhZnRlckVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk7XG4gICAgaWYgKHRleHRhcmVhKSB7XG4gICAgICBjb25zdCB0eHQgPSB0ZXh0YXJlYS52YWx1ZTtcbiAgICAgIGFmdGVyRWwuaW5uZXJIVE1MID0gYDxzcGFuIGlkPVwicnctYWZ0ZXItdGV4dC0ke2lkfVwiPiR7ZXNjYXBlSHRtbCh0eHQpfTwvc3Bhbj5gO1xuICAgIH1cbiAgICAvLyBSZS1zaG93IHRoZSBpbmxpbmUgZGlmZiBwYW5lbCBhdCBmdWxsIG9wYWNpdHk7IGhpZGUgdGhlIGVkaXQgYXJlYS5cbiAgICBpZiAoZGlmZkVsKSB7IGRpZmZFbC5zdHlsZS5kaXNwbGF5ID0gJyc7IGRpZmZFbC5zdHlsZS5vcGFjaXR5ID0gJyc7IGRpZmZFbC5zdHlsZS5ib3JkZXJMZWZ0ID0gJyc7IH1cbiAgICBhZnRlckVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICByZXdyaXRlRGVjaXNpb25zW2lkXSA9IHsgb3V0Y29tZSwgZmluYWxfdGV4dDogbnVsbCB9O1xuICAgIF9wZXJzaXN0RGVjaXNpb25zKCk7XG4gICAgY2FyZC5jbGFzc0xpc3QuYWRkKG91dGNvbWUgPT09ICdhY2NlcHQnID8gJ2FjY2VwdGVkJyA6ICdyZWplY3RlZCcpO1xuICAgIGNvbnN0IGFjdGl2ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBydy0ke291dGNvbWV9LSR7aWR9YCk7XG4gICAgYWN0aXZlQnRuPy5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICBpZiAoYWN0aXZlQnRuKSBhY3RpdmVCdG4uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAndHJ1ZScpO1xuICAgIGNvbnN0IGRlY0JhZGdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHJ3LWRlY2lzaW9uLWJhZGdlLSR7aWR9YCk7XG4gICAgaWYgKGRlY0JhZGdlKSB7XG4gICAgICBkZWNCYWRnZS50ZXh0Q29udGVudCA9IG91dGNvbWUgPT09ICdhY2NlcHQnID8gJ1x1MjcxMyBBY2NlcHRlZCcgOiAnXHUyNzE3IFJlamVjdGVkJztcbiAgICAgIGRlY0JhZGdlLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIGRlY0JhZGdlLnN0eWxlLmJhY2tncm91bmQgPSBvdXRjb21lID09PSAnYWNjZXB0JyA/ICcjYmJmN2QwJyA6ICcjZmVjYWNhJztcbiAgICAgIGRlY0JhZGdlLnN0eWxlLmNvbG9yICAgICAgPSBvdXRjb21lID09PSAnYWNjZXB0JyA/ICcjMDY1ZjQ2JyA6ICcjOTkxYjFiJztcbiAgICB9XG4gICAgc3luY1Jld3JpdGVHbG9iYWxzKCk7XG4gICAgdXBkYXRlUmV3cml0ZVRhbGx5KCk7XG4gICAgX3Njcm9sbFRvTmV4dFBlbmRpbmdSZXdyaXRlKGlkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfc2Nyb2xsVG9OZXh0UGVuZGluZ1Jld3JpdGUoYWZ0ZXJJZCkge1xuICBjb25zdCBhbGxDYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49XCJydy1jYXJkLVwiXScpO1xuICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBjYXJkIG9mIGFsbENhcmRzKSB7XG4gICAgY29uc3QgaWQgPSBjYXJkLmlkLnJlcGxhY2UoJ3J3LWNhcmQtJywgJycpO1xuICAgIGlmIChpZCA9PT0gYWZ0ZXJJZCkgeyBmb3VuZCA9IHRydWU7IGNvbnRpbnVlOyB9XG4gICAgaWYgKCFmb3VuZCkgY29udGludWU7XG4gICAgaWYgKCFyZXdyaXRlRGVjaXNpb25zW2lkXSkge1xuICAgICAgY2FyZC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYXZlUmV3cml0ZUVkaXQoaWQpIHtcbiAgY29uc3QgdGV4dGFyZWEgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBydy10ZXh0YXJlYS0ke2lkfWApO1xuICBjb25zdCBlZGl0ZWRUZXh0ID0gdGV4dGFyZWEgPyB0ZXh0YXJlYS52YWx1ZSA6ICcnO1xuICBjb25zdCBhZnRlckVsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHJ3LWFmdGVyLSR7aWR9YCk7XG4gIGNvbnN0IGRpZmZFbCAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcnctZGlmZi0ke2lkfWApO1xuICBjb25zdCBjYXJkICAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHJ3LWNhcmQtJHtpZH1gKTtcbiAgaWYgKCFhZnRlckVsIHx8ICFjYXJkKSByZXR1cm47XG5cbiAgLy8gUmVwbGFjZSB0ZXh0YXJlYSB3aXRoIGZpbmFsIHNwYW4gKGhpZGRlbiBcdTIwMTQgcHJlc2VydmVzIHRleHQgZm9yIGZ1dHVyZSBlZGl0cykuXG4gIGFmdGVyRWwuaW5uZXJIVE1MID0gYDxzcGFuIGlkPVwicnctYWZ0ZXItdGV4dC0ke2lkfVwiPiR7ZXNjYXBlSHRtbChlZGl0ZWRUZXh0KX08L3NwYW4+YDtcbiAgYWZ0ZXJFbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gIC8vIFJlZ2VuZXJhdGUgdGhlIGlubGluZSBkaWZmIGFnYWluc3QgdGhlIG9yaWdpbmFsIHRleHQgYW5kIHJlLXNob3cgaXQgKGZ1bGwgb3BhY2l0eSkuXG4gIGlmIChkaWZmRWwpIHtcbiAgICBjb25zdCBvcmlnaW5hbCA9IGRpZmZFbC5kYXRhc2V0Lm9yaWdpbmFsIHx8ICcnO1xuICAgIGRpZmZFbC5pbm5lckhUTUwgPSByZW5kZXJEaWZmSHRtbChjb21wdXRlV29yZERpZmYob3JpZ2luYWwsIGVkaXRlZFRleHQpKTtcbiAgICBkaWZmRWwuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIGRpZmZFbC5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgZGlmZkVsLnN0eWxlLmJvcmRlckxlZnQgPSAnJztcbiAgfVxuXG4gIHJld3JpdGVEZWNpc2lvbnNbaWRdID0geyBvdXRjb21lOiAnZWRpdCcsIGZpbmFsX3RleHQ6IGVkaXRlZFRleHQgfTtcbiAgX3BlcnNpc3REZWNpc2lvbnMoKTtcbiAgY2FyZC5jbGFzc0xpc3QucmVtb3ZlKCdyZWplY3RlZCcpO1xuICBjYXJkLmNsYXNzTGlzdC5hZGQoJ2FjY2VwdGVkJyk7XG4gIFsnYWNjZXB0JywgJ3JlamVjdCddLmZvckVhY2goYSA9PiB7XG4gICAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHJ3LSR7YX0tJHtpZH1gKTtcbiAgICBidG4/LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuICAgIGlmIChidG4pIGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICdmYWxzZScpO1xuICB9KTtcbiAgY29uc3Qgc2F2ZUVkaXRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcnctZWRpdC0ke2lkfWApO1xuICBzYXZlRWRpdEJ0bj8uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gIGlmIChzYXZlRWRpdEJ0bikgc2F2ZUVkaXRCdG4uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAndHJ1ZScpO1xuICBjb25zdCBlZGl0RGVjQmFkZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcnctZGVjaXNpb24tYmFkZ2UtJHtpZH1gKTtcbiAgaWYgKGVkaXREZWNCYWRnZSkge1xuICAgIGVkaXREZWNCYWRnZS50ZXh0Q29udGVudCA9ICdcdTI3MTMgQWNjZXB0ZWQgKGVkaXRlZCknO1xuICAgIGVkaXREZWNCYWRnZS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgZWRpdERlY0JhZGdlLnN0eWxlLmJhY2tncm91bmQgPSAnI2JiZjdkMCc7XG4gICAgZWRpdERlY0JhZGdlLnN0eWxlLmNvbG9yICAgICAgPSAnIzA2NWY0Nic7XG4gIH1cbiAgc3luY1Jld3JpdGVHbG9iYWxzKCk7XG4gIHVwZGF0ZVJld3JpdGVUYWxseSgpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZXdyaXRlVGFsbHkoKSB7XG4gIGNvbnN0IGNhcmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJld3JpdGUtY2FyZCcpO1xuICBsZXQgYWNjZXB0ZWQgPSAwLCByZWplY3RlZCA9IDAsIHBlbmRpbmcgPSAwO1xuICBjYXJkcy5mb3JFYWNoKGNhcmQgPT4ge1xuICAgIGNvbnN0IGlkICA9IGNhcmQuaWQucmVwbGFjZSgncnctY2FyZC0nLCAnJyk7XG4gICAgY29uc3QgZGVjID0gcmV3cml0ZURlY2lzaW9uc1tpZF07XG4gICAgaWYgICAgICAoIWRlYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZysrO1xuICAgIGVsc2UgaWYgKGRlYy5vdXRjb21lID09PSAnYWNjZXB0JyB8fCBkZWMub3V0Y29tZSA9PT0gJ2VkaXQnKSBhY2NlcHRlZCsrO1xuICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdGVkKys7XG4gIH0pO1xuXG4gIGNvbnN0IGFjY2VwdGVkRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFsbHktYWNjZXB0ZWQnKTtcbiAgY29uc3QgcmVqZWN0ZWRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWxseS1yZWplY3RlZCcpO1xuICBjb25zdCBwZW5kaW5nRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFsbHktcGVuZGluZycpO1xuXG4gIGlmIChhY2NlcHRlZEVsKSBhY2NlcHRlZEVsLnRleHRDb250ZW50ID0gYWNjZXB0ZWQ7XG4gIGlmIChyZWplY3RlZEVsKSByZWplY3RlZEVsLnRleHRDb250ZW50ID0gcmVqZWN0ZWQ7XG4gIGlmIChwZW5kaW5nRWwpIHBlbmRpbmdFbC50ZXh0Q29udGVudCAgPSBwZW5kaW5nO1xuXG4gIGNvbnN0IHN1Ym1pdEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJtaXQtcmV3cml0ZXMtYnRuJyk7XG4gIGlmIChzdWJtaXRCdG4pIHtcbiAgICBjb25zdCBuZWVkc0FjayA9ICFwZXJzdWFzaW9uV2FybmluZ3NBY2tub3dsZWRnZWQ7XG4gICAgc3VibWl0QnRuLmRpc2FibGVkID0gKHBlbmRpbmcgPiAwKSB8fCBuZWVkc0FjaztcbiAgICBzdWJtaXRCdG4udGl0bGUgPSBuZWVkc0Fja1xuICAgICAgPyAnQWNrbm93bGVkZ2UgdGhlIHBlcnN1YXNpb24gd2FybmluZ3MgYWJvdmUgYmVmb3JlIHN1Ym1pdHRpbmcnXG4gICAgICA6ICcnO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFJld3JpdGVEZWNpc2lvbnMoKSB7XG4gIGlmICghcGVyc3Vhc2lvbldhcm5pbmdzQWNrbm93bGVkZ2VkKSB7XG4gICAgY29uc3QgcHJvY2VlZCA9IGF3YWl0IHNob3dDb25maXJtTW9kYWwoXG4gICAgICAnXHUyNkEwXHVGRTBGIFBlcnN1YXNpb24gQ2hlY2tzJyxcbiAgICAgICdUaGVyZSBhcmUgdW5hY2tub3dsZWRnZWQgcGVyc3Vhc2lvbiB3YXJuaW5ncy4gSXQgaXMgcmVjb21tZW5kZWQgeW91IHJldmlldyBhbmQgYWNrbm93bGVkZ2UgdGhlbSBmaXJzdC5cXG5cXG5Qcm9jZWVkIGFueXdheT8nLFxuICAgICAgJ1N1Ym1pdCBBbnl3YXknXG4gICAgKTtcbiAgICBpZiAoIXByb2NlZWQpIHJldHVybjtcbiAgfVxuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogcmV3cml0ZV91aV9zdWJtaXRfbGl2ZVxuICAgKiAgIGtpbmQ6IHVpXG4gICAqICAgdGltZXN0YW1wOiAnMjAyNi0wMy0yNVQyMTozOTo0OFonXG4gICAqICAgc3RhdHVzOiBsaXZlXG4gICAqICAgaGFuZGxlczpcbiAgICogICAtIHVpOnJld3JpdGUtcmV2aWV3LnN1Ym1pdFxuICAgKiAgIGNhbGxzOlxuICAgKiAgIC0gUE9TVCAvYXBpL3Jld3JpdGVzL2FwcHJvdmVcbiAgICogICAtIFBPU1QgL2FwaS9jdi9sYXlvdXQtZXN0aW1hdGVcbiAgICogICByZWFkczpcbiAgICogICAtIHdpbmRvdzpyZXdyaXRlRGVjaXNpb25zXG4gICAqICAgd3JpdGVzOlxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvcmV3cml0ZXMvYXBwcm92ZS5kZWNpc2lvbnNcbiAgICogICBub3RlczogU3VibWl0cyB0aGUgZmluYWwgcGVyLXJld3JpdGUgb3V0Y29tZXMgYW5kIGVkaXRlZCB0ZXh0IHNvIGJhY2tlbmQgc3RhdGUgY2FuIHBlcnNpc3QgYXBwcm92ZWQgcmV3cml0ZXMgYW5kIHRoZSBmdWxsIHJld3JpdGUgYXVkaXQgYmVmb3JlIHNwZWxsLWNoZWNrLlxuICAgKi9cbiAgY29uc3QgZGVjaXNpb25zID0gT2JqZWN0LmVudHJpZXMocmV3cml0ZURlY2lzaW9ucykubWFwKChbaWQsIGRlY10pID0+ICh7XG4gICAgaWQsXG4gICAgb3V0Y29tZTogICAgZGVjLm91dGNvbWUsXG4gICAgZmluYWxfdGV4dDogZGVjLmZpbmFsX3RleHQgPz8gbnVsbFxuICB9KSk7XG5cbiAgY29uc3QgbG9hZGluZ01zZyA9IGFwcGVuZExvYWRpbmdNZXNzYWdlKCdTdWJtaXR0aW5nIHJld3JpdGUgZGVjaXNpb25zLi4uJyk7XG4gIHNldExvYWRpbmcodHJ1ZSwgJ1N1Ym1pdHRpbmcgcmV3cml0ZSBkZWNpc2lvbnNcdTIwMjYnKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXdyaXRlcy9hcHByb3ZlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZGVjaXNpb25zIH0pXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgcmVtb3ZlTG9hZGluZ01lc3NhZ2UobG9hZGluZ01zZyk7XG4gICAgc2V0TG9hZGluZyhmYWxzZSk7XG5cbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgYXBwZW5kUmV0cnlNZXNzYWdlKCdcdTI3NEMgRXJyb3I6ICcgKyAoZGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIHN1Ym1pdCByZXdyaXRlIGRlY2lzaW9ucycpLCBzdWJtaXRSZXdyaXRlRGVjaXNpb25zKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NlcHRlZCA9IGRhdGEuYXBwcm92ZWRfY291bnQgfHwgMDtcbiAgICBjb25zdCByZWplY3RlZCA9IGRhdGEucmVqZWN0ZWRfY291bnQgfHwgMDtcbiAgICBzdGF0ZU1hbmFnZXIubWFya0NvbnRlbnRDaGFuZ2VkKCk7XG4gICAgX2NsZWFyUGVyc2lzdGVkRGVjaXNpb25zKCk7XG4gICAgX2NsZWFyUmV3cml0ZVNuYXBzaG90KCk7XG4gICAgYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgYFx1MjcwNSBSZXdyaXRlIGRlY2lzaW9ucyByZWNvcmRlZDogJHthY2NlcHRlZH0gYWNjZXB0ZWQsICR7cmVqZWN0ZWR9IHJlamVjdGVkLiBTdGFydGluZyBzcGVsbCBjaGVja1x1MjAyNmApO1xuICAgIHNjaGVkdWxlQXRzUmVmcmVzaCgncmV2aWV3X2NoZWNrcG9pbnQnKTtcbiAgICBzd2l0Y2hUYWIoJ3NwZWxsJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJlbW92ZUxvYWRpbmdNZXNzYWdlKGxvYWRpbmdNc2cpO1xuICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgIGFwcGVuZFJldHJ5TWVzc2FnZSgnXHUyNzRDIEVycm9yOiAnICsgZXJyLm1lc3NhZ2UsIHN1Ym1pdFJld3JpdGVEZWNpc2lvbnMpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFeHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuZnVuY3Rpb24gc2V0UGVyc3Vhc2lvbldhcm5pbmdzQWNrbm93bGVkZ2VkKHZhbHVlKSB7XG4gIHBlcnN1YXNpb25XYXJuaW5nc0Fja25vd2xlZGdlZCA9IHZhbHVlO1xufVxuXG4vKiogQnVsay1hY2NlcHQgYWxsIHBlbmRpbmcgcmV3cml0ZSBjYXJkcy4gKi9cbmZ1bmN0aW9uIGFjY2VwdEFsbFJld3JpdGVzKCkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucmV3cml0ZS1jYXJkJykuZm9yRWFjaChjYXJkID0+IHtcbiAgICBjb25zdCBpZCA9IGNhcmQuaWQucmVwbGFjZSgncnctY2FyZC0nLCAnJyk7XG4gICAgaWYgKCFyZXdyaXRlRGVjaXNpb25zW2lkXSkgYXBwbHlSZXdyaXRlQWN0aW9uKGlkLCAnYWNjZXB0Jyk7XG4gIH0pO1xuICB1cGRhdGVSZXdyaXRlVGFsbHkoKTtcbn1cblxuLyoqIEJ1bGstcmVqZWN0IGFsbCBwZW5kaW5nIHJld3JpdGUgY2FyZHMuICovXG5mdW5jdGlvbiByZWplY3RBbGxSZXdyaXRlcygpIHtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJld3JpdGUtY2FyZCcpLmZvckVhY2goY2FyZCA9PiB7XG4gICAgY29uc3QgaWQgPSBjYXJkLmlkLnJlcGxhY2UoJ3J3LWNhcmQtJywgJycpO1xuICAgIGlmICghcmV3cml0ZURlY2lzaW9uc1tpZF0pIGFwcGx5UmV3cml0ZUFjdGlvbihpZCwgJ3JlamVjdCcpO1xuICB9KTtcbiAgdXBkYXRlUmV3cml0ZVRhbGx5KCk7XG59XG5cbi8qKiBUb2dnbGUgY29tcGFjdCAoc2luZ2xlLWxpbmUpIGNhcmQgZGlzcGxheSBmb3IgcmFwaWQgcmV2aWV3LiAqL1xuZnVuY3Rpb24gdG9nZ2xlUmV3cml0ZUNvbXBhY3RNb2RlKCkge1xuICBjb25zdCBjYXJkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXdyaXRlLWNhcmRzJyk7XG4gIGNvbnN0IGJ0biAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3J3LWNvbXBhY3QtYnRuJyk7XG4gIGlmICghY2FyZHMpIHJldHVybjtcbiAgY29uc3QgaXNDb21wYWN0ID0gY2FyZHMuY2xhc3NMaXN0LnRvZ2dsZSgnY29tcGFjdC1tb2RlJyk7XG4gIGlmIChidG4pIHtcbiAgICBidG4uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJywgaXNDb21wYWN0KTtcbiAgICBidG4udGV4dENvbnRlbnQgPSBpc0NvbXBhY3QgPyAnXHUyMjlGIEZ1bGwgVmlldycgOiAnXHUyMjlFIENvbXBhY3QnO1xuICAgIGJ0bi50aXRsZSA9IGlzQ29tcGFjdCA/ICdTd2l0Y2ggdG8gZnVsbCBjYXJkIHZpZXcnIDogJ1N3aXRjaCB0byBjb21wYWN0IHNpbmdsZS1saW5lIHZpZXcgZm9yIHJhcGlkIHJldmlldyc7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgcmV3cml0ZURlY2lzaW9ucyxcbiAgX3Jld3JpdGVQYW5lbENhY2hlLFxuICBwZXJzdWFzaW9uV2FybmluZ3NBY2tub3dsZWRnZWQsXG4gIHNldFBlcnN1YXNpb25XYXJuaW5nc0Fja25vd2xlZGdlZCxcbiAgZmV0Y2hBbmRSZXZpZXdSZXdyaXRlcyxcbiAgcmVuZGVyUmV3cml0ZVBhbmVsLFxuICBjb21wdXRlV29yZERpZmYsXG4gIHJlbmRlckRpZmZIdG1sLFxuICByZW5kZXJSZXdyaXRlQ2FyZCxcbiAgYXBwbHlSZXdyaXRlQWN0aW9uLFxuICBzYXZlUmV3cml0ZUVkaXQsXG4gIHVwZGF0ZVJld3JpdGVUYWxseSxcbiAgc3VibWl0UmV3cml0ZURlY2lzaW9ucyxcbiAgYWNjZXB0QWxsUmV3cml0ZXMsXG4gIHJlamVjdEFsbFJld3JpdGVzLFxuICB0b2dnbGVSZXdyaXRlQ29tcGFjdE1vZGUsXG59O1xuXG5zeW5jUmV3cml0ZUdsb2JhbHMoKTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3NwZWxsLWNoZWNrLmpzXG4gKiBTcGVsbCAmIGdyYW1tYXIgY2hlY2sgdGFiOiBmZXRjaCBzZWN0aW9ucywgcmVuZGVyIHN1Z2dlc3Rpb25zLFxuICogYXBwbHkvZGlzbWlzcyBjb3JyZWN0aW9ucywgc3VibWl0IGF1ZGl0LlxuICpcbiAqIERlcGVuZGVuY2llcyAocmVzb2x2ZWQgdGhyb3VnaCBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICBlc2NhcGVIdG1sLCBhcHBlbmRMb2FkaW5nTWVzc2FnZSwgcmVtb3ZlTG9hZGluZ01lc3NhZ2UsIGFwcGVuZE1lc3NhZ2UsXG4gKiAgIHNob3dBbGVydE1vZGFsLCBzaG93Q29uZmlybU1vZGFsLCBzZXRMb2FkaW5nLCBmZXRjaFN0YXR1cywgc2VuZEFjdGlvbixcbiAqICAgc2NoZWR1bGVBdHNSZWZyZXNoLCBDU1NcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ3NwZWxsLWNoZWNrJyk7XG5cbmltcG9ydCB7IHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5cbi8vIE1vZHVsZS1sZXZlbCBzdGF0ZVxubGV0IHNwZWxsQXVkaXQgPSBbXTtcbmxldCBfc3BlbGxDaGVja0NhY2hlID0gbnVsbDtcblxuLy8gXHUyNTAwXHUyNTAwIFBvcHVsYXRlIHNwZWxsLWNoZWNrIHRhYiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVTcGVsbENoZWNrVGFiKCkge1xuICAvLyBJZiB3ZSBoYXZlIGNhY2hlZCByZXN1bHRzIGZyb20gYSBwcmV2aW91cyBydW4sIHJlLXJlbmRlciBmcm9tIGNhY2hlXG4gIC8vIGluc3RlYWQgb2YgcmUtcnVubmluZyBMYW5ndWFnZVRvb2wgb24gZXZlcnkgYmFjay1uYXZpZ2F0aW9uLlxuICBpZiAod2luZG93Ll9zcGVsbENoZWNrQ2FjaGUpIHtcbiAgICBjb25zdCBjID0gd2luZG93Ll9zcGVsbENoZWNrQ2FjaGU7XG4gICAgaWYgKGMudHlwZSA9PT0gJ3plcm8nKSB7XG4gICAgICByZW5kZXJTcGVsbENoZWNrWmVyb1N0YXRlKGMubWVzc2FnZSwgYy5zdGF0c0xpbmUsIGMuY3VzdG9tRGljdFNpemUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICAgICA8aDE+XHVEODNEXHVERDI0IFNwZWxsICZhbXA7IEdyYW1tYXIgQ2hlY2s8L2gxPlxuICAgICAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7bWFyZ2luLWJvdHRvbToyNHB4O1wiPlJldmlldyBzcGVsbGluZyBhbmQgZ3JhbW1hciBzdWdnZXN0aW9ucy48L3A+XG4gICAgICAgIDxkaXYgaWQ9XCJzcGVsbC1yZXN1bHRzXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9kaXY+XG4gICAgICBgO1xuICAgICAgcmVuZGVyU3BlbGxTdWdnZXN0aW9ucyhjLmZsYWdnZWRTZWN0aW9ucywgYy50b3RhbFNlY3Rpb25zLCBjLnN0YXRzLCBjLmN1c3RvbURpY3RTaXplKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgIDxoMT5cdUQ4M0RcdUREMjQgU3BlbGwgJmFtcDsgR3JhbW1hciBDaGVjazwvaDE+XG4gICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MjRweDtcIj5DaGVja2luZyBDViBzZWN0aW9ucyBmb3Igc3BlbGxpbmcgYW5kIGdyYW1tYXIgaXNzdWVzXHUyMDI2PC9wPlxuICAgIDxkaXYgaWQ9XCJzcGVsbC1sb2FkaW5nXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjQwcHg7XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+PC9kaXY+XG4gICAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7bWFyZ2luLXRvcDoxMnB4O1wiPlJ1bm5pbmcgTGFuZ3VhZ2VUb29sIGNoZWNrc1x1MjAyNjwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGlkPVwic3BlbGwtcmVzdWx0c1wiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPjwvZGl2PlxuICBgO1xuICBzcGVsbEF1ZGl0ID0gW107XG4gIHdpbmRvdy5fc3BlbGxTdWdNYXAgPSB7fTtcblxuICB0cnkge1xuICAgIC8vIEZldGNoIHNlY3Rpb25zIHRvIGNoZWNrXG4gICAgY29uc3Qgc2VjdGlvbnNSZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9zcGVsbC1jaGVjay1zZWN0aW9ucycpO1xuICAgIGNvbnN0IHNlY3Rpb25zRGF0YSA9IGF3YWl0IHNlY3Rpb25zUmVzLmpzb24oKTtcbiAgICBpZiAoIXNlY3Rpb25zRGF0YS5vaykge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NwZWxsLWxvYWRpbmcnKS5pbm5lckhUTUwgPSBgPHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+RmFpbGVkIHRvIGxvYWQgc2VjdGlvbnM6ICR7c2VjdGlvbnNEYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJ308L3A+YDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN0aW9ucyA9IHNlY3Rpb25zRGF0YS5zZWN0aW9ucyB8fCBbXTtcbiAgICBpZiAoc2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZW5kZXJTcGVsbENoZWNrWmVyb1N0YXRlKCdObyBDViBzZWN0aW9ucyBhcmUgYXZhaWxhYmxlIHRvIGNoZWNrLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGVhY2ggc2VjdGlvblxuICAgIGNvbnN0IGZsYWdnZWRTZWN0aW9ucyA9IFtdO1xuICAgIGNvbnN0IGFnZ3JlZ2F0ZVN0YXRzID0gc2VjdGlvbnNEYXRhLmFnZ3JlZ2F0ZV9zdGF0cyB8fCB7fTtcbiAgICBsZXQgaW5jb3JyZWN0V29yZHMgPSAwO1xuICAgIGxldCBncmFtbWFySXNzdWVzID0gMDtcbiAgICBsZXQgY3VzdG9tRGljdFNpemUgPSBzZWN0aW9uc0RhdGEuY3VzdG9tX2RpY3Rfc2l6ZSB8fCAwO1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3NwZWxsLWNoZWNrJywge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdGV4dDogc2VjdGlvbi50ZXh0LCBjb250ZXh0OiBzZWN0aW9uLmNvbnRleHQgfSlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBpZiAoZGF0YS5zdGF0cykge1xuICAgICAgICBpZiAoZGF0YS5jdXN0b21fZGljdF9zaXplKSBjdXN0b21EaWN0U2l6ZSA9IGRhdGEuY3VzdG9tX2RpY3Rfc2l6ZTtcbiAgICAgICAgaW5jb3JyZWN0V29yZHMgKz0gZGF0YS5zdGF0cy51bmtub3duX3dvcmRfY291bnQgfHwgMDtcbiAgICAgICAgZ3JhbW1hcklzc3VlcyArPSBkYXRhLnN0YXRzLmdyYW1tYXJfaXNzdWVfY291bnQgfHwgMDtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhLm9rICYmIGRhdGEuc3VnZ2VzdGlvbnMgJiYgZGF0YS5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZsYWdnZWRTZWN0aW9ucy5wdXNoKHsgc2VjdGlvbiwgc3VnZ2VzdGlvbnM6IGRhdGEuc3VnZ2VzdGlvbnMgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NwZWxsLWxvYWRpbmcnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgaWYgKGZsYWdnZWRTZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlbmRlclNwZWxsQ2hlY2taZXJvU3RhdGUoXG4gICAgICAgICdTcGVsbCBjaGVjayBwYXNzZWQgXHUyMDE0IG5vIGlzc3VlcyBmb3VuZC4nLFxuICAgICAgICBidWlsZFNwZWxsU3RhdHNTdW1tYXJ5KHtcbiAgICAgICAgICB0b3RhbF9zZWN0aW9uczogc2VjdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHRvdGFsX3dvcmRzOiBhZ2dyZWdhdGVTdGF0cy53b3JkX2NvdW50IHx8IDAsXG4gICAgICAgICAgdW5pcXVlX3dvcmRzOiBhZ2dyZWdhdGVTdGF0cy51bmlxdWVfd29yZHMgfHwgMCxcbiAgICAgICAgICBjdXN0b21fZGljdF93b3JkczogYWdncmVnYXRlU3RhdHMuY3VzdG9tX2RpY3Rfd29yZHMgfHwgMCxcbiAgICAgICAgICBpbmNvcnJlY3Rfd29yZHM6IGluY29ycmVjdFdvcmRzLFxuICAgICAgICAgIGdyYW1tYXJfaXNzdWVzOiBncmFtbWFySXNzdWVzLFxuICAgICAgICB9KSxcbiAgICAgICAgY3VzdG9tRGljdFNpemUsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBzdWdnZXN0aW9ucyBwYW5lbFxuICAgIHJlbmRlclNwZWxsU3VnZ2VzdGlvbnMoZmxhZ2dlZFNlY3Rpb25zLCBzZWN0aW9ucy5sZW5ndGgsIHtcbiAgICAgIHRvdGFsX3NlY3Rpb25zOiBzZWN0aW9ucy5sZW5ndGgsXG4gICAgICB0b3RhbF93b3JkczogYWdncmVnYXRlU3RhdHMud29yZF9jb3VudCB8fCAwLFxuICAgICAgdW5pcXVlX3dvcmRzOiBhZ2dyZWdhdGVTdGF0cy51bmlxdWVfd29yZHMgfHwgMCxcbiAgICAgIGN1c3RvbV9kaWN0X3dvcmRzOiBhZ2dyZWdhdGVTdGF0cy5jdXN0b21fZGljdF93b3JkcyB8fCAwLFxuICAgICAgaW5jb3JyZWN0X3dvcmRzOiBpbmNvcnJlY3RXb3JkcyxcbiAgICAgIGdyYW1tYXJfaXNzdWVzOiBncmFtbWFySXNzdWVzLFxuICAgIH0sIGN1c3RvbURpY3RTaXplKTtcblxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3IoJ1NwZWxsIGNoZWNrIGVycm9yOicsIGVycik7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NwZWxsLWxvYWRpbmcnKS5pbm5lckhUTUwgPSBgPHAgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O3BhZGRpbmc6MjBweDtcIj5TcGVsbCBjaGVjayBmYWlsZWQ6ICR7ZXJyLm1lc3NhZ2V9PC9wPmA7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFplcm8tc3RhdGUgc3BlbGwgc3RhZ2UgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIHJlbmRlclNwZWxsQ2hlY2taZXJvU3RhdGUobWVzc2FnZSwgc3RhdHNMaW5lID0gJycsIGN1c3RvbURpY3RTaXplID0gMCkge1xuICB3aW5kb3cuX3NwZWxsQ2hlY2tDYWNoZSA9IHsgdHlwZTogJ3plcm8nLCBtZXNzYWdlLCBzdGF0c0xpbmUsIGN1c3RvbURpY3RTaXplIH07XG4gIF9zcGVsbENoZWNrQ2FjaGUgPSB3aW5kb3cuX3NwZWxsQ2hlY2tDYWNoZTtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGNvbnN0IHN0YXRzUGFydHMgPSBbXTtcbiAgaWYgKHN0YXRzTGluZSkgc3RhdHNQYXJ0cy5wdXNoKGA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjAuOTVlbTttYXJnaW46OHB4IDAgMDtcIj4ke2VzY2FwZUh0bWwoc3RhdHNMaW5lKX08L3A+YCk7XG4gIGlmIChjdXN0b21EaWN0U2l6ZSA+IDApIHN0YXRzUGFydHMucHVzaChgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjllbTttYXJnaW46NHB4IDAgMDtcIj5DdXN0b20gZGljdGlvbmFyeTogJHtjdXN0b21EaWN0U2l6ZS50b0xvY2FsZVN0cmluZygpfSB3b3JkJHtjdXN0b21EaWN0U2l6ZSAhPT0gMSA/ICdzJyA6ICcnfTwvcD5gKTtcbiAgY29udGVudC5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NjBweCAyMHB4O1wiPlxuICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTozZW07bWFyZ2luLWJvdHRvbToxNnB4O1wiPlx1MjcwNTwvZGl2PlxuICAgICAgPGgyIHN0eWxlPVwiY29sb3I6IzE2NjUzNDtcIj4ke2VzY2FwZUh0bWwobWVzc2FnZSl9PC9oMj5cbiAgICAgICR7c3RhdHNQYXJ0cy5qb2luKCdcXG4nKX1cbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDttYXJnaW46MTZweCAwIDI0cHg7XCI+Q29udGludWUgd2hlbiB5b3UgYXJlIHJlYWR5IHRvIGdlbmVyYXRlIHlvdXIgQ1YuPC9wPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInN1Ym1pdC1idG5cIiBvbmNsaWNrPVwic3VibWl0RW1wdHlTcGVsbENoZWNrKClcIiB0aXRsZT1cIkdlbmVyYXRlIGFuIEhUTUwgcHJldmlldyBvZiB5b3VyIENWIFx1MjAxNCB5b3Ugd2lsbCByZXZpZXcgdGhlIGxheW91dCBiZWZvcmUgZmluYWwgRE9DWC9QREYgZmlsZXMgYXJlIHByb2R1Y2VkXCI+R2VuZXJhdGUgUHJldmlldyBcdTIxOTI8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3VibWl0RW1wdHlTcGVsbENoZWNrKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9zcGVsbC1jaGVjay1jb21wbGV0ZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHNwZWxsX2F1ZGl0OiBbXSB9KVxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmICghcmVzLm9rKSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgYEZhaWxlZCB0byBzYXZlIHNwZWxsIGNoZWNrOiAke2RhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm9jZWVkID0gYXdhaXQgX2NvbmZpcm1Qcm9jZWVkVG9HZW5lcmF0ZSgpO1xuICAgIGlmICghcHJvY2VlZCkgcmV0dXJuO1xuICAgIHN0YXRlTWFuYWdlci5tYXJrQ29udGVudENoYW5nZWQoKTtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnXHUyNzA1IFNwZWxsIGNoZWNrIGNvbXBsZXRlIFx1MjAxNCBubyBpc3N1ZXMgcmVxdWlyZWQgY2hhbmdlcy4gR2VuZXJhdGluZyB5b3VyIENWXHUyMDI2Jyk7XG4gICAgc2NoZWR1bGVBdHNSZWZyZXNoKCdyZXZpZXdfY2hlY2twb2ludCcpO1xuICAgIGF3YWl0IGZldGNoU3RhdHVzKCk7XG4gICAgYXdhaXQgc2VuZEFjdGlvbignZ2VuZXJhdGVfY3YnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGBTcGVsbCBjaGVjayBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgU3RhdHMgc3VtbWFyeSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gYnVpbGRTcGVsbFN0YXRzU3VtbWFyeShzdGF0cyA9IHt9KSB7XG4gIHJldHVybiBbXG4gICAgYCR7KHN0YXRzLnRvdGFsX3NlY3Rpb25zIHx8IDApLnRvTG9jYWxlU3RyaW5nKCl9IHNlY3Rpb24ke3N0YXRzLnRvdGFsX3NlY3Rpb25zID09PSAxID8gJycgOiAncyd9IGNoZWNrZWRgLFxuICAgIGAkeyhzdGF0cy50b3RhbF93b3JkcyB8fCAwKS50b0xvY2FsZVN0cmluZygpfSB3b3Jkc2AsXG4gICAgYCR7KHN0YXRzLnVuaXF1ZV93b3JkcyB8fCAwKS50b0xvY2FsZVN0cmluZygpfSB1bmlxdWVgLFxuICAgIGAkeyhzdGF0cy5jdXN0b21fZGljdF93b3JkcyB8fCAwKS50b0xvY2FsZVN0cmluZygpfSBjdXN0b20gZGljdGlvbmFyeSBtYXRjaCR7c3RhdHMuY3VzdG9tX2RpY3Rfd29yZHMgPT09IDEgPyAnJyA6ICdlcyd9YCxcbiAgICBgJHsoc3RhdHMuaW5jb3JyZWN0X3dvcmRzIHx8IDApLnRvTG9jYWxlU3RyaW5nKCl9IHVua25vd24vaW5jb3JyZWN0YCxcbiAgICBgJHsoc3RhdHMuZ3JhbW1hcl9pc3N1ZXMgfHwgMCkudG9Mb2NhbGVTdHJpbmcoKX0gZ3JhbW1hciBpc3N1ZSR7c3RhdHMuZ3JhbW1hcl9pc3N1ZXMgPT09IDEgPyAnJyA6ICdzJ31gLFxuICBdLmpvaW4oJyBcdTAwQjcgJyk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZW5kZXIgc3VnZ2VzdGlvbnMgcGFuZWwgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIHJlbmRlclNwZWxsU3VnZ2VzdGlvbnMoZmxhZ2dlZFNlY3Rpb25zLCB0b3RhbFNlY3Rpb25zLCBzdGF0cyA9IHt9LCBjdXN0b21EaWN0U2l6ZSA9IDApIHtcbiAgd2luZG93Ll9zcGVsbENoZWNrQ2FjaGUgPSB7IHR5cGU6ICdzdWdnZXN0aW9ucycsIGZsYWdnZWRTZWN0aW9ucywgdG90YWxTZWN0aW9ucywgc3RhdHMsIGN1c3RvbURpY3RTaXplIH07XG4gIF9zcGVsbENoZWNrQ2FjaGUgPSB3aW5kb3cuX3NwZWxsQ2hlY2tDYWNoZTtcbiAgY29uc3QgcmVzdWx0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcGVsbC1yZXN1bHRzJyk7XG4gIHJlc3VsdHMuc3R5bGUuZGlzcGxheSA9ICcnO1xuICBjb25zdCBzdGF0c0xpbmUgPSBidWlsZFNwZWxsU3RhdHNTdW1tYXJ5KHN0YXRzKTtcblxuICBsZXQgaHRtbCA9IGBcbiAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmVmOWMzO2JvcmRlcjoxcHggc29saWQgI2ZkZTA0Nztib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDttYXJnaW4tYm90dG9tOjI0cHg7XCI+XG4gICAgICA8c3Ryb25nPlx1MjZBMCAke2ZsYWdnZWRTZWN0aW9ucy5yZWR1Y2UoKHQsIGYpID0+IHQgKyBmLnN1Z2dlc3Rpb25zLmxlbmd0aCwgMCl9IGlzc3VlJHtmbGFnZ2VkU2VjdGlvbnMucmVkdWNlKCh0LCBmKSA9PiB0ICsgZi5zdWdnZXN0aW9ucy5sZW5ndGgsIDApICE9PSAxID8gJ3MnIDogJyd9PC9zdHJvbmc+IGZvdW5kXG4gICAgICBhY3Jvc3MgJHtmbGFnZ2VkU2VjdGlvbnMubGVuZ3RofSBvZiAke3RvdGFsU2VjdGlvbnN9IHNlY3Rpb24ke3RvdGFsU2VjdGlvbnMgIT09IDEgPyAncycgOiAnJ30uXG4gICAgICBSZXZpZXcgZWFjaCBzdWdnZXN0aW9uIGJlbG93LCB0aGVuIGNsaWNrIDxzdHJvbmc+RG9uZTwvc3Ryb25nPi5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6MC45MmVtO2NvbG9yOiM2YjcyODA7XCI+JHtlc2NhcGVIdG1sKHN0YXRzTGluZSl9PC9kaXY+XG4gICAgICAke2N1c3RvbURpY3RTaXplID4gMCA/IGA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDo0cHg7Zm9udC1zaXplOjAuODhlbTtjb2xvcjojNmI3MjgwO1wiPkN1c3RvbSBkaWN0aW9uYXJ5IHNpemU6ICR7Y3VzdG9tRGljdFNpemUudG9Mb2NhbGVTdHJpbmcoKX0gd29yZCR7Y3VzdG9tRGljdFNpemUgIT09IDEgPyAncycgOiAnJ308L2Rpdj5gIDogJyd9XG4gICAgPC9kaXY+XG4gIGA7XG5cbiAgY29uc3QgX3N1Z1NldmVyaXR5ID0gKHN1ZykgPT4ge1xuICAgIGNvbnN0IHJpZCA9IChzdWcucnVsZV9pZCB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjYXQgPSAoc3VnLmNhdGVnb3J5IHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICgvc3BlbGx8dHlwb3xtaXNzcGVsbC8udGVzdChyaWQpIHx8IC90eXBvLy50ZXN0KGNhdCkpIHJldHVybiAwO1xuICAgIGlmICgvZ3JhbW1hcnxhZ3JlZW1lbnR8dmVyYnx0ZW5zZXxhcnRpY2xlLy50ZXN0KHJpZCkgfHwgL2dyYW1tYXIvLnRlc3QoY2F0KSkgcmV0dXJuIDE7XG4gICAgaWYgKC9zdHlsZXxyZWR1bmRhbnx3b3JkeS8udGVzdChyaWQpIHx8IC9zdHlsZS8udGVzdChjYXQpKSByZXR1cm4gMjtcbiAgICByZXR1cm4gMztcbiAgfTtcblxuICBmbGFnZ2VkU2VjdGlvbnMuZm9yRWFjaCgoeyBzZWN0aW9uLCBzdWdnZXN0aW9uczogcmF3U3VnZ2VzdGlvbnMgfSkgPT4ge1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gWy4uLnJhd1N1Z2dlc3Rpb25zXS5zb3J0KChhLCBiKSA9PiBfc3VnU2V2ZXJpdHkoYSkgLSBfc3VnU2V2ZXJpdHkoYikpO1xuICAgIGh0bWwgKz0gYDxkaXYgY2xhc3M9XCJyZXZpZXctc2VjdGlvblwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbToyNHB4O1wiPlxuICAgICAgPGgzIHN0eWxlPVwiZm9udC1zaXplOjFlbTtmb250LXdlaWdodDo3MDA7Y29sb3I6IzM3NDE1MTttYXJnaW4tYm90dG9tOjEycHg7XCI+JHtlc2NhcGVIdG1sKHNlY3Rpb24ubGFiZWwpfTwvaDM+XG4gICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZjhmYWZjO2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHggMTRweDttYXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaXplOjAuOWVtO3doaXRlLXNwYWNlOnByZS13cmFwO1wiPiR7ZXNjYXBlSHRtbChzZWN0aW9uLnRleHQpfTwvZGl2PlxuICAgIGA7XG4gICAgc3VnZ2VzdGlvbnMuZm9yRWFjaCgoc3VnLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IHN1Z0lkID0gYHN1Z18ke3NlY3Rpb24uaWR9XyR7aWR4fWA7XG4gICAgICBjb25zdCByZXBzID0gc3VnLnJlcGxhY2VtZW50cyB8fCBbXTtcbiAgICAgIGh0bWwgKz0gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwic3BlbGwtc3VnZ2VzdGlvblwiIGlkPVwiJHtzdWdJZH1cIiBkYXRhLXNlY3Rpb24taWQ9XCIke2VzY2FwZUh0bWwoc2VjdGlvbi5pZCl9XCIgZGF0YS1pZHg9XCIke2lkeH1cIlxuICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTBweCAxNHB4O21hcmdpbi1ib3R0b206OHB4O2JhY2tncm91bmQ6I2ZmZjtcIj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjEwcHg7XCI+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDoxO1wiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuODhlbTtjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206NHB4O1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZDojZmVlMmUyO2NvbG9yOiNkYzI2MjY7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoxcHggNnB4O2ZvbnQtd2VpZ2h0OjYwMDtcIj4ke2VzY2FwZUh0bWwoc3VnLmZsYWdnZWQpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjhweDtcIj4ke2VzY2FwZUh0bWwoc3VnLm1lc3NhZ2UpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXN0eWxlOml0YWxpYztmb250LXNpemU6MC44NWVtO2NvbG9yOiMzNzQxNTE7bWFyZ2luLWJvdHRvbTo4cHg7XCI+JHtlc2NhcGVIdG1sKHN1Zy5zbmlwcGV0KX08L2Rpdj5cbiAgICAgICAgICAgICAgJHtyZXBzLmxlbmd0aCA+IDAgPyBgXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweDttYXJnaW4tYm90dG9tOjhweDtcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjgyZW07Y29sb3I6IzZiNzI4MDthbGlnbi1zZWxmOmNlbnRlcjtcIj5TdWdnZXN0aW9uczo8L3NwYW4+XG4gICAgICAgICAgICAgICAgJHtyZXBzLm1hcCgociwgcmkpID0+IGA8YnV0dG9uIGNsYXNzPVwicmV3cml0ZS1rZXl3b3JkXCIgb25jbGljaz1cImFwcGx5U3BlbGxSZXBsYWNlbWVudCgnJHtlc2NhcGVIdG1sKHNlY3Rpb24uaWQpfScsICR7aWR4fSwgJHtyaX0pXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7Ym9yZGVyOjFweCBzb2xpZCAjM2I4MmY2O2JhY2tncm91bmQ6I2RiZWFmZTtcIj4ke2VzY2FwZUh0bWwocil9PC9idXR0b24+YCkuam9pbignJyl9XG4gICAgICAgICAgICAgIDwvZGl2PmAgOiAnJ31cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDttYXJnaW4tYm90dG9tOjhweDtcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImVkaXRfJHtzdWdJZH1cIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIGN1c3RvbSBjb3JyZWN0aW9uXHUyMDI2XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtlc2NhcGVIdG1sKHJlcHNbMF0gfHwgJycpfVwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImZsZXg6MTtmb250LXNpemU6MC44OGVtO3BhZGRpbmc6NHB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo0cHg7XCJcbiAgICAgICAgICAgICAgICAgIG9ua2V5ZG93bj1cImlmKGV2ZW50LmtleT09PSdFbnRlcicpe2V2ZW50LnByZXZlbnREZWZhdWx0KCk7YXBwbHlDdXN0b21TcGVsbENvcnJlY3Rpb24oJyR7ZXNjYXBlSHRtbChzZWN0aW9uLmlkKX0nLCR7aWR4fSk7fVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJhcHBseUN1c3RvbVNwZWxsQ29ycmVjdGlvbignJHtlc2NhcGVIdG1sKHNlY3Rpb24uaWQpfScsJHtpZHh9KVwiIHRpdGxlPVwiQXBwbHkgY3VzdG9tIGNvcnJlY3Rpb25cIiBhcmlhLWxhYmVsPVwiQXBwbHkgY3VzdG9tIGNvcnJlY3Rpb25cIj5BcHBseTwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwO1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJkaXNtaXNzU3BlbGxTdWdnZXN0aW9uKCcke2VzY2FwZUh0bWwoc3VnSWQpfScsICcke2VzY2FwZUh0bWwoc2VjdGlvbi5pZCl9JywgJHtpZHh9LCAnJHtlc2NhcGVIdG1sKHN1Zy5mbGFnZ2VkKX0nKVwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiSWdub3JlIHRoaXMgc3VnZ2VzdGlvblwiIGFyaWEtbGFiZWw9XCJJZ25vcmUgdGhpcyBzdWdnZXN0aW9uXCI+SWdub3JlPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgb25jbGljaz1cImFkZFNwZWxsV29yZCgnJHtlc2NhcGVIdG1sKHN1Zy5mbGFnZ2VkKX0nLCAnJHtlc2NhcGVIdG1sKHN1Z0lkKX0nKVwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQWRkIHRvIGN1c3RvbSBkaWN0aW9uYXJ5XCIgYXJpYS1sYWJlbD1cIkFkZCB0byBjdXN0b20gZGljdGlvbmFyeVwiPkFkZCB0byBEaWN0aW9uYXJ5PC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICAgIC8vIFJlZ2lzdGVyIGluIGF1ZGl0IGFzIHBlbmRpbmdcbiAgICAgIGlmICghd2luZG93Ll9zcGVsbFN1Z01hcCkgd2luZG93Ll9zcGVsbFN1Z01hcCA9IHt9O1xuICAgICAgd2luZG93Ll9zcGVsbFN1Z01hcFtgJHtzZWN0aW9uLmlkfV8ke2lkeH1gXSA9IHtcbiAgICAgICAgc2VjdGlvbl9pZDogICAgc2VjdGlvbi5pZCxcbiAgICAgICAgY29udGV4dF90eXBlOiBzZWN0aW9uLmNvbnRleHQsXG4gICAgICAgIGxvY2F0aW9uOiAgICAgc2VjdGlvbi5sYWJlbCxcbiAgICAgICAgb3JpZ2luYWw6ICAgICBzdWcuZmxhZ2dlZCxcbiAgICAgICAgc3VnZ2VzdGlvbjogICAocmVwc1swXSB8fCAnJyksXG4gICAgICAgIG9mZnNldDogICAgICAgc3VnLm9mZnNldCxcbiAgICAgICAgbGVuZ3RoOiAgICAgICBzdWcubGVuZ3RoLFxuICAgICAgICBydWxlOiAgICAgICAgIHN1Zy5ydWxlX2lkIHx8ICcnLFxuICAgICAgICBvdXRjb21lOiAgICAgICdwZW5kaW5nJyxcbiAgICAgICAgZmluYWw6ICAgICAgICBzdWcuZmxhZ2dlZCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgaHRtbCArPSAnPC9kaXY+JztcbiAgfSk7XG5cbiAgaHRtbCArPSBgXG4gICAgPGRpdiBjbGFzcz1cIm5hdi1idXR0b25zXCIgc3R5bGU9XCJtYXJnaW46MjRweCAwO1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInN1Ym1pdC1idG5cIiBvbmNsaWNrPVwic3VibWl0U3BlbGxDaGVja0RlY2lzaW9ucygpXCI+R2VuZXJhdGUgUHJldmlldyBcdTIxOTI8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgcmVzdWx0cy5pbm5lckhUTUwgPSBodG1sO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgQXBwbHkgLyBkaXNtaXNzIGNvcnJlY3Rpb25zIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBhcHBseUN1c3RvbVNwZWxsQ29ycmVjdGlvbihzZWN0aW9uSWQsIGlkeCkge1xuICBjb25zdCBrZXkgICAgPSBgJHtzZWN0aW9uSWR9XyR7aWR4fWA7XG4gIGNvbnN0IGVudHJ5ICA9ICh3aW5kb3cuX3NwZWxsU3VnTWFwIHx8IHt9KVtrZXldO1xuICBpZiAoIWVudHJ5KSByZXR1cm47XG4gIGNvbnN0IGlucHV0ICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBlZGl0X3N1Z18ke3NlY3Rpb25JZH1fJHtpZHh9YCk7XG4gIGNvbnN0IGN1c3RvbSA9IGlucHV0ID8gaW5wdXQudmFsdWUudHJpbSgpIDogJyc7XG4gIGlmICghY3VzdG9tKSByZXR1cm47XG4gIGVudHJ5Lm91dGNvbWUgPSAnYWNjZXB0JztcbiAgZW50cnkuZmluYWwgICA9IGN1c3RvbTtcbiAgY29uc3Qgc3VnRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuc3BlbGwtc3VnZ2VzdGlvbltkYXRhLXNlY3Rpb24taWQ9XCIke0NTUy5lc2NhcGUoc2VjdGlvbklkKX1cIl1bZGF0YS1pZHg9XCIke2lkeH1cIl1gKTtcbiAgaWYgKCFzdWdFbCkgcmV0dXJuO1xuICBjb25zdCBmbGFnZ2VkU3BhbiA9IHN1Z0VsLnF1ZXJ5U2VsZWN0b3IoJ3NwYW5bc3R5bGUqPVwiYmFja2dyb3VuZDojZmVlMmUyXCJdJyk7XG4gIGlmIChmbGFnZ2VkU3Bhbikge1xuICAgIGZsYWdnZWRTcGFuLm91dGVySFRNTCA9IGA8ZGVsIHN0eWxlPVwiY29sb3I6I2RjMjYyNjtcIj4ke2VzY2FwZUh0bWwoZW50cnkub3JpZ2luYWwpfTwvZGVsPiBcdTIxOTIgPGlucyBzdHlsZT1cImNvbG9yOiMxNjY1MzQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7XCI+JHtlc2NhcGVIdG1sKGN1c3RvbSl9PC9pbnM+YDtcbiAgfVxuICBzdWdFbC5zdHlsZS5vcGFjaXR5ID0gJzAuNSc7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U3BlbGxSZXBsYWNlbWVudChzZWN0aW9uSWQsIGlkeCwgcmVwSWR4KSB7XG4gIGNvbnN0IGtleSAgPSBgJHtzZWN0aW9uSWR9XyR7aWR4fWA7XG4gIGNvbnN0IGVudHJ5ID0gKHdpbmRvdy5fc3BlbGxTdWdNYXAgfHwge30pW2tleV07XG4gIGlmICghZW50cnkpIHJldHVybjtcbiAgLy8gVGhlIHJlcGxhY2VtZW50cyBsaXN0IGlzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIGhlcmUgXHUyMDE0IHJlYWQgZnJvbSBET00gc3VnZ2VzdGlvblxuICBjb25zdCBzdWdFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5zcGVsbC1zdWdnZXN0aW9uW2RhdGEtc2VjdGlvbi1pZD1cIiR7Q1NTLmVzY2FwZShzZWN0aW9uSWQpfVwiXVtkYXRhLWlkeD1cIiR7aWR4fVwiXWApO1xuICBpZiAoIXN1Z0VsKSByZXR1cm47XG4gIGNvbnN0IGJ1dHRvbnMgPSBzdWdFbC5xdWVyeVNlbGVjdG9yQWxsKCcucmV3cml0ZS1rZXl3b3JkJyk7XG4gIGNvbnN0IHJlcCA9IGJ1dHRvbnNbcmVwSWR4XSA/IGJ1dHRvbnNbcmVwSWR4XS50ZXh0Q29udGVudC50cmltKCkgOiAnJztcbiAgZW50cnkub3V0Y29tZSA9ICdhY2NlcHQnO1xuICBlbnRyeS5maW5hbCAgID0gcmVwO1xuICAvLyBWaXN1YWwgZmVlZGJhY2s6IHN0cmlrZSB0aGUgZmxhZ2dlZCB3b3JkLCBzaG93IHJlcGxhY2VtZW50XG4gIGNvbnN0IGZsYWdnZWRTcGFuID0gc3VnRWwucXVlcnlTZWxlY3Rvcignc3BhbltzdHlsZSo9XCJiYWNrZ3JvdW5kOiNmZWUyZTJcIl0nKTtcbiAgaWYgKGZsYWdnZWRTcGFuKSB7XG4gICAgZmxhZ2dlZFNwYW4ub3V0ZXJIVE1MID0gYDxkZWwgc3R5bGU9XCJjb2xvcjojZGMyNjI2O1wiPiR7ZXNjYXBlSHRtbChlbnRyeS5vcmlnaW5hbCl9PC9kZWw+IFx1MjE5MiA8aW5zIHN0eWxlPVwiY29sb3I6IzE2NjUzNDt0ZXh0LWRlY29yYXRpb246bm9uZTtcIj4ke2VzY2FwZUh0bWwocmVwKX08L2lucz5gO1xuICB9XG4gIHN1Z0VsLnN0eWxlLm9wYWNpdHkgPSAnMC41Jztcbn1cblxuZnVuY3Rpb24gZGlzbWlzc1NwZWxsU3VnZ2VzdGlvbihzdWdJZCwgc2VjdGlvbklkLCBpZHgsIHdvcmQpIHtcbiAgY29uc3Qga2V5ICAgPSBgJHtzZWN0aW9uSWR9XyR7aWR4fWA7XG4gIGNvbnN0IGVudHJ5ID0gKHdpbmRvdy5fc3BlbGxTdWdNYXAgfHwge30pW2tleV07XG4gIGlmIChlbnRyeSkgeyBlbnRyeS5vdXRjb21lID0gJ3JlamVjdCc7IGVudHJ5LmZpbmFsID0gd29yZDsgfVxuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN1Z0lkKTtcbiAgaWYgKGVsKSBlbC5zdHlsZS5vcGFjaXR5ID0gJzAuNCc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFkZFNwZWxsV29yZCh3b3JkLCBzdWdJZCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL2N1c3RvbS1kaWN0aW9uYXJ5Jywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgd29yZCB9KVxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN1Z0lkKTtcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gJzAuNCc7XG4gICAgICAgIGNvbnN0IG1zZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBtc2cuc3R5bGUuY3NzVGV4dCA9ICdjb2xvcjojMTY2NTM0O2ZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luLXRvcDo0cHg7JztcbiAgICAgICAgbXNnLnRleHRDb250ZW50ID0gYFwiJHt3b3JkfVwiIGFkZGVkIHRvIGRpY3Rpb25hcnkuYDtcbiAgICAgICAgZWwuYXBwZW5kQ2hpbGQobXNnKTtcbiAgICAgIH1cbiAgICAgIC8vIEFsc28gcmVjb3JkIGluIGF1ZGl0XG4gICAgICBjb25zdCBwYXJ0cyA9IHN1Z0lkLnJlcGxhY2UoL15zdWdfLywgJycpLnNwbGl0KCdfJyk7XG4gICAgICBjb25zdCBpZHggPSBwYXJzZUludChwYXJ0cy5wb3AoKSwgMTApO1xuICAgICAgY29uc3Qgc2VjdGlvbklkID0gcGFydHMuam9pbignXycpO1xuICAgICAgY29uc3Qga2V5ID0gYCR7c2VjdGlvbklkfV8ke2lkeH1gO1xuICAgICAgY29uc3QgZW50cnkgPSAod2luZG93Ll9zcGVsbFN1Z01hcCB8fCB7fSlba2V5XTtcbiAgICAgIGlmIChlbnRyeSkgeyBlbnRyeS5vdXRjb21lID0gJ2FkZF9kaWN0JzsgZW50cnkuZmluYWwgPSB3b3JkOyB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3IoJ0Vycm9yIGFkZGluZyB0byBkaWN0aW9uYXJ5OicsIGVycik7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFByZS1nZW5lcmF0aW9uIGNvbmZpcm1hdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gX2NvbmZpcm1Qcm9jZWVkVG9HZW5lcmF0ZSgpIHtcbiAgLy8gR2F0ZTogdGFnbGluZSBtdXN0IGJlIGV4cGxpY2l0bHkgY29uZmlybWVkIGJlZm9yZSBnZW5lcmF0aW5nXG4gIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGZldGNoU3RhdHVzKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gIGlmICghc3RhdHVzPy5kZWNpc2lvbnNfY29uZmlybWVkPy50YWdsaW5lKSB7XG4gICAgYXdhaXQgc2hvd0FsZXJ0TW9kYWwoXG4gICAgICAnXHUyNkEwIFRhZ2xpbmUgTm90IENvbmZpcm1lZCcsXG4gICAgICAnWW91IG11c3QgY29uZmlybSB5b3VyIGFwcGxpY2FudCB0YWdsaW5lIGJlZm9yZSBnZW5lcmF0aW5nLlxcblxcbkdvIHRvIHRoZSBcdUQ4M0NcdURGRjdcdUZFMEYgVGFnbGluZSB0YWIgaW4gQ3VzdG9taXphdGlvbnMgdG8gY29uZmlybSBpdC4nXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgYXRzU2NvcmUgPSBzdGF0ZU1hbmFnZXIuZ2V0QXRzU2NvcmUoKTtcbiAgY29uc3QgZnJlc2huZXNzID0gc3RhdGVNYW5hZ2VyLmdldExheW91dEZyZXNobmVzcygpO1xuICBjb25zdCBnZW5TdGF0ZSA9IHN0YXRlTWFuYWdlci5nZXRHZW5lcmF0aW9uU3RhdGUoKTtcbiAgY29uc3QgZGVjaXNpb25zQ29uZmlybWVkID0gc3RhdHVzPy5kZWNpc2lvbnNfY29uZmlybWVkIHx8IHt9O1xuICBjb25zdCBsaW5lcyA9IFsnWW91ciBDViBpcyByZWFkeSB0byBnZW5lcmF0ZS4nXTtcbiAgaWYgKGF0c1Njb3JlICE9PSBudWxsICYmIGF0c1Njb3JlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGF0c1Njb3JlLm92ZXJhbGwgPT09ICdudW1iZXInKSB7XG4gICAgbGluZXMucHVzaChgQ3VycmVudCBBVFMgc2NvcmU6ICR7TWF0aC5yb3VuZChhdHNTY29yZS5vdmVyYWxsKX0lYCk7XG4gIH1cbiAgaWYgKGdlblN0YXRlLnBhZ2VXYXJuaW5nKSB7XG4gICAgY29uc3QgcGMgPSBnZW5TdGF0ZS5wYWdlQ291bnRFeGFjdCA/PyBnZW5TdGF0ZS5wYWdlQ291bnRFc3RpbWF0ZTtcbiAgICBjb25zdCBwY0xhYmVsID0gcGMgIT09IG51bGwgPyAoZ2VuU3RhdGUucGFnZUNvdW50RXhhY3QgIT09IG51bGwgPyBgJHtwY31gIDogYH4ke3BjfWApIDogbnVsbDtcbiAgICBjb25zdCBva1BhZ2UgPSBhd2FpdCBzaG93Q29uZmlybU1vZGFsKFxuICAgICAgJ1x1MjZBMCBQYWdlIENvdW50IE91dCBvZiBSYW5nZScsXG4gICAgICBgVGhlIENWIGlzIGVzdGltYXRlZCBhdCAke3BjTGFiZWwgPyBgJHtwY0xhYmVsfSBwYWdlJHtwYyAhPT0gMSA/ICdzJyA6ICcnfWAgOiAnYW4gdW51c3VhbCBwYWdlIGNvdW50J30sIHdoaWNoIGlzIG91dHNpZGUgdGhlIHJlY29tbWVuZGVkIHJhbmdlIGZvciBhIHNlbmlvciBjYW5kaWRhdGUgKDJcdTIwMTMzIHBhZ2VzKS5cXG5cXG5Db25zaWRlciBhZGp1c3RpbmcgeW91ciBsYXlvdXQgaW5zdHJ1Y3Rpb25zIGJlZm9yZSBnZW5lcmF0aW5nLlxcblxcblByb2NlZWQgYW55d2F5P2AsXG4gICAgICAnR2VuZXJhdGUgQW55d2F5J1xuICAgICk7XG4gICAgaWYgKCFva1BhZ2UpIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZnJlc2huZXNzLmlzU3RhbGUpIHtcbiAgICBsaW5lcy5wdXNoKGBcdTI2QTAgJHtmcmVzaG5lc3MuYXJpYUxhYmVsfWApO1xuICB9XG4gIGNvbnN0IHJldmlld2VkU2VjdGlvbnMgPSBbJ2V4cGVyaWVuY2VzJywgJ3NraWxscycsICdhY2hpZXZlbWVudHMnXS5maWx0ZXIoayA9PiBkZWNpc2lvbnNDb25maXJtZWRba10pO1xuICBpZiAocmV2aWV3ZWRTZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICBsaW5lcy5wdXNoKCdcdTI2QTAgTm8gY3VzdG9taXNhdGlvbiBzZWN0aW9ucyByZXZpZXdlZCBcdTIwMTQgZXhwZXJpZW5jZSwgc2tpbGwsIGFuZCBhY2hpZXZlbWVudCBzZWxlY3Rpb25zIGFyZSBhbGwgTExNIGRlZmF1bHRzLicpO1xuICB9XG4gIGxldCB3ZWFrQnVsbGV0Q291bnQgPSAwLCBwYXNzaXZlQnVsbGV0Q291bnQgPSAwO1xuICBPYmplY3QudmFsdWVzKHdpbmRvdy5hY2hpZXZlbWVudEVkaXRzIHx8IHt9KS5mb3JFYWNoKGxpc3QgPT4ge1xuICAgIChsaXN0IHx8IFtdKS5mb3JFYWNoKGUgPT4ge1xuICAgICAgY29uc3QgdHh0ID0gdHlwZW9mIGUgPT09ICdzdHJpbmcnID8gZSA6ICgoZSAmJiBlLnRleHQpIHx8ICcnKTtcbiAgICAgIGlmICghdHh0LnRyaW0oKSB8fCAoZSAmJiBlLmhpZGRlbikpIHJldHVybjtcbiAgICAgIGNvbnN0IHdhcm4gPSB0eXBlb2YgX2FjaFZlcmJXYXJuaW5nID09PSAnZnVuY3Rpb24nID8gX2FjaFZlcmJXYXJuaW5nKHR4dCkgOiBudWxsO1xuICAgICAgaWYgKHdhcm4/LmxldmVsID09PSAncGFzc2l2ZScpIHBhc3NpdmVCdWxsZXRDb3VudCsrO1xuICAgICAgZWxzZSBpZiAod2Fybj8ubGV2ZWwgPT09ICd3ZWFrJykgd2Vha0J1bGxldENvdW50Kys7XG4gICAgfSk7XG4gIH0pO1xuICBpZiAod2Vha0J1bGxldENvdW50ID4gMCB8fCBwYXNzaXZlQnVsbGV0Q291bnQgPiAwKSB7XG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBpZiAocGFzc2l2ZUJ1bGxldENvdW50ID4gMCkgcGFydHMucHVzaChgJHtwYXNzaXZlQnVsbGV0Q291bnR9IHdpdGggcGFzc2l2ZSB2b2ljZWApO1xuICAgIGlmICh3ZWFrQnVsbGV0Q291bnQgPiAwKSBwYXJ0cy5wdXNoKGAke3dlYWtCdWxsZXRDb3VudH0gd2l0aCB3ZWFrIG9wZW5pbmcgdmVyYiR7d2Vha0J1bGxldENvdW50ICE9PSAxID8gJ3MnIDogJyd9YCk7XG4gICAgbGluZXMucHVzaChgXHUyNkEwICR7cGFydHMuam9pbignLCAnKX0gaW4gZXhwZXJpZW5jZSBidWxsZXRzIFx1MjAxNCBjb25zaWRlciBBSSByZXdyaXRlcyBpbiB0aGUgRXhwZXJpZW5jZSBCdWxsZXRzIGVkaXRvci5gKTtcbiAgfVxuICBsaW5lcy5wdXNoKCdcXG5Qcm9jZWVkPycpO1xuICByZXR1cm4gc2hvd0NvbmZpcm1Nb2RhbCgnXHVEODNEXHVEQ0M0IFByb2NlZWQgdG8gR2VuZXJhdGU/JywgbGluZXMuam9pbignXFxuJyksICdHZW5lcmF0ZSBOb3cnKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFN1Ym1pdCBhdWRpdCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gc3VibWl0U3BlbGxDaGVja0RlY2lzaW9ucygpIHtcbiAgLyogZHVja2Zsb3c6XG4gICAqICAgaWQ6IHNwZWxsX3VpX3N1Ym1pdF9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTA0LTIxVDE4OjAwOjAwWidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6c3BlbGwtY2hlY2suc3VibWl0XG4gICAqICAgY2FsbHM6XG4gICAqICAgLSBQT1NUIC9hcGkvc3BlbGwtY2hlY2stY29tcGxldGVcbiAgICogICAtIFBPU1QgL2FwaS9hY3Rpb25cbiAgICogICByZWFkczpcbiAgICogICAtIHdpbmRvdzpfc3BlbGxTdWdNYXBcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9zcGVsbC1jaGVjay1jb21wbGV0ZS5zcGVsbF9hdWRpdFxuICAgKiAgIC0gd2luZG93OnNwZWxsQXVkaXRcbiAgICogICBub3RlczogQ29sbGFwc2VzIHJldmlld2VkIHNwZWxsIHN1Z2dlc3Rpb25zIGludG8gdGhlIGNhbm9uaWNhbCBzcGVsbCBhdWRpdCwgcGVyc2lzdHMgdGhhdCBhdWRpdCBpbiBzZXNzaW9uIHN0YXRlLCBzaG93cyBhIHByZS1nZW5lcmF0aW9uIGNvbmZpcm1hdGlvbiBtb2RhbCwgYW5kIHRoZW4gdHJpZ2dlcnMgZ2VuZXJhdGlvbiB1c2luZyB0aGUgY29ycmVjdGVkIGNvbnRlbnQuXG4gICAqL1xuICAvLyBDb3VudCBpdGVtcyBzdGlsbCBtYXJrZWQgJ3BlbmRpbmcnIChub3QgZXhwbGljaXRseSByZXZpZXdlZClcbiAgY29uc3QgcGVuZGluZ0VudHJpZXMgPSBPYmplY3QudmFsdWVzKHdpbmRvdy5fc3BlbGxTdWdNYXAgfHwge30pLmZpbHRlcihlID0+IGUub3V0Y29tZSA9PT0gJ3BlbmRpbmcnKTtcbiAgaWYgKHBlbmRpbmdFbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBuID0gcGVuZGluZ0VudHJpZXMubGVuZ3RoO1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHNob3dDb25maXJtTW9kYWwoXG4gICAgICAnXHUyNkEwIFVucmV2aWV3ZWQgSXNzdWVzJyxcbiAgICAgIGAke259IGlzc3VlJHtuICE9PSAxID8gJ3MgaGF2ZScgOiAnIGhhcyd9IG5vdCBiZWVuIHJldmlld2VkIGFuZCB3aWxsIGJlIGlnbm9yZWQuXFxuUHJvY2VlZCBhbnl3YXk/YCxcbiAgICAgICdQcm9jZWVkJ1xuICAgICk7XG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcbiAgfVxuXG4gIC8vIENvbGxlY3QgYXVkaXQgZnJvbSBfc3BlbGxTdWdNYXBcbiAgY29uc3QgYXVkaXQgPSBPYmplY3QudmFsdWVzKHdpbmRvdy5fc3BlbGxTdWdNYXAgfHwge30pLmZpbHRlcihlID0+IGUub3V0Y29tZSAhPT0gJ3BlbmRpbmcnKTtcbiAgLy8gUmVtYWluaW5nICdwZW5kaW5nJyBpdGVtcyBhcmUgZXhwbGljaXRseSBhdXRvLWlnbm9yZWQgYWZ0ZXIgY29uZmlybWF0aW9uIGFib3ZlXG4gIE9iamVjdC52YWx1ZXMod2luZG93Ll9zcGVsbFN1Z01hcCB8fCB7fSkuZm9yRWFjaChlID0+IHtcbiAgICBpZiAoZS5vdXRjb21lID09PSAncGVuZGluZycpIHsgZS5vdXRjb21lID0gJ2lnbm9yZSc7IGF1ZGl0LnB1c2goZSk7IH1cbiAgfSk7XG4gIHNwZWxsQXVkaXQgPSBhdWRpdDtcblxuICBjb25zdCBsb2FkaW5nTXNnID0gYXBwZW5kTG9hZGluZ01lc3NhZ2UoJ1NhdmluZyBzcGVsbCBjaGVjayBkZWNpc2lvbnNcdTIwMjYnKTtcbiAgc2V0TG9hZGluZyh0cnVlLCAnU2F2aW5nIHNwZWxsLWNoZWNrIGRlY2lzaW9uc1x1MjAyNicpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9zcGVsbC1jaGVjay1jb21wbGV0ZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHNwZWxsX2F1ZGl0OiBzcGVsbEF1ZGl0IH0pXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgcmVtb3ZlTG9hZGluZ01lc3NhZ2UobG9hZGluZ01zZyk7XG4gICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBgRmFpbGVkIHRvIHNhdmUgc3BlbGwgY2hlY2s6ICR7ZGF0YS5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlTWFuYWdlci5tYXJrQ29udGVudENoYW5nZWQoKTtcbiAgICBjb25zdCBwcm9jZWVkID0gYXdhaXQgX2NvbmZpcm1Qcm9jZWVkVG9HZW5lcmF0ZSgpO1xuICAgIGlmICghcHJvY2VlZCkgcmV0dXJuO1xuICAgIGFwcGVuZE1lc3NhZ2UoJ2Fzc2lzdGFudCcsIGBcdTI3MDUgU3BlbGwgY2hlY2sgY29tcGxldGUgXHUyMDE0ICR7c3BlbGxBdWRpdC5sZW5ndGh9IGl0ZW0ke3NwZWxsQXVkaXQubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9IHJldmlld2VkLiBHZW5lcmF0aW5nIHlvdXIgQ1ZcdTIwMjZgKTtcbiAgICBzY2hlZHVsZUF0c1JlZnJlc2goJ3Jldmlld19jaGVja3BvaW50Jyk7XG4gICAgYXdhaXQgZmV0Y2hTdGF0dXMoKTtcbiAgICBhd2FpdCBzZW5kQWN0aW9uKCdnZW5lcmF0ZV9jdicpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZW1vdmVMb2FkaW5nTWVzc2FnZShsb2FkaW5nTXNnKTtcbiAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgYFNwZWxsIGNoZWNrIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFeHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQge1xuICBzcGVsbEF1ZGl0LFxuICBwb3B1bGF0ZVNwZWxsQ2hlY2tUYWIsXG4gIHJlbmRlclNwZWxsQ2hlY2taZXJvU3RhdGUsXG4gIHN1Ym1pdEVtcHR5U3BlbGxDaGVjayxcbiAgYnVpbGRTcGVsbFN0YXRzU3VtbWFyeSxcbiAgcmVuZGVyU3BlbGxTdWdnZXN0aW9ucyxcbiAgYXBwbHlDdXN0b21TcGVsbENvcnJlY3Rpb24sXG4gIGFwcGx5U3BlbGxSZXBsYWNlbWVudCxcbiAgZGlzbWlzc1NwZWxsU3VnZ2VzdGlvbixcbiAgYWRkU3BlbGxXb3JkLFxuICBzdWJtaXRTcGVsbENoZWNrRGVjaXNpb25zLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL2Rvd25sb2FkLXRhYi5qc1xuICogRmlsZSBSZXZpZXcgdGFiOiBBVFMgdmFsaWRhdGlvbiwgZ2VuZXJhdGVkLWZpbGUgZG93bmxvYWRzLCBwZXJzdWFzaW9uIGNoZWNrLFxuICogYW5kIHJlZmluZW1lbnQgc2hvcnRjdXRzLlxuICpcbiAqIERlcGVuZGVuY2llcyAocmVzb2x2ZWQgdGhyb3VnaCBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICBlc2NhcGVIdG1sLCBiYWNrVG9QaGFzZVxuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcignZG93bmxvYWQtdGFiJyk7XG5cbmltcG9ydCB7IHN0YXRlTWFuYWdlciB9IGZyb20gJy4vc3RhdGUtbWFuYWdlci5qcyc7XG5cbmZ1bmN0aW9uIF9jb2xsZWN0RG93bmxvYWRhYmxlRmlsZXMoY3ZEYXRhID0ge30pIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKTtcbiAgY29uc3QgZmlsZXMgPSBbXTtcbiAgY29uc3QgcmF3RmlsZXMgPSBBcnJheS5pc0FycmF5KGN2RGF0YS5maWxlcykgPyBjdkRhdGEuZmlsZXMgOiBbXTtcbiAgY29uc3QgY2FuZGlkYXRlRmlsZXMgPSBbXG4gICAgLi4ucmF3RmlsZXMsXG4gICAgY3ZEYXRhLmZpbmFsX2h0bWwsXG4gICAgY3ZEYXRhLmZpbmFsX3BkZixcbiAgICBjdkRhdGEuaHRtbCxcbiAgICBjdkRhdGEucGRmLFxuICAgIGN2RGF0YS5kb2N4LFxuICAgIGN2RGF0YS5hdHNfZG9jeCxcbiAgXS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBjYW5kaWRhdGVGaWxlcykge1xuICAgIGlmIChzZWVuLmhhcyhmaWxlbmFtZSkpIGNvbnRpbnVlO1xuICAgIHNlZW4uYWRkKGZpbGVuYW1lKTtcblxuICAgIGxldCBpY29uID0gJ1x1RDgzRFx1RENDMSc7XG4gICAgbGV0IGRlc2NyaXB0aW9uID0gJ0dlbmVyYXRlZCBmaWxlJztcbiAgICBsZXQgZm9ybWF0ID0gJ290aGVyJztcblxuICAgIGlmIChmaWxlbmFtZS5lbmRzV2l0aCgnLnBkZicpKSB7XG4gICAgICBpY29uID0gZmlsZW5hbWUuaW5jbHVkZXMoJ0FUUycpID8gJ1x1RDgzRVx1REQxNicgOiAnXHVEODNEXHVEQ0M0JztcbiAgICAgIGRlc2NyaXB0aW9uID0gZmlsZW5hbWUuaW5jbHVkZXMoJ0FUUycpXG4gICAgICAgID8gJ0FUUy1vcHRpbWlzZWQgUERGIFx1MjAxNCBtYWNoaW5lLXJlYWRhYmxlIGZvciBhdXRvbWF0ZWQgc2NyZWVuaW5nJ1xuICAgICAgICA6ICdIdW1hbi1yZWFkYWJsZSBQREYgXHUyMDE0IGZvciBodW1hbiByZXZpZXdlcnMgYW5kIHByaW50aW5nJztcbiAgICAgIGZvcm1hdCA9ICdwZGYnO1xuICAgIH0gZWxzZSBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoJy5kb2N4JykpIHtcbiAgICAgIGljb24gPSAnXHVEODNEXHVEQ0REJztcbiAgICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCdDb3ZlckxldHRlcl8nKSkge1xuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDb3ZlciBsZXR0ZXIgXHUyMDE0IFdvcmQgZG9jdW1lbnQgZm9yIHRoZSBhcHBsaWNhdGlvbic7XG4gICAgICB9IGVsc2UgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoJ1NjcmVlbmluZ18nKSkge1xuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTY3JlZW5pbmcgcXVlc3Rpb24gcmVzcG9uc2VzIFx1MjAxNCBXb3JkIGRvY3VtZW50JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlc2NyaXB0aW9uID0gZmlsZW5hbWUuaW5jbHVkZXMoJ0FUUycpXG4gICAgICAgICAgPyAnQVRTLW9wdGltaXNlZCBXb3JkIGRvY3VtZW50IFx1MjAxNCBrZXl3b3JkLW9wdGltaXNlZCBmb3Igam9iIGFwcGxpY2F0aW9ucydcbiAgICAgICAgICA6ICdIdW1hbi1yZWFkYWJsZSBXb3JkIGRvY3VtZW50IFx1MjAxNCBlZGl0YWJsZSBmb3JtYXQnO1xuICAgICAgfVxuICAgICAgZm9ybWF0ID0gJ2RvY3gnO1xuICAgIH0gZWxzZSBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoJy5odG1sJykpIHtcbiAgICAgIGljb24gPSAnXHVEODNDXHVERjEwJztcbiAgICAgIGNvbnN0IGlzUHJldmlldyA9IC9wcmV2aWV3L2kudGVzdChmaWxlbmFtZSk7XG4gICAgICBkZXNjcmlwdGlvbiA9IGlzUHJldmlld1xuICAgICAgICA/ICdMYXlvdXQgcHJldmlldyBcdTIwMTQgaW50ZXJtZWRpYXRlIHdvcmtpbmcgZmlsZSwgbm90IGZvciBzdWJtaXNzaW9uJ1xuICAgICAgICA6ICdIVE1MIGZvcm1hdCB3aXRoIGVtYmVkZGVkIEpTT04tTEQgc3RydWN0dXJlZCBkYXRhJztcbiAgICAgIGZvcm1hdCA9IGlzUHJldmlldyA/ICdwcmV2aWV3JyA6ICdodG1sJztcbiAgICB9IGVsc2UgaWYgKGZpbGVuYW1lID09PSAnam9iX2Rlc2NyaXB0aW9uLnR4dCcpIHtcbiAgICAgIGljb24gPSAnXHVEODNEXHVEQ0NCJztcbiAgICAgIGRlc2NyaXB0aW9uID0gJ09yaWdpbmFsIGpvYiBkZXNjcmlwdGlvbiByZWZlcmVuY2UnO1xuICAgIH1cblxuICAgIGZpbGVzLnB1c2goeyBmaWxlbmFtZSwgZGVzY3JpcHRpb24sIGljb24sIGZvcm1hdCB9KTtcbiAgfVxuXG4gIHJldHVybiBmaWxlcztcbn1cblxuZnVuY3Rpb24gX3JlbmRlclZhbGlkYXRpb25TdW1tYXJ5KGNoZWNrcywgc3VtbWFyeSwgcGFnZUNvdW50LCBhdHNFcnJvcikge1xuICBsZXQgaHRtbCA9ICcnO1xuXG4gIGlmIChwYWdlQ291bnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBwYWdlV2FybmluZyA9IHBhZ2VDb3VudCA8IDEuNSB8fCBwYWdlQ291bnQgPiAzO1xuICAgIGh0bWwgKz0gYDxkaXYgc3R5bGU9XCJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiR7cGFnZVdhcm5pbmcgPyAnI2ZlZjljMycgOiAnI2YwZmRmNCd9O1xuICAgICAgICAgICAgICBib3JkZXI6MXB4IHNvbGlkICR7cGFnZVdhcm5pbmcgPyAnI2ZkZTA0NycgOiAnI2JiZjdkMCd9O1xuICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjhweCAxNHB4O21hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjEuM2VtO1wiPlx1RDgzRFx1RENDNDwvc3Bhbj5cbiAgICAgIDxzdHJvbmc+JHtwYWdlQ291bnR9IHBhZ2Uke3BhZ2VDb3VudCAhPT0gMSA/ICdzJyA6ICcnfTwvc3Ryb25nPlxuICAgICAgJHtwYWdlV2FybmluZ1xuICAgICAgICA/ICc8c3BhbiBzdHlsZT1cImNvbG9yOiNkOTc3MDY7Zm9udC1zaXplOjAuODhlbTtcIj5cdTI2QTAgU2VuaW9yIGNhbmRpZGF0ZSB0YXJnZXQgaXMgMlx1MjAxMzMgcGFnZXM8L3NwYW4+J1xuICAgICAgICA6ICc8c3BhbiBzdHlsZT1cImNvbG9yOiMxNjY1MzQ7Zm9udC1zaXplOjAuODhlbTtcIj5cdTI3MTMgR29vZCBsZW5ndGg8L3NwYW4+J31cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgaWYgKGF0c0Vycm9yKSB7XG4gICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZTJlMjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7bWFyZ2luLWJvdHRvbToyMHB4O1wiPlxuICAgICAgPHN0cm9uZz5cdTI2QTAgQVRTIHZhbGlkYXRpb24gZXJyb3I6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbChhdHNFcnJvcil9XG4gICAgPC9kaXY+YDtcbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGlmICghY2hlY2tzLmxlbmd0aCkge1xuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgY29uc3Qga2V5d29yZEZhaWwgPSBjaGVja3Muc29tZSgoY2hlY2spID0+IGNoZWNrLm5hbWUgPT09ICdhdHNfa2V5d29yZF9wcmVzZW5jZScgJiYgY2hlY2suc3RhdHVzID09PSAnZmFpbCcpO1xuICBjb25zdCBzdGF0dXNDb2xvdXIgPSBzdW1tYXJ5LmZhaWwgPiAwID8gJyNkYzI2MjYnIDogc3VtbWFyeS53YXJuID4gMCA/ICcjZDk3NzA2JyA6ICcjMTY2NTM0JztcbiAgY29uc3Qgc3RhdHVzSWNvbiA9IHN1bW1hcnkuZmFpbCA+IDAgPyAnXHUyNzRDJyA6IHN1bW1hcnkud2FybiA+IDAgPyAnXHUyNkEwJyA6ICdcdTI3MDUnO1xuXG4gIGh0bWwgKz0gYFxuICAgIDxkZXRhaWxzIG9wZW4gc3R5bGU9XCJtYXJnaW4tYm90dG9tOjIwcHg7XCI+XG4gICAgICA8c3VtbWFyeSBzdHlsZT1cImN1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MWVtO3BhZGRpbmc6OHB4IDA7Y29sb3I6JHtzdGF0dXNDb2xvdXJ9O1wiPlxuICAgICAgICAke3N0YXR1c0ljb259IEFUUyBSZXBvcnQgXHUyMDE0ICR7c3VtbWFyeS5wYXNzfSBwYXNzLCAke3N1bW1hcnkud2Fybn0gd2FybiwgJHtzdW1tYXJ5LmZhaWx9IGZhaWxcbiAgICAgIDwvc3VtbWFyeT5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInJldmlldy10YWJsZVwiIHN0eWxlPVwibWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZTowLjg3ZW07XCI+XG4gICAgICAgIDx0aGVhZD48dHI+PHRoPkNoZWNrPC90aD48dGg+Rm9ybWF0PC90aD48dGg+U3RhdHVzPC90aD48dGg+RGV0YWlsPC90aD48L3RyPjwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5gO1xuXG4gIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IGNoZWNrLnN0YXR1cyA9PT0gJ3Bhc3MnID8gJyNmMGZkZjQnIDogY2hlY2suc3RhdHVzID09PSAnd2FybicgPyAnI2ZlZjljMycgOiAnI2ZlZTJlMic7XG4gICAgY29uc3QgaWNvbiA9IGNoZWNrLnN0YXR1cyA9PT0gJ3Bhc3MnID8gJ1x1MjcwNScgOiBjaGVjay5zdGF0dXMgPT09ICd3YXJuJyA/ICdcdTI2QTAnIDogJ1x1Mjc0Qyc7XG4gICAgY29uc3QgZm9ybWF0QmFkZ2UgPSBgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MTFweDtiYWNrZ3JvdW5kOiNlMGU3ZmY7Y29sb3I6IzM3MzBhMztib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjFweCA1cHg7XCI+JHtlc2NhcGVIdG1sKGNoZWNrLmZvcm1hdCl9PC9zcGFuPmA7XG5cbiAgICBodG1sICs9IGA8dHIgc3R5bGU9XCJiYWNrZ3JvdW5kOiR7YmFja2dyb3VuZH07XCI+XG4gICAgICA8dGQgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7XCI+JHtlc2NhcGVIdG1sKGNoZWNrLmxhYmVsKX08L3RkPlxuICAgICAgPHRkPiR7Zm9ybWF0QmFkZ2V9PC90ZD5cbiAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiR7aWNvbn08L3RkPlxuICAgICAgPHRkPjxzbWFsbD4ke2VzY2FwZUh0bWwoY2hlY2suZGV0YWlsKX08L3NtYWxsPjwvdGQ+XG4gICAgPC90cj5gO1xuICB9XG5cbiAgaHRtbCArPSAnPC90Ym9keT48L3RhYmxlPjwvZGV0YWlscz4nO1xuXG4gIGlmIChzdW1tYXJ5LmZhaWwgPiAwKSB7XG4gICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZTJlMjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMHB4IDE2cHg7bWFyZ2luLWJvdHRvbToyMHB4O1wiPlxuICAgICAgPHN0cm9uZz5cdTI3NEMgRml4IHJlcXVpcmVkOjwvc3Ryb25nPiBTb21lIGNoZWNrcyBmYWlsZWQuIEJsb2NrZWQgZm9ybWF0cyBhcmUgZ3JleWVkIG91dCBiZWxvdy5cbiAgICAgICR7a2V5d29yZEZhaWxcbiAgICAgICAgPyAnPGJyPjxzdHJvbmc+QVRTIGtleXdvcmQgZmFpbHVyZSBibG9ja3MgYWxsIGRvd25sb2Fkczwvc3Ryb25nPiBcdTIwMTQgcmUtcnVuIGN1c3RvbWlzYXRpb25zIHRvIGltcHJvdmUga2V5d29yZCBjb3ZlcmFnZS4nXG4gICAgICAgIDogJyd9XG4gICAgPC9kaXY+YDtcbiAgfVxuXG4gIHJldHVybiBodG1sO1xufVxuXG4vLyBDaGVja3MgdGhhdCBhcmUgYWR2aXNvcnkgb25seSBcdTIwMTQgdGhleSB3YXJuIGJ1dCBuZXZlciBibG9jayB0aGUgZG93bmxvYWQgYnV0dG9uLlxuLy8gT25seSBnZW51aW5lbHkgY3JpdGljYWwgZmFpbHVyZXMgKGZpbGUgbm90IGZvdW5kLCBQREYgdW5yZWFkYWJsZSwgYnJva2VuIG91dHB1dClcbi8vIHNob3VsZCBwcmV2ZW50IGEgdXNlciBmcm9tIGRvd25sb2FkaW5nLlxuY29uc3QgX05PTl9CTE9DS0lOR19DSEVDS1MgPSBuZXcgU2V0KFtcbiAgJ2N2X3BhZ2VfY291bnQnLCAgICAgICAgICAgICAgIC8vIGFkdmlzb3J5OiBwYWdlIGxlbmd0aCBvdXRzaWRlIGlkZWFsIHJhbmdlXG4gICdwZGZfdXNfbGV0dGVyJywgICAgICAgICAgICAgICAvLyBhZHZpc29yeTogcGFnZSBzaXplXG4gICdkb2N4X3plcm9fc2hhcGVzJywgICAgICAgICAgICAvLyBhZHZpc29yeTogQVRTIGZvcm1hdHRpbmcgaGludFxuICAnZG9jeF9zdGFuZGFyZF9oZWFkaW5ncycsICAgICAgLy8gYWR2aXNvcnk6IEFUUyBoZWFkaW5nIHRleHRcbiAgJ2RvY3hfaGVhZGluZzFfcHJlc2VudCcsICAgICAgIC8vIGFkdmlzb3J5OiBBVFMgaGVhZGluZyBzdHlsZVxuICAnZG9jeF9kYXRlX2Zvcm1hdF9jb25zaXN0ZW50JywgLy8gYWR2aXNvcnk6IGRhdGUgZm9ybWF0IGNvbnNpc3RlbmN5XG4gICdkb2N4X3B1YmxpY2F0aW9uc19oZWFkaW5nJywgICAvLyBhZHZpc29yeTogcHVibGljYXRpb25zIGhlYWRpbmcgdGV4dFxuICAnaHRtbF9qc29ubGRfdmFsaWRfcGVyc29uJywgICAgLy8gYWR2aXNvcnk6IEpTT04tTEQgc2NoZW1hIHR5cGVcbiAgJ2h0bWxfanNvbmxkX2tub3dzX2Fib3V0JywgICAgIC8vIGFkdmlzb3J5OiBKU09OLUxEIHNraWxscyBwb3B1bGF0aW9uXG5dKTtcblxuZnVuY3Rpb24gX3JlbmRlckRvd25sb2FkR3JpZChmaWxlcywgY2hlY2tzLCBzdW1tYXJ5LCBnZW5lcmF0ZWRBdCA9IG51bGwsIGdlbmVyYXRpb25SdW4gPSBudWxsKSB7XG4gIGNvbnN0IGtleXdvcmRGYWlsID0gY2hlY2tzLnNvbWUoKGNoZWNrKSA9PiBjaGVjay5uYW1lID09PSAnYXRzX2tleXdvcmRfcHJlc2VuY2UnICYmIGNoZWNrLnN0YXR1cyA9PT0gJ2ZhaWwnKTtcbiAgY29uc3QgaXNDcml0aWNhbEZhaWwgPSAoY2hlY2spID0+IGNoZWNrLnN0YXR1cyA9PT0gJ2ZhaWwnICYmICFfTk9OX0JMT0NLSU5HX0NIRUNLUy5oYXMoY2hlY2submFtZSk7XG4gIGNvbnN0IGJsb2NrRG9jeCA9IGtleXdvcmRGYWlsIHx8IGNoZWNrcy5zb21lKChjaGVjaykgPT4gY2hlY2suZm9ybWF0ID09PSAnZG9jeCcgJiYgaXNDcml0aWNhbEZhaWwoY2hlY2spKTtcbiAgY29uc3QgYmxvY2tIdG1sID0ga2V5d29yZEZhaWwgfHwgY2hlY2tzLnNvbWUoKGNoZWNrKSA9PiBjaGVjay5mb3JtYXQgPT09ICdodG1sJyAmJiBpc0NyaXRpY2FsRmFpbChjaGVjaykpO1xuICBjb25zdCBibG9ja1BkZiAgPSBrZXl3b3JkRmFpbCB8fCBjaGVja3Muc29tZSgoY2hlY2spID0+IGNoZWNrLmZvcm1hdCA9PT0gJ3BkZicgICYmIGlzQ3JpdGljYWxGYWlsKGNoZWNrKSk7XG5cbiAgbGV0IGdlbmVyYXRlZExhYmVsID0gJyc7XG4gIGlmIChnZW5lcmF0ZWRBdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUoZ2VuZXJhdGVkQXQpO1xuICAgICAgY29uc3QgZGF0ZVN0ciA9IGQudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICBtb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIH0pO1xuICAgICAgZ2VuZXJhdGVkTGFiZWwgPSAoZ2VuZXJhdGlvblJ1biAmJiBnZW5lcmF0aW9uUnVuID4gMSlcbiAgICAgICAgPyBgUnVuICMke2dlbmVyYXRpb25SdW59IFx1MjAxNCAke2RhdGVTdHJ9YFxuICAgICAgICA6IGRhdGVTdHI7XG4gICAgfSBjYXRjaCAoXykgeyAvKiBpZ25vcmUgKi8gfVxuICB9XG5cbiAgbGV0IGh0bWwgPSAnPGRpdiBjbGFzcz1cImRvd25sb2FkLXNlY3Rpb25cIj48ZGl2IGNsYXNzPVwiZG93bmxvYWQtZ3JpZFwiPic7XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgaHRtbCArPSAnPHA+Tm8gZG93bmxvYWRhYmxlIGZpbGVzIGZvdW5kLiBQbGVhc2UgdHJ5IGdlbmVyYXRpbmcgeW91ciBDViBhZ2Fpbi48L3A+JztcbiAgICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nO1xuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgYmxvY2tlZCA9IChmaWxlLmZvcm1hdCA9PT0gJ2RvY3gnICYmIGJsb2NrRG9jeClcbiAgICAgIHx8IChmaWxlLmZvcm1hdCA9PT0gJ2h0bWwnICYmIGJsb2NrSHRtbClcbiAgICAgIHx8IChmaWxlLmZvcm1hdCA9PT0gJ3BkZicgJiYgYmxvY2tQZGYpO1xuICAgIGNvbnN0IGJsb2NrZWRTdHlsZSA9IGJsb2NrZWRcbiAgICAgID8gJ2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5OjAuNDtiYWNrZ3JvdW5kOiM5Y2EzYWY7Ym9yZGVyLWNvbG9yOiM5Y2EzYWY7J1xuICAgICAgOiAnJztcbiAgICBjb25zdCBibG9ja2VkTWVzc2FnZSA9IGJsb2NrZWRcbiAgICAgID8gJzxkaXYgc3R5bGU9XCJmb250LXNpemU6MC43OGVtO2NvbG9yOiNkYzI2MjY7bWFyZ2luLXRvcDo0cHg7XCI+XHUyNkQ0IEJsb2NrZWQgXHUyMDE0IG91dHB1dCBmaWxlIGNvdWxkIG5vdCBiZSBnZW5lcmF0ZWQ8L2Rpdj4nXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IHRpbWVzdGFtcExpbmUgPSBnZW5lcmF0ZWRMYWJlbFxuICAgICAgPyBgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjc1ZW07Y29sb3I6IzljYTNhZjttYXJnaW4tdG9wOjNweDtcIj5HZW5lcmF0ZWQgJHtnZW5lcmF0ZWRMYWJlbH08L2Rpdj5gXG4gICAgICA6ICc8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuNzVlbTtjb2xvcjojYzBjNGNjO21hcmdpbi10b3A6M3B4O1wiPk5vdCB5ZXQgZ2VuZXJhdGVkPC9kaXY+JztcblxuICAgIGNvbnN0IHByZXZpZXdCYWRnZSA9IGZpbGUuZm9ybWF0ID09PSAncHJldmlldydcbiAgICAgID8gJzxzcGFuIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6NnB4O2ZvbnQtc2l6ZTowLjc1ZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM5MjQwMGU7YmFja2dyb3VuZDojZmVmM2M3O2JvcmRlcjoxcHggc29saWQgI2ZjZDM0ZDtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjFweCA1cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO1wiPldvcmtpbmcgZmlsZSBcdTIwMTQgbm90IGZvciBzdWJtaXNzaW9uPC9zcGFuPidcbiAgICAgIDogJyc7XG5cbiAgICBodG1sICs9IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJkb3dubG9hZC1pdGVtXCIgc3R5bGU9XCIke2Jsb2NrZWQgPyAnb3BhY2l0eTowLjc1OycgOiAnJ30ke2ZpbGUuZm9ybWF0ID09PSAncHJldmlldycgPyAnYm9yZGVyLXN0eWxlOmRhc2hlZDsnIDogJyd9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkb3dubG9hZC1pY29uXCI+JHtmaWxlLmljb259PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkb3dubG9hZC1pbmZvXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRvd25sb2FkLW5hbWVcIj4ke2VzY2FwZUh0bWwoZmlsZS5maWxlbmFtZSl9JHtwcmV2aWV3QmFkZ2V9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRvd25sb2FkLWRlc2NyaXB0aW9uXCI+JHtlc2NhcGVIdG1sKGZpbGUuZGVzY3JpcHRpb24pfTwvZGl2PlxuICAgICAgICAgICR7dGltZXN0YW1wTGluZX1cbiAgICAgICAgICAke2Jsb2NrZWRNZXNzYWdlfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgJHtibG9ja2VkXG4gICAgICAgICAgPyBgPGJ1dHRvbiBjbGFzcz1cImJ0bi1kb3dubG9hZFwiIGRpc2FibGVkIHN0eWxlPVwiJHtibG9ja2VkU3R5bGV9XCI+QmxvY2tlZDwvYnV0dG9uPmBcbiAgICAgICAgICA6ICgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IF9zaWQgPSB0eXBlb2YgZ2V0U2Vzc2lvbklkRnJvbVVSTCA9PT0gJ2Z1bmN0aW9uJyA/IGdldFNlc3Npb25JZEZyb21VUkwoKSA6IG51bGw7XG4gICAgICAgICAgICAgIGNvbnN0IF9zcCAgPSBfc2lkID8gYD9zZXNzaW9uX2lkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KF9zaWQpfWAgOiAnJztcbiAgICAgICAgICAgICAgcmV0dXJuIGA8YSBocmVmPVwiL2FwaS9kb3dubG9hZC8ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlLmZpbGVuYW1lKX0ke19zcH1cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWRvd25sb2FkIGRvd25sb2FkLWxpbmtcIiBkb3dubG9hZD1cIiR7ZXNjYXBlSHRtbChmaWxlLmZpbGVuYW1lKX1cIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOm5vbmU7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtcIj5Eb3dubG9hZDwvYT5gO1xuICAgICAgICAgICAgfSkoKX1cbiAgICAgIDwvZGl2PmA7XG4gIH1cblxuICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nO1xuICBpZiAoc3VtbWFyeS5mYWlsID4gMCAmJiBmaWxlcy5sZW5ndGgpIHtcbiAgICBodG1sICs9ICc8cCBzdHlsZT1cIm1hcmdpbi10b3A6MTJweDtjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjg4ZW07XCI+QmxvY2tlZCBmb3JtYXRzIHJlZmxlY3QgQVRTIHZhbGlkYXRpb24gZmFpbHVyZXMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIG91dHB1dCB0eXBlcy48L3A+JztcbiAgfVxuICByZXR1cm4gaHRtbDtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclJlZmluZW1lbnRQYW5lbCgpIHtcbiAgcmV0dXJuIGA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoyNHB4O3BhZGRpbmc6MTZweDtiYWNrZ3JvdW5kOiNmOGZhZmM7Ym9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czo4cHg7XCI+XG4gICAgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjEwcHg7Y29sb3I6IzM3NDE1MTtcIj5cdTIxQkIgSXRlcmF0aXZlIFJlZmluZW1lbnQ8L2Rpdj5cbiAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuOWVtO2NvbG9yOiM2YjcyODA7bWFyZ2luLWJvdHRvbToxMnB4O1wiPlxuICAgICAgR28gYmFjayB0byByZWZpbmUgYW4gZWFybGllciBzdGVwIFx1MjAxNCBhbGwgcHJpb3IgZGVjaXNpb25zIGFuZCBhcHByb3ZhbHMgYXJlIHByZXNlcnZlZC5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwO1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1zZWNvbmRhcnlcIiBvbmNsaWNrPVwiYmFja1RvUGhhc2UoJ2N1c3RvbWl6YXRpb25zJylcIiB0aXRsZT1cIlJldHVybiB0byBDdXN0b21pc2Ugc3RlcFwiPlxuICAgICAgICBcdTIxQkIgUmVmaW5lIEN1c3RvbWlzZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXNlY29uZGFyeVwiIG9uY2xpY2s9XCJiYWNrVG9QaGFzZSgncmV3cml0ZScpXCIgdGl0bGU9XCJSZXR1cm4gdG8gUmV3cml0ZSBSZXZpZXcgc3RlcFwiPlxuICAgICAgICBcdTIxQkIgUmVmaW5lIFJld3JpdGVzXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tc2Vjb25kYXJ5XCIgb25jbGljaz1cImJhY2tUb1BoYXNlKCdhbmFseXNpcycpXCIgdGl0bGU9XCJSZXR1cm4gdG8gQW5hbHlzaXMgc3RlcFwiPlxuICAgICAgICBcdTIxQkIgUmUtYW5hbHlzZSBKb2JcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfZmV0Y2hQZXJzdWFzaW9uSHRtbCgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCcvYXBpL3BlcnN1YXNpb24tY2hlY2snKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIGlmICghcmVzcG9uc2Uub2sgfHwgIWRhdGEub2spIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBzdW1tYXJ5ID0gZGF0YS5zdW1tYXJ5IHx8IHsgZmxhZ2dlZDogMCwgc3Ryb25nX2NvdW50OiAwLCB0b3RhbF9idWxsZXRzOiAwIH07XG4gICAgY29uc3QgZmluZGluZ3MgPSBBcnJheS5pc0FycmF5KGRhdGEuZmluZGluZ3MpID8gZGF0YS5maW5kaW5ncyA6IFtdO1xuICAgIGNvbnN0IHNjb3JlQ29sb3IgPSBzdW1tYXJ5LmZsYWdnZWQgPT09IDAgPyAnIzEwYjk4MScgOiBzdW1tYXJ5LmZsYWdnZWQgPD0gMyA/ICcjZjU5ZTBiJyA6ICcjZWY0NDQ0JztcbiAgICBjb25zdCBzY29yZUxhYmVsID0gc3VtbWFyeS5mbGFnZ2VkID09PSAwXG4gICAgICA/ICdFeGNlbGxlbnQnXG4gICAgICA6IHN1bW1hcnkuZmxhZ2dlZCA8PSAzXG4gICAgICAgID8gJ0dvb2QgXHUyMDE0IG1pbm9yIGltcHJvdmVtZW50cyBwb3NzaWJsZSdcbiAgICAgICAgOiAnTmVlZHMgYXR0ZW50aW9uJztcblxuICAgIGxldCBodG1sID0gYDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjIwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO2JvcmRlci1yYWRpdXM6OHB4O292ZXJmbG93OmhpZGRlbjtcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOjE0cHggMTZweDtiYWNrZ3JvdW5kOiNmOGZhZmM7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtcIlxuICAgICAgICAgICBvbmNsaWNrPVwidGhpcy5uZXh0RWxlbWVudFNpYmxpbmcuc3R5bGUuZGlzcGxheT10aGlzLm5leHRFbGVtZW50U2libGluZy5zdHlsZS5kaXNwbGF5PT09J25vbmUnPydibG9jayc6J25vbmUnXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDo2MDA7Y29sb3I6IzFmMjkzNztcIj5cdUQ4M0RcdURDQUEgQnVsbGV0IFBlcnN1YXNpdmVuZXNzPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6MTJweDtiYWNrZ3JvdW5kOiR7c2NvcmVDb2xvcn07Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjJweCA4cHg7Zm9udC1zaXplOjAuOGVtO1wiPiR7c2NvcmVMYWJlbH08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtjb2xvcjojNmI3MjgwO1wiPlxuICAgICAgICAgICR7c3VtbWFyeS5zdHJvbmdfY291bnR9LyR7c3VtbWFyeS50b3RhbF9idWxsZXRzfSBzdHJvbmcgXHUwMEI3ICR7c3VtbWFyeS5mbGFnZ2VkfSBmbGFnZ2VkIFx1MDBCNyBjbGljayB0byAke3N1bW1hcnkuZmxhZ2dlZCA+IDAgPyAnZXhwYW5kJyA6ICdjb2xsYXBzZSd9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+YDtcblxuICAgIGlmIChmaW5kaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBodG1sICs9IGA8ZGl2IHN0eWxlPVwicGFkZGluZzoxMnB4IDE2cHg7ZGlzcGxheToke3N1bW1hcnkuZmxhZ2dlZCA8PSAzID8gJ2Jsb2NrJyA6ICdub25lJ307XCI+YDtcbiAgICAgIGZvciAoY29uc3QgZmluZGluZyBvZiBmaW5kaW5ncykge1xuICAgICAgICBjb25zdCBzZXZlcml0eSA9IGZpbmRpbmcuc2V2ZXJpdHkgPT09ICd3YXJuaW5nJ1xuICAgICAgICAgID8geyBiYWNrZ3JvdW5kOiAnI2ZmZjdlZCcsIGJvcmRlcjogJyNmNTllMGInLCBsYWJlbDogJ1x1MjZBMCBXYXJuaW5nJyB9XG4gICAgICAgICAgOiB7IGJhY2tncm91bmQ6ICcjZjBmOWZmJywgYm9yZGVyOiAnIzNiODJmNicsIGxhYmVsOiAnXHUyMTM5IEluZm8nIH07XG4gICAgICAgIGNvbnN0IHRydW5jYXRlZFRleHQgPSBmaW5kaW5nLnRleHQgJiYgZmluZGluZy50ZXh0Lmxlbmd0aCA+IDEyMFxuICAgICAgICAgID8gYCR7ZmluZGluZy50ZXh0LnNsaWNlKDAsIDEyMCl9XHUyMDI2YFxuICAgICAgICAgIDogZmluZGluZy50ZXh0IHx8ICcnO1xuICAgICAgICBodG1sICs9IGA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmc6MTBweCAxMnB4O2JhY2tncm91bmQ6JHtzZXZlcml0eS5iYWNrZ3JvdW5kfTtib3JkZXItbGVmdDozcHggc29saWQgJHtzZXZlcml0eS5ib3JkZXJ9O2JvcmRlci1yYWRpdXM6MCA2cHggNnB4IDA7XCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjhlbTtjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206NHB4O1wiPlxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kOiR7c2V2ZXJpdHkuYm9yZGVyfTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MXB4IDZweDtmb250LXNpemU6MC45ZW07XCI+JHtzZXZlcml0eS5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICBCdWxsZXQgJHsoZmluZGluZy5idWxsZXRfaW5kZXggPz8gMCkgKyAxfSR7ZmluZGluZy5leHBfaWQgPyBgIFx1MDBCNyAke2VzY2FwZUh0bWwoZmluZGluZy5leHBfaWQpfWAgOiAnJ31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuOWVtO2NvbG9yOiMzNzQxNTE7bWFyZ2luLWJvdHRvbTo2cHg7XCI+XCIke2VzY2FwZUh0bWwodHJ1bmNhdGVkVGV4dCl9XCI8L2Rpdj5cbiAgICAgICAgICA8dWwgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nLWxlZnQ6MThweDtcIj5gO1xuICAgICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGZpbmRpbmcuaXNzdWVzIHx8IFtdKSB7XG4gICAgICAgICAgaHRtbCArPSBgPGxpIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MnB4O1wiPiR7ZXNjYXBlSHRtbChpc3N1ZS5zdWdnZXN0aW9uKX08L2xpPmA7XG4gICAgICAgIH1cbiAgICAgICAgaHRtbCArPSAnPC91bD48L2Rpdj4nO1xuICAgICAgfVxuICAgICAgaHRtbCArPSAnPC9kaXY+JztcbiAgICB9IGVsc2Uge1xuICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT1cInBhZGRpbmc6MTJweCAxNnB4O2NvbG9yOiMxMGI5ODE7Zm9udC1zaXplOjAuOWVtO1wiPkFsbCBidWxsZXRzIG1lZXQgcGVyc3Vhc2l2ZW5lc3MgY3JpdGVyaWEuPC9kaXY+JztcbiAgICB9XG5cbiAgICAvLyBOYXJyYXRpdmUtdGhyZWFkIGFkdmlzb3J5IChHQVAtMjgxKVxuICAgIGNvbnN0IG50YSA9IHN1bW1hcnkubmFycmF0aXZlX3RocmVhZF9hZHZpc29yeTtcbiAgICBpZiAobnRhKSB7XG4gICAgICBodG1sICs9IGA8ZGl2IHN0eWxlPVwicGFkZGluZzoxMHB4IDE2cHg7YmFja2dyb3VuZDojZmVmOWMzO2JvcmRlci10b3A6MXB4IHNvbGlkICNmZGU2OGE7XCI+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM5MjQwMGU7XCI+XHVEODNFXHVEREY1IE5hcnJhdGl2ZSBmb2N1cyBhZHZpc29yeTo8L3NwYW4+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuOWVtO2NvbG9yOiM3ODM1MGY7bWFyZ2luLWxlZnQ6NnB4O1wiPiR7ZXNjYXBlSHRtbChudGEuZGV0YWlsKX08L3NwYW4+XG4gICAgICA8L2Rpdj5gO1xuICAgIH1cblxuICAgIC8vIE5hcnJhdGl2ZS1hcmMgYWR2aXNvcnkgKEdBUC0xNyk6IHJlY2VudCByb2xlIHNob3VsZCBzaG93IHN0cm9uZ2VzdCB2ZXJic1xuICAgIGNvbnN0IG5hYSA9IHN1bW1hcnkubmFycmF0aXZlX2FyY19hZHZpc29yeTtcbiAgICBpZiAobmFhKSB7XG4gICAgICBodG1sICs9IGA8ZGl2IHN0eWxlPVwicGFkZGluZzoxMHB4IDE2cHg7YmFja2dyb3VuZDojZmZmN2VkO2JvcmRlci10b3A6MXB4IHNvbGlkICNmZWQ3YWE7XCI+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM5YTM0MTI7XCI+XHVEODNEXHVEQ0M4IE5hcnJhdGl2ZSBhcmMgYWR2aXNvcnk6PC9zcGFuPlxuICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjllbTtjb2xvcjojN2MyZDEyO21hcmdpbi1sZWZ0OjZweDtcIj4ke2VzY2FwZUh0bWwobmFhLmRldGFpbCl9PC9zcGFuPlxuICAgICAgPC9kaXY+YDtcbiAgICB9XG5cbiAgICBodG1sICs9ICc8L2Rpdj4nO1xuICAgIHJldHVybiBodG1sO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy53YXJuKCdQZXJzdWFzaW9uIGNoZWNrIGZhaWxlZDonLCBlcnJvcik7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBvcHVsYXRlRG93bmxvYWRUYWIoY3ZEYXRhKSB7XG4gIHN0YXRlTWFuYWdlci5zZXRUYWJEYXRhKCdjdicsIGN2RGF0YSk7XG5cbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGlmICghY29udGVudCkgcmV0dXJuO1xuXG4gIGlmICghY3ZEYXRhIHx8ICh0eXBlb2YgY3ZEYXRhID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhjdkRhdGEpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICBjb250ZW50LmlubmVySFRNTCA9ICc8aDE+XHUyQjA3XHVGRTBGIERvd25sb2FkIEdlbmVyYXRlZCBGaWxlczwvaDE+PGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+PGRpdiBjbGFzcz1cImljb25cIj5cdTJCMDdcdUZFMEY8L2Rpdj48aDM+Tm8gRmlsZXMgQXZhaWxhYmxlPC9oMz48cD5HZW5lcmF0ZSBhIENWIGZpcnN0IHRvIHNlZSBkb3dubG9hZCBvcHRpb25zLjwvcD48L2Rpdj4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gJzxoMT5cdTJCMDdcdUZFMEYgRG93bmxvYWQgR2VuZXJhdGVkIEZpbGVzPC9oMT48cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7bWFyZ2luLWJvdHRvbToxNnB4O1wiPlJ1bm5pbmcgQVRTIHZhbGlkYXRpb25cdTIwMjY8L3A+JztcblxuICBsZXQgY2hlY2tzID0gW107XG4gIGxldCBwYWdlQ291bnQgPSBudWxsO1xuICBsZXQgc3VtbWFyeSA9IHsgcGFzczogMCwgd2FybjogMCwgZmFpbDogMCB9O1xuICBsZXQgYXRzRXJyb3IgPSBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvYXRzLXZhbGlkYXRlJyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgY2hlY2tzID0gZGF0YS5jaGVja3MgfHwgW107XG4gICAgICBwYWdlQ291bnQgPSBkYXRhLnBhZ2VfY291bnQgPz8gbnVsbDtcbiAgICAgIHN1bW1hcnkgPSBkYXRhLnN1bW1hcnkgfHwgc3VtbWFyeTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXRzRXJyb3IgPSBkYXRhLmVycm9yIHx8ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGF0c0Vycm9yID0gYE5ldHdvcmsgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICB9XG5cbiAgY29uc3QgZmlsZXMgPSBfY29sbGVjdERvd25sb2FkYWJsZUZpbGVzKGN2RGF0YSk7XG4gIGxldCBodG1sID0gJzxoMT5cdTJCMDdcdUZFMEYgRmlsZSBSZXZpZXc8L2gxPic7XG4gIGh0bWwgKz0gJzxwIHN0eWxlPVwiZm9udC1zaXplOjAuODNlbTtjb2xvcjojOTRhM2I4O21hcmdpbi1ib3R0b206MTZweDtwYWRkaW5nOjhweCAxMnB4O2JhY2tncm91bmQ6I2Y4ZmFmYztib3JkZXItcmFkaXVzOjZweDtib3JkZXItbGVmdDozcHggc29saWQgI2UyZThmMDtcIj5cdTI3MDUgPGVtPlRoaXMgaXMgdGhlIDxzdHJvbmc+Y29tcGxldGVuZXNzIGNoZWNrPC9zdHJvbmc+IHN0ZXAgXHUyMDE0IEFUUyB2YWxpZGF0aW9uIHJ1bnMgaGVyZSBhbmQgeW91IGNhbiBhcmNoaXZlIHRoZSBhcHBsaWNhdGlvbi4gVG8gZG93bmxvYWQgZmlsZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgZ2VuZXJhdGlvbiwgdXNlIHRoZSA8c3Ryb25nPkdlbmVyYXRlZCBGaWxlczwvc3Ryb25nPiB0YWIuPC9lbT48L3A+JztcbiAgaHRtbCArPSBfcmVuZGVyVmFsaWRhdGlvblN1bW1hcnkoY2hlY2tzLCBzdW1tYXJ5LCBwYWdlQ291bnQsIGF0c0Vycm9yKTtcblxuICBjb25zdCBzdW1tYXJ5V2FybmluZ3MgPSAoY3ZEYXRhLm1ldGFkYXRhPy5zdW1tYXJ5X3dhcm5pbmdzIHx8IFtdKTtcbiAgaWYgKHN1bW1hcnlXYXJuaW5ncy5sZW5ndGgpIHtcbiAgICBodG1sICs9IGA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmVmOWMzO2JvcmRlcjoxcHggc29saWQgI2ZjZDM0ZDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDttYXJnaW4tYm90dG9tOjE2cHg7XCI+XG4gICAgICA8c3Ryb25nPlx1MjZBMCBQcm9mZXNzaW9uYWwgU3VtbWFyeSBxdWFsaXR5IG5vdGljZXMgKCR7c3VtbWFyeVdhcm5pbmdzLmxlbmd0aH0pOjwvc3Ryb25nPlxuICAgICAgPHVsIHN0eWxlPVwibWFyZ2luOjhweCAwIDAgMDtwYWRkaW5nLWxlZnQ6MThweDtcIj5cbiAgICAgICAgJHtzdW1tYXJ5V2FybmluZ3MubWFwKHcgPT4gYDxsaSBzdHlsZT1cImZvbnQtc2l6ZTowLjllbTtcIj4ke2VzY2FwZUh0bWwodyl9PC9saT5gKS5qb2luKCcnKX1cbiAgICAgIDwvdWw+XG4gICAgICA8cCBzdHlsZT1cIm1hcmdpbjo4cHggMCAwO2ZvbnQtc2l6ZTowLjg3ZW07Y29sb3I6Izc4MzUwZjtcIj5UaGVzZSBhcmUgYWR2aXNvcnkgd2FybmluZ3MgXHUyMDE0IHJldmlldyB0aGUgU3VtbWFyeSB0YWIgaWYgeW91IHdpc2ggdG8gdXBkYXRlIHRoZSBzdW1tYXJ5IGJlZm9yZSBzdWJtaXR0aW5nLjwvcD5cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgY29uc3QgcHVibGljYXRpb25XYXJuaW5ncyA9IChjdkRhdGEubWV0YWRhdGE/LnB1YmxpY2F0aW9uX3dhcm5pbmdzIHx8IFtdKTtcbiAgaWYgKHB1YmxpY2F0aW9uV2FybmluZ3MubGVuZ3RoKSB7XG4gICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZjljMztib3JkZXI6MXB4IHNvbGlkICNmY2QzNGQ7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgPHN0cm9uZz5cdTI2QTAgUHVibGljYXRpb24gdmVudWUgaW5mb3JtYXRpb24gaW5jb21wbGV0ZSAoJHtwdWJsaWNhdGlvbldhcm5pbmdzLmxlbmd0aH0pOjwvc3Ryb25nPlxuICAgICAgPHVsIHN0eWxlPVwibWFyZ2luOjhweCAwIDAgMDtwYWRkaW5nLWxlZnQ6MThweDtcIj5cbiAgICAgICAgJHtwdWJsaWNhdGlvbldhcm5pbmdzLm1hcCh3ID0+IGA8bGkgc3R5bGU9XCJmb250LXNpemU6MC45ZW07XCI+JHtlc2NhcGVIdG1sKHcpfTwvbGk+YCkuam9pbignJyl9XG4gICAgICA8L3VsPlxuICAgICAgPHAgc3R5bGU9XCJtYXJnaW46OHB4IDAgMDtmb250LXNpemU6MC44N2VtO2NvbG9yOiM3ODM1MGY7XCI+QWRkIG1pc3Npbmcgam91cm5hbCBvciBjb25mZXJlbmNlIG5hbWVzIHRvIHlvdXIgTWFzdGVyIENWIGJlZm9yZSBzdWJtaXR0aW5nIFx1MjAxNCBpbmNvbXBsZXRlIHZlbnVlIGRldGFpbHMgd2Vha2VuIGNyZWRpYmlsaXR5LjwvcD5cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgY29uc3QgbG9uZ0J1bGxldFdhcm5pbmdzID0gKGN2RGF0YS5tZXRhZGF0YT8ubG9uZ19idWxsZXRfd2FybmluZ3MgfHwgW10pO1xuICBpZiAobG9uZ0J1bGxldFdhcm5pbmdzLmxlbmd0aCkge1xuICAgIGh0bWwgKz0gYDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZWY5YzM7Ym9yZGVyOjFweCBzb2xpZCAjZmNkMzRkO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O21hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgIDxzdHJvbmc+XHUyNkEwIExvbmcgYnVsbGV0IHBvaW50cyBkZXRlY3RlZCAoJHtsb25nQnVsbGV0V2FybmluZ3MubGVuZ3RofSkgXHUyMDE0IG1heSBleGNlZWQgMiBsaW5lczo8L3N0cm9uZz5cbiAgICAgIDx1bCBzdHlsZT1cIm1hcmdpbjo4cHggMCAwIDA7cGFkZGluZy1sZWZ0OjE4cHg7bGlzdC1zdHlsZTpub25lO1wiPlxuICAgICAgICAke2xvbmdCdWxsZXRXYXJuaW5ncy5tYXAodyA9PiBgPGxpIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTttYXJnaW4tYm90dG9tOjRweDtcIj48c3Ryb25nPiR7ZXNjYXBlSHRtbCh3LmNvbXBhbnkpfSBcdTAwQjcgJHtlc2NhcGVIdG1sKHcudGl0bGUpfTwvc3Ryb25nPiAoJHt3LmNoYXJfY291bnR9IGNoYXJzKTxicj48c3BhbiBzdHlsZT1cImNvbG9yOiM2YjcyODA7XCI+XCIke2VzY2FwZUh0bWwody5idWxsZXRfdGV4dCl9XCI8L3NwYW4+PC9saT5gKS5qb2luKCcnKX1cbiAgICAgIDwvdWw+XG4gICAgICA8cCBzdHlsZT1cIm1hcmdpbjo4cHggMCAwO2ZvbnQtc2l6ZTowLjg3ZW07Y29sb3I6Izc4MzUwZjtcIj5Db25zaWRlciBzaG9ydGVuaW5nIHRoZXNlIGJ1bGxldHMgXHUyMDE0IGFpbSBmb3IgXHUyMjY0MjAwIGNoYXJhY3RlcnMgZWFjaCBmb3IgY2xlYW4gMi1saW5lIHJlbmRlcmluZyBpbiB0aGUgRE9DWC48L3A+XG4gICAgPC9kaXY+YDtcbiAgfVxuXG4gIGNvbnN0IHNwYXJzZUV4cFdhcm5pbmdzID0gKGN2RGF0YS5tZXRhZGF0YT8uc3BhcnNlX2V4cGVyaWVuY2Vfd2FybmluZ3MgfHwgW10pO1xuICBpZiAoc3BhcnNlRXhwV2FybmluZ3MubGVuZ3RoKSB7XG4gICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZjljMztib3JkZXI6MXB4IHNvbGlkICNmY2QzNGQ7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgPHN0cm9uZz5cdTI2QTAgU3BhcnNlIGV4cGVyaWVuY2UgZW50cmllcyAoJHtzcGFyc2VFeHBXYXJuaW5ncy5sZW5ndGh9KSBcdTIwMTQgZmV3ZXIgdGhhbiAyIGJ1bGxldHM6PC9zdHJvbmc+XG4gICAgICA8dWwgc3R5bGU9XCJtYXJnaW46OHB4IDAgMCAwO3BhZGRpbmctbGVmdDoxOHB4O2xpc3Qtc3R5bGU6bm9uZTtcIj5cbiAgICAgICAgJHtzcGFyc2VFeHBXYXJuaW5ncy5tYXAodyA9PiBgPGxpIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTttYXJnaW4tYm90dG9tOjJweDtcIj48c3Ryb25nPiR7ZXNjYXBlSHRtbCh3LmNvbXBhbnkpfSBcdTAwQjcgJHtlc2NhcGVIdG1sKHcudGl0bGUpfTwvc3Ryb25nPiBcdTIwMTQgJHt3LmJ1bGxldF9jb3VudCA9PT0gMCA/ICdubyBidWxsZXRzIHNlbGVjdGVkJyA6ICcxIGJ1bGxldCBzZWxlY3RlZCd9PC9saT5gKS5qb2luKCcnKX1cbiAgICAgIDwvdWw+XG4gICAgICA8cCBzdHlsZT1cIm1hcmdpbjo4cHggMCAwO2ZvbnQtc2l6ZTowLjg3ZW07Y29sb3I6Izc4MzUwZjtcIj5JbmNsdWRlIGF0IGxlYXN0IDIgYnVsbGV0cyBwZXIgcm9sZSB0byBkZW1vbnN0cmF0ZSBpbXBhY3QuIFJldHVybiB0byB0aGUgRXhwZXJpZW5jZSB0YWIgdG8gYWRkIG1vcmUuPC9wPlxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBjb25zdCB5ZWFyT25seURhdGVXYXJuaW5ncyA9IChjdkRhdGEubWV0YWRhdGE/LnllYXJfb25seV9kYXRlX3dhcm5pbmdzIHx8IFtdKTtcbiAgaWYgKHllYXJPbmx5RGF0ZVdhcm5pbmdzLmxlbmd0aCkge1xuICAgIGh0bWwgKz0gYDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZWY5YzM7Ym9yZGVyOjFweCBzb2xpZCAjZmNkMzRkO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O21hcmdpbi1ib3R0b206MTZweDtcIj5cbiAgICAgIDxzdHJvbmc+XHUyNkEwIFllYXItb25seSBkYXRlcyBkZXRlY3RlZCAoJHt5ZWFyT25seURhdGVXYXJuaW5ncy5sZW5ndGh9KSBcdTIwMTQgbW9udGgveWVhciBmb3JtYXQgcmVjb21tZW5kZWQ6PC9zdHJvbmc+XG4gICAgICA8dWwgc3R5bGU9XCJtYXJnaW46OHB4IDAgMCAwO3BhZGRpbmctbGVmdDoxOHB4O2xpc3Qtc3R5bGU6bm9uZTtcIj5cbiAgICAgICAgJHt5ZWFyT25seURhdGVXYXJuaW5ncy5tYXAodyA9PiBgPGxpIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTttYXJnaW4tYm90dG9tOjJweDtcIj48c3Ryb25nPiR7ZXNjYXBlSHRtbCh3LmNvbXBhbnkpfSBcdTAwQjcgJHtlc2NhcGVIdG1sKHcudGl0bGUpfTwvc3Ryb25nPiBcdTIwMTQgJHt3LmZpZWxkID09PSAnc3RhcnRfZGF0ZScgPyAnc3RhcnQnIDogJ2VuZCd9IGRhdGUgaXMgXCIke2VzY2FwZUh0bWwody5kYXRlX3ZhbHVlKX1cIjwvbGk+YCkuam9pbignJyl9XG4gICAgICA8L3VsPlxuICAgICAgPHAgc3R5bGU9XCJtYXJnaW46OHB4IDAgMDtmb250LXNpemU6MC44N2VtO2NvbG9yOiM3ODM1MGY7XCI+WWVhci1vbmx5IGRhdGVzIHJlZHVjZSBjaHJvbm9sb2dpY2FsIHByZWNpc2lvbi4gVXBkYXRlIHRvIE1vbnRoIFlZWVkgZm9ybWF0IChlLmcuIFwiSmFuIDIwMjBcIikgaW4gdGhlIE1hc3RlciBDViBmb3IgYmVzdCBBVFMgY29tcGF0aWJpbGl0eS48L3A+XG4gICAgPC9kaXY+YDtcbiAgfVxuXG4gIGNvbnN0IHJld3JpdGVBdWRpdE1pc21hdGNoZXMgPSAoY3ZEYXRhLm1ldGFkYXRhPy5yZXdyaXRlX2F1ZGl0X21pc21hdGNoZXMgfHwgW10pO1xuICBpZiAocmV3cml0ZUF1ZGl0TWlzbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICBodG1sICs9IGA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmVmMmYyO2JvcmRlcjoxcHggc29saWQgI2ZjYTVhNTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDttYXJnaW4tYm90dG9tOjE2cHg7XCI+XG4gICAgICA8c3Ryb25nPlx1MjZBMCBSZXdyaXRlIGNvbnRlbnQgbWlzbWF0Y2ggKCR7cmV3cml0ZUF1ZGl0TWlzbWF0Y2hlcy5sZW5ndGh9KSBcdTIwMTQgYWNjZXB0ZWQgcmV3cml0ZXMgbm90IGZvdW5kIGluIGdlbmVyYXRlZCB0ZXh0Ojwvc3Ryb25nPlxuICAgICAgPHVsIHN0eWxlPVwibWFyZ2luOjhweCAwIDAgMDtwYWRkaW5nLWxlZnQ6MThweDtsaXN0LXN0eWxlOm5vbmU7XCI+XG4gICAgICAgICR7cmV3cml0ZUF1ZGl0TWlzbWF0Y2hlcy5tYXAobSA9PiBgPGxpIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTttYXJnaW4tYm90dG9tOjZweDtcIj48c3Ryb25nPiR7ZXNjYXBlSHRtbChtLmxvY2F0aW9uIHx8IG0udHlwZSl9PC9zdHJvbmc+PGJyPjxzcGFuIHN0eWxlPVwiY29sb3I6IzM3NDE1MTtcIj5FeHBlY3RlZDogPGVtPlwiJHtlc2NhcGVIdG1sKChtLmV4cGVjdGVkIHx8ICcnKS5zbGljZSgwLCAxMjApKX0keyhtLmV4cGVjdGVkIHx8ICcnKS5sZW5ndGggPiAxMjAgPyAnXHUyMDI2JyA6ICcnfVwiPC9lbT48L3NwYW4+PGJyPjxzcGFuIHN0eWxlPVwiY29sb3I6IzljYTNhZjtcIj5BY3R1YWw6IDxlbT5cIiR7ZXNjYXBlSHRtbCgobS5hY3R1YWwgfHwgJycpLnNsaWNlKDAsIDEyMCkpfSR7KG0uYWN0dWFsIHx8ICcnKS5sZW5ndGggPiAxMjAgPyAnXHUyMDI2JyA6ICcnfVwiPC9lbT48L3NwYW4+PC9saT5gKS5qb2luKCcnKX1cbiAgICAgIDwvdWw+XG4gICAgICA8cCBzdHlsZT1cIm1hcmdpbjo4cHggMCAwO2ZvbnQtc2l6ZTowLjg3ZW07Y29sb3I6IzdmMWQxZDtcIj5UaGVzZSBhY2NlcHRlZCByZXdyaXRlcyBtYXkgbm90IGhhdmUgYmVlbiBhcHBsaWVkLiBSZS1nZW5lcmF0ZSB0aGUgQ1Ygb3IgY2hlY2sgdGhlIHJld3JpdGUgcmV2aWV3IHN0ZXAuPC9wPlxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBjb25zdCBvdmVybGFwV2FybmluZ3MgPSAoY3ZEYXRhLmRhdGVfb3ZlcmxhcF93YXJuaW5ncyB8fCBbXSk7XG4gIGlmIChvdmVybGFwV2FybmluZ3MubGVuZ3RoKSB7XG4gICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZjljMztib3JkZXI6MXB4IHNvbGlkICNmZGUwNDc7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgPHN0cm9uZz5cdTI2QTAgRW1wbG95bWVudCBkYXRlIG92ZXJsYXBzIGRldGVjdGVkICgke292ZXJsYXBXYXJuaW5ncy5sZW5ndGh9KTo8L3N0cm9uZz5cbiAgICAgIDx1bCBzdHlsZT1cIm1hcmdpbjo4cHggMCAwIDA7cGFkZGluZy1sZWZ0OjE4cHg7XCI+XG4gICAgICAgICR7b3ZlcmxhcFdhcm5pbmdzLm1hcCh3ID0+IGA8bGk+PHN0cm9uZz4ke2VzY2FwZUh0bWwody5lbnRyeV9hKX08L3N0cm9uZz4gb3ZlcmxhcHMgd2l0aCA8c3Ryb25nPiR7ZXNjYXBlSHRtbCh3LmVudHJ5X2IpfTwvc3Ryb25nPjxicj48c21hbGwgc3R5bGU9XCJjb2xvcjojOTI0MDBlO1wiPiR7ZXNjYXBlSHRtbCh3Lm92ZXJsYXBfZGVzY3JpcHRpb24pfTwvc21hbGw+PC9saT5gKS5qb2luKCcnKX1cbiAgICAgIDwvdWw+XG4gICAgICA8cCBzdHlsZT1cIm1hcmdpbjo4cHggMCAwO2ZvbnQtc2l6ZTowLjg3ZW07Y29sb3I6Izc4MzUwZjtcIj5SZXZpZXcgdGhlc2UgZW50cmllcyBpbiB0aGUgRXhwZXJpZW5jZSB0YWIgYmVmb3JlIHN1Ym1pdHRpbmcgeW91ciBhcHBsaWNhdGlvbi48L3A+XG4gICAgPC9kaXY+YDtcbiAgfVxuXG4gIGNvbnN0IGdlbmVyYXRlZEF0ID0gY3ZEYXRhLm1ldGFkYXRhPy5nZW5lcmF0aW9uX2RhdGUgPz8gbnVsbDtcbiAgY29uc3QgZ2VuZXJhdGlvblJ1biA9IGN2RGF0YS5tZXRhZGF0YT8uZ2VuZXJhdGlvbl9ydW4gPz8gbnVsbDtcbiAgaHRtbCArPSBfcmVuZGVyRG93bmxvYWRHcmlkKGZpbGVzLCBjaGVja3MsIHN1bW1hcnksIGdlbmVyYXRlZEF0LCBnZW5lcmF0aW9uUnVuKTtcblxuICBpZiAoY3ZEYXRhLm91dHB1dF9kaXIpIHtcbiAgICBodG1sICs9IGA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoyMHB4O3BhZGRpbmc6MTJweDtiYWNrZ3JvdW5kOiNmMWY1Zjk7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzY0NzQ4YjtcIj5cbiAgICAgIDxzdHJvbmc+T3V0cHV0IERpcmVjdG9yeTo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKGN2RGF0YS5vdXRwdXRfZGlyKX1cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgY29udGVudC5pbm5lckhUTUwgPSBgJHtodG1sfTxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOjE2cHg7Zm9udC1zaXplOjAuOWVtO1wiPkFuYWx5c2luZyBidWxsZXQgcGVyc3Vhc2l2ZW5lc3NcdTIwMjY8L3A+YDtcbiAgaHRtbCArPSBhd2FpdCBfZmV0Y2hQZXJzdWFzaW9uSHRtbCgpO1xuICBodG1sICs9IF9yZW5kZXJSZWZpbmVtZW50UGFuZWwoKTtcbiAgaHRtbCArPSBgPGRpdiBjbGFzcz1cIm5hdi1idXR0b25zIG5hdi1lbmRcIiBzdHlsZT1cIm1hcmdpbi10b3A6MTZweDtcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiY29udGludWUtYnRuXCIgb25jbGljaz1cImhhbmRsZVN0ZXBDbGljaygnY292ZXJfbGV0dGVyJylcIj5cbiAgICAgIFx1RDgzRFx1RENFOSBQcm9jZWVkIHRvIENvdmVyIExldHRlciBcdTIxOTJcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+YDtcbiAgY29udGVudC5pbm5lckhUTUwgPSBodG1sO1xufVxuXG5leHBvcnQgeyBwb3B1bGF0ZURvd25sb2FkVGFiIH07IiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvZmluYWwtZ2VuZXJhdGUuanNcbiAqIEZpbmFsIGdlbmVyYXRpb24gc3RlcDogc2hvd3MgZG93bmxvYWQgbGlua3MgZm9yIHRoZSBnZW5lcmF0ZWQgZmlsZXNcbiAqIChQREYsIEFUUyBET0NYLCBodW1hbiBET0NYKSBhbmQgYSBcIlByb2NlZWQgdG8gRG93bmxvYWQgUmV2aWV3IFx1MjE5MlwiIGJ1dHRvblxuICogdGhhdCBhZHZhbmNlcyB0aGUgd29ya2Zsb3cgdG8gdGhlIGRvd25sb2FkIHN0ZXAuXG4gKlxuICogRGVwZW5kZW5jaWVzIChyZXNvbHZlZCB0aHJvdWdoIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIGFwaUNhbGwsIGFwcGVuZE1lc3NhZ2UsIGVzY2FwZUh0bWwsIHN0YXRlTWFuYWdlciwgc3dpdGNoVGFiXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdmaW5hbC1nZW5lcmF0ZScpO1xuXG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuXG4vLyBcdTI1MDBcdTI1MDAgUHJldmlldyBzdGF0ZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxubGV0IF9wcmV2aWV3T3BlbiA9IHRydWU7XG5cbi8vIFx1MjUwMFx1MjUwMCBGaWxlIHR5cGUgaGVscGVycyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gX2ZpbGVMYWJlbChmaWxlbmFtZSkge1xuICBpZiAoIWZpbGVuYW1lKSByZXR1cm4gJyc7XG4gIGNvbnN0IGJhc2UgPSBmaWxlbmFtZS5zcGxpdCgnLycpLnBvcCgpO1xuICBpZiAoYmFzZS5lbmRzV2l0aCgnLnBkZicpICYmIGJhc2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYXRzJykpXG4gICAgcmV0dXJuICdBVFMgUERGJztcbiAgaWYgKGJhc2UuZW5kc1dpdGgoJy5wZGYnKSlcbiAgICByZXR1cm4gJ0h1bWFuIFBERic7XG4gIGlmIChiYXNlLmVuZHNXaXRoKCcuZG9jeCcpICYmIGJhc2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYXRzJykpXG4gICAgcmV0dXJuICdBVFMgV29yZCc7XG4gIGlmIChiYXNlLmVuZHNXaXRoKCcuZG9jeCcpKVxuICAgIHJldHVybiAnSHVtYW4gV29yZCc7XG4gIGlmIChiYXNlLmVuZHNXaXRoKCcuaHRtbCcpKVxuICAgIHJldHVybiAnSFRNTCc7XG4gIHJldHVybiBiYXNlO1xufVxuXG5mdW5jdGlvbiBfZmlsZUljb24oZmlsZW5hbWUpIHtcbiAgaWYgKCFmaWxlbmFtZSkgcmV0dXJuICdcdUQ4M0RcdURDQzEnO1xuICBjb25zdCBmID0gZmlsZW5hbWUudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGYuZW5kc1dpdGgoJy5wZGYnKSkgIHJldHVybiBmLmluY2x1ZGVzKCdhdHMnKSA/ICdcdUQ4M0VcdUREMTYnIDogJ1x1RDgzRFx1RENDNCc7XG4gIGlmIChmLmVuZHNXaXRoKCcuZG9jeCcpKSByZXR1cm4gJ1x1RDgzRFx1RENERCc7XG4gIGlmIChmLmVuZHNXaXRoKCcuaHRtbCcpKSByZXR1cm4gJ1x1RDgzQ1x1REYxMCc7XG4gIHJldHVybiAnXHVEODNEXHVEQ0MxJztcbn1cblxuZnVuY3Rpb24gX2ZpbGVEZXNjcmlwdGlvbihmaWxlbmFtZSkge1xuICBpZiAoIWZpbGVuYW1lKSByZXR1cm4gJyc7XG4gIGNvbnN0IGYgPSBmaWxlbmFtZS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZi5lbmRzV2l0aCgnLnBkZicpICYmIGYuaW5jbHVkZXMoJ2F0cycpKVxuICAgIHJldHVybiAnQVRTLW9wdGltaXNlZCBQREYgXHUyMDE0IG1hY2hpbmUtcmVhZGFibGUgZm9yIGF1dG9tYXRlZCBzY3JlZW5pbmcnO1xuICBpZiAoZi5lbmRzV2l0aCgnLnBkZicpKVxuICAgIHJldHVybiAnSHVtYW4tcmVhZGFibGUgUERGIFx1MjAxNCBmb3IgaHVtYW4gcmV2aWV3ZXJzIGFuZCBwcmludGluZyc7XG4gIGlmIChmLmVuZHNXaXRoKCcuZG9jeCcpICYmIGYuaW5jbHVkZXMoJ2F0cycpKVxuICAgIHJldHVybiAnQVRTIFdvcmQgZG9jdW1lbnQgXHUyMDE0IGtleXdvcmQtb3B0aW1pc2VkIGZvciBqb2IgYXBwbGljYXRpb25zJztcbiAgaWYgKGYuZW5kc1dpdGgoJy5kb2N4JykpXG4gICAgcmV0dXJuICdIdW1hbi1yZWFkYWJsZSBXb3JkIGRvY3VtZW50IFx1MjAxNCBlZGl0YWJsZSBmb3JtYXQnO1xuICBpZiAoZi5lbmRzV2l0aCgnLmh0bWwnKSlcbiAgICByZXR1cm4gJ0hUTUwgZm9ybWF0IHdpdGggZW1iZWRkZWQgSlNPTi1MRCBzdHJ1Y3R1cmVkIGRhdGEnO1xuICByZXR1cm4gJ0dlbmVyYXRlZCBmaWxlJztcbn1cblxuZnVuY3Rpb24gX2h0bWxQcmV2aWV3RmlsZShmaWxlcykge1xuICAvLyBQcmVmZXIgaHVtYW4tcmVhZGFibGUgSFRNTCAoQ1ZfKi5odG1sLCBub3QgQVRTKVxuICBjb25zdCBodW1hbiA9IGZpbGVzLmZpbmQoZiA9PiBmLmVuZHNXaXRoKCcuaHRtbCcpICYmICFmLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2F0cycpKTtcbiAgcmV0dXJuIGh1bWFuIHx8IGZpbGVzLmZpbmQoZiA9PiBmLmVuZHNXaXRoKCcuaHRtbCcpKSB8fCBudWxsO1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyUHJldmlld1BhbmUoaHRtbEZpbGUpIHtcbiAgaWYgKCFodG1sRmlsZSkgcmV0dXJuICcnO1xuICBjb25zdCBiYXNlID0gaHRtbEZpbGUuc3BsaXQoJy8nKS5wb3AoKTtcbiAgY29uc3Qgc3JjID0gYC9hcGkvZG93bmxvYWQvJHtlbmNvZGVVUklDb21wb25lbnQoYmFzZSl9YDtcbiAgcmV0dXJuIGBcbiAgICA8ZGl2IGlkPVwiZmluYWwtcHJldmlldy1wYW5lXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO2JvcmRlci1yYWRpdXM6MTBweDtvdmVyZmxvdzpoaWRkZW47JHtfcHJldmlld09wZW4gPyAnJyA6ICdkaXNwbGF5Om5vbmU7J31cIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOjEwcHggMTZweDtiYWNrZ3JvdW5kOiNmMWY1Zjk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTJlOGYwO1wiPlxuICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjllbTtmb250LXdlaWdodDo2MDA7Y29sb3I6IzFlMjkzYjtcIj5cdUQ4M0NcdURGMTAgSFRNTCBQcmV2aWV3PC9zcGFuPlxuICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjhlbTtjb2xvcjojNjQ3NDhiO2ZsZXg6MTtcIj4ke2VzY2FwZUh0bWwoYmFzZSl9PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImZpbmFsLXByZXZpZXctY2xvc2UtYnRuXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTowLjhlbTtwYWRkaW5nOjNweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2NiZDVlMTtib3JkZXItcmFkaXVzOjVweDtiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzQ3NTU2OTtcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJIaWRlIHByZXZpZXdcIj5IaWRlPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO3BhZGRpbmctdG9wOjU2LjI1JTtiYWNrZ3JvdW5kOiNmOGZhZmM7XCI+XG4gICAgICAgIDxpZnJhbWUgaWQ9XCJmaW5hbC1jdi1wcmV2aWV3XCJcbiAgICAgICAgICAgICAgICBzcmM9XCIke3NyY31cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiRmluYWwgQ1YgSFRNTCBQcmV2aWV3XCJcbiAgICAgICAgICAgICAgICBzYW5kYm94PVwiYWxsb3ctc2FtZS1vcmlnaW5cIlxuICAgICAgICAgICAgICAgIHJlZmVycmVycG9saWN5PVwibm8tcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOm5vbmU7XCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRmluYWwgZ2VuZXJhdGVkIENWIHByZXZpZXdcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBUYWIgcmVuZGVyZXIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKlxuICogUG9wdWxhdGUgdGhlIFwiR2VuZXJhdGVcIiAoZmluYWxfZ2VuZXJhdGUpIHRhYiBjb250ZW50LlxuICogU2hvd3MgZG93bmxvYWQgbGlua3MgZm9yIGFsbCBmaW5hbC1nZW5lcmF0ZWQgZmlsZXMgYW5kIGEgXCJQcm9jZWVkIHRvIEZpbmFsaXNlXCIgYnV0dG9uLlxuICogQHBhcmFtIHtPYmplY3R9IGN2RGF0YSAtIENWIGRhdGEgb2JqZWN0IGZyb20gc3RhdGVNYW5hZ2VyLmdldFRhYkRhdGEoJ2N2JylcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVGaW5hbEdlbmVyYXRlVGFiKGN2RGF0YSA9IHt9KSB7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICBpZiAoIWNvbnRlbnQpIHJldHVybjtcblxuICAvLyBDb2xsZWN0IGNhbmRpZGF0ZSBmaWxlcywgZGVkdXBsaWNhdGVcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKTtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtcbiAgICBjdkRhdGEuZmluYWxfaHRtbCxcbiAgICBjdkRhdGEuZmluYWxfcGRmLFxuICAgIGN2RGF0YS5odG1sLFxuICAgIGN2RGF0YS5wZGYsXG4gICAgY3ZEYXRhLmRvY3gsXG4gICAgY3ZEYXRhLmF0c19kb2N4LFxuICAgIGN2RGF0YS5odW1hbl9kb2N4LFxuICAgIC4uLihBcnJheS5pc0FycmF5KGN2RGF0YS5maWxlcykgPyBjdkRhdGEuZmlsZXMgOiBbXSksXG4gIF0uZmlsdGVyKEJvb2xlYW4pO1xuXG4gIGNvbnN0IGZpbGVzID0gW107XG4gIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgY2FuZGlkYXRlcykge1xuICAgIGlmIChzZWVuLmhhcyhmaWxlbmFtZSkpIGNvbnRpbnVlO1xuICAgIHNlZW4uYWRkKGZpbGVuYW1lKTtcbiAgICBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoJy50eHQnKSB8fCBmaWxlbmFtZSA9PT0gJ2pvYl9kZXNjcmlwdGlvbi50eHQnKSBjb250aW51ZTtcbiAgICBmaWxlcy5wdXNoKGZpbGVuYW1lKTtcbiAgfVxuXG4gIGNvbnN0IGh0bWxQcmV2aWV3RmlsZSA9IF9odG1sUHJldmlld0ZpbGUoZmlsZXMpO1xuXG4gIGxldCBodG1sID0gJzxoMT5cdUQ4M0RcdURDQzQgR2VuZXJhdGVkIEZpbGVzPC9oMT4nO1xuICBodG1sICs9ICc8cCBzdHlsZT1cImNvbG9yOiM0NzU1Njk7bWFyZ2luLWJvdHRvbTo4cHg7XCI+WW91ciBDViBmaWxlcyBhcmUgcmVhZHkgdG8gZG93bmxvYWQuIFByZXZpZXcgdGhlIEhUTUwgdmVyc2lvbiBiZWxvdywgdGhlbiBjbGljayA8c3Ryb25nPlByb2NlZWQgdG8gRG93bmxvYWQgUmV2aWV3PC9zdHJvbmc+IHRvIHJ1biBBVFMgdmFsaWRhdGlvbiBhbmQgYXJjaGl2ZSB5b3VyIGFwcGxpY2F0aW9uLjwvcD4nO1xuICBodG1sICs9ICc8cCBzdHlsZT1cImZvbnQtc2l6ZTowLjgzZW07Y29sb3I6Izk0YTNiODttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZzo4cHggMTJweDtiYWNrZ3JvdW5kOiNmOGZhZmM7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkICNlMmU4ZjA7XCI+XHVEODNEXHVEQ0ExIDxlbT5UaGlzIHRhYiBsZXRzIHlvdSBkb3dubG9hZCBmaWxlcyBpbW1lZGlhdGVseS4gVGhlIDxzdHJvbmc+RmlsZSBSZXZpZXc8L3N0cm9uZz4gc3ViLXRhYiBpbiBGaW5hbGlzZSBydW5zIEFUUyBjaGVja3MsIGNvbmZpcm1zIHRoZSBwYWNrYWdlIGlzIGNvbXBsZXRlLCBhbmQgbGV0cyB5b3UgYXJjaGl2ZSB0aGUgYXBwbGljYXRpb24uPC9lbT48L3A+JztcblxuICBpZiAoaHRtbFByZXZpZXdGaWxlKSB7XG4gICAgY29uc3Qgc2hvd0hpZGUgPSBfcHJldmlld09wZW4gPyAnSGlkZSBwcmV2aWV3JyA6ICdTaG93IHByZXZpZXcnO1xuICAgIGh0bWwgKz0gYDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjEycHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O1wiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJmaW5hbC1wcmV2aWV3LXRvZ2dsZS1idG5cIlxuICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07cGFkZGluZzo1cHggMTRweDtib3JkZXI6MXB4IHNvbGlkICMzYjgyZjY7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDoke19wcmV2aWV3T3BlbiA/ICcjZWZmNmZmJyA6ICcjZmZmJ307Y29sb3I6IzNiODJmNjtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7XCJcbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cIiR7X3ByZXZpZXdPcGVufVwiXG4gICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJmaW5hbC1wcmV2aWV3LXBhbmVcIj5cbiAgICAgICAgXHVEODNDXHVERjEwICR7c2hvd0hpZGV9XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuOGVtO2NvbG9yOiM5NGEzYjg7XCI+SW4tYnJvd3NlciBIVE1MIHByZXZpZXc8L3NwYW4+XG4gICAgPC9kaXY+YDtcbiAgICBodG1sICs9IF9yZW5kZXJQcmV2aWV3UGFuZShodG1sUHJldmlld0ZpbGUpO1xuICB9XG5cbiAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGh0bWwgKz0gJzxwIHN0eWxlPVwiY29sb3I6IzljYTNhZjtwYWRkaW5nOjE2cHg7XCI+Tm8gZmlsZXMgZ2VuZXJhdGVkIHlldC48L3A+JztcbiAgfSBlbHNlIHtcbiAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwiZGlzcGxheTpncmlkO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MjhweDtcIj4nO1xuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IGJhc2UgICA9IGZpbGVuYW1lLnNwbGl0KCcvJykucG9wKCk7XG4gICAgICBjb25zdCBpY29uICAgPSBfZmlsZUljb24oZmlsZW5hbWUpO1xuICAgICAgY29uc3QgbGFiZWwgID0gX2ZpbGVMYWJlbChmaWxlbmFtZSk7XG4gICAgICBjb25zdCBkZXNjICAgPSBfZmlsZURlc2NyaXB0aW9uKGZpbGVuYW1lKTtcbiAgICAgIGh0bWwgKz0gYFxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTRweDtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDojZjhmYWZjO2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNHB4IDE4cHg7XCI+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MS44ZW07XCI+JHtpY29ufTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDoxO21pbi13aWR0aDowO1wiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MC45NWVtO2NvbG9yOiMxZTI5M2I7XCI+JHtlc2NhcGVIdG1sKGxhYmVsKX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MC44M2VtO2NvbG9yOiM2NDc0OGI7bWFyZ2luLXRvcDoycHg7XCI+JHtlc2NhcGVIdG1sKGRlc2MpfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxhIGhyZWY9XCIvYXBpL2Rvd25sb2FkLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGJhc2UpfVwiXG4gICAgICAgICAgICAgZG93bmxvYWQ9XCIke2VzY2FwZUh0bWwoYmFzZSl9XCJcbiAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IzNiODJmNjtjb2xvcjojZmZmO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOjdweCAxNnB4O2JvcmRlci1yYWRpdXM6NnB4O1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6MC44OGVtO2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LWRlY29yYXRpb246bm9uZTtcbiAgICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6bm93cmFwO1wiPlxuICAgICAgICAgICAgXHUyQjA3XHVGRTBGIERvd25sb2FkXG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICBodG1sICs9ICc8L2Rpdj4nO1xuICB9XG5cbiAgaWYgKGN2RGF0YS5vdXRwdXRfZGlyKSB7XG4gICAgaHRtbCArPSBgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MjRweDtwYWRkaW5nOjEwcHggMTRweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDojZjFmNWY5O2JvcmRlci1yYWRpdXM6NnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6MTNweDtjb2xvcjojNjQ3NDhiO1wiPlxuICAgICAgPHN0cm9uZz5PdXRwdXQgZGlyZWN0b3J5Ojwvc3Ryb25nPiAke2VzY2FwZUh0bWwoY3ZEYXRhLm91dHB1dF9kaXIpfVxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBodG1sICs9IGBcbiAgICA8ZGl2IGNsYXNzPVwibmF2LWJ1dHRvbnMgbmF2LWVuZFwiIHN0eWxlPVwibWFyZ2luLXRvcDoyNHB4O1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRpbnVlLWJ0blwiIGlkPVwiZmluYWwtZ2VuZXJhdGUtY29udGludWUtYnRuXCJcbiAgICAgICAgICAgICAgb25jbGljaz1cImZpbmFsR2VuZXJhdGlvbkNvbXBsZXRlKClcIlxuICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToxZW07cGFkZGluZzoxMHB4IDI0cHg7XCI+XG4gICAgICAgIFx1MjcwNSBQcm9jZWVkIHRvIERvd25sb2FkIFJldmlldyBcdTIxOTJcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PmA7XG5cbiAgY29udGVudC5pbm5lckhUTUwgPSBodG1sO1xuXG4gIC8vIFdpcmUgdXAgcHJldmlldyB0b2dnbGVcbiAgaWYgKGh0bWxQcmV2aWV3RmlsZSkge1xuICAgIGNvbnN0IHRvZ2dsZUJ0biAgPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJyNmaW5hbC1wcmV2aWV3LXRvZ2dsZS1idG4nKTtcbiAgICBjb25zdCBjbG9zZUJ0biAgID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcjZmluYWwtcHJldmlldy1jbG9zZS1idG4nKTtcbiAgICBjb25zdCBwcmV2aWV3UGFuZSA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcignI2ZpbmFsLXByZXZpZXctcGFuZScpO1xuXG4gICAgY29uc3Qgc2V0UHJldmlld09wZW4gPSAob3BlbikgPT4ge1xuICAgICAgX3ByZXZpZXdPcGVuID0gb3BlbjtcbiAgICAgIGlmIChwcmV2aWV3UGFuZSkgcHJldmlld1BhbmUuc3R5bGUuZGlzcGxheSA9IG9wZW4gPyAnJyA6ICdub25lJztcbiAgICAgIGlmICh0b2dnbGVCdG4pIHtcbiAgICAgICAgdG9nZ2xlQnRuLnRleHRDb250ZW50ID0gb3BlbiA/ICdcdUQ4M0NcdURGMTAgSGlkZSBwcmV2aWV3JyA6ICdcdUQ4M0NcdURGMTAgU2hvdyBwcmV2aWV3JztcbiAgICAgICAgdG9nZ2xlQnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIFN0cmluZyhvcGVuKSk7XG4gICAgICAgIHRvZ2dsZUJ0bi5zdHlsZS5iYWNrZ3JvdW5kID0gb3BlbiA/ICcjZWZmNmZmJyA6ICcjZmZmJztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdG9nZ2xlQnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHNldFByZXZpZXdPcGVuKCFfcHJldmlld09wZW4pKTtcbiAgICBjbG9zZUJ0bj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAgKCkgPT4gc2V0UHJldmlld09wZW4oZmFsc2UpKTtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgUGhhc2UgdHJhbnNpdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBBZHZhbmNlIHdvcmtmbG93IGZyb20gZmluYWxfZ2VuZXJhdGlvbiBcdTIxOTIgcmVmaW5lbWVudC5cbiAqIENhbGxzIFBPU1QgL2FwaS9maW5hbC1nZW5lcmF0aW9uLWNvbXBsZXRlLCB1cGRhdGVzIGZyb250ZW5kIHBoYXNlLCBhbmRcbiAqIHN3aXRjaGVzIHRvIHRoZSBkb3dubG9hZCB0YWIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpbmFsR2VuZXJhdGlvbkNvbXBsZXRlKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGFwaUNhbGwoJ1BPU1QnLCAnL2FwaS9maW5hbC1nZW5lcmF0aW9uLWNvbXBsZXRlJywge30pO1xuICAgIGlmICghcmVzPy5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcz8uZXJyb3IgfHwgJ0ZhaWxlZCB0byBhZHZhbmNlIHRvIEZpbGUgUmV2aWV3IHN0ZXAuJyk7XG4gICAgfVxuICAgIHN0YXRlTWFuYWdlci5zZXRQaGFzZSgncmVmaW5lbWVudCcpO1xuICAgIHN3aXRjaFRhYignZG93bmxvYWQnKTtcbiAgICBhcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnXHUyNzA1IEZpbGVzIGdlbmVyYXRlZC4gWW91IGNhbiBub3cgZmluYWxpc2UgeW91ciBhcHBsaWNhdGlvbi4nKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKCdmaW5hbEdlbmVyYXRpb25Db21wbGV0ZSBlcnJvcjonLCBlcnIpO1xuICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsIGBcdTI3NEMgJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgeyBwb3B1bGF0ZUZpbmFsR2VuZXJhdGVUYWIsIGZpbmFsR2VuZXJhdGlvbkNvbXBsZXRlIH07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIFwiVXBkYXRlIHZpYSBBSVwiIHBhbmVsIChHQVAtMDEpOiBuYXR1cmFsLWxhbmd1YWdlIGluc3RydWN0aW9uIG9yXG4gKiBkb2N1bWVudC1pbmdlc3Rpb24gdXBkYXRlcyB0byBNYXN0ZXJfQ1ZfRGF0YS5qc29uLCBwcm9wb3NlZCBieSBhbiBMTE0sXG4gKiByZXZpZXdlZCBhcyBhIGRpZmYsIGFuZCB3cml0dGVuIG9ubHkgb24gZXhwbGljaXQgY29uZmlybWF0aW9uLlxuICpcbiAqIFJlbmRlcmVkIGluc2lkZSB0aGUgTWFzdGVyIENWIHRhYiAoc2VlIHdlYi9tYXN0ZXItY3YuanMpLCBjb2xsYXBzZWQgYnlcbiAqIGRlZmF1bHQuIFJldXNlcyB3ZWIvcHJvcG9zYWwtcmV2aWV3LmpzJ3Mgcm93IHJlbmRlcmVyIGZvciB0aGUgZGlmZiByZXZpZXdcbiAqIGxpc3QgcmF0aGVyIHRoYW4gZm9ya2luZyBhIHRoaXJkIGNvcHkgb2YgdGhhdCBVSSAoaGFydmVzdC5qcyBhbmRcbiAqIGxheW91dC1pbnN0cnVjdGlvbi5qcydzIHJlbmRlckNvbnRlbnRQcm9wb3NhbHMgYWxyZWFkeSBleGlzdCkuXG4gKlxuICogUHVibGljIGV4cG9ydHMgKGFzc2lnbmVkIHRvIHdpbmRvdyBieSB3ZWIvc3JjL21haW4uanMncyBidW5kbGUpOlxuICogICByZW5kZXJNYXN0ZXJEYXRhQWlVcGRhdGVQYW5lbCgpXG4gKiAgIHRvZ2dsZU1hc3RlckRhdGFBaVBhbmVsKClcbiAqICAgc2V0TWFzdGVyRGF0YUFpTW9kZShtb2RlKVxuICogICBoYW5kbGVNYXN0ZXJEYXRhQWlGaWxlVXBsb2FkKGV2ZW50KVxuICogICBzdWJtaXRNYXN0ZXJEYXRhQWlQcm9wb3NlKClcbiAqICAgZGlzY2FyZE1hc3RlckRhdGFBaVByb3Bvc2FsKClcbiAqICAgY29uZmlybU1hc3RlckRhdGFBaVVwZGF0ZSgpXG4gKlxuICogS2V5Ym9hcmQ6IEN0cmwvQ21kK0VudGVyIG9uIGVpdGhlciBpbnB1dCB0ZXh0YXJlYSBzdWJtaXRzIFwiUHJvcG9zZSBVcGRhdGVcIlxuICogKHdpcmVkIGxvY2FsbHkgdmlhIG9ua2V5ZG93biwgbm90IGtleWJvYXJkLXNob3J0Y3V0cy5qcydzIGdsb2JhbFxuICogX1RBQl9BQ1RJT05fQlROIG1hcCBcdTIwMTQgdGhlIE1hc3RlciBDViB0YWIgaGFzIHNldmVyYWwgaW5kZXBlbmRlbnQgZm9ybXMgd2l0aFxuICogbm8gc2luZ2xlIHByaW1hcnkgYWN0aW9uLCBzbyBjbGFpbWluZyB0aGlzIHBhbmVsIGFzICp0aGUqIHRhYi13aWRlXG4gKiBDdHJsK0VudGVyIHRhcmdldCB3b3VsZCBiZSBtaXNsZWFkaW5nL3JlZ3Jlc3MgdGhlIHRhYidzIG90aGVyIHNhdmVcbiAqIGFjdGlvbnM7IGEgbG9jYWwsIHNjb3BlZCBzaG9ydGN1dCBpcyB0aGUgY29ycmVjdCBmaXQgaGVyZSBpbnN0ZWFkKS5cbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlc2MsIHJlbmRlclByb3Bvc2FsUm93LCBhdHRhY2hQcm9wb3NhbFJvd0xpc3RlbmVycyB9IGZyb20gJy4vcHJvcG9zYWwtcmV2aWV3LmpzJztcblxuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdtYXN0ZXItZGF0YS1haS11cGRhdGUnKTtcblxuLy8gXHUyNTAwXHUyNTAwIFN0YXRlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuLy8gQ2xvc3VyZS1zY29wZWQsIGNvbnNpc3RlbnQgd2l0aCBob3cgaGFydmVzdC5qcyBtYW5hZ2VzIGl0cyBvd24gbG9jYWwgc3RhdGUgXHUyMDE0XG4vLyB0aGlzIHBhbmVsIGRvZXNuJ3QgbmVlZCB0byBwYXJ0aWNpcGF0ZSBpbiBzdGF0ZS1tYW5hZ2VyLmpzJ3MgZ2xvYmFscy5cblxubGV0IF9tZHVNb2RlID0gJ25sX2luc3RydWN0aW9uJzsgICAgICAgICAgIC8vICdubF9pbnN0cnVjdGlvbicgfCAnZG9jdW1lbnRfaW5nZXN0aW9uJ1xubGV0IF9tZHVQZW5kaW5nUHJvcG9zYWwgPSBudWxsOyAgICAgICAgICAgIC8vIHsgcHJvcG9zYWxJZCwgc291cmNlLCBjaGFuZ2VzIH1cbmxldCBfbWR1UHJpb3JDbGFyaWZpY2F0aW9ucyA9IFtdOyAgICAgICAgICAvLyBbe3F1ZXN0aW9uLCBhbnN3ZXJ9LCAuLi5dXG5cbmZ1bmN0aW9uIF9tZHVSZXNldFN0YXRlKCkge1xuICBfbWR1TW9kZSA9ICdubF9pbnN0cnVjdGlvbic7XG4gIF9tZHVQZW5kaW5nUHJvcG9zYWwgPSBudWxsO1xuICBfbWR1UHJpb3JDbGFyaWZpY2F0aW9ucyA9IFtdO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgUGFuZWwgc2hlbGwgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIHJlbmRlck1hc3RlckRhdGFBaVVwZGF0ZVBhbmVsKCkge1xuICAvLyBSZXNldCBtb2R1bGUgc3RhdGUgb24gZXZlcnkgZnJlc2ggcmVuZGVyIChub3QganVzdCBwYWdlIGxvYWQpIFx1MjAxNCB0aGUgRE9NXG4gIC8vIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbHdheXMgZGVwaWN0cyB0aGUgbmxfaW5zdHJ1Y3Rpb24vbm8tcHJvcG9zYWxcbiAgLy8gZGVmYXVsdCwgc28gYW55IGNhcnJpZWQtb3ZlciBzdGF0ZSBmcm9tIGEgcHJpb3IgcmVuZGVyIChlLmcuIHRoZSB1c2VyXG4gIC8vIHN3aXRjaGVkIHRhYnMgbWlkLXByb3Bvc2FsIGFuZCBwb3B1bGF0ZU1hc3RlclRhYigpIHJlLXJlbmRlcmVkIHRoaXNcbiAgLy8gcGFuZWwpIG11c3QgYmUgZGlzY2FyZGVkIHRvIGF2b2lkIHRoZSB0d28gZ29pbmcgb3V0IG9mIHN5bmMuXG4gIF9tZHVSZXNldFN0YXRlKCk7XG4gIHJldHVybiBgXG4gICAgPGRpdiBpZD1cIm1kdS1wYW5lbFwiIHN0eWxlPVwibWFyZ2luOjE2cHggMDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWN2LWJvcmRlcik7Ym9yZGVyLXJhZGl1czo4cHg7b3ZlcmZsb3c6aGlkZGVuO1wiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJtZHUtdG9nZ2xlLWJ0blwiIG9uY2xpY2s9XCJ0b2dnbGVNYXN0ZXJEYXRhQWlQYW5lbCgpXCJcbiAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cIm1kdS1wYW5lbC1ib2R5XCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO3RleHQtYWxpZ246bGVmdDtiYWNrZ3JvdW5kOnZhcigtLWN2LWJnLWxpZ2h0KTtib3JkZXI6bm9uZTtwYWRkaW5nOjEycHggMTZweDtmb250LXNpemU6MC45NWVtO2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1jdi10ZXh0LXByaW1hcnkpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtcIj5cbiAgICAgICAgPHNwYW4gaWQ9XCJtZHUtdG9nZ2xlLWljb25cIj5cdTI1Qjg8L3NwYW4+IFx1RDgzRVx1REQxNiBVcGRhdGUgdmlhIEFJXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgaWQ9XCJtZHUtcGFuZWwtYm9keVwiIHN0eWxlPVwiZGlzcGxheTpub25lO3BhZGRpbmc6MTZweDtcIj5cbiAgICAgICAgPHAgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOnZhcigtLWN2LXRleHQtc2Vjb25kYXJ5KTttYXJnaW46MCAwIDE0cHg7XCI+XG4gICAgICAgICAgUHJlZmVyIHBsYWluIEVuZ2xpc2gsIG9yIGhhdmUgYW4gb2xkIENWIG9yIExpbmtlZEluIGV4cG9ydD8gRGVzY3JpYmUgYSBjaGFuZ2Ugb3IgcGFzdGUvdXBsb2FkIGFcbiAgICAgICAgICBkb2N1bWVudCBhbmQgQUkgd2lsbCBkcmFmdCBpdCBmb3IgeW91IHRvIHJldmlldyBcdTIwMTQgbm90aGluZyBpcyBzYXZlZCB1bnRpbCB5b3UgY29uZmlybS5cbiAgICAgICAgPC9wPlxuXG4gICAgICAgIDxkaXYgcm9sZT1cInRhYmxpc3RcIiBhcmlhLWxhYmVsPVwiVXBkYXRlIG1ldGhvZFwiIHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDo2cHg7bWFyZ2luLWJvdHRvbToxMnB4O1wiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwibWR1LW1vZGUtbmxfaW5zdHJ1Y3Rpb24tYnRuXCIgcm9sZT1cInRhYlwiIGFyaWEtc2VsZWN0ZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgIG9uY2xpY2s9XCJzZXRNYXN0ZXJEYXRhQWlNb2RlKCdubF9pbnN0cnVjdGlvbicpXCJcbiAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzo2cHggMTRweDtmb250LXNpemU6MC44NWVtO2JvcmRlci1yYWRpdXM6NnB4IDZweCAwIDA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1jdi1ib3JkZXIpO2JvcmRlci1ib3R0b206bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWN2LXdoaXRlKTtjb2xvcjp2YXIoLS1jdi10ZXh0LXByaW1hcnkpO2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcjtcIj5cbiAgICAgICAgICAgIERlc2NyaWJlIGEgY2hhbmdlXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJtZHUtbW9kZS1kb2N1bWVudF9pbmdlc3Rpb24tYnRuXCIgcm9sZT1cInRhYlwiIGFyaWEtc2VsZWN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICBvbmNsaWNrPVwic2V0TWFzdGVyRGF0YUFpTW9kZSgnZG9jdW1lbnRfaW5nZXN0aW9uJylcIlxuICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOjZweCAxNHB4O2ZvbnQtc2l6ZTowLjg1ZW07Ym9yZGVyLXJhZGl1czo2cHggNnB4IDAgMDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWN2LWJvcmRlcik7Ym9yZGVyLWJvdHRvbTpub25lO2JhY2tncm91bmQ6dmFyKC0tY3YtYmctc3VidGxlKTtjb2xvcjp2YXIoLS1jdi10ZXh0LXNlY29uZGFyeSk7Y3Vyc29yOnBvaW50ZXI7XCI+XG4gICAgICAgICAgICBQYXN0ZSBvciB1cGxvYWQgYSBkb2N1bWVudFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGlkPVwibWR1LW5sX2luc3RydWN0aW9uLWlucHV0LWFyZWFcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwibWR1LW5sLXRleHRhcmVhXCIgc3R5bGU9XCJmb250LXNpemU6MC44MmVtO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS1jdi10ZXh0LW11dGVkKTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O1wiPlxuICAgICAgICAgICAgRGVzY3JpYmUgdGhlIGNoYW5nZVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPHRleHRhcmVhIGlkPVwibWR1LW5sLXRleHRhcmVhXCIgcm93cz1cIjNcIiBtYXhsZW5ndGg9XCI0MDAwXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiAmcXVvdDtJIGp1c3QgZmluaXNoZWQgYSBwcm9qZWN0IGF0IEFjbWUgdXNpbmcgS3ViZXJuZXRlcyBcdTIwMTQgYWRkIGl0IHRvIHRoYXQgcm9sZSdzIGFjaGlldmVtZW50cy4mcXVvdDtcIlxuICAgICAgICAgICAgb25rZXlkb3duPVwiaWYoKGV2ZW50LmN0cmxLZXl8fGV2ZW50Lm1ldGFLZXkpJiZldmVudC5rZXk9PT0nRW50ZXInKXtldmVudC5wcmV2ZW50RGVmYXVsdCgpO3N1Ym1pdE1hc3RlckRhdGFBaVByb3Bvc2UoKTt9XCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1jdi1ib3JkZXIpO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtc2l6ZTowLjg4ZW07cmVzaXplOnZlcnRpY2FsO1wiPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgaWQ9XCJtZHUtZG9jdW1lbnRfaW5nZXN0aW9uLWlucHV0LWFyZWFcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwibWR1LWRvYy10ZXh0YXJlYVwiIHN0eWxlPVwiZm9udC1zaXplOjAuODJlbTtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tY3YtdGV4dC1tdXRlZCk7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweDtcIj5cbiAgICAgICAgICAgIFBhc3RlIGRvY3VtZW50IHRleHQsIG9yIHVwbG9hZCBhIGZpbGVcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cIm1kdS1kb2MtdGV4dGFyZWFcIiByb3dzPVwiNFwiIG1heGxlbmd0aD1cIjYwMDAwXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGFzdGUgYW4gb2xkIENWIG9yIExpbmtlZEluIGV4cG9ydC4uLlwiXG4gICAgICAgICAgICBvbmtleWRvd249XCJpZigoZXZlbnQuY3RybEtleXx8ZXZlbnQubWV0YUtleSkmJmV2ZW50LmtleT09PSdFbnRlcicpe2V2ZW50LnByZXZlbnREZWZhdWx0KCk7c3VibWl0TWFzdGVyRGF0YUFpUHJvcG9zZSgpO31cIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWN2LWJvcmRlcik7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjAuODhlbTtyZXNpemU6dmVydGljYWw7bWFyZ2luLWJvdHRvbTo4cHg7XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cIm1kdS1kb2MtZmlsZS1pbnB1dFwiIGFjY2VwdD1cIi50eHQsLm1kLC5yc3QsLmh0bWwsLmh0bSwucGRmLC5kb2N4LC5ydGZcIlxuICAgICAgICAgICAgb25jaGFuZ2U9XCJoYW5kbGVNYXN0ZXJEYXRhQWlGaWxlVXBsb2FkKGV2ZW50KVwiIGFyaWEtZGVzY3JpYmVkYnk9XCJtZHUtdXBsb2FkLWRpc2Nsb3N1cmVcIlxuICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MC44MmVtO1wiPlxuICAgICAgICAgIDxwIGlkPVwibWR1LXVwbG9hZC1kaXNjbG9zdXJlXCIgc3R5bGU9XCJmb250LXNpemU6MC43OGVtO2NvbG9yOnZhcigtLWN2LXRleHQtc2Vjb25kYXJ5KTttYXJnaW46NnB4IDAgMDtcIj5cbiAgICAgICAgICAgIFRoaXMgZG9jdW1lbnQgd2lsbCBiZSBzZW50IHRvIHlvdXIgY29uZmlndXJlZCBBSSBwcm92aWRlciBcdTIwMTQgc2VlIHRoZSBkYXRhIGhhbmRsaW5nIGJhZGdlIGFib3ZlLlxuICAgICAgICAgICAgQW4gb2xkIENWIG9yIExpbmtlZEluIGV4cG9ydCBjYW4gY2FycnkgbW9yZSBwZXJzb25hbCBpbmZvcm1hdGlvbiB0aGFuIGEgam9iIGRlc2NyaXB0aW9uLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tdG9wOjEycHg7XCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJtZHUtcHJvcG9zZS1idG5cIiBvbmNsaWNrPVwic3VibWl0TWFzdGVyRGF0YUFpUHJvcG9zZSgpXCJcbiAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzo4cHggMThweDtmb250LXNpemU6MC44OGVtO2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnZhcigtLWN2LWFjY2VudCk7Y29sb3I6dmFyKC0tY3Ytd2hpdGUpO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NnB4O1wiPlxuICAgICAgICAgICAgUHJvcG9zZSBVcGRhdGVcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cIm1kdS1kaXNjYXJkLWJ0blwiIG9uY2xpY2s9XCJkaXNjYXJkTWFzdGVyRGF0YUFpUHJvcG9zYWwoKVwiIHN0eWxlPVwiZGlzcGxheTpub25lO3BhZGRpbmc6OHB4IDE0cHg7Zm9udC1zaXplOjAuODVlbTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnZhcigtLWN2LXdoaXRlKTtjb2xvcjp2YXIoLS1jdi10ZXh0LXNlY29uZGFyeSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1jdi1ib3JkZXIpO2JvcmRlci1yYWRpdXM6NnB4O1wiPlxuICAgICAgICAgICAgRGlzY2FyZFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGlkPVwibWR1LXN0YXR1c1wiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBzdHlsZT1cIm1hcmdpbi10b3A6MTBweDtmb250LXNpemU6MC44NWVtO2NvbG9yOnZhcigtLWN2LXRleHQtc2Vjb25kYXJ5KTtcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cIm1kdS1jbGFyaWZpY2F0aW9uLWNvbnRhaW5lclwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwibWR1LXJldmlldy1hcmVhXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjEycHg7XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJtZHUtcmVzdWx0XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjEycHg7XCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiByZW5kZXJNYXN0ZXJEYXRhQWlVcGRhdGVEaXNhYmxlZE5vdGUoKSB7XG4gIHJldHVybiBgXG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbjoxNnB4IDA7cGFkZGluZzoxMHB4IDE0cHg7YmFja2dyb3VuZDp2YXIoLS1jdi1iZy1zdWJ0bGUpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tY3YtYm9yZGVyKTtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MC44NWVtO2NvbG9yOnZhcigtLWN2LXRleHQtc2Vjb25kYXJ5KTtcIj5cbiAgICAgIFx1RDgzRVx1REQxNiBVcGRhdGUgdmlhIEFJIGlzIGF2YWlsYWJsZSBiZWZvcmUgYW5hbHlzaXMgc3RhcnRzIG9yIGR1cmluZyByZWZpbmVtZW50LlxuICAgIDwvZGl2PmA7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBQYW5lbCBleHBhbmQvY29sbGFwc2UgKyBtb2RlIHRvZ2dsZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gdG9nZ2xlTWFzdGVyRGF0YUFpUGFuZWwoKSB7XG4gIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LXBhbmVsLWJvZHknKTtcbiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS10b2dnbGUtYnRuJyk7XG4gIGNvbnN0IGljb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LXRvZ2dsZS1pY29uJyk7XG4gIGlmICghYm9keSB8fCAhYnRuKSByZXR1cm47XG4gIGNvbnN0IGV4cGFuZGVkID0gYm9keS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZSc7XG4gIGJvZHkuc3R5bGUuZGlzcGxheSA9IGV4cGFuZGVkID8gJ25vbmUnIDogJ2Jsb2NrJztcbiAgYnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIFN0cmluZyghZXhwYW5kZWQpKTtcbiAgaWYgKGljb24pIGljb24udGV4dENvbnRlbnQgPSBleHBhbmRlZCA/ICdcdTI1QjgnIDogJ1x1MjVCRSc7XG59XG5cbmZ1bmN0aW9uIHNldE1hc3RlckRhdGFBaU1vZGUobW9kZSkge1xuICBfbWR1TW9kZSA9IG1vZGU7XG4gIGZvciAoY29uc3QgbSBvZiBbJ25sX2luc3RydWN0aW9uJywgJ2RvY3VtZW50X2luZ2VzdGlvbiddKSB7XG4gICAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYG1kdS1tb2RlLSR7bX0tYnRuYCk7XG4gICAgY29uc3QgYXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBtZHUtJHttfS1pbnB1dC1hcmVhYCk7XG4gICAgY29uc3QgYWN0aXZlID0gbSA9PT0gbW9kZTtcbiAgICBpZiAoYnRuKSB7XG4gICAgICBidG4uc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgU3RyaW5nKGFjdGl2ZSkpO1xuICAgICAgYnRuLnN0eWxlLmJhY2tncm91bmQgPSBhY3RpdmUgPyAndmFyKC0tY3Ytd2hpdGUpJyA6ICd2YXIoLS1jdi1iZy1zdWJ0bGUpJztcbiAgICAgIGJ0bi5zdHlsZS5jb2xvciA9IGFjdGl2ZSA/ICd2YXIoLS1jdi10ZXh0LXByaW1hcnkpJyA6ICd2YXIoLS1jdi10ZXh0LXNlY29uZGFyeSknO1xuICAgICAgYnRuLnN0eWxlLmZvbnRXZWlnaHQgPSBhY3RpdmUgPyAnNjAwJyA6ICc0MDAnO1xuICAgIH1cbiAgICBpZiAoYXJlYSkgYXJlYS5zdHlsZS5kaXNwbGF5ID0gYWN0aXZlID8gJ2Jsb2NrJyA6ICdub25lJztcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgRG9jdW1lbnQgdXBsb2FkIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVNYXN0ZXJEYXRhQWlGaWxlVXBsb2FkKGV2ZW50KSB7XG4gIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXMgJiYgZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICBpZiAoIWZpbGUpIHJldHVybjtcbiAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LXN0YXR1cycpO1xuICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gYFJlYWRpbmcgJHtmaWxlLm5hbWV9XHUyMDI2YDtcbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBmZXRjaCgnL2FwaS91cGxvYWQtZmlsZScsIHsgbWV0aG9kOiAnUE9TVCcsIGJvZHk6IGZvcm1EYXRhIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwLmpzb24oKTtcbiAgICBpZiAoIXJlc3Aub2sgfHwgZGF0YS5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEubWVzc2FnZSB8fCBkYXRhLmVycm9yIHx8IGBTZXJ2ZXIgZXJyb3IgJHtyZXNwLnN0YXR1c31gKTtcbiAgICB9XG4gICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LWRvYy10ZXh0YXJlYScpO1xuICAgIGlmICh0ZXh0YXJlYSkgdGV4dGFyZWEudmFsdWUgPSBkYXRhLnRleHQ7XG4gICAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9IGBMb2FkZWQgJHtkYXRhLmNvbnRlbnRfbGVuZ3RoLnRvTG9jYWxlU3RyaW5nKCl9IGNoYXJhY3RlcnMgZnJvbSBcIiR7ZGF0YS5maWxlbmFtZX1cIi5gO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3IoJ2hhbmRsZU1hc3RlckRhdGFBaUZpbGVVcGxvYWQ6IGZhaWxlZCcsIGVycik7XG4gICAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9IGBFcnJvciByZWFkaW5nIGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgUHJvcG9zZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gX21kdUVuZHBvaW50Rm9yTW9kZShtb2RlKSB7XG4gIHJldHVybiBtb2RlID09PSAnbmxfaW5zdHJ1Y3Rpb24nID8gJy9hcGkvbWFzdGVyLWRhdGEvbmwtdXBkYXRlL3Byb3Bvc2UnIDogJy9hcGkvbWFzdGVyLWRhdGEvaW5nZXN0LWRvY3VtZW50L3Byb3Bvc2UnO1xufVxuXG5mdW5jdGlvbiBfbWR1SW5wdXRGb3JNb2RlKG1vZGUpIHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtb2RlID09PSAnbmxfaW5zdHJ1Y3Rpb24nID8gJ21kdS1ubC10ZXh0YXJlYScgOiAnbWR1LWRvYy10ZXh0YXJlYScpO1xuICByZXR1cm4gZWwgPyBlbC52YWx1ZS50cmltKCkgOiAnJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3VibWl0TWFzdGVyRGF0YUFpUHJvcG9zZSgpIHtcbiAgY29uc3QgaW5wdXQgPSBfbWR1SW5wdXRGb3JNb2RlKF9tZHVNb2RlKTtcbiAgY29uc3Qgc3RhdHVzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LXN0YXR1cycpO1xuICBjb25zdCByZXZpZXdBcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1yZXZpZXctYXJlYScpO1xuICBjb25zdCByZXN1bHRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtcmVzdWx0Jyk7XG4gIGNvbnN0IHByb3Bvc2VCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LXByb3Bvc2UtYnRuJyk7XG5cbiAgaWYgKCFpbnB1dCkge1xuICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSBfbWR1TW9kZSA9PT0gJ25sX2luc3RydWN0aW9uJ1xuICAgICAgPyAnUGxlYXNlIGRlc2NyaWJlIHRoZSBjaGFuZ2UgZmlyc3QuJ1xuICAgICAgOiAnUGxlYXNlIHBhc3RlIG9yIHVwbG9hZCBkb2N1bWVudCB0ZXh0IGZpcnN0Lic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHJldmlld0FyZWEpIHJldmlld0FyZWEuaW5uZXJIVE1MID0gJyc7XG4gIGlmIChyZXN1bHRFbCkgcmVzdWx0RWwuaW5uZXJIVE1MID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtY2xhcmlmaWNhdGlvbi1jb250YWluZXInKS5pbm5lckhUTUwgPSAnJztcbiAgaWYgKHByb3Bvc2VCdG4pIHsgcHJvcG9zZUJ0bi5kaXNhYmxlZCA9IHRydWU7IHByb3Bvc2VCdG4udGV4dENvbnRlbnQgPSAnQW5hbHl6aW5nXHUyMDI2JzsgfVxuICBpZiAoc3RhdHVzRWwpIHN0YXR1c0VsLnRleHRDb250ZW50ID0gJ0FuYWx5emluZ1x1MjAyNic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBib2R5ID0geyBwcmlvcl9jbGFyaWZpY2F0aW9uczogX21kdVByaW9yQ2xhcmlmaWNhdGlvbnMgfTtcbiAgICBib2R5W19tZHVNb2RlID09PSAnbmxfaW5zdHJ1Y3Rpb24nID8gJ2luc3RydWN0aW9uJyA6ICd0ZXh0J10gPSBpbnB1dDtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2goX21kdUVuZHBvaW50Rm9yTW9kZShfbWR1TW9kZSksIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcC5qc29uKCk7XG5cbiAgICBpZiAoIXJlc3Aub2sgfHwgZGF0YS5vayA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSBgRXJyb3I6ICR7ZXNjKGRhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKX1gO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhLnJlcXVpcmVzX2NsYXJpZmljYXRpb24pIHtcbiAgICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSAnJztcbiAgICAgIF9tZHVTaG93Q2xhcmlmaWNhdGlvbkRpYWxvZyhkYXRhLmNsYXJpZmljYXRpb25fcXVlc3Rpb24sIGlucHV0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBfbWR1UHJpb3JDbGFyaWZpY2F0aW9ucyA9IFtdO1xuICAgIGNvbnN0IGNoYW5nZXMgPSBkYXRhLmNoYW5nZXMgfHwgW107XG4gICAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICcnO1xuXG4gICAgaWYgKGNoYW5nZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAocmV2aWV3QXJlYSkgcmV2aWV3QXJlYS5pbm5lckhUTUwgPSBgPHAgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOnZhcigtLWN2LXRleHQtc2Vjb25kYXJ5KTtcIj5ObyBjaGFuZ2VzIGNvdWxkIGJlIHByb3Bvc2VkIGZyb20gdGhhdCBcdTIwMTQgdHJ5IGFkZGluZyBtb3JlIGRldGFpbC48L3A+YDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBfbWR1UGVuZGluZ1Byb3Bvc2FsID0geyBwcm9wb3NhbElkOiBkYXRhLnByb3Bvc2FsX2lkLCBzb3VyY2U6IF9tZHVNb2RlLCBjaGFuZ2VzIH07XG4gICAgX21kdVJlbmRlclJldmlld0FyZWEoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKCdzdWJtaXRNYXN0ZXJEYXRhQWlQcm9wb3NlOiBmYWlsZWQnLCBlcnIpO1xuICAgIGlmIChzdGF0dXNFbCkgc3RhdHVzRWwudGV4dENvbnRlbnQgPSBgTmV0d29yayBlcnJvcjogJHtlc2MoZXJyLm1lc3NhZ2UpfWA7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHByb3Bvc2VCdG4pIHsgcHJvcG9zZUJ0bi5kaXNhYmxlZCA9IGZhbHNlOyBwcm9wb3NlQnRuLnRleHRDb250ZW50ID0gJ1Byb3Bvc2UgVXBkYXRlJzsgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRpc2NhcmRNYXN0ZXJEYXRhQWlQcm9wb3NhbCgpIHtcbiAgX21kdVBlbmRpbmdQcm9wb3NhbCA9IG51bGw7XG4gIF9tZHVQcmlvckNsYXJpZmljYXRpb25zID0gW107XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtcmV2aWV3LWFyZWEnKS5pbm5lckhUTUwgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1yZXN1bHQnKS5pbm5lckhUTUwgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1kaXNjYXJkLWJ0bicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGNvbnN0IHN0YXR1c0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1zdGF0dXMnKTtcbiAgaWYgKHN0YXR1c0VsKSBzdGF0dXNFbC50ZXh0Q29udGVudCA9ICdEaXNjYXJkZWQuJztcbn1cblxuLy8gXHUyNTAwXHUyNTAwIENsYXJpZmljYXRpb24gZGlhbG9nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuLy8gTW9kZWxlZCBvbiBzaG93Q2xhcmlmaWNhdGlvbkRpYWxvZygpIGluIHdlYi9sYXlvdXQtaW5zdHJ1Y3Rpb24uanMsIG5vdCBhXG4vLyBsaXRlcmFsIGNvcHktcGFzdGUgcG9ydDogdGhhdCB2ZXJzaW9uIGhhcmQtY29kZXMgaXRzIG1vdW50IHBvaW50IGFuZCB1c2VzXG4vLyBub24tbmFtZXNwYWNlZCBlbGVtZW50IGlkcyAobGF5b3V0LWNsYXJpZmljYXRpb24tKiksIHdoaWNoIHdvdWxkIGNvbGxpZGVcbi8vIHdpdGggdGhpcyBwYW5lbCdzIG93biBpZHMgaWYgYm90aCB0YWJzIGFyZSBwcmVzZW50IGluIHRoZSBET00gYXQgb25jZVxuLy8gKENTUy1oaWRkZW4gdGFicyBhcmVuJ3QgdW5tb3VudGVkKS4gVGhpcyB2ZXJzaW9uIG1vdW50cyBpbnRvIHRoZSBwYW5lbCdzXG4vLyBvd24gI21kdS1jbGFyaWZpY2F0aW9uLWNvbnRhaW5lciBhbmQgdXNlcyBhbiBtZHUtKiBpZCBuYW1lc3BhY2UgdGhyb3VnaG91dC5cblxuZnVuY3Rpb24gX21kdVNob3dDbGFyaWZpY2F0aW9uRGlhbG9nKHF1ZXN0aW9uLCBvcmlnaW5hbEluc3RydWN0aW9uKSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtY2xhcmlmaWNhdGlvbi1jb250YWluZXInKTtcbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICBsb2cud2FybignX21kdVNob3dDbGFyaWZpY2F0aW9uRGlhbG9nOiAjbWR1LWNsYXJpZmljYXRpb24tY29udGFpbmVyIG5vdCBmb3VuZCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmF0aW5nQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1wcm9wb3NlLWJ0bicpO1xuXG4gIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHBhbmVsLmlkID0gJ21kdS1jbGFyaWZpY2F0aW9uLXBhbmVsJztcbiAgcGFuZWwuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2FsZXJ0Jyk7XG4gIHBhbmVsLnN0eWxlLmNzc1RleHQgPSAnYmFja2dyb3VuZDp2YXIoLS1jdi13YXJuLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWN2LXdhcm4tbGlnaHQpO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTRweDttYXJnaW4tdG9wOjEwcHg7JztcbiAgcGFuZWwuaW5uZXJIVE1MID0gYFxuICAgIDxwIHN0eWxlPVwibWFyZ2luOjAgMCA2cHg7Zm9udC1zaXplOjAuODVlbTtjb2xvcjp2YXIoLS1jdi13YXJuLXRleHQpO2ZvbnQtd2VpZ2h0OjYwMDtcIj5cbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlx1Mjc1Mzwvc3Bhbj4gQWxtb3N0IHRoZXJlIFx1MjAxNCBhIGJpdCBtb3JlIGRldGFpbCB3b3VsZCBoZWxwOlxuICAgIDwvcD5cbiAgICA8cCBzdHlsZT1cIm1hcmdpbjowIDAgMTBweDtmb250LXNpemU6MC44OGVtO2NvbG9yOnZhcigtLWN2LXdhcm4tdGV4dCk7XCI+JHtlc2MocXVlc3Rpb24pfTwvcD5cbiAgICA8bGFiZWwgZm9yPVwibWR1LWNsYXJpZmljYXRpb24taW5wdXRcIiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWN2LXRleHQtbXV0ZWQpO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7XCI+XG4gICAgICBZb3VyIGNsYXJpZmljYXRpb246XG4gICAgPC9sYWJlbD5cbiAgICA8dGV4dGFyZWEgaWQ9XCJtZHUtY2xhcmlmaWNhdGlvbi1pbnB1dFwiIHJvd3M9XCIyXCJcbiAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1jdi13YXJuLWxpZ2h0KTtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC44OGVtO3Jlc2l6ZTp2ZXJ0aWNhbDtcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsYXJpZmljYXRpb24gZm9yIG1hc3RlciBkYXRhIHVwZGF0ZVwiPiR7ZXNjKG9yaWdpbmFsSW5zdHJ1Y3Rpb24pfTwvdGV4dGFyZWE+XG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi10b3A6OHB4O1wiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJtZHUtY2xhcmlmaWNhdGlvbi1zdWJtaXRcIlxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6dmFyKC0tY3Ytd2Fybik7Y29sb3I6dmFyKC0tY3Ytd2hpdGUpO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6NnB4IDE0cHg7Zm9udC1zaXplOjAuODVlbTtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7XCI+XG4gICAgICAgIFN1Ym1pdCBjbGFyaWZpY2F0aW9uXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwibWR1LWNsYXJpZmljYXRpb24tY2FuY2VsXCJcbiAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1jdi13YXJuKTtjb2xvcjp2YXIoLS1jdi13YXJuLXRleHQpO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6NnB4IDE0cHg7Zm9udC1zaXplOjAuODVlbTtjdXJzb3I6cG9pbnRlcjtcIj5cbiAgICAgICAgQ2FuY2VsXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5gO1xuXG4gIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcbiAgY29udGFpbmVyLmFwcGVuZENoaWxkKHBhbmVsKTtcblxuICBjb25zdCBjbGFySW5wdXQgPSBwYW5lbC5xdWVyeVNlbGVjdG9yKCcjbWR1LWNsYXJpZmljYXRpb24taW5wdXQnKTtcbiAgY29uc3Qgc3VibWl0QnRuID0gcGFuZWwucXVlcnlTZWxlY3RvcignI21kdS1jbGFyaWZpY2F0aW9uLXN1Ym1pdCcpO1xuICBjb25zdCBjYW5jZWxCdG4gPSBwYW5lbC5xdWVyeVNlbGVjdG9yKCcjbWR1LWNsYXJpZmljYXRpb24tY2FuY2VsJyk7XG5cbiAgY2xhcklucHV0LmZvY3VzKCk7XG4gIGNsYXJJbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShjbGFySW5wdXQudmFsdWUubGVuZ3RoLCBjbGFySW5wdXQudmFsdWUubGVuZ3RoKTtcblxuICBjb25zdCBjbG9zZUFuZFJlc3RvcmVGb2N1cyA9ICgpID0+IHtcbiAgICBwYW5lbC5yZW1vdmUoKTtcbiAgICBpZiAob3JpZ2luYXRpbmdCdG4pIG9yaWdpbmF0aW5nQnRuLmZvY3VzKCk7XG4gIH07XG5cbiAgc3VibWl0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGNvbnN0IHJlZmluZWQgPSBjbGFySW5wdXQudmFsdWUudHJpbSgpO1xuICAgIGlmIChyZWZpbmVkKSB7XG4gICAgICBfbWR1UHJpb3JDbGFyaWZpY2F0aW9ucyA9IFsuLi5fbWR1UHJpb3JDbGFyaWZpY2F0aW9ucywgeyBxdWVzdGlvbiwgYW5zd2VyOiByZWZpbmVkIH1dO1xuICAgICAgY29uc3QgaW5wdXRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKF9tZHVNb2RlID09PSAnbmxfaW5zdHJ1Y3Rpb24nID8gJ21kdS1ubC10ZXh0YXJlYScgOiAnbWR1LWRvYy10ZXh0YXJlYScpO1xuICAgICAgaWYgKGlucHV0RWwpIGlucHV0RWwudmFsdWUgPSByZWZpbmVkO1xuICAgIH1cbiAgICBjbG9zZUFuZFJlc3RvcmVGb2N1cygpO1xuICAgIGlmIChyZWZpbmVkKSBzdWJtaXRNYXN0ZXJEYXRhQWlQcm9wb3NlKCk7XG4gIH0pO1xuICBjYW5jZWxCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZUFuZFJlc3RvcmVGb2N1cyk7XG4gIGNsYXJJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBzdWJtaXRCdG4uY2xpY2soKTsgfVxuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGNhbmNlbEJ0bi5jbGljaygpO1xuICB9KTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFJldmlldyBhcmVhIChwcm9wb3NhbCByb3dzKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gX21kdUNoYW5nZURpc3BsYXlUZXh0KGNoYW5nZSkge1xuICBjb25zdCBwcm9wb3NlZCA9IGNoYW5nZS5wcm9wb3NlZDtcbiAgaWYgKHR5cGVvZiBwcm9wb3NlZCA9PT0gJ3N0cmluZycpIHJldHVybiBwcm9wb3NlZDtcbiAgaWYgKHByb3Bvc2VkICYmIHR5cGVvZiBwcm9wb3NlZCA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoJ3RleHQnIGluIHByb3Bvc2VkKSByZXR1cm4gcHJvcG9zZWQudGV4dDtcbiAgICBpZiAoJ25hbWUnIGluIHByb3Bvc2VkKSByZXR1cm4gcHJvcG9zZWQubmFtZTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocHJvcG9zZWQpO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gX21kdUZsYWdIdG1sKGNoYW5nZSkge1xuICBpZiAoY2hhbmdlLnBvc3NpYmxlX2R1cGxpY2F0ZV9vZikge1xuICAgIHJldHVybiBgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206NnB4O3BhZGRpbmc6NnB4IDhweDtiYWNrZ3JvdW5kOnZhcigtLWN2LXdhcm4tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tY3Ytd2Fybi1ib3JkZXIpO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtc2l6ZTowLjhlbTtjb2xvcjp2YXIoLS1jdi13YXJuLXRleHQpO1wiPlxuICAgICAgXHUyNkEwIHBvc3NpYmxlIGR1cGxpY2F0ZSBvZiAke2VzYyhjaGFuZ2UucG9zc2libGVfZHVwbGljYXRlX29mKX1cbiAgICA8L2Rpdj5gO1xuICB9XG4gIGlmIChjaGFuZ2UucGVyc3Vhc2lvbl9mbGFncyAmJiBjaGFuZ2UucGVyc3Vhc2lvbl9mbGFncy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjZweDtwYWRkaW5nOjZweCA4cHg7YmFja2dyb3VuZDp2YXIoLS1jdi13YXJuLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWN2LXdhcm4tYm9yZGVyKTtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MC44ZW07Y29sb3I6dmFyKC0tY3Ytd2Fybi10ZXh0KTtcIj5cbiAgICAgIFx1MjZBMCBxdWFsaXR5IGFkdmlzb3J5OiAke2VzYyhjaGFuZ2UucGVyc3Vhc2lvbl9mbGFncy5qb2luKCcsICcpKX1cbiAgICA8L2Rpdj5gO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gX21kdUFyaWFTdWZmaXgoY2hhbmdlKSB7XG4gIGNvbnN0IHBhcnRzID0gW107XG4gIGlmIChjaGFuZ2UucG9zc2libGVfZHVwbGljYXRlX29mKSBwYXJ0cy5wdXNoKGBwb3NzaWJsZSBkdXBsaWNhdGUgb2YgJHtjaGFuZ2UucG9zc2libGVfZHVwbGljYXRlX29mfWApO1xuICBpZiAoY2hhbmdlLnBlcnN1YXNpb25fZmxhZ3MgJiYgY2hhbmdlLnBlcnN1YXNpb25fZmxhZ3MubGVuZ3RoKSBwYXJ0cy5wdXNoKGBxdWFsaXR5IGFkdmlzb3J5OiAke2NoYW5nZS5wZXJzdWFzaW9uX2ZsYWdzLmpvaW4oJywgJyl9YCk7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPyBgLCAke3BhcnRzLmpvaW4oJywgJyl9YCA6ICcnO1xufVxuXG5mdW5jdGlvbiBfbWR1UmVuZGVyUmV2aWV3QXJlYSgpIHtcbiAgY29uc3QgcmV2aWV3QXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtcmV2aWV3LWFyZWEnKTtcbiAgY29uc3QgZGlzY2FyZEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtZGlzY2FyZC1idG4nKTtcbiAgaWYgKCFyZXZpZXdBcmVhIHx8ICFfbWR1UGVuZGluZ1Byb3Bvc2FsKSByZXR1cm47XG5cbiAgY29uc3QgY2hhbmdlcyA9IF9tZHVQZW5kaW5nUHJvcG9zYWwuY2hhbmdlcztcbiAgY29uc3Qgcm93c0h0bWwgPSBjaGFuZ2VzLm1hcCgoYykgPT4gcmVuZGVyUHJvcG9zYWxSb3coe1xuICAgIGlkOiBjLmlkLFxuICAgIHR5cGVMYWJlbDogYy5zZWN0aW9uLFxuICAgIGxhYmVsOiBjLmxhYmVsLFxuICAgIHByb3Bvc2VkOiBfbWR1Q2hhbmdlRGlzcGxheVRleHQoYyksXG4gICAgZGV0YWlsVGV4dDogYy5yYXRpb25hbGUsXG4gICAgZmxhZ0h0bWw6IF9tZHVGbGFnSHRtbChjKSxcbiAgICBjaGVja2VkOiBmYWxzZSxcbiAgfSwge1xuICAgIGlkUHJlZml4OiAnbWR1JyxcbiAgICBjaGVja2JveERhdGFBdHRyOiAnbWR1LWlkJyxcbiAgICBhcmlhTGFiZWxTdWZmaXg6IF9tZHVBcmlhU3VmZml4KGMpLFxuICB9KSkuam9pbignJyk7XG5cbiAgY29uc3QgZmxhZ2dlZENvdW50ID0gY2hhbmdlcy5maWx0ZXIoYyA9PiBjLnBvc3NpYmxlX2R1cGxpY2F0ZV9vZiB8fCAoYy5wZXJzdWFzaW9uX2ZsYWdzICYmIGMucGVyc3Vhc2lvbl9mbGFncy5sZW5ndGgpKS5sZW5ndGg7XG5cbiAgcmV2aWV3QXJlYS5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiUHJvcG9zZWQgY2hhbmdlcywgJHtjaGFuZ2VzLmxlbmd0aH0gaXRlbXMsIDAgc2VsZWN0ZWRcIiBpZD1cIm1kdS1yb3ctZ3JvdXBcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206OHB4O1wiPlxuICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6dmFyKC0tY3YtdGV4dC1zZWNvbmRhcnkpO1wiPiR7Y2hhbmdlcy5sZW5ndGh9IHByb3Bvc2VkIGNoYW5nZSR7Y2hhbmdlcy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ308L3NwYW4+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJzZWxlY3RNYXN0ZXJEYXRhQWlOb25GbGFnZ2VkKClcIiBzdHlsZT1cImZvbnQtc2l6ZTowLjhlbTtwYWRkaW5nOjRweCAxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tY3YtYm9yZGVyKTtib3JkZXItcmFkaXVzOjRweDtiYWNrZ3JvdW5kOnZhcigtLWN2LXdoaXRlKTtjb2xvcjp2YXIoLS1jdi10ZXh0LXByaW1hcnkpO2N1cnNvcjpwb2ludGVyO1wiPlxuICAgICAgICAgIFNlbGVjdCBhbGwgbm9uLWZsYWdnZWRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx0YWJsZSBzdHlsZT1cIndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO1wiPiR7cm93c0h0bWx9PC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGlkPVwibWR1LXNlbGVjdGlvbi1saXZlXCIgYXJpYS1saXZlPVwicG9saXRlXCIgY2xhc3M9XCJzci1vbmx5XCIgc3R5bGU9XCJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjFweDtvdmVyZmxvdzpoaWRkZW47XCI+PC9kaXY+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJtZHUtY29uZmlybS1idG5cIiBvbmNsaWNrPVwiY29uZmlybU1hc3RlckRhdGFBaVVwZGF0ZSgpXCIgZGlzYWJsZWRcbiAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDoxMHB4O3BhZGRpbmc6OXB4IDIwcHg7Zm9udC1zaXplOjAuOWVtO2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZDp2YXIoLS1jdi1zbGF0ZS0zMDApO2NvbG9yOnZhcigtLWN2LXdoaXRlKTtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjZweDtcIj5cbiAgICAgIENvbmZpcm0gYW5kIFdyaXRlXG4gICAgPC9idXR0b24+XG4gICAgJHtmbGFnZ2VkQ291bnQgPyBgPHAgc3R5bGU9XCJmb250LXNpemU6MC43OGVtO2NvbG9yOnZhcigtLWN2LXdhcm4tdGV4dCk7bWFyZ2luLXRvcDo2cHg7XCI+JHtmbGFnZ2VkQ291bnR9IGl0ZW0ke2ZsYWdnZWRDb3VudCA9PT0gMSA/ICcnIDogJ3MnfSBmbGFnZ2VkIGZvciByZXZpZXcgYWJvdmUuPC9wPmAgOiAnJ31gO1xuXG4gIGlmIChkaXNjYXJkQnRuKSBkaXNjYXJkQnRuLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcblxuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LXJldmlldy1hcmVhJyk7XG4gIGF0dGFjaFByb3Bvc2FsUm93TGlzdGVuZXJzKGNvbnRhaW5lciwgJ21kdScpO1xuICBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbZGF0YS1tZHUtaWRdJykuZm9yRWFjaCgoY2IpID0+IHtcbiAgICBjYi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBfbWR1VXBkYXRlQ29uZmlybUJ1dHRvblN0YXRlKTtcbiAgfSk7XG4gIF9tZHVVcGRhdGVDb25maXJtQnV0dG9uU3RhdGUoKTtcbn1cblxuZnVuY3Rpb24gX21kdVVwZGF0ZUNvbmZpcm1CdXR0b25TdGF0ZSgpIHtcbiAgY29uc3QgY2hlY2tlZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtbWR1LWlkXTpjaGVja2VkJyk7XG4gIGNvbnN0IGNvbmZpcm1CdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LWNvbmZpcm0tYnRuJyk7XG4gIGNvbnN0IGdyb3VwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1yb3ctZ3JvdXAnKTtcbiAgY29uc3QgbGl2ZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1zZWxlY3Rpb24tbGl2ZScpO1xuICBjb25zdCB0b3RhbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtbWR1LWlkXScpLmxlbmd0aDtcbiAgaWYgKGNvbmZpcm1CdG4pIHtcbiAgICBjb25maXJtQnRuLmRpc2FibGVkID0gY2hlY2tlZC5sZW5ndGggPT09IDA7XG4gICAgY29uZmlybUJ0bi5zdHlsZS5jdXJzb3IgPSBjaGVja2VkLmxlbmd0aCA9PT0gMCA/ICdub3QtYWxsb3dlZCcgOiAncG9pbnRlcic7XG4gICAgY29uZmlybUJ0bi5zdHlsZS5iYWNrZ3JvdW5kID0gY2hlY2tlZC5sZW5ndGggPT09IDAgPyAndmFyKC0tY3Ytc2xhdGUtMzAwKScgOiAndmFyKC0tY3Ytc3VjY2Vzcy1tZCknO1xuICB9XG4gIGlmIChncm91cCkgZ3JvdXAuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgYFByb3Bvc2VkIGNoYW5nZXMsICR7dG90YWx9IGl0ZW1zLCAke2NoZWNrZWQubGVuZ3RofSBzZWxlY3RlZGApO1xuICBpZiAobGl2ZUVsKSBsaXZlRWwudGV4dENvbnRlbnQgPSBgJHtjaGVja2VkLmxlbmd0aH0gb2YgJHt0b3RhbH0gc2VsZWN0ZWRgO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RNYXN0ZXJEYXRhQWlOb25GbGFnZ2VkKCkge1xuICBpZiAoIV9tZHVQZW5kaW5nUHJvcG9zYWwpIHJldHVybjtcbiAgY29uc3QgZmxhZ2dlZElkcyA9IG5ldyBTZXQoXG4gICAgX21kdVBlbmRpbmdQcm9wb3NhbC5jaGFuZ2VzXG4gICAgICAuZmlsdGVyKGMgPT4gYy5wb3NzaWJsZV9kdXBsaWNhdGVfb2YgfHwgKGMucGVyc3Vhc2lvbl9mbGFncyAmJiBjLnBlcnN1YXNpb25fZmxhZ3MubGVuZ3RoKSlcbiAgICAgIC5tYXAoYyA9PiBjLmlkKSxcbiAgKTtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbZGF0YS1tZHUtaWRdJykuZm9yRWFjaCgoY2IpID0+IHtcbiAgICBpZiAoIWZsYWdnZWRJZHMuaGFzKGNiLmRhdGFzZXQubWR1SWQpKSBjYi5jaGVja2VkID0gdHJ1ZTtcbiAgfSk7XG4gIF9tZHVVcGRhdGVDb25maXJtQnV0dG9uU3RhdGUoKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIENvbmZpcm0gYW5kIHdyaXRlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBjb25maXJtTWFzdGVyRGF0YUFpVXBkYXRlKCkge1xuICBpZiAoIV9tZHVQZW5kaW5nUHJvcG9zYWwpIHJldHVybjtcbiAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtbWR1LWlkXTpjaGVja2VkJykpLm1hcChjYiA9PiBjYi5kYXRhc2V0Lm1kdUlkKTtcbiAgaWYgKHNlbGVjdGVkSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIGNvbnN0IHNvdXJjZUxhYmVsID0gX21kdVBlbmRpbmdQcm9wb3NhbC5zb3VyY2UgPT09ICdubF9pbnN0cnVjdGlvbicgPyAneW91ciBpbnN0cnVjdGlvbicgOiAndGhlIHVwbG9hZGVkIGRvY3VtZW50JztcbiAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgKHR5cGVvZiBzaG93Q29uZmlybU1vZGFsID09PSAnZnVuY3Rpb24nXG4gICAgPyBzaG93Q29uZmlybU1vZGFsKFxuICAgICAgICBgV3JpdGUgJHtzZWxlY3RlZElkcy5sZW5ndGh9IGNoYW5nZSR7c2VsZWN0ZWRJZHMubGVuZ3RoID09PSAxID8gJycgOiAncyd9IHRvIE1hc3RlciBDVj9gLFxuICAgICAgICBgVGhlc2UgJHtzZWxlY3RlZElkcy5sZW5ndGh9IGNoYW5nZSR7c2VsZWN0ZWRJZHMubGVuZ3RoID09PSAxID8gJycgOiAncyd9IHdlcmUgcHJvcG9zZWQgYnkgQUkgZnJvbSAke3NvdXJjZUxhYmVsfSBhbmQgaGF2ZSBub3QgYmVlbiBwcmV2aW91c2x5IHJldmlld2VkLiBgICtcbiAgICAgICAgYENvbmZpcm1pbmcgd2lsbCBwZXJtYW5lbnRseSB3cml0ZSB0aGVtIHRvIE1hc3Rlcl9DVl9EYXRhLmpzb24uIEEgYmFja3VwIHdpbGwgYmUgY3JlYXRlZCBmaXJzdCBcdTIwMTQgc2VlIFx1RDgzRFx1REQ1MCBCYWNrdXBzIGFib3ZlIHRvIHJlc3RvcmUgaXQgaWYgbmVlZGVkLmAsXG4gICAgICApXG4gICAgOiBQcm9taXNlLnJlc29sdmUod2luZG93LmNvbmZpcm0oYFdyaXRlICR7c2VsZWN0ZWRJZHMubGVuZ3RofSBjaGFuZ2UocykgdG8gTWFzdGVyIENWPyBUaGlzIHdpbGwgcGVybWFuZW50bHkgd3JpdGUgY2hhbmdlcyB0byBNYXN0ZXJfQ1ZfRGF0YS5qc29uLmApKSk7XG5cbiAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcblxuICBjb25zdCBjb25maXJtQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1jb25maXJtLWJ0bicpO1xuICBjb25zdCByZXN1bHRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZHUtcmVzdWx0Jyk7XG4gIGlmIChjb25maXJtQnRuKSB7IGNvbmZpcm1CdG4uZGlzYWJsZWQgPSB0cnVlOyBjb25maXJtQnRuLnRleHRDb250ZW50ID0gJ1dyaXRpbmdcdTIwMjYnOyB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvY29uZmlybS11cGRhdGUnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBwcm9wb3NhbF9pZDogX21kdVBlbmRpbmdQcm9wb3NhbC5wcm9wb3NhbElkLCBzZWxlY3RlZF9pZHM6IHNlbGVjdGVkSWRzIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwLmpzb24oKTtcblxuICAgIGlmIChkYXRhLm9rID09PSBmYWxzZSAmJiBkYXRhLnN0YWxlX2NoYW5nZXMpIHtcbiAgICAgIF9tZHVIYW5kbGVTdGFsZUNoYW5nZXMoZGF0YS5zdGFsZV9jaGFuZ2VzLCBkYXRhLmFwcGxpY2FibGVfY2hhbmdlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZGF0YS5vaykge1xuICAgICAgaWYgKHJlc3VsdEVsKSByZXN1bHRFbC5pbm5lckhUTUwgPSBgPHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+Q29uZmlybSBmYWlsZWQ6ICR7ZXNjKGRhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKX08L3A+YDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaGFuZ2VzQnlJZCA9IE9iamVjdC5mcm9tRW50cmllcyhfbWR1UGVuZGluZ1Byb3Bvc2FsLmNoYW5nZXMubWFwKGMgPT4gW2MuaWQsIGNdKSk7XG4gICAgY29uc3Qgd3JpdHRlbkxpbmVzID0gKGRhdGEuZGlmZl9zdW1tYXJ5IHx8IFtdKVxuICAgICAgLmZpbHRlcihkID0+IGQuYXBwbGllZClcbiAgICAgIC5tYXAoZCA9PiBgPGxpPiR7ZXNjKGQubGFiZWwgfHwgZC5pZCl9JHtjaGFuZ2VzQnlJZFtkLmlkXT8ucmF0aW9uYWxlID8gYCBcdTIwMTQgJHtlc2MoY2hhbmdlc0J5SWRbZC5pZF0ucmF0aW9uYWxlKX1gIDogJyd9PC9saT5gKVxuICAgICAgLmpvaW4oJycpO1xuXG4gICAgY29uc3QgY29tbWl0SW5mbyA9IGRhdGEuY29tbWl0X2hhc2ggPyBgIChjb21taXQgJHtlc2MoZGF0YS5jb21taXRfaGFzaCl9KWAgOiAnJztcbiAgICBjb25zdCBnaXRXYXJuaW5nID0gZGF0YS5naXRfZXJyb3JcbiAgICAgID8gYDxwIHN0eWxlPVwiY29sb3I6dmFyKC0tY3Ytd2Fybi10ZXh0KTtmb250LXNpemU6MC44N2VtO1wiPlx1MjZBMFx1RkUwRiBHaXQgY29tbWl0IHNraXBwZWQ6ICR7ZXNjKGRhdGEuZ2l0X2Vycm9yPy5tZXNzYWdlIHx8IGRhdGEuZ2l0X2Vycm9yKX08L3A+YFxuICAgICAgOiAnJztcbiAgICBjb25zdCBwdXNoV2FybmluZyA9IGRhdGEucHVzaF9lcnJvclxuICAgICAgPyBgPHAgc3R5bGU9XCJjb2xvcjp2YXIoLS1jdi13YXJuLXRleHQpO2ZvbnQtc2l6ZTowLjg3ZW07XCI+XHUyNkEwXHVGRTBGIEdpdCBwdXNoIHNraXBwZWQ6ICR7ZXNjKGRhdGEucHVzaF9lcnJvcil9PC9wPmBcbiAgICAgIDogJyc7XG5cbiAgICBpZiAocmVzdWx0RWwpIHtcbiAgICAgIHJlc3VsdEVsLmlubmVySFRNTCA9IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6dmFyKC0tY3Ytc3VjY2Vzcy1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1jdi1zdWNjZXNzLWJvcmRlcik7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMnB4IDE2cHg7XCI+XG4gICAgICAgICAgPHAgc3R5bGU9XCJjb2xvcjp2YXIoLS1jdi1zdWNjZXNzLXRleHQpO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW46MCAwIDZweDtcIj5cbiAgICAgICAgICAgIFx1MjcwNSAke2RhdGEud3JpdHRlbl9jb3VudH0gaXRlbSR7ZGF0YS53cml0dGVuX2NvdW50ID09PSAxID8gJycgOiAncyd9IHdyaXR0ZW4gdG8gbWFzdGVyIENWJHtjb21taXRJbmZvfS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgJHt3cml0dGVuTGluZXMgPyBgPHVsIHN0eWxlPVwiZm9udC1zaXplOjAuODJlbTtjb2xvcjp2YXIoLS1jdi10ZXh0LW11dGVkKTttYXJnaW46NHB4IDAgMDtwYWRkaW5nLWxlZnQ6MThweDtcIj4ke3dyaXR0ZW5MaW5lc308L3VsPmAgOiAnJ31cbiAgICAgICAgICAke2dpdFdhcm5pbmd9JHtwdXNoV2FybmluZ31cbiAgICAgICAgPC9kaXY+YDtcbiAgICB9XG5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LXJldmlldy1hcmVhJykuaW5uZXJIVE1MID0gJyc7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1kaXNjYXJkLWJ0bicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgX21kdVBlbmRpbmdQcm9wb3NhbCA9IG51bGw7XG4gICAgX21kdVByaW9yQ2xhcmlmaWNhdGlvbnMgPSBbXTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKCdjb25maXJtTWFzdGVyRGF0YUFpVXBkYXRlOiBmYWlsZWQnLCBlcnIpO1xuICAgIGlmIChyZXN1bHRFbCkgcmVzdWx0RWwuaW5uZXJIVE1MID0gYDxwIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPk5ldHdvcmsgZXJyb3I6ICR7ZXNjKGVyci5tZXNzYWdlKX08L3A+YDtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoY29uZmlybUJ0bikgeyBjb25maXJtQnRuLmRpc2FibGVkID0gZmFsc2U7IGNvbmZpcm1CdG4udGV4dENvbnRlbnQgPSAnQ29uZmlybSBhbmQgV3JpdGUnOyB9XG4gIH1cbn1cblxuZnVuY3Rpb24gX21kdUhhbmRsZVN0YWxlQ2hhbmdlcyhzdGFsZUNoYW5nZXMsIGFwcGxpY2FibGVDaGFuZ2VzKSB7XG4gIGNvbnN0IHJlc3VsdEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21kdS1yZXN1bHQnKTtcbiAgY29uc3Qgc3RhbGVJZHMgPSBuZXcgU2V0KHN0YWxlQ2hhbmdlcy5tYXAocyA9PiBzLmlkKSk7XG5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbZGF0YS1tZHUtaWRdJykuZm9yRWFjaCgoY2IpID0+IHtcbiAgICBpZiAoc3RhbGVJZHMuaGFzKGNiLmRhdGFzZXQubWR1SWQpKSB7XG4gICAgICBjYi5jaGVja2VkID0gZmFsc2U7XG4gICAgICBjYi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICBjb25zdCByb3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgbWR1LXJvdy0ke2NiLmRhdGFzZXQubWR1SWR9YCk7XG4gICAgICBpZiAocm93KSByb3cuc3R5bGUub3BhY2l0eSA9ICcwLjUnO1xuICAgIH1cbiAgfSk7XG4gIF9tZHVVcGRhdGVDb25maXJtQnV0dG9uU3RhdGUoKTtcblxuICBjb25zdCBsaXZlRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWR1LXNlbGVjdGlvbi1saXZlJyk7XG4gIGNvbnN0IHN1bW1hcnkgPSBgJHtzdGFsZUNoYW5nZXMubGVuZ3RofSBpdGVtJHtzdGFsZUNoYW5nZXMubGVuZ3RoID09PSAxID8gJyBpcycgOiAncyBhcmUnfSBubyBsb25nZXIgdmFsaWQgYW5kICR7c3RhbGVDaGFuZ2VzLmxlbmd0aCA9PT0gMSA/ICd3YXMnIDogJ3dlcmUnfSBkZXNlbGVjdGVkOyByZXZpZXcgYW5kIGNvbmZpcm0gYWdhaW4uYDtcbiAgaWYgKGxpdmVFbCkgbGl2ZUVsLnRleHRDb250ZW50ID0gc3VtbWFyeTtcblxuICBjb25zdCBzdGFsZUxpc3QgPSBzdGFsZUNoYW5nZXMubWFwKHMgPT4gYDxsaT4ke2VzYyhzLmxhYmVsIHx8IHMuaWQpfSBcdTIwMTQgJHtlc2Mocy5yZWFzb24pfTwvbGk+YCkuam9pbignJyk7XG4gIGlmIChyZXN1bHRFbCkge1xuICAgIHJlc3VsdEVsLmlubmVySFRNTCA9IGBcbiAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOnZhcigtLWN2LWJnLXN1YnRsZSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1jdi1zbGF0ZS0zMDApO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTJweCAxNnB4O1wiPlxuICAgICAgICA8cCBzdHlsZT1cImNvbG9yOnZhcigtLWN2LXRleHQtbXV0ZWQpO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW46MCAwIDZweDtcIj5Ob3RoaW5nIHdhcyB3cml0dGVuIFx1MjAxNCAke3N1bW1hcnl9PC9wPlxuICAgICAgICA8dWwgc3R5bGU9XCJmb250LXNpemU6MC44MmVtO2NvbG9yOnZhcigtLWN2LXRleHQtbXV0ZWQpO21hcmdpbjo0cHggMCAwO3BhZGRpbmctbGVmdDoxOHB4O1wiPiR7c3RhbGVMaXN0fTwvdWw+XG4gICAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOjAuODJlbTtjb2xvcjp2YXIoLS1jdi10ZXh0LXNlY29uZGFyeSk7bWFyZ2luLXRvcDo4cHg7XCI+JHthcHBsaWNhYmxlQ2hhbmdlcy5sZW5ndGh9IGl0ZW0ke2FwcGxpY2FibGVDaGFuZ2VzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfSAke2FwcGxpY2FibGVDaGFuZ2VzLmxlbmd0aCA9PT0gMSA/ICdpcycgOiAnYXJlJ30gc3RpbGwgdmFsaWQgXHUyMDE0IGNsaWNrIFwiQ29uZmlybSBhbmQgV3JpdGVcIiBhZ2FpbiB0byBhcHBseSBqdXN0IHRob3NlLjwvcD5cbiAgICAgIDwvZGl2PmA7XG4gIH1cbn1cblxuLy8gTm90ZTogbm8gY2xpZW50LXNpZGUgXCJyZXN1bWUgYW4gaW4tcHJvZ3Jlc3MgcHJvcG9zYWxcIiBhZmZvcmRhbmNlIFx1MjAxNCB0aGVcbi8vIHBhbmVsIHJlc2V0cyBpdHMgc3RhdGUgb24gZXZlcnkgcmVuZGVyIChzZWUgX21kdVJlc2V0U3RhdGUsIGNhbGxlZCBmcm9tXG4vLyByZW5kZXJNYXN0ZXJEYXRhQWlVcGRhdGVQYW5lbCksIGFuZCBwZW5kaW5nIHByb3Bvc2FscyBsaXZlIHNlcnZlci1zaWRlXG4vLyBrZXllZCBieSBwcm9wb3NhbF9pZCB3aXRoIHRoZWlyIG93biBUVEwgKHNlZSBtYXN0ZXJfZGF0YV9yb3V0ZXMucHkpLlxuLy8gUmVzdW1pbmcgd291bGQgcmVxdWlyZSBhIHNlc3Npb24tc3RhdHVzLWRyaXZlbiBjaGVjayBmb3IgYW4gZXhpc3Rpbmdcbi8vIHBlbmRpbmcgcHJvcG9zYWwgYmVmb3JlIHRoZSBwYW5lbCBmaXJzdCByZW5kZXJzOyB0cmFja2VkIGFzIGEga25vd24gdjFcbi8vIGxpbWl0YXRpb24sIG5vdCBzaWxlbnRseSBhYnNlbnQuXG5cbmV4cG9ydCB7XG4gIHJlbmRlck1hc3RlckRhdGFBaVVwZGF0ZVBhbmVsLFxuICByZW5kZXJNYXN0ZXJEYXRhQWlVcGRhdGVEaXNhYmxlZE5vdGUsXG4gIHRvZ2dsZU1hc3RlckRhdGFBaVBhbmVsLFxuICBzZXRNYXN0ZXJEYXRhQWlNb2RlLFxuICBoYW5kbGVNYXN0ZXJEYXRhQWlGaWxlVXBsb2FkLFxuICBzdWJtaXRNYXN0ZXJEYXRhQWlQcm9wb3NlLFxuICBkaXNjYXJkTWFzdGVyRGF0YUFpUHJvcG9zYWwsXG4gIHNlbGVjdE1hc3RlckRhdGFBaU5vbkZsYWdnZWQsXG4gIGNvbmZpcm1NYXN0ZXJEYXRhQWlVcGRhdGUsXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvbWFzdGVyLWN2LmpzXG4gKiBNYXN0ZXIgQ1YgbWFuYWdlbWVudCB0YWI6IGZldGNoLCByZW5kZXIsIGFuZCBDUlVEIGZvciBwZXJzb25hbCBpbmZvLFxuICogZXhwZXJpZW5jZXMsIHNraWxscywgZWR1Y2F0aW9uLCBhd2FyZHMsIGFjaGlldmVtZW50cywgc3VtbWFyaWVzLlxuICpcbiAqIERlcGVuZGVuY2llcyAocmVzb2x2ZWQgdGhyb3VnaCBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICBlc2NhcGVIdG1sLCBzaG93VG9hc3QsIHNob3dBbGVydE1vZGFsLCBjb25maXJtRGlhbG9nLFxuICogICBhcHBlbmRMb2FkaW5nTWVzc2FnZSwgcmVtb3ZlTG9hZGluZ01lc3NhZ2UsXG4gKiAgIHNldExvYWRpbmcsIHN3aXRjaFRhYiwgYXBwZW5kTWVzc2FnZSxcbiAqICAgcmVuZGVyTWFzdGVyRGF0YUFpVXBkYXRlUGFuZWwsIHJlbmRlck1hc3RlckRhdGFBaVVwZGF0ZURpc2FibGVkTm90ZVxuICogICAgIChmcm9tIHdlYi9tYXN0ZXItZGF0YS1haS11cGRhdGUuanMsIEdBUC0wMSlcbiAqL1xuXG5sZXQgX21hc3RlckNoYW5nZU5vdGljZSA9ICcnO1xuXG4vLyBUcmFja3MgdGhlIGFjdGl2ZSByZW5kZXIgdGFyZ2V0OiBtb2RhbCBib2R5IGRpdiB3aGVuIG9wZW5lZCBmcm9tIGhlYWRlcixcbi8vIG51bGwgd2hlbiByZW5kZXJlZCBpbnRvIHRoZSBub3JtYWwgdGFiIHZpZXdlci5cbmxldCBfbWFzdGVyQ3ZBY3RpdmVDb250YWluZXIgPSBudWxsO1xuXG4vLyBGaWxlbmFtZSBvZiB0aGUgc2FmZXR5IGJhY2t1cCBjcmVhdGVkIGJ5IHRoZSBtb3N0IHJlY2VudCB1bmRvLCByZXN0b3JhYmxlXG4vLyB2aWEgcmVkby4gU2luZ2xlLWxldmVsIGJ5IGRlc2lnbiAoR0FQLTE5IDE2LjcgdjEgc2NvcGUpIFx1MjAxNCBmdXJ0aGVyLWJhY2tcbi8vIHJlY292ZXJ5IHJlbWFpbnMgYXZhaWxhYmxlIHZpYSB0aGUgZnVsbCBcIlx1RDgzRFx1REQ1MCBCYWNrdXBzXCIgaGlzdG9yeSBtb2RhbC5cbi8vIFJlc2V0IHRvIG51bGwgYXQgdGhlIHRvcCBvZiBldmVyeSBwb3B1bGF0ZU1hc3RlclRhYigpIHJlLXJlbmRlciBzbyBhbnlcbi8vIG90aGVyIHNhdmUgYWN0aW9uIChzdHJ1Y3R1cmVkIGVkaXQsIEFJLXVwZGF0ZSBjb25maXJtLCBoYXJ2ZXN0IGFwcGx5KVxuLy8gaW52YWxpZGF0ZXMgYSBzdGFsZSByZWRvIHRhcmdldC4gdW5kb01hc3RlckRhdGFDaGFuZ2UoKSBzZXRzXG4vLyBfbWFzdGVyQ3ZTdXBwcmVzc1JlZG9SZXNldCBiZWZvcmUgaXRzIG93biBwb3B1bGF0ZU1hc3RlclRhYigpIGNhbGwgc28gaXRzXG4vLyBmcmVzaGx5LXNldCByZWRvIHRhcmdldCBzdXJ2aXZlcyB0aGF0IG9uZSByZW5kZXIuXG5sZXQgX21hc3RlckN2UmVkb0JhY2t1cCA9IG51bGw7XG5sZXQgX21hc3RlckN2U3VwcHJlc3NSZWRvUmVzZXQgPSBmYWxzZTtcblxuZnVuY3Rpb24gX3NldE1hc3RlckNoYW5nZU5vdGljZShzZWN0aW9uLCBhY3Rpb24pIHtcbiAgY29uc3QgY2xlYW5TZWN0aW9uID0gU3RyaW5nKHNlY3Rpb24gfHwgJ01hc3RlciBDVicpLnRyaW0oKTtcbiAgY29uc3QgY2xlYW5BY3Rpb24gPSBTdHJpbmcoYWN0aW9uIHx8ICd1cGRhdGVkJykudHJpbSgpO1xuICBfbWFzdGVyQ2hhbmdlTm90aWNlID0gYCR7Y2xlYW5TZWN0aW9ufSAke2NsZWFuQWN0aW9ufS5gO1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyTWFzdGVyQ2hhbmdlTm90aWNlKCkge1xuICBpZiAoIV9tYXN0ZXJDaGFuZ2VOb3RpY2UpIHJldHVybiAnJztcbiAgcmV0dXJuIGBcbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOjEycHggMCAxOHB4O3BhZGRpbmc6MTBweCAxMnB4O2JvcmRlcjoxcHggc29saWQgI2JiZjdkMDtiYWNrZ3JvdW5kOiNmMGZkZjQ7Ym9yZGVyLXJhZGl1czo4cHg7Y29sb3I6IzE0NTMyZDtcIj5cbiAgICAgIDxzdHJvbmc+TGFzdCBzYXZlZCBjaGFuZ2U6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbChfbWFzdGVyQ2hhbmdlTm90aWNlKX1cbiAgICA8L2Rpdj5cbiAgYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVNYXN0ZXJUYWIoY29udGFpbmVyID0gbnVsbCkge1xuICBpZiAoY29udGFpbmVyICE9PSBudWxsKSBfbWFzdGVyQ3ZBY3RpdmVDb250YWluZXIgPSBjb250YWluZXI7XG4gIGlmIChfbWFzdGVyQ3ZTdXBwcmVzc1JlZG9SZXNldCkge1xuICAgIF9tYXN0ZXJDdlN1cHByZXNzUmVkb1Jlc2V0ID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgX21hc3RlckN2UmVkb0JhY2t1cCA9IG51bGw7XG4gIH1cbiAgY29uc3QgY29udGVudCA9IF9tYXN0ZXJDdkFjdGl2ZUNvbnRhaW5lciB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICBjb250ZW50LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj48ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+PC9kaXY+PHAgc3R5bGU9XCJtYXJnaW4tdG9wOjEycHg7Y29sb3I6IzY0NzQ4YjtcIj5Mb2FkaW5nIG1hc3RlciBDViBkYXRhXHUyMDI2PC9wPjwvZGl2Pic7XG5cbiAgbGV0IG92ZXJ2aWV3ID0ge307XG4gIGxldCBmdWxsRGF0YSAgPSB7fTtcblxuICB0cnkge1xuICAgIGNvbnN0IFtvdlJlcywgZmRSZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvb3ZlcnZpZXcnKSxcbiAgICAgIGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL2Z1bGwnKSxcbiAgICBdKTtcbiAgICBvdmVydmlldyA9IChhd2FpdCBvdlJlcy5qc29uKCkpIHx8IHt9O1xuICAgIGZ1bGxEYXRhICA9IChhd2FpdCBmZFJlcy5qc29uKCkpIHx8IHt9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZW50LmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7cGFkZGluZzoyMHB4O1wiPkZhaWxlZCB0byBsb2FkIG1hc3RlciBDViBkYXRhLjwvcD4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBlcnNvbmFsSW5mbyA9IGZ1bGxEYXRhLnBlcnNvbmFsX2luZm8gfHwge307XG4gIGNvbnN0IGV4cGVyaWVuY2VzICAgICA9IGZ1bGxEYXRhLmV4cGVyaWVuY2UgfHwgW107XG4gIHdpbmRvdy5fbWFzdGVyRXhwZXJpZW5jZU9wdGlvbnMgPSBleHBlcmllbmNlc1xuICAgIC5tYXAoKGV4cCkgPT4gKHtcbiAgICAgIGlkOiBleHAuaWQgfHwgJycsXG4gICAgICBsYWJlbDogYCR7ZXhwLnRpdGxlIHx8ICdSb2xlJ30gQCAke2V4cC5jb21wYW55IHx8ICdDb21wYW55J31gLFxuICAgIH0pKVxuICAgIC5maWx0ZXIoKHgpID0+IHguaWQpO1xuICAvLyBGdWxsIGV4cGVyaWVuY2Ugb2JqZWN0cyAoaW5jbHVkaW5nIGFjaGlldmVtZW50cyksIGtleWVkIGJ5IGlkLCBzb1xuICAvLyBlZGl0TWFzdGVyRXhwZXJpZW5jZSgpIGNhbiBsb29rIHVwIG5lc3RlZCBhY2hpZXZlbWVudHMgd2l0aG91dFxuICAvLyBlbWJlZGRpbmcgYXJiaXRyYXJ5IGFjaGlldmVtZW50IHRleHQgaW5zaWRlIGFuIGlubGluZSBvbmNsaWNrIGF0dHJpYnV0ZS5cbiAgd2luZG93Ll9tYXN0ZXJFeHBlcmllbmNlRnVsbERhdGEgPSBleHBlcmllbmNlcztcbiAgY29uc3Qgc2tpbGxzICAgICAgICAgID0gZnVsbERhdGEuc2tpbGxzIHx8IFtdO1xuICBjb25zdCBlZHVjYXRpb24gICAgICAgPSBmdWxsRGF0YS5lZHVjYXRpb24gfHwgW107XG4gIGNvbnN0IGF3YXJkcyAgICAgICAgICA9IGZ1bGxEYXRhLmF3YXJkcyB8fCBbXTtcbiAgY29uc3QgY2VydGlmaWNhdGlvbnMgID0gZnVsbERhdGEuY2VydGlmaWNhdGlvbnMgfHwgW107XG4gIGNvbnN0IGFjaGlldmVtZW50cyAgICA9IGZ1bGxEYXRhLnNlbGVjdGVkX2FjaGlldmVtZW50cyB8fCBbXTtcbiAgY29uc3Qgc3VtbWFyaWVzICAgICAgID0gZnVsbERhdGEucHJvZmVzc2lvbmFsX3N1bW1hcmllcyB8fCB7fTtcblxuICBjb25zdCBjdXJyZW50UGhhc2UgPSAodHlwZW9mIHN0YXRlTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcgJiYgc3RhdGVNYW5hZ2VyLmdldFBoYXNlKVxuICAgID8gc3RhdGVNYW5hZ2VyLmdldFBoYXNlKClcbiAgICA6IG51bGw7XG4gIGNvbnN0IEVESVRBQkxFX1BIQVNFUyA9IG5ldyBTZXQoWydpbml0JywgJ3JlZmluZW1lbnQnLCBudWxsLCB1bmRlZmluZWQsICcnXSk7XG4gIGNvbnN0IGlzRWRpdGFibGUgPSBFRElUQUJMRV9QSEFTRVMuaGFzKGN1cnJlbnRQaGFzZSk7XG5cbiAgY29uc3QgcGhhc2VMb2NrQmFubmVyID0gaXNFZGl0YWJsZSA/ICcnIDogYFxuICAgIDxkaXYgcm9sZT1cInN0YXR1c1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZjJmMjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czo2cHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZzoxMHB4IDE0cHg7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZTowLjg4ZW07Y29sb3I6Izk5MWIxYjtcIj5cbiAgICAgIDxzdHJvbmc+XHVEODNEXHVERDEyIFJlYWQtb25seSBcdTIwMTQgZWRpdGluZyBsb2NrZWQ8L3N0cm9uZz48YnI+XG4gICAgICBNYXN0ZXIgQ1YgZWRpdGluZyBpcyBvbmx5IGF2YWlsYWJsZSBiZWZvcmUgam9iIGFuYWx5c2lzIGJlZ2lucyBvciBkdXJpbmcgdGhlXG4gICAgICBSZWZpbmVtZW50IHN0YWdlLiBUaGUgY3VycmVudCBzdGFnZSBpcyA8c3Ryb25nPiR7ZXNjYXBlSHRtbChjdXJyZW50UGhhc2UgfHwgJ3Vua25vd24nKX08L3N0cm9uZz4uXG4gICAgICBTYXZlIG9yIGNvbXBsZXRlIHRoZSBjdXJyZW50IHN0YWdlIHRvIHJlLWVuYWJsZSBlZGl0aW5nLlxuICAgIDwvZGl2PmA7XG5cbiAgY29udGVudC5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjhweDttYXJnaW4tYm90dG9tOjRweDtcIj5cbiAgICAgIDxoMSBzdHlsZT1cIm1hcmdpbjowO1wiPlx1RDgzRFx1RENEQSBNYXN0ZXIgQ1YgUHJvZmlsZTwvaDE+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7XCI+XG4gICAgICAgIDxidXR0b24gaWQ9XCJtYXN0ZXItY3YtdW5kby1idG5cIiBjbGFzcz1cImFjdGlvbi1idG4gc2Vjb25kYXJ5XCIgb25jbGljaz1cInVuZG9NYXN0ZXJEYXRhQ2hhbmdlKClcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlVuZG8gdGhlIG1vc3QgcmVjZW50IE1hc3RlciBDViBjaGFuZ2VcIiB0aXRsZT1cIlVuZG8gKEN0cmwrWilcIj5cbiAgICAgICAgICBcdTIxQTkgVW5kb1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cIm1hc3Rlci1jdi1yZWRvLWJ0blwiIGNsYXNzPVwiYWN0aW9uLWJ0biBzZWNvbmRhcnlcIiBvbmNsaWNrPVwicmVkb01hc3RlckRhdGFDaGFuZ2UoKVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVkbyB0aGUgcHJldmlvdXNseSB1bmRvbmUgTWFzdGVyIENWIGNoYW5nZVwiIHRpdGxlPVwiUmVkbyAoQ3RybCtTaGlmdCtaKVwiJHshX21hc3RlckN2UmVkb0JhY2t1cCA/ICcgZGlzYWJsZWQnIDogJyd9PlxuICAgICAgICAgIFx1MjFBQSBSZWRvXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBzZWNvbmRhcnlcIiBvbmNsaWNrPVwib3BlbkJhY2t1cEhpc3RvcnlNb2RhbCgpXCIgYXJpYS1sYWJlbD1cIlZpZXcgYmFja3VwIGhpc3RvcnlcIj5cbiAgICAgICAgICBcdUQ4M0RcdURENTAgQmFja3Vwc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gc2Vjb25kYXJ5XCIgb25jbGljaz1cIm9wZW5GdWxsRGF0YVByZXZpZXdNb2RhbCgpXCIgYXJpYS1sYWJlbD1cIlByZXZpZXcgZnVsbCBtYXN0ZXIgQ1YgZGF0YVwiPlxuICAgICAgICAgIFx1RDgzRFx1REM0MSBQcmV2aWV3IEZ1bGwgRGF0YVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gc2Vjb25kYXJ5XCIgb25jbGljaz1cImV4cG9ydE1hc3RlckNWKClcIiBhcmlhLWxhYmVsPVwiRG93bmxvYWQgTWFzdGVyX0NWX0RhdGEuanNvblwiPlxuICAgICAgICAgIFx1MkIwN1x1RkUwRiBFeHBvcnQgSlNPTlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gc2Vjb25kYXJ5XCIgb25jbGljaz1cInRyaWdnZXJNYXN0ZXJDdkltcG9ydCgpXCIgYXJpYS1sYWJlbD1cIkltcG9ydCBhIGZ1bGwgTWFzdGVyX0NWX0RhdGEuanNvbiBmaWxlXCIke2lzRWRpdGFibGUgPyAnJyA6ICcgZGlzYWJsZWQnfT5cbiAgICAgICAgICBcdTJCMDZcdUZFMEYgSW1wb3J0IEpTT05cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwibWFzdGVyLWN2LWltcG9ydC1maWxlLWlucHV0XCIgYWNjZXB0PVwiYXBwbGljYXRpb24vanNvbiwuanNvblwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiXG4gICAgICAgICAgICBvbmNoYW5nZT1cImhhbmRsZU1hc3RlckN2SW1wb3J0RmlsZShldmVudClcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgIFRoaXMgaXMgeW91ciBwZXJzaXN0ZW50IG1hc3RlciBDViBwcm9maWxlLiBDaGFuZ2VzIGhlcmUgdXBkYXRlXG4gICAgICA8Y29kZT5NYXN0ZXJfQ1ZfRGF0YS5qc29uPC9jb2RlPiBkaXJlY3RseSBhbmQgcGVyc2lzdCBhY3Jvc3MgYWxsIHNlc3Npb25zLlxuICAgIDwvcD5cblxuICAgICR7cGhhc2VMb2NrQmFubmVyfVxuXG4gICAgPCEtLSBHb3Zlcm5hbmNlIGJhbm5lciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLWdvdmVybmFuY2Utbm90ZVwiIHN0eWxlPVwiYmFja2dyb3VuZDojZmZmYmViO2JvcmRlcjoxcHggc29saWQgI2ZjZDM0ZDtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHggMTRweDttYXJnaW4tYm90dG9tOjE2cHg7Zm9udC1zaXplOjAuODhlbTtjb2xvcjojNzgzNTBmO1wiPlxuICAgICAgPHN0cm9uZz5cdTI2QTBcdUZFMEYgUGVyc2lzdGVudCBzdG9yYWdlIFx1MjAxNCB0aGlzIHRhYiBvbmx5Ojwvc3Ryb25nPiBFZGl0cyBtYWRlIGhlcmUgKHRoZSBzdHJ1Y3R1cmVkXG4gICAgICBlZGl0b3JzIGJlbG93LCBhbmQgXCJVcGRhdGUgdmlhIEFJXCIpIHdyaXRlIGRpcmVjdGx5IHRvIDxjb2RlPk1hc3Rlcl9DVl9EYXRhLmpzb248L2NvZGU+XG4gICAgICBpbW1lZGlhdGVseSBhbmQgcGVyc2lzdCBhY3Jvc3MgZXZlcnkgZnV0dXJlIGpvYiBhcHBsaWNhdGlvbi5cbiAgICAgIEpvYi1zcGVjaWZpYyBjaG9pY2VzIHlvdSBtYWtlIGVsc2V3aGVyZSBpbiB0aGUgYXBwIFx1MjAxNCB3aGljaCBza2lsbHMvZXhwZXJpZW5jZXMgdG8gZmVhdHVyZSxcbiAgICAgIHJld3JpdHRlbiBidWxsZXQgdGV4dCwgY292ZXItbGV0dGVyIHRvbmUgXHUyMDE0IGxpdmUgb25seSBpbiB0aGUgY3VycmVudCBzZXNzaW9uIGFuZCBhcmVcbiAgICAgIDxlbT5uZXZlcjwvZW0+IHdyaXR0ZW4gaGVyZSBhdXRvbWF0aWNhbGx5LiBUbyBjYXJyeSBhIHNlc3Npb24ncyBpbXByb3ZlbWVudHMgaW50byB5b3VyXG4gICAgICBwZXJtYW5lbnQgcHJvZmlsZSwgdXNlIFwiXHVEODNEXHVEQ0U1IFVwZGF0ZSBNYXN0ZXIgQ1YgRGF0YVwiIG9uIHRoZSBGaW5hbGlzZSBzdGVwLlxuICAgIDwvZGl2PlxuXG4gICAgJHtpc0VkaXRhYmxlID8gcmVuZGVyTWFzdGVyRGF0YUFpVXBkYXRlUGFuZWwoKSA6IHJlbmRlck1hc3RlckRhdGFBaVVwZGF0ZURpc2FibGVkTm90ZSgpfVxuXG4gICAgJHtfcmVuZGVyTWFzdGVyQ2hhbmdlTm90aWNlKCl9XG5cbiAgICA8IS0tIFByb2ZpbGUgb3ZlcnZpZXcgY2FyZCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXByb2ZpbGUtY2FyZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1wcm9maWxlLW5hbWVcIj4ke2VzY2FwZUh0bWwob3ZlcnZpZXcubmFtZSB8fCAnWW91ciBQcm9maWxlJyl9PC9kaXY+XG4gICAgICAke292ZXJ2aWV3LmhlYWRsaW5lID8gYDxkaXYgY2xhc3M9XCJtYXN0ZXItcHJvZmlsZS1oZWFkbGluZVwiPiR7ZXNjYXBlSHRtbChvdmVydmlldy5oZWFkbGluZSl9PC9kaXY+YCA6ICcnfVxuICAgICAgJHtvdmVydmlldy5lbWFpbCAgICA/IGA8ZGl2IGNsYXNzPVwibWFzdGVyLXByb2ZpbGUtZW1haWxcIj5cdTI3MDlcdUZFMEYgJHtlc2NhcGVIdG1sKG92ZXJ2aWV3LmVtYWlsKX08L2Rpdj5gIDogJyd9XG4gICAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXN0YXRzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc3RhdFwiPjxzcGFuIGNsYXNzPVwibWFzdGVyLXN0YXQtdmFsdWVcIj4ke292ZXJ2aWV3LmV4cGVyaWVuY2VfY291bnQgPz8gJ1x1MjAxNCd9PC9zcGFuPjxzcGFuIGNsYXNzPVwibWFzdGVyLXN0YXQtbGFiZWxcIj5FeHBlcmllbmNlczwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zdGF0XCI+PHNwYW4gY2xhc3M9XCJtYXN0ZXItc3RhdC12YWx1ZVwiPiR7b3ZlcnZpZXcuc2tpbGxfY291bnQgPz8gJ1x1MjAxNCd9PC9zcGFuPjxzcGFuIGNsYXNzPVwibWFzdGVyLXN0YXQtbGFiZWxcIj5Ta2lsbHM8L3NwYW4+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc3RhdFwiPjxzcGFuIGNsYXNzPVwibWFzdGVyLXN0YXQtdmFsdWVcIj4ke292ZXJ2aWV3LmFjaGlldmVtZW50X2NvdW50ID8/ICdcdTIwMTQnfTwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hc3Rlci1zdGF0LWxhYmVsXCI+QWNoaWV2ZW1lbnRzPC9zcGFuPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXN0YXRcIj48c3BhbiBjbGFzcz1cIm1hc3Rlci1zdGF0LXZhbHVlXCI+JHtvdmVydmlldy5zdW1tYXJ5X2NvdW50ID8/ICdcdTIwMTQnfTwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hc3Rlci1zdGF0LWxhYmVsXCI+U3VtbWFyaWVzPC9zcGFuPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXN0YXRcIj48c3BhbiBjbGFzcz1cIm1hc3Rlci1zdGF0LXZhbHVlXCI+JHtvdmVydmlldy5lZHVjYXRpb25fY291bnQgPz8gJ1x1MjAxNCd9PC9zcGFuPjxzcGFuIGNsYXNzPVwibWFzdGVyLXN0YXQtbGFiZWxcIj5FZHVjYXRpb248L3NwYW4+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc3RhdFwiPjxzcGFuIGNsYXNzPVwibWFzdGVyLXN0YXQtdmFsdWVcIj4ke292ZXJ2aWV3LnB1YmxpY2F0aW9uX2NvdW50ID8/ICdcdTIwMTQnfTwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hc3Rlci1zdGF0LWxhYmVsXCI+UHVibGljYXRpb25zPC9zcGFuPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFBlcnNvbmFsIEluZm8gc2VjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGgyPlx1RDgzRFx1REM2NCBQZXJzb25hbCBJbmZvcm1hdGlvbjwvaDI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cInNob3dFZGl0UGVyc29uYWxJbmZvTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJFZGl0IHBlcnNvbmFsIGluZm9ybWF0aW9uXCI+XG4gICAgICAgICAgXHUyNzBGXHVGRTBGIEVkaXRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJtYXN0ZXItcGVyc29uYWwtaW5mby1jb250YWluZXJcIj5cbiAgICAgICAgJHtfcmVuZGVyUGVyc29uYWxJbmZvQ2FyZChwZXJzb25hbEluZm8pfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEV4cGVyaWVuY2VzIHNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMj5cdUQ4M0RcdURDQkMgV29yayBFeHBlcmllbmNlPC9oMj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwic2hvd0FkZEV4cGVyaWVuY2VNb2RhbCgpXCIgYXJpYS1sYWJlbD1cIkFkZCBuZXcgd29yayBleHBlcmllbmNlXCI+XG4gICAgICAgICAgKyBBZGQgRXhwZXJpZW5jZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cIm1hc3Rlci1leHBlcmllbmNlcy1jb250YWluZXJcIj5cbiAgICAgICAgJHtfcmVuZGVyRXhwZXJpZW5jZXNMaXN0KGV4cGVyaWVuY2VzKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTa2lsbHMgc2VjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGgyPlx1RDgzRFx1REVFMFx1RkUwRiBTa2lsbHM8L2gyPlxuICAgICAgICAke0FycmF5LmlzQXJyYXkoc2tpbGxzKSA/IGA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJzaG93QWRkU2tpbGxNb2RhbCgnJywgdHJ1ZSlcIiBhcmlhLWxhYmVsPVwiQWRkIG5ldyBza2lsbFwiPisgQWRkIFNraWxsPC9idXR0b24+YCA6ICcnfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGlkPVwibWFzdGVyLXNraWxscy1jb250YWluZXJcIj5cbiAgICAgICAgJHtfcmVuZGVyU2tpbGxzU2VjdGlvbihza2lsbHMpfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVkdWNhdGlvbiBzZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDI+XHVEODNDXHVERjkzIEVkdWNhdGlvbjwvaDI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cInNob3dBZGRFZHVjYXRpb25Nb2RhbCgpXCIgYXJpYS1sYWJlbD1cIkFkZCBlZHVjYXRpb24gZW50cnlcIj5cbiAgICAgICAgICArIEFkZCBFZHVjYXRpb25cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJtYXN0ZXItZWR1Y2F0aW9uLWNvbnRhaW5lclwiPlxuICAgICAgICAke19yZW5kZXJFZHVjYXRpb25MaXN0KGVkdWNhdGlvbil9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUHVibGljYXRpb25zIHNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zZWN0aW9uXCIgaWQ9XCJtYXN0ZXItcHVibGljYXRpb25zLXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGgyPlx1RDgzRFx1RENENiBQdWJsaWNhdGlvbnM8L2gyPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIGlkPVwibWFzdGVyLXB1Yi1pbXBvcnQtYnRuXCJcbiAgICAgICAgICAgICAgb25jbGljaz1cInNob3dJbXBvcnRQdWJsaWNhdGlvbnNNb2RhbCgpXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkltcG9ydCBCaWJUZVggcHVibGljYXRpb25zXCI+XG4gICAgICAgICAgICBcdTJCMDZcdUZFMEYgSW1wb3J0IEJpYlRlWFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIGlkPVwibWFzdGVyLXB1Yi1jb252ZXJ0LWJ0blwiXG4gICAgICAgICAgICAgIG9uY2xpY2s9XCJzaG93Q29udmVydFB1YmxpY2F0aW9uc01vZGFsKClcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ29udmVydCBjaXRhdGlvbiB0ZXh0IHRvIEJpYlRlWFwiPlxuICAgICAgICAgICAgXHVEODNFXHVERTg0IENvbnZlcnQgVGV4dFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIGlkPVwibWFzdGVyLXB1Yi10b2dnbGUtYnRuXCJcbiAgICAgICAgICAgICAgb25jbGljaz1cInRvZ2dsZVB1YmxpY2F0aW9uc1ZpZXcoKVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJUb2dnbGUgYmV0d2VlbiBzdHJ1Y3R1cmVkIENSVUQgdmlldyBhbmQgcmF3IEJpYlRlWCBlZGl0b3JcIj5cbiAgICAgICAgICAgIFx1MjcwRlx1RkUwRiBSYXcgQmliVGVYXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBpZD1cIm1hc3Rlci1wdWItYWRkLWJ0blwiXG4gICAgICAgICAgICAgIG9uY2xpY2s9XCJzaG93QWRkUHVibGljYXRpb25Nb2RhbCgpXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFkZCBwdWJsaWNhdGlvblwiPlxuICAgICAgICAgICAgKyBBZGQgUHVibGljYXRpb25cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gQ1JVRCBzdHJ1Y3R1cmVkIHZpZXcgKGRlZmF1bHQpIC0tPlxuICAgICAgPGRpdiBpZD1cIm1hc3Rlci1wdWItY3J1ZC12aWV3XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJtYXN0ZXItcHViLWNydWQtY29udGFpbmVyXCI+XG4gICAgICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO3BhZGRpbmc6MTJweCAwO1wiPkxvYWRpbmcgcHVibGljYXRpb25zXHUyMDI2PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBSYXcgQmliVGVYIGVkaXRvciAoaGlkZGVuIGJ5IGRlZmF1bHQpIC0tPlxuICAgICAgPGRpdiBpZD1cIm1hc3Rlci1wdWItcmF3LXZpZXdcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cbiAgICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjllbTttYXJnaW4tYm90dG9tOjEwcHg7XCI+XG4gICAgICAgICAgRWRpdCB5b3VyIEJpYlRlWCBiaWJsaW9ncmFwaHkgZmlsZSBkaXJlY3RseS4gQ2hhbmdlcyBhcmUgc2F2ZWQgdG9cbiAgICAgICAgICA8Y29kZT5wdWJsaWNhdGlvbnMuYmliPC9jb2RlPiBhbmQgYSB0aW1lc3RhbXBlZCBiYWNrdXAgaXMgY3JlYXRlZFxuICAgICAgICAgIGF1dG9tYXRpY2FsbHkuIENvbnRlbnQgaXMgdmFsaWRhdGVkIGJlZm9yZSB3cml0aW5nLlxuICAgICAgICA8L3A+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7bWFyZ2luLWJvdHRvbTo4cHg7XCI+XG4gICAgICAgICAgPHNwYW4gaWQ9XCJtYXN0ZXItcHViLWNvdW50XCIgc3R5bGU9XCJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjllbTtcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OjE7XCI+PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIG9uY2xpY2s9XCJ2YWxpZGF0ZVB1YmxpY2F0aW9uc0JpYigpXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlZhbGlkYXRlIEJpYlRlWCB3aXRob3V0IHNhdmluZ1wiPlx1RDgzRFx1REQwRCBWYWxpZGF0ZTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHNlY29uZGFyeVwiIG9uY2xpY2s9XCJsb2FkUHVibGljYXRpb25zQmliKClcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVsb2FkIHB1YmxpY2F0aW9ucy5iaWIgZnJvbSBkaXNrXCI+XHVEODNEXHVERDA0IFJlbG9hZDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHByaW1hcnlcIiBpZD1cIm1hc3Rlci1wdWItc2F2ZS1idG5cIlxuICAgICAgICAgICAgICBvbmNsaWNrPVwic2F2ZVB1YmxpY2F0aW9uc0JpYigpXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNhdmUgQmliVGVYIHRvIGRpc2tcIj5cdUQ4M0RcdURDQkUgU2F2ZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHRleHRhcmVhIGlkPVwibWFzdGVyLXB1Yi10ZXh0YXJlYVwiXG4gICAgICAgICAgY2xhc3M9XCJlZGl0LWlucHV0XCJcbiAgICAgICAgICByb3dzPVwiMjBcIlxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjAuODVlbTtyZXNpemU6dmVydGljYWw7XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxvYWRpbmdcdTIwMjZcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJCaWJUZVggYmlibGlvZ3JhcGh5IGNvbnRlbnRcIlxuICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICA8ZGl2IGlkPVwibWFzdGVyLXB1Yi1zdGF0dXNcIlxuICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tdG9wOjZweDtmb250LXNpemU6MC44NWVtO2NvbG9yOiM2YjcyODA7XCJcbiAgICAgICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEF3YXJkcyBzZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDI+XHVEODNDXHVERkM1IEF3YXJkcyAmYW1wOyBIb25vdXJzPC9oMj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwic2hvd0FkZEF3YXJkTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJBZGQgYXdhcmRcIj5cbiAgICAgICAgICArIEFkZCBBd2FyZFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cIm1hc3Rlci1hd2FyZHMtY29udGFpbmVyXCI+XG4gICAgICAgICR7X3JlbmRlckF3YXJkc0xpc3QoYXdhcmRzKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDZXJ0aWZpY2F0aW9ucyBzZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDI+XHVEODNDXHVERjkzIENlcnRpZmljYXRpb25zPC9oMj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwic2hvd0FkZENlcnRpZmljYXRpb25Nb2RhbCgpXCIgYXJpYS1sYWJlbD1cIkFkZCBjZXJ0aWZpY2F0aW9uXCI+XG4gICAgICAgICAgKyBBZGQgQ2VydGlmaWNhdGlvblxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cIm1hc3Rlci1jZXJ0aWZpY2F0aW9ucy1jb250YWluZXJcIj5cbiAgICAgICAgJHtfcmVuZGVyQ2VydGlmaWNhdGlvbnNMaXN0KGNlcnRpZmljYXRpb25zKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWxlY3RlZCBBY2hpZXZlbWVudHMgc2VjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWFzdGVyLXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGgyPlx1RDgzQ1x1REZDNiBTZWxlY3RlZCBBY2hpZXZlbWVudHM8L2gyPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJzaG93QWRkQWNoaWV2ZW1lbnRNb2RhbCgpXCIgYXJpYS1sYWJlbD1cIkFkZCBuZXcgYWNoaWV2ZW1lbnQgdG8gbWFzdGVyIENWXCI+XG4gICAgICAgICAgKyBBZGQgQWNoaWV2ZW1lbnRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtmb250LXNpemU6MC45ZW07bWFyZ2luLWJvdHRvbToxMnB4O1wiPlxuICAgICAgICBUaGVzZSBhcmUgY3Jvc3Mtcm9sZSBoaWdobGlnaHRzIHNob3duIGluIHRoZSBBY2hpZXZlbWVudHMgcmV2aWV3IGR1cmluZyBjdXN0b21pc2F0aW9uLlxuICAgICAgICBUaGUgSGFydmVzdCBmZWF0dXJlIChIYXJ2ZXN0IHRhYikgY2FuIGFkZCBuZXcgb25lcyBmcm9tIHlvdXIgY3VycmVudCBzZXNzaW9uLlxuICAgICAgPC9wPlxuICAgICAgPGRpdiBpZD1cIm1hc3Rlci1hY2hpZXZlbWVudHMtY29udGFpbmVyXCI+XG4gICAgICAgICR7X3JlbmRlck1hc3RlckFjaGlldmVtZW50c1RhYmxlKGFjaGlldmVtZW50cyl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUHJvZmVzc2lvbmFsIFN1bW1hcmllcyBzZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDI+XHVEODNEXHVEQ0REIFByb2Zlc3Npb25hbCBTdW1tYXJpZXM8L2gyPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJzaG93QWRkU3VtbWFyeU1vZGFsKClcIiBhcmlhLWxhYmVsPVwiQWRkIG5ldyBwcm9mZXNzaW9uYWwgc3VtbWFyeSB2YXJpYW50XCI+XG4gICAgICAgICAgKyBBZGQgU3VtbWFyeVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjllbTttYXJnaW4tYm90dG9tOjEycHg7XCI+XG4gICAgICAgIE5hbWVkIHN1bW1hcnkgdmFyaWFudHMgbGV0IHlvdSB0YWlsb3IgeW91ciBwcm9mZXNzaW9uYWwgc3RhdGVtZW50IGZvciBkaWZmZXJlbnQgcm9sZSB0eXBlc1xuICAgICAgICB3aXRob3V0IHJlZ2VuZXJhdGluZyBmcm9tIHNjcmF0Y2guIFRoZSBBSSB3aWxsIHJlY29tbWVuZCB0aGUgbW9zdCByZWxldmFudCB2YXJpYW50XG4gICAgICAgIGR1cmluZyB0aGUgU3VtbWFyeSBGb2N1cyBzdGVwLlxuICAgICAgPC9wPlxuICAgICAgPGRpdiBpZD1cIm1hc3Rlci1zdW1tYXJpZXMtY29udGFpbmVyXCI+XG4gICAgICAgICR7X3JlbmRlclN1bW1hcmllc0xpc3Qoc3VtbWFyaWVzKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBQdWJsaWNhdGlvbiBhZGQvZWRpdCBtb2RhbCAtLT5cbiAgICA8ZGl2IGlkPVwibWFzdGVyLXB1Yi1tb2RhbC1vdmVybGF5XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwibWFzdGVyLXB1Yi1tb2RhbC10aXRsZVwiIGNsYXNzPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgIG9uY2xpY2s9XCJpZihldmVudC50YXJnZXQ9PT10aGlzKWNsb3NlUHVibGljYXRpb25Nb2RhbCgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBzdHlsZT1cIm1heC13aWR0aDo1ODBweDtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxoMiBpZD1cIm1hc3Rlci1wdWItbW9kYWwtdGl0bGUtaGVhZGluZ1wiIGlkPVwicHViLW1vZGFsLXRpdGxlLWhlYWRpbmdcIj5BZGQgUHVibGljYXRpb248L2gyPlxuICAgICAgICAgIDxidXR0b24gb25jbGljaz1cImNsb3NlUHVibGljYXRpb25Nb2RhbCgpXCIgYXJpYS1sYWJlbD1cIkNsb3NlIHB1YmxpY2F0aW9uIGVkaXRvclwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxLjRlbTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjQ3NDhiO1wiPiZ0aW1lczs8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCIgc3R5bGU9XCJwYWRkaW5nOjIwcHg7XCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwdWItbW9kYWwta2V5XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5DaXRlIEtleSA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInB1Yi1tb2RhbC1rZXlcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgYXJpYS1yZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBzbWl0aDIwMjRtbFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwdWItbW9kYWwtdHlwZVwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+RW50cnkgVHlwZSA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICA8c2VsZWN0IGlkPVwicHViLW1vZGFsLXR5cGVcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhcnRpY2xlXCI+YXJ0aWNsZTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaW5wcm9jZWVkaW5nc1wiPmlucHJvY2VlZGluZ3M8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJvb2tcIj5ib29rPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJpbmNvbGxlY3Rpb25cIj5pbmNvbGxlY3Rpb248L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInRlY2hyZXBvcnRcIj50ZWNocmVwb3J0PC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwaGR0aGVzaXNcIj5waGR0aGVzaXM8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm1hc3RlcnN0aGVzaXNcIj5tYXN0ZXJzdGhlc2lzPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJtaXNjXCI+bWlzYzwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBpZD1cInB1Yi1tb2RhbC1hdXRob3ItbGFiZWxcIiBmb3I9XCJwdWItbW9kYWwtYXV0aG9yXCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5BdXRob3IocykgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwdWItbW9kYWwtYXV0aG9yXCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMYXN0LCBGaXJzdCBhbmQgTGFzdDIsIEZpcnN0MlwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwdWItbW9kYWwtdGl0bGVcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPlRpdGxlIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwicHViLW1vZGFsLXRpdGxlXCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIGFyaWEtcmVxdWlyZWQ9XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDoxMnB4O21hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OjAgMCAxMDBweDtcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInB1Yi1tb2RhbC15ZWFyXCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5ZZWFyIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cInB1Yi1tb2RhbC15ZWFyXCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDBweDtcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMTkwMFwiIG1heD1cIjIxMDBcIiBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OjE7XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwdWItbW9kYWwtam91cm5hbFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+Sm91cm5hbCAvIEJvb2t0aXRsZTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwicHViLW1vZGFsLWpvdXJuYWxcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjEycHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwicHViLW1vZGFsLWRvaVwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+RE9JIC8gVVJMPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwicHViLW1vZGFsLWRvaVwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMTAueHh4eC94eHh4eFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206NHB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInB1Yi1tb2RhbC1leHRyYVwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+RXh0cmEgZmllbGRzIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2YjcyODA7XCI+KGtleT12YWx1ZSwgb25lIHBlciBsaW5lKTwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgPHRleHRhcmVhIGlkPVwicHViLW1vZGFsLWV4dHJhXCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgcm93cz1cIjNcIiBzdHlsZT1cIndpZHRoOjEwMCU7cmVzaXplOnZlcnRpY2FsO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MC44NWVtO1wiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ2b2x1bWU9MTImIzEwO3BhZ2VzPTEtLTIwXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIiBzdHlsZT1cImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7Z2FwOjhweDtwYWRkaW5nOjE2cHggMjBweDtcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJjbG9zZVB1YmxpY2F0aW9uTW9kYWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHByaW1hcnlcIiBvbmNsaWNrPVwic2F2ZU1hc3RlclB1YmxpY2F0aW9uKClcIj5TYXZlPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGlkPVwibWFzdGVyLXB1Yi1pbXBvcnQtbW9kYWwtb3ZlcmxheVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT1cIm1hc3Rlci1wdWItaW1wb3J0LW1vZGFsLXRpdGxlXCIgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgb25jbGljaz1cImlmKGV2ZW50LnRhcmdldD09PXRoaXMpY2xvc2VJbXBvcnRQdWJsaWNhdGlvbnNNb2RhbCgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBzdHlsZT1cIm1heC13aWR0aDo2ODBweDtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxoMiBpZD1cIm1hc3Rlci1wdWItaW1wb3J0LW1vZGFsLXRpdGxlXCI+SW1wb3J0IEJpYlRlWCBQdWJsaWNhdGlvbnM8L2gyPlxuICAgICAgICAgIDxidXR0b24gb25jbGljaz1cImNsb3NlSW1wb3J0UHVibGljYXRpb25zTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBCaWJUZVggaW1wb3J0IGRpYWxvZ1wiXG4gICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxLjRlbTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjQ3NDhiO1wiPiZ0aW1lczs8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCIgc3R5bGU9XCJwYWRkaW5nOjIwcHg7XCI+XG4gICAgICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjllbTttYXJnaW46MCAwIDEycHg7XCI+XG4gICAgICAgICAgICBQYXN0ZSBvbmUgb3IgbW9yZSBCaWJUZVggZW50cmllcyB0byBtZXJnZSB0aGVtIGludG8gPGNvZGU+cHVibGljYXRpb25zLmJpYjwvY29kZT4uXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cIm1hc3Rlci1wdWItaW1wb3J0LXRleHRhcmVhXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0LWlucHV0XCJcbiAgICAgICAgICAgICAgcm93cz1cIjEyXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MC44NWVtO3Jlc2l6ZTp2ZXJ0aWNhbDtcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkBhcnRpY2xle3NtaXRoMjAyNSwuLi59XCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkJpYlRlWCBpbXBvcnQgY29udGVudFwiXG4gICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O21hcmdpbi10b3A6MTJweDtjb2xvcjojMzM0MTU1O1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwibWFzdGVyLXB1Yi1pbXBvcnQtb3ZlcndyaXRlXCIgLz5cbiAgICAgICAgICAgIE92ZXJ3cml0ZSBleGlzdGluZyBlbnRyaWVzIHdoZW4gY2l0ZSBrZXlzIGFscmVhZHkgZXhpc3RcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgaWQ9XCJtYXN0ZXItcHViLWltcG9ydC1zdGF0dXNcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6MTBweDtmb250LXNpemU6MC44NWVtO2NvbG9yOiM2YjcyODA7XCJcbiAgICAgICAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCIgc3R5bGU9XCJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2dhcDo4cHg7cGFkZGluZzoxNnB4IDIwcHg7XCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwiY2xvc2VJbXBvcnRQdWJsaWNhdGlvbnNNb2RhbCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gcHJpbWFyeVwiIGlkPVwibWFzdGVyLXB1Yi1pbXBvcnQtc3VibWl0LWJ0blwiXG4gICAgICAgICAgICAgIG9uY2xpY2s9XCJpbXBvcnRQdWJsaWNhdGlvbnNCaWIoKVwiPkltcG9ydDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBpZD1cIm1hc3Rlci1wdWItY29udmVydC1tb2RhbC1vdmVybGF5XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwibWFzdGVyLXB1Yi1jb252ZXJ0LW1vZGFsLXRpdGxlXCIgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgb25jbGljaz1cImlmKGV2ZW50LnRhcmdldD09PXRoaXMpY2xvc2VDb252ZXJ0UHVibGljYXRpb25zTW9kYWwoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgc3R5bGU9XCJtYXgtd2lkdGg6NzYwcHg7XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICA8aDIgaWQ9XCJtYXN0ZXItcHViLWNvbnZlcnQtbW9kYWwtdGl0bGVcIj5Db252ZXJ0IENpdGF0aW9uIFRleHQgdG8gQmliVGVYPC9oMj5cbiAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJjbG9zZUNvbnZlcnRQdWJsaWNhdGlvbnNNb2RhbCgpXCIgYXJpYS1sYWJlbD1cIkNsb3NlIGNpdGF0aW9uIGNvbnZlcnNpb24gZGlhbG9nXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjEuNGVtO2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2NDc0OGI7XCI+JnRpbWVzOzwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIiBzdHlsZT1cInBhZGRpbmc6MjBweDtcIj5cbiAgICAgICAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjAuOWVtO21hcmdpbjowIDAgMTJweDtcIj5cbiAgICAgICAgICAgIFBhc3RlIGZyZWUtZm9ybSBjaXRhdGlvbiB0ZXh0LCByZXZpZXcgdGhlIGdlbmVyYXRlZCBCaWJUZVgsIHRoZW4gaW1wb3J0IGl0IHdoZW4gaXQgbG9va3MgY29ycmVjdC5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyO2dhcDoxNHB4O1wiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm1hc3Rlci1wdWItY29udmVydC1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+Q2l0YXRpb24gVGV4dDwvbGFiZWw+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cIm1hc3Rlci1wdWItY29udmVydC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgcm93cz1cIjdcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO3Jlc2l6ZTp2ZXJ0aWNhbDtcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEb2UsIEouICgyMDI1KS4gQXJ0aWNsZSB0aXRsZS4gSm91cm5hbCBOYW1lLCAxMigzKSwgMS0xMC5cIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNpdGF0aW9uIHRleHQgdG8gY29udmVydFwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJtYXN0ZXItcHViLWNvbnZlcnQtb3V0cHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5HZW5lcmF0ZWQgQmliVGVYIFByZXZpZXc8L2xhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJtYXN0ZXItcHViLWNvbnZlcnQtb3V0cHV0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICByb3dzPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MC44NWVtO3Jlc2l6ZTp2ZXJ0aWNhbDtcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDb252ZXJ0ZWQgQmliVGVYIHdpbGwgYXBwZWFyIGhlcmVcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkdlbmVyYXRlZCBCaWJUZVggcHJldmlld1wiXG4gICAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O21hcmdpbi10b3A6MTJweDtjb2xvcjojMzM0MTU1O1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwibWFzdGVyLXB1Yi1jb252ZXJ0LW92ZXJ3cml0ZVwiIC8+XG4gICAgICAgICAgICBPdmVyd3JpdGUgZXhpc3RpbmcgZW50cmllcyB3aGVuIGltcG9ydGluZyB0aGUgZ2VuZXJhdGVkIEJpYlRlWFxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBpZD1cIm1hc3Rlci1wdWItY29udmVydC1zdGF0dXNcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6MTBweDtmb250LXNpemU6MC44NWVtO2NvbG9yOiM2YjcyODA7XCJcbiAgICAgICAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCIgc3R5bGU9XCJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2dhcDo4cHg7cGFkZGluZzoxNnB4IDIwcHg7XCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwiY2xvc2VDb252ZXJ0UHVibGljYXRpb25zTW9kYWwoKVwiPkNsb3NlPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gc2Vjb25kYXJ5XCIgaWQ9XCJtYXN0ZXItcHViLWNvbnZlcnQtc3VibWl0LWJ0blwiXG4gICAgICAgICAgICAgIG9uY2xpY2s9XCJjb252ZXJ0UHVibGljYXRpb25UZXh0KClcIj5HZW5lcmF0ZSBCaWJUZVg8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBwcmltYXJ5XCIgaWQ9XCJtYXN0ZXItcHViLWNvbnZlcnQtaW1wb3J0LWJ0blwiXG4gICAgICAgICAgICAgIG9uY2xpY2s9XCJpbXBvcnRDb252ZXJ0ZWRQdWJsaWNhdGlvblRleHQoKVwiPkltcG9ydCBQcmV2aWV3PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFBlcnNvbmFsIEluZm8gbW9kYWwgLS0+XG4gICAgPGRpdiBpZD1cIm1hc3Rlci1waS1tb2RhbC1vdmVybGF5XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwibWFzdGVyLXBpLW1vZGFsLXRpdGxlXCIgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgb25jbGljaz1cImlmKGV2ZW50LnRhcmdldD09PXRoaXMpY2xvc2VQZXJzb25hbEluZm9Nb2RhbCgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBzdHlsZT1cIm1heC13aWR0aDo2MjBweDtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxoMiBpZD1cIm1hc3Rlci1waS1tb2RhbC10aXRsZVwiPkVkaXQgUGVyc29uYWwgSW5mb3JtYXRpb248L2gyPlxuICAgICAgICAgIDxidXR0b24gb25jbGljaz1cImNsb3NlUGVyc29uYWxJbmZvTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBwZXJzb25hbCBpbmZvIGVkaXRvclwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxLjRlbTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjQ3NDhiO1wiPiZ0aW1lczs8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCIgc3R5bGU9XCJwYWRkaW5nOjIwcHg7XCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTRweDtcIj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJncmlkLWNvbHVtbjoxLy0xO1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGktbmFtZS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+RnVsbCBOYW1lPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwaS1uYW1lLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIHBsYWNlaG9sZGVyPVwiZS5nLiBKYW5lIFNtaXRoLCBQaC5ELlwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJncmlkLWNvbHVtbjoxLy0xO1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGktdGl0bGUtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPlByb2Zlc3Npb25hbCBUaXRsZSAvIEhlYWRsaW5lPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwaS10aXRsZS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBwbGFjZWhvbGRlcj1cImUuZy4gU2VuaW9yIERhdGEgU2NpZW50aXN0XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBpLWVtYWlsLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5FbWFpbDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBpZD1cInBpLWVtYWlsLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIHBsYWNlaG9sZGVyPVwieW91QGV4YW1wbGUuY29tXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBpLXBob25lLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5QaG9uZTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGVsXCIgaWQ9XCJwaS1waG9uZS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBwbGFjZWhvbGRlcj1cIjU1NS0xMjMtNDU2N1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwaS1saW5rZWRpbi1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+TGlua2VkSW4gVVJMPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ1cmxcIiBpZD1cInBpLWxpbmtlZGluLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIHBsYWNlaG9sZGVyPVwiaHR0cHM6Ly9saW5rZWRpbi5jb20vaW4veW91XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBpLXdlYnNpdGUtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPldlYnNpdGU8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInVybFwiIGlkPVwicGktd2Vic2l0ZS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBwbGFjZWhvbGRlcj1cImh0dHBzOi8veW91cnNpdGUuY29tXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBpLWNpdHktaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkNpdHk8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInBpLWNpdHktaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgcGxhY2Vob2xkZXI9XCJSb2NoZXN0ZXJcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGktc3RhdGUtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPlN0YXRlIC8gUmVnaW9uPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwaS1zdGF0ZS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBwbGFjZWhvbGRlcj1cIk5ZXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cImNsb3NlUGVyc29uYWxJbmZvTW9kYWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHByaW1hcnlcIiBvbmNsaWNrPVwic2F2ZVBlcnNvbmFsSW5mbygpXCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFeHBlcmllbmNlIG1vZGFsIC0tPlxuICAgIDxkaXYgaWQ9XCJtYXN0ZXItZXhwLW1vZGFsLW92ZXJsYXlcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJtYXN0ZXItZXhwLW1vZGFsLXRpdGxlXCIgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgb25jbGljaz1cImlmKGV2ZW50LnRhcmdldD09PXRoaXMpY2xvc2VFeHBlcmllbmNlTW9kYWwoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgc3R5bGU9XCJtYXgtd2lkdGg6NjQwcHg7XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICA8aDIgaWQ9XCJtYXN0ZXItZXhwLW1vZGFsLXRpdGxlXCI+V29yayBFeHBlcmllbmNlPC9oMj5cbiAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJjbG9zZUV4cGVyaWVuY2VNb2RhbCgpXCIgYXJpYS1sYWJlbD1cIkNsb3NlIGV4cGVyaWVuY2UgZWRpdG9yXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjEuNGVtO2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2NDc0OGI7XCI+JnRpbWVzOzwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIiBzdHlsZT1cInBhZGRpbmc6MjBweDtcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiZXhwLW1vZGFsLWlkXCIgLz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNHB4O1wiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImdyaWQtY29sdW1uOjEvLTE7XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleHAtdGl0bGUtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkpvYiBUaXRsZSA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZXhwLXRpdGxlLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIGFyaWEtcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBTZW5pb3IgRGF0YSBTY2llbnRpc3RcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZ3JpZC1jb2x1bW46MS8tMTtcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4cC1jb21wYW55LWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5Db21wYW55IDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJleHAtY29tcGFueS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gQWNtZSBDb3JwXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4cC1jaXR5LWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5DaXR5PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJleHAtY2l0eS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBwbGFjZWhvbGRlcj1cIkJvc3RvblwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleHAtc3RhdGUtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPlN0YXRlIC8gUmVnaW9uPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJleHAtc3RhdGUtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgcGxhY2Vob2xkZXI9XCJNQVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleHAtc3RhcnQtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPlN0YXJ0IERhdGU8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImV4cC1zdGFydC1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBwbGFjZWhvbGRlcj1cIjIwMjAtMDFcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXhwLWVuZC1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+RW5kIERhdGUgKGJsYW5rID0gcHJlc2VudCk8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImV4cC1lbmQtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgcGxhY2Vob2xkZXI9XCIyMDI0LTA2IG9yIGxlYXZlIGJsYW5rXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4cC10eXBlLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5FbXBsb3ltZW50IFR5cGU8L2xhYmVsPlxuICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwiZXhwLXR5cGUtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImZ1bGxfdGltZVwiPkZ1bGwtdGltZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwYXJ0X3RpbWVcIj5QYXJ0LXRpbWU8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udHJhY3RcIj5Db250cmFjdDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb25zdWx0aW5nXCI+Q29uc3VsdGluZzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJpbnRlcm5zaGlwXCI+SW50ZXJuc2hpcDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzZWxmX2VtcGxveWVkXCI+U2VsZi1lbXBsb3llZDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4cC1pbXBvcnRhbmNlLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5JbXBvcnRhbmNlICgxXHUyMDEzMTApPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImV4cC1pbXBvcnRhbmNlLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDo4MHB4O1wiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxXCIgbWF4PVwiMTBcIiB2YWx1ZT1cIjVcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZ3JpZC1jb2x1bW46MS8tMTtcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4cC10YWdzLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5UYWdzIChjb21tYS1zZXBhcmF0ZWQpPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJleHAtdGFncy1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIG1sLCBsZWFkZXJzaGlwLCBweXRob25cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZ3JpZC1jb2x1bW46MS8tMTtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1jdi1ib3JkZXIpO3BhZGRpbmctdG9wOjE0cHg7bWFyZ2luLXRvcDo0cHg7XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NnB4O1wiPkFjaGlldmVtZW50czwvbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXYgaWQ9XCJleHAtYWNoaWV2ZW1lbnRzLWVkaXRvci1saXN0XCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjZweDttYXJnaW4tdG9wOjZweDtcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImV4cC1hY2gtbmV3LWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJmbGV4OjE7XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBZGQgYW4gYWNoaWV2ZW1lbnQgb3IgYnVsbGV0XHUyMDI2XCJcbiAgICAgICAgICAgICAgICAgICAgb25rZXlkb3duPVwiaWYoZXZlbnQua2V5PT09J0VudGVyJyl7ZXZlbnQucHJldmVudERlZmF1bHQoKTtfYWRkRXhwQWNoaWV2ZW1lbnQoKTt9XCIgLz5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImFjdGlvbi1idG4gc2Vjb25kYXJ5XCIgb25jbGljaz1cIl9hZGRFeHBBY2hpZXZlbWVudCgpXCI+KyBBZGQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJjbG9zZUV4cGVyaWVuY2VNb2RhbCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gcHJpbWFyeVwiIG9uY2xpY2s9XCJzYXZlTWFzdGVyRXhwZXJpZW5jZSgpXCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTa2lsbCBhZGQgbW9kYWwgLS0+XG4gICAgPGRpdiBpZD1cIm1hc3Rlci1za2lsbC1tb2RhbC1vdmVybGF5XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwibWFzdGVyLXNraWxsLW1vZGFsLXRpdGxlXCIgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgb25jbGljaz1cImlmKGV2ZW50LnRhcmdldD09PXRoaXMpY2xvc2VTa2lsbE1vZGFsKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIHN0eWxlPVwibWF4LXdpZHRoOjQ4MHB4O1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgPGgyIGlkPVwibWFzdGVyLXNraWxsLW1vZGFsLXRpdGxlXCI+QWRkIFNraWxsPC9oMj5cbiAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJjbG9zZVNraWxsTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBza2lsbCBlZGl0b3JcIlxuICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MS40ZW07Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY0NzQ4YjtcIj4mdGltZXM7PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIHN0eWxlPVwicGFkZGluZzoyMHB4O1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJza2lsbC1tb2RhbC1jYXRlZ29yeVwiIC8+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cInNraWxsLW1vZGFsLWlzLWZsYXRcIiAvPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJza2lsbC1tb2RhbC1vcmlnaW5hbC1uYW1lXCIgLz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiIGlkPVwic2tpbGwtY2F0ZWdvcnktcm93XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwic2tpbGwtY2F0ZWdvcnktZGlzcGxheVwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+Q2F0ZWdvcnk8L2xhYmVsPlxuICAgICAgICAgICAgPHNwYW4gaWQ9XCJza2lsbC1jYXRlZ29yeS1kaXNwbGF5XCIgc3R5bGU9XCJmb250LXdlaWdodDo1MDA7Y29sb3I6IzMzNDE1NTtcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJza2lsbC1uYW1lLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5Ta2lsbCBOYW1lIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwic2tpbGwtbmFtZS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIFB5dGhvblwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJza2lsbC1leHBlcmllbmNlcy1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+QXNzb2NpYXRlZCBFeHBlcmllbmNlIElEcyAob3B0aW9uYWwpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwic2tpbGwtZXhwZXJpZW5jZXMtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gZXhwXzEyMywgZXhwXzQ1NlwiIC8+XG4gICAgICAgICAgICA8c21hbGwgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6NHB4O2NvbG9yOiM2NDc0OGI7XCI+Q29tbWEtc2VwYXJhdGVkIElEcy4gQSBza2lsbCBjYW4gYmUgbGlua2VkIHRvIG11bHRpcGxlIGV4cGVyaWVuY2VzLjwvc21hbGw+XG4gICAgICAgICAgICA8ZGl2IGlkPVwic2tpbGwtZXhwZXJpZW5jZS1oaW50c1wiIHN0eWxlPVwibWFyZ2luLXRvcDo2cHg7Zm9udC1zaXplOjAuOGVtO2NvbG9yOiM5NGEzYjg7XCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJza2lsbC1hbGlhc2VzLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5BbGlhc2VzIChjb21tYS1zZXBhcmF0ZWQsIG9wdGlvbmFsKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInNraWxsLWFsaWFzZXMtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gSlMsIEVDTUFTY3JpcHRcIiAvPlxuICAgICAgICAgICAgPHNtYWxsIHN0eWxlPVwiZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjRweDtjb2xvcjojNjQ3NDhiO1wiPkFsdGVybmF0ZSBuYW1lcyBhbiBBVFMgb3IgcmV2aWV3ZXIgbWlnaHQgc2VhcmNoIGZvci48L3NtYWxsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwic2tpbGwteWVhcnMtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPlllYXJzIG9mIEV4cGVyaWVuY2UgKG9wdGlvbmFsKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwic2tpbGwteWVhcnMtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEyMHB4O1wiIG1pbj1cIjBcIiBzdGVwPVwiMC41XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJjbG9zZVNraWxsTW9kYWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHByaW1hcnlcIiBpZD1cIm1hc3Rlci1za2lsbC1zYXZlLWJ0blwiIG9uY2xpY2s9XCJzYXZlTWFzdGVyU2tpbGwoKVwiPkFkZCBTa2lsbDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFZHVjYXRpb24gbW9kYWwgLS0+XG4gICAgPGRpdiBpZD1cIm1hc3Rlci1lZHUtbW9kYWwtb3ZlcmxheVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT1cIm1hc3Rlci1lZHUtbW9kYWwtdGl0bGVcIiBjbGFzcz1cIm1vZGFsLW92ZXJsYXlcIlxuICAgICAgICBvbmNsaWNrPVwiaWYoZXZlbnQudGFyZ2V0PT09dGhpcyljbG9zZUVkdWNhdGlvbk1vZGFsKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIHN0eWxlPVwibWF4LXdpZHRoOjU4MHB4O1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgPGgyIGlkPVwibWFzdGVyLWVkdS1tb2RhbC10aXRsZVwiPkVkdWNhdGlvbjwvaDI+XG4gICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwiY2xvc2VFZHVjYXRpb25Nb2RhbCgpXCIgYXJpYS1sYWJlbD1cIkNsb3NlIGVkdWNhdGlvbiBlZGl0b3JcIlxuICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MS40ZW07Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY0NzQ4YjtcIj4mdGltZXM7PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIHN0eWxlPVwicGFkZGluZzoyMHB4O1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJlZHUtbW9kYWwtaWR4XCIgdmFsdWU9XCItMVwiIC8+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTRweDtcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJlZHUtZGVncmVlLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5EZWdyZWUgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImVkdS1kZWdyZWUtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgYXJpYS1yZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIFBoLkQuXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImVkdS1maWVsZC1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+RmllbGQgb2YgU3R1ZHk8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImVkdS1maWVsZC1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIEJpb3N0YXRpc3RpY3NcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZ3JpZC1jb2x1bW46MS8tMTtcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImVkdS1pbnN0aXR1dGlvbi1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+SW5zdGl0dXRpb24gPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImVkdS1pbnN0aXR1dGlvbi1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImVkdS1jaXR5LWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5DaXR5PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJlZHUtY2l0eS1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiBwbGFjZWhvbGRlcj1cIlNlYXR0bGVcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZWR1LXN0YXRlLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5TdGF0ZTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZWR1LXN0YXRlLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIHBsYWNlaG9sZGVyPVwiV0FcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZWR1LXN0YXJ0LXllYXItaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPlN0YXJ0IFllYXI8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiZWR1LXN0YXJ0LXllYXItaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCJcbiAgICAgICAgICAgICAgICAgIG1pbj1cIjE5NTBcIiBtYXg9XCIyMDk5XCIgcGxhY2Vob2xkZXI9XCIxOTk1XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImVkdS1lbmQteWVhci1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+RW5kIFllYXI8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiZWR1LWVuZC15ZWFyLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxOTUwXCIgbWF4PVwiMjA5OVwiIHBsYWNlaG9sZGVyPVwiMjAwMFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJjbG9zZUVkdWNhdGlvbk1vZGFsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBwcmltYXJ5XCIgb25jbGljaz1cInNhdmVNYXN0ZXJFZHVjYXRpb24oKVwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQXdhcmQgbW9kYWwgLS0+XG4gICAgPGRpdiBpZD1cIm1hc3Rlci1hd2FyZC1tb2RhbC1vdmVybGF5XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwibWFzdGVyLWF3YXJkLW1vZGFsLXRpdGxlXCIgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgb25jbGljaz1cImlmKGV2ZW50LnRhcmdldD09PXRoaXMpY2xvc2VBd2FyZE1vZGFsKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIHN0eWxlPVwibWF4LXdpZHRoOjU4MHB4O1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgPGgyIGlkPVwibWFzdGVyLWF3YXJkLW1vZGFsLXRpdGxlXCI+QXdhcmQgLyBIb25vdXI8L2gyPlxuICAgICAgICAgIDxidXR0b24gb25jbGljaz1cImNsb3NlQXdhcmRNb2RhbCgpXCIgYXJpYS1sYWJlbD1cIkNsb3NlIGF3YXJkIGVkaXRvclwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxLjRlbTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjQ3NDhiO1wiPiZ0aW1lczs8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCIgc3R5bGU9XCJwYWRkaW5nOjIwcHg7XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cImF3YXJkLW1vZGFsLWlkeFwiIHZhbHVlPVwiLTFcIiAvPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXdhcmQtdGl0bGUtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPlRpdGxlIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiYXdhcmQtdGl0bGUtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgYXJpYS1yZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBFbXBsb3llZSBvZiB0aGUgWWVhclwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhd2FyZC15ZWFyLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5ZZWFyPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJhd2FyZC15ZWFyLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDBweDtcIlxuICAgICAgICAgICAgICAgIG1pbj1cIjE5NTBcIiBtYXg9XCIyMDk5XCIgcGxhY2Vob2xkZXI9XCIyMDIyXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImF3YXJkLWRlc2MtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkRlc2NyaXB0aW9uPC9sYWJlbD5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cImF3YXJkLWRlc2MtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiByb3dzPVwiM1wiIHN0eWxlPVwid2lkdGg6MTAwJTtyZXNpemU6dmVydGljYWw7XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkJyaWVmIGNvbnRleHQgb3IgYWNoaWV2ZW1lbnQgZGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXdhcmQtcmVsZXZhbnQtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPlJlbGV2YW50IGZvciAoY29tbWEtc2VwYXJhdGVkKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImF3YXJkLXJlbGV2YW50LWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIGxlYWRlcnNoaXAsIHBoYXJtYVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwiY2xvc2VBd2FyZE1vZGFsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBwcmltYXJ5XCIgb25jbGljaz1cInNhdmVNYXN0ZXJBd2FyZCgpXCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDZXJ0aWZpY2F0aW9uIG1vZGFsIC0tPlxuICAgIDxkaXYgaWQ9XCJtYXN0ZXItY2VydC1tb2RhbC1vdmVybGF5XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwibWFzdGVyLWNlcnQtbW9kYWwtdGl0bGVcIiBjbGFzcz1cIm1vZGFsLW92ZXJsYXlcIlxuICAgICAgICBvbmNsaWNrPVwiaWYoZXZlbnQudGFyZ2V0PT09dGhpcyljbG9zZUNlcnRpZmljYXRpb25Nb2RhbCgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBzdHlsZT1cIm1heC13aWR0aDo1MDBweDtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxoMiBpZD1cIm1hc3Rlci1jZXJ0LW1vZGFsLXRpdGxlXCI+Q2VydGlmaWNhdGlvbjwvaDI+XG4gICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwiY2xvc2VDZXJ0aWZpY2F0aW9uTW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBjZXJ0aWZpY2F0aW9uIGVkaXRvclwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxLjRlbTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjQ3NDhiO1wiPiZ0aW1lczs8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCIgc3R5bGU9XCJwYWRkaW5nOjIwcHg7XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cImNlcnQtbW9kYWwtaWR4XCIgdmFsdWU9XCItMVwiIC8+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjZXJ0LW5hbWUtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPk5hbWUgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJjZXJ0LW5hbWUtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgYXJpYS1yZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBBV1MgQ2VydGlmaWVkIFNvbHV0aW9ucyBBcmNoaXRlY3RcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiY2VydC1pc3N1ZXItaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPklzc3VlcjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImNlcnQtaXNzdWVyLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIEFtYXpvbiBXZWIgU2VydmljZXNcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiY2VydC15ZWFyLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5ZZWFyPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJjZXJ0LXllYXItaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMHB4O1wiXG4gICAgICAgICAgICAgICAgbWluPVwiMTk1MFwiIG1heD1cIjIwOTlcIiBwbGFjZWhvbGRlcj1cIjIwMjNcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cImNsb3NlQ2VydGlmaWNhdGlvbk1vZGFsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBwcmltYXJ5XCIgb25jbGljaz1cInNhdmVNYXN0ZXJDZXJ0aWZpY2F0aW9uKClcIj5TYXZlPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEFjaGlldmVtZW50IGVkaXQgbW9kYWwgLS0+XG4gICAgPGRpdiBpZD1cIm1hc3Rlci1hY2gtbW9kYWwtb3ZlcmxheVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT1cIm1hc3Rlci1hY2gtbW9kYWwtdGl0bGVcIiBjbGFzcz1cIm1vZGFsLW92ZXJsYXlcIlxuICAgICAgICBvbmNsaWNrPVwiaWYoZXZlbnQudGFyZ2V0PT09dGhpcyljbG9zZU1hc3RlckFjaE1vZGFsKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIHN0eWxlPVwibWF4LXdpZHRoOjYwMHB4O1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgPGgyIGlkPVwibWFzdGVyLWFjaC1tb2RhbC10aXRsZVwiPkFjaGlldmVtZW50PC9oMj5cbiAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJjbG9zZU1hc3RlckFjaE1vZGFsKClcIiBhcmlhLWxhYmVsPVwiQ2xvc2UgYWNoaWV2ZW1lbnQgZWRpdG9yXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjEuNGVtO2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2NDc0OGI7XCI+JnRpbWVzOzwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIiBzdHlsZT1cInBhZGRpbmc6MjBweDtcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiYWNoLW1vZGFsLWlkXCIgLz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImFjaC1tb2RhbC10aXRsZS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+VGl0bGUgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJhY2gtbW9kYWwtdGl0bGUtaW5wdXRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgYXJpYS1yZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBMZWQgM1x1MDBENyByZXZlbnVlIGdyb3d0aCBpbml0aWF0aXZlXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbToxNHB4O1wiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImFjaC1tb2RhbC1kZXNjLWlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweDtcIj5EZXNjcmlwdGlvbjwvbGFiZWw+XG4gICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJhY2gtbW9kYWwtZGVzYy1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHJvd3M9XCIzXCIgc3R5bGU9XCJ3aWR0aDoxMDAlO3Jlc2l6ZTp2ZXJ0aWNhbDtcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiT3B0aW9uYWwgZGV0YWlsIG9yIG1ldHJpY1wiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTRweDtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhY2gtbW9kYWwtcmVsZXZhbnQtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPlJlbGV2YW50IGZvciAoY29tbWEtc2VwYXJhdGVkIHJvbGVzL2RvbWFpbnMpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiYWNoLW1vZGFsLXJlbGV2YW50LWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIGxlYWRlcnNoaXAsIE1MIGVuZ2luZWVyaW5nLCBkYXRhIHNjaWVuY2VcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiYWNoLW1vZGFsLWltcG9ydGFuY2UtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPkltcG9ydGFuY2UgKDFcdTIwMTMxMCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImFjaC1tb2RhbC1pbXBvcnRhbmNlLWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDo4MHB4O1wiXG4gICAgICAgICAgICAgICAgbWluPVwiMVwiIG1heD1cIjEwXCIgdmFsdWU9XCI3XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJjbG9zZU1hc3RlckFjaE1vZGFsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBwcmltYXJ5XCIgb25jbGljaz1cInNhdmVNYXN0ZXJBY2hpZXZlbWVudCgpXCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTdW1tYXJ5IGVkaXQgbW9kYWwgLS0+XG4gICAgPGRpdiBpZD1cIm1hc3Rlci1zdW0tbW9kYWwtb3ZlcmxheVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT1cIm1hc3Rlci1zdW0tbW9kYWwtdGl0bGVcIiBjbGFzcz1cIm1vZGFsLW92ZXJsYXlcIlxuICAgICAgICBvbmNsaWNrPVwiaWYoZXZlbnQudGFyZ2V0PT09dGhpcyljbG9zZU1hc3RlclN1bU1vZGFsKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIHN0eWxlPVwibWF4LXdpZHRoOjYwMHB4O1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgPGgyIGlkPVwibWFzdGVyLXN1bS1tb2RhbC10aXRsZVwiPlByb2Zlc3Npb25hbCBTdW1tYXJ5PC9oMj5cbiAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9XCJjbG9zZU1hc3RlclN1bU1vZGFsKClcIiBhcmlhLWxhYmVsPVwiQ2xvc2Ugc3VtbWFyeSBlZGl0b3JcIlxuICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MS40ZW07Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY0NzQ4YjtcIj4mdGltZXM7PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIHN0eWxlPVwicGFkZGluZzoyMHB4O1wiPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwic3VtLW1vZGFsLWtleS1pbnB1dFwiIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7XCI+S2V5L25hbWUgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJzdW0tbW9kYWwta2V5LWlucHV0XCIgY2xhc3M9XCJlZGl0LWlucHV0XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIGFyaWEtcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gbWxfZW5naW5lZXJpbmcgb3IgbGVhZGVyc2hpcFwiIC8+XG4gICAgICAgICAgICA8cCBzdHlsZT1cImZvbnQtc2l6ZTowLjgyZW07Y29sb3I6IzZiNzI4MDttYXJnaW46NHB4IDAgMDtcIj5Vc2UgbG93ZXJjYXNlX3VuZGVyc2NvcmUgXHUyMDE0IHRoaXMgaXMgdGhlIGtleSB1c2VkIGludGVybmFsbHkgYW5kIHNob3duIGluIHRoZSBTdW1tYXJ5IEZvY3VzIHN0ZXAuPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE0cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwic3VtLW1vZGFsLXRleHQtaW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4O1wiPlN1bW1hcnkgdGV4dCA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJzdW0tbW9kYWwtdGV4dC1pbnB1dFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHJvd3M9XCI1XCIgc3R5bGU9XCJ3aWR0aDoxMDAlO3Jlc2l6ZTp2ZXJ0aWNhbDtcIiBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXcml0ZSB5b3VyIHByb2Zlc3Npb25hbCBzdW1tYXJ5IHZhcmlhbnQgaGVyZVx1MjAyNlwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBvbmNsaWNrPVwiY2xvc2VNYXN0ZXJTdW1Nb2RhbCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gcHJpbWFyeVwiIG9uY2xpY2s9XCJzYXZlTWFzdGVyU3VtbWFyeSgpXCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICAvLyBEaXNhYmxlIHdyaXRlIGNvbnRyb2xzIHdoZW4gdGhlIHdvcmtmbG93IHBoYXNlIGRvZXMgbm90IHBlcm1pdCBNYXN0ZXIgQ1YgZWRpdHMuXG4gIGlmICghaXNFZGl0YWJsZSkge1xuICAgIGNvbnN0IFNBRkVfT05DTElDSyA9IC9eKGV4cG9ydE1hc3RlckNWfHZhbGlkYXRlUHVibGljYXRpb25zQmlifG9wZW5CYWNrdXBIaXN0b3J5TW9kYWx8cmVzdG9yZUJhY2t1cHxvcGVuRnVsbERhdGFQcmV2aWV3TW9kYWwpXFwoLztcbiAgICBjb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpLmZvckVhY2goYnRuID0+IHtcbiAgICAgIGNvbnN0IG9uY2xpY2sgPSAoYnRuLmdldEF0dHJpYnV0ZSgnb25jbGljaycpIHx8ICcnKS50cmltKCk7XG4gICAgICBpZiAoU0FGRV9PTkNMSUNLLnRlc3Qob25jbGljaykpIHJldHVybjtcbiAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICBidG4uc3R5bGUub3BhY2l0eSA9ICcwLjQ1JztcbiAgICAgIGJ0bi5zdHlsZS5jdXJzb3IgPSAnbm90LWFsbG93ZWQnO1xuICAgICAgYnRuLnNldEF0dHJpYnV0ZSgndGl0bGUnLCAnRWRpdGluZyBsb2NrZWQgXHUyMDE0IGNvbXBsZXRlIHRoZSBjdXJyZW50IHN0YWdlIHRvIHJlLWVuYWJsZScpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gTG9hZCBwdWJsaWNhdGlvbnMgYXN5bmNocm9ub3VzbHkgYWZ0ZXIgdGhlIERPTSBpcyByZWFkeS5cbiAgbG9hZFB1YmxpY2F0aW9ucygpO1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyUGVyc29uYWxJbmZvQ2FyZChwaSkge1xuICBjb25zdCBjb250YWN0ID0gcGkuY29udGFjdCB8fCB7fTtcbiAgY29uc3QgYWRkcmVzcyA9IGNvbnRhY3QuYWRkcmVzcyB8fCB7fTtcbiAgY29uc3Qgcm93cyA9IFtcbiAgICBbJ05hbWUnLCAgICAgIHBpLm5hbWUgfHwgJyddLFxuICAgIFsnVGl0bGUnLCAgICAgcGkudGl0bGUgfHwgcGkuaGVhZGxpbmUgfHwgJyddLFxuICAgIFsnRW1haWwnLCAgICAgY29udGFjdC5lbWFpbCB8fCBwaS5lbWFpbCB8fCAnJ10sXG4gICAgWydQaG9uZScsICAgICBjb250YWN0LnBob25lIHx8ICcnXSxcbiAgICBbJ0xpbmtlZEluJywgIGNvbnRhY3QubGlua2VkaW4gfHwgJyddLFxuICAgIFsnV2Vic2l0ZScsICAgY29udGFjdC53ZWJzaXRlIHx8ICcnXSxcbiAgICBbJ0xvY2F0aW9uJywgIFthZGRyZXNzLmNpdHksIGFkZHJlc3Muc3RhdGVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpXSxcbiAgXS5maWx0ZXIoKFssIHZdKSA9PiB2KTtcbiAgaWYgKCFyb3dzLmxlbmd0aCkge1xuICAgIHJldHVybiAnPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO3BhZGRpbmc6MTJweCAwO1wiPk5vIHBlcnNvbmFsIGluZm9ybWF0aW9uIG9uIGZpbGUuIENsaWNrIFwiXHUyNzBGXHVGRTBGIEVkaXRcIiBhYm92ZSB0byBhZGQgeW91ciBkZXRhaWxzLjwvcD4nO1xuICB9XG4gIHJldHVybiBgPGRsIGNsYXNzPVwibWFzdGVyLWluZm8tZ3JpZFwiPiR7cm93cy5tYXAoKFtsYWJlbCwgdmFsdWVdKSA9PlxuICAgIGA8ZGl2IGNsYXNzPVwibWFzdGVyLWluZm8tcm93XCI+PGR0PiR7ZXNjYXBlSHRtbChsYWJlbCl9PC9kdD48ZGQ+JHtlc2NhcGVIdG1sKHZhbHVlKX08L2RkPjwvZGl2PmBcbiAgKS5qb2luKCcnKX08L2RsPmA7XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJFeHBlcmllbmNlc0xpc3QoZXhwZXJpZW5jZXMpIHtcbiAgaWYgKCFleHBlcmllbmNlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJzxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtwYWRkaW5nOjEycHggMDtcIj5ObyBleHBlcmllbmNlIGVudHJpZXMgeWV0LiBDbGljayBcIisgQWRkIEV4cGVyaWVuY2VcIiBhYm92ZS48L3A+JztcbiAgfVxuICBjb25zdCByb3dzID0gZXhwZXJpZW5jZXMubWFwKChleHAsIGlkeCkgPT4ge1xuICAgIGNvbnN0IHRpdGxlICAgPSBlc2NhcGVIdG1sKGV4cC50aXRsZSB8fCAnJyk7XG4gICAgY29uc3QgY29tcGFueSA9IGVzY2FwZUh0bWwoZXhwLmNvbXBhbnkgfHwgJycpO1xuICAgIGNvbnN0IGxvYyAgICAgPSBleHAubG9jYXRpb24gfHwge307XG4gICAgY29uc3QgbG9jYXRpb24gPSBlc2NhcGVIdG1sKFtsb2MuY2l0eSwgbG9jLnN0YXRlXS5maWx0ZXIoQm9vbGVhbikuam9pbignLCAnKSk7XG4gICAgY29uc3QgZGF0ZXMgICA9IGVzY2FwZUh0bWwoW2V4cC5zdGFydF9kYXRlLCBleHAuZW5kX2RhdGUgfHwgJ1ByZXNlbnQnXS5maWx0ZXIoQm9vbGVhbikuam9pbignIFx1MjAxMyAnKSk7XG4gICAgY29uc3QgYWNoQ291bnQgPSAoZXhwLmFjaGlldmVtZW50cyB8fCBbXSkubGVuZ3RoO1xuICAgIGNvbnN0IGV4cElkID0gZXNjYXBlSHRtbChleHAuaWQgfHwgJycpO1xuICAgIHJldHVybiBgXG4gICAgICA8dHI+XG4gICAgICAgIDx0ZD5cbiAgICAgICAgICA8c3Ryb25nPiR7dGl0bGV9PC9zdHJvbmc+PGJyPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IzQ3NTU2OTtcIj4ke2NvbXBhbnl9PC9zcGFuPlxuICAgICAgICAgICR7bG9jYXRpb24gPyBgPHNwYW4gc3R5bGU9XCJjb2xvcjojOTRhM2I4O2ZvbnQtc2l6ZTowLjg1ZW07XCI+IFx1MDBCNyAke2xvY2F0aW9ufTwvc3Bhbj5gIDogJyd9XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzQ3NTU2OTt3aGl0ZS1zcGFjZTpub3dyYXA7XCI+JHtkYXRlc308L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojOTRhM2I4O2ZvbnQtc2l6ZTowLjg1ZW07XCI+JHthY2hDb3VudH08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb24tYnRuc1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJlZGl0TWFzdGVyRXhwZXJpZW5jZSgnJHtleHBJZH0nKVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJFZGl0IGV4cGVyaWVuY2U6ICR7dGl0bGV9XCIgdGl0bGU9XCJFZGl0XCI+XHUyNzBGXHVGRTBGPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgb25jbGljaz1cImRlbGV0ZU1hc3RlckV4cGVyaWVuY2UoJyR7ZXNjYXBlSHRtbChleHAuaWQgfHwgJycpfScsICcke3RpdGxlfScpXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRlbGV0ZSBleHBlcmllbmNlOiAke3RpdGxlfVwiIHRpdGxlPVwiRGVsZXRlXCI+XHVEODNEXHVEREQxXHVGRTBGPC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPmA7XG4gIH0pLmpvaW4oJycpO1xuICByZXR1cm4gYFxuICAgIDx0YWJsZSBjbGFzcz1cInJldmlldy10YWJsZVwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aD5Sb2xlIC8gQ29tcGFueTwvdGg+XG4gICAgICAgICAgPHRoPkRhdGVzPC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDo2MHB4O1wiPkJ1bGxldHM8L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjgwcHg7XCI+QWN0aW9uczwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PiR7cm93c308L3Rib2R5PlxuICAgIDwvdGFibGU+YDtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclNraWxsc1NlY3Rpb24oc2tpbGxzKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZVNraWxsID0gKHMpID0+IHtcbiAgICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4geyBuYW1lOiBzLCBleHBlcmllbmNlczogW10gfTtcbiAgICB9XG4gICAgaWYgKHMgJiYgdHlwZW9mIHMgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBzLm5hbWUgfHwgJycsXG4gICAgICAgIGV4cGVyaWVuY2VzOiBBcnJheS5pc0FycmF5KHMuZXhwZXJpZW5jZXMpID8gcy5leHBlcmllbmNlcyA6IFtdLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbmFtZTogU3RyaW5nKHMgfHwgJycpLCBleHBlcmllbmNlczogW10gfTtcbiAgfTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShza2lsbHMpKSB7XG4gICAgaWYgKCFza2lsbHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJzxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtwYWRkaW5nOjEycHggMDtcIj5ObyBza2lsbHMgb24gZmlsZS4gQ2xpY2sgXCIrIEFkZCBTa2lsbFwiIGFib3ZlLjwvcD4nO1xuICAgIH1cbiAgICBjb25zdCBjaGlwcyA9IHNraWxscy5tYXAocyA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplU2tpbGwocyk7XG4gICAgICBjb25zdCBuYW1lID0gZXNjYXBlSHRtbChub3JtYWxpemVkLm5hbWUpO1xuICAgICAgY29uc3QgcmF3ID0gZXNjYXBlSHRtbChub3JtYWxpemVkLm5hbWUpO1xuICAgICAgY29uc3QgYmFkZ2UgPSBub3JtYWxpemVkLmV4cGVyaWVuY2VzLmxlbmd0aFxuICAgICAgICA/IGA8c21hbGwgc3R5bGU9XCJjb2xvcjojNjQ3NDhiO21hcmdpbi1sZWZ0OjZweDtcIj4oJHtub3JtYWxpemVkLmV4cGVyaWVuY2VzLmxlbmd0aH0gZXhwKTwvc21hbGw+YFxuICAgICAgICA6ICcnO1xuICAgICAgY29uc3Qgc2tpbGxKc29uID0gZXNjYXBlSHRtbChKU09OLnN0cmluZ2lmeSh7IG5hbWU6IG5vcm1hbGl6ZWQubmFtZSwgZXhwZXJpZW5jZXM6IG5vcm1hbGl6ZWQuZXhwZXJpZW5jZXMgfSkpO1xuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cInNraWxsLWNoaXBcIj4ke25hbWV9JHtiYWRnZX08YnV0dG9uIGNsYXNzPVwic2tpbGwtY2hpcC1kZWxcIiBvbmNsaWNrPVwiZWRpdE1hc3RlclNraWxsKCR7c2tpbGxKc29ufSwgJycsIHRydWUpXCIgYXJpYS1sYWJlbD1cIkVkaXQgc2tpbGwgJHtuYW1lfVwiIHRpdGxlPVwiRWRpdFwiPlx1MjcwRlx1RkUwRjwvYnV0dG9uPjxidXR0b24gY2xhc3M9XCJza2lsbC1jaGlwLWRlbFwiIG9uY2xpY2s9XCJkZWxldGVNYXN0ZXJTa2lsbCgnJHtyYXd9JywgJycsIHRydWUpXCIgYXJpYS1sYWJlbD1cIlJlbW92ZSBza2lsbCAke25hbWV9XCIgdGl0bGU9XCJSZW1vdmVcIj5cdTAwRDc8L2J1dHRvbj48L3NwYW4+YDtcbiAgICB9KS5qb2luKCcnKTtcbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJza2lsbC1jaGlwcy1jb250YWluZXJcIj4ke2NoaXBzfTwvZGl2PmA7XG4gIH1cbiAgaWYgKHR5cGVvZiBza2lsbHMgPT09ICdvYmplY3QnICYmIHNraWxscyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhza2lsbHMpO1xuICAgIGlmICgha2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAnPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO3BhZGRpbmc6MTJweCAwO1wiPk5vIHNraWxsIGNhdGVnb3JpZXMgb24gZmlsZS48L3A+JztcbiAgICB9XG4gICAgcmV0dXJuIGtleXMubWFwKGNhdEtleSA9PiB7XG4gICAgICBjb25zdCBjYXRWYWwgID0gc2tpbGxzW2NhdEtleV07XG4gICAgICBjb25zdCBjYXROYW1lICA9IHR5cGVvZiBjYXRWYWwgPT09ICdvYmplY3QnICYmIGNhdFZhbC5jYXRlZ29yeSA/IGNhdFZhbC5jYXRlZ29yeSA6IGNhdEtleTtcbiAgICAgIGNvbnN0IGNhdExpc3QgID0gQXJyYXkuaXNBcnJheShjYXRWYWwpID8gY2F0VmFsXG4gICAgICAgICAgICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkoY2F0VmFsPy5za2lsbHMpID8gY2F0VmFsLnNraWxscyA6IFtdO1xuICAgICAgY29uc3QgY2hpcHMgICA9IGNhdExpc3QubWFwKHMgPT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplU2tpbGwocyk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBlc2NhcGVIdG1sKG5vcm1hbGl6ZWQubmFtZSk7XG4gICAgICAgIGNvbnN0IGJhZGdlID0gbm9ybWFsaXplZC5leHBlcmllbmNlcy5sZW5ndGhcbiAgICAgICAgICA/IGA8c21hbGwgc3R5bGU9XCJjb2xvcjojNjQ3NDhiO21hcmdpbi1sZWZ0OjZweDtcIj4oJHtub3JtYWxpemVkLmV4cGVyaWVuY2VzLmxlbmd0aH0gZXhwKTwvc21hbGw+YFxuICAgICAgICAgIDogJyc7XG4gICAgICAgIGNvbnN0IHNraWxsSnNvbiA9IGVzY2FwZUh0bWwoSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiBub3JtYWxpemVkLm5hbWUsIGV4cGVyaWVuY2VzOiBub3JtYWxpemVkLmV4cGVyaWVuY2VzIH0pKTtcbiAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cInNraWxsLWNoaXBcIj4ke25hbWV9JHtiYWRnZX08YnV0dG9uIGNsYXNzPVwic2tpbGwtY2hpcC1kZWxcIiBvbmNsaWNrPVwiZWRpdE1hc3RlclNraWxsKCR7c2tpbGxKc29ufSwgJyR7ZXNjYXBlSHRtbChjYXRLZXkpfScsIGZhbHNlKVwiIGFyaWEtbGFiZWw9XCJFZGl0ICR7bmFtZX1cIiB0aXRsZT1cIkVkaXRcIj5cdTI3MEZcdUZFMEY8L2J1dHRvbj48YnV0dG9uIGNsYXNzPVwic2tpbGwtY2hpcC1kZWxcIiBvbmNsaWNrPVwiZGVsZXRlTWFzdGVyU2tpbGwoJyR7bmFtZX0nLCAnJHtlc2NhcGVIdG1sKGNhdEtleSl9JywgZmFsc2UpXCIgYXJpYS1sYWJlbD1cIlJlbW92ZSAke25hbWV9XCIgdGl0bGU9XCJSZW1vdmVcIj5cdTAwRDc8L2J1dHRvbj48L3NwYW4+YDtcbiAgICAgIH0pLmpvaW4oJycpO1xuICAgICAgY29uc3QgY2F0S2V5RXNjICA9IGVzY2FwZUh0bWwoY2F0S2V5KTtcbiAgICAgIGNvbnN0IGNhdE5hbWVFc2MgPSBlc2NhcGVIdG1sKGNhdE5hbWUpO1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1za2lsbC1jYXRlZ29yeVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXN0ZXItc2tpbGwtY2F0LWhlYWRlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXN0ZXItc2tpbGwtY2F0LW5hbWVcIj4ke2NhdE5hbWVFc2N9PC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4tc21cIiBvbmNsaWNrPVwic2hvd0FkZFNraWxsTW9kYWwoJyR7Y2F0S2V5RXNjfScsIGZhbHNlKVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFkZCBza2lsbCB0byAke2NhdE5hbWVFc2N9XCI+KyBBZGQ8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2tpbGwtY2hpcHMtY29udGFpbmVyXCI+JHtjaGlwcyB8fCAnPHNwYW4gc3R5bGU9XCJjb2xvcjojOTRhM2I4O2ZvbnQtc2l6ZTowLjg1ZW07XCI+Tm8gc2tpbGxzIGluIHRoaXMgY2F0ZWdvcnk8L3NwYW4+J308L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbiAgICB9KS5qb2luKCcnKTtcbiAgfVxuICByZXR1cm4gJzxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtcIj5Ta2lsbHMgZGF0YSBmb3JtYXQgbm90IHJlY29nbmlzZWQuPC9wPic7XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJFZHVjYXRpb25MaXN0KGVkdWNhdGlvbikge1xuICBpZiAoIWVkdWNhdGlvbi5sZW5ndGgpIHtcbiAgICByZXR1cm4gJzxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtwYWRkaW5nOjEycHggMDtcIj5ObyBlZHVjYXRpb24gZW50cmllcyB5ZXQuIENsaWNrIFwiKyBBZGQgRWR1Y2F0aW9uXCIgYWJvdmUuPC9wPic7XG4gIH1cbiAgY29uc3Qgcm93cyA9IGVkdWNhdGlvbi5tYXAoKGVkdSwgaWR4KSA9PiB7XG4gICAgY29uc3QgZGVncmVlICAgICAgPSBlc2NhcGVIdG1sKGVkdS5kZWdyZWUgfHwgJycpO1xuICAgIGNvbnN0IGZpZWxkICAgICAgID0gZXNjYXBlSHRtbChlZHUuZmllbGQgfHwgJycpO1xuICAgIGNvbnN0IGluc3RpdHV0aW9uID0gZXNjYXBlSHRtbChlZHUuaW5zdGl0dXRpb24gfHwgJycpO1xuICAgIGNvbnN0IGxvYyAgICAgICAgID0gZWR1LmxvY2F0aW9uIHx8IHt9O1xuICAgIGNvbnN0IGxvY2F0aW9uICAgID0gZXNjYXBlSHRtbChbbG9jLmNpdHksIGxvYy5zdGF0ZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJykpO1xuICAgIGNvbnN0IHllYXJzICAgICAgID0gW2VkdS5zdGFydF95ZWFyLCBlZHUuZW5kX3llYXJdLmZpbHRlcihCb29sZWFuKS5qb2luKCdcdTIwMTMnKTtcbiAgICBjb25zdCBlZHVKc29uID0gZXNjYXBlSHRtbChKU09OLnN0cmluZ2lmeSh7XG4gICAgICBkZWdyZWU6IGVkdS5kZWdyZWUgfHwgJycsIGZpZWxkOiBlZHUuZmllbGQgfHwgJycsIGluc3RpdHV0aW9uOiBlZHUuaW5zdGl0dXRpb24gfHwgJycsXG4gICAgICBjaXR5OiBsb2MuY2l0eSB8fCAnJywgc3RhdGU6IGxvYy5zdGF0ZSB8fCAnJyxcbiAgICAgIHN0YXJ0X3llYXI6IGVkdS5zdGFydF95ZWFyIHx8ICcnLCBlbmRfeWVhcjogZWR1LmVuZF95ZWFyIHx8ICcnLFxuICAgIH0pKTtcbiAgICByZXR1cm4gYFxuICAgICAgPHRyPlxuICAgICAgICA8dGQ+XG4gICAgICAgICAgPHN0cm9uZz4ke2RlZ3JlZX0ke2ZpZWxkID8gYCwgJHtmaWVsZH1gIDogJyd9PC9zdHJvbmc+PGJyPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IzQ3NTU2OTtcIj4ke2luc3RpdHV0aW9ufTwvc3Bhbj5cbiAgICAgICAgICAke2xvY2F0aW9uID8gYDxzcGFuIHN0eWxlPVwiY29sb3I6Izk0YTNiODtmb250LXNpemU6MC44NWVtO1wiPiBcdTAwQjcgJHtsb2NhdGlvbn08L3NwYW4+YCA6ICcnfVxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOiM0NzU1Njk7d2hpdGUtc3BhY2U6bm93cmFwO1wiPiR7eWVhcnMgfHwgJ1x1MjAxNCd9PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiYWN0aW9uLWJ0bnNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBvbmNsaWNrPVwiZWRpdE1hc3RlckVkdWNhdGlvbigke2VkdUpzb259LCAke2lkeH0pXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkVkaXQgZWR1Y2F0aW9uOiAke2luc3RpdHV0aW9ufVwiIHRpdGxlPVwiRWRpdFwiPlx1MjcwRlx1RkUwRjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJkZWxldGVNYXN0ZXJFZHVjYXRpb24oJHtpZHh9LCAnJHtpbnN0aXR1dGlvbn0nKVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWxldGUgZWR1Y2F0aW9uOiAke2luc3RpdHV0aW9ufVwiIHRpdGxlPVwiRGVsZXRlXCI+XHVEODNEXHVEREQxXHVGRTBGPC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPmA7XG4gIH0pLmpvaW4oJycpO1xuICByZXR1cm4gYFxuICAgIDx0YWJsZSBjbGFzcz1cInJldmlldy10YWJsZVwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aD5EZWdyZWUgLyBJbnN0aXR1dGlvbjwvdGg+XG4gICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MTAwcHg7XCI+WWVhcnM8L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjgwcHg7XCI+QWN0aW9uczwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PiR7cm93c308L3Rib2R5PlxuICAgIDwvdGFibGU+YDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWNhdGlvbnMgXHUyMDE0IENSVUQgKyByYXcgQmliVGVYIHRvZ2dsZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBDdXJyZW50IHZpZXcgbW9kZTogJ2NydWQnIHwgJ3JhdycgKi9cbmxldCBfcHViVmlld01vZGUgPSAnY3J1ZCc7XG5sZXQgX3B1YlNvcnRNb2RlID0gJ3llYXJfZGVzYyc7XG5sZXQgX3B1Ykdyb3VwTW9kZSA9ICdub25lJztcbi8qKiBUcnVlIHdoZW4gdGhlIGVudHJ5IGJlaW5nIGVkaXRlZCBoYWQgYW4gYGVkaXRvcmAgZmllbGQgYnV0IG5vIGBhdXRob3JgLiAqL1xubGV0IF9wdWJNb2RhbFVzZXNFZGl0b3JGaWVsZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiB0b2dnbGVQdWJsaWNhdGlvbnNWaWV3KCkge1xuICBfcHViVmlld01vZGUgPSBfcHViVmlld01vZGUgPT09ICdjcnVkJyA/ICdyYXcnIDogJ2NydWQnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1jcnVkLXZpZXcnKS5zdHlsZS5kaXNwbGF5ID0gX3B1YlZpZXdNb2RlID09PSAnY3J1ZCcgPyAnJyA6ICdub25lJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItcmF3LXZpZXcnKS5zdHlsZS5kaXNwbGF5ICA9IF9wdWJWaWV3TW9kZSA9PT0gJ3JhdycgID8gJycgOiAnbm9uZSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWFkZC1idG4nKS5zdHlsZS5kaXNwbGF5ICAgPSBfcHViVmlld01vZGUgPT09ICdjcnVkJyA/ICcnIDogJ25vbmUnO1xuICBjb25zdCBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi10b2dnbGUtYnRuJyk7XG4gIGlmIChidG4pIGJ0bi50ZXh0Q29udGVudCA9IF9wdWJWaWV3TW9kZSA9PT0gJ2NydWQnID8gJ1x1MjcwRlx1RkUwRiBSYXcgQmliVGVYJyA6ICdcdUQ4M0RcdURDQ0IgU3RydWN0dXJlZCBWaWV3JztcbiAgaWYgKF9wdWJWaWV3TW9kZSA9PT0gJ3JhdycpIGxvYWRQdWJsaWNhdGlvbnNCaWIoKTtcbn1cblxuLyoqIExvYWQgYm90aCBzdHJ1Y3R1cmVkIGxpc3QgYW5kIHJhdyBjb250ZW50IGZyb20gYSBzaW5nbGUgQVBJIGNhbGwuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkUHVibGljYXRpb25zKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9wdWJsaWNhdGlvbnMnKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgX3JlbmRlclB1YmxpY2F0aW9uc0NydWRMaXN0KGRhdGEucHVibGljYXRpb25zIHx8IFtdKTtcbiAgICAgIGNvbnN0IHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItdGV4dGFyZWEnKTtcbiAgICAgIGlmICh0YSkgdGEudmFsdWUgPSBkYXRhLmNvbnRlbnQgfHwgJyc7XG4gICAgICBfdXBkYXRlUHViQ291bnQoZGF0YS5jb3VudCA/PyAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItY3J1ZC1jb250YWluZXInKS5pbm5lckhUTUwgPVxuICAgICAgICBgPHAgc3R5bGU9XCJjb2xvcjojZWY0NDQ0O3BhZGRpbmc6MTJweCAwO1wiPlx1MjZBMFx1RkUwRiAke2VzY2FwZUh0bWwoZGF0YS5lcnJvciB8fCAnRmFpbGVkIHRvIGxvYWQnKX08L3A+YDtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNydWQtY29udGFpbmVyJykuaW5uZXJIVE1MID1cbiAgICAgIGA8cCBzdHlsZT1cImNvbG9yOiNlZjQ0NDQ7cGFkZGluZzoxMnB4IDA7XCI+XHUyNkEwXHVGRTBGIEZhaWxlZCB0byBsb2FkOiAke2VzY2FwZUh0bWwoZXJyLm1lc3NhZ2UpfTwvcD5gO1xuICB9XG59XG5cbi8qKiBSZWxvYWQgb25seSB0aGUgcmF3IHRleHRhcmVhIGNvbnRlbnQgKGNhbGxlZCB3aGVuIHN3aXRjaGluZyB0byByYXcgdmlldykuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkUHVibGljYXRpb25zQmliKCkge1xuICBjb25zdCB0YSAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi10ZXh0YXJlYScpO1xuICBjb25zdCBzdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1zdGF0dXMnKTtcbiAgaWYgKCF0YSkgcmV0dXJuO1xuICB0YS5kaXNhYmxlZCAgICA9IHRydWU7XG4gIHRhLnBsYWNlaG9sZGVyID0gJ0xvYWRpbmdcdTIwMjYnO1xuICBpZiAoc3RhdHVzKSBzdGF0dXMudGV4dENvbnRlbnQgPSAnJztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvcHVibGljYXRpb25zJyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIHRhLnZhbHVlID0gZGF0YS5jb250ZW50IHx8ICcnO1xuICAgICAgX3VwZGF0ZVB1YkNvdW50KGRhdGEuY291bnQgPz8gMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGF0dXMpIHN0YXR1cy50ZXh0Q29udGVudCA9ICdcdTI2QTBcdUZFMEYgJyArIChkYXRhLmVycm9yIHx8ICdGYWlsZWQgdG8gbG9hZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHN0YXR1cykgc3RhdHVzLnRleHRDb250ZW50ID0gJ1x1MjZBMFx1RkUwRiBGYWlsZWQgdG8gbG9hZDogJyArIGVyci5tZXNzYWdlO1xuICB9IGZpbmFsbHkge1xuICAgIHRhLmRpc2FibGVkICAgID0gZmFsc2U7XG4gICAgdGEucGxhY2Vob2xkZXIgPSAnJztcbiAgfVxufVxuXG5mdW5jdGlvbiBfdXBkYXRlUHViQ291bnQobikge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNvdW50Jyk7XG4gIGlmIChlbCkgZWwudGV4dENvbnRlbnQgPSBgJHtufSBwdWJsaWNhdGlvbiR7biAhPT0gMSA/ICdzJyA6ICcnfSBvbiBmaWxlYDtcbn1cblxuZnVuY3Rpb24gX3NldFB1YmxpY2F0aW9uU3RhdHVzKGVsZW1lbnRJZCwgdGV4dCwgY29sb3IgPSAnIzZiNzI4MCcpIHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuICBpZiAoIWVsKSByZXR1cm47XG4gIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgZWwuc3R5bGUuY29sb3IgPSBjb2xvcjtcbn1cblxuZnVuY3Rpb24gc2V0UHVibGljYXRpb25Tb3J0TW9kZShtb2RlKSB7XG4gIF9wdWJTb3J0TW9kZSA9IG1vZGUgfHwgJ3llYXJfZGVzYyc7XG4gIHZvaWQgbG9hZFB1YmxpY2F0aW9ucygpO1xufVxuXG5mdW5jdGlvbiBzZXRQdWJsaWNhdGlvbkdyb3VwTW9kZShtb2RlKSB7XG4gIF9wdWJHcm91cE1vZGUgPSBtb2RlIHx8ICdub25lJztcbiAgdm9pZCBsb2FkUHVibGljYXRpb25zKCk7XG59XG5cbmZ1bmN0aW9uIF9nZXRQdWJsaWNhdGlvblllYXIocHViKSB7XG4gIGNvbnN0IHJhd1llYXIgPSBwdWI/LmZpZWxkcz8ueWVhciA/PyBwdWI/LnllYXIgPz8gJyc7XG4gIGNvbnN0IG1hdGNoID0gU3RyaW5nKHJhd1llYXIpLm1hdGNoKC9cXGR7NH0vKTtcbiAgcmV0dXJuIG1hdGNoID8gTnVtYmVyKG1hdGNoWzBdKSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIF9jb21wYXJlUHVibGljYXRpb25zKGxlZnQsIHJpZ2h0KSB7XG4gIGNvbnN0IGxlZnRZZWFyID0gX2dldFB1YmxpY2F0aW9uWWVhcihsZWZ0KSA/PyAtSW5maW5pdHk7XG4gIGNvbnN0IHJpZ2h0WWVhciA9IF9nZXRQdWJsaWNhdGlvblllYXIocmlnaHQpID8/IC1JbmZpbml0eTtcbiAgY29uc3QgbGVmdFR5cGUgPSBTdHJpbmcobGVmdD8udHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgcmlnaHRUeXBlID0gU3RyaW5nKHJpZ2h0Py50eXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBsZWZ0S2V5ID0gU3RyaW5nKGxlZnQ/LmtleSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgcmlnaHRLZXkgPSBTdHJpbmcocmlnaHQ/LmtleSB8fCAnJykudG9Mb3dlckNhc2UoKTtcblxuICBzd2l0Y2ggKF9wdWJTb3J0TW9kZSkge1xuICAgIGNhc2UgJ3llYXJfYXNjJzpcbiAgICAgIHJldHVybiAobGVmdFllYXIgLSByaWdodFllYXIpIHx8IGxlZnRUeXBlLmxvY2FsZUNvbXBhcmUocmlnaHRUeXBlKSB8fCBsZWZ0S2V5LmxvY2FsZUNvbXBhcmUocmlnaHRLZXkpO1xuICAgIGNhc2UgJ3R5cGVfYXNjJzpcbiAgICAgIHJldHVybiBsZWZ0VHlwZS5sb2NhbGVDb21wYXJlKHJpZ2h0VHlwZSkgfHwgKHJpZ2h0WWVhciAtIGxlZnRZZWFyKSB8fCBsZWZ0S2V5LmxvY2FsZUNvbXBhcmUocmlnaHRLZXkpO1xuICAgIGNhc2UgJ3R5cGVfZGVzYyc6XG4gICAgICByZXR1cm4gcmlnaHRUeXBlLmxvY2FsZUNvbXBhcmUobGVmdFR5cGUpIHx8IChyaWdodFllYXIgLSBsZWZ0WWVhcikgfHwgbGVmdEtleS5sb2NhbGVDb21wYXJlKHJpZ2h0S2V5KTtcbiAgICBjYXNlICd5ZWFyX2Rlc2MnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gKHJpZ2h0WWVhciAtIGxlZnRZZWFyKSB8fCBsZWZ0VHlwZS5sb2NhbGVDb21wYXJlKHJpZ2h0VHlwZSkgfHwgbGVmdEtleS5sb2NhbGVDb21wYXJlKHJpZ2h0S2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfZ3JvdXBQdWJsaWNhdGlvbkxhYmVsKHB1Yikge1xuICBpZiAoX3B1Ykdyb3VwTW9kZSA9PT0gJ3llYXInKSB7XG4gICAgcmV0dXJuIFN0cmluZyhfZ2V0UHVibGljYXRpb25ZZWFyKHB1YikgPz8gJ1Vua25vd24geWVhcicpO1xuICB9XG4gIGlmIChfcHViR3JvdXBNb2RlID09PSAndHlwZScpIHtcbiAgICByZXR1cm4gcHViPy50eXBlID8gU3RyaW5nKHB1Yi50eXBlKSA6ICdVbmtub3duIHR5cGUnO1xuICB9XG4gIHJldHVybiAnUHVibGljYXRpb25zJztcbn1cblxuZnVuY3Rpb24gX3JlbmRlclB1YmxpY2F0aW9uc0NydWRMaXN0KHB1YnMpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItY3J1ZC1jb250YWluZXInKTtcbiAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgY29uc3QgY29udHJvbHNIdG1sID0gYFxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MTJweDtcIj5cbiAgICAgIDxsYWJlbCBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtjb2xvcjojNDc1NTY5O2ZvbnQtc2l6ZTowLjllbTtcIj5cbiAgICAgICAgU29ydFxuICAgICAgICA8c2VsZWN0IGlkPVwibWFzdGVyLXB1Yi1zb3J0LXNlbGVjdFwiIGNsYXNzPVwiZWRpdC1pbnB1dFwiIHN0eWxlPVwid2lkdGg6YXV0bzttaW4td2lkdGg6MTUwcHg7XCIgb25jaGFuZ2U9XCJzZXRQdWJsaWNhdGlvblNvcnRNb2RlKHRoaXMudmFsdWUpXCI+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInllYXJfZGVzY1wiICR7X3B1YlNvcnRNb2RlID09PSAneWVhcl9kZXNjJyA/ICdzZWxlY3RlZCcgOiAnJ30+WWVhciBuZXdlc3QgZmlyc3Q8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwieWVhcl9hc2NcIiAke19wdWJTb3J0TW9kZSA9PT0gJ3llYXJfYXNjJyA/ICdzZWxlY3RlZCcgOiAnJ30+WWVhciBvbGRlc3QgZmlyc3Q8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidHlwZV9hc2NcIiAke19wdWJTb3J0TW9kZSA9PT0gJ3R5cGVfYXNjJyA/ICdzZWxlY3RlZCcgOiAnJ30+VHlwZSBBXHUyMDEzWjwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ0eXBlX2Rlc2NcIiAke19wdWJTb3J0TW9kZSA9PT0gJ3R5cGVfZGVzYycgPyAnc2VsZWN0ZWQnIDogJyd9PlR5cGUgWlx1MjAxM0E8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2NvbG9yOiM0NzU1Njk7Zm9udC1zaXplOjAuOWVtO1wiPlxuICAgICAgICBHcm91cFxuICAgICAgICA8c2VsZWN0IGlkPVwibWFzdGVyLXB1Yi1ncm91cC1zZWxlY3RcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiBzdHlsZT1cIndpZHRoOmF1dG87bWluLXdpZHRoOjE0MHB4O1wiIG9uY2hhbmdlPVwic2V0UHVibGljYXRpb25Hcm91cE1vZGUodGhpcy52YWx1ZSlcIj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm9uZVwiICR7X3B1Ykdyb3VwTW9kZSA9PT0gJ25vbmUnID8gJ3NlbGVjdGVkJyA6ICcnfT5ObyBncm91cGluZzwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ5ZWFyXCIgJHtfcHViR3JvdXBNb2RlID09PSAneWVhcicgPyAnc2VsZWN0ZWQnIDogJyd9PkJ5IHllYXI8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidHlwZVwiICR7X3B1Ykdyb3VwTW9kZSA9PT0gJ3R5cGUnID8gJ3NlbGVjdGVkJyA6ICcnfT5CeSB0eXBlPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5gO1xuICBpZiAoIXB1YnMubGVuZ3RoKSB7XG4gICAgY29udGFpbmVyLmlubmVySFRNTCA9IGAke2NvbnRyb2xzSHRtbH08cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7cGFkZGluZzoxMnB4IDA7XCI+Tm8gcHVibGljYXRpb25zIG9uIGZpbGUuIENsaWNrIFwiKyBBZGQgUHVibGljYXRpb25cIiBhYm92ZSwgb3Igc3dpdGNoIHRvIFJhdyBCaWJUZVggdG8gcGFzdGUvaW1wb3J0IGVudHJpZXMuPC9wPmA7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNvcnRlZCA9IFsuLi5wdWJzXS5zb3J0KF9jb21wYXJlUHVibGljYXRpb25zKTtcbiAgY29uc3QgZ3JvdXBzID0gW107XG4gIGZvciAoY29uc3QgcHViIG9mIHNvcnRlZCkge1xuICAgIGNvbnN0IGxhYmVsID0gX2dyb3VwUHVibGljYXRpb25MYWJlbChwdWIpO1xuICAgIGxldCBncm91cCA9IGdyb3Vwcy5maW5kKChlbnRyeSkgPT4gZW50cnkubGFiZWwgPT09IGxhYmVsKTtcbiAgICBpZiAoIWdyb3VwKSB7XG4gICAgICBncm91cCA9IHsgbGFiZWwsIGl0ZW1zOiBbXSB9O1xuICAgICAgZ3JvdXBzLnB1c2goZ3JvdXApO1xuICAgIH1cbiAgICBncm91cC5pdGVtcy5wdXNoKHB1Yik7XG4gIH1cbiAgY29uc3Qgc2VjdGlvbkh0bWwgPSBncm91cHMubWFwKCh7IGxhYmVsLCBpdGVtcyB9KSA9PiB7XG4gICAgY29uc3QgaGVhZGluZ0h0bWwgPSBfcHViR3JvdXBNb2RlID09PSAnbm9uZSdcbiAgICAgID8gJydcbiAgICAgIDogYDxkaXYgc3R5bGU9XCJtYXJnaW46MTZweCAwIDhweDtmb250LXNpemU6MC45ZW07Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMzMzQxNTU7XCI+JHtlc2NhcGVIdG1sKGxhYmVsKX08L2Rpdj5gO1xuICAgIGNvbnN0IHJvd3MgPSBpdGVtcy5tYXAocHViID0+IHtcbiAgICBjb25zdCBrZXkgICAgICA9IGVzY2FwZUh0bWwocHViLmtleSB8fCAnJyk7XG4gICAgY29uc3QgdHlwZSAgICAgPSBlc2NhcGVIdG1sKHB1Yi50eXBlIHx8ICcnKTtcbiAgICBjb25zdCBjaXRhdGlvbiA9IGVzY2FwZUh0bWwoKHB1Yi5mb3JtYXR0ZWRfY2l0YXRpb24gfHwgJycpLnNsaWNlKDAsIDE2MCkpO1xuICAgIGNvbnN0IGZ1bGwgICAgID0gcHViLmZvcm1hdHRlZF9jaXRhdGlvbiB8fCAnJztcbiAgICBjb25zdCBwdWJKc29uICA9IGVzY2FwZUh0bWwoSlNPTi5zdHJpbmdpZnkocHViKSk7XG4gICAgcmV0dXJuIGBcbiAgICAgIDx0cj5cbiAgICAgICAgPHRkPlxuICAgICAgICAgIDxjb2RlIHN0eWxlPVwiZm9udC1zaXplOjAuOGVtO2NvbG9yOiM0NzU1Njk7XCI+JHtrZXl9PC9jb2RlPlxuICAgICAgICAgICR7Y2l0YXRpb24gPyBgPGJyPjxzbWFsbCBzdHlsZT1cImNvbG9yOiM2YjcyODA7XCI+JHtjaXRhdGlvbn0ke2Z1bGwubGVuZ3RoID4gMTYwID8gJ1x1MjAyNicgOiAnJ308L3NtYWxsPmAgOiAnJ31cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzQ3NTU2OTtmb250LXNpemU6MC44NWVtO1wiPiR7dHlwZX08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb24tYnRuc1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJlZGl0TWFzdGVyUHVibGljYXRpb24oJHtwdWJKc29ufSlcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRWRpdCBwdWJsaWNhdGlvbjogJHtrZXl9XCIgdGl0bGU9XCJFZGl0XCI+XHUyNzBGXHVGRTBGPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgb25jbGljaz1cImRlbGV0ZU1hc3RlclB1YmxpY2F0aW9uKCcke2tleX0nKVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWxldGUgcHVibGljYXRpb246ICR7a2V5fVwiIHRpdGxlPVwiRGVsZXRlXCI+XHVEODNEXHVEREQxXHVGRTBGPC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPmA7XG4gICAgfSkuam9pbignJyk7XG4gICAgcmV0dXJuIGAke2hlYWRpbmdIdG1sfVxuICAgIDx0YWJsZSBjbGFzcz1cInJldmlldy10YWJsZVwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aD5QdWJsaWNhdGlvbjwvdGg+XG4gICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MTEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7XCI+VHlwZTwvdGg+XG4gICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6ODBweDtcIj5BY3Rpb25zPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+JHtyb3dzfTwvdGJvZHk+XG4gICAgPC90YWJsZT5gO1xuICB9KS5qb2luKCcnKTtcbiAgY29udGFpbmVyLmlubmVySFRNTCA9IGAke2NvbnRyb2xzSHRtbH0ke3NlY3Rpb25IdG1sfWA7XG59XG5cbi8qKiBWYWxpZGF0ZSBCaWJUZVggaW4gdGhlIHRleHRhcmVhIHdpdGhvdXQgc2F2aW5nLiAqL1xuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVQdWJsaWNhdGlvbnNCaWIoKSB7XG4gIGNvbnN0IHRhICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLXRleHRhcmVhJyk7XG4gIGNvbnN0IHN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLXN0YXR1cycpO1xuICBpZiAoIXRhIHx8ICFzdGF0dXMpIHJldHVybjtcbiAgY29uc3QgdGV4dCA9IHRhLnZhbHVlO1xuICBpZiAoIXRleHQudHJpbSgpKSB7XG4gICAgc3RhdHVzLnRleHRDb250ZW50ID0gJ1x1MjEzOVx1RkUwRiBFbXB0eSBcdTIwMTQgbm90aGluZyB0byB2YWxpZGF0ZS4nO1xuICAgIHN0YXR1cy5zdHlsZS5jb2xvciA9ICcjNmI3MjgwJztcbiAgICByZXR1cm47XG4gIH1cbiAgc3RhdHVzLnRleHRDb250ZW50ID0gJ1x1RDgzRFx1REQwRCBWYWxpZGF0aW5nXHUyMDI2JztcbiAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJyM2YjcyODAnO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9wdWJsaWNhdGlvbnMvdmFsaWRhdGUnLCB7XG4gICAgICBtZXRob2Q6ICAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6ICAgIEpTT04uc3RyaW5naWZ5KHsgYmlidGV4X3RleHQ6IHRleHQgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNvbnN0IG4gPSBkYXRhLmNvdW50ID8/IDA7XG4gICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSBgXHUyNzA1IFZhbGlkIFx1MjAxNCAke259IGVudHIke24gIT09IDEgPyAnaWVzJyA6ICd5J30gZm91bmQuYDtcbiAgICAgIHN0YXR1cy5zdHlsZS5jb2xvciA9ICcjMTU4MDNkJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gJ1x1Mjc0QyAnICsgKGRhdGEuZXJyb3IgfHwgJ1ZhbGlkYXRpb24gZmFpbGVkJyk7XG4gICAgICBzdGF0dXMuc3R5bGUuY29sb3IgPSAnI2RjMjYyNic7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAnXHUyNzRDICcgKyBlcnIubWVzc2FnZTtcbiAgICBzdGF0dXMuc3R5bGUuY29sb3IgPSAnI2RjMjYyNic7XG4gIH1cbn1cblxuLyoqIFNhdmUgcmF3IEJpYlRlWCAodmFsaWRhdGVzIHNlcnZlci1zaWRlIGJlZm9yZSB3cml0aW5nKS4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNhdmVQdWJsaWNhdGlvbnNCaWIoKSB7XG4gIGNvbnN0IHRhICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLXRleHRhcmVhJyk7XG4gIGNvbnN0IHN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLXN0YXR1cycpO1xuICBjb25zdCBidG4gICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1zYXZlLWJ0bicpO1xuICBpZiAoIXRhKSByZXR1cm47XG4gIGNvbnN0IGNvbnRlbnQgPSB0YS52YWx1ZTtcbiAgaWYgKGJ0bikgeyBidG4uZGlzYWJsZWQgPSB0cnVlOyBidG4udGV4dENvbnRlbnQgPSAnXHUyM0YzIFNhdmluZ1x1MjAyNic7IH1cbiAgaWYgKHN0YXR1cykgeyBzdGF0dXMudGV4dENvbnRlbnQgPSAnJzsgc3RhdHVzLnN0eWxlLmNvbG9yID0gJyM2YjcyODAnOyB9XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL3B1YmxpY2F0aW9ucycsIHtcbiAgICAgIG1ldGhvZDogICdQVVQnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiAgICBKU09OLnN0cmluZ2lmeSh7IGNvbnRlbnQgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNvbnN0IG4gPSBkYXRhLmNvdW50ID8/IDA7XG4gICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9IGBcdTI3MDUgU2F2ZWQgXHUyMDE0ICR7bn0gZW50ciR7biAhPT0gMSA/ICdpZXMnIDogJ3knfSBwYXJzZWQuYDtcbiAgICAgICAgc3RhdHVzLnN0eWxlLmNvbG9yID0gJyMxNTgwM2QnO1xuICAgICAgfVxuICAgICAgX3VwZGF0ZVB1YkNvdW50KG4pO1xuICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnUHVibGljYXRpb25zJywgJ3VwZGF0ZWQnKTtcbiAgICAgIC8vIFJlZnJlc2ggQ1JVRCBsaXN0IHRvIHN0YXkgaW4gc3luY1xuICAgICAgYXdhaXQgbG9hZFB1YmxpY2F0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9ICdcdTI3NEMgJyArIChkYXRhLmVycm9yIHx8ICdTYXZlIGZhaWxlZCcpO1xuICAgICAgICBzdGF0dXMuc3R5bGUuY29sb3IgPSAnI2RjMjYyNic7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoc3RhdHVzKSB7XG4gICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAnXHUyNzRDICcgKyBlcnIubWVzc2FnZTtcbiAgICAgIHN0YXR1cy5zdHlsZS5jb2xvciA9ICcjZGMyNjI2JztcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGJ0bikgeyBidG4uZGlzYWJsZWQgPSBmYWxzZTsgYnRuLnRleHRDb250ZW50ID0gJ1x1RDgzRFx1RENCRSBTYXZlJzsgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNob3dJbXBvcnRQdWJsaWNhdGlvbnNNb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItaW1wb3J0LXRleHRhcmVhJykudmFsdWUgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItaW1wb3J0LW92ZXJ3cml0ZScpLmNoZWNrZWQgPSBmYWxzZTtcbiAgX3NldFB1YmxpY2F0aW9uU3RhdHVzKCdtYXN0ZXItcHViLWltcG9ydC1zdGF0dXMnLCAnJyk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWltcG9ydC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1wdWItaW1wb3J0LW1vZGFsLW92ZXJsYXknKTtcbiAgdHJhcEZvY3VzKCdtYXN0ZXItcHViLWltcG9ydC1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlSW1wb3J0UHVibGljYXRpb25zTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWltcG9ydC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVzdG9yZUZvY3VzKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFB1YmxpY2F0aW9uc0JpYigpIHtcbiAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1pbXBvcnQtdGV4dGFyZWEnKTtcbiAgY29uc3Qgb3ZlcndyaXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItaW1wb3J0LW92ZXJ3cml0ZScpO1xuICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1pbXBvcnQtc3VibWl0LWJ0bicpO1xuICBpZiAoIXRleHRhcmVhKSByZXR1cm47XG4gIGNvbnN0IGJpYnRleFRleHQgPSB0ZXh0YXJlYS52YWx1ZS50cmltKCk7XG4gIGlmICghYmlidGV4VGV4dCkge1xuICAgIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1pbXBvcnQtc3RhdHVzJywgJ1x1MjZBMFx1RkUwRiBQYXN0ZSBCaWJUZVggZW50cmllcyB0byBpbXBvcnQuJywgJyNkYzI2MjYnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGJ1dHRvbikge1xuICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgYnV0dG9uLnRleHRDb250ZW50ID0gJ1x1MjNGMyBJbXBvcnRpbmdcdTIwMjYnO1xuICB9XG4gIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1pbXBvcnQtc3RhdHVzJywgJ0ltcG9ydGluZyBCaWJUZVhcdTIwMjYnKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9wdWJsaWNhdGlvbnMvaW1wb3J0Jywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgYmlidGV4X3RleHQ6IGJpYnRleFRleHQsXG4gICAgICAgIG92ZXJ3cml0ZTogQm9vbGVhbihvdmVyd3JpdGU/LmNoZWNrZWQpLFxuICAgICAgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gW1xuICAgICAgICBgJHtkYXRhLmFkZGVkIHx8IDB9IGFkZGVkYCxcbiAgICAgICAgYCR7ZGF0YS51cGRhdGVkIHx8IDB9IHVwZGF0ZWRgLFxuICAgICAgICBgJHtkYXRhLnNraXBwZWQgfHwgMH0gc2tpcHBlZGAsXG4gICAgICBdO1xuICAgICAgaWYgKGRhdGEuaW52YWxpZCkgcGFydHMucHVzaChgJHtkYXRhLmludmFsaWR9IHJlamVjdGVkIChtaXNzaW5nIHJlcXVpcmVkIGZpZWxkcylgKTtcbiAgICAgIGNvbnN0IHNraXBwZWREZXRhaWwgPSAoZGF0YS5za2lwcGVkX2tleXM/Lmxlbmd0aClcbiAgICAgICAgPyBgXFxuXFxuU2tpcHBlZCAoYWxyZWFkeSBleGlzdCBcdTIwMTQgZW5hYmxlIFwiT3ZlcndyaXRlXCIgdG8gdXBkYXRlKTpcXG5cdTIwMjIgJHtkYXRhLnNraXBwZWRfa2V5cy5qb2luKCdcXG5cdTIwMjIgJyl9YFxuICAgICAgICA6ICcnO1xuICAgICAgY29uc3QgaW52YWxpZERldGFpbCA9IChkYXRhLmludmFsaWRfa2V5cz8ubGVuZ3RoKVxuICAgICAgICA/IGBcXG5cXG5SZWplY3RlZCAobWlzc2luZyB0aXRsZSwgeWVhciwgb3IgYXV0aG9yKTpcXG5cdTIwMjIgJHtkYXRhLmludmFsaWRfa2V5cy5qb2luKCdcXG5cdTIwMjIgJyl9YFxuICAgICAgICA6ICcnO1xuICAgICAgX3NldFB1YmxpY2F0aW9uU3RhdHVzKCdtYXN0ZXItcHViLWltcG9ydC1zdGF0dXMnLCBgXHUyNzA1IEltcG9ydGVkOiAke3BhcnRzLmpvaW4oJywgJyl9LmAsICcjMTU4MDNkJyk7XG4gICAgICBfc2V0TWFzdGVyQ2hhbmdlTm90aWNlKCdQdWJsaWNhdGlvbnMnLCAnaW1wb3J0ZWQnKTtcbiAgICAgIGF3YWl0IGxvYWRQdWJsaWNhdGlvbnMoKTtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3MDUgSW1wb3J0ZWQnLCBgSW1wb3J0ZWQgQmliVGVYIGVudHJpZXM6ICR7cGFydHMuam9pbignLCAnKX0uJHtza2lwcGVkRGV0YWlsfSR7aW52YWxpZERldGFpbH1gKTtcbiAgICAgIGNsb3NlSW1wb3J0UHVibGljYXRpb25zTW9kYWwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3NldFB1YmxpY2F0aW9uU3RhdHVzKCdtYXN0ZXItcHViLWltcG9ydC1zdGF0dXMnLCBgXHUyNzRDICR7ZGF0YS5lcnJvciB8fCAnSW1wb3J0IGZhaWxlZCd9YCwgJyNkYzI2MjYnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1pbXBvcnQtc3RhdHVzJywgYFx1Mjc0QyAke2Vyci5tZXNzYWdlfWAsICcjZGMyNjI2Jyk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICBidXR0b24udGV4dENvbnRlbnQgPSAnSW1wb3J0JztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvd0NvbnZlcnRQdWJsaWNhdGlvbnNNb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItY29udmVydC1pbnB1dCcpLnZhbHVlID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNvbnZlcnQtb3V0cHV0JykudmFsdWUgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItY29udmVydC1vdmVyd3JpdGUnKS5jaGVja2VkID0gZmFsc2U7XG4gIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1jb252ZXJ0LXN0YXR1cycsICcnKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItY29udmVydC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1wdWItY29udmVydC1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbWFzdGVyLXB1Yi1jb252ZXJ0LW1vZGFsLW92ZXJsYXknKTtcbn1cblxuZnVuY3Rpb24gY2xvc2VDb252ZXJ0UHVibGljYXRpb25zTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNvbnZlcnQtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0UHVibGljYXRpb25UZXh0KCkge1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLWNvbnZlcnQtaW5wdXQnKTtcbiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItY29udmVydC1vdXRwdXQnKTtcbiAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItY29udmVydC1zdWJtaXQtYnRuJyk7XG4gIGlmICghaW5wdXQgfHwgIW91dHB1dCkgcmV0dXJuO1xuICBjb25zdCB0ZXh0ID0gaW5wdXQudmFsdWUudHJpbSgpO1xuICBpZiAoIXRleHQpIHtcbiAgICBfc2V0UHVibGljYXRpb25TdGF0dXMoJ21hc3Rlci1wdWItY29udmVydC1zdGF0dXMnLCAnXHUyNkEwXHVGRTBGIFBhc3RlIGNpdGF0aW9uIHRleHQgdG8gY29udmVydC4nLCAnI2RjMjYyNicpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoYnV0dG9uKSB7XG4gICAgYnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICBidXR0b24udGV4dENvbnRlbnQgPSAnXHUyM0YzIEdlbmVyYXRpbmdcdTIwMjYnO1xuICB9XG4gIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1jb252ZXJ0LXN0YXR1cycsICdHZW5lcmF0aW5nIEJpYlRlWCBwcmV2aWV3XHUyMDI2Jyk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvcHVibGljYXRpb25zL2NvbnZlcnQnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB0ZXh0IH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBvdXRwdXQudmFsdWUgPSBkYXRhLmJpYnRleCB8fCAnJztcbiAgICAgIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1jb252ZXJ0LXN0YXR1cycsICdcdTI3MDUgUmV2aWV3IHRoZSBnZW5lcmF0ZWQgQmliVGVYLCB0aGVuIGltcG9ydCBpdCBpZiBpdCBsb29rcyBjb3JyZWN0LicsICcjMTU4MDNkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1jb252ZXJ0LXN0YXR1cycsIGBcdTI3NEMgJHtkYXRhLmVycm9yIHx8ICdDb252ZXJzaW9uIGZhaWxlZCd9YCwgJyNkYzI2MjYnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1jb252ZXJ0LXN0YXR1cycsIGBcdTI3NEMgJHtlcnIubWVzc2FnZX1gLCAnI2RjMjYyNicpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gJ0dlbmVyYXRlIEJpYlRlWCc7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydENvbnZlcnRlZFB1YmxpY2F0aW9uVGV4dCgpIHtcbiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItY29udmVydC1vdXRwdXQnKTtcbiAgY29uc3Qgb3ZlcndyaXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItY29udmVydC1vdmVyd3JpdGUnKTtcbiAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItY29udmVydC1pbXBvcnQtYnRuJyk7XG4gIGlmICghb3V0cHV0KSByZXR1cm47XG4gIGNvbnN0IGJpYnRleFRleHQgPSBvdXRwdXQudmFsdWUudHJpbSgpO1xuICBpZiAoIWJpYnRleFRleHQpIHtcbiAgICBfc2V0UHVibGljYXRpb25TdGF0dXMoJ21hc3Rlci1wdWItY29udmVydC1zdGF0dXMnLCAnXHUyNkEwXHVGRTBGIEdlbmVyYXRlIG9yIGVkaXQgQmliVGVYIGJlZm9yZSBpbXBvcnRpbmcuJywgJyNkYzI2MjYnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGJ1dHRvbikge1xuICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgYnV0dG9uLnRleHRDb250ZW50ID0gJ1x1MjNGMyBJbXBvcnRpbmdcdTIwMjYnO1xuICB9XG4gIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1jb252ZXJ0LXN0YXR1cycsICdJbXBvcnRpbmcgcmV2aWV3ZWQgQmliVGVYXHUyMDI2Jyk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvcHVibGljYXRpb25zL2ltcG9ydCcsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGJpYnRleF90ZXh0OiBiaWJ0ZXhUZXh0LFxuICAgICAgICBvdmVyd3JpdGU6IEJvb2xlYW4ob3ZlcndyaXRlPy5jaGVja2VkKSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IFtcbiAgICAgICAgYCR7ZGF0YS5hZGRlZCB8fCAwfSBhZGRlZGAsXG4gICAgICAgIGAke2RhdGEudXBkYXRlZCB8fCAwfSB1cGRhdGVkYCxcbiAgICAgICAgYCR7ZGF0YS5za2lwcGVkIHx8IDB9IHNraXBwZWRgLFxuICAgICAgXTtcbiAgICAgIGlmIChkYXRhLmludmFsaWQpIHBhcnRzLnB1c2goYCR7ZGF0YS5pbnZhbGlkfSByZWplY3RlZCAobWlzc2luZyByZXF1aXJlZCBmaWVsZHMpYCk7XG4gICAgICBjb25zdCBza2lwcGVkRGV0YWlsID0gKGRhdGEuc2tpcHBlZF9rZXlzPy5sZW5ndGgpXG4gICAgICAgID8gYFxcblxcblNraXBwZWQgKGFscmVhZHkgZXhpc3QgXHUyMDE0IGVuYWJsZSBcIk92ZXJ3cml0ZVwiIHRvIHVwZGF0ZSk6XFxuXHUyMDIyICR7ZGF0YS5za2lwcGVkX2tleXMuam9pbignXFxuXHUyMDIyICcpfWBcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IGludmFsaWREZXRhaWwgPSAoZGF0YS5pbnZhbGlkX2tleXM/Lmxlbmd0aClcbiAgICAgICAgPyBgXFxuXFxuUmVqZWN0ZWQgKG1pc3NpbmcgdGl0bGUsIHllYXIsIG9yIGF1dGhvcik6XFxuXHUyMDIyICR7ZGF0YS5pbnZhbGlkX2tleXMuam9pbignXFxuXHUyMDIyICcpfWBcbiAgICAgICAgOiAnJztcbiAgICAgIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1jb252ZXJ0LXN0YXR1cycsIGBcdTI3MDUgSW1wb3J0ZWQgcHJldmlldzogJHtwYXJ0cy5qb2luKCcsICcpfS5gLCAnIzE1ODAzZCcpO1xuICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnUHVibGljYXRpb25zJywgJ2ltcG9ydGVkJyk7XG4gICAgICBhd2FpdCBsb2FkUHVibGljYXRpb25zKCk7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IEltcG9ydGVkJywgYEltcG9ydGVkIGdlbmVyYXRlZCBCaWJUZVg6ICR7cGFydHMuam9pbignLCAnKX0uJHtza2lwcGVkRGV0YWlsfSR7aW52YWxpZERldGFpbH1gKTtcbiAgICAgIGNsb3NlQ29udmVydFB1YmxpY2F0aW9uc01vZGFsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9zZXRQdWJsaWNhdGlvblN0YXR1cygnbWFzdGVyLXB1Yi1jb252ZXJ0LXN0YXR1cycsIGBcdTI3NEMgJHtkYXRhLmVycm9yIHx8ICdJbXBvcnQgZmFpbGVkJ31gLCAnI2RjMjYyNicpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX3NldFB1YmxpY2F0aW9uU3RhdHVzKCdtYXN0ZXItcHViLWNvbnZlcnQtc3RhdHVzJywgYFx1Mjc0QyAke2Vyci5tZXNzYWdlfWAsICcjZGMyNjI2Jyk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICBidXR0b24udGV4dENvbnRlbnQgPSAnSW1wb3J0IFByZXZpZXcnO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tIFB1YmxpY2F0aW9uIGFkZC9lZGl0IG1vZGFsIC0tLS1cblxuZnVuY3Rpb24gc2hvd0FkZFB1YmxpY2F0aW9uTW9kYWwoKSB7XG4gIF9wdWJNb2RhbFVzZXNFZGl0b3JGaWVsZCA9IGZhbHNlO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWtleScpLnZhbHVlICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwtdHlwZScpLnZhbHVlICAgPSAnYXJ0aWNsZSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwtYXV0aG9yJykudmFsdWUgPSAnJztcbiAgY29uc3QgYXV0aG9yTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWF1dGhvci1sYWJlbCcpO1xuICBpZiAoYXV0aG9yTGFiZWwpIGF1dGhvckxhYmVsLnRleHRDb250ZW50ID0gJ0F1dGhvcihzKSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwtdGl0bGUnKS52YWx1ZSAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC15ZWFyJykudmFsdWUgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWpvdXJuYWwnKS52YWx1ZSA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWRvaScpLnZhbHVlICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwtZXh0cmEnKS52YWx1ZSAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1rZXknKS5kaXNhYmxlZCA9IGZhbHNlO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLXRpdGxlLWhlYWRpbmcnKS50ZXh0Q29udGVudCA9ICdBZGQgUHVibGljYXRpb24nO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXB1Yi1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1wdWItbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1wdWItbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBlZGl0TWFzdGVyUHVibGljYXRpb24ocHViKSB7XG4gIGNvbnN0IGZpZWxkcyA9IHB1Yi5maWVsZHMgfHwge307XG4gIC8vIFRyYWNrIHdoZXRoZXIgdGhpcyBlbnRyeSB1c2VzIGBlZGl0b3JgIHNvIHdlIHByZXNlcnZlIGl0IG9uIHNhdmVcbiAgX3B1Yk1vZGFsVXNlc0VkaXRvckZpZWxkID0gIWZpZWxkcy5hdXRob3IgJiYgISFmaWVsZHMuZWRpdG9yO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWtleScpLnZhbHVlICAgICA9IHB1Yi5rZXkgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwtdHlwZScpLnZhbHVlICAgID0gcHViLnR5cGUgfHwgJ2FydGljbGUnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWF1dGhvcicpLnZhbHVlICA9IGZpZWxkcy5hdXRob3IgfHwgZmllbGRzLmVkaXRvciB8fCAnJztcbiAgLy8gVXBkYXRlIHRoZSBBdXRob3IvRWRpdG9yIGxhYmVsIHNvIHRoZSB1c2VyIGtub3dzIHdoaWNoIGZpZWxkIGlzIGJlaW5nIGVkaXRlZFxuICBjb25zdCBhdXRob3JMYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwtYXV0aG9yLWxhYmVsJyk7XG4gIGlmIChhdXRob3JMYWJlbCkgYXV0aG9yTGFiZWwudGV4dENvbnRlbnQgPSBfcHViTW9kYWxVc2VzRWRpdG9yRmllbGQgPyAnRWRpdG9yKHMpJyA6ICdBdXRob3IocyknO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLXRpdGxlJykudmFsdWUgICA9IGZpZWxkcy50aXRsZSB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC15ZWFyJykudmFsdWUgICAgPSBmaWVsZHMueWVhciB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1qb3VybmFsJykudmFsdWUgPSBmaWVsZHMuam91cm5hbCB8fCBmaWVsZHMuYm9va3RpdGxlIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWRvaScpLnZhbHVlICAgICA9IGZpZWxkcy5kb2kgfHwgJyc7XG4gIC8vIEV4dHJhOiByZW1haW5pbmcgbm9uLXN0YW5kYXJkIGZpZWxkcyBhcyBrZXk9dmFsdWUgbGluZXNcbiAgY29uc3Qga25vd24gPSBuZXcgU2V0KFsnYXV0aG9yJywnZWRpdG9yJywndGl0bGUnLCd5ZWFyJywnam91cm5hbCcsJ2Jvb2t0aXRsZScsJ2RvaSddKTtcbiAgY29uc3QgZXh0cmEgPSBPYmplY3QuZW50cmllcyhmaWVsZHMpXG4gICAgLmZpbHRlcigoW2tdKSA9PiAha25vd24uaGFzKGspKVxuICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApXG4gICAgLmpvaW4oJ1xcbicpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWV4dHJhJykudmFsdWUgICA9IGV4dHJhO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWtleScpLmRpc2FibGVkICA9IHRydWU7ICAvLyBrZXkgaXMgaW1tdXRhYmxlIG9uIGVkaXRcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC10aXRsZS1oZWFkaW5nJykudGV4dENvbnRlbnQgPSAnRWRpdCBQdWJsaWNhdGlvbic7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItcHViLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHNldEluaXRpYWxGb2N1cygnbWFzdGVyLXB1Yi1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbWFzdGVyLXB1Yi1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlUHVibGljYXRpb25Nb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1wdWItbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlTWFzdGVyUHVibGljYXRpb24oKSB7XG4gIGNvbnN0IGtleUVsICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwta2V5Jyk7XG4gIGNvbnN0IGtleSAgICA9IGtleUVsLnZhbHVlLnRyaW0oKTtcbiAgY29uc3QgYWN0aW9uID0ga2V5RWwuZGlzYWJsZWQgPyAndXBkYXRlJyA6ICdhZGQnO1xuICBpZiAoIWtleSkgeyBzaG93QWxlcnRNb2RhbCgnXHUyNkEwXHVGRTBGIFZhbGlkYXRpb24nLCAnQ2l0ZSBrZXkgaXMgcmVxdWlyZWQuJyk7IHJldHVybjsgfVxuICBjb25zdCB0eXBlICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLXR5cGUnKS52YWx1ZS50cmltKCkgfHwgJ2FydGljbGUnO1xuICBjb25zdCBhdXRob3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWF1dGhvcicpLnZhbHVlLnRyaW0oKTtcbiAgY29uc3QgdGl0bGUgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC10aXRsZScpLnZhbHVlLnRyaW0oKTtcbiAgY29uc3QgeWVhciAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC15ZWFyJykudmFsdWUudHJpbSgpO1xuICBpZiAoIXRpdGxlKSAgeyBzaG93QWxlcnRNb2RhbCgnXHUyNkEwXHVGRTBGIFZhbGlkYXRpb24nLCAnVGl0bGUgaXMgcmVxdWlyZWQuJyk7IHJldHVybjsgfVxuICBpZiAoIXllYXIpICAgeyBzaG93QWxlcnRNb2RhbCgnXHUyNkEwXHVGRTBGIFZhbGlkYXRpb24nLCAnWWVhciBpcyByZXF1aXJlZC4nKTsgcmV0dXJuOyB9XG4gIGlmICghYXV0aG9yKSB7IHNob3dBbGVydE1vZGFsKCdcdTI2QTBcdUZFMEYgVmFsaWRhdGlvbicsICdBdXRob3Igb3IgZWRpdG9yIGlzIHJlcXVpcmVkLicpOyByZXR1cm47IH1cbiAgLy8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIGZpZWxkIG5hbWU6IGVkaXRvciBlbnRyaWVzIG11c3Qgbm90IGJlIHNhdmVkIGFzIGF1dGhvclxuICBjb25zdCBmaWVsZHMgPSBfcHViTW9kYWxVc2VzRWRpdG9yRmllbGQgPyB7IGVkaXRvcjogYXV0aG9yLCB0aXRsZSwgeWVhciB9IDogeyBhdXRob3IsIHRpdGxlLCB5ZWFyIH07XG4gIGNvbnN0IGpvdXJuYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHViLW1vZGFsLWpvdXJuYWwnKS52YWx1ZS50cmltKCk7XG4gIGlmIChqb3VybmFsKSB7XG4gICAgZmllbGRzW3R5cGUgPT09ICdpbnByb2NlZWRpbmdzJyA/ICdib29rdGl0bGUnIDogJ2pvdXJuYWwnXSA9IGpvdXJuYWw7XG4gIH1cbiAgY29uc3QgZG9pID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1Yi1tb2RhbC1kb2knKS52YWx1ZS50cmltKCk7XG4gIGlmIChkb2kpIGZpZWxkcy5kb2kgPSBkb2k7XG4gIC8vIFBhcnNlIGV4dHJhIGZpZWxkcyAoa2V5PXZhbHVlIHBlciBsaW5lKVxuICBjb25zdCBleHRyYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWItbW9kYWwtZXh0cmEnKS52YWx1ZTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGV4dHJhLnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IGVxID0gbGluZS5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGVxID4gMCkge1xuICAgICAgY29uc3QgayA9IGxpbmUuc2xpY2UoMCwgZXEpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHYgPSBsaW5lLnNsaWNlKGVxICsgMSkudHJpbSgpO1xuICAgICAgaWYgKGsgJiYgdikgZmllbGRzW2tdID0gdjtcbiAgICB9XG4gIH1cbiAgY29uc3QgYm9keSA9IHsgYWN0aW9uLCBrZXksIHR5cGUsIGZpZWxkcyB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9wdWJsaWNhdGlvbicsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSwgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNsb3NlUHVibGljYXRpb25Nb2RhbCgpO1xuICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnUHVibGljYXRpb25zJywgZGF0YS5hY3Rpb24gfHwgJ3VwZGF0ZWQnKTtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3MDUgU2F2ZWQnLCBgUHVibGljYXRpb24gXCIke2tleX1cIiAke2RhdGEuYWN0aW9ufS5gKTtcbiAgICAgIGF3YWl0IGxvYWRQdWJsaWNhdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGRhdGEuZXJyb3IgfHwgJ1NhdmUgZmFpbGVkJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gc2F2ZSBwdWJsaWNhdGlvbicpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZU1hc3RlclB1YmxpY2F0aW9uKGtleSkge1xuICBzaG93Q29uZmlybU1vZGFsKFxuICAgICdcdUQ4M0RcdURERDFcdUZFMEYgRGVsZXRlIFB1YmxpY2F0aW9uJyxcbiAgICBgRGVsZXRlIFwiJHtrZXl9XCI/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS5gLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9wdWJsaWNhdGlvbicsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY3Rpb246ICdkZWxldGUnLCBrZXkgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgaWYgKGRhdGEub2spIHtcbiAgICAgICAgICBfc2V0TWFzdGVyQ2hhbmdlTm90aWNlKCdQdWJsaWNhdGlvbnMnLCAnZGVsZXRlZCcpO1xuICAgICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3MDUgRGVsZXRlZCcsIGBQdWJsaWNhdGlvbiBcIiR7a2V5fVwiIHJlbW92ZWQuYCk7XG4gICAgICAgICAgYXdhaXQgbG9hZFB1YmxpY2F0aW9ucygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdEZWxldGUgZmFpbGVkJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gZGVsZXRlIHB1YmxpY2F0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyQXdhcmRzTGlzdChhd2FyZHMpIHtcbiAgaWYgKCFhd2FyZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICc8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7cGFkZGluZzoxMnB4IDA7XCI+Tm8gYXdhcmRzIG9uIGZpbGUuIENsaWNrIFwiKyBBZGQgQXdhcmRcIiBhYm92ZS48L3A+JztcbiAgfVxuICBjb25zdCByb3dzID0gYXdhcmRzLm1hcCgoYXdhcmQsIGlkeCkgPT4ge1xuICAgIGNvbnN0IHRpdGxlID0gZXNjYXBlSHRtbChhd2FyZC50aXRsZSB8fCAnJyk7XG4gICAgY29uc3QgeWVhciAgPSBhd2FyZC55ZWFyID8gU3RyaW5nKGF3YXJkLnllYXIpIDogJ1x1MjAxNCc7XG4gICAgY29uc3QgZGVzYyAgPSBlc2NhcGVIdG1sKChhd2FyZC5kZXNjcmlwdGlvbiB8fCAnJykuc2xpY2UoMCwgMTAwKSk7XG4gICAgY29uc3QgYXdhcmRKc29uID0gZXNjYXBlSHRtbChKU09OLnN0cmluZ2lmeSh7XG4gICAgICB0aXRsZTogYXdhcmQudGl0bGUgfHwgJycsIHllYXI6IGF3YXJkLnllYXIgfHwgJycsXG4gICAgICBkZXNjcmlwdGlvbjogYXdhcmQuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICByZWxldmFudF9mb3I6IChhd2FyZC5yZWxldmFudF9mb3IgfHwgW10pLmpvaW4oJywgJyksXG4gICAgfSkpO1xuICAgIHJldHVybiBgXG4gICAgICA8dHI+XG4gICAgICAgIDx0ZD5cbiAgICAgICAgICA8c3Ryb25nPiR7dGl0bGV9PC9zdHJvbmc+XG4gICAgICAgICAgJHtkZXNjID8gYDxicj48c21hbGwgc3R5bGU9XCJjb2xvcjojNmI3MjgwO1wiPiR7ZGVzY30keyhhd2FyZC5kZXNjcmlwdGlvbnx8JycpLmxlbmd0aCA+IDEwMCA/ICdcdTIwMjYnIDogJyd9PC9zbWFsbD5gIDogJyd9XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM0NzU1Njk7XCI+JHt5ZWFyfTwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImFjdGlvbi1idG5zXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgb25jbGljaz1cImVkaXRNYXN0ZXJBd2FyZCgke2F3YXJkSnNvbn0sICR7aWR4fSlcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRWRpdCBhd2FyZDogJHt0aXRsZX1cIiB0aXRsZT1cIkVkaXRcIj5cdTI3MEZcdUZFMEY8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBvbmNsaWNrPVwiZGVsZXRlTWFzdGVyQXdhcmQoJHtpZHh9LCAnJHt0aXRsZX0nKVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWxldGUgYXdhcmQ6ICR7dGl0bGV9XCIgdGl0bGU9XCJEZWxldGVcIj5cdUQ4M0RcdURERDFcdUZFMEY8L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+YDtcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiBgXG4gICAgPHRhYmxlIGNsYXNzPVwicmV2aWV3LXRhYmxlXCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoPkF3YXJkPC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo3MHB4O3RleHQtYWxpZ246Y2VudGVyO1wiPlllYXI8L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjgwcHg7XCI+QWN0aW9uczwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PiR7cm93c308L3Rib2R5PlxuICAgIDwvdGFibGU+YDtcbn1cblxuXG5mdW5jdGlvbiBfcmVuZGVyQ2VydGlmaWNhdGlvbnNMaXN0KGNlcnRzKSB7XG4gIGlmICghY2VydHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICc8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7cGFkZGluZzoxMnB4IDA7XCI+Tm8gY2VydGlmaWNhdGlvbnMgb24gZmlsZS4gQ2xpY2sgXCIrIEFkZCBDZXJ0aWZpY2F0aW9uXCIgYWJvdmUuPC9wPic7XG4gIH1cbiAgY29uc3Qgcm93cyA9IGNlcnRzLm1hcCgoY2VydCwgaWR4KSA9PiB7XG4gICAgY29uc3QgbmFtZSAgID0gZXNjYXBlSHRtbChjZXJ0Lm5hbWUgfHwgJycpO1xuICAgIGNvbnN0IGlzc3VlciA9IGVzY2FwZUh0bWwoY2VydC5pc3N1ZXIgfHwgJ1x1MjAxNCcpO1xuICAgIGNvbnN0IHllYXIgICA9IGNlcnQueWVhciA/IFN0cmluZyhjZXJ0LnllYXIpIDogJ1x1MjAxNCc7XG4gICAgY29uc3QgY2VydEpzb24gPSBlc2NhcGVIdG1sKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIG5hbWU6IGNlcnQubmFtZSB8fCAnJywgaXNzdWVyOiBjZXJ0Lmlzc3VlciB8fCAnJywgeWVhcjogY2VydC55ZWFyIHx8ICcnLFxuICAgIH0pKTtcbiAgICByZXR1cm4gYFxuICAgICAgPHRyPlxuICAgICAgICA8dGQ+PHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+PC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwiY29sb3I6IzQ3NTU2OTtcIj4ke2lzc3Vlcn08L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojNDc1NTY5O1wiPiR7eWVhcn08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb24tYnRuc1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJlZGl0TWFzdGVyQ2VydGlmaWNhdGlvbigke2NlcnRKc29ufSwgJHtpZHh9KVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJFZGl0IGNlcnRpZmljYXRpb246ICR7bmFtZX1cIiB0aXRsZT1cIkVkaXRcIj5cdTI3MEZcdUZFMEY8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBvbmNsaWNrPVwiZGVsZXRlTWFzdGVyQ2VydGlmaWNhdGlvbigke2lkeH0sICcke25hbWV9JylcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVsZXRlIGNlcnRpZmljYXRpb246ICR7bmFtZX1cIiB0aXRsZT1cIkRlbGV0ZVwiPlx1RDgzRFx1REREMVx1RkUwRjwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5gO1xuICB9KS5qb2luKCcnKTtcbiAgcmV0dXJuIGBcbiAgICA8dGFibGUgY2xhc3M9XCJyZXZpZXctdGFibGVcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGg+TmFtZTwvdGg+XG4gICAgICAgICAgPHRoPklzc3VlcjwvdGg+XG4gICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6NzBweDt0ZXh0LWFsaWduOmNlbnRlcjtcIj5ZZWFyPC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo4MHB4O1wiPkFjdGlvbnM8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT4ke3Jvd3N9PC90Ym9keT5cbiAgICA8L3RhYmxlPmA7XG59XG5cblxuZnVuY3Rpb24gX3JlbmRlck1hc3RlckFjaGlldmVtZW50c1RhYmxlKGFjaGlldmVtZW50cykge1xuICBpZiAoIWFjaGlldmVtZW50cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJzxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtwYWRkaW5nOjEycHggMDtcIj5ObyBzZWxlY3RlZCBhY2hpZXZlbWVudHMgeWV0LiBVc2UgdGhlIEhhcnZlc3QgZmVhdHVyZSB0byBhZGQgYWNoaWV2ZW1lbnRzIGZyb20gYSBjb21wbGV0ZWQgc2Vzc2lvbiwgb3IgY2xpY2sgXCIrIEFkZCBBY2hpZXZlbWVudFwiIGFib3ZlLjwvcD4nO1xuICB9XG4gIGxldCByb3dzID0gYWNoaWV2ZW1lbnRzLm1hcChhY2ggPT4ge1xuICAgIGNvbnN0IGlkICAgICAgPSBlc2NhcGVIdG1sKGFjaC5pZCB8fCAnJyk7XG4gICAgY29uc3QgdGl0bGUgICA9IGVzY2FwZUh0bWwoYWNoLnRpdGxlIHx8ICcnKTtcbiAgICBjb25zdCBkZXNjICAgID0gZXNjYXBlSHRtbCgoYWNoLmRlc2NyaXB0aW9uIHx8ICcnKS5zbGljZSgwLCAxMDApKTtcbiAgICBjb25zdCBpbXAgICAgID0gYWNoLmltcG9ydGFuY2UgPz8gJ1x1MjAxNCc7XG4gICAgY29uc3QgcmVsRm9yICA9IGVzY2FwZUh0bWwoKGFjaC5yZWxldmFudF9mb3IgfHwgW10pLmpvaW4oJywgJykpO1xuICAgIHJldHVybiBgXG4gICAgICA8dHI+XG4gICAgICAgIDx0ZD48c3Ryb25nPiR7dGl0bGV9PC9zdHJvbmc+JHtkZXNjID8gYDxicj48c21hbGwgc3R5bGU9XCJjb2xvcjojNmI3MjgwO1wiPiR7ZGVzY30keyhhY2guZGVzY3JpcHRpb258fCcnKS5sZW5ndGggPiAxMDAgPyAnXHUyMDI2JyA6ICcnfTwvc21hbGw+YCA6ICcnfTwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiR7aW1wfTwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzQ3NTU2OTtcIj4ke3JlbEZvciB8fCAnXHUyMDE0J308L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb24tYnRuc1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJlZGl0TWFzdGVyQWNoaWV2ZW1lbnQoJHtlc2NhcGVIdG1sKEpTT04uc3RyaW5naWZ5KHtpZDogYWNoLmlkfHwnJywgdGl0bGU6IGFjaC50aXRsZXx8JycsIGRlc2NyaXB0aW9uOiBhY2guZGVzY3JpcHRpb258fCcnLCByZWxldmFudF9mb3I6IGFjaC5yZWxldmFudF9mb3J8fFtdLCBpbXBvcnRhbmNlOiBhY2guaW1wb3J0YW5jZXx8N30pKX0pXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkVkaXQgYWNoaWV2ZW1lbnQ6ICR7dGl0bGV9XCIgdGl0bGU9XCJFZGl0XCI+XHUyNzBGXHVGRTBGPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgb25jbGljaz1cImRlbGV0ZU1hc3RlckFjaGlldmVtZW50KCcke2lkfScsICcke3RpdGxlfScpXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRlbGV0ZSBhY2hpZXZlbWVudDogJHt0aXRsZX1cIiB0aXRsZT1cIkRlbGV0ZVwiPlx1RDgzRFx1REREMVx1RkUwRjwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5gO1xuICB9KS5qb2luKCcnKTtcbiAgcmV0dXJuIGBcbiAgICA8dGFibGUgY2xhc3M9XCJyZXZpZXctdGFibGVcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGg+QWNoaWV2ZW1lbnQ8L3RoPlxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7XCI+SW1wb3J0YW5jZTwvdGg+XG4gICAgICAgICAgPHRoPlJlbGV2YW50IGZvcjwvdGg+XG4gICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6ODBweDtcIj5BY3Rpb25zPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+JHtyb3dzfTwvdGJvZHk+XG4gICAgPC90YWJsZT5gO1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyU3VtbWFyaWVzTGlzdChzdW1tYXJpZXMpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHN1bW1hcmllcyk7XG4gIGlmICgha2V5cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJzxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtwYWRkaW5nOjEycHggMDtcIj5ObyBwcm9mZXNzaW9uYWwgc3VtbWFyeSB2YXJpYW50cyB5ZXQuIENsaWNrIFwiKyBBZGQgU3VtbWFyeVwiIGFib3ZlIHRvIGNyZWF0ZSB5b3VyIGZpcnN0IG9uZS48L3A+JztcbiAgfVxuICByZXR1cm4ga2V5cy5tYXAoa2V5ID0+IHtcbiAgICBjb25zdCB0ZXh0ICAgID0gdHlwZW9mIHN1bW1hcmllc1trZXldID09PSAnc3RyaW5nJyA/IHN1bW1hcmllc1trZXldIDogSlNPTi5zdHJpbmdpZnkoc3VtbWFyaWVzW2tleV0pO1xuICAgIGNvbnN0IHByZXZpZXcgPSBlc2NhcGVIdG1sKHRleHQuc2xpY2UoMCwgMjAwKSk7XG4gICAgY29uc3Qga2V5RXNjICA9IGVzY2FwZUh0bWwoa2V5KTtcbiAgICByZXR1cm4gYFxuICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zdW1tYXJ5LWNhcmRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zdW1tYXJ5LWhlYWRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFzdGVyLXN1bW1hcnkta2V5XCI+JHtrZXlFc2N9PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnRuc1wiIHN0eWxlPVwiZ2FwOjRweDtcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJlZGl0TWFzdGVyU3VtbWFyeSgke2VzY2FwZUh0bWwoSlNPTi5zdHJpbmdpZnkoe2tleSwgdGV4dH0pKX0pXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRWRpdCBzdW1tYXJ5OiAke2tleUVzY31cIiB0aXRsZT1cIkVkaXRcIj5cdTI3MEZcdUZFMEY8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIG9uY2xpY2s9XCJkZWxldGVNYXN0ZXJTdW1tYXJ5KCcke2tleUVzY30nKVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRlbGV0ZSBzdW1tYXJ5OiAke2tleUVzY31cIiB0aXRsZT1cIkRlbGV0ZVwiPlx1RDgzRFx1REREMVx1RkUwRjwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hc3Rlci1zdW1tYXJ5LXByZXZpZXdcIj4ke3ByZXZpZXd9JHt0ZXh0Lmxlbmd0aCA+IDIwMCA/ICdcdTIwMjYnIDogJyd9PC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuICB9KS5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gc2hvd0FkZEFjaGlldmVtZW50TW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtbW9kYWwtaWQnKS52YWx1ZSAgICAgICAgICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtbW9kYWwtdGl0bGUtaW5wdXQnKS52YWx1ZSAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtbW9kYWwtZGVzYy1pbnB1dCcpLnZhbHVlICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtbW9kYWwtcmVsZXZhbnQtaW5wdXQnKS52YWx1ZSA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLWltcG9ydGFuY2UtaW5wdXQnKS52YWx1ZSA9ICc3JztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1hY2gtbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9ICdBZGQgQWNoaWV2ZW1lbnQnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWFjaC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1hY2gtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1hY2gtbW9kYWwtb3ZlcmxheScpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLXRpdGxlLWlucHV0JykuZm9jdXMoKTtcbn1cblxuZnVuY3Rpb24gZWRpdE1hc3RlckFjaGlldmVtZW50KGFjaCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLWlkJykudmFsdWUgICAgICAgICAgICAgID0gYWNoLmlkIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLXRpdGxlLWlucHV0JykudmFsdWUgICAgID0gYWNoLnRpdGxlIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLWRlc2MtaW5wdXQnKS52YWx1ZSAgICAgID0gYWNoLmRlc2NyaXB0aW9uIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLXJlbGV2YW50LWlucHV0JykudmFsdWUgID0gKGFjaC5yZWxldmFudF9mb3IgfHwgW10pLmpvaW4oJywgJyk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtbW9kYWwtaW1wb3J0YW5jZS1pbnB1dCcpLnZhbHVlID0gYWNoLmltcG9ydGFuY2UgfHwgNztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1hY2gtbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9ICdFZGl0IEFjaGlldmVtZW50JztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1hY2gtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgc2V0SW5pdGlhbEZvY3VzKCdtYXN0ZXItYWNoLW1vZGFsLW92ZXJsYXknKTtcbiAgdHJhcEZvY3VzKCdtYXN0ZXItYWNoLW1vZGFsLW92ZXJsYXknKTtcbn1cblxuZnVuY3Rpb24gY2xvc2VNYXN0ZXJBY2hNb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1hY2gtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlTWFzdGVyQWNoaWV2ZW1lbnQoKSB7XG4gIGNvbnN0IGlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaC1tb2RhbC1pZCcpLnZhbHVlLnRyaW0oKSB8fFxuICAgICAgICAgICAgICdzYV8nICsgRGF0ZS5ub3coKTtcbiAgY29uc3QgdGl0bGUgICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLXRpdGxlLWlucHV0JykudmFsdWUudHJpbSgpO1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2gtbW9kYWwtZGVzYy1pbnB1dCcpLnZhbHVlLnRyaW0oKTtcbiAgY29uc3QgcmVsZXZhbnRSYXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNoLW1vZGFsLXJlbGV2YW50LWlucHV0JykudmFsdWU7XG4gIGNvbnN0IGltcG9ydGFuY2UgID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjaC1tb2RhbC1pbXBvcnRhbmNlLWlucHV0JykudmFsdWUsIDEwKSB8fCA3O1xuXG4gIGlmICghdGl0bGUpIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNkEwXHVGRTBGIFZhbGlkYXRpb24nLCAnVGl0bGUgaXMgcmVxdWlyZWQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlbGV2YW50X2ZvciA9IHJlbGV2YW50UmF3LnNwbGl0KCcsJykubWFwKHMgPT4gcy50cmltKCkpLmZpbHRlcihCb29sZWFuKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL3VwZGF0ZS1hY2hpZXZlbWVudCcsIHtcbiAgICAgIG1ldGhvZDogICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogICAgSlNPTi5zdHJpbmdpZnkoeyBpZCwgdGl0bGUsIGRlc2NyaXB0aW9uLCByZWxldmFudF9mb3IsIGltcG9ydGFuY2UgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNsb3NlTWFzdGVyQWNoTW9kYWwoKTtcbiAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ1NlbGVjdGVkIEFjaGlldmVtZW50cycsIGRhdGEuYWN0aW9uIHx8ICd1cGRhdGVkJyk7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IFNhdmVkJywgYEFjaGlldmVtZW50IFwiJHt0aXRsZX1cIiAke2RhdGEuYWN0aW9ufS5gKTtcbiAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7ICAvLyByZWZyZXNoXG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdTYXZlIGZhaWxlZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIHNhdmUgYWNoaWV2ZW1lbnQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG93QWRkU3VtbWFyeU1vZGFsKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtLW1vZGFsLWtleS1pbnB1dCcpLnZhbHVlICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtLW1vZGFsLXRleHQtaW5wdXQnKS52YWx1ZSA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXN1bS1tb2RhbC10aXRsZScpLnRleHRDb250ZW50ID0gJ0FkZCBQcm9mZXNzaW9uYWwgU3VtbWFyeSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItc3VtLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHNldEluaXRpYWxGb2N1cygnbWFzdGVyLXN1bS1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbWFzdGVyLXN1bS1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGVkaXRNYXN0ZXJTdW1tYXJ5KG9iaikge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtLW1vZGFsLWtleS1pbnB1dCcpLnZhbHVlICA9IG9iai5rZXkgIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtLW1vZGFsLXRleHQtaW5wdXQnKS52YWx1ZSA9IG9iai50ZXh0IHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXN1bS1tb2RhbC10aXRsZScpLnRleHRDb250ZW50ID0gJ0VkaXQgUHJvZmVzc2lvbmFsIFN1bW1hcnknO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXN1bS1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1zdW0tbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1zdW0tbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBjbG9zZU1hc3RlclN1bU1vZGFsKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXN1bS1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVzdG9yZUZvY3VzKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVNYXN0ZXJTdW1tYXJ5KCkge1xuICBjb25zdCBrZXkgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bS1tb2RhbC1rZXktaW5wdXQnKS52YWx1ZS50cmltKCk7XG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtLW1vZGFsLXRleHQtaW5wdXQnKS52YWx1ZS50cmltKCk7XG4gIGlmICgha2V5IHx8ICF0ZXh0KSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjZBMFx1RkUwRiBWYWxpZGF0aW9uJywgJ0JvdGggS2V5IGFuZCBTdW1tYXJ5IHRleHQgYXJlIHJlcXVpcmVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL3VwZGF0ZS1zdW1tYXJ5Jywge1xuICAgICAgbWV0aG9kOiAgJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiAgICBKU09OLnN0cmluZ2lmeSh7IGtleSwgdGV4dCB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgY2xvc2VNYXN0ZXJTdW1Nb2RhbCgpO1xuICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnUHJvZmVzc2lvbmFsIFN1bW1hcmllcycsIGRhdGEuYWN0aW9uIHx8ICd1cGRhdGVkJyk7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IFNhdmVkJywgYFN1bW1hcnkgXCIke2tleX1cIiAke2RhdGEuYWN0aW9ufS5gKTtcbiAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7ICAvLyByZWZyZXNoXG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdTYXZlIGZhaWxlZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIHNhdmUgc3VtbWFyeScpO1xuICB9XG59XG5cbi8vIC0tLS0gUGVyc29uYWwgSW5mbyBtb2RhbCBoYW5kbGVycyAtLS0tXG5cbmZ1bmN0aW9uIHNob3dFZGl0UGVyc29uYWxJbmZvTW9kYWwoKSB7XG4gIGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL2Z1bGwnKVxuICAgIC50aGVuKHIgPT4gci5qc29uKCkpXG4gICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICBjb25zdCBwaSAgICAgID0gZGF0YS5wZXJzb25hbF9pbmZvIHx8IHt9O1xuICAgICAgY29uc3QgY29udGFjdCA9IHBpLmNvbnRhY3QgfHwge307XG4gICAgICBjb25zdCBhZGRyZXNzID0gY29udGFjdC5hZGRyZXNzIHx8IHt9O1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpLW5hbWUtaW5wdXQnKS52YWx1ZSAgICA9IHBpLm5hbWUgfHwgJyc7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGktdGl0bGUtaW5wdXQnKS52YWx1ZSAgID0gcGkudGl0bGUgfHwgcGkuaGVhZGxpbmUgfHwgJyc7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGktZW1haWwtaW5wdXQnKS52YWx1ZSAgID0gY29udGFjdC5lbWFpbCB8fCBwaS5lbWFpbCB8fCAnJztcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaS1waG9uZS1pbnB1dCcpLnZhbHVlICAgPSBjb250YWN0LnBob25lIHx8ICcnO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpLWxpbmtlZGluLWlucHV0JykudmFsdWUgPSBjb250YWN0LmxpbmtlZGluIHx8ICcnO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpLXdlYnNpdGUtaW5wdXQnKS52YWx1ZSAgPSBjb250YWN0LndlYnNpdGUgfHwgJyc7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGktY2l0eS1pbnB1dCcpLnZhbHVlICAgID0gYWRkcmVzcy5jaXR5IHx8ICcnO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpLXN0YXRlLWlucHV0JykudmFsdWUgICA9IGFkZHJlc3Muc3RhdGUgfHwgJyc7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXBpLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgc2V0SW5pdGlhbEZvY3VzKCdtYXN0ZXItcGktbW9kYWwtb3ZlcmxheScpO1xuICAgICAgdHJhcEZvY3VzKCdtYXN0ZXItcGktbW9kYWwtb3ZlcmxheScpO1xuICAgIH0pXG4gICAgLmNhdGNoKCgpID0+IHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnQ291bGQgbm90IGxvYWQgcGVyc29uYWwgaW5mbycpKTtcbn1cblxuZnVuY3Rpb24gY2xvc2VQZXJzb25hbEluZm9Nb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1waS1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVzdG9yZUZvY3VzKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVQZXJzb25hbEluZm8oKSB7XG4gIGNvbnN0IGJvZHkgPSB7XG4gICAgbmFtZTogICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaS1uYW1lLWlucHV0JykudmFsdWUudHJpbSgpLFxuICAgIHRpdGxlOiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGktdGl0bGUtaW5wdXQnKS52YWx1ZS50cmltKCksXG4gICAgZW1haWw6ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaS1lbWFpbC1pbnB1dCcpLnZhbHVlLnRyaW0oKSxcbiAgICBwaG9uZTogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpLXBob25lLWlucHV0JykudmFsdWUudHJpbSgpLFxuICAgIGxpbmtlZGluOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGktbGlua2VkaW4taW5wdXQnKS52YWx1ZS50cmltKCksXG4gICAgd2Vic2l0ZTogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaS13ZWJzaXRlLWlucHV0JykudmFsdWUudHJpbSgpLFxuICAgIGNpdHk6ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGktY2l0eS1pbnB1dCcpLnZhbHVlLnRyaW0oKSxcbiAgICBzdGF0ZTogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpLXN0YXRlLWlucHV0JykudmFsdWUudHJpbSgpLFxuICB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9wZXJzb25hbC1pbmZvJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LCBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgY2xvc2VQZXJzb25hbEluZm9Nb2RhbCgpO1xuICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnUGVyc29uYWwgSW5mb3JtYXRpb24nLCAndXBkYXRlZCcpO1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBTYXZlZCcsICdQZXJzb25hbCBpbmZvcm1hdGlvbiB1cGRhdGVkLicpO1xuICAgICAgYXdhaXQgcG9wdWxhdGVNYXN0ZXJUYWIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGRhdGEuZXJyb3IgfHwgJ1NhdmUgZmFpbGVkJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gc2F2ZSBwZXJzb25hbCBpbmZvJyk7XG4gIH1cbn1cblxuLy8gLS0tLSBFeHBlcmllbmNlIG1vZGFsIGhhbmRsZXJzIC0tLS1cblxuZnVuY3Rpb24gc2hvd0FkZEV4cGVyaWVuY2VNb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC1tb2RhbC1pZCcpLnZhbHVlICAgICAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLXRpdGxlLWlucHV0JykudmFsdWUgICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtY29tcGFueS1pbnB1dCcpLnZhbHVlICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC1jaXR5LWlucHV0JykudmFsdWUgICAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLXN0YXRlLWlucHV0JykudmFsdWUgICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtc3RhcnQtaW5wdXQnKS52YWx1ZSAgICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC1lbmQtaW5wdXQnKS52YWx1ZSAgICAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLXR5cGUtaW5wdXQnKS52YWx1ZSAgICAgID0gJ2Z1bGxfdGltZSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtaW1wb3J0YW5jZS1pbnB1dCcpLnZhbHVlID0gJzUnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLXRhZ3MtaW5wdXQnKS52YWx1ZSAgICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItZXhwLW1vZGFsLXRpdGxlJykudGV4dENvbnRlbnQgPSAnQWRkIFdvcmsgRXhwZXJpZW5jZSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItZXhwLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBfbWFzdGVyRXhwTW9kYWxBY2hpZXZlbWVudHMgPSBbXTtcbiAgX3JlbmRlckV4cEFjaGlldmVtZW50c0VkaXRvcigpO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHNldEluaXRpYWxGb2N1cygnbWFzdGVyLWV4cC1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbWFzdGVyLWV4cC1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbi8vIFdvcmtpbmcgY29weSBvZiB0aGUgY3VycmVudGx5LWVkaXRlZCBleHBlcmllbmNlJ3MgYWNoaWV2ZW1lbnRzIHdoaWxlIHRoZVxuLy8gbW9kYWwgaXMgb3BlbiAoR0FQLTE5IDE2LjExKS4gZWRpdE1hc3RlckV4cGVyaWVuY2UoKSB0YWtlcyBhbiBpZCAobm90IHRoZVxuLy8gZnVsbCBvYmplY3QpIGFuZCBsb29rcyBpdCB1cCBmcm9tIHdpbmRvdy5fbWFzdGVyRXhwZXJpZW5jZUZ1bGxEYXRhIFx1MjAxNFxuLy8gYWNoaWV2ZW1lbnQgdGV4dCBjYW4gY29udGFpbiBxdW90ZXMvdW5pY29kZSB0aGF0IHdvdWxkIGJlIGZyYWdpbGUgdG9cbi8vIGVtYmVkIGRpcmVjdGx5IGluc2lkZSBhbiBpbmxpbmUgb25jbGljayBhdHRyaWJ1dGUuXG5sZXQgX21hc3RlckV4cE1vZGFsQWNoaWV2ZW1lbnRzID0gW107XG5cbmZ1bmN0aW9uIF9hY2hpZXZlbWVudFRleHQoYSkge1xuICByZXR1cm4gdHlwZW9mIGEgPT09ICdzdHJpbmcnID8gYSA6IChhICYmIGEudGV4dCkgfHwgJyc7XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJFeHBBY2hpZXZlbWVudHNFZGl0b3IoKSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtYWNoaWV2ZW1lbnRzLWVkaXRvci1saXN0Jyk7XG4gIGlmICghY29udGFpbmVyKSByZXR1cm47XG4gIGNvbnN0IGxhc3RJZHggPSBfbWFzdGVyRXhwTW9kYWxBY2hpZXZlbWVudHMubGVuZ3RoIC0gMTtcbiAgY29udGFpbmVyLmlubmVySFRNTCA9IF9tYXN0ZXJFeHBNb2RhbEFjaGlldmVtZW50cy5tYXAoKGFjaCwgaWR4KSA9PiBgXG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6NnB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjZweDtcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZWRpdC1pbnB1dCBleHAtYWNoLXRleHQtaW5wdXRcIiBkYXRhLWlkeD1cIiR7aWR4fVwiIHN0eWxlPVwiZmxleDoxO1wiXG4gICAgICAgICAgdmFsdWU9XCIke2VzY2FwZUh0bWwoX2FjaGlldmVtZW50VGV4dChhY2gpKX1cIiBhcmlhLWxhYmVsPVwiQWNoaWV2ZW1lbnQgJHtpZHggKyAxfSB0ZXh0XCIgLz5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiaWNvbi1idG5cIiBvbmNsaWNrPVwiX21vdmVFeHBBY2hpZXZlbWVudCgke2lkeH0sIC0xKVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIk1vdmUgYWNoaWV2ZW1lbnQgJHtpZHggKyAxfSB1cFwiIHRpdGxlPVwiTW92ZSB1cFwiICR7aWR4ID09PSAwID8gJ2Rpc2FibGVkJyA6ICcnfT5cdTIxOTE8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiaWNvbi1idG5cIiBvbmNsaWNrPVwiX21vdmVFeHBBY2hpZXZlbWVudCgke2lkeH0sIDEpXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiTW92ZSBhY2hpZXZlbWVudCAke2lkeCArIDF9IGRvd25cIiB0aXRsZT1cIk1vdmUgZG93blwiICR7aWR4ID09PSBsYXN0SWR4ID8gJ2Rpc2FibGVkJyA6ICcnfT5cdTIxOTM8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiaWNvbi1idG5cIiBvbmNsaWNrPVwiX2RlbGV0ZUV4cEFjaGlldmVtZW50KCR7aWR4fSlcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWxldGUgYWNoaWV2ZW1lbnQgJHtpZHggKyAxfVwiIHRpdGxlPVwiRGVsZXRlXCI+XHVEODNEXHVEREQxXHVGRTBGPC9idXR0b24+XG4gICAgPC9kaXY+YCkuam9pbignJykgfHwgJzxwIHN0eWxlPVwiY29sb3I6Izk0YTNiODtmb250LXNpemU6MC44NWVtO21hcmdpbjowIDAgNnB4O1wiPk5vIGFjaGlldmVtZW50cyB5ZXQuPC9wPic7XG59XG5cbi8vIFJlYWQgYW55IGluLXByb2dyZXNzIGVkaXRzIG91dCBvZiB0aGUgYWNoaWV2ZW1lbnQgdGV4dCBpbnB1dHMgYmVmb3JlIGFcbi8vIHJlb3JkZXIvZGVsZXRlL3NhdmUgcmVidWlsZHMgdGhlIGxpc3QgZnJvbSBfbWFzdGVyRXhwTW9kYWxBY2hpZXZlbWVudHMgXHUyMDE0XG4vLyBvdGhlcndpc2UgYW4gdW4tc3VibWl0dGVkIHRleHQgZWRpdCB3b3VsZCBiZSBzaWxlbnRseSBsb3N0IG9uIHJlLXJlbmRlci5cbmZ1bmN0aW9uIF9zeW5jRXhwQWNoaWV2ZW1lbnRzRnJvbUlucHV0cygpIHtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmV4cC1hY2gtdGV4dC1pbnB1dCcpLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgY29uc3QgaWR4ID0gcGFyc2VJbnQoaW5wdXQuZGF0YXNldC5pZHgsIDEwKTtcbiAgICBjb25zdCBhY2ggPSBfbWFzdGVyRXhwTW9kYWxBY2hpZXZlbWVudHNbaWR4XTtcbiAgICBpZiAodHlwZW9mIGFjaCA9PT0gJ3N0cmluZycgfHwgYWNoID09IG51bGwpIHtcbiAgICAgIF9tYXN0ZXJFeHBNb2RhbEFjaGlldmVtZW50c1tpZHhdID0gaW5wdXQudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjaC50ZXh0ID0gaW5wdXQudmFsdWU7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gX2FkZEV4cEFjaGlldmVtZW50KCkge1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtYWNoLW5ldy1pbnB1dCcpO1xuICBjb25zdCB0ZXh0ID0gKGlucHV0LnZhbHVlIHx8ICcnKS50cmltKCk7XG4gIGlmICghdGV4dCkgcmV0dXJuO1xuICBfc3luY0V4cEFjaGlldmVtZW50c0Zyb21JbnB1dHMoKTtcbiAgX21hc3RlckV4cE1vZGFsQWNoaWV2ZW1lbnRzLnB1c2godGV4dCk7XG4gIGlucHV0LnZhbHVlID0gJyc7XG4gIF9yZW5kZXJFeHBBY2hpZXZlbWVudHNFZGl0b3IoKTtcbn1cblxuZnVuY3Rpb24gX21vdmVFeHBBY2hpZXZlbWVudChpZHgsIGRlbHRhKSB7XG4gIF9zeW5jRXhwQWNoaWV2ZW1lbnRzRnJvbUlucHV0cygpO1xuICBjb25zdCB0YXJnZXQgPSBpZHggKyBkZWx0YTtcbiAgaWYgKHRhcmdldCA8IDAgfHwgdGFyZ2V0ID49IF9tYXN0ZXJFeHBNb2RhbEFjaGlldmVtZW50cy5sZW5ndGgpIHJldHVybjtcbiAgY29uc3QgW2l0ZW1dID0gX21hc3RlckV4cE1vZGFsQWNoaWV2ZW1lbnRzLnNwbGljZShpZHgsIDEpO1xuICBfbWFzdGVyRXhwTW9kYWxBY2hpZXZlbWVudHMuc3BsaWNlKHRhcmdldCwgMCwgaXRlbSk7XG4gIF9yZW5kZXJFeHBBY2hpZXZlbWVudHNFZGl0b3IoKTtcbn1cblxuZnVuY3Rpb24gX2RlbGV0ZUV4cEFjaGlldmVtZW50KGlkeCkge1xuICBfc3luY0V4cEFjaGlldmVtZW50c0Zyb21JbnB1dHMoKTtcbiAgX21hc3RlckV4cE1vZGFsQWNoaWV2ZW1lbnRzLnNwbGljZShpZHgsIDEpO1xuICBfcmVuZGVyRXhwQWNoaWV2ZW1lbnRzRWRpdG9yKCk7XG59XG5cbmZ1bmN0aW9uIGVkaXRNYXN0ZXJFeHBlcmllbmNlKGlkKSB7XG4gIGNvbnN0IGV4cCA9ICh3aW5kb3cuX21hc3RlckV4cGVyaWVuY2VGdWxsRGF0YSB8fCBbXSkuZmluZCgoZSkgPT4gZS5pZCA9PT0gaWQpO1xuICBpZiAoIWV4cCkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnQ291bGQgbm90IGZpbmQgdGhhdCBleHBlcmllbmNlIGVudHJ5IFx1MjAxNCB0cnkgcmVmcmVzaGluZyB0aGUgdGFiLicpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBsb2MgPSBleHAubG9jYXRpb24gfHwge307XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtbW9kYWwtaWQnKS52YWx1ZSAgICAgICAgID0gZXhwLmlkIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLXRpdGxlLWlucHV0JykudmFsdWUgICAgICA9IGV4cC50aXRsZSB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC1jb21wYW55LWlucHV0JykudmFsdWUgICAgPSBleHAuY29tcGFueSB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC1jaXR5LWlucHV0JykudmFsdWUgICAgICAgPSBsb2MuY2l0eSB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC1zdGF0ZS1pbnB1dCcpLnZhbHVlICAgICAgPSBsb2Muc3RhdGUgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtc3RhcnQtaW5wdXQnKS52YWx1ZSAgICAgID0gZXhwLnN0YXJ0X2RhdGUgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtZW5kLWlucHV0JykudmFsdWUgICAgICAgID0gZXhwLmVuZF9kYXRlIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLXR5cGUtaW5wdXQnKS52YWx1ZSAgICAgICA9IGV4cC5lbXBsb3ltZW50X3R5cGUgfHwgJ2Z1bGxfdGltZSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtaW1wb3J0YW5jZS1pbnB1dCcpLnZhbHVlICA9IGV4cC5pbXBvcnRhbmNlIHx8IDU7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtdGFncy1pbnB1dCcpLnZhbHVlICAgICAgID0gdHlwZW9mIGV4cC50YWdzID09PSAnc3RyaW5nJyA/IGV4cC50YWdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChleHAudGFncyB8fCBbXSkuam9pbignLCAnKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1leHAtbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9ICdFZGl0IFdvcmsgRXhwZXJpZW5jZSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItZXhwLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBfbWFzdGVyRXhwTW9kYWxBY2hpZXZlbWVudHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGV4cC5hY2hpZXZlbWVudHMgfHwgW10pKTtcbiAgX3JlbmRlckV4cEFjaGlldmVtZW50c0VkaXRvcigpO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHNldEluaXRpYWxGb2N1cygnbWFzdGVyLWV4cC1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbWFzdGVyLWV4cC1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlRXhwZXJpZW5jZU1vZGFsKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWV4cC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVzdG9yZUZvY3VzKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVNYXN0ZXJFeHBlcmllbmNlKCkge1xuICBjb25zdCBpZCAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLW1vZGFsLWlkJykudmFsdWUudHJpbSgpO1xuICBjb25zdCB0aXRsZSAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLXRpdGxlLWlucHV0JykudmFsdWUudHJpbSgpO1xuICBjb25zdCBjb21wYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC1jb21wYW55LWlucHV0JykudmFsdWUudHJpbSgpO1xuICBpZiAoIXRpdGxlIHx8ICFjb21wYW55KSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjZBMFx1RkUwRiBWYWxpZGF0aW9uJywgJ0pvYiB0aXRsZSBhbmQgY29tcGFueSBhcmUgcmVxdWlyZWQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHRhZ3NSYXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLXRhZ3MtaW5wdXQnKS52YWx1ZTtcbiAgX3N5bmNFeHBBY2hpZXZlbWVudHNGcm9tSW5wdXRzKCk7XG4gIGNvbnN0IGV4cERhdGEgPSB7XG4gICAgdGl0bGUsIGNvbXBhbnksXG4gICAgY2l0eTogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLWNpdHktaW5wdXQnKS52YWx1ZS50cmltKCksXG4gICAgc3RhdGU6ICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLXN0YXRlLWlucHV0JykudmFsdWUudHJpbSgpLFxuICAgIHN0YXJ0X2RhdGU6ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC1zdGFydC1pbnB1dCcpLnZhbHVlLnRyaW0oKSxcbiAgICBlbmRfZGF0ZTogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHAtZW5kLWlucHV0JykudmFsdWUudHJpbSgpLFxuICAgIGVtcGxveW1lbnRfdHlwZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4cC10eXBlLWlucHV0JykudmFsdWUsXG4gICAgaW1wb3J0YW5jZTogICAgICBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwLWltcG9ydGFuY2UtaW5wdXQnKS52YWx1ZSwgMTApIHx8IDUsXG4gICAgdGFnczogICAgICAgICAgICB0YWdzUmF3LnNwbGl0KCcsJykubWFwKHMgPT4gcy50cmltKCkpLmZpbHRlcihCb29sZWFuKSxcbiAgICBhY2hpZXZlbWVudHM6ICAgIF9tYXN0ZXJFeHBNb2RhbEFjaGlldmVtZW50cyxcbiAgfTtcbiAgY29uc3QgYWN0aW9uID0gaWQgPyAndXBkYXRlJyA6ICdhZGQnO1xuICBjb25zdCBib2R5ICAgPSBhY3Rpb24gPT09ICd1cGRhdGUnID8geyBhY3Rpb24sIGlkLCBleHBlcmllbmNlOiBleHBEYXRhIH0gOiB7IGFjdGlvbiwgZXhwZXJpZW5jZTogZXhwRGF0YSB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9leHBlcmllbmNlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LCBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgY2xvc2VFeHBlcmllbmNlTW9kYWwoKTtcbiAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ1dvcmsgRXhwZXJpZW5jZScsIGRhdGEuYWN0aW9uIHx8ICd1cGRhdGVkJyk7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IFNhdmVkJywgYEV4cGVyaWVuY2UgXCIke3RpdGxlfVwiICR7ZGF0YS5hY3Rpb259LmApO1xuICAgICAgYXdhaXQgcG9wdWxhdGVNYXN0ZXJUYWIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGRhdGEuZXJyb3IgfHwgJ1NhdmUgZmFpbGVkJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gc2F2ZSBleHBlcmllbmNlJyk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlTWFzdGVyRXhwZXJpZW5jZShpZCwgdGl0bGUpIHtcbiAgc2hvd0NvbmZpcm1Nb2RhbChcbiAgICAnXHVEODNEXHVEREQxXHVGRTBGIERlbGV0ZSBFeHBlcmllbmNlJyxcbiAgICBgRGVsZXRlIFwiJHt0aXRsZX1cIj8gVGhpcyBjYW5ub3QgYmUgdW5kb25lLmAsXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL2V4cGVyaWVuY2UnLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiAnZGVsZXRlJywgaWQgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgaWYgKGRhdGEub2spIHtcbiAgICAgICAgICBfc2V0TWFzdGVyQ2hhbmdlTm90aWNlKCdXb3JrIEV4cGVyaWVuY2UnLCBkYXRhLmFjdGlvbiB8fCAnZGVsZXRlZCcpO1xuICAgICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3MDUgRGVsZXRlZCcsIGBFeHBlcmllbmNlIFwiJHt0aXRsZX1cIiByZW1vdmVkLmApO1xuICAgICAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGRhdGEuZXJyb3IgfHwgJ0RlbGV0ZSBmYWlsZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0ZhaWxlZCB0byBkZWxldGUgZXhwZXJpZW5jZScpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuLy8gLS0tLSBTa2lsbCBtb2RhbCBoYW5kbGVycyAtLS0tXG5cbmZ1bmN0aW9uIHNob3dBZGRTa2lsbE1vZGFsKGNhdGVnb3J5S2V5LCBpc0ZsYXQpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLW1vZGFsLWNhdGVnb3J5JykudmFsdWUgPSBjYXRlZ29yeUtleSB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLW1vZGFsLWlzLWZsYXQnKS52YWx1ZSAgPSBpc0ZsYXQgPyAnMScgOiAnMCc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1tb2RhbC1vcmlnaW5hbC1uYW1lJykudmFsdWUgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLW5hbWUtaW5wdXQnKS52YWx1ZSAgICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLWV4cGVyaWVuY2VzLWlucHV0JykudmFsdWUgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLWFsaWFzZXMtaW5wdXQnKS52YWx1ZSAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLXllYXJzLWlucHV0JykudmFsdWUgICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1za2lsbC1tb2RhbC10aXRsZScpLnRleHRDb250ZW50ID0gJ0FkZCBTa2lsbCc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItc2tpbGwtc2F2ZS1idG4nKS50ZXh0Q29udGVudCA9ICdBZGQgU2tpbGwnO1xuICBjb25zdCBoaW50cyA9ICh3aW5kb3cuX21hc3RlckV4cGVyaWVuY2VPcHRpb25zIHx8IFtdKVxuICAgIC5zbGljZSgwLCA4KVxuICAgIC5tYXAoKHgpID0+IGAke3guaWR9ICgke3gubGFiZWx9KWApXG4gICAgLmpvaW4oJyBcdTAwQjcgJyk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1leHBlcmllbmNlLWhpbnRzJykudGV4dENvbnRlbnQgPSBoaW50cyA/IGBBdmFpbGFibGU6ICR7aGludHN9YCA6ICcnO1xuICBjb25zdCBjYXRSb3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtY2F0ZWdvcnktcm93Jyk7XG4gIGlmIChjYXRlZ29yeUtleSkge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1jYXRlZ29yeS1kaXNwbGF5JykudGV4dENvbnRlbnQgPSBjYXRlZ29yeUtleTtcbiAgICBjYXRSb3cuc3R5bGUuZGlzcGxheSA9ICcnO1xuICB9IGVsc2Uge1xuICAgIGNhdFJvdy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItc2tpbGwtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgc2V0SW5pdGlhbEZvY3VzKCdtYXN0ZXItc2tpbGwtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1za2lsbC1tb2RhbC1vdmVybGF5Jyk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1uYW1lLWlucHV0JykuZm9jdXMoKTtcbn1cblxuZnVuY3Rpb24gZWRpdE1hc3RlclNraWxsKHNraWxsT2JqLCBjYXRlZ29yeUtleSwgaXNGbGF0KSB7XG4gIGNvbnN0IG5hbWUgPSB0eXBlb2Ygc2tpbGxPYmogPT09ICdzdHJpbmcnID8gc2tpbGxPYmogOiAoc2tpbGxPYmo/Lm5hbWUgfHwgJycpO1xuICBjb25zdCBleHBlcmllbmNlcyA9IEFycmF5LmlzQXJyYXkoc2tpbGxPYmo/LmV4cGVyaWVuY2VzKSA/IHNraWxsT2JqLmV4cGVyaWVuY2VzIDogW107XG4gIGNvbnN0IGFsaWFzZXMgPSBBcnJheS5pc0FycmF5KHNraWxsT2JqPy5hbGlhc2VzKSA/IHNraWxsT2JqLmFsaWFzZXMgOiBbXTtcbiAgY29uc3QgeWVhcnMgPSAodHlwZW9mIHNraWxsT2JqID09PSAnb2JqZWN0JyAmJiBza2lsbE9iaj8ueWVhcnMgIT0gbnVsbCkgPyBza2lsbE9iai55ZWFycyA6ICcnO1xuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1tb2RhbC1jYXRlZ29yeScpLnZhbHVlID0gY2F0ZWdvcnlLZXkgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1tb2RhbC1pcy1mbGF0JykudmFsdWUgID0gaXNGbGF0ID8gJzEnIDogJzAnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtbW9kYWwtb3JpZ2luYWwtbmFtZScpLnZhbHVlID0gbmFtZTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLW5hbWUtaW5wdXQnKS52YWx1ZSA9IG5hbWU7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1leHBlcmllbmNlcy1pbnB1dCcpLnZhbHVlID0gZXhwZXJpZW5jZXMuam9pbignLCAnKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLWFsaWFzZXMtaW5wdXQnKS52YWx1ZSA9IGFsaWFzZXMuam9pbignLCAnKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLXllYXJzLWlucHV0JykudmFsdWUgPSB5ZWFycztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1za2lsbC1tb2RhbC10aXRsZScpLnRleHRDb250ZW50ID0gJ0VkaXQgU2tpbGwnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLXNraWxsLXNhdmUtYnRuJykudGV4dENvbnRlbnQgPSAnU2F2ZSBTa2lsbCc7XG5cbiAgY29uc3QgaGludHMgPSAod2luZG93Ll9tYXN0ZXJFeHBlcmllbmNlT3B0aW9ucyB8fCBbXSlcbiAgICAuc2xpY2UoMCwgOClcbiAgICAubWFwKCh4KSA9PiBgJHt4LmlkfSAoJHt4LmxhYmVsfSlgKVxuICAgIC5qb2luKCcgXHUwMEI3ICcpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtZXhwZXJpZW5jZS1oaW50cycpLnRleHRDb250ZW50ID0gaGludHMgPyBgQXZhaWxhYmxlOiAke2hpbnRzfWAgOiAnJztcblxuICBjb25zdCBjYXRSb3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtY2F0ZWdvcnktcm93Jyk7XG4gIGlmIChjYXRlZ29yeUtleSkge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1jYXRlZ29yeS1kaXNwbGF5JykudGV4dENvbnRlbnQgPSBjYXRlZ29yeUtleTtcbiAgICBjYXRSb3cuc3R5bGUuZGlzcGxheSA9ICcnO1xuICB9IGVsc2Uge1xuICAgIGNhdFJvdy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1za2lsbC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1za2lsbC1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbWFzdGVyLXNraWxsLW1vZGFsLW92ZXJsYXknKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLW5hbWUtaW5wdXQnKS5mb2N1cygpO1xufVxuXG5mdW5jdGlvbiBjbG9zZVNraWxsTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItc2tpbGwtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlTWFzdGVyU2tpbGwoKSB7XG4gIGNvbnN0IHNraWxsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLW5hbWUtaW5wdXQnKS52YWx1ZS50cmltKCk7XG4gIGNvbnN0IGNhdGVnb3J5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLW1vZGFsLWNhdGVnb3J5JykudmFsdWUudHJpbSgpO1xuICBjb25zdCBpc0ZsYXQgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1tb2RhbC1pcy1mbGF0JykudmFsdWUgPT09ICcxJztcbiAgY29uc3Qgb3JpZ2luYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtbW9kYWwtb3JpZ2luYWwtbmFtZScpLnZhbHVlLnRyaW0oKTtcbiAgY29uc3QgZXhwZXJpZW5jZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2tpbGwtZXhwZXJpZW5jZXMtaW5wdXQnKS52YWx1ZVxuICAgIC5zcGxpdCgnLCcpXG4gICAgLm1hcCgocykgPT4gcy50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgYWxpYXNlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdza2lsbC1hbGlhc2VzLWlucHV0JykudmFsdWVcbiAgICAuc3BsaXQoJywnKVxuICAgIC5tYXAoKHMpID0+IHMudHJpbSgpKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHllYXJzUmF3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NraWxsLXllYXJzLWlucHV0JykudmFsdWUudHJpbSgpO1xuICBjb25zdCB5ZWFycyA9IHllYXJzUmF3ID09PSAnJyA/IG51bGwgOiBwYXJzZUZsb2F0KHllYXJzUmF3KTtcbiAgaWYgKCFza2lsbCkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI2QTBcdUZFMEYgVmFsaWRhdGlvbicsICdTa2lsbCBuYW1lIGlzIHJlcXVpcmVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoeWVhcnMgIT09IG51bGwgJiYgIU51bWJlci5pc0Zpbml0ZSh5ZWFycykpIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNkEwXHVGRTBGIFZhbGlkYXRpb24nLCAnWWVhcnMgb2YgZXhwZXJpZW5jZSBtdXN0IGJlIGEgZmluaXRlIG51bWJlci4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaXNVcGRhdGUgPSBCb29sZWFuKG9yaWdpbmFsKTtcbiAgY29uc3QgYmFzZUJvZHkgPSB7XG4gICAgYWN0aW9uOiBpc1VwZGF0ZSA/ICd1cGRhdGUnIDogJ2FkZCcsXG4gICAgc2tpbGw6IGlzVXBkYXRlID8gb3JpZ2luYWwgOiBza2lsbCxcbiAgICAuLi4oaXNVcGRhdGUgPyB7IHNraWxsX25ldzogc2tpbGwgfSA6IHt9KSxcbiAgICBleHBlcmllbmNlcyxcbiAgICBhbGlhc2VzLFxuICAgIHllYXJzLFxuICB9O1xuICBjb25zdCBib2R5ID0gaXNGbGF0ID8gYmFzZUJvZHkgOiB7IC4uLmJhc2VCb2R5LCBjYXRlZ29yeSB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9za2lsbCcsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSwgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNsb3NlU2tpbGxNb2RhbCgpO1xuICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnU2tpbGxzJywgZGF0YS5hY3Rpb24gfHwgJ3VwZGF0ZWQnKTtcbiAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdDb3VsZCBub3QgYWRkIHNraWxsJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gYWRkIHNraWxsJyk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlTWFzdGVyU2tpbGwoc2tpbGwsIGNhdGVnb3J5LCBpc0ZsYXQpIHtcbiAgY29uc3QgYm9keSA9IGlzRmxhdCA/IHsgYWN0aW9uOiAnZGVsZXRlJywgc2tpbGwgfSA6IHsgYWN0aW9uOiAnZGVsZXRlJywgc2tpbGwsIGNhdGVnb3J5IH07XG4gIGNvbnN0IHNjb3BlID0gaXNGbGF0ID8gJ1NraWxscycgOiBgU2tpbGxzIFx1MjE5MiAke2NhdGVnb3J5fWA7XG4gIHNob3dDb25maXJtTW9kYWwoXG4gICAgJ1x1RDgzRFx1REREMVx1RkUwRiBEZWxldGUgU2tpbGwnLFxuICAgIGBEZWxldGUgc2tpbGwgXCIke3NraWxsfVwiIGZyb20gJHtzY29wZX0/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS5gLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9za2lsbCcsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnU2tpbGxzJywgZGF0YS5hY3Rpb24gfHwgJ3VwZGF0ZWQnKTtcbiAgICAgICAgICBhd2FpdCBwb3B1bGF0ZU1hc3RlclRhYigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdDb3VsZCBub3QgcmVtb3ZlIHNraWxsJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gcmVtb3ZlIHNraWxsJyk7XG4gICAgICB9XG4gICAgfVxuICApO1xufVxuXG4vLyAtLS0tIEVkdWNhdGlvbiBtb2RhbCBoYW5kbGVycyAtLS0tXG5cbmZ1bmN0aW9uIHNob3dBZGRFZHVjYXRpb25Nb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1tb2RhbC1pZHgnKS52YWx1ZSAgICAgICAgICAgID0gJy0xJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1kZWdyZWUtaW5wdXQnKS52YWx1ZSAgICAgICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtZmllbGQtaW5wdXQnKS52YWx1ZSAgICAgICAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LWluc3RpdHV0aW9uLWlucHV0JykudmFsdWUgICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1jaXR5LWlucHV0JykudmFsdWUgICAgICAgICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtc3RhdGUtaW5wdXQnKS52YWx1ZSAgICAgICAgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LXN0YXJ0LXllYXItaW5wdXQnKS52YWx1ZSAgICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1lbmQteWVhci1pbnB1dCcpLnZhbHVlICAgICAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItZWR1LW1vZGFsLXRpdGxlJykudGV4dENvbnRlbnQgPSAnQWRkIEVkdWNhdGlvbic7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItZWR1LW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHNldEluaXRpYWxGb2N1cygnbWFzdGVyLWVkdS1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbWFzdGVyLWVkdS1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGVkaXRNYXN0ZXJFZHVjYXRpb24oZWR1LCBpZHgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1tb2RhbC1pZHgnKS52YWx1ZSAgICAgICAgID0gaWR4O1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LWRlZ3JlZS1pbnB1dCcpLnZhbHVlICAgICAgPSBlZHUuZGVncmVlIHx8ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LWZpZWxkLWlucHV0JykudmFsdWUgICAgICAgPSBlZHUuZmllbGQgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtaW5zdGl0dXRpb24taW5wdXQnKS52YWx1ZSA9IGVkdS5pbnN0aXR1dGlvbiB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1jaXR5LWlucHV0JykudmFsdWUgICAgICAgID0gZWR1LmNpdHkgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtc3RhdGUtaW5wdXQnKS52YWx1ZSAgICAgICA9IGVkdS5zdGF0ZSB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1zdGFydC15ZWFyLWlucHV0JykudmFsdWUgID0gZWR1LnN0YXJ0X3llYXIgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtZW5kLXllYXItaW5wdXQnKS52YWx1ZSAgICA9IGVkdS5lbmRfeWVhciB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1lZHUtbW9kYWwtdGl0bGUnKS50ZXh0Q29udGVudCA9ICdFZGl0IEVkdWNhdGlvbic7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItZWR1LW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHNldEluaXRpYWxGb2N1cygnbWFzdGVyLWVkdS1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbWFzdGVyLWVkdS1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlRWR1Y2F0aW9uTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItZWR1LW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXN0b3JlRm9jdXMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZU1hc3RlckVkdWNhdGlvbigpIHtcbiAgY29uc3QgaWR4ICAgICA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtbW9kYWwtaWR4JykudmFsdWUsIDEwKTtcbiAgY29uc3QgZGVncmVlICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtZGVncmVlLWlucHV0JykudmFsdWUudHJpbSgpO1xuICBjb25zdCBpbnN0aXR1dGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtaW5zdGl0dXRpb24taW5wdXQnKS52YWx1ZS50cmltKCk7XG4gIGlmICghZGVncmVlIHx8ICFpbnN0aXR1dGlvbikge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI2QTBcdUZFMEYgVmFsaWRhdGlvbicsICdEZWdyZWUgYW5kIGluc3RpdHV0aW9uIGFyZSByZXF1aXJlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgYWN0aW9uID0gaWR4ID49IDAgPyAndXBkYXRlJyA6ICdhZGQnO1xuICBjb25zdCBib2R5ID0ge1xuICAgIGFjdGlvbixcbiAgICBkZWdyZWUsXG4gICAgZmllbGQ6ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtZmllbGQtaW5wdXQnKS52YWx1ZS50cmltKCksXG4gICAgaW5zdGl0dXRpb24sXG4gICAgY2l0eTogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZHUtY2l0eS1pbnB1dCcpLnZhbHVlLnRyaW0oKSxcbiAgICBzdGF0ZTogICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1zdGF0ZS1pbnB1dCcpLnZhbHVlLnRyaW0oKSxcbiAgICBzdGFydF95ZWFyOiAgcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkdS1zdGFydC15ZWFyLWlucHV0JykudmFsdWUsIDEwKSB8fCBudWxsLFxuICAgIGVuZF95ZWFyOiAgICBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWR1LWVuZC15ZWFyLWlucHV0JykudmFsdWUsIDEwKSB8fCBudWxsLFxuICAgIC4uLihhY3Rpb24gPT09ICd1cGRhdGUnID8geyBpZHggfSA6IHt9KSxcbiAgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvZWR1Y2F0aW9uJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LCBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgY2xvc2VFZHVjYXRpb25Nb2RhbCgpO1xuICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnRWR1Y2F0aW9uJywgZGF0YS5hY3Rpb24gfHwgJ3VwZGF0ZWQnKTtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3MDUgU2F2ZWQnLCBgRWR1Y2F0aW9uIFwiJHtkZWdyZWV9IFx1MjAxMyAke2luc3RpdHV0aW9ufVwiICR7ZGF0YS5hY3Rpb259LmApO1xuICAgICAgYXdhaXQgcG9wdWxhdGVNYXN0ZXJUYWIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGRhdGEuZXJyb3IgfHwgJ1NhdmUgZmFpbGVkJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gc2F2ZSBlZHVjYXRpb24nKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVNYXN0ZXJFZHVjYXRpb24oaWR4LCBpbnN0aXR1dGlvbikge1xuICBzaG93Q29uZmlybU1vZGFsKFxuICAgICdcdUQ4M0RcdURERDFcdUZFMEYgRGVsZXRlIEVkdWNhdGlvbicsXG4gICAgYERlbGV0ZSBcIiR7aW5zdGl0dXRpb259XCI/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS5gLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9lZHVjYXRpb24nLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiAnZGVsZXRlJywgaWR4IH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnRWR1Y2F0aW9uJywgZGF0YS5hY3Rpb24gfHwgJ2RlbGV0ZWQnKTtcbiAgICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IERlbGV0ZWQnLCBgRWR1Y2F0aW9uIGVudHJ5IHJlbW92ZWQuYCk7XG4gICAgICAgICAgYXdhaXQgcG9wdWxhdGVNYXN0ZXJUYWIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGF0YS5lcnJvciB8fCAnRGVsZXRlIGZhaWxlZCcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIGRlbGV0ZSBlZHVjYXRpb24gZW50cnknKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59XG5cbi8vIC0tLS0gQXdhcmQgbW9kYWwgaGFuZGxlcnMgLS0tLVxuXG5mdW5jdGlvbiBzaG93QWRkQXdhcmRNb2RhbCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F3YXJkLW1vZGFsLWlkeCcpLnZhbHVlICAgID0gJy0xJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F3YXJkLXRpdGxlLWlucHV0JykudmFsdWUgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC15ZWFyLWlucHV0JykudmFsdWUgICA9ICcnO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXdhcmQtZGVzYy1pbnB1dCcpLnZhbHVlICAgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F3YXJkLXJlbGV2YW50LWlucHV0JykudmFsdWUgPSAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1hd2FyZC1tb2RhbC10aXRsZScpLnRleHRDb250ZW50ID0gJ0FkZCBBd2FyZCAvIEhvbm91cic7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItYXdhcmQtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgc2V0SW5pdGlhbEZvY3VzKCdtYXN0ZXItYXdhcmQtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1hd2FyZC1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGVkaXRNYXN0ZXJBd2FyZChhd2FyZCwgaWR4KSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC1tb2RhbC1pZHgnKS52YWx1ZSAgICAgPSBpZHg7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC10aXRsZS1pbnB1dCcpLnZhbHVlICAgPSBhd2FyZC50aXRsZSB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F3YXJkLXllYXItaW5wdXQnKS52YWx1ZSAgICA9IGF3YXJkLnllYXIgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC1kZXNjLWlucHV0JykudmFsdWUgICAgPSBhd2FyZC5kZXNjcmlwdGlvbiB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F3YXJkLXJlbGV2YW50LWlucHV0JykudmFsdWUgPSB0eXBlb2YgYXdhcmQucmVsZXZhbnRfZm9yID09PSAnc3RyaW5nJ1xuICAgID8gYXdhcmQucmVsZXZhbnRfZm9yIDogKGF3YXJkLnJlbGV2YW50X2ZvciB8fCBbXSkuam9pbignLCAnKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1hd2FyZC1tb2RhbC10aXRsZScpLnRleHRDb250ZW50ID0gJ0VkaXQgQXdhcmQgLyBIb25vdXInO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWF3YXJkLW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHNldEluaXRpYWxGb2N1cygnbWFzdGVyLWF3YXJkLW1vZGFsLW92ZXJsYXknKTtcbiAgdHJhcEZvY3VzKCdtYXN0ZXItYXdhcmQtbW9kYWwtb3ZlcmxheScpO1xufVxuXG5mdW5jdGlvbiBjbG9zZUF3YXJkTW9kYWwoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItYXdhcmQtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlTWFzdGVyQXdhcmQoKSB7XG4gIGNvbnN0IGlkeCAgID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F3YXJkLW1vZGFsLWlkeCcpLnZhbHVlLCAxMCk7XG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F3YXJkLXRpdGxlLWlucHV0JykudmFsdWUudHJpbSgpO1xuICBpZiAoIXRpdGxlKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjZBMFx1RkUwRiBWYWxpZGF0aW9uJywgJ0F3YXJkIHRpdGxlIGlzIHJlcXVpcmVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBhY3Rpb24gPSBpZHggPj0gMCA/ICd1cGRhdGUnIDogJ2FkZCc7XG4gIGNvbnN0IHJlbGV2YW50UmF3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F3YXJkLXJlbGV2YW50LWlucHV0JykudmFsdWU7XG4gIGNvbnN0IGJvZHkgPSB7XG4gICAgYWN0aW9uLCB0aXRsZSxcbiAgICB5ZWFyOiAgICAgICAgIHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhd2FyZC15ZWFyLWlucHV0JykudmFsdWUsIDEwKSB8fCBudWxsLFxuICAgIGRlc2NyaXB0aW9uOiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F3YXJkLWRlc2MtaW5wdXQnKS52YWx1ZS50cmltKCksXG4gICAgcmVsZXZhbnRfZm9yOiByZWxldmFudFJhdy5zcGxpdCgnLCcpLm1hcChzID0+IHMudHJpbSgpKS5maWx0ZXIoQm9vbGVhbiksXG4gICAgLi4uKGFjdGlvbiA9PT0gJ3VwZGF0ZScgPyB7IGlkeCB9IDoge30pLFxuICB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9hd2FyZCcsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSwgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNsb3NlQXdhcmRNb2RhbCgpO1xuICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnQXdhcmRzICYgSG9ub3VycycsIGRhdGEuYWN0aW9uIHx8ICd1cGRhdGVkJyk7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IFNhdmVkJywgYEF3YXJkIFwiJHt0aXRsZX1cIiAke2RhdGEuYWN0aW9ufS5gKTtcbiAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdTYXZlIGZhaWxlZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIHNhdmUgYXdhcmQnKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVNYXN0ZXJBd2FyZChpZHgsIHRpdGxlKSB7XG4gIHNob3dDb25maXJtTW9kYWwoXG4gICAgJ1x1RDgzRFx1REREMVx1RkUwRiBEZWxldGUgQXdhcmQnLFxuICAgIGBEZWxldGUgXCIke3RpdGxlfVwiPyBUaGlzIGNhbm5vdCBiZSB1bmRvbmUuYCxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvYXdhcmQnLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiAnZGVsZXRlJywgaWR4IH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnQXdhcmRzICYgSG9ub3VycycsIGRhdGEuYWN0aW9uIHx8ICdkZWxldGVkJyk7XG4gICAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBEZWxldGVkJywgYEF3YXJkIHJlbW92ZWQuYCk7XG4gICAgICAgICAgYXdhaXQgcG9wdWxhdGVNYXN0ZXJUYWIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGF0YS5lcnJvciB8fCAnRGVsZXRlIGZhaWxlZCcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIGRlbGV0ZSBhd2FyZCcpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuLy8gLS0tLSBDZXJ0aWZpY2F0aW9uIENSVUQgaGFuZGxlcnMgLS0tLVxuXG5mdW5jdGlvbiBzaG93QWRkQ2VydGlmaWNhdGlvbk1vZGFsKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2VydC1tb2RhbC1pZHgnKS52YWx1ZSAgICA9ICctMSc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZXJ0LW5hbWUtaW5wdXQnKS52YWx1ZSAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZXJ0LWlzc3Vlci1pbnB1dCcpLnZhbHVlID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZXJ0LXllYXItaW5wdXQnKS52YWx1ZSAgID0gJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItY2VydC1tb2RhbC10aXRsZScpLnRleHRDb250ZW50ID0gJ0FkZCBDZXJ0aWZpY2F0aW9uJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1jZXJ0LW1vZGFsLW92ZXJsYXknKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBfZm9jdXNlZEVsZW1lbnRCZWZvcmVNb2RhbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHNldEluaXRpYWxGb2N1cygnbWFzdGVyLWNlcnQtbW9kYWwtb3ZlcmxheScpO1xuICB0cmFwRm9jdXMoJ21hc3Rlci1jZXJ0LW1vZGFsLW92ZXJsYXknKTtcbn1cblxuZnVuY3Rpb24gZWRpdE1hc3RlckNlcnRpZmljYXRpb24oY2VydCwgaWR4KSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZXJ0LW1vZGFsLWlkeCcpLnZhbHVlICAgID0gaWR4O1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2VydC1uYW1lLWlucHV0JykudmFsdWUgICA9IGNlcnQubmFtZSB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NlcnQtaXNzdWVyLWlucHV0JykudmFsdWUgPSBjZXJ0Lmlzc3VlciB8fCAnJztcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NlcnQteWVhci1pbnB1dCcpLnZhbHVlICAgPSBjZXJ0LnllYXIgfHwgJyc7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItY2VydC1tb2RhbC10aXRsZScpLnRleHRDb250ZW50ID0gJ0VkaXQgQ2VydGlmaWNhdGlvbic7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItY2VydC1tb2RhbC1vdmVybGF5Jykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1jZXJ0LW1vZGFsLW92ZXJsYXknKTtcbiAgdHJhcEZvY3VzKCdtYXN0ZXItY2VydC1tb2RhbC1vdmVybGF5Jyk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlQ2VydGlmaWNhdGlvbk1vZGFsKCkge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWNlcnQtbW9kYWwtb3ZlcmxheScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlc3RvcmVGb2N1cygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlTWFzdGVyQ2VydGlmaWNhdGlvbigpIHtcbiAgY29uc3QgaWR4ICA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZXJ0LW1vZGFsLWlkeCcpLnZhbHVlLCAxMCk7XG4gIGNvbnN0IG5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2VydC1uYW1lLWlucHV0JykudmFsdWUudHJpbSgpO1xuICBpZiAoIW5hbWUpIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNkEwXHVGRTBGIFZhbGlkYXRpb24nLCAnQ2VydGlmaWNhdGlvbiBuYW1lIGlzIHJlcXVpcmVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBhY3Rpb24gPSBpZHggPj0gMCA/ICd1cGRhdGUnIDogJ2FkZCc7XG4gIGNvbnN0IGJvZHkgPSB7XG4gICAgYWN0aW9uLCBuYW1lLFxuICAgIGlzc3VlcjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NlcnQtaXNzdWVyLWlucHV0JykudmFsdWUudHJpbSgpLFxuICAgIHllYXI6ICAgcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NlcnQteWVhci1pbnB1dCcpLnZhbHVlLCAxMCkgfHwgbnVsbCxcbiAgICAuLi4oYWN0aW9uID09PSAndXBkYXRlJyA/IHsgaWR4IH0gOiB7fSksXG4gIH07XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL2NlcnRpZmljYXRpb24nLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjbG9zZUNlcnRpZmljYXRpb25Nb2RhbCgpO1xuICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnQ2VydGlmaWNhdGlvbnMnLCBkYXRhLmFjdGlvbiB8fCAndXBkYXRlZCcpO1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBTYXZlZCcsIGBDZXJ0aWZpY2F0aW9uIFwiJHtuYW1lfVwiICR7ZGF0YS5hY3Rpb259LmApO1xuICAgICAgYXdhaXQgcG9wdWxhdGVNYXN0ZXJUYWIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGRhdGEuZXJyb3IgfHwgJ1NhdmUgZmFpbGVkJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gc2F2ZSBjZXJ0aWZpY2F0aW9uJyk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlTWFzdGVyQ2VydGlmaWNhdGlvbihpZHgsIG5hbWUpIHtcbiAgc2hvd0NvbmZpcm1Nb2RhbChcbiAgICAnXHVEODNEXHVEREQxXHVGRTBGIERlbGV0ZSBDZXJ0aWZpY2F0aW9uJyxcbiAgICBgRGVsZXRlIFwiJHtuYW1lfVwiPyBUaGlzIGNhbm5vdCBiZSB1bmRvbmUuYCxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvY2VydGlmaWNhdGlvbicsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY3Rpb246ICdkZWxldGUnLCBpZHggfSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgaWYgKGRhdGEub2spIHtcbiAgICAgICAgICBfc2V0TWFzdGVyQ2hhbmdlTm90aWNlKCdDZXJ0aWZpY2F0aW9ucycsIGRhdGEuYWN0aW9uIHx8ICdkZWxldGVkJyk7XG4gICAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBEZWxldGVkJywgYENlcnRpZmljYXRpb24gcmVtb3ZlZC5gKTtcbiAgICAgICAgICBhd2FpdCBwb3B1bGF0ZU1hc3RlclRhYigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkYXRhLmVycm9yIHx8ICdEZWxldGUgZmFpbGVkJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gZGVsZXRlIGNlcnRpZmljYXRpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBCYWNrdXAgSGlzdG9yeSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gb3BlbkJhY2t1cEhpc3RvcnlNb2RhbCgpIHtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBvdmVybGF5LmlkID0gJ2JhY2t1cC1oaXN0b3J5LW92ZXJsYXknO1xuICBvdmVybGF5LnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC41KTt6LWluZGV4OjEwMDAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjsnO1xuICBvdmVybGF5LmlubmVySFRNTCA9IGBcbiAgICA8ZGl2IHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiIGFyaWEtbGFiZWxsZWRieT1cImJhY2t1cC1tb2RhbC10aXRsZVwiXG4gICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoyNHB4IDI4cHg7bWF4LXdpZHRoOjU2MHB4O3dpZHRoOjk0JTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0Ojgwdmg7b3ZlcmZsb3cteTphdXRvO2JveC1zaGFkb3c6MCAyMHB4IDYwcHggcmdiYSgwLDAsMCwwLjMpO1wiPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgICA8aDMgaWQ9XCJiYWNrdXAtbW9kYWwtdGl0bGVcIiBzdHlsZT1cIm1hcmdpbjowO2ZvbnQtc2l6ZToxLjFlbTtjb2xvcjojMWUyOTNiO1wiPlx1RDgzRFx1REQ1MCBCYWNrdXAgSGlzdG9yeTwvaDM+XG4gICAgICAgIDxidXR0b24gaWQ9XCJiYWNrdXAtbW9kYWwtY2xvc2VcIiBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MS4zZW07Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY0NzQ4YjtcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cdTI3MTU8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgc3R5bGU9XCJmb250LXNpemU6MC44OGVtO2NvbG9yOiM2NDc0OGI7bWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgICBBIGJhY2t1cCBpcyBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYmVmb3JlIGV2ZXJ5IHNhdmUuIFJlc3RvcmluZyB3aWxsIHByZXNlcnZlIHRoZSBjdXJyZW50IHZlcnNpb24gYXMgYSBuZXcgYmFja3VwIGZpcnN0LlxuICAgICAgPC9wPlxuICAgICAgPGRpdiBpZD1cImJhY2t1cC1saXN0LWJvZHlcIiBzdHlsZT1cImZvbnQtc2l6ZTowLjllbTtcIj5Mb2FkaW5nXHUyMDI2PC9kaXY+XG4gICAgPC9kaXY+YDtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdmVybGF5KTtcbiAgaWYgKHR5cGVvZiB0cmFwRm9jdXMgPT09ICdmdW5jdGlvbicpIHRyYXBGb2N1cygnYmFja3VwLWhpc3Rvcnktb3ZlcmxheScpO1xuICBjb25zdCBjbG9zZSA9ICgpID0+IHsgb3ZlcmxheS5yZW1vdmUoKTsgaWYgKHR5cGVvZiByZXN0b3JlRm9jdXMgPT09ICdmdW5jdGlvbicpIHJlc3RvcmVGb2N1cygpOyB9O1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFja3VwLW1vZGFsLWNsb3NlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZSk7XG4gIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHsgaWYgKGUudGFyZ2V0ID09PSBvdmVybGF5KSBjbG9zZSgpOyB9KTtcbiAgb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZSA9PiB7IGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGNsb3NlKCk7IH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvaGlzdG9yeScpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFja3VwLWxpc3QtYm9keScpO1xuICAgIGlmICghYm9keSkgcmV0dXJuO1xuICAgIGlmICghZGF0YS5vayB8fCAhZGF0YS5zbmFwc2hvdHM/Lmxlbmd0aCkge1xuICAgICAgYm9keS50ZXh0Q29udGVudCA9ICdObyBiYWNrdXBzIGZvdW5kLic7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJvd3MgPSBkYXRhLnNuYXBzaG90cy5tYXAocyA9PiB7XG4gICAgICBjb25zdCBkdCA9IG5ldyBEYXRlKHMubXRpbWUgKiAxMDAwKS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgY29uc3Qga2IgPSAocy5zaXplIC8gMTAyNCkudG9GaXhlZCgxKTtcbiAgICAgIHJldHVybiBgPHRyPlxuICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7Y29sb3I6IzFlMjkzYjtcIj4ke2VzY2FwZUh0bWwoZHQpfTwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6NnB4IDhweDtjb2xvcjojNjQ3NDhiO3doaXRlLXNwYWNlOm5vd3JhcDtcIj4ke2tifSBLQjwvdGQ+XG4gICAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6NnB4IDhweDtcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBzZWNvbmRhcnlcIiBzdHlsZT1cInBhZGRpbmc6M3B4IDEwcHg7Zm9udC1zaXplOjAuODJlbTtcIlxuICAgICAgICAgICAgb25jbGljaz1cInJlc3RvcmVCYWNrdXAoJHtKU09OLnN0cmluZ2lmeShzLmZpbGVuYW1lKX0pXCI+UmVzdG9yZTwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5gO1xuICAgIH0pLmpvaW4oJycpO1xuICAgIGJvZHkuaW5uZXJIVE1MID0gYDx0YWJsZSBzdHlsZT1cIndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO1wiPlxuICAgICAgPHRoZWFkPjx0ciBzdHlsZT1cImJvcmRlci1ib3R0b206MXB4IHNvbGlkICNlMmU4ZjA7XCI+XG4gICAgICAgIDx0aCBzdHlsZT1cInBhZGRpbmc6NHB4IDhweDt0ZXh0LWFsaWduOmxlZnQ7Y29sb3I6IzQ3NTU2OTtmb250LXdlaWdodDo2MDA7XCI+U2F2ZWQ8L3RoPlxuICAgICAgICA8dGggc3R5bGU9XCJwYWRkaW5nOjRweCA4cHg7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiM0NzU1Njk7Zm9udC13ZWlnaHQ6NjAwO1wiPlNpemU8L3RoPlxuICAgICAgICA8dGg+PC90aD5cbiAgICAgIDwvdHI+PC90aGVhZD5cbiAgICAgIDx0Ym9keT4ke3Jvd3N9PC90Ym9keT5cbiAgICA8L3RhYmxlPmA7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2t1cC1saXN0LWJvZHknKTtcbiAgICBpZiAoYm9keSkgYm9keS50ZXh0Q29udGVudCA9ICdGYWlsZWQgdG8gbG9hZCBiYWNrdXAgaGlzdG9yeS4nO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc3RvcmVCYWNrdXAoZmlsZW5hbWUpIHtcbiAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgKHR5cGVvZiBjb25maXJtRGlhbG9nID09PSAnZnVuY3Rpb24nXG4gICAgPyBjb25maXJtRGlhbG9nKCdSZXN0b3JlIHRoaXMgYmFja3VwPyBUaGUgY3VycmVudCB2ZXJzaW9uIHdpbGwgYmUgc2F2ZWQgYXMgYSBuZXcgYmFja3VwIGZpcnN0LicpXG4gICAgOiBQcm9taXNlLnJlc29sdmUod2luZG93LmNvbmZpcm0oJ1Jlc3RvcmUgdGhpcyBiYWNrdXA/IFRoZSBjdXJyZW50IHZlcnNpb24gd2lsbCBiZSBzYXZlZCBhcyBhIG5ldyBiYWNrdXAgZmlyc3QuJykpKTtcbiAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9yZXN0b3JlJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZmlsZW5hbWUgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYWNrdXAtaGlzdG9yeS1vdmVybGF5Jyk/LnJlbW92ZSgpO1xuICAgICAgaWYgKHR5cGVvZiByZXN0b3JlRm9jdXMgPT09ICdmdW5jdGlvbicpIHJlc3RvcmVGb2N1cygpO1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBSZXN0b3JlZCcsICdNYXN0ZXIgQ1YgcmVzdG9yZWQgZnJvbSBiYWNrdXAuIFJlbG9hZCB0aGUgdGFiIHRvIHNlZSB0aGUgdXBkYXRlZCBkYXRhLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGF0YS5lcnJvciB8fCAnUmVzdG9yZSBmYWlsZWQuJyk7XG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gcmVzdG9yZSBiYWNrdXAuJyk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFVuZG8gLyBSZWRvIChHQVAtMTkgMTYuNykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4vLyBTaW5nbGUtbGV2ZWw6IFVuZG8gcmVzdG9yZXMgdGhlIG1vc3QgcmVjZW50IGJhY2t1cCBzbmFwc2hvdCAoaS5lLiB0aGVcbi8vIHN0YXRlIGJlZm9yZSB0aGUgbGFzdCBzYXZlKTsgUmVkbyByZXN0b3JlcyB0aGUgc2FmZXR5IGJhY2t1cCB0aGUgcmVzdG9yZVxuLy8gZW5kcG9pbnQgdG9vayBvZiB0aGUgcHJlLXVuZG8gc3RhdGUuIEJvdGggcmV1c2UgdGhlIGV4aXN0aW5nXG4vLyAvYXBpL21hc3Rlci1kYXRhL2hpc3RvcnkgKyAvYXBpL21hc3Rlci1kYXRhL3Jlc3RvcmUgZW5kcG9pbnRzIHJhdGhlciB0aGFuXG4vLyBhZGRpbmcgbmV3IGJhY2tlbmQgc3VyZmFjZSBcdTIwMTQgc2VlIF9tYXN0ZXJDdlJlZG9CYWNrdXAgYWJvdmUgZm9yIHRoZSByZXNldFxuLy8gY29udHJhY3Qgd2l0aCBwb3B1bGF0ZU1hc3RlclRhYigpLlxuXG5hc3luYyBmdW5jdGlvbiB1bmRvTWFzdGVyRGF0YUNoYW5nZSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9tYXN0ZXItZGF0YS9oaXN0b3J5Jyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKCFkYXRhLm9rIHx8ICFkYXRhLnNuYXBzaG90cz8ubGVuZ3RoKSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyMTM5XHVGRTBGIE5vdGhpbmcgdG8gdW5kbycsICdObyBiYWNrdXAgc25hcHNob3RzIGFyZSBhdmFpbGFibGUgeWV0LicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtb3N0UmVjZW50ID0gZGF0YS5zbmFwc2hvdHNbMF07IC8vIGhpc3Rvcnkgcm91dGUgcmV0dXJucyBuZXdlc3QtZmlyc3RcbiAgICBjb25zdCB3aGVuID0gbmV3IERhdGUobW9zdFJlY2VudC5tdGltZSAqIDEwMDApLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgKHR5cGVvZiBjb25maXJtRGlhbG9nID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGNvbmZpcm1EaWFsb2coYFVuZG8gdGhlIG1vc3QgcmVjZW50IGNoYW5nZT8gVGhpcyByZXN0b3JlcyB0aGUgdmVyc2lvbiBzYXZlZCAke3doZW59LiBUaGUgY3VycmVudCB2ZXJzaW9uIHdpbGwgYmUgc2F2ZWQgYXMgYSBuZXcgYmFja3VwIGZpcnN0LmApXG4gICAgICA6IFByb21pc2UucmVzb2x2ZSh3aW5kb3cuY29uZmlybShgVW5kbyB0aGUgbW9zdCByZWNlbnQgY2hhbmdlPyBUaGlzIHJlc3RvcmVzIHRoZSB2ZXJzaW9uIHNhdmVkICR7d2hlbn0uYCkpKTtcbiAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVzdG9yZVJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL3Jlc3RvcmUnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBmaWxlbmFtZTogbW9zdFJlY2VudC5maWxlbmFtZSB9KSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN0b3JlRGF0YSA9IGF3YWl0IHJlc3RvcmVSZXMuanNvbigpO1xuICAgIGlmIChyZXN0b3JlRGF0YS5vaykge1xuICAgICAgLy8gTXVzdCBiZSBzZXQgKmJlZm9yZSogcG9wdWxhdGVNYXN0ZXJUYWIoKSByZW5kZXJzIHRoZSBSZWRvIGJ1dHRvbixcbiAgICAgIC8vIG5vdCBhZnRlciBcdTIwMTQgdGhlIGJ1dHRvbidzIGRpc2FibGVkIHN0YXRlIGlzIGJha2VkIGludG8gdGhhdCByZW5kZXIuXG4gICAgICBfbWFzdGVyQ3ZSZWRvQmFja3VwID0gcmVzdG9yZURhdGEuc2FmZXR5X2JhY2t1cCB8fCBudWxsO1xuICAgICAgX21hc3RlckN2U3VwcHJlc3NSZWRvUmVzZXQgPSB0cnVlO1xuICAgICAgYXdhaXQgcG9wdWxhdGVNYXN0ZXJUYWIoKTtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3MDUgVW5kb25lJywgJ01hc3RlciBDViByZXZlcnRlZCB0byB0aGUgcHJldmlvdXMgc2F2ZWQgdmVyc2lvbi4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIHJlc3RvcmVEYXRhLmVycm9yIHx8ICdVbmRvIGZhaWxlZC4nKTtcbiAgICB9XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0ZhaWxlZCB0byB1bmRvLicpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZG9NYXN0ZXJEYXRhQ2hhbmdlKCkge1xuICBpZiAoIV9tYXN0ZXJDdlJlZG9CYWNrdXApIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyMTM5XHVGRTBGIE5vdGhpbmcgdG8gcmVkbycsICdUaGVyZSBpcyBubyB1bmRvbmUgY2hhbmdlIHRvIHJlc3RvcmUuJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvcmVzdG9yZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGZpbGVuYW1lOiBfbWFzdGVyQ3ZSZWRvQmFja3VwIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICAvLyBEZWxpYmVyYXRlbHkgZG8gbm90IHJlLWFybSByZWRvIFx1MjAxNCB0aGlzIHJlc3RvcmUgY29uc3VtZXMgdGhlIHJlZG9cbiAgICAgIC8vIHRhcmdldCwgYW5kIHBvcHVsYXRlTWFzdGVyVGFiKCkncyBkZWZhdWx0IHJlc2V0IGNsZWFycyBpdC5cbiAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IFJlZG9uZScsICdNYXN0ZXIgQ1YgcmVzdG9yZWQgdG8gdGhlIHZlcnNpb24gYmVmb3JlIHRoZSB1bmRvLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGF0YS5lcnJvciB8fCAnUmVkbyBmYWlsZWQuJyk7XG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gcmVkby4nKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBleHBvcnRNYXN0ZXJDVigpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSB3aW5kb3cuX2N1cnJlbnRTZXNzaW9uSWQ7XG4gICAgY29uc3QgdXJsID0gYC9hcGkvbWFzdGVyLWRhdGEvZXhwb3J0JHtzZXNzaW9uSWQgPyBgP3Nlc3Npb25faWQ9JHtzZXNzaW9uSWR9YCA6ICcnfWA7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdFeHBvcnQgZmFpbGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXMuYmxvYigpO1xuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICBhLmRvd25sb2FkID0gJ01hc3Rlcl9DVl9EYXRhLmpzb24nO1xuICAgIGEuY2xpY2soKTtcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGEuaHJlZik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0ZhaWxlZCB0byBleHBvcnQgbWFzdGVyIENWJyk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEZ1bGwgZGF0YSBwcmV2aWV3IChHQVAtMTkgMTYuMTUpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBvcGVuRnVsbERhdGFQcmV2aWV3TW9kYWwoKSB7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgb3ZlcmxheS5pZCA9ICdtYXN0ZXItY3YtcHJldmlldy1vdmVybGF5JztcbiAgb3ZlcmxheS5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNSk7ei1pbmRleDoxMDAwMDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7JztcbiAgb3ZlcmxheS5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBhcmlhLWxhYmVsbGVkYnk9XCJtYXN0ZXItY3YtcHJldmlldy10aXRsZVwiXG4gICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoyNHB4IDI4cHg7bWF4LXdpZHRoOjc2MHB4O3dpZHRoOjk0JTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0Ojg1dmg7b3ZlcmZsb3cteTphdXRvO2JveC1zaGFkb3c6MCAyMHB4IDYwcHggcmdiYSgwLDAsMCwwLjMpO1wiPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgICA8aDMgaWQ9XCJtYXN0ZXItY3YtcHJldmlldy10aXRsZVwiIHN0eWxlPVwibWFyZ2luOjA7Zm9udC1zaXplOjEuMWVtO2NvbG9yOiMxZTI5M2I7XCI+XHVEODNEXHVEQzQxIEZ1bGwgTWFzdGVyIENWIERhdGEgKHJlYWQtb25seSk8L2gzPlxuICAgICAgICA8YnV0dG9uIGlkPVwibWFzdGVyLWN2LXByZXZpZXctY2xvc2VcIiBzdHlsZT1cImJhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MS4zZW07Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY0NzQ4YjtcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cdTI3MTU8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOiM2NDc0OGI7bWFyZ2luLWJvdHRvbToxMnB4O1wiPlxuICAgICAgICBUaGUgY29tcGxldGUsIHVuZmlsdGVyZWQgY29udGVudHMgb2YgPGNvZGU+TWFzdGVyX0NWX0RhdGEuanNvbjwvY29kZT4gXHUyMDE0IGluY2x1ZGluZyBhbnkgZmllbGRzIHRoZSBzdHJ1Y3R1cmVkIGVkaXRvcnMgYWJvdmUgZG9uJ3Qgc3VyZmFjZS5cbiAgICAgIDwvcD5cbiAgICAgIDxwcmUgaWQ9XCJtYXN0ZXItY3YtcHJldmlldy1ib2R5XCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmOGZhZmM7Ym9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTJweDtmb250LXNpemU6MC44ZW07bGluZS1oZWlnaHQ6MS41O3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstd29yZDtcIj5Mb2FkaW5nXHUyMDI2PC9wcmU+XG4gICAgPC9kaXY+YDtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdmVybGF5KTtcbiAgaWYgKHR5cGVvZiB0cmFwRm9jdXMgPT09ICdmdW5jdGlvbicpIHRyYXBGb2N1cygnbWFzdGVyLWN2LXByZXZpZXctb3ZlcmxheScpO1xuICBjb25zdCBjbG9zZSA9ICgpID0+IHsgb3ZlcmxheS5yZW1vdmUoKTsgaWYgKHR5cGVvZiByZXN0b3JlRm9jdXMgPT09ICdmdW5jdGlvbicpIHJlc3RvcmVGb2N1cygpOyB9O1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWN2LXByZXZpZXctY2xvc2UnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlKTtcbiAgb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7IGlmIChlLnRhcmdldCA9PT0gb3ZlcmxheSkgY2xvc2UoKTsgfSk7XG4gIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7IGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGNsb3NlKCk7IH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvZnVsbCcpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWN2LXByZXZpZXctYm9keScpO1xuICAgIGlmIChib2R5KSBib2R5LnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1jdi1wcmV2aWV3LWJvZHknKTtcbiAgICBpZiAoYm9keSkgYm9keS50ZXh0Q29udGVudCA9ICdGYWlsZWQgdG8gbG9hZCBtYXN0ZXIgQ1YgZGF0YS4nO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBGdWxsLWZpbGUgSlNPTiBpbXBvcnQgd2l0aCBkaWZmIHJldmlldyAoR0FQLTE5IDE2LjE2KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbi8vXG4vLyBOb3QgYSBtZXJnZTogaW1wb3J0LWNvbmZpcm0gcmVwbGFjZXMgdGhlIGVudGlyZSBmaWxlLiBUaGUgaW1wb3J0LXByZXZpZXdcbi8vIHN0ZXAncyBzZWN0aW9uLWxldmVsIGNoYW5nZWQvY291bnQgc3VtbWFyeSBpcyB0aGUgdXNlcidzIGNoYW5jZSB0byBjYXRjaFxuLy8gYW4gdW5pbnRlbmRlZCBvdmVyd3JpdGUgYmVmb3JlIGNvbmZpcm1pbmcgXHUyMDE0IGZ1bGwgZmllbGQtbGV2ZWwgZGlmZmluZ1xuLy8gd2l0aGluIGEgY2hhbmdlZCBzZWN0aW9uIGlzIGEga25vd24gdjEgbGltaXRhdGlvbiAodGhlIHNhbWUgcG9zdHVyZVxuLy8gYWxyZWFkeSBhY2NlcHRlZCBmb3Igb3RoZXIgYWR2aXNvcnktb25seSByZXZpZXcgc3VyZmFjZXMgaW4gdGhpcyB0YWIpLlxuXG5sZXQgX21hc3RlckN2SW1wb3J0RGF0YSA9IG51bGw7XG5cbmZ1bmN0aW9uIHRyaWdnZXJNYXN0ZXJDdkltcG9ydCgpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1jdi1pbXBvcnQtZmlsZS1pbnB1dCcpPy5jbGljaygpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVNYXN0ZXJDdkltcG9ydEZpbGUoZXZlbnQpIHtcbiAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldD8uZmlsZXM/LlswXTtcbiAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7IC8vIGFsbG93IHJlLXNlbGVjdGluZyB0aGUgc2FtZSBmaWxlbmFtZSBsYXRlclxuICBpZiAoIWZpbGUpIHJldHVybjtcbiAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgcmVhZGVyLm9ubG9hZCA9IGFzeW5jICgpID0+IHtcbiAgICBsZXQgcGFyc2VkO1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKFN0cmluZyhyZWFkZXIucmVzdWx0KSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdUaGF0IGZpbGUgaXMgbm90IHZhbGlkIEpTT04uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdFeHBlY3RlZCBhIEpTT04gb2JqZWN0IChNYXN0ZXJfQ1ZfRGF0YS5qc29uIHNoYXBlKSwgbm90IGFuIGFycmF5IG9yIHNjYWxhci4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgX3N1Ym1pdE1hc3RlckN2SW1wb3J0UHJldmlldyhwYXJzZWQpO1xuICB9O1xuICByZWFkZXIub25lcnJvciA9ICgpID0+IHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIHJlYWQgdGhlIHNlbGVjdGVkIGZpbGUuJyk7XG4gIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfc3VibWl0TWFzdGVyQ3ZJbXBvcnRQcmV2aWV3KHBhcnNlZCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL2ltcG9ydC1wcmV2aWV3Jywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBkYXRhOiBwYXJzZWQgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKCFkYXRhLm9rKSB7XG4gICAgICBjb25zdCBkZXRhaWwgPSAoZGF0YS52YWxpZGF0aW9uX2Vycm9ycyB8fCBbXSkuam9pbignOyAnKTtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkZXRhaWwgPyBgJHtkYXRhLmVycm9yfTogJHtkZXRhaWx9YCA6IChkYXRhLmVycm9yIHx8ICdJbXBvcnQgcHJldmlldyBmYWlsZWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfbWFzdGVyQ3ZJbXBvcnREYXRhID0gcGFyc2VkO1xuICAgIF9zaG93TWFzdGVyQ3ZJbXBvcnRQcmV2aWV3TW9kYWwoZGF0YS5zZWN0aW9ucyB8fCBbXSk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0ZhaWxlZCB0byBwcmV2aWV3IHRoZSBpbXBvcnQuJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Nob3dNYXN0ZXJDdkltcG9ydFByZXZpZXdNb2RhbChzZWN0aW9ucykge1xuICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG92ZXJsYXkuaWQgPSAnbWFzdGVyLWN2LWltcG9ydC1vdmVybGF5JztcbiAgb3ZlcmxheS5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNSk7ei1pbmRleDoxMDAwMDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7JztcbiAgY29uc3QgY2hhbmdlZFNlY3Rpb25zID0gc2VjdGlvbnMuZmlsdGVyKChzKSA9PiBzLmNoYW5nZWQpO1xuICBjb25zdCByb3dzID0gc2VjdGlvbnMubWFwKChzKSA9PiBgXG4gICAgPHRyIHN0eWxlPVwiJHtzLmNoYW5nZWQgPyAnYmFja2dyb3VuZDp2YXIoLS1jdi13YXJuLWJnLCAjZmZmYmViKTsnIDogJyd9XCI+XG4gICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7Y29sb3I6IzFlMjkzYjtcIj4ke2VzY2FwZUh0bWwocy5zZWN0aW9uKX08L3RkPlxuICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo2cHggOHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM2NDc0OGI7XCI+JHtzLmN1cnJlbnRfY291bnR9PC90ZD5cbiAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6NnB4IDhweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojNjQ3NDhiO1wiPiR7cy5uZXdfY291bnR9PC90ZD5cbiAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6NnB4IDhweDtcIj4ke3MuY2hhbmdlZCA/ICdcdTI2QTAgY2hhbmdlZCcgOiAnXHUyMDE0J308L3RkPlxuICAgIDwvdHI+YCkuam9pbignJyk7XG4gIG92ZXJsYXkuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCIgYXJpYS1sYWJlbGxlZGJ5PVwibWFzdGVyLWN2LWltcG9ydC10aXRsZVwiXG4gICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoyNHB4IDI4cHg7bWF4LXdpZHRoOjY0MHB4O3dpZHRoOjk0JTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0Ojg1dmg7b3ZlcmZsb3cteTphdXRvO2JveC1zaGFkb3c6MCAyMHB4IDYwcHggcmdiYSgwLDAsMCwwLjMpO1wiPlxuICAgICAgPGgzIGlkPVwibWFzdGVyLWN2LWltcG9ydC10aXRsZVwiIHN0eWxlPVwibWFyZ2luOjAgMCAxMnB4O2ZvbnQtc2l6ZToxLjFlbTtjb2xvcjojMWUyOTNiO1wiPlx1MkIwNlx1RkUwRiBJbXBvcnQgTWFzdGVyIENWIERhdGEgXHUyMDE0IFJldmlldzwvaDM+XG4gICAgICA8ZGl2IHJvbGU9XCJhbGVydFwiIHN0eWxlPVwiYmFja2dyb3VuZDojZmVmMmYyO2JvcmRlcjoxcHggc29saWQgI2ZjYTVhNTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHggMTRweDttYXJnaW4tYm90dG9tOjE0cHg7Zm9udC1zaXplOjAuODZlbTtjb2xvcjojOTkxYjFiO1wiPlxuICAgICAgICA8c3Ryb25nPlRoaXMgcmVwbGFjZXMgdGhlIGVudGlyZSBmaWxlPC9zdHJvbmc+LCBub3QganVzdCB0aGUgY2hhbmdlZCBzZWN0aW9ucy4gQSBiYWNrdXAgaXMgY3JlYXRlZFxuICAgICAgICBhdXRvbWF0aWNhbGx5IGJlZm9yZSB0aGUgd3JpdGUgXHUyMDE0IHNlZSBcdUQ4M0RcdURENTAgQmFja3VwcyBhYm92ZSB0byByZXN0b3JlIGl0IGlmIG5lZWRlZC5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOiM2NDc0OGI7bWFyZ2luLWJvdHRvbTo4cHg7XCI+XG4gICAgICAgICR7Y2hhbmdlZFNlY3Rpb25zLmxlbmd0aCA/IGAke2NoYW5nZWRTZWN0aW9ucy5sZW5ndGh9IHNlY3Rpb24ocykgd291bGQgY2hhbmdlOmAgOiAnTm8gc2VjdGlvbnMgd291bGQgY2hhbmdlIFx1MjAxNCB0aGUgdXBsb2FkZWQgZmlsZSBtYXRjaGVzIHRoZSBjdXJyZW50IGRhdGEuJ31cbiAgICAgIDwvcD5cbiAgICAgIDx0YWJsZSBzdHlsZT1cIndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2ZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luLWJvdHRvbToxNnB4O1wiPlxuICAgICAgICA8dGhlYWQ+PHRyIHN0eWxlPVwiYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2UyZThmMDtcIj5cbiAgICAgICAgICA8dGggc3R5bGU9XCJwYWRkaW5nOjRweCA4cHg7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiM0NzU1Njk7XCI+U2VjdGlvbjwvdGg+XG4gICAgICAgICAgPHRoIHN0eWxlPVwicGFkZGluZzo0cHggOHB4O2NvbG9yOiM0NzU1Njk7XCI+Q3VycmVudDwvdGg+XG4gICAgICAgICAgPHRoIHN0eWxlPVwicGFkZGluZzo0cHggOHB4O2NvbG9yOiM0NzU1Njk7XCI+TmV3PC90aD5cbiAgICAgICAgICA8dGggc3R5bGU9XCJwYWRkaW5nOjRweCA4cHg7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiM0NzU1Njk7XCI+PC90aD5cbiAgICAgICAgPC90cj48L3RoZWFkPlxuICAgICAgICA8dGJvZHk+JHtyb3dzfTwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7Z2FwOjhweDtcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG5cIiBpZD1cIm1hc3Rlci1jdi1pbXBvcnQtY2FuY2VsXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuIHByaW1hcnlcIiBpZD1cIm1hc3Rlci1jdi1pbXBvcnQtY29uZmlybVwiJHtjaGFuZ2VkU2VjdGlvbnMubGVuZ3RoID8gJycgOiAnIGRpc2FibGVkJ30+Q29uZmlybSBJbXBvcnQ8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3ZlcmxheSk7XG4gIGlmICh0eXBlb2YgdHJhcEZvY3VzID09PSAnZnVuY3Rpb24nKSB0cmFwRm9jdXMoJ21hc3Rlci1jdi1pbXBvcnQtb3ZlcmxheScpO1xuICBjb25zdCBjbG9zZSA9ICgpID0+IHsgb3ZlcmxheS5yZW1vdmUoKTsgX21hc3RlckN2SW1wb3J0RGF0YSA9IG51bGw7IGlmICh0eXBlb2YgcmVzdG9yZUZvY3VzID09PSAnZnVuY3Rpb24nKSByZXN0b3JlRm9jdXMoKTsgfTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1jdi1pbXBvcnQtY2FuY2VsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZSk7XG4gIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7IGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGNsb3NlKCk7IH0pO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWN2LWltcG9ydC1jb25maXJtJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBjb25maXJtTWFzdGVyQ3ZJbXBvcnQoKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbmZpcm1NYXN0ZXJDdkltcG9ydCgpIHtcbiAgaWYgKCFfbWFzdGVyQ3ZJbXBvcnREYXRhKSByZXR1cm47XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvaW1wb3J0LWNvbmZpcm0nLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGRhdGE6IF9tYXN0ZXJDdkltcG9ydERhdGEgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1jdi1pbXBvcnQtb3ZlcmxheScpPy5yZW1vdmUoKTtcbiAgICBfbWFzdGVyQ3ZJbXBvcnREYXRhID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIHJlc3RvcmVGb2N1cyA9PT0gJ2Z1bmN0aW9uJykgcmVzdG9yZUZvY3VzKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ01hc3RlciBDViBEYXRhJywgJ2ltcG9ydGVkJyk7XG4gICAgICBzaG93QWxlcnRNb2RhbChcbiAgICAgICAgJ1x1MjcwNSBJbXBvcnRlZCcsXG4gICAgICAgIGBNYXN0ZXIgQ1YgZGF0YSByZXBsYWNlZC4ke2RhdGEuY29tbWl0X2hhc2ggPyBgIENvbW1pdDogJHtkYXRhLmNvbW1pdF9oYXNoLnNsaWNlKDAsIDEwKX0uYCA6ICcnfSR7ZGF0YS5naXRfZXJyb3IgPyBgIChnaXQgd2FybmluZzogJHtkYXRhLmdpdF9lcnJvcn0pYCA6ICcnfWBcbiAgICAgICk7XG4gICAgICBhd2FpdCBwb3B1bGF0ZU1hc3RlclRhYigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkZXRhaWwgPSAoZGF0YS52YWxpZGF0aW9uX2Vycm9ycyB8fCBbXSkuam9pbignOyAnKTtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCBkZXRhaWwgPyBgJHtkYXRhLmVycm9yfTogJHtkZXRhaWx9YCA6IChkYXRhLmVycm9yIHx8ICdJbXBvcnQgZmFpbGVkLicpKTtcbiAgICB9XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0ZhaWxlZCB0byBpbXBvcnQgbWFzdGVyIENWIGRhdGEuJyk7XG4gIH1cbn1cblxuLy8gLS0tLSBBY2hpZXZlbWVudC9TdW1tYXJ5IGRlbGV0ZSBoYW5kbGVycyAtLS0tXG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZU1hc3RlckFjaGlldmVtZW50KGlkLCB0aXRsZSkge1xuICBzaG93Q29uZmlybU1vZGFsKFxuICAgICdcdUQ4M0RcdURERDFcdUZFMEYgRGVsZXRlIEFjaGlldmVtZW50JyxcbiAgICBgRGVsZXRlIFwiJHt0aXRsZX1cIj8gVGhpcyBjYW5ub3QgYmUgdW5kb25lLmAsXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL21hc3Rlci1kYXRhL3VwZGF0ZS1hY2hpZXZlbWVudCcsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY3Rpb246ICdkZWxldGUnLCBpZCB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBpZiAoZGF0YS5vaykge1xuICAgICAgICAgIF9zZXRNYXN0ZXJDaGFuZ2VOb3RpY2UoJ1NlbGVjdGVkIEFjaGlldmVtZW50cycsIGRhdGEuYWN0aW9uIHx8ICdkZWxldGVkJyk7XG4gICAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBEZWxldGVkJywgYEFjaGlldmVtZW50IHJlbW92ZWQuYCk7XG4gICAgICAgICAgYXdhaXQgcG9wdWxhdGVNYXN0ZXJUYWIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGF0YS5lcnJvciB8fCAnRGVsZXRlIGZhaWxlZCcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgRXJyb3InLCAnRmFpbGVkIHRvIGRlbGV0ZSBhY2hpZXZlbWVudCcpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlTWFzdGVyU3VtbWFyeShrZXkpIHtcbiAgc2hvd0NvbmZpcm1Nb2RhbChcbiAgICAnXHVEODNEXHVEREQxXHVGRTBGIERlbGV0ZSBTdW1tYXJ5JyxcbiAgICBgRGVsZXRlIHN1bW1hcnkgdmFyaWFudCBcIiR7a2V5fVwiPyBUaGlzIGNhbm5vdCBiZSB1bmRvbmUuYCxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvbWFzdGVyLWRhdGEvdXBkYXRlLXN1bW1hcnknLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiAnZGVsZXRlJywga2V5IH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICAgICAgX3NldE1hc3RlckNoYW5nZU5vdGljZSgnUHJvZmVzc2lvbmFsIFN1bW1hcmllcycsIGRhdGEuYWN0aW9uIHx8ICdkZWxldGVkJyk7XG4gICAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1MjcwNSBEZWxldGVkJywgYFN1bW1hcnkgXCIke2tleX1cIiByZW1vdmVkLmApO1xuICAgICAgICAgIGF3YWl0IHBvcHVsYXRlTWFzdGVyVGFiKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsIGRhdGEuZXJyb3IgfHwgJ0RlbGV0ZSBmYWlsZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgJ0ZhaWxlZCB0byBkZWxldGUgc3VtbWFyeScpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuZnVuY3Rpb24gb3Blbk1hc3RlckN2TW9kYWwoKSB7XG4gIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzdGVyLWN2LW1vZGFsLW92ZXJsYXknKTtcbiAgaWYgKCFvdmVybGF5KSByZXR1cm47XG4gIF9mb2N1c2VkRWxlbWVudEJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItY3YtbW9kYWwtYm9keScpO1xuICBwb3B1bGF0ZU1hc3RlclRhYihjb250YWluZXIpO1xuICBzZXRJbml0aWFsRm9jdXMoJ21hc3Rlci1jdi1tb2RhbC1vdmVybGF5Jyk7XG4gIHRyYXBGb2N1cygnbWFzdGVyLWN2LW1vZGFsLW92ZXJsYXknKTtcbn1cblxuZnVuY3Rpb24gY2xvc2VNYXN0ZXJDdk1vZGFsKCkge1xuICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hc3Rlci1jdi1tb2RhbC1vdmVybGF5Jyk7XG4gIGlmIChvdmVybGF5KSBvdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIF9tYXN0ZXJDdkFjdGl2ZUNvbnRhaW5lciA9IG51bGw7XG4gIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJztcbiAgcmVzdG9yZUZvY3VzKCk7XG59XG5cbmV4cG9ydCB7XG4gIHBvcHVsYXRlTWFzdGVyVGFiLFxuICBvcGVuTWFzdGVyQ3ZNb2RhbCxcbiAgY2xvc2VNYXN0ZXJDdk1vZGFsLFxuICBfcmVuZGVyUGVyc29uYWxJbmZvQ2FyZCxcbiAgX3JlbmRlckV4cGVyaWVuY2VzTGlzdCxcbiAgX3JlbmRlclNraWxsc1NlY3Rpb24sXG4gIF9yZW5kZXJFZHVjYXRpb25MaXN0LFxuICBfcmVuZGVyQXdhcmRzTGlzdCxcbiAgX3JlbmRlckNlcnRpZmljYXRpb25zTGlzdCxcbiAgX3JlbmRlck1hc3RlckFjaGlldmVtZW50c1RhYmxlLFxuICBfcmVuZGVyU3VtbWFyaWVzTGlzdCxcbiAgc2hvd0FkZEFjaGlldmVtZW50TW9kYWwsXG4gIGVkaXRNYXN0ZXJBY2hpZXZlbWVudCxcbiAgY2xvc2VNYXN0ZXJBY2hNb2RhbCxcbiAgc2F2ZU1hc3RlckFjaGlldmVtZW50LFxuICBzaG93QWRkU3VtbWFyeU1vZGFsLFxuICBlZGl0TWFzdGVyU3VtbWFyeSxcbiAgY2xvc2VNYXN0ZXJTdW1Nb2RhbCxcbiAgc2F2ZU1hc3RlclN1bW1hcnksXG4gIHNob3dFZGl0UGVyc29uYWxJbmZvTW9kYWwsXG4gIGNsb3NlUGVyc29uYWxJbmZvTW9kYWwsXG4gIHNhdmVQZXJzb25hbEluZm8sXG4gIHNob3dBZGRFeHBlcmllbmNlTW9kYWwsXG4gIGVkaXRNYXN0ZXJFeHBlcmllbmNlLFxuICBjbG9zZUV4cGVyaWVuY2VNb2RhbCxcbiAgc2F2ZU1hc3RlckV4cGVyaWVuY2UsXG4gIGRlbGV0ZU1hc3RlckV4cGVyaWVuY2UsXG4gIF9hZGRFeHBBY2hpZXZlbWVudCxcbiAgX21vdmVFeHBBY2hpZXZlbWVudCxcbiAgX2RlbGV0ZUV4cEFjaGlldmVtZW50LFxuICBzaG93QWRkU2tpbGxNb2RhbCxcbiAgZWRpdE1hc3RlclNraWxsLFxuICBjbG9zZVNraWxsTW9kYWwsXG4gIHNhdmVNYXN0ZXJTa2lsbCxcbiAgZGVsZXRlTWFzdGVyU2tpbGwsXG4gIHNob3dBZGRFZHVjYXRpb25Nb2RhbCxcbiAgZWRpdE1hc3RlckVkdWNhdGlvbixcbiAgY2xvc2VFZHVjYXRpb25Nb2RhbCxcbiAgc2F2ZU1hc3RlckVkdWNhdGlvbixcbiAgZGVsZXRlTWFzdGVyRWR1Y2F0aW9uLFxuICBzaG93QWRkQXdhcmRNb2RhbCxcbiAgZWRpdE1hc3RlckF3YXJkLFxuICBjbG9zZUF3YXJkTW9kYWwsXG4gIHNhdmVNYXN0ZXJBd2FyZCxcbiAgZGVsZXRlTWFzdGVyQXdhcmQsXG4gIHNob3dBZGRDZXJ0aWZpY2F0aW9uTW9kYWwsXG4gIGVkaXRNYXN0ZXJDZXJ0aWZpY2F0aW9uLFxuICBjbG9zZUNlcnRpZmljYXRpb25Nb2RhbCxcbiAgc2F2ZU1hc3RlckNlcnRpZmljYXRpb24sXG4gIGRlbGV0ZU1hc3RlckNlcnRpZmljYXRpb24sXG4gIGV4cG9ydE1hc3RlckNWLFxuICBvcGVuQmFja3VwSGlzdG9yeU1vZGFsLFxuICByZXN0b3JlQmFja3VwLFxuICB1bmRvTWFzdGVyRGF0YUNoYW5nZSxcbiAgcmVkb01hc3RlckRhdGFDaGFuZ2UsXG4gIG9wZW5GdWxsRGF0YVByZXZpZXdNb2RhbCxcbiAgdHJpZ2dlck1hc3RlckN2SW1wb3J0LFxuICBoYW5kbGVNYXN0ZXJDdkltcG9ydEZpbGUsXG4gIGNvbmZpcm1NYXN0ZXJDdkltcG9ydCxcbiAgZGVsZXRlTWFzdGVyQWNoaWV2ZW1lbnQsXG4gIGRlbGV0ZU1hc3RlclN1bW1hcnksXG4gIGxvYWRQdWJsaWNhdGlvbnMsXG4gIGxvYWRQdWJsaWNhdGlvbnNCaWIsXG4gIHRvZ2dsZVB1YmxpY2F0aW9uc1ZpZXcsXG4gIHNldFB1YmxpY2F0aW9uU29ydE1vZGUsXG4gIHNldFB1YmxpY2F0aW9uR3JvdXBNb2RlLFxuICB2YWxpZGF0ZVB1YmxpY2F0aW9uc0JpYixcbiAgc2F2ZVB1YmxpY2F0aW9uc0JpYixcbiAgc2hvd0ltcG9ydFB1YmxpY2F0aW9uc01vZGFsLFxuICBjbG9zZUltcG9ydFB1YmxpY2F0aW9uc01vZGFsLFxuICBpbXBvcnRQdWJsaWNhdGlvbnNCaWIsXG4gIHNob3dDb252ZXJ0UHVibGljYXRpb25zTW9kYWwsXG4gIGNsb3NlQ29udmVydFB1YmxpY2F0aW9uc01vZGFsLFxuICBjb252ZXJ0UHVibGljYXRpb25UZXh0LFxuICBpbXBvcnRDb252ZXJ0ZWRQdWJsaWNhdGlvblRleHQsXG4gIHNob3dBZGRQdWJsaWNhdGlvbk1vZGFsLFxuICBlZGl0TWFzdGVyUHVibGljYXRpb24sXG4gIGNsb3NlUHVibGljYXRpb25Nb2RhbCxcbiAgc2F2ZU1hc3RlclB1YmxpY2F0aW9uLFxuICBkZWxldGVNYXN0ZXJQdWJsaWNhdGlvbixcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9jb3Zlci1sZXR0ZXIuanNcbiAqIENvdmVyIGxldHRlciB0YWI6IGdlbmVyYXRlLCBzYXZlLCB2YWxpZGF0ZSwgY29uc2lzdGVuY3kgcmVwb3J0LlxuICpcbiAqIERlcGVuZGVuY2llcyAocmVzb2x2ZWQgdGhyb3VnaCBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICBlc2NhcGVIdG1sLCBzaG93QWxlcnRNb2RhbCwgdGFiRGF0YSwgcGVuZGluZ1JlY29tbWVuZGF0aW9ucywgQ1NTXG4gKi9cblxuaW1wb3J0IHsgc3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi9zdGF0ZS1tYW5hZ2VyLmpzJztcblxuLy8gXHUyNTAwXHUyNTAwIE1vZHVsZS1sZXZlbCBzdGF0ZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuY29uc3QgQ09WRVJfTEVUVEVSX1RPTkVTID0gW1xuICB7IHZhbHVlOiAnc3RhcnR1cC90ZWNoJywgICBsYWJlbDogJ1N0YXJ0dXAgLyBUZWNoJyAgICB9LFxuICB7IHZhbHVlOiAncGhhcm1hL2Jpb3RlY2gnLCBsYWJlbDogJ1BoYXJtYSAvIEJpb3RlY2gnICB9LFxuICB7IHZhbHVlOiAnYWNhZGVtaWEnLCAgICAgICBsYWJlbDogJ0FjYWRlbWlhJyAgICAgICAgICAgfSxcbiAgeyB2YWx1ZTogJ2ZpbmFuY2lhbCcsICAgICAgbGFiZWw6ICdGaW5hbmNpYWwgU2VydmljZXMnIH0sXG4gIHsgdmFsdWU6ICdsZWFkZXJzaGlwJywgICAgIGxhYmVsOiAnTGVhZGVyc2hpcCAvIEV4ZWMnICB9LFxuXTtcblxuY29uc3QgQ09WRVJfTEVUVEVSX09QRU5JTkdTID0gW1xuICB7IHZhbHVlOiAnZm9ybWFsJywgICAgbGFiZWw6ICdGb3JtYWwgc2FsdXRhdGlvbiBcdTIwMTQgXHUyMDFDRGVhciBbbmFtZV0sXHUyMDFEJyB9LFxuICB7IHZhbHVlOiAnaG9vaycsICAgICAgbGFiZWw6ICdBdHRlbnRpb24gaG9vayBcdTIwMTQgYm9sZCBjbGFpbSBvciBhY2hpZXZlbWVudCcgfSxcbiAgeyB2YWx1ZTogJ25hcnJhdGl2ZScsIGxhYmVsOiAnTmFycmF0aXZlIG9wZW5lciBcdTIwMTQgdml2aWQgc2NlbmUgb3Igc3RvcnknIH0sXG5dO1xuXG5sZXQgX2NvdmVyTGV0dGVyUHJpb3JTZXNzaW9ucyA9IFtdO1xuXG4vKiogU3Vydml2ZXMgdGFiIG5hdmlnYXRpb246IGZvcm0gaW5wdXRzIGFuZCB0aGUgZ2VuZXJhdGVkIGxldHRlciBib2R5LiAqL1xubGV0IF9jb3ZlckxldHRlckZvcm1TdGF0ZSA9IHtcbiAgdG9uZTogICAgICAgICAgICcnLFxuICBvcGVuaW5nU3R5bGU6ICAgJycsXG4gIGhpcmluZ01hbmFnZXI6ICAnJyxcbiAgY29tcGFueUFkZHJlc3M6ICcnLFxuICBoaWdobGlnaHQ6ICAgICAgJycsXG4gIGNvbXBhbnlDb250ZXh0OiAnJyxcbiAgbGV0dGVyVGV4dDogICAgICcnLFxuICBsZXR0ZXJWaXNpYmxlOiAgZmFsc2UsXG59O1xuXG4vLyBcdTI1MDBcdTI1MDAgUG9wdWxhdGUgY292ZXIgbGV0dGVyIHRhYiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVDb3ZlckxldHRlclRhYigpIHtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb2N1bWVudC1jb250ZW50Jyk7XG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPjxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIj48L2Rpdj48cCBzdHlsZT1cIm1hcmdpbi10b3A6MTJweDtjb2xvcjojNjQ3NDhiO1wiPkxvYWRpbmcgY292ZXIgbGV0dGVyXHUyMDI2PC9wPjwvZGl2Pic7XG5cbiAgLy8gRmV0Y2ggcHJpb3Igc2Vzc2lvbnMgd2l0aCBjb3ZlciBsZXR0ZXJzXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL2NvdmVyLWxldHRlci9wcmlvcicpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIF9jb3ZlckxldHRlclByaW9yU2Vzc2lvbnMgPSAoZGF0YS5zZXNzaW9ucyB8fCBbXSk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICBfY292ZXJMZXR0ZXJQcmlvclNlc3Npb25zID0gW107XG4gIH1cblxuICBjb25zdCB0b25lT3B0aW9ucyA9IENPVkVSX0xFVFRFUl9UT05FUy5tYXAodCA9PlxuICAgIGA8b3B0aW9uIHZhbHVlPVwiJHt0LnZhbHVlfVwiPiR7ZXNjYXBlSHRtbCh0LmxhYmVsKX08L29wdGlvbj5gXG4gICkuam9pbignJyk7XG5cbiAgY29uc3Qgb3BlbmluZ09wdGlvbnMgPSBDT1ZFUl9MRVRURVJfT1BFTklOR1MubWFwKG8gPT5cbiAgICBgPG9wdGlvbiB2YWx1ZT1cIiR7by52YWx1ZX1cIj4ke2VzY2FwZUh0bWwoby5sYWJlbCl9PC9vcHRpb24+YFxuICApLmpvaW4oJycpO1xuXG4gIGNvbnN0IHByaW9yU2VjdGlvbiA9IF9jb3ZlckxldHRlclByaW9yU2Vzc2lvbnMubGVuZ3RoID8gYFxuICAgIDxkaXYgY2xhc3M9XCJjbC1wcmlvci1zZWN0aW9uXCI+XG4gICAgICA8aDM+XHVEODNEXHVEQ0NCIFByaW9yIENvdmVyIExldHRlcnM8L2gzPlxuICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luLWJvdHRvbToxMHB4O1wiPlxuICAgICAgICBTZWxlY3QgYSBwcmlvciBsZXR0ZXIgdG8gdXNlIGFzIGEgc3RhcnRpbmcgcG9pbnQuXG4gICAgICA8L3A+XG4gICAgICA8ZGl2IGlkPVwiY2wtcHJpb3ItbGlzdFwiPlxuICAgICAgICAke19jb3ZlckxldHRlclByaW9yU2Vzc2lvbnMubWFwKChzLCBpKSA9PiBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNsLXByaW9yLWNhcmRcIiBpZD1cImNsLXByaW9yLSR7aX1cIj5cbiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2N1cnNvcjpwb2ludGVyO1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImNsLXByaW9yXCIgdmFsdWU9XCIke2l9XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjNweDtcIiAvPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+JHtlc2NhcGVIdG1sKHMucm9sZSB8fCAnUm9sZScpfSBhdCAke2VzY2FwZUh0bWwocy5jb21wYW55IHx8ICdDb21wYW55Jyl9PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjojOTRhM2I4O2ZvbnQtc2l6ZTowLjgyZW07bWFyZ2luLWxlZnQ6NnB4O1wiPiR7ZXNjYXBlSHRtbChzLmRhdGUgfHwgJycpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAke3MudG9uZSA/IGA8c3BhbiBjbGFzcz1cImNsLXRvbmUtYmFkZ2VcIj4ke2VzY2FwZUh0bWwocy50b25lKX08L3NwYW4+YCA6ICcnfVxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzY0NzQ4Yjtmb250LXNpemU6MC44NWVtO21hcmdpbjo0cHggMCAwO1wiPiR7ZXNjYXBlSHRtbCgocy5wcmV2aWV3IHx8ICcnKS5zbGljZSgwLCAxMjApKX1cdTIwMjY8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5gKS5qb2luKCcnKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmAgOiAnJztcblxuICBjb250ZW50LmlubmVySFRNTCA9IGBcbiAgICA8aDE+XHVEODNEXHVEQ0U5IENvdmVyIExldHRlcjwvaDE+XG4gICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MjBweDtcIj5cbiAgICAgIEdlbmVyYXRlIGEgdGFpbG9yZWQgY292ZXIgbGV0dGVyIGZvciB0aGlzIGFwcGxpY2F0aW9uIHVzaW5nIHlvdXIgQ1YgY29udGVudFxuICAgICAgYW5kIGpvYiBhbmFseXNpcyBhcyBjb250ZXh0LlxuICAgIDwvcD5cblxuICAgICR7cHJpb3JTZWN0aW9ufVxuXG4gICAgPGRpdiBjbGFzcz1cImNsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgPGgzPkdlbmVyYXRpb24gT3B0aW9uczwvaDM+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2wtZm9ybS1ncmlkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbC1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImNsLXRvbmUtc2VsZWN0XCI+VG9uZSAvIEluZHVzdHJ5PC9sYWJlbD5cbiAgICAgICAgICA8c2VsZWN0IGlkPVwiY2wtdG9uZS1zZWxlY3RcIiBjbGFzcz1cImVkaXQtaW5wdXRcIj4ke3RvbmVPcHRpb25zfTwvc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNsLWZvcm0tZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiY2wtb3BlbmluZy1zdHlsZVwiPk9wZW5pbmcgU3R5bGU8L2xhYmVsPlxuICAgICAgICAgIDxzZWxlY3QgaWQ9XCJjbC1vcGVuaW5nLXN0eWxlXCIgY2xhc3M9XCJlZGl0LWlucHV0XCI+JHtvcGVuaW5nT3B0aW9uc308L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbC1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImNsLWhpcmluZy1tYW5hZ2VyXCI+SGlyaW5nIE1hbmFnZXIgTmFtZS9UaXRsZSA8c3BhbiBzdHlsZT1cImNvbG9yOiM5NGEzYjg7Zm9udC13ZWlnaHQ6NDAwO1wiPihvcHRpb25hbCk8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImNsLWhpcmluZy1tYW5hZ2VyXCIgY2xhc3M9XCJlZGl0LWlucHV0XCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIERyLiBKYW5lIFNtaXRoLCBIZWFkIG9mIERhdGEgU2NpZW5jZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2wtZm9ybS1maWVsZFwiIHN0eWxlPVwibWFyZ2luLXRvcDoxMnB4O1wiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiY2wtY29tcGFueS1hZGRyZXNzXCI+Q29tcGFueSBBZGRyZXNzIDxzcGFuIHN0eWxlPVwiY29sb3I6Izk0YTNiODtmb250LXdlaWdodDo0MDA7XCI+KG9wdGlvbmFsKTwvc3Bhbj48L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgaWQ9XCJjbC1jb21wYW55LWFkZHJlc3NcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiByb3dzPVwiMlwiXG4gICAgICAgICAgICBzdHlsZT1cInJlc2l6ZTp2ZXJ0aWNhbDtcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIEFjbWUgQ29ycCwgMTIzIE1haW4gU3QsIEJvc3RvbiBNQSAwMjEzNFwiPjwvdGV4dGFyZWE+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjbC1mb3JtLWZpZWxkXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjEycHg7XCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJjbC1oaWdobGlnaHRcIj5TcGVjaWZpYyBhY2hpZXZlbWVudCBvciBwcm9qZWN0IHRvIGhpZ2hsaWdodCA8c3BhbiBzdHlsZT1cImNvbG9yOiM5NGEzYjg7Zm9udC13ZWlnaHQ6NDAwO1wiPihvcHRpb25hbCk8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJjbC1oaWdobGlnaHRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIExlZCB0aGUgbWlncmF0aW9uIHRvIEt1YmVybmV0ZXMgc2F2aW5nIDMwJSBpbmZyYSBjb3N0XCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNsLWZvcm0tZmllbGRcIiBzdHlsZT1cIm1hcmdpbi10b3A6MTJweDtcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImNsLWNvbXBhbnktY29udGV4dFwiPkNvbXBhbnkgY29udGV4dCA8c3BhbiBzdHlsZT1cImNvbG9yOiM5NGEzYjg7Zm9udC13ZWlnaHQ6NDAwO1wiPihvcHRpb25hbCBcdTIwMTQgcGFzdGUgc3BlY2lmaWMgaW5pdGlhdGl2ZXMsIHByb2R1Y3RzLCB2YWx1ZXMsIG9yIHJlY2VudCBuZXdzKTwvc3Bhbj48L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgaWQ9XCJjbC1jb21wYW55LWNvbnRleHRcIiBjbGFzcz1cImVkaXQtaW5wdXRcIiByb3dzPVwiM1wiXG4gICAgICAgICAgICBzdHlsZT1cInJlc2l6ZTp2ZXJ0aWNhbDtcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIFRoZXkganVzdCBsYXVuY2hlZCBhIG5ldyBBSSBwbGF0Zm9ybSBmb3IgaGVhbHRoY2FyZTsgdGhlaXIgQ1RPIHdyb3RlIGFib3V0IHByaW9yaXRpc2luZyByZWxpYWJpbGl0eSBvdmVyIHNwZWVkXHUyMDI2XCI+PC90ZXh0YXJlYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MTZweDtcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gcHJpbWFyeVwiIGlkPVwiY2wtZ2VuZXJhdGUtYnRuXCIgb25jbGljaz1cImdlbmVyYXRlQ292ZXJMZXR0ZXIoKVwiPlxuICAgICAgICAgIFx1MjcyOCBHZW5lcmF0ZSBDb3ZlciBMZXR0ZXJcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgaWQ9XCJjbC1yZXN1bHQtc2VjdGlvblwiIHN0eWxlPVwiZGlzcGxheTpub25lO21hcmdpbi10b3A6MjRweDtcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjbC1yZXN1bHQtaGVhZGVyXCI+XG4gICAgICAgIDxoMz5HZW5lcmF0ZWQgQ292ZXIgTGV0dGVyPC9oMz5cbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwO1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cImdlbmVyYXRlQ292ZXJMZXR0ZXIoKVwiIHRpdGxlPVwiUmVnZW5lcmF0ZVwiPlx1RDgzRFx1REQwNCBSZWdlbmVyYXRlPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gcHJpbWFyeVwiIG9uY2xpY2s9XCJzYXZlQ292ZXJMZXR0ZXIoKVwiIGlkPVwiY2wtc2F2ZS1idG5cIj5cdUQ4M0RcdURDQkUgU2F2ZSBDb3ZlciBMZXR0ZXI8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtmb250LXNpemU6MC44NWVtO21hcmdpbi1ib3R0b206OHB4O1wiPlxuICAgICAgICBFZGl0IHRoZSB0ZXh0IGJlbG93IGJlZm9yZSBzYXZpbmcuXG4gICAgICA8L3A+XG4gICAgICA8dGV4dGFyZWEgaWQ9XCJjbC1sZXR0ZXItdGV4dGFyZWFcIiBjbGFzcz1cImNsLWxldHRlci10ZXh0YXJlYVwiIHJvd3M9XCIyMlwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNvdmVyIGxldHRlciB0ZXh0IFx1MjAxNCBlZGl0IGFzIG5lZWRlZFwiXG4gICAgICAgICAgb25pbnB1dD1cIl9kZWJvdW5jZWRWYWxpZGF0ZUNMKCk7IF9jb3ZlckxldHRlckZvcm1TdGF0ZS5sZXR0ZXJUZXh0ID0gdGhpcy52YWx1ZTtcIj48L3RleHRhcmVhPlxuICAgICAgPGRpdiBpZD1cImNsLXZhbGlkYXRpb24tcGFuZWxcIiBjbGFzcz1cImNsLXZhbGlkYXRpb24tcGFuZWxcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cbiAgICAgICAgPGg0Plx1RDgzRFx1RENDQSBRdWFsaXR5IENoZWNrczwvaDQ+XG4gICAgICAgIDxkaXYgaWQ9XCJjbC1jaGVja3MtY29udGFpbmVyXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJuYXYtYnV0dG9ucyBuYXYtZW5kXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjI0cHg7XCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGludWUtYnRuXCIgb25jbGljaz1cImhhbmRsZVN0ZXBDbGljaygnc2NyZWVuaW5nJylcIj5cdUQ4M0RcdURDQ0IgUHJvY2VlZCB0byBTY3JlZW5pbmcgXHUyMTkyPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIGA7XG5cbiAgLy8gUmVzdG9yZSBzYXZlZCBmb3JtIHN0YXRlIGFuZCB3aXJlIHVwIHNhdmUtb24tY2hhbmdlIGxpc3RlbmVycy5cbiAgX3Jlc3RvcmVDb3ZlckxldHRlckZvcm1TdGF0ZSgpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgQ292ZXIgbGV0dGVyIGZvcm0gc3RhdGUgaGVscGVycyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gX3Jlc3RvcmVDb3ZlckxldHRlckZvcm1TdGF0ZSgpIHtcbiAgY29uc3QgdG9uZUVsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLXRvbmUtc2VsZWN0Jyk7XG4gIGNvbnN0IG9wZW5pbmdFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1vcGVuaW5nLXN0eWxlJyk7XG4gIGNvbnN0IGhtRWwgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1oaXJpbmctbWFuYWdlcicpO1xuICBjb25zdCBhZGRyRWwgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2wtY29tcGFueS1hZGRyZXNzJyk7XG4gIGNvbnN0IGhsRWwgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1oaWdobGlnaHQnKTtcbiAgY29uc3QgY3R4RWwgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLWNvbXBhbnktY29udGV4dCcpO1xuICBjb25zdCByZXN1bHRFbCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2wtcmVzdWx0LXNlY3Rpb24nKTtcbiAgY29uc3QgbGV0dGVyRWwgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLWxldHRlci10ZXh0YXJlYScpO1xuXG4gIGlmICh0b25lRWwgJiYgX2NvdmVyTGV0dGVyRm9ybVN0YXRlLnRvbmUpXG4gICAgdG9uZUVsLnZhbHVlID0gX2NvdmVyTGV0dGVyRm9ybVN0YXRlLnRvbmU7XG4gIGlmIChvcGVuaW5nRWwgJiYgX2NvdmVyTGV0dGVyRm9ybVN0YXRlLm9wZW5pbmdTdHlsZSlcbiAgICBvcGVuaW5nRWwudmFsdWUgPSBfY292ZXJMZXR0ZXJGb3JtU3RhdGUub3BlbmluZ1N0eWxlO1xuICBpZiAoaG1FbCAmJiBfY292ZXJMZXR0ZXJGb3JtU3RhdGUuaGlyaW5nTWFuYWdlcilcbiAgICBobUVsLnZhbHVlID0gX2NvdmVyTGV0dGVyRm9ybVN0YXRlLmhpcmluZ01hbmFnZXI7XG4gIGlmIChhZGRyRWwgJiYgX2NvdmVyTGV0dGVyRm9ybVN0YXRlLmNvbXBhbnlBZGRyZXNzKVxuICAgIGFkZHJFbC52YWx1ZSA9IF9jb3ZlckxldHRlckZvcm1TdGF0ZS5jb21wYW55QWRkcmVzcztcbiAgaWYgKGhsRWwgJiYgX2NvdmVyTGV0dGVyRm9ybVN0YXRlLmhpZ2hsaWdodClcbiAgICBobEVsLnZhbHVlID0gX2NvdmVyTGV0dGVyRm9ybVN0YXRlLmhpZ2hsaWdodDtcbiAgaWYgKGN0eEVsICYmIF9jb3ZlckxldHRlckZvcm1TdGF0ZS5jb21wYW55Q29udGV4dClcbiAgICBjdHhFbC52YWx1ZSA9IF9jb3ZlckxldHRlckZvcm1TdGF0ZS5jb21wYW55Q29udGV4dDtcblxuICBpZiAoX2NvdmVyTGV0dGVyRm9ybVN0YXRlLmxldHRlclZpc2libGUgJiYgX2NvdmVyTGV0dGVyRm9ybVN0YXRlLmxldHRlclRleHQpIHtcbiAgICBpZiAocmVzdWx0RWwpIHJlc3VsdEVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIGlmIChsZXR0ZXJFbCkge1xuICAgICAgbGV0dGVyRWwudmFsdWUgPSBfY292ZXJMZXR0ZXJGb3JtU3RhdGUubGV0dGVyVGV4dDtcbiAgICAgIF92YWxpZGF0ZUNvdmVyTGV0dGVyKGxldHRlckVsLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvLyBXaXJlIHVwIHNhdmUtb24tY2hhbmdlIGxpc3RlbmVycyAoaW5saW5lIG9uaW5wdXQgYWxyZWFkeSBoYW5kbGVzIGxldHRlclRleHQpLlxuICBpZiAodG9uZUVsKSAgICB0b25lRWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgICAoKSA9PiB7IF9jb3ZlckxldHRlckZvcm1TdGF0ZS50b25lID0gdG9uZUVsLnZhbHVlOyB9KTtcbiAgaWYgKG9wZW5pbmdFbCkgb3BlbmluZ0VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHsgX2NvdmVyTGV0dGVyRm9ybVN0YXRlLm9wZW5pbmdTdHlsZSA9IG9wZW5pbmdFbC52YWx1ZTsgfSk7XG4gIGlmIChobUVsKSAgICAgIGhtRWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAgICAgICgpID0+IHsgX2NvdmVyTGV0dGVyRm9ybVN0YXRlLmhpcmluZ01hbmFnZXIgPSBobUVsLnZhbHVlOyB9KTtcbiAgaWYgKGFkZHJFbCkgICAgYWRkckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgICAgKCkgPT4geyBfY292ZXJMZXR0ZXJGb3JtU3RhdGUuY29tcGFueUFkZHJlc3MgPSBhZGRyRWwudmFsdWU7IH0pO1xuICBpZiAoaGxFbCkgICAgICBobEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgICAgICAoKSA9PiB7IF9jb3ZlckxldHRlckZvcm1TdGF0ZS5oaWdobGlnaHQgPSBobEVsLnZhbHVlOyB9KTtcbiAgaWYgKGN0eEVsKSAgICAgY3R4RWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAgICAgKCkgPT4geyBfY292ZXJMZXR0ZXJGb3JtU3RhdGUuY29tcGFueUNvbnRleHQgPSBjdHhFbC52YWx1ZTsgfSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBHZW5lcmF0ZSBjb3ZlciBsZXR0ZXIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQ292ZXJMZXR0ZXIoKSB7XG4gIC8qIGR1Y2tmbG93OlxuICAgKiAgIGlkOiBjb3Zlcl9sZXR0ZXJfdWlfZ2VuZXJhdGVfbGl2ZVxuICAgKiAgIGtpbmQ6IHVpXG4gICAqICAgdGltZXN0YW1wOiAnMjAyNi0wNC0yMVQxODowMDowMFonXG4gICAqICAgc3RhdHVzOiBsaXZlXG4gICAqICAgaGFuZGxlczpcbiAgICogICAtIHVpOmNvdmVyLWxldHRlci5nZW5lcmF0ZVxuICAgKiAgIGNhbGxzOlxuICAgKiAgIC0gUE9TVCAvYXBpL2NvdmVyLWxldHRlci9nZW5lcmF0ZVxuICAgKiAgIHJlYWRzOlxuICAgKiAgIC0gZG9tOiNjbC10b25lLXNlbGVjdC52YWx1ZVxuICAgKiAgIC0gZG9tOiNjbC1vcGVuaW5nLXN0eWxlLnZhbHVlXG4gICAqICAgLSBkb206I2NsLWhpcmluZy1tYW5hZ2VyLnZhbHVlXG4gICAqICAgLSBkb206I2NsLWNvbXBhbnktYWRkcmVzcy52YWx1ZVxuICAgKiAgIC0gZG9tOiNjbC1oaWdobGlnaHQudmFsdWVcbiAgICogICAtIGRvbTppbnB1dFtuYW1lPWNsLXByaW9yXS5jaGVja2VkXG4gICAqICAgd3JpdGVzOlxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvY292ZXItbGV0dGVyL2dlbmVyYXRlLnRvbmVcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL2NvdmVyLWxldHRlci9nZW5lcmF0ZS5vcGVuaW5nX3N0eWxlXG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9jb3Zlci1sZXR0ZXIvZ2VuZXJhdGUuaGlyaW5nX21hbmFnZXJcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL2NvdmVyLWxldHRlci9nZW5lcmF0ZS5jb21wYW55X2FkZHJlc3NcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL2NvdmVyLWxldHRlci9nZW5lcmF0ZS5oaWdobGlnaHRcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL2NvdmVyLWxldHRlci9nZW5lcmF0ZS5yZXVzZV9ib2R5XG4gICAqICAgLSBkb206I2NsLWxldHRlci10ZXh0YXJlYS52YWx1ZVxuICAgKiAgIG5vdGVzOiBTdWJtaXRzIGNvdmVyLWxldHRlciBwcm9tcHQgaW5wdXRzIChpbmNsdWRpbmcgY29uZmlndXJhYmxlIG9wZW5pbmcgc3R5bGUpIGFuZCBvcHRpb25hbCByZXVzZSB0ZXh0LCB0aGVuIHdyaXRlcyB0aGUgZ2VuZXJhdGVkIGJvZHkgaW50byB0aGUgZWRpdGFibGUgY292ZXItbGV0dGVyIHRleHRhcmVhLlxuICAgKi9cbiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLWdlbmVyYXRlLWJ0bicpO1xuICBidG4uZGlzYWJsZWQgPSB0cnVlO1xuICBidG4udGV4dENvbnRlbnQgPSAnXHUyM0YzIEdlbmVyYXRpbmdcdTIwMjYnO1xuXG4gIGNvbnN0IHRvbmUgICAgICAgICAgICA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2wtdG9uZS1zZWxlY3QnKSAgICAgIHx8IHt9KS52YWx1ZSB8fCAnc3RhcnR1cC90ZWNoJztcbiAgY29uc3Qgb3BlbmluZ19zdHlsZSAgID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1vcGVuaW5nLXN0eWxlJykgICAgfHwge30pLnZhbHVlIHx8ICdmb3JtYWwnO1xuICBjb25zdCBoaXJpbmdfbWFuYWdlciAgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLWhpcmluZy1tYW5hZ2VyJykgICB8fCB7fSkudmFsdWUgfHwgJyc7XG4gIGNvbnN0IGNvbXBhbnlfYWRkcmVzcyA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2wtY29tcGFueS1hZGRyZXNzJykgIHx8IHt9KS52YWx1ZSB8fCAnJztcbiAgY29uc3QgaGlnaGxpZ2h0ICAgICAgID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1oaWdobGlnaHQnKSAgICAgICAgIHx8IHt9KS52YWx1ZSB8fCAnJztcbiAgY29uc3QgY29tcGFueV9jb250ZXh0ID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbC1jb21wYW55LWNvbnRleHQnKSAgfHwge30pLnZhbHVlIHx8ICcnO1xuXG4gIC8vIENoZWNrIGZvciBwcmlvciBsZXR0ZXIgc2VsZWN0aW9uXG4gIGxldCByZXVzZV9ib2R5ID0gJyc7XG4gIGNvbnN0IGNoZWNrZWRQcmlvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9XCJjbC1wcmlvclwiXTpjaGVja2VkJyk7XG4gIGlmIChjaGVja2VkUHJpb3IpIHtcbiAgICBjb25zdCBpZHggPSBwYXJzZUludChjaGVja2VkUHJpb3IudmFsdWUsIDEwKTtcbiAgICByZXVzZV9ib2R5ID0gKF9jb3ZlckxldHRlclByaW9yU2Vzc2lvbnNbaWR4XSB8fCB7fSkuZnVsbF90ZXh0IHx8ICcnO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvY292ZXItbGV0dGVyL2dlbmVyYXRlJywge1xuICAgICAgbWV0aG9kOiAgJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiAgICBKU09OLnN0cmluZ2lmeSh7IHRvbmUsIG9wZW5pbmdfc3R5bGUsIGhpcmluZ19tYW5hZ2VyLCBjb21wYW55X2FkZHJlc3MsIGhpZ2hsaWdodCwgY29tcGFueV9jb250ZXh0LCByZXVzZV9ib2R5IH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNvbnN0IHJlc3VsdFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2wtcmVzdWx0LXNlY3Rpb24nKTtcbiAgICAgIGNvbnN0IHRleHRhcmVhICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2wtbGV0dGVyLXRleHRhcmVhJyk7XG4gICAgICBpZiAocmVzdWx0U2VjdGlvbikgcmVzdWx0U2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIGlmICh0ZXh0YXJlYSkge1xuICAgICAgICB0ZXh0YXJlYS52YWx1ZSA9IGRhdGEudGV4dDtcbiAgICAgICAgX3ZhbGlkYXRlQ292ZXJMZXR0ZXIodGV4dGFyZWEudmFsdWUpO1xuICAgICAgfVxuICAgICAgX2NvdmVyTGV0dGVyRm9ybVN0YXRlLmxldHRlclRleHQgICAgPSBkYXRhLnRleHQ7XG4gICAgICBfY292ZXJMZXR0ZXJGb3JtU3RhdGUubGV0dGVyVmlzaWJsZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgR2VuZXJhdGlvbiBGYWlsZWQnLCBkYXRhLmVycm9yIHx8ICdMTE0gZGlkIG5vdCByZXR1cm4gYSBjb3ZlciBsZXR0ZXIuJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gY29udGFjdCBzZXJ2ZXIuJyk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGJ0bikge1xuICAgICAgYnRuLmRpc2FibGVkICAgID0gZmFsc2U7XG4gICAgICBidG4udGV4dENvbnRlbnQgPSAnXHUyNzI4IEdlbmVyYXRlIENvdmVyIExldHRlcic7XG4gICAgfVxuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBTYXZlIGNvdmVyIGxldHRlciBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gc2F2ZUNvdmVyTGV0dGVyKCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogY292ZXJfbGV0dGVyX3VpX3NhdmVfbGl2ZVxuICAgKiAgIGtpbmQ6IHVpXG4gICAqICAgdGltZXN0YW1wOiAnMjAyNi0wMy0yNVQyMTozOTo0OFonXG4gICAqICAgc3RhdHVzOiBsaXZlXG4gICAqICAgaGFuZGxlczpcbiAgICogICAtIHVpOmNvdmVyLWxldHRlci5zYXZlXG4gICAqICAgY2FsbHM6XG4gICAqICAgLSBQT1NUIC9hcGkvY292ZXItbGV0dGVyL3NhdmVcbiAgICogICByZWFkczpcbiAgICogICAtIGRvbTojY2wtbGV0dGVyLXRleHRhcmVhLnZhbHVlXG4gICAqICAgd3JpdGVzOlxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvY292ZXItbGV0dGVyL3NhdmUudGV4dFxuICAgKiAgIG5vdGVzOiBTdWJtaXRzIHRoZSB1c2VyLWVkaXRlZCBjb3Zlci1sZXR0ZXIgYm9keSBmb3Igc2Vzc2lvbiBwZXJzaXN0ZW5jZSwgbWV0YWRhdGEgd3JpdGUtdGhyb3VnaCwgYW5kIGFyY2hpdmUgYXJ0aWZhY3QgZ2VuZXJhdGlvbi5cbiAgICovXG4gIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLWxldHRlci10ZXh0YXJlYScpO1xuICBpZiAoIXRleHRhcmVhKSByZXR1cm47XG4gIGNvbnN0IHRleHQgPSB0ZXh0YXJlYS52YWx1ZS50cmltKCk7XG4gIGlmICghdGV4dCkge1xuICAgIHNob3dBbGVydE1vZGFsKCdcdTI2QTBcdUZFMEYgRW1wdHkgTGV0dGVyJywgJ1BsZWFzZSBnZW5lcmF0ZSBvciB0eXBlIGEgY292ZXIgbGV0dGVyIGJlZm9yZSBzYXZpbmcuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLXNhdmUtYnRuJyk7XG4gIGlmIChidG4pIHsgYnRuLmRpc2FibGVkID0gdHJ1ZTsgYnRuLnRleHRDb250ZW50ID0gJ1x1MjNGMyBTYXZpbmdcdTIwMjYnOyB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvY292ZXItbGV0dGVyL3NhdmUnLCB7XG4gICAgICBtZXRob2Q6ICAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6ICAgIEpTT04uc3RyaW5naWZ5KHsgdGV4dCB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IFNhdmVkJywgYENvdmVyIGxldHRlciBzYXZlZCBhcyA8c3Ryb25nPiR7ZXNjYXBlSHRtbChkYXRhLmZpbGVuYW1lKX08L3N0cm9uZz4gaW4geW91ciBhcHBsaWNhdGlvbiBmb2xkZXIuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgU2F2ZSBGYWlsZWQnLCBkYXRhLmVycm9yIHx8ICdDb3VsZCBub3Qgc2F2ZSBjb3ZlciBsZXR0ZXIuJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gY29udGFjdCBzZXJ2ZXIuJyk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGJ0bikgeyBidG4uZGlzYWJsZWQgPSBmYWxzZTsgYnRuLnRleHRDb250ZW50ID0gJ1x1RDgzRFx1RENCRSBTYXZlIENvdmVyIExldHRlcic7IH1cbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgQ3Jvc3MtZG9jdW1lbnQgY29uc2lzdGVuY3kgcmVwb3J0IFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG4vKipcbiAqIEJ1aWxkIGFuZCByZW5kZXIgdGhlIGNyb3NzLWRvY3VtZW50IGNvbnNpc3RlbmN5IHJlcG9ydCBpbiB0aGUgRmluYWxpc2UgdGFiLlxuICogQ2hlY2tzIGNvbXBhbnkgbmFtZSwgam9iIHRpdGxlLCBBVFMga2V5d29yZHMsIGFuZCBkYXRlIGZvcm1hdHRpbmcgYWNyb3NzXG4gKiB0aGUgQ1YgKHRhYkRhdGEuY3YpIGFuZCBjb3ZlciBsZXR0ZXIgKCNjbC1sZXR0ZXItdGV4dGFyZWEpLlxuICovXG5mdW5jdGlvbiBfcmVuZGVyQ29uc2lzdGVuY3lSZXBvcnQoc3RhdHVzRGF0YSkge1xuICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zaXN0ZW5jeS1yZXBvcnQnKTtcbiAgaWYgKCFwYW5lbCkgcmV0dXJuO1xuXG4gIGNvbnN0IGFuYWx5c2lzICAgID0gc3RhdHVzRGF0YS5qb2JfYW5hbHlzaXMgfHwge307XG4gIGNvbnN0IGNvbXBhbnkgICAgID0gKGFuYWx5c2lzLmNvbXBhbnkgIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGpvYlRpdGxlICAgID0gKGFuYWx5c2lzLnRpdGxlICAgIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGF0c0tleXdvcmRzID0gKGFuYWx5c2lzLmF0c19rZXl3b3JkcyB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsIDgpO1xuXG4gIC8vIFN0cmlwIEhUTUwgdGFncyBmcm9tIENWIGNvbnRlbnQgZm9yIHRleHQgc2VhcmNoXG4gIGNvbnN0IGN2U3RhdGUgPSBzdGF0ZU1hbmFnZXIuZ2V0VGFiRGF0YSgnY3YnKSB8fCAnJztcbiAgY29uc3QgY3ZIdG1sID0gdHlwZW9mIGN2U3RhdGUgPT09ICdzdHJpbmcnID8gY3ZTdGF0ZSA6IChjdlN0YXRlPy5bJyouaHRtbCddIHx8ICcnKTtcbiAgY29uc3QgY3ZUZXh0ID0gY3ZIdG1sLnJlcGxhY2UoLzxbXj5dKz4vZywgJyAnKS5yZXBsYWNlKC9cXHMrL2csICcgJykudG9Mb3dlckNhc2UoKTtcblxuICAvLyBHZXQgY292ZXIgbGV0dGVyIHRleHQgaWYgcHJlc2VudFxuICBjb25zdCBjbEVsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2wtbGV0dGVyLXRleHRhcmVhJyk7XG4gIGNvbnN0IGNsUmF3ICA9IGNsRWwgPyBjbEVsLnZhbHVlIDogJyc7XG4gIGNvbnN0IGNsVGV4dCA9IGNsUmF3LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGhhc0NMICA9IGNsUmF3LnRyaW0oKS5sZW5ndGggPiA1MDtcblxuICBpZiAoIWNvbXBhbnkgJiYgIWpvYlRpdGxlICYmICFhdHNLZXl3b3Jkcy5sZW5ndGgpIHtcbiAgICBwYW5lbC5pbm5lckhUTUwgPSAnJztcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjaGVja3MgPSBbXTtcblxuICAvLyBcdTI1MDBcdTI1MDAgMS4gQ29tcGFueSBuYW1lIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICBpZiAoY29tcGFueSkge1xuICAgIGNvbnN0IGNvbXBMYyA9IGNvbXBhbnkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBpbkNWICAgPSBjdlRleHQuaW5jbHVkZXMoY29tcExjKTtcbiAgICBjb25zdCBpbkNMICAgPSBoYXNDTCAmJiBjbFRleHQuaW5jbHVkZXMoY29tcExjKTtcbiAgICBjb25zdCBtaXNzaW5nID0gW107XG4gICAgaWYgKCFpbkNWKSAgICAgICAgICBtaXNzaW5nLnB1c2goJ0NWJyk7XG4gICAgaWYgKGhhc0NMICYmICFpbkNMKSBtaXNzaW5nLnB1c2goJ2NvdmVyIGxldHRlcicpO1xuICAgIGNvbnN0IHN0YXR1cyA9IG1pc3NpbmcubGVuZ3RoID09PSAwID8gJ3Bhc3MnIDogbWlzc2luZy5sZW5ndGggPCAyICYmIGhhc0NMID8gJ3dhcm4nIDogJ2ZhaWwnO1xuICAgIGNoZWNrcy5wdXNoKHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIGxhYmVsOiAgJ0NvbXBhbnkgbmFtZScsXG4gICAgICBkZXRhaWw6IHN0YXR1cyA9PT0gJ3Bhc3MnXG4gICAgICAgID8gYFxcdTIwMWMke2VzY2FwZUh0bWwoY29tcGFueSl9XFx1MjAxZCBmb3VuZCBpbiBhbGwgZG9jdW1lbnRzLmBcbiAgICAgICAgOiBgXFx1MjAxYyR7ZXNjYXBlSHRtbChjb21wYW55KX1cXHUyMDFkIG1pc3NpbmcgZnJvbTogJHttaXNzaW5nLmpvaW4oJywgJyl9LmAsXG4gICAgfSk7XG4gIH1cblxuICAvLyBcdTI1MDBcdTI1MDAgMi4gSm9iIHRpdGxlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICBpZiAoam9iVGl0bGUpIHtcbiAgICBjb25zdCB0aXRsZUxjICAgPSBqb2JUaXRsZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHRpdGxlQ29yZSA9IHRpdGxlTGMucmVwbGFjZSgvXihzZW5pb3J8anVuaW9yfGxlYWR8cHJpbmNpcGFsfHN0YWZmfGFzc29jaWF0ZSlcXHMrLywgJycpO1xuICAgIGNvbnN0IGluQ1YgICAgICA9IGN2VGV4dC5pbmNsdWRlcyh0aXRsZUxjKSB8fCBjdlRleHQuaW5jbHVkZXModGl0bGVDb3JlKTtcbiAgICBjb25zdCBpbkNMICAgICAgPSBoYXNDTCAmJiAoY2xUZXh0LmluY2x1ZGVzKHRpdGxlTGMpIHx8IGNsVGV4dC5pbmNsdWRlcyh0aXRsZUNvcmUpKTtcbiAgICBjb25zdCBtaXNzaW5nICAgPSBbXTtcbiAgICBpZiAoIWluQ1YpICAgICAgICAgIG1pc3NpbmcucHVzaCgnQ1YnKTtcbiAgICBpZiAoaGFzQ0wgJiYgIWluQ0wpIG1pc3NpbmcucHVzaCgnY292ZXIgbGV0dGVyJyk7XG4gICAgY29uc3Qgc3RhdHVzID0gbWlzc2luZy5sZW5ndGggPT09IDAgPyAncGFzcycgOiBtaXNzaW5nLmxlbmd0aCA8IDIgJiYgaGFzQ0wgPyAnd2FybicgOiAnZmFpbCc7XG4gICAgY2hlY2tzLnB1c2goe1xuICAgICAgc3RhdHVzLFxuICAgICAgbGFiZWw6ICAnSm9iIHRpdGxlJyxcbiAgICAgIGRldGFpbDogc3RhdHVzID09PSAncGFzcydcbiAgICAgICAgPyBgXFx1MjAxYyR7ZXNjYXBlSHRtbChqb2JUaXRsZSl9XFx1MjAxZCBmb3VuZCBpbiBhbGwgZG9jdW1lbnRzLmBcbiAgICAgICAgOiBgXFx1MjAxYyR7ZXNjYXBlSHRtbChqb2JUaXRsZSl9XFx1MjAxZCBtaXNzaW5nIGZyb206ICR7bWlzc2luZy5qb2luKCcsICcpfS5gLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gXHUyNTAwXHUyNTAwIDMuIEFUUyBrZXl3b3JkcyAodG9wIDgpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICBpZiAoYXRzS2V5d29yZHMubGVuZ3RoKSB7XG4gICAgY29uc3QgbWlzc2luZ0NWID0gYXRzS2V5d29yZHMuZmlsdGVyKGt3ID0+ICFjdlRleHQuaW5jbHVkZXMoa3cudG9Mb3dlckNhc2UoKSkpO1xuICAgIGNvbnN0IG1pc3NpbmdDTCA9IGhhc0NMID8gYXRzS2V5d29yZHMuZmlsdGVyKGt3ID0+ICFjbFRleHQuaW5jbHVkZXMoa3cudG9Mb3dlckNhc2UoKSkpIDogW107XG4gICAgY29uc3QgdG90YWxNaXNzaW5nID0gbmV3IFNldChbLi4ubWlzc2luZ0NWLCAuLi5taXNzaW5nQ0xdKS5zaXplO1xuICAgIGNvbnN0IHN0YXR1cyA9IHRvdGFsTWlzc2luZyA9PT0gMCA/ICdwYXNzJyA6IHRvdGFsTWlzc2luZyA8PSAzID8gJ3dhcm4nIDogJ2ZhaWwnO1xuICAgIGNvbnN0IHBhcnRzICA9IFtdO1xuICAgIGlmIChtaXNzaW5nQ1YubGVuZ3RoKSBwYXJ0cy5wdXNoKGBNaXNzaW5nIGZyb20gQ1Y6ICR7bWlzc2luZ0NWLm1hcChrID0+IGA8ZW0+JHtlc2NhcGVIdG1sKGspfTwvZW0+YCkuam9pbignLCAnKX1gKTtcbiAgICBpZiAobWlzc2luZ0NMLmxlbmd0aCkgcGFydHMucHVzaChgTWlzc2luZyBmcm9tIGNvdmVyIGxldHRlcjogJHttaXNzaW5nQ0wubWFwKGsgPT4gYDxlbT4ke2VzY2FwZUh0bWwoayl9PC9lbT5gKS5qb2luKCcsICcpfWApO1xuICAgIGNoZWNrcy5wdXNoKHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIGxhYmVsOiAgYEFUUyBrZXl3b3JkcyAoJHthdHNLZXl3b3Jkcy5sZW5ndGh9IGNoZWNrZWQpYCxcbiAgICAgIGRldGFpbDogcGFydHMubGVuZ3RoID8gcGFydHMuam9pbignLiAnKSArICcuJyA6IGBBbGwgJHthdHNLZXl3b3Jkcy5sZW5ndGh9IGtleXdvcmRzIHByZXNlbnQgaW4gZG9jdW1lbnRzLmAsXG4gICAgfSk7XG4gIH1cblxuICAvLyBcdTI1MDBcdTI1MDAgNC4gRGF0ZSBmb3JtYXQgY29uc2lzdGVuY3kgKENWKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgaWYgKGN2VGV4dCkge1xuICAgIGNvbnN0IGhhc1dyaXR0ZW4gPSAvXFxiKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKVxcdypcXHMrXFxkezR9XFxiL2kudGVzdChjdlRleHQpO1xuICAgIGNvbnN0IGhhc0lTTyAgICAgPSAvXFxiXFxkezR9LVxcZHsyfVxcYi8udGVzdChjdlRleHQpO1xuICAgIGNvbnN0IGhhc1NsYXNoICAgPSAvXFxiXFxkezEsMn1cXC9cXGR7NH1cXGIvLnRlc3QoY3ZUZXh0KTtcbiAgICBjb25zdCBmb3JtYXRDb3VudCA9IFtoYXNXcml0dGVuLCBoYXNJU08sIGhhc1NsYXNoXS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoO1xuICAgIGNoZWNrcy5wdXNoKHtcbiAgICAgIHN0YXR1czogZm9ybWF0Q291bnQgPD0gMSA/ICdwYXNzJyA6ICd3YXJuJyxcbiAgICAgIGxhYmVsOiAgJ0RhdGUgZm9ybWF0cyAoQ1YpJyxcbiAgICAgIGRldGFpbDogZm9ybWF0Q291bnQgPD0gMVxuICAgICAgICA/ICdDb25zaXN0ZW50IGRhdGUgZm9ybWF0IHRocm91Z2hvdXQgQ1YuJ1xuICAgICAgICA6ICdNaXhlZCBkYXRlIGZvcm1hdHMgZGV0ZWN0ZWQgKGUuZy4gXFx1MjAxY0phbiAyMDIwXFx1MjAxZCBhbmQgXFx1MjAxYzIwMjAtMDFcXHUyMDFkKSBcXHUyMDE0IHN0YW5kYXJkaXNlIGZvciBhIHBvbGlzaGVkIGxvb2suJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFxcdTI1MDBcXHUyNTAwIDUuIENyb3NzLWRvY3VtZW50IHRlcm1pbm9sb2d5IGNvbnNpc3RlbmN5IFxcdTI1MDBcXHUyNTAwXFx1MjUwMFxcdTI1MDBcXHUyNTAwXFx1MjUwMFxcdTI1MDBcXHUyNTAwXFx1MjUwMFxcdTI1MDBcXHUyNTAwXFx1MjUwMFxcdTI1MDBcXHUyNTAwXFx1MjUwMFxcdTI1MDBcXHUyNTAwXFx1MjUwMFxcdTI1MDBcXHUyNTAwXFx1MjUwMFxuICBjb25zdCBzcVRleHRzID0gWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RleHRhcmVhW2lkXj1cInNjLXRleHQtXCJdJyldXG4gICAgLm1hcChlbCA9PiBlbC52YWx1ZS50b0xvd2VyQ2FzZSgpKS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IGFsbERvY1RleHQgPSBbY3ZUZXh0LCBjbFRleHQsIC4uLnNxVGV4dHNdO1xuXG4gIGNvbnN0IF9URVJNX1BBSVJTID0gW1xuICAgIFsnbWFjaGluZSBsZWFybmluZycsICdtbCddLCBbJ2FydGlmaWNpYWwgaW50ZWxsaWdlbmNlJywgJ2FpJ10sXG4gICAgWyduYXR1cmFsIGxhbmd1YWdlIHByb2Nlc3NpbmcnLCAnbmxwJ10sIFsnZGVlcCBsZWFybmluZycsICdkbCddLFxuICAgIFsnbGFyZ2UgbGFuZ3VhZ2UgbW9kZWwnLCAnbGxtJ10sIFsndXNlciBpbnRlcmZhY2UnLCAndWknXSxcbiAgICBbJ3VzZXIgZXhwZXJpZW5jZScsICd1eCddLCBbJ2FwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZScsICdhcGknXSxcbiAgICBbJ2t1YmVybmV0ZXMnLCAnazhzJ10sIFsnY29udGludW91cyBpbnRlZ3JhdGlvbicsICdjaS9jZCddLFxuICBdO1xuICBjb25zdCB0ZXJtTWlzbWF0Y2hlcyA9IFtdO1xuICBmb3IgKGNvbnN0IFtsb25nLCBzaG9ydF0gb2YgX1RFUk1fUEFJUlMpIHtcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYFxcXFxiJHtzaG9ydC5yZXBsYWNlKCcvJywgJ1xcXFwvJyl9XFxcXGJgKTtcbiAgICBpZiAoYWxsRG9jVGV4dC5zb21lKHQgPT4gdC5pbmNsdWRlcyhsb25nKSkgJiYgYWxsRG9jVGV4dC5zb21lKHQgPT4gcmUudGVzdCh0KSkpIHtcbiAgICAgIHRlcm1NaXNtYXRjaGVzLnB1c2goYFxcdTIwMWMke2xvbmd9XFx1MjAxZCAvIFxcdTIwMWMke3Nob3J0LnRvVXBwZXJDYXNlKCl9XFx1MjAxZGApO1xuICAgIH1cbiAgfVxuICBpZiAodGVybU1pc21hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgIGNoZWNrcy5wdXNoKHtcbiAgICAgIHN0YXR1czogJ3dhcm4nLFxuICAgICAgbGFiZWw6ICAnVGVybWlub2xvZ3kgY29uc2lzdGVuY3knLFxuICAgICAgZGV0YWlsOiBgTWl4ZWQgZm9ybXMgZGV0ZWN0ZWQgYWNyb3NzIGRvY3VtZW50czogJHt0ZXJtTWlzbWF0Y2hlcy5qb2luKCc7ICcpfS4gU3RhbmRhcmRpc2UgdG8gb25lIGZvcm0gcGVyIGNvbmNlcHQuYCxcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChhbGxEb2NUZXh0LnNvbWUodCA9PiB0Lmxlbmd0aCA+IDUwKSkge1xuICAgIGNoZWNrcy5wdXNoKHtcbiAgICAgIHN0YXR1czogJ3Bhc3MnLFxuICAgICAgbGFiZWw6ICAnVGVybWlub2xvZ3kgY29uc2lzdGVuY3knLFxuICAgICAgZGV0YWlsOiAnTm8gbWl4ZWQgYWJicmV2aWF0aW9uL2V4cGFuc2lvbiBwYWlycyBkZXRlY3RlZCBhY3Jvc3MgQ1YsIGNvdmVyIGxldHRlciwgYW5kIHNjcmVlbmluZyBhbnN3ZXJzLicsXG4gICAgfSk7XG4gIH1cblxuICAvLyBcdTI1MDBcdTI1MDAgUmVuZGVyIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICBjb25zdCBpY29ucyA9IHsgcGFzczogJ1xcdTI3MDUnLCB3YXJuOiAnXFx1MjZhMFxcdWZlMGYnLCBmYWlsOiAnXFx1Mjc0YycgfTtcbiAgY29uc3Qgb3ZlcmFsbEZhaWwgICA9IGNoZWNrcy5zb21lKGMgPT4gYy5zdGF0dXMgPT09ICdmYWlsJyk7XG4gIGNvbnN0IG92ZXJhbGxXYXJuICAgPSBjaGVja3Muc29tZShjID0+IGMuc3RhdHVzID09PSAnd2FybicpO1xuICBjb25zdCBvdmVyYWxsU3RhdHVzID0gb3ZlcmFsbEZhaWwgPyAnZmFpbCcgOiBvdmVyYWxsV2FybiA/ICd3YXJuJyA6ICdwYXNzJztcbiAgY29uc3Qgb3ZlcmFsbE1zZyAgICA9IG92ZXJhbGxGYWlsXG4gICAgPyAnSXNzdWVzIGZvdW5kIFxcdTIwMTQgcmV2aWV3IGJlZm9yZSBzZW5kaW5nJ1xuICAgIDogb3ZlcmFsbFdhcm4gPyAnTWlub3IgaW5jb25zaXN0ZW5jaWVzIGRldGVjdGVkJyA6ICdBbGwgY2hlY2tzIHBhc3NlZCc7XG5cbiAgcGFuZWwuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgY2xhc3M9XCJjb25zaXN0ZW5jeS1yZXBvcnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjci1oZWFkZXJcIj5cbiAgICAgICAgPGgzIHN0eWxlPVwibWFyZ2luOjA7Zm9udC1zaXplOjFlbTtcIj4ke2ljb25zW292ZXJhbGxTdGF0dXNdfSBDcm9zcy1Eb2N1bWVudCBDb25zaXN0ZW5jeTwvaDM+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3ItYmFkZ2UgY3ItJHtvdmVyYWxsU3RhdHVzfVwiPiR7ZXNjYXBlSHRtbChvdmVyYWxsTXNnKX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDtmb250LXNpemU6MC44M2VtO21hcmdpbjowIDAgMTJweDtcIj5cbiAgICAgICAgQ2hlY2tzIGNvbXBhbnkgbmFtZSwgam9iIHRpdGxlLCBBVFMga2V5d29yZHMsIGRhdGUgZm9ybWF0dGluZywgYW5kIHRlcm1pbm9sb2d5IGNvbnNpc3RlbmN5IGFjcm9zcyBDViwgY292ZXIgbGV0dGVyLCBhbmQgc2NyZWVuaW5nIGFuc3dlcnMuXG4gICAgICA8L3A+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3ItY2hlY2tzXCI+XG4gICAgICAgICR7Y2hlY2tzLm1hcChjID0+IGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3ItY2hlY2sgY3ItJHtjLnN0YXR1c31cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3ItaWNvblwiPiR7aWNvbnNbYy5zdGF0dXNdfTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3ItbGFiZWxcIj4ke2VzY2FwZUh0bWwoYy5sYWJlbCl9PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjci1kZXRhaWxcIj4ke2MuZGV0YWlsfTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5gKS5qb2luKCcnKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBEZWJvdW5jZWQgdmFsaWRhdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxubGV0IF9jbFZhbGlkYXRlVGltZXIgPSBudWxsO1xuZnVuY3Rpb24gX2RlYm91bmNlZFZhbGlkYXRlQ0woKSB7XG4gIGNsZWFyVGltZW91dChfY2xWYWxpZGF0ZVRpbWVyKTtcbiAgX2NsVmFsaWRhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnN0IHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLWxldHRlci10ZXh0YXJlYScpO1xuICAgIGlmICh0YSkgX3ZhbGlkYXRlQ292ZXJMZXR0ZXIodGEudmFsdWUpO1xuICB9LCA2MDApO1xufVxuXG4vKipcbiAqIENsaWVudC1zaWRlIGNvdmVyIGxldHRlciBxdWFsaXR5IGNoZWNrcy5cbiAqIDUgcnVsZXM6IG9wZW5pbmcsIEktZmlyc3QgZ2F0ZSwgY29tcGFueSBuYW1lLCB3b3JkIGNvdW50IChyb2xlLWRpZmZlcmVudGlhdGVkKSwgY2FsbC10by1hY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIF92YWxpZGF0ZUNvdmVyTGV0dGVyKHRleHQpIHtcbiAgY29uc3QgcGFuZWwgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLXZhbGlkYXRpb24tcGFuZWwnKTtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsLWNoZWNrcy1jb250YWluZXInKTtcbiAgaWYgKCFwYW5lbCB8fCAhY29udGFpbmVyIHx8ICF0ZXh0LnRyaW0oKSkgcmV0dXJuO1xuXG4gIC8vIFx1MjUwMFx1MjUwMCBSdWxlIDE6IE9wZW5pbmcgcGF0dGVybiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgY29uc3QgZmlyc3RMaW5lID0gKHRleHQuc3BsaXQoJ1xcbicpLmZpbmQobCA9PiBsLnRyaW0oKSkgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBnZW5lcmljT3BlbmluZ3MgPSBbXG4gICAgL15kZWFyIGhpcmluZyBtYW5hZ2VyLyxcbiAgICAvXmRlYXIgc2lyIG9yIG1hZGFtLyxcbiAgICAvXnRvIHdob20gaXQgbWF5IGNvbmNlcm4vLFxuICAgIC9eZGVhciByZWNydWl0ZXIvLFxuICAgIC9eZGVhciBodW1hbiByZXNvdXJjZXMvLFxuICAgIC9eZGVhciBoci8sXG4gIF07XG4gIGNvbnN0IGdlbmVyaWNPcGVuaW5nID0gZ2VuZXJpY09wZW5pbmdzLnNvbWUocmUgPT4gcmUudGVzdChmaXJzdExpbmUpKTtcbiAgY29uc3Qgb3BlbmluZ0NoZWNrID0ge1xuICAgIHBhc3M6ICFnZW5lcmljT3BlbmluZyxcbiAgICBsYWJlbDogJ09wZW5pbmcgc2FsdXRhdGlvbicsXG4gICAgZGV0YWlsOiBnZW5lcmljT3BlbmluZ1xuICAgICAgPyAnVXNlcyBhIGdlbmVyaWMgb3BlbmVyIChcIkRlYXIgSGlyaW5nIE1hbmFnZXJcIiBldGMuKSBcdTIwMTQgcGVyc29uYWxpc2Ugd2l0aCBhIG5hbWUgb3Igcm9sZS4nXG4gICAgICA6ICdQZXJzb25hbGlzZWQgb3BlbmVyIFx1MjAxNCBnb29kLicsXG4gIH07XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFJ1bGUgMWI6IEJvZHkgbXVzdCBub3Qgb3BlbiB3aXRoIFwiSVwiIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuICBjb25zdCBhbGxMaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpLm1hcChsID0+IGwudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHNhbHV0YXRpb25JZHggPSBhbGxMaW5lcy5maW5kSW5kZXgoXG4gICAgbCA9PiBsLnRvTG93ZXJDYXNlKCkgPT09IGZpcnN0TGluZS50b0xvd2VyQ2FzZSgpXG4gICk7XG4gIGNvbnN0IGJvZHlMaW5lcyA9IGFsbExpbmVzLnNsaWNlKE1hdGgubWF4KDAsIHNhbHV0YXRpb25JZHggKyAxKSk7XG4gIGNvbnN0IGZpcnN0Qm9keVdvcmQgPSAoYm9keUxpbmVzLmZpbmQobCA9PiBsLnRyaW0oKSkgfHwgJycpLnNwbGl0KC9cXHMrLylbMF0gfHwgJyc7XG4gIC8vIFNwbGl0IG9uIG5vbi1hbHBoYSBzbyBcIkknbVwiIFx1MjE5MiB0b2tlbiBcIklcIiwgXCJJblwiIFx1MjE5MiB0b2tlbiBcIkluXCJcbiAgY29uc3QgZmlyc3RCb2R5VG9rZW4gPSBmaXJzdEJvZHlXb3JkLnNwbGl0KC9bXmEtekEtWl0vKVswXSB8fCAnJztcbiAgY29uc3QgYm9keVN0YXJ0c1dpdGhJID0gZmlyc3RCb2R5VG9rZW4udG9Mb3dlckNhc2UoKSA9PT0gJ2knO1xuICBjb25zdCBpRmlyc3RDaGVjayA9IHtcbiAgICBwYXNzOiAhYm9keVN0YXJ0c1dpdGhJLFxuICAgIGxhYmVsOiAnT3BlbmluZyB3b3JkJyxcbiAgICBkZXRhaWw6IGJvZHlTdGFydHNXaXRoSVxuICAgICAgPyAnQm9keSBvcGVucyB3aXRoIFwiSVwiIFx1MjAxNCBsZWFkIHdpdGggeW91ciB2YWx1ZSwgdGhlIHJvbGUsIG9yIHRoZSBjb21wYW55IGluc3RlYWQuJ1xuICAgICAgOiAnQm9keSBkb2VzIG5vdCBvcGVuIHdpdGggXCJJXCIgXHUyMDE0IGdvb2QuJyxcbiAgfTtcblxuICAvLyBcdTI1MDBcdTI1MDAgUnVsZSAyOiBDb21wYW55LXNwZWNpZmljIHJlZmVyZW5jZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgY29uc3QgY29tcGFueU5hbWUgPSBfZ2V0Q29tcGFueU5hbWVGb3JDTCgpO1xuICBsZXQgY29tcGFueUNoZWNrO1xuICBpZiAoIWNvbXBhbnlOYW1lKSB7XG4gICAgY29tcGFueUNoZWNrID0geyB3YXJuOiB0cnVlLCBsYWJlbDogJ0NvbXBhbnkgcmVmZXJlbmNlJywgZGV0YWlsOiAnQ29tcGFueSBuYW1lIG5vdCBkZXRlY3RlZCBmcm9tIGpvYiBkZXNjcmlwdGlvbiBcdTIwMTQgdmVyaWZ5IG1hbnVhbGx5LicgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBtZW50aW9ucyA9ICh0ZXh0LnRvTG93ZXJDYXNlKCkubWF0Y2gobmV3IFJlZ0V4cChjb21wYW55TmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyksICdnJykpIHx8IFtdKS5sZW5ndGg7XG4gICAgY29tcGFueUNoZWNrID0ge1xuICAgICAgcGFzczogbWVudGlvbnMgPj0gMixcbiAgICAgIHdhcm46IG1lbnRpb25zID09PSAxLFxuICAgICAgbGFiZWw6ICdDb21wYW55IHJlZmVyZW5jZScsXG4gICAgICBkZXRhaWw6IG1lbnRpb25zID09PSAwXG4gICAgICAgID8gYFwiJHtlc2NhcGVIdG1sKGNvbXBhbnlOYW1lKX1cIiBub3QgbWVudGlvbmVkIFx1MjAxNCBhZGQgc3BlY2lmaWMgcmVmZXJlbmNlcy5gXG4gICAgICAgIDogbWVudGlvbnMgPT09IDFcbiAgICAgICAgICA/IGBcIiR7ZXNjYXBlSHRtbChjb21wYW55TmFtZSl9XCIgbWVudGlvbmVkIG9uY2UgXHUyMDE0IGEgc2Vjb25kIHNwZWNpZmljIHJlZmVyZW5jZSBzdHJlbmd0aGVucyB0aGUgbGV0dGVyLmBcbiAgICAgICAgICA6IGBcIiR7ZXNjYXBlSHRtbChjb21wYW55TmFtZSl9XCIgbWVudGlvbmVkICR7bWVudGlvbnN9IHRpbWVzIFx1MjAxNCBnb29kIHNwZWNpZmljaXR5LmAsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFx1MjUwMFx1MjUwMCBSdWxlIDM6IFdvcmQgY291bnQgKHJvbGUtZGlmZmVyZW50aWF0ZWQgdGFyZ2V0KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgY29uc3QgX3JvbGVBbmFseXNpcyA9IHdpbmRvdy5fbGFzdEFuYWx5c2lzRGF0YSB8fFxuICAgICh3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucyAmJiB3aW5kb3cucGVuZGluZ1JlY29tbWVuZGF0aW9ucy5qb2JfYW5hbHlzaXMpIHx8IHt9O1xuICBjb25zdCBfcm9sZUxldmVsICA9IChfcm9sZUFuYWx5c2lzLnJvbGVfbGV2ZWwgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IF9yb2xlRG9tYWluID0gKF9yb2xlQW5hbHlzaXMuZG9tYWluIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBpc0V4ZWMgICAgICA9IC9leGVjfHZwfGMtc3VpdGV8Y2hpZWZ8ZGlyZWN0b3J8cHJlc2lkZW50fHBhcnRuZXIvLnRlc3QoX3JvbGVMZXZlbCk7XG4gIGNvbnN0IGlzQWNhZGVtaWMgID0gL2FjYWRlbWljfHJlc2VhcmNofGZhY3VsdHl8cHJvZmVzc29yfHBvc3Rkb2MvLnRlc3QoX3JvbGVEb21haW4gKyAnICcgKyBfcm9sZUxldmVsKTtcbiAgY29uc3Qgd2NUYXJnZXQgICAgPSBpc0FjYWRlbWljID8geyBsbzogNTAwLCBoaTogNjAwLCB3YXJuTG86IDQwMCwgd2FybkhpOiA2NTAgfVxuICAgICAgICAgICAgICAgICAgICA6IGlzRXhlYyAgICAgPyB7IGxvOiA0MDAsIGhpOiA1MDAsIHdhcm5MbzogMzAwLCB3YXJuSGk6IDU1MCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHsgbG86IDI1MCwgaGk6IDMwMCwgd2FybkxvOiAyMDAsIHdhcm5IaTogNDAwIH07XG4gIGNvbnN0IHdjTGFiZWwgICAgID0gaXNBY2FkZW1pYyA/IGAke3djVGFyZ2V0LmxvfVx1MjAxMyR7d2NUYXJnZXQuaGl9IChhY2FkZW1pYy9yZXNlYXJjaClgXG4gICAgICAgICAgICAgICAgICAgIDogaXNFeGVjICAgICA/IGAke3djVGFyZ2V0LmxvfVx1MjAxMyR7d2NUYXJnZXQuaGl9IChleGVjdXRpdmUpYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBgXHUyMjY0JHt3Y1RhcmdldC5oaX0gKHN0YW5kYXJkKWA7XG5cbiAgY29uc3Qgd29yZHMgICAgPSB0ZXh0LnRyaW0oKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKS5sZW5ndGg7XG4gIGNvbnN0IHdjUGN0ICAgID0gTWF0aC5taW4oMTAwLCAod29yZHMgLyB3Y1RhcmdldC5oaSkgKiAxMDApO1xuICBjb25zdCB3Y0NvbG91ciA9IHdvcmRzIDwgd2NUYXJnZXQud2FybkxvID8gJyNlZjQ0NDQnXG4gICAgICAgICAgICAgICAgIDogd29yZHMgPCB3Y1RhcmdldC5sbyAgICAgID8gJyNmNTllMGInXG4gICAgICAgICAgICAgICAgIDogd29yZHMgPD0gd2NUYXJnZXQuaGkgICAgID8gJyMyMmM1NWUnXG4gICAgICAgICAgICAgICAgIDogd29yZHMgPD0gd2NUYXJnZXQud2FybkhpID8gJyNmNTllMGInXG4gICAgICAgICAgICAgICAgIDogJyNlZjQ0NDQnO1xuICBjb25zdCB3Y1N0YXR1cyA9IHdvcmRzID49IHdjVGFyZ2V0LmxvICYmIHdvcmRzIDw9IHdjVGFyZ2V0LmhpID8gJ3Bhc3MnXG4gICAgICAgICAgICAgICAgIDogd29yZHMgPj0gd2NUYXJnZXQud2FybkxvICYmIHdvcmRzIDw9IHdjVGFyZ2V0Lndhcm5IaSA/ICd3YXJuJ1xuICAgICAgICAgICAgICAgICA6ICdmYWlsJztcbiAgY29uc3Qgd2NCYXIgICAgPSBgPHNwYW4gY2xhc3M9XCJjbC13Yy1iYXJcIj48c3BhbiBjbGFzcz1cImNsLXdjLWZpbGxcIiBzdHlsZT1cIndpZHRoOiR7d2NQY3R9JTtiYWNrZ3JvdW5kOiR7d2NDb2xvdXJ9O1wiPjwvc3Bhbj48L3NwYW4+YDtcbiAgY29uc3Qgd29yZENvdW50Q2hlY2sgPSB7XG4gICAgW3djU3RhdHVzXTogdHJ1ZSxcbiAgICBsYWJlbDogYFdvcmQgY291bnQgKCR7d2NMYWJlbH0pYCxcbiAgICBkZXRhaWw6IGAke3dvcmRzfSB3b3JkcyAke3djQmFyfSBcdTIwMTQgJHtcbiAgICAgIHdvcmRzIDwgd2NUYXJnZXQubG8gPyBgdG9vIHNob3J0OyBhaW0gZm9yICR7d2NUYXJnZXQubG99XHUyMDEzJHt3Y1RhcmdldC5oaX0uYFxuICAgICAgOiB3b3JkcyA+IHdjVGFyZ2V0LmhpID8gYHRvbyBsb25nOyB0cmltIHRvICR7d2NUYXJnZXQuaGl9IHdvcmRzLmBcbiAgICAgIDogJ3dpdGhpbiB0YXJnZXQgcmFuZ2UuJ1xuICAgIH1gLFxuICB9O1xuXG4gIC8vIFx1MjUwMFx1MjUwMCBSdWxlIDQ6IENhbGwtdG8tYWN0aW9uIGNsb3NpbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIGNvbnN0IGxhc3RQYXJhID0gdGV4dC5zcGxpdCgvXFxuezIsfS8pLmZpbHRlcihwID0+IHAudHJpbSgpKS5zbGljZSgtMSlbMF0gfHwgJyc7XG4gIC8vIEFzc2VydGl2ZSBDVEFzOiBjYW5kaWRhdGUgdGFrZXMgaW5pdGlhdGl2ZSAocGFzcylcbiAgY29uc3QgYXNzZXJ0aXZlQ3RhUGF0dGVybnMgPSBbXG4gICAgL2ludGVydmlldy9pLCAvZGlzY3Vzcy9pLCAvb3Bwb3J0dW5pdHkgdG8gKHNwZWFrfHRhbGt8bWVldHxjb25uZWN0KS9pLFxuICAgIC9pIHdpbGwgKGNhbGx8Zm9sbG93Lj91cHxyZWFjaCBvdXR8Y29udGFjdHxzZW5kKS9pLFxuICAgIC9pIChwbGFufGludGVuZCkgdG8vaSwgL3dlbGNvbWUgdGhlIGNoYW5jZS9pLFxuICAgIC9hdmFpbGFibGUgKGZvcnx0bykvaSwgL2NvbnRhY3QgbWUvaSxcbiAgXTtcbiAgLy8gUGFzc2l2ZSBDVEFzOiB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIChmYWlsIFx1MjAxNCBzdG9yeSBVUy1QNSByZXF1aXJlcyByZWplY3Rpb24pXG4gIGNvbnN0IHBhc3NpdmVDdGFQYXR0ZXJucyA9IFtcbiAgICAvaGVhciBmcm9tIHlvdS9pLCAvbG9vayBmb3J3YXJkIHRvICh5b3VyfGhlYXJpbmcpL2ksXG4gICAgL2F3YWl0KGluZyk/IHlvdXIvaSwgL2hvcGUgdG8gKGhlYXJ8bWVldCkvaSxcbiAgXTtcbiAgY29uc3QgaGFzQXNzZXJ0aXZlQ3RhID0gYXNzZXJ0aXZlQ3RhUGF0dGVybnMuc29tZShyZSA9PiByZS50ZXN0KGxhc3RQYXJhKSk7XG4gIGNvbnN0IGhhc1Bhc3NpdmVDdGEgICA9IHBhc3NpdmVDdGFQYXR0ZXJucy5zb21lKHJlID0+IHJlLnRlc3QobGFzdFBhcmEpKTtcbiAgY29uc3QgY3RhQ2hlY2sgPSB7XG4gICAgcGFzczogaGFzQXNzZXJ0aXZlQ3RhLFxuICAgIGZhaWw6ICFoYXNBc3NlcnRpdmVDdGEgJiYgaGFzUGFzc2l2ZUN0YSxcbiAgICBsYWJlbDogJ0NhbGwtdG8tYWN0aW9uIGNsb3NpbmcnLFxuICAgIGRldGFpbDogaGFzQXNzZXJ0aXZlQ3RhXG4gICAgICA/ICdBc3NlcnRpdmUgY2FsbC10by1hY3Rpb24gXHUyMDE0IHRha2VzIGluaXRpYXRpdmUuJ1xuICAgICAgOiBoYXNQYXNzaXZlQ3RhXG4gICAgICAgID8gJ1Bhc3NpdmUgY2xvc2luZyByZWplY3RlZCBcdTIwMTQgcGhyYXNlcyBsaWtlIFwiSSBsb29rIGZvcndhcmQgdG8gaGVhcmluZyBmcm9tIHlvdVwiIGFyZSB0b28gcGFzc2l2ZS4gUmVwbGFjZSB3aXRoIGEgZGlyZWN0IGludGVydmlldyByZXF1ZXN0OiBcIkkgd291bGQgd2VsY29tZSB0aGUgb3Bwb3J0dW5pdHkgdG8gaW50ZXJ2aWV3XCIgb3IgXCJJIHdpbGwgZm9sbG93IHVwIG5leHQgd2Vlay5cIidcbiAgICAgICAgOiAnTm8gY2FsbC10by1hY3Rpb24gZm91bmQgXHUyMDE0IGFkZCBhIGRpcmVjdCBpbnRlcnZpZXcgcmVxdWVzdCBvciBwcm9hY3RpdmUgZm9sbG93LXVwIHN0YXRlbWVudC4nLFxuICB9O1xuXG4gIC8vIFx1MjUwMFx1MjUwMCBSdWxlIDU6IE5hbWVkIG9yIHF1YW50aWZpZWQgYWNoaWV2ZW1lbnQgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIGNvbnN0IGFjaGlldmVtZW50UGF0dGVybnMgPSBbXG4gICAgL1xcZCslLywgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBlcmNlbnRhZ2VzXG4gICAgL1xcJFtcXGQsXSsvLCAgICAgICAgICAgICAgICAgICAgICAvLyBkb2xsYXIgYW1vdW50c1xuICAgIC9cXGQrICh0aW1lc3x4fGZvbGR8eWVhcnxtb250aHx3ZWVrfGRheXx0ZWFtfHBlb3BsZXxzdGFmZnxjbGllbnR8Y3VzdG9tZXJ8cHJvamVjdHxwcm9kdWN0fHN5c3RlbXxhd2FyZHxwYXRlbnQpL2ksXG4gICAgL3JlZHVjZWR8aW5jcmVhc2VkfGdyZXd8Z3Jld3xkb3VibGVkfHRyaXBsZWR8c2F2ZWR8Z2VuZXJhdGVkfGRlbGl2ZXJlZHxsYXVuY2hlZHxsZWR8YnVpbHR8ZGVzaWduZWR8YXJjaGl0ZWN0ZWR8cGlvbmVlcmVkfHdvbnxhd2FyZGVkfGVhcm5lZHxhY2hpZXZlZC9pLFxuICBdO1xuICBjb25zdCBoYXNBY2hpZXZlbWVudCA9IGFjaGlldmVtZW50UGF0dGVybnMuc29tZShyZSA9PiByZS50ZXN0KHRleHQpKTtcbiAgY29uc3QgYWNoaWV2ZW1lbnRDaGVjayA9IHtcbiAgICBwYXNzOiBoYXNBY2hpZXZlbWVudCxcbiAgICB3YXJuOiAhaGFzQWNoaWV2ZW1lbnQsXG4gICAgbGFiZWw6ICdTcGVjaWZpYyBhY2hpZXZlbWVudCcsXG4gICAgZGV0YWlsOiBoYXNBY2hpZXZlbWVudFxuICAgICAgPyAnQ29udGFpbnMgYSBxdWFudGlmaWVkIG9yIG5hbWVkIGFjaGlldmVtZW50IFx1MjAxNCBnb29kLidcbiAgICAgIDogJ05vIHF1YW50aWZpZWQgYWNoaWV2ZW1lbnQgZGV0ZWN0ZWQgXHUyMDE0IGFkZCBhdCBsZWFzdCBvbmUgc3BlY2lmaWMgcmVzdWx0IChlLmcuLCBcImluY3JlYXNlZCByZXZlbnVlIGJ5IDMwJVwiLCBcImxlZCBhIHRlYW0gb2YgOFwiKS4nLFxuICB9O1xuXG4gIC8vIFx1MjUwMFx1MjUwMCBSdWxlIDc6IEdlbmVyaWMgZmlsbGVyIHBocmFzZXMgKEdBUC0xNykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gIGNvbnN0IF9DTF9GSUxMRVIgPSBbXG4gICAgJ2kgYW0gd3JpdGluZyB0byBhcHBseScsICdpIGFtIGV4Y2l0ZWQgdG8gYXBwbHknLCAnaSBhbSBwbGVhc2VkIHRvIGFwcGx5JyxcbiAgICAncGxlYXNlIGZpbmQgbXknLCAnYXR0YWNoZWQgcGxlYXNlIGZpbmQnLCAnZW5jbG9zZWQgcGxlYXNlIGZpbmQnLFxuICAgICd0aGlzIGxldHRlciBpcyB0byBleHByZXNzJywgJ2kgZmVlbCBpIHdvdWxkIGJlIGEgZ3JlYXQgZml0JyxcbiAgICAnaSBiZWxpZXZlIGkgd291bGQgYmUgYSBwZXJmZWN0IGZpdCcsICdpIGFtIGNvbmZpZGVudCB0aGF0IGknLFxuICAgICdyZXN1bHRzLWRyaXZlbicsICdkZXRhaWwtb3JpZW50ZWQnLCAnc2Vhc29uZWQgcHJvZmVzc2lvbmFsJyxcbiAgICAncGFzc2lvbmF0ZSBhYm91dCcsICdkeW5hbWljIHByb2Zlc3Npb25hbCcsICdoaWdobHkgbW90aXZhdGVkJyxcbiAgICAndGVhbSBwbGF5ZXInLCAnc2VsZi1zdGFydGVyJywgJ2hhcmQgd29ya2luZycsXG4gIF07XG4gIGNvbnN0IF90ZXh0TGMgICAgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGZvdW5kRmlsbCAgPSBfQ0xfRklMTEVSLmZpbHRlcihwID0+IF90ZXh0TGMuaW5jbHVkZXMocCkpO1xuICBjb25zdCBmaWxsZXJDaGVjayA9IHtcbiAgICBwYXNzOiBmb3VuZEZpbGwubGVuZ3RoID09PSAwLFxuICAgIHdhcm46IGZvdW5kRmlsbC5sZW5ndGggPiAwICYmIGZvdW5kRmlsbC5sZW5ndGggPD0gMixcbiAgICBmYWlsOiBmb3VuZEZpbGwubGVuZ3RoID4gMixcbiAgICBsYWJlbDogJ0ZpbGxlciBwaHJhc2VzJyxcbiAgICBkZXRhaWw6IGZvdW5kRmlsbC5sZW5ndGggPT09IDBcbiAgICAgID8gJ05vIGdlbmVyaWMgZmlsbGVyIHBocmFzZXMgZGV0ZWN0ZWQgXHUyMDE0IGdvb2QuJ1xuICAgICAgOiBgR2VuZXJpYyBwaHJhc2Uke2ZvdW5kRmlsbC5sZW5ndGggPiAxID8gJ3MnIDogJyd9IGRldGVjdGVkOiAke2ZvdW5kRmlsbC5zbGljZSgwLCAzKS5tYXAocCA9PiBgXHUyMDFDJHtwfVx1MjAxRGApLmpvaW4oJywgJyl9JHtmb3VuZEZpbGwubGVuZ3RoID4gMyA/ICdcdTIwMjYnIDogJyd9IFx1MjAxNCByZXBsYWNlIHdpdGggc3BlY2lmaWMgdmFsdWUgY2xhaW1zLmAsXG4gIH07XG5cbiAgLy8gXHUyNTAwXHUyNTAwIFJlbmRlciBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgY29uc3QgY2hlY2tzID0gW29wZW5pbmdDaGVjaywgaUZpcnN0Q2hlY2ssIGNvbXBhbnlDaGVjaywgd29yZENvdW50Q2hlY2ssIGN0YUNoZWNrLCBhY2hpZXZlbWVudENoZWNrLCBmaWxsZXJDaGVja107XG4gIGNvbnRhaW5lci5pbm5lckhUTUwgPSBjaGVja3MubWFwKGMgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gYy5wYXNzID8gJ3Bhc3MnIDogYy53YXJuID8gJ3dhcm4nIDogJ2ZhaWwnO1xuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImNsLWNoZWNrICR7c3RhdGV9XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNjLWljb25cIj48L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNjLWxhYmVsXCI+JHtlc2NhcGVIdG1sKGMubGFiZWwpfTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY2MtZGV0YWlsXCI+JHtjLmRldGFpbH08L3NwYW4+XG4gICAgPC9kaXY+YDtcbiAgfSkuam9pbignJyk7XG5cbiAgcGFuZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBHZXQgY29tcGFueSBuYW1lIGZvciBjb3ZlciBsZXR0ZXIgdmFsaWRhdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gX2dldENvbXBhbnlOYW1lRm9yQ0woKSB7XG4gIC8vIFRyeSBhbmFseXNpcyBkYXRhIGZpcnN0LCB0aGVuIGZhbGwgYmFjayB0byBqb2IgZGVzY3JpcHRpb24gZmlyc3QgbGluZVxuICBjb25zdCBhbmFseXNpcyA9IHdpbmRvdy5fbGFzdEFuYWx5c2lzRGF0YSB8fCAod2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMgJiYgd2luZG93LnBlbmRpbmdSZWNvbW1lbmRhdGlvbnMuam9iX2FuYWx5c2lzKTtcbiAgaWYgKGFuYWx5c2lzICYmIGFuYWx5c2lzLmNvbXBhbnlfbmFtZSkgcmV0dXJuIGFuYWx5c2lzLmNvbXBhbnlfbmFtZTtcbiAgaWYgKGFuYWx5c2lzICYmIGFuYWx5c2lzLmNvbXBhbnkpICAgICAgcmV0dXJuIGFuYWx5c2lzLmNvbXBhbnk7XG4gIC8vIEZhbGwgYmFjazogZmlyc3Qgbm9uLWVtcHR5IGxpbmUgb2Ygam9iIGRlc2NyaXB0aW9uIGluIHRhYkRhdGFcbiAgY29uc3QgamQgPSBzdGF0ZU1hbmFnZXIuZ2V0VGFiRGF0YSgnam9iJykgfHwgJyc7XG4gIGNvbnN0IGZpcnN0TGluZSA9IGpkLnNwbGl0KCdcXG4nKS5maW5kKGwgPT4gbC50cmltKCkpO1xuICByZXR1cm4gZmlyc3RMaW5lID8gZmlyc3RMaW5lLnRyaW0oKS5zbGljZSgwLCA2MCkgOiAnJztcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB7XG4gIENPVkVSX0xFVFRFUl9UT05FUyxcbiAgX2NvdmVyTGV0dGVyRm9ybVN0YXRlLFxuICBwb3B1bGF0ZUNvdmVyTGV0dGVyVGFiLFxuICBnZW5lcmF0ZUNvdmVyTGV0dGVyLFxuICBzYXZlQ292ZXJMZXR0ZXIsXG4gIF9yZW5kZXJDb25zaXN0ZW5jeVJlcG9ydCxcbiAgX2RlYm91bmNlZFZhbGlkYXRlQ0wsXG4gIF92YWxpZGF0ZUNvdmVyTGV0dGVyLFxuICBfZ2V0Q29tcGFueU5hbWVGb3JDTCxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9zY3JlZW5pbmctcXVlc3Rpb25zLmpzXG4gKiBTY3JlZW5pbmcgcXVlc3Rpb25zIHRhYjogcGFyc2UsIHNlYXJjaCwgZ2VuZXJhdGUsIHNhdmUgcmVzcG9uc2VzLlxuICpcbiAqIERlcGVuZGVuY2llcyAocmVzb2x2ZWQgdGhyb3VnaCBnbG9iYWxUaGlzIGF0IHJ1bnRpbWUpOlxuICogICBlc2NhcGVIdG1sLCBzaG93QWxlcnRNb2RhbFxuICovXG5cbi8vIFx1MjUwMFx1MjUwMCBNb2R1bGUtbGV2ZWwgc3RhdGUgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKiBQZXItcXVlc3Rpb24gZHJhZnQgc3RhdGU6IHsgZm9ybWF0LCBleHBlcmllbmNlSW5kaWNlcywgcmVzcG9uc2VUZXh0LCB0b3BpY1RhZywgcHJpb3JSZXNwb25zZSB9ICovXG5jb25zdCBfc2NyZWVuaW5nU3RhdGUgPSB7fTtcblxuLyoqIFJhdyB0ZXh0IGZyb20gdGhlIHNjLWlucHV0IHRleHRhcmVhIFx1MjAxNCBzdXJ2aXZlcyB0YWIgbmF2aWdhdGlvbi4gKi9cbmxldCBfc2NyZWVuaW5nSW5wdXRUZXh0ID0gJyc7XG5cbi8qKiBSZXNldCBmdW5jdGlvbiBmb3IgdGVzdGluZyBcdTIwMTQgY2xlYXJzIHNhdmVkIHRleHRhcmVhIHN0YXRlLiAqL1xuZnVuY3Rpb24gX3Jlc2V0U2NyZWVuaW5nSW5wdXRUZXh0KCkgeyBfc2NyZWVuaW5nSW5wdXRUZXh0ID0gJyc7IH1cblxuLy8gXHUyNTAwXHUyNTAwIFBvcHVsYXRlIHNjcmVlbmluZyB0YWIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHBvcHVsYXRlU2NyZWVuaW5nVGFiKCkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgY29udGVudC5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBzdHlsZT1cIm1heC13aWR0aDo5MDBweDttYXJnaW46MCBhdXRvO3BhZGRpbmc6MjBweCAxMHB4O1wiPlxuICAgICAgPGgyIHN0eWxlPVwiZm9udC1zaXplOjEuM2VtO2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOjhweDtcIj5cdUQ4M0RcdURDQ0IgU2NyZWVuaW5nIFF1ZXN0aW9uczwvaDI+XG4gICAgICA8cCBjbGFzcz1cInNjLWludHJvXCI+UGFzdGUgb25lIG9yIG1vcmUgc2NyZWVuaW5nIHF1ZXN0aW9ucyBiZWxvdyBcdTIwMTQgb25lIHBlciBsaW5lLCBvciBzZXBhcmF0ZWQgYnkgYmxhbmsgbGluZXMuIENsaWNrIDxzdHJvbmc+UGFyc2UgUXVlc3Rpb25zPC9zdHJvbmc+IHRvIGdlbmVyYXRlIHRhaWxvcmVkIGRyYWZ0IHJlc3BvbnNlcy48L3A+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luLWJvdHRvbToyMHB4O1wiPlxuICAgICAgICA8dGV4dGFyZWEgaWQ9XCJzYy1pbnB1dFwiIHJvd3M9XCI2XCIgc3R5bGU9XCJmbGV4OjE7cGFkZGluZzoxMnB4O2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MC45M2VtO3Jlc2l6ZTp2ZXJ0aWNhbDtcIiBwbGFjZWhvbGRlcj1cIlBhc3RlIHNjcmVlbmluZyBxdWVzdGlvbnMgaGVyZVx1MjAyNiYjMTA7JiMxMDtFLmcuJiMxMDtEZXNjcmliZSBhIHRpbWUgeW91IGxlZCBhIGNyb3NzLWZ1bmN0aW9uYWwgcHJvamVjdC4mIzEwOyYjMTA7SG93IGRvIHlvdSBoYW5kbGUgdGlnaHQgZGVhZGxpbmVzP1wiPjwvdGV4dGFyZWE+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tcHJpbWFyeVwiIG9uY2xpY2s9XCJwYXJzZVNjcmVlbmluZ1F1ZXN0aW9ucygpXCI+UGFyc2UgUXVlc3Rpb25zPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJzYy1xdWVzdGlvbnMtY29udGFpbmVyXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2Mtc2F2ZS1iYXJcIiBpZD1cInNjLXNhdmUtYmFyXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250aW51ZS1idG5cIiBpZD1cInNjLXNhdmUtYnRuXCIgb25jbGljaz1cInNhdmVTY3JlZW5pbmdSZXNwb25zZXMoKVwiPlx1RDgzRFx1RENCRSBTYXZlIEFsbCBSZXNwb25zZXM8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm5hdi1idXR0b25zIG5hdi1lbmRcIiBzdHlsZT1cIm1hcmdpbi10b3A6MjRweDtcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRpbnVlLWJ0blwiIG9uY2xpY2s9XCJoYW5kbGVTdGVwQ2xpY2soJ2ludGVydmlld19wcmVwJylcIj5cdUQ4M0NcdURGQTQgUHJvY2VlZCB0byBJbnRlcnZpZXcgUHJlcCBcdTIxOTI8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG5cbiAgLy8gUmVzdG9yZSB0aGUgcmF3IGlucHV0IHRleHQgYW5kIHdpcmUgdXAgc2F2ZS1vbi1pbnB1dCBsaXN0ZW5lci5cbiAgY29uc3Qgc2NJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYy1pbnB1dCcpO1xuICBpZiAoc2NJbnB1dCkge1xuICAgIGlmIChfc2NyZWVuaW5nSW5wdXRUZXh0KSBzY0lucHV0LnZhbHVlID0gX3NjcmVlbmluZ0lucHV0VGV4dDtcbiAgICBzY0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4geyBfc2NyZWVuaW5nSW5wdXRUZXh0ID0gc2NJbnB1dC52YWx1ZTsgfSk7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFBhcnNlIHF1ZXN0aW9ucyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gcGFyc2VTY3JlZW5pbmdRdWVzdGlvbnMoKSB7XG4gIGNvbnN0IHJhdyA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2MtaW5wdXQnKT8udmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFyYXcpIHsgc2hvd0FsZXJ0TW9kYWwoJ1x1MjZBMFx1RkUwRiBObyBJbnB1dCcsICdQbGVhc2UgcGFzdGUgYXQgbGVhc3Qgb25lIHNjcmVlbmluZyBxdWVzdGlvbiBmaXJzdC4nKTsgcmV0dXJuOyB9XG5cbiAgLy8gU3BsaXQgb24gYmxhbmsgbGluZXMgKHByZWZlcnJlZCkgb3IgbnVtYmVyZWQgbGlzdCBwYXR0ZXJuczsgZmlsdGVyIGVtcHR5IHJlc3VsdHNcbiAgbGV0IHF1ZXN0aW9ucyA9IHJhdy5zcGxpdCgvXFxuXFxzKlxcbisvKS5tYXAocSA9PiBxLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xuICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgIC8vIFRyeSBudW1iZXJlZCBwYXR0ZXJucyBsaWtlIFwiMS4gXCIgb3IgXCIxKSBcIiBvciBcIlExOlwiIHdpdGhvdXQgcmVxdWlyaW5nIHNwYWNlIGFmdGVyXG4gICAgY29uc3QgbnVtYmVyZWQgPSByYXcuc3BsaXQoL1xcbig/PVxcZCtbLlxcKV1cXHMqKD89W0EtWl0pfFFcXGQrWzpcXC5dP1xccyooPz1bQS1aXSkpLylcbiAgICAgIC5tYXAocSA9PiBxLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKG51bWJlcmVkLmxlbmd0aCA+IDEpIHF1ZXN0aW9ucyA9IG51bWJlcmVkO1xuICB9XG4gIGlmIChxdWVzdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gTGFzdCByZXNvcnQ6IHNwbGl0IG9uIGFueSBzaW5nbGUgbmV3bGluZSBpZiB3ZSBzdGlsbCBoYXZlIGp1c3Qgb25lIFwicXVlc3Rpb25cIlxuICAgIGNvbnN0IHNpbmdsZUxpbmUgPSByYXcuc3BsaXQoL1xcbisvKS5tYXAocSA9PiBxLnRyaW0oKSkuZmlsdGVyKHEgPT4gcS5sZW5ndGggPiAwKTtcbiAgICBpZiAoc2luZ2xlTGluZS5sZW5ndGggPiAxKSBxdWVzdGlvbnMgPSBzaW5nbGVMaW5lO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NjLXF1ZXN0aW9ucy1jb250YWluZXInKTtcbiAgY29udGFpbmVyLmlubmVySFRNTCA9IHF1ZXN0aW9ucy5tYXAoKHEsIGkpID0+IHJlbmRlclF1ZXN0aW9uQmxvY2socSwgaSkpLmpvaW4oJycpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Mtc2F2ZS1iYXInKS5zdHlsZS5kaXNwbGF5ID0gcXVlc3Rpb25zLmxlbmd0aCA/ICcnIDogJ25vbmUnO1xuXG4gIC8vIEtpY2sgb2ZmIHNlYXJjaGVzIGluIHBhcmFsbGVsXG4gIHF1ZXN0aW9ucy5mb3JFYWNoKChxLCBpKSA9PiBzZWFyY2hGb3JRdWVzdGlvbihxLCBpKSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZW5kZXIgcXVlc3Rpb24gYmxvY2sgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIHJlbmRlclF1ZXN0aW9uQmxvY2socXVlc3Rpb24sIGlkeCkge1xuICByZXR1cm4gYFxuICAgIDxkaXYgY2xhc3M9XCJzYy1xdWVzdGlvbi1ibG9ja1wiIGlkPVwic2MtYmxvY2stJHtpZHh9XCIgZGF0YS1xdWVzdGlvbj1cIiR7ZXNjYXBlSHRtbChxdWVzdGlvbil9XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2MtcXVlc3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2MtcXVlc3Rpb24tbnVtXCI+JHtpZHggKyAxfTwvc3Bhbj5cbiAgICAgICAgPHNwYW4+JHtlc2NhcGVIdG1sKHF1ZXN0aW9uKX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYy1xdWVzdGlvbi1ib2R5XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJzYy1wcmlvci0ke2lkeH1cIj48ZW0gc3R5bGU9XCJjb2xvcjojOTRhM2I4O2ZvbnQtc2l6ZTowLjg3ZW07XCI+U2VhcmNoaW5nIHJlc3BvbnNlIGxpYnJhcnlcdTIwMjY8L2VtPjwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwic2MtZXhwLSR7aWR4fVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2MtZm9ybWF0LXJvd1wiIGlkPVwic2MtZm10LSR7aWR4fVwiPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtmb250LXdlaWdodDo2MDA7Y29sb3I6IzM3NDE1MTthbGlnbi1zZWxmOmNlbnRlcjtcIj5Gb3JtYXQ6PC9zcGFuPlxuICAgICAgICAgICR7WydkaXJlY3QnLCdzdGFyJywndGVjaG5pY2FsJ10ubWFwKGYgPT4gYFxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNjLWZvcm1hdC1idG4ke2YgPT09ICdkaXJlY3QnID8gJyBhY3RpdmUnIDogJyd9XCIgZGF0YS1mbXQ9XCIke2Z9XCIgb25jbGljaz1cInNlbGVjdEZvcm1hdCgke2lkeH0sJyR7Zn0nLHRoaXMpXCI+JHtfZm10TGFiZWwoZil9PC9idXR0b24+YCkuam9pbignJyl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXByaW1hcnlcIiBpZD1cInNjLWdlbi1idG4tJHtpZHh9XCIgb25jbGljaz1cImdlbmVyYXRlU2NyZWVuaW5nUmVzcG9uc2UoJHtpZHh9KVwiPlx1MjcyOCBHZW5lcmF0ZSBEcmFmdDwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGlkPVwic2MtcmVzdWx0LSR7aWR4fVwiIHN0eWxlPVwibWFyZ2luLXRvcDoxMnB4O1wiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2MtdG9waWMtcm93XCIgaWQ9XCJzYy10b3BpYy1yb3ctJHtpZHh9XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cInNjLXRvcGljLSR7aWR4fVwiPlRvcGljIHRhZzo8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInNjLXRvcGljLWlucHV0XCIgaWQ9XCJzYy10b3BpYy0ke2lkeH1cIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiZS5nLiBsZWFkZXJzaGlwLCBjcm9zcy1mdW5jdGlvbmFsLCBkZWFkbGluZS1tYW5hZ2VtZW50XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gX2ZtdExhYmVsKGZtdCkge1xuICByZXR1cm4geyBkaXJlY3Q6ICdEaXJlY3QvQ29uY2lzZSAoMTUwXHUyMDEzMjAwdyknLCBzdGFyOiAnU1RBUiAoMjUwXHUyMDEzMzUwdyknLCB0ZWNobmljYWw6ICdUZWNobmljYWwgRGV0YWlsICg0MDBcdTIwMTM1MDB3KScgfVtmbXRdIHx8IGZtdDtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEZvcm1hdCBzZWxlY3Rpb24gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIHNlbGVjdEZvcm1hdChpZHgsIGZtdCwgYnRuKSB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNzYy1mbXQtJHtpZHh9IC5zYy1mb3JtYXQtYnRuYCkuZm9yRWFjaChiID0+IGIuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpO1xuICBidG4uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gIGlmICghX3NjcmVlbmluZ1N0YXRlW2lkeF0pIF9zY3JlZW5pbmdTdGF0ZVtpZHhdID0ge307XG4gIF9zY3JlZW5pbmdTdGF0ZVtpZHhdLmZvcm1hdCA9IGZtdDtcbn1cblxuZnVuY3Rpb24gX2dldFNlbGVjdGVkRm9ybWF0KGlkeCkge1xuICBjb25zdCBhY3RpdmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjc2MtZm10LSR7aWR4fSAuc2MtZm9ybWF0LWJ0bi5hY3RpdmVgKTtcbiAgcmV0dXJuIGFjdGl2ZSA/IGFjdGl2ZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZm10JykgOiAnZGlyZWN0Jztcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFNlYXJjaCBmb3IgcHJpb3IgcmVzcG9uc2VzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBzZWFyY2hGb3JRdWVzdGlvbihxdWVzdGlvbiwgaWR4KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3NjcmVlbmluZy9zZWFyY2gnLCB7XG4gICAgICBtZXRob2Q6ICAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6ICAgIEpTT04uc3RyaW5naWZ5KHsgcXVlc3Rpb24gfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKCFkYXRhLm9rKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzYy1wcmlvci0ke2lkeH1gKS5pbm5lckhUTUwgPSAnJzsgcmV0dXJuOyB9XG5cbiAgICAvLyBSZW5kZXIgcHJpb3IgbWF0Y2hcbiAgICBjb25zdCBwcmlvckVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNjLXByaW9yLSR7aWR4fWApO1xuICAgIGlmIChkYXRhLnByaW9yKSB7XG4gICAgICBjb25zdCBwID0gZGF0YS5wcmlvcjtcbiAgICAgIHByaW9yRWwuaW5uZXJIVE1MID0gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwic2MtcHJpb3ItbWF0Y2hcIj5cbiAgICAgICAgICA8c3Ryb25nPlx1RDgzRFx1RENEQSBTaW1pbGFyIHByaW9yIHJlc3BvbnNlIGZvdW5kPC9zdHJvbmc+IFx1MjAxNCAke2VzY2FwZUh0bWwocC5jb21wYW55IHx8ICcnKX0gKCR7ZXNjYXBlSHRtbChwLmRhdGUgfHwgJycpfSk8YnI+XG4gICAgICAgICAgPGVtIHN0eWxlPVwiY29sb3I6Izc4MzUwZjtcIj5cIiR7ZXNjYXBlSHRtbCgocC5xdWVzdGlvbiB8fCAnJykuc3Vic3RyaW5nKDAsIDEyMCkpfVx1MjAyNlwiPC9lbT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDo2cHg7XCI+XG4gICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJmb250LXNpemU6MC44NWVtO1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJzYy11c2UtcHJpb3ItJHtpZHh9XCIgb25jaGFuZ2U9XCJ0b2dnbGVQcmlvclVzZSgke2lkeH0pXCI+IFVzZSBhcyBzdGFydGluZyBwb2ludFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbiAgICAgIGlmICghX3NjcmVlbmluZ1N0YXRlW2lkeF0pIF9zY3JlZW5pbmdTdGF0ZVtpZHhdID0ge307XG4gICAgICBfc2NyZWVuaW5nU3RhdGVbaWR4XS5wcmlvclJlc3BvbnNlID0gcC5yZXNwb25zZV90ZXh0IHx8ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmlvckVsLmlubmVySFRNTCA9ICcnO1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBleHBlcmllbmNlIGNhcmRzXG4gICAgY29uc3QgZXhwRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc2MtZXhwLSR7aWR4fWApO1xuICAgIGlmIChkYXRhLmV4cGVyaWVuY2VzICYmIGRhdGEuZXhwZXJpZW5jZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjYXJkcyA9IGRhdGEuZXhwZXJpZW5jZXMubWFwKGUgPT4gYFxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJzYy1leHAtY2FyZFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWlkeD1cIiR7ZS5pZHh9XCIgY2hlY2tlZCBvbmNoYW5nZT1cInVwZGF0ZUV4cFNlbGVjdGlvbigke2lkeH0pXCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6MTtcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+JHtlc2NhcGVIdG1sKGUudGl0bGUpfTwvc3Ryb25nPiBcdTAwQjcgJHtlc2NhcGVIdG1sKGUuY29tcGFueSl9XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNjLXNjb3JlLWJhZGdlXCI+JHtNYXRoLnJvdW5kKGUuc2NvcmUgKiAxMDApfSUgbWF0Y2g8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IzY0NzQ4YjttYXJnaW4tdG9wOjJweDtcIj4ke2VzY2FwZUh0bWwoZS5zdW1tYXJ5KX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9sYWJlbD5gKS5qb2luKCcnKTtcbiAgICAgIGV4cEVsLmlubmVySFRNTCA9IGA8cCBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7bWFyZ2luLWJvdHRvbTo2cHg7XCI+UmVsZXZhbnQgZXhwZXJpZW5jZTo8L3A+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYy1leHAtbGlzdFwiPiR7Y2FyZHN9PC9kaXY+YDtcbiAgICAgIGlmICghX3NjcmVlbmluZ1N0YXRlW2lkeF0pIF9zY3JlZW5pbmdTdGF0ZVtpZHhdID0ge307XG4gICAgICBfc2NyZWVuaW5nU3RhdGVbaWR4XS5leHBlcmllbmNlSW5kaWNlcyA9IGRhdGEuZXhwZXJpZW5jZXMubWFwKGUgPT4gZS5pZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBFbC5pbm5lckhUTUwgPSAnJztcbiAgICB9XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc2MtcHJpb3ItJHtpZHh9YCkuaW5uZXJIVE1MID0gJyc7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIFRvZ2dsZSBwcmlvciB1c2UgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIHRvZ2dsZVByaW9yVXNlKGlkeCkge1xuICBjb25zdCBjYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzYy11c2UtcHJpb3ItJHtpZHh9YCk7XG4gIGlmICghX3NjcmVlbmluZ1N0YXRlW2lkeF0pIF9zY3JlZW5pbmdTdGF0ZVtpZHhdID0ge307XG4gIF9zY3JlZW5pbmdTdGF0ZVtpZHhdLnVzZVByaW9yID0gY2I/LmNoZWNrZWQgPz8gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUV4cFNlbGVjdGlvbihpZHgpIHtcbiAgY29uc3QgYmxvY2sgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNjLWJsb2NrLSR7aWR4fWApO1xuICBjb25zdCBjaGVja2VkICAgPSBBcnJheS5mcm9tKGJsb2NrLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9Y2hlY2tib3hdW2RhdGEtaWR4XScpKVxuICAgIC5maWx0ZXIoY2IgPT4gY2IuY2hlY2tlZClcbiAgICAubWFwKGNiID0+IHBhcnNlSW50KGNiLmdldEF0dHJpYnV0ZSgnZGF0YS1pZHgnKSwgMTApKTtcbiAgaWYgKCFfc2NyZWVuaW5nU3RhdGVbaWR4XSkgX3NjcmVlbmluZ1N0YXRlW2lkeF0gPSB7fTtcbiAgX3NjcmVlbmluZ1N0YXRlW2lkeF0uZXhwZXJpZW5jZUluZGljZXMgPSBjaGVja2VkO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgR2VuZXJhdGUgc2NyZWVuaW5nIHJlc3BvbnNlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVNjcmVlbmluZ1Jlc3BvbnNlKGlkeCkge1xuICAvKiBkdWNrZmxvdzpcbiAgICogICBpZDogc2NyZWVuaW5nX3VpX2dlbmVyYXRlX2xpdmVcbiAgICogICBraW5kOiB1aVxuICAgKiAgIHRpbWVzdGFtcDogJzIwMjYtMDMtMjVUMjE6Mzk6NDhaJ1xuICAgKiAgIHN0YXR1czogbGl2ZVxuICAgKiAgIGhhbmRsZXM6XG4gICAqICAgLSB1aTpzY3JlZW5pbmcuZ2VuZXJhdGUtcmVzcG9uc2VcbiAgICogICBjYWxsczpcbiAgICogICAtIFBPU1QgL2FwaS9zY3JlZW5pbmcvZ2VuZXJhdGVcbiAgICogICByZWFkczpcbiAgICogICAtIGRvbTpzYy1xdWVzdGlvbi1ibG9jay5xdWVzdGlvblxuICAgKiAgIC0gd2luZG93Ol9zY3JlZW5pbmdTdGF0ZS5mb3JtYXRcbiAgICogICAtIHdpbmRvdzpfc2NyZWVuaW5nU3RhdGUucHJpb3JSZXNwb25zZVxuICAgKiAgIC0gd2luZG93Ol9zY3JlZW5pbmdTdGF0ZS5leHBlcmllbmNlSW5kaWNlc1xuICAgKiAgIHdyaXRlczpcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL3NjcmVlbmluZy9nZW5lcmF0ZS5xdWVzdGlvblxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvc2NyZWVuaW5nL2dlbmVyYXRlLmZvcm1hdFxuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvc2NyZWVuaW5nL2dlbmVyYXRlLmV4cGVyaWVuY2VfaW5kaWNlc1xuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvc2NyZWVuaW5nL2dlbmVyYXRlLnByaW9yX3Jlc3BvbnNlXG4gICAqICAgLSB3aW5kb3c6X3NjcmVlbmluZ1N0YXRlLnJlc3BvbnNlVGV4dFxuICAgKiAgIC0gd2luZG93Ol9zY3JlZW5pbmdTdGF0ZS5mb3JtYXRcbiAgICogICBub3RlczogR2VuZXJhdGVzIGEgc2luZ2xlIHNjcmVlbmluZyByZXNwb25zZSBmcm9tIHRoZSBzZWxlY3RlZCBmb3JtYXQsIHByaW9yLXJlc3BvbnNlIHNlZWQsIGFuZCBjaG9zZW4gZXhwZXJpZW5jZSBldmlkZW5jZSwgdGhlbiBzdG9yZXMgdGhlIGRyYWZ0IGJhY2sgaW50byBVSSBzdGF0ZSBmb3IgZWRpdGluZy5cbiAgICovXG4gIGNvbnN0IGJ0biAgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNjLWdlbi1idG4tJHtpZHh9YCk7XG4gIGlmIChidG4pIHsgYnRuLmRpc2FibGVkID0gdHJ1ZTsgYnRuLnRleHRDb250ZW50ID0gJ1x1MjNGMyBHZW5lcmF0aW5nXHUyMDI2JzsgfVxuXG4gIGNvbnN0IHF1ZXN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNjLWJsb2NrLSR7aWR4fWApPy5kYXRhc2V0LnF1ZXN0aW9uIHx8ICcnO1xuICBjb25zdCBzdGF0ZSAgICA9IF9zY3JlZW5pbmdTdGF0ZVtpZHhdIHx8IHt9O1xuICBjb25zdCBmbXQgICAgICA9IF9nZXRTZWxlY3RlZEZvcm1hdChpZHgpO1xuICBjb25zdCBwcmlvciAgICA9IChzdGF0ZS51c2VQcmlvciAmJiBzdGF0ZS5wcmlvclJlc3BvbnNlKSA/IHN0YXRlLnByaW9yUmVzcG9uc2UgOiAnJztcbiAgY29uc3QgZXhwSWR4ICAgPSBzdGF0ZS5leHBlcmllbmNlSW5kaWNlcyA/PyBbXTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9zY3JlZW5pbmcvZ2VuZXJhdGUnLCB7XG4gICAgICBtZXRob2Q6ICAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6ICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgIGZvcm1hdDogICAgICAgICAgICAgIGZtdCxcbiAgICAgICAgZXhwZXJpZW5jZV9pbmRpY2VzOiAgZXhwSWR4LFxuICAgICAgICBwcmlvcl9yZXNwb25zZTogICAgICBwcmlvcixcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmICghZGF0YS5vaykgeyBzaG93QWxlcnRNb2RhbCgnXHUyNzRDIEVycm9yJywgZGF0YS5lcnJvciB8fCAnR2VuZXJhdGlvbiBmYWlsZWQuJyk7IHJldHVybjsgfVxuXG4gICAgaWYgKCFfc2NyZWVuaW5nU3RhdGVbaWR4XSkgX3NjcmVlbmluZ1N0YXRlW2lkeF0gPSB7fTtcbiAgICBfc2NyZWVuaW5nU3RhdGVbaWR4XS5yZXNwb25zZVRleHQgPSBkYXRhLnRleHQ7XG4gICAgX3NjcmVlbmluZ1N0YXRlW2lkeF0uZm9ybWF0ICAgICAgID0gZm10O1xuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNjLXJlc3VsdC0ke2lkeH1gKS5pbm5lckhUTUwgPSBgXG4gICAgICA8dGV4dGFyZWEgY2xhc3M9XCJzYy1yZXNwb25zZS10ZXh0YXJlYVwiIGlkPVwic2MtdGV4dC0ke2lkeH1cIiByb3dzPVwiN1wiXG4gICAgICAgIG9uaW5wdXQ9XCJfc2NyZWVuaW5nU3RhdGVbJHtpZHh9XSA9IF9zY3JlZW5pbmdTdGF0ZVske2lkeH1dIHx8IHt9OyBfc2NyZWVuaW5nU3RhdGVbJHtpZHh9XS5yZXNwb25zZVRleHQgPSB0aGlzLnZhbHVlO1wiXG4gICAgICA+JHtlc2NhcGVIdG1sKGRhdGEudGV4dCl9PC90ZXh0YXJlYT5gO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzYy10b3BpYy1yb3ctJHtpZHh9YCkuc3R5bGUuZGlzcGxheSA9ICcnO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gY29udGFjdCBzZXJ2ZXIuJyk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGJ0bikgeyBidG4uZGlzYWJsZWQgPSBmYWxzZTsgYnRuLnRleHRDb250ZW50ID0gJ1x1MjcyOCBHZW5lcmF0ZSBEcmFmdCc7IH1cbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgU2F2ZSByZXNwb25zZXMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVTY3JlZW5pbmdSZXNwb25zZXMoKSB7XG4gIC8qIGR1Y2tmbG93OlxuICAgKiAgIGlkOiBzY3JlZW5pbmdfdWlfc2F2ZV9saXZlXG4gICAqICAga2luZDogdWlcbiAgICogICB0aW1lc3RhbXA6ICcyMDI2LTAzLTI1VDIxOjM5OjQ4WidcbiAgICogICBzdGF0dXM6IGxpdmVcbiAgICogICBoYW5kbGVzOlxuICAgKiAgIC0gdWk6c2NyZWVuaW5nLnNhdmUtYWxsXG4gICAqICAgY2FsbHM6XG4gICAqICAgLSBQT1NUIC9hcGkvc2NyZWVuaW5nL3NhdmVcbiAgICogICByZWFkczpcbiAgICogICAtIHdpbmRvdzpfc2NyZWVuaW5nU3RhdGVcbiAgICogICAtIGRvbTouc2MtcXVlc3Rpb24tYmxvY2tcbiAgICogICAtIGRvbTojc2MtdGV4dC0qLnZhbHVlXG4gICAqICAgLSBkb206I3NjLXRvcGljLSoudmFsdWVcbiAgICogICB3cml0ZXM6XG4gICAqICAgLSByZXF1ZXN0OlBPU1QgL2FwaS9zY3JlZW5pbmcvc2F2ZS5yZXNwb25zZXNcbiAgICogICBub3RlczogQWdncmVnYXRlcyB0aGUgZWRpdGVkIHNjcmVlbmluZyByZXNwb25zZXMgYW5kIHRvcGljIHRhZ3MgZnJvbSB0aGUgVUkgaW50byB0aGUgc3RydWN0dXJlZCBwYXlsb2FkIHRoYXQgYmFja2VuZCBzdGF0ZSwgbWV0YWRhdGEsIGFyY2hpdmUgRE9DWCwgYW5kIHRoZSByZXNwb25zZSBsaWJyYXJ5IGFsbCBwZXJzaXN0LlxuICAgKi9cbiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NjLXNhdmUtYnRuJyk7XG4gIGlmIChidG4pIHsgYnRuLmRpc2FibGVkID0gdHJ1ZTsgYnRuLnRleHRDb250ZW50ID0gJ1x1MjNGMyBTYXZpbmdcdTIwMjYnOyB9XG5cbiAgY29uc3QgcmVzcG9uc2VzID0gW107XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zYy1xdWVzdGlvbi1ibG9jaycpLmZvckVhY2goKGJsb2NrLCBpKSA9PiB7XG4gICAgY29uc3QgcUVsICAgID0gYmxvY2sucXVlcnlTZWxlY3RvcignLnNjLXF1ZXN0aW9uLWhlYWRlciBzcGFuOmxhc3QtY2hpbGQnKTtcbiAgICBjb25zdCB0ZXh0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc2MtdGV4dC0ke2l9YCk7XG4gICAgY29uc3QgdG9waWNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzYy10b3BpYy0ke2l9YCk7XG4gICAgaWYgKCF0ZXh0RWwpIHJldHVybjsgLy8gbm90IHlldCBnZW5lcmF0ZWQgXHUyMDE0IHNraXBcblxuICAgIGNvbnN0IHF1ZXN0aW9uICAgICA9IHFFbCA/IHFFbC50ZXh0Q29udGVudC50cmltKCkgOiAnJztcbiAgICBjb25zdCByZXNwb25zZVRleHQgPSAoX3NjcmVlbmluZ1N0YXRlW2ldPy5yZXNwb25zZVRleHQpIHx8IHRleHRFbC52YWx1ZSB8fCAnJztcbiAgICBjb25zdCBmbXQgICAgICAgICAgPSBfZ2V0U2VsZWN0ZWRGb3JtYXQoaSk7XG4gICAgY29uc3QgdG9waWNUYWcgICAgID0gdG9waWNFbCA/IHRvcGljRWwudmFsdWUudHJpbSgpIDogJyc7XG5cbiAgICByZXNwb25zZXMucHVzaCh7IHF1ZXN0aW9uLCB0b3BpY190YWc6IHRvcGljVGFnLCBmb3JtYXQ6IGZtdCwgcmVzcG9uc2VfdGV4dDogcmVzcG9uc2VUZXh0IH0pO1xuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlcy5sZW5ndGgpIHtcbiAgICBzaG93QWxlcnRNb2RhbCgnXHUyNkEwXHVGRTBGIE5vdGhpbmcgdG8gU2F2ZScsICdQbGVhc2UgZ2VuZXJhdGUgYXQgbGVhc3Qgb25lIHJlc3BvbnNlIGJlZm9yZSBzYXZpbmcuJyk7XG4gICAgaWYgKGJ0bikgeyBidG4uZGlzYWJsZWQgPSBmYWxzZTsgYnRuLnRleHRDb250ZW50ID0gJ1x1RDgzRFx1RENCRSBTYXZlIEFsbCBSZXNwb25zZXMnOyB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvc2NyZWVuaW5nL3NhdmUnLCB7XG4gICAgICBtZXRob2Q6ICAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6ICAgIEpTT04uc3RyaW5naWZ5KHsgcmVzcG9uc2VzIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBzaG93QWxlcnRNb2RhbCgnXHUyNzA1IFNhdmVkJywgYCR7ZGF0YS5jb3VudH0gcmVzcG9uc2Uke2RhdGEuY291bnQgIT09IDEgPyAncycgOiAnJ30gc2F2ZWQgYXMgPHN0cm9uZz4ke2VzY2FwZUh0bWwoZGF0YS5maWxlbmFtZSl9PC9zdHJvbmc+IGFuZCBhZGRlZCB0byB5b3VyIHJlc3BvbnNlIGxpYnJhcnkuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dBbGVydE1vZGFsKCdcdTI3NEMgU2F2ZSBGYWlsZWQnLCBkYXRhLmVycm9yIHx8ICdDb3VsZCBub3Qgc2F2ZSByZXNwb25zZXMuJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgc2hvd0FsZXJ0TW9kYWwoJ1x1Mjc0QyBFcnJvcicsICdGYWlsZWQgdG8gY29udGFjdCBzZXJ2ZXIuJyk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGJ0bikgeyBidG4uZGlzYWJsZWQgPSBmYWxzZTsgYnRuLnRleHRDb250ZW50ID0gJ1x1RDgzRFx1RENCRSBTYXZlIEFsbCBSZXNwb25zZXMnOyB9XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB7XG4gIF9zY3JlZW5pbmdTdGF0ZSxcbiAgX3NjcmVlbmluZ0lucHV0VGV4dCxcbiAgX3Jlc2V0U2NyZWVuaW5nSW5wdXRUZXh0LFxuICBwb3B1bGF0ZVNjcmVlbmluZ1RhYixcbiAgcGFyc2VTY3JlZW5pbmdRdWVzdGlvbnMsXG4gIHJlbmRlclF1ZXN0aW9uQmxvY2ssXG4gIF9mbXRMYWJlbCxcbiAgc2VsZWN0Rm9ybWF0LFxuICBfZ2V0U2VsZWN0ZWRGb3JtYXQsXG4gIHNlYXJjaEZvclF1ZXN0aW9uLFxuICB0b2dnbGVQcmlvclVzZSxcbiAgdXBkYXRlRXhwU2VsZWN0aW9uLFxuICBnZW5lcmF0ZVNjcmVlbmluZ1Jlc3BvbnNlLFxuICBzYXZlU2NyZWVuaW5nUmVzcG9uc2VzLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL2ZpbmFsaXNlLmpzXG4gKiBGaW5hbGlzZSAmIGFyY2hpdmUgdGFiOiBmaW5hbGlzZSBhcHBsaWNhdGlvbiwgaGFydmVzdCBjYW5kaWRhdGVzLFxuICogYXBwbHkgc2VsZWN0ZWQgdXBkYXRlcyB0byBtYXN0ZXIgQ1YgZGF0YS5cbiAqXG4gKiBEZXBlbmRlbmNpZXMgKHJlc29sdmVkIHRocm91Z2ggZ2xvYmFsVGhpcyBhdCBydW50aW1lKTpcbiAqICAgZXNjYXBlSHRtbCwgX3JlbmRlckNvbnNpc3RlbmN5UmVwb3J0XG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZm9ybWF0QXRzU2NvcmVTdW1tYXJ5IH0gZnJvbSAnLi9hdHMtcmVmaW5lbWVudC5qcyc7XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoJ2ZpbmFsaXNlJyk7XG5cbmZ1bmN0aW9uIF9mb3JtYXREdXJhdGlvbihzZWNzKSB7XG4gIGlmIChzZWNzID09IG51bGwgfHwgc2VjcyA8IDApIHJldHVybiBudWxsO1xuICBjb25zdCBoID0gTWF0aC5mbG9vcihzZWNzIC8gMzYwMCk7XG4gIGNvbnN0IG0gPSBNYXRoLmZsb29yKChzZWNzICUgMzYwMCkgLyA2MCk7XG4gIGNvbnN0IHMgPSBzZWNzICUgNjA7XG4gIGlmIChoID4gMCkgcmV0dXJuIGAke2h9aCAke219bWA7XG4gIGlmIChtID4gMCkgcmV0dXJuIGAke219bSAke3N9c2A7XG4gIHJldHVybiBgJHtzfXNgO1xufVxuXG5mdW5jdGlvbiBfcmVuZGVyRmluYWxpc2VBdHNJdGVtcyhzY29yZSwgYXRzS2V5d29yZHMpIHtcbiAgaWYgKCFzY29yZSB8fCB0eXBlb2Ygc2NvcmUub3ZlcmFsbCAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gYDxsaT5BVFMga2V5d29yZHMgdHJhY2tlZDogJHthdHNLZXl3b3Jkcy5sZW5ndGh9PC9saT5gO1xuICB9XG5cbiAgY29uc3Qgc3VtbWFyeSA9IGZvcm1hdEF0c1Njb3JlU3VtbWFyeShzY29yZSk7XG4gIGNvbnN0IGhhcmRTY29yZSA9IHR5cGVvZiBzY29yZS5oYXJkX3JlcXVpcmVtZW50X3Njb3JlID09PSAnbnVtYmVyJ1xuICAgID8gYCR7TWF0aC5yb3VuZChzY29yZS5oYXJkX3JlcXVpcmVtZW50X3Njb3JlKX0lYFxuICAgIDogJ24vYSc7XG4gIGNvbnN0IHNvZnRTY29yZSA9IHR5cGVvZiBzY29yZS5zb2Z0X3JlcXVpcmVtZW50X3Njb3JlID09PSAnbnVtYmVyJ1xuICAgID8gYCR7TWF0aC5yb3VuZChzY29yZS5zb2Z0X3JlcXVpcmVtZW50X3Njb3JlKX0lYFxuICAgIDogJ24vYSc7XG5cbiAgcmV0dXJuIFtcbiAgICBgPGxpPkFUUyBzY29yZTogPHN0cm9uZz4ke3N1bW1hcnkub3ZlcmFsbH0lPC9zdHJvbmc+IDxzcGFuIHN0eWxlPVwiY29sb3I6IzQ3NTU2OTtcIj4oaGFyZCAke2hhcmRTY29yZX0gXHUyMDIyIHNvZnQgJHtzb2Z0U2NvcmV9KTwvc3Bhbj48L2xpPmAsXG4gICAgYDxsaT5BVFMgY292ZXJhZ2U6ICR7ZXNjYXBlSHRtbChzdW1tYXJ5LmxpbmUpfTwvbGk+YCxcbiAgICBgPGxpPkFUUyBkZXRhaWw6ICR7ZXNjYXBlSHRtbChzdW1tYXJ5LmRldGFpbCl9PC9saT5gLFxuICBdLmpvaW4oJycpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgUG9wdWxhdGUgZmluYWxpc2UgdGFiIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBwb3B1bGF0ZUZpbmFsaXNlVGFiKCkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcblxuICAvLyBGZXRjaCBjdXJyZW50IHN0YXR1cyB0byBnZXQgZ2VuZXJhdGVkIGZpbGVzIGFuZCBqb2IgYW5hbHlzaXMgZm9yIGNvbnNpc3RlbmN5IGNoZWNrXG4gIGxldCBnZW5lcmF0ZWQgID0gbnVsbDtcbiAgbGV0IHN0YXR1c0RhdGEgPSBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9zdGF0dXMnKTtcbiAgICBzdGF0dXNEYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBnZW5lcmF0ZWQgID0gc3RhdHVzRGF0YS5nZW5lcmF0ZWRfZmlsZXMgfHwgbnVsbDtcbiAgfSBjYXRjaCAoZXJyKSB7IGxvZy53YXJuKCdGYWlsZWQgdG8gZmV0Y2ggc3RhdHVzIGZvciBmaW5hbGlzZSB0YWI6JywgZXJyKTsgfVxuXG4gIGlmICghZ2VuZXJhdGVkIHx8ICFnZW5lcmF0ZWQub3V0cHV0X2Rpcikge1xuICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gYFxuICAgICAgPGgxPlx1MjcwNSBGaW5hbGlzZSBBcHBsaWNhdGlvbjwvaDE+XG4gICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIj5cdUQ4M0RcdURDQzI8L2Rpdj5cbiAgICAgICAgPGgzPk5vIENWIEdlbmVyYXRlZCBZZXQ8L2gzPlxuICAgICAgICA8cD5QbGVhc2UgZ2VuZXJhdGUgYSBDViBmaXJzdCBiZWZvcmUgZmluYWxpc2luZy48L3A+XG4gICAgICA8L2Rpdj5gO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZpbGVzID0gZ2VuZXJhdGVkLmZpbGVzIHx8IFtdO1xuXG4gIGxldCBodG1sID0gYFxuICAgIDxoMT5cdTI3MDUgRmluYWxpc2UgQXBwbGljYXRpb248L2gxPlxuICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjI0cHg7XCI+XG4gICAgICBBcmNoaXZlIHRoaXMgYXBwbGljYXRpb24gdG8geW91ciBDViBoaXN0b3J5LCB1cGRhdGUgdGhlIHJlc3BvbnNlIGxpYnJhcnksIGFuZCBvcHRpb25hbGx5XG4gICAgICB3cml0ZSBhbnkgaW1wcm92ZW1lbnRzIGJhY2sgdG8gTWFzdGVyIENWIERhdGEuXG4gICAgPC9wPlxuXG4gICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2YwZmRmNDtib3JkZXI6MXB4IHNvbGlkICNiYmY3ZDA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MjRweDtcIj5cbiAgICAgIDxoMyBzdHlsZT1cIm1hcmdpbjowIDAgMTBweDtcIj5cdUQ4M0RcdURDQzIgR2VuZXJhdGVkIEZpbGVzPC9oMz5cbiAgICAgIDx1bCBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmctbGVmdDoyMHB4O2xpbmUtaGVpZ2h0OjEuODtcIj5cbiAgICAgICAgJHtmaWxlcy5tYXAoZiA9PiBgPGxpPjxjb2RlIHN0eWxlPVwiZm9udC1zaXplOjAuOWVtO1wiPiR7ZXNjYXBlSHRtbChmKX08L2NvZGU+PC9saT5gKS5qb2luKCcnKSB8fCAnPGxpPihub25lKTwvbGk+J31cbiAgICAgIDwvdWw+XG4gICAgICA8cCBzdHlsZT1cIm1hcmdpbjo4cHggMCAwO2ZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzE2NjUzNDtcIj5PdXRwdXQgZGlyOiA8Y29kZT4ke2VzY2FwZUh0bWwoZ2VuZXJhdGVkLm91dHB1dF9kaXIpfTwvY29kZT48L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGlkPVwicmVhZGluZXNzLWNoZWNrbGlzdFwiPjwvZGl2PlxuICAgIDxkaXYgaWQ9XCJjb25zaXN0ZW5jeS1yZXBvcnRcIj48L2Rpdj5cbiAgICA8ZGl2IGlkPVwicmV3cml0ZS1hdWRpdC1sb2dcIj48L2Rpdj5cblxuICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MjBweDttYXJnaW4tYm90dG9tOjI0cHg7XCI+XG4gICAgICA8aDMgc3R5bGU9XCJtYXJnaW46MCAwIDE2cHg7XCI+XHVEODNEXHVEQ0NCIEFwcGxpY2F0aW9uIFN0YXR1czwvaDM+XG5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE2cHg7XCI+XG4gICAgICAgIDxsYWJlbCBzdHlsZT1cImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NnB4O1wiIGZvcj1cImZpbmFsaXNlLXN0YXR1c1wiPlN0YXR1czwvbGFiZWw+XG4gICAgICAgIDxzZWxlY3QgaWQ9XCJmaW5hbGlzZS1zdGF0dXNcIiBzdHlsZT1cIndpZHRoOjIyMHB4O3BhZGRpbmc6OHB4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjY2JkNWUxO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZTowLjk1ZW07XCI+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRyYWZ0XCI+RHJhZnQgXHUyMDE0IG5vdCB5ZXQgc2VudDwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZWFkeVwiIHNlbGVjdGVkPlJlYWR5IHRvIHNlbmQ8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2VudFwiPlNlbnQ8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaW50ZXJ2aWV3XCI+SW50ZXJ2aWV3IHNjaGVkdWxlZDwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZWplY3RlZFwiPlJlamVjdGVkPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFjY2VwdGVkXCI+QWNjZXB0ZWQ8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MjBweDtcIj5cbiAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo2cHg7XCIgZm9yPVwiZmluYWxpc2Utbm90ZXNcIj5Ob3RlczwvbGFiZWw+XG4gICAgICAgIDx0ZXh0YXJlYSBpZD1cImZpbmFsaXNlLW5vdGVzXCIgcm93cz1cIjRcIiBtYXhsZW5ndGg9XCIyMDAwXCJcbiAgICAgICAgICBvbmlucHV0PVwiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbmFsaXNlLW5vdGVzLWNvdW50ZXInKS50ZXh0Q29udGVudD10aGlzLnZhbHVlLmxlbmd0aCsnIC8gMjAwMCc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbmFsaXNlLW5vdGVzLWNvdW50ZXInKS5zdHlsZS5jb2xvcj10aGlzLnZhbHVlLmxlbmd0aD4xODAwPycjZGMyNjI2Jzp0aGlzLnZhbHVlLmxlbmd0aD4xNjAwPycjZDk3NzA2JzonIzZiNzI4MCdcIlxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjY2JkNWUxO2JvcmRlci1yYWRpdXM6NnB4O1xuICAgICAgICAgICAgICAgICBmb250LXNpemU6MC45MmVtO3Jlc2l6ZTp2ZXJ0aWNhbDtib3gtc2l6aW5nOmJvcmRlci1ib3g7XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlJlY3J1aXRlciBuYW1lLCBzYWxhcnkgaW5mbywgZm9sbG93LXVwIGRhdGUsIGludGVydmlldyBub3Rlc1x1MjAyNlwiPjwvdGV4dGFyZWE+XG4gICAgICAgIDxkaXYgaWQ9XCJmaW5hbGlzZS1ub3Rlcy1jb3VudGVyXCIgYXJpYS1saXZlPVwicG9saXRlXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOnJpZ2h0O2ZvbnQtc2l6ZTowLjhlbTtjb2xvcjojNmI3MjgwO21hcmdpbi10b3A6MnB4O1wiPjAgLyAyMDAwPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGJ1dHRvbiBpZD1cImZpbmFsaXNlLWJ0blwiIG9uY2xpY2s9XCJmaW5hbGlzZUFwcGxpY2F0aW9uKClcIlxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6IzA1OTY2OTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NnB4O1xuICAgICAgICAgICAgICAgcGFkZGluZzoxMHB4IDI0cHg7Zm9udC1zaXplOjFlbTtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7XCI+XG4gICAgICAgIFx1MjcwNSBGaW5hbGlzZSAmYW1wOyBBcmNoaXZlXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgaWQ9XCJmaW5hbGlzZS1yZXN1bHRcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj48L2Rpdj5cbiAgICA8ZGl2IGlkPVwiaGFydmVzdC1zZWN0aW9uXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9kaXY+XG4gIGA7XG5cbiAgY29udGVudC5pbm5lckhUTUwgPSBodG1sO1xuICBfcmVuZGVyUmVhZGluZXNzQ2hlY2tsaXN0KGZpbGVzLCBzdGF0dXNEYXRhKTtcbiAgaWYgKHN0YXR1c0RhdGEpIF9yZW5kZXJDb25zaXN0ZW5jeVJlcG9ydChzdGF0dXNEYXRhKTtcbiAgX3JlbmRlclJld3JpdGVBdWRpdExvZygpO1xuICBfcmVzdG9yZUZpbmFsaXNlTWV0YSgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVzdG9yZUZpbmFsaXNlTWV0YSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2FwaS9maW5hbGlzZS1tZXRhJyk7XG4gICAgaWYgKCFyZXMub2spIHJldHVybjtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBjb25zdCBzdGF0dXNFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5hbGlzZS1zdGF0dXMnKTtcbiAgICBjb25zdCBub3Rlc0VsICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5hbGlzZS1ub3RlcycpO1xuICAgIGlmIChzdGF0dXNFbCAmJiBkYXRhLmFwcGxpY2F0aW9uX3N0YXR1cykgc3RhdHVzRWwudmFsdWUgPSBkYXRhLmFwcGxpY2F0aW9uX3N0YXR1cztcbiAgICBpZiAobm90ZXNFbCAgJiYgZGF0YS5ub3Rlcykge1xuICAgICAgbm90ZXNFbC52YWx1ZSA9IGRhdGEubm90ZXM7XG4gICAgICBjb25zdCBjb3VudGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbmFsaXNlLW5vdGVzLWNvdW50ZXInKTtcbiAgICAgIGlmIChjb3VudGVyKSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IGRhdGEubm90ZXMubGVuZ3RoO1xuICAgICAgICBjb3VudGVyLnRleHRDb250ZW50ID0gYCR7bGVufSAvIDIwMDBgO1xuICAgICAgICBjb3VudGVyLnN0eWxlLmNvbG9yID0gbGVuID4gMTgwMCA/ICcjZGMyNjI2JyA6IGxlbiA+IDE2MDAgPyAnI2Q5NzcwNicgOiAnIzZiNzI4MCc7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChfKSB7fVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgU3VibWlzc2lvbiByZWFkaW5lc3MgY2hlY2tsaXN0IFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBfcmVuZGVyUmVhZGluZXNzQ2hlY2tsaXN0KGZpbGVzLCBzdGF0dXNEYXRhKSB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlYWRpbmVzcy1jaGVja2xpc3QnKTtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuXG4gIGNvbnN0IGZpbGVTZXQgPSBuZXcgU2V0KChmaWxlcyB8fCBbXSkubWFwKGYgPT4gKGYgfHwgJycpLnRvTG93ZXJDYXNlKCkpKTtcbiAgY29uc3QgaGFzUGRmICA9IFsuLi5maWxlU2V0XS5zb21lKGYgPT4gZi5lbmRzV2l0aCgnLnBkZicpICYmICFmLmluY2x1ZGVzKCdjb3ZlcmxldHRlcicpICYmICFmLmluY2x1ZGVzKCdjb3Zlcl9sZXR0ZXInKSk7XG4gIGNvbnN0IGhhc0RvY3ggPSBbLi4uZmlsZVNldF0uc29tZShmID0+IGYuZW5kc1dpdGgoJy5kb2N4JykgJiYgIWYuaW5jbHVkZXMoJ2NvdmVybGV0dGVyJykgJiYgIWYuaW5jbHVkZXMoJ2NvdmVyX2xldHRlcicpICYmICFmLmluY2x1ZGVzKCdzY3JlZW5pbmcnKSk7XG4gIGNvbnN0IGhhc0h0bWwgPSBbLi4uZmlsZVNldF0uc29tZShmID0+IGYuZW5kc1dpdGgoJy5odG1sJykpO1xuICBjb25zdCBoYXNDbCAgID0gWy4uLmZpbGVTZXRdLnNvbWUoZiA9PiBmLmluY2x1ZGVzKCdjb3ZlcmxldHRlcicpIHx8IGYuaW5jbHVkZXMoJ2NvdmVyX2xldHRlcicpKTtcbiAgY29uc3QgaGFzU2NyICA9IFsuLi5maWxlU2V0XS5zb21lKGYgPT4gZi5pbmNsdWRlcygnc2NyZWVuaW5nJykpO1xuXG4gIGNvbnN0IGF0c0NoZWNrcyAgPSBzdGF0dXNEYXRhPy5hdHNfY2hlY2tzIHx8IFtdO1xuICBjb25zdCBhdHNGYWlscyAgID0gKGF0c0NoZWNrcykuZmlsdGVyKGMgPT4gYy5zdGF0dXMgPT09ICdmYWlsJyB8fCBjLnN0YXR1cyA9PT0gJ2Vycm9yJykubGVuZ3RoO1xuICBjb25zdCBhdHNTY2FubmVkID0gYXRzQ2hlY2tzLmxlbmd0aCA+IDA7XG5cbiAgY29uc3QgbGF5b3V0RnJlc2ggPSBzdGF0dXNEYXRhPy5sYXlvdXRfZnJlc2huZXNzICE9PSAnc3RhbGUnO1xuXG4gIGNvbnN0IGl0ZW1zID0gW1xuICAgIHsgb2s6IGhhc1BkZiwgICBsYWJlbDogJ0NWIFBERiBnZW5lcmF0ZWQnLCAgICAgICAgd2FybjogZmFsc2UgfSxcbiAgICB7IG9rOiBoYXNEb2N4LCAgbGFiZWw6ICdDViBET0NYIGdlbmVyYXRlZCcsICAgICAgIHdhcm46IGZhbHNlIH0sXG4gICAgeyBvazogaGFzSHRtbCwgIGxhYmVsOiAnQ1YgSFRNTCBnZW5lcmF0ZWQnLCAgICAgICB3YXJuOiBmYWxzZSB9LFxuICAgIHsgb2s6IGhhc0NsLCAgICBsYWJlbDogJ0NvdmVyIGxldHRlciBnZW5lcmF0ZWQnLCAgd2FybjogdHJ1ZSAgfSxcbiAgICB7IG9rOiBoYXNTY3IsICAgbGFiZWw6ICdTY3JlZW5pbmcgUSZBIGdlbmVyYXRlZCcsIHdhcm46IHRydWUgIH0sXG4gICAgeyBvazogYXRzU2Nhbm5lZCAmJiBhdHNGYWlscyA9PT0gMCwgd2FybjogdHJ1ZSxcbiAgICAgIGxhYmVsOiBhdHNTY2FubmVkXG4gICAgICAgID8gKGF0c0ZhaWxzID4gMCA/IGBBVFMgdmFsaWRhdGlvbiBcdTIwMTQgJHthdHNGYWlsc30gaXNzdWUke2F0c0ZhaWxzICE9PSAxID8gJ3MnIDogJyd9IGZvdW5kYCA6ICdBVFMgdmFsaWRhdGlvbiBwYXNzZWQnKVxuICAgICAgICA6ICdBVFMgdmFsaWRhdGlvbiBub3QgeWV0IHJ1bicgfSxcbiAgICB7IG9rOiBsYXlvdXRGcmVzaCwgd2FybjogdHJ1ZSwgbGFiZWw6ICdMYXlvdXQgaXMgY3VycmVudCAobm90IHN0YWxlKScgfSxcbiAgXTtcblxuICBjb25zdCByb3dzID0gaXRlbXMubWFwKCh7IG9rLCBsYWJlbCwgd2FybiB9KSA9PiB7XG4gICAgY29uc3QgaWNvbiAgPSBvayA/ICdcdTI3MDUnIDogKHdhcm4gPyAnXHUyNkEwJyA6ICdcdTI3NEMnKTtcbiAgICBjb25zdCBjb2xvciA9IG9rID8gJyMwNjVmNDYnIDogKHdhcm4gPyAnIzkyNDAwZScgOiAnIzk5MWIxYicpO1xuICAgIGNvbnN0IGJnICAgID0gb2sgPyAnI2YwZmRmNCcgOiAod2FybiA/ICcjZmZmYmViJyA6ICcjZmVmMmYyJyk7XG4gICAgcmV0dXJuIGA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtwYWRkaW5nOjhweCAxMnB4O2JhY2tncm91bmQ6JHtiZ307Ym9yZGVyLXJhZGl1czo2cHg7bWFyZ2luLWJvdHRvbTo2cHg7XCI+XG4gICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImZvbnQtc2l6ZToxLjFlbTtcIj4ke2ljb259PC9zcGFuPlxuICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjoke2NvbG9yfTtmb250LXNpemU6MC45MmVtO1wiPiR7ZXNjYXBlSHRtbChsYWJlbCl9PC9zcGFuPlxuICAgIDwvZGl2PmA7XG4gIH0pLmpvaW4oJycpO1xuXG4gIGNvbnN0IGFsbFJlcXVpcmVkID0gaGFzUGRmICYmIGhhc0RvY3ggJiYgaGFzSHRtbDtcbiAgY29uc3QgaGVhZGVyQ29sb3IgPSBhbGxSZXF1aXJlZCA/ICcjMDY1ZjQ2JyA6ICcjOTI0MDBlJztcbiAgZWwuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTJlOGYwO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTZweCAyMHB4O21hcmdpbi1ib3R0b206MjRweDtcIj5cbiAgICAgIDxoMyBzdHlsZT1cIm1hcmdpbjowIDAgMTJweDtjb2xvcjoke2hlYWRlckNvbG9yfTtcIj5cdUQ4M0RcdURDQ0IgU3VibWlzc2lvbiBSZWFkaW5lc3M8L2gzPlxuICAgICAgJHtyb3dzfVxuICAgICAgPHAgc3R5bGU9XCJtYXJnaW46MTBweCAwIDA7Zm9udC1zaXplOjAuODJlbTtjb2xvcjojNjQ3NDhiO1wiPlxuICAgICAgICBcdTI2QTAgaXRlbXMgYXJlIG9wdGlvbmFsIFx1MjAxNCB0aGV5IHdhcm4gYnV0IGRvIG5vdCBibG9jayBhcmNoaXZpbmcuXG4gICAgICAgIFx1Mjc0QyBpdGVtcyBtdXN0IGJlIHJlc29sdmVkIGJlZm9yZSBzdWJtaXR0aW5nLlxuICAgICAgPC9wPlxuICAgIDwvZGl2PmA7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZXdyaXRlIGF1ZGl0IGxvZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gX3JlbmRlclJld3JpdGVBdWRpdExvZygpIHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmV3cml0ZS1hdWRpdC1sb2cnKTtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9yZXdyaXRlcycpO1xuICAgIGlmICghcmVzLm9rKSByZXR1cm47XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgY29uc3QgYXVkaXQgPSBkYXRhLnJld3JpdGVfYXVkaXQgfHwgW107XG4gICAgaWYgKGF1ZGl0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHJvd3MgPSBhdWRpdC5tYXAoZW50cnkgPT4ge1xuICAgICAgY29uc3Qgb3V0Y29tZSA9IGVudHJ5Lm91dGNvbWUgfHwgZW50cnkuZGVjaXNpb24gfHwgJ1x1MjAxNCc7XG4gICAgICBjb25zdCBpY29uID0gb3V0Y29tZSA9PT0gJ2FjY2VwdGVkJyA/ICdcdTI3MDUnIDogb3V0Y29tZSA9PT0gJ2VkaXRlZCcgPyAnXHUyNzBGXHVGRTBGJyA6IG91dGNvbWUgPT09ICdyZWplY3RlZCcgPyAnXHUyNzRDJyA6ICdcdTIwMTQnO1xuICAgICAgY29uc3Qgb3JpZ2luYWwgID0gZXNjYXBlSHRtbCgoZW50cnkub3JpZ2luYWxfdGV4dCB8fCBlbnRyeS5vcmlnaW5hbCB8fCAnJykuc2xpY2UoMCwgMTIwKSk7XG4gICAgICBjb25zdCBmaW5hbCAgICAgPSBlc2NhcGVIdG1sKChlbnRyeS5maW5hbF90ZXh0IHx8IGVudHJ5LnJld3JpdHRlbiB8fCBlbnRyeS5zdWdnZXN0ZWQgfHwgJycpLnNsaWNlKDAsIDEyMCkpO1xuICAgICAgY29uc3QgZmllbGQgICAgID0gZXNjYXBlSHRtbChlbnRyeS5maWVsZCB8fCBlbnRyeS50eXBlIHx8ICdcdTIwMTQnKTtcbiAgICAgIHJldHVybiBgPHRyPlxuICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7Zm9udC1zaXplOjAuOGVtO2NvbG9yOiM2YjcyODA7XCI+JHtmaWVsZH08L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7Zm9udC1zaXplOjAuOGVtO2NvbG9yOiMzNzQxNTE7XCI+JHtvcmlnaW5hbH0ke29yaWdpbmFsLmxlbmd0aCA9PT0gMTIwID8gJ1x1MjAyNicgOiAnJ308L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7Zm9udC1zaXplOjAuOGVtO2NvbG9yOiMzNzQxNTE7XCI+JHtmaW5hbH0ke2ZpbmFsLmxlbmd0aCA9PT0gMTIwID8gJ1x1MjAyNicgOiAnJ308L3RkPlxuICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjZweCA4cHg7Zm9udC1zaXplOjAuOGVtO3RleHQtYWxpZ246Y2VudGVyO1wiPiR7aWNvbn0gJHtlc2NhcGVIdG1sKG91dGNvbWUpfTwvdGQ+XG4gICAgICA8L3RyPmA7XG4gICAgfSkuam9pbignJyk7XG4gICAgZWwuaW5uZXJIVE1MID0gYFxuICAgICAgPGRldGFpbHMgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjI0cHg7XCI+XG4gICAgICAgIDxzdW1tYXJ5IHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZTowLjk1ZW07cGFkZGluZzoxMHB4IDA7Y29sb3I6IzM3NDE1MTt1c2VyLXNlbGVjdDpub25lO1wiPlxuICAgICAgICAgIFx1RDgzRFx1RENDQiBSZXdyaXRlIGF1ZGl0IGxvZyAoJHthdWRpdC5sZW5ndGh9IGRlY2lzaW9uJHthdWRpdC5sZW5ndGggIT09IDEgPyAncycgOiAnJ30pXG4gICAgICAgIDwvc3VtbWFyeT5cbiAgICAgICAgPGRpdiBzdHlsZT1cIm92ZXJmbG93LXg6YXV0bzttYXJnaW4tdG9wOjEwcHg7XCI+XG4gICAgICAgICAgPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Zm9udC1zaXplOjAuODVlbTtcIj5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgPHRyIHN0eWxlPVwiYmFja2dyb3VuZDojZjhmYWZjO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlMmU4ZjA7XCI+XG4gICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwicGFkZGluZzo4cHg7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiMzNzQxNTE7Zm9udC13ZWlnaHQ6NjAwO1wiPkZpZWxkPC90aD5cbiAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJwYWRkaW5nOjhweDt0ZXh0LWFsaWduOmxlZnQ7Y29sb3I6IzM3NDE1MTtmb250LXdlaWdodDo2MDA7XCI+T3JpZ2luYWw8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cInBhZGRpbmc6OHB4O3RleHQtYWxpZ246bGVmdDtjb2xvcjojMzc0MTUxO2ZvbnQtd2VpZ2h0OjYwMDtcIj5GaW5hbDwvdGg+XG4gICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwicGFkZGluZzo4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzM3NDE1MTtmb250LXdlaWdodDo2MDA7XCI+T3V0Y29tZTwvdGg+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgPHRib2R5PiR7cm93c308L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kZXRhaWxzPmA7XG4gIH0gY2F0Y2ggeyAvKiBub24tZmF0YWwgKi8gfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgRmluYWxpc2UgYXBwbGljYXRpb24gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmFsaXNlQXBwbGljYXRpb24oKSB7XG4gIC8qIGR1Y2tmbG93OlxuICAgKiAgIGlkOiBmaW5hbGlzZV91aV9zdWJtaXRfbGl2ZVxuICAgKiAgIGtpbmQ6IHVpXG4gICAqICAgdGltZXN0YW1wOiAnMjAyNi0wMy0yNVQyMTozOTo0OFonXG4gICAqICAgc3RhdHVzOiBsaXZlXG4gICAqICAgaGFuZGxlczpcbiAgICogICAtIHVpOmZpbmFsaXNlLnN1Ym1pdFxuICAgKiAgIGNhbGxzOlxuICAgKiAgIC0gUE9TVCAvYXBpL2ZpbmFsaXNlXG4gICAqICAgcmVhZHM6XG4gICAqICAgLSBkb206I2ZpbmFsaXNlLXN0YXR1cy52YWx1ZVxuICAgKiAgIC0gZG9tOiNmaW5hbGlzZS1ub3Rlcy52YWx1ZVxuICAgKiAgIHdyaXRlczpcbiAgICogICAtIHJlcXVlc3Q6UE9TVCAvYXBpL2ZpbmFsaXNlLnN0YXR1c1xuICAgKiAgIC0gcmVxdWVzdDpQT1NUIC9hcGkvZmluYWxpc2Uubm90ZXNcbiAgICogICAtIGRvbTojZmluYWxpc2UtcmVzdWx0XG4gICAqICAgbm90ZXM6IFN1Ym1pdHMgZmluYWwgYXBwbGljYXRpb24gc3RhdHVzIGFuZCBub3RlcyBzbyBiYWNrZW5kIG1ldGFkYXRhLCBhcmNoaXZlIHN0YXRlLCBhbmQgb3B0aW9uYWwgZ2l0IGZpbmFsaXphdGlvbiBjYW4gYmUgd3JpdHRlbiBmcm9tIHRoZSBjdXJyZW50IHNlc3Npb24uXG4gICAqL1xuICBjb25zdCBidG4gICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluYWxpc2UtYnRuJyk7XG4gIGNvbnN0IHJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5hbGlzZS1yZXN1bHQnKTtcbiAgY29uc3Qgc3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbmFsaXNlLXN0YXR1cycpLnZhbHVlO1xuICBjb25zdCBub3RlcyAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluYWxpc2Utbm90ZXMnKS52YWx1ZTtcblxuICBidG4uZGlzYWJsZWQgICAgPSB0cnVlO1xuICBidG4udGV4dENvbnRlbnQgPSAnXHUyM0YzIEZpbmFsaXNpbmdcdTIwMjYnO1xuICByZXN1bHQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVzdWx0LmlubmVySFRNTCAgICAgPSAnJztcblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9maW5hbGlzZScsIHtcbiAgICAgIG1ldGhvZDogICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogICAgSlNPTi5zdHJpbmdpZnkoeyBzdGF0dXMsIG5vdGVzIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgaWYgKCFyZXMub2sgfHwgIWRhdGEub2spIHtcbiAgICAgIHJlc3VsdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIHJlc3VsdC5pbm5lckhUTUwgPSBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZTJlMjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czo4cHg7XG4gICAgICAgIHBhZGRpbmc6MTRweCAxOHB4O2NvbG9yOiM5OTFiMWI7XCI+XG4gICAgICAgIDxzdHJvbmc+XHUyNzRDIEVycm9yOjwvc3Ryb25nPiAke2VzY2FwZUh0bWwoZGF0YS5lcnJvciB8fCAnRmluYWxpc2UgZmFpbGVkJyl9XG4gICAgICA8L2Rpdj5gO1xuICAgICAgYnRuLmRpc2FibGVkICAgID0gZmFsc2U7XG4gICAgICBidG4udGV4dENvbnRlbnQgPSAnXHUyNzA1IEZpbmFsaXNlICYgQXJjaGl2ZSc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3VtbWFyeSA9IGRhdGEuc3VtbWFyeSB8fCB7fTtcbiAgICBjb25zdCBoYXNoICAgID0gZGF0YS5jb21taXRfaGFzaCA/IGA8Y29kZSBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07XCI+JHtlc2NhcGVIdG1sKGRhdGEuY29tbWl0X2hhc2gpfTwvY29kZT5gIDogJyhubyBjb21taXQpJztcbiAgICBjb25zdCBnaXRXYXJuID0gZGF0YS5naXRfZXJyb3JcbiAgICAgID8gYDxwIHN0eWxlPVwiY29sb3I6I2Q5NzcwNjtmb250LXNpemU6MC44N2VtO21hcmdpbi10b3A6OHB4O1wiPlx1MjZBMCBHaXQ6ICR7ZXNjYXBlSHRtbChkYXRhLmdpdF9lcnJvcil9PC9wPmBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgYXBwcm92ZWRDb3VudCA9IHN1bW1hcnkuYXBwcm92ZWRfcmV3cml0ZXMgPz8gMDtcbiAgICBjb25zdCBhdHNLZXl3b3JkcyAgID0gc3VtbWFyeS5hdHNfa2V5d29yZHMgfHwgW107XG4gICAgY29uc3QgYXRzU2NvcmUgICAgICA9IHN1bW1hcnkuYXRzX3Njb3JlIHx8IG51bGw7XG4gICAgY29uc3QgZHVyYXRpb25TZWNzICA9IHN1bW1hcnkuc2Vzc2lvbl9kdXJhdGlvbl9zZWNzO1xuICAgIGNvbnN0IGR1cmF0aW9uU3RyICAgPSBkdXJhdGlvblNlY3MgIT0gbnVsbCA/IF9mb3JtYXREdXJhdGlvbihkdXJhdGlvblNlY3MpIDogbnVsbDtcblxuICAgIHJlc3VsdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICByZXN1bHQuaW5uZXJIVE1MID0gYFxuICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2YwZmRmNDtib3JkZXI6MXB4IHNvbGlkICM4NmVmYWM7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNnB4IDIwcHg7bWFyZ2luLWJvdHRvbToyMHB4O1wiPlxuICAgICAgICA8c3Ryb25nPlx1MjcwNSBBcHBsaWNhdGlvbiBhcmNoaXZlZCE8L3N0cm9uZz5cbiAgICAgICAgPHVsIHN0eWxlPVwibWFyZ2luOjhweCAwIDA7cGFkZGluZy1sZWZ0OjIwcHg7bGluZS1oZWlnaHQ6MS44O2ZvbnQtc2l6ZTowLjkyZW07XCI+XG4gICAgICAgICAgPGxpPlN0YXR1czogPHN0cm9uZz4ke2VzY2FwZUh0bWwoc3RhdHVzKX08L3N0cm9uZz48L2xpPlxuICAgICAgICAgIDxsaT5BcHByb3ZlZCByZXdyaXRlczogJHthcHByb3ZlZENvdW50fTwvbGk+XG4gICAgICAgICAgJHtfcmVuZGVyRmluYWxpc2VBdHNJdGVtcyhhdHNTY29yZSwgYXRzS2V5d29yZHMpfVxuICAgICAgICAgICR7ZHVyYXRpb25TdHIgPyBgPGxpPlNlc3Npb24gZHVyYXRpb246ICR7ZXNjYXBlSHRtbChkdXJhdGlvblN0cil9PC9saT5gIDogJyd9XG4gICAgICAgICAgPGxpPkdpdCBjb21taXQ6ICR7aGFzaH08L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgICAke2dpdFdhcm59XG4gICAgICA8L2Rpdj5gO1xuXG4gICAgYnRuLnRleHRDb250ZW50ID0gJ1x1MjcwNSBBcmNoaXZlZCc7XG5cbiAgICAvLyBTaG93IGhhcnZlc3Qgc2VjdGlvblxuICAgIGF3YWl0IHNob3dIYXJ2ZXN0U2VjdGlvbigpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXN1bHQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgcmVzdWx0LmlubmVySFRNTCA9IGA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmVlMmUyO2JvcmRlcjoxcHggc29saWQgI2ZjYTVhNTtib3JkZXItcmFkaXVzOjhweDtcbiAgICAgIHBhZGRpbmc6MTRweCAxOHB4O2NvbG9yOiM5OTFiMWI7XCI+XG4gICAgICA8c3Ryb25nPlx1Mjc0QyBOZXR3b3JrIGVycm9yOjwvc3Ryb25nPiAke2VzY2FwZUh0bWwoZXJyLm1lc3NhZ2UpfVxuICAgIDwvZGl2PmA7XG4gICAgYnRuLmRpc2FibGVkICAgID0gZmFsc2U7XG4gICAgYnRuLnRleHRDb250ZW50ID0gJ1x1MjcwNSBGaW5hbGlzZSAmIEFyY2hpdmUnO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBTaG93IGhhcnZlc3Qgc2VjdGlvbiBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gc2hvd0hhcnZlc3RTZWN0aW9uKCkge1xuICBjb25zdCBzZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hhcnZlc3Qtc2VjdGlvbicpO1xuICBzZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICBzZWN0aW9uLmlubmVySFRNTCA9IGBcbiAgICA8aDIgc3R5bGU9XCJtYXJnaW4tdG9wOjA7XCI+XHVEODNEXHVEQ0U1IFVwZGF0ZSBNYXN0ZXIgQ1YgRGF0YTwvaDI+XG4gICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MTZweDtcIj5Mb2FkaW5nIGltcHJvdmVtZW50IGNhbmRpZGF0ZXMgZnJvbSB0aGlzIHNlc3Npb25cdTIwMjY8L3A+XG4gICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MjRweDtcIj48ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+PC9kaXY+PC9kaXY+YDtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9oYXJ2ZXN0L2NhbmRpZGF0ZXMnKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgIGlmICghZGF0YS5vaykge1xuICAgICAgc2VjdGlvbi5pbm5lckhUTUwgPSBgXG4gICAgICAgIDxoMiBzdHlsZT1cIm1hcmdpbi10b3A6MDtcIj5cdUQ4M0RcdURDRTUgVXBkYXRlIE1hc3RlciBDViBEYXRhPC9oMj5cbiAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZTJlMjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czo4cHg7XG4gICAgICAgICAgcGFkZGluZzoxMnB4IDE2cHg7Y29sb3I6Izk5MWIxYjtcIj5cbiAgICAgICAgICBcdTI3NEMgJHtlc2NhcGVIdG1sKGRhdGEuZXJyb3IgfHwgJ0ZhaWxlZCB0byBsb2FkIGNhbmRpZGF0ZXMnKX1cbiAgICAgICAgPC9kaXY+YDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjYW5kaWRhdGVzID0gZGF0YS5jYW5kaWRhdGVzIHx8IFtdO1xuXG4gICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBzZWN0aW9uLmlubmVySFRNTCA9IGBcbiAgICAgICAgPGgyIHN0eWxlPVwibWFyZ2luLXRvcDowO1wiPlx1RDgzRFx1RENFNSBVcGRhdGUgTWFzdGVyIENWIERhdGE8L2gyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIiBzdHlsZT1cInBhZGRpbmc6MjRweCAwO1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+XHVEODNEXHVEQ0NCPC9kaXY+XG4gICAgICAgICAgPGgzPk5vIFVwZGF0ZSBDYW5kaWRhdGVzPC9oMz5cbiAgICAgICAgICA8cD5Ob3RoaW5nIGZyb20gdGhpcyBzZXNzaW9uIHdhcnJhbnRzIHdyaXRpbmcgYmFjayB0byB0aGUgbWFzdGVyIENWLjwvcD5cbiAgICAgICAgPC9kaXY+YDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlSWNvbnMgPSB7XG4gICAgICBpbXByb3ZlZF9idWxsZXQ6ICAgICdcdTI3MEZcdUZFMEYnLFxuICAgICAgbmV3X3NraWxsOiAgICAgICAgICAnXHVEODNEXHVERUUwJyxcbiAgICAgIHN1bW1hcnlfdmFyaWFudDogICAgJ1x1RDgzRFx1RENERCcsXG4gICAgICBza2lsbF9nYXBfY29uZmlybWVkOidcdTI3MDUnLFxuICAgIH07XG5cbiAgICBsZXQgaHRtbCA9IGBcbiAgICAgIDxoMiBzdHlsZT1cIm1hcmdpbi10b3A6MDtcIj5cdUQ4M0RcdURDRTUgVXBkYXRlIE1hc3RlciBDViBEYXRhPC9oMj5cbiAgICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjE2cHg7XCI+XG4gICAgICAgIFNlbGVjdCBpbXByb3ZlbWVudHMgZnJvbSB0aGlzIHNlc3Npb24gdG8gd3JpdGUgYmFjayB0byA8Y29kZT5NYXN0ZXJfQ1ZfRGF0YS5qc29uPC9jb2RlPi5cbiAgICAgICAgTm8gaXRlbXMgYXJlIHByZS1zZWxlY3RlZCBcdTIwMTQgY2hvb3NlIG9ubHkgd2hhdCB5b3Ugd2FudCB0byBrZWVwLlxuICAgICAgPC9wPlxuICAgICAgPHRhYmxlIGNsYXNzPVwicmV2aWV3LXRhYmxlXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjE2cHg7XCI+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozNnB4O3RleHQtYWxpZ246Y2VudGVyO1wiPkluY2x1ZGU8L3RoPlxuICAgICAgICAgICAgPHRoPlR5cGU8L3RoPlxuICAgICAgICAgICAgPHRoPkNoYW5nZTwvdGg+XG4gICAgICAgICAgICA8dGg+UmF0aW9uYWxlPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+YDtcblxuICAgIGZvciAoY29uc3QgYyBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICBjb25zdCBpY29uICAgICA9IHR5cGVJY29uc1tjLnR5cGVdIHx8ICdcdUQ4M0RcdURDQ0MnO1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjLm9yaWdpbmFsICYmIGMub3JpZ2luYWwgIT09ICcobm90IGluIG1hc3RlciBkYXRhKSdcbiAgICAgICAgPyBgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjgyZW07Y29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjJweDtcbiAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7XCI+JHtlc2NhcGVIdG1sKGMub3JpZ2luYWwpfTwvZGl2PmBcbiAgICAgICAgOiAnJztcbiAgICAgIGh0bWwgKz0gYFxuICAgICAgICA8dHIgaWQ9XCJoYXJ2ZXN0LXJvdy0ke2VzY2FwZUh0bWwoYy5pZCl9XCI+XG4gICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJoYXJ2ZXN0LWNoay0ke2VzY2FwZUh0bWwoYy5pZCl9XCJcbiAgICAgICAgICAgICAgZGF0YS1oYXJ2ZXN0LWlkPVwiJHtlc2NhcGVIdG1sKGMuaWQpfVwiIHN0eWxlPVwid2lkdGg6MTZweDtoZWlnaHQ6MTZweDtjdXJzb3I6cG9pbnRlcjtcIj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxzcGFuIHRpdGxlPVwiJHtlc2NhcGVIdG1sKGMudHlwZSl9XCI+JHtpY29ufTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtjb2xvcjojNDc1NTY5O21hcmdpbi1sZWZ0OjRweDtcIj4ke2VzY2FwZUh0bWwoYy50eXBlLnJlcGxhY2UoL18vZywnICcpKX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC13ZWlnaHQ6NTAwO1wiPiR7ZXNjYXBlSHRtbChjLmxhYmVsKX08L2Rpdj5cbiAgICAgICAgICAgICR7b3JpZ2luYWx9XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjAuODhlbTtjb2xvcjojMWUyOTNiO21hcmdpbi10b3A6MnB4O1wiPiR7ZXNjYXBlSHRtbChjLnByb3Bvc2VkKX08L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBzdHlsZT1cImZvbnQtc2l6ZTowLjg1ZW07Y29sb3I6IzY0NzQ4YjtcIj4ke2VzY2FwZUh0bWwoYy5yYXRpb25hbGUpfTwvdGQ+XG4gICAgICAgIDwvdHI+YDtcbiAgICB9XG5cbiAgICBodG1sICs9IGBcbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDoxMnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtcIj5cbiAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwiYXBwbHlIYXJ2ZXN0U2VsZWN0aW9ucygpXCJcbiAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6IzBlYTVlOTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NnB4O1xuICAgICAgICAgICAgICAgICBwYWRkaW5nOjEwcHggMjRweDtmb250LXNpemU6MWVtO2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcjtcIiBpZD1cImhhcnZlc3QtYXBwbHktYnRuXCI+XG4gICAgICAgICAgXHVEODNEXHVEQ0U1IEFwcGx5IFNlbGVjdGVkIFVwZGF0ZXNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gb25jbGljaz1cImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoYXJ2ZXN0LXNlY3Rpb24nKS5zdHlsZS5kaXNwbGF5PSdub25lJ1wiXG4gICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmMWY1Zjk7Y29sb3I6IzQ3NTU2OTtib3JkZXI6MXB4IHNvbGlkICNjYmQ1ZTE7Ym9yZGVyLXJhZGl1czo2cHg7XG4gICAgICAgICAgICAgICAgIHBhZGRpbmc6MTBweCAyMHB4O2ZvbnQtc2l6ZTowLjk1ZW07Y3Vyc29yOnBvaW50ZXI7XCI+XG4gICAgICAgICAgU2tpcFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cImhhcnZlc3QtcmVzdWx0XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjE2cHg7XCI+PC9kaXY+YDtcblxuICAgIHNlY3Rpb24uaW5uZXJIVE1MID0gaHRtbDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc2VjdGlvbi5pbm5lckhUTUwgPSBgXG4gICAgICA8aDIgc3R5bGU9XCJtYXJnaW4tdG9wOjA7XCI+XHVEODNEXHVEQ0U1IFVwZGF0ZSBNYXN0ZXIgQ1YgRGF0YTwvaDI+XG4gICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDojZmVlMmUyO2JvcmRlcjoxcHggc29saWQgI2ZjYTVhNTtib3JkZXItcmFkaXVzOjhweDtcbiAgICAgICAgcGFkZGluZzoxMnB4IDE2cHg7Y29sb3I6Izk5MWIxYjtcIj5cbiAgICAgICAgXHUyNzRDIE5ldHdvcmsgZXJyb3I6ICR7ZXNjYXBlSHRtbChlcnIubWVzc2FnZSl9XG4gICAgICA8L2Rpdj5gO1xuICB9XG59XG5cbi8vIGFwcGx5SGFydmVzdFNlbGVjdGlvbnMoKSAoYm91bmQgdmlhIHRoZSBidXR0b24ncyBvbmNsaWNrIGFib3ZlKSBsaXZlcyBpblxuLy8gd2ViL2hhcnZlc3QuanMsIG5vdCBoZXJlIFx1MjAxNCB0aGlzIGZpbGUgdXNlZCB0byBjYXJyeSBpdHMgb3duIGRpdmVyZ2VudFxuLy8gZHVwbGljYXRlIChkaWZmZXJlbnQgY29uZmlybS9tZXNzYWdlIGNvcHksIG5vIGNvbmZpcm0tbW9kYWwgc3RlcCksIGJ1dFxuLy8gc2luY2UgYm90aCBmaWxlcyByZW5kZXIgYSBidXR0b24gd2l0aCB0aGUgc2FtZSBvbmNsaWNrIGFuZCB3aW5kb3cgcmVzb2x2ZXNcbi8vIGJhcmUgaWRlbnRpZmllcnMgYXQgY2xpY2sgdGltZSwgaGFydmVzdC5qcydzIHZlcnNpb24gd2FzIGFsd2F5cyB0aGUgb25lXG4vLyBhY3R1YWxseSBpbnZva2VkIGluIHByb2R1Y3Rpb24gcmVnYXJkbGVzczsgdGhpcyBjb3B5IHdhcyB1bnJlYWNoYWJsZSBkZWFkXG4vLyBjb2RlLiBSZW1vdmVkOyBzZWUgd2ViL2hhcnZlc3QuanMuXG5cbi8vIFx1MjUwMFx1MjUwMCBFeHBvcnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQge1xuICBwb3B1bGF0ZUZpbmFsaXNlVGFiLFxuICBmaW5hbGlzZUFwcGxpY2F0aW9uLFxuICBzaG93SGFydmVzdFNlY3Rpb24sXG4gIF9yZW5kZXJSZWFkaW5lc3NDaGVja2xpc3QsXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvaW50ZXJ2aWV3LXByZXAuanNcbiAqIEludGVydmlldyBQcmVwYXJhdGlvbiBwaGFzZSBcdTIwMTQgcGxhY2Vob2xkZXIgY29udGVudCB3aXRoIG5hdmlnYXRpb24uXG4gKlxuICogRGVwZW5kZW5jaWVzIChyZXNvbHZlZCB0aHJvdWdoIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIGhhbmRsZVN0ZXBDbGlja1xuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcignaW50ZXJ2aWV3LXByZXAnKTtcblxuYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVJbnRlcnZpZXdQcmVwVGFiKCkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250ZW50KSByZXR1cm47XG5cbiAgY29udGVudC5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBzdHlsZT1cIm1heC13aWR0aDo3MDBweDttYXJnaW46MCBhdXRvO3BhZGRpbmc6NDBweCAyMHB4O3RleHQtYWxpZ246Y2VudGVyO1wiPlxuICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTozZW07bWFyZ2luLWJvdHRvbToxNnB4O1wiPlx1RDgzQ1x1REZBNDwvZGl2PlxuICAgICAgPGgyIHN0eWxlPVwibWFyZ2luLWJvdHRvbToxMnB4O1wiPkludGVydmlldyBQcmVwYXJhdGlvbjwvaDI+XG4gICAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7bWFyZ2luLWJvdHRvbTo4cHg7XCI+XG4gICAgICAgIEFJLWdlbmVyYXRlZCBpbnRlcnZpZXcgcHJlcGFyYXRpb24gYmFzZWQgb24gdGhpcyBqb2IgYW5kIHlvdXIgQ1YgaXMgY29taW5nIHNvb24uXG4gICAgICA8L3A+XG4gICAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjAuOWVtO1wiPlxuICAgICAgICBUaGlzIHdpbGwgaW5jbHVkZSBsaWtlbHkgaW50ZXJ2aWV3IHF1ZXN0aW9ucywgc3VnZ2VzdGVkIHRhbGtpbmcgcG9pbnRzLCBhbmRcbiAgICAgICAgU1RBUi1mb3JtYXQgYW5zd2VycyBkcmF3biBmcm9tIHlvdXIgZXhwZXJpZW5jZS5cbiAgICAgIDwvcD5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjQwcHg7XCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tcHJpbWFyeVwiIG9uY2xpY2s9XCJoYW5kbGVTdGVwQ2xpY2soJ3RoYW5rX3lvdScpXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToxZW07cGFkZGluZzoxMHB4IDI0cHg7XCI+XG4gICAgICAgICAgUHJvY2VlZCB0byBUaGFuayBZb3UgTGV0dGVyIFx1MjE5MlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG5cbiAgbG9nLmRlYnVnKCdJbnRlcnZpZXcgcHJlcCBwbGFjZWhvbGRlciByZW5kZXJlZCcpO1xufVxuXG5leHBvcnQgeyBwb3B1bGF0ZUludGVydmlld1ByZXBUYWIgfTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL3RoYW5rLXlvdS5qc1xuICogVGhhbmsgWW91IExldHRlciBwaGFzZSBcdTIwMTQgcGxhY2Vob2xkZXIgY29udGVudCB3aXRoIG5hdmlnYXRpb24uXG4gKlxuICogRGVwZW5kZW5jaWVzIChyZXNvbHZlZCB0aHJvdWdoIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIGhhbmRsZVN0ZXBDbGlja1xuICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmNvbnN0IGxvZyA9IGdldExvZ2dlcigndGhhbmsteW91Jyk7XG5cbmFzeW5jIGZ1bmN0aW9uIHBvcHVsYXRlVGhhbmtZb3VUYWIoKSB7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICBpZiAoIWNvbnRlbnQpIHJldHVybjtcblxuICBjb250ZW50LmlubmVySFRNTCA9IGBcbiAgICA8ZGl2IHN0eWxlPVwibWF4LXdpZHRoOjcwMHB4O21hcmdpbjowIGF1dG87cGFkZGluZzo0MHB4IDIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjNlbTttYXJnaW4tYm90dG9tOjE2cHg7XCI+XHVEODNEXHVERTRGPC9kaXY+XG4gICAgICA8aDIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjEycHg7XCI+VGhhbmsgWW91IExldHRlcjwvaDI+XG4gICAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7bWFyZ2luLWJvdHRvbTo4cHg7XCI+XG4gICAgICAgIEFJLWdlbmVyYXRlZCB0aGFuayB5b3UgbGV0dGVyIHRlbXBsYXRlcyBhcmUgY29taW5nIHNvb24uXG4gICAgICA8L3A+XG4gICAgICA8cCBzdHlsZT1cImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjAuOWVtO1wiPlxuICAgICAgICBBZnRlciB5b3VyIGludGVydmlldywgdXNlIHRoaXMgdG8gZ2VuZXJhdGUgYSBwZXJzb25hbGlzZWQgdGhhbmsgeW91IG5vdGVcbiAgICAgICAgdGhhdCByZWluZm9yY2VzIHlvdXIgZml0IGZvciB0aGUgcm9sZS5cbiAgICAgIDwvcD5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjQwcHg7XCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tcHJpbWFyeVwiIG9uY2xpY2s9XCJoYW5kbGVTdGVwQ2xpY2soJ2hhcnZlc3QnKVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MWVtO3BhZGRpbmc6MTBweCAyNHB4O1wiPlxuICAgICAgICAgIFByb2NlZWQgdG8gSGFydmVzdCBJbXByb3ZlbWVudHMgXHUyMTkyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcblxuICBsb2cuZGVidWcoJ1RoYW5rIHlvdSBsZXR0ZXIgcGxhY2Vob2xkZXIgcmVuZGVyZWQnKTtcbn1cblxuZXhwb3J0IHsgcG9wdWxhdGVUaGFua1lvdVRhYiB9O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiBIYXJ2ZXN0IHRhYjogTExNLXNjb3JlZCBncm91cGVkIHZpZXcgb2YgbWFzdGVyLUNWIGltcHJvdmVtZW50IGNhbmRpZGF0ZXMuXG4gKlxuICogUHVibGljIGV4cG9ydHM6XG4gKiAgIHBvcHVsYXRlSGFydmVzdFRhYigpICAgICAgICBcdTIwMTQgY2FsbGVkIGJ5IHJldmlldy10YWJsZS1iYXNlLmpzIG9uIHRhYiBzd2l0Y2hcbiAqICAgYXBwbHlIYXJ2ZXN0U2VsZWN0aW9ucygpICAgIFx1MjAxNCBjYWxsZWQgYnkgaW5saW5lIG9uY2xpY2sgb24gdGhlIEFwcGx5IGJ1dHRvblxuICogICByZWZyZXNoSGFydmVzdEFuYWx5c2lzKCkgICAgXHUyMDE0IGNhbGxlZCBieSBpbmxpbmUgb25jbGljayBvbiB0aGUgUmVmcmVzaCBidXR0b25cbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlc2MsIHJlbmRlclByb3Bvc2FsUm93LCBhdHRhY2hQcm9wb3NhbFJvd0xpc3RlbmVycyB9IGZyb20gJy4vcHJvcG9zYWwtcmV2aWV3LmpzJztcblxuY29uc3QgbG9nID0gZ2V0TG9nZ2VyKCdoYXJ2ZXN0Jyk7XG5cbi8vIFx1MjUwMFx1MjUwMCBEaXNwbGF5IGNvbmZpZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBNZXJnZWQgZGlzcGxheSB0eXBlIGNvbmZpZy5cbiAqIG5ld19za2lsbCBhbmQgc2tpbGxfZ2FwX2NvbmZpcm1lZCBib3RoIG1hcCB0byB0aGUgJ3NraWxsJyBkaXNwbGF5IGdyb3VwLlxuICovXG5jb25zdCBIQVJWRVNUX1RZUEVfQ09ORklHID0ge1xuICBpbXByb3ZlZF9idWxsZXQ6ICAgICB7IGxhYmVsOiAnRXhwZXJpZW5jZSBCdWxsZXRzJywgICAgIGljb246ICdcdTI3MEZcdUZFMEYnLCAgc29ydDogMSwgZGlzcGxheVR5cGU6ICdpbXByb3ZlZF9idWxsZXQnICAgICB9LFxuICBuZXdfc2tpbGw6ICAgICAgICAgICB7IGxhYmVsOiAnU2tpbGxzJywgICAgICAgICAgICAgICAgIGljb246ICdcdUQ4M0RcdURFRTBcdUZFMEYnLCAgc29ydDogMiwgZGlzcGxheVR5cGU6ICdza2lsbCcgICAgICAgICAgICAgICB9LFxuICBza2lsbF9nYXBfY29uZmlybWVkOiB7IGxhYmVsOiAnU2tpbGxzJywgICAgICAgICAgICAgICAgIGljb246ICdcdUQ4M0RcdURFRTBcdUZFMEYnLCAgc29ydDogMiwgZGlzcGxheVR5cGU6ICdza2lsbCcgICAgICAgICAgICAgICB9LFxuICBzdW1tYXJ5X3ZhcmlhbnQ6ICAgICB7IGxhYmVsOiAnUHJvZmVzc2lvbmFsIFN1bW1hcnknLCAgIGljb246ICdcdUQ4M0RcdURDREQnLCAgc29ydDogMywgZGlzcGxheVR5cGU6ICdzdW1tYXJ5X3ZhcmlhbnQnICAgICB9LFxuICBza2lsbF90eXBlX3VwZGF0ZTogICB7IGxhYmVsOiAnU2tpbGwgQ2xhc3NpZmljYXRpb24nLCAgIGljb246ICdcdUQ4M0NcdURGRjdcdUZFMEYnLCAgc29ydDogNCwgZGlzcGxheVR5cGU6ICdza2lsbF90eXBlX3VwZGF0ZScgIH0sXG59O1xuXG5jb25zdCBIQVJWRVNUX1RZUEVfREVTQ1JJUFRJT05TID0ge1xuICBpbXByb3ZlZF9idWxsZXQ6ICAgICAgJ1Jld3JpdHRlbiBhY2hpZXZlbWVudCBidWxsZXRzIHlvdSBhcHByb3ZlZCBpbiB0aGUgUmV3cml0ZXMgc3RlcC4gUHJvbW90aW5nIHVwZGF0ZXMgdGhlIGJ1bGxldCB0ZXh0IGluIHlvdXIgbWFzdGVyIENWLicsXG4gIHNraWxsOiAgICAgICAgICAgICAgICAnU2tpbGxzIGFic2VudCBmcm9tIHlvdXIgbWFzdGVyIENWIFx1MjAxNCBlaXRoZXIgYWRkZWQgKFx1RDgzQ1x1REQ5NSBBZGRlZCkgZHVyaW5nIHRoZSBTa2lsbHMgUmV2aWV3IG9yIGNvbmZpcm1lZCB3aGVuIGFza2VkIChcdTI3MDUgQ29uZmlybWVkKS4gUHJvbW90aW5nIGFkZHMgdGhlbSB0byB5b3VyIHNraWxscyBzZWN0aW9uLicsXG4gIHN1bW1hcnlfdmFyaWFudDogICAgICAnQSByZXdyaXR0ZW4gdmVyc2lvbiBvZiB5b3VyIHByb2Zlc3Npb25hbCBzdW1tYXJ5LiBQcm9tb3Rpbmcgc3RvcmVzIGl0IGFzIGEgbmFtZWQgdmFyaWFudCBpbiB5b3VyIG1hc3RlciBDVi4nLFxuICBza2lsbF90eXBlX3VwZGF0ZTogICAgJ0hhcmQvc29mdCBza2lsbCBjbGFzc2lmaWNhdGlvbnMgeW91IGNoYW5nZWQgZHVyaW5nIHRoaXMgc2Vzc2lvbi4gUHJvbW90aW5nIHBlcnNpc3RzIHRoZSBuZXcgdHlwZSBzbyBpdCBpcyBub3QgcmUtY2xhc3NpZmllZCBvbiBldmVyeSBhcHBsaWNhdGlvbi4nLFxufTtcblxuY29uc3QgSEFSVkVTVF9TT1VSQ0VfQkFER0UgPSB7XG4gIG5ld19za2lsbDogICAgICAgICAgICc8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjc1ZW07YmFja2dyb3VuZDojZGJlYWZlO2NvbG9yOiMxZDRlZDg7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoxcHggNnB4O21hcmdpbi1sZWZ0OjZweDt3aGl0ZS1zcGFjZTpub3dyYXA7XCI+XHVEODNDXHVERDk1IEFkZGVkPC9zcGFuPicsXG4gIHNraWxsX2dhcF9jb25maXJtZWQ6ICc8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjc1ZW07YmFja2dyb3VuZDojZGNmY2U3O2NvbG9yOiMxNjY1MzQ7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoxcHggNnB4O21hcmdpbi1sZWZ0OjZweDt3aGl0ZS1zcGFjZTpub3dyYXA7XCI+XHUyNzA1IENvbmZpcm1lZDwvc3Bhbj4nLFxuICBza2lsbF90eXBlX3VwZGF0ZTogICAnPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC43NWVtO2JhY2tncm91bmQ6I2ZlZjljMztjb2xvcjojODU0ZDBlO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MXB4IDZweDttYXJnaW4tbGVmdDo2cHg7d2hpdGUtc3BhY2U6bm93cmFwO1wiPlx1RDgzQ1x1REZGN1x1RkUwRiBSZWNsYXNzaWZpZWQ8L3NwYW4+Jyxcbn07XG5cbmNvbnN0IFJFQ19DT05GSUcgPSB7XG4gIHByb21vdGU6IHsgbGFiZWw6ICdQcm9tb3RlJywgICAgICBpY29uOiAnXHUyQjA2XHVGRTBGJywgIGNvbG9yOiAnIzE2NjUzNCcsIGJnOiAnI2YwZmRmNCcsIHNvcnQ6IDAgfSxcbiAgc2tpcDogICAgeyBsYWJlbDogJ1NraXAnLCAgICAgICAgIGljb246ICdcdTIzRURcdUZFMEYnLCAgY29sb3I6ICcjOWEzNDEyJywgYmc6ICcjZmZmN2VkJywgc29ydDogMSB9LFxuICBudWxsOiAgICB7IGxhYmVsOiAnVW5hbmFseXplZCcsICAgaWNvbjogJ1x1Mjc1MycsICBjb2xvcjogJyM0YjU1NjMnLCBiZzogJyNmOWZhZmInLCBzb3J0OiAyIH0sXG59O1xuXG5jb25zdCBDT05GX0NPTkZJRyA9IHtcbiAgaGlnaDogICB7IGxhYmVsOiAnSGlnaCcsICAgY29sb3I6ICcjMTU4MDNkJywgYmc6ICcjZjBmZGY0Jywgc29ydDogMCB9LFxuICBtZWRpdW06IHsgbGFiZWw6ICdNZWRpdW0nLCBjb2xvcjogJyNiNDUzMDknLCBiZzogJyNmZmZiZWInLCBzb3J0OiAxIH0sXG4gIGxvdzogICAgeyBsYWJlbDogJ0xvdycsICAgIGNvbG9yOiAnI2I5MWMxYycsIGJnOiAnI2ZlZjJmMicsIHNvcnQ6IDIgfSxcbiAgbnVsbDogICB7IGxhYmVsOiAnJywgICAgICAgY29sb3I6ICcjNmI3MjgwJywgYmc6ICcjZjlmYWZiJywgc29ydDogMyB9LFxufTtcblxuLy8gXHUyNTAwXHUyNTAwIEdyb3VwaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBnZXREaXNwbGF5VHlwZShjYW5kaWRhdGUpIHtcbiAgcmV0dXJuIEhBUlZFU1RfVFlQRV9DT05GSUdbY2FuZGlkYXRlLnR5cGVdPy5kaXNwbGF5VHlwZSA/PyBjYW5kaWRhdGUudHlwZTtcbn1cblxuLyoqXG4gKiBHcm91cCBlbnJpY2hlZCBjYW5kaWRhdGVzIGludG8gYSBuZXN0ZWQgc3RydWN0dXJlOlxuICogICB7IGRpc3BsYXlUeXBlIFx1MjE5MiB7IHJlYyBcdTIxOTIgeyBjb25maWRlbmNlIFx1MjE5MiBbY2FuZGlkYXRlLCBcdTIwMjZdIH0gfSB9XG4gKi9cbmZ1bmN0aW9uIGdyb3VwQ2FuZGlkYXRlcyhlbnJpY2hlZCkge1xuICBjb25zdCBncm91cHMgPSB7fTtcbiAgZm9yIChjb25zdCBjIG9mIGVucmljaGVkKSB7XG4gICAgY29uc3QgZHQgICA9IGdldERpc3BsYXlUeXBlKGMpO1xuICAgIGNvbnN0IHJlYyAgPSBjLnJlY29tbWVuZGF0aW9uID8/ICdudWxsJztcbiAgICBjb25zdCBjb25mID0gYy5jb25maWRlbmNlICAgICA/PyAnbnVsbCc7XG4gICAgaWYgKCFncm91cHNbZHRdKSAgICAgICAgICAgICAgICBncm91cHNbZHRdICAgICAgID0ge307XG4gICAgaWYgKCFncm91cHNbZHRdW3JlY10pICAgICAgICAgICBncm91cHNbZHRdW3JlY10gID0ge307XG4gICAgaWYgKCFncm91cHNbZHRdW3JlY11bY29uZl0pICAgICBncm91cHNbZHRdW3JlY11bY29uZl0gPSBbXTtcbiAgICBncm91cHNbZHRdW3JlY11bY29uZl0ucHVzaChjKTtcbiAgfVxuICByZXR1cm4gZ3JvdXBzO1xufVxuXG5mdW5jdGlvbiBzb3J0ZWRLZXlzKG9iaiwgY29uZmlnTWFwKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCBzYSA9IGNvbmZpZ01hcFthXT8uc29ydCA/PyA5OTtcbiAgICBjb25zdCBzYiA9IGNvbmZpZ01hcFtiXT8uc29ydCA/PyA5OTtcbiAgICByZXR1cm4gc2EgLSBzYjtcbiAgfSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBQcmUtY2hlY2sgbG9naWMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4vLyBBbGwgaGFydmVzdCBpdGVtcyBzdGFydCB1bmNoZWNrZWQgXHUyMDE0IG1hc3RlciBDViB1cGRhdGVzIGFyZSBvcHQtaW4gb25seSAoVVMtQTExKS5cbi8vIEdyb3VwcyB3aXRoIGhpZ2gvbWVkaXVtIGNvbmZpZGVuY2UgcHJvbW90aW9ucyBhcmUgZXhwYW5kZWQgc28gY2FuZGlkYXRlcyBhcmVcbi8vIHByb21pbmVudCwgYnV0IG5vIGNoZWNrYm94IGlzIHByZS1zZWxlY3RlZC5cblxuZnVuY3Rpb24gc2hvdWxkUHJlQ2hlY2soX2NhbmRpZGF0ZSkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBDb2xsYXBzZSBkZWZhdWx0IGxvZ2ljIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiB0eXBlR3JvdXBFeHBhbmRlZChkdENhbmRpZGF0ZXMpIHtcbiAgcmV0dXJuIGR0Q2FuZGlkYXRlcy5zb21lKGMgPT4gYy5yZWNvbW1lbmRhdGlvbiA9PT0gJ3Byb21vdGUnICYmXG4gICAgKGMuY29uZmlkZW5jZSA9PT0gJ2hpZ2gnIHx8IGMuY29uZmlkZW5jZSA9PT0gJ21lZGl1bScpKTtcbn1cblxuZnVuY3Rpb24gcmVjR3JvdXBFeHBhbmRlZChyZWMsIGNvbmZDYW5kaWRhdGVzKSB7XG4gIGlmIChyZWMgIT09ICdwcm9tb3RlJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gY29uZkNhbmRpZGF0ZXMuc29tZShjID0+IGMuY29uZmlkZW5jZSA9PT0gJ2hpZ2gnIHx8IGMuY29uZmlkZW5jZSA9PT0gJ21lZGl1bScpO1xufVxuXG5mdW5jdGlvbiBjb25mVGllckV4cGFuZGVkKHJlYywgY29uZikge1xuICByZXR1cm4gcmVjID09PSAncHJvbW90ZScgJiYgKGNvbmYgPT09ICdoaWdoJyB8fCBjb25mID09PSAnbWVkaXVtJyk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZW5kZXJpbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIHJlbmRlckNvbmZpZGVuY2VCYWRnZShjb25mKSB7XG4gIGNvbnN0IGNmZyA9IENPTkZfQ09ORklHW2NvbmZdID8/IENPTkZfQ09ORklHWydudWxsJ107XG4gIGlmICghY2ZnLmxhYmVsKSByZXR1cm4gJyc7XG4gIHJldHVybiBgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC43ZW07Zm9udC13ZWlnaHQ6NjAwO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MXB4IDZweDtiYWNrZ3JvdW5kOiR7Y2ZnLmJnfTtjb2xvcjoke2NmZy5jb2xvcn07Ym9yZGVyOjFweCBzb2xpZCAke2NmZy5jb2xvcn0zMDt3aGl0ZS1zcGFjZTpub3dyYXA7XCI+JHtlc2MoY2ZnLmxhYmVsKX08L3NwYW4+YDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyUmVjb21tZW5kYXRpb25CYWRnZShyZWMpIHtcbiAgY29uc3QgY2ZnID0gUkVDX0NPTkZJR1tyZWNdID8/IFJFQ19DT05GSUdbJ251bGwnXTtcbiAgcmV0dXJuIGA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjc1ZW07Zm9udC13ZWlnaHQ6NjAwO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MnB4IDhweDtiYWNrZ3JvdW5kOiR7Y2ZnLmJnfTtjb2xvcjoke2NmZy5jb2xvcn07d2hpdGUtc3BhY2U6bm93cmFwO1wiPiR7Y2ZnLmljb259ICR7ZXNjKGNmZy5sYWJlbCl9PC9zcGFuPmA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNhbmRpZGF0ZVJvdyhjLCBpZHgpIHtcbiAgY29uc3QgdHlwZUNmZyAgID0gSEFSVkVTVF9UWVBFX0NPTkZJR1tjLnR5cGVdID8/IHt9O1xuICBjb25zdCByZWNCYWRnZSAgPSBjLnJlY29tbWVuZGF0aW9uID8gcmVuZGVyUmVjb21tZW5kYXRpb25CYWRnZShjLnJlY29tbWVuZGF0aW9uKSA6ICcnO1xuICBjb25zdCBjb25mQmFkZ2UgPSBjLmNvbmZpZGVuY2UgPyByZW5kZXJDb25maWRlbmNlQmFkZ2UoYy5jb25maWRlbmNlKSA6ICcnO1xuICBjb25zdCBoYXNSZWFzb25pbmcgPSBjLmFuYWx5c2lzQXZhaWxhYmxlICYmIGMucmVhc29uaW5nO1xuXG4gIHJldHVybiByZW5kZXJQcm9wb3NhbFJvdyh7XG4gICAgaWQ6ICAgICAgICAgICAgICBjLmlkLFxuICAgIHR5cGVMYWJlbDogICAgICAgdHlwZUNmZy5sYWJlbCA/PyBjLnR5cGUsXG4gICAgc291cmNlQmFkZ2VIdG1sOiBIQVJWRVNUX1NPVVJDRV9CQURHRVtjLnR5cGVdID8/ICcnLFxuICAgIGxhYmVsOiAgICAgICAgICAgYy5sYWJlbCxcbiAgICBvcmlnaW5hbDogICAgICAgIGMub3JpZ2luYWwsXG4gICAgcHJvcG9zZWQ6ICAgICAgICBjLnByb3Bvc2VkLFxuICAgIGRldGFpbFRleHQ6ICAgICAgaGFzUmVhc29uaW5nID8gYy5yZWFzb25pbmcgOiBudWxsLFxuICAgIGJhZGdlc0h0bWw6ICAgICAgIGAke3JlY0JhZGdlfSR7Y29uZkJhZGdlfWAsXG4gICAgY2hlY2tlZDogICAgICAgICBzaG91bGRQcmVDaGVjayhjKSxcbiAgfSwge1xuICAgIGlkUHJlZml4OiAgICAgICAgICdoYXJ2ZXN0JyxcbiAgICBjaGVja2JveERhdGFBdHRyOiAnaGFydmVzdC1pZCcsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb25maWRlbmNlVGllcihyZWMsIGNvbmYsIGNhbmRpZGF0ZXMpIHtcbiAgY29uc3QgY2ZnICAgICAgPSBDT05GX0NPTkZJR1tjb25mXSA/PyBDT05GX0NPTkZJR1snbnVsbCddO1xuICBjb25zdCBleHBhbmRlZCA9IGNvbmZUaWVyRXhwYW5kZWQocmVjLCBjb25mKTtcbiAgY29uc3QgdGllcklkICAgPSBgaGFydmVzdC1jb25mLSR7cmVjfS0ke2NvbmZ9LSR7RGF0ZS5ub3coKX1gO1xuICBjb25zdCBjb3VudCAgICA9IGNhbmRpZGF0ZXMubGVuZ3RoO1xuXG4gIGlmICghY2ZnLmxhYmVsKSB7XG4gICAgLy8gTm8tYW5hbHlzaXMgdGllciBcdTIwMTQgcmVuZGVyIHJvd3MgZGlyZWN0bHkgd2l0aG91dCBhIHN1Yi1oZWFkZXJcbiAgICByZXR1cm4gY2FuZGlkYXRlcy5tYXAoKGMsIGkpID0+IHJlbmRlckNhbmRpZGF0ZVJvdyhjLCBpKSkuam9pbignJyk7XG4gIH1cblxuICBjb25zdCB0b2dnbGVJY29uID0gZXhwYW5kZWQgPyAnXHUyNUJFJyA6ICdcdTI1QjgnO1xuICBjb25zdCBoZWFkZXJIdG1sID0gYFxuICAgIDx0ciBjbGFzcz1cImhhcnZlc3QtY29uZi1oZWFkZXJcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6I2ZhZmFmYTtcIiBvbmNsaWNrPVwidG9nZ2xlSGFydmVzdFNlY3Rpb24oJyR7dGllcklkfScpXCI+XG4gICAgICA8dGQgY29sc3Bhbj1cIjJcIiBzdHlsZT1cInBhZGRpbmc6NnB4IDEycHggNnB4IDM2cHg7Zm9udC1zaXplOjAuOGVtO2NvbG9yOiR7Y2ZnLmNvbG9yfTtmb250LXdlaWdodDo2MDA7XCI+XG4gICAgICAgIDxzcGFuIGlkPVwiJHt0aWVySWR9LWljb25cIj4ke3RvZ2dsZUljb259PC9zcGFuPlxuICAgICAgICAke2VzYyhjZmcubGFiZWwpfSBjb25maWRlbmNlXG4gICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuODVlbTtmb250LXdlaWdodDo0MDA7Y29sb3I6IzljYTNhZjttYXJnaW4tbGVmdDo2cHg7XCI+KCR7Y291bnR9KTwvc3Bhbj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgICA8dGJvZHkgaWQ9XCIke3RpZXJJZH1cIiBzdHlsZT1cIiR7ZXhwYW5kZWQgPyAnJyA6ICdkaXNwbGF5Om5vbmU7J31cIj5cbiAgICAgICR7Y2FuZGlkYXRlcy5tYXAoKGMsIGkpID0+IHJlbmRlckNhbmRpZGF0ZVJvdyhjLCBpKSkuam9pbignJyl9XG4gICAgPC90Ym9keT5gO1xuICByZXR1cm4gaGVhZGVySHRtbDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyUmVjR3JvdXAoZHQsIHJlYywgY29uZk1hcCkge1xuICBjb25zdCBjZmcgPSBSRUNfQ09ORklHW3JlY10gPz8gUkVDX0NPTkZJR1snbnVsbCddO1xuICBjb25zdCBhbGxDYW5kcyA9IE9iamVjdC52YWx1ZXMoY29uZk1hcCkuZmxhdCgpO1xuICBjb25zdCBleHBhbmRlZCA9IHJlY0dyb3VwRXhwYW5kZWQocmVjLCBhbGxDYW5kcyk7XG4gIGNvbnN0IGdyb3VwSWQgID0gYGhhcnZlc3QtcmVjLSR7ZHR9LSR7cmVjfS0ke0RhdGUubm93KCl9YDtcbiAgY29uc3QgY291bnQgICAgPSBhbGxDYW5kcy5sZW5ndGg7XG5cbiAgY29uc3QgY29uZnMgICAgPSBzb3J0ZWRLZXlzKGNvbmZNYXAsIENPTkZfQ09ORklHKTtcbiAgY29uc3QgaGFzTXVsdGlwbGVDb25mcyA9IGNvbmZzLmxlbmd0aCA+IDEgfHwgKGNvbmZzLmxlbmd0aCA9PT0gMSAmJiBDT05GX0NPTkZJR1tjb25mc1swXV0/LmxhYmVsKTtcblxuICBjb25zdCBpbm5lclJvd3MgPSBjb25mcy5tYXAoY29uZiA9PiByZW5kZXJDb25maWRlbmNlVGllcihyZWMsIGNvbmYsIGNvbmZNYXBbY29uZl0pKS5qb2luKCcnKTtcblxuICBjb25zdCB0b2dnbGVJY29uID0gZXhwYW5kZWQgPyAnXHUyNUJFJyA6ICdcdTI1QjgnO1xuICByZXR1cm4gYFxuICAgIDx0ciBjbGFzcz1cImhhcnZlc3QtcmVjLWhlYWRlclwiIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDoke2NmZy5iZ307XCIgb25jbGljaz1cInRvZ2dsZUhhcnZlc3RTZWN0aW9uKCcke2dyb3VwSWR9JylcIj5cbiAgICAgIDx0ZCBjb2xzcGFuPVwiMlwiIHN0eWxlPVwicGFkZGluZzo4cHggMTJweCA4cHggMjRweDtmb250LXNpemU6MC44NWVtO2NvbG9yOiR7Y2ZnLmNvbG9yfTtmb250LXdlaWdodDo3MDA7XCI+XG4gICAgICAgIDxzcGFuIGlkPVwiJHtncm91cElkfS1pY29uXCI+JHt0b2dnbGVJY29ufTwvc3Bhbj5cbiAgICAgICAgJHtjZmcuaWNvbn0gJHtlc2MoY2ZnLmxhYmVsKX1cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojOWNhM2FmO21hcmdpbi1sZWZ0OjZweDtcIj4oJHtjb3VudH0pPC9zcGFuPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICAgIDx0Ym9keSBpZD1cIiR7Z3JvdXBJZH1cIiBzdHlsZT1cIiR7ZXhwYW5kZWQgPyAnJyA6ICdkaXNwbGF5Om5vbmU7J31cIj5cbiAgICAgICR7aGFzTXVsdGlwbGVDb25mcyA/IGlubmVyUm93cyA6IGFsbENhbmRzLm1hcCgoYywgaSkgPT4gcmVuZGVyQ2FuZGlkYXRlUm93KGMsIGkpKS5qb2luKCcnKX1cbiAgICA8L3Rib2R5PmA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclR5cGVHcm91cChkdCwgcmVjTWFwLCBhbGxEdENhbmRpZGF0ZXMpIHtcbiAgY29uc3QgY2ZnICAgICAgPSBIQVJWRVNUX1RZUEVfQ09ORklHW2R0XSA/PyB7IGxhYmVsOiBkdCwgaWNvbjogJ1x1RDgzRFx1RENDQicsIHNvcnQ6IDk5IH07XG4gIGNvbnN0IGV4cGFuZGVkID0gdHlwZUdyb3VwRXhwYW5kZWQoYWxsRHRDYW5kaWRhdGVzKTtcbiAgY29uc3QgZ3JvdXBJZCAgPSBgaGFydmVzdC10eXBlLSR7ZHR9LSR7RGF0ZS5ub3coKX1gO1xuICBjb25zdCBjb3VudCAgICA9IGFsbER0Q2FuZGlkYXRlcy5sZW5ndGg7XG4gIGNvbnN0IGRlc2MgICAgID0gSEFSVkVTVF9UWVBFX0RFU0NSSVBUSU9OU1tkdF0gPz8gJyc7XG5cbiAgY29uc3QgcmVjcyAgICAgICAgPSBzb3J0ZWRLZXlzKHJlY01hcCwgUkVDX0NPTkZJRyk7XG4gIGNvbnN0IGhhc011bHRpcGxlUmVjcyA9IHJlY3MubGVuZ3RoID4gMTtcblxuICBjb25zdCBpbm5lckh0bWwgPSByZWNzLm1hcChyZWMgPT4ge1xuICAgIGlmICghaGFzTXVsdGlwbGVSZWNzKSB7XG4gICAgICAvLyBTdXBwcmVzcyB0aGUgcmVjLWxldmVsIGhlYWRlcjsgcmVuZGVyIGNvbmZpZGVuY2UgdGllcnMgZGlyZWN0bHlcbiAgICAgIGNvbnN0IGNvbmZNYXAgID0gcmVjTWFwW3JlY107XG4gICAgICBjb25zdCBjb25mcyAgICA9IHNvcnRlZEtleXMoY29uZk1hcCwgQ09ORl9DT05GSUcpO1xuICAgICAgY29uc3QgaGFzQ29uZnMgPSBjb25mcy5sZW5ndGggPiAxIHx8IChjb25mcy5sZW5ndGggPT09IDEgJiYgQ09ORl9DT05GSUdbY29uZnNbMF1dPy5sYWJlbCk7XG4gICAgICByZXR1cm4gaGFzQ29uZnNcbiAgICAgICAgPyBjb25mcy5tYXAoY29uZiA9PiByZW5kZXJDb25maWRlbmNlVGllcihyZWMsIGNvbmYsIGNvbmZNYXBbY29uZl0pKS5qb2luKCcnKVxuICAgICAgICA6IGNvbmZNYXBbY29uZnNbMF1dLm1hcCgoYywgaSkgPT4gcmVuZGVyQ2FuZGlkYXRlUm93KGMsIGkpKS5qb2luKCcnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlclJlY0dyb3VwKGR0LCByZWMsIHJlY01hcFtyZWNdKTtcbiAgfSkuam9pbignJyk7XG5cbiAgY29uc3QgdG9nZ2xlSWNvbiA9IGV4cGFuZGVkID8gJ1x1MjVCRScgOiAnXHUyNUI4JztcbiAgcmV0dXJuIGBcbiAgICA8ZGl2IGNsYXNzPVwiaGFydmVzdC10eXBlLXNlY3Rpb25cIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206MjRweDtib3JkZXI6MXB4IHNvbGlkICNlMmU4ZjA7Ym9yZGVyLXJhZGl1czo4cHg7b3ZlcmZsb3c6aGlkZGVuO1wiPlxuICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2Y4ZmFmYztwYWRkaW5nOjEycHggMTZweDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlMmU4ZjA7XCJcbiAgICAgICAgICAgb25jbGljaz1cInRvZ2dsZUhhcnZlc3RTZWN0aW9uKCcke2dyb3VwSWR9JylcIj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MS4yNWVtO1wiPiR7Y2ZnLmljb259PC9zcGFuPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDoxO1wiPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXdlaWdodDo3MDA7Y29sb3I6IzBmMTcyYTtmb250LXNpemU6MC45NWVtO1wiPlxuICAgICAgICAgICAgPHNwYW4gaWQ9XCIke2dyb3VwSWR9LWljb25cIj4ke3RvZ2dsZUljb259PC9zcGFuPlxuICAgICAgICAgICAgJHtlc2MoY2ZnLmxhYmVsKX1cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuODJlbTtmb250LXdlaWdodDo0MDA7Y29sb3I6Izk0YTNiODttYXJnaW4tbGVmdDo2cHg7XCI+KCR7Y291bnR9KTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAke2Rlc2MgPyBgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjc4ZW07Y29sb3I6IzY0NzQ4YjttYXJnaW4tdG9wOjJweDtcIj4ke2VzYyhkZXNjKX08L2Rpdj5gIDogJyd9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGlkPVwiJHtncm91cElkfVwiIHN0eWxlPVwiJHtleHBhbmRlZCA/ICcnIDogJ2Rpc3BsYXk6bm9uZTsnfVwiPlxuICAgICAgICA8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtcIj5cbiAgICAgICAgICAke2lubmVySHRtbH1cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckhhcnZlc3RUYWJIdG1sKGVucmljaGVkLCBhbmFseXNpc09rLCBhbmFseXNpc0Vycm9yKSB7XG4gIGNvbnN0IGdyb3VwcyA9IGdyb3VwQ2FuZGlkYXRlcyhlbnJpY2hlZCk7XG4gIGNvbnN0IGR0S2V5cyA9IHNvcnRlZEtleXMoZ3JvdXBzLCBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoSEFSVkVTVF9UWVBFX0NPTkZJRykubWFwKChbaywgdl0pID0+IFt2LmRpc3BsYXlUeXBlLCB2XSlcbiAgKSk7XG5cbiAgY29uc3QgdG90YWxDb3VudCA9IGVucmljaGVkLmxlbmd0aDtcblxuICBjb25zdCBhbmFseXNpc1dhcm5pbmcgPSAhYW5hbHlzaXNPa1xuICAgID8gYDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZmZiZWI7Ym9yZGVyOjFweCBzb2xpZCAjZmNkMzRkO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTBweCAxNHB4O21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MC44N2VtO2NvbG9yOiM5MjQwMGU7XCI+XG4gICAgICAgIFx1MjZBMFx1RkUwRiBMTE0gYW5hbHlzaXMgdW5hdmFpbGFibGUke2FuYWx5c2lzRXJyb3IgPyBgOiAke2VzYyhhbmFseXNpc0Vycm9yKX1gIDogJyd9LiBDaGVja2JveGVzIGFyZSB1bmNoZWNrZWQgXHUyMDE0IHJldmlldyBtYW51YWxseS5cbiAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwicmVmcmVzaEhhcnZlc3RBbmFseXNpcygpXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDoxMHB4O2ZvbnQtc2l6ZTowLjg1ZW07cGFkZGluZzoycHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkOTc3MDY7Ym9yZGVyLXJhZGl1czo0cHg7YmFja2dyb3VuZDp3aGl0ZTtjb2xvcjojYjQ1MzA5O2N1cnNvcjpwb2ludGVyO1wiPlJldHJ5IGFuYWx5c2lzPC9idXR0b24+XG4gICAgICA8L2Rpdj5gXG4gICAgOiAnJztcblxuICBjb25zdCBzZWN0aW9uc0h0bWwgPSBkdEtleXMubWFwKGR0ID0+IHtcbiAgICBjb25zdCByZWNNYXAgICAgICA9IGdyb3Vwc1tkdF07XG4gICAgY29uc3QgYWxsRHRDYW5kcyAgPSBPYmplY3QudmFsdWVzKHJlY01hcCkuZmxhdE1hcChjb25mTWFwID0+IE9iamVjdC52YWx1ZXMoY29uZk1hcCkuZmxhdCgpKTtcbiAgICByZXR1cm4gcmVuZGVyVHlwZUdyb3VwKGR0LCByZWNNYXAsIGFsbER0Q2FuZHMpO1xuICB9KS5qb2luKCcnKTtcblxuICByZXR1cm4gYFxuICAgIDxoMT5cdUQ4M0NcdURGM0UgSGFydmVzdCBJbXByb3ZlbWVudHM8L2gxPlxuICAgIDxwIHN0eWxlPVwiY29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjhweDtcIj5cbiAgICAgIFJldmlldyBMTE0tc2NvcmVkIGNhbmRpZGF0ZXMgZm9yIHByb21vdGlvbiB0byB5b3VyIG1hc3RlciBDVi5cbiAgICAgIENoZWNrIHRoZSBpdGVtcyB5b3Ugd2FudCB0byBhcHBseSAoJHt0b3RhbENvdW50fSBjYW5kaWRhdGUke3RvdGFsQ291bnQgPT09IDEgPyAnJyA6ICdzJ30gZm91bmQpLlxuICAgIDwvcD5cbiAgICAke2FuYWx5c2lzV2FybmluZ31cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjIwcHg7ZmxleC13cmFwOndyYXA7XCI+XG4gICAgICA8YnV0dG9uIGlkPVwiaGFydmVzdC1hcHBseS1idG5cIiBvbmNsaWNrPVwiYXBwbHlIYXJ2ZXN0U2VsZWN0aW9ucygpXCJcbiAgICAgICAgc3R5bGU9XCJwYWRkaW5nOjEwcHggMjRweDtmb250LXNpemU6MWVtO2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOiMxNmEzNGE7Y29sb3I6d2hpdGU7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo2cHg7XCI+XG4gICAgICAgIFx1MjcwNSBBcHBseSBTZWxlY3RlZCB0byBNYXN0ZXIgQ1ZcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBvbmNsaWNrPVwicmVmcmVzaEhhcnZlc3RBbmFseXNpcygpXCJcbiAgICAgICAgc3R5bGU9XCJwYWRkaW5nOjEwcHggMThweDtmb250LXNpemU6MC45ZW07Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDp3aGl0ZTtjb2xvcjojNDc1NTY5O2JvcmRlcjoxcHggc29saWQgI2NiZDVlMTtib3JkZXItcmFkaXVzOjZweDtcIj5cbiAgICAgICAgXHVEODNEXHVERDA0IFJlLWFuYWx5c2VcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC44NWVtO2NvbG9yOiM5NGEzYjg7XCI+XG4gICAgICAgICR7dG90YWxDb3VudH0gY2FuZGlkYXRlJHt0b3RhbENvdW50ICE9PSAxID8gJ3MnIDogJyd9XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgJHtzZWN0aW9uc0h0bWx9XG4gICAgPGRpdiBpZD1cImhhcnZlc3QtcmVzdWx0XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjIwcHg7XCI+PC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyRW1wdHlTdGF0ZUh0bWwoKSB7XG4gIHJldHVybiBgXG4gICAgPGgxPlx1RDgzQ1x1REYzRSBIYXJ2ZXN0IEltcHJvdmVtZW50czwvaDE+XG4gICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO1wiPk5vIGhhcnZlc3QgY2FuZGlkYXRlcyBmb3VuZCBmb3IgdGhpcyBzZXNzaW9uLjwvcD5cbiAgICA8cCBzdHlsZT1cImNvbG9yOiM5NGEzYjg7Zm9udC1zaXplOjAuOWVtO1wiPlxuICAgICAgQ2FuZGlkYXRlcyBhcmUgZ2VuZXJhdGVkIGZyb20gYXBwcm92ZWQgcmV3cml0ZXMsIHNraWxscyBhZGRlZCBkdXJpbmcgcmV2aWV3LFxuICAgICAgYW5kIHN1bW1hcnkgdmFyaWFudHMgY3JlYXRlZCBkdXJpbmcgdGhlIHNlc3Npb24uXG4gICAgPC9wPmA7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBBUEkgY2FsbHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQ2FuZGlkYXRlcygpIHtcbiAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL2hhcnZlc3QvY2FuZGlkYXRlcycpO1xuICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQW5hbHlzaXMoZm9yY2VSZWZyZXNoID0gZmFsc2UpIHtcbiAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL2hhcnZlc3QvYW5hbHl6ZScsIHtcbiAgICBtZXRob2Q6ICAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgYm9keTogICAgSlNPTi5zdHJpbmdpZnkoeyBmb3JjZV9yZWZyZXNoOiBmb3JjZVJlZnJlc2ggfSksXG4gIH0pO1xuICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBUb2dnbGUgaGVscGVycyAoY2FsbGVkIGJ5IGlubGluZSBvbmNsaWNrKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gdG9nZ2xlSGFydmVzdFNlY3Rpb24oaWQpIHtcbiAgY29uc3QgZWwgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgY29uc3QgaWNvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2lkfS1pY29uYCk7XG4gIGlmICghZWwpIHJldHVybjtcbiAgY29uc3QgaGlkZGVuID0gZWwuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnO1xuICBlbC5zdHlsZS5kaXNwbGF5ID0gaGlkZGVuID8gJycgOiAnbm9uZSc7XG4gIGlmIChpY29uKSBpY29uLnRleHRDb250ZW50ID0gaGlkZGVuID8gJ1x1MjVCRScgOiAnXHUyNUI4Jztcbn1cblxuLy8gXHUyNTAwXHUyNTAwIE1haW4gZW50cnkgcG9pbnRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBwb3B1bGF0ZUhhcnZlc3RUYWIoKSB7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jdW1lbnQtY29udGVudCcpO1xuICBpZiAoIWNvbnRlbnQpIHJldHVybjtcblxuICBjb250ZW50LmlubmVySFRNTCA9IGBcbiAgICA8aDE+XHVEODNDXHVERjNFIEhhcnZlc3QgSW1wcm92ZW1lbnRzPC9oMT5cbiAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0MHB4O1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPjwvZGl2PlxuICAgICAgPHAgc3R5bGU9XCJjb2xvcjojNmI3MjgwO21hcmdpbi10b3A6MTJweDtcIj5Mb2FkaW5nIGNhbmRpZGF0ZXMgYW5kIHJ1bm5pbmcgTExNIGFuYWx5c2lzXHUyMDI2PC9wPlxuICAgIDwvZGl2PmA7XG5cbiAgbGV0IGNhbmRpZGF0ZXMgPSBbXTtcbiAgbGV0IGFuYWx5c2lzT2sgPSBmYWxzZTtcbiAgbGV0IGFuYWx5c2VzICAgPSBbXTtcbiAgbGV0IGFuYWx5c2lzRXJyb3IgPSBudWxsO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY2FuZERhdGEgPSBhd2FpdCBmZXRjaENhbmRpZGF0ZXMoKTtcbiAgICBpZiAoIWNhbmREYXRhLm9rKSB7XG4gICAgICBjb250ZW50LmlubmVySFRNTCA9IGA8aDE+XHVEODNDXHVERjNFIEhhcnZlc3QgSW1wcm92ZW1lbnRzPC9oMT48cCBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5GYWlsZWQgdG8gbG9hZCBjYW5kaWRhdGVzOiAke2VzYyhjYW5kRGF0YS5lcnJvciB8fCAnVW5rbm93biBlcnJvcicpfTwvcD5gO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYW5kaWRhdGVzID0gY2FuZERhdGEuY2FuZGlkYXRlcyB8fCBbXTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKCdwb3B1bGF0ZUhhcnZlc3RUYWI6IGNhbmRpZGF0ZXMgZmV0Y2ggZmFpbGVkJywgZXJyKTtcbiAgICBjb250ZW50LmlubmVySFRNTCA9IGA8aDE+XHVEODNDXHVERjNFIEhhcnZlc3QgSW1wcm92ZW1lbnRzPC9oMT48cCBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5OZXR3b3JrIGVycm9yIGxvYWRpbmcgY2FuZGlkYXRlcy48L3A+YDtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb250ZW50LmlubmVySFRNTCA9IHJlbmRlckVtcHR5U3RhdGVIdG1sKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhbmFseXNpc0RhdGEgPSBhd2FpdCBmZXRjaEFuYWx5c2lzKGZhbHNlKTtcbiAgICBpZiAoYW5hbHlzaXNEYXRhLm9rKSB7XG4gICAgICBhbmFseXNpc09rID0gdHJ1ZTtcbiAgICAgIGFuYWx5c2VzICAgPSBhbmFseXNpc0RhdGEuYW5hbHlzZXMgfHwgW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGFuYWx5c2lzRXJyb3IgPSBhbmFseXNpc0RhdGEuZXJyb3IgfHwgJ0FuYWx5c2lzIGZhaWxlZCc7XG4gICAgICBsb2cud2FybigncG9wdWxhdGVIYXJ2ZXN0VGFiOiBhbmFseXNpcyBub3Qgb2snLCBhbmFseXNpc0Vycm9yKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcigncG9wdWxhdGVIYXJ2ZXN0VGFiOiBhbmFseXNpcyBmZXRjaCBmYWlsZWQnLCBlcnIpO1xuICAgIGFuYWx5c2lzRXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgfVxuXG4gIGNvbnN0IGFuYWx5c2VzQnlJZCA9IE9iamVjdC5mcm9tRW50cmllcyhhbmFseXNlcy5tYXAoYSA9PiBbYS5pZCwgYV0pKTtcbiAgY29uc3QgZW5yaWNoZWQgPSBjYW5kaWRhdGVzLm1hcChjID0+ICh7XG4gICAgLi4uYyxcbiAgICByZWNvbW1lbmRhdGlvbjogICAgYW5hbHlzZXNCeUlkW2MuaWRdPy5yZWNvbW1lbmRhdGlvbiA/PyBudWxsLFxuICAgIGNvbmZpZGVuY2U6ICAgICAgICBhbmFseXNlc0J5SWRbYy5pZF0/LmNvbmZpZGVuY2UgICAgID8/IG51bGwsXG4gICAgcmVhc29uaW5nOiAgICAgICAgIGFuYWx5c2VzQnlJZFtjLmlkXT8ucmVhc29uaW5nICAgICAgPz8gbnVsbCxcbiAgICBhbmFseXNpc0F2YWlsYWJsZTogYW5hbHlzaXNPayxcbiAgfSkpO1xuXG4gIGNvbnRlbnQuaW5uZXJIVE1MID0gcmVuZGVySGFydmVzdFRhYkh0bWwoZW5yaWNoZWQsIGFuYWx5c2lzT2ssIGFuYWx5c2lzRXJyb3IpO1xuICBhdHRhY2hQcm9wb3NhbFJvd0xpc3RlbmVycyhjb250ZW50LCAnaGFydmVzdCcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoSGFydmVzdEFuYWx5c2lzKCkge1xuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3VtZW50LWNvbnRlbnQnKTtcbiAgaWYgKCFjb250ZW50KSByZXR1cm47XG5cbiAgLy8gU2hvdyBzcGlubmVyIGlubGluZSB3aGlsZSByZS1mZXRjaGluZ1xuICBjb25zdCBhcHBseUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoYXJ2ZXN0LWFwcGx5LWJ0bicpO1xuICBpZiAoYXBwbHlCdG4pIGFwcGx5QnRuLmRpc2FibGVkID0gdHJ1ZTtcblxuICAvLyBSZS1ydW4gZnVsbCBwb3B1bGF0ZSB3aXRoIGZvcmNlIHJlZnJlc2hcbiAgdHJ5IHtcbiAgICBjb25zdCBjYW5kRGF0YSA9IGF3YWl0IGZldGNoQ2FuZGlkYXRlcygpO1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSAoY2FuZERhdGEub2sgJiYgY2FuZERhdGEuY2FuZGlkYXRlcykgPyBjYW5kRGF0YS5jYW5kaWRhdGVzIDogW107XG5cbiAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gcmVuZGVyRW1wdHlTdGF0ZUh0bWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgYW5hbHlzaXNPayA9IGZhbHNlO1xuICAgIGxldCBhbmFseXNlcyAgID0gW107XG4gICAgbGV0IGFuYWx5c2lzRXJyb3IgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhbmFseXNpc0RhdGEgPSBhd2FpdCBmZXRjaEFuYWx5c2lzKHRydWUpO1xuICAgICAgaWYgKGFuYWx5c2lzRGF0YS5vaykge1xuICAgICAgICBhbmFseXNpc09rID0gdHJ1ZTtcbiAgICAgICAgYW5hbHlzZXMgICA9IGFuYWx5c2lzRGF0YS5hbmFseXNlcyB8fCBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFuYWx5c2lzRXJyb3IgPSBhbmFseXNpc0RhdGEuZXJyb3IgfHwgJ0FuYWx5c2lzIGZhaWxlZCc7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBhbmFseXNpc0Vycm9yID0gZXJyLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgY29uc3QgYW5hbHlzZXNCeUlkID0gT2JqZWN0LmZyb21FbnRyaWVzKGFuYWx5c2VzLm1hcChhID0+IFthLmlkLCBhXSkpO1xuICAgIGNvbnN0IGVucmljaGVkID0gY2FuZGlkYXRlcy5tYXAoYyA9PiAoe1xuICAgICAgLi4uYyxcbiAgICAgIHJlY29tbWVuZGF0aW9uOiAgICBhbmFseXNlc0J5SWRbYy5pZF0/LnJlY29tbWVuZGF0aW9uID8/IG51bGwsXG4gICAgICBjb25maWRlbmNlOiAgICAgICAgYW5hbHlzZXNCeUlkW2MuaWRdPy5jb25maWRlbmNlICAgICA/PyBudWxsLFxuICAgICAgcmVhc29uaW5nOiAgICAgICAgIGFuYWx5c2VzQnlJZFtjLmlkXT8ucmVhc29uaW5nICAgICAgPz8gbnVsbCxcbiAgICAgIGFuYWx5c2lzQXZhaWxhYmxlOiBhbmFseXNpc09rLFxuICAgIH0pKTtcblxuICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gcmVuZGVySGFydmVzdFRhYkh0bWwoZW5yaWNoZWQsIGFuYWx5c2lzT2ssIGFuYWx5c2lzRXJyb3IpO1xuICAgIGF0dGFjaFByb3Bvc2FsUm93TGlzdGVuZXJzKGNvbnRlbnQsICdoYXJ2ZXN0Jyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcigncmVmcmVzaEhhcnZlc3RBbmFseXNpczogZmFpbGVkJywgZXJyKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseUhhcnZlc3RTZWxlY3Rpb25zKCkge1xuICBjb25zdCBjaGVja2JveGVzICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtaGFydmVzdC1pZF06Y2hlY2tlZCcpO1xuICBjb25zdCBzZWxlY3RlZElkcyA9IEFycmF5LmZyb20oY2hlY2tib3hlcykubWFwKGNiID0+IGNiLmRhdGFzZXQuaGFydmVzdElkKTtcbiAgY29uc3QgcmVzdWx0RGl2ICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGFydmVzdC1yZXN1bHQnKTtcbiAgY29uc3QgYXBwbHlCdG4gICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGFydmVzdC1hcHBseS1idG4nKTtcblxuICBpZiAoc2VsZWN0ZWRJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKHJlc3VsdERpdikgcmVzdWx0RGl2LmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImNvbG9yOiNiNDUzMDk7XCI+Tm8gaXRlbXMgc2VsZWN0ZWQuPC9wPic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgKHR5cGVvZiBzaG93Q29uZmlybU1vZGFsID09PSAnZnVuY3Rpb24nXG4gICAgPyBzaG93Q29uZmlybU1vZGFsKFxuICAgICAgICBgUHJvbW90ZSAke3NlbGVjdGVkSWRzLmxlbmd0aH0gaXRlbSR7c2VsZWN0ZWRJZHMubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9IHRvIG1hc3RlciBDVj9gLFxuICAgICAgICAnVGhpcyB3aWxsIHBlcm1hbmVudGx5IHdyaXRlIGNoYW5nZXMgdG8geW91ciBNYXN0ZXJfQ1ZfRGF0YS5qc29uLiBBIGJhY2t1cCB3aWxsIGJlIGNyZWF0ZWQgZmlyc3QuJyxcbiAgICAgIClcbiAgICA6IFByb21pc2UucmVzb2x2ZSh3aW5kb3cuY29uZmlybShgUHJvbW90ZSAke3NlbGVjdGVkSWRzLmxlbmd0aH0gaXRlbShzKSB0byBtYXN0ZXIgQ1Y/XFxuXFxuVGhpcyB3aWxsIHBlcm1hbmVudGx5IHdyaXRlIGNoYW5nZXMgdG8geW91ciBNYXN0ZXJfQ1ZfRGF0YS5qc29uLmApKSk7XG5cbiAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcblxuICBpZiAoYXBwbHlCdG4pIHsgYXBwbHlCdG4uZGlzYWJsZWQgPSB0cnVlOyBhcHBseUJ0bi50ZXh0Q29udGVudCA9ICdBcHBseWluZ1x1MjAyNic7IH1cbiAgaWYgKHJlc3VsdERpdikgcmVzdWx0RGl2LmlubmVySFRNTCA9ICcnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL2hhcnZlc3QvYXBwbHknLCB7XG4gICAgICBtZXRob2Q6ICAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6ICAgIEpTT04uc3RyaW5naWZ5KHsgc2VsZWN0ZWRfaWRzOiBzZWxlY3RlZElkcyB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgIGlmICghZGF0YS5vaykge1xuICAgICAgaWYgKHJlc3VsdERpdikgcmVzdWx0RGl2LmlubmVySFRNTCA9IGA8cCBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5BcHBseSBmYWlsZWQ6ICR7ZXNjKGRhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKX08L3A+YDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB3cml0dGVuQ291bnQgPSBkYXRhLndyaXR0ZW5fY291bnQgPz8gMDtcbiAgICBjb25zdCBjb21taXRIYXNoICAgPSBkYXRhLmNvbW1pdF9oYXNoICAgPyBgIChjb21taXQgJHtlc2MoZGF0YS5jb21taXRfaGFzaCl9KWAgOiAnJztcbiAgICBjb25zdCBiYWNrdXBOb3RlICAgPSBkYXRhLmJhY2t1cF9wYXRoICAgPyBgIEJhY2t1cCBzYXZlZCB0byA8Y29kZT4ke2VzYyhkYXRhLmJhY2t1cF9wYXRoKX08L2NvZGU+LmAgOiAnJztcbiAgICBjb25zdCBnaXRXYXJuaW5nICAgPSBkYXRhLmdpdF9lcnJvclxuICAgICAgPyBgPHAgc3R5bGU9XCJjb2xvcjojYjQ1MzA5O2ZvbnQtc2l6ZTowLjg3ZW07XCI+XHUyNkEwXHVGRTBGIEdpdCBjb21taXQgc2tpcHBlZDogJHtlc2MoZGF0YS5naXRfZXJyb3I/Lm1lc3NhZ2UgfHwgZGF0YS5naXRfZXJyb3IpfTwvcD5gXG4gICAgICA6ICcnO1xuXG4gICAgaWYgKHJlc3VsdERpdikge1xuICAgICAgcmVzdWx0RGl2LmlubmVySFRNTCA9IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6I2YwZmRmNDtib3JkZXI6MXB4IHNvbGlkICM4NmVmYWM7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMnB4IDE2cHg7XCI+XG4gICAgICAgICAgPHAgc3R5bGU9XCJjb2xvcjojMTY2NTM0O2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW46MCAwIDRweDtcIj5cbiAgICAgICAgICAgIFx1MjcwNSAke3dyaXR0ZW5Db3VudH0gaXRlbSR7d3JpdHRlbkNvdW50ICE9PSAxID8gJ3MnIDogJyd9IHdyaXR0ZW4gdG8gbWFzdGVyIENWJHtjb21taXRIYXNofS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgJHtiYWNrdXBOb3RlID8gYDxwIHN0eWxlPVwiZm9udC1zaXplOjAuODJlbTtjb2xvcjojNmI3MjgwO21hcmdpbjo0cHggMCAwO1wiPiR7YmFja3VwTm90ZX08L3A+YCA6ICcnfVxuICAgICAgICAgICR7Z2l0V2FybmluZ31cbiAgICAgICAgPC9kaXY+YDtcbiAgICB9XG5cbiAgICAvLyBEaXNhYmxlIGNoZWNrYm94ZXMgZm9yIGFwcGxpZWQgaXRlbXNcbiAgICBmb3IgKGNvbnN0IGlkIG9mIHNlbGVjdGVkSWRzKSB7XG4gICAgICBjb25zdCBjYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBoYXJ2ZXN0LWNoay0ke2lkfWApO1xuICAgICAgaWYgKGNiKSB7IGNiLmRpc2FibGVkID0gdHJ1ZTsgY2IuY2hlY2tlZCA9IGZhbHNlOyB9XG4gICAgICBjb25zdCByb3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgaGFydmVzdC1yb3ctJHtpZH1gKTtcbiAgICAgIGlmIChyb3cpIHJvdy5zdHlsZS5vcGFjaXR5ID0gJzAuNDUnO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKCdhcHBseUhhcnZlc3RTZWxlY3Rpb25zOiBmYWlsZWQnLCBlcnIpO1xuICAgIGlmIChyZXN1bHREaXYpIHJlc3VsdERpdi5pbm5lckhUTUwgPSBgPHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+TmV0d29yayBlcnJvcjogJHtlc2MoZXJyLm1lc3NhZ2UpfTwvcD5gO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChhcHBseUJ0bikgeyBhcHBseUJ0bi5kaXNhYmxlZCA9IGZhbHNlOyBhcHBseUJ0bi50ZXh0Q29udGVudCA9ICdcdTI3MDUgQXBwbHkgU2VsZWN0ZWQgdG8gTWFzdGVyIENWJzsgfVxuICB9XG59XG5cbmV4cG9ydCB7IHBvcHVsYXRlSGFydmVzdFRhYiwgYXBwbHlIYXJ2ZXN0U2VsZWN0aW9ucywgcmVmcmVzaEhhcnZlc3RBbmFseXNpcywgdG9nZ2xlSGFydmVzdFNlY3Rpb24gfTtcbiIsICIvLyBDb3B5cmlnaHQgKEMpIDIwMjYgR3JlZ29yeSBSLiBXYXJuZXNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vci1sYXRlclxuLy9cbi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENWLUJ1aWxkZXIuXG4vLyBGb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcsIGNvbnRhY3QgZ3JlZ0B3YXJuZXMtaW5ub3ZhdGlvbnMuY29tXG5cbi8qKlxuICogd2ViL2Vhcmx5LXByZXZpZXctcGFuZWwuanNcbiAqIEdBUC0xNiBQYXJ0IEI6IGEgcGVyc2lzdGVudCwgY29sbGFwc2libGUgQ1YgcHJldmlldyBzaG93biBkdXJpbmcgdGhlXG4gKiBjdXN0b21pemF0aW9uL3Jld3JpdGUvc3BlbGwtY2hlY2sgcGlwZWxpbmUsIHNvIHRoZSB1c2VyIHNlZXMgYSByZW5kZXJlZFxuICogQ1Ygd2VsbCBiZWZvcmUgTGF5b3V0IFJldmlldy5cbiAqXG4gKiBTQUZFVFkgQk9VTkRBUlkgKGRvIG5vdCB3ZWFrZW4gd2l0aG91dCByZS1yZWFkaW5nIHRoZSBHQVAtMTYgcGxhbidzXG4gKiBjb21taXR0ZWUtcmV2aWV3IHNlY3Rpb24gb24gdGhpcyBtb2R1bGUpOiB0aGlzIGZpbGUgbXVzdCBvbmx5IGV2ZXIgY2FsbFxuICogdGhlIHJlYWQtb25seSBHRVQgL2FwaS9sYXlvdXQtaHRtbCBlbmRwb2ludC4gSXQgbXVzdCBuZXZlciBjYWxsXG4gKiBQT1NUIC9hcGkvY3YvZ2VuZXJhdGUtcHJldmlldyBvciBQT1NUIC9hcGkvY3Yvc21hcnQtaW5zdHJ1Y3Rpb24gXHUyMDE0IGJvdGhcbiAqIG11dGF0ZSBnZW5lcmF0aW9uX3N0YXRlIChzdGF0ZU1hbmFnZXIubWFya1ByZXZpZXdHZW5lcmF0ZWQoKSBmb3JjaWJseVxuICogYWR2YW5jZXMgdGhlIHdvcmtmbG93IHBoYXNlIHRvIExBWU9VVF9SRVZJRVcpLCB3aGljaCB3b3VsZCBzaWxlbnRseVxuICogZmFzdC1mb3J3YXJkIHRoZSB1c2VyJ3Mgc3RhZ2Ugd2hpbGUgdGhleSdyZSBzdGlsbCBvbiBhbiBlYXJsaWVyIHRhYi5cbiAqIFRoZSByZW5kZXJpbmcgc3RlcCBpcyBkZWxlZ2F0ZWQgdG8gcHJldmlldy1yZW5kZXIuanMsIGEgc2hhcmVkIHV0aWwgd2l0aFxuICogbm8gcmVmZXJlbmNlIHRvIGFwaUNhbGwvc3RhdGVNYW5hZ2VyIGF0IGFsbCwgc3BlY2lmaWNhbGx5IHNvIGEgZnV0dXJlXG4gKiBlZGl0IHRvIHRoZSBtdXRhdGluZyBsYXlvdXQtcmV2aWV3IGZsb3cgY2Fubm90IHB1bGwgdGhlIG11dGF0aW5nIHBhdGggaW5cbiAqIGhlcmUgdmlhIGEgc2hhcmVkIGltcG9ydC5cbiAqL1xuXG5pbXBvcnQgeyBhcGlDYWxsLCBTdG9yYWdlS2V5cyB9IGZyb20gJy4vYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBzdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlLW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgcmVuZGVySHRtbEludG9JZnJhbWUgfSBmcm9tICcuL3ByZXZpZXctcmVuZGVyLmpzJztcblxuY29uc3QgRUFSTFlfUFJFVklFV19UQUJTID0gbmV3IFNldChbXG4gICdleHAtcmV2aWV3JywgJ2FjaC1lZGl0b3InLCAnc2tpbGxzLXJldmlldycsICdhY2hpZXZlbWVudHMtcmV2aWV3JyxcbiAgJ3RhZ2xpbmUtcmV2aWV3JywgJ3N1bW1hcnktcmV2aWV3JywgJ3B1YmxpY2F0aW9ucy1yZXZpZXcnLCAvLyBjdXN0b21pemF0aW9uc1xuICAncmV3cml0ZScsICdzcGVsbCcsXG5dKTtcblxubGV0IF9jb2xsYXBzZWQgPSBmYWxzZTtcbnRyeSB7XG4gIF9jb2xsYXBzZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTdG9yYWdlS2V5cy5FQVJMWV9QUkVWSUVXX0NPTExBUFNFRCkgPT09ICd0cnVlJztcbn0gY2F0Y2ggKF9lKSB7XG4gIC8vIGxvY2FsU3RvcmFnZSB1bmF2YWlsYWJsZSBcdTIwMTQgZGVmYXVsdCB0byBleHBhbmRlZC5cbn1cblxuZnVuY3Rpb24gX3NldENvbGxhcHNlZChjb2xsYXBzZWQpIHtcbiAgX2NvbGxhcHNlZCA9IGNvbGxhcHNlZDtcbiAgdHJ5IHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTdG9yYWdlS2V5cy5FQVJMWV9QUkVWSUVXX0NPTExBUFNFRCwgU3RyaW5nKGNvbGxhcHNlZCkpO1xuICB9IGNhdGNoIChfZSkge1xuICAgIC8vIE5vbi1mYXRhbCBcdTIwMTQgY29sbGFwc2Ugc3RhdGUganVzdCB3b24ndCBwZXJzaXN0IGFjcm9zcyByZWxvYWRzLlxuICB9XG4gIGNvbnN0IGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlYXJseS1wcmV2aWV3LXRvZ2dsZS1idG4nKTtcbiAgaWYgKGJ0bikge1xuICAgIGJ0bi50ZXh0Q29udGVudCA9IGNvbGxhcHNlZCA/ICdTaG93JyA6ICdIaWRlJztcbiAgICBidG4uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgU3RyaW5nKCFjb2xsYXBzZWQpKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVuZGVyRWFybHlQcmV2aWV3Qm9keSgpIHtcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlYXJseS1wcmV2aWV3LWJvZHknKTtcbiAgY29uc3Qgbm90ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlYXJseS1wcmV2aWV3LXN0YXR1cy1ub3RlJyk7XG4gIGlmICghYm9keSkgcmV0dXJuO1xuXG4gIGlmIChfY29sbGFwc2VkKSB7XG4gICAgYm9keS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIHJldHVybjtcbiAgfVxuICBib2R5LnN0eWxlLmRpc3BsYXkgPSAnJztcblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICAvLyBSZWFkLW9ubHkgZmV0Y2ggb25seSBcdTIwMTQgc2VlIHRoZSBtb2R1bGUtaGVhZGVyIHNhZmV0eSBib3VuZGFyeS5cbiAgICBkYXRhID0gYXdhaXQgYXBpQ2FsbCgnR0VUJywgJy9hcGkvbGF5b3V0LWh0bWwnKTtcbiAgfSBjYXRjaCAoX2UpIHtcbiAgICAvLyA0MDQvZXJyb3IgKG5vIHByZXZpZXcgZ2VuZXJhdGVkIHlldCB0aGlzIHNlc3Npb24pIFx1MjAxNCBlbXB0eSBzdGF0ZSBiZWxvdy5cbiAgICBkYXRhID0gbnVsbDtcbiAgfVxuXG4gIGlmIChkYXRhICYmIGRhdGEub2sgJiYgZGF0YS5odG1sKSB7XG4gICAgY29uc3QgZnJlc2huZXNzID0gKHR5cGVvZiBzdGF0ZU1hbmFnZXI/LmdldExheW91dEZyZXNobmVzcyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gc3RhdGVNYW5hZ2VyLmdldExheW91dEZyZXNobmVzcygpIDogeyBpc1N0YWxlOiBmYWxzZSB9O1xuXG4gICAgYm9keS5pbm5lckhUTUwgPSAnPGlmcmFtZSBpZD1cImVhcmx5LXByZXZpZXctaWZyYW1lXCIgc2FuZGJveD1cImFsbG93LXNhbWUtb3JpZ2luXCIgJyArXG4gICAgICAncmVmZXJyZXJwb2xpY3k9XCJuby1yZWZlcnJlclwiIHN0eWxlPVwid2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZTtcIj48L2lmcmFtZT4nO1xuICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlYXJseS1wcmV2aWV3LWlmcmFtZScpO1xuICAgIGNvbnN0IHN0YXRlTGFiZWwgPSBmcmVzaG5lc3MuaXNTdGFsZSA/ICdzdGFsZScgOiAnZnJlc2gnO1xuICAgIGlmcmFtZS50aXRsZSA9IGBDViBwcmV2aWV3IFx1MjAxNCAke3N0YXRlTGFiZWx9YDtcbiAgICBpZnJhbWUuY2xhc3NMaXN0LnRvZ2dsZSgnZWFybHktcHJldmlldy1pZnJhbWUtc3RhbGUnLCBCb29sZWFuKGZyZXNobmVzcy5pc1N0YWxlKSk7XG4gICAgcmVuZGVySHRtbEludG9JZnJhbWUoaWZyYW1lLCBkYXRhLmh0bWwpO1xuXG4gICAgaWYgKG5vdGUpIHtcbiAgICAgIG5vdGUudGV4dENvbnRlbnQgPSBmcmVzaG5lc3MuaXNTdGFsZVxuICAgICAgICA/ICdQcmV2aWV3IHJlZmxlY3RzIGFuIGVhcmxpZXIgdmVyc2lvbiBcdTIwMTQgdmlzaXQgTGF5b3V0IFJldmlldyB0byByZWZyZXNoLidcbiAgICAgICAgOiAnJztcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYm9keS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImVhcmx5LXByZXZpZXctZW1wdHlcIj5ObyBDViBwcmV2aWV3IHlldCBcdTIwMTQgYXZhaWxhYmxlIGFmdGVyIHlvdSByZWFjaCBMYXlvdXQgUmV2aWV3LjwvZGl2Pic7XG4gIGlmIChub3RlKSBub3RlLnRleHRDb250ZW50ID0gJyc7XG59XG5cbi8qKlxuICogU2hvdyBvciBoaWRlIHRoZSBwYW5lbCBmb3IgdGhlIGdpdmVuIHRhYiwgYW5kIChyZSlyZW5kZXIgaXRzIGJvZHkgd2hlblxuICogc2hvd24uIENhbGxlZCBmcm9tIHN3aXRjaFRhYigpIFx1MjAxNCB0aGlzIGZ1bmN0aW9uJ3Mgb3duIGluLXNjb3BlIGNoZWNrXG4gKiBkZWNpZGVzIHZpc2liaWxpdHksIHNvIHRoZSBjYWxsZXIgZG9lc24ndCBuZWVkIHRvIGtub3cgdGhlIHRhYiBsaXN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHRhYlxuICovXG5hc3luYyBmdW5jdGlvbiB0b2dnbGVFYXJseVByZXZpZXdQYW5lbCh0YWIpIHtcbiAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWFybHktcHJldmlldy1wYW5lbCcpO1xuICBpZiAoIXBhbmVsKSByZXR1cm47XG4gIGlmICghRUFSTFlfUFJFVklFV19UQUJTLmhhcyh0YWIpKSB7XG4gICAgcGFuZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICByZXR1cm47XG4gIH1cbiAgcGFuZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gIGF3YWl0IF9yZW5kZXJFYXJseVByZXZpZXdCb2R5KCk7XG59XG5cbmZ1bmN0aW9uIGluaXRFYXJseVByZXZpZXdQYW5lbCgpIHtcbiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vhcmx5LXByZXZpZXctdG9nZ2xlLWJ0bicpO1xuICBpZiAoIWJ0bikgcmV0dXJuO1xuICBidG4uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgU3RyaW5nKCFfY29sbGFwc2VkKSk7XG4gIGJ0bi50ZXh0Q29udGVudCA9IF9jb2xsYXBzZWQgPyAnU2hvdycgOiAnSGlkZSc7XG4gIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBfc2V0Q29sbGFwc2VkKCFfY29sbGFwc2VkKTtcbiAgICBfcmVuZGVyRWFybHlQcmV2aWV3Qm9keSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IHsgaW5pdEVhcmx5UHJldmlld1BhbmVsLCB0b2dnbGVFYXJseVByZXZpZXdQYW5lbCB9O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIvc2Vzc2lvbi1zd2l0Y2hlci11aS5qc1xuICogU2Vzc2lvbiBtYW5hZ2VtZW50IG1vZGFsLCB0cmFzaCB2aWV3LCBhbmQgb3duZXJzaGlwIGNvbmZsaWN0IGRpYWxvZy5cbiAqXG4gKiBUaGUgc2Vzc2lvbi1jb25mbGljdCByZXRyeSBiYW5uZXIgKHNob3dTZXNzaW9uQ29uZmxpY3RCYW5uZXIvXG4gKiBjb25mbGljdFJldHJ5Tm93L2NvbmZsaWN0RGlzbWlzcykgbGl2ZXMgaW4gd2ViL2ZldGNoLXV0aWxzLmpzLCB3aGljaCBvd25zXG4gKiBoYW5kbGU0MDlDb25mbGljdCAodGhlIGFjdHVhbCB0cmlnZ2VyKSBcdTIwMTQgdGhpcyBmaWxlIHVzZWQgdG8gY2FycnkgaXRzIG93blxuICogYnl0ZS1mb3ItYnl0ZSBkdXBsaWNhdGUgd2l0aCBhIHNlcGFyYXRlIHJldHJ5IHF1ZXVlL3RpbWVyLCB3aGljaCBtZWFudFxuICogY2xpY2tpbmcgXCJSZXRyeSBOb3dcIiBjb3VsZCBzaWxlbnRseSBkcmFpbiB0aGUgd3JvbmcgKGFsd2F5cy1lbXB0eSkgcXVldWVcbiAqIGRlcGVuZGluZyBvbiB3ZWIvc3JjL21haW4uanMncyBtb2R1bGUgbG9hZCBvcmRlciwgbmV2ZXIgYWN0dWFsbHlcbiAqIHJlc29sdmluZyB0aGUgcGVuZGluZyByZXRyaWVkIHJlcXVlc3QuIFJlbW92ZWQ7IHNlZSB3ZWIvZmV0Y2gtdXRpbHMuanMuXG4gKlxuICogRGVwZW5kZW5jaWVzIChyZXNvbHZlZCB0aHJvdWdoIGdsb2JhbFRoaXMgYXQgcnVudGltZSk6XG4gKiAgIGVzY2FwZUh0bWwsIHBhcnNlU2Vzc2lvbkxpc3RSZXNwb25zZSwgZm9ybWF0U2Vzc2lvblBoYXNlTGFiZWwsXG4gKiAgIGZvcm1hdFNlc3Npb25UaW1lc3RhbXAsIGJ1aWxkU2Vzc2lvblN3aXRjaGVyTGFiZWwsXG4gKiAgIGdldEFjdGl2ZVNlc3Npb25Pd25lcnNoaXBNZXRhLCBfZ2V0Q3VycmVudFNlc3Npb25JZFZhbHVlLFxuICogICBsb2FkU2Vzc2lvbkZpbGUsIGNyZWF0ZU5ld1Nlc3Npb25BbmROYXZpZ2F0ZSwgZmV0Y2hTdGF0dXMsXG4gKiAgIHNldEluaXRpYWxGb2N1cywgdHJhcEZvY3VzLCByZXN0b3JlRm9jdXMsIGNvbmZpcm1EaWFsb2dcbiAqL1xuXG4vLyBcdTI1MDBcdTI1MDAgU29ydCBzdGF0ZSAmIHNlc3Npb24gY2FjaGUgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5jb25zdCBfU01fU1RPUkFHRV9LRVkgPSAnY3Zfc21fc29ydF9rZXknO1xuY29uc3QgX1NNX1NUT1JBR0VfRElSID0gJ2N2X3NtX3NvcnRfZGlyJztcblxubGV0IF9zbVNvcnRLZXkgPSAoKCkgPT4geyB0cnkgeyByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oX1NNX1NUT1JBR0VfS0VZKSB8fCAnbGFzdE1vZGlmaWVkJzsgfSBjYXRjaCAoXykgeyByZXR1cm4gJ2xhc3RNb2RpZmllZCc7IH0gfSkoKTtcbmxldCBfc21Tb3J0RGlyID0gKCgpID0+IHsgdHJ5IHsgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKF9TTV9TVE9SQUdFX0RJUikgfHwgJ2Rlc2MnOyAgICAgICAgIH0gY2F0Y2ggKF8pIHsgcmV0dXJuICdkZXNjJzsgICAgICAgICB9IH0pKCk7XG5cbmxldCBfc21BY3RpdmVDYWNoZSA9IFtdO1xubGV0IF9zbVNhdmVkQ2FjaGUgID0gW107XG5cbi8vIFx1MjUwMFx1MjUwMCBSZW5kZXIgaGVscGVycyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gX3JlbmRlckFjdGl2ZVNlc3Npb25Sb3dzKGFjdGl2ZVNlc3Npb25zKSB7XG4gIGlmICghYWN0aXZlU2Vzc2lvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICc8cCBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItZW1wdHlcIj5ObyBhY3RpdmUgaW4tbWVtb3J5IHNlc3Npb25zLjwvcD4nO1xuICB9XG5cbiAgY29uc3QgY3VycmVudFNlc3Npb25JZCA9IF9nZXRDdXJyZW50U2Vzc2lvbklkVmFsdWUoKTtcblxuICByZXR1cm4gYDxkaXYgY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLWxpc3RcIj4ke2FjdGl2ZVNlc3Npb25zLm1hcChzZXNzaW9uID0+IHtcbiAgICBjb25zdCBvd25lcnNoaXAgPSBnZXRBY3RpdmVTZXNzaW9uT3duZXJzaGlwTWV0YShzZXNzaW9uLCB7IGN1cnJlbnRTZXNzaW9uSWQgfSk7XG4gICAgY29uc3Qgb3BlbkhyZWYgPSBgLz9zZXNzaW9uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlc3Npb24uc2Vzc2lvbl9pZCB8fCAnJyl9YDtcbiAgICBjb25zdCBhY3Rpb25IdG1sID0gb3duZXJzaGlwLmlzQ3VycmVudFxuICAgICAgPyAnPHNwYW4gY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLWJ0blwiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+Q3VycmVudDwvc3Bhbj4nXG4gICAgICA6IGA8YSBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItbGlua1wiIGhyZWY9XCIke29wZW5IcmVmfVwiPk9wZW48L2E+YDtcbiAgICByZXR1cm4gYFxuICAgICAgPGRpdiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLXJvdy1tYWluXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItcm93LXRpdGxlXCI+XG4gICAgICAgICAgICA8c3Ryb25nPiR7ZXNjYXBlSHRtbChzZXNzaW9uLnBvc2l0aW9uX25hbWUgfHwgJ1VudGl0bGVkJyl9PC9zdHJvbmc+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlc3Npb24tc3RhdHVzLXBpbGwgJHtvd25lcnNoaXAuY2xhc3NOYW1lfVwiPjxzcGFuIGNsYXNzPVwic2Vzc2lvbi1zdGF0dXMtZG90XCI+PC9zcGFuPiR7ZXNjYXBlSHRtbChvd25lcnNoaXAubGFiZWwpfTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1yb3ctbWV0YVwiPlxuICAgICAgICAgICAgJHtlc2NhcGVIdG1sKGZvcm1hdFNlc3Npb25QaGFzZUxhYmVsKHNlc3Npb24ucGhhc2UpKX0gXHUwMEI3IENyZWF0ZWQgJHtlc2NhcGVIdG1sKGZvcm1hdFNlc3Npb25UaW1lc3RhbXAoc2Vzc2lvbi5jcmVhdGVkKSl9IFx1MDBCNyBMYXN0IG1vZGlmaWVkICR7ZXNjYXBlSHRtbChmb3JtYXRTZXNzaW9uVGltZXN0YW1wKHNlc3Npb24ubGFzdF9tb2RpZmllZCkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItYWN0aW9uc1wiPiR7YWN0aW9uSHRtbH08L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gIH0pLmpvaW4oJycpfTwvZGl2PmA7XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJTYXZlZFNlc3Npb25Sb3dzKHNhdmVkU2Vzc2lvbnMsIHsgaW5jbHVkZU1hbmFnZW1lbnQgPSBmYWxzZSB9ID0ge30pIHtcbiAgaWYgKCFzYXZlZFNlc3Npb25zLmxlbmd0aCkge1xuICAgIHJldHVybiAnPHAgY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLWVtcHR5XCI+Tm8gc2F2ZWQgc2Vzc2lvbnMgZm91bmQuPC9wPic7XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlZElzb0Zyb21TZXNzaW9uUGF0aChzZXNzaW9uUGF0aCkge1xuICAgIGlmICghc2Vzc2lvblBhdGgpIHJldHVybiAnJztcbiAgICBjb25zdCBwYXRoVGV4dCA9IFN0cmluZyhzZXNzaW9uUGF0aCk7XG4gICAgY29uc3QgcGFydHMgPSBwYXRoVGV4dC5zcGxpdCgvW1xcXFwvXS8pLmZpbHRlcihCb29sZWFuKTtcbiAgICBpZiAocGFydHMubGVuZ3RoIDwgMikgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgZGlyTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdO1xuICAgIGNvbnN0IG1hdGNoID0gZGlyTmFtZS5tYXRjaCgvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pW18tXT8oXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkvKTtcbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBbLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBtYXRjaDtcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9VCR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfVpgO1xuICB9XG5cbiAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1saXN0XCI+JHtzYXZlZFNlc3Npb25zLm1hcCgoc2Vzc2lvbiwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBlc2NhcGVkUGF0aCA9IGVzY2FwZUh0bWwoc2Vzc2lvbi5wYXRoIHx8ICcnKTtcbiAgICBjb25zdCBjcmVhdGVkSXNvID0gX2NyZWF0ZWRJc29Gcm9tU2Vzc2lvblBhdGgoc2Vzc2lvbi5wYXRoKTtcbiAgICBjb25zdCBjcmVhdGVkTGFiZWwgPSBjcmVhdGVkSXNvID8gZm9ybWF0U2Vzc2lvblRpbWVzdGFtcChjcmVhdGVkSXNvKSA6ICdcdTIwMTQnO1xuICAgIGNvbnN0IHNhdmVkTGFiZWwgPSBmb3JtYXRTZXNzaW9uVGltZXN0YW1wKHNlc3Npb24udGltZXN0YW1wKTtcbiAgICBjb25zdCBzYXZlZE1ldGEgPSBzYXZlZExhYmVsID09PSAnXHUyMDE0JyA/ICcnIDogYCBcdTAwQjcgU2F2ZWQgJHtlc2NhcGVIdG1sKHNhdmVkTGFiZWwpfWA7XG4gICAgY29uc3QgbWFuYWdlbWVudEh0bWwgPSBpbmNsdWRlTWFuYWdlbWVudFxuICAgICAgPyBgXG4gICAgICAgIDxidXR0b24gZGF0YS1zbS1hY3Rpb249XCJyZW5hbWVcIiBkYXRhLXNtLXBhdGg9XCIke2VzY2FwZWRQYXRofVwiIGRhdGEtc20taWR4PVwiJHtpbmRleH1cIiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItYnRuXCIgdGl0bGU9XCJSZW5hbWUgc2Vzc2lvblwiPlJlbmFtZTwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGRhdGEtc20tYWN0aW9uPVwiZGVsZXRlXCIgZGF0YS1zbS1wYXRoPVwiJHtlc2NhcGVkUGF0aH1cIiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItYnRuIGRhbmdlclwiIHRpdGxlPVwiTW92ZSBzZXNzaW9uIHRvIFRyYXNoXCI+TW92ZSB0byBUcmFzaDwvYnV0dG9uPmBcbiAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gYFxuICAgICAgPGRpdiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLXJvdy1tYWluXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItcm93LXRpdGxlXCI+XG4gICAgICAgICAgICA8c3Ryb25nIGlkPVwic20tbmFtZS0ke2luZGV4fVwiPiR7ZXNjYXBlSHRtbChzZXNzaW9uLnBvc2l0aW9uX25hbWUgfHwgJ1VudGl0bGVkJyl9PC9zdHJvbmc+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlc3Npb24tc3RhdHVzLXBpbGwgc2Vzc2lvbi1zdGF0dXMtc2F2ZWRcIj48c3BhbiBjbGFzcz1cInNlc3Npb24tc3RhdHVzLWRvdFwiPjwvc3Bhbj5TYXZlZDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGlkPVwic20tcmVuYW1lLSR7aW5kZXh9XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7bWFyZ2luOjhweCAwIDRweDtcIj5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInNtLWlucHV0LSR7aW5kZXh9XCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIiR7ZXNjYXBlSHRtbChzZXNzaW9uLnBvc2l0aW9uX25hbWUgfHwgJycpfVwiIGNsYXNzPVwic20ta2V5LWlucHV0XCIgZGF0YS1zbS1wYXRoPVwiJHtlc2NhcGVkUGF0aH1cIiBkYXRhLXNtLWlkeD1cIiR7aW5kZXh9XCIgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICMzYjgyZjY7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo2cHggMTBweDtmb250LXNpemU6MTNweDtmbGV4OjE7bWluLXdpZHRoOjA7XCI+XG4gICAgICAgICAgICA8YnV0dG9uIGRhdGEtc20tYWN0aW9uPVwic3VibWl0LXJlbmFtZVwiIGRhdGEtc20tcGF0aD1cIiR7ZXNjYXBlZFBhdGh9XCIgZGF0YS1zbS1pZHg9XCIke2luZGV4fVwiIGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1idG5cIj5TYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGRhdGEtc20tYWN0aW9uPVwiY2FuY2VsLXJlbmFtZVwiIGRhdGEtc20taWR4PVwiJHtpbmRleH1cIiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItYnRuXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItcm93LW1ldGFcIj5cbiAgICAgICAgICAgICR7ZXNjYXBlSHRtbChmb3JtYXRTZXNzaW9uUGhhc2VMYWJlbChzZXNzaW9uLnBoYXNlKSl9IFx1MDBCNyBDcmVhdGVkICR7ZXNjYXBlSHRtbChjcmVhdGVkTGFiZWwpfSR7c2F2ZWRNZXRhfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gZGF0YS1zbS1hY3Rpb249XCJsb2FkXCIgZGF0YS1zbS1wYXRoPVwiJHtlc2NhcGVkUGF0aH1cIiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItbGlua1wiPkxvYWQ8L2J1dHRvbj5cbiAgICAgICAgICAke21hbmFnZW1lbnRIdG1sfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gIH0pLmpvaW4oJycpfTwvZGl2PmA7XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJTZXNzaW9uU3dpdGNoZXJTZWN0aW9ucyhhY3RpdmVTZXNzaW9ucywgc2F2ZWRTZXNzaW9ucywgeyBpbmNsdWRlU2F2ZWRNYW5hZ2VtZW50ID0gZmFsc2UgfSA9IHt9KSB7XG4gIGNvbnN0IHNhdmVkU2VjdGlvbk5vdGUgPSBpbmNsdWRlU2F2ZWRNYW5hZ2VtZW50XG4gICAgPyAnTG9hZCBmcm9tIGRpc2ssIHJlbmFtZSwgb3IgbW92ZSBzYXZlZCB3b3JrIHRvIFRyYXNoLidcbiAgICA6ICdMb2FkIHNhdmVkIHdvcmsgZnJvbSBkaXNrLic7XG5cbiAgcmV0dXJuIGBcbiAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1zZWN0aW9uc1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICA8aDM+QWN0aXZlIFNlc3Npb25zPC9oMz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItc2VjdGlvbi1ub3RlXCI+SW4tbWVtb3J5IHNlc3Npb25zIHRoYXQgY2FuIGJlIG9wZW5lZCBkaXJlY3RseS48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAke19yZW5kZXJBY3RpdmVTZXNzaW9uUm93cyhhY3RpdmVTZXNzaW9ucyl9XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1zd2l0Y2hlci1zZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICAgIDxoMz5TYXZlZCBTZXNzaW9uczwvaDM+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXNzaW9uLXN3aXRjaGVyLXNlY3Rpb24tbm90ZVwiPiR7c2F2ZWRTZWN0aW9uTm90ZX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAke19yZW5kZXJTYXZlZFNlc3Npb25Sb3dzKHNhdmVkU2Vzc2lvbnMsIHsgaW5jbHVkZU1hbmFnZW1lbnQ6IGluY2x1ZGVTYXZlZE1hbmFnZW1lbnQgfSl9XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gX3VwZGF0ZVNlc3Npb25Td2l0Y2hlckhlYWRlcihzdGF0dXMgPSB7fSkge1xuICBjb25zdCBsYWJlbCA9IGJ1aWxkU2Vzc2lvblN3aXRjaGVyTGFiZWwoc3RhdHVzKTtcbiAgY29uc3Qgc3dpdGNoZXJMYWJlbEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nlc3Npb24tc3dpdGNoZXItbGFiZWwnKTtcbiAgY29uc3Qgc3dpdGNoZXJCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Vzc2lvbi1zd2l0Y2hlci1idG4nKTtcbiAgY29uc3Qgc3VidGl0bGVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWFkZXItc2Vzc2lvbi1uYW1lJyk7XG4gIGNvbnN0IGhhc1Nlc3Npb24gPSBCb29sZWFuKF9nZXRDdXJyZW50U2Vzc2lvbklkVmFsdWUoKSk7XG5cbiAgaWYgKHN3aXRjaGVyTGFiZWxFbCkgc3dpdGNoZXJMYWJlbEVsLnRleHRDb250ZW50ID0gbGFiZWw7XG4gIGlmIChzd2l0Y2hlckJ0bikgc3dpdGNoZXJCdG4uY2xhc3NMaXN0LnRvZ2dsZSgnaXMtc2Vzc2lvbi1hY3RpdmUnLCBoYXNTZXNzaW9uKTtcbiAgaWYgKHN1YnRpdGxlRWwpIHtcbiAgICBzdWJ0aXRsZUVsLnRleHRDb250ZW50ID0gaGFzU2Vzc2lvbiA/IGBDdXJyZW50IHNlc3Npb246ICR7bGFiZWx9YCA6ICdTZWxlY3Qgb3IgY3JlYXRlIGEgc2Vzc2lvbic7XG4gIH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIE93bmVyc2hpcCBjb25mbGljdCBkaWFsb2cgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIHNob3dPd25lcnNoaXBDb25mbGljdERpYWxvZyhtZXNzYWdlID0gJ1RoaXMgc2Vzc2lvbiBpcyBjdXJyZW50bHkgY2xhaW1lZCBieSBhbm90aGVyIGJyb3dzZXIgdGFiLicpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3duZXJzaGlwLWNvbmZsaWN0LW92ZXJsYXknKTtcbiAgICBjb25zdCBtZXNzYWdlRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3duZXJzaGlwLWNvbmZsaWN0LW1lc3NhZ2UnKTtcbiAgICBjb25zdCBsb2FkRGlmZmVyZW50QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ293bmVyc2hpcC1sb2FkLWRpZmZlcmVudC1idG4nKTtcbiAgICBjb25zdCBuZXdTZXNzaW9uQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ293bmVyc2hpcC1uZXctc2Vzc2lvbi1idG4nKTtcbiAgICBjb25zdCB0YWtlb3ZlckJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvd25lcnNoaXAtdGFrZW92ZXItYnRuJyk7XG4gICAgaWYgKCFvdmVybGF5IHx8ICFtZXNzYWdlRWwgfHwgIWxvYWREaWZmZXJlbnRCdG4gfHwgIW5ld1Nlc3Npb25CdG4gfHwgIXRha2VvdmVyQnRuKSB7XG4gICAgICByZXNvbHZlKCdkaWZmZXJlbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGVhbnVwID0gKGNob2ljZSkgPT4ge1xuICAgICAgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgcmVzdG9yZUZvY3VzKCk7XG4gICAgICBsb2FkRGlmZmVyZW50QnRuLm9uY2xpY2sgPSBudWxsO1xuICAgICAgbmV3U2Vzc2lvbkJ0bi5vbmNsaWNrID0gbnVsbDtcbiAgICAgIHRha2VvdmVyQnRuLm9uY2xpY2sgPSBudWxsO1xuICAgICAgcmVzb2x2ZShjaG9pY2UpO1xuICAgIH07XG5cbiAgICBtZXNzYWdlRWwudGV4dENvbnRlbnQgPSBtZXNzYWdlO1xuICAgIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICB3aW5kb3cuX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIHNldEluaXRpYWxGb2N1cygnb3duZXJzaGlwLWNvbmZsaWN0LW92ZXJsYXknKTtcbiAgICB0cmFwRm9jdXMoJ293bmVyc2hpcC1jb25mbGljdC1vdmVybGF5Jyk7XG5cbiAgICBsb2FkRGlmZmVyZW50QnRuLm9uY2xpY2sgPSAoKSA9PiBjbGVhbnVwKCdkaWZmZXJlbnQnKTtcbiAgICBuZXdTZXNzaW9uQnRuLm9uY2xpY2sgPSAoKSA9PiBjbGVhbnVwKCduZXcnKTtcbiAgICB0YWtlb3ZlckJ0bi5vbmNsaWNrID0gKCkgPT4gY2xlYW51cCgndGFrZW92ZXInKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlT3duZXJzaGlwQ29uZmxpY3REaWFsb2coY2hvaWNlID0gJ2RpZmZlcmVudCcpIHtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvd25lcnNoaXAtY29uZmxpY3Qtb3ZlcmxheScpO1xuICBpZiAob3ZlcmxheSkgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXN0b3JlRm9jdXMoKTtcbiAgY29uc3QgbG9hZERpZmZlcmVudEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvd25lcnNoaXAtbG9hZC1kaWZmZXJlbnQtYnRuJyk7XG4gIGlmIChsb2FkRGlmZmVyZW50QnRuICYmIHR5cGVvZiBsb2FkRGlmZmVyZW50QnRuLm9uY2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICBsb2FkRGlmZmVyZW50QnRuLm9uY2xpY2soKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIGNob2ljZTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIFNlc3Npb24gZmlsZS1icm93c2VyIHRhYmxlIGhlbHBlcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIF9zZXRTbVNvcnQoa2V5KSB7XG4gIGlmIChfc21Tb3J0S2V5ID09PSBrZXkpIHtcbiAgICBfc21Tb3J0RGlyID0gX3NtU29ydERpciA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJztcbiAgfSBlbHNlIHtcbiAgICBfc21Tb3J0S2V5ID0ga2V5O1xuICAgIF9zbVNvcnREaXIgPSBrZXkgPT09ICdsYXN0TW9kaWZpZWQnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gIH1cbiAgdHJ5IHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShfU01fU1RPUkFHRV9LRVksIF9zbVNvcnRLZXkpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKF9TTV9TVE9SQUdFX0RJUiwgX3NtU29ydERpcik7XG4gIH0gY2F0Y2ggKF8pIHsgLyogc3RvcmFnZSB1bmF2YWlsYWJsZSAqLyB9XG4gIF9yZW5kZXJTZXNzaW9uVGFibGVGcm9tQ2FjaGUoKTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZWRJc29Gcm9tU2Vzc2lvblBhdGgoc2Vzc2lvblBhdGgpIHtcbiAgaWYgKCFzZXNzaW9uUGF0aCkgcmV0dXJuICcnO1xuICBjb25zdCBwYXRoVGV4dCA9IFN0cmluZyhzZXNzaW9uUGF0aCk7XG4gIGNvbnN0IHBhcnRzICAgID0gcGF0aFRleHQuc3BsaXQoL1tcXFxcL10vKS5maWx0ZXIoQm9vbGVhbik7XG4gIGlmIChwYXJ0cy5sZW5ndGggPCAyKSByZXR1cm4gJyc7XG4gIGNvbnN0IGRpck5hbWUgID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl07XG4gIGNvbnN0IG1hdGNoICAgID0gZGlyTmFtZS5tYXRjaCgvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pW18tXT8oXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkvKTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuICcnO1xuICBjb25zdCBbLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBtYXRjaDtcbiAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fVQke2hvdXJ9OiR7bWludXRlfToke3NlY29uZH1aYDtcbn1cblxuZnVuY3Rpb24gX25vcm1hbGl6ZVNlc3Npb25zRm9yVGFibGUoYWN0aXZlU2Vzc2lvbnMsIHNhdmVkU2Vzc2lvbnMpIHtcbiAgY29uc3QgY3VycmVudFNlc3Npb25JZCA9IF9nZXRDdXJyZW50U2Vzc2lvbklkVmFsdWUoKTtcbiAgY29uc3Qgcm93cyA9IFtdO1xuXG4gIGZvciAoY29uc3QgcyBvZiBhY3RpdmVTZXNzaW9ucykge1xuICAgIGNvbnN0IG93bmVyc2hpcCA9IGdldEFjdGl2ZVNlc3Npb25Pd25lcnNoaXBNZXRhKHMsIHsgY3VycmVudFNlc3Npb25JZCB9KTtcbiAgICByb3dzLnB1c2goe1xuICAgICAgdHlwZTogICAgICAgICAgICAgICdhY3RpdmUnLFxuICAgICAgbmFtZTogICAgICAgICAgICAgICBzLnBvc2l0aW9uX25hbWUgfHwgJ1VudGl0bGVkJyxcbiAgICAgIGNvbXBhbnk6ICAgICAgICAgICAgcy5jb21wYW55IHx8ICcnLFxuICAgICAgcGhhc2U6ICAgICAgICAgICAgICBzLnBoYXNlICAgICAgICAgfHwgJycsXG4gICAgICBhcHBsaWNhdGlvblN0YXR1czogIHMuYXBwbGljYXRpb25fc3RhdHVzIHx8ICcnLFxuICAgICAgYXRzU2NvcmU6ICAgICAgICAgICBzLmF0c19zY29yZSA/PyBudWxsLFxuICAgICAgbGFzdE1vZGlmaWVkOiAgICAgICBzLmxhc3RfbW9kaWZpZWQgID8gbmV3IERhdGUocy5sYXN0X21vZGlmaWVkKSA6IG51bGwsXG4gICAgICBjcmVhdGVkOiAgICAgICAgICAgIHMuY3JlYXRlZCAgICAgICAgPyBuZXcgRGF0ZShzLmNyZWF0ZWQpICAgICAgIDogbnVsbCxcbiAgICAgIG93bmVyc2hpcCxcbiAgICAgIHNlc3Npb25JZDogICAgICAgICAgcy5zZXNzaW9uX2lkLFxuICAgICAgcGF0aDogICAgICAgICAgICAgICBudWxsLFxuICAgICAgaWR4OiAgICAgICAgICAgICAgICBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgc2F2ZWRTZXNzaW9ucy5mb3JFYWNoKChzLCBpZHgpID0+IHtcbiAgICBjb25zdCBjcmVhdGVkSXNvID0gX2NyZWF0ZWRJc29Gcm9tU2Vzc2lvblBhdGgocy5wYXRoKTtcbiAgICByb3dzLnB1c2goe1xuICAgICAgdHlwZTogICAgICAgICAgICAgICdzYXZlZCcsXG4gICAgICBuYW1lOiAgICAgICAgICAgICAgIHMucG9zaXRpb25fbmFtZSB8fCAnVW50aXRsZWQnLFxuICAgICAgY29tcGFueTogICAgICAgICAgICBzLmNvbXBhbnkgfHwgJycsXG4gICAgICBwaGFzZTogICAgICAgICAgICAgIHMucGhhc2UgICAgICAgICB8fCAnJyxcbiAgICAgIGFwcGxpY2F0aW9uU3RhdHVzOiAgcy5hcHBsaWNhdGlvbl9zdGF0dXMgfHwgJycsXG4gICAgICBub3RlczogICAgICAgICAgICAgIHMubm90ZXMgfHwgJycsXG4gICAgICBhdHNTY29yZTogICAgICAgICAgIHMuYXRzX3Njb3JlID8/IG51bGwsXG4gICAgICBsYXN0TW9kaWZpZWQ6ICAgICAgIHMudGltZXN0YW1wICA/IG5ldyBEYXRlKHMudGltZXN0YW1wKSAgOiBudWxsLFxuICAgICAgY3JlYXRlZDogICAgICAgICAgICBjcmVhdGVkSXNvICAgPyBuZXcgRGF0ZShjcmVhdGVkSXNvKSAgIDogbnVsbCxcbiAgICAgIG93bmVyc2hpcDogICAgICAgICAgbnVsbCxcbiAgICAgIHNlc3Npb25JZDogICAgICAgICAgbnVsbCxcbiAgICAgIHBhdGg6ICAgICAgICAgICAgICAgcy5wYXRoLFxuICAgICAgaWR4LFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcm93cztcbn1cblxuZnVuY3Rpb24gX3NvcnRTZXNzaW9uUm93cyhyb3dzLCBrZXksIGRpcikge1xuICByZXR1cm4gWy4uLnJvd3NdLnNvcnQoKGEsIGIpID0+IHtcbiAgICBsZXQgYXYsIGJ2O1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICduYW1lJzpcbiAgICAgICAgYXYgPSAoYS5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBidiA9IChiLm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBkaXIgPT09ICdhc2MnID8gYXYubG9jYWxlQ29tcGFyZShidikgOiBidi5sb2NhbGVDb21wYXJlKGF2KTtcbiAgICAgIGNhc2UgJ3N0YXR1cyc6IHtcbiAgICAgICAgY29uc3QgcmFuayA9IHIgPT4gci50eXBlID09PSAnYWN0aXZlJyA/IChyLm93bmVyc2hpcD8uaXNDdXJyZW50ID8gMCA6IDEpIDogMjtcbiAgICAgICAgYXYgPSByYW5rKGEpOyBidiA9IHJhbmsoYik7XG4gICAgICAgIHJldHVybiBkaXIgPT09ICdhc2MnID8gYXYgLSBidiA6IGJ2IC0gYXY7XG4gICAgICB9XG4gICAgICBjYXNlICdwaGFzZSc6XG4gICAgICAgIGF2ID0gKGEucGhhc2UgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGJ2ID0gKGIucGhhc2UgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBkaXIgPT09ICdhc2MnID8gYXYubG9jYWxlQ29tcGFyZShidikgOiBidi5sb2NhbGVDb21wYXJlKGF2KTtcbiAgICAgIGNhc2UgJ2xhc3RNb2RpZmllZCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhdiA9IGEubGFzdE1vZGlmaWVkID8gYS5sYXN0TW9kaWZpZWQuZ2V0VGltZSgpIDogMDtcbiAgICAgICAgYnYgPSBiLmxhc3RNb2RpZmllZCA/IGIubGFzdE1vZGlmaWVkLmdldFRpbWUoKSA6IDA7XG4gICAgICAgIHJldHVybiBkaXIgPT09ICdhc2MnID8gYXYgLSBidiA6IGJ2IC0gYXY7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gX3JlbmRlclNlc3Npb25UYWJsZUhlYWRlcigpIHtcbiAgY29uc3QgY29scyA9IFtcbiAgICB7IGtleTogJ25hbWUnLCAgICAgICAgIGxhYmVsOiAnTmFtZScgICAgIH0sXG4gICAgeyBrZXk6ICdzdGF0dXMnLCAgICAgICBsYWJlbDogJ1N0YXR1cycgICB9LFxuICAgIHsga2V5OiAncGhhc2UnLCAgICAgICAgbGFiZWw6ICdQaGFzZScgICAgfSxcbiAgICB7IGtleTogJ2xhc3RNb2RpZmllZCcsIGxhYmVsOiAnTW9kaWZpZWQnIH0sXG4gIF07XG4gIGNvbnN0IGNlbGxzID0gY29scy5tYXAoKHsga2V5LCBsYWJlbCB9KSA9PiB7XG4gICAgY29uc3QgYWN0aXZlID0gX3NtU29ydEtleSA9PT0ga2V5O1xuICAgIGNvbnN0IGljb24gICA9IGFjdGl2ZSA/IChfc21Tb3J0RGlyID09PSAnYXNjJyA/ICdcXHUyNWIyJyA6ICdcXHUyNWJjJykgOiAnXFx1MjFjNSc7XG4gICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cInNtLXRoJHthY3RpdmUgPyAnIHNtLXRoLXNvcnRlZCcgOiAnJ31cIiBkYXRhLXNtLXNvcnQ9XCIke2tleX1cIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgdGl0bGU9XCJTb3J0IGJ5ICR7bGFiZWx9XCI+JHtlc2NhcGVIdG1sKGxhYmVsKX0gPHNwYW4gY2xhc3M9XCJzbS1zb3J0LWljb24ke2FjdGl2ZSA/ICcgc20tc29ydC1hY3RpdmUnIDogJyd9XCI+JHtpY29ufTwvc3Bhbj48L3NwYW4+YDtcbiAgfSk7XG4gIHJldHVybiBgPGRpdiBjbGFzcz1cInNtLXRoZWFkXCI+JHtjZWxscy5qb2luKCcnKX08c3BhbiBjbGFzcz1cInNtLXRoIHNtLXRoLWFjdGlvbnNcIj5BY3Rpb25zPC9zcGFuPjwvZGl2PmA7XG59XG5cbmZ1bmN0aW9uIF9mbXREYXRlQ29tcGFjdChkKSB7XG4gIGlmICghZCkgcmV0dXJuICdcXHUyMDE0JztcbiAgdHJ5IHtcbiAgICByZXR1cm4gZC50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICBtb250aDogJ251bWVyaWMnLCBkYXk6ICdudW1lcmljJywgeWVhcjogJzItZGlnaXQnLFxuICAgICAgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICB9KTtcbiAgfSBjYXRjaCAoXykgeyByZXR1cm4gJ1xcdTIwMTQnOyB9XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJTZXNzaW9uVGFibGVSb3cocm93KSB7XG4gIGNvbnN0IHBoYXNlTGFiZWwgPSBlc2NhcGVIdG1sKGZvcm1hdFNlc3Npb25QaGFzZUxhYmVsKHJvdy5waGFzZSkpO1xuICBjb25zdCBtb2RMYWJlbCAgID0gZXNjYXBlSHRtbChfZm10RGF0ZUNvbXBhY3Qocm93Lmxhc3RNb2RpZmllZCkpO1xuXG4gIGNvbnN0IHN0YXR1c1BpbGwgPSByb3cudHlwZSA9PT0gJ2FjdGl2ZSdcbiAgICA/IGA8c3BhbiBjbGFzcz1cInNlc3Npb24tc3RhdHVzLXBpbGwgJHtyb3cub3duZXJzaGlwLmNsYXNzTmFtZX1cIj48c3BhbiBjbGFzcz1cInNlc3Npb24tc3RhdHVzLWRvdFwiPjwvc3Bhbj4ke2VzY2FwZUh0bWwocm93Lm93bmVyc2hpcC5sYWJlbCl9PC9zcGFuPmBcbiAgICA6IGA8c3BhbiBjbGFzcz1cInNlc3Npb24tc3RhdHVzLXBpbGwgc2Vzc2lvbi1zdGF0dXMtc2F2ZWRcIj48c3BhbiBjbGFzcz1cInNlc3Npb24tc3RhdHVzLWRvdFwiPjwvc3Bhbj5TYXZlZDwvc3Bhbj5gO1xuXG4gIGxldCBhY3Rpb25IdG1sO1xuICBpZiAocm93LnR5cGUgPT09ICdhY3RpdmUnKSB7XG4gICAgY29uc3QgaHJlZiA9IGAvP3Nlc3Npb249JHtlbmNvZGVVUklDb21wb25lbnQocm93LnNlc3Npb25JZCB8fCAnJyl9YDtcbiAgICBhY3Rpb25IdG1sID0gcm93Lm93bmVyc2hpcC5pc0N1cnJlbnRcbiAgICAgID8gJzxzcGFuIGNsYXNzPVwic20tYnRuIHNtLWJ0bi1kaXNhYmxlZFwiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+Q3VycmVudDwvc3Bhbj4nXG4gICAgICA6IGA8YSBjbGFzcz1cInNtLWJ0biBzbS1idG4tb3BlblwiIGhyZWY9XCIke2hyZWZ9XCI+T3BlbjwvYT5gO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVwICA9IGVzY2FwZUh0bWwocm93LnBhdGggfHwgJycpO1xuICAgIGNvbnN0IGlkeCA9IHJvdy5pZHg7XG4gICAgYWN0aW9uSHRtbCA9XG4gICAgICBgPGJ1dHRvbiBkYXRhLXNtLWFjdGlvbj1cImxvYWRcIiAgIGRhdGEtc20tcGF0aD1cIiR7ZXB9XCIgY2xhc3M9XCJzbS1idG4gc20tYnRuLW9wZW4gc20tYnRuLWljb25cIiB0aXRsZT1cIkxvYWQgc2Vzc2lvblwiIGFyaWEtbGFiZWw9XCJMb2FkIHNlc3Npb25cIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLWZvbGRlci1vcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYnV0dG9uPmAgK1xuICAgICAgYDxidXR0b24gZGF0YS1zbS1hY3Rpb249XCJyZW5hbWVcIiBkYXRhLXNtLXBhdGg9XCIke2VwfVwiIGRhdGEtc20taWR4PVwiJHtpZHh9XCIgY2xhc3M9XCJzbS1idG4gc20tYnRuLWljb25cIiB0aXRsZT1cIlJlbmFtZSBzZXNzaW9uXCIgYXJpYS1sYWJlbD1cIlJlbmFtZSBzZXNzaW9uXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1wZW5jaWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9idXR0b24+YCArXG4gICAgICBgPGJ1dHRvbiBkYXRhLXNtLWFjdGlvbj1cImR1cGxpY2F0ZVwiIGRhdGEtc20tcGF0aD1cIiR7ZXB9XCIgY2xhc3M9XCJzbS1idG4gc20tYnRuLWljb25cIiB0aXRsZT1cIkR1cGxpY2F0ZSBzZXNzaW9uXCIgYXJpYS1sYWJlbD1cIkR1cGxpY2F0ZSBzZXNzaW9uXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jb3B5XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYnV0dG9uPmAgK1xuICAgICAgYDxidXR0b24gZGF0YS1zbS1hY3Rpb249XCJkZWxldGVcIiBkYXRhLXNtLXBhdGg9XCIke2VwfVwiIGNsYXNzPVwic20tYnRuIHNtLWJ0bi1kYW5nZXIgc20tYnRuLWljb25cIiB0aXRsZT1cIk1vdmUgdG8gVHJhc2hcIiBhcmlhLWxhYmVsPVwiTW92ZSBzZXNzaW9uIHRvIFRyYXNoXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2J1dHRvbj5gO1xuICB9XG5cbiAgY29uc3Qgcm93Q2xhc3MgPSAocm93LnR5cGUgPT09ICdhY3RpdmUnICYmIHJvdy5vd25lcnNoaXAuaXNDdXJyZW50KSA/ICdzbS10ciBzbS10ci1jdXJyZW50JyA6ICdzbS10cic7XG5cbiAgY29uc3QgY29tcGFueVN1YiA9IHJvdy5jb21wYW55XG4gICAgPyBgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTowLjhlbTtjb2xvcjojOTRhM2I4O21hcmdpbi10b3A6MXB4O1wiPiR7ZXNjYXBlSHRtbChyb3cuY29tcGFueSl9PC9kaXY+YFxuICAgIDogJyc7XG4gIGNvbnN0IG5hbWVDZWxsID0gcm93LnR5cGUgPT09ICdzYXZlZCdcbiAgICA/IGA8c3BhbiBpZD1cInNtLW5hbWUtJHtyb3cuaWR4fVwiPiR7ZXNjYXBlSHRtbChyb3cubmFtZSl9PC9zcGFuPmAgK1xuICAgICAgYCR7Y29tcGFueVN1Yn1gICtcbiAgICAgIGA8c3BhbiBpZD1cInNtLXJlbmFtZS0ke3Jvdy5pZHh9XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo0cHg7bWFyZ2luLXRvcDozcHg7XCI+YCArXG4gICAgICAgIGA8aW5wdXQgaWQ9XCJzbS1pbnB1dC0ke3Jvdy5pZHh9XCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIiR7ZXNjYXBlSHRtbChyb3cubmFtZSl9XCIgY2xhc3M9XCJzbS1rZXktaW5wdXRcImAgK1xuICAgICAgICAgIGAgZGF0YS1zbS1wYXRoPVwiJHtlc2NhcGVIdG1sKHJvdy5wYXRoIHx8ICcnKX1cIiBkYXRhLXNtLWlkeD1cIiR7cm93LmlkeH1cImAgK1xuICAgICAgICAgIGAgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICMzYjgyZjY7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzozcHggOHB4O2ZvbnQtc2l6ZToxMnB4O2ZsZXg6MTttaW4td2lkdGg6NjBweDtcIj5gICtcbiAgICAgICAgYDxidXR0b24gZGF0YS1zbS1hY3Rpb249XCJzdWJtaXQtcmVuYW1lXCIgZGF0YS1zbS1wYXRoPVwiJHtlc2NhcGVIdG1sKHJvdy5wYXRoIHx8ICcnKX1cIiBkYXRhLXNtLWlkeD1cIiR7cm93LmlkeH1cIiBjbGFzcz1cInNtLWJ0blwiIHRpdGxlPVwiU2F2ZSByZW5hbWVcIiBhcmlhLWxhYmVsPVwiU2F2ZSByZW5hbWVcIj5cXHUyNzEzPC9idXR0b24+YCArXG4gICAgICAgIGA8YnV0dG9uIGRhdGEtc20tYWN0aW9uPVwiY2FuY2VsLXJlbmFtZVwiIGRhdGEtc20taWR4PVwiJHtyb3cuaWR4fVwiIGNsYXNzPVwic20tYnRuXCIgdGl0bGU9XCJDYW5jZWwgcmVuYW1lXCIgYXJpYS1sYWJlbD1cIkNhbmNlbCByZW5hbWVcIj5cXHUyNzE1PC9idXR0b24+YCArXG4gICAgICBgPC9zcGFuPmBcbiAgICA6IGA8c3Bhbj4ke2VzY2FwZUh0bWwocm93Lm5hbWUpfTwvc3Bhbj4ke2NvbXBhbnlTdWJ9YDtcblxuICBjb25zdCBhcHBTdGF0dXNMYWJlbHMgPSB7XG4gICAgZHJhZnQ6ICdEcmFmdCcsIHJlYWR5OiAnUmVhZHknLCBzZW50OiAnU2VudCcsIHF1ZXVlZDogJ1F1ZXVlZCcsXG4gICAgaW50ZXJ2aWV3OiAnSW50ZXJ2aWV3JywgcmVqZWN0ZWQ6ICdSZWplY3RlZCcsIGFjY2VwdGVkOiAnQWNjZXB0ZWQnLFxuICAgIHBhcmtlZDogJ1BhcmtlZCcsXG4gIH07XG4gIGNvbnN0IGFwcFN0YXR1c0NvbG9ycyA9IHtcbiAgICBkcmFmdDogJyM5NGEzYjgnLCByZWFkeTogJyMzYjgyZjYnLCBzZW50OiAnIzIyYzU1ZScsIHF1ZXVlZDogJyNlYWIzMDgnLFxuICAgIGludGVydmlldzogJyNhODU1ZjcnLCByZWplY3RlZDogJyNlZjQ0NDQnLCBhY2NlcHRlZDogJyMwNTk2NjknLFxuICAgIHBhcmtlZDogJyNmOTczMTYnLFxuICB9O1xuICBjb25zdCBhcHBTdGF0dXMgPSByb3cuYXBwbGljYXRpb25TdGF0dXMgfHwgJyc7XG4gIGNvbnN0IGFwcFN0YXR1c0JhZGdlID0gYXBwU3RhdHVzICYmIGFwcFN0YXR1c0xhYmVsc1thcHBTdGF0dXNdXG4gICAgPyBgIDxzcGFuIGlkPVwic20tc3RhdHVzLWJhZGdlLSR7cm93LmlkeH1cIiBzdHlsZT1cImZvbnQtc2l6ZTowLjc1ZW07cGFkZGluZzoxcHggNnB4O2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6JHthcHBTdGF0dXNDb2xvcnNbYXBwU3RhdHVzXX07Y29sb3I6I2ZmZjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XCI+JHthcHBTdGF0dXNMYWJlbHNbYXBwU3RhdHVzXX08L3NwYW4+YFxuICAgIDogYDxzcGFuIGlkPVwic20tc3RhdHVzLWJhZGdlLSR7cm93LmlkeH1cIj48L3NwYW4+YDtcblxuICAvLyBTdGF0dXMtZWRpdCBpbmxpbmUgd2lkZ2V0IChzYXZlZCByb3dzIG9ubHkpXG4gIGNvbnN0IHN0YXR1c0VkaXRXaWRnZXQgPSByb3cudHlwZSA9PT0gJ3NhdmVkJ1xuICAgID8gYDxzcGFuIGlkPVwic20tc3RhdHVzLWVkaXQtJHtyb3cuaWR4fVwiIHN0eWxlPVwiZGlzcGxheTpub25lO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4O21hcmdpbi10b3A6MnB4O1wiPmAgK1xuICAgICAgICBgPHNlbGVjdCBpZD1cInNtLXN0YXR1cy1zZWwtJHtyb3cuaWR4fVwiIGNsYXNzPVwic20ta2V5LWlucHV0XCIgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICMzYjgyZjY7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoycHggNHB4O2ZvbnQtc2l6ZToxMnB4O1wiIGFyaWEtbGFiZWw9XCJTZWxlY3QgYXBwbGljYXRpb24gc3RhdHVzXCI+YCArXG4gICAgICAgICAgYDxvcHRpb24gdmFsdWU9XCJcIj4tLSBjbGVhciAtLTwvb3B0aW9uPmAgK1xuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGFwcFN0YXR1c0xhYmVscykubWFwKChbdiwgbF0pID0+XG4gICAgICAgICAgICBgPG9wdGlvbiB2YWx1ZT1cIiR7dn1cIiR7YXBwU3RhdHVzID09PSB2ID8gJyBzZWxlY3RlZCcgOiAnJ30+JHtsfTwvb3B0aW9uPmBcbiAgICAgICAgICApLmpvaW4oJycpICtcbiAgICAgICAgYDwvc2VsZWN0PmAgK1xuICAgICAgICBgPGJ1dHRvbiBkYXRhLXNtLWFjdGlvbj1cInN1Ym1pdC1zdGF0dXNcIiBkYXRhLXNtLXBhdGg9XCIke2VzY2FwZUh0bWwocm93LnBhdGggfHwgJycpfVwiIGRhdGEtc20taWR4PVwiJHtyb3cuaWR4fVwiIGNsYXNzPVwic20tYnRuXCIgdGl0bGU9XCJTYXZlIHN0YXR1c1wiIGFyaWEtbGFiZWw9XCJTYXZlIHN0YXR1c1wiPiYjMTAwMDM7PC9idXR0b24+YCArXG4gICAgICAgIGA8YnV0dG9uIGRhdGEtc20tYWN0aW9uPVwiY2FuY2VsLXN0YXR1c1wiIGRhdGEtc20taWR4PVwiJHtyb3cuaWR4fVwiIGNsYXNzPVwic20tYnRuXCIgdGl0bGU9XCJDYW5jZWxcIiBhcmlhLWxhYmVsPVwiQ2FuY2VsIHN0YXR1cyBlZGl0XCI+JiMxMDAwNTs8L2J1dHRvbj5gICtcbiAgICAgIGA8L3NwYW4+YFxuICAgIDogJyc7XG5cbiAgLy8gTm90ZXMtZWRpdCBpbmxpbmUgd2lkZ2V0IChzYXZlZCByb3dzIG9ubHkpXG4gIGNvbnN0IG5vdGVzUHJldmlldyA9IHJvdy5ub3Rlc1xuICAgID8gYDxkaXYgaWQ9XCJzbS1ub3Rlcy1wcmV2aWV3LSR7cm93LmlkeH1cIiBzdHlsZT1cImZvbnQtc2l6ZTowLjc4ZW07Y29sb3I6Izk0YTNiODttYXJnaW4tdG9wOjJweDttYXgtd2lkdGg6MjYwcHg7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO1wiIHRpdGxlPVwiJHtlc2NhcGVIdG1sKHJvdy5ub3Rlcyl9XCI+JHtlc2NhcGVIdG1sKHJvdy5ub3Rlcyl9PC9kaXY+YFxuICAgIDogYDxkaXYgaWQ9XCJzbS1ub3Rlcy1wcmV2aWV3LSR7cm93LmlkeH1cIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtmb250LXNpemU6MC43OGVtO2NvbG9yOiM5NGEzYjg7bWFyZ2luLXRvcDoycHg7XCI+PC9kaXY+YDtcbiAgY29uc3Qgbm90ZXNFZGl0V2lkZ2V0ID0gcm93LnR5cGUgPT09ICdzYXZlZCdcbiAgICA/IGA8c3BhbiBpZD1cInNtLW5vdGVzLWVkaXQtJHtyb3cuaWR4fVwiIHN0eWxlPVwiZGlzcGxheTpub25lO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O21hcmdpbi10b3A6NHB4O3dpZHRoOjEwMCU7XCI+YCArXG4gICAgICAgIGA8dGV4dGFyZWEgaWQ9XCJzbS1ub3Rlcy10YS0ke3Jvdy5pZHh9XCIgcm93cz1cIjJcIiBtYXhsZW5ndGg9XCIyMDAwXCJgICtcbiAgICAgICAgICBgIHN0eWxlPVwid2lkdGg6MTAwJTtmb250LXNpemU6MTJweDtwYWRkaW5nOjRweDtib3JkZXI6MXB4IHNvbGlkICMzYjgyZjY7Ym9yZGVyLXJhZGl1czo0cHg7cmVzaXplOnZlcnRpY2FsO1wiYCArXG4gICAgICAgICAgYCBhcmlhLWxhYmVsPVwiU2Vzc2lvbiBub3Rlc1wiIHBsYWNlaG9sZGVyPVwiZS5nLiwgSW50ZXJ2aWV3ZWQgMjAyNS0wMy0xMCwgYXdhaXRpbmcgY2FsbGJhY2tcIj4ke2VzY2FwZUh0bWwocm93Lm5vdGVzIHx8ICcnKX08L3RleHRhcmVhPmAgK1xuICAgICAgICBgPHNwYW4gc3R5bGU9XCJkaXNwbGF5OmZsZXg7Z2FwOjRweDtcIj5gICtcbiAgICAgICAgICBgPGJ1dHRvbiBkYXRhLXNtLWFjdGlvbj1cInN1Ym1pdC1ub3Rlc1wiIGRhdGEtc20tcGF0aD1cIiR7ZXNjYXBlSHRtbChyb3cucGF0aCB8fCAnJyl9XCIgZGF0YS1zbS1pZHg9XCIke3Jvdy5pZHh9XCIgY2xhc3M9XCJzbS1idG5cIiB0aXRsZT1cIlNhdmUgbm90ZXNcIiBhcmlhLWxhYmVsPVwiU2F2ZSBub3Rlc1wiPiYjMTAwMDM7PC9idXR0b24+YCArXG4gICAgICAgICAgYDxidXR0b24gZGF0YS1zbS1hY3Rpb249XCJjYW5jZWwtbm90ZXNcIiBkYXRhLXNtLWlkeD1cIiR7cm93LmlkeH1cIiBjbGFzcz1cInNtLWJ0blwiIHRpdGxlPVwiQ2FuY2VsXCIgYXJpYS1sYWJlbD1cIkNhbmNlbCBub3RlcyBlZGl0XCI+JiMxMDAwNTs8L2J1dHRvbj5gICtcbiAgICAgICAgYDwvc3Bhbj5gICtcbiAgICAgIGA8L3NwYW4+YFxuICAgIDogJyc7XG5cbiAgaWYgKHJvdy50eXBlID09PSAnc2F2ZWQnKSB7XG4gICAgYWN0aW9uSHRtbCArPVxuICAgICAgYDxidXR0b24gZGF0YS1zbS1hY3Rpb249XCJlZGl0LXN0YXR1c1wiIGRhdGEtc20tcGF0aD1cIiR7ZXNjYXBlSHRtbChyb3cucGF0aCB8fCAnJyl9XCIgZGF0YS1zbS1pZHg9XCIke3Jvdy5pZHh9XCIgY2xhc3M9XCJzbS1idG4gc20tYnRuLWljb25cIiB0aXRsZT1cIlVwZGF0ZSBhcHBsaWNhdGlvbiBzdGF0dXNcIiBhcmlhLWxhYmVsPVwiVXBkYXRlIGFwcGxpY2F0aW9uIHN0YXR1c1wiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdGFnXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYnV0dG9uPmA7XG4gICAgYWN0aW9uSHRtbCArPVxuICAgICAgYDxidXR0b24gZGF0YS1zbS1hY3Rpb249XCJlZGl0LW5vdGVzXCIgZGF0YS1zbS1wYXRoPVwiJHtlc2NhcGVIdG1sKHJvdy5wYXRoIHx8ICcnKX1cIiBkYXRhLXNtLWlkeD1cIiR7cm93LmlkeH1cIiBjbGFzcz1cInNtLWJ0biBzbS1idG4taWNvblwiIHRpdGxlPVwiRWRpdCBub3Rlc1wiIGFyaWEtbGFiZWw9XCJFZGl0IG5vdGVzXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1ub3RlLXN0aWNreVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2J1dHRvbj5gO1xuICB9XG5cbiAgY29uc3QgYXRzU2NvcmVMYWJlbCA9IHJvdy5hdHNTY29yZSAhPSBudWxsXG4gICAgPyAoKCkgPT4ge1xuICAgICAgICBjb25zdCBzID0gTnVtYmVyKHJvdy5hdHNTY29yZSk7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gcyA+PSA3NSA/ICcjMDU5NjY5JyA6IHMgPj0gNTAgPyAnI2Q5NzcwNicgOiAnI2RjMjYyNic7XG4gICAgICAgIHJldHVybiBgIDxzcGFuIHRpdGxlPVwiQVRTIG1hdGNoIHNjb3JlXCIgc3R5bGU9XCJmb250LXNpemU6MC43OGVtO3BhZGRpbmc6MXB4IDVweDtib3JkZXItcmFkaXVzOjlweDtiYWNrZ3JvdW5kOiR7Y29sb3J9O2NvbG9yOiNmZmY7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZvbnQtd2VpZ2h0OjYwMDtcIj4ke3N9JTwvc3Bhbj5gO1xuICAgICAgfSkoKVxuICAgIDogJyc7XG5cbiAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiJHtyb3dDbGFzc31cIj5gICtcbiAgICBgPHNwYW4gY2xhc3M9XCJzbS10ZCBzbS10ZC1uYW1lXCI+JHtuYW1lQ2VsbH08L3NwYW4+YCArXG4gICAgYDxzcGFuIGNsYXNzPVwic20tdGQgc20tdGQtc3RhdHVzXCI+JHtzdGF0dXNQaWxsfTwvc3Bhbj5gICtcbiAgICBgPHNwYW4gY2xhc3M9XCJzbS10ZCBzbS10ZC1waGFzZVwiPjxzcGFuIGlkPVwic20tcGhhc2UtJHtyb3cuaWR4fVwiPiR7cGhhc2VMYWJlbH0ke2F0c1Njb3JlTGFiZWx9JHthcHBTdGF0dXNCYWRnZX08L3NwYW4+JHtzdGF0dXNFZGl0V2lkZ2V0fSR7bm90ZXNQcmV2aWV3fSR7bm90ZXNFZGl0V2lkZ2V0fTwvc3Bhbj5gICtcbiAgICBgPHNwYW4gY2xhc3M9XCJzbS10ZCBzbS10ZC1kYXRlXCI+JHttb2RMYWJlbH08L3NwYW4+YCArXG4gICAgYDxzcGFuIGNsYXNzPVwic20tdGQgc20tdGQtYWN0aW9uc1wiPiR7YWN0aW9uSHRtbH08L3NwYW4+YCArXG4gICAgYDwvZGl2PmA7XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJSZWNlbnRzU3RyaXAocmVjZW50Um93cykge1xuICBpZiAoIXJlY2VudFJvd3MubGVuZ3RoKSByZXR1cm4gJyc7XG4gIGNvbnN0IGl0ZW1zID0gcmVjZW50Um93cy5tYXAocm93ID0+IHtcbiAgICBjb25zdCBsYWJlbCAgICA9IGVzY2FwZUh0bWwocm93Lm5hbWUpO1xuICAgIGNvbnN0IGRvdENsYXNzID0gcm93LnR5cGUgPT09ICdhY3RpdmUnXG4gICAgICA/IChyb3cub3duZXJzaGlwLmlzQ3VycmVudCA/ICdzbS1yZWNlbnQtZG90LWN1cnJlbnQnIDogJ3NtLXJlY2VudC1kb3Qtb3RoZXInKVxuICAgICAgOiAnc20tcmVjZW50LWRvdC1zYXZlZCc7XG4gICAgY29uc3QgZG90ID0gYDxzcGFuIGNsYXNzPVwic20tcmVjZW50LWRvdCAke2RvdENsYXNzfVwiPjwvc3Bhbj5gO1xuICAgIGlmIChyb3cudHlwZSA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgIGNvbnN0IGhyZWYgID0gYC8/c2Vzc2lvbj0ke2VuY29kZVVSSUNvbXBvbmVudChyb3cuc2Vzc2lvbklkIHx8ICcnKX1gO1xuICAgICAgY29uc3QgZXh0cmEgPSByb3cub3duZXJzaGlwLmlzQ3VycmVudCA/ICcgc20tcmVjZW50LWN1cnJlbnQnIDogJyc7XG4gICAgICByZXR1cm4gYDxhIGNsYXNzPVwic20tcmVjZW50LWl0ZW0ke2V4dHJhfVwiIGhyZWY9XCIke2hyZWZ9XCI+JHtkb3R9JHtsYWJlbH08L2E+YDtcbiAgICB9XG4gICAgcmV0dXJuIGA8YnV0dG9uIGNsYXNzPVwic20tcmVjZW50LWl0ZW1cIiBkYXRhLXNtLWFjdGlvbj1cImxvYWRcIiBkYXRhLXNtLXBhdGg9XCIke2VzY2FwZUh0bWwocm93LnBhdGggfHwgJycpfVwiPiR7ZG90fSR7bGFiZWx9PC9idXR0b24+YDtcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiBgPGRpdiBjbGFzcz1cInNtLXJlY2VudHNcIj48ZGl2IGNsYXNzPVwic20tcmVjZW50cy1sYWJlbFwiPlJlY2VudDwvZGl2PjxkaXYgY2xhc3M9XCJzbS1yZWNlbnRzLWxpc3RcIj4ke2l0ZW1zfTwvZGl2PjwvZGl2PmA7XG59XG5cbmZ1bmN0aW9uIF9yZW5kZXJTZXNzaW9uVGFibGVGcm9tQ2FjaGUoKSB7XG4gIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Vzc2lvbnMtbW9kYWwtYm9keScpO1xuICBpZiAoIWJvZHkpIHJldHVybjtcblxuICBjb25zdCByb3dzICAgPSBfbm9ybWFsaXplU2Vzc2lvbnNGb3JUYWJsZShfc21BY3RpdmVDYWNoZSwgX3NtU2F2ZWRDYWNoZSk7XG4gIGNvbnN0IGJ5RGF0ZSA9IF9zb3J0U2Vzc2lvblJvd3Mocm93cywgJ2xhc3RNb2RpZmllZCcsICdkZXNjJyk7XG4gIGNvbnN0IHNvcnRlZCA9IF9zb3J0U2Vzc2lvblJvd3Mocm93cywgX3NtU29ydEtleSwgX3NtU29ydERpcik7XG5cbiAgaWYgKHNvcnRlZC5sZW5ndGggPT09IDApIHtcbiAgICBib2R5LmlubmVySFRNTCA9ICc8cCBjbGFzcz1cInNlc3Npb24tc3dpdGNoZXItZW1wdHlcIiBzdHlsZT1cInBhZGRpbmc6MjRweCAxNnB4O1wiPk5vIHNlc3Npb25zIGZvdW5kLiBDcmVhdGUgb25lIHRvIGdldCBzdGFydGVkLjwvcD4nO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhcnRzID0gW1xuICAgIF9zbUFjdGl2ZUNhY2hlLmxlbmd0aCA/IGAke19zbUFjdGl2ZUNhY2hlLmxlbmd0aH0gYWN0aXZlYCA6ICcnLFxuICAgIF9zbVNhdmVkQ2FjaGUubGVuZ3RoICA/IGAke19zbVNhdmVkQ2FjaGUubGVuZ3RofSBzYXZlZGAgICA6ICcnLFxuICBdLmZpbHRlcihCb29sZWFuKTtcblxuICBib2R5LmlubmVySFRNTCA9XG4gICAgX3JlbmRlclJlY2VudHNTdHJpcChieURhdGUuc2xpY2UoMCwgNSkpICtcbiAgICBgPGRpdiBjbGFzcz1cInNtLXRhYmxlLXdyYXBcIj5gICtcbiAgICAgIGA8ZGl2IGNsYXNzPVwic20tdGFibGUtaW5mb1wiPiR7cGFydHMuam9pbignIFxcdTAwYjcgJyl9PC9kaXY+YCArXG4gICAgICBfcmVuZGVyU2Vzc2lvblRhYmxlSGVhZGVyKCkgK1xuICAgICAgYDxkaXYgY2xhc3M9XCJzbS10Ym9keVwiPiR7c29ydGVkLm1hcChfcmVuZGVyU2Vzc2lvblRhYmxlUm93KS5qb2luKCcnKX08L2Rpdj5gICtcbiAgICBgPC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gX2hhbmRsZVNlc3Npb25Nb2RhbENsaWNrKGUpIHtcbiAgY29uc3Qgc29ydEJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXNtLXNvcnRdJyk7XG4gIGlmIChzb3J0QnRuKSB7IF9zZXRTbVNvcnQoc29ydEJ0bi5kYXRhc2V0LnNtU29ydCk7IHJldHVybjsgfVxuXG4gIGNvbnN0IGJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXNtLWFjdGlvbl0nKTtcbiAgaWYgKCFidG4pIHJldHVybjtcbiAgY29uc3QgcGF0aCAgID0gYnRuLmRhdGFzZXQuc21QYXRoO1xuICBjb25zdCBpZHggICAgPSBwYXJzZUludChidG4uZGF0YXNldC5zbUlkeCA/PyAnLTEnLCAxMCk7XG4gIGNvbnN0IGFjdGlvbiA9IGJ0bi5kYXRhc2V0LnNtQWN0aW9uO1xuICBpZiAgICAgIChhY3Rpb24gPT09ICdyZW5hbWUnKSAgICAgICAgc3RhcnRTZXNzaW9uTW9kYWxSZW5hbWUocGF0aCwgaWR4KTtcbiAgZWxzZSBpZiAoYWN0aW9uID09PSAnc3VibWl0LXJlbmFtZScpIHN1Ym1pdFNlc3Npb25Nb2RhbFJlbmFtZShwYXRoLCBpZHgpO1xuICBlbHNlIGlmIChhY3Rpb24gPT09ICdjYW5jZWwtcmVuYW1lJykgY2FuY2VsU2Vzc2lvbk1vZGFsUmVuYW1lKGlkeCk7XG4gIGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2VkaXQtc3RhdHVzJykgICBzdGFydFNlc3Npb25TdGF0dXNFZGl0KGlkeCk7XG4gIGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3N1Ym1pdC1zdGF0dXMnKSBzdWJtaXRTZXNzaW9uU3RhdHVzRWRpdChwYXRoLCBpZHgpO1xuICBlbHNlIGlmIChhY3Rpb24gPT09ICdjYW5jZWwtc3RhdHVzJykgY2FuY2VsU2Vzc2lvblN0YXR1c0VkaXQoaWR4KTtcbiAgZWxzZSBpZiAoYWN0aW9uID09PSAnZWRpdC1ub3RlcycpICAgIHN0YXJ0U2Vzc2lvbk5vdGVzRWRpdChpZHgpO1xuICBlbHNlIGlmIChhY3Rpb24gPT09ICdzdWJtaXQtbm90ZXMnKSAgc3VibWl0U2Vzc2lvbk5vdGVzRWRpdChwYXRoLCBpZHgpO1xuICBlbHNlIGlmIChhY3Rpb24gPT09ICdjYW5jZWwtbm90ZXMnKSAgY2FuY2VsU2Vzc2lvbk5vdGVzRWRpdChpZHgpO1xuICBlbHNlIGlmIChhY3Rpb24gPT09ICdsb2FkJykgICAgICAgICAgbG9hZFNlc3Npb25BbmRDbG9zZU1vZGFsKHBhdGgpO1xuICBlbHNlIGlmIChhY3Rpb24gPT09ICdkdXBsaWNhdGUnKSAgICAgX2R1cGxpY2F0ZVNlc3Npb25Gcm9tTW9kYWwocGF0aCk7XG4gIGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpICAgICAgICBfZGVsZXRlU2Vzc2lvbkZyb21Nb2RhbChwYXRoLCBlKTtcbn1cblxuZnVuY3Rpb24gX2hhbmRsZVNlc3Npb25Nb2RhbEtleWRvd24oZSkge1xuICBpZiAoKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpICYmIGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXNtLXNvcnRdJykpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgX3NldFNtU29ydChlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1zbS1zb3J0XScpLmRhdGFzZXQuc21Tb3J0KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaW5wdXQgPSBlLnRhcmdldC5jbG9zZXN0KCcuc20ta2V5LWlucHV0Jyk7XG4gIGlmICghaW5wdXQpIHJldHVybjtcbiAgY29uc3QgcGF0aCA9IGlucHV0LmRhdGFzZXQuc21QYXRoO1xuICBjb25zdCBpZHggID0gcGFyc2VJbnQoaW5wdXQuZGF0YXNldC5zbUlkeCwgMTApO1xuICBpZiAgICAgIChlLmtleSA9PT0gJ0VudGVyJykgIHN1Ym1pdFNlc3Npb25Nb2RhbFJlbmFtZShwYXRoLCBpZHgpO1xuICBlbHNlIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGNhbmNlbFNlc3Npb25Nb2RhbFJlbmFtZShpZHgpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgU2Vzc2lvbnMgbW9kYWwgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5TZXNzaW9uc01vZGFsKHsgcmVxdWlyZWQgPSBmYWxzZSB9ID0ge30pIHtcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXNzaW9ucy1tb2RhbC1vdmVybGF5Jyk7XG4gIGlmICghb3ZlcmxheSkgcmV0dXJuO1xuICBvdmVybGF5LmRhdGFzZXQuZGlzbWlzc0Rpc2FibGVkID0gcmVxdWlyZWQgPyAnMScgOiAnJztcbiAgY29uc3QgY2xvc2VYICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Vzc2lvbnMtbW9kYWwtY2xvc2UteCcpO1xuICBjb25zdCBjbG9zZUZvb3RlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXNzaW9ucy1tb2RhbC1jbG9zZS1mb290ZXInKTtcbiAgaWYgKGNsb3NlWCkgICAgICBjbG9zZVguc3R5bGUuZGlzcGxheSAgICAgID0gcmVxdWlyZWQgPyAnbm9uZScgOiAnJztcbiAgaWYgKGNsb3NlRm9vdGVyKSBjbG9zZUZvb3Rlci5zdHlsZS5kaXNwbGF5ID0gcmVxdWlyZWQgPyAnbm9uZScgOiAnJztcbiAgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICB3aW5kb3cuX2ZvY3VzZWRFbGVtZW50QmVmb3JlTW9kYWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBhd2FpdCBfcmVuZGVyU2Vzc2lvbnNNb2RhbEJvZHkoKTtcbiAgX3JlZnJlc2hUcmFzaEJhZGdlKCk7XG4gIHRyYXBGb2N1cygnc2Vzc2lvbnMtbW9kYWwtb3ZlcmxheScpO1xuICBzZXRJbml0aWFsRm9jdXMoJ3Nlc3Npb25zLW1vZGFsLW92ZXJsYXknKTtcbn1cblxuZnVuY3Rpb24gY2xvc2VTZXNzaW9uc01vZGFsKCkge1xuICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nlc3Npb25zLW1vZGFsLW92ZXJsYXknKTtcbiAgaWYgKCFvdmVybGF5KSByZXR1cm47XG4gIGlmIChvdmVybGF5LmRhdGFzZXQuZGlzbWlzc0Rpc2FibGVkID09PSAnMScpIHJldHVybjtcbiAgb3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXN0b3JlRm9jdXMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX3JlbmRlclNlc3Npb25zTW9kYWxCb2R5KCkge1xuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nlc3Npb25zLW1vZGFsLWJvZHknKTtcbiAgaWYgKCFib2R5KSByZXR1cm47XG4gIGJvZHkuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJwYWRkaW5nOjI0cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2dhcDoxMHB4O2NvbG9yOiM2YjcyODA7XCI+PHNwYW4gY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIj48L3NwYW4+IExvYWRpbmcgc2Vzc2lvbnNcXHUyMDI2PC9kaXY+JztcbiAgdHJ5IHtcbiAgICBjb25zdCBbYWN0aXZlUmVzLCBzYXZlZFJlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBmZXRjaCgnL2FwaS9zZXNzaW9ucy9hY3RpdmUnKSxcbiAgICAgIGZldGNoKCcvYXBpL3Nlc3Npb25zJyksXG4gICAgXSk7XG4gICAgX3NtQWN0aXZlQ2FjaGUgPSBhY3RpdmVSZXMub2sgPyAoKGF3YWl0IGFjdGl2ZVJlcy5qc29uKCkpLnNlc3Npb25zIHx8IFtdKSA6IFtdO1xuICAgIGNvbnN0IHNhdmVkRGF0YSA9IHNhdmVkUmVzLm9rID8gcGFyc2VTZXNzaW9uTGlzdFJlc3BvbnNlKGF3YWl0IHNhdmVkUmVzLmpzb24oKSkgOiB7IHNlc3Npb25zOiBbXSB9O1xuICAgIF9zbVNhdmVkQ2FjaGUgICA9IHNhdmVkRGF0YS5zZXNzaW9ucyB8fCBbXTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGJvZHkuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwicGFkZGluZzoyMHB4O2NvbG9yOiNlZjQ0NDQ7XCI+Q291bGQgbm90IGxvYWQgc2Vzc2lvbnM6ICR7ZXNjYXBlSHRtbChlLm1lc3NhZ2UpfTwvcD5gO1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBXaXJlIGV2ZW50IGRlbGVnYXRpb24gb25jZTsgcGVyc2lzdHMgYWNyb3NzIHJlLXJlbmRlcnMgc2luY2UgYm9keSBlbGVtZW50IGlzIHN0YWJsZVxuICBpZiAoIWJvZHkuX3NtTGlzdGVuZXJBdHRhY2hlZCkge1xuICAgIGJvZHkuX3NtTGlzdGVuZXJBdHRhY2hlZCA9IHRydWU7XG4gICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICAgX2hhbmRsZVNlc3Npb25Nb2RhbENsaWNrKTtcbiAgICBib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBfaGFuZGxlU2Vzc2lvbk1vZGFsS2V5ZG93bik7XG4gIH1cbiAgX3JlbmRlclNlc3Npb25UYWJsZUZyb21DYWNoZSgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkU2Vzc2lvbkFuZENsb3NlTW9kYWwocGF0aCkge1xuICAvLyBDbGVhciBkaXNtaXNzRGlzYWJsZWQgc28gbG9hZGluZyBhIHNlc3Npb24gYWx3YXlzIGNsb3NlcyB0aGUgbW9kYWwsXG4gIC8vIGV2ZW4gd2hlbiBpdCB3YXMgb3BlbmVkIGluIHJlcXVpcmVkIChzdGFydHVwKSBtb2RlLlxuICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nlc3Npb25zLW1vZGFsLW92ZXJsYXknKTtcbiAgaWYgKG92ZXJsYXkpIG92ZXJsYXkuZGF0YXNldC5kaXNtaXNzRGlzYWJsZWQgPSAnJztcbiAgY2xvc2VTZXNzaW9uc01vZGFsKCk7XG4gIGF3YWl0IGxvYWRTZXNzaW9uRmlsZShwYXRoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbmV3U2Vzc2lvbkZyb21Nb2RhbCgpIHtcbiAgY2xvc2VTZXNzaW9uc01vZGFsKCk7XG4gIGF3YWl0IGNyZWF0ZU5ld1Nlc3Npb25BbmROYXZpZ2F0ZSgpO1xufVxuXG5mdW5jdGlvbiBzdGFydFNlc3Npb25Nb2RhbFJlbmFtZShwYXRoLCBpZHgpIHtcbiAgY29uc3QgbmFtZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLW5hbWUtJHtpZHh9YCk7XG4gIGNvbnN0IGZvcm0gICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1yZW5hbWUtJHtpZHh9YCk7XG4gIGlmIChuYW1lRWwpIG5hbWVFbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBpZiAoZm9ybSkgICBmb3JtLnN0eWxlLmRpc3BsYXkgICA9ICdmbGV4JztcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc20taW5wdXQtJHtpZHh9YCk7XG4gIGlmIChpbnB1dCkgeyBpbnB1dC5mb2N1cygpOyBpbnB1dC5zZWxlY3QoKTsgfVxufVxuXG5mdW5jdGlvbiBjYW5jZWxTZXNzaW9uTW9kYWxSZW5hbWUoaWR4KSB7XG4gIGNvbnN0IG5hbWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1uYW1lLSR7aWR4fWApO1xuICBjb25zdCBmb3JtICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc20tcmVuYW1lLSR7aWR4fWApO1xuICBpZiAoZm9ybSkgICBmb3JtLnN0eWxlLmRpc3BsYXkgICA9ICdub25lJztcbiAgaWYgKG5hbWVFbCkgbmFtZUVsLnN0eWxlLmRpc3BsYXkgPSAnJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3VibWl0U2Vzc2lvbk1vZGFsUmVuYW1lKHBhdGgsIGlkeCkge1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1pbnB1dC0ke2lkeH1gKTtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuO1xuICBjb25zdCBuZXdOYW1lID0gaW5wdXQudmFsdWUudHJpbSgpO1xuICBpZiAoIW5ld05hbWUpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvcmVuYW1lLXNlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHBhdGgsIG5ld19uYW1lOiBuZXdOYW1lIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjb25zdCBuYW1lRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc20tbmFtZS0ke2lkeH1gKTtcbiAgICAgIGlmIChuYW1lRWwpIG5hbWVFbC50ZXh0Q29udGVudCA9IG5ld05hbWU7XG4gICAgICBjYW5jZWxTZXNzaW9uTW9kYWxSZW5hbWUoaWR4KTtcbiAgICAgIGF3YWl0IGZldGNoU3RhdHVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYFJlbmFtZSBmYWlsZWQ6ICR7ZGF0YS5lcnJvcn1gLCAnZXJyb3InKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHsgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHNob3dUb2FzdChgUmVuYW1lIGVycm9yOiAke2UubWVzc2FnZX1gLCAnZXJyb3InKTsgfVxufVxuXG5mdW5jdGlvbiBzdGFydFNlc3Npb25TdGF0dXNFZGl0KGlkeCkge1xuICBjb25zdCBwaGFzZUVsICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1waGFzZS0ke2lkeH1gKTtcbiAgY29uc3QgZWRpdFdpZGdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1zdGF0dXMtZWRpdC0ke2lkeH1gKTtcbiAgaWYgKHBoYXNlRWwpICAgIHBoYXNlRWwuc3R5bGUuZGlzcGxheSAgICA9ICdub25lJztcbiAgaWYgKGVkaXRXaWRnZXQpIGVkaXRXaWRnZXQuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgY29uc3Qgc2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLXN0YXR1cy1zZWwtJHtpZHh9YCk7XG4gIGlmIChzZWwpIHNlbC5mb2N1cygpO1xufVxuXG5mdW5jdGlvbiBjYW5jZWxTZXNzaW9uU3RhdHVzRWRpdChpZHgpIHtcbiAgY29uc3QgcGhhc2VFbCAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1waGFzZS0ke2lkeH1gKTtcbiAgY29uc3QgZWRpdFdpZGdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1zdGF0dXMtZWRpdC0ke2lkeH1gKTtcbiAgaWYgKGVkaXRXaWRnZXQpIGVkaXRXaWRnZXQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaWYgKHBoYXNlRWwpICAgIHBoYXNlRWwuc3R5bGUuZGlzcGxheSAgICA9ICcnO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdWJtaXRTZXNzaW9uU3RhdHVzRWRpdChwYXRoLCBpZHgpIHtcbiAgY29uc3Qgc2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLXN0YXR1cy1zZWwtJHtpZHh9YCk7XG4gIGlmICghc2VsKSByZXR1cm47XG4gIGNvbnN0IG5ld1N0YXR1cyA9IHNlbC52YWx1ZTtcbiAgY29uc3QgX2FwcFN0YXR1c0xhYmVscyA9IHtcbiAgICBkcmFmdDogJ0RyYWZ0JywgcmVhZHk6ICdSZWFkeScsIHNlbnQ6ICdTZW50JywgcXVldWVkOiAnUXVldWVkJyxcbiAgICBpbnRlcnZpZXc6ICdJbnRlcnZpZXcnLCByZWplY3RlZDogJ1JlamVjdGVkJywgYWNjZXB0ZWQ6ICdBY2NlcHRlZCcsXG4gICAgcGFya2VkOiAnUGFya2VkJyxcbiAgfTtcbiAgY29uc3QgX2FwcFN0YXR1c0NvbG9ycyA9IHtcbiAgICBkcmFmdDogJyM5NGEzYjgnLCByZWFkeTogJyMzYjgyZjYnLCBzZW50OiAnIzIyYzU1ZScsIHF1ZXVlZDogJyNlYWIzMDgnLFxuICAgIGludGVydmlldzogJyNhODU1ZjcnLCByZWplY3RlZDogJyNlZjQ0NDQnLCBhY2NlcHRlZDogJyMwNTk2NjknLFxuICAgIHBhcmtlZDogJyNmOTczMTYnLFxuICB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9zZXNzaW9ucy9tZXRhZGF0YScsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHBhdGgsIGFwcGxpY2F0aW9uX3N0YXR1czogbmV3U3RhdHVzIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmIChkYXRhLm9rKSB7XG4gICAgICBjb25zdCBiYWRnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1zdGF0dXMtYmFkZ2UtJHtpZHh9YCk7XG4gICAgICBpZiAoYmFkZ2UpIHtcbiAgICAgICAgaWYgKG5ld1N0YXR1cyAmJiBfYXBwU3RhdHVzTGFiZWxzW25ld1N0YXR1c10pIHtcbiAgICAgICAgICBiYWRnZS50ZXh0Q29udGVudCA9IF9hcHBTdGF0dXNMYWJlbHNbbmV3U3RhdHVzXTtcbiAgICAgICAgICBiYWRnZS5zdHlsZS5jc3NUZXh0ID0gYGZvbnQtc2l6ZTowLjc1ZW07cGFkZGluZzoxcHggNnB4O2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6JHtfYXBwU3RhdHVzQ29sb3JzW25ld1N0YXR1c119O2NvbG9yOiNmZmY7dmVydGljYWwtYWxpZ246bWlkZGxlO2A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmFkZ2UudGV4dENvbnRlbnQgPSAnJztcbiAgICAgICAgICBiYWRnZS5zdHlsZS5jc3NUZXh0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbmNlbFNlc3Npb25TdGF0dXNFZGl0KGlkeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYFN0YXR1cyB1cGRhdGUgZmFpbGVkOiAke2RhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWAsICdlcnJvcicpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYFN0YXR1cyB1cGRhdGUgZXJyb3I6ICR7ZS5tZXNzYWdlfWAsICdlcnJvcicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0U2Vzc2lvbk5vdGVzRWRpdChpZHgpIHtcbiAgY29uc3QgZWRpdFdpZGdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1ub3Rlcy1lZGl0LSR7aWR4fWApO1xuICBjb25zdCBwcmV2aWV3ICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLW5vdGVzLXByZXZpZXctJHtpZHh9YCk7XG4gIGlmIChwcmV2aWV3KSAgICBwcmV2aWV3LnN0eWxlLmRpc3BsYXkgICAgPSAnbm9uZSc7XG4gIGlmIChlZGl0V2lkZ2V0KSBlZGl0V2lkZ2V0LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gIGNvbnN0IHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLW5vdGVzLXRhLSR7aWR4fWApO1xuICBpZiAodGEpIHsgdGEuZm9jdXMoKTsgdGEuc2VsZWN0aW9uU3RhcnQgPSB0YS5zZWxlY3Rpb25FbmQgPSB0YS52YWx1ZS5sZW5ndGg7IH1cbn1cblxuZnVuY3Rpb24gY2FuY2VsU2Vzc2lvbk5vdGVzRWRpdChpZHgpIHtcbiAgY29uc3QgZWRpdFdpZGdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBzbS1ub3Rlcy1lZGl0LSR7aWR4fWApO1xuICBjb25zdCBwcmV2aWV3ICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNtLW5vdGVzLXByZXZpZXctJHtpZHh9YCk7XG4gIGlmIChlZGl0V2lkZ2V0KSBlZGl0V2lkZ2V0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGlmIChwcmV2aWV3KSAgICBwcmV2aWV3LnN0eWxlLmRpc3BsYXkgICAgPSAnJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3VibWl0U2Vzc2lvbk5vdGVzRWRpdChwYXRoLCBpZHgpIHtcbiAgY29uc3QgdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc20tbm90ZXMtdGEtJHtpZHh9YCk7XG4gIGlmICghdGEpIHJldHVybjtcbiAgY29uc3QgbmV3Tm90ZXMgPSB0YS52YWx1ZTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvc2Vzc2lvbnMvbWV0YWRhdGEnLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBwYXRoLCBub3RlczogbmV3Tm90ZXMgfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEub2spIHtcbiAgICAgIGNvbnN0IHByZXZpZXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc20tbm90ZXMtcHJldmlldy0ke2lkeH1gKTtcbiAgICAgIGlmIChwcmV2aWV3KSB7XG4gICAgICAgIHByZXZpZXcudGV4dENvbnRlbnQgPSBuZXdOb3RlcztcbiAgICAgICAgcHJldmlldy50aXRsZSAgICAgICA9IG5ld05vdGVzO1xuICAgICAgICBwcmV2aWV3LnN0eWxlLmRpc3BsYXkgPSBuZXdOb3RlcyA/ICcnIDogJ25vbmUnO1xuICAgICAgfVxuICAgICAgY2FuY2VsU2Vzc2lvbk5vdGVzRWRpdChpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgc2hvd1RvYXN0KGBOb3RlcyB1cGRhdGUgZmFpbGVkOiAke2RhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWAsICdlcnJvcicpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYE5vdGVzIHVwZGF0ZSBlcnJvcjogJHtlLm1lc3NhZ2V9YCwgJ2Vycm9yJyk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX2RlbGV0ZVNlc3Npb25Gcm9tTW9kYWwocGF0aCwgZXZlbnQpIHtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIGlmICh0eXBlb2YgY29uZmlybURpYWxvZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IG9rID0gYXdhaXQgY29uZmlybURpYWxvZygnTW92ZSB0aGlzIHNlc3Npb24gdG8gVHJhc2g/IFlvdSBjYW4gcmVzdG9yZSBpdCBmcm9tIHRoZSBUcmFzaCB2aWV3LicpO1xuICAgIGlmICghb2spIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaCgnL2FwaS9kZWxldGUtc2Vzc2lvbicsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcGF0aCB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5zdWNjZXNzKSB7XG4gICAgICBhd2FpdCBfcmVuZGVyU2Vzc2lvbnNNb2RhbEJvZHkoKTtcbiAgICAgIGF3YWl0IF9yZWZyZXNoVHJhc2hCYWRnZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgc2hvd1RvYXN0KGBGYWlsZWQgdG8gbW92ZSBzZXNzaW9uIHRvIFRyYXNoOiAke2RhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWAsICdlcnJvcicpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkgeyBpZiAodHlwZW9mIHNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgc2hvd1RvYXN0KGBFcnJvcjogJHtlLm1lc3NhZ2V9YCwgJ2Vycm9yJyk7IH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIER1cGxpY2F0ZSBzZXNzaW9uIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5hc3luYyBmdW5jdGlvbiBfZHVwbGljYXRlU2Vzc2lvbkZyb21Nb2RhbChwYXRoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3Nlc3Npb25zL2R1cGxpY2F0ZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcGF0aCB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5vaykge1xuICAgICAgYXdhaXQgX3JlbmRlclNlc3Npb25zTW9kYWxCb2R5KCk7XG4gICAgICBpZiAodHlwZW9mIHNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgc2hvd1RvYXN0KGBTZXNzaW9uIGR1cGxpY2F0ZWQ6IFwiJHtkYXRhLm5ld19uYW1lfVwiYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYEZhaWxlZCB0byBkdXBsaWNhdGUgc2Vzc2lvbjogJHtkYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJ31gLCAnZXJyb3InKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHsgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHNob3dUb2FzdChgRXJyb3I6ICR7ZS5tZXNzYWdlfWAsICdlcnJvcicpOyB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBUcmFzaCBiYWRnZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gX3JlZnJlc2hUcmFzaEJhZGdlKCkge1xuICBjb25zdCBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Vzc2lvbnMtdHJhc2gtYnRuJyk7XG4gIGlmICghYnRuKSByZXR1cm47XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3RyYXNoJyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgY29uc3QgbiA9IChkYXRhLml0ZW1zIHx8IFtdKS5sZW5ndGg7XG4gICAgYnRuLnRleHRDb250ZW50ID0gbiA+IDAgPyBgXHVEODNEXHVEREQxIFRyYXNoICgke259KWAgOiAnXHVEODNEXHVEREQxIFRyYXNoJztcbiAgfSBjYXRjaCAoXykgeyAvKiBpZ25vcmUgKi8gfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgVHJhc2ggdmlldyAoaW5saW5lIGluIHNlc3Npb25zIG1vZGFsKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuYXN5bmMgZnVuY3Rpb24gb3BlblRyYXNoVmlldygpIHtcbiAgY29uc3QgYm9keSAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nlc3Npb25zLW1vZGFsLWJvZHknKTtcbiAgY29uc3QgZm9vdGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Nlc3Npb25zLW1vZGFsLW92ZXJsYXkgLm1vZGFsLWZvb3RlcicpO1xuICBpZiAoIWJvZHkpIHJldHVybjtcblxuICBib2R5LmlubmVySFRNTCA9ICc8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtwYWRkaW5nOjI0cHg7Y29sb3I6IzZiNzI4MDtcIj48ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCIgc3R5bGU9XCJ3aWR0aDoyMHB4O2hlaWdodDoyMHB4O2JvcmRlci13aWR0aDoycHg7ZmxleC1zaHJpbms6MDtcIj48L2Rpdj48c3Bhbj5Mb2FkaW5nIHRyYXNoXHUyMDI2PC9zcGFuPjwvZGl2Pic7XG5cbiAgaWYgKGZvb3Rlcikge1xuICAgIGZvb3Rlci5pbm5lckhUTUwgPSBgXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJlbXB0eVRyYXNoKClcIlxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZTJlMjtjb2xvcjojZGMyNjI2O2JvcmRlci1jb2xvcjojZmVjYWNhO1wiPkVtcHR5IFRyYXNoPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJjbG9zZVRyYXNoVmlldygpXCI+XHUyMTkwIEJhY2s8L2J1dHRvbj5gO1xuICB9XG5cbiAgYXdhaXQgX3JlbmRlclRyYXNoVmlldygpO1xufVxuXG5mdW5jdGlvbiBjbG9zZVRyYXNoVmlldygpIHtcbiAgY29uc3QgZm9vdGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Nlc3Npb25zLW1vZGFsLW92ZXJsYXkgLm1vZGFsLWZvb3RlcicpO1xuICBpZiAoZm9vdGVyKSB7XG4gICAgZm9vdGVyLmlubmVySFRNTCA9IGBcbiAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb24tYnRuXCIgb25jbGljaz1cIm5ld1Nlc3Npb25Gcm9tTW9kYWwoKVwiXG4gICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDojMTBiOTgxO2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiMxMGI5ODE7XCI+XHVGRjBCIE5ldyBTZXNzaW9uPC9idXR0b24+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO1wiPlxuICAgICAgICA8YnV0dG9uIGlkPVwic2Vzc2lvbnMtdHJhc2gtYnRuXCIgY2xhc3M9XCJhY3Rpb24tYnRuXCJcbiAgICAgICAgICBvbmNsaWNrPVwib3BlblRyYXNoVmlldygpXCJcbiAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6I2YxZjVmOTtjb2xvcjojNjQ3NDhiO2JvcmRlci1jb2xvcjojZTJlOGYwO1wiPlx1RDgzRFx1REREMSBUcmFzaDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIG9uY2xpY2s9XCJjbG9zZVNlc3Npb25zTW9kYWwoKVwiPkNsb3NlPC9idXR0b24+XG4gICAgICA8L2Rpdj5gO1xuICB9XG4gIF9yZW5kZXJTZXNzaW9uc01vZGFsQm9keSgpO1xuICBfcmVmcmVzaFRyYXNoQmFkZ2UoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX3JlbmRlclRyYXNoVmlldygpIHtcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXNzaW9ucy1tb2RhbC1ib2R5Jyk7XG4gIGlmICghYm9keSkgcmV0dXJuO1xuICBsZXQgaXRlbXMgPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgID0gYXdhaXQgZmV0Y2goJy9hcGkvdHJhc2gnKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpdGVtcyA9IGRhdGEuaXRlbXMgfHwgW107XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBib2R5LmlubmVySFRNTCA9IGA8cCBzdHlsZT1cInBhZGRpbmc6MjBweDtjb2xvcjojZWY0NDQ0O1wiPkNvdWxkIG5vdCBsb2FkIHRyYXNoOiAke2VzY2FwZUh0bWwoZS5tZXNzYWdlKX08L3A+YDtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIGJvZHkuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwicGFkZGluZzoyNHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM2YjcyODA7XCI+VHJhc2ggaXMgZW1wdHkuPC9wPic7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gZm10RGF0ZSh0cykge1xuICAgIGlmICghdHMpIHJldHVybiAnJztcbiAgICB0cnkgeyByZXR1cm4gbmV3IERhdGUodHMpLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgeWVhcjogJ251bWVyaWMnIH0pOyB9XG4gICAgY2F0Y2ggeyByZXR1cm4gdHMuc2xpY2UoMCwgMTApOyB9XG4gIH1cblxuICBsZXQgaHRtbCA9ICc8dGFibGUgc3R5bGU9XCJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtcIj4nO1xuICBpdGVtcy5mb3JFYWNoKHMgPT4ge1xuICAgIGNvbnN0IGVwID0gZXNjYXBlSHRtbChzLnBhdGgpO1xuICAgIGh0bWwgKz0gYFxuICAgICAgPHRyIHN0eWxlPVwiYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2YxZjVmOTt2ZXJ0aWNhbC1hbGlnbjp0b3A7XCI+XG4gICAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6MTJweCAxNnB4O1wiPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7Y29sb3I6IzFlMjkzYjtcIj4ke2VzY2FwZUh0bWwocy5wb3NpdGlvbl9uYW1lIHx8ICdVbnRpdGxlZCcpfTwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MTJweDtjb2xvcjojOTRhM2I4O21hcmdpbi10b3A6MnB4O1wiPiR7Zm10RGF0ZShzLnRpbWVzdGFtcCl9JHtzLnBoYXNlID8gJyBcdTAwQjcgJyArIGVzY2FwZUh0bWwocy5waGFzZSkgOiAnJ308L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzoxMnB4IDE2cHg7d2hpdGUtc3BhY2U6bm93cmFwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4O2dhcDo2cHg7XCI+XG4gICAgICAgICAgICA8YnV0dG9uIGRhdGEtdHJhc2gtYWN0aW9uPVwicmVzdG9yZVwiIGRhdGEtdHJhc2gtcGF0aD1cIiR7ZXB9XCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiNkYmVhZmU7Y29sb3I6IzFkNGVkODtib3JkZXI6MXB4IHNvbGlkICNiZmRiZmU7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo2cHggMTJweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7XCI+UmVzdG9yZTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLXRyYXNoLWFjdGlvbj1cImRlbGV0ZS1mb3JldmVyXCIgZGF0YS10cmFzaC1wYXRoPVwiJHtlcH1cIlxuICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6I2ZlZTJlMjtjb2xvcjojZGMyNjI2O2JvcmRlcjoxcHggc29saWQgI2ZlY2FjYTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjZweCA4cHg7Zm9udC1zaXplOjEzcHg7Y3Vyc29yOnBvaW50ZXI7XCIgdGl0bGU9XCJEZWxldGUgcGVybWFuZW50bHlcIiBhcmlhLWxhYmVsPVwiRGVsZXRlIHBlcm1hbmVudGx5XCI+XHUyNzE1PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPmA7XG4gIH0pO1xuICBodG1sICs9ICc8L3RhYmxlPic7XG4gIGNvbnN0IHRyYXNoV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICB0cmFzaFdyYXBwZXIuaW5uZXJIVE1MID0gaHRtbDtcbiAgYm9keS5pbm5lckhUTUwgPSAnJztcbiAgYm9keS5hcHBlbmRDaGlsZCh0cmFzaFdyYXBwZXIpO1xuICAvLyBXaXJlIHVwIHRyYXNoIGFjdGlvbiBidXR0b25zIHZpYSBldmVudCBkZWxlZ2F0aW9uXG4gIHRyYXNoV3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xuICAgIGNvbnN0IGJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXRyYXNoLWFjdGlvbl0nKTtcbiAgICBpZiAoIWJ0bikgcmV0dXJuO1xuICAgIGNvbnN0IHBhdGggICA9IGJ0bi5kYXRhc2V0LnRyYXNoUGF0aDtcbiAgICBjb25zdCBhY3Rpb24gPSBidG4uZGF0YXNldC50cmFzaEFjdGlvbjtcbiAgICBpZiAgICAgIChhY3Rpb24gPT09ICdyZXN0b3JlJykgICAgICAgIHJlc3RvcmVGcm9tVHJhc2gocGF0aCk7XG4gICAgZWxzZSBpZiAoYWN0aW9uID09PSAnZGVsZXRlLWZvcmV2ZXInKSBkZWxldGVGb3JldmVyKHBhdGgpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzdG9yZUZyb21UcmFzaChwYXRoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3RyYXNoL3Jlc3RvcmUnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHBhdGggfSksXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgaWYgKGRhdGEuc3VjY2VzcykgeyBhd2FpdCBfcmVuZGVyVHJhc2hWaWV3KCk7IGF3YWl0IF9yZWZyZXNoVHJhc2hCYWRnZSgpOyB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgc2hvd1RvYXN0KGBSZXN0b3JlIGZhaWxlZDogJHtkYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJ31gLCAnZXJyb3InKTtcbiAgfSBjYXRjaCAoZSkgeyBpZiAodHlwZW9mIHNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgc2hvd1RvYXN0KGBFcnJvcjogJHtlLm1lc3NhZ2V9YCwgJ2Vycm9yJyk7IH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlRm9yZXZlcihwYXRoKSB7XG4gIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IGNvbmZpcm1EaWFsb2coXG4gICAgJ1Blcm1hbmVudGx5IGRlbGV0ZSB0aGlzIHNlc3Npb24/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS4nLFxuICAgIHsgY29uZmlybUxhYmVsOiAnRGVsZXRlIEZvcmV2ZXInLCBjYW5jZWxMYWJlbDogJ0NhbmNlbCcsIGRhbmdlcjogdHJ1ZSB9XG4gICk7XG4gIGlmICghY29uZmlybWVkKSByZXR1cm47XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3RyYXNoL2RlbGV0ZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcGF0aCB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5zdWNjZXNzKSB7IGF3YWl0IF9yZW5kZXJUcmFzaFZpZXcoKTsgYXdhaXQgX3JlZnJlc2hUcmFzaEJhZGdlKCk7IH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYERlbGV0ZSBmYWlsZWQ6ICR7ZGF0YS5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCwgJ2Vycm9yJyk7XG4gIH0gY2F0Y2ggKGUpIHsgaWYgKHR5cGVvZiBzaG93VG9hc3QgPT09ICdmdW5jdGlvbicpIHNob3dUb2FzdChgRXJyb3I6ICR7ZS5tZXNzYWdlfWAsICdlcnJvcicpOyB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVtcHR5VHJhc2goKSB7XG4gIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IGNvbmZpcm1EaWFsb2coXG4gICAgJ1Blcm1hbmVudGx5IGRlbGV0ZSBhbGwgaXRlbXMgaW4gVHJhc2g/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS4nLFxuICAgIHsgY29uZmlybUxhYmVsOiAnRW1wdHkgVHJhc2gnLCBjYW5jZWxMYWJlbDogJ0NhbmNlbCcsIGRhbmdlcjogdHJ1ZSB9XG4gICk7XG4gIGlmICghY29uZmlybWVkKSByZXR1cm47XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKCcvYXBpL3RyYXNoL2VtcHR5JywgeyBtZXRob2Q6ICdQT1NUJyB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoZGF0YS5zdWNjZXNzKSB7IGF3YWl0IF9yZW5kZXJUcmFzaFZpZXcoKTsgYXdhaXQgX3JlZnJlc2hUcmFzaEJhZGdlKCk7IH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSBzaG93VG9hc3QoYEZhaWxlZCB0byBlbXB0eSB0cmFzaDogJHtkYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJ31gLCAnZXJyb3InKTtcbiAgfSBjYXRjaCAoZSkgeyBpZiAodHlwZW9mIHNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgc2hvd1RvYXN0KGBFcnJvcjogJHtlLm1lc3NhZ2V9YCwgJ2Vycm9yJyk7IH1cbn1cblxuLy8gXHUyNTAwXHUyNTAwIEV4cG9ydHMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB7XG4gIF9yZW5kZXJBY3RpdmVTZXNzaW9uUm93cyxcbiAgX3JlbmRlclNhdmVkU2Vzc2lvblJvd3MsXG4gIF9yZW5kZXJTZXNzaW9uU3dpdGNoZXJTZWN0aW9ucyxcbiAgX3VwZGF0ZVNlc3Npb25Td2l0Y2hlckhlYWRlcixcbiAgc2hvd093bmVyc2hpcENvbmZsaWN0RGlhbG9nLFxuICBjbG9zZU93bmVyc2hpcENvbmZsaWN0RGlhbG9nLFxuICBvcGVuU2Vzc2lvbnNNb2RhbCxcbiAgY2xvc2VTZXNzaW9uc01vZGFsLFxuICBfcmVuZGVyU2Vzc2lvbnNNb2RhbEJvZHksXG4gIGxvYWRTZXNzaW9uQW5kQ2xvc2VNb2RhbCxcbiAgbmV3U2Vzc2lvbkZyb21Nb2RhbCxcbiAgc3RhcnRTZXNzaW9uTW9kYWxSZW5hbWUsXG4gIGNhbmNlbFNlc3Npb25Nb2RhbFJlbmFtZSxcbiAgc3VibWl0U2Vzc2lvbk1vZGFsUmVuYW1lLFxuICBfZGVsZXRlU2Vzc2lvbkZyb21Nb2RhbCxcbiAgX2R1cGxpY2F0ZVNlc3Npb25Gcm9tTW9kYWwsXG4gIF9yZWZyZXNoVHJhc2hCYWRnZSxcbiAgb3BlblRyYXNoVmlldyxcbiAgY2xvc2VUcmFzaFZpZXcsXG4gIF9yZW5kZXJUcmFzaFZpZXcsXG4gIHJlc3RvcmVGcm9tVHJhc2gsXG4gIGRlbGV0ZUZvcmV2ZXIsXG4gIGVtcHR5VHJhc2gsXG59O1xuIiwgIi8vIENvcHlyaWdodCAoQykgMjAyNiBHcmVnb3J5IFIuIFdhcm5lc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9yLWxhdGVyXG4vL1xuLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ1YtQnVpbGRlci5cbi8vIEZvciBjb21tZXJjaWFsIGxpY2Vuc2luZywgY29udGFjdCBncmVnQHdhcm5lcy1pbm5vdmF0aW9ucy5jb21cblxuLyoqXG4gKiB3ZWIva2V5Ym9hcmQtc2hvcnRjdXRzLmpzIFx1MjAxNCBHbG9iYWwga2V5Ym9hcmQgc2hvcnRjdXRzIGZvciB3b3JrZmxvdyBuYXZpZ2F0aW9uLlxuICpcbiAqIFNob3J0Y3V0cyBpbXBsZW1lbnRlZDpcbiAqICAgQ3RybCtFbnRlciAgICAgICBUcmlnZ2VyIHRoZSBwcmltYXJ5IGFjdGlvbiBidXR0b24gb24gdGhlIGN1cnJlbnQgdGFiXG4gKiAgIEN0cmwrU2hpZnQrUiAgICAgUmUtcnVuIHRoZSBjdXJyZW50IHdvcmtmbG93IHBoYXNlIChjYWxscyBjb25maXJtUmVSdW5QaGFzZSlcbiAqICAgQSAgICAgICAgICAgICAgICBBY2NlcHQgdGhlIGZvY3VzZWQgcmV2aWV3IGNhcmQgKHJld3JpdGUgLyBzcGVsbC1jaGVjayB0YWJzKVxuICogICBSICAgICAgICAgICAgICAgIFJlamVjdCB0aGUgZm9jdXNlZCByZXZpZXcgY2FyZCAocmV3cml0ZSAvIHNwZWxsLWNoZWNrIHRhYnMpXG4gKiAgIFx1MjE5MSAvIFx1MjE5MyAgICAgICAgICAgIE5hdmlnYXRlIGJldHdlZW4gcmV2aWV3IGNhcmRzIG9uIHJldmlldyB0YWJzXG4gKiAgIEN0cmwrWiAgICAgICAgICAgVW5kbyB0aGUgbW9zdCByZWNlbnQgTWFzdGVyIENWIGRhdGEgY2hhbmdlIChNYXN0ZXIgQ1YgbW9kYWwgb25seSlcbiAqICAgQ3RybCtTaGlmdCtaICAgICBSZWRvIHRoZSBwcmV2aW91c2x5IHVuZG9uZSBNYXN0ZXIgQ1YgZGF0YSBjaGFuZ2UgKE1hc3RlciBDViBtb2RhbCBvbmx5KVxuICogICA/ICAgICAgICAgICAgICAgIFRvZ2dsZSBrZXlib2FyZCBzaG9ydGN1dCBoZWxwIHBhbmVsXG4gKi9cblxuLyoqIFRyYWNrIHdoaWNoIGNhcmQgaXMga2V5Ym9hcmQtZm9jdXNlZCBvbiB0aGUgY3VycmVudCByZXZpZXcgdGFiLiAqL1xubGV0IF9mb2N1c2VkQ2FyZEluZGV4ID0gLTE7XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgZm9jdXMgaXMgaW5zaWRlIGEgdGV4dCBpbnB1dCwgc28gQS9SL1x1MjE5MS9cdTIxOTMgc2hvdWxkIG5vdCBmaXJlLiAqL1xuZnVuY3Rpb24gX2luVGV4dElucHV0KCkge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIGlmICghZWwpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgdGFnID0gZWwudGFnTmFtZTtcbiAgcmV0dXJuIHRhZyA9PT0gJ0lOUFVUJyB8fCB0YWcgPT09ICdURVhUQVJFQScgfHwgdGFnID09PSAnU0VMRUNUJyB8fCBlbC5pc0NvbnRlbnRFZGl0YWJsZTtcbn1cblxuLyoqIFJldHVybnMgdHJ1ZSBpZiBhbnkgbW9kYWwgb3ZlcmxheSBpcyBjdXJyZW50bHkgdmlzaWJsZS4gKi9cbmZ1bmN0aW9uIF9tb2RhbE9wZW4oKSB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbcm9sZT1cImRpYWxvZ1wiXTpub3QoW3N0eWxlKj1cImRpc3BsYXk6IG5vbmVcIl0pOm5vdChbc3R5bGUqPVwiZGlzcGxheTpub25lXCJdKScpICE9PSBudWxsO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBNYXN0ZXIgQ1YgbW9kYWwgKHdlYi9pbmRleC5odG1sI21hc3Rlci1jdi1tb2RhbC1vdmVybGF5KSBpcyBvcGVuLiAqL1xuZnVuY3Rpb24gX21hc3RlckN2TW9kYWxPcGVuKCkge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXN0ZXItY3YtbW9kYWwtb3ZlcmxheScpO1xuICByZXR1cm4gISFlbCAmJiBlbC5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZSc7XG59XG5cbi8qKlxuICogTWFwIHRhYiBJRHMgdG8gdGhlaXIgcHJpbWFyeSBhY3Rpb24gYnV0dG9uIElEcy5cbiAqIEJ1dHRvbnMgdGhhdCBtaWdodCBiZSBkaXNhYmxlZCBhdCBydW50aW1lIGFyZSBzdGlsbCBjbGlja2VkIFx1MjAxNCB0aGUgYnV0dG9uJ3NcbiAqIG93biBkaXNhYmxlZCBjaGVjayBwcmV2ZW50cyBhY2NpZGVudGFsIHN1Ym1pc3Npb24uXG4gKi9cbmNvbnN0IF9UQUJfQUNUSU9OX0JUTiA9IHtcbiAgJ2pvYic6ICAgICAgICAgICAgICAgICAgICdzZW5kLWJ0bicsXG4gICdhbmFseXNpcyc6ICAgICAgICAgICAgICAnYW5hbHl6ZS1idG4nLFxuICAnZ29hbHMnOiAgICAgICAgICAgICAgICAgJ3JlY29tbWVuZC1idG4nLFxuICAncmV3cml0ZSc6ICAgICAgICAgICAgICAgJ3Jld3JpdGUtYnRuJyxcbiAgJ3NwZWxsJzogICAgICAgICAgICAgICAgICdzcGVsbC1idG4nLFxuICAnZmluYWxfZ2VuZXJhdGUnOiAgICAgICAgJ2dlbmVyYXRlLWJ0bicsXG4gICdsYXlvdXQnOiAgICAgICAgICAgICAgICAnbGF5b3V0LWJ0bicsXG4gICdkb3dubG9hZCc6ICAgICAgICAgICAgICAnZmluYWwtZ2VuZXJhdGUtcHJvY2VlZC1idG4nLFxuICAnZmluYWxpc2UnOiAgICAgICAgICAgICAgJ2ZpbmFsaXNlLWFjdGlvbi1idG4nLFxufTtcblxuLyoqIENsaWNrIHRoZSBwcmltYXJ5IGFjdGlvbiBidXR0b24gZm9yIHRoZSBjdXJyZW50IHRhYiAoQ3RybCtFbnRlcikuICovXG5mdW5jdGlvbiBfdHJpZ2dlclByaW1hcnlBY3Rpb24oKSB7XG4gIGNvbnN0IHRhYiA9IHR5cGVvZiBzdGF0ZU1hbmFnZXIgIT09ICd1bmRlZmluZWQnID8gc3RhdGVNYW5hZ2VyLmdldEN1cnJlbnRUYWIoKSA6IG51bGw7XG4gIGlmICghdGFiKSByZXR1cm47XG4gIGNvbnN0IGJ0bklkID0gX1RBQl9BQ1RJT05fQlROW3RhYl07XG4gIGlmICghYnRuSWQpIHJldHVybjtcbiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYnRuSWQpO1xuICBpZiAoYnRuICYmICFidG4uZGlzYWJsZWQpIGJ0bi5jbGljaygpO1xufVxuXG4vLyBcdTI1MDBcdTI1MDAgQ2FyZCBuYXZpZ2F0aW9uIGhlbHBlcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKiBSZXR1cm4gdmlzaWJsZSByZXZpZXcgY2FyZHMgZm9yIHRoZSBjdXJyZW50IHRhYi4gKi9cbmZ1bmN0aW9uIF9nZXRDYXJkcygpIHtcbiAgY29uc3QgdGFiID0gdHlwZW9mIHN0YXRlTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcgPyBzdGF0ZU1hbmFnZXIuZ2V0Q3VycmVudFRhYigpIDogbnVsbDtcbiAgaWYgKHRhYiA9PT0gJ3Jld3JpdGUnKSByZXR1cm4gWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5yZXdyaXRlLWNhcmQnKV07XG4gIGlmICh0YWIgPT09ICdzcGVsbCcpICAgcmV0dXJuIFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3BlbGwtY2FyZCcpXTtcbiAgcmV0dXJuIFtdO1xufVxuXG4vKiogVmlzdWFsbHkgaGlnaGxpZ2h0IGEgY2FyZCBhcyBrZXlib2FyZC1mb2N1c2VkLiAqL1xuZnVuY3Rpb24gX2hpZ2hsaWdodENhcmQoY2FyZHMsIGlkeCkge1xuICBjYXJkcy5mb3JFYWNoKChjLCBpKSA9PiB7XG4gICAgaWYgKGkgPT09IGlkeCkge1xuICAgICAgYy5jbGFzc0xpc3QuYWRkKCdrYi1mb2N1c2VkJyk7XG4gICAgICBjLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JywgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjLmNsYXNzTGlzdC5yZW1vdmUoJ2tiLWZvY3VzZWQnKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKiogTW92ZSB0aGUga2V5Ym9hcmQgZm9jdXMgdG8gY2FyZCBhdCBkZWx0YSBvZmZzZXQgZnJvbSBjdXJyZW50LiAqL1xuZnVuY3Rpb24gX21vdmVDYXJkRm9jdXMoZGVsdGEpIHtcbiAgY29uc3QgY2FyZHMgPSBfZ2V0Q2FyZHMoKTtcbiAgaWYgKCFjYXJkcy5sZW5ndGgpIHJldHVybjtcbiAgX2ZvY3VzZWRDYXJkSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjYXJkcy5sZW5ndGggLSAxLCBfZm9jdXNlZENhcmRJbmRleCArIGRlbHRhKSk7XG4gIF9oaWdobGlnaHRDYXJkKGNhcmRzLCBfZm9jdXNlZENhcmRJbmRleCk7XG59XG5cbi8qKiBBY2NlcHQgdGhlIGN1cnJlbnRseSBrZXlib2FyZC1mb2N1c2VkIHJld3JpdGUgY2FyZC4gKi9cbmZ1bmN0aW9uIF9hY2NlcHRGb2N1c2VkQ2FyZCgpIHtcbiAgY29uc3QgdGFiID0gdHlwZW9mIHN0YXRlTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcgPyBzdGF0ZU1hbmFnZXIuZ2V0Q3VycmVudFRhYigpIDogbnVsbDtcbiAgaWYgKHRhYiA9PT0gJ3Jld3JpdGUnKSB7XG4gICAgY29uc3QgY2FyZHMgPSBfZ2V0Q2FyZHMoKTtcbiAgICBpZiAoX2ZvY3VzZWRDYXJkSW5kZXggPCAwIHx8IF9mb2N1c2VkQ2FyZEluZGV4ID49IGNhcmRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IGNhcmQgPSBjYXJkc1tfZm9jdXNlZENhcmRJbmRleF07XG4gICAgY29uc3QgaWQgPSBjYXJkLmlkLnJlcGxhY2UoJ3J3LWNhcmQtJywgJycpO1xuICAgIGlmICh0eXBlb2YgYXBwbHlSZXdyaXRlQWN0aW9uID09PSAnZnVuY3Rpb24nKSBhcHBseVJld3JpdGVBY3Rpb24oaWQsICdhY2NlcHQnKTtcbiAgfSBlbHNlIGlmICh0YWIgPT09ICdzcGVsbCcpIHtcbiAgICBjb25zdCBjYXJkcyA9IF9nZXRDYXJkcygpO1xuICAgIGlmIChfZm9jdXNlZENhcmRJbmRleCA8IDAgfHwgX2ZvY3VzZWRDYXJkSW5kZXggPj0gY2FyZHMubGVuZ3RoKSByZXR1cm47XG4gICAgLy8gc3BlbGwgY2FyZHM6IGZpbmQgdGhlIGFjY2VwdCBidXR0b24gd2l0aGluIHRoZSBmb2N1c2VkIGNhcmRcbiAgICBjb25zdCBidG4gPSBjYXJkc1tfZm9jdXNlZENhcmRJbmRleF0ucXVlcnlTZWxlY3RvcignW2RhdGEtYWN0aW9uPVwia2VlcFwiXSwgLnNwZWxsLWtlZXAtYnRuJyk7XG4gICAgaWYgKGJ0bikgYnRuLmNsaWNrKCk7XG4gIH1cbn1cblxuLyoqIFJlamVjdCB0aGUgY3VycmVudGx5IGtleWJvYXJkLWZvY3VzZWQgcmV2aWV3IGNhcmQuICovXG5mdW5jdGlvbiBfcmVqZWN0Rm9jdXNlZENhcmQoKSB7XG4gIGNvbnN0IHRhYiA9IHR5cGVvZiBzdGF0ZU1hbmFnZXIgIT09ICd1bmRlZmluZWQnID8gc3RhdGVNYW5hZ2VyLmdldEN1cnJlbnRUYWIoKSA6IG51bGw7XG4gIGlmICh0YWIgPT09ICdyZXdyaXRlJykge1xuICAgIGNvbnN0IGNhcmRzID0gX2dldENhcmRzKCk7XG4gICAgaWYgKF9mb2N1c2VkQ2FyZEluZGV4IDwgMCB8fCBfZm9jdXNlZENhcmRJbmRleCA+PSBjYXJkcy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBjYXJkID0gY2FyZHNbX2ZvY3VzZWRDYXJkSW5kZXhdO1xuICAgIGNvbnN0IGlkID0gY2FyZC5pZC5yZXBsYWNlKCdydy1jYXJkLScsICcnKTtcbiAgICBpZiAodHlwZW9mIGFwcGx5UmV3cml0ZUFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykgYXBwbHlSZXdyaXRlQWN0aW9uKGlkLCAncmVqZWN0Jyk7XG4gIH0gZWxzZSBpZiAodGFiID09PSAnc3BlbGwnKSB7XG4gICAgY29uc3QgY2FyZHMgPSBfZ2V0Q2FyZHMoKTtcbiAgICBpZiAoX2ZvY3VzZWRDYXJkSW5kZXggPCAwIHx8IF9mb2N1c2VkQ2FyZEluZGV4ID49IGNhcmRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IGJ0biA9IGNhcmRzW19mb2N1c2VkQ2FyZEluZGV4XS5xdWVyeVNlbGVjdG9yKCdbZGF0YS1hY3Rpb249XCJhcHBseVwiXSwgLnNwZWxsLWFwcGx5LWJ0bicpO1xuICAgIGlmIChidG4pIGJ0bi5jbGljaygpO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBTaG9ydGN1dCBoZWxwIHBhbmVsIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5jb25zdCBfUEFORUxfSUQgPSAna2Itc2hvcnRjdXRzLXBhbmVsJztcblxuLyoqIFRvZ2dsZSB0aGUga2V5Ym9hcmQgc2hvcnRjdXQgaGVscCBwYW5lbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93S2V5Ym9hcmRTaG9ydGN1dHNQYW5lbCgpIHtcbiAgY29uc3QgZXhpc3RpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChfUEFORUxfSUQpO1xuICBpZiAoZXhpc3RpbmcpIHsgZXhpc3RpbmcucmVtb3ZlKCk7IHJldHVybjsgfVxuXG4gIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHBhbmVsLmlkID0gX1BBTkVMX0lEO1xuICBwYW5lbC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJyk7XG4gIHBhbmVsLnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsICd0cnVlJyk7XG4gIHBhbmVsLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdLZXlib2FyZCBzaG9ydGN1dHMnKTtcbiAgcGFuZWwuaW5uZXJIVE1MID0gYFxuICAgIDxkaXYgaWQ9XCJrYi1zaG9ydGN1dHMtaW5uZXJcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MTJweFwiPlxuICAgICAgICA8c3Ryb25nPktleWJvYXJkIFNob3J0Y3V0czwvc3Ryb25nPlxuICAgICAgICA8YnV0dG9uIGlkPVwia2Itc2hvcnRjdXRzLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlIGtleWJvYXJkIHNob3J0Y3V0c1wiIHN0eWxlPVwiYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxLjJlbTtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjJweCA2cHhcIj5cdTI3MTU8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRhYmxlIHN0eWxlPVwiYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO3dpZHRoOjEwMCVcIj5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0cj48dGQgc3R5bGU9XCJwYWRkaW5nOjRweCAxMnB4IDRweCAwXCI+PGtiZD5DdHJsPC9rYmQ+KzxrYmQ+RW50ZXI8L2tiZD48L3RkPjx0ZD5UcmlnZ2VyIHByaW1hcnkgYWN0aW9uIG9uIGN1cnJlbnQgc3RlcDwvdGQ+PC90cj5cbiAgICAgICAgICA8dHI+PHRkIHN0eWxlPVwicGFkZGluZzo0cHggMTJweCA0cHggMFwiPjxrYmQ+Q3RybDwva2JkPis8a2JkPlNoaWZ0PC9rYmQ+KzxrYmQ+Ujwva2JkPjwvdGQ+PHRkPlJlLXJ1biBjdXJyZW50IHdvcmtmbG93IHBoYXNlPC90ZD48L3RyPlxuICAgICAgICAgIDx0cj48dGQgc3R5bGU9XCJwYWRkaW5nOjRweCAxMnB4IDRweCAwXCI+PGtiZD5cdTIxOTE8L2tiZD4gLyA8a2JkPlx1MjE5Mzwva2JkPjwvdGQ+PHRkPk5hdmlnYXRlIGJldHdlZW4gcmV2aWV3IGNhcmRzPC90ZD48L3RyPlxuICAgICAgICAgIDx0cj48dGQgc3R5bGU9XCJwYWRkaW5nOjRweCAxMnB4IDRweCAwXCI+PGtiZD5BPC9rYmQ+PC90ZD48dGQ+QWNjZXB0IGZvY3VzZWQgY2FyZCAocmV3cml0ZSAvIHNwZWxsKTwvdGQ+PC90cj5cbiAgICAgICAgICA8dHI+PHRkIHN0eWxlPVwicGFkZGluZzo0cHggMTJweCA0cHggMFwiPjxrYmQ+Ujwva2JkPjwvdGQ+PHRkPlJlamVjdCBmb2N1c2VkIGNhcmQgKHJld3JpdGUgLyBzcGVsbCk8L3RkPjwvdHI+XG4gICAgICAgICAgPHRyPjx0ZCBzdHlsZT1cInBhZGRpbmc6NHB4IDEycHggNHB4IDBcIj48a2JkPkN0cmw8L2tiZD4rPGtiZD5aPC9rYmQ+PC90ZD48dGQ+VW5kbyBNYXN0ZXIgQ1YgY2hhbmdlIChNYXN0ZXIgQ1YgbW9kYWwpPC90ZD48L3RyPlxuICAgICAgICAgIDx0cj48dGQgc3R5bGU9XCJwYWRkaW5nOjRweCAxMnB4IDRweCAwXCI+PGtiZD5DdHJsPC9rYmQ+KzxrYmQ+U2hpZnQ8L2tiZD4rPGtiZD5aPC9rYmQ+PC90ZD48dGQ+UmVkbyBNYXN0ZXIgQ1YgY2hhbmdlIChNYXN0ZXIgQ1YgbW9kYWwpPC90ZD48L3RyPlxuICAgICAgICAgIDx0cj48dGQgc3R5bGU9XCJwYWRkaW5nOjRweCAxMnB4IDRweCAwXCI+PGtiZD4/PC9rYmQ+PC90ZD48dGQ+VG9nZ2xlIHRoaXMgaGVscCBwYW5lbDwvdGQ+PC90cj5cbiAgICAgICAgICA8dHI+PHRkIHN0eWxlPVwicGFkZGluZzo0cHggMTJweCA0cHggMFwiPjxrYmQ+RXNjPC9rYmQ+PC90ZD48dGQ+Q2xvc2UgbW9kYWxzIC8gdGhpcyBwYW5lbDwvdGQ+PC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+YDtcbiAgT2JqZWN0LmFzc2lnbihwYW5lbC5zdHlsZSwge1xuICAgIHBvc2l0aW9uOiAgICdmaXhlZCcsXG4gICAgYm90dG9tOiAgICAgJzgwcHgnLFxuICAgIHJpZ2h0OiAgICAgICcyNHB4JyxcbiAgICBiYWNrZ3JvdW5kOiAnIzFmMjkzNycsXG4gICAgY29sb3I6ICAgICAgJyNmOWZhZmInLFxuICAgIGJvcmRlcjogICAgICcxcHggc29saWQgIzM3NDE1MScsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICBwYWRkaW5nOiAgICAnMTZweCAyMHB4JyxcbiAgICB6SW5kZXg6ICAgICAnMTAwMDAnLFxuICAgIGZvbnRTaXplOiAgICcwLjg1ZW0nLFxuICAgIG1pbldpZHRoOiAgICczNDBweCcsXG4gICAgYm94U2hhZG93OiAgJzAgNHB4IDIwcHggcmdiYSgwLDAsMCwwLjUpJyxcbiAgfSk7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocGFuZWwpO1xuICBwYW5lbC5xdWVyeVNlbGVjdG9yKCcja2Itc2hvcnRjdXRzLWNsb3NlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBwYW5lbC5yZW1vdmUoKSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBSZXNldCBjYXJkIGZvY3VzIHdoZW4gdGFiIGNoYW5nZXMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKiBDYWxsZWQgd2hlbmV2ZXIgdGhlIGFjdGl2ZSB0YWIgY2hhbmdlcyBzbyBjYXJkIGZvY3VzIHJlc2V0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldENhcmRGb2N1cygpIHtcbiAgX2ZvY3VzZWRDYXJkSW5kZXggPSAtMTtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmtiLWZvY3VzZWQnKS5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2tiLWZvY3VzZWQnKSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBHbG9iYWwga2V5ZG93biBoYW5kbGVyIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5mdW5jdGlvbiBfb25LZXlEb3duKGUpIHtcbiAgLy8gQ3RybCtFbnRlciBcdTIxOTIgcHJpbWFyeSBhY3Rpb24gKGFsd2F5cywgZXZlbiBpbiB0ZXh0IGlucHV0cyB3aGVuIHRoZSBtYWluXG4gIC8vIHNlbmQtYm94IGlzIGZvY3VzZWQsIHRvIG1hdGNoIHRoZSBleGlzdGluZyBFbnRlciBiZWhhdmlvdXIgdGhlcmUpLlxuICBpZiAoZS5jdHJsS2V5ICYmIGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgX3RyaWdnZXJQcmltYXJ5QWN0aW9uKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ3RybCtTaGlmdCtSIFx1MjE5MiByZS1ydW4gY3VycmVudCBwaGFzZVxuICBpZiAoZS5jdHJsS2V5ICYmIGUuc2hpZnRLZXkgJiYgZS5rZXkgPT09ICdSJykge1xuICAgIGNvbnN0IGFjdGl2ZUVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkXj1cInN0ZXAtXCJdLmFjdGl2ZScpO1xuICAgIGNvbnN0IHN0ZXAgPSBhY3RpdmVFbCA/IGFjdGl2ZUVsLmlkLnJlcGxhY2UoJ3N0ZXAtJywgJycpIDogbnVsbDtcbiAgICBpZiAoc3RlcCAmJiB0eXBlb2YgY29uZmlybVJlUnVuUGhhc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbmZpcm1SZVJ1blBoYXNlKHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDdHJsK1ogLyBDdHJsK1NoaWZ0K1ogXHUyMTkyIHVuZG8vcmVkbyB0aGUgbW9zdCByZWNlbnQgTWFzdGVyIENWIGRhdGEgY2hhbmdlLlxuICAvLyBTY29wZWQgdG8gd2hlbiB0aGUgTWFzdGVyIENWIG1vZGFsIGlzIG9wZW4gXHUyMDE0IGFuZCBubyBuZXN0ZWQgc3ViLW1vZGFsXG4gIC8vIChlLmcuIHRoZSBiYWNrdXAtaGlzdG9yeSBicm93c2VyKSBpcyBzdGFja2VkIG9uIHRvcCBvZiBpdCBcdTIwMTQgYW5kIGZvY3VzXG4gIC8vIGlzbid0IGluIGEgdGV4dCBmaWVsZCwgc2luY2UgQ3RybCtaIGluc2lkZSBhIHRleHRhcmVhIG11c3Qgc3RpbGwgcGVyZm9ybVxuICAvLyBuYXRpdmUgdGV4dC11bmRvIHJhdGhlciB0aGFuIGJlaW5nIGhpamFja2VkIGJ5IHRoaXMgc2hvcnRjdXQuXG4gIGlmIChlLmN0cmxLZXkgJiYgIWUuYWx0S2V5ICYmIChlLmtleSA9PT0gJ3onIHx8IGUua2V5ID09PSAnWicpXG4gICAgICAmJiBfbWFzdGVyQ3ZNb2RhbE9wZW4oKSAmJiAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2t1cC1oaXN0b3J5LW92ZXJsYXknKVxuICAgICAgJiYgIV9pblRleHRJbnB1dCgpKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICBpZiAodHlwZW9mIHJlZG9NYXN0ZXJEYXRhQ2hhbmdlID09PSAnZnVuY3Rpb24nKSByZWRvTWFzdGVyRGF0YUNoYW5nZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHVuZG9NYXN0ZXJEYXRhQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB1bmRvTWFzdGVyRGF0YUNoYW5nZSgpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBBbGwgc2luZ2xlLWtleSBzaG9ydGN1dHMgYXJlIHN1cHByZXNzZWQgd2hlbiB0eXBpbmcgaW50byBhbiBpbnB1dC5cbiAgaWYgKF9pblRleHRJbnB1dCgpKSByZXR1cm47XG4gIC8vIEFsbCBzaW5nbGUta2V5IHNob3J0Y3V0cyBhcmUgc3VwcHJlc3NlZCB3aGVuIGEgbW9kYWwgZGlhbG9nIGlzIG9wZW4sXG4gIC8vIGV4Y2VwdCBFc2NhcGUgKGhhbmRsZWQgYnkgdWktY29yZS5qcykuXG4gIGlmIChfbW9kYWxPcGVuKCkpIHJldHVybjtcblxuICBzd2l0Y2ggKGUua2V5KSB7XG4gICAgY2FzZSAnPyc6XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzaG93S2V5Ym9hcmRTaG9ydGN1dHNQYW5lbCgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBfbW92ZUNhcmRGb2N1cygtMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgX21vdmVDYXJkRm9jdXMoMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdhJzpcbiAgICBjYXNlICdBJzpcbiAgICAgIF9hY2NlcHRGb2N1c2VkQ2FyZCgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncic6XG4gICAgY2FzZSAnUic6XG4gICAgICBfcmVqZWN0Rm9jdXNlZENhcmQoKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgSW5pdGlhbGlzYXRpb24gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbi8qKlxuICogQXR0YWNoIHRoZSBnbG9iYWwga2V5Ym9hcmQtc2hvcnRjdXQgbGlzdGVuZXIuXG4gKiBDYWxsZWQgb25jZSBmcm9tIGFwcC5qcyBhZnRlciBET01Db250ZW50TG9hZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdEtleWJvYXJkU2hvcnRjdXRzKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgX29uS2V5RG93bik7XG59XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vLyBPcmNoZXN0cmF0b3IgZW50cnktcG9pbnQgXHUyMDE0IGFsbCBtb2R1bGUgZnVuY3Rpb25zIGFyZSBleHBvc2VkIGFzIGdsb2JhbHMgYnkgYnVuZGxlLmpzLlxuLy8gTm90ZTogYXBwLmpzIGlzIGEgcGxhaW4gbGVnYWN5IHNjcmlwdCAobm90IGJ1bmRsZWQpLiBsb2dsZXZlbCBpcyBhdmFpbGFibGVcbi8vIHZpYSBnbG9iYWxUaGlzLmxvZ2xldmVsIChzZXQgYnkgYnVuZGxlLmpzIHdoaWNoIGluY2x1ZGVzIHdlYi9sb2dnZXIuanMpLlxuY29uc3QgX2FwcExvZyA9ICh0eXBlb2YgbG9nbGV2ZWwgIT09ICd1bmRlZmluZWQnKSA/IGxvZ2xldmVsLmdldExvZ2dlcignYXBwJykgOiBjb25zb2xlO1xuLy8gVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgaW5pdCgpIGFuZCB0b3AtbGV2ZWwgZXZlbnQtd2lyaW5nIChcdTIyNjQgMzAwIGxpbmVzKS5cblxubGV0IF9saXN0ZW5lcnNSZWdpc3RlcmVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIF9zZXRDb25uZWN0aW9uTWVzc2FnZShtZXNzYWdlTm9kZSwgdGV4dCwga2luZCA9ICdpbmZvJykge1xuICBpZiAoIW1lc3NhZ2VOb2RlKSByZXR1cm47XG4gIGNvbnN0IGNvbnRlbnQgPSBtZXNzYWdlTm9kZS5xdWVyeVNlbGVjdG9yKCcuY29udGVudCcpO1xuICBpZiAoIWNvbnRlbnQpIHJldHVybjtcbiAgY29udGVudC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGNvbnRlbnQuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICBjb250ZW50LnN0eWxlLnBhZGRpbmcgPSAnNnB4IDEwcHgnO1xuICBjb250ZW50LnN0eWxlLmJvcmRlclJhZGl1cyA9ICc5OTlweCc7XG4gIGNvbnRlbnQuc3R5bGUuZm9udFdlaWdodCA9ICc2MDAnO1xuICBjb250ZW50LnN0eWxlLmZvbnRTaXplID0gJzAuODhlbSc7XG4gIGNvbnRlbnQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjY2JkNWUxJztcbiAgaWYgKGtpbmQgPT09ICdzdWNjZXNzJykge1xuICAgIGNvbnRlbnQuc3R5bGUuY29sb3IgPSAnIzE2NjUzNCc7XG4gICAgY29udGVudC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNlY2ZkZjUnO1xuICAgIGNvbnRlbnQuc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzg2ZWZhYyc7XG4gIH0gZWxzZSBpZiAoa2luZCA9PT0gJ2Vycm9yJykge1xuICAgIGNvbnRlbnQuc3R5bGUuY29sb3IgPSAnI2I5MWMxYyc7XG4gICAgY29udGVudC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmZWYyZjInO1xuICAgIGNvbnRlbnQuc3R5bGUuYm9yZGVyQ29sb3IgPSAnI2ZlY2FjYSc7XG4gIH0gZWxzZSB7XG4gICAgY29udGVudC5zdHlsZS5jb2xvciA9ICcjMWU0MGFmJztcbiAgICBjb250ZW50LnN0eWxlLmJhY2tncm91bmQgPSAnI2VmZjZmZic7XG4gICAgY29udGVudC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjYmZkYmZlJztcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpbml0KCkge1xuICAvLyBJbml0aWFsaXplIGFib3J0IGNvbnRyb2xsZXIgdG8gbnVsbCAoc2V0IHRvIG5ldyBBYm9ydENvbnRyb2xsZXIgYnkgc2V0TG9hZGluZyh0cnVlKSlcbiAgd2luZG93Ll9jdXJyZW50QWJvcnRDb250cm9sbGVyID0gbnVsbDtcblxuICAvLyBGbHVzaCBhbnkgbWVzc2FnZXMgdGhhdCB3ZXJlIHF1ZXVlZCBiZWZvcmUgRE9NQ29udGVudExvYWRlZCAoZGVmZW5zaXZlIFx1MjAxNCBzaG91bGQgYmUgZW1wdHkgaW4gcHJhY3RpY2UpLlxuICBfZmx1c2hNZXNzYWdlUXVldWUoKTtcblxuICBjb25zdCBoYXNBY3RpdmVTZXNzaW9uID0gYXdhaXQgZW5zdXJlU2Vzc2lvbkNvbnRleHQoKTtcbiAgaWYgKCFoYXNBY3RpdmVTZXNzaW9uKSB7XG4gICAgY29uc3QgZmFpbGVkTWVzc2FnZSA9IGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsICdcdTI2QTBcdUZFMEYgQ291bGQgbm90IGVzdGFibGlzaCBhIHNlc3Npb24uIENyZWF0ZSBvciBsb2FkIGEgc2Vzc2lvbiB0byBjb250aW51ZS4nKTtcbiAgICBfc2V0Q29ubmVjdGlvbk1lc3NhZ2UoZmFpbGVkTWVzc2FnZSwgJ1x1MjZBMFx1RkUwRiBDb3VsZCBub3QgZXN0YWJsaXNoIGEgc2Vzc2lvbi4gQ3JlYXRlIG9yIGxvYWQgYSBzZXNzaW9uIHRvIGNvbnRpbnVlLicsICdlcnJvcicpO1xuICAgIHNldHVwRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTaG93IHdlbGNvbWUvb25ib2FyZGluZyBtb2RhbCBvbiBldmVyeSBzdGFydHVwIHVudGlsIHVzZXIgZGlzbWlzc2VzIGl0LlxuICBhd2FpdCBtYXliZVNob3dXZWxjb21lTW9kYWwoKTtcblxuICAvLyBSZXN0b3JlIHNlc3Npb24gc3RhdGUgZmlyc3RcbiAgYXdhaXQgcmVzdG9yZVNlc3Npb24oKTtcblxuICAvLyBTaG93IGNvbm5lY3Rpb24gc3RhdHVzIGFmdGVyIHJlc3RvcmVTZXNzaW9uIHNvIGl0IGlzIG5vdCByZW1vdmVkIGJ5IGhpc3RvcnkgcmVzdG9yZS5cbiAgY29uc3QgY29ubmVjdGlvbk1lc3NhZ2UgPSBhcHBlbmRNZXNzYWdlKCdzeXN0ZW0nLCAnXHVEODNEXHVERDA0IENvbm5lY3RpbmcgdG8gQ1YgQnVpbGRlci4uLicpO1xuICBfc2V0Q29ubmVjdGlvbk1lc3NhZ2UoY29ubmVjdGlvbk1lc3NhZ2UsICdcdUQ4M0RcdUREMDQgQ29ubmVjdGluZyB0byBDViBCdWlsZGVyLi4uJywgJ2luZm8nKTtcblxuICAvLyBSZXN0b3JlIEFUUyBiYWRnZSBmcm9tIGNhY2hlZCBzY29yZSAoaWYgYW55KVxuICB1cGRhdGVBdHNCYWRnZShzdGF0ZU1hbmFnZXIuZ2V0QXRzU2NvcmUoKSk7XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVzdFxuICBhd2FpdCBmZXRjaFN0YXR1cygpO1xuICBjb25zdCBjb25uZWN0ZWRNZXNzYWdlID0gYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgJ1x1MjcwNSBDb25uZWN0aW9uIHN1Y2Nlc3NmdWwuJyk7XG4gIF9zZXRDb25uZWN0aW9uTWVzc2FnZShjb25uZWN0ZWRNZXNzYWdlLCAnXHUyNzA1IENvbm5lY3Rpb24gc3VjY2Vzc2Z1bC4nLCAnc3VjY2VzcycpO1xuICBpZiAoc3RhdGVNYW5hZ2VyLmdldEN1cnJlbnRUYWIoKSA9PT0gJ2pvYicpIGF3YWl0IHBvcHVsYXRlSm9iVGFiKCk7XG4gIHNldHVwRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAvLyBTZXQgdXAgcGVyaW9kaWMgc3RhdGUgc2F2aW5nXG4gIHNldEludGVydmFsKHNhdmVUYWJEYXRhLCA1MDAwKTsgLy8gU2F2ZSBldmVyeSA1IHNlY29uZHNcblxuICAvLyBTYXZlIHN0YXRlIGJlZm9yZSBwYWdlIHVubG9hZFxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgKCkgPT4ge1xuICAgIHNhdmVUYWJEYXRhKCk7XG4gICAgY29uc3QgYWN0aXZlU2Vzc2lvbklkID0gc3RhdGVNYW5hZ2VyLmdldFNlc3Npb25JZCgpO1xuICAgIGlmIChhY3RpdmVTZXNzaW9uSWQpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLlNFU1NJT05fSUQsIGFjdGl2ZVNlc3Npb25JZCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQcm9tcHQgdXNlciB0byBhbmFseXplIGlmIGEgam9iIGRlc2NyaXB0aW9uIGlzIGxvYWRlZCBidXQgbm90IHlldCBhbmFseXplZC5cbiAgLy8gRG8gTk9UIGF1dG8tZmlyZSBcdTIwMTQgYSByZXR1cm5pbmcgdXNlciBtYXkgaGF2ZSBpbnRlbnRpb25hbGx5IGxlZnQgaXQgdW5hbmFseXplZFxuICAvLyAoZS5nLiBtaWQtZWRpdCkuIExldCB0aGVtIGNsaWNrIEFuYWx5c2UgSm9iIGV4cGxpY2l0bHkgKEdBUC0yNDgpLlxuICBpZiAoIXN0YXRlTWFuYWdlci5pc1JlY29ubmVjdGluZygpKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgZmV0Y2hTdGF0dXMoKTtcbiAgICBpZiAoIXN0YXR1cy5fZXJyb3IgJiYgc3RhdHVzLmpvYl9kZXNjcmlwdGlvbiAmJiAhc3RhdHVzLmpvYl9hbmFseXNpcykge1xuICAgICAgYXBwZW5kTWVzc2FnZSgnc3lzdGVtJywgJ1x1RDgzRFx1RENDQiBKb2IgZGVzY3JpcHRpb24gZGV0ZWN0ZWQgXHUyMDE0IGNsaWNrIDxzdHJvbmc+QW5hbHlzZSBKb2I8L3N0cm9uZz4gd2hlbiByZWFkeSB0byBiZWdpbi4nKTtcbiAgICAgIGNvbnN0IGFuYWx5emVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYW5hbHl6ZS1idG4nKTtcbiAgICAgIGlmIChhbmFseXplQnRuKSB7XG4gICAgICAgIGFuYWx5emVCdG4uc3R5bGUub3V0bGluZSA9ICcycHggc29saWQgIzNiODJmNic7XG4gICAgICAgIGFuYWx5emVCdG4uc3R5bGUub3V0bGluZU9mZnNldCA9ICcycHgnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RhdHVzLmpvYl9hbmFseXNpcykge1xuICAgICAgX2FwcExvZy5pbmZvKCdKb2IgYW5hbHlzaXMgYWxyZWFkeSBjb21wbGV0ZSwgc2tpcHBpbmcgYXV0by1hbmFseXNpcycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBfYXBwTG9nLmluZm8oJ1JlY29ubmVjdGluZyB0byBleGlzdGluZyBzZXNzaW9uLCBza2lwcGluZyBhdXRvLWFuYWx5c2lzJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0dXBFdmVudExpc3RlbmVycygpIHtcbiAgaWYgKF9saXN0ZW5lcnNSZWdpc3RlcmVkKSByZXR1cm47XG4gIF9saXN0ZW5lcnNSZWdpc3RlcmVkID0gdHJ1ZTtcblxuICAvLyBUYWIgc3dpdGNoaW5nXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50YWInKS5mb3JFYWNoKHRhYiA9PiB7XG4gICAgdGFiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gc3dpdGNoVGFiKHRhYi5kYXRhc2V0LnRhYikpO1xuICB9KTtcblxuICAvLyBNZXNzYWdlIHNlbmRpbmdcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbmQtYnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzZW5kTWVzc2FnZSk7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZXNzYWdlLWlucHV0JykuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCAoZSkgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykgc2VuZE1lc3NhZ2UoKTtcbiAgfSk7XG5cbiAgLy8gQWN0aW9uIGJ1dHRvbnMgXHUyMDE0IG9uZSBwZXIgd29ya2Zsb3cgc3RhZ2VcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FuYWx5emUtYnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhbmFseXplSm9iKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlY29tbWVuZC1idG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHNlbmRBY3Rpb24oJ3JlY29tbWVuZF9jdXN0b21pemF0aW9ucycpKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dlbmVyYXRlLWJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFNvZnQgZ2F0ZTogd2FybiBpZiBjdXN0b21pc2F0aW9uIGl0ZW1zIGhhdmUgbmV2ZXIgYmVlbiBpbmRpdmlkdWFsbHkgcmV2aWV3ZWQgKEdBUC0xMTYpXG4gICAgY29uc3QgcmV2aWV3ZWQgPSB3aW5kb3cuX2V4cGxpY2l0bHlSZXZpZXdlZCB8fCB7IGV4cGVyaWVuY2VzOiBuZXcgU2V0KCksIHNraWxsczogbmV3IFNldCgpIH07XG4gICAgY29uc3QgdG90YWxFeHAgPSAod2luZG93Ll9leHBlcmllbmNlc09yZGVyZWQgfHwgW10pLmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbFNraWxsID0gT2JqZWN0LmtleXModXNlclNlbGVjdGlvbnM/LnNraWxscyB8fCB7fSkubGVuZ3RoO1xuICAgIGNvbnN0IHVucmV2aWV3ZWRFeHAgPSB0b3RhbEV4cCAtIHJldmlld2VkLmV4cGVyaWVuY2VzLnNpemU7XG4gICAgY29uc3QgdW5yZXZpZXdlZFNraWxsID0gdG90YWxTa2lsbCAtIHJldmlld2VkLnNraWxscy5zaXplO1xuICAgIGNvbnN0IHVucmV2aWV3ZWRUb3RhbCA9IE1hdGgubWF4KDAsIHVucmV2aWV3ZWRFeHApICsgTWF0aC5tYXgoMCwgdW5yZXZpZXdlZFNraWxsKTtcbiAgICBpZiAodW5yZXZpZXdlZFRvdGFsID4gMCkge1xuICAgICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICAgIGlmICh1bnJldmlld2VkRXhwID4gMCkgcGFydHMucHVzaChgJHt1bnJldmlld2VkRXhwfSBleHBlcmllbmNlIGVudHIke3VucmV2aWV3ZWRFeHAgPT09IDEgPyAneScgOiAnaWVzJ31gKTtcbiAgICAgIGlmICh1bnJldmlld2VkU2tpbGwgPiAwKSBwYXJ0cy5wdXNoKGAke3VucmV2aWV3ZWRTa2lsbH0gc2tpbGwke3VucmV2aWV3ZWRTa2lsbCA9PT0gMSA/ICcnIDogJ3MnfWApO1xuICAgICAgY29uc3Qgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgYCR7cGFydHMuam9pbignIGFuZCAnKX0gbm90IGluZGl2aWR1YWxseSByZXZpZXdlZCBcdTIwMTQgdGhlIEFJJ3MgcmVjb21tZW5kYXRpb24gd2lsbCBiZSB1c2VkIGZvciB0aGVzZS5cXG5cXG5Qcm9jZWVkIGFueXdheT9gXG4gICAgICApO1xuICAgICAgaWYgKCFvaykgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodXNlclNlbGVjdGlvbnMgJiYgKE9iamVjdC5rZXlzKHVzZXJTZWxlY3Rpb25zLmV4cGVyaWVuY2VzKS5sZW5ndGggPiAwIHx8IE9iamVjdC5rZXlzKHVzZXJTZWxlY3Rpb25zLnNraWxscykubGVuZ3RoID4gMCkpIHtcbiAgICAgIGFwcGVuZE1lc3NhZ2UoJ3N5c3RlbScsICdBcHBseWluZyB5b3VyIHJldmlldyBkZWNpc2lvbnMuLi4nKTtcbiAgICAgIC8vIERlY2lzaW9ucyB3ZXJlIGFscmVhZHkgc3VibWl0dGVkIHZpYSBzdWJtaXRFeHBlcmllbmNlRGVjaXNpb25zL3N1Ym1pdFNraWxsRGVjaXNpb25zXG4gICAgICAvLyBCYWNrZW5kIGhhcyB0aGVtIGluIGNvbnZlcnNhdGlvbi5zdGF0ZVsnZXhwZXJpZW5jZV9kZWNpc2lvbnMnXSBhbmQgWydza2lsbF9kZWNpc2lvbnMnXVxuICAgIH1cbiAgICBhd2FpdCBmZXRjaEFuZFJldmlld1Jld3JpdGVzKCk7XG4gIH0pO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmV3cml0ZS1idG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN1Ym1pdFJld3JpdGVEZWNpc2lvbnMpO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3BlbGwtYnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdWJtaXRTcGVsbENoZWNrRGVjaXNpb25zKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dlbmVyYXRlLXByb2NlZWQtYnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBzd2l0Y2hUYWIoJ2xheW91dCcpKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheW91dC1idG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUxheW91dFByaW1hcnlBY3Rpb24pO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluYWwtZ2VuZXJhdGUtcHJvY2VlZC1idG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZpbmFsR2VuZXJhdGlvbkNvbXBsZXRlKTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbmFsaXNlLWFjdGlvbi1idG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHN3aXRjaFRhYignZmluYWxpc2UnKSk7XG5cbiAgaWYgKHR5cGVvZiBpbml0S2V5Ym9hcmRTaG9ydGN1dHMgPT09ICdmdW5jdGlvbicpIGluaXRLZXlib2FyZFNob3J0Y3V0cygpO1xuICBpZiAodHlwZW9mIGluaXRFYXJseVByZXZpZXdQYW5lbCA9PT0gJ2Z1bmN0aW9uJykgaW5pdEVhcmx5UHJldmlld1BhbmVsKCk7XG59XG5cbi8vIFRlc3RzIG5vdyBpbXBvcnQgaGVscGVyIGZ1bmN0aW9ucyBmcm9tIHRoZWlyIGNhbm9uaWNhbCBFUyBtb2R1bGVzIGRpcmVjdGx5LlxuXG5leHBvcnQgeyBpbml0LCBzZXR1cEV2ZW50TGlzdGVuZXJzIH07XG4iLCAiLy8gQ29weXJpZ2h0IChDKSAyMDI2IEdyZWdvcnkgUi4gV2FybmVzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vXG4vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBDVi1CdWlsZGVyLlxuLy8gRm9yIGNvbW1lcmNpYWwgbGljZW5zaW5nLCBjb250YWN0IGdyZWdAd2FybmVzLWlubm92YXRpb25zLmNvbVxuXG4vKipcbiAqIHdlYi9zcmMvbWFpbi5qcyBcdTIwMTQgZXNidWlsZCBlbnRyeSBwb2ludCBmb3IgdGhlIGZ1bGwgYnJvd3NlciBidW5kbGUuXG4gKlxuICogUGhhc2UgMiBtb2R1bGVzOiB1dGlscywgYXBpLWNsaWVudCwgc3RhdGUtbWFuYWdlciwgdWktY29yZSwgbGF5b3V0LWluc3RydWN0aW9uXG4gKiBQaGFzZSAzIG1vZHVsZXM6IGFsbCBkb21haW4gc3BsaXQgbW9kdWxlcyAoVGllciAwXHUyMDEzNykgZnJvbSB0aGUgYXBwLmpzIG1vZHVsYXJpc2F0aW9uLlxuICpcbiAqIEV2ZXJ5IGV4cG9ydCBpcyBhc3NpZ25lZCB0byBgd2luZG93YCBzbyB0aGF0IGxlZ2FjeSBpbmxpbmUgb25jbGljaz1cImZuKClcIlxuICogaGFuZGxlcnMgYW5kIGFwcC5qcyBjb250aW51ZSB0byB3b3JrIHVuY2hhbmdlZC5cbiAqXG4gKiBCdWlsZDogIG5wbSBydW4gYnVpbGQgICAgICAgICAgXHUyMTkyIHdlYi9idW5kbGUuanMgKGRldmVsb3BtZW50LCB1bm1pbmlmaWVkKVxuICogICAgICAgICBucG0gcnVuIGJ1aWxkOnByb2QgICAgIFx1MjE5MiB3ZWIvYnVuZGxlLmpzIChtaW5pZmllZClcbiAqICAgICAgICAgbnBtIHJ1biBidWlsZDp3YXRjaCAgICBcdTIxOTIgcmVidWlsZCBvbiBldmVyeSBzb3VyY2UgY2hhbmdlXG4gKi9cblxuLy8gXHUyNTAwXHUyNTAwIExvZ2dlciAobXVzdCBiZSBmaXJzdCBzbyBuYW1lZCBsb2dnZXJzIGFyZSBhdmFpbGFibGUgdG8gYWxsIG1vZHVsZXMpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuaW1wb3J0ICogYXMgTG9nZ2VyIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMCBQaGFzZSAyIChvcmlnaW5hbCBidW5kbGUpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuaW1wb3J0ICogYXMgVXRpbHMgICAgICAgICAgICAgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0ICogYXMgQXBpQ2xpZW50ICAgICAgICAgZnJvbSAnLi4vYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgKiBhcyBTdGF0ZSAgICAgICAgICAgICBmcm9tICcuLi9zdGF0ZS1tYW5hZ2VyLmpzJztcbmltcG9ydCAqIGFzIFByb3ZpZGVySW5mbyAgICAgIGZyb20gJy4uL3Byb3ZpZGVyLWluZm8uanMnO1xuaW1wb3J0ICogYXMgVWlDb3JlICAgICAgICAgICAgZnJvbSAnLi4vdWktY29yZS5qcyc7XG5pbXBvcnQgKiBhcyBMYXlvdXRJbnN0cnVjdGlvbiBmcm9tICcuLi9sYXlvdXQtaW5zdHJ1Y3Rpb24uanMnO1xuXG4vLyBcdTI1MDBcdTI1MDAgVGllciAwIFx1MjAxNCBubyBkZXBlbmRlbmNpZXMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5pbXBvcnQgKiBhcyBWYWxpZGF0b3JzICAgICAgICAgICAgZnJvbSAnLi4vdmFsaWRhdG9ycy5qcyc7XG5pbXBvcnQgKiBhcyBSZWNvbW1lbmRhdGlvbkhlbHBlcnMgZnJvbSAnLi4vcmVjb21tZW5kYXRpb24taGVscGVycy5qcyc7XG5pbXBvcnQgKiBhcyBVaUhlbHBlcnMgICAgICAgICAgICAgZnJvbSAnLi4vdWktaGVscGVycy5qcyc7XG5pbXBvcnQgKiBhcyBQcm9wb3NhbFJldmlldyAgICAgICAgZnJvbSAnLi4vcHJvcG9zYWwtcmV2aWV3LmpzJztcblxuLy8gXHUyNTAwXHUyNTAwIFRpZXIgMSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbmltcG9ydCAqIGFzIEZldGNoVXRpbHMgICBmcm9tICcuLi9mZXRjaC11dGlscy5qcyc7XG5pbXBvcnQgKiBhcyBNZXNzYWdlUXVldWUgZnJvbSAnLi4vbWVzc2FnZS1xdWV1ZS5qcyc7XG5pbXBvcnQgKiBhcyBMbG1Mb2cgICAgICAgZnJvbSAnLi4vbGxtLWxvZy5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMCBUaWVyIDIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5pbXBvcnQgKiBhcyBBdXRoUHJvdmlkZXIgICBmcm9tICcuLi9hdXRoLXByb3ZpZGVyLmpzJztcbmltcG9ydCAqIGFzIEF0c1JlZmluZW1lbnQgIGZyb20gJy4uL2F0cy1yZWZpbmVtZW50LmpzJztcbmltcG9ydCAqIGFzIEF0c01vZGFscyAgICAgIGZyb20gJy4uL2F0cy1tb2RhbHMuanMnO1xuaW1wb3J0ICogYXMgU2Vzc2lvbkFjdGlvbnMgZnJvbSAnLi4vc2Vzc2lvbi1hY3Rpb25zLmpzJztcbmltcG9ydCAqIGFzIEpvYkFuYWx5c2lzICAgIGZyb20gJy4uL2pvYi1hbmFseXNpcy5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMCBUaWVyIDMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5pbXBvcnQgKiBhcyBHb2FscyAgICAgICAgICAgZnJvbSAnLi4vZ29hbHMuanMnO1xuaW1wb3J0ICogYXMgU2Vzc2lvbk1hbmFnZXIgIGZyb20gJy4uL3Nlc3Npb24tbWFuYWdlci5qcyc7XG5pbXBvcnQgKiBhcyBKb2JJbnB1dCAgICAgICAgZnJvbSAnLi4vam9iLWlucHV0LmpzJztcbmltcG9ydCAqIGFzIE1lc3NhZ2VEaXNwYXRjaCBmcm9tICcuLi9tZXNzYWdlLWRpc3BhdGNoLmpzJztcbmltcG9ydCAqIGFzIFF1ZXN0aW9uc1BhbmVsICBmcm9tICcuLi9xdWVzdGlvbnMtcGFuZWwuanMnO1xuXG4vLyBcdTI1MDBcdTI1MDAgVGllciA0IFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuaW1wb3J0ICogYXMgUmV2aWV3SWNvbnMgICAgZnJvbSAnLi4vcmV2aWV3LWljb25zLmpzJztcbmltcG9ydCAqIGFzIFJldmlld1RhYmxlQmFzZSBmcm9tICcuLi9yZXZpZXctdGFibGUtYmFzZS5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMCBUaWVyIDUgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5pbXBvcnQgKiBhcyBFeHBlcmllbmNlUmV2aWV3ICAgZnJvbSAnLi4vZXhwZXJpZW5jZS1yZXZpZXcuanMnO1xuaW1wb3J0ICogYXMgU2tpbGxzUmV2aWV3ICAgICAgIGZyb20gJy4uL3NraWxscy1yZXZpZXcuanMnO1xuaW1wb3J0ICogYXMgQWNoaWV2ZW1lbnRzUmV2aWV3IGZyb20gJy4uL2FjaGlldmVtZW50cy1yZXZpZXcuanMnO1xuaW1wb3J0ICogYXMgVGFnbGluZVJldmlldyAgICAgIGZyb20gJy4uL3RhZ2xpbmUtcmV2aWV3LmpzJztcbmltcG9ydCAqIGFzIFN1bW1hcnlSZXZpZXcgICAgICBmcm9tICcuLi9zdW1tYXJ5LXJldmlldy5qcyc7XG5pbXBvcnQgKiBhcyBQdWJsaWNhdGlvbnNSZXZpZXcgZnJvbSAnLi4vcHVibGljYXRpb25zLXJldmlldy5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMCBUaWVyIDYgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5pbXBvcnQgKiBhcyBSZXdyaXRlUmV2aWV3ICAgICAgZnJvbSAnLi4vcmV3cml0ZS1yZXZpZXcuanMnO1xuaW1wb3J0ICogYXMgU3BlbGxDaGVjayAgICAgICAgIGZyb20gJy4uL3NwZWxsLWNoZWNrLmpzJztcbmltcG9ydCAqIGFzIERvd25sb2FkVGFiICAgICAgICBmcm9tICcuLi9kb3dubG9hZC10YWIuanMnO1xuaW1wb3J0ICogYXMgRmluYWxHZW5lcmF0ZSAgICAgIGZyb20gJy4uL2ZpbmFsLWdlbmVyYXRlLmpzJztcbmltcG9ydCAqIGFzIFdvcmtmbG93U3RlcHMgICAgICBmcm9tICcuLi93b3JrZmxvdy1zdGVwcy5qcyc7XG5pbXBvcnQgKiBhcyBNYXN0ZXJEYXRhQWlVcGRhdGUgZnJvbSAnLi4vbWFzdGVyLWRhdGEtYWktdXBkYXRlLmpzJztcbmltcG9ydCAqIGFzIE1hc3RlckN2ICAgICAgICAgICBmcm9tICcuLi9tYXN0ZXItY3YuanMnO1xuaW1wb3J0ICogYXMgQ292ZXJMZXR0ZXIgICAgICAgIGZyb20gJy4uL2NvdmVyLWxldHRlci5qcyc7XG5pbXBvcnQgKiBhcyBTY3JlZW5pbmdRdWVzdGlvbnMgZnJvbSAnLi4vc2NyZWVuaW5nLXF1ZXN0aW9ucy5qcyc7XG5pbXBvcnQgKiBhcyBGaW5hbGlzZSAgICAgICAgICAgZnJvbSAnLi4vZmluYWxpc2UuanMnO1xuaW1wb3J0ICogYXMgSW50ZXJ2aWV3UHJlcCAgICAgIGZyb20gJy4uL2ludGVydmlldy1wcmVwLmpzJztcbmltcG9ydCAqIGFzIFRoYW5rWW91ICAgICAgICAgICBmcm9tICcuLi90aGFuay15b3UuanMnO1xuaW1wb3J0ICogYXMgSGFydmVzdCAgICAgICAgICAgIGZyb20gJy4uL2hhcnZlc3QuanMnO1xuaW1wb3J0ICogYXMgRWFybHlQcmV2aWV3UGFuZWwgIGZyb20gJy4uL2Vhcmx5LXByZXZpZXctcGFuZWwuanMnO1xuXG4vLyBcdTI1MDBcdTI1MDAgVGllciA3IFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuaW1wb3J0ICogYXMgU2Vzc2lvblN3aXRjaGVyVWkgIGZyb20gJy4uL3Nlc3Npb24tc3dpdGNoZXItdWkuanMnO1xuaW1wb3J0ICogYXMgS2V5Ym9hcmRTaG9ydGN1dHMgIGZyb20gJy4uL2tleWJvYXJkLXNob3J0Y3V0cy5qcyc7XG5cbi8vIFx1MjUwMFx1MjUwMCBBcHAgb3JjaGVzdHJhdG9yIChmb2xkZWQgaW50byBidW5kbGUgXHUyMDE0IEdBUC02NCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5pbXBvcnQgKiBhcyBBcHAgZnJvbSAnLi4vYXBwLmpzJztcblxuLy8gXHUyNTAwXHUyNTAwIEFzc2lnbiBhbGwgZXhwb3J0cyB0byBnbG9iYWxUaGlzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuLy8gUGhhc2UgMiBtb2R1bGVzIGZpcnN0OyBwaGFzZSAzIGRvbWFpbiBtb2R1bGVzIGZvbGxvdyBzbyBmdWxseS1mZWF0dXJlZFxuLy8gaW1wbGVtZW50YXRpb25zIG92ZXJyaWRlIGFueSBwbGFjZWhvbGRlciBzdHVicyAoZS5nLiBzaG93U2Vzc2lvbkNvbmZsaWN0QmFubmVyXG4vLyBpbiBzZXNzaW9uLXN3aXRjaGVyLXVpIG92ZXJyaWRlcyB0aGUgc2ltcGxlIHN0dWIgaW4gdWktY29yZSkuXG5PYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsXG4gIExvZ2dlciwgVXRpbHMsIEFwaUNsaWVudCwgU3RhdGUsIFByb3ZpZGVySW5mbywgVWlDb3JlLCBMYXlvdXRJbnN0cnVjdGlvbixcbiAgVmFsaWRhdG9ycywgUmVjb21tZW5kYXRpb25IZWxwZXJzLCBVaUhlbHBlcnMsIFByb3Bvc2FsUmV2aWV3LFxuICBGZXRjaFV0aWxzLCBNZXNzYWdlUXVldWUsIExsbUxvZyxcbiAgQXV0aFByb3ZpZGVyLCBBdHNSZWZpbmVtZW50LCBBdHNNb2RhbHMsIFNlc3Npb25BY3Rpb25zLCBKb2JBbmFseXNpcyxcbiAgR29hbHMsXG4gIFNlc3Npb25NYW5hZ2VyLCBKb2JJbnB1dCwgTWVzc2FnZURpc3BhdGNoLCBRdWVzdGlvbnNQYW5lbCxcbiAgUmV2aWV3VGFibGVCYXNlLFxuICBFeHBlcmllbmNlUmV2aWV3LCBTa2lsbHNSZXZpZXcsIEFjaGlldmVtZW50c1JldmlldywgVGFnbGluZVJldmlldywgU3VtbWFyeVJldmlldywgUHVibGljYXRpb25zUmV2aWV3LCBSZXZpZXdJY29ucyxcbiAgUmV3cml0ZVJldmlldywgU3BlbGxDaGVjaywgRG93bmxvYWRUYWIsIEZpbmFsR2VuZXJhdGUsIFdvcmtmbG93U3RlcHMsIE1hc3RlckRhdGFBaVVwZGF0ZSwgTWFzdGVyQ3YsXG4gIENvdmVyTGV0dGVyLCBTY3JlZW5pbmdRdWVzdGlvbnMsIEZpbmFsaXNlLCBJbnRlcnZpZXdQcmVwLCBUaGFua1lvdSwgSGFydmVzdCwgRWFybHlQcmV2aWV3UGFuZWwsXG4gIFNlc3Npb25Td2l0Y2hlclVpLCBLZXlib2FyZFNob3J0Y3V0cyxcbiAgQXBwLFxuKTtcblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIEFwcC5pbml0KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQU1BLE9BQUMsU0FBVSxNQUFNLFlBQVk7QUFDekI7QUFDQSxZQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sS0FBSztBQUM1QyxpQkFBTyxVQUFVO0FBQUEsUUFDckIsV0FBVyxPQUFPLFdBQVcsWUFBWSxPQUFPLFNBQVM7QUFDckQsaUJBQU8sVUFBVSxXQUFXO0FBQUEsUUFDaEMsT0FBTztBQUNILGVBQUssTUFBTSxXQUFXO0FBQUEsUUFDMUI7QUFBQSxNQUNKLEdBQUUsU0FBTSxXQUFZO0FBQ2hCO0FBR0EsWUFBSSxPQUFPLFdBQVc7QUFBQSxRQUFDO0FBQ3ZCLFlBQUksZ0JBQWdCO0FBQ3BCLFlBQUksT0FBUSxPQUFPLFdBQVcsaUJBQW1CLE9BQU8sT0FBTyxjQUFjLGlCQUN6RSxrQkFBa0IsS0FBSyxPQUFPLFVBQVUsU0FBUztBQUdyRCxZQUFJLGFBQWE7QUFBQSxVQUNiO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0o7QUFFQSxZQUFJLGlCQUFpQixDQUFDO0FBQ3RCLFlBQUksZ0JBQWdCO0FBR3BCLGlCQUFTLFdBQVcsS0FBSyxZQUFZO0FBQ2pDLGNBQUksU0FBUyxJQUFJLFVBQVU7QUFDM0IsY0FBSSxPQUFPLE9BQU8sU0FBUyxZQUFZO0FBQ25DLG1CQUFPLE9BQU8sS0FBSyxHQUFHO0FBQUEsVUFDMUIsT0FBTztBQUNILGdCQUFJO0FBQ0EscUJBQU8sU0FBUyxVQUFVLEtBQUssS0FBSyxRQUFRLEdBQUc7QUFBQSxZQUNuRCxTQUFTLEdBQUc7QUFFUixxQkFBTyxXQUFXO0FBQ2QsdUJBQU8sU0FBUyxVQUFV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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQThFL0Isa0JBQWtCLE1BQU0sQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBYXpCLDBCQUEwQixjQUFjLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBaUJ6QywrQkFBK0IsWUFBWSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBa0I1QyxxQkFBcUIsU0FBUyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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aUJBQWlCLFNBQVMsTUFBTSxVQUFVLFVBQVUsQ0FBQztBQUVwRyxRQUFJLE9BQU8sMEJBQTBCLFdBQVksdUJBQXNCO0FBQ3ZFLFFBQUksT0FBTywwQkFBMEIsV0FBWSx1QkFBc0I7QUFBQSxFQUN6RTs7O0FDL0RBLFNBQU87QUFBQSxJQUFPO0FBQUEsSUFDWjtBQUFBLElBQVE7QUFBQSxJQUFPO0FBQUEsSUFBVztBQUFBLElBQU87QUFBQSxJQUFjO0FBQUEsSUFBUTtBQUFBLElBQ3ZEO0FBQUEsSUFBWTtBQUFBLElBQXVCO0FBQUEsSUFBVztBQUFBLElBQzlDO0FBQUEsSUFBWTtBQUFBLElBQWM7QUFBQSxJQUMxQjtBQUFBLElBQWM7QUFBQSxJQUFlO0FBQUEsSUFBVztBQUFBLElBQWdCO0FBQUEsSUFDeEQ7QUFBQSxJQUNBO0FBQUEsSUFBZ0I7QUFBQSxJQUFVO0FBQUEsSUFBaUI7QUFBQSxJQUMzQztBQUFBLElBQ0E7QUFBQSxJQUFrQjtBQUFBLElBQWM7QUFBQSxJQUFvQjtBQUFBLElBQWU7QUFBQSxJQUFlO0FBQUEsSUFBb0I7QUFBQSxJQUN0RztBQUFBLElBQWU7QUFBQSxJQUFZO0FBQUEsSUFBYTtBQUFBLElBQWU7QUFBQSxJQUFlO0FBQUEsSUFBb0I7QUFBQSxJQUMxRjtBQUFBLElBQWE7QUFBQSxJQUFvQjtBQUFBLElBQVU7QUFBQSxJQUFlO0FBQUEsSUFBVTtBQUFBLElBQVM7QUFBQSxJQUM3RTtBQUFBLElBQW1CO0FBQUEsSUFDbkI7QUFBQSxFQUNGO0FBRUEsV0FBUyxpQkFBaUIsb0JBQXdCLElBQUk7IiwKICAibmFtZXMiOiBbImdldExvZ2dlciIsICJsb2dnZXIiLCAibG9nbGV2ZWwiLCAiY2xlYW5Kc29uUmVzcG9uc2UiLCAiZXNjYXBlSHRtbCIsICJleHRyYWN0Rmlyc3RKc29uT2JqZWN0IiwgImV4dHJhY3RUaXRsZUFuZENvbXBhbnlGcm9tSm9iVGV4dCIsICJmb3JtYXRTZXNzaW9uUGhhc2VMYWJlbCIsICJub3JtYWxpemVQb3NpdGlvbkxhYmVsIiwgIm5vcm1hbGl6ZVRleHQiLCAidGV4dCIsICJtIiwgImh0bWwiLCAidiIsICJTdG9yYWdlS2V5cyIsICJhcGlDYWxsIiwgImNyZWF0ZVNlc3Npb24iLCAiZmV0Y2hTdGF0dXMiLCAiZ2V0T3duZXJUb2tlbiIsICJnZXRTY29wZWRUYWJEYXRhU3RvcmFnZUtleSIsICJnZXRTZXNzaW9uSWRGcm9tVVJMIiwgIl91cGRhdGVMTE1TdGF0dXNCYXIiLCAibGxtRmV0Y2giLCAic2V0TG9hZGluZyIsICJfIiwgImluaXQiLCAiY2hhdEFyZWEiLCAiU3RvcmFnZUtleXMiLCAiZ2V0U2Vzc2lvbklkRnJvbVVSTCIsICJnZXRPd25lclRva2VuIiwgImdldFNjb3BlZFRhYkRhdGFTdG9yYWdlS2V5IiwgInNlc3Npb25JZCIsICJpbml0IiwgIl8iLCAiYXBpQ2FsbCIsICJjcmVhdGVTZXNzaW9uIiwgImZldGNoU3RhdHVzIiwgIlBIQVNFUyIsICJzdGF0ZU1hbmFnZXIiLCAibG9nIiwgIlBIQVNFUyIsICJzdGF0ZU1hbmFnZXIiLCAiU3RvcmFnZUtleXMiLCAiZ2V0UHJvdmlkZXJJbmZvIiwgImxvYWRQcm92aWRlckluZm8iLCAicHJvdmlkZXJJbmZvUG9wb3ZlckNvbnRlbnQiLCAibG9hZFByb3ZpZGVySW5mbyIsICJnZXRQcm92aWRlckluZm8iLCAicHJvdmlkZXJJbmZvUG9wb3ZlckNvbnRlbnQiLCAiZXNjYXBlSHRtbCIsICJfdXBkYXRlTGxtU3RhdHVzUGlsbCIsICJjbG9zZU1vZGVsTW9kYWwiLCAiY29uZmlybURpYWxvZyIsICJnZXRTdGFnZUZvclRhYiIsICJwdXNoRm9jdXNTdGFjayIsICJyZXN0b3JlRm9jdXMiLCAic2V0SW5pdGlhbEZvY3VzIiwgInRyYXBGb2N1cyIsICJ1cGRhdGVUYWJCYXJGb3JTdGFnZSIsICJfdXBkYXRlVmlld2luZ0luZGljYXRvciIsICJjb25maXJtUmVSdW5QaGFzZSIsICJzaG93QnVsbGV0UmVvcmRlciIsICJsb2ciLCAic3RhdGVNYW5hZ2VyIiwgImdlbmVyYXRpb25TdGF0ZSIsICJjb25maXJtUmVSdW5QaGFzZSIsICJfdXBkYXRlVmlld2luZ0luZGljYXRvciIsICJxIiwgImNsb3NlTW9kYWwiLCAiX2UiLCAic2hvd0J1bGxldFJlb3JkZXIiLCAiXyIsICJ0ZXh0IiwgImxvZyIsICJmZXRjaFN0YXR1cyIsICJhcGlDYWxsIiwgIl8iLCAic2V0SW5pdGlhbEZvY3VzIiwgInRyYXBGb2N1cyIsICJyZXN0b3JlRm9jdXMiLCAicHVzaEZvY3VzU3RhY2siLCAiY29uZmlybURpYWxvZyIsICJnZXRTdGFnZUZvclRhYiIsICJzdGF0ZU1hbmFnZXIiLCAidXBkYXRlVGFiQmFyRm9yU3RhZ2UiLCAiU3RvcmFnZUtleXMiLCAiX3VwZGF0ZUxsbVN0YXR1c1BpbGwiLCAidGV4dCIsICJiIiwgImVzY2FwZUh0bWwiLCAiY2xvc2VNb2RlbE1vZGFsIiwgInYiLCAibSIsICJldmVudCIsICJ1cGRhdGVXb3JrZmxvd1N0ZXBzQ2xpY2thYmxlIiwgImhhbmRsZUxheW91dFByaW1hcnlBY3Rpb24iLCAiaW5pdGlhdGVMYXlvdXRJbnN0cnVjdGlvbnMiLCAicmVmcmVzaEF0c1Njb3JlIiwgInNjaGVkdWxlQXRzUmVmcmVzaCIsICJ1cGRhdGVBdHNCYWRnZSIsICJ0ZXh0IiwgImdlbmVyYXRpb25TdGF0ZSIsICJzZXNzaW9uSWQiLCAiX2UiLCAiX2ZsdXNoTWVzc2FnZVF1ZXVlIiwgImFwcGVuZEZvcm1hdHRlZEFuYWx5c2lzIiwgImFwcGVuZExvYWRpbmdNZXNzYWdlIiwgImFwcGVuZE1lc3NhZ2UiLCAiYXBwZW5kUmF3SHRtbCIsICJhcHBlbmRSZXRyeU1lc3NhZ2UiLCAicmVtb3ZlTG9hZGluZ01lc3NhZ2UiLCAibG9nIiwgIl9mbHVzaE1lc3NhZ2VRdWV1ZSIsICJ0ZXh0IiwgImFwcGVuZE1lc3NhZ2UiLCAiYXBwZW5kTG9hZGluZ01lc3NhZ2UiLCAicmVtb3ZlTG9hZGluZ01lc3NhZ2UiLCAiaHRtbCIsICJlc2NhcGVIdG1sIiwgImFwcGVuZFJldHJ5TWVzc2FnZSIsICJhcHBlbmRGb3JtYXR0ZWRBbmFseXNpcyIsICJjbGVhbkpzb25SZXNwb25zZSIsICJhcHBlbmRSYXdIdG1sIiwgIl91cGRhdGVQYWdlRXN0aW1hdGUiLCAiaGFuZGxlQWN0aW9uQ2xpY2siLCAiaGFuZGxlQ3VzdG9taXphdGlvblJlc3BvbnNlIiwgInNob3dUYWJsZUJhc2VkUmV2aWV3IiwgInN3aXRjaFRhYiIsICJ1cGRhdGVJbmNsdXNpb25Db3VudHMiLCAidXNlclNlbGVjdGlvbnMiLCAibG9nIiwgInVzZXJTZWxlY3Rpb25zIiwgInN0YXRlTWFuYWdlciIsICJ1cGRhdGVJbmNsdXNpb25Db3VudHMiLCAidiIsICJzd2l0Y2hUYWIiLCAidGFiRGF0YSIsICJzaG93VGFibGVCYXNlZFJldmlldyIsICJzZXNzaW9uSWQiLCAiXyIsICJodG1sIiwgImhhbmRsZUN1c3RvbWl6YXRpb25SZXNwb25zZSIsICJzdGF0ZU1hbmFnZXIiLCAiX3VwZGF0ZVBhZ2VFc3RpbWF0ZSIsICJ1c2VyU2VsZWN0aW9ucyIsICJoYW5kbGVBY3Rpb25DbGljayIsICJodG1sIiwgImxvZyIsICJzdGF0ZU1hbmFnZXIiLCAiaHRtbCIsICJzZXNzaW9uSWQiLCAiZXNjYXBlSHRtbCIsICJ0ZXh0IiwgImdlbmVyYXRpb25TdGF0ZSIsICJpbml0aWF0ZUxheW91dEluc3RydWN0aW9ucyIsICJfIiwgImFwcGVuZE1lc3NhZ2UiLCAiY29uZmlybVJlUnVuUGhhc2UiLCAiYXBpQ2FsbCIsICJ3IiwgIl9lIiwgInNjaGVkdWxlQXRzUmVmcmVzaCIsICJzd2l0Y2hUYWIiLCAiaGFuZGxlTGF5b3V0UHJpbWFyeUFjdGlvbiIsICJwYXJzZU1lc3NhZ2VSZXNwb25zZSIsICJwYXJzZVJld3JpdGVzUmVzcG9uc2UiLCAicGFyc2VTZXNzaW9uTGlzdFJlc3BvbnNlIiwgInBhcnNlU3RhdHVzUmVzcG9uc2UiLCAibG9nIiwgInBhcnNlU3RhdHVzUmVzcG9uc2UiLCAiayIsICJwYXJzZVNlc3Npb25MaXN0UmVzcG9uc2UiLCAicGFyc2VSZXdyaXRlc1Jlc3BvbnNlIiwgInBhcnNlTWVzc2FnZVJlc3BvbnNlIiwgImJ1aWxkRmFsbGJhY2tQb3N0QW5hbHlzaXNRdWVzdGlvbnMiLCAiZ2V0QWNoaWV2ZW1lbnRDb25maWRlbmNlIiwgImdldEFjaGlldmVtZW50UmVhc29uaW5nIiwgImdldEFjaGlldmVtZW50UmVjb21tZW5kYXRpb24iLCAiZ2V0Q29uZmlkZW5jZUxldmVsIiwgImdldEV4cGVyaWVuY2VSZWFzb25pbmciLCAiZ2V0RXhwZXJpZW5jZVJlY29tbWVuZGF0aW9uIiwgImdldFNraWxsQ29uZmlkZW5jZSIsICJnZXRTa2lsbFJlYXNvbmluZyIsICJnZXRTa2lsbFJlY29tbWVuZGF0aW9uIiwgImxvZyIsICJnZXRFeHBlcmllbmNlUmVjb21tZW5kYXRpb24iLCAiZ2V0Q29uZmlkZW5jZUxldmVsIiwgImdldEV4cGVyaWVuY2VSZWFzb25pbmciLCAiZ2V0U2tpbGxSZWNvbW1lbmRhdGlvbiIsICJnZXRTa2lsbENvbmZpZGVuY2UiLCAiZ2V0U2tpbGxSZWFzb25pbmciLCAiZ2V0QWNoaWV2ZW1lbnRSZWNvbW1lbmRhdGlvbiIsICJnZXRBY2hpZXZlbWVudENvbmZpZGVuY2UiLCAiZ2V0QWNoaWV2ZW1lbnRSZWFzb25pbmciLCAiYnVpbGRGYWxsYmFja1Bvc3RBbmFseXNpc1F1ZXN0aW9ucyIsICJjbG9zZUFsZXJ0TW9kYWwiLCAic2hvd0FsZXJ0TW9kYWwiLCAic2hvd0NvbmZpcm1Nb2RhbCIsICJzaG93VG9hc3QiLCAidXBkYXRlQWN0aW9uQnV0dG9ucyIsICJzaG93QWxlcnRNb2RhbCIsICJjbG9zZUFsZXJ0TW9kYWwiLCAic2hvd0NvbmZpcm1Nb2RhbCIsICJzaG93VG9hc3QiLCAic3RhdGVNYW5hZ2VyIiwgImdlbmVyYXRpb25TdGF0ZSIsICJ1cGRhdGVBY3Rpb25CdXR0b25zIiwgImV2ZW50IiwgImZldGNoQW5kRGlzcGxheUxsbUxvZyIsICJsb2ciLCAidGV4dCIsICJlc2NhcGVIdG1sIiwgIm0iLCAiaHRtbCIsICJmZXRjaEFuZERpc3BsYXlMbG1Mb2ciLCAic2Vzc2lvbklkIiwgImdldFNlc3Npb25JZEZyb21VUkwiLCAidXBkYXRlQXV0aEJhZGdlIiwgInVwZGF0ZUF1dGhCYWRnZSIsICJ0ZXh0IiwgImdldFByb3ZpZGVySW5mbyIsICJwb3B1bGF0ZUF0c1Njb3JlVGFiIiwgInNlc3Npb25JZCIsICJzdGF0ZU1hbmFnZXIiLCAiXyIsICJlc2NhcGVIdG1sIiwgInB1c2hGb2N1c1N0YWNrIiwgInRyYXBGb2N1cyIsICJ1cGRhdGVBdHNCYWRnZSIsICJyZXN0b3JlRm9jdXMiLCAiayIsICJwb3B1bGF0ZUF0c1Njb3JlVGFiIiwgIl9BQ1RJT05fTEFCRUxTIiwgInNlbmRBY3Rpb24iLCAidXBkYXRlUG9zaXRpb25UaXRsZSIsICJsb2ciLCAiX0FDVElPTl9MQUJFTFMiLCAic2VuZEFjdGlvbiIsICJzdGF0ZU1hbmFnZXIiLCAiX2UiLCAiU3RvcmFnZUtleXMiLCAidGV4dCIsICJ1cGRhdGVQb3NpdGlvblRpdGxlIiwgImFuYWx5emVKb2IiLCAibWVyZ2VQb3N0QW5hbHlzaXNRdWVzdGlvbnMiLCAibm9ybWFsaXplUG9zdEFuYWx5c2lzUXVlc3Rpb25zIiwgImxvZyIsICJub3JtYWxpemVQb3N0QW5hbHlzaXNRdWVzdGlvbnMiLCAicSIsICJ0ZXh0IiwgIm1lcmdlUG9zdEFuYWx5c2lzUXVlc3Rpb25zIiwgImFuYWx5emVKb2IiLCAic3RhdGVNYW5hZ2VyIiwgIlN0b3JhZ2VLZXlzIiwgIl9lIiwgInBvcHVsYXRlR29hbHNUYWIiLCAibG9nIiwgInBvcHVsYXRlR29hbHNUYWIiLCAiX2dldEN1cnJlbnRTZXNzaW9uSWRWYWx1ZSIsICJidWlsZFNlc3Npb25Td2l0Y2hlckxhYmVsIiwgImNyZWF0ZU5ld1Nlc3Npb25BbmROYXZpZ2F0ZSIsICJlbnN1cmVTZXNzaW9uQ29udGV4dCIsICJmb3JtYXRTZXNzaW9uUGhhc2VMYWJlbCIsICJmb3JtYXRTZXNzaW9uVGltZXN0YW1wIiwgImdldEFjdGl2ZVNlc3Npb25Pd25lcnNoaXBNZXRhIiwgImxvYWRTZXNzaW9uRmlsZSIsICJtYXliZVNob3dXZWxjb21lTW9kYWwiLCAicmVzdG9yZVNlc3Npb24iLCAic2F2ZVRhYkRhdGEiLCAibG9nIiwgImZvcm1hdFNlc3Npb25QaGFzZUxhYmVsIiwgIl9nZXRDdXJyZW50U2Vzc2lvbklkVmFsdWUiLCAiXyIsICJidWlsZFNlc3Npb25Td2l0Y2hlckxhYmVsIiwgImdldEFjdGl2ZVNlc3Npb25Pd25lcnNoaXBNZXRhIiwgImZvcm1hdFNlc3Npb25UaW1lc3RhbXAiLCAibWF5YmVTaG93V2VsY29tZU1vZGFsIiwgImNyZWF0ZU5ld1Nlc3Npb25BbmROYXZpZ2F0ZSIsICJzdGF0ZU1hbmFnZXIiLCAiUEhBU0VTIiwgImVuc3VyZVNlc3Npb25Db250ZXh0IiwgInJlc3RvcmVTZXNzaW9uIiwgImsiLCAidiIsICJfZSIsICJsb2FkU2Vzc2lvbkZpbGUiLCAic2F2ZVRhYkRhdGEiLCAicG9wdWxhdGVKb2JUYWIiLCAic2hvd0xvYWRKb2JQYW5lbCIsICJfZ2V0RGVmYXVsdHMiLCAiX2RlZmF1bHRzIiwgImNoYW5nZURlZmF1bHRzIiwgIm5ld0RlZmF1bHRzIiwgIm5vb3BUZXN0IiwgImVkaXQiLCAicmVnZXgiLCAib3B0IiwgInNvdXJjZSIsICJvYmoiLCAibmFtZSIsICJ2YWwiLCAidmFsU291cmNlIiwgIm90aGVyIiwgInN1cHBvcnRzTG9va2JlaGluZCIsICJidWxsIiwgImluZGVudCIsICJuZXdsaW5lIiwgImJsb2NrQ29kZSIsICJmZW5jZXMiLCAiaHIiLCAiaGVhZGluZyIsICJidWxsZXQiLCAibGhlYWRpbmdDb3JlIiwgImxoZWFkaW5nIiwgImxoZWFkaW5nR2ZtIiwgIl9wYXJhZ3JhcGgiLCAiYmxvY2tUZXh0IiwgIl9ibG9ja0xhYmVsIiwgImRlZiIsICJsaXN0IiwgIl90YWciLCAiX2NvbW1lbnQiLCAiaHRtbCIsICJwYXJhZ3JhcGgiLCAiYmxvY2txdW90ZSIsICJibG9ja05vcm1hbCIsICJnZm1UYWJsZSIsICJibG9ja0dmbSIsICJibG9ja1BlZGFudGljIiwgImVzY2FwZSIsICJpbmxpbmVDb2RlIiwgImJyIiwgImlubGluZVRleHQiLCAiX3B1bmN0dWF0aW9uIiwgIl9wdW5jdHVhdGlvbk9yU3BhY2UiLCAiX25vdFB1bmN0dWF0aW9uT3JTcGFjZSIsICJwdW5jdHVhdGlvbiIsICJfcHVuY3R1YXRpb25HZm1TdHJvbmdFbSIsICJfcHVuY3R1YXRpb25PclNwYWNlR2ZtU3Ryb25nRW0iLCAiX25vdFB1bmN0dWF0aW9uT3JTcGFjZUdmbVN0cm9uZ0VtIiwgImJsb2NrU2tpcCIsICJlbVN0cm9uZ0xEZWxpbUNvcmUiLCAiZW1TdHJvbmdMRGVsaW0iLCAiZW1TdHJvbmdMRGVsaW1HZm0iLCAiZW1TdHJvbmdSRGVsaW1Bc3RDb3JlIiwgImVtU3Ryb25nUkRlbGltQXN0IiwgImVtU3Ryb25nUkRlbGltQXN0R2ZtIiwgImVtU3Ryb25nUkRlbGltVW5kIiwgImRlbExEZWxpbSIsICJkZWxSRGVsaW1Db3JlIiwgImRlbFJEZWxpbSIsICJhbnlQdW5jdHVhdGlvbiIsICJhdXRvbGluayIsICJfaW5saW5lQ29tbWVudCIsICJ0YWciLCAiX2lubGluZUxhYmVsIiwgImxpbmsiLCAicmVmbGluayIsICJub2xpbmsiLCAicmVmbGlua1NlYXJjaCIsICJfY2FzZUluc2Vuc2l0aXZlUHJvdG9jb2wiLCAiaW5saW5lTm9ybWFsIiwgImlubGluZVBlZGFudGljIiwgImlubGluZUdmbSIsICJpbmxpbmVCcmVha3MiLCAiYmxvY2siLCAiaW5saW5lIiwgImVzY2FwZVJlcGxhY2VtZW50cyIsICJnZXRFc2NhcGVSZXBsYWNlbWVudCIsICJjaCIsICJlc2NhcGVIdG1sRW50aXRpZXMiLCAiZW5jb2RlIiwgImNsZWFuVXJsIiwgImhyZWYiLCAic3BsaXRDZWxscyIsICJ0YWJsZVJvdyIsICJjb3VudCIsICJyb3ciLCAibWF0Y2giLCAib2Zmc2V0IiwgInN0ciIsICJlc2NhcGVkIiwgImN1cnIiLCAiY2VsbHMiLCAiaSIsICJydHJpbSIsICJjIiwgImludmVydCIsICJsIiwgInN1ZmZMZW4iLCAiY3VyckNoYXIiLCAiZmluZENsb3NpbmdCcmFja2V0IiwgImIiLCAibGV2ZWwiLCAiZXhwYW5kVGFicyIsICJsaW5lIiwgImNvbCIsICJleHBhbmRlZCIsICJjaGFyIiwgImFkZGVkIiwgIm91dHB1dExpbmsiLCAiY2FwIiwgInJhdyIsICJsZXhlciIsICJydWxlcyIsICJ0aXRsZSIsICJ0ZXh0IiwgInRva2VuIiwgImluZGVudENvZGVDb21wZW5zYXRpb24iLCAibWF0Y2hJbmRlbnRUb0NvZGUiLCAiaW5kZW50VG9Db2RlIiwgIm5vZGUiLCAibWF0Y2hJbmRlbnRJbk5vZGUiLCAiaW5kZW50SW5Ob2RlIiwgIl9Ub2tlbml6ZXIiLCAib3B0aW9ucyIsICJzcmMiLCAidHJpbW1lZCIsICJsaW5lcyIsICJ0b2tlbnMiLCAiaW5CbG9ja3F1b3RlIiwgImN1cnJlbnRMaW5lcyIsICJjdXJyZW50UmF3IiwgImN1cnJlbnRUZXh0IiwgInRvcCIsICJsYXN0VG9rZW4iLCAib2xkVG9rZW4iLCAibmV3VGV4dCIsICJuZXdUb2tlbiIsICJpc29yZGVyZWQiLCAiaXRlbVJlZ2V4IiwgImVuZHNXaXRoQmxhbmtMaW5lIiwgImVuZEVhcmx5IiwgIml0ZW1Db250ZW50cyIsICJuZXh0TGluZSIsICJibGFua0xpbmUiLCAibmV4dEJ1bGxldFJlZ2V4IiwgImhyUmVnZXgiLCAiZmVuY2VzQmVnaW5SZWdleCIsICJoZWFkaW5nQmVnaW5SZWdleCIsICJodG1sQmVnaW5SZWdleCIsICJibG9ja3F1b3RlQmVnaW5SZWdleCIsICJyYXdMaW5lIiwgIm5leHRMaW5lV2l0aG91dFRhYnMiLCAibGFzdEl0ZW0iLCAiaXRlbSIsICJ0YXNrUmF3IiwgImNoZWNrYm94VG9rZW4iLCAic3BhY2VycyIsICJ0IiwgImhhc011bHRpcGxlTGluZUJyZWFrcyIsICJoZWFkZXJzIiwgImFsaWducyIsICJyb3dzIiwgImFsaWduIiwgImNlbGwiLCAidHJpbW1lZFVybCIsICJydHJpbVNsYXNoIiwgImxhc3RQYXJlbkluZGV4IiwgImxpbmtMZW4iLCAibGlua3MiLCAibGlua1N0cmluZyIsICJtYXNrZWRTcmMiLCAicHJldkNoYXIiLCAibExlbmd0aCIsICJyRGVsaW0iLCAickxlbmd0aCIsICJkZWxpbVRvdGFsIiwgIm1pZERlbGltVG90YWwiLCAiZW5kUmVnIiwgImxhc3RDaGFyTGVuZ3RoIiwgImhhc05vblNwYWNlQ2hhcnMiLCAiaGFzU3BhY2VDaGFyc09uQm90aEVuZHMiLCAicHJldkNhcFplcm8iLCAiX0xleGVyIiwgIl9fTGV4ZXIiLCAibmV4dCIsICJsYXN0UGFyYWdyYXBoQ2xpcHBlZCIsICJleHRUb2tlbml6ZXIiLCAiY3V0U3JjIiwgInN0YXJ0SW5kZXgiLCAidGVtcFNyYyIsICJ0ZW1wU3RhcnQiLCAiZ2V0U3RhcnRJbmRleCIsICJlcnJNc2ciLCAia2VlcFByZXZDaGFyIiwgIl9SZW5kZXJlciIsICJsYW5nIiwgImxhbmdTdHJpbmciLCAiY29kZSIsICJkZXB0aCIsICJvcmRlcmVkIiwgInN0YXJ0IiwgImJvZHkiLCAiaiIsICJ0eXBlIiwgInN0YXJ0QXR0ciIsICJjaGVja2VkIiwgImhlYWRlciIsICJrIiwgImNvbnRlbnQiLCAiY2xlYW5IcmVmIiwgIm91dCIsICJfVGV4dFJlbmRlcmVyIiwgIl9QYXJzZXIiLCAiX19QYXJzZXIiLCAiYW55VG9rZW4iLCAiZ2VuZXJpY1Rva2VuIiwgInJldCIsICJyZW5kZXJlciIsICJfSG9va3MiLCAibWFya2Rvd24iLCAiTWFya2VkIiwgImFyZ3MiLCAiY2FsbGJhY2siLCAidmFsdWVzIiwgInRhYmxlVG9rZW4iLCAibGlzdFRva2VuIiwgImNoaWxkVG9rZW5zIiwgImV4dGVuc2lvbnMiLCAicGFjayIsICJvcHRzIiwgImV4dCIsICJwcmV2UmVuZGVyZXIiLCAiZXh0TGV2ZWwiLCAicHJvcCIsICJyZW5kZXJlclByb3AiLCAicmVuZGVyZXJGdW5jIiwgInRva2VuaXplciIsICJ0b2tlbml6ZXJQcm9wIiwgInRva2VuaXplckZ1bmMiLCAicHJldlRva2VuaXplciIsICJob29rcyIsICJob29rc1Byb3AiLCAiaG9va3NGdW5jIiwgInByZXZIb29rIiwgImFyZyIsICJ3YWxrVG9rZW5zIiwgInBhY2tXYWxrdG9rZW5zIiwgImJsb2NrVHlwZSIsICJvcmlnT3B0IiwgInRocm93RXJyb3IiLCAicHJvY2Vzc2VkU3JjIiwgInByb2Nlc3NlZFRva2VucyIsICJlIiwgInNpbGVudCIsICJhc3luYyIsICJtc2ciLCAibWFya2VkSW5zdGFuY2UiLCAibWFya2VkIiwgInNldE9wdGlvbnMiLCAidXNlIiwgInBhcnNlSW5saW5lIiwgInBhcnNlciIsICJfUGFyc2VyIiwgImxleGVyIiwgIl9MZXhlciIsICJlbnRyaWVzIiwgInNldFByb3RvdHlwZU9mIiwgImlzRnJvemVuIiwgImdldFByb3RvdHlwZU9mIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJPYmplY3QiLCAiZnJlZXplIiwgInNlYWwiLCAiY3JlYXRlIiwgImFwcGx5IiwgImNvbnN0cnVjdCIsICJSZWZsZWN0IiwgIngiLCAiZnVuYyIsICJ0aGlzQXJnIiwgIl9sZW4iLCAiYXJndW1lbnRzIiwgImxlbmd0aCIsICJhcmdzIiwgIkFycmF5IiwgIl9rZXkiLCAiRnVuYyIsICJfbGVuMiIsICJfa2V5MiIsICJhcnJheUZvckVhY2giLCAidW5hcHBseSIsICJwcm90b3R5cGUiLCAiZm9yRWFjaCIsICJhcnJheUxhc3RJbmRleE9mIiwgImxhc3RJbmRleE9mIiwgImFycmF5UG9wIiwgInBvcCIsICJhcnJheVB1c2giLCAicHVzaCIsICJhcnJheVNwbGljZSIsICJzcGxpY2UiLCAic3RyaW5nVG9Mb3dlckNhc2UiLCAiU3RyaW5nIiwgInRvTG93ZXJDYXNlIiwgInN0cmluZ1RvU3RyaW5nIiwgInRvU3RyaW5nIiwgInN0cmluZ01hdGNoIiwgIm1hdGNoIiwgInN0cmluZ1JlcGxhY2UiLCAicmVwbGFjZSIsICJzdHJpbmdJbmRleE9mIiwgImluZGV4T2YiLCAic3RyaW5nVHJpbSIsICJ0cmltIiwgIm9iamVjdEhhc093blByb3BlcnR5IiwgImhhc093blByb3BlcnR5IiwgInJlZ0V4cFRlc3QiLCAiUmVnRXhwIiwgInRlc3QiLCAidHlwZUVycm9yQ3JlYXRlIiwgInVuY29uc3RydWN0IiwgIlR5cGVFcnJvciIsICJsYXN0SW5kZXgiLCAiX2xlbjMiLCAiX2tleTMiLCAiX2xlbjQiLCAiX2tleTQiLCAiYWRkVG9TZXQiLCAic2V0IiwgImFycmF5IiwgInRyYW5zZm9ybUNhc2VGdW5jIiwgImwiLCAiZWxlbWVudCIsICJsY0VsZW1lbnQiLCAiY2xlYW5BcnJheSIsICJpbmRleCIsICJpc1Byb3BlcnR5RXhpc3QiLCAiY2xvbmUiLCAib2JqZWN0IiwgIm5ld09iamVjdCIsICJwcm9wZXJ0eSIsICJ2YWx1ZSIsICJpc0FycmF5IiwgImNvbnN0cnVjdG9yIiwgImxvb2t1cEdldHRlciIsICJwcm9wIiwgImRlc2MiLCAiZ2V0IiwgImZhbGxiYWNrVmFsdWUiLCAiaHRtbCIsICJzdmciLCAic3ZnRmlsdGVycyIsICJzdmdEaXNhbGxvd2VkIiwgIm1hdGhNbCIsICJtYXRoTWxEaXNhbGxvd2VkIiwgInRleHQiLCAieG1sIiwgIk1VU1RBQ0hFX0VYUFIiLCAiRVJCX0VYUFIiLCAiVE1QTElUX0VYUFIiLCAiREFUQV9BVFRSIiwgIkFSSUFfQVRUUiIsICJJU19BTExPV0VEX1VSSSIsICJJU19TQ1JJUFRfT1JfREFUQSIsICJBVFRSX1dISVRFU1BBQ0UiLCAiRE9DVFlQRV9OQU1FIiwgIkNVU1RPTV9FTEVNRU5UIiwgIk5PREVfVFlQRSIsICJhdHRyaWJ1dGUiLCAiY2RhdGFTZWN0aW9uIiwgImVudGl0eVJlZmVyZW5jZSIsICJlbnRpdHlOb2RlIiwgInByb2dyZXNzaW5nSW5zdHJ1Y3Rpb24iLCAiY29tbWVudCIsICJkb2N1bWVudCIsICJkb2N1bWVudFR5cGUiLCAiZG9jdW1lbnRGcmFnbWVudCIsICJub3RhdGlvbiIsICJnZXRHbG9iYWwiLCAid2luZG93IiwgIl9jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3kiLCAidHJ1c3RlZFR5cGVzIiwgInB1cmlmeUhvc3RFbGVtZW50IiwgImNyZWF0ZVBvbGljeSIsICJzdWZmaXgiLCAiQVRUUl9OQU1FIiwgImhhc0F0dHJpYnV0ZSIsICJnZXRBdHRyaWJ1dGUiLCAicG9saWN5TmFtZSIsICJjcmVhdGVIVE1MIiwgImNyZWF0ZVNjcmlwdFVSTCIsICJzY3JpcHRVcmwiLCAiXyIsICJjb25zb2xlIiwgIndhcm4iLCAiX2NyZWF0ZUhvb2tzTWFwIiwgImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIiwgImFmdGVyU2FuaXRpemVFbGVtZW50cyIsICJhZnRlclNhbml0aXplU2hhZG93RE9NIiwgImJlZm9yZVNhbml0aXplQXR0cmlidXRlcyIsICJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIiwgImJlZm9yZVNhbml0aXplU2hhZG93RE9NIiwgInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsICJ1cG9uU2FuaXRpemVFbGVtZW50IiwgInVwb25TYW5pdGl6ZVNoYWRvd05vZGUiLCAiY3JlYXRlRE9NUHVyaWZ5IiwgInVuZGVmaW5lZCIsICJET01QdXJpZnkiLCAicm9vdCIsICJ2ZXJzaW9uIiwgIlZFUlNJT04iLCAicmVtb3ZlZCIsICJub2RlVHlwZSIsICJFbGVtZW50IiwgImlzU3VwcG9ydGVkIiwgIm9yaWdpbmFsRG9jdW1lbnQiLCAiY3VycmVudFNjcmlwdCIsICJEb2N1bWVudEZyYWdtZW50IiwgIkhUTUxUZW1wbGF0ZUVsZW1lbnQiLCAiTm9kZSIsICJOb2RlRmlsdGVyIiwgIk5hbWVkTm9kZU1hcCIsICJNb3pOYW1lZEF0dHJNYXAiLCAiSFRNTEZvcm1FbGVtZW50IiwgIkRPTVBhcnNlciIsICJFbGVtZW50UHJvdG90eXBlIiwgImNsb25lTm9kZSIsICJyZW1vdmUiLCAiZ2V0TmV4dFNpYmxpbmciLCAiZ2V0Q2hpbGROb2RlcyIsICJnZXRQYXJlbnROb2RlIiwgInRlbXBsYXRlIiwgImNyZWF0ZUVsZW1lbnQiLCAiY29udGVudCIsICJvd25lckRvY3VtZW50IiwgInRydXN0ZWRUeXBlc1BvbGljeSIsICJlbXB0eUhUTUwiLCAiaW1wbGVtZW50YXRpb24iLCAiY3JlYXRlTm9kZUl0ZXJhdG9yIiwgImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCAiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCAiaW1wb3J0Tm9kZSIsICJob29rcyIsICJjcmVhdGVIVE1MRG9jdW1lbnQiLCAiRVhQUkVTU0lPTlMiLCAiQUxMT1dFRF9UQUdTIiwgIkRFRkFVTFRfQUxMT1dFRF9UQUdTIiwgIlRBR1MiLCAiQUxMT1dFRF9BVFRSIiwgIkRFRkFVTFRfQUxMT1dFRF9BVFRSIiwgIkFUVFJTIiwgIkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HIiwgInRhZ05hbWVDaGVjayIsICJ3cml0YWJsZSIsICJjb25maWd1cmFibGUiLCAiZW51bWVyYWJsZSIsICJhdHRyaWJ1dGVOYW1lQ2hlY2siLCAiYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzIiwgIkZPUkJJRF9UQUdTIiwgIkZPUkJJRF9BVFRSIiwgIkVYVFJBX0VMRU1FTlRfSEFORExJTkciLCAidGFnQ2hlY2siLCAiYXR0cmlidXRlQ2hlY2siLCAiQUxMT1dfQVJJQV9BVFRSIiwgIkFMTE9XX0RBVEFfQVRUUiIsICJBTExPV19VTktOT1dOX1BST1RPQ09MUyIsICJBTExPV19TRUxGX0NMT1NFX0lOX0FUVFIiLCAiU0FGRV9GT1JfVEVNUExBVEVTIiwgIlNBRkVfRk9SX1hNTCIsICJXSE9MRV9ET0NVTUVOVCIsICJTRVRfQ09ORklHIiwgIkZPUkNFX0JPRFkiLCAiUkVUVVJOX0RPTSIsICJSRVRVUk5fRE9NX0ZSQUdNRU5UIiwgIlJFVFVSTl9UUlVTVEVEX1RZUEUiLCAiU0FOSVRJWkVfRE9NIiwgIlNBTklUSVpFX05BTUVEX1BST1BTIiwgIlNBTklUSVpFX05BTUVEX1BST1BTX1BSRUZJWCIsICJLRUVQX0NPTlRFTlQiLCAiSU5fUExBQ0UiLCAiVVNFX1BST0ZJTEVTIiwgIkZPUkJJRF9DT05URU5UUyIsICJERUZBVUxUX0ZPUkJJRF9DT05URU5UUyIsICJEQVRBX1VSSV9UQUdTIiwgIkRFRkFVTFRfREFUQV9VUklfVEFHUyIsICJVUklfU0FGRV9BVFRSSUJVVEVTIiwgIkRFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyIsICJNQVRITUxfTkFNRVNQQUNFIiwgIlNWR19OQU1FU1BBQ0UiLCAiSFRNTF9OQU1FU1BBQ0UiLCAiTkFNRVNQQUNFIiwgIklTX0VNUFRZX0lOUFVUIiwgIkFMTE9XRURfTkFNRVNQQUNFUyIsICJERUZBVUxUX0FMTE9XRURfTkFNRVNQQUNFUyIsICJNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFMiLCAiSFRNTF9JTlRFR1JBVElPTl9QT0lOVFMiLCAiQ09NTU9OX1NWR19BTkRfSFRNTF9FTEVNRU5UUyIsICJQQVJTRVJfTUVESUFfVFlQRSIsICJTVVBQT1JURURfUEFSU0VSX01FRElBX1RZUEVTIiwgIkRFRkFVTFRfUEFSU0VSX01FRElBX1RZUEUiLCAiQ09ORklHIiwgImZvcm1FbGVtZW50IiwgImlzUmVnZXhPckZ1bmN0aW9uIiwgInRlc3RWYWx1ZSIsICJGdW5jdGlvbiIsICJfcGFyc2VDb25maWciLCAiY2ZnIiwgIkFERF9VUklfU0FGRV9BVFRSIiwgIkFERF9EQVRBX1VSSV9UQUdTIiwgIkFMTE9XRURfVVJJX1JFR0VYUCIsICJBRERfVEFHUyIsICJBRERfQVRUUiIsICJBRERfRk9SQklEX0NPTlRFTlRTIiwgInRhYmxlIiwgInRib2R5IiwgIlRSVVNURURfVFlQRVNfUE9MSUNZIiwgIkFMTF9TVkdfVEFHUyIsICJBTExfTUFUSE1MX1RBR1MiLCAiX2NoZWNrVmFsaWROYW1lc3BhY2UiLCAicGFyZW50IiwgInRhZ05hbWUiLCAibmFtZXNwYWNlVVJJIiwgInBhcmVudFRhZ05hbWUiLCAiQm9vbGVhbiIsICJfZm9yY2VSZW1vdmUiLCAibm9kZSIsICJyZW1vdmVDaGlsZCIsICJfcmVtb3ZlQXR0cmlidXRlIiwgIm5hbWUiLCAiZ2V0QXR0cmlidXRlTm9kZSIsICJmcm9tIiwgInJlbW92ZUF0dHJpYnV0ZSIsICJzZXRBdHRyaWJ1dGUiLCAiX2luaXREb2N1bWVudCIsICJkaXJ0eSIsICJkb2MiLCAibGVhZGluZ1doaXRlc3BhY2UiLCAibWF0Y2hlcyIsICJkaXJ0eVBheWxvYWQiLCAicGFyc2VGcm9tU3RyaW5nIiwgImRvY3VtZW50RWxlbWVudCIsICJjcmVhdGVEb2N1bWVudCIsICJpbm5lckhUTUwiLCAiYm9keSIsICJpbnNlcnRCZWZvcmUiLCAiY3JlYXRlVGV4dE5vZGUiLCAiY2hpbGROb2RlcyIsICJjYWxsIiwgIl9jcmVhdGVOb2RlSXRlcmF0b3IiLCAiU0hPV19FTEVNRU5UIiwgIlNIT1dfQ09NTUVOVCIsICJTSE9XX1RFWFQiLCAiU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OIiwgIlNIT1dfQ0RBVEFfU0VDVElPTiIsICJfaXNDbG9iYmVyZWQiLCAibm9kZU5hbWUiLCAidGV4dENvbnRlbnQiLCAiYXR0cmlidXRlcyIsICJoYXNDaGlsZE5vZGVzIiwgIl9pc05vZGUiLCAiX2V4ZWN1dGVIb29rcyIsICJjdXJyZW50Tm9kZSIsICJkYXRhIiwgImhvb2siLCAiX3Nhbml0aXplRWxlbWVudHMiLCAiYWxsb3dlZFRhZ3MiLCAiZmlyc3RFbGVtZW50Q2hpbGQiLCAiX2lzQmFzaWNDdXN0b21FbGVtZW50IiwgInBhcmVudE5vZGUiLCAiY2hpbGRDb3VudCIsICJpIiwgImNoaWxkQ2xvbmUiLCAiX19yZW1vdmFsQ291bnQiLCAiZXhwciIsICJfaXNWYWxpZEF0dHJpYnV0ZSIsICJsY1RhZyIsICJsY05hbWUiLCAiX3Nhbml0aXplQXR0cmlidXRlcyIsICJob29rRXZlbnQiLCAiYXR0ck5hbWUiLCAiYXR0clZhbHVlIiwgImtlZXBBdHRyIiwgImFsbG93ZWRBdHRyaWJ1dGVzIiwgImZvcmNlS2VlcEF0dHIiLCAiYXR0ciIsICJpbml0VmFsdWUiLCAiZ2V0QXR0cmlidXRlVHlwZSIsICJzZXRBdHRyaWJ1dGVOUyIsICJfc2FuaXRpemVTaGFkb3dET00iLCAiZnJhZ21lbnQiLCAic2hhZG93Tm9kZSIsICJzaGFkb3dJdGVyYXRvciIsICJuZXh0Tm9kZSIsICJzYW5pdGl6ZSIsICJpbXBvcnRlZE5vZGUiLCAicmV0dXJuTm9kZSIsICJhcHBlbmRDaGlsZCIsICJmaXJzdENoaWxkIiwgIm5vZGVJdGVyYXRvciIsICJzaGFkb3dyb290IiwgInNoYWRvd3Jvb3Rtb2RlIiwgInNlcmlhbGl6ZWRIVE1MIiwgIm91dGVySFRNTCIsICJkb2N0eXBlIiwgInNldENvbmZpZyIsICJjbGVhckNvbmZpZyIsICJpc1ZhbGlkQXR0cmlidXRlIiwgInRhZyIsICJhZGRIb29rIiwgImVudHJ5UG9pbnQiLCAiaG9va0Z1bmN0aW9uIiwgInJlbW92ZUhvb2siLCAicmVtb3ZlSG9va3MiLCAicmVtb3ZlQWxsSG9va3MiLCAibG9nIiwgInRleHQiLCAicG9wdWxhdGVKb2JUYWIiLCAiaHRtbCIsICJQSEFTRVMiLCAic2hvd0xvYWRKb2JQYW5lbCIsICJzdGF0ZU1hbmFnZXIiLCAiZXZlbnQiLCAibSIsICJ1IiwgIl9wcm9jZWVkQWZ0ZXJJbnRha2UiLCAiX3Nob3dJbnRha2VDb25maXJtQ2FyZCIsICJzZW5kTWVzc2FnZSIsICJsb2ciLCAiUkVUUllfUE9MSUNZX1NUT1JBR0VfS0VZIiwgInRleHQiLCAic2VuZE1lc3NhZ2UiLCAic3RhdGVNYW5hZ2VyIiwgImdldFNlc3Npb25JZEZyb21VUkwiLCAiX3Nob3dJbnRha2VDb25maXJtQ2FyZCIsICJfcHJvY2VlZEFmdGVySW50YWtlIiwgIl9lIiwgImFza1Bvc3RBbmFseXNpc1F1ZXN0aW9ucyIsICJoYW5kbGVRdWVzdGlvblJlc3BvbnNlIiwgInBvcHVsYXRlUXVlc3Rpb25zVGFiIiwgImxvZyIsICJhc2tQb3N0QW5hbHlzaXNRdWVzdGlvbnMiLCAicG9wdWxhdGVRdWVzdGlvbnNUYWIiLCAic3RhdGVNYW5hZ2VyIiwgInEiLCAiXyIsICJoYW5kbGVRdWVzdGlvblJlc3BvbnNlIiwgImJ1aWxkRXhwZXJpZW5jZVJldmlld1RhYmxlIiwgImhhbmRsZUV4cGVyaWVuY2VSZXNwb25zZSIsICJsb2ciLCAiX2ZpbmRFeHBlcmllbmNlUmVjb21tZW5kYXRpb25SZWNvcmQiLCAiXyIsICJidWlsZEV4cGVyaWVuY2VSZXZpZXdUYWJsZSIsICJiIiwgImhhbmRsZUV4cGVyaWVuY2VSZXNwb25zZSIsICJzdGF0ZU1hbmFnZXIiLCAiYnVpbGRTa2lsbHNSZXZpZXdUYWJsZSIsICJoYW5kbGVTa2lsbHNSZXNwb25zZSIsICJsb2ciLCAibSIsICJ4IiwgIm5hbWUiLCAic2tpbGwiLCAiXyIsICJidWlsZFNraWxsc1Jldmlld1RhYmxlIiwgInN0YXRlTWFuYWdlciIsICJiIiwgImUiLCAic2tpbGxOYW1lIiwgImhhbmRsZVNraWxsc1Jlc3BvbnNlIiwgIl9hY2hWZXJiV2FybmluZyIsICJidWlsZEFjaGlldmVtZW50c0VkaXRvciIsICJidWlsZEFjaGlldmVtZW50c1Jldmlld1RhYmxlIiwgImVudHJpZXMiLCAiXyIsICJidWlsZEFjaGlldmVtZW50c1Jldmlld1RhYmxlIiwgImIiLCAiaHRtbCIsICJrIiwgInYiLCAic3RhdGVNYW5hZ2VyIiwgImJ1aWxkQWNoaWV2ZW1lbnRzRWRpdG9yIiwgIl9hY2hWZXJiV2FybmluZyIsICJ0ZXh0IiwgIl9lIiwgImJ1aWxkVGFnbGluZVJldmlld1NlY3Rpb24iLCAiYnVpbGRUYWdsaW5lUmV2aWV3U2VjdGlvbiIsICJfZSIsICJzdGF0ZU1hbmFnZXIiLCAiYnVpbGRTdW1tYXJ5Rm9jdXNTZWN0aW9uIiwgImJ1aWxkU3VtbWFyeUZvY3VzU2VjdGlvbiIsICJrIiwgInRleHQiLCAidyIsICJzdGF0ZU1hbmFnZXIiLCAiYnVpbGRQdWJsaWNhdGlvbnNSZXZpZXdUYWJsZSIsICJsb2ciLCAiYnVpbGRQdWJsaWNhdGlvbnNSZXZpZXdUYWJsZSIsICJxIiwgImh0bWwiLCAiYnRuIiwgInN0YXRlTWFuYWdlciIsICJhcHBseVJld3JpdGVBY3Rpb24iLCAiZmV0Y2hBbmRSZXZpZXdSZXdyaXRlcyIsICJyZW5kZXJSZXdyaXRlUGFuZWwiLCAicmV3cml0ZURlY2lzaW9ucyIsICJzdWJtaXRSZXdyaXRlRGVjaXNpb25zIiwgInJld3JpdGVEZWNpc2lvbnMiLCAiXyIsICJmZXRjaEFuZFJldmlld1Jld3JpdGVzIiwgInJlbmRlclJld3JpdGVQYW5lbCIsICJ3IiwgImFwcGx5UmV3cml0ZUFjdGlvbiIsICJiIiwgIm0iLCAiaSIsICJqIiwgImsiLCAic3VibWl0UmV3cml0ZURlY2lzaW9ucyIsICJzdGF0ZU1hbmFnZXIiLCAicG9wdWxhdGVTcGVsbENoZWNrVGFiIiwgInN1Ym1pdFNwZWxsQ2hlY2tEZWNpc2lvbnMiLCAibG9nIiwgInBvcHVsYXRlU3BlbGxDaGVja1RhYiIsICJjb250ZW50IiwgInN0YXRlTWFuYWdlciIsICJodG1sIiwgImIiLCAiYXRzU2NvcmUiLCAiayIsICJzdWJtaXRTcGVsbENoZWNrRGVjaXNpb25zIiwgInBvcHVsYXRlRG93bmxvYWRUYWIiLCAibG9nIiwgImh0bWwiLCAiXyIsICJwb3B1bGF0ZURvd25sb2FkVGFiIiwgInN0YXRlTWFuYWdlciIsICJ3IiwgIm0iLCAiZmluYWxHZW5lcmF0aW9uQ29tcGxldGUiLCAibG9nIiwgImh0bWwiLCAiZmluYWxHZW5lcmF0aW9uQ29tcGxldGUiLCAic3RhdGVNYW5hZ2VyIiwgInJlbmRlck1hc3RlckRhdGFBaVVwZGF0ZURpc2FibGVkTm90ZSIsICJyZW5kZXJNYXN0ZXJEYXRhQWlVcGRhdGVQYW5lbCIsICJsb2ciLCAicmVuZGVyTWFzdGVyRGF0YUFpVXBkYXRlUGFuZWwiLCAicmVuZGVyTWFzdGVyRGF0YUFpVXBkYXRlRGlzYWJsZWROb3RlIiwgIm0iLCAiZXZlbnQiLCAib3Blbk1hc3RlckN2TW9kYWwiLCAicG9wdWxhdGVNYXN0ZXJUYWIiLCAicmVkb01hc3RlckRhdGFDaGFuZ2UiLCAidW5kb01hc3RlckRhdGFDaGFuZ2UiLCAieCIsICJ2IiwgInRleHQiLCAiayIsICJfIiwgInNlc3Npb25JZCIsICJldmVudCIsICJfcmVuZGVyQ29uc2lzdGVuY3lSZXBvcnQiLCAicG9wdWxhdGVDb3ZlckxldHRlclRhYiIsICJwb3B1bGF0ZUNvdmVyTGV0dGVyVGFiIiwgIl8iLCAidGV4dCIsICJfcmVuZGVyQ29uc2lzdGVuY3lSZXBvcnQiLCAic3RhdGVNYW5hZ2VyIiwgImsiLCAicmUiLCAicG9wdWxhdGVTY3JlZW5pbmdUYWIiLCAicSIsICJiIiwgIl8iLCAicG9wdWxhdGVGaW5hbGlzZVRhYiIsICJsb2ciLCAibSIsICJwb3B1bGF0ZUZpbmFsaXNlVGFiIiwgImh0bWwiLCAiX3JlbmRlclJld3JpdGVBdWRpdExvZyIsICJfIiwgImF0c1Njb3JlIiwgInBvcHVsYXRlSW50ZXJ2aWV3UHJlcFRhYiIsICJsb2ciLCAicG9wdWxhdGVJbnRlcnZpZXdQcmVwVGFiIiwgInBvcHVsYXRlVGhhbmtZb3VUYWIiLCAibG9nIiwgInBvcHVsYXRlVGhhbmtZb3VUYWIiLCAicG9wdWxhdGVIYXJ2ZXN0VGFiIiwgImxvZyIsICJiIiwgImsiLCAidiIsICJwb3B1bGF0ZUhhcnZlc3RUYWIiLCAiaW5pdEVhcmx5UHJldmlld1BhbmVsIiwgInRvZ2dsZUVhcmx5UHJldmlld1BhbmVsIiwgIlN0b3JhZ2VLZXlzIiwgIl9lIiwgImFwaUNhbGwiLCAic3RhdGVNYW5hZ2VyIiwgInRvZ2dsZUVhcmx5UHJldmlld1BhbmVsIiwgImluaXRFYXJseVByZXZpZXdQYW5lbCIsICJfdXBkYXRlU2Vzc2lvblN3aXRjaGVySGVhZGVyIiwgIm9wZW5TZXNzaW9uc01vZGFsIiwgInNob3dPd25lcnNoaXBDb25mbGljdERpYWxvZyIsICJfIiwgIl9jcmVhdGVkSXNvRnJvbVNlc3Npb25QYXRoIiwgImIiLCAidiIsICJldmVudCIsICJmbXREYXRlIiwgImh0bWwiLCAiaW5pdEtleWJvYXJkU2hvcnRjdXRzIiwgInJlc2V0Q2FyZEZvY3VzIiwgInNldHVwRXZlbnRMaXN0ZW5lcnMiLCAidGV4dCJdCn0K
diff --git a/web/download-tab.js b/web/download-tab.js
index ee2ac3a..2d70ae3 100644
--- a/web/download-tab.js
+++ b/web/download-tab.js
@@ -241,8 +241,8 @@ function _renderRefinementPanel() {
Go back to refine an earlier step — all prior decisions and approvals are preserved.
-
- ↻ Refine Customisations
+
+ ↻ Refine Customise
↻ Refine Rewrites
diff --git a/web/early-preview-panel.js b/web/early-preview-panel.js
new file mode 100644
index 0000000..e2daa93
--- /dev/null
+++ b/web/early-preview-panel.js
@@ -0,0 +1,129 @@
+// Copyright (C) 2026 Gregory R. Warnes
+// SPDX-License-Identifier: AGPL-3.0-or-later
+//
+// This file is part of CV-Builder.
+// For commercial licensing, contact greg@warnes-innovations.com
+
+/**
+ * web/early-preview-panel.js
+ * GAP-16 Part B: a persistent, collapsible CV preview shown during the
+ * customization/rewrite/spell-check pipeline, so the user sees a rendered
+ * CV well before Layout Review.
+ *
+ * SAFETY BOUNDARY (do not weaken without re-reading the GAP-16 plan's
+ * committee-review section on this module): this file must only ever call
+ * the read-only GET /api/layout-html endpoint. It must never call
+ * POST /api/cv/generate-preview or POST /api/cv/smart-instruction — both
+ * mutate generation_state (stateManager.markPreviewGenerated() forcibly
+ * advances the workflow phase to LAYOUT_REVIEW), which would silently
+ * fast-forward the user's stage while they're still on an earlier tab.
+ * The rendering step is delegated to preview-render.js, a shared util with
+ * no reference to apiCall/stateManager at all, specifically so a future
+ * edit to the mutating layout-review flow cannot pull the mutating path in
+ * here via a shared import.
+ */
+
+import { apiCall, StorageKeys } from './api-client.js';
+import { stateManager } from './state-manager.js';
+import { renderHtmlIntoIframe } from './preview-render.js';
+
+const EARLY_PREVIEW_TABS = new Set([
+ 'exp-review', 'ach-editor', 'skills-review', 'achievements-review',
+ 'tagline-review', 'summary-review', 'publications-review', // customizations
+ 'rewrite', 'spell',
+]);
+
+let _collapsed = false;
+try {
+ _collapsed = localStorage.getItem(StorageKeys.EARLY_PREVIEW_COLLAPSED) === 'true';
+} catch (_e) {
+ // localStorage unavailable — default to expanded.
+}
+
+function _setCollapsed(collapsed) {
+ _collapsed = collapsed;
+ try {
+ localStorage.setItem(StorageKeys.EARLY_PREVIEW_COLLAPSED, String(collapsed));
+ } catch (_e) {
+ // Non-fatal — collapse state just won't persist across reloads.
+ }
+ const btn = document.getElementById('early-preview-toggle-btn');
+ if (btn) {
+ btn.textContent = collapsed ? 'Show' : 'Hide';
+ btn.setAttribute('aria-expanded', String(!collapsed));
+ }
+}
+
+async function _renderEarlyPreviewBody() {
+ const body = document.getElementById('early-preview-body');
+ const note = document.getElementById('early-preview-status-note');
+ if (!body) return;
+
+ if (_collapsed) {
+ body.style.display = 'none';
+ return;
+ }
+ body.style.display = '';
+
+ let data;
+ try {
+ // Read-only fetch only — see the module-header safety boundary.
+ data = await apiCall('GET', '/api/layout-html');
+ } catch (_e) {
+ // 404/error (no preview generated yet this session) — empty state below.
+ data = null;
+ }
+
+ if (data && data.ok && data.html) {
+ const freshness = (typeof stateManager?.getLayoutFreshness === 'function')
+ ? stateManager.getLayoutFreshness() : { isStale: false };
+
+ body.innerHTML = '';
+ const iframe = document.getElementById('early-preview-iframe');
+ const stateLabel = freshness.isStale ? 'stale' : 'fresh';
+ iframe.title = `CV preview — ${stateLabel}`;
+ iframe.classList.toggle('early-preview-iframe-stale', Boolean(freshness.isStale));
+ renderHtmlIntoIframe(iframe, data.html);
+
+ if (note) {
+ note.textContent = freshness.isStale
+ ? 'Preview reflects an earlier version — visit Layout Review to refresh.'
+ : '';
+ }
+ return;
+ }
+
+ body.innerHTML = 'No CV preview yet — available after you reach Layout Review.
';
+ if (note) note.textContent = '';
+}
+
+/**
+ * Show or hide the panel for the given tab, and (re)render its body when
+ * shown. Called from switchTab() — this function's own in-scope check
+ * decides visibility, so the caller doesn't need to know the tab list.
+ * @param {string} tab
+ */
+async function toggleEarlyPreviewPanel(tab) {
+ const panel = document.getElementById('early-preview-panel');
+ if (!panel) return;
+ if (!EARLY_PREVIEW_TABS.has(tab)) {
+ panel.style.display = 'none';
+ return;
+ }
+ panel.style.display = 'block';
+ await _renderEarlyPreviewBody();
+}
+
+function initEarlyPreviewPanel() {
+ const btn = document.getElementById('early-preview-toggle-btn');
+ if (!btn) return;
+ btn.setAttribute('aria-expanded', String(!_collapsed));
+ btn.textContent = _collapsed ? 'Show' : 'Hide';
+ btn.addEventListener('click', () => {
+ _setCollapsed(!_collapsed);
+ _renderEarlyPreviewBody();
+ });
+}
+
+export { initEarlyPreviewPanel, toggleEarlyPreviewPanel };
diff --git a/web/index.html b/web/index.html
index 2a979b6..f7bb357 100644
--- a/web/index.html
+++ b/web/index.html
@@ -56,7 +56,7 @@ CV Builder
⚠
Not ready
- ⚠ Non-confidential
+ ⚠ Non-confidential
▼
@@ -204,6 +204,7 @@ Conversation
+
‹
📋 Job
@@ -235,7 +236,20 @@
Conversation
›
-
+
+
+
+
@@ -253,9 +267,9 @@
Select a tab to view content