@sapui5/sap.fe.macros 1.139.0 → 1.139.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +1 -1
  4. package/src/sap/fe/macros/Chart.tsx +1 -1
  5. package/src/sap/fe/macros/RichTextEditor.js +1 -2
  6. package/src/sap/fe/macros/RichTextEditor.tsx +0 -1
  7. package/src/sap/fe/macros/ValueHelp.js +4 -28
  8. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  9. package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
  10. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
  11. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  12. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  13. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  14. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  15. package/src/sap/fe/macros/controls/Section.js +3 -2
  16. package/src/sap/fe/macros/controls/Section.ts +2 -1
  17. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  18. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  19. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +8 -8
  20. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +7 -7
  21. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +2 -2
  22. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +1 -1
  23. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  24. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  25. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  26. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  27. package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
  28. package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
  29. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +5 -3
  30. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +13 -3
  31. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  32. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  33. package/src/sap/fe/macros/form/Form.block.js +6 -2
  34. package/src/sap/fe/macros/form/Form.block.ts +4 -1
  35. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  36. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  37. package/src/sap/fe/macros/internal/field/DisplayStyle.js +4 -2
  38. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +3 -1
  39. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  40. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  41. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  42. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
  43. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +5 -1
  44. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +4 -0
  45. package/src/sap/fe/macros/library.js +1 -1
  46. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  47. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  48. package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
  49. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +2 -1
  50. package/src/sap/fe/macros/table/Table.js +7 -1
  51. package/src/sap/fe/macros/table/Table.tsx +7 -1
  52. package/src/sap/fe/macros/table/TableAPI.js +8 -1
  53. package/src/sap/fe/macros/table/TableAPI.ts +15 -2
  54. package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
  55. package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
  56. package/src/sap/fe/macros/table/TreeTable.js +7 -1
  57. package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
  58. package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -2
  59. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +10 -3
  60. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  61. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  62. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
  63. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
  64. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -3
  65. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +28 -2
  66. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  67. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
@@ -61,7 +61,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
61
61
  oDataFieldWidth = TableSizeHelper.getWidthForDataFieldForAnnotation(oData, false, propertyInfos, convertedMetaData, showDataFieldsLabel);
62
62
  break;
63
63
  case "com.sap.vocabularies.UI.v1.DataField":
64
- oDataFieldWidth = TableSizeHelper.getWidthForDataField(oData, showDataFieldsLabel, propertyInfos, convertedMetaData, false);
64
+ oDataFieldWidth = TableSizeHelper.getWidthForDataField(oData, showDataFieldsLabel, propertyInfos, convertedMetaData, false, involvedDataModelObjects);
65
65
  break;
66
66
  case "com.sap.vocabularies.UI.v1.DataFieldForAction":
67
67
  oDataFieldWidth = {
@@ -156,6 +156,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
156
156
  // Add the $editState property
157
157
  properties.push({
158
158
  key: "$editState",
159
+ name: "$editState",
159
160
  path: "$editState",
160
161
  groupLabel: "",
161
162
  group: "",
@@ -1377,4 +1378,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
1377
1378
  }
1378
1379
  });
1379
1380
  }, false);
1380
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiT2JqZWN0IiwiYXNzaWduIiwiVGFibGVEZWxlZ2F0ZUJhc2UiLCJhcGlWZXJzaW9uIiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAiLCJ0YWJsZSIsInByb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb3MiLCJrZXkiLCJpbmRleE9mIiwiY29sdW1uIiwiZ2V0Q29sdW1ucyIsImZpbmQiLCJjb2wiLCJnZXRQcm9wZXJ0eUtleSIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkTWV0YURhdGEiLCJjb252ZXJ0ZWRUeXBlcyIsIm9EYXRhRmllbGQiLCJ0YXJnZXRPYmplY3QiLCJvRmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJhRmllbGRXaWR0aCIsIkRhdGEiLCJmb3JFYWNoIiwib0RhdGEiLCJvRGF0YUZpZWxkV2lkdGgiLCIkVHlwZSIsIlRhYmxlU2l6ZUhlbHBlciIsImdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImdldFdpZHRoRm9yRGF0YUZpZWxkIiwibGFiZWxXaWR0aCIsInByb3BlcnR5V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsInRvU3RyaW5nIiwicHVzaCIsIm5XaWRlc3QiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsIk1hdGgiLCJtYXgiLCJ2aXN1YWxTZXR0aW5ncyIsImRlZXBFeHRlbmQiLCJ3aWR0aENhbGN1bGF0aW9uIiwidmVydGljYWxBcnJhbmdlbWVudCIsIm1pbldpZHRoIiwiY2VpbCIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAiLCJwcm9wZXJ0eSIsInRhYmxlQVBJIiwiZ2V0UGFyZW50IiwibWV0YU1vZGVsIiwiZGF0YUZpZWxkIiwiZ2V0T2JqZWN0IiwiZ2FwIiwiZ2V0UHJvcGVydHkiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCIsInVuaXQiLCJ1bml0VGV4dCIsInRpbWV6b25lVGV4dCIsIm9UYWJsZUFQSSIsInRleHQiLCJnZXRSZWFkT25seSIsIl9jb21wdXRlTGFiZWwiLCJsYWJlbE1hcCIsImxhYmVsIiwicHJvcGVydGllc1dpdGhTYW1lTGFiZWwiLCJpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSIsInNvbWUiLCJwcm9wIiwicGF0aCIsIm1vZGUiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImFkZGl0aW9uYWxMYWJlbHMiLCJmaWx0ZXJhYmxlIiwiam9pbiIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwcm9wZXJ0aWVzIiwicDEzbk1vZGUiLCJnZXRQMTNuTW9kZSIsInNvcnRhYmxlIiwiZ3JvdXBhYmxlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwiZGF0YVR5cGUiLCJ2aXNpYmxlIiwiZ2V0Q29sdW1uc0ZvciIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJmZXRjaEV4cG9ydENhcGFiaWxpdGllcyIsIm9UYWJsZSIsIm9DYXBhYmlsaXRpZXMiLCJYTFNYIiwib01vZGVsIiwiRGVsZWdhdGVVdGlsIiwiZmV0Y2hNb2RlbCIsInRoZW4iLCJtb2RlbCIsImFTdXBwb3J0ZWRGb3JtYXRzIiwiYUxvd2VyRm9ybWF0cyIsIm1hcCIsImVsZW1lbnQiLCJ0b0xvd2VyQ2FzZSIsIm9Bbm5vdGF0aW9uIiwiY2F0Y2giLCJlcnIiLCJMb2ciLCJlcnJvciIsIl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJjb2x1bW5JbmZvIiwiY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRmlsdGVyYWJsZSIsImlzUGF0aEZpbHRlcmFibGUiLCJyZWxhdGl2ZVBhdGgiLCJpc1BhcnRPZkxpbmVJdGVtIiwiaXNQYXJ0T2ZDdXN0b21Db2x1bW4iLCJpc0NvbnN0YW50IiwiX2ZldGNoUHJvcGVydHlJbmZvIiwiYXBwQ29tcG9uZW50Iiwic0Fic29sdXRlTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvbkNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImlzQ29tcGxleFR5cGUiLCJ0eXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiYkZpbHRlcmFibGUiLCJDb21tb25IZWxwZXIiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsImJJc0FuYWx5dGljYWxUYWJsZSIsImdldEN1c3RvbURhdGEiLCJnZXRMb2NhbGl6ZWRUZXh0IiwidG9vbHRpcCIsIl9nZXRUeXBlQ29uZmlnIiwibmFtZSIsImZvcm1hdE9wdGlvbnMiLCJiYXNlVHlwZSIsInN0eWxlIiwiY29uc3RyYWludHMiLCJhdmFpbGFiaWxpdHkiLCJleHBvcnRTZXR0aW5ncyIsIl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyIsInR5cGUiLCJDb2x1bW5UeXBlIiwiQW5ub3RhdGlvbiIsInRlbXBsYXRlIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJrZXlzIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMiLCJpc0tleSIsImlzR3JvdXBhYmxlIiwidGV4dEFycmFuZ2VtZW50IiwiX3NldFRleHRBcnJhbmdlbWVudEluZm8iLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJhZGRpdGlvbmFsTGFiZWwiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0IiwiZm9ybWF0IiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiZGVzY3JpcHRpb25Db2x1bW4iLCJvQ29sIiwidGV4dFByb3BlcnR5IiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJhZ2dyZWdhdGFibGUiLCJfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyIsIl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyIsImhlYWRlciIsInN0YXJ0c1dpdGgiLCJNb2RlbEhlbHBlciIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbkluZm8iLCJoYXNEcmFmdEluZGljYXRvciIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsIiwiX29UYWJsZSIsIl9vQ29sdW1uSW5mbyIsImFWaXNpYmxlQ29sdW1ucyIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzSW50ZXJuYWxQYXRoIiwiZ2V0UGF0aCIsImluZGV4Iiwic2V0UHJvcGVydHkiLCJfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiZW50aXR5VHlwZVBhdGgiLCJiaW5kaW5nUGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJmZXRjaGVkUHJvcGVydGllcyIsIm5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiQ29tbW9uVXRpbHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIlByb21pc2UiLCJyZXNvbHZlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZSIsIkVycm9yIiwic2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsImdldFByb3BlcnR5SW5mb3MiLCJfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJnZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic3ViRmV0Y2hlZFByb3BlcnRpZXMiLCJzZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic2V0Tm9EYXRhSW5mb3JtYXRpb24iLCJpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbiIsIm5vRGF0YUFnZ3JlZ2F0aW9uIiwiZ2V0Tm9EYXRhIiwiaXNBIiwiY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSIsInNldFRpdGxlIiwidGl0bGUiLCJzZXREZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0SWxsdXN0cmF0aW9uVHlwZSIsImlsbHVzdHJhdGlvblR5cGUiLCJzZXRJbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0aW9uU2l6ZSIsImlsbHVzdHJhdGVkTWVzc2FnZSIsIklsbHVzdHJhdGVkTWVzc2FnZSIsInNldE5vRGF0YSIsInNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlIiwiYmluZGluZ0luZm8iLCJ0YWJsZUZpbHRlckluZm8iLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic3VmZml4UmVzb3VyY2VLZXkiLCJzdWJzdHJpbmciLCJpbGx1c3RyYXRlZEluZm9ybWF0aW9uIiwiZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMiLCJnZXRRdWlja0ZpbHRlciIsImdldFRleHQiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9TZWFyY2hSZXN1bHRzIiwiZmlsdGVyQXNzb2NpYXRpb24iLCJnZXRGaWx0ZXIiLCJoYXNGaWx0ZXJPclNlYXJjaCIsInNlYXJjaCIsImZpbHRlcnMiLCJ0ZXN0IiwiTm9EYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwibGl2ZU1vZGUiLCJnZXROb0RhdGFNZXNzYWdlTW9kZSIsImN1cnJlbnROb0RhdGEiLCJoYW5kbGVUYWJsZURhdGFSZWNlaXZlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImJEYXRhUmVjZWl2ZWRBdHRhY2hlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNldFRpbWVvdXQiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiSlNPTiIsInBhcnNlIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJEZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsInNldFVwRW1wdHlSb3dzIiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwic2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsIiwiY29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsIiwiZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZSIsImZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlIiwiaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJkYXRhTW9kZWwiLCJpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsImlzT3B0aW1pc3RpY0JhdGNoRGlzYWJsZWQiLCJvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIiLCJwcm9taXNlIiwicmViaW5kIiwib0JpbmRpbmdJbmZvIiwiYklzU3VzcGVuZGVkIiwiVGFibGVSdW50aW1lIiwiY2xlYXJTZWxlY3Rpb24iLCJhcHBseSIsIm9uVGFibGVCb3VuZCIsIndoZW5Cb3VuZCIsIm9FcnJvciIsImZldGNoUHJvcGVydGllcyIsInByZUluaXQiLCJmYXN0Q3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwidXBkYXRlQmluZGluZ0luZm8iLCJpbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSIsIl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvIiwiX2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzIiwiX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZmlyZUV2ZW50IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvIiwiYXR0YWNoZWRFdmVudHMiLCJnZXRBdHRhY2hlZEV2ZW50cyIsImNvbnRleHQiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsInNldEF0dGFjaEV2ZW50cyIsImUiLCJzb3J0ZXJzIiwic29ydGVyIiwibmV3U29ydGVyc1RvQmVBcHBsaWVkIiwidGFibGVQcm9wZXJ0aWVzIiwidGFibGVQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsInVuaXRTb3J0ZXJBdmFpbGFibGUiLCJzb3J0IiwiU29ydGVyIiwiZ2V0RmlsdGVycyIsInVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCIsInRhYmxlRGVmIiwicmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHMiLCJhbm5vdGF0aW9uIiwiZW50aXR5VHlwZU5hbWUiLCJwYXJhbWV0ZXJzIiwiJHNlbGVjdCIsImdldFZpZXciLCJjb252ZXJ0ZXJUeXBlIiwiY2FyZHMiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJnZXRJblJlc3VsdFByb3BlcnR5S2V5cyIsImNvbnRyb2wiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJhbGxLa2V5c1JlcXVlc3RlZCIsImNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCIsIm92ZXJyaWRlUm93UHJlc3MiLCJyZXF1ZXN0QXRMZWFzdCIsImZpbHRlciIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImdldENvbnRlbnQiLCJhbGxDb2x1bW5zIiwia2V5UHJvcGVydHlOYW1lcyIsImMiLCJkaXNwbGF5ZWRDb2x1bW5zIiwicmVmZXJlbmNlZFByb3BlcnR5UGF0aHMiLCJTZXQiLCJwcm9jZXNzQ29sdW1uIiwiYWRkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJhZGRpdGlvbmFsQ29sdW1uTmFtZSIsImFkZGl0aW9uYWxDb2x1bW4iLCJyZWxhdGVkQ29sdW1uTmFtZSIsInJlbGF0ZWRDb2x1bW4iLCJldmVyeSIsInByb3BOYW1lIiwiaGFzIiwiZ2V0U2VhcmNoUXVlcnkiLCJiaW5kaW5nIiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsImdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzIiwiJHNlYXJjaCIsInVwZGF0ZUJpbmRpbmciLCIkJGdldEtlZXBBbGl2ZUNvbnRleHQiLCJjb2xsZWN0aW9uUGF0aCIsImludGVybmFsTW9kZWwiLCJrZXB0QWxpdmVMaXN0cyIsIm5lZWRNYW51YWxSZWZyZXNoIiwidmlldyIsIm1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5IiwicGVuZGluZ01hbnVhbFVwZGF0ZSIsIm5ld1NvcnRlcnMiLCJzdHJpbmdpZnkiLCJ2aWV3RGF0YSIsIm9sZEZpbHRlcnMiLCJwcmV2aW91c1NvcnRlcnMiLCJmaWx0ZXJOb3RDaGFuZ2VkIiwiZGVlcEVxdWFsIiwiTFJNdWx0aVZpZXdFbmFibGVkIiwidmlld3MiLCJlbmFibGVBbmFseXRpY3MiLCJzZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwic2V0R3JvdXBDb25kaXRpb25zIiwic2V0VGFibGVCaW5kaW5nSW5mbyIsInNldERvd25sb2FkVXJsIiwicmVxdWVzdFJlZnJlc2giLCJnZXRHcm91cElkIiwiZmluYWxseSIsInN0b3JlZEV2ZW50cyIsIl9yZWYiLCJldmVudElkIiwiY2FsbGJhY2siLCJsaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZSIsInJvd0JpbmRpbmdJbmZvIiwiZ2V0VGFibGVUZW1wbGF0ZUJpbmRpbmdJbmZvIiwiYmluZGluZ0NvbnRleHQiLCJ0YWJsZUNhbkJlSW5JbmxpbmVFZGl0IiwiZ2V0QmluZGluZyIsImdldFVwZGF0ZUdyb3VwSWQiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJzdXNwZW5kZWQiLCJvRmlsdGVyIiwib0ZpbHRlckluZm8iLCJGaWx0ZXIiLCJhbmQiLCJvRGF0YVN0YXRlSW5kaWNhdG9yIiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaXNGaWx0ZXJpbmciLCJ1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeSIsImFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJmaWx0ZXJJbmZvIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInBheWxvYWQiLCJnZXRQYXlsb2FkIiwiZmlsdGVyT25BY3RpdmVFbnRpdGllcyIsImZpbHRlck9uQWN0aXZlIiwib3BlcmF0b3IiLCJ2YWx1ZTEiLCJfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQiLCJtb2RpZmllciIsInRhYmxlSWQiLCJzbG90Q29sdW1uc1hNTCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImpzeCIsInJlbmRlckFzWE1MIiwiZ2V0U2xvdENvbHVtbiIsInNsb3RYTUwiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIm9UZW1wbGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwibm9kZU5hbWUiLCJyZXBsYWNlV2l0aCIsInJlbW92ZSIsInJlc3VsdFhNTCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJtb2RlbHMiLCJnZXRDb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRQcmVwcm9jZXNzb3JDb250ZXh0IiwidGFyZ2V0cyIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJFeGNlbEZvcm1hdCIsImdldEV4Y2VsRGF0ZWZyb21KU0RhdGUiLCJnZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUiLCJnZXRFeGNlbFRpbWVmcm9tSlNUaW1lIiwiX2dldFZIUmVsZXZhbnRGaWVsZHMiLCJzTWV0YWRhdGFQYXRoIiwic0JpbmRpbmdQYXRoIiwiYUZpZWxkcyIsIm9EYXRhRmllbGREYXRhIiwiJGtpbmQiLCJvVmFsdWUiLCJpSW5kZXgiLCJnZXROYXZpZ2F0aW9uUGF0aCIsIl9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbiIsImFDb2x1bW5zIiwiYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IiLCJvQ29sdW1uIiwic0FkZFZpc2libGVDb2x1bW5OYW1lIiwic1Zpc2libGVDb2x1bW5OYW1lIiwiYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCIsInNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yIiwiaSIsImoiLCJyZW1vdmVJdGVtIiwib1Byb3BlcnR5SW5mb05hbWUiLCJtUHJvcGVydHlCYWciLCJkb1JlbW92ZUl0ZW0iLCJvTW9kaWZpZXIiLCJzRGF0YVByb3BlcnR5IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMiLCJfZ2V0TWV0YU1vZGVsIiwiX2dldEdyb3VwSWQiLCJzUmV0cmlldmVkR3JvdXBJZCIsIl9pbnNlcnRBZ2dyZWdhdGlvbiIsIm9WYWx1ZUhlbHAiLCJhZGRJdGVtIiwicHJvcGVydHlJbmZvTmFtZSIsInNUYWJsZUlkIiwid2FybmluZyIsInNQYXRoIiwiZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllciIsIm9UYWJsZUNvbnRleHQiLCJnZXRDdXJyZW50UGFnZVZpZXciLCJnZXRDb21wdXRlZENvbHVtbiIsImdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MiLCJwcm9wSW5mbyIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJmblRlbXBsYXRlRnJhZ21lbnQiLCJvSW5Qcm9wZXJ0eUluZm8iLCJvVmlldyIsImJEaXNwbGF5TW9kZSIsInNUYWJsZVR5cGVDdXN0b21EYXRhIiwic0NyZWF0aW9uTW9kZUN1c3RvbURhdGEiLCJhbGwiLCJhQ3VzdG9tRGF0YSIsIm9UaGlzIiwiSlNPTk1vZGVsIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwicmVhZE9ubHkiLCJ0YWJsZVR5cGUiLCJpZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJjb2xsZWN0aW9uIiwiY3JlYXRpb25Nb2RlIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJ0aGlzIiwidGFibGVDb2xsZWN0aW9uIiwiaGFuZGxlclByb3ZpZGVyIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsImNvbGxlY3Rpb25FbnRpdHkiLCJjb21wdXRlZENvbHVtblhNTCIsImdldENvbHVtblRlbXBsYXRlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJkZXN0cm95IiwiZ2V0RmlsdGVyRGVsZWdhdGUiLCJGaWx0ZXJCYXJEZWxlZ2F0ZSIsIm9QYXJlbnRDb250cm9sIiwic1Byb3BlcnR5SW5mb05hbWUiLCJyZXBsYWNlIiwiZ2V0VHlwZU1hcCIsImZvcm1hdEdyb3VwSGVhZGVyIiwib2JqIiwiZGF0YUJhc2VUeXBlIiwiZXh0ZXJuYWxGb3JtYXQiLCJWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFdpdGhCcmFja2V0cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIERhdGFGaWVsZEZvckFubm90YXRpb24sIEZpZWxkR3JvdXBUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEV4dGVuZFwiO1xuaW1wb3J0IHsgaXNDb25zdGFudCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuXG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Q29sdW1uRXhwb3J0U2V0dGluZ3MsXG5cdENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sXG5cdFRhYmxlQ29sdW1uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgVmFsdWVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBEZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgRXhjZWxGb3JtYXQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRXhjZWxGb3JtYXRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgeyBnZXRMb2NhbGl6ZWRUZXh0LCBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzVHlwZUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyQmFyRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckRlbGVnYXRlXCI7XG5pbXBvcnQgeyBnZXRDb2x1bW5UZW1wbGF0ZSwgZ2V0Q29tcHV0ZWRDb2x1bW4sIGdldFNsb3RDb2x1bW4gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9NZGNUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVJ1bnRpbWVcIjtcbmltcG9ydCBUYWJsZVNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVTaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgfSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgeyBKc0NvbnRyb2xUcmVlTW9kaWZpZXIgfSBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENUYWJsZSwgTURDVGFibGVQcm9wZXJ0eUluZm8gYXMgUHJvcGVydHlJbmZvLCBkZWZhdWx0IGFzIFRhYmxlLCBWaXN1YWxTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUeXBlQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL1R5cGVDb25maWdcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IFRhYmxlRGVsZWdhdGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0LCBkZWZhdWx0IGFzIHY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciBmcm9tIFwiLi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuXG5jb25zdCBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IgPSBcIi9zZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yXCI7XG5jb25zdCBTRUFSQ0hfSEFTX0JFRU5fRklSRUQgPSBcInNlYXJjaEZpcmVkXCI7XG5jb25zdCBDT0xVTU5fSEFTX0JFRU5fQURERUQgPSBcImNvbHVtbkFkZGVkXCI7XG5jb25zdCBQUkVWSU9VU19TT1JURVJTID0gXCJwcmV2aW91c1NvcnRlcnNcIjtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHNhcC51aS5tZGMuVGFibGUuXG4gKiA8aDM+PGI+Tm90ZTo8L2I+PC9oMz5cbiAqIFRoZSBjbGFzcyBpcyBleHBlcmltZW50YWwgYW5kIHRoZSBBUEkgYW5kIHRoZSBiZWhhdmlvciBhcmUgbm90IGZpbmFsaXplZC4gVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgZm9yIHByb2R1Y3RpdmUgdXNhZ2UuXG4gKiBAYXV0aG9yIFNBUCBTRVxuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWxcbiAqIEBzaW5jZSAxLjY5LjBcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlRGVsZWdhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgT2JqZWN0LmFzc2lnbih7fSwgVGFibGVEZWxlZ2F0ZUJhc2UsIHtcblx0YXBpVmVyc2lvbjogMixcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgd2lkdGggb2YgYSBGaWVsZEdyb3VwIGNvbHVtbi5cblx0ICogVGhlIHdpZHRoIG9mIHRoZSBGaWVsZEdyb3VwIGlzIHRoZSB3aWR0aCBvZiB0aGUgd2lkZXN0IHByb3BlcnR5IGNvbnRhaW5lZCBpbiB0aGUgRmllbGRHcm91cCAoaW5jbHVkaW5nIHRoZSBsYWJlbCBpZiBzaG93RGF0YUZpZWxkc0xhYmVsIGlzIHRydWUpXG5cdCAqIFRoZSByZXN1bHQgb2YgdGhpcyBjYWxjdWxhdGlvbiBpcyBzdG9yZWQgaW4gdGhlIHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24ubWluV2lkdGggcHJvcGVydHksIHdoaWNoIGlzIHVzZWQgYnkgdGhlIE1EQ3RhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gQ3VycmVudCBwcm9wZXJ0eUluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5SW5mb3MgQXJyYXkgb2YgcHJvcGVydGllc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZURlbGVnYXRlXG5cdCAqL1xuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yRmllbGRHcm91cDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sXG5cdFx0cHJvcGVydHlJbmZvczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdXG5cdCkge1xuXHRcdGlmIChwcm9wZXJ0eUluZm8ua2V5LmluZGV4T2YoXCJEYXRhRmllbGRGb3JBbm5vdGF0aW9uOjpGaWVsZEdyb3VwOjpcIikgPT09IDApIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IHRhYmxlLmdldENvbHVtbnMoKS5maW5kKChjb2wpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbC5nZXRQcm9wZXJ0eUtleSgpID09PSBwcm9wZXJ0eUluZm8ua2V5O1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBzaG93RGF0YUZpZWxkc0xhYmVsID0gY29sdW1uID8gY29sdW1uLmRhdGEoXCJzaG93RGF0YUZpZWxkc0xhYmVsXCIpID09PSBcInRydWVcIiA6IGZhbHNlO1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9NZXRhTW9kZWwuZ2V0Q29udGV4dChwcm9wZXJ0eUluZm8uYW5ub3RhdGlvblBhdGgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFEYXRhID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLmNvbnZlcnRlZFR5cGVzO1xuXHRcdFx0Y29uc3Qgb0RhdGFGaWVsZCA9IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjtcblx0XHRcdGNvbnN0IG9GaWVsZEdyb3VwID0gb0RhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwVHlwZTtcblx0XHRcdGNvbnN0IGFGaWVsZFdpZHRoOiBudW1iZXJbXSA9IFtdO1xuXHRcdFx0b0ZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChvRGF0YTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRcdFx0XHRsZXQgb0RhdGFGaWVsZFdpZHRoOiB7IGxhYmVsV2lkdGg6IG51bWJlcjsgcHJvcGVydHlXaWR0aDogbnVtYmVyIH07XG5cdFx0XHRcdHN3aXRjaCAob0RhdGEuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0b0RhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0b0RhdGEsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YSxcblx0XHRcdFx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZChcblx0XHRcdFx0XHRcdFx0b0RhdGEsXG5cdFx0XHRcdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWwsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFEYXRhLFxuXHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IHtcblx0XHRcdFx0XHRcdFx0bGFiZWxXaWR0aDogMCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlXaWR0aDogU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChvRGF0YS5MYWJlbD8udG9TdHJpbmcoKSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRGF0YUZpZWxkV2lkdGghKSB7XG5cdFx0XHRcdFx0YUZpZWxkV2lkdGgucHVzaChvRGF0YUZpZWxkV2lkdGgubGFiZWxXaWR0aCArIG9EYXRhRmllbGRXaWR0aC5wcm9wZXJ0eVdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBuV2lkZXN0ID0gYUZpZWxkV2lkdGgucmVkdWNlKGZ1bmN0aW9uIChhY2M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoYWNjLCB2YWx1ZSk7XG5cdFx0XHR9LCAwKTtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzIGFzIG9iamVjdCwge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBcnJhbmdlbWVudDogdHJ1ZSxcblx0XHRcdFx0XHRtaW5XaWR0aDogTWF0aC5jZWlsKG5XaWRlc3QpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBwcm9wZXJ0eTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbykge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0aWYgKCFwcm9wZXJ0eS5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aCAmJiBtZXRhTW9kZWwpIHtcblx0XHRcdFx0Y29uc3QgZGF0YUZpZWxkID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aH1AYCk7XG5cdFx0XHRcdGlmIChkYXRhRmllbGQgJiYgZGF0YUZpZWxkW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0pIHtcblx0XHRcdFx0XHRwcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHkudmlzdWFsU2V0dGluZ3MgfHwge30sIHtcblx0XHRcdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHRcdFx0Z2FwOiB0YWJsZUFQSS5nZXRQcm9wZXJ0eShcInJlYWRPbmx5XCIpID8gMCA6IDRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyxcblx0XHR1bml0Pzogc3RyaW5nLFxuXHRcdHVuaXRUZXh0Pzogc3RyaW5nLFxuXHRcdHRpbWV6b25lVGV4dD86IHN0cmluZ1xuXHQpIHtcblx0XHRjb25zdCBvVGFibGVBUEk6IEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPiB8IG51bGwgPSB0YWJsZSA/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4pIDogbnVsbDtcblx0XHQvLyB1cGRhdGUgZ2FwIGZvciBwcm9wZXJ0aWVzIHdpdGggc3RyaW5nIHVuaXRcblx0XHRjb25zdCB0ZXh0ID0gdW5pdFRleHQgfHwgdGltZXpvbmVUZXh0O1xuXHRcdGlmICh0ZXh0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Z2FwOiBNYXRoLmNlaWwoU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCh0ZXh0KSlcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh1bml0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Ly8gRm9yIHByb3BlcnRpZXMgd2l0aCB1bml0LCBhIGdhcCBuZWVkcyB0byBiZSBhZGRlZCB0byBwcm9wZXJseSByZW5kZXIgdGhlIGNvbHVtbiB3aWR0aCBvbiBlZGl0IG1vZGVcblx0XHRcdFx0XHRnYXA6IG9UYWJsZUFQSSAmJiBvVGFibGVBUEkuZ2V0UmVhZE9ubHkoKSA/IDAgOiA2XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZUxhYmVsOiBmdW5jdGlvbiAocHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sIGxhYmVsTWFwOiB7IFtsYWJlbDogc3RyaW5nXTogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdIH0pIHtcblx0XHRpZiAocHJvcGVydHkubGFiZWwpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsID0gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdO1xuXHRcdFx0Ly8gVGhpcyBjb21wdXRhdGlvbiBpcyBvbmx5IGZvciBkdXBsaWNhdGUgbGFiZWxzIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcy5cblx0XHRcdC8vIEV4Y2x1ZGUgdGV4dCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBhcyB0ZXh0IG9uIGEgcHJvcGVydHkgYW5ub3RhdGVkIHdpdGggdGV4dCBhcnJhbmdlbWVudCBzZXQgYXMgVGV4dE9ubHkuXG5cdFx0XHQvLyBFeGNsdWRlIG5hdmlnYXRpb24gcHJvcGVydGllcyBjcmVhdGVkIG9ubHkgZm9yIGZpbHRlcmluZyBwdXJwb3NlcyB3aXRoIGEgdGV4dCBhcnJhbmdlbWVudCBzZXQgdG8gVGV4dE9ubHkuXG5cdFx0XHRjb25zdCBpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSA9IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsPy5zb21lKFxuXHRcdFx0XHQocHJvcCkgPT4gcHJvcC50ZXh0ID09PSBwcm9wZXJ0eS5wYXRoICYmIHByb3A/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIlxuXHRcdFx0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydGllc1dpdGhTYW1lTGFiZWw/Lmxlbmd0aCA+IDEgJiZcblx0XHRcdFx0cHJvcGVydHkucGF0aD8uaW5jbHVkZXMoXCIvXCIpICYmXG5cdFx0XHRcdHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHMgJiZcblx0XHRcdFx0IWlzUHJvcGVydHlVc2VkQXNUZXh0T25seVByb3BlcnR5ICYmXG5cdFx0XHRcdCEocHJvcGVydHk/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIiAmJiBwcm9wZXJ0eS5maWx0ZXJhYmxlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHByb3BlcnR5LmxhYmVsID0gcHJvcGVydHkubGFiZWwgKyBcIiAoXCIgKyBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzLmpvaW4oXCIgLyBcIikgKyBcIilcIjtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzO1xuXHRcdH1cblx0fSxcblx0Ly9VcGRhdGUgVmlzdWFsU2V0dGluZyBmb3IgY29sdW1uV2lkdGggY2FsY3VsYXRpb24gYW5kIGxhYmVscyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0X3VwZGF0ZVByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydGllczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKSB7XG5cdFx0Y29uc3QgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10gfSA9IHt9O1xuXHRcdC8vIENoZWNrIGF2YWlsYWJsZSBwMTNuIG1vZGVzXG5cdFx0Y29uc3QgcDEzbk1vZGUgPSB0YWJsZS5nZXRQMTNuTW9kZSgpO1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGlmICghcHJvcGVydHkucHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eS5sYWJlbCkge1xuXHRcdFx0XHQvLyBPbmx5IGZvciBub24tY29tcGxleCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiU29ydFwiKSAmJiBwcm9wZXJ0eS5zb3J0YWJsZSkgfHxcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiRmlsdGVyXCIpICYmIHByb3BlcnR5LmZpbHRlcmFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIkdyb3VwXCIpICYmIHByb3BlcnR5Lmdyb3VwYWJsZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bGFiZWxNYXBbcHJvcGVydHkubGFiZWxdID1cblx0XHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSAhPT0gdW5kZWZpbmVkID8gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdLmNvbmNhdChbcHJvcGVydHldKSA6IFtwcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwKHRhYmxlLCBwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAodGFibGUsIHByb3BlcnR5KTtcblx0XHRcdHRoaXMuX2NvbXB1dGVMYWJlbChwcm9wZXJ0eSwgbGFiZWxNYXApO1xuXHRcdH0pO1xuXHRcdC8vIEFkZCB0aGUgJGVkaXRTdGF0ZSBwcm9wZXJ0eVxuXHRcdHByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRrZXk6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdFx0Z3JvdXA6IFwiXCIsXG5cdFx0XHRsYWJlbDogXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2Vcblx0XHR9IGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHR9LFxuXG5cdGdldENvbHVtbnNGb3I6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBUYWJsZUNvbHVtbltdIHtcblx0XHRyZXR1cm4gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBleHBvcnQgY2FwYWJpbGl0aWVzIGZvciB0aGUgZ2l2ZW4gc2FwLnVpLm1kYy5UYWJsZSBpbnN0YW5jZS5cblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiB0aGUgdGFibGVcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXByZXNlbnRpbmcgdGhlIGV4cG9ydCBjYXBhYmlsaXRpZXMgb2YgdGhlIHRhYmxlIGluc3RhbmNlXG5cdCAqL1xuXHRmZXRjaEV4cG9ydENhcGFiaWxpdGllczogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpOiBQcm9taXNlPHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfT4ge1xuXHRcdGNvbnN0IG9DYXBhYmlsaXRpZXM6IHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfSA9IHsgWExTWDoge30gfTtcblx0XHRsZXQgb01vZGVsITogT0RhdGFNb2RlbDtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwob1RhYmxlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1vZGVsOiBNb2RlbCkge1xuXHRcdFx0XHRvTW9kZWwgPSBtb2RlbCBhcyBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXR1cm4gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU3VwcG9ydGVkRm9ybWF0c1wiKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYVN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IGFMb3dlckZvcm1hdHMgPSAoYVN1cHBvcnRlZEZvcm1hdHMgfHwgW10pLm1hcCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoYUxvd2VyRm9ybWF0cy5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL3BkZlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAY29tLnNhcC52b2NhYnVsYXJpZXMuUERGLnYxLkZlYXR1cmVzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9Bbm5vdGF0aW9uOiB1bmtub3duKSB7XG5cdFx0XHRcdGlmIChvQW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNbXCJQREZcIl0gPSBPYmplY3QuYXNzaWduKHt9LCBvQW5ub3RhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXB1dGluZyBleHBvcnQgY2FwYWJpbGl0aWVzOiAke2Vycn1gKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBvQ2FwYWJpbGl0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIExpbmVJdGVtIGFubm90YXRpb24gbm9yIG9mIHRoZSBjdXN0b20gY29sdW1ucyBpcyBmb3JiaWRkZW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvXG5cdCAqIEBwYXJhbSBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBmaWx0ZXJpbmcgaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNGaWx0ZXJhYmxlID0gaXNQYXRoRmlsdGVyYWJsZShjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0IWNvbHVtbkluZm8ucmVsYXRpdmVQYXRoLmluY2x1ZGVzKFwiL1wiKSB8fFxuXHRcdFx0KChjb2x1bW5JbmZvLmlzUGFydE9mTGluZUl0ZW0gPT09IHRydWUgfHwgY29sdW1uSW5mby5pc1BhcnRPZkN1c3RvbUNvbHVtbiA9PT0gdHJ1ZSkgJiZcblx0XHRcdFx0IShpc0NvbnN0YW50KGlzRmlsdGVyYWJsZSkgJiYgaXNGaWx0ZXJhYmxlLnZhbHVlID09PSBmYWxzZSkpXG5cdFx0KTtcblx0fSxcblxuXHRfZmV0Y2hQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChcblx0XHRtZXRhTW9kZWw6IE1ldGFNb2RlbCxcblx0XHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8ge1xuXHRcdGNvbnN0IHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoID0gY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdG9EYXRhRmllbGQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoKSxcblx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCkgYXMgQ29udGV4dCxcblx0XHRcdGlzQ29tcGxleFR5cGUgPSBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiBjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lPy5pbmRleE9mKFwiRWRtLlwiKSAhPT0gMCxcblx0XHRcdGJGaWx0ZXJhYmxlID0gQ29tbW9uSGVscGVyLmlzUHJvcGVydHlGaWx0ZXJhYmxlKG9OYXZpZ2F0aW9uQ29udGV4dCwgb0RhdGFGaWVsZCksXG5cdFx0XHRiSXNBbmFseXRpY2FsVGFibGUgPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YSh0YWJsZSwgXCJlbmFibGVBbmFseXRpY3NcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8ubGFiZWwgPz8gXCJcIiwgYXBwQ29tcG9uZW50ID8/IHRhYmxlKSxcblx0XHRcdHRvb2x0aXAgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8udG9vbHRpcCA/PyBcIlwiLCBhcHBDb21wb25lbnQgPz8gdGFibGUpLFxuXHRcdFx0dHlwZUNvbmZpZyA9IHRoaXMuX2dldFR5cGVDb25maWcoY29sdW1uSW5mbywgaXNDb21wbGV4VHlwZSksXG5cdFx0XHRwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRcdG5hbWU6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdFx0a2V5OiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogY29sdW1uSW5mby5ncm91cExhYmVsLFxuXHRcdFx0XHRncm91cDogY29sdW1uSW5mby5ncm91cCxcblx0XHRcdFx0bGFiZWw6IGxhYmVsLFxuXHRcdFx0XHR0b29sdGlwOiB0b29sdGlwLFxuXHRcdFx0XHRkYXRhVHlwZTogdHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdHR5cGVDb25maWc6IHR5cGVDb25maWcsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6XG5cdFx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnPy5iYXNlVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdFx0XHRcdFx0PyB7IHN0eWxlOiBcIm1lZGl1bS9zaG9ydFwiIH0gLyogVGhpcyBjb25kaXRpb24gZG9lc24ndCBoYXZlIGFueSBpbXBhY3QsIHRvIGJlIHJldmlld2VkICovXG5cdFx0XHRcdFx0XHQ6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0Y29uc3RyYWludHM6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY29uc3RyYWludHMsXG5cdFx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiICYmICFpc0NvbXBsZXhUeXBlLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogdGhpcy5fc2V0UHJvcGVydHlJbmZvRXhwb3J0U2V0dGluZ3MoY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncywgY29sdW1uSW5mbyksXG5cdFx0XHRcdHVuaXQ6IGNvbHVtbkluZm8udW5pdCxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRyZWxhdGl2ZVBhdGg6IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoXG5cdFx0XHR9O1xuXHRcdGlmIChwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3M/LnRlbXBsYXRlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2xpcGJvYXJkU2V0dGluZ3MgPSB7IHRlbXBsYXRlOiBwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3MudGVtcGxhdGUgfTtcblx0XHRcdC8vIGlmIEkgc2V0IHRoaXMgY2xpcEJvYXJkU2V0dGluZ3MgdGhlIGNvcHkgcHJvdmlkZXIgZXh0cmFjdCB0aGUgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIHRlbXBsYXRlIGluIHRoZSBodG1sIHByb3BlcnR5IGFuZCBpdCBpcyBwcm9wZXJseSBjb3BpZWQgaW4gZXhjZWxcblx0XHRcdC8vIGJ1dCB3aGVuIHdlIGNvcHkgZWxzZXdoZXJlIHdlIG9ubHkgZ2V0IHRoZSByYXcgZGF0YSBhbmQgbm90IHRoZSB0ZW1wbGF0ZWQgZGF0YVxuXHRcdH1cblxuXHRcdC8vIFNldCB2aXN1YWxTZXR0aW5ncyBvbmx5IGlmIGl0IGV4aXN0c1xuXHRcdGlmIChjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzICYmIE9iamVjdC5rZXlzKGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3M7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSA9IGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWU7XG5cdFx0fVxuXG5cdFx0Ly8gTURDIGV4cGVjdHMgICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcz8ubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXG5cdFx0XHQvL2dldCB0aGUgRGF0YU1vZGVsT2JqZWN0UGF0aCBmb3IgdGhlIGNvbHVtblxuXHRcdFx0Y29uc3QgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdFx0bWV0YU1vZGVsLmdldENvbnRleHQoY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRDb250ZXh0KERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKHRhYmxlLCBcIm1ldGFQYXRoXCIpISlcblx0XHRcdCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoO1xuXHRcdFx0Ly8gVE9ETyB3aXRoIHRoZSBuZXcgY29tcGxleCBwcm9wZXJ0eSBpbmZvLCBhIGxvdCBvZiBcIkRlc2NyaXB0aW9uXCIgZmllbGRzIGFyZSBhZGRlZCBhcyBmaWx0ZXIvc29ydCBmaWVsZHNcblx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGNvbHVtbkluZm8uc29ydGFibGU7XG5cdFx0XHRpZiAoYklzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFuYWx5dGljYWxQcm9wZXJ0eUluZm9BdHRyaWJ1dGVzKHByb3BlcnR5SW5mbywgY29sdW1uSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9XG5cdFx0XHRcdGNvbHVtbkluZm8uZmlsdGVyYWJsZSAhPT0gZmFsc2UgJiZcblx0XHRcdFx0ISFiRmlsdGVyYWJsZSAmJlxuXHRcdFx0XHR0aGlzLl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkoY29sdW1uSW5mbywgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8uaXNLZXkgPSBjb2x1bW5JbmZvLmlzS2V5O1xuXHRcdFx0cHJvcGVydHlJbmZvLmdyb3VwYWJsZSA9IGNvbHVtbkluZm8uaXNHcm91cGFibGU7XG5cdFx0XHRpZiAoY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5fc2V0VGV4dEFycmFuZ2VtZW50SW5mbyhwcm9wZXJ0eUluZm8sIGNvbHVtbkluZm8sIHRhYmxlKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eUluZm8uaXNLZXkpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmV4dGVuc2lvbiA9IHtcblx0XHRcdFx0XHQvLyBNREMgbmVlZHMgdG8gZml4IHRoaXMsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgYSBub24gQW5hbHl0aWNhbCBUYWJsZVxuXHRcdFx0XHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNvbHVtbkluZm8uY2FzZVNlbnNpdGl2ZTtcblx0XHRcdGlmIChjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmFkZGl0aW9uYWxMYWJlbHMgPSBjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMubWFwKChhZGRpdGlvbmFsTGFiZWw6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBnZXRMb2NhbGl6ZWRUZXh0KGFkZGl0aW9uYWxMYWJlbCwgYXBwQ29tcG9uZW50IHx8IHRhYmxlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCh0YWJsZSwgcHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvLnVuaXQsIGNvbHVtbkluZm8udW5pdFRleHQsIGNvbHVtbkluZm8udGltZXpvbmVUZXh0KTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cblx0LyoqXG5cdCAqIEV4dGVuZCB0aGUgZXhwb3J0IHNldHRpbmdzIGJhc2VkIG9uIHRoZSBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSBleHBvcnQgc2V0dGluZ3MgdG8gYmUgZXh0ZW5kZWRcblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBleHRlbmRlZCBleHBvcnQgc2V0dGluZ3Ncblx0ICovXG5cdF9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5nczogZnVuY3Rpb24gKFxuXHRcdGV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IHVuZGVmaW5lZCB8IG51bGwsXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uXG5cdCk6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG5cdFx0Y29uc3QgZXhwb3J0Rm9ybWF0ID0gdGhpcy5fZ2V0RXhwb3J0Rm9ybWF0KGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lKTtcblx0XHRpZiAoZXhwb3J0Rm9ybWF0ICYmIGV4cG9ydFNldHRpbmdzKSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy5mb3JtYXQgPSBleHBvcnRGb3JtYXQ7XG5cdFx0fVxuXHRcdHJldHVybiBleHBvcnRTZXR0aW5ncztcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBjb25maWcgZm9yIHRoZSBnaXZlbiBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gaXNDb21wbGV4VHlwZSBJbmRpY2F0ZXMgaWYgdGhlIGRhdGFUeXBlIGlzIGNvbXBsZXguXG5cdCAqIEByZXR1cm5zIFRoZSBNREMgdHlwZSBjb25maWcuXG5cdCAqL1xuXHRfZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIGlzQ29tcGxleFR5cGU/OiBib29sZWFuKTogVHlwZUNvbmZpZyB7XG5cdFx0bGV0IHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIik7IC8vIE1EQyBleHBlY3RzIGFsd2F5cyBhIGRhdGFUeXBlXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmIGlzVHlwZUZpbHRlcmFibGUoY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSkpIHtcblx0XHRcdHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiAhaXNDb21wbGV4VHlwZSkge1xuXHRcdFx0dHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR5cGVDb25maWc7XG5cdH0sXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHRleHQgYXJyYW5nZW1lbnQgaW5mbyBmb3IgdGhlIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIFRoZSBjdXJyZW50IHByb3BlcnR5SW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICovXG5cdF9zZXRUZXh0QXJyYW5nZW1lbnRJbmZvOiBmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGRlc2NyaXB0aW9uQ29sdW1uID0gdGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKS5maW5kKGZ1bmN0aW9uIChvQ29sKSB7XG5cdFx0XHRyZXR1cm4gb0NvbC5uYW1lID09PSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudD8udGV4dFByb3BlcnR5O1xuXHRcdH0pO1xuXHRcdGlmIChkZXNjcmlwdGlvbkNvbHVtbikge1xuXHRcdFx0cHJvcGVydHlJbmZvLm1vZGUgPSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCEubW9kZTtcblx0XHRcdHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5ID0gY29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA9IChkZXNjcmlwdGlvbkNvbHVtbiBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKS5yZWxhdGl2ZVBhdGg7XG5cdFx0fVxuXHRcdHByb3BlcnR5SW5mby50ZXh0ID0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQ/LnRleHRQcm9wZXJ0eTtcblx0fSxcblxuXHRfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMocHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sIGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbikge1xuXHRcdGlmIChjb2x1bW5JbmZvLmFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvLmFnZ3JlZ2F0YWJsZSA9IGNvbHVtbkluZm8uYWdncmVnYXRhYmxlO1xuXHRcdH1cblx0XHRpZiAoY29sdW1uSW5mby5leHRlbnNpb24pIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHRlbnNpb24gPSBjb2x1bW5JbmZvLmV4dGVuc2lvbjtcblx0XHR9XG5cdH0sXG5cblx0X2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUpIHtcblx0XHRjb25zdCBsYWJlbCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby5sYWJlbCwgdGFibGUpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRjb25zdCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0bGFiZWw6IGxhYmVsLnRvU3RyaW5nKCksXG5cdFx0XHRkYXRhVHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2UsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRjbGlwYm9hcmRTZXR0aW5nczogY29sdW1uSW5mby5jbGlwYm9hcmRTZXR0aW5ncyBhcyBQcm9wZXJ0eUluZm9bXCJjbGlwYm9hcmRTZXR0aW5nc1wiXVxuXHRcdH07XG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mbztcblx0fSxcblxuXHRfZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdFx0bGV0IGxhYmVsO1xuXHRcdGlmIChjb2x1bW5JbmZvLmhlYWRlcikge1xuXHRcdFx0aWYgKGNvbHVtbkluZm8uaGVhZGVyLnN0YXJ0c1dpdGgoXCJ7bWV0YU1vZGVsPlwiKSkge1xuXHRcdFx0XHRsYWJlbCA9IE1vZGVsSGVscGVyLmZldGNoVGV4dEZyb21NZXRhTW9kZWwoY29sdW1uSW5mby5oZWFkZXIsIHVuZGVmaW5lZCwgKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8uaGVhZGVyLCBhcHBDb21wb25lbnQpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdGdyb3VwTGFiZWw6IHVuZGVmaW5lZCxcblx0XHRcdGdyb3VwOiB1bmRlZmluZWQsXG5cdFx0XHRsYWJlbDogbGFiZWwgPz8gXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdHZpc3VhbFNldHRpbmdzOiBjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcInZpc3VhbFNldHRpbmdzXCJdXG5cdFx0fTtcblxuXHRcdC8vIE1EQyBleHBlY3RzICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAmJiBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXHRcdFx0cHJvcGVydHlJbmZvLnBhdGggPSBjb2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRwcm9wZXJ0eUluZm8uc29ydGFibGUgPSBmYWxzZTtcblx0XHRcdHByb3BlcnR5SW5mby5maWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cdF9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3I6IGZ1bmN0aW9uIChvQ29sdW1uSW5mbzogVGFibGVDb2x1bW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISEoXG5cdFx0XHQob0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyAmJiBvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zLmhhc0RyYWZ0SW5kaWNhdG9yKSB8fFxuXHRcdFx0KG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgJiYgb0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgpXG5cdFx0KTtcblx0fSxcblx0X3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWw6IGZ1bmN0aW9uIChfb1RhYmxlOiBUYWJsZSwgX29Db2x1bW5JbmZvOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1ucyA9IF9vVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gX29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGNvbnN0IHNJbnRlcm5hbFBhdGggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKGFWaXNpYmxlQ29sdW1ucyAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Zm9yIChjb25zdCBpbmRleCBpbiBhVmlzaWJsZUNvbHVtbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihfb0NvbHVtbkluZm8pICYmXG5cdFx0XHRcdFx0X29Db2x1bW5JbmZvLm5hbWUgPT09IGFWaXNpYmxlQ29sdW1uc1tpbmRleF0uZ2V0UHJvcGVydHlLZXkoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAob0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUikgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgX29Db2x1bW5JbmZvLm5hbWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Ly8gd2hlbiBmZXRjaGluZyBwcm9wZXJ0aWVzLCB0aGlzIGJpbmRpbmcgY29udGV4dCBpcyBuZWVkZWQgLSBzbyBsZXRzIGNyZWF0ZSBpdCBvbmx5IG9uY2UgYW5kIHVzZSBpZiBmb3IgYWxsIHByb3BlcnRpZXMvZGF0YS1maWVsZHMvbGluZS1pdGVtc1xuXHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChlbnRpdHlUeXBlUGF0aCk7XG5cdFx0bGV0IGZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRcdGNvbnN0IG5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKGJpbmRpbmdQYXRoLCBtZXRhTW9kZWwpLk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKSlcblx0XHRcdC50aGVuKChjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSA9PiB7XG5cdFx0XHRcdC8vIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhIGRvZXMgbm90IHdvcmsgdmlhICdlbnRpdHlTZXQvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEnXG5cdFx0XHRcdGlmIChjb2x1bW5zKSB7XG5cdFx0XHRcdFx0bGV0IHByb3BlcnR5SW5mbztcblx0XHRcdFx0XHRjb2x1bW5zLmZvckVhY2goKGNvbHVtbkluZm8pID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWwodGFibGUsIGNvbHVtbkluZm8pO1xuXHRcdFx0XHRcdFx0c3dpdGNoIChjb2x1bW5JbmZvLnR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaFByb3BlcnR5SW5mbyhtZXRhTW9kZWwsIGNvbHVtbkluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHlJbmZvICYmICFub25GaWx0ZXJhYmxlUHJvcGVydGllcy5pbmNsdWRlcygocHJvcGVydHlJbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby5tYXhDb25kaXRpb25zID0gRGVsZWdhdGVVdGlsLmlzTXVsdGlWYWx1ZShwcm9wZXJ0eUluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKSA/IC0xIDogMTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJDb21wdXRlZFwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJTbG90XCI6XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBzd2l0Y2ggY2FzZSAke2NvbHVtbkluZm8udHlwZX1gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGhpcy5fdXBkYXRlUHJvcGVydHlJbmZvKHRhYmxlLCBmZXRjaGVkUHJvcGVydGllcyBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10pO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHR0YWJsZUFQSS5zZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKGZldGNoZWRQcm9wZXJ0aWVzIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSk7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0UHJvcGVydHlJbmZvcygpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgdXBkYXRpbmcgZmV0Y2hlZCBwcm9wZXJ0aWVzOiAke2VyciBhcyBzdHJpbmd9YCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gZmV0Y2hlZFByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHRfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHk6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0ZW50aXR5VHlwZVBhdGg6IHN0cmluZyxcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGZldGNoZWRQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGlmIChmZXRjaGVkUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHRhYmxlLCBlbnRpdHlUeXBlUGF0aCwgbWV0YU1vZGVsLCBhcHBDb21wb25lbnQpLnRoZW4oZnVuY3Rpb24gKFxuXHRcdFx0c3ViRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUFQSS5zZXRDYWNoZWRQcm9wZXJ0eUluZm9zKHN1YkZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHRcdHJldHVybiBzdWJGZXRjaGVkUHJvcGVydGllcztcblx0XHR9KTtcblx0fSxcblx0c2V0Tm9EYXRhSW5mb3JtYXRpb246IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MpOiB2b2lkIHtcblx0XHRjb25zdCBub0RhdGFBZ2dyZWdhdGlvbiA9IHRhYmxlLmdldE5vRGF0YSgpO1xuXHRcdGlmICh0eXBlb2Ygbm9EYXRhQWdncmVnYXRpb24gIT0gXCJzdHJpbmdcIiAmJiAobm9EYXRhQWdncmVnYXRpb24gYXMgQ29udHJvbCk/LmlzQShcInNhcC5tLklsbHVzdHJhdGVkTWVzc2FnZVwiKSkge1xuXHRcdFx0Y29uc3QgY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSA9IG5vRGF0YUFnZ3JlZ2F0aW9uIGFzIElsbHVzdHJhdGVkTWVzc2FnZTtcblx0XHRcdC8vIFdlIG92ZXJyaWRlIHRoZSBjdXJyZW50IHZhbHVlcyBvZiB0aGUgSWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldFRpdGxlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLnRpdGxlKTtcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0RGVzY3JpcHRpb24oaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25UeXBlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblR5cGUpO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25TaXplKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpbGx1c3RyYXRlZE1lc3NhZ2UgPSBuZXcgSWxsdXN0cmF0ZWRNZXNzYWdlKHtcblx0XHRcdFx0Li4uaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb25cblx0XHRcdH0pO1xuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkTWVzc2FnZSk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgdGFibGVGaWx0ZXJJbmZvID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKHRhYmxlKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSk7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBiaW5kaW5nSW5mby5wYXRoPy5zdGFydHNXaXRoKFwiL1wiKSA/IGJpbmRpbmdJbmZvLnBhdGguc3Vic3RyaW5nKDEpIDogYmluZGluZ0luZm8ucGF0aDtcblx0XHRsZXQgaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbjogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzO1xuXG5cdFx0Y29uc3QgZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKTogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIHtcblx0XHRcdGlmICh0YWJsZS5kYXRhKFwiaGlkZGVuRmlsdGVyc1wiKSB8fCB0YWJsZS5nZXRRdWlja0ZpbHRlcigpKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9NVUxUSV9WSUVXXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9XSVRIX0ZJTFRFUlwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdGNvbnN0IGZpbHRlckFzc29jaWF0aW9uID0gdGFibGUuZ2V0RmlsdGVyKCk7XG5cdFx0Y29uc3QgaGFzRmlsdGVyT3JTZWFyY2ggPSB0YWJsZUZpbHRlckluZm8uc2VhcmNoIHx8IHRhYmxlRmlsdGVySW5mby5maWx0ZXJzPy5sZW5ndGg7XG5cdFx0aWYgKGZpbHRlckFzc29jaWF0aW9uICYmICEvQmFzaWNTZWFyY2gkLy50ZXN0KGZpbHRlckFzc29jaWF0aW9uKSkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgYSBGaWx0ZXJCYXIgaXMgYXNzb2NpYXRlZCB0byB0aGUgVGFibGUgKGJhc2ljIHNlYXJjaCBvbiB0b29sQmFyIGlzIGV4Y2x1ZGVkKVxuXHRcdFx0aWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHRcdC8vIGNoZWNrIGlmIHRhYmxlIGhhcyBhbnkgRmlsdGVyYmFyIGZpbHRlcnMgb3IgcGVyc29uYWxpemF0aW9uIGZpbHRlcnNcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRhYmxlIGhhcyBhbnkgcGVyc29uYWxpemF0aW9uIGZpbHRlcnNcblx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PREFUQVwiKSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0ZJTFRFUlNfTk9fREFUQV9URVhUXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRGF0YVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpLmdldFZpZXdEYXRhKCkubGl2ZU1vZGUpIHtcblx0XHRcdGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0ZJTFRFUlNfTk9fREFUQV9URVhUXCIpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uU2l6ZSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0Tm9EYXRhTWVzc2FnZU1vZGUoKTtcblxuXHRcdGlmIChpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPT09IFwidGV4dFwiKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Tm9EYXRhID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0XHRpZiAodHlwZW9mIGN1cnJlbnROb0RhdGEgPT09IFwic3RyaW5nXCIgJiYgY3VycmVudE5vRGF0YSA9PT0gaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbikge1xuXHRcdFx0XHQvLyBXZSBkb24ndCBjaGFuZ2UgdGhlIG5vRGF0YSBhZ2dyZWdhdGlvbiB1bm5lY2Vzc2FyeS5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE5vRGF0YUluZm9ybWF0aW9uKHRhYmxlLCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uKTtcblx0XHR9XG5cdH0sXG5cblx0aGFuZGxlVGFibGVEYXRhUmVjZWl2ZWQ6IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0JpbmRpbmcgPSBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKSxcblx0XHRcdGJEYXRhUmVjZWl2ZWRBdHRhY2hlZCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiKTtcblxuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgIWJEYXRhUmVjZWl2ZWRBdHRhY2hlZCkge1xuXHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKCgpID0+IHtcblx0XHRcdFx0Ly8gYXMgdGhlIGRhdGFSZWNlaXZlZCBldmVudCBpcyBmaXJlZCBtdWx0aXBsZSB0aW1lcywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZXZlbnQgaXMgb25seSBoYW5kbGVkIG9uY2Vcblx0XHRcdFx0aWYgKCFvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0Ly8gUmVmcmVzaCB0aGUgc2VsZWN0ZWQgY29udGV4dHMgdG8gdHJpZ2dlciByZS1jYWxjdWxhdGlvbiBvZiBlbmFibGVkIHN0YXRlIG9mIGFjdGlvbnMuXG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UodGFibGVBUEkudGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cywgXCJ0YWJsZVwiKTtcblx0XHRcdFx0XHRcdC8vIFJlZnJlc2ggZW5hYmxlbWVudCBvZiBkZWxldGUgYnV0dG9uXG5cdFx0XHRcdFx0XHREZWxldGVIZWxwZXIudXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRjb25zdCBvVGFibGVBUEkgPSBvVGFibGUgPyBvVGFibGUuZ2V0UGFyZW50KCkgOiBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKG9UYWJsZUFQSSkge1xuXHRcdFx0XHRcdFx0XHQob1RhYmxlQVBJIGFzIFRhYmxlQVBJKS5zZXRVcEVtcHR5Um93cyhvVGFibGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQXZhaWxhYmxlQ2FyZHMob1RhYmxlKTtcblx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCB0cnVlKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldCB0aGUgb3B0aW1pc3RpYyBiYXRjaCBwcm9taXNlIGZvciB0aGUgZW5hYmxlciBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHRhYmxlQVBJIFRoZSBUYWJsZUFQSVxuXHQgKi9cblx0c2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGVsID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbCgpO1xuXHRcdGlmIChtb2RlbCkge1xuXHRcdFx0dGFibGVBUEkuc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UobmV3IFByb21pc2VLZWVwZXI8Ym9vbGVhbj4oKSk7XG5cdFx0XHR0aGlzLnNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsKGNvbnRyb2xsZXIsIG1vZGVsLCB0YWJsZUFQSSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbmFibGUgdGhlIG9wdGltaXN0aWMgYmF0Y2ggbW9kZSBpZiBhdmFpbGFibGUuXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKi9cblx0ZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZTogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCB0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJzUHJvcGVydGllc0FzUG90ZW50aWFsbHlTZW5zaXRpdmVEYXRhT3JEYXRlVHlwZSA9XG5cdFx0XHR0YWJsZSAmJiBUYWJsZVV0aWxzLmlzRmlsdGVyRWxpZ2libGVGb3JPcHRpbWlzdGljQmF0Y2godGFibGUsIGNvbnRyb2xsZXIuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXIpO1xuXHRcdCh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UoKT8ucmVzb2x2ZSghZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXR0ZXIgZm9yIHRoZSBvcHRpbWlzdGljIGJhdGNoIGVuYWJsZXIgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWwgVGhlIE9EYXRhIE1vZGVsXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgVGFibGVBUElcblx0ICogQHNlZSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWwjc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcn0gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hGb3JNb2RlbDogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCBkYXRhTW9kZWw6IE9EYXRhTW9kZWwsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IGlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5pc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpO1xuXHRcdGlmIChkYXRhTW9kZWwuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcigpID09PSBudWxsICYmICF0YWJsZUFQSS5pc09wdGltaXN0aWNCYXRjaERpc2FibGVkKCkgJiYgaXNPcHRpbWlzdGljQmF0Y2hIYXNUb0JlRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXIgPSB0YWJsZUFQSS5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSgpO1xuXHRcdFx0ZGF0YU1vZGVsLnNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIoZnVuY3Rpb24gKCk6IFByb21pc2U8Ym9vbGVhbj4gfCB1bmRlZmluZWQge1xuXHRcdFx0XHRyZXR1cm4gb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXI/LnByb21pc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0cmViaW5kOiBhc3luYyBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9UYWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSBvVGFibGVBUEk/LmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKTtcblx0XHRvVGFibGVBUEk/LnNldFByb3BlcnR5KFwib3V0RGF0ZWRCaW5kaW5nXCIsIGJJc1N1c3BlbmRlZCk7XG5cdFx0aWYgKCFiSXNTdXNwZW5kZWQpIHtcblx0XHRcdFRhYmxlUnVudGltZS5jbGVhclNlbGVjdGlvbihvVGFibGUpO1xuXHRcdFx0VGFibGVEZWxlZ2F0ZUJhc2UucmViaW5kLmFwcGx5KHRoaXMsIFtvVGFibGUsIG9CaW5kaW5nSW5mb10pO1xuXHRcdFx0VGFibGVVdGlscy5vblRhYmxlQm91bmQob1RhYmxlKTtcblx0XHRcdHJldHVybiBUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdC50aGVuKCh0YWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkKHRhYmxlLCB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSByZWxldmFudCBtZXRhZGF0YSBmb3IgdGhlIHRhYmxlIGFuZCByZXR1cm5zIHByb3BlcnR5IGluZm8gYXJyYXkuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcblx0ICogQHJldHVybnMgQXJyYXkgb2YgcHJvcGVydHkgaW5mb1xuXHQgKi9cblx0ZmV0Y2hQcm9wZXJ0aWVzOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZmV0Y2hNb2RlbCh0YWJsZSlcblx0XHRcdC50aGVuKGFzeW5jIChtb2RlbCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+ID0+IHtcblx0XHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRhYmxlKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4odGFibGUsIFwiZW50aXR5VHlwZVwiKSA/PyBcIlwiLFxuXHRcdFx0XHRcdG1vZGVsLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChwcm9wZXJ0aWVzKSA9PiB7XG5cdFx0XHRcdCh0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIENvbnRleHQpPy5zZXRQcm9wZXJ0eShcInRhYmxlUHJvcGVydGllc0F2YWlsYWJsZVwiLCB0cnVlKTtcblx0XHRcdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHRwcmVJbml0OiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIChUYWJsZURlbGVnYXRlQmFzZS5wcmVJbml0IGFzICh0YWJsZTogVGFibGUpID0+IFByb21pc2U8dm9pZD4pLmFwcGx5KHRoaXMsIFt0YWJsZV0pLnRoZW4oKCkgPT4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBTZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvdyB0byBhdm9pZCBpbmhlcml0aW5nXG5cdFx0XHQgKiB0aGUgd3JvbmcgY29udGV4dCBhbmQgcmVxdWVzdGluZyB0aGUgdGFibGUgY29sdW1ucyBvbiB0aGUgcGFyZW50IGVudGl0eVxuXHRcdFx0ICogU2V0IHRoZSBjb3JyZWN0IGJpbmRpbmcgY29udGV4dCBpbiBPYmplY3RQYWdlQ29udHJvbGxlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coKVxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBmYXN0Q3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKGZhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRmYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyB1bmtub3duIGFzIENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9LFxuXHR1cGRhdGVCaW5kaW5nSW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJID0gbmV3IENvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSShiaW5kaW5nSW5mbyk7XG5cdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzRW5hYmxlZFwiLCB0cnVlKTtcblx0XHRUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nSW5mby5hcHBseSh0aGlzLCBbdGFibGUsIGJpbmRpbmdJbmZvXSk7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbyh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5zZXRUYWJsZU5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZSh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faGFuZGxlUmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHModGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cblx0XHRcdHRhYmxlLmdldFBhcmVudCgpPy5maXJlRXZlbnQoXCJiZWZvcmVSZWJpbmRUYWJsZVwiLCB7IGNvbGxlY3Rpb25CaW5kaW5nSW5mbzogY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIH0pO1xuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEkuZ2V0QXR0YWNoZWRFdmVudHMoKTtcblx0XHRcdC8qKlxuXHRcdFx0ICogV2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvdyB0byBhdm9pZCBpdCBpbmhlcml0aW5nXG5cdFx0XHQgKiB0aGUgd3JvbmcgY29udGV4dCBhbmQgcmVxdWVzdGluZyB0aGUgdGFibGUgY29sdW1ucyBmb3IgdGhlIHBhcmVudCBlbnRpdHlcblx0XHRcdCAqIFRoZSBjb3JyZWN0IGJpbmRpbmcgY29udGV4dCBpcyBzZXQgaW4gT2JqZWN0UGFnZUNvbnRyb2xsZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KClcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cblx0XHRcdGlmICh0YWJsZS5nZXRDcmVhdGlvblJvdygpPy5nZXRCaW5kaW5nQ29udGV4dCgpID09PSBudWxsICYmIGJpbmRpbmdJbmZvLnBhdGggJiYgY29udGV4dCkge1xuXHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cdFx0XHRcdFx0dGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoLFxuXHRcdFx0XHRcdGNvbnRleHQgYXMgdjRDb250ZXh0LFxuXHRcdFx0XHRcdHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCxcblx0XHRcdFx0XHRQcm9taXNlLnJlc29sdmUoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dGFibGVBUEkuc2V0QXR0YWNoRXZlbnRzKGF0dGFjaGVkRXZlbnRzKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB1cGRhdGluZyB0aGUgYmluZGluZyBpbmZvXCIsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH0sXG5cblx0X2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHNvcnRlcnM6IFNvcnRlcltdIHwgdW5kZWZpbmVkID0gYmluZGluZ0luZm8uc29ydGVyO1xuXHRcdGNvbnN0IG5ld1NvcnRlcnNUb0JlQXBwbGllZDogU29ydGVyW10gPSBbXTtcblx0XHRpZiAoc29ydGVycz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0Y29uc3QgdGFibGVQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdFx0Zm9yIChjb25zdCBzb3J0ZXIgb2Ygc29ydGVycykge1xuXHRcdFx0XHRjb25zdCB0YWJsZVByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkucGF0aCA9PT0gc29ydGVyLmdldFBhdGgoKSk7XG5cdFx0XHRcdGlmICh0YWJsZVByb3BlcnR5Py51bml0KSB7XG5cdFx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkua2V5ID09PSB0YWJsZVByb3BlcnR5Py51bml0KTtcblx0XHRcdFx0XHRjb25zdCB1bml0U29ydGVyQXZhaWxhYmxlID0gdW5pdFByb3BlcnR5Py5wYXRoICYmIHNvcnRlcnMuc29tZSgoc29ydCkgPT4gc29ydC5nZXRQYXRoKCkgPT09IHVuaXRQcm9wZXJ0eS5wYXRoKTtcblx0XHRcdFx0XHRpZiAoIXVuaXRTb3J0ZXJBdmFpbGFibGUgJiYgdW5pdFByb3BlcnR5Py5zb3J0YWJsZSAhPT0gZmFsc2UgJiYgdW5pdFByb3BlcnR5Py5wYXRoKSB7XG5cdFx0XHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChuZXcgU29ydGVyKHVuaXRQcm9wZXJ0eS5wYXRoLCBmYWxzZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChzb3J0ZXIpO1xuXHRcdFx0fVxuXHRcdFx0YmluZGluZ0luZm8uc29ydGVyID0gbmV3U29ydGVyc1RvQmVBcHBsaWVkO1xuXHRcdH1cblx0fSxcblxuXHRfaGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQ6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKT8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBiaW5kaW5nSW5mby5wYXRoICsgXCIvXCI7XG5cdFx0Y29uc3QgZmlsdGVycyA9IGJpbmRpbmdJbmZvLmZpbHRlcnM/LmdldEZpbHRlcnMoKTtcblx0XHRpZiAoZmlsdGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRUYWJsZVV0aWxzLnVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEKG1ldGFNb2RlbCwgZmlsdGVycyBhcyB1bmtub3duIGFzIENvbmRpdGlvbk9iamVjdFtdLCBlbnRpdHlUeXBlUGF0aCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkczogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQST8uZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRpZiAoY29udHJvbGxlcj8ucmVjb21tZW5kYXRpb25zLmlzUmVjb21tZW5kYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRjb25zdCB0YWJsZURlZiA9IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzID0gYXBwQ29tcG9uZW50XG5cdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHQuZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHModGFibGVEZWYuYW5ub3RhdGlvbi5lbnRpdHlUeXBlTmFtZSk7XG5cdFx0XHRpZiAocmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzICYmIHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcy5sZW5ndGggPiAwICYmIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWxlY3QgPSBvQmluZGluZ0luZm8ucGFyYW1ldGVycz8uJHNlbGVjdD8uY29uY2F0KFwiLFwiLCByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMuam9pbigpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgY2FyZHMgd2hlbiB0aGUgYmluZGluZyBpcyByZWZyZXNoZWQuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgbWRjIHRhYmxlIGNvbnRyb2wuXG5cdCAqL1xuXHRfdXBkYXRlQXZhaWxhYmxlQ2FyZHM6IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpPy5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIikge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGFibGVBUEk/LmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3QgY2FyZHM6IFdyYXBwZWRDYXJkW10gPSBbXTtcblx0XHRcdGF3YWl0IHRhYmxlQVBJLmNvbGxlY3RBdmFpbGFibGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uTWFuYWdlciA9IG5ldyBDb2xsYWJvcmF0aW9uTWFuYWdlcigpO1xuXHRcdFx0Y29uc3QgY2FyZE9iamVjdCA9IGNvbGxhYm9yYXRpb25NYW5hZ2VyLnVwZGF0ZUNhcmRzKGNhcmRzKTtcblx0XHRcdGNvbnN0IHBhcmVudEFwcElkID0gYXBwQ29tcG9uZW50LmdldElkKCk7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuYWRkQ2FyZHNUb0NvbGxhYm9yYXRpb25NYW5hZ2VyKGNhcmRPYmplY3QsIHBhcmVudEFwcElkKTtcblx0XHRcdGFwcENvbXBvbmVudC5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKS5zaGFyZUF2YWlsYWJsZUNhcmRzKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGUgaG9vayBpbXBsZW1lbnRlZCBieSBNREMgdGhhdCB3ZSBjYW4gb3ZlcnJpZGUuXG5cdCAqIFRoaXMgYWxsb3dzIHVzIHRvIGRlZmluZSBwcm9wZXJ0aWVzIHRvIGJlIHJlcXVlc3RlZCBpbiB0aGUgTURDIHRhYmxlIChNYWluIGNhc2UgaXMgZm9yIHRoZSBhbmFseXRpY2FsIHRhYmxlKS5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZSB0byBiZSByZXF1ZXN0ZWQuXG5cdCAqL1xuXHRnZXRJblJlc3VsdFByb3BlcnR5S2V5czogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdFx0Y29uc3QgYWxsS2tleXNSZXF1ZXN0ZWQgPSB0aGlzLmNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCh0YWJsZUFQSSk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdC8vIGlmIGEgcm93cHJlc3MgaXMgb3ZlcnJpZGRlbiwgd2UgIHNob3VsZCBlbmFibGUgdGhlIG5hdmlnYXRpb24gYXQgdGhlIG5vZGUgbGV2ZWxcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFwiaXNOb2RlTGV2ZWxOYXZpZ2FibGVcIiwgdGFibGVBUEkub3ZlcnJpZGVSb3dQcmVzcyA/IHRydWUgOiBhbGxLa2V5c1JlcXVlc3RlZCk7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRPYmplY3Qua2V5cyh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ucmVxdWVzdEF0TGVhc3QpXG5cdFx0XHRcdFx0Ly8gZm9yIGFuYWx5dGljIHRhYmxlcyB3aXRoIGFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwgd2Ugc2hvdWxkIG5vdCByZXF1ZXN0IHRoZSBzZW1hbnRpY0tleSBleHBlY3RlZCB3aGVuIGFsbCBrZXlzIGFyZSByZXF1ZXN0ZWQgLT4gIGl0IHdpbGwgcGVybWl0cyB0byBuYXZpZ2F0ZSBmcm9tIGEgbm9kZSBsZXZlbCB3aGVuIHNlbWFudGljS2V5IGFyZSBlbmFibGVkXG5cdFx0XHRcdFx0Ly8gcmVzdHJpY3Rpb24gYXJlIGFsc28gZXhjbHVkZWQgYXMgd2UgY2Fubm90IGRlc3Rpbmd1aXNoIGJldHdlZW4gYSBub2RlIGFuZCBhIGFnZ3JlZ2F0aW9uIGxldmVsXG5cblx0XHRcdFx0XHQuZmlsdGVyKChmaWVsZE5hbWU6IHN0cmluZykgPT5cblx0XHRcdFx0XHRcdCFhbGxLa2V5c1JlcXVlc3RlZFxuXHRcdFx0XHRcdFx0XHQ/IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdFtmaWVsZE5hbWVdLnNvbWUoXG5cdFx0XHRcdFx0XHRcdFx0XHQob3JpZ2luKSA9PiBvcmlnaW4gIT09IFwicmVzdHJpY3Rpb25cIiAmJiBvcmlnaW4gIT09IFwic2VtYW50aWNLZXlcIlxuXHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0OiB0cnVlXG5cdFx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdCA/PyB7fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGFsbCBrZXlzKCkgZXhjZXB0ZWQgSXNBY3RpdmVFbnRpdHkpIGFyZSByZXF1ZXN0ZWQgaW4gdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIHRhYmxlIEFQSVxuXHQgKiBAcmV0dXJucyAgVHJ1ZSBpZiBhbGwga2V5cyBhcmUgcmVxdWVzdGVkLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZDogZnVuY3Rpb24gKHRhYmxlQVBJOiBUYWJsZUFQSSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGFsbENvbHVtbnMgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zIGFzIChUYWJsZUNvbHVtbiAmIHsgaXNLZXk6IGJvb2xlYW47IHJlbGF0aXZlUGF0aDogc3RyaW5nIH0pW107XG5cdFx0Y29uc3Qga2V5UHJvcGVydHlOYW1lcyA9IGFsbENvbHVtbnNcblx0XHRcdC5maWx0ZXIoKGMpID0+IGMuaXNLZXkgJiYgYy5yZWxhdGl2ZVBhdGggJiYgYy5yZWxhdGl2ZVBhdGggIT09IFwiSXNBY3RpdmVFbnRpdHlcIilcblx0XHRcdC5tYXAoKGMpID0+IGMucmVsYXRpdmVQYXRoKTtcblxuXHRcdGNvbnN0IGRpc3BsYXllZENvbHVtbnMgPSB0YWJsZVxuXHRcdFx0LmdldENvbHVtbnMoKVxuXHRcdFx0Lm1hcCgoY29sdW1uKSA9PiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gY29sdW1uLmdldFByb3BlcnR5S2V5KCkpKTtcblxuXHRcdC8vIFN0b3JlIGFsbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYnkgZGlzcGxheWVkIGNvbHVtbnMgaW4gYSBTZXRcblx0XHRjb25zdCByZWZlcmVuY2VkUHJvcGVydHlQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGZ1bmN0aW9uIHByb2Nlc3NDb2x1bW4oY29sOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0XHRcdC8vIEFkZCB0aGUgcHJvcGVydHkgbmFtZSBmcm9tIGNvbHVtbiBpdHNlbGYgaWYgaXQncyBub3QgYSBjb21wbGV4IHByb3BlcnR5SW5mb1xuXHRcdFx0aWYgKGNvbC5yZWxhdGl2ZVBhdGggJiYgY29sLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZWZlcmVuY2VkUHJvcGVydHlQYXRocy5hZGQoY29sLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYnkgdGhlIGNvbHVtblxuXHRcdFx0Y29sLmV4dGVuc2lvbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmZvckVhY2goKGFkZGl0aW9uYWxDb2x1bW5OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFkZGl0aW9uYWxDb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gYWRkaXRpb25hbENvbHVtbk5hbWUpO1xuXHRcdFx0XHRpZiAoYWRkaXRpb25hbENvbHVtbj8ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRcdFx0cmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuYWRkKGFkZGl0aW9uYWxDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0XHRpZiAoIWNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBQcm9jZXNzIHRoZSBjb2x1bW4gaXRzZWxmXG5cdFx0XHRwcm9jZXNzQ29sdW1uKGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXG5cdFx0XHQvLyBQcm9jZXNzIHRoZSBjb2x1bW5zIHJlZmVyZW5jZWQgYnkgdGhlIGNvbHVtblxuXHRcdFx0Y29sdW1uLnByb3BlcnR5SW5mb3M/LmZvckVhY2goKHJlbGF0ZWRDb2x1bW5OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRDb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gcmVsYXRlZENvbHVtbk5hbWUpO1xuXHRcdFx0XHRpZiAocmVsYXRlZENvbHVtbikge1xuXHRcdFx0XHRcdHByb2Nlc3NDb2x1bW4ocmVsYXRlZENvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBrZXlQcm9wZXJ0eU5hbWVzLmV2ZXJ5KChwcm9wTmFtZSkgPT4gcHJvcE5hbWUgJiYgcmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuaGFzKHByb3BOYW1lKSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzZWFyY2ggcXVlcnkgZm9yIGFuYWx5dGljYWwgYW5kIG5vbiBhbmFseXRpY2FsIG9kYXRhTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBiaW5kaW5nIFRoZSBvRGF0YUxpc3RCaW5kaW5nIGluc3RhbmNlLlxuXHQgKiBAcmV0dXJucyBUaGUgc2VhcmNoIHF1ZXJ5IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldFNlYXJjaFF1ZXJ5OiBmdW5jdGlvbiAoYmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSBiaW5kaW5nLmdldEFnZ3JlZ2F0aW9uPy4oKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYWdncmVnYXRpb24/LnNlYXJjaCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBGb3IgYW5hbHl0aWNhbCB0YWJsZXMsIHRoZSBzZWFyY2ggcXVlcnkgaXMgc3RvcmVkIGluIHRoZSBhZ2dyZWdhdGlvblxuXHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uLnNlYXJjaCBhcyBzdHJpbmc7XG5cdFx0fVxuXHRcdC8vIElmIG5vdCBmb3VuZCBpbiBhZ2dyZWdhdGlvbiwgY2hlY2sgdGhlIHF1ZXJ5IG9wdGlvbnNcblx0XHRyZXR1cm4gYmluZGluZy5nZXRRdWVyeU9wdGlvbnNGcm9tUGFyYW1ldGVycygpLiRzZWFyY2g7XG5cdH0sXG5cdHVwZGF0ZUJpbmRpbmc6IGZ1bmN0aW9uICh0YWJsZTogTURDVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8sIGJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSB0YWJsZUFQST8uZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpO1xuXHRcdGlmICghYklzU3VzcGVuZGVkKSB7XG5cdFx0XHQvLyBpZiB0aGUgcm93QmluZGluZ0luZm8gaGFzIGEgJCRnZXRLZWVwQWxpdmVDb250ZXh0IHBhcmFtZXRlciB3ZSBuZWVkIHRvIGNoZWNrIGl0IGlzIHRoZSBvbmx5IFRhYmxlIHdpdGggc3VjaCBhXG5cdFx0XHQvLyBwYXJhbWV0ZXIgZm9yIHRoZSBjb2xsZWN0aW9uTWV0YVBhdGhcblx0XHRcdGlmIChiaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kJGdldEtlZXBBbGl2ZUNvbnRleHQgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpID8/IFwiXCI7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdFx0Y29uc3Qga2VwdEFsaXZlTGlzdHMgPSBpbnRlcm5hbE1vZGVsPy5nZXRPYmplY3QoXCIva2VwdEFsaXZlTGlzdHNcIikgPz8ge307XG5cdFx0XHRcdGlmICgha2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdKSB7XG5cdFx0XHRcdFx0a2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdID0gdGFibGUuZ2V0SWQoKTtcblx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsPy5zZXRQcm9wZXJ0eShcIi9rZXB0QWxpdmVMaXN0c1wiLCBrZXB0QWxpdmVMaXN0cyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoa2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdICE9PSB0YWJsZS5nZXRJZCgpKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRnZXRLZWVwQWxpdmVDb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGxldCBuZWVkTWFudWFsUmVmcmVzaCA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRjb25zdCBtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSA9IFwicGVuZGluZ01hbnVhbEJpbmRpbmdVcGRhdGVcIjtcblx0XHRcdGNvbnN0IHBlbmRpbmdNYW51YWxVcGRhdGUgPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSkgYXMgYm9vbGVhbjtcblx0XHRcdGNvbnN0IG5ld1NvcnRlcnMgPSBKU09OLnN0cmluZ2lmeShiaW5kaW5nSW5mby5zb3J0ZXIgPz8gW10pO1xuXG5cdFx0XHRpZiAoYmluZGluZykge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTWFudWFsIHJlZnJlc2ggaWYgZmlsdGVycyBhcmUgbm90IGNoYW5nZWQgYnkgYmluZGluZy5yZWZyZXNoKCkgc2luY2UgdXBkYXRpbmcgdGhlIGJpbmRpbmdJbmZvXG5cdFx0XHRcdCAqIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJhdGNoIHJlcXVlc3QuXG5cdFx0XHRcdCAqIFJlbW92aW5nIGNvbHVtbnMgY3JlYXRlcyBvbmUgYmF0Y2ggcmVxdWVzdCB0aGF0IHdhcyBub3QgZXhlY3V0ZWQgYmVmb3JlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3M7XG5cdFx0XHRcdGNvbnN0IG9sZEZpbHRlcnMgPSBiaW5kaW5nLmdldEZpbHRlcnMoXCJBcHBsaWNhdGlvblwiKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNTb3J0ZXJzID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoUFJFVklPVVNfU09SVEVSUykgPz8gXCJbXVwiO1xuXG5cdFx0XHRcdGNvbnN0IGZpbHRlck5vdENoYW5nZWQgPVxuXHRcdFx0XHRcdCgoYmluZGluZ0luZm8uZmlsdGVycyA9PT0gbnVsbCAmJiBvbGRGaWx0ZXJzLmxlbmd0aCA9PT0gMCkgfHwgLy8gb24gYW5hbHl0aWNhbCB0YWJsZXMsIHRoZSBmaWx0ZXJzIGFyZSBzZXQgdG8gbnVsbCB3aGVuIG5vIGZpbHRlcnNcblx0XHRcdFx0XHRcdGRlZXBFcXVhbChiaW5kaW5nSW5mby5maWx0ZXJzLCBvbGRGaWx0ZXJzWzBdKSkgJiZcblx0XHRcdFx0XHRuZXdTb3J0ZXJzID09PSBwcmV2aW91c1NvcnRlcnMgJiZcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoID09PSBiaW5kaW5nLmdldFBhdGgoKSAmJiAvLyBUaGUgcGF0aCBjYW4gYmUgY2hhbmdlZCBpbiBjYXNlIG9mIGEgcGFyYW1ldHJpemVkIGVudGl0eVxuXHRcdFx0XHRcdHRoaXMuZ2V0U2VhcmNoUXVlcnkoYmluZGluZykgPT09IGJpbmRpbmdJbmZvPy5wYXJhbWV0ZXJzPy4kc2VhcmNoO1xuXHRcdFx0XHRjb25zdCBMUk11bHRpVmlld0VuYWJsZWQgPSAhIXZpZXdEYXRhLnZpZXdzO1xuXG5cdFx0XHRcdG5lZWRNYW51YWxSZWZyZXNoID1cblx0XHRcdFx0XHRmaWx0ZXJOb3RDaGFuZ2VkICYmXG5cdFx0XHRcdFx0KGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCkgfHwgLy8gY2hlY2sgaWYgdGhlIHNlYXJjaCBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCkgfHwgLy8gY2hlY2sgaWYgYSBjb2x1bW4gaGFzIGJlZW4gYWRkZWRcblx0XHRcdFx0XHRcdExSTXVsdGlWaWV3RW5hYmxlZCkgJiYgLy8gaWYgdGhlIG11bHRpIHZpZXcgaXMgZW5hYmxlZCB0aGUgcmVxdWVzdCBzaG91bGQgYmUgcmVmcmVzaGVkIGFzIHdlIGRvbid0IGtub3duIGlmIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZSBpcyBvdXRkYXRlZCBkdWUgdG8gYW4gYWN0aW9uIG9uIGFub3RoZXIgdGFibGVcblx0XHRcdFx0XHQhcGVuZGluZ01hbnVhbFVwZGF0ZTtcblx0XHRcdH1cblx0XHRcdC8vIENsZWFudXAgZ3JvdXBDb25kaXRpb25zIGFuZCBhZ2dyZWdhdGVDb25kaXRpb25zIGlmIHRoZXkgZG9uJ3QgbWFrZSBzZW5zZVxuXHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcyAhPT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBBZ2dyZWdhdGUgY29uZGl0aW9ucyBuZXZlciBtYWtlIHNlbnNlIG91dHNpZGUgb2YgYW4gYW5hbHl0aWNhbCB0YWJsZVxuXHRcdFx0XHR0YWJsZS5zZXRBZ2dyZWdhdGVDb25kaXRpb25zKCk7XG5cblx0XHRcdFx0Ly8gR3JvdXAgY29uZGl0aW9ucyBkb24ndCBtYWtlIHNlbnNlIGluIGEgVHJlZSBvciBHcmlkIHRhYmxlXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiR3JpZFRhYmxlXCIgfHxcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGFibGUuc2V0R3JvdXBDb25kaXRpb25zKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcuYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mbywgYmluZGluZ10pO1xuXHRcdFx0Ly8gd2Ugc3RvcmUgdGhlIHRhYmxlIGJpbmRpbmcgaW5mbyB0aGF0IHdhcyB1c2VkIHRvIGJpbmQgdGhlIHRhYmxlIGluIHRoZSB0YWJsZSBBUElcblx0XHRcdC8vIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciB0aGUgY2FsbCB0byBUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nIG90aGVyIHdpc2Ugd2UgZG9uJ3QgZ2V0IHRoZSBhZ2dyZWdhdGUgcGFyYW1ldGVyc1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZXJlIGlzIG5vIHdheSB0byByZXRyaWV2ZSBzb3J0ZXJzIGFkZGVkIGluIHRoZSBvbkJlZm9yZVJlYmluZFRhYmxlIGV2ZW50XG5cdFx0XHR0YWJsZUFQSS5zZXRUYWJsZUJpbmRpbmdJbmZvKGJpbmRpbmdJbmZvKTtcblx0XHRcdC8vIHdlIG1ha2UgdGhlIGNhbGwgdG8gdXBkYXRlIHRoZSBkb3dubG9hZCB1cmwgYnV0IGRvIG5vdCBhd2FpdCBpdFxuXHRcdFx0dGFibGVBUEkuc2V0RG93bmxvYWRVcmwoKTtcblxuXHRcdFx0dGFibGUuZmlyZUV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIik7XG5cdFx0XHRpZiAobmVlZE1hbnVhbFJlZnJlc2ggJiYgdGFibGUuZ2V0RmlsdGVyKCkgJiYgYmluZGluZykge1xuXHRcdFx0XHRiaW5kaW5nXG5cdFx0XHRcdFx0LnJlcXVlc3RSZWZyZXNoKGJpbmRpbmcuZ2V0R3JvdXBJZCgpKVxuXHRcdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCBmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVmcmVzaGluZyB0aGUgdGFibGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCwgZmFsc2UpO1xuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVELCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShQUkVWSU9VU19TT1JURVJTLCBuZXdTb3J0ZXJzKTtcblxuXHRcdFx0Ly9mb3IgVHJlZXRhYmxlLCBpdCdzIG5lY2Vzc2FyeSB0byBjbGVhciB0aGUgcGFzdGFibGVDb250ZXh0cyBzaW5jZSB0aGUgYmluZGluZyBkZXN0cm95cyBwcmV2aW91cyBjb250ZXh0cy5cblx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJwYXN0YWJsZUNvbnRleHRzXCIsIFtdKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSB0YWJsZUFQSS5zdG9yZWRFdmVudHMgPz8gW107XG5cdFx0XHRhdHRhY2hlZEV2ZW50cy5mb3JFYWNoKCh7IGV2ZW50SWQsIGNhbGxiYWNrLCBsaXN0ZW5lciwgZGF0YSB9KSA9PiB7XG5cdFx0XHRcdHRhYmxlLmdldFJvd0JpbmRpbmcoKT8uYXR0YWNoRXZlbnQoZXZlbnRJZCwgZGF0YSwgY2FsbGJhY2ssIGxpc3RlbmVyKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0YWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0fSxcblxuXHRfY29tcHV0ZVJvd0JpbmRpbmdJbmZvRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IENvbGxlY3Rpb25CaW5kaW5nSW5mbyB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSBvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3Qgcm93QmluZGluZ0luZm8gPSB0YWJsZUFQSS5nZXRUYWJsZVRlbXBsYXRlQmluZGluZ0luZm8oKTtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCB0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gZmFsc2U7XG5cdFx0aWYgKFxuXHRcdFx0YmluZGluZ0NvbnRleHQgPT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwidWlcIik/LmdldFByb3BlcnR5KFwiaXNFZGl0YWJsZVwiKSA9PT0gZmFsc2UgJiZcblx0XHRcdG9UYWJsZS5nZXRNb2RlbChcInZpZXdEYXRhXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRFbmFibGVkXCIpXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KGJpbmRpbmdDb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0QmluZGluZygpLmdldFVwZGF0ZUdyb3VwSWQoKSA9PSBDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSURcblx0XHQpIHtcblx0XHRcdHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0YWJsZUNhbkJlSW5JbmxpbmVFZGl0KSB7XG5cdFx0XHRyb3dCaW5kaW5nSW5mby5wYXJhbWV0ZXJzID8/PSB7fTtcblx0XHRcdHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCR1cGRhdGVHcm91cElkID0gQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEO1xuXHRcdH1cblxuXHRcdHJldHVybiByb3dCaW5kaW5nSW5mbztcblx0fSxcblx0X2ludGVybmFsVXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvQmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdE9iamVjdC5hc3NpZ24ob0JpbmRpbmdJbmZvLCB0aGlzLl9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGUob1RhYmxlKSk7XG5cdFx0LyoqXG5cdFx0ICogQmluZGluZyBpbmZvIG1pZ2h0IGJlIHN1c3BlbmRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlIGZpcnN0IGJpbmRSb3dzIGlzIGNhbGxlZDpcblx0XHQgKiBUbyBhdm9pZCBkdXBsaWNhdGUgcmVxdWVzdHMgYnV0IHN0aWxsIGhhdmUgYSBiaW5kaW5nIHRvIGNyZWF0ZSBuZXcgZW50cmllcy5cdFx0XHRcdCAqXG5cdFx0ICogQWZ0ZXIgdGhlIGluaXRpYWwgYmluZGluZyBzdGVwLCBmb2xsb3cgdXAgYmluZGluZ3Mgc2hvdWxkIG5vIGxvbmdlciBiZSBzdXNwZW5kZWQuXG5cdFx0ICovXG5cdFx0aWYgKG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5zdXNwZW5kZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gVGhlIHByZXZpb3VzbHkgYWRkZWQgaGFuZGxlciBmb3IgdGhlIGV2ZW50ICdkYXRhUmVjZWl2ZWQnIGlzIG5vdCBhbnltb3JlIHRoZXJlXG5cdFx0Ly8gc2luY2UgdGhlIGJpbmRpbmdJbmZvIGlzIHJlY3JlYXRlZCBmcm9tIHNjcmF0Y2ggc28gd2UgbmVlZCB0byBzZXQgdGhlIGZsYWcgdG8gZmFsc2UgaW4gb3JkZXJcblx0XHQvLyB0byBhZ2FpbiBhZGQgdGhlIGhhbmRsZXIgb24gdGhpcyBldmVudCBpZiBuZWVkZWRcblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0bGV0IG9GaWx0ZXI7XG5cdFx0Y29uc3Qgb0ZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8ob1RhYmxlKTtcblx0XHQvLyBQcmVwYXJlIGJpbmRpbmcgaW5mbyB3aXRoIGZpbHRlci9zZWFyY2ggcGFyYW1ldGVyc1xuXHRcdGlmIChvRmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogb0ZpbHRlckluZm8uZmlsdGVycywgYW5kOiB0cnVlIH0pO1xuXHRcdH1cblx0XHRpZiAob0ZpbHRlckluZm8uYmluZGluZ1BhdGgpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5wYXRoID0gb0ZpbHRlckluZm8uYmluZGluZ1BhdGg7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0RhdGFTdGF0ZUluZGljYXRvciA9IG9UYWJsZS5nZXREYXRhU3RhdGVJbmRpY2F0b3IoKTtcblx0XHRpZiAob0RhdGFTdGF0ZUluZGljYXRvciAmJiBvRGF0YVN0YXRlSW5kaWNhdG9yLmlzRmlsdGVyaW5nKCkpIHtcblx0XHRcdC8vIEluY2x1ZGUgZmlsdGVycyBvbiBtZXNzYWdlU3RyaXBcblx0XHRcdGlmICgob0JpbmRpbmdJbmZvLmZpbHRlcnMgYXMgdW5rbm93biBhcyBGaWx0ZXJbXSkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvRmlsdGVyID0gbmV3IEZpbHRlcih7IGZpbHRlcnM6IChvQmluZGluZ0luZm8uZmlsdGVycyBhcyB1bmtub3duIGFzIEZpbHRlcltdKS5jb25jYXQob0ZpbHRlckluZm8uZmlsdGVycyksIGFuZDogdHJ1ZSB9KTtcblx0XHRcdFx0dGhpcy51cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeShvQmluZGluZ0luZm8sIG9GaWx0ZXJJbmZvLCBvRmlsdGVyKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeShvQmluZGluZ0luZm8sIG9GaWx0ZXJJbmZvLCBvRmlsdGVyKTtcblx0XHR9XG5cblx0XHR0aGlzLmFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMob1RhYmxlLCBvQmluZGluZ0luZm8pO1xuXHR9LFxuXG5cdHVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5OiBmdW5jdGlvbiAoYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgZmlsdGVySW5mbzogSW50ZXJuYWxCaW5kaW5nSW5mbywgZmlsdGVyPzogRmlsdGVyKSB7XG5cdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IGZpbHRlcjtcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzID8/PSB7fTtcblx0XHRpZiAoZmlsdGVySW5mby5zZWFyY2gpIHtcblx0XHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oZmlsdGVySW5mby5zZWFyY2gpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogSWYgc3BlY2lmaWVkIGluIHRoZSBwYXlsb2FkLCBhZGRzIGEgZmlsdGVyIHRvIGRpc3BsYXkgb25seSBhY3RpdmUgZW50aXRpZXMuXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcGFyYW0gYmluZGluZ0luZm9cblx0ICovXG5cdGFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXM6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBwYXlsb2FkID0gdGFibGUuZ2V0UGF5bG9hZCgpIGFzIHsgZmlsdGVyT25BY3RpdmVFbnRpdGllcz86IGJvb2xlYW4gfTtcblxuXHRcdGlmIChwYXlsb2FkPy5maWx0ZXJPbkFjdGl2ZUVudGl0aWVzID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJPbkFjdGl2ZSA9IG5ldyBGaWx0ZXIoeyBwYXRoOiBcIklzQWN0aXZlRW50aXR5XCIsIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogdHJ1ZSB9KTtcblx0XHRcdGlmIChiaW5kaW5nSW5mby5maWx0ZXJzKSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogW2ZpbHRlck9uQWN0aXZlLCBiaW5kaW5nSW5mby5maWx0ZXJzXSwgYW5kOiB0cnVlIH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IGZpbHRlck9uQWN0aXZlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHRlbXBsYXRlIGZyb20gdGhlIGZyYWdtZW50IG9mIGEgc2xvdCBjb2x1bW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjdXN0b20gdGFibGUgY29sdW1uXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHBhcmFtIG1vZGlmaWVyIFRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIHRhYmxlSWQgVGhlIGlkIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG5cdCAqIEByZXR1cm5zIFRoZSBsb2FkZWQgZnJhZ21lbnRcblx0ICovXG5cdF90ZW1wbGF0ZVNsb3RDb2x1bW5GcmFnbWVudDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdGNvbHVtbkluZm86IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4sXG5cdFx0dmlldzogVmlldyxcblx0XHRtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IEpzQ29udHJvbFRyZWVNb2RpZmllcixcblx0XHR0YWJsZUlkOiBzdHJpbmdcblx0KTogUHJvbWlzZTxudWxsIHwgQ29udHJvbCB8IENvbnRyb2xbXSB8IEVsZW1lbnQ+IHtcblx0XHRjb25zdCBzbG90Q29sdW1uc1hNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZ2V0U2xvdENvbHVtbih0YWJsZUlkLCBjb2x1bW5JbmZvLCBmYWxzZSkgYXMgdW5rbm93biBhcyBzdHJpbmc7XG5cdFx0XHR9KSxcblx0XHRcdFwidGV4dC94bWxcIlxuXHRcdCk7XG5cdFx0aWYgKCFzbG90Q29sdW1uc1hNTCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2xvdFhNTCA9IHNsb3RDb2x1bW5zWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2xvdFwiKVswXTtcblxuXHRcdGlmIChjb2x1bW5JbmZvLnRlbXBsYXRlKSB7XG5cdFx0XHRpZiAoc2xvdFhNTCkge1xuXHRcdFx0XHRjb25zdCBvVGVtcGxhdGUgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGNvbHVtbkluZm8udGVtcGxhdGUgYXMgc3RyaW5nLCBcInRleHQveG1sXCIpO1xuXHRcdFx0XHRpZiAob1RlbXBsYXRlLmZpcnN0RWxlbWVudENoaWxkICYmIG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZSAhPT0gXCJodG1sXCIpIHtcblx0XHRcdFx0XHRzbG90WE1MLnJlcGxhY2VXaXRoKG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2xvdFhNTC5yZW1vdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoYFBsZWFzZSBwcm92aWRlIGNvbnRlbnQgaW5zaWRlIHRoaXMgQnVpbGRpbmcgQmxvY2sgQ29sdW1uOiAke2NvbHVtbkluZm8uaGVhZGVyfWApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3QgcmVzdWx0WE1MID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRzbG90Q29sdW1uc1hNTC5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdHsgbW9kZWxzOiB7fSB9LFxuXHRcdFx0KHZpZXcuZ2V0Q29udHJvbGxlcigpLmdldE93bmVyQ29tcG9uZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+KS5nZXRQcmVwcm9jZXNzb3JDb250ZXh0KClcblx0XHQpO1xuXHRcdGlmIChtb2RpZmllcj8udGFyZ2V0cyAhPT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHJldHVybiByZXN1bHRYTUwuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0fVxuXHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHtcblx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRkZWZpbml0aW9uOiByZXN1bHRYTUwsXG5cdFx0XHRjb250cm9sbGVyOiB2aWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdH0pIGFzIFByb21pc2U8Q29udHJvbCB8IENvbnRyb2xbXT47XG5cdH0sXG5cblx0X2dldEV4cG9ydEZvcm1hdDogZnVuY3Rpb24gKGRhdGFUeXBlPzogc3RyaW5nKSB7XG5cdFx0c3dpdGNoIChkYXRhVHlwZSkge1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbERhdGVmcm9tSlNEYXRlKCk7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUoKTtcblx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbFRpbWVmcm9tSlNUaW1lKCk7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0VkhSZWxldmFudEZpZWxkczogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzTWV0YWRhdGFQYXRoOiBzdHJpbmcsIHNCaW5kaW5nUGF0aD86IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHRsZXQgYUZpZWxkczogc3RyaW5nW10gPSBbXSxcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc01ldGFkYXRhUGF0aCk7XG5cblx0XHRpZiAob0RhdGFGaWVsZERhdGEuJGtpbmQgJiYgb0RhdGFGaWVsZERhdGEuJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0b0RhdGFGaWVsZERhdGEgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0YCk7XG5cdFx0XHRzTWV0YWRhdGFQYXRoID0gYCR7c01ldGFkYXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGA7XG5cdFx0fVxuXHRcdHN3aXRjaCAob0RhdGFGaWVsZERhdGEuJFR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRcdGlmIChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoYCkuaW5jbHVkZXMoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCIpKSB7XG5cdFx0XHRcdFx0b01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhYCkuZm9yRWFjaCgob1ZhbHVlOiB1bmtub3duLCBpSW5kZXg6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdFx0YUZpZWxkcyA9IGFGaWVsZHMuY29uY2F0KFxuXHRcdFx0XHRcdFx0XHR0aGlzLl9nZXRWSFJlbGV2YW50RmllbGRzKG9NZXRhTW9kZWwsIGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YS8ke2lJbmRleH1gKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoVXJsXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb25cIjpcblx0XHRcdFx0YUZpZWxkcy5wdXNoKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1ZhbHVlLyRQYXRoYCkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBwcm9wZXJ0eVxuXHRcdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBtYWtlIHN1cmUgVkggcmVsZXZhbnQgZmllbGQgcGF0aCBkbyBub3QgY29udGFpbiB0aGUgYmluZGluZ3BhdGhcblx0XHRcdFx0aWYgKHNCaW5kaW5nUGF0aCAmJiBzTWV0YWRhdGFQYXRoLmluZGV4T2Yoc0JpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0XHRcdGFGaWVsZHMucHVzaChzTWV0YWRhdGFQYXRoLnN1YnN0cmluZyhzQmluZGluZ1BhdGgubGVuZ3RoICsgMSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFGaWVsZHMucHVzaChDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgoc01ldGFkYXRhUGF0aCwgdHJ1ZSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGFGaWVsZHM7XG5cdH0sXG5cdF9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbjogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIGFDb2x1bW5zOiBUYWJsZUNvbHVtbltdLCBvQ29sdW1uSW5mbz86IFRhYmxlQ29sdW1uKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpZiAoIW9JbnRlcm5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHNJbnRlcm5hbFBhdGggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1ucy5maWx0ZXIoKG9Db2x1bW46IFRhYmxlQ29sdW1uKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yKG9Db2x1bW4pO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1ucyA9IG9UYWJsZS5nZXRDb2x1bW5zKCk7XG5cdFx0bGV0IHNBZGRWaXNpYmxlQ29sdW1uTmFtZSwgc1Zpc2libGVDb2x1bW5OYW1lLCBiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0LCBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcjtcblx0XHRmb3IgKGNvbnN0IGkgaW4gYVZpc2libGVDb2x1bW5zKSB7XG5cdFx0XHRzVmlzaWJsZUNvbHVtbk5hbWUgPSBhVmlzaWJsZUNvbHVtbnNbaV0uZ2V0UHJvcGVydHlLZXkoKTtcblx0XHRcdGZvciAoY29uc3QgaiBpbiBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvciA9IGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yW2pdLm5hbWU7XG5cdFx0XHRcdGlmIChzVmlzaWJsZUNvbHVtbk5hbWUgPT09IHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdFx0YkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9Db2x1bW5JbmZvICYmIG9Db2x1bW5JbmZvLm5hbWUgPT09IHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdFx0c0FkZFZpc2libGVDb2x1bW5OYW1lID0gb0NvbHVtbkluZm8ubmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQpIHtcblx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgc1Zpc2libGVDb2x1bW5OYW1lKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCAmJiBzQWRkVmlzaWJsZUNvbHVtbk5hbWUpIHtcblx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIHNBZGRWaXNpYmxlQ29sdW1uTmFtZSk7XG5cdFx0fVxuXHR9LFxuXHRyZW1vdmVJdGVtOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b1RhYmxlOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRvUHJvcGVydHlJbmZvTmFtZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0bVByb3BlcnR5QmFnOiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGxldCBkb1JlbW92ZUl0ZW0gPSB0cnVlO1xuXHRcdGlmICghb1Byb3BlcnR5SW5mb05hbWUpIHtcblx0XHRcdC8vIDEuIEFwcGxpY2F0aW9uIHJlbW92ZWQgdGhlIHByb3BlcnR5IGZyb20gdGhlaXIgZGF0YSBtb2RlbFxuXHRcdFx0Ly8gMi4gYWRkSXRlbSBmYWlsZWQgYmVmb3JlIHJldmVydERhdGEgY3JlYXRlZFxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb1JlbW92ZUl0ZW0pO1xuXHRcdH1cblx0XHRjb25zdCBvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdFx0Y29uc3Qgc0RhdGFQcm9wZXJ0eSA9IGF3YWl0IG9Nb2RpZmllci5nZXRQcm9wZXJ0eTxzdHJpbmc+KG9Qcm9wZXJ0eUluZm9OYW1lLCBcImRhdGFQcm9wZXJ0eVwiKTtcblx0XHRpZiAoc0RhdGFQcm9wZXJ0eSAmJiBzRGF0YVByb3BlcnR5LmluY2x1ZGVzICYmIHNEYXRhUHJvcGVydHkuaW5jbHVkZXMoXCJJbmxpbmVYTUxcIikpIHtcblx0XHRcdG9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvVGFibGUsIFwiZGVwZW5kZW50c1wiLCBvUHJvcGVydHlJbmZvTmFtZSk7XG5cdFx0XHRkb1JlbW92ZUl0ZW0gPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKChvVGFibGUgYXMgVUk1RWxlbWVudCkuaXNBICYmIG9Nb2RpZmllci50YXJnZXRzID09PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCBvVGFibGUsIHRoaXMuZ2V0Q29sdW1uc0ZvcihvVGFibGUgYXMgVGFibGUpKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb1JlbW92ZUl0ZW0pO1xuXHR9LFxuXHRfZ2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAobVByb3BlcnR5QmFnOiB7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IH0pIHtcblx0XHRyZXR1cm4gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdH0sXG5cdF9zZXREcmFmdEluZGljYXRvclN0YXR1czogZnVuY3Rpb24gKFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcixcblx0XHRvVGFibGU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdGFDb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRcdG9Db2x1bW5JbmZvPzogVGFibGVDb2x1bW5cblx0KSB7XG5cdFx0aWYgKG9Nb2RpZmllci50YXJnZXRzID09PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW4ob1RhYmxlIGFzIFRhYmxlLCBhQ29sdW1ucywgb0NvbHVtbkluZm8pO1xuXHRcdH1cblx0fSxcblx0X2dldEdyb3VwSWQ6IGZ1bmN0aW9uIChzUmV0cmlldmVkR3JvdXBJZDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNSZXRyaWV2ZWRHcm91cElkIHx8IHVuZGVmaW5lZDtcblx0fSxcblx0X2luc2VydEFnZ3JlZ2F0aW9uOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b1ZhbHVlSGVscDogRWxlbWVudCB8IFVJNUVsZW1lbnQgfCBFbGVtZW50W10gfCBVSTVFbGVtZW50W10sXG5cdFx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyLFxuXHRcdG9UYWJsZTogRWxlbWVudCB8IFVJNUVsZW1lbnRcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG9WYWx1ZUhlbHApIHtcblx0XHRcdHJldHVybiBvTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1RhYmxlLCBcImRlcGVuZGVudHNcIiwgb1ZhbHVlSGVscCwgMCk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fSxcblxuXHQvKipcblx0ICogSW52b2tlZCB3aGVuIGEgY29sdW1uIGlzIGFkZGVkIHVzaW5nIHRoZSB0YWJsZSBwZXJzb25hbGl6YXRpb24gZGlhbG9nLlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGFkZGVkXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gdGhlIGZsZXhpYmlsaXR5IEFQSVxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIEluc3RhbmNlIG9mIHRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgSW5zdGFuY2Ugb2YgdGhlIGFwcCBjb21wb25lbnRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy52aWV3IEluc3RhbmNlIG9mIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgdGFibGUgY29sdW1uIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcblx0ICovXG5cdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogRWxlbWVudCB8IFVJNUVsZW1lbnQsXG5cdFx0cHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IHZpZXc/OiBGRVZpZXcgfVxuXHQpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fZ2V0TWV0YU1vZGVsKG1Qcm9wZXJ0eUJhZyksXG5cdFx0XHRvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXIsXG5cdFx0XHRzVGFibGVJZCA9IG9Nb2RpZmllci5nZXRJZCh0YWJsZSksXG5cdFx0XHRhQ29sdW1ucyA9ICh0YWJsZSBhcyBVSTVFbGVtZW50KS5pc0EgPyB0aGlzLmdldENvbHVtbnNGb3IodGFibGUgYXMgVGFibGUpIDogbnVsbCxcblx0XHRcdHRhYmxlQVBJID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAoIWFDb2x1bW5zKSB7XG5cdFx0XHQvLyBXZSByZXR1cm4gbnVsbCBoZXJlIGJlY2F1c2UgZXZlcnl0aGluZyBzaG91bGQgYXBwbHkgYXQgcnVudGltZVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cblx0XHRjb25zdCBjb2x1bW5JbmZvID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbikge1xuXHRcdFx0cmV0dXJuIG9Db2x1bW4ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblx0XHRpZiAoIWNvbHVtbkluZm8pIHtcblx0XHRcdExvZy5lcnJvcihgJHtwcm9wZXJ0eUluZm9OYW1lfSBub3QgZm91bmQgd2hpbGUgYWRkaW5nIGNvbHVtbmApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRMb2cud2FybmluZyhgQ29sdW1uIGZvciAke3Byb3BlcnR5SW5mb05hbWV9IG5vdCBhZGRlZCBiZWNhdXNlIGl0J3MgaGlkZGVuYCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCwgdHJ1ZSk7XG5cdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCB0YWJsZSwgYUNvbHVtbnMsIGNvbHVtbkluZm8pO1xuXHRcdGNvbnN0IHNQYXRoID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJtZXRhUGF0aFwiLCBvTW9kaWZpZXIpO1xuXHRcdGNvbnN0IG9UYWJsZUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoISkhO1xuXHRcdC8vIElmIHZpZXcgaXMgbm90IHByb3ZpZGVkIHRyeSB0byBnZXQgaXQgYnkgYWNjZXNzaW5nIHRvIHRoZSBwYXJlbnRhbCBoaWVyYXJjaHlcblx0XHQvLyBJZiBpdCBkb2Vzbid0IHdvcmsgKHRhYmxlIGludG8gYW4gdW5hdHRhY2hlZCBPUCBzZWN0aW9uKSBnZXQgdGhlIHZpZXcgdmlhIHRoZSBBcHBDb21wb25lbnRcblx0XHRjb25zdCB2aWV3ID1cblx0XHRcdG1Qcm9wZXJ0eUJhZy52aWV3IHx8XG5cdFx0XHRDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlIGFzIFVJNUVsZW1lbnQpIHx8XG5cdFx0XHQobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCA/IENvbW1vblV0aWxzLmdldEN1cnJlbnRQYWdlVmlldyhtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50KSA6IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0TG9nLmVycm9yKFwiQ3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgYXJlIG5vdCBzdXBwb3J0ZWQgd2hlbiB1c2luZyBhIHRhYmxlIGJ1aWxkaW5nIGJsb2NrLlwiKTtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJTbG90XCIpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZW1wbGF0ZVNsb3RDb2x1bW5GcmFnbWVudChjb2x1bW5JbmZvIGFzIEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4sIHZpZXcsIG9Nb2RpZmllciwgc1RhYmxlSWQpO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiQ29tcHV0ZWRcIikge1xuXHRcdFx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gKCh0YWJsZSBhcyBNRENUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcztcblx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihzVGFibGVJZCwgY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCBvVGFibGVDb250ZXh0LCBlbmFibGVBbmFseXRpY3MpO1xuXHRcdH1cblxuXHRcdC8vIGZhbGwtYmFja1xuXHRcdGlmICghb01ldGFNb2RlbCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cblx0XHRsZXQgcHJvcGVydHlJbmZvcyA9IHRhYmxlQVBJLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRpZiAoIXByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHQvLyBJZiB0aGUgcHJvcGVydHlJbmZvcyBhcmUgbm90IGZldGNoZWQgeWV0LCB3ZSBuZWVkIHRvIGZldGNoIHRoZW1cblx0XHRcdC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgdGFibGUgaXMgbm90IGNyZWF0ZWQgeWV0XG5cdFx0XHRhd2FpdCB0aGlzLmZldGNoUHJvcGVydGllcyh0YWJsZSBhcyBNRENUYWJsZSk7XG5cdFx0XHRwcm9wZXJ0eUluZm9zID0gdGFibGVBUEkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0eUluZm9zLmZpbmQoZnVuY3Rpb24gKHByb3BJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRyZXR1cm4gcHJvcEluZm8ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5SW5mbyEuYW5ub3RhdGlvblBhdGgpITtcblxuXHRcdGNvbnN0IGZuVGVtcGxhdGVGcmFnbWVudCA9IGFzeW5jIChcblx0XHRcdG9JblByb3BlcnR5SW5mbzogdW5rbm93bixcblx0XHRcdG9WaWV3OiBGRVZpZXdcblx0XHQpOiBQcm9taXNlPFVJNUVsZW1lbnQgfCBFbGVtZW50IHwgVUk1RWxlbWVudFtdIHwgRWxlbWVudFtdPiA9PiB7XG5cdFx0XHRsZXQgYkRpc3BsYXlNb2RlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHNUYWJsZVR5cGVDdXN0b21EYXRhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgc0NyZWF0aW9uTW9kZUN1c3RvbURhdGE6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nIHwgYm9vbGVhbj4odGFibGUsIFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJ0YWJsZVR5cGVcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJjcmVhdGlvbk1vZGVcIiwgb01vZGlmaWVyKVxuXHRcdFx0XSkudGhlbihhc3luYyAoYUN1c3RvbURhdGE6IChzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKVtdKSA9PiB7XG5cdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGFDdXN0b21EYXRhWzBdIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdHNUYWJsZVR5cGVDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbMV0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSA9IGFDdXN0b21EYXRhWzJdIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gUmVhZCBPbmx5IGFuZCBDb2x1bW4gRWRpdCBNb2RlIGNhbiBib3RoIGhhdmUgdGhyZWUgc3RhdGVcblx0XHRcdFx0Ly8gVW5kZWZpbmVkIG1lYW5zIHRoYXQgdGhlIGZyYW1ld29yayBkZWNpZGVzIHdoYXQgdG8gZG9cblx0XHRcdFx0Ly8gVHJ1ZSAvIERpc3BsYXkgbWVhbnMgYWx3YXlzIHJlYWQgb25seVxuXHRcdFx0XHQvLyBGYWxzZSAvIEVkaXRhYmxlIG1lYW5zIGVkaXRhYmxlIGJ1dCB3aGlsZSBzdGlsbCByZXNwZWN0aW5nIHRoZSBsb3cgbGV2ZWwgcHJpbmNpcGxlIChpbW11dGFibGUgcHJvcGVydHkgd2lsbCBub3QgYmUgZWRpdGFibGUpXG5cdFx0XHRcdGlmIChiRGlzcGxheU1vZGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgYkRpc3BsYXlNb2RlICE9PSBcImJvb2xlYW5cIikge1xuXHRcdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGJEaXNwbGF5TW9kZSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9ICh0YWJsZSBhcyBUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdFx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuZW5hYmxlQXV0b0NvbHVtbldpZHRoLFxuXHRcdFx0XHRcdFx0cmVhZE9ubHk6IGJEaXNwbGF5TW9kZSxcblx0XHRcdFx0XHRcdHRhYmxlVHlwZTogc1RhYmxlVHlwZUN1c3RvbURhdGEsXG5cdFx0XHRcdFx0XHRpZDogc1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBwcm9wZXJ0eUluZm9OYW1lLFxuXHRcdFx0XHRcdFx0Y29sdW1uSW5mbzogY29sdW1uSW5mbyxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSxcblx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogeyBuYW1lOiBzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSB9LFxuXHRcdFx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXJcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQ6IG9Qcm9wZXJ0eUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9jb2x1bW5JbmZvXCIpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLFxuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW46IG9UaGlzXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCB0YWJsZUNvbGxlY3Rpb24gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0XHRvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pIVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBoYW5kbGVyUHJvdmlkZXIgPSBuZXcgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcihcblx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHR7IGNvbGxlY3Rpb25FbnRpdHk6IHRhYmxlQ29sbGVjdGlvbi50YXJnZXRPYmplY3QhLCBtZXRhTW9kZWw6IG9NZXRhTW9kZWwgfSxcblx0XHRcdFx0XHR0YWJsZUFQSVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBjb21wdXRlZENvbHVtblhNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRcdFx0anN4LnJlbmRlckFzWE1MKCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoZ2V0Q29sdW1uVGVtcGxhdGUoXG5cdFx0XHRcdFx0XHRcdHNUYWJsZUlkLFxuXHRcdFx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uSW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSEsXG5cdFx0XHRcdFx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHRcdFx0KSA/PyBcIlwiKSBhcyB1bmtub3duIGFzIHN0cmluZztcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcInRleHQveG1sXCJcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRcdFx0XHRjb21wdXRlZENvbHVtblhNTC5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdFx0XHRcdFx0eyB2aWV3OiBvVmlldyB9LFxuXHRcdFx0XHRcdG9Nb2RpZmllclxuXHRcdFx0XHQpLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9UaGlzLmRlc3Ryb3koKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZuVGVtcGxhdGVGcmFnbWVudChwcm9wZXJ0eUluZm8sIHZpZXcpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBQcm92aWRlIHRoZSBUYWJsZSdzIGZpbHRlciBkZWxlZ2F0ZSB0byBwcm92aWRlIGJhc2ljIGZpbHRlciBmdW5jdGlvbmFsaXR5IHN1Y2ggYXMgYWRkaW5nIEZpbHRlckZpZWxkcy5cblx0ICogQHJldHVybnMgT2JqZWN0IGZvciB0aGUgVGFibGVzIGZpbHRlciBwZXJzb25hbGl6YXRpb24uXG5cdCAqL1xuXHRnZXRGaWx0ZXJEZWxlZ2F0ZTogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRhcGlWZXJzaW9uOiAyXG5cdFx0XHR9LFxuXHRcdFx0RmlsdGVyQmFyRGVsZWdhdGUsXG5cdFx0XHR7XG5cdFx0XHRcdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChvUGFyZW50Q29udHJvbDogQ29udHJvbCwgc1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZykge1xuXHRcdFx0XHRcdGlmIChzUHJvcGVydHlJbmZvTmFtZS5pbmRleE9mKFwiUHJvcGVydHk6OlwiKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0Ly8gQ29ycmVjdCB0aGUgbmFtZSBvZiBjb21wbGV4IHByb3BlcnR5IGluZm8gcmVmZXJlbmNlcy5cblx0XHRcdFx0XHRcdHNQcm9wZXJ0eUluZm9OYW1lID0gc1Byb3BlcnR5SW5mb05hbWUucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBGaWx0ZXJCYXJEZWxlZ2F0ZS5hZGRJdGVtKG9QYXJlbnRDb250cm9sIGFzIEZpbHRlckJhciwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgVHlwZU1hcCBhdHRhY2hlZCB0byB0aGlzIGRlbGVnYXRlLlxuXHQgKiBAcmV0dXJucyBBbnkgaW5zdGFuY2Ugb2YgVHlwZU1hcFxuXHQgKi9cblx0Z2V0VHlwZU1hcDogZnVuY3Rpb24gKC8qb1BheWxvYWQ6IG9iamVjdCovKSB7XG5cdFx0cmV0dXJuIFR5cGVNYXA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZvcm1hdCB0aGUgdGl0bGUgb2YgdGhlIGdyb3VwIGhlYWRlciAuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEZvcm1hdHRlZCB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyLlxuXHQgKi9cblx0Zm9ybWF0R3JvdXBIZWFkZXIodGFibGU6IE1EQ1RhYmxlLCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgcHJvcGVydHk6IHN0cmluZykge1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0eUluZm9zPy5maW5kKChvYmopID0+IHtcblx0XHRcdHJldHVybiBvYmoubmFtZSA9PT0gcHJvcGVydHk7XG5cdFx0fSk7XG5cdFx0LypGb3IgYSBEYXRlLCBEYXRlVGltZSwgQm9vbGVhbiBvciBEZWNpbWFsIHByb3BlcnR5LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgaW4gZXh0ZXJuYWwgZm9ybWF0IHVzaW5nIGEgVUk1IHR5cGUgZm9yIHRoZVxuXHQgICAgICAgIGdpdmVuIHByb3BlcnR5IHBhdGggdGhhdCBmb3JtYXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5J3MgRURNIHR5cGUgYW5kIGNvbnN0cmFpbnRzKi9cblx0XHRjb25zdCBkYXRhQmFzZVR5cGUgPSBUeXBlTWFwLmdldFR5cGVDb25maWcocHJvcGVydHlJbmZvPy5kYXRhVHlwZSkuYmFzZVR5cGU7XG5cdFx0Y29uc3QgZXh0ZXJuYWxGb3JtYXQgPVxuXHRcdFx0ZGF0YUJhc2VUeXBlID09PSBcIkRhdGVUaW1lXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIkRhdGVcIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiQm9vbGVhblwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJOdW1lcmljXCI7XG5cdFx0bGV0IHZhbHVlO1xuXHRcdGlmICghY29udGV4dCkge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0XHRyZXR1cm4gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFXCIsIFtwcm9wZXJ0eUluZm8/LmxhYmVsLCB2YWx1ZV0pO1xuXHRcdH1cblx0XHRpZiAocHJvcGVydHlJbmZvPy5tb2RlKSB7XG5cdFx0XHRzd2l0Y2ggKHByb3BlcnR5SW5mby5tb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gcHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZSA9IHByb3BlcnR5SW5mbz8ucGF0aCA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnBhdGgsIGV4dGVybmFsRm9ybWF0KSA6IG51bGw7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0fVxuXHRcdHJldHVybiBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVcIiwgW3Byb3BlcnR5SW5mbz8ubGFiZWwsIHZhbHVlXSk7XG5cdH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlGQSxNQUFNQSw4QkFBOEIsR0FB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
1381
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiT2JqZWN0IiwiYXNzaWduIiwiVGFibGVEZWxlZ2F0ZUJhc2UiLCJhcGlWZXJzaW9uIiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAiLCJ0YWJsZSIsInByb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb3MiLCJrZXkiLCJpbmRleE9mIiwiY29sdW1uIiwiZ2V0Q29sdW1ucyIsImZpbmQiLCJjb2wiLCJnZXRQcm9wZXJ0eUtleSIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkTWV0YURhdGEiLCJjb252ZXJ0ZWRUeXBlcyIsIm9EYXRhRmllbGQiLCJ0YXJnZXRPYmplY3QiLCJvRmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJhRmllbGRXaWR0aCIsIkRhdGEiLCJmb3JFYWNoIiwib0RhdGEiLCJvRGF0YUZpZWxkV2lkdGgiLCIkVHlwZSIsIlRhYmxlU2l6ZUhlbHBlciIsImdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImdldFdpZHRoRm9yRGF0YUZpZWxkIiwibGFiZWxXaWR0aCIsInByb3BlcnR5V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsInRvU3RyaW5nIiwicHVzaCIsIm5XaWRlc3QiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsIk1hdGgiLCJtYXgiLCJ2aXN1YWxTZXR0aW5ncyIsImRlZXBFeHRlbmQiLCJ3aWR0aENhbGN1bGF0aW9uIiwidmVydGljYWxBcnJhbmdlbWVudCIsIm1pbldpZHRoIiwiY2VpbCIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAiLCJwcm9wZXJ0eSIsInRhYmxlQVBJIiwiZ2V0UGFyZW50IiwibWV0YU1vZGVsIiwiZGF0YUZpZWxkIiwiZ2V0T2JqZWN0IiwiZ2FwIiwiZ2V0UHJvcGVydHkiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCIsInVuaXQiLCJ1bml0VGV4dCIsInRpbWV6b25lVGV4dCIsIm9UYWJsZUFQSSIsInRleHQiLCJnZXRSZWFkT25seSIsIl9jb21wdXRlTGFiZWwiLCJsYWJlbE1hcCIsImxhYmVsIiwicHJvcGVydGllc1dpdGhTYW1lTGFiZWwiLCJpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSIsInNvbWUiLCJwcm9wIiwicGF0aCIsIm1vZGUiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImFkZGl0aW9uYWxMYWJlbHMiLCJmaWx0ZXJhYmxlIiwiam9pbiIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwcm9wZXJ0aWVzIiwicDEzbk1vZGUiLCJnZXRQMTNuTW9kZSIsInNvcnRhYmxlIiwiZ3JvdXBhYmxlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwibmFtZSIsImdyb3VwTGFiZWwiLCJncm91cCIsImRhdGFUeXBlIiwidmlzaWJsZSIsImdldENvbHVtbnNGb3IiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb2x1bW5zIiwiZmV0Y2hFeHBvcnRDYXBhYmlsaXRpZXMiLCJvVGFibGUiLCJvQ2FwYWJpbGl0aWVzIiwiWExTWCIsIm9Nb2RlbCIsIkRlbGVnYXRlVXRpbCIsImZldGNoTW9kZWwiLCJ0aGVuIiwibW9kZWwiLCJhU3VwcG9ydGVkRm9ybWF0cyIsImFMb3dlckZvcm1hdHMiLCJtYXAiLCJlbGVtZW50IiwidG9Mb3dlckNhc2UiLCJvQW5ub3RhdGlvbiIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5IiwiY29sdW1uSW5mbyIsImNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGgiLCJpc0ZpbHRlcmFibGUiLCJpc1BhdGhGaWx0ZXJhYmxlIiwicmVsYXRpdmVQYXRoIiwiaXNQYXJ0T2ZMaW5lSXRlbSIsImlzUGFydE9mQ3VzdG9tQ29sdW1uIiwiaXNDb25zdGFudCIsIl9mZXRjaFByb3BlcnR5SW5mbyIsImFwcENvbXBvbmVudCIsInNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoIiwib05hdmlnYXRpb25Db250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NvbXBsZXhUeXBlIiwidHlwZUNvbmZpZyIsImNsYXNzTmFtZSIsImJGaWx0ZXJhYmxlIiwiQ29tbW9uSGVscGVyIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJiSXNBbmFseXRpY2FsVGFibGUiLCJnZXRDdXN0b21EYXRhIiwiZ2V0TG9jYWxpemVkVGV4dCIsInRvb2x0aXAiLCJfZ2V0VHlwZUNvbmZpZyIsImZvcm1hdE9wdGlvbnMiLCJiYXNlVHlwZSIsInN0eWxlIiwiY29uc3RyYWludHMiLCJhdmFpbGFiaWxpdHkiLCJleHBvcnRTZXR0aW5ncyIsIl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyIsInR5cGUiLCJDb2x1bW5UeXBlIiwiQW5ub3RhdGlvbiIsInRlbXBsYXRlIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJrZXlzIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMiLCJpc0tleSIsImlzR3JvdXBhYmxlIiwidGV4dEFycmFuZ2VtZW50IiwiX3NldFRleHRBcnJhbmdlbWVudEluZm8iLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJhZGRpdGlvbmFsTGFiZWwiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0IiwiZm9ybWF0IiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiZGVzY3JpcHRpb25Db2x1bW4iLCJvQ29sIiwidGV4dFByb3BlcnR5IiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJhZ2dyZWdhdGFibGUiLCJfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyIsIl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyIsImhlYWRlciIsInN0YXJ0c1dpdGgiLCJNb2RlbEhlbHBlciIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbkluZm8iLCJoYXNEcmFmdEluZGljYXRvciIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsIiwiX29UYWJsZSIsIl9vQ29sdW1uSW5mbyIsImFWaXNpYmxlQ29sdW1ucyIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzSW50ZXJuYWxQYXRoIiwiZ2V0UGF0aCIsImluZGV4Iiwic2V0UHJvcGVydHkiLCJfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiZW50aXR5VHlwZVBhdGgiLCJiaW5kaW5nUGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJmZXRjaGVkUHJvcGVydGllcyIsIm5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiQ29tbW9uVXRpbHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIlByb21pc2UiLCJyZXNvbHZlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZSIsIkVycm9yIiwic2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsImdldFByb3BlcnR5SW5mb3MiLCJfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJnZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic3ViRmV0Y2hlZFByb3BlcnRpZXMiLCJzZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic2V0Tm9EYXRhSW5mb3JtYXRpb24iLCJpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbiIsIm5vRGF0YUFnZ3JlZ2F0aW9uIiwiZ2V0Tm9EYXRhIiwiaXNBIiwiY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSIsInNldFRpdGxlIiwidGl0bGUiLCJzZXREZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0SWxsdXN0cmF0aW9uVHlwZSIsImlsbHVzdHJhdGlvblR5cGUiLCJzZXRJbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0aW9uU2l6ZSIsImlsbHVzdHJhdGVkTWVzc2FnZSIsIklsbHVzdHJhdGVkTWVzc2FnZSIsInNldE5vRGF0YSIsInNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlIiwiYmluZGluZ0luZm8iLCJ0YWJsZUZpbHRlckluZm8iLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic3VmZml4UmVzb3VyY2VLZXkiLCJzdWJzdHJpbmciLCJpbGx1c3RyYXRlZEluZm9ybWF0aW9uIiwiZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMiLCJnZXRRdWlja0ZpbHRlciIsImdldFRleHQiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9TZWFyY2hSZXN1bHRzIiwiZmlsdGVyQXNzb2NpYXRpb24iLCJnZXRGaWx0ZXIiLCJoYXNGaWx0ZXJPclNlYXJjaCIsInNlYXJjaCIsImZpbHRlcnMiLCJ0ZXN0IiwiTm9EYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwibGl2ZU1vZGUiLCJnZXROb0RhdGFNZXNzYWdlTW9kZSIsImN1cnJlbnROb0RhdGEiLCJoYW5kbGVUYWJsZURhdGFSZWNlaXZlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImJEYXRhUmVjZWl2ZWRBdHRhY2hlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNldFRpbWVvdXQiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiSlNPTiIsInBhcnNlIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJEZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsInNldFVwRW1wdHlSb3dzIiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwic2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsIiwiY29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsIiwiZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZSIsImZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlIiwiaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJkYXRhTW9kZWwiLCJpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsImlzT3B0aW1pc3RpY0JhdGNoRGlzYWJsZWQiLCJvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIiLCJwcm9taXNlIiwicmViaW5kIiwib0JpbmRpbmdJbmZvIiwiYklzU3VzcGVuZGVkIiwiVGFibGVSdW50aW1lIiwiY2xlYXJTZWxlY3Rpb24iLCJhcHBseSIsIm9uVGFibGVCb3VuZCIsIndoZW5Cb3VuZCIsIm9FcnJvciIsImZldGNoUHJvcGVydGllcyIsInByZUluaXQiLCJmYXN0Q3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwidXBkYXRlQmluZGluZ0luZm8iLCJpbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSIsIl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvIiwiX2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzIiwiX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZmlyZUV2ZW50IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvIiwiYXR0YWNoZWRFdmVudHMiLCJnZXRBdHRhY2hlZEV2ZW50cyIsImNvbnRleHQiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsInNldEF0dGFjaEV2ZW50cyIsImUiLCJzb3J0ZXJzIiwic29ydGVyIiwibmV3U29ydGVyc1RvQmVBcHBsaWVkIiwidGFibGVQcm9wZXJ0aWVzIiwidGFibGVQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsInVuaXRTb3J0ZXJBdmFpbGFibGUiLCJzb3J0IiwiU29ydGVyIiwiZ2V0RmlsdGVycyIsInVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCIsInRhYmxlRGVmIiwicmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHMiLCJhbm5vdGF0aW9uIiwiZW50aXR5VHlwZU5hbWUiLCJwYXJhbWV0ZXJzIiwiJHNlbGVjdCIsImdldFZpZXciLCJjb252ZXJ0ZXJUeXBlIiwiY2FyZHMiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJnZXRJblJlc3VsdFByb3BlcnR5S2V5cyIsImNvbnRyb2wiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJhbGxLa2V5c1JlcXVlc3RlZCIsImNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCIsIm92ZXJyaWRlUm93UHJlc3MiLCJyZXF1ZXN0QXRMZWFzdCIsImZpbHRlciIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImdldENvbnRlbnQiLCJhbGxDb2x1bW5zIiwia2V5UHJvcGVydHlOYW1lcyIsImMiLCJkaXNwbGF5ZWRDb2x1bW5zIiwicmVmZXJlbmNlZFByb3BlcnR5UGF0aHMiLCJTZXQiLCJwcm9jZXNzQ29sdW1uIiwiYWRkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJhZGRpdGlvbmFsQ29sdW1uTmFtZSIsImFkZGl0aW9uYWxDb2x1bW4iLCJyZWxhdGVkQ29sdW1uTmFtZSIsInJlbGF0ZWRDb2x1bW4iLCJldmVyeSIsInByb3BOYW1lIiwiaGFzIiwiZ2V0U2VhcmNoUXVlcnkiLCJiaW5kaW5nIiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsImdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzIiwiJHNlYXJjaCIsInVwZGF0ZUJpbmRpbmciLCIkJGdldEtlZXBBbGl2ZUNvbnRleHQiLCJjb2xsZWN0aW9uUGF0aCIsImludGVybmFsTW9kZWwiLCJrZXB0QWxpdmVMaXN0cyIsIm5lZWRNYW51YWxSZWZyZXNoIiwidmlldyIsIm1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5IiwicGVuZGluZ01hbnVhbFVwZGF0ZSIsIm5ld1NvcnRlcnMiLCJzdHJpbmdpZnkiLCJ2aWV3RGF0YSIsIm9sZEZpbHRlcnMiLCJwcmV2aW91c1NvcnRlcnMiLCJmaWx0ZXJOb3RDaGFuZ2VkIiwiZGVlcEVxdWFsIiwiTFJNdWx0aVZpZXdFbmFibGVkIiwidmlld3MiLCJlbmFibGVBbmFseXRpY3MiLCJzZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwic2V0R3JvdXBDb25kaXRpb25zIiwic2V0VGFibGVCaW5kaW5nSW5mbyIsInNldERvd25sb2FkVXJsIiwicmVxdWVzdFJlZnJlc2giLCJnZXRHcm91cElkIiwiZmluYWxseSIsInN0b3JlZEV2ZW50cyIsIl9yZWYiLCJldmVudElkIiwiY2FsbGJhY2siLCJsaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZSIsInJvd0JpbmRpbmdJbmZvIiwiZ2V0VGFibGVUZW1wbGF0ZUJpbmRpbmdJbmZvIiwiYmluZGluZ0NvbnRleHQiLCJ0YWJsZUNhbkJlSW5JbmxpbmVFZGl0IiwiZ2V0QmluZGluZyIsImdldFVwZGF0ZUdyb3VwSWQiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJzdXNwZW5kZWQiLCJvRmlsdGVyIiwib0ZpbHRlckluZm8iLCJGaWx0ZXIiLCJhbmQiLCJvRGF0YVN0YXRlSW5kaWNhdG9yIiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaXNGaWx0ZXJpbmciLCJ1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeSIsImFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJmaWx0ZXJJbmZvIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInBheWxvYWQiLCJnZXRQYXlsb2FkIiwiZmlsdGVyT25BY3RpdmVFbnRpdGllcyIsImZpbHRlck9uQWN0aXZlIiwib3BlcmF0b3IiLCJ2YWx1ZTEiLCJfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQiLCJtb2RpZmllciIsInRhYmxlSWQiLCJzbG90Q29sdW1uc1hNTCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImpzeCIsInJlbmRlckFzWE1MIiwiZ2V0U2xvdENvbHVtbiIsInNsb3RYTUwiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIm9UZW1wbGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwibm9kZU5hbWUiLCJyZXBsYWNlV2l0aCIsInJlbW92ZSIsInJlc3VsdFhNTCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJtb2RlbHMiLCJnZXRDb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRQcmVwcm9jZXNzb3JDb250ZXh0IiwidGFyZ2V0cyIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJFeGNlbEZvcm1hdCIsImdldEV4Y2VsRGF0ZWZyb21KU0RhdGUiLCJnZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUiLCJnZXRFeGNlbFRpbWVmcm9tSlNUaW1lIiwiX2dldFZIUmVsZXZhbnRGaWVsZHMiLCJzTWV0YWRhdGFQYXRoIiwic0JpbmRpbmdQYXRoIiwiYUZpZWxkcyIsIm9EYXRhRmllbGREYXRhIiwiJGtpbmQiLCJvVmFsdWUiLCJpSW5kZXgiLCJnZXROYXZpZ2F0aW9uUGF0aCIsIl9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbiIsImFDb2x1bW5zIiwiYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IiLCJvQ29sdW1uIiwic0FkZFZpc2libGVDb2x1bW5OYW1lIiwic1Zpc2libGVDb2x1bW5OYW1lIiwiYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCIsInNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yIiwiaSIsImoiLCJyZW1vdmVJdGVtIiwib1Byb3BlcnR5SW5mb05hbWUiLCJtUHJvcGVydHlCYWciLCJkb1JlbW92ZUl0ZW0iLCJvTW9kaWZpZXIiLCJzRGF0YVByb3BlcnR5IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMiLCJfZ2V0TWV0YU1vZGVsIiwiX2dldEdyb3VwSWQiLCJzUmV0cmlldmVkR3JvdXBJZCIsIl9pbnNlcnRBZ2dyZWdhdGlvbiIsIm9WYWx1ZUhlbHAiLCJhZGRJdGVtIiwicHJvcGVydHlJbmZvTmFtZSIsInNUYWJsZUlkIiwid2FybmluZyIsInNQYXRoIiwiZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllciIsIm9UYWJsZUNvbnRleHQiLCJnZXRDdXJyZW50UGFnZVZpZXciLCJnZXRDb21wdXRlZENvbHVtbiIsImdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MiLCJwcm9wSW5mbyIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJmblRlbXBsYXRlRnJhZ21lbnQiLCJvSW5Qcm9wZXJ0eUluZm8iLCJvVmlldyIsImJEaXNwbGF5TW9kZSIsInNUYWJsZVR5cGVDdXN0b21EYXRhIiwic0NyZWF0aW9uTW9kZUN1c3RvbURhdGEiLCJhbGwiLCJhQ3VzdG9tRGF0YSIsIm9UaGlzIiwiSlNPTk1vZGVsIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwicmVhZE9ubHkiLCJ0YWJsZVR5cGUiLCJpZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJjb2xsZWN0aW9uIiwiY3JlYXRpb25Nb2RlIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJ0aGlzIiwidGFibGVDb2xsZWN0aW9uIiwiaGFuZGxlclByb3ZpZGVyIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsImNvbGxlY3Rpb25FbnRpdHkiLCJjb21wdXRlZENvbHVtblhNTCIsImdldENvbHVtblRlbXBsYXRlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJkZXN0cm95IiwiZ2V0RmlsdGVyRGVsZWdhdGUiLCJGaWx0ZXJCYXJEZWxlZ2F0ZSIsIm9QYXJlbnRDb250cm9sIiwic1Byb3BlcnR5SW5mb05hbWUiLCJyZXBsYWNlIiwiZ2V0VHlwZU1hcCIsImZvcm1hdEdyb3VwSGVhZGVyIiwib2JqIiwiZGF0YUJhc2VUeXBlIiwiZXh0ZXJuYWxGb3JtYXQiLCJWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFdpdGhCcmFja2V0cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFQb2ludFR5cGUsXG5cdEZpZWxkR3JvdXBUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCBkZWVwRXh0ZW5kIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFeHRlbmRcIjtcbmltcG9ydCB7IGlzQ29uc3RhbnQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgQmFzZVRyZWVNb2RpZmllciB9IGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcblxuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uTWFuYWdlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY2FyZHMvQ29sbGFib3JhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRDb2x1bW5FeHBvcnRTZXR0aW5ncyxcblx0Q29tcHV0ZWRUYWJsZUNvbHVtbixcblx0Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbixcblx0VGFibGVDb2x1bW5cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCBWYWx1ZUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IERlbGV0ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9EZWxldGVIZWxwZXJcIjtcbmltcG9ydCBFeGNlbEZvcm1hdCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FeGNlbEZvcm1hdEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQcm9taXNlS2VlcGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Byb21pc2VLZWVwZXJcIjtcbmltcG9ydCB7IGdldExvY2FsaXplZFRleHQsIGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc1BhdGhGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaXNUeXBlRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db2xsZWN0aW9uQmluZGluZ0luZm9cIjtcbmltcG9ydCBDb2xsZWN0aW9uQmluZGluZ0luZm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCBGaWx0ZXJCYXJEZWxlZ2F0ZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyRGVsZWdhdGVcIjtcbmltcG9ydCB7IGdldENvbHVtblRlbXBsYXRlLCBnZXRDb21wdXRlZENvbHVtbiwgZ2V0U2xvdENvbHVtbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL01kY1RhYmxlVGVtcGxhdGVcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgVGFibGVSdW50aW1lIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlUnVudGltZVwiO1xuaW1wb3J0IFRhYmxlU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVNpemVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgVGFibGVVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgTGlzdFJlcG9ydENvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2UgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSB7IEpzQ29udHJvbFRyZWVNb2RpZmllciB9IGZyb20gXCJzYXAvdWkvY29yZS91dGlsL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1EQ1RhYmxlLCBNRENUYWJsZVByb3BlcnR5SW5mbyBhcyBQcm9wZXJ0eUluZm8sIGRlZmF1bHQgYXMgVGFibGUsIFZpc3VhbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIFR5cGVDb25maWcgZnJvbSBcInNhcC91aS9tZGMvVHlwZUNvbmZpZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgVGFibGVEZWxlZ2F0ZUJhc2UgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVGFibGVEZWxlZ2F0ZVwiO1xuaW1wb3J0IFR5cGVNYXAgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIE1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQsIGRlZmF1bHQgYXMgdjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyIGZyb20gXCIuLi9UYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXCI7XG5cbmNvbnN0IFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiA9IFwiL3NlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JcIjtcbmNvbnN0IFNFQVJDSF9IQVNfQkVFTl9GSVJFRCA9IFwic2VhcmNoRmlyZWRcIjtcbmNvbnN0IENPTFVNTl9IQVNfQkVFTl9BRERFRCA9IFwiY29sdW1uQWRkZWRcIjtcbmNvbnN0IFBSRVZJT1VTX1NPUlRFUlMgPSBcInByZXZpb3VzU29ydGVyc1wiO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3Igc2FwLnVpLm1kYy5UYWJsZS5cbiAqIDxoMz48Yj5Ob3RlOjwvYj48L2gzPlxuICogVGhlIGNsYXNzIGlzIGV4cGVyaW1lbnRhbCBhbmQgdGhlIEFQSSBhbmQgdGhlIGJlaGF2aW9yIGFyZSBub3QgZmluYWxpemVkLiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCBmb3IgcHJvZHVjdGl2ZSB1c2FnZS5cbiAqIEBhdXRob3IgU0FQIFNFXG4gKiBAcHJpdmF0ZVxuICogQGV4cGVyaW1lbnRhbFxuICogQHNpbmNlIDEuNjkuMFxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVEZWxlZ2F0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuYXNzaWduKHt9LCBUYWJsZURlbGVnYXRlQmFzZSwge1xuXHRhcGlWZXJzaW9uOiAyLFxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSB3aWR0aCBvZiBhIEZpZWxkR3JvdXAgY29sdW1uLlxuXHQgKiBUaGUgd2lkdGggb2YgdGhlIEZpZWxkR3JvdXAgaXMgdGhlIHdpZHRoIG9mIHRoZSB3aWRlc3QgcHJvcGVydHkgY29udGFpbmVkIGluIHRoZSBGaWVsZEdyb3VwIChpbmNsdWRpbmcgdGhlIGxhYmVsIGlmIHNob3dEYXRhRmllbGRzTGFiZWwgaXMgdHJ1ZSlcblx0ICogVGhlIHJlc3VsdCBvZiB0aGlzIGNhbGN1bGF0aW9uIGlzIHN0b3JlZCBpbiB0aGUgdmlzdWFsU2V0dGluZ3Mud2lkdGhDYWxjdWxhdGlvbi5taW5XaWR0aCBwcm9wZXJ0eSwgd2hpY2ggaXMgdXNlZCBieSB0aGUgTURDdGFibGUuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcblx0ICogQHBhcmFtIHByb3BlcnR5SW5mbyBDdXJyZW50IHByb3BlcnR5SW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvcyBBcnJheSBvZiBwcm9wZXJ0aWVzXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlRGVsZWdhdGVcblx0ICovXG5cdF9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwOiBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdHByb3BlcnR5SW5mbzogRW5oYW5jZWRGRVByb3BlcnR5SW5mbyxcblx0XHRwcm9wZXJ0eUluZm9zOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW11cblx0KSB7XG5cdFx0aWYgKHByb3BlcnR5SW5mby5rZXkuaW5kZXhPZihcIkRhdGFGaWVsZEZvckFubm90YXRpb246OkZpZWxkR3JvdXA6OlwiKSA9PT0gMCkge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gdGFibGUuZ2V0Q29sdW1ucygpLmZpbmQoKGNvbCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29sLmdldFByb3BlcnR5S2V5KCkgPT09IHByb3BlcnR5SW5mby5rZXk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHNob3dEYXRhRmllbGRzTGFiZWwgPSBjb2x1bW4gPyBjb2x1bW4uZGF0YShcInNob3dEYXRhRmllbGRzTGFiZWxcIikgPT09IFwidHJ1ZVwiIDogZmFsc2U7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5nZXRDb250ZXh0KHByb3BlcnR5SW5mby5hbm5vdGF0aW9uUGF0aCkpO1xuXHRcdFx0Y29uc3QgY29udmVydGVkTWV0YURhdGEgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMuY29udmVydGVkVHlwZXM7XG5cdFx0XHRjb25zdCBvRGF0YUZpZWxkID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uO1xuXHRcdFx0Y29uc3Qgb0ZpZWxkR3JvdXAgPSBvRGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0IGFzIEZpZWxkR3JvdXBUeXBlO1xuXHRcdFx0Y29uc3QgYUZpZWxkV2lkdGg6IG51bWJlcltdID0gW107XG5cdFx0XHRvRmllbGRHcm91cC5EYXRhLmZvckVhY2goZnVuY3Rpb24gKG9EYXRhOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdFx0XHRcdGxldCBvRGF0YUZpZWxkV2lkdGg6IHsgbGFiZWxXaWR0aDogbnVtYmVyOyBwcm9wZXJ0eVdpZHRoOiBudW1iZXIgfTtcblx0XHRcdFx0c3dpdGNoIChvRGF0YS4kVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSBUYWJsZVNpemVIZWxwZXIuZ2V0V2lkdGhGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRvRGF0YSxcblx0XHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFEYXRhLFxuXHRcdFx0XHRcdFx0XHRzaG93RGF0YUZpZWxkc0xhYmVsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0XHRcdFx0b0RhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkKFxuXHRcdFx0XHRcdFx0XHRvRGF0YSxcblx0XHRcdFx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvcyxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVkTWV0YURhdGEsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlPlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IHtcblx0XHRcdFx0XHRcdFx0bGFiZWxXaWR0aDogMCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlXaWR0aDogU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChvRGF0YS5MYWJlbD8udG9TdHJpbmcoKSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRGF0YUZpZWxkV2lkdGghKSB7XG5cdFx0XHRcdFx0YUZpZWxkV2lkdGgucHVzaChvRGF0YUZpZWxkV2lkdGgubGFiZWxXaWR0aCArIG9EYXRhRmllbGRXaWR0aC5wcm9wZXJ0eVdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBuV2lkZXN0ID0gYUZpZWxkV2lkdGgucmVkdWNlKGZ1bmN0aW9uIChhY2M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoYWNjLCB2YWx1ZSk7XG5cdFx0XHR9LCAwKTtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzIGFzIG9iamVjdCwge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBcnJhbmdlbWVudDogdHJ1ZSxcblx0XHRcdFx0XHRtaW5XaWR0aDogTWF0aC5jZWlsKG5XaWRlc3QpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBwcm9wZXJ0eTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbykge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0aWYgKCFwcm9wZXJ0eS5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aCAmJiBtZXRhTW9kZWwpIHtcblx0XHRcdFx0Y29uc3QgZGF0YUZpZWxkID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aH1AYCk7XG5cdFx0XHRcdGlmIChkYXRhRmllbGQgJiYgZGF0YUZpZWxkW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0pIHtcblx0XHRcdFx0XHRwcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHkudmlzdWFsU2V0dGluZ3MgfHwge30sIHtcblx0XHRcdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHRcdFx0Z2FwOiB0YWJsZUFQSS5nZXRQcm9wZXJ0eShcInJlYWRPbmx5XCIpID8gMCA6IDRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyxcblx0XHR1bml0Pzogc3RyaW5nLFxuXHRcdHVuaXRUZXh0Pzogc3RyaW5nLFxuXHRcdHRpbWV6b25lVGV4dD86IHN0cmluZ1xuXHQpIHtcblx0XHRjb25zdCBvVGFibGVBUEk6IEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPiB8IG51bGwgPSB0YWJsZSA/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4pIDogbnVsbDtcblx0XHQvLyB1cGRhdGUgZ2FwIGZvciBwcm9wZXJ0aWVzIHdpdGggc3RyaW5nIHVuaXRcblx0XHRjb25zdCB0ZXh0ID0gdW5pdFRleHQgfHwgdGltZXpvbmVUZXh0O1xuXHRcdGlmICh0ZXh0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Z2FwOiBNYXRoLmNlaWwoU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCh0ZXh0KSlcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh1bml0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Ly8gRm9yIHByb3BlcnRpZXMgd2l0aCB1bml0LCBhIGdhcCBuZWVkcyB0byBiZSBhZGRlZCB0byBwcm9wZXJseSByZW5kZXIgdGhlIGNvbHVtbiB3aWR0aCBvbiBlZGl0IG1vZGVcblx0XHRcdFx0XHRnYXA6IG9UYWJsZUFQSSAmJiBvVGFibGVBUEkuZ2V0UmVhZE9ubHkoKSA/IDAgOiA2XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZUxhYmVsOiBmdW5jdGlvbiAocHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sIGxhYmVsTWFwOiB7IFtsYWJlbDogc3RyaW5nXTogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdIH0pIHtcblx0XHRpZiAocHJvcGVydHkubGFiZWwpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsID0gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdO1xuXHRcdFx0Ly8gVGhpcyBjb21wdXRhdGlvbiBpcyBvbmx5IGZvciBkdXBsaWNhdGUgbGFiZWxzIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcy5cblx0XHRcdC8vIEV4Y2x1ZGUgdGV4dCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBhcyB0ZXh0IG9uIGEgcHJvcGVydHkgYW5ub3RhdGVkIHdpdGggdGV4dCBhcnJhbmdlbWVudCBzZXQgYXMgVGV4dE9ubHkuXG5cdFx0XHQvLyBFeGNsdWRlIG5hdmlnYXRpb24gcHJvcGVydGllcyBjcmVhdGVkIG9ubHkgZm9yIGZpbHRlcmluZyBwdXJwb3NlcyB3aXRoIGEgdGV4dCBhcnJhbmdlbWVudCBzZXQgdG8gVGV4dE9ubHkuXG5cdFx0XHRjb25zdCBpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSA9IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsPy5zb21lKFxuXHRcdFx0XHQocHJvcCkgPT4gcHJvcC50ZXh0ID09PSBwcm9wZXJ0eS5wYXRoICYmIHByb3A/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIlxuXHRcdFx0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydGllc1dpdGhTYW1lTGFiZWw/Lmxlbmd0aCA+IDEgJiZcblx0XHRcdFx0cHJvcGVydHkucGF0aD8uaW5jbHVkZXMoXCIvXCIpICYmXG5cdFx0XHRcdHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHMgJiZcblx0XHRcdFx0IWlzUHJvcGVydHlVc2VkQXNUZXh0T25seVByb3BlcnR5ICYmXG5cdFx0XHRcdCEocHJvcGVydHk/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIiAmJiBwcm9wZXJ0eS5maWx0ZXJhYmxlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHByb3BlcnR5LmxhYmVsID0gcHJvcGVydHkubGFiZWwgKyBcIiAoXCIgKyBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzLmpvaW4oXCIgLyBcIikgKyBcIilcIjtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzO1xuXHRcdH1cblx0fSxcblx0Ly9VcGRhdGUgVmlzdWFsU2V0dGluZyBmb3IgY29sdW1uV2lkdGggY2FsY3VsYXRpb24gYW5kIGxhYmVscyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0X3VwZGF0ZVByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydGllczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKSB7XG5cdFx0Y29uc3QgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10gfSA9IHt9O1xuXHRcdC8vIENoZWNrIGF2YWlsYWJsZSBwMTNuIG1vZGVzXG5cdFx0Y29uc3QgcDEzbk1vZGUgPSB0YWJsZS5nZXRQMTNuTW9kZSgpO1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGlmICghcHJvcGVydHkucHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eS5sYWJlbCkge1xuXHRcdFx0XHQvLyBPbmx5IGZvciBub24tY29tcGxleCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiU29ydFwiKSAmJiBwcm9wZXJ0eS5zb3J0YWJsZSkgfHxcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiRmlsdGVyXCIpICYmIHByb3BlcnR5LmZpbHRlcmFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIkdyb3VwXCIpICYmIHByb3BlcnR5Lmdyb3VwYWJsZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bGFiZWxNYXBbcHJvcGVydHkubGFiZWxdID1cblx0XHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSAhPT0gdW5kZWZpbmVkID8gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdLmNvbmNhdChbcHJvcGVydHldKSA6IFtwcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwKHRhYmxlLCBwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAodGFibGUsIHByb3BlcnR5KTtcblx0XHRcdHRoaXMuX2NvbXB1dGVMYWJlbChwcm9wZXJ0eSwgbGFiZWxNYXApO1xuXHRcdH0pO1xuXHRcdC8vIEFkZCB0aGUgJGVkaXRTdGF0ZSBwcm9wZXJ0eVxuXHRcdHByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRrZXk6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRcdGdyb3VwTGFiZWw6IFwiXCIsXG5cdFx0XHRncm91cDogXCJcIixcblx0XHRcdGxhYmVsOiBcIlwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsXG5cdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdGdyb3VwYWJsZTogZmFsc2UsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRmaWx0ZXJhYmxlOiBmYWxzZVxuXHRcdH0gYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyk7XG5cdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdH0sXG5cblx0Z2V0Q29sdW1uc0ZvcjogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFRhYmxlQ29sdW1uW10ge1xuXHRcdHJldHVybiAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGV4cG9ydCBjYXBhYmlsaXRpZXMgZm9yIHRoZSBnaXZlbiBzYXAudWkubWRjLlRhYmxlIGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIHRoZSB0YWJsZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlcHJlc2VudGluZyB0aGUgZXhwb3J0IGNhcGFiaWxpdGllcyBvZiB0aGUgdGFibGUgaW5zdGFuY2Vcblx0ICovXG5cdGZldGNoRXhwb3J0Q2FwYWJpbGl0aWVzOiBhc3luYyBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IFByb21pc2U8eyBYTFNYPzogdW5rbm93bjsgUERGPzogdW5rbm93biB9PiB7XG5cdFx0Y29uc3Qgb0NhcGFiaWxpdGllczogeyBYTFNYPzogdW5rbm93bjsgUERGPzogdW5rbm93biB9ID0geyBYTFNYOiB7fSB9O1xuXHRcdGxldCBvTW9kZWwhOiBPRGF0YU1vZGVsO1xuXHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZmV0Y2hNb2RlbChvVGFibGUpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAobW9kZWw6IE1vZGVsKSB7XG5cdFx0XHRcdG9Nb2RlbCA9IG1vZGVsIGFzIE9EYXRhTW9kZWw7XG5cdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TdXBwb3J0ZWRGb3JtYXRzXCIpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChhU3VwcG9ydGVkRm9ybWF0czogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3QgYUxvd2VyRm9ybWF0cyA9IChhU3VwcG9ydGVkRm9ybWF0cyB8fCBbXSkubWFwKChlbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChhTG93ZXJGb3JtYXRzLmluY2x1ZGVzKFwiYXBwbGljYXRpb24vcGRmXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Nb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lckBjb20uc2FwLnZvY2FidWxhcmllcy5QREYudjEuRmVhdHVyZXNcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0Fubm90YXRpb246IHVua25vd24pIHtcblx0XHRcdFx0aWYgKG9Bbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0b0NhcGFiaWxpdGllc1tcIlBERlwiXSA9IE9iamVjdC5hc3NpZ24oe30sIG9Bbm5vdGF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgY29tcHV0aW5nIGV4cG9ydCBjYXBhYmlsaXRpZXM6ICR7ZXJyfWApO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIG9DYXBhYmlsaXRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogRmlsdGVyaW5nIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgTGluZUl0ZW0gYW5ub3RhdGlvbiBub3Igb2YgdGhlIGN1c3RvbSBjb2x1bW5zIGlzIGZvcmJpZGRlbi5cblx0ICogQHBhcmFtIGNvbHVtbkluZm9cblx0ICogQHBhcmFtIGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGhcblx0ICogQHJldHVybnMgQm9vbGVhbiB0cnVlIGlmIGZpbHRlcmluZyBpcyBhbGxvd2VkLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHk6IGZ1bmN0aW9uIChcblx0XHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0Y29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBpc0ZpbHRlcmFibGUgPSBpc1BhdGhGaWx0ZXJhYmxlKGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQhY29sdW1uSW5mby5yZWxhdGl2ZVBhdGguaW5jbHVkZXMoXCIvXCIpIHx8XG5cdFx0XHQoKGNvbHVtbkluZm8uaXNQYXJ0T2ZMaW5lSXRlbSA9PT0gdHJ1ZSB8fCBjb2x1bW5JbmZvLmlzUGFydE9mQ3VzdG9tQ29sdW1uID09PSB0cnVlKSAmJlxuXHRcdFx0XHQhKGlzQ29uc3RhbnQoaXNGaWx0ZXJhYmxlKSAmJiBpc0ZpbHRlcmFibGUudmFsdWUgPT09IGZhbHNlKSlcblx0XHQpO1xuXHR9LFxuXG5cdF9mZXRjaFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKFxuXHRcdG1ldGFNb2RlbDogTWV0YU1vZGVsLFxuXHRcdGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcblx0KTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbyB7XG5cdFx0Y29uc3Qgc0Fic29sdXRlTmF2aWdhdGlvblBhdGggPSBjb2x1bW5JbmZvLmFubm90YXRpb25QYXRoLFxuXHRcdFx0b0RhdGFGaWVsZCA9IG1ldGFNb2RlbC5nZXRPYmplY3Qoc0Fic29sdXRlTmF2aWdhdGlvblBhdGgpLFxuXHRcdFx0b05hdmlnYXRpb25Db250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoKSBhcyBDb250ZXh0LFxuXHRcdFx0aXNDb21wbGV4VHlwZSA9IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmIGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWU/LmluZGV4T2YoXCJFZG0uXCIpICE9PSAwLFxuXHRcdFx0YkZpbHRlcmFibGUgPSBDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUob05hdmlnYXRpb25Db250ZXh0LCBvRGF0YUZpZWxkKSxcblx0XHRcdGJJc0FuYWx5dGljYWxUYWJsZSA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKHRhYmxlLCBcImVuYWJsZUFuYWx5dGljc1wiKSA9PT0gXCJ0cnVlXCIsXG5cdFx0XHRsYWJlbCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby5sYWJlbCA/PyBcIlwiLCBhcHBDb21wb25lbnQgPz8gdGFibGUpLFxuXHRcdFx0dG9vbHRpcCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby50b29sdGlwID8/IFwiXCIsIGFwcENvbXBvbmVudCA/PyB0YWJsZSksXG5cdFx0XHR0eXBlQ29uZmlnID0gdGhpcy5fZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvLCBpc0NvbXBsZXhUeXBlKSxcblx0XHRcdHByb3BlcnR5SW5mbzogRW5oYW5jZWRGRVByb3BlcnR5SW5mbyA9IHtcblx0XHRcdFx0bmFtZTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoLFxuXHRcdFx0XHRncm91cExhYmVsOiBjb2x1bW5JbmZvLmdyb3VwTGFiZWwsXG5cdFx0XHRcdGdyb3VwOiBjb2x1bW5JbmZvLmdyb3VwLFxuXHRcdFx0XHRsYWJlbDogbGFiZWwsXG5cdFx0XHRcdHRvb2x0aXA6IHRvb2x0aXAsXG5cdFx0XHRcdGRhdGFUeXBlOiB0eXBlQ29uZmlnLmNsYXNzTmFtZSxcblx0XHRcdFx0dHlwZUNvbmZpZzogdHlwZUNvbmZpZyxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczpcblx0XHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWc/LmJhc2VUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiXG5cdFx0XHRcdFx0XHQ/IHsgc3R5bGU6IFwibWVkaXVtL3Nob3J0XCIgfSAvKiBUaGlzIGNvbmRpdGlvbiBkb2Vzbid0IGhhdmUgYW55IGltcGFjdCwgdG8gYmUgcmV2aWV3ZWQgKi9cblx0XHRcdFx0XHRcdDogY29sdW1uSW5mby50eXBlQ29uZmlnPy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb25zdHJhaW50czogY29sdW1uSW5mby50eXBlQ29uZmlnPy5jb25zdHJhaW50cyxcblx0XHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIgJiYgIWlzQ29tcGxleFR5cGUsXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiB0aGlzLl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyhjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLCBjb2x1bW5JbmZvKSxcblx0XHRcdFx0dW5pdDogY29sdW1uSW5mby51bml0LFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdHJlbGF0aXZlUGF0aDogY29sdW1uSW5mby5yZWxhdGl2ZVBhdGhcblx0XHRcdH07XG5cdFx0aWYgKHByb3BlcnR5SW5mby5leHBvcnRTZXR0aW5ncz8udGVtcGxhdGUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5jbGlwYm9hcmRTZXR0aW5ncyA9IHsgdGVtcGxhdGU6IHByb3BlcnR5SW5mby5leHBvcnRTZXR0aW5ncy50ZW1wbGF0ZSB9O1xuXHRcdFx0Ly8gaWYgSSBzZXQgdGhpcyBjbGlwQm9hcmRTZXR0aW5ncyB0aGUgY29weSBwcm92aWRlciBleHRyYWN0IHRoZSBkYXRhIGFjY29yZGluZyB0byB0aGUgdGVtcGxhdGUgaW4gdGhlIGh0bWwgcHJvcGVydHkgYW5kIGl0IGlzIHByb3Blcmx5IGNvcGllZCBpbiBleGNlbFxuXHRcdFx0Ly8gYnV0IHdoZW4gd2UgY29weSBlbHNld2hlcmUgd2Ugb25seSBnZXQgdGhlIHJhdyBkYXRhIGFuZCBub3QgdGhlIHRlbXBsYXRlZCBkYXRhXG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHZpc3VhbFNldHRpbmdzIG9ubHkgaWYgaXQgZXhpc3RzXG5cdFx0aWYgKGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MgJiYgT2JqZWN0LmtleXMoY29sdW1uSW5mby52aXN1YWxTZXR0aW5ncykubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gY29sdW1uSW5mby52aXN1YWxTZXR0aW5ncztcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uSW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gY29sdW1uSW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZTtcblx0XHR9XG5cblx0XHQvLyBNREMgZXhwZWN0cyAgJ3Byb3BlcnR5SW5mb3MnIG9ubHkgZm9yIGNvbXBsZXggcHJvcGVydGllcy5cblx0XHQvLyBBbiBlbXB0eSBhcnJheSB0aHJvd3MgdmFsaWRhdGlvbiBlcnJvciBhbmQgdW5kZWZpbmVkIHZhbHVlIGlzIHVuaGFuZGxlZC5cblx0XHRpZiAoY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zPy5sZW5ndGgpIHtcblx0XHRcdHByb3BlcnR5SW5mby5wcm9wZXJ0eUluZm9zID0gY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBBZGQgcHJvcGVydGllcyB3aGljaCBhcmUgc3VwcG9ydGVkIG9ubHkgYnkgc2ltcGxlIFByb3BlcnR5SW5mb3MuXG5cblx0XHRcdC8vZ2V0IHRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIGZvciB0aGUgY29sdW1uXG5cdFx0XHRjb25zdCBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0Q29udGV4dChjb2x1bW5JbmZvLmFubm90YXRpb25QYXRoKSxcblx0XHRcdFx0bWV0YU1vZGVsLmdldENvbnRleHQoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEodGFibGUsIFwibWV0YVBhdGhcIikhKVxuXHRcdFx0KTtcblx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHQvLyBUT0RPIHdpdGggdGhlIG5ldyBjb21wbGV4IHByb3BlcnR5IGluZm8sIGEgbG90IG9mIFwiRGVzY3JpcHRpb25cIiBmaWVsZHMgYXJlIGFkZGVkIGFzIGZpbHRlci9zb3J0IGZpZWxkc1xuXHRcdFx0cHJvcGVydHlJbmZvLnNvcnRhYmxlID0gY29sdW1uSW5mby5zb3J0YWJsZTtcblx0XHRcdGlmIChiSXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMocHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvKTtcblx0XHRcdH1cblx0XHRcdHByb3BlcnR5SW5mby5maWx0ZXJhYmxlID1cblx0XHRcdFx0Y29sdW1uSW5mby5maWx0ZXJhYmxlICE9PSBmYWxzZSAmJlxuXHRcdFx0XHQhIWJGaWx0ZXJhYmxlICYmXG5cdFx0XHRcdHRoaXMuX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShjb2x1bW5JbmZvLCBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRcdHByb3BlcnR5SW5mby5pc0tleSA9IGNvbHVtbkluZm8uaXNLZXk7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZ3JvdXBhYmxlID0gY29sdW1uSW5mby5pc0dyb3VwYWJsZTtcblx0XHRcdGlmIChjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCkge1xuXHRcdFx0XHR0aGlzLl9zZXRUZXh0QXJyYW5nZW1lbnRJbmZvKHByb3BlcnR5SW5mbywgY29sdW1uSW5mbywgdGFibGUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5SW5mby5pc0tleSkge1xuXHRcdFx0XHRwcm9wZXJ0eUluZm8uZXh0ZW5zaW9uID0ge1xuXHRcdFx0XHRcdC8vIE1EQyBuZWVkcyB0byBmaXggdGhpcywgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGZvciBhIG5vbiBBbmFseXRpY2FsIFRhYmxlXG5cdFx0XHRcdFx0dGVjaG5pY2FsbHlHcm91cGFibGU6IHRydWVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHByb3BlcnR5SW5mby5jYXNlU2Vuc2l0aXZlID0gY29sdW1uSW5mby5jYXNlU2Vuc2l0aXZlO1xuXHRcdFx0aWYgKGNvbHVtbkluZm8uYWRkaXRpb25hbExhYmVscykge1xuXHRcdFx0XHRwcm9wZXJ0eUluZm8uYWRkaXRpb25hbExhYmVscyA9IGNvbHVtbkluZm8uYWRkaXRpb25hbExhYmVscy5tYXAoKGFkZGl0aW9uYWxMYWJlbDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGdldExvY2FsaXplZFRleHQoYWRkaXRpb25hbExhYmVsLCBhcHBDb21wb25lbnQgfHwgdGFibGUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhVbml0KHRhYmxlLCBwcm9wZXJ0eUluZm8sIGNvbHVtbkluZm8udW5pdCwgY29sdW1uSW5mby51bml0VGV4dCwgY29sdW1uSW5mby50aW1lem9uZVRleHQpO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mbztcblx0fSxcblxuXHQvKipcblx0ICogRXh0ZW5kIHRoZSBleHBvcnQgc2V0dGluZ3MgYmFzZWQgb24gdGhlIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gZXhwb3J0U2V0dGluZ3MgVGhlIGV4cG9ydCBzZXR0aW5ncyB0byBiZSBleHRlbmRlZFxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY29sdW1uSW5mbyBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGV4dGVuZGVkIGV4cG9ydCBzZXR0aW5nc1xuXHQgKi9cblx0X3NldFByb3BlcnR5SW5mb0V4cG9ydFNldHRpbmdzOiBmdW5jdGlvbiAoXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgdW5kZWZpbmVkIHwgbnVsbCxcblx0XHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5cblx0KTogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCB1bmRlZmluZWQgfCBudWxsIHtcblx0XHRjb25zdCBleHBvcnRGb3JtYXQgPSB0aGlzLl9nZXRFeHBvcnRGb3JtYXQoY29sdW1uSW5mby50eXBlQ29uZmlnPy5jbGFzc05hbWUpO1xuXHRcdGlmIChleHBvcnRGb3JtYXQgJiYgZXhwb3J0U2V0dGluZ3MpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLmZvcm1hdCA9IGV4cG9ydEZvcm1hdDtcblx0XHR9XG5cdFx0cmV0dXJuIGV4cG9ydFNldHRpbmdzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0eXBlIGNvbmZpZyBmb3IgdGhlIGdpdmVuIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY29sdW1uSW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSBpc0NvbXBsZXhUeXBlIEluZGljYXRlcyBpZiB0aGUgZGF0YVR5cGUgaXMgY29tcGxleC5cblx0ICogQHJldHVybnMgVGhlIE1EQyB0eXBlIGNvbmZpZy5cblx0ICovXG5cdF9nZXRUeXBlQ29uZmlnKGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbiwgaXNDb21wbGV4VHlwZT86IGJvb2xlYW4pOiBUeXBlQ29uZmlnIHtcblx0XHRsZXQgdHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiKTsgLy8gTURDIGV4cGVjdHMgYWx3YXlzIGEgZGF0YVR5cGVcblx0XHRpZiAoY29sdW1uSW5mby50eXBlQ29uZmlnPy5jbGFzc05hbWUgJiYgaXNUeXBlRmlsdGVyYWJsZShjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lKSkge1xuXHRcdFx0dHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcblx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSxcblx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmICFpc0NvbXBsZXhUeXBlKSB7XG5cdFx0XHR0eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHlwZUNvbmZpZztcblx0fSxcblx0LyoqXG5cdCAqIFNldCB0aGUgdGV4dCBhcnJhbmdlbWVudCBpbmZvIGZvciB0aGUgY29sdW1uIGluZm8uXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gVGhlIGN1cnJlbnQgcHJvcGVydHlJbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIG1kYyB0YWJsZSBjb250cm9sLlxuXHQgKi9cblx0X3NldFRleHRBcnJhbmdlbWVudEluZm86IGZ1bmN0aW9uIChwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sIGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbiwgdGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb25Db2x1bW4gPSB0aGlzLmdldENvbHVtbnNGb3IodGFibGUpLmZpbmQoZnVuY3Rpb24gKG9Db2wpIHtcblx0XHRcdHJldHVybiBvQ29sLm5hbWUgPT09IGNvbHVtbkluZm8udGV4dEFycmFuZ2VtZW50Py50ZXh0UHJvcGVydHk7XG5cdFx0fSk7XG5cdFx0aWYgKGRlc2NyaXB0aW9uQ29sdW1uKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ubW9kZSA9IGNvbHVtbkluZm8udGV4dEFycmFuZ2VtZW50IS5tb2RlO1xuXHRcdFx0cHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHkgPSBjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aDtcblx0XHRcdHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5ID0gKGRlc2NyaXB0aW9uQ29sdW1uIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pLnJlbGF0aXZlUGF0aDtcblx0XHR9XG5cdFx0cHJvcGVydHlJbmZvLnRleHQgPSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudD8udGV4dFByb3BlcnR5O1xuXHR9LFxuXG5cdF91cGRhdGVBbmFseXRpY2FsUHJvcGVydHlJbmZvQXR0cmlidXRlcyhwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbywgY29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uKSB7XG5cdFx0aWYgKGNvbHVtbkluZm8uYWdncmVnYXRhYmxlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uYWdncmVnYXRhYmxlID0gY29sdW1uSW5mby5hZ2dyZWdhdGFibGU7XG5cdFx0fVxuXHRcdGlmIChjb2x1bW5JbmZvLmV4dGVuc2lvbikge1xuXHRcdFx0cHJvcGVydHlJbmZvLmV4dGVuc2lvbiA9IGNvbHVtbkluZm8uZXh0ZW5zaW9uO1xuXHRcdH1cblx0fSxcblxuXHRfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKGNvbHVtbkluZm86IENvbXB1dGVkVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSkge1xuXHRcdGNvbnN0IGxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLmxhYmVsLCB0YWJsZSk7IC8vIFRvZG86IFRvIGJlIHJlbW92ZWQgb25jZSBNREMgcHJvdmlkZXMgdHJhbnNsYXRpb24gc3VwcG9ydFxuXHRcdGNvbnN0IHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0a2V5OiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRsYWJlbDogbGFiZWwudG9TdHJpbmcoKSxcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRmaWx0ZXJhYmxlOiBmYWxzZSxcblx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdGdyb3VwYWJsZTogZmFsc2UsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdGNsaXBib2FyZFNldHRpbmdzOiBjb2x1bW5JbmZvLmNsaXBib2FyZFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcImNsaXBib2FyZFNldHRpbmdzXCJdXG5cdFx0fTtcblx0XHRpZiAoY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zICE9PSB1bmRlZmluZWQgJiYgY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zLmxlbmd0aCA+IDApIHtcblx0XHRcdHByb3BlcnR5SW5mby5wcm9wZXJ0eUluZm9zID0gY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zO1xuXHRcdH1cblx0XHRyZXR1cm4gcHJvcGVydHlJbmZvO1xuXHR9LFxuXG5cdF9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbzogZnVuY3Rpb24gKGNvbHVtbkluZm86IEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSwgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRsZXQgbGFiZWw7XG5cdFx0aWYgKGNvbHVtbkluZm8uaGVhZGVyKSB7XG5cdFx0XHRpZiAoY29sdW1uSW5mby5oZWFkZXIuc3RhcnRzV2l0aChcInttZXRhTW9kZWw+XCIpKSB7XG5cdFx0XHRcdGxhYmVsID0gTW9kZWxIZWxwZXIuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChjb2x1bW5JbmZvLmhlYWRlciwgdW5kZWZpbmVkLCAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsYWJlbCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby5oZWFkZXIsIGFwcENvbXBvbmVudCk7IC8vIFRvZG86IFRvIGJlIHJlbW92ZWQgb25jZSBNREMgcHJvdmlkZXMgdHJhbnNsYXRpb24gc3VwcG9ydFxuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0Z3JvdXBMYWJlbDogdW5kZWZpbmVkLFxuXHRcdFx0Z3JvdXA6IHVuZGVmaW5lZCxcblx0XHRcdGxhYmVsOiBsYWJlbCA/PyBcIlwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsXG5cdFx0XHR2aXNpYmxlOiBjb2x1bW5JbmZvLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIixcblx0XHRcdGV4cG9ydFNldHRpbmdzOiBjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0dmlzdWFsU2V0dGluZ3M6IGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MgYXMgUHJvcGVydHlJbmZvW1widmlzdWFsU2V0dGluZ3NcIl1cblx0XHR9O1xuXG5cdFx0Ly8gTURDIGV4cGVjdHMgJ3Byb3BlcnR5SW5mb3MnIG9ubHkgZm9yIGNvbXBsZXggcHJvcGVydGllcy5cblx0XHQvLyBBbiBlbXB0eSBhcnJheSB0aHJvd3MgdmFsaWRhdGlvbiBlcnJvciBhbmQgdW5kZWZpbmVkIHZhbHVlIGlzIHVuaGFuZGxlZC5cblx0XHRpZiAoY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zICYmIGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcy5sZW5ndGgpIHtcblx0XHRcdHByb3BlcnR5SW5mby5wcm9wZXJ0eUluZm9zID0gY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBBZGQgcHJvcGVydGllcyB3aGljaCBhcmUgc3VwcG9ydGVkIG9ubHkgYnkgc2ltcGxlIFByb3BlcnR5SW5mb3MuXG5cdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkluZm8ubmFtZTtcblx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGZhbHNlO1xuXHRcdFx0cHJvcGVydHlJbmZvLmZpbHRlcmFibGUgPSBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mbztcblx0fSxcblx0X2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcjogZnVuY3Rpb24gKG9Db2x1bW5JbmZvOiBUYWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIShcblx0XHRcdChvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zICYmIG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMuaGFzRHJhZnRJbmRpY2F0b3IpIHx8XG5cdFx0XHQob0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyAmJiBvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zLmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aClcblx0XHQpO1xuXHR9LFxuXHRfdXBkYXRlRHJhZnRJbmRpY2F0b3JNb2RlbDogZnVuY3Rpb24gKF9vVGFibGU6IFRhYmxlLCBfb0NvbHVtbkluZm86IFRhYmxlQ29sdW1uKTogdm9pZCB7XG5cdFx0Y29uc3QgYVZpc2libGVDb2x1bW5zID0gX29UYWJsZS5nZXRDb2x1bW5zKCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBfb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0Y29uc3Qgc0ludGVybmFsUGF0aCA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ICYmIG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAoYVZpc2libGVDb2x1bW5zICYmIG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGluZGV4IGluIGFWaXNpYmxlQ29sdW1ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dGhpcy5fYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yKF9vQ29sdW1uSW5mbykgJiZcblx0XHRcdFx0XHRfb0NvbHVtbkluZm8ubmFtZSA9PT0gYVZpc2libGVDb2x1bW5zW2luZGV4XS5nZXRQcm9wZXJ0eUtleSgpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlmIChvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBfb0NvbHVtbkluZm8ubmFtZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdF9mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHk6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0ZW50aXR5VHlwZVBhdGg6IHN0cmluZyxcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0XHQvLyB3aGVuIGZldGNoaW5nIHByb3BlcnRpZXMsIHRoaXMgYmluZGluZyBjb250ZXh0IGlzIG5lZWRlZCAtIHNvIGxldHMgY3JlYXRlIGl0IG9ubHkgb25jZSBhbmQgdXNlIGlmIGZvciBhbGwgcHJvcGVydGllcy9kYXRhLWZpZWxkcy9saW5lLWl0ZW1zXG5cdFx0Y29uc3QgYmluZGluZ1BhdGggPSBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKGVudGl0eVR5cGVQYXRoKTtcblx0XHRsZXQgZmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cdFx0Y29uc3Qgbm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoYmluZGluZ1BhdGgsIG1ldGFNb2RlbCkuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXM7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmdldENvbHVtbnNGb3IodGFibGUpKVxuXHRcdFx0LnRoZW4oKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pID0+IHtcblx0XHRcdFx0Ly8gRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgZG9lcyBub3Qgd29yayB2aWEgJ2VudGl0eVNldC8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9EcmFmdEFkbWluaXN0cmF0aXZlRGF0YSdcblx0XHRcdFx0aWYgKGNvbHVtbnMpIHtcblx0XHRcdFx0XHRsZXQgcHJvcGVydHlJbmZvO1xuXHRcdFx0XHRcdGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uSW5mbykgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlRHJhZnRJbmRpY2F0b3JNb2RlbCh0YWJsZSwgY29sdW1uSW5mbyk7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKGNvbHVtbkluZm8udHlwZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoUHJvcGVydHlJbmZvKG1ldGFNb2RlbCwgY29sdW1uSW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eUluZm8gJiYgIW5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmluY2x1ZGVzKChwcm9wZXJ0eUluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5uYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLm1heENvbmRpdGlvbnMgPSBEZWxlZ2F0ZVV0aWwuaXNNdWx0aVZhbHVlKHByb3BlcnR5SW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pID8gLTEgOiAxO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkNvbXB1dGVkXCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyhjb2x1bW5JbmZvIGFzIENvbXB1dGVkVGFibGVDb2x1bW4sIHRhYmxlKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIlNsb3RcIjpcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRlZmF1bHRcIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyhjb2x1bW5JbmZvIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIHRhYmxlLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5oYW5kbGVkIHN3aXRjaCBjYXNlICR7Y29sdW1uSW5mby50eXBlfWApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZmV0Y2hlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eUluZm8gYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0ZmV0Y2hlZFByb3BlcnRpZXMgPSB0aGlzLl91cGRhdGVQcm9wZXJ0eUluZm8odGFibGUsIGZldGNoZWRQcm9wZXJ0aWVzIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSk7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdHRhYmxlQVBJLnNldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoZmV0Y2hlZFByb3BlcnRpZXMgYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKTtcblx0XHRcdFx0ZmV0Y2hlZFByb3BlcnRpZXMgPSB0YWJsZUFQSS5nZXRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSB1cGRhdGluZyBmZXRjaGVkIHByb3BlcnRpZXM6ICR7ZXJyIGFzIHN0cmluZ31gKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBmZXRjaGVkUHJvcGVydGllcztcblx0XHRcdH0pO1xuXHR9LFxuXG5cdF9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRlbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcblx0KTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgZmV0Y2hlZFByb3BlcnRpZXMgPSB0YWJsZUFQSS5nZXRDYWNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0aWYgKGZldGNoZWRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmZXRjaGVkUHJvcGVydGllcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkodGFibGUsIGVudGl0eVR5cGVQYXRoLCBtZXRhTW9kZWwsIGFwcENvbXBvbmVudCkudGhlbihmdW5jdGlvbiAoXG5cdFx0XHRzdWJGZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW11cblx0XHQpIHtcblx0XHRcdHRhYmxlQVBJLnNldENhY2hlZFByb3BlcnR5SW5mb3Moc3ViRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRcdFx0cmV0dXJuIHN1YkZldGNoZWRQcm9wZXJ0aWVzO1xuXHRcdH0pO1xuXHR9LFxuXHRzZXROb0RhdGFJbmZvcm1hdGlvbjogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb246ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyk6IHZvaWQge1xuXHRcdGNvbnN0IG5vRGF0YUFnZ3JlZ2F0aW9uID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0aWYgKHR5cGVvZiBub0RhdGFBZ2dyZWdhdGlvbiAhPSBcInN0cmluZ1wiICYmIChub0RhdGFBZ2dyZWdhdGlvbiBhcyBDb250cm9sKT8uaXNBKFwic2FwLm0uSWxsdXN0cmF0ZWRNZXNzYWdlXCIpKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlID0gbm9EYXRhQWdncmVnYXRpb24gYXMgSWxsdXN0cmF0ZWRNZXNzYWdlO1xuXHRcdFx0Ly8gV2Ugb3ZlcnJpZGUgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSBJbGx1c3RyYXRlZE1lc3NhZ2Vcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0VGl0bGUoaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24udGl0bGUpO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXREZXNjcmlwdGlvbihpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbik7XG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldElsbHVzdHJhdGlvblR5cGUoaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uVHlwZSk7XG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldElsbHVzdHJhdGlvblNpemUoaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uU2l6ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGlsbHVzdHJhdGVkTWVzc2FnZSA9IG5ldyBJbGx1c3RyYXRlZE1lc3NhZ2Uoe1xuXHRcdFx0XHQuLi5pbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvblxuXHRcdFx0fSk7XG5cdFx0XHR0YWJsZS5zZXROb0RhdGEoaWxsdXN0cmF0ZWRNZXNzYWdlKTtcblx0XHR9XG5cdH0sXG5cblx0c2V0VGFibGVOb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2U6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8odGFibGUpO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJpbmRpbmdJbmZvLnBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpID8gYmluZGluZ0luZm8ucGF0aC5zdWJzdHJpbmcoMSkgOiBiaW5kaW5nSW5mby5wYXRoO1xuXHRcdGxldCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3M7XG5cblx0XHRjb25zdCBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycyA9IGZ1bmN0aW9uICgpOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3Mge1xuXHRcdFx0aWYgKHRhYmxlLmRhdGEoXCJoaWRkZW5GaWx0ZXJzXCIpIHx8IHRhYmxlLmdldFF1aWNrRmlsdGVyKCkpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX01VTFRJX1ZJRVdcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIpLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX1dJVEhfRklMVEVSXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Y29uc3QgZmlsdGVyQXNzb2NpYXRpb24gPSB0YWJsZS5nZXRGaWx0ZXIoKTtcblx0XHRjb25zdCBoYXNGaWx0ZXJPclNlYXJjaCA9IHRhYmxlRmlsdGVySW5mby5zZWFyY2ggfHwgdGFibGVGaWx0ZXJJbmZvLmZpbHRlcnM/Lmxlbmd0aDtcblx0XHRpZiAoZmlsdGVyQXNzb2NpYXRpb24gJiYgIS9CYXNpY1NlYXJjaCQvLnRlc3QoZmlsdGVyQXNzb2NpYXRpb24pKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBhIEZpbHRlckJhciBpcyBhc3NvY2lhdGVkIHRvIHRoZSBUYWJsZSAoYmFzaWMgc2VhcmNoIG9uIHRvb2xCYXIgaXMgZXhjbHVkZWQpXG5cdFx0XHRpZiAoaGFzRmlsdGVyT3JTZWFyY2gpIHtcblx0XHRcdFx0Ly8gY2hlY2sgaWYgdGFibGUgaGFzIGFueSBGaWx0ZXJiYXIgZmlsdGVycyBvciBwZXJzb25hbGl6YXRpb24gZmlsdGVyc1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaGFzRmlsdGVyT3JTZWFyY2gpIHtcblx0XHRcdC8vY2hlY2sgaWYgdGFibGUgaGFzIGFueSBwZXJzb25hbGl6YXRpb24gZmlsdGVyc1xuXHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9EQVRBXCIpLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fRklMVEVSU19OT19EQVRBX1RFWFRcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9EYXRhXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkuZ2V0Vmlld0RhdGEoKS5saXZlTW9kZSkge1xuXHRcdFx0aWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fRklMVEVSU19OT19EQVRBX1RFWFRcIiksXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5pbGx1c3RyYXRpb25TaXplID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXROb0RhdGFNZXNzYWdlTW9kZSgpO1xuXG5cdFx0aWYgKGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uU2l6ZSA9PT0gXCJ0ZXh0XCIpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnROb0RhdGEgPSB0YWJsZS5nZXROb0RhdGEoKTtcblx0XHRcdGlmICh0eXBlb2YgY3VycmVudE5vRGF0YSA9PT0gXCJzdHJpbmdcIiAmJiBjdXJyZW50Tm9EYXRhID09PSBpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdC8vIFdlIGRvbid0IGNoYW5nZSB0aGUgbm9EYXRhIGFnZ3JlZ2F0aW9uIHVubmVjZXNzYXJ5LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0YWJsZS5zZXROb0RhdGEoaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0Tm9EYXRhSW5mb3JtYXRpb24odGFibGUsIGlsbHVzdHJhdGVkSW5mb3JtYXRpb24pO1xuXHRcdH1cblx0fSxcblxuXHRoYW5kbGVUYWJsZURhdGFSZWNlaXZlZDogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBvQmluZGluZyA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpLFxuXHRcdFx0YkRhdGFSZWNlaXZlZEF0dGFjaGVkID0gb0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIpO1xuXG5cdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiAhYkRhdGFSZWNlaXZlZEF0dGFjaGVkKSB7XG5cdFx0XHRvQmluZGluZy5hdHRhY2hEYXRhUmVjZWl2ZWQoKCkgPT4ge1xuXHRcdFx0XHQvLyBhcyB0aGUgZGF0YVJlY2VpdmVkIGV2ZW50IGlzIGZpcmVkIG11bHRpcGxlIHRpbWVzLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBldmVudCBpcyBvbmx5IGhhbmRsZWQgb25jZVxuXHRcdFx0XHRpZiAoIW9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIsIHRydWUpO1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHQvLyBSZWZyZXNoIHRoZSBzZWxlY3RlZCBjb250ZXh0cyB0byB0cmlnZ2VyIHJlLWNhbGN1bGF0aW9uIG9mIGVuYWJsZWQgc3RhdGUgb2YgYWN0aW9ucy5cblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgW10pO1xuXHRcdFx0XHRcdFx0Y29uc3QgYVNlbGVjdGVkQ29udGV4dHMgPSBvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIGFTZWxlY3RlZENvbnRleHRzKTtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSBvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gSlNPTi5wYXJzZSh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwKTtcblx0XHRcdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIGFTZWxlY3RlZENvbnRleHRzLCBcInRhYmxlXCIpO1xuXHRcdFx0XHRcdFx0Ly8gUmVmcmVzaCBlbmFibGVtZW50IG9mIGRlbGV0ZSBidXR0b25cblx0XHRcdFx0XHRcdERlbGV0ZUhlbHBlci51cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIGFTZWxlY3RlZENvbnRleHRzKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9UYWJsZUFQSSA9IG9UYWJsZSA/IG9UYWJsZS5nZXRQYXJlbnQoKSA6IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAob1RhYmxlQVBJKSB7XG5cdFx0XHRcdFx0XHRcdChvVGFibGVBUEkgYXMgVGFibGVBUEkpLnNldFVwRW1wdHlSb3dzKG9UYWJsZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVBdmFpbGFibGVDYXJkcyhvVGFibGUpO1xuXHRcdFx0XHRcdH0sIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIsIHRydWUpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2V0IHRoZSBvcHRpbWlzdGljIGJhdGNoIHByb21pc2UgZm9yIHRoZSBlbmFibGVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIFRhYmxlQVBJXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hQcm9taXNlRm9yTW9kZWw6IGZ1bmN0aW9uIChjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgdGFibGVBUEk6IFRhYmxlQVBJKTogdm9pZCB7XG5cdFx0Y29uc3QgbW9kZWwgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKCk7XG5cdFx0aWYgKG1vZGVsKSB7XG5cdFx0XHR0YWJsZUFQSS5zZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZShuZXcgUHJvbWlzZUtlZXBlcjxib29sZWFuPigpKTtcblx0XHRcdHRoaXMuc2V0T3B0aW1pc3RpY0JhdGNoRm9yTW9kZWwoY29udHJvbGxlciwgbW9kZWwsIHRhYmxlQVBJKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEVuYWJsZSB0aGUgb3B0aW1pc3RpYyBiYXRjaCBtb2RlIGlmIGF2YWlsYWJsZS5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqL1xuXHRlbmFibGVPcHRpbWlzdGljQmF0Y2hNb2RlOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlID1cblx0XHRcdHRhYmxlICYmIFRhYmxlVXRpbHMuaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCh0YWJsZSwgY29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIEZpbHRlckJhcik7XG5cdFx0KHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSgpPy5yZXNvbHZlKCFmaWx0ZXJzUHJvcGVydGllc0FzUG90ZW50aWFsbHlTZW5zaXRpdmVEYXRhT3JEYXRlVHlwZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldHRlciBmb3IgdGhlIG9wdGltaXN0aWMgYmF0Y2ggZW5hYmxlciBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIGRhdGFNb2RlbCBUaGUgT0RhdGEgTW9kZWxcblx0ICogQHBhcmFtIHRhYmxlQVBJIFRoZSBUYWJsZUFQSVxuXHQgKiBAc2VlIHtzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbCNzZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyfSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIGRhdGFNb2RlbDogT0RhdGFNb2RlbCwgdGFibGVBUEk6IFRhYmxlQVBJKTogdm9pZCB7XG5cdFx0Y29uc3QgaXNPcHRpbWlzdGljQmF0Y2hIYXNUb0JlRW5hYmxlZCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpLmlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk7XG5cdFx0aWYgKGRhdGFNb2RlbC5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyKCkgPT09IG51bGwgJiYgIXRhYmxlQVBJLmlzT3B0aW1pc3RpY0JhdGNoRGlzYWJsZWQoKSAmJiBpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkKSB7XG5cdFx0XHRjb25zdCBvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlciA9IHRhYmxlQVBJLmdldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlKCk7XG5cdFx0XHRkYXRhTW9kZWwuc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcihmdW5jdGlvbiAoKTogUHJvbWlzZTxib29sZWFuPiB8IHVuZGVmaW5lZCB7XG5cdFx0XHRcdHJldHVybiBvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlcj8ucHJvbWlzZTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRyZWJpbmQ6IGFzeW5jIGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvQmluZGluZ0luZm86IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb1RhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGJJc1N1c3BlbmRlZCA9IG9UYWJsZUFQST8uZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpO1xuXHRcdG9UYWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0XHRpZiAoIWJJc1N1c3BlbmRlZCkge1xuXHRcdFx0VGFibGVSdW50aW1lLmNsZWFyU2VsZWN0aW9uKG9UYWJsZSk7XG5cdFx0XHRUYWJsZURlbGVnYXRlQmFzZS5yZWJpbmQuYXBwbHkodGhpcywgW29UYWJsZSwgb0JpbmRpbmdJbmZvXSk7XG5cdFx0XHRUYWJsZVV0aWxzLm9uVGFibGVCb3VuZChvVGFibGUpO1xuXHRcdFx0cmV0dXJuIFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0LnRoZW4oKHRhYmxlOiBUYWJsZSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMuaGFuZGxlVGFibGVEYXRhUmVjZWl2ZWQodGFibGUsIHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGhlIHJlbGV2YW50IG1ldGFkYXRhIGZvciB0aGUgdGFibGUgYW5kIHJldHVybnMgcHJvcGVydHkgaW5mbyBhcnJheS5cblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRoZSBNREN0YWJsZVxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBwcm9wZXJ0eSBpbmZvXG5cdCAqL1xuXHRmZXRjaFByb3BlcnRpZXM6IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5mZXRjaE1vZGVsKHRhYmxlKVxuXHRcdFx0LnRoZW4oYXN5bmMgKG1vZGVsKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4gPT4ge1xuXHRcdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGFibGUpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkoXG5cdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGE8c3RyaW5nPih0YWJsZSwgXCJlbnRpdHlUeXBlXCIpID8/IFwiXCIsXG5cdFx0XHRcdFx0bW9kZWwuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKHByb3BlcnRpZXMpID0+IHtcblx0XHRcdFx0KHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgQ29udGV4dCk/LnNldFByb3BlcnR5KFwidGFibGVQcm9wZXJ0aWVzQXZhaWxhYmxlXCIsIHRydWUpO1xuXHRcdFx0XHRyZXR1cm4gcHJvcGVydGllcztcblx0XHRcdH0pO1xuXHR9LFxuXG5cdHByZUluaXQ6IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gKFRhYmxlRGVsZWdhdGVCYXNlLnByZUluaXQgYXMgKHRhYmxlOiBUYWJsZSkgPT4gUHJvbWlzZTx2b2lkPikuYXBwbHkodGhpcywgW3RhYmxlXSkudGhlbigoKSA9PiB7XG5cdFx0XHQvKipcblx0XHRcdCAqIFNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93IHRvIGF2b2lkIGluaGVyaXRpbmdcblx0XHRcdCAqIHRoZSB3cm9uZyBjb250ZXh0IGFuZCByZXF1ZXN0aW5nIHRoZSB0YWJsZSBjb2x1bW5zIG9uIHRoZSBwYXJlbnQgZW50aXR5XG5cdFx0XHQgKiBTZXQgdGhlIGNvcnJlY3QgYmluZGluZyBjb250ZXh0IGluIE9iamVjdFBhZ2VDb250cm9sbGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdygpXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGZhc3RDcmVhdGlvblJvdyA9IHRhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAoZmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdGZhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChudWxsIGFzIHVua25vd24gYXMgQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZUJpbmRpbmdJbmZvOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEkgPSBuZXcgQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJKGJpbmRpbmdJbmZvKTtcblx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNFbmFibGVkXCIsIHRydWUpO1xuXHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmdJbmZvLmFwcGx5KHRoaXMsIFt0YWJsZSwgYmluZGluZ0luZm9dKTtcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5faGFuZGxlU29ydGVyc09uQ3VycmVuY2llc09yVW9NKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLnNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLl9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQodGFibGUsIGJpbmRpbmdJbmZvKTtcblxuXHRcdFx0dGFibGUuZ2V0UGFyZW50KCk/LmZpcmVFdmVudChcImJlZm9yZVJlYmluZFRhYmxlXCIsIHsgY29sbGVjdGlvbkJpbmRpbmdJbmZvOiBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEkgfSk7XG5cdFx0XHRjb25zdCBhdHRhY2hlZEV2ZW50cyA9IGNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSS5nZXRBdHRhY2hlZEV2ZW50cygpO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBXZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93IHRvIGF2b2lkIGl0IGluaGVyaXRpbmdcblx0XHRcdCAqIHRoZSB3cm9uZyBjb250ZXh0IGFuZCByZXF1ZXN0aW5nIHRoZSB0YWJsZSBjb2x1bW5zIGZvciB0aGUgcGFyZW50IGVudGl0eVxuXHRcdFx0ICogVGhlIGNvcnJlY3QgYmluZGluZyBjb250ZXh0IGlzIHNldCBpbiBPYmplY3RQYWdlQ29udHJvbGxlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coKVxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBjb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXHRcdFx0aWYgKHRhYmxlLmdldENyZWF0aW9uUm93KCk/LmdldEJpbmRpbmdDb250ZXh0KCkgPT09IG51bGwgJiYgYmluZGluZ0luZm8ucGF0aCAmJiBjb250ZXh0KSB7XG5cdFx0XHRcdFRhYmxlSGVscGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdyhcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cblx0XHRcdFx0XHR0YWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGgsXG5cdFx0XHRcdFx0Y29udGV4dCBhcyB2NENvbnRleHQsXG5cdFx0XHRcdFx0dGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsLFxuXHRcdFx0XHRcdFByb21pc2UucmVzb2x2ZSgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHR0YWJsZUFQSS5zZXRBdHRhY2hFdmVudHMoYXR0YWNoZWRFdmVudHMpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHVwZGF0aW5nIHRoZSBiaW5kaW5nIGluZm9cIiwgZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fSxcblxuXHRfaGFuZGxlU29ydGVyc09uQ3VycmVuY2llc09yVW9NOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3Qgc29ydGVyczogU29ydGVyW10gfCB1bmRlZmluZWQgPSBiaW5kaW5nSW5mby5zb3J0ZXI7XG5cdFx0Y29uc3QgbmV3U29ydGVyc1RvQmVBcHBsaWVkOiBTb3J0ZXJbXSA9IFtdO1xuXHRcdGlmIChzb3J0ZXJzPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRjb25zdCB0YWJsZVByb3BlcnRpZXMgPSB0YWJsZUFQSS5nZXRDYWNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNvcnRlciBvZiBzb3J0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlUHJvcGVydHkgPSB0YWJsZVByb3BlcnRpZXM/LmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5wYXRoID09PSBzb3J0ZXIuZ2V0UGF0aCgpKTtcblx0XHRcdFx0aWYgKHRhYmxlUHJvcGVydHk/LnVuaXQpIHtcblx0XHRcdFx0XHRjb25zdCB1bml0UHJvcGVydHkgPSB0YWJsZVByb3BlcnRpZXM/LmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5rZXkgPT09IHRhYmxlUHJvcGVydHk/LnVuaXQpO1xuXHRcdFx0XHRcdGNvbnN0IHVuaXRTb3J0ZXJBdmFpbGFibGUgPSB1bml0UHJvcGVydHk/LnBhdGggJiYgc29ydGVycy5zb21lKChzb3J0KSA9PiBzb3J0LmdldFBhdGgoKSA9PT0gdW5pdFByb3BlcnR5LnBhdGgpO1xuXHRcdFx0XHRcdGlmICghdW5pdFNvcnRlckF2YWlsYWJsZSAmJiB1bml0UHJvcGVydHk/LnNvcnRhYmxlICE9PSBmYWxzZSAmJiB1bml0UHJvcGVydHk/LnBhdGgpIHtcblx0XHRcdFx0XHRcdG5ld1NvcnRlcnNUb0JlQXBwbGllZC5wdXNoKG5ldyBTb3J0ZXIodW5pdFByb3BlcnR5LnBhdGgsIGZhbHNlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG5ld1NvcnRlcnNUb0JlQXBwbGllZC5wdXNoKHNvcnRlcik7XG5cdFx0XHR9XG5cdFx0XHRiaW5kaW5nSW5mby5zb3J0ZXIgPSBuZXdTb3J0ZXJzVG9CZUFwcGxpZWQ7XG5cdFx0fVxuXHR9LFxuXG5cdF9oYW5kbGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBlbnRpdHlUeXBlUGF0aCA9IGJpbmRpbmdJbmZvLnBhdGggKyBcIi9cIjtcblx0XHRjb25zdCBmaWx0ZXJzID0gYmluZGluZ0luZm8uZmlsdGVycz8uZ2V0RmlsdGVycygpO1xuXHRcdGlmIChmaWx0ZXJzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFRhYmxlVXRpbHMudXBkYXRlRmlsdGVyc0ZvckV4dGVybmFsSUQobWV0YU1vZGVsLCBmaWx0ZXJzIGFzIHVua25vd24gYXMgQ29uZGl0aW9uT2JqZWN0W10sIGVudGl0eVR5cGVQYXRoKTtcblx0XHR9XG5cdH0sXG5cblx0X2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBvQmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRhYmxlQVBJPy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdGlmIChjb250cm9sbGVyPy5yZWNvbW1lbmRhdGlvbnMuaXNSZWNvbW1lbmRhdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRcdGNvbnN0IHRhYmxlRGVmID0gdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0XHRjb25zdCByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMgPSBhcHBDb21wb25lbnRcblx0XHRcdFx0LmdldFNpZGVFZmZlY3RzU2VydmljZSgpXG5cdFx0XHRcdC5nZXRSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyh0YWJsZURlZi5hbm5vdGF0aW9uLmVudGl0eVR5cGVOYW1lKTtcblx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMgJiYgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzLmxlbmd0aCA+IDAgJiYgb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlbGVjdCA9IG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kc2VsZWN0Py5jb25jYXQoXCIsXCIsIHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcy5qb2luKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBjYXJkcyB3aGVuIHRoZSBiaW5kaW5nIGlzIHJlZnJlc2hlZC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICovXG5cdF91cGRhdGVBdmFpbGFibGVDYXJkczogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0aWYgKHRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpLmdldFZpZXdEYXRhKCk/LmNvbnZlcnRlclR5cGUgPT09IFwiTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0YWJsZUFQST8uZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRjb25zdCBjYXJkczogV3JhcHBlZENhcmRbXSA9IFtdO1xuXHRcdFx0YXdhaXQgdGFibGVBUEkuY29sbGVjdEF2YWlsYWJsZUNhcmRzKGNhcmRzKTtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpb25NYW5hZ2VyID0gbmV3IENvbGxhYm9yYXRpb25NYW5hZ2VyKCk7XG5cdFx0XHRjb25zdCBjYXJkT2JqZWN0ID0gY29sbGFib3JhdGlvbk1hbmFnZXIudXBkYXRlQ2FyZHMoY2FyZHMpO1xuXHRcdFx0Y29uc3QgcGFyZW50QXBwSWQgPSBhcHBDb21wb25lbnQuZ2V0SWQoKTtcblx0XHRcdGFwcENvbXBvbmVudC5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKS5hZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIoY2FyZE9iamVjdCwgcGFyZW50QXBwSWQpO1xuXHRcdFx0YXBwQ29tcG9uZW50LmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpLnNoYXJlQXZhaWxhYmxlQ2FyZHMoKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoZSBob29rIGltcGxlbWVudGVkIGJ5IE1EQyB0aGF0IHdlIGNhbiBvdmVycmlkZS5cblx0ICogVGhpcyBhbGxvd3MgdXMgdG8gZGVmaW5lIHByb3BlcnRpZXMgdG8gYmUgcmVxdWVzdGVkIGluIHRoZSBNREMgdGFibGUgKE1haW4gY2FzZSBpcyBmb3IgdGhlIGFuYWx5dGljYWwgdGFibGUpLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIG1kYyB0YWJsZSBjb250cm9sLlxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lIHRvIGJlIHJlcXVlc3RlZC5cblx0ICovXG5cdGdldEluUmVzdWx0UHJvcGVydHlLZXlzOiBmdW5jdGlvbiAodGFibGU6IE1EQ1RhYmxlKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0aWYgKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0XHRjb25zdCBhbGxLa2V5c1JlcXVlc3RlZCA9IHRoaXMuY2hlY2tBbGxLZXlzQXJlUmVxdWVzdGVkKHRhYmxlQVBJKTtcblx0XHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0Ly8gaWYgYSByb3dwcmVzcyBpcyBvdmVycmlkZGVuLCB3ZSAgc2hvdWxkIGVuYWJsZSB0aGUgbmF2aWdhdGlvbiBhdCB0aGUgbm9kZSBsZXZlbFxuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJpc05vZGVMZXZlbE5hdmlnYWJsZVwiLCB0YWJsZUFQSS5vdmVycmlkZVJvd1ByZXNzID8gdHJ1ZSA6IGFsbEtrZXlzUmVxdWVzdGVkKTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdE9iamVjdC5rZXlzKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdClcblx0XHRcdFx0XHQvLyBmb3IgYW5hbHl0aWMgdGFibGVzIHdpdGggYWdncmVnYXRpb25PbkxlYWZMZXZlbCB3ZSBzaG91bGQgbm90IHJlcXVlc3QgdGhlIHNlbWFudGljS2V5IGV4cGVjdGVkIHdoZW4gYWxsIGtleXMgYXJlIHJlcXVlc3RlZCAtPiAgaXQgd2lsbCBwZXJtaXRzIHRvIG5hdmlnYXRlIGZyb20gYSBub2RlIGxldmVsIHdoZW4gc2VtYW50aWNLZXkgYXJlIGVuYWJsZWRcblx0XHRcdFx0XHQvLyByZXN0cmljdGlvbiBhcmUgYWxzbyBleGNsdWRlZCBhcyB3ZSBjYW5ub3QgZGVzdGluZ3Vpc2ggYmV0d2VlbiBhIG5vZGUgYW5kIGEgYWdncmVnYXRpb24gbGV2ZWxcblxuXHRcdFx0XHRcdC5maWx0ZXIoKGZpZWxkTmFtZTogc3RyaW5nKSA9PlxuXHRcdFx0XHRcdFx0IWFsbEtrZXlzUmVxdWVzdGVkXG5cdFx0XHRcdFx0XHRcdD8gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0W2ZpZWxkTmFtZV0uc29tZShcblx0XHRcdFx0XHRcdFx0XHRcdChvcmlnaW4pID0+IG9yaWdpbiAhPT0gXCJyZXN0cmljdGlvblwiICYmIG9yaWdpbiAhPT0gXCJzZW1hbnRpY0tleVwiXG5cdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHQ6IHRydWVcblx0XHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gT2JqZWN0LmtleXModGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0ID8/IHt9KTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYWxsIGtleXMoKSBleGNlcHRlZCBJc0FjdGl2ZUVudGl0eSkgYXJlIHJlcXVlc3RlZCBpbiB0aGUgdGFibGUuXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgdGFibGUgQVBJXG5cdCAqIEByZXR1cm5zICBUcnVlIGlmIGFsbCBrZXlzIGFyZSByZXF1ZXN0ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0Y2hlY2tBbGxLZXlzQXJlUmVxdWVzdGVkOiBmdW5jdGlvbiAodGFibGVBUEk6IFRhYmxlQVBJKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0YWJsZUFQSS5nZXRDb250ZW50KCk7XG5cdFx0Y29uc3QgYWxsQ29sdW1ucyA9IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnMgYXMgKFRhYmxlQ29sdW1uICYgeyBpc0tleTogYm9vbGVhbjsgcmVsYXRpdmVQYXRoOiBzdHJpbmcgfSlbXTtcblx0XHRjb25zdCBrZXlQcm9wZXJ0eU5hbWVzID0gYWxsQ29sdW1uc1xuXHRcdFx0LmZpbHRlcigoYykgPT4gYy5pc0tleSAmJiBjLnJlbGF0aXZlUGF0aCAmJiBjLnJlbGF0aXZlUGF0aCAhPT0gXCJJc0FjdGl2ZUVudGl0eVwiKVxuXHRcdFx0Lm1hcCgoYykgPT4gYy5yZWxhdGl2ZVBhdGgpO1xuXG5cdFx0Y29uc3QgZGlzcGxheWVkQ29sdW1ucyA9IHRhYmxlXG5cdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHQubWFwKChjb2x1bW4pID0+IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBjb2x1bW4uZ2V0UHJvcGVydHlLZXkoKSkpO1xuXG5cdFx0Ly8gU3RvcmUgYWxsIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBieSBkaXNwbGF5ZWQgY29sdW1ucyBpbiBhIFNldFxuXHRcdGNvbnN0IHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0ZnVuY3Rpb24gcHJvY2Vzc0NvbHVtbihjb2w6IEFubm90YXRpb25UYWJsZUNvbHVtbik6IHZvaWQge1xuXHRcdFx0Ly8gQWRkIHRoZSBwcm9wZXJ0eSBuYW1lIGZyb20gY29sdW1uIGl0c2VsZiBpZiBpdCdzIG5vdCBhIGNvbXBsZXggcHJvcGVydHlJbmZvXG5cdFx0XHRpZiAoY29sLnJlbGF0aXZlUGF0aCAmJiBjb2wucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzLmFkZChjb2wucmVsYXRpdmVQYXRoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRoZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBieSB0aGUgY29sdW1uXG5cdFx0XHRjb2wuZXh0ZW5zaW9uPy5hZGRpdGlvbmFsUHJvcGVydGllcz8uZm9yRWFjaCgoYWRkaXRpb25hbENvbHVtbk5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgYWRkaXRpb25hbENvbHVtbiA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBhZGRpdGlvbmFsQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGlmIChhZGRpdGlvbmFsQ29sdW1uPy5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdFx0XHRyZWZlcmVuY2VkUHJvcGVydHlQYXRocy5hZGQoYWRkaXRpb25hbENvbHVtbi5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0ZGlzcGxheWVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRcdGlmICghY29sdW1uKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIFByb2Nlc3MgdGhlIGNvbHVtbiBpdHNlbGZcblx0XHRcdHByb2Nlc3NDb2x1bW4oY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cblx0XHRcdC8vIFByb2Nlc3MgdGhlIGNvbHVtbnMgcmVmZXJlbmNlZCBieSB0aGUgY29sdW1uXG5cdFx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcz8uZm9yRWFjaCgocmVsYXRlZENvbHVtbk5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZENvbHVtbiA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSByZWxhdGVkQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGlmIChyZWxhdGVkQ29sdW1uKSB7XG5cdFx0XHRcdFx0cHJvY2Vzc0NvbHVtbihyZWxhdGVkQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGtleVByb3BlcnR5TmFtZXMuZXZlcnkoKHByb3BOYW1lKSA9PiBwcm9wTmFtZSAmJiByZWZlcmVuY2VkUHJvcGVydHlQYXRocy5oYXMocHJvcE5hbWUpKTtcblx0fSxcblx0LyoqXG5cdCAqIEdldHMgdGhlIHNlYXJjaCBxdWVyeSBmb3IgYW5hbHl0aWNhbCBhbmQgbm9uIGFuYWx5dGljYWwgb2RhdGFMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGJpbmRpbmcgVGhlIG9EYXRhTGlzdEJpbmRpbmcgaW5zdGFuY2UuXG5cdCAqIEByZXR1cm5zIFRoZSBzZWFyY2ggcXVlcnkgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0U2VhcmNoUXVlcnk6IGZ1bmN0aW9uIChiaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbiA9IGJpbmRpbmcuZ2V0QWdncmVnYXRpb24/LigpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChhZ2dyZWdhdGlvbj8uc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIEZvciBhbmFseXRpY2FsIHRhYmxlcywgdGhlIHNlYXJjaCBxdWVyeSBpcyBzdG9yZWQgaW4gdGhlIGFnZ3JlZ2F0aW9uXG5cdFx0XHRyZXR1cm4gYWdncmVnYXRpb24uc2VhcmNoIGFzIHN0cmluZztcblx0XHR9XG5cdFx0Ly8gSWYgbm90IGZvdW5kIGluIGFnZ3JlZ2F0aW9uLCBjaGVjayB0aGUgcXVlcnkgb3B0aW9uc1xuXHRcdHJldHVybiBiaW5kaW5nLmdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzKCkuJHNlYXJjaDtcblx0fSxcblx0dXBkYXRlQmluZGluZzogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgYmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGJJc1N1c3BlbmRlZCA9IHRhYmxlQVBJPy5nZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIik7XG5cdFx0aWYgKCFiSXNTdXNwZW5kZWQpIHtcblx0XHRcdC8vIGlmIHRoZSByb3dCaW5kaW5nSW5mbyBoYXMgYSAkJGdldEtlZXBBbGl2ZUNvbnRleHQgcGFyYW1ldGVyIHdlIG5lZWQgdG8gY2hlY2sgaXQgaXMgdGhlIG9ubHkgVGFibGUgd2l0aCBzdWNoIGFcblx0XHRcdC8vIHBhcmFtZXRlciBmb3IgdGhlIGNvbGxlY3Rpb25NZXRhUGF0aFxuXHRcdFx0aWYgKGJpbmRpbmdJbmZvLnBhcmFtZXRlcnM/LiQkZ2V0S2VlcEFsaXZlQ29udGV4dCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4odGFibGUsIFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikgPz8gXCJcIjtcblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRhYmxlLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0XHRjb25zdCBrZXB0QWxpdmVMaXN0cyA9IGludGVybmFsTW9kZWw/LmdldE9iamVjdChcIi9rZXB0QWxpdmVMaXN0c1wiKSA/PyB7fTtcblx0XHRcdFx0aWYgKCFrZXB0QWxpdmVMaXN0c1tjb2xsZWN0aW9uUGF0aF0pIHtcblx0XHRcdFx0XHRrZXB0QWxpdmVMaXN0c1tjb2xsZWN0aW9uUGF0aF0gPSB0YWJsZS5nZXRJZCgpO1xuXHRcdFx0XHRcdGludGVybmFsTW9kZWw/LnNldFByb3BlcnR5KFwiL2tlcHRBbGl2ZUxpc3RzXCIsIGtlcHRBbGl2ZUxpc3RzKTtcblx0XHRcdFx0fSBlbHNlIGlmIChrZXB0QWxpdmVMaXN0c1tjb2xsZWN0aW9uUGF0aF0gIT09IHRhYmxlLmdldElkKCkpIHtcblx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGdldEtlZXBBbGl2ZUNvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bGV0IG5lZWRNYW51YWxSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5ID0gXCJwZW5kaW5nTWFudWFsQmluZGluZ1VwZGF0ZVwiO1xuXHRcdFx0Y29uc3QgcGVuZGluZ01hbnVhbFVwZGF0ZSA9IGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5KSBhcyBib29sZWFuO1xuXHRcdFx0Y29uc3QgbmV3U29ydGVycyA9IEpTT04uc3RyaW5naWZ5KGJpbmRpbmdJbmZvLnNvcnRlciA/PyBbXSk7XG5cblx0XHRcdGlmIChiaW5kaW5nKSB7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBNYW51YWwgcmVmcmVzaCBpZiBmaWx0ZXJzIGFyZSBub3QgY2hhbmdlZCBieSBiaW5kaW5nLnJlZnJlc2goKSBzaW5jZSB1cGRhdGluZyB0aGUgYmluZGluZ0luZm9cblx0XHRcdFx0ICogaXMgbm90IGVub3VnaCB0byB0cmlnZ2VyIGEgYmF0Y2ggcmVxdWVzdC5cblx0XHRcdFx0ICogUmVtb3ZpbmcgY29sdW1ucyBjcmVhdGVzIG9uZSBiYXRjaCByZXF1ZXN0IHRoYXQgd2FzIG5vdCBleGVjdXRlZCBiZWZvcmVcblx0XHRcdFx0ICovXG5cdFx0XHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldz8uZ2V0Vmlld0RhdGEoKSBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncztcblx0XHRcdFx0Y29uc3Qgb2xkRmlsdGVycyA9IGJpbmRpbmcuZ2V0RmlsdGVycyhcIkFwcGxpY2F0aW9uXCIpO1xuXHRcdFx0XHRjb25zdCBwcmV2aW91c1NvcnRlcnMgPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShQUkVWSU9VU19TT1JURVJTKSA/PyBcIltdXCI7XG5cblx0XHRcdFx0Y29uc3QgZmlsdGVyTm90Q2hhbmdlZCA9XG5cdFx0XHRcdFx0KChiaW5kaW5nSW5mby5maWx0ZXJzID09PSBudWxsICYmIG9sZEZpbHRlcnMubGVuZ3RoID09PSAwKSB8fCAvLyBvbiBhbmFseXRpY2FsIHRhYmxlcywgdGhlIGZpbHRlcnMgYXJlIHNldCB0byBudWxsIHdoZW4gbm8gZmlsdGVyc1xuXHRcdFx0XHRcdFx0ZGVlcEVxdWFsKGJpbmRpbmdJbmZvLmZpbHRlcnMsIG9sZEZpbHRlcnNbMF0pKSAmJlxuXHRcdFx0XHRcdG5ld1NvcnRlcnMgPT09IHByZXZpb3VzU29ydGVycyAmJlxuXHRcdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGggPT09IGJpbmRpbmcuZ2V0UGF0aCgpICYmIC8vIFRoZSBwYXRoIGNhbiBiZSBjaGFuZ2VkIGluIGNhc2Ugb2YgYSBwYXJhbWV0cml6ZWQgZW50aXR5XG5cdFx0XHRcdFx0dGhpcy5nZXRTZWFyY2hRdWVyeShiaW5kaW5nKSA9PT0gYmluZGluZ0luZm8/LnBhcmFtZXRlcnM/LiRzZWFyY2g7XG5cdFx0XHRcdGNvbnN0IExSTXVsdGlWaWV3RW5hYmxlZCA9ICEhdmlld0RhdGEudmlld3M7XG5cblx0XHRcdFx0bmVlZE1hbnVhbFJlZnJlc2ggPVxuXHRcdFx0XHRcdGZpbHRlck5vdENoYW5nZWQgJiZcblx0XHRcdFx0XHQoaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoU0VBUkNIX0hBU19CRUVOX0ZJUkVEKSB8fCAvLyBjaGVjayBpZiB0aGUgc2VhcmNoIGhhcyBiZWVuIHRyaWdnZXJlZFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVEKSB8fCAvLyBjaGVjayBpZiBhIGNvbHVtbiBoYXMgYmVlbiBhZGRlZFxuXHRcdFx0XHRcdFx0TFJNdWx0aVZpZXdFbmFibGVkKSAmJiAvLyBpZiB0aGUgbXVsdGkgdmlldyBpcyBlbmFibGVkIHRoZSByZXF1ZXN0IHNob3VsZCBiZSByZWZyZXNoZWQgYXMgd2UgZG9uJ3Qga25vd24gaWYgdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlIGlzIG91dGRhdGVkIGR1ZSB0byBhbiBhY3Rpb24gb24gYW5vdGhlciB0YWJsZVxuXHRcdFx0XHRcdCFwZW5kaW5nTWFudWFsVXBkYXRlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ2xlYW51cCBncm91cENvbmRpdGlvbnMgYW5kIGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgaWYgdGhleSBkb24ndCBtYWtlIHNlbnNlXG5cdFx0XHRpZiAodGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuZW5hYmxlQW5hbHl0aWNzICE9PSB0cnVlKSB7XG5cdFx0XHRcdC8vIEFnZ3JlZ2F0ZSBjb25kaXRpb25zIG5ldmVyIG1ha2Ugc2Vuc2Ugb3V0c2lkZSBvZiBhbiBhbmFseXRpY2FsIHRhYmxlXG5cdFx0XHRcdHRhYmxlLnNldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoKTtcblxuXHRcdFx0XHQvLyBHcm91cCBjb25kaXRpb25zIGRvbid0IG1ha2Ugc2Vuc2UgaW4gYSBUcmVlIG9yIEdyaWQgdGFibGVcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJHcmlkVGFibGVcIiB8fFxuXHRcdFx0XHRcdHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0YWJsZS5zZXRHcm91cENvbmRpdGlvbnMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0VGFibGVEZWxlZ2F0ZUJhc2UudXBkYXRlQmluZGluZy5hcHBseSh0aGlzLCBbdGFibGUsIGJpbmRpbmdJbmZvLCBiaW5kaW5nXSk7XG5cdFx0XHQvLyB3ZSBzdG9yZSB0aGUgdGFibGUgYmluZGluZyBpbmZvIHRoYXQgd2FzIHVzZWQgdG8gYmluZCB0aGUgdGFibGUgaW4gdGhlIHRhYmxlIEFQSVxuXHRcdFx0Ly8gdGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIHRoZSBjYWxsIHRvIFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcgb3RoZXIgd2lzZSB3ZSBkb24ndCBnZXQgdGhlIGFnZ3JlZ2F0ZSBwYXJhbWV0ZXJzXG5cdFx0XHQvLyBvdGhlcndpc2UgdGhlcmUgaXMgbm8gd2F5IHRvIHJldHJpZXZlIHNvcnRlcnMgYWRkZWQgaW4gdGhlIG9uQmVmb3JlUmViaW5kVGFibGUgZXZlbnRcblx0XHRcdHRhYmxlQVBJLnNldFRhYmxlQmluZGluZ0luZm8oYmluZGluZ0luZm8pO1xuXHRcdFx0Ly8gd2UgbWFrZSB0aGUgY2FsbCB0byB1cGRhdGUgdGhlIGRvd25sb2FkIHVybCBidXQgZG8gbm90IGF3YWl0IGl0XG5cdFx0XHR0YWJsZUFQSS5zZXREb3dubG9hZFVybCgpO1xuXG5cdFx0XHR0YWJsZS5maXJlRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiKTtcblx0XHRcdGlmIChuZWVkTWFudWFsUmVmcmVzaCAmJiB0YWJsZS5nZXRGaWx0ZXIoKSAmJiBiaW5kaW5nKSB7XG5cdFx0XHRcdGJpbmRpbmdcblx0XHRcdFx0XHQucmVxdWVzdFJlZnJlc2goYmluZGluZy5nZXRHcm91cElkKCkpXG5cdFx0XHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkobWFudWFsVXBkYXRlUHJvcGVydHlLZXksIGZhbHNlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWZyZXNoaW5nIHRoZSB0YWJsZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkobWFudWFsVXBkYXRlUHJvcGVydHlLZXksIHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoU0VBUkNIX0hBU19CRUVOX0ZJUkVELCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShDT0xVTU5fSEFTX0JFRU5fQURERUQsIGZhbHNlKTtcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFBSRVZJT1VTX1NPUlRFUlMsIG5ld1NvcnRlcnMpO1xuXG5cdFx0XHQvL2ZvciBUcmVldGFibGUsIGl0J3MgbmVjZXNzYXJ5IHRvIGNsZWFyIHRoZSBwYXN0YWJsZUNvbnRleHRzIHNpbmNlIHRoZSBiaW5kaW5nIGRlc3Ryb3lzIHByZXZpb3VzIGNvbnRleHRzLlxuXHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcInBhc3RhYmxlQ29udGV4dHNcIiwgW10pO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBhdHRhY2hlZEV2ZW50cyA9IHRhYmxlQVBJLnN0b3JlZEV2ZW50cyA/PyBbXTtcblx0XHRcdGF0dGFjaGVkRXZlbnRzLmZvckVhY2goKHsgZXZlbnRJZCwgY2FsbGJhY2ssIGxpc3RlbmVyLCBkYXRhIH0pID0+IHtcblx0XHRcdFx0dGFibGUuZ2V0Um93QmluZGluZygpPy5hdHRhY2hFdmVudChldmVudElkLCBkYXRhLCBjYWxsYmFjaywgbGlzdGVuZXIpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRhYmxlQVBJPy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBiSXNTdXNwZW5kZWQpO1xuXHR9LFxuXG5cdF9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGU6IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKTogQ29sbGVjdGlvbkJpbmRpbmdJbmZvIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCByb3dCaW5kaW5nSW5mbyA9IHRhYmxlQVBJLmdldFRhYmxlVGVtcGxhdGVCaW5kaW5nSW5mbygpO1xuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSBmYWxzZTtcblx0XHRpZiAoXG5cdFx0XHRiaW5kaW5nQ29udGV4dCA9PT0gdW5kZWZpbmVkICYmXG5cdFx0XHRvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJ1aVwiKT8uZ2V0UHJvcGVydHkoXCJpc0VkaXRhYmxlXCIpID09PSBmYWxzZSAmJlxuXHRcdFx0b1RhYmxlLmdldE1vZGVsKFwidmlld0RhdGFcIik/LmdldFByb3BlcnR5KFwiL2lzSW5saW5lRWRpdEVuYWJsZWRcIilcblx0XHQpIHtcblx0XHRcdHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQoYmluZGluZ0NvbnRleHQgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpPy5nZXRCaW5kaW5nKCkuZ2V0VXBkYXRlR3JvdXBJZCgpID09IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRFxuXHRcdCkge1xuXHRcdFx0dGFibGVDYW5CZUluSW5saW5lRWRpdCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRhYmxlQ2FuQmVJbklubGluZUVkaXQpIHtcblx0XHRcdHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMgPz89IHt9O1xuXHRcdFx0cm93QmluZGluZ0luZm8ucGFyYW1ldGVycy4kJHVwZGF0ZUdyb3VwSWQgPSBDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJvd0JpbmRpbmdJbmZvO1xuXHR9LFxuXHRfaW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbzogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9CaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0T2JqZWN0LmFzc2lnbihvQmluZGluZ0luZm8sIHRoaXMuX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZShvVGFibGUpKTtcblx0XHQvKipcblx0XHQgKiBCaW5kaW5nIGluZm8gbWlnaHQgYmUgc3VzcGVuZGVkIGF0IHRoZSBiZWdpbm5pbmcgd2hlbiB0aGUgZmlyc3QgYmluZFJvd3MgaXMgY2FsbGVkOlxuXHRcdCAqIFRvIGF2b2lkIGR1cGxpY2F0ZSByZXF1ZXN0cyBidXQgc3RpbGwgaGF2ZSBhIGJpbmRpbmcgdG8gY3JlYXRlIG5ldyBlbnRyaWVzLlx0XHRcdFx0ICpcblx0XHQgKiBBZnRlciB0aGUgaW5pdGlhbCBiaW5kaW5nIHN0ZXAsIGZvbGxvdyB1cCBiaW5kaW5ncyBzaG91bGQgbm8gbG9uZ2VyIGJlIHN1c3BlbmRlZC5cblx0XHQgKi9cblx0XHRpZiAob1RhYmxlLmdldFJvd0JpbmRpbmcoKSkge1xuXHRcdFx0b0JpbmRpbmdJbmZvLnN1c3BlbmRlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHQvLyBUaGUgcHJldmlvdXNseSBhZGRlZCBoYW5kbGVyIGZvciB0aGUgZXZlbnQgJ2RhdGFSZWNlaXZlZCcgaXMgbm90IGFueW1vcmUgdGhlcmVcblx0XHQvLyBzaW5jZSB0aGUgYmluZGluZ0luZm8gaXMgcmVjcmVhdGVkIGZyb20gc2NyYXRjaCBzbyB3ZSBuZWVkIHRvIHNldCB0aGUgZmxhZyB0byBmYWxzZSBpbiBvcmRlclxuXHRcdC8vIHRvIGFnYWluIGFkZCB0aGUgaGFuZGxlciBvbiB0aGlzIGV2ZW50IGlmIG5lZWRlZFxuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIsIGZhbHNlKTtcblx0XHR9XG5cblx0XHRsZXQgb0ZpbHRlcjtcblx0XHRjb25zdCBvRmlsdGVySW5mbyA9IFRhYmxlVXRpbHMuZ2V0QWxsRmlsdGVySW5mbyhvVGFibGUpO1xuXHRcdC8vIFByZXBhcmUgYmluZGluZyBpbmZvIHdpdGggZmlsdGVyL3NlYXJjaCBwYXJhbWV0ZXJzXG5cdFx0aWYgKG9GaWx0ZXJJbmZvLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b0ZpbHRlciA9IG5ldyBGaWx0ZXIoeyBmaWx0ZXJzOiBvRmlsdGVySW5mby5maWx0ZXJzLCBhbmQ6IHRydWUgfSk7XG5cdFx0fVxuXHRcdGlmIChvRmlsdGVySW5mby5iaW5kaW5nUGF0aCkge1xuXHRcdFx0b0JpbmRpbmdJbmZvLnBhdGggPSBvRmlsdGVySW5mby5iaW5kaW5nUGF0aDtcblx0XHR9XG5cblx0XHRjb25zdCBvRGF0YVN0YXRlSW5kaWNhdG9yID0gb1RhYmxlLmdldERhdGFTdGF0ZUluZGljYXRvcigpO1xuXHRcdGlmIChvRGF0YVN0YXRlSW5kaWNhdG9yICYmIG9EYXRhU3RhdGVJbmRpY2F0b3IuaXNGaWx0ZXJpbmcoKSkge1xuXHRcdFx0Ly8gSW5jbHVkZSBmaWx0ZXJzIG9uIG1lc3NhZ2VTdHJpcFxuXHRcdFx0aWYgKChvQmluZGluZ0luZm8uZmlsdGVycyBhcyB1bmtub3duIGFzIEZpbHRlcltdKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogKG9CaW5kaW5nSW5mby5maWx0ZXJzIGFzIHVua25vd24gYXMgRmlsdGVyW10pLmNvbmNhdChvRmlsdGVySW5mby5maWx0ZXJzKSwgYW5kOiB0cnVlIH0pO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5KG9CaW5kaW5nSW5mbywgb0ZpbHRlckluZm8sIG9GaWx0ZXIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5KG9CaW5kaW5nSW5mbywgb0ZpbHRlckluZm8sIG9GaWx0ZXIpO1xuXHRcdH1cblxuXHRcdHRoaXMuYWRkRmlsdGVyT25BY3RpdmVFbnRpdGllcyhvVGFibGUsIG9CaW5kaW5nSW5mbyk7XG5cdH0sXG5cblx0dXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnk6IGZ1bmN0aW9uIChiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvLCBmaWx0ZXJJbmZvOiBJbnRlcm5hbEJpbmRpbmdJbmZvLCBmaWx0ZXI/OiBGaWx0ZXIpIHtcblx0XHRiaW5kaW5nSW5mby5maWx0ZXJzID0gZmlsdGVyO1xuXHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMgPz89IHt9O1xuXHRcdGlmIChmaWx0ZXJJbmZvLnNlYXJjaCkge1xuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybShmaWx0ZXJJbmZvLnNlYXJjaCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBJZiBzcGVjaWZpZWQgaW4gdGhlIHBheWxvYWQsIGFkZHMgYSBmaWx0ZXIgdG8gZGlzcGxheSBvbmx5IGFjdGl2ZSBlbnRpdGllcy5cblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEBwYXJhbSBiaW5kaW5nSW5mb1xuXHQgKi9cblx0YWRkRmlsdGVyT25BY3RpdmVFbnRpdGllczogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHBheWxvYWQgPSB0YWJsZS5nZXRQYXlsb2FkKCkgYXMgeyBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzPzogYm9vbGVhbiB9O1xuXG5cdFx0aWYgKHBheWxvYWQ/LmZpbHRlck9uQWN0aXZlRW50aXRpZXMgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGZpbHRlck9uQWN0aXZlID0gbmV3IEZpbHRlcih7IHBhdGg6IFwiSXNBY3RpdmVFbnRpdHlcIiwgb3BlcmF0b3I6IFwiRVFcIiwgdmFsdWUxOiB0cnVlIH0pO1xuXHRcdFx0aWYgKGJpbmRpbmdJbmZvLmZpbHRlcnMpIHtcblx0XHRcdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IG5ldyBGaWx0ZXIoeyBmaWx0ZXJzOiBbZmlsdGVyT25BY3RpdmUsIGJpbmRpbmdJbmZvLmZpbHRlcnNdLCBhbmQ6IHRydWUgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRiaW5kaW5nSW5mby5maWx0ZXJzID0gZmlsdGVyT25BY3RpdmU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgdGVtcGxhdGUgZnJvbSB0aGUgZnJhZ21lbnQgb2YgYSBzbG90IGNvbHVtbi5cblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGN1c3RvbSB0YWJsZSBjb2x1bW5cblx0ICogQHBhcmFtIHZpZXcgVGhlIGN1cnJlbnQgdmlld1xuXHQgKiBAcGFyYW0gbW9kaWZpZXIgVGhlIGNvbnRyb2wgdHJlZSBtb2RpZmllclxuXHQgKiBAcGFyYW0gdGFibGVJZCBUaGUgaWQgb2YgdGhlIHVuZGVybHlpbmcgdGFibGVcblx0ICogQHJldHVybnMgVGhlIGxvYWRlZCBmcmFnbWVudFxuXHQgKi9cblx0X3RlbXBsYXRlU2xvdENvbHVtbkZyYWdtZW50OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0Y29sdW1uSW5mbzogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPixcblx0XHR2aWV3OiBWaWV3LFxuXHRcdG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIHwgSnNDb250cm9sVHJlZU1vZGlmaWVyLFxuXHRcdHRhYmxlSWQ6IHN0cmluZ1xuXHQpOiBQcm9taXNlPG51bGwgfCBDb250cm9sIHwgQ29udHJvbFtdIHwgRWxlbWVudD4ge1xuXHRcdGNvbnN0IHNsb3RDb2x1bW5zWE1MID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhcblx0XHRcdGpzeC5yZW5kZXJBc1hNTCgoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRTbG90Q29sdW1uKHRhYmxlSWQsIGNvbHVtbkluZm8sIGZhbHNlKSBhcyB1bmtub3duIGFzIHN0cmluZztcblx0XHRcdH0pLFxuXHRcdFx0XCJ0ZXh0L3htbFwiXG5cdFx0KTtcblx0XHRpZiAoIXNsb3RDb2x1bW5zWE1MKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBzbG90WE1MID0gc2xvdENvbHVtbnNYTUwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzbG90XCIpWzBdO1xuXG5cdFx0aWYgKGNvbHVtbkluZm8udGVtcGxhdGUpIHtcblx0XHRcdGlmIChzbG90WE1MKSB7XG5cdFx0XHRcdGNvbnN0IG9UZW1wbGF0ZSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoY29sdW1uSW5mby50ZW1wbGF0ZSBhcyBzdHJpbmcsIFwidGV4dC94bWxcIik7XG5cdFx0XHRcdGlmIChvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQgJiYgb1RlbXBsYXRlLmZpcnN0RWxlbWVudENoaWxkLm5vZGVOYW1lICE9PSBcImh0bWxcIikge1xuXHRcdFx0XHRcdHNsb3RYTUwucmVwbGFjZVdpdGgob1RlbXBsYXRlLmZpcnN0RWxlbWVudENoaWxkKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzbG90WE1MLnJlbW92ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy5lcnJvcihgUGxlYXNlIHByb3ZpZGUgY29udGVudCBpbnNpZGUgdGhpcyBCdWlsZGluZyBCbG9jayBDb2x1bW46ICR7Y29sdW1uSW5mby5oZWFkZXJ9YCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCByZXN1bHRYTUwgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdHNsb3RDb2x1bW5zWE1MLmZpcnN0RWxlbWVudENoaWxkLFxuXHRcdFx0eyBtb2RlbHM6IHt9IH0sXG5cdFx0XHQodmlldy5nZXRDb250cm9sbGVyKCkuZ2V0T3duZXJDb21wb25lbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD4pLmdldFByZXByb2Nlc3NvckNvbnRleHQoKVxuXHRcdCk7XG5cdFx0aWYgKG1vZGlmaWVyPy50YXJnZXRzICE9PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0cmV0dXJuIHJlc3VsdFhNTC5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHR9XG5cdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0dHlwZTogXCJYTUxcIixcblx0XHRcdGRlZmluaXRpb246IHJlc3VsdFhNTCxcblx0XHRcdGNvbnRyb2xsZXI6IHZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0fSkgYXMgUHJvbWlzZTxDb250cm9sIHwgQ29udHJvbFtdPjtcblx0fSxcblxuXHRfZ2V0RXhwb3J0Rm9ybWF0OiBmdW5jdGlvbiAoZGF0YVR5cGU/OiBzdHJpbmcpIHtcblx0XHRzd2l0Y2ggKGRhdGFUeXBlKSB7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsRGF0ZWZyb21KU0RhdGUoKTtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsRGF0ZVRpbWVmcm9tSlNEYXRlVGltZSgpO1xuXHRcdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsVGltZWZyb21KU1RpbWUoKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRWSFJlbGV2YW50RmllbGRzOiBmdW5jdGlvbiAob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNNZXRhZGF0YVBhdGg6IHN0cmluZywgc0JpbmRpbmdQYXRoPzogc3RyaW5nKTogc3RyaW5nW10ge1xuXHRcdGxldCBhRmllbGRzOiBzdHJpbmdbXSA9IFtdLFxuXHRcdFx0b0RhdGFGaWVsZERhdGEgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzTWV0YWRhdGFQYXRoKTtcblxuXHRcdGlmIChvRGF0YUZpZWxkRGF0YS4ka2luZCAmJiBvRGF0YUZpZWxkRGF0YS4ka2luZCA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0XHRvRGF0YUZpZWxkRGF0YSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgKTtcblx0XHRcdHNNZXRhZGF0YVBhdGggPSBgJHtzTWV0YWRhdGFQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0YDtcblx0XHR9XG5cdFx0c3dpdGNoIChvRGF0YUZpZWxkRGF0YS4kVHlwZSkge1xuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIjpcblx0XHRcdFx0aWYgKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGhgKS5pbmNsdWRlcyhcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBcIikpIHtcblx0XHRcdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGFgKS5mb3JFYWNoKChvVmFsdWU6IHVua25vd24sIGlJbmRleDogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0XHRhRmllbGRzID0gYUZpZWxkcy5jb25jYXQoXG5cdFx0XHRcdFx0XHRcdHRoaXMuX2dldFZIUmVsZXZhbnRGaWVsZHMob01ldGFNb2RlbCwgYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhLyR7aUluZGV4fWApXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhVcmxcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEFjdGlvblwiOlxuXHRcdFx0XHRhRmllbGRzLnB1c2gob01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVmFsdWUvJFBhdGhgKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdC8vIHByb3BlcnR5XG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIG1ha2Ugc3VyZSBWSCByZWxldmFudCBmaWVsZCBwYXRoIGRvIG5vdCBjb250YWluIHRoZSBiaW5kaW5ncGF0aFxuXHRcdFx0XHRpZiAoc0JpbmRpbmdQYXRoICYmIHNNZXRhZGF0YVBhdGguaW5kZXhPZihzQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRcdFx0YUZpZWxkcy5wdXNoKHNNZXRhZGF0YVBhdGguc3Vic3RyaW5nKHNCaW5kaW5nUGF0aC5sZW5ndGggKyAxKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0YUZpZWxkcy5wdXNoKENvbW1vbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChzTWV0YWRhdGFQYXRoLCB0cnVlKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gYUZpZWxkcztcblx0fSxcblx0X3NldERyYWZ0SW5kaWNhdG9yT25WaXNpYmxlQ29sdW1uOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgYUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sIG9Db2x1bW5JbmZvPzogVGFibGVDb2x1bW4pIHtcblx0XHRjb25zdCBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGlmICghb0ludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc0ludGVybmFsUGF0aCA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvciA9IGFDb2x1bW5zLmZpbHRlcigob0NvbHVtbjogVGFibGVDb2x1bW4pID0+IHtcblx0XHRcdHJldHVybiB0aGlzLl9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3Iob0NvbHVtbik7XG5cdFx0fSk7XG5cdFx0Y29uc3QgYVZpc2libGVDb2x1bW5zID0gb1RhYmxlLmdldENvbHVtbnMoKTtcblx0XHRsZXQgc0FkZFZpc2libGVDb2x1bW5OYW1lLCBzVmlzaWJsZUNvbHVtbk5hbWUsIGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQsIHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yO1xuXHRcdGZvciAoY29uc3QgaSBpbiBhVmlzaWJsZUNvbHVtbnMpIHtcblx0XHRcdHNWaXNpYmxlQ29sdW1uTmFtZSA9IGFWaXNpYmxlQ29sdW1uc1tpXS5nZXRQcm9wZXJ0eUtleSgpO1xuXHRcdFx0Zm9yIChjb25zdCBqIGluIGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yID0gYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3Jbal0ubmFtZTtcblx0XHRcdFx0aWYgKHNWaXNpYmxlQ29sdW1uTmFtZSA9PT0gc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0XHRiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0ID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0NvbHVtbkluZm8gJiYgb0NvbHVtbkluZm8ubmFtZSA9PT0gc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0XHRzQWRkVmlzaWJsZUNvbHVtbk5hbWUgPSBvQ29sdW1uSW5mby5uYW1lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCkge1xuXHRcdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBzVmlzaWJsZUNvbHVtbk5hbWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0ICYmIHNBZGRWaXNpYmxlQ29sdW1uTmFtZSkge1xuXHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgc0FkZFZpc2libGVDb2x1bW5OYW1lKTtcblx0XHR9XG5cdH0sXG5cdHJlbW92ZUl0ZW06IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvVGFibGU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdG9Qcm9wZXJ0eUluZm9OYW1lOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRtUHJvcGVydHlCYWc6IHsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXI7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IH1cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0bGV0IGRvUmVtb3ZlSXRlbSA9IHRydWU7XG5cdFx0aWYgKCFvUHJvcGVydHlJbmZvTmFtZSkge1xuXHRcdFx0Ly8gMS4gQXBwbGljYXRpb24gcmVtb3ZlZCB0aGUgcHJvcGVydHkgZnJvbSB0aGVpciBkYXRhIG1vZGVsXG5cdFx0XHQvLyAyLiBhZGRJdGVtIGZhaWxlZCBiZWZvcmUgcmV2ZXJ0RGF0YSBjcmVhdGVkXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRvUmVtb3ZlSXRlbSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9Nb2RpZmllciA9IG1Qcm9wZXJ0eUJhZy5tb2RpZmllcjtcblx0XHRjb25zdCBzRGF0YVByb3BlcnR5ID0gYXdhaXQgb01vZGlmaWVyLmdldFByb3BlcnR5PHN0cmluZz4ob1Byb3BlcnR5SW5mb05hbWUsIFwiZGF0YVByb3BlcnR5XCIpO1xuXHRcdGlmIChzRGF0YVByb3BlcnR5ICYmIHNEYXRhUHJvcGVydHkuaW5jbHVkZXMgJiYgc0RhdGFQcm9wZXJ0eS5pbmNsdWRlcyhcIklubGluZVhNTFwiKSkge1xuXHRcdFx0b01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9UYWJsZSwgXCJkZXBlbmRlbnRzXCIsIG9Qcm9wZXJ0eUluZm9OYW1lKTtcblx0XHRcdGRvUmVtb3ZlSXRlbSA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoKG9UYWJsZSBhcyBVSTVFbGVtZW50KS5pc0EgJiYgb01vZGlmaWVyLnRhcmdldHMgPT09IFwianNDb250cm9sVHJlZVwiKSB7XG5cdFx0XHR0aGlzLl9zZXREcmFmdEluZGljYXRvclN0YXR1cyhvTW9kaWZpZXIsIG9UYWJsZSwgdGhpcy5nZXRDb2x1bW5zRm9yKG9UYWJsZSBhcyBUYWJsZSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRvUmVtb3ZlSXRlbSk7XG5cdH0sXG5cdF9nZXRNZXRhTW9kZWw6IGZ1bmN0aW9uIChtUHJvcGVydHlCYWc6IHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfSkge1xuXHRcdHJldHVybiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0fSxcblx0X3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzOiBmdW5jdGlvbiAoXG5cdFx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyLFxuXHRcdG9UYWJsZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0YUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdFx0b0NvbHVtbkluZm8/OiBUYWJsZUNvbHVtblxuXHQpIHtcblx0XHRpZiAob01vZGlmaWVyLnRhcmdldHMgPT09IFwianNDb250cm9sVHJlZVwiKSB7XG5cdFx0XHR0aGlzLl9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbihvVGFibGUgYXMgVGFibGUsIGFDb2x1bW5zLCBvQ29sdW1uSW5mbyk7XG5cdFx0fVxuXHR9LFxuXHRfZ2V0R3JvdXBJZDogZnVuY3Rpb24gKHNSZXRyaWV2ZWRHcm91cElkOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gc1JldHJpZXZlZEdyb3VwSWQgfHwgdW5kZWZpbmVkO1xuXHR9LFxuXHRfaW5zZXJ0QWdncmVnYXRpb246IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvVmFsdWVIZWxwOiBFbGVtZW50IHwgVUk1RWxlbWVudCB8IEVsZW1lbnRbXSB8IFVJNUVsZW1lbnRbXSxcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIsXG5cdFx0b1RhYmxlOiBFbGVtZW50IHwgVUk1RWxlbWVudFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAob1ZhbHVlSGVscCkge1xuXHRcdFx0cmV0dXJuIG9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvVGFibGUsIFwiZGVwZW5kZW50c1wiLCBvVmFsdWVIZWxwLCAwKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBJbnZva2VkIHdoZW4gYSBjb2x1bW4gaXMgYWRkZWQgdXNpbmcgdGhlIHRhYmxlIHBlcnNvbmFsaXphdGlvbiBkaWFsb2cuXG5cdCAqIEBwYXJhbSBvVGFibGUgSW5zdGFuY2Ugb2YgdGFibGUgY29udHJvbFxuXHQgKiBAcGFyYW0gc1Byb3BlcnR5SW5mb05hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoZSBjb2x1bW4gaXMgYWRkZWRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZyBJbnN0YW5jZSBvZiBwcm9wZXJ0eSBiYWcgZnJvbSB0aGUgZmxleGliaWxpdHkgQVBJXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcubW9kaWZpZXIgSW5zdGFuY2Ugb2YgdGhlIGNvbnRyb2wgdHJlZSBtb2RpZmllclxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCBJbnN0YW5jZSBvZiB0aGUgYXBwIGNvbXBvbmVudFxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLnZpZXcgSW5zdGFuY2Ugb2YgdGhlIHZpZXdcblx0ICogQHJldHVybnMgT25jZSByZXNvbHZlZCwgYSB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbiBpcyByZXR1cm5lZFxuXHQgKi9cblx0YWRkSXRlbTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBFbGVtZW50IHwgVUk1RWxlbWVudCxcblx0XHRwcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdFx0bVByb3BlcnR5QmFnOiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgdmlldz86IEZFVmlldyB9XG5cdCkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLl9nZXRNZXRhTW9kZWwobVByb3BlcnR5QmFnKSxcblx0XHRcdG9Nb2RpZmllciA9IG1Qcm9wZXJ0eUJhZy5tb2RpZmllcixcblx0XHRcdHNUYWJsZUlkID0gb01vZGlmaWVyLmdldElkKHRhYmxlKSxcblx0XHRcdGFDb2x1bW5zID0gKHRhYmxlIGFzIFVJNUVsZW1lbnQpLmlzQSA/IHRoaXMuZ2V0Q29sdW1uc0Zvcih0YWJsZSBhcyBUYWJsZSkgOiBudWxsLFxuXHRcdFx0dGFibGVBUEkgPSAodGFibGUgYXMgVGFibGUpLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICghYUNvbHVtbnMpIHtcblx0XHRcdC8vIFdlIHJldHVybiBudWxsIGhlcmUgYmVjYXVzZSBldmVyeXRoaW5nIHNob3VsZCBhcHBseSBhdCBydW50aW1lXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSBhQ29sdW1ucy5maW5kKGZ1bmN0aW9uIChvQ29sdW1uKSB7XG5cdFx0XHRyZXR1cm4gb0NvbHVtbi5uYW1lID09PSBwcm9wZXJ0eUluZm9OYW1lO1xuXHRcdH0pO1xuXHRcdGlmICghY29sdW1uSW5mbykge1xuXHRcdFx0TG9nLmVycm9yKGAke3Byb3BlcnR5SW5mb05hbWV9IG5vdCBmb3VuZCB3aGlsZSBhZGRpbmcgY29sdW1uYCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRpZiAoY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdExvZy53YXJuaW5nKGBDb2x1bW4gZm9yICR7cHJvcGVydHlJbmZvTmFtZX0gbm90IGFkZGVkIGJlY2F1c2UgaXQncyBoaWRkZW5gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSAodGFibGUgYXMgVGFibGUpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVELCB0cnVlKTtcblx0XHR0aGlzLl9zZXREcmFmdEluZGljYXRvclN0YXR1cyhvTW9kaWZpZXIsIHRhYmxlLCBhQ29sdW1ucywgY29sdW1uSW5mbyk7XG5cdFx0Y29uc3Qgc1BhdGggPSBhd2FpdCBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KHRhYmxlLCBcIm1ldGFQYXRoXCIsIG9Nb2RpZmllcik7XG5cdFx0Y29uc3Qgb1RhYmxlQ29udGV4dDogQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSE7XG5cdFx0Ly8gSWYgdmlldyBpcyBub3QgcHJvdmlkZWQgdHJ5IHRvIGdldCBpdCBieSBhY2Nlc3NpbmcgdG8gdGhlIHBhcmVudGFsIGhpZXJhcmNoeVxuXHRcdC8vIElmIGl0IGRvZXNuJ3Qgd29yayAodGFibGUgaW50byBhbiB1bmF0dGFjaGVkIE9QIHNlY3Rpb24pIGdldCB0aGUgdmlldyB2aWEgdGhlIEFwcENvbXBvbmVudFxuXHRcdGNvbnN0IHZpZXcgPVxuXHRcdFx0bVByb3BlcnR5QmFnLnZpZXcgfHxcblx0XHRcdENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUgYXMgVUk1RWxlbWVudCkgfHxcblx0XHRcdChtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ID8gQ29tbW9uVXRpbHMuZ2V0Q3VycmVudFBhZ2VWaWV3KG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQpIDogdW5kZWZpbmVkKTtcblxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiRGVmYXVsdFwiKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQ3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgYXJlIG5vdCBzdXBwb3J0ZWQgd2hlbiB1c2luZyBhIHRhYmxlIGJ1aWxkaW5nIGJsb2NrLlwiKTtcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIlNsb3RcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3RlbXBsYXRlU2xvdENvbHVtbkZyYWdtZW50KGNvbHVtbkluZm8gYXMgQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiwgdmlldywgb01vZGlmaWVyLCBzVGFibGVJZCk7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJDb21wdXRlZFwiKSB7XG5cdFx0XHRjb25zdCBlbmFibGVBbmFseXRpY3MgPSAoKHRhYmxlIGFzIE1EQ1RhYmxlKS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuZW5hYmxlQW5hbHl0aWNzO1xuXHRcdFx0cmV0dXJuIGdldENvbXB1dGVkQ29sdW1uKHNUYWJsZUlkLCBjb2x1bW5JbmZvIGFzIENvbXB1dGVkVGFibGVDb2x1bW4sIG9UYWJsZUNvbnRleHQsIGVuYWJsZUFuYWx5dGljcyk7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbC1iYWNrXG5cdFx0aWYgKCFvTWV0YU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblxuXHRcdGxldCBwcm9wZXJ0eUluZm9zID0gdGFibGVBUEkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGlmICghcHJvcGVydHlJbmZvcy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eUluZm9zIGFyZSBub3QgZmV0Y2hlZCB5ZXQsIHdlIG5lZWQgdG8gZmV0Y2ggdGhlbVxuXHRcdFx0Ly8gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSB0YWJsZSBpcyBub3QgY3JlYXRlZCB5ZXRcblx0XHRcdGF3YWl0IHRoaXMuZmV0Y2hQcm9wZXJ0aWVzKHRhYmxlIGFzIE1EQ1RhYmxlKTtcblx0XHRcdHByb3BlcnR5SW5mb3MgPSB0YWJsZUFQSS5nZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0fVxuXHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IHByb3BlcnR5SW5mb3MuZmluZChmdW5jdGlvbiAocHJvcEluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRcdHJldHVybiBwcm9wSW5mby5uYW1lID09PSBwcm9wZXJ0eUluZm9OYW1lO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgb1Byb3BlcnR5Q29udGV4dDogQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQocHJvcGVydHlJbmZvIS5hbm5vdGF0aW9uUGF0aCkhO1xuXG5cdFx0Y29uc3QgZm5UZW1wbGF0ZUZyYWdtZW50ID0gYXN5bmMgKFxuXHRcdFx0b0luUHJvcGVydHlJbmZvOiB1bmtub3duLFxuXHRcdFx0b1ZpZXc6IEZFVmlld1xuXHRcdCk6IFByb21pc2U8VUk1RWxlbWVudCB8IEVsZW1lbnQgfCBVSTVFbGVtZW50W10gfCBFbGVtZW50W10+ID0+IHtcblx0XHRcdGxldCBiRGlzcGxheU1vZGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgc1RhYmxlVHlwZUN1c3RvbURhdGE6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmcgfCBib29sZWFuPih0YWJsZSwgXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiLCBvTW9kaWZpZXIpLFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KHRhYmxlLCBcInRhYmxlVHlwZVwiLCBvTW9kaWZpZXIpLFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KHRhYmxlLCBcImNyZWF0aW9uTW9kZVwiLCBvTW9kaWZpZXIpXG5cdFx0XHRdKS50aGVuKGFzeW5jIChhQ3VzdG9tRGF0YTogKHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpW10pID0+IHtcblx0XHRcdFx0YkRpc3BsYXlNb2RlID0gYUN1c3RvbURhdGFbMF0gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0c1RhYmxlVHlwZUN1c3RvbURhdGEgPSBhQ3VzdG9tRGF0YVsxXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbMl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBSZWFkIE9ubHkgYW5kIENvbHVtbiBFZGl0IE1vZGUgY2FuIGJvdGggaGF2ZSB0aHJlZSBzdGF0ZVxuXHRcdFx0XHQvLyBVbmRlZmluZWQgbWVhbnMgdGhhdCB0aGUgZnJhbWV3b3JrIGRlY2lkZXMgd2hhdCB0byBkb1xuXHRcdFx0XHQvLyBUcnVlIC8gRGlzcGxheSBtZWFucyBhbHdheXMgcmVhZCBvbmx5XG5cdFx0XHRcdC8vIEZhbHNlIC8gRWRpdGFibGUgbWVhbnMgZWRpdGFibGUgYnV0IHdoaWxlIHN0aWxsIHJlc3BlY3RpbmcgdGhlIGxvdyBsZXZlbCBwcmluY2lwbGUgKGltbXV0YWJsZSBwcm9wZXJ0eSB3aWxsIG5vdCBiZSBlZGl0YWJsZSlcblx0XHRcdFx0aWYgKGJEaXNwbGF5TW9kZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBiRGlzcGxheU1vZGUgIT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRcdFx0YkRpc3BsYXlNb2RlID0gYkRpc3BsYXlNb2RlID09PSBcInRydWVcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Y29uc3Qgb1RoaXMgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdFx0XHRcdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5lbmFibGVBdXRvQ29sdW1uV2lkdGgsXG5cdFx0XHRcdFx0XHRyZWFkT25seTogYkRpc3BsYXlNb2RlLFxuXHRcdFx0XHRcdFx0dGFibGVUeXBlOiBzVGFibGVUeXBlQ3VzdG9tRGF0YSxcblx0XHRcdFx0XHRcdGlkOiBzVGFibGVJZCxcblx0XHRcdFx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHByb3BlcnR5SW5mb05hbWUsXG5cdFx0XHRcdFx0XHRjb2x1bW5JbmZvOiBjb2x1bW5JbmZvLFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpLFxuXHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlOiB7IG5hbWU6IHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhIH0sXG5cdFx0XHRcdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjogdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlclxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9UYWJsZUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9UYWJsZUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZDogb1Byb3BlcnR5Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0dGhpczogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW46IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL2NvbHVtbkluZm9cIilcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0dGhpczogb1RoaXMsXG5cdFx0XHRcdFx0XHRcdGVudGl0eVNldDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbjogb1RoaXNcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhcHBDb21wb25lbnQ6IG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnRcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0IHRhYmxlQ29sbGVjdGlvbiA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk+KFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbikhXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJQcm92aWRlciA9IG5ldyBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKFxuXHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdHsgY29sbGVjdGlvbkVudGl0eTogdGFibGVDb2xsZWN0aW9uLnRhcmdldE9iamVjdCEsIG1ldGFNb2RlbDogb01ldGFNb2RlbCB9LFxuXHRcdFx0XHRcdHRhYmxlQVBJXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGNvbXB1dGVkQ29sdW1uWE1MID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhcblx0XHRcdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChnZXRDb2x1bW5UZW1wbGF0ZShcblx0XHRcdFx0XHRcdFx0c1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5JbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpISxcblx0XHRcdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdFx0XHQpID8/IFwiXCIpIGFzIHVua25vd24gYXMgc3RyaW5nO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFwidGV4dC94bWxcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRcdFx0XHRcdGNvbXB1dGVkQ29sdW1uWE1MLmZpcnN0RWxlbWVudENoaWxkLFxuXHRcdFx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRcdFx0XHR7IHZpZXc6IG9WaWV3IH0sXG5cdFx0XHRcdFx0b01vZGlmaWVyXG5cdFx0XHRcdCkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b1RoaXMuZGVzdHJveSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gZm5UZW1wbGF0ZUZyYWdtZW50KHByb3BlcnR5SW5mbywgdmlldyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFByb3ZpZGUgdGhlIFRhYmxlJ3MgZmlsdGVyIGRlbGVnYXRlIHRvIHByb3ZpZGUgYmFzaWMgZmlsdGVyIGZ1bmN0aW9uYWxpdHkgc3VjaCBhcyBhZGRpbmcgRmlsdGVyRmllbGRzLlxuXHQgKiBAcmV0dXJucyBPYmplY3QgZm9yIHRoZSBUYWJsZXMgZmlsdGVyIHBlcnNvbmFsaXphdGlvbi5cblx0ICovXG5cdGdldEZpbHRlckRlbGVnYXRlOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7XG5cdFx0XHRcdGFwaVZlcnNpb246IDJcblx0XHRcdH0sXG5cdFx0XHRGaWx0ZXJCYXJEZWxlZ2F0ZSxcblx0XHRcdHtcblx0XHRcdFx0YWRkSXRlbTogYXN5bmMgZnVuY3Rpb24gKG9QYXJlbnRDb250cm9sOiBDb250cm9sLCBzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eUluZm9OYW1lLmluZGV4T2YoXCJQcm9wZXJ0eTo6XCIpID09PSAwKSB7XG5cdFx0XHRcdFx0XHQvLyBDb3JyZWN0IHRoZSBuYW1lIG9mIGNvbXBsZXggcHJvcGVydHkgaW5mbyByZWZlcmVuY2VzLlxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5SW5mb05hbWUgPSBzUHJvcGVydHlJbmZvTmFtZS5yZXBsYWNlKFwiUHJvcGVydHk6OlwiLCBcIlwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIEZpbHRlckJhckRlbGVnYXRlLmFkZEl0ZW0ob1BhcmVudENvbnRyb2wgYXMgRmlsdGVyQmFyLCBzUHJvcGVydHlJbmZvTmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBUeXBlTWFwIGF0dGFjaGVkIHRvIHRoaXMgZGVsZWdhdGUuXG5cdCAqIEByZXR1cm5zIEFueSBpbnN0YW5jZSBvZiBUeXBlTWFwXG5cdCAqL1xuXHRnZXRUeXBlTWFwOiBmdW5jdGlvbiAoLypvUGF5bG9hZDogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gVHlwZU1hcDtcblx0fSxcblxuXHQvKipcblx0ICogRm9ybWF0IHRoZSB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyIC5cblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dFxuXHQgKiBAcGFyYW0gcHJvcGVydHkgTmFtZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHJldHVybnMgRm9ybWF0dGVkIHRpdGxlIG9mIHRoZSBncm91cCBoZWFkZXIuXG5cdCAqL1xuXHRmb3JtYXRHcm91cEhlYWRlcih0YWJsZTogTURDVGFibGUsIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBwcm9wZXJ0eTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvcyA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IHByb3BlcnR5SW5mb3M/LmZpbmQoKG9iaikgPT4ge1xuXHRcdFx0cmV0dXJuIG9iai5uYW1lID09PSBwcm9wZXJ0eTtcblx0XHR9KTtcblx0XHQvKkZvciBhIERhdGUsIERhdGVUaW1lLCBCb29sZWFuIG9yIERlY2ltYWwgcHJvcGVydHksIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCBpbiBleHRlcm5hbCBmb3JtYXQgdXNpbmcgYSBVSTUgdHlwZSBmb3IgdGhlXG5cdCAgICAgICAgZ2l2ZW4gcHJvcGVydHkgcGF0aCB0aGF0IGZvcm1hdHMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkncyBFRE0gdHlwZSBhbmQgY29uc3RyYWludHMqL1xuXHRcdGNvbnN0IGRhdGFCYXNlVHlwZSA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eUluZm8/LmRhdGFUeXBlKS5iYXNlVHlwZTtcblx0XHRjb25zdCBleHRlcm5hbEZvcm1hdCA9XG5cdFx0XHRkYXRhQmFzZVR5cGUgPT09IFwiRGF0ZVRpbWVcIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiRGF0ZVwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJCb29sZWFuXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIk51bWVyaWNcIjtcblx0XHRsZXQgdmFsdWU7XG5cdFx0aWYgKCFjb250ZXh0KSB7XG5cdFx0XHR2YWx1ZSA9IGdldFJlc291cmNlTW9kZWwoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkpLmdldFRleHQoXCJNX1RBQkxFX0dST1VQX0hFQURFUl9USVRMRV9WQUxVRVwiKTtcblx0XHRcdHJldHVybiBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVcIiwgW3Byb3BlcnR5SW5mbz8ubGFiZWwsIHZhbHVlXSk7XG5cdFx0fVxuXHRcdGlmIChwcm9wZXJ0eUluZm8/Lm1vZGUpIHtcblx0XHRcdHN3aXRjaCAocHJvcGVydHlJbmZvLm1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0XHR2YWx1ZSA9IFZhbHVlRm9ybWF0dGVyLmZvcm1hdFdpdGhCcmFja2V0cyhcblx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5ID8gY29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSwgZXh0ZXJuYWxGb3JtYXQpIDogbnVsbCxcblx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5ID8gY29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSwgZXh0ZXJuYWxGb3JtYXQpIDogbnVsbFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHR2YWx1ZSA9IFZhbHVlRm9ybWF0dGVyLmZvcm1hdFdpdGhCcmFja2V0cyhcblx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5ID8gY29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSwgZXh0ZXJuYWxGb3JtYXQpIDogbnVsbCxcblx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5ID8gY29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSwgZXh0ZXJuYWxGb3JtYXQpIDogbnVsbFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbHVlID0gcHJvcGVydHlJbmZvPy5wYXRoID8gY29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUluZm8ucGF0aCwgZXh0ZXJuYWxGb3JtYXQpIDogbnVsbDtcblx0XHR9XG5cdFx0aWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSBcIlwiKSB7XG5cdFx0XHR2YWx1ZSA9IGdldFJlc291cmNlTW9kZWwoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkpLmdldFRleHQoXCJNX1RBQkxFX0dST1VQX0hFQURFUl9USVRMRV9WQUxVRVwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGdldFJlc291cmNlTW9kZWwodGFibGUpLmdldFRleHQoXCJNX1RBQkxFX0dST1VQX0hFQURFUl9USVRMRVwiLCBbcHJvcGVydHlJbmZvPy5sYWJlbCwgdmFsdWVdKTtcblx0fVxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBc0ZBLE1BQU1BLDhCQUE4QixHQUFHLCtCQUErQjtFQUN0RSxNQUFNQyxxQkFBcUIsR0FBRyxhQUFhO0VBQzNDLE1BQU1DLHFCQUFxQixHQUFHLGFBQWE7RUFDM0MsTUFBTUMsZ0JBQWdCLEdBQUcsaUJBQWlCOztFQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVRBLE9BVWVDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsRUFBRTtJQUNuREMsVUFBVSxFQUFFLENBQUM7SUFDYjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxtQ0FBbUMsRUFBRSxTQUFBQSxDQUNwQ0MsS0FBWSxFQUNaQyxZQUFvQyxFQUNwQ0MsYUFBdUMsRUFDdEM7TUFDRCxJQUFJRCxZQUFZLENBQUNFLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzNFLE1BQU1DLE1BQU0sR0FBR0wsS0FBSyxDQUFDTSxVQUFVLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUVDLEdBQUcsSUFBSztVQUMvQyxPQUFPQSxHQUFHLENBQUNDLGNBQWMsQ0FBQyxDQUFDLEtBQUtSLFlBQVksQ0FBQ0UsR0FBRztRQUNqRCxDQUFDLENBQUM7UUFDRixNQUFNTyxtQkFBbUIsR0FBR0wsTUFBTSxHQUFHQSxNQUFNLENBQUNNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLE1BQU0sR0FBRyxLQUFLO1FBQzFGLE1BQU1DLFVBQVUsR0FBSVosS0FBSyxDQUFDYSxRQUFRLENBQUMsQ0FBQyxDQUFnQkMsWUFB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