@sapui5/sap.fe.templates 1.108.26 → 1.108.27

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.
@@ -111,7 +111,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
111
111
  oController._editDocument(oContext);
112
112
  }
113
113
  } else if (iViewLevel === 1 && oObjectPage.getModel("ui").getProperty("/isEditable")) {
114
- oController._saveDocument(oContext);
114
+ oController._saveDocument(oContext, mParameters);
115
115
  } else if (oObjectPage.getModel("ui").getProperty("/isEditable")) {
116
116
  oController._applyDocument(oContext);
117
117
  }
@@ -1115,7 +1115,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
1115
1115
  return Promise.reject(e);
1116
1116
  }
1117
1117
  };
1118
- _proto._saveDocument = function _saveDocument(oContext) {
1118
+ _proto._saveDocument = function _saveDocument(oContext, oParameters) {
1119
1119
  try {
1120
1120
  var _this15 = this;
1121
1121
  var oModel = _this15.getView().getModel("ui"),
@@ -1145,7 +1145,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
1145
1145
  return Promise.resolve(Promise.all(aWaitCreateDocuments)).then(function (aBindings) {
1146
1146
  var mParameters = {
1147
1147
  bExecuteSideEffectsOnError: bExecuteSideEffectsOnError,
1148
- bindings: aBindings
1148
+ bindings: aBindings,
1149
+ entitySetName: oParameters === null || oParameters === void 0 ? void 0 : oParameters.entitySetName
1149
1150
  };
1150
1151
  // We need to either reject or resolve a promise here and return it since this save
1151
1152
  // function is not only called when pressing the save button in the footer, but also
@@ -1613,4 +1614,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
1613
1614
  }), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype)), _class2)) || _class);
1614
1615
  return ObjectPageController;
1615
1616
  }, false);
1616
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiRWRpdEZsb3ciLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJJbnRlcm5hbEVkaXRGbG93IiwiRWRpdEZsb3dPdmVycmlkZXMiLCJJbnRlcm5hbFJvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJNYXNzRWRpdCIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJoYW5kbGVycyIsIm9uUHJpbWFyeUFjdGlvbiIsIm9Db250cm9sbGVyIiwib1ZpZXciLCJvQ29udGV4dCIsInNBY3Rpb25OYW1lIiwibVBhcmFtZXRlcnMiLCJtQ29uZGl0aW9ucyIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsIm9PYmplY3RQYWdlIiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwicG9zaXRpdmVBY3Rpb25WaXNpYmxlIiwicG9zaXRpdmVBY3Rpb25FbmFibGVkIiwib25DYWxsQWN0aW9uIiwiZWRpdEFjdGlvblZpc2libGUiLCJlZGl0QWN0aW9uRW5hYmxlZCIsIl9lZGl0RG9jdW1lbnQiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwiX3NhdmVEb2N1bWVudCIsIl9hcHBseURvY3VtZW50Iiwib25UYWJsZUNvbnRleHRDaGFuZ2UiLCJvRXZlbnQiLCJvU291cmNlIiwiZ2V0U291cmNlIiwib1RhYmxlIiwiX2ZpbmRUYWJsZXMiLCJzb21lIiwiX29UYWJsZSIsImdldFJvd0JpbmRpbmciLCJvQ3VycmVudEFjdGlvblByb21pc2UiLCJfZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsImFUYWJsZUNvbnRleHRzIiwiZ2V0VHlwZSIsImdldE1ldGFkYXRhIiwiaXNBIiwiZ2V0Q29udGV4dHMiLCJnZXRDdXJyZW50Q29udGV4dHMiLCJvQWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJzSWQiLCJvQWN0aW9uRGF0YSIsIm9EYXRhIiwiYUtleXMiLCJrZXlzIiwiaU5ld0l0ZW1wIiwiZmluZCIsIm9UYWJsZUNvbnRleHQiLCJpIiwib1RhYmxlRGF0YSIsImdldE9iamVjdCIsImJDb21wYXJlIiwiZXZlcnkiLCJzS2V5IiwiYURpYWxvZ3MiLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsIm9EaWFsb2ciLCJsZW5ndGgiLCJkaWFsb2ciLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJtZXNzYWdlQnV0dG9uIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsImVkaXRGbG93IiwiaW52b2tlQWN0aW9uIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsIkNvbW1vblV0aWxzIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZWN0aW9uTGF5b3V0Iiwib1N1YlNlY3Rpb24iLCJnZXRQYXJhbWV0ZXIiLCJfdXBkYXRlRm9jdXNJbkVkaXRNb2RlIiwib25WYXJpYW50U2VsZWN0ZWQiLCJvblZhcmlhbnRTYXZlZCIsInNldFRpbWVvdXQiLCJuYXZpZ2F0ZVRvU3ViU2VjdGlvbiIsInZEZXRhaWxDb25maWciLCJvRGV0YWlsQ29uZmlnIiwiYnlJZCIsIm9TZWN0aW9uIiwic2VjdGlvbklkIiwic3ViU2VjdGlvbklkIiwiZ2V0U3ViU2VjdGlvbnMiLCJnZXRQYXJlbnQiLCJnZXRWaXNpYmxlIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJvUmVzb3VyY2VCdW5kbGUiLCJzVGl0bGUiLCJnZXRUcmFuc2xhdGVkVGV4dCIsImVudGl0eVNldCIsIk1lc3NhZ2VCb3giLCJzY3JvbGxUb1NlY3Rpb24iLCJnZXRJZCIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJDaGFydFJ1bnRpbWUiLCJmblVwZGF0ZUNoYXJ0Iiwib25TdGF0ZUNoYW5nZSIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsInNldFByb3BlcnR5IiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsInVzZU5ld0xhenlMb2FkaW5nIiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0Iiwib0l0ZW1CaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwiX2ZuU2hvd09QTWVzc2FnZSIsIm9uRXhpdCIsImRlc3Ryb3kiLCJvTWVzc2FnZVBvcG92ZXIiLCJpc09wZW4iLCJjbG9zZSIsImlzS2VlcEFsaXZlIiwic2V0S2VlcEFsaXZlIiwiaXNDb25uZWN0ZWQiLCJkaXNjb25uZWN0IiwidmlldyIsIm1lc3NhZ2VzIiwiZ2V0SXRlbXMiLCJpdGVtIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJzaG93TWVzc2FnZXMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiY2hlY2tTZWN0aW9uc0ZvckdyaWRUYWJsZSIsInN1YlNlY3Rpb25zIiwiY2hhbmdlQ2xhc3NGb3JUYWJsZXMiLCJldmVudCIsImxhc3RWaXNpYmxlU3ViU2VjdGlvbiIsImJsb2NrcyIsImdldEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJzZWFyY2hUYWJsZUluQmxvY2siLCJhZGRTdHlsZUNsYXNzIiwiZGV0YWNoRXZlbnQiLCJzdWJTZWN0aW9uSW5kZXgiLCJibG9jayIsImNvbnRyb2wiLCJjb250ZW50IiwidGFibGVBUEkiLCJvbkJlZm9yZVJlbmRlcmluZyIsIlBhZ2VDb250cm9sbGVyIiwicHJvdG90eXBlIiwiYXBwbHkiLCJvVmlld0RhdGEiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiQ29tbW9uSGVscGVyIiwic2V0TWV0YU1vZGVsIiwiZ2V0QXBwQ29tcG9uZW50Iiwib25BZnRlclJlbmRlcmluZyIsInJlc3BvbnNlIiwib0Vycm9yIiwiZ2V0VXNlSWNvblRhYkJhciIsInNlY3Rpb25zIiwiZ2V0U2VjdGlvbnMiLCJfZ2V0QWxsU3ViU2VjdGlvbnMiLCJfb25CZWZvcmVCaW5kaW5nIiwiYVRhYmxlcyIsIm9JbnRlcm5hbE1vZGVsIiwiYUJhdGNoR3JvdXBzIiwib0Zhc3RDcmVhdGlvblJvdyIsInB1c2giLCJiRHJhZnROYXZpZ2F0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwiZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uIiwiaXNGaXJzdFJlbmRlcmluZyIsImJQZXJzaXN0T1BTY3JvbGwiLCJzZXRTZWxlY3RlZFNlY3Rpb24iLCJvRGVsZWdhdGVPbkJlZm9yZSIsImFkZEV2ZW50RGVsZWdhdGUiLCJwYWdlUmVhZHkiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwib0JpbmRpbmciLCJsaXN0QmluZGluZyIsIm9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCIsIm9CaW5kaW5nVG9Vc2UiLCJwYWdpbmF0b3IiLCJpbml0aWFsaXplIiwic0JpbmRpbmdQYXRoIiwidGVzdCIsInNMaXN0QmluZGluZ1BhdGgiLCJyZXBsYWNlIiwiT0RhdGFMaXN0QmluZGluZyIsIm9Nb2RlbCIsIl9zZXRMaXN0QmluZGluZ0FzeW5jIiwiYVNlY3Rpb25zIiwiYlVzZUljb25UYWJCYXIiLCJpU2tpcCIsImJJc0luRWRpdE1vZGUiLCJiRWRpdGFibGVIZWFkZXIiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJpU2VjdGlvbiIsImFTdWJTZWN0aW9ucyIsImlTdWJTZWN0aW9uIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsInBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJzaG93UGxhY2Vob2xkZXIiLCJvTmF2Q29udGFpbmVyIiwib0NvbnRhaW5lciIsIl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50IiwiYUFjdGlvbnMiLCJnZXRIZWFkZXJUaXRsZSIsImdldEFjdGlvbnMiLCJvQWN0aW9uIiwiZ2V0RW5hYmxlZCIsIl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbiIsImFCbG9ja3MiLCJhRm9ybUNvbnRhaW5lcnMiLCJnZXRGb3JtQ29udGFpbmVycyIsImdldENvbnRlbnQiLCJmb3JtQ29udGFpbmVyIiwiYUZvcm1FbGVtZW50cyIsImdldEZvcm1FbGVtZW50cyIsImZvcm1FbGVtZW50IiwiYUZpZWxkcyIsImdldEZpZWxkcyIsImdldFJlcXVpcmVkIiwiZ2V0VmFsdWUiLCJkZWJ1ZyIsIm9NYW5kYXRvcnlGaWVsZCIsIm9GaWVsZFRvRm9jdXMiLCJnZXRDb250ZW50RWRpdCIsIl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJmb2N1cyIsIl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdCIsIm1lc3NhZ2VIYW5kbGVyIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0IiwiaGlzdG9yeSIsImJhY2siLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiY3VycmVudFVSTCIsImRvY3VtZW50IiwiVVJMIiwiX3JvdXRpbmciLCJuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJCYWNrTmF2aWdhdGlvbiIsIl9vbkFmdGVyQmluZGluZyIsIm9CaW5kaW5nQ29udGV4dCIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsIm9MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25Db250ZXh0Iiwib0ZpbmFsVUlTdGF0ZSIsImJpbmRMaXN0IiwiZ2V0Q29udGV4dCIsIiQkdXBkYXRlR3JvdXBJZCIsIiQkZ3JvdXBJZCIsInJlZnJlc2hJbnRlcm5hbCIsImNyZWF0ZSIsImNyZWF0ZWQiLCJ0cmFjZSIsIl9zaWRlRWZmZWN0cyIsImNsZWFyUHJvcGVydGllc1N0YXR1cyIsImFJQk5BY3Rpb25zIiwiZm9yRWFjaCIsImdldElCTkFjdGlvbnMiLCJvVGFibGVSb3dCaW5kaW5nIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJyZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJwYXJzZUN1c3RvbURhdGEiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDdXN0b21EYXRhIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsImdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiLCJvT2JqZWN0UGFnZVRpdGxlIiwiYUlCTkhlYWRlckFjdGlvbnMiLCJjb25jYXQiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsImhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyIsImZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyIsImZuSGFuZGxlQ2hhbmdlIiwiZGV0YWNoQ2hhbmdlIiwiY29tcHV0ZUVkaXRNb2RlIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJjb25uZWN0Iiwib0NhY2hlIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiZm5VcGRhdGVSZWxhdGVkQXBwcyIsImRldGFjaERhdGFSZWNlaXZlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsImN1cnJlbnRCaW5kaW5nIiwiaGFuZGxlUGF0Y2hTZW50IiwiVGFibGVVdGlscyIsIndoZW5Cb3VuZCIsIl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzIiwib25QYWdlUmVhZHkiLCJzZXRGb2N1cyIsImlzSW5EaXNwbGF5TW9kZSIsIm9TZWxlY3RlZFNlY3Rpb24iLCJDb3JlIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiYklzU3RpY2t5TW9kZSIsIm9BcHBDb21wb25lbnQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwiZm9yY2VGb2N1cyIsIkVycm9yIiwiX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJnZXRLZXkiLCJ0aXRsZSIsInN1YnRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9leGVjdXRlSGVhZGVyU2hvcnRjdXQiLCJzQnV0dG9uSWQiLCJvQnV0dG9uIiwib0VsZW1lbnQiLCJmaXJlQnV0dG9uUHJlc3MiLCJfZXhlY3V0ZUZvb3RlclNob3J0Y3V0IiwiZ2V0Rm9vdGVyIiwiZ2V0TmFtZSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwidmFsaWRhdGlvbiIsInR5cGUiLCJ0YXJnZXQiLCJpbmRleE9mIiwib1JldCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvTWVzc2FnZUJ1dHRvbiIsImdldExlbmd0aCIsInNldFZpc2libGUiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwibG9jayIsImVkaXREb2N1bWVudCIsImZpbmFsbHkiLCJ1bmxvY2siLCJnZXREcmFmdFJvb3RDb250ZXh0IiwiY29udGV4dCIsImRyYWZ0Um9vdENvbnRleHRQYXRoIiwiZ2V0RHJhZnRSb290UGF0aCIsInNpbXBsZURyYWZ0Um9vdENvbnRleHQiLCJleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJwYWdlVmlldyIsImludGVybmFsTW9kZWwiLCJtb2RlbCIsIm1ldGFNb2RlbCIsInNFbnRpdHlQYXRoIiwibURhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0IiwicmVxdWVzdFByb3BlcnR5IiwidGFyZ2V0RW50aXR5VHlwZSIsIm5hbWUiLCJfdmFsaWRhdGVEb2N1bWVudCIsImdldEN1cnJlbnRGb2N1c2VkQ29udHJvbElkIiwiaXNUcmFuc2llbnQiLCJzeW5jVGFzayIsImFwcENvbXBvbmVudCIsInNpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQiLCJnbG9iYWxTaWRlRWZmZWN0cyIsImdldEdsb2JhbE9EYXRhRW50aXR5U2lkZUVmZmVjdHMiLCJQcm9taXNlIiwiYWxsIiwic2lkZUVmZmVjdHMiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJkcmFmdFJvb3RDb250ZXh0IiwiZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbiIsImFXYWl0Q3JlYXRlRG9jdW1lbnRzIiwiYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJjcmVhdGlvbk1vZGUiLCJjcmVhdGlvblJvdyIsImNyZWF0ZUF0RW5kIiwiYkNyZWF0ZURvY3VtZW50IiwiYlNraXBTaWRlRWZmZWN0cyIsImNyZWF0ZURvY3VtZW50IiwiYUJpbmRpbmdzIiwiYmluZGluZ3MiLCJzYXZlRG9jdW1lbnQiLCJpc0xvY2tlZCIsIl9tYW5hZ2VDb2xsYWJvcmF0aW9uIiwib3Blbk1hbmFnZURpYWxvZyIsIl9zaG93Q29sbGFib3JhdGlvblVzZXJEZXRhaWxzIiwic2hvd1VzZXJEZXRhaWxzIiwiX2NhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwiY2FuY2VsRG9jdW1lbnQiLCJhcHBseURvY3VtZW50IiwicmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsImVsZW1lbnQiLCJtQWdncmVnYXRpb25zIiwiZ2V0QWdncmVnYXRpb24iLCJhSXRlbXMiLCJvSXRlbSIsImdldE1haW5Db250ZW50IiwiX2dldEFsbEJsb2NrcyIsIl9maW5kQ2hhcnRzIiwiYUNoYXJ0cyIsIm9CbG9jayIsIm9Db250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50Iiwib0NoYXJ0Q29udGV4dCIsInNDaGFydFBhdGgiLCJvQ29udGV4dERhdGEiLCJvQ2hhcnRDb250ZXh0RGF0YSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfbWVyZ2VNdWx0aXBsZUNvbnRleHRzIiwib1BhZ2VDb250ZXh0IiwiYUxpbmVDb250ZXh0IiwiYUF0dHJpYnV0ZXMiLCJhUGFnZUF0dHJpYnV0ZXMiLCJzTWV0YVBhdGhMaW5lIiwic1BhdGhMaW5lIiwic1BhZ2VQYXRoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aFBhZ2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsIm9Db25maWd1cmF0aW9uIiwicmVxdWVzdEdyb3VwSWQiLCJfc2V0QnJlYWRjcnVtYkxpbmtzIiwiYVByb21pc2VzIiwiYVNraXBQYXJhbWV0ZXJpemVkIiwic05ld1BhdGgiLCJhUGF0aFBhcnRzIiwic3BsaXQiLCJzUGF0aCIsInNoaWZ0Iiwic3BsaWNlIiwic1BhdGhQYXJ0Iiwib1Jvb3RWaWV3Q29udHJvbGxlciIsInNQYXJhbWV0ZXJQYXRoIiwiYlJlc3VsdENvbnRleHQiLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInRpdGxlSGllcmFyY2h5SW5mb3MiLCJpZHgiLCJoaWVyYXJjaHlQb3NpdGlvbiIsIm9MaW5rIiwidGl0bGVIaWVyYXJjaHlJbmZvIiwiZ2V0TGlua3MiLCJMaW5rIiwic2V0VGV4dCIsInNldEhyZWYiLCJlbmNvZGVVUkkiLCJhZGRMaW5rIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmtDb250ZXh0Iiwib0xpbmtEYXRhIiwib01peGVkQ29udGV4dCIsIm1lcmdlIiwib01hcHBpbmciLCJzTWFpblByb3BlcnR5Iiwic01hcHBlZFByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCJvTmV3TWFwcGluZyIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsInBhcmFtcyIsImFMaW5rcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IHsgY29ubmVjdCwgZGlzY29ubmVjdCwgaXNDb25uZWN0ZWQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9BY3Rpdml0eVN5bmNcIjtcbmltcG9ydCB7IG9wZW5NYW5hZ2VEaWFsb2csIHNob3dVc2VyRGV0YWlscyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL01hbmFnZVwiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxFZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWFzc0VkaXQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01hc3NFZGl0XCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnZVJlYWR5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdlUmVhZHlcIjtcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2luYXRvclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBSb290Q29udGFpbmVyQmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L1Jvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBSb290Vmlld0Jhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9Sb290Vmlld0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ2hhcnRSdW50aW1lIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0UnVudGltZVwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBFZGl0Rmxvd092ZXJyaWRlcyBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9Sb290Q29udGFpbmVyL292ZXJyaWRlcy9FZGl0Rmxvd1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IEluc3RhbmNlTWFuYWdlciBmcm9tIFwic2FwL20vSW5zdGFuY2VNYW5hZ2VyXCI7XG5pbXBvcnQgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQnJlYWRDcnVtYnMgZnJvbSBcInNhcC91eGFwL0JyZWFkQ3J1bWJzXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBPRGF0YUNvbnRleHRCaW5kaW5nRXgsIFY0Q29udGV4dCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogYW55O1xuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cdEB1c2luZ0V4dGVuc2lvbihFZGl0Rmxvdylcblx0ZWRpdEZsb3chOiBFZGl0Rmxvdztcblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsRWRpdEZsb3cub3ZlcnJpZGUoRWRpdEZsb3dPdmVycmlkZXMpKVxuXHRfZWRpdEZsb3chOiBJbnRlcm5hbEVkaXRGbG93O1xuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXHRAdXNpbmdFeHRlbnNpb24oTWFzc0VkaXQpXG5cdG1hc3NFZGl0ITogTWFzc0VkaXQ7XG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXHRwcml2YXRlIG9SZXNvdXJjZUJ1bmRsZT86IFJlc291cmNlQnVuZGxlO1xuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXHRwcml2YXRlIGN1cnJlbnRCaW5kaW5nPzogQmluZGluZztcblx0cHJpdmF0ZSBtZXNzYWdlQnV0dG9uOiBhbnk7XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSShzSWQ/OiBzdHJpbmcpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmIChzSWQpIHtcblx0XHRcdC8vIHRvIGFsbG93IGxvY2FsIElEIHVzYWdlIGZvciBjdXN0b20gcGFnZXMgd2UnbGwgY3JlYXRlL3JldHVybiBvd24gaW5zdGFuY2VzIGZvciBjdXN0b20gc2VjdGlvbnNcblx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzID0gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgfHwge307XG5cblx0XHRcdGlmICghdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzLCBzSWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHRcdH1cblx0fVxuXG5cdG9uSW5pdCgpIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHQvLyBTZXR0aW5nIGRlZmF1bHRzIG9mIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJleHRlcm5hbE5hdmlnYXRpb25Db250ZXh0XCIsIHsgXCJwYWdlXCI6IHRydWUgfSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKCEodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnVzZU5ld0xhenlMb2FkaW5nICYmIChvT2JqZWN0UGFnZSBhcyBhbnkpLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpO1xuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5vSXRlbUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdH1cblxuXHRvbkV4aXQoKSB7XG5cdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBPYmplY3Qua2V5cyh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykpIHtcblx0XHRcdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2VQb3BvdmVyID0gdGhpcy5tZXNzYWdlQnV0dG9uID8gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlciA6IG51bGw7XG5cdFx0aWYgKG9NZXNzYWdlUG9wb3ZlciAmJiBvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdG9NZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdH1cblx0XHQvL3doZW4gZXhpdGluZyB3ZSBzZXQga2VlcEFsaXZlIGNvbnRleHQgdG8gZmFsc2Vcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNLZWVwQWxpdmUoKSkge1xuXHRcdFx0b0NvbnRleHQuc2V0S2VlcEFsaXZlKGZhbHNlKTtcblx0XHR9XG5cdFx0aWYgKGlzQ29ubmVjdGVkKHRoaXMuZ2V0VmlldygpKSkge1xuXHRcdFx0ZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSk7IC8vIENsZWFudXAgY29sbGFib3JhdGlvbiBjb25uZWN0aW9uIHdoZW4gbGVhdmluZyB0aGUgYXBwXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwIG9uIHRoZSBvYmplY3QgcGFnZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9mblNob3dPUE1lc3NhZ2UoKSB7XG5cdFx0Y29uc3QgZXh0ZW5zaW9uQVBJID0gdGhpcy5nZXRFeHRlbnNpb25BUEkoKTtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyXG5cdFx0XHQuZ2V0SXRlbXMoKVxuXHRcdFx0Lm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKS5nZXRPYmplY3QoKSlcblx0XHRcdC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKGV4dGVuc2lvbkFQSSkge1xuXHRcdFx0ZXh0ZW5zaW9uQVBJLnNob3dNZXNzYWdlcyhtZXNzYWdlcyk7XG5cdFx0fVxuXHR9XG5cblx0X2dldFRhYmxlQmluZGluZyhvVGFibGU6IGFueSkge1xuXHRcdHJldHVybiBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIHRoZSBsYXN0IHZpc2libGUgc3Vic2VjdGlvbiBhbmQgYWRkIHRoZSBzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXIgQ1NTIGNsYXNzIGlmIGl0IGNvbnRhaW5zIG9ubHkgYSBncmlkVGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9ucyBUaGUgc3ViIHNlY3Rpb25zIHRvIGxvb2sgZm9yXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIGNoZWNrU2VjdGlvbnNGb3JHcmlkVGFibGUoc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pIHtcblx0XHRjb25zdCBjaGFuZ2VDbGFzc0ZvclRhYmxlcyA9IChldmVudDogRXZlbnQsIGxhc3RWaXNpYmxlU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pID0+IHtcblx0XHRcdGNvbnN0IGJsb2NrcyA9IFsuLi5sYXN0VmlzaWJsZVN1YlNlY3Rpb24uZ2V0QmxvY2tzKCksIC4uLmxhc3RWaXNpYmxlU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCldO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRibG9ja3MubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdHRoaXMuc2VhcmNoVGFibGVJbkJsb2NrKGJsb2Nrc1swXSBhcyBTdWJTZWN0aW9uQmxvY2spXG5cdFx0XHRcdFx0Py5nZXRUeXBlKClcblx0XHRcdFx0XHQ/LmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vSW4gY2FzZSB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRhYmxlIGluIGEgc3ViU2VjdGlvbiB3ZSBmaXQgdGhhdCB0byB0aGUgd2hvbGUgcGFnZSBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY29tZXMgb25seSBvbiB0YWJsZSBhbmQgbm90IG9uIHBhZ2Vcblx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmFkZFN0eWxlQ2xhc3MoXCJzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXJcIik7XG5cdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5kZXRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uSW5kZXggPSBzdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBzdWJTZWN0aW9uSW5kZXggPj0gMDsgc3ViU2VjdGlvbkluZGV4LS0pIHtcblx0XHRcdGlmIChzdWJTZWN0aW9uc1tzdWJTZWN0aW9uSW5kZXhdLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHRjb25zdCBsYXN0VmlzaWJsZVN1YlNlY3Rpb24gPSBzdWJTZWN0aW9uc1tzdWJTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIGF0dGFjaCB0aGlzIGV2ZW50IGluIG9yZGVyIHRvIG1hbmFnZSB0aGUgT2JqZWN0IFBhZ2UgTGF6eSBMb2FkaW5nIG1lY2hhbmlzbVxuXHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYXR0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgbGFzdFZpc2libGVTdWJTZWN0aW9uLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIGEgdGFibGUgaW4gYmxvY2tzIG9mIHNlY3Rpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBibG9jayBPbmUgc3ViIHNlY3Rpb24gYmxvY2tcblx0ICogQHJldHVybnMgVGFibGUgaWYgZXhpc3RzXG5cdCAqL1xuXHRwcml2YXRlIHNlYXJjaFRhYmxlSW5CbG9jayhibG9jazogU3ViU2VjdGlvbkJsb2NrKSB7XG5cdFx0Y29uc3QgY29udHJvbCA9IGJsb2NrLmNvbnRlbnQ7XG5cdFx0bGV0IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYmxvY2suaXNBKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0Ly8gY29udHJvbCBmcm9tIHRoZSBjdXN0b20gZGF0YSBvZiB0aGUgcGxhY2UgaG9sZGVyIHBhbmVsXG5cdFx0XHRpZiAoY29udHJvbC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBjb250cm9sLmRhdGEoXCJGdWxsU2NyZWVuVGFibGVQbGFjZUhvbGRlclwiKSkge1xuXHRcdFx0XHR0YWJsZUFQSSA9IGNvbnRyb2wuZGF0YShcInRhYmxlQVBJcmVmZXJlbmNlXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sIGFzIFRhYmxlQVBJO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHRcdHJldHVybiB0YWJsZUFQSS5jb250ZW50IGFzIFRhYmxlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKSB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdC8vIEluIHRoZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IHNjZW5hcmlvIHdlIG5lZWQgdG8gZW5zdXJlIGluIGNhc2Ugb2YgcmVsb2FkL3JlZnJlc2ggdGhhdCB0aGUgbWV0YSBtb2RlbCBpbiB0aGUgbWV0aG9kZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IG9mIHRoZSBGaWVsZFJ1bnRpbWUgaXMgYXZhaWxhYmxlXG5cdFx0aWYgKHRoaXMub1ZpZXcub1ZpZXdEYXRhPy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ICYmIENvbW1vbkhlbHBlci5nZXRNZXRhTW9kZWwoKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRDb21tb25IZWxwZXIuc2V0TWV0YU1vZGVsKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0KCh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHQudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSA9IHJlc3BvbnNlO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcmVzb3VyY2UgYnVuZGxlXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0XHRsZXQgc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG5cdFx0aWYgKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0VXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRjb25zdCBzZWN0aW9ucyA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuXHRcdFx0XHRzdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yR3JpZFRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yR3JpZFRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHR9XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHQvLyBUT0RPOiB3ZSBzaG91bGQgY2hlY2sgaG93IHRoaXMgY29tZXMgdG9nZXRoZXIgd2l0aCB0aGUgdHJhbnNhY3Rpb24gaGVscGVyLCBzYW1lIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIGFmdGVyQmluZGluZ1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCksXG5cdFx0XHRvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0b0ludGVybmFsTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIpLFxuXHRcdFx0aVZpZXdMZXZlbCA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudmlld0xldmVsO1xuXHRcdGxldCBvRmFzdENyZWF0aW9uUm93O1xuXHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG9cIik7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmJEcmFmdE5hdmlnYXRpb24gIT09IHRydWUpIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChcblx0XHRcdG9wQ29udGV4dCAmJlxuXHRcdFx0b3BDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiZcblx0XHRcdCFhQmF0Y2hHcm91cHMuc29tZShvcENvbnRleHQuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcy5iaW5kKG9wQ29udGV4dC5nZXRNb2RlbCgpKSlcblx0XHQpIHtcblx0XHRcdC8qIFx0SW4gY2FzZSB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGZvciB0aGUgY3JlYXRpb24gcm93IGFuZCBubyBvdGhlcnMgd2UgbmVlZCB0byByZXNldCB0aGUgY2hhbmdlc1xuICAgIFx0XHRcdFx0XHRcdFRPRE86IHRoaXMgaXMganVzdCBhIHF1aWNrIHNvbHV0aW9uLCB0aGlzIG5lZWRzIHRvIGJlIHJld29ya2VkXG4gICAgXHRcdFx0XHQgXHQqL1xuXG5cdFx0XHRvcENvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdH1cblxuXHRcdC8vIEZvciBub3cgd2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvd1xuXHRcdC8vIFRPRE86IEdldCByaWQgb2YgdGhpcyBjb2Rpbmcgb3IgbW92ZSBpdCB0byBhbm90aGVyIGxheWVyIC0gdG8gYmUgZGlzY3Vzc2VkIHdpdGggTURDIGFuZCBtb2RlbFxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b0Zhc3RDcmVhdGlvblJvdyA9IGFUYWJsZXNbaV0uZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvbiBzbyB0aGF0IGJpbmRpbmdzIGFyZSBlbmFibGVkIGR1cmluZyBuYXZpZ2F0aW9uIHRocm91Z2ggcGFnaW5hdG9yIGJ1dHRvbnMsIGFzIHRoZXJlIGlzIG5vIHZpZXcgcmVyZW5kZXJpbmcvcmViaW5kXG5cdFx0Y29uc3QgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKCEob09iamVjdFBhZ2UgYXMgYW55KS5pc0ZpcnN0UmVuZGVyaW5nKCkgJiYgIW1QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwpIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG51bGwgYXMgYW55KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50T25jZShcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24pO1xuXG5cdFx0Ly8gaWYgdGhlIHN0cnVjdHVyZSBvZiB0aGUgT2JqZWN0UGFnZUxheW91dCBpcyBjaGFuZ2VkIHRoZW4gc2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvblxuXHRcdC8vIEZJWE1FIElzIHRoaXMgcmVhbGx5IHdvcmtpbmcgYXMgaW50ZW5kZWQgPyBJbml0aWFsbHkgdGhpcyB3YXMgb25CZWZvcmVSZW5kZXJpbmcsIGJ1dCBuZXZlciB0cmlnZ2VyZWQgb25CZWZvcmVSZW5kZXJpbmcgYmVjYXVzZSBpdCB3YXMgcmVnaXN0ZXJlZCBhZnRlciBpdFxuXHRcdGNvbnN0IG9EZWxlZ2F0ZU9uQmVmb3JlID0ge1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uXG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hZGRFdmVudERlbGVnYXRlKG9EZWxlZ2F0ZU9uQmVmb3JlLCB0aGlzKTtcblx0XHR0aGlzLnBhZ2VSZWFkeS5hdHRhY2hFdmVudE9uY2UoXCJwYWdlUmVhZHlcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0b09iamVjdFBhZ2UucmVtb3ZlRXZlbnREZWxlZ2F0ZShvRGVsZWdhdGVPbkJlZm9yZSk7XG5cdFx0fSk7XG5cblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdGlmIChpVmlld0xldmVsID4gMSkge1xuXHRcdFx0bGV0IG9CaW5kaW5nID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMubGlzdEJpbmRpbmc7XG5cdFx0XHRjb25zdCBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQgPSBvSW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiKTtcblx0XHRcdGlmIChvUGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdUb1VzZSA9IG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUob0JpbmRpbmdUb1VzZSwgb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgbnVsbCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9CaW5kaW5nKSB7XG5cdFx0XHRcdGlmIChvQmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUob0JpbmRpbmcsIG9Db250ZXh0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBpZiB0aGUgYmluZGluZyB0eXBlIGlzIG5vdCBPRGF0YUxpc3RCaW5kaW5nIGJlY2F1c2Ugb2YgYSBkZWVwbGluayBuYXZpZ2F0aW9uIG9yIGEgcmVmcmVzaCBvZiB0aGUgcGFnZVxuXHRcdFx0XHRcdC8vIHdlIG5lZWQgdG8gY3JlYXRlIGl0XG5cdFx0XHRcdFx0Y29uc3Qgc0JpbmRpbmdQYXRoID0gb0JpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0XHRcdGlmICgvXFwoW15cXCldKlxcKSQvLnRlc3Qoc0JpbmRpbmdQYXRoKSkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGN1cnJlbnQgYmluZGluZyBwYXRoIGVuZHMgd2l0aCAoeHh4KSwgc28gd2UgY3JlYXRlIHRoZSBsaXN0QmluZGluZyBieSByZW1vdmluZyAoeHh4KVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0xpc3RCaW5kaW5nUGF0aCA9IHNCaW5kaW5nUGF0aC5yZXBsYWNlKC9cXChbXlxcKV0qXFwpJC8sIFwiXCIpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcgPSBuZXcgKE9EYXRhTGlzdEJpbmRpbmcgYXMgYW55KShvQmluZGluZy5vTW9kZWwsIHNMaXN0QmluZGluZ1BhdGgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgX3NldExpc3RCaW5kaW5nQXN5bmMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0cygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nLCBvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoRXZlbnQoXCJjaGFuZ2VcIiwgX3NldExpc3RCaW5kaW5nQXN5bmMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwiY2hhbmdlXCIsIF9zZXRMaXN0QmluZGluZ0FzeW5jKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGN1cnJlbnQgYmluZGluZyBkb2Vzbid0IGVuZCB3aXRoICh4eHgpIC0tPiB0aGUgbGFzdCBzZWdtZW50IGlzIGEgMS0xIG5hdmlnYXRpb24sIHNvIHdlIGRvbid0IGRpc3BsYXkgdGhlIHBhZ2luYXRvclxuXHRcdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZSh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcgJiYgb09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Y29uc3QgYVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb09iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdFx0bGV0IGlTa2lwID0gMjtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0XHRjb25zdCBiRWRpdGFibGVIZWFkZXIgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0XHRcdGZvciAobGV0IGlTZWN0aW9uID0gMDsgaVNlY3Rpb24gPCBhU2VjdGlvbnMubGVuZ3RoOyBpU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChsZXQgaVN1YlNlY3Rpb24gPSAwOyBpU3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGlTdWJTZWN0aW9uKyssIGlTa2lwLS0pIHtcblx0XHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXHRcdFx0XHRcdGlmIChpU2tpcCA8IDEgfHwgKGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHRcdGlmIChvU3ViU2VjdGlvbi5kYXRhKCkuaXNWaXNpYmlsaXR5RHluYW1pYyAhPT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyBhbnkpLm9Db250YWluZXIuZ2V0UGFyZW50KCk7XG5cdFx0XHRpZiAob05hdkNvbnRhaW5lcikge1xuXHRcdFx0XHRvTmF2Q29udGFpbmVyLnNob3dQbGFjZWhvbGRlcih7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZTogYW55KSB7XG5cdFx0bGV0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdFx0Y29uc3QgYUFjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhQWN0aW9ucyAmJiBhQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSBhQWN0aW9ucy5maW5kKGZ1bmN0aW9uIChvQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBsZWZ0IGFsaWdubWVudCBvZiB0aGUgRHJhZnQgc3dpdGNoIGFuZCB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBhdmF0YXIgY29udHJvbHNcblx0XHRcdFx0Ly8gdGhlcmUgaXMgYSBUb29sYmFyU3BhY2VyIGluIHRoZSBhY3Rpb25zIGFnZ3JlZ2F0aW9uIHdoaWNoIHdlIG5lZWQgdG8gZXhjbHVkZSBoZXJlIVxuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIEFDQyByZXBvcnQsIHdlIGFsc28gbmVlZCBub3QgdG8gY2hlY2sgZm9yIHRoZSBJbnZpc2libGVUZXh0IGVsZW1lbnRzXG5cdFx0XHRcdGlmIChvQWN0aW9uLmlzQShcInNhcC5mZS5tYWNyb3Muc2hhcmUuU2hhcmVBUElcIikpIHtcblx0XHRcdFx0XHQvLyBzaW5jZSBTaGFyZUFQSSBkb2VzIG5vdCBoYXZlIGEgZGlzYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHRcdC8vIGhlbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgZGlzYmFsZWQgb3Igbm90XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFvQWN0aW9uLmlzQShcInNhcC51aS5jb3JlLkludmlzaWJsZVRleHRcIikgJiYgIW9BY3Rpb24uaXNBKFwic2FwLm0uVG9vbGJhclNwYWNlclwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uLmdldFZpc2libGUoKSAmJiBvQWN0aW9uLmdldEVuYWJsZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBvRmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHR9XG5cblx0X2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9uczogYW55KSB7XG5cdFx0aWYgKGFTdWJTZWN0aW9ucykge1xuXHRcdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdFx0Y29uc3QgYUJsb2NrcyA9IGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKTtcblxuXHRcdFx0XHRpZiAoYUJsb2Nrcykge1xuXHRcdFx0XHRcdGZvciAobGV0IGJsb2NrID0gMDsgYmxvY2sgPCBhQmxvY2tzLmxlbmd0aDsgYmxvY2srKykge1xuXHRcdFx0XHRcdFx0bGV0IGFGb3JtQ29udGFpbmVycztcblxuXHRcdFx0XHRcdFx0aWYgKGFCbG9ja3NbYmxvY2tdLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGFCbG9ja3NbYmxvY2tdLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50ICYmXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKSAmJlxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuaXNBKFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIilcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtQ29udGFpbmVyID0gMDsgZm9ybUNvbnRhaW5lciA8IGFGb3JtQ29udGFpbmVycy5sZW5ndGg7IGZvcm1Db250YWluZXIrKykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGb3JtRWxlbWVudHMgPSBhRm9ybUNvbnRhaW5lcnNbZm9ybUNvbnRhaW5lcl0uZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGZvcm1FbGVtZW50ID0gMDsgZm9ybUVsZW1lbnQgPCBhRm9ybUVsZW1lbnRzLmxlbmd0aDsgZm9ybUVsZW1lbnQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmllbGRzID0gYUZvcm1FbGVtZW50c1tmb3JtRWxlbWVudF0uZ2V0RmllbGRzKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGZpcnN0IGZpZWxkIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBJbnB1dEJhc2UgKGUuZy4gY291bGQgYmUgYSBUZXh0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTbyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaXQgaGFzIGEgZ2V0UmVxdWlyZWQgbWV0aG9kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQgJiYgYUZpZWxkc1swXS5nZXRSZXF1aXJlZCgpICYmICFhRmllbGRzWzBdLmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBhRmllbGRzWzBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoZW4gc2VhcmNoaW5nIGZvciBtYW5kYW90cnkgZW1wdHkgZmllbGQ6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdF91cGRhdGVGb2N1c0luRWRpdE1vZGUoYVN1YlNlY3Rpb25zOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdGxldCBvRmllbGRUb0ZvY3VzOiBhbnk7XG5cdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IG9NYW5kYXRvcnlGaWVsZC5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob09iamVjdFBhZ2UgYXMgYW55KS5fZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCkgfHwgdGhpcy5fZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHR9XG5cblx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdC8vIFdlIHNldCB0aGUgZm9jdXMgaW4gYSB0aW1lZW91dCwgb3RoZXJ3aXNlIHRoZSBmb2N1cyBzb21ldGltZXMgZ29lcyB0byB0aGUgVGFiQmFyXG5cdFx0XHRcdG9GaWVsZFRvRm9jdXMuZm9jdXMoKTtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0fVxuXG5cdF9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0KG9FdmVudDogYW55KSB7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHR9XG5cblx0X29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9Db250ZXh0OiBhbnkpIHtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdGlmICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBCYWNrIG5hdiB3aWxsIGtlZXAgdGhlIHNhbWUgY29udGV4dCAtLT4gbm8gbmVlZCB0byBkaXNwbGF5IHRoZSBkaWFsb2dcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRVUkwgPSBkb2N1bWVudC5VUkw7XG5cdFx0XHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0XHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSBpcyBubyBwcmV2aW91cyBwYWdlIGluIHRoZSBoaXN0b3J5LCBoaXN0b3J5LmJhY2sgZG9lcyBub3RoaW5nLlxuXHRcdFx0XHRcdC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byB1c2UgbmF2aWdhdGVCYWNrRnJvbUNvbnRleHQsIHRoYXQgd2lsbCBkaXNwbGF5IHRoZSBob21lIHBhZ2Vcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChkb2N1bWVudC5VUkwgPT09IGN1cnJlbnRVUkwpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSwgMTAwKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0X29uQWZ0ZXJCaW5kaW5nKG9CaW5kaW5nQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cblx0XHR0aGlzLl9zaWRlRWZmZWN0cy5jbGVhclByb3BlcnRpZXNTdGF0dXMoKTtcblxuXHRcdC8vIFRPRE86IHRoaXMgaXMgb25seSBhIHRlbXAgc29sdXRpb24gYXMgbG9uZyBhcyB0aGUgbW9kZWwgZml4IHRoZSBjYWNoZSBpc3N1ZSBhbmQgd2UgdXNlIHRoaXMgYWRkaXRpb25hbFxuXHRcdC8vIGJpbmRpbmcgd2l0aCBvd25SZXF1ZXN0XG5cdFx0b0JpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKTtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogYW55W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBhbnkpIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1N1YlNlY3Rpb24sIGFJQk5BY3Rpb25zKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gQXNzaWduIGludGVybmFsIGJpbmRpbmcgY29udGV4dHMgdG8gb0Zvcm1Db250YWluZXI6XG5cdFx0Ly8gMS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFzc2lnbiB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IHRvIHRoZSBYTUwgZnJhZ21lbnRcblx0XHQvLyAoRm9ybUNvbnRhaW5lci5mcmFnbWVudC54bWwpIHlldCAtIGl0IGlzIHVzZWQgYWxyZWFkeSBmb3IgdGhlIGRhdGEtc3RydWN0dXJlLlxuXHRcdC8vIDIuIEFub3RoZXIgcHJvYmxlbSBpcywgdGhhdCBGb3JtQ29udGFpbmVycyBhc3NpZ25lZCB0byBhICdNb3JlQmxvY2snIGRvZXMgbm90IGhhdmUgYW5cblx0XHQvLyBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGF0IGFsbC5cblxuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiwge30pO1xuXG5cdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgQkNQOiAyMDgwMjE4MDA0XG5cdFx0XHQvLyBOZWVkIHRvIGZpeCB3aXRoIEJMSTogRklPUklURUNIUDEtMTUyNzRcblx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHQvLyBXb3JrYXJvdW5kIHN0YXJ0cyBoZXJlISFcblx0XHRcdGNvbnN0IG9UYWJsZVJvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvVGFibGVSb3dCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdFx0Ly8gYXBwbHkgZm9yIGJvdGggZWRpdCBhbmQgZGlzcGxheSBtb2RlIGluIHN0aWNreVxuXHRcdFx0XHRcdG9UYWJsZVJvd0JpbmRpbmcucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0Ly8gVXBkYXRlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYnV0dG9ucyBvbiB0YWJsZSB0b29sYmFyXG5cdFx0XHQvLyBUaGUgc2FtZSBpcyBhbHNvIHBlcmZvcm1lZCBvbiBUYWJsZSBzZWxlY3Rpb25DaGFuZ2UgZXZlbnRcblx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwiKSlcblx0XHRcdFx0KSxcblx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXG5cdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cywgXCJ0YWJsZVwiKTtcblx0XHRcdC8vIENsZWFyIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHRhYmxlLCBuZWVkIHRvIGJlIGZpeGVkIGFuZCByZXZpZXcgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRvVGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblx0XHR9KTtcblx0XHRDb21tb25VdGlscy5nZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsKHRoaXMsIFwiX3BhZ2VNb2RlbFwiKTtcblx0XHQvL1JldHJpZXZlIE9iamVjdCBQYWdlIGhlYWRlciBhY3Rpb25zIGZyb20gT2JqZWN0IFBhZ2UgdGl0bGUgY29udHJvbFxuXHRcdGNvbnN0IG9PYmplY3RQYWdlVGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpO1xuXHRcdGxldCBhSUJOSGVhZGVyQWN0aW9uczogYW55W10gPSBbXTtcblx0XHRhSUJOSGVhZGVyQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob09iamVjdFBhZ2VUaXRsZSwgYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdGFJQk5BY3Rpb25zID0gYUlCTkFjdGlvbnMuY29uY2F0KGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRDb21tb25VdGlscy51cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9ucywgdGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0bGV0IG9Nb2RlbDogYW55LCBvRmluYWxVSVN0YXRlOiBhbnk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBtb3ZlZCBpbnRvIGFuIGluaXQgZXZlbnQgb2YgdGhlIE1EQyB0YWJsZXMgKG5vdCB5ZXQgZXhpc3RpbmcpIGFuZCBzaG91bGQgYmUgcGFydFxuXHRcdC8vIG9mIGFueSBjb250cm9sbGVyIGV4dGVuc2lvblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKiBAcGFyYW0gb0xpc3RCaW5kaW5nXG5cdFx0ICovXG5cdFx0YXN5bmMgZnVuY3Rpb24gZW5hYmxlRmFzdENyZWF0aW9uUm93KG9UYWJsZTogYW55LCBvTGlzdEJpbmRpbmc6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0Zhc3RDcmVhdGlvblJvdyA9IG9UYWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0bGV0IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZywgb0Zhc3RDcmVhdGlvbkNvbnRleHQ7XG5cblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXdhaXQgb0ZpbmFsVUlTdGF0ZTtcblx0XHRcdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdy5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyA9IG9Nb2RlbC5iaW5kTGlzdChvTGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBvTGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpLCBbXSwgW10sIHtcblx0XHRcdFx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBcImRvTm90U3VibWl0XCIsXG5cdFx0XHRcdFx0XHRcdCQkZ3JvdXBJZDogXCJkb05vdFN1Ym1pdFwiXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdC8vIFdvcmthcm91bmQgc3VnZ2VzdGVkIGJ5IE9EYXRhIG1vZGVsIHY0IGNvbGxlYWd1ZXNcblx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5yZWZyZXNoSW50ZXJuYWwgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdC8qIGRvIG5vdGhpbmcgKi9cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uQ29udGV4dCA9IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5jcmVhdGUoKTtcblx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQob0Zhc3RDcmVhdGlvbkNvbnRleHQpO1xuXG5cdFx0XHRcdFx0XHQvLyB0aGlzIGlzIG5lZWRlZCB0byBhdm9pZCBjb25zb2xlIGVycm9yXG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBvRmFzdENyZWF0aW9uQ29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdExvZy50cmFjZShcInRyYW5zaWVudCBmYXN0IGNyZWF0aW9uIGNvbnRleHQgZGVsZXRlZFwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY29tcHV0aW5nIHRoZSBmaW5hbCBVSSBzdGF0ZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gdGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCB0aGUgYWxsXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9UYWJsZVxuXHRcdCAqL1xuXHRcdGNvbnN0IGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyA9IChvVGFibGU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKSxcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGVuYWJsZUZhc3RDcmVhdGlvblJvdyhvVGFibGUsIG9CaW5kaW5nKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKCFvQmluZGluZykge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEV4cGVjdGVkIGJpbmRpbmcgbWlzc2luZyBmb3IgdGFibGU6ICR7b1RhYmxlLmdldElkKCl9YCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9CaW5kaW5nLm9Db250ZXh0KSB7XG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0aWYgKG9CaW5kaW5nLm9Db250ZXh0KSB7XG5cdFx0XHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmRldGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvTW9kZWwgPSBvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKTtcblxuXHRcdFx0Ly8gQ29tcHV0ZSBFZGl0IE1vZGVcblx0XHRcdG9GaW5hbFVJU3RhdGUgPSB0aGlzLl9lZGl0Rmxvdy5jb21wdXRlRWRpdE1vZGUob0JpbmRpbmdDb250ZXh0KTtcblxuXHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0b0ZpbmFsVUlTdGF0ZVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29ubmVjdCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzQ29ubmVjdGVkKHRoaXMuZ2V0VmlldygpKSkge1xuXHRcdFx0XHRcdFx0XHRkaXNjb25uZWN0KHRoaXMuZ2V0VmlldygpKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gaW4gY2FzZSB3ZSBzd2l0Y2ggdG8gYW5vdGhlciBlbGVtZW50IChlLmcuIGluIEZDTClcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBmaW5hbCBVSSBTdGF0ZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyB1cGRhdGUgcmVsYXRlZCBhcHBzIG9uY2UgRGF0YSBpcyByZWNlaXZlZCBpbiBjYXNlIG9mIGJpbmRpbmcgY2FjaGUgaXMgbm90IGF2YWlsYWJsZVxuXHRcdFx0Ly8gVE9ETzogdGhpcyBpcyBvbmx5IGEgdGVtcCBzb2x1dGlvbiBzaW5jZSB3ZSBuZWVkIHRvIGNhbGwgX3VwZGF0ZVJlbGF0ZWRBcHBzIG1ldGhvZCBvbmx5IGFmdGVyIGRhdGEgZm9yIE9iamVjdCBQYWdlIGlzIHJlY2VpdmVkIChpZiB0aGVyZSBpcyBubyBiaW5kaW5nKVxuXHRcdFx0aWYgKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkub0NhY2hlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmblVwZGF0ZVJlbGF0ZWRBcHBzID0gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5kZXRhY2hEYXRhUmVjZWl2ZWQoZm5VcGRhdGVSZWxhdGVkQXBwcyk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkuYXR0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlUmVsYXRlZEFwcHMpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL0F0dGFjaCB0aGUgcGF0Y2ggc2VudCBhbmQgcGF0Y2ggY29tcGxldGVkIGV2ZW50IHRvIHRoZSBvYmplY3QgcGFnZSBiaW5kaW5nIHNvIHRoYXQgd2UgY2FuIHJlYWN0XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IChvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZyAmJiBvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpKSB8fCBvQmluZGluZ0NvbnRleHQ7XG5cblx0XHRcdC8vIEF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlciBvbmx5IG9uY2UgdG8gdGhlIHNhbWUgYmluZGluZ1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudEJpbmRpbmcgIT09IG9CaW5kaW5nKSB7XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwicGF0Y2hTZW50XCIsIHRoaXMuZWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IG9CaW5kaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0VGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHRcdC50aGVuKGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucylcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcpIHtcblx0XHRcdFx0Ly8gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGJpbmRpbmcgaXMgcmVhZHkgaGVuY2UgY2FsbGluZyBpdCBpbiBvbkFmdGVyQmluZGluZ1xuXHRcdFx0XHQob09iamVjdFBhZ2UgYXMgYW55KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IHNldEZvY3VzID0gKCkgPT4ge1xuXHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgYWN0aW9uIGJ1dHRvbiwgb3IgdG8gdGhlIGZpcnN0IGVkaXRhYmxlIGlucHV0IGlmIGluIGVkaXRhYmxlIG1vZGVcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGlzSW5EaXNwbGF5TW9kZSA9ICFvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cblx0XHRcdGlmIChpc0luRGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IHRoaXMuX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdGlmIChvRmlyc3RDbGlja2FibGVFbGVtZW50KSB7XG5cdFx0XHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRTZWN0aW9uOiBhbnkgPSBDb3JlLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkU2VjdGlvbikge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShvU2VsZWN0ZWRTZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvLyBBcHBseSBhcHAgc3RhdGUgb25seSBhZnRlciB0aGUgcGFnZSBpcyByZWFkeSB3aXRoIHRoZSBmaXJzdCBzZWN0aW9uIHNlbGVjdGVkXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly9TaG93IHBvcHVwIHdoaWxlIG5hdmlnYXRpbmcgYmFjayBmcm9tIG9iamVjdCBwYWdlIGluIGNhc2Ugb2YgZHJhZnRcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoIWJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCgpID0+IHRoaXMuX29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9CaW5kaW5nQ29udGV4dCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHQuZ2V0QXBwU3RhdGVIYW5kbGVyKClcblx0XHRcdC5hcHBseUFwcFN0YXRlKClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmZvcmNlRm9jdXMpIHtcblx0XHRcdFx0XHRzZXRGb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChFcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHRoZSBmb2N1c1wiLCBFcnJvcik7XG5cdFx0XHR9KTtcblxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHR0aGlzLl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvbi5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uXG5cdCAqL1xuXHRnZXRTdGlja3lFZGl0TW9kZSgpIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCAmJiAodGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRsZXQgYklzU3RpY2t5RWRpdE1vZGUgPSBmYWxzZTtcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmIChiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGJJc1N0aWNreUVkaXRNb2RlID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGU7XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdH1cblxuXHRfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlU3VidGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGE6IGFueSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VTdWJ0aXRsZVwiO1xuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VUaXRsZVwiKSB8fCBcIlwiLFxuXHRcdFx0c3VidGl0bGU6IG9PYmplY3RQYWdlU3VidGl0bGUgJiYgb09iamVjdFBhZ2VTdWJ0aXRsZS5nZXRWYWx1ZSgpLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH07XG5cdH1cblxuXHRfZXhlY3V0ZUhlYWRlclNob3J0Y3V0KHNJZDogYW55KSB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlKVxuXHRcdFx0XHQuZ2V0QWN0aW9ucygpXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvRWxlbWVudDogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHR9XG5cblx0X2V4ZWN1dGVGb290ZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEZvb3RlcigpIGFzIGFueSkuZ2V0Q29udGVudCgpLmZpbmQoZnVuY3Rpb24gKG9FbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLkJ1dHRvblwiICYmIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0fVxuXG5cdF9leGVjdXRlVGFiU2hvcnRDdXQob0V4ZWN1dGlvbjogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gb0V4ZWN1dGlvbi5vU291cmNlLmdldENvbW1hbmQoKTtcblx0XHRsZXQgbmV3U2VjdGlvbixcblx0XHRcdGlTZWxlY3RlZFNlY3Rpb25JbmRleCA9IG9PYmplY3RQYWdlLmluZGV4T2ZTZWN0aW9uKHRoaXMuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IDApIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCkge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRNZXNzYWdlTWFuYWdlcigpXG5cdFx0XHQuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdGlmIChvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLnR5cGUgPT09IFwiRXJyb3JcIiAmJiBvTWVzc2FnZS50YXJnZXQuaW5kZXhPZihzVmlld0lkKSA+IC0xKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogYW55LCBvUmV0PzogYW55KSB7XG5cdFx0aWYgKGVycikge1xuXHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0fVxuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55O1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBhbnkpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKCFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdF9lZGl0RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogR2V0cyB0aGUgY29udGV4dCBvZiB0aGUgRHJhZnRSb290IHBhdGguXG5cdCAqIElmIGEgdmlldyBoYXMgYmVlbiBjcmVhdGVkIHdpdGggdGhlIGRyYWZ0IFJvb3QgUGF0aCwgdGhpcyBtZXRob2QgcmV0dXJucyBpdHMgYmluZGluZ0NvbnRleHQuXG5cdCAqIFdoZXJlIG5vIHZpZXcgaXMgZm91bmQgYSBuZXcgY3JlYXRlZCBjb250ZXh0IGlzIHJldHVybmVkLlxuXHQgKiBUaGUgbmV3IGNyZWF0ZWQgY29udGV4dCByZXF1ZXN0IHRoZSBrZXkgb2YgdGhlIGVudGl0eSBpbiBvcmRlciB0byBnZXQgdGhlIEV0YWcgb2YgdGhpcyBlbnRpdHkuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBnZXREcmFmdFJvb3RQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgYSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBnZXREcmFmdFJvb3RDb250ZXh0KCk6IFByb21pc2U8VjRDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgVjRDb250ZXh0O1xuXHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0UGF0aCA9IE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdFBhdGgoY29udGV4dCk7XG5cdFx0XHRsZXQgc2ltcGxlRHJhZnRSb290Q29udGV4dDogVjRDb250ZXh0O1xuXHRcdFx0aWYgKGRyYWZ0Um9vdENvbnRleHRQYXRoKSB7XG5cdFx0XHRcdC8vIENoZWNrIGlmIGEgdmlldyBtYXRjaGVzIHdpdGggdGhlIGRyYWZ0IHJvb3QgcGF0aFxuXHRcdFx0XHRjb25zdCBleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgUm9vdFZpZXdCYXNlQ29udHJvbGxlcilcblx0XHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHRcdC5maW5kKChwYWdlVmlldzogVmlldykgPT4gcGFnZVZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpID09PSBkcmFmdFJvb3RDb250ZXh0UGF0aClcblx0XHRcdFx0XHQ/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgVjRDb250ZXh0O1xuXHRcdFx0XHRpZiAoZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSkge1xuXHRcdFx0XHRcdHJldHVybiBleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0XHRzaW1wbGVEcmFmdFJvb3RDb250ZXh0ID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9zaW1wbGVEcmFmdFJvb3RDb250ZXh0XCIpO1xuXHRcdFx0XHRpZiAoc2ltcGxlRHJhZnRSb290Q29udGV4dD8uZ2V0UGF0aCgpID09PSBkcmFmdFJvb3RDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRcdHJldHVybiBzaW1wbGVEcmFmdFJvb3RDb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoZHJhZnRSb290Q29udGV4dFBhdGgpO1xuXHRcdFx0XHRjb25zdCBtRGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dChzRW50aXR5UGF0aCkpO1xuXHRcdFx0XHRzaW1wbGVEcmFmdFJvb3RDb250ZXh0ID0gbW9kZWwuYmluZENvbnRleHQoZHJhZnRSb290Q29udGV4dFBhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRhd2FpdCBzaW1wbGVEcmFmdFJvb3RDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShtRGF0YU1vZGVsLnRhcmdldEVudGl0eVR5cGUua2V5c1swXT8ubmFtZSk7XG5cdFx0XHRcdC8vIFN0b3JlIHRoaXMgbmV3IGNyZWF0ZWQgY29udGV4dCB0byB1c2UgaXQgb24gdGhlIG5leHQgaXRlcmF0aW9uc1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3NpbXBsZURyYWZ0Um9vdENvbnRleHRcIiwgc2ltcGxlRHJhZnRSb290Q29udGV4dCk7XG5cdFx0XHRcdHJldHVybiBzaW1wbGVEcmFmdFJvb3RDb250ZXh0O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGFzeW5jIF92YWxpZGF0ZURvY3VtZW50KCk6IFByb21pc2U8dm9pZCB8IGFueVtdIHwgT0RhdGFDb250ZXh0QmluZGluZ0V4PiB7XG5cdFx0Y29uc3QgY29udHJvbCA9IENvcmUuYnlJZChDb3JlLmdldEN1cnJlbnRGb2N1c2VkQ29udHJvbElkKCkpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIFY0Q29udGV4dDtcblx0XHRpZiAoY29udGV4dCAmJiAhY29udGV4dC5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHQvLyBXYWl0IGZvciB0aGUgcGVuZGluZyBjaGFuZ2VzIGJlZm9yZSBzdGFydGluZyB0aGlzIHZhbGlkYXRpb25cblx0XHRcdGF3YWl0IHRoaXMuX2VkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGdsb2JhbFNpZGVFZmZlY3RzLm1hcCgoc2lkZUVmZmVjdHMpID0+IHRoaXMuX3NpZGVFZmZlY3RzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cywgY29udGV4dCkpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGRyYWZ0Um9vdENvbnRleHQgPSBhd2FpdCB0aGlzLmdldERyYWZ0Um9vdENvbnRleHQoKTtcblx0XHRcdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHNcblx0XHRcdFx0aWYgKGRyYWZ0Um9vdENvbnRleHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZHJhZnQuZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihkcmFmdFJvb3RDb250ZXh0LCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRhc3luYyBfc2F2ZURvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLFxuXHRcdFx0YVdhaXRDcmVhdGVEb2N1bWVudHM6IGFueVtdID0gW107XG5cdFx0Ly8gaW5kaWNhdGVzIGlmIHdlIGFyZSBjcmVhdGluZyBhIG5ldyByb3cgaW4gdGhlIE9QXG5cdFx0bGV0IGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0dGhpcy5fZmluZFRhYmxlcygpLmZvckVhY2goKG9UYWJsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpO1xuXHRcdFx0Y29uc3QgbVBhcmFtZXRlcnM6IGFueSA9IHtcblx0XHRcdFx0Y3JlYXRpb25Nb2RlOiBvVGFibGUuZGF0YShcImNyZWF0aW9uTW9kZVwiKSxcblx0XHRcdFx0Y3JlYXRpb25Sb3c6IG9UYWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRjcmVhdGVBdEVuZDogb1RhYmxlLmRhdGEoXCJjcmVhdGVBdEVuZFwiKSA9PT0gXCJ0cnVlXCJcblx0XHRcdH07XG5cdFx0XHRjb25zdCBiQ3JlYXRlRG9jdW1lbnQgPVxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvblJvdyAmJlxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvblJvdy5nZXRCaW5kaW5nQ29udGV4dCgpICYmXG5cdFx0XHRcdE9iamVjdC5rZXlzKG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0T2JqZWN0KCkpLmxlbmd0aCA+IDE7XG5cdFx0XHRpZiAoYkNyZWF0ZURvY3VtZW50KSB7XG5cdFx0XHRcdC8vIHRoZSBiU2tpcFNpZGVFZmZlY3RzIGlzIGEgcGFyYW1ldGVyIGNyZWF0ZWQgd2hlbiB3ZSBjbGljayB0aGUgc2F2ZSBrZXkuIElmIHdlIHByZXNzIHRoaXMga2V5XG5cdFx0XHRcdC8vIHdlIGRvbid0IGV4ZWN1dGUgdGhlIGhhbmRsZVNpZGVFZmZlY3RzIGZ1bmNpdG9uIHRvIGF2b2lkIGJhdGNoIHJlZHVuZGFuY3lcblx0XHRcdFx0bVBhcmFtZXRlcnMuYlNraXBTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gdHJ1ZTtcblx0XHRcdFx0YVdhaXRDcmVhdGVEb2N1bWVudHMucHVzaChcblx0XHRcdFx0XHR0aGlzLmVkaXRGbG93LmNyZWF0ZURvY3VtZW50KG9CaW5kaW5nLCBtUGFyYW1ldGVycykudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmc7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBhQmluZGluZ3MgPSBhd2FpdCBQcm9taXNlLmFsbChhV2FpdENyZWF0ZURvY3VtZW50cyk7XG5cdFx0XHRjb25zdCBtUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3I6IGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yLFxuXHRcdFx0XHRiaW5kaW5nczogYUJpbmRpbmdzXG5cdFx0XHR9O1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBlaXRoZXIgcmVqZWN0IG9yIHJlc29sdmUgYSBwcm9taXNlIGhlcmUgYW5kIHJldHVybiBpdCBzaW5jZSB0aGlzIHNhdmVcblx0XHRcdC8vIGZ1bmN0aW9uIGlzIG5vdCBvbmx5IGNhbGxlZCB3aGVuIHByZXNzaW5nIHRoZSBzYXZlIGJ1dHRvbiBpbiB0aGUgZm9vdGVyLCBidXQgYWxzb1xuXHRcdFx0Ly8gd2hlbiB0aGUgdXNlciBzZWxlY3RzIGNyZWF0ZSBvciBzYXZlIGluIGEgZGF0YWxvc3MgcG9wdXAuXG5cdFx0XHQvLyBUaGUgbG9naWMgb2YgdGhlIGRhdGFsb3NzIHBvcHVwIG5lZWRzIHRvIGRldGVjdCBpZiB0aGUgc2F2ZSBoYWQgZXJyb3JzIG9yIG5vdCBpbiBvcmRlclxuXHRcdFx0Ly8gdG8gZGVjaWRlIGlmIHRoZSBzdWJzZXF1ZW50IGFjdGlvbiAtIGxpa2UgYSBiYWNrIG5hdmlnYXRpb24gLSBoYXMgdG8gYmUgZXhlY3V0ZWQgb3Igbm90LlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHNhdmVEb2N1bWVudCBpbiBlZGl0RmxvdyByZXR1cm5zIGVycm9ycyB3ZSBuZWVkXG5cdFx0XHRcdC8vIHRvIHNob3cgdGhlIG1lc3NhZ2UgcG9wb3ZlciBoZXJlIGFuZCBlbnN1cmUgdGhhdCB0aGVcblx0XHRcdFx0Ly8gZGF0YWxvc3MgbG9naWMgZG9lcyBub3QgcGVyZm9ybSB0aGUgZm9sbG93IHVwIGZ1bmN0aW9uXG5cdFx0XHRcdC8vIGxpa2UgZS5nLiBhIGJhY2sgbmF2aWdhdGlvbiBoZW5jZSB3ZSByZXR1cm4gYSBwcm9taXNlIGFuZCByZWplY3QgaXRcblx0XHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKGVycm9yKTtcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9Nb2RlbCkpIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfbWFuYWdlQ29sbGFib3JhdGlvbigpIHtcblx0XHRvcGVuTWFuYWdlRGlhbG9nKHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdF9zaG93Q29sbGFib3JhdGlvblVzZXJEZXRhaWxzKGV2ZW50OiBhbnkpIHtcblx0XHRzaG93VXNlckRldGFpbHMoZXZlbnQsIHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdF9jYW5jZWxEb2N1bWVudChvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0bVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24pOyAvL3RvIGdldCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjYW5jZWwgYnV0dG9uIGZyb20gY29tbWFuZCBleGVjdXRpb25cblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHR9XG5cblx0X2FwcGx5RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpKTtcblx0fVxuXG5cdF91cGRhdGVSZWxhdGVkQXBwcygpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0aWYgKENvbW1vblV0aWxzLnJlc29sdmVTdHJpbmd0b0Jvb2xlYW4ob09iamVjdFBhZ2UuZGF0YShcInNob3dSZWxhdGVkQXBwc1wiKSkpIHtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSk7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFQYXJlbnRFbGVtZW50OiBhbnksIGFTdWJzZWN0aW9uOiBhbnksIGFDb250cm9sczogYW55LCBiSXNDaGFydD86IGJvb2xlYW4pIHtcblx0XHRmb3IgKGxldCBlbGVtZW50ID0gMDsgZWxlbWVudCA8IGFQYXJlbnRFbGVtZW50Lmxlbmd0aDsgZWxlbWVudCsrKSB7XG5cdFx0XHRsZXQgb0VsZW1lbnQgPSBhUGFyZW50RWxlbWVudFtlbGVtZW50XS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKGJJc0NoYXJ0KSB7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5tQWdncmVnYXRpb25zICYmIG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBhSXRlbXMgPSBvRWxlbWVudC5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdGFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAob0l0ZW0uaXNBKFwic2FwLmZlLm1hY3Jvcy5jaGFydC5DaGFydEFQSVwiKSkge1xuXHRcdFx0XHRcdFx0XHRvRWxlbWVudCA9IG9JdGVtO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRNYWluQ29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRDb250ZW50KCk7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdGFDb250cm9scy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAuZmUubWFjcm9zLmNoYXJ0LkNoYXJ0QVBJXCIpKSB7XG5cdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9FbGVtZW50LmdldENvbnRlbnQoKTtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50WzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0VsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogYW55W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBhbnkpIHtcblx0XHRcdGFTdWJTZWN0aW9ucyA9IGFTdWJTZWN0aW9ucy5jb25jYXQob1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFTdWJTZWN0aW9ucztcblx0fVxuXG5cdF9nZXRBbGxCbG9ja3MoKSB7XG5cdFx0bGV0IGFCbG9ja3M6IGFueVtdID0gW107XG5cdFx0dGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogYW55KSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhQmxvY2tzO1xuXHR9XG5cblx0X2ZpbmRUYWJsZXMoKSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBhVGFibGVzOiBhbnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9maW5kQ2hhcnRzKCkge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYUNoYXJ0czogYW55W10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhQ2hhcnRzLCB0cnVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFDaGFydHM7XG5cdH1cblxuXHRfY2xvc2VTaWRlQ29udGVudCgpIHtcblx0XHR0aGlzLl9nZXRBbGxCbG9ja3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQmxvY2s6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdGlmIChvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuXHRcdFx0XHRcdG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJ0IENvbnRleHRcblx0ICovXG5cdF9nZXRDaGFydENvbnRleHREYXRhKG9DaGFydENvbnRleHQ6IGFueSwgc0NoYXJ0UGF0aDogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRsZXQgb0NoYXJ0Q29udGV4dERhdGEgPSBbb0NvbnRleHREYXRhXTtcblx0XHRpZiAob0NoYXJ0Q29udGV4dCAmJiBzQ2hhcnRQYXRoKSB7XG5cdFx0XHRpZiAob0NvbnRleHREYXRhW3NDaGFydFBhdGhdKSB7XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhID0gb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRkZWxldGUgb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YS5wdXNoKG9Db250ZXh0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQ2hhcnRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGwgdGhlIHRhYmxlcyB0byB0aGUgcm93IHdpdGggdGhlIHNQYXRoXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlciNfc2Nyb2xsVGFibGVzVG9Sb3dcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSb3dQYXRoICdzUGF0aCBvZiB0aGUgdGFibGUgcm93J1xuXHQgKi9cblxuXHRfc2Nyb2xsVGFibGVzVG9Sb3coc1Jvd1BhdGg6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLl9maW5kVGFibGVzICYmIHRoaXMuX2ZpbmRUYWJsZXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhVGFibGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhhVGFibGVzW2ldLCBzUm93UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtZXJnZSBzZWxlY3RlZCBjb250ZXh0cyBhbmQgZmlsdGVycy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9tZXJnZU11bHRpcGxlQ29udGV4dHNcblx0ICogQHBhcmFtIG9QYWdlQ29udGV4dCBQYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIGFMaW5lQ29udGV4dCBTZWxlY3RlZCBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBDb2xsZWN0aW9uIG5hbWUgb2YgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvbiBWYXJpYW50IE9iamVjdFxuXHQgKi9cblx0X21lcmdlTXVsdGlwbGVDb250ZXh0cyhvUGFnZUNvbnRleHQ6IENvbnRleHQsIGFMaW5lQ29udGV4dDogYW55W10sIHNDaGFydFBhdGg6IHN0cmluZykge1xuXHRcdGxldCBhQXR0cmlidXRlczogYW55W10gPSBbXSxcblx0XHRcdGFQYWdlQXR0cmlidXRlcyA9IFtdLFxuXHRcdFx0b0NvbnRleHQsXG5cdFx0XHRzTWV0YVBhdGhMaW5lOiBzdHJpbmcsXG5cdFx0XHRzUGF0aExpbmU7XG5cblx0XHRjb25zdCBzUGFnZVBhdGggPSBvUGFnZUNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvUGFnZUNvbnRleHQgJiYgb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkgJiYgb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoUGFnZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGFnZVBhdGgpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHQvLyBHZXQgc2luZ2xlIGxpbmUgY29udGV4dCBpZiBuZWNlc3Nhcnlcblx0XHRpZiAoYUxpbmVDb250ZXh0ICYmIGFMaW5lQ29udGV4dC5sZW5ndGgpIHtcblx0XHRcdG9Db250ZXh0ID0gYUxpbmVDb250ZXh0WzBdO1xuXHRcdFx0c1BhdGhMaW5lID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0c01ldGFQYXRoTGluZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aExpbmUpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHRcdGFMaW5lQ29udGV4dC5mb3JFYWNoKChvU2luZ2xlQ29udGV4dDogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChzQ2hhcnRQYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NoYXJ0Q29udGV4dERhdGEgPSB0aGlzLl9nZXRDaGFydENvbnRleHREYXRhKG9TaW5nbGVDb250ZXh0LCBzQ2hhcnRQYXRoKTtcblx0XHRcdFx0XHRpZiAob0NoYXJ0Q29udGV4dERhdGEpIHtcblx0XHRcdFx0XHRcdGFBdHRyaWJ1dGVzID0gb0NoYXJ0Q29udGV4dERhdGEubWFwKGZ1bmN0aW9uIChvU3ViQ2hhcnRDb250ZXh0RGF0YTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TdWJDaGFydENvbnRleHREYXRhLFxuXHRcdFx0XHRcdFx0XHRcdGVudGl0eVNldDogYCR7c01ldGFQYXRoUGFnZX0vJHtzQ2hhcnRQYXRofWBcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU2luZ2xlQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogc01ldGFQYXRoTGluZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0Y29udGV4dERhdGE6IG9QYWdlQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdGVudGl0eVNldDogc01ldGFQYXRoUGFnZVxuXHRcdH0pO1xuXHRcdC8vIEFkZGluZyBQYWdlIENvbnRleHQgdG8gc2VsZWN0aW9uIHZhcmlhbnRcblx0XHRhUGFnZUF0dHJpYnV0ZXMgPSBDb21tb25VdGlscy5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgb01ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSBDb21tb25VdGlscy5yZW1vdmVTZW5zaXRpdmVEYXRhKGFBdHRyaWJ1dGVzLCBvTWV0YU1vZGVsKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb1BhZ2VMZXZlbFNWLFxuXHRcdFx0YXR0cmlidXRlczogYUF0dHJpYnV0ZXNcblx0XHR9O1xuXHR9XG5cblx0X2dldEJhdGNoR3JvdXBzRm9yVmlldygpIHtcblx0XHRjb25zdCBvVmlld0RhdGEgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSxcblx0XHRcdG9Db25maWd1cmF0aW9ucyA9IG9WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbixcblx0XHRcdGFDb25maWd1cmF0aW9ucyA9IG9Db25maWd1cmF0aW9ucyAmJiBPYmplY3Qua2V5cyhvQ29uZmlndXJhdGlvbnMpLFxuXHRcdFx0YUJhdGNoR3JvdXBzID0gW1wiJGF1dG8uSGVyb2VzXCIsIFwiJGF1dG8uRGVjb3JhdGlvblwiLCBcIiRhdXRvLldvcmtlcnNcIl07XG5cblx0XHRpZiAoYUNvbmZpZ3VyYXRpb25zICYmIGFDb25maWd1cmF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9Db25maWd1cmF0aW9uID0gb0NvbmZpZ3VyYXRpb25zW3NLZXldO1xuXHRcdFx0XHRpZiAob0NvbmZpZ3VyYXRpb24ucmVxdWVzdEdyb3VwSWQgPT09IFwiTG9uZ1J1bm5lcnNcIikge1xuXHRcdFx0XHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG8uTG9uZ1J1bm5lcnNcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYUJhdGNoR3JvdXBzO1xuXHR9XG5cblx0Lypcblx0ICogUmVzZXQgQnJlYWRjcnVtYiBsaW5rc1xuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtzYXAubS5CcmVhZGNydW1ic30gW29Tb3VyY2VdIHBhcmVudCBjb250cm9sXG5cdCAqIEBkZXNjcmlwdGlvbiBVc2VkIHdoZW4gY29udGV4dCBvZiB0aGUgb2JqZWN0IHBhZ2UgY2hhbmdlcy5cblx0ICogICAgICAgICAgICAgIFRoaXMgZXZlbnQgY2FsbGJhY2sgaXMgYXR0YWNoZWQgdG8gbW9kZWxDb250ZXh0Q2hhbmdlXG5cdCAqICAgICAgICAgICAgICBldmVudCBvZiB0aGUgQnJlYWRjcnVtYiBjb250cm9sIHRvIGNhdGNoIGNvbnRleHQgY2hhbmdlLlxuXHQgKiAgICAgICAgICAgICAgVGhlbiBlbGVtZW50IGJpbmRpbmcgYW5kIGhyZWZzIGFyZSB1cGRhdGVkIGZvciBlYWNoIGxpbmsuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZXhwZXJpbWVudGFsXG5cdCAqL1xuXHRhc3luYyBfc2V0QnJlYWRjcnVtYkxpbmtzKG9Tb3VyY2U6IEJyZWFkQ3J1bWJzKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRvQXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdGFQcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW10sXG5cdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQ6IGFueVtdID0gW10sXG5cdFx0XHRzTmV3UGF0aCA9IG9Db250ZXh0Py5nZXRQYXRoKCksXG5cdFx0XHRhUGF0aFBhcnRzID0gc05ld1BhdGg/LnNwbGl0KFwiL1wiKSA/PyBbXSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50ICYmIG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IHNQYXRoID0gXCJcIjtcblx0XHR0cnkge1xuXHRcdFx0YVBhdGhQYXJ0cy5zaGlmdCgpO1xuXHRcdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdFx0YVBhdGhQYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChzUGF0aFBhcnQ6IGFueSkge1xuXHRcdFx0XHRzUGF0aCArPSBgLyR7c1BhdGhQYXJ0fWA7XG5cdFx0XHRcdGNvbnN0IG9Sb290Vmlld0NvbnRyb2xsZXIgPSBvQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIFJvb3RDb250YWluZXJCYXNlQ29udHJvbGxlcjtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlclBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRcdFx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGFyYW1ldGVyUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0XHRcdGlmIChiUmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZC5wdXNoKDEpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQucHVzaCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhUHJvbWlzZXMucHVzaChvUm9vdFZpZXdDb250cm9sbGVyLmdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoKSk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mb3M6IGFueVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0XHRcdGxldCBpZHgsIGhpZXJhcmNoeVBvc2l0aW9uLCBvTGluaztcblx0XHRcdGZvciAoY29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvIG9mIHRpdGxlSGllcmFyY2h5SW5mb3MpIHtcblx0XHRcdFx0aGllcmFyY2h5UG9zaXRpb24gPSB0aXRsZUhpZXJhcmNoeUluZm9zLmluZGV4T2YodGl0bGVIaWVyYXJjaHlJbmZvKTtcblx0XHRcdFx0aWR4ID0gaGllcmFyY2h5UG9zaXRpb24gLSBhU2tpcFBhcmFtZXRlcml6ZWRbaGllcmFyY2h5UG9zaXRpb25dO1xuXHRcdFx0XHRvTGluayA9IG9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdID8gb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0gOiBuZXcgTGluaygpO1xuXHRcdFx0XHQvL3NDdXJyZW50RW50aXR5IGlzIGEgZmFsbGJhY2sgdmFsdWUgaW4gY2FzZSBvZiBlbXB0eSB0aXRsZVxuXHRcdFx0XHRvTGluay5zZXRUZXh0KHRpdGxlSGllcmFyY2h5SW5mby5zdWJ0aXRsZSB8fCB0aXRsZUhpZXJhcmNoeUluZm8udGl0bGUpO1xuXHRcdFx0XHQvL1dlIGFwcGx5IGFuIGFkZGl0aW9uYWwgZW5jb2RlVVJJIGluIGNhc2Ugb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIChpZSBcIi9cIikgdXNlZCBpbiB0aGUgdXJsIHRocm91Z2ggdGhlIHNlbWFudGljIGtleXNcblx0XHRcdFx0b0xpbmsuc2V0SHJlZihlbmNvZGVVUkkodGl0bGVIaWVyYXJjaHlJbmZvLmludGVudCkpO1xuXHRcdFx0XHRpZiAoIW9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdKSB7XG5cdFx0XHRcdFx0b1NvdXJjZS5hZGRMaW5rKG9MaW5rKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGJyZWFkY3J1bWIgbGlua3M6XCIgKyBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0X2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9EYXRhUG9pbnRzID0gQ29tbW9uVXRpbHMuZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0b1ZpZXcuZ2V0Vmlld0RhdGEoKSxcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKVxuXHRcdCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRjb25zdCBvUGFnZUNvbnRleHQgPSBvVmlldyAmJiAob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0hlYWRlckRQTGlua1Zpc2libGVcIiwge30pO1xuXHRcdGlmIChvUGFnZUNvbnRleHQpIHtcblx0XHRcdG9QYWdlQ29udGV4dFxuXHRcdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogYW55KSB7XG5cdFx0XHRcdFx0Zm5HZXRMaW5rcyhvRGF0YVBvaW50cywgb0RhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvRXJyb3Jcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbk9uRXJyb3Iob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihvRXJyb3IpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZuU2V0TGlua0VuYWJsZW1lbnQoaWQ6IHN0cmluZywgYVN1cHBvcnRlZExpbmtzOiBhbnkpIHtcblx0XHRcdGNvbnN0IHNMaW5rSWQgPSBpZDtcblx0XHRcdC8vIHByb2Nlc3MgdmlhYmxlIGxpbmtzIGZyb20gZ2V0TGlua3MgZm9yIGFsbCBkYXRhcG9pbnRzIGhhdmluZyBvdXRib3VuZFxuXHRcdFx0aWYgKGFTdXBwb3J0ZWRMaW5rcyAmJiBhU3VwcG9ydGVkTGlua3MubGVuZ3RoID09PSAxICYmIGFTdXBwb3J0ZWRMaW5rc1swXS5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtzTGlua0lkfWAsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvU3ViRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKG9TdWJEYXRhUG9pbnRzOiBhbnksIG9QYWdlRGF0YTogYW55KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvU3ViRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb1N1YkRhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IG9MaW5rID0gb1ZpZXcuYnlJZChzSWQpO1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGRhdGEgcG9pbnRzIGNvbmZpZ3VyZWQgaW4gYXBwIGRlc2NyaXB0b3IgYnV0IG5vdCBhbm5vdGF0ZWQgaW4gdGhlIGhlYWRlclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9MaW5rQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IG9MaW5rRGF0YTogYW55ID0gb0xpbmtDb250ZXh0ICYmIG9MaW5rQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IG9NaXhlZENvbnRleHQ6IGFueSA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSk7XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFwcGVkUHJvcGVydHkgPSBvTWFwcGluZ1tcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IGFueSA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9OZXdNYXBwaW5nW3NNYXBwZWRQcm9wZXJ0eV0gPSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHRcdG9NaXhlZENvbnRleHQgPSBtZXJnZSh7fSwgb01peGVkQ29udGV4dCwgb05ld01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHQvKipcblx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIHBhZ2UgY29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBvVmlld1xuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmNvbnRleHRzXSBNYW5kYXRvcnkgZm9yIGEgYm91bmQgYWN0aW9uLCBlaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1vZGVsXSBNYW5kYXRvcnkgZm9yIGFuIHVuYm91bmQgYWN0aW9uOyBhbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uVmlzaWJsZV0gVGhlIHZpc2liaWxpdHkgb2Ygc2VtYXRpYyBwb3NpdGl2ZSBhY3Rpb25cblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZF0gVGhlIGVuYWJsZW1lbnQgb2Ygc2VtYW50aWMgcG9zaXRpdmUgYWN0aW9uXG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZV0gVGhlIEVkaXQgYnV0dG9uIHZpc2liaWxpdHlcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkXSBUaGUgZW5hYmxlbWVudCBvZiBFZGl0IGJ1dHRvblxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uUHJpbWFyeUFjdGlvbihcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9WaWV3OiBWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBhcmFtZXRlcnM6IHVua25vd24sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaVZpZXdMZXZlbCA9IChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbCxcblx0XHRcdFx0b09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLmhhbmRsZXJzLm9uQ2FsbEFjdGlvbihvVmlldywgc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZSAmJiBpVmlld0xldmVsID09PSAxKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLl9lZGl0RG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlWaWV3TGV2ZWwgPT09IDEgJiYgb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9zYXZlRG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIGlmIChvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2FwcGx5RG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRvblRhYmxlQ29udGV4dENoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRsZXQgb1RhYmxlOiBhbnk7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVzKCkuc29tZShmdW5jdGlvbiAoX29UYWJsZTogYW55KSB7XG5cdFx0XHRcdGlmIChfb1RhYmxlLmdldFJvd0JpbmRpbmcoKSA9PT0gb1NvdXJjZSkge1xuXHRcdFx0XHRcdG9UYWJsZSA9IF9vVGFibGU7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IG9DdXJyZW50QWN0aW9uUHJvbWlzZSA9IHRoaXMuX2VkaXRGbG93LmdldEN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRpZiAob0N1cnJlbnRBY3Rpb25Qcm9taXNlKSB7XG5cdFx0XHRcdGxldCBhVGFibGVDb250ZXh0czogYW55O1xuXHRcdFx0XHRpZiAob1RhYmxlLmdldFR5cGUoKS5nZXRNZXRhZGF0YSgpLmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSkge1xuXHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzID0gb1NvdXJjZS5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9pZiBjb250ZXh0cyBhcmUgbm90IGZ1bGx5IGxvYWRlZCB0aGUgZ2V0Y29udGV4dHMgZnVuY3Rpb24gYWJvdmUgd2lsbCB0cmlnZ2VyIGEgbmV3IGNoYW5nZSBldmVudCBjYWxsXG5cdFx0XHRcdGlmICghYVRhYmxlQ29udGV4dHNbMF0pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0b0N1cnJlbnRBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdFx0LnRoZW4oKG9BY3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIW9BY3Rpb25SZXNwb25zZSB8fCBvQWN0aW9uUmVzcG9uc2UuY29udHJvbElkICE9PSBvVGFibGUuc0lkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IG9BY3Rpb25EYXRhID0gb0FjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUtleXMgPSBvQWN0aW9uUmVzcG9uc2Uua2V5cztcblx0XHRcdFx0XHRcdGxldCBpTmV3SXRlbXAgPSAtMTtcblx0XHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9UYWJsZUNvbnRleHQ6IGFueSwgaTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9UYWJsZURhdGEgPSBvVGFibGVDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBiQ29tcGFyZSA9IGFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChzS2V5OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1RhYmxlRGF0YVtzS2V5XSA9PT0gb0FjdGlvbkRhdGFbc0tleV07XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRpZiAoYkNvbXBhcmUpIHtcblx0XHRcdFx0XHRcdFx0XHRpTmV3SXRlbXAgPSBpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiQ29tcGFyZTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKGlOZXdJdGVtcCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYURpYWxvZ3MgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0RpYWxvZyA9XG5cdFx0XHRcdFx0XHRcdFx0YURpYWxvZ3MubGVuZ3RoID4gMCA/IGFEaWFsb2dzLmZpbmQoKGRpYWxvZykgPT4gZGlhbG9nLmRhdGEoXCJGdWxsU2NyZWVuRGlhbG9nXCIpICE9PSB0cnVlKSA6IG51bGw7XG5cdFx0XHRcdFx0XHRcdGlmIChvRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYnkgZGVzaWduLCBhIHNhcC5tLmRpYWxvZyBzZXQgdGhlIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBmb2N1c2VkIGVsZW1lbnQgd2hlbiBjbG9zaW5nLlxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB3YWl0IGZvciB0aGUgZGlhbG9nIHRvIGJlIGNsb3NlIGJlZm9yZSB0byBmb2N1cyBhbm90aGVyIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmF0dGFjaEV2ZW50T25jZShcImFmdGVyQ2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1RhYmxlLmZvY3VzUm93KGlOZXdJdGVtcCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0b1RhYmxlLmZvY3VzUm93KGlOZXdJdGVtcCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhpcy5fZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHNjcm9sbGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBJdGVtOiAke2Vycn1gKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIGZpcmUgTW9kZWxDb250ZXh0Q2hhbmdlIG9uIHRoZSBtZXNzYWdlIGJ1dHRvbiB3aGVuZXZlciB0aGUgdGFibGUgY29udGV4dCBjaGFuZ2VzXG5cdFx0XHR0aGlzLm1lc3NhZ2VCdXR0b24uZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBJbnZva2VzIGFuIGFjdGlvbiAtIGJvdW5kL3VuYm91bmQgYW5kIHNldHMgdGhlIHBhZ2UgZGlydHkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb1ZpZXdcblx0XHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jb250ZXh0c10gTWFuZGF0b3J5IGZvciBhIGJvdW5kIGFjdGlvbiwgZWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5tb2RlbF0gTWFuZGF0b3J5IGZvciBhbiB1bmJvdW5kIGFjdGlvbjsgYW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcblx0XHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIHByb21pc2Vcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNhbGxBY3Rpb24ob1ZpZXc6IGFueSwgc0FjdGlvbk5hbWU6IHN0cmluZywgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuZWRpdEZsb3dcblx0XHRcdFx0Lmludm9rZUFjdGlvbihzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdC50aGVuKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlciwgdW5kZWZpbmVkKSlcblx0XHRcdFx0LmNhdGNoKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlcikpO1xuXHRcdH0sXG5cdFx0b25EYXRhUG9pbnRUaXRsZVByZXNzZWQob0NvbnRyb2xsZXI6IGFueSwgb1NvdXJjZTogYW55LCBvTWFuaWZlc3RPdXRib3VuZDogYW55LCBzQ29udHJvbENvbmZpZzogYW55LCBzQ29sbGVjdGlvblBhdGg6IGFueSkge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFOYXZpZ2F0aW9uRGF0YSA9IG9Db250cm9sbGVyLl9nZXRDaGFydENvbnRleHREYXRhKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQsIHNDb2xsZWN0aW9uUGF0aCk7XG5cdFx0XHRsZXQgYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzO1xuXG5cdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBhTmF2aWdhdGlvbkRhdGEubWFwKGZ1bmN0aW9uIChvTmF2aWdhdGlvbkRhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZywgb0NvbnRleHQ6IGFueSwgc0NyZWF0ZVBhdGg6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblxuXHRcdG9uTmF2aWdhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHQvL3dpbGwgYmUgY2FsbGVkIGFsd2F5cyB3aGVuIHdlIGNsaWNrIG9uIGEgc2VjdGlvbiB0YWJcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdHRoaXMuYlNlY3Rpb25OYXZpZ2F0ZWQgPSB0cnVlO1xuXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgJiZcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIiAmJlxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiKSA9PT0gZmFsc2Vcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUoW29TdWJTZWN0aW9uXSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgNTAwKTtcblx0XHR9LFxuXHRcdG5hdmlnYXRlVG9TdWJTZWN0aW9uOiBmdW5jdGlvbiAob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCB2RGV0YWlsQ29uZmlnOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9EZXRhaWxDb25maWcgPSB0eXBlb2YgdkRldGFpbENvbmZpZyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodkRldGFpbENvbmZpZykgOiB2RGV0YWlsQ29uZmlnO1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdFx0XHRsZXQgb1NlY3Rpb247XG5cdFx0XHRsZXQgb1N1YlNlY3Rpb247XG5cdFx0XHRpZiAob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIHtcblx0XHRcdFx0b1NlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVNlY3Rpb247XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gKFxuXHRcdFx0XHRcdG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkXG5cdFx0XHRcdFx0XHQ/IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKVxuXHRcdFx0XHRcdFx0OiBvU2VjdGlvbiAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKClbMF1cblx0XHRcdFx0KSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSBpZiAob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIHtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHRcdG9TZWN0aW9uID0gb1N1YlNlY3Rpb24gJiYgKG9TdWJTZWN0aW9uLmdldFBhcmVudCgpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICghb1NlY3Rpb24gfHwgIW9TdWJTZWN0aW9uIHx8ICFvU2VjdGlvbi5nZXRWaXNpYmxlKCkgfHwgIW9TdWJTZWN0aW9uLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHQoKG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc1RpdGxlID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XHRcdFwiQ19ST1VUSU5HX05BVklHQVRJT05fRElTQUJMRURfVElUTEVcIixcblx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0XHQob0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXRcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zY3JvbGxUb1NlY3Rpb24ob1N1YlNlY3Rpb24uZ2V0SWQoKSk7XG5cdFx0XHRcdC8vIHRyaWdnZXIgaWFwcCBzdGF0ZSBjaGFuZ2Vcblx0XHRcdFx0b09iamVjdFBhZ2UuZmlyZU5hdmlnYXRlKHtcblx0XHRcdFx0XHRzZWN0aW9uOiBvU2VjdGlvbixcblx0XHRcdFx0XHRzdWJTZWN0aW9uOiBvU3ViU2VjdGlvblxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkOiBmdW5jdGlvbiAob0V2ZW50OiBhbnkpIHtcblx0XHRcdENoYXJ0UnVudGltZS5mblVwZGF0ZUNoYXJ0KG9FdmVudCk7XG5cdFx0fSxcblx0XHRvblN0YXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fVxu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LENBQUNLLGNBQWMsQ0FBQ0YsYUFBYSxDQUFDLEVBQUU7a0JBQ2hELElBQU1HLFdBQWdCLEdBQUcsQ0FBQyxDQUFDO2tCQUMzQkEsV0FBVyxDQUFDRixlQUFlLENBQUMsR0FBR0osYUFBYSxDQUFDRyxhQUFhLENBQUM7a0JBQzNESCxhQUFhLEdBQUdDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRUQsYUFBYSxFQUFFTSxXQUFXLENBQUM7a0JBQ3JELE9BQU9OLGFBQWEsQ0FBQ0csYUFBYSxDQUFDO2dCQUNwQztjQUNEO1lBQ0Q7VUFDRDtVQUVBLElBQUlILGFBQWEsRUFBRTtZQUNsQixLQUFLLElBQU03Z0IsSUFBSSxJQUFJNmdCLGFBQWEsRUFBRTtjQUNqQyxJQUFJN2dCLElBQUksQ0FBQ29XLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUlwVyxJQUFJLENBQUNvVyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BFelQsT0FBTyxDQUFDM0MsSUFBSSxDQUFDLEdBQUc2Z0IsYUFBYSxDQUFDN2dCLElBQUksQ0FBQztjQUNwQztZQUNEO1VBQ0Q7VUFDQTtVQUNBK2YsY0FBYyxDQUNacUIscUJBQXFCLENBQUMsQ0FDdEI7WUFDQ2pMLE1BQU0sRUFBRTtjQUNQcFQsY0FBYyxFQUFFMmQsVUFBVSxDQUFDM2QsY0FBYztjQUN6Q0MsTUFBTSxFQUFFMGQsVUFBVSxDQUFDMWQ7WUFDcEIsQ0FBQztZQUNEcWUsTUFBTSxFQUFFMWU7VUFDVCxDQUFDLENBQ0QsQ0FBQyxDQUNEekksSUFBSSxDQUFDLFVBQUNvbkIsTUFBTSxFQUFLO1lBQ2pCLE9BQU9uQixtQkFBbUIsQ0FBQ2hoQixHQUFHLEVBQUVtaUIsTUFBTSxDQUFDO1VBQ3hDLENBQUMsQ0FBQyxDQUNEM2dCLEtBQUssQ0FBQ3VmLFNBQVMsQ0FBQztRQUFDO1FBbERwQixLQUFLLElBQU0vZ0IsR0FBRyxJQUFJcWhCLGNBQWMsRUFBRTtVQUFBLGlCQUF2QnJoQixHQUFHO1VBQUEseUJBTVo7UUE2Q0Y7TUFDRDtJQUNELENBQUM7SUFBQTtFQUFBLEVBM3lDaUMySixjQUFjO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0VBQUEsT0EyaURsQ3pPLG9CQUFvQjtBQUFBIn0=
1617
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiRWRpdEZsb3ciLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJJbnRlcm5hbEVkaXRGbG93IiwiRWRpdEZsb3dPdmVycmlkZXMiLCJJbnRlcm5hbFJvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJNYXNzRWRpdCIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJoYW5kbGVycyIsIm9uUHJpbWFyeUFjdGlvbiIsIm9Db250cm9sbGVyIiwib1ZpZXciLCJvQ29udGV4dCIsInNBY3Rpb25OYW1lIiwibVBhcmFtZXRlcnMiLCJtQ29uZGl0aW9ucyIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsIm9PYmplY3RQYWdlIiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwicG9zaXRpdmVBY3Rpb25WaXNpYmxlIiwicG9zaXRpdmVBY3Rpb25FbmFibGVkIiwib25DYWxsQWN0aW9uIiwiZWRpdEFjdGlvblZpc2libGUiLCJlZGl0QWN0aW9uRW5hYmxlZCIsIl9lZGl0RG9jdW1lbnQiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwiX3NhdmVEb2N1bWVudCIsIl9hcHBseURvY3VtZW50Iiwib25UYWJsZUNvbnRleHRDaGFuZ2UiLCJvRXZlbnQiLCJvU291cmNlIiwiZ2V0U291cmNlIiwib1RhYmxlIiwiX2ZpbmRUYWJsZXMiLCJzb21lIiwiX29UYWJsZSIsImdldFJvd0JpbmRpbmciLCJvQ3VycmVudEFjdGlvblByb21pc2UiLCJfZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsImFUYWJsZUNvbnRleHRzIiwiZ2V0VHlwZSIsImdldE1ldGFkYXRhIiwiaXNBIiwiZ2V0Q29udGV4dHMiLCJnZXRDdXJyZW50Q29udGV4dHMiLCJvQWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJzSWQiLCJvQWN0aW9uRGF0YSIsIm9EYXRhIiwiYUtleXMiLCJrZXlzIiwiaU5ld0l0ZW1wIiwiZmluZCIsIm9UYWJsZUNvbnRleHQiLCJpIiwib1RhYmxlRGF0YSIsImdldE9iamVjdCIsImJDb21wYXJlIiwiZXZlcnkiLCJzS2V5IiwiYURpYWxvZ3MiLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsIm9EaWFsb2ciLCJsZW5ndGgiLCJkaWFsb2ciLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJtZXNzYWdlQnV0dG9uIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsImVkaXRGbG93IiwiaW52b2tlQWN0aW9uIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsIkNvbW1vblV0aWxzIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZWN0aW9uTGF5b3V0Iiwib1N1YlNlY3Rpb24iLCJnZXRQYXJhbWV0ZXIiLCJfdXBkYXRlRm9jdXNJbkVkaXRNb2RlIiwib25WYXJpYW50U2VsZWN0ZWQiLCJvblZhcmlhbnRTYXZlZCIsInNldFRpbWVvdXQiLCJuYXZpZ2F0ZVRvU3ViU2VjdGlvbiIsInZEZXRhaWxDb25maWciLCJvRGV0YWlsQ29uZmlnIiwiYnlJZCIsIm9TZWN0aW9uIiwic2VjdGlvbklkIiwic3ViU2VjdGlvbklkIiwiZ2V0U3ViU2VjdGlvbnMiLCJnZXRQYXJlbnQiLCJnZXRWaXNpYmxlIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJvUmVzb3VyY2VCdW5kbGUiLCJzVGl0bGUiLCJnZXRUcmFuc2xhdGVkVGV4dCIsImVudGl0eVNldCIsIk1lc3NhZ2VCb3giLCJzY3JvbGxUb1NlY3Rpb24iLCJnZXRJZCIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJDaGFydFJ1bnRpbWUiLCJmblVwZGF0ZUNoYXJ0Iiwib25TdGF0ZUNoYW5nZSIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsInNldFByb3BlcnR5IiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsInVzZU5ld0xhenlMb2FkaW5nIiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0Iiwib0l0ZW1CaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwiX2ZuU2hvd09QTWVzc2FnZSIsIm9uRXhpdCIsImRlc3Ryb3kiLCJvTWVzc2FnZVBvcG92ZXIiLCJpc09wZW4iLCJjbG9zZSIsImlzS2VlcEFsaXZlIiwic2V0S2VlcEFsaXZlIiwiaXNDb25uZWN0ZWQiLCJkaXNjb25uZWN0IiwidmlldyIsIm1lc3NhZ2VzIiwiZ2V0SXRlbXMiLCJpdGVtIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJzaG93TWVzc2FnZXMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiY2hlY2tTZWN0aW9uc0ZvckdyaWRUYWJsZSIsInN1YlNlY3Rpb25zIiwiY2hhbmdlQ2xhc3NGb3JUYWJsZXMiLCJldmVudCIsImxhc3RWaXNpYmxlU3ViU2VjdGlvbiIsImJsb2NrcyIsImdldEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJzZWFyY2hUYWJsZUluQmxvY2siLCJhZGRTdHlsZUNsYXNzIiwiZGV0YWNoRXZlbnQiLCJzdWJTZWN0aW9uSW5kZXgiLCJibG9jayIsImNvbnRyb2wiLCJjb250ZW50IiwidGFibGVBUEkiLCJvbkJlZm9yZVJlbmRlcmluZyIsIlBhZ2VDb250cm9sbGVyIiwicHJvdG90eXBlIiwiYXBwbHkiLCJvVmlld0RhdGEiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiQ29tbW9uSGVscGVyIiwic2V0TWV0YU1vZGVsIiwiZ2V0QXBwQ29tcG9uZW50Iiwib25BZnRlclJlbmRlcmluZyIsInJlc3BvbnNlIiwib0Vycm9yIiwiZ2V0VXNlSWNvblRhYkJhciIsInNlY3Rpb25zIiwiZ2V0U2VjdGlvbnMiLCJfZ2V0QWxsU3ViU2VjdGlvbnMiLCJfb25CZWZvcmVCaW5kaW5nIiwiYVRhYmxlcyIsIm9JbnRlcm5hbE1vZGVsIiwiYUJhdGNoR3JvdXBzIiwib0Zhc3RDcmVhdGlvblJvdyIsInB1c2giLCJiRHJhZnROYXZpZ2F0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwiZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uIiwiaXNGaXJzdFJlbmRlcmluZyIsImJQZXJzaXN0T1BTY3JvbGwiLCJzZXRTZWxlY3RlZFNlY3Rpb24iLCJvRGVsZWdhdGVPbkJlZm9yZSIsImFkZEV2ZW50RGVsZWdhdGUiLCJwYWdlUmVhZHkiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwib0JpbmRpbmciLCJsaXN0QmluZGluZyIsIm9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCIsIm9CaW5kaW5nVG9Vc2UiLCJwYWdpbmF0b3IiLCJpbml0aWFsaXplIiwic0JpbmRpbmdQYXRoIiwidGVzdCIsInNMaXN0QmluZGluZ1BhdGgiLCJyZXBsYWNlIiwiT0RhdGFMaXN0QmluZGluZyIsIm9Nb2RlbCIsIl9zZXRMaXN0QmluZGluZ0FzeW5jIiwiYVNlY3Rpb25zIiwiYlVzZUljb25UYWJCYXIiLCJpU2tpcCIsImJJc0luRWRpdE1vZGUiLCJiRWRpdGFibGVIZWFkZXIiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJpU2VjdGlvbiIsImFTdWJTZWN0aW9ucyIsImlTdWJTZWN0aW9uIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsInBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJzaG93UGxhY2Vob2xkZXIiLCJvTmF2Q29udGFpbmVyIiwib0NvbnRhaW5lciIsIl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50IiwiYUFjdGlvbnMiLCJnZXRIZWFkZXJUaXRsZSIsImdldEFjdGlvbnMiLCJvQWN0aW9uIiwiZ2V0RW5hYmxlZCIsIl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbiIsImFCbG9ja3MiLCJhRm9ybUNvbnRhaW5lcnMiLCJnZXRGb3JtQ29udGFpbmVycyIsImdldENvbnRlbnQiLCJmb3JtQ29udGFpbmVyIiwiYUZvcm1FbGVtZW50cyIsImdldEZvcm1FbGVtZW50cyIsImZvcm1FbGVtZW50IiwiYUZpZWxkcyIsImdldEZpZWxkcyIsImdldFJlcXVpcmVkIiwiZ2V0VmFsdWUiLCJkZWJ1ZyIsIm9NYW5kYXRvcnlGaWVsZCIsIm9GaWVsZFRvRm9jdXMiLCJnZXRDb250ZW50RWRpdCIsIl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJmb2N1cyIsIl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdCIsIm1lc3NhZ2VIYW5kbGVyIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0IiwiaGlzdG9yeSIsImJhY2siLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiY3VycmVudFVSTCIsImRvY3VtZW50IiwiVVJMIiwiX3JvdXRpbmciLCJuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJCYWNrTmF2aWdhdGlvbiIsIl9vbkFmdGVyQmluZGluZyIsIm9CaW5kaW5nQ29udGV4dCIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsIm9MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25Db250ZXh0Iiwib0ZpbmFsVUlTdGF0ZSIsImJpbmRMaXN0IiwiZ2V0Q29udGV4dCIsIiQkdXBkYXRlR3JvdXBJZCIsIiQkZ3JvdXBJZCIsInJlZnJlc2hJbnRlcm5hbCIsImNyZWF0ZSIsImNyZWF0ZWQiLCJ0cmFjZSIsIl9zaWRlRWZmZWN0cyIsImNsZWFyUHJvcGVydGllc1N0YXR1cyIsImFJQk5BY3Rpb25zIiwiZm9yRWFjaCIsImdldElCTkFjdGlvbnMiLCJvVGFibGVSb3dCaW5kaW5nIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJyZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJwYXJzZUN1c3RvbURhdGEiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDdXN0b21EYXRhIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsImdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiLCJvT2JqZWN0UGFnZVRpdGxlIiwiYUlCTkhlYWRlckFjdGlvbnMiLCJjb25jYXQiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsImhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyIsImZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyIsImZuSGFuZGxlQ2hhbmdlIiwiZGV0YWNoQ2hhbmdlIiwiY29tcHV0ZUVkaXRNb2RlIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJjb25uZWN0Iiwib0NhY2hlIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiZm5VcGRhdGVSZWxhdGVkQXBwcyIsImRldGFjaERhdGFSZWNlaXZlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsImN1cnJlbnRCaW5kaW5nIiwiaGFuZGxlUGF0Y2hTZW50IiwiVGFibGVVdGlscyIsIndoZW5Cb3VuZCIsIl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzIiwib25QYWdlUmVhZHkiLCJzZXRGb2N1cyIsImlzSW5EaXNwbGF5TW9kZSIsIm9TZWxlY3RlZFNlY3Rpb24iLCJDb3JlIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiYklzU3RpY2t5TW9kZSIsIm9BcHBDb21wb25lbnQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwiZm9yY2VGb2N1cyIsIkVycm9yIiwiX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJnZXRLZXkiLCJ0aXRsZSIsInN1YnRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9leGVjdXRlSGVhZGVyU2hvcnRjdXQiLCJzQnV0dG9uSWQiLCJvQnV0dG9uIiwib0VsZW1lbnQiLCJmaXJlQnV0dG9uUHJlc3MiLCJfZXhlY3V0ZUZvb3RlclNob3J0Y3V0IiwiZ2V0Rm9vdGVyIiwiZ2V0TmFtZSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwidmFsaWRhdGlvbiIsInR5cGUiLCJ0YXJnZXQiLCJpbmRleE9mIiwib1JldCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvTWVzc2FnZUJ1dHRvbiIsImdldExlbmd0aCIsInNldFZpc2libGUiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwibG9jayIsImVkaXREb2N1bWVudCIsImZpbmFsbHkiLCJ1bmxvY2siLCJnZXREcmFmdFJvb3RDb250ZXh0IiwiY29udGV4dCIsImRyYWZ0Um9vdENvbnRleHRQYXRoIiwiZ2V0RHJhZnRSb290UGF0aCIsInNpbXBsZURyYWZ0Um9vdENvbnRleHQiLCJleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJwYWdlVmlldyIsImludGVybmFsTW9kZWwiLCJtb2RlbCIsIm1ldGFNb2RlbCIsInNFbnRpdHlQYXRoIiwibURhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0IiwicmVxdWVzdFByb3BlcnR5IiwidGFyZ2V0RW50aXR5VHlwZSIsIm5hbWUiLCJfdmFsaWRhdGVEb2N1bWVudCIsImdldEN1cnJlbnRGb2N1c2VkQ29udHJvbElkIiwiaXNUcmFuc2llbnQiLCJzeW5jVGFzayIsImFwcENvbXBvbmVudCIsInNpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQiLCJnbG9iYWxTaWRlRWZmZWN0cyIsImdldEdsb2JhbE9EYXRhRW50aXR5U2lkZUVmZmVjdHMiLCJQcm9taXNlIiwiYWxsIiwic2lkZUVmZmVjdHMiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJkcmFmdFJvb3RDb250ZXh0IiwiZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbiIsIm9QYXJhbWV0ZXJzIiwiYVdhaXRDcmVhdGVEb2N1bWVudHMiLCJiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciIsImNyZWF0aW9uTW9kZSIsImNyZWF0aW9uUm93IiwiY3JlYXRlQXRFbmQiLCJiQ3JlYXRlRG9jdW1lbnQiLCJiU2tpcFNpZGVFZmZlY3RzIiwiY3JlYXRlRG9jdW1lbnQiLCJhQmluZGluZ3MiLCJiaW5kaW5ncyIsImVudGl0eVNldE5hbWUiLCJzYXZlRG9jdW1lbnQiLCJpc0xvY2tlZCIsIl9tYW5hZ2VDb2xsYWJvcmF0aW9uIiwib3Blbk1hbmFnZURpYWxvZyIsIl9zaG93Q29sbGFib3JhdGlvblVzZXJEZXRhaWxzIiwic2hvd1VzZXJEZXRhaWxzIiwiX2NhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwiY2FuY2VsRG9jdW1lbnQiLCJhcHBseURvY3VtZW50IiwicmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsImVsZW1lbnQiLCJtQWdncmVnYXRpb25zIiwiZ2V0QWdncmVnYXRpb24iLCJhSXRlbXMiLCJvSXRlbSIsImdldE1haW5Db250ZW50IiwiX2dldEFsbEJsb2NrcyIsIl9maW5kQ2hhcnRzIiwiYUNoYXJ0cyIsIm9CbG9jayIsIm9Db250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50Iiwib0NoYXJ0Q29udGV4dCIsInNDaGFydFBhdGgiLCJvQ29udGV4dERhdGEiLCJvQ2hhcnRDb250ZXh0RGF0YSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfbWVyZ2VNdWx0aXBsZUNvbnRleHRzIiwib1BhZ2VDb250ZXh0IiwiYUxpbmVDb250ZXh0IiwiYUF0dHJpYnV0ZXMiLCJhUGFnZUF0dHJpYnV0ZXMiLCJzTWV0YVBhdGhMaW5lIiwic1BhdGhMaW5lIiwic1BhZ2VQYXRoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aFBhZ2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsIm9Db25maWd1cmF0aW9uIiwicmVxdWVzdEdyb3VwSWQiLCJfc2V0QnJlYWRjcnVtYkxpbmtzIiwiYVByb21pc2VzIiwiYVNraXBQYXJhbWV0ZXJpemVkIiwic05ld1BhdGgiLCJhUGF0aFBhcnRzIiwic3BsaXQiLCJzUGF0aCIsInNoaWZ0Iiwic3BsaWNlIiwic1BhdGhQYXJ0Iiwib1Jvb3RWaWV3Q29udHJvbGxlciIsInNQYXJhbWV0ZXJQYXRoIiwiYlJlc3VsdENvbnRleHQiLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInRpdGxlSGllcmFyY2h5SW5mb3MiLCJpZHgiLCJoaWVyYXJjaHlQb3NpdGlvbiIsIm9MaW5rIiwidGl0bGVIaWVyYXJjaHlJbmZvIiwiZ2V0TGlua3MiLCJMaW5rIiwic2V0VGV4dCIsInNldEhyZWYiLCJlbmNvZGVVUkkiLCJhZGRMaW5rIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmtDb250ZXh0Iiwib0xpbmtEYXRhIiwib01peGVkQ29udGV4dCIsIm1lcmdlIiwib01hcHBpbmciLCJzTWFpblByb3BlcnR5Iiwic01hcHBlZFByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCJvTmV3TWFwcGluZyIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsInBhcmFtcyIsImFMaW5rcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IHsgY29ubmVjdCwgZGlzY29ubmVjdCwgaXNDb25uZWN0ZWQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9BY3Rpdml0eVN5bmNcIjtcbmltcG9ydCB7IG9wZW5NYW5hZ2VEaWFsb2csIHNob3dVc2VyRGV0YWlscyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL01hbmFnZVwiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxFZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWFzc0VkaXQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01hc3NFZGl0XCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnZVJlYWR5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdlUmVhZHlcIjtcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2luYXRvclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBSb290Q29udGFpbmVyQmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L1Jvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBSb290Vmlld0Jhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9Sb290Vmlld0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ2hhcnRSdW50aW1lIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0UnVudGltZVwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBFZGl0Rmxvd092ZXJyaWRlcyBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9Sb290Q29udGFpbmVyL292ZXJyaWRlcy9FZGl0Rmxvd1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IEluc3RhbmNlTWFuYWdlciBmcm9tIFwic2FwL20vSW5zdGFuY2VNYW5hZ2VyXCI7XG5pbXBvcnQgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQnJlYWRDcnVtYnMgZnJvbSBcInNhcC91eGFwL0JyZWFkQ3J1bWJzXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBPRGF0YUNvbnRleHRCaW5kaW5nRXgsIFY0Q29udGV4dCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogYW55O1xuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cdEB1c2luZ0V4dGVuc2lvbihFZGl0Rmxvdylcblx0ZWRpdEZsb3chOiBFZGl0Rmxvdztcblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsRWRpdEZsb3cub3ZlcnJpZGUoRWRpdEZsb3dPdmVycmlkZXMpKVxuXHRfZWRpdEZsb3chOiBJbnRlcm5hbEVkaXRGbG93O1xuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXHRAdXNpbmdFeHRlbnNpb24oTWFzc0VkaXQpXG5cdG1hc3NFZGl0ITogTWFzc0VkaXQ7XG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXHRwcml2YXRlIG9SZXNvdXJjZUJ1bmRsZT86IFJlc291cmNlQnVuZGxlO1xuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXHRwcml2YXRlIGN1cnJlbnRCaW5kaW5nPzogQmluZGluZztcblx0cHJpdmF0ZSBtZXNzYWdlQnV0dG9uOiBhbnk7XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSShzSWQ/OiBzdHJpbmcpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmIChzSWQpIHtcblx0XHRcdC8vIHRvIGFsbG93IGxvY2FsIElEIHVzYWdlIGZvciBjdXN0b20gcGFnZXMgd2UnbGwgY3JlYXRlL3JldHVybiBvd24gaW5zdGFuY2VzIGZvciBjdXN0b20gc2VjdGlvbnNcblx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzID0gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgfHwge307XG5cblx0XHRcdGlmICghdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzLCBzSWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHRcdH1cblx0fVxuXG5cdG9uSW5pdCgpIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHQvLyBTZXR0aW5nIGRlZmF1bHRzIG9mIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJleHRlcm5hbE5hdmlnYXRpb25Db250ZXh0XCIsIHsgXCJwYWdlXCI6IHRydWUgfSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKCEodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnVzZU5ld0xhenlMb2FkaW5nICYmIChvT2JqZWN0UGFnZSBhcyBhbnkpLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpO1xuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5vSXRlbUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdH1cblxuXHRvbkV4aXQoKSB7XG5cdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBPYmplY3Qua2V5cyh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykpIHtcblx0XHRcdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2VQb3BvdmVyID0gdGhpcy5tZXNzYWdlQnV0dG9uID8gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlciA6IG51bGw7XG5cdFx0aWYgKG9NZXNzYWdlUG9wb3ZlciAmJiBvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdG9NZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdH1cblx0XHQvL3doZW4gZXhpdGluZyB3ZSBzZXQga2VlcEFsaXZlIGNvbnRleHQgdG8gZmFsc2Vcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNLZWVwQWxpdmUoKSkge1xuXHRcdFx0b0NvbnRleHQuc2V0S2VlcEFsaXZlKGZhbHNlKTtcblx0XHR9XG5cdFx0aWYgKGlzQ29ubmVjdGVkKHRoaXMuZ2V0VmlldygpKSkge1xuXHRcdFx0ZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSk7IC8vIENsZWFudXAgY29sbGFib3JhdGlvbiBjb25uZWN0aW9uIHdoZW4gbGVhdmluZyB0aGUgYXBwXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwIG9uIHRoZSBvYmplY3QgcGFnZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9mblNob3dPUE1lc3NhZ2UoKSB7XG5cdFx0Y29uc3QgZXh0ZW5zaW9uQVBJID0gdGhpcy5nZXRFeHRlbnNpb25BUEkoKTtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyXG5cdFx0XHQuZ2V0SXRlbXMoKVxuXHRcdFx0Lm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKS5nZXRPYmplY3QoKSlcblx0XHRcdC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKGV4dGVuc2lvbkFQSSkge1xuXHRcdFx0ZXh0ZW5zaW9uQVBJLnNob3dNZXNzYWdlcyhtZXNzYWdlcyk7XG5cdFx0fVxuXHR9XG5cblx0X2dldFRhYmxlQmluZGluZyhvVGFibGU6IGFueSkge1xuXHRcdHJldHVybiBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIHRoZSBsYXN0IHZpc2libGUgc3Vic2VjdGlvbiBhbmQgYWRkIHRoZSBzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXIgQ1NTIGNsYXNzIGlmIGl0IGNvbnRhaW5zIG9ubHkgYSBncmlkVGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9ucyBUaGUgc3ViIHNlY3Rpb25zIHRvIGxvb2sgZm9yXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIGNoZWNrU2VjdGlvbnNGb3JHcmlkVGFibGUoc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pIHtcblx0XHRjb25zdCBjaGFuZ2VDbGFzc0ZvclRhYmxlcyA9IChldmVudDogRXZlbnQsIGxhc3RWaXNpYmxlU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pID0+IHtcblx0XHRcdGNvbnN0IGJsb2NrcyA9IFsuLi5sYXN0VmlzaWJsZVN1YlNlY3Rpb24uZ2V0QmxvY2tzKCksIC4uLmxhc3RWaXNpYmxlU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCldO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRibG9ja3MubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdHRoaXMuc2VhcmNoVGFibGVJbkJsb2NrKGJsb2Nrc1swXSBhcyBTdWJTZWN0aW9uQmxvY2spXG5cdFx0XHRcdFx0Py5nZXRUeXBlKClcblx0XHRcdFx0XHQ/LmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vSW4gY2FzZSB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRhYmxlIGluIGEgc3ViU2VjdGlvbiB3ZSBmaXQgdGhhdCB0byB0aGUgd2hvbGUgcGFnZSBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY29tZXMgb25seSBvbiB0YWJsZSBhbmQgbm90IG9uIHBhZ2Vcblx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmFkZFN0eWxlQ2xhc3MoXCJzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXJcIik7XG5cdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5kZXRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uSW5kZXggPSBzdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBzdWJTZWN0aW9uSW5kZXggPj0gMDsgc3ViU2VjdGlvbkluZGV4LS0pIHtcblx0XHRcdGlmIChzdWJTZWN0aW9uc1tzdWJTZWN0aW9uSW5kZXhdLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHRjb25zdCBsYXN0VmlzaWJsZVN1YlNlY3Rpb24gPSBzdWJTZWN0aW9uc1tzdWJTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIGF0dGFjaCB0aGlzIGV2ZW50IGluIG9yZGVyIHRvIG1hbmFnZSB0aGUgT2JqZWN0IFBhZ2UgTGF6eSBMb2FkaW5nIG1lY2hhbmlzbVxuXHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYXR0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgbGFzdFZpc2libGVTdWJTZWN0aW9uLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIGEgdGFibGUgaW4gYmxvY2tzIG9mIHNlY3Rpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBibG9jayBPbmUgc3ViIHNlY3Rpb24gYmxvY2tcblx0ICogQHJldHVybnMgVGFibGUgaWYgZXhpc3RzXG5cdCAqL1xuXHRwcml2YXRlIHNlYXJjaFRhYmxlSW5CbG9jayhibG9jazogU3ViU2VjdGlvbkJsb2NrKSB7XG5cdFx0Y29uc3QgY29udHJvbCA9IGJsb2NrLmNvbnRlbnQ7XG5cdFx0bGV0IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYmxvY2suaXNBKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0Ly8gY29udHJvbCBmcm9tIHRoZSBjdXN0b20gZGF0YSBvZiB0aGUgcGxhY2UgaG9sZGVyIHBhbmVsXG5cdFx0XHRpZiAoY29udHJvbC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBjb250cm9sLmRhdGEoXCJGdWxsU2NyZWVuVGFibGVQbGFjZUhvbGRlclwiKSkge1xuXHRcdFx0XHR0YWJsZUFQSSA9IGNvbnRyb2wuZGF0YShcInRhYmxlQVBJcmVmZXJlbmNlXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sIGFzIFRhYmxlQVBJO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHRcdHJldHVybiB0YWJsZUFQSS5jb250ZW50IGFzIFRhYmxlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKSB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdC8vIEluIHRoZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IHNjZW5hcmlvIHdlIG5lZWQgdG8gZW5zdXJlIGluIGNhc2Ugb2YgcmVsb2FkL3JlZnJlc2ggdGhhdCB0aGUgbWV0YSBtb2RlbCBpbiB0aGUgbWV0aG9kZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IG9mIHRoZSBGaWVsZFJ1bnRpbWUgaXMgYXZhaWxhYmxlXG5cdFx0aWYgKHRoaXMub1ZpZXcub1ZpZXdEYXRhPy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ICYmIENvbW1vbkhlbHBlci5nZXRNZXRhTW9kZWwoKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRDb21tb25IZWxwZXIuc2V0TWV0YU1vZGVsKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0KCh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHQudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSA9IHJlc3BvbnNlO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcmVzb3VyY2UgYnVuZGxlXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0XHRsZXQgc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG5cdFx0aWYgKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0VXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRjb25zdCBzZWN0aW9ucyA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuXHRcdFx0XHRzdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yR3JpZFRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yR3JpZFRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHR9XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHQvLyBUT0RPOiB3ZSBzaG91bGQgY2hlY2sgaG93IHRoaXMgY29tZXMgdG9nZXRoZXIgd2l0aCB0aGUgdHJhbnNhY3Rpb24gaGVscGVyLCBzYW1lIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIGFmdGVyQmluZGluZ1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCksXG5cdFx0XHRvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0b0ludGVybmFsTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIpLFxuXHRcdFx0aVZpZXdMZXZlbCA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudmlld0xldmVsO1xuXHRcdGxldCBvRmFzdENyZWF0aW9uUm93O1xuXHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG9cIik7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmJEcmFmdE5hdmlnYXRpb24gIT09IHRydWUpIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChcblx0XHRcdG9wQ29udGV4dCAmJlxuXHRcdFx0b3BDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiZcblx0XHRcdCFhQmF0Y2hHcm91cHMuc29tZShvcENvbnRleHQuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcy5iaW5kKG9wQ29udGV4dC5nZXRNb2RlbCgpKSlcblx0XHQpIHtcblx0XHRcdC8qIFx0SW4gY2FzZSB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGZvciB0aGUgY3JlYXRpb24gcm93IGFuZCBubyBvdGhlcnMgd2UgbmVlZCB0byByZXNldCB0aGUgY2hhbmdlc1xuICAgIFx0XHRcdFx0XHRcdFRPRE86IHRoaXMgaXMganVzdCBhIHF1aWNrIHNvbHV0aW9uLCB0aGlzIG5lZWRzIHRvIGJlIHJld29ya2VkXG4gICAgXHRcdFx0XHQgXHQqL1xuXG5cdFx0XHRvcENvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdH1cblxuXHRcdC8vIEZvciBub3cgd2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvd1xuXHRcdC8vIFRPRE86IEdldCByaWQgb2YgdGhpcyBjb2Rpbmcgb3IgbW92ZSBpdCB0byBhbm90aGVyIGxheWVyIC0gdG8gYmUgZGlzY3Vzc2VkIHdpdGggTURDIGFuZCBtb2RlbFxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b0Zhc3RDcmVhdGlvblJvdyA9IGFUYWJsZXNbaV0uZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvbiBzbyB0aGF0IGJpbmRpbmdzIGFyZSBlbmFibGVkIGR1cmluZyBuYXZpZ2F0aW9uIHRocm91Z2ggcGFnaW5hdG9yIGJ1dHRvbnMsIGFzIHRoZXJlIGlzIG5vIHZpZXcgcmVyZW5kZXJpbmcvcmViaW5kXG5cdFx0Y29uc3QgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKCEob09iamVjdFBhZ2UgYXMgYW55KS5pc0ZpcnN0UmVuZGVyaW5nKCkgJiYgIW1QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwpIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG51bGwgYXMgYW55KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50T25jZShcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24pO1xuXG5cdFx0Ly8gaWYgdGhlIHN0cnVjdHVyZSBvZiB0aGUgT2JqZWN0UGFnZUxheW91dCBpcyBjaGFuZ2VkIHRoZW4gc2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvblxuXHRcdC8vIEZJWE1FIElzIHRoaXMgcmVhbGx5IHdvcmtpbmcgYXMgaW50ZW5kZWQgPyBJbml0aWFsbHkgdGhpcyB3YXMgb25CZWZvcmVSZW5kZXJpbmcsIGJ1dCBuZXZlciB0cmlnZ2VyZWQgb25CZWZvcmVSZW5kZXJpbmcgYmVjYXVzZSBpdCB3YXMgcmVnaXN0ZXJlZCBhZnRlciBpdFxuXHRcdGNvbnN0IG9EZWxlZ2F0ZU9uQmVmb3JlID0ge1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uXG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hZGRFdmVudERlbGVnYXRlKG9EZWxlZ2F0ZU9uQmVmb3JlLCB0aGlzKTtcblx0XHR0aGlzLnBhZ2VSZWFkeS5hdHRhY2hFdmVudE9uY2UoXCJwYWdlUmVhZHlcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0b09iamVjdFBhZ2UucmVtb3ZlRXZlbnREZWxlZ2F0ZShvRGVsZWdhdGVPbkJlZm9yZSk7XG5cdFx0fSk7XG5cblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdGlmIChpVmlld0xldmVsID4gMSkge1xuXHRcdFx0bGV0IG9CaW5kaW5nID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMubGlzdEJpbmRpbmc7XG5cdFx0XHRjb25zdCBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQgPSBvSW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiKTtcblx0XHRcdGlmIChvUGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdUb1VzZSA9IG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUob0JpbmRpbmdUb1VzZSwgb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgbnVsbCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9CaW5kaW5nKSB7XG5cdFx0XHRcdGlmIChvQmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUob0JpbmRpbmcsIG9Db250ZXh0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBpZiB0aGUgYmluZGluZyB0eXBlIGlzIG5vdCBPRGF0YUxpc3RCaW5kaW5nIGJlY2F1c2Ugb2YgYSBkZWVwbGluayBuYXZpZ2F0aW9uIG9yIGEgcmVmcmVzaCBvZiB0aGUgcGFnZVxuXHRcdFx0XHRcdC8vIHdlIG5lZWQgdG8gY3JlYXRlIGl0XG5cdFx0XHRcdFx0Y29uc3Qgc0JpbmRpbmdQYXRoID0gb0JpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0XHRcdGlmICgvXFwoW15cXCldKlxcKSQvLnRlc3Qoc0JpbmRpbmdQYXRoKSkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGN1cnJlbnQgYmluZGluZyBwYXRoIGVuZHMgd2l0aCAoeHh4KSwgc28gd2UgY3JlYXRlIHRoZSBsaXN0QmluZGluZyBieSByZW1vdmluZyAoeHh4KVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0xpc3RCaW5kaW5nUGF0aCA9IHNCaW5kaW5nUGF0aC5yZXBsYWNlKC9cXChbXlxcKV0qXFwpJC8sIFwiXCIpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcgPSBuZXcgKE9EYXRhTGlzdEJpbmRpbmcgYXMgYW55KShvQmluZGluZy5vTW9kZWwsIHNMaXN0QmluZGluZ1BhdGgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgX3NldExpc3RCaW5kaW5nQXN5bmMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0cygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nLCBvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoRXZlbnQoXCJjaGFuZ2VcIiwgX3NldExpc3RCaW5kaW5nQXN5bmMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwiY2hhbmdlXCIsIF9zZXRMaXN0QmluZGluZ0FzeW5jKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGN1cnJlbnQgYmluZGluZyBkb2Vzbid0IGVuZCB3aXRoICh4eHgpIC0tPiB0aGUgbGFzdCBzZWdtZW50IGlzIGEgMS0xIG5hdmlnYXRpb24sIHNvIHdlIGRvbid0IGRpc3BsYXkgdGhlIHBhZ2luYXRvclxuXHRcdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZSh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcgJiYgb09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Y29uc3QgYVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb09iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdFx0bGV0IGlTa2lwID0gMjtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0XHRjb25zdCBiRWRpdGFibGVIZWFkZXIgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0XHRcdGZvciAobGV0IGlTZWN0aW9uID0gMDsgaVNlY3Rpb24gPCBhU2VjdGlvbnMubGVuZ3RoOyBpU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChsZXQgaVN1YlNlY3Rpb24gPSAwOyBpU3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGlTdWJTZWN0aW9uKyssIGlTa2lwLS0pIHtcblx0XHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXHRcdFx0XHRcdGlmIChpU2tpcCA8IDEgfHwgKGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHRcdGlmIChvU3ViU2VjdGlvbi5kYXRhKCkuaXNWaXNpYmlsaXR5RHluYW1pYyAhPT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyBhbnkpLm9Db250YWluZXIuZ2V0UGFyZW50KCk7XG5cdFx0XHRpZiAob05hdkNvbnRhaW5lcikge1xuXHRcdFx0XHRvTmF2Q29udGFpbmVyLnNob3dQbGFjZWhvbGRlcih7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZTogYW55KSB7XG5cdFx0bGV0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdFx0Y29uc3QgYUFjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhQWN0aW9ucyAmJiBhQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSBhQWN0aW9ucy5maW5kKGZ1bmN0aW9uIChvQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBsZWZ0IGFsaWdubWVudCBvZiB0aGUgRHJhZnQgc3dpdGNoIGFuZCB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBhdmF0YXIgY29udHJvbHNcblx0XHRcdFx0Ly8gdGhlcmUgaXMgYSBUb29sYmFyU3BhY2VyIGluIHRoZSBhY3Rpb25zIGFnZ3JlZ2F0aW9uIHdoaWNoIHdlIG5lZWQgdG8gZXhjbHVkZSBoZXJlIVxuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIEFDQyByZXBvcnQsIHdlIGFsc28gbmVlZCBub3QgdG8gY2hlY2sgZm9yIHRoZSBJbnZpc2libGVUZXh0IGVsZW1lbnRzXG5cdFx0XHRcdGlmIChvQWN0aW9uLmlzQShcInNhcC5mZS5tYWNyb3Muc2hhcmUuU2hhcmVBUElcIikpIHtcblx0XHRcdFx0XHQvLyBzaW5jZSBTaGFyZUFQSSBkb2VzIG5vdCBoYXZlIGEgZGlzYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHRcdC8vIGhlbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgZGlzYmFsZWQgb3Igbm90XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFvQWN0aW9uLmlzQShcInNhcC51aS5jb3JlLkludmlzaWJsZVRleHRcIikgJiYgIW9BY3Rpb24uaXNBKFwic2FwLm0uVG9vbGJhclNwYWNlclwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uLmdldFZpc2libGUoKSAmJiBvQWN0aW9uLmdldEVuYWJsZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBvRmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHR9XG5cblx0X2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9uczogYW55KSB7XG5cdFx0aWYgKGFTdWJTZWN0aW9ucykge1xuXHRcdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdFx0Y29uc3QgYUJsb2NrcyA9IGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKTtcblxuXHRcdFx0XHRpZiAoYUJsb2Nrcykge1xuXHRcdFx0XHRcdGZvciAobGV0IGJsb2NrID0gMDsgYmxvY2sgPCBhQmxvY2tzLmxlbmd0aDsgYmxvY2srKykge1xuXHRcdFx0XHRcdFx0bGV0IGFGb3JtQ29udGFpbmVycztcblxuXHRcdFx0XHRcdFx0aWYgKGFCbG9ja3NbYmxvY2tdLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGFCbG9ja3NbYmxvY2tdLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50ICYmXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKSAmJlxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuaXNBKFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIilcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtQ29udGFpbmVyID0gMDsgZm9ybUNvbnRhaW5lciA8IGFGb3JtQ29udGFpbmVycy5sZW5ndGg7IGZvcm1Db250YWluZXIrKykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGb3JtRWxlbWVudHMgPSBhRm9ybUNvbnRhaW5lcnNbZm9ybUNvbnRhaW5lcl0uZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGZvcm1FbGVtZW50ID0gMDsgZm9ybUVsZW1lbnQgPCBhRm9ybUVsZW1lbnRzLmxlbmd0aDsgZm9ybUVsZW1lbnQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmllbGRzID0gYUZvcm1FbGVtZW50c1tmb3JtRWxlbWVudF0uZ2V0RmllbGRzKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGZpcnN0IGZpZWxkIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBJbnB1dEJhc2UgKGUuZy4gY291bGQgYmUgYSBUZXh0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTbyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaXQgaGFzIGEgZ2V0UmVxdWlyZWQgbWV0aG9kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQgJiYgYUZpZWxkc1swXS5nZXRSZXF1aXJlZCgpICYmICFhRmllbGRzWzBdLmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBhRmllbGRzWzBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoZW4gc2VhcmNoaW5nIGZvciBtYW5kYW90cnkgZW1wdHkgZmllbGQ6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdF91cGRhdGVGb2N1c0luRWRpdE1vZGUoYVN1YlNlY3Rpb25zOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdGxldCBvRmllbGRUb0ZvY3VzOiBhbnk7XG5cdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IG9NYW5kYXRvcnlGaWVsZC5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob09iamVjdFBhZ2UgYXMgYW55KS5fZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCkgfHwgdGhpcy5fZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHR9XG5cblx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdC8vIFdlIHNldCB0aGUgZm9jdXMgaW4gYSB0aW1lZW91dCwgb3RoZXJ3aXNlIHRoZSBmb2N1cyBzb21ldGltZXMgZ29lcyB0byB0aGUgVGFiQmFyXG5cdFx0XHRcdG9GaWVsZFRvRm9jdXMuZm9jdXMoKTtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0fVxuXG5cdF9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0KG9FdmVudDogYW55KSB7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHR9XG5cblx0X29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9Db250ZXh0OiBhbnkpIHtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdGlmICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBCYWNrIG5hdiB3aWxsIGtlZXAgdGhlIHNhbWUgY29udGV4dCAtLT4gbm8gbmVlZCB0byBkaXNwbGF5IHRoZSBkaWFsb2dcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRVUkwgPSBkb2N1bWVudC5VUkw7XG5cdFx0XHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0XHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSBpcyBubyBwcmV2aW91cyBwYWdlIGluIHRoZSBoaXN0b3J5LCBoaXN0b3J5LmJhY2sgZG9lcyBub3RoaW5nLlxuXHRcdFx0XHRcdC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byB1c2UgbmF2aWdhdGVCYWNrRnJvbUNvbnRleHQsIHRoYXQgd2lsbCBkaXNwbGF5IHRoZSBob21lIHBhZ2Vcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChkb2N1bWVudC5VUkwgPT09IGN1cnJlbnRVUkwpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSwgMTAwKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0X29uQWZ0ZXJCaW5kaW5nKG9CaW5kaW5nQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cblx0XHR0aGlzLl9zaWRlRWZmZWN0cy5jbGVhclByb3BlcnRpZXNTdGF0dXMoKTtcblxuXHRcdC8vIFRPRE86IHRoaXMgaXMgb25seSBhIHRlbXAgc29sdXRpb24gYXMgbG9uZyBhcyB0aGUgbW9kZWwgZml4IHRoZSBjYWNoZSBpc3N1ZSBhbmQgd2UgdXNlIHRoaXMgYWRkaXRpb25hbFxuXHRcdC8vIGJpbmRpbmcgd2l0aCBvd25SZXF1ZXN0XG5cdFx0b0JpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKTtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogYW55W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBhbnkpIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1N1YlNlY3Rpb24sIGFJQk5BY3Rpb25zKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gQXNzaWduIGludGVybmFsIGJpbmRpbmcgY29udGV4dHMgdG8gb0Zvcm1Db250YWluZXI6XG5cdFx0Ly8gMS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFzc2lnbiB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IHRvIHRoZSBYTUwgZnJhZ21lbnRcblx0XHQvLyAoRm9ybUNvbnRhaW5lci5mcmFnbWVudC54bWwpIHlldCAtIGl0IGlzIHVzZWQgYWxyZWFkeSBmb3IgdGhlIGRhdGEtc3RydWN0dXJlLlxuXHRcdC8vIDIuIEFub3RoZXIgcHJvYmxlbSBpcywgdGhhdCBGb3JtQ29udGFpbmVycyBhc3NpZ25lZCB0byBhICdNb3JlQmxvY2snIGRvZXMgbm90IGhhdmUgYW5cblx0XHQvLyBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGF0IGFsbC5cblxuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiwge30pO1xuXG5cdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgQkNQOiAyMDgwMjE4MDA0XG5cdFx0XHQvLyBOZWVkIHRvIGZpeCB3aXRoIEJMSTogRklPUklURUNIUDEtMTUyNzRcblx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHQvLyBXb3JrYXJvdW5kIHN0YXJ0cyBoZXJlISFcblx0XHRcdGNvbnN0IG9UYWJsZVJvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvVGFibGVSb3dCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdFx0Ly8gYXBwbHkgZm9yIGJvdGggZWRpdCBhbmQgZGlzcGxheSBtb2RlIGluIHN0aWNreVxuXHRcdFx0XHRcdG9UYWJsZVJvd0JpbmRpbmcucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0Ly8gVXBkYXRlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYnV0dG9ucyBvbiB0YWJsZSB0b29sYmFyXG5cdFx0XHQvLyBUaGUgc2FtZSBpcyBhbHNvIHBlcmZvcm1lZCBvbiBUYWJsZSBzZWxlY3Rpb25DaGFuZ2UgZXZlbnRcblx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwiKSlcblx0XHRcdFx0KSxcblx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXG5cdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cywgXCJ0YWJsZVwiKTtcblx0XHRcdC8vIENsZWFyIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHRhYmxlLCBuZWVkIHRvIGJlIGZpeGVkIGFuZCByZXZpZXcgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRvVGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblx0XHR9KTtcblx0XHRDb21tb25VdGlscy5nZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsKHRoaXMsIFwiX3BhZ2VNb2RlbFwiKTtcblx0XHQvL1JldHJpZXZlIE9iamVjdCBQYWdlIGhlYWRlciBhY3Rpb25zIGZyb20gT2JqZWN0IFBhZ2UgdGl0bGUgY29udHJvbFxuXHRcdGNvbnN0IG9PYmplY3RQYWdlVGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpO1xuXHRcdGxldCBhSUJOSGVhZGVyQWN0aW9uczogYW55W10gPSBbXTtcblx0XHRhSUJOSGVhZGVyQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob09iamVjdFBhZ2VUaXRsZSwgYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdGFJQk5BY3Rpb25zID0gYUlCTkFjdGlvbnMuY29uY2F0KGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRDb21tb25VdGlscy51cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9ucywgdGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0bGV0IG9Nb2RlbDogYW55LCBvRmluYWxVSVN0YXRlOiBhbnk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBtb3ZlZCBpbnRvIGFuIGluaXQgZXZlbnQgb2YgdGhlIE1EQyB0YWJsZXMgKG5vdCB5ZXQgZXhpc3RpbmcpIGFuZCBzaG91bGQgYmUgcGFydFxuXHRcdC8vIG9mIGFueSBjb250cm9sbGVyIGV4dGVuc2lvblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKiBAcGFyYW0gb0xpc3RCaW5kaW5nXG5cdFx0ICovXG5cdFx0YXN5bmMgZnVuY3Rpb24gZW5hYmxlRmFzdENyZWF0aW9uUm93KG9UYWJsZTogYW55LCBvTGlzdEJpbmRpbmc6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0Zhc3RDcmVhdGlvblJvdyA9IG9UYWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0bGV0IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZywgb0Zhc3RDcmVhdGlvbkNvbnRleHQ7XG5cblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXdhaXQgb0ZpbmFsVUlTdGF0ZTtcblx0XHRcdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdy5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyA9IG9Nb2RlbC5iaW5kTGlzdChvTGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBvTGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpLCBbXSwgW10sIHtcblx0XHRcdFx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBcImRvTm90U3VibWl0XCIsXG5cdFx0XHRcdFx0XHRcdCQkZ3JvdXBJZDogXCJkb05vdFN1Ym1pdFwiXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdC8vIFdvcmthcm91bmQgc3VnZ2VzdGVkIGJ5IE9EYXRhIG1vZGVsIHY0IGNvbGxlYWd1ZXNcblx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5yZWZyZXNoSW50ZXJuYWwgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdC8qIGRvIG5vdGhpbmcgKi9cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uQ29udGV4dCA9IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5jcmVhdGUoKTtcblx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQob0Zhc3RDcmVhdGlvbkNvbnRleHQpO1xuXG5cdFx0XHRcdFx0XHQvLyB0aGlzIGlzIG5lZWRlZCB0byBhdm9pZCBjb25zb2xlIGVycm9yXG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBvRmFzdENyZWF0aW9uQ29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdExvZy50cmFjZShcInRyYW5zaWVudCBmYXN0IGNyZWF0aW9uIGNvbnRleHQgZGVsZXRlZFwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY29tcHV0aW5nIHRoZSBmaW5hbCBVSSBzdGF0ZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gdGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCB0aGUgYWxsXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9UYWJsZVxuXHRcdCAqL1xuXHRcdGNvbnN0IGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyA9IChvVGFibGU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKSxcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGVuYWJsZUZhc3RDcmVhdGlvblJvdyhvVGFibGUsIG9CaW5kaW5nKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKCFvQmluZGluZykge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEV4cGVjdGVkIGJpbmRpbmcgbWlzc2luZyBmb3IgdGFibGU6ICR7b1RhYmxlLmdldElkKCl9YCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9CaW5kaW5nLm9Db250ZXh0KSB7XG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0aWYgKG9CaW5kaW5nLm9Db250ZXh0KSB7XG5cdFx0XHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmRldGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvTW9kZWwgPSBvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKTtcblxuXHRcdFx0Ly8gQ29tcHV0ZSBFZGl0IE1vZGVcblx0XHRcdG9GaW5hbFVJU3RhdGUgPSB0aGlzLl9lZGl0Rmxvdy5jb21wdXRlRWRpdE1vZGUob0JpbmRpbmdDb250ZXh0KTtcblxuXHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0b0ZpbmFsVUlTdGF0ZVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29ubmVjdCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzQ29ubmVjdGVkKHRoaXMuZ2V0VmlldygpKSkge1xuXHRcdFx0XHRcdFx0XHRkaXNjb25uZWN0KHRoaXMuZ2V0VmlldygpKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gaW4gY2FzZSB3ZSBzd2l0Y2ggdG8gYW5vdGhlciBlbGVtZW50IChlLmcuIGluIEZDTClcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBmaW5hbCBVSSBTdGF0ZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyB1cGRhdGUgcmVsYXRlZCBhcHBzIG9uY2UgRGF0YSBpcyByZWNlaXZlZCBpbiBjYXNlIG9mIGJpbmRpbmcgY2FjaGUgaXMgbm90IGF2YWlsYWJsZVxuXHRcdFx0Ly8gVE9ETzogdGhpcyBpcyBvbmx5IGEgdGVtcCBzb2x1dGlvbiBzaW5jZSB3ZSBuZWVkIHRvIGNhbGwgX3VwZGF0ZVJlbGF0ZWRBcHBzIG1ldGhvZCBvbmx5IGFmdGVyIGRhdGEgZm9yIE9iamVjdCBQYWdlIGlzIHJlY2VpdmVkIChpZiB0aGVyZSBpcyBubyBiaW5kaW5nKVxuXHRcdFx0aWYgKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkub0NhY2hlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmblVwZGF0ZVJlbGF0ZWRBcHBzID0gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5kZXRhY2hEYXRhUmVjZWl2ZWQoZm5VcGRhdGVSZWxhdGVkQXBwcyk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkuYXR0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlUmVsYXRlZEFwcHMpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL0F0dGFjaCB0aGUgcGF0Y2ggc2VudCBhbmQgcGF0Y2ggY29tcGxldGVkIGV2ZW50IHRvIHRoZSBvYmplY3QgcGFnZSBiaW5kaW5nIHNvIHRoYXQgd2UgY2FuIHJlYWN0XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IChvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZyAmJiBvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpKSB8fCBvQmluZGluZ0NvbnRleHQ7XG5cblx0XHRcdC8vIEF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlciBvbmx5IG9uY2UgdG8gdGhlIHNhbWUgYmluZGluZ1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudEJpbmRpbmcgIT09IG9CaW5kaW5nKSB7XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwicGF0Y2hTZW50XCIsIHRoaXMuZWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IG9CaW5kaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0VGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHRcdC50aGVuKGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucylcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcpIHtcblx0XHRcdFx0Ly8gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGJpbmRpbmcgaXMgcmVhZHkgaGVuY2UgY2FsbGluZyBpdCBpbiBvbkFmdGVyQmluZGluZ1xuXHRcdFx0XHQob09iamVjdFBhZ2UgYXMgYW55KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IHNldEZvY3VzID0gKCkgPT4ge1xuXHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgYWN0aW9uIGJ1dHRvbiwgb3IgdG8gdGhlIGZpcnN0IGVkaXRhYmxlIGlucHV0IGlmIGluIGVkaXRhYmxlIG1vZGVcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGlzSW5EaXNwbGF5TW9kZSA9ICFvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cblx0XHRcdGlmIChpc0luRGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IHRoaXMuX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdGlmIChvRmlyc3RDbGlja2FibGVFbGVtZW50KSB7XG5cdFx0XHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRTZWN0aW9uOiBhbnkgPSBDb3JlLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkU2VjdGlvbikge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShvU2VsZWN0ZWRTZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvLyBBcHBseSBhcHAgc3RhdGUgb25seSBhZnRlciB0aGUgcGFnZSBpcyByZWFkeSB3aXRoIHRoZSBmaXJzdCBzZWN0aW9uIHNlbGVjdGVkXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly9TaG93IHBvcHVwIHdoaWxlIG5hdmlnYXRpbmcgYmFjayBmcm9tIG9iamVjdCBwYWdlIGluIGNhc2Ugb2YgZHJhZnRcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoIWJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCgpID0+IHRoaXMuX29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9CaW5kaW5nQ29udGV4dCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHQuZ2V0QXBwU3RhdGVIYW5kbGVyKClcblx0XHRcdC5hcHBseUFwcFN0YXRlKClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmZvcmNlRm9jdXMpIHtcblx0XHRcdFx0XHRzZXRGb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChFcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHRoZSBmb2N1c1wiLCBFcnJvcik7XG5cdFx0XHR9KTtcblxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHR0aGlzLl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvbi5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uXG5cdCAqL1xuXHRnZXRTdGlja3lFZGl0TW9kZSgpIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCAmJiAodGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRsZXQgYklzU3RpY2t5RWRpdE1vZGUgPSBmYWxzZTtcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmIChiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGJJc1N0aWNreUVkaXRNb2RlID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGU7XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdH1cblxuXHRfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlU3VidGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGE6IGFueSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VTdWJ0aXRsZVwiO1xuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VUaXRsZVwiKSB8fCBcIlwiLFxuXHRcdFx0c3VidGl0bGU6IG9PYmplY3RQYWdlU3VidGl0bGUgJiYgb09iamVjdFBhZ2VTdWJ0aXRsZS5nZXRWYWx1ZSgpLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH07XG5cdH1cblxuXHRfZXhlY3V0ZUhlYWRlclNob3J0Y3V0KHNJZDogYW55KSB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlKVxuXHRcdFx0XHQuZ2V0QWN0aW9ucygpXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvRWxlbWVudDogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHR9XG5cblx0X2V4ZWN1dGVGb290ZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEZvb3RlcigpIGFzIGFueSkuZ2V0Q29udGVudCgpLmZpbmQoZnVuY3Rpb24gKG9FbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLkJ1dHRvblwiICYmIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0fVxuXG5cdF9leGVjdXRlVGFiU2hvcnRDdXQob0V4ZWN1dGlvbjogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gb0V4ZWN1dGlvbi5vU291cmNlLmdldENvbW1hbmQoKTtcblx0XHRsZXQgbmV3U2VjdGlvbixcblx0XHRcdGlTZWxlY3RlZFNlY3Rpb25JbmRleCA9IG9PYmplY3RQYWdlLmluZGV4T2ZTZWN0aW9uKHRoaXMuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IDApIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCkge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRNZXNzYWdlTWFuYWdlcigpXG5cdFx0XHQuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdGlmIChvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLnR5cGUgPT09IFwiRXJyb3JcIiAmJiBvTWVzc2FnZS50YXJnZXQuaW5kZXhPZihzVmlld0lkKSA+IC0xKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogYW55LCBvUmV0PzogYW55KSB7XG5cdFx0aWYgKGVycikge1xuXHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0fVxuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55O1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBhbnkpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKCFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdF9lZGl0RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogR2V0cyB0aGUgY29udGV4dCBvZiB0aGUgRHJhZnRSb290IHBhdGguXG5cdCAqIElmIGEgdmlldyBoYXMgYmVlbiBjcmVhdGVkIHdpdGggdGhlIGRyYWZ0IFJvb3QgUGF0aCwgdGhpcyBtZXRob2QgcmV0dXJucyBpdHMgYmluZGluZ0NvbnRleHQuXG5cdCAqIFdoZXJlIG5vIHZpZXcgaXMgZm91bmQgYSBuZXcgY3JlYXRlZCBjb250ZXh0IGlzIHJldHVybmVkLlxuXHQgKiBUaGUgbmV3IGNyZWF0ZWQgY29udGV4dCByZXF1ZXN0IHRoZSBrZXkgb2YgdGhlIGVudGl0eSBpbiBvcmRlciB0byBnZXQgdGhlIEV0YWcgb2YgdGhpcyBlbnRpdHkuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBnZXREcmFmdFJvb3RQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgYSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBnZXREcmFmdFJvb3RDb250ZXh0KCk6IFByb21pc2U8VjRDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgVjRDb250ZXh0O1xuXHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0UGF0aCA9IE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdFBhdGgoY29udGV4dCk7XG5cdFx0XHRsZXQgc2ltcGxlRHJhZnRSb290Q29udGV4dDogVjRDb250ZXh0O1xuXHRcdFx0aWYgKGRyYWZ0Um9vdENvbnRleHRQYXRoKSB7XG5cdFx0XHRcdC8vIENoZWNrIGlmIGEgdmlldyBtYXRjaGVzIHdpdGggdGhlIGRyYWZ0IHJvb3QgcGF0aFxuXHRcdFx0XHRjb25zdCBleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgUm9vdFZpZXdCYXNlQ29udHJvbGxlcilcblx0XHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHRcdC5maW5kKChwYWdlVmlldzogVmlldykgPT4gcGFnZVZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpID09PSBkcmFmdFJvb3RDb250ZXh0UGF0aClcblx0XHRcdFx0XHQ/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgVjRDb250ZXh0O1xuXHRcdFx0XHRpZiAoZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSkge1xuXHRcdFx0XHRcdHJldHVybiBleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0XHRzaW1wbGVEcmFmdFJvb3RDb250ZXh0ID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9zaW1wbGVEcmFmdFJvb3RDb250ZXh0XCIpO1xuXHRcdFx0XHRpZiAoc2ltcGxlRHJhZnRSb290Q29udGV4dD8uZ2V0UGF0aCgpID09PSBkcmFmdFJvb3RDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRcdHJldHVybiBzaW1wbGVEcmFmdFJvb3RDb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoZHJhZnRSb290Q29udGV4dFBhdGgpO1xuXHRcdFx0XHRjb25zdCBtRGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dChzRW50aXR5UGF0aCkpO1xuXHRcdFx0XHRzaW1wbGVEcmFmdFJvb3RDb250ZXh0ID0gbW9kZWwuYmluZENvbnRleHQoZHJhZnRSb290Q29udGV4dFBhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRhd2FpdCBzaW1wbGVEcmFmdFJvb3RDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShtRGF0YU1vZGVsLnRhcmdldEVudGl0eVR5cGUua2V5c1swXT8ubmFtZSk7XG5cdFx0XHRcdC8vIFN0b3JlIHRoaXMgbmV3IGNyZWF0ZWQgY29udGV4dCB0byB1c2UgaXQgb24gdGhlIG5leHQgaXRlcmF0aW9uc1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3NpbXBsZURyYWZ0Um9vdENvbnRleHRcIiwgc2ltcGxlRHJhZnRSb290Q29udGV4dCk7XG5cdFx0XHRcdHJldHVybiBzaW1wbGVEcmFmdFJvb3RDb250ZXh0O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGFzeW5jIF92YWxpZGF0ZURvY3VtZW50KCk6IFByb21pc2U8dm9pZCB8IGFueVtdIHwgT0RhdGFDb250ZXh0QmluZGluZ0V4PiB7XG5cdFx0Y29uc3QgY29udHJvbCA9IENvcmUuYnlJZChDb3JlLmdldEN1cnJlbnRGb2N1c2VkQ29udHJvbElkKCkpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIFY0Q29udGV4dDtcblx0XHRpZiAoY29udGV4dCAmJiAhY29udGV4dC5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHQvLyBXYWl0IGZvciB0aGUgcGVuZGluZyBjaGFuZ2VzIGJlZm9yZSBzdGFydGluZyB0aGlzIHZhbGlkYXRpb25cblx0XHRcdGF3YWl0IHRoaXMuX2VkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGdsb2JhbFNpZGVFZmZlY3RzLm1hcCgoc2lkZUVmZmVjdHMpID0+IHRoaXMuX3NpZGVFZmZlY3RzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cywgY29udGV4dCkpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGRyYWZ0Um9vdENvbnRleHQgPSBhd2FpdCB0aGlzLmdldERyYWZ0Um9vdENvbnRleHQoKTtcblx0XHRcdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHNcblx0XHRcdFx0aWYgKGRyYWZ0Um9vdENvbnRleHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZHJhZnQuZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihkcmFmdFJvb3RDb250ZXh0LCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRhc3luYyBfc2F2ZURvY3VtZW50KG9Db250ZXh0OiBhbnksIG9QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLFxuXHRcdFx0YVdhaXRDcmVhdGVEb2N1bWVudHM6IGFueVtdID0gW107XG5cdFx0Ly8gaW5kaWNhdGVzIGlmIHdlIGFyZSBjcmVhdGluZyBhIG5ldyByb3cgaW4gdGhlIE9QXG5cdFx0bGV0IGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0dGhpcy5fZmluZFRhYmxlcygpLmZvckVhY2goKG9UYWJsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpO1xuXHRcdFx0Y29uc3QgbVBhcmFtZXRlcnM6IGFueSA9IHtcblx0XHRcdFx0Y3JlYXRpb25Nb2RlOiBvVGFibGUuZGF0YShcImNyZWF0aW9uTW9kZVwiKSxcblx0XHRcdFx0Y3JlYXRpb25Sb3c6IG9UYWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRjcmVhdGVBdEVuZDogb1RhYmxlLmRhdGEoXCJjcmVhdGVBdEVuZFwiKSA9PT0gXCJ0cnVlXCJcblx0XHRcdH07XG5cdFx0XHRjb25zdCBiQ3JlYXRlRG9jdW1lbnQgPVxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvblJvdyAmJlxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvblJvdy5nZXRCaW5kaW5nQ29udGV4dCgpICYmXG5cdFx0XHRcdE9iamVjdC5rZXlzKG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0T2JqZWN0KCkpLmxlbmd0aCA+IDE7XG5cdFx0XHRpZiAoYkNyZWF0ZURvY3VtZW50KSB7XG5cdFx0XHRcdC8vIHRoZSBiU2tpcFNpZGVFZmZlY3RzIGlzIGEgcGFyYW1ldGVyIGNyZWF0ZWQgd2hlbiB3ZSBjbGljayB0aGUgc2F2ZSBrZXkuIElmIHdlIHByZXNzIHRoaXMga2V5XG5cdFx0XHRcdC8vIHdlIGRvbid0IGV4ZWN1dGUgdGhlIGhhbmRsZVNpZGVFZmZlY3RzIGZ1bmNpdG9uIHRvIGF2b2lkIGJhdGNoIHJlZHVuZGFuY3lcblx0XHRcdFx0bVBhcmFtZXRlcnMuYlNraXBTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gdHJ1ZTtcblx0XHRcdFx0YVdhaXRDcmVhdGVEb2N1bWVudHMucHVzaChcblx0XHRcdFx0XHR0aGlzLmVkaXRGbG93LmNyZWF0ZURvY3VtZW50KG9CaW5kaW5nLCBtUGFyYW1ldGVycykudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmc7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBhQmluZGluZ3MgPSBhd2FpdCBQcm9taXNlLmFsbChhV2FpdENyZWF0ZURvY3VtZW50cyk7XG5cdFx0XHRjb25zdCBtUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3I6IGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yLFxuXHRcdFx0XHRiaW5kaW5nczogYUJpbmRpbmdzLFxuXHRcdFx0XHRlbnRpdHlTZXROYW1lOiBvUGFyYW1ldGVycz8uZW50aXR5U2V0TmFtZVxuXHRcdFx0fTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gZWl0aGVyIHJlamVjdCBvciByZXNvbHZlIGEgcHJvbWlzZSBoZXJlIGFuZCByZXR1cm4gaXQgc2luY2UgdGhpcyBzYXZlXG5cdFx0XHQvLyBmdW5jdGlvbiBpcyBub3Qgb25seSBjYWxsZWQgd2hlbiBwcmVzc2luZyB0aGUgc2F2ZSBidXR0b24gaW4gdGhlIGZvb3RlciwgYnV0IGFsc29cblx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBjcmVhdGUgb3Igc2F2ZSBpbiBhIGRhdGFsb3NzIHBvcHVwLlxuXHRcdFx0Ly8gVGhlIGxvZ2ljIG9mIHRoZSBkYXRhbG9zcyBwb3B1cCBuZWVkcyB0byBkZXRlY3QgaWYgdGhlIHNhdmUgaGFkIGVycm9ycyBvciBub3QgaW4gb3JkZXJcblx0XHRcdC8vIHRvIGRlY2lkZSBpZiB0aGUgc3Vic2VxdWVudCBhY3Rpb24gLSBsaWtlIGEgYmFjayBuYXZpZ2F0aW9uIC0gaGFzIHRvIGJlIGV4ZWN1dGVkIG9yIG5vdC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc2F2ZURvY3VtZW50KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0XHRcdC8vIElmIHRoZSBzYXZlRG9jdW1lbnQgaW4gZWRpdEZsb3cgcmV0dXJucyBlcnJvcnMgd2UgbmVlZFxuXHRcdFx0XHQvLyB0byBzaG93IHRoZSBtZXNzYWdlIHBvcG92ZXIgaGVyZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5cdFx0XHRcdC8vIGRhdGFsb3NzIGxvZ2ljIGRvZXMgbm90IHBlcmZvcm0gdGhlIGZvbGxvdyB1cCBmdW5jdGlvblxuXHRcdFx0XHQvLyBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24gaGVuY2Ugd2UgcmV0dXJuIGEgcHJvbWlzZSBhbmQgcmVqZWN0IGl0XG5cdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcihlcnJvcik7XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvTW9kZWwpKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X21hbmFnZUNvbGxhYm9yYXRpb24oKSB7XG5cdFx0b3Blbk1hbmFnZURpYWxvZyh0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyhldmVudDogYW55KSB7XG5cdFx0c2hvd1VzZXJEZXRhaWxzKGV2ZW50LCB0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfY2FuY2VsRG9jdW1lbnQob0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uKTsgLy90byBnZXQgdGhlIHJlZmVyZW5jZSBvZiB0aGUgY2FuY2VsIGJ1dHRvbiBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uXG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuY2FuY2VsRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0fVxuXG5cdF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5hcHBseURvY3VtZW50KG9Db250ZXh0KS5jYXRjaCgoKSA9PiB0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoKSk7XG5cdH1cblxuXHRfdXBkYXRlUmVsYXRlZEFwcHMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGlmIChDb21tb25VdGlscy5yZXNvbHZlU3RyaW5ndG9Cb29sZWFuKG9PYmplY3RQYWdlLmRhdGEoXCJzaG93UmVsYXRlZEFwcHNcIikpKSB7XG5cdFx0XHRDb21tb25VdGlscy51cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhUGFyZW50RWxlbWVudDogYW55LCBhU3Vic2VjdGlvbjogYW55LCBhQ29udHJvbHM6IGFueSwgYklzQ2hhcnQ/OiBib29sZWFuKSB7XG5cdFx0Zm9yIChsZXQgZWxlbWVudCA9IDA7IGVsZW1lbnQgPCBhUGFyZW50RWxlbWVudC5sZW5ndGg7IGVsZW1lbnQrKykge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIGFQYXJlbnRFbGVtZW50W2VsZW1lbnRdLmdldENvbnRlbnQoKTtcblx0XHRcdGlmIChiSXNDaGFydCkge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubUFnZ3JlZ2F0aW9ucyAmJiBvRWxlbWVudC5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgYUl0ZW1zID0gb0VsZW1lbnQuZ2V0QWdncmVnYXRpb24oXCJpdGVtc1wiKTtcblx0XHRcdFx0XHRhSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAob0l0ZW06IGFueSkge1xuXHRcdFx0XHRcdFx0aWYgKG9JdGVtLmlzQShcInNhcC5mZS5tYWNyb3MuY2hhcnQuQ2hhcnRBUElcIikpIHtcblx0XHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvSXRlbTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldE1haW5Db250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKTtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50WzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0Q29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRhQ29udHJvbHMucHVzaChvRWxlbWVudCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLmZlLm1hY3Jvcy5jaGFydC5DaGFydEFQSVwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRDb250ZW50KCk7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0XHRcdGFDb250cm9scy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0QWxsU3ViU2VjdGlvbnMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGxldCBhU3ViU2VjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCkge1xuXHRcdGxldCBhQmxvY2tzOiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0YUJsb2NrcyA9IGFCbG9ja3MuY29uY2F0KG9TdWJTZWN0aW9uLmdldEJsb2NrcygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCkge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogYW55W10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFUYWJsZXM7XG5cdH1cblxuXHRfZmluZENoYXJ0cygpIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFDaGFydHM6IGFueVtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhQ2hhcnRzLCB0cnVlKTtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQ2hhcnRzO1xuXHR9XG5cblx0X2Nsb3NlU2lkZUNvbnRlbnQoKSB7XG5cdFx0dGhpcy5fZ2V0QWxsQmxvY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAob0Jsb2NrOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250ZW50ID0gb0Jsb2NrLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvQmxvY2suZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKG9Db250ZW50ICYmIG9Db250ZW50LmlzQSAmJiBvQ29udGVudC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRpZiAob0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhcnQgQ29udGV4dCBpcyByZXNvbHZlZCBmb3IgMTpuIG1pY3JvY2hhcnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NoYXJ0Q29udGV4dCBUaGUgQ29udGV4dCBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBUaGUgY29sbGVjdGlvblBhdGggb2YgdGhlIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBBdHRyaWJ1dGVzIG9mIHRoZSBjaGFydCBDb250ZXh0XG5cdCAqL1xuXHRfZ2V0Q2hhcnRDb250ZXh0RGF0YShvQ2hhcnRDb250ZXh0OiBhbnksIHNDaGFydFBhdGg6IHN0cmluZykge1xuXHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9DaGFydENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0bGV0IG9DaGFydENvbnRleHREYXRhID0gW29Db250ZXh0RGF0YV07XG5cdFx0aWYgKG9DaGFydENvbnRleHQgJiYgc0NoYXJ0UGF0aCkge1xuXHRcdFx0aWYgKG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXSkge1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YSA9IG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0ZGVsZXRlIG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEucHVzaChvQ29udGV4dERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0NoYXJ0Q29udGV4dERhdGE7XG5cdH1cblxuXHQvKipcblx0ICogU2Nyb2xsIHRoZSB0YWJsZXMgdG8gdGhlIHJvdyB3aXRoIHRoZSBzUGF0aFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIjX3Njcm9sbFRhYmxlc1RvUm93XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3coYVRhYmxlc1tpXSwgc1Jvd1BhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gbWVyZ2Ugc2VsZWN0ZWQgY29udGV4dHMgYW5kIGZpbHRlcnMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfbWVyZ2VNdWx0aXBsZUNvbnRleHRzXG5cdCAqIEBwYXJhbSBvUGFnZUNvbnRleHQgUGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBhTGluZUNvbnRleHQgU2VsZWN0ZWQgQ29udGV4dHNcblx0ICogQHBhcmFtIHNDaGFydFBhdGggQ29sbGVjdGlvbiBuYW1lIG9mIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb24gVmFyaWFudCBPYmplY3Rcblx0ICovXG5cdF9tZXJnZU11bHRpcGxlQ29udGV4dHMob1BhZ2VDb250ZXh0OiBDb250ZXh0LCBhTGluZUNvbnRleHQ6IGFueVtdLCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IGFueVtdID0gW10sXG5cdFx0XHRhUGFnZUF0dHJpYnV0ZXMgPSBbXSxcblx0XHRcdG9Db250ZXh0LFxuXHRcdFx0c01ldGFQYXRoTGluZTogc3RyaW5nLFxuXHRcdFx0c1BhdGhMaW5lO1xuXG5cdFx0Y29uc3Qgc1BhZ2VQYXRoID0gb1BhZ2VDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhZ2VDb250ZXh0ICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aFBhZ2UgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhZ2VQYXRoKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0Ly8gR2V0IHNpbmdsZSBsaW5lIGNvbnRleHQgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKGFMaW5lQ29udGV4dCAmJiBhTGluZUNvbnRleHQubGVuZ3RoKSB7XG5cdFx0XHRvQ29udGV4dCA9IGFMaW5lQ29udGV4dFswXTtcblx0XHRcdHNQYXRoTGluZSA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHNNZXRhUGF0aExpbmUgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGhMaW5lKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0XHRhTGluZUNvbnRleHQuZm9yRWFjaCgob1NpbmdsZUNvbnRleHQ6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU3ViQ2hhcnRDb250ZXh0RGF0YSxcblx0XHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGAke3NNZXRhUGF0aFBhZ2V9LyR7c0NoYXJ0UGF0aH1gXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1NpbmdsZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aExpbmVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFQYWdlQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGNvbnRleHREYXRhOiBvUGFnZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aFBhZ2Vcblx0XHR9KTtcblx0XHQvLyBBZGRpbmcgUGFnZSBDb250ZXh0IHRvIHNlbGVjdGlvbiB2YXJpYW50XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhUGFnZUF0dHJpYnV0ZXMsIG9NZXRhTW9kZWwpO1xuXHRcdGNvbnN0IG9QYWdlTGV2ZWxTViA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG5ldyBTZWxlY3Rpb25WYXJpYW50KCksIGFQYWdlQXR0cmlidXRlcywgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdGFBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgb01ldGFNb2RlbCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzS2V5XTtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qXG5cdCAqIFJlc2V0IEJyZWFkY3J1bWIgbGlua3Ncblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c2FwLm0uQnJlYWRjcnVtYnN9IFtvU291cmNlXSBwYXJlbnQgY29udHJvbFxuXHQgKiBAZGVzY3JpcHRpb24gVXNlZCB3aGVuIGNvbnRleHQgb2YgdGhlIG9iamVjdCBwYWdlIGNoYW5nZXMuXG5cdCAqICAgICAgICAgICAgICBUaGlzIGV2ZW50IGNhbGxiYWNrIGlzIGF0dGFjaGVkIHRvIG1vZGVsQ29udGV4dENoYW5nZVxuXHQgKiAgICAgICAgICAgICAgZXZlbnQgb2YgdGhlIEJyZWFkY3J1bWIgY29udHJvbCB0byBjYXRjaCBjb250ZXh0IGNoYW5nZS5cblx0ICogICAgICAgICAgICAgIFRoZW4gZWxlbWVudCBiaW5kaW5nIGFuZCBocmVmcyBhcmUgdXBkYXRlZCBmb3IgZWFjaCBsaW5rLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKi9cblx0YXN5bmMgX3NldEJyZWFkY3J1bWJMaW5rcyhvU291cmNlOiBCcmVhZENydW1icykge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0b0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdLFxuXHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkOiBhbnlbXSA9IFtdLFxuXHRcdFx0c05ld1BhdGggPSBvQ29udGV4dD8uZ2V0UGF0aCgpLFxuXHRcdFx0YVBhdGhQYXJ0cyA9IHNOZXdQYXRoPy5zcGxpdChcIi9cIikgPz8gW10sXG5cdFx0XHRvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cdFx0dHJ5IHtcblx0XHRcdGFQYXRoUGFydHMuc2hpZnQoKTtcblx0XHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRcdGFQYXRoUGFydHMuZm9yRWFjaChmdW5jdGlvbiAoc1BhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0c1BhdGggKz0gYC8ke3NQYXRoUGFydH1gO1xuXHRcdFx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBSb290Q29udGFpbmVyQmFzZUNvbnRyb2xsZXI7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdFx0XHRcdGNvbnN0IGJSZXN1bHRDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhcmFtZXRlclBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdFx0XHRpZiAoYlJlc3VsdENvbnRleHQpIHtcblx0XHRcdFx0XHQvLyBXZSBkb250IG5lZWQgdG8gY3JlYXRlIGEgYnJlYWRjcnVtYiBmb3IgUGFyYW1ldGVyIHBhdGhcblx0XHRcdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQucHVzaCgxKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkLnB1c2goMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YVByb21pc2VzLnB1c2gob1Jvb3RWaWV3Q29udHJvbGxlci5nZXRUaXRsZUluZm9Gcm9tUGF0aChzUGF0aCkpO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCB0aXRsZUhpZXJhcmNoeUluZm9zOiBhbnlbXSA9IGF3YWl0IFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG5cdFx0XHRsZXQgaWR4LCBoaWVyYXJjaHlQb3NpdGlvbiwgb0xpbms7XG5cdFx0XHRmb3IgKGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mbyBvZiB0aXRsZUhpZXJhcmNoeUluZm9zKSB7XG5cdFx0XHRcdGhpZXJhcmNoeVBvc2l0aW9uID0gdGl0bGVIaWVyYXJjaHlJbmZvcy5pbmRleE9mKHRpdGxlSGllcmFyY2h5SW5mbyk7XG5cdFx0XHRcdGlkeCA9IGhpZXJhcmNoeVBvc2l0aW9uIC0gYVNraXBQYXJhbWV0ZXJpemVkW2hpZXJhcmNoeVBvc2l0aW9uXTtcblx0XHRcdFx0b0xpbmsgPSBvU291cmNlLmdldExpbmtzKClbaWR4XSA/IG9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdIDogbmV3IExpbmsoKTtcblx0XHRcdFx0Ly9zQ3VycmVudEVudGl0eSBpcyBhIGZhbGxiYWNrIHZhbHVlIGluIGNhc2Ugb2YgZW1wdHkgdGl0bGVcblx0XHRcdFx0b0xpbmsuc2V0VGV4dCh0aXRsZUhpZXJhcmNoeUluZm8uc3VidGl0bGUgfHwgdGl0bGVIaWVyYXJjaHlJbmZvLnRpdGxlKTtcblx0XHRcdFx0Ly9XZSBhcHBseSBhbiBhZGRpdGlvbmFsIGVuY29kZVVSSSBpbiBjYXNlIG9mIHNwZWNpYWwgY2hhcmFjdGVycyAoaWUgXCIvXCIpIHVzZWQgaW4gdGhlIHVybCB0aHJvdWdoIHRoZSBzZW1hbnRpYyBrZXlzXG5cdFx0XHRcdG9MaW5rLnNldEhyZWYoZW5jb2RlVVJJKHRpdGxlSGllcmFyY2h5SW5mby5pbnRlbnQpKTtcblx0XHRcdFx0aWYgKCFvU291cmNlLmdldExpbmtzKClbaWR4XSkge1xuXHRcdFx0XHRcdG9Tb3VyY2UuYWRkTGluayhvTGluayk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHRoZSBicmVhZGNydW1iIGxpbmtzOlwiICsgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdF9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvRGF0YVBvaW50cyA9IENvbW1vblV0aWxzLmdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0XHRcdG9WaWV3LmdldFZpZXdEYXRhKCksXG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0T3V0Ym91bmRzKClcblx0XHQpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb1ZpZXcgJiYgKG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IGFueSkge1xuXHRcdFx0XHRcdGZuR2V0TGlua3Mob0RhdGFQb2ludHMsIG9EYXRhKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0Vycm9yXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5PbkVycm9yKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmblNldExpbmtFbmFibGVtZW50KGlkOiBzdHJpbmcsIGFTdXBwb3J0ZWRMaW5rczogYW55KSB7XG5cdFx0XHRjb25zdCBzTGlua0lkID0gaWQ7XG5cdFx0XHQvLyBwcm9jZXNzIHZpYWJsZSBsaW5rcyBmcm9tIGdldExpbmtzIGZvciBhbGwgZGF0YXBvaW50cyBoYXZpbmcgb3V0Ym91bmRcblx0XHRcdGlmIChhU3VwcG9ydGVkTGlua3MgJiYgYVN1cHBvcnRlZExpbmtzLmxlbmd0aCA9PT0gMSAmJiBhU3VwcG9ydGVkTGlua3NbMF0uc3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgaXNIZWFkZXJEUExpbmtWaXNpYmxlLyR7c0xpbmtJZH1gLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1N1YkRhdGFQb2ludHNcblx0XHQgKiBAcGFyYW0gb1BhZ2VEYXRhXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5HZXRMaW5rcyhvU3ViRGF0YVBvaW50czogYW55LCBvUGFnZURhdGE6IGFueSkge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgaW4gb1N1YkRhdGFQb2ludHMpIHtcblx0XHRcdFx0Y29uc3Qgb0RhdGFQb2ludCA9IG9TdWJEYXRhUG9pbnRzW3NJZF07XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXM6IGFueSA9IHt9O1xuXHRcdFx0XHRjb25zdCBvTGluayA9IG9WaWV3LmJ5SWQoc0lkKTtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIGZvciBkYXRhIHBvaW50cyBjb25maWd1cmVkIGluIGFwcCBkZXNjcmlwdG9yIGJ1dCBub3QgYW5ub3RhdGVkIGluIHRoZSBoZWFkZXJcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvTGlua0NvbnRleHQgPSBvTGluay5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTGlua0RhdGE6IGFueSA9IG9MaW5rQ29udGV4dCAmJiBvTGlua0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBvTWl4ZWRDb250ZXh0OiBhbnkgPSBtZXJnZSh7fSwgb1BhZ2VEYXRhLCBvTGlua0RhdGEpO1xuXHRcdFx0XHQvLyBwcm9jZXNzIHNlbWFudGljIG9iamVjdCBtYXBwaW5nc1xuXHRcdFx0XHRpZiAob0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmc7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIGluIGFTZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9NYXBwaW5nID0gYVNlbWFudGljT2JqZWN0TWFwcGluZ1tpdGVtXTtcblx0XHRcdFx0XHRcdGNvbnN0IHNNYWluUHJvcGVydHkgPSBvTWFwcGluZ1tcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01hcHBlZFByb3BlcnR5ID0gb01hcHBpbmdbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdO1xuXHRcdFx0XHRcdFx0aWYgKHNNYWluUHJvcGVydHkgIT09IHNNYXBwZWRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRpZiAob01peGVkQ29udGV4dC5oYXNPd25Qcm9wZXJ0eShzTWFpblByb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9OZXdNYXBwaW5nOiBhbnkgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRvTmV3TWFwcGluZ1tzTWFwcGVkUHJvcGVydHldID0gb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0XHRvTWl4ZWRDb250ZXh0ID0gbWVyZ2Uoe30sIG9NaXhlZENvbnRleHQsIG9OZXdNYXBwaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmIChzS2V5LmluZGV4T2YoXCJfXCIpICE9PSAwICYmIHNLZXkuaW5kZXhPZihcIm9kYXRhLmNvbnRleHRcIikgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSBvTWl4ZWRDb250ZXh0W3NLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyB2YWxpZGF0ZSBpZiBhIGxpbmsgbXVzdCBiZSByZW5kZXJlZFxuXHRcdFx0XHRvU2hlbGxTZXJ2aWNlc1xuXHRcdFx0XHRcdC5pc05hdmlnYXRpb25TdXBwb3J0ZWQoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IG9EYXRhUG9pbnQuYWN0aW9uXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHBhcmFtczogb1BhcmFtc1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0LnRoZW4oKGFMaW5rcykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuU2V0TGlua0VuYWJsZW1lbnQoc0lkLCBhTGlua3MpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZuT25FcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0LyoqXG5cdFx0ICogSW52b2tlcyB0aGUgcGFnZSBwcmltYXJ5IGFjdGlvbiBvbiBwcmVzcyBvZiBDdHJsK0VudGVyLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyIFRoZSBwYWdlIGNvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gb1ZpZXdcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyBjYWxsZWRcblx0XHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jb250ZXh0c10gTWFuZGF0b3J5IGZvciBhIGJvdW5kIGFjdGlvbiwgZWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5tb2RlbF0gTWFuZGF0b3J5IGZvciBhbiB1bmJvdW5kIGFjdGlvbjsgYW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zXSBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvblZpc2libGVdIFRoZSB2aXNpYmlsaXR5IG9mIHNlbWF0aWMgcG9zaXRpdmUgYWN0aW9uXG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvbkVuYWJsZWRdIFRoZSBlbmFibGVtZW50IG9mIHNlbWFudGljIHBvc2l0aXZlIGFjdGlvblxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnMuZWRpdEFjdGlvblZpc2libGVdIFRoZSBFZGl0IGJ1dHRvbiB2aXNpYmlsaXR5XG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9ucy5lZGl0QWN0aW9uRW5hYmxlZF0gVGhlIGVuYWJsZW1lbnQgb2YgRWRpdCBidXR0b25cblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvblByaW1hcnlBY3Rpb24oXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvVmlldzogVmlldyxcblx0XHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB1bmtub3duLFxuXHRcdFx0bUNvbmRpdGlvbnM6IHtcblx0XHRcdFx0cG9zaXRpdmVBY3Rpb25WaXNpYmxlOiBib29sZWFuO1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25WaXNpYmxlOiBib29sZWFuO1xuXHRcdFx0XHRlZGl0QWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdH1cblx0XHQpIHtcblx0XHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSAob0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS52aWV3TGV2ZWwsXG5cdFx0XHRcdG9PYmplY3RQYWdlID0gb0NvbnRyb2xsZXIuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5oYW5kbGVycy5vbkNhbGxBY3Rpb24ob1ZpZXcsIHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvblZpc2libGUgJiYgaVZpZXdMZXZlbCA9PT0gMSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fZWRpdERvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpVmlld0xldmVsID09PSAxICYmIG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fc2F2ZURvY3VtZW50KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdFx0XHR9IGVsc2UgaWYgKG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fYXBwbHlEb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG9uVGFibGVDb250ZXh0Q2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb1NvdXJjZSA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGxldCBvVGFibGU6IGFueTtcblx0XHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5zb21lKGZ1bmN0aW9uIChfb1RhYmxlOiBhbnkpIHtcblx0XHRcdFx0aWYgKF9vVGFibGUuZ2V0Um93QmluZGluZygpID09PSBvU291cmNlKSB7XG5cdFx0XHRcdFx0b1RhYmxlID0gX29UYWJsZTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3Qgb0N1cnJlbnRBY3Rpb25Qcm9taXNlID0gdGhpcy5fZWRpdEZsb3cuZ2V0Q3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdGlmIChvQ3VycmVudEFjdGlvblByb21pc2UpIHtcblx0XHRcdFx0bGV0IGFUYWJsZUNvbnRleHRzOiBhbnk7XG5cdFx0XHRcdGlmIChvVGFibGUuZ2V0VHlwZSgpLmdldE1ldGFkYXRhKCkuaXNBKFwic2FwLnVpLm1kYy50YWJsZS5HcmlkVGFibGVUeXBlXCIpKSB7XG5cdFx0XHRcdFx0YVRhYmxlQ29udGV4dHMgPSBvU291cmNlLmdldENvbnRleHRzKDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzID0gb1NvdXJjZS5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL2lmIGNvbnRleHRzIGFyZSBub3QgZnVsbHkgbG9hZGVkIHRoZSBnZXRjb250ZXh0cyBmdW5jdGlvbiBhYm92ZSB3aWxsIHRyaWdnZXIgYSBuZXcgY2hhbmdlIGV2ZW50IGNhbGxcblx0XHRcdFx0aWYgKCFhVGFibGVDb250ZXh0c1swXSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRvQ3VycmVudEFjdGlvblByb21pc2Vcblx0XHRcdFx0XHQudGhlbigob0FjdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGlmICghb0FjdGlvblJlc3BvbnNlIHx8IG9BY3Rpb25SZXNwb25zZS5jb250cm9sSWQgIT09IG9UYWJsZS5zSWQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3Qgb0FjdGlvbkRhdGEgPSBvQWN0aW9uUmVzcG9uc2Uub0RhdGE7XG5cdFx0XHRcdFx0XHRjb25zdCBhS2V5cyA9IG9BY3Rpb25SZXNwb25zZS5rZXlzO1xuXHRcdFx0XHRcdFx0bGV0IGlOZXdJdGVtcCA9IC0xO1xuXHRcdFx0XHRcdFx0YVRhYmxlQ29udGV4dHMuZmluZChmdW5jdGlvbiAob1RhYmxlQ29udGV4dDogYW55LCBpOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb1RhYmxlRGF0YSA9IG9UYWJsZUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJDb21wYXJlID0gYUtleXMuZXZlcnkoZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvVGFibGVEYXRhW3NLZXldID09PSBvQWN0aW9uRGF0YVtzS2V5XTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGlmIChiQ29tcGFyZSkge1xuXHRcdFx0XHRcdFx0XHRcdGlOZXdJdGVtcCA9IGk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJDb21wYXJlO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAoaU5ld0l0ZW1wICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhRGlhbG9ncyA9IEluc3RhbmNlTWFuYWdlci5nZXRPcGVuRGlhbG9ncygpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvRGlhbG9nID1cblx0XHRcdFx0XHRcdFx0XHRhRGlhbG9ncy5sZW5ndGggPiAwID8gYURpYWxvZ3MuZmluZCgoZGlhbG9nKSA9PiBkaWFsb2cuZGF0YShcIkZ1bGxTY3JlZW5EaWFsb2dcIikgIT09IHRydWUpIDogbnVsbDtcblx0XHRcdFx0XHRcdFx0aWYgKG9EaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBieSBkZXNpZ24sIGEgc2FwLm0uZGlhbG9nIHNldCB0aGUgZm9jdXMgdG8gdGhlIHByZXZpb3VzIGZvY3VzZWQgZWxlbWVudCB3aGVuIGNsb3NpbmcuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBkaWFsb2cgdG8gYmUgY2xvc2UgYmVmb3JlIHRvIGZvY3VzIGFub3RoZXIgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuYXR0YWNoRXZlbnRPbmNlKFwiYWZ0ZXJDbG9zZVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvVGFibGUuZm9jdXNSb3coaU5ld0l0ZW1wLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRvVGFibGUuZm9jdXNSb3coaU5ld0l0ZW1wLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLl9lZGl0Rmxvdy5kZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnI6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgc2Nyb2xsaW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIEl0ZW06ICR7ZXJyfWApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gZmlyZSBNb2RlbENvbnRleHRDaGFuZ2Ugb24gdGhlIG1lc3NhZ2UgYnV0dG9uIHdoZW5ldmVyIHRoZSB0YWJsZSBjb250ZXh0IGNoYW5nZXNcblx0XHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5maXJlTW9kZWxDb250ZXh0Q2hhbmdlKCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEludm9rZXMgYW4gYWN0aW9uIC0gYm91bmQvdW5ib3VuZCBhbmQgc2V0cyB0aGUgcGFnZSBkaXJ0eS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvVmlld1xuXHRcdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmNvbnRleHRzXSBNYW5kYXRvcnkgZm9yIGEgYm91bmQgYWN0aW9uLCBlaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1vZGVsXSBNYW5kYXRvcnkgZm9yIGFuIHVuYm91bmQgYWN0aW9uOyBhbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuXHRcdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gcHJvbWlzZVxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uQ2FsbEFjdGlvbihvVmlldzogYW55LCBzQWN0aW9uTmFtZTogc3RyaW5nLCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvd1xuXHRcdFx0XHQuaW52b2tlQWN0aW9uKHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycylcblx0XHRcdFx0LnRoZW4ob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyLCB1bmRlZmluZWQpKVxuXHRcdFx0XHQuY2F0Y2gob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyKSk7XG5cdFx0fSxcblx0XHRvbkRhdGFQb2ludFRpdGxlUHJlc3NlZChvQ29udHJvbGxlcjogYW55LCBvU291cmNlOiBhbnksIG9NYW5pZmVzdE91dGJvdW5kOiBhbnksIHNDb250cm9sQ29uZmlnOiBhbnksIHNDb2xsZWN0aW9uUGF0aDogYW55KSB7XG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZCA9IHR5cGVvZiBvTWFuaWZlc3RPdXRib3VuZCA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uob01hbmlmZXN0T3V0Ym91bmQpIDogb01hbmlmZXN0T3V0Ym91bmQ7XG5cdFx0XHRjb25zdCBvVGFyZ2V0SW5mbyA9IG9NYW5pZmVzdE91dGJvdW5kW3NDb250cm9sQ29uZmlnXSxcblx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvVGFyZ2V0SW5mbyksXG5cdFx0XHRcdG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHRcblx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhUGF0aChvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRsZXQgYU5hdmlnYXRpb25EYXRhID0gb0NvbnRyb2xsZXIuX2dldENoYXJ0Q29udGV4dERhdGEob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCwgc0NvbGxlY3Rpb25QYXRoKTtcblx0XHRcdGxldCBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cblx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IGFOYXZpZ2F0aW9uRGF0YS5tYXAoZnVuY3Rpb24gKG9OYXZpZ2F0aW9uRGF0YTogYW55KSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZGF0YTogb05hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdG1ldGFQYXRoOiBzTWV0YVBhdGggKyAoc0NvbGxlY3Rpb25QYXRoID8gYC8ke3NDb2xsZWN0aW9uUGF0aH1gIDogXCJcIilcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMgJiYgb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5nZXRPdXRib3VuZFBhcmFtcyhvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKTtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMgPSBvUGFyYW1zO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QgJiYgb1RhcmdldEluZm8uYWN0aW9uKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUob1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QsIG9UYXJnZXRJbmZvLmFjdGlvbiwge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogYU5hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWQgKD8/PyBtYXliZSBvbmx5IG9uY2UgZmluaXNoZWQ/KVxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldDogc3RyaW5nLCBvQ29udGV4dDogYW55LCBzQ3JlYXRlUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXG5cdFx0b25OYXZpZ2F0ZUNoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdC8vd2lsbCBiZSBjYWxsZWQgYWx3YXlzIHdoZW4gd2UgY2xpY2sgb24gYSBzZWN0aW9uIHRhYlxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0dGhpcy5iU2VjdGlvbk5hdmlnYXRlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSAmJlxuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnNlY3Rpb25MYXlvdXQgPT09IFwiVGFic1wiICYmXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIpID09PSBmYWxzZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShbb1N1YlNlY3Rpb25dKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdC8vVE9ETzogU2hvdWxkIHJlbW92ZSB0aGlzIHNldFRpbWVPdXQgb25jZSBWYXJpYW50IE1hbmFnZW1lbnQgcHJvdmlkZXMgYW4gYXBpIHRvIGZldGNoIHRoZSBjdXJyZW50IHZhcmlhbnQga2V5IG9uIHNhdmVcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9LCA1MDApO1xuXHRcdH0sXG5cdFx0bmF2aWdhdGVUb1N1YlNlY3Rpb246IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHZEZXRhaWxDb25maWc6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0RldGFpbENvbmZpZyA9IHR5cGVvZiB2RGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGV0YWlsQ29uZmlnKSA6IHZEZXRhaWxDb25maWc7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0XHRcdGxldCBvU2VjdGlvbjtcblx0XHRcdGxldCBvU3ViU2VjdGlvbjtcblx0XHRcdGlmIChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSAoXG5cdFx0XHRcdFx0b0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWRcblx0XHRcdFx0XHRcdD8gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpXG5cdFx0XHRcdFx0XHQ6IG9TZWN0aW9uICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkgJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKVswXVxuXHRcdFx0XHQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIGlmIChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdFx0b1NlY3Rpb24gPSBvU3ViU2VjdGlvbiAmJiAob1N1YlNlY3Rpb24uZ2V0UGFyZW50KCkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvU2VjdGlvbiB8fCAhb1N1YlNlY3Rpb24gfHwgIW9TZWN0aW9uLmdldFZpc2libGUoKSB8fCAhb1N1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdCgob0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzVGl0bGUgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFx0XHRcdFx0XCJDX1JPVVRJTkdfTkFWSUdBVElPTl9ESVNBQkxFRF9USVRMRVwiLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVudGl0eVNldFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihzVGl0bGUpO1xuXHRcdFx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihzVGl0bGUpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNjcm9sbFRvU2VjdGlvbihvU3ViU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdFx0Ly8gdHJpZ2dlciBpYXBwIHN0YXRlIGNoYW5nZVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5maXJlTmF2aWdhdGUoe1xuXHRcdFx0XHRcdHNlY3Rpb246IG9TZWN0aW9uLFxuXHRcdFx0XHRcdHN1YlNlY3Rpb246IG9TdWJTZWN0aW9uXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25DaGFydFNlbGVjdGlvbkNoYW5nZWQ6IGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0Q2hhcnRSdW50aW1lLmZuVXBkYXRlQ2hhcnQob0V2ZW50KTtcblx0XHR9LFxuXHRcdG9uU3RhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdFBhZ2VDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7RUFrakJPLGdCQUFnQkEsSUFBSSxFQUFFQyxPQUFPLEVBQUU7SUFDckMsSUFBSTtNQUNILElBQUlDLE1BQU0sR0FBR0YsSUFBSSxFQUFFO0lBQ3BCLENBQUMsQ0FBQyxPQUFNRyxDQUFDLEVBQUU7TUFDVixPQUFPRixPQUFPLENBQUNFLENBQUMsQ0FBQztJQUNsQjtJQUNBLElBQUlELE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxJQUFJLEVBQUU7TUFDMUIsT0FBT0YsTUFBTSxDQUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUVILE9BQU8sQ0FBQztJQUNwQztJQUNBLE9BQU9DLE1BQU07RUFDZDtFQUdPLDBCQUEwQkYsSUFBSSxFQUFFSyxTQUFTLEVBQUU7SUFDakQsSUFBSTtNQUNILElBQUlILE1BQU0sR0FBR0YsSUFBSSxFQUFFO0lBQ3BCLENBQUMsQ0FBQyxPQUFPRyxDQUFDLEVBQUU7TUFDWCxPQUFPRSxTQUFTLENBQUMsSUFBSSxFQUFFRixDQUFDLENBQUM7SUFDMUI7SUFDQSxJQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBSSxFQUFFO01BQzFCLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDQyxTQUFTLENBQUNDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUVELFNBQVMsQ0FBQ0MsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RTtJQUNBLE9BQU9ELFNBQVMsQ0FBQyxLQUFLLEVBQUVILE1BQU0sQ0FBQztFQUNoQztFQUFDO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFB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