@agilemotion/oui-react-js 2.0.18 → 2.0.19
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/ApplicationManager.js +25 -8
- package/dist/components/SocketManager.js +6 -3
- package/dist/components/dashboard/FoldingSideTabDashboard.js +4 -2
- package/dist/components/dashboard/components/blackDashboard/sidebar/FoldingTabSidebar.js +18 -2
- package/dist/components/layout/Window.js +2 -2
- package/dist/view/Dashboard.js +2 -2
- package/package.json +1 -1
|
@@ -163,14 +163,23 @@ class ApplicationManager {
|
|
|
163
163
|
* closes all views
|
|
164
164
|
*
|
|
165
165
|
*/
|
|
166
|
-
_defineProperty(this, "closeAllViews", ()
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
166
|
+
_defineProperty(this, "closeAllViews", function () {
|
|
167
|
+
let preserveWindow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
168
|
+
Object.keys(_this.viewContext).forEach(key => {
|
|
169
|
+
// When preserveWindow is set, leave the floating WindowViewPort overlay intact — it is
|
|
170
|
+
// a separate viewport in our multi-viewport dashboard and must survive a main-view
|
|
171
|
+
// navigation (e.g. launching the dashboard from the menu).
|
|
172
|
+
if (preserveWindow && key === 'window') {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
_this.viewContext[key].closeAllViews();
|
|
172
176
|
});
|
|
173
|
-
|
|
177
|
+
if (!preserveWindow) {
|
|
178
|
+
_Observable.default.emitContextChangeEvent(applicationContext, {
|
|
179
|
+
windowView: null
|
|
180
|
+
});
|
|
181
|
+
applicationContext.windowView = null;
|
|
182
|
+
}
|
|
174
183
|
});
|
|
175
184
|
/**
|
|
176
185
|
* closes the specified view
|
|
@@ -603,6 +612,14 @@ class ApplicationManager {
|
|
|
603
612
|
hasActiveMeeting() {
|
|
604
613
|
return this.props.hasActiveMeeting;
|
|
605
614
|
}
|
|
615
|
+
|
|
616
|
+
/**
|
|
617
|
+
* True when the floating WindowViewPort overlay currently hosts a view.
|
|
618
|
+
* Used to decide whether a menu navigation should auto-pin the window.
|
|
619
|
+
*/
|
|
620
|
+
isWindowOpen() {
|
|
621
|
+
return applicationContext.windowView != null;
|
|
622
|
+
}
|
|
606
623
|
setServiceApiPath(serviceApiPath) {
|
|
607
624
|
this.props.serviceApiPath = serviceApiPath;
|
|
608
625
|
}
|
|
@@ -739,4 +756,4 @@ class ApplicationManager {
|
|
|
739
756
|
const instance = new ApplicationManager();
|
|
740
757
|
Object.freeze(instance);
|
|
741
758
|
var _default = exports.default = instance;
|
|
742
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT2JzZXJ2YWJsZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX0V2ZW50IiwiX0V2ZW50VHlwZSIsIl9VdGlscyIsIl9EeW5hbWljSlMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9UeXBlZFZhbHVlIiwiX1NvY2tldE1hbmFnZXIiLCJfVmlld0NvbnRleHQiLCJfaGVscGVycyIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIkFQUF9WQVJJQUJMRSIsImV4cG9ydHMiLCJTT0NLRVRfVkFSSUFCTEUiLCJBVkFUQVJfTElTVEVORVJfVFlQRSIsIkRBU0hCT0FSRF9TVEFURSIsIlNZU1RFTV9FVkVOVCIsIlRFTVBMQVRFX1RPS0VOX1JFR0VYIiwiUmVnRXhwIiwiYXBwbGljYXRpb25Db250ZXh0IiwiQXBwbGljYXRpb25NYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJfdGhpcyIsInN1YnNjcmlwdGlvbiIsIlByb21pc2UiLCJyZXNvbHZlIiwiZXZlbnRNYW5hZ2VyIiwiYWRkQXBwbGljYXRpb25Db250ZXh0U3Vic2NyaXB0aW9uIiwiY29udHJvbGxlciIsInByb3BzIiwiY29uZmlybWF0aW9uRGlhbG9nQ29udHJvbGxlciIsIm5hbWUiLCJsaWIiLCJsaWJzIiwiaGlzdG9yeSIsImFwcGxpY2F0aW9uSGlzdG9yeSIsInZpZXdJZCIsInRpdGxlIiwia2V5cyIsInZpZXdDb250ZXh0IiwiZm9yRWFjaCIsImtleSIsInVwZGF0ZUFwcEJhclRpdGxlIiwiY2xlYXJBbGxFdmVudExpc3RlbmVycyIsImNsZWFyIiwiZmlsZUNhY2hlIiwic3BsaWNlIiwibGVuZ3RoIiwiZG9tYWluIiwiZmlsZUNhY2hlRWxlbWVudCIsImZpbGUiLCJVdGlscyIsImlzTnVsbCIsImNvbnNvbGUiLCJlcnJvciIsImZpbGVEb21haW5DYWNoZSIsImdldEZpbGVEb21haW5DYWNoZSIsImZpbGVzIiwicHVzaCIsImNhY2hlZEZpbGUiLCJkb21haW5GaWxlIiwiY29ycmVsYXRpb25JZCIsImNvbnRlbnQiLCJ2YWx1ZXMiLCJwdWJsaXNoIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiZW1pdENvbnRleHRDaGFuZ2VFdmVudCIsInZpZXciLCJwYXRoIiwiZGFzaGJvYXJkIiwiYWRkVmlldyIsImNsb3NlQWxsVmlld3MiLCJmb3J3YXJkIiwibWFuYWdlcklkIiwid2luZG93VmlldyIsInZpZXdDb250ZXh0RWxlbWVudCIsImNsb3NlUG9wdXBWaWV3IiwiZ2V0VmlldyIsImNsb3NlVmlldyIsImlkIiwiaGFuZGxlIiwiYXBpIiwiX3ZpZXckaGFuZGxlIiwiZ2V0Q2hpbGQiLCJfdmlldyRoYW5kbGUyIiwiZ3JhcGhzIiwiZ3JhcGgiLCJnZXRHcmFwaHMiLCJ2aWV3cyIsImdldFZpZXdzIiwiY29tcG9uZW50IiwiZ2V0Vmlld0NvbXBvbmVudCIsInRlbXBsYXRlIiwiZXZlbnREYXRhIiwibWF0Y2hlcyIsIm1hdGNoIiwiZXhwcmVzaW9uQ29udGVudCIsInN1YnN0cmluZyIsImluZGV4T2YiLCJsYXN0SW5kZXhPZiIsImV4cHJlc3Npb25WYWx1ZSIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwic3BsaXQiLCJ2byIsInByb3AiLCJyZXNvbHZlRXhwcmVzc2lvblZhbHVlIiwiZXhwcmVzc2lvbiIsInBhcmFtRXhwcmVzc2lvbiIsImlzRXZlbnQiLCJiYXNlRXhwcmVzc2lvbiIsImV4cHJlc3Npb25Db250ZW50IiwiaXNDb21wb25lbnQiLCJpc0xpYiIsInRva2VucyIsImlkVG9rZW4iLCJyZXNvbHZlQ29tcG9uZW50QXBpIiwiZXhwcmVzc2lvbkNsb3N1cmUiLCJpbmRleCIsInByb3BlcnR5Q2hhaW4iLCJvYmoiLCJpc0FycmF5IiwiQXJyYXkiLCJ1cGRhdGVkIiwic2V0RXhwcmVzc2lvblZhbHVlcyIsIm9ialZhbHVlIiwiaXNFeHByZXNzaW9uIiwic2NyaXB0VmFsdWUiLCJkeW5hbWljSlMiLCJleGVjdXRlU2NyaXB0IiwiY29uY2F0IiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwib2JqS2V5IiwiaW5zdGFuY2VUeXBlIiwidHlwZSIsImNvbmZpZ1ZhbHVlIiwianNvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJURU1QTEFURV9SRUdFWCIsInBhcmFtZXRlckNvbmZpZyIsInN0YXRpYyIsImluY2x1ZGVzIiwidmFsdWVJbmRleCIsInZhbCIsInJlc29sdmVQYXJhbWV0ZXJDb25maWdWYWx1ZSIsImRhdGEiLCJUeXBlZFZhbHVlIiwic2V0TW9kZWxWYWx1ZSIsInByb2Nlc3NTeXN0ZW1HZW5lcmF0ZWRTdWJzY3JpcHRpb25zIiwiZ2V0UHJldmlvdXNIaXN0b3J5RWxlbWVudCIsImdldFRvcFZpZXciLCJpbnN0YW5jZSIsIm1haW4iLCJWaWV3Q29udGV4dCIsIndpbmRvdyIsInBvcHVwIiwibGlzdGVuZXJzIiwiZ2V0SWQiLCJyZWZyZXNoVXNlckF2YXRhciIsImF2YXRhciIsImFsZXJ0IiwibWVzc2FnZSIsIm1lc3NhZ2VUeXBlIiwicmVtb3ZlTG9hZGVkR3JhcGgiLCJzZXRIYXNBY3RpdmVNZWV0aW5nIiwiaGFzQWN0aXZlTWVldGluZyIsImdldEFjdGl2ZU1lZXRpbmdLZXkiLCJnZXRVc2VyRGV0YWlscyIsImZpcmVFdmVudCIsImV2ZW50VHlwZSIsImV2ZW50IiwiRXZlbnQiLCJzb3VyY2UiLCJ1cGRhdGVDb250ZXh0IiwiZW1pdFNvY2tldEV2ZW50Iiwic29ja2V0TWFuYWdlciIsImVtaXRFdmVudCIsInNldEFjdGl2ZVRlbmFudCIsInRlbmFudCIsImdldEFjdGl2ZVRlbmFudCIsImdldFVuaXF1ZU9yZ0ZvclJvbGUiLCJyb2xlIiwic2V0RGFzaGJvYXJkU3RhdGUiLCJkYXNoYm9hcmRTdGF0ZSIsImdldERhc2hib2FyZFN0YXRlIiwiYXJnIiwicHJvdG90eXBlIiwicHJvZmlsZSIsInBhcnNlIiwicm9sZXMiLCJvcmdhbmlzYXRpb25zIiwiZmlsdGVyIiwib3JnIiwibWFwIiwiY29kZSIsIkVycm9yIiwibmF2aWdhdGUiLCJuYXZpZ2F0b3IiLCJzZXREYXNoYm9hcmRTZXR0aW5ncyIsImRhc2hib2FyZFNldHRpbmdzIiwic3RhdGUiLCJsaXN0ZW5lciIsImxvZyIsImhhbmRsZXIiLCJnZXREYXNoYm9hcmRTZXR0aW5ncyIsInNldE5hdmlnYXRvciIsInNldEFjdGl2ZU1lZXRpbmdLZXkiLCJhY3RpdmVNZWV0aW5nS2V5Iiwic2V0U2VydmljZUFwaVBhdGgiLCJzZXJ2aWNlQXBpUGF0aCIsImdldFNlcnZpY2VBcGlQYXRoIiwic2V0VUlDb25maWdQYXRoIiwidWlDb25maWdQYXRoIiwic2V0Q29udGV4dFJvb3QiLCJjb250ZXh0Um9vdCIsImdldENvbnRleHRSb290IiwiZ2V0VUlDb25maWdQYXRoIiwic2V0RmlsZXNBcGlQYXRoIiwiZmlsZXNBcGlQYXRoIiwiZ2V0RmlsZXNBcGlQYXRoIiwiYWRkQXBwbGljYXRpb25MaXN0ZW5lciIsInJlbW92ZUFwcGxpY2F0aW9uTGlzdGVuZXIiLCJjb25maWciLCJFdmVudFR5cGUiLCJNRVNTQUdFX0FSUklWRUQiLCJzZXRBcHBsaWNhdGlvblRoZW1lQ29sb3JzIiwicHJpbWFyeSIsInNlY29uZGFyeSIsInByaW1hcnlDb2xvciIsInNlY29uZGFyeUNvbG9yIiwiZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IiLCJnZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yIiwib3BlbkNvbmZpcm1EaWFsb2ciLCJyZXN1bHRDYWxsYmFjayIsIm9wZW5EaWFsb2ciLCJleGVjdXRlIiwicmVzdWx0Iiwib3BlblBvcHVwVmlldyIsIm9wZW5XaW5kb3dWaWV3IiwiZmlsbEV2ZW50RGF0YVZhbHVlIiwiZW5hYmxlRm9ybU1hcmtlcnMiLCJlbmFibGVkIiwiZm9ybU1hcmtlcnNFbmFibGVkIiwiaXNGb3JtTWFya2Vyc0VuYWJsZWQiLCJzZXREYXNoYm9hcmRWaWV3IiwiZGFzaGJvYXJkVmlldyIsInNldFVzZXJEZXRhaWxzIiwidXNlckRldGFpbHMiLCJsb2FkR3JhcGgiLCJpc1BhcmVudCIsInBhcmFtZXRlclZhbHVlcyIsImlzV2luZG93Iiwic2lnbmFsR3JhcGgiLCJmcmVlemUiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvQXBwbGljYXRpb25NYW5hZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCBFdmVudCBmcm9tICcuL2V2ZW50L0V2ZW50JztcbmltcG9ydCBFdmVudFR5cGUgZnJvbSAnLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xuaW1wb3J0IGR5bmFtaWNKUywge1RFTVBMQVRFX1JFR0VYfSBmcm9tICcuL0R5bmFtaWNKUyc7XG5pbXBvcnQgVHlwZWRWYWx1ZSBmcm9tICcuL1R5cGVkVmFsdWUnO1xuaW1wb3J0IHNvY2tldE1hbmFnZXIgZnJvbSBcIi4vY29tcG9uZW50cy9Tb2NrZXRNYW5hZ2VyXCI7XG5pbXBvcnQge1ZpZXdDb250ZXh0fSBmcm9tIFwiLi9WaWV3Q29udGV4dFwiO1xuaW1wb3J0IHtpc0FycmF5fSBmcm9tIFwicnJ1bGUvZGlzdC9lc20vaGVscGVyc1wiO1xuXG5leHBvcnQgY29uc3QgQVBQX1ZBUklBQkxFID0gJ19fQVBQTElDQVRJT05fT1VJX1NZU19WQVJfXyc7XG5leHBvcnQgY29uc3QgU09DS0VUX1ZBUklBQkxFID0gJ19fU09DS0VUX1ZBUklBQkxFX09VSV9TWVNfVkFSX18nO1xuZXhwb3J0IGNvbnN0IEFWQVRBUl9MSVNURU5FUl9UWVBFID0gJ0FWQVRBUl9MSVNURU5FUic7XG5leHBvcnQgY29uc3QgREFTSEJPQVJEX1NUQVRFID0gJ0RBU0hCT0FSRF9TVEFURSc7XG5leHBvcnQgY29uc3QgU1lTVEVNX0VWRU5UID0gJ1NZU1RFTV9FVkVOVCc7XG5leHBvcnQgY29uc3QgVEVNUExBVEVfVE9LRU5fUkVHRVggPSBuZXcgUmVnRXhwKCcoKFskXXsxfVt7XXsxfSkoKFthLXpBLVowLTlfJC5AI3t9W1xcXFxdXSopKyl7MX0oW31dezF9KSkrJywgJ2cnKTtcblxuY29uc3QgYXBwbGljYXRpb25Db250ZXh0ID0ge307XG5cbmNsYXNzIEFwcGxpY2F0aW9uTWFuYWdlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGlmICghQXBwbGljYXRpb25NYW5hZ2VyLmluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIG1haW46IG5ldyBWaWV3Q29udGV4dCgnbWFpbicpLFxuICAgICAgICAgICAgICAgIHdpbmRvdzogbmV3IFZpZXdDb250ZXh0KCd3aW5kb3cnKSxcbiAgICAgICAgICAgICAgICBkYXNoYm9hcmQ6IG5ldyBWaWV3Q29udGV4dCgnZGFzaGJvYXJkJyksXG4gICAgICAgICAgICAgICAgcG9wdXA6IG5ldyBWaWV3Q29udGV4dCgncG9wdXAnKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnByb3BzID0ge307XG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5saWJzID0ge307XG4gICAgICAgICAgICB0aGlzLmZpbGVDYWNoZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5hcGkgPSB7XG4gICAgICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0SWQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlZnJlc2hVc2VyQXZhdGFyKGF2YXRhcikge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5yZWZyZXNoVXNlckF2YXRhcihhdmF0YXIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWxlcnQodmlld0lkLCBtZXNzYWdlLCBtZXNzYWdlVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5hbGVydCh2aWV3SWQsIG1lc3NhZ2UsIG1lc3NhZ2VUeXBlLCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVMb2FkZWRHcmFwaCh2aWV3Q29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5yZW1vdmVMb2FkZWRHcmFwaCh2aWV3Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRIYXNBY3RpdmVNZWV0aW5nKGhhc0FjdGl2ZU1lZXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2V0SGFzQWN0aXZlTWVldGluZyhoYXNBY3RpdmVNZWV0aW5nKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhhc0FjdGl2ZU1lZXRpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5oYXNBY3RpdmVNZWV0aW5nKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRBY3RpdmVNZWV0aW5nS2V5KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0QWN0aXZlTWVldGluZ0tleSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0VXNlckRldGFpbHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRVc2VyRGV0YWlscygpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xvc2VQb3B1cFZpZXcoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5jbG9zZVBvcHVwVmlldygpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlyZUV2ZW50KGV2ZW50VHlwZSwgZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoZXZlbnRUeXBlLCBuZXcgRXZlbnQoZXZlbnQuc291cmNlLCBldmVudC52aWV3SWQsIGV2ZW50LmRhdGEpKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVwZGF0ZUNvbnRleHQodmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGVDb250ZXh0KHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbWl0U29ja2V0RXZlbnQoZXZlbnRUeXBlLCBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzb2NrZXRNYW5hZ2VyLmVtaXRFdmVudChldmVudFR5cGUsIGRhdGEpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlVGVuYW50KHRlbmFudCkge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5zZXRBY3RpdmVUZW5hbnQodGVuYW50KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldEFjdGl2ZVRlbmFudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldEFjdGl2ZVRlbmFudCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0VW5pcXVlT3JnRm9yUm9sZShyb2xlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRVbmlxdWVPcmdGb3JSb2xlKHJvbGUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0RGFzaGJvYXJkU3RhdGUoZGFzaGJvYXJkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2V0RGFzaGJvYXJkU3RhdGUoZGFzaGJvYXJkU3RhdGUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0RGFzaGJvYXJkU3RhdGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXREYXNoYm9hcmRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSkge1xuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBBcHBsaWNhdGlvbk1hbmFnZXIuaW5zdGFuY2UgPSB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEFwcGxpY2F0aW9uTWFuYWdlci5pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBnZXRVbmlxdWVPcmdGb3JSb2xlKHJvbGUpIHtcbiAgICAgICAgbGV0IHByb2ZpbGUgPSBKU09OLnBhcnNlKHRoaXMuZ2V0VXNlckRldGFpbHMoKS5wcm9maWxlKTtcbiAgICAgICAgbGV0IHJvbGVzID0gcHJvZmlsZS5vcmdhbmlzYXRpb25zXG4gICAgICAgICAgICAuZmlsdGVyKG9yZyA9PiBvcmcucm9sZXMuaW5jbHVkZXMocm9sZSkpIC8vIEZpbHRlciBvcmdhbmlzYXRpb25zIGJ5IHJvbGVcbiAgICAgICAgICAgIC5tYXAob3JnID0+IG9yZy5jb2RlKTtcblxuICAgICAgICBpZiAocm9sZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBvcmdhbmlzYXRpb24gZm9yIHJvbGUgOiBbXCIgKyByb2xlICsgXCJdXCIpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcm9sZXNbMF07XG4gICAgfVxuXG4gICAgYWRkQXBwbGljYXRpb25Db250ZXh0U3Vic2NyaXB0aW9uID0gKHN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRBcHBsaWNhdGlvbkNvbnRleHRTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgIHJlc29sdmUoYXBwbGljYXRpb25Db250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIG5hdmlnYXRlKHBhdGgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5uYXZpZ2F0b3IocGF0aCk7XG4gICAgfVxuXG4gICAgc2V0RGFzaGJvYXJkU2V0dGluZ3MoZGFzaGJvYXJkU2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5kYXNoYm9hcmRTZXR0aW5ncyA9IGRhc2hib2FyZFNldHRpbmdzO1xuICAgIH1cblxuICAgIHNldERhc2hib2FyZFN0YXRlKHN0YXRlKSB7XG4gICAgICAgIHRoaXMucHJvcHMuZGFzaGJvYXJkU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgICAgICAgY29uc29sZS5sb2cobGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGxpc3RlbmVyLnR5cGUgPT09IERBU0hCT0FSRF9TVEFURSkge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZXIoc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RGFzaGJvYXJkU2V0dGluZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmRhc2hib2FyZFNldHRpbmdzO1xuICAgIH1cblxuICAgIHNldEFjdGl2ZVRlbmFudCh0ZW5hbnQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy50ZW5hbnQgPSB0ZW5hbnQ7XG4gICAgfVxuXG4gICAgZ2V0QWN0aXZlVGVuYW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy50ZW5hbnQ7XG4gICAgfVxuXG4gICAgc2V0TmF2aWdhdG9yKG5hdmlnYXRvcikge1xuICAgICAgICB0aGlzLnByb3BzLm5hdmlnYXRvciA9IG5hdmlnYXRvcjtcbiAgICB9XG5cbiAgICBzZXRBY3RpdmVNZWV0aW5nS2V5KGFjdGl2ZU1lZXRpbmdLZXkpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5hY3RpdmVNZWV0aW5nS2V5ID0gYWN0aXZlTWVldGluZ0tleTtcbiAgICB9XG5cbiAgICBnZXRBY3RpdmVNZWV0aW5nS2V5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5hY3RpdmVNZWV0aW5nS2V5O1xuICAgIH1cblxuICAgIHNldEhhc0FjdGl2ZU1lZXRpbmcoaGFzQWN0aXZlTWVldGluZykge1xuICAgICAgICB0aGlzLnByb3BzLmhhc0FjdGl2ZU1lZXRpbmcgPSBoYXNBY3RpdmVNZWV0aW5nO1xuICAgIH1cblxuICAgIGhhc0FjdGl2ZU1lZXRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmhhc0FjdGl2ZU1lZXRpbmc7XG4gICAgfVxuXG4gICAgc2V0U2VydmljZUFwaVBhdGgoc2VydmljZUFwaVBhdGgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zZXJ2aWNlQXBpUGF0aCA9IHNlcnZpY2VBcGlQYXRoO1xuICAgIH1cblxuICAgIGdldFNlcnZpY2VBcGlQYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZXJ2aWNlQXBpUGF0aDtcbiAgICB9XG5cbiAgICBzZXRVSUNvbmZpZ1BhdGgodWlDb25maWdQYXRoKSB7XG4gICAgICAgIHRoaXMucHJvcHMudWlDb25maWdQYXRoID0gdWlDb25maWdQYXRoO1xuICAgIH1cblxuICAgIHNldENvbnRleHRSb290KGNvbnRleHRSb290KSB7XG4gICAgICAgIHRoaXMucHJvcHMuY29udGV4dFJvb3QgPSBjb250ZXh0Um9vdDtcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0Um9vdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY29udGV4dFJvb3Q7XG4gICAgfVxuXG4gICAgZ2V0VUlDb25maWdQYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy51aUNvbmZpZ1BhdGg7XG4gICAgfVxuXG4gICAgc2V0RmlsZXNBcGlQYXRoKGZpbGVzQXBpUGF0aCkge1xuICAgICAgICB0aGlzLnByb3BzLmZpbGVzQXBpUGF0aCA9IGZpbGVzQXBpUGF0aDtcbiAgICB9XG5cbiAgICBnZXRGaWxlc0FwaVBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmZpbGVzQXBpUGF0aDtcbiAgICB9XG5cbiAgICBhZGRBcHBsaWNhdGlvbkxpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHJlbW92ZUFwcGxpY2F0aW9uTGlzdGVuZXIoaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVycykgcmV0dXJuO1xuICAgICAgICAvLyBSZXZlcnNlLWl0ZXJhdGUgKyBzcGxpY2Ug4oCUIGhhbmRsZXMgZHVwbGljYXRlIGlkcyB3aXRob3V0IGluZGV4XG4gICAgICAgIC8vIGRyaWZ0LCBhbmQgbXV0YXRlcyB0aGUgZXhpc3RpbmcgYXJyYXkgKHRoZSBzaW5nbGV0b24gaXNcbiAgICAgICAgLy8gT2JqZWN0LmZyZWV6ZSdkLCBzbyB3ZSBjYW4ndCByZWFzc2lnbiB0aGlzLmxpc3RlbmVycykuXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXJzW2ldLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFsZXJ0KHZpZXdJZCwgbWVzc2FnZSwgbWVzc2FnZVR5cGUpIHtcbiAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHRoaXMsIHRoaXMuZ2V0Vmlldyh2aWV3SWQpLmNvbmZpZy5pZCwge1xuICAgICAgICAgICAgbWVzc2FnZVR5cGU6IG1lc3NhZ2VUeXBlLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVxuICAgICAgICB9KTtcblxuICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICByZWZyZXNoVXNlckF2YXRhcihhdmF0YXIpIHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgICAgICAgaWYgKGxpc3RlbmVyLnR5cGUgPT09IEFWQVRBUl9MSVNURU5FUl9UWVBFKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlcihhdmF0YXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q29uZmlybURpYWxvZ0hhbmRsZXIgPSAoY29udHJvbGxlcikgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLmNvbmZpcm1hdGlvbkRpYWxvZ0NvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuICAgIH07XG5cbiAgICBzZXRBcHBsaWNhdGlvblRoZW1lQ29sb3JzKHByaW1hcnksIHNlY29uZGFyeSkge1xuICAgICAgICB0aGlzLnByb3BzLnByaW1hcnlDb2xvciA9IHByaW1hcnk7XG4gICAgICAgIHRoaXMucHJvcHMuc2Vjb25kYXJ5Q29sb3IgPSBzZWNvbmRhcnk7XG4gICAgfVxuXG4gICAgZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnByaW1hcnlDb2xvcjtcbiAgICB9XG5cbiAgICBnZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB9XG5cbiAgICBvcGVuQ29uZmlybURpYWxvZyhtZXNzYWdlLCByZXN1bHRDYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jb25maXJtYXRpb25EaWFsb2dDb250cm9sbGVyLm9wZW5EaWFsb2cobWVzc2FnZSwge1xuICAgICAgICAgICAgZXhlY3V0ZTogKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBvcGVuUG9wdXBWaWV3KHZpZXcpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5jb25maXJtYXRpb25EaWFsb2dDb250cm9sbGVyLm9wZW5Qb3B1cFZpZXcodmlldyk7XG4gICAgfVxuXG4gICAgY2xvc2VQb3B1cFZpZXcoKSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRleHQucG9wdXAuY2xvc2VBbGxWaWV3cygpO1xuICAgICAgICB0aGlzLnByb3BzLmNvbmZpcm1hdGlvbkRpYWxvZ0NvbnRyb2xsZXIuY2xvc2VQb3B1cFZpZXcoKTtcbiAgICB9XG5cbiAgICBvcGVuV2luZG93Vmlldyh2aWV3KSB7XG4gICAgICAgIGV2ZW50TWFuYWdlci5lbWl0Q29udGV4dENoYW5nZUV2ZW50KGFwcGxpY2F0aW9uQ29udGV4dCwge3dpbmRvd1ZpZXc6IHZpZXd9KTtcbiAgICAgICAgYXBwbGljYXRpb25Db250ZXh0LndpbmRvd1ZpZXcgPSB2aWV3O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlZ2lzdGVycyBhIGxpYnJhcnlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lXG4gICAgICogQHBhcmFtIGxpYlxuICAgICAqL1xuICAgIHJlZ2lzdGVyTGlicmFyeSA9IChuYW1lLCBsaWIpID0+IHtcbiAgICAgICAgdGhpcy5saWJzW25hbWVdID0gbGliO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBzZXQgYXBwbGljYXRpb24gaGlzdG9yeVxuICAgICAqXG4gICAgICogQHBhcmFtIGhpc3RvcnlcbiAgICAgKi9cbiAgICBzZXRBcHBsaWNhdGlvbkhpc3RvcnkgPSAoaGlzdG9yeSkgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLmFwcGxpY2F0aW9uSGlzdG9yeSA9IGhpc3Rvcnk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGdldCBhcHBsaWNhdGlvbiBoaXN0b3J5XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhcHBsaWNhdGlvbiBoaXN0b3J5XG4gICAgICovXG4gICAgZ2V0QXBwbGljYXRpb25IaXN0b3J5ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5hcHBsaWNhdGlvbkhpc3Rvcnk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIHVwZGF0ZSBhcHBiYXIgdGl0bGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aWV3SWRcbiAgICAgKiBAcGFyYW0gdGl0bGVcbiAgICAgKi9cbiAgICB1cGRhdGVBcHBCYXJUaXRsZSA9ICh2aWV3SWQsIHRpdGxlKSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMudmlld0NvbnRleHQpXG4gICAgICAgICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3Q29udGV4dFtrZXldLnVwZGF0ZUFwcEJhclRpdGxlKHZpZXdJZCwgdGl0bGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGNsZWFycyBhbGwgdmlld3NcbiAgICAgKlxuICAgICAqL1xuICAgIGNsZWFyID0gKCkgPT4ge1xuICAgICAgICBldmVudE1hbmFnZXIuY2xlYXJBbGxFdmVudExpc3RlbmVycygpO1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnZpZXdDb250ZXh0KVxuICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHRba2V5XS5jbGVhcigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5maWxlQ2FjaGUuc3BsaWNlKDAsIHRoaXMuZmlsZUNhY2hlLmxlbmd0aCk7XG4gICAgfTtcblxuICAgIGdldEZpbGVEb21haW5DYWNoZSA9IChkb21haW4pID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlQ2FjaGVFbGVtZW50IG9mIHRoaXMuZmlsZUNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoZmlsZUNhY2hlRWxlbWVudC5kb21haW4gPT09IGRvbWFpbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlQ2FjaGVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGFkZCB2aWV3IGNvbmZpZ3VyYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkb21haW5cbiAgICAgKiBAcGFyYW0gZmlsZVxuICAgICAqL1xuICAgIGFkZEZpbGUgPSAoZG9tYWluLCBmaWxlKSA9PiB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwoZG9tYWluKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUGxlYXNlIHNwZWNpZnkgZmlsZSBkb21haW4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaWxlRG9tYWluQ2FjaGUgPSB0aGlzLmdldEZpbGVEb21haW5DYWNoZShkb21haW4pO1xuICAgICAgICBpZiAoZmlsZURvbWFpbkNhY2hlID09PSBudWxsKSB7XG4gICAgICAgICAgICBmaWxlRG9tYWluQ2FjaGUgPSB7fTtcbiAgICAgICAgICAgIGZpbGVEb21haW5DYWNoZS5kb21haW4gPSBkb21haW47XG4gICAgICAgICAgICBmaWxlRG9tYWluQ2FjaGUuZmlsZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZmlsZUNhY2hlLnB1c2goZmlsZURvbWFpbkNhY2hlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjYWNoZWRGaWxlID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBkb21haW5GaWxlIG9mIGZpbGVEb21haW5DYWNoZS5maWxlcykge1xuICAgICAgICAgICAgaWYgKGRvbWFpbkZpbGUuY29ycmVsYXRpb25JZCA9PT0gZmlsZS5jb3JyZWxhdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgY2FjaGVkRmlsZSA9IGRvbWFpbkZpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FjaGVkRmlsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZmlsZURvbWFpbkNhY2hlLmZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRGaWxlLmNvbnRlbnQgPSBmaWxlLmNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXBkYXRlQ29udGV4dCA9ICh2YWx1ZXMsIHB1Ymxpc2ggPSB0cnVlKSA9PiB7XG4gICAgICAgIGlmKHB1Ymxpc2gpIHtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5lbWl0Q29udGV4dENoYW5nZUV2ZW50KGFwcGxpY2F0aW9uQ29udGV4dCwgdmFsdWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlcylcbiAgICAgICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHRba2V5XSA9IHZhbHVlc1trZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGFkZCB2aWV3IGNvbmZpZ3VyYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aWV3IHRoZSBsaXN0ZW5lciB0byBiZSBhZGRlZFxuICAgICAqIEBwYXJhbSBwYXRoXG4gICAgICogQHBhcmFtIGZvcndhcmRcbiAgICAgKi9cbiAgICBhZGREYXNoYm9hcmRWaWV3ID0gKHZpZXcsIHBhdGgpID0+IHtcbiAgICAgICAgdGhpcy52aWV3Q29udGV4dC5kYXNoYm9hcmQuYWRkVmlldyh2aWV3KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjbGVhciBkYXNoYm9hcmQgdmlldyBjb25maWd1cmF0aW9uXG4gICAgICpcbiAgICAgKi9cbiAgICBjbGVhckRhc2hib2FyZFZpZXdzID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnZpZXdDb250ZXh0LmRhc2hib2FyZC5jbG9zZUFsbFZpZXdzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIHZpZXcgY29uZmlndXJhdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIHZpZXcgdGhlIGxpc3RlbmVyIHRvIGJlIGFkZGVkXG4gICAgICogQHBhcmFtIHBhdGhcbiAgICAgKiBAcGFyYW0gZm9yd2FyZFxuICAgICAqIEBwYXJhbSBtYW5hZ2VySWRcbiAgICAgKi9cbiAgICBhZGRWaWV3ID0gKHZpZXcsIHBhdGgsIGZvcndhcmQsIG1hbmFnZXJJZCkgPT4ge1xuICAgICAgICB0aGlzLnZpZXdDb250ZXh0W21hbmFnZXJJZF0uYWRkVmlldyh2aWV3LCBwYXRoLCBmb3J3YXJkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogY2xvc2VzIGFsbCB2aWV3c1xuICAgICAqXG4gICAgICovXG4gICAgY2xvc2VBbGxWaWV3cyA9ICgpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy52aWV3Q29udGV4dClcbiAgICAgICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdDb250ZXh0W2tleV0uY2xvc2VBbGxWaWV3cygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZXZlbnRNYW5hZ2VyLmVtaXRDb250ZXh0Q2hhbmdlRXZlbnQoYXBwbGljYXRpb25Db250ZXh0LCB7d2luZG93VmlldzogbnVsbH0pO1xuICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHQud2luZG93VmlldyA9IG51bGw7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGNsb3NlcyB0aGUgc3BlY2lmaWVkIHZpZXdcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aWV3SWQgdGhlIGxpc3RlbmVyIHRvIGJlIGFkZGVkXG4gICAgICogQHBhcmFtIGZvcndhcmRcbiAgICAgKi9cbiAgICBjbG9zZVZpZXcgPSAodmlld0lkLCBmb3J3YXJkKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudmlld0NvbnRleHQpKSB7XG4gICAgICAgICAgICBsZXQgdmlld0NvbnRleHRFbGVtZW50ID0gdGhpcy52aWV3Q29udGV4dFtrZXldO1xuXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAncG9wdXAnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5jb25maXJtYXRpb25EaWFsb2dDb250cm9sbGVyLmNsb3NlUG9wdXBWaWV3KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB2aWV3Q29udGV4dEVsZW1lbnQuZ2V0VmlldygpO1xuICAgICAgICAgICAgICAgIGlmICh2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdDb250ZXh0RWxlbWVudC5jbG9zZVZpZXcodmlld0lkLCBmb3J3YXJkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3dpbmRvdycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5lbWl0Q29udGV4dENoYW5nZUV2ZW50KGFwcGxpY2F0aW9uQ29udGV4dCwge3dpbmRvd1ZpZXc6IG51bGx9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uQ29udGV4dC53aW5kb3dWaWV3ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdmlldyBjb25maWd1cmF0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIGlkXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRWaWV3ID0gKGlkKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudmlld0NvbnRleHQpKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3Q29udGV4dFtrZXldLmdldFZpZXcoaWQpO1xuICAgICAgICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlldztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBnZXRWaWV3Q29tcG9uZW50ID0gKHZpZXcsIGlkKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZpZXcpICYmICFVdGlscy5pc051bGwodmlldy5oYW5kbGUpICYmICFVdGlscy5pc051bGwodmlldy5oYW5kbGUuYXBpKSkge1xuICAgICAgICAgICAgaWYgKGlkID09PSB2aWV3LmhhbmRsZS5hcGkuaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlldy5oYW5kbGUuYXBpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmlldy5oYW5kbGU/LmFwaT8uZ2V0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICBsZXQgaGFuZGxlID0gdmlldy5oYW5kbGU/LmFwaT8uZ2V0Q2hpbGQoaWQpO1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5hcGk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlkID09PSAndmlldycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZpZXcuaGFuZGxlLmFwaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHZpZXcgY29uZmlndXJhdGlvbiB3aXRoIGEgcGFydGljdWxhciBpZFxuICAgICAqXG4gICAgICovXG4gICAgcmVzb2x2ZUNvbXBvbmVudEFwaSA9IChpZCkgPT4ge1xuICAgICAgICBpZiAoQVBQX1ZBUklBQkxFID09PSBpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGdyYXBocyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLnZpZXdDb250ZXh0KSkge1xuICAgICAgICAgICAgbGV0IHZpZXdDb250ZXh0ID0gdGhpcy52aWV3Q29udGV4dFtrZXldO1xuICAgICAgICAgICAgZm9yIChjb25zdCBncmFwaCBvZiB2aWV3Q29udGV4dC5nZXRHcmFwaHMoKSkge1xuICAgICAgICAgICAgICAgIGdyYXBocy5wdXNoKGdyYXBoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZ3JhcGggb2YgZ3JhcGhzKSB7XG4gICAgICAgICAgICBpZiAoZ3JhcGguaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZpZXdzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudmlld0NvbnRleHQpKSB7XG4gICAgICAgICAgICBsZXQgdmlld0NvbnRleHQgPSB0aGlzLnZpZXdDb250ZXh0W2tleV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZpZXcgb2Ygdmlld0NvbnRleHQuZ2V0Vmlld3MoKSkge1xuICAgICAgICAgICAgICAgIHZpZXdzLnB1c2godmlldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHZpZXcgb2Ygdmlld3MpIHtcbiAgICAgICAgICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmdldFZpZXdDb21wb25lbnQodmlldywgaWQpO1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUG9wdWxhdGUgYWxsIHBsYWNlIGhvbGRlcnMgaW4gdGhlIGdpdmVuIHRlbXBsYXRlXG4gICAgICpcbiAgICAgKi9cbiAgICBwb3B1bGF0ZVRlbXBsYXRlID0gKHRlbXBsYXRlLCBldmVudERhdGEpID0+IHtcbiAgICAgICAgbGV0IG1hdGNoZXMgPSB0ZW1wbGF0ZS5tYXRjaChURU1QTEFURV9UT0tFTl9SRUdFWCk7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG1hdGNoZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXhwcmVzaW9uQ29udGVudCA9IG1hdGNoLnN1YnN0cmluZyhtYXRjaC5pbmRleE9mKCd7JykgKyAxLCBtYXRjaC5sYXN0SW5kZXhPZignfScpKTtcbiAgICAgICAgICAgICAgICBsZXQgZXhwcmVzc2lvblZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGV4cHJlc2lvbkNvbnRlbnQuc3RhcnRzV2l0aCgnJGV2ZW50LmRhdGEnKSAmJiAhVXRpbHMuaXNOdWxsKGV2ZW50RGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BzID0gZXhwcmVzaW9uQ29udGVudC5yZXBsYWNlKCckZXZlbnQuZGF0YS4nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdm8gPSBldmVudERhdGE7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2byA9IHZvW3Byb3BdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvblZhbHVlID0gdm87XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvblZhbHVlID0gdGhpcy5yZXNvbHZlRXhwcmVzc2lvblZhbHVlKGV4cHJlc2lvbkNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZShtYXRjaCwgZXhwcmVzc2lvblZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9O1xuXG4gICAgcmVzb2x2ZUV4cHJlc3Npb25WYWx1ZSA9IChleHByZXNzaW9uLCBldmVudERhdGEgPSBudWxsKSA9PiB7XG4gICAgICAgIGxldCBwYXJhbUV4cHJlc3Npb24gPSBleHByZXNzaW9uLm1hdGNoKC9cXCgoW14pXSopXFwpLyk7XG4gICAgICAgIGxldCBpc0V2ZW50ID0gZXhwcmVzc2lvbi5zdGFydHNXaXRoKCckZXZlbnQuZGF0YScpO1xuICAgICAgICBsZXQgYmFzZUV4cHJlc3Npb24gPSBpc0V2ZW50ID8gJyRldmVudC5kYXRhJyA6ICFVdGlscy5pc051bGwocGFyYW1FeHByZXNzaW9uKSAmJiBwYXJhbUV4cHJlc3Npb24ubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICBleHByZXNzaW9uLnJlcGxhY2UocGFyYW1FeHByZXNzaW9uWzBdLCAnJykgOiBleHByZXNzaW9uO1xuXG4gICAgICAgIGxldCBleHByZXNzaW9uQ29udGVudCA9IGJhc2VFeHByZXNzaW9uLnN1YnN0cmluZyhiYXNlRXhwcmVzc2lvbi5pbmRleE9mKCd7JykgKyAxLCBiYXNlRXhwcmVzc2lvbi5pbmRleE9mKCd9JykpO1xuICAgICAgICBsZXQgaXNDb21wb25lbnQgPSBiYXNlRXhwcmVzc2lvbi5zdGFydHNXaXRoKCdAI3snKTtcbiAgICAgICAgbGV0IGlzTGliID0gYmFzZUV4cHJlc3Npb24uc3RhcnRzV2l0aCgnQEB7Jyk7XG4gICAgICAgIGxldCB0b2tlbnMgPSBleHByZXNzaW9uQ29udGVudC5zcGxpdCgnLicpO1xuICAgICAgICBsZXQgaWRUb2tlbiA9IHRva2Vuc1swXTtcblxuICAgICAgICBpZiAoaXNDb21wb25lbnQgfHwgaXNFdmVudCkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gaXNFdmVudCA/IGV2ZW50RGF0YSA6IHRoaXMucmVzb2x2ZUNvbXBvbmVudEFwaShleHByZXNzaW9uQ29udGVudCk7XG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbkNsb3N1cmUgPSBpc0V2ZW50ID8gJ2RhdGEuJyA6ICd9Lic7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSBleHByZXNzaW9uLmluZGV4T2YoZXhwcmVzc2lvbkNsb3N1cmUpO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5Q2hhaW4gPSBleHByZXNzaW9uLnN1YnN0cmluZyhpbmRleCArIGV4cHJlc3Npb25DbG9zdXJlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BzID0gcHJvcGVydHlDaGFpbi5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW3Byb3BdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0xpYikge1xuICAgICAgICAgICAgLyppZiAoaWRUb2tlbiA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgICAgICAgICAgaWRUb2tlbiA9IHRoaXMuZ2V0Q3VycmVudFZpZXcoKS5jb25maWcuaWQgKyAnX2xpYic7XG4gICAgICAgICAgICB9Ki9cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlic1tpZFRva2VuXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByZXNzaW9uO1xuICAgIH07XG5cbiAgICBzZXRFeHByZXNzaW9uVmFsdWVzID0gKG9iaiwgZXZlbnREYXRhID0gbnVsbCkgPT4ge1xuICAgICAgICBsZXQgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkob2JqKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IGlzQXJyYXkgPyBbXSA6IHt9O1xuXG4gICAgICAgIE9iamVjdC5rZXlzKG9iailcbiAgICAgICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0JyAmJiBvYmpba2V5XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkW2tleV0gPSB0aGlzLnNldEV4cHJlc3Npb25WYWx1ZXMob2JqW2tleV0sIGV2ZW50RGF0YSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9ialZhbHVlID0gb2JqW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialZhbHVlID0gb2JqVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqVmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24ob2JqVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzY3JpcHRWYWx1ZSA9IGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0KGByZXNvbHZlUGFyYW1fJHtNYXRoLnJhbmRvbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcuJywgJ18nKX1gLCBvYmpWYWx1ZSwgbnVsbCwgbnVsbCwgZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjcmlwdFZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iaktleSA9IGtleSA9PT0gJ3ZhbHVlRXhwcmVzc2lvbicgPyAndmFsdWUnIDoga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRbb2JqS2V5XSA9IHNjcmlwdFZhbHVlICE9PSBudWxsICYmIHNjcmlwdFZhbHVlLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnID8gc2NyaXB0VmFsdWUudmFsdWUgOiBzY3JpcHRWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdXBkYXRlZFtvYmpLZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdXBkYXRlZC50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcHJvY2Vzc2luZyBwYXJhbWV0ZXIgZXhwcmVzc2lvbiA6IFwiICsgb2JqVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkW2tleV0gPSBvYmpWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH07XG5cbiAgICBmaWxsRXZlbnREYXRhVmFsdWUob2JqLCBldmVudERhdGEpIHtcbiAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMob2JqKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbEV2ZW50RGF0YVZhbHVlKHZhbCwgZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPT09ICckZXZlbnQuZGF0YScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gZXZlbnREYXRhO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdmlldyBjb25maWd1cmF0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIGlkXG4gICAgICpcbiAgICAgKi9cbiAgICByZXNvbHZlUGFyYW1ldGVyQ29uZmlnVmFsdWUgPSAoY29uZmlnVmFsdWUsIGV2ZW50RGF0YSkgPT4ge1xuICAgICAgICBpZiAoIWNvbmZpZ1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24oY29uZmlnVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlRXhwcmVzc2lvblZhbHVlKGNvbmZpZ1ZhbHVlLCBldmVudERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGpzb24gPSBKU09OLnN0cmluZ2lmeShjb25maWdWYWx1ZSk7XG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGpzb24ubWF0Y2goVEVNUExBVEVfUkVHRVgpO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChtYXRjaGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldEV4cHJlc3Npb25WYWx1ZXMoY29uZmlnVmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgaXNFeHByZXNzaW9uKG9ialZhbHVlKSB7XG4gICAgICAgIHJldHVybiBvYmpWYWx1ZSAmJiBvYmpWYWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLmluY2x1ZGVzKCckYXBwbGljYXRpb24nKVxuICAgICAgICAgICAgfHwgb2JqVmFsdWUgJiYgb2JqVmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5zdGFydHNXaXRoKCckZXZlbnQuZGF0YScpXG4gICAgICAgICAgICB8fCAhVXRpbHMuaXNOdWxsKG9ialZhbHVlKSAmJiB0eXBlb2Ygb2JqVmFsdWUgPT09ICdzdHJpbmcnICYmICFVdGlscy5pc051bGwob2JqVmFsdWUubWF0Y2goVEVNUExBVEVfUkVHRVgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdmlldyBjb25maWd1cmF0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIGlkXG4gICAgICpcbiAgICAgKi9cbiAgICByZXNvbHZlUGFyYW1ldGVyVmFsdWUgPSAocGFyYW1ldGVyQ29uZmlnLCBldmVudERhdGEgPSBudWxsKSA9PiB7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlckNvbmZpZy5zdGF0aWMpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJDb25maWcudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IHBhcmFtZXRlckNvbmZpZy52YWx1ZS50b1N0cmluZygpO1xuICAgICAgICBsZXQgaXNFdmVudCA9IGV4cHJlc3Npb24uc3RhcnRzV2l0aCgnJGV2ZW50LmRhdGEnKTtcbiAgICAgICAgaWYgKGlzRXZlbnQpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGV2ZW50RGF0YTtcbiAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIGV4cHJlc3Npb24uaW5jbHVkZXMoJ1snKSkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZUluZGV4ID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcoZXhwcmVzc2lvbi5pbmRleE9mKCdbJykgKyAxLCBleHByZXNzaW9uLmluZGV4T2YoJ10nKSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVt2YWx1ZUluZGV4XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVGhpcyBjaGVja3MgaWYgdGhlcmUgaXMgYSByZWZlcmVuY2UgdG8gc29tZSBkYXRhIHByb3BlcnR5XG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbkNsb3N1cmUgPSAnZGF0YS4nO1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gZXhwcmVzc2lvbi5pbmRleE9mKGV4cHJlc3Npb25DbG9zdXJlKTtcbiAgICAgICAgICAgIGlmKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25DbG9zdXJlID0gXCJdLlwiO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZXhwcmVzc2lvbi5pbmRleE9mKGV4cHJlc3Npb25DbG9zdXJlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eUNoYWluID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcoaW5kZXggKyBleHByZXNzaW9uQ2xvc3VyZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGxldCBwcm9wcyA9IHByb3BlcnR5Q2hhaW4uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2YWwgPSBudWxsO1xuXG4gICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1ldGVyQ29uZmlnLnZhbHVlKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTlVMTCBwYXJhbWV0ZXIgdmFsdWUgZXhwcmVzc2lvbiBpbiA6ICcgKyBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJDb25maWcpKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRXhwcmVzc2lvbihwYXJhbWV0ZXJDb25maWcudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWwgPSB0aGlzLnJlc29sdmVQYXJhbWV0ZXJDb25maWdWYWx1ZShwYXJhbWV0ZXJDb25maWcudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBwYXJhbWV0ZXJDb25maWcudmFsdWU7XG4gICAgICAgICAgICB2YWwgPSBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdChgcmVzb2x2ZVBhcmFtXyR7TWF0aC5yYW5kb20oKVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJy4nLCAnXycpfWAsIGV4cHJlc3Npb24sIG51bGwsIG51bGwsIHtkYXRhOiBldmVudERhdGF9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChVdGlscy5pc051bGwodmFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWwpICYmICFVdGlscy5pc051bGwodmFsLmluc3RhbmNlVHlwZSlcbiAgICAgICAgICAgICYmIHZhbC5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJykge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyQ29uZmlnLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdmFsLnR5cGUgPSBwYXJhbWV0ZXJDb25maWcudHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0eXBlID0gbnVsbDtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyQ29uZmlnLnR5cGUpKSB7XG4gICAgICAgICAgICB0eXBlID0gcGFyYW1ldGVyQ29uZmlnLnR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0eXBlID0gdHlwZW9mIHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgVHlwZWRWYWx1ZSh0eXBlLCB2YWwpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgdmFsdWUgdG8gdGhlIHNwZWNpZmllZCB2aWV3J3MgbW9kZWxcbiAgICAgKiBAcGFyYW0ga2V5XG4gICAgICogQHBhcmFtIHZhbHVlXG4gICAgICogQHBhcmFtIHZpZXdJZFxuICAgICAqL1xuICAgIHNldE1vZGVsVmFsdWUgPSAoa2V5LCB2YWx1ZSwgdmlld0lkKSA9PiB7XG4gICAgICAgIHRoaXMuZ2V0Vmlldyh2aWV3SWQpXG4gICAgICAgICAgICAuaGFuZGxlXG4gICAgICAgICAgICAuYXBpXG4gICAgICAgICAgICAuc2V0TW9kZWxWYWx1ZShrZXksIHZhbHVlKTtcbiAgICAgICAgZXZlbnRNYW5hZ2VyLnByb2Nlc3NTeXN0ZW1HZW5lcmF0ZWRTdWJzY3JpcHRpb25zKHZpZXdJZCk7XG4gICAgfTtcblxuICAgIGdldElkID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uTWFuYWdlcic7XG4gICAgfTtcblxuICAgIGVuYWJsZUZvcm1NYXJrZXJzKGVuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5mb3JtTWFya2Vyc0VuYWJsZWQgPSBlbmFibGVkO1xuICAgIH1cblxuICAgIGlzRm9ybU1hcmtlcnNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5mb3JtTWFya2Vyc0VuYWJsZWQ7XG4gICAgfVxuXG4gICAgc2V0RGFzaGJvYXJkVmlldyh2aWV3KSB7XG4gICAgICAgIHRoaXMucHJvcHMuZGFzaGJvYXJkVmlldyA9IHZpZXc7XG4gICAgfVxuXG4gICAgc2V0VXNlckRldGFpbHModXNlckRldGFpbHMpIHtcbiAgICAgICAgdGhpcy5wcm9wcy51c2VyRGV0YWlscyA9IHVzZXJEZXRhaWxzO1xuICAgIH1cblxuICAgIGdldFVzZXJEZXRhaWxzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy51c2VyRGV0YWlscztcbiAgICB9XG5cbiAgICBsb2FkR3JhcGgoaXNQYXJlbnQsIGNvbmZpZywgcGFyYW1ldGVyVmFsdWVzLCB2aWV3Q29udGV4dCkge1xuICAgICAgICB0aGlzLnZpZXdDb250ZXh0W3ZpZXdDb250ZXh0XS5sb2FkR3JhcGgoaXNQYXJlbnQsIGNvbmZpZywgcGFyYW1ldGVyVmFsdWVzKTtcbiAgICB9XG5cbiAgICByZW1vdmVMb2FkZWRHcmFwaCh2aWV3Q29udGV4dCkge1xuICAgICAgICBsZXQgZ3JhcGggPSB0aGlzLnZpZXdDb250ZXh0W3ZpZXdDb250ZXh0XS5yZW1vdmVMb2FkZWRHcmFwaCgpO1xuICAgICAgICBpZiAoZ3JhcGggJiYgZ3JhcGguY29uZmlnLmlzV2luZG93KSB7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZW1pdENvbnRleHRDaGFuZ2VFdmVudChhcHBsaWNhdGlvbkNvbnRleHQsIHt3aW5kb3dWaWV3OiBudWxsfSk7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHQud2luZG93VmlldyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaWduYWxHcmFwaChpZCwgZXZlbnQpIHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy52aWV3Q29udGV4dClcbiAgICAgICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdDb250ZXh0W2tleV0uc2lnbmFsR3JhcGgoaWQsIGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHZpZXdDb250ZXh0XG4gICAgICovXG4gICAgZ2V0UHJldmlvdXNIaXN0b3J5RWxlbWVudCA9ICh2aWV3Q29udGV4dCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dFt2aWV3Q29udGV4dF0uZ2V0UHJldmlvdXNIaXN0b3J5RWxlbWVudCgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiB2aWV3Q29udGV4dFxuICAgICAqL1xuICAgIGdldEN1cnJlbnRHcmFwaCA9ICh2aWV3Q29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgZ3JhcGhzID0gdGhpcy52aWV3Q29udGV4dFt2aWV3Q29udGV4dF0uZ3JhcGhzO1xuICAgICAgICByZXR1cm4gZ3JhcGhzICYmIGdyYXBocy5sZW5ndGggPiAwID8gZ3JhcGhzW2dyYXBocy5sZW5ndGggLSAxXSA6IG51bGw7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIHZpZXdDb250ZXh0XG4gICAgICovXG4gICAgZ2V0VG9wVmlldyA9ICh2aWV3Q29udGV4dCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dFt2aWV3Q29udGV4dF0uZ2V0VG9wVmlldygpO1xuICAgIH07XG59XG5cbmNvbnN0IGluc3RhbmNlID0gbmV3IEFwcGxpY2F0aW9uTWFuYWdlcigpO1xuT2JqZWN0LmZyZWV6ZShpbnN0YW5jZSk7XG5leHBvcnQgZGVmYXVsdCBpbnN0YW5jZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsV0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxD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
|
|
759
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT2JzZXJ2YWJsZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX0V2ZW50IiwiX0V2ZW50VHlwZSIsIl9VdGlscyIsIl9EeW5hbWljSlMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9UeXBlZFZhbHVlIiwiX1NvY2tldE1hbmFnZXIiLCJfVmlld0NvbnRleHQiLCJfaGVscGVycyIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIkFQUF9WQVJJQUJMRSIsImV4cG9ydHMiLCJTT0NLRVRfVkFSSUFCTEUiLCJBVkFUQVJfTElTVEVORVJfVFlQRSIsIkRBU0hCT0FSRF9TVEFURSIsIlNZU1RFTV9FVkVOVCIsIlRFTVBMQVRFX1RPS0VOX1JFR0VYIiwiUmVnRXhwIiwiYXBwbGljYXRpb25Db250ZXh0IiwiQXBwbGljYXRpb25NYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJfdGhpcyIsInN1YnNjcmlwdGlvbiIsIlByb21pc2UiLCJyZXNvbHZlIiwiZXZlbnRNYW5hZ2VyIiwiYWRkQXBwbGljYXRpb25Db250ZXh0U3Vic2NyaXB0aW9uIiwiY29udHJvbGxlciIsInByb3BzIiwiY29uZmlybWF0aW9uRGlhbG9nQ29udHJvbGxlciIsIm5hbWUiLCJsaWIiLCJsaWJzIiwiaGlzdG9yeSIsImFwcGxpY2F0aW9uSGlzdG9yeSIsInZpZXdJZCIsInRpdGxlIiwia2V5cyIsInZpZXdDb250ZXh0IiwiZm9yRWFjaCIsImtleSIsInVwZGF0ZUFwcEJhclRpdGxlIiwiY2xlYXJBbGxFdmVudExpc3RlbmVycyIsImNsZWFyIiwiZmlsZUNhY2hlIiwic3BsaWNlIiwibGVuZ3RoIiwiZG9tYWluIiwiZmlsZUNhY2hlRWxlbWVudCIsImZpbGUiLCJVdGlscyIsImlzTnVsbCIsImNvbnNvbGUiLCJlcnJvciIsImZpbGVEb21haW5DYWNoZSIsImdldEZpbGVEb21haW5DYWNoZSIsImZpbGVzIiwicHVzaCIsImNhY2hlZEZpbGUiLCJkb21haW5GaWxlIiwiY29ycmVsYXRpb25JZCIsImNvbnRlbnQiLCJ2YWx1ZXMiLCJwdWJsaXNoIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiZW1pdENvbnRleHRDaGFuZ2VFdmVudCIsInZpZXciLCJwYXRoIiwiZGFzaGJvYXJkIiwiYWRkVmlldyIsImNsb3NlQWxsVmlld3MiLCJmb3J3YXJkIiwibWFuYWdlcklkIiwicHJlc2VydmVXaW5kb3ciLCJ3aW5kb3dWaWV3Iiwidmlld0NvbnRleHRFbGVtZW50IiwiY2xvc2VQb3B1cFZpZXciLCJnZXRWaWV3IiwiY2xvc2VWaWV3IiwiaWQiLCJoYW5kbGUiLCJhcGkiLCJfdmlldyRoYW5kbGUiLCJnZXRDaGlsZCIsIl92aWV3JGhhbmRsZTIiLCJncmFwaHMiLCJncmFwaCIsImdldEdyYXBocyIsInZpZXdzIiwiZ2V0Vmlld3MiLCJjb21wb25lbnQiLCJnZXRWaWV3Q29tcG9uZW50IiwidGVtcGxhdGUiLCJldmVudERhdGEiLCJtYXRjaGVzIiwibWF0Y2giLCJleHByZXNpb25Db250ZW50Iiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsImxhc3RJbmRleE9mIiwiZXhwcmVzc2lvblZhbHVlIiwic3RhcnRzV2l0aCIsInJlcGxhY2UiLCJzcGxpdCIsInZvIiwicHJvcCIsInJlc29sdmVFeHByZXNzaW9uVmFsdWUiLCJleHByZXNzaW9uIiwicGFyYW1FeHByZXNzaW9uIiwiaXNFdmVudCIsImJhc2VFeHByZXNzaW9uIiwiZXhwcmVzc2lvbkNvbnRlbnQiLCJpc0NvbXBvbmVudCIsImlzTGliIiwidG9rZW5zIiwiaWRUb2tlbiIsInJlc29sdmVDb21wb25lbnRBcGkiLCJleHByZXNzaW9uQ2xvc3VyZSIsImluZGV4IiwicHJvcGVydHlDaGFpbiIsIm9iaiIsImlzQXJyYXkiLCJBcnJheSIsInVwZGF0ZWQiLCJzZXRFeHByZXNzaW9uVmFsdWVzIiwib2JqVmFsdWUiLCJpc0V4cHJlc3Npb24iLCJzY3JpcHRWYWx1ZSIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHQiLCJjb25jYXQiLCJNYXRoIiwicmFuZG9tIiwidG9TdHJpbmciLCJvYmpLZXkiLCJpbnN0YW5jZVR5cGUiLCJ0eXBlIiwiY29uZmlnVmFsdWUiLCJqc29uIiwiSlNPTiIsInN0cmluZ2lmeSIsIlRFTVBMQVRFX1JFR0VYIiwicGFyYW1ldGVyQ29uZmlnIiwic3RhdGljIiwiaW5jbHVkZXMiLCJ2YWx1ZUluZGV4IiwidmFsIiwicmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlIiwiZGF0YSIsIlR5cGVkVmFsdWUiLCJzZXRNb2RlbFZhbHVlIiwicHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMiLCJnZXRQcmV2aW91c0hpc3RvcnlFbGVtZW50IiwiZ2V0VG9wVmlldyIsImluc3RhbmNlIiwibWFpbiIsIlZpZXdDb250ZXh0Iiwid2luZG93IiwicG9wdXAiLCJsaXN0ZW5lcnMiLCJnZXRJZCIsInJlZnJlc2hVc2VyQXZhdGFyIiwiYXZhdGFyIiwiYWxlcnQiLCJtZXNzYWdlIiwibWVzc2FnZVR5cGUiLCJyZW1vdmVMb2FkZWRHcmFwaCIsInNldEhhc0FjdGl2ZU1lZXRpbmciLCJoYXNBY3RpdmVNZWV0aW5nIiwiZ2V0QWN0aXZlTWVldGluZ0tleSIsImdldFVzZXJEZXRhaWxzIiwiZmlyZUV2ZW50IiwiZXZlbnRUeXBlIiwiZXZlbnQiLCJFdmVudCIsInNvdXJjZSIsInVwZGF0ZUNvbnRleHQiLCJlbWl0U29ja2V0RXZlbnQiLCJzb2NrZXRNYW5hZ2VyIiwiZW1pdEV2ZW50Iiwic2V0QWN0aXZlVGVuYW50IiwidGVuYW50IiwiZ2V0QWN0aXZlVGVuYW50IiwiZ2V0VW5pcXVlT3JnRm9yUm9sZSIsInJvbGUiLCJzZXREYXNoYm9hcmRTdGF0ZSIsImRhc2hib2FyZFN0YXRlIiwiZ2V0RGFzaGJvYXJkU3RhdGUiLCJhcmciLCJwcm90b3R5cGUiLCJwcm9maWxlIiwicGFyc2UiLCJyb2xlcyIsIm9yZ2FuaXNhdGlvbnMiLCJmaWx0ZXIiLCJvcmciLCJtYXAiLCJjb2RlIiwiRXJyb3IiLCJuYXZpZ2F0ZSIsIm5hdmlnYXRvciIsInNldERhc2hib2FyZFNldHRpbmdzIiwiZGFzaGJvYXJkU2V0dGluZ3MiLCJzdGF0ZSIsImxpc3RlbmVyIiwibG9nIiwiaGFuZGxlciIsImdldERhc2hib2FyZFNldHRpbmdzIiwic2V0TmF2aWdhdG9yIiwic2V0QWN0aXZlTWVldGluZ0tleSIsImFjdGl2ZU1lZXRpbmdLZXkiLCJpc1dpbmRvd09wZW4iLCJzZXRTZXJ2aWNlQXBpUGF0aCIsInNlcnZpY2VBcGlQYXRoIiwiZ2V0U2VydmljZUFwaVBhdGgiLCJzZXRVSUNvbmZpZ1BhdGgiLCJ1aUNvbmZpZ1BhdGgiLCJzZXRDb250ZXh0Um9vdCIsImNvbnRleHRSb290IiwiZ2V0Q29udGV4dFJvb3QiLCJnZXRVSUNvbmZpZ1BhdGgiLCJzZXRGaWxlc0FwaVBhdGgiLCJmaWxlc0FwaVBhdGgiLCJnZXRGaWxlc0FwaVBhdGgiLCJhZGRBcHBsaWNhdGlvbkxpc3RlbmVyIiwicmVtb3ZlQXBwbGljYXRpb25MaXN0ZW5lciIsImNvbmZpZyIsIkV2ZW50VHlwZSIsIk1FU1NBR0VfQVJSSVZFRCIsInNldEFwcGxpY2F0aW9uVGhlbWVDb2xvcnMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5IiwicHJpbWFyeUNvbG9yIiwic2Vjb25kYXJ5Q29sb3IiLCJnZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvciIsImdldEFwcGxpY2F0aW9uU2Vjb25kYXJ5Q29sb3IiLCJvcGVuQ29uZmlybURpYWxvZyIsInJlc3VsdENhbGxiYWNrIiwib3BlbkRpYWxvZyIsImV4ZWN1dGUiLCJyZXN1bHQiLCJvcGVuUG9wdXBWaWV3Iiwib3BlbldpbmRvd1ZpZXciLCJmaWxsRXZlbnREYXRhVmFsdWUiLCJlbmFibGVGb3JtTWFya2VycyIsImVuYWJsZWQiLCJmb3JtTWFya2Vyc0VuYWJsZWQiLCJpc0Zvcm1NYXJrZXJzRW5hYmxlZCIsInNldERhc2hib2FyZFZpZXciLCJkYXNoYm9hcmRWaWV3Iiwic2V0VXNlckRldGFpbHMiLCJ1c2VyRGV0YWlscyIsImxvYWRHcmFwaCIsImlzUGFyZW50IiwicGFyYW1ldGVyVmFsdWVzIiwiaXNXaW5kb3ciLCJzaWduYWxHcmFwaCIsImZyZWV6ZSIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2xpYi9BcHBsaWNhdGlvbk1hbmFnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4vZXZlbnQvRXZlbnQnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5pbXBvcnQgZHluYW1pY0pTLCB7VEVNUExBVEVfUkVHRVh9IGZyb20gJy4vRHluYW1pY0pTJztcbmltcG9ydCBUeXBlZFZhbHVlIGZyb20gJy4vVHlwZWRWYWx1ZSc7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tIFwiLi9jb21wb25lbnRzL1NvY2tldE1hbmFnZXJcIjtcbmltcG9ydCB7Vmlld0NvbnRleHR9IGZyb20gXCIuL1ZpZXdDb250ZXh0XCI7XG5pbXBvcnQge2lzQXJyYXl9IGZyb20gXCJycnVsZS9kaXN0L2VzbS9oZWxwZXJzXCI7XG5cbmV4cG9ydCBjb25zdCBBUFBfVkFSSUFCTEUgPSAnX19BUFBMSUNBVElPTl9PVUlfU1lTX1ZBUl9fJztcbmV4cG9ydCBjb25zdCBTT0NLRVRfVkFSSUFCTEUgPSAnX19TT0NLRVRfVkFSSUFCTEVfT1VJX1NZU19WQVJfXyc7XG5leHBvcnQgY29uc3QgQVZBVEFSX0xJU1RFTkVSX1RZUEUgPSAnQVZBVEFSX0xJU1RFTkVSJztcbmV4cG9ydCBjb25zdCBEQVNIQk9BUkRfU1RBVEUgPSAnREFTSEJPQVJEX1NUQVRFJztcbmV4cG9ydCBjb25zdCBTWVNURU1fRVZFTlQgPSAnU1lTVEVNX0VWRU5UJztcbmV4cG9ydCBjb25zdCBURU1QTEFURV9UT0tFTl9SRUdFWCA9IG5ldyBSZWdFeHAoJygoWyRdezF9W3tdezF9KSgoW2EtekEtWjAtOV8kLkAje31bXFxcXF1dKikrKXsxfShbfV17MX0pKSsnLCAnZycpO1xuXG5jb25zdCBhcHBsaWNhdGlvbkNvbnRleHQgPSB7fTtcblxuY2xhc3MgQXBwbGljYXRpb25NYW5hZ2VyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgaWYgKCFBcHBsaWNhdGlvbk1hbmFnZXIuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgbWFpbjogbmV3IFZpZXdDb250ZXh0KCdtYWluJyksXG4gICAgICAgICAgICAgICAgd2luZG93OiBuZXcgVmlld0NvbnRleHQoJ3dpbmRvdycpLFxuICAgICAgICAgICAgICAgIGRhc2hib2FyZDogbmV3IFZpZXdDb250ZXh0KCdkYXNoYm9hcmQnKSxcbiAgICAgICAgICAgICAgICBwb3B1cDogbmV3IFZpZXdDb250ZXh0KCdwb3B1cCcpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzID0gW107XG4gICAgICAgICAgICB0aGlzLmxpYnMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuZmlsZUNhY2hlID0gW107XG4gICAgICAgICAgICB0aGlzLmFwaSA9IHtcbiAgICAgICAgICAgICAgICBnZXQgaWQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRJZCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaFVzZXJBdmF0YXIoYXZhdGFyKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnJlZnJlc2hVc2VyQXZhdGFyKGF2YXRhcik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhbGVydCh2aWV3SWQsIG1lc3NhZ2UsIG1lc3NhZ2VUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmFsZXJ0KHZpZXdJZCwgbWVzc2FnZSwgbWVzc2FnZVR5cGUsKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlbW92ZUxvYWRlZEdyYXBoKHZpZXdDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnJlbW92ZUxvYWRlZEdyYXBoKHZpZXdDb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldEhhc0FjdGl2ZU1lZXRpbmcoaGFzQWN0aXZlTWVldGluZykge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5zZXRIYXNBY3RpdmVNZWV0aW5nKGhhc0FjdGl2ZU1lZXRpbmcpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGFzQWN0aXZlTWVldGluZygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhhc0FjdGl2ZU1lZXRpbmcoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldEFjdGl2ZU1lZXRpbmdLZXkoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRBY3RpdmVNZWV0aW5nS2V5KCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRVc2VyRGV0YWlscygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFVzZXJEZXRhaWxzKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbG9zZVBvcHVwVmlldygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmNsb3NlUG9wdXBWaWV3KCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmaXJlRXZlbnQoZXZlbnRUeXBlLCBldmVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChldmVudFR5cGUsIG5ldyBFdmVudChldmVudC5zb3VyY2UsIGV2ZW50LnZpZXdJZCwgZXZlbnQuZGF0YSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdXBkYXRlQ29udGV4dCh2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnVwZGF0ZUNvbnRleHQodmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVtaXRTb2NrZXRFdmVudChldmVudFR5cGUsIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvY2tldE1hbmFnZXIuZW1pdEV2ZW50KGV2ZW50VHlwZSwgZGF0YSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVUZW5hbnQodGVuYW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnNldEFjdGl2ZVRlbmFudCh0ZW5hbnQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0QWN0aXZlVGVuYW50KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0QWN0aXZlVGVuYW50KCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRVbmlxdWVPcmdGb3JSb2xlKHJvbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFVuaXF1ZU9yZ0ZvclJvbGUocm9sZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXREYXNoYm9hcmRTdGF0ZShkYXNoYm9hcmRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5zZXREYXNoYm9hcmRTdGF0ZShkYXNoYm9hcmRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXREYXNoYm9hcmRTdGF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldERhc2hib2FyZFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEFwcGxpY2F0aW9uTWFuYWdlci5pbnN0YW5jZSA9IHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQXBwbGljYXRpb25NYW5hZ2VyLmluc3RhbmNlO1xuICAgIH1cblxuICAgIGdldFVuaXF1ZU9yZ0ZvclJvbGUocm9sZSkge1xuICAgICAgICBsZXQgcHJvZmlsZSA9IEpTT04ucGFyc2UodGhpcy5nZXRVc2VyRGV0YWlscygpLnByb2ZpbGUpO1xuICAgICAgICBsZXQgcm9sZXMgPSBwcm9maWxlLm9yZ2FuaXNhdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIob3JnID0+IG9yZy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkgLy8gRmlsdGVyIG9yZ2FuaXNhdGlvbnMgYnkgcm9sZVxuICAgICAgICAgICAgLm1hcChvcmcgPT4gb3JnLmNvZGUpO1xuXG4gICAgICAgIGlmIChyb2xlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBtb3JlIHRoYW4gb25lIG9yZ2FuaXNhdGlvbiBmb3Igcm9sZSA6IFtcIiArIHJvbGUgKyBcIl1cIilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb2xlc1swXTtcbiAgICB9XG5cbiAgICBhZGRBcHBsaWNhdGlvbkNvbnRleHRTdWJzY3JpcHRpb24gPSAoc3Vic2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmFkZEFwcGxpY2F0aW9uQ29udGV4dFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgcmVzb2x2ZShhcHBsaWNhdGlvbkNvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdGUocGF0aCkge1xuICAgICAgICB0aGlzLnByb3BzLm5hdmlnYXRvcihwYXRoKTtcbiAgICB9XG5cbiAgICBzZXREYXNoYm9hcmRTZXR0aW5ncyhkYXNoYm9hcmRTZXR0aW5ncykge1xuICAgICAgICB0aGlzLnByb3BzLmRhc2hib2FyZFNldHRpbmdzID0gZGFzaGJvYXJkU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgc2V0RGFzaGJvYXJkU3RhdGUoc3RhdGUpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5kYXNoYm9hcmRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhsaXN0ZW5lcik7XG4gICAgICAgICAgICBpZiAobGlzdGVuZXIudHlwZSA9PT0gREFTSEJPQVJEX1NUQVRFKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlcihzdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXNoYm9hcmRTZXR0aW5ncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZGFzaGJvYXJkU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgc2V0QWN0aXZlVGVuYW50KHRlbmFudCkge1xuICAgICAgICB0aGlzLnByb3BzLnRlbmFudCA9IHRlbmFudDtcbiAgICB9XG5cbiAgICBnZXRBY3RpdmVUZW5hbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnRlbmFudDtcbiAgICB9XG5cbiAgICBzZXROYXZpZ2F0b3IobmF2aWdhdG9yKSB7XG4gICAgICAgIHRoaXMucHJvcHMubmF2aWdhdG9yID0gbmF2aWdhdG9yO1xuICAgIH1cblxuICAgIHNldEFjdGl2ZU1lZXRpbmdLZXkoYWN0aXZlTWVldGluZ0tleSkge1xuICAgICAgICB0aGlzLnByb3BzLmFjdGl2ZU1lZXRpbmdLZXkgPSBhY3RpdmVNZWV0aW5nS2V5O1xuICAgIH1cblxuICAgIGdldEFjdGl2ZU1lZXRpbmdLZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmFjdGl2ZU1lZXRpbmdLZXk7XG4gICAgfVxuXG4gICAgc2V0SGFzQWN0aXZlTWVldGluZyhoYXNBY3RpdmVNZWV0aW5nKSB7XG4gICAgICAgIHRoaXMucHJvcHMuaGFzQWN0aXZlTWVldGluZyA9IGhhc0FjdGl2ZU1lZXRpbmc7XG4gICAgfVxuXG4gICAgaGFzQWN0aXZlTWVldGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuaGFzQWN0aXZlTWVldGluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcnVlIHdoZW4gdGhlIGZsb2F0aW5nIFdpbmRvd1ZpZXdQb3J0IG92ZXJsYXkgY3VycmVudGx5IGhvc3RzIGEgdmlldy5cbiAgICAgKiBVc2VkIHRvIGRlY2lkZSB3aGV0aGVyIGEgbWVudSBuYXZpZ2F0aW9uIHNob3VsZCBhdXRvLXBpbiB0aGUgd2luZG93LlxuICAgICAqL1xuICAgIGlzV2luZG93T3BlbigpIHtcbiAgICAgICAgcmV0dXJuIGFwcGxpY2F0aW9uQ29udGV4dC53aW5kb3dWaWV3ICE9IG51bGw7XG4gICAgfVxuXG4gICAgc2V0U2VydmljZUFwaVBhdGgoc2VydmljZUFwaVBhdGgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zZXJ2aWNlQXBpUGF0aCA9IHNlcnZpY2VBcGlQYXRoO1xuICAgIH1cblxuICAgIGdldFNlcnZpY2VBcGlQYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZXJ2aWNlQXBpUGF0aDtcbiAgICB9XG5cbiAgICBzZXRVSUNvbmZpZ1BhdGgodWlDb25maWdQYXRoKSB7XG4gICAgICAgIHRoaXMucHJvcHMudWlDb25maWdQYXRoID0gdWlDb25maWdQYXRoO1xuICAgIH1cblxuICAgIHNldENvbnRleHRSb290KGNvbnRleHRSb290KSB7XG4gICAgICAgIHRoaXMucHJvcHMuY29udGV4dFJvb3QgPSBjb250ZXh0Um9vdDtcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0Um9vdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY29udGV4dFJvb3Q7XG4gICAgfVxuXG4gICAgZ2V0VUlDb25maWdQYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy51aUNvbmZpZ1BhdGg7XG4gICAgfVxuXG4gICAgc2V0RmlsZXNBcGlQYXRoKGZpbGVzQXBpUGF0aCkge1xuICAgICAgICB0aGlzLnByb3BzLmZpbGVzQXBpUGF0aCA9IGZpbGVzQXBpUGF0aDtcbiAgICB9XG5cbiAgICBnZXRGaWxlc0FwaVBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmZpbGVzQXBpUGF0aDtcbiAgICB9XG5cbiAgICBhZGRBcHBsaWNhdGlvbkxpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHJlbW92ZUFwcGxpY2F0aW9uTGlzdGVuZXIoaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVycykgcmV0dXJuO1xuICAgICAgICAvLyBSZXZlcnNlLWl0ZXJhdGUgKyBzcGxpY2Ug4oCUIGhhbmRsZXMgZHVwbGljYXRlIGlkcyB3aXRob3V0IGluZGV4XG4gICAgICAgIC8vIGRyaWZ0LCBhbmQgbXV0YXRlcyB0aGUgZXhpc3RpbmcgYXJyYXkgKHRoZSBzaW5nbGV0b24gaXNcbiAgICAgICAgLy8gT2JqZWN0LmZyZWV6ZSdkLCBzbyB3ZSBjYW4ndCByZWFzc2lnbiB0aGlzLmxpc3RlbmVycykuXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXJzW2ldLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFsZXJ0KHZpZXdJZCwgbWVzc2FnZSwgbWVzc2FnZVR5cGUpIHtcbiAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHRoaXMsIHRoaXMuZ2V0Vmlldyh2aWV3SWQpLmNvbmZpZy5pZCwge1xuICAgICAgICAgICAgbWVzc2FnZVR5cGU6IG1lc3NhZ2VUeXBlLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVxuICAgICAgICB9KTtcblxuICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICByZWZyZXNoVXNlckF2YXRhcihhdmF0YXIpIHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgICAgICAgaWYgKGxpc3RlbmVyLnR5cGUgPT09IEFWQVRBUl9MSVNURU5FUl9UWVBFKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlcihhdmF0YXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q29uZmlybURpYWxvZ0hhbmRsZXIgPSAoY29udHJvbGxlcikgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLmNvbmZpcm1hdGlvbkRpYWxvZ0NvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuICAgIH07XG5cbiAgICBzZXRBcHBsaWNhdGlvblRoZW1lQ29sb3JzKHByaW1hcnksIHNlY29uZGFyeSkge1xuICAgICAgICB0aGlzLnByb3BzLnByaW1hcnlDb2xvciA9IHByaW1hcnk7XG4gICAgICAgIHRoaXMucHJvcHMuc2Vjb25kYXJ5Q29sb3IgPSBzZWNvbmRhcnk7XG4gICAgfVxuXG4gICAgZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnByaW1hcnlDb2xvcjtcbiAgICB9XG5cbiAgICBnZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB9XG5cbiAgICBvcGVuQ29uZmlybURpYWxvZyhtZXNzYWdlLCByZXN1bHRDYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jb25maXJtYXRpb25EaWFsb2dDb250cm9sbGVyLm9wZW5EaWFsb2cobWVzc2FnZSwge1xuICAgICAgICAgICAgZXhlY3V0ZTogKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBvcGVuUG9wdXBWaWV3KHZpZXcpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5jb25maXJtYXRpb25EaWFsb2dDb250cm9sbGVyLm9wZW5Qb3B1cFZpZXcodmlldyk7XG4gICAgfVxuXG4gICAgY2xvc2VQb3B1cFZpZXcoKSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRleHQucG9wdXAuY2xvc2VBbGxWaWV3cygpO1xuICAgICAgICB0aGlzLnByb3BzLmNvbmZpcm1hdGlvbkRpYWxvZ0NvbnRyb2xsZXIuY2xvc2VQb3B1cFZpZXcoKTtcbiAgICB9XG5cbiAgICBvcGVuV2luZG93Vmlldyh2aWV3KSB7XG4gICAgICAgIGV2ZW50TWFuYWdlci5lbWl0Q29udGV4dENoYW5nZUV2ZW50KGFwcGxpY2F0aW9uQ29udGV4dCwge3dpbmRvd1ZpZXc6IHZpZXd9KTtcbiAgICAgICAgYXBwbGljYXRpb25Db250ZXh0LndpbmRvd1ZpZXcgPSB2aWV3O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlZ2lzdGVycyBhIGxpYnJhcnlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lXG4gICAgICogQHBhcmFtIGxpYlxuICAgICAqL1xuICAgIHJlZ2lzdGVyTGlicmFyeSA9IChuYW1lLCBsaWIpID0+IHtcbiAgICAgICAgdGhpcy5saWJzW25hbWVdID0gbGliO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBzZXQgYXBwbGljYXRpb24gaGlzdG9yeVxuICAgICAqXG4gICAgICogQHBhcmFtIGhpc3RvcnlcbiAgICAgKi9cbiAgICBzZXRBcHBsaWNhdGlvbkhpc3RvcnkgPSAoaGlzdG9yeSkgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLmFwcGxpY2F0aW9uSGlzdG9yeSA9IGhpc3Rvcnk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGdldCBhcHBsaWNhdGlvbiBoaXN0b3J5XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhcHBsaWNhdGlvbiBoaXN0b3J5XG4gICAgICovXG4gICAgZ2V0QXBwbGljYXRpb25IaXN0b3J5ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5hcHBsaWNhdGlvbkhpc3Rvcnk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIHVwZGF0ZSBhcHBiYXIgdGl0bGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aWV3SWRcbiAgICAgKiBAcGFyYW0gdGl0bGVcbiAgICAgKi9cbiAgICB1cGRhdGVBcHBCYXJUaXRsZSA9ICh2aWV3SWQsIHRpdGxlKSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMudmlld0NvbnRleHQpXG4gICAgICAgICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3Q29udGV4dFtrZXldLnVwZGF0ZUFwcEJhclRpdGxlKHZpZXdJZCwgdGl0bGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGNsZWFycyBhbGwgdmlld3NcbiAgICAgKlxuICAgICAqL1xuICAgIGNsZWFyID0gKCkgPT4ge1xuICAgICAgICBldmVudE1hbmFnZXIuY2xlYXJBbGxFdmVudExpc3RlbmVycygpO1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnZpZXdDb250ZXh0KVxuICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHRba2V5XS5jbGVhcigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5maWxlQ2FjaGUuc3BsaWNlKDAsIHRoaXMuZmlsZUNhY2hlLmxlbmd0aCk7XG4gICAgfTtcblxuICAgIGdldEZpbGVEb21haW5DYWNoZSA9IChkb21haW4pID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlQ2FjaGVFbGVtZW50IG9mIHRoaXMuZmlsZUNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoZmlsZUNhY2hlRWxlbWVudC5kb21haW4gPT09IGRvbWFpbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlQ2FjaGVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGFkZCB2aWV3IGNvbmZpZ3VyYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkb21haW5cbiAgICAgKiBAcGFyYW0gZmlsZVxuICAgICAqL1xuICAgIGFkZEZpbGUgPSAoZG9tYWluLCBmaWxlKSA9PiB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwoZG9tYWluKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUGxlYXNlIHNwZWNpZnkgZmlsZSBkb21haW4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaWxlRG9tYWluQ2FjaGUgPSB0aGlzLmdldEZpbGVEb21haW5DYWNoZShkb21haW4pO1xuICAgICAgICBpZiAoZmlsZURvbWFpbkNhY2hlID09PSBudWxsKSB7XG4gICAgICAgICAgICBmaWxlRG9tYWluQ2FjaGUgPSB7fTtcbiAgICAgICAgICAgIGZpbGVEb21haW5DYWNoZS5kb21haW4gPSBkb21haW47XG4gICAgICAgICAgICBmaWxlRG9tYWluQ2FjaGUuZmlsZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZmlsZUNhY2hlLnB1c2goZmlsZURvbWFpbkNhY2hlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjYWNoZWRGaWxlID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBkb21haW5GaWxlIG9mIGZpbGVEb21haW5DYWNoZS5maWxlcykge1xuICAgICAgICAgICAgaWYgKGRvbWFpbkZpbGUuY29ycmVsYXRpb25JZCA9PT0gZmlsZS5jb3JyZWxhdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgY2FjaGVkRmlsZSA9IGRvbWFpbkZpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FjaGVkRmlsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZmlsZURvbWFpbkNhY2hlLmZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRGaWxlLmNvbnRlbnQgPSBmaWxlLmNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXBkYXRlQ29udGV4dCA9ICh2YWx1ZXMsIHB1Ymxpc2ggPSB0cnVlKSA9PiB7XG4gICAgICAgIGlmKHB1Ymxpc2gpIHtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5lbWl0Q29udGV4dENoYW5nZUV2ZW50KGFwcGxpY2F0aW9uQ29udGV4dCwgdmFsdWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlcylcbiAgICAgICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHRba2V5XSA9IHZhbHVlc1trZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGFkZCB2aWV3IGNvbmZpZ3VyYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aWV3IHRoZSBsaXN0ZW5lciB0byBiZSBhZGRlZFxuICAgICAqIEBwYXJhbSBwYXRoXG4gICAgICogQHBhcmFtIGZvcndhcmRcbiAgICAgKi9cbiAgICBhZGREYXNoYm9hcmRWaWV3ID0gKHZpZXcsIHBhdGgpID0+IHtcbiAgICAgICAgdGhpcy52aWV3Q29udGV4dC5kYXNoYm9hcmQuYWRkVmlldyh2aWV3KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjbGVhciBkYXNoYm9hcmQgdmlldyBjb25maWd1cmF0aW9uXG4gICAgICpcbiAgICAgKi9cbiAgICBjbGVhckRhc2hib2FyZFZpZXdzID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnZpZXdDb250ZXh0LmRhc2hib2FyZC5jbG9zZUFsbFZpZXdzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIHZpZXcgY29uZmlndXJhdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIHZpZXcgdGhlIGxpc3RlbmVyIHRvIGJlIGFkZGVkXG4gICAgICogQHBhcmFtIHBhdGhcbiAgICAgKiBAcGFyYW0gZm9yd2FyZFxuICAgICAqIEBwYXJhbSBtYW5hZ2VySWRcbiAgICAgKi9cbiAgICBhZGRWaWV3ID0gKHZpZXcsIHBhdGgsIGZvcndhcmQsIG1hbmFnZXJJZCkgPT4ge1xuICAgICAgICB0aGlzLnZpZXdDb250ZXh0W21hbmFnZXJJZF0uYWRkVmlldyh2aWV3LCBwYXRoLCBmb3J3YXJkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogY2xvc2VzIGFsbCB2aWV3c1xuICAgICAqXG4gICAgICovXG4gICAgY2xvc2VBbGxWaWV3cyA9IChwcmVzZXJ2ZVdpbmRvdyA9IGZhbHNlKSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMudmlld0NvbnRleHQpXG4gICAgICAgICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiBwcmVzZXJ2ZVdpbmRvdyBpcyBzZXQsIGxlYXZlIHRoZSBmbG9hdGluZyBXaW5kb3dWaWV3UG9ydCBvdmVybGF5IGludGFjdCDigJQgaXQgaXNcbiAgICAgICAgICAgICAgICAvLyBhIHNlcGFyYXRlIHZpZXdwb3J0IGluIG91ciBtdWx0aS12aWV3cG9ydCBkYXNoYm9hcmQgYW5kIG11c3Qgc3Vydml2ZSBhIG1haW4tdmlld1xuICAgICAgICAgICAgICAgIC8vIG5hdmlnYXRpb24gKGUuZy4gbGF1bmNoaW5nIHRoZSBkYXNoYm9hcmQgZnJvbSB0aGUgbWVudSkuXG4gICAgICAgICAgICAgICAgaWYgKHByZXNlcnZlV2luZG93ICYmIGtleSA9PT0gJ3dpbmRvdycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHRba2V5XS5jbG9zZUFsbFZpZXdzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXByZXNlcnZlV2luZG93KSB7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZW1pdENvbnRleHRDaGFuZ2VFdmVudChhcHBsaWNhdGlvbkNvbnRleHQsIHt3aW5kb3dWaWV3OiBudWxsfSk7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHQud2luZG93VmlldyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogY2xvc2VzIHRoZSBzcGVjaWZpZWQgdmlld1xuICAgICAqXG4gICAgICogQHBhcmFtIHZpZXdJZCB0aGUgbGlzdGVuZXIgdG8gYmUgYWRkZWRcbiAgICAgKiBAcGFyYW0gZm9yd2FyZFxuICAgICAqL1xuICAgIGNsb3NlVmlldyA9ICh2aWV3SWQsIGZvcndhcmQpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy52aWV3Q29udGV4dCkpIHtcbiAgICAgICAgICAgIGxldCB2aWV3Q29udGV4dEVsZW1lbnQgPSB0aGlzLnZpZXdDb250ZXh0W2tleV07XG5cbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdwb3B1cCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmNvbmZpcm1hdGlvbkRpYWxvZ0NvbnRyb2xsZXIuY2xvc2VQb3B1cFZpZXcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlldyA9IHZpZXdDb250ZXh0RWxlbWVudC5nZXRWaWV3KCk7XG4gICAgICAgICAgICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRleHRFbGVtZW50LmNsb3NlVmlldyh2aWV3SWQsIGZvcndhcmQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnd2luZG93Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmVtaXRDb250ZXh0Q2hhbmdlRXZlbnQoYXBwbGljYXRpb25Db250ZXh0LCB7d2luZG93VmlldzogbnVsbH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25Db250ZXh0LndpbmRvd1ZpZXcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB2aWV3IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHBhcnRpY3VsYXIgaWRcbiAgICAgKlxuICAgICAqL1xuICAgIGdldFZpZXcgPSAoaWQpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy52aWV3Q29udGV4dCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdDb250ZXh0W2tleV0uZ2V0VmlldyhpZCk7XG4gICAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgICAgIHJldHVybiB2aWV3O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGdldFZpZXdDb21wb25lbnQgPSAodmlldywgaWQpID0+IHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmlldykgJiYgIVV0aWxzLmlzTnVsbCh2aWV3LmhhbmRsZSkgJiYgIVV0aWxzLmlzTnVsbCh2aWV3LmhhbmRsZS5hcGkpKSB7XG4gICAgICAgICAgICBpZiAoaWQgPT09IHZpZXcuaGFuZGxlLmFwaS5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2aWV3LmhhbmRsZS5hcGk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2aWV3LmhhbmRsZT8uYXBpPy5nZXRDaGlsZCkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSB2aWV3LmhhbmRsZT8uYXBpPy5nZXRDaGlsZChpZCk7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlLmFwaTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaWQgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlldy5oYW5kbGUuYXBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdmlldyBjb25maWd1cmF0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIGlkXG4gICAgICpcbiAgICAgKi9cbiAgICByZXNvbHZlQ29tcG9uZW50QXBpID0gKGlkKSA9PiB7XG4gICAgICAgIGlmIChBUFBfVkFSSUFCTEUgPT09IGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcGk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZ3JhcGhzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudmlld0NvbnRleHQpKSB7XG4gICAgICAgICAgICBsZXQgdmlld0NvbnRleHQgPSB0aGlzLnZpZXdDb250ZXh0W2tleV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyYXBoIG9mIHZpZXdDb250ZXh0LmdldEdyYXBocygpKSB7XG4gICAgICAgICAgICAgICAgZ3JhcGhzLnB1c2goZ3JhcGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBncmFwaCBvZiBncmFwaHMpIHtcbiAgICAgICAgICAgIGlmIChncmFwaC5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JhcGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmlld3MgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy52aWV3Q29udGV4dCkpIHtcbiAgICAgICAgICAgIGxldCB2aWV3Q29udGV4dCA9IHRoaXMudmlld0NvbnRleHRba2V5XTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmlldyBvZiB2aWV3Q29udGV4dC5nZXRWaWV3cygpKSB7XG4gICAgICAgICAgICAgICAgdmlld3MucHVzaCh2aWV3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdmlldyBvZiB2aWV3cykge1xuICAgICAgICAgICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuZ2V0Vmlld0NvbXBvbmVudCh2aWV3LCBpZCk7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQb3B1bGF0ZSBhbGwgcGxhY2UgaG9sZGVycyBpbiB0aGUgZ2l2ZW4gdGVtcGxhdGVcbiAgICAgKlxuICAgICAqL1xuICAgIHBvcHVsYXRlVGVtcGxhdGUgPSAodGVtcGxhdGUsIGV2ZW50RGF0YSkgPT4ge1xuICAgICAgICBsZXQgbWF0Y2hlcyA9IHRlbXBsYXRlLm1hdGNoKFRFTVBMQVRFX1RPS0VOX1JFR0VYKTtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwobWF0Y2hlcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIGxldCBleHByZXNpb25Db250ZW50ID0gbWF0Y2guc3Vic3RyaW5nKG1hdGNoLmluZGV4T2YoJ3snKSArIDEsIG1hdGNoLmxhc3RJbmRleE9mKCd9JykpO1xuICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoZXhwcmVzaW9uQ29udGVudC5zdGFydHNXaXRoKCckZXZlbnQuZGF0YScpICYmICFVdGlscy5pc051bGwoZXZlbnREYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcHMgPSBleHByZXNpb25Db250ZW50LnJlcGxhY2UoJyRldmVudC5kYXRhLicsICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2byA9IGV2ZW50RGF0YTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bcHJvcF07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uVmFsdWUgPSB2bztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uVmFsdWUgPSB0aGlzLnJlc29sdmVFeHByZXNzaW9uVmFsdWUoZXhwcmVzaW9uQ29udGVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKG1hdGNoLCBleHByZXNzaW9uVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH07XG5cbiAgICByZXNvbHZlRXhwcmVzc2lvblZhbHVlID0gKGV4cHJlc3Npb24sIGV2ZW50RGF0YSA9IG51bGwpID0+IHtcbiAgICAgICAgbGV0IHBhcmFtRXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ubWF0Y2goL1xcKChbXildKilcXCkvKTtcbiAgICAgICAgbGV0IGlzRXZlbnQgPSBleHByZXNzaW9uLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJyk7XG4gICAgICAgIGxldCBiYXNlRXhwcmVzc2lvbiA9IGlzRXZlbnQgPyAnJGV2ZW50LmRhdGEnIDogIVV0aWxzLmlzTnVsbChwYXJhbUV4cHJlc3Npb24pICYmIHBhcmFtRXhwcmVzc2lvbi5sZW5ndGggPiAwID9cbiAgICAgICAgICAgIGV4cHJlc3Npb24ucmVwbGFjZShwYXJhbUV4cHJlc3Npb25bMF0sICcnKSA6IGV4cHJlc3Npb247XG5cbiAgICAgICAgbGV0IGV4cHJlc3Npb25Db250ZW50ID0gYmFzZUV4cHJlc3Npb24uc3Vic3RyaW5nKGJhc2VFeHByZXNzaW9uLmluZGV4T2YoJ3snKSArIDEsIGJhc2VFeHByZXNzaW9uLmluZGV4T2YoJ30nKSk7XG4gICAgICAgIGxldCBpc0NvbXBvbmVudCA9IGJhc2VFeHByZXNzaW9uLnN0YXJ0c1dpdGgoJ0AjeycpO1xuICAgICAgICBsZXQgaXNMaWIgPSBiYXNlRXhwcmVzc2lvbi5zdGFydHNXaXRoKCdAQHsnKTtcbiAgICAgICAgbGV0IHRva2VucyA9IGV4cHJlc3Npb25Db250ZW50LnNwbGl0KCcuJyk7XG4gICAgICAgIGxldCBpZFRva2VuID0gdG9rZW5zWzBdO1xuXG4gICAgICAgIGlmIChpc0NvbXBvbmVudCB8fCBpc0V2ZW50KSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBpc0V2ZW50ID8gZXZlbnREYXRhIDogdGhpcy5yZXNvbHZlQ29tcG9uZW50QXBpKGV4cHJlc3Npb25Db250ZW50KTtcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uQ2xvc3VyZSA9IGlzRXZlbnQgPyAnZGF0YS4nIDogJ30uJztcbiAgICAgICAgICAgIGxldCBpbmRleCA9IGV4cHJlc3Npb24uaW5kZXhPZihleHByZXNzaW9uQ2xvc3VyZSk7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHlDaGFpbiA9IGV4cHJlc3Npb24uc3Vic3RyaW5nKGluZGV4ICsgZXhwcmVzc2lvbkNsb3N1cmUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBsZXQgcHJvcHMgPSBwcm9wZXJ0eUNoYWluLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbcHJvcF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTGliKSB7XG4gICAgICAgICAgICAvKmlmIChpZFRva2VuID09PSAndmlldycpIHtcbiAgICAgICAgICAgICAgICBpZFRva2VuID0gdGhpcy5nZXRDdXJyZW50VmlldygpLmNvbmZpZy5pZCArICdfbGliJztcbiAgICAgICAgICAgIH0qL1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5saWJzW2lkVG9rZW5dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb247XG4gICAgfTtcblxuICAgIHNldEV4cHJlc3Npb25WYWx1ZXMgPSAob2JqLCBldmVudERhdGEgPSBudWxsKSA9PiB7XG4gICAgICAgIGxldCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShvYmopO1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gaXNBcnJheSA/IFtdIDoge307XG5cbiAgICAgICAgT2JqZWN0LmtleXMob2JqKVxuICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnICYmIG9ialtrZXldICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRba2V5XSA9IHRoaXMuc2V0RXhwcmVzc2lvblZhbHVlcyhvYmpba2V5XSwgZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqVmFsdWUgPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqVmFsdWUgPSBvYmpWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbihvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNjcmlwdFZhbHVlID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQoYHJlc29sdmVQYXJhbV8ke01hdGgucmFuZG9tKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJy4nLCAnXycpfWAsIG9ialZhbHVlLCBudWxsLCBudWxsLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NyaXB0VmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqS2V5ID0ga2V5ID09PSAndmFsdWVFeHByZXNzaW9uJyA/ICd2YWx1ZScgOiBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFtvYmpLZXldID0gc2NyaXB0VmFsdWUgIT09IG51bGwgJiYgc2NyaXB0VmFsdWUuaW5zdGFuY2VUeXBlID09PSAnVHlwZWRWYWx1ZScgPyBzY3JpcHRWYWx1ZS52YWx1ZSA6IHNjcmlwdFZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkW29iaktleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1cGRhdGVkLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwcm9jZXNzaW5nIHBhcmFtZXRlciBleHByZXNzaW9uIDogXCIgKyBvYmpWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRba2V5XSA9IG9ialZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfTtcblxuICAgIGZpbGxFdmVudERhdGFWYWx1ZShvYmosIGV2ZW50RGF0YSkge1xuICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvYmopXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxsRXZlbnREYXRhVmFsdWUodmFsLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gJyRldmVudC5kYXRhJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSBldmVudERhdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB2aWV3IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHBhcnRpY3VsYXIgaWRcbiAgICAgKlxuICAgICAqL1xuICAgIHJlc29sdmVQYXJhbWV0ZXJDb25maWdWYWx1ZSA9IChjb25maWdWYWx1ZSwgZXZlbnREYXRhKSA9PiB7XG4gICAgICAgIGlmICghY29uZmlnVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWdWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbihjb25maWdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVFeHByZXNzaW9uVmFsdWUoY29uZmlnVmFsdWUsIGV2ZW50RGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQganNvbiA9IEpTT04uc3RyaW5naWZ5KGNvbmZpZ1ZhbHVlKTtcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0ganNvbi5tYXRjaChURU1QTEFURV9SRUdFWCk7XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG1hdGNoZXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RXhwcmVzc2lvblZhbHVlcyhjb25maWdWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBpc0V4cHJlc3Npb24ob2JqVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG9ialZhbHVlICYmIG9ialZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXMoJyRhcHBsaWNhdGlvbicpXG4gICAgICAgICAgICB8fCBvYmpWYWx1ZSAmJiBvYmpWYWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJylcbiAgICAgICAgICAgIHx8ICFVdGlscy5pc051bGwob2JqVmFsdWUpICYmIHR5cGVvZiBvYmpWYWx1ZSA9PT0gJ3N0cmluZycgJiYgIVV0aWxzLmlzTnVsbChvYmpWYWx1ZS5tYXRjaChURU1QTEFURV9SRUdFWCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB2aWV3IGNvbmZpZ3VyYXRpb24gd2l0aCBhIHBhcnRpY3VsYXIgaWRcbiAgICAgKlxuICAgICAqL1xuICAgIHJlc29sdmVQYXJhbWV0ZXJWYWx1ZSA9IChwYXJhbWV0ZXJDb25maWcsIGV2ZW50RGF0YSA9IG51bGwpID0+IHtcblxuICAgICAgICBpZiAocGFyYW1ldGVyQ29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlckNvbmZpZy52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBleHByZXNzaW9uID0gcGFyYW1ldGVyQ29uZmlnLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIGxldCBpc0V2ZW50ID0gZXhwcmVzc2lvbi5zdGFydHNXaXRoKCckZXZlbnQuZGF0YScpO1xuICAgICAgICBpZiAoaXNFdmVudCkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gZXZlbnREYXRhO1xuICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgZXhwcmVzc2lvbi5pbmNsdWRlcygnWycpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlSW5kZXggPSBleHByZXNzaW9uLnN1YnN0cmluZyhleHByZXNzaW9uLmluZGV4T2YoJ1snKSArIDEsIGV4cHJlc3Npb24uaW5kZXhPZignXScpKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW3ZhbHVlSW5kZXhdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBUaGlzIGNoZWNrcyBpZiB0aGVyZSBpcyBhIHJlZmVyZW5jZSB0byBzb21lIGRhdGEgcHJvcGVydHlcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uQ2xvc3VyZSA9ICdkYXRhLic7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSBleHByZXNzaW9uLmluZGV4T2YoZXhwcmVzc2lvbkNsb3N1cmUpO1xuICAgICAgICAgICAgaWYoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbkNsb3N1cmUgPSBcIl0uXCI7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBleHByZXNzaW9uLmluZGV4T2YoZXhwcmVzc2lvbkNsb3N1cmUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5Q2hhaW4gPSBleHByZXNzaW9uLnN1YnN0cmluZyhpbmRleCArIGV4cHJlc3Npb25DbG9zdXJlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BzID0gcHJvcGVydHlDaGFpbi5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbCA9IG51bGw7XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChwYXJhbWV0ZXJDb25maWcudmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdOVUxMIHBhcmFtZXRlciB2YWx1ZSBleHByZXNzaW9uIGluIDogJyArIEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlckNvbmZpZykpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNFeHByZXNzaW9uKHBhcmFtZXRlckNvbmZpZy52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbCA9IHRoaXMucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKHBhcmFtZXRlckNvbmZpZy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IHBhcmFtZXRlckNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHZhbCA9IGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0KGByZXNvbHZlUGFyYW1fJHtNYXRoLnJhbmRvbSgpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnLicsICdfJyl9YCwgZXhwcmVzc2lvbiwgbnVsbCwgbnVsbCwge2RhdGE6IGV2ZW50RGF0YX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh2YWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbCkgJiYgIVV0aWxzLmlzTnVsbCh2YWwuaW5zdGFuY2VUeXBlKVxuICAgICAgICAgICAgJiYgdmFsLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnKSB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXJDb25maWcudHlwZSkpIHtcbiAgICAgICAgICAgICAgICB2YWwudHlwZSA9IHBhcmFtZXRlckNvbmZpZy50eXBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHR5cGUgPSBudWxsO1xuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXJDb25maWcudHlwZSkpIHtcbiAgICAgICAgICAgIHR5cGUgPSBwYXJhbWV0ZXJDb25maWcudHlwZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgdmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUeXBlZFZhbHVlKHR5cGUsIHZhbCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgYSB2YWx1ZSB0byB0aGUgc3BlY2lmaWVkIHZpZXcncyBtb2RlbFxuICAgICAqIEBwYXJhbSBrZXlcbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKiBAcGFyYW0gdmlld0lkXG4gICAgICovXG4gICAgc2V0TW9kZWxWYWx1ZSA9IChrZXksIHZhbHVlLCB2aWV3SWQpID0+IHtcbiAgICAgICAgdGhpcy5nZXRWaWV3KHZpZXdJZClcbiAgICAgICAgICAgIC5oYW5kbGVcbiAgICAgICAgICAgIC5hcGlcbiAgICAgICAgICAgIC5zZXRNb2RlbFZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnModmlld0lkKTtcbiAgICB9O1xuXG4gICAgZ2V0SWQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb25NYW5hZ2VyJztcbiAgICB9O1xuXG4gICAgZW5hYmxlRm9ybU1hcmtlcnMoZW5hYmxlZCkge1xuICAgICAgICB0aGlzLnByb3BzLmZvcm1NYXJrZXJzRW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgfVxuXG4gICAgaXNGb3JtTWFya2Vyc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmZvcm1NYXJrZXJzRW5hYmxlZDtcbiAgICB9XG5cbiAgICBzZXREYXNoYm9hcmRWaWV3KHZpZXcpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5kYXNoYm9hcmRWaWV3ID0gdmlldztcbiAgICB9XG5cbiAgICBzZXRVc2VyRGV0YWlscyh1c2VyRGV0YWlscykge1xuICAgICAgICB0aGlzLnByb3BzLnVzZXJEZXRhaWxzID0gdXNlckRldGFpbHM7XG4gICAgfVxuXG4gICAgZ2V0VXNlckRldGFpbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnVzZXJEZXRhaWxzO1xuICAgIH1cblxuICAgIGxvYWRHcmFwaChpc1BhcmVudCwgY29uZmlnLCBwYXJhbWV0ZXJWYWx1ZXMsIHZpZXdDb250ZXh0KSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRleHRbdmlld0NvbnRleHRdLmxvYWRHcmFwaChpc1BhcmVudCwgY29uZmlnLCBwYXJhbWV0ZXJWYWx1ZXMpO1xuICAgIH1cblxuICAgIHJlbW92ZUxvYWRlZEdyYXBoKHZpZXdDb250ZXh0KSB7XG4gICAgICAgIGxldCBncmFwaCA9IHRoaXMudmlld0NvbnRleHRbdmlld0NvbnRleHRdLnJlbW92ZUxvYWRlZEdyYXBoKCk7XG4gICAgICAgIGlmIChncmFwaCAmJiBncmFwaC5jb25maWcuaXNXaW5kb3cpIHtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5lbWl0Q29udGV4dENoYW5nZUV2ZW50KGFwcGxpY2F0aW9uQ29udGV4dCwge3dpbmRvd1ZpZXc6IG51bGx9KTtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uQ29udGV4dC53aW5kb3dWaWV3ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNpZ25hbEdyYXBoKGlkLCBldmVudCkge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnZpZXdDb250ZXh0KVxuICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHRba2V5XS5zaWduYWxHcmFwaChpZCwgZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdmlld0NvbnRleHRcbiAgICAgKi9cbiAgICBnZXRQcmV2aW91c0hpc3RvcnlFbGVtZW50ID0gKHZpZXdDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0W3ZpZXdDb250ZXh0XS5nZXRQcmV2aW91c0hpc3RvcnlFbGVtZW50KCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIHZpZXdDb250ZXh0XG4gICAgICovXG4gICAgZ2V0Q3VycmVudEdyYXBoID0gKHZpZXdDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBncmFwaHMgPSB0aGlzLnZpZXdDb250ZXh0W3ZpZXdDb250ZXh0XS5ncmFwaHM7XG4gICAgICAgIHJldHVybiBncmFwaHMgJiYgZ3JhcGhzLmxlbmd0aCA+IDAgPyBncmFwaHNbZ3JhcGhzLmxlbmd0aCAtIDFdIDogbnVsbDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogdmlld0NvbnRleHRcbiAgICAgKi9cbiAgICBnZXRUb3BWaWV3ID0gKHZpZXdDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0W3ZpZXdDb250ZXh0XS5nZXRUb3BWaWV3KCk7XG4gICAgfTtcbn1cblxuY29uc3QgaW5zdGFuY2UgPSBuZXcgQXBwbGljYXRpb25NYW5hZ2VyKCk7XG5PYmplY3QuZnJlZXplKGluc3RhbmNlKTtcbmV4cG9ydCBkZWZhdWx0IGluc3RhbmNlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxXQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFDLHVCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBTSxXQUFB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
|
|
@@ -12,10 +12,13 @@ var _VCEventManager = _interopRequireDefault(require("./media/VCEventManager"));
|
|
|
12
12
|
var _Event = _interopRequireDefault(require("../event/Event"));
|
|
13
13
|
var _VCEventType = require("./media/VCEventType");
|
|
14
14
|
var _Observable = _interopRequireDefault(require("../event/Observable"));
|
|
15
|
+
var _mediasoupClient = require("mediasoup-client");
|
|
16
|
+
var _package = _interopRequireDefault(require("@agilemotion/oui-react-js/package.json"));
|
|
15
17
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
18
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
17
19
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
18
|
-
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
20
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // Package-name self-import (not a relative path) so it resolves both in local dev and from the
|
|
21
|
+
// published dist consumed by host apps. Powers the MEDIA HANDSHAKING diagnostic line in init().
|
|
19
22
|
class SocketManager {
|
|
20
23
|
constructor() {
|
|
21
24
|
_defineProperty(this, "emitEvent", (eventType, data) => {
|
|
@@ -47,7 +50,7 @@ class SocketManager {
|
|
|
47
50
|
console.log("CONNECTING TO ENV SOCKET SERVER URL");
|
|
48
51
|
}
|
|
49
52
|
let url = process.env.REACT_APP_SOCKET_SERVER_URL || DEFAULT_SOCKET_SERVER_URL;
|
|
50
|
-
console.log(
|
|
53
|
+
console.log('MEDIA HANDSHAKING - [ui-lib: ' + _package.default.version + ', media-client: ' + _mediasoupClient.version + '] -> ' + url);
|
|
51
54
|
let socket = _socket.default.connect(url);
|
|
52
55
|
this.socket = socket;
|
|
53
56
|
socket.on("connect", () => {
|
|
@@ -164,4 +167,4 @@ class SocketManager {
|
|
|
164
167
|
const instance = new SocketManager();
|
|
165
168
|
//Object.freeze(instance);
|
|
166
169
|
var _default = exports.default = instance;
|
|
167
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc29ja2V0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfU29ja2V0UmVxdWVzdCIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfRXZlbnRUeXBlIiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX0V2ZW50IiwiX1ZDRXZlbnRUeXBlIiwiX09ic2VydmFibGUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfZGVmaW5lUHJvcGVydHkiLCJyIiwidCIsIl90b1Byb3BlcnR5S2V5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJTb2NrZXRNYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJldmVudFR5cGUiLCJkYXRhIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzb2NrZXQiLCJjb25zb2xlIiwibG9nIiwicmVzcG9uc2UiLCJlbWl0Iiwic3RhdHVzIiwiRXJyb3IiLCJjb25uZWN0ZWQiLCJERUZBVUxUX1NPQ0tFVF9TRVJWRVJfVVJMIiwicHJvY2VzcyIsImVudiIsIlJFQUNUX0FQUF9TT0NLRVRfU0VSVkVSX1VSTCIsInVybCIsImlvIiwiY29ubmVjdCIsIm9uIiwicmVnaXN0ZXJPbmxpbmUiLCJ2Y0V2ZW50TWFuYWdlciIsImZpcmVFdmVudCIsIlZDRXZlbnRUeXBlIiwiU09DS0VUX0RJU0NPTk5FQ1QiLCJrZXlzIiwicGF5bG9hZCIsIlVTRVJTX09OTElORSIsIlVTRVJfT05MSU5FIiwiVVNFUl9PRkZMSU5FIiwiZXZlbnQiLCJFdmVudCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImV2ZW50TWFuYWdlciIsInVzZXJzT25saW5lIiwic3BsaWNlIiwibGVuZ3RoIiwicGF5bG9hZEVsZW1lbnQiLCJwdXNoIiwidXNlcklkIiwibWVldGluZ0lkIiwiZW1pdEV2ZW50IiwiTEVBVkVfTUVFVElORyIsImdldFVzZXJEZXRhaWxzIiwidXNlcm5hbWUiLCJjYXRjaCIsImVycm9yIiwic2V0SGFzQWN0aXZlTWVldGluZyIsInRoZW4iLCJFTkRfU0VTU0lPTiIsInVzZXJEZXRhaWxzIiwicHJvZmlsZSIsIlNvY2tldFJlcXVlc3QiLCJSRUdJU1RFUl9PTkxJTkUiLCJ1c2VyIiwibmFtZSIsInN1cm5hbWUiLCJvcmdDb2RlIiwiY3JlYXRlRXZlbnQiLCJFdmVudFR5cGUiLCJTT0NLRVRfQ09OTkVDVCIsImV4cCIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImFwaSIsImlkIiwiZGlzY29ubmVjdCIsImluc3RhbmNlIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL1NvY2tldE1hbmFnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlvIGZyb20gXCJzb2NrZXQuaW8tY2xpZW50XCI7XG5pbXBvcnQgU29ja2V0UmVxdWVzdCBmcm9tIFwiLi9tZWRpYS9Tb2NrZXRSZXF1ZXN0XCI7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gXCIuLi9BcHBsaWNhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCBFdmVudFR5cGUgZnJvbSBcIi4uL2V2ZW50L0V2ZW50VHlwZVwiO1xuaW1wb3J0IHZjRXZlbnRNYW5hZ2VyIGZyb20gJy4vbWVkaWEvVkNFdmVudE1hbmFnZXInO1xuaW1wb3J0IEV2ZW50IGZyb20gXCIuLi9ldmVudC9FdmVudFwiO1xuaW1wb3J0IHtWQ0V2ZW50VHlwZX0gZnJvbSBcIi4vbWVkaWEvVkNFdmVudFR5cGVcIjtcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSBcIi4uL2V2ZW50L09ic2VydmFibGVcIjtcblxuY2xhc3MgU29ja2V0TWFuYWdlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudXNlcnNPbmxpbmUgPSBbXTtcbiAgICB9XG5cbiAgICBlbWl0RXZlbnQgPSAoZXZlbnRUeXBlLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVNSVRUSU5HIEVWRU5UIDogXCIgKyBldmVudFR5cGUpO1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZSA9IHRoaXMuc29ja2V0LmVtaXQoZXZlbnRUeXBlLCBkYXRhLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVNSVRUSU5HIEVWRU5UIFJFU1VMVCA6IFwiICsgZXZlbnRUeXBlLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdHVzID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVSUk9SIEVNSVRUSU5HIEVWRU5UIDogXCIgKyBldmVudFR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihkYXRhLnN0YXR1cykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmNvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiQ09OTkVDVElPTl9FUlJPUlwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiQ09OTkVDVElPTl9FUlJPUlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgREVGQVVMVF9TT0NLRVRfU0VSVkVSX1VSTCA9ICdodHRwczovL3NvY2tldHMuZS1wcm9jdXJlbWVudHN5c3RlbS5jby56YSc7XG5cbiAgICAgICAgaWYoIXByb2Nlc3MuZW52LlJFQUNUX0FQUF9TT0NLRVRfU0VSVkVSX1VSTCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJTT0NLRVQgU0VSVkVSIFVSTCBOT1QgU0VULiBERUZBVUxUSU5HIFRPIC0gW2h0dHBzOi8vc29ja2V0cy5lLXByb2N1cmVtZW50c3lzdGVtLmNvLnphXVwiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJDT05ORUNUSU5HIFRPIEVOViBTT0NLRVQgU0VSVkVSIFVSTFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB1cmwgPSBwcm9jZXNzLmVudi5SRUFDVF9BUFBfU09DS0VUX1NFUlZFUl9VUkwgfHwgREVGQVVMVF9TT0NLRVRfU0VSVkVSX1VSTDtcbiAgICAgICAgY29uc29sZS5sb2coXCI9PT09PT09IFNPQ0tFVCBNQU5BR0VSIENPTk5FQ1RJTkcgVE8gPT09PT09PT09IFtcIiArIHVybCArIFwiXVwiKTtcbiAgICAgICAgbGV0IHNvY2tldCA9IGlvLmNvbm5lY3QodXJsKTtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBzb2NrZXQ7XG5cbiAgICAgICAgc29ja2V0Lm9uKFwiY29ubmVjdFwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyT25saW5lKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNvY2tldC5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5TT0NLRVRfRElTQ09OTkVDVCwge30pO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIE9iamVjdC5rZXlzKFZDRXZlbnRUeXBlKSkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKHZhbHVlLCAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFVkVOVDogJywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gVkNFdmVudFR5cGUuVVNFUlNfT05MSU5FICYmIHZhbHVlICE9PSBWQ0V2ZW50VHlwZS5VU0VSX09OTElORVxuICAgICAgICAgICAgICAgICAgICAmJiB2YWx1ZSAhPT0gVkNFdmVudFR5cGUuVVNFUl9PRkZMSU5FKSB7XG4gICAgICAgICAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudCh2YWx1ZSwge3NvY2tldDogdGhpcy5zb2NrZXQsIHBheWxvYWQ6IHBheWxvYWR9KTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KGFwcGxpY2F0aW9uTWFuYWdlciwgJ1NZU1RFTV9FVkVOVCcsIHBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KHZhbHVlLCBldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzb2NrZXQub24oVkNFdmVudFR5cGUuVVNFUlNfT05MSU5FLCAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51c2Vyc09ubGluZS5zcGxpY2UoMCwgdGhpcy51c2Vyc09ubGluZS5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXlsb2FkRWxlbWVudCBvZiBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2Vyc09ubGluZS5wdXNoKHBheWxvYWRFbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLlVTRVJTX09OTElORSwge3NvY2tldDogdGhpcy5zb2NrZXQsIHBheWxvYWQ6IHBheWxvYWR9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc29ja2V0Lm9uKFZDRXZlbnRUeXBlLlVTRVJfT05MSU5FLCAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51c2Vyc09ubGluZS5wdXNoKHBheWxvYWQpO1xuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLlVTRVJfT05MSU5FLCB7c29ja2V0OiB0aGlzLnNvY2tldCwgcGF5bG9hZDogcGF5bG9hZH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBzb2NrZXQub24oVkNFdmVudFR5cGUuVVNFUl9PRkZMSU5FLCAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnVzZXJzT25saW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy51c2Vyc09ubGluZVtpXS51c2VySWQgKyBcIiA9PT0gXCIgKyBwYXlsb2FkLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXNlcnNPbmxpbmVbaV0udXNlcklkID09PSBwYXlsb2FkLnVzZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJzT25saW5lLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5VU0VSX09GRkxJTkUsIHtzb2NrZXQ6IHRoaXMuc29ja2V0LCBwYXlsb2FkOiBwYXlsb2FkfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25saW5lKCkge1xuICAgICAgICBsZXQgdXNlckRldGFpbHMgPSBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKTtcbiAgICAgICAgLy8gVE9ETyA6IFJlc29sdmUgdGhlIGhhcmRjb2RpbmdcbiAgICAgICAgbGV0IHByb2ZpbGUgPSAnQ09KJztcbiAgICAgICAgLy9sZXQgcHJvZmlsZSA9IHR5cGVvZiB1c2VyRGV0YWlscy5wcm9maWxlID09PSAnc3RyaW5nJyB8fCBKU09OLnBhcnNlKHVzZXJEZXRhaWxzLnByb2ZpbGUpID09PSAnc3RyaW5nJyA/IHVzZXJEZXRhaWxzLnByb2ZpbGUgOiAnQ09KJztcbiAgICAgICAgY29uc29sZS5sb2coJyoqKioqIFJFR0lTVEVSSU5HIE9OTElORSAqKioqKiBbJyArIHByb2ZpbGUgKyAnXScpO1xuICAgICAgICB0aGlzLmVtaXRFdmVudChTb2NrZXRSZXF1ZXN0LlJFR0lTVEVSX09OTElORSwge1xuICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICAgIHVzZXJJZDogdXNlckRldGFpbHMudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgbmFtZTogdXNlckRldGFpbHMubmFtZSArICcgJyArIHVzZXJEZXRhaWxzLnN1cm5hbWVcbiAgICAgICAgICAgIH0sIG9yZ0NvZGU6IHByb2ZpbGVcbiAgICAgICAgfSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJSRUdJU1RFUkVEIE9OTElORSAtIFwiICsgdXNlckRldGFpbHMudXNlcm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IGV2ZW50ID0gdGhpcy5jcmVhdGVFdmVudCgpO1xuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5TT0NLRVRfQ09OTkVDVCwgZXZlbnQpO1xuICAgICAgICB9KS5jYXRjaCgoZXhwKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhleHApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsZWF2ZU1lZXRpbmcgPSAobWVldGluZ0lkKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNvY2tldCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0RXZlbnQoVkNFdmVudFR5cGUuTEVBVkVfTUVFVElORywge1xuICAgICAgICAgICAgICAgIHVzZXJJZDogYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgbWVldGluZ0lkOiBtZWV0aW5nSWRcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuc2V0SGFzQWN0aXZlTWVldGluZyhmYWxzZSk7XG4gICAgfTtcblxuICAgIGVuZFNlc3Npb24gPSAobWVldGluZ0lkKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNvY2tldCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0RXZlbnQoVkNFdmVudFR5cGUuTEVBVkVfTUVFVElORywge1xuICAgICAgICAgICAgICAgIHVzZXJJZDogYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgbWVldGluZ0lkOiBtZWV0aW5nSWRcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEV2ZW50KFZDRXZlbnRUeXBlLkVORF9TRVNTSU9OLCB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJJZDogYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lZXRpbmdJZDogbWVldGluZ0lkXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLnNldEhhc0FjdGl2ZU1lZXRpbmcoZmFsc2UpO1xuICAgIH07XG5cbiAgICBjcmVhdGVFdmVudChkYXRhID0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbmV3IEV2ZW50KHtcbiAgICAgICAgICAgIGFwaToge1xuICAgICAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic29ja2V0c1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgXCJkYXNoYm9hcmRcIiwgZGF0YSk7XG4gICAgfVxuXG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5kaXNjb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IGluc3RhbmNlID0gbmV3IFNvY2tldE1hbmFnZXIoKTtcbi8vT2JqZWN0LmZyZWV6ZShpbnN0YW5jZSk7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3RhbmNlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxjQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxtQkFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksZUFBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sWUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQStDLFNBQUFELHVCQUFBUyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQUcsZ0JBQUFILENBQUEsRUFBQUksQ0FBQSxFQUFBQyxDQUFBLFlBQUFELENBQUEsR0FBQUUsY0FBQSxDQUFB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
|
|
170
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc29ja2V0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfU29ja2V0UmVxdWVzdCIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfRXZlbnRUeXBlIiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX0V2ZW50IiwiX1ZDRXZlbnRUeXBlIiwiX09ic2VydmFibGUiLCJfbWVkaWFzb3VwQ2xpZW50IiwiX3BhY2thZ2UiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfZGVmaW5lUHJvcGVydHkiLCJyIiwidCIsIl90b1Byb3BlcnR5S2V5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJTb2NrZXRNYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJldmVudFR5cGUiLCJkYXRhIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzb2NrZXQiLCJjb25zb2xlIiwibG9nIiwicmVzcG9uc2UiLCJlbWl0Iiwic3RhdHVzIiwiRXJyb3IiLCJjb25uZWN0ZWQiLCJERUZBVUxUX1NPQ0tFVF9TRVJWRVJfVVJMIiwicHJvY2VzcyIsImVudiIsIlJFQUNUX0FQUF9TT0NLRVRfU0VSVkVSX1VSTCIsInVybCIsInBrZyIsInZlcnNpb24iLCJtZWRpYXNvdXBDbGllbnRWZXJzaW9uIiwiaW8iLCJjb25uZWN0Iiwib24iLCJyZWdpc3Rlck9ubGluZSIsInZjRXZlbnRNYW5hZ2VyIiwiZmlyZUV2ZW50IiwiVkNFdmVudFR5cGUiLCJTT0NLRVRfRElTQ09OTkVDVCIsImtleXMiLCJwYXlsb2FkIiwiVVNFUlNfT05MSU5FIiwiVVNFUl9PTkxJTkUiLCJVU0VSX09GRkxJTkUiLCJldmVudCIsIkV2ZW50IiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZXZlbnRNYW5hZ2VyIiwidXNlcnNPbmxpbmUiLCJzcGxpY2UiLCJsZW5ndGgiLCJwYXlsb2FkRWxlbWVudCIsInB1c2giLCJ1c2VySWQiLCJtZWV0aW5nSWQiLCJlbWl0RXZlbnQiLCJMRUFWRV9NRUVUSU5HIiwiZ2V0VXNlckRldGFpbHMiLCJ1c2VybmFtZSIsImNhdGNoIiwiZXJyb3IiLCJzZXRIYXNBY3RpdmVNZWV0aW5nIiwidGhlbiIsIkVORF9TRVNTSU9OIiwidXNlckRldGFpbHMiLCJwcm9maWxlIiwiU29ja2V0UmVxdWVzdCIsIlJFR0lTVEVSX09OTElORSIsInVzZXIiLCJuYW1lIiwic3VybmFtZSIsIm9yZ0NvZGUiLCJjcmVhdGVFdmVudCIsIkV2ZW50VHlwZSIsIlNPQ0tFVF9DT05ORUNUIiwiZXhwIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiYXBpIiwiaWQiLCJkaXNjb25uZWN0IiwiaW5zdGFuY2UiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvU29ja2V0TWFuYWdlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW8gZnJvbSBcInNvY2tldC5pby1jbGllbnRcIjtcbmltcG9ydCBTb2NrZXRSZXF1ZXN0IGZyb20gXCIuL21lZGlhL1NvY2tldFJlcXVlc3RcIjtcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSBcIi4uL0FwcGxpY2F0aW9uTWFuYWdlclwiO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tIFwiLi4vZXZlbnQvRXZlbnRUeXBlXCI7XG5pbXBvcnQgdmNFdmVudE1hbmFnZXIgZnJvbSAnLi9tZWRpYS9WQ0V2ZW50TWFuYWdlcic7XG5pbXBvcnQgRXZlbnQgZnJvbSBcIi4uL2V2ZW50L0V2ZW50XCI7XG5pbXBvcnQge1ZDRXZlbnRUeXBlfSBmcm9tIFwiLi9tZWRpYS9WQ0V2ZW50VHlwZVwiO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tIFwiLi4vZXZlbnQvT2JzZXJ2YWJsZVwiO1xuaW1wb3J0IHsgdmVyc2lvbiBhcyBtZWRpYXNvdXBDbGllbnRWZXJzaW9uIH0gZnJvbSAnbWVkaWFzb3VwLWNsaWVudCc7XG4vLyBQYWNrYWdlLW5hbWUgc2VsZi1pbXBvcnQgKG5vdCBhIHJlbGF0aXZlIHBhdGgpIHNvIGl0IHJlc29sdmVzIGJvdGggaW4gbG9jYWwgZGV2IGFuZCBmcm9tIHRoZVxuLy8gcHVibGlzaGVkIGRpc3QgY29uc3VtZWQgYnkgaG9zdCBhcHBzLiBQb3dlcnMgdGhlIE1FRElBIEhBTkRTSEFLSU5HIGRpYWdub3N0aWMgbGluZSBpbiBpbml0KCkuXG5pbXBvcnQgcGtnIGZyb20gJ0BhZ2lsZW1vdGlvbi9vdWktcmVhY3QtanMvcGFja2FnZS5qc29uJztcblxuY2xhc3MgU29ja2V0TWFuYWdlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudXNlcnNPbmxpbmUgPSBbXTtcbiAgICB9XG5cbiAgICBlbWl0RXZlbnQgPSAoZXZlbnRUeXBlLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVNSVRUSU5HIEVWRU5UIDogXCIgKyBldmVudFR5cGUpO1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZSA9IHRoaXMuc29ja2V0LmVtaXQoZXZlbnRUeXBlLCBkYXRhLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVNSVRUSU5HIEVWRU5UIFJFU1VMVCA6IFwiICsgZXZlbnRUeXBlLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdHVzID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVSUk9SIEVNSVRUSU5HIEVWRU5UIDogXCIgKyBldmVudFR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihkYXRhLnN0YXR1cykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmNvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiQ09OTkVDVElPTl9FUlJPUlwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiQ09OTkVDVElPTl9FUlJPUlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgREVGQVVMVF9TT0NLRVRfU0VSVkVSX1VSTCA9ICdodHRwczovL3NvY2tldHMuZS1wcm9jdXJlbWVudHN5c3RlbS5jby56YSc7XG5cbiAgICAgICAgaWYoIXByb2Nlc3MuZW52LlJFQUNUX0FQUF9TT0NLRVRfU0VSVkVSX1VSTCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJTT0NLRVQgU0VSVkVSIFVSTCBOT1QgU0VULiBERUZBVUxUSU5HIFRPIC0gW2h0dHBzOi8vc29ja2V0cy5lLXByb2N1cmVtZW50c3lzdGVtLmNvLnphXVwiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJDT05ORUNUSU5HIFRPIEVOViBTT0NLRVQgU0VSVkVSIFVSTFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB1cmwgPSBwcm9jZXNzLmVudi5SRUFDVF9BUFBfU09DS0VUX1NFUlZFUl9VUkwgfHwgREVGQVVMVF9TT0NLRVRfU0VSVkVSX1VSTDtcbiAgICAgICAgY29uc29sZS5sb2coJ01FRElBIEhBTkRTSEFLSU5HIC0gW3VpLWxpYjogJyArIHBrZy52ZXJzaW9uICsgJywgbWVkaWEtY2xpZW50OiAnICsgbWVkaWFzb3VwQ2xpZW50VmVyc2lvbiArICddIC0+ICcgKyB1cmwpO1xuICAgICAgICBsZXQgc29ja2V0ID0gaW8uY29ubmVjdCh1cmwpO1xuICAgICAgICB0aGlzLnNvY2tldCA9IHNvY2tldDtcblxuICAgICAgICBzb2NrZXQub24oXCJjb25uZWN0XCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJPbmxpbmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc29ja2V0Lm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLlNPQ0tFVF9ESVNDT05ORUNULCB7fSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgT2JqZWN0LmtleXMoVkNFdmVudFR5cGUpKSB7XG4gICAgICAgICAgICBzb2NrZXQub24odmFsdWUsIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VWRU5UOiAnLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBWQ0V2ZW50VHlwZS5VU0VSU19PTkxJTkUgJiYgdmFsdWUgIT09IFZDRXZlbnRUeXBlLlVTRVJfT05MSU5FXG4gICAgICAgICAgICAgICAgICAgICYmIHZhbHVlICE9PSBWQ0V2ZW50VHlwZS5VU0VSX09GRkxJTkUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KHZhbHVlLCB7c29ja2V0OiB0aGlzLnNvY2tldCwgcGF5bG9hZDogcGF5bG9hZH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQoYXBwbGljYXRpb25NYW5hZ2VyLCAnU1lTVEVNX0VWRU5UJywgcGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQodmFsdWUsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvY2tldC5vbihWQ0V2ZW50VHlwZS5VU0VSU19PTkxJTkUsIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVzZXJzT25saW5lLnNwbGljZSgwLCB0aGlzLnVzZXJzT25saW5lLmxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBheWxvYWRFbGVtZW50IG9mIHBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJzT25saW5lLnB1c2gocGF5bG9hZEVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuVVNFUlNfT05MSU5FLCB7c29ja2V0OiB0aGlzLnNvY2tldCwgcGF5bG9hZDogcGF5bG9hZH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBzb2NrZXQub24oVkNFdmVudFR5cGUuVVNFUl9PTkxJTkUsIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVzZXJzT25saW5lLnB1c2gocGF5bG9hZCk7XG4gICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuVVNFUl9PTkxJTkUsIHtzb2NrZXQ6IHRoaXMuc29ja2V0LCBwYXlsb2FkOiBwYXlsb2FkfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNvY2tldC5vbihWQ0V2ZW50VHlwZS5VU0VSX09GRkxJTkUsIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudXNlcnNPbmxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnVzZXJzT25saW5lW2ldLnVzZXJJZCArIFwiID09PSBcIiArIHBheWxvYWQudXNlcklkKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51c2Vyc09ubGluZVtpXS51c2VySWQgPT09IHBheWxvYWQudXNlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcnNPbmxpbmUuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLlVTRVJfT0ZGTElORSwge3NvY2tldDogdGhpcy5zb2NrZXQsIHBheWxvYWQ6IHBheWxvYWR9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbmxpbmUoKSB7XG4gICAgICAgIGxldCB1c2VyRGV0YWlscyA9IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpO1xuICAgICAgICAvLyBUT0RPIDogUmVzb2x2ZSB0aGUgaGFyZGNvZGluZ1xuICAgICAgICBsZXQgcHJvZmlsZSA9ICdDT0onO1xuICAgICAgICAvL2xldCBwcm9maWxlID0gdHlwZW9mIHVzZXJEZXRhaWxzLnByb2ZpbGUgPT09ICdzdHJpbmcnIHx8IEpTT04ucGFyc2UodXNlckRldGFpbHMucHJvZmlsZSkgPT09ICdzdHJpbmcnID8gdXNlckRldGFpbHMucHJvZmlsZSA6ICdDT0onO1xuICAgICAgICBjb25zb2xlLmxvZygnKioqKiogUkVHSVNURVJJTkcgT05MSU5FICoqKioqIFsnICsgcHJvZmlsZSArICddJyk7XG4gICAgICAgIHRoaXMuZW1pdEV2ZW50KFNvY2tldFJlcXVlc3QuUkVHSVNURVJfT05MSU5FLCB7XG4gICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgICAgdXNlcklkOiB1c2VyRGV0YWlscy51c2VybmFtZSxcbiAgICAgICAgICAgICAgICBuYW1lOiB1c2VyRGV0YWlscy5uYW1lICsgJyAnICsgdXNlckRldGFpbHMuc3VybmFtZVxuICAgICAgICAgICAgfSwgb3JnQ29kZTogcHJvZmlsZVxuICAgICAgICB9KS50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJFR0lTVEVSRUQgT05MSU5FIC0gXCIgKyB1c2VyRGV0YWlscy51c2VybmFtZSk7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSB0aGlzLmNyZWF0ZUV2ZW50KCk7XG4gICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLlNPQ0tFVF9DT05ORUNULCBldmVudCk7XG4gICAgICAgIH0pLmNhdGNoKChleHApID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGV4cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxlYXZlTWVldGluZyA9IChtZWV0aW5nSWQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRFdmVudChWQ0V2ZW50VHlwZS5MRUFWRV9NRUVUSU5HLCB7XG4gICAgICAgICAgICAgICAgdXNlcklkOiBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSxcbiAgICAgICAgICAgICAgICBtZWV0aW5nSWQ6IG1lZXRpbmdJZFxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5zZXRIYXNBY3RpdmVNZWV0aW5nKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgZW5kU2Vzc2lvbiA9IChtZWV0aW5nSWQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRFdmVudChWQ0V2ZW50VHlwZS5MRUFWRV9NRUVUSU5HLCB7XG4gICAgICAgICAgICAgICAgdXNlcklkOiBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSxcbiAgICAgICAgICAgICAgICBtZWV0aW5nSWQ6IG1lZXRpbmdJZFxuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0RXZlbnQoVkNFdmVudFR5cGUuRU5EX1NFU1NJT04sIHtcbiAgICAgICAgICAgICAgICAgICAgdXNlcklkOiBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVldGluZ0lkOiBtZWV0aW5nSWRcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuc2V0SGFzQWN0aXZlTWVldGluZyhmYWxzZSk7XG4gICAgfTtcblxuICAgIGNyZWF0ZUV2ZW50KGRhdGEgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXZlbnQoe1xuICAgICAgICAgICAgYXBpOiB7XG4gICAgICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzb2NrZXRzXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBcImRhc2hib2FyZFwiLCBkYXRhKTtcbiAgICB9XG5cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgaW5zdGFuY2UgPSBuZXcgU29ja2V0TWFuYWdlcigpO1xuLy9PYmplY3QuZnJlZXplKGluc3RhbmNlKTtcblxuZXhwb3J0IGRlZmF1bHQgaW5zdGFuY2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JB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
|