@sapui5/sap.fe.core 1.124.1 → 1.124.3

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.
@@ -932,4 +932,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
932
932
  _exports.getExpandFilterFields = getExpandFilterFields;
933
933
  return _exports;
934
934
  }, false);
935
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbCIsImxpc3RSZXBvcnRUYWJsZXMiLCJjb250ZXh0UGF0aCIsImxlbmd0aCIsImV2ZXJ5IiwidmlzdWFsaXphdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsImFubm90YXRpb24iLCJjb2xsZWN0aW9uIiwiZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwiY29udmVydGVyQ29udGV4dCIsInNlbGVjdGlvblZhcmlhbnRQYXRocyIsIlNldCIsIm1hbmlmZXN0RmlsdGVyRmllbGRzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlckZpZWxkcyIsInNlbGVjdGlvbkZpZWxkUGF0aHMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsIlVJIiwiU2VsZWN0aW9uRmllbGRzIiwibWFwIiwic2VsZWN0aW9uRmllbGQiLCJ2YWx1ZSIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJrZXkiLCJ0ZW1wbGF0ZSIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImlzQ29tcGxleFR5cGUiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsIl9nZXRGaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHVzaCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJjaGFydHMiLCJub1NlYXJjaEluQ2hhcnRzIiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImdldENvbnRleHRQYXRoIiwiZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJtYW5pZmVzdFdyYXBwZXIiLCJlbnRpdHlTZXRJbk11bHRpVmlldyIsImdldFZpZXdDb25maWd1cmF0aW9uIiwiZW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0IiwiY2hlY2tTYW1lRW50aXR5U2V0IiwiZmJDb25maWciLCJkZWZpbmVkRmlsdGVyRmllbGRzIiwiZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleSIsInNLZXkiLCJTbG90IiwiRGVmYXVsdCIsInZpc3VhbEZpbHRlciIsImdldFZpc3VhbEZpbHRlcnMiLCJpc0N1c3RvbUZpbHRlciIsInNsb3ROYW1lIiwiZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJyZXF1aXJlZCIsInNhbWVFbnRpdHlTZXQiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInNSZXN0cmljdGlvbiIsImFQcm9wcyIsIm9Qcm9wZXJ0eSIsImdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJQcm9wZXJ0eSIsIkFsbG93ZWRFeHByZXNzaW9ucyIsImdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbyIsImRhdGFUeXBlIiwibWF4Q29uZGl0aW9ucyIsImdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbyIsImhpZGRlbkZpbHRlciIsImdldFNlYXJjaFJlc3RyaWN0aW9ucyIsImlzRW50aXR5U2V0IiwiQ2FwYWJpbGl0aWVzIiwiU2VhcmNoUmVzdHJpY3Rpb25zIiwiZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsInNOYXZpZ2F0aW9uUGF0aCIsIm9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsIl9mZXRjaEJhc2ljUHJvcGVydHlJbmZvIiwib0ZpbHRlckZpZWxkSW5mbyIsImRpc3BsYXkiLCJjYXNlU2Vuc2l0aXZlIiwibWVudSIsIl9nZXRNaXNzaW5nTGFiZWxGb3JNYW5pZmVzdEZpbHRlckZpZWxkcyIsImhhc093blByb3BlcnR5IiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsImFFeHByZXNzaW9ucyIsImFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSIsInNvcnQiLCJhIiwiYiIsImluZGV4T2YiLCJkaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwib0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyIsIm9UZXh0QW5ub3RhdGlvbiIsIlRleHQiLCJvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uIiwiVGV4dEFycmFuZ2VtZW50IiwiZmV0Y2hQcm9wZXJ0eUluZm8iLCJvVHlwZUNvbmZpZyIsIm9Qcm9wZXJ0eUluZm8iLCJzQW5ub3RhdGlvblBhdGgiLCJ0YXJnZXRQcm9wZXJ0eU9iamVjdCIsIm9Gb3JtYXRPcHRpb25zIiwiZm9ybWF0T3B0aW9ucyIsIm9Db25zdHJhaW50cyIsImNvbnN0cmFpbnRzIiwiYXNzaWduIiwiaXNNdWx0aVZhbHVlIiwiYklzTXVsdGlWYWx1ZSIsImZpbHRlckV4cHJlc3Npb24iLCJfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5IiwiZW50cnkiLCJpbmNsdWRlcyIsImFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMiLCJuYXZQcm9wZXJ0aWVzIiwidGFyZ2V0UHJvcGVydHkiLCIkdGFyZ2V0IiwiYWRkaXRpb25hbFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSIsIlRhcmdldCIsImlubmVyRGF0YUZpZWxkIiwiZ2V0UmVsYXRpdmVQYXRocyIsImdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsImxyVGFibGVzIiwibGluZUl0ZW1UZXJtIiwiZ2V0RW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0Um9vdCIsInNlbGVjdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsInByb3BlcnR5SW5mb0ZpZWxkcyIsInJlZHVjZSIsInN0YXJ0c1dpdGgiLCJmaWx0ZXJQcm9wZXJ0eVBhdGgiLCJkZWZhdWx0RmlsdGVyRmllbGRzIiwiZmV0Y2hUeXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsIm51bGxhYmxlIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb0ZpZWxkIiwiYVJlcXVpcmVkUHJvcHMiLCJhVHlwZUNvbmZpZyIsInJlcGxhY2UiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJwcm9jZXNzU2VsZWN0aW9uRmllbGRzIiwiZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMiLCJjb25jYXQiLCJwYXJhbWV0ZXJGaWVsZCIsInByb3BlcnR5Q29udmVydHlDb250ZXh0IiwicHJvcGVydHlUYXJnZXRPYmplY3QiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwib1JldCIsIlJlcXVpcmVkUHJvcGVydGllcyIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwic0VudGl0eVNldFBhdGgiLCJhUGF0aFBhcnRzIiwic3BsaWNlIiwib05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMiLCJhTm9uRmlsdGVyYWJsZVByb3BzIiwiYUZldGNoZWRQcm9wZXJ0aWVzIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJzZWFyY2hSZXN0cmljdGlvbnMiLCJoaWRlQmFzaWNTZWFyY2giLCJCb29sZWFuIiwiU2VhcmNoYWJsZSIsImluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsInNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsIiwicHJvcGVydHlJbmZvcyIsImFHcm91cExhYmVsSXNTZXQiLCJiR3JvdXBMYWJlbElzU2V0IiwibG9jYWxlQ29tcGFyZSIsImdldFNlbGVjdGlvbkZpZWxkcyIsIm9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJwYXJhbWV0ZXJGaWVsZHMiLCJzRmV0Y2hQcm9wZXJ0aWVzIiwiSlNPTiIsInN0cmluZ2lmeSIsInNQcm9wZXJ0eUluZm8iLCJwcm9wU2VsZWN0aW9uRmllbGRzIiwicGFyc2UiLCJmaWx0ZXJGYWNldHMiLCJGaWx0ZXJGYWNldHMiLCJhRmllbGRHcm91cHMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsImkiLCJwcmV2aW91c1ZhbHVlIiwiZmlsdGVyRmFjZXQiLCJJRCIsImFsbEZpbHRlcnMiLCJzQ29udGV4dFBhdGgiLCJhZ2dyZWdhdGVzIiwiYWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFnZ3JlZ2F0ZUtleSIsInJlbGF0aXZlUGF0aCIsImlzQ2FzZVNlbnNpdGl2ZSIsImdldEV4cGFuZEZpbHRlckZpZWxkcyIsImZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJ2YWx1ZUxpc3QiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJGZXRjaFZhbHVlcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRlcm0sIEVudGl0eVNldCwgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGUsXG5cdEZpbHRlckV4cHJlc3Npb25UeXBlLFxuXHRGaWx0ZXJSZXN0cmljdGlvbnMsXG5cdEZpbHRlclJlc3RyaWN0aW9uc1R5cGUsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uLFxuXHRTZWFyY2hSZXN0cmljdGlvbnNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHsgVmFsdWVMaXN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5VHlwZUFubm90YXRpb25zLCBQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9FZG1fVHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhRmllbGRXaXRoVXJsLFxuXHRGaWVsZEdyb3VwLFxuXHRMaW5lSXRlbSxcblx0UmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0U2VsZWN0T3B0aW9uVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5VHlwZUNvbmZpZywgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiwgZ2V0VHlwZUNvbmZpZywgaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB7IGdldFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50LCBQb3NpdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIFBsYWNlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGlzQ29tcGxleFR5cGUsIGlzRW50aXR5U2V0LCBpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5LCBpc05hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRSZWxhdGl2ZVBhdGhzLCBnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGhcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJTZXR0aW5ncyxcblx0U2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuXG4vL2ltcG9ydCB7IGhhc1ZhbHVlSGVscCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckZpZWxkID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlPzogc3RyaW5nO1xuXHRrZXk/OiBzdHJpbmc7XG5cdGRhdGFUeXBlPzogc3RyaW5nO1xuXHRuYW1lPzogc3RyaW5nO1xuXHRjb25kaXRpb25QYXRoOiBzdHJpbmc7XG5cdGF2YWlsYWJpbGl0eTogQXZhaWxhYmlsaXR5VHlwZTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0bWVudT86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0c2V0dGluZ3M/OiBGaWx0ZXJTZXR0aW5ncztcblx0aXNQYXJhbWV0ZXI/OiBib29sZWFuO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTWFuaWZlc3RGaWx0ZXJGaWVsZCA9IEZpbHRlckZpZWxkICYge1xuXHRzbG90TmFtZT86IHN0cmluZztcbn07XG5cbnR5cGUgRmlsdGVyR3JvdXAgPSB7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xufTtcblxuZW51bSBmaWx0ZXJGaWVsZFR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG5jb25zdCBzRWRtU3RyaW5nID0gXCJFZG0uU3RyaW5nXCI7XG5jb25zdCBzU3RyaW5nRGF0YVR5cGUgPSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiO1xuXG5leHBvcnQgdHlwZSBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQgPSBDdXN0b21FbGVtZW50PE1hbmlmZXN0RmlsdGVyRmllbGQ+O1xuXG4vKipcbiAqIEVudGVyIGFsbCBEYXRhRmllbGRzIG9mIGEgZ2l2ZW4gRmllbGRHcm91cCBpbnRvIHRoZSBmaWx0ZXJGYWNldE1hcC5cbiAqXG4gKiBAcGFyYW0gZmllbGRHcm91cFxuICogQHJldHVybnMgVGhlIG1hcCBvZiBmYWNldHMgZm9yIHRoZSBnaXZlbiBGaWVsZEdyb3VwXG4gKi9cbmZ1bmN0aW9uIGdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoZmllbGRHcm91cDogRmllbGRHcm91cCk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiB7XG5cdGNvbnN0IGZpbHRlckZhY2V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4gPSB7fTtcblx0ZmllbGRHcm91cC5EYXRhLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCIpIHtcblx0XHRcdGZpbHRlckZhY2V0TWFwW2RhdGFGaWVsZC5WYWx1ZS5wYXRoXSA9IHtcblx0XHRcdFx0Z3JvdXA6IGZpZWxkR3JvdXAuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRncm91cExhYmVsOiBmaWVsZEdyb3VwLkxhYmVsPy50b1N0cmluZygpID8/IGZpZWxkR3JvdXAuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gZmllbGRHcm91cC5xdWFsaWZpZXJcblx0XHRcdH07XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGZpbHRlckZhY2V0TWFwO1xufVxuXG4vKipcbiAqIENoZWNrIHRoYXQgYWxsIHRoZSB0YWJsZXMgZm9yIGEgZGVkaWNhdGVkIGVudGl0eSBzZXQgYXJlIGNvbmZpZ3VyZWQgYXMgYW5hbHl0aWNhbCB0YWJsZXMuXG4gKlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgTGlzdCByZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0gY29udGV4dFBhdGhcbiAqIEByZXR1cm5zIElzIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaGlkZGVuIG9yIG5vdFxuICovXG5mdW5jdGlvbiBjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbChsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSwgY29udGV4dFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRpZiAoY29udGV4dFBhdGggJiYgbGlzdFJlcG9ydFRhYmxlcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljcyAmJiBjb250ZXh0UGF0aCA9PT0gdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb247XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0aW9uIHZhcmlhbnRzIHVzZWQgaW4gdGhlIGRpZmZlcmVudCB2aXN1YWxpemF0aW9ucyB0aGF0IHNob3VsZCBiZSBleGNsdWRlZC5cbiAqXG4gKiBAcGFyYW0gbHJUYWJsZVZpc3VhbGl6YXRpb25zIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGV4Y2x1ZGVkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKFxuXHRsclRhYmxlVmlzdWFsaXphdGlvbnM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNldDxzdHJpbmc+IHtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkuZmlsdGVyRmllbGRzID8/IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFtcblx0XHQvL1NlbGVjdGlvbiBGaWVsZHMgY29taW5nIGZyb20gdGhlIGFubm90YXRpb25cblx0XHQuLi4oY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgPz8gW10pLm1hcChcblx0XHRcdChzZWxlY3Rpb25GaWVsZCkgPT4gc2VsZWN0aW9uRmllbGQudmFsdWVcblx0XHQpLFxuXHRcdC8vU2VsZWN0aW9uIEZpZWxkcyBjb21pbmcgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIG5vdCB3aXRoIGN1c3RvbSB0ZW1wbGF0ZVxuXHRcdC4uLk9iamVjdC5rZXlzKG1hbmlmZXN0RmlsdGVyRmllbGRzKS5maWx0ZXIoKGtleSkgPT4gISFtYW5pZmVzdEZpbHRlckZpZWxkc1trZXldLnRlbXBsYXRlKVxuXHRdKTtcblxuXHRyZXR1cm4gbmV3IFNldChcblx0XHRsclRhYmxlVmlzdWFsaXphdGlvbnNcblx0XHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0Y29uc3QgdGFibGVGaWx0ZXJzID0gdmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnM7XG5cdFx0XHRcdGlmICghdGFibGVGaWx0ZXJzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBbLi4uKHRhYmxlRmlsdGVycy5oaWRkZW5GaWx0ZXJzPy5wYXRocyA/PyBbXSksIC4uLih0YWJsZUZpbHRlcnMucXVpY2tGaWx0ZXJzPy5wYXRocyA/PyBbXSldLm1hcCgocGF0aCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gcGF0aC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRpZiAoIXNlbGVjdGlvblZhcmlhbnRQYXRocy5oYXMoYW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aHMuYWRkKGFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRDb25maWcgPSBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudENvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMgPSBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHRcdChwcm9wZXJ0eU5hbWUpID0+ICFzZWxlY3Rpb25GaWVsZFBhdGhzLmhhcyhwcm9wZXJ0eU5hbWUpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZsYXQoMilcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25kaXRpb24gcGF0aCByZXF1aXJlZCBmb3IgdGhlIGNvbmRpdGlvbiBtb2RlbC4gSXQgbG9va3MgYXMgZm9sbG93czpcbiAqIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHJvb3QgRW50aXR5VHlwZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgY29uZGl0aW9uIHBhdGhcbiAqL1xuY29uc3QgX2dldENvbmRpdGlvblBhdGggPSBmdW5jdGlvbiAoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBwYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBwYXJ0aWFsUGF0aDtcblx0bGV0IGtleSA9IFwiXCI7XG5cdHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcblx0XHRsZXQgcGFydCA9IHBhcnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuXHRcdHBhcnRpYWxQYXRoID0gcGFydGlhbFBhdGggPyBgJHtwYXJ0aWFsUGF0aH0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHRcdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGFydGlhbFBhdGgpO1xuXHRcdGlmIChpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0cGFydCArPSBcIipcIjtcblx0XHR9XG5cdFx0a2V5ID0ga2V5ID8gYCR7a2V5fS8ke3BhcnR9YCA6IHBhcnQ7XG5cdH1cblx0cmV0dXJuIGtleTtcbn07XG5cbmNvbnN0IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZCA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHQvLyBpZ25vcmUgY29tcGxleCBwcm9wZXJ0eSB0eXBlcyBhbmQgaGlkZGVuIGFubm90YXRlZCBvbmVzXG5cdGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS50YXJnZXRUeXBlID09PSB1bmRlZmluZWQgJiYgKGluY2x1ZGVIaWRkZW4gfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkpIHtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShwcm9wZXJ0eSksXG5cdFx0XHRmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdldFNlbGVjdGlvbkZpZWxkS2V5RnJvbVBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGNvbmRpdGlvblBhdGg6IF9nZXRDb25kaXRpb25QYXRoKGVudGl0eVR5cGUsIGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCkgPT09IHRydWUgPyBcIkhpZGRlblwiIDogXCJBZGFwdGF0aW9uXCIsXG5cdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdGdyb3VwOiB0YXJnZXRFbnRpdHlUeXBlLm5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IHRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IHRhcmdldEVudGl0eVR5cGUubmFtZVxuXHRcdFx0fTtcblx0XHRnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZCk7XG5cdFx0cmV0dXJuIGZpbHRlckZpZWxkO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdGVjaG5pY2FsIHByb3BlcnR5IERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLiBPbmx5IHJlbGV2YW50IGZvciBDcmVhdGlvbkRhdGVUaW1lXG4gKiBhbmQgTGFzdENoYW5nZURhdGVUaW1lLCBhcyB0aGV5IGFyZSBkaXNwbGF5aW5nIHRoZSB0aW1lZnJhbWUgcmVsYXRlZCBwcm9wZXJ0aWVzIGFzIGEgU2VtYW50aWNEYXRlUmFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbHRlckZpZWxkXG4gKi9cbmNvbnN0IGdldFNldHRpbmdzT2ZEZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCk6IHZvaWQge1xuXHRpZiAoXG5cdFx0ZmlsdGVyRmllbGQua2V5ID09PSBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhOjpDcmVhdGlvbkRhdGVUaW1lXCIgfHxcblx0XHRmaWx0ZXJGaWVsZC5rZXkgPT09IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGE6Okxhc3RDaGFuZ2VEYXRlVGltZVwiXG5cdCkge1xuXHRcdGNvbnN0IHN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMgPSBbXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLlRPLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5UT01PUlJPVyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFdFRUssXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRNT05USCxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFFVQVJURVIsXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRZRUFSXG5cdFx0XTtcblx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncyA9IHtcblx0XHRcdG9wZXJhdG9yQ29uZmlndXJhdGlvbjogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0aDogXCJrZXlcIixcblx0XHRcdFx0XHRlcXVhbHM6IHN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuam9pbihcIixcIiksXG5cdFx0XHRcdFx0ZXhjbHVkZTogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0fVxufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZyxcblx0cHJvcGVydGllczogQXJyYXk8UHJvcGVydHk+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkTWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0Y29uc3QgZnVsbFBhdGg6IHN0cmluZyA9IChuYXZpZ2F0aW9uUGF0aCA/IGAke25hdmlnYXRpb25QYXRofS9gIDogXCJcIikgKyBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBwcm9wZXJ0eSwgZnVsbFBhdGgsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKHNlbGVjdGlvbkZpZWxkKSB7XG5cdFx0XHRcdHNlbGVjdGlvbkZpZWxkTWFwW2Z1bGxQYXRoXSA9IHNlbGVjdGlvbkZpZWxkO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZE1hcDtcbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGggPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5UGF0aHM6IEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0bGV0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0eVBhdGhzKSB7XG5cdFx0cHJvcGVydHlQYXRocy5mb3JFYWNoKChwcm9wZXJ0eVBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IGxvY2FsU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0XHRcdGNvbnN0IGVuaGFuY2VkUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdHByb3BlcnR5UGF0aFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gZW5oYW5jZWRQYXRoLnRhcmdldE9iamVjdDtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydHkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoIWluY2x1ZGVIaWRkZW4gJiZcblx0XHRcdFx0XHRlbmhhbmNlZFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZChcblx0XHRcdFx0XHRcdChuYXZpZ2F0aW9uUHJvcGVydHkpID0+IG5hdmlnYXRpb25Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlXG5cdFx0XHRcdFx0KSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUuZW50aXR5UHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSBpZiAoaXNDb21wbGV4VHlwZShwcm9wZXJ0eS50YXJnZXRUeXBlKSkge1xuXHRcdFx0XHQvLyBoYW5kbGUgQ29tcGxleFR5cGUgcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0Z2V0VGFyZ2V0TmF2aWdhdGlvblBhdGgoZW5oYW5jZWRQYXRoLCB0cnVlKSxcblx0XHRcdFx0XHRbcHJvcGVydHldLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMgPSB7XG5cdFx0XHRcdC4uLnNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdFx0Li4ubG9jYWxTZWxlY3Rpb25GaWVsZHNcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbmNvbnN0IF9nZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0bGV0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRkZWxldGUgZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpLCBwcm9wZXJ0eVBhdGgsIHRydWUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9XG5cdGlmICghZmlsdGVyRmllbGQpIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCk/LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUlTU0lOR19TRUxFQ1RJT05GSUVMRCk7XG5cdH1cblx0Ly8gZGVmaW5lZCBTZWxlY3Rpb25GaWVsZHMgYXJlIGF2YWlsYWJsZSBieSBkZWZhdWx0XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIiA/IFwiSGlkZGVuXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRmaWx0ZXJGaWVsZC5pc1BhcmFtZXRlciA9ICEhZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZDtcbn07XG5cbmNvbnN0IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRhU2VsZWN0T3B0aW9uczogU2VsZWN0T3B0aW9uVHlwZVtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogU2V0PHN0cmluZz4sXG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogUHJvcGVydHlQYXRoW11cbik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBbXTtcblx0Y29uc3QgVUlTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXM7XG5cdC8vIFVzaW5nIGVudGl0eVR5cGUgaW5zdGVhZCBvZiBlbnRpdHlTZXRcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFVJU2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdH0pO1xuXHRpZiAoYVNlbGVjdE9wdGlvbnMgJiYgYVNlbGVjdE9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdGFTZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcHJvcGVydHlOYW1lPy52YWx1ZTtcblx0XHRcdGNvbnN0IGN1cnJlbnRTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHNQcm9wZXJ0eVBhdGggJiYgIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMoc1Byb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0aWYgKCEoc1Byb3BlcnR5UGF0aCBpbiBjdXJyZW50U2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHNQcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEZpbHRlclZhbHVlID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmlsdGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGlmICghKHByb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdGlmIChkZWZhdWx0RmlsdGVyVmFsdWUgJiYgIShwcm9wZXJ0eVBhdGggaW4gVUlTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZ2V0RmlsdGVyRmllbGQocHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuLyoqXG4gKiBHZXQgYWxsIHBhcmFtZXRlciBmaWx0ZXIgZmllbGRzIGluIGNhc2Ugb2YgYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2UuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHBhcmFtZXRlciBGaWx0ZXJGaWVsZHNcbiAqL1xuZnVuY3Rpb24gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWQgPSAhIXBhcmFtZXRlckVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dCAmJiAhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQgPVxuXHRcdGlzUGFyYW1ldGVyaXplZCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8RW50aXR5U2V0PihgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWApO1xuXG5cdHJldHVybiAoXG5cdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dFxuXHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHBhcmFtZXRlckVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXVxuXHQpIGFzIEZpbHRlckZpZWxkW107XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90LlxuICpcbiAqIEBwYXJhbSBsaXN0UmVwb3J0VGFibGVzIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjaGFydHMgVGhlIEFMUCBjaGFydHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGluZm9ybWF0aW9uIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpbHRlckJhckhpZGVCYXNpY1NlYXJjaCA9IGZ1bmN0aW9uIChcblx0bGlzdFJlcG9ydFRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogYm9vbGVhbiB7XG5cdC8vIENoZWNrIGlmIGNoYXJ0cyBhbGxvdyBzZWFyY2hcblx0Y29uc3Qgbm9TZWFyY2hJbkNoYXJ0cyA9IGNoYXJ0cy5sZW5ndGggPT09IDAgfHwgY2hhcnRzLmV2ZXJ5KChjaGFydCkgPT4gIWNoYXJ0LmFwcGx5U3VwcG9ydGVkLmVuYWJsZVNlYXJjaCk7XG5cblx0Ly8gQ2hlY2sgaWYgYWxsIHRhYmxlcyBhcmUgYW5hbHl0aWNhbCBhbmQgbm9uZSBvZiB0aGVtIGFsbG93IGZvciBzZWFyY2hcblx0Ly8gb3IgYWxsIHRhYmxlcyBhcmUgVHJlZVRhYmxlIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluVGFibGVzID1cblx0XHRsaXN0UmVwb3J0VGFibGVzLmxlbmd0aCA9PT0gMCB8fFxuXHRcdGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHRhYmxlKSA9PiAodGFibGUuZW5hYmxlQW5hbHl0aWNzIHx8IHRhYmxlLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikgJiYgIXRhYmxlLmVuYWJsZUJhc2ljU2VhcmNoKTtcblxuXHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0aWYgKGNvbnRleHRQYXRoICYmIG5vU2VhcmNoSW5DaGFydHMgJiYgbm9TZWFyY2hJblRhYmxlcykge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgZmlsdGVyIGZpZWxkcyBmcm9tIHRoZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgZmllbGRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+IHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Ly9DaGVjayBpZiBtdWx0aWVudGl0eSBzZXRzIGluIG1hbmlmZXN0IGhhdmUgdGhlIHNhbWUgZW50aXR5IHR5cGVcblx0Y29uc3QgZW50aXR5U2V0SW5NdWx0aVZpZXcgPSBtYW5pZmVzdFdyYXBwZXJcblx0XHQuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKVxuXHRcdD8ucGF0aHMuZmluZCgocGF0aCkgPT4gKHBhdGggYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5lbnRpdHlTZXQgPT09IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/Lm5hbWUpO1xuXG5cdGlmICghZW50aXR5U2V0SW5NdWx0aVZpZXcgJiYgIWNoZWNrU2FtZUVudGl0eVNldChtYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQpKSB7XG5cdFx0Ly9yZXR1cm4gaWYgZW50aXR5IHR5cGUgZG9lcyBub3QgbWF0Y2ggZW50aXR5IHNldHMgaW4gbWFuaWZlc3Rcblx0XHRyZXR1cm4ge307XG5cdH1cblx0Y29uc3QgZmJDb25maWc6IEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBkZWZpbmVkRmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj4gPSBmYkNvbmZpZz8uZmlsdGVyRmllbGRzIHx8IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRPYmplY3Qua2V5cyhkZWZpbmVkRmlsdGVyRmllbGRzKS5tYXAoKGtleSkgPT4gZGVmaW5lZEZpbHRlckZpZWxkc1trZXldLnByb3BlcnR5ID8/IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KGtleSkpLFxuXHRcdHRydWUsXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHQpO1xuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gZGVmaW5lZEZpbHRlckZpZWxkcykge1xuXHRcdGNvbnN0IGZpbHRlckZpZWxkID0gZGVmaW5lZEZpbHRlckZpZWxkc1tzS2V5XTtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBmaWx0ZXJGaWVsZC5wcm9wZXJ0eSA/PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KTtcblx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IHNlbGVjdGlvbkZpZWxkc1twcm9wZXJ0eU5hbWVdO1xuXHRcdGNvbnN0IHR5cGUgPSBmaWx0ZXJGaWVsZC50eXBlID09PSBcIlNsb3RcIiA/IGZpbHRlckZpZWxkVHlwZS5TbG90IDogZmlsdGVyRmllbGRUeXBlLkRlZmF1bHQ7XG5cdFx0Y29uc3QgdmlzdWFsRmlsdGVyID1cblx0XHRcdGZpbHRlckZpZWxkICYmIGZpbHRlckZpZWxkPy52aXN1YWxGaWx0ZXJcblx0XHRcdFx0PyBnZXRWaXN1YWxGaWx0ZXJzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHNLZXksIGRlZmluZWRGaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChmaWx0ZXJGaWVsZC50ZW1wbGF0ZSB8fCBmaWx0ZXJGaWVsZC50eXBlID09PSBmaWx0ZXJGaWVsZFR5cGUuU2xvdCkge1xuXHRcdFx0aWYgKGZpbHRlckZpZWxkLnNldHRpbmdzKSB7XG5cdFx0XHRcdGZpbHRlckZpZWxkLnNldHRpbmdzLmlzQ3VzdG9tRmlsdGVyID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpbHRlckZpZWxkLnNldHRpbmdzID0ge1xuXHRcdFx0XHRcdGlzQ3VzdG9tRmlsdGVyOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZpbHRlckZpZWxkc1tzS2V5XSA9IHtcblx0XHRcdGtleTogc0tleSxcblx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRzbG90TmFtZTogZmlsdGVyRmllbGQ/LnNsb3ROYW1lIHx8IHNLZXksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmFubm90YXRpb25QYXRoLFxuXHRcdFx0Y29uZGl0aW9uUGF0aDogZmlsdGVyRmllbGQucHJvcGVydHlcblx0XHRcdFx0PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KVxuXHRcdFx0XHQ6IHNlbGVjdGlvbkZpZWxkPy5jb25kaXRpb25QYXRoIHx8IHByb3BlcnR5TmFtZSxcblx0XHRcdHRlbXBsYXRlOiBmaWx0ZXJGaWVsZC50ZW1wbGF0ZSxcblx0XHRcdGxhYmVsOiBjb252ZXJ0ZXJDb250ZXh0LmZldGNoVGV4dEZyb21NZXRhTW9kZWwoZmlsdGVyRmllbGQubGFiZWwpLFxuXHRcdFx0cG9zaXRpb246IGZpbHRlckZpZWxkLnBvc2l0aW9uIHx8IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXIgfSxcblx0XHRcdGF2YWlsYWJpbGl0eTogZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5IHx8IFwiRGVmYXVsdFwiLFxuXHRcdFx0c2V0dGluZ3M6IGZpbHRlckZpZWxkLnNldHRpbmdzLFxuXHRcdFx0dmlzdWFsRmlsdGVyOiB2aXN1YWxGaWx0ZXIsXG5cdFx0XHRyZXF1aXJlZDogZmlsdGVyRmllbGQucmVxdWlyZWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZHM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW50aXR5IHNldCBpcyB0aGUgc2FtZSBmb3IgYm90aCB0aGUgbWFuaWZlc3QgYW5kIGNvbnZlcnRlciBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdFdyYXBwZXIgTWFuaWZlc3Qgd3JhcHBlclxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBtYW5pZmVzdCBmaWx0ZXJzIGhhdmUgdGhlIHNhbWUgZW50aXR5IHNldCBhcyB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqL1xuY29uc3QgY2hlY2tTYW1lRW50aXR5U2V0ID0gZnVuY3Rpb24gKFxuXHRtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNhbWVFbnRpdHlTZXQ7XG5cdGlmICghKCFtYW5pZmVzdFdyYXBwZXIuZ2V0Q29udGV4dFBhdGgoKSB8fCBtYW5pZmVzdFdyYXBwZXIuZ2V0Q29udGV4dFBhdGgoKT8ubGVuZ3RoID09PSAwKSkge1xuXHRcdHNhbWVFbnRpdHlTZXQgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Q29udGV4dFBhdGgoKSA9PT0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHR9IGVsc2UgaWYgKCEoIW1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKSB8fCBtYW5pZmVzdFdyYXBwZXIuZ2V0RW50aXR5U2V0KCk/Lmxlbmd0aCA9PT0gMCkpIHtcblx0XHRzYW1lRW50aXR5U2V0ID0gbWFuaWZlc3RXcmFwcGVyLmdldEVudGl0eVNldCgpID09PSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5uYW1lO1xuXHR9XG5cdHJldHVybiBzYW1lRW50aXR5U2V0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoe30sIHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zVHlwZSB8IHVuZGVmaW5lZCxcblx0c1Jlc3RyaWN0aW9uOiBcIlJlcXVpcmVkUHJvcGVydGllc1wiIHwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiXG4pOiBzdHJpbmdbXSB7XG5cdGxldCBhUHJvcHM6IHN0cmluZ1tdID0gW107XG5cdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dKSB7XG5cdFx0YVByb3BzID0gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS52YWx1ZTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVByb3BzO1xufTtcbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckV4cHJlc3Npb25UeXBlW10+IHtcblx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyRXhwcmVzc2lvblR5cGVbXT4gPSB7fTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMpIHtcblx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZSkge1xuXHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0aWYgKG9Qcm9wZXJ0eS5Qcm9wZXJ0eT8udmFsdWUgJiYgb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucykge1xuXHRcdFx0XHRpZiAobUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHk/LnZhbHVlXSkge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5Py52YWx1ZV0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5Py52YWx1ZV0gPSBbb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucy50b1N0cmluZygpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtQWxsb3dlZEV4cHJlc3Npb25zO1xufTtcblxuY29uc3QgZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkc2VhcmNoXCIsXG5cdFx0cGF0aDogXCIkc2VhcmNoXCIsXG5cdFx0ZGF0YVR5cGU6IHNTdHJpbmdEYXRhVHlwZSxcblx0XHRtYXhDb25kaXRpb25zOiAxXG5cdH07XG59O1xuXG5jb25zdCBnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoKTogUHJvcGVydHlJbmZvIHtcblx0cmV0dXJuIHtcblx0XHRuYW1lOiBcIiRlZGl0U3RhdGVcIixcblx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdGdyb3VwOiBcIlwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0aGlkZGVuRmlsdGVyOiBmYWxzZVxuXHR9O1xufTtcblxuY29uc3QgZ2V0U2VhcmNoUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFNlYXJjaFJlc3RyaWN0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uU2VhcmNoUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c05hdmlnYXRpb25QYXRoOiBzdHJpbmdcbik6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0cmV0dXJuIChcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMgJiZcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob1Jlc3RyaWN0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25QYXRoXG5cdFx0XHQpO1xuXHRcdH0pXG5cdCk7XG59O1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eUluZm8gPSB7XG5cdGtleT86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0cGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRtYXhDb25kaXRpb25zPzogbnVtYmVyO1xuXHRkYXRhVHlwZT86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGhpZGRlbkZpbHRlcj86IGJvb2xlYW47XG5cdGRpc3BsYXk/OiBzdHJpbmc7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG5cdHR5cGU/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRtZW51Pzogc3RyaW5nO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGZpbHRlckV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGlzQ3VzdG9tRmlsdGVyPzogYm9vbGVhbjtcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG59O1xuY29uc3QgX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAob0ZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQpOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdGtleTogb0ZpbHRlckZpZWxkSW5mby5rZXksXG5cdFx0YW5ub3RhdGlvblBhdGg6IG9GaWx0ZXJGaWVsZEluZm8uYW5ub3RhdGlvblBhdGgsXG5cdFx0Y29uZGl0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoLFxuXHRcdG5hbWU6IG9GaWx0ZXJGaWVsZEluZm8uY29uZGl0aW9uUGF0aCxcblx0XHRsYWJlbDogb0ZpbHRlckZpZWxkSW5mby5sYWJlbCxcblx0XHRoaWRkZW5GaWx0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiLFxuXHRcdGRpc3BsYXk6IFwiVmFsdWVcIixcblx0XHRpc1BhcmFtZXRlcjogb0ZpbHRlckZpZWxkSW5mby5pc1BhcmFtZXRlcixcblx0XHRjYXNlU2Vuc2l0aXZlOiBvRmlsdGVyRmllbGRJbmZvLmNhc2VTZW5zaXRpdmUsXG5cdFx0YXZhaWxhYmlsaXR5OiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSxcblx0XHRwb3NpdGlvbjogb0ZpbHRlckZpZWxkSW5mby5wb3NpdGlvbixcblx0XHR0eXBlOiBvRmlsdGVyRmllbGRJbmZvLnR5cGUsXG5cdFx0dGVtcGxhdGU6IG9GaWx0ZXJGaWVsZEluZm8udGVtcGxhdGUsXG5cdFx0bWVudTogb0ZpbHRlckZpZWxkSW5mby5tZW51LFxuXHRcdHJlcXVpcmVkOiBvRmlsdGVyRmllbGRJbmZvLnJlcXVpcmVkLFxuXHRcdGlzQ3VzdG9tRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLnNldHRpbmdzPy5pc0N1c3RvbUZpbHRlclxuXHR9O1xufTtcblxuY29uc3QgX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0bWFuaWZlc3RGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD5cbik6IHZvaWQge1xuXHRmaWx0ZXJGaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRpZiAobWFuaWZlc3RGaWx0ZXJGaWVsZHMuaGFzT3duUHJvcGVydHkoZmlsdGVyRmllbGQua2V5KSAmJiAhbWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCkge1xuXHRcdFx0bWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCA9IGZpbHRlckZpZWxkLmxhYmVsO1xuXHRcdH1cblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChhRXhwcmVzc2lvbnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gW1xuXHRcdFwiU2luZ2xlVmFsdWVcIixcblx0XHRcIk11bHRpVmFsdWVcIixcblx0XHRcIlNpbmdsZVJhbmdlXCIsXG5cdFx0XCJNdWx0aVJhbmdlXCIsXG5cdFx0XCJTZWFyY2hFeHByZXNzaW9uXCIsXG5cdFx0XCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCJcblx0XTtcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXNwbGF5TW9kZSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IFByb3BlcnR5QW5ub3RhdGlvbnMgfCB1bmRlZmluZWQsXG5cdG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM6IEVudGl0eVR5cGVBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uID1cblx0XHRcdG9UZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0KChvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkgfHxcblx0XHRcdFx0KG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgJiYgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkpO1xuXG5cdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIikge1xuXHRcdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblZhbHVlXCI7IC8vVGV4dEZpcnN0XG5cdH1cblx0cmV0dXJuIG9UZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG9GaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkLFxuXHRvVHlwZUNvbmZpZzogUGFydGlhbDxQcm9wZXJ0eVR5cGVDb25maWc+XG4pOiBQcm9wZXJ0eUluZm8ge1xuXHRsZXQgb1Byb3BlcnR5SW5mbyA9IF9mZXRjaEJhc2ljUHJvcGVydHlJbmZvKG9GaWx0ZXJGaWVsZEluZm8pO1xuXHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvRmlsdGVyRmllbGRJbmZvLmFubm90YXRpb25QYXRoO1xuXG5cdGlmICghc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG5cdH1cblx0Y29uc3QgdGFyZ2V0UHJvcGVydHlPYmplY3QgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHNBbm5vdGF0aW9uUGF0aCkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblxuXHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IHRhcmdldFByb3BlcnR5T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0Y29uc3Qgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zO1xuXG5cdGNvbnN0IG9Gb3JtYXRPcHRpb25zID0gb1R5cGVDb25maWcuZm9ybWF0T3B0aW9ucztcblx0Y29uc3Qgb0NvbnN0cmFpbnRzID0gb1R5cGVDb25maWcuY29uc3RyYWludHM7XG5cdG9Qcm9wZXJ0eUluZm8gPSBPYmplY3QuYXNzaWduKG9Qcm9wZXJ0eUluZm8sIHtcblx0XHRmb3JtYXRPcHRpb25zOiBvRm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogb0NvbnN0cmFpbnRzLFxuXHRcdGRpc3BsYXk6IGRpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zLCBvQ29sbGVjdGlvbkFubm90YXRpb25zKVxuXHR9KTtcblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHlJbmZvKTogYm9vbGVhbiB7XG5cdGxldCBiSXNNdWx0aVZhbHVlID0gdHJ1ZTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRzd2l0Y2ggKG9Qcm9wZXJ0eS5maWx0ZXJFeHByZXNzaW9uKSB7XG5cdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHRpZiAob1Byb3BlcnR5LnR5cGUgJiYgb1Byb3BlcnR5LnR5cGUuaW5kZXhPZihcIkJvb2xlYW5cIikgPiAwKSB7XG5cdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBiSXNNdWx0aVZhbHVlO1xufTtcblxuY29uc3QgX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0ZW50cnk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcbik6IGVudHJ5IGlzIEFubm90YXRpb25UZXJtPERhdGFGaWVsZCB8IERhdGFGaWVsZFdpdGhVcmwgfCBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg+IHtcblx0cmV0dXJuIChcblx0XHQoZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fFxuXHRcdFx0ZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpICYmXG5cdFx0ZW50cnkuVmFsdWUucGF0aC5pbmNsdWRlcyhcIi9cIilcblx0KTtcbn07XG5cbi8qKlxuICogQWRkcyB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0eSB3aGljaCByZWZlcmVuY2VzIHRvIHRoZSB1bml0LCB0aW1lem9uZSwgdGV4dEFycmFuZ2VtZW50IG9yIGN1cnJlbmN5IGZyb20gYSBkYXRhIGZpZWxkLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgYWRkQ2hpbGROYXZpZ2F0aW9uUHJvcGVydGllcyA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdXG4pOiB2b2lkIHtcblx0Y29uc3QgdGFyZ2V0UHJvcGVydHkgPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCkuVmFsdWU/LiR0YXJnZXQ7XG5cdGlmICh0YXJnZXRQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPVxuXHRcdFx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5ID0gYWRkaXRpb25hbFByb3BlcnR5UGF0aFxuXHRcdFx0PyBlbmhhbmNlRGF0YU1vZGVsUGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgYWRkaXRpb25hbFByb3BlcnR5UGF0aCkubmF2aWdhdGlvblByb3BlcnRpZXNcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHk/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVswXS5uYW1lO1xuXHRcdFx0aWYgKCFuYXZQcm9wZXJ0aWVzLmluY2x1ZGVzKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdG5hdlByb3BlcnRpZXMucHVzaChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogR2V0cyB1c2VkIG5hdmlnYXRpb24gcHJvcGVydGllcyBmb3IgYXZhaWxhYmxlIGRhdGFGaWVsZC5cbiAqXG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0bmF2UHJvcGVydGllczogc3RyaW5nW10sXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmdbXSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkge1xuXHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGlubmVyRGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRpZiAoX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKFxuXHRcdFx0XHRcdGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCksXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRpZiAoIW5hdlByb3BlcnRpZXMuaW5jbHVkZXMobmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIEFkZGl0aW9uYWwgcHJvcGVydHkgZnJvbSB0ZXh0IGFycmFuZ2VtZW50L3VuaXRzL2N1cnJlbmNpZXMvdGltZXpvbmUuLi5cblx0XHRcdGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMoZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZQcm9wZXJ0aWVzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBPdGhlciB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIG5hdlByb3BlcnRpZXM7XG59O1xuXG5jb25zdCBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbiA9IGZhbHNlLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHtcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPjtcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZTtcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXTtcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD47XG5cdHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0ZGVmYXVsdEZpbHRlckZpZWxkczogRmlsdGVyRmllbGRbXTtcbn0ge1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50cyBkZWZpbmVkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgYW5kIGRpZmZlcmVudCB2aWV3cyAobXVsdGkgdGFibGUgbW9kZSlcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKGxyVGFibGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHQvL0ZpbHRlcnMgd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHdoaWNoIGlzIHBhcnQgb2YgU1YvRGVmYXVsdCBhbm5vdGF0aW9ucyBidXQgbm90IHByZXNlbnQgaW4gdGhlIFNlbGVjdGlvbkZpZWxkc1xuXHRjb25zdCBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMgPSAoKGFubm90YXRpb25QYXRoICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpPy5hbm5vdGF0aW9uKSB8fFxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgfHxcblx0XHRbXSkgYXMgUHJvcGVydHlQYXRoW107XG5cblx0bGV0IG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGlmIChsclRhYmxlcy5sZW5ndGggPT09IDAgJiYgISFsaW5lSXRlbVRlcm0pIHtcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihsaW5lSXRlbVRlcm0pLmFubm90YXRpb24gYXMgTGluZUl0ZW0pPy5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdG5hdlByb3BlcnRpZXMgPSBnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkpIHtcblx0XHRuYXZQcm9wZXJ0aWVzLnB1c2goXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0aW9uRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvQ3JlYXRlZEJ5VXNlclwiLFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXJcIlxuXHRcdCk7XG5cdH1cblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgYWxsIHBvdGVudGlhbCBmaWx0ZXIgZmllbGRzIGJhc2VkIG9uLi4uXG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge1xuXHRcdC8vIC4uLm5vbiBoaWRkZW4gcHJvcGVydGllcyBvZiB0aGUgZW50aXR5XG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkcyhlbnRpdHlUeXBlLCBcIlwiLCBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLiBub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChlbnRpdHlUeXBlLCBuYXZQcm9wZXJ0aWVzLCBmYWxzZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uYWRkaXRpb25hbCBtYW5pZmVzdCBkZWZpbmVkIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkubmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdClcblx0fTtcblx0bGV0IGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10gPSBbXTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0YVNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnM7XG5cdH1cblxuXHRjb25zdCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPVxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8ucmVkdWNlKChzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3Rpb25GaWVsZC52YWx1ZTtcblx0XHRcdGlmICghZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGxldCBuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGguc3RhcnRzV2l0aChcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIikpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aCA9IFwiXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBhbm5vdGF0aW9uUGF0aC5zcGxpdChcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpWzBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZmlsdGVyUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblBhdGggPyBuYXZpZ2F0aW9uUGF0aCArIFwiL1wiICsgcHJvcGVydHlQYXRoIDogcHJvcGVydHlQYXRoO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0ZmlsdGVyRmllbGRzLFxuXHRcdFx0XHRcdGZpbHRlclByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXAgPSBcIlwiO1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwTGFiZWwgPSBcIlwiO1xuXHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKGZpbHRlckZpZWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcblx0XHR9LCBbXSkgfHwgW107XG5cblx0Y29uc3QgZGVmYXVsdEZpbHRlckZpZWxkcyA9IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzKFxuXHRcdGFTZWxlY3RPcHRpb25zLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXMsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzXG5cdCk7XG5cblx0cmV0dXJuIHtcblx0XHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzLFxuXHRcdGZpbHRlckZpZWxkczogZmlsdGVyRmllbGRzLFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkczogcHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGRlZmF1bHRGaWx0ZXJGaWVsZHM6IGRlZmF1bHRGaWx0ZXJGaWVsZHNcblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFR5cGVDb25maWcgPSBmdW5jdGlvbiAocHJvcGVydHk/OiBQcm9wZXJ0eSk6IFByb3BlcnR5VHlwZUNvbmZpZyB7XG5cdGNvbnN0IG9UeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSwgcHJvcGVydHk/LnR5cGUpO1xuXHRpZiAocHJvcGVydHk/LnR5cGUgPT09IHNFZG1TdHJpbmcgJiYgKG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzLm51bGxhYmxlID09PSB1bmRlZmluZWQgfHwgb1R5cGVDb25maWcuY29uc3RyYWludHMubnVsbGFibGUgPT09IHRydWUpKSB7XG5cdFx0b1R5cGVDb25maWcuZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gb1R5cGVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlJbmZvRmllbGQ6IEZpbHRlckZpZWxkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFSZXF1aXJlZFByb3BzOiB1bmtub3duW10sXG5cdGFUeXBlQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPFByb3BlcnR5VHlwZUNvbmZpZz4+XG4pOiBQcm9wZXJ0eUluZm8ge1xuXHRsZXQgb1Byb3BlcnR5SW5mbyA9IGZldGNoUHJvcGVydHlJbmZvKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5SW5mb0ZpZWxkLCBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldKSxcblx0XHRzUHJvcGVydHlQYXRoID0gXCJcIjtcblx0aWYgKHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgpIHtcblx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9cXCt8XFwqL2csIFwiXCIpO1xuXHR9XG5cdGlmIChvUHJvcGVydHlJbmZvKSB7XG5cdFx0b1Byb3BlcnR5SW5mbyA9IE9iamVjdC5hc3NpZ24ob1Byb3BlcnR5SW5mbywge1xuXHRcdFx0bWF4Q29uZGl0aW9uczogIW9Qcm9wZXJ0eUluZm8uaXNQYXJhbWV0ZXIgJiYgaXNNdWx0aVZhbHVlKG9Qcm9wZXJ0eUluZm8pID8gLTEgOiAxLFxuXHRcdFx0cmVxdWlyZWQ6IHByb3BlcnR5SW5mb0ZpZWxkLnJlcXVpcmVkID8/IChvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyIHx8IGFSZXF1aXJlZFByb3BzLmluY2x1ZGVzKHNQcm9wZXJ0eVBhdGgpKSxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGRhdGFUeXBlOiBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldLnR5cGVcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9jZXNzU2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHM/OiBGaWx0ZXJGaWVsZFtdXG4pOiBQcm9wZXJ0eUluZm9bXSB7XG5cdC8vZ2V0IFR5cGVDb25maWcgZnVuY3Rpb25cblx0Y29uc3QgYVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj4gPSB7fTtcblxuXHRpZiAoZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMpIHtcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwcm9wZXJ0eUluZm9GaWVsZHMuY29uY2F0KGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKTtcblx0fVxuXHQvL2FkZCB0eXBlQ29uZmlnXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbWV0ZXJGaWVsZCkge1xuXHRcdGlmIChwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlDb252ZXJ0eUNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHBhcmFtZXRlckZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0ID0gcHJvcGVydHlDb252ZXJ0eUNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gZmV0Y2hUeXBlQ29uZmlnKHByb3BlcnR5VGFyZ2V0T2JqZWN0KTtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSBvVHlwZUNvbmZpZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0YVR5cGVDb25maWdbcGFyYW1ldGVyRmllbGQua2V5XSA9IHsgdHlwZTogc1N0cmluZ0RhdGFUeXBlIH07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBmaWx0ZXJSZXN0cmljdGlvbnNcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnMgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9SZXQ6IHtcblx0XHRSZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHRcdEZpbHRlckFsbG93ZWRFeHByZXNzaW9ucz86IFJlY29yZDxzdHJpbmcsIEZpbHRlckV4cHJlc3Npb25UeXBlW10+O1xuXHR9ID0ge307XG5cdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucyk7XG5cblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IGFQYXRoUGFydHMgPSBzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIik7XG5cdGlmIChhUGF0aFBhcnRzLmxlbmd0aCA+IDIpIHtcblx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhUGF0aFBhcnRzW2FQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBzTmF2aWdhdGlvblBhdGgpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXVxuXHRcdCk7XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdXG5cdFx0KTtcblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IHtcblx0XHRcdC4uLihnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucykgfHwge30pLFxuXHRcdFx0Li4ub1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcblx0XHR9O1xuXHR9XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXM7XG5cdGNvbnN0IGFOb25GaWx0ZXJhYmxlUHJvcHMgPSBvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cblx0Ly8gcHJvY2VzcyB0aGUgZmllbGRzIHRvIGFkZCBuZWNlc3NhcnkgcHJvcGVydGllc1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHlJbmZvRmllbGQpIHtcblx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9bKypdL2csIFwiXCIpO1xuXHRcdGlmICghYU5vbkZpbHRlcmFibGVQcm9wcy5pbmNsdWRlcyhzUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5SW5mbyA9IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8ocHJvcGVydHlJbmZvRmllbGQsIGNvbnZlcnRlckNvbnRleHQsIGFSZXF1aXJlZFByb3BzLCBhVHlwZUNvbmZpZyk7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChvUHJvcGVydHlJbmZvKTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vYWRkIGVkaXRcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRpZiAoTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoZGF0YU1vZGVsT2JqZWN0UGF0aCkpIHtcblx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdH1cblx0Ly8gYWRkIHNlYXJjaFxuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChzRW50aXR5U2V0UGF0aCAmJiBoaWRlQmFzaWNTZWFyY2ggIT09IHRydWUpIHtcblx0XHRpZiAoIXNlYXJjaFJlc3RyaWN0aW9ucyB8fCBzZWFyY2hSZXN0cmljdGlvbnM/LlNlYXJjaGFibGUpIHtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogTWFuaWZlc3RGaWx0ZXJGaWVsZFtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdF9nZXRNaXNzaW5nTGFiZWxGb3JNYW5pZmVzdEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIG1hbmlmZXN0RmlsdGVyRmllbGRzKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGZpbHRlckZpZWxkcywgbWFuaWZlc3RGaWx0ZXJGaWVsZHMsIHtcblx0XHRhdmFpbGFiaWxpdHk6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0bGFiZWw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dHlwZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRzbG90TmFtZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR0ZW1wbGF0ZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRzZXR0aW5nczogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXN1YWxGaWx0ZXI6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cmVxdWlyZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwgPSAocHJvcGVydHlJbmZvczogUHJvcGVydHlJbmZvW10pOiB2b2lkID0+IHtcblx0cHJvcGVydHlJbmZvcy5zb3J0KGZ1bmN0aW9uIChhOiBGaWx0ZXJHcm91cCwgYjogRmlsdGVyR3JvdXApIHtcblx0XHRjb25zdCBhR3JvdXBMYWJlbElzU2V0ID0gYS5ncm91cExhYmVsICE9PSB1bmRlZmluZWQgJiYgYS5ncm91cExhYmVsICE9PSBudWxsO1xuXHRcdGNvbnN0IGJHcm91cExhYmVsSXNTZXQgPSBiLmdyb3VwTGFiZWwgIT09IHVuZGVmaW5lZCAmJiBiLmdyb3VwTGFiZWwgIT09IG51bGw7XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmICFiR3JvdXBMYWJlbElzU2V0KSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cdFx0aWYgKGFHcm91cExhYmVsSXNTZXQgJiYgIWJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmIGJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0XHRyZXR1cm4gYS5ncm91cExhYmVsIS5sb2NhbGVDb21wYXJlKGIuZ3JvdXBMYWJlbCEpO1xuXHR9KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gZmllbGRzIHRoYXQgd2lsbCBiZSB1c2VkIHdpdGhpbiB0aGUgZmlsdGVyIGJhclxuICogVGhpcyBjb25maWd1cmF0aW9uIHRha2VzIGludG8gYWNjb3VudCB0aGUgYW5ub3RhdGlvbiBhbmQgdGhlIHNlbGVjdGlvbiB2YXJpYW50cy5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxyVGFibGVzXG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGhcbiAqIEBwYXJhbSBbaW5jbHVkZUhpZGRlbl1cbiAqIEBwYXJhbSBbbGluZUl0ZW1UZXJtXVxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VsZWN0aW9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGxyVGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdLFxuXHRhbm5vdGF0aW9uUGF0aCA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW4/OiBib29sZWFuLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHsgc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdOyBzUHJvcGVydHlJbmZvOiBzdHJpbmcgfSB7XG5cdGNvbnN0IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRsclRhYmxlcyxcblx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdGxpbmVJdGVtVGVybVxuXHQpO1xuXHRjb25zdCBwYXJhbWV0ZXJGaWVsZHMgPSBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgcHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5wcm9wZXJ0eUluZm9GaWVsZHM7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmVudGl0eVR5cGU7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wZXJ0eUluZm9GaWVsZHMpO1xuXG5cdHByb3BlcnR5SW5mb0ZpZWxkcyA9IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMocHJvcGVydHlJbmZvRmllbGRzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXMgPSBwcm9jZXNzU2VsZWN0aW9uRmllbGRzKFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZGVmYXVsdEZpbHRlckZpZWxkc1xuXHQpO1xuXHRzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbChhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXG5cdGxldCBzRmV0Y2hQcm9wZXJ0aWVzID0gSlNPTi5zdHJpbmdpZnkoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcfS9nLCBcIlxcXFx9XCIpO1xuXHRjb25zdCBzUHJvcGVydHlJbmZvID0gc0ZldGNoUHJvcGVydGllcztcblx0Ly8gZW5kIG9mIHByb3BlcnR5RmllbGRzIHByb2Nlc3NpbmdcblxuXHQvLyB0byBwb3B1bGF0ZSBzZWxlY3Rpb24gZmllbGRzXG5cdGxldCBwcm9wU2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcykpO1xuXHRwcm9wU2VsZWN0aW9uRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wU2VsZWN0aW9uRmllbGRzKTtcblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHNcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5leGNsdWRlZEZpbHRlclByb3BlcnRpZXM7XG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uRmlsdGVyRmFjZXRzO1xuXHRsZXQgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXG5cdGNvbnN0IGFGaWVsZEdyb3VwcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwKSBhcyBGaWVsZEdyb3VwW107XG5cblx0aWYgKGZpbHRlckZhY2V0cyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlckZhY2V0cy5sZW5ndGggPCAwKSB7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFGaWVsZEdyb3Vwcykge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXAgPSB7XG5cdFx0XHRcdC4uLmZpbHRlckZhY2V0TWFwLFxuXHRcdFx0XHQuLi5nZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGFGaWVsZEdyb3Vwc1tpXSlcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZhY2V0TWFwID0gZmlsdGVyRmFjZXRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+LCBmaWx0ZXJGYWNldDogUmVmZXJlbmNlRmFjZXRUeXBlcykgPT4ge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YT8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cHJldmlvdXNWYWx1ZVsoKGZpbHRlckZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGFbaV0gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aF0gPSB7XG5cdFx0XHRcdFx0Z3JvdXA6IGZpbHRlckZhY2V0Py5JRD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRncm91cExhYmVsOiBmaWx0ZXJGYWNldD8uTGFiZWw/LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdH0sIHt9KTtcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmZpbHRlckZpZWxkcztcblxuXHQvLyBmaW5hbGx5IGNyZWF0ZSBmaW5hbCBsaXN0IG9mIGZpbHRlciBmaWVsZHMgYnkgYWRkaW5nIHRoZSBTZWxlY3Rpb25GaWVsZHMgZmlyc3QgKG9yZGVyIG1hdHRlcnMpLi4uXG5cdGxldCBhbGxGaWx0ZXJzID0gcHJvcFNlbGVjdGlvbkZpZWxkc1xuXG5cdFx0Ly8gLi4uYW5kIGFkZGluZyByZW1haW5pbmcgZmlsdGVyIGZpZWxkcywgdGhhdCBhcmUgbm90IHVzZWQgaW4gYSBTZWxlY3Rpb25WYXJpYW50IChvcmRlciBkb2Vzbid0IG1hdHRlcilcblx0XHQuY29uY2F0KFxuXHRcdFx0T2JqZWN0LmtleXMoZmlsdGVyRmllbGRzKVxuXHRcdFx0XHQuZmlsdGVyKChwcm9wZXJ0eVBhdGgpID0+ICFleGNsdWRlZEZpbHRlclByb3BlcnRpZXMuaGFzKHByb3BlcnR5UGF0aCkpXG5cdFx0XHRcdC5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdLCBmaWx0ZXJGYWNldE1hcFtwcm9wZXJ0eVBhdGhdKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRjb25zdCBzQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cblx0Ly9pZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIHRhYmxlcyBcImFnZ3JlZ2F0YWJsZVwiIHByb3BlcnRpZXMgbXVzdCBiZSBleGNsdWRlZFxuXHRpZiAoY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwobHJUYWJsZXMsIHNDb250ZXh0UGF0aCkpIHtcblx0XHQvLyBDdXJyZW50bHkgYWxsIGFncmVnYXRlcyBhcmUgcm9vdCBlbnRpdHkgcHJvcGVydGllcyAobm8gcHJvcGVydGllcyBjb21pbmcgZnJvbSBuYXZpZ2F0aW9uKSBhbmQgYWxsXG5cdFx0Ly8gdGFibGVzIHdpdGggc2FtZSBlbnRpdHlTZXQgZ2V0cyBzYW1lIGFnZ3JlYWd0ZSBjb25maWd1cmF0aW9uIHRoYXQncyB3aHkgd2UgY2FuIHVzZSBmaXJzdCB0YWJsZSBpbnRvXG5cdFx0Ly8gTFIgdG8gZ2V0IGFnZ3JlZ2F0ZXMgKHdpdGhvdXQgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzIHNpbmNlIHdlIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZpbHRlciB0aGVtKS5cblx0XHRjb25zdCBhZ2dyZWdhdGVzID0gbHJUYWJsZXNbMF0uYWdncmVnYXRlcztcblx0XHRpZiAoYWdncmVnYXRlcykge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydGllczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhhZ2dyZWdhdGVzKS5tYXAoKGFnZ3JlZ2F0ZUtleSkgPT4gYWdncmVnYXRlc1thZ2dyZWdhdGVLZXldLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRhbGxGaWx0ZXJzID0gYWxsRmlsdGVycy5maWx0ZXIoKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0XHRcdHJldHVybiAhYWdncmVnYXRhYmxlUHJvcGVydGllcy5pbmNsdWRlcyhmaWx0ZXJGaWVsZC5rZXkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhhbGxGaWx0ZXJzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHQvLyBBZGQgY2FzZVNlbnNpdGl2ZSBwcm9wZXJ0eSB0byBhbGwgc2VsZWN0aW9uIGZpZWxkcy5cblx0Y29uc3QgaXNDYXNlU2Vuc2l0aXZlID0gaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpO1xuXHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRmaWx0ZXJGaWVsZC5jYXNlU2Vuc2l0aXZlID0gaXNDYXNlU2Vuc2l0aXZlO1xuXHR9KTtcblxuXHRyZXR1cm4geyBzZWxlY3Rpb25GaWVsZHMsIHNQcm9wZXJ0eUluZm8gfTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgYmFyIGluc2lkZSBhIHZhbHVlIGhlbHAgZGlhbG9nIHNob3VsZCBiZSBleHBhbmRlZC4gVGhpcyBpcyB0cnVlIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaG9sZDpcbiAqICgxKSBhIGZpbHRlciBwcm9wZXJ0eSBpcyBtYW5kYXRvcnksXG4gKiAoMikgbm8gc2VhcmNoIGZpZWxkIGV4aXN0cyAoZW50aXR5IGlzbid0IHNlYXJjaCBlbmFibGVkKSxcbiAqICgzKSB3aGVuIHRoZSBkYXRhIGlzbid0IGxvYWRlZCBieSBkZWZhdWx0IChhbm5vdGF0aW9uIEZldGNoVmFsdWVzID0gMikuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiBUaGUgRmlsdGVyUmVzdHJpY3Rpb24gYW5ub3RhdGlvblxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgVmFsdWVMaXN0IGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmb3IgZXhwYW5kRmlsdGVyRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHBhbmRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zIHwgdW5kZWZpbmVkLFxuXHR2YWx1ZUxpc3Q6IE1ldGFNb2RlbFR5cGU8VmFsdWVMaXN0PlxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKTtcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDAgfHwgaGlkZUJhc2ljU2VhcmNoIHx8IHZhbHVlTGlzdD8uRmV0Y2hWYWx1ZXMgPT09IDIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXNGS0EsZUFBZTtFQUFBLFdBQWZBLGVBQWU7SUFBZkEsZUFBZTtJQUFmQSxlQUFlO0VBQUEsR0FBZkEsZUFBZSxLQUFmQSxlQUFlO0VBS3BCLE1BQU1DLFVBQVUsR0FBRyxZQUFZO0VBQy9CLE1BQU1DLGVBQWUsR0FBRyxnQ0FBZ0M7RUFJeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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
935
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbCIsImxpc3RSZXBvcnRUYWJsZXMiLCJjb250ZXh0UGF0aCIsImxlbmd0aCIsImV2ZXJ5IiwidmlzdWFsaXphdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsImFubm90YXRpb24iLCJjb2xsZWN0aW9uIiwiZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwiY29udmVydGVyQ29udGV4dCIsInNlbGVjdGlvblZhcmlhbnRQYXRocyIsIlNldCIsIm1hbmlmZXN0RmlsdGVyRmllbGRzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlckZpZWxkcyIsInNlbGVjdGlvbkZpZWxkUGF0aHMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsIlVJIiwiU2VsZWN0aW9uRmllbGRzIiwibWFwIiwic2VsZWN0aW9uRmllbGQiLCJ2YWx1ZSIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJrZXkiLCJ0ZW1wbGF0ZSIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImlzQ29tcGxleFR5cGUiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsIl9nZXRGaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHVzaCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJjaGFydHMiLCJub1NlYXJjaEluQ2hhcnRzIiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImdldENvbnRleHRQYXRoIiwiZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJtYW5pZmVzdFdyYXBwZXIiLCJlbnRpdHlTZXRJbk11bHRpVmlldyIsImdldFZpZXdDb25maWd1cmF0aW9uIiwiZW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0IiwiY2hlY2tTYW1lRW50aXR5U2V0IiwiZmJDb25maWciLCJkZWZpbmVkRmlsdGVyRmllbGRzIiwiZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleSIsInNLZXkiLCJTbG90IiwiRGVmYXVsdCIsInZpc3VhbEZpbHRlciIsImdldFZpc3VhbEZpbHRlcnMiLCJpc0N1c3RvbUZpbHRlciIsInNsb3ROYW1lIiwiZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJyZXF1aXJlZCIsInNhbWVFbnRpdHlTZXQiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInNSZXN0cmljdGlvbiIsImFQcm9wcyIsIm9Qcm9wZXJ0eSIsImdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJQcm9wZXJ0eSIsIkFsbG93ZWRFeHByZXNzaW9ucyIsImdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbyIsImRhdGFUeXBlIiwibWF4Q29uZGl0aW9ucyIsImdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbyIsImhpZGRlbkZpbHRlciIsImdldFNlYXJjaFJlc3RyaWN0aW9ucyIsImlzRW50aXR5U2V0IiwiQ2FwYWJpbGl0aWVzIiwiU2VhcmNoUmVzdHJpY3Rpb25zIiwiZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsInNOYXZpZ2F0aW9uUGF0aCIsIm9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsIl9mZXRjaEJhc2ljUHJvcGVydHlJbmZvIiwib0ZpbHRlckZpZWxkSW5mbyIsImRpc3BsYXkiLCJjYXNlU2Vuc2l0aXZlIiwibWVudSIsIl9nZXRNaXNzaW5nTGFiZWxGb3JNYW5pZmVzdEZpbHRlckZpZWxkcyIsImhhc093blByb3BlcnR5IiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsImFFeHByZXNzaW9ucyIsImFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSIsInNvcnQiLCJhIiwiYiIsImluZGV4T2YiLCJkaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwib0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyIsIm9UZXh0QW5ub3RhdGlvbiIsIlRleHQiLCJvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uIiwiVGV4dEFycmFuZ2VtZW50IiwiZmV0Y2hQcm9wZXJ0eUluZm8iLCJvVHlwZUNvbmZpZyIsIm9Qcm9wZXJ0eUluZm8iLCJzQW5ub3RhdGlvblBhdGgiLCJ0YXJnZXRQcm9wZXJ0eU9iamVjdCIsIm9Gb3JtYXRPcHRpb25zIiwiZm9ybWF0T3B0aW9ucyIsIm9Db25zdHJhaW50cyIsImNvbnN0cmFpbnRzIiwiYXNzaWduIiwiaXNNdWx0aVZhbHVlIiwiYklzTXVsdGlWYWx1ZSIsImZpbHRlckV4cHJlc3Npb24iLCJfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5IiwiZW50cnkiLCJpbmNsdWRlcyIsImFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMiLCJuYXZQcm9wZXJ0aWVzIiwidGFyZ2V0UHJvcGVydHkiLCIkdGFyZ2V0IiwiYWRkaXRpb25hbFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSIsIlRhcmdldCIsImlubmVyRGF0YUZpZWxkIiwiZ2V0UmVsYXRpdmVQYXRocyIsImdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsImxyVGFibGVzIiwibGluZUl0ZW1UZXJtIiwiZ2V0RW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0Um9vdCIsInNlbGVjdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsInByb3BlcnR5SW5mb0ZpZWxkcyIsInJlZHVjZSIsInN0YXJ0c1dpdGgiLCJmaWx0ZXJQcm9wZXJ0eVBhdGgiLCJkZWZhdWx0RmlsdGVyRmllbGRzIiwiZmV0Y2hUeXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsIm51bGxhYmxlIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb0ZpZWxkIiwiYVJlcXVpcmVkUHJvcHMiLCJhVHlwZUNvbmZpZyIsInJlcGxhY2UiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJwcm9jZXNzU2VsZWN0aW9uRmllbGRzIiwiZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMiLCJjb25jYXQiLCJwYXJhbWV0ZXJGaWVsZCIsInByb3BlcnR5Q29udmVydHlDb250ZXh0IiwicHJvcGVydHlUYXJnZXRPYmplY3QiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwib1JldCIsIlJlcXVpcmVkUHJvcGVydGllcyIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwic0VudGl0eVNldFBhdGgiLCJhUGF0aFBhcnRzIiwic3BsaWNlIiwib05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMiLCJhTm9uRmlsdGVyYWJsZVByb3BzIiwiYUZldGNoZWRQcm9wZXJ0aWVzIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJzZWFyY2hSZXN0cmljdGlvbnMiLCJoaWRlQmFzaWNTZWFyY2giLCJCb29sZWFuIiwiU2VhcmNoYWJsZSIsImluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsInNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsIiwicHJvcGVydHlJbmZvcyIsImFHcm91cExhYmVsSXNTZXQiLCJiR3JvdXBMYWJlbElzU2V0IiwibG9jYWxlQ29tcGFyZSIsImdldFNlbGVjdGlvbkZpZWxkcyIsIm9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJwYXJhbWV0ZXJGaWVsZHMiLCJzRmV0Y2hQcm9wZXJ0aWVzIiwiSlNPTiIsInN0cmluZ2lmeSIsInNQcm9wZXJ0eUluZm8iLCJwcm9wU2VsZWN0aW9uRmllbGRzIiwicGFyc2UiLCJmaWx0ZXJGYWNldHMiLCJGaWx0ZXJGYWNldHMiLCJhRmllbGRHcm91cHMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsImkiLCJwcmV2aW91c1ZhbHVlIiwiZmlsdGVyRmFjZXQiLCJJRCIsImFsbEZpbHRlcnMiLCJzQ29udGV4dFBhdGgiLCJhZ2dyZWdhdGVzIiwiYWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFnZ3JlZ2F0ZUtleSIsInJlbGF0aXZlUGF0aCIsImlzQ2FzZVNlbnNpdGl2ZSIsImdldEV4cGFuZEZpbHRlckZpZWxkcyIsImZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJ2YWx1ZUxpc3QiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJGZXRjaFZhbHVlcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRlcm0sIEVudGl0eVNldCwgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGUsXG5cdEZpbHRlckV4cHJlc3Npb25UeXBlLFxuXHRGaWx0ZXJSZXN0cmljdGlvbnMsXG5cdEZpbHRlclJlc3RyaWN0aW9uc1R5cGUsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uLFxuXHRTZWFyY2hSZXN0cmljdGlvbnNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHsgVmFsdWVMaXN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5VHlwZUFubm90YXRpb25zLCBQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9FZG1fVHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhRmllbGRXaXRoVXJsLFxuXHRGaWVsZEdyb3VwLFxuXHRMaW5lSXRlbSxcblx0UmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0U2VsZWN0T3B0aW9uVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5VHlwZUNvbmZpZywgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiwgZ2V0VHlwZUNvbmZpZywgaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB7IGdldFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50LCBQb3NpdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIFBsYWNlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGlzQ29tcGxleFR5cGUsIGlzRW50aXR5U2V0LCBpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5LCBpc05hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRSZWxhdGl2ZVBhdGhzLCBnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGhcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJTZXR0aW5ncyxcblx0U2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuXG4vL2ltcG9ydCB7IGhhc1ZhbHVlSGVscCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckZpZWxkID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlPzogc3RyaW5nO1xuXHRrZXk/OiBzdHJpbmc7XG5cdGRhdGFUeXBlPzogc3RyaW5nO1xuXHRuYW1lPzogc3RyaW5nO1xuXHRjb25kaXRpb25QYXRoOiBzdHJpbmc7XG5cdGF2YWlsYWJpbGl0eTogQXZhaWxhYmlsaXR5VHlwZTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0bWVudT86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0c2V0dGluZ3M/OiBGaWx0ZXJTZXR0aW5ncztcblx0aXNQYXJhbWV0ZXI/OiBib29sZWFuO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTWFuaWZlc3RGaWx0ZXJGaWVsZCA9IEZpbHRlckZpZWxkICYge1xuXHRzbG90TmFtZT86IHN0cmluZztcbn07XG5cbnR5cGUgRmlsdGVyR3JvdXAgPSB7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xufTtcblxuZW51bSBmaWx0ZXJGaWVsZFR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG5jb25zdCBzRWRtU3RyaW5nID0gXCJFZG0uU3RyaW5nXCI7XG5jb25zdCBzU3RyaW5nRGF0YVR5cGUgPSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiO1xuXG5leHBvcnQgdHlwZSBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQgPSBDdXN0b21FbGVtZW50PE1hbmlmZXN0RmlsdGVyRmllbGQ+O1xuXG4vKipcbiAqIEVudGVyIGFsbCBEYXRhRmllbGRzIG9mIGEgZ2l2ZW4gRmllbGRHcm91cCBpbnRvIHRoZSBmaWx0ZXJGYWNldE1hcC5cbiAqXG4gKiBAcGFyYW0gZmllbGRHcm91cFxuICogQHJldHVybnMgVGhlIG1hcCBvZiBmYWNldHMgZm9yIHRoZSBnaXZlbiBGaWVsZEdyb3VwXG4gKi9cbmZ1bmN0aW9uIGdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoZmllbGRHcm91cDogRmllbGRHcm91cCk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiB7XG5cdGNvbnN0IGZpbHRlckZhY2V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4gPSB7fTtcblx0ZmllbGRHcm91cC5EYXRhLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCIpIHtcblx0XHRcdGZpbHRlckZhY2V0TWFwW2RhdGFGaWVsZC5WYWx1ZS5wYXRoXSA9IHtcblx0XHRcdFx0Z3JvdXA6IGZpZWxkR3JvdXAuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRncm91cExhYmVsOiBmaWVsZEdyb3VwLkxhYmVsPy50b1N0cmluZygpID8/IGZpZWxkR3JvdXAuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gZmllbGRHcm91cC5xdWFsaWZpZXJcblx0XHRcdH07XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGZpbHRlckZhY2V0TWFwO1xufVxuXG4vKipcbiAqIENoZWNrIHRoYXQgYWxsIHRoZSB0YWJsZXMgZm9yIGEgZGVkaWNhdGVkIGVudGl0eSBzZXQgYXJlIGNvbmZpZ3VyZWQgYXMgYW5hbHl0aWNhbCB0YWJsZXMuXG4gKlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgTGlzdCByZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0gY29udGV4dFBhdGhcbiAqIEByZXR1cm5zIElzIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaGlkZGVuIG9yIG5vdFxuICovXG5mdW5jdGlvbiBjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbChsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSwgY29udGV4dFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRpZiAoY29udGV4dFBhdGggJiYgbGlzdFJlcG9ydFRhYmxlcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljcyAmJiBjb250ZXh0UGF0aCA9PT0gdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb247XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0aW9uIHZhcmlhbnRzIHVzZWQgaW4gdGhlIGRpZmZlcmVudCB2aXN1YWxpemF0aW9ucyB0aGF0IHNob3VsZCBiZSBleGNsdWRlZC5cbiAqXG4gKiBAcGFyYW0gbHJUYWJsZVZpc3VhbGl6YXRpb25zIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGV4Y2x1ZGVkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKFxuXHRsclRhYmxlVmlzdWFsaXphdGlvbnM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNldDxzdHJpbmc+IHtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkuZmlsdGVyRmllbGRzID8/IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFtcblx0XHQvL1NlbGVjdGlvbiBGaWVsZHMgY29taW5nIGZyb20gdGhlIGFubm90YXRpb25cblx0XHQuLi4oY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgPz8gW10pLm1hcChcblx0XHRcdChzZWxlY3Rpb25GaWVsZCkgPT4gc2VsZWN0aW9uRmllbGQudmFsdWVcblx0XHQpLFxuXHRcdC8vU2VsZWN0aW9uIEZpZWxkcyBjb21pbmcgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIG5vdCB3aXRoIGN1c3RvbSB0ZW1wbGF0ZVxuXHRcdC4uLk9iamVjdC5rZXlzKG1hbmlmZXN0RmlsdGVyRmllbGRzKS5maWx0ZXIoKGtleSkgPT4gISFtYW5pZmVzdEZpbHRlckZpZWxkc1trZXldLnRlbXBsYXRlKVxuXHRdKTtcblxuXHRyZXR1cm4gbmV3IFNldChcblx0XHRsclRhYmxlVmlzdWFsaXphdGlvbnNcblx0XHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0Y29uc3QgdGFibGVGaWx0ZXJzID0gdmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnM7XG5cdFx0XHRcdGlmICghdGFibGVGaWx0ZXJzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBbLi4uKHRhYmxlRmlsdGVycy5oaWRkZW5GaWx0ZXJzPy5wYXRocyA/PyBbXSksIC4uLih0YWJsZUZpbHRlcnMucXVpY2tGaWx0ZXJzPy5wYXRocyA/PyBbXSldLm1hcCgocGF0aCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gcGF0aC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRpZiAoIXNlbGVjdGlvblZhcmlhbnRQYXRocy5oYXMoYW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aHMuYWRkKGFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRDb25maWcgPSBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudENvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMgPSBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHRcdChwcm9wZXJ0eU5hbWUpID0+ICFzZWxlY3Rpb25GaWVsZFBhdGhzLmhhcyhwcm9wZXJ0eU5hbWUpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZsYXQoMilcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25kaXRpb24gcGF0aCByZXF1aXJlZCBmb3IgdGhlIGNvbmRpdGlvbiBtb2RlbC4gSXQgbG9va3MgYXMgZm9sbG93czpcbiAqIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHJvb3QgRW50aXR5VHlwZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgY29uZGl0aW9uIHBhdGhcbiAqL1xuY29uc3QgX2dldENvbmRpdGlvblBhdGggPSBmdW5jdGlvbiAoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBwYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBwYXJ0aWFsUGF0aDtcblx0bGV0IGtleSA9IFwiXCI7XG5cdHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcblx0XHRsZXQgcGFydCA9IHBhcnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuXHRcdHBhcnRpYWxQYXRoID0gcGFydGlhbFBhdGggPyBgJHtwYXJ0aWFsUGF0aH0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHRcdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGFydGlhbFBhdGgpO1xuXHRcdGlmIChpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0cGFydCArPSBcIipcIjtcblx0XHR9XG5cdFx0a2V5ID0ga2V5ID8gYCR7a2V5fS8ke3BhcnR9YCA6IHBhcnQ7XG5cdH1cblx0cmV0dXJuIGtleTtcbn07XG5cbmNvbnN0IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZCA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHQvLyBpZ25vcmUgY29tcGxleCBwcm9wZXJ0eSB0eXBlcyBhbmQgaGlkZGVuIGFubm90YXRlZCBvbmVzXG5cdGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS50YXJnZXRUeXBlID09PSB1bmRlZmluZWQgJiYgKGluY2x1ZGVIaWRkZW4gfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkpIHtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShwcm9wZXJ0eSksXG5cdFx0XHRmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdldFNlbGVjdGlvbkZpZWxkS2V5RnJvbVBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGNvbmRpdGlvblBhdGg6IF9nZXRDb25kaXRpb25QYXRoKGVudGl0eVR5cGUsIGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCkgPT09IHRydWUgPyBcIkhpZGRlblwiIDogXCJBZGFwdGF0aW9uXCIsXG5cdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdGdyb3VwOiB0YXJnZXRFbnRpdHlUeXBlLm5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IHRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IHRhcmdldEVudGl0eVR5cGUubmFtZVxuXHRcdFx0fTtcblx0XHRnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZCk7XG5cdFx0cmV0dXJuIGZpbHRlckZpZWxkO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdGVjaG5pY2FsIHByb3BlcnR5IERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLiBPbmx5IHJlbGV2YW50IGZvciBDcmVhdGlvbkRhdGVUaW1lXG4gKiBhbmQgTGFzdENoYW5nZURhdGVUaW1lLCBhcyB0aGV5IGFyZSBkaXNwbGF5aW5nIHRoZSB0aW1lZnJhbWUgcmVsYXRlZCBwcm9wZXJ0aWVzIGFzIGEgU2VtYW50aWNEYXRlUmFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbHRlckZpZWxkXG4gKi9cbmNvbnN0IGdldFNldHRpbmdzT2ZEZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCk6IHZvaWQge1xuXHRpZiAoXG5cdFx0ZmlsdGVyRmllbGQua2V5ID09PSBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhOjpDcmVhdGlvbkRhdGVUaW1lXCIgfHxcblx0XHRmaWx0ZXJGaWVsZC5rZXkgPT09IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGE6Okxhc3RDaGFuZ2VEYXRlVGltZVwiXG5cdCkge1xuXHRcdGNvbnN0IHN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMgPSBbXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLlRPLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5UT01PUlJPVyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFdFRUssXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRNT05USCxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFFVQVJURVIsXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRZRUFSXG5cdFx0XTtcblx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncyA9IHtcblx0XHRcdG9wZXJhdG9yQ29uZmlndXJhdGlvbjogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0aDogXCJrZXlcIixcblx0XHRcdFx0XHRlcXVhbHM6IHN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuam9pbihcIixcIiksXG5cdFx0XHRcdFx0ZXhjbHVkZTogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0fVxufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZyxcblx0cHJvcGVydGllczogQXJyYXk8UHJvcGVydHk+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkTWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0Y29uc3QgZnVsbFBhdGg6IHN0cmluZyA9IChuYXZpZ2F0aW9uUGF0aCA/IGAke25hdmlnYXRpb25QYXRofS9gIDogXCJcIikgKyBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBwcm9wZXJ0eSwgZnVsbFBhdGgsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKHNlbGVjdGlvbkZpZWxkKSB7XG5cdFx0XHRcdHNlbGVjdGlvbkZpZWxkTWFwW2Z1bGxQYXRoXSA9IHNlbGVjdGlvbkZpZWxkO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZE1hcDtcbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGggPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5UGF0aHM6IEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0bGV0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0eVBhdGhzKSB7XG5cdFx0cHJvcGVydHlQYXRocy5mb3JFYWNoKChwcm9wZXJ0eVBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IGxvY2FsU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0XHRcdGNvbnN0IGVuaGFuY2VkUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdHByb3BlcnR5UGF0aFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gZW5oYW5jZWRQYXRoLnRhcmdldE9iamVjdDtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydHkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoIWluY2x1ZGVIaWRkZW4gJiZcblx0XHRcdFx0XHRlbmhhbmNlZFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZChcblx0XHRcdFx0XHRcdChuYXZpZ2F0aW9uUHJvcGVydHkpID0+IG5hdmlnYXRpb25Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlXG5cdFx0XHRcdFx0KSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUuZW50aXR5UHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSBpZiAoaXNDb21wbGV4VHlwZShwcm9wZXJ0eS50YXJnZXRUeXBlKSkge1xuXHRcdFx0XHQvLyBoYW5kbGUgQ29tcGxleFR5cGUgcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0Z2V0VGFyZ2V0TmF2aWdhdGlvblBhdGgoZW5oYW5jZWRQYXRoLCB0cnVlKSxcblx0XHRcdFx0XHRbcHJvcGVydHldLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMgPSB7XG5cdFx0XHRcdC4uLnNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdFx0Li4ubG9jYWxTZWxlY3Rpb25GaWVsZHNcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbmNvbnN0IF9nZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0bGV0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRkZWxldGUgZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpLCBwcm9wZXJ0eVBhdGgsIHRydWUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9XG5cdGlmICghZmlsdGVyRmllbGQpIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCk/LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUlTU0lOR19TRUxFQ1RJT05GSUVMRCk7XG5cdH1cblx0Ly8gZGVmaW5lZCBTZWxlY3Rpb25GaWVsZHMgYXJlIGF2YWlsYWJsZSBieSBkZWZhdWx0XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIiA/IFwiSGlkZGVuXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRmaWx0ZXJGaWVsZC5pc1BhcmFtZXRlciA9ICEhZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZDtcbn07XG5cbmNvbnN0IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRhU2VsZWN0T3B0aW9uczogU2VsZWN0T3B0aW9uVHlwZVtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogU2V0PHN0cmluZz4sXG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogUHJvcGVydHlQYXRoW11cbik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBbXTtcblx0Y29uc3QgVUlTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXM7XG5cdC8vIFVzaW5nIGVudGl0eVR5cGUgaW5zdGVhZCBvZiBlbnRpdHlTZXRcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFVJU2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdH0pO1xuXHRpZiAoYVNlbGVjdE9wdGlvbnMgJiYgYVNlbGVjdE9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdGFTZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcHJvcGVydHlOYW1lPy52YWx1ZTtcblx0XHRcdGNvbnN0IGN1cnJlbnRTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHNQcm9wZXJ0eVBhdGggJiYgIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMoc1Byb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0aWYgKCEoc1Byb3BlcnR5UGF0aCBpbiBjdXJyZW50U2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHNQcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEZpbHRlclZhbHVlID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmlsdGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGlmICghKHByb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdGlmIChkZWZhdWx0RmlsdGVyVmFsdWUgJiYgIShwcm9wZXJ0eVBhdGggaW4gVUlTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZ2V0RmlsdGVyRmllbGQocHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuLyoqXG4gKiBHZXQgYWxsIHBhcmFtZXRlciBmaWx0ZXIgZmllbGRzIGluIGNhc2Ugb2YgYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2UuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHBhcmFtZXRlciBGaWx0ZXJGaWVsZHNcbiAqL1xuZnVuY3Rpb24gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWQgPSAhIXBhcmFtZXRlckVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dCAmJiAhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQgPVxuXHRcdGlzUGFyYW1ldGVyaXplZCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8RW50aXR5U2V0PihgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWApO1xuXG5cdHJldHVybiAoXG5cdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dFxuXHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHBhcmFtZXRlckVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXVxuXHQpIGFzIEZpbHRlckZpZWxkW107XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90LlxuICpcbiAqIEBwYXJhbSBsaXN0UmVwb3J0VGFibGVzIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjaGFydHMgVGhlIEFMUCBjaGFydHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGluZm9ybWF0aW9uIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpbHRlckJhckhpZGVCYXNpY1NlYXJjaCA9IGZ1bmN0aW9uIChcblx0bGlzdFJlcG9ydFRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogYm9vbGVhbiB7XG5cdC8vIENoZWNrIGlmIGNoYXJ0cyBhbGxvdyBzZWFyY2hcblx0Y29uc3Qgbm9TZWFyY2hJbkNoYXJ0cyA9IGNoYXJ0cy5sZW5ndGggPT09IDAgfHwgY2hhcnRzLmV2ZXJ5KChjaGFydCkgPT4gIWNoYXJ0LmFwcGx5U3VwcG9ydGVkLmVuYWJsZVNlYXJjaCk7XG5cblx0Ly8gQ2hlY2sgaWYgYWxsIHRhYmxlcyBhcmUgYW5hbHl0aWNhbCBhbmQgbm9uZSBvZiB0aGVtIGFsbG93IGZvciBzZWFyY2hcblx0Ly8gb3IgYWxsIHRhYmxlcyBhcmUgVHJlZVRhYmxlIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluVGFibGVzID1cblx0XHRsaXN0UmVwb3J0VGFibGVzLmxlbmd0aCA9PT0gMCB8fFxuXHRcdGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHRhYmxlKSA9PiAodGFibGUuZW5hYmxlQW5hbHl0aWNzIHx8IHRhYmxlLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikgJiYgIXRhYmxlLmVuYWJsZUJhc2ljU2VhcmNoKTtcblxuXHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0aWYgKGNvbnRleHRQYXRoICYmIG5vU2VhcmNoSW5DaGFydHMgJiYgbm9TZWFyY2hJblRhYmxlcykge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgZmlsdGVyIGZpZWxkcyBmcm9tIHRoZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgZmllbGRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+IHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Ly9DaGVjayBpZiBtdWx0aWVudGl0eSBzZXRzIGluIG1hbmlmZXN0IGhhdmUgdGhlIHNhbWUgZW50aXR5IHR5cGVcblx0Y29uc3QgZW50aXR5U2V0SW5NdWx0aVZpZXcgPSBtYW5pZmVzdFdyYXBwZXJcblx0XHQuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKVxuXHRcdD8ucGF0aHMuZmluZCgocGF0aCkgPT4gKHBhdGggYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5lbnRpdHlTZXQgPT09IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/Lm5hbWUpO1xuXG5cdGlmICghZW50aXR5U2V0SW5NdWx0aVZpZXcgJiYgIWNoZWNrU2FtZUVudGl0eVNldChtYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQpKSB7XG5cdFx0Ly9yZXR1cm4gaWYgZW50aXR5IHR5cGUgZG9lcyBub3QgbWF0Y2ggZW50aXR5IHNldHMgaW4gbWFuaWZlc3Rcblx0XHRyZXR1cm4ge307XG5cdH1cblx0Y29uc3QgZmJDb25maWc6IEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBkZWZpbmVkRmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj4gPSBmYkNvbmZpZz8uZmlsdGVyRmllbGRzIHx8IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRPYmplY3Qua2V5cyhkZWZpbmVkRmlsdGVyRmllbGRzKS5tYXAoKGtleSkgPT4gZGVmaW5lZEZpbHRlckZpZWxkc1trZXldLnByb3BlcnR5ID8/IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KGtleSkpLFxuXHRcdHRydWUsXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHQpO1xuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gZGVmaW5lZEZpbHRlckZpZWxkcykge1xuXHRcdGNvbnN0IGZpbHRlckZpZWxkID0gZGVmaW5lZEZpbHRlckZpZWxkc1tzS2V5XTtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBmaWx0ZXJGaWVsZC5wcm9wZXJ0eSA/PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KTtcblx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IHNlbGVjdGlvbkZpZWxkc1twcm9wZXJ0eU5hbWVdO1xuXHRcdGNvbnN0IHR5cGUgPSBmaWx0ZXJGaWVsZC50eXBlID09PSBcIlNsb3RcIiA/IGZpbHRlckZpZWxkVHlwZS5TbG90IDogZmlsdGVyRmllbGRUeXBlLkRlZmF1bHQ7XG5cdFx0Y29uc3QgdmlzdWFsRmlsdGVyID1cblx0XHRcdGZpbHRlckZpZWxkICYmIGZpbHRlckZpZWxkPy52aXN1YWxGaWx0ZXJcblx0XHRcdFx0PyBnZXRWaXN1YWxGaWx0ZXJzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHNLZXksIGRlZmluZWRGaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChmaWx0ZXJGaWVsZC50ZW1wbGF0ZSB8fCBmaWx0ZXJGaWVsZC50eXBlID09PSBmaWx0ZXJGaWVsZFR5cGUuU2xvdCkge1xuXHRcdFx0aWYgKGZpbHRlckZpZWxkLnNldHRpbmdzKSB7XG5cdFx0XHRcdGZpbHRlckZpZWxkLnNldHRpbmdzLmlzQ3VzdG9tRmlsdGVyID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpbHRlckZpZWxkLnNldHRpbmdzID0ge1xuXHRcdFx0XHRcdGlzQ3VzdG9tRmlsdGVyOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZpbHRlckZpZWxkc1tzS2V5XSA9IHtcblx0XHRcdGtleTogc0tleSxcblx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRzbG90TmFtZTogZmlsdGVyRmllbGQ/LnNsb3ROYW1lIHx8IHNLZXksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmFubm90YXRpb25QYXRoLFxuXHRcdFx0Y29uZGl0aW9uUGF0aDogZmlsdGVyRmllbGQucHJvcGVydHlcblx0XHRcdFx0PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KVxuXHRcdFx0XHQ6IHNlbGVjdGlvbkZpZWxkPy5jb25kaXRpb25QYXRoIHx8IHByb3BlcnR5TmFtZSxcblx0XHRcdHRlbXBsYXRlOiBmaWx0ZXJGaWVsZC50ZW1wbGF0ZSxcblx0XHRcdGxhYmVsOiBjb252ZXJ0ZXJDb250ZXh0LmZldGNoVGV4dEZyb21NZXRhTW9kZWwoZmlsdGVyRmllbGQubGFiZWwpLFxuXHRcdFx0cG9zaXRpb246IGZpbHRlckZpZWxkLnBvc2l0aW9uIHx8IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXIgfSxcblx0XHRcdGF2YWlsYWJpbGl0eTogZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5IHx8IFwiRGVmYXVsdFwiLFxuXHRcdFx0c2V0dGluZ3M6IGZpbHRlckZpZWxkLnNldHRpbmdzLFxuXHRcdFx0dmlzdWFsRmlsdGVyOiB2aXN1YWxGaWx0ZXIsXG5cdFx0XHRyZXF1aXJlZDogZmlsdGVyRmllbGQucmVxdWlyZWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZHM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW50aXR5IHNldCBpcyB0aGUgc2FtZSBmb3IgYm90aCB0aGUgbWFuaWZlc3QgYW5kIGNvbnZlcnRlciBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdFdyYXBwZXIgTWFuaWZlc3Qgd3JhcHBlclxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBtYW5pZmVzdCBmaWx0ZXJzIGhhdmUgdGhlIHNhbWUgZW50aXR5IHNldCBhcyB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqL1xuY29uc3QgY2hlY2tTYW1lRW50aXR5U2V0ID0gZnVuY3Rpb24gKFxuXHRtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNhbWVFbnRpdHlTZXQ7XG5cdGlmICghKCFtYW5pZmVzdFdyYXBwZXIuZ2V0Q29udGV4dFBhdGgoKSB8fCBtYW5pZmVzdFdyYXBwZXIuZ2V0Q29udGV4dFBhdGgoKT8ubGVuZ3RoID09PSAwKSkge1xuXHRcdHNhbWVFbnRpdHlTZXQgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Q29udGV4dFBhdGgoKSA9PT0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHR9IGVsc2UgaWYgKCEoIW1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKSB8fCBtYW5pZmVzdFdyYXBwZXIuZ2V0RW50aXR5U2V0KCk/Lmxlbmd0aCA9PT0gMCkpIHtcblx0XHRzYW1lRW50aXR5U2V0ID0gbWFuaWZlc3RXcmFwcGVyLmdldEVudGl0eVNldCgpID09PSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5uYW1lO1xuXHR9XG5cdHJldHVybiBzYW1lRW50aXR5U2V0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoe30sIHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zVHlwZSB8IHVuZGVmaW5lZCxcblx0c1Jlc3RyaWN0aW9uOiBcIlJlcXVpcmVkUHJvcGVydGllc1wiIHwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiXG4pOiBzdHJpbmdbXSB7XG5cdGxldCBhUHJvcHM6IHN0cmluZ1tdID0gW107XG5cdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dKSB7XG5cdFx0YVByb3BzID0gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS52YWx1ZTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVByb3BzO1xufTtcbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckV4cHJlc3Npb25UeXBlW10+IHtcblx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyRXhwcmVzc2lvblR5cGVbXT4gPSB7fTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMpIHtcblx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZSkge1xuXHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0aWYgKG9Qcm9wZXJ0eS5Qcm9wZXJ0eT8udmFsdWUgJiYgb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucykge1xuXHRcdFx0XHRpZiAobUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHk/LnZhbHVlXSkge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5Py52YWx1ZV0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5Py52YWx1ZV0gPSBbb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucy50b1N0cmluZygpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtQWxsb3dlZEV4cHJlc3Npb25zO1xufTtcblxuY29uc3QgZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkc2VhcmNoXCIsXG5cdFx0cGF0aDogXCIkc2VhcmNoXCIsXG5cdFx0ZGF0YVR5cGU6IHNTdHJpbmdEYXRhVHlwZSxcblx0XHRtYXhDb25kaXRpb25zOiAxXG5cdH07XG59O1xuXG5jb25zdCBnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoKTogUHJvcGVydHlJbmZvIHtcblx0cmV0dXJuIHtcblx0XHRuYW1lOiBcIiRlZGl0U3RhdGVcIixcblx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdGdyb3VwOiBcIlwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0aGlkZGVuRmlsdGVyOiBmYWxzZVxuXHR9O1xufTtcblxuY29uc3QgZ2V0U2VhcmNoUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFNlYXJjaFJlc3RyaWN0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uU2VhcmNoUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c05hdmlnYXRpb25QYXRoOiBzdHJpbmdcbik6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0cmV0dXJuIChcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMgJiZcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob1Jlc3RyaWN0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25QYXRoXG5cdFx0XHQpO1xuXHRcdH0pXG5cdCk7XG59O1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eUluZm8gPSB7XG5cdGtleT86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0cGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRtYXhDb25kaXRpb25zPzogbnVtYmVyO1xuXHRkYXRhVHlwZT86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGhpZGRlbkZpbHRlcj86IGJvb2xlYW47XG5cdGRpc3BsYXk/OiBzdHJpbmc7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG5cdHR5cGU/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRtZW51Pzogc3RyaW5nO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGZpbHRlckV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGlzQ3VzdG9tRmlsdGVyPzogYm9vbGVhbjtcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG59O1xuY29uc3QgX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAob0ZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQpOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdGtleTogb0ZpbHRlckZpZWxkSW5mby5rZXksXG5cdFx0YW5ub3RhdGlvblBhdGg6IG9GaWx0ZXJGaWVsZEluZm8uYW5ub3RhdGlvblBhdGgsXG5cdFx0Y29uZGl0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoLFxuXHRcdG5hbWU6IG9GaWx0ZXJGaWVsZEluZm8uY29uZGl0aW9uUGF0aCxcblx0XHRsYWJlbDogb0ZpbHRlckZpZWxkSW5mby5sYWJlbCxcblx0XHRoaWRkZW5GaWx0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiLFxuXHRcdGRpc3BsYXk6IFwiVmFsdWVcIixcblx0XHRpc1BhcmFtZXRlcjogb0ZpbHRlckZpZWxkSW5mby5pc1BhcmFtZXRlcixcblx0XHRjYXNlU2Vuc2l0aXZlOiBvRmlsdGVyRmllbGRJbmZvLmNhc2VTZW5zaXRpdmUsXG5cdFx0YXZhaWxhYmlsaXR5OiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSxcblx0XHRwb3NpdGlvbjogb0ZpbHRlckZpZWxkSW5mby5wb3NpdGlvbixcblx0XHR0eXBlOiBvRmlsdGVyRmllbGRJbmZvLnR5cGUsXG5cdFx0dGVtcGxhdGU6IG9GaWx0ZXJGaWVsZEluZm8udGVtcGxhdGUsXG5cdFx0bWVudTogb0ZpbHRlckZpZWxkSW5mby5tZW51LFxuXHRcdHJlcXVpcmVkOiBvRmlsdGVyRmllbGRJbmZvLnJlcXVpcmVkLFxuXHRcdGlzQ3VzdG9tRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLnNldHRpbmdzPy5pc0N1c3RvbUZpbHRlclxuXHR9O1xufTtcblxuY29uc3QgX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0bWFuaWZlc3RGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD5cbik6IHZvaWQge1xuXHRmaWx0ZXJGaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRpZiAobWFuaWZlc3RGaWx0ZXJGaWVsZHMuaGFzT3duUHJvcGVydHkoZmlsdGVyRmllbGQua2V5KSAmJiAhbWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCkge1xuXHRcdFx0bWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCA9IGZpbHRlckZpZWxkLmxhYmVsO1xuXHRcdH1cblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChhRXhwcmVzc2lvbnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gW1xuXHRcdFwiU2luZ2xlVmFsdWVcIixcblx0XHRcIk11bHRpVmFsdWVcIixcblx0XHRcIlNpbmdsZVJhbmdlXCIsXG5cdFx0XCJNdWx0aVJhbmdlXCIsXG5cdFx0XCJTZWFyY2hFeHByZXNzaW9uXCIsXG5cdFx0XCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCJcblx0XTtcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXNwbGF5TW9kZSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IFByb3BlcnR5QW5ub3RhdGlvbnMgfCB1bmRlZmluZWQsXG5cdG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM6IEVudGl0eVR5cGVBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uID1cblx0XHRcdG9UZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0KChvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkgfHxcblx0XHRcdFx0KG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgJiYgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkpO1xuXG5cdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIikge1xuXHRcdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblZhbHVlXCI7IC8vVGV4dEZpcnN0XG5cdH1cblx0cmV0dXJuIG9UZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG9GaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkLFxuXHRvVHlwZUNvbmZpZzogUGFydGlhbDxQcm9wZXJ0eVR5cGVDb25maWc+XG4pOiBQcm9wZXJ0eUluZm8ge1xuXHRsZXQgb1Byb3BlcnR5SW5mbyA9IF9mZXRjaEJhc2ljUHJvcGVydHlJbmZvKG9GaWx0ZXJGaWVsZEluZm8pO1xuXHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvRmlsdGVyRmllbGRJbmZvLmFubm90YXRpb25QYXRoO1xuXG5cdGlmICghc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG5cdH1cblx0Y29uc3QgdGFyZ2V0UHJvcGVydHlPYmplY3QgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHNBbm5vdGF0aW9uUGF0aCkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblxuXHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IHRhcmdldFByb3BlcnR5T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0Y29uc3Qgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zO1xuXG5cdGNvbnN0IG9Gb3JtYXRPcHRpb25zID0gb1R5cGVDb25maWcuZm9ybWF0T3B0aW9ucztcblx0Y29uc3Qgb0NvbnN0cmFpbnRzID0gb1R5cGVDb25maWcuY29uc3RyYWludHM7XG5cdG9Qcm9wZXJ0eUluZm8gPSBPYmplY3QuYXNzaWduKG9Qcm9wZXJ0eUluZm8sIHtcblx0XHRmb3JtYXRPcHRpb25zOiBvRm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogb0NvbnN0cmFpbnRzLFxuXHRcdGRpc3BsYXk6IGRpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zLCBvQ29sbGVjdGlvbkFubm90YXRpb25zKVxuXHR9KTtcblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHlJbmZvKTogYm9vbGVhbiB7XG5cdGxldCBiSXNNdWx0aVZhbHVlID0gdHJ1ZTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRzd2l0Y2ggKG9Qcm9wZXJ0eS5maWx0ZXJFeHByZXNzaW9uKSB7XG5cdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHRpZiAob1Byb3BlcnR5LnR5cGUgJiYgb1Byb3BlcnR5LnR5cGUuaW5kZXhPZihcIkJvb2xlYW5cIikgPiAwKSB7XG5cdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBiSXNNdWx0aVZhbHVlO1xufTtcblxuY29uc3QgX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0ZW50cnk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcbik6IGVudHJ5IGlzIEFubm90YXRpb25UZXJtPERhdGFGaWVsZCB8IERhdGFGaWVsZFdpdGhVcmwgfCBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg+IHtcblx0cmV0dXJuIChcblx0XHQoZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fFxuXHRcdFx0ZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpICYmXG5cdFx0ZW50cnkuVmFsdWUucGF0aC5pbmNsdWRlcyhcIi9cIilcblx0KTtcbn07XG5cbi8qKlxuICogQWRkcyB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0eSB3aGljaCByZWZlcmVuY2VzIHRvIHRoZSB1bml0LCB0aW1lem9uZSwgdGV4dEFycmFuZ2VtZW50IG9yIGN1cnJlbmN5IGZyb20gYSBkYXRhIGZpZWxkLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgYWRkQ2hpbGROYXZpZ2F0aW9uUHJvcGVydGllcyA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdXG4pOiB2b2lkIHtcblx0Y29uc3QgdGFyZ2V0UHJvcGVydHkgPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCkuVmFsdWU/LiR0YXJnZXQ7XG5cdGlmICh0YXJnZXRQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPVxuXHRcdFx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5ID0gYWRkaXRpb25hbFByb3BlcnR5UGF0aFxuXHRcdFx0PyBlbmhhbmNlRGF0YU1vZGVsUGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgYWRkaXRpb25hbFByb3BlcnR5UGF0aCkubmF2aWdhdGlvblByb3BlcnRpZXNcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHk/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVswXS5uYW1lO1xuXHRcdFx0aWYgKCFuYXZQcm9wZXJ0aWVzLmluY2x1ZGVzKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdG5hdlByb3BlcnRpZXMucHVzaChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogR2V0cyB1c2VkIG5hdmlnYXRpb24gcHJvcGVydGllcyBmb3IgYXZhaWxhYmxlIGRhdGFGaWVsZC5cbiAqXG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0bmF2UHJvcGVydGllczogc3RyaW5nW10sXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmdbXSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkge1xuXHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGlubmVyRGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRpZiAoX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKFxuXHRcdFx0XHRcdGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCksXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRpZiAoIW5hdlByb3BlcnRpZXMuaW5jbHVkZXMobmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIEFkZGl0aW9uYWwgcHJvcGVydHkgZnJvbSB0ZXh0IGFycmFuZ2VtZW50L3VuaXRzL2N1cnJlbmNpZXMvdGltZXpvbmUuLi5cblx0XHRcdGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMoZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZQcm9wZXJ0aWVzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBPdGhlciB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIG5hdlByb3BlcnRpZXM7XG59O1xuXG5jb25zdCBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbiA9IGZhbHNlLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHtcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPjtcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZTtcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXTtcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD47XG5cdHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0ZGVmYXVsdEZpbHRlckZpZWxkczogRmlsdGVyRmllbGRbXTtcbn0ge1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50cyBkZWZpbmVkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgYW5kIGRpZmZlcmVudCB2aWV3cyAobXVsdGkgdGFibGUgbW9kZSlcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKGxyVGFibGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHQvL0ZpbHRlcnMgd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHdoaWNoIGlzIHBhcnQgb2YgU1YvRGVmYXVsdCBhbm5vdGF0aW9ucyBidXQgbm90IHByZXNlbnQgaW4gdGhlIFNlbGVjdGlvbkZpZWxkc1xuXHRjb25zdCBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMgPSAoKGFubm90YXRpb25QYXRoICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpPy5hbm5vdGF0aW9uKSB8fFxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgfHxcblx0XHRbXSkgYXMgUHJvcGVydHlQYXRoW107XG5cblx0bGV0IG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGlmIChsclRhYmxlcy5sZW5ndGggPT09IDAgJiYgISFsaW5lSXRlbVRlcm0pIHtcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihsaW5lSXRlbVRlcm0pLmFubm90YXRpb24gYXMgTGluZUl0ZW0pPy5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdG5hdlByb3BlcnRpZXMgPSBnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkpIHtcblx0XHRuYXZQcm9wZXJ0aWVzLnB1c2goXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0aW9uRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvQ3JlYXRlZEJ5VXNlclwiLFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXJcIlxuXHRcdCk7XG5cdH1cblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgYWxsIHBvdGVudGlhbCBmaWx0ZXIgZmllbGRzIGJhc2VkIG9uLi4uXG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge1xuXHRcdC8vIC4uLm5vbiBoaWRkZW4gcHJvcGVydGllcyBvZiB0aGUgZW50aXR5XG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkcyhlbnRpdHlUeXBlLCBcIlwiLCBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLiBub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChlbnRpdHlUeXBlLCBuYXZQcm9wZXJ0aWVzLCBmYWxzZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uYWRkaXRpb25hbCBtYW5pZmVzdCBkZWZpbmVkIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkubmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdClcblx0fTtcblx0bGV0IGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10gPSBbXTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0YVNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnM7XG5cdH1cblxuXHRjb25zdCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPVxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8ucmVkdWNlKChzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3Rpb25GaWVsZC52YWx1ZTtcblx0XHRcdGlmICghZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGxldCBuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGguc3RhcnRzV2l0aChcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIikpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aCA9IFwiXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBhbm5vdGF0aW9uUGF0aC5zcGxpdChcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpWzBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZmlsdGVyUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblBhdGggPyBuYXZpZ2F0aW9uUGF0aCArIFwiL1wiICsgcHJvcGVydHlQYXRoIDogcHJvcGVydHlQYXRoO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0ZmlsdGVyRmllbGRzLFxuXHRcdFx0XHRcdGZpbHRlclByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXAgPSBcIlwiO1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwTGFiZWwgPSBcIlwiO1xuXHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKGZpbHRlckZpZWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcblx0XHR9LCBbXSkgfHwgW107XG5cblx0Y29uc3QgZGVmYXVsdEZpbHRlckZpZWxkcyA9IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzKFxuXHRcdGFTZWxlY3RPcHRpb25zLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXMsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzXG5cdCk7XG5cblx0cmV0dXJuIHtcblx0XHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzLFxuXHRcdGZpbHRlckZpZWxkczogZmlsdGVyRmllbGRzLFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkczogcHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGRlZmF1bHRGaWx0ZXJGaWVsZHM6IGRlZmF1bHRGaWx0ZXJGaWVsZHNcblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFR5cGVDb25maWcgPSBmdW5jdGlvbiAocHJvcGVydHk/OiBQcm9wZXJ0eSk6IFByb3BlcnR5VHlwZUNvbmZpZyB7XG5cdGNvbnN0IG9UeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSwgcHJvcGVydHk/LnR5cGUpO1xuXHRpZiAocHJvcGVydHk/LnR5cGUgPT09IHNFZG1TdHJpbmcgJiYgKG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzLm51bGxhYmxlID09PSB1bmRlZmluZWQgfHwgb1R5cGVDb25maWcuY29uc3RyYWludHMubnVsbGFibGUgPT09IHRydWUpKSB7XG5cdFx0b1R5cGVDb25maWcuZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gb1R5cGVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlJbmZvRmllbGQ6IEZpbHRlckZpZWxkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFSZXF1aXJlZFByb3BzOiB1bmtub3duW10sXG5cdGFUeXBlQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPFByb3BlcnR5VHlwZUNvbmZpZz4+XG4pOiBQcm9wZXJ0eUluZm8ge1xuXHRsZXQgb1Byb3BlcnR5SW5mbyA9IGZldGNoUHJvcGVydHlJbmZvKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5SW5mb0ZpZWxkLCBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldKSxcblx0XHRzUHJvcGVydHlQYXRoID0gXCJcIjtcblx0aWYgKHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgpIHtcblx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9cXCt8XFwqL2csIFwiXCIpO1xuXHR9XG5cdGlmIChvUHJvcGVydHlJbmZvKSB7XG5cdFx0b1Byb3BlcnR5SW5mbyA9IE9iamVjdC5hc3NpZ24ob1Byb3BlcnR5SW5mbywge1xuXHRcdFx0bWF4Q29uZGl0aW9uczogIW9Qcm9wZXJ0eUluZm8uaXNQYXJhbWV0ZXIgJiYgaXNNdWx0aVZhbHVlKG9Qcm9wZXJ0eUluZm8pID8gLTEgOiAxLFxuXHRcdFx0cmVxdWlyZWQ6IHByb3BlcnR5SW5mb0ZpZWxkLnJlcXVpcmVkID8/IChvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyIHx8IGFSZXF1aXJlZFByb3BzLmluY2x1ZGVzKHNQcm9wZXJ0eVBhdGgpKSxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGRhdGFUeXBlOiBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldLnR5cGVcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9jZXNzU2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHM/OiBGaWx0ZXJGaWVsZFtdXG4pOiBQcm9wZXJ0eUluZm9bXSB7XG5cdC8vZ2V0IFR5cGVDb25maWcgZnVuY3Rpb25cblx0Y29uc3QgYVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj4gPSB7fTtcblxuXHRpZiAoZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMpIHtcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwcm9wZXJ0eUluZm9GaWVsZHMuY29uY2F0KGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKTtcblx0fVxuXHQvL2FkZCB0eXBlQ29uZmlnXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbWV0ZXJGaWVsZCkge1xuXHRcdGlmIChwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlDb252ZXJ0eUNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHBhcmFtZXRlckZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0ID0gcHJvcGVydHlDb252ZXJ0eUNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gZmV0Y2hUeXBlQ29uZmlnKHByb3BlcnR5VGFyZ2V0T2JqZWN0KTtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSBvVHlwZUNvbmZpZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0YVR5cGVDb25maWdbcGFyYW1ldGVyRmllbGQua2V5XSA9IHsgdHlwZTogc1N0cmluZ0RhdGFUeXBlIH07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBmaWx0ZXJSZXN0cmljdGlvbnNcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnMgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9SZXQ6IHtcblx0XHRSZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHRcdEZpbHRlckFsbG93ZWRFeHByZXNzaW9ucz86IFJlY29yZDxzdHJpbmcsIEZpbHRlckV4cHJlc3Npb25UeXBlW10+O1xuXHR9ID0ge307XG5cdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucyk7XG5cblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IGFQYXRoUGFydHMgPSBzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIik7XG5cdGlmIChhUGF0aFBhcnRzLmxlbmd0aCA+IDIpIHtcblx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhUGF0aFBhcnRzW2FQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBzTmF2aWdhdGlvblBhdGgpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXVxuXHRcdCk7XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdXG5cdFx0KTtcblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IHtcblx0XHRcdC4uLihnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucykgfHwge30pLFxuXHRcdFx0Li4ub1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcblx0XHR9O1xuXHR9XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXM7XG5cdGNvbnN0IGFOb25GaWx0ZXJhYmxlUHJvcHMgPSBvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cblx0Ly8gcHJvY2VzcyB0aGUgZmllbGRzIHRvIGFkZCBuZWNlc3NhcnkgcHJvcGVydGllc1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHlJbmZvRmllbGQpIHtcblx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9bKypdL2csIFwiXCIpO1xuXHRcdGlmICghYU5vbkZpbHRlcmFibGVQcm9wcy5pbmNsdWRlcyhzUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5SW5mbyA9IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8ocHJvcGVydHlJbmZvRmllbGQsIGNvbnZlcnRlckNvbnRleHQsIGFSZXF1aXJlZFByb3BzLCBhVHlwZUNvbmZpZyk7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChvUHJvcGVydHlJbmZvKTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vYWRkIGVkaXRcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRpZiAoTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoZGF0YU1vZGVsT2JqZWN0UGF0aCkpIHtcblx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdH1cblx0Ly8gYWRkIHNlYXJjaFxuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChzRW50aXR5U2V0UGF0aCAmJiBoaWRlQmFzaWNTZWFyY2ggIT09IHRydWUpIHtcblx0XHRpZiAoIXNlYXJjaFJlc3RyaWN0aW9ucyB8fCBzZWFyY2hSZXN0cmljdGlvbnM/LlNlYXJjaGFibGUpIHtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogTWFuaWZlc3RGaWx0ZXJGaWVsZFtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdF9nZXRNaXNzaW5nTGFiZWxGb3JNYW5pZmVzdEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIG1hbmlmZXN0RmlsdGVyRmllbGRzKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGZpbHRlckZpZWxkcywgbWFuaWZlc3RGaWx0ZXJGaWVsZHMsIHtcblx0XHRhdmFpbGFiaWxpdHk6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0bGFiZWw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dHlwZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRzbG90TmFtZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR0ZW1wbGF0ZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRzZXR0aW5nczogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXN1YWxGaWx0ZXI6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cmVxdWlyZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwgPSAocHJvcGVydHlJbmZvczogUHJvcGVydHlJbmZvW10pOiB2b2lkID0+IHtcblx0cHJvcGVydHlJbmZvcy5zb3J0KGZ1bmN0aW9uIChhOiBGaWx0ZXJHcm91cCwgYjogRmlsdGVyR3JvdXApIHtcblx0XHRjb25zdCBhR3JvdXBMYWJlbElzU2V0ID0gYS5ncm91cExhYmVsICE9PSB1bmRlZmluZWQgJiYgYS5ncm91cExhYmVsICE9PSBudWxsO1xuXHRcdGNvbnN0IGJHcm91cExhYmVsSXNTZXQgPSBiLmdyb3VwTGFiZWwgIT09IHVuZGVmaW5lZCAmJiBiLmdyb3VwTGFiZWwgIT09IG51bGw7XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmICFiR3JvdXBMYWJlbElzU2V0KSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cdFx0aWYgKGFHcm91cExhYmVsSXNTZXQgJiYgIWJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmIGJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0XHRyZXR1cm4gYS5ncm91cExhYmVsIS5sb2NhbGVDb21wYXJlKGIuZ3JvdXBMYWJlbCEpO1xuXHR9KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gZmllbGRzIHRoYXQgd2lsbCBiZSB1c2VkIHdpdGhpbiB0aGUgZmlsdGVyIGJhclxuICogVGhpcyBjb25maWd1cmF0aW9uIHRha2VzIGludG8gYWNjb3VudCB0aGUgYW5ub3RhdGlvbiBhbmQgdGhlIHNlbGVjdGlvbiB2YXJpYW50cy5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxyVGFibGVzXG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGhcbiAqIEBwYXJhbSBbaW5jbHVkZUhpZGRlbl1cbiAqIEBwYXJhbSBbbGluZUl0ZW1UZXJtXVxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VsZWN0aW9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGxyVGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdLFxuXHRhbm5vdGF0aW9uUGF0aCA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW4/OiBib29sZWFuLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHsgc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdOyBzUHJvcGVydHlJbmZvOiBzdHJpbmcgfSB7XG5cdGNvbnN0IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRsclRhYmxlcyxcblx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdGxpbmVJdGVtVGVybVxuXHQpO1xuXHRjb25zdCBwYXJhbWV0ZXJGaWVsZHMgPSBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgcHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5wcm9wZXJ0eUluZm9GaWVsZHM7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmVudGl0eVR5cGU7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wZXJ0eUluZm9GaWVsZHMpO1xuXG5cdHByb3BlcnR5SW5mb0ZpZWxkcyA9IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMocHJvcGVydHlJbmZvRmllbGRzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXMgPSBwcm9jZXNzU2VsZWN0aW9uRmllbGRzKFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZGVmYXVsdEZpbHRlckZpZWxkc1xuXHQpO1xuXHRzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbChhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXG5cdGxldCBzRmV0Y2hQcm9wZXJ0aWVzID0gSlNPTi5zdHJpbmdpZnkoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcfS9nLCBcIlxcXFx9XCIpO1xuXHRjb25zdCBzUHJvcGVydHlJbmZvID0gc0ZldGNoUHJvcGVydGllcztcblx0Ly8gZW5kIG9mIHByb3BlcnR5RmllbGRzIHByb2Nlc3NpbmdcblxuXHQvLyB0byBwb3B1bGF0ZSBzZWxlY3Rpb24gZmllbGRzXG5cdGxldCBwcm9wU2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcykpO1xuXHRwcm9wU2VsZWN0aW9uRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wU2VsZWN0aW9uRmllbGRzKTtcblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHNcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5leGNsdWRlZEZpbHRlclByb3BlcnRpZXM7XG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uRmlsdGVyRmFjZXRzO1xuXHRsZXQgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXG5cdGNvbnN0IGFGaWVsZEdyb3VwcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwKSBhcyBGaWVsZEdyb3VwW107XG5cblx0aWYgKGZpbHRlckZhY2V0cyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlckZhY2V0cy5sZW5ndGggPCAwKSB7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFGaWVsZEdyb3Vwcykge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXAgPSB7XG5cdFx0XHRcdC4uLmZpbHRlckZhY2V0TWFwLFxuXHRcdFx0XHQuLi5nZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGFGaWVsZEdyb3Vwc1tpXSlcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZhY2V0TWFwID0gZmlsdGVyRmFjZXRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+LCBmaWx0ZXJGYWNldDogUmVmZXJlbmNlRmFjZXRUeXBlcykgPT4ge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YT8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cHJldmlvdXNWYWx1ZVsoKGZpbHRlckZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGFbaV0gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aF0gPSB7XG5cdFx0XHRcdFx0Z3JvdXA6IGZpbHRlckZhY2V0Py5JRD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRncm91cExhYmVsOiBmaWx0ZXJGYWNldD8uTGFiZWw/LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdH0sIHt9KTtcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmZpbHRlckZpZWxkcztcblxuXHQvLyBmaW5hbGx5IGNyZWF0ZSBmaW5hbCBsaXN0IG9mIGZpbHRlciBmaWVsZHMgYnkgYWRkaW5nIHRoZSBTZWxlY3Rpb25GaWVsZHMgZmlyc3QgKG9yZGVyIG1hdHRlcnMpLi4uXG5cdGxldCBhbGxGaWx0ZXJzID0gcHJvcFNlbGVjdGlvbkZpZWxkc1xuXG5cdFx0Ly8gLi4uYW5kIGFkZGluZyByZW1haW5pbmcgZmlsdGVyIGZpZWxkcywgdGhhdCBhcmUgbm90IHVzZWQgaW4gYSBTZWxlY3Rpb25WYXJpYW50IChvcmRlciBkb2Vzbid0IG1hdHRlcilcblx0XHQuY29uY2F0KFxuXHRcdFx0T2JqZWN0LmtleXMoZmlsdGVyRmllbGRzKVxuXHRcdFx0XHQuZmlsdGVyKChwcm9wZXJ0eVBhdGgpID0+ICFleGNsdWRlZEZpbHRlclByb3BlcnRpZXMuaGFzKHByb3BlcnR5UGF0aCkpXG5cdFx0XHRcdC5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdLCBmaWx0ZXJGYWNldE1hcFtwcm9wZXJ0eVBhdGhdKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRjb25zdCBzQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cblx0Ly9pZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIHRhYmxlcyBcImFnZ3JlZ2F0YWJsZVwiIHByb3BlcnRpZXMgbXVzdCBiZSBleGNsdWRlZFxuXHRpZiAoY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwobHJUYWJsZXMsIHNDb250ZXh0UGF0aCkpIHtcblx0XHQvLyBDdXJyZW50bHkgYWxsIGFncmVnYXRlcyBhcmUgcm9vdCBlbnRpdHkgcHJvcGVydGllcyAobm8gcHJvcGVydGllcyBjb21pbmcgZnJvbSBuYXZpZ2F0aW9uKSBhbmQgYWxsXG5cdFx0Ly8gdGFibGVzIHdpdGggc2FtZSBlbnRpdHlTZXQgZ2V0cyBzYW1lIGFnZ3JlYWd0ZSBjb25maWd1cmF0aW9uIHRoYXQncyB3aHkgd2UgY2FuIHVzZSBmaXJzdCB0YWJsZSBpbnRvXG5cdFx0Ly8gTFIgdG8gZ2V0IGFnZ3JlZ2F0ZXMgKHdpdGhvdXQgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzIHNpbmNlIHdlIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZpbHRlciB0aGVtKS5cblx0XHRjb25zdCBhZ2dyZWdhdGVzID0gbHJUYWJsZXNbMF0uYWdncmVnYXRlcztcblx0XHRpZiAoYWdncmVnYXRlcykge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydGllczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhhZ2dyZWdhdGVzKS5tYXAoKGFnZ3JlZ2F0ZUtleSkgPT4gYWdncmVnYXRlc1thZ2dyZWdhdGVLZXldLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRhbGxGaWx0ZXJzID0gYWxsRmlsdGVycy5maWx0ZXIoKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0XHRcdHJldHVybiAhYWdncmVnYXRhYmxlUHJvcGVydGllcy5pbmNsdWRlcyhmaWx0ZXJGaWVsZC5rZXkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhhbGxGaWx0ZXJzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHQvLyBBZGQgY2FzZVNlbnNpdGl2ZSBwcm9wZXJ0eSB0byBhbGwgc2VsZWN0aW9uIGZpZWxkcy5cblx0Y29uc3QgaXNDYXNlU2Vuc2l0aXZlID0gaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpO1xuXHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRmaWx0ZXJGaWVsZC5jYXNlU2Vuc2l0aXZlID0gaXNDYXNlU2Vuc2l0aXZlO1xuXHR9KTtcblxuXHRyZXR1cm4geyBzZWxlY3Rpb25GaWVsZHMsIHNQcm9wZXJ0eUluZm8gfTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgYmFyIGluc2lkZSBhIHZhbHVlIGhlbHAgZGlhbG9nIHNob3VsZCBiZSBleHBhbmRlZC4gVGhpcyBpcyB0cnVlIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaG9sZDpcbiAqICgxKSBhIGZpbHRlciBwcm9wZXJ0eSBpcyBtYW5kYXRvcnksXG4gKiAoMikgbm8gc2VhcmNoIGZpZWxkIGV4aXN0cyAoZW50aXR5IGlzbid0IHNlYXJjaCBlbmFibGVkKSxcbiAqICgzKSB3aGVuIHRoZSBkYXRhIGlzbid0IGxvYWRlZCBieSBkZWZhdWx0IChhbm5vdGF0aW9uIEZldGNoVmFsdWVzID0gMikuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiBUaGUgRmlsdGVyUmVzdHJpY3Rpb24gYW5ub3RhdGlvblxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgVmFsdWVMaXN0IGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmb3IgZXhwYW5kRmlsdGVyRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHBhbmRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zIHwgdW5kZWZpbmVkLFxuXHR2YWx1ZUxpc3Q6IE1ldGFNb2RlbFR5cGU8VmFsdWVMaXN0PlxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKTtcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDAgfHwgaGlkZUJhc2ljU2VhcmNoIHx8IHZhbHVlTGlzdD8uRmV0Y2hWYWx1ZXMgPT09IDIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXNGS0EsZUFBZTtFQUFBLFdBQWZBLGVBQWU7SUFBZkEsZUFBZTtJQUFmQSxlQUFlO0VBQUEsR0FBZkEsZUFBZSxLQUFmQSxlQUFlO0VBS3BCLE1BQU1DLFVBQVUsR0FBRyxZ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
@@ -665,6 +665,8 @@ export type PropertyInfo = {
665
665
  isCustomFilter?: boolean;
666
666
  constraints?: object;
667
667
  formatOptions?: object;
668
+ settings?: FilterSettings;
669
+ visualFilter?: VisualFilters;
668
670
  };
669
671
  const _fetchBasicPropertyInfo = function (oFilterFieldInfo: FilterField): PropertyInfo {
670
672
  return {
@@ -4,7 +4,7 @@
4
4
  "id": "sap.fe.core.fpm",
5
5
  "type": "component",
6
6
  "applicationVersion": {
7
- "version": "1.124.1"
7
+ "version": "1.124.3"
8
8
  },
9
9
  "title": "Object Page",
10
10
  "tags": {