@sapui5/sap.fe.macros 1.142.1 → 1.142.2

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.
Files changed (29) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/controls/FileWrapper.js +4 -3
  4. package/src/sap/fe/macros/controls/FileWrapper.ts +3 -2
  5. package/src/sap/fe/macros/controls/Section.js +3 -2
  6. package/src/sap/fe/macros/controls/Section.ts +1 -1
  7. package/src/sap/fe/macros/field/FieldTemplating.js +1 -1
  8. package/src/sap/fe/macros/field/FieldTemplating.ts +1 -1
  9. package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -2
  10. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +1 -0
  11. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +23 -3
  12. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +24 -2
  13. package/src/sap/fe/macros/library.js +1 -1
  14. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +5 -1
  15. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +4 -0
  16. package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -4
  17. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +4 -3
  18. package/src/sap/fe/macros/table/TableAPI.js +17 -4
  19. package/src/sap/fe/macros/table/TableAPI.ts +15 -0
  20. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +10 -1
  21. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +10 -0
  22. package/src/sap/fe/macros/table/TableRuntime.js +6 -4
  23. package/src/sap/fe/macros/table/TableRuntime.ts +16 -3
  24. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -4
  25. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -2
  26. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +10 -4
  27. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +9 -3
  28. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +25 -9
  29. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +33 -17
@@ -89,6 +89,7 @@ import type Menu from "sap/m/Menu";
89
89
  import MessageBox from "sap/m/MessageBox";
90
90
  import MessageToast from "sap/m/MessageToast";
91
91
  import Text from "sap/m/Text";
92
+ import type CellSelector from "sap/m/plugins/CellSelector";
92
93
  import type { DataStateIndicator$DataStateChangeEvent } from "sap/m/plugins/DataStateIndicator";
93
94
  import type { PasteProvider$PasteEvent } from "sap/m/plugins/PasteProvider";
94
95
  import type { default as Event, default as UI5Event } from "sap/ui/base/Event";
@@ -1442,6 +1443,20 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
1442
1443
  }
1443
1444
  }
1444
1445
 
1446
+ /**
1447
+ * Handles the Paste enablement event.
1448
+ * @param evt The UI5 event.
1449
+ */
1450
+ @xmlEventHandler()
1451
+ pasteEnablementHandler(evt: UI5Event<{}, CellSelector>): void {
1452
+ const cellsSelection = evt.getSource().getSelection();
1453
+ if (cellsSelection.columns.length === 0 && cellsSelection.rows.length === 0) {
1454
+ this.content.getBindingContext("internal")?.setProperty("cellSelectorHasSelection", false);
1455
+ return;
1456
+ }
1457
+ this.content.getBindingContext("internal")?.setProperty("cellSelectorHasSelection", true);
1458
+ }
1459
+
1445
1460
  /**
1446
1461
  * Handles the Cut operation.
1447
1462
  * @param evt The UI5 event.
@@ -178,6 +178,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/helper
178
178
  } else {
179
179
  return `TableRuntime.onCreateMenuItemPress($event, ${index}, \${internal>${path}})`;
180
180
  }
181
+ };
182
+ _proto.getCellsSelectionHandler = function getCellsSelectionHandler() {
183
+ if (this.tableAPI) {
184
+ return e => {
185
+ this.tableAPI.pasteEnablementHandler(e);
186
+ };
187
+ } else {
188
+ return `API.pasteEnablementHandler($event)`;
189
+ }
181
190
  }
182
191
 
183
192
  /**
@@ -460,4 +469,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/helper
460
469
  _exports = TableEventHandlerProvider;
461
470
  return _exports;
462
471
  }, false);
463
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZWxlY3Rpb25MaW1pdEZvclNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsInRhYmxlQmxvY2tQcm9wZXJ0aWVzIiwic2V0dGluZ3MiLCJ0YWJsZUFQSSIsImNvbGxlY3Rpb25FbnRpdHkiLCJtZXRhTW9kZWwiLCJjb25zdHJ1Y3RvcldpdGhGdW5jdGlvbnMiLCJjb25zdHJ1Y3RvcldpdGhTdHJpbmdzIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJ0YWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJjb250cm9sIiwidHlwZSIsImFkZENhcmRUb0luc2lnaHRzUHJlc3MiLCJiZWZvcmVFeHBvcnQiLCJiZWZvcmVPcGVuQ29udGV4dE1lbnUiLCJjb2xsYXBzZU5vZGUiLCJ1bmRlZmluZWQiLCJjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCIsInJvd05hdmlnYXRpb25JbmZvIiwiYW5ub3RhdGlvbiIsInJvdyIsIm5hdmlnYXRpb25JbmZvIiwib3ZlcnJpZGVSb3dQcmVzcyIsImNvbnRleHRNZW51T3BlbkluTmV3VGFiIiwibmF2aWdhdGlvblRhcmdldCIsImNvbnRleHRNZW51U2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyIiwidGFyZ2V0UGF0aCIsImRhdGFTdGF0ZUNoYW5nZSIsImhhc0RhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImRyYWdTdGFydERvY3VtZW50IiwiZHJhZ0VudGVyRG9jdW1lbnQiLCJkcm9wRG9jdW1lbnQiLCJleHBhbmROb2RlIiwiZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93IiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwiZmllbGRMaXZlQ2hhbmdlIiwiY3JlYXRpb25Nb2RlIiwibmFtZSIsInJvd1ByZXNzIiwibm9vcCIsInNlZ21lbnRlZEJ1dHRvblByZXNzIiwic2VsZWN0aW9uQ2hhbmdlIiwidGFibGVDb250ZXh0Q2hhbmdlIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwidXBsb2FkQ29tcGxldGVkIiwidXBsb2FkRmlsZU5hbWVMZW5ndGhFeGNlZWRlZCIsInVwbG9hZEZpbGVTaXplRXhjZWVkZWQiLCJ1cGxvYWRJdGVtVmFsaWRhdGlvbkhhbmRsZXIiLCJ1cGxvYWRNZWRpYVR5cGVNaXNtYXRjaCIsInZhcmlhbnRTYXZlZCIsInZhcmlhbnRTZWxlY3RlZCIsIm9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkIiwiYmluZCIsIm9uQmVmb3JlRXhwb3J0Iiwib25Db250ZXh0TWVudVByZXNzIiwiZSIsIm9uQ29sbGFwc2VFeHBhbmROb2RlIiwiVGFibGVSdW50aW1lIiwib25Db250ZXh0TWVudUl0ZW1TZWxlY3RlZCIsIl9lIiwiY29udHJvbGxlciIsImdldFBhZ2VDb250cm9sbGVyIiwiaW50ZXJuYWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvbk9wZW5Jbk5ld1RhYk5hdmlnYXRlT3V0Qm91bmQiLCJnZXRQcm9wZXJ0eSIsIm9uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MiLCJvbk9wZW5Jbk5ld1RhYlByZXNzIiwiY2FsbEV4dGVuc2lvbiIsIm5hdk1vZGUiLCJvbkRhdGFTdGF0ZUNoYW5nZSIsIm9uRHJhZ1N0YXJ0RG9jdW1lbnQiLCJvbkRyYWdFbnRlckRvY3VtZW50Iiwib25Ecm9wRG9jdW1lbnQiLCJvbkZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdyIsIm9uRmllbGRMaXZlQ2hhbmdlIiwib25UYWJsZVJvd1ByZXNzIiwib25Ob29wIiwib25TZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwib25TZWxlY3Rpb25DaGFuZ2VkIiwib25UcmVlVGFibGVDb250ZXh0Q2hhbmdlZCIsIlVwbG9hZFRhYmxlUnVudGltZSIsIm9uVXBsb2FkQ29tcGxldGVkIiwib25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkIiwib25GaWxlU2l6ZUV4Y2VlZGVkIiwidXBsb2FkRmlsZSIsIm9uTWVkaWFUeXBlTWlzbWF0Y2giLCJvblZhcmlhbnRTYXZlZCIsIm9uVmFyaWFudFNlbGVjdGVkIiwiZ2V0Q3JlYXRlQnV0dG9uUHJlc3NIYW5kbGVyIiwiZm9yQ29udGV4dE1lbnUiLCJmb3JDcmVhdGlvblJvdyIsIm9uQ3JlYXRlQnV0dG9uUHJlc3MiLCJwYXRoIiwiZ2V0Q3JlYXRlTWVudUl0ZW1QcmVzc0hhbmRsZXIiLCJpbmRleCIsIm9uQ3JlYXRlTWVudUl0ZW1QcmVzcyIsImdldEN1dEhhbmRsZXIiLCJvbkN1dCIsImdldENvcHlIYW5kbGVyIiwib25Db3B5IiwiZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyIiwiZGF0YUZpZWxkIiwiYWN0aW9uIiwiYWN0aW9uQ29udGV4dFBhdGgiLCJhbm5vdGF0aW9uUGF0aCIsIkNvbW1vbkhlbHBlciIsImdldEFjdGlvbkNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImFjdGlvbkNvbnRleHQiLCJhY3Rpb25OYW1lIiwiQWN0aW9uIiwidGFyZ2V0RW50aXR5VHlwZU5hbWUiLCJjb250ZXh0T2JqZWN0UGF0aCIsInRhcmdldEVudGl0eVR5cGUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJpc1N0YXRpY0FjdGlvbiIsImdldE9iamVjdCIsIlRhYmxlSGVscGVyIiwiX2lzU3RhdGljQWN0aW9uIiwiX2lzQWN0aW9uT3ZlcmxvYWRPbkRpZmZlcmVudFR5cGUiLCJ0b1N0cmluZyIsImFwcGxpY2FibGVQcm9wZXJ0eVBhdGgiLCJub3RBcHBsaWNhYmxlUHJvcGVydHlQYXRoIiwiY29udGV4dE1lbnVQYXRoIiwicGFyYW1zIiwiY29udGV4dHMiLCJiU3RhdGljQWN0aW9uIiwiZW50aXR5U2V0TmFtZSIsImFwcGxpY2FibGVDb250ZXh0cyIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsImlzTmF2aWdhYmxlIiwiZW5hYmxlQXV0b1Njcm9sbCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImNvbnRyb2xJZCIsImNvbnRlbnRJZCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImxhYmVsIiwiTGFiZWwiLCJ2YWx1ZU9mIiwibW9kZWwiLCJnZXRNb2RlbCIsImRpc2FibGVTdHJpY3RIYW5kbGluZyIsIm9uQWN0aW9uUHJlc3MiLCJwcmVzc0V2ZW50RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uIiwiZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyIiwiZGF0YUZpZWxkQ29udGV4dCIsIm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyIsImVuYWJsZUFuYWx5dGljcyIsIm5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2aWdhdGlvbkNvbnRleHRzIiwiUmVxdWlyZXNDb250ZXh0IiwiSW5saW5lIiwiYXBwbGljYWJsZVByb3BlcnR5Iiwibm90QXBwbGljYWJsZVByb3BlcnR5IiwiU2VtYW50aWNPYmplY3QiLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJNYXBwaW5nIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldFNvdXJjZSIsIm5hdmlnYXRlIiwiZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOIiwiZ2V0RXhwcmVzc2lvbkZvckRhdGFGaWVsZFZhbHVlIiwiZnVsbENvbnRleHRQYXRoIiwidmFsdWUiLCJWYWx1ZSIsImFkZFNpbmdsZVF1b3RlcyIsImV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJpc0NvbnN0YW50IiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJ2YWx1ZUV4cHJlc3Npb24iLCJmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXREZWxldGVCdXR0b25QcmVzc0hhbmRsZXIiLCJoZWFkZXJJbmZvIiwiZW50aXR5VHlwZSIsInRhcmdldFR5cGUiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGVhZGVySW5mbyIsImRlbGV0YWJsZUNvbnRleHRzUGF0aCIsInNlbGVjdGVkQ29udGV4dHNQYXRoIiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzUGF0aCIsInVuU2F2ZWRDb250ZXh0c1BhdGgiLCJsb2NrZWRDb250ZXh0c1BhdGgiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlUGF0aCIsImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVQYXRoIiwidGl0bGVFeHByZXNzaW9uIiwiVGl0bGUiLCJkZXNjcmlwdGlvbkV4cHJlc3Npb24iLCJEZXNjcmlwdGlvbiIsImlkIiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwidW5TYXZlZENvbnRleHRzIiwibG9ja2VkQ29udGV4dHMiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJzZWxlY3RlZENvbnRleHRzIiwiZWRpdEZsb3ciLCJkZWxldGVNdWx0aXBsZURvY3VtZW50cyIsImdlbmVyYXRlRnVuY3Rpb24iLCJvYmplY3RUb1N0cmluZyIsImdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyIiwibm9XcmFwIiwicmVsYXRlZEFjdGlvbkVsZW1lbnQiLCJmaW5kU2xvdEFjdGlvbkZyb21LZXkiLCJrZXkiLCJpbnRlcm5hbE1vZGVsUGF0aCIsImV2ZW50UGFyYW1ldGVycyIsImdldFBhcmFtZXRlcnMiLCJmaXJlRXZlbnQiLCJMb2ciLCJlcnJvciIsIkZQTUhlbHBlciIsImFjdGlvbldyYXBwZXIiLCJoYW5kbGVyTW9kdWxlIiwiaGFuZGxlck1ldGhvZCIsImNhdGNoIiwiZXJyIiwicHJlc3MiLCJidWlsZEFjdGlvbldyYXBwZXIiLCJnZXRNYXNzRWRpdEJ1dHRvblByZXNzSGFuZGxlciIsIm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkIiwiZ2V0TW92ZVVwRG93bkhhbmRsZXIiLCJmb3JNb3ZlVXAiLCJvbk1vdmVVcERvd24iLCJnZXRQYXN0ZUhhbmRsZXIiLCJvblBhc3RlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7XG5cdHR5cGUgRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHR0eXBlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0dHlwZSBEYXRhRmllbGRUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIGlzQ29uc3RhbnQsIGlzUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyB0eXBlIEJhc2VBY3Rpb24sIHR5cGUgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IHR5cGUgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCIuLi9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCIuLi9GaWVsZFwiO1xuaW1wb3J0IHsgdHlwZSBUYWJsZUJsb2NrUHJvcGVydGllcyB9IGZyb20gXCIuL01kY1RhYmxlVGVtcGxhdGVcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCIuL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcIi4vVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVJ1bnRpbWUgZnJvbSBcIi4vVGFibGVSdW50aW1lXCI7XG5pbXBvcnQgVXBsb2FkVGFibGVSdW50aW1lIGZyb20gXCIuL3VwbG9hZFRhYmxlL1VwbG9hZFRhYmxlUnVudGltZVwiO1xuXG50eXBlIEV2ZW50SGFuZGxlclR5cGUgPSAoZTogVUk1RXZlbnQpID0+IHZvaWQ7XG5cbi8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIHNoYXJlIHRvIENvbGxhYm9yYXRpb24gTWFuYWdlciBzaW11bHRhbm91c2x5XG5jb25zdCBzZWxlY3Rpb25MaW1pdEZvclNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciA9IDE7XG4vLyBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byBvcGVuIGluIG5ldyB0YWJzIHNpbXVsdGFub3VzbHlcbmNvbnN0IHNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiID0gMTA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIge1xuXHRhZGRDYXJkVG9JbnNpZ2h0c1ByZXNzITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRiZWZvcmVFeHBvcnQhOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGJlZm9yZU9wZW5Db250ZXh0TWVudSE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0Y29sbGFwc2VOb2RlPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0Y29udGV4dE1lbnVPcGVuSW5OZXdUYWI/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGNvbnRleHRNZW51U2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyOiBFdmVudEhhbmRsZXJUeXBlIHwgdW5kZWZpbmVkO1xuXG5cdGRhdGFTdGF0ZUNoYW5nZSE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyPzogKG1lc3NhZ2U6IE1lc3NhZ2UsIGNvbnRyb2w6IENvbnRyb2wpID0+IGJvb2xlYW47XG5cblx0ZHJhZ1N0YXJ0RG9jdW1lbnQ/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGRyYWdFbnRlckRvY3VtZW50PzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRkcm9wRG9jdW1lbnQ/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGV4cGFuZE5vZGU/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdz86IHR5cGVvZiBGaWVsZC5wcm90b3R5cGUuY2hhbmdlO1xuXG5cdGZpZWxkTGl2ZUNoYW5nZT86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0cm93UHJlc3M/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdG5vb3A/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHNlZ21lbnRlZEJ1dHRvblByZXNzPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRzZWxlY3Rpb25DaGFuZ2UhOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHRhYmxlQ29udGV4dENoYW5nZT86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dXBsb2FkQ29tcGxldGVkITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHR1cGxvYWRGaWxlTmFtZUxlbmd0aEV4Y2VlZGVkITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHR1cGxvYWRGaWxlU2l6ZUV4Y2VlZGVkITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHR1cGxvYWRJdGVtVmFsaWRhdGlvbkhhbmRsZXIhOiBGdW5jdGlvbjtcblxuXHR1cGxvYWRNZWRpYVR5cGVNaXNtYXRjaCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dmFyaWFudFNhdmVkPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHR2YXJpYW50U2VsZWN0ZWQ/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHByaXZhdGUgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRwcml2YXRlIGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHRhYmxlQmxvY2tQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0XHRzZXR0aW5nczogeyBjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk7IG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgfSxcblx0XHRwcml2YXRlIHRhYmxlQVBJPzogVGFibGVBUElcblx0KSB7XG5cdFx0dGhpcy5jb2xsZWN0aW9uRW50aXR5ID0gc2V0dGluZ3MuY29sbGVjdGlvbkVudGl0eTtcblx0XHR0aGlzLm1ldGFNb2RlbCA9IHNldHRpbmdzLm1ldGFNb2RlbDtcblxuXHRcdGlmICh0YWJsZUFQSSkge1xuXHRcdFx0dGhpcy5jb25zdHJ1Y3RvcldpdGhGdW5jdGlvbnModGFibGVBUEkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvbnN0cnVjdG9yV2l0aFN0cmluZ3MoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIGV2ZW50IGhhbmRsZXIgcHJvcGVydGllcyB3aXRoIHN0cmluZyB2YWx1ZXMuXG5cdCAqL1xuXHRwcml2YXRlIGNvbnN0cnVjdG9yV2l0aFN0cmluZ3MoKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGVUeXBlID0gdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24/LmNvbnRyb2w/LnR5cGU7XG5cblx0XHR0aGlzLmFkZENhcmRUb0luc2lnaHRzUHJlc3MgPSBcIkFQSS5vbkFkZENhcmRUb0luc2lnaHRzUHJlc3NlZCgkZXZlbnQsICRjb250cm9sbGVyKVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLmJlZm9yZUV4cG9ydCA9IFwiQVBJLm9uQmVmb3JlRXhwb3J0KCRldmVudClcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy5iZWZvcmVPcGVuQ29udGV4dE1lbnUgPSBcIkFQSS5vbkNvbnRleHRNZW51UHJlc3MoJGV2ZW50KVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLmNvbGxhcHNlTm9kZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAoXCJBUEkub25Db2xsYXBzZUV4cGFuZE5vZGUoJGV2ZW50LCBmYWxzZSlcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQgPSBcIlRhYmxlUnVudGltZS5vbkNvbnRleHRNZW51SXRlbVNlbGVjdGVkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdFx0Y29uc3Qgcm93TmF2aWdhdGlvbkluZm8gPSB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uYW5ub3RhdGlvbi5yb3c/Lm5hdmlnYXRpb25JbmZvO1xuXHRcdGlmIChyb3dOYXZpZ2F0aW9uSW5mbyAhPT0gdW5kZWZpbmVkIHx8IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMub3ZlcnJpZGVSb3dQcmVzcykge1xuXHRcdFx0Ly8gaWYgdGhlcmUgaXMgYSByb3cgcHJlc3MgZGVmaW5lZCwgdGhlcmUgaXMgYSBvcGVuIGluIG5ldyB0YWIgaW4gdGhlIGNvbnRleHR1YWwgbWVudSBhbmQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgaGFuZGxlciBpcyBzdGlsbCBkZWZpbmVkXG5cdFx0XHQvLyBjdXN0b21lciBmb3VuZCBjbGV2ZXIgd2F5cyB0byB1c2UgaXQgbGlrZSBpbiBDUzIwMjUwMDEwMDM1MTI1XG5cdFx0XHRpZiAocm93TmF2aWdhdGlvbkluZm8/LnR5cGUgPT09IFwiT3V0Ym91bmRcIikge1xuXHRcdFx0XHR0aGlzLmNvbnRleHRNZW51T3BlbkluTmV3VGFiID1cblx0XHRcdFx0XHRgLm9uT3BlbkluTmV3VGFiTmF2aWdhdGVPdXRCb3VuZCgnJHtyb3dOYXZpZ2F0aW9uSW5mby5uYXZpZ2F0aW9uVGFyZ2V0fScsICV7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c30sIFwiXCIsICR7c2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWJ9KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciA9XG5cdFx0XHRcdFx0YEFQSS5vblNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlclByZXNzKCRldmVudCwgJGNvbnRyb2xsZXIsICV7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c30sICR7c2VsZWN0aW9uTGltaXRGb3JTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJ9KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdFx0XHR0aGlzLmNvbnRleHRNZW51T3BlbkluTmV3VGFiID1cblx0XHRcdFx0XHRgQVBJLm9uT3BlbkluTmV3VGFiUHJlc3MoJGV2ZW50LCAkY29udHJvbGxlciwgICV7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c30sICV7aW50ZXJuYWw+Y29udGV4dG1lbnUvbmF2aWdhYmxlQ29udGV4dHN9LHsgY2FsbEV4dGVuc2lvbjogdHJ1ZSwgdGFyZ2V0UGF0aDogJyR7XG5cdFx0XHRcdFx0XHRyb3dOYXZpZ2F0aW9uSW5mbz8udGFyZ2V0UGF0aCA/PyBcIlwiXG5cdFx0XHRcdFx0fScsIG5hdk1vZGU6ICdvcGVuSW5OZXdUYWInIH0sICR7c2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWJ9KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuZGF0YVN0YXRlQ2hhbmdlID0gXCJBUEkub25EYXRhU3RhdGVDaGFuZ2VcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cblx0XHRpZiAodGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24/LmNvbnRyb2w/Lmhhc0RhdGFTdGF0ZUluZGljYXRvckZpbHRlcikge1xuXHRcdFx0dGhpcy5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIgPSBcIlRhYmxlUnVudGltZS5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXJcIiBhcyB1bmtub3duIGFzIChcblx0XHRcdFx0bWVzc2FnZTogTWVzc2FnZSxcblx0XHRcdFx0Y29udHJvbDogQ29udHJvbFxuXHRcdFx0KSA9PiBib29sZWFuO1xuXHRcdH1cblxuXHRcdHRoaXMuZHJhZ1N0YXJ0RG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAoXCJBUEkub25EcmFnU3RhcnREb2N1bWVudFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kcmFnRW50ZXJEb2N1bWVudCA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IChcIkFQSS5vbkRyYWdFbnRlckRvY3VtZW50XCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmRyb3BEb2N1bWVudCA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IChcIkFQSS5vbkRyb3BEb2N1bWVudFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5leHBhbmROb2RlID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKFwiQVBJLm9uQ29sbGFwc2VFeHBhbmROb2RlKCRldmVudCwgdHJ1ZSlcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93ID0gYFRhYmxlUnVudGltZS5vbkZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdygkZXZlbnQsICR7ISF0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvblxuXHRcdFx0LmNvbnRyb2wuY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9ufSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLmZpZWxkTGl2ZUNoYW5nZSA9XG5cdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNyZWF0aW9uTW9kZT8ubmFtZSA9PT0gXCJJbmxpbmVDcmVhdGlvblJvd3NcIlxuXHRcdFx0XHQ/IChcIkFQSS5vbkZpZWxkTGl2ZUNoYW5nZSgkZXZlbnQpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR0aGlzLnJvd1ByZXNzID0gXCJBUEkub25UYWJsZVJvd1ByZXNzXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMubm9vcCA9IFwiQVBJLm9uTm9vcFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnNlZ21lbnRlZEJ1dHRvblByZXNzID0gXCJBUEkub25TZWdtZW50ZWRCdXR0b25QcmVzc2VkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMuc2VsZWN0aW9uQ2hhbmdlID0gXCJBUEkub25TZWxlY3Rpb25DaGFuZ2VkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudGFibGVDb250ZXh0Q2hhbmdlID1cblx0XHRcdHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHQ/IChgVGFibGVSdW50aW1lLm9uVHJlZVRhYmxlQ29udGV4dENoYW5nZWQoJGV2ZW50LCAke3RoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5hbm5vdGF0aW9uPy5pbml0aWFsRXhwYW5zaW9uTGV2ZWx9KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXMudXBsb2FkQ29tcGxldGVkID0gXCJVcGxvYWRUYWJsZVJ1bnRpbWUub25VcGxvYWRDb21wbGV0ZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy51cGxvYWRGaWxlTmFtZUxlbmd0aEV4Y2VlZGVkID0gXCJVcGxvYWRUYWJsZVJ1bnRpbWUub25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudXBsb2FkRmlsZVNpemVFeGNlZWRlZCA9IFwiVXBsb2FkVGFibGVSdW50aW1lLm9uRmlsZVNpemVFeGNlZWRlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnVwbG9hZEl0ZW1WYWxpZGF0aW9uSGFuZGxlciA9IFwiVXBsb2FkVGFibGVSdW50aW1lLnVwbG9hZEZpbGVcIiBhcyB1bmtub3duIGFzIEZ1bmN0aW9uO1xuXHRcdHRoaXMudXBsb2FkTWVkaWFUeXBlTWlzbWF0Y2ggPSBcIlVwbG9hZFRhYmxlUnVudGltZS5vbk1lZGlhVHlwZU1pc21hdGNoXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudmFyaWFudFNhdmVkID0gXCJBUEkub25WYXJpYW50U2F2ZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy52YXJpYW50U2VsZWN0ZWQgPSBcIkFQSS5vblZhcmlhbnRTZWxlY3RlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgZXZlbnQgaGFuZGxlciBwcm9wZXJ0aWVzIHdpdGggZnVuY3Rpb25zLlxuXHQgKiBAcGFyYW0gdGFibGVBUElcblx0ICovXG5cdHByaXZhdGUgY29uc3RydWN0b3JXaXRoRnVuY3Rpb25zKHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYmxlVHlwZSA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5jb250cm9sPy50eXBlO1xuXG5cdFx0dGhpcy5hZGRDYXJkVG9JbnNpZ2h0c1ByZXNzID0gdGFibGVBUEkub25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5iZWZvcmVFeHBvcnQgPSB0YWJsZUFQSS5vbkJlZm9yZUV4cG9ydC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLmJlZm9yZU9wZW5Db250ZXh0TWVudSA9IHRhYmxlQVBJLm9uQ29udGV4dE1lbnVQcmVzcy5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLmNvbGxhcHNlTm9kZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0PyAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRhYmxlQVBJLm9uQ29sbGFwc2VFeHBhbmROb2RlKGUsIGZhbHNlKTtcblx0XHRcdFx0ICB9XG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQgPSBUYWJsZVJ1bnRpbWUub25Db250ZXh0TWVudUl0ZW1TZWxlY3RlZC5iaW5kKFRhYmxlUnVudGltZSk7XG5cblx0XHRjb25zdCByb3dOYXZpZ2F0aW9uSW5mbyA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5hbm5vdGF0aW9uLnJvdz8ubmF2aWdhdGlvbkluZm87XG5cdFx0aWYgKHJvd05hdmlnYXRpb25JbmZvICE9PSB1bmRlZmluZWQgfHwgdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5vdmVycmlkZVJvd1ByZXNzKSB7XG5cdFx0XHRpZiAocm93TmF2aWdhdGlvbkluZm8/LnR5cGUgPT09IFwiT3V0Ym91bmRcIikge1xuXHRcdFx0XHR0aGlzLmNvbnRleHRNZW51T3BlbkluTmV3VGFiID0gKF9lOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRhYmxlQVBJLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdFx0Y29udHJvbGxlcj8ub25PcGVuSW5OZXdUYWJOYXZpZ2F0ZU91dEJvdW5kPy4oXG5cdFx0XHRcdFx0XHRyb3dOYXZpZ2F0aW9uSW5mby5uYXZpZ2F0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdFx0c2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciA9IChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpITtcblx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0YWJsZUFQSS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRcdHRhYmxlQVBJLm9uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MoXG5cdFx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdFx0Y29udHJvbGxlcixcblx0XHRcdFx0XHRcdGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIpLFxuXHRcdFx0XHRcdFx0c2VsZWN0aW9uTGltaXRGb3JTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR0aGlzLmNvbnRleHRNZW51T3BlbkluTmV3VGFiID0gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCkhO1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRhYmxlQVBJLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdFx0dGFibGVBUEkub25PcGVuSW5OZXdUYWJQcmVzcyhcblx0XHRcdFx0XHRcdGUsXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHRpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbmF2aWdhYmxlQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHR7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6IHJvd05hdmlnYXRpb25JbmZvPy50YXJnZXRQYXRoID8/IFwiXCIsIG5hdk1vZGU6IFwib3BlbkluTmV3VGFiXCIgfSxcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmRhdGFTdGF0ZUNoYW5nZSA9IHRhYmxlQVBJLm9uRGF0YVN0YXRlQ2hhbmdlLmJpbmQodGFibGVBUEkpO1xuXG5cdFx0aWYgKHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5jb250cm9sPy5oYXNEYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIpIHtcblx0XHRcdHRoaXMuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyID0gdGFibGVBUEkuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyLmJpbmQodGFibGVBUEkpO1xuXHRcdH1cblxuXHRcdHRoaXMuZHJhZ1N0YXJ0RG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAodGFibGVBUEkub25EcmFnU3RhcnREb2N1bWVudC5iaW5kKHRhYmxlQVBJKSBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmRyYWdFbnRlckRvY3VtZW50ID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKHRhYmxlQVBJLm9uRHJhZ0VudGVyRG9jdW1lbnQuYmluZCh0YWJsZUFQSSkgYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kcm9wRG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAodGFibGVBUEkub25Ecm9wRG9jdW1lbnQuYmluZCh0YWJsZUFQSSkgYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5leHBhbmROb2RlID1cblx0XHRcdHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHQ/IChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGFibGVBUEkub25Db2xsYXBzZUV4cGFuZE5vZGUoZSwgdHJ1ZSk7XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXMuZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93ID0gKGUpOiB2b2lkID0+IHtcblx0XHRcdFRhYmxlUnVudGltZS5vbkZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdyhlLCAhIXRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uKTtcblx0XHR9O1xuXHRcdHRoaXMuZmllbGRMaXZlQ2hhbmdlID1cblx0XHRcdHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5uYW1lID09PSBcIklubGluZUNyZWF0aW9uUm93c1wiID8gdGFibGVBUEkub25GaWVsZExpdmVDaGFuZ2UuYmluZCh0YWJsZUFQSSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5yb3dQcmVzcyA9IHRhYmxlQVBJLm9uVGFibGVSb3dQcmVzcy5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLm5vb3AgPSB0YWJsZUFQSS5vbk5vb3AuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5zZWdtZW50ZWRCdXR0b25QcmVzcyA9IHRhYmxlQVBJLm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLnNlbGVjdGlvbkNoYW5nZSA9IHRhYmxlQVBJLm9uU2VsZWN0aW9uQ2hhbmdlZC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLnRhYmxlQ29udGV4dENoYW5nZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0PyAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFRhYmxlUnVudGltZS5vblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkKFxuXHRcdFx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uYW5ub3RhdGlvbj8uaW5pdGlhbEV4cGFuc2lvbkxldmVsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHQgIH1cblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLnVwbG9hZENvbXBsZXRlZCA9IFVwbG9hZFRhYmxlUnVudGltZS5vblVwbG9hZENvbXBsZXRlZC5iaW5kKFVwbG9hZFRhYmxlUnVudGltZSkgYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnVwbG9hZEZpbGVOYW1lTGVuZ3RoRXhjZWVkZWQgPSBVcGxvYWRUYWJsZVJ1bnRpbWUub25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkLmJpbmQoVXBsb2FkVGFibGVSdW50aW1lKSBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudXBsb2FkRmlsZVNpemVFeGNlZWRlZCA9IFVwbG9hZFRhYmxlUnVudGltZS5vbkZpbGVTaXplRXhjZWVkZWQuYmluZChVcGxvYWRUYWJsZVJ1bnRpbWUpIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy51cGxvYWRJdGVtVmFsaWRhdGlvbkhhbmRsZXIgPSBVcGxvYWRUYWJsZVJ1bnRpbWUudXBsb2FkRmlsZS5iaW5kKFVwbG9hZFRhYmxlUnVudGltZSk7XG5cdFx0dGhpcy51cGxvYWRNZWRpYVR5cGVNaXNtYXRjaCA9IFVwbG9hZFRhYmxlUnVudGltZS5vbk1lZGlhVHlwZU1pc21hdGNoLmJpbmQoVXBsb2FkVGFibGVSdW50aW1lKSBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudmFyaWFudFNhdmVkID0gdGFibGVBUEkub25WYXJpYW50U2F2ZWQuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy52YXJpYW50U2VsZWN0ZWQgPSB0YWJsZUFQSS5vblZhcmlhbnRTZWxlY3RlZC5iaW5kKHRhYmxlQVBJKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciB0aGUgQ3JlYXRlIGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEBwYXJhbSBmb3JDcmVhdGlvblJvd1xuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbiwgZm9yQ3JlYXRpb25Sb3c6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRpZiAodGhpcy50YWJsZUFQSSkge1xuXHRcdFx0cmV0dXJuIGZvckNyZWF0aW9uUm93XG5cdFx0XHRcdD8gVGFibGVSdW50aW1lLm9uQ3JlYXRlQnV0dG9uUHJlc3MuYmluZChUYWJsZVJ1bnRpbWUpXG5cdFx0XHRcdDogKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIgOiBcInNlbGVjdGVkQ29udGV4dHNcIjtcblx0XHRcdFx0XHRcdFRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKGUsIGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkocGF0aCkpO1xuXHRcdFx0XHQgIH07XG5cdFx0fSBlbHNlIGlmICghZm9yQ3JlYXRpb25Sb3cpIHtcblx0XHRcdHJldHVybiBmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQ/IChcIlRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKCRldmVudCwgJHtpbnRlcm5hbD5jb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzfSlcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpXG5cdFx0XHRcdDogKFwiVGFibGVSdW50aW1lLm9uQ3JlYXRlQnV0dG9uUHJlc3MoJGV2ZW50LCAke2ludGVybmFsPnNlbGVjdGVkQ29udGV4dHN9KVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKCRldmVudClcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBDcmVhdGUgbWVudSBpdGVtLlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0Q3JlYXRlTWVudUl0ZW1QcmVzc0hhbmRsZXIoaW5kZXg6IG51bWJlciwgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRjb25zdCBwYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiA6IFwic2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFRhYmxlUnVudGltZS5vbkNyZWF0ZU1lbnVJdGVtUHJlc3MoZSwgaW5kZXgsIHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KHBhdGgpKTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgVGFibGVSdW50aW1lLm9uQ3JlYXRlTWVudUl0ZW1QcmVzcygkZXZlbnQsICR7aW5kZXh9LCBcXCR7aW50ZXJuYWw+JHtwYXRofX0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBDdXQgYWN0aW9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRDdXRIYW5kbGVyKGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy50YWJsZUFQSSEub25DdXQoZSwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25DdXQoJGV2ZW50LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIENvcHkgYWN0aW9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRDb3B5SGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uQ29weShlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gYEFQSS5vbkNvcHkoJGV2ZW50LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgYW4gYWN0aW9uIGJ1dHRvbi5cblx0ICogQHBhcmFtIGRhdGFGaWVsZFxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBwYXJlbnRBY3Rpb25cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdGFjdGlvbjogQmFzZUFjdGlvbixcblx0XHRmb3JDb250ZXh0TWVudTogYm9vbGVhblxuXHQpOiBFdmVudEhhbmRsZXJUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWRhdGFGaWVsZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdFx0PyBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dCh0aGlzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IGFjdGlvbkNvbnRleHRQYXRoID8gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpIDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdGNvbnN0IGFjdGlvbk5hbWUgPSBkYXRhRmllbGQuQWN0aW9uO1xuXHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZU5hbWUgPSB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdFx0Y29uc3QgaXNTdGF0aWNBY3Rpb24gPVxuXHRcdFx0XHR0eXBlb2YgYWN0aW9uQ29udGV4dD8uZ2V0T2JqZWN0KCkgIT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KFRhYmxlSGVscGVyLl9pc1N0YXRpY0FjdGlvbihhY3Rpb25Db250ZXh0Py5nZXRPYmplY3QoKSwgYWN0aW9uTmFtZSkgfHxcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5faXNBY3Rpb25PdmVybG9hZE9uRGlmZmVyZW50VHlwZShhY3Rpb25OYW1lLnRvU3RyaW5nKCksIHRhcmdldEVudGl0eVR5cGVOYW1lKSk7XG5cdFx0XHRjb25zdCBhcHBsaWNhYmxlUHJvcGVydHlQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRjb25zdCBub3RBcHBsaWNhYmxlUHJvcGVydHlQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJhTm90QXBwbGljYWJsZVwiIDogXCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRjb25zdCBjb250ZXh0TWVudVBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblxuXHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpITtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0XHRcdGNvbnRleHRzOiAhaXNTdGF0aWNBY3Rpb24gPyBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7Y29udGV4dE1lbnVQYXRofXNlbGVjdGVkQ29udGV4dHNgKSA6IG51bGwsXG5cdFx0XHRcdFx0YlN0YXRpY0FjdGlvbjogaXNTdGF0aWNBY3Rpb24gPyBpc1N0YXRpY0FjdGlvbiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRlbnRpdHlTZXROYW1lOiB0aGlzLmNvbGxlY3Rpb25FbnRpdHkubmFtZSxcblx0XHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM6ICFpc1N0YXRpY0FjdGlvblxuXHRcdFx0XHRcdFx0PyBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7ZGF0YUZpZWxkLkFjdGlvbn0vJHthcHBsaWNhYmxlUHJvcGVydHlQYXRofS9gKVxuXHRcdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0czogIWlzU3RhdGljQWN0aW9uXG5cdFx0XHRcdFx0XHQ/IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtkYXRhRmllbGQuQWN0aW9ufS8ke25vdEFwcGxpY2FibGVQcm9wZXJ0eVBhdGh9L2ApXG5cdFx0XHRcdFx0XHQ6IG51bGwsXG5cdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGFjdGlvbi5pc05hdmlnYWJsZSxcblx0XHRcdFx0XHRlbmFibGVBdXRvU2Nyb2xsOiBhY3Rpb24uZW5hYmxlQXV0b1Njcm9sbCxcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IGFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24sXG5cdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBkYXRhRmllbGQ/Lkludm9jYXRpb25Hcm91cGluZyA9PT0gXCJVSS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCIgPyBcIkNoYW5nZVNldFwiIDogXCJJc29sYXRlZFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xJZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXAsXG5cdFx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZC5MYWJlbD8udmFsdWVPZigpID8/IFwiXCIsXG5cdFx0XHRcdFx0bW9kZWw6IHRoaXMudGFibGVBUEkhLmdldFBhZ2VDb250cm9sbGVyKCkhLmdldE1vZGVsKCksXG5cdFx0XHRcdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nOiBhY3Rpb24uZGlzYWJsZVN0cmljdEhhbmRsaW5nXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXMudGFibGVBUEk/Lm9uQWN0aW9uUHJlc3MoZSwgdGhpcy50YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpISwgZGF0YUZpZWxkLkFjdGlvbi52YWx1ZU9mKCksIHBhcmFtcyk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gVGFibGVIZWxwZXIucHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbihcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnRleHRPYmplY3RQYXRoOiB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLFxuXHRcdFx0XHRcdGNvbnRlbnRJZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWRcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRpdHkubmFtZSxcblx0XHRcdFx0dGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRhY3Rpb25Db250ZXh0Py5nZXRPYmplY3QoKSxcblx0XHRcdFx0YWN0aW9uLmlzTmF2aWdhYmxlLFxuXHRcdFx0XHRhY3Rpb24uZW5hYmxlQXV0b1Njcm9sbCxcblx0XHRcdFx0YWN0aW9uLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbixcblx0XHRcdFx0Zm9yQ29udGV4dE1lbnUsXG5cdFx0XHRcdGFjdGlvbi5kaXNhYmxlU3RyaWN0SGFuZGxpbmdcblx0XHRcdCkgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciBhbiBJQk4gYWN0aW9uLlxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlcihhY3Rpb246IEJhc2VBY3Rpb24sIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBkYXRhRmllbGRDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoKTtcblx0XHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0Py5nZXRPYmplY3QoKSBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IG5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyAhPT0gdHJ1ZTtcblxuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikhO1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGFyYW1ldGVyczoge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0cz86IFY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IFY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IFY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZz86IG9iamVjdDtcblx0XHRcdFx0fSA9IHt9O1xuXG5cdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLm5hdmlnYXRpb25Db250ZXh0cyA9IGZvckNvbnRleHRNZW51XG5cdFx0XHRcdFx0PyBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIpXG5cdFx0XHRcdFx0OiBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpO1xuXG5cdFx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0ICYmICFkYXRhRmllbGQuSW5saW5lICYmIG5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZykge1xuXHRcdFx0XHRcdGNvbnN0IGFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0XHRcdGNvbnN0IG5vdEFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYU5vdEFwcGxpY2FibGVcIiA6IFwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLmFwcGxpY2FibGVDb250ZXh0cyA9IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdGBpYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vJHthcHBsaWNhYmxlUHJvcGVydHl9L2Bcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0cyA9IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdGBpYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vJHtub3RBcHBsaWNhYmxlUHJvcGVydHl9L2Bcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLmxhYmVsID0gZGF0YUZpZWxkLkxhYmVsIGFzIHN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBkYXRhRmllbGQuTWFwcGluZztcblx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudGFibGVBUEkhLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0XHRcdGlmIChuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cpIHtcblx0XHRcdFx0XHRjb250cm9sbGVyPy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyhcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24gYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdGUuZ2V0U291cmNlPENvbnRyb2w+KClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXI/Ll9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuU2VtYW50aWNPYmplY3QgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRlLmdldFNvdXJjZTxDb250cm9sPigpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIENvbW1vbkhlbHBlci5nZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk4oXG5cdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0Zm9yQ29udGV4dE1lbnUgPyBcIiR7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c31cIiA6IFwiJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfVwiLFxuXHRcdFx0XHRuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2csXG5cdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQpIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEV4cHJlc3Npb25Gb3JEYXRhRmllbGRWYWx1ZShcblx0XHRkYXRhRmllbGQ6IERhdGFGaWVsZFR5cGVzIHwgdW5kZWZpbmVkLFxuXHRcdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuXHQpOiBzdHJpbmcgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgdmFsdWUgPSBkYXRhRmllbGQ/LlZhbHVlO1xuXHRcdGlmICghdmFsdWUpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMudGFibGVBUEkgPyB2YWx1ZSA6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXModmFsdWUsIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBleHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHZhbHVlKTtcblx0XHRcdGlmIChpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKGV4cHJlc3Npb24pKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlRXhwcmVzc2lvbiA9IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkoZXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKTtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHZhbHVlRXhwcmVzc2lvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBEZWxldGUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXREZWxldGVCdXR0b25QcmVzc0hhbmRsZXIoZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRjb25zdCBoZWFkZXJJbmZvID0gKCh0aGlzLmNvbGxlY3Rpb25FbnRpdHkgYXMgRW50aXR5U2V0KT8uZW50aXR5VHlwZSB8fCAodGhpcy5jb2xsZWN0aW9uRW50aXR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSk/LnRhcmdldFR5cGUpXG5cdFx0XHQ/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbztcblxuXHRcdGNvbnN0IGNvbnRleHRNZW51UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiO1xuXHRcdGNvbnN0IGRlbGV0YWJsZUNvbnRleHRzUGF0aCA9IGAke2NvbnRleHRNZW51UGF0aH1kZWxldGFibGVDb250ZXh0c2A7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9c2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlYDtcblx0XHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNQYXRoID0gIWZvckNvbnRleHRNZW51XG5cdFx0XHQ/IGBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNgXG5cdFx0XHQ6IGAke2NvbnRleHRNZW51UGF0aH1udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNGb3JEZWxldGVgO1xuXHRcdGNvbnN0IHVuU2F2ZWRDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9dW5TYXZlZENvbnRleHRzYDtcblx0XHRjb25zdCBsb2NrZWRDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9bG9ja2VkQ29udGV4dHNgO1xuXHRcdGNvbnN0IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofWRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVgO1xuXHRcdGNvbnN0IGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofWRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVgO1xuXG5cdFx0Y29uc3QgdGl0bGVFeHByZXNzaW9uID0gdGhpcy5nZXRFeHByZXNzaW9uRm9yRGF0YUZpZWxkVmFsdWUoXG5cdFx0XHRoZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyxcblx0XHRcdHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGhcblx0XHQpO1xuXG5cdFx0Y29uc3QgZGVzY3JpcHRpb25FeHByZXNzaW9uID0gdGhpcy5nZXRFeHByZXNzaW9uRm9yRGF0YUZpZWxkVmFsdWUoXG5cdFx0XHRoZWFkZXJJbmZvPy5EZXNjcmlwdGlvbiBhcyBEYXRhRmllbGRUeXBlcyxcblx0XHRcdHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGhcblx0XHQpO1xuXG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoX2U6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRpZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQsXG5cdFx0XHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KG51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1BhdGgpIGFzIG51bWJlcixcblx0XHRcdFx0XHR1blNhdmVkQ29udGV4dHM6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkodW5TYXZlZENvbnRleHRzUGF0aCkgYXMgVjRDb250ZXh0W10sXG5cdFx0XHRcdFx0bG9ja2VkQ29udGV4dHM6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkobG9ja2VkQ29udGV4dHNQYXRoKSBhcyBWNENvbnRleHRbXSxcblx0XHRcdFx0XHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRoKSBhcyBWNENvbnRleHRbXSxcblx0XHRcdFx0XHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVQYXRoKSBhcyBWNENvbnRleHRbXSxcblx0XHRcdFx0XHRjb250cm9sSWQ6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb250cm9sSWRcIiksXG5cdFx0XHRcdFx0dGl0bGU6IHRpdGxlRXhwcmVzc2lvbixcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25FeHByZXNzaW9uLFxuXHRcdFx0XHRcdHNlbGVjdGVkQ29udGV4dHM6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoc2VsZWN0ZWRDb250ZXh0c1BhdGgpIGFzIFY0Q29udGV4dFtdXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLmdldFBhZ2VDb250cm9sbGVyKCk/LmVkaXRGbG93LmRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzKFxuXHRcdFx0XHRcdGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoZGVsZXRhYmxlQ29udGV4dHNQYXRoKSxcblx0XHRcdFx0XHRwYXJhbXNcblx0XHRcdFx0KTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0aWQ6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXModGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQpLFxuXHRcdFx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHM6IGBcXCR7aW50ZXJuYWw+JHtudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNQYXRofX1gLFxuXHRcdFx0XHR1blNhdmVkQ29udGV4dHM6IGBcXCR7aW50ZXJuYWw+JHt1blNhdmVkQ29udGV4dHNQYXRofX1gLFxuXHRcdFx0XHRsb2NrZWRDb250ZXh0czogYFxcJHtpbnRlcm5hbD4ke2xvY2tlZENvbnRleHRzUGF0aH19YCxcblx0XHRcdFx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZTogYFxcJHtpbnRlcm5hbD4ke2RyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRofX1gLFxuXHRcdFx0XHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlOiBgXFwke2ludGVybmFsPiR7ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZVBhdGh9fWAsXG5cdFx0XHRcdGNvbnRyb2xJZDogXCIke2ludGVybmFsPmNvbnRyb2xJZH1cIixcblx0XHRcdFx0dGl0bGU6IHRpdGxlRXhwcmVzc2lvbixcblx0XHRcdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uRXhwcmVzc2lvbixcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0czogYFxcJHtpbnRlcm5hbD4ke3NlbGVjdGVkQ29udGV4dHNQYXRofX1gXG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLmdlbmVyYXRlRnVuY3Rpb24oXG5cdFx0XHRcdFwiLmVkaXRGbG93LmRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzXCIsXG5cdFx0XHRcdGBcXCR7aW50ZXJuYWw+JHtkZWxldGFibGVDb250ZXh0c1BhdGh9fWAsXG5cdFx0XHRcdENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhwYXJhbXMpXG5cdFx0XHQpIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciBhIG1hbmlmZXN0IGFjdGlvbiBidXR0b24uXG5cdCAqIEBwYXJhbSBhY3Rpb25cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoYWN0aW9uOiBDdXN0b21BY3Rpb24sIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdGlmIChhY3Rpb24ubm9XcmFwID09PSB0cnVlKSB7XG5cdFx0XHRcdC8vIElmIG5vV3JhcCA9IHRydWUsIHRoZW4gdGhlIGFjdGlvbiBpcyBhIHNsb3QgYWN0aW9uIChkZWZpbmVkIGluIHRoZSBYTUwgdmlldyBhcyBhbiBhZ2dyZWdhdGlvbiBvZiB0aGUgdGFibGUgYmxvY2spXG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRBY3Rpb25FbGVtZW50ID0gdGhpcy50YWJsZUFQSS5maW5kU2xvdEFjdGlvbkZyb21LZXkoYWN0aW9uLmtleSk7XG5cdFx0XHRcdGlmIChyZWxhdGVkQWN0aW9uRWxlbWVudCkge1xuXHRcdFx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxQYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiA6IFwic2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGhpcy50YWJsZUFQSSEuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSE7XG5cdFx0XHRcdFx0XHRjb25zdCBldmVudFBhcmFtZXRlcnMgPSB7IC4uLmUuZ2V0UGFyYW1ldGVycygpLCBjb250ZXh0czogaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KGludGVybmFsTW9kZWxQYXRoKSB9O1xuXHRcdFx0XHRcdFx0cmVsYXRlZEFjdGlvbkVsZW1lbnQuZmlyZUV2ZW50KFwicHJlc3NcIiwgZXZlbnRQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkNvdWxkbid0IGZpbmQgYWN0aW9uIHdpdGgga2V5IFwiICsgYWN0aW9uLmtleSk7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxQYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiA6IFwic2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikhO1xuXHRcdFx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGUsIGFjdGlvbi5oYW5kbGVyTW9kdWxlLCBhY3Rpb24uaGFuZGxlck1ldGhvZCwge1xuXHRcdFx0XHRcdFx0Y29udGV4dHM6IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShpbnRlcm5hbE1vZGVsUGF0aClcblx0XHRcdFx0XHR9KS5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY3VzdG9tIGFjdGlvblwiLCBlcnIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gKGFjdGlvbi5ub1dyYXAgPT09IHRydWVcblx0XHRcdFx0PyBhY3Rpb24ucHJlc3Ncblx0XHRcdFx0OiBDb21tb25IZWxwZXIuYnVpbGRBY3Rpb25XcmFwcGVyKFxuXHRcdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdFx0eyBpZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQgfSxcblx0XHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHRcdCAgKSkgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBtYXNzIGVkaXQgYnV0dG9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRNYXNzRWRpdEJ1dHRvblByZXNzSGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkKGUsIGZvckNvbnRleHRNZW51KTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgQVBJLm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkKCRldmVudCwgJHtmb3JDb250ZXh0TWVudX0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgdGhlIG1vdmUgdXAgLyBtb3ZlIGRvd24gYnV0dG9ucy5cblx0ICogQHBhcmFtIGZvck1vdmVVcFxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRNb3ZlVXBEb3duSGFuZGxlcihmb3JNb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy50YWJsZUFQSSEub25Nb3ZlVXBEb3duKGUsIGZvck1vdmVVcCwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25Nb3ZlVXBEb3duKCRldmVudCwgJHtmb3JNb3ZlVXB9LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIFBhc3RlIGFjdGlvbi5cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0UGFzdGVIYW5kbGVyKGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLnRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uUGFzdGUoZSwgY29udHJvbGxlciwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25QYXN0ZSgkZXZlbnQsICRjb250cm9sbGVyLCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQTRCQTtFQUNBLE1BQU1BLDRDQUE0QyxHQUFHLENBQUM7RUFDdEQ7RUFDQSxNQUFNQyw2QkFBNkIsR0FBRyxFQUFFO0VBQUMsSUFFcEJDLHlCQUF5QjtJQTJEN0MsU0FBQUEsMEJBQ1NDLG9CQUEwQyxFQUNsREMsUUFBeUYsRUFDakZDLFFBQW1CLEVBQzFCO01BQUEsS0FIT0Ysb0JBQTBDLEdBQTFDQSxvQkFBMEM7TUFBQSxLQUUxQ0UsUUFBbUIsR0FBbkJBLFFBQW1CO01BRTNCLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUdGLFFBQVEsQ0FBQ0UsZ0JBQWdCO01BQ2pELElBQUksQ0FBQ0MsU0FBUyxHQUFHSCxRQUFRLENBQUNHLFNBQVM7TUFFbkMsSUFBSUYsUUFBUSxFQUFFO1FBQ2IsSUFBSSxDQUFDRyx3QkFBd0IsQ0FBQ0gsUUFBUSxDQUFDO01BQ3hDLENBQUMsTUFBTTtRQUNOLElBQUksQ0FBQ0ksc0JBQXNCLENBQUMsQ0FBQztNQUM5QjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtJQUZDQyxRQUFBLEdBQUFSLHlCQUFBO0lBQUEsSUFBQVMsTUFBQSxHQUFB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
472
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZWxlY3Rpb25MaW1pdEZvclNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsInRhYmxlQmxvY2tQcm9wZXJ0aWVzIiwic2V0dGluZ3MiLCJ0YWJsZUFQSSIsImNvbGxlY3Rpb25FbnRpdHkiLCJtZXRhTW9kZWwiLCJjb25zdHJ1Y3RvcldpdGhGdW5jdGlvbnMiLCJjb25zdHJ1Y3RvcldpdGhTdHJpbmdzIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJ0YWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJjb250cm9sIiwidHlwZSIsImFkZENhcmRUb0luc2lnaHRzUHJlc3MiLCJiZWZvcmVFeHBvcnQiLCJiZWZvcmVPcGVuQ29udGV4dE1lbnUiLCJjb2xsYXBzZU5vZGUiLCJ1bmRlZmluZWQiLCJjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCIsInJvd05hdmlnYXRpb25JbmZvIiwiYW5ub3RhdGlvbiIsInJvdyIsIm5hdmlnYXRpb25JbmZvIiwib3ZlcnJpZGVSb3dQcmVzcyIsImNvbnRleHRNZW51T3BlbkluTmV3VGFiIiwibmF2aWdhdGlvblRhcmdldCIsImNvbnRleHRNZW51U2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyIiwidGFyZ2V0UGF0aCIsImRhdGFTdGF0ZUNoYW5nZSIsImhhc0RhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImRyYWdTdGFydERvY3VtZW50IiwiZHJhZ0VudGVyRG9jdW1lbnQiLCJkcm9wRG9jdW1lbnQiLCJleHBhbmROb2RlIiwiZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93IiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwiZmllbGRMaXZlQ2hhbmdlIiwiY3JlYXRpb25Nb2RlIiwibmFtZSIsInJvd1ByZXNzIiwibm9vcCIsInNlZ21lbnRlZEJ1dHRvblByZXNzIiwic2VsZWN0aW9uQ2hhbmdlIiwidGFibGVDb250ZXh0Q2hhbmdlIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwidXBsb2FkQ29tcGxldGVkIiwidXBsb2FkRmlsZU5hbWVMZW5ndGhFeGNlZWRlZCIsInVwbG9hZEZpbGVTaXplRXhjZWVkZWQiLCJ1cGxvYWRJdGVtVmFsaWRhdGlvbkhhbmRsZXIiLCJ1cGxvYWRNZWRpYVR5cGVNaXNtYXRjaCIsInZhcmlhbnRTYXZlZCIsInZhcmlhbnRTZWxlY3RlZCIsIm9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkIiwiYmluZCIsIm9uQmVmb3JlRXhwb3J0Iiwib25Db250ZXh0TWVudVByZXNzIiwiZSIsIm9uQ29sbGFwc2VFeHBhbmROb2RlIiwiVGFibGVSdW50aW1lIiwib25Db250ZXh0TWVudUl0ZW1TZWxlY3RlZCIsIl9lIiwiY29udHJvbGxlciIsImdldFBhZ2VDb250cm9sbGVyIiwiaW50ZXJuYWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvbk9wZW5Jbk5ld1RhYk5hdmlnYXRlT3V0Qm91bmQiLCJnZXRQcm9wZXJ0eSIsIm9uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MiLCJvbk9wZW5Jbk5ld1RhYlByZXNzIiwiY2FsbEV4dGVuc2lvbiIsIm5hdk1vZGUiLCJvbkRhdGFTdGF0ZUNoYW5nZSIsIm9uRHJhZ1N0YXJ0RG9jdW1lbnQiLCJvbkRyYWdFbnRlckRvY3VtZW50Iiwib25Ecm9wRG9jdW1lbnQiLCJvbkZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdyIsIm9uRmllbGRMaXZlQ2hhbmdlIiwib25UYWJsZVJvd1ByZXNzIiwib25Ob29wIiwib25TZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwib25TZWxlY3Rpb25DaGFuZ2VkIiwib25UcmVlVGFibGVDb250ZXh0Q2hhbmdlZCIsIlVwbG9hZFRhYmxlUnVudGltZSIsIm9uVXBsb2FkQ29tcGxldGVkIiwib25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkIiwib25GaWxlU2l6ZUV4Y2VlZGVkIiwidXBsb2FkRmlsZSIsIm9uTWVkaWFUeXBlTWlzbWF0Y2giLCJvblZhcmlhbnRTYXZlZCIsIm9uVmFyaWFudFNlbGVjdGVkIiwiZ2V0Q3JlYXRlQnV0dG9uUHJlc3NIYW5kbGVyIiwiZm9yQ29udGV4dE1lbnUiLCJmb3JDcmVhdGlvblJvdyIsIm9uQ3JlYXRlQnV0dG9uUHJlc3MiLCJwYXRoIiwiZ2V0Q3JlYXRlTWVudUl0ZW1QcmVzc0hhbmRsZXIiLCJpbmRleCIsIm9uQ3JlYXRlTWVudUl0ZW1QcmVzcyIsImdldENlbGxzU2VsZWN0aW9uSGFuZGxlciIsInBhc3RlRW5hYmxlbWVudEhhbmRsZXIiLCJnZXRDdXRIYW5kbGVyIiwib25DdXQiLCJnZXRDb3B5SGFuZGxlciIsIm9uQ29weSIsImdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlciIsImRhdGFGaWVsZCIsImFjdGlvbiIsImFjdGlvbkNvbnRleHRQYXRoIiwiYW5ub3RhdGlvblBhdGgiLCJDb21tb25IZWxwZXIiLCJnZXRBY3Rpb25Db250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJhY3Rpb25Db250ZXh0IiwiYWN0aW9uTmFtZSIsIkFjdGlvbiIsInRhcmdldEVudGl0eVR5cGVOYW1lIiwiY29udGV4dE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiaXNTdGF0aWNBY3Rpb24iLCJnZXRPYmplY3QiLCJUYWJsZUhlbHBlciIsIl9pc1N0YXRpY0FjdGlvbiIsIl9pc0FjdGlvbk92ZXJsb2FkT25EaWZmZXJlbnRUeXBlIiwidG9TdHJpbmciLCJhcHBsaWNhYmxlUHJvcGVydHlQYXRoIiwibm90QXBwbGljYWJsZVByb3BlcnR5UGF0aCIsImNvbnRleHRNZW51UGF0aCIsInBhcmFtcyIsImNvbnRleHRzIiwiYlN0YXRpY0FjdGlvbiIsImVudGl0eVNldE5hbWUiLCJhcHBsaWNhYmxlQ29udGV4dHMiLCJub3RBcHBsaWNhYmxlQ29udGV4dHMiLCJpc05hdmlnYWJsZSIsImVuYWJsZUF1dG9TY3JvbGwiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJjb250cm9sSWQiLCJjb250ZW50SWQiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJsYWJlbCIsIkxhYmVsIiwidmFsdWVPZiIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJvbkFjdGlvblByZXNzIiwicHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbiIsImdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlciIsImRhdGFGaWVsZENvbnRleHQiLCJuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2ciLCJlbmFibGVBbmFseXRpY3MiLCJuYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsImFwcGxpY2FibGVQcm9wZXJ0eSIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eSIsIlNlbWFudGljT2JqZWN0Iiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiTWFwcGluZyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRTb3VyY2UiLCJuYXZpZ2F0ZSIsImdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTiIsImdldEV4cHJlc3Npb25Gb3JEYXRhRmllbGRWYWx1ZSIsImZ1bGxDb250ZXh0UGF0aCIsInZhbHVlIiwiVmFsdWUiLCJhZGRTaW5nbGVRdW90ZXMiLCJleHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiaXNDb25zdGFudCIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwidmFsdWVFeHByZXNzaW9uIiwiZm9ybWF0VmFsdWVSZWN1cnNpdmVseSIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RGVsZXRlQnV0dG9uUHJlc3NIYW5kbGVyIiwiaGVhZGVySW5mbyIsImVudGl0eVR5cGUiLCJ0YXJnZXRUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckluZm8iLCJkZWxldGFibGVDb250ZXh0c1BhdGgiLCJzZWxlY3RlZENvbnRleHRzUGF0aCIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1BhdGgiLCJ1blNhdmVkQ29udGV4dHNQYXRoIiwibG9ja2VkQ29udGV4dHNQYXRoIiwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZVBhdGgiLCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlUGF0aCIsInRpdGxlRXhwcmVzc2lvbiIsIlRpdGxlIiwiZGVzY3JpcHRpb25FeHByZXNzaW9uIiwiRGVzY3JpcHRpb24iLCJpZCIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsInVuU2F2ZWRDb250ZXh0cyIsImxvY2tlZENvbnRleHRzIiwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSIsImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwic2VsZWN0ZWRDb250ZXh0cyIsImVkaXRGbG93IiwiZGVsZXRlTXVsdGlwbGVEb2N1bWVudHMiLCJnZW5lcmF0ZUZ1bmN0aW9uIiwib2JqZWN0VG9TdHJpbmciLCJnZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlciIsIm5vV3JhcCIsInJlbGF0ZWRBY3Rpb25FbGVtZW50IiwiZmluZFNsb3RBY3Rpb25Gcm9tS2V5Iiwia2V5IiwiaW50ZXJuYWxNb2RlbFBhdGgiLCJldmVudFBhcmFtZXRlcnMiLCJnZXRQYXJhbWV0ZXJzIiwiZmlyZUV2ZW50IiwiTG9nIiwiZXJyb3IiLCJGUE1IZWxwZXIiLCJhY3Rpb25XcmFwcGVyIiwiaGFuZGxlck1vZHVsZSIsImhhbmRsZXJNZXRob2QiLCJjYXRjaCIsImVyciIsInByZXNzIiwiYnVpbGRBY3Rpb25XcmFwcGVyIiwiZ2V0TWFzc0VkaXRCdXR0b25QcmVzc0hhbmRsZXIiLCJvbk1hc3NFZGl0QnV0dG9uUHJlc3NlZCIsImdldE1vdmVVcERvd25IYW5kbGVyIiwiZm9yTW92ZVVwIiwib25Nb3ZlVXBEb3duIiwiZ2V0UGFzdGVIYW5kbGVyIiwib25QYXN0ZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQge1xuXHR0eXBlIERhdGFGaWVsZEZvckFjdGlvbixcblx0dHlwZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdHR5cGUgRGF0YUZpZWxkVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLCBpc0NvbnN0YW50LCBpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgdHlwZSBCYXNlQWN0aW9uLCB0eXBlIEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgeyB0eXBlIERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwiLi4vQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwiLi4vRmllbGRcIjtcbmltcG9ydCB7IHR5cGUgVGFibGVCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwiLi9NZGNUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwiLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCIuL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgVGFibGVSdW50aW1lIGZyb20gXCIuL1RhYmxlUnVudGltZVwiO1xuaW1wb3J0IFVwbG9hZFRhYmxlUnVudGltZSBmcm9tIFwiLi91cGxvYWRUYWJsZS9VcGxvYWRUYWJsZVJ1bnRpbWVcIjtcblxudHlwZSBFdmVudEhhbmRsZXJUeXBlID0gKGU6IFVJNUV2ZW50KSA9PiB2b2lkO1xuXG4vLyBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byBzaGFyZSB0byBDb2xsYWJvcmF0aW9uIE1hbmFnZXIgc2ltdWx0YW5vdXNseVxuY29uc3Qgc2VsZWN0aW9uTGltaXRGb3JTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXIgPSAxO1xuLy8gbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gb3BlbiBpbiBuZXcgdGFicyBzaW11bHRhbm91c2x5XG5jb25zdCBzZWxlY3Rpb25MaW1pdEZvck9wZW5Jbk5ld1RhYiA9IDEwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyIHtcblx0YWRkQ2FyZFRvSW5zaWdodHNQcmVzcyE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0YmVmb3JlRXhwb3J0ITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRiZWZvcmVPcGVuQ29udGV4dE1lbnUhOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGNvbGxhcHNlTm9kZT86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQhOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGNvbnRleHRNZW51T3BlbkluTmV3VGFiPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRjb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlcjogRXZlbnRIYW5kbGVyVHlwZSB8IHVuZGVmaW5lZDtcblxuXHRkYXRhU3RhdGVDaGFuZ2UhOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcj86IChtZXNzYWdlOiBNZXNzYWdlLCBjb250cm9sOiBDb250cm9sKSA9PiBib29sZWFuO1xuXG5cdGRyYWdTdGFydERvY3VtZW50PzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRkcmFnRW50ZXJEb2N1bWVudD86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0ZHJvcERvY3VtZW50PzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRleHBhbmROb2RlPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRmaWVsZENoYW5nZUluQ3JlYXRpb25Sb3c/OiB0eXBlb2YgRmllbGQucHJvdG90eXBlLmNoYW5nZTtcblxuXHRmaWVsZExpdmVDaGFuZ2U/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHJvd1ByZXNzPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRub29wPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRzZWdtZW50ZWRCdXR0b25QcmVzcz86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0c2VsZWN0aW9uQ2hhbmdlITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHR0YWJsZUNvbnRleHRDaGFuZ2U/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHVwbG9hZENvbXBsZXRlZCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dXBsb2FkRmlsZU5hbWVMZW5ndGhFeGNlZWRlZCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dXBsb2FkRmlsZVNpemVFeGNlZWRlZCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dXBsb2FkSXRlbVZhbGlkYXRpb25IYW5kbGVyITogRnVuY3Rpb247XG5cblx0dXBsb2FkTWVkaWFUeXBlTWlzbWF0Y2ghOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHZhcmlhbnRTYXZlZD86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dmFyaWFudFNlbGVjdGVkPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRwcml2YXRlIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cblx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSB0YWJsZUJsb2NrUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdFx0c2V0dGluZ3M6IHsgY29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5OyBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsIH0sXG5cdFx0cHJpdmF0ZSB0YWJsZUFQST86IFRhYmxlQVBJXG5cdCkge1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudGl0eSA9IHNldHRpbmdzLmNvbGxlY3Rpb25FbnRpdHk7XG5cdFx0dGhpcy5tZXRhTW9kZWwgPSBzZXR0aW5ncy5tZXRhTW9kZWw7XG5cblx0XHRpZiAodGFibGVBUEkpIHtcblx0XHRcdHRoaXMuY29uc3RydWN0b3JXaXRoRnVuY3Rpb25zKHRhYmxlQVBJKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb25zdHJ1Y3RvcldpdGhTdHJpbmdzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBldmVudCBoYW5kbGVyIHByb3BlcnRpZXMgd2l0aCBzdHJpbmcgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBjb25zdHJ1Y3RvcldpdGhTdHJpbmdzKCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYmxlVHlwZSA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5jb250cm9sPy50eXBlO1xuXG5cdFx0dGhpcy5hZGRDYXJkVG9JbnNpZ2h0c1ByZXNzID0gXCJBUEkub25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQoJGV2ZW50LCAkY29udHJvbGxlcilcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy5iZWZvcmVFeHBvcnQgPSBcIkFQSS5vbkJlZm9yZUV4cG9ydCgkZXZlbnQpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMuYmVmb3JlT3BlbkNvbnRleHRNZW51ID0gXCJBUEkub25Db250ZXh0TWVudVByZXNzKCRldmVudClcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy5jb2xsYXBzZU5vZGUgPVxuXHRcdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKFwiQVBJLm9uQ29sbGFwc2VFeHBhbmROb2RlKCRldmVudCwgZmFsc2UpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmNvbnRleHRNZW51SXRlbVNlbGVjdGVkID0gXCJUYWJsZVJ1bnRpbWUub25Db250ZXh0TWVudUl0ZW1TZWxlY3RlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRcdGNvbnN0IHJvd05hdmlnYXRpb25JbmZvID0gdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24/LmFubm90YXRpb24ucm93Py5uYXZpZ2F0aW9uSW5mbztcblx0XHRpZiAocm93TmF2aWdhdGlvbkluZm8gIT09IHVuZGVmaW5lZCB8fCB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLm92ZXJyaWRlUm93UHJlc3MpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIGEgcm93IHByZXNzIGRlZmluZWQsIHRoZXJlIGlzIGEgb3BlbiBpbiBuZXcgdGFiIGluIHRoZSBjb250ZXh0dWFsIG1lbnUgYW5kIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGhhbmRsZXIgaXMgc3RpbGwgZGVmaW5lZFxuXHRcdFx0Ly8gY3VzdG9tZXIgZm91bmQgY2xldmVyIHdheXMgdG8gdXNlIGl0IGxpa2UgaW4gQ1MyMDI1MDAxMDAzNTEyNVxuXHRcdFx0aWYgKHJvd05hdmlnYXRpb25JbmZvPy50eXBlID09PSBcIk91dGJvdW5kXCIpIHtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYiA9XG5cdFx0XHRcdFx0YC5vbk9wZW5Jbk5ld1RhYk5hdmlnYXRlT3V0Qm91bmQoJyR7cm93TmF2aWdhdGlvbkluZm8ubmF2aWdhdGlvblRhcmdldH0nLCAle2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9LCBcIlwiLCAke3NlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFifSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuY29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXIgPVxuXHRcdFx0XHRcdGBBUEkub25TaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJQcmVzcygkZXZlbnQsICRjb250cm9sbGVyLCAle2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9LCAke3NlbGVjdGlvbkxpbWl0Rm9yU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyfSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYiA9XG5cdFx0XHRcdFx0YEFQSS5vbk9wZW5Jbk5ld1RhYlByZXNzKCRldmVudCwgJGNvbnRyb2xsZXIsICAle2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9LCAle2ludGVybmFsPmNvbnRleHRtZW51L25hdmlnYWJsZUNvbnRleHRzfSx7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6ICcke1xuXHRcdFx0XHRcdFx0cm93TmF2aWdhdGlvbkluZm8/LnRhcmdldFBhdGggPz8gXCJcIlxuXHRcdFx0XHRcdH0nLCBuYXZNb2RlOiAnb3BlbkluTmV3VGFiJyB9LCAke3NlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFifSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmRhdGFTdGF0ZUNoYW5nZSA9IFwiQVBJLm9uRGF0YVN0YXRlQ2hhbmdlXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdFx0aWYgKHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5jb250cm9sPy5oYXNEYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIpIHtcblx0XHRcdHRoaXMuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyID0gXCJUYWJsZVJ1bnRpbWUuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyXCIgYXMgdW5rbm93biBhcyAoXG5cdFx0XHRcdG1lc3NhZ2U6IE1lc3NhZ2UsXG5cdFx0XHRcdGNvbnRyb2w6IENvbnRyb2xcblx0XHRcdCkgPT4gYm9vbGVhbjtcblx0XHR9XG5cblx0XHR0aGlzLmRyYWdTdGFydERvY3VtZW50ID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKFwiQVBJLm9uRHJhZ1N0YXJ0RG9jdW1lbnRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuZHJhZ0VudGVyRG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAoXCJBUEkub25EcmFnRW50ZXJEb2N1bWVudFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kcm9wRG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAoXCJBUEkub25Ecm9wRG9jdW1lbnRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuZXhwYW5kTm9kZSA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IChcIkFQSS5vbkNvbGxhcHNlRXhwYW5kTm9kZSgkZXZlbnQsIHRydWUpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdyA9IGBUYWJsZVJ1bnRpbWUub25GaWVsZENoYW5nZUluQ3JlYXRpb25Sb3coJGV2ZW50LCAkeyEhdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb25cblx0XHRcdC5jb250cm9sLmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbn0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy5maWVsZExpdmVDaGFuZ2UgPVxuXHRcdFx0dGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jcmVhdGlvbk1vZGU/Lm5hbWUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCJcblx0XHRcdFx0PyAoXCJBUEkub25GaWVsZExpdmVDaGFuZ2UoJGV2ZW50KVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSlcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5yb3dQcmVzcyA9IFwiQVBJLm9uVGFibGVSb3dQcmVzc1wiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLm5vb3AgPSBcIkFQSS5vbk5vb3BcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy5zZWdtZW50ZWRCdXR0b25QcmVzcyA9IFwiQVBJLm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnNlbGVjdGlvbkNoYW5nZSA9IFwiQVBJLm9uU2VsZWN0aW9uQ2hhbmdlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnRhYmxlQ29udGV4dENoYW5nZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0PyAoYFRhYmxlUnVudGltZS5vblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkKCRldmVudCwgJHt0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uYW5ub3RhdGlvbj8uaW5pdGlhbEV4cGFuc2lvbkxldmVsfSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSlcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLnVwbG9hZENvbXBsZXRlZCA9IFwiVXBsb2FkVGFibGVSdW50aW1lLm9uVXBsb2FkQ29tcGxldGVkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudXBsb2FkRmlsZU5hbWVMZW5ndGhFeGNlZWRlZCA9IFwiVXBsb2FkVGFibGVSdW50aW1lLm9uRmlsZU5hbWVMZW5ndGhFeGNlZWRlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnVwbG9hZEZpbGVTaXplRXhjZWVkZWQgPSBcIlVwbG9hZFRhYmxlUnVudGltZS5vbkZpbGVTaXplRXhjZWVkZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy51cGxvYWRJdGVtVmFsaWRhdGlvbkhhbmRsZXIgPSBcIlVwbG9hZFRhYmxlUnVudGltZS51cGxvYWRGaWxlXCIgYXMgdW5rbm93biBhcyBGdW5jdGlvbjtcblx0XHR0aGlzLnVwbG9hZE1lZGlhVHlwZU1pc21hdGNoID0gXCJVcGxvYWRUYWJsZVJ1bnRpbWUub25NZWRpYVR5cGVNaXNtYXRjaFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnZhcmlhbnRTYXZlZCA9IFwiQVBJLm9uVmFyaWFudFNhdmVkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudmFyaWFudFNlbGVjdGVkID0gXCJBUEkub25WYXJpYW50U2VsZWN0ZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIGV2ZW50IGhhbmRsZXIgcHJvcGVydGllcyB3aXRoIGZ1bmN0aW9ucy5cblx0ICogQHBhcmFtIHRhYmxlQVBJXG5cdCAqL1xuXHRwcml2YXRlIGNvbnN0cnVjdG9yV2l0aEZ1bmN0aW9ucyh0YWJsZUFQSTogVGFibGVBUEkpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZVR5cGUgPSB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uY29udHJvbD8udHlwZTtcblxuXHRcdHRoaXMuYWRkQ2FyZFRvSW5zaWdodHNQcmVzcyA9IHRhYmxlQVBJLm9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkLmJpbmQodGFibGVBUEkpO1xuXHRcdHRoaXMuYmVmb3JlRXhwb3J0ID0gdGFibGVBUEkub25CZWZvcmVFeHBvcnQuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5iZWZvcmVPcGVuQ29udGV4dE1lbnUgPSB0YWJsZUFQSS5vbkNvbnRleHRNZW51UHJlc3MuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5jb2xsYXBzZU5vZGUgPVxuXHRcdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdFx0XHRcdD8gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHR0YWJsZUFQSS5vbkNvbGxhcHNlRXhwYW5kTm9kZShlLCBmYWxzZSk7XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmNvbnRleHRNZW51SXRlbVNlbGVjdGVkID0gVGFibGVSdW50aW1lLm9uQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQuYmluZChUYWJsZVJ1bnRpbWUpO1xuXG5cdFx0Y29uc3Qgcm93TmF2aWdhdGlvbkluZm8gPSB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uYW5ub3RhdGlvbi5yb3c/Lm5hdmlnYXRpb25JbmZvO1xuXHRcdGlmIChyb3dOYXZpZ2F0aW9uSW5mbyAhPT0gdW5kZWZpbmVkIHx8IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMub3ZlcnJpZGVSb3dQcmVzcykge1xuXHRcdFx0aWYgKHJvd05hdmlnYXRpb25JbmZvPy50eXBlID09PSBcIk91dGJvdW5kXCIpIHtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYiA9IChfZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGFibGVBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0YWJsZUFQSS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRcdGNvbnRyb2xsZXI/Lm9uT3BlbkluTmV3VGFiTmF2aWdhdGVPdXRCb3VuZD8uKFxuXHRcdFx0XHRcdFx0cm93TmF2aWdhdGlvbkluZm8ubmF2aWdhdGlvblRhcmdldCxcblx0XHRcdFx0XHRcdGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIpLFxuXHRcdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuY29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXIgPSAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGFibGVBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKSE7XG5cdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGFibGVBUEkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdFx0XHR0YWJsZUFQSS5vblNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlclByZXNzKFxuXHRcdFx0XHRcdFx0ZSxcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KFwiY29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c1wiKSxcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkxpbWl0Rm9yU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYiA9IChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpITtcblx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0YWJsZUFQSS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRcdHRhYmxlQVBJLm9uT3BlbkluTmV3VGFiUHJlc3MoXG5cdFx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdFx0Y29udHJvbGxlcixcblx0XHRcdFx0XHRcdGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIpLFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L25hdmlnYWJsZUNvbnRleHRzXCIpLFxuXHRcdFx0XHRcdFx0eyBjYWxsRXh0ZW5zaW9uOiB0cnVlLCB0YXJnZXRQYXRoOiByb3dOYXZpZ2F0aW9uSW5mbz8udGFyZ2V0UGF0aCA/PyBcIlwiLCBuYXZNb2RlOiBcIm9wZW5Jbk5ld1RhYlwiIH0sXG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25MaW1pdEZvck9wZW5Jbk5ld1RhYlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5kYXRhU3RhdGVDaGFuZ2UgPSB0YWJsZUFQSS5vbkRhdGFTdGF0ZUNoYW5nZS5iaW5kKHRhYmxlQVBJKTtcblxuXHRcdGlmICh0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uY29udHJvbD8uaGFzRGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyKSB7XG5cdFx0XHR0aGlzLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlciA9IHRhYmxlQVBJLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlci5iaW5kKHRhYmxlQVBJKTtcblx0XHR9XG5cblx0XHR0aGlzLmRyYWdTdGFydERvY3VtZW50ID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKHRhYmxlQVBJLm9uRHJhZ1N0YXJ0RG9jdW1lbnQuYmluZCh0YWJsZUFQSSkgYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kcmFnRW50ZXJEb2N1bWVudCA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/ICh0YWJsZUFQSS5vbkRyYWdFbnRlckRvY3VtZW50LmJpbmQodGFibGVBUEkpIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuZHJvcERvY3VtZW50ID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKHRhYmxlQVBJLm9uRHJvcERvY3VtZW50LmJpbmQodGFibGVBUEkpIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuZXhwYW5kTm9kZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0PyAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRhYmxlQVBJLm9uQ29sbGFwc2VFeHBhbmROb2RlKGUsIHRydWUpO1xuXHRcdFx0XHQgIH1cblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLmZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdyA9IChlKTogdm9pZCA9PiB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUub25GaWVsZENoYW5nZUluQ3JlYXRpb25Sb3coZSwgISF0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbik7XG5cdFx0fTtcblx0XHR0aGlzLmZpZWxkTGl2ZUNoYW5nZSA9XG5cdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNyZWF0aW9uTW9kZT8ubmFtZSA9PT0gXCJJbmxpbmVDcmVhdGlvblJvd3NcIiA/IHRhYmxlQVBJLm9uRmllbGRMaXZlQ2hhbmdlLmJpbmQodGFibGVBUEkpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMucm93UHJlc3MgPSB0YWJsZUFQSS5vblRhYmxlUm93UHJlc3MuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5ub29wID0gdGFibGVBUEkub25Ob29wLmJpbmQodGFibGVBUEkpO1xuXHRcdHRoaXMuc2VnbWVudGVkQnV0dG9uUHJlc3MgPSB0YWJsZUFQSS5vblNlZ21lbnRlZEJ1dHRvblByZXNzZWQuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5zZWxlY3Rpb25DaGFuZ2UgPSB0YWJsZUFQSS5vblNlbGVjdGlvbkNoYW5nZWQuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy50YWJsZUNvbnRleHRDaGFuZ2UgPVxuXHRcdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdFx0XHRcdD8gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRUYWJsZVJ1bnRpbWUub25UcmVlVGFibGVDb250ZXh0Q2hhbmdlZChcblx0XHRcdFx0XHRcdFx0ZSxcblx0XHRcdFx0XHRcdFx0dGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24/LmFubm90YXRpb24/LmluaXRpYWxFeHBhbnNpb25MZXZlbFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0ICB9XG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0dGhpcy51cGxvYWRDb21wbGV0ZWQgPSBVcGxvYWRUYWJsZVJ1bnRpbWUub25VcGxvYWRDb21wbGV0ZWQuYmluZChVcGxvYWRUYWJsZVJ1bnRpbWUpIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy51cGxvYWRGaWxlTmFtZUxlbmd0aEV4Y2VlZGVkID0gVXBsb2FkVGFibGVSdW50aW1lLm9uRmlsZU5hbWVMZW5ndGhFeGNlZWRlZC5iaW5kKFVwbG9hZFRhYmxlUnVudGltZSkgYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnVwbG9hZEZpbGVTaXplRXhjZWVkZWQgPSBVcGxvYWRUYWJsZVJ1bnRpbWUub25GaWxlU2l6ZUV4Y2VlZGVkLmJpbmQoVXBsb2FkVGFibGVSdW50aW1lKSBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudXBsb2FkSXRlbVZhbGlkYXRpb25IYW5kbGVyID0gVXBsb2FkVGFibGVSdW50aW1lLnVwbG9hZEZpbGUuYmluZChVcGxvYWRUYWJsZVJ1bnRpbWUpO1xuXHRcdHRoaXMudXBsb2FkTWVkaWFUeXBlTWlzbWF0Y2ggPSBVcGxvYWRUYWJsZVJ1bnRpbWUub25NZWRpYVR5cGVNaXNtYXRjaC5iaW5kKFVwbG9hZFRhYmxlUnVudGltZSkgYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnZhcmlhbnRTYXZlZCA9IHRhYmxlQVBJLm9uVmFyaWFudFNhdmVkLmJpbmQodGFibGVBUEkpO1xuXHRcdHRoaXMudmFyaWFudFNlbGVjdGVkID0gdGFibGVBUEkub25WYXJpYW50U2VsZWN0ZWQuYmluZCh0YWJsZUFQSSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgdGhlIENyZWF0ZSBidXR0b24uXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKiBAcGFyYW0gZm9yQ3JlYXRpb25Sb3dcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIoZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sIGZvckNyZWF0aW9uUm93OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiBmb3JDcmVhdGlvblJvd1xuXHRcdFx0XHQ/IFRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzLmJpbmQoVGFibGVSdW50aW1lKVxuXHRcdFx0XHQ6IChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGhpcy50YWJsZUFQSSEuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdFx0XHRcdGNvbnN0IHBhdGggPSBmb3JDb250ZXh0TWVudSA/IFwiY29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c1wiIDogXCJzZWxlY3RlZENvbnRleHRzXCI7XG5cdFx0XHRcdFx0XHRUYWJsZVJ1bnRpbWUub25DcmVhdGVCdXR0b25QcmVzcyhlLCBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KHBhdGgpKTtcblx0XHRcdFx0ICB9O1xuXHRcdH0gZWxzZSBpZiAoIWZvckNyZWF0aW9uUm93KSB7XG5cdFx0XHRyZXR1cm4gZm9yQ29udGV4dE1lbnVcblx0XHRcdFx0PyAoXCJUYWJsZVJ1bnRpbWUub25DcmVhdGVCdXR0b25QcmVzcygkZXZlbnQsICR7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c30pXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKVxuXHRcdFx0XHQ6IChcIlRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKCRldmVudCwgJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfSlcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJUYWJsZVJ1bnRpbWUub25DcmVhdGVCdXR0b25QcmVzcygkZXZlbnQpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciB0aGUgQ3JlYXRlIG1lbnUgaXRlbS5cblx0ICogQHBhcmFtIGluZGV4XG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldENyZWF0ZU1lbnVJdGVtUHJlc3NIYW5kbGVyKGluZGV4OiBudW1iZXIsIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0Y29uc3QgcGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIgOiBcInNlbGVjdGVkQ29udGV4dHNcIjtcblx0XHRpZiAodGhpcy50YWJsZUFQSSkge1xuXHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRUYWJsZVJ1bnRpbWUub25DcmVhdGVNZW51SXRlbVByZXNzKGUsIGluZGV4LCB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShwYXRoKSk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gYFRhYmxlUnVudGltZS5vbkNyZWF0ZU1lbnVJdGVtUHJlc3MoJGV2ZW50LCAke2luZGV4fSwgXFwke2ludGVybmFsPiR7cGF0aH19KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdH1cblx0fVxuXG5cdGdldENlbGxzU2VsZWN0aW9uSGFuZGxlcigpOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRpZiAodGhpcy50YWJsZUFQSSkge1xuXHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLnRhYmxlQVBJIS5wYXN0ZUVuYWJsZW1lbnRIYW5kbGVyKGUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkucGFzdGVFbmFibGVtZW50SGFuZGxlcigkZXZlbnQpYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBDdXQgYWN0aW9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRDdXRIYW5kbGVyKGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy50YWJsZUFQSSEub25DdXQoZSwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25DdXQoJGV2ZW50LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIENvcHkgYWN0aW9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRDb3B5SGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uQ29weShlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gYEFQSS5vbkNvcHkoJGV2ZW50LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgYW4gYWN0aW9uIGJ1dHRvbi5cblx0ICogQHBhcmFtIGRhdGFGaWVsZFxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBwYXJlbnRBY3Rpb25cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdGFjdGlvbjogQmFzZUFjdGlvbixcblx0XHRmb3JDb250ZXh0TWVudTogYm9vbGVhblxuXHQpOiBFdmVudEhhbmRsZXJUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWRhdGFGaWVsZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdFx0PyBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dCh0aGlzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IGFjdGlvbkNvbnRleHRQYXRoID8gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpIDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdGNvbnN0IGFjdGlvbk5hbWUgPSBkYXRhRmllbGQuQWN0aW9uO1xuXHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZU5hbWUgPSB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdFx0Y29uc3QgaXNTdGF0aWNBY3Rpb24gPVxuXHRcdFx0XHR0eXBlb2YgYWN0aW9uQ29udGV4dD8uZ2V0T2JqZWN0KCkgIT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KFRhYmxlSGVscGVyLl9pc1N0YXRpY0FjdGlvbihhY3Rpb25Db250ZXh0Py5nZXRPYmplY3QoKSwgYWN0aW9uTmFtZSkgfHxcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5faXNBY3Rpb25PdmVybG9hZE9uRGlmZmVyZW50VHlwZShhY3Rpb25OYW1lLnRvU3RyaW5nKCksIHRhcmdldEVudGl0eVR5cGVOYW1lKSk7XG5cdFx0XHRjb25zdCBhcHBsaWNhYmxlUHJvcGVydHlQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRjb25zdCBub3RBcHBsaWNhYmxlUHJvcGVydHlQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJhTm90QXBwbGljYWJsZVwiIDogXCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRjb25zdCBjb250ZXh0TWVudVBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblxuXHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpITtcblx0XHRcdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0XHRcdGNvbnRleHRzOiAhaXNTdGF0aWNBY3Rpb24gPyBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7Y29udGV4dE1lbnVQYXRofXNlbGVjdGVkQ29udGV4dHNgKSA6IG51bGwsXG5cdFx0XHRcdFx0YlN0YXRpY0FjdGlvbjogaXNTdGF0aWNBY3Rpb24gPyBpc1N0YXRpY0FjdGlvbiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRlbnRpdHlTZXROYW1lOiB0aGlzLmNvbGxlY3Rpb25FbnRpdHkubmFtZSxcblx0XHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM6ICFpc1N0YXRpY0FjdGlvblxuXHRcdFx0XHRcdFx0PyBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7ZGF0YUZpZWxkLkFjdGlvbn0vJHthcHBsaWNhYmxlUHJvcGVydHlQYXRofS9gKVxuXHRcdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0czogIWlzU3RhdGljQWN0aW9uXG5cdFx0XHRcdFx0XHQ/IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtkYXRhRmllbGQuQWN0aW9ufS8ke25vdEFwcGxpY2FibGVQcm9wZXJ0eVBhdGh9L2ApXG5cdFx0XHRcdFx0XHQ6IG51bGwsXG5cdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGFjdGlvbi5pc05hdmlnYWJsZSxcblx0XHRcdFx0XHRlbmFibGVBdXRvU2Nyb2xsOiBhY3Rpb24uZW5hYmxlQXV0b1Njcm9sbCxcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IGFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24sXG5cdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBkYXRhRmllbGQ/Lkludm9jYXRpb25Hcm91cGluZyA9PT0gXCJVSS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCIgPyBcIkNoYW5nZVNldFwiIDogXCJJc29sYXRlZFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xJZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXAsXG5cdFx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZC5MYWJlbD8udmFsdWVPZigpID8/IFwiXCIsXG5cdFx0XHRcdFx0bW9kZWw6IHRoaXMudGFibGVBUEkhLmdldFBhZ2VDb250cm9sbGVyKCkhLmdldE1vZGVsKCksXG5cdFx0XHRcdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nOiBhY3Rpb24uZGlzYWJsZVN0cmljdEhhbmRsaW5nXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXMudGFibGVBUEk/Lm9uQWN0aW9uUHJlc3MoZSwgdGhpcy50YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpISwgZGF0YUZpZWxkLkFjdGlvbi52YWx1ZU9mKCksIHBhcmFtcyk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gVGFibGVIZWxwZXIucHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbihcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnRleHRPYmplY3RQYXRoOiB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLFxuXHRcdFx0XHRcdGNvbnRlbnRJZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWRcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRpdHkubmFtZSxcblx0XHRcdFx0dGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRhY3Rpb25Db250ZXh0Py5nZXRPYmplY3QoKSxcblx0XHRcdFx0YWN0aW9uLmlzTmF2aWdhYmxlLFxuXHRcdFx0XHRhY3Rpb24uZW5hYmxlQXV0b1Njcm9sbCxcblx0XHRcdFx0YWN0aW9uLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbixcblx0XHRcdFx0Zm9yQ29udGV4dE1lbnUsXG5cdFx0XHRcdGFjdGlvbi5kaXNhYmxlU3RyaWN0SGFuZGxpbmdcblx0XHRcdCkgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciBhbiBJQk4gYWN0aW9uLlxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlcihhY3Rpb246IEJhc2VBY3Rpb24sIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBkYXRhRmllbGRDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoKTtcblx0XHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0Py5nZXRPYmplY3QoKSBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IG5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyAhPT0gdHJ1ZTtcblxuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikhO1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGFyYW1ldGVyczoge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0cz86IFY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IFY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IFY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZz86IG9iamVjdDtcblx0XHRcdFx0fSA9IHt9O1xuXG5cdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLm5hdmlnYXRpb25Db250ZXh0cyA9IGZvckNvbnRleHRNZW51XG5cdFx0XHRcdFx0PyBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIpXG5cdFx0XHRcdFx0OiBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpO1xuXG5cdFx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0ICYmICFkYXRhRmllbGQuSW5saW5lICYmIG5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZykge1xuXHRcdFx0XHRcdGNvbnN0IGFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0XHRcdGNvbnN0IG5vdEFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYU5vdEFwcGxpY2FibGVcIiA6IFwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLmFwcGxpY2FibGVDb250ZXh0cyA9IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdGBpYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vJHthcHBsaWNhYmxlUHJvcGVydHl9L2Bcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0cyA9IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdGBpYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vJHtub3RBcHBsaWNhYmxlUHJvcGVydHl9L2Bcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLmxhYmVsID0gZGF0YUZpZWxkLkxhYmVsIGFzIHN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBkYXRhRmllbGQuTWFwcGluZztcblx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudGFibGVBUEkhLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0XHRcdGlmIChuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cpIHtcblx0XHRcdFx0XHRjb250cm9sbGVyPy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyhcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24gYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdGUuZ2V0U291cmNlPENvbnRyb2w+KClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXI/Ll9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuU2VtYW50aWNPYmplY3QgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRlLmdldFNvdXJjZTxDb250cm9sPigpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIENvbW1vbkhlbHBlci5nZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk4oXG5cdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0Zm9yQ29udGV4dE1lbnUgPyBcIiR7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c31cIiA6IFwiJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfVwiLFxuXHRcdFx0XHRuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2csXG5cdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQpIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEV4cHJlc3Npb25Gb3JEYXRhRmllbGRWYWx1ZShcblx0XHRkYXRhRmllbGQ6IERhdGFGaWVsZFR5cGVzIHwgdW5kZWZpbmVkLFxuXHRcdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuXHQpOiBzdHJpbmcgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgdmFsdWUgPSBkYXRhRmllbGQ/LlZhbHVlO1xuXHRcdGlmICghdmFsdWUpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMudGFibGVBUEkgPyB2YWx1ZSA6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXModmFsdWUsIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBleHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHZhbHVlKTtcblx0XHRcdGlmIChpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKGV4cHJlc3Npb24pKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlRXhwcmVzc2lvbiA9IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkoZXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKTtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHZhbHVlRXhwcmVzc2lvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBEZWxldGUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXREZWxldGVCdXR0b25QcmVzc0hhbmRsZXIoZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRjb25zdCBoZWFkZXJJbmZvID0gKCh0aGlzLmNvbGxlY3Rpb25FbnRpdHkgYXMgRW50aXR5U2V0KT8uZW50aXR5VHlwZSB8fCAodGhpcy5jb2xsZWN0aW9uRW50aXR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSk/LnRhcmdldFR5cGUpXG5cdFx0XHQ/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbztcblxuXHRcdGNvbnN0IGNvbnRleHRNZW51UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiO1xuXHRcdGNvbnN0IGRlbGV0YWJsZUNvbnRleHRzUGF0aCA9IGAke2NvbnRleHRNZW51UGF0aH1kZWxldGFibGVDb250ZXh0c2A7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9c2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlYDtcblx0XHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNQYXRoID0gIWZvckNvbnRleHRNZW51XG5cdFx0XHQ/IGBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNgXG5cdFx0XHQ6IGAke2NvbnRleHRNZW51UGF0aH1udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNGb3JEZWxldGVgO1xuXHRcdGNvbnN0IHVuU2F2ZWRDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9dW5TYXZlZENvbnRleHRzYDtcblx0XHRjb25zdCBsb2NrZWRDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9bG9ja2VkQ29udGV4dHNgO1xuXHRcdGNvbnN0IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofWRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVgO1xuXHRcdGNvbnN0IGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofWRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVgO1xuXG5cdFx0Y29uc3QgdGl0bGVFeHByZXNzaW9uID0gdGhpcy5nZXRFeHByZXNzaW9uRm9yRGF0YUZpZWxkVmFsdWUoXG5cdFx0XHRoZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyxcblx0XHRcdHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGhcblx0XHQpO1xuXG5cdFx0Y29uc3QgZGVzY3JpcHRpb25FeHByZXNzaW9uID0gdGhpcy5nZXRFeHByZXNzaW9uRm9yRGF0YUZpZWxkVmFsdWUoXG5cdFx0XHRoZWFkZXJJbmZvPy5EZXNjcmlwdGlvbiBhcyBEYXRhRmllbGRUeXBlcyxcblx0XHRcdHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGhcblx0XHQpO1xuXG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoX2U6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRpZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQsXG5cdFx0XHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KG51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1BhdGgpIGFzIG51bWJlcixcblx0XHRcdFx0XHR1blNhdmVkQ29udGV4dHM6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkodW5TYXZlZENvbnRleHRzUGF0aCkgYXMgVjRDb250ZXh0W10sXG5cdFx0XHRcdFx0bG9ja2VkQ29udGV4dHM6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkobG9ja2VkQ29udGV4dHNQYXRoKSBhcyBWNENvbnRleHRbXSxcblx0XHRcdFx0XHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRoKSBhcyBWNENvbnRleHRbXSxcblx0XHRcdFx0XHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVQYXRoKSBhcyBWNENvbnRleHRbXSxcblx0XHRcdFx0XHRjb250cm9sSWQ6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb250cm9sSWRcIiksXG5cdFx0XHRcdFx0dGl0bGU6IHRpdGxlRXhwcmVzc2lvbixcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25FeHByZXNzaW9uLFxuXHRcdFx0XHRcdHNlbGVjdGVkQ29udGV4dHM6IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoc2VsZWN0ZWRDb250ZXh0c1BhdGgpIGFzIFY0Q29udGV4dFtdXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLmdldFBhZ2VDb250cm9sbGVyKCk/LmVkaXRGbG93LmRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzKFxuXHRcdFx0XHRcdGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoZGVsZXRhYmxlQ29udGV4dHNQYXRoKSxcblx0XHRcdFx0XHRwYXJhbXNcblx0XHRcdFx0KTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0aWQ6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXModGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQpLFxuXHRcdFx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHM6IGBcXCR7aW50ZXJuYWw+JHtudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNQYXRofX1gLFxuXHRcdFx0XHR1blNhdmVkQ29udGV4dHM6IGBcXCR7aW50ZXJuYWw+JHt1blNhdmVkQ29udGV4dHNQYXRofX1gLFxuXHRcdFx0XHRsb2NrZWRDb250ZXh0czogYFxcJHtpbnRlcm5hbD4ke2xvY2tlZENvbnRleHRzUGF0aH19YCxcblx0XHRcdFx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZTogYFxcJHtpbnRlcm5hbD4ke2RyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRofX1gLFxuXHRcdFx0XHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlOiBgXFwke2ludGVybmFsPiR7ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZVBhdGh9fWAsXG5cdFx0XHRcdGNvbnRyb2xJZDogXCIke2ludGVybmFsPmNvbnRyb2xJZH1cIixcblx0XHRcdFx0dGl0bGU6IHRpdGxlRXhwcmVzc2lvbixcblx0XHRcdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uRXhwcmVzc2lvbixcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0czogYFxcJHtpbnRlcm5hbD4ke3NlbGVjdGVkQ29udGV4dHNQYXRofX1gXG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLmdlbmVyYXRlRnVuY3Rpb24oXG5cdFx0XHRcdFwiLmVkaXRGbG93LmRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzXCIsXG5cdFx0XHRcdGBcXCR7aW50ZXJuYWw+JHtkZWxldGFibGVDb250ZXh0c1BhdGh9fWAsXG5cdFx0XHRcdENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhwYXJhbXMpXG5cdFx0XHQpIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciBhIG1hbmlmZXN0IGFjdGlvbiBidXR0b24uXG5cdCAqIEBwYXJhbSBhY3Rpb25cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoYWN0aW9uOiBDdXN0b21BY3Rpb24sIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdGlmIChhY3Rpb24ubm9XcmFwID09PSB0cnVlKSB7XG5cdFx0XHRcdC8vIElmIG5vV3JhcCA9IHRydWUsIHRoZW4gdGhlIGFjdGlvbiBpcyBhIHNsb3QgYWN0aW9uIChkZWZpbmVkIGluIHRoZSBYTUwgdmlldyBhcyBhbiBhZ2dyZWdhdGlvbiBvZiB0aGUgdGFibGUgYmxvY2spXG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRBY3Rpb25FbGVtZW50ID0gdGhpcy50YWJsZUFQSS5maW5kU2xvdEFjdGlvbkZyb21LZXkoYWN0aW9uLmtleSk7XG5cdFx0XHRcdGlmIChyZWxhdGVkQWN0aW9uRWxlbWVudCkge1xuXHRcdFx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxQYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiA6IFwic2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGhpcy50YWJsZUFQSSEuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSE7XG5cdFx0XHRcdFx0XHRjb25zdCBldmVudFBhcmFtZXRlcnMgPSB7IC4uLmUuZ2V0UGFyYW1ldGVycygpLCBjb250ZXh0czogaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KGludGVybmFsTW9kZWxQYXRoKSB9O1xuXHRcdFx0XHRcdFx0cmVsYXRlZEFjdGlvbkVsZW1lbnQuZmlyZUV2ZW50KFwicHJlc3NcIiwgZXZlbnRQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkNvdWxkbid0IGZpbmQgYWN0aW9uIHdpdGgga2V5IFwiICsgYWN0aW9uLmtleSk7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxQYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiA6IFwic2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikhO1xuXHRcdFx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGUsIGFjdGlvbi5oYW5kbGVyTW9kdWxlLCBhY3Rpb24uaGFuZGxlck1ldGhvZCwge1xuXHRcdFx0XHRcdFx0Y29udGV4dHM6IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShpbnRlcm5hbE1vZGVsUGF0aClcblx0XHRcdFx0XHR9KS5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY3VzdG9tIGFjdGlvblwiLCBlcnIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gKGFjdGlvbi5ub1dyYXAgPT09IHRydWVcblx0XHRcdFx0PyBhY3Rpb24ucHJlc3Ncblx0XHRcdFx0OiBDb21tb25IZWxwZXIuYnVpbGRBY3Rpb25XcmFwcGVyKFxuXHRcdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdFx0eyBpZDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZW50SWQgfSxcblx0XHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHRcdCAgKSkgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBtYXNzIGVkaXQgYnV0dG9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRNYXNzRWRpdEJ1dHRvblByZXNzSGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkKGUsIGZvckNvbnRleHRNZW51KTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgQVBJLm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkKCRldmVudCwgJHtmb3JDb250ZXh0TWVudX0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgdGhlIG1vdmUgdXAgLyBtb3ZlIGRvd24gYnV0dG9ucy5cblx0ICogQHBhcmFtIGZvck1vdmVVcFxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRNb3ZlVXBEb3duSGFuZGxlcihmb3JNb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy50YWJsZUFQSSEub25Nb3ZlVXBEb3duKGUsIGZvck1vdmVVcCwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25Nb3ZlVXBEb3duKCRldmVudCwgJHtmb3JNb3ZlVXB9LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIFBhc3RlIGFjdGlvbi5cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0UGFzdGVIYW5kbGVyKGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLnRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uUGFzdGUoZSwgY29udHJvbGxlciwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25QYXN0ZSgkZXZlbnQsICRjb250cm9sbGVyLCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQTRCQTtFQUNBLE1BQU1BLDRDQUE0QyxHQUFHLENBQUM7RUFDdEQ7RUFDQSxNQUFNQyw2QkFBNkIsR0FBRyxFQUFFO0VBQUMsSUFFcEJDLHlCQUF5QjtJQTJEN0MsU0FBQUEsMEJBQ1NDLG9CQUEwQyxFQUNsREMsUUFBeUYsRUFDakZDLFFBQW1CLEVB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
@@ -314,6 +314,16 @@ export default class TableEventHandlerProvider {
314
314
  }
315
315
  }
316
316
 
317
+ getCellsSelectionHandler(): EventHandlerType {
318
+ if (this.tableAPI) {
319
+ return (e: UI5Event): void => {
320
+ this.tableAPI!.pasteEnablementHandler(e);
321
+ };
322
+ } else {
323
+ return `API.pasteEnablementHandler($event)` as unknown as EventHandlerType;
324
+ }
325
+ }
326
+
317
327
  /**
318
328
  * Gets the event handler for the Cut action.
319
329
  * @param forContextMenu