@hanzo/browser-extension 1.7.2 → 1.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-extension/background-firefox.js +426 -168
- package/dist/browser-extension/background.js +38 -43
- package/dist/browser-extension/chrome/background.js +38 -43
- package/dist/browser-extension/chrome/manifest.json +1 -1
- package/dist/browser-extension/chrome/popup.js +18 -7
- package/dist/browser-extension/chrome/sidebar.js +12 -11
- package/dist/browser-extension/firefox/background.js +426 -168
- package/dist/browser-extension/firefox/manifest.json +1 -1
- package/dist/browser-extension/firefox/popup.js +18 -7
- package/dist/browser-extension/firefox/sidebar.js +12 -11
- package/dist/browser-extension/manifest.json +1 -1
- package/dist/browser-extension/package.json +1 -1
- package/dist/browser-extension/popup.js +18 -7
- package/dist/browser-extension/safari/background.js +38 -43
- package/dist/browser-extension/safari/popup.js +18 -7
- package/dist/browser-extension/safari/sidebar.js +12 -11
- package/dist/browser-extension/sidebar.js +12 -11
- package/dist/hanzo-ai-chrome-1.7.2.zip +0 -0
- package/dist/hanzo-ai-chrome-1.7.3.zip +0 -0
- package/dist/hanzo-ai-firefox-1.7.2.zip +0 -0
- package/dist/hanzo-ai-firefox-1.7.3.zip +0 -0
- package/dist/safari/Hanzo AI/Hanzo AI.xcodeproj/project.pbxproj +295 -295
- package/dist/safari/Hanzo AI/Shared (App)/ViewController.swift +1 -1
- package/dist/safari/Hanzo AI/Shared (Extension)/SafariWebExtensionHandler.swift +1 -1
- package/dist/safari/Hanzo AI/iOS (App)/AppDelegate.swift +1 -1
- package/dist/safari/Hanzo AI/iOS (App)/SceneDelegate.swift +1 -1
- package/dist/safari/Hanzo AI/macOS (App)/AppDelegate.swift +1 -1
- package/hanzo-ai-chrome-v1.7.6.zip +0 -0
- package/hanzo-ai-firefox-v1.7.6.zip +0 -0
- package/package.json +1 -1
- package/src/manifest-firefox.json +1 -1
- package/src/manifest.json +1 -1
- package/src/package.json +1 -1
- package/src/chat-widget.tsx +0 -93
- package/src/popup.js +0 -192
- package/src/sidebar.js +0 -884
|
@@ -46,16 +46,27 @@
|
|
|
46
46
|
loginBtn.textContent = "Signing in...";
|
|
47
47
|
chrome.runtime.sendMessage({ action: "auth.login" }, (response) => {
|
|
48
48
|
loginBtn.disabled = false;
|
|
49
|
-
loginBtn.
|
|
49
|
+
loginBtn.textContent = "Sign in with Hanzo";
|
|
50
50
|
if (response == null ? void 0 : response.success) {
|
|
51
51
|
checkAuth();
|
|
52
|
+
} else {
|
|
53
|
+
const msg = (response == null ? void 0 : response.error) || "Unable to sign in. Please try again.";
|
|
54
|
+
loginBtn.textContent = msg;
|
|
55
|
+
setTimeout(() => {
|
|
56
|
+
loginBtn.textContent = "Sign in with Hanzo";
|
|
57
|
+
}, 3e3);
|
|
52
58
|
}
|
|
53
59
|
});
|
|
54
60
|
});
|
|
55
61
|
logoutBtn == null ? void 0 : logoutBtn.addEventListener("click", () => {
|
|
56
62
|
chrome.runtime.sendMessage({ action: "auth.logout" }, () => {
|
|
57
|
-
mainSection.classList.add("hidden");
|
|
58
63
|
loginSection.classList.remove("hidden");
|
|
64
|
+
const avatar = document.getElementById("user-avatar");
|
|
65
|
+
const name = document.getElementById("user-name");
|
|
66
|
+
const email = document.getElementById("user-email");
|
|
67
|
+
if (avatar) avatar.src = "";
|
|
68
|
+
if (name) name.textContent = "";
|
|
69
|
+
if (email) email.textContent = "";
|
|
59
70
|
});
|
|
60
71
|
});
|
|
61
72
|
openPanel == null ? void 0 : openPanel.addEventListener("click", () => {
|
|
@@ -159,11 +170,11 @@
|
|
|
159
170
|
}
|
|
160
171
|
}
|
|
161
172
|
});
|
|
162
|
-
chrome.runtime.sendMessage({ action: "
|
|
173
|
+
chrome.runtime.sendMessage({ action: "checkWebGPU" }, (response) => {
|
|
163
174
|
if (chrome.runtime.lastError) return;
|
|
164
|
-
gpuStatus.classList.add((response == null ? void 0 : response.
|
|
165
|
-
gpuStatus.classList.remove((response == null ? void 0 : response.
|
|
166
|
-
gpuDetail.textContent = (response == null ? void 0 : response.
|
|
175
|
+
gpuStatus.classList.add((response == null ? void 0 : response.available) ? "connected" : "disconnected");
|
|
176
|
+
gpuStatus.classList.remove((response == null ? void 0 : response.available) ? "disconnected" : "connected");
|
|
177
|
+
gpuDetail.textContent = (response == null ? void 0 : response.available) ? response.adapter || "Available" : "Not available";
|
|
167
178
|
});
|
|
168
179
|
mcpStatus.classList.add("connected");
|
|
169
180
|
mcpPort.textContent = "Fallback";
|
|
@@ -264,4 +275,4 @@
|
|
|
264
275
|
checkAuth();
|
|
265
276
|
});
|
|
266
277
|
})();
|
|
267
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3BvcHVwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBIYW56byBBSSBcdTIwMTQgUG9wdXAgU2NyaXB0XG4vLyBVc2VzIGJhY2tncm91bmQgbWVzc2FnZSBwYXNzaW5nIGZvciBhdXRoIChub3QgZGlyZWN0IHN0b3JhZ2UgYWNjZXNzKS5cblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgY29uc3QgbG9naW5TZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luLXNlY3Rpb24nKTtcbiAgY29uc3QgbWFpblNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi1zZWN0aW9uJyk7XG4gIGNvbnN0IHNldHRpbmdzU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1zZWN0aW9uJyk7XG5cbiAgLy8gQXV0aFxuICBjb25zdCBsb2dpbkJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbi1idG4nKTtcbiAgY29uc3QgbG9nb3V0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ291dC1idG4nKTtcblxuICAvLyBPcGVuIHBhbmVsXG4gIGNvbnN0IG9wZW5QYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcGVuLXBhbmVsJyk7XG4gIGNvbnN0IG9wZW5QYWdlT3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcGVuLXBhZ2Utb3ZlcmxheScpO1xuXG4gIC8vIFN0YXR1cyBkb3RzXG4gIGNvbnN0IHphcFN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtc3RhdHVzJyk7XG4gIGNvbnN0IHphcERldGFpbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtZGV0YWlsJyk7XG4gIGNvbnN0IG1jcFN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtY3Atc3RhdHVzJyk7XG4gIGNvbnN0IG1jcFBvcnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWNwLXBvcnQnKTtcbiAgY29uc3QgY2RwU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NkcC1zdGF0dXMnKTtcbiAgY29uc3QgY2RwRGV0YWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NkcC1kZXRhaWwnKTtcbiAgY29uc3QgZ3B1U3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dwdS1zdGF0dXMnKTtcbiAgY29uc3QgZ3B1RGV0YWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dwdS1kZXRhaWwnKTtcblxuICAvLyBTZXR0aW5nc1xuICBjb25zdCBvcGVuU2V0dGluZ3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3Blbi1zZXR0aW5ncycpO1xuICBjb25zdCBiYWNrQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2stYnRuJyk7XG4gIGNvbnN0IHNhdmVTZXR0aW5ncyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYXZlLXNldHRpbmdzJyk7XG4gIGNvbnN0IHRlc3RDb25uZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29ubmVjdGlvbicpO1xuXG4gIC8vIC0tLSBBdXRoIHZpYSBiYWNrZ3JvdW5kIC0tLVxuICBmdW5jdGlvbiBjaGVja0F1dGgoKSB7XG4gICAgLy8gQWx3YXlzIHNob3cgbWFpbiBzZWN0aW9uIGFuZCBzdGF0dXMgKHRvb2xzIHdvcmsgd2l0aG91dCBsb2dpbilcbiAgICBtYWluU2VjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICByZWZyZXNoU3RhdHVzKCk7XG5cbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGguc3RhdHVzJyB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHJldHVybjtcbiAgICAgIGlmIChyZXNwb25zZT8uc3VjY2VzcyAmJiByZXNwb25zZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgIGxvZ2luU2VjdGlvbi5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnVzZXIpIHtcbiAgICAgICAgICBjb25zdCBhdmF0YXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlci1hdmF0YXInKTtcbiAgICAgICAgICBjb25zdCBuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItbmFtZScpO1xuICAgICAgICAgIGNvbnN0IGVtYWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItZW1haWwnKTtcbiAgICAgICAgICBhdmF0YXIuc3JjID0gcmVzcG9uc2UudXNlci5waWN0dXJlIHx8IHJlc3BvbnNlLnVzZXIuYXZhdGFyIHx8ICdpY29uNDgucG5nJztcbiAgICAgICAgICBuYW1lLnRleHRDb250ZW50ID0gcmVzcG9uc2UudXNlci5uYW1lIHx8IHJlc3BvbnNlLnVzZXIuZGlzcGxheU5hbWUgfHwgJ0hhbnpvIFVzZXInO1xuICAgICAgICAgIGVtYWlsLnRleHRDb250ZW50ID0gcmVzcG9uc2UudXNlci5lbWFpbCB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9naW5TZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9naW5CdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGxvZ2luQnRuLmRpc2FibGVkID0gdHJ1ZTtcbiAgICBsb2dpbkJ0bi50ZXh0Q29udGVudCA9ICdTaWduaW5nIGluLi4uJztcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGgubG9naW4nIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgbG9naW5CdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIGxvZ2luQnRuLmlubmVySFRNTCA9ICc8c3ZnIGNsYXNzPVwiaWNvblwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPjxwYXRoIGQ9XCJNMTUgM2g0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtNE0xMCAxN2w1LTUtNS01TTE1IDEySDNcIi8+PC9zdmc+IFNpZ24gaW4gd2l0aCBIYW56byc7XG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgY2hlY2tBdXRoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGxvZ291dEJ0bj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdhdXRoLmxvZ291dCcgfSwgKCkgPT4ge1xuICAgICAgbWFpblNlY3Rpb24uY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gICAgICBsb2dpblNlY3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLSBPcGVuIHNpZGUgcGFuZWwgLS0tXG4gIG9wZW5QYW5lbD8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgaWYgKGNocm9tZS5zaWRlUGFuZWwpIHtcbiAgICAgIGNocm9tZS50YWJzLnF1ZXJ5KHsgYWN0aXZlOiB0cnVlLCBjdXJyZW50V2luZG93OiB0cnVlIH0sICh0YWJzKSA9PiB7XG4gICAgICAgIGlmICh0YWJzWzBdPy5pZCkge1xuICAgICAgICAgIGNocm9tZS5zaWRlUGFuZWwub3Blbih7IHRhYklkOiB0YWJzWzBdLmlkIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmlyZWZveDogc2lkZWJhcl9hY3Rpb24gaXMgYXV0b21hdGljXG4gICAgICB3aW5kb3cuY2xvc2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGlzSW5qZWN0YWJsZVRhYih0YWI6IGNocm9tZS50YWJzLlRhYiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGFiIHx8ICF0YWIuaWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB1cmwgPSB0YWIudXJsIHx8ICcnO1xuICAgIGlmICghdXJsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdjaHJvbWU6Ly8nKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnY2hyb21lLWV4dGVuc2lvbjovLycpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdkZXZ0b29sczovLycpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdlZGdlOi8vJykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2Fib3V0OicpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCd2aWV3LXNvdXJjZTonKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnbW96LWV4dGVuc2lvbjovLycpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvcGVuUGFnZU92ZXJsYXk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdPcGVuaW5nLi4uJztcbiAgICBvcGVuUGFnZU92ZXJsYXkuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICd0cnVlJyk7XG5cbiAgICBjaHJvbWUudGFicy5xdWVyeSh7IGFjdGl2ZTogdHJ1ZSwgY3VycmVudFdpbmRvdzogdHJ1ZSB9LCAodGFicykgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGFic1swXTtcbiAgICAgIGxldCB0YXJnZXRUYWIgPSBpc0luamVjdGFibGVUYWIoYWN0aXZlVGFiKSA/IGFjdGl2ZVRhYiA6IG51bGw7XG5cbiAgICAgIGlmICghdGFyZ2V0VGFiKSB7XG4gICAgICAgIGNocm9tZS50YWJzLnF1ZXJ5KHsgY3VycmVudFdpbmRvdzogdHJ1ZSB9LCAoYWxsVGFicykgPT4ge1xuICAgICAgICAgIHRhcmdldFRhYiA9IGFsbFRhYnMuZmluZCgodGFiKSA9PiBpc0luamVjdGFibGVUYWIodGFiKSkgfHwgbnVsbDtcbiAgICAgICAgICBpZiAoIXRhcmdldFRhYj8uaWQpIHtcbiAgICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdObyB2YWxpZCBwYWdlIHRhYic7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1RvZ2dsZSBPbi1QYWdlIE92ZXJsYXknO1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgfSwgMTIwMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdwYWdlLm92ZXJsYXkudG9nZ2xlJywgdGFiSWQ6IHRhcmdldFRhYi5pZCB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IgfHwgIXJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdVbmF2YWlsYWJsZSBvbiB0aGlzIHBhZ2UnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3BlbmVkID0gISFyZXNwb25zZT8ub3BlbjtcbiAgICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gb3BlbmVkID8gJ092ZXJsYXkgT3BlbmVkJyA6ICdPdmVybGF5IEhpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1RvZ2dsZSBPbi1QYWdlIE92ZXJsYXknO1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgfSwgOTAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0YXJnZXRUYWI/LmlkKSB7XG4gICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdObyBBY3RpdmUgVGFiJztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1RvZ2dsZSBPbi1QYWdlIE92ZXJsYXknO1xuICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgIH0sIDEyMDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAncGFnZS5vdmVybGF5LnRvZ2dsZScsIHRhYklkOiB0YXJnZXRUYWIuaWQgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IgfHwgIXJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1VuYXZhaWxhYmxlIG9uIHRoaXMgcGFnZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb3BlbmVkID0gISFyZXNwb25zZT8ub3BlbjtcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSBvcGVuZWQgPyAnT3ZlcmxheSBPcGVuZWQnIDogJ092ZXJsYXkgSGlkZGVuJztcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVG9nZ2xlIE9uLVBhZ2UgT3ZlcmxheSc7XG4gICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgfSwgOTAwKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0gU3RhdHVzIC0tLVxuICBmdW5jdGlvbiByZWZyZXNoU3RhdHVzKCkge1xuICAgIC8vIFpBUCBzdGF0dXNcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ3phcC5zdGF0dXMnIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikgcmV0dXJuO1xuICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IHphcCA9IHJlc3BvbnNlLnphcDtcbiAgICAgICAgaWYgKHphcC5jb25uZWN0ZWQpIHtcbiAgICAgICAgICB6YXBTdGF0dXMuY2xhc3NMaXN0LmFkZCgnY29ubmVjdGVkJyk7XG4gICAgICAgICAgemFwU3RhdHVzLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2Nvbm5lY3RlZCcpO1xuICAgICAgICAgIGNvbnN0IG1jcENvdW50ID0gemFwLm1jcHM/Lmxlbmd0aCB8fCAwO1xuICAgICAgICAgIGNvbnN0IHRvb2xDb3VudCA9IHphcC5tY3BzPy5yZWR1Y2UoKHN1bSwgbSkgPT4gc3VtICsgKG0udG9vbHM/Lmxlbmd0aCB8fCAwKSwgMCkgfHwgMDtcbiAgICAgICAgICB6YXBEZXRhaWwudGV4dENvbnRlbnQgPSBgJHttY3BDb3VudH0gTUNQKHMpLCAke3Rvb2xDb3VudH0gdG9vbHNgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHphcFN0YXR1cy5jbGFzc0xpc3QucmVtb3ZlKCdjb25uZWN0ZWQnKTtcbiAgICAgICAgICB6YXBTdGF0dXMuY2xhc3NMaXN0LmFkZCgnZGlzY29ubmVjdGVkJyk7XG4gICAgICAgICAgemFwRGV0YWlsLnRleHRDb250ZW50ID0gJ05vdCBjb25uZWN0ZWQnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBHUFUgc3RhdHVzXG4gICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdydW5Mb2NhbEFJJywgcHJvbXB0OiAnJyB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHJldHVybjtcbiAgICAgIGdwdVN0YXR1cy5jbGFzc0xpc3QuYWRkKHJlc3BvbnNlPy5zdWNjZXNzID8gJ2Nvbm5lY3RlZCcgOiAnZGlzY29ubmVjdGVkJyk7XG4gICAgICBncHVTdGF0dXMuY2xhc3NMaXN0LnJlbW92ZShyZXNwb25zZT8uc3VjY2VzcyA/ICdkaXNjb25uZWN0ZWQnIDogJ2Nvbm5lY3RlZCcpO1xuICAgICAgZ3B1RGV0YWlsLnRleHRDb250ZW50ID0gcmVzcG9uc2U/LnN1Y2Nlc3MgPyAnQXZhaWxhYmxlJyA6ICdOb3QgYXZhaWxhYmxlJztcbiAgICB9KTtcblxuICAgIC8vIE1DUC9DRFAgXHUyMDE0IHNldCBhcyBhY3RpdmUgZm9yIG5vdyAoY2hlY2tlZCB2aWEgWkFQKVxuICAgIG1jcFN0YXR1cy5jbGFzc0xpc3QuYWRkKCdjb25uZWN0ZWQnKTtcbiAgICBtY3BQb3J0LnRleHRDb250ZW50ID0gJ0ZhbGxiYWNrJztcbiAgICBjZHBTdGF0dXMuY2xhc3NMaXN0LmFkZCgnY29ubmVjdGVkJyk7XG4gICAgY2RwRGV0YWlsLnRleHRDb250ZW50ID0gJ0FjdGl2ZSc7XG4gIH1cblxuICAvLyAtLS0gU2V0dGluZ3MgLS0tXG4gIG9wZW5TZXR0aW5ncz8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgbWFpblNlY3Rpb24uY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gICAgc2V0dGluZ3NTZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgIGxvYWRTZXR0aW5ncygpO1xuICB9KTtcblxuICBiYWNrQnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBzZXR0aW5nc1NlY3Rpb24uY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gICAgbWFpblNlY3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGxvYWRTZXR0aW5ncygpIHtcbiAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5nZXQoWydtY3BQb3J0JywgJ2NkcFBvcnQnLCAnemFwUG9ydHMnXSwgKHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgbWNwUG9ydElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21jcC1wb3J0LXNldHRpbmcnKTtcbiAgICAgIGNvbnN0IGNkcFBvcnRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZHAtcG9ydC1zZXR0aW5nJyk7XG4gICAgICBjb25zdCB6YXBQb3J0c0lucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3phcC1wb3J0cy1zZXR0aW5nJyk7XG5cbiAgICAgIGlmIChtY3BQb3J0SW5wdXQpIG1jcFBvcnRJbnB1dC52YWx1ZSA9IHJlc3VsdC5tY3BQb3J0IHx8IDMwMDE7XG4gICAgICBpZiAoY2RwUG9ydElucHV0KSBjZHBQb3J0SW5wdXQudmFsdWUgPSByZXN1bHQuY2RwUG9ydCB8fCA5MjIzO1xuICAgICAgaWYgKHphcFBvcnRzSW5wdXQpIHphcFBvcnRzSW5wdXQudmFsdWUgPSAocmVzdWx0LnphcFBvcnRzIHx8IFs5OTk5LCA5OTk4LCA5OTk3LCA5OTk2LCA5OTk1XSkuam9pbignLCcpO1xuICAgIH0pO1xuICB9XG5cbiAgc2F2ZVNldHRpbmdzPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBjb25zdCBtY3BQb3J0VmFsID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21jcC1wb3J0LXNldHRpbmcnKT8udmFsdWUpIHx8IDMwMDE7XG4gICAgY29uc3QgY2RwUG9ydFZhbCA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZHAtcG9ydC1zZXR0aW5nJyk/LnZhbHVlKSB8fCA5MjIzO1xuICAgIGNvbnN0IHphcFBvcnRzVmFsID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtcG9ydHMtc2V0dGluZycpPy52YWx1ZSB8fCAnJylcbiAgICAgIC5zcGxpdCgnLCcpLm1hcChwID0+IHBhcnNlSW50KHAudHJpbSgpKSkuZmlsdGVyKHAgPT4gcCA+IDAgJiYgcCA8IDY1NTM2KTtcblxuICAgIGNocm9tZS5zdG9yYWdlLmxvY2FsLnNldCh7XG4gICAgICBtY3BQb3J0OiBtY3BQb3J0VmFsLFxuICAgICAgY2RwUG9ydDogY2RwUG9ydFZhbCxcbiAgICAgIHphcFBvcnRzOiB6YXBQb3J0c1ZhbC5sZW5ndGggPyB6YXBQb3J0c1ZhbCA6IFs5OTk5LCA5OTk4LCA5OTk3LCA5OTk2LCA5OTk1XSxcbiAgICB9LCAoKSA9PiB7XG4gICAgICBzYXZlU2V0dGluZ3MudGV4dENvbnRlbnQgPSAnU2F2ZWQhJztcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBzYXZlU2V0dGluZ3MudGV4dENvbnRlbnQgPSAnU2F2ZSBTZXR0aW5ncyc7IH0sIDE1MDApO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0gVGVzdCBDb25uZWN0aW9uIC0tLVxuICB0ZXN0Q29ubmVjdGlvbj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgdGVzdENvbm5lY3Rpb24udGV4dENvbnRlbnQgPSAnVGVzdGluZy4uLic7XG4gICAgdGVzdENvbm5lY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICd6YXAuZGlzY292ZXInIH0sICgpID0+IHtcbiAgICAgIHJlZnJlc2hTdGF0dXMoKTtcbiAgICAgIHRlc3RDb25uZWN0aW9uLnRleHRDb250ZW50ID0gJ1Rlc3QgQ29ubmVjdGlvbic7XG4gICAgICB0ZXN0Q29ubmVjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBGZWF0dXJlIHRvZ2dsZXNcbiAgWydzb3VyY2UtbWFwcycsICd3ZWJncHUtYWknLCAnYnJvd3Nlci1jb250cm9sJywgJ3RhYi1maWxlc3lzdGVtJ10uZm9yRWFjaChpZCA9PiB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGNoZWNrYm94KSB7XG4gICAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5nZXQoW2lkXSwgKHJlc3VsdCkgPT4ge1xuICAgICAgICBjaGVja2JveC5jaGVja2VkID0gcmVzdWx0W2lkXSAhPT0gZmFsc2U7IC8vIGRlZmF1bHQgb25cbiAgICAgIH0pO1xuICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5zZXQoeyBbaWRdOiBjaGVja2JveC5jaGVja2VkIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyAtLS0gQnJvd3NlciBCYWNrZW5kIFBpY2tlciAtLS1cbiAgY29uc3QgYmFja2VuZFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdicm93c2VyLWJhY2tlbmQnKSBhcyBIVE1MU2VsZWN0RWxlbWVudCB8IG51bGw7XG4gIGNvbnN0IGJyaWRnZVN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdicmlkZ2Utc3RhdHVzJyk7XG4gIGNvbnN0IGJyaWRnZURldGFpbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdicmlkZ2UtZGV0YWlsJyk7XG5cbiAgZnVuY3Rpb24gbG9hZEJhY2tlbmRQcmVmZXJlbmNlKCkge1xuICAgIGNocm9tZS5zdG9yYWdlLnN5bmMuZ2V0KFsnYnJvd3NlckJhY2tlbmQnXSwgKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKGJhY2tlbmRTZWxlY3QgJiYgcmVzdWx0LmJyb3dzZXJCYWNrZW5kKSB7XG4gICAgICAgIGJhY2tlbmRTZWxlY3QudmFsdWUgPSByZXN1bHQuYnJvd3NlckJhY2tlbmQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWZyZXNoQnJpZGdlU3RhdHVzKCkge1xuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnYnJpZGdlLnN0YXR1cycgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSByZXR1cm47XG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MgJiYgcmVzcG9uc2UuY29ubmVjdGVkKSB7XG4gICAgICAgIGJyaWRnZVN0YXR1cz8uY2xhc3NMaXN0LmFkZCgnY29ubmVjdGVkJyk7XG4gICAgICAgIGJyaWRnZVN0YXR1cz8uY2xhc3NMaXN0LnJlbW92ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJzID0gcmVzcG9uc2UuYnJvd3NlcnMgfHwgW107XG4gICAgICAgIGJyaWRnZURldGFpbC50ZXh0Q29udGVudCA9IGJyb3dzZXJzLmxlbmd0aFxuICAgICAgICAgID8gYENvbm5lY3RlZDogJHticm93c2Vycy5qb2luKCcsICcpfWBcbiAgICAgICAgICA6ICdDb25uZWN0ZWQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJpZGdlU3RhdHVzPy5jbGFzc0xpc3QucmVtb3ZlKCdjb25uZWN0ZWQnKTtcbiAgICAgICAgYnJpZGdlU3RhdHVzPy5jbGFzc0xpc3QuYWRkKCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgICAgYnJpZGdlRGV0YWlsLnRleHRDb250ZW50ID0gJ05vdCBjb25uZWN0ZWQnO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYmFja2VuZFNlbGVjdD8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYmFja2VuZFNlbGVjdC52YWx1ZTtcblxuICAgIC8vIFNhdmUgdG8gY2hyb21lLnN0b3JhZ2Uuc3luYyAoY3Jvc3MtZGV2aWNlKVxuICAgIGNocm9tZS5zdG9yYWdlLnN5bmMuc2V0KHsgYnJvd3NlckJhY2tlbmQ6IHZhbHVlIH0pO1xuXG4gICAgLy8gRm9yd2FyZCB0byBiYWNrZ3JvdW5kIHRvIHBlcnNpc3QgdmlhIENEUCBicmlkZ2UgKyBzeW5jIHRvIElBTVxuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICAgIGFjdGlvbjogJ2NvbmZpZy5zYXZlJyxcbiAgICAgIGtleTogJ2Jyb3dzZXJCYWNrZW5kJyxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9KTtcblxuICBsb2FkQmFja2VuZFByZWZlcmVuY2UoKTtcbiAgcmVmcmVzaEJyaWRnZVN0YXR1cygpO1xuXG4gIC8vIEluaXRcbiAgY2hlY2tBdXRoKCk7XG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7OztBQUdBLFdBQVMsaUJBQWlCLG9CQUFvQixNQUFNO0FBQ2xELFVBQU0sZUFBZSxTQUFTLGVBQWUsZUFBZTtBQUM1RCxVQUFNLGNBQWMsU0FBUyxlQUFlLGNBQWM7QUFDMUQsVUFBTSxrQkFBa0IsU0FBUyxlQUFlLGtCQUFrQjtBQUdsRSxVQUFNLFdBQVcsU0FBUyxlQUFlLFdBQVc7QUFDcEQsVUFBTSxZQUFZLFNBQVMsZUFBZSxZQUFZO0FBR3RELFVBQU0sWUFBWSxTQUFTLGVBQWUsWUFBWTtBQUN0RCxVQUFNLGtCQUFrQixTQUFTLGVBQWUsbUJBQW1CO0FBR25FLFVBQU0sWUFBWSxTQUFTLGVBQWUsWUFBWTtBQUN0RCxVQUFNLFlBQVksU0FBUyxlQUFlLFlBQVk7QUFDdEQsVUFBTSxZQUFZLFNBQVMsZUFBZSxZ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QUUsR0FBRyxDQUFDLFdBQVc7QUFDekMsbUJBQVMsVUFBVSxPQUFPLEVBQUUsTUFBTTtBQUFBLFFBQ3BDLENBQUM7QUFDRCxpQkFBUyxpQkFBaUIsVUFBVSxNQUFNO0FBQ3hDLGlCQUFPLFFBQVEsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsU0FBUyxRQUFRLENBQUM7QUFBQSxRQUNyRCxDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0YsQ0FBQztBQUdELFVBQU0sZ0JBQWdCLFNBQVMsZUFBZSxpQkFBaUI7QUFDL0QsVUFBTSxlQUFlLFNBQVMsZUFBZSxlQUFlO0FBQzVELFVBQU0sZUFBZSxTQUFTLGVBQWUsZUFBZTtBQUU1RCxhQUFTLHdCQUF3QjtBQUMvQixhQUFPLFFBQVEsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxXQUFXO0FBQ3RELFlBQUksaUJBQWlCLE9BQU8sZ0JBQWdCO0FBQzFDLHdCQUFjLFFBQVEsT0FBTztBQUFBLFFBQy9CO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsc0JBQXNCO0FBQzdCLGFBQU8sUUFBUSxZQUFZLEVBQUUsUUFBUSxnQkFBZ0IsR0FBRyxDQUFDLGFBQWE7QUFDcEUsWUFBSSxPQUFPLFFBQVEsVUFBVztBQUM5QixhQUFJLHFDQUFVLFlBQVcsU0FBUyxXQUFXO0FBQzNDLHVEQUFjLFVBQVUsSUFBSTtBQUM1Qix1REFBYyxVQUFVLE9BQU87QUFDL0IsZ0JBQU0sV0FBVyxTQUFTLFlBQVksQ0FBQztBQUN2Qyx1QkFBYSxjQUFjLFNBQVMsU0FDaEMsY0FBYyxTQUFTLEtBQUssSUFBSSxDQUFDLEtBQ2pDO0FBQUEsUUFDTixPQUFPO0FBQ0wsdURBQWMsVUFBVSxPQUFPO0FBQy9CLHVEQUFjLFVBQVUsSUFBSTtBQUM1Qix1QkFBYSxjQUFjO0FBQUEsUUFDN0I7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsbURBQWUsaUJBQWlCLFVBQVUsTUFBTTtBQUM5QyxZQUFNLFFBQVEsY0FBYztBQUc1QixhQUFPLFFBQVEsS0FBSyxJQUFJLEVBQUUsZ0JBQWdCLE1BQU0sQ0FBQztBQUdqRCxhQUFPLFFBQVEsWUFBWTtBQUFBLFFBQ3pCLFFBQVE7QUFBQSxRQUNSLEtBQUs7QUFBQSxRQUNMO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUVBLDBCQUFzQjtBQUN0Qix3QkFBb0I7QUFHcEIsY0FBVTtBQUFBLEVBQ1osQ0FBQzsiLAogICJuYW1lcyI6IFsiX2EiXQp9Cg==
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3BvcHVwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBIYW56byBBSSBcdTIwMTQgUG9wdXAgU2NyaXB0XG4vLyBVc2VzIGJhY2tncm91bmQgbWVzc2FnZSBwYXNzaW5nIGZvciBhdXRoIChub3QgZGlyZWN0IHN0b3JhZ2UgYWNjZXNzKS5cblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgY29uc3QgbG9naW5TZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luLXNlY3Rpb24nKTtcbiAgY29uc3QgbWFpblNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi1zZWN0aW9uJyk7XG4gIGNvbnN0IHNldHRpbmdzU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1zZWN0aW9uJyk7XG5cbiAgLy8gQXV0aFxuICBjb25zdCBsb2dpbkJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbi1idG4nKTtcbiAgY29uc3QgbG9nb3V0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ291dC1idG4nKTtcblxuICAvLyBPcGVuIHBhbmVsXG4gIGNvbnN0IG9wZW5QYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcGVuLXBhbmVsJyk7XG4gIGNvbnN0IG9wZW5QYWdlT3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcGVuLXBhZ2Utb3ZlcmxheScpO1xuXG4gIC8vIFN0YXR1cyBkb3RzXG4gIGNvbnN0IHphcFN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtc3RhdHVzJyk7XG4gIGNvbnN0IHphcERldGFpbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtZGV0YWlsJyk7XG4gIGNvbnN0IG1jcFN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtY3Atc3RhdHVzJyk7XG4gIGNvbnN0IG1jcFBvcnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWNwLXBvcnQnKTtcbiAgY29uc3QgY2RwU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NkcC1zdGF0dXMnKTtcbiAgY29uc3QgY2RwRGV0YWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NkcC1kZXRhaWwnKTtcbiAgY29uc3QgZ3B1U3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dwdS1zdGF0dXMnKTtcbiAgY29uc3QgZ3B1RGV0YWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dwdS1kZXRhaWwnKTtcblxuICAvLyBTZXR0aW5nc1xuICBjb25zdCBvcGVuU2V0dGluZ3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3Blbi1zZXR0aW5ncycpO1xuICBjb25zdCBiYWNrQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2stYnRuJyk7XG4gIGNvbnN0IHNhdmVTZXR0aW5ncyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYXZlLXNldHRpbmdzJyk7XG4gIGNvbnN0IHRlc3RDb25uZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29ubmVjdGlvbicpO1xuXG4gIC8vIC0tLSBBdXRoIHZpYSBiYWNrZ3JvdW5kIC0tLVxuICBmdW5jdGlvbiBjaGVja0F1dGgoKSB7XG4gICAgLy8gQWx3YXlzIHNob3cgbWFpbiBzZWN0aW9uIGFuZCBzdGF0dXMgKHRvb2xzIHdvcmsgd2l0aG91dCBsb2dpbilcbiAgICBtYWluU2VjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICByZWZyZXNoU3RhdHVzKCk7XG5cbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGguc3RhdHVzJyB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHJldHVybjtcbiAgICAgIGlmIChyZXNwb25zZT8uc3VjY2VzcyAmJiByZXNwb25zZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgIGxvZ2luU2VjdGlvbi5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnVzZXIpIHtcbiAgICAgICAgICBjb25zdCBhdmF0YXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlci1hdmF0YXInKTtcbiAgICAgICAgICBjb25zdCBuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItbmFtZScpO1xuICAgICAgICAgIGNvbnN0IGVtYWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItZW1haWwnKTtcbiAgICAgICAgICBhdmF0YXIuc3JjID0gcmVzcG9uc2UudXNlci5waWN0dXJlIHx8IHJlc3BvbnNlLnVzZXIuYXZhdGFyIHx8ICdpY29uNDgucG5nJztcbiAgICAgICAgICBuYW1lLnRleHRDb250ZW50ID0gcmVzcG9uc2UudXNlci5uYW1lIHx8IHJlc3BvbnNlLnVzZXIuZGlzcGxheU5hbWUgfHwgJ0hhbnpvIFVzZXInO1xuICAgICAgICAgIGVtYWlsLnRleHRDb250ZW50ID0gcmVzcG9uc2UudXNlci5lbWFpbCB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9naW5TZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9naW5CdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGxvZ2luQnRuLmRpc2FibGVkID0gdHJ1ZTtcbiAgICBsb2dpbkJ0bi50ZXh0Q29udGVudCA9ICdTaWduaW5nIGluLi4uJztcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGgubG9naW4nIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgbG9naW5CdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIGxvZ2luQnRuLnRleHRDb250ZW50ID0gJ1NpZ24gaW4gd2l0aCBIYW56byc7XG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgY2hlY2tBdXRoKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtc2cgPSByZXNwb25zZT8uZXJyb3IgfHwgJ1VuYWJsZSB0byBzaWduIGluLiBQbGVhc2UgdHJ5IGFnYWluLic7XG4gICAgICAgIGxvZ2luQnRuLnRleHRDb250ZW50ID0gbXNnO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbG9naW5CdG4udGV4dENvbnRlbnQgPSAnU2lnbiBpbiB3aXRoIEhhbnpvJzsgfSwgMzAwMCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGxvZ291dEJ0bj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdhdXRoLmxvZ291dCcgfSwgKCkgPT4ge1xuICAgICAgbG9naW5TZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgLy8gS2VlcCBtYWluIHNlY3Rpb24gdmlzaWJsZSBcdTIwMTQgdG9vbHMgd29yayB3aXRob3V0IGF1dGhcbiAgICAgIGNvbnN0IGF2YXRhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyLWF2YXRhcicpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgICBjb25zdCBuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItbmFtZScpO1xuICAgICAgY29uc3QgZW1haWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlci1lbWFpbCcpO1xuICAgICAgaWYgKGF2YXRhcikgYXZhdGFyLnNyYyA9ICcnO1xuICAgICAgaWYgKG5hbWUpIG5hbWUudGV4dENvbnRlbnQgPSAnJztcbiAgICAgIGlmIChlbWFpbCkgZW1haWwudGV4dENvbnRlbnQgPSAnJztcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tIE9wZW4gc2lkZSBwYW5lbCAtLS1cbiAgb3BlblBhbmVsPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBpZiAoY2hyb21lLnNpZGVQYW5lbCkge1xuICAgICAgY2hyb21lLnRhYnMucXVlcnkoeyBhY3RpdmU6IHRydWUsIGN1cnJlbnRXaW5kb3c6IHRydWUgfSwgKHRhYnMpID0+IHtcbiAgICAgICAgaWYgKHRhYnNbMF0/LmlkKSB7XG4gICAgICAgICAgY2hyb21lLnNpZGVQYW5lbC5vcGVuKHsgdGFiSWQ6IHRhYnNbMF0uaWQgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGaXJlZm94OiBzaWRlYmFyX2FjdGlvbiBpcyBhdXRvbWF0aWNcbiAgICAgIHdpbmRvdy5jbG9zZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gaXNJbmplY3RhYmxlVGFiKHRhYjogY2hyb21lLnRhYnMuVGFiIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0YWIgfHwgIXRhYi5pZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHVybCA9IHRhYi51cmwgfHwgJyc7XG4gICAgaWYgKCF1cmwpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2Nocm9tZTovLycpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdjaHJvbWUtZXh0ZW5zaW9uOi8vJykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2RldnRvb2xzOi8vJykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2VkZ2U6Ly8nKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnYWJvdXQ6JykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ3ZpZXctc291cmNlOicpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdtb3otZXh0ZW5zaW9uOi8vJykpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG9wZW5QYWdlT3ZlcmxheT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ09wZW5pbmcuLi4nO1xuICAgIG9wZW5QYWdlT3ZlcmxheS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcblxuICAgIGNocm9tZS50YWJzLnF1ZXJ5KHsgYWN0aXZlOiB0cnVlLCBjdXJyZW50V2luZG93OiB0cnVlIH0sICh0YWJzKSA9PiB7XG4gICAgICBjb25zdCBhY3RpdmVUYWIgPSB0YWJzWzBdO1xuICAgICAgbGV0IHRhcmdldFRhYiA9IGlzSW5qZWN0YWJsZVRhYihhY3RpdmVUYWIpID8gYWN0aXZlVGFiIDogbnVsbDtcblxuICAgICAgaWYgKCF0YXJnZXRUYWIpIHtcbiAgICAgICAgY2hyb21lLnRhYnMucXVlcnkoeyBjdXJyZW50V2luZG93OiB0cnVlIH0sIChhbGxUYWJzKSA9PiB7XG4gICAgICAgICAgdGFyZ2V0VGFiID0gYWxsVGFicy5maW5kKCh0YWIpID0+IGlzSW5qZWN0YWJsZVRhYih0YWIpKSB8fCBudWxsO1xuICAgICAgICAgIGlmICghdGFyZ2V0VGFiPy5pZCkge1xuICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ05vIHZhbGlkIHBhZ2UgdGFiJztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVG9nZ2xlIE9uLVBhZ2UgT3ZlcmxheSc7XG4gICAgICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICB9LCAxMjAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ3BhZ2Uub3ZlcmxheS50b2dnbGUnLCB0YWJJZDogdGFyZ2V0VGFiLmlkIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvciB8fCAhcmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1VuYXZhaWxhYmxlIG9uIHRoaXMgcGFnZSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBvcGVuZWQgPSAhIXJlc3BvbnNlPy5vcGVuO1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSBvcGVuZWQgPyAnT3ZlcmxheSBPcGVuZWQnIDogJ092ZXJsYXkgSGlkZGVuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVG9nZ2xlIE9uLVBhZ2UgT3ZlcmxheSc7XG4gICAgICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICB9LCA5MDApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRhcmdldFRhYj8uaWQpIHtcbiAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ05vIEFjdGl2ZSBUYWInO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVG9nZ2xlIE9uLVBhZ2UgT3ZlcmxheSc7XG4gICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgfSwgMTIwMCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdwYWdlLm92ZXJsYXkudG9nZ2xlJywgdGFiSWQ6IHRhcmdldFRhYi5pZCB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvciB8fCAhcmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVW5hdmFpbGFibGUgb24gdGhpcyBwYWdlJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBvcGVuZWQgPSAhIXJlc3BvbnNlPy5vcGVuO1xuICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9IG9wZW5lZCA/ICdPdmVybGF5IE9wZW5lZCcgOiAnT3ZlcmxheSBIaWRkZW4nO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdUb2dnbGUgT24tUGFnZSBPdmVybGF5JztcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICB9LCA5MDApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLSBTdGF0dXMgLS0tXG4gIGZ1bmN0aW9uIHJlZnJlc2hTdGF0dXMoKSB7XG4gICAgLy8gWkFQIHN0YXR1c1xuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnemFwLnN0YXR1cycgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSByZXR1cm47XG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgemFwID0gcmVzcG9uc2UuemFwO1xuICAgICAgICBpZiAoemFwLmNvbm5lY3RlZCkge1xuICAgICAgICAgIHphcFN0YXR1cy5jbGFzc0xpc3QuYWRkKCdjb25uZWN0ZWQnKTtcbiAgICAgICAgICB6YXBTdGF0dXMuY2xhc3NMaXN0LnJlbW92ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgICAgICAgY29uc3QgbWNwQ291bnQgPSB6YXAubWNwcz8ubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgY29uc3QgdG9vbENvdW50ID0gemFwLm1jcHM/LnJlZHVjZSgoc3VtLCBtKSA9PiBzdW0gKyAobS50b29scz8ubGVuZ3RoIHx8IDApLCAwKSB8fCAwO1xuICAgICAgICAgIHphcERldGFpbC50ZXh0Q29udGVudCA9IGAke21jcENvdW50fSBNQ1AocyksICR7dG9vbENvdW50fSB0b29sc2A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgemFwU3RhdHVzLmNsYXNzTGlzdC5yZW1vdmUoJ2Nvbm5lY3RlZCcpO1xuICAgICAgICAgIHphcFN0YXR1cy5jbGFzc0xpc3QuYWRkKCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgICAgICB6YXBEZXRhaWwudGV4dENvbnRlbnQgPSAnTm90IGNvbm5lY3RlZCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEdQVSBzdGF0dXNcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2NoZWNrV2ViR1BVJyB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHJldHVybjtcbiAgICAgIGdwdVN0YXR1cy5jbGFzc0xpc3QuYWRkKHJlc3BvbnNlPy5hdmFpbGFibGUgPyAnY29ubmVjdGVkJyA6ICdkaXNjb25uZWN0ZWQnKTtcbiAgICAgIGdwdVN0YXR1cy5jbGFzc0xpc3QucmVtb3ZlKHJlc3BvbnNlPy5hdmFpbGFibGUgPyAnZGlzY29ubmVjdGVkJyA6ICdjb25uZWN0ZWQnKTtcbiAgICAgIGdwdURldGFpbC50ZXh0Q29udGVudCA9IHJlc3BvbnNlPy5hdmFpbGFibGUgPyAocmVzcG9uc2UuYWRhcHRlciB8fCAnQXZhaWxhYmxlJykgOiAnTm90IGF2YWlsYWJsZSc7XG4gICAgfSk7XG5cbiAgICAvLyBNQ1AvQ0RQIFx1MjAxNCBzZXQgYXMgYWN0aXZlIGZvciBub3cgKGNoZWNrZWQgdmlhIFpBUClcbiAgICBtY3BTdGF0dXMuY2xhc3NMaXN0LmFkZCgnY29ubmVjdGVkJyk7XG4gICAgbWNwUG9ydC50ZXh0Q29udGVudCA9ICdGYWxsYmFjayc7XG4gICAgY2RwU3RhdHVzLmNsYXNzTGlzdC5hZGQoJ2Nvbm5lY3RlZCcpO1xuICAgIGNkcERldGFpbC50ZXh0Q29udGVudCA9ICdBY3RpdmUnO1xuICB9XG5cbiAgLy8gLS0tIFNldHRpbmdzIC0tLVxuICBvcGVuU2V0dGluZ3M/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIG1haW5TZWN0aW9uLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgIHNldHRpbmdzU2VjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICBsb2FkU2V0dGluZ3MoKTtcbiAgfSk7XG5cbiAgYmFja0J0bj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgc2V0dGluZ3NTZWN0aW9uLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgIG1haW5TZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICB9KTtcblxuICBmdW5jdGlvbiBsb2FkU2V0dGluZ3MoKSB7XG4gICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuZ2V0KFsnbWNwUG9ydCcsICdjZHBQb3J0JywgJ3phcFBvcnRzJ10sIChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IG1jcFBvcnRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtY3AtcG9ydC1zZXR0aW5nJyk7XG4gICAgICBjb25zdCBjZHBQb3J0SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2RwLXBvcnQtc2V0dGluZycpO1xuICAgICAgY29uc3QgemFwUG9ydHNJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtcG9ydHMtc2V0dGluZycpO1xuXG4gICAgICBpZiAobWNwUG9ydElucHV0KSBtY3BQb3J0SW5wdXQudmFsdWUgPSByZXN1bHQubWNwUG9ydCB8fCAzMDAxO1xuICAgICAgaWYgKGNkcFBvcnRJbnB1dCkgY2RwUG9ydElucHV0LnZhbHVlID0gcmVzdWx0LmNkcFBvcnQgfHwgOTIyMztcbiAgICAgIGlmICh6YXBQb3J0c0lucHV0KSB6YXBQb3J0c0lucHV0LnZhbHVlID0gKHJlc3VsdC56YXBQb3J0cyB8fCBbOTk5OSwgOTk5OCwgOTk5NywgOTk5NiwgOTk5NV0pLmpvaW4oJywnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNhdmVTZXR0aW5ncz8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY29uc3QgbWNwUG9ydFZhbCA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtY3AtcG9ydC1zZXR0aW5nJyk/LnZhbHVlKSB8fCAzMDAxO1xuICAgIGNvbnN0IGNkcFBvcnRWYWwgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2RwLXBvcnQtc2V0dGluZycpPy52YWx1ZSkgfHwgOTIyMztcbiAgICBjb25zdCB6YXBQb3J0c1ZhbCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnemFwLXBvcnRzLXNldHRpbmcnKT8udmFsdWUgfHwgJycpXG4gICAgICAuc3BsaXQoJywnKS5tYXAocCA9PiBwYXJzZUludChwLnRyaW0oKSkpLmZpbHRlcihwID0+IHAgPiAwICYmIHAgPCA2NTUzNik7XG5cbiAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5zZXQoe1xuICAgICAgbWNwUG9ydDogbWNwUG9ydFZhbCxcbiAgICAgIGNkcFBvcnQ6IGNkcFBvcnRWYWwsXG4gICAgICB6YXBQb3J0czogemFwUG9ydHNWYWwubGVuZ3RoID8gemFwUG9ydHNWYWwgOiBbOTk5OSwgOTk5OCwgOTk5NywgOTk5NiwgOTk5NV0sXG4gICAgfSwgKCkgPT4ge1xuICAgICAgc2F2ZVNldHRpbmdzLnRleHRDb250ZW50ID0gJ1NhdmVkISc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgc2F2ZVNldHRpbmdzLnRleHRDb250ZW50ID0gJ1NhdmUgU2V0dGluZ3MnOyB9LCAxNTAwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tIFRlc3QgQ29ubmVjdGlvbiAtLS1cbiAgdGVzdENvbm5lY3Rpb24/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIHRlc3RDb25uZWN0aW9uLnRleHRDb250ZW50ID0gJ1Rlc3RpbmcuLi4nO1xuICAgIHRlc3RDb25uZWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcblxuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnemFwLmRpc2NvdmVyJyB9LCAoKSA9PiB7XG4gICAgICByZWZyZXNoU3RhdHVzKCk7XG4gICAgICB0ZXN0Q29ubmVjdGlvbi50ZXh0Q29udGVudCA9ICdUZXN0IENvbm5lY3Rpb24nO1xuICAgICAgdGVzdENvbm5lY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gRmVhdHVyZSB0b2dnbGVzXG4gIFsnc291cmNlLW1hcHMnLCAnd2ViZ3B1LWFpJywgJ2Jyb3dzZXItY29udHJvbCcsICd0YWItZmlsZXN5c3RlbSddLmZvckVhY2goaWQgPT4ge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChjaGVja2JveCkge1xuICAgICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuZ2V0KFtpZF0sIChyZXN1bHQpID0+IHtcbiAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHJlc3VsdFtpZF0gIT09IGZhbHNlOyAvLyBkZWZhdWx0IG9uXG4gICAgICB9KTtcbiAgICAgIGNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuc2V0KHsgW2lkXTogY2hlY2tib3guY2hlY2tlZCB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gLS0tIEJyb3dzZXIgQmFja2VuZCBQaWNrZXIgLS0tXG4gIGNvbnN0IGJhY2tlbmRTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnJvd3Nlci1iYWNrZW5kJykgYXMgSFRNTFNlbGVjdEVsZW1lbnQgfCBudWxsO1xuICBjb25zdCBicmlkZ2VTdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnJpZGdlLXN0YXR1cycpO1xuICBjb25zdCBicmlkZ2VEZXRhaWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnJpZGdlLWRldGFpbCcpO1xuXG4gIGZ1bmN0aW9uIGxvYWRCYWNrZW5kUHJlZmVyZW5jZSgpIHtcbiAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLmdldChbJ2Jyb3dzZXJCYWNrZW5kJ10sIChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChiYWNrZW5kU2VsZWN0ICYmIHJlc3VsdC5icm93c2VyQmFja2VuZCkge1xuICAgICAgICBiYWNrZW5kU2VsZWN0LnZhbHVlID0gcmVzdWx0LmJyb3dzZXJCYWNrZW5kO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVmcmVzaEJyaWRnZVN0YXR1cygpIHtcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2JyaWRnZS5zdGF0dXMnIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikgcmV0dXJuO1xuICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzICYmIHJlc3BvbnNlLmNvbm5lY3RlZCkge1xuICAgICAgICBicmlkZ2VTdGF0dXM/LmNsYXNzTGlzdC5hZGQoJ2Nvbm5lY3RlZCcpO1xuICAgICAgICBicmlkZ2VTdGF0dXM/LmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2Nvbm5lY3RlZCcpO1xuICAgICAgICBjb25zdCBicm93c2VycyA9IHJlc3BvbnNlLmJyb3dzZXJzIHx8IFtdO1xuICAgICAgICBicmlkZ2VEZXRhaWwudGV4dENvbnRlbnQgPSBicm93c2Vycy5sZW5ndGhcbiAgICAgICAgICA/IGBDb25uZWN0ZWQ6ICR7YnJvd3NlcnMuam9pbignLCAnKX1gXG4gICAgICAgICAgOiAnQ29ubmVjdGVkJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyaWRnZVN0YXR1cz8uY2xhc3NMaXN0LnJlbW92ZSgnY29ubmVjdGVkJyk7XG4gICAgICAgIGJyaWRnZVN0YXR1cz8uY2xhc3NMaXN0LmFkZCgnZGlzY29ubmVjdGVkJyk7XG4gICAgICAgIGJyaWRnZURldGFpbC50ZXh0Q29udGVudCA9ICdOb3QgY29ubmVjdGVkJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGJhY2tlbmRTZWxlY3Q/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGJhY2tlbmRTZWxlY3QudmFsdWU7XG5cbiAgICAvLyBTYXZlIHRvIGNocm9tZS5zdG9yYWdlLnN5bmMgKGNyb3NzLWRldmljZSlcbiAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLnNldCh7IGJyb3dzZXJCYWNrZW5kOiB2YWx1ZSB9KTtcblxuICAgIC8vIEZvcndhcmQgdG8gYmFja2dyb3VuZCB0byBwZXJzaXN0IHZpYSBDRFAgYnJpZGdlICsgc3luYyB0byBJQU1cbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7XG4gICAgICBhY3Rpb246ICdjb25maWcuc2F2ZScsXG4gICAgICBrZXk6ICdicm93c2VyQmFja2VuZCcsXG4gICAgICB2YWx1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgbG9hZEJhY2tlbmRQcmVmZXJlbmNlKCk7XG4gIHJlZnJlc2hCcmlk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
|
|
@@ -1608,7 +1608,8 @@ async function generatePkceChallenge() {
|
|
|
1608
1608
|
function generateState() {
|
|
1609
1609
|
return generateRandomString(32);
|
|
1610
1610
|
}
|
|
1611
|
-
var
|
|
1611
|
+
var IAM_LOGIN = "https://hanzo.id";
|
|
1612
|
+
var IAM_API = "https://iam.hanzo.ai";
|
|
1612
1613
|
var CLIENT_ID = "app-hanzo";
|
|
1613
1614
|
var SCOPES = "openid profile email";
|
|
1614
1615
|
function getRedirectUri() {
|
|
@@ -1650,7 +1651,7 @@ async function login() {
|
|
|
1650
1651
|
const { codeVerifier, codeChallenge } = await generatePkceChallenge();
|
|
1651
1652
|
const state = generateState();
|
|
1652
1653
|
const redirectUri = getRedirectUri();
|
|
1653
|
-
const authorizeUrl = new URL(`${
|
|
1654
|
+
const authorizeUrl = new URL(`${IAM_LOGIN}/login/oauth/authorize`);
|
|
1654
1655
|
authorizeUrl.searchParams.set("client_id", CLIENT_ID);
|
|
1655
1656
|
authorizeUrl.searchParams.set("response_type", "code");
|
|
1656
1657
|
authorizeUrl.searchParams.set("redirect_uri", redirectUri);
|
|
@@ -1663,28 +1664,39 @@ async function login() {
|
|
|
1663
1664
|
const returnedState = url.searchParams.get("state");
|
|
1664
1665
|
if (returnedState !== state) throw new Error("State mismatch \u2014 possible CSRF");
|
|
1665
1666
|
const code = url.searchParams.get("code");
|
|
1666
|
-
|
|
1667
|
-
|
|
1667
|
+
const directToken = url.searchParams.get("access_token");
|
|
1668
|
+
if (directToken) {
|
|
1669
|
+
const tokens = {
|
|
1670
|
+
access_token: directToken,
|
|
1671
|
+
refresh_token: url.searchParams.get("refresh_token") || void 0,
|
|
1672
|
+
token_type: "Bearer"
|
|
1673
|
+
};
|
|
1674
|
+
await storeTokens(tokens);
|
|
1675
|
+
} else if (code) {
|
|
1676
|
+
const tokenResponse = await fetch(`${IAM_API}/api/login/oauth/access_token`, {
|
|
1677
|
+
method: "POST",
|
|
1678
|
+
headers: { "Content-Type": "application/json" },
|
|
1679
|
+
body: JSON.stringify({
|
|
1680
|
+
grant_type: "authorization_code",
|
|
1681
|
+
client_id: CLIENT_ID,
|
|
1682
|
+
code,
|
|
1683
|
+
redirect_uri: redirectUri,
|
|
1684
|
+
code_verifier: codeVerifier
|
|
1685
|
+
})
|
|
1686
|
+
});
|
|
1687
|
+
if (!tokenResponse.ok) {
|
|
1688
|
+
const errText = await tokenResponse.text();
|
|
1689
|
+
throw new Error(`Token exchange failed: ${errText}`);
|
|
1690
|
+
}
|
|
1691
|
+
const tokens = await tokenResponse.json();
|
|
1692
|
+
await storeTokens(tokens);
|
|
1693
|
+
} else {
|
|
1694
|
+
const error = url.searchParams.get("error_description") || url.searchParams.get("error") || "No authorization code or token";
|
|
1668
1695
|
throw new Error(error);
|
|
1669
1696
|
}
|
|
1670
|
-
const
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
body: new URLSearchParams({
|
|
1674
|
-
grant_type: "authorization_code",
|
|
1675
|
-
client_id: CLIENT_ID,
|
|
1676
|
-
code,
|
|
1677
|
-
redirect_uri: redirectUri,
|
|
1678
|
-
code_verifier: codeVerifier
|
|
1679
|
-
})
|
|
1680
|
-
});
|
|
1681
|
-
if (!tokenResponse.ok) {
|
|
1682
|
-
const errText = await tokenResponse.text();
|
|
1683
|
-
throw new Error(`Token exchange failed: ${errText}`);
|
|
1684
|
-
}
|
|
1685
|
-
const tokens = await tokenResponse.json();
|
|
1686
|
-
await storeTokens(tokens);
|
|
1687
|
-
const user = await fetchUserInfo(tokens.access_token);
|
|
1697
|
+
const { accessToken } = await getStoredTokens();
|
|
1698
|
+
if (!accessToken) throw new Error("Login succeeded but no token was stored");
|
|
1699
|
+
const user = await fetchUserInfo(accessToken);
|
|
1688
1700
|
await chrome.storage.local.set({ [STORAGE_KEYS.user]: user });
|
|
1689
1701
|
return user;
|
|
1690
1702
|
}
|
|
@@ -1749,10 +1761,10 @@ async function getValidAccessToken() {
|
|
|
1749
1761
|
return accessToken;
|
|
1750
1762
|
}
|
|
1751
1763
|
async function refreshAccessToken(refreshToken) {
|
|
1752
|
-
const response = await fetch(`${
|
|
1764
|
+
const response = await fetch(`${IAM_API}/api/login/oauth/access_token`, {
|
|
1753
1765
|
method: "POST",
|
|
1754
|
-
headers: { "Content-Type": "application/
|
|
1755
|
-
body:
|
|
1766
|
+
headers: { "Content-Type": "application/json" },
|
|
1767
|
+
body: JSON.stringify({
|
|
1756
1768
|
grant_type: "refresh_token",
|
|
1757
1769
|
client_id: CLIENT_ID,
|
|
1758
1770
|
refresh_token: refreshToken
|
|
@@ -1764,7 +1776,7 @@ async function refreshAccessToken(refreshToken) {
|
|
|
1764
1776
|
return tokens.access_token;
|
|
1765
1777
|
}
|
|
1766
1778
|
async function fetchUserInfo(accessToken) {
|
|
1767
|
-
const response = await fetch(`${
|
|
1779
|
+
const response = await fetch(`${IAM_API}/api/userinfo`, {
|
|
1768
1780
|
headers: { Authorization: `Bearer ${accessToken}` }
|
|
1769
1781
|
});
|
|
1770
1782
|
if (!response.ok) throw new Error("Failed to fetch user info");
|
|
@@ -2614,23 +2626,6 @@ async function handleMessage(request, sender, sendResponse) {
|
|
|
2614
2626
|
case "config.save": {
|
|
2615
2627
|
const { key, value } = request;
|
|
2616
2628
|
cdpBridge.sendConfig(key, value);
|
|
2617
|
-
try {
|
|
2618
|
-
const token = await getValidAccessToken();
|
|
2619
|
-
if (token) {
|
|
2620
|
-
fetch("https://hanzo.id/api/update-user", {
|
|
2621
|
-
method: "POST",
|
|
2622
|
-
headers: {
|
|
2623
|
-
"Content-Type": "application/json",
|
|
2624
|
-
Authorization: `Bearer ${token}`
|
|
2625
|
-
},
|
|
2626
|
-
body: JSON.stringify({
|
|
2627
|
-
properties: { [key]: value }
|
|
2628
|
-
})
|
|
2629
|
-
}).catch(() => {
|
|
2630
|
-
});
|
|
2631
|
-
}
|
|
2632
|
-
} catch {
|
|
2633
|
-
}
|
|
2634
2629
|
sendResponse({ success: true });
|
|
2635
2630
|
break;
|
|
2636
2631
|
}
|
|
@@ -46,16 +46,27 @@
|
|
|
46
46
|
loginBtn.textContent = "Signing in...";
|
|
47
47
|
chrome.runtime.sendMessage({ action: "auth.login" }, (response) => {
|
|
48
48
|
loginBtn.disabled = false;
|
|
49
|
-
loginBtn.
|
|
49
|
+
loginBtn.textContent = "Sign in with Hanzo";
|
|
50
50
|
if (response == null ? void 0 : response.success) {
|
|
51
51
|
checkAuth();
|
|
52
|
+
} else {
|
|
53
|
+
const msg = (response == null ? void 0 : response.error) || "Unable to sign in. Please try again.";
|
|
54
|
+
loginBtn.textContent = msg;
|
|
55
|
+
setTimeout(() => {
|
|
56
|
+
loginBtn.textContent = "Sign in with Hanzo";
|
|
57
|
+
}, 3e3);
|
|
52
58
|
}
|
|
53
59
|
});
|
|
54
60
|
});
|
|
55
61
|
logoutBtn == null ? void 0 : logoutBtn.addEventListener("click", () => {
|
|
56
62
|
chrome.runtime.sendMessage({ action: "auth.logout" }, () => {
|
|
57
|
-
mainSection.classList.add("hidden");
|
|
58
63
|
loginSection.classList.remove("hidden");
|
|
64
|
+
const avatar = document.getElementById("user-avatar");
|
|
65
|
+
const name = document.getElementById("user-name");
|
|
66
|
+
const email = document.getElementById("user-email");
|
|
67
|
+
if (avatar) avatar.src = "";
|
|
68
|
+
if (name) name.textContent = "";
|
|
69
|
+
if (email) email.textContent = "";
|
|
59
70
|
});
|
|
60
71
|
});
|
|
61
72
|
openPanel == null ? void 0 : openPanel.addEventListener("click", () => {
|
|
@@ -159,11 +170,11 @@
|
|
|
159
170
|
}
|
|
160
171
|
}
|
|
161
172
|
});
|
|
162
|
-
chrome.runtime.sendMessage({ action: "
|
|
173
|
+
chrome.runtime.sendMessage({ action: "checkWebGPU" }, (response) => {
|
|
163
174
|
if (chrome.runtime.lastError) return;
|
|
164
|
-
gpuStatus.classList.add((response == null ? void 0 : response.
|
|
165
|
-
gpuStatus.classList.remove((response == null ? void 0 : response.
|
|
166
|
-
gpuDetail.textContent = (response == null ? void 0 : response.
|
|
175
|
+
gpuStatus.classList.add((response == null ? void 0 : response.available) ? "connected" : "disconnected");
|
|
176
|
+
gpuStatus.classList.remove((response == null ? void 0 : response.available) ? "disconnected" : "connected");
|
|
177
|
+
gpuDetail.textContent = (response == null ? void 0 : response.available) ? response.adapter || "Available" : "Not available";
|
|
167
178
|
});
|
|
168
179
|
mcpStatus.classList.add("connected");
|
|
169
180
|
mcpPort.textContent = "Fallback";
|
|
@@ -264,4 +275,4 @@
|
|
|
264
275
|
checkAuth();
|
|
265
276
|
});
|
|
266
277
|
})();
|
|
267
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3BvcHVwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBIYW56byBBSSBcdTIwMTQgUG9wdXAgU2NyaXB0XG4vLyBVc2VzIGJhY2tncm91bmQgbWVzc2FnZSBwYXNzaW5nIGZvciBhdXRoIChub3QgZGlyZWN0IHN0b3JhZ2UgYWNjZXNzKS5cblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgY29uc3QgbG9naW5TZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luLXNlY3Rpb24nKTtcbiAgY29uc3QgbWFpblNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi1zZWN0aW9uJyk7XG4gIGNvbnN0IHNldHRpbmdzU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1zZWN0aW9uJyk7XG5cbiAgLy8gQXV0aFxuICBjb25zdCBsb2dpbkJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbi1idG4nKTtcbiAgY29uc3QgbG9nb3V0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ291dC1idG4nKTtcblxuICAvLyBPcGVuIHBhbmVsXG4gIGNvbnN0IG9wZW5QYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcGVuLXBhbmVsJyk7XG4gIGNvbnN0IG9wZW5QYWdlT3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcGVuLXBhZ2Utb3ZlcmxheScpO1xuXG4gIC8vIFN0YXR1cyBkb3RzXG4gIGNvbnN0IHphcFN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtc3RhdHVzJyk7XG4gIGNvbnN0IHphcERldGFpbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtZGV0YWlsJyk7XG4gIGNvbnN0IG1jcFN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtY3Atc3RhdHVzJyk7XG4gIGNvbnN0IG1jcFBvcnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWNwLXBvcnQnKTtcbiAgY29uc3QgY2RwU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NkcC1zdGF0dXMnKTtcbiAgY29uc3QgY2RwRGV0YWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NkcC1kZXRhaWwnKTtcbiAgY29uc3QgZ3B1U3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dwdS1zdGF0dXMnKTtcbiAgY29uc3QgZ3B1RGV0YWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dwdS1kZXRhaWwnKTtcblxuICAvLyBTZXR0aW5nc1xuICBjb25zdCBvcGVuU2V0dGluZ3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3Blbi1zZXR0aW5ncycpO1xuICBjb25zdCBiYWNrQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2stYnRuJyk7XG4gIGNvbnN0IHNhdmVTZXR0aW5ncyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYXZlLXNldHRpbmdzJyk7XG4gIGNvbnN0IHRlc3RDb25uZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29ubmVjdGlvbicpO1xuXG4gIC8vIC0tLSBBdXRoIHZpYSBiYWNrZ3JvdW5kIC0tLVxuICBmdW5jdGlvbiBjaGVja0F1dGgoKSB7XG4gICAgLy8gQWx3YXlzIHNob3cgbWFpbiBzZWN0aW9uIGFuZCBzdGF0dXMgKHRvb2xzIHdvcmsgd2l0aG91dCBsb2dpbilcbiAgICBtYWluU2VjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICByZWZyZXNoU3RhdHVzKCk7XG5cbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGguc3RhdHVzJyB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHJldHVybjtcbiAgICAgIGlmIChyZXNwb25zZT8uc3VjY2VzcyAmJiByZXNwb25zZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgIGxvZ2luU2VjdGlvbi5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnVzZXIpIHtcbiAgICAgICAgICBjb25zdCBhdmF0YXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlci1hdmF0YXInKTtcbiAgICAgICAgICBjb25zdCBuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItbmFtZScpO1xuICAgICAgICAgIGNvbnN0IGVtYWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItZW1haWwnKTtcbiAgICAgICAgICBhdmF0YXIuc3JjID0gcmVzcG9uc2UudXNlci5waWN0dXJlIHx8IHJlc3BvbnNlLnVzZXIuYXZhdGFyIHx8ICdpY29uNDgucG5nJztcbiAgICAgICAgICBuYW1lLnRleHRDb250ZW50ID0gcmVzcG9uc2UudXNlci5uYW1lIHx8IHJlc3BvbnNlLnVzZXIuZGlzcGxheU5hbWUgfHwgJ0hhbnpvIFVzZXInO1xuICAgICAgICAgIGVtYWlsLnRleHRDb250ZW50ID0gcmVzcG9uc2UudXNlci5lbWFpbCB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9naW5TZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9naW5CdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGxvZ2luQnRuLmRpc2FibGVkID0gdHJ1ZTtcbiAgICBsb2dpbkJ0bi50ZXh0Q29udGVudCA9ICdTaWduaW5nIGluLi4uJztcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGgubG9naW4nIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgbG9naW5CdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIGxvZ2luQnRuLmlubmVySFRNTCA9ICc8c3ZnIGNsYXNzPVwiaWNvblwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPjxwYXRoIGQ9XCJNMTUgM2g0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtNE0xMCAxN2w1LTUtNS01TTE1IDEySDNcIi8+PC9zdmc+IFNpZ24gaW4gd2l0aCBIYW56byc7XG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgY2hlY2tBdXRoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGxvZ291dEJ0bj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdhdXRoLmxvZ291dCcgfSwgKCkgPT4ge1xuICAgICAgbWFpblNlY3Rpb24uY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gICAgICBsb2dpblNlY3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLSBPcGVuIHNpZGUgcGFuZWwgLS0tXG4gIG9wZW5QYW5lbD8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgaWYgKGNocm9tZS5zaWRlUGFuZWwpIHtcbiAgICAgIGNocm9tZS50YWJzLnF1ZXJ5KHsgYWN0aXZlOiB0cnVlLCBjdXJyZW50V2luZG93OiB0cnVlIH0sICh0YWJzKSA9PiB7XG4gICAgICAgIGlmICh0YWJzWzBdPy5pZCkge1xuICAgICAgICAgIGNocm9tZS5zaWRlUGFuZWwub3Blbih7IHRhYklkOiB0YWJzWzBdLmlkIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmlyZWZveDogc2lkZWJhcl9hY3Rpb24gaXMgYXV0b21hdGljXG4gICAgICB3aW5kb3cuY2xvc2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGlzSW5qZWN0YWJsZVRhYih0YWI6IGNocm9tZS50YWJzLlRhYiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGFiIHx8ICF0YWIuaWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB1cmwgPSB0YWIudXJsIHx8ICcnO1xuICAgIGlmICghdXJsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdjaHJvbWU6Ly8nKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnY2hyb21lLWV4dGVuc2lvbjovLycpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdkZXZ0b29sczovLycpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdlZGdlOi8vJykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2Fib3V0OicpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCd2aWV3LXNvdXJjZTonKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnbW96LWV4dGVuc2lvbjovLycpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvcGVuUGFnZU92ZXJsYXk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdPcGVuaW5nLi4uJztcbiAgICBvcGVuUGFnZU92ZXJsYXkuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICd0cnVlJyk7XG5cbiAgICBjaHJvbWUudGFicy5xdWVyeSh7IGFjdGl2ZTogdHJ1ZSwgY3VycmVudFdpbmRvdzogdHJ1ZSB9LCAodGFicykgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGFic1swXTtcbiAgICAgIGxldCB0YXJnZXRUYWIgPSBpc0luamVjdGFibGVUYWIoYWN0aXZlVGFiKSA/IGFjdGl2ZVRhYiA6IG51bGw7XG5cbiAgICAgIGlmICghdGFyZ2V0VGFiKSB7XG4gICAgICAgIGNocm9tZS50YWJzLnF1ZXJ5KHsgY3VycmVudFdpbmRvdzogdHJ1ZSB9LCAoYWxsVGFicykgPT4ge1xuICAgICAgICAgIHRhcmdldFRhYiA9IGFsbFRhYnMuZmluZCgodGFiKSA9PiBpc0luamVjdGFibGVUYWIodGFiKSkgfHwgbnVsbDtcbiAgICAgICAgICBpZiAoIXRhcmdldFRhYj8uaWQpIHtcbiAgICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdObyB2YWxpZCBwYWdlIHRhYic7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1RvZ2dsZSBPbi1QYWdlIE92ZXJsYXknO1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgfSwgMTIwMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdwYWdlLm92ZXJsYXkudG9nZ2xlJywgdGFiSWQ6IHRhcmdldFRhYi5pZCB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IgfHwgIXJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdVbmF2YWlsYWJsZSBvbiB0aGlzIHBhZ2UnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3BlbmVkID0gISFyZXNwb25zZT8ub3BlbjtcbiAgICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gb3BlbmVkID8gJ092ZXJsYXkgT3BlbmVkJyA6ICdPdmVybGF5IEhpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1RvZ2dsZSBPbi1QYWdlIE92ZXJsYXknO1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgfSwgOTAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0YXJnZXRUYWI/LmlkKSB7XG4gICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdObyBBY3RpdmUgVGFiJztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1RvZ2dsZSBPbi1QYWdlIE92ZXJsYXknO1xuICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgIH0sIDEyMDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAncGFnZS5vdmVybGF5LnRvZ2dsZScsIHRhYklkOiB0YXJnZXRUYWIuaWQgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IgfHwgIXJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1VuYXZhaWxhYmxlIG9uIHRoaXMgcGFnZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb3BlbmVkID0gISFyZXNwb25zZT8ub3BlbjtcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSBvcGVuZWQgPyAnT3ZlcmxheSBPcGVuZWQnIDogJ092ZXJsYXkgSGlkZGVuJztcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVG9nZ2xlIE9uLVBhZ2UgT3ZlcmxheSc7XG4gICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgfSwgOTAwKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0gU3RhdHVzIC0tLVxuICBmdW5jdGlvbiByZWZyZXNoU3RhdHVzKCkge1xuICAgIC8vIFpBUCBzdGF0dXNcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ3phcC5zdGF0dXMnIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikgcmV0dXJuO1xuICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IHphcCA9IHJlc3BvbnNlLnphcDtcbiAgICAgICAgaWYgKHphcC5jb25uZWN0ZWQpIHtcbiAgICAgICAgICB6YXBTdGF0dXMuY2xhc3NMaXN0LmFkZCgnY29ubmVjdGVkJyk7XG4gICAgICAgICAgemFwU3RhdHVzLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2Nvbm5lY3RlZCcpO1xuICAgICAgICAgIGNvbnN0IG1jcENvdW50ID0gemFwLm1jcHM/Lmxlbmd0aCB8fCAwO1xuICAgICAgICAgIGNvbnN0IHRvb2xDb3VudCA9IHphcC5tY3BzPy5yZWR1Y2UoKHN1bSwgbSkgPT4gc3VtICsgKG0udG9vbHM/Lmxlbmd0aCB8fCAwKSwgMCkgfHwgMDtcbiAgICAgICAgICB6YXBEZXRhaWwudGV4dENvbnRlbnQgPSBgJHttY3BDb3VudH0gTUNQKHMpLCAke3Rvb2xDb3VudH0gdG9vbHNgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHphcFN0YXR1cy5jbGFzc0xpc3QucmVtb3ZlKCdjb25uZWN0ZWQnKTtcbiAgICAgICAgICB6YXBTdGF0dXMuY2xhc3NMaXN0LmFkZCgnZGlzY29ubmVjdGVkJyk7XG4gICAgICAgICAgemFwRGV0YWlsLnRleHRDb250ZW50ID0gJ05vdCBjb25uZWN0ZWQnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBHUFUgc3RhdHVzXG4gICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdydW5Mb2NhbEFJJywgcHJvbXB0OiAnJyB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHJldHVybjtcbiAgICAgIGdwdVN0YXR1cy5jbGFzc0xpc3QuYWRkKHJlc3BvbnNlPy5zdWNjZXNzID8gJ2Nvbm5lY3RlZCcgOiAnZGlzY29ubmVjdGVkJyk7XG4gICAgICBncHVTdGF0dXMuY2xhc3NMaXN0LnJlbW92ZShyZXNwb25zZT8uc3VjY2VzcyA/ICdkaXNjb25uZWN0ZWQnIDogJ2Nvbm5lY3RlZCcpO1xuICAgICAgZ3B1RGV0YWlsLnRleHRDb250ZW50ID0gcmVzcG9uc2U/LnN1Y2Nlc3MgPyAnQXZhaWxhYmxlJyA6ICdOb3QgYXZhaWxhYmxlJztcbiAgICB9KTtcblxuICAgIC8vIE1DUC9DRFAgXHUyMDE0IHNldCBhcyBhY3RpdmUgZm9yIG5vdyAoY2hlY2tlZCB2aWEgWkFQKVxuICAgIG1jcFN0YXR1cy5jbGFzc0xpc3QuYWRkKCdjb25uZWN0ZWQnKTtcbiAgICBtY3BQb3J0LnRleHRDb250ZW50ID0gJ0ZhbGxiYWNrJztcbiAgICBjZHBTdGF0dXMuY2xhc3NMaXN0LmFkZCgnY29ubmVjdGVkJyk7XG4gICAgY2RwRGV0YWlsLnRleHRDb250ZW50ID0gJ0FjdGl2ZSc7XG4gIH1cblxuICAvLyAtLS0gU2V0dGluZ3MgLS0tXG4gIG9wZW5TZXR0aW5ncz8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgbWFpblNlY3Rpb24uY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gICAgc2V0dGluZ3NTZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgIGxvYWRTZXR0aW5ncygpO1xuICB9KTtcblxuICBiYWNrQnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBzZXR0aW5nc1NlY3Rpb24uY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gICAgbWFpblNlY3Rpb24uY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGxvYWRTZXR0aW5ncygpIHtcbiAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5nZXQoWydtY3BQb3J0JywgJ2NkcFBvcnQnLCAnemFwUG9ydHMnXSwgKHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgbWNwUG9ydElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21jcC1wb3J0LXNldHRpbmcnKTtcbiAgICAgIGNvbnN0IGNkcFBvcnRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZHAtcG9ydC1zZXR0aW5nJyk7XG4gICAgICBjb25zdCB6YXBQb3J0c0lucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3phcC1wb3J0cy1zZXR0aW5nJyk7XG5cbiAgICAgIGlmIChtY3BQb3J0SW5wdXQpIG1jcFBvcnRJbnB1dC52YWx1ZSA9IHJlc3VsdC5tY3BQb3J0IHx8IDMwMDE7XG4gICAgICBpZiAoY2RwUG9ydElucHV0KSBjZHBQb3J0SW5wdXQudmFsdWUgPSByZXN1bHQuY2RwUG9ydCB8fCA5MjIzO1xuICAgICAgaWYgKHphcFBvcnRzSW5wdXQpIHphcFBvcnRzSW5wdXQudmFsdWUgPSAocmVzdWx0LnphcFBvcnRzIHx8IFs5OTk5LCA5OTk4LCA5OTk3LCA5OTk2LCA5OTk1XSkuam9pbignLCcpO1xuICAgIH0pO1xuICB9XG5cbiAgc2F2ZVNldHRpbmdzPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBjb25zdCBtY3BQb3J0VmFsID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21jcC1wb3J0LXNldHRpbmcnKT8udmFsdWUpIHx8IDMwMDE7XG4gICAgY29uc3QgY2RwUG9ydFZhbCA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZHAtcG9ydC1zZXR0aW5nJyk/LnZhbHVlKSB8fCA5MjIzO1xuICAgIGNvbnN0IHphcFBvcnRzVmFsID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtcG9ydHMtc2V0dGluZycpPy52YWx1ZSB8fCAnJylcbiAgICAgIC5zcGxpdCgnLCcpLm1hcChwID0+IHBhcnNlSW50KHAudHJpbSgpKSkuZmlsdGVyKHAgPT4gcCA+IDAgJiYgcCA8IDY1NTM2KTtcblxuICAgIGNocm9tZS5zdG9yYWdlLmxvY2FsLnNldCh7XG4gICAgICBtY3BQb3J0OiBtY3BQb3J0VmFsLFxuICAgICAgY2RwUG9ydDogY2RwUG9ydFZhbCxcbiAgICAgIHphcFBvcnRzOiB6YXBQb3J0c1ZhbC5sZW5ndGggPyB6YXBQb3J0c1ZhbCA6IFs5OTk5LCA5OTk4LCA5OTk3LCA5OTk2LCA5OTk1XSxcbiAgICB9LCAoKSA9PiB7XG4gICAgICBzYXZlU2V0dGluZ3MudGV4dENvbnRlbnQgPSAnU2F2ZWQhJztcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBzYXZlU2V0dGluZ3MudGV4dENvbnRlbnQgPSAnU2F2ZSBTZXR0aW5ncyc7IH0sIDE1MDApO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0gVGVzdCBDb25uZWN0aW9uIC0tLVxuICB0ZXN0Q29ubmVjdGlvbj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgdGVzdENvbm5lY3Rpb24udGV4dENvbnRlbnQgPSAnVGVzdGluZy4uLic7XG4gICAgdGVzdENvbm5lY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICd6YXAuZGlzY292ZXInIH0sICgpID0+IHtcbiAgICAgIHJlZnJlc2hTdGF0dXMoKTtcbiAgICAgIHRlc3RDb25uZWN0aW9uLnRleHRDb250ZW50ID0gJ1Rlc3QgQ29ubmVjdGlvbic7XG4gICAgICB0ZXN0Q29ubmVjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBGZWF0dXJlIHRvZ2dsZXNcbiAgWydzb3VyY2UtbWFwcycsICd3ZWJncHUtYWknLCAnYnJvd3Nlci1jb250cm9sJywgJ3RhYi1maWxlc3lzdGVtJ10uZm9yRWFjaChpZCA9PiB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGNoZWNrYm94KSB7XG4gICAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5nZXQoW2lkXSwgKHJlc3VsdCkgPT4ge1xuICAgICAgICBjaGVja2JveC5jaGVja2VkID0gcmVzdWx0W2lkXSAhPT0gZmFsc2U7IC8vIGRlZmF1bHQgb25cbiAgICAgIH0pO1xuICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5zZXQoeyBbaWRdOiBjaGVja2JveC5jaGVja2VkIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyAtLS0gQnJvd3NlciBCYWNrZW5kIFBpY2tlciAtLS1cbiAgY29uc3QgYmFja2VuZFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdicm93c2VyLWJhY2tlbmQnKSBhcyBIVE1MU2VsZWN0RWxlbWVudCB8IG51bGw7XG4gIGNvbnN0IGJyaWRnZVN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdicmlkZ2Utc3RhdHVzJyk7XG4gIGNvbnN0IGJyaWRnZURldGFpbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdicmlkZ2UtZGV0YWlsJyk7XG5cbiAgZnVuY3Rpb24gbG9hZEJhY2tlbmRQcmVmZXJlbmNlKCkge1xuICAgIGNocm9tZS5zdG9yYWdlLnN5bmMuZ2V0KFsnYnJvd3NlckJhY2tlbmQnXSwgKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKGJhY2tlbmRTZWxlY3QgJiYgcmVzdWx0LmJyb3dzZXJCYWNrZW5kKSB7XG4gICAgICAgIGJhY2tlbmRTZWxlY3QudmFsdWUgPSByZXN1bHQuYnJvd3NlckJhY2tlbmQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWZyZXNoQnJpZGdlU3RhdHVzKCkge1xuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnYnJpZGdlLnN0YXR1cycgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSByZXR1cm47XG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MgJiYgcmVzcG9uc2UuY29ubmVjdGVkKSB7XG4gICAgICAgIGJyaWRnZVN0YXR1cz8uY2xhc3NMaXN0LmFkZCgnY29ubmVjdGVkJyk7XG4gICAgICAgIGJyaWRnZVN0YXR1cz8uY2xhc3NMaXN0LnJlbW92ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJzID0gcmVzcG9uc2UuYnJvd3NlcnMgfHwgW107XG4gICAgICAgIGJyaWRnZURldGFpbC50ZXh0Q29udGVudCA9IGJyb3dzZXJzLmxlbmd0aFxuICAgICAgICAgID8gYENvbm5lY3RlZDogJHticm93c2Vycy5qb2luKCcsICcpfWBcbiAgICAgICAgICA6ICdDb25uZWN0ZWQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJpZGdlU3RhdHVzPy5jbGFzc0xpc3QucmVtb3ZlKCdjb25uZWN0ZWQnKTtcbiAgICAgICAgYnJpZGdlU3RhdHVzPy5jbGFzc0xpc3QuYWRkKCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgICAgYnJpZGdlRGV0YWlsLnRleHRDb250ZW50ID0gJ05vdCBjb25uZWN0ZWQnO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYmFja2VuZFNlbGVjdD8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYmFja2VuZFNlbGVjdC52YWx1ZTtcblxuICAgIC8vIFNhdmUgdG8gY2hyb21lLnN0b3JhZ2Uuc3luYyAoY3Jvc3MtZGV2aWNlKVxuICAgIGNocm9tZS5zdG9yYWdlLnN5bmMuc2V0KHsgYnJvd3NlckJhY2tlbmQ6IHZhbHVlIH0pO1xuXG4gICAgLy8gRm9yd2FyZCB0byBiYWNrZ3JvdW5kIHRvIHBlcnNpc3QgdmlhIENEUCBicmlkZ2UgKyBzeW5jIHRvIElBTVxuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICAgIGFjdGlvbjogJ2NvbmZpZy5zYXZlJyxcbiAgICAgIGtleTogJ2Jyb3dzZXJCYWNrZW5kJyxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9KTtcblxuICBsb2FkQmFja2VuZFByZWZlcmVuY2UoKTtcbiAgcmVmcmVzaEJyaWRnZVN0YXR1cygpO1xuXG4gIC8vIEluaXRcbiAgY2hlY2tBdXRoKCk7XG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7OztBQUdBLFdBQVMsaUJBQWlCLG9CQUFvQixNQUFNO0FBQ2xELFVBQU0sZUFBZSxTQUFTLGVBQWUsZUFBZTtBQUM1RCxVQUFNLGNBQWMsU0FBUyxlQUFlLGNBQWM7QUFDMUQsVUFBTSxrQkFBa0IsU0FBUyxlQUFlLGtCQUFrQjtBQUdsRSxVQUFNLFdBQVcsU0FBUyxlQUFlLFdBQVc7QUFDcEQsVUFBTSxZQUFZLFNBQVMsZUFBZSxZQUFZO0FBR3RELFVBQU0sWUFBWSxTQUFTLGVBQWUsWUFBWTtBQUN0RCxVQUFNLGtCQUFrQixTQUFTLGVBQWUsbUJBQW1CO0FBR25FLFVBQU0sWUFBWSxTQUFTLGVBQWUsWUFBWTtBQUN0RCxVQUFNLFlBQVksU0FBUyxlQUFlLFlBQVk7QUFDdEQsVUFBTSxZQUFZLFNBQVMsZUFBZSxZ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QUUsR0FBRyxDQUFDLFdBQVc7QUFDekMsbUJBQVMsVUFBVSxPQUFPLEVBQUUsTUFBTTtBQUFBLFFBQ3BDLENBQUM7QUFDRCxpQkFBUyxpQkFBaUIsVUFBVSxNQUFNO0FBQ3hDLGlCQUFPLFFBQVEsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsU0FBUyxRQUFRLENBQUM7QUFBQSxRQUNyRCxDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0YsQ0FBQztBQUdELFVBQU0sZ0JBQWdCLFNBQVMsZUFBZSxpQkFBaUI7QUFDL0QsVUFBTSxlQUFlLFNBQVMsZUFBZSxlQUFlO0FBQzVELFVBQU0sZUFBZSxTQUFTLGVBQWUsZUFBZTtBQUU1RCxhQUFTLHdCQUF3QjtBQUMvQixhQUFPLFFBQVEsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxXQUFXO0FBQ3RELFlBQUksaUJBQWlCLE9BQU8sZ0JBQWdCO0FBQzFDLHdCQUFjLFFBQVEsT0FBTztBQUFBLFFBQy9CO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsc0JBQXNCO0FBQzdCLGFBQU8sUUFBUSxZQUFZLEVBQUUsUUFBUSxnQkFBZ0IsR0FBRyxDQUFDLGFBQWE7QUFDcEUsWUFBSSxPQUFPLFFBQVEsVUFBVztBQUM5QixhQUFJLHFDQUFVLFlBQVcsU0FBUyxXQUFXO0FBQzNDLHVEQUFjLFVBQVUsSUFBSTtBQUM1Qix1REFBYyxVQUFVLE9BQU87QUFDL0IsZ0JBQU0sV0FBVyxTQUFTLFlBQVksQ0FBQztBQUN2Qyx1QkFBYSxjQUFjLFNBQVMsU0FDaEMsY0FBYyxTQUFTLEtBQUssSUFBSSxDQUFDLEtBQ2pDO0FBQUEsUUFDTixPQUFPO0FBQ0wsdURBQWMsVUFBVSxPQUFPO0FBQy9CLHVEQUFjLFVBQVUsSUFBSTtBQUM1Qix1QkFBYSxjQUFjO0FBQUEsUUFDN0I7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsbURBQWUsaUJBQWlCLFVBQVUsTUFBTTtBQUM5QyxZQUFNLFFBQVEsY0FBYztBQUc1QixhQUFPLFFBQVEsS0FBSyxJQUFJLEVBQUUsZ0JBQWdCLE1BQU0sQ0FBQztBQUdqRCxhQUFPLFFBQVEsWUFBWTtBQUFBLFFBQ3pCLFFBQVE7QUFBQSxRQUNSLEtBQUs7QUFBQSxRQUNMO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUVBLDBCQUFzQjtBQUN0Qix3QkFBb0I7QUFHcEIsY0FBVTtBQUFBLEVBQ1osQ0FBQzsiLAogICJuYW1lcyI6IFsiX2EiXQp9Cg==
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3BvcHVwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBIYW56byBBSSBcdTIwMTQgUG9wdXAgU2NyaXB0XG4vLyBVc2VzIGJhY2tncm91bmQgbWVzc2FnZSBwYXNzaW5nIGZvciBhdXRoIChub3QgZGlyZWN0IHN0b3JhZ2UgYWNjZXNzKS5cblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgY29uc3QgbG9naW5TZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luLXNlY3Rpb24nKTtcbiAgY29uc3QgbWFpblNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi1zZWN0aW9uJyk7XG4gIGNvbnN0IHNldHRpbmdzU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXR0aW5ncy1zZWN0aW9uJyk7XG5cbiAgLy8gQXV0aFxuICBjb25zdCBsb2dpbkJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbi1idG4nKTtcbiAgY29uc3QgbG9nb3V0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ291dC1idG4nKTtcblxuICAvLyBPcGVuIHBhbmVsXG4gIGNvbnN0IG9wZW5QYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcGVuLXBhbmVsJyk7XG4gIGNvbnN0IG9wZW5QYWdlT3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcGVuLXBhZ2Utb3ZlcmxheScpO1xuXG4gIC8vIFN0YXR1cyBkb3RzXG4gIGNvbnN0IHphcFN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtc3RhdHVzJyk7XG4gIGNvbnN0IHphcERldGFpbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtZGV0YWlsJyk7XG4gIGNvbnN0IG1jcFN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtY3Atc3RhdHVzJyk7XG4gIGNvbnN0IG1jcFBvcnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWNwLXBvcnQnKTtcbiAgY29uc3QgY2RwU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NkcC1zdGF0dXMnKTtcbiAgY29uc3QgY2RwRGV0YWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NkcC1kZXRhaWwnKTtcbiAgY29uc3QgZ3B1U3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dwdS1zdGF0dXMnKTtcbiAgY29uc3QgZ3B1RGV0YWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dwdS1kZXRhaWwnKTtcblxuICAvLyBTZXR0aW5nc1xuICBjb25zdCBvcGVuU2V0dGluZ3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3Blbi1zZXR0aW5ncycpO1xuICBjb25zdCBiYWNrQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2stYnRuJyk7XG4gIGNvbnN0IHNhdmVTZXR0aW5ncyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYXZlLXNldHRpbmdzJyk7XG4gIGNvbnN0IHRlc3RDb25uZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QtY29ubmVjdGlvbicpO1xuXG4gIC8vIC0tLSBBdXRoIHZpYSBiYWNrZ3JvdW5kIC0tLVxuICBmdW5jdGlvbiBjaGVja0F1dGgoKSB7XG4gICAgLy8gQWx3YXlzIHNob3cgbWFpbiBzZWN0aW9uIGFuZCBzdGF0dXMgKHRvb2xzIHdvcmsgd2l0aG91dCBsb2dpbilcbiAgICBtYWluU2VjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICByZWZyZXNoU3RhdHVzKCk7XG5cbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGguc3RhdHVzJyB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHJldHVybjtcbiAgICAgIGlmIChyZXNwb25zZT8uc3VjY2VzcyAmJiByZXNwb25zZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgIGxvZ2luU2VjdGlvbi5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnVzZXIpIHtcbiAgICAgICAgICBjb25zdCBhdmF0YXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlci1hdmF0YXInKTtcbiAgICAgICAgICBjb25zdCBuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItbmFtZScpO1xuICAgICAgICAgIGNvbnN0IGVtYWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItZW1haWwnKTtcbiAgICAgICAgICBhdmF0YXIuc3JjID0gcmVzcG9uc2UudXNlci5waWN0dXJlIHx8IHJlc3BvbnNlLnVzZXIuYXZhdGFyIHx8ICdpY29uNDgucG5nJztcbiAgICAgICAgICBuYW1lLnRleHRDb250ZW50ID0gcmVzcG9uc2UudXNlci5uYW1lIHx8IHJlc3BvbnNlLnVzZXIuZGlzcGxheU5hbWUgfHwgJ0hhbnpvIFVzZXInO1xuICAgICAgICAgIGVtYWlsLnRleHRDb250ZW50ID0gcmVzcG9uc2UudXNlci5lbWFpbCB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9naW5TZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9naW5CdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIGxvZ2luQnRuLmRpc2FibGVkID0gdHJ1ZTtcbiAgICBsb2dpbkJ0bi50ZXh0Q29udGVudCA9ICdTaWduaW5nIGluLi4uJztcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGgubG9naW4nIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgbG9naW5CdG4uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIGxvZ2luQnRuLnRleHRDb250ZW50ID0gJ1NpZ24gaW4gd2l0aCBIYW56byc7XG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgY2hlY2tBdXRoKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtc2cgPSByZXNwb25zZT8uZXJyb3IgfHwgJ1VuYWJsZSB0byBzaWduIGluLiBQbGVhc2UgdHJ5IGFnYWluLic7XG4gICAgICAgIGxvZ2luQnRuLnRleHRDb250ZW50ID0gbXNnO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbG9naW5CdG4udGV4dENvbnRlbnQgPSAnU2lnbiBpbiB3aXRoIEhhbnpvJzsgfSwgMzAwMCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGxvZ291dEJ0bj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdhdXRoLmxvZ291dCcgfSwgKCkgPT4ge1xuICAgICAgbG9naW5TZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgLy8gS2VlcCBtYWluIHNlY3Rpb24gdmlzaWJsZSBcdTIwMTQgdG9vbHMgd29yayB3aXRob3V0IGF1dGhcbiAgICAgIGNvbnN0IGF2YXRhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyLWF2YXRhcicpIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgICBjb25zdCBuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItbmFtZScpO1xuICAgICAgY29uc3QgZW1haWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlci1lbWFpbCcpO1xuICAgICAgaWYgKGF2YXRhcikgYXZhdGFyLnNyYyA9ICcnO1xuICAgICAgaWYgKG5hbWUpIG5hbWUudGV4dENvbnRlbnQgPSAnJztcbiAgICAgIGlmIChlbWFpbCkgZW1haWwudGV4dENvbnRlbnQgPSAnJztcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tIE9wZW4gc2lkZSBwYW5lbCAtLS1cbiAgb3BlblBhbmVsPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICBpZiAoY2hyb21lLnNpZGVQYW5lbCkge1xuICAgICAgY2hyb21lLnRhYnMucXVlcnkoeyBhY3RpdmU6IHRydWUsIGN1cnJlbnRXaW5kb3c6IHRydWUgfSwgKHRhYnMpID0+IHtcbiAgICAgICAgaWYgKHRhYnNbMF0/LmlkKSB7XG4gICAgICAgICAgY2hyb21lLnNpZGVQYW5lbC5vcGVuKHsgdGFiSWQ6IHRhYnNbMF0uaWQgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGaXJlZm94OiBzaWRlYmFyX2FjdGlvbiBpcyBhdXRvbWF0aWNcbiAgICAgIHdpbmRvdy5jbG9zZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gaXNJbmplY3RhYmxlVGFiKHRhYjogY2hyb21lLnRhYnMuVGFiIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0YWIgfHwgIXRhYi5pZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHVybCA9IHRhYi51cmwgfHwgJyc7XG4gICAgaWYgKCF1cmwpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2Nocm9tZTovLycpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdjaHJvbWUtZXh0ZW5zaW9uOi8vJykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2RldnRvb2xzOi8vJykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2VkZ2U6Ly8nKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnYWJvdXQ6JykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ3ZpZXctc291cmNlOicpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdtb3otZXh0ZW5zaW9uOi8vJykpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG9wZW5QYWdlT3ZlcmxheT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ09wZW5pbmcuLi4nO1xuICAgIG9wZW5QYWdlT3ZlcmxheS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcblxuICAgIGNocm9tZS50YWJzLnF1ZXJ5KHsgYWN0aXZlOiB0cnVlLCBjdXJyZW50V2luZG93OiB0cnVlIH0sICh0YWJzKSA9PiB7XG4gICAgICBjb25zdCBhY3RpdmVUYWIgPSB0YWJzWzBdO1xuICAgICAgbGV0IHRhcmdldFRhYiA9IGlzSW5qZWN0YWJsZVRhYihhY3RpdmVUYWIpID8gYWN0aXZlVGFiIDogbnVsbDtcblxuICAgICAgaWYgKCF0YXJnZXRUYWIpIHtcbiAgICAgICAgY2hyb21lLnRhYnMucXVlcnkoeyBjdXJyZW50V2luZG93OiB0cnVlIH0sIChhbGxUYWJzKSA9PiB7XG4gICAgICAgICAgdGFyZ2V0VGFiID0gYWxsVGFicy5maW5kKCh0YWIpID0+IGlzSW5qZWN0YWJsZVRhYih0YWIpKSB8fCBudWxsO1xuICAgICAgICAgIGlmICghdGFyZ2V0VGFiPy5pZCkge1xuICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ05vIHZhbGlkIHBhZ2UgdGFiJztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVG9nZ2xlIE9uLVBhZ2UgT3ZlcmxheSc7XG4gICAgICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICB9LCAxMjAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ3BhZ2Uub3ZlcmxheS50b2dnbGUnLCB0YWJJZDogdGFyZ2V0VGFiLmlkIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvciB8fCAhcmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ1VuYXZhaWxhYmxlIG9uIHRoaXMgcGFnZSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBvcGVuZWQgPSAhIXJlc3BvbnNlPy5vcGVuO1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSBvcGVuZWQgPyAnT3ZlcmxheSBPcGVuZWQnIDogJ092ZXJsYXkgSGlkZGVuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVG9nZ2xlIE9uLVBhZ2UgT3ZlcmxheSc7XG4gICAgICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICB9LCA5MDApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRhcmdldFRhYj8uaWQpIHtcbiAgICAgICAgb3BlblBhZ2VPdmVybGF5LnRleHRDb250ZW50ID0gJ05vIEFjdGl2ZSBUYWInO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVG9nZ2xlIE9uLVBhZ2UgT3ZlcmxheSc7XG4gICAgICAgICAgb3BlblBhZ2VPdmVybGF5LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgfSwgMTIwMCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdwYWdlLm92ZXJsYXkudG9nZ2xlJywgdGFiSWQ6IHRhcmdldFRhYi5pZCB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvciB8fCAhcmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkudGV4dENvbnRlbnQgPSAnVW5hdmFpbGFibGUgb24gdGhpcyBwYWdlJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBvcGVuZWQgPSAhIXJlc3BvbnNlPy5vcGVuO1xuICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9IG9wZW5lZCA/ICdPdmVybGF5IE9wZW5lZCcgOiAnT3ZlcmxheSBIaWRkZW4nO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9wZW5QYWdlT3ZlcmxheS50ZXh0Q29udGVudCA9ICdUb2dnbGUgT24tUGFnZSBPdmVybGF5JztcbiAgICAgICAgICBvcGVuUGFnZU92ZXJsYXkucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICB9LCA5MDApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLSBTdGF0dXMgLS0tXG4gIGZ1bmN0aW9uIHJlZnJlc2hTdGF0dXMoKSB7XG4gICAgLy8gWkFQIHN0YXR1c1xuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnemFwLnN0YXR1cycgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSByZXR1cm47XG4gICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgemFwID0gcmVzcG9uc2UuemFwO1xuICAgICAgICBpZiAoemFwLmNvbm5lY3RlZCkge1xuICAgICAgICAgIHphcFN0YXR1cy5jbGFzc0xpc3QuYWRkKCdjb25uZWN0ZWQnKTtcbiAgICAgICAgICB6YXBTdGF0dXMuY2xhc3NMaXN0LnJlbW92ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgICAgICAgY29uc3QgbWNwQ291bnQgPSB6YXAubWNwcz8ubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgY29uc3QgdG9vbENvdW50ID0gemFwLm1jcHM/LnJlZHVjZSgoc3VtLCBtKSA9PiBzdW0gKyAobS50b29scz8ubGVuZ3RoIHx8IDApLCAwKSB8fCAwO1xuICAgICAgICAgIHphcERldGFpbC50ZXh0Q29udGVudCA9IGAke21jcENvdW50fSBNQ1AocyksICR7dG9vbENvdW50fSB0b29sc2A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgemFwU3RhdHVzLmNsYXNzTGlzdC5yZW1vdmUoJ2Nvbm5lY3RlZCcpO1xuICAgICAgICAgIHphcFN0YXR1cy5jbGFzc0xpc3QuYWRkKCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgICAgICB6YXBEZXRhaWwudGV4dENvbnRlbnQgPSAnTm90IGNvbm5lY3RlZCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEdQVSBzdGF0dXNcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2NoZWNrV2ViR1BVJyB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHJldHVybjtcbiAgICAgIGdwdVN0YXR1cy5jbGFzc0xpc3QuYWRkKHJlc3BvbnNlPy5hdmFpbGFibGUgPyAnY29ubmVjdGVkJyA6ICdkaXNjb25uZWN0ZWQnKTtcbiAgICAgIGdwdVN0YXR1cy5jbGFzc0xpc3QucmVtb3ZlKHJlc3BvbnNlPy5hdmFpbGFibGUgPyAnZGlzY29ubmVjdGVkJyA6ICdjb25uZWN0ZWQnKTtcbiAgICAgIGdwdURldGFpbC50ZXh0Q29udGVudCA9IHJlc3BvbnNlPy5hdmFpbGFibGUgPyAocmVzcG9uc2UuYWRhcHRlciB8fCAnQXZhaWxhYmxlJykgOiAnTm90IGF2YWlsYWJsZSc7XG4gICAgfSk7XG5cbiAgICAvLyBNQ1AvQ0RQIFx1MjAxNCBzZXQgYXMgYWN0aXZlIGZvciBub3cgKGNoZWNrZWQgdmlhIFpBUClcbiAgICBtY3BTdGF0dXMuY2xhc3NMaXN0LmFkZCgnY29ubmVjdGVkJyk7XG4gICAgbWNwUG9ydC50ZXh0Q29udGVudCA9ICdGYWxsYmFjayc7XG4gICAgY2RwU3RhdHVzLmNsYXNzTGlzdC5hZGQoJ2Nvbm5lY3RlZCcpO1xuICAgIGNkcERldGFpbC50ZXh0Q29udGVudCA9ICdBY3RpdmUnO1xuICB9XG5cbiAgLy8gLS0tIFNldHRpbmdzIC0tLVxuICBvcGVuU2V0dGluZ3M/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIG1haW5TZWN0aW9uLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgIHNldHRpbmdzU2VjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICBsb2FkU2V0dGluZ3MoKTtcbiAgfSk7XG5cbiAgYmFja0J0bj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgc2V0dGluZ3NTZWN0aW9uLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgIG1haW5TZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICB9KTtcblxuICBmdW5jdGlvbiBsb2FkU2V0dGluZ3MoKSB7XG4gICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuZ2V0KFsnbWNwUG9ydCcsICdjZHBQb3J0JywgJ3phcFBvcnRzJ10sIChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IG1jcFBvcnRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtY3AtcG9ydC1zZXR0aW5nJyk7XG4gICAgICBjb25zdCBjZHBQb3J0SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2RwLXBvcnQtc2V0dGluZycpO1xuICAgICAgY29uc3QgemFwUG9ydHNJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtcG9ydHMtc2V0dGluZycpO1xuXG4gICAgICBpZiAobWNwUG9ydElucHV0KSBtY3BQb3J0SW5wdXQudmFsdWUgPSByZXN1bHQubWNwUG9ydCB8fCAzMDAxO1xuICAgICAgaWYgKGNkcFBvcnRJbnB1dCkgY2RwUG9ydElucHV0LnZhbHVlID0gcmVzdWx0LmNkcFBvcnQgfHwgOTIyMztcbiAgICAgIGlmICh6YXBQb3J0c0lucHV0KSB6YXBQb3J0c0lucHV0LnZhbHVlID0gKHJlc3VsdC56YXBQb3J0cyB8fCBbOTk5OSwgOTk5OCwgOTk5NywgOTk5NiwgOTk5NV0pLmpvaW4oJywnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNhdmVTZXR0aW5ncz8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgY29uc3QgbWNwUG9ydFZhbCA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtY3AtcG9ydC1zZXR0aW5nJyk/LnZhbHVlKSB8fCAzMDAxO1xuICAgIGNvbnN0IGNkcFBvcnRWYWwgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2RwLXBvcnQtc2V0dGluZycpPy52YWx1ZSkgfHwgOTIyMztcbiAgICBjb25zdCB6YXBQb3J0c1ZhbCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnemFwLXBvcnRzLXNldHRpbmcnKT8udmFsdWUgfHwgJycpXG4gICAgICAuc3BsaXQoJywnKS5tYXAocCA9PiBwYXJzZUludChwLnRyaW0oKSkpLmZpbHRlcihwID0+IHAgPiAwICYmIHAgPCA2NTUzNik7XG5cbiAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5zZXQoe1xuICAgICAgbWNwUG9ydDogbWNwUG9ydFZhbCxcbiAgICAgIGNkcFBvcnQ6IGNkcFBvcnRWYWwsXG4gICAgICB6YXBQb3J0czogemFwUG9ydHNWYWwubGVuZ3RoID8gemFwUG9ydHNWYWwgOiBbOTk5OSwgOTk5OCwgOTk5NywgOTk5NiwgOTk5NV0sXG4gICAgfSwgKCkgPT4ge1xuICAgICAgc2F2ZVNldHRpbmdzLnRleHRDb250ZW50ID0gJ1NhdmVkISc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgc2F2ZVNldHRpbmdzLnRleHRDb250ZW50ID0gJ1NhdmUgU2V0dGluZ3MnOyB9LCAxNTAwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tIFRlc3QgQ29ubmVjdGlvbiAtLS1cbiAgdGVzdENvbm5lY3Rpb24/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIHRlc3RDb25uZWN0aW9uLnRleHRDb250ZW50ID0gJ1Rlc3RpbmcuLi4nO1xuICAgIHRlc3RDb25uZWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcblxuICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnemFwLmRpc2NvdmVyJyB9LCAoKSA9PiB7XG4gICAgICByZWZyZXNoU3RhdHVzKCk7XG4gICAgICB0ZXN0Q29ubmVjdGlvbi50ZXh0Q29udGVudCA9ICdUZXN0IENvbm5lY3Rpb24nO1xuICAgICAgdGVzdENvbm5lY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gRmVhdHVyZSB0b2dnbGVzXG4gIFsnc291cmNlLW1hcHMnLCAnd2ViZ3B1LWFpJywgJ2Jyb3dzZXItY29udHJvbCcsICd0YWItZmlsZXN5c3RlbSddLmZvckVhY2goaWQgPT4ge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChjaGVja2JveCkge1xuICAgICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuZ2V0KFtpZF0sIChyZXN1bHQpID0+IHtcbiAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHJlc3VsdFtpZF0gIT09IGZhbHNlOyAvLyBkZWZhdWx0IG9uXG4gICAgICB9KTtcbiAgICAgIGNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuc2V0KHsgW2lkXTogY2hlY2tib3guY2hlY2tlZCB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gLS0tIEJyb3dzZXIgQmFja2VuZCBQaWNrZXIgLS0tXG4gIGNvbnN0IGJhY2tlbmRTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnJvd3Nlci1iYWNrZW5kJykgYXMgSFRNTFNlbGVjdEVsZW1lbnQgfCBudWxsO1xuICBjb25zdCBicmlkZ2VTdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnJpZGdlLXN0YXR1cycpO1xuICBjb25zdCBicmlkZ2VEZXRhaWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnJpZGdlLWRldGFpbCcpO1xuXG4gIGZ1bmN0aW9uIGxvYWRCYWNrZW5kUHJlZmVyZW5jZSgpIHtcbiAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLmdldChbJ2Jyb3dzZXJCYWNrZW5kJ10sIChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChiYWNrZW5kU2VsZWN0ICYmIHJlc3VsdC5icm93c2VyQmFja2VuZCkge1xuICAgICAgICBiYWNrZW5kU2VsZWN0LnZhbHVlID0gcmVzdWx0LmJyb3dzZXJCYWNrZW5kO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVmcmVzaEJyaWRnZVN0YXR1cygpIHtcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2JyaWRnZS5zdGF0dXMnIH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikgcmV0dXJuO1xuICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzICYmIHJlc3BvbnNlLmNvbm5lY3RlZCkge1xuICAgICAgICBicmlkZ2VTdGF0dXM/LmNsYXNzTGlzdC5hZGQoJ2Nvbm5lY3RlZCcpO1xuICAgICAgICBicmlkZ2VTdGF0dXM/LmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2Nvbm5lY3RlZCcpO1xuICAgICAgICBjb25zdCBicm93c2VycyA9IHJlc3BvbnNlLmJyb3dzZXJzIHx8IFtdO1xuICAgICAgICBicmlkZ2VEZXRhaWwudGV4dENvbnRlbnQgPSBicm93c2Vycy5sZW5ndGhcbiAgICAgICAgICA/IGBDb25uZWN0ZWQ6ICR7YnJvd3NlcnMuam9pbignLCAnKX1gXG4gICAgICAgICAgOiAnQ29ubmVjdGVkJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyaWRnZVN0YXR1cz8uY2xhc3NMaXN0LnJlbW92ZSgnY29ubmVjdGVkJyk7XG4gICAgICAgIGJyaWRnZVN0YXR1cz8uY2xhc3NMaXN0LmFkZCgnZGlzY29ubmVjdGVkJyk7XG4gICAgICAgIGJyaWRnZURldGFpbC50ZXh0Q29udGVudCA9ICdOb3QgY29ubmVjdGVkJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGJhY2tlbmRTZWxlY3Q/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGJhY2tlbmRTZWxlY3QudmFsdWU7XG5cbiAgICAvLyBTYXZlIHRvIGNocm9tZS5zdG9yYWdlLnN5bmMgKGNyb3NzLWRldmljZSlcbiAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLnNldCh7IGJyb3dzZXJCYWNrZW5kOiB2YWx1ZSB9KTtcblxuICAgIC8vIEZvcndhcmQgdG8gYmFja2dyb3VuZCB0byBwZXJzaXN0IHZpYSBDRFAgYnJpZGdlICsgc3luYyB0byBJQU1cbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7XG4gICAgICBhY3Rpb246ICdjb25maWcuc2F2ZScsXG4gICAgICBrZXk6ICdicm93c2VyQmFja2VuZCcsXG4gICAgICB2YWx1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgbG9hZEJhY2tlbmRQcmVmZXJlbmNlKCk7XG4gIHJlZnJlc2hCcmlk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
|