@sapui5/sap.fe.core 1.136.8 → 1.136.9

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 (45) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +28 -16
  4. package/src/sap/fe/core/AppComponent.ts +36 -20
  5. package/src/sap/fe/core/AppStateHandler.js +6 -5
  6. package/src/sap/fe/core/AppStateHandler.ts +5 -5
  7. package/src/sap/fe/core/PageController.js +4 -4
  8. package/src/sap/fe/core/PageController.ts +3 -3
  9. package/src/sap/fe/core/TemplateComponent.js +3 -3
  10. package/src/sap/fe/core/TemplateComponent.ts +2 -2
  11. package/src/sap/fe/core/controllerextensions/EditFlow.js +159 -34
  12. package/src/sap/fe/core/controllerextensions/EditFlow.ts +177 -39
  13. package/src/sap/fe/core/controllerextensions/SideEffects.js +7 -3
  14. package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
  15. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +28 -17
  16. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +35 -18
  17. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +5 -2
  18. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +3 -1
  19. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +13 -9
  20. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +13 -9
  21. package/src/sap/fe/core/converters/annotations/DataField.js +6 -2
  22. package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
  23. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +6 -5
  24. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +5 -4
  25. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +2 -2
  26. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +1 -1
  27. package/src/sap/fe/core/fpm/manifest.json +1 -1
  28. package/src/sap/fe/core/library.js +1 -1
  29. package/src/sap/fe/core/messagebundle_da.properties +3 -3
  30. package/src/sap/fe/core/messagebundle_es.properties +1 -1
  31. package/src/sap/fe/core/messagebundle_fr.properties +9 -9
  32. package/src/sap/fe/core/messagebundle_hu.properties +1 -1
  33. package/src/sap/fe/core/messagebundle_id.properties +1 -1
  34. package/src/sap/fe/core/messagebundle_ja.properties +1 -1
  35. package/src/sap/fe/core/messagebundle_lv.properties +1 -1
  36. package/src/sap/fe/core/messagebundle_uk.properties +1 -1
  37. package/src/sap/fe/core/messagebundle_zh_CN.properties +1 -1
  38. package/src/sap/fe/core/rootView/RootViewBaseController.js +17 -17
  39. package/src/sap/fe/core/rootView/RootViewBaseController.ts +24 -29
  40. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +13 -6
  41. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +17 -5
  42. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  43. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  44. package/src/sap/fe/core/templating/UIFormatters.js +2 -2
  45. package/src/sap/fe/core/templating/UIFormatters.ts +1 -1
@@ -90,7 +90,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelCo
90
90
  };
91
91
  _exports.FieldEditMode = FieldEditMode;
92
92
  const getDisplayMode = function (oDataModelObjectPath) {
93
- return DisplayModeFormatter.getDisplayMode(oDataModelObjectPath.targetObject, oDataModelObjectPath);
93
+ return DisplayModeFormatter.getDisplayMode(oDataModelObjectPath.targetObject, oDataModelObjectPath.targetEntityType);
94
94
  };
95
95
  _exports.getDisplayMode = getDisplayMode;
96
96
  const getEditableExpressionAsObject = function (oPropertyPath, oDataFieldConverted, oDataModelObjectPath) {
@@ -739,4 +739,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelCo
739
739
  _exports.isQuickViewFacetVisible = isQuickViewFacetVisible;
740
740
  return _exports;
741
741
  }, false);
742
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEVkaXRNb2RlIiwiRGlzYWJsZWQiLCJEaXNwbGF5IiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiUmVhZE9ubHkiLCJfZXhwb3J0cyIsImdldERpc3BsYXlNb2RlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJEaXNwbGF5TW9kZUZvcm1hdHRlciIsInRhcmdldE9iamVjdCIsImdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0Iiwib1Byb3BlcnR5UGF0aCIsIm9EYXRhRmllbGRDb252ZXJ0ZWQiLCJpc0VkaXRhYmxlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiVUkiLCJJc0VkaXRhYmxlIiwiY29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb24iLCJiQXNPYmplY3QiLCJyZWxhdGl2ZVBhdGgiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiY29tcGlsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24iLCJjb25zdGFudCIsImlzUHJvcGVydHkiLCJpZkVsc2UiLCJpc05vbkVkaXRhYmxlRXhwcmVzc2lvbiIsIm9Qcm9wZXJ0eSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiJHRhcmdldCIsImlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1BhdGhVcGRhdGFibGUiLCJwcm9wZXJ0eVBhdGgiLCJwYXRoVmlzaXRvciIsInBhdGgiLCJuYXZpZ2F0aW9uUGF0aHMiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImNvbnZlcnRlZFR5cGVzIiwiZWRpdGFibGVFeHByZXNzaW9uIiwib3IiLCJhbmQiLCJub3QiLCJpc0NvbXB1dGVkIiwiaXNLZXkiLCJpc0ltbXV0YWJsZSIsIklzVHJhbnNpZW50QmluZGluZyIsInVucmVzb2x2YWJsZUV4cHJlc3Npb24iLCJnZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJmb3JtYXR0ZXIiLCJvYmplY3RQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImFjdGl2aXR5RXhwcmVzc2lvbiIsInBhdGhJbk1vZGVsIiwia2V5cyIsImNvbnRleHRMb2NhdGlvbiIsInRhcmdldEVudGl0eVR5cGUiLCJrZXlzRXhwcmVzc2lvbnMiLCJmb3JFYWNoIiwia2V5Iiwia2V5RXhwcmVzc2lvbiIsIm5hbWUiLCJwdXNoIiwiZm9ybWF0UmVzdWx0IiwiZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCIsImdldEVuYWJsZWRFeHByZXNzaW9uIiwiZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsImVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0RWRpdE1vZGUiLCJtZWFzdXJlUmVhZE9ubHkiLCJhc09iamVjdCIsImRhdGFGaWVsZENvbnZlcnRlZCIsIiRUeXBlIiwicHJvcGVydHkiLCJhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsInJlc3VsdEV4cHJlc3Npb24iLCJpc1VuaXRSZWFkT25seSIsImlzUmVhZE9ubHlFeHByZXNzaW9uIiwiaXNDb25zdGFudCIsImFubm90YXRpb25zIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJyZWFkT25seUV4cHJlc3Npb24iLCJlZGl0TW9kZUV4cHJlc3Npb24iLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJvUHJvcGVydHlEZWZpbml0aW9uIiwiZ2V0RXhwcmVzc2lvbkZvck1lYXN1cmVVbml0IiwiY3VycmVuY3kiLCJtZWFzdXJlIiwiaXNUcnV0aHkiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJJc1RvdGFsIiwiZ2V0RmllbGREaXNwbGF5Iiwic1RhcmdldERpc3BsYXlNb2RlIiwib0NvbXB1dGVkRWRpdE1vZGUiLCJoYXNUZXh0QW5ub3RhdGlvbiIsIkNvbW1vbiIsIlRleHQiLCJoYXNWYWx1ZUhlbHAiLCJlcXVhbCIsImdldFR5cGVDb25maWciLCJkYXRhVHlwZSIsIm9UYXJnZXRNYXBwaW5nIiwiRURNX1RZUEVfTUFQUElORyIsInR5cGUiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJjb25zdHJhaW50cyIsImZvcm1hdE9wdGlvbnMiLCJzY2FsZSIsIiRTY2FsZSIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJtaW5pbXVtIiwiaXNOYU4iLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsIm1heGltdW0iLCJNYXhpbXVtIiwiaXNEaWdpdFNlcXVlbmNlIiwiSXNEaWdpdFNlcXVlbmNlIiwiVjQiLCIkVjQiLCJwYXJzZUFzU3RyaW5nIiwiaW5kZXhPZiIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZ2V0Q29uc3RyYWludE9wdGlvbnMiLCJEb05vdENoZWNrU2NhbGVPZk1lYXN1cmVkUXVhbnRpdHkiLCJ2YWx1ZU9mIiwic2tpcERlY2ltYWxzVmFsaWRhdGlvbiIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsImlnbm9yZVVuaXRDb25zdHJhaW50IiwiZm9yRGlzcGxheU1vZGUiLCJzaG93T25seVVuaXREZWNpbWFscyIsInVuaXQiLCJyZWxhdGl2ZUxvY2F0aW9uIiwiZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiIsImhhc1N0YXRpY1BlcmNlbnRVbml0Iiwic2hvd01lYXN1cmUiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRXaXRoUGVyY2VudGFnZSIsImNvbXBsZXhUeXBlIiwidW5pdEJpbmRpbmdFeHByZXNzaW9uIiwiY29uc3RyYWludE9wdGlvbnMiLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJnZXRCaW5kaW5nRm9yRGF0ZVBpY2tlciIsIm1pbkRhdGUiLCIkRGF0ZSIsIm1heERhdGUiLCJtaW5FeHByZXNzaW9uIiwibWF4RXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJzaG93TnVtYmVyIiwiZ2V0QmluZGluZ1dpdGhUaW1lem9uZSIsImhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwiZmllbGRGb3JtYXRPcHRpb25zIiwidGltZXpvbmUiLCJUaW1lem9uZSIsInN0eWxlIiwiRGF0ZVRpbWVTdHlsZSIsInNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwiZGF0ZVRpbWVTdHlsZSIsImRhdGVUaW1lUGF0dGVybiIsInBhdHRlcm4iLCJzaG93VGltZSIsInNob3dEYXRlIiwic2hvd1RpbWV6b25lIiwiZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQiLCJwcm9wZXJ0eURhdGFNb2RlbFBhdGgiLCJmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdCIsInRvU3RyaW5nIiwiZ2V0QmluZGluZ0ZvclRpbWV6b25lIiwicHJvcGVydHlEZWZpbml0aW9uIiwiZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiIsInNBbGlnbkRpc3BsYXkiLCJzQWxpZ25FZGl0IiwiZ2V0Q29udmVydGVyQ29udGV4dCIsIm9Db250ZXh0Iiwib0ludGVyZmFjZSIsImNvbnRleHQiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsInJlcXVpcmVzSUNvbnRleHQiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJvRGF0YU1vZGVsUGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiaGFzT25lVG9NYW55TmF2aWdhdGlvbiIsImZpbmRJbmRleCIsIm9OYXYiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5Iiwib0NvbnRleHROYXYiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdCIsImZvcmNlRWRpdE1vZGUiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJvUmVxdWlyZWRQcm9wZXJ0aWVzIiwiYVJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMiLCJyZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwiYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMiLCJyZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwiZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uIiwiaXNSZXF1aXJlZEV4cHJlc3Npb24iLCJyZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb24iLCJyZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb24iLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJlZGl0TW9kZSIsImluY2x1ZGVzIiwiSXNDcmVhdGVNb2RlIiwicmV0dXJuRXhwcmVzc2lvbiIsImdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCIsImRhdGFGaWVsZE9iamVjdFBhdGgiLCJkYXRhIiwiRGF0YSIsIk9iamVjdCIsImRhdGFGaWVsZHMiLCJpc1JlcXVpcmVkRXhwcmVzc2lvbnMiLCJkYXRhRmllbGQiLCJWYWx1ZSIsIlRhcmdldCIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImlzVmlzaWJsZSIsIkhpZGRlbiIsImlzTXVsdGlMaW5lIiwiaXNNdWx0aUxpbmVUZXh0IiwiZ2V0QWN0aW9uRW5hYmxlZEV4cHJlc3Npb24iLCJhY3Rpb25UYXJnZXQiLCJwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiIsIm9wZXJhdGlvbkF2YWlsYWJsZUlzQW5ub3RhdGVkIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInRlcm0iLCJwcmVmaXgiLCJzb3VyY2VFbnRpdHlUeXBlIiwibmF2aWdhdGlvbnMiLCJzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsIm5hdiIsImpvaW4iLCJiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUiLCJpc0JvdW5kIiwicGFyYW1ldGVycyIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIm9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24iLCJiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yIiwiaXNRdWlja1ZpZXdGYWNldFZpc2libGUiLCJmYWNldE1vZGVsUGF0aCIsInRhcmdldFZpc2libGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlVJRm9ybWF0dGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgQWN0aW9uUGFyYW1ldGVyLCBDb252ZXJ0ZWRNZXRhZGF0YSwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB7IENvcmVBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvcmVcIjtcbmltcG9ydCB0eXBlIHsgVW5pdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvTWVhc3VyZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29sbGVjdGlvbkZhY2V0LFxuXHRDb25uZWN0ZWRGaWVsZHNUeXBlLFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50VHlwZSxcblx0RGF0YVBvaW50VHlwZVR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRSZWZlcmVuY2VGYWNldFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHtcblx0QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0Q29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyxcblx0Rm5cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRFRE1fVFlQRV9NQVBQSU5HLFxuXHRhZGRUeXBlSW5mb3JtYXRpb24sXG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNUcnV0aHksXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHR1bnJlc29sdmFibGVFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29udmVydE1ldGFNb2RlbENvbnRleHQsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgVUksIGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IsIHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUeXBlLCBpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5LCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgRGlzcGxheU1vZGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7XG5cdGlzRGlzYWJsZWRFeHByZXNzaW9uLFxuXHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbixcblx0aXNSZWFkT25seUV4cHJlc3Npb24sXG5cdGlzUmVxdWlyZWRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGhhc1N0YXRpY1BlcmNlbnRVbml0LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGlzQ29tcHV0ZWQsXG5cdGlzSW1tdXRhYmxlLFxuXHRpc0tleSxcblx0aXNNdWx0aUxpbmVUZXh0XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEZvcm1hdE9wdGlvbnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFQb2ludEZvcm1hdE9wdGlvbnMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0RhdGFQb2ludFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5cbi8vIEltcG9ydC1leHBvcnQgbWV0aG9kIHVzZWQgYnkgdGhlIGNvbnZlcnRlciB0byB1c2UgdGhlbSBpbiB0aGUgdGVtcGxhdGluZyB0aHJvdWdoIHRoZSBVSUZvcm1hdHRlcnMuXG5leHBvcnQgdHlwZSBEaXNwbGF5TW9kZSA9IERpc3BsYXlNb2RlRm9ybWF0dGVyLkRpc3BsYXlNb2RlO1xuXG5leHBvcnQgdHlwZSBGaWVsZEVkaXRTdHlsZSA9IFwiUmFkaW9CdXR0b25zXCI7XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5T3JQYXRoPFA+ID0gc3RyaW5nIHwgUCB8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPjtcbmV4cG9ydCB0eXBlIE1ldGFNb2RlbENvbnRleHQgPSB7XG5cdCRraW5kOiBzdHJpbmc7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCROdWxsYWJsZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIHN0cnVjdHVyZSByZXR1cm5lZCBieSB0aGUgT0RhdGFNZXRhTW9kZWwgd2hlbiB1c2luZyB0aGUgQEAgb3BlcmF0b3IgaW4gWE1MIHRlbXBsYXRlcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlID0ge1xuXHRjb250ZXh0OiBDb250ZXh0O1xuXHRhcmd1bWVudHM/OiB1bmtub3duW107XG5cdCQkdmFsdWVBc1Byb21pc2U/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZUNvbnN0cmFpbnRzID0ge1xuXHRzY2FsZT86IG51bWJlcjtcblx0cHJlY2lzaW9uPzogbnVtYmVyO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdG51bGxhYmxlPzogYm9vbGVhbjtcblx0bWluaW11bT86IHN0cmluZztcblx0bWF4aW11bT86IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlPzogYm9vbGVhbjtcblx0VjQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZWZvcm1hdE9wdGlvbnMgPSB7XG5cdHBhcnNlQXNTdHJpbmc/OiBib29sZWFuO1xuXHRlbXB0eVN0cmluZz86IHN0cmluZztcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbmZpZ1R5cGUgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0Y29uc3RyYWludHM6IGNvbmZpZ1R5cGVDb25zdHJhaW50cztcblx0Zm9ybWF0T3B0aW9uczogY29uZmlnVHlwZWZvcm1hdE9wdGlvbnM7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRlVGltZVN0eWxlID0gXCJzaG9ydFwiIHwgXCJtZWRpdW1cIiB8IFwibG9uZ1wiIHwgXCJmdWxsXCI7XG5cbmV4cG9ydCB0eXBlIEZvcm1hdE9wdGlvbnNEYXRlRm9ybWF0ID0gRmllbGRGb3JtYXRPcHRpb25zIHwgRGF0YVBvaW50Rm9ybWF0T3B0aW9ucztcblxuZXhwb3J0IGNvbnN0IEZpZWxkRWRpdE1vZGUgPSB7XG5cdC8qKlxuXHQgKiB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkfSBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkIH1cblx0ICogaXMgcmVuZGVyZWQgaW4gZGlzYWJsZWQgbW9kZVxuXHQgKi9cblx0RGlzYWJsZWQ6IFwiRGlzYWJsZWRcIixcblx0LyoqXG5cdCAqIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGR9IG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGQgfVxuXHQgKiBpcyByZW5kZXJlZCBpbiBkaXNwbGF5IG1vZGVcblx0ICovXG5cdERpc3BsYXk6IFwiRGlzcGxheVwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIGVkaXRhYmxlIG1vZGVcblx0ICovXG5cdEVkaXRhYmxlOiBcIkVkaXRhYmxlXCIsXG5cdC8qKlxuXHQgKiBJZiBtb3JlIHRoYW4gb25lIGNvbnRyb2wgaXMgcmVuZGVyZWQgYnkgdGhlIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGQgfVxuXHQgKiBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkfSBjb250cm9sLCB0aGUgZmlyc3QgcGFydCBpcyBlZGl0YWJsZSwgYW5kIHRoZSBvdGhlclxuXHQgKiBwYXJ0cyBhcmUgaW4gZGlzcGxheSBtb2RlLlxuXHQgKi9cblx0RWRpdGFibGVEaXNwbGF5OiBcIkVkaXRhYmxlRGlzcGxheVwiLFxuXHQvKipcblx0ICogSWYgbW9yZSB0aGFuIG9uZSBjb250cm9sIGlzIHJlbmRlcmVkIGJ5IHRoZSB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkIH1cblx0ICogb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZH0gY29udHJvbCwgdGhlIGZpcnN0IHBhcnQgaXMgZWRpdGFibGUsIGFuZCB0aGUgb3RoZXJcblx0ICogcGFydHMgYXJlIHJlYWQtb25seS5cblx0ICovXG5cdEVkaXRhYmxlUmVhZE9ubHk6IFwiRWRpdGFibGVSZWFkT25seVwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIHJlYWQtb25seSBtb2RlXG5cdCAqL1xuXHRSZWFkT25seTogXCJSZWFkT25seVwiXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheU1vZGUgPSBmdW5jdGlvbiAoXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcz5cbik6IERpc3BsYXlNb2RlIHtcblx0cmV0dXJuIERpc3BsYXlNb2RlRm9ybWF0dGVyLmdldERpc3BsYXlNb2RlKG9EYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCwgb0RhdGFNb2RlbE9iamVjdFBhdGgpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlLFxuXHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyA9IHRydWVcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRFZGl0YWJsZUV4cHJlc3Npb24oXG5cdFx0b1Byb3BlcnR5UGF0aCxcblx0XHRvRGF0YUZpZWxkQ29udmVydGVkLFxuXHRcdG9EYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdHRydWUsXG5cdFx0aXNFZGl0YWJsZSxcblx0XHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9uc1xuXHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdGFibGVcIiBCb29sZWFuIHZhbHVlLlxuICogQHBhcmFtIG9Qcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0gb0RhdGFGaWVsZENvbnZlcnRlZCBUaGUgRGF0YUZpZWxkQ29udmVydGVkIG9iamVjdCB0byByZWFkIHRoZSBmaWVsZENvbnRyb2wgYW5ub3RhdGlvblxuICogQHBhcmFtIG9EYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBwYXRoIHRvIHRoaXMgcHJvcGVydHkgb2JqZWN0XG4gKiBAcGFyYW0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcGFyYW0gaXNFZGl0YWJsZSBXaGV0aGVyIG9yIG5vdCBVSS5Jc0VkaXRhYmxlIGJlIGNvbnNpZGVyZWQuXG4gKiBAcGFyYW0gY29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMgV2hldGhlciB3ZSB3YW50IHRvIHRha2UgaW50byBhY2NvdW50IFVwZGF0ZVJlc3RyaWN0aW9ucyB0byBjb21wdXRlIHRoZSBlZGl0YWJsZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB1c2VkIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IGlzIGVkaXRhYmxlIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdGFibGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlLFxuXHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyA9IHRydWVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhvRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmYWxzZSk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24gPSBpZkVsc2UoaXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCksIGZhbHNlLCBpc0VkaXRhYmxlKTtcblx0fSBlbHNlIGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24gPSBpc0VkaXRhYmxlO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgPyBvUHJvcGVydHlQYXRoLiR0YXJnZXQgOiBvUHJvcGVydHlQYXRoO1xuXG5cdC8vIEVkaXRhYmlsaXR5IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIFJlYWRPbmx5IG9yIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBrZXkgLT4gbm90IGVkaXRhYmxlIGV4Y2VwdCBpbiBjcmVhdGlvbiBpZiBub3QgY29tcHV0ZWRcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGNvbXB1dGVkIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IHVwZGF0YWJsZSAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGltbXV0YWJsZSAtPiBub3QgZWRpdGFibGUgZXhjZXB0IGluIGNyZWF0aW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIGEgcGF0aCByZXNvbHZpbmcgdG8gUmVhZE9ubHkgb3IgSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgKDw9IDEpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBFbHNlLCB0byBiZSBlZGl0YWJsZSB5b3UgbmVlZFxuXHQvLyBpbW11dGFibGUgYW5kIGtleSB3aGlsZSBpbiB0aGUgY3JlYXRpb24gcm93XG5cdC8vIHVpL2lzRWRpdGFibGVcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IGlzUGF0aFVwZGF0YWJsZShvRGF0YU1vZGVsT2JqZWN0UGF0aCwge1xuXHRcdHByb3BlcnR5UGF0aDogb1Byb3BlcnR5UGF0aCxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIG9EYXRhTW9kZWxPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXHRpZiAoY29tcGlsZUV4cHJlc3Npb24oaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbikgPT09IFwiZmFsc2VcIiAmJiBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucykge1xuXHRcdHJldHVybiBiQXNPYmplY3QgPyBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uIDogXCJmYWxzZVwiO1xuXHR9XG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9XG5cdFx0b1Byb3BlcnR5ICE9PSB1bmRlZmluZWRcblx0XHRcdD8gaWZFbHNlKFxuXHRcdFx0XHRcdG9yKFxuXHRcdFx0XHRcdFx0YW5kKG5vdChpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uKSwgY29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMpLFxuXHRcdFx0XHRcdFx0aXNDb21wdXRlZChvUHJvcGVydHkpLFxuXHRcdFx0XHRcdFx0aXNLZXkob1Byb3BlcnR5KSxcblx0XHRcdFx0XHRcdGlzSW1tdXRhYmxlKG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0XHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGlmRWxzZShvcihpc0NvbXB1dGVkKG9Qcm9wZXJ0eSksIGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSksIGZhbHNlLCBVSS5Jc1RyYW5zaWVudEJpbmRpbmcpLFxuXHRcdFx0XHRcdGlzRWRpdGFibGVcblx0XHRcdCAgKVxuXHRcdFx0OiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbikpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uID0gZnVuY3Rpb24gPFQ+KFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0Zm9ybWF0dGVyOiBGbjxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGFjdGl2aXR5RXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGAvY29sbGFib3JhdGlvbi9hY3Rpdml0aWVzJHtvYmplY3RQYXRofWAsIFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IGtleXMgPSBkYXRhTW9kZWxPYmplY3RQYXRoPy5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVR5cGU/LmtleXM7XG5cdGNvbnN0IGtleXNFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W10gPSBbXTtcblx0a2V5cz8uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0Y29uc3Qga2V5RXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGtleS5uYW1lKTtcblx0XHRrZXlzRXhwcmVzc2lvbnMucHVzaChrZXlFeHByZXNzaW9uKTtcblx0fSk7XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoW2FjdGl2aXR5RXhwcmVzc2lvbiwgLi4ua2V5c0V4cHJlc3Npb25zXSwgZm9ybWF0dGVyKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRFbmFibGVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCB0cnVlLCBvRGF0YU1vZGVsT2JqZWN0UGF0aCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZW5hYmxlZFwiIEJvb2xlYW4gdmFsdWUuXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgT2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZW5hYmxlZCBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVuYWJsZWRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHRydWUpO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGg7XG5cdGlmIChvRGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRcdHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMob0RhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiA9IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIHRydWUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgPyBvUHJvcGVydHlQYXRoLiR0YXJnZXQgOiBvUHJvcGVydHlQYXRoO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID1cblx0XHRvUHJvcGVydHkgIT09IHVuZGVmaW5lZCA/IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCksIGZhbHNlLCB0cnVlKSA6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVuYWJsZWRFeHByZXNzaW9uLCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdE1vZGVcIiBlbnVtIHZhbHVlLlxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBsaXN0IG9mIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCB0byByZWFjaCB0aGF0IHByb3BlcnR5XG4gKiBAcGFyYW0gbWVhc3VyZVJlYWRPbmx5IFdoZXRoZXIgd2Ugc2hvdWxkIHNldCBVb00gLyBjdXJyZW5jeSBmaWVsZCBtb2RlIHRvIHJlYWQgb25seVxuICogQHBhcmFtIGFzT2JqZWN0IFdoZXRoZXIgd2Ugc2hvdWxkIHJldHVybiB0aGlzIGFzIGFuIGV4cHJlc3Npb24gb3IgYXMgYSBzdHJpbmdcbiAqIEBwYXJhbSBkYXRhRmllbGRDb252ZXJ0ZWQgVGhlIGRhdGFGaWVsZCBvYmplY3RcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFdoZXRoZXIgb3Igbm90IFVJLklzRWRpdGFibGUgYmUgY29uc2lkZXJlZC5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHByb3BlcnR5IGVkaXQgbW9kZSwgY29tcGxpYW50IHdpdGggdGhlIE1EQyBGaWVsZCBkZWZpbml0aW9uIG9mIGVkaXRNb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdE1vZGUgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRtZWFzdXJlUmVhZE9ubHkgPSBmYWxzZSxcblx0YXNPYmplY3QgPSBmYWxzZSxcblx0ZGF0YUZpZWxkQ29udmVydGVkOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRpZiAoXG5cdFx0IXByb3BlcnR5UGF0aCB8fFxuXHRcdHR5cGVvZiBwcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIgfHxcblx0XHQoIWlzUHJvcGVydHkoZGF0YUZpZWxkQ29udmVydGVkKSAmJiBkYXRhRmllbGRDb252ZXJ0ZWQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpXG5cdCkge1xuXHRcdHJldHVybiBGaWVsZEVkaXRNb2RlLkRpc3BsYXk7XG5cdH1cblx0Y29uc3QgcHJvcGVydHkgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eVBhdGgpID8gcHJvcGVydHlQYXRoLiR0YXJnZXQgOiBwcm9wZXJ0eVBhdGg7XG5cdGlmICghaXNQcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRyZXR1cm4gRmllbGRFZGl0TW9kZS5EaXNwbGF5O1xuXHR9XG5cdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBpc1BhdGhVcGRhdGFibGUoZGF0YU1vZGVsT2JqZWN0UGF0aCwge1xuXHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHksXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXG5cdC8vIHdlIGdldCB0aGUgZWRpdGFibGUgRXhwcmVzc2lvbiB3aXRob3V0IGNvbnNpZGVyaW5nIHVwZGF0ZSBSZXN0cmljdGlvbnMgYmVjYXVzZSB0aGV5IGFyZSBoYW5kbGVkIHNlcGFyYXRlbHlcblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbE9iamVjdFBhdGgsIGlzRWRpdGFibGUsIGZhbHNlKTtcblxuXHRjb25zdCBlbmFibGVkRXhwcmVzc2lvbiA9IGdldEVuYWJsZWRFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KTtcblx0Y29uc3QgdW5pdFByb3BlcnR5ID0gYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdGxldCByZXN1bHRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuRWRpdGFibGUpO1xuXHRpZiAodW5pdFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgaXNVbml0UmVhZE9ubHkgPSBpc1JlYWRPbmx5RXhwcmVzc2lvbih1bml0UHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdFx0cmVzdWx0RXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRcdG9yKGlzVW5pdFJlYWRPbmx5LCBpc0NvbXB1dGVkKHVuaXRQcm9wZXJ0eSksIGFuZChpc0ltbXV0YWJsZSh1bml0UHJvcGVydHkpLCBub3QoVUkuSXNUcmFuc2llbnRCaW5kaW5nKSksIG1lYXN1cmVSZWFkT25seSksXG5cdFx0XHRpZkVsc2UoIWlzQ29uc3RhbnQoaXNVbml0UmVhZE9ubHkpICYmIGlzVW5pdFJlYWRPbmx5LCBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlUmVhZE9ubHksIEZpZWxkRWRpdE1vZGUuRWRpdGFibGVEaXNwbGF5KSxcblx0XHRcdEZpZWxkRWRpdE1vZGUuRWRpdGFibGVcblx0XHQpO1xuXHR9XG5cdGlmICghdW5pdFByb3BlcnR5ICYmIChwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSkge1xuXHRcdC8vIG5vIHVuaXQgcHJvcGVydHkgYXNzb2NpYXRlZCBtZWFucyB0aGlzIGlzIGEgc3RhdGljIHVuaXRcblx0XHRyZXN1bHRFeHByZXNzaW9uID0gY29uc3RhbnQoRmllbGRFZGl0TW9kZS5FZGl0YWJsZURpc3BsYXkpO1xuXHR9XG5cdGxldCByZWFkT25seUV4cHJlc3Npb247XG5cdGlmIChkYXRhRmllbGRDb252ZXJ0ZWQgIT0gdW5kZWZpbmVkICYmICFpc1Byb3BlcnR5KGRhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRyZWFkT25seUV4cHJlc3Npb24gPSBvcihpc1JlYWRPbmx5RXhwcmVzc2lvbihwcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSwgaXNSZWFkT25seUV4cHJlc3Npb24oZGF0YUZpZWxkQ29udmVydGVkKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmVhZE9ubHlFeHByZXNzaW9uID0gaXNSZWFkT25seUV4cHJlc3Npb24ocHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdH1cblxuXHQvLyBpZiB0aGVyZSBhcmUgdXBkYXRlIFJlc3RyaWN0aW9ucyBpdCBpcyBhbHdheXMgZGlzcGxheSBtb2RlXG5cdGNvbnN0IGVkaXRNb2RlRXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRvcihpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uLCBVSS5Jc1RyYW5zaWVudEJpbmRpbmcpLFxuXHRcdGlmRWxzZShcblx0XHRcdGVuYWJsZWRFeHByZXNzaW9uLFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRlZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcdHJlc3VsdEV4cHJlc3Npb24sXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoIWlzQ29uc3RhbnQocmVhZE9ubHlFeHByZXNzaW9uKSAmJiByZWFkT25seUV4cHJlc3Npb24sIGlzRWRpdGFibGUpLFxuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuUmVhZE9ubHksXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5EaXNwbGF5XG5cdFx0XHRcdClcblx0XHRcdCksXG5cdFx0XHRpZkVsc2UoaXNFZGl0YWJsZSwgRmllbGRFZGl0TW9kZS5EaXNhYmxlZCwgRmllbGRFZGl0TW9kZS5EaXNwbGF5KVxuXHRcdCksXG5cdFx0RmllbGRFZGl0TW9kZS5EaXNwbGF5XG5cdCk7XG5cdGlmIChhc09iamVjdCkge1xuXHRcdHJldHVybiBlZGl0TW9kZUV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGVkaXRNb2RlRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q7XG5cdHJldHVybiBvUHJvcGVydHlEZWZpbml0aW9uICYmIGdldEV4cHJlc3Npb25Gb3JNZWFzdXJlVW5pdChvUHJvcGVydHlEZWZpbml0aW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yTWVhc3VyZVVuaXQgPSBmdW5jdGlvbiAob1Byb3BlcnR5RGVmaW5pdGlvbjogUHJvcGVydHkpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGN1cnJlbmN5ID0gb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0Y29uc3QgbWVhc3VyZSA9IGN1cnJlbmN5ID8gY3VycmVuY3kgOiBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGlmIChtZWFzdXJlKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9yKGlzVHJ1dGh5KGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihtZWFzdXJlKSksIG5vdChVSS5Jc1RvdGFsKSkpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihjb25zdGFudCh0cnVlKSk7XG5cdH1cbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZERpc3BsYXkuXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aFxuICogQHBhcmFtIHNUYXJnZXREaXNwbGF5TW9kZVxuICogQHBhcmFtIG9Db21wdXRlZEVkaXRNb2RlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwcm9wZXJ0eSBkaXNwbGF5IG1vZGUsIGNvbXBsaWFudCB3aXRoIHRoZSBNREMgRmllbGQgZGVmaW5pdGlvbiBvZiBkaXNwbGF5TW9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpZWxkRGlzcGxheSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRzVGFyZ2V0RGlzcGxheU1vZGU6IHN0cmluZyxcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Y29uc3QgaGFzVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCAhPT0gdW5kZWZpbmVkO1xuXG5cdGlmIChoYXNWYWx1ZUhlbHAob1Byb3BlcnR5KSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihzVGFyZ2V0RGlzcGxheU1vZGUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBoYXNUZXh0QW5ub3RhdGlvbiA/IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJFZGl0YWJsZVwiKSwgXCJWYWx1ZVwiLCBzVGFyZ2V0RGlzcGxheU1vZGUpKSA6IFwiVmFsdWVcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFR5cGVDb25maWcgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBDb25maWdUeXBlIHtcblx0Y29uc3Qgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogQ29uZmlnVHlwZSA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzID0ge1xuXHRcdFx0c2NhbGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kU2NhbGUgPyBvUHJvcGVydHkuc2NhbGUgOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVjaXNpb246IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uID8gb1Byb3BlcnR5LnByZWNpc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heExlbmd0aDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRNYXhMZW5ndGggPyBvUHJvcGVydHkubWF4TGVuZ3RoIDogdW5kZWZpbmVkLFxuXHRcdFx0bnVsbGFibGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTnVsbGFibGUgPyBvUHJvcGVydHkubnVsbGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRtaW5pbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRtYXhpbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0RpZ2l0U2VxdWVuY2U6XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRWNDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRWNCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uc3RyYWludE9wdGlvbnMgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkKTogQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyB7XG5cdHJldHVybiBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5Eb05vdENoZWNrU2NhbGVPZk1lYXN1cmVkUXVhbnRpdHkgJiZcblx0XHRwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJLkRvTm90Q2hlY2tTY2FsZU9mTWVhc3VyZWRRdWFudGl0eT8udmFsdWVPZigpXG5cdFx0PyB7IHNraXBEZWNpbWFsc1ZhbGlkYXRpb246IHRydWUgfVxuXHRcdDoge307XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVVbml0Q29uc3RyYWludD86IGJvb2xlYW4sXG5cdGZvcm1hdE9wdGlvbnM/OiB7XG5cdFx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHRcdGRlY2ltYWxQYWRkaW5nPzogbnVtYmVyO1xuXHRcdGVtcHR5U3RyaW5nPzogc3RyaW5nIHwgbnVtYmVyO1xuXHR9LFxuXHRmb3JEaXNwbGF5TW9kZT86IGJvb2xlYW4sXG5cdHNob3dPbmx5VW5pdERlY2ltYWxzPzogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGxldCB1bml0ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0aWYgKGhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eURlZmluaXRpb24pKSB7XG5cdFx0aWYgKGZvcm1hdE9wdGlvbnM/LnNob3dNZWFzdXJlID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb247XG5cdFx0fVxuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb25dLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aFBlcmNlbnRhZ2UpO1xuXHR9XG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gdW5pdCA/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiIDogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiO1xuXHR1bml0ID0gdW5pdCA/IHVuaXQgOiAob1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IGFzIHVua25vd24gYXMgVW5pdCB8IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odW5pdCkgJiYgdW5pdC4kdGFyZ2V0XG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odW5pdC4kdGFyZ2V0LCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbiksIGlnbm9yZVVuaXRDb25zdHJhaW50KVxuXHRcdFx0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGxldCBjb25zdHJhaW50T3B0aW9uczogQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyB8IHVuZGVmaW5lZDtcblx0aWYgKGNvbXBsZXhUeXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIikge1xuXHRcdGlmIChmb3JEaXNwbGF5TW9kZSAmJiAhc2hvd09ubHlVbml0RGVjaW1hbHMpIHtcblx0XHRcdGNvbnN0cmFpbnRPcHRpb25zID0geyBza2lwRGVjaW1hbHNWYWxpZGF0aW9uOiB0cnVlIH07XG5cdFx0fSBlbHNlIGlmICghZm9yRGlzcGxheU1vZGUpIHtcblx0XHRcdC8vIENvbnNpZGVyIGFubm90YXRpb24gb25seSBpbiBlZGl0IG1vZGVcblx0XHRcdGNvbnN0cmFpbnRPcHRpb25zID0gZ2V0Q29uc3RyYWludE9wdGlvbnMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QpO1xuXHRcdH1cblx0fVxuXHRpZiAoZm9yRGlzcGxheU1vZGUpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCBlbXB0eVN0cmluZzogXCJcIiB9O1xuXHR9XG5cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucywgY29uc3RyYWludE9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGRhdGUgcGlja2VyIHdpdGggbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZSBwcmVzZW50LlxuICogQHBhcmFtIG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIEJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgZGF0ZSBwcm9wZXJ0eSB3aXRoIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWUgZm9yIHRoZSBzYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nRm9yRGF0ZVBpY2tlciA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZFR5cGVzPixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRjb25zdCBmb3JtYXRPcHRpb25zID0ge307XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5EYXRlXCI7XG5cdGNvbnN0IG1pbkRhdGUgPSBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bT8uJERhdGVcblx0XHQ/IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtPy4kRGF0ZVxuXHRcdDogb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW07XG5cdGNvbnN0IG1heERhdGUgPSBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bT8uJERhdGVcblx0XHQ/IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtPy4kRGF0ZVxuXHRcdDogb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW07XG5cdGNvbnN0IG1pbkV4cHJlc3Npb24gPVxuXHRcdG1pbkRhdGUgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24obWluRGF0ZSlcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihcblx0XHRcdFx0XHRvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSxcblx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0sIHJlbGF0aXZlTG9jYXRpb24pXG5cdFx0XHQgIClcblx0XHRcdDogbWluRGF0ZTtcblx0Y29uc3QgbWF4RXhwcmVzc2lvbiA9XG5cdFx0bWF4RGF0ZSAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihtYXhEYXRlKVxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtLFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSwgcmVsYXRpdmVMb2NhdGlvbilcblx0XHRcdCAgKVxuXHRcdFx0OiBtYXhEYXRlO1xuXG5cdHJldHVybiAoXG5cdFx0KG1pbkV4cHJlc3Npb24gfHwgbWF4RXhwcmVzc2lvbikgJiZcblx0XHRhZGRUeXBlSW5mb3JtYXRpb24oW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIG1pbkV4cHJlc3Npb24sIG1heEV4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKVxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWQsXG5cdGZvckRpc3BsYXlNb2RlOiBib29sZWFuLFxuXHRzaG93T25seVVuaXREZWNpbWFsczogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBzdHJpbmcge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0O1xuXHRpZiAoIW9Qcm9wZXJ0eURlZmluaXRpb24pIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdGxldCB1bml0ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGlmIChoYXNTdGF0aWNQZXJjZW50VW5pdChvUHJvcGVydHlEZWZpbml0aW9uKSkge1xuXHRcdHJldHVybiBjb25zdGFudChcIiVcIik7XG5cdH1cblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cblx0Y29uc3QgY29tcGxleFR5cGUgPSB1bml0ID8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIgOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCI7XG5cdHVuaXQgPSB1bml0ID8gdW5pdCA6IChvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgYXMgdW5rbm93biBhcyBVbml0IHwgdW5kZWZpbmVkKTtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0KSAmJiB1bml0LiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbih1bml0LiR0YXJnZXQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSlcblx0XHRcdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pO1xuXG5cdGxldCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gcGF0aEluTW9kZWwoXG5cdFx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChvUHJvcGVydHlEYXRhTW9kZWxQYXRoKVxuXHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB0cnVlKTtcblx0bGV0IGNvbnN0cmFpbnRPcHRpb25zOiBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zIHwgdW5kZWZpbmVkO1xuXHRpZiAoY29tcGxleFR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiKSB7XG5cdFx0aWYgKGZvckRpc3BsYXlNb2RlICYmICFzaG93T25seVVuaXREZWNpbWFscykge1xuXHRcdFx0Y29uc3RyYWludE9wdGlvbnMgPSB7IHNraXBEZWNpbWFsc1ZhbGlkYXRpb246IHRydWUgfTtcblx0XHR9IGVsc2UgaWYgKCFmb3JEaXNwbGF5TW9kZSkge1xuXHRcdFx0Y29uc3RyYWludE9wdGlvbnMgPSBnZXRDb25zdHJhaW50T3B0aW9ucyhvUHJvcGVydHlEZWZpbml0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihcblx0XHRbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSxcblx0XHRjb21wbGV4VHlwZSxcblx0XHR1bmRlZmluZWQsXG5cdFx0e1xuXHRcdFx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiB0cnVlLFxuXHRcdFx0c2hvd051bWJlcjogZmFsc2Vcblx0XHR9LFxuXHRcdGNvbnN0cmFpbnRPcHRpb25zXG5cdCk7XG59O1xuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdXaXRoVGltZXpvbmUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0aWdub3JlVW5pdENvbnN0cmFpbnQgPSBmYWxzZSxcblx0aGlkZVRpbWV6b25lRm9yRW1wdHlWYWx1ZXMgPSBmYWxzZSxcblx0ZmllbGRGb3JtYXRPcHRpb25zPzogRmllbGRGb3JtYXRPcHRpb25zXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0Y29uc3QgdGltZXpvbmUgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lO1xuXHRjb25zdCBzdHlsZSA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5EYXRlVGltZVN0eWxlO1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cblx0Y29uc3QgY29tcGxleFR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuRGF0ZVRpbWVXaXRoVGltZXpvbmVcIjtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0aW1lem9uZSkgJiYgdGltZXpvbmUuJHRhcmdldFxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKFxuXHRcdFx0XHRcdCh0aW1lem9uZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248dW5rbm93bj4pLiR0YXJnZXQgYXMgUHJvcGVydHksXG5cdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRpbWV6b25lLCByZWxhdGl2ZUxvY2F0aW9uKSxcblx0XHRcdFx0XHRpZ25vcmVVbml0Q29uc3RyYWludFxuXHRcdFx0ICApXG5cdFx0XHQ6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aW1lem9uZSwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGxldCBmb3JtYXRPcHRpb25zID0ge307XG5cdGlmIChoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcykge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRzaG93VGltZXpvbmVGb3JFbXB0eVZhbHVlczogZmFsc2Vcblx0XHR9O1xuXHR9XG5cdC8vIGlmIHN0eWxlIG9yIHBhdHRlcm4gaXMgYWxzbyBzZXRcblx0aWYgKHN0eWxlKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzdHlsZTogc3R5bGUgfSB9O1xuXHR9IGVsc2UgaWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uZGF0ZVRpbWVTdHlsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzdHlsZTogZmllbGRGb3JtYXRPcHRpb25zLmRhdGVUaW1lU3R5bGUgfSB9O1xuXHR9XG5cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uZGF0ZVRpbWVQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHBhdHRlcm46IGZpZWxkRm9ybWF0T3B0aW9ucy5kYXRlVGltZVBhdHRlcm4gfSB9O1xuXHR9XG5cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uc2hvd1RpbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd1RpbWU6IGZpZWxkRm9ybWF0T3B0aW9ucy5zaG93VGltZSB9IH07XG5cdH1cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uc2hvd0RhdGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd0RhdGU6IGZpZWxkRm9ybWF0T3B0aW9ucy5zaG93RGF0ZSB9IH07XG5cdH1cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uc2hvd1RpbWV6b25lICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dUaW1lem9uZTogZmllbGRGb3JtYXRPcHRpb25zLnNob3dUaW1lem9uZSB9IH07XG5cdH1cblxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgZGF0ZSBmb3JtYXQgb2YgYSBkYXRlLCB0aW1lIG9yIGRhdGVUaW1lLlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsUGF0aCBUaGUgbGlzdCBvZiBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gcmVhY2ggdGhhdCBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gQmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdCBGb3JtYXQgb3B0aW9ucyB3aGljaCBjb250YWluIHRoZSBzdHlsZSBvciBwYXR0ZXJuIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyBhIGRhdGUsIHRpbWUsIG9yIGRhdGUtdGltZSwgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybiBvciBzdHlsZSBwcm9wZXJ0eVxuICovXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdD86IEZvcm1hdE9wdGlvbnNEYXRlRm9ybWF0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBwcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRjb25zdCBwYXR0ZXJuID0gZm9ybWF0T3B0aW9uc0RhdGVGb3JtYXQ/LmRhdGVUaW1lUGF0dGVybjtcblx0Y29uc3Qgc3R5bGUgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uRGF0ZVRpbWVTdHlsZSA/PyBmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdD8uZGF0ZVRpbWVTdHlsZTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24udHlwZSA9IEVETV9UWVBFX01BUFBJTkdbb1Byb3BlcnR5RGVmaW5pdGlvbi50eXBlXS50eXBlO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0Li4uKHN0eWxlICYmIHsgc3R5bGU6IHN0eWxlLnRvU3RyaW5nKCkgfSksXG5cdFx0Li4uKHBhdHRlcm4gJiYgeyBwYXR0ZXJuOiBwYXR0ZXJuIH0pXG5cdH07XG5cblx0cmV0dXJuIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb247XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ0ZvclRpbWV6b25lID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBwcm9wZXJ0eURlZmluaXRpb24gPSBwcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihwcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLnR5cGUgPSBcImFueVwiO1xuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGF0ZVRpbWVXaXRoVGltZXpvbmVcIjtcblx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHsgc2hvd1RpbWU6IGZhbHNlLCBzaG93RGF0ZTogZmFsc2UsIHNob3dUaW1lem9uZTogdHJ1ZSB9O1xuXG5cdC8vIG51bGwgaXMgcmVxdWlyZWQgYnkgZm9ybWF0dGVyIHdoZW4gdGhlcmUgaXMganVzdCBhIHRpbWV6b25lXG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oW251bGwsIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGlnbm1lbnRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvQ29tcHV0ZWRFZGl0TW9kZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdHNBbGlnbkRpc3BsYXkgPSBcIkJlZ2luXCIsXG5cdHNBbGlnbkVkaXQgPSBcIkJlZ2luXCJcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJEaXNwbGF5XCIpLCBzQWxpZ25EaXNwbGF5LCBzQWxpZ25FZGl0KSk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGNvbnZlcnRlckNvbnRleHQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIG9yaWdpbmFsIG1ldGFtb2RlbCBjb250ZXh0XG4gKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBDb252ZXJ0ZXJDb250ZXh0IHJlcHJlc2VudGluZyB0aGF0IG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dCA9IGZ1bmN0aW9uIChvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogb2JqZWN0IHwgbnVsbCB7XG5cdGlmIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCkge1xuXHRcdHJldHVybiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvSW50ZXJmYWNlLmNvbnRleHQpIGFzIG9iamVjdDtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5nZXRDb252ZXJ0ZXJDb250ZXh0LnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGV4dC5cbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgb3JpZ2luYWwgT0RhdGFNZXRhTW9kZWwgY29udGV4dFxuICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIGN1cnJlbnQgdGVtcGxhdGluZyBjb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlbnRpdHlzZXRzIGFuZCBuYXZwcm9wZXJ0aWVzIHRoYXQgYXJlIGludm9sdmVkIHRvIGdldCB0byBhIHNwZWNpZmljIG9iamVjdCBpbiB0aGUgbWV0YW1vZGVsXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoID0gZnVuY3Rpb24gPFQ+KFxuXHRvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCxcblx0b0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+IHwgbnVsbCB7XG5cdGlmIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCkge1xuXHRcdHJldHVybiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0ludGVyZmFjZS5jb250ZXh0KTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5nZXREYXRhTW9kZWxPYmplY3RQYXRoLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgcmVmZXJlbmNlZCBwcm9wZXJ0eSBpcyBwYXJ0IG9mIGEgMS4ubiBuYXZpZ2F0aW9uLlxuICogQHBhcmFtIG9EYXRhTW9kZWxQYXRoIFRoZSBkYXRhIG1vZGVsIHBhdGggdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHBhcnQgb2YgYSAxLi5uIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZUZpZWxkID0gZnVuY3Rpb24gKG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+KTogYm9vbGVhbiB7XG5cdGlmIChvRGF0YU1vZGVsUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0Y29uc3QgaGFzT25lVG9NYW55TmF2aWdhdGlvbiA9XG5cdFx0XHRvRGF0YU1vZGVsUGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KChvTmF2KSA9PiB7XG5cdFx0XHRcdGlmIChpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KG9OYXYpKSB7XG5cdFx0XHRcdFx0aWYgKG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly93ZSBjaGVjayB0aGUgb25lIHRvIG1hbnkgbmF2IGlzIG5vdCBhbHJlYWR5IHBhcnQgb2YgdGhlIGNvbnRleHRcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KFxuXHRcdFx0XHRcdFx0XHRcdChvQ29udGV4dE5hdikgPT4gb0NvbnRleHROYXYubmFtZSA9PT0gb05hdi5uYW1lXG5cdFx0XHRcdFx0XHRcdCkgPT09IC0xXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KSA+IC0xO1xuXHRcdGlmIChoYXNPbmVUb01hbnlOYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRmb3JjZUVkaXRNb2RlID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRSZXF1aXJlZEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCwgb0RhdGFGaWVsZENvbnZlcnRlZCwgZm9yY2VFZGl0TW9kZSwgdHJ1ZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyxcblx0Zm9yY2VFZGl0TW9kZSA9IGZhbHNlLFxuXHRiQXNPYmplY3QgPSBmYWxzZSxcblx0b1JlcXVpcmVkUHJvcGVydGllczoge1xuXHRcdHJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM/OiB1bmtub3duW107XG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucz86IHVua25vd25bXTtcblx0fSA9IHt9LFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyA9IG9SZXF1aXJlZFByb3BlcnRpZXMucmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucztcblx0Y29uc3QgYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMgPSBvUmVxdWlyZWRQcm9wZXJ0aWVzLnJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnM7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGlmIChiQXNPYmplY3QpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihjb25zdGFudChmYWxzZSkpO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGg7XG5cdGlmIChkYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdFx0cmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHQvLyBGb3IgdGhlIGRhdGFmaWVsZCBleHByZXNzaW9uIHdlIHNob3VsZCBub3QgIGNvbnNpZGVyIHRoZSByZWxhdGl2ZSBwYXRoXG5cdFx0ZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uID0gaXNSZXF1aXJlZEV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCk7XG5cdH1cblx0bGV0IHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXHRsZXQgcmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Ly8gRW5hYmxlbWVudCBkZXBlbmRzIG9uIHRoZSBmaWVsZCBjb250cm9sIGV4cHJlc3Npb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgc3RhdGljYWxseSBpbiBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAtPiBub3QgZW5hYmxlZFxuXHRjb25zdCByZXF1aXJlZEV4cHJlc3Npb24gPSBpc1JlcXVpcmVkRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdGNvbnN0IGVkaXRNb2RlID0gZm9yY2VFZGl0TW9kZSB8fCBVSS5Jc0VkaXRhYmxlO1xuXHRpZiAoYVJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM/LmluY2x1ZGVzKG9Qcm9wZXJ0eS5uYW1lKSkge1xuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbiA9IFVJLklzQ3JlYXRlTW9kZTtcblx0fVxuXHRpZiAoYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnM/LmluY2x1ZGVzKG9Qcm9wZXJ0eS5uYW1lKSkge1xuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvbiA9IGFuZChVSS5Jc0VkaXRhYmxlLCBub3QoVUkuSXNDcmVhdGVNb2RlKSk7XG5cdH1cblx0Y29uc3QgcmV0dXJuRXhwcmVzc2lvbiA9IG9yKFxuXHRcdGFuZChvcihyZXF1aXJlZEV4cHJlc3Npb24sIGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiksIGVkaXRNb2RlKSxcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb24sXG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uXG5cdCk7XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gcmV0dXJuRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ocmV0dXJuRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPEFubm90YXRpb25QYXRoPENvbm5lY3RlZEZpZWxkc1R5cGU+PlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzPiA9IChkYXRhRmllbGRPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/LiR0YXJnZXQ/LkRhdGEgPz8ge30pIGFzIFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlc1xuXHQ+O1xuXHRjb25zdCBrZXlzOiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdGNvbnN0IGRhdGFGaWVsZHMgPSBbXTtcblx0bGV0IHByb3BlcnR5UGF0aDtcblx0Y29uc3QgaXNSZXF1aXJlZEV4cHJlc3Npb25zOiAoQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pW10gfCB1bmRlZmluZWQgPSBbXTtcblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGlmIChkYXRhW2tleV0/LltcIiRUeXBlXCJdICYmIGRhdGFba2V5XVtcIiRUeXBlXCJdPy5pbmNsdWRlcyhcIkRhdGFGaWVsZFwiKSkge1xuXHRcdFx0ZGF0YUZpZWxkcy5wdXNoKGRhdGFba2V5XSk7XG5cdFx0fVxuXHR9XG5cdGZvciAoY29uc3QgZGF0YUZpZWxkIG9mIGRhdGFGaWVsZHMpIHtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkIHwgRGF0YVBvaW50VHlwZT4oZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LCBbXG5cdFx0XHRcdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCxcblx0XHRcdFx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZVxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5UYXJnZXQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0fVxuXHRcdGlzUmVxdWlyZWRFeHByZXNzaW9ucy5wdXNoKGdldFJlcXVpcmVkRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkLCBmYWxzZSkpO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihvciguLi4oaXNSZXF1aXJlZEV4cHJlc3Npb25zIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKSkpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBoZWFkZXIgZmFjZXQgb3IgYWN0aW9uIGlzIHZpc2libGUuXG4gKiBAcGFyYW0gdGFyZ2V0T2JqZWN0IEhlYWRlciBmYWNldHMgb3IgQWN0aW9uc1xuICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Zpc2libGUoXG5cdHRhcmdldE9iamVjdDpcblx0XHR8IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcblx0XHR8IERhdGFQb2ludFR5cGVUeXBlc1xuXHRcdHwgUmVmZXJlbmNlRmFjZXRcblx0XHR8IENvbGxlY3Rpb25GYWNldFxuXHRcdHwgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNcblx0XHR8IEZpZWxkR3JvdXBcblx0XHR8IFByb3BlcnR5XG5cdFx0fCB1bmRlZmluZWQsXG5cdG5hdmlnYXRpb25Qcm9wZXJ0aWVzPzogc3RyaW5nW11cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sIG5hdmlnYXRpb25Qcm9wZXJ0aWVzKSwgdHJ1ZSkpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFjdGlvbiBwYXJhbWV0ZXIgaXMgc3VwcG9ydHMgbXVsdGkgbGluZSBpbnB1dC5cbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIE9iamVjdCBwYXRoIHRvIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuICogQHJldHVybnMgQm9vbGVhblxuICovXG5leHBvcnQgY29uc3QgaXNNdWx0aUxpbmUgPSBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxBY3Rpb25QYXJhbWV0ZXI+KTogYm9vbGVhbiB7XG5cdHJldHVybiBpc011bHRpTGluZVRleHQoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgYWN0aW9uIGlzIGVuYWJsZWQuXG4gKiBAcGFyYW0gYWN0aW9uVGFyZ2V0IEFjdGlvblxuICogQHBhcmFtIGNvbnZlcnRlZFR5cGVzIENvbnZlcnRlZE1ldGFkYXRhXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gcGF0aEZyb21Db250ZXh0TG9jYXRpb24gQm9vbGVhblxuICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25FbmFibGVkRXhwcmVzc2lvbihcblx0YWN0aW9uVGFyZ2V0OiBBY3Rpb24sXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cGF0aEZyb21Db250ZXh0TG9jYXRpb24/OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCA9XG5cdFx0YWN0aW9uVGFyZ2V0LmFubm90YXRpb25zLkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udGVybSA9PT0gQ29yZUFubm90YXRpb25UZXJtcy5PcGVyYXRpb25BdmFpbGFibGU7XG5cblx0aWYgKCFvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCkge1xuXHRcdC8vIE9wZXJhdGlvbkF2YWlsYWJsZSB0ZXJtIGRvZXNuJ3QgZXhpc3QgZm9yIHRoZSBhY3Rpb25cblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHRsZXQgcHJlZml4ID0gXCJcIjtcblx0aWYgKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGggJiZcblx0XHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiAmJlxuXHRcdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uID09PSB0cnVlICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVR5cGUgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbi50YXJnZXRFbnRpdHlUeXBlICE9PSBhY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZVxuXHQpIHtcblx0XHRjb25zdCBuYXZpZ2F0aW9ucyA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0bGV0IHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uKTtcblx0XHQvL1N0YXJ0IGZyb20gY29udGV4dExvY2F0aW9uIGFuZCBuYXZpZ2F0ZSB1bnRpbCB0aGUgc291cmNlIGVudGl0eVR5cGUgb2YgdGhlIGFjdGlvbiB0byBnZXQgdGhlIHJpZ2h0IHByZWZpeFxuXHRcdGZvciAoY29uc3QgbmF2IG9mIG5hdmlnYXRpb25zKSB7XG5cdFx0XHRzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QsIG5hdik7XG5cdFx0XHRpZiAoc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0LnRhcmdldEVudGl0eVR5cGUgPT09IGFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdHByZWZpeCA9IGAke2dldFJlbGF0aXZlUGF0aHMoc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0KS5qb2luKFwiL1wiKX0vYDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSA9IGFjdGlvblRhcmdldC5pc0JvdW5kID8gYWN0aW9uVGFyZ2V0LnBhcmFtZXRlcnNbMF0/LmZ1bGx5UXVhbGlmaWVkTmFtZSA6IHVuZGVmaW5lZDtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRhY3Rpb25UYXJnZXQuYW5ub3RhdGlvbnMuQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRcdFtdLFxuXHRcdHVuZGVmaW5lZCxcblx0XHQocGF0aDogc3RyaW5nKSA9PiBgJHtwcmVmaXh9JHtiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlZFR5cGVzLCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUpfWBcblx0KTtcblxuXHRyZXR1cm4gZXF1YWwob3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiwgdHJ1ZSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBleHByZXNzaW9uIHRvIGNoZWNrIGlmIHRoZSBxdWlja1ZpZXcgZmFjZXQgaXMgdmlzaWJsZS5cbiAqIEBwYXJhbSBmYWNldE1vZGVsUGF0aFxuICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgdGhlIHZpc2liaWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUXVpY2tWaWV3RmFjZXRWaXNpYmxlKGZhY2V0TW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFJlZmVyZW5jZUZhY2V0Pik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHRhcmdldFZpc2libGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KHRydWUpO1xuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPEZpZWxkR3JvdXA+KGZhY2V0TW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVGFyZ2V0Py4kdGFyZ2V0LCBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkpIHtcblx0XHR0YXJnZXRWaXNpYmxlID0gaXNWaXNpYmxlKGZhY2V0TW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVGFyZ2V0Py4kdGFyZ2V0KTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGlzVmlzaWJsZShmYWNldE1vZGVsUGF0aC50YXJnZXRPYmplY3QpLCB0YXJnZXRWaXNpYmxlKSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMkVBOztFQVlBO0FBQ0E7QUFDQTs7RUFrQ08sTUFBTUEsYUFBYSxHQUFHO0lBQzVCO0FBQ0Q7QUFDQTtBQUNBO0lBQ0NDLFFBQVEsRUFBRSxVQUFVO0lBQ3BCO0FBQ0Q7QUFDQTtBQUNBO0lBQ0NDLE9BQU8sRUFBRSxTQUFTO0lBQ2xCO0FBQ0Q7QUFDQTtBQUNBO0lBQ0NDLFFBQVEsRUFBRSxVQUFVO0lBQ3BCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsZUFBZSxFQUFFLGlCQUFpQjtJQUNsQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLGdCQUFnQixFQUFFLGtCQUFrQjtJQUNwQztBQUNEO0FBQ0E7QUFDQTtJQUNDQyxRQUFRLEVBQUU7RUFDWCxDQUFDO0VBQUNDLFFBQUEsQ0FBQVAsYUFBQSxHQUFBQSxhQUFBO0VBRUssTUFBTVEsY0FBYyxHQUFHLFNBQUFBLENBQzdCQyxvQkFBaUcsRUFDbkY7SUFDZCxPQUFPQyxvQkFBb0IsQ0FBQ0YsY0FBYyxDQUFDQyxvQkFBb0IsQ0FBQ0UsWUFBWSxFQUFFRixvQkFBb0IsQ0FBQztFQUNwRyxDQUFDO0VBQUNGLFFBQUEsQ0FBQUMsY0FBQSxHQUFBQSxjQUFBO0VBQ0ssTUFBTUksNkJBQTZCLEdBQUcsU0FBQUEsQ0FDNUNDLGFBQXVDLEVBQ3ZDQyxtQkFBdUYsRUFDdkZMLG9CQUFrRCxFQUdkO0lBQUEsSUFGcENNLFVBQTZDLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHRyxFQUFFLENBQUNDLFVBQVU7SUFBQSxJQUM3REMsMEJBQTBCLEdBQUFMLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLElBQUk7SUFFakMsT0FBT00scUJBQXFCLENBQzNCVCxhQUFhLEVBQ2JDLG1CQUFtQixFQUNuQkwsb0JBQW9CLEVBQ3BCLElBQUksRUFDSk0sVUFBVSxFQUNWTSwwQkFDRCxDQUFDO0VBQ0YsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVRBZCxRQUFBLENBQUFLLDZCQUFBLEdBQUFBLDZCQUFBO0VBVU8sTUFBTVUscUJBQXFCLEdBQUcsU0FBQUEsQ0FDcENULGFBQXVDLEVBTWdDO0lBQUEsSUFMdkVDLG1CQUF1RixHQUFBRSxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBR0UsU0FBUztJQUFBLElBQ25HVCxvQkFBa0QsR0FBQU8sU0FBQSxDQUFBQyxNQUFBLE9BQUFELFNBQUEsTUFBQUUsU0FBQTtJQUFBLElBQ2xESyxTQUFTLEdBQUFQLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEtBQUs7SUFBQSxJQUNqQkQsVUFBNkMsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUdHLEVBQUUsQ0FBQ0MsVUFBVTtJQUFBLElBQzdEQywwQkFBMEIsR0FBQUwsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsSUFBSTtJQUVqQyxNQUFNUSxZQUFZLEdBQUdDLGdCQUFnQixDQUFDaEIsb0JBQW9CLENBQUM7SUFDM0QsSUFBSSxDQUFDSSxhQUFhLElBQUksT0FBT0EsYUFBYSxLQUFLLFFBQVEsRUFBRTtNQUN4RCxPQUFPYSxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7SUFDaEM7SUFDQSxJQUFJQywyQkFBOEQsR0FBR0MsUUFBUSxDQUFDLElBQUksQ0FBQztJQUNuRixJQUFJZCxtQkFBbUIsS0FBS0ksU0FBUyxJQUFJLENBQUNXLFVBQVUsQ0FBQ2YsbUJBQW1CLENBQUMsRUFBRTtNQUMxRWEsMkJBQTJCLEdBQUdHLE1BQU0sQ0FBQ0MsdUJBQXVCLENBQUNqQixtQkFBbUIsQ0FBQyxFQUFFLEtBQUssRUFBRUMsVUFBVSxDQUFDO0lBQ3RHLENBQUMsTUFBTSxJQUFJRCxtQkFBbUIsS0FBS0ksU0FBUyxFQUFFO01BQzdDUywyQkFBMkIsR0FBR1osVUFBVTtJQUN6QztJQUVBLE1BQU1pQixTQUFTLEdBQUdDLDBCQUEwQixDQUFDcEIsYUFBYSxDQUFDLEdBQUdBLGFBQWEsQ0FBQ3FCLE9BQU8sR0FBR3JCLGFBQWE7O0lBRW5HO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsTUFBTXNCLHlCQUF5QixHQUFHQyxlQUFlLENBQUMzQixvQkFBb0IsRUFBRTtNQUN2RTRCLFlBQVksRUFBRXhCLGFBQWE7TUFDM0J5QixXQUFXLEVBQUVBLENBQUNDLElBQVksRUFBRUMsZUFBeUIsS0FDcERDLG9CQUFvQixDQUFDRixJQUFJLEVBQUU5QixvQkFBb0IsQ0FBQ2lDLGNBQWMsRUFBRUYsZUFBZTtJQUNqRixDQUFDLENBQUM7SUFDRixJQUFJZCxpQkFBaUIsQ0FBQ1MseUJBQXlCLENBQUMsS0FBSyxPQUFPLElBQUlkLDBCQUEwQixFQUFFO01BQzNGLE9BQU9FLFNBQVMsR0FBR1kseUJBQXlCLEdBQUcsT0FBTztJQUN2RDtJQUNBLE1BQU1RLGtCQUFrQixHQUN2QlgsU0FBUyxLQUFLZCxTQUFTLEdBQ3BCWSxNQUFNLENBQ05jLEVBQUUsQ0FDREMsR0FBRyxDQUFDQyxHQUFHLENBQUNYLHlCQUF5QixDQUFDLEVBQUVkLDBCQUEwQixDQUFDLEVBQy9EMEIsVUFBVSxDQUFDZixTQUFTLENBQUMsRUFDckJnQixLQUFLLENBQUNoQixTQUFTLENBQUMsRUFDaEJpQixXQUFXLENBQUNqQixTQUFTLENBQUMsRUFDdEJELHVCQUF1QixDQUFDQyxTQUFTLEVBQUVSLFlBQVksQ0FDaEQsQ0FBQyxFQUNETSxNQUFNLENBQUNjLEVBQUUsQ0FBQ0csVUFBVSxDQUFDZixTQUFTLENBQUMsRUFBRUQsdUJBQXVCLENBQUNDLFNBQVMsRUFBRVIsWUFBWSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUVMLEVBQUUsQ0FBQytCLGtCQUFrQixDQUFDLEVBQ2pIbkMsVUFDQSxDQUFDLEdBQ0RvQyxzQkFBc0I7SUFDMUIsSUFBSTVCLFNBQVMsRUFBRTtNQUNkLE9BQU9zQixHQUFHLENBQUNGLGtCQUFrQixFQUFFaEIsMkJBQTJCLENBQUM7SUFDNUQ7SUFDQSxPQUFPRCxpQkFBaUIsQ0FBQ21CLEdBQUcsQ0FBQ0Ysa0JBQWtCLEVBQUVoQiwyQkFBMkIsQ0FBQyxDQUFDO0VBQy9FLENBQUM7RUFBQ3BCLFFBQUEsQ0FBQWUscUJBQUEsR0FBQUEscUJBQUE7RUFFSyxNQUFNOEIsMEJBQTBCLEdBQUcsU0FBQUEsQ0FDekNDLG1CQUFrRCxFQUNsREMsU0FBZ0IsRUFDYztJQUM5QixNQUFNQyxVQUFVLEdBQUdDLG1CQUFtQixDQUFDSCxtQkFBbUIsQ0FBQztJQUMzRCxNQUFNSSxrQkFBa0IsR0FBR0MsV0FBVyxDQUFDLDRCQUE0QkgsVUFBVSxFQUFFLEVBQUUsVUFBVSxDQUFDO0lBQzVGLE1BQU1JLElBQUksR0FBR04sbUJBQW1CLEVBQUVPLGVBQWUsRUFBRUMsZ0JBQWdCLEVBQUVGLElBQUk7SUFDekUsTUFBTUcsZUFBb0QsR0FBRyxFQUFFO0lBQy9ESCxJQUFJLEVBQUVJLE9BQU8sQ0FBQyxVQUFVQyxHQUFHLEVBQUU7TUFDNUIsTUFBTUMsYUFBYSxHQUFHUCxXQUFXLENBQUNNLEdBQUcsQ0FBQ0UsSUFBSSxDQUFDO01BQzNDSixlQUFlLENBQUNLLElBQUksQ0FBQ0YsYUFBYSxDQUFDO0lBQ3BDLENBQUMsQ0FBQztJQUNGLE9BQU9HLFlBQVksQ0FBQyxDQUFDWCxrQkFBa0IsRUFBRSxHQUFHSyxlQUFlLENBQUMsRUFBRVIsU0FBUyxDQUFDO0VBQ3pFLENBQUM7RUFBQy9DLFFBQUEsQ0FBQTZDLDBCQUFBLEdBQUFBLDBCQUFBO0VBQ0ssTUFBTWlCLDRCQUE0QixHQUFHLFNBQUFBLENBQzNDeEQsYUFBdUMsRUFDdkNDLG1CQUE0RSxFQUM1RUwsb0JBQW1ELEVBQ2Y7SUFDcEMsT0FBTzZELG9CQUFvQixDQUFDekQsYUFBYSxFQUFFQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUVMLG9CQUFvQixDQUFDO0VBQzVGLENBQUM7RUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUEFGLFFBQUEsQ0FBQThELDRCQUFBLEdBQUFBLDRCQUFBO0VBUU8sTUFBTUMsb0JBQW9CLEdBQUcsU0FBQUEsQ0FDbkN6RCxhQUF1QyxFQUN2Q0MsbUJBQTRFLEVBR0w7SUFBQSxJQUZ2RVMsU0FBUyxHQUFBUCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxLQUFLO0lBQUEsSUFDakJQLG9CQUFtRCxHQUFBTyxTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBRSxTQUFBO0lBRW5ELElBQUksQ0FBQ0wsYUFBYSxJQUFJLE9BQU9BLGFBQWEsS0FBSyxRQUFRLEVBQUU7TUFDeEQsT0FBT2EsaUJBQWlCLENBQUMsSUFBSSxDQUFDO0lBQy9CO0lBQ0EsSUFBSUYsWUFBWTtJQUNoQixJQUFJZixvQkFBb0IsRUFBRTtNQUN6QmUsWUFBWSxHQUFHQyxnQkFBZ0IsQ0FBQ2hCLG9CQUFvQixDQUFDO0lBQ3REO0lBQ0EsSUFBSThELDBCQUE2RCxHQUFHM0MsUUFBUSxDQUFDLElBQUksQ0FBQztJQUNsRixJQUFJZCxtQkFBbUIsS0FBS0ksU0FBUyxJQUFJLENBQUNXLFVBQVUsQ0FBQ2YsbUJBQW1CLENBQUMsRUFBRTtNQUMxRXlELDBCQUEwQixHQUFHekMsTUFBTSxDQUFDMEMsb0JBQW9CLENBQUMxRCxtQkFBbUIsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7SUFDNUY7SUFFQSxNQUFNa0IsU0FBUyxHQUFHQywwQkFBMEIsQ0FBQ3BCLGFBQWEsQ0FBQyxHQUFHQSxhQUFhLENBQUNxQixPQUFPLEdBQUdyQixhQUFhO0lBQ25HO0lBQ0E7SUFDQSxNQUFNNEQsaUJBQWlCLEdBQ3RCekMsU0FBUyxLQUFLZCxTQUFTLEdBQUdZLE1BQU0sQ0FBQzBDLG9CQUFvQixDQUFDeEMsU0FBUyxFQUFFUixZQUFZLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcyQixzQkFBc0I7SUFDdEgsSUFBSTVCLFNBQVMsRUFBRTtNQUNkLE9BQU9zQixHQUFHLENBQUM0QixpQkFBaUIsRUFBRUYsMEJBQTBCLENBQUM7SUFDMUQ7SUFDQSxPQUFPN0MsaUJBQWlCLENBQUNtQixHQUFHLENBQUM0QixpQkFBaUIsRUFBRUYsMEJBQTBCLENBQUMsQ0FBQztFQUM3RSxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBVEFoRSxRQUFBLENBQUErRCxvQkFBQSxHQUFBQSxvQkFBQTtFQVVPLE1BQU1JLFdBQVcsR0FBRyxTQUFBQSxDQUMxQnJDLFlBQXNDLEVBQ3RDZ0IsbUJBQWlELEVBS3FCO0lBQUEsSUFKdEVzQixlQUFlLEdBQUEzRCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxLQUFLO0lBQUEsSUFDdkI0RCxRQUFRLEdBQUE1RCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxLQUFLO0lBQUEsSUFDaEI2RCxrQkFBc0YsR0FBQTdELFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHRSxTQUFTO0lBQUEsSUFDbEdILFVBQTZDLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHRyxFQUFFLENBQUNDLFVBQVU7SUFFN0QsSUFDQyxDQUFDaUIsWUFBWSxJQUNiLE9BQU9BLFlBQVksS0FBSyxRQUFRLElBQy9CLENBQUNSLFVBQVUsQ0FBQ2dELGtCQUFrQixDQUFDLElBQUlBLGtCQUFrQixFQUFFQyxLQUFLLDZEQUFtRCxFQUMvRztNQUNELE9BQU85RSxhQUFhLENBQUNFLE9BQU87SUFDN0I7SUFDQSxNQUFNNkUsUUFBUSxHQUFHOUMsMEJBQTBCLENBQUNJLFlBQVksQ0FBQyxHQUFHQSxZQUFZLENBQUNILE9BQU8sR0FBR0csWUFBWTtJQUMvRixJQUFJLENBQUNSLFVBQVUsQ0FBQ2tELFFBQVEsQ0FBQyxFQUFFO01BQzFCLE9BQU8vRSxhQUFhLENBQUNFLE9BQU87SUFDN0I7SUFDQSxNQUFNc0IsWUFBWSxHQUFHQyxnQkFBZ0IsQ0FBQzRCLG1CQUFtQixDQUFDO0lBQzFELE1BQU1sQix5QkFBeUIsR0FBR0MsZUFBZSxDQUFDaUIsbUJBQW1CLEVBQUU7TUFDdEVoQixZQUFZLEVBQUUwQyxRQUFRO01BQ3RCekMsV0FBVyxFQUFFQSxDQUFDQyxJQUFZLEVBQUVDLGVBQXlCLEtBQ3BEQyxvQkFBb0IsQ0FBQ0YsSUFBSSxFQUFFYyxtQkFBbUIsQ0FBQ1gsY0FBYyxFQUFFRixlQUFlO0lBQ2hGLENBQUMsQ0FBQzs7SUFFRjtJQUNBLE1BQU1HLGtCQUFrQixHQUFHL0IsNkJBQTZCLENBQUN5QixZQUFZLEVBQUV3QyxrQkFBa0IsRUFBRXhCLG1CQUFtQixFQUFFdEMsVUFBVSxFQUFFLEtBQUssQ0FBQztJQUVsSSxNQUFNMEQsaUJBQWlCLEdBQUdKLDRCQUE0QixDQUFDaEMsWUFBWSxFQUFFd0Msa0JBQWtCLEVBQUV4QixtQkFBbUIsQ0FBQztJQUM3RyxNQUFNMkIsMEJBQTBCLEdBQUdDLDZCQUE2QixDQUFDRixRQUFRLENBQUM7SUFDMUUsTUFBTUcsWUFBWSxHQUFHRiwwQkFBMEIsSUFBSUcseUJBQXlCLENBQUNKLFFBQVEsQ0FBQztJQUN0RixJQUFJSyxnQkFBa0QsR0FBR3hELFFBQVEsQ0FBQzVCLGFBQWEsQ0FBQ0csUUFBUSxDQUFDO0lBQ3pGLElBQUkrRSxZQUFZLEVBQUU7TUFDakIsTUFBTUcsY0FBYyxHQUFHQyxvQkFBb0IsQ0FBQ0osWUFBWSxFQUFFMUQsWUFBWSxDQUFDO01BQ3ZFNEQsZ0JBQWdCLEdBQUd0RCxNQUFNLENBQ3hCYyxFQUFFLENBQUN5QyxjQUFjLEVBQUV0QyxVQUFVLENBQUNtQyxZQUFZLENBQUMsRUFBRXJDLEdBQUcsQ0FBQ0ksV0FBVyxDQUFDaUMsWUFBWSxDQUFDLEVBQUVwQyxHQUFHLENBQUMzQixFQUFFLENBQUMrQixrQkFBa0IsQ0FBQyxDQUFDLEVBQUV5QixlQUFlLENBQUMsRUFDekg3QyxNQUFNLENBQUMsQ0FBQ3lELFVBQVUsQ0FBQ0YsY0FBYyxDQUFDLElBQUlBLGNBQWMsRUFBRXJGLGFBQWEsQ0FBQ0ssZ0JBQWdCLEVBQUVMLGFBQWEsQ0FBQ0ksZUFBZSxDQUFDLEVBQ3BISixhQUFhLENBQUNHLFFBQ2YsQ0FBQztJQUNGO0lBQ0EsSUFBSSxDQUFDK0UsWUFBWSxLQUFLSCxRQUFRLEVBQUVTLFdBQVcsRUFBRUMsUUFBUSxFQUFFQyxXQUFXLElBQUlYLFFBQVEsRUFBRVMsV0FBVyxFQUFFQyxRQUFRLEVBQUVFLElBQUksQ0FBQyxFQUFFO01BQzdHO01BQ0FQLGdCQUFnQixHQUFHeEQsUUFBUSxDQUFDNUIsYUFBYSxDQUFDSSxlQUFlLENBQUM7SUFDM0Q7SUFDQSxJQUFJd0Ysa0JBQWtCO0lBQ3RCLElBQUlmLGtCQUFrQixJQUFJM0QsU0FBUyxJQUFJLENBQUNXLFVBQVUsQ0FBQ2dELGtCQUFrQixDQUFDLEVBQUU7TUFDdkVlLGtCQUFrQixHQUFHaEQsRUFBRSxDQUFDMEMsb0JBQW9CLENBQUNQLFFBQVEsRUFBRXZELFlBQVksQ0FBQyxFQUFFOEQsb0JBQW9CLENBQUNULGtCQUFrQixDQUFDLENBQUM7SUFDaEgsQ0FBQyxNQUFNO01BQ05lLGtCQUFrQixHQUFHTixvQkFBb0IsQ0FBQ1AsUUFBUSxFQUFFdkQsWUFBWSxDQUFDO0lBQ2xFOztJQUVBO0lBQ0EsTUFBTXFFLGtCQUFrQixHQUFHL0QsTUFBTSxDQUNoQ2MsRUFBRSxDQUFDVCx5QkFBeUIsRUFBRWhCLEVBQUUsQ0FBQytCLGtCQUFrQixDQUFDLEVBQ3BEcEIsTUFBTSxDQUNMMkMsaUJBQWlCLEVBQ2pCM0MsTUFBTSxDQUNMYSxrQkFBa0IsRUFDbEJ5QyxnQkFBZ0IsRUFDaEJ0RCxNQUFNLENBQ0xlLEdBQUcsQ0FBQyxDQUFDMEMsVUFBVSxDQUFDSyxrQkFBa0IsQ0FBQyxJQUFJQSxrQkFBa0IsRUFBRTdFLFVBQVUsQ0FBQyxFQUN0RWYsYUFBYSxDQUFDTSxRQUFRLEVBQ3RCTixhQUFhLENBQUNFLE9BQ2YsQ0FDRCxDQUFDLEVBQ0Q0QixNQUFNLENBQUNmLFVBQVUsRUFBRWYsYUFBYSxDQUFDQyxRQUFRLEVBQUVELGFBQWEsQ0FBQ0UsT0FBTyxDQUNqRSxDQUFDLEVBQ0RGLGFBQWEsQ0FBQ0UsT0FDZixDQUFDO0lBQ0QsSUFBSTBFLFFBQVEsRUFBRTtNQUNiLE9BQU9pQixrQkFBa0I7SUFDMUI7SUFDQSxPQUFPbkUsaUJBQWlCLENBQUNtRSxrQkFBa0IsQ0FBQztFQUM3QyxDQUFDO0VBQUN0RixRQUFBLENBQUFtRSxXQUFBLEdBQUFBLFdBQUE7RUFFSyxNQUFNb0IsZ0NBQWdDLEdBQUcsU0FBQUEsQ0FDL0NDLDRCQUF1RSxFQUNwQztJQUNuQyxNQUFNQyxtQkFBbUIsR0FBR0QsNEJBQTRCLEVBQUVwRixZQUFZO0lBQ3RFLE9BQU9xRixtQkFBbUIsSUFBSUMsMkJBQTJCLENBQUNELG1CQUFtQixDQUFDO0VBQy9FLENBQUM7RUFBQ3pGLFFBQUEsQ0FBQXVGLGdDQUFBLEdBQUFBLGdDQUFBO0VBRUssTUFBTUcsMkJBQTJCLEdBQUcsU0FBQUEsQ0FBVUQsbUJBQTZCLEVBQW9DO0lBQ3JILE1BQU1FLFFBQVEsR0FBR0YsbUJBQW1CLEVBQUVSLFdBQVcsRUFBRUMsUUFBUSxFQUFFQyxXQUFXO0lBQ3hFLE1BQU1TLE9BQU8sR0FBR0QsUUFBUSxHQUFHQSxRQUFRLEdBQUdGLG1CQUFtQixFQUFFUixXQUFXLEVBQUVDLFFBQVEsRUFBRUUsSUFBSTtJQUN0RixJQUFJUSxPQUFPLEVBQUU7TUFDWixPQUFPekUsaUJBQWlCLENBQUNrQixFQUFFLENBQUN3RCxRQUFRLENBQUNDLDJCQUEyQixDQUFDRixPQUFPLENBQUMsQ0FBQyxFQUFFckQsR0FBRyxDQUFDM0IsRUFBRSxDQUFDbUYsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM5RixDQUFDLE1BQU07TUFDTixPQUFPNUUsaUJBQWlCLENBQUNFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QztFQUNELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQXJCLFFBQUEsQ0FBQTBGLDJCQUFBLEdBQUFBLDJCQUFBO0VBT08sTUFBTU0sZUFBZSxHQUFHLFNBQUFBLENBQzlCMUYsYUFBdUMsRUFDdkMyRixrQkFBMEIsRUFDMUJDLGlCQUFtRCxFQUNoQjtJQUNuQyxNQUFNekUsU0FBUyxHQUFJQywwQkFBMEIsQ0FBQ3BCLGFBQWEsQ0FBQyxJQUFJQSxhQUFhLENBQUNxQixPQUFPLElBQU1yQixhQUEwQjtJQUNySCxNQUFNNkYsaUJBQWlCLEdBQUcxRSxTQUFTLENBQUN3RCxXQUFXLEVBQUVtQixNQUFNLEVBQUVDLElBQUksS0FBSzFGLFNBQVM7SUFFM0UsSUFBSTJGLFlBQVksQ0FBQzdFLFNBQVMsQ0FBQyxFQUFFO01BQzVCLE9BQU9OLGlCQUFpQixDQUFDOEUsa0JBQWtCLENBQUM7SUFDN0MsQ0FBQyxNQUFNO01BQ04sT0FBT0UsaUJBQWlCLEdBQUdoRixpQkFBaUIsQ0FBQ0ksTUFBTSxDQUFDZ0YsS0FBSyxDQUFDTCxpQkFBaUIsRUFBRSxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUVELGtCQUFrQixDQUFDLENBQUMsR0FBRyxPQUFPO0lBQ2xJO0VBQ0QsQ0FBQztFQUFDakcsUUFBQSxDQUFBZ0csZUFBQSxHQUFBQSxlQUFBO0VBRUssTUFBTVEsYUFBYSxHQUFHLFNBQUFBLENBQVUvRSxTQUE0QyxFQUFFZ0YsUUFBNEIsRUFBYztJQUM5SCxNQUFNQyxjQUFjLEdBQUdDLGdCQUFnQixDQUFFbEYsU0FBUyxFQUFlbUYsSUFBSSxDQUFDLEtBQUtILFFBQVEsR0FBR0UsZ0JBQWdCLENBQUNGLFFBQVEsQ0FBQyxHQUFHOUYsU0FBUyxDQUFDO0lBQzdILE1BQU1rRyxrQkFBOEIsR0FBRztNQUN0Q0QsSUFBSSxFQUFFRixjQUFjLENBQUNFLElBQUk7TUFDekJFLFdBQVcsRUFBRSxDQUFDLENBQUM7TUFDZkMsYUFBYSxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUNELElBQUl6RixVQUFVLENBQUNHLFNBQVMsQ0FBQyxFQUFFO01BQzFCb0Ysa0JBQWtCLENBQUNDLFdBQVcsR0FBRztRQUNoQ0UsS0FBSyxFQUFFTixjQUFjLENBQUNJLFdBQVcsRUFBRUcsTUFBTSxHQUFHeEYsU0FBUyxDQUFDdUYsS0FBSyxHQUFHckcsU0FBUztRQUN2RXVHLFNBQVMsRUFBRVIsY0FBYyxDQUFDSSxXQUFXLEVBQUVLLFVBQVUsR0FBRzFGLFNBQVMsQ0FBQ3lGLFNBQVMsR0FBR3ZHLFNBQVM7UUFDbkZ5RyxTQUFTLEVBQUVWLGNBQWMsQ0FBQ0ksV0FBVyxFQUFFTyxVQUFVLEdBQUc1RixTQUFTLENBQUMyRixTQUFTLEdBQUd6RyxTQUFTO1FBQ25GMkcsUUFBUSxFQUFFWixjQUFjLENBQUNJLFdBQVcsRUFBRVMsU0FBUyxHQUFHOUYsU0FBUyxDQUFDNkYsUUFBUSxHQUFHM0csU0FBUztRQUNoRjZHLE9BQU8sRUFDTmQsY0FBYyxDQUFDSSxXQUFXLEdBQUcsMkNBQTJDLENBQUMsSUFDekUsQ0FBQ1csS0FBSyxDQUFDaEcsU0FBUyxDQUFDd0QsV0FBVyxFQUFFeUMsVUFBVSxFQUFFQyxPQUFPLENBQUMsR0FDL0MsR0FBR2xHLFNBQVMsQ0FBQ3dELFdBQVcsRUFBRXlDLFVBQVUsRUFBRUMsT0FBTyxFQUFFLEdBQy9DaEgsU0FBUztRQUNiaUgsT0FBTyxFQUNObEIsY0FBYyxDQUFDSSxXQUFXLEdBQUcsMkNBQTJDLENBQUMsSUFDekUsQ0FBQ1csS0FBSyxDQUFDaEcsU0FBUyxDQUFDd0QsV0FBVyxFQUFFeUMsVUFBVSxFQUFFRyxPQUFPLENBQUMsR0FDL0MsR0FBR3BHLFNBQVMsQ0FBQ3dELFdBQVcsRUFBRXlDLFVBQVUsRUFBRUcsT0FBTyxFQUFFLEdBQy9DbEgsU0FBUztRQUNibUgsZUFBZSxFQUNkakIsa0JBQWtCLENBQUNELElBQUksS0FBSyxnQ0FBZ0MsSUFDNURGLGNBQWMsQ0FBQ0ksV0FBVyxHQUFHLGlEQUFpRCxDQUFDLElBQy9FckYsU0FBUyxDQUFDd0QsV0FBVyxFQUFFbUIsTUFBTSxFQUFFMkIsZUFBZSxHQUMzQyxJQUFJLEdBQ0pwSCxTQUFTO1FBQ2JxSCxFQUFFLEVBQUV0QixjQUFjLENBQUNJLFdBQVcsRUFBRW1CLEdBQUcsR0FBRyxJQUFJLEdBQUd0SDtNQUM5QyxDQUFDO0lBQ0Y7SUFDQWtHLGtCQUFrQixDQUFDRSxhQUFhLEdBQUc7TUFDbENtQixhQUFhLEVBQ1pyQixrQkFBa0IsRUFBRUQsSUFBSSxFQUFFdUIsT0FBTyxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxJQUN0RXRCLGtCQUFrQixFQUFFRCxJQUFJLEVBQUV1QixPQUFPLENBQUMsZ0NBQWdDLENBQUMsS0FBSyxDQUFDLEdBQ3RFLEtBQUssR0FDTHhILFNBQVM7TUFDYnlILFdBQVcsRUFDVnZCLGtCQUFrQixFQUFFRCxJQUFJLEVBQUV1QixPQUFPLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLElBQ3RFdEIsa0JBQWtCLEVBQUVELElBQUksRUFBRXVCLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsR0FDdEUsRUFBRSxHQUNGeEgsU0FBUztNQUNiMEgscUJBQXFCLEVBQUV4QixrQkFBa0IsQ0FBQ0QsSUFBSSxLQUFLLGdDQUFnQyxHQUFHLElBQUksR0FBR2pHO0lBQzlGLENBQUM7SUFDRCxPQUFPa0csa0JBQWtCO0VBQzFCLENBQUM7RUFBQzdHLFFBQUEsQ0FBQXdHLGFBQUEsR0FBQUEsYUFBQTtFQUVLLE1BQU04QixvQkFBb0IsR0FBRyxTQUFBQSxDQUFVOUQsUUFBOEIsRUFBZ0M7SUFDM0csT0FBT0EsUUFBUSxFQUFFUyxXQUFXLEVBQUVyRSxFQUFFLEVBQUUySCxpQ0FBaUMsSUFDbEUvRCxRQUFRLEVBQUVTLFdBQVcsRUFBRXJFLEVBQUUsQ0FBQzJILGlDQUFpQyxFQUFFQyxPQUFPLENBQUMsQ0FBQyxHQUNwRTtNQUFFQyxzQkFBc0IsRUFBRTtJQUFLLENBQUMsR0FDaEMsQ0FBQyxDQUFDO0VBQ04sQ0FBQztFQUFDekksUUFBQSxDQUFBc0ksb0JBQUEsR0FBQUEsb0JBQUE7RUFFSyxNQUFNSSw0QkFBNEIsR0FBRyxTQUFBQSxDQUMzQ0Msc0JBQXFELEVBQ3JEQyx5QkFBMkQsRUFDM0RDLG9CQUE4QixFQUM5QjlCLGFBSUMsRUFDRCtCLGNBQXdCLEVBQ3hCQyxvQkFBOEIsRUFDSztJQUNuQyxNQUFNdEQsbUJBQW1CLEdBQUdrRCxzQkFBc0IsQ0FBQ3ZJLFlBQXdCO0lBQzNFLElBQUk0SSxJQUFJLEdBQUd2RCxtQkFBbUIsQ0FBQ1IsV0FBVyxFQUFFQyxRQUFRLEVBQUVFLElBQUk7SUFDMUQsTUFBTTZELGdCQUFnQixHQUFHL0gsZ0JBQWdCLENBQUN5SCxzQkFBc0IsQ0FBQztJQUNqRUMseUJBQXlCLEdBQUdNLHlCQUF5QixDQUFDekQsbUJBQW1CLEVBQUVtRCx5QkFBeUIsQ0FBQztJQUNyRyxJQUFJTyxvQkFBb0IsQ0FBQzFELG1CQUFtQixDQUFDLEVBQUU7TUFDOUMsSUFBSXNCLGFBQWEsRUFBRXFDLFdBQVcsS0FBSyxLQUFLLEVBQUU7UUFDekMsT0FBT1IseUJBQXlCO01BQ2pDO01BQ0EsT0FBTy9FLFlBQVksQ0FBQyxDQUFDK0UseUJBQXlCLENBQUMsRUFBRVMsZUFBZSxDQUFDQyxvQkFBb0IsQ0FBQztJQUN2RjtJQUNBLE1BQU1DLFdBQVcsR0FBR1AsSUFBSSxHQUFHLDhCQUE4QixHQUFHLGtDQUFrQztJQUM5RkEsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLElBQUksR0FBSXZELG1CQUFtQixDQUFDUixXQUFXLEVBQUVDLFFBQVEsRUFBRUMsV0FBMkM7SUFDNUcsTUFBTXFFLHFCQUFxQixHQUMxQjlILDBCQUEwQixDQUFDc0gsSUFBSSxDQUFDLElBQUlBLElBQUksQ0FBQ3JILE9BQU8sR0FDN0N1SCx5QkFBeUIsQ0FBQ0YsSUFBSSxDQUFDckgsT0FBTyxFQUFFbUUsMkJBQTJCLENBQUNrRCxJQUFJLEVBQUVDLGdCQUFnQixDQUFDLEVBQUVKLG9CQUFvQixDQUFDLEdBQ2xIL0MsMkJBQTJCLENBQUNrRCxJQUFJLEVBQUVDLGdCQUFnQixDQUFDO0lBQ3ZELElBQUlRLGlCQUEyRDtJQUMvRCxJQUFJRixXQUFXLEtBQUssOEJBQThCLEVBQUU7TUFDbkQsSUFBSVQsY0FBYyxJQUFJLENBQUNDLG9CQUFvQixFQUFFO1FBQzVDVSxpQkFBaUIsR0FBRztVQUFFaEIsc0JBQXNCLEVBQUU7UUFBSyxDQUFDO01BQ3JELENBQUMsTUFBTSxJQUFJLENBQUNLLGNBQWMsRUFBRTtRQUMzQjtRQUNBVyxpQkFBaUIsR0FBR25CLG9CQUFvQixDQUFDSyxzQkFBc0IsQ0FBQ3ZJLFlBQVksQ0FBQztNQUM5RTtJQUNEO0lBQ0EsSUFBSTBJLGNBQWMsRUFBRTtNQUNuQi9CLGFBQWEsR0FBRztRQUFFLEdBQUdBLGFBQWE7UUFBRXFCLFdBQVcsRUFBRTtNQUFHLENBQUM7SUFDdEQ7SUFFQSxPQUFPc0Isa0JBQWtCLENBQUMsQ0FBQ2QseUJBQXlCLEVBQUVZLHFCQUFxQixDQUFDLEVBQUVELFdBQVcsRUFBRTVJLFNBQVMsRUFBRW9HLGFBQWEsRUFBRTBDLGlCQUFpQixDQUFDO0VBQ3hJLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEF6SixRQUFBLENBQUEwSSw0QkFBQSxHQUFBQSw0QkFBQTtFQU1PLE1BQU1pQix1QkFBdUIsR0FBRyxTQUFBQSxDQUN0Q2hCLHNCQUFzRSxFQUN0RUMseUJBQTJELEVBQ1c7SUFDdEUsTUFBTW5ELG1CQUFtQixHQUFHa0Qsc0JBQXNCLENBQUN2SSxZQUF3QjtJQUMzRSxNQUFNNkksZ0JBQWdCLEdBQUcvSCxnQkFBZ0IsQ0FBQ3lILHNCQUFzQixDQUFDO0lBQ2pFLE1BQU01QixhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCNkIseUJBQXlCLEdBQUdNLHlCQUF5QixDQUFDekQsbUJBQW1CLEVBQUVtRCx5QkFBeUIsQ0FBQztJQUNyRyxNQUFNVyxXQUFXLEdBQUcsdUJBQXVCO0lBQzNDLE1BQU1LLE9BQU8sR0FBR25FLG1CQUFtQixFQUFFUixXQUFXLEVBQUV5QyxVQUFVLEVBQUVDLE9BQU8sRUFBRWtDLEtBQUssR0FDekVwRSxtQkFBbUIsRUFBRVIsV0FBVyxFQUFFeUMsVUFBVSxFQUFFQyxPQUFPLEVBQUVrQyxLQUFLLEdBQzVEcEUsbUJBQW1CLEVBQUVSLFdBQVcsRUFBRXlDLFVBQVUsRUFBRUMsT0FBTztJQUN4RCxNQUFNbUMsT0FBTyxHQUFHckUsbUJBQW1CLEVBQUVSLFdBQVcsRUFBRXlDLFVBQVUsRUFBRUcsT0FBTyxFQUFFZ0MsS0FBSyxHQUN6RXBFLG1CQUFtQixFQUFFUixXQUFXLEVBQUV5QyxVQUFVLEVBQUVHLE9BQU8sRUFBRWdDLEtBQUssR0FDNURwRSxtQkFBbUIsRUFBRVIsV0FBVyxFQUFFeUMsVUFBVSxFQUFFRyxPQUFPO0lBQ3hELE1BQU1rQyxhQUFhLEdBQ2xCSCxPQUFPLElBQUlsSSwwQkFBMEIsQ0FBQ2tJLE9BQU8sQ0FBQyxHQUMzQ1YseUJBQXlCLENBQ3pCekQsbUJBQW1CLEVBQUVSLFdBQVcsRUFBRXlDLFVBQVUsRUFBRUMsT0FBTyxFQUNyRDdCLDJCQUEyQixDQUFDTCxtQkFBbUIsRUFBRVIsV0FBVyxFQUFFeUMsVUFBVSxFQUFFQyxPQUFPLEVBQUVzQixnQkFBZ0IsQ0FDbkcsQ0FBQyxHQUNEVyxPQUFPO0lBQ1gsTUFBTUksYUFBYSxHQUNsQkYsT0FBTyxJQUFJcEksMEJBQTBCLENBQUNvSSxPQUFPLENBQUMsR0FDM0NaLHlCQUF5QixDQUN6QnpELG1CQUFtQixFQUFFUixXQUFXLEVBQUV5QyxVQUFVLEVBQUVHLE9BQU8sRUFDckQvQiwyQkFBMkIsQ0FBQ0wsbUJBQW1CLEVBQUVSLFdBQVcsRUFBRXlDLFVBQVUsRUFBRUcsT0FBTyxFQUFFb0IsZ0JBQWdCLENBQ25HLENBQUMsR0FDRGEsT0FBTztJQUVYLE9BQ0MsQ0FBQ0MsYUFBYSxJQUFJQyxhQUFhLEtBQy9CTixrQkFBa0IsQ0FBQyxDQUFDZCx5QkFBeUIsRUFBRW1CLGFBQWEsRUFBRUMsYUFBYSxDQUFDLEVBQUVULFdBQVcsRUFBRTVJLFNBQVMsRUFBRW9HLGFBQWEsQ0FBQztFQUV0SCxDQUFDO0VBQUMvRyxRQUFBLENBQUEySix1QkFBQSxHQUFBQSx1QkFBQTtFQUVLLE1BQU1NLDJCQUEyQixHQUFHLFNBQUFBLENBQzFDdEIsc0JBQWlFLEVBQ2pFRyxjQUF1QixFQUN2QkMsb0JBQTZCLEVBQ2U7SUFDNUMsTUFBTXRELG1CQUFtQixHQUFHa0Qsc0JBQXNCLEVBQUV2SSxZQUFZO0lBQ2hFLElBQUksQ0FBQ3FGLG1CQUFtQixFQUFFO01BQ3pCLE9BQU8sRUFBRTtJQUNWO0lBRUEsSUFBSXVELElBQUksR0FBR3ZELG1CQUFtQixDQUFDUixXQUFXLEVBQUVDLFFBQVEsRUFBRUUsSUFBSTtJQUMxRCxJQUFJK0Qsb0JBQW9CLENBQUMxRCxtQkFBbUIsQ0FBQyxFQUFFO01BQzlDLE9BQU9wRSxRQUFRLENBQUMsR0FBRyxDQUFDO0lBQ3JCO0lBQ0EsTUFBTTRILGdCQUFnQixHQUFHL0gsZ0JBQWdCLENBQUN5SCxzQkFBc0IsQ0FBQztJQUVqRSxNQUFNWSxXQUFXLEdBQUdQLElBQUksR0FBRyw4QkFBOEIsR0FBRyxrQ0FBa0M7SUFDOUZBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLEdBQUl2RCxtQkFBbUIsQ0FBQ1IsV0FBVyxFQUFFQyxRQUFRLEVBQUVDLFdBQTJDO0lBQzVHLE1BQU1xRSxxQkFBcUIsR0FDMUI5SCwwQkFBMEIsQ0FBQ3NILElBQUksQ0FBQyxJQUFJQSxJQUFJLENBQUNySCxPQUFPLEdBQzdDdUgseUJBQXlCLENBQUNGLElBQUksQ0FBQ3JILE9BQU8sRUFBRW1FLDJCQUEyQixDQUFDa0QsSUFBSSxFQUFFQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQzVGbkQsMkJBQTJCLENBQUNrRCxJQUFJLEVBQUVDLGdCQUFnQixDQUFDO0lBRXZELElBQUlMLHlCQUF5QixHQUFHekYsV0FBVyxDQUMxQytHLGtDQUFrQyxDQUFDdkIsc0JBQXNCLENBQzFELENBQXFDO0lBQ3JDQyx5QkFBeUIsR0FBR00seUJBQXlCLENBQUN6RCxtQkFBbUIsRUFBRW1ELHlCQUF5QixFQUFFLElBQUksQ0FBQztJQUMzRyxJQUFJYSxpQkFBMkQ7SUFDL0QsSUFBSUYsV0FBVyxLQUFLLDhCQUE4QixFQUFFO01BQ25ELElBQUlULGNBQWMsSUFBSSxDQUFDQyxvQkFBb0IsRUFBRTtRQUM1Q1UsaUJBQWlCLEdBQUc7VUFBRWhCLHNCQUFzQixFQUFFO1FBQUssQ0FBQztNQUNyRCxDQUFDLE1BQU0sSUFBSSxDQUFDSyxjQUFjLEVBQUU7UUFDM0JXLGlCQUFpQixHQUFHbkIsb0JBQW9CLENBQUM3QyxtQkFBbUIsQ0FBQztNQUM5RDtJQUNEO0lBQ0EsT0FBT2lFLGtCQUFrQixDQUN4QixDQUFDZCx5QkFBeUIsRUFBRVkscUJBQXFCLENBQUMsRUFDbERELFdBQVcsRUFDWDVJLFNBQVMsRUFDVDtNQUNDMEgscUJBQXFCLEVBQUUsSUFBSTtNQUMzQjhCLFVBQVUsRUFBRTtJQUNiLENBQUMsRUFDRFYsaUJBQ0QsQ0FBQztFQUNGLENBQUM7RUFBQ3pKLFFBQUEsQ0FBQWlLLDJCQUFBLEdBQUFBLDJCQUFBO0VBQ0ssTUFBTUcsc0JBQXNCLEdBQUcsU0FBQUEsQ0FDckN6QixzQkFBcUQsRUFDckRDLHlCQUEyRCxFQUl4QjtJQUFBLElBSG5DQyxvQkFBb0IsR0FBQXBJLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEtBQUs7SUFBQSxJQUM1QjRKLDBCQUEwQixHQUFBNUosU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsS0FBSztJQUFBLElBQ2xDNkosa0JBQXVDLEdBQUE3SixTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBRSxTQUFBO0lBRXZDLE1BQU04RSxtQkFBbUIsR0FBR2tELHNCQUFzQixDQUFDdkksWUFBd0I7SUFDM0UsTUFBTW1LLFFBQVEsR0FBRzlFLG1CQUFtQixDQUFDUixXQUFXLEVBQUVtQixNQUFNLEVBQUVvRSxRQUFRO0lBQ2xFLE1BQU1DLEtBQUssR0FBR2hGLG1CQUFtQixDQUFDUixXQUFXLEVBQUVyRSxFQUFFLEVBQUU4SixhQUFhO0lBQ2hFLE1BQU16QixnQkFBZ0IsR0FBRy9ILGdCQUFnQixDQUFDeUgsc0JBQXNCLENBQUM7SUFDakVDLHlCQUF5QixHQUFHTSx5QkFBeUIsQ0FBQ3pELG1CQUFtQixFQUFFbUQseUJBQXlCLENBQUM7SUFFckcsTUFBTVcsV0FBVyxHQUFHLHVDQUF1QztJQUMzRCxNQUFNQyxxQkFBcUIsR0FDMUI5SCwwQkFBMEIsQ0FBQzZJLFFBQVEsQ0FBQyxJQUFJQSxRQUFRLENBQUM1SSxPQUFPLEdBQ3JEdUgseUJBQXlCLENBQ3hCcUIsUUFBUSxDQUF1QzVJLE9BQU8sRUFDdkRtRSwyQkFBMkIsQ0FBQ3lFLFFBQVEsRUFBRXRCLGdCQUFnQixDQUFDLEVBQ3ZESixvQkFDQSxDQUFDLEdBQ0QvQywyQkFBMkIsQ0FBQ3lFLFFBQVEsRUFBRXRCLGdCQUFnQixDQUFDO0lBQzNELElBQUlsQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLElBQUlzRCwwQkFBMEIsRUFBRTtNQUMvQnRELGFBQWEsR0FBRztRQUNmNEQsMEJBQTBCLEVBQUU7TUFDN0IsQ0FBQztJQUNGO0lBQ0E7SUFDQSxJQUFJRixLQUFLLEVBQUU7TUFDVjFELGFBQWEsR0FBRztRQUFFLEdBQUdBLGFBQWE7UUFBRSxHQUFHO1VBQUUwRCxLQUFLLEVBQUVBO1FBQU07TUFBRSxDQUFDO0lBQzFELENBQUMsTUFBTSxJQUFJSCxrQkFBa0IsRUFBRU0sYUFBYSxLQUFLakssU0FBUyxFQUFFO01BQzNEb0csYUFBYSxHQUFHO1FBQUUsR0FBR0EsYUFBYTtRQUFFLEdBQUc7VUFBRTBELEtBQUssRUFBRUgsa0JBQWtCLENBQUNNO1FBQWM7TUFBRSxDQUFDO0lBQ3JGO0lBRUEsSUFBSU4sa0JBQWtCLEVBQUVPLGVBQWUsS0FBS2xLLFNBQVMsRUFBRTtNQUN0RG9HLGFBQWEsR0FBRztRQUFFLEdBQUdBLGFBQWE7UUFBRSxHQUFHO1VBQUUrRCxPQUFPLEVBQUVSLGtCQUFrQixDQUFDTztRQUFnQjtNQUFFLENBQUM7SUFDekY7SUFFQSxJQUFJUCxrQkFBa0IsRUFBRVMsUUFBUSxLQUFLcEssU0FBUyxFQUFFO01BQy9Db0csYUFBYSxHQUFHO1FBQUUsR0FBR0EsYUFBYTtRQUFFLEdBQUc7VUFBRWdFLFFBQVEsRUFBRVQsa0JBQWtCLENBQUNTO1FBQVM7TUFBRSxDQUFDO0lBQ25GO0lBQ0EsSUFBSVQsa0JBQWtCLEVBQUVVLFFBQVEsS0FBS3JLLFNBQVMsRUFBRTtNQUMvQ29HLGFBQWEsR0FBRztRQUFFLEdBQUdBLGFBQWE7UUFBRSxHQUFHO1VBQUVpRSxRQUFRLEVBQUVWLGtCQUFrQixDQUFDVTtRQUFTO01BQUUsQ0FBQztJQUNuRjtJQUNBLElBQUlWLGtCQUFrQixFQUFFVyxZQUFZLEtBQUt0SyxTQUFTLEVBQUU7TUFDbkRvRyxhQUFhLEdBQUc7UUFBRSxHQUFHQSxhQUFhO1FBQUUsR0FBRztVQUFFa0UsWUFBWSxFQUFFWCxrQkFBa0IsQ0FBQ1c7UUFBYTtNQUFFLENBQUM7SUFDM0Y7SUFFQSxPQUFPdkIsa0JBQWtCLENBQUMsQ0FBQ2QseUJBQXlCLEVBQUVZLHFCQUFxQixDQUFDLEVBQUVELFdBQVcsRUFBRTVJLFNBQVMsRUFBRW9HLGFBQWEsQ0FBQztFQUNySCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkEvRyxRQUFBLENBQUFvSyxzQkFBQSxHQUFBQSxzQkFBQTtFQU9PLE1BQU1jLHVCQUF1QixHQUFHLFNBQUFBLENBQ3RDQyxxQkFBb0QsRUFDcER2Qyx5QkFBMkQsRUFDM0R3Qyx1QkFBaUQsRUFDZDtJQUNuQyxNQUFNM0YsbUJBQW1CLEdBQUcwRixxQkFBcUIsQ0FBQy9LLFlBQXdCO0lBQzFFLE1BQU0wSyxPQUFPLEdBQUdNLHVCQUF1QixFQUFFUCxlQUFlO0lBQ3hELE1BQU1KLEtBQUssR0FBR2hGLG1CQUFtQixDQUFDUixXQUFXLEVBQUVyRSxFQUFFLEVBQUU4SixhQUFhLElBQUlVLHVCQUF1QixFQUFFUixhQUFhO0lBQzFHaEMseUJBQXlCLEdBQUdNLHlCQUF5QixDQUFDekQsbUJBQW1CLEVBQUVtRCx5QkFBeUIsQ0FBQztJQUNyR0EseUJBQXlCLENBQUNoQyxJQUFJLEdBQUdELGdCQUFnQixDQUFDbEIsbUJBQW1CLENBQUNtQixJQUFJLENBQUMsQ0FBQ0EsSUFBSTtJQUNoRmdDLHlCQUF5QixDQUFDN0IsYUFBYSxHQUFHO01BQ3pDLElBQUkwRCxLQUFLLElBQUk7UUFBRUEsS0FBSyxFQUFFQSxLQUFLLENBQUNZLFFBQVEsQ0FBQztNQUFFLENBQUMsQ0FBQztNQUN6QyxJQUFJUCxPQUFPLElBQUk7UUFBRUEsT0FBTyxFQUFFQTtNQUFRLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU9sQyx5QkFBeUI7RUFDakMsQ0FBQztFQUFDNUksUUFBQSxDQUFBa0wsdUJBQUEsR0FBQUEsdUJBQUE7RUFFSyxNQUFNSSxxQkFBcUIsR0FBRyxTQUFBQSxDQUNwQ0gscUJBQW9ELEVBQ3BEdkMseUJBQTJELEVBQ3hCO0lBQ25DLE1BQU0yQyxrQkFBa0IsR0FBR0oscUJBQXFCLENBQUMvSyxZQUF3QjtJQUN6RXdJLHlCQUF5QixHQUFHTSx5QkFBeUIsQ0FBQ3FDLGtCQUFrQixFQUFFM0MseUJBQXlCLENBQUM7SUFDcEdBLHlCQUF5QixDQUFDaEMsSUFBSSxHQUFHLEtBQUs7SUFDdEMsTUFBTTJDLFdBQVcsR0FBRyw4Q0FBOEM7SUFDbEUsTUFBTXhDLGFBQWEsR0FBRztNQUFFZ0UsUUFBUSxFQUFFLEtBQUs7TUFBRUMsUUFBUSxFQUFFLEtBQUs7TUFBRUMsWUFBWSxFQUFFO0lBQUssQ0FBQzs7SUFFOUU7SUFDQSxPQUFPdkIsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUVkLHlCQUF5QixDQUFDLEVBQUVXLFdBQVcsRUFBRTVJLFNBQVMsRUFBRW9HLGFBQWEsQ0FBQztFQUNwRyxDQUFDO0VBQUMvRyxRQUFBLENBQUFzTCxxQkFBQSxHQUFBQSxxQkFBQTtFQUVLLE1BQU1FLHNCQUFzQixHQUFHLFNBQUFBLENBQ3JDdEYsaUJBQW1ELEVBR2hCO0lBQUEsSUFGbkN1RixhQUFhLEdBQUFoTCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxPQUFPO0lBQUEsSUFDdkJpTCxVQUFVLEdBQUFqTCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxPQUFPO0lBRXBCLE9BQU9VLGlCQUFpQixDQUFDSSxNQUFNLENBQUNnRixLQUFLLENBQUNMLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxFQUFFdUYsYUFBYSxFQUFFQyxVQUFVLENBQUMsQ0FBQztFQUNqRyxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBMUwsUUFBQSxDQUFBd0wsc0JBQUEsR0FBQUEsc0JBQUE7RUFNTyxNQUFNRyxtQkFBbUIsR0FBRyxTQUFBQSxDQUFVQyxRQUEwQixFQUFFQyxVQUF1QyxFQUFpQjtJQUNoSSxJQUFJQSxVQUFVLElBQUlBLFVBQVUsQ0FBQ0MsT0FBTyxFQUFFO01BQ3JDLE9BQU9DLHVCQUF1QixDQUFDRixVQUFVLENBQUNDLE9BQU8sQ0FBQztJQUNuRDtJQUNBLE9BQU8sSUFBSTtFQUNaLENBQUM7RUFDREgsbUJBQW1CLENBQUNLLGdCQUFnQixHQUFHLElBQUk7O0VBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBaE0sUUFBQSxDQUFBMkwsbUJBQUEsR0FBQUEsbUJBQUE7RUFNTyxNQUFNTSxzQkFBc0IsR0FBRyxTQUFBQSxDQUNyQ0wsUUFBMEIsRUFDMUJDLFVBQXVDLEVBQ1A7SUFDaEMsSUFBSUEsVUFBVSxJQUFJQSxVQUFVLENBQUNDLE9BQU8sRUFBRTtNQUNyQyxPQUFPSSwyQkFBMkIsQ0FBQ0wsVUFBVSxDQUFDQyxPQUFPLENBQUM7SUFDdkQ7SUFDQSxPQUFPLElBQUk7RUFDWixDQUFDO0VBQ0RHLHNCQUFzQixDQUFDRCxnQkFBZ0IsR0FBRyxJQUFJOztFQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFoTSxRQUFBLENBQUFpTSxzQkFBQSxHQUFBQSxzQkFBQTtFQUtPLE1BQU1FLGlCQUFpQixHQUFHLFNBQUFBLENBQVVDLGNBQTRDLEVBQVc7SUFDakcsSUFBSUEsY0FBYyxDQUFDQyxvQkFBb0IsRUFBRTNMLE1BQU0sRUFBRTtNQUNoRCxNQUFNNEwsc0JBQXNCLEdBQzNCRixjQUFjLEVBQUVDLG9CQUFvQixDQUFDRSxTQUFTLENBQUVDLElBQUksSUFBSztRQUN4RCxJQUFJQyw0QkFBNEIsQ0FBQ0QsSUFBSSxDQUFDLEVBQUU7VUFDdkMsSUFBSUosY0FBYyxDQUFDL0ksZUFBZSxFQUFFZ0osb0JBQW9CLEVBQUUzTCxNQUFNLEVBQUU7WUFDakU7WUFDQSxPQUNDMEwsY0FBYyxDQUFDL0ksZUFBZSxFQUFFZ0osb0JBQW9CLENBQUNFLFNBQVMsQ0FDNURHLFdBQVcsSUFBS0EsV0FBVyxDQUFDL0ksSUFBSSxLQUFLNkksSUFBSSxDQUFDN0ksSUFDNUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztVQUVWO1VBQ0EsT0FBTyxJQUFJO1FBQ1o7UUFDQSxPQUFPLEtBQUs7TUFDYixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDUixJQUFJMkksc0JBQXNCLEVBQUU7UUFDM0IsT0FBTyxJQUFJO01BQ1o7SUFDRDtJQUNBLE9BQU8sS0FBSztFQUNiLENBQUM7RUFBQ3RNLFFBQUEsQ0FBQW1NLGlCQUFBLEdBQUFBLGlCQUFBO0VBQ0ssTUFBTVEsNkJBQTZCLEdBQUcsU0FBQUEsQ0FDNUNyTSxhQUF1QyxFQUN2Q0MsbUJBQTRFLEVBRXhDO0lBQUEsSUFEcENxTSxhQUFhLEdBQUFuTSxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxLQUFLO0lBRXJCLE9BQU9vTSxxQkFBcUIsQ0FBQ3ZNLGFBQWEsRUFBRUMsbUJBQW1CLEVBQUVxTSxhQUFhLEVBQUUsSUFBSSxDQUFDO0VBQ3RGLENBQUM7RUFBQzVNLFFBQUEsQ0FBQTJNLDZCQUFBLEdBQUFBLDZCQUFBO0VBQ0ssTUFBTUUscUJBQXFCLEdBQUcsU0FBQUEsQ0FDcEN2TSxhQUF1QyxFQUN2Q0MsbUJBQTRFLEVBUUw7SUFBQSxJQVB2RXFNLGFBQWEsR0FBQW5NLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEtBQUs7SUFBQSxJQUNyQk8sU0FBUyxHQUFBUCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxLQUFLO0lBQUEsSUFDakJxTSxtQkFHQyxHQUFBck0sU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsQ0FBQyxDQUFDO0lBQUEsSUFDTnFDLG1CQUFrRCxHQUFBckMsU0FBQSxDQUFBQyxNQUFBLE9BQUFELFNBQUEsTUFBQUUsU0FBQTtJQUVsRCxNQUFNb00seUNBQXlDLEdBQUdELG1CQUFtQixDQUFDRSx3Q0FBd0M7SUFDOUcsTUFBTUMseUNBQXlDLEdBQUdILG1CQUFtQixDQUFDSSx3Q0FBd0M7SUFDOUcsSUFBSSxDQUFDNU0sYUFBYSxJQUFJLE9BQU9BLGFBQWEsS0FBSyxRQUFRLEVBQUU7TUFDeEQsSUFBSVUsU0FBUyxFQUFFO1FBQ2QsT0FBT0ssUUFBUSxDQUFDLEtBQUssQ0FBQztNQUN2QjtNQUNBLE9BQU9GLGlCQUFpQixDQUFDRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUM7SUFDQSxJQUFJSixZQUFZO0lBQ2hCLElBQUk2QixtQkFBbUIsRUFBRTtNQUN4QjdCLFlBQVksR0FBR0MsZ0JBQWdCLENBQUM0QixtQkFBbUIsQ0FBQztJQUNyRDtJQUNBLElBQUlxSywyQkFBOEQsR0FBRzlMLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDcEYsSUFBSWQsbUJBQW1CLEtBQUtJLFNBQVMsSUFBSSxDQUFDVyxVQUFVLENBQUNmLG1CQUFtQixDQUFDLEVBQUU7TUFDMUU7TUFDQTRNLDJCQUEyQixHQUFHQyxvQkFBb0IsQ0FBQzdNLG1CQUFtQixDQUFDO0lBQ3hFO0lBQ0EsSUFBSThNLGdEQUFtRixHQUFHaE0sUUFBUSxDQUFDLEtBQUssQ0FBQztJQUN6RyxJQUFJaU0sZ0RBQW1GLEdBQUdqTSxRQUFRLENBQUMsS0FBSyxDQUFDO0lBRXpHLE1BQU1JLFNBQW1CLEdBQUlDLDBCQUEwQixDQUFDcEIsYUFBYSxDQUFDLElBQUlBLGFBQWEsQ0FBQ3FCLE9BQU8sSUFBTXJCLGFBQTBCO0lBQy9IO0lBQ0E7SUFDQSxNQUFNaU4sa0JBQWtCLEdBQUdILG9CQUFvQixDQUFDM0wsU0FBUyxFQUFFUixZQUFZLENBQUM7SUFDeEUsTUFBTXVNLFFBQVEsR0FBR1osYUFBYSxJQUFJaE0sRUFBRSxDQUFDQyxVQUFVO0lBQy9DLElBQUlrTSx5Q0FBeUMsRUFBRVUsUUFBUSxDQUFDaE0sU0FBUyxDQUFDa0MsSUFBSSxDQUFDLEVBQUU7TUFDeEUwSixnREFBZ0QsR0FBR3pNLEVBQUUsQ0FBQzhNLFlBQVk7SUFDbkU7SUFDQSxJQUFJVCx5Q0FBeUMsRUFBRVEsUUFBUSxDQUFDaE0sU0FBUyxDQUFDa0MsSUFBSSxDQUFDLEVBQUU7TUFDeEUySixnREFBZ0QsR0FBR2hMLEdBQUcsQ0FBQzFCLEVBQUUsQ0FBQ0MsVUFBVSxFQUFFMEIsR0FBRyxDQUFDM0IsRUFBRSxDQUFDOE0sWUFBWSxDQUFDLENBQUM7SUFDNUY7SUFDQSxNQUFNQyxnQkFBZ0IsR0FBR3RMLEVBQUUsQ0FDMUJDLEdBQUcsQ0FBQ0QsRUFBRSxDQUFDa0wsa0JBQWtCLEVBQUVKLDJCQUEyQixDQUFDLEVBQUVLLFFBQVEsQ0FBQyxFQUNsRUgsZ0RBQWdELEVBQ2hEQyxnREFDRCxDQUFDO0lBQ0QsSUFBSXRNLFNBQVMsRUFBRTtNQUNkLE9BQU8yTSxnQkFBZ0I7SUFDeEI7SUFDQSxPQUFPeE0saUJBQWlCLENBQUN3TSxnQkFBZ0IsQ0FBQztFQUMzQyxDQUFDO0VBQUMzTixRQUFBLENBQUE2TSxxQkFBQSxHQUFBQSxxQkFBQTtFQUVLLE1BQU1lLDBDQUEwQyxHQUFHLFNBQUFBLENBQ3pEQyxtQkFBNkUsRUFDMUM7SUFDbkMsTUFBTUMsSUFBNEMsR0FBSUQsbUJBQW1CLEVBQUV6TixZQUFZLEVBQUV1QixPQUFPLEVBQUVvTSxJQUFJLElBQUksQ0FBQyxDQUcxRztJQUNELE1BQU0zSyxJQUFtQixHQUFHNEssTUFBTSxDQUFDNUssSUFBSSxDQUFDMEssSUFBSSxDQUFDO0lBQzdDLE1BQU1HLFVBQVUsR0FBRyxFQUFFO0lBQ3JCLElBQUluTSxZQUFZO0lBQ2hCLE1BQU1vTSxxQkFBMkcsR0FBRyxFQUFFO0lBQ3RILEtBQUssTUFBTXpLLEdBQUcsSUFBSUwsSUFBSSxFQUFFO01BQ3ZCLElBQUkwSyxJQUFJLENBQUNySyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSXFLLElBQUksQ0FBQ3JLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFZ0ssUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQ3RFUSxVQUFVLENBQUNySyxJQUFJLENBQUNrSyxJQUFJLENBQUNySyxHQUFHLENBQUMsQ0FBQztNQUMzQjtJQUNEO0lBQ0EsS0FBSyxNQUFNMEssU0FBUyxJQUFJRixVQUFVLEVBQUU7TUFDbkMsUUFBUUUsU0FBUyxDQUFDNUosS0FBSztRQUN0QjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1VBQ0MsSUFBSSxPQUFPNEosU0FBUyxDQUFDQyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQ3hDdE0sWUFBWSxHQUFHcU0sU0FBUyxDQUFDQyxLQUFLLENBQUN6TSxPQUFPO1VBQ3ZDO1VBQ0E7UUFDRDtVQUNDLElBQUl3TSxTQUFTLENBQUNFLE1BQU0sRUFBRTFNLE9BQU8sRUFBRTtZQUM5QixJQUNDMk0sa0JBQWtCLENBQTRCSCxTQUFTLENBQUNFLE1BQU0sQ0FBQzFNLE9BQU8sRUFBRSxvRkFHdkUsQ0FBQyxFQUNEO2NBQ0QsSUFBSSxPQUFPd00sU0FBUyxDQUFDRSxNQUFNLENBQUMxTSxPQUFPLENBQUN5TSxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUN2RHRNLFlBQVksR0FBR3FNLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDMU0sT0FBTyxDQUFDeU0sS0FBSyxDQUFDek0sT0FBTztjQUN0RDtZQUNELENBQUMsTUFBTTtjQUNOLElBQUksT0FBT3dNLFNBQVMsQ0FBQ0UsTUFBTSxLQUFLLFFBQVEsRUFBRTtnQkFDekN2TSxZQUFZLEdBQUdxTSxTQUFTLENBQUNFLE1BQU0sQ0FBQzFNLE9BQU87Y0FDeEM7Y0FDQTtZQUNEO1VBQ0Q7VUFDQTtRQUNEO1VBQ0M7UUFDRDtNQUNEO01BQ0F1TSxxQkFBcUIsQ0FBQ3RLLElBQUksQ0FBQytJLDZCQUE2QixDQUFDN0ssWUFBWSxFQUFFcU0sU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFGO0lBQ0EsT0FBT2hOLGlCQUFpQixDQUFDa0IsRUFBRSxDQUFDLEdBQUk2TCxxQkFBNkQsQ0FBQyxDQUFDO0VBQ2hHLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBbE8sUUFBQSxDQUFBNE4sMENBQUEsR0FBQUEsMENBQUE7RUFLTyxTQUFTVyxTQUFTQSxDQUN4Qm5PLFlBUVksRUFDWmlNLG9CQUErQixFQUNLO0lBQ3BDLE9BQU85SixHQUFHLENBQUNnRSxLQUFLLENBQUNULDJCQUEyQixDQUFDMUYsWUFBWSxFQUFFNkUsV0FBVyxFQUFFckUsRUFBRSxFQUFFNE4sTUFBTSxFQUFFbkMsb0JBQW9CLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNsSDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFyTSxRQUFBLENBQUF1TyxTQUFBLEdBQUFBLFNBQUE7RUFLTyxNQUFNRSxXQUFXLEdBQUcsU0FBQUEsQ0FBVTNMLG1CQUF5RCxFQUFXO0lBQ3hHLE9BQU80TCxlQUFlLENBQUM1TCxtQkFBbUIsQ0FBQzFDLFlBQVksQ0FBQztFQUN6RCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQUosUUFBQSxDQUFBeU8sV0FBQSxHQUFBQSxXQUFBO0VBUU8sU0FBU0UsMEJBQTBCQSxDQUN6Q0MsWUFBb0IsRUFDcEJ6TSxjQUFpQyxFQUNqQ1csbUJBQWdFLEVBQ2hFK0wsdUJBQWlDLEVBQ0c7SUFDcEMsTUFBTUMsNkJBQTZCLEdBQ2xDRixZQUFZLENBQUMzSixXQUFXLENBQUM4SixJQUFJLEVBQUVDLGtCQUFrQixFQUFFQyxJQUFJLDJDQUEyQztJQUVuRyxJQUFJLENBQUNILDZCQUE2QixFQUFFO01BQ25DO01BQ0EsT0FBT3pOLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDdEI7SUFFQSxJQUFJNk4sTUFBTSxHQUFHLEVBQUU7SUFDZixJQUNDcE0sbUJBQW1CLElBQ25CK0wsdUJBQXVCLElBQ3ZCQSx1QkFBdUIsS0FBSyxJQUFJLElBQ2hDL0wsbUJBQW1CLENBQUNPLGVBQWUsRUFBRUMsZ0JBQWdCLElBQ3JEUixtQkFBbUIsQ0FBQ08sZUFBZSxDQUFDQyxnQkFBZ0IsS0FBS3NMLFlBQVksQ0FBQ08sZ0JBQWdCLEVBQ3JGO01BQ0QsTUFBTUMsV0FBVyxHQUFHbE8sZ0JBQWdCLENBQUM0QixtQkFBbUIsQ0FBQztNQUN6RCxJQUFJdU0sMkJBQTJCLEdBQUdDLG9CQUFvQixDQUFDeE0sbUJBQW1CLENBQUNPLGVBQWUsQ0FBQztNQUMzRjtNQUNBLEtBQUssTUFBTWtNLEdBQUcsSUFBSUgsV0FBVyxFQUFFO1FBQzlCQywyQkFBMkIsR0FBR0Msb0JBQW9CLENBQUNELDJCQUEyQixFQUFFRSxHQUFHLENBQUM7UUFDcEYsSUFBSUYsMkJBQTJCLENBQUMvTCxnQkFBZ0IsS0FBS3NMLFlBQVksQ0FBQ08sZ0JBQWdCLEVBQUU7VUFDbkZELE1BQU0sR0FBRyxHQUFHaE8sZ0JBQWdCLENBQUNtTywyQkFBMkIsQ0FBQyxDQUFDRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUc7VUFDdEU7UUFDRDtNQUNEO0lBQ0Q7SUFDQSxNQUFNQyx3QkFBd0IsR0FBR2IsWUFBWSxDQUFDYyxPQUFPLEdBQUdkLFlBQVksQ0FBQ2UsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxrQkFBa0IsR0FBR2pQLFNBQVM7SUFDbEgsTUFBTWtQLDRCQUE0QixHQUFHL0osMkJBQTJCLENBQy9EOEksWUFBWSxDQUFDM0osV0FBVyxDQUFDOEosSUFBSSxFQUFFQyxrQkFBa0IsRUFDakQsRUFBRSxFQUNGck8sU0FBUyxFQUNScUIsSUFBWSxJQUFLLEdBQUdrTixNQUFNLEdBQUdZLHlCQUF5QixDQUFDOU4sSUFBSSxFQUFFRyxjQUFjLEVBQUVzTix3QkFBd0IsQ0FBQyxFQUN4RyxDQUFDO0lBRUQsT0FBT2xKLEtBQUssQ0FBQ3NKLDRCQUE0QixFQUFFLElBQUksQ0FBQztFQUNqRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkE3UCxRQUFBLENBQUEyTywwQkFBQSxHQUFBQSwwQkFBQTtFQUtPLFNBQVNvQix1QkFBdUJBLENBQUNDLGNBQW1ELEVBQW9DO0lBQzlILElBQUlDLGFBQWdELEdBQUc1TyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3JFLElBQUlpTixrQkFBa0IsQ0FBYTBCLGNBQWMsQ0FBQzVQLFlBQVksRUFBRWlPLE1BQU0sRUFBRTFNLE9BQU8sNkNBQWtDLENBQUMsRUFBRTtNQUNuSHNPLGFBQWEsR0FBRzFCLFNBQVMsQ0FBQ3lCLGNBQWMsQ0FBQzVQLFlBQVksRUFBRWlPLE1BQU0sRUFBRTFNLE9BQU8sQ0FBQztJQUN4RTtJQUNBLE9BQU9SLGlCQUFpQixDQUFDbUIsR0FBRyxDQUFDaU0sU0FBUyxDQUFDeUIsY0FBYyxDQUFDNVAsWUFBWSxDQUFDLEVBQUU2UCxhQUFhLENBQUMsQ0FBQztFQUNyRjtFQUFDalEsUUFBQSxDQUFBK1AsdUJBQUEsR0FBQUEsdUJBQUE7RUFBQSxPQUFBL1AsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
742
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEVkaXRNb2RlIiwiRGlzYWJsZWQiLCJEaXNwbGF5IiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiUmVhZE9ubHkiLCJfZXhwb3J0cyIsImdldERpc3BsYXlNb2RlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJEaXNwbGF5TW9kZUZvcm1hdHRlciIsInRhcmdldE9iamVjdCIsInRhcmdldEVudGl0eVR5cGUiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCIsIm9Qcm9wZXJ0eVBhdGgiLCJvRGF0YUZpZWxkQ29udmVydGVkIiwiaXNFZGl0YWJsZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIlVJIiwiSXNFZGl0YWJsZSIsImNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uIiwiYkFzT2JqZWN0IiwicmVsYXRpdmVQYXRoIiwiZ2V0UmVsYXRpdmVQYXRocyIsImNvbXBpbGVFeHByZXNzaW9uIiwiZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uIiwiY29uc3RhbnQiLCJpc1Byb3BlcnR5IiwiaWZFbHNlIiwiaXNOb25FZGl0YWJsZUV4cHJlc3Npb24iLCJvUHJvcGVydHkiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIiR0YXJnZXQiLCJpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uIiwiaXNQYXRoVXBkYXRhYmxlIiwicHJvcGVydHlQYXRoIiwicGF0aFZpc2l0b3IiLCJwYXRoIiwibmF2aWdhdGlvblBhdGhzIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJjb252ZXJ0ZWRUeXBlcyIsImVkaXRhYmxlRXhwcmVzc2lvbiIsIm9yIiwiYW5kIiwibm90IiwiaXNDb21wdXRlZCIsImlzS2V5IiwiaXNJbW11dGFibGUiLCJJc1RyYW5zaWVudEJpbmRpbmciLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwiZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24iLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiZm9ybWF0dGVyIiwib2JqZWN0UGF0aCIsImdldFRhcmdldE9iamVjdFBhdGgiLCJhY3Rpdml0eUV4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsImtleXMiLCJjb250ZXh0TG9jYXRpb24iLCJrZXlzRXhwcmVzc2lvbnMiLCJmb3JFYWNoIiwia2V5Iiwia2V5RXhwcmVzc2lvbiIsIm5hbWUiLCJwdXNoIiwiZm9ybWF0UmVzdWx0IiwiZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCIsImdldEVuYWJsZWRFeHByZXNzaW9uIiwiZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsImVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0RWRpdE1vZGUiLCJtZWFzdXJlUmVhZE9ubHkiLCJhc09iamVjdCIsImRhdGFGaWVsZENvbnZlcnRlZCIsIiRUeXBlIiwicHJvcGVydHkiLCJhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsInJlc3VsdEV4cHJlc3Npb24iLCJpc1VuaXRSZWFkT25seSIsImlzUmVhZE9ubHlFeHByZXNzaW9uIiwiaXNDb25zdGFudCIsImFubm90YXRpb25zIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJyZWFkT25seUV4cHJlc3Npb24iLCJlZGl0TW9kZUV4cHJlc3Npb24iLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJvUHJvcGVydHlEZWZpbml0aW9uIiwiZ2V0RXhwcmVzc2lvbkZvck1lYXN1cmVVbml0IiwiY3VycmVuY3kiLCJtZWFzdXJlIiwiaXNUcnV0aHkiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJJc1RvdGFsIiwiZ2V0RmllbGREaXNwbGF5Iiwic1RhcmdldERpc3BsYXlNb2RlIiwib0NvbXB1dGVkRWRpdE1vZGUiLCJoYXNUZXh0QW5ub3RhdGlvbiIsIkNvbW1vbiIsIlRleHQiLCJoYXNWYWx1ZUhlbHAiLCJlcXVhbCIsImdldFR5cGVDb25maWciLCJkYXRhVHlwZSIsIm9UYXJnZXRNYXBwaW5nIiwiRURNX1RZUEVfTUFQUElORyIsInR5cGUiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJjb25zdHJhaW50cyIsImZvcm1hdE9wdGlvbnMiLCJzY2FsZSIsIiRTY2FsZSIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJtaW5pbXVtIiwiaXNOYU4iLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsIm1heGltdW0iLCJNYXhpbXVtIiwiaXNEaWdpdFNlcXVlbmNlIiwiSXNEaWdpdFNlcXVlbmNlIiwiVjQiLCIkVjQiLCJwYXJzZUFzU3RyaW5nIiwiaW5kZXhPZiIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZ2V0Q29uc3RyYWludE9wdGlvbnMiLCJEb05vdENoZWNrU2NhbGVPZk1lYXN1cmVkUXVhbnRpdHkiLCJ2YWx1ZU9mIiwic2tpcERlY2ltYWxzVmFsaWRhdGlvbiIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsImlnbm9yZVVuaXRDb25zdHJhaW50IiwiZm9yRGlzcGxheU1vZGUiLCJzaG93T25seVVuaXREZWNpbWFscyIsInVuaXQiLCJyZWxhdGl2ZUxvY2F0aW9uIiwiZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiIsImhhc1N0YXRpY1BlcmNlbnRVbml0Iiwic2hvd01lYXN1cmUiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRXaXRoUGVyY2VudGFnZSIsImNvbXBsZXhUeXBlIiwidW5pdEJpbmRpbmdFeHByZXNzaW9uIiwiY29uc3RyYWludE9wdGlvbnMiLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJnZXRCaW5kaW5nRm9yRGF0ZVBpY2tlciIsIm1pbkRhdGUiLCIkRGF0ZSIsIm1heERhdGUiLCJtaW5FeHByZXNzaW9uIiwibWF4RXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJzaG93TnVtYmVyIiwiZ2V0QmluZGluZ1dpdGhUaW1lem9uZSIsImhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwiZmllbGRGb3JtYXRPcHRpb25zIiwidGltZXpvbmUiLCJUaW1lem9uZSIsInN0eWxlIiwiRGF0ZVRpbWVTdHlsZSIsInNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwiZGF0ZVRpbWVTdHlsZSIsImRhdGVUaW1lUGF0dGVybiIsInBhdHRlcm4iLCJzaG93VGltZSIsInNob3dEYXRlIiwic2hvd1RpbWV6b25lIiwiZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQiLCJwcm9wZXJ0eURhdGFNb2RlbFBhdGgiLCJmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdCIsInRvU3RyaW5nIiwiZ2V0QmluZGluZ0ZvclRpbWV6b25lIiwicHJvcGVydHlEZWZpbml0aW9uIiwiZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiIsInNBbGlnbkRpc3BsYXkiLCJzQWxpZ25FZGl0IiwiZ2V0Q29udmVydGVyQ29udGV4dCIsIm9Db250ZXh0Iiwib0ludGVyZmFjZSIsImNvbnRleHQiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsInJlcXVpcmVzSUNvbnRleHQiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJvRGF0YU1vZGVsUGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiaGFzT25lVG9NYW55TmF2aWdhdGlvbiIsImZpbmRJbmRleCIsIm9OYXYiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5Iiwib0NvbnRleHROYXYiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdCIsImZvcmNlRWRpdE1vZGUiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJvUmVxdWlyZWRQcm9wZXJ0aWVzIiwiYVJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMiLCJyZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwiYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMiLCJyZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwiZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uIiwiaXNSZXF1aXJlZEV4cHJlc3Npb24iLCJyZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb24iLCJyZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb24iLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJlZGl0TW9kZSIsImluY2x1ZGVzIiwiSXNDcmVhdGVNb2RlIiwicmV0dXJuRXhwcmVzc2lvbiIsImdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCIsImRhdGFGaWVsZE9iamVjdFBhdGgiLCJkYXRhIiwiRGF0YSIsIk9iamVjdCIsImRhdGFGaWVsZHMiLCJpc1JlcXVpcmVkRXhwcmVzc2lvbnMiLCJkYXRhRmllbGQiLCJWYWx1ZSIsIlRhcmdldCIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImlzVmlzaWJsZSIsIkhpZGRlbiIsImlzTXVsdGlMaW5lIiwiaXNNdWx0aUxpbmVUZXh0IiwiZ2V0QWN0aW9uRW5hYmxlZEV4cHJlc3Npb24iLCJhY3Rpb25UYXJnZXQiLCJwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiIsIm9wZXJhdGlvbkF2YWlsYWJsZUlzQW5ub3RhdGVkIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInRlcm0iLCJwcmVmaXgiLCJzb3VyY2VFbnRpdHlUeXBlIiwibmF2aWdhdGlvbnMiLCJzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsIm5hdiIsImpvaW4iLCJiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUiLCJpc0JvdW5kIiwicGFyYW1ldGVycyIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIm9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24iLCJiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yIiwiaXNRdWlja1ZpZXdGYWNldFZpc2libGUiLCJmYWNldE1vZGVsUGF0aCIsInRhcmdldFZpc2libGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlVJRm9ybWF0dGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgQWN0aW9uUGFyYW1ldGVyLCBDb252ZXJ0ZWRNZXRhZGF0YSwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB7IENvcmVBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvcmVcIjtcbmltcG9ydCB0eXBlIHsgVW5pdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvTWVhc3VyZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29sbGVjdGlvbkZhY2V0LFxuXHRDb25uZWN0ZWRGaWVsZHNUeXBlLFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50VHlwZSxcblx0RGF0YVBvaW50VHlwZVR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRSZWZlcmVuY2VGYWNldFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHtcblx0QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0Q29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyxcblx0Rm5cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRFRE1fVFlQRV9NQVBQSU5HLFxuXHRhZGRUeXBlSW5mb3JtYXRpb24sXG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNUcnV0aHksXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHR1bnJlc29sdmFibGVFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29udmVydE1ldGFNb2RlbENvbnRleHQsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgVUksIGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IsIHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUeXBlLCBpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5LCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgRGlzcGxheU1vZGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7XG5cdGlzRGlzYWJsZWRFeHByZXNzaW9uLFxuXHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbixcblx0aXNSZWFkT25seUV4cHJlc3Npb24sXG5cdGlzUmVxdWlyZWRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGhhc1N0YXRpY1BlcmNlbnRVbml0LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGlzQ29tcHV0ZWQsXG5cdGlzSW1tdXRhYmxlLFxuXHRpc0tleSxcblx0aXNNdWx0aUxpbmVUZXh0XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEZvcm1hdE9wdGlvbnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFQb2ludEZvcm1hdE9wdGlvbnMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0RhdGFQb2ludFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5cbi8vIEltcG9ydC1leHBvcnQgbWV0aG9kIHVzZWQgYnkgdGhlIGNvbnZlcnRlciB0byB1c2UgdGhlbSBpbiB0aGUgdGVtcGxhdGluZyB0aHJvdWdoIHRoZSBVSUZvcm1hdHRlcnMuXG5leHBvcnQgdHlwZSBEaXNwbGF5TW9kZSA9IERpc3BsYXlNb2RlRm9ybWF0dGVyLkRpc3BsYXlNb2RlO1xuXG5leHBvcnQgdHlwZSBGaWVsZEVkaXRTdHlsZSA9IFwiUmFkaW9CdXR0b25zXCI7XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5T3JQYXRoPFA+ID0gc3RyaW5nIHwgUCB8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPjtcbmV4cG9ydCB0eXBlIE1ldGFNb2RlbENvbnRleHQgPSB7XG5cdCRraW5kOiBzdHJpbmc7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCROdWxsYWJsZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIHN0cnVjdHVyZSByZXR1cm5lZCBieSB0aGUgT0RhdGFNZXRhTW9kZWwgd2hlbiB1c2luZyB0aGUgQEAgb3BlcmF0b3IgaW4gWE1MIHRlbXBsYXRlcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlID0ge1xuXHRjb250ZXh0OiBDb250ZXh0O1xuXHRhcmd1bWVudHM/OiB1bmtub3duW107XG5cdCQkdmFsdWVBc1Byb21pc2U/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZUNvbnN0cmFpbnRzID0ge1xuXHRzY2FsZT86IG51bWJlcjtcblx0cHJlY2lzaW9uPzogbnVtYmVyO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdG51bGxhYmxlPzogYm9vbGVhbjtcblx0bWluaW11bT86IHN0cmluZztcblx0bWF4aW11bT86IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlPzogYm9vbGVhbjtcblx0VjQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZWZvcm1hdE9wdGlvbnMgPSB7XG5cdHBhcnNlQXNTdHJpbmc/OiBib29sZWFuO1xuXHRlbXB0eVN0cmluZz86IHN0cmluZztcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbmZpZ1R5cGUgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0Y29uc3RyYWludHM6IGNvbmZpZ1R5cGVDb25zdHJhaW50cztcblx0Zm9ybWF0T3B0aW9uczogY29uZmlnVHlwZWZvcm1hdE9wdGlvbnM7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRlVGltZVN0eWxlID0gXCJzaG9ydFwiIHwgXCJtZWRpdW1cIiB8IFwibG9uZ1wiIHwgXCJmdWxsXCI7XG5cbmV4cG9ydCB0eXBlIEZvcm1hdE9wdGlvbnNEYXRlRm9ybWF0ID0gRmllbGRGb3JtYXRPcHRpb25zIHwgRGF0YVBvaW50Rm9ybWF0T3B0aW9ucztcblxuZXhwb3J0IGNvbnN0IEZpZWxkRWRpdE1vZGUgPSB7XG5cdC8qKlxuXHQgKiB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkfSBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkIH1cblx0ICogaXMgcmVuZGVyZWQgaW4gZGlzYWJsZWQgbW9kZVxuXHQgKi9cblx0RGlzYWJsZWQ6IFwiRGlzYWJsZWRcIixcblx0LyoqXG5cdCAqIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGR9IG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGQgfVxuXHQgKiBpcyByZW5kZXJlZCBpbiBkaXNwbGF5IG1vZGVcblx0ICovXG5cdERpc3BsYXk6IFwiRGlzcGxheVwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIGVkaXRhYmxlIG1vZGVcblx0ICovXG5cdEVkaXRhYmxlOiBcIkVkaXRhYmxlXCIsXG5cdC8qKlxuXHQgKiBJZiBtb3JlIHRoYW4gb25lIGNvbnRyb2wgaXMgcmVuZGVyZWQgYnkgdGhlIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGQgfVxuXHQgKiBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkfSBjb250cm9sLCB0aGUgZmlyc3QgcGFydCBpcyBlZGl0YWJsZSwgYW5kIHRoZSBvdGhlclxuXHQgKiBwYXJ0cyBhcmUgaW4gZGlzcGxheSBtb2RlLlxuXHQgKi9cblx0RWRpdGFibGVEaXNwbGF5OiBcIkVkaXRhYmxlRGlzcGxheVwiLFxuXHQvKipcblx0ICogSWYgbW9yZSB0aGFuIG9uZSBjb250cm9sIGlzIHJlbmRlcmVkIGJ5IHRoZSB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkIH1cblx0ICogb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZH0gY29udHJvbCwgdGhlIGZpcnN0IHBhcnQgaXMgZWRpdGFibGUsIGFuZCB0aGUgb3RoZXJcblx0ICogcGFydHMgYXJlIHJlYWQtb25seS5cblx0ICovXG5cdEVkaXRhYmxlUmVhZE9ubHk6IFwiRWRpdGFibGVSZWFkT25seVwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIHJlYWQtb25seSBtb2RlXG5cdCAqL1xuXHRSZWFkT25seTogXCJSZWFkT25seVwiXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheU1vZGUgPSBmdW5jdGlvbiAoXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcz5cbik6IERpc3BsYXlNb2RlIHtcblx0cmV0dXJuIERpc3BsYXlNb2RlRm9ybWF0dGVyLmdldERpc3BsYXlNb2RlKG9EYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCwgb0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZSk7XG59O1xuZXhwb3J0IGNvbnN0IGdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IHVuZGVmaW5lZCxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGUsXG5cdGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zID0gdHJ1ZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGdldEVkaXRhYmxlRXhwcmVzc2lvbihcblx0XHRvUHJvcGVydHlQYXRoLFxuXHRcdG9EYXRhRmllbGRDb252ZXJ0ZWQsXG5cdFx0b0RhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0dHJ1ZSxcblx0XHRpc0VkaXRhYmxlLFxuXHRcdGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zXG5cdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgYW4gXCJlZGl0YWJsZVwiIEJvb2xlYW4gdmFsdWUuXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgb2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGggVGhlIHBhdGggdG8gdGhpcyBwcm9wZXJ0eSBvYmplY3RcbiAqIEBwYXJhbSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFdoZXRoZXIgb3Igbm90IFVJLklzRWRpdGFibGUgYmUgY29uc2lkZXJlZC5cbiAqIEBwYXJhbSBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyBXaGV0aGVyIHdlIHdhbnQgdG8gdGFrZSBpbnRvIGFjY291bnQgVXBkYXRlUmVzdHJpY3Rpb25zIHRvIGNvbXB1dGUgdGhlIGVkaXRhYmxlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZWRpdGFibGUgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0YkFzT2JqZWN0ID0gZmFsc2UsXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGUsXG5cdGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zID0gdHJ1ZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKG9EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZhbHNlKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudCh0cnVlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCAmJiAhaXNQcm9wZXJ0eShvRGF0YUZpZWxkQ29udmVydGVkKSkge1xuXHRcdGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiA9IGlmRWxzZShpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIGlzRWRpdGFibGUpO1xuXHR9IGVsc2UgaWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiA9IGlzRWRpdGFibGU7XG5cdH1cblxuXHRjb25zdCBvUHJvcGVydHkgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSA/IG9Qcm9wZXJ0eVBhdGguJHRhcmdldCA6IG9Qcm9wZXJ0eVBhdGg7XG5cblx0Ly8gRWRpdGFiaWxpdHkgZGVwZW5kcyBvbiB0aGUgZmllbGQgY29udHJvbCBleHByZXNzaW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIHN0YXRpY2FsbHkgaW4gUmVhZE9ubHkgb3IgSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGtleSAtPiBub3QgZWRpdGFibGUgZXhjZXB0IGluIGNyZWF0aW9uIGlmIG5vdCBjb21wdXRlZFxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgY29tcHV0ZWQgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgdXBkYXRhYmxlIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgaW1tdXRhYmxlIC0+IG5vdCBlZGl0YWJsZSBleGNlcHQgaW4gY3JlYXRpb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgYSBwYXRoIHJlc29sdmluZyB0byBSZWFkT25seSBvciBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAoPD0gMSkgLT4gbm90IGVkaXRhYmxlXG5cdC8vIEVsc2UsIHRvIGJlIGVkaXRhYmxlIHlvdSBuZWVkXG5cdC8vIGltbXV0YWJsZSBhbmQga2V5IHdoaWxlIGluIHRoZSBjcmVhdGlvbiByb3dcblx0Ly8gdWkvaXNFZGl0YWJsZVxuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gaXNQYXRoVXBkYXRhYmxlKG9EYXRhTW9kZWxPYmplY3RQYXRoLCB7XG5cdFx0cHJvcGVydHlQYXRoOiBvUHJvcGVydHlQYXRoLFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgb0RhdGFNb2RlbE9iamVjdFBhdGguY29udmVydGVkVHlwZXMsIG5hdmlnYXRpb25QYXRocylcblx0fSk7XG5cdGlmIChjb21waWxlRXhwcmVzc2lvbihpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uKSA9PT0gXCJmYWxzZVwiICYmIGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zKSB7XG5cdFx0cmV0dXJuIGJBc09iamVjdCA/IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gOiBcImZhbHNlXCI7XG5cdH1cblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID1cblx0XHRvUHJvcGVydHkgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBpZkVsc2UoXG5cdFx0XHRcdFx0b3IoXG5cdFx0XHRcdFx0XHRhbmQobm90KGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyksXG5cdFx0XHRcdFx0XHRpc0NvbXB1dGVkKG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0XHRpc0tleShvUHJvcGVydHkpLFxuXHRcdFx0XHRcdFx0aXNJbW11dGFibGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHRcdGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0aWZFbHNlKG9yKGlzQ29tcHV0ZWQob1Byb3BlcnR5KSwgaXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpKSwgZmFsc2UsIFVJLklzVHJhbnNpZW50QmluZGluZyksXG5cdFx0XHRcdFx0aXNFZGl0YWJsZVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiA8VD4oXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRmb3JtYXR0ZXI6IEZuPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBvYmplY3RQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgYWN0aXZpdHlFeHByZXNzaW9uID0gcGF0aEluTW9kZWwoYC9jb2xsYWJvcmF0aW9uL2FjdGl2aXRpZXMke29iamVjdFBhdGh9YCwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3Qga2V5cyA9IGRhdGFNb2RlbE9iamVjdFBhdGg/LmNvbnRleHRMb2NhdGlvbj8udGFyZ2V0RW50aXR5VHlwZT8ua2V5cztcblx0Y29uc3Qga2V5c0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXSA9IFtdO1xuXHRrZXlzPy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRjb25zdCBrZXlFeHByZXNzaW9uID0gcGF0aEluTW9kZWwoa2V5Lm5hbWUpO1xuXHRcdGtleXNFeHByZXNzaW9ucy5wdXNoKGtleUV4cHJlc3Npb24pO1xuXHR9KTtcblx0cmV0dXJuIGZvcm1hdFJlc3VsdChbYWN0aXZpdHlFeHByZXNzaW9uLCAuLi5rZXlzRXhwcmVzc2lvbnNdLCBmb3JtYXR0ZXIpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRFbmFibGVkRXhwcmVzc2lvbkFzT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGdldEVuYWJsZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgsIG9EYXRhRmllbGRDb252ZXJ0ZWQsIHRydWUsIG9EYXRhTW9kZWxPYmplY3RQYXRoKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuLyoqXG4gKiBDcmVhdGUgdGhlIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgYW4gXCJlbmFibGVkXCIgQm9vbGVhbiB2YWx1ZS5cbiAqIEBwYXJhbSBvUHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIG9EYXRhRmllbGRDb252ZXJ0ZWQgVGhlIERhdGFGaWVsZENvbnZlcnRlZCBPYmplY3QgdG8gcmVhZCB0aGUgZmllbGRDb250cm9sIGFubm90YXRpb25cbiAqIEBwYXJhbSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEBwYXJhbSBvRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBwcm9wZXJ0eSBpcyBlbmFibGVkIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RW5hYmxlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyxcblx0YkFzT2JqZWN0ID0gZmFsc2UsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24odHJ1ZSk7XG5cdH1cblx0bGV0IHJlbGF0aXZlUGF0aDtcblx0aWYgKG9EYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdFx0cmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhvRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudCh0cnVlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCAmJiAhaXNQcm9wZXJ0eShvRGF0YUZpZWxkQ29udmVydGVkKSkge1xuXHRcdGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uID0gaWZFbHNlKGlzRGlzYWJsZWRFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpLCBmYWxzZSwgdHJ1ZSk7XG5cdH1cblxuXHRjb25zdCBvUHJvcGVydHkgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSA/IG9Qcm9wZXJ0eVBhdGguJHRhcmdldCA6IG9Qcm9wZXJ0eVBhdGg7XG5cdC8vIEVuYWJsZW1lbnQgZGVwZW5kcyBvbiB0aGUgZmllbGQgY29udHJvbCBleHByZXNzaW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIHN0YXRpY2FsbHkgaW4gSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgLT4gbm90IGVuYWJsZWRcblx0Y29uc3QgZW5hYmxlZEV4cHJlc3Npb24gPVxuXHRcdG9Qcm9wZXJ0eSAhPT0gdW5kZWZpbmVkID8gaWZFbHNlKGlzRGlzYWJsZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSwgZmFsc2UsIHRydWUpIDogdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0aWYgKGJBc09iamVjdCkge1xuXHRcdHJldHVybiBhbmQoZW5hYmxlZEV4cHJlc3Npb24sIGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGVuYWJsZWRFeHByZXNzaW9uLCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbikpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgYW4gXCJlZGl0TW9kZVwiIGVudW0gdmFsdWUuXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSBtZWFzdXJlUmVhZE9ubHkgV2hldGhlciB3ZSBzaG91bGQgc2V0IFVvTSAvIGN1cnJlbmN5IGZpZWxkIG1vZGUgdG8gcmVhZCBvbmx5XG4gKiBAcGFyYW0gYXNPYmplY3QgV2hldGhlciB3ZSBzaG91bGQgcmV0dXJuIHRoaXMgYXMgYW4gZXhwcmVzc2lvbiBvciBhcyBhIHN0cmluZ1xuICogQHBhcmFtIGRhdGFGaWVsZENvbnZlcnRlZCBUaGUgZGF0YUZpZWxkIG9iamVjdFxuICogQHBhcmFtIGlzRWRpdGFibGUgV2hldGhlciBvciBub3QgVUkuSXNFZGl0YWJsZSBiZSBjb25zaWRlcmVkLlxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgcHJvcGVydHkgZWRpdCBtb2RlLCBjb21wbGlhbnQgd2l0aCB0aGUgTURDIEZpZWxkIGRlZmluaXRpb24gb2YgZWRpdE1vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0TW9kZSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdG1lYXN1cmVSZWFkT25seSA9IGZhbHNlLFxuXHRhc09iamVjdCA9IGZhbHNlLFxuXHRkYXRhRmllbGRDb252ZXJ0ZWQ6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcblx0aXNFZGl0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gVUkuSXNFZGl0YWJsZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGlmIChcblx0XHQhcHJvcGVydHlQYXRoIHx8XG5cdFx0dHlwZW9mIHByb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIiB8fFxuXHRcdCghaXNQcm9wZXJ0eShkYXRhRmllbGRDb252ZXJ0ZWQpICYmIGRhdGFGaWVsZENvbnZlcnRlZD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aClcblx0KSB7XG5cdFx0cmV0dXJuIEZpZWxkRWRpdE1vZGUuRGlzcGxheTtcblx0fVxuXHRjb25zdCBwcm9wZXJ0eSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5UGF0aCkgPyBwcm9wZXJ0eVBhdGguJHRhcmdldCA6IHByb3BlcnR5UGF0aDtcblx0aWYgKCFpc1Byb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdHJldHVybiBGaWVsZEVkaXRNb2RlLkRpc3BsYXk7XG5cdH1cblx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IGlzUGF0aFVwZGF0YWJsZShkYXRhTW9kZWxPYmplY3RQYXRoLCB7XG5cdFx0cHJvcGVydHlQYXRoOiBwcm9wZXJ0eSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGRhdGFNb2RlbE9iamVjdFBhdGguY29udmVydGVkVHlwZXMsIG5hdmlnYXRpb25QYXRocylcblx0fSk7XG5cblx0Ly8gd2UgZ2V0IHRoZSBlZGl0YWJsZSBFeHByZXNzaW9uIHdpdGhvdXQgY29uc2lkZXJpbmcgdXBkYXRlIFJlc3RyaWN0aW9ucyBiZWNhdXNlIHRoZXkgYXJlIGhhbmRsZWQgc2VwYXJhdGVseVxuXHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPSBnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdChwcm9wZXJ0eVBhdGgsIGRhdGFGaWVsZENvbnZlcnRlZCwgZGF0YU1vZGVsT2JqZWN0UGF0aCwgaXNFZGl0YWJsZSwgZmFsc2UpO1xuXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID0gZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdChwcm9wZXJ0eVBhdGgsIGRhdGFGaWVsZENvbnZlcnRlZCwgZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkocHJvcGVydHkpO1xuXHRjb25zdCB1bml0UHJvcGVydHkgPSBhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0bGV0IHJlc3VsdEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0gY29uc3RhbnQoRmllbGRFZGl0TW9kZS5FZGl0YWJsZSk7XG5cdGlmICh1bml0UHJvcGVydHkpIHtcblx0XHRjb25zdCBpc1VuaXRSZWFkT25seSA9IGlzUmVhZE9ubHlFeHByZXNzaW9uKHVuaXRQcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0XHRyZXN1bHRFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdFx0b3IoaXNVbml0UmVhZE9ubHksIGlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSwgYW5kKGlzSW1tdXRhYmxlKHVuaXRQcm9wZXJ0eSksIG5vdChVSS5Jc1RyYW5zaWVudEJpbmRpbmcpKSwgbWVhc3VyZVJlYWRPbmx5KSxcblx0XHRcdGlmRWxzZSghaXNDb25zdGFudChpc1VuaXRSZWFkT25seSkgJiYgaXNVbml0UmVhZE9ubHksIEZpZWxkRWRpdE1vZGUuRWRpdGFibGVSZWFkT25seSwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZURpc3BsYXkpLFxuXHRcdFx0RmllbGRFZGl0TW9kZS5FZGl0YWJsZVxuXHRcdCk7XG5cdH1cblx0aWYgKCF1bml0UHJvcGVydHkgJiYgKHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQpKSB7XG5cdFx0Ly8gbm8gdW5pdCBwcm9wZXJ0eSBhc3NvY2lhdGVkIG1lYW5zIHRoaXMgaXMgYSBzdGF0aWMgdW5pdFxuXHRcdHJlc3VsdEV4cHJlc3Npb24gPSBjb25zdGFudChGaWVsZEVkaXRNb2RlLkVkaXRhYmxlRGlzcGxheSk7XG5cdH1cblx0bGV0IHJlYWRPbmx5RXhwcmVzc2lvbjtcblx0aWYgKGRhdGFGaWVsZENvbnZlcnRlZCAhPSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkoZGF0YUZpZWxkQ29udmVydGVkKSkge1xuXHRcdHJlYWRPbmx5RXhwcmVzc2lvbiA9IG9yKGlzUmVhZE9ubHlFeHByZXNzaW9uKHByb3BlcnR5LCByZWxhdGl2ZVBhdGgpLCBpc1JlYWRPbmx5RXhwcmVzc2lvbihkYXRhRmllbGRDb252ZXJ0ZWQpKTtcblx0fSBlbHNlIHtcblx0XHRyZWFkT25seUV4cHJlc3Npb24gPSBpc1JlYWRPbmx5RXhwcmVzc2lvbihwcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0fVxuXG5cdC8vIGlmIHRoZXJlIGFyZSB1cGRhdGUgUmVzdHJpY3Rpb25zIGl0IGlzIGFsd2F5cyBkaXNwbGF5IG1vZGVcblx0Y29uc3QgZWRpdE1vZGVFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdG9yKGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24sIFVJLklzVHJhbnNpZW50QmluZGluZyksXG5cdFx0aWZFbHNlKFxuXHRcdFx0ZW5hYmxlZEV4cHJlc3Npb24sXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdFx0cmVzdWx0RXhwcmVzc2lvbixcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGFuZCghaXNDb25zdGFudChyZWFkT25seUV4cHJlc3Npb24pICYmIHJlYWRPbmx5RXhwcmVzc2lvbiwgaXNFZGl0YWJsZSksXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5SZWFkT25seSxcblx0XHRcdFx0XHRGaWVsZEVkaXRNb2RlLkRpc3BsYXlcblx0XHRcdFx0KVxuXHRcdFx0KSxcblx0XHRcdGlmRWxzZShpc0VkaXRhYmxlLCBGaWVsZEVkaXRNb2RlLkRpc2FibGVkLCBGaWVsZEVkaXRNb2RlLkRpc3BsYXkpXG5cdFx0KSxcblx0XHRGaWVsZEVkaXRNb2RlLkRpc3BsYXlcblx0KTtcblx0aWYgKGFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGVkaXRNb2RlRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZWRpdE1vZGVFeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWRcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdDtcblx0cmV0dXJuIG9Qcm9wZXJ0eURlZmluaXRpb24gJiYgZ2V0RXhwcmVzc2lvbkZvck1lYXN1cmVVbml0KG9Qcm9wZXJ0eURlZmluaXRpb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JNZWFzdXJlVW5pdCA9IGZ1bmN0aW9uIChvUHJvcGVydHlEZWZpbml0aW9uOiBQcm9wZXJ0eSk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgY3VycmVuY3kgPSBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXHRjb25zdCBtZWFzdXJlID0gY3VycmVuY3kgPyBjdXJyZW5jeSA6IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0aWYgKG1lYXN1cmUpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob3IoaXNUcnV0aHkoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKG1lYXN1cmUpKSwgbm90KFVJLklzVG90YWwpKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KHRydWUpKTtcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGZpZWxkRGlzcGxheS5cbiAqIEBwYXJhbSBvUHJvcGVydHlQYXRoXG4gKiBAcGFyYW0gc1RhcmdldERpc3BsYXlNb2RlXG4gKiBAcGFyYW0gb0NvbXB1dGVkRWRpdE1vZGVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHByb3BlcnR5IGRpc3BsYXkgbW9kZSwgY29tcGxpYW50IHdpdGggdGhlIE1EQyBGaWVsZCBkZWZpbml0aW9uIG9mIGRpc3BsYXlNb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RmllbGREaXNwbGF5ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdHNUYXJnZXREaXNwbGF5TW9kZTogc3RyaW5nLFxuXHRvQ29tcHV0ZWRFZGl0TW9kZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3Qgb1Byb3BlcnR5ID0gKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHRjb25zdCBoYXNUZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0ICE9PSB1bmRlZmluZWQ7XG5cblx0aWYgKGhhc1ZhbHVlSGVscChvUHJvcGVydHkpKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHNUYXJnZXREaXNwbGF5TW9kZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGhhc1RleHRBbm5vdGF0aW9uID8gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGVxdWFsKG9Db21wdXRlZEVkaXRNb2RlLCBcIkVkaXRhYmxlXCIpLCBcIlZhbHVlXCIsIHNUYXJnZXREaXNwbGF5TW9kZSkpIDogXCJWYWx1ZVwiO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IENvbmZpZ1R5cGUge1xuXHRjb25zdCBvVGFyZ2V0TWFwcGluZyA9IEVETV9UWVBFX01BUFBJTkdbKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSk/LnR5cGVdIHx8IChkYXRhVHlwZSA/IEVETV9UWVBFX01BUFBJTkdbZGF0YVR5cGVdIDogdW5kZWZpbmVkKTtcblx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnOiBDb25maWdUeXBlID0ge1xuXHRcdHR5cGU6IG9UYXJnZXRNYXBwaW5nLnR5cGUsXG5cdFx0Y29uc3RyYWludHM6IHt9LFxuXHRcdGZvcm1hdE9wdGlvbnM6IHt9XG5cdH07XG5cdGlmIChpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkpIHtcblx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMgPSB7XG5cdFx0XHRzY2FsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRTY2FsZSA/IG9Qcm9wZXJ0eS5zY2FsZSA6IHVuZGVmaW5lZCxcblx0XHRcdHByZWNpc2lvbjogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRQcmVjaXNpb24gPyBvUHJvcGVydHkucHJlY2lzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4TGVuZ3RoOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE1heExlbmd0aCA/IG9Qcm9wZXJ0eS5tYXhMZW5ndGggOiB1bmRlZmluZWQsXG5cdFx0XHRudWxsYWJsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiROdWxsYWJsZSA/IG9Qcm9wZXJ0eS5udWxsYWJsZSA6IHVuZGVmaW5lZCxcblx0XHRcdG1pbmltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdG1heGltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdGlzRGlnaXRTZXF1ZW5jZTpcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCJdICYmXG5cdFx0XHRcdG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0RpZ2l0U2VxdWVuY2Vcblx0XHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFY0OiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJFY0ID8gdHJ1ZSA6IHVuZGVmaW5lZFxuXHRcdH07XG5cdH1cblx0cHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0cGFyc2VBc1N0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gZmFsc2Vcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0ZW1wdHlTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IFwiXCJcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiBwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiA/IHRydWUgOiB1bmRlZmluZWRcblx0fTtcblx0cmV0dXJuIHByb3BlcnR5VHlwZUNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb25zdHJhaW50T3B0aW9ucyA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkgfCB1bmRlZmluZWQpOiBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zIHtcblx0cmV0dXJuIHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uVUk/LkRvTm90Q2hlY2tTY2FsZU9mTWVhc3VyZWRRdWFudGl0eSAmJlxuXHRcdHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uVUkuRG9Ob3RDaGVja1NjYWxlT2ZNZWFzdXJlZFF1YW50aXR5Py52YWx1ZU9mKClcblx0XHQ/IHsgc2tpcERlY2ltYWxzVmFsaWRhdGlvbjogdHJ1ZSB9XG5cdFx0OiB7fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZVVuaXRDb25zdHJhaW50PzogYm9vbGVhbixcblx0Zm9ybWF0T3B0aW9ucz86IHtcblx0XHRzaG93TWVhc3VyZT86IGJvb2xlYW47XG5cdFx0ZGVjaW1hbFBhZGRpbmc/OiBudW1iZXI7XG5cdFx0ZW1wdHlTdHJpbmc/OiBzdHJpbmcgfCBudW1iZXI7XG5cdH0sXG5cdGZvckRpc3BsYXlNb2RlPzogYm9vbGVhbixcblx0c2hvd09ubHlVbml0RGVjaW1hbHM/OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0bGV0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQob1Byb3BlcnR5RGVmaW5pdGlvbikpIHtcblx0XHRpZiAoZm9ybWF0T3B0aW9ucz8uc2hvd01lYXN1cmUgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoUGVyY2VudGFnZSk7XG5cdH1cblx0Y29uc3QgY29tcGxleFR5cGUgPSB1bml0ID8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIgOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCI7XG5cdHVuaXQgPSB1bml0ID8gdW5pdCA6IChvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgYXMgdW5rbm93biBhcyBVbml0IHwgdW5kZWZpbmVkKTtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0KSAmJiB1bml0LiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbih1bml0LiR0YXJnZXQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSwgaWdub3JlVW5pdENvbnN0cmFpbnQpXG5cdFx0XHQ6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0bGV0IGNvbnN0cmFpbnRPcHRpb25zOiBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zIHwgdW5kZWZpbmVkO1xuXHRpZiAoY29tcGxleFR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiKSB7XG5cdFx0aWYgKGZvckRpc3BsYXlNb2RlICYmICFzaG93T25seVVuaXREZWNpbWFscykge1xuXHRcdFx0Y29uc3RyYWludE9wdGlvbnMgPSB7IHNraXBEZWNpbWFsc1ZhbGlkYXRpb246IHRydWUgfTtcblx0XHR9IGVsc2UgaWYgKCFmb3JEaXNwbGF5TW9kZSkge1xuXHRcdFx0Ly8gQ29uc2lkZXIgYW5ub3RhdGlvbiBvbmx5IGluIGVkaXQgbW9kZVxuXHRcdFx0Y29uc3RyYWludE9wdGlvbnMgPSBnZXRDb25zdHJhaW50T3B0aW9ucyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCk7XG5cdFx0fVxuXHR9XG5cdGlmIChmb3JEaXNwbGF5TW9kZSkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIGVtcHR5U3RyaW5nOiBcIlwiIH07XG5cdH1cblxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zLCBjb25zdHJhaW50T3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgZGF0ZSBwaWNrZXIgd2l0aCBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlIHByZXNlbnQuXG4gKiBAcGFyYW0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aCBUaGUgbGlzdCBvZiBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gcmVhY2ggdGhhdCBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gQmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBkYXRlIHByb3BlcnR5IHdpdGggbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZSBmb3IgdGhlIHNhbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JEYXRlUGlja2VyID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkVHlwZXM+LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7fTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gXCJzYXAuZmUuY29yZS50eXBlLkRhdGVcIjtcblx0Y29uc3QgbWluRGF0ZSA9IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtPy4kRGF0ZVxuXHRcdD8gb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0/LiREYXRlXG5cdFx0OiBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bTtcblx0Y29uc3QgbWF4RGF0ZSA9IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtPy4kRGF0ZVxuXHRcdD8gb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW0/LiREYXRlXG5cdFx0OiBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bTtcblx0Y29uc3QgbWluRXhwcmVzc2lvbiA9XG5cdFx0bWluRGF0ZSAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihtaW5EYXRlKVxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtLFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSwgcmVsYXRpdmVMb2NhdGlvbilcblx0XHRcdCAgKVxuXHRcdFx0OiBtaW5EYXRlO1xuXHRjb25zdCBtYXhFeHByZXNzaW9uID1cblx0XHRtYXhEYXRlICYmIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG1heERhdGUpXG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24oXG5cdFx0XHRcdFx0b1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW0sXG5cdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtLCByZWxhdGl2ZUxvY2F0aW9uKVxuXHRcdFx0ICApXG5cdFx0XHQ6IG1heERhdGU7XG5cblx0cmV0dXJuIChcblx0XHQobWluRXhwcmVzc2lvbiB8fCBtYXhFeHByZXNzaW9uKSAmJlxuXHRcdGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgbWluRXhwcmVzc2lvbiwgbWF4RXhwcmVzc2lvbl0sIGNvbXBsZXhUeXBlLCB1bmRlZmluZWQsIGZvcm1hdE9wdGlvbnMpXG5cdCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ0ZvclVuaXRPckN1cnJlbmN5ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiB8IHVuZGVmaW5lZCxcblx0Zm9yRGlzcGxheU1vZGU6IGJvb2xlYW4sXG5cdHNob3dPbmx5VW5pdERlY2ltYWxzOiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHN0cmluZyB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoPy50YXJnZXRPYmplY3Q7XG5cdGlmICghb1Byb3BlcnR5RGVmaW5pdGlvbikge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0bGV0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0aWYgKGhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eURlZmluaXRpb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KFwiJVwiKTtcblx0fVxuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblxuXHRjb25zdCBjb21wbGV4VHlwZSA9IHVuaXQgPyBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIiA6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIjtcblx0dW5pdCA9IHVuaXQgPyB1bml0IDogKG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSBhcyB1bmtub3duIGFzIFVuaXQgfCB1bmRlZmluZWQpO1xuXHRjb25zdCB1bml0QmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVuaXQpICYmIHVuaXQuJHRhcmdldFxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHVuaXQuJHRhcmdldCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pKVxuXHRcdFx0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cblx0bGV0IHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChcblx0XHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpXG5cdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz47XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHRydWUpO1xuXHRsZXQgY29uc3RyYWludE9wdGlvbnM6IENvbXBsZXhUeXBlQ29uc3RyYWludE9wdGlvbnMgfCB1bmRlZmluZWQ7XG5cdGlmIChjb21wbGV4VHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIpIHtcblx0XHRpZiAoZm9yRGlzcGxheU1vZGUgJiYgIXNob3dPbmx5VW5pdERlY2ltYWxzKSB7XG5cdFx0XHRjb25zdHJhaW50T3B0aW9ucyA9IHsgc2tpcERlY2ltYWxzVmFsaWRhdGlvbjogdHJ1ZSB9O1xuXHRcdH0gZWxzZSBpZiAoIWZvckRpc3BsYXlNb2RlKSB7XG5cdFx0XHRjb25zdHJhaW50T3B0aW9ucyA9IGdldENvbnN0cmFpbnRPcHRpb25zKG9Qcm9wZXJ0eURlZmluaXRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFxuXHRcdFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLFxuXHRcdGNvbXBsZXhUeXBlLFxuXHRcdHVuZGVmaW5lZCxcblx0XHR7XG5cdFx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IHRydWUsXG5cdFx0XHRzaG93TnVtYmVyOiBmYWxzZVxuXHRcdH0sXG5cdFx0Y29uc3RyYWludE9wdGlvbnNcblx0KTtcbn07XG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhUaW1lem9uZSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVVbml0Q29uc3RyYWludCA9IGZhbHNlLFxuXHRoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcyA9IGZhbHNlLFxuXHRmaWVsZEZvcm1hdE9wdGlvbnM/OiBGaWVsZEZvcm1hdE9wdGlvbnNcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRjb25zdCB0aW1lem9uZSA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cdGNvbnN0IHN0eWxlID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkRhdGVUaW1lU3R5bGU7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblxuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5EYXRlVGltZVdpdGhUaW1lem9uZVwiO1xuXHRjb25zdCB1bml0QmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHRpbWV6b25lKSAmJiB0aW1lem9uZS4kdGFyZ2V0XG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24oXG5cdFx0XHRcdFx0KHRpbWV6b25lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPikuJHRhcmdldCBhcyBQcm9wZXJ0eSxcblx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGltZXpvbmUsIHJlbGF0aXZlTG9jYXRpb24pLFxuXHRcdFx0XHRcdGlnbm9yZVVuaXRDb25zdHJhaW50XG5cdFx0XHQgIClcblx0XHRcdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRpbWV6b25lLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0bGV0IGZvcm1hdE9wdGlvbnMgPSB7fTtcblx0aWYgKGhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdHNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0Ly8gaWYgc3R5bGUgb3IgcGF0dGVybiBpcyBhbHNvIHNldFxuXHRpZiAoc3R5bGUpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHN0eWxlOiBzdHlsZSB9IH07XG5cdH0gZWxzZSBpZiAoZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVN0eWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHN0eWxlOiBmaWVsZEZvcm1hdE9wdGlvbnMuZGF0ZVRpbWVTdHlsZSB9IH07XG5cdH1cblxuXHRpZiAoZmllbGRGb3JtYXRPcHRpb25zPy5kYXRlVGltZVBhdHRlcm4gIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgcGF0dGVybjogZmllbGRGb3JtYXRPcHRpb25zLmRhdGVUaW1lUGF0dGVybiB9IH07XG5cdH1cblxuXHRpZiAoZmllbGRGb3JtYXRPcHRpb25zPy5zaG93VGltZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzaG93VGltZTogZmllbGRGb3JtYXRPcHRpb25zLnNob3dUaW1lIH0gfTtcblx0fVxuXHRpZiAoZmllbGRGb3JtYXRPcHRpb25zPy5zaG93RGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzaG93RGF0ZTogZmllbGRGb3JtYXRPcHRpb25zLnNob3dEYXRlIH0gfTtcblx0fVxuXHRpZiAoZmllbGRGb3JtYXRPcHRpb25zPy5zaG93VGltZXpvbmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd1RpbWV6b25lOiBmaWVsZEZvcm1hdE9wdGlvbnMuc2hvd1RpbWV6b25lIH0gfTtcblx0fVxuXG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHVuaXRCaW5kaW5nRXhwcmVzc2lvbl0sIGNvbXBsZXhUeXBlLCB1bmRlZmluZWQsIGZvcm1hdE9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBkYXRlIGZvcm1hdCBvZiBhIGRhdGUsIHRpbWUgb3IgZGF0ZVRpbWUuXG4gKiBAcGFyYW0gcHJvcGVydHlEYXRhTW9kZWxQYXRoIFRoZSBsaXN0IG9mIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCB0byByZWFjaCB0aGF0IHByb3BlcnR5XG4gKiBAcGFyYW0gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiBCaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnNEYXRlRm9ybWF0IEZvcm1hdCBvcHRpb25zIHdoaWNoIGNvbnRhaW4gdGhlIHN0eWxlIG9yIHBhdHRlcm4gcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIGEgZGF0ZSwgdGltZSwgb3IgZGF0ZS10aW1lLCB3aXRoIHRoZSBnaXZlbiBwYXR0ZXJuIG9yIHN0eWxlIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nRm9yRGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGZvcm1hdE9wdGlvbnNEYXRlRm9ybWF0PzogRm9ybWF0T3B0aW9uc0RhdGVGb3JtYXRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IHByb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHBhdHRlcm4gPSBmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdD8uZGF0ZVRpbWVQYXR0ZXJuO1xuXHRjb25zdCBzdHlsZSA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5EYXRlVGltZVN0eWxlID8/IGZvcm1hdE9wdGlvbnNEYXRlRm9ybWF0Py5kYXRlVGltZVN0eWxlO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbi50eXBlID0gRURNX1RZUEVfTUFQUElOR1tvUHJvcGVydHlEZWZpbml0aW9uLnR5cGVdLnR5cGU7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHtcblx0XHQuLi4oc3R5bGUgJiYgeyBzdHlsZTogc3R5bGUudG9TdHJpbmcoKSB9KSxcblx0XHQuLi4ocGF0dGVybiAmJiB7IHBhdHRlcm46IHBhdHRlcm4gfSlcblx0fTtcblxuXHRyZXR1cm4gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nRm9yVGltZXpvbmUgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IHByb3BlcnR5RGVmaW5pdGlvbiA9IHByb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHByb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24udHlwZSA9IFwiYW55XCI7XG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EYXRlVGltZVdpdGhUaW1lem9uZVwiO1xuXHRjb25zdCBmb3JtYXRPcHRpb25zID0geyBzaG93VGltZTogZmFsc2UsIHNob3dEYXRlOiBmYWxzZSwgc2hvd1RpbWV6b25lOiB0cnVlIH07XG5cblx0Ly8gbnVsbCBpcyByZXF1aXJlZCBieSBmb3JtYXR0ZXIgd2hlbiB0aGVyZSBpcyBqdXN0IGEgdGltZXpvbmVcblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbbnVsbCwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl0sIGNvbXBsZXhUeXBlLCB1bmRlZmluZWQsIGZvcm1hdE9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFsaWdubWVudEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Db21wdXRlZEVkaXRNb2RlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0c0FsaWduRGlzcGxheSA9IFwiQmVnaW5cIixcblx0c0FsaWduRWRpdCA9IFwiQmVnaW5cIlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGVxdWFsKG9Db21wdXRlZEVkaXRNb2RlLCBcIkRpc3BsYXlcIiksIHNBbGlnbkRpc3BsYXksIHNBbGlnbkVkaXQpKTtcbn07XG5cbi8qKlxuICogRm9ybWF0dGVyIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgY29udmVydGVyQ29udGV4dCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGV4dC5cbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgb3JpZ2luYWwgbWV0YW1vZGVsIGNvbnRleHRcbiAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogQHJldHVybnMgVGhlIENvbnZlcnRlckNvbnRleHQgcmVwcmVzZW50aW5nIHRoYXQgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJ0ZXJDb250ZXh0ID0gZnVuY3Rpb24gKG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBvYmplY3QgfCBudWxsIHtcblx0aWYgKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0KSB7XG5cdFx0cmV0dXJuIGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9JbnRlcmZhY2UuY29udGV4dCkgYXMgb2JqZWN0O1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbmdldENvbnZlcnRlckNvbnRleHQucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbi8qKlxuICogRm9ybWF0dGVyIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIGZyb20gdGhlIG1ldGFtb2RlbCBjb250ZXh0LlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBvcmlnaW5hbCBPRGF0YU1ldGFNb2RlbCBjb250ZXh0XG4gKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVudGl0eXNldHMgYW5kIG5hdnByb3BlcnRpZXMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gZ2V0IHRvIGEgc3BlY2lmaWMgb2JqZWN0IGluIHRoZSBtZXRhbW9kZWxcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGggPSBmdW5jdGlvbiA8VD4oXG5cdG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LFxuXHRvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2Vcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gfCBudWxsIHtcblx0aWYgKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0KSB7XG5cdFx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvSW50ZXJmYWNlLmNvbnRleHQpO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbmdldERhdGFNb2RlbE9iamVjdFBhdGgucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSByZWZlcmVuY2VkIHByb3BlcnR5IGlzIHBhcnQgb2YgYSAxLi5uIG5hdmlnYXRpb24uXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggVGhlIGRhdGEgbW9kZWwgcGF0aCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgcGFydCBvZiBhIDEuLm4gbmF2aWdhdGlvblxuICovXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlRmllbGQgPSBmdW5jdGlvbiAob0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4pOiBib29sZWFuIHtcblx0aWYgKG9EYXRhTW9kZWxQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRjb25zdCBoYXNPbmVUb01hbnlOYXZpZ2F0aW9uID1cblx0XHRcdG9EYXRhTW9kZWxQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kSW5kZXgoKG9OYXYpID0+IHtcblx0XHRcdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkob05hdikpIHtcblx0XHRcdFx0XHRpZiAob0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHQvL3dlIGNoZWNrIHRoZSBvbmUgdG8gbWFueSBuYXYgaXMgbm90IGFscmVhZHkgcGFydCBvZiB0aGUgY29udGV4dFxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0b0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kSW5kZXgoXG5cdFx0XHRcdFx0XHRcdFx0KG9Db250ZXh0TmF2KSA9PiBvQ29udGV4dE5hdi5uYW1lID09PSBvTmF2Lm5hbWVcblx0XHRcdFx0XHRcdFx0KSA9PT0gLTFcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pID4gLTE7XG5cdFx0aWYgKGhhc09uZVRvTWFueU5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbkFzT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGZvcmNlRWRpdE1vZGUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGdldFJlcXVpcmVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCBmb3JjZUVkaXRNb2RlLCB0cnVlKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRmb3JjZUVkaXRNb2RlID0gZmFsc2UsXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRvUmVxdWlyZWRQcm9wZXJ0aWVzOiB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucz86IHVua25vd25bXTtcblx0XHRyZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zPzogdW5rbm93bltdO1xuXHR9ID0ge30sXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zID0gb1JlcXVpcmVkUHJvcGVydGllcy5yZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyA9IG9SZXF1aXJlZFByb3BlcnRpZXMucmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucztcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKGJBc09iamVjdCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KGZhbHNlKSk7XG5cdH1cblx0bGV0IHJlbGF0aXZlUGF0aDtcblx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGgpIHtcblx0XHRyZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCAmJiAhaXNQcm9wZXJ0eShvRGF0YUZpZWxkQ29udmVydGVkKSkge1xuXHRcdC8vIEZvciB0aGUgZGF0YWZpZWxkIGV4cHJlc3Npb24gd2Ugc2hvdWxkIG5vdCAgY29uc2lkZXIgdGhlIHJlbGF0aXZlIHBhdGhcblx0XHRkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb24gPSBpc1JlcXVpcmVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKTtcblx0fVxuXHRsZXQgcmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cdGxldCByZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKTtcblxuXHRjb25zdCBvUHJvcGVydHk6IFByb3BlcnR5ID0gKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IHJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0Y29uc3QgZWRpdE1vZGUgPSBmb3JjZUVkaXRNb2RlIHx8IFVJLklzRWRpdGFibGU7XG5cdGlmIChhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucz8uaW5jbHVkZXMob1Byb3BlcnR5Lm5hbWUpKSB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uID0gVUkuSXNDcmVhdGVNb2RlO1xuXHR9XG5cdGlmIChhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucz8uaW5jbHVkZXMob1Byb3BlcnR5Lm5hbWUpKSB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uID0gYW5kKFVJLklzRWRpdGFibGUsIG5vdChVSS5Jc0NyZWF0ZU1vZGUpKTtcblx0fVxuXHRjb25zdCByZXR1cm5FeHByZXNzaW9uID0gb3IoXG5cdFx0YW5kKG9yKHJlcXVpcmVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uKSwgZWRpdE1vZGUpLFxuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbixcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb25cblx0KTtcblx0aWYgKGJBc09iamVjdCkge1xuXHRcdHJldHVybiByZXR1cm5FeHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihyZXR1cm5FeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8QW5ub3RhdGlvblBhdGg8Q29ubmVjdGVkRmllbGRzVHlwZT4+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIERhdGFGaWVsZEFic3RyYWN0VHlwZXM+ID0gKGRhdGFGaWVsZE9iamVjdFBhdGg/LnRhcmdldE9iamVjdD8uJHRhcmdldD8uRGF0YSA/PyB7fSkgYXMgUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHREYXRhRmllbGRBYnN0cmFjdFR5cGVzXG5cdD47XG5cdGNvbnN0IGtleXM6IEFycmF5PHN0cmluZz4gPSBPYmplY3Qua2V5cyhkYXRhKTtcblx0Y29uc3QgZGF0YUZpZWxkcyA9IFtdO1xuXHRsZXQgcHJvcGVydHlQYXRoO1xuXHRjb25zdCBpc1JlcXVpcmVkRXhwcmVzc2lvbnM6IChDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPilbXSB8IHVuZGVmaW5lZCA9IFtdO1xuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0aWYgKGRhdGFba2V5XT8uW1wiJFR5cGVcIl0gJiYgZGF0YVtrZXldW1wiJFR5cGVcIl0/LmluY2x1ZGVzKFwiRGF0YUZpZWxkXCIpKSB7XG5cdFx0XHRkYXRhRmllbGRzLnB1c2goZGF0YVtrZXldKTtcblx0XHR9XG5cdH1cblx0Zm9yIChjb25zdCBkYXRhRmllbGQgb2YgZGF0YUZpZWxkcykge1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldCkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlPihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFtcblx0XHRcdFx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlXG5cdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlRhcmdldCA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cdFx0aXNSZXF1aXJlZEV4cHJlc3Npb25zLnB1c2goZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGQsIGZhbHNlKSk7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9yKC4uLihpc1JlcXVpcmVkRXhwcmVzc2lvbnMgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pKSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGhlYWRlciBmYWNldCBvciBhY3Rpb24gaXMgdmlzaWJsZS5cbiAqIEBwYXJhbSB0YXJnZXRPYmplY3QgSGVhZGVyIGZhY2V0cyBvciBBY3Rpb25zXG4gKiBAcmV0dXJucyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmlzaWJsZShcblx0dGFyZ2V0T2JqZWN0OlxuXHRcdHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1xuXHRcdHwgRGF0YVBvaW50VHlwZVR5cGVzXG5cdFx0fCBSZWZlcmVuY2VGYWNldFxuXHRcdHwgQ29sbGVjdGlvbkZhY2V0XG5cdFx0fCBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1xuXHRcdHwgRmllbGRHcm91cFxuXHRcdHwgUHJvcGVydHlcblx0XHR8IHVuZGVmaW5lZCxcblx0bmF2aWdhdGlvblByb3BlcnRpZXM/OiBzdHJpbmdbXVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiwgbmF2aWdhdGlvblByb3BlcnRpZXMpLCB0cnVlKSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYWN0aW9uIHBhcmFtZXRlciBpcyBzdXBwb3J0cyBtdWx0aSBsaW5lIGlucHV0LlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggT2JqZWN0IHBhdGggdG8gdGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyBCb29sZWFuXG4gKi9cbmV4cG9ydCBjb25zdCBpc011bHRpTGluZSA9IGZ1bmN0aW9uIChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPEFjdGlvblBhcmFtZXRlcj4pOiBib29sZWFuIHtcblx0cmV0dXJuIGlzTXVsdGlMaW5lVGV4dChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBhY3Rpb24gaXMgZW5hYmxlZC5cbiAqIEBwYXJhbSBhY3Rpb25UYXJnZXQgQWN0aW9uXG4gKiBAcGFyYW0gY29udmVydGVkVHlwZXMgQ29udmVydGVkTWV0YWRhdGFcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiBCb29sZWFuXG4gKiBAcmV0dXJucyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdGlvbkVuYWJsZWRFeHByZXNzaW9uKFxuXHRhY3Rpb25UYXJnZXQ6IEFjdGlvbixcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbj86IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZUlzQW5ub3RhdGVkID1cblx0XHRhY3Rpb25UYXJnZXQuYW5ub3RhdGlvbnMuQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlPy50ZXJtID09PSBDb3JlQW5ub3RhdGlvblRlcm1zLk9wZXJhdGlvbkF2YWlsYWJsZTtcblxuXHRpZiAoIW9wZXJhdGlvbkF2YWlsYWJsZUlzQW5ub3RhdGVkKSB7XG5cdFx0Ly8gT3BlcmF0aW9uQXZhaWxhYmxlIHRlcm0gZG9lc24ndCBleGlzdCBmb3IgdGhlIGFjdGlvblxuXHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0fVxuXG5cdGxldCBwcmVmaXggPSBcIlwiO1xuXHRpZiAoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCAmJlxuXHRcdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uICYmXG5cdFx0cGF0aEZyb21Db250ZXh0TG9jYXRpb24gPT09IHRydWUgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbj8udGFyZ2V0RW50aXR5VHlwZSAmJlxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLnRhcmdldEVudGl0eVR5cGUgIT09IGFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlXG5cdCkge1xuXHRcdGNvbnN0IG5hdmlnYXRpb25zID0gZ2V0UmVsYXRpdmVQYXRocyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRsZXQgc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0ID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24pO1xuXHRcdC8vU3RhcnQgZnJvbSBjb250ZXh0TG9jYXRpb24gYW5kIG5hdmlnYXRlIHVudGlsIHRoZSBzb3VyY2UgZW50aXR5VHlwZSBvZiB0aGUgYWN0aW9uIHRvIGdldCB0aGUgcmlnaHQgcHJlZml4XG5cdFx0Zm9yIChjb25zdCBuYXYgb2YgbmF2aWdhdGlvbnMpIHtcblx0XHRcdHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCwgbmF2KTtcblx0XHRcdGlmIChzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QudGFyZ2V0RW50aXR5VHlwZSA9PT0gYWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGUpIHtcblx0XHRcdFx0cHJlZml4ID0gYCR7Z2V0UmVsYXRpdmVQYXRocyhzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QpLmpvaW4oXCIvXCIpfS9gO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3QgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lID0gYWN0aW9uVGFyZ2V0LmlzQm91bmQgPyBhY3Rpb25UYXJnZXQucGFyYW1ldGVyc1swXT8uZnVsbHlRdWFsaWZpZWROYW1lIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdGFjdGlvblRhcmdldC5hbm5vdGF0aW9ucy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUsXG5cdFx0W10sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdChwYXRoOiBzdHJpbmcpID0+IGAke3ByZWZpeH0ke2JpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVkVHlwZXMsIGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSl9YFxuXHQpO1xuXG5cdHJldHVybiBlcXVhbChvcGVyYXRpb25BdmFpbGFibGVFeHByZXNzaW9uLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlIHF1aWNrVmlldyBmYWNldCBpcyB2aXNpYmxlLlxuICogQHBhcmFtIGZhY2V0TW9kZWxQYXRoXG4gKiBAcmV0dXJucyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgdmlzaWJpbGl0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNRdWlja1ZpZXdGYWNldFZpc2libGUoZmFjZXRNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UmVmZXJlbmNlRmFjZXQ+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRsZXQgdGFyZ2V0VmlzaWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RmllbGRHcm91cD4oZmFjZXRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5UYXJnZXQ/LiR0YXJnZXQsIFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlKSkge1xuXHRcdHRhcmdldFZpc2libGUgPSBpc1Zpc2libGUoZmFjZXRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5UYXJnZXQ/LiR0YXJnZXQpO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQoaXNWaXNpYmxlKGZhY2V0TW9kZWxQ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
@@ -159,7 +159,7 @@ export const FieldEditMode = {
159
159
  export const getDisplayMode = function (
160
160
  oDataModelObjectPath: DataModelObjectPath<Property | DataFieldAbstractTypes | DataPointTypeTypes>
161
161
  ): DisplayMode {
162
- return DisplayModeFormatter.getDisplayMode(oDataModelObjectPath.targetObject, oDataModelObjectPath);
162
+ return DisplayModeFormatter.getDisplayMode(oDataModelObjectPath.targetObject, oDataModelObjectPath.targetEntityType);
163
163
  };
164
164
  export const getEditableExpressionAsObject = function (
165
165
  oPropertyPath: PropertyOrPath<Property>,