vg-coder-cli 2.0.40 → 2.0.42
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/vg-coder-bundle.js +4 -4
- package/package.json +2 -4
- package/src/index.js +5 -11
- package/src/server/api-server.js +14 -1
- package/src/server/views/css/agent-panel.css +358 -0
- package/src/server/views/css/browser-panel.css +97 -0
- package/src/server/views/css/tool-window.css +70 -0
- package/src/server/views/dashboard.css +3 -0
- package/src/server/views/dashboard.html +53 -0
- package/src/server/views/js/features/agent-panel.js +586 -0
- package/src/server/views/js/features/browser-panel.js +130 -0
- package/src/server/views/js/features/git-view.js +1 -1
- package/src/server/views/js/features/keyboard-shortcuts.js +1 -1
- package/src/server/views/js/features/resize.js +102 -0
- package/src/server/views/js/features/tool-window.js +176 -14
- package/src/server/views/js/main.js +4 -0
- package/src/server/views/js/utils/chat-history-manager.js +237 -0
- package/src/server/views/vg-coder/background.js +163 -3
- package/src/server/views/vg-coder/controller.js +26 -3
- package/src/server/views/vg-coder/manifest.json +3 -1
|
@@ -144,13 +144,13 @@ class ScriptInjector {
|
|
|
144
144
|
head.appendChild(scriptElement);
|
|
145
145
|
}
|
|
146
146
|
catch (error) {
|
|
147
|
-
console.
|
|
147
|
+
console.log('Failed to get head element for data URL:');
|
|
148
148
|
resolve(false);
|
|
149
149
|
}
|
|
150
150
|
}));
|
|
151
151
|
}
|
|
152
152
|
catch (error) {
|
|
153
|
-
console.
|
|
153
|
+
console.log('Data URL injection failed:');
|
|
154
154
|
return false;
|
|
155
155
|
}
|
|
156
156
|
});
|
|
@@ -604,9 +604,32 @@ const setupRemoveExtensionListener = () => __awaiter(void 0, void 0, void 0, fun
|
|
|
604
604
|
});
|
|
605
605
|
// Setup remove extension listener
|
|
606
606
|
setupRemoveExtensionListener();
|
|
607
|
+
// Setup CDP click bridge
|
|
608
|
+
// Listens for CDP click requests from MAIN world
|
|
609
|
+
window.addEventListener('message', (event) => {
|
|
610
|
+
if (event.source !== window)
|
|
611
|
+
return;
|
|
612
|
+
if (event.data.type === 'VETGO_CDP_CLICK') {
|
|
613
|
+
const { x, y } = event.data;
|
|
614
|
+
console.log(`📋 Content script received CDP click request: (${x}, ${y})`);
|
|
615
|
+
// Forward to background script
|
|
616
|
+
chrome.runtime.sendMessage({ action: 'CDP_CLICK', x, y }, (response) => {
|
|
617
|
+
if (chrome.runtime.lastError) {
|
|
618
|
+
console.error('❌ CDP click failed:', chrome.runtime.lastError);
|
|
619
|
+
}
|
|
620
|
+
else if (response === null || response === void 0 ? void 0 : response.success) {
|
|
621
|
+
console.log('✅ CDP click successful');
|
|
622
|
+
}
|
|
623
|
+
else {
|
|
624
|
+
console.error('❌ CDP click failed:', response === null || response === void 0 ? void 0 : response.error);
|
|
625
|
+
}
|
|
626
|
+
});
|
|
627
|
+
}
|
|
628
|
+
});
|
|
629
|
+
console.log('✅ VetGo CDP Click Bridge initialized');
|
|
607
630
|
|
|
608
631
|
})();
|
|
609
632
|
|
|
610
633
|
/******/ })()
|
|
611
634
|
;
|
|
612
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQzFELE9BQU87aUJBQ1I7Z0JBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDOUQ7QUFDSCxDQUFDLEVBQUM7QUFFRixrQ0FBa0M7QUFDbEMsNEJBQTRCLEVBQUUsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3ZnLWNvZGVyLy4vY2hyb21lL3NyYy9zY3JpcHQtaW5qZWN0b3IudHMiLCJ3ZWJwYWNrOi8vdmctY29kZXIvLi9jaHJvbWUvc3JjL3V0aWxzL2FpLWRvbWFpbnMudHMiLCJ3ZWJwYWNrOi8vdmctY29kZXIvLi9jaHJvbWUvc3JjL3V0aWxzL2luamVjdG9yLXNjcmlwdC50cyIsIndlYnBhY2s6Ly92Zy1jb2Rlci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly92Zy1jb2Rlci93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vdmctY29kZXIvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly92Zy1jb2Rlci93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3ZnLWNvZGVyLy4vY2hyb21lL3NyYy9jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEFsdGVybmF0aXZlIHNjcmlwdCBpbmplY3Rpb24gbWV0aG9kcyBmb3IgQ1NQLXJlc3RyaWN0ZWQgZW52aXJvbm1lbnRzXG5cbmV4cG9ydCBjbGFzcyBTY3JpcHRJbmplY3RvciB7XG5cbiAgLyoqXG4gICAqIERldGVjdCBpZiBzaXRlIGhhcyBzdHJpY3QgQ1NQIHRoYXQgYmxvY2tzIGJsb2IvZGF0YSBVUkxzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBkZXRlY3RTdHJpY3RDU1AoKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGZvciBDU1AgbWV0YSB0YWdzXG4gICAgICBjb25zdCBjc3BNZXRhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ21ldGFbaHR0cC1lcXVpdj1cIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdJyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNzcE1ldGFzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBjc3BNZXRhc1tpXTtcbiAgICAgICAgY29uc3QgY29udGVudCA9IG1ldGEuZ2V0QXR0cmlidXRlKCdjb250ZW50JykgfHwgJyc7XG4gICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKCdzY3JpcHQtc3JjJykgJiYgIWNvbnRlbnQuaW5jbHVkZXMoJ2Jsb2I6JykgJiYgIWNvbnRlbnQuaW5jbHVkZXMoJ2RhdGE6JykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBjb21tb24gc3RyaWN0IENTUCBkb21haW5zXG4gICAgICBjb25zdCBzdHJpY3REb21haW5zID0gW1xuICAgICAgICAnbWlkam91cm5leS5jb20nLFxuICAgICAgICAnb3BlbmFpLmNvbScsXG4gICAgICAgICdnaXRodWIuY29tJyxcbiAgICAgICAgJ2dvb2dsZS5jb20nLFxuICAgICAgICAnZ29vZ2xldGFnbWFuYWdlci5jb20nLFxuICAgICAgICAnZmFjZWJvb2suY29tJyxcbiAgICAgICAgJ3R3aXR0ZXIuY29tJyxcbiAgICAgICAgJ2xpbmtlZGluLmNvbSdcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gc3RyaWN0RG9tYWlucy5zb21lKGRvbWFpbiA9PiBob3N0bmFtZS5pbmNsdWRlcyhkb21haW4pKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignQ1NQIGRldGVjdGlvbiBlcnJvcjonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSBnZXQgaGVhZCBlbGVtZW50IG9yIHdhaXQgZm9yIGl0XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRIZWFkRWxlbWVudCgpOiBQcm9taXNlPEhUTUxIZWFkRWxlbWVudD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgdHJ5R2V0SGVhZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICAgICAgaWYgKGhlYWQpIHtcbiAgICAgICAgICByZXNvbHZlKGhlYWQgYXMgSFRNTEhlYWRFbGVtZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBubyBoZWFkLCB3YWl0IGZvciBET01cbiAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCB0cnlHZXRIZWFkLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGhlYWQgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICAgIGNvbnN0IG5ld0hlYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoZWFkJyk7XG4gICAgICAgICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKG5ld0hlYWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShuZXdIZWFkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTGFzdCByZXNvcnQ6IHdhaXQgYSBiaXQgYW5kIHRyeSBhZ2FpblxuICAgICAgICAgICAgc2V0VGltZW91dCh0cnlHZXRIZWFkLCAxMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdHJ5R2V0SGVhZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCAxOiBCbG9iIFVSTCBpbmplY3Rpb24gKHdvcmtzIGluIG1vc3QgY2FzZXMpXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5qZWN0VmlhQmxvYihzY3JpcHQ6IHN0cmluZywgYWN0aW9uVHlwZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbc2NyaXB0XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcgfSk7XG4gICAgICBjb25zdCBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuICAgICAgY29uc3Qgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0RWxlbWVudC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICBzY3JpcHRFbGVtZW50LmlkID0gYWN0aW9uVHlwZTtcbiAgICAgIHNjcmlwdEVsZW1lbnQuc3JjID0gYmxvYlVybDtcblxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNjcmlwdEVsZW1lbnQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybCk7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzY3JpcHRFbGVtZW50Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGhlYWQgPSBhd2FpdCB0aGlzLmdldEhlYWRFbGVtZW50KCk7XG4gICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRFbGVtZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IGhlYWQgZWxlbWVudDonLCBlcnJvcik7XG4gICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Jsb2IgaW5qZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCAyOiBEYXRhIFVSTCBpbmplY3Rpb24gKGZhbGxiYWNrKVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGluamVjdFZpYURhdGFVcmwoc2NyaXB0OiBzdHJpbmcsIGFjdGlvblR5cGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhVXJsID0gJ2RhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdDtiYXNlNjQsJyArIGJ0b2Eoc2NyaXB0KTtcbiAgICAgIGNvbnN0IHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdEVsZW1lbnQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgc2NyaXB0RWxlbWVudC5pZCA9IGFjdGlvblR5cGUgKyAnX2RhdGEnO1xuICAgICAgc2NyaXB0RWxlbWVudC5zcmMgPSBkYXRhVXJsO1xuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2NyaXB0RWxlbWVudC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHRydWUpO1xuICAgICAgICBzY3JpcHRFbGVtZW50Lm9uZXJyb3IgPSAoKSA9PiByZXNvbHZlKGZhbHNlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGhlYWQgPSBhd2FpdCB0aGlzLmdldEhlYWRFbGVtZW50KCk7XG4gICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRFbGVtZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IGhlYWQgZWxlbWVudCBmb3IgZGF0YSBVUkw6JywgZXJyb3IpO1xuICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRGF0YSBVUkwgaW5qZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCAzOiBQb3N0TWVzc2FnZSBicmlkZ2UgaW5qZWN0aW9uXG4gICAqL1xuICBzdGF0aWMgaW5qZWN0VmlhUG9zdE1lc3NhZ2Uoc2NyaXB0OiBzdHJpbmcsIGFjdGlvblR5cGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgYnJpZGdlIHNjcmlwdCB0aGF0IGxpc3RlbnMgZm9yIHBvc3RNZXNzYWdlXG4gICAgICAgIGNvbnN0IGJyaWRnZVNjcmlwdCA9IGBcbiAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlICE9PSB3aW5kb3cgfHwgIWV2ZW50LmRhdGEudHlwZSB8fCBldmVudC5kYXRhLnR5cGUgIT09ICdWRVRHT19TQ1JJUFRfSU5KRUNUJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBmdW5jID0gbmV3IEZ1bmN0aW9uKGV2ZW50LmRhdGEuc2NyaXB0KTtcbiAgICAgICAgICAgICAgZnVuYygpO1xuICAgICAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2Uoe3R5cGU6ICdWRVRHT19TQ1JJUFRfU1VDQ0VTUycsIGFjdGlvblR5cGU6IGV2ZW50LmRhdGEuYWN0aW9uVHlwZX0sICcqJyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdQb3N0TWVzc2FnZSBzY3JpcHQgZXhlY3V0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZSh7dHlwZTogJ1ZFVEdPX1NDUklQVF9FUlJPUicsIGFjdGlvblR5cGU6IGV2ZW50LmRhdGEuYWN0aW9uVHlwZSwgZXJyb3I6IGVycm9yLm1lc3NhZ2V9LCAnKicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICBgO1xuICAgICAgICBcbiAgICAgICAgLy8gRmlyc3QgaW5qZWN0IHRoZSBicmlkZ2VcbiAgICAgICAgdGhpcy5pbmplY3RWaWFCbG9iKGJyaWRnZVNjcmlwdCwgYWN0aW9uVHlwZSArICdfYnJpZGdlJykudGhlbigoYnJpZGdlU3VjY2VzcykgPT4ge1xuICAgICAgICAgIGlmIChicmlkZ2VTdWNjZXNzKSB7XG4gICAgICAgICAgICAvLyBMaXN0ZW4gZm9yIHJlc3BvbnNlXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUhhbmRsZXIgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlICE9PSB3aW5kb3cgfHwgIWV2ZW50LmRhdGEudHlwZSkgcmV0dXJuO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEudHlwZSA9PT0gJ1ZFVEdPX1NDUklQVF9TVUNDRVNTJyAmJiBldmVudC5kYXRhLmFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHJlc3BvbnNlSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5kYXRhLnR5cGUgPT09ICdWRVRHT19TQ1JJUFRfRVJST1InICYmIGV2ZW50LmRhdGEuYWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgcmVzcG9uc2VIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZXNwb25zZUhhbmRsZXIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBTZW5kIHNjcmlwdCB2aWEgcG9zdE1lc3NhZ2VcbiAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdWRVRHT19TQ1JJUFRfSU5KRUNUJyxcbiAgICAgICAgICAgICAgc2NyaXB0OiBzY3JpcHQsXG4gICAgICAgICAgICAgIGFjdGlvblR5cGU6IGFjdGlvblR5cGVcbiAgICAgICAgICAgIH0sICcqJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFRpbWVvdXQgYWZ0ZXIgNSBzZWNvbmRzXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZXNwb25zZUhhbmRsZXIpO1xuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUG9zdE1lc3NhZ2UgaW5qZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCA0OiBCYWNrZ3JvdW5kIHNjcmlwdCBpbmplY3Rpb24gdmlhIGNocm9tZS5zY3JpcHRpbmdcbiAgICovXG4gIHN0YXRpYyBpbmplY3RWaWFCYWNrZ3JvdW5kKHNjcmlwdDogc3RyaW5nLCBhY3Rpb25UeXBlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICAgICAgICBhY3Rpb246IFwiSU5KRUNUX1NDUklQVFwiLFxuICAgICAgICAgIHNjcmlwdDogc2NyaXB0LFxuICAgICAgICAgIGFjdGlvblR5cGU6IGFjdGlvblR5cGVcbiAgICAgICAgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQmFja2dyb3VuZCBpbmplY3Rpb24gZmFpbGVkOicsIGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcik7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSAmJiByZXNwb25zZS5zdWNjZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQmFja2dyb3VuZCBzY3JpcHQgaW5qZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCA1OiBEaXJlY3QgZXZhbCBpbiBjb250ZW50IHNjcmlwdCBjb250ZXh0IChsYXN0IHJlc29ydClcbiAgICovXG4gIHN0YXRpYyBpbmplY3RWaWFFdmFsKHNjcmlwdDogc3RyaW5nLCBhY3Rpb25UeXBlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBBdHRlbXB0aW5nIGRpcmVjdCBldmFsIGZvciAke2FjdGlvblR5cGV9YCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGlzb2xhdGVkIGZ1bmN0aW9uIHRvIGF2b2lkIHBvbGx1dGluZyBnbG9iYWwgc2NvcGVcbiAgICAgICAgY29uc3QgaXNvbGF0ZWRFeGVjdXRpb24gPSBuZXcgRnVuY3Rpb24oYFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAke3NjcmlwdH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFdmFsIGV4ZWN1dGlvbiBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICBgKTtcblxuICAgICAgICBjb25zdCBzdWNjZXNzID0gaXNvbGF0ZWRFeGVjdXRpb24oKTtcbiAgICAgICAgcmVzb2x2ZShzdWNjZXNzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0V2YWwgaW5qZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSBhbGwgbWV0aG9kcyBpbiBzbWFydCBvcmRlciBiYXNlZCBvbiBDU1AgZGV0ZWN0aW9uXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5qZWN0U2NyaXB0KHNjcmlwdDogc3RyaW5nLCBhY3Rpb25UeXBlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBoYXNTdHJpY3RDU1AgPSB0aGlzLmRldGVjdFN0cmljdENTUCgpO1xuXG4gICAgLy8gU21hcnQgbWV0aG9kIG9yZGVyaW5nIGJhc2VkIG9uIENTUCBkZXRlY3Rpb25cbiAgICBjb25zdCBtZXRob2RzID0gaGFzU3RyaWN0Q1NQID8gW1xuICAgICAgLy8gRm9yIHN0cmljdCBDU1Agc2l0ZXMsIHRyeSBiYWNrZ3JvdW5kIGluamVjdGlvbiBmaXJzdFxuICAgICAgKCkgPT4gdGhpcy5pbmplY3RWaWFCYWNrZ3JvdW5kKHNjcmlwdCwgYWN0aW9uVHlwZSksXG4gICAgICAoKSA9PiB0aGlzLmluamVjdFZpYUV2YWwoc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhUG9zdE1lc3NhZ2Uoc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhQmxvYihzY3JpcHQsIGFjdGlvblR5cGUpLFxuICAgICAgKCkgPT4gdGhpcy5pbmplY3RWaWFEYXRhVXJsKHNjcmlwdCwgYWN0aW9uVHlwZSlcbiAgICBdIDogW1xuICAgICAgLy8gRm9yIG5vcm1hbCBzaXRlcywgdHJ5IGJsb2IgZmlyc3QgKGZhc3Rlc3QpXG4gICAgICAoKSA9PiB0aGlzLmluamVjdFZpYUJsb2Ioc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhRGF0YVVybChzY3JpcHQsIGFjdGlvblR5cGUpLFxuICAgICAgKCkgPT4gdGhpcy5pbmplY3RWaWFCYWNrZ3JvdW5kKHNjcmlwdCwgYWN0aW9uVHlwZSksXG4gICAgICAoKSA9PiB0aGlzLmluamVjdFZpYUV2YWwoc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhUG9zdE1lc3NhZ2Uoc2NyaXB0LCBhY3Rpb25UeXBlKVxuICAgIF07XG5cbiAgICBjb25zb2xlLmxvZyhgSW5qZWN0aW5nIHNjcmlwdCBmb3IgJHthY3Rpb25UeXBlfSAoU3RyaWN0IENTUDogJHtoYXNTdHJpY3RDU1B9KWApO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtZXRob2QgPSBtZXRob2RzW2ldO1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGhhc1N0cmljdENTUCA/XG4gICAgICAgIFsnQmFja2dyb3VuZCcsICdFdmFsJywgJ1Bvc3RNZXNzYWdlJywgJ0Jsb2InLCAnRGF0YVVSTCddW2ldIDpcbiAgICAgICAgWydCbG9iJywgJ0RhdGFVUkwnLCAnQmFja2dyb3VuZCcsICdFdmFsJywgJ1Bvc3RNZXNzYWdlJ11baV07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBUcnlpbmcgJHttZXRob2ROYW1lfSBpbmplY3Rpb24uLi5gKTtcbiAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IG1ldGhvZCgpO1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGDinIUgU2NyaXB0IGluamVjdGlvbiBzdWNjZXNzZnVsIHZpYSAke21ldGhvZE5hbWV9IGZvciAke2FjdGlvblR5cGV9YCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYOKdjCAke21ldGhvZE5hbWV9IGluamVjdGlvbiBmYWlsZWQgZm9yICR7YWN0aW9uVHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihg4p2MICR7bWV0aG9kTmFtZX0gaW5qZWN0aW9uIGVycm9yOmAsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGDinYwgQWxsIGluamVjdGlvbiBtZXRob2RzIGZhaWxlZCBmb3IgJHthY3Rpb25UeXBlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwiLy8gQUkgQ2hhdCBQcm92aWRlcnMgQ29uZmlndXJhdGlvblxuLy8gRG9tYWlucyBmb3IgYXV0b21hdGljIFZHIENvZGVyIGlmcmFtZSBpbmplY3Rpb25cblxuZXhwb3J0IGNvbnN0IEFJX0RPTUFJTlMgPSBbXG4gICdjaGF0Lm9wZW5haS5jb20nLCAgICAgICAgICAgLy8gQ2hhdEdQVCAob2xkIFVSTClcbiAgJ2NoYXRncHQuY29tJywgICAgICAgICAgICAgICAvLyBDaGF0R1BUIChuZXcgVVJMKVxuICAnZ2VtaW5pLmdvb2dsZS5jb20nLCAgICAgICAgIC8vIEdvb2dsZSBHZW1pbmlcbiAgJ2Fpc3R1ZGlvLmdvb2dsZS5jb20nLCAgICAgICAvLyBHb29nbGUgQUkgU3R1ZGlvXG4gICdjaGF0LmRlZXBzZWVrLmNvbScsICAgICAgICAgLy8gRGVlcFNlZWtcbiAgJ2tpbWkuY29tJywgICAgICAgICAgICAgICAgICAvLyBLaW1pIEFJXG4gICd3d3cua2ltaS5jb20nLCAgICAgICAgICAgICAvLyBLaW1pIEFJICh3d3cpXG4gICdncm9rLmNvbScsICAgICAgICAgICAgICAgICAgLy8gR3Jva1xuICAnY2xhdWRlLmFpJywgICAgICAgICAgICAgICAgIC8vIENsYXVkZSAoQW50aHJvcGljKVxuICAncG9lLmNvbScsICAgICAgICAgICAgICAgICAgIC8vIFBvZVxuICAncGVycGxleGl0eS5haScsICAgICAgICAgICAgLy8gUGVycGxleGl0eVxuICAnd3d3LnBlcnBsZXhpdHkuYWknLCAgICAgICAgLy8gUGVycGxleGl0eSAod3d3KVxuXTtcblxuLyoqXG4gKiBDaGVjayBpZiBkb21haW4gc2hvdWxkIGhhdmUgVkcgQ29kZXIgaWZyYW1lIGluamVjdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FJQ2hhdERvbWFpbihob3N0bmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNsZWFuSG9zdG5hbWUgPSBob3N0bmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL153d3dcXC4vLCAnJyk7XG4gIGNvbnNvbGUubG9nKCfwn5SNIENoZWNraW5nIEFJIGRvbWFpbjonLCBjbGVhbkhvc3RuYW1lKTtcbiAgXG4gIGNvbnN0IGlzTWF0Y2ggPSBBSV9ET01BSU5TLnNvbWUoZG9tYWluID0+IHtcbiAgICBjb25zdCBjbGVhbkRvbWFpbiA9IGRvbWFpbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL153d3dcXC4vLCAnJyk7XG4gICAgcmV0dXJuIGNsZWFuSG9zdG5hbWUgPT09IGNsZWFuRG9tYWluIHx8IGNsZWFuSG9zdG5hbWUuZW5kc1dpdGgoJy4nICsgY2xlYW5Eb21haW4pO1xuICB9KTtcbiAgXG4gIGNvbnNvbGUubG9nKCfwn46vIEFJIGRvbWFpbiBtYXRjaDonLCBpc01hdGNoKTtcbiAgcmV0dXJuIGlzTWF0Y2g7XG59XG4iLCIvLyBWRyBDb2RlciBTaGFkb3cgRE9NIEJ1bmRsZSBMb2FkZXJcbi8vIFRoaXMgc2NyaXB0IGZldGNoZXMgdGhlIGNvbXBpbGVkIGJ1bmRsZSBmcm9tIHRoZSBsb2NhbCBzZXJ2ZXIgYW5kIGV4ZWN1dGVzIGl0LlxuXG5leHBvcnQgY29uc3QgVkdfQ09ERVJfSU5KRUNUT1JfU0NSSVBUID0gYFxuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG4gIFxuICBjb25zdCBDT05GSUcgPSB7XG4gICAgLy8gVHLhu48gdOG7m2kgZmlsZSBidW5kbGUgduG7q2EgYnVpbGRcbiAgICBCVU5ETEVfVVJMOiAnaHR0cDovL2xvY2FsaG9zdDo2ODY4L2Rpc3QvdmctY29kZXItYnVuZGxlLmpzJyxcbiAgICBDT05UQUlORVJfSUQ6ICd2Zy1jb2Rlci1zaGFkb3ctaG9zdCdcbiAgfTtcbiAgXG4gIC8vIDEuIEtp4buDbSB0cmEgbuG6v3UgxJHDoyBpbmplY3QgcuG7k2lcbiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKENPTkZJRy5DT05UQUlORVJfSUQpKSB7XG4gICAgY29uc29sZS5sb2coJ+KaoSBWRyBDb2RlciBhbHJlYWR5IGluamVjdGVkJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc29sZS5sb2coJ/CfmoAgTG9hZGluZyBWRyBDb2RlciBCdW5kbGUgZnJvbTonLCBDT05GSUcuQlVORExFX1VSTCk7XG5cbiAgLy8gMi4gVOG6oW8gU2NyaXB0IFRhZyDEkeG7gyBsb2FkIGJ1bmRsZVxuICAvLyBDw6FjaCBuw6B5IHThu5F0IGjGoW4gZmV0Y2grZXZhbCB2w6wgdOG6rW4gZOG7pW5nIGNhY2hlIHbDoCBkZWJ1ZyBk4buFIGjGoW5cbiAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gIHNjcmlwdC5zcmMgPSBDT05GSUcuQlVORExFX1VSTDtcbiAgc2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgXG4gIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ+KchSBWRyBDb2RlciBCdW5kbGUgTG9hZGVkIFN1Y2Nlc3NmdWxseScpO1xuICB9O1xuICBcbiAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcign4p2MIEZhaWxlZCB0byBsb2FkIFZHIENvZGVyIEJ1bmRsZS4gSXMgdGhlIHNlcnZlciBydW5uaW5nIGF0IHBvcnQgNjg2OD8nKTtcbiAgICAvLyBPcHRpb25hbDogU2hvdyBhIHZpc3VhbCBlcnJvciB0b2FzdCBvbiB0aGUgcGFnZVxuICAgIGNvbnN0IHRvYXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdG9hc3Quc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjpmaXhlZDsgdG9wOjIwcHg7IHJpZ2h0OjIwcHg7IGJhY2tncm91bmQ6I2ZmM2IzMDsgY29sb3I6d2hpdGU7IHBhZGRpbmc6MTBweCAyMHB4OyBib3JkZXItcmFkaXVzOjhweDsgei1pbmRleDo5OTk5OTk7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGJveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLDAuMik7JztcbiAgICB0b2FzdC50ZXh0Q29udGVudCA9ICfimqDvuI8gVkcgQ29kZXIgQ29ubmVjdGlvbiBGYWlsZWQgKElzIFNlcnZlciBSdW5uaW5nPyknO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodG9hc3QpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdG9hc3QucmVtb3ZlKCksIDUwMDApO1xuICB9O1xuXG4gIC8vIDMuIEluamVjdCB2w6BvIEhlYWQgaG/hurdjIEJvZHlcbiAgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblxufSkoKTtcbmA7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB7IFNjcmlwdEluamVjdG9yIH0gZnJvbSAnLi9zY3JpcHQtaW5qZWN0b3InO1xuaW1wb3J0IHsgaXNBSUNoYXREb21haW4gfSBmcm9tICcuL3V0aWxzL2FpLWRvbWFpbnMnO1xuaW1wb3J0IHsgVkdfQ09ERVJfSU5KRUNUT1JfU0NSSVBUIH0gZnJvbSAnLi91dGlscy9pbmplY3Rvci1zY3JpcHQnO1xuXG5jb25zdCBhZGRTY3JpcHQgPSBhc3luYyAoc2NyaXB0OiBzdHJpbmcsIGFjdGlvblR5cGU6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBTY3JpcHRJbmplY3Rvci5pbmplY3RTY3JpcHQoc2NyaXB0LCBhY3Rpb25UeXBlKTtcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0FsbCBzY3JpcHQgaW5qZWN0aW9uIG1ldGhvZHMgZmFpbGVkIGZvcjonLCBhY3Rpb25UeXBlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignU2NyaXB0IGluamVjdGlvbiBlcnJvcjonLCBlcnJvcik7XG4gIH1cbn1cbi8vIFdhaXQgZm9yIERPTSB0byBiZSByZWFkeSBiZWZvcmUgZXhlY3V0aW5nXG5jb25zdCB3YWl0Rm9yRE9NID0gKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4gcmVzb2x2ZSgpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9XG4gIH0pO1xufTtcblxuXG5jb25zdCBpbml0aWFsaXplQ29udHJvbGxlciA9IGFzeW5jICgpID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBFbnN1cmUgRE9NIGlzIHJlYWR5XG4gICAgYXdhaXQgd2FpdEZvckRPTSgpO1xuXG4gICAgY29uc3QgY3VycmVudEhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLnJlcGxhY2UoLyhodHRwcz86XFwvXFwvKT8od3d3Lik/L2ksICcnKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIEFJIGNoYXQgZG9tYWluIC0gdXNlIGJ1bmRsZWQgaW5qZWN0b3JcbiAgICBpZiAoaXNBSUNoYXREb21haW4oY3VycmVudEhvc3RuYW1lKSkge1xuICAgICAgY29uc29sZS5sb2coJ/CfpJYgQUkgY2hhdCBkb21haW4gZGV0ZWN0ZWQ6JywgY3VycmVudEhvc3RuYW1lKTtcbiAgICAgIC8vIEV4ZWN1dGUgYnVuZGxlZCBpbmplY3RvciBzY3JpcHRcbiAgICAgIGF3YWl0IGFkZFNjcmlwdChWR19DT0RFUl9JTkpFQ1RPUl9TQ1JJUFQsICdWR19DT0RFUl9JTkpFQ1RPUicpO1xuICAgIH1cblxuICAgIC8vIEZvciBub24tQUkgZG9tYWlucywgY29udGludWUgd2l0aCBGaXJlYmFzZSBzY3JpcHQgbG9hZGluZ1xuICAgIGNvbnN0IGFjdGlvblR5cGUgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KFwiYWN0aW9uVHlwZVwiKSB8fCBcIk1BSU5cIjtcbiAgICBjb25zdCBjYWNoZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oYWN0aW9uVHlwZSk7XG5cbiAgICBpZiAoY2FjaGUpIHtcbiAgICAgIGF3YWl0IGFkZFNjcmlwdChjYWNoZSwgYWN0aW9uVHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICAgICAgYWN0aW9uOiBcIkNPTlRST0xMRVJcIixcbiAgICAgICAgZG9tYWluOiBjdXJyZW50SG9zdG5hbWUsXG4gICAgICAgIGFjdGlvblR5cGU6IGFjdGlvblR5cGVcbiAgICAgIH0sIGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignUnVudGltZSBlcnJvcjonLCBjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc2NyaXB0KSB7XG4gICAgICAgICAgY29uc3QgZnVsbFNjcmlwdCA9IGB2YXIgY2hyb21lSWQgPSBcIiR7Y2hyb21lLnJ1bnRpbWUuaWR9XCI7ICR7cmVzcG9uc2Uuc2NyaXB0fWA7XG4gICAgICAgICAgYXdhaXQgYWRkU2NyaXB0KGZ1bGxTY3JpcHQsIGFjdGlvblR5cGUpO1xuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYWN0aW9uVHlwZSwgZnVsbFNjcmlwdCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignQ29udHJvbGxlciBpbml0aWFsaXphdGlvbiBlcnJvcjonLCBlcnIpO1xuICB9XG59O1xuXG4vLyBJbml0aWFsaXplIGNvbnRyb2xsZXJcbmluaXRpYWxpemVDb250cm9sbGVyKCk7XG5jb25zdCBzZXR1cFJlbW92ZUV4dGVuc2lvbkxpc3RlbmVyID0gYXN5bmMgKCkgPT4ge1xuICB0cnkge1xuICAgIC8vIFdhaXQgZm9yIERPTSBhbmQgYm9keSB0byBiZSByZWFkeVxuICAgIGF3YWl0IHdhaXRGb3JET00oKTtcblxuICAgIC8vIFdhaXQgZm9yIGJvZHkgZWxlbWVudFxuICAgIGNvbnN0IHdhaXRGb3JCb2R5ID0gKCk6IFByb21pc2U8SFRNTEJvZHlFbGVtZW50PiA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2tCb2R5ID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgICAgIHJlc29sdmUoYm9keSBhcyBIVE1MQm9keUVsZW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrQm9keSwgMTAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNoZWNrQm9keSgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCB3YWl0Rm9yQm9keSgpO1xuXG4gICAgLy8gY2FjaCBkdW5nOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5JykuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ1JFTU9WRV9FWFRFTlNJT04nLCB7IGRldGFpbDogeyBrZXk6ICd2YWx1ZScgfSB9KSk7XG4gICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdSRU1PVkVfRVhURU5TSU9OJywgZnVuY3Rpb24oZXZlbnQ6IGFueSkge1xuICAgICAgY29uc29sZS5sb2coZXZlbnQuZGV0YWlsKTsgLy8geyBrZXk6ICd2YWx1ZScgfVxuICAgICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2Uoe2FjdGlvbjogXCJSRU1PVkVfRVhURU5TSU9OXCIsIGRhdGE6IGV2ZW50LmRldGFpbH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignUnVudGltZSBlcnJvcjonLCBjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygndHUgaHV5IHRoYW5oIGNvbmcnLCByZXNwb25zZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignU2V0dXAgcmVtb3ZlIGV4dGVuc2lvbiBsaXN0ZW5lciBlcnJvcjonLCBlcnIpO1xuICB9XG59O1xuXG4vLyBTZXR1cCByZW1vdmUgZXh0ZW5zaW9uIGxpc3RlbmVyXG5zZXR1cFJlbW92ZUV4dGVuc2lvbkxpc3RlbmVyKCk7XG5cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
|
|
635
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QzthQUN2QztpQkFBTTtnQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxLQUFLLENBQUMsQ0FBQzthQUN2RDtRQUNILENBQUMsQ0FDRixDQUFDO0tBQ0g7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3ZnLWNvZGVyLy4vY2hyb21lL3NyYy9zY3JpcHQtaW5qZWN0b3IudHMiLCJ3ZWJwYWNrOi8vdmctY29kZXIvLi9jaHJvbWUvc3JjL3V0aWxzL2FpLWRvbWFpbnMudHMiLCJ3ZWJwYWNrOi8vdmctY29kZXIvLi9jaHJvbWUvc3JjL3V0aWxzL2luamVjdG9yLXNjcmlwdC50cyIsIndlYnBhY2s6Ly92Zy1jb2Rlci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly92Zy1jb2Rlci93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vdmctY29kZXIvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly92Zy1jb2Rlci93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3ZnLWNvZGVyLy4vY2hyb21lL3NyYy9jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEFsdGVybmF0aXZlIHNjcmlwdCBpbmplY3Rpb24gbWV0aG9kcyBmb3IgQ1NQLXJlc3RyaWN0ZWQgZW52aXJvbm1lbnRzXG5cbmV4cG9ydCBjbGFzcyBTY3JpcHRJbmplY3RvciB7XG5cbiAgLyoqXG4gICAqIERldGVjdCBpZiBzaXRlIGhhcyBzdHJpY3QgQ1NQIHRoYXQgYmxvY2tzIGJsb2IvZGF0YSBVUkxzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBkZXRlY3RTdHJpY3RDU1AoKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGZvciBDU1AgbWV0YSB0YWdzXG4gICAgICBjb25zdCBjc3BNZXRhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ21ldGFbaHR0cC1lcXVpdj1cIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdJyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNzcE1ldGFzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBjc3BNZXRhc1tpXTtcbiAgICAgICAgY29uc3QgY29udGVudCA9IG1ldGEuZ2V0QXR0cmlidXRlKCdjb250ZW50JykgfHwgJyc7XG4gICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKCdzY3JpcHQtc3JjJykgJiYgIWNvbnRlbnQuaW5jbHVkZXMoJ2Jsb2I6JykgJiYgIWNvbnRlbnQuaW5jbHVkZXMoJ2RhdGE6JykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBjb21tb24gc3RyaWN0IENTUCBkb21haW5zXG4gICAgICBjb25zdCBzdHJpY3REb21haW5zID0gW1xuICAgICAgICAnbWlkam91cm5leS5jb20nLFxuICAgICAgICAnb3BlbmFpLmNvbScsXG4gICAgICAgICdnaXRodWIuY29tJyxcbiAgICAgICAgJ2dvb2dsZS5jb20nLFxuICAgICAgICAnZ29vZ2xldGFnbWFuYWdlci5jb20nLFxuICAgICAgICAnZmFjZWJvb2suY29tJyxcbiAgICAgICAgJ3R3aXR0ZXIuY29tJyxcbiAgICAgICAgJ2xpbmtlZGluLmNvbSdcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gc3RyaWN0RG9tYWlucy5zb21lKGRvbWFpbiA9PiBob3N0bmFtZS5pbmNsdWRlcyhkb21haW4pKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignQ1NQIGRldGVjdGlvbiBlcnJvcjonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSBnZXQgaGVhZCBlbGVtZW50IG9yIHdhaXQgZm9yIGl0XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRIZWFkRWxlbWVudCgpOiBQcm9taXNlPEhUTUxIZWFkRWxlbWVudD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgdHJ5R2V0SGVhZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICAgICAgaWYgKGhlYWQpIHtcbiAgICAgICAgICByZXNvbHZlKGhlYWQgYXMgSFRNTEhlYWRFbGVtZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBubyBoZWFkLCB3YWl0IGZvciBET01cbiAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCB0cnlHZXRIZWFkLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGhlYWQgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICAgIGNvbnN0IG5ld0hlYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoZWFkJyk7XG4gICAgICAgICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKG5ld0hlYWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShuZXdIZWFkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTGFzdCByZXNvcnQ6IHdhaXQgYSBiaXQgYW5kIHRyeSBhZ2FpblxuICAgICAgICAgICAgc2V0VGltZW91dCh0cnlHZXRIZWFkLCAxMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdHJ5R2V0SGVhZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCAxOiBCbG9iIFVSTCBpbmplY3Rpb24gKHdvcmtzIGluIG1vc3QgY2FzZXMpXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5qZWN0VmlhQmxvYihzY3JpcHQ6IHN0cmluZywgYWN0aW9uVHlwZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbc2NyaXB0XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcgfSk7XG4gICAgICBjb25zdCBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuICAgICAgY29uc3Qgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0RWxlbWVudC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICBzY3JpcHRFbGVtZW50LmlkID0gYWN0aW9uVHlwZTtcbiAgICAgIHNjcmlwdEVsZW1lbnQuc3JjID0gYmxvYlVybDtcblxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNjcmlwdEVsZW1lbnQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybCk7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzY3JpcHRFbGVtZW50Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGhlYWQgPSBhd2FpdCB0aGlzLmdldEhlYWRFbGVtZW50KCk7XG4gICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRFbGVtZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IGhlYWQgZWxlbWVudDonLCBlcnJvcik7XG4gICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Jsb2IgaW5qZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCAyOiBEYXRhIFVSTCBpbmplY3Rpb24gKGZhbGxiYWNrKVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGluamVjdFZpYURhdGFVcmwoc2NyaXB0OiBzdHJpbmcsIGFjdGlvblR5cGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhVXJsID0gJ2RhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdDtiYXNlNjQsJyArIGJ0b2Eoc2NyaXB0KTtcbiAgICAgIGNvbnN0IHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdEVsZW1lbnQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgc2NyaXB0RWxlbWVudC5pZCA9IGFjdGlvblR5cGUgKyAnX2RhdGEnO1xuICAgICAgc2NyaXB0RWxlbWVudC5zcmMgPSBkYXRhVXJsO1xuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2NyaXB0RWxlbWVudC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHRydWUpO1xuICAgICAgICBzY3JpcHRFbGVtZW50Lm9uZXJyb3IgPSAoKSA9PiByZXNvbHZlKGZhbHNlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGhlYWQgPSBhd2FpdCB0aGlzLmdldEhlYWRFbGVtZW50KCk7XG4gICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRFbGVtZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGdldCBoZWFkIGVsZW1lbnQgZm9yIGRhdGEgVVJMOicpO1xuICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coJ0RhdGEgVVJMIGluamVjdGlvbiBmYWlsZWQ6Jyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCAzOiBQb3N0TWVzc2FnZSBicmlkZ2UgaW5qZWN0aW9uXG4gICAqL1xuICBzdGF0aWMgaW5qZWN0VmlhUG9zdE1lc3NhZ2Uoc2NyaXB0OiBzdHJpbmcsIGFjdGlvblR5cGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgYnJpZGdlIHNjcmlwdCB0aGF0IGxpc3RlbnMgZm9yIHBvc3RNZXNzYWdlXG4gICAgICAgIGNvbnN0IGJyaWRnZVNjcmlwdCA9IGBcbiAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlICE9PSB3aW5kb3cgfHwgIWV2ZW50LmRhdGEudHlwZSB8fCBldmVudC5kYXRhLnR5cGUgIT09ICdWRVRHT19TQ1JJUFRfSU5KRUNUJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBmdW5jID0gbmV3IEZ1bmN0aW9uKGV2ZW50LmRhdGEuc2NyaXB0KTtcbiAgICAgICAgICAgICAgZnVuYygpO1xuICAgICAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2Uoe3R5cGU6ICdWRVRHT19TQ1JJUFRfU1VDQ0VTUycsIGFjdGlvblR5cGU6IGV2ZW50LmRhdGEuYWN0aW9uVHlwZX0sICcqJyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdQb3N0TWVzc2FnZSBzY3JpcHQgZXhlY3V0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZSh7dHlwZTogJ1ZFVEdPX1NDUklQVF9FUlJPUicsIGFjdGlvblR5cGU6IGV2ZW50LmRhdGEuYWN0aW9uVHlwZSwgZXJyb3I6IGVycm9yLm1lc3NhZ2V9LCAnKicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICBgO1xuICAgICAgICBcbiAgICAgICAgLy8gRmlyc3QgaW5qZWN0IHRoZSBicmlkZ2VcbiAgICAgICAgdGhpcy5pbmplY3RWaWFCbG9iKGJyaWRnZVNjcmlwdCwgYWN0aW9uVHlwZSArICdfYnJpZGdlJykudGhlbigoYnJpZGdlU3VjY2VzcykgPT4ge1xuICAgICAgICAgIGlmIChicmlkZ2VTdWNjZXNzKSB7XG4gICAgICAgICAgICAvLyBMaXN0ZW4gZm9yIHJlc3BvbnNlXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUhhbmRsZXIgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlICE9PSB3aW5kb3cgfHwgIWV2ZW50LmRhdGEudHlwZSkgcmV0dXJuO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEudHlwZSA9PT0gJ1ZFVEdPX1NDUklQVF9TVUNDRVNTJyAmJiBldmVudC5kYXRhLmFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHJlc3BvbnNlSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5kYXRhLnR5cGUgPT09ICdWRVRHT19TQ1JJUFRfRVJST1InICYmIGV2ZW50LmRhdGEuYWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgcmVzcG9uc2VIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZXNwb25zZUhhbmRsZXIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBTZW5kIHNjcmlwdCB2aWEgcG9zdE1lc3NhZ2VcbiAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdWRVRHT19TQ1JJUFRfSU5KRUNUJyxcbiAgICAgICAgICAgICAgc2NyaXB0OiBzY3JpcHQsXG4gICAgICAgICAgICAgIGFjdGlvblR5cGU6IGFjdGlvblR5cGVcbiAgICAgICAgICAgIH0sICcqJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFRpbWVvdXQgYWZ0ZXIgNSBzZWNvbmRzXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZXNwb25zZUhhbmRsZXIpO1xuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUG9zdE1lc3NhZ2UgaW5qZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCA0OiBCYWNrZ3JvdW5kIHNjcmlwdCBpbmplY3Rpb24gdmlhIGNocm9tZS5zY3JpcHRpbmdcbiAgICovXG4gIHN0YXRpYyBpbmplY3RWaWFCYWNrZ3JvdW5kKHNjcmlwdDogc3RyaW5nLCBhY3Rpb25UeXBlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICAgICAgICBhY3Rpb246IFwiSU5KRUNUX1NDUklQVFwiLFxuICAgICAgICAgIHNjcmlwdDogc2NyaXB0LFxuICAgICAgICAgIGFjdGlvblR5cGU6IGFjdGlvblR5cGVcbiAgICAgICAgfSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQmFja2dyb3VuZCBpbmplY3Rpb24gZmFpbGVkOicsIGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcik7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSAmJiByZXNwb25zZS5zdWNjZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQmFja2dyb3VuZCBzY3JpcHQgaW5qZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCA1OiBEaXJlY3QgZXZhbCBpbiBjb250ZW50IHNjcmlwdCBjb250ZXh0IChsYXN0IHJlc29ydClcbiAgICovXG4gIHN0YXRpYyBpbmplY3RWaWFFdmFsKHNjcmlwdDogc3RyaW5nLCBhY3Rpb25UeXBlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBBdHRlbXB0aW5nIGRpcmVjdCBldmFsIGZvciAke2FjdGlvblR5cGV9YCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGlzb2xhdGVkIGZ1bmN0aW9uIHRvIGF2b2lkIHBvbGx1dGluZyBnbG9iYWwgc2NvcGVcbiAgICAgICAgY29uc3QgaXNvbGF0ZWRFeGVjdXRpb24gPSBuZXcgRnVuY3Rpb24oYFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAke3NjcmlwdH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFdmFsIGV4ZWN1dGlvbiBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICBgKTtcblxuICAgICAgICBjb25zdCBzdWNjZXNzID0gaXNvbGF0ZWRFeGVjdXRpb24oKTtcbiAgICAgICAgcmVzb2x2ZShzdWNjZXNzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0V2YWwgaW5qZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSBhbGwgbWV0aG9kcyBpbiBzbWFydCBvcmRlciBiYXNlZCBvbiBDU1AgZGV0ZWN0aW9uXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5qZWN0U2NyaXB0KHNjcmlwdDogc3RyaW5nLCBhY3Rpb25UeXBlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBoYXNTdHJpY3RDU1AgPSB0aGlzLmRldGVjdFN0cmljdENTUCgpO1xuXG4gICAgLy8gU21hcnQgbWV0aG9kIG9yZGVyaW5nIGJhc2VkIG9uIENTUCBkZXRlY3Rpb25cbiAgICBjb25zdCBtZXRob2RzID0gaGFzU3RyaWN0Q1NQID8gW1xuICAgICAgLy8gRm9yIHN0cmljdCBDU1Agc2l0ZXMsIHRyeSBiYWNrZ3JvdW5kIGluamVjdGlvbiBmaXJzdFxuICAgICAgKCkgPT4gdGhpcy5pbmplY3RWaWFCYWNrZ3JvdW5kKHNjcmlwdCwgYWN0aW9uVHlwZSksXG4gICAgICAoKSA9PiB0aGlzLmluamVjdFZpYUV2YWwoc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhUG9zdE1lc3NhZ2Uoc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhQmxvYihzY3JpcHQsIGFjdGlvblR5cGUpLFxuICAgICAgKCkgPT4gdGhpcy5pbmplY3RWaWFEYXRhVXJsKHNjcmlwdCwgYWN0aW9uVHlwZSlcbiAgICBdIDogW1xuICAgICAgLy8gRm9yIG5vcm1hbCBzaXRlcywgdHJ5IGJsb2IgZmlyc3QgKGZhc3Rlc3QpXG4gICAgICAoKSA9PiB0aGlzLmluamVjdFZpYUJsb2Ioc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhRGF0YVVybChzY3JpcHQsIGFjdGlvblR5cGUpLFxuICAgICAgKCkgPT4gdGhpcy5pbmplY3RWaWFCYWNrZ3JvdW5kKHNjcmlwdCwgYWN0aW9uVHlwZSksXG4gICAgICAoKSA9PiB0aGlzLmluamVjdFZpYUV2YWwoc2NyaXB0LCBhY3Rpb25UeXBlKSxcbiAgICAgICgpID0+IHRoaXMuaW5qZWN0VmlhUG9zdE1lc3NhZ2Uoc2NyaXB0LCBhY3Rpb25UeXBlKVxuICAgIF07XG5cbiAgICBjb25zb2xlLmxvZyhgSW5qZWN0aW5nIHNjcmlwdCBmb3IgJHthY3Rpb25UeXBlfSAoU3RyaWN0IENTUDogJHtoYXNTdHJpY3RDU1B9KWApO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtZXRob2QgPSBtZXRob2RzW2ldO1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGhhc1N0cmljdENTUCA/XG4gICAgICAgIFsnQmFja2dyb3VuZCcsICdFdmFsJywgJ1Bvc3RNZXNzYWdlJywgJ0Jsb2InLCAnRGF0YVVSTCddW2ldIDpcbiAgICAgICAgWydCbG9iJywgJ0RhdGFVUkwnLCAnQmFja2dyb3VuZCcsICdFdmFsJywgJ1Bvc3RNZXNzYWdlJ11baV07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBUcnlpbmcgJHttZXRob2ROYW1lfSBpbmplY3Rpb24uLi5gKTtcbiAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IG1ldGhvZCgpO1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGDinIUgU2NyaXB0IGluamVjdGlvbiBzdWNjZXNzZnVsIHZpYSAke21ldGhvZE5hbWV9IGZvciAke2FjdGlvblR5cGV9YCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYOKdjCAke21ldGhvZE5hbWV9IGluamVjdGlvbiBmYWlsZWQgZm9yICR7YWN0aW9uVHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihg4p2MICR7bWV0aG9kTmFtZX0gaW5qZWN0aW9uIGVycm9yOmAsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGDinYwgQWxsIGluamVjdGlvbiBtZXRob2RzIGZhaWxlZCBmb3IgJHthY3Rpb25UeXBlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwiLy8gQUkgQ2hhdCBQcm92aWRlcnMgQ29uZmlndXJhdGlvblxuLy8gRG9tYWlucyBmb3IgYXV0b21hdGljIFZHIENvZGVyIGlmcmFtZSBpbmplY3Rpb25cblxuZXhwb3J0IGNvbnN0IEFJX0RPTUFJTlMgPSBbXG4gICdjaGF0Lm9wZW5haS5jb20nLCAgICAgICAgICAgLy8gQ2hhdEdQVCAob2xkIFVSTClcbiAgJ2NoYXRncHQuY29tJywgICAgICAgICAgICAgICAvLyBDaGF0R1BUIChuZXcgVVJMKVxuICAnZ2VtaW5pLmdvb2dsZS5jb20nLCAgICAgICAgIC8vIEdvb2dsZSBHZW1pbmlcbiAgJ2Fpc3R1ZGlvLmdvb2dsZS5jb20nLCAgICAgICAvLyBHb29nbGUgQUkgU3R1ZGlvXG4gICdjaGF0LmRlZXBzZWVrLmNvbScsICAgICAgICAgLy8gRGVlcFNlZWtcbiAgJ2tpbWkuY29tJywgICAgICAgICAgICAgICAgICAvLyBLaW1pIEFJXG4gICd3d3cua2ltaS5jb20nLCAgICAgICAgICAgICAvLyBLaW1pIEFJICh3d3cpXG4gICdncm9rLmNvbScsICAgICAgICAgICAgICAgICAgLy8gR3Jva1xuICAnY2xhdWRlLmFpJywgICAgICAgICAgICAgICAgIC8vIENsYXVkZSAoQW50aHJvcGljKVxuICAncG9lLmNvbScsICAgICAgICAgICAgICAgICAgIC8vIFBvZVxuICAncGVycGxleGl0eS5haScsICAgICAgICAgICAgLy8gUGVycGxleGl0eVxuICAnd3d3LnBlcnBsZXhpdHkuYWknLCAgICAgICAgLy8gUGVycGxleGl0eSAod3d3KVxuXTtcblxuLyoqXG4gKiBDaGVjayBpZiBkb21haW4gc2hvdWxkIGhhdmUgVkcgQ29kZXIgaWZyYW1lIGluamVjdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FJQ2hhdERvbWFpbihob3N0bmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNsZWFuSG9zdG5hbWUgPSBob3N0bmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL153d3dcXC4vLCAnJyk7XG4gIGNvbnNvbGUubG9nKCfwn5SNIENoZWNraW5nIEFJIGRvbWFpbjonLCBjbGVhbkhvc3RuYW1lKTtcbiAgXG4gIGNvbnN0IGlzTWF0Y2ggPSBBSV9ET01BSU5TLnNvbWUoZG9tYWluID0+IHtcbiAgICBjb25zdCBjbGVhbkRvbWFpbiA9IGRvbWFpbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL153d3dcXC4vLCAnJyk7XG4gICAgcmV0dXJuIGNsZWFuSG9zdG5hbWUgPT09IGNsZWFuRG9tYWluIHx8IGNsZWFuSG9zdG5hbWUuZW5kc1dpdGgoJy4nICsgY2xlYW5Eb21haW4pO1xuICB9KTtcbiAgXG4gIGNvbnNvbGUubG9nKCfwn46vIEFJIGRvbWFpbiBtYXRjaDonLCBpc01hdGNoKTtcbiAgcmV0dXJuIGlzTWF0Y2g7XG59XG4iLCIvLyBWRyBDb2RlciBTaGFkb3cgRE9NIEJ1bmRsZSBMb2FkZXJcbi8vIFRoaXMgc2NyaXB0IGZldGNoZXMgdGhlIGNvbXBpbGVkIGJ1bmRsZSBmcm9tIHRoZSBsb2NhbCBzZXJ2ZXIgYW5kIGV4ZWN1dGVzIGl0LlxuXG5leHBvcnQgY29uc3QgVkdfQ09ERVJfSU5KRUNUT1JfU0NSSVBUID0gYFxuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG4gIFxuICBjb25zdCBDT05GSUcgPSB7XG4gICAgLy8gVHLhu48gdOG7m2kgZmlsZSBidW5kbGUgduG7q2EgYnVpbGRcbiAgICBCVU5ETEVfVVJMOiAnaHR0cDovL2xvY2FsaG9zdDo2ODY4L2Rpc3QvdmctY29kZXItYnVuZGxlLmpzJyxcbiAgICBDT05UQUlORVJfSUQ6ICd2Zy1jb2Rlci1zaGFkb3ctaG9zdCdcbiAgfTtcbiAgXG4gIC8vIDEuIEtp4buDbSB0cmEgbuG6v3UgxJHDoyBpbmplY3QgcuG7k2lcbiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKENPTkZJRy5DT05UQUlORVJfSUQpKSB7XG4gICAgY29uc29sZS5sb2coJ+KaoSBWRyBDb2RlciBhbHJlYWR5IGluamVjdGVkJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc29sZS5sb2coJ/CfmoAgTG9hZGluZyBWRyBDb2RlciBCdW5kbGUgZnJvbTonLCBDT05GSUcuQlVORExFX1VSTCk7XG5cbiAgLy8gMi4gVOG6oW8gU2NyaXB0IFRhZyDEkeG7gyBsb2FkIGJ1bmRsZVxuICAvLyBDw6FjaCBuw6B5IHThu5F0IGjGoW4gZmV0Y2grZXZhbCB2w6wgdOG6rW4gZOG7pW5nIGNhY2hlIHbDoCBkZWJ1ZyBk4buFIGjGoW5cbiAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gIHNjcmlwdC5zcmMgPSBDT05GSUcuQlVORExFX1VSTDtcbiAgc2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgXG4gIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ+KchSBWRyBDb2RlciBCdW5kbGUgTG9hZGVkIFN1Y2Nlc3NmdWxseScpO1xuICB9O1xuICBcbiAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcign4p2MIEZhaWxlZCB0byBsb2FkIFZHIENvZGVyIEJ1bmRsZS4gSXMgdGhlIHNlcnZlciBydW5uaW5nIGF0IHBvcnQgNjg2OD8nKTtcbiAgICAvLyBPcHRpb25hbDogU2hvdyBhIHZpc3VhbCBlcnJvciB0b2FzdCBvbiB0aGUgcGFnZVxuICAgIGNvbnN0IHRvYXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdG9hc3Quc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjpmaXhlZDsgdG9wOjIwcHg7IHJpZ2h0OjIwcHg7IGJhY2tncm91bmQ6I2ZmM2IzMDsgY29sb3I6d2hpdGU7IHBhZGRpbmc6MTBweCAyMHB4OyBib3JkZXItcmFkaXVzOjhweDsgei1pbmRleDo5OTk5OTk7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGJveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLDAuMik7JztcbiAgICB0b2FzdC50ZXh0Q29udGVudCA9ICfimqDvuI8gVkcgQ29kZXIgQ29ubmVjdGlvbiBGYWlsZWQgKElzIFNlcnZlciBSdW5uaW5nPyknO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodG9hc3QpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdG9hc3QucmVtb3ZlKCksIDUwMDApO1xuICB9O1xuXG4gIC8vIDMuIEluamVjdCB2w6BvIEhlYWQgaG/hurdjIEJvZHlcbiAgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblxufSkoKTtcbmA7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB7IFNjcmlwdEluamVjdG9yIH0gZnJvbSAnLi9zY3JpcHQtaW5qZWN0b3InO1xuaW1wb3J0IHsgaXNBSUNoYXREb21haW4gfSBmcm9tICcuL3V0aWxzL2FpLWRvbWFpbnMnO1xuaW1wb3J0IHsgVkdfQ09ERVJfSU5KRUNUT1JfU0NSSVBUIH0gZnJvbSAnLi91dGlscy9pbmplY3Rvci1zY3JpcHQnO1xuXG5jb25zdCBhZGRTY3JpcHQgPSBhc3luYyAoc2NyaXB0OiBzdHJpbmcsIGFjdGlvblR5cGU6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBTY3JpcHRJbmplY3Rvci5pbmplY3RTY3JpcHQoc2NyaXB0LCBhY3Rpb25UeXBlKTtcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0FsbCBzY3JpcHQgaW5qZWN0aW9uIG1ldGhvZHMgZmFpbGVkIGZvcjonLCBhY3Rpb25UeXBlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignU2NyaXB0IGluamVjdGlvbiBlcnJvcjonLCBlcnJvcik7XG4gIH1cbn1cbi8vIFdhaXQgZm9yIERPTSB0byBiZSByZWFkeSBiZWZvcmUgZXhlY3V0aW5nXG5jb25zdCB3YWl0Rm9yRE9NID0gKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4gcmVzb2x2ZSgpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9XG4gIH0pO1xufTtcblxuXG5jb25zdCBpbml0aWFsaXplQ29udHJvbGxlciA9IGFzeW5jICgpID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBFbnN1cmUgRE9NIGlzIHJlYWR5XG4gICAgYXdhaXQgd2FpdEZvckRPTSgpO1xuXG4gICAgY29uc3QgY3VycmVudEhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLnJlcGxhY2UoLyhodHRwcz86XFwvXFwvKT8od3d3Lik/L2ksICcnKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIEFJIGNoYXQgZG9tYWluIC0gdXNlIGJ1bmRsZWQgaW5qZWN0b3JcbiAgICBpZiAoaXNBSUNoYXREb21haW4oY3VycmVudEhvc3RuYW1lKSkge1xuICAgICAgY29uc29sZS5sb2coJ/CfpJYgQUkgY2hhdCBkb21haW4gZGV0ZWN0ZWQ6JywgY3VycmVudEhvc3RuYW1lKTtcbiAgICAgIC8vIEV4ZWN1dGUgYnVuZGxlZCBpbmplY3RvciBzY3JpcHRcbiAgICAgIGF3YWl0IGFkZFNjcmlwdChWR19DT0RFUl9JTkpFQ1RPUl9TQ1JJUFQsICdWR19DT0RFUl9JTkpFQ1RPUicpO1xuICAgIH1cblxuICAgIC8vIEZvciBub24tQUkgZG9tYWlucywgY29udGludWUgd2l0aCBGaXJlYmFzZSBzY3JpcHQgbG9hZGluZ1xuICAgIGNvbnN0IGFjdGlvblR5cGUgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KFwiYWN0aW9uVHlwZVwiKSB8fCBcIk1BSU5cIjtcbiAgICBjb25zdCBjYWNoZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oYWN0aW9uVHlwZSk7XG5cbiAgICBpZiAoY2FjaGUpIHtcbiAgICAgIGF3YWl0IGFkZFNjcmlwdChjYWNoZSwgYWN0aW9uVHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICAgICAgYWN0aW9uOiBcIkNPTlRST0xMRVJcIixcbiAgICAgICAgZG9tYWluOiBjdXJyZW50SG9zdG5hbWUsXG4gICAgICAgIGFjdGlvblR5cGU6IGFjdGlvblR5cGVcbiAgICAgIH0sIGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignUnVudGltZSBlcnJvcjonLCBjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc2NyaXB0KSB7XG4gICAgICAgICAgY29uc3QgZnVsbFNjcmlwdCA9IGB2YXIgY2hyb21lSWQgPSBcIiR7Y2hyb21lLnJ1bnRpbWUuaWR9XCI7ICR7cmVzcG9uc2Uuc2NyaXB0fWA7XG4gICAgICAgICAgYXdhaXQgYWRkU2NyaXB0KGZ1bGxTY3JpcHQsIGFjdGlvblR5cGUpO1xuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYWN0aW9uVHlwZSwgZnVsbFNjcmlwdCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignQ29udHJvbGxlciBpbml0aWFsaXphdGlvbiBlcnJvcjonLCBlcnIpO1xuICB9XG59O1xuXG4vLyBJbml0aWFsaXplIGNvbnRyb2xsZXJcbmluaXRpYWxpemVDb250cm9sbGVyKCk7XG5jb25zdCBzZXR1cFJlbW92ZUV4dGVuc2lvbkxpc3RlbmVyID0gYXN5bmMgKCkgPT4ge1xuICB0cnkge1xuICAgIC8vIFdhaXQgZm9yIERPTSBhbmQgYm9keSB0byBiZSByZWFkeVxuICAgIGF3YWl0IHdhaXRGb3JET00oKTtcblxuICAgIC8vIFdhaXQgZm9yIGJvZHkgZWxlbWVudFxuICAgIGNvbnN0IHdhaXRGb3JCb2R5ID0gKCk6IFByb21pc2U8SFRNTEJvZHlFbGVtZW50PiA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2tCb2R5ID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgICAgIHJlc29sdmUoYm9keSBhcyBIVE1MQm9keUVsZW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrQm9keSwgMTAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNoZWNrQm9keSgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCB3YWl0Rm9yQm9keSgpO1xuXG4gICAgLy8gY2FjaCBkdW5nOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5JykuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ1JFTU9WRV9FWFRFTlNJT04nLCB7IGRldGFpbDogeyBrZXk6ICd2YWx1ZScgfSB9KSk7XG4gICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdSRU1PVkVfRVhURU5TSU9OJywgZnVuY3Rpb24oZXZlbnQ6IGFueSkge1xuICAgICAgY29uc29sZS5sb2coZXZlbnQuZGV0YWlsKTsgLy8geyBrZXk6ICd2YWx1ZScgfVxuICAgICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2Uoe2FjdGlvbjogXCJSRU1PVkVfRVhURU5TSU9OXCIsIGRhdGE6IGV2ZW50LmRldGFpbH0sIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignUnVudGltZSBlcnJvcjonLCBjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygndHUgaHV5IHRoYW5oIGNvbmcnLCByZXNwb25zZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignU2V0dXAgcmVtb3ZlIGV4dGVuc2lvbiBsaXN0ZW5lciBlcnJvcjonLCBlcnIpO1xuICB9XG59O1xuXG4vLyBTZXR1cCByZW1vdmUgZXh0ZW5zaW9uIGxpc3RlbmVyXG5zZXR1cFJlbW92ZUV4dGVuc2lvbkxpc3RlbmVyKCk7XG5cbi8vIFNldHVwIENEUCBjbGljayBicmlkZ2Vcbi8vIExpc3RlbnMgZm9yIENEUCBjbGljayByZXF1ZXN0cyBmcm9tIE1BSU4gd29ybGRcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKGV2ZW50KSA9PiB7XG4gIGlmIChldmVudC5zb3VyY2UgIT09IHdpbmRvdykgcmV0dXJuO1xuICBcbiAgaWYgKGV2ZW50LmRhdGEudHlwZSA9PT0gJ1ZFVEdPX0NEUF9DTElDSycpIHtcbiAgICBjb25zdCB7IHgsIHkgfSA9IGV2ZW50LmRhdGE7XG4gICAgY29uc29sZS5sb2coYPCfk4sgQ29udGVudCBzY3JpcHQgcmVjZWl2ZWQgQ0RQIGNsaWNrIHJlcXVlc3Q6ICgke3h9LCAke3l9KWApO1xuICAgIFxuICAgIC8vIEZvcndhcmQgdG8gYmFja2dyb3VuZCBzY3JpcHRcbiAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZShcbiAgICAgIHsgYWN0aW9uOiAnQ0RQX0NMSUNLJywgeCwgeSB9LFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCfinYwgQ0RQIGNsaWNrIGZhaWxlZDonLCBjaHJvbWUucnVudGltZS5sYXN0RXJyb3IpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ+KchSBDRFAgY2xpY2sgc3VjY2Vzc2Z1bCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBDRFAgY2xpY2sgZmFpbGVkOicsIHJlc3BvbnNlPy5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG59KTtcblxuY29uc29sZS5sb2coJ+KchSBWZXRHbyBDRFAgQ2xpY2sgQnJpZGdlIGluaXRpYWxpemVkJyk7XG5cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
|