@sapui5/sap.fe.templates 1.139.0 → 1.139.4

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.
@@ -352,8 +352,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
352
352
  }
353
353
  const internalModelContext = this.getView().getBindingContext("internal");
354
354
  if (!internalModelContext.getProperty("initialVariantApplied")) {
355
- const viewId = this.getView().getId();
356
- this.pageReady.waitFor(this._applyAppState(viewId));
355
+ this.pageReady.waitFor(this._applyAppState());
357
356
  internalModelContext.setProperty("initialVariantApplied", true);
358
357
  }
359
358
  const environmentCapabilities = CommonUtils.getAppComponent(this.getView()).getEnvironmentCapabilities();
@@ -511,14 +510,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
511
510
  });
512
511
  }
513
512
  };
514
- _proto._getPageTitleInformation = function _getPageTitleInformation() {
513
+ _proto._getPageTitleInformation = async function _getPageTitleInformation() {
515
514
  const oManifestEntry = this.getAppComponent().getManifestEntry("sap.app");
516
- return {
515
+ return Promise.resolve({
517
516
  title: oManifestEntry.title,
518
517
  subtitle: oManifestEntry.subTitle || "",
519
518
  intent: "",
520
519
  icon: ""
521
- };
520
+ });
522
521
  };
523
522
  _proto._getFilterBarControl = function _getFilterBarControl() {
524
523
  return this.getView().byId(this._getFilterBarControlId());
@@ -532,8 +531,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
532
531
  const adaptationFilterBar = this._getFilterBarControl().getInbuiltFilter?.();
533
532
  return adaptationFilterBar?.getParent() ? adaptationFilterBar : undefined;
534
533
  };
535
- _proto._applyAppState = async function _applyAppState(viewId) {
536
- await this.getAppComponent().getAppStateHandler().applyAppState(viewId, this.getView());
534
+ _proto._applyAppState = async function _applyAppState() {
535
+ await this.getAppComponent().getAppStateHandler().applyAppState(this.getView());
537
536
  const oFilterBar = this._getFilterBarControl();
538
537
  if (oFilterBar) {
539
538
  oFilterBar.enableRequests(true);
@@ -875,4 +874,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
875
874
  }), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onViewNeedsRefresh", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onViewNeedsRefresh"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPendingFilters", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "onPendingFilters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterClear", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterClear"), _class2.prototype), _class2)) || _class);
876
875
  return ListReportController;
877
876
  }, false);
878
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMTAiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTEiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxMiIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTMiLCJleHRlbnNpYmxlIiwiX2RlYzE0IiwiX2RlYzE1IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfUGFnZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJnZXRSZXNvdXJjZU1vZGVsIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiaGFuZGxlcnMiLCJvbklubGluZUVkaXRTYXZlIiwiaW5saW5lRWRpdEZsb3ciLCJpbmxpbmVFZGl0U2F2ZSIsIm9uRmlsdGVyU2VhcmNoIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwidHJpZ2dlclNlYXJjaCIsIm9uRmlsdGVyc0NoYW5nZWQiLCJvRXZlbnQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9uUGVuZGluZ0ZpbHRlcnMiLCJnZXRQYXJhbWV0ZXIiLCJzZXRQcm9wZXJ0eSIsIl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQiLCJvblZhcmlhbnRTZWxlY3RlZCIsInBhcmFtZXRlcnMiLCJnZXRQYXJhbWV0ZXJzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJvcmlnaW5hbFNvdXJjZSIsImN1cnJlbnRWYXJpYW50S2V5IiwibXVsdGlNb2RlQ29udHJvbCIsIl9nZXRNdWx0aU1vZGVDb250cm9sIiwiaXNBIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJzZXRGcmVlemVDb250ZW50Iiwic2V0VGltZW91dCIsImZpbHRlckJhciIsImR5bmFtaWNQYWdlIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCIsImZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZmluZCIsImZpbHRlckl0ZW0iLCJnZXRSZXF1aXJlZCIsImdldENvbmRpdGlvbnMiLCJzZXRIZWFkZXJFeHBhbmRlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsIl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzIiwib1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCIsInNUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiZ2V0UHJvcGVydHkiLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiRGV2aWNlIiwic3lzdGVtIiwiZGVza3RvcCIsImdldEhlYWRlckV4cGFuZGVkIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJnZXRWaWV3RGF0YSIsImxpdmVNb2RlIiwicGhvbmUiLCJvRHluYW1pY1BhZ2UiLCJfaXNJbml0TG9hZEVuYWJsZWQiLCJzZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5Iiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwib0NvbnRyb2xsZXIiLCJzT3V0Ym91bmRUYXJnZXQiLCJvQ29udGV4dCIsInNDcmVhdGVQYXRoIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkIiwiZ2V0U291cmNlIiwiZ2V0Q29udGVudCIsIm9UYWJsZSIsIl9nZXRUYWJsZSIsImFEYXRhIiwiQ2hhcnRVdGlscyIsInNldENoYXJ0RmlsdGVycyIsInJlYmluZCIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsInNlbGVjdGVkS2V5Iiwia2V5Iiwib0NoYXJ0IiwiX3VwZGF0ZVRhYmxlIiwiX3VwZGF0ZUNoYXJ0IiwiSHlicmlkIiwib25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkIiwiZXZlbnQiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJhbm5vdW5jZSIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJleHRlbnNpb25BUEkiLCJFeHRlbnNpb25BUEkiLCJvbkluaXQiLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwiX2hhc011bHRpVmlzdWFsaXphdGlvbnMiLCJhbHBDb250ZW50VmlldyIsIl9nZXREZWZhdWx0UGF0aCIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRlclByb3h5Iiwid2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uIiwiX3NldEluaXRMb2FkIiwidmlldyIsInVpTW9kZWwiLCJnZXRNb2RlbCIsInBhdGgiLCJnZXRJZCIsImlzRWRpdGFibGUiLCJiaW5kRWxlbWVudCIsIm1vZGVsIiwib25CZWZvcmVSZW5kZXJpbmciLCJkeW5taWNQYWdlSGVhZGVyVGl0bGUiLCJnZXRUaXRsZSIsImJyZWFkY3J1bWJzQkIiLCJnZXRCcmVhZGNydW1icyIsInNldEJyZWFkY3J1bWJMaW5rcyIsIm9uRXhpdCIsImRlc3Ryb3kiLCJhVGFibGVzIiwiX2dldENvbnRyb2xzIiwidXBkYXRlQWN0aW9ucyIsIkVkaXRTdGF0ZSIsImlzRWRpdFN0YXRlRGlydHkiLCJ0YWJsZSIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwidGFibGVBUEkiLCJDb21tb25VdGlscyIsImdldFJvdXRpbmdTZXJ2aWNlIiwid2FpdEZvckJpbmRpbmdDbGVhbnVwIiwiYXR0YWNoRXZlbnRPbmNlIiwiX3VwZGF0ZVRhYmxlQWN0aW9ucyIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbnRyb2wiLCJ0eXBlIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsImUiLCJ3YXJuaW5nIiwic2V0RWRpdFN0YXRlUHJvY2Vzc2VkIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJ2aWV3SWQiLCJwYWdlUmVhZHkiLCJ3YWl0Rm9yIiwiX2FwcGx5QXBwU3RhdGUiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiaXNJbnNpZ2h0c0VuYWJsZWQiLCJvblBhZ2VSZWFkeSIsIm1QYXJhbWV0ZXJzIiwiZm9yY2VGb2N1cyIsIl9zZXRJbml0aWFsRm9jdXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ1bmRlZmluZWQiLCJvblZpZXdOZWVkc1JlZnJlc2giLCJzbGljZSIsIm9uQWZ0ZXJDbGVhciIsImFJQk5BY3Rpb25zIiwiZm9yRWFjaCIsImdldElCTkFjdGlvbnMiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsInVwZGF0ZU1lbnVCdXR0b25WaXNpYmxpdHkiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX2ZvY3VzU2lsZW50IiwiZmlsdGVyRmllbGQiLCJmb2N1c0luZm8iLCJnZXRGb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50IiwiZm9jdXMiLCJpc0hlYWRlckV4cGFuZGVkIiwiX2lzRmlsdGVyQmFySGlkZGVuVXNlZCIsImdldFNob3dNZXNzYWdlcyIsInNldFNob3dNZXNzYWdlcyIsIm9GaWx0ZXJJdGVtIiwiZmllbGRUb0ZvY3VzIiwiYnlJZCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sSWQiLCJmb2N1c1JvdyIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9NYW5pZmVzdEVudHJ5IiwiZ2V0TWFuaWZlc3RFbnRyeSIsInRpdGxlIiwic3VidGl0bGUiLCJzdWJUaXRsZSIsImludGVudCIsImljb24iLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQiLCJfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2wiLCJhZGFwdGF0aW9uRmlsdGVyQmFyIiwiZ2V0SW5idWlsdEZpbHRlciIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJlbmFibGVSZXF1ZXN0cyIsIl9pc0ZpbHRlckJhckhpZGRlbiIsIl9pc011bHRpTW9kZSIsInNldENvdW50c091dERhdGVkIiwiX2dldFNlZ21lbnRlZEJ1dHRvbiIsInNDb250cm9sIiwic1NlZ21lbnRlZEJ1dHRvbklkIiwiX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkiLCJzUGF0aCIsImNvbnRyb2xJZCIsIl9nZXRQYWdlTW9kZWwiLCJfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCIsInNWaXN1YWxGaWx0ZXJCYXJJZCIsIlN0YWJsZUlkSGVscGVyIiwiZ2VuZXJhdGUiLCJfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2wiLCJfZ2V0SWNvblRhYkJhciIsIm9Db250cm9sIiwiZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2wiLCJjb250ZW50Iiwic0tleSIsImFDb250cm9scyIsIm9UYWJNdWx0aU1vZGUiLCJnZXRJdGVtcyIsIm9JdGVtIiwiZ2V0S2V5IiwiaW5jbHVkZXMiLCJwdXNoIiwiZGVmYXVsdFBhdGgiLCJMaXN0UmVwb3J0VGVtcGxhdGluZyIsImdldERlZmF1bHRQYXRoIiwiaW5pdExvYWRNb2RlIiwiaW5pdGlhbExvYWQiLCJFbmFibGVkIiwiX2Rpc2FibGVJbml0TG9hZCIsIl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsInZhcmlhbnRNYW5hZ2VtZW50SWQiLCJnZXRWYXJpYW50QmFja1JlZmVyZW5jZSIsImdldERhdGEiLCJyZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwiYmluZCIsIl9zZXRTaGFyZU1vZGVsIiwiZm5HZXRVc2VyIiwiT2JqZWN0UGF0aCIsImdldCIsIm9TaGFyZUluZm8iLCJib29rbWFya1RpdGxlIiwiZG9jdW1lbnQiLCJib29rbWFya0N1c3RvbVVybCIsInNIYXNoIiwiaGFzaGVyIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImlzU2hhcmVJbkphbUFjdGl2ZSIsImlzSmFtQWN0aXZlIiwib1RlbXBsYXRlUHJpdmF0ZU1vZGVsIiwiZ2V0T3duZXJDb21wb25lbnQiLCJtQ2FjaGUiLCJpZ25vcmVkRmllbGRzIiwiYUNoYXJ0cyIsInNDaGFydEVudGl0eVBhdGgiLCJzQ2hhcnRFbnRpdHlTZXQiLCJzQ2FjaGVLZXkiLCJnZXROb3RBcHBsaWNhYmxlRmlsdGVycyIsImhpZGVGaWx0ZXJCYXIiLCJ1c2VIaWRkZW5GaWx0ZXJCYXIiLCJ2YXJpYW50cyIsImdldFZhcmlhbnRzIiwiY3VycmVudFZhcmlhbnQiLCJ2YXJpYW50Iiwib1ZNIiwiQXV0byIsImdldFN0YW5kYXJkVmFyaWFudEtleSIsImdldEN1cnJlbnRWYXJpYW50S2V5Iiwib0NvbmRpdGlvbnMiLCJzdGFydHNXaXRoIiwic3RhbmRhcmRWYXJpYW50IiwiZ2V0RXhlY3V0ZU9uU2VsZWN0IiwiaXNUYWJsZUJvdW5kIiwib0lubmVyQ2hhcnQiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJfZ2V0Q2hhcnQiLCJpc0JvdW5kIiwiZ2V0QmluZGluZ0luZm8iLCJidXR0b25WaXNpYmxlIiwiZ2V0U2VnbWVudGVkQnV0dG9uIiwic2V0VmlzaWJsZSIsInN2IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImVyciIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsImdldEZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50IiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJMaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1BhZ2UgZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlXCI7XG5pbXBvcnQgdHlwZSB7IER5bmFtaWNQYWdlVGl0bGUkU3RhdGVDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVRpdGxlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IEtQSU1hbmFnZW1lbnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0tQSU1hbmFnZW1lbnRcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBTaWRlRWZmZWN0cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL3RlbXBsYXRlcy9MaXN0UmVwb3J0Q29udmVydGVyXCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFN0YWJsZUlkSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgQ29yZUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIEJyZWFkY3J1bWJzIGZyb20gXCJzYXAvZmUvbWFjcm9zL0JyZWFkY3J1bWJzXCI7XG5pbXBvcnQgdHlwZSBDaGFydFR5cGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSBDaGFydERlbGVnYXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0RGVsZWdhdGVcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIE11bHRpcGxlTW9kZUNvbnRyb2wgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9jb250cm9scy9NdWx0aXBsZU1vZGVDb250cm9sXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNPdmVycmlkZSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L292ZXJyaWRlcy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IHR5cGUgSWNvblRhYkJhciBmcm9tIFwic2FwL20vSWNvblRhYkJhclwiO1xuaW1wb3J0IHR5cGUgVGFiQ29udGFpbmVySXRlbSBmcm9tIFwic2FwL20vVGFiQ29udGFpbmVySXRlbVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSW52aXNpYmxlTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlTWVzc2FnZVwiO1xuaW1wb3J0IHsgSW52aXNpYmxlTWVzc2FnZU1vZGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBoYXNoZXIgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2hhc2hlclwiO1xuaW1wb3J0ICogYXMgTGlzdFJlcG9ydFRlbXBsYXRpbmcgZnJvbSBcIi4vTGlzdFJlcG9ydFRlbXBsYXRpbmdcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuY29uc3QgVGVtcGxhdGVDb250ZW50VmlldyA9IENvcmVMaWJyYXJ5LlRlbXBsYXRlQ29udGVudFZpZXcsXG5cdEluaXRpYWxMb2FkTW9kZSA9IENvcmVMaWJyYXJ5LkluaXRpYWxMb2FkTW9kZTtcblxuLyoqXG4gKiBDb250cm9sbGVyIGNsYXNzIGZvciB0aGUgbGlzdCByZXBvcnQgcGFnZSwgdXNlZCBpbnNpZGUgYW4gU0FQIEZpb3JpIGVsZW1lbnRzIGFwcGxpY2F0aW9uLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuTGlzdFJlcG9ydENvbnRyb2xsZXJcIilcbmNsYXNzIExpc3RSZXBvcnRDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKHtcblx0XHRcdG9uQWZ0ZXJCaW5kaW5nOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxSb3V0aW5nKSB7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9vbkFmdGVyQmluZGluZygpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldEVudGl0eVNldDogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiAodGhpcy5iYXNlIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5nZXRDdXJyZW50RW50aXR5U2V0KCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNpZGVFZmZlY3RzLm92ZXJyaWRlKFNpZGVFZmZlY3RzT3ZlcnJpZGUpKVxuXHRfc2lkZUVmZmVjdHMhOiBTaWRlRWZmZWN0cztcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZS5vdmVycmlkZShWaWV3U3RhdGVPdmVycmlkZXMpKVxuXHR2aWV3U3RhdGUhOiBWaWV3U3RhdGU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEtQSU1hbmFnZW1lbnQpXG5cdGtwaU1hbmFnZW1lbnQhOiBLUElNYW5hZ2VtZW50O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgZmlsdGVyQmFyQ29uZGl0aW9ucz86IHVua25vd247XG5cblx0cHJpdmF0ZSBoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGhhc1BlbmRpbmdUYWJsZUNoYW5nZXM/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGV4dGVuc2lvbiBBUEkgZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGV4dGVuc2lvbiBBUEkuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKCk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5pdC5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHR0aGlzLl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoZmlsdGVyQmFyLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdH1cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGZhbHNlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ1b21cIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3Rvck51bWJlclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3VycmVuY3lcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgZmFsc2UpO1xuXG5cdFx0aWYgKHRoaXMuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0bGV0IGFscENvbnRlbnRWaWV3ID0gdGhpcy5fZ2V0RGVmYXVsdFBhdGgoKTtcblx0XHRcdGlmICghRGV2aWNlLnN5c3RlbS5kZXNrdG9wICYmIGFscENvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZCkge1xuXHRcdFx0XHRhbHBDb250ZW50VmlldyA9IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHR9XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBhbHBDb250ZW50Vmlldyk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY29uZGl0aW9ucyBmcm9tIGZpbHRlciBiYXJcblx0XHQvLyB0aGlzIGlzIGxhdGVyIHVzZWQgYmVmb3JlIG5hdmlnYXRpb24gdG8gZ2V0IGNvbmRpdGlvbnMgYXBwbGllZCBvbiB0aGUgZmlsdGVyIGJhclxuXHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IHt9O1xuXG5cdFx0Ly8gQXMgQXBwU3RhdGVIYW5kbGVyLmFwcGx5QXBwU3RhdGUgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0IHdpbGxcblx0XHQvLyBoYXBwZW4gYWZ0ZXIgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkIChvdGhlcndpc2UgdGhlIHJvdXRlciBnZXRzIGJyb2tlbilcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cblx0XHQvLyBDb25maWd1cmUgdGhlIGluaXRpYWwgbG9hZCBzZXR0aW5nc1xuXHRcdHRoaXMuX3NldEluaXRMb2FkKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IHVpTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwidWlcIik7XG5cdFx0Y29uc3QgcGF0aCA9IGAvJHt2aWV3LmdldElkKCl9YDtcblx0XHR1aU1vZGVsLnNldFByb3BlcnR5KHBhdGgsIHsgaXNFZGl0YWJsZTogZmFsc2UgfSk7XG5cdFx0dmlldy5iaW5kRWxlbWVudCh7IHBhdGgsIG1vZGVsOiBcInVpXCIgfSk7XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpOiB2b2lkIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRjb25zdCBkeW5taWNQYWdlSGVhZGVyVGl0bGUgPSBkeW5hbWljUGFnZT8uZ2V0VGl0bGUoKTtcblx0XHRjb25zdCBicmVhZGNydW1ic0JCID0gZHlubWljUGFnZUhlYWRlclRpdGxlLmdldEJyZWFkY3J1bWJzKCkgYXMgQnJlYWRjcnVtYnMgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGJyZWFkY3J1bWJzQkIpIHtcblx0XHRcdGJyZWFkY3J1bWJzQkIuc2V0QnJlYWRjcnVtYkxpbmtzKFwiXCIpO1xuXHRcdH1cblx0fVxuXG5cdG9uRXhpdCgpOiB2b2lkIHtcblx0XHRkZWxldGUgdGhpcy5maWx0ZXJCYXJDb25kaXRpb25zO1xuXHRcdGlmICh0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRfb25BZnRlckJpbmRpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikgYXMgVGFibGVbXTtcblx0XHRsZXQgdXBkYXRlQWN0aW9ucyA9IHRydWU7XG5cdFx0aWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRcdHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdGNvbnN0IG9UYWJsZUJpbmRpbmcgPSB0YWJsZT8uZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0dXBkYXRlQWN0aW9ucyA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblxuXHRcdFx0XHQvLyBVcGRhdGUgdGhlIHRhYmxlIGNvbnRlbnQgdXNpbmcgc2lkZSBlZmZlY3RzIChsaXN0QmluZGluZy5yZWZyZXNoIGRvZXNuJ3Qga2VlcCBleHBhbnNpb24gc3RhdGVzIGluIGEgVHJlZVRhYmxlKVxuXHRcdFx0XHRDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpXG5cdFx0XHRcdFx0LmdldFJvdXRpbmdTZXJ2aWNlKClcblx0XHRcdFx0XHQud2FpdEZvckJpbmRpbmdDbGVhbnVwKClcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZWNlaXZlZFwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdFx0XHRcdFx0XHQvLyBBcyB0aGUgcmVmcmVzaCBvbiBhIFRyZWVUYWJsZSB1c2VzIHNpZGUtZWZmZWN0cywgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHBlbmRpbmcgY2hhbmdlc1xuXHRcdFx0XHRcdFx0XHQvLyBiZWZvcmUgdGhlIHNpZGUtZWZmZWN0cyBhcmUgcXVlcmllZCAoZS5nLiBmYWlsZWQgUEFUQ0ggcXVlcmllcyB0aGF0IHdvdWxkIGJlIHJlc2VudCB0b2dldGhlciB3aXRoIHNpZGUgZWZmZWN0cyBHRVQpXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0TW9kZWwoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRhYmxlQVBJLnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSB3YWl0aW5nIHJlZnJlc2hpbmcgTGlzdFJlcG9ydCB0YWJsZVwiLCBlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdEVkaXRTdGF0ZS5zZXRFZGl0U3RhdGVQcm9jZXNzZWQoKTtcblx0XHR9XG5cblx0XHRpZiAodXBkYXRlQWN0aW9ucykge1xuXHRcdFx0dGhpcy5fdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRpZiAoIWludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiaW5pdGlhbFZhcmlhbnRBcHBsaWVkXCIpKSB7XG5cdFx0XHRjb25zdCB2aWV3SWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpO1xuXHRcdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcih0aGlzLl9hcHBseUFwcFN0YXRlKHZpZXdJZCkpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpbml0aWFsVmFyaWFudEFwcGxpZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHRcdGNvbnN0IGVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKS5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpO1xuXHRcdGVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG5cdFx0XHQuaXNJbnNpZ2h0c0VuYWJsZWQoKVxuXHRcdFx0LnRoZW4oKGlzSW5zaWdodHNFbmFibGVkOiBib29sZWFuKSA9PiB7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNJbnNpZ2h0c1N1cHBvcnRlZFwiLCBpc0luc2lnaHRzRW5hYmxlZCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNoZWNraW5nIGlmIGluc2lnaHRzIGFyZSBlbmFibGVkXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGZvcm1hdHRlcnMgPSB7XG5cdFx0c2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcChcblx0XHRcdHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLFxuXHRcdFx0YUlnbm9yZWRGaWVsZHM6IHN0cmluZ1tdLFxuXHRcdFx0YklzQ2hhcnQ6IGJvb2xlYW4gfCBzdHJpbmcsXG5cdFx0XHRvQXBwbHlTdXBwb3J0ZWQ/OiB7IGVuYWJsZVNlYXJjaDogYm9vbGVhbiB9XG5cdFx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRcdGxldCBzVGV4dCA9IFwiXCI7XG5cdFx0XHRiSXNDaGFydCA9IGJJc0NoYXJ0ID09PSBcInRydWVcIiB8fCBiSXNDaGFydCA9PT0gdHJ1ZTtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhciAmJiBBcnJheS5pc0FycmF5KGFJZ25vcmVkRmllbGRzKSAmJiBhSWdub3JlZEZpZWxkcy5sZW5ndGggPiAwICYmIGJJc0NoYXJ0KSB7XG5cdFx0XHRcdGNvbnN0IGFJZ25vcmVkTGFiZWxzID0gTWVzc2FnZVN0cmlwLmdldExhYmVscyhcblx0XHRcdFx0XHRhSWdub3JlZEZpZWxkcyxcblx0XHRcdFx0XHRvRmlsdGVyQmFyLmRhdGEoXCJlbnRpdHlUeXBlXCIpLFxuXHRcdFx0XHRcdG9GaWx0ZXJCYXIsXG5cdFx0XHRcdFx0Z2V0UmVzb3VyY2VNb2RlbChvRmlsdGVyQmFyKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBiSXNTZWFyY2hJZ25vcmVkID0gIW9BcHBseVN1cHBvcnRlZD8uZW5hYmxlU2VhcmNoO1xuXHRcdFx0XHRzVGV4dCA9IGJJc0NoYXJ0XG5cdFx0XHRcdFx0PyBNZXNzYWdlU3RyaXAuZ2V0QUxQVGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckJhciwgYklzU2VhcmNoSWdub3JlZClcblx0XHRcdFx0XHQ6IE1lc3NhZ2VTdHJpcC5nZXRUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQmFyLCBcIlwiKTtcblx0XHRcdFx0cmV0dXJuIHNUZXh0O1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKFwiQWZ0ZXJcIilcblx0YXN5bmMgb25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IHsgZm9yY2VGb2N1cz86IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChtUGFyYW1ldGVycy5mb3JjZUZvY3VzKSB7XG5cdFx0XHR0aGlzLl9zZXRJbml0aWFsRm9jdXMoKTtcblx0XHR9XG5cdFx0Ly8gUmVtb3ZlIHRoZSBoYW5kbGVyIG9uIGJhY2sgbmF2aWdhdGlvbiB0aGF0IGRpc3BsYXlzIERyYWZ0IGNvbmZpcm1hdGlvblxuXHRcdGF3YWl0IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKHVuZGVmaW5lZCk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBjb250ZW50IG9mIGEgY3VzdG9tIHZpZXcgdXNlZCBpbiBhIGxpc3QgcmVwb3J0IG5lZWRzIHRvIGJlIHJlZnJlc2hlZC5cblx0ICogVGhpcyBoYXBwZW5zIGVpdGhlciB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlIG9uIHRoZSBGaWx0ZXJCYXIgYW5kIHRoZSBzZWFyY2ggaXMgdHJpZ2dlcmVkLFxuXHQgKiBvciB3aGVuIGEgdGFiIHdpdGggY3VzdG9tIGNvbnRlbnQgaXMgc2VsZWN0ZWQsXG5cdCAqIG9yIHdoZW4gdGhlIHZpZXcgaXMgZm9yY2VkIHRvIGJlIHJlZnJlc2hlZCB0aHJvdWdoIHRoZSBFeHRlbnNpb24gQVBJIGZvciB0aGUgbGlzdCByZXBvcnQncyBwdWJsaWMgbWV0aG9kIHNldFRhYkNvbnRlbnRUb0JlUmVmcmVzaGVkT25OZXh0T3BlbmluZy5cblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBpbiBjYXNlIG9mIGN1c3RvbWl6YXRpb24uXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBNYXAgY29udGFpbmluZyB0aGUgZmlsdGVyIGNvbmRpdGlvbnMgb2YgdGhlIEZpbHRlckJhciwgdGhlIGN1cnJlbnRUYWJJRFxuXHQgKiBhbmQgdGhlIHZpZXcgcmVmcmVzaCBjYXVzZSAodGFiQ2hhbmdlZCwgc2VhcmNoIG9yIGZvcmNlZFJlZnJlc2gpLlxuXHQgKiBUaGUgbWFwIGxvb2tzIGxpa2UgdGhpczpcblx0ICogPGNvZGU+PHByZT5cblx0ICogXHR7XG5cdCAqIFx0XHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdCAqIFx0XHRcdENvdW50cnk6IFtcblx0ICogXHRcdFx0XHR7XG5cdCAqIFx0XHRcdFx0XHRvcGVyYXRvcjogXCJFUVwiXG5cdCAqXHRcdFx0XHRcdHZhbGlkYXRlZDogXCJOb3RWYWxpZGF0ZWRcIlxuXHQgKlx0XHRcdFx0XHR2YWx1ZXM6IFtcIkdlcm1hbnlcIiwgLi4uXVxuXHQgKiBcdFx0XHRcdH0sXG5cdCAqIFx0XHRcdFx0Li4uXG5cdCAqIFx0XHRcdF1cblx0ICogXHRcdFx0Li4uXG5cdCAqIFx0XHR9LFxuXHQgKlx0XHRjdXJyZW50VGFiSWQ6IFwiZmU6OkN1c3RvbVRhYjo6dGFiMVwiLFxuXHQgKlx0XHRyZWZyZXNoQ2F1c2U6IFwidGFiQ2hhbmdlZFwiIHwgXCJzZWFyY2hcIiB8IFwiZm9yY2VkUmVmcmVzaFwiXG5cdCAqXHR9XG5cdCAqIDwvcHJlPjwvY29kZT5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uVmlld05lZWRzUmVmcmVzaChtUGFyYW1ldGVyczogdW5rbm93bik6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgd2hlbiBhIGZpbHRlciBvciBzZWFyY2ggdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBpbiB0aGUgRmlsdGVyQmFyLFxuXHQgKiBidXQgaGFzIG5vdCBiZWVuIHZhbGlkYXRlZCB5ZXQgYnkgdGhlIGVuZCB1c2VyICh3aXRoIHRoZSAnR28nIG9yICdTZWFyY2gnIGJ1dHRvbikuXG5cdCAqIFR5cGljYWxseSwgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgdGFiIGlzIGdyZXllZCBvdXQgdW50aWwgdGhlIGZpbHRlcnMgYXJlIHZhbGlkYXRlZC5cblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBpbiBjYXNlIG9mIGN1c3RvbWl6YXRpb24uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25QZW5kaW5nRmlsdGVycygpOiB2b2lkIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdGdldEN1cnJlbnRFbnRpdHlTZXQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0VGFibGUoKT8uZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpLnNsaWNlKDEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgJ0NsZWFyJyBidXR0b24gb24gdGhlIEZpbHRlckJhciBpcyBwcmVzc2VkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uQWZ0ZXJDbGVhcigpOiB2b2lkIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpbml0aWF0ZXMgdGhlIHVwZGF0ZSBvZiB0aGUgZW5hYmxlZCBzdGF0ZSBvZiB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCB0aGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgRGF0YUZpZWxkRm9ySUJOIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSBhVGFibGVzIEFycmF5IG9mIHRhYmxlcyBpbiB0aGUgbGlzdCByZXBvcnRcblx0ICovXG5cdF91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlczogVGFibGVbXSk6IHZvaWQge1xuXHRcdGxldCBhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGUpIHtcblx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvVGFibGUsIGFJQk5BY3Rpb25zKTtcblx0XHR9KTtcblx0XHRDb21tb25VdGlscy51cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9ucywgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZU1lbnVCdXR0b25WaXNpYmxpdHkoYUlCTkFjdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHNjcm9sbHMgdG8gYSBzcGVjaWZpYyByb3cgb24gYWxsIHRoZSBhdmFpbGFibGUgdGFibGVzLlxuXHQgKiBAcGFyYW0gc1Jvd1BhdGggVGhlIHBhdGggb2YgdGhlIHRhYmxlIHJvdyBjb250ZXh0IHRvIGJlIHNjcm9sbGVkIHRvXG5cdCAqL1xuXHRfc2Nyb2xsVGFibGVzVG9Sb3coc1Jvd1BhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBDb250cm9sKSB7XG5cdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3cob1RhYmxlIGFzIFRhYmxlLCBzUm93UGF0aCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBhIHNpbGVudCBmb2N1cyBvbiB0aGUgZmlsdGVyIGZpZWxkLiBTdXBwcmVzc2VzIHRoZSBvcGVuaW5nIG9mIHRoZSB0eXBlLWFoZWFkIHBvcHVwLlxuXHQgKiBAcGFyYW0gZmlsdGVyRmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBmb2N1cyBzaG91bGQgYmUgc2V0IGFmdGVyIHRoZSBpbml0aWFsIGxvYWRcblx0ICovXG5cdF9mb2N1c1NpbGVudChmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQpOiB2b2lkIHtcblx0XHRjb25zdCBmb2N1c0luZm8gPSBmaWx0ZXJGaWVsZC5nZXRGb2N1c0luZm8oKSBhcyB7IHRhcmdldEluZm86IG9iamVjdCB9O1xuXHRcdGZvY3VzSW5mby50YXJnZXRJbmZvID0geyBzaWxlbnQ6IHRydWUgfTtcblx0XHRmaWx0ZXJGaWVsZC5mb2N1cyhmb2N1c0luZm8pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGluaXRpYWwgZm9jdXMgaW4gYSBsaXN0IHJlcG9ydCBiYXNlZCBvbiB0aGUgVXNlciBFeHBlcmllbmNlIGd1aWRlbGluZXMuXG5cdCAqXG5cdCAqL1xuXHRfc2V0SW5pdGlhbEZvY3VzKCk6IHZvaWQge1xuXHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCksXG5cdFx0XHRpc0hlYWRlckV4cGFuZGVkID0gZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSxcblx0XHRcdGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXI7XG5cdFx0aWYgKGZpbHRlckJhciAmJiAhdGhpcy5faXNGaWx0ZXJCYXJIaWRkZW5Vc2VkKCkpIHtcblx0XHRcdC8vRW5hYmxpbmcgbWFuZGF0b3J5IGZpbHRlciBmaWVsZHMgbWVzc2FnZSBkaWFsb2dcblx0XHRcdGlmICghZmlsdGVyQmFyLmdldFNob3dNZXNzYWdlcygpKSB7XG5cdFx0XHRcdGZpbHRlckJhci5zZXRTaG93TWVzc2FnZXModHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNIZWFkZXJFeHBhbmRlZCkge1xuXHRcdFx0XHRjb25zdCBmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgPSBmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKS5maW5kKGZ1bmN0aW9uIChvRmlsdGVySXRlbTogRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0ZpbHRlckl0ZW0uZ2V0UmVxdWlyZWQoKSAmJiBvRmlsdGVySXRlbS5nZXRDb25kaXRpb25zKCkubGVuZ3RoID09PSAwO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Ly9Gb2N1c2luZyBvbiB0aGUgZmlyc3QgZW1wdHkgbWFuZGF0b3J5IGZpbHRlciBmaWVsZCwgb3Igb24gdGhlIGZpcnN0IGZpbHRlciBmaWVsZCBpZiB0aGUgdGFibGUgZGF0YSBpcyBsb2FkZWRcblx0XHRcdFx0Ly8gRG8gYSBcInNpbGVudFwiIGZvY3VzIGZvciBGaWx0ZXJGaWVsZCwgYnkgYWRkaW5nIHRoZSBzaWxlbnQgYXR0cmlidXRlLiBUaGUgc2lsZW50IGF0dHJpYnV0ZSBzdXBwcmVzc2VzIHR5cGVhaGVhZCBvcGVuaW5nLlxuXHRcdFx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRcdFx0aWYgKGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZC5pc0E8RmlsdGVyRmllbGQ+KFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fZm9jdXNTaWxlbnQoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0KGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCBhcyBDb250cm9sKS5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpICYmIGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQvLyBBZGQgY2hlY2sgZm9yIGF2YWlsYWJsZSBmaWx0ZXJJdGVtc1xuXHRcdFx0XHRcdGNvbnN0IGZpZWxkVG9Gb2N1cyA9IGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpWzBdO1xuXHRcdFx0XHRcdGlmIChmaWVsZFRvRm9jdXMuaXNBPEZpbHRlckZpZWxkPihcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpZWxkVG9Gb2N1cyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdChmaWVsZFRvRm9jdXMgYXMgQ29udHJvbCkuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly9Gb2N1c2luZyBvbiB0aGUgR28gYnV0dG9uXG5cdFx0XHRcdFx0dGhpcy5nZXRWaWV3KCkuYnlJZChgJHt0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKX0tYnRuU2VhcmNoYCk/LmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0XHR0aGlzLl9nZXRUYWJsZSgpXG5cdFx0XHRcdFx0Py5mb2N1c1JvdygwKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgaW5pdGlhbCBmb2N1cyBvbiB0aGUgdGFibGUgXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2dldFRhYmxlKClcblx0XHRcdFx0Py5mb2N1c1JvdygwKVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBpbml0aWFsIGZvY3VzIG9uIHRoZSB0YWJsZSBcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0X2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCk6IHsgdGl0bGU/OiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmcgfSB7XG5cdFx0Y29uc3Qgb01hbmlmZXN0RW50cnkgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAuYXBwXCIpO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogb01hbmlmZXN0RW50cnkudGl0bGUsXG5cdFx0XHRzdWJ0aXRsZTogb01hbmlmZXN0RW50cnkuc3ViVGl0bGUgfHwgXCJcIixcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2woKTogRmlsdGVyQmFyIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKSkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpOiBEeW5hbWljUGFnZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQoKSkgYXMgRHluYW1pY1BhZ2U7XG5cdH1cblxuXHRfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2woKTogQ29udHJvbCB7XG5cdFx0Ly8gSWYgdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBpcyBwYXJ0IG9mIHRoZSBET00gdHJlZSwgdGhlIFwiQWRhcHQgRmlsdGVyXCIgZGlhbG9nIGlzIG9wZW4sXG5cdFx0Ly8gYW5kIHdlIHJldHVybiB0aGUgYWRhcHRhdGlvbiBmaWx0ZXIgYmFyIGFzIGFuIGFjdGl2ZSBjb250cm9sICh2aXNpYmxlIGZvciB0aGUgdXNlcilcblx0XHRjb25zdCBhZGFwdGF0aW9uRmlsdGVyQmFyID0gKHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyB7IGdldEluYnVpbHRGaWx0ZXI/OiBGdW5jdGlvbiB9KS5nZXRJbmJ1aWx0RmlsdGVyPy4oKTtcblx0XHRyZXR1cm4gYWRhcHRhdGlvbkZpbHRlckJhcj8uZ2V0UGFyZW50KCkgPyBhZGFwdGF0aW9uRmlsdGVyQmFyIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0YXN5bmMgX2FwcGx5QXBwU3RhdGUodmlld0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUodmlld0lkLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0b0ZpbHRlckJhci5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzRmlsdGVyQmFySGlkZGVuKCkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0XHR0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldFNlZ21lbnRlZEJ1dHRvbihzQ29udHJvbDogc3RyaW5nKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1NlZ21lbnRlZEJ1dHRvbklkID0gKHNDb250cm9sID09PSBcIkNoYXJ0XCIgPyB0aGlzLmdldENoYXJ0Q29udHJvbCgpIDogdGhpcy5fZ2V0VGFibGUoKSk/LmRhdGEoXCJzZWdtZW50ZWRCdXR0b25JZFwiKTtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChzU2VnbWVudGVkQnV0dG9uSWQpO1xuXHR9XG5cblx0X2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoc1BhdGg6IHN0cmluZyk6IENvbnRyb2wgfCBNYWNyb0FQSSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29udHJvbElkID0gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KHNQYXRoKTtcblx0XHRyZXR1cm4gY29udHJvbElkID8gKHRoaXMuZ2V0VmlldygpLmJ5SWQoY29udHJvbElkKSBhcyBDb250cm9sKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZHluYW1pY0xpc3RSZXBvcnRJZFwiKSB8fCBcIlwiO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZmlsdGVyQmFySWRcIikgfHwgXCJcIjtcblx0fVxuXG5cdGdldENoYXJ0Q29udHJvbCgpOiBDb250cm9sIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi9zaW5nbGVDaGFydElkXCIpIGFzIENoYXJ0VHlwZTtcblx0fVxuXG5cdF9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sKCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNWaXN1YWxGaWx0ZXJCYXJJZCA9IFN0YWJsZUlkSGVscGVyLmdlbmVyYXRlKFtcInZpc3VhbEZpbHRlclwiLCB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKV0pO1xuXHRcdHJldHVybiBzVmlzdWFsRmlsdGVyQmFySWQgPyB0aGlzLmdldFZpZXcoKS5ieUlkKHNWaXN1YWxGaWx0ZXJCYXJJZCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2woKTogVmFyaWFudE1hbmFnZW1lbnQge1xuXHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3ZhcmlhbnRNYW5hZ2VtZW50L2lkXCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHR9XG5cblx0X2dldE11bHRpTW9kZUNvbnRyb2woKTogTXVsdGlwbGVNb2RlQ29udHJvbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlOjpDb250cm9sXCIpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cdH1cblxuXHRfZ2V0SWNvblRhYkJhcigpOiBJY29uVGFiQmFyIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpUYWJNdWx0aXBsZU1vZGVcIikgYXMgSWNvblRhYkJhcjtcblx0fVxuXG5cdF9nZXRUYWJsZSgpOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpPy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5jb250ZW50O1xuXHRcdFx0cmV0dXJuIG9Db250cm9sPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpID8gKG9Db250cm9sIGFzIFRhYmxlKSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvc2luZ2xlVGFibGVJZFwiKSBhcyBUYWJsZSB8IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRfZ2V0Q29udHJvbHMoc0tleT86IHN0cmluZyk6IENvbnRyb2xbXSB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IGFDb250cm9sczogQ29udHJvbFtdID0gW107XG5cdFx0XHRjb25zdCBvVGFiTXVsdGlNb2RlID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpLmNvbnRlbnQ7XG5cdFx0XHRvVGFiTXVsdGlNb2RlLmdldEl0ZW1zKCkuZm9yRWFjaCgob0l0ZW06IHVua25vd24pID0+IHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5ieUlkKChvSXRlbSBhcyBUYWJDb250YWluZXJJdGVtKS5nZXRLZXkoKSkgYXMgQ29udHJvbDtcblx0XHRcdFx0aWYgKG9Db250cm9sICYmIHNLZXkpIHtcblx0XHRcdFx0XHRpZiAoKG9JdGVtIGFzIFRhYkNvbnRhaW5lckl0ZW0pLmdldEtleSgpLmluY2x1ZGVzKGBmZTo6JHtzS2V5fWApKSB7XG5cdFx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db250cm9sICE9PSB1bmRlZmluZWQgJiYgb0NvbnRyb2wgIT09IG51bGwpIHtcblx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGFDb250cm9scztcblx0XHR9IGVsc2UgaWYgKHNLZXkgPT09IFwiQ2hhcnRcIikge1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdHJldHVybiBvQ2hhcnQgPyBbb0NoYXJ0XSA6IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0cmV0dXJuIG9UYWJsZSA/IFtvVGFibGVdIDogW107XG5cdFx0fVxuXHR9XG5cblx0X2dldERlZmF1bHRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGVmYXVsdFBhdGggPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXREZWZhdWx0UGF0aCh0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvdmlld3NcIikgfHwgW10pO1xuXHRcdHN3aXRjaCAoZGVmYXVsdFBhdGgpIHtcblx0XHRcdGNhc2UgXCJwcmltYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0Y2FzZSBcInNlY29uZGFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTtcblx0XHRcdGNhc2UgXCJib3RoXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIExpc3RSZXBvcnQgaXMgY29uZmlndXJlZCB3aXRoIE11bHRpcGxlIFRhYmxlIG1vZGUuXG5cdCAqIEByZXR1cm5zIElzIE11bHRpcGxlIFRhYmxlIG1vZGUgc2V0P1xuXHQgKi9cblx0X2lzTXVsdGlNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9tdWx0aVZpZXdzQ29udHJvbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgdG8gbG9hZCBkYXRhIGF0IHN0YXJ0IHVwLlxuXHQgKiBAcmV0dXJucyBJcyBJbml0TG9hZCBlbmFibGVkP1xuXHQgKi9cblx0X2lzSW5pdExvYWRFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGluaXRMb2FkTW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaW5pdGlhbExvYWQ7XG5cdFx0cmV0dXJuIGluaXRMb2FkTW9kZSA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQ7XG5cdH1cblxuXHRfaGFzTXVsdGlWaXN1YWxpemF0aW9ucygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2hhc011bHRpVmlzdWFsaXphdGlvbnNcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHN1c3BlbmQgc2VhcmNoIG9uIHRoZSBmaWx0ZXIgYmFyLiBUaGUgaW5pdGlhbCBsb2FkaW5nIG9mIGRhdGEgaXMgZGlzYWJsZWQgYmFzZWQgb24gdGhlIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gSW5pdExvYWQgLSBEaXNhYmxlZC9BdXRvLlxuXHQgKiBJdCBpcyBlbmFibGVkIGxhdGVyIHdoZW4gdGhlIHZpZXcgc3RhdGUgaXMgc2V0LCB3aGVuIGl0IGlzIHBvc3NpYmxlIHRvIHJlYWxpemUgaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVycy5cblx0ICovXG5cdF9kaXNhYmxlSW5pdExvYWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdC8vIGNoZWNrIGZvciBmaWx0ZXIgYmFyIGhpZGRlblxuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGZpbHRlckJhci5lbmFibGVSZXF1ZXN0cyhmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgYnkgZmxleCB0byBkZXRlcm1pbmUgaWYgdGhlIGFwcGx5QXV0b21hdGljYWxseSBzZXR0aW5nIG9uIHRoZSB2YXJpYW50IGlzIHZhbGlkLlxuXHQgKiBDYWxsZWQgb25seSBmb3IgU3RhbmRhcmQgVmFyaWFudCBhbmQgb25seSB3aGVuIHRoZXJlIGlzIGRpc3BsYXkgdGV4dCBzZXQgZm9yIGFwcGx5QXV0b21hdGljYWxseSAoRkUgb25seSBzZXRzIGl0IGZvciBBdXRvKS5cblx0ICogQHJldHVybnMgQm9vbGVhbiB0cnVlIGlmIGRhdGEgc2hvdWxkIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdF9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCgpOiBib29sZWFuIHtcblx0XHQvLyBXZSBhbHdheXMgcmV0dXJuIGZhbHNlIGFuZCB0YWtlIGNhcmUgb2YgaXQgd2hlbiB2aWV3IHN0YXRlIGlzIHNldFxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmUgdGhlIHNldHRpbmdzIGZvciBpbml0aWFsIGxvYWQgYmFzZWQgb25cblx0ICogLSBtYW5pZmVzdCBzZXR0aW5nIGluaXRMb2FkIC0gRW5hYmxlZC9EaXNhYmxlZC9BdXRvXG5cdCAqIC0gdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHZhcmlhbnRcblx0ICogLSBpZiB0aGVyZSBhcmUgZGVmYXVsdCBmaWx0ZXJzXG5cdCAqIFdlIGRpc2FibGUgdGhlIGZpbHRlciBiYXIgc2VhcmNoIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuYWJsZSBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0LlxuXHQgKi9cblx0X3NldEluaXRMb2FkKCk6IHZvaWQge1xuXHRcdC8vIGlmIGluaXRMb2FkIGlzIERpc2FibGVkIG9yIEF1dG8sIHN3aXRjaCBvZmYgZmlsdGVyIGJhciBzZWFyY2ggdGVtcG9yYXJpbHkgYXQgc3RhcnRcblx0XHRpZiAoIXRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdHRoaXMuX2Rpc2FibGVJbml0TG9hZCgpO1xuXHRcdH1cblx0XHQvLyBzZXQgaG9vayBmb3IgZmxleCBmb3Igd2hlbiBzdGFuZGFyZCB2YXJpYW50IGlzIHNldCAoYXQgc3RhcnQgb3IgYnkgdXNlciBhdCBydW50aW1lKVxuXHRcdC8vIHJlcXVpcmVkIHRvIG92ZXJyaWRlIHRoZSB1c2VyIHNldHRpbmcgJ2FwcGx5IGF1dG9tYXRpY2FsbHknIGJlaGF2aW91ciBpZiB0aGVyZSBhcmUgbm8gZmlsdGVyc1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50SWQgPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXRWYXJpYW50QmFja1JlZmVyZW5jZShcblx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHR0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0RGF0YSgpIGFzIExpc3RSZXBvcnREZWZpbml0aW9uXG5cdFx0KTtcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHZhcmlhbnRNYW5hZ2VtZW50SWQgJiYgKHRoaXMuZ2V0VmlldygpLmJ5SWQodmFyaWFudE1hbmFnZW1lbnRJZCkgYXMgVmFyaWFudE1hbmFnZW1lbnQpO1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0KFxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCBhcyB7IHJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQ/OiBGdW5jdGlvbiB9XG5cdFx0XHQpPy5yZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50Py4odGhpcy5fYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHR9XG5cblx0X3NldFNoYXJlTW9kZWwoKTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogZGVhY3RpdmF0ZWQgZm9yIG5vdyAtIGN1cnJlbnRseSB0aGVyZSBpcyBubyBfdGVtcGxQcml2IGFueW1vcmUsIHRvIGJlIGRpc2N1c3NlZFxuXHRcdC8vIHRoaXMgbWV0aG9kIGlzIGN1cnJlbnRseSBub3QgY2FsbGVkIGFueW1vcmUgZnJvbSB0aGUgaW5pdCBtZXRob2RcblxuXHRcdGNvbnN0IGZuR2V0VXNlciA9IE9iamVjdFBhdGguZ2V0KFwic2FwLnVzaGVsbC5Db250YWluZXIuZ2V0VXNlclwiKTtcblx0XHQvL3ZhciBvTWFuaWZlc3QgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YWRhdGEoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpXCIpO1xuXHRcdC8vdmFyIHNCb29rbWFya0ljb24gPSAob01hbmlmZXN0ICYmIG9NYW5pZmVzdC5pY29ucyAmJiBvTWFuaWZlc3QuaWNvbnMuaWNvbikgfHwgXCJcIjtcblxuXHRcdC8vc2hhcmVNb2RlbDogSG9sZHMgYWxsIHRoZSBzaGFyaW5nIHJlbGV2YW50IGluZm9ybWF0aW9uIGFuZCBpbmZvIHVzZWQgaW4gWE1MIHZpZXdcblx0XHRjb25zdCBvU2hhcmVJbmZvID0ge1xuXHRcdFx0Ym9va21hcmtUaXRsZTogZG9jdW1lbnQudGl0bGUsIC8vVG8gbmFtZSB0aGUgYm9va21hcmsgYWNjb3JkaW5nIHRvIHRoZSBhcHAgdGl0bGUuXG5cdFx0XHRib29rbWFya0N1c3RvbVVybDogZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdFx0XHRcdGNvbnN0IHNIYXNoID0gaGFzaGVyLmdldEhhc2goKTtcblx0XHRcdFx0cmV0dXJuIHNIYXNoID8gYCMke3NIYXNofWAgOiB3aW5kb3cubG9jYXRpb24uaHJlZjtcblx0XHRcdH0sXG5cdFx0XHQvKlxuXHRcdFx0XHRcdFx0XHRUbyBiZSBhY3RpdmF0ZWQgb25jZSB0aGUgRkxQIHNob3dzIHRoZSBjb3VudCAtIHNlZSBjb21tZW50IGFib3ZlXG5cdFx0XHRcdFx0XHRcdGJvb2ttYXJrU2VydmljZVVybDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly92YXIgb1RhYmxlID0gb1RhYmxlLmdldElubmVyVGFibGUoKTsgb1RhYmxlIGlzIGFscmVhZHkgdGhlIHNhcC5mZSB0YWJsZSAoYnV0IG5vdCB0aGUgaW5uZXIgb25lKVxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB1c2UgdGFibGUuZ2V0TGlzdEJpbmRpbmdJbmZvIGluc3RlYWQgb2YgdGhlIGJpbmRpbmdcblx0XHRcdFx0XHRcdFx0XHR2YXIgb0JpbmRpbmcgPSBvVGFibGUuZ2V0QmluZGluZyhcInJvd3NcIikgfHwgb1RhYmxlLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmcgPyBmbkdldERvd25sb2FkVXJsKG9CaW5kaW5nKSA6IFwiXCI7XG5cdFx0XHRcdFx0XHRcdH0sKi9cblx0XHRcdGlzU2hhcmVJbkphbUFjdGl2ZTogISFmbkdldFVzZXIgJiYgZm5HZXRVc2VyKCkuaXNKYW1BY3RpdmUoKVxuXHRcdH07XG5cblx0XHRjb25zdCBvVGVtcGxhdGVQcml2YXRlTW9kZWwgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJfdGVtcGxQcml2XCIpIGFzIEpTT05Nb2RlbDtcblx0XHRvVGVtcGxhdGVQcml2YXRlTW9kZWwuc2V0UHJvcGVydHkoXCIvbGlzdFJlcG9ydC9zaGFyZVwiLCBvU2hhcmVJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBmaWVsZHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgdG8gdGhlIGZpbHRlciBiYXIgKHRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIEFMUCBzY2VuYXJpbykuXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICogQHBhcmFtIG9GaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICovXG5cdF91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXI6IEZpbHRlckJhcik6IHZvaWQge1xuXHRcdGNvbnN0IG1DYWNoZTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdFx0Y29uc3QgaWdub3JlZEZpZWxkczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge30sXG5cdFx0XHRhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSxcblx0XHRcdGFDaGFydHMgPSB0aGlzLl9nZXRDb250cm9scyhcIkNoYXJ0XCIpO1xuXG5cdFx0aWYgKCFhVGFibGVzLmxlbmd0aCB8fCAhYUNoYXJ0cy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZXJlJ3Mgbm90IGEgdGFibGUgYW5kIGEgY2hhcnQsIHdlJ3JlIG5vdCBpbiB0aGUgQUxQIGNhc2Vcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGb3IgdGhlIG1vbWVudCwgdGhlcmUncyBub3RoaW5nIGZvciB0YWJsZXMuLi5cblx0XHRhQ2hhcnRzLmZvckVhY2goZnVuY3Rpb24gKG9DaGFydCkge1xuXHRcdFx0Y29uc3Qgc0NoYXJ0RW50aXR5UGF0aCA9IG9DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiksXG5cdFx0XHRcdHNDaGFydEVudGl0eVNldCA9IHNDaGFydEVudGl0eVBhdGguc2xpY2UoMSksXG5cdFx0XHRcdHNDYWNoZUtleSA9IGAke3NDaGFydEVudGl0eVNldH1DaGFydGA7XG5cdFx0XHRpZiAoIW1DYWNoZVtzQ2FjaGVLZXldKSB7XG5cdFx0XHRcdG1DYWNoZVtzQ2FjaGVLZXldID0gRmlsdGVyVXRpbHMuZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMob0ZpbHRlckJhciwgb0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGlnbm9yZWRGaWVsZHNbc0NhY2hlS2V5XSA9IG1DYWNoZVtzQ2FjaGVLZXldO1xuXHRcdH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRyb2xzL2lnbm9yZWRGaWVsZHNcIiwgaWdub3JlZEZpZWxkcyk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHNldHRpbmcgd2hldGhlciBGaWx0ZXJCYXIgaXMgaGlkZGVuIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5nICdoaWRlRmlsdGVyQmFyJy5cblx0ICogU2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkIGFzIGl0IG1heSBoYXZlIG92ZXJyaWRkZW4gdGhpcyBzZXR0aW5nLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBGaWx0ZXJCYXIgaXMgaGlkZGVuLCBmYWxzZSBpZiB1bmtub3duXG5cdCAqL1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaGlkZUZpbHRlckJhciB8fCBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgc2V0dGluZyB3aGV0aGVyIEZpbHRlckJhciBpcyBoaWRkZW4gYnV0IHN0aWxsIGV4aXN0cyBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2V0dGluZyAndXNlSGlkZGVuRmlsdGVyQmFyJy5cblx0ICogU2hvdWxkIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBfaXNGaWx0ZXJCYXJIaWRkZW4gYXMgaXQgY2FuIGFsc28gaGlkZSB0aGUgRmlsdGVyQmFyLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBGaWx0ZXJCYXIgaXMgaGlkZGVuLCBmYWxzZSBpZiB1bmtub3duXG5cdCAqL1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW5Vc2VkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnVzZUhpZGRlbkZpbHRlckJhciB8fCBmYWxzZTtcblx0fVxuXG5cdF9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBCb29sZWFuIHtcblx0XHRpZiAoIXZhcmlhbnRNYW5hZ2VtZW50IHx8ICFrZXkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudHMgPSB2YXJpYW50TWFuYWdlbWVudC5nZXRWYXJpYW50cygpO1xuXHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50ID0gdmFyaWFudHMuZmluZChmdW5jdGlvbiAodmFyaWFudCkge1xuXHRcdFx0cmV0dXJuIHZhcmlhbnQgJiYgdmFyaWFudC5nZXRLZXkoKSA9PT0ga2V5O1xuXHRcdH0pO1xuXHRcdHJldHVybiAoY3VycmVudFZhcmlhbnQgJiYgY3VycmVudFZhcmlhbnQuZ2V0UHJvcGVydHkoXCJleGVjdXRlT25TZWxlY3RcIikpIHx8IGZhbHNlO1xuXHR9XG5cblx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTTogVmFyaWFudE1hbmFnZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkF1dG8gJiZcblx0XHRcdCghb1ZNIHx8IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db25kaXRpb25zKSB7XG5cdFx0XHRcdFx0Ly8gaWdub3JlIGZpbHRlcnMgc3RhcnRpbmcgd2l0aCAkIChlLmcuICRzZWFyY2gsICRlZGl0U3RhdGUpXG5cdFx0XHRcdFx0aWYgKG9WTSAmJiAhc0tleS5zdGFydHNXaXRoKFwiJFwiKSAmJiBBcnJheS5pc0FycmF5KG9Db25kaXRpb25zW3NLZXldKSAmJiBvQ29uZGl0aW9uc1tzS2V5XS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIGxvYWQgZGF0YSBhcyBwZXIgdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHRoZSB2YXJpYW50XG5cdFx0XHRcdFx0XHRjb25zdCBzdGFuZGFyZFZhcmlhbnQgPSBvVk0uZ2V0VmFyaWFudHMoKS5maW5kKCh2YXJpYW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YXJpYW50LmdldEtleSgpID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHN0YW5kYXJkVmFyaWFudCAmJiBzdGFuZGFyZFZhcmlhbnQuZ2V0RXhlY3V0ZU9uU2VsZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdF91cGRhdGVUYWJsZShvVGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0aWYgKCFvVGFibGUuaXNUYWJsZUJvdW5kKCkgfHwgdGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzKSB7XG5cdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlQ2hhcnQob0NoYXJ0OiBDaGFydCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gKG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkuX2dldENoYXJ0KG9DaGFydCk7XG5cdFx0aWYgKCEob0lubmVyQ2hhcnQgJiYgb0lubmVyQ2hhcnQuaXNCb3VuZChcImRhdGFcIikpIHx8IHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcykge1xuXHRcdFx0KG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkucmViaW5kKG9DaGFydCwgb0lubmVyQ2hhcnQuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZpbHRlciB0b2dnbGUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gYnV0dG9uVmlzaWJsZSBGaWx0ZXIgdG9nZ2xlIGJ1dHRvbiB2aXNpYmlsaXR5XG5cdCAqL1xuXHRzZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KGJ1dHRvblZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0ZmlsdGVyQmFyPy5nZXRTZWdtZW50ZWRCdXR0b24oKT8uc2V0VmlzaWJsZShidXR0b25WaXNpYmxlKTtcblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdG9uSW5saW5lRWRpdFNhdmUodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdHRoaXMuaW5saW5lRWRpdEZsb3cuaW5saW5lRWRpdFNhdmUoKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyU2VhcmNoKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkhLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdGZpbHRlckJhckFQSS50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0fSxcblx0XHRvbkZpbHRlcnNDaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIFBlbmRpbmcgZmlsdGVycyBpbnRvIEZpbHRlckJhciB0byBiZSB1c2VkIGZvciBjdXN0b20gdmlld3Ncblx0XHRcdFx0dGhpcy5vblBlbmRpbmdGaWx0ZXJzKCk7XG5cblx0XHRcdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29uZGl0aW9uc0Jhc2VkXCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudChvRmlsdGVyQmFyLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBWYXJpYW50TWFuYWdlbWVudCRTZWxlY3RFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IChvRXZlbnQgYXMgVUk1RXZlbnQpLmdldFBhcmFtZXRlcnMoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gcGFyYW1ldGVycy5vcmlnaW5hbFNvdXJjZSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50S2V5ID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImtleVwiKTtcblx0XHRcdGNvbnN0IG11bHRpTW9kZUNvbnRyb2wgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cblx0XHRcdGlmIChtdWx0aU1vZGVDb250cm9sICYmICF2YXJpYW50TWFuYWdlbWVudD8uZ2V0UGFyZW50KCk/LmlzQShcInNhcC51aS5tZGMuQWN0aW9uVG9vbGJhclwiKSkge1xuXHRcdFx0XHQvL05vdCBhIENvbnRyb2wgVmFyaWFudFxuXHRcdFx0XHRtdWx0aU1vZGVDb250cm9sPy5pbnZhbGlkYXRlQ29udGVudCgpO1xuXHRcdFx0XHRtdWx0aU1vZGVDb250cm9sPy5zZXRGcmVlemVDb250ZW50KHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzZXRUaW1lb3V0IGNhdXNlIHRoZSB2YXJpYW50IG5lZWRzIHRvIGJlIGFwcGxpZWQgYmVmb3JlIGp1ZGdpbmcgdGhlIGF1dG8gc2VhcmNoIG9yIHVwZGF0aW5nIHRoZSBhcHAgc3RhdGVcblx0XHRcdHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRcdGNvbnN0IGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCA9IGZpbHRlckJhcj8uZ2V0RmlsdGVySXRlbXMoKS5maW5kKGZ1bmN0aW9uIChmaWx0ZXJJdGVtKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZpbHRlckl0ZW0uZ2V0UmVxdWlyZWQoKSAmJiBmaWx0ZXJJdGVtLmdldENvbmRpdGlvbnMoKS5sZW5ndGggPT09IDA7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRcdFx0ZHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKHZhcmlhbnRNYW5hZ2VtZW50KSkge1xuXHRcdFx0XHRcdC8vIHRoZSBhcHAgc3RhdGUgd2lsbCBiZSB1cGRhdGVkIHZpYSBvblNlYXJjaCBoYW5kbGVyXG5cdFx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIS5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRcdFx0ZmlsdGVyQmFyQVBJLnRyaWdnZXJTZWFyY2goKTtcblx0XHRcdFx0fSBlbHNlIGlmICghdGhpcy5fZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50KHZhcmlhbnRNYW5hZ2VtZW50LCBjdXJyZW50VmFyaWFudEtleSkpIHtcblx0XHRcdFx0XHRtdWx0aU1vZGVDb250cm9sPy5zZXRGcmVlemVDb250ZW50KGZhbHNlKTtcblx0XHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHRcdFx0ZHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDApO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdC8vVE9ETzogU2hvdWxkIHJlbW92ZSB0aGlzIHNldFRpbWVPdXQgb25jZSBWYXJpYW50IE1hbmFnZW1lbnQgcHJvdmlkZXMgYW4gYXBpIHRvIGZldGNoIHRoZSBjdXJyZW50IHZhcmlhbnQga2V5IG9uIHNhdmUhISFcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9LCAxMDAwKTtcblx0XHR9LFxuXHRcdG9uU2VhcmNoKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIEZpbHRlckJhcjsgLy8gb25zZWFyY2ggaXMgY2FsbGVkIG9ubHkgaWYgdGhlIGZpbHRlcmJhciBleGlzdHNcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgYkhpZGVEcmFmdCA9IEZpbHRlclV0aWxzLmdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0KG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIGZhbHNlKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgYkhpZGVEcmFmdCk7XG5cdFx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0aWYgKCF0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlQUxQTm90QXBwbGljYWJsZUZpZWxkcyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9NZGNDaGFydCkge1xuXHRcdFx0XHQvLyBkaXNhYmxlIGJvdW5kIGFjdGlvbnMgVE9ETzogdGhpcyBjbGVhcnMgZXZlcnl0aGluZyBmb3IgdGhlIGNoYXJ0P1xuXHRcdFx0XHQob01kY0NoYXJ0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFwiXCIsIHt9KTtcblxuXHRcdFx0XHRjb25zdCBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0ID0gb01kY0NoYXJ0LmdldEJpbmRpbmdDb250ZXh0KFwicGFnZUludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0XHRjb25zdCBzVGVtcGxhdGVDb250ZW50VmlldyA9IG9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7b1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2FscENvbnRlbnRWaWV3YCk7XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlKSB7XG5cdFx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvL2xvZ2ljIGZvciBleHBhbnNpb24gb3IgY29sbGFwc2Ugb2YgZmlsdGVyIGJhciBzdGFydHNcblx0XHRcdGlmICghRGV2aWNlLnN5c3RlbS5kZXNrdG9wICYmIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0aWYgKGR5bmFtaWNQYWdlLmdldEhlYWRlckV4cGFuZGVkKCkgIT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0ZHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vc2V0dGluZyBpdCB0byBmYWxzZSBzbyB0aGF0IGZ1cnRoZXIgc2VhcmNoIG9yICdHbycgdHJpZ2dlcnMgd29uJ3QgY29sbGFwc2UgdGhlIGZpbHRlciBiYXJcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZFwiLCBmYWxzZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHN0b3JlIGZpbHRlciBiYXIgY29uZGl0aW9ucyB0byB1c2UgbGF0ZXIgd2hpbGUgbmF2aWdhdGlvblxuXHRcdFx0U3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShvRmlsdGVyQmFyKVxuXHRcdFx0XHQudGhlbigob0V4dGVybmFsU3RhdGUpID0+IHtcblx0XHRcdFx0XHR0aGlzLmZpbHRlckJhckNvbmRpdGlvbnMgPSBvRXh0ZXJuYWxTdGF0ZS5maWx0ZXI7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIGV4dGVybmFsIHN0YXRlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHRcdGlmICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmxpdmVNb2RlID09PSBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChEZXZpY2Uuc3lzdGVtLnBob25lKSB7XG5cdFx0XHRcdGNvbnN0IG9EeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0XHRpZiAoIXRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdFx0XHRvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQodHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdFx0XHR0aGlzLnNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyXG5cdFx0ICogQHBhcmFtIHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChcblx0XHRcdG9Db250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdHNPdXRib3VuZFRhcmdldDogc3RyaW5nLFxuXHRcdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0XHRzQ3JlYXRlUGF0aDogc3RyaW5nXG5cdFx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXHRcdG9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHsgZGF0YTogdW5rbm93biB9LCBDaGFydFR5cGU+KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0Q29udGVudCgpIGFzIENoYXJ0LFxuXHRcdFx0XHRvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpLFxuXHRcdFx0XHRhRGF0YSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJkYXRhXCIpLFxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0aWYgKGFEYXRhKSB7XG5cdFx0XHRcdENoYXJ0VXRpbHMuc2V0Q2hhcnRGaWx0ZXJzKG9NZGNDaGFydCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzVGVtcGxhdGVDb250ZW50VmlldyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9hbHBDb250ZW50Vmlld2ApO1xuXHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0KSB7XG5cdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKG9UYWJsZSkge1xuXHRcdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBzZWxlY3RlZEtleTogc3RyaW5nID1cblx0XHRcdFx0KG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkgYXMgeyBzZWxlY3RlZEtleTogc3RyaW5nIH0pLnNlbGVjdGVkS2V5IHx8IChvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIHsga2V5OiBzdHJpbmcgfSkua2V5O1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIsIHNlbGVjdGVkS2V5KTtcblx0XHRcdGNvbnN0IG9DaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXG5cdFx0XHRzd2l0Y2ggKHNlbGVjdGVkS2V5KSB7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTpcblx0XHRcdFx0XHRpZiAob1RhYmxlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZShvVGFibGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0OlxuXHRcdFx0XHRcdGlmIChvQ2hhcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUNoYXJ0KG9DaGFydCBhcyBDaGFydCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkOlxuXHRcdFx0XHRcdGlmIChvVGFibGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChvQ2hhcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUNoYXJ0KG9DaGFydCBhcyBDaGFydCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBldmVudDogRHluYW1pY1BhZ2VUaXRsZSRTdGF0ZUNoYW5nZUV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRcdHRoaXMuc2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eSghIWV2ZW50LmdldFBhcmFtZXRlcihcImlzRXhwYW5kZWRcIikpO1xuXHRcdFx0XHRpZiAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXNFeHBhbmRlZFwiKSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCkuYW5ub3VuY2UoXG5cdFx0XHRcdFx0XHRmaWx0ZXJCYXIuZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpLmZpbHRlcnNUZXh0IGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2VNb2RlLkFzc2VydGl2ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGxvY2FsIFVJIG1vZGVsIG9mIHRoZSBwYWdlIHdpdGggdGhlIFNlbGVjdGlvbiBWYXJpYW50LlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIE1EQyBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsQ29udGV4dCBUaGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHQgKi9cblx0YXN5bmMgX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudChmaWx0ZXJCYXI6IEZpbHRlckJhciwgaW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRjb25zdCBzdiA9IGF3YWl0IGZpbHRlckJhckFQSS5nZXRTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImZpbHRlckJhclNlbGVjdGlvblZhcmlhbnRcIiwgc3YpO1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBFcnJvciBmZXRjaGluZyBzZWxlY3Rpb24gdmFyaWFudCBvbiBmaWx0ZXIgY2hhbmdlOiAke21lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIFNlbGVjdGlvbiBWYXJpYW50IGZyb20gaW50ZXJuYWwgbW9kZWwuXG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvblZhcmlhbnRcblx0ICovXG5cdGdldEZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoKTogU2VsZWN0aW9uVmFyaWFudCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdHJldHVybiAoaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudFwiKSBhcyBTZWxlY3Rpb25WYXJpYW50KSB8fCBuZXcgU2VsZWN0aW9uVmFyaWFudCgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RSZXBvcnRDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE0REEsTUFBTUEsbUJBQW1CLEdBQUdDLFdBQVcsQ0FBQ0QsbUJBQW1CO0lBQzFERSxlQUFlLEdBQUdELFdBQVcsQ0FBQ0MsZUFBZTs7RUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBLElBTU1DLG9CQUFvQixJQUFBQyxJQUFBLEdBRHpCQyxjQUFjLENBQUMsa0RBQWtELENBQUMsRUFBQUMsS0FBQSxHQUVqRUMsY0FBYyxDQUNkQyxlQUFlLENBQUNDLFFBQVEsQ0FBQztJQUN4QkMsY0FBYyxFQUFFLFNBQUFBLENBQUEsRUFBaUM7TUFDL0MsSUFBSSxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUMsQ0FBQyxDQUEwQkMsZUFBZSxDQUFDLENBQUM7SUFDM0U7RUFDRCxDQUFDLENBQ0YsQ0FBQyxFQUFBQyxLQUFBLEdBR0FQLGNBQWMsQ0FDZFEsNkJBQTZCLENBQUNOLFFBQVEsQ0FBQztJQUN0Q08sWUFBWSxFQUFFLFNBQUFBLENBQUEsRUFBK0M7TUFDNUQsT0FBUSxJQUFJLENBQUNDLElBQUksQ0FBMEJDLG1CQUFtQixDQUFDLENBQUM7SUFDakU7RUFDRCxDQUFDLENBQ0YsQ0FBQyxFQUFBQyxLQUFBLEdBR0FaLGNBQWMsQ0FBQ2EsV0FBVyxDQUFDWCxRQUFRLENBQUNZLG1CQUFtQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUd6RGYsY0FBYyxDQUFDZ0IscUJBQXFCLENBQUNkLFFBQVEsQ0FBQ2UsNkJBQTZCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzdFbEIsY0FBYyxDQUFDbUIsS0FBSyxDQUFDakIsUUFBUSxDQUFDa0IsY0FBYyxDQUFD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
877
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMTAiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTEiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxMiIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTMiLCJleHRlbnNpYmxlIiwiX2RlYzE0IiwiX2RlYzE1IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfUGFnZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJnZXRSZXNvdXJjZU1vZGVsIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiaGFuZGxlcnMiLCJvbklubGluZUVkaXRTYXZlIiwiaW5saW5lRWRpdEZsb3ciLCJpbmxpbmVFZGl0U2F2ZSIsIm9uRmlsdGVyU2VhcmNoIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwidHJpZ2dlclNlYXJjaCIsIm9uRmlsdGVyc0NoYW5nZWQiLCJvRXZlbnQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9uUGVuZGluZ0ZpbHRlcnMiLCJnZXRQYXJhbWV0ZXIiLCJzZXRQcm9wZXJ0eSIsIl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQiLCJvblZhcmlhbnRTZWxlY3RlZCIsInBhcmFtZXRlcnMiLCJnZXRQYXJhbWV0ZXJzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJvcmlnaW5hbFNvdXJjZSIsImN1cnJlbnRWYXJpYW50S2V5IiwibXVsdGlNb2RlQ29udHJvbCIsIl9nZXRNdWx0aU1vZGVDb250cm9sIiwiaXNBIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJzZXRGcmVlemVDb250ZW50Iiwic2V0VGltZW91dCIsImZpbHRlckJhciIsImR5bmFtaWNQYWdlIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCIsImZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZmluZCIsImZpbHRlckl0ZW0iLCJnZXRSZXF1aXJlZCIsImdldENvbmRpdGlvbnMiLCJzZXRIZWFkZXJFeHBhbmRlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsIl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzIiwib1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCIsInNUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiZ2V0UHJvcGVydHkiLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiRGV2aWNlIiwic3lzdGVtIiwiZGVza3RvcCIsImdldEhlYWRlckV4cGFuZGVkIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJnZXRWaWV3RGF0YSIsImxpdmVNb2RlIiwicGhvbmUiLCJvRHluYW1pY1BhZ2UiLCJfaXNJbml0TG9hZEVuYWJsZWQiLCJzZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5Iiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwib0NvbnRyb2xsZXIiLCJzT3V0Ym91bmRUYXJnZXQiLCJvQ29udGV4dCIsInNDcmVhdGVQYXRoIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkIiwiZ2V0U291cmNlIiwiZ2V0Q29udGVudCIsIm9UYWJsZSIsIl9nZXRUYWJsZSIsImFEYXRhIiwiQ2hhcnRVdGlscyIsInNldENoYXJ0RmlsdGVycyIsInJlYmluZCIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsInNlbGVjdGVkS2V5Iiwia2V5Iiwib0NoYXJ0IiwiX3VwZGF0ZVRhYmxlIiwiX3VwZGF0ZUNoYXJ0IiwiSHlicmlkIiwib25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkIiwiZXZlbnQiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJhbm5vdW5jZSIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJleHRlbnNpb25BUEkiLCJFeHRlbnNpb25BUEkiLCJvbkluaXQiLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwiX2hhc011bHRpVmlzdWFsaXphdGlvbnMiLCJhbHBDb250ZW50VmlldyIsIl9nZXREZWZhdWx0UGF0aCIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRlclByb3h5Iiwid2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uIiwiX3NldEluaXRMb2FkIiwidmlldyIsInVpTW9kZWwiLCJnZXRNb2RlbCIsInBhdGgiLCJnZXRJZCIsImlzRWRpdGFibGUiLCJiaW5kRWxlbWVudCIsIm1vZGVsIiwib25CZWZvcmVSZW5kZXJpbmciLCJkeW5taWNQYWdlSGVhZGVyVGl0bGUiLCJnZXRUaXRsZSIsImJyZWFkY3J1bWJzQkIiLCJnZXRCcmVhZGNydW1icyIsInNldEJyZWFkY3J1bWJMaW5rcyIsIm9uRXhpdCIsImRlc3Ryb3kiLCJhVGFibGVzIiwiX2dldENvbnRyb2xzIiwidXBkYXRlQWN0aW9ucyIsIkVkaXRTdGF0ZSIsImlzRWRpdFN0YXRlRGlydHkiLCJ0YWJsZSIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwidGFibGVBUEkiLCJDb21tb25VdGlscyIsImdldFJvdXRpbmdTZXJ2aWNlIiwid2FpdEZvckJpbmRpbmdDbGVhbnVwIiwiYXR0YWNoRXZlbnRPbmNlIiwiX3VwZGF0ZVRhYmxlQWN0aW9ucyIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbnRyb2wiLCJ0eXBlIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsImUiLCJ3YXJuaW5nIiwic2V0RWRpdFN0YXRlUHJvY2Vzc2VkIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJwYWdlUmVhZHkiLCJ3YWl0Rm9yIiwiX2FwcGx5QXBwU3RhdGUiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiaXNJbnNpZ2h0c0VuYWJsZWQiLCJvblBhZ2VSZWFkeSIsIm1QYXJhbWV0ZXJzIiwiZm9yY2VGb2N1cyIsIl9zZXRJbml0aWFsRm9jdXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ1bmRlZmluZWQiLCJvblZpZXdOZWVkc1JlZnJlc2giLCJzbGljZSIsIm9uQWZ0ZXJDbGVhciIsImFJQk5BY3Rpb25zIiwiZm9yRWFjaCIsImdldElCTkFjdGlvbnMiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsInVwZGF0ZU1lbnVCdXR0b25WaXNpYmxpdHkiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX2ZvY3VzU2lsZW50IiwiZmlsdGVyRmllbGQiLCJmb2N1c0luZm8iLCJnZXRGb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50IiwiZm9jdXMiLCJpc0hlYWRlckV4cGFuZGVkIiwiX2lzRmlsdGVyQmFySGlkZGVuVXNlZCIsImdldFNob3dNZXNzYWdlcyIsInNldFNob3dNZXNzYWdlcyIsIm9GaWx0ZXJJdGVtIiwiZmllbGRUb0ZvY3VzIiwiYnlJZCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sSWQiLCJmb2N1c1JvdyIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9NYW5pZmVzdEVudHJ5IiwiZ2V0TWFuaWZlc3RFbnRyeSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGl0bGUiLCJzdWJ0aXRsZSIsInN1YlRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCIsIl9nZXRBZGFwdGF0aW9uRmlsdGVyQmFyQ29udHJvbCIsImFkYXB0YXRpb25GaWx0ZXJCYXIiLCJnZXRJbmJ1aWx0RmlsdGVyIiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiYXBwbHlBcHBTdGF0ZSIsImVuYWJsZVJlcXVlc3RzIiwiX2lzRmlsdGVyQmFySGlkZGVuIiwiX2lzTXVsdGlNb2RlIiwic2V0Q291bnRzT3V0RGF0ZWQiLCJfZ2V0U2VnbWVudGVkQnV0dG9uIiwic0NvbnRyb2wiLCJzU2VnbWVudGVkQnV0dG9uSWQiLCJfZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eSIsInNQYXRoIiwiY29udHJvbElkIiwiX2dldFBhZ2VNb2RlbCIsIl9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sIiwic1Zpc3VhbEZpbHRlckJhcklkIiwiU3RhYmxlSWRIZWxwZXIiLCJnZW5lcmF0ZSIsIl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCIsIl9nZXRJY29uVGFiQmFyIiwib0NvbnRyb2wiLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsImNvbnRlbnQiLCJzS2V5IiwiYUNvbnRyb2xzIiwib1RhYk11bHRpTW9kZSIsImdldEl0ZW1zIiwib0l0ZW0iLCJnZXRLZXkiLCJpbmNsdWRlcyIsInB1c2giLCJkZWZhdWx0UGF0aCIsIkxpc3RSZXBvcnRUZW1wbGF0aW5nIiwiZ2V0RGVmYXVsdFBhdGgiLCJpbml0TG9hZE1vZGUiLCJpbml0aWFsTG9hZCIsIkVuYWJsZWQiLCJfZGlzYWJsZUluaXRMb2FkIiwiX2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwidmFyaWFudE1hbmFnZW1lbnRJZCIsImdldFZhcmlhbnRCYWNrUmVmZXJlbmNlIiwiZ2V0RGF0YSIsInJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQiLCJiaW5kIiwiX3NldFNoYXJlTW9kZWwiLCJmbkdldFVzZXIiLCJPYmplY3RQYXRoIiwiZ2V0Iiwib1NoYXJlSW5mbyIsImJvb2ttYXJrVGl0bGUiLCJkb2N1bWVudCIsImJvb2ttYXJrQ3VzdG9tVXJsIiwic0hhc2giLCJoYXNoZXIiLCJnZXRIYXNoIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiaXNTaGFyZUluSmFtQWN0aXZlIiwiaXNKYW1BY3RpdmUiLCJvVGVtcGxhdGVQcml2YXRlTW9kZWwiLCJnZXRPd25lckNvbXBvbmVudCIsIm1DYWNoZSIsImlnbm9yZWRGaWVsZHMiLCJhQ2hhcnRzIiwic0NoYXJ0RW50aXR5UGF0aCIsInNDaGFydEVudGl0eVNldCIsInNDYWNoZUtleSIsImdldE5vdEFwcGxpY2FibGVGaWx0ZXJzIiwiaGlkZUZpbHRlckJhciIsInVzZUhpZGRlbkZpbHRlckJhciIsInZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJjdXJyZW50VmFyaWFudCIsInZhcmlhbnQiLCJvVk0iLCJBdXRvIiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJvQ29uZGl0aW9ucyIsInN0YXJ0c1dpdGgiLCJzdGFuZGFyZFZhcmlhbnQiLCJnZXRFeGVjdXRlT25TZWxlY3QiLCJpc1RhYmxlQm91bmQiLCJvSW5uZXJDaGFydCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsIl9nZXRDaGFydCIsImlzQm91bmQiLCJnZXRCaW5kaW5nSW5mbyIsImJ1dHRvblZpc2libGUiLCJnZXRTZWdtZW50ZWRCdXR0b24iLCJzZXRWaXNpYmxlIiwic3YiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiZ2V0RmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljUGFnZSBmcm9tIFwic2FwL2YvRHluYW1pY1BhZ2VcIjtcbmltcG9ydCB0eXBlIHsgRHluYW1pY1BhZ2VUaXRsZSRTdGF0ZUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlVGl0bGVcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHJpdmF0ZUV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgS1BJTWFuYWdlbWVudCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvS1BJTWFuYWdlbWVudFwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnREZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvdGVtcGxhdGVzL0xpc3RSZXBvcnRDb252ZXJ0ZXJcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0ICogYXMgU3RhYmxlSWRIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBDb3JlTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgQnJlYWRjcnVtYnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvQnJlYWRjcnVtYnNcIjtcbmltcG9ydCB0eXBlIENoYXJ0VHlwZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIENoYXJ0RGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnREZWxlZ2F0ZVwiO1xuaW1wb3J0IENoYXJ0VXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRVdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlwbGVNb2RlQ29udHJvbCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L2NvbnRyb2xzL011bHRpcGxlTW9kZUNvbnRyb2xcIjtcbmltcG9ydCBTaWRlRWZmZWN0c092ZXJyaWRlIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvb3ZlcnJpZGVzL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJY29uVGFiQmFyIGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgdHlwZSBUYWJDb250YWluZXJJdGVtIGZyb20gXCJzYXAvbS9UYWJDb250YWluZXJJdGVtXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJbnZpc2libGVNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVNZXNzYWdlXCI7XG5pbXBvcnQgeyBJbnZpc2libGVNZXNzYWdlTW9kZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50TWFuYWdlbWVudCRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvZmlsdGVyYmFyL0ZpbHRlckJhckJhc2VcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IGhhc2hlciBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvaGFzaGVyXCI7XG5pbXBvcnQgKiBhcyBMaXN0UmVwb3J0VGVtcGxhdGluZyBmcm9tIFwiLi9MaXN0UmVwb3J0VGVtcGxhdGluZ1wiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5jb25zdCBUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gQ29yZUxpYnJhcnkuVGVtcGxhdGVDb250ZW50Vmlldyxcblx0SW5pdGlhbExvYWRNb2RlID0gQ29yZUxpYnJhcnkuSW5pdGlhbExvYWRNb2RlO1xuXG4vKipcbiAqIENvbnRyb2xsZXIgY2xhc3MgZm9yIHRoZSBsaXN0IHJlcG9ydCBwYWdlLCB1c2VkIGluc2lkZSBhbiBTQVAgRmlvcmkgZWxlbWVudHMgYXBwbGljYXRpb24uXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlclwiKVxuY2xhc3MgTGlzdFJlcG9ydENvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoe1xuXHRcdFx0b25BZnRlckJpbmRpbmc6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbFJvdXRpbmcpIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX29uQWZ0ZXJCaW5kaW5nKCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuICh0aGlzLmJhc2UgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLmdldEN1cnJlbnRFbnRpdHlTZXQoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2lkZUVmZmVjdHMub3ZlcnJpZGUoU2lkZUVmZmVjdHNPdmVycmlkZSkpXG5cdF9zaWRlRWZmZWN0cyE6IFNpZGVFZmZlY3RzO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oS1BJTWFuYWdlbWVudClcblx0a3BpTWFuYWdlbWVudCE6IEtQSU1hbmFnZW1lbnQ7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBFeHRlbnNpb25BUEk7XG5cblx0cHJpdmF0ZSBmaWx0ZXJCYXJDb25kaXRpb25zPzogdW5rbm93bjtcblxuXHRwcml2YXRlIGhhc1BlbmRpbmdDaGFydENoYW5nZXM/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcz86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZXh0ZW5zaW9uIEFQSSBmb3IgdGhlIGN1cnJlbnQgcGFnZS5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgZXh0ZW5zaW9uIEFQSS5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25Jbml0LmFwcGx5KHRoaXMpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdHRoaXMuX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudChmaWx0ZXJCYXIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0fVxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgZmFsc2UpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInVvbVwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3JcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yTnVtYmVyXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjdXJyZW5jeVwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNJbnNpZ2h0c1N1cHBvcnRlZFwiLCBmYWxzZSk7XG5cblx0XHRpZiAodGhpcy5faGFzTXVsdGlWaXN1YWxpemF0aW9ucygpKSB7XG5cdFx0XHRsZXQgYWxwQ29udGVudFZpZXcgPSB0aGlzLl9nZXREZWZhdWx0UGF0aCgpO1xuXHRcdFx0aWYgKCFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgJiYgYWxwQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkKSB7XG5cdFx0XHRcdGFscENvbnRlbnRWaWV3ID0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdH1cblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIsIGFscENvbnRlbnRWaWV3KTtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSBjb25kaXRpb25zIGZyb20gZmlsdGVyIGJhclxuXHRcdC8vIHRoaXMgaXMgbGF0ZXIgdXNlZCBiZWZvcmUgbmF2aWdhdGlvbiB0byBnZXQgY29uZGl0aW9ucyBhcHBsaWVkIG9uIHRoZSBmaWx0ZXIgYmFyXG5cdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0ge307XG5cblx0XHQvLyBBcyBBcHBTdGF0ZUhhbmRsZXIuYXBwbHlBcHBTdGF0ZSB0cmlnZ2VycyBhIG5hdmlnYXRpb24gd2Ugd2FudCB0byBtYWtlIHN1cmUgaXQgd2lsbFxuXHRcdC8vIGhhcHBlbiBhZnRlciB0aGUgcm91dGVNYXRjaCBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQgKG90aGVyd2lzZSB0aGUgcm91dGVyIGdldHMgYnJva2VuKVxuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS53YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24oKTtcblxuXHRcdC8vIENvbmZpZ3VyZSB0aGUgaW5pdGlhbCBsb2FkIHNldHRpbmdzXG5cdFx0dGhpcy5fc2V0SW5pdExvYWQoKTtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJ1aVwiKTtcblx0XHRjb25zdCBwYXRoID0gYC8ke3ZpZXcuZ2V0SWQoKX1gO1xuXHRcdHVpTW9kZWwuc2V0UHJvcGVydHkocGF0aCwgeyBpc0VkaXRhYmxlOiBmYWxzZSB9KTtcblx0XHR2aWV3LmJpbmRFbGVtZW50KHsgcGF0aCwgbW9kZWw6IFwidWlcIiB9KTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGR5bm1pY1BhZ2VIZWFkZXJUaXRsZSA9IGR5bmFtaWNQYWdlPy5nZXRUaXRsZSgpO1xuXHRcdGNvbnN0IGJyZWFkY3J1bWJzQkIgPSBkeW5taWNQYWdlSGVhZGVyVGl0bGUuZ2V0QnJlYWRjcnVtYnMoKSBhcyBCcmVhZGNydW1icyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYnJlYWRjcnVtYnNCQikge1xuXHRcdFx0YnJlYWRjcnVtYnNCQi5zZXRCcmVhZGNydW1iTGlua3MoXCJcIik7XG5cdFx0fVxuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLmZpbHRlckJhckNvbmRpdGlvbnM7XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdF9vbkFmdGVyQmluZGluZygpOiB2b2lkIHtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSBhcyBUYWJsZVtdO1xuXHRcdGxldCB1cGRhdGVBY3Rpb25zID0gdHJ1ZTtcblx0XHRpZiAoRWRpdFN0YXRlLmlzRWRpdFN0YXRlRGlydHkoKSkge1xuXHRcdFx0dGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpPy5pbnZhbGlkYXRlQ29udGVudCgpO1xuXHRcdFx0Y29uc3QgdGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0Y29uc3Qgb1RhYmxlQmluZGluZyA9IHRhYmxlPy5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRpZiAob1RhYmxlQmluZGluZykge1xuXHRcdFx0XHR1cGRhdGVBY3Rpb25zID0gZmFsc2U7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGU/LmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXG5cdFx0XHRcdC8vIFVwZGF0ZSB0aGUgdGFibGUgY29udGVudCB1c2luZyBzaWRlIGVmZmVjdHMgKGxpc3RCaW5kaW5nLnJlZnJlc2ggZG9lc24ndCBrZWVwIGV4cGFuc2lvbiBzdGF0ZXMgaW4gYSBUcmVlVGFibGUpXG5cdFx0XHRcdENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSlcblx0XHRcdFx0XHQuZ2V0Um91dGluZ1NlcnZpY2UoKVxuXHRcdFx0XHRcdC53YWl0Rm9yQmluZGluZ0NsZWFudXAoKVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlY2VpdmVkXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXMpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAodGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0XHRcdFx0XHRcdC8vIEFzIHRoZSByZWZyZXNoIG9uIGEgVHJlZVRhYmxlIHVzZXMgc2lkZS1lZmZlY3RzLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcGVuZGluZyBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRcdC8vIGJlZm9yZSB0aGUgc2lkZS1lZmZlY3RzIGFyZSBxdWVyaWVkIChlLmcuIGZhaWxlZCBQQVRDSCBxdWVyaWVzIHRoYXQgd291bGQgYmUgcmVzZW50IHRvZ2V0aGVyIHdpdGggc2lkZSBlZmZlY3RzIEdFVClcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRNb2RlbCgpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGFibGVBUEkucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cud2FybmluZyhcIkVycm9yIHdoaWxlIHdhaXRpbmcgcmVmcmVzaGluZyBMaXN0UmVwb3J0IHRhYmxlXCIsIGUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZVByb2Nlc3NlZCgpO1xuXHRcdH1cblxuXHRcdGlmICh1cGRhdGVBY3Rpb25zKSB7XG5cdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGlmICghaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJpbml0aWFsVmFyaWFudEFwcGxpZWRcIikpIHtcblx0XHRcdHRoaXMucGFnZVJlYWR5LndhaXRGb3IodGhpcy5fYXBwbHlBcHBTdGF0ZSgpKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaW5pdGlhbFZhcmlhbnRBcHBsaWVkXCIsIHRydWUpO1xuXHRcdH1cblx0XHRjb25zdCBlbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTtcblx0XHRlbnZpcm9ubWVudENhcGFiaWxpdGllc1xuXHRcdFx0LmlzSW5zaWdodHNFbmFibGVkKClcblx0XHRcdC50aGVuKChpc0luc2lnaHRzRW5hYmxlZDogYm9vbGVhbikgPT4ge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgaXNJbnNpZ2h0c0VuYWJsZWQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjaGVja2luZyBpZiBpbnNpZ2h0cyBhcmUgZW5hYmxlZFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRmb3JtYXR0ZXJzID0ge1xuXHRcdHNldEFMUENvbnRyb2xNZXNzYWdlU3RyaXAoXG5cdFx0XHR0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdGFJZ25vcmVkRmllbGRzOiBzdHJpbmdbXSxcblx0XHRcdGJJc0NoYXJ0OiBib29sZWFuIHwgc3RyaW5nLFxuXHRcdFx0b0FwcGx5U3VwcG9ydGVkPzogeyBlbmFibGVTZWFyY2g6IGJvb2xlYW4gfVxuXHRcdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0XHRsZXQgc1RleHQgPSBcIlwiO1xuXHRcdFx0YklzQ2hhcnQgPSBiSXNDaGFydCA9PT0gXCJ0cnVlXCIgfHwgYklzQ2hhcnQgPT09IHRydWU7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgQXJyYXkuaXNBcnJheShhSWdub3JlZEZpZWxkcykgJiYgYUlnbm9yZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBiSXNDaGFydCkge1xuXHRcdFx0XHRjb25zdCBhSWdub3JlZExhYmVscyA9IE1lc3NhZ2VTdHJpcC5nZXRMYWJlbHMoXG5cdFx0XHRcdFx0YUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdFx0b0ZpbHRlckJhci5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdFx0XHRvRmlsdGVyQmFyLFxuXHRcdFx0XHRcdGdldFJlc291cmNlTW9kZWwob0ZpbHRlckJhcilcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgYklzU2VhcmNoSWdub3JlZCA9ICFvQXBwbHlTdXBwb3J0ZWQ/LmVuYWJsZVNlYXJjaDtcblx0XHRcdFx0c1RleHQgPSBiSXNDaGFydFxuXHRcdFx0XHRcdD8gTWVzc2FnZVN0cmlwLmdldEFMUFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIGJJc1NlYXJjaElnbm9yZWQpXG5cdFx0XHRcdFx0OiBNZXNzYWdlU3RyaXAuZ2V0VGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckJhciwgXCJcIik7XG5cdFx0XHRcdHJldHVybiBzVGV4dDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShcIkFmdGVyXCIpXG5cdGFzeW5jIG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiB7IGZvcmNlRm9jdXM/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0dGhpcy5fc2V0SW5pdGlhbEZvY3VzKCk7XG5cdFx0fVxuXHRcdC8vIFJlbW92ZSB0aGUgaGFuZGxlciBvbiBiYWNrIG5hdmlnYXRpb24gdGhhdCBkaXNwbGF5cyBEcmFmdCBjb25maXJtYXRpb25cblx0XHRhd2FpdCB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbih1bmRlZmluZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgY29udGVudCBvZiBhIGN1c3RvbSB2aWV3IHVzZWQgaW4gYSBsaXN0IHJlcG9ydCBuZWVkcyB0byBiZSByZWZyZXNoZWQuXG5cdCAqIFRoaXMgaGFwcGVucyBlaXRoZXIgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBvbiB0aGUgRmlsdGVyQmFyIGFuZCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCxcblx0ICogb3Igd2hlbiBhIHRhYiB3aXRoIGN1c3RvbSBjb250ZW50IGlzIHNlbGVjdGVkLFxuXHQgKiBvciB3aGVuIHRoZSB2aWV3IGlzIGZvcmNlZCB0byBiZSByZWZyZXNoZWQgdGhyb3VnaCB0aGUgRXh0ZW5zaW9uIEFQSSBmb3IgdGhlIGxpc3QgcmVwb3J0J3MgcHVibGljIG1ldGhvZCBzZXRUYWJDb250ZW50VG9CZVJlZnJlc2hlZE9uTmV4dE9wZW5pbmcuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIsIHRoZSBjdXJyZW50VGFiSURcblx0ICogYW5kIHRoZSB2aWV3IHJlZnJlc2ggY2F1c2UgKHRhYkNoYW5nZWQsIHNlYXJjaCBvciBmb3JjZWRSZWZyZXNoKS5cblx0ICogVGhlIG1hcCBsb29rcyBsaWtlIHRoaXM6XG5cdCAqIDxjb2RlPjxwcmU+XG5cdCAqIFx0e1xuXHQgKiBcdFx0ZmlsdGVyQ29uZGl0aW9uczoge1xuXHQgKiBcdFx0XHRDb3VudHJ5OiBbXG5cdCAqIFx0XHRcdFx0e1xuXHQgKiBcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIlxuXHQgKlx0XHRcdFx0XHR2YWxpZGF0ZWQ6IFwiTm90VmFsaWRhdGVkXCJcblx0ICpcdFx0XHRcdFx0dmFsdWVzOiBbXCJHZXJtYW55XCIsIC4uLl1cblx0ICogXHRcdFx0XHR9LFxuXHQgKiBcdFx0XHRcdC4uLlxuXHQgKiBcdFx0XHRdXG5cdCAqIFx0XHRcdC4uLlxuXHQgKiBcdFx0fSxcblx0ICpcdFx0Y3VycmVudFRhYklkOiBcImZlOjpDdXN0b21UYWI6OnRhYjFcIixcblx0ICpcdFx0cmVmcmVzaENhdXNlOiBcInRhYkNoYW5nZWRcIiB8IFwic2VhcmNoXCIgfCBcImZvcmNlZFJlZnJlc2hcIlxuXHQgKlx0fVxuXHQgKiA8L3ByZT48L2NvZGU+XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvblZpZXdOZWVkc1JlZnJlc2gobVBhcmFtZXRlcnM6IHVua25vd24pOiB2b2lkIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gYSBmaWx0ZXIgb3Igc2VhcmNoIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgaW4gdGhlIEZpbHRlckJhcixcblx0ICogYnV0IGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgeWV0IGJ5IHRoZSBlbmQgdXNlciAod2l0aCB0aGUgJ0dvJyBvciAnU2VhcmNoJyBidXR0b24pLlxuXHQgKiBUeXBpY2FsbHksIHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IHRhYiBpcyBncmV5ZWQgb3V0IHVudGlsIHRoZSBmaWx0ZXJzIGFyZSB2YWxpZGF0ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGVuZGluZ0ZpbHRlcnMoKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHRnZXRDdXJyZW50RW50aXR5U2V0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhYmxlKCk/LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKS5zbGljZSgxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlICdDbGVhcicgYnV0dG9uIG9uIHRoZSBGaWx0ZXJCYXIgaXMgcHJlc3NlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkFmdGVyQ2xlYXIoKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaW5pdGlhdGVzIHRoZSB1cGRhdGUgb2YgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgdGhlIHZpc2libGUgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvcklCTiBidXR0b25zLlxuXHQgKiBAcGFyYW0gYVRhYmxlcyBBcnJheSBvZiB0YWJsZXMgaW4gdGhlIGxpc3QgcmVwb3J0XG5cdCAqL1xuXHRfdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXM6IFRhYmxlW10pOiB2b2lkIHtcblx0XHRsZXQgYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlKSB7XG5cdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRDb21tb25VdGlscy51cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5KGFJQk5BY3Rpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzY3JvbGxzIHRvIGEgc3BlY2lmaWMgcm93IG9uIGFsbCB0aGUgYXZhaWxhYmxlIHRhYmxlcy5cblx0ICogQHBhcmFtIHNSb3dQYXRoIFRoZSBwYXRoIG9mIHRoZSB0YWJsZSByb3cgY29udGV4dCB0byBiZSBzY3JvbGxlZCB0b1xuXHQgKi9cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogQ29udHJvbCkge1xuXHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KG9UYWJsZSBhcyBUYWJsZSwgc1Jvd1BhdGgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYSBzaWxlbnQgZm9jdXMgb24gdGhlIGZpbHRlciBmaWVsZC4gU3VwcHJlc3NlcyB0aGUgb3BlbmluZyBvZiB0aGUgdHlwZS1haGVhZCBwb3B1cC5cblx0ICogQHBhcmFtIGZpbHRlckZpZWxkIFRoZSBmaWVsZCB3aGVyZSB0aGUgZm9jdXMgc2hvdWxkIGJlIHNldCBhZnRlciB0aGUgaW5pdGlhbCBsb2FkXG5cdCAqL1xuXHRfZm9jdXNTaWxlbnQoZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkKTogdm9pZCB7XG5cdFx0Y29uc3QgZm9jdXNJbmZvID0gZmlsdGVyRmllbGQuZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0ZmlsdGVyRmllbGQuZm9jdXMoZm9jdXNJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBpbml0aWFsIGZvY3VzIGluIGEgbGlzdCByZXBvcnQgYmFzZWQgb24gdGhlIFVzZXIgRXhwZXJpZW5jZSBndWlkZWxpbmVzLlxuXHQgKlxuXHQgKi9cblx0X3NldEluaXRpYWxGb2N1cygpOiB2b2lkIHtcblx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpLFxuXHRcdFx0aXNIZWFkZXJFeHBhbmRlZCA9IGR5bmFtaWNQYWdlLmdldEhlYWRlckV4cGFuZGVkKCksXG5cdFx0XHRmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyO1xuXHRcdGlmIChmaWx0ZXJCYXIgJiYgIXRoaXMuX2lzRmlsdGVyQmFySGlkZGVuVXNlZCgpKSB7XG5cdFx0XHQvL0VuYWJsaW5nIG1hbmRhdG9yeSBmaWx0ZXIgZmllbGRzIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRpZiAoIWZpbHRlckJhci5nZXRTaG93TWVzc2FnZXMoKSkge1xuXHRcdFx0XHRmaWx0ZXJCYXIuc2V0U2hvd01lc3NhZ2VzKHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzSGVhZGVyRXhwYW5kZWQpIHtcblx0XHRcdFx0Y29uc3QgZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkID0gZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKCkuZmluZChmdW5jdGlvbiAob0ZpbHRlckl0ZW06IEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9GaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgb0ZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIGZpcnN0IGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsIG9yIG9uIHRoZSBmaXJzdCBmaWx0ZXIgZmllbGQgaWYgdGhlIHRhYmxlIGRhdGEgaXMgbG9hZGVkXG5cdFx0XHRcdC8vIERvIGEgXCJzaWxlbnRcIiBmb2N1cyBmb3IgRmlsdGVyRmllbGQsIGJ5IGFkZGluZyB0aGUgc2lsZW50IGF0dHJpYnV0ZS4gVGhlIHNpbGVudCBhdHRyaWJ1dGUgc3VwcHJlc3NlcyB0eXBlYWhlYWQgb3BlbmluZy5cblx0XHRcdFx0aWYgKGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQuaXNBPEZpbHRlckZpZWxkPihcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgYXMgQ29udHJvbCkuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSAmJiBmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Ly8gQWRkIGNoZWNrIGZvciBhdmFpbGFibGUgZmlsdGVySXRlbXNcblx0XHRcdFx0XHRjb25zdCBmaWVsZFRvRm9jdXMgPSBmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKVswXTtcblx0XHRcdFx0XHRpZiAoZmllbGRUb0ZvY3VzLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9mb2N1c1NpbGVudChmaWVsZFRvRm9jdXMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQoZmllbGRUb0ZvY3VzIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIEdvIGJ1dHRvblxuXHRcdFx0XHRcdHRoaXMuZ2V0VmlldygpLmJ5SWQoYCR7dGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCl9LWJ0blNlYXJjaGApPy5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdFx0dGhpcy5fZ2V0VGFibGUoKVxuXHRcdFx0XHRcdD8uZm9jdXNSb3coMClcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIGluaXRpYWwgZm9jdXMgb24gdGhlIHRhYmxlIFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9nZXRUYWJsZSgpXG5cdFx0XHRcdD8uZm9jdXNSb3coMClcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgaW5pdGlhbCBmb2N1cyBvbiB0aGUgdGFibGUgXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpOiBQcm9taXNlPHsgdGl0bGU/OiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmcgfT4ge1xuXHRcdGNvbnN0IG9NYW5pZmVzdEVudHJ5ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdHRpdGxlOiBvTWFuaWZlc3RFbnRyeS50aXRsZSxcblx0XHRcdHN1YnRpdGxlOiBvTWFuaWZlc3RFbnRyeS5zdWJUaXRsZSB8fCBcIlwiLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH0pO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2woKTogRmlsdGVyQmFyIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKSkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpOiBEeW5hbWljUGFnZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQoKSkgYXMgRHluYW1pY1BhZ2U7XG5cdH1cblxuXHRfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2woKTogQ29udHJvbCB7XG5cdFx0Ly8gSWYgdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBpcyBwYXJ0IG9mIHRoZSBET00gdHJlZSwgdGhlIFwiQWRhcHQgRmlsdGVyXCIgZGlhbG9nIGlzIG9wZW4sXG5cdFx0Ly8gYW5kIHdlIHJldHVybiB0aGUgYWRhcHRhdGlvbiBmaWx0ZXIgYmFyIGFzIGFuIGFjdGl2ZSBjb250cm9sICh2aXNpYmxlIGZvciB0aGUgdXNlcilcblx0XHRjb25zdCBhZGFwdGF0aW9uRmlsdGVyQmFyID0gKHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyB7IGdldEluYnVpbHRGaWx0ZXI/OiBGdW5jdGlvbiB9KS5nZXRJbmJ1aWx0RmlsdGVyPy4oKTtcblx0XHRyZXR1cm4gYWRhcHRhdGlvbkZpbHRlckJhcj8uZ2V0UGFyZW50KCkgPyBhZGFwdGF0aW9uRmlsdGVyQmFyIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0YXN5bmMgX2FwcGx5QXBwU3RhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRBcHBTdGF0ZUhhbmRsZXIoKS5hcHBseUFwcFN0YXRlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRvRmlsdGVyQmFyLmVuYWJsZVJlcXVlc3RzKHRydWUpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5faXNGaWx0ZXJCYXJIaWRkZW4oKSkge1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIGZhbHNlKTtcblx0XHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRcdHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKS5zZXRDb3VudHNPdXREYXRlZCh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0U2VnbWVudGVkQnV0dG9uKHNDb250cm9sOiBzdHJpbmcpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzU2VnbWVudGVkQnV0dG9uSWQgPSAoc0NvbnRyb2wgPT09IFwiQ2hhcnRcIiA/IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCkgOiB0aGlzLl9nZXRUYWJsZSgpKT8uZGF0YShcInNlZ21lbnRlZEJ1dHRvbklkXCIpO1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHNTZWdtZW50ZWRCdXR0b25JZCk7XG5cdH1cblxuXHRfZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShzUGF0aDogc3RyaW5nKTogQ29udHJvbCB8IE1hY3JvQVBJIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb250cm9sSWQgPSB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoc1BhdGgpO1xuXHRcdHJldHVybiBjb250cm9sSWQgPyAodGhpcy5nZXRWaWV3KCkuYnlJZChjb250cm9sSWQpIGFzIENvbnRyb2wpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9keW5hbWljTGlzdFJlcG9ydElkXCIpIHx8IFwiXCI7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyQ29udHJvbElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9maWx0ZXJCYXJJZFwiKSB8fCBcIlwiO1xuXHR9XG5cblx0Z2V0Q2hhcnRDb250cm9sKCk6IENvbnRyb2wgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3NpbmdsZUNoYXJ0SWRcIikgYXMgQ2hhcnRUeXBlO1xuXHR9XG5cblx0X2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2woKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1Zpc3VhbEZpbHRlckJhcklkID0gU3RhYmxlSWRIZWxwZXIuZ2VuZXJhdGUoW1widmlzdWFsRmlsdGVyXCIsIHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2xJZCgpXSk7XG5cdFx0cmV0dXJuIHNWaXN1YWxGaWx0ZXJCYXJJZCA/IHRoaXMuZ2V0VmlldygpLmJ5SWQoc1Zpc3VhbEZpbHRlckJhcklkKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpOiBWYXJpYW50TWFuYWdlbWVudCB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvdmFyaWFudE1hbmFnZW1lbnQvaWRcIikgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdH1cblxuXHRfZ2V0TXVsdGlNb2RlQ29udHJvbCgpOiBNdWx0aXBsZU1vZGVDb250cm9sIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpUYWJNdWx0aXBsZU1vZGU6OkNvbnRyb2xcIikgYXMgTXVsdGlwbGVNb2RlQ29udHJvbDtcblx0fVxuXG5cdF9nZXRJY29uVGFiQmFyKCk6IEljb25UYWJCYXIge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OlRhYk11bHRpcGxlTW9kZVwiKSBhcyBJY29uVGFiQmFyO1xuXHR9XG5cblx0X2dldFRhYmxlKCk6IFRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk/LmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCk/LmNvbnRlbnQ7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2w/LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgPyAob0NvbnRyb2wgYXMgVGFibGUpIDogdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi9zaW5nbGVUYWJsZUlkXCIpIGFzIFRhYmxlIHwgdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRDb250cm9scyhzS2V5Pzogc3RyaW5nKTogQ29udHJvbFtdIHtcblx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0Y29uc3QgYUNvbnRyb2xzOiBDb250cm9sW10gPSBbXTtcblx0XHRcdGNvbnN0IG9UYWJNdWx0aU1vZGUgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuY29udGVudDtcblx0XHRcdG9UYWJNdWx0aU1vZGUuZ2V0SXRlbXMoKS5mb3JFYWNoKChvSXRlbTogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoKG9JdGVtIGFzIFRhYkNvbnRhaW5lckl0ZW0pLmdldEtleSgpKSBhcyBDb250cm9sO1xuXHRcdFx0XHRpZiAob0NvbnRyb2wgJiYgc0tleSkge1xuXHRcdFx0XHRcdGlmICgob0l0ZW0gYXMgVGFiQ29udGFpbmVySXRlbSkuZ2V0S2V5KCkuaW5jbHVkZXMoYGZlOjoke3NLZXl9YCkpIHtcblx0XHRcdFx0XHRcdGFDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAob0NvbnRyb2wgIT09IHVuZGVmaW5lZCAmJiBvQ29udHJvbCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGFDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gYUNvbnRyb2xzO1xuXHRcdH0gZWxzZSBpZiAoc0tleSA9PT0gXCJDaGFydFwiKSB7XG5cdFx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0cmV0dXJuIG9DaGFydCA/IFtvQ2hhcnRdIDogW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0XHRyZXR1cm4gb1RhYmxlID8gW29UYWJsZV0gOiBbXTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0RGVmYXVsdFBhdGgoKTogc3RyaW5nIHtcblx0XHRjb25zdCBkZWZhdWx0UGF0aCA9IExpc3RSZXBvcnRUZW1wbGF0aW5nLmdldERlZmF1bHRQYXRoKHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi92aWV3c1wiKSB8fCBbXSk7XG5cdFx0c3dpdGNoIChkZWZhdWx0UGF0aCkge1xuXHRcdFx0Y2FzZSBcInByaW1hcnlcIjpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHRjYXNlIFwic2Vjb25kYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlO1xuXHRcdFx0Y2FzZSBcImJvdGhcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgTGlzdFJlcG9ydCBpcyBjb25maWd1cmVkIHdpdGggTXVsdGlwbGUgVGFibGUgbW9kZS5cblx0ICogQHJldHVybnMgSXMgTXVsdGlwbGUgVGFibGUgbW9kZSBzZXQ/XG5cdCAqL1xuXHRfaXNNdWx0aU1vZGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL211bHRpVmlld3NDb250cm9sXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIExpc3RSZXBvcnQgaXMgY29uZmlndXJlZCB0byBsb2FkIGRhdGEgYXQgc3RhcnQgdXAuXG5cdCAqIEByZXR1cm5zIElzIEluaXRMb2FkIGVuYWJsZWQ/XG5cdCAqL1xuXHRfaXNJbml0TG9hZEVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaW5pdExvYWRNb2RlID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5pbml0aWFsTG9hZDtcblx0XHRyZXR1cm4gaW5pdExvYWRNb2RlID09PSBJbml0aWFsTG9hZE1vZGUuRW5hYmxlZDtcblx0fVxuXG5cdF9oYXNNdWx0aVZpc3VhbGl6YXRpb25zKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvaGFzTXVsdGlWaXN1YWxpemF0aW9uc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc3VzcGVuZCBzZWFyY2ggb24gdGhlIGZpbHRlciBiYXIuIFRoZSBpbml0aWFsIGxvYWRpbmcgb2YgZGF0YSBpcyBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBJbml0TG9hZCAtIERpc2FibGVkL0F1dG8uXG5cdCAqIEl0IGlzIGVuYWJsZWQgbGF0ZXIgd2hlbiB0aGUgdmlldyBzdGF0ZSBpcyBzZXQsIHdoZW4gaXQgaXMgcG9zc2libGUgdG8gcmVhbGl6ZSBpZiB0aGVyZSBhcmUgZGVmYXVsdCBmaWx0ZXJzLlxuXHQgKi9cblx0X2Rpc2FibGVJbml0TG9hZCgpOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0Ly8gY2hlY2sgZm9yIGZpbHRlciBiYXIgaGlkZGVuXG5cdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0ZmlsdGVyQmFyLmVuYWJsZVJlcXVlc3RzKGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCBieSBmbGV4IHRvIGRldGVybWluZSBpZiB0aGUgYXBwbHlBdXRvbWF0aWNhbGx5IHNldHRpbmcgb24gdGhlIHZhcmlhbnQgaXMgdmFsaWQuXG5cdCAqIENhbGxlZCBvbmx5IGZvciBTdGFuZGFyZCBWYXJpYW50IGFuZCBvbmx5IHdoZW4gdGhlcmUgaXMgZGlzcGxheSB0ZXh0IHNldCBmb3IgYXBwbHlBdXRvbWF0aWNhbGx5IChGRSBvbmx5IHNldHMgaXQgZm9yIEF1dG8pLlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHRydWUgaWYgZGF0YSBzaG91bGQgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHksIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50KCk6IGJvb2xlYW4ge1xuXHRcdC8vIFdlIGFsd2F5cyByZXR1cm4gZmFsc2UgYW5kIHRha2UgY2FyZSBvZiBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyZSB0aGUgc2V0dGluZ3MgZm9yIGluaXRpYWwgbG9hZCBiYXNlZCBvblxuXHQgKiAtIG1hbmlmZXN0IHNldHRpbmcgaW5pdExvYWQgLSBFbmFibGVkL0Rpc2FibGVkL0F1dG9cblx0ICogLSB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdmFyaWFudFxuXHQgKiAtIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnNcblx0ICogV2UgZGlzYWJsZSB0aGUgZmlsdGVyIGJhciBzZWFyY2ggYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5hYmxlIGl0IHdoZW4gdmlldyBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRfc2V0SW5pdExvYWQoKTogdm9pZCB7XG5cdFx0Ly8gaWYgaW5pdExvYWQgaXMgRGlzYWJsZWQgb3IgQXV0bywgc3dpdGNoIG9mZiBmaWx0ZXIgYmFyIHNlYXJjaCB0ZW1wb3JhcmlseSBhdCBzdGFydFxuXHRcdGlmICghdGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0dGhpcy5fZGlzYWJsZUluaXRMb2FkKCk7XG5cdFx0fVxuXHRcdC8vIHNldCBob29rIGZvciBmbGV4IGZvciB3aGVuIHN0YW5kYXJkIHZhcmlhbnQgaXMgc2V0IChhdCBzdGFydCBvciBieSB1c2VyIGF0IHJ1bnRpbWUpXG5cdFx0Ly8gcmVxdWlyZWQgdG8gb3ZlcnJpZGUgdGhlIHVzZXIgc2V0dGluZyAnYXBwbHkgYXV0b21hdGljYWxseScgYmVoYXZpb3VyIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzXG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnRJZCA9IExpc3RSZXBvcnRUZW1wbGF0aW5nLmdldFZhcmlhbnRCYWNrUmVmZXJlbmNlKFxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSxcblx0XHRcdHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXREYXRhKCkgYXMgTGlzdFJlcG9ydERlZmluaXRpb25cblx0XHQpO1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdmFyaWFudE1hbmFnZW1lbnRJZCAmJiAodGhpcy5nZXRWaWV3KCkuYnlJZCh2YXJpYW50TWFuYWdlbWVudElkKSBhcyBWYXJpYW50TWFuYWdlbWVudCk7XG5cdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHQoXG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50IGFzIHsgcmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudD86IEZ1bmN0aW9uIH1cblx0XHRcdCk/LnJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQ/Lih0aGlzLl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRfc2V0U2hhcmVNb2RlbCgpOiB2b2lkIHtcblx0XHQvLyBUT0RPOiBkZWFjdGl2YXRlZCBmb3Igbm93IC0gY3VycmVudGx5IHRoZXJlIGlzIG5vIF90ZW1wbFByaXYgYW55bW9yZSwgdG8gYmUgZGlzY3Vzc2VkXG5cdFx0Ly8gdGhpcyBtZXRob2QgaXMgY3VycmVudGx5IG5vdCBjYWxsZWQgYW55bW9yZSBmcm9tIHRoZSBpbml0IG1ldGhvZFxuXG5cdFx0Y29uc3QgZm5HZXRVc2VyID0gT2JqZWN0UGF0aC5nZXQoXCJzYXAudXNoZWxsLkNvbnRhaW5lci5nZXRVc2VyXCIpO1xuXHRcdC8vdmFyIG9NYW5pZmVzdCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWlcIik7XG5cdFx0Ly92YXIgc0Jvb2ttYXJrSWNvbiA9IChvTWFuaWZlc3QgJiYgb01hbmlmZXN0Lmljb25zICYmIG9NYW5pZmVzdC5pY29ucy5pY29uKSB8fCBcIlwiO1xuXG5cdFx0Ly9zaGFyZU1vZGVsOiBIb2xkcyBhbGwgdGhlIHNoYXJpbmcgcmVsZXZhbnQgaW5mb3JtYXRpb24gYW5kIGluZm8gdXNlZCBpbiBYTUwgdmlld1xuXHRcdGNvbnN0IG9TaGFyZUluZm8gPSB7XG5cdFx0XHRib29rbWFya1RpdGxlOiBkb2N1bWVudC50aXRsZSwgLy9UbyBuYW1lIHRoZSBib29rbWFyayBhY2NvcmRpbmcgdG8gdGhlIGFwcCB0aXRsZS5cblx0XHRcdGJvb2ttYXJrQ3VzdG9tVXJsOiBmdW5jdGlvbiAoKTogc3RyaW5nIHtcblx0XHRcdFx0Y29uc3Qgc0hhc2ggPSBoYXNoZXIuZ2V0SGFzaCgpO1xuXHRcdFx0XHRyZXR1cm4gc0hhc2ggPyBgIyR7c0hhc2h9YCA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0fSxcblx0XHRcdC8qXG5cdFx0XHRcdFx0XHRcdFRvIGJlIGFjdGl2YXRlZCBvbmNlIHRoZSBGTFAgc2hvd3MgdGhlIGNvdW50IC0gc2VlIGNvbW1lbnQgYWJvdmVcblx0XHRcdFx0XHRcdFx0Ym9va21hcmtTZXJ2aWNlVXJsOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHQvL3ZhciBvVGFibGUgPSBvVGFibGUuZ2V0SW5uZXJUYWJsZSgpOyBvVGFibGUgaXMgYWxyZWFkeSB0aGUgc2FwLmZlIHRhYmxlIChidXQgbm90IHRoZSBpbm5lciBvbmUpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHVzZSB0YWJsZS5nZXRMaXN0QmluZGluZ0luZm8gaW5zdGVhZCBvZiB0aGUgYmluZGluZ1xuXHRcdFx0XHRcdFx0XHRcdHZhciBvQmluZGluZyA9IG9UYWJsZS5nZXRCaW5kaW5nKFwicm93c1wiKSB8fCBvVGFibGUuZ2V0QmluZGluZyhcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZyA/IGZuR2V0RG93bmxvYWRVcmwob0JpbmRpbmcpIDogXCJcIjtcblx0XHRcdFx0XHRcdFx0fSwqL1xuXHRcdFx0aXNTaGFyZUluSmFtQWN0aXZlOiAhIWZuR2V0VXNlciAmJiBmbkdldFVzZXIoKS5pc0phbUFjdGl2ZSgpXG5cdFx0fTtcblxuXHRcdGNvbnN0IG9UZW1wbGF0ZVByaXZhdGVNb2RlbCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRNb2RlbChcIl90ZW1wbFByaXZcIikgYXMgSlNPTk1vZGVsO1xuXHRcdG9UZW1wbGF0ZVByaXZhdGVNb2RlbC5zZXRQcm9wZXJ0eShcIi9saXN0UmVwb3J0L3NoYXJlXCIsIG9TaGFyZUluZm8pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGxvY2FsIFVJIG1vZGVsIG9mIHRoZSBwYWdlIHdpdGggdGhlIGZpZWxkcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSB0byB0aGUgZmlsdGVyIGJhciAodGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgQUxQIHNjZW5hcmlvKS5cblx0ICogQHBhcmFtIG9JbnRlcm5hbE1vZGVsQ29udGV4dCBUaGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHQgKiBAcGFyYW0gb0ZpbHRlckJhciBNREMgZmlsdGVyIGJhclxuXHQgKi9cblx0X3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcjogRmlsdGVyQmFyKTogdm9pZCB7XG5cdFx0Y29uc3QgbUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0XHRjb25zdCBpZ25vcmVkRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fSxcblx0XHRcdGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLFxuXHRcdFx0YUNoYXJ0cyA9IHRoaXMuX2dldENvbnRyb2xzKFwiQ2hhcnRcIik7XG5cblx0XHRpZiAoIWFUYWJsZXMubGVuZ3RoIHx8ICFhQ2hhcnRzLmxlbmd0aCkge1xuXHRcdFx0Ly8gSWYgdGhlcmUncyBub3QgYSB0YWJsZSBhbmQgYSBjaGFydCwgd2UncmUgbm90IGluIHRoZSBBTFAgY2FzZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZvciB0aGUgbW9tZW50LCB0aGVyZSdzIG5vdGhpbmcgZm9yIHRhYmxlcy4uLlxuXHRcdGFDaGFydHMuZm9yRWFjaChmdW5jdGlvbiAob0NoYXJ0KSB7XG5cdFx0XHRjb25zdCBzQ2hhcnRFbnRpdHlQYXRoID0gb0NoYXJ0LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSxcblx0XHRcdFx0c0NoYXJ0RW50aXR5U2V0ID0gc0NoYXJ0RW50aXR5UGF0aC5zbGljZSgxKSxcblx0XHRcdFx0c0NhY2hlS2V5ID0gYCR7c0NoYXJ0RW50aXR5U2V0fUNoYXJ0YDtcblx0XHRcdGlmICghbUNhY2hlW3NDYWNoZUtleV0pIHtcblx0XHRcdFx0bUNhY2hlW3NDYWNoZUtleV0gPSBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQmFyLCBvQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0aWdub3JlZEZpZWxkc1tzQ2FjaGVLZXldID0gbUNhY2hlW3NDYWNoZUtleV07XG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY29udHJvbHMvaWdub3JlZEZpZWxkc1wiLCBpZ25vcmVkRmllbGRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgc2V0dGluZyB3aGV0aGVyIEZpbHRlckJhciBpcyBoaWRkZW4gYmFzZWQgb24gdGhlIG1hbmlmZXN0IHNldHRpbmcgJ2hpZGVGaWx0ZXJCYXInLlxuXHQgKiBTaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIF9pc0ZpbHRlckJhckhpZGRlblVzZWQgYXMgaXQgbWF5IGhhdmUgb3ZlcnJpZGRlbiB0aGlzIHNldHRpbmcuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIEZpbHRlckJhciBpcyBoaWRkZW4sIGZhbHNlIGlmIHVua25vd25cblx0ICovXG5cdF9pc0ZpbHRlckJhckhpZGRlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5oaWRlRmlsdGVyQmFyIHx8IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBzZXR0aW5nIHdoZXRoZXIgRmlsdGVyQmFyIGlzIGhpZGRlbiBidXQgc3RpbGwgZXhpc3RzIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5nICd1c2VIaWRkZW5GaWx0ZXJCYXInLlxuXHQgKiBTaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIF9pc0ZpbHRlckJhckhpZGRlbiBhcyBpdCBjYW4gYWxzbyBoaWRlIHRoZSBGaWx0ZXJCYXIuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIEZpbHRlckJhciBpcyBoaWRkZW4sIGZhbHNlIGlmIHVua25vd25cblx0ICovXG5cdF9pc0ZpbHRlckJhckhpZGRlblVzZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudXNlSGlkZGVuRmlsdGVyQmFyIHx8IGZhbHNlO1xuXHR9XG5cblx0X2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQsIGtleTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IEJvb2xlYW4ge1xuXHRcdGlmICghdmFyaWFudE1hbmFnZW1lbnQgfHwgIWtleSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYW50cyA9IHZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCk7XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnQgPSB2YXJpYW50cy5maW5kKGZ1bmN0aW9uICh2YXJpYW50KSB7XG5cdFx0XHRyZXR1cm4gdmFyaWFudCAmJiB2YXJpYW50LmdldEtleSgpID09PSBrZXk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChjdXJyZW50VmFyaWFudCAmJiBjdXJyZW50VmFyaWFudC5nZXRQcm9wZXJ0eShcImV4ZWN1dGVPblNlbGVjdFwiKSkgfHwgZmFsc2U7XG5cdH1cblxuXHRfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2gob1ZNOiBWYXJpYW50TWFuYWdlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmluaXRpYWxMb2FkID09PSBJbml0aWFsTG9hZE1vZGUuQXV0byAmJlxuXHRcdFx0KCFvVk0gfHwgb1ZNLmdldFN0YW5kYXJkVmFyaWFudEtleSgpID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvQ29uZGl0aW9ucyA9IG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb0NvbmRpdGlvbnMpIHtcblx0XHRcdFx0XHQvLyBpZ25vcmUgZmlsdGVycyBzdGFydGluZyB3aXRoICQgKGUuZy4gJHNlYXJjaCwgJGVkaXRTdGF0ZSlcblx0XHRcdFx0XHRpZiAob1ZNICYmICFzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpICYmIEFycmF5LmlzQXJyYXkob0NvbmRpdGlvbnNbc0tleV0pICYmIG9Db25kaXRpb25zW3NLZXldLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly8gbG9hZCBkYXRhIGFzIHBlciB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdGhlIHZhcmlhbnRcblx0XHRcdFx0XHRcdGNvbnN0IHN0YW5kYXJkVmFyaWFudCA9IG9WTS5nZXRWYXJpYW50cygpLmZpbmQoKHZhcmlhbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhcmlhbnQuZ2V0S2V5KCkgPT09IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3RhbmRhcmRWYXJpYW50ICYmIHN0YW5kYXJkVmFyaWFudC5nZXRFeGVjdXRlT25TZWxlY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0X3VwZGF0ZVRhYmxlKG9UYWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRpZiAoIW9UYWJsZS5pc1RhYmxlQm91bmQoKSB8fCB0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMpIHtcblx0XHRcdG9UYWJsZS5yZWJpbmQoKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdF91cGRhdGVDaGFydChvQ2hhcnQ6IENoYXJ0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSAob0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBDaGFydERlbGVnYXRlKS5fZ2V0Q2hhcnQob0NoYXJ0KTtcblx0XHRpZiAoIShvSW5uZXJDaGFydCAmJiBvSW5uZXJDaGFydC5pc0JvdW5kKFwiZGF0YVwiKSkgfHwgdGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzKSB7XG5cdFx0XHQob0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBDaGFydERlbGVnYXRlKS5yZWJpbmQob0NoYXJ0LCBvSW5uZXJDaGFydC5nZXRCaW5kaW5nSW5mbyhcImRhdGFcIikpO1xuXHRcdFx0dGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmlsdGVyIHRvZ2dsZSBidXR0b24uXG5cdCAqIEBwYXJhbSBidXR0b25WaXNpYmxlIEZpbHRlciB0b2dnbGUgYnV0dG9uIHZpc2liaWxpdHlcblx0ICovXG5cdHNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoYnV0dG9uVmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRmaWx0ZXJCYXI/LmdldFNlZ21lbnRlZEJ1dHRvbigpPy5zZXRWaXNpYmxlKGJ1dHRvblZpc2libGUpO1xuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0b25JbmxpbmVFZGl0U2F2ZSh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0Rmxvdy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJTZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSEuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0ZmlsdGVyQmFyQVBJLnRyaWdnZXJTZWFyY2goKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyc0NoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogRmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gUGVuZGluZyBmaWx0ZXJzIGludG8gRmlsdGVyQmFyIHRvIGJlIHVzZWQgZm9yIGN1c3RvbSB2aWV3c1xuXHRcdFx0XHR0aGlzLm9uUGVuZGluZ0ZpbHRlcnMoKTtcblxuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zQmFzZWRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5fc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KG9GaWx0ZXJCYXIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFZhcmlhbnRNYW5hZ2VtZW50JFNlbGVjdEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gKG9FdmVudCBhcyBVSTVFdmVudCkuZ2V0UGFyYW1ldGVycygpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSBwYXJhbWV0ZXJzLm9yaWdpbmFsU291cmNlIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpO1xuXHRcdFx0Y29uc3QgbXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblxuXHRcdFx0aWYgKG11bHRpTW9kZUNvbnRyb2wgJiYgIXZhcmlhbnRNYW5hZ2VtZW50Py5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5BY3Rpb25Ub29sYmFyXCIpKSB7XG5cdFx0XHRcdC8vTm90IGEgQ29udHJvbCBWYXJpYW50XG5cdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LnNldEZyZWV6ZUNvbnRlbnQodHJ1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0c2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkID0gZmlsdGVyQmFyPy5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoZnVuY3Rpb24gKGZpbHRlckl0ZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gZmlsdGVySXRlbS5nZXRSZXF1aXJlZCgpICYmIGZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2godmFyaWFudE1hbmFnZW1lbnQpKSB7XG5cdFx0XHRcdFx0Ly8gdGhlIGFwcCBzdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgdmlhIG9uU2VhcmNoIGhhbmRsZXJcblx0XHRcdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkhLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdFx0XHRmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCF0aGlzLl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQsIGN1cnJlbnRWYXJpYW50S2V5KSkge1xuXHRcdFx0XHRcdG11bHRpTW9kZUNvbnRyb2w/LnNldEZyZWV6ZUNvbnRlbnQoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZSEhIVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDEwMDApO1xuXHRcdH0sXG5cdFx0b25TZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyOyAvLyBvbnNlYXJjaCBpcyBjYWxsZWQgb25seSBpZiB0aGUgZmlsdGVyYmFyIGV4aXN0c1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBiSGlkZURyYWZ0ID0gRmlsdGVyVXRpbHMuZ2V0RWRpdFN0YXRlSXNIaWRlRHJhZnQob0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCkpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgZmFsc2UpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGlkZURyYWZ0SW5mb1wiLCBiSGlkZURyYWZ0KTtcblx0XHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRpZiAoIXRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob01kY0NoYXJ0KSB7XG5cdFx0XHRcdC8vIGRpc2FibGUgYm91bmQgYWN0aW9ucyBUT0RPOiB0aGlzIGNsZWFycyBldmVyeXRoaW5nIGZvciB0aGUgY2hhcnQ/XG5cdFx0XHRcdChvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuc2V0UHJvcGVydHkoXCJcIiwge30pO1xuXG5cdFx0XHRcdGNvbnN0IG9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0KSB7XG5cdFx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGUpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vbG9naWMgZm9yIGV4cGFuc2lvbiBvciBjb2xsYXBzZSBvZiBmaWx0ZXIgYmFyIHN0YXJ0c1xuXHRcdFx0aWYgKCFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgJiYgb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRpZiAoZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRkeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9zZXR0aW5nIGl0IHRvIGZhbHNlIHNvIHRoYXQgZnVydGhlciBzZWFyY2ggb3IgJ0dvJyB0cmlnZ2VycyB3b24ndCBjb2xsYXBzZSB0aGUgZmlsdGVyIGJhclxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkXCIsIGZhbHNlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc3RvcmUgZmlsdGVyIGJhciBjb25kaXRpb25zIHRvIHVzZSBsYXRlciB3aGlsZSBuYXZpZ2F0aW9uXG5cdFx0XHRTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdC50aGVuKChvRXh0ZXJuYWxTdGF0ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IG9FeHRlcm5hbFN0YXRlLmZpbHRlcjtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgZXh0ZXJuYWwgc3RhdGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0aWYgKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkubGl2ZU1vZGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKERldmljZS5zeXN0ZW0ucGhvbmUpIHtcblx0XHRcdFx0Y29uc3Qgb0R5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRcdGlmICghdGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuc2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eShmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0YXN5bmMgb25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKFxuXHRcdFx0b0NvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLFxuXHRcdFx0c091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsXG5cdFx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRcdHNDcmVhdGVQYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cdFx0b25DaGFydFNlbGVjdGlvbkNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQ8eyBkYXRhOiB1bmtub3duIH0sIENoYXJ0VHlwZT4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRDb250ZW50KCkgYXMgQ2hhcnQsXG5cdFx0XHRcdG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCksXG5cdFx0XHRcdGFEYXRhID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImRhdGFcIiksXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoYURhdGEpIHtcblx0XHRcdFx0Q2hhcnRVdGlscy5zZXRDaGFydEZpbHRlcnMob01kY0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2FscENvbnRlbnRWaWV3YCk7XG5cdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAob1RhYmxlKSB7XG5cdFx0XHRcdG9UYWJsZS5yZWJpbmQoKTtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkS2V5OiBzdHJpbmcgPVxuXHRcdFx0XHQob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSkuc2VsZWN0ZWRLZXkgfHwgKG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkgYXMgeyBrZXk6IHN0cmluZyB9KS5rZXk7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYWxwQ29udGVudFZpZXdcIiwgc2VsZWN0ZWRLZXkpO1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cblx0XHRcdHN3aXRjaCAoc2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlOlxuXHRcdFx0XHRcdGlmIChvVGFibGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ6XG5cdFx0XHRcdFx0aWYgKG9DaGFydCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0IGFzIENoYXJ0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ6XG5cdFx0XHRcdFx0aWYgKG9UYWJsZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG9DaGFydCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0IGFzIENoYXJ0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIGV2ZW50OiBEeW5hbWljUGFnZVRpdGxlJFN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdFx0dGhpcy5zZXRGaWx0ZXJUb2dnbGVWaXNpYmlsaXR5KCEhZXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXNFeHBhbmRlZFwiKSk7XG5cdFx0XHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJpc0V4cGFuZGVkXCIpID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2UuZ2V0SW5zdGFuY2UoKS5hbm5vdW5jZShcblx0XHRcdFx0XHRcdGZpbHRlckJhci5nZXRBc3NpZ25lZEZpbHRlcnNUZXh0KCkuZmlsdGVyc1RleHQgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHVwZGF0ZSB0aGUgbG9jYWwgVUkgbW9kZWwgb2YgdGhlIHBhZ2Ugd2l0aCB0aGUgU2VsZWN0aW9uIFZhcmlhbnQuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdCAqL1xuXHRhc3luYyBfc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KGZpbHRlckJhcjogRmlsdGVyQmFyLCBpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdGNvbnN0IHN2ID0gYXdhaXQgZmlsdGVyQmFyQVBJLmdldFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudFwiLCBzdik7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0TG9nLmVycm9yKGBGRSA6IEVycm9yIGZldGNoaW5nIHNlbGVjdGlvbiB2YXJpYW50IG9uIGZpbHRlciBjaGFuZ2U6ICR7bWVzc2FnZX1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgU2VsZWN0aW9uIFZhcmlhbnQgZnJvbSBpbnRlcm5hbCBtb2RlbC5cblx0ICogQHJldHVybnMgU2VsZWN0aW9uVmFyaWFudFxuXHQgKi9cblx0Z2V0RmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCgpOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIChpbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50XCIpIGFzIFNlbGVjdGlvblZhcmlhbnQpIHx8IG5ldyBTZWxlY3Rpb25WYXJpYW50KCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFJlcG9ydENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTREQSxNQUFNQSxtQkFBbUIsR0FBR0MsV0FBVyxDQUFDRCxtQkFBbUI7SUFDMURFLGVBQWUsR0FBR0QsV0FBVyxDQUFDQyxlQUFlOztFQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkEsSUFNTUMsb0JBQW9CLElBQUFDLElBQUEsR0FEekJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxFQUFBQyxLQUFBLEdBRWpFQyxjQUFjLENBQ2RDLGVBQWUsQ0FBQ0MsUUFBUSxDQUFDO0lBQ3hCQyxjQUFjLEVBQUUsU0FBQUEsQ0FBQSxFQUFpQztNQUMvQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDLENBQTBCQyxlQUFlLENBQUMsQ0FBQztJQUMzRTtFQUNELENBQUMsQ0FDRixDQUFDLEVBQUFDLEtBQUEsR0FHQVAsY0FBYyxDQUNkUSw2QkFBNkIsQ0FBQ04sUUFBUSxDQUFDO0lBQ3RDTyxZQUFZLEVBQUUsU0FBQUEsQ0FBQSxFQUErQztNQUM1RCxPQUFRLElBQUksQ0FBQ0MsSUFBSSxDQUEwQkMsbUJBQW1CLENBQUMsQ0FBQztJQUNqRTtFQUNELENBQUMsQ0FDRixDQUFDLEVBQUFDLEtBQUEsR0FHQVosY0FBYyxDQUFDYSxXQUFXLENBQUNYLFFBQVEsQ0FBQ1ksbUJBQW1CLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR3pEZixjQUFjLENBQUNnQixxQkFBcUIsQ0FBQ2QsUUFBUSxDQUFDZSw2QkFBNkIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHN0VsQixjQUFjLENBQUNtQixLQUFLLENBQUNqQixRQUFRLENBQUNrQixjQUFjLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzlDckIsY0FBYyxD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
@@ -224,8 +224,7 @@ class ListReportController extends PageController {
224
224
 
225
225
  const internalModelContext = this.getView().getBindingContext("internal") as InternalModelContext;
226
226
  if (!internalModelContext.getProperty("initialVariantApplied")) {
227
- const viewId = this.getView().getId();
228
- this.pageReady.waitFor(this._applyAppState(viewId));
227
+ this.pageReady.waitFor(this._applyAppState());
229
228
  internalModelContext.setProperty("initialVariantApplied", true);
230
229
  }
231
230
  const environmentCapabilities = CommonUtils.getAppComponent(this.getView()).getEnvironmentCapabilities();
@@ -424,14 +423,14 @@ class ListReportController extends PageController {
424
423
  }
425
424
  }
426
425
 
427
- _getPageTitleInformation(): { title?: string; subtitle: string; intent: string; icon: string } {
426
+ async _getPageTitleInformation(): Promise<{ title?: string; subtitle: string; intent: string; icon: string }> {
428
427
  const oManifestEntry = this.getAppComponent().getManifestEntry("sap.app");
429
- return {
428
+ return Promise.resolve({
430
429
  title: oManifestEntry.title,
431
430
  subtitle: oManifestEntry.subTitle || "",
432
431
  intent: "",
433
432
  icon: ""
434
- };
433
+ });
435
434
  }
436
435
 
437
436
  _getFilterBarControl(): FilterBar | undefined {
@@ -449,8 +448,8 @@ class ListReportController extends PageController {
449
448
  return adaptationFilterBar?.getParent() ? adaptationFilterBar : undefined;
450
449
  }
451
450
 
452
- async _applyAppState(viewId: string): Promise<void> {
453
- await this.getAppComponent().getAppStateHandler().applyAppState(viewId, this.getView());
451
+ async _applyAppState(): Promise<void> {
452
+ await this.getAppComponent().getAppStateHandler().applyAppState(this.getView());
454
453
  const oFilterBar = this._getFilterBarControl();
455
454
  if (oFilterBar) {
456
455
  oFilterBar.enableRequests(true);
@@ -5,7 +5,7 @@
5
5
  "type": "component",
6
6
  "i18n": "../messagebundle.properties",
7
7
  "applicationVersion": {
8
- "version": "1.139.0"
8
+ "version": "1.139.4"
9
9
  },
10
10
  "title": "List Report",
11
11
  "tags": {