@fusionauth/typescript-client 1.54.0 → 1.56.0

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.
@@ -451,7 +451,7 @@ exports.default = DefaultRESTClientBuilder;
451
451
  * language governing permissions and limitations under the License.
452
452
  */
453
453
  Object.defineProperty(exports, "__esModule", { value: true });
454
- exports.Algorithm = exports.ClientAuthenticationMethod = exports.OAuthApplicationRelationship = exports.UnknownScopePolicy = exports.EventType = exports.CaptchaMethod = exports.SteamAPIMode = exports.AuthenticationThreats = exports.TOTPAlgorithm = exports.VerificationStrategy = exports.IdentityProviderType = exports.ObjectState = exports.OAuthScopeConsentMode = exports.KeyType = exports.KeyAlgorithm = exports.CoseEllipticCurve = exports.PublicKeyCredentialType = exports.AuthenticatorAttachmentPreference = exports.Sort = exports.XMLSignatureLocation = exports.SAMLLogoutBehavior = exports.RegistrationType = exports.LoginIdType = exports.SystemTrustedProxyConfigurationPolicy = exports.LambdaType = exports.UserActionPhase = exports.IPAccessControlEntryAction = exports.MultiFactorLoginPolicy = exports.IdentityProviderLinkingStrategy = exports.FormDataType = exports.SecureGeneratorType = exports.CanonicalizationMethod = exports.FormType = exports.ClientAuthenticationPolicy = exports.ExpiryUnit = exports.UserVerificationRequirement = exports.LambdaEngineType = exports.RateLimitedRequestType = exports.ApplicationMultiFactorTrustPolicy = exports.DeviceType = exports.OAuthErrorType = exports.OAuthErrorReason = exports.SAMLv2DestinationAssertionPolicy = exports.RefreshTokenUsagePolicy = exports.IdentityProviderLoginMethod = exports.AuthenticatorAttachment = exports.Oauth2AuthorizedURLValidationPolicy = exports.LDAPSecurityMethod = exports.ChangePasswordReason = exports.ResidentKeyRequirement = exports.MessageType = exports.ProofKeyForCodeExchangePolicy = exports.ConnectorType = exports.ThemeType = exports.CoseKeyType = exports.TransactionType = exports.EventLogType = exports.WebhookAttemptResult = exports.OAuthScopeHandlingPolicy = exports.FormControl = exports.BreachedPasswordStatus = exports.KeyUse = exports.RefreshTokenExpirationPolicy = exports.UserState = exports.HTTPMethod = exports.ConsentStatus = exports.WebAuthnWorkflow = exports.WebhookEventResult = exports.AttestationConveyancePreference = exports.FormFieldAdminPolicy = exports.BreachMatchMode = exports.BreachAction = exports.MessengerType = exports.UnverifiedBehavior = exports.ReactorFeatureStatus = exports.CoseAlgorithmIdentifier = exports.FamilyRole = exports.LogoutBehavior = exports.ContentStatus = exports.TokenType = exports.UniqueUsernameStrategy = exports.EmailSecurityType = exports.AttestationType = exports.GrantType = exports.FusionAuthClient = void 0;
454
+ exports.Algorithm = exports.ClientAuthenticationMethod = exports.OAuthApplicationRelationship = exports.UnknownScopePolicy = exports.EventType = exports.CaptchaMethod = exports.SteamAPIMode = exports.AuthenticationThreats = exports.TOTPAlgorithm = exports.VerificationStrategy = exports.IdentityProviderType = exports.ObjectState = exports.OAuthScopeConsentMode = exports.KeyType = exports.KeyAlgorithm = exports.CoseEllipticCurve = exports.PublicKeyCredentialType = exports.AuthenticatorAttachmentPreference = exports.Sort = exports.XMLSignatureLocation = exports.SAMLLogoutBehavior = exports.RegistrationType = exports.LoginIdType = exports.SystemTrustedProxyConfigurationPolicy = exports.LambdaType = exports.UserActionPhase = exports.IPAccessControlEntryAction = exports.MultiFactorLoginPolicy = exports.IdentityProviderLinkingStrategy = exports.FormDataType = exports.SecureGeneratorType = exports.ExpiryUnit = exports.CanonicalizationMethod = exports.FormType = exports.ClientAuthenticationPolicy = exports.UserVerificationRequirement = exports.LambdaEngineType = exports.RateLimitedRequestType = exports.ApplicationMultiFactorTrustPolicy = exports.DeviceType = exports.OAuthErrorType = exports.OAuthErrorReason = exports.SAMLv2DestinationAssertionPolicy = exports.RefreshTokenUsagePolicy = exports.IdentityProviderLoginMethod = exports.AuthenticatorAttachment = exports.Oauth2AuthorizedURLValidationPolicy = exports.LDAPSecurityMethod = exports.ChangePasswordReason = exports.ResidentKeyRequirement = exports.MessageType = exports.ProofKeyForCodeExchangePolicy = exports.ConnectorType = exports.ThemeType = exports.CoseKeyType = exports.TransactionType = exports.EventLogType = exports.WebhookAttemptResult = exports.OAuthScopeHandlingPolicy = exports.FormControl = exports.BreachedPasswordStatus = exports.KeyUse = exports.RefreshTokenExpirationPolicy = exports.UserState = exports.HTTPMethod = exports.ConsentStatus = exports.WebAuthnWorkflow = exports.WebhookEventResult = exports.AttestationConveyancePreference = exports.FormFieldAdminPolicy = exports.BreachMatchMode = exports.BreachAction = exports.MessengerType = exports.UnverifiedBehavior = exports.ReactorFeatureStatus = exports.CoseAlgorithmIdentifier = exports.FamilyRole = exports.LogoutBehavior = exports.ContentStatus = exports.TokenType = exports.UniqueUsernameStrategy = exports.EmailSecurityType = exports.AttestationType = exports.GrantType = exports.FusionAuthClient = void 0;
455
455
  var DefaultRESTClientBuilder_1 = require("./DefaultRESTClientBuilder");
456
456
  var url_1 = (typeof window !== "undefined" ? window['window'] : typeof global !== "undefined" ? global['window'] : null);
457
457
  var FusionAuthClient = /** @class */ (function () {
@@ -6112,18 +6112,6 @@ var UserVerificationRequirement;
6112
6112
  UserVerificationRequirement["preferred"] = "preferred";
6113
6113
  UserVerificationRequirement["discouraged"] = "discouraged";
6114
6114
  })(UserVerificationRequirement = exports.UserVerificationRequirement || (exports.UserVerificationRequirement = {}));
6115
- /**
6116
- * @author Brian Pontarelli
6117
- */
6118
- var ExpiryUnit;
6119
- (function (ExpiryUnit) {
6120
- ExpiryUnit["MINUTES"] = "MINUTES";
6121
- ExpiryUnit["HOURS"] = "HOURS";
6122
- ExpiryUnit["DAYS"] = "DAYS";
6123
- ExpiryUnit["WEEKS"] = "WEEKS";
6124
- ExpiryUnit["MONTHS"] = "MONTHS";
6125
- ExpiryUnit["YEARS"] = "YEARS";
6126
- })(ExpiryUnit = exports.ExpiryUnit || (exports.ExpiryUnit = {}));
6127
6115
  /**
6128
6116
  * @author Brett Guy
6129
6117
  */
@@ -6155,6 +6143,18 @@ var CanonicalizationMethod;
6155
6143
  CanonicalizationMethod["inclusive"] = "inclusive";
6156
6144
  CanonicalizationMethod["inclusive_with_comments"] = "inclusive_with_comments";
6157
6145
  })(CanonicalizationMethod = exports.CanonicalizationMethod || (exports.CanonicalizationMethod = {}));
6146
+ /**
6147
+ * @author Brian Pontarelli
6148
+ */
6149
+ var ExpiryUnit;
6150
+ (function (ExpiryUnit) {
6151
+ ExpiryUnit["MINUTES"] = "MINUTES";
6152
+ ExpiryUnit["HOURS"] = "HOURS";
6153
+ ExpiryUnit["DAYS"] = "DAYS";
6154
+ ExpiryUnit["WEEKS"] = "WEEKS";
6155
+ ExpiryUnit["MONTHS"] = "MONTHS";
6156
+ ExpiryUnit["YEARS"] = "YEARS";
6157
+ })(ExpiryUnit = exports.ExpiryUnit || (exports.ExpiryUnit = {}));
6158
6158
  /**
6159
6159
  * @author Daniel DeGroff
6160
6160
  */
@@ -6570,4 +6570,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
6570
6570
  },{}]},{},[1])(1)
6571
6571
  });
6572
6572
 
6573
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC50cyIsIm5vZGVfbW9kdWxlcy9ub2RlLWZldGNoL2Jyb3dzZXIuanMiLCJzcmMvQ2xpZW50UmVzcG9uc2UudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnQudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyLnRzIiwic3JjL0Z1c2lvbkF1dGhDbGllbnQudHMiLCJzcmMvSVJFU1RDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7Ozs7Ozs7Ozs7OztBQUVILDJEQUFxRDtBQUNyRCxrQkFBZSwwQkFBZ0IsQ0FBQztBQUVoQyx5REFBdUM7QUFDdkMsb0RBQWtDO0FBQ2xDLGlFQUErQztBQUMvQyx1REFBcUM7QUFDckMsb0RBQWtDO0FBQ2xDLDJEQUF5Qzs7OztBQ3hCekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6QkE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7O0FBRUg7SUFBQTtJQVFBLENBQUM7SUFIQyxzQ0FBYSxHQUFiO1FBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUN6RCxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQVJBLEFBUUMsSUFBQTs7Ozs7O0FDeEJEOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdILG1EQUE4QztBQUM5Qyx5Q0FBMkU7QUFDM0UsMkJBQXNDO0FBRXRDOzs7O0dBSUc7QUFDSDtJQVVFLDJCQUFtQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtR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QUF1QyxDQUFBO0lBQ3ZDLHlFQUFxRCxDQUFBO0lBQ3JELDZEQUF5QyxDQUFBO0lBQ3pDLHFEQUFpQyxDQUFBO0lBQ2pDLG1FQUErQyxDQUFBO0lBQy9DLDZFQUF5RCxDQUFBO0lBQ3pELCtFQUEyRCxDQUFBO0lBQzNELDZGQUF5RSxDQUFBO0lBQ3pFLGlFQUE2QyxDQUFBO0lBQzdDLG1FQUErQyxDQUFBO0lBQy9DLG1FQUErQyxDQUFBO0lBQy9DLG1FQUErQyxDQUFBO0lBQy9DLHlGQUFxRSxDQUFBO0lBQ3JFLCtEQUEyQyxDQUFBO0lBQzNDLDJEQUF1QyxDQUFBO0lBQ3ZDLGlGQUE2RCxDQUFBO0lBQzdELCtFQUEyRCxDQUFBO0lBQzNELHVGQUFtRSxDQUFBO0lBQ25FLHVEQUFtQyxDQUFBO0lBQ25DLCtEQUEyQyxDQUFBO0lBQzNDLDJEQUF1QyxDQUFBO0lBQ3ZDLG1FQUErQyxDQUFBO0lBQy9DLGlEQUE2QixDQUFBO0lBQzdCLHFFQUFpRCxDQUFBO0lBQ2pELG1FQUErQyxDQUFBO0lBQy9DLCtEQUEyQyxDQUFBO0lBQzNDLDZEQUF5QyxDQUFBO0lBQ3pDLGlFQUE2QyxDQUFBO0lBQzdDLG1FQUErQyxDQUFBO0lBQy9DLG1FQUErQyxDQUFBO0lBQy9DLG1EQUErQixDQUFBO0lBQy9CLDJEQUF1QyxDQUFBO0lBQ3ZDLHVEQUFtQyxDQUFBO0lBQ25DLHlFQUFxRCxDQUFBO0lBQ3JELHVEQUFtQyxDQUFBO0lBQ25DLGlEQUE2QixDQUFBO0lBQzdCLDJEQUF1QyxDQUFBO0lBQ3ZDLGlEQUE2QixDQUFBO0lBQzdCLCtDQUEyQixDQUFBO0lBQzNCLHFEQUFpQyxDQUFBO0lBQ2pDLG1GQUErRCxDQUFBO0lBQy9ELGlHQUE2RSxDQUFBO0lBQzdFLG1GQUErRCxDQUFBO0lBQy9ELDZEQUF5QyxDQUFBO0lBQ3pDLHFGQUFpRSxDQUFBO0lBQ2pFLHlFQUFxRCxDQUFBO0lBQ3JELHVFQUFtRCxDQUFBO0lBQ25ELDZFQUF5RCxDQUFBO0lBQ3pELHVDQUFtQixDQUFBO0lBQ25CLHFFQUFpRCxDQUFBO0lBQ2pELG1E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LFFBSXJDO0FBOElEOzs7O0dBSUc7QUFDSCxJQUFZLFNBY1g7QUFkRCxXQUFZLFNBQVM7SUFDbkIsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsMEJBQWEsQ0FBQTtBQUNmLENBQUMsRUFkVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQWNwQjs7Ozs7O0FDdDZYRDs7Ozs7Ozs7Ozs7Ozs7R0FjRyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTksIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBGdXNpb25BdXRoQ2xpZW50IGZyb20gJy4vc3JjL0Z1c2lvbkF1dGhDbGllbnQnXG5leHBvcnQgZGVmYXVsdCBGdXNpb25BdXRoQ2xpZW50O1xuXG5leHBvcnQgKiBmcm9tICcuL3NyYy9GdXNpb25BdXRoQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0lSRVNUQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0RlZmF1bHRSRVNUQ2xpZW50QnVpbGRlcic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9DbGllbnRSZXNwb25zZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9JUkVTVENsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9JUkVTVENsaWVudEJ1aWxkZXInO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgZ2V0R2xvYmFsID0gZnVuY3Rpb24gKCkge1xuXHQvLyB0aGUgb25seSByZWxpYWJsZSBtZWFucyB0byBnZXQgdGhlIGdsb2JhbCBvYmplY3QgaXNcblx0Ly8gYEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKClgXG5cdC8vIEhvd2V2ZXIsIHRoaXMgY2F1c2VzIENTUCB2aW9sYXRpb25zIGluIENocm9tZSBhcHBzLlxuXHRpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9XG5cdGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG5cdHRocm93IG5ldyBFcnJvcigndW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0Jyk7XG59XG5cbnZhciBnbG9iYWxPYmplY3QgPSBnZXRHbG9iYWwoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZ2xvYmFsT2JqZWN0LmZldGNoO1xuXG4vLyBOZWVkZWQgZm9yIFR5cGVTY3JpcHQgYW5kIFdlYnBhY2suXG5pZiAoZ2xvYmFsT2JqZWN0LmZldGNoKSB7XG5cdGV4cG9ydHMuZGVmYXVsdCA9IGdsb2JhbE9iamVjdC5mZXRjaC5iaW5kKGdsb2JhbE9iamVjdCk7XG59XG5cbmV4cG9ydHMuSGVhZGVycyA9IGdsb2JhbE9iamVjdC5IZWFkZXJzO1xuZXhwb3J0cy5SZXF1ZXN0ID0gZ2xvYmFsT2JqZWN0LlJlcXVlc3Q7XG5leHBvcnRzLlJlc3BvbnNlID0gZ2xvYmFsT2JqZWN0LlJlc3BvbnNlO1xuIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpZW50UmVzcG9uc2U8VD4ge1xuICBwdWJsaWMgc3RhdHVzQ29kZTogbnVtYmVyO1xuICBwdWJsaWMgcmVzcG9uc2U6IFQ7XG4gIHB1YmxpYyBleGNlcHRpb246IEVycm9yO1xuXG4gIHdhc1N1Y2Nlc3NmdWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzQ29kZSA+PSAyMDAgJiYgdGhpcy5zdGF0dXNDb2RlIDwgMzAwO1xuICB9XG59IiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOS0yMDI0LCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgSVJFU1RDbGllbnQsIHsgRXJyb3JSZXNwb25zZUhhbmRsZXIsIFJlc3BvbnNlSGFuZGxlciB9IGZyb20gXCIuL0lSRVNUQ2xpZW50XCI7XG5pbXBvcnQgQ2xpZW50UmVzcG9uc2UgZnJvbSBcIi4vQ2xpZW50UmVzcG9uc2VcIjtcbmltcG9ydCBmZXRjaCwgeyBCb2R5SW5pdCwgUmVxdWVzdENyZWRlbnRpYWxzLCBSZXNwb25zZSB9IGZyb20gJ25vZGUtZmV0Y2gnO1xuaW1wb3J0IHsgVVJMU2VhcmNoUGFyYW1zIH0gZnJvbSBcInVybFwiO1xuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUFxuICogQGF1dGhvciBUeWxlciBTY290dFxuICogQGF1dGhvciBUSiBQZWRlblxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiBpbXBsZW1lbnRzIElSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgcHVibGljIGJvZHk6IEJvZHlJbml0O1xuICBwdWJsaWMgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwdWJsaWMgbWV0aG9kOiBzdHJpbmc7XG4gIHB1YmxpYyBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHB1YmxpYyB1cmk6IHN0cmluZztcbiAgcHVibGljIGNyZWRlbnRpYWxzOiBSZXF1ZXN0Q3JlZGVudGlhbHM7XG4gIHB1YmxpYyByZXNwb25zZUhhbmRsZXI6IFJlc3BvbnNlSGFuZGxlcjxSVD4gPSBEZWZhdWx0UkVTVENsaWVudC5KU09OUmVzcG9uc2VIYW5kbGVyO1xuICBwdWJsaWMgZXJyb3JSZXNwb25zZUhhbmRsZXI6IEVycm9yUmVzcG9uc2VIYW5kbGVyPEVSVD4gPSBEZWZhdWx0UkVTVENsaWVudC5FcnJvckpTT05SZXNwb25zZUhhbmRsZXI7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGhvc3Q6IHN0cmluZykge1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBKU09OIGZvcm0gb2YgdGhlIHJlc3BvbnNlIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSByZXNwb25zZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIHN0YXRpYyBhc3luYyBKU09OUmVzcG9uc2VIYW5kbGVyPFJUPihyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJUPj4ge1xuICAgIGxldCBjbGllbnRSZXNwb25zZSA9IG5ldyBDbGllbnRSZXNwb25zZTxSVD4oKTtcblxuICAgIGNsaWVudFJlc3BvbnNlLnN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgbGV0IHR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgICBpZiAodHlwZSAmJiB0eXBlLnN0YXJ0c1dpdGgoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSB7XG4gICAgICBjbGllbnRSZXNwb25zZS5yZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpZW50UmVzcG9uc2U7XG4gIH1cblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIEpTT04gZm9ybSBvZiB0aGUgcmVzcG9uc2UgdGV4dC5cbiAgICpcbiAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIEVycm9ySlNPTlJlc3BvbnNlSGFuZGxlcjxFUlQ+KHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RVJUPj4ge1xuICAgIGxldCBjbGllbnRSZXNwb25zZSA9IG5ldyBDbGllbnRSZXNwb25zZTxFUlQ+KCk7XG5cbiAgICBjbGllbnRSZXNwb25zZS5zdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGxldCB0eXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gICAgaWYgKHR5cGUgJiYgdHlwZS5zdGFydHNXaXRoKFwiYXBwbGljYXRpb24vanNvblwiKSkge1xuICAgICAgY2xpZW50UmVzcG9uc2UuZXhjZXB0aW9uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGllbnRSZXNwb25zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlciB1c2luZyBhIGtleVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSB2YWx1ZSBvZiB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEByZXR1cm5zIHtEZWZhdWx0UkVTVENsaWVudH1cbiAgICovXG4gIHdpdGhBdXRob3JpemF0aW9uKGtleTogc3RyaW5nKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIGlmIChrZXkgPT09IG51bGwgfHwgdHlwZW9mIGtleSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMud2l0aEhlYWRlcignQXV0aG9yaXphdGlvbicsIGtleSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHNlZ21lbnQgdG8gdGhlIHJlcXVlc3QgdXJpXG4gICAqL1xuICB3aXRoVXJpU2VnbWVudChzZWdtZW50OiBzdHJpbmcgfCBudW1iZXIpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgaWYgKHNlZ21lbnQgPT09IG51bGwgfHwgc2VnbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRoaXMudXJpID09PSBudWxsKSB7XG4gICAgICB0aGlzLnVyaSA9ICcnO1xuICAgIH1cbiAgICBpZiAodGhpcy51cmkuY2hhckF0KHRoaXMudXJpLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgIHRoaXMudXJpICs9ICcvJztcbiAgICB9XG4gICAgdGhpcy51cmkgPSB0aGlzLnVyaSArIHNlZ21lbnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIHVybCArIHBhcmFtZXRlciBsaXN0XG4gICAqL1xuICBnZXRGdWxsVXJsKCkge1xuICAgIHJldHVybiB0aGlzLmhvc3QgKyB0aGlzLnVyaSArIHRoaXMuZ2V0UXVlcnlTdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBib2R5IG9mIHRoZSBjbGllbnQgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIGJvZHkgVGhlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSByZXF1ZXN0IGJvZHkgYXMgZm9ybSBkYXRhLlxuICAgKi9cbiAgd2l0aEZvcm1EYXRhKGJvZHk6IFVSTFNlYXJjaFBhcmFtcyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICBjb25zdCBib2R5MiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAoYm9keSkge1xuICAgICAgYm9keS5mb3JFYWNoKCh2YWx1ZSwgbmFtZSwgc2VhcmNoUGFyYW1zKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwICYmIHZhbHVlICE9IFwibnVsbFwiICYmIHZhbHVlICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBib2R5Mi5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGJvZHkgPSBib2R5MjtcbiAgICB9XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgaGVhZGVyIHRvIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGhlYWRlci5cbiAgICovXG4gIHdpdGhIZWFkZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5oZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBib2R5IG9mIHRoZSBjbGllbnQgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIGJvZHkgVGhlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSByZXF1ZXN0IGJvZHkgYXMgSlNPTi5cbiAgICovXG4gIHdpdGhKU09OQm9keShib2R5OiBvYmplY3QpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gICAgdGhpcy53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIC8vIE9taXQgdGhlIENvbnRlbnQtTGVuZ3RoLCB0aGlzIGlzIHNldCBhdXRvLW1hZ2ljYWxseSBieSB0aGUgcmVxdWVzdCBsaWJyYXJ5XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaHR0cCBtZXRob2QgZm9yIHRoZSByZXF1ZXN0XG4gICAqL1xuICB3aXRoTWV0aG9kKG1ldGhvZDogc3RyaW5nKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHVyaSBvZiB0aGUgcmVxdWVzdFxuICAgKi9cbiAgd2l0aFVyaSh1cmk6IHN0cmluZyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLnVyaSA9IHVyaTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHBhcmFtZXRlcnMgdG8gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciwgbWF5IGJlIGEgc3RyaW5nLCBvYmplY3Qgb3IgbnVtYmVyLlxuICAgKi9cbiAgd2l0aFBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5wYXJhbWV0ZXJzW25hbWVdID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyByZXF1ZXN0J3MgY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBBIHN0cmluZyBpbmRpY2F0aW5nIHdoZXRoZXIgY3JlZGVudGlhbHMgd2lsbCBiZSBzZW50IHdpdGggdGhlIHJlcXVlc3QgYWx3YXlzLCBuZXZlciwgb3Igb25seSB3aGVuIHNlbnQgdG8gYSBzYW1lLW9yaWdpbiBVUkwuXG4gICAqL1xuICB3aXRoQ3JlZGVudGlhbHModmFsdWU6IFJlcXVlc3RDcmVkZW50aWFscyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aXRoUmVzcG9uc2VIYW5kbGVyKGhhbmRsZXI6IFJlc3BvbnNlSGFuZGxlcjxSVD4pOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5yZXNwb25zZUhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2l0aEVycm9yUmVzcG9uc2VIYW5kbGVyKGhhbmRsZXI6IEVycm9yUmVzcG9uc2VIYW5kbGVyPEVSVD4pOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5lcnJvclJlc3BvbnNlSGFuZGxlciA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gYSBwcm9taXNlLiBUaGlzIHByb21pc2Ugd2lsbCByZXNvbHZlIGlmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWxcbiAgICogYW5kIHJlamVjdCBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnbygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJUPj4ge1xuICAgIGNvbnN0IGNsaWVudFJlc3BvbnNlID0gbmV3IENsaWVudFJlc3BvbnNlPFJUPigpO1xuXG4gICAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICB0aGlzLmdldEZ1bGxVcmwoKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgYm9keTogdGhpcy5ib2R5IGFzIEJvZHlJbml0LFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSAoQ3JlZGVudGlhbHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gTm9kZUpTKVxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IHRoaXMuY3JlZGVudGlhbHMsXG4gICAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXNwb25zZUhhbmRsZXIocmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgYXdhaXQgdGhpcy5lcnJvclJlc3BvbnNlSGFuZGxlcihyZXNwb25zZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENsaWVudFJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IGVycm9yOyAvLyBEb24ndCBjYXRjaCBhIENsaWVudFJlc3BvbnNlICh3ZSB3YW50IHRoaXMgdG8gdHJpZ2dlciB0aGUgY2F0Y2ggb2YgdGhlIHByb21pc2VcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3BvbnNlKSB7IC8vIFRyeSB0byByZWNvdmVyIHRoZSByZXNwb25zZSBzdGF0dXNcbiAgICAgICAgY2xpZW50UmVzcG9uc2Uuc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgIH1cbiAgICAgIGNsaWVudFJlc3BvbnNlLmV4Y2VwdGlvbiA9IGVycm9yO1xuXG4gICAgICB0aHJvdyBjbGllbnRSZXNwb25zZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5U3RyaW5nKCkge1xuICAgIGxldCBxdWVyeVN0cmluZyA9ICcnO1xuICAgIGNvbnN0IGFwcGVuZFBhcmFtID0gKGtleTogc3RyaW5nLCBwYXJhbTogc3RyaW5nKSA9PiB7XG4gICAgICBxdWVyeVN0cmluZyArPSAocXVlcnlTdHJpbmcubGVuZ3RoID09PSAwKSA/ICc/JyA6ICcmJztcbiAgICAgIHF1ZXJ5U3RyaW5nICs9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtKTtcbiAgICB9XG4gICAgZm9yIChsZXQga2V5IGluIHRoaXMucGFyYW1ldGVycykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnBhcmFtZXRlcnNba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKHZhbCA9PiBhcHBlbmRQYXJhbShrZXksIHZhbCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcHBlbmRQYXJhbShrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xuICB9XG59XG4iLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgSVJFU1RDbGllbnQgZnJvbSBcIi4vSVJFU1RDbGllbnRcIjtcbmltcG9ydCBEZWZhdWx0UkVTVENsaWVudCBmcm9tIFwiLi9EZWZhdWx0UkVTVENsaWVudFwiO1xuaW1wb3J0IElSRVNUQ2xpZW50QnVpbGRlciBmcm9tIFwiLi9JUkVTVENsaWVudEJ1aWxkZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyIGltcGxlbWVudHMgSVJFU1RDbGllbnRCdWlsZGVyIHtcbiAgYnVpbGQ8UlQsIEVSVD4oaG9zdDogc3RyaW5nKTogSVJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHJldHVybiBuZXcgRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4oaG9zdCk7XG4gIH1cbn1cbiIsIi8qXG4qIENvcHlyaWdodCAoYykgMjAxOS0yMDIzLCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4qXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qXG4qICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4qXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCBJUkVTVENsaWVudCBmcm9tIFwiLi9JUkVTVENsaWVudFwiXG5pbXBvcnQgRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyIGZyb20gXCIuL0RlZmF1bHRSRVNUQ2xpZW50QnVpbGRlclwiO1xuaW1wb3J0IElSRVNUQ2xpZW50QnVpbGRlciBmcm9tIFwiLi9JUkVTVENsaWVudEJ1aWxkZXJcIjtcbmltcG9ydCBDbGllbnRSZXNwb25zZSBmcm9tIFwiLi9DbGllbnRSZXNwb25zZVwiO1xuaW1wb3J0IHtSZXF1ZXN0Q3JlZGVudGlhbHN9IGZyb20gXCJub2RlLWZldGNoXCI7XG5pbXBvcnQge1VSTFNlYXJjaFBhcmFtc30gZnJvbSBcInVybFwiO1xuXG5leHBvcnQgY2xhc3MgRnVzaW9uQXV0aENsaWVudCB7XG4gIHB1YmxpYyBjbGllbnRCdWlsZGVyOiBJUkVTVENsaWVudEJ1aWxkZXIgPSBuZXcgRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyKCk7XG4gIHB1YmxpYyBjcmVkZW50aWFsczogUmVxdWVzdENyZWRlbnRpYWxzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBhcGlLZXk6IHN0cmluZyxcbiAgICBwdWJsaWMgaG9zdDogc3RyaW5nLFxuICAgIHB1YmxpYyB0ZW5hbnRJZD86IHN0cmluZyxcbiAgKSB7IH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGVuYW50IGlkLCB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIFgtRnVzaW9uQXV0aC1UZW5hbnRJZCBoZWFkZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gdGVuYW50SWQgVGhlIHZhbHVlIG9mIHRoZSBYLUZ1c2lvbkF1dGgtVGVuYW50SWQgaGVhZGVyLlxuICAgKiBAcmV0dXJucyB7RnVzaW9uQXV0aENsaWVudH1cbiAgICovXG4gIHNldFRlbmFudElkKHRlbmFudElkOiBzdHJpbmcgfCBudWxsKTogRnVzaW9uQXV0aENsaWVudCB7XG4gICAgdGhpcy50ZW5hbnRJZCA9IHRlbmFudElkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgd2hldGhlciBhbmQgaG93IGNvb2tpZXMgd2lsbCBiZSBzZW50IHdpdGggZWFjaCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgYW5kIGhvdyBjb29raWVzIHdpbGwgYmUgc2VudC5cbiAgICogQHJldHVybnMge0Z1c2lvbkF1dGhDbGllbnR9XG4gICAqL1xuICBzZXRSZXF1ZXN0Q3JlZGVudGlhbHModmFsdWU6IFJlcXVlc3RDcmVkZW50aWFscyk6IEZ1c2lvbkF1dGhDbGllbnQge1xuICAgIHRoaXMuY3JlZGVudGlhbHMgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhbiBhY3Rpb24gb24gYSB1c2VyLiBUaGUgdXNlciBiZWluZyBhY3Rpb25lZCBpcyBjYWxsZWQgdGhlIFwiYWN0aW9uZWVcIiBhbmQgdGhlIHVzZXIgdGFraW5nIHRoZSBhY3Rpb24gaXMgY2FsbGVkIHRoZVxuICAgKiBcImFjdGlvbmVyXCIuIEJvdGggdXNlciBpZHMgYXJlIHJlcXVpcmVkIGluIHRoZSByZXF1ZXN0IG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSBhY3Rpb24gcmVxdWVzdCB0aGF0IGluY2x1ZGVzIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFjdGlvbiBiZWluZyB0YWtlbiBpbmNsdWRpbmdcbiAgICogICAgdGhlIElkIG9mIHRoZSBhY3Rpb24sIGFueSBvcHRpb25zIGFuZCB0aGUgZHVyYXRpb24gKGlmIGFwcGxpY2FibGUpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgYWN0aW9uVXNlcihyZXF1ZXN0OiBBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWN0aXZhdGVzIHRoZSBGdXNpb25BdXRoIFJlYWN0b3IgdXNpbmcgYSBsaWNlbnNlIElkIGFuZCBvcHRpb25hbGx5IGEgbGljZW5zZSB0ZXh0IChmb3IgYWlyLWdhcHBlZCBkZXBsb3ltZW50cylcbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdG9yUmVxdWVzdH0gcmVxdWVzdCBBbiBvcHRpb25hbCByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGxpY2Vuc2UgdGV4dCB0byBhY3RpdmF0ZSBSZWFjdG9yICh1c2VmdWwgZm9yIGFpci1nYXAgZGVwbG95bWVudHMgb2YgRnVzaW9uQXV0aCkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGFjdGl2YXRlUmVhY3RvcihyZXF1ZXN0OiBSZWFjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3RvcicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB1c2VyIHRvIGFuIGV4aXN0aW5nIGZhbWlseS4gVGhlIGZhbWlseSBJZCBtdXN0IGJlIHNwZWNpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmYW1pbHlJZCBUaGUgSWQgb2YgdGhlIGZhbWlseS5cbiAgICogQHBhcmFtIHtGYW1pbHlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggdXNlciB0byBhZGQgdG8gdGhlIGZhbWlseS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+Pn1cbiAgICovXG4gIGFkZFVzZXJUb0ZhbWlseShmYW1pbHlJZDogVVVJRCwgcmVxdWVzdDogRmFtaWx5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RmFtaWx5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmYW1pbHlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIGEgZGV2aWNlIGdyYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHJlcXVpcmVkIGlmIGNsaWVudCBhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gVGhlIGFjY2VzcyB0b2tlbiB1c2VkIHRvIGlkZW50aWZ5IHRoZSB1c2VyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIFRoZSBlbmQtdXNlciB2ZXJpZmljYXRpb24gY29kZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RGV2aWNlQXBwcm92YWxSZXNwb25zZT4+fVxuICAgKi9cbiAgYXBwcm92ZURldmljZShjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCB1c2VyX2NvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RGV2aWNlQXBwcm92YWxSZXNwb25zZT4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ3Rva2VuJywgdG9rZW4pO1xuICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PERldmljZUFwcHJvdmFsUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9kZXZpY2UvYXBwcm92ZScpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIHVzZXIgYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjdGlvbklkIFRoZSBhY3Rpb24gSWQgb2YgdGhlIGFjdGlvbiB0byBjYW5jZWwuXG4gICAqIEBwYXJhbSB7QWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgYWN0aW9uIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhbmNlbGxhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNhbmNlbEFjdGlvbihhY3Rpb25JZDogVVVJRCwgcmVxdWVzdDogQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIGEgdXNlcidzIHBhc3N3b3JkIHVzaW5nIHRoZSBjaGFuZ2UgcGFzc3dvcmQgSWQuIFRoaXMgdXN1YWxseSBvY2N1cnMgYWZ0ZXIgYW4gZW1haWwgaGFzIGJlZW4gc2VudCB0byB0aGUgdXNlclxuICAgKiBhbmQgdGhleSBjbGlja2VkIG9uIGEgbGluayB0byByZXNldCB0aGVpciBwYXNzd29yZC5cbiAgICogXG4gICAqIEFzIG9mIHZlcnNpb24gMS4zMi4yLCBwcmVmZXIgc2VuZGluZyB0aGUgY2hhbmdlUGFzc3dvcmRJZCBpbiB0aGUgcmVxdWVzdCBib2R5LiBUbyBkbyB0aGlzLCBvbWl0IHRoZSBmaXJzdCBwYXJhbWV0ZXIsIGFuZCBzZXRcbiAgICogdGhlIHZhbHVlIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFuZ2VQYXNzd29yZElkIFRoZSBjaGFuZ2UgcGFzc3dvcmQgSWQgdXNlZCB0byBmaW5kIHRoZSB1c2VyLiBUaGlzIHZhbHVlIGlzIGdlbmVyYXRlZCBieSBGdXNpb25BdXRoIG9uY2UgdGhlIGNoYW5nZSBwYXNzd29yZCB3b3JrZmxvdyBoYXMgYmVlbiBpbml0aWF0ZWQuXG4gICAqIEBwYXJhbSB7Q2hhbmdlUGFzc3dvcmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlPj59XG4gICAqL1xuICBjaGFuZ2VQYXNzd29yZChjaGFuZ2VQYXNzd29yZElkOiBzdHJpbmcsIHJlcXVlc3Q6IENoYW5nZVBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY2hhbmdlUGFzc3dvcmRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyBhIHVzZXIncyBwYXNzd29yZCB1c2luZyB0aGVpciBpZGVudGl0eSAobG9naW5JZCBhbmQgcGFzc3dvcmQpLiBVc2luZyBhIGxvZ2luSWQgaW5zdGVhZCBvZiB0aGUgY2hhbmdlUGFzc3dvcmRJZFxuICAgKiBieXBhc3NlcyB0aGUgZW1haWwgdmVyaWZpY2F0aW9uIGFuZCBhbGxvd3MgYSBwYXNzd29yZCB0byBiZSBjaGFuZ2VkIGRpcmVjdGx5IHdpdGhvdXQgZmlyc3QgY2FsbGluZyB0aGUgI2ZvcmdvdFBhc3N3b3JkXG4gICAqIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtDaGFuZ2VQYXNzd29yZFJlcXVlc3R9IHJlcXVlc3QgVGhlIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNoYW5nZSB0aGUgcGFzc3dvcmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNoYW5nZVBhc3N3b3JkQnlJZGVudGl0eShyZXF1ZXN0OiBDaGFuZ2VQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIG11c3Qgb2J0YWluIGEgVHJ1c3QgVG9rZW4gSWQgaW4gb3JkZXIgdG8gY29tcGxldGUgYSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdC5cbiAgICogV2hlbiBhIHVzZXIgaGFzIGVuYWJsZWQgVHdvLUZhY3RvciBhdXRoZW50aWNhdGlvbiwgYmVmb3JlIHlvdSBhcmUgYWxsb3dlZCB0byB1c2UgdGhlIENoYW5nZSBQYXNzd29yZCBBUEkgdG8gY2hhbmdlXG4gICAqIHlvdXIgcGFzc3dvcmQsIHlvdSBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIGJ5IGNvbXBsZXRpbmcgYSBUd28tRmFjdG9yIFN0ZXAtVXAgYXV0aGVudGljYXRpb24uXG4gICAqIFxuICAgKiBBbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQwMCB3aXRoIGEgZ2VuZXJhbCBlcnJvciBjb2RlIG9mIFtUcnVzdFRva2VuUmVxdWlyZWRdIGluZGljYXRlcyB0aGF0IGEgVHJ1c3QgVG9rZW4gaXMgcmVxdWlyZWQgdG8gbWFrZSBhIFBPU1QgcmVxdWVzdCB0byB0aGlzIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5nZVBhc3N3b3JkSWQgVGhlIGNoYW5nZSBwYXNzd29yZCBJZCB1c2VkIHRvIGZpbmQgdGhlIHVzZXIuIFRoaXMgdmFsdWUgaXMgZ2VuZXJhdGVkIGJ5IEZ1c2lvbkF1dGggb25jZSB0aGUgY2hhbmdlIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nSWQoY2hhbmdlUGFzc3dvcmRJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjaGFuZ2VQYXNzd29yZElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgVG9rZW4gYnkgY29tcGxldGluZyBhIFR3by1GYWN0b3IgU3RlcC1VcCBhdXRoZW50aWNhdGlvbi5cbiAgICogXG4gICAqIEFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDAwIHdpdGggYSBnZW5lcmFsIGVycm9yIGNvZGUgb2YgW1RydXN0VG9rZW5SZXF1aXJlZF0gaW5kaWNhdGVzIHRoYXQgYSBUcnVzdCBUb2tlbiBpcyByZXF1aXJlZCB0byBtYWtlIGEgUE9TVCByZXF1ZXN0IHRvIHRoaXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNoZWNrQ2hhbmdlUGFzc3dvcmRVc2luZ0pXVChlbmNvZGVkSldUOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBtdXN0IG9idGFpbiBhIFRydXN0IFJlcXVlc3QgSWQgaW4gb3JkZXIgdG8gY29tcGxldGUgYSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdC5cbiAgICogV2hlbiBhIHVzZXIgaGFzIGVuYWJsZWQgVHdvLUZhY3RvciBhdXRoZW50aWNhdGlvbiwgYmVmb3JlIHlvdSBhcmUgYWxsb3dlZCB0byB1c2UgdGhlIENoYW5nZSBQYXNzd29yZCBBUEkgdG8gY2hhbmdlXG4gICAqIHlvdXIgcGFzc3dvcmQsIHlvdSBtdXN0IG9idGFpbiBhIFRydXN0IFJlcXVlc3QgSWQgYnkgY29tcGxldGluZyBhIFR3by1GYWN0b3IgU3RlcC1VcCBhdXRoZW50aWNhdGlvbi5cbiAgICogXG4gICAqIEFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDAwIHdpdGggYSBnZW5lcmFsIGVycm9yIGNvZGUgb2YgW1RydXN0VG9rZW5SZXF1aXJlZF0gaW5kaWNhdGVzIHRoYXQgYSBUcnVzdCBUb2tlbiBpcyByZXF1aXJlZCB0byBtYWtlIGEgUE9TVCByZXF1ZXN0IHRvIHRoaXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9naW5JZCBUaGUgbG9naW5JZCBvZiB0aGUgVXNlciB0aGF0IHlvdSBpbnRlbmQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZCBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNoZWNrQ2hhbmdlUGFzc3dvcmRVc2luZ0xvZ2luSWQobG9naW5JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VybmFtZScsIGxvZ2luSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYSBDbGllbnQgQ3JlZGVudGlhbHMgZ3JhbnQgcmVxdWVzdCB0byBvYnRhaW4gYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIChPcHRpb25hbCkgVGhlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBFbnRpdHkgaW4gd2hpY2ggeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS5cbiAgICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiBCYXNpYyBBdXRob3JpemF0aW9uIGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldCB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGlzIHJlcXVlc3QuXG4gICAqICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gQmFzaWMgQXV0aG9yaXphdGlvbiBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGlzIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZSAoT3B0aW9uYWwpIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hpY2ggdGFyZ2V0IGVudGl0eSB5b3UgYXJlIHJlcXVlc3RpbmcgYWNjZXNzLiBUbyByZXF1ZXN0IGFjY2VzcyB0byBhbiBlbnRpdHksIHVzZSB0aGUgZm9ybWF0IHRhcmdldC1lbnRpdHk6Jmx0O3RhcmdldC1lbnRpdHktaWQmZ3Q7OiZsdDtyb2xlcyZndDsuIFJvbGVzIGFyZSBhbiBvcHRpb25hbCBjb21tYSBzZXBhcmF0ZWQgbGlzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGNsaWVudENyZWRlbnRpYWxzR3JhbnQoY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgc2NvcGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ2NsaWVudF9jcmVkZW50aWFscycpO1xuICAgIGJvZHkuYXBwZW5kKCdzY29wZScsIHNjb3BlKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb21tZW50IHRvIHRoZSB1c2VyJ3MgYWNjb3VudC5cbiAgICpcbiAgICogQHBhcmFtIHtVc2VyQ29tbWVudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdXNlciBjb21tZW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29tbWVudFJlc3BvbnNlPj59XG4gICAqL1xuICBjb21tZW50T25Vc2VyKHJlcXVlc3Q6IFVzZXJDb21tZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbW1lbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29tbWVudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb21tZW50JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgYSBXZWJBdXRobiBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueSBieSB2YWxpZGF0aW5nIHRoZSBzaWduYXR1cmUgYWdhaW5zdCB0aGUgcHJldmlvdXNseSBnZW5lcmF0ZWQgY2hhbGxlbmdlIHdpdGhvdXQgbG9nZ2luZyB0aGUgdXNlciBpblxuICAgKlxuICAgKiBAcGFyYW0ge1dlYkF1dGhuTG9naW5SZXF1ZXN0fSByZXF1ZXN0IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgbmVjZXNzYXJ5IGZvciBjb21wbGV0aW5nIHRoZSBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkFzc2VydFJlc3BvbnNlPj59XG4gICAqL1xuICBjb21wbGV0ZVdlYkF1dGhuQXNzZXJ0aW9uKHJlcXVlc3Q6IFdlYkF1dGhuTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkFzc2VydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFdlYkF1dGhuQXNzZXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9hc3NlcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255IGJ5IHZhbGlkYXRpbmcgdGhlIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBwcmV2aW91c2x5IGdlbmVyYXRlZCBjaGFsbGVuZ2UgYW5kIHRoZW4gbG9naW4gdGhlIHVzZXIgaW5cbiAgICpcbiAgICogQHBhcmFtIHtXZWJBdXRobkxvZ2luUmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3IgY29tcGxldGluZyB0aGUgYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgY29tcGxldGVXZWJBdXRobkxvZ2luKHJlcXVlc3Q6IFdlYkF1dGhuTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255IGJ5IHZhbGlkYXRpbmcgdGhlIGNsaWVudCByZXF1ZXN0IGFuZCBzYXZpbmcgdGhlIG5ldyBjcmVkZW50aWFsXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViQXV0aG5SZWdpc3RlckNvbXBsZXRlUmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3IgY29tcGxldGluZyB0aGUgcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBjb21wbGV0ZVdlYkF1dGhuUmVnaXN0cmF0aW9uKHJlcXVlc3Q6IFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vcmVnaXN0ZXIvY29tcGxldGUnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEFQSSBrZXkuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgdW5pcXVlIElkIGZvciB0aGUga2V5LCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBhbiBBUEkga2V5IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2l0aCBlcXVhbCBvciBsZXNzZXIgYXV0aG9yaXR5LiBBbiBBUEkga2V5IGNhbm5vdCBjcmVhdGUgYW5vdGhlciBBUEkga2V5IHVubGVzcyBpdCBpcyBncmFudGVkIFxuICAgKiB0byB0aGF0IEFQSSBrZXkuXG4gICAqIFxuICAgKiBJZiBhbiBBUEkga2V5IGlzIGxvY2tlZCB0byBhIHRlbmFudCwgaXQgY2FuIG9ubHkgY3JlYXRlIEFQSSBLZXlzIGZvciB0aGF0IHNhbWUgdGVuYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgQVBJIGtleS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBJZCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtBUElLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSB0aGUgQVBJS2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQVBJS2V5KGtleUlkOiBVVUlELCByZXF1ZXN0OiBBUElLZXlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBUElLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwaS1rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXBwbGljYXRpb24uIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgYXBwbGljYXRpb24sIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBJZCB0byB1c2UgZm9yIHRoZSBhcHBsaWNhdGlvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBhcHBsaWNhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHJvbGUgZm9yIGFuIGFwcGxpY2F0aW9uLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24geW91IGFyZSBjcmVhdGluZyB0aGUgcm9sZSBmb3IuXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgcm9sZSBpbnNpZGUgdGhlIEFwcGxpY2F0aW9uUm9sZSBvYmplY3QgaXRzZWxmLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBjcmVhdGUgdGhlIHJvbGUgb24uXG4gICAqIEBwYXJhbSB7VVVJRH0gcm9sZUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSByb2xlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGFwcGxpY2F0aW9uIHJvbGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUFwcGxpY2F0aW9uUm9sZShhcHBsaWNhdGlvbklkOiBVVUlELCByb2xlSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicm9sZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocm9sZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGF1ZGl0IGxvZyB3aXRoIHRoZSBtZXNzYWdlIGFuZCB1c2VyIG5hbWUgKHVzdWFsbHkgYW4gZW1haWwpLiBBdWRpdCBsb2dzIHNob3VsZCBiZSB3cml0dGVuIGFueXRpbWUgeW91XG4gICAqIG1ha2UgY2hhbmdlcyB0byB0aGUgRnVzaW9uQXV0aCBkYXRhYmFzZS4gV2hlbiB1c2luZyB0aGUgRnVzaW9uQXV0aCBBcHAgd2ViIGludGVyZmFjZSwgYW55IGNoYW5nZXMgYXJlIGF1dG9tYXRpY2FsbHlcbiAgICogd3JpdHRlbiB0byB0aGUgYXVkaXQgbG9nLiBIb3dldmVyLCBpZiB5b3UgYXJlIGFjY2Vzc2luZyB0aGUgQVBJLCB5b3UgbXVzdCB3cml0ZSB0aGUgYXVkaXQgbG9ncyB5b3Vyc2VsZi5cbiAgICpcbiAgICogQHBhcmFtIHtBdWRpdExvZ1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgYXVkaXQgbG9nIGVudHJ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1Jlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVBdWRpdExvZyhyZXF1ZXN0OiBBdWRpdExvZ1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXVkaXRMb2dSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9hdWRpdC1sb2cnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY29ubmVjdG9yLiAgWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBjb25uZWN0b3IsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBjb25uZWN0b3IuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtDb25uZWN0b3JSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGNvbm5lY3Rvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUNvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCwgcmVxdWVzdDogQ29ubmVjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1c2VyIGNvbnNlbnQgdHlwZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBjb25zZW50IHR5cGUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29uc2VudElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgY29uc2VudC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0NvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGNvbnNlbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQ29uc2VudChjb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IENvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZW1haWwgdGVtcGxhdGUuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgdGVtcGxhdGUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdGVtcGxhdGUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtFbWFpbFRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBlbWFpbCB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogRW1haWxUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gRW50aXR5LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIEVudGl0eS4gSWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIEVudGl0eS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0VudGl0eVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgRW50aXR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW50aXR5KGVudGl0eUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEVudGl0eSBUeXBlLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIEVudGl0eSBUeXBlLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIEVudGl0eSBUeXBlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgRW50aXR5IFR5cGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW50aXR5VHlwZShlbnRpdHlUeXBlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBlcm1pc3Npb24gZm9yIGFuIGVudGl0eSB0eXBlLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBJZCBvZiB0aGUgZW50aXR5IHR5cGUgeW91IGFyZSBjcmVhdGluZyB0aGUgcGVybWlzc2lvbiBmb3IuXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgcGVybWlzc2lvbiBpbnNpZGUgdGhlIEVudGl0eVR5cGVQZXJtaXNzaW9uIG9iamVjdCBpdHNlbGYsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgZW50aXR5IHR5cGUgdG8gY3JlYXRlIHRoZSBwZXJtaXNzaW9uIG9uLlxuICAgKiBAcGFyYW0ge1VVSUR9IHBlcm1pc3Npb25JZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgcGVybWlzc2lvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHBlcm1pc3Npb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW50aXR5VHlwZVBlcm1pc3Npb24oZW50aXR5VHlwZUlkOiBVVUlELCBwZXJtaXNzaW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJwZXJtaXNzaW9uXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChwZXJtaXNzaW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmYW1pbHkgd2l0aCB0aGUgdXNlciBJZCBpbiB0aGUgcmVxdWVzdCBhcyB0aGUgb3duZXIgYW5kIHNvbGUgbWVtYmVyIG9mIHRoZSBmYW1pbHkuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGVcbiAgICogZmFtaWx5LCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgZmFtaWx5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RmFtaWx5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBmYW1pbHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVGYW1pbHkoZmFtaWx5SWQ6IFVVSUQsIHJlcXVlc3Q6IEZhbWlseVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZhbWlseVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmFtaWx5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb3JtLiAgWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBmb3JtLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZvcm1JZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGZvcm0uIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtGb3JtUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBmb3JtLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUZvcm0oZm9ybUlkOiBVVUlELCByZXF1ZXN0OiBGb3JtUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZm9ybUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZm9ybSBmaWVsZC4gIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgZm9ybSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmaWVsZElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgZm9ybSBmaWVsZC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0Zvcm1GaWVsZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZm9ybSBmaWVsZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUZvcm1GaWVsZChmaWVsZElkOiBVVUlELCByZXF1ZXN0OiBGb3JtRmllbGRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtRmllbGRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmllbGRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGdyb3VwLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGdyb3VwLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBncm91cC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0dyb3VwUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBncm91cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlR3JvdXAoZ3JvdXBJZDogVVVJRCwgcmVxdWVzdDogR3JvdXBSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEdyb3VwUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChncm91cElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbWVtYmVyIGluIGEgZ3JvdXAuXG4gICAqXG4gICAqIEBwYXJhbSB7TWVtYmVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBncm91cCBtZW1iZXIocykuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lbWJlclJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVHcm91cE1lbWJlcnMocmVxdWVzdDogTWVtYmVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVtYmVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVtYmVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cC9tZW1iZXInKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIElQIEFjY2VzcyBDb250cm9sIExpc3QuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIG9uIHRoaXMgY3JlYXRlIHJlcXVlc3QsIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjY2Vzc0NvbnRyb2xMaXN0SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7SVBBY2Nlc3NDb250cm9sTGlzdFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVJUEFjY2Vzc0NvbnRyb2xMaXN0KGFjY2Vzc0NvbnRyb2xMaXN0SWQ6IFVVSUQsIHJlcXVlc3Q6IElQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjY2Vzc0NvbnRyb2xMaXN0SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaWRlbnRpdHkgcHJvdmlkZXIuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgaWRlbnRpdHkgcHJvdmlkZXIsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUlkZW50aXR5UHJvdmlkZXIoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCByZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIExhbWJkYS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBsYW1iZGEsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbGFtYmRhSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBsYW1iZGEuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtMYW1iZGFSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGxhbWJkYS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUxhbWJkYShsYW1iZGFJZDogVVVJRCwgcmVxdWVzdDogTGFtYmRhUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobGFtYmRhSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gbWVzc2FnZSB0ZW1wbGF0ZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB0ZW1wbGF0ZSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzYWdlVGVtcGxhdGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHRlbXBsYXRlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNzYWdlIHRlbXBsYXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlTWVzc2FnZVRlbXBsYXRlKG1lc3NhZ2VUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2FnZVRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtZXNzZW5nZXIuICBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIG1lc3NlbmdlciwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzZW5nZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIG1lc3Nlbmdlci4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge01lc3NlbmdlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzc2VuZ2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlELCByZXF1ZXN0OiBNZXNzZW5nZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjdXN0b20gT0F1dGggc2NvcGUgZm9yIGFuIGFwcGxpY2F0aW9uLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24geW91IGFyZSBjcmVhdGluZyB0aGUgc2NvcGUgZm9yLlxuICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIE9BdXRoIHNjb3BlIG9uIHRoZSBVUkwsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGNyZWF0ZSB0aGUgT0F1dGggc2NvcGUgb24uXG4gICAqIEBwYXJhbSB7VVVJRH0gc2NvcGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgT0F1dGggc2NvcGUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIE9BdXRoIE9BdXRoIHNjb3BlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlT0F1dGhTY29wZShhcHBsaWNhdGlvbklkOiBVVUlELCBzY29wZUlkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInNjb3BlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChzY29wZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGVuYW50LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHRlbmFudCwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHRlbmFudC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1RlbmFudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdGVuYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVGVuYW50KHRlbmFudElkOiBVVUlELCByZXF1ZXN0OiBUZW5hbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFRoZW1lLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHRoZW1lLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRoZW1lSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB0aGVtZS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1RoZW1lUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB0aGVtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVGhlbWUodGhlbWVJZDogVVVJRCwgcmVxdWVzdDogVGhlbWVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0aGVtZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdXNlci4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB1c2VyLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHVzZXIuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtVc2VyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXIodXNlcklkOiBVVUlELCByZXF1ZXN0OiBVc2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdXNlciBhY3Rpb24uIFRoaXMgYWN0aW9uIGNhbm5vdCBiZSB0YWtlbiBvbiBhIHVzZXIgdW50aWwgdGhpcyBjYWxsIHN1Y2Nlc3NmdWxseSByZXR1cm5zLiBBbnl0aW1lIGFmdGVyXG4gICAqIHRoYXQgdGhlIHVzZXIgYWN0aW9uIGNhbiBiZSBhcHBsaWVkIHRvIGFueSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHVzZXIgYWN0aW9uLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdXNlciBhY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdXNlciByZWFzb24uIFRoaXMgdXNlciBhY3Rpb24gcmVhc29uIGNhbm5vdCBiZSB1c2VkIHdoZW4gYWN0aW9uaW5nIGEgdXNlciB1bnRpbCB0aGlzIGNhbGwgY29tcGxldGVzXG4gICAqIHN1Y2Nlc3NmdWxseS4gQW55dGltZSBhZnRlciB0aGF0IHRoZSB1c2VyIGFjdGlvbiByZWFzb24gY2FuIGJlIHVzZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvblJlYXNvbklkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdXNlciBhY3Rpb24gcmVhc29uLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlYXNvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdXNlciBhY3Rpb24gcmVhc29uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVhc29uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzaW5nbGUgVXNlciBjb25zZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJDb25zZW50SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBVc2VyIGNvbnNlbnQuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtVc2VyQ29uc2VudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlciBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVVc2VyQ29uc2VudCh1c2VyQ29uc2VudElkOiBVVUlELCByZXF1ZXN0OiBVc2VyQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbnNlbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQ29uc2VudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW5rIGFuIGV4dGVybmFsIHVzZXIgZnJvbSBhIDNyZCBwYXJ0eSBpZGVudGl0eSBwcm92aWRlciB0byBhIEZ1c2lvbkF1dGggdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyTGlua1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGxpbmsgdGhlIEZ1c2lvbkF1dGggdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVXNlckxpbmsocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlckxpbmtSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9saW5rJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHdlYmhvb2suIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgd2ViaG9vaywgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB3ZWJob29rSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB3ZWJob29rLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7V2ViaG9va1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgd2ViaG9vay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVXZWJob29rKHdlYmhvb2tJZDogVVVJRCwgcmVxdWVzdDogV2ViaG9va1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJob29rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHdlYmhvb2tJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWFjdGl2YXRlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIEZ1c2lvbkF1dGggUmVhY3Rvci5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZVJlYWN0b3IoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZVVzZXIodXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIHVzZXIgYWN0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlYWN0aXZhdGVVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgdXNlcnMgd2l0aCB0aGUgZ2l2ZW4gaWRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHVzZXJJZHMgVGhlIGlkcyBvZiB0aGUgdXNlcnMgdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVhY3RpdmF0ZVVzZXJzQnlJZHMsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgZGVhY3RpdmF0ZVVzZXJzKHVzZXJJZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyRGVsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2J1bGsnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkcylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2RyeVJ1bicsIGZhbHNlKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaGFyZERlbGV0ZScsIGZhbHNlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgdXNlcnMgd2l0aCB0aGUgZ2l2ZW4gaWRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHVzZXJJZHMgVGhlIGlkcyBvZiB0aGUgdXNlcnMgdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBkZWFjdGl2YXRlVXNlcnNCeUlkcyh1c2VySWRzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckRlbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9idWxrJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZHMpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdkcnlSdW4nLCBmYWxzZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2hhcmREZWxldGUnLCBmYWxzZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgQVBJIGtleSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUgYXV0aGVudGljYXRpb24gQVBJIGtleSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUFQSUtleShrZXlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFyZCBkZWxldGVzIGFuIGFwcGxpY2F0aW9uLiBUaGlzIGlzIGEgZGFuZ2Vyb3VzIG9wZXJhdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG1vc3QgY2lyY3Vtc3RhbmNlcy4gVGhpcyB3aWxsXG4gICAqIGRlbGV0ZSB0aGUgYXBwbGljYXRpb24sIGFueSByZWdpc3RyYXRpb25zIGZvciB0aGF0IGFwcGxpY2F0aW9uLCBtZXRyaWNzIGFuZCByZXBvcnRzIGZvciB0aGUgYXBwbGljYXRpb24sIGFsbCB0aGVcbiAgICogcm9sZXMgZm9yIHRoZSBhcHBsaWNhdGlvbiwgYW5kIGFueSBvdGhlciBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXBwbGljYXRpb24uIFRoaXMgb3BlcmF0aW9uIGNvdWxkIHRha2UgYSB2ZXJ5XG4gICAqIGxvbmcgdGltZSwgZGVwZW5kaW5nIG9uIHRoZSBhbW91bnQgb2YgZGF0YSBpbiB5b3VyIGRhdGFiYXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFyZCBkZWxldGVzIGFuIGFwcGxpY2F0aW9uIHJvbGUuIFRoaXMgaXMgYSBkYW5nZXJvdXMgb3BlcmF0aW9uIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbW9zdCBjaXJjdW1zdGFuY2VzLiBUaGlzXG4gICAqIHBlcm1hbmVudGx5IHJlbW92ZXMgdGhlIGdpdmVuIHJvbGUgZnJvbSBhbGwgdXNlcnMgdGhhdCBoYWQgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIHJvbGUgYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSByb2xlSWQgVGhlIElkIG9mIHRoZSByb2xlIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlQXBwbGljYXRpb25Sb2xlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJvbGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicm9sZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocm9sZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBjb25uZWN0b3IgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25uZWN0b3JJZCBUaGUgSWQgb2YgdGhlIGNvbm5lY3RvciB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUNvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbm5lY3RvcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBjb25zZW50IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29uc2VudElkIFRoZSBJZCBvZiB0aGUgY29uc2VudCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUNvbnNlbnQoY29uc2VudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgZW1haWwgdGVtcGxhdGUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIEVudGl0eSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRW50aXR5KGVudGl0eUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gRW50aXR5IEdyYW50IGZvciB0aGUgZ2l2ZW4gVXNlciBvciBFbnRpdHkuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgdGhhdCB0aGUgRW50aXR5IEdyYW50IGlzIGJlaW5nIGRlbGV0ZWQgZm9yLlxuICAgKiBAcGFyYW0ge1VVSUR9IHJlY2lwaWVudEVudGl0eUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBFbnRpdHkgdGhhdCB0aGUgRW50aXR5IEdyYW50IGlzIGZvci5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIFVzZXIgdGhhdCB0aGUgRW50aXR5IEdyYW50IGlzIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRW50aXR5R3JhbnQoZW50aXR5SWQ6IFVVSUQsIHJlY2lwaWVudEVudGl0eUlkOiBVVUlELCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwiZ3JhbnRcIilcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlY2lwaWVudEVudGl0eUlkJywgcmVjaXBpZW50RW50aXR5SWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIEVudGl0eSBUeXBlIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IFR5cGUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXJkIGRlbGV0ZXMgYSBwZXJtaXNzaW9uLiBUaGlzIGlzIGEgZGFuZ2Vyb3VzIG9wZXJhdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG1vc3QgY2lyY3Vtc3RhbmNlcy4gVGhpc1xuICAgKiBwZXJtYW5lbnRseSByZW1vdmVzIHRoZSBnaXZlbiBwZXJtaXNzaW9uIGZyb20gYWxsIGdyYW50cyB0aGF0IGhhZCBpdC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBlbnRpdHlUeXBlIHRoZSB0aGUgcGVybWlzc2lvbiBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHBlcm1pc3Npb25JZCBUaGUgSWQgb2YgdGhlIHBlcm1pc3Npb24gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbnRpdHlUeXBlUGVybWlzc2lvbihlbnRpdHlUeXBlSWQ6IFVVSUQsIHBlcm1pc3Npb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJwZXJtaXNzaW9uXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChwZXJtaXNzaW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGZvcm0gZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmb3JtSWQgVGhlIElkIG9mIHRoZSBmb3JtIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRm9ybShmb3JtSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZm9ybUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBmb3JtIGZpZWxkIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmllbGRJZCBUaGUgSWQgb2YgdGhlIGZvcm0gZmllbGQgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVGb3JtRmllbGQoZmllbGRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybS9maWVsZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmaWVsZElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBncm91cCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgVGhlIElkIG9mIHRoZSBncm91cCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUdyb3VwKGdyb3VwSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGdyb3VwSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdXNlcnMgYXMgbWVtYmVycyBvZiBhIGdyb3VwLlxuICAgKlxuICAgKiBAcGFyYW0ge01lbWJlckRlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIG1lbWJlciByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHJlbW92ZSBtZW1iZXJzIHRvIHRoZSBncm91cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlR3JvdXBNZW1iZXJzKHJlcXVlc3Q6IE1lbWJlckRlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwL21lbWJlcicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlwQWNjZXNzQ29udHJvbExpc3RJZCBUaGUgSWQgb2YgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3QgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVJUEFjY2Vzc0NvbnRyb2xMaXN0KGlwQWNjZXNzQ29udHJvbExpc3RJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlwQWNjZXNzQ29udHJvbExpc3RJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgVGhlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlciB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUlkZW50aXR5UHJvdmlkZXIoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGtleSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUga2V5IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlS2V5KGtleUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGxhbWJkYSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGxhbWJkYUlkIFRoZSBJZCBvZiB0aGUgbGFtYmRhIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlTGFtYmRhKGxhbWJkYUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobGFtYmRhSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzYWdlVGVtcGxhdGVJZCBUaGUgSWQgb2YgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVNZXNzYWdlVGVtcGxhdGUobWVzc2FnZVRlbXBsYXRlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2FnZVRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIG1lc3NlbmdlciBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NlbmdlcklkIFRoZSBJZCBvZiB0aGUgbWVzc2VuZ2VyIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzZW5nZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2VuZ2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhcmQgZGVsZXRlcyBhIGN1c3RvbSBPQXV0aCBzY29wZS5cbiAgICogT0F1dGggd29ya2Zsb3dzIHRoYXQgYXJlIHN0aWxsIHJlcXVlc3RpbmcgdGhlIGRlbGV0ZWQgT0F1dGggc2NvcGUgbWF5IGZhaWwgZGVwZW5kaW5nIG9uIHRoZSBhcHBsaWNhdGlvbidzIHVua25vd24gc2NvcGUgcG9saWN5LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSBPQXV0aCBzY29wZSBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHNjb3BlSWQgVGhlIElkIG9mIHRoZSBPQXV0aCBzY29wZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZU9BdXRoU2NvcGUoYXBwbGljYXRpb25JZDogVVVJRCwgc2NvcGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwic2NvcGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHNjb3BlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgcmVnaXN0cmF0aW9uIGZvciB0aGUgZ2l2ZW4gdXNlciBhbmQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB3aG9zZSByZWdpc3RyYXRpb24gaXMgYmVpbmcgZGVsZXRlZC5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gcmVtb3ZlIHRoZSByZWdpc3RyYXRpb24gZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVSZWdpc3RyYXRpb24odXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGdpdmVuIHVzZXIgYW5kIGFwcGxpY2F0aW9uIGFsb25nIHdpdGggdGhlIGdpdmVuIEpTT04gYm9keSB0aGF0IGNvbnRhaW5zIHRoZSBldmVudCBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHdob3NlIHJlZ2lzdHJhdGlvbiBpcyBiZWluZyBkZWxldGVkLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byByZW1vdmUgdGhlIHJlZ2lzdHJhdGlvbiBmb3IuXG4gICAqIEBwYXJhbSB7UmVnaXN0cmF0aW9uRGVsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBib2R5IHRoYXQgY29udGFpbnMgdGhlIGV2ZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVSZWdpc3RyYXRpb25XaXRoUmVxdWVzdCh1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IFJlZ2lzdHJhdGlvbkRlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdGVuYW50IGJhc2VkIG9uIHRoZSBnaXZlbiBJZCBvbiB0aGUgVVJMLiBUaGlzIHBlcm1hbmVudGx5IGRlbGV0ZXMgYWxsIGluZm9ybWF0aW9uLCBtZXRyaWNzLCByZXBvcnRzIGFuZCBkYXRhIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgdGVuYW50IGFuZCBldmVyeXRoaW5nIHVuZGVyIHRoZSB0ZW5hbnQgKGFwcGxpY2F0aW9ucywgdXNlcnMsIGV0YykuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVUZW5hbnQodGVuYW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdGVuYW50IGZvciB0aGUgZ2l2ZW4gSWQgYXN5bmNocm9ub3VzbHkuXG4gICAqIFRoaXMgbWV0aG9kIGlzIGhlbHBmdWwgaWYgeW91IGRvIG5vdCB3YW50IHRvIHdhaXQgZm9yIHRoZSBkZWxldGUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVGVuYW50QXN5bmModGVuYW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FzeW5jJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdGVuYW50IGJhc2VkIG9uIHRoZSBnaXZlbiByZXF1ZXN0IChzZW50IHRvIHRoZSBBUEkgYXMgSlNPTikuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyBhbGwgaW5mb3JtYXRpb24sIG1ldHJpY3MsIHJlcG9ydHMgYW5kIGRhdGEgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSB0ZW5hbnQgYW5kIGV2ZXJ5dGhpbmcgdW5kZXIgdGhlIHRlbmFudCAoYXBwbGljYXRpb25zLCB1c2VycywgZXRjKS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudCB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7VGVuYW50RGVsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gZGVsZXRlIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVUZW5hbnRXaXRoUmVxdWVzdCh0ZW5hbnRJZDogVVVJRCwgcmVxdWVzdDogVGVuYW50RGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHRoZW1lIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGhlbWVJZCBUaGUgSWQgb2YgdGhlIHRoZW1lIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVGhlbWUodGhlbWVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGhlbWVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciBmb3IgdGhlIGdpdmVuIElkLiBUaGlzIHBlcm1hbmVudGx5IGRlbGV0ZXMgYWxsIGluZm9ybWF0aW9uLCBtZXRyaWNzLCByZXBvcnRzIGFuZCBkYXRhIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaGFyZERlbGV0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgYWN0aW9uIGZvciB0aGUgZ2l2ZW4gSWQuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyB0aGUgdXNlciBhY3Rpb24gYW5kIGFsc28gYW55IGhpc3RvcnkgYW5kIGxvZ3Mgb2ZcbiAgICogdGhlIGFjdGlvbiBiZWluZyBhcHBsaWVkIHRvIGFueSB1c2Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciBhY3Rpb24gcmVhc29uIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvblJlYXNvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gcmVhc29uIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVXNlckFjdGlvblJlYXNvbih1c2VyQWN0aW9uUmVhc29uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBleGlzdGluZyBsaW5rIHRoYXQgaGFzIGJlZW4gbWFkZSBmcm9tIGEgM3JkIHBhcnR5IGlkZW50aXR5IHByb3ZpZGVyIHRvIGEgRnVzaW9uQXV0aCB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aXR5UHJvdmlkZXJVc2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgdXNlciBpbiB0aGUgM3JkIHBhcnR5IGlkZW50aXR5IHByb3ZpZGVyIHRvIHVubGluay5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCB1c2VyIHRvIHVubGluay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+fVxuICAgKi9cbiAgZGVsZXRlVXNlckxpbmsoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCBpZGVudGl0eVByb3ZpZGVyVXNlcklkOiBzdHJpbmcsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbGluaycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZGVudGl0eVByb3ZpZGVySWQnLCBpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZGVudGl0eVByb3ZpZGVyVXNlcklkJywgaWRlbnRpdHlQcm92aWRlclVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciBiYXNlZCBvbiB0aGUgZ2l2ZW4gcmVxdWVzdCAoc2VudCB0byB0aGUgQVBJIGFzIEpTT04pLiBUaGlzIHBlcm1hbmVudGx5IGRlbGV0ZXMgYWxsIGluZm9ybWF0aW9uLCBtZXRyaWNzLCByZXBvcnRzIGFuZCBkYXRhIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGRlbGV0ZSAocmVxdWlyZWQpLlxuICAgKiBAcGFyYW0ge1VzZXJEZWxldGVTaW5nbGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBkZWxldGUgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJXaXRoUmVxdWVzdCh1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJEZWxldGVTaW5nbGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VycyB3aXRoIHRoZSBnaXZlbiBpZHMsIG9yIHVzZXJzIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBKU09OIHF1ZXJ5IG9yIHF1ZXJ5U3RyaW5nLlxuICAgKiBUaGUgb3JkZXIgb2YgcHJlZmVyZW5jZSBpcyBpZHMsIHF1ZXJ5IGFuZCB0aGVuIHF1ZXJ5U3RyaW5nLCBpdCBpcyByZWNvbW1lbmRlZCB0byBvbmx5IHByb3ZpZGUgb25lIG9mIHRoZSB0aHJlZSBmb3IgdGhlIHJlcXVlc3QuXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBkZWFjdGl2YXRlIG9yIHBlcm1hbmVudGx5IGRlbGV0ZSAoaGFyZC1kZWxldGUpIHVzZXJzIGJhc2VkIHVwb24gdGhlIGhhcmREZWxldGUgYm9vbGVhbiBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKiBVc2luZyB0aGUgZHJ5UnVuIHBhcmFtZXRlciB5b3UgbWF5IGFsc28gcmVxdWVzdCB0aGUgcmVzdWx0IG9mIHRoZSBhY3Rpb24gd2l0aG91dCBhY3R1YWxseSBkZWxldGluZyBvciBkZWFjdGl2YXRpbmcgYW55IHVzZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VzZXJEZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSBVc2VyRGVsZXRlUmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVsZXRlVXNlcnNCeVF1ZXJ5LCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIGRlbGV0ZVVzZXJzKHJlcXVlc3Q6IFVzZXJEZWxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckRlbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9idWxrJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VycyB3aXRoIHRoZSBnaXZlbiBpZHMsIG9yIHVzZXJzIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBKU09OIHF1ZXJ5IG9yIHF1ZXJ5U3RyaW5nLlxuICAgKiBUaGUgb3JkZXIgb2YgcHJlZmVyZW5jZSBpcyBpZHMsIHF1ZXJ5IGFuZCB0aGVuIHF1ZXJ5U3RyaW5nLCBpdCBpcyByZWNvbW1lbmRlZCB0byBvbmx5IHByb3ZpZGUgb25lIG9mIHRoZSB0aHJlZSBmb3IgdGhlIHJlcXVlc3QuXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBkZWFjdGl2YXRlIG9yIHBlcm1hbmVudGx5IGRlbGV0ZSAoaGFyZC1kZWxldGUpIHVzZXJzIGJhc2VkIHVwb24gdGhlIGhhcmREZWxldGUgYm9vbGVhbiBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKiBVc2luZyB0aGUgZHJ5UnVuIHBhcmFtZXRlciB5b3UgbWF5IGFsc28gcmVxdWVzdCB0aGUgcmVzdWx0IG9mIHRoZSBhY3Rpb24gd2l0aG91dCBhY3R1YWxseSBkZWxldGluZyBvciBkZWFjdGl2YXRpbmcgYW55IHVzZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VzZXJEZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSBVc2VyRGVsZXRlUmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBkZWxldGVVc2Vyc0J5UXVlcnkocmVxdWVzdDogVXNlckRlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyRGVsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2J1bGsnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIFdlYkF1dGhuIGNyZWRlbnRpYWwgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZCBUaGUgSWQgb2YgdGhlIFdlYkF1dGhuIGNyZWRlbnRpYWwgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVXZWJBdXRobkNyZWRlbnRpYWwoaWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB3ZWJob29rIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0lkIFRoZSBJZCBvZiB0aGUgd2ViaG9vayB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHdlYmhvb2tJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgVXNlciBmb3Igd2hpY2ggeW91J3JlIGRpc2FibGluZyB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kSWQgVGhlIHR3by1mYWN0b3IgbWV0aG9kIGlkZW50aWZpZXIgeW91IHdpc2ggdG8gZGlzYWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgdHdvLWZhY3RvciBjb2RlIHVzZWQgdmVyaWZ5IHRoZSB0aGUgY2FsbGVyIGtub3dzIHRoZSB0d28tZmFjdG9yIHNlY3JldC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGlzYWJsZVR3b0ZhY3Rvcih1c2VySWQ6IFVVSUQsIG1ldGhvZElkOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ21ldGhvZElkJywgbWV0aG9kSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdjb2RlJywgY29kZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIHVzZXIgdXNpbmcgYSBKU09OIGJvZHkgcmF0aGVyIHRoYW4gVVJMIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgVXNlciBmb3Igd2hpY2ggeW91J3JlIGRpc2FibGluZyB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvckRpc2FibGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IGluZm9ybWF0aW9uIHRoYXQgY29udGFpbnMgdGhlIGNvZGUgYW5kIG1ldGhvZElkIGFsb25nIHdpdGggYW55IGV2ZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkaXNhYmxlVHdvRmFjdG9yV2l0aFJlcXVlc3QodXNlcklkOiBVVUlELCByZXF1ZXN0OiBUd29GYWN0b3JEaXNhYmxlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZW5hYmxlIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yUmVxdWVzdH0gcmVxdWVzdCBUaGUgdHdvLWZhY3RvciBlbmFibGUgcmVxdWVzdCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIGVuYWJsZVR3b0ZhY3Rvcih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFR3b0ZhY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2VzIGFuIE9BdXRoIGF1dGhvcml6YXRpb24gY29kZSBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKiBNYWtlcyBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgZnJvbSB0aGUgQXV0aG9yaXplIGVuZHBvaW50IGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIFRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgb24gdGhlIC9vYXV0aDIvYXV0aG9yaXplIHJlc3BvbnNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS5cbiAgICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiBCYXNpYyBBdXRob3JpemF0aW9uIGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHJlcXVpcmVkIGlmIGNsaWVudCBhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVkaXJlY3RfdXJpIFRoZSBVUkkgdG8gcmVkaXJlY3QgdG8gdXBvbiBhIHN1Y2Nlc3NmdWwgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlT0F1dGhDb2RlRm9yQWNjZXNzVG9rZW4oY29kZTogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCByZWRpcmVjdF91cmk6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgnY29kZScsIGNvZGUpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAnYXV0aG9yaXphdGlvbl9jb2RlJyk7XG4gICAgYm9keS5hcHBlbmQoJ3JlZGlyZWN0X3VyaScsIHJlZGlyZWN0X3VyaSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZXMgYW4gT0F1dGggYXV0aG9yaXphdGlvbiBjb2RlIGFuZCBjb2RlX3ZlcmlmaWVyIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqIE1ha2VzIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIGF1dGhvcml6YXRpb24gY29kZSByZXR1cm5lZCBmcm9tIHRoZSBBdXRob3JpemUgZW5kcG9pbnQgYW5kIGEgY29kZV92ZXJpZmllciBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIG9uIHRoZSAvb2F1dGgyL2F1dGhvcml6ZSByZXNwb25zZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHByb3ZpZGVkLlxuICAgKiAgICBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIEJhc2ljIEF1dGhvcml6YXRpb24gaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkgaW5zdGVhZCBvZiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdF91cmkgVGhlIFVSSSB0byByZWRpcmVjdCB0byB1cG9uIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZV92ZXJpZmllciBUaGUgcmFuZG9tIHN0cmluZyBnZW5lcmF0ZWQgcHJldmlvdXNseS4gV2lsbCBiZSBjb21wYXJlZCB3aXRoIHRoZSBjb2RlX2NoYWxsZW5nZSBzZW50IHByZXZpb3VzbHksIHdoaWNoIGFsbG93cyB0aGUgT0F1dGggcHJvdmlkZXIgdG8gYXV0aGVudGljYXRlIHlvdXIgYXBwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VPQXV0aENvZGVGb3JBY2Nlc3NUb2tlblVzaW5nUEtDRShjb2RlOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHJlZGlyZWN0X3VyaTogc3RyaW5nLCBjb2RlX3ZlcmlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NvZGUnLCBjb2RlKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ2F1dGhvcml6YXRpb25fY29kZScpO1xuICAgIGJvZHkuYXBwZW5kKCdyZWRpcmVjdF91cmknLCByZWRpcmVjdF91cmkpO1xuICAgIGJvZHkuYXBwZW5kKCdjb2RlX3ZlcmlmaWVyJywgY29kZV92ZXJpZmllcik7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBhIFJlZnJlc2ggVG9rZW4gZm9yIGFuIEFjY2VzcyBUb2tlbi5cbiAgICogSWYgeW91IHdpbGwgYmUgdXNpbmcgdGhlIFJlZnJlc2ggVG9rZW4gR3JhbnQsIHlvdSB3aWxsIG1ha2UgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgdXNlcuKAmXMgcmVmcmVzaCB0b2tlbiBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaF90b2tlbiBUaGUgcmVmcmVzaCB0b2tlbiB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0byBleGNoYW5nZSBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS4gVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgaXMgcHJvdmlkZWQuXG4gICAqICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gQmFzaWMgQXV0aG9yaXphdGlvbiBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGlzIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IChPcHRpb25hbCkgVGhlIGNsaWVudCBzZWNyZXQuIFRoaXMgdmFsdWUgbWF5IG9wdGlvbmFsbHkgYmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYm9keSBpbnN0ZWFkIG9mIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlIChPcHRpb25hbCkgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgYW5kIGlmIG9taXR0ZWQsIHRoZSBzYW1lIHNjb3BlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIGF1dGhvcml6YXRpb24gcmVxdWVzdCB3aWxsIGJlIHVzZWQuIElmIHByb3ZpZGVkIHRoZSBzY29wZXMgbXVzdCBtYXRjaCB0aG9zZSByZXF1ZXN0ZWQgZHVyaW5nIHRoZSBpbml0aWFsIGF1dGhvcml6YXRpb24gcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJfY29kZSAoT3B0aW9uYWwpIFRoZSBlbmQtdXNlciB2ZXJpZmljYXRpb24gY29kZS4gVGhpcyBjb2RlIGlzIHJlcXVpcmVkIGlmIHVzaW5nIHRoaXMgZW5kcG9pbnQgdG8gYXBwcm92ZSB0aGUgRGV2aWNlIEF1dGhvcml6YXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBleGNoYW5nZVJlZnJlc2hUb2tlbkZvckFjY2Vzc1Rva2VuKHJlZnJlc2hfdG9rZW46IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgc2NvcGU6IHN0cmluZywgdXNlcl9jb2RlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ3JlZnJlc2hfdG9rZW4nLCByZWZyZXNoX3Rva2VuKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ3JlZnJlc2hfdG9rZW4nKTtcbiAgICBib2R5LmFwcGVuZCgnc2NvcGUnLCBzY29wZSk7XG4gICAgYm9keS5hcHBlbmQoJ3VzZXJfY29kZScsIHVzZXJfY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBhIHJlZnJlc2ggdG9rZW4gZm9yIGEgbmV3IEpXVC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWZyZXNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVmcmVzaCByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RSZWZyZXNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIGV4Y2hhbmdlUmVmcmVzaFRva2VuRm9ySldUKHJlcXVlc3Q6IFJlZnJlc2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RSZWZyZXNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8SldUUmVmcmVzaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBVc2VyIENyZWRlbnRpYWxzIGZvciBhIFRva2VuLlxuICAgKiBJZiB5b3Ugd2lsbCBiZSB1c2luZyB0aGUgUmVzb3VyY2UgT3duZXIgUGFzc3dvcmQgQ3JlZGVudGlhbCBHcmFudCwgeW91IHdpbGwgbWFrZSBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSB1c2Vy4oCZcyBlbWFpbCBhbmQgcGFzc3dvcmQgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJuYW1lIFRoZSBsb2dpbiBpZGVudGlmaWVyIG9mIHRoZSB1c2VyLiBUaGUgbG9naW4gaWRlbnRpZmllciBjYW4gYmUgZWl0aGVyIHRoZSBlbWFpbCBvciB0aGUgdXNlcm5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCBUaGUgdXNlcuKAmXMgcGFzc3dvcmQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBwcm92aWRlZC5cbiAgICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiBCYXNpYyBBdXRob3JpemF0aW9uIGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5IGluc3RlYWQgb2YgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKE9wdGlvbmFsKSBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgaWYgb21pdHRlZCwgdGhlIHNhbWUgc2NvcGUgcmVxdWVzdGVkIGR1cmluZyB0aGUgYXV0aG9yaXphdGlvbiByZXF1ZXN0IHdpbGwgYmUgdXNlZC4gSWYgcHJvdmlkZWQgdGhlIHNjb3BlcyBtdXN0IG1hdGNoIHRob3NlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIGluaXRpYWwgYXV0aG9yaXphdGlvbiByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIChPcHRpb25hbCkgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLiBUaGlzIGNvZGUgaXMgcmVxdWlyZWQgaWYgdXNpbmcgdGhpcyBlbmRwb2ludCB0byBhcHByb3ZlIHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlVXNlckNyZWRlbnRpYWxzRm9yQWNjZXNzVG9rZW4odXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgc2NvcGU6IHN0cmluZywgdXNlcl9jb2RlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ3VzZXJuYW1lJywgdXNlcm5hbWUpO1xuICAgIGJvZHkuYXBwZW5kKCdwYXNzd29yZCcsIHBhc3N3b3JkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ3Bhc3N3b3JkJyk7XG4gICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgc2NvcGUpO1xuICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQmVnaW5zIHRoZSBmb3Jnb3QgcGFzc3dvcmQgc2VxdWVuY2UsIHdoaWNoIGtpY2tzIG9mZiBhbiBlbWFpbCB0byB0aGUgdXNlciBzbyB0aGF0IHRoZXkgY2FuIHJlc2V0IHRoZWlyIHBhc3N3b3JkLlxuICAgKlxuICAgKiBAcGFyYW0ge0ZvcmdvdFBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBzbyB0aGF0IHRoZXkgY2FuIGJlIGVtYWlsZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcmdvdFBhc3N3b3JkUmVzcG9uc2U+Pn1cbiAgICovXG4gIGZvcmdvdFBhc3N3b3JkKHJlcXVlc3Q6IEZvcmdvdFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9yZ290UGFzc3dvcmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3Jnb3RQYXNzd29yZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mb3Jnb3QtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG5ldyBFbWFpbCBWZXJpZmljYXRpb24gSWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBWZXJpZnkgRW1haWwgQVBJLiBUaGlzIEFQSSB3aWxsIG5vdCBhdHRlbXB0IHRvIHNlbmQgYW5cbiAgICogZW1haWwgdG8gdGhlIFVzZXIuIFRoaXMgQVBJIG1heSBiZSB1c2VkIHRvIGNvbGxlY3QgdGhlIHZlcmlmaWNhdGlvbklkIGZvciB1c2Ugd2l0aCBhIHRoaXJkIHBhcnR5IHN5c3RlbS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZUVtYWlsVmVyaWZpY2F0aW9uSWQoZW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlFbWFpbFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzZW5kVmVyaWZ5RW1haWwnLCBmYWxzZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcgUlNBIG9yIEVDIGtleSBwYWlyIG9yIGFuIEhNQUMgc2VjcmV0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUga2V5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7S2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXkvZ2VuZXJhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IEFwcGxpY2F0aW9uIFJlZ2lzdHJhdGlvbiBWZXJpZmljYXRpb24gSWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBWZXJpZnkgUmVnaXN0cmF0aW9uIEFQSS4gVGhpcyBBUEkgd2lsbCBub3QgYXR0ZW1wdCB0byBzZW5kIGFuXG4gICAqIGVtYWlsIHRvIHRoZSBVc2VyLiBUaGlzIEFQSSBtYXkgYmUgdXNlZCB0byBjb2xsZWN0IHRoZSB2ZXJpZmljYXRpb25JZCBmb3IgdXNlIHdpdGggYSB0aGlyZCBwYXJ0eSBzeXN0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gYmUgdmVyaWZpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZVJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkKGVtYWlsOiBzdHJpbmcsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc2VuZFZlcmlmeVBhc3N3b3JkRW1haWwnLCBmYWxzZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0d28tZmFjdG9yIHJlY292ZXJ5IGNvZGVzIGZvciBhIHVzZXIuIEdlbmVyYXRpbmcgdHdvLWZhY3RvciByZWNvdmVyeSBjb2RlcyB3aWxsIGludmFsaWRhdGUgYW55IGV4aXN0aW5nIHJlY292ZXJ5IGNvZGVzLiBcbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGdlbmVyYXRlIG5ldyBUd28gRmFjdG9yIHJlY292ZXJ5IGNvZGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVUd29GYWN0b3JSZWNvdmVyeUNvZGVzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3IvcmVjb3ZlcnktY29kZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIFR3byBGYWN0b3Igc2VjcmV0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgVXNlci4gVGhlIHJlc3BvbnNlIHdpbGwgY29udGFpblxuICAgKiBib3RoIHRoZSBzZWNyZXQgYW5kIGEgQmFzZTMyIGVuY29kZWQgZm9ybSBvZiB0aGUgc2VjcmV0IHdoaWNoIGNhbiBiZSBzaG93biB0byBhIFVzZXIgd2hlbiB1c2luZyBhIDIgU3RlcCBBdXRoZW50aWNhdGlvblxuICAgKiBhcHBsaWNhdGlvbiBzdWNoIGFzIEdvb2dsZSBBdXRoZW50aWNhdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVUd29GYWN0b3JTZWNyZXQoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWNyZXRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlY3JldCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgVHdvIEZhY3RvciBzZWNyZXQgdGhhdCBjYW4gYmUgdXNlZCB0byBlbmFibGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSBVc2VyLiBUaGUgcmVzcG9uc2Ugd2lsbCBjb250YWluXG4gICAqIGJvdGggdGhlIHNlY3JldCBhbmQgYSBCYXNlMzIgZW5jb2RlZCBmb3JtIG9mIHRoZSBzZWNyZXQgd2hpY2ggY2FuIGJlIHNob3duIHRvIGEgVXNlciB3aGVuIHVzaW5nIGEgMiBTdGVwIEF1dGhlbnRpY2F0aW9uXG4gICAqIGFwcGxpY2F0aW9uIHN1Y2ggYXMgR29vZ2xlIEF1dGhlbnRpY2F0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VjcmV0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlVHdvRmFjdG9yU2VjcmV0VXNpbmdKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxTZWNyZXRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlY3JldCcpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGxvZ2luIHZpYSB0aGlyZC1wYXJ0aWVzIGluY2x1ZGluZyBTb2NpYWwgbG9naW4sIGV4dGVybmFsIE9BdXRoIGFuZCBPcGVuSUQgQ29ubmVjdCwgYW5kIG90aGVyXG4gICAqIGxvZ2luIHN5c3RlbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgdGhpcmQtcGFydHkgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGZyb20gdGhlIHRoaXJkLXBhcnR5IGxvZ2luXG4gICAqICAgIHByb3ZpZGVycyB0aGF0IEZ1c2lvbkF1dGggdXNlcyB0byByZWNvbmNpbGUgdGhlIHVzZXIncyBhY2NvdW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICBpZGVudGl0eVByb3ZpZGVyTG9naW4ocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgUlNBIG9yIEVDIGtleSBwYWlyIG9yIGFuIEhNQUMgc2VjcmV0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUga2V5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7S2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj59XG4gICAqL1xuICBpbXBvcnRLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5L2ltcG9ydCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVsayBpbXBvcnRzIHJlZnJlc2ggdG9rZW5zLiBUaGlzIHJlcXVlc3QgcGVyZm9ybXMgbWluaW1hbCB2YWxpZGF0aW9uIGFuZCBydW5zIGJhdGNoIGluc2VydHMgb2YgcmVmcmVzaCB0b2tlbnMgd2l0aCB0aGVcbiAgICogZXhwZWN0YXRpb24gdGhhdCBlYWNoIHRva2VuIHJlcHJlc2VudHMgYSB1c2VyIHRoYXQgYWxyZWFkeSBleGlzdHMgYW5kIGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIEZ1c2lvbkF1dGhcbiAgICogQXBwbGljYXRpb24uIFRoaXMgaXMgZG9uZSB0byBpbmNyZWFzZXMgdGhlIGluc2VydCBwZXJmb3JtYW5jZS5cbiAgICogXG4gICAqIFRoZXJlZm9yZSwgaWYgeW91IGVuY291bnRlciBhbiBlcnJvciBkdWUgdG8gYSBkYXRhYmFzZSBrZXkgdmlvbGF0aW9uLCB0aGUgcmVzcG9uc2Ugd2lsbCBsaWtlbHkgb2ZmZXIgYSBnZW5lcmljXG4gICAqIGV4cGxhbmF0aW9uLiBJZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yLCB5b3UgbWF5IG9wdGlvbmFsbHkgZW5hYmxlIGFkZGl0aW9uYWwgdmFsaWRhdGlvbiB0byByZWNlaXZlIGEgSlNPTiByZXNwb25zZVxuICAgKiBib2R5IHdpdGggc3BlY2lmaWMgdmFsaWRhdGlvbiBlcnJvcnMuIFRoaXMgd2lsbCBzbG93IHRoZSByZXF1ZXN0IGRvd24gYnV0IHdpbGwgYWxsb3cgeW91IHRvIGlkZW50aWZ5IHRoZSBjYXVzZSBvZlxuICAgKiB0aGUgZmFpbHVyZS4gU2VlIHRoZSB2YWxpZGF0ZURiQ29uc3RyYWludHMgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVmcmVzaFRva2VuSW1wb3J0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRoZSByZWZyZXNoIHRva2VucyB0byBpbXBvcnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGltcG9ydFJlZnJlc2hUb2tlbnMocmVxdWVzdDogUmVmcmVzaFRva2VuSW1wb3J0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWZyZXNoLXRva2VuL2ltcG9ydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1bGsgaW1wb3J0cyB1c2Vycy4gVGhpcyByZXF1ZXN0IHBlcmZvcm1zIG1pbmltYWwgdmFsaWRhdGlvbiBhbmQgcnVucyBiYXRjaCBpbnNlcnRzIG9mIHVzZXJzIHdpdGggdGhlIGV4cGVjdGF0aW9uXG4gICAqIHRoYXQgZWFjaCB1c2VyIGRvZXMgbm90IHlldCBleGlzdCBhbmQgZWFjaCByZWdpc3RyYXRpb24gY29ycmVzcG9uZHMgdG8gYW4gZXhpc3RpbmcgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbi4gVGhpcyBpcyBkb25lIHRvXG4gICAqIGluY3JlYXNlcyB0aGUgaW5zZXJ0IHBlcmZvcm1hbmNlLlxuICAgKiBcbiAgICogVGhlcmVmb3JlLCBpZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yIGR1ZSB0byBhIGRhdGFiYXNlIGtleSB2aW9sYXRpb24sIHRoZSByZXNwb25zZSB3aWxsIGxpa2VseSBvZmZlclxuICAgKiBhIGdlbmVyaWMgZXhwbGFuYXRpb24uIElmIHlvdSBlbmNvdW50ZXIgYW4gZXJyb3IsIHlvdSBtYXkgb3B0aW9uYWxseSBlbmFibGUgYWRkaXRpb25hbCB2YWxpZGF0aW9uIHRvIHJlY2VpdmUgYSBKU09OIHJlc3BvbnNlXG4gICAqIGJvZHkgd2l0aCBzcGVjaWZpYyB2YWxpZGF0aW9uIGVycm9ycy4gVGhpcyB3aWxsIHNsb3cgdGhlIHJlcXVlc3QgZG93biBidXQgd2lsbCBhbGxvdyB5b3UgdG8gaWRlbnRpZnkgdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJlLiBTZWVcbiAgICogdGhlIHZhbGlkYXRlRGJDb25zdHJhaW50cyByZXF1ZXN0IHBhcmFtZXRlci5cbiAgICpcbiAgICogQHBhcmFtIHtJbXBvcnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIHVzZXJzIHRvIGltcG9ydC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgaW1wb3J0VXNlcnMocmVxdWVzdDogSW1wb3J0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9pbXBvcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBXZWJBdXRobiBjcmVkZW50aWFsXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViQXV0aG5DcmVkZW50aWFsSW1wb3J0UmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3IgaW1wb3J0aW5nIHRoZSBjcmVkZW50aWFsXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGltcG9ydFdlYkF1dGhuQ3JlZGVudGlhbChyZXF1ZXN0OiBXZWJBdXRobkNyZWRlbnRpYWxJbXBvcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9pbXBvcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNwZWN0IGFuIGFjY2VzcyB0b2tlbiBpc3N1ZWQgYXMgdGhlIHJlc3VsdCBvZiB0aGUgVXNlciBiYXNlZCBncmFudCBzdWNoIGFzIHRoZSBBdXRob3JpemF0aW9uIENvZGUgR3JhbnQsIEltcGxpY2l0IEdyYW50LCB0aGUgVXNlciBDcmVkZW50aWFscyBHcmFudCBvciB0aGUgUmVmcmVzaCBHcmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBmb3Igd2hpY2ggdGhpcyB0b2tlbiB3YXMgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gVGhlIGFjY2VzcyB0b2tlbiByZXR1cm5lZCBieSB0aGlzIE9BdXRoIHByb3ZpZGVyIGFzIHRoZSByZXN1bHQgb2YgYSBzdWNjZXNzZnVsIGNsaWVudCBjcmVkZW50aWFscyBncmFudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50cm9zcGVjdFJlc3BvbnNlPj59XG4gICAqL1xuICBpbnRyb3NwZWN0QWNjZXNzVG9rZW4oY2xpZW50X2lkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCd0b2tlbicsIHRva2VuKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxJbnRyb3NwZWN0UmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvaW50cm9zcGVjdCcpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3BlY3QgYW4gYWNjZXNzIHRva2VuIGlzc3VlZCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBDbGllbnQgQ3JlZGVudGlhbHMgR3JhbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiBUaGUgYWNjZXNzIHRva2VuIHJldHVybmVkIGJ5IHRoaXMgT0F1dGggcHJvdmlkZXIgYXMgdGhlIHJlc3VsdCBvZiBhIHN1Y2Nlc3NmdWwgY2xpZW50IGNyZWRlbnRpYWxzIGdyYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRyb3NwZWN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGludHJvc3BlY3RDbGllbnRDcmVkZW50aWFsc0FjY2Vzc1Rva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCd0b2tlbicsIHRva2VuKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxJbnRyb3NwZWN0UmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvaW50cm9zcGVjdCcpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlIGEgbmV3IGFjY2VzcyB0b2tlbiAoSldUKSBmb3IgdGhlIHJlcXVlc3RlZCBBcHBsaWNhdGlvbiBhZnRlciBlbnN1cmluZyB0aGUgcHJvdmlkZWQgSldUIGlzIHZhbGlkLiBBIHZhbGlkXG4gICAqIGFjY2VzcyB0b2tlbiBpcyBwcm9wZXJseSBzaWduZWQgYW5kIG5vdCBleHBpcmVkLlxuICAgKiA8cD5cbiAgICogVGhpcyBBUEkgbWF5IGJlIHVzZWQgaW4gYW4gU1NPIGNvbmZpZ3VyYXRpb24gdG8gaXNzdWUgbmV3IHRva2VucyBmb3IgYW5vdGhlciBhcHBsaWNhdGlvbiBhZnRlciB0aGUgdXNlciBoYXNcbiAgICogb2J0YWluZWQgYSB2YWxpZCB0b2tlbiBmcm9tIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIEFwcGxpY2F0aW9uIElkIGZvciB3aGljaCB5b3UgYXJlIHJlcXVlc3RpbmcgYSBuZXcgYWNjZXNzIHRva2VuIGJlIGlzc3VlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaFRva2VuIChPcHRpb25hbCkgQW4gZXhpc3RpbmcgcmVmcmVzaCB0b2tlbiB1c2VkIHRvIHJlcXVlc3QgYSByZWZyZXNoIHRva2VuIGluIGFkZGl0aW9uIHRvIGEgSldUIGluIHRoZSByZXNwb25zZS5cbiAgICogICAgPHA+VGhlIHRhcmdldCBhcHBsaWNhdGlvbiByZXByZXNlbnRlZCBieSB0aGUgYXBwbGljYXRpb25JZCByZXF1ZXN0IHBhcmFtZXRlciBtdXN0IGhhdmUgcmVmcmVzaFxuICAgKiAgICB0b2tlbnMgZW5hYmxlZCBpbiBvcmRlciB0byByZWNlaXZlIGEgcmVmcmVzaCB0b2tlbiBpbiB0aGUgcmVzcG9uc2UuPC9wPlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJc3N1ZVJlc3BvbnNlPj59XG4gICAqL1xuICBpc3N1ZUpXVChhcHBsaWNhdGlvbklkOiBVVUlELCBlbmNvZGVkSldUOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJc3N1ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPElzc3VlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvaXNzdWUnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVmcmVzaFRva2VuJywgcmVmcmVzaFRva2VuKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGVzIGEgdXNlciB0byBGdXNpb25BdXRoLiBcbiAgICogXG4gICAqIFRoaXMgQVBJIG9wdGlvbmFsbHkgcmVxdWlyZXMgYW4gQVBJIGtleS4gU2VlIDxjb2RlPkFwcGxpY2F0aW9uLmxvZ2luQ29uZmlndXJhdGlvbi5yZXF1aXJlQXV0aGVudGljYXRpb248L2NvZGU+LlxuICAgKlxuICAgKiBAcGFyYW0ge0xvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNyZWRlbnRpYWxzIHVzZWQgdG8gbG9nIHRoZW0gaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvZ2luKHJlcXVlc3Q6IExvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIHBpbmcgdG8gRnVzaW9uQXV0aCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgd2FzIGF1dG9tYXRpY2FsbHkgbG9nZ2VkIGludG8gYW4gYXBwbGljYXRpb24uIFdoZW4gdXNpbmdcbiAgICogRnVzaW9uQXV0aCdzIFNTTyBvciB5b3VyIG93biwgeW91IHNob3VsZCBjYWxsIHRoaXMgaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQgaW4gY2VudHJhbGx5LCBidXQgYWNjZXNzZXMgYW5cbiAgICogYXBwbGljYXRpb24gd2hlcmUgdGhleSBubyBsb25nZXIgaGF2ZSBhIHNlc3Npb24uIFRoaXMgaGVscHMgY29ycmVjdGx5IHRyYWNrIGxvZ2luIGNvdW50cywgdGltZXMgYW5kIGhlbHBzIHdpdGhcbiAgICogcmVwb3J0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdGhhdCB3YXMgbG9nZ2VkIGluLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZXkgbG9nZ2VkIGludG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWxsZXJJUEFkZHJlc3MgKE9wdGlvbmFsKSBUaGUgSVAgYWRkcmVzcyBvZiB0aGUgZW5kLXVzZXIgdGhhdCBpcyBsb2dnaW5nIGluLiBJZiBhIG51bGwgdmFsdWUgaXMgcHJvdmlkZWRcbiAgICogICAgdGhlIElQIGFkZHJlc3Mgd2lsbCBiZSB0aGF0IG9mIHRoZSBjbGllbnQgb3IgbGFzdCBwcm94eSB0aGF0IHNlbnQgdGhlIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvZ2luUGluZyh1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQsIGNhbGxlcklQQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dpbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaXBBZGRyZXNzJywgY2FsbGVySVBBZGRyZXNzKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIHBpbmcgdG8gRnVzaW9uQXV0aCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgd2FzIGF1dG9tYXRpY2FsbHkgbG9nZ2VkIGludG8gYW4gYXBwbGljYXRpb24uIFdoZW4gdXNpbmdcbiAgICogRnVzaW9uQXV0aCdzIFNTTyBvciB5b3VyIG93biwgeW91IHNob3VsZCBjYWxsIHRoaXMgaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQgaW4gY2VudHJhbGx5LCBidXQgYWNjZXNzZXMgYW5cbiAgICogYXBwbGljYXRpb24gd2hlcmUgdGhleSBubyBsb25nZXIgaGF2ZSBhIHNlc3Npb24uIFRoaXMgaGVscHMgY29ycmVjdGx5IHRyYWNrIGxvZ2luIGNvdW50cywgdGltZXMgYW5kIGhlbHBzIHdpdGhcbiAgICogcmVwb3J0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0xvZ2luUGluZ1JlcXVlc3R9IHJlcXVlc3QgVGhlIGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlciBjcmVkZW50aWFscyB1c2VkIHRvIGxvZyB0aGVtIGluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICBsb2dpblBpbmdXaXRoUmVxdWVzdChyZXF1ZXN0OiBMb2dpblBpbmdSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExvZ291dCBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZW1vdmUgdGhlIHJlZnJlc2ggdG9rZW4gYW5kIGFjY2VzcyB0b2tlbiBjb29raWVzIGlmIHRoZXkgZXhpc3Qgb24gdGhlXG4gICAqIGNsaWVudCBhbmQgcmV2b2tlIHRoZSByZWZyZXNoIHRva2VuIHN0b3JlZC4gVGhpcyBBUEkgZG9lcyBub3RoaW5nIGlmIHRoZSByZXF1ZXN0IGRvZXMgbm90IGNvbnRhaW4gYW4gYWNjZXNzXG4gICAqIHRva2VuIG9yIHJlZnJlc2ggdG9rZW4gY29va2llcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBnbG9iYWwgV2hlbiB0aGlzIHZhbHVlIGlzIHNldCB0byB0cnVlIGFsbCB0aGUgcmVmcmVzaCB0b2tlbnMgaXNzdWVkIHRvIHRoZSBvd25lciBvZiB0aGVcbiAgICogICAgcHJvdmlkZWQgdG9rZW4gd2lsbCBiZSByZXZva2VkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaFRva2VuIChPcHRpb25hbCkgVGhlIHJlZnJlc2hfdG9rZW4gYXMgYSByZXF1ZXN0IHBhcmFtZXRlciBpbnN0ZWFkIG9mIGNvbWluZyBpbiB2aWEgYSBjb29raWUuXG4gICAqICAgIElmIHByb3ZpZGVkIHRoaXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBjb29raWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGxvZ291dChnbG9iYWw6IGJvb2xlYW4sIHJlZnJlc2hUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9nb3V0JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2dsb2JhbCcsIGdsb2JhbClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlZnJlc2hUb2tlbicsIHJlZnJlc2hUb2tlbilcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBMb2dvdXQgQVBJIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVtb3ZlIHRoZSByZWZyZXNoIHRva2VuIGFuZCBhY2Nlc3MgdG9rZW4gY29va2llcyBpZiB0aGV5IGV4aXN0IG9uIHRoZVxuICAgKiBjbGllbnQgYW5kIHJldm9rZSB0aGUgcmVmcmVzaCB0b2tlbiBzdG9yZWQuIFRoaXMgQVBJIHRha2VzIHRoZSByZWZyZXNoIHRva2VuIGluIHRoZSBKU09OIGJvZHkuXG4gICAqXG4gICAqIEBwYXJhbSB7TG9nb3V0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gbG9nb3V0IHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBsb2dvdXRXaXRoUmVxdWVzdChyZXF1ZXN0OiBMb2dvdXRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9nb3V0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBpZGVudGl0eSBwcm92aWRlciBmb3IgdGhlIGdpdmVuIGRvbWFpbi4gQSAyMDAgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIGRvbWFpbiBpcyBtYW5hZ2VkXG4gICAqIGJ5IGEgcmVnaXN0ZXJlZCBpZGVudGl0eSBwcm92aWRlci4gQSA0MDQgaW5kaWNhdGVzIHRoZSBkb21haW4gaXMgbm90IG1hbmFnZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBvciBlbWFpbCBhZGRyZXNzIHRvIGxvb2t1cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9va3VwUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvb2t1cElkZW50aXR5UHJvdmlkZXIoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvb2t1cFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvb2t1cFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xvb2t1cCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdkb21haW4nLCBkb21haW4pXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIGEgdGVtcG9yYWwgdXNlciBhY3Rpb24gYnkgY2hhbmdpbmcgdGhlIGV4cGlyYXRpb24gb2YgdGhlIGFjdGlvbiBhbmQgb3B0aW9uYWxseSBhZGRpbmcgYSBjb21tZW50IHRvIHRoZVxuICAgKiBhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYWN0aW9uSWQgVGhlIElkIG9mIHRoZSBhY3Rpb24gdG8gbW9kaWZ5LiBUaGlzIGlzIHRlY2huaWNhbGx5IHRoZSB1c2VyIGFjdGlvbiBsb2cgaWQuXG4gICAqIEBwYXJhbSB7QWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vZGlmaWNhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIG1vZGlmeUFjdGlvbihhY3Rpb25JZDogVVVJRCwgcmVxdWVzdDogQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIGxvZ2luIHJlcXVlc3QgdXNpbmcgYSBwYXNzd29yZGxlc3MgY29kZVxuICAgKlxuICAgKiBAcGFyYW0ge1Bhc3N3b3JkbGVzc0xvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY29tcGxldGUgbG9naW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhc3N3b3JkbGVzc0xvZ2luKHJlcXVlc3Q6IFBhc3N3b3JkbGVzc0xvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcGFzc3dvcmRsZXNzL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBhdXRoZW50aWNhdGlvbiBBUEkga2V5IGJ5IGdpdmVuIGlkXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBrZXkuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gYXBpIGtleSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtBUElLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSB0aGUgQVBJS2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hBUElLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEFQSUtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFQSUtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgYXBwbGljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgYXBwbGljYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgYXBwbGljYXRpb24gcm9sZSB3aXRoIHRoZSBnaXZlbiBJZCBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSByb2xlIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcm9sZUlkIFRoZSBJZCBvZiB0aGUgcm9sZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHJvbGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoQXBwbGljYXRpb25Sb2xlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJvbGVJZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJyb2xlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChyb2xlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBjb25uZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgVGhlIElkIG9mIHRoZSBjb25uZWN0b3IgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0Nvbm5lY3RvclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgY29ubmVjdG9yIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQsIHJlcXVlc3Q6IENvbm5lY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbm5lY3RvcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgY29uc2VudCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgVGhlIElkIG9mIHRoZSBjb25zZW50IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoQ29uc2VudChjb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IENvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBlbWFpbCB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW1haWxUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgZW1haWwgdGVtcGxhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogRW1haWxUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBFbnRpdHkgVHlwZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgRW50aXR5IFR5cGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBncm91cCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBncm91cElkIFRoZSBJZCBvZiB0aGUgZ3JvdXAgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0dyb3VwUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBncm91cCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hHcm91cChncm91cElkOiBVVUlELCByZXF1ZXN0OiBHcm91cFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGdyb3VwSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBpZGVudGl0eSBwcm92aWRlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgVGhlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgdXBkYXRlZCBpZGVudGl0eSBwcm92aWRlciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaElkZW50aXR5UHJvdmlkZXIoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCByZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGF2YWlsYWJsZSBpbnRlZ3JhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7SW50ZWdyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGludGVncmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRlZ3JhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEludGVncmF0aW9ucyhyZXF1ZXN0OiBJbnRlZ3JhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludGVncmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SW50ZWdyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2ludGVncmF0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGxhbWJkYSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBsYW1iZGFJZCBUaGUgSWQgb2YgdGhlIGxhbWJkYSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TGFtYmRhUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBsYW1iZGEgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaExhbWJkYShsYW1iZGFJZDogVVVJRCwgcmVxdWVzdDogTGFtYmRhUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobGFtYmRhSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NhZ2VUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBtZXNzYWdlIHRlbXBsYXRlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hNZXNzYWdlVGVtcGxhdGUobWVzc2FnZVRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzYWdlVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIG1lc3NlbmdlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzZW5nZXJJZCBUaGUgSWQgb2YgdGhlIG1lc3NlbmdlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TWVzc2VuZ2VyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBtZXNzZW5nZXIgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaE1lc3NlbmdlcihtZXNzZW5nZXJJZDogVVVJRCwgcmVxdWVzdDogTWVzc2VuZ2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzZW5nZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2VuZ2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBjdXN0b20gT0F1dGggc2NvcGUgd2l0aCB0aGUgZ2l2ZW4gSWQgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB0aGUgT0F1dGggc2NvcGUgYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSBzY29wZUlkIFRoZSBJZCBvZiB0aGUgT0F1dGggc2NvcGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uT0F1dGhTY29wZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgT0F1dGggc2NvcGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaE9BdXRoU2NvcGUoYXBwbGljYXRpb25JZDogVVVJRCwgc2NvcGVJZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25PQXV0aFNjb3BlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25PQXV0aFNjb3BlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25PQXV0aFNjb3BlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJzY29wZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoc2NvcGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBkZWZpbmVkIGluIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgd2hvc2UgcmVnaXN0cmF0aW9uIGlzIGdvaW5nIHRvIGJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7UmVnaXN0cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFJlZ2lzdHJhdGlvbih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFJlZ2lzdHJhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7U3lzdGVtQ29uZmlndXJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgc3lzdGVtIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hTeXN0ZW1Db25maWd1cmF0aW9uKHJlcXVlc3Q6IFN5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtLWNvbmZpZ3VyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgdGVuYW50IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtUZW5hbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHRlbmFudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVGVuYW50KHRlbmFudElkOiBVVUlELCByZXF1ZXN0OiBUZW5hbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHRoZW1lIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRoZW1lSWQgVGhlIElkIG9mIHRoZSB0aGVtZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VGhlbWVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHRoZW1lIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFRoZW1lKHRoZW1lSWQ6IFVVSUQsIHJlcXVlc3Q6IFRoZW1lUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUaGVtZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGhlbWVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VXNlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgdXNlciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFVzZXIodXNlcklkOiBVVUlELCByZXF1ZXN0OiBVc2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgdXNlciBhY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHVzZXIgYWN0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgdXNlciBhY3Rpb24gcmVhc29uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25SZWFzb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlYXNvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgdXNlciBhY3Rpb24gcmVhc29uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVXNlckFjdGlvblJlYXNvbih1c2VyQWN0aW9uUmVhc29uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZWFzb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25SZWFzb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgYSBzaW5nbGUgVXNlciBjb25zZW50IGJ5IElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJDb25zZW50SWQgVGhlIFVzZXIgQ29uc2VudCBJZFxuICAgKiBAcGFyYW0ge1VzZXJDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB1c2VyIGNvbnNlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogVXNlckNvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZhdGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gcmVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmVhY3RpdmF0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWFjdGl2YXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhY3RpdmF0ZXMgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byByZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlYWN0aXZhdGVVc2VyKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVhY3RpdmF0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZhdGVzIHRoZSB1c2VyIGFjdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiB0byByZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlYWN0aXZhdGVVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlYWN0aXZhdGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbmNpbGUgYSBVc2VyIHRvIEZ1c2lvbkF1dGggdXNpbmcgSldUIGlzc3VlZCBmcm9tIGFub3RoZXIgSWRlbnRpdHkgUHJvdmlkZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVjb25jaWxlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgZGF0YSB0byByZWNvbmNpbGUgdGhlIFVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlY29uY2lsZUpXVChyZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVjb25jaWxlJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBhIHJlZnJlc2ggb2YgdGhlIEVudGl0eSBzZWFyY2ggaW5kZXguIFRoaXMgQVBJIGlzIG5vdCBnZW5lcmFsbHkgbmVjZXNzYXJ5IGFuZCB0aGUgc2VhcmNoIGluZGV4IHdpbGwgYmVjb21lIGNvbnNpc3RlbnQgaW4gYVxuICAgKiByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLiBUaGVyZSBtYXkgYmUgc2NlbmFyaW9zIHdoZXJlIHlvdSBtYXkgd2lzaCB0byBtYW51YWxseSByZXF1ZXN0IGFuIGluZGV4IHJlZnJlc2guIE9uZSBleGFtcGxlIG1heSBiZSBcbiAgICogaWYgeW91IGFyZSB1c2luZyB0aGUgU2VhcmNoIEFQSSBvciBEZWxldGUgVGVuYW50IEFQSSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYSBFbnRpdHkgQ3JlYXRlIGV0YywgeW91IG1heSB3aXNoIHRvIHJlcXVlc3QgYSByZWZyZXNoIHRvXG4gICAqICBlbnN1cmUgdGhlIGluZGV4IGltbWVkaWF0ZWx5IGN1cnJlbnQgYmVmb3JlIG1ha2luZyBhIHF1ZXJ5IHJlcXVlc3QgdG8gdGhlIHNlYXJjaCBpbmRleC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmVmcmVzaEVudGl0eVNlYXJjaEluZGV4KCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS9zZWFyY2gnKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IGEgcmVmcmVzaCBvZiB0aGUgVXNlciBzZWFyY2ggaW5kZXguIFRoaXMgQVBJIGlzIG5vdCBnZW5lcmFsbHkgbmVjZXNzYXJ5IGFuZCB0aGUgc2VhcmNoIGluZGV4IHdpbGwgYmVjb21lIGNvbnNpc3RlbnQgaW4gYVxuICAgKiByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLiBUaGVyZSBtYXkgYmUgc2NlbmFyaW9zIHdoZXJlIHlvdSBtYXkgd2lzaCB0byBtYW51YWxseSByZXF1ZXN0IGFuIGluZGV4IHJlZnJlc2guIE9uZSBleGFtcGxlIG1heSBiZSBcbiAgICogaWYgeW91IGFyZSB1c2luZyB0aGUgU2VhcmNoIEFQSSBvciBEZWxldGUgVGVuYW50IEFQSSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYSBVc2VyIENyZWF0ZSBldGMsIHlvdSBtYXkgd2lzaCB0byByZXF1ZXN0IGEgcmVmcmVzaCB0b1xuICAgKiAgZW5zdXJlIHRoZSBpbmRleCBpbW1lZGlhdGVseSBjdXJyZW50IGJlZm9yZSBtYWtpbmcgYSBxdWVyeSByZXF1ZXN0IHRvIHRoZSBzZWFyY2ggaW5kZXguXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlZnJlc2hVc2VyU2VhcmNoSW5kZXgoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9zZWFyY2gnKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdlbmVyYXRlcyBhbnkga2V5cyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBGdXNpb25BdXRoIFJlYWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlZ2VuZXJhdGVSZWFjdG9yS2V5cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZWFjdG9yJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgdXNlciBmb3IgYW4gYXBwbGljYXRpb24uIElmIHlvdSBwcm92aWRlIHRoZSBVc2VyIGFuZCB0aGUgVXNlclJlZ2lzdHJhdGlvbiBvYmplY3Qgb24gdGhpcyByZXF1ZXN0LCBpdFxuICAgKiB3aWxsIGNyZWF0ZSB0aGUgdXNlciBhcyB3ZWxsIGFzIHJlZ2lzdGVyIHRoZW0gZm9yIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBpcyBjYWxsZWQgYSBGdWxsIFJlZ2lzdHJhdGlvbi4gSG93ZXZlciwgaWZcbiAgICogeW91IG9ubHkgcHJvdmlkZSB0aGUgVXNlclJlZ2lzdHJhdGlvbiBvYmplY3QsIHRoZW4gdGhlIHVzZXIgbXVzdCBhbHJlYWR5IGV4aXN0IGFuZCB0aGV5IHdpbGwgYmUgcmVnaXN0ZXJlZCBmb3IgdGhlXG4gICAqIGFwcGxpY2F0aW9uLiBUaGUgdXNlciBJZCBjYW4gYWxzbyBiZSBwcm92aWRlZCBhbmQgaXQgd2lsbCBlaXRoZXIgYmUgdXNlZCB0byBsb29rIHVwIGFuIGV4aXN0aW5nIHVzZXIgb3IgaXQgd2lsbCBiZVxuICAgKiB1c2VkIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBVc2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgdXNlciBiZWluZyByZWdpc3RlcmVkIGZvciB0aGUgYXBwbGljYXRpb24gYW5kIG9wdGlvbmFsbHkgY3JlYXRlZC5cbiAgICogQHBhcmFtIHtSZWdpc3RyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgb3B0aW9uYWxseSBjb250YWlucyB0aGUgVXNlciBhbmQgbXVzdCBjb250YWluIHRoZSBVc2VyUmVnaXN0cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmVnaXN0ZXIodXNlcklkOiBVVUlELCByZXF1ZXN0OiBSZWdpc3RyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdHMgRWxhc3RpY3NlYXJjaCB0byBkZWxldGUgYW5kIHJlYnVpbGQgdGhlIGluZGV4IGZvciBGdXNpb25BdXRoIHVzZXJzIG9yIGVudGl0aWVzLiBCZSB2ZXJ5IGNhcmVmdWwgd2hlbiBydW5uaW5nIHRoaXMgcmVxdWVzdCBhcyBpdCB3aWxsIFxuICAgKiBpbmNyZWFzZSB0aGUgQ1BVIGFuZCBJL08gbG9hZCBvbiB5b3VyIGRhdGFiYXNlIHVudGlsIHRoZSBvcGVyYXRpb24gY29tcGxldGVzLiBHZW5lcmFsbHkgc3BlYWtpbmcgeW91IGRvIG5vdCBldmVyIG5lZWQgdG8gcnVuIHRoaXMgb3BlcmF0aW9uIHVubGVzcyBcbiAgICogaW5zdHJ1Y3RlZCBieSBGdXNpb25BdXRoIHN1cHBvcnQsIG9yIGlmIHlvdSBhcmUgbWlncmF0aW5nIGEgZGF0YWJhc2UgYW5vdGhlciBzeXN0ZW0gYW5kIHlvdSBhcmUgbm90IGJyaW5pbmcgYWxvbmcgdGhlIEVsYXN0aWNzZWFyY2ggaW5kZXguIFxuICAgKiBcbiAgICogWW91IGhhdmUgYmVlbiB3YXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVpbmRleFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgaW5kZXggbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmVpbmRleChyZXF1ZXN0OiBSZWluZGV4UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL3JlaW5kZXgnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgdXNlciBmcm9tIHRoZSBmYW1pbHkgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmFtaWx5SWQgVGhlIElkIG9mIHRoZSBmYW1pbHkgdG8gcmVtb3ZlIHRoZSB1c2VyIGZyb20uXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byByZW1vdmUgZnJvbSB0aGUgZmFtaWx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZW1vdmVVc2VyRnJvbUZhbWlseShmYW1pbHlJZDogVVVJRCwgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmYW1pbHlJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmUtc2VuZHMgdGhlIHZlcmlmaWNhdGlvbiBlbWFpbCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj59XG4gICAqL1xuICByZXNlbmRFbWFpbFZlcmlmaWNhdGlvbihlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeUVtYWlsUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1zZW5kcyB0aGUgdmVyaWZpY2F0aW9uIGVtYWlsIHRvIHRoZSB1c2VyLiBJZiB0aGUgQXBwbGljYXRpb24gaGFzIGNvbmZpZ3VyZWQgYSBzcGVjaWZpYyBlbWFpbCB0ZW1wbGF0ZSB0aGlzIHdpbGwgYmUgdXNlZFxuICAgKiBpbnN0ZWFkIG9mIHRoZSB0ZW5hbnQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSB1bmlxdWUgQXBwbGljYXRpb24gSWQgdG8gdXNlZCB0byByZXNvbHZlIGFuIGFwcGxpY2F0aW9uIHNwZWNpZmljIGVtYWlsIHRlbXBsYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWwgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIgdGhhdCBuZWVkcyBhIG5ldyB2ZXJpZmljYXRpb24gZW1haWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlc2VuZEVtYWlsVmVyaWZpY2F0aW9uV2l0aEFwcGxpY2F0aW9uVGVtcGxhdGUoYXBwbGljYXRpb25JZDogVVVJRCwgZW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlFbWFpbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1zZW5kcyB0aGUgYXBwbGljYXRpb24gcmVnaXN0cmF0aW9uIHZlcmlmaWNhdGlvbiBlbWFpbCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB2ZXJpZmllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlc2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbihlbWFpbDogc3RyaW5nLCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbiBhdXRoZW50aWNhdGlvbiBBUEkga2V5IGZvciB0aGUgZ2l2ZW4gaWRcbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIEFQSSBrZXkgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFQSUtleShrZXlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QVBJS2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBzaW5nbGUgYWN0aW9uIGxvZyAodGhlIGxvZyBvZiBhIHVzZXIgYWN0aW9uIHRoYXQgd2FzIHRha2VuIG9uIGEgdXNlciBwcmV2aW91c2x5KSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjdGlvbklkIFRoZSBJZCBvZiB0aGUgYWN0aW9uIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3Rpb24oYWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYWN0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLiBUaGlzIHdpbGwgcmV0dXJuIGFsbCB0aW1lIGJhc2VkIGFjdGlvbnMgdGhhdCBhcmUgYWN0aXZlLFxuICAgKiBhbmQgaW5hY3RpdmUgYXMgd2VsbCBhcyBub24tdGltZSBiYXNlZCBhY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZmV0Y2ggdGhlIGFjdGlvbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3Rpb25zKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkIHRoYXQgYXJlIGN1cnJlbnRseSBwcmV2ZW50aW5nIHRoZSBVc2VyIGZyb20gbG9nZ2luZyBpbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGZldGNoIHRoZSBhY3Rpb25zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQWN0aW9uc1ByZXZlbnRpbmdMb2dpbih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncHJldmVudGluZ0xvZ2luJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZS5cbiAgICogQW4gYWN0aXZlIGFjdGlvbiBtZWFucyBvbmUgdGhhdCBpcyB0aW1lIGJhc2VkIGFuZCBoYXMgbm90IGJlZW4gY2FuY2VsZWQsIGFuZCBoYXMgbm90IGVuZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZmV0Y2ggdGhlIGFjdGlvbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3RpdmVBY3Rpb25zKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhY3RpdmUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGFwcGxpY2F0aW9uIGZvciB0aGUgZ2l2ZW4gSWQgb3IgYWxsIHRoZSBhcHBsaWNhdGlvbnMgaWYgdGhlIElkIGlzIG51bGwuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYXBwbGljYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFwcGxpY2F0aW9ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSBhdWRpdCBsb2cgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGF1ZGl0TG9nSWQgVGhlIElkIG9mIHRoZSBhdWRpdCBsb2cgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQXVkaXRMb2coYXVkaXRMb2dJZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEF1ZGl0TG9nUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vYXVkaXQtbG9nJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGF1ZGl0TG9nSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY29ubmVjdG9yIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbm5lY3RvcklkIFRoZSBJZCBvZiB0aGUgY29ubmVjdG9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25uZWN0b3JJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY29ubmVjdG9ycy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQ29ubmVjdG9ycygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgQ29uc2VudCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCBUaGUgSWQgb2YgdGhlIGNvbnNlbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVDb25zZW50KGNvbnNlbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY29uc2VudC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUNvbnNlbnRzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBkYWlseSBhY3RpdmUgdXNlciByZXBvcnQgYmV0d2VlbiB0aGUgdHdvIGluc3RhbnRzLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5XG4gICAqIHJldHVybiB0aGUgZGFpbHkgYWN0aXZlIGNvdW50cyBmb3IgdGhhdCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIGlkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RGFpbHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRGFpbHlBY3RpdmVSZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L2RhaWx5LWFjdGl2ZS11c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBlbWFpbCB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgaWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIHRoZSBlbWFpbCB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW1haWxUZW1wbGF0ZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHByZXZpZXcgb2YgdGhlIGVtYWlsIHRlbXBsYXRlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LiBUaGlzIGFsbG93cyB5b3UgdG8gcHJldmlldyBhbiBlbWFpbCB0ZW1wbGF0ZSB0aGF0XG4gICAqIGhhc24ndCBiZWVuIHNhdmVkIHRvIHRoZSBkYXRhYmFzZSB5ZXQuIFRoZSBlbnRpcmUgZW1haWwgdGVtcGxhdGUgZG9lcyBub3QgbmVlZCB0byBiZSBwcm92aWRlZCBvbiB0aGUgcmVxdWVzdC4gVGhpc1xuICAgKiB3aWxsIGNyZWF0ZSB0aGUgcHJldmlldyBiYXNlZCBvbiB3aGF0ZXZlciBpcyBnaXZlbi5cbiAgICpcbiAgICogQHBhcmFtIHtQcmV2aWV3UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBlbWFpbCB0ZW1wbGF0ZSBhbmQgb3B0aW9uYWxseSBhIGxvY2FsZSB0byByZW5kZXIgaXQgaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFByZXZpZXdSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbWFpbFRlbXBsYXRlUHJldmlldyhyZXF1ZXN0OiBQcmV2aWV3UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UHJldmlld1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFByZXZpZXdSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlL3ByZXZpZXcnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBlbWFpbCB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbWFpbFRlbXBsYXRlcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEVudGl0eSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbnRpdHkoZW50aXR5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYW4gRW50aXR5IEdyYW50IGZvciB0aGUgZ2l2ZW4gRW50aXR5IGFuZCBVc2VyL0VudGl0eS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eS5cbiAgICogQHBhcmFtIHtVVUlEfSByZWNpcGllbnRFbnRpdHlJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRoYXQgdGhlIEVudGl0eSBHcmFudCBpcyBmb3IuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBVc2VyIHRoYXQgdGhlIEVudGl0eSBHcmFudCBpcyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eUdyYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRW50aXR5R3JhbnQoZW50aXR5SWQ6IFVVSUQsIHJlY2lwaWVudEVudGl0eUlkOiBVVUlELCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eUdyYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5R3JhbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwiZ3JhbnRcIilcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlY2lwaWVudEVudGl0eUlkJywgcmVjaXBpZW50RW50aXR5SWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRW50aXR5IFR5cGUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUVudGl0eVR5cGUoZW50aXR5VHlwZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBFbnRpdHkgVHlwZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbnRpdHlUeXBlcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSBldmVudCBsb2cgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50TG9nSWQgVGhlIElkIG9mIHRoZSBldmVudCBsb2cgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEV2ZW50TG9nUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRXZlbnRMb2coZXZlbnRMb2dJZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFdmVudExvZ1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEV2ZW50TG9nUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vZXZlbnQtbG9nJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGV2ZW50TG9nSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGZhbWlsaWVzIHRoYXQgYSB1c2VyIGJlbG9uZ3MgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBVc2VyJ3MgaWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRmFtaWxpZXModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGYW1pbHlSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseScpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIG1lbWJlcnMgb2YgYSBmYW1pbHkgYnkgdGhlIHVuaXF1ZSBGYW1pbHkgSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmFtaWx5SWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgRmFtaWx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVGYW1pbHlNZW1iZXJzQnlGYW1pbHlJZChmYW1pbHlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RmFtaWx5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmFtaWx5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZm9ybSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmb3JtSWQgVGhlIElkIG9mIHRoZSBmb3JtLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRm9ybShmb3JtSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmb3JtSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZm9ybSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmaWVsZElkIFRoZSBJZCBvZiB0aGUgZm9ybSBmaWVsZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRm9ybUZpZWxkKGZpZWxkSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1GaWVsZFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmllbGRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgZm9ybXMgZmllbGRzXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUZvcm1GaWVsZHMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtRmllbGRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtL2ZpZWxkJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgZm9ybXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVGb3JtcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZ3JvdXAgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBncm91cElkIFRoZSBJZCBvZiB0aGUgZ3JvdXAuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlR3JvdXAoZ3JvdXBJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgZ3JvdXBzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUdyb3VwcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpcEFjY2Vzc0NvbnRyb2xMaXN0SWQgVGhlIElkIG9mIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSVBBY2Nlc3NDb250cm9sTGlzdChpcEFjY2Vzc0NvbnRyb2xMaXN0SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlwQWNjZXNzQ29udHJvbExpc3RJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBpZGVudGl0eSBwcm92aWRlciBmb3IgdGhlIGdpdmVuIElkIG9yIGFsbCB0aGUgaWRlbnRpdHkgcHJvdmlkZXJzIGlmIHRoZSBJZCBpcyBudWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgaWRlbnRpdHkgcHJvdmlkZXIgSWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVJZGVudGl0eVByb3ZpZGVyKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIG9uZSBvciBtb3JlIGlkZW50aXR5IHByb3ZpZGVyIGZvciB0aGUgZ2l2ZW4gdHlwZS4gRm9yIHR5cGVzIHN1Y2ggYXMgR29vZ2xlLCBGYWNlYm9vaywgVHdpdHRlciBhbmQgTGlua2VkSW4sIG9ubHkgYSBzaW5nbGUgXG4gICAqIGlkZW50aXR5IHByb3ZpZGVyIGNhbiBleGlzdC4gRm9yIHR5cGVzIHN1Y2ggYXMgT3BlbklEIENvbm5lY3QgYW5kIFNBTUx2MiBtb3JlIHRoYW4gb25lIGlkZW50aXR5IHByb3ZpZGVyIGNhbiBiZSBjb25maWd1cmVkIHNvIHRoaXMgcmVxdWVzdCBcbiAgICogbWF5IHJldHVybiBtdWx0aXBsZSBpZGVudGl0eSBwcm92aWRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlclR5cGV9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSWRlbnRpdHlQcm92aWRlckJ5VHlwZSh0eXBlOiBJZGVudGl0eVByb3ZpZGVyVHlwZSk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3R5cGUnLCB0eXBlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBpZGVudGl0eSBwcm92aWRlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVJZGVudGl0eVByb3ZpZGVycygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXInKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZCB0aGF0IGFyZSBjdXJyZW50bHkgaW5hY3RpdmUuXG4gICAqIEFuIGluYWN0aXZlIGFjdGlvbiBtZWFucyBvbmUgdGhhdCBpcyB0aW1lIGJhc2VkIGFuZCBoYXMgYmVlbiBjYW5jZWxlZCBvciBoYXMgZXhwaXJlZCwgb3IgaXMgbm90IHRpbWUgYmFzZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBmZXRjaCB0aGUgYWN0aW9ucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUluYWN0aXZlQWN0aW9ucyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYWN0aXZlJywgZmFsc2UpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBjdXJyZW50bHkgaW5hY3RpdmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSW5hY3RpdmVBcHBsaWNhdGlvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaW5hY3RpdmUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB1c2VyIGFjdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IGluYWN0aXZlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSW5hY3RpdmVVc2VyQWN0aW9ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaW5hY3RpdmUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGF2YWlsYWJsZSBpbnRlZ3JhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEludGVncmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSW50ZWdyYXRpb24oKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRlZ3JhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEludGVncmF0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaW50ZWdyYXRpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIFB1YmxpYyBLZXkgY29uZmlndXJlZCBmb3IgdmVyaWZ5aW5nIEpTT04gV2ViIFRva2VucyAoSldUKSBieSB0aGUga2V5IElkIChraWQpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5SWQgVGhlIElkIG9mIHRoZSBwdWJsaWMga2V5IChraWQpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQdWJsaWNLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVKV1RQdWJsaWNLZXkoa2V5SWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UHVibGljS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8UHVibGljS2V5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3B1YmxpYy1rZXknKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigna2lkJywga2V5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgUHVibGljIEtleSBjb25maWd1cmVkIGZvciB2ZXJpZnlpbmcgdGhlIEpTT04gV2ViIFRva2VucyAoSldUKSBpc3N1ZWQgYnkgdGhlIExvZ2luIEFQSSBieSB0aGUgQXBwbGljYXRpb24gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgQXBwbGljYXRpb24gZm9yIHdoaWNoIHRoaXMga2V5IGlzIHVzZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFB1YmxpY0tleVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUpXVFB1YmxpY0tleUJ5QXBwbGljYXRpb25JZChhcHBsaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFB1YmxpY0tleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFB1YmxpY0tleVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9wdWJsaWMta2V5JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIFB1YmxpYyBLZXlzIGNvbmZpZ3VyZWQgZm9yIHZlcmlmeWluZyBKU09OIFdlYiBUb2tlbnMgKEpXVCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFB1YmxpY0tleVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUpXVFB1YmxpY0tleXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQdWJsaWNLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxQdWJsaWNLZXlSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcHVibGljLWtleScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcHVibGljIGtleXMgdXNlZCBieSBGdXNpb25BdXRoIHRvIGNyeXB0b2dyYXBoaWNhbGx5IHZlcmlmeSBKV1RzIHVzaW5nIHRoZSBKU09OIFdlYiBLZXkgZm9ybWF0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV0tTUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSnNvbldlYktleVNldCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXS1NSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxKV0tTUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy8ud2VsbC1rbm93bi9qd2tzLmpzb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGtleSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUga2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVLZXkoa2V5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBrZXlzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVLZXlzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5JylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsYW1iZGEgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBsYW1iZGFJZCBUaGUgSWQgb2YgdGhlIGxhbWJkYS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTGFtYmRhKGxhbWJkYUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgbGFtYmRhcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTGFtYmRhcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExhbWJkYVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGxhbWJkYXMgZm9yIHRoZSBwcm92aWRlZCB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge0xhbWJkYVR5cGV9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGxhbWJkYSB0byByZXR1cm4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUxhbWJkYXNCeVR5cGUodHlwZTogTGFtYmRhVHlwZSk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3R5cGUnLCB0eXBlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxvZ2luIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIGlkLCBpdCB3aWxsIG9ubHkgcmV0dXJuIHRoZVxuICAgKiBsb2dpbiBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTG9naW5SZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXBvcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC9sb2dpbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgaWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIHRoZSBtZXNzYWdlIHRlbXBsYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzYWdlVGVtcGxhdGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTWVzc2FnZVRlbXBsYXRlKG1lc3NhZ2VUZW1wbGF0ZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NhZ2VUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcHJldmlldyBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCwgbm9ybWFsaXplZCB0byBhIGdpdmVuIGxvY2FsZS5cbiAgICpcbiAgICogQHBhcmFtIHtQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBlbWFpbCB0ZW1wbGF0ZSBhbmQgb3B0aW9uYWxseSBhIGxvY2FsZSB0byByZW5kZXIgaXQgaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzYWdlVGVtcGxhdGVQcmV2aWV3KHJlcXVlc3Q6IFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZS9wcmV2aWV3JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgbWVzc2FnZSB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NhZ2VUZW1wbGF0ZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBtZXNzZW5nZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2VuZ2VySWQgVGhlIElkIG9mIHRoZSBtZXNzZW5nZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NlbmdlcihtZXNzZW5nZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NlbmdlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBtZXNzZW5nZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzZW5nZXJzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBtb250aGx5IGFjdGl2ZSB1c2VyIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIGlkLCBpdCB3aWxsIG9ubHlcbiAgICogcmV0dXJuIHRoZSBtb250aGx5IGFjdGl2ZSBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1vbnRobHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTW9udGhseUFjdGl2ZVJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TW9udGhseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNb250aGx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L21vbnRobHktYWN0aXZlLXVzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBjdXN0b20gT0F1dGggc2NvcGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIE9BdXRoIHNjb3BlIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gc2NvcGVJZCBUaGUgSWQgb2YgdGhlIE9BdXRoIHNjb3BlIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVPQXV0aFNjb3BlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHNjb3BlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwic2NvcGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHNjb3BlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgT2F1dGgyIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbiBmb3IgdGhlIGdpdmVuIEFwcGxpY2F0aW9uIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBBcHBsaWNhdGlvbiB0byByZXRyaWV2ZSBPQXV0aCBjb25maWd1cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxPQXV0aENvbmZpZ3VyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVPYXV0aENvbmZpZ3VyYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8T0F1dGhDb25maWd1cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8T0F1dGhDb25maWd1cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJvYXV0aC1jb25maWd1cmF0aW9uXCIpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHdlbGwga25vd24gT3BlbklEIENvbmZpZ3VyYXRpb24gSlNPTiBkb2N1bWVudFxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxPcGVuSWRDb25maWd1cmF0aW9uPj59XG4gICAqL1xuICByZXRyaWV2ZU9wZW5JZENvbmZpZ3VyYXRpb24oKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxPcGVuSWRDb25maWd1cmF0aW9uPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPE9wZW5JZENvbmZpZ3VyYXRpb24sIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcGFzc3dvcmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgYSBzcGVjaWZpYyB0ZW5hbnQuIFRoaXMgbWV0aG9kIHJlcXVpcmVzIGEgdGVuYW50SWQgdG8gYmUgcHJvdmlkZWQgXG4gICAqIHRocm91Z2ggdGhlIHVzZSBvZiBhIFRlbmFudCBzY29wZWQgQVBJIGtleSBvciBhbiBIVFRQIGhlYWRlciBYLUZ1c2lvbkF1dGgtVGVuYW50SWQgdG8gc3BlY2lmeSB0aGUgVGVuYW50IElkLlxuICAgKiBcbiAgICogVGhpcyBBUEkgZG9lcyBub3QgcmVxdWlyZSBhbiBBUEkga2V5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudC9wYXNzd29yZC12YWxpZGF0aW9uLXJ1bGVzJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCB2YWxpZGF0aW9uIHJ1bGVzIGZvciBhIHNwZWNpZmljIHRlbmFudC5cbiAgICogXG4gICAqIFRoaXMgQVBJIGRvZXMgbm90IHJlcXVpcmUgYW4gQVBJIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVQYXNzd29yZFZhbGlkYXRpb25SdWxlc1dpdGhUZW5hbnRJZCh0ZW5hbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudC9wYXNzd29yZC12YWxpZGF0aW9uLXJ1bGVzJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBjaGlsZHJlbiBmb3IgdGhlIGdpdmVuIHBhcmVudCBlbWFpbCBhZGRyZXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50RW1haWwgVGhlIGVtYWlsIG9mIHRoZSBwYXJlbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFBlbmRpbmdSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVQZW5kaW5nQ2hpbGRyZW4ocGFyZW50RW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UGVuZGluZ1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFBlbmRpbmdSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5L3BlbmRpbmcnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncGFyZW50RW1haWwnLCBwYXJlbnRFbWFpbClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBwZW5kaW5nIGlkZW50aXR5IHByb3ZpZGVyIGxpbmsuIFRoaXMgaXMgdXNlZnVsIHRvIHZhbGlkYXRlIGEgcGVuZGluZyBsaW5rIGFuZCByZXRyaWV2ZSBtZXRhLWRhdGEgYWJvdXQgdGhlIGlkZW50aXR5IHByb3ZpZGVyIGxpbmsuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwZW5kaW5nTGlua0lkIFRoZSBwZW5kaW5nIGxpbmsgSWQuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBvcHRpb25hbCB1c2VySWQuIFdoZW4gcHJvdmlkZWQgYWRkaXRpb25hbCBtZXRhLWRhdGEgd2lsbCBiZSBwcm92aWRlZCB0byBpZGVudGlmeSBob3cgbWFueSBsaW5rcyBpZiBhbnkgdGhlIHVzZXIgYWxyZWFkeSBoYXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJQZW5kaW5nTGlua1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVBlbmRpbmdMaW5rKHBlbmRpbmdMaW5rSWQ6IHN0cmluZywgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUGVuZGluZ0xpbmtSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUGVuZGluZ0xpbmtSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xpbmsvcGVuZGluZycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChwZW5kaW5nTGlua0lkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEZ1c2lvbkF1dGggUmVhY3RvciBtZXRyaWNzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yTWV0cmljc1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlYWN0b3JNZXRyaWNzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVhY3Rvck1ldHJpY3NSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWFjdG9yTWV0cmljc1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3IvbWV0cmljcycpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yIHN0YXR1cy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVhY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlYWN0b3JTdGF0dXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVhY3RvclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3InKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxhc3QgbnVtYmVyIG9mIGxvZ2luIHJlY29yZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIGluaXRpYWwgcmVjb3JkLiBlLmcuIDAgaXMgdGhlIGxhc3QgbG9naW4sIDEwMCB3aWxsIGJlIHRoZSAxMDB0aCBtb3N0IHJlY2VudCBsb2dpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IChPcHRpb25hbCwgZGVmYXVsdHMgdG8gMTApIFRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWNlbnRMb2dpbnMob2Zmc2V0OiBudW1iZXIsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlY2VudExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVjZW50TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVjZW50LWxvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ29mZnNldCcsIG9mZnNldClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xpbWl0JywgbGltaXQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSByZWZyZXNoIHRva2VuIGJ5IHVuaXF1ZSBJZC4gVGhpcyBpcyBub3QgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgcmVmcmVzaCB0b2tlbi4gSWYgeW91IGhhdmUgdGhhdCwgeW91IGFscmVhZHkgaGF2ZSB3aGF0IHlvdSBuZWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRva2VuSWQgVGhlIElkIG9mIHRoZSB0b2tlbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVmcmVzaFRva2VuUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVmcmVzaFRva2VuQnlJZCh0b2tlbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWZyZXNoVG9rZW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWZyZXNoVG9rZW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRva2VuSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVmcmVzaFRva2VuUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVmcmVzaFRva2Vucyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZnJlc2hUb2tlblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZnJlc2hUb2tlblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgcmVnaXN0cmF0aW9uIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZCBhbmQgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWdpc3RyYXRpb24odXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVnaXN0cmF0aW9uIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIGlkLCBpdCB3aWxsIG9ubHkgcmV0dXJuXG4gICAqIHRoZSByZWdpc3RyYXRpb24gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWdpc3RyYXRpb25SZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBzdGF0dXMgb2YgYSByZS1pbmRleCBwcm9jZXNzLiBBIHN0YXR1cyBjb2RlIG9mIDIwMCBpbmRpY2F0ZXMgdGhlIHJlLWluZGV4IGlzIGluIHByb2dyZXNzLCBhIHN0YXR1cyBjb2RlIG9mICBcbiAgICogNDA0IGluZGljYXRlcyBubyByZS1pbmRleCBpcyBpbiBwcm9ncmVzcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWluZGV4U3RhdHVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL3JlaW5kZXgnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlU3lzdGVtQ29uZmlndXJhdGlvbigpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtLWNvbmZpZ3VyYXRpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEZ1c2lvbkF1dGggc3lzdGVtIGhlYWx0aC4gVGhpcyBBUEkgd2lsbCByZXR1cm4gMjAwIGlmIHRoZSBzeXN0ZW0gaXMgaGVhbHRoeSwgYW5kIDUwMCBpZiB0aGUgc3lzdGVtIGlzIHVuLWhlYWx0aHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldHJpZXZlU3lzdGVtSGVhbHRoKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2hlYWx0aCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRnVzaW9uQXV0aCBzeXN0ZW0gc3RhdHVzLiBUaGlzIHJlcXVlc3QgaXMgYW5vbnltb3VzIGFuZCBkb2VzIG5vdCByZXF1aXJlIGFuIEFQSSBrZXkuIFdoZW4gYW4gQVBJIGtleSBpcyBub3QgcHJvdmlkZWQgdGhlIHJlc3BvbnNlIHdpbGwgY29udGFpbiBhIHNpbmdsZSB2YWx1ZSBpbiB0aGUgSlNPTiByZXNwb25zZSBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IGhlYWx0aCBjaGVjay5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U3RhdHVzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlU3lzdGVtU3RhdHVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U3RhdHVzUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8U3RhdHVzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3RhdHVzJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBGdXNpb25BdXRoIHN5c3RlbSBzdGF0dXMgdXNpbmcgYW4gQVBJIGtleS4gVXNpbmcgYW4gQVBJIGtleSB3aWxsIGNhdXNlIHRoZSByZXNwb25zZSB0byBpbmNsdWRlIHRoZSBwcm9kdWN0IHZlcnNpb24sIGhlYWx0aCBjaGVja3MgYW5kIHZhcmlvdXMgcnVudGltZSBtZXRyaWNzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTdGF0dXNSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVTeXN0ZW1TdGF0dXNVc2luZ0FQSUtleSgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFN0YXR1c1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFN0YXR1c1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N0YXR1cycpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdGVuYW50IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRlbmFudCh0ZW5hbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHRlbmFudHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRlbmFudHMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRoZW1lIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGhlbWVJZCBUaGUgSWQgb2YgdGhlIHRoZW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRoZW1lKHRoZW1lSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRoZW1lSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHRoZW1lcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUaGVtZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRvdGFscyByZXBvcnQuIFRoaXMgY29udGFpbnMgYWxsIHRoZSB0b3RhbCBjb3VudHMgZm9yIGVhY2ggYXBwbGljYXRpb24gYW5kIHRoZSBnbG9iYWwgcmVnaXN0cmF0aW9uXG4gICAqIGNvdW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUb3RhbHNSZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUb3RhbFJlcG9ydCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRvdGFsc1JlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRvdGFsc1JlcG9ydFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC90b3RhbHMnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0d28tZmFjdG9yIHJlY292ZXJ5IGNvZGVzIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byByZXRyaWV2ZSBUd28gRmFjdG9yIHJlY292ZXJ5IGNvZGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUd29GYWN0b3JSZWNvdmVyeUNvZGVzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3IvcmVjb3ZlcnktY29kZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgdXNlcidzIHR3by1mYWN0b3Igc3RhdHVzLlxuICAgKiBcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBzZWUgaWYgYSB1c2VyIHdpbGwgbmVlZCB0byBjb21wbGV0ZSBhIHR3by1mYWN0b3IgY2hhbGxlbmdlIHRvIGNvbXBsZXRlIGEgbG9naW4sXG4gICAqIGFuZCBvcHRpb25hbGx5IGlkZW50aWZ5IHRoZSBzdGF0ZSBvZiB0aGUgdHdvLWZhY3RvciB0cnVzdCBhY3Jvc3MgdmFyaW91cyBhcHBsaWNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1c2VyIElkIHRvIHJldHJpZXZlIHRoZSBUd28tRmFjdG9yIHN0YXR1cy5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBvcHRpb25hbCBhcHBsaWNhdGlvbklkIHRvIHZlcmlmeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHR3b0ZhY3RvclRydXN0SWQgVGhlIG9wdGlvbmFsIHR3by1mYWN0b3IgdHJ1c3QgSWQgdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JTdGF0dXNSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUd29GYWN0b3JTdGF0dXModXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlELCB0d29GYWN0b3JUcnVzdElkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zdGF0dXMnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0d29GYWN0b3JUcnVzdElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGFjdGlvbiBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgcGFzcyBpbiBudWxsIGZvciB0aGUgaWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIHRoZSB1c2VyXG4gICAqIGFjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IHBhc3MgaW4gbnVsbCBmb3IgdGhlIGlkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCB0aGUgdXNlclxuICAgKiBhY3Rpb24gcmVhc29ucy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQWN0aW9uUmVhc29ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdXNlciBhY3Rpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckFjdGlvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGJ5IGEgY2hhbmdlIHBhc3N3b3JkIElkLiBUaGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgQVBJIGlzIHRvIHJldHJpZXZlIGEgdXNlciBhZnRlciB0aGUgZm9yZ290XG4gICAqIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZCBhbmQgeW91IG1heSBub3Qga25vdyB0aGUgdXNlcidzIGVtYWlsIG9yIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgdW5pcXVlIGNoYW5nZSBwYXNzd29yZCBJZCB0aGF0IHdhcyBzZW50IHZpYSBlbWFpbCBvciByZXR1cm5lZCBieSB0aGUgRm9yZ290IFBhc3N3b3JkIEFQSS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUNoYW5nZVBhc3N3b3JkSWQoY2hhbmdlUGFzc3dvcmRJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdjaGFuZ2VQYXNzd29yZElkJywgY2hhbmdlUGFzc3dvcmRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gZW1haWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlFbWFpbChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBsb2dpbklkLiBUaGUgbG9naW5JZCBjYW4gYmUgZWl0aGVyIHRoZSB1c2VybmFtZSBvciB0aGUgZW1haWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBlbWFpbCBvciB1c2VybmFtZSBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUxvZ2luSWQobG9naW5JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gdXNlcm5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VybmFtZSBUaGUgdXNlcm5hbWUgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlVc2VybmFtZSh1c2VybmFtZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VybmFtZScsIHVzZXJuYW1lKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgYnkgYSB2ZXJpZmljYXRpb25JZC4gVGhlIGludGVuZGVkIHVzZSBvZiB0aGlzIEFQSSBpcyB0byByZXRyaWV2ZSBhIHVzZXIgYWZ0ZXIgdGhlIGZvcmdvdFxuICAgKiBwYXNzd29yZCB3b3JrZmxvdyBoYXMgYmVlbiBpbml0aWF0ZWQgYW5kIHlvdSBtYXkgbm90IGtub3cgdGhlIHVzZXIncyBlbWFpbCBvciB1c2VybmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcmlmaWNhdGlvbklkIFRoZSB1bmlxdWUgdmVyaWZpY2F0aW9uIElkIHRoYXQgaGFzIGJlZW4gc2V0IG9uIHRoZSB1c2VyIG9iamVjdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeVZlcmlmaWNhdGlvbklkKHZlcmlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3ZlcmlmaWNhdGlvbklkJywgdmVyaWZpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgdXNlcl9jb2RlIHRoYXQgaXMgcGFydCBvZiBhbiBpbi1wcm9ncmVzcyBEZXZpY2UgQXV0aG9yaXphdGlvbiBHcmFudC5cbiAgICogXG4gICAqIFRoaXMgQVBJIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBidWlsZCB5b3VyIG93biBsb2dpbiB3b3JrZmxvdyB0byBjb21wbGV0ZSBhIGRldmljZSBncmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCBUaGUgY2xpZW50IGlkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCBUaGUgY2xpZW50IGlkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIFRoZSBlbmQtdXNlciB2ZXJpZmljYXRpb24gY29kZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29kZShjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCB1c2VyX2NvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ3VzZXJfY29kZScsIHVzZXJfY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9kZXZpY2UvdXNlci1jb2RlJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHVzZXJfY29kZSB0aGF0IGlzIHBhcnQgb2YgYW4gaW4tcHJvZ3Jlc3MgRGV2aWNlIEF1dGhvcml6YXRpb24gR3JhbnQuXG4gICAqIFxuICAgKiBUaGlzIEFQSSBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gYnVpbGQgeW91ciBvd24gbG9naW4gd29ya2Zsb3cgdG8gY29tcGxldGUgYSBkZXZpY2UgZ3JhbnQuXG4gICAqIFxuICAgKiBUaGlzIHJlcXVlc3Qgd2lsbCByZXF1aXJlIGFuIEFQSSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJDb2RlVXNpbmdBUElLZXkodXNlcl9jb2RlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgdXNlcl9jb2RlKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2RldmljZS91c2VyLWNvZGUnKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNvbW1lbnRzIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29tbWVudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJDb21tZW50cyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb21tZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbW1lbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29tbWVudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgc2luZ2xlIFVzZXIgY29uc2VudCBieSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIFRoZSBVc2VyIGNvbnNlbnQgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29uc2VudCh1c2VyQ29uc2VudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJDb25zZW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNvbnNlbnRzIGZvciBhIFVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBVc2VyJ3MgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29uc2VudHModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGUgVXNlckluZm8gZW5kcG9pbnQgdG8gcmV0cmlldmUgVXNlciBDbGFpbXMgZnJvbSB0aGUgYWNjZXNzIHRva2VuIGlzc3VlZCBieSBGdXNpb25BdXRoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJpbmZvUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckluZm9Gcm9tQWNjZXNzVG9rZW4oZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyaW5mb1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFVzZXJpbmZvUmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdXNlcmluZm8nKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBzaW5nbGUgSWRlbnRpdHkgUHJvdmlkZXIgdXNlciAobGluaykuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpdHlQcm92aWRlclVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB1c2VyIGluIHRoZSAzcmQgcGFydHkgaWRlbnRpdHkgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyTGluayhpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ6IHN0cmluZywgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9saW5rJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJJZCcsIGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJVc2VySWQnLCBpZGVudGl0eVByb3ZpZGVyVXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhbGwgSWRlbnRpdHkgUHJvdmlkZXIgdXNlcnMgKGxpbmtzKSBmb3IgdGhlIHVzZXIuIFNwZWNpZnkgdGhlIG9wdGlvbmFsIGlkZW50aXR5UHJvdmlkZXJJZCB0byByZXRyaWV2ZSBsaW5rcyBmb3IgYSBwYXJ0aWN1bGFyIElkUC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci4gU3BlY2lmeSB0aGlzIHZhbHVlIHRvIHJlZHVjZSB0aGUgbGlua3MgcmV0dXJuZWQgdG8gdGhvc2UgZm9yIGEgcGFydGljdWxhciBJZFAuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckxpbmtzQnlVc2VySWQoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xpbmsnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRlbnRpdHlQcm92aWRlcklkJywgaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxvZ2luIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMgZm9yIGEgcGFydGljdWxhciB1c2VyIGJ5IElkLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5IHJldHVybiB0aGVcbiAgICogbG9naW4gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1c2VySWQgaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJMb2dpblJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCB1c2VySWQ6IFVVSUQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxvZ2luIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMgZm9yIGEgcGFydGljdWxhciB1c2VyIGJ5IGxvZ2luIElkLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5IHJldHVybiB0aGVcbiAgICogbG9naW4gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSB1c2VySWQgaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJMb2dpblJlcG9ydEJ5TG9naW5JZChhcHBsaWNhdGlvbklkOiBVVUlELCBsb2dpbklkOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGFzdCBudW1iZXIgb2YgbG9naW4gcmVjb3JkcyBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIGluaXRpYWwgcmVjb3JkLiBlLmcuIDAgaXMgdGhlIGxhc3QgbG9naW4sIDEwMCB3aWxsIGJlIHRoZSAxMDB0aCBtb3N0IHJlY2VudCBsb2dpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IChPcHRpb25hbCwgZGVmYXVsdHMgdG8gMTApIFRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyUmVjZW50TG9naW5zKHVzZXJJZDogVVVJRCwgb2Zmc2V0OiBudW1iZXIsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlY2VudExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVjZW50TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVjZW50LWxvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ29mZnNldCcsIG9mZnNldClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xpbWl0JywgbGltaXQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBmb3IgdGhlIGdpdmVuIElkLiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB1c2UgYW4gQVBJIGtleSwgaW5zdGVhZCBpdCB1c2VzIGEgSlNPTiBXZWIgVG9rZW4gKEpXVCkgZm9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyVXNpbmdKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEZ1c2lvbkF1dGggdmVyc2lvbiBzdHJpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcnNpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVWZXJzaW9uKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyc2lvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcnNpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS92ZXJzaW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBXZWJBdXRobiBjcmVkZW50aWFsIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWQgVGhlIElkIG9mIHRoZSBXZWJBdXRobiBjcmVkZW50aWFsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVXZWJBdXRobkNyZWRlbnRpYWwoaWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgV2ViQXV0aG4gY3JlZGVudGlhbHMgZm9yIHRoZSBnaXZlbiB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdXNlcidzIElELlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVXZWJBdXRobkNyZWRlbnRpYWxzRm9yVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHdlYmhvb2sgZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IHBhc3MgaW4gbnVsbCBmb3IgdGhlIGlkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCB0aGUgd2ViaG9va3MuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0lkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlV2ViaG9vayh3ZWJob29rSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJob29rUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViaG9vaycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh3ZWJob29rSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSB3ZWJob29rIGF0dGVtcHQgbG9nIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0F0dGVtcHRMb2dJZCBUaGUgSWQgb2YgdGhlIHdlYmhvb2sgYXR0ZW1wdCBsb2cgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tBdHRlbXB0TG9nUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlV2ViaG9va0F0dGVtcHRMb2cod2ViaG9va0F0dGVtcHRMb2dJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va0F0dGVtcHRMb2dSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJob29rQXR0ZW1wdExvZ1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL3dlYmhvb2stYXR0ZW1wdC1sb2cnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0F0dGVtcHRMb2dJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIHdlYmhvb2sgZXZlbnQgbG9nIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0V2ZW50TG9nSWQgVGhlIElkIG9mIHRoZSB3ZWJob29rIGV2ZW50IGxvZyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va0V2ZW50TG9nUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlV2ViaG9va0V2ZW50TG9nKHdlYmhvb2tFdmVudExvZ0lkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rRXZlbnRMb2dSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJob29rRXZlbnRMb2dSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS93ZWJob29rLWV2ZW50LWxvZycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh3ZWJob29rRXZlbnRMb2dJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgd2ViaG9va3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVXZWJob29rcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJob29rUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViaG9vaycpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZXMgcmVmcmVzaCB0b2tlbnMuXG4gICAqIFxuICAgKiBVc2FnZSBleGFtcGxlczpcbiAgICogICAtIERlbGV0ZSBhIHNpbmdsZSByZWZyZXNoIHRva2VuLCBwYXNzIGluIG9ubHkgdGhlIHRva2VuLlxuICAgKiAgICAgICByZXZva2VSZWZyZXNoVG9rZW4odG9rZW4pXG4gICAqIFxuICAgKiAgIC0gRGVsZXRlIGFsbCByZWZyZXNoIHRva2VucyBmb3IgYSB1c2VyLCBwYXNzIGluIG9ubHkgdGhlIHVzZXJJZC5cbiAgICogICAgICAgcmV2b2tlUmVmcmVzaFRva2VuKG51bGwsIHVzZXJJZClcbiAgICogXG4gICAqICAgLSBEZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvciBhIHVzZXIgZm9yIGEgc3BlY2lmaWMgYXBwbGljYXRpb24sIHBhc3MgaW4gYm90aCB0aGUgdXNlcklkIGFuZCB0aGUgYXBwbGljYXRpb25JZC5cbiAgICogICAgICAgcmV2b2tlUmVmcmVzaFRva2VuKG51bGwsIHVzZXJJZCwgYXBwbGljYXRpb25JZClcbiAgICogXG4gICAqICAgLSBEZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvciBhbiBhcHBsaWNhdGlvblxuICAgKiAgICAgICByZXZva2VSZWZyZXNoVG9rZW4obnVsbCwgbnVsbCwgYXBwbGljYXRpb25JZClcbiAgICogXG4gICAqIE5vdGU6IDxjb2RlPm51bGw8L2NvZGU+IG1heSBiZSBoYW5kbGVkIGRpZmZlcmVudGx5IGRlcGVuZGluZyB1cG9uIHRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZS5cbiAgICogXG4gICAqIFNlZSBhbHNvOiAobWV0aG9kIG5hbWVzIG1heSB2YXJ5IGJ5IGxhbmd1YWdlLi4uIGJ1dCB5b3UnbGwgZmlndXJlIGl0IG91dClcbiAgICogXG4gICAqICAtIHJldm9rZVJlZnJlc2hUb2tlbkJ5SWRcbiAgICogIC0gcmV2b2tlUmVmcmVzaFRva2VuQnlUb2tlblxuICAgKiAgLSByZXZva2VSZWZyZXNoVG9rZW5zQnlVc2VySWRcbiAgICogIC0gcmV2b2tlUmVmcmVzaFRva2Vuc0J5QXBwbGljYXRpb25JZFxuICAgKiAgLSByZXZva2VSZWZyZXNoVG9rZW5zQnlVc2VySWRGb3JBcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gKE9wdGlvbmFsKSBUaGUgcmVmcmVzaCB0b2tlbiB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIChPcHRpb25hbCkgVGhlIHVzZXIgSWQgd2hvc2UgdG9rZW5zIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIElkIG9mIHRoZSB0b2tlbnMgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VSZWZyZXNoVG9rZW4odG9rZW46IHN0cmluZywgdXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd0b2tlbicsIHRva2VuKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZXMgYSBzaW5nbGUgcmVmcmVzaCB0b2tlbiBieSB0aGUgdW5pcXVlIElkLiBUaGUgdW5pcXVlIElkIGlzIG5vdCBzZW5zaXRpdmUgYXMgaXQgY2Fubm90IGJlIHVzZWQgdG8gb2J0YWluIGFub3RoZXIgSldULlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRva2VuSWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgdG9rZW4gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VSZWZyZXNoVG9rZW5CeUlkKHRva2VuSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRva2VuSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZXMgYSBzaW5nbGUgcmVmcmVzaCB0b2tlbiBieSB1c2luZyB0aGUgYWN0dWFsIHJlZnJlc2ggdG9rZW4gdmFsdWUuIFRoaXMgcmVmcmVzaCB0b2tlbiB2YWx1ZSBpcyBzZW5zaXRpdmUsIHNvICBiZSBjYXJlZnVsIHdpdGggdGhpcyBBUEkgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuIFRoZSByZWZyZXNoIHRva2VuIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2VuQnlUb2tlbih0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd0b2tlbicsIHRva2VuKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2UgYWxsIHJlZnJlc2ggdG9rZW5zIHRoYXQgYmVsb25nIHRvIGFuIGFwcGxpY2F0aW9uIGJ5IGFwcGxpY2F0aW9uSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgdW5pcXVlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VSZWZyZXNoVG9rZW5zQnlBcHBsaWNhdGlvbklkKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2UgYWxsIHJlZnJlc2ggdG9rZW5zIHRoYXQgYmVsb25nIHRvIGEgdXNlciBieSB1c2VyIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB1c2VyIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIGFsbCByZWZyZXNoIHRva2VucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbnNCeVVzZXJJZCh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlIGFsbCByZWZyZXNoIHRva2VucyB0aGF0IGJlbG9uZyB0byBhIHVzZXIgYnkgdXNlciBJZCBmb3IgYSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBieSBhcHBsaWNhdGlvbklkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB1c2VyIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIGFsbCByZWZyZXNoIHRva2VucyBmb3IuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgdW5pcXVlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSByZWZyZXNoIHRva2VucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbnNCeVVzZXJJZEZvckFwcGxpY2F0aW9uKHVzZXJJZDogVVVJRCwgYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZXMgcmVmcmVzaCB0b2tlbnMgdXNpbmcgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBKU09OIGJvZHkuIFRoZSBoYW5kbGluZyBmb3IgdGhpcyBtZXRob2QgaXMgdGhlIHNhbWUgYXMgdGhlIHJldm9rZVJlZnJlc2hUb2tlbiBtZXRob2RcbiAgICogYW5kIGlzIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiB5b3UgcHJvdmlkZSBpbiB0aGUgUmVmcmVzaERlbGV0ZVJlcXVlc3Qgb2JqZWN0LiBTZWUgdGhhdCBtZXRob2QgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7UmVmcmVzaFRva2VuUmV2b2tlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBpbmZvcm1hdGlvbiB1c2VkIHRvIHJldm9rZSB0aGUgcmVmcmVzaCB0b2tlbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbnNXaXRoUmVxdWVzdChyZXF1ZXN0OiBSZWZyZXNoVG9rZW5SZXZva2VSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyBhIHNpbmdsZSBVc2VyIGNvbnNlbnQgYnkgSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckNvbnNlbnRJZCBUaGUgVXNlciBDb25zZW50IElkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVVzZXJDb25zZW50KHVzZXJDb25zZW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckNvbnNlbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgYXBwbGljYXRpb25zIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25TZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoQXBwbGljYXRpb25zKHJlcXVlc3Q6IEFwcGxpY2F0aW9uU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25TZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24vc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlIGF1ZGl0IGxvZ3Mgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0F1ZGl0TG9nU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1NlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hBdWRpdExvZ3MocmVxdWVzdDogQXVkaXRMb2dTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1NlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEF1ZGl0TG9nU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vYXVkaXQtbG9nL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGNvbnNlbnRzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtDb25zZW50U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaENvbnNlbnRzKHJlcXVlc3Q6IENvbnNlbnRTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBlbWFpbCB0ZW1wbGF0ZXMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0VtYWlsVGVtcGxhdGVTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoRW1haWxUZW1wbGF0ZXMocmVxdWVzdDogRW1haWxUZW1wbGF0ZVNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZS9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBlbnRpdGllcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RW50aXR5U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoRW50aXRpZXMocmVxdWVzdDogRW50aXR5U2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBlbnRpdGllcyBmb3IgdGhlIGdpdmVuIGlkcy4gSWYgYW55IElkIGlzIGludmFsaWQsIGl0IGlzIGlnbm9yZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gaWRzIFRoZSBlbnRpdHkgaWRzIHRvIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFbnRpdGllc0J5SWRzKGlkczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvc2VhcmNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkcycsIGlkcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgRW50aXR5IEdyYW50cyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RW50aXR5R3JhbnRTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eUdyYW50U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEVudGl0eUdyYW50cyhyZXF1ZXN0OiBFbnRpdHlHcmFudFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eUdyYW50U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5R3JhbnRTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS9ncmFudC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgZW50aXR5IHR5cGVzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEVudGl0eVR5cGVzKHJlcXVlc3Q6IEVudGl0eVR5cGVTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlIGV2ZW50IGxvZ3Mgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50TG9nU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFdmVudExvZ1NlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFdmVudExvZ3MocmVxdWVzdDogRXZlbnRMb2dTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFdmVudExvZ1NlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEV2ZW50TG9nU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vZXZlbnQtbG9nL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGdyb3VwIG1lbWJlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0dyb3VwTWVtYmVyU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cE1lbWJlclNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hHcm91cE1lbWJlcnMocmVxdWVzdDogR3JvdXBNZW1iZXJTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cE1lbWJlclNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEdyb3VwTWVtYmVyU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cC9tZW1iZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgZ3JvdXBzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtHcm91cFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoR3JvdXBzKHJlcXVlc3Q6IEdyb3VwU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3RzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaElQQWNjZXNzQ29udHJvbExpc3RzKHJlcXVlc3Q6IElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGlkZW50aXR5IHByb3ZpZGVycyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlclNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hJZGVudGl0eVByb3ZpZGVycyhyZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGtleXMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0tleVNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEtleXMocmVxdWVzdDogS2V5U2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXkvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgbGFtYmRhcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7TGFtYmRhU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoTGFtYmRhcyhyZXF1ZXN0OiBMYW1iZGFTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYS9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgbG9naW4gcmVjb3JkcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7TG9naW5SZWNvcmRTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVjb3JkU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaExvZ2luUmVjb3JkcyhyZXF1ZXN0OiBMb2dpblJlY29yZFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVjb3JkU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZWNvcmRTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9sb2dpbi1yZWNvcmQvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGVuYW50cyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VGVuYW50U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoVGVuYW50cyhyZXF1ZXN0OiBUZW5hbnRTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGVtZXMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1RoZW1lU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hUaGVtZXMocmVxdWVzdDogVGhlbWVTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZS9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB1c2VyIGNvbW1lbnRzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVc2VyQ29tbWVudFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbW1lbnRTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoVXNlckNvbW1lbnRzKHJlcXVlc3Q6IFVzZXJDb21tZW50U2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbW1lbnRTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29tbWVudFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb21tZW50L3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlcnMgZm9yIHRoZSBnaXZlbiBpZHMuIElmIGFueSBJZCBpcyBpbnZhbGlkLCBpdCBpcyBpZ25vcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGlkcyBUaGUgdXNlciBpZHMgdG8gc2VhcmNoIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBzZWFyY2hVc2Vyc0J5SWRzLCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHNlYXJjaFVzZXJzKGlkczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZHMnLCBpZHMpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlcnMgZm9yIHRoZSBnaXZlbiBpZHMuIElmIGFueSBJZCBpcyBpbnZhbGlkLCBpdCBpcyBpZ25vcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGlkcyBUaGUgdXNlciBpZHMgdG8gc2VhcmNoIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaFVzZXJzQnlJZHMoaWRzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkcycsIGlkcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gY29uc3RyYWludHMuIEZpZWxkcyB1c2VkOiBpZHMsIHF1ZXJ5LCBxdWVyeVN0cmluZywgbnVtYmVyT2ZSZXN1bHRzLCBvcmRlckJ5LCBzdGFydFJvdyxcbiAgICogICAgYW5kIHNvcnRGaWVsZHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hVc2Vyc0J5UXVlcnkocmVxdWVzdDogU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlcnMgZm9yIHRoZSBnaXZlbiBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGNvbnN0cmFpbnRzLiBGaWVsZHMgdXNlZDogaWRzLCBxdWVyeSwgcXVlcnlTdHJpbmcsIG51bWJlck9mUmVzdWx0cywgb3JkZXJCeSwgc3RhcnRSb3csXG4gICAqICAgIGFuZCBzb3J0RmllbGRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHNlYXJjaFVzZXJzQnlRdWVyeSwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBzZWFyY2hVc2Vyc0J5UXVlcnlTdHJpbmcocmVxdWVzdDogU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSB3ZWJob29rIGV2ZW50IGxvZ3Mgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1dlYmhvb2tFdmVudExvZ1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va0V2ZW50TG9nU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaFdlYmhvb2tFdmVudExvZ3MocmVxdWVzdDogV2ViaG9va0V2ZW50TG9nU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va0V2ZW50TG9nU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va0V2ZW50TG9nU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vd2ViaG9vay1ldmVudC1sb2cvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgd2ViaG9va3Mgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1dlYmhvb2tTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoV2ViaG9va3MocmVxdWVzdDogV2ViaG9va1NlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJob29rU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYW4gZW1haWwgdXNpbmcgYW4gZW1haWwgdGVtcGxhdGUgaWQuIFlvdSBjYW4gb3B0aW9uYWxseSBwcm92aWRlIDxjb2RlPnJlcXVlc3REYXRhPC9jb2RlPiB0byBhY2Nlc3Mga2V5IHZhbHVlXG4gICAqIHBhaXJzIGluIHRoZSBlbWFpbCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgVGhlIElkIGZvciB0aGUgdGVtcGxhdGUuXG4gICAqIEBwYXJhbSB7U2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlbmQgZW1haWwgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBzZW5kIHRoZSBlbWFpbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VuZFJlc3BvbnNlPj59XG4gICAqL1xuICBzZW5kRW1haWwoZW1haWxUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBTZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VuZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlbmRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3NlbmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW1haWxUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBvdXQgYW4gZW1haWwgdG8gYSBwYXJlbnQgdGhhdCB0aGV5IG5lZWQgdG8gcmVnaXN0ZXIgYW5kIGNyZWF0ZSBhIGZhbWlseSBvciBuZWVkIHRvIGxvZyBpbiBhbmQgYWRkIGEgY2hpbGQgdG8gdGhlaXIgZXhpc3RpbmcgZmFtaWx5LlxuICAgKlxuICAgKiBAcGFyYW0ge0ZhbWlseUVtYWlsUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgcGFyZW50IGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBzZW5kRmFtaWx5UmVxdWVzdEVtYWlsKHJlcXVlc3Q6IEZhbWlseUVtYWlsUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHkvcmVxdWVzdCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBwYXNzd29yZGxlc3MgYXV0aGVudGljYXRpb24gY29kZSBpbiBhbiBlbWFpbCB0byBjb21wbGV0ZSBsb2dpbi5cbiAgICpcbiAgICogQHBhcmFtIHtQYXNzd29yZGxlc3NTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgcGFzc3dvcmRsZXNzIHNlbmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBzZW5kIGFuIGVtYWlsIGNvbnRhaW5pbmcgYSBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBzZW5kUGFzc3dvcmRsZXNzQ29kZShyZXF1ZXN0OiBQYXNzd29yZGxlc3NTZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcGFzc3dvcmRsZXNzL3NlbmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBjb2RlIHRvIGFzc2lzdCBpbiBzZXR0aW5nIHVwIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gb3IgZGlzYWJsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclNlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBzZW5kIHRoZSBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gc2VuZFR3b0ZhY3RvckNvZGVGb3JFbmFibGVEaXNhYmxlLCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHNlbmRUd29GYWN0b3JDb2RlKHJlcXVlc3Q6IFR3b0ZhY3RvclNlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlbmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBjb2RlIHRvIGFzc2lzdCBpbiBzZXR0aW5nIHVwIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gb3IgZGlzYWJsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclNlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBzZW5kIHRoZSBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBzZW5kVHdvRmFjdG9yQ29kZUZvckVuYWJsZURpc2FibGUocmVxdWVzdDogVHdvRmFjdG9yU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGNvZGUgdG8gYWxsb3cgdGhlIGNvbXBsZXRpb24gb2YgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR3b0ZhY3RvcklkIFRoZSBJZCByZXR1cm5lZCBieSB0aGUgTG9naW4gQVBJIG5lY2Vzc2FyeSB0byBjb21wbGV0ZSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gc2VuZFR3b0ZhY3RvckNvZGVGb3JMb2dpblVzaW5nTWV0aG9kLCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHNlbmRUd29GYWN0b3JDb2RlRm9yTG9naW4odHdvRmFjdG9ySWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZW5kJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHR3b0ZhY3RvcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gY29kZSB0byBhbGxvdyB0aGUgY29tcGxldGlvbiBvZiBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHdvRmFjdG9ySWQgVGhlIElkIHJldHVybmVkIGJ5IHRoZSBMb2dpbiBBUEkgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yU2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIFR3byBGYWN0b3Igc2VuZCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIFR3byBGYWN0b3IgY29kZSB0byB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgc2VuZFR3b0ZhY3RvckNvZGVGb3JMb2dpblVzaW5nTWV0aG9kKHR3b0ZhY3RvcklkOiBzdHJpbmcsIHJlcXVlc3Q6IFR3b0ZhY3RvclNlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlbmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodHdvRmFjdG9ySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlZ2lucyBhIGxvZ2luIHJlcXVlc3QgZm9yIGEgM3JkIHBhcnR5IGxvZ2luIHRoYXQgcmVxdWlyZXMgdXNlciBpbnRlcmFjdGlvbiBzdWNoIGFzIEhZUFIuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSB0aGlyZC1wYXJ0eSBsb2dpbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gZnJvbSB0aGUgdGhpcmQtcGFydHkgbG9naW5cbiAgICogICAgcHJvdmlkZXJzIHRoYXQgRnVzaW9uQXV0aCB1c2VzIHRvIHJlY29uY2lsZSB0aGUgdXNlcidzIGFjY291bnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0SWRlbnRpdHlQcm92aWRlckxvZ2luKHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIHBhc3N3b3JkbGVzcyBsb2dpbiByZXF1ZXN0IGJ5IGdlbmVyYXRpbmcgYSBwYXNzd29yZGxlc3MgY29kZS4gVGhpcyBjb2RlIGNhbiBiZSBzZW50IHRvIHRoZSBVc2VyIHVzaW5nIHRoZSBTZW5kXG4gICAqIFBhc3N3b3JkbGVzcyBDb2RlIEFQSSBvciB1c2luZyBhIG1lY2hhbmlzbSBvdXRzaWRlIG9mIEZ1c2lvbkF1dGguIFRoZSBwYXNzd29yZGxlc3MgbG9naW4gaXMgY29tcGxldGVkIGJ5IHVzaW5nIHRoZSBQYXNzd29yZGxlc3MgTG9naW4gQVBJIHdpdGggdGhpcyBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge1Bhc3N3b3JkbGVzc1N0YXJ0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcGFzc3dvcmRsZXNzIHN0YXJ0IHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gYmVnaW4gdGhlIHBhc3N3b3JkbGVzcyBsb2dpbiByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZGxlc3NTdGFydFJlc3BvbnNlPj59XG4gICAqL1xuICBzdGFydFBhc3N3b3JkbGVzc0xvZ2luKHJlcXVlc3Q6IFBhc3N3b3JkbGVzc1N0YXJ0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UGFzc3dvcmRsZXNzU3RhcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxQYXNzd29yZGxlc3NTdGFydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcGFzc3dvcmRsZXNzL3N0YXJ0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBUd28tRmFjdG9yIGxvZ2luIHJlcXVlc3QgYnkgZ2VuZXJhdGluZyBhIHR3by1mYWN0b3IgaWRlbnRpZmllci4gVGhpcyBjb2RlIGNhbiB0aGVuIGJlIHNlbnQgdG8gdGhlIFR3byBGYWN0b3IgU2VuZCBcbiAgICogQVBJICgvYXBpL3R3by1mYWN0b3Ivc2VuZClpbiBvcmRlciB0byBzZW5kIGEgb25lLXRpbWUgdXNlIGNvZGUgdG8gYSB1c2VyLiBZb3UgY2FuIGFsc28gdXNlIG9uZS10aW1lIHVzZSBjb2RlIHJldHVybmVkIFxuICAgKiB0byBzZW5kIHRoZSBjb2RlIG91dC1vZi1iYW5kLiBUaGUgVHdvLUZhY3RvciBsb2dpbiBpcyBjb21wbGV0ZWQgYnkgbWFraW5nIGEgcmVxdWVzdCB0byB0aGUgVHdvLUZhY3RvciBMb2dpbiBcbiAgICogQVBJICgvYXBpL3R3by1mYWN0b3IvbG9naW4pLiB3aXRoIHRoZSB0d28tZmFjdG9yIGlkZW50aWZpZXIgYW5kIHRoZSBvbmUtdGltZSB1c2UgY29kZS5cbiAgICogXG4gICAqIFRoaXMgQVBJIGlzIGludGVuZGVkIHRvIGFsbG93IHlvdSB0byBiZWdpbiBhIFR3by1GYWN0b3IgbG9naW4gb3V0c2lkZSBhIG5vcm1hbCBsb2dpbiB0aGF0IG9yaWdpbmF0ZWQgZnJvbSB0aGUgTG9naW4gQVBJICgvYXBpL2xvZ2luKS5cbiAgICpcbiAgICogQHBhcmFtIHtUd29GYWN0b3JTdGFydFJlcXVlc3R9IHJlcXVlc3QgVGhlIFR3by1GYWN0b3Igc3RhcnQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBiZWdpbiB0aGUgVHdvLUZhY3RvciBsb2dpbiByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JTdGFydFJlc3BvbnNlPj59XG4gICAqL1xuICBzdGFydFR3b0ZhY3RvckxvZ2luKHJlcXVlc3Q6IFR3b0ZhY3RvclN0YXJ0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yU3RhcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUd29GYWN0b3JTdGFydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zdGFydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbnkgYnkgZ2VuZXJhdGluZyBhIG5ldyBjaGFsbGVuZ2UgZm9yIHRoZSB1c2VyXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViQXV0aG5TdGFydFJlcXVlc3R9IHJlcXVlc3QgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBuZWNlc3NhcnkgZm9yIHN0YXJ0aW5nIHRoZSBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRoblN0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0V2ViQXV0aG5Mb2dpbihyZXF1ZXN0OiBXZWJBdXRoblN0YXJ0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5TdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYkF1dGhuU3RhcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuL3N0YXJ0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBXZWJBdXRobiByZWdpc3RyYXRpb24gY2VyZW1vbnkgYnkgZ2VuZXJhdGluZyBhIG5ldyBjaGFsbGVuZ2UgZm9yIHRoZSB1c2VyXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3Igc3RhcnRpbmcgdGhlIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRoblJlZ2lzdGVyU3RhcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgc3RhcnRXZWJBdXRoblJlZ2lzdHJhdGlvbihyZXF1ZXN0OiBXZWJBdXRoblJlZ2lzdGVyU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRoblJlZ2lzdGVyU3RhcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJBdXRoblJlZ2lzdGVyU3RhcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuL3JlZ2lzdGVyL3N0YXJ0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgbG9naW4gdXNpbmcgYSAyRkEgY2hhbGxlbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yTG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSBsb2dpbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXIgY3JlZGVudGlhbHMgdXNlZCB0byBsb2cgdGhlbSBpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgdHdvRmFjdG9yTG9naW4ocmVxdWVzdDogVHdvRmFjdG9yTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBBUEkga2V5IGJ5IGdpdmVuIGlkXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBpS2V5SWQgVGhlIElkIG9mIHRoZSBBUEkga2V5IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBUElLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIEFQSSBLZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVBUElLZXkoYXBpS2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEFQSUtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFQSUtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcGlLZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IGFwcGxpY2F0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgYXBwbGljYXRpb24gcm9sZSB3aXRoIHRoZSBnaXZlbiBJZCBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSByb2xlIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcm9sZUlkIFRoZSBJZCBvZiB0aGUgcm9sZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgcm9sZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlQXBwbGljYXRpb25Sb2xlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJvbGVJZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJyb2xlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChyb2xlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY29ubmVjdG9yIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbm5lY3RvcklkIFRoZSBJZCBvZiB0aGUgY29ubmVjdG9yIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtDb25uZWN0b3JSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IGNvbm5lY3RvciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUNvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCwgcmVxdWVzdDogQ29ubmVjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY29uc2VudCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgVGhlIElkIG9mIHRoZSBjb25zZW50IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IGNvbnNlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlQ29uc2VudChjb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IENvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZW1haWwgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgZW1haWwgdGVtcGxhdGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VtYWlsVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgZW1haWwgdGVtcGxhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRW1haWxUZW1wbGF0ZShlbWFpbFRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVtYWlsVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW1haWxUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW1haWxUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIEVudGl0eSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW50aXR5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IEVudGl0eSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUVudGl0eShlbnRpdHlJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgRW50aXR5IFR5cGUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IFR5cGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgRW50aXR5IFR5cGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRW50aXR5VHlwZShlbnRpdHlUeXBlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBlcm1pc3Npb24gd2l0aCB0aGUgZ2l2ZW4gSWQgZm9yIHRoZSBlbnRpdHkgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBlbnRpdHlUeXBlIHRoYXQgdGhlIHBlcm1pc3Npb24gYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSBwZXJtaXNzaW9uSWQgVGhlIElkIG9mIHRoZSBwZXJtaXNzaW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IHBlcm1pc3Npb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRW50aXR5VHlwZVBlcm1pc3Npb24oZW50aXR5VHlwZUlkOiBVVUlELCBwZXJtaXNzaW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJwZXJtaXNzaW9uXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChwZXJtaXNzaW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZm9ybSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmb3JtSWQgVGhlIElkIG9mIHRoZSBmb3JtIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtGb3JtUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBmb3JtIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUZvcm0oZm9ybUlkOiBVVUlELCByZXF1ZXN0OiBGb3JtUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZm9ybUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGZvcm0gZmllbGQgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmllbGRJZCBUaGUgSWQgb2YgdGhlIGZvcm0gZmllbGQgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0Zvcm1GaWVsZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgZm9ybSBmaWVsZCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUZvcm1GaWVsZChmaWVsZElkOiBVVUlELCByZXF1ZXN0OiBGb3JtRmllbGRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtRmllbGRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmllbGRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBncm91cCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBncm91cElkIFRoZSBJZCBvZiB0aGUgZ3JvdXAgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0dyb3VwUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IGdyb3VwIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVHcm91cChncm91cElkOiBVVUlELCByZXF1ZXN0OiBHcm91cFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGdyb3VwSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG1lbWJlciBpbiBhIGdyb3VwLlxuICAgKlxuICAgKiBAcGFyYW0ge01lbWJlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZ3JvdXAgbWVtYmVyKHMpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZW1iZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlR3JvdXBNZW1iZXJzKHJlcXVlc3Q6IE1lbWJlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lbWJlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lbWJlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvbWVtYmVyJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjY2Vzc0NvbnRyb2xMaXN0SWQgVGhlIElkIG9mIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IElQIEFjY2VzcyBDb250cm9sIExpc3QgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlSVBBY2Nlc3NDb250cm9sTGlzdChhY2Nlc3NDb250cm9sTGlzdElkOiBVVUlELCByZXF1ZXN0OiBJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY2Nlc3NDb250cm9sTGlzdElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgdXBkYXRlZCBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVJZGVudGl0eVByb3ZpZGVyKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCwgcmVxdWVzdDogSWRlbnRpdHlQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgYXZhaWxhYmxlIGludGVncmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtJbnRlZ3JhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBpbnRlZ3JhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50ZWdyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlSW50ZWdyYXRpb25zKHJlcXVlc3Q6IEludGVncmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50ZWdyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJbnRlZ3JhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaW50ZWdyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGtleSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIGtleSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7S2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IGtleSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbGFtYmRhIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGxhbWJkYUlkIFRoZSBJZCBvZiB0aGUgbGFtYmRhIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtMYW1iZGFSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgbGFtYmRhIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlTGFtYmRhKGxhbWJkYUlkOiBVVUlELCByZXF1ZXN0OiBMYW1iZGFSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NhZ2VUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IG1lc3NhZ2UgdGVtcGxhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVNZXNzYWdlVGVtcGxhdGUobWVzc2FnZVRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzYWdlVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBtZXNzZW5nZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2VuZ2VySWQgVGhlIElkIG9mIHRoZSBtZXNzZW5nZXIgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge01lc3NlbmdlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgbWVzc2VuZ2VyIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlELCByZXF1ZXN0OiBNZXNzZW5nZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBPQXV0aCBzY29wZSB3aXRoIHRoZSBnaXZlbiBJZCBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSBPQXV0aCBzY29wZSBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHNjb3BlSWQgVGhlIElkIG9mIHRoZSBPQXV0aCBzY29wZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25PQXV0aFNjb3BlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IE9BdXRoIHNjb3BlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlT0F1dGhTY29wZShhcHBsaWNhdGlvbklkOiBVVUlELCBzY29wZUlkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInNjb3BlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChzY29wZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBkZWZpbmVkIGluIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgd2hvc2UgcmVnaXN0cmF0aW9uIGlzIGdvaW5nIHRvIGJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7UmVnaXN0cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVJlZ2lzdHJhdGlvbih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFJlZ2lzdHJhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1N5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgc3lzdGVtIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlU3lzdGVtQ29uZmlndXJhdGlvbihyZXF1ZXN0OiBTeXN0ZW1Db25maWd1cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS1jb25maWd1cmF0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB0ZW5hbnQgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1RlbmFudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyB0ZW5hbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVUZW5hbnQodGVuYW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFRlbmFudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRlbmFudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHRoZW1lIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRoZW1lSWQgVGhlIElkIG9mIHRoZSB0aGVtZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VGhlbWVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgdGhlbWUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVRoZW1lKHRoZW1lSWQ6IFVVSUQsIHJlcXVlc3Q6IFRoZW1lUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUaGVtZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGhlbWVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgdXNlciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVVc2VyKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVXNlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGFjdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyB1c2VyIGFjdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCwgcmVxdWVzdDogVXNlckFjdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdXNlciBhY3Rpb24gcmVhc29uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25SZWFzb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlYXNvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyB1c2VyIGFjdGlvbiByZWFzb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlVXNlckFjdGlvblJlYXNvbih1c2VyQWN0aW9uUmVhc29uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZWFzb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25SZWFzb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgc2luZ2xlIFVzZXIgY29uc2VudCBieSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIFRoZSBVc2VyIENvbnNlbnQgSWRcbiAgICogQHBhcmFtIHtVc2VyQ29uc2VudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlciBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVVc2VyQ29uc2VudCh1c2VyQ29uc2VudElkOiBVVUlELCByZXF1ZXN0OiBVc2VyQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbnNlbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQ29uc2VudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHdlYmhvb2sgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0lkIFRoZSBJZCBvZiB0aGUgd2ViaG9vayB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7V2ViaG9va1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyB3ZWJob29rIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVdlYmhvb2sod2ViaG9va0lkOiBVVUlELCByZXF1ZXN0OiBXZWJob29rUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0lkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgb3IgdXBkYXRlcyBhbiBFbnRpdHkgR3JhbnQuIFRoaXMgaXMgd2hlbiBhIFVzZXIvRW50aXR5IGlzIGdyYW50ZWQgcGVybWlzc2lvbnMgdG8gYW4gRW50aXR5LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRoYXQgdGhlIFVzZXIvRW50aXR5IGlzIGJlaW5nIGdyYW50ZWQgYWNjZXNzIHRvLlxuICAgKiBAcGFyYW0ge0VudGl0eUdyYW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBFbnRpdHkgR3JhbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHVwc2VydEVudGl0eUdyYW50KGVudGl0eUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlHcmFudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwiZ3JhbnRcIilcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBlbmQtdXNlciBwcm92aWRlZCB1c2VyX2NvZGUgZnJvbSB0aGUgdXNlci1pbnRlcmFjdGlvbiBvZiB0aGUgRGV2aWNlIEF1dGhvcml6YXRpb24gR3JhbnQuXG4gICAqIElmIHlvdSBidWlsZCB5b3VyIG93biBhY3RpdmF0aW9uIGZvcm0geW91IHNob3VsZCB2YWxpZGF0ZSB0aGUgdXNlciBwcm92aWRlZCBjb2RlIHByaW9yIHRvIGJlZ2lubmluZyB0aGUgQXV0aG9yaXphdGlvbiBncmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJfY29kZSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgVGhlIGNsaWVudCBpZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdmFsaWRhdGVEZXZpY2UodXNlcl9jb2RlOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvZGV2aWNlL3ZhbGlkYXRlJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJfY29kZScsIHVzZXJfY29kZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2NsaWVudF9pZCcsIGNsaWVudF9pZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBwcm92aWRlZCBKV1QgKGVuY29kZWQgSldUIHN0cmluZykgdG8gZW5zdXJlIHRoZSB0b2tlbiBpcyB2YWxpZC4gQSB2YWxpZCBhY2Nlc3MgdG9rZW4gaXMgcHJvcGVybHlcbiAgICogc2lnbmVkIGFuZCBub3QgZXhwaXJlZC5cbiAgICogPHA+XG4gICAqIFRoaXMgQVBJIG1heSBiZSB1c2VkIHRvIHZlcmlmeSB0aGUgSldUIGFzIHdlbGwgYXMgZGVjb2RlIHRoZSBlbmNvZGVkIEpXVCBpbnRvIGh1bWFuIHJlYWRhYmxlIGlkZW50aXR5IGNsYWltcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWYWxpZGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICB2YWxpZGF0ZUpXVChlbmNvZGVkSldUOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZhbGlkYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8VmFsaWRhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvdmFsaWRhdGUnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSXQncyBhIEpXVCB2ZW5kaW5nIG1hY2hpbmUhXG4gICAqIFxuICAgKiBJc3N1ZSBhIG5ldyBhY2Nlc3MgdG9rZW4gKEpXVCkgd2l0aCB0aGUgcHJvdmlkZWQgY2xhaW1zIGluIHRoZSByZXF1ZXN0LiBUaGlzIEpXVCBpcyBub3Qgc2NvcGVkIHRvIGEgdGVuYW50IG9yIHVzZXIsIGl0IGlzIGEgZnJlZSBmb3JtIFxuICAgKiB0b2tlbiB0aGF0IHdpbGwgY29udGFpbiB3aGF0IGNsYWltcyB5b3UgcHJvdmlkZS5cbiAgICogPHA+XG4gICAqIFRoZSBpYXQsIGV4cCBhbmQganRpIGNsYWltcyB3aWxsIGJlIGFkZGVkIGJ5IEZ1c2lvbkF1dGgsIGFsbCBvdGhlciBjbGFpbXMgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyLlxuICAgKiBcbiAgICogSWYgYSBUVEwgaXMgbm90IHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LCB0aGUgVFRMIHdpbGwgYmUgcmV0cmlldmVkIGZyb20gdGhlIGRlZmF1bHQgVGVuYW50IG9yIHRoZSBUZW5hbnQgc3BlY2lmaWVkIG9uIHRoZSByZXF1ZXN0IGVpdGhlciBcbiAgICogYnkgd2F5IG9mIHRoZSBYLUZ1c2lvbkF1dGgtVGVuYW50SWQgcmVxdWVzdCBoZWFkZXIsIG9yIGEgdGVuYW50IHNjb3BlZCBBUEkga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge0pXVFZlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBjbGFpbXMgZm9yIHRoaXMgSldULlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RWZW5kUmVzcG9uc2U+Pn1cbiAgICovXG4gIHZlbmRKV1QocmVxdWVzdDogSldUVmVuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXVFZlbmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxKV1RWZW5kUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvdmVuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1zIGEgZW1haWwgdmVyaWZpY2F0aW9uLiBUaGUgSWQgZ2l2ZW4gaXMgdXN1YWxseSBmcm9tIGFuIGVtYWlsIHNlbnQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJpZmljYXRpb25JZCBUaGUgZW1haWwgdmVyaWZpY2F0aW9uIElkIHNlbnQgdG8gdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byB2ZXJpZnlFbWFpbEFkZHJlc3MgYW5kIGNoYW5nZWQgdG8gdGFrZSBhIEpTT04gcmVxdWVzdCBib2R5LCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHZlcmlmeUVtYWlsKHZlcmlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHZlcmlmaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybXMgYSB1c2VyJ3MgZW1haWwgYWRkcmVzcy4gXG4gICAqIFxuICAgKiBUaGUgcmVxdWVzdCBib2R5IHdpbGwgY29udGFpbiB0aGUgdmVyaWZpY2F0aW9uSWQuIFlvdSBtYXkgYWxzbyBiZSByZXF1aXJlZCB0byBzZW5kIGEgb25lLXRpbWUgdXNlIGNvZGUgYmFzZWQgdXBvbiB5b3VyIGNvbmZpZ3VyYXRpb24uIFdoZW4gXG4gICAqIHRoZSB0ZW5hbnQgaXMgY29uZmlndXJlZCB0byBnYXRlIGEgdXNlciB1bnRpbCB0aGVpciBlbWFpbCBhZGRyZXNzIGlzIHZlcmlmaWVkLCB0aGlzIHByb2NlZHVyZXMgcmVxdWlyZXMgdHdvIHZhbHVlcyBpbnN0ZWFkIG9mIG9uZS4gXG4gICAqIFRoZSB2ZXJpZmljYXRpb25JZCBpcyBhIGhpZ2ggZW50cm9weSB2YWx1ZSBhbmQgdGhlIG9uZS10aW1lIHVzZSBjb2RlIGlzIGEgbG93IGVudHJvcHkgdmFsdWUgdGhhdCBpcyBlYXNpbHkgZW50ZXJlZCBpbiBhIHVzZXIgaW50ZXJhY3RpdmUgZm9ybS4gVGhlIFxuICAgKiB0d28gdmFsdWVzIHRvZ2V0aGVyIGFyZSBhYmxlIHRvIGNvbmZpcm0gYSB1c2VyJ3MgZW1haWwgYWRkcmVzcyBhbmQgbWFyayB0aGUgdXNlcidzIGVtYWlsIGFkZHJlc3MgYXMgdmVyaWZpZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5RW1haWxSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHZlcmlmaWNhdGlvbklkIGFuZCBvcHRpb25hbCBvbmUtdGltZSB1c2UgY29kZSBwYWlyZWQgd2l0aCB0aGUgdmVyaWZpY2F0aW9uSWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHZlcmlmeUVtYWlsQWRkcmVzcyhyZXF1ZXN0OiBWZXJpZnlFbWFpbFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRtaW5pc3RyYXRpdmVseSB2ZXJpZnkgYSB1c2VyJ3MgZW1haWwgYWRkcmVzcy4gVXNlIHRoaXMgbWV0aG9kIHRvIGJ5cGFzcyBlbWFpbCB2ZXJpZmljYXRpb24gZm9yIHRoZSB1c2VyLlxuICAgKiBcbiAgICogVGhlIHJlcXVlc3QgYm9keSB3aWxsIGNvbnRhaW4gdGhlIHVzZXJJZCB0byBiZSB2ZXJpZmllZC4gQW4gQVBJIGtleSBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgdGhlIHVzZXJJZCBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeUVtYWlsUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VySWQgdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB2ZXJpZnlFbWFpbEFkZHJlc3NCeVVzZXJJZChyZXF1ZXN0OiBWZXJpZnlFbWFpbFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybXMgYW4gYXBwbGljYXRpb24gcmVnaXN0cmF0aW9uLiBUaGUgSWQgZ2l2ZW4gaXMgdXN1YWxseSBmcm9tIGFuIGVtYWlsIHNlbnQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJpZmljYXRpb25JZCBUaGUgcmVnaXN0cmF0aW9uIHZlcmlmaWNhdGlvbiBJZCBzZW50IHRvIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gdmVyaWZ5VXNlclJlZ2lzdHJhdGlvbiBhbmQgY2hhbmdlZCB0byB0YWtlIGEgSlNPTiByZXF1ZXN0IGJvZHksIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgdmVyaWZ5UmVnaXN0cmF0aW9uKHZlcmlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh2ZXJpZmljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1zIGEgdXNlcidzIHJlZ2lzdHJhdGlvbi4gXG4gICAqIFxuICAgKiBUaGUgcmVxdWVzdCBib2R5IHdpbGwgY29udGFpbiB0aGUgdmVyaWZpY2F0aW9uSWQuIFlvdSBtYXkgYWxzbyBiZSByZXF1aXJlZCB0byBzZW5kIGEgb25lLXRpbWUgdXNlIGNvZGUgYmFzZWQgdXBvbiB5b3VyIGNvbmZpZ3VyYXRpb24uIFdoZW4gXG4gICAqIHRoZSBhcHBsaWNhdGlvbiBpcyBjb25maWd1cmVkIHRvIGdhdGUgYSB1c2VyIHVudGlsIHRoZWlyIHJlZ2lzdHJhdGlvbiBpcyB2ZXJpZmllZCwgdGhpcyBwcm9jZWR1cmVzIHJlcXVpcmVzIHR3byB2YWx1ZXMgaW5zdGVhZCBvZiBvbmUuIFxuICAgKiBUaGUgdmVyaWZpY2F0aW9uSWQgaXMgYSBoaWdoIGVudHJvcHkgdmFsdWUgYW5kIHRoZSBvbmUtdGltZSB1c2UgY29kZSBpcyBhIGxvdyBlbnRyb3B5IHZhbHVlIHRoYXQgaXMgZWFzaWx5IGVudGVyZWQgaW4gYSB1c2VyIGludGVyYWN0aXZlIGZvcm0uIFRoZSBcbiAgICogdHdvIHZhbHVlcyB0b2dldGhlciBhcmUgYWJsZSB0byBjb25maXJtIGEgdXNlcidzIHJlZ2lzdHJhdGlvbiBhbmQgbWFyayB0aGUgdXNlcidzIHJlZ2lzdHJhdGlvbiBhcyB2ZXJpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlSZWdpc3RyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHZlcmlmaWNhdGlvbklkIGFuZCBvcHRpb25hbCBvbmUtdGltZSB1c2UgY29kZSBwYWlyZWQgd2l0aCB0aGUgdmVyaWZpY2F0aW9uSWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHZlcmlmeVVzZXJSZWdpc3RyYXRpb24ocmVxdWVzdDogVmVyaWZ5UmVnaXN0cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuXG4gIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICogUHJpdmF0ZSBtZXRob2RzXG4gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4gIC8qKlxuICAgKiBjcmVhdGVzIGEgcmVzdCBjbGllbnRcbiAgICpcbiAgICogQHJldHVybnMgVGhlIFJFU1RDbGllbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY2FsbC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc3RhcnQ8UlQsIEVSVD4oKTogSVJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFJULCBFUlQ+KClcbiAgICAgICAgICAgICAgIC53aXRoQXV0aG9yaXphdGlvbih0aGlzLmFwaUtleSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0QW5vbnltb3VzPFJULCBFUlQ+KCk6IElSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICBsZXQgY2xpZW50ID0gdGhpcy5jbGllbnRCdWlsZGVyLmJ1aWxkPFJULCBFUlQ+KHRoaXMuaG9zdCk7XG5cbiAgICBpZiAodGhpcy50ZW5hbnRJZCAhPSBudWxsKSB7XG4gICAgICBjbGllbnQud2l0aEhlYWRlcignWC1GdXNpb25BdXRoLVRlbmFudElkJywgdGhpcy50ZW5hbnRJZCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3JlZGVudGlhbHMgIT0gbnVsbCkge1xuICAgICAgY2xpZW50LndpdGhDcmVkZW50aWFscyh0aGlzLmNyZWRlbnRpYWxzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZ1c2lvbkF1dGhDbGllbnQ7XG5cbi8qKlxuICogQSAxMjggYml0IFVVSUQgaW4gc3RyaW5nIGZvcm1hdCBcIjgtNC00LTQtMTJcIiwgZm9yIGV4YW1wbGUgXCI1OEQ1RTIxMi0xNjVCLTRDQTAtOTA5Qi1DODZCOUNFRTAxMTFcIi5cbiAqL1xuZXhwb3J0IHR5cGUgVVVJRCA9IHN0cmluZztcblxuXG4vKipcbiAqIEF1dGhvcml6YXRpb24gR3JhbnQgdHlwZXMgYXMgZGVmaW5lZCBieSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5XCI+VGhlIE9BdXRoIDIuMCBBdXRob3JpemF0aW9uXG4gKiBGcmFtZXdvcmsgLSBSRkMgNjc0OTwvYT4uXG4gKiA8cD5cbiAqIFNwZWNpZmljIG5hbWVzIGFzIGRlZmluZWQgYnkgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTkxI3NlY3Rpb24tNC4xXCI+XG4gKiBPQXV0aCAyLjAgRHluYW1pYyBDbGllbnQgUmVnaXN0cmF0aW9uIFByb3RvY29sIC0gUkZDIDc1OTEgU2VjdGlvbiA0LjE8L2E+XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBHcmFudFR5cGUge1xuICBhdXRob3JpemF0aW9uX2NvZGUgPSBcImF1dGhvcml6YXRpb25fY29kZVwiLFxuICBpbXBsaWNpdCA9IFwiaW1wbGljaXRcIixcbiAgcGFzc3dvcmQgPSBcInBhc3N3b3JkXCIsXG4gIGNsaWVudF9jcmVkZW50aWFscyA9IFwiY2xpZW50X2NyZWRlbnRpYWxzXCIsXG4gIHJlZnJlc2hfdG9rZW4gPSBcInJlZnJlc2hfdG9rZW5cIixcbiAgdW5rbm93biA9IFwidW5rbm93blwiLFxuICBkZXZpY2VfY29kZSA9IFwidXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6ZGV2aWNlX2NvZGVcIlxufVxuXG4vKipcbiAqIElkZW50aXR5IFByb3ZpZGVyIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclNlYXJjaFJlc3BvbnNlIHtcbiAgaWRlbnRpdHlQcm92aWRlcnM/OiBBcnJheTxCYXNlSWRlbnRpdHlQcm92aWRlcjxhbnk+PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVXNlZCB0byBpbmRpY2F0ZSB3aGF0IHR5cGUgb2YgYXR0ZXN0YXRpb24gd2FzIGluY2x1ZGVkIGluIHRoZSBhdXRoZW50aWNhdG9yIHJlc3BvbnNlIGZvciBhIGdpdmVuIFdlYkF1dGhuIGNyZWRlbnRpYWwgYXQgdGhlIHRpbWUgaXQgd2FzIGNyZWF0ZWRcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBBdHRlc3RhdGlvblR5cGUge1xuICBiYXNpYyA9IFwiYmFzaWNcIixcbiAgc2VsZiA9IFwic2VsZlwiLFxuICBhdHRlc3RhdGlvbkNhID0gXCJhdHRlc3RhdGlvbkNhXCIsXG4gIGFub255bWl6YXRpb25DYSA9IFwiYW5vbnltaXphdGlvbkNhXCIsXG4gIG5vbmUgPSBcIm5vbmVcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGRhdGVUaW1lU2Vjb25kc0Zvcm1hdD86IHN0cmluZztcbiAgem9uZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBDcmVhdGVkIFJlZ2lzdHJhdGlvbiBFdmVudC5cbiAqIDxwPlxuICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgdXNlci5yZWdpc3RyYXRpb24uY3JlYXRlIGV2ZW50IGluIHRoYXQgaXQgd2lsbCBiZSBzZW50IGFmdGVyIHRoZSB1c2VyIGhhcyBiZWVuIGNyZWF0ZWQuIFRoaXMgZXZlbnQgY2Fubm90IGJlIG1hZGVcbiAqIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25DcmVhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xufVxuXG4vKipcbiAqIFRoZSB1c2VyIGFjdGlvbiByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uUmVzcG9uc2Uge1xuICBhY3Rpb24/OiBVc2VyQWN0aW9uTG9nO1xuICBhY3Rpb25zPzogQXJyYXk8VXNlckFjdGlvbkxvZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNNU01lc3NhZ2Uge1xuICBwaG9uZU51bWJlcj86IHN0cmluZztcbiAgdGV4dE1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NlbmdlclRyYW5zcG9ydCB7XG59XG5cbi8qKlxuICogVXNlciByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gZm9yIGEgc2luZ2xlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb24ge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRpb25Ub2tlbj86IHN0cmluZztcbiAgY2xlYW5TcGVha0lkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdExvZ2luSW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHByZWZlcnJlZExhbmd1YWdlcz86IEFycmF5PHN0cmluZz47XG4gIHJvbGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIHRva2Vucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICB1c2VybmFtZVN0YXR1cz86IENvbnRlbnRTdGF0dXM7XG4gIHZlcmlmaWVkPzogYm9vbGVhbjtcbiAgdmVyaWZpZWRJbnN0YW50PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHJlcXVlc3RzIHRoYXQgY2FuIGNvbnRhaW4gZXZlbnQgaW5mb3JtYXRpb24uIFRoaXMgZXZlbnQgaW5mb3JtYXRpb24gaXMgdXNlZCB3aGVuIHNlbmRpbmcgV2ViaG9va3Mgb3IgZW1haWxzXG4gKiBkdXJpbmcgdGhlIHRyYW5zYWN0aW9uLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBldmVudCBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFdmVudFJlcXVlc3Qge1xuICBldmVudEluZm8/OiBFdmVudEluZm87XG59XG5cbi8qKlxuICogQSB3ZWJob29rIGNhbGwgYXR0ZW1wdCBsb2cuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rQXR0ZW1wdExvZyB7XG4gIGF0dGVtcHRSZXN1bHQ/OiBXZWJob29rQXR0ZW1wdFJlc3VsdDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVuZEluc3RhbnQ/OiBudW1iZXI7XG4gIGlkPzogVVVJRDtcbiAgc3RhcnRJbnN0YW50PzogbnVtYmVyO1xuICB3ZWJob29rQ2FsbFJlc3BvbnNlPzogV2ViaG9va0NhbGxSZXNwb25zZTtcbiAgd2ViaG9va0V2ZW50TG9nSWQ/OiBVVUlEO1xuICB3ZWJob29rSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RWZW5kUmVxdWVzdCB7XG4gIGNsYWltcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGtleUlkPzogVVVJRDtcbiAgdGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFdmVudCBsb2cgdXNlZCBpbnRlcm5hbGx5IGJ5IEZ1c2lvbkF1dGggdG8gaGVscCBkZXZlbG9wZXJzIGRlYnVnIGhvb2tzLCBXZWJob29rcywgZW1haWwgdGVtcGxhdGVzLCBldGMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2cge1xuICBpZD86IG51bWJlcjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgdHlwZT86IEV2ZW50TG9nVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwUmVzcG9uc2Uge1xuICBpZGVudGl0eVByb3ZpZGVyPzogSWRlbnRpdHlQcm92aWRlckRldGFpbHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckRldGFpbHMge1xuICBhcHBsaWNhdGlvbklkcz86IEFycmF5PFVVSUQ+O1xuICBpZD86IFVVSUQ7XG4gIGlkcEVuZHBvaW50Pzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBvYXV0aDI/OiBJZGVudGl0eVByb3ZpZGVyT2F1dGgyQ29uZmlndXJhdGlvbjtcbiAgdHlwZT86IElkZW50aXR5UHJvdmlkZXJUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRyb3NwZWN0UmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBVcGRhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyVXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIHdlYmhvb2tzXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IFdlYmhvb2tTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBDaGFuZ2UgcGFzc3dvcmQgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VQYXNzd29yZFJlc3BvbnNlIHtcbiAgb25lVGltZVBhc3N3b3JkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQSBzZXJ2ZXIgd2hlcmUgZXZlbnRzIGFyZSBzZW50LiBUaGlzIGluY2x1ZGVzIHVzZXIgYWN0aW9uIGV2ZW50cyBhbmQgYW55IG90aGVyIGV2ZW50cyBzZW50IGJ5IEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9vayB7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV2ZW50c0VuYWJsZWQ/OiBSZWNvcmQ8RXZlbnRUeXBlLCBib29sZWFuPjtcbiAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgaGVhZGVycz86IEhUVFBIZWFkZXJzO1xuICBodHRwQXV0aGVudGljYXRpb25QYXNzd29yZD86IHN0cmluZztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uVXNlcm5hbWU/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHJlYWRUaW1lb3V0PzogbnVtYmVyO1xuICBzaWduYXR1cmVDb25maWd1cmF0aW9uPzogV2ViaG9va1NpZ25hdHVyZUNvbmZpZ3VyYXRpb247XG4gIHNzbENlcnRpZmljYXRlPzogc3RyaW5nO1xuICBzc2xDZXJ0aWZpY2F0ZUtleUlkPzogVVVJRDtcbiAgdGVuYW50SWRzPzogQXJyYXk8VVVJRD47XG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBdmFpbGFibGUgSW50ZWdyYXRpb25zXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9ucyB7XG4gIGNsZWFuc3BlYWs/OiBDbGVhblNwZWFrQ29uZmlndXJhdGlvbjtcbiAga2Fma2E/OiBLYWZrYUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciB0aGUgZXZlbnQgbG9nLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBlbmQ/OiBudW1iZXI7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIHN0YXJ0PzogbnVtYmVyO1xuICB0eXBlPzogRXZlbnRMb2dUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsQ29uZmlndXJhdGlvbiB7XG4gIGFkZGl0aW9uYWxIZWFkZXJzPzogQXJyYXk8RW1haWxIZWFkZXI+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRlZmF1bHRGcm9tRW1haWw/OiBzdHJpbmc7XG4gIGRlZmF1bHRGcm9tTmFtZT86IHN0cmluZztcbiAgZW1haWxVcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBlbWFpbFZlcmlmaWVkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZm9yZ290UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBob3N0Pzogc3RyaW5nO1xuICBpbXBsaWNpdEVtYWlsVmVyaWZpY2F0aW9uQWxsb3dlZD86IGJvb2xlYW47XG4gIGxvZ2luSWRJblVzZU9uQ3JlYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5JZEluVXNlT25VcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbk5ld0RldmljZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luU3VzcGljaW91c0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICBwYXNzd29yZGxlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFJlc2V0U3VjY2Vzc0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcG9ydD86IG51bWJlcjtcbiAgcHJvcGVydGllcz86IHN0cmluZztcbiAgc2VjdXJpdHk/OiBFbWFpbFNlY3VyaXR5VHlwZTtcbiAgc2V0UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RBZGRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RSZW1vdmVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB1bnZlcmlmaWVkPzogRW1haWxVbnZlcmlmaWVkT3B0aW9ucztcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHZlcmlmaWNhdGlvblN0cmF0ZWd5PzogVmVyaWZpY2F0aW9uU3RyYXRlZ3k7XG4gIHZlcmlmeUVtYWlsPzogYm9vbGVhbjtcbiAgdmVyaWZ5RW1haWxXaGVuQ2hhbmdlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIEVtYWlsU2VjdXJpdHlUeXBlIHtcbiAgTk9ORSA9IFwiTk9ORVwiLFxuICBTU0wgPSBcIlNTTFwiLFxuICBUTFMgPSBcIlRMU1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdGNoQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFhib3hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgZ2VuZXJpYyBjb25uZWN0b3IuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljQ29ubmVjdG9yQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uIHtcbiAgYXV0aGVudGljYXRpb25VUkw/OiBzdHJpbmc7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBoZWFkZXJzPzogSFRUUEhlYWRlcnM7XG4gIGh0dHBBdXRoZW50aWNhdGlvblBhc3N3b3JkPzogc3RyaW5nO1xuICBodHRwQXV0aGVudGljYXRpb25Vc2VybmFtZT86IHN0cmluZztcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHNzbENlcnRpZmljYXRlS2V5SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEFuIEV2ZW50IFwiZXZlbnRcIiB0byBpbmRpY2F0ZSBhbiBldmVudCBsb2cgd2FzIGNyZWF0ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBldmVudExvZz86IEV2ZW50TG9nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbUNvbmZpZ3VyYXRpb24ge1xuICBhdWRpdExvZ0NvbmZpZ3VyYXRpb24/OiBBdWRpdExvZ0NvbmZpZ3VyYXRpb247XG4gIGNvcnNDb25maWd1cmF0aW9uPzogQ09SU0NvbmZpZ3VyYXRpb247XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBldmVudExvZ0NvbmZpZ3VyYXRpb24/OiBFdmVudExvZ0NvbmZpZ3VyYXRpb247XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2dpblJlY29yZENvbmZpZ3VyYXRpb24/OiBMb2dpblJlY29yZENvbmZpZ3VyYXRpb247XG4gIHJlcG9ydFRpbWV6b25lPzogc3RyaW5nO1xuICB0cnVzdGVkUHJveHlDb25maWd1cmF0aW9uPzogU3lzdGVtVHJ1c3RlZFByb3h5Q29uZmlndXJhdGlvbjtcbiAgdWlDb25maWd1cmF0aW9uPzogVUlDb25maWd1cmF0aW9uO1xuICB3ZWJob29rRXZlbnRMb2dDb25maWd1cmF0aW9uPzogV2ViaG9va0V2ZW50TG9nQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0NvbmZpZ3VyYXRpb24ge1xuICBkZWxldGU/OiBEZWxldGVDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbnVtYmVyT2ZEYXlzVG9SZXRhaW4/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dDb25maWd1cmF0aW9uIHtcbiAgbnVtYmVyVG9SZXRhaW4/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZWNvcmRDb25maWd1cmF0aW9uIHtcbiAgZGVsZXRlPzogRGVsZXRlQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVSUNvbmZpZ3VyYXRpb24ge1xuICBoZWFkZXJDb2xvcj86IHN0cmluZztcbiAgbG9nb1VSTD86IHN0cmluZztcbiAgbWVudUZvbnRDb2xvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50VXNlcm5hbWVDb25maWd1cmF0aW9uIHtcbiAgdW5pcXVlPzogVW5pcXVlVXNlcm5hbWVDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgZW51bSBVbmlxdWVVc2VybmFtZVN0cmF0ZWd5IHtcbiAgQWx3YXlzID0gXCJBbHdheXNcIixcbiAgT25Db2xsaXNpb24gPSBcIk9uQ29sbGlzaW9uXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmlxdWVVc2VybmFtZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbnVtYmVyT2ZEaWdpdHM/OiBudW1iZXI7XG4gIHNlcGFyYXRvcj86IHN0cmluZztcbiAgc3RyYXRlZ3k/OiBVbmlxdWVVc2VybmFtZVN0cmF0ZWd5O1xufVxuXG4vKipcbiAqIENvbnNlbnQgc2VhcmNoIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50U2VhcmNoUmVzcG9uc2Uge1xuICBjb25zZW50cz86IEFycmF5PENvbnNlbnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiA8dWw+XG4gKiA8bGk+QmVhcmVyIFRva2VuIHR5cGUgYXMgZGVmaW5lZCBieSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NTBcIj5SRkMgNjc1MDwvYT4uPC9saT5cbiAqIDxsaT5NQUMgVG9rZW4gdHlwZSBhcyByZWZlcmVuY2VkIGJ5IDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc0OVwiPlJGQyA2NzQ5PC9hPiBhbmRcbiAqIDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1vYXV0aC12Mi1odHRwLW1hYy0wNVwiPlxuICogRHJhZnQgUkZDIG9uIE9BdXRoIDIuMCBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGUgKE1BQykgVG9rZW5zPC9hPlxuICogPC9saT5cbiAqIDwvdWw+XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBUb2tlblR5cGUge1xuICBCZWFyZXIgPSBcIkJlYXJlclwiLFxuICBNQUMgPSBcIk1BQ1wiXG59XG5cbi8qKlxuICogQSBncmFudCBmb3IgYW4gZW50aXR5IHRvIGEgdXNlciBvciBhbm90aGVyIGVudGl0eS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbnRpdHk/OiBFbnRpdHk7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHBlcm1pc3Npb25zPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVjaXBpZW50RW50aXR5SWQ/OiBVVUlEO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgdXNlciBjb21tZW50cy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb21tZW50U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBjb21tZW50ZXJJZD86IFVVSUQ7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERlcmVrIEtsYXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXMge1xuICBicmVhY2hEZXRlY3Rpb24/OiBQYXNzd29yZEJyZWFjaERldGVjdGlvbjtcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIHJlbWVtYmVyUHJldmlvdXNQYXNzd29yZHM/OiBSZW1lbWJlclByZXZpb3VzUGFzc3dvcmRzO1xuICByZXF1aXJlTWl4ZWRDYXNlPzogYm9vbGVhbjtcbiAgcmVxdWlyZU5vbkFscGhhPzogYm9vbGVhbjtcbiAgcmVxdWlyZU51bWJlcj86IGJvb2xlYW47XG4gIHZhbGlkYXRlT25Mb2dpbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIEVtYWlsIFZlcmlmeSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJFbWFpbFZlcmlmaWVkRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIFVzZXIgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbnNlbnRSZXNwb25zZSB7XG4gIHVzZXJDb25zZW50PzogVXNlckNvbnNlbnQ7XG4gIHVzZXJDb25zZW50cz86IEFycmF5PFVzZXJDb25zZW50Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3UmVxdWVzdCB7XG4gIGVtYWlsVGVtcGxhdGU/OiBFbWFpbFRlbXBsYXRlO1xuICBsb2NhbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWtleSBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRNdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24ge1xuICBhdXRoZW50aWNhdG9yPzogTXVsdGlGYWN0b3JBdXRoZW50aWNhdG9yTWV0aG9kO1xuICBlbWFpbD86IE11bHRpRmFjdG9yRW1haWxNZXRob2Q7XG4gIGxvZ2luUG9saWN5PzogTXVsdGlGYWN0b3JMb2dpblBvbGljeTtcbiAgc21zPzogTXVsdGlGYWN0b3JTTVNNZXRob2Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGYWN0b3JBdXRoZW50aWNhdG9yTWV0aG9kIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFsZ29yaXRobT86IFRPVFBBbGdvcml0aG07XG4gIGNvZGVMZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVTdGVwPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmFjdG9yRW1haWxNZXRob2QgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgdGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGYWN0b3JTTVNNZXRob2QgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbWVzc2VuZ2VySWQ/OiBVVUlEO1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBFbnRpdHkgZ3JhbnQgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFJlc3BvbnNlIHtcbiAgZ3JhbnQ/OiBFbnRpdHlHcmFudDtcbiAgZ3JhbnRzPzogQXJyYXk8RW50aXR5R3JhbnQ+O1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IHRvIHN0YXJ0IGEgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuU3RhcnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNyZWRlbnRpYWxJZD86IFVVSUQ7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdXNlcklkPzogVVVJRDtcbiAgd29ya2Zsb3c/OiBXZWJBdXRobldvcmtmbG93O1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFJlc3BvbnNlIHtcbiAgY29uc2VudD86IENvbnNlbnQ7XG4gIGNvbnNlbnRzPzogQXJyYXk8Q29uc2VudD47XG59XG5cbi8qKlxuICogQSBVc2VyJ3MgbWVtYmVyc2hpcCBpbnRvIGEgR3JvdXBcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXIge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZ3JvdXBJZD86IFVVSUQ7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgdXNlcj86IFVzZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIGFuIGVudGl0eSB0aGF0IGEgdXNlciBjYW4gYmUgZ3JhbnRlZCBwZXJtaXNzaW9ucyB0by4gT3IgYW4gZW50aXR5IHRoYXQgY2FuIGJlIGdyYW50ZWQgcGVybWlzc2lvbnMgdG8gYW5vdGhlciBlbnRpdHkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5IHtcbiAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhcmVudElkPzogVVVJRDtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0eXBlPzogRW50aXR5VHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RvclJlc3BvbnNlIHtcbiAgc3RhdHVzPzogUmVhY3RvclN0YXR1cztcbn1cblxuLyoqXG4gKiBMb2dpbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBvbmVUaW1lUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBJZGVudGl0eSBQcm92aWRlciBVbmxpbmsgRXZlbnQuXG4gKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VySWRlbnRpdHlQcm92aWRlclVubGlua0V2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rPzogSWRlbnRpdHlQcm92aWRlckxpbms7XG59XG5cbi8qKlxuICogV2ViQXV0aG4gQ3JlZGVudGlhbCBBUEkgcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlIHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuQ3JlZGVudGlhbDtcbiAgY3JlZGVudGlhbHM/OiBBcnJheTxXZWJBdXRobkNyZWRlbnRpYWw+O1xufVxuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBvdXRwdXQgZm9yIHRoZSB7QGNvZGUgY3JlZFByb3BzfSBleHRlbnNpb25cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxQcm9wZXJ0aWVzT3V0cHV0IHtcbiAgcms/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIElkUCBJbml0aWF0ZWQgbG9naW4gY29uZmlndXJhdGlvblxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJJZFBJbml0aWF0ZWRMb2dpbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbmFtZUlkRm9ybWF0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVudGl0eSBUeXBlIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVJlc3BvbnNlIHtcbiAgZW50aXR5VHlwZT86IEVudGl0eVR5cGU7XG4gIGVudGl0eVR5cGVzPzogQXJyYXk8RW50aXR5VHlwZT47XG4gIHBlcm1pc3Npb24/OiBFbnRpdHlUeXBlUGVybWlzc2lvbjtcbn1cblxuLyoqXG4gKiBVc2VyIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlc3BvbnNlIHtcbiAgZW1haWxWZXJpZmljYXRpb25JZD86IHN0cmluZztcbiAgZW1haWxWZXJpZmljYXRpb25PbmVUaW1lQ29kZT86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWRzPzogUmVjb3JkPFVVSUQsIHN0cmluZz47XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbk9uZVRpbWVDb2Rlcz86IFJlY29yZDxVVUlELCBzdHJpbmc+O1xuICB0b2tlbj86IHN0cmluZztcbiAgdG9rZW5FeHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogU3RhdHVzIGZvciBjb250ZW50IGxpa2UgdXNlcm5hbWVzLCBwcm9maWxlIGF0dHJpYnV0ZXMsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gQ29udGVudFN0YXR1cyB7XG4gIEFDVElWRSA9IFwiQUNUSVZFXCIsXG4gIFBFTkRJTkcgPSBcIlBFTkRJTkdcIixcbiAgUkVKRUNURUQgPSBcIlJFSkVDVEVEXCJcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgS2V5c1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEtleVNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWF0dGhldyBBbHRtYW5cbiAqL1xuZXhwb3J0IGVudW0gTG9nb3V0QmVoYXZpb3Ige1xuICBSZWRpcmVjdE9ubHkgPSBcIlJlZGlyZWN0T25seVwiLFxuICBBbGxBcHBsaWNhdGlvbnMgPSBcIkFsbEFwcGxpY2F0aW9uc1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50YWJsZSB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIEJ1bGsgQ3JlYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJCdWxrQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIE1vZGVscyBhIHNpbmdsZSBmYW1pbHkgbWVtYmVyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseU1lbWJlciB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgb3duZXI/OiBib29sZWFuO1xuICByb2xlPzogRmFtaWx5Um9sZTtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuZXhwb3J0IGVudW0gRmFtaWx5Um9sZSB7XG4gIENoaWxkID0gXCJDaGlsZFwiLFxuICBUZWVuID0gXCJUZWVuXCIsXG4gIEFkdWx0ID0gXCJBZHVsdFwiXG59XG5cbi8qKlxuICogQW4gZW1haWwgYWRkcmVzcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEFkZHJlc3Mge1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICBkaXNwbGF5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbEpXVEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgVGVuYW50c1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBUZW5hbnRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFjZWJvb2tBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGFwcElkPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBmaWVsZHM/OiBzdHJpbmc7XG4gIGxvZ2luTWV0aG9kPzogSWRlbnRpdHlQcm92aWRlckxvZ2luTWV0aG9kO1xuICBwZXJtaXNzaW9ucz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIHVzZXIgYWN0aW9uIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25FdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFjdGlvbj86IHN0cmluZztcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFjdGlvbklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25JZHM/OiBBcnJheTxVVUlEPjtcbiAgY29tbWVudD86IHN0cmluZztcbiAgZW1haWw/OiBFbWFpbDtcbiAgZW1haWxlZFVzZXI/OiBib29sZWFuO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIGxvY2FsaXplZEFjdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkRHVyYXRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZE9wdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkUmVhc29uPzogc3RyaW5nO1xuICBub3RpZnlVc2VyPzogYm9vbGVhbjtcbiAgb3B0aW9uPzogc3RyaW5nO1xuICBwaGFzZT86IFVzZXJBY3Rpb25QaGFzZTtcbiAgcmVhc29uPzogc3RyaW5nO1xuICByZWFzb25Db2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBDcmVhdGUgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogQSBkaXNwbGF5YWJsZSByYXcgbG9naW4gdGhhdCBpbmNsdWRlcyBhcHBsaWNhdGlvbiBuYW1lIGFuZCB1c2VyIGxvZ2luSWQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcGxheWFibGVSYXdMb2dpbiBleHRlbmRzIFJhd0xvZ2luIHtcbiAgYXBwbGljYXRpb25OYW1lPzogc3RyaW5nO1xuICBsb2NhdGlvbj86IExvY2F0aW9uO1xuICBsb2dpbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbnVtYmVyIGlkZW50aWZ5aW5nIGEgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG0uIFZhbHVlcyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSA8YVxuICogaHJlZj1cImh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2Nvc2UvY29zZS54aHRtbCNhbGdvcml0aG1zXCI+SUFOQSBDT1NFIEFsZ29yaXRobXMgcmVnaXN0cnk8L2E+XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gQ29zZUFsZ29yaXRobUlkZW50aWZpZXIge1xuICBFUzI1NiA9IFwiU0hBMjU2d2l0aEVDRFNBXCIsXG4gIEVTMzg0ID0gXCJTSEEzODR3aXRoRUNEU0FcIixcbiAgRVM1MTIgPSBcIlNIQTUxMndpdGhFQ0RTQVwiLFxuICBSUzI1NiA9IFwiU0hBMjU2d2l0aFJTQVwiLFxuICBSUzM4NCA9IFwiU0hBMzg0d2l0aFJTQVwiLFxuICBSUzUxMiA9IFwiU0hBNTEyd2l0aFJTQVwiLFxuICBQUzI1NiA9IFwiU0hBLTI1NlwiLFxuICBQUzM4NCA9IFwiU0hBLTM4NFwiLFxuICBQUzUxMiA9IFwiU0hBLTUxMlwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJpbmZvUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGVhbUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYXBpTW9kZT86IFN0ZWFtQVBJTW9kZTtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgd2ViQVBJS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JTZW5kUmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBlbWFpbD86IHN0cmluZztcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtZXRob2RJZD86IHN0cmluZztcbiAgbW9iaWxlUGhvbmU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBFbWFpbCB0ZW1wbGF0ZXNcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBSZWFjdG9yRmVhdHVyZVN0YXR1cyB7XG4gIEFDVElWRSA9IFwiQUNUSVZFXCIsXG4gIERJU0NPTk5FQ1RFRCA9IFwiRElTQ09OTkVDVEVEXCIsXG4gIFBFTkRJTkcgPSBcIlBFTkRJTkdcIixcbiAgRElTQUJMRUQgPSBcIkRJU0FCTEVEXCIsXG4gIFVOS05PV04gPSBcIlVOS05PV05cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbnlQU05BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gYXVkaXQgbG9nLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogbnVtYmVyO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpbnNlcnRVc2VyPzogc3RyaW5nO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBuZXdWYWx1ZT86IGFueTtcbiAgb2xkVmFsdWU/OiBhbnk7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHdlYmhvb2sgY2FsbCByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tDYWxsUmVzcG9uc2Uge1xuICBleGNlcHRpb24/OiBzdHJpbmc7XG4gIHN0YXR1c0NvZGU/OiBudW1iZXI7XG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgPGk+YXV0aGVudGljYXRvcjwvaT4gd2l0aCB0aGUgZGF0YSBpdCBuZWVkcyB0byBnZW5lcmF0ZSBhbiBhc3NlcnRpb24uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMge1xuICBhbGxvd0NyZWRlbnRpYWxzPzogQXJyYXk8UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+O1xuICBjaGFsbGVuZ2U/OiBzdHJpbmc7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIHVzZXJWZXJpZmljYXRpb24/OiBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIHVzZXIgY29tbWVudHNcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb21tZW50U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IFVzZXJDb21tZW50U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBVbnZlcmlmaWVkQmVoYXZpb3Ige1xuICBBbGxvdyA9IFwiQWxsb3dcIixcbiAgR2F0ZWQgPSBcIkdhdGVkXCJcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBSZW1vdmUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyUmVtb3ZlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGVudW0gTWVzc2VuZ2VyVHlwZSB7XG4gIEdlbmVyaWMgPSBcIkdlbmVyaWNcIixcbiAgS2Fma2EgPSBcIkthZmthXCIsXG4gIFR3aWxpbyA9IFwiVHdpbGlvXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZ1NlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBFdmVudExvZ1NlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEV2ZW50IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZ1NlYXJjaFJlc3BvbnNlIHtcbiAgZXZlbnRMb2dzPzogQXJyYXk8RXZlbnRMb2c+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXZWJob29rIGV2ZW50IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZ1Jlc3BvbnNlIHtcbiAgd2ViaG9va0V2ZW50TG9nPzogV2ViaG9va0V2ZW50TG9nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZSB7XG4gIHJlY292ZXJ5Q29kZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEFuIGV4cGFuZGFibGUgQVBJIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBhbmRhYmxlUmVzcG9uc2Uge1xuICBleHBhbmRhYmxlPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBNb2RlbCBhIHVzZXIgZXZlbnQgd2hlbiBhIHR3by1mYWN0b3IgbWV0aG9kIGhhcyBiZWVuIGFkZGVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVHdvRmFjdG9yTWV0aG9kUmVtb3ZlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgbWV0aG9kPzogVHdvRmFjdG9yTWV0aG9kO1xufVxuXG4vKipcbiAqIFRoZSByZXNwb25zZSBmcm9tIHRoZSB0b3RhbCByZXBvcnQuIFRoaXMgcmVwb3J0IHN0b3JlcyB0aGUgdG90YWwgbnVtYmVycyBmb3IgZWFjaCBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb3RhbHNSZXBvcnRSZXNwb25zZSB7XG4gIGFwcGxpY2F0aW9uVG90YWxzPzogUmVjb3JkPFVVSUQsIFRvdGFscz47XG4gIGdsb2JhbFJlZ2lzdHJhdGlvbnM/OiBudW1iZXI7XG4gIHRvdGFsR2xvYmFsUmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb3RhbHMge1xuICBsb2dpbnM/OiBudW1iZXI7XG4gIHJlZ2lzdHJhdGlvbnM/OiBudW1iZXI7XG4gIHRvdGFsUmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZSB7XG4gIGlwQWNjZXNzQ29udHJvbExpc3Q/OiBJUEFjY2Vzc0NvbnRyb2xMaXN0O1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0cz86IEFycmF5PElQQWNjZXNzQ29udHJvbExpc3Q+O1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IHRvIHN0YXJ0IGEgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdGVyU3RhcnRSZXF1ZXN0IHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbiAgd29ya2Zsb3c/OiBXZWJBdXRobldvcmtmbG93O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBldmVudCB0aGF0IGlzIHN1c3BpY2lvdXMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpblN1c3BpY2lvdXNFdmVudCBleHRlbmRzIFVzZXJMb2dpblN1Y2Nlc3NFdmVudCB7XG4gIHRocmVhdHNEZXRlY3RlZD86IEFycmF5PEF1dGhlbnRpY2F0aW9uVGhyZWF0cz47XG59XG5cbi8qKlxuICogVXNlciBBUEkgZGVsZXRlIHJlcXVlc3Qgb2JqZWN0IGZvciBhIHNpbmdsZSB1c2VyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWxldGVTaW5nbGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGhhcmREZWxldGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgcmVmcmVzaGluZyBhIEpXVCB3aXRoIGEgUmVmcmVzaCBUb2tlbi5cbiAqIDxwPlxuICogVXNpbmcgYSBkaWZmZXJlbnQgcmVzcG9uc2Ugb2JqZWN0IGZyb20gUmVmcmVzaFRva2VuUmVzcG9uc2UgYmVjYXVzZSB0aGUgcmV0cmlldmUgcmVzcG9uc2Ugd2lsbCByZXR1cm4gYW4gb2JqZWN0IGZvciByZWZyZXNoVG9rZW4sIGFuZCB0aGlzIGlzIGFcbiAqIHN0cmluZy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUUmVmcmVzaFJlc3BvbnNlIHtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW5JZD86IFVVSUQ7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEF1ZGl0TG9nU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVzcG9uc2Uge1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0cz86IEFycmF5PElQQWNjZXNzQ29udHJvbExpc3Q+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvblJlc3BvbnNlIHtcbiAgdmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JEaXNhYmxlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY29kZT86IHN0cmluZztcbiAgbWV0aG9kSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmludGVuZG9BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkQnJlYWNoRGV0ZWN0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG1hdGNoTW9kZT86IEJyZWFjaE1hdGNoTW9kZTtcbiAgbm90aWZ5VXNlckVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIG9uTG9naW4/OiBCcmVhY2hBY3Rpb247XG59XG5cbmV4cG9ydCBlbnVtIEJyZWFjaEFjdGlvbiB7XG4gIE9mZiA9IFwiT2ZmXCIsXG4gIFJlY29yZE9ubHkgPSBcIlJlY29yZE9ubHlcIixcbiAgTm90aWZ5VXNlciA9IFwiTm90aWZ5VXNlclwiLFxuICBSZXF1aXJlQ2hhbmdlID0gXCJSZXF1aXJlQ2hhbmdlXCJcbn1cblxuZXhwb3J0IGVudW0gQnJlYWNoTWF0Y2hNb2RlIHtcbiAgTG93ID0gXCJMb3dcIixcbiAgTWVkaXVtID0gXCJNZWRpdW1cIixcbiAgSGlnaCA9IFwiSGlnaFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBGb3JtRmllbGRBZG1pblBvbGljeSB7XG4gIEVkaXQgPSBcIkVkaXRcIixcbiAgVmlldyA9IFwiVmlld1wiXG59XG5cbi8qKlxuICogVXNlZCB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIGFuZCBob3cgYXV0aGVudGljYXRvciBhdHRlc3RhdGlvbiBzaG91bGQgYmUgZGVsaXZlcmVkIHRvIHRoZSBSZWx5aW5nIFBhcnR5XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSB7XG4gIG5vbmUgPSBcIm5vbmVcIixcbiAgaW5kaXJlY3QgPSBcImluZGlyZWN0XCIsXG4gIGRpcmVjdCA9IFwiZGlyZWN0XCIsXG4gIGVudGVycHJpc2UgPSBcImVudGVycHJpc2VcIlxufVxuXG4vKipcbiAqIEEgcG9saWN5IHRvIGNvbmZpZ3VyZSBpZiBhbmQgd2hlbiB0aGUgdXNlci1hY3Rpb24gaXMgY2FuY2VsZWQgcHJpb3IgdG8gdGhlIGV4cGlyYXRpb24gb2YgdGhlIGFjdGlvbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbGVkQXV0aGVudGljYXRpb25BY3Rpb25DYW5jZWxQb2xpY3kge1xuICBvblBhc3N3b3JkUmVzZXQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBwb3NzaWJsZSByZXN1bHQgc3RhdGVzIG9mIGEgd2ViaG9vayBldmVudC4gVGhpcyB0cmFja3MgdGhlIHN1Y2Nlc3Mgb2YgdGhlIG92ZXJhbGwgd2ViaG9vayB0cmFuc2FjdGlvbiBhY2NvcmRpbmcgdG8gdGhlIHtAbGluayBUcmFuc2FjdGlvblR5cGV9XG4gKiBhbmQgY29uZmlndXJlZCB3ZWJob29rcy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBXZWJob29rRXZlbnRSZXN1bHQge1xuICBGYWlsZWQgPSBcIkZhaWxlZFwiLFxuICBSdW5uaW5nID0gXCJSdW5uaW5nXCIsXG4gIFN1Y2NlZWRlZCA9IFwiU3VjY2VlZGVkXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBudW1iZXJPZlJlc3VsdHM/OiBudW1iZXI7XG4gIG9yZGVyQnk/OiBzdHJpbmc7XG4gIHN0YXJ0Um93PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEZvcmdvdCBwYXNzd29yZCByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3Jnb3RQYXNzd29yZFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNoYW5nZVBhc3N3b3JkSWQ/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBzZW5kRm9yZ290UGFzc3dvcmRFbWFpbD86IGJvb2xlYW47XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIEZvcm1GaWVsZCBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGRSZXF1ZXN0IHtcbiAgZmllbGQ/OiBGb3JtRmllbGQ7XG4gIGZpZWxkcz86IEFycmF5PEZvcm1GaWVsZD47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGJjY0FkZHJlc3Nlcz86IEFycmF5PHN0cmluZz47XG4gIGNjQWRkcmVzc2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgcHJlZmVycmVkTGFuZ3VhZ2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVxdWVzdERhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0b0FkZHJlc3Nlcz86IEFycmF5PEVtYWlsQWRkcmVzcz47XG4gIHVzZXJJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIHRoZSBXZWJBdXRobiB3b3JrZmxvdy4gVGhpcyB3aWxsIGFmZmVjdCB0aGUgcGFyYW1ldGVycyB1c2VkIGZvciBjcmVkZW50aWFsIGNyZWF0aW9uXG4gKiBhbmQgcmVxdWVzdCBiYXNlZCBvbiB0aGUgVGVuYW50IGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gV2ViQXV0aG5Xb3JrZmxvdyB7XG4gIGJvb3RzdHJhcCA9IFwiYm9vdHN0cmFwXCIsXG4gIGdlbmVyYWwgPSBcImdlbmVyYWxcIixcbiAgcmVhdXRoZW50aWNhdGlvbiA9IFwicmVhdXRoZW50aWNhdGlvblwiXG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgbWVzc2FnZVRlbXBsYXRlPzogTWVzc2FnZVRlbXBsYXRlO1xuICBtZXNzYWdlVGVtcGxhdGVzPzogQXJyYXk8TWVzc2FnZVRlbXBsYXRlPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBjb25zZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQ29uc2VudFN0YXR1cyB7XG4gIEFjdGl2ZSA9IFwiQWN0aXZlXCIsXG4gIFJldm9rZWQgPSBcIlJldm9rZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gSFRUUE1ldGhvZCB7XG4gIEdFVCA9IFwiR0VUXCIsXG4gIFBPU1QgPSBcIlBPU1RcIixcbiAgUFVUID0gXCJQVVRcIixcbiAgREVMRVRFID0gXCJERUxFVEVcIixcbiAgSEVBRCA9IFwiSEVBRFwiLFxuICBPUFRJT05TID0gXCJPUFRJT05TXCIsXG4gIFBBVENIID0gXCJQQVRDSFwiXG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIERlbGV0ZWQgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZSBpbiB0aGF0IGl0IGlzIHNlbnQgYWZ0ZXIgdGhlIFRYIGhhcyBiZWVuIGNvbW1pdHRlZC4gVGhpcyBldmVudCBjYW5ub3QgYmUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbkRlbGV0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogU3RlYW0gZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZWFtSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFN0ZWFtQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGFwaU1vZGU/OiBTdGVhbUFQSU1vZGU7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHdlYkFQSUtleT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBOaW50ZW5kbyBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmludGVuZG9JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8TmludGVuZG9BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBlbWFpbENsYWltPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdW5pcXVlSWRDbGFpbT86IHN0cmluZztcbiAgdXNlcm5hbWVDbGFpbT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIHRydXN0Q29tcHV0ZXI/OiBib29sZWFuO1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBTZWFyY2ggQVBJIHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVxdWVzdCBleHRlbmRzIEV4cGFuZGFibGVSZXF1ZXN0IHtcbiAgc2VhcmNoPzogVXNlclNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjcmVhdGVSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIGFuIGFic3RyYWN0aW9uIG9mIGEgc2ltcGxlIGVtYWlsIG1lc3NhZ2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWwge1xuICBhdHRhY2htZW50cz86IEFycmF5PEF0dGFjaG1lbnQ+O1xuICBiY2M/OiBBcnJheTxFbWFpbEFkZHJlc3M+O1xuICBjYz86IEFycmF5PEVtYWlsQWRkcmVzcz47XG4gIGZyb20/OiBFbWFpbEFkZHJlc3M7XG4gIGh0bWw/OiBzdHJpbmc7XG4gIHJlcGx5VG8/OiBFbWFpbEFkZHJlc3M7XG4gIHN1YmplY3Q/OiBzdHJpbmc7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIHRvPzogQXJyYXk8RW1haWxBZGRyZXNzPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgTGFtYmRhc1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBMYW1iZGFTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBVc2VyIGxvZ2luIGZhaWxlZCByZWFzb24gY29kZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luRmFpbGVkUmVhc29uQ29kZSB7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUVsYXN0aWNTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGFjY3VyYXRlVG90YWw/OiBib29sZWFuO1xuICBpZHM/OiBBcnJheTxVVUlEPjtcbiAgbmV4dFJlc3VsdHM/OiBzdHJpbmc7XG4gIHF1ZXJ5Pzogc3RyaW5nO1xuICBxdWVyeVN0cmluZz86IHN0cmluZztcbiAgc29ydEZpZWxkcz86IEFycmF5PFNvcnRGaWVsZD47XG59XG5cbi8qKlxuICogQXBwbGljYXRpb24gc2VhcmNoIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblNlYXJjaFJlc3BvbnNlIGV4dGVuZHMgRXhwYW5kYWJsZVJlc3BvbnNlIHtcbiAgYXBwbGljYXRpb25zPzogQXJyYXk8QXBwbGljYXRpb24+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBMYW1iZGEgc2VhcmNoIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhU2VhcmNoUmVzcG9uc2Uge1xuICBsYW1iZGFzPzogQXJyYXk8TGFtYmRhPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogV2ViaG9vayBhdHRlbXB0IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tBdHRlbXB0TG9nUmVzcG9uc2Uge1xuICB3ZWJob29rQXR0ZW1wdExvZz86IFdlYmhvb2tBdHRlbXB0TG9nO1xufVxuXG4vKipcbiAqIFBhc3N3b3JkIEVuY3J5cHRpb24gU2NoZW1lIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGVuY3J5cHRpb25TY2hlbWU/OiBzdHJpbmc7XG4gIGVuY3J5cHRpb25TY2hlbWVGYWN0b3I/OiBudW1iZXI7XG4gIG1vZGlmeUVuY3J5cHRpb25TY2hlbWVPbkxvZ2luPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgQXBwbGljYXRpb24gQVBJIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uUmVzcG9uc2Uge1xuICBhcHBsaWNhdGlvbj86IEFwcGxpY2F0aW9uO1xuICBhcHBsaWNhdGlvbnM/OiBBcnJheTxBcHBsaWNhdGlvbj47XG4gIHJvbGU/OiBBcHBsaWNhdGlvblJvbGU7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yIHRoZSBkYWlseSBhY3RpdmUgdXNlciByZXBvcnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9udGhseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZSB7XG4gIG1vbnRobHlBY3RpdmVVc2Vycz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBUeWxlciBTY290dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHJvbGVzPzogUmVjb3JkPFVVSUQsIEFycmF5PEFwcGxpY2F0aW9uUm9sZT4+O1xuICB0ZW5hbnRJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm0ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RlcHM/OiBBcnJheTxGb3JtU3RlcD47XG4gIHR5cGU/OiBGb3JtVHlwZTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwge0BsaW5rIFVzZXJ9LXJlbGF0ZWQgZXZlbnRzLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVVzZXJFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gVXNlclN0YXRlIHtcbiAgQXV0aGVudGljYXRlZCA9IFwiQXV0aGVudGljYXRlZFwiLFxuICBBdXRoZW50aWNhdGVkTm90UmVnaXN0ZXJlZCA9IFwiQXV0aGVudGljYXRlZE5vdFJlZ2lzdGVyZWRcIixcbiAgQXV0aGVudGljYXRlZE5vdFZlcmlmaWVkID0gXCJBdXRoZW50aWNhdGVkTm90VmVyaWZpZWRcIixcbiAgQXV0aGVudGljYXRlZFJlZ2lzdHJhdGlvbk5vdFZlcmlmaWVkID0gXCJBdXRoZW50aWNhdGVkUmVnaXN0cmF0aW9uTm90VmVyaWZpZWRcIlxufVxuXG4vKipcbiAqIFRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiBmb3IgV2ViaG9vayBFdmVudCBMb2cgZGF0YS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZ0NvbmZpZ3VyYXRpb24ge1xuICBkZWxldGU/OiBEZWxldGVDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRJbkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbCBhIHVzZXIgZXZlbnQgd2hlbiBhIHR3by1mYWN0b3IgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUd29GYWN0b3JNZXRob2RBZGRFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBtZXRob2Q/OiBUd29GYWN0b3JNZXRob2Q7XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkFzc2VydGlvbkNvbmZpZ3VyYXRpb24ge1xuICBkZXN0aW5hdGlvbj86IFNBTUx2MkRlc3RpbmF0aW9uQXNzZXJ0aW9uQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBUaGVtZSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVSZXNwb25zZSB7XG4gIHRoZW1lPzogVGhlbWU7XG4gIHRoZW1lcz86IEFycmF5PFRoZW1lPjtcbn1cblxuLyoqXG4gKiBUaGUgPGk+YXV0aGVudGljYXRvcidzPC9pPiByZXNwb25zZSBmb3IgdGhlIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255IGluIGl0cyBlbmNvZGVkIGZvcm1hdFxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5BdXRoZW50aWNhdG9yQXV0aGVudGljYXRpb25SZXNwb25zZSB7XG4gIGF1dGhlbnRpY2F0b3JEYXRhPzogc3RyaW5nO1xuICBjbGllbnREYXRhSlNPTj86IHN0cmluZztcbiAgc2lnbmF0dXJlPzogc3RyaW5nO1xuICB1c2VySGFuZGxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uIHtcbiAgbGVuZ3RoPzogbnVtYmVyO1xuICB0eXBlPzogU2VjdXJlR2VuZXJhdG9yVHlwZTtcbn1cblxuLyoqXG4gKiBXZWJob29rIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rUmVxdWVzdCB7XG4gIHdlYmhvb2s/OiBXZWJob29rO1xufVxuXG4vKipcbiAqIFRoZSBBcHBsaWNhdGlvbiBTY29wZSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXF1ZXN0IHtcbiAgc2NvcGU/OiBBcHBsaWNhdGlvbk9BdXRoU2NvcGU7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZWQgRXZlbnQuXG4gKiA8cD5cbiAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHVzZXIuY3JlYXRlIGV2ZW50IGluIHRoYXQgaXQgd2lsbCBiZSBzZW50IGFmdGVyIHRoZSB1c2VyIGhhcyBiZWVuIGNyZWF0ZWQuIFRoaXMgZXZlbnQgY2Fubm90IGJlIG1hZGUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNyZWF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUGFzc3dvcmQgUmVzZXQgU3RhcnQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFJlc2V0U3RhcnRFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIFdlYmhvb2sgZXZlbnQgbG9nIHNlYXJjaCByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZ1NlYXJjaFJlc3BvbnNlIHtcbiAgdG90YWw/OiBudW1iZXI7XG4gIHdlYmhvb2tFdmVudExvZ3M/OiBBcnJheTxXZWJob29rRXZlbnRMb2c+O1xufVxuXG4vKipcbiAqIEEgSmF2YVNjcmlwdCBsYW1iZGEgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBkdXJpbmcgY2VydGFpbiBldmVudHMgaW5zaWRlIEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhIHtcbiAgYm9keT86IHN0cmluZztcbiAgZGVidWc/OiBib29sZWFuO1xuICBlbmdpbmVUeXBlPzogTGFtYmRhRW5naW5lVHlwZTtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IExhbWJkYVR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhZUFJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIHJlbHlpbmdQYXJ0eUFwcGxpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHJlbHlpbmdQYXJ0eVVSTD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkVmFsaWRhdG9yIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGV4cHJlc3Npb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2Uge1xuICBwYXNzd29yZFZhbGlkYXRpb25SdWxlcz86IFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Q29uZmlndXJhdGlvbiB7XG4gIGV2ZW50cz86IFJlY29yZDxFdmVudFR5cGUsIEV2ZW50Q29uZmlndXJhdGlvbkRhdGE+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Q29uZmlndXJhdGlvbkRhdGEgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgdHJhbnNhY3Rpb25UeXBlPzogVHJhbnNhY3Rpb25UeXBlO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBEZWFjdGl2YXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWFjdGl2YXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgVXBkYXRlIFJlZ2lzdHJhdGlvbiBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvblVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBvcmlnaW5hbD86IFVzZXJSZWdpc3RyYXRpb247XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0aWVzXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogRW50aXR5U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogVGhlIHVzZXIgYWN0aW9uIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYWN0aW9uPzogQWN0aW9uRGF0YTtcbiAgYnJvYWRjYXN0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25EYXRhIHtcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGVtYWlsVXNlcj86IGJvb2xlYW47XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgbm90aWZ5VXNlcj86IGJvb2xlYW47XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcmVhc29uSWQ/OiBVVUlEO1xuICB1c2VyQWN0aW9uSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFRoZSBJbnRlZ3JhdGlvbiBSZXNwb25zZVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvblJlc3BvbnNlIHtcbiAgaW50ZWdyYXRpb25zPzogSW50ZWdyYXRpb25zO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBVcGRhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBDcmVhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSB7XG4gIGlkZW50aXR5UHJvdmlkZXI/OiBCYXNlSWRlbnRpdHlQcm92aWRlcjxhbnk+O1xuICBpZGVudGl0eVByb3ZpZGVycz86IEFycmF5PEJhc2VJZGVudGl0eVByb3ZpZGVyPGFueT4+O1xufVxuXG4vKipcbiAqIFNvbWV0aGluZyB0aGF0IGNhbiBiZSBlbmFibGVkIGFuZCB0aHVzIGFsc28gZGlzYWJsZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZWFibGUge1xuICBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBBZGQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyQWRkRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogVGhlIHB1YmxpYyBTdGF0dXMgQVBJIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXR1c1Jlc3BvbnNlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIFJlc2V0IFN1Y2Nlc3MgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFJlc2V0U3VjY2Vzc0V2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBSZWZyZXNoVG9rZW5FeHBpcmF0aW9uUG9saWN5IHtcbiAgRml4ZWQgPSBcIkZpeGVkXCIsXG4gIFNsaWRpbmdXaW5kb3cgPSBcIlNsaWRpbmdXaW5kb3dcIixcbiAgU2xpZGluZ1dpbmRvd1dpdGhNYXhpbXVtTGlmZXRpbWUgPSBcIlNsaWRpbmdXaW5kb3dXaXRoTWF4aW11bUxpZmV0aW1lXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthZmthTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uIHtcbiAgZGVmYXVsdFRvcGljPzogc3RyaW5nO1xuICBwcm9kdWNlcj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIEJyZWFjaCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIE1hdHRoZXcgQWx0bWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhc3N3b3JkQnJlYWNoRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBUaGUgdXNlIHR5cGUgb2YgYSBrZXkuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBLZXlVc2Uge1xuICBTaWduT25seSA9IFwiU2lnbk9ubHlcIixcbiAgU2lnbkFuZFZlcmlmeSA9IFwiU2lnbkFuZFZlcmlmeVwiLFxuICBWZXJpZnlPbmx5ID0gXCJWZXJpZnlPbmx5XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25XZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBlbnRpdHkgdHlwZSB0aGF0IGhhcyBhIHNwZWNpZmljIHNldCBvZiBwZXJtaXNzaW9ucy4gVGhlc2UgYXJlIGdsb2JhbCBvYmplY3RzIGFuZCBjYW4gYmUgdXNlZCBhY3Jvc3MgdGVuYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgand0Q29uZmlndXJhdGlvbj86IEVudGl0eUpXVENvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwZXJtaXNzaW9ucz86IEFycmF5PEVudGl0eVR5cGVQZXJtaXNzaW9uPjtcbn1cblxuLyoqXG4gKiBKV1QgQ29uZmlndXJhdGlvbiBmb3IgZW50aXRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5SldUQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhY2Nlc3NUb2tlbktleUlkPzogVVVJRDtcbiAgdGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBVcGRhdGUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyVXBkYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIENvbnNlbnRzXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcG9saWN5IGZvciBkZWxldGluZyBVc2VycyBiYXNlZCB1cG9uIHNvbWUgZXh0ZXJuYWwgY3JpdGVyaWEuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lQmFzZWREZWxldGVQb2xpY3kgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZW5hYmxlZEluc3RhbnQ/OiBudW1iZXI7XG4gIG51bWJlck9mRGF5c1RvUmV0YWluPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJhdyBsb2dpbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCB0aW1lIGEgdXNlciBsb2dzIGludG8gYW4gYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF3TG9naW4ge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgaW5zdGFudD86IG51bWJlcjtcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQnJlYWNoZWRQYXNzd29yZFN0YXR1cyB7XG4gIE5vbmUgPSBcIk5vbmVcIixcbiAgRXhhY3RNYXRjaCA9IFwiRXhhY3RNYXRjaFwiLFxuICBTdWJBZGRyZXNzTWF0Y2ggPSBcIlN1YkFkZHJlc3NNYXRjaFwiLFxuICBQYXNzd29yZE9ubHkgPSBcIlBhc3N3b3JkT25seVwiLFxuICBDb21tb25QYXNzd29yZCA9IFwiQ29tbW9uUGFzc3dvcmRcIlxufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBGdXNpb25BdXRoIGV2ZW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRXZlbnQge1xuICBjcmVhdGVJbnN0YW50PzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGluZm8/OiBFdmVudEluZm87XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdHlwZT86IEV2ZW50VHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtVHJ1c3RlZFByb3h5Q29uZmlndXJhdGlvbiB7XG4gIHRydXN0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICB0cnVzdFBvbGljeT86IFN5c3RlbVRydXN0ZWRQcm94eUNvbmZpZ3VyYXRpb25Qb2xpY3k7XG59XG5cbi8qKlxuICogQXV0aGVudGljYXRpb24ga2V5IHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFNhbmpheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleVJlc3BvbnNlIHtcbiAgYXBpS2V5PzogQVBJS2V5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZEV4cG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGNyaXRlcmlhPzogTG9naW5SZWNvcmRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIHRoZSB3ZWJob29rIGV2ZW50IGxvZy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZ1NlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgZW5kPzogbnVtYmVyO1xuICBldmVudD86IHN0cmluZztcbiAgZXZlbnRSZXN1bHQ/OiBXZWJob29rRXZlbnRSZXN1bHQ7XG4gIGV2ZW50VHlwZT86IEV2ZW50VHlwZTtcbiAgc3RhcnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQXBwbGljYXRpb24tbGV2ZWwgY29uZmlndXJhdGlvbiBmb3IgV2ViQXV0aG5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25XZWJBdXRobkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYm9vdHN0cmFwV29ya2Zsb3c/OiBBcHBsaWNhdGlvbldlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uO1xuICByZWF1dGhlbnRpY2F0aW9uV29ya2Zsb3c/OiBBcHBsaWNhdGlvbldlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cmVJZGVudGl0eSB7XG4gIGJyZWFjaGVkUGFzc3dvcmRMYXN0Q2hlY2tlZEluc3RhbnQ/OiBudW1iZXI7XG4gIGJyZWFjaGVkUGFzc3dvcmRTdGF0dXM/OiBCcmVhY2hlZFBhc3N3b3JkU3RhdHVzO1xuICBjb25uZWN0b3JJZD86IFVVSUQ7XG4gIGVuY3J5cHRpb25TY2hlbWU/OiBzdHJpbmc7XG4gIGZhY3Rvcj86IG51bWJlcjtcbiAgaWQ/OiBVVUlEO1xuICBsYXN0TG9naW5JbnN0YW50PzogbnVtYmVyO1xuICBwYXNzd29yZD86IHN0cmluZztcbiAgcGFzc3dvcmRDaGFuZ2VSZWFzb24/OiBDaGFuZ2VQYXNzd29yZFJlYXNvbjtcbiAgcGFzc3dvcmRDaGFuZ2VSZXF1aXJlZD86IGJvb2xlYW47XG4gIHBhc3N3b3JkTGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHNhbHQ/OiBzdHJpbmc7XG4gIHVuaXF1ZVVzZXJuYW1lPzogc3RyaW5nO1xuICB1c2VybmFtZT86IHN0cmluZztcbiAgdXNlcm5hbWVTdGF0dXM/OiBDb250ZW50U3RhdHVzO1xuICB2ZXJpZmllZD86IGJvb2xlYW47XG4gIHZlcmlmaWVkSW5zdGFudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1Db250cm9sIHtcbiAgY2hlY2tib3ggPSBcImNoZWNrYm94XCIsXG4gIG51bWJlciA9IFwibnVtYmVyXCIsXG4gIHBhc3N3b3JkID0gXCJwYXNzd29yZFwiLFxuICByYWRpbyA9IFwicmFkaW9cIixcbiAgc2VsZWN0ID0gXCJzZWxlY3RcIixcbiAgdGV4dGFyZWEgPSBcInRleHRhcmVhXCIsXG4gIHRleHQgPSBcInRleHRcIlxufVxuXG4vKipcbiAqIEEgcmF3IGxvZ2luIHJlY29yZCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaFJlc3BvbnNlIHtcbiAgbG9naW5zPzogQXJyYXk8RGlzcGxheWFibGVSYXdMb2dpbj47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgcmVnaXN0cmF0aW9uIHJlcG9ydC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25SZXBvcnRSZXNwb25zZSB7XG4gIGhvdXJseUNvdW50cz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRm9yZ290IHBhc3N3b3JkIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZ290UGFzc3dvcmRSZXNwb25zZSB7XG4gIGNoYW5nZVBhc3N3b3JkSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgVXNlciBjb25zZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ29uc2VudCB7XG4gIGNvbnNlbnQ/OiBDb25zZW50O1xuICBjb25zZW50SWQ/OiBVVUlEO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZ2l2ZXJVc2VySWQ/OiBVVUlEO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBzdGF0dXM/OiBDb25zZW50U3RhdHVzO1xuICB1c2VySWQ/OiBVVUlEO1xuICB2YWx1ZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFR3aXRjaCBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdGNoSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFR3aXRjaEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlc3BvbnNlIHtcbiAgY29kZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3JtIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtUmVxdWVzdCB7XG4gIGZvcm0/OiBGb3JtO1xufVxuXG4vKipcbiAqIFRlbmFudCBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRTZWFyY2hSZXNwb25zZSB7XG4gIHRlbmFudHM/OiBBcnJheTxUZW5hbnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBLZXkgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlSZXF1ZXN0IHtcbiAga2V5PzogS2V5O1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBldmVudCB3aGVyZSBhIHVzZXIgaXMgYmVpbmcgdXBkYXRlZCBhbmQgdHJpZXMgdG8gdXNlIGFuIFwiaW4tdXNlXCIgbG9naW4gSWQgKGVtYWlsIG9yIHVzZXJuYW1lKS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luSWREdXBsaWNhdGVPblVwZGF0ZUV2ZW50IGV4dGVuZHMgVXNlckxvZ2luSWREdXBsaWNhdGVPbkNyZWF0ZUV2ZW50IHtcbn1cblxuLyoqXG4gKiBMb2NhdGlvbiBpbmZvcm1hdGlvbi4gVXNlZnVsIGZvciBJUCBhZGRyZXNzZXMgYW5kIG90aGVyIGRpc3BsYXlhYmxlIGRhdGEgb2JqZWN0cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbiB7XG4gIGNpdHk/OiBzdHJpbmc7XG4gIGNvdW50cnk/OiBzdHJpbmc7XG4gIGRpc3BsYXlTdHJpbmc/OiBzdHJpbmc7XG4gIGxhdGl0dWRlPzogbnVtYmVyO1xuICBsb25naXR1ZGU/OiBudW1iZXI7XG4gIHJlZ2lvbj86IHN0cmluZztcbiAgemlwY29kZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0IHtcbiAgaXBBY2Nlc3NDb250cm9sTGlzdD86IElQQWNjZXNzQ29udHJvbExpc3Q7XG59XG5cbi8qKlxuICogQ29udHJvbHMgdGhlIHBvbGljeSBmb3Igd2hldGhlciBPQXV0aCB3b3JrZmxvd3Mgd2lsbCBtb3JlIHN0cmljdGx5IGFkaGVyZSB0byB0aGUgT0F1dGggYW5kIE9JREMgc3BlY2lmaWNhdGlvblxuICogb3IgcnVuIGluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUuXG4gKlxuICogQGF1dGhvciBEYXZpZCBDaGFybGVzXG4gKi9cbmV4cG9ydCBlbnVtIE9BdXRoU2NvcGVIYW5kbGluZ1BvbGljeSB7XG4gIENvbXBhdGliaWxpdHkgPSBcIkNvbXBhdGliaWxpdHlcIixcbiAgU3RyaWN0ID0gXCJTdHJpY3RcIlxufVxuXG4vKipcbiAqIEltcG9ydCByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgZW5jcnlwdGlvblNjaGVtZT86IHN0cmluZztcbiAgZmFjdG9yPzogbnVtYmVyO1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xuICB2YWxpZGF0ZURiQ29uc3RyYWludHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBldmVudCB3aGVyZSBhIHVzZXIncyBlbWFpbCBpcyB1cGRhdGVkIG91dHNpZGUgb2YgYSBmb3Jnb3QgLyBjaGFuZ2UgcGFzc3dvcmQgd29ya2Zsb3cuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJFbWFpbFVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIHByZXZpb3VzRW1haWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkRlc3RpbmF0aW9uQXNzZXJ0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGFsdGVybmF0ZXM/OiBBcnJheTxzdHJpbmc+O1xuICBwb2xpY3k/OiBTQU1MdjJEZXN0aW5hdGlvbkFzc2VydGlvblBvbGljeTtcbn1cblxuLyoqXG4gKiBUaGUgcG9zc2libGUgc3RhdGVzIG9mIGFuIGluZGl2aWR1YWwgd2ViaG9vayBhdHRlbXB0IHRvIGEgc2luZ2xlIGVuZHBvaW50LlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIFdlYmhvb2tBdHRlbXB0UmVzdWx0IHtcbiAgU3VjY2VzcyA9IFwiU3VjY2Vzc1wiLFxuICBGYWlsdXJlID0gXCJGYWlsdXJlXCIsXG4gIFVua25vd24gPSBcIlVua25vd25cIlxufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBTdWNjZXNzIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5TdWNjZXNzRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGF1dGhlbnRpY2F0aW9uVHlwZT86IHN0cmluZztcbiAgY29ubmVjdG9ySWQ/OiBVVUlEO1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBpZGVudGl0eVByb3ZpZGVyTmFtZT86IHN0cmluZztcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBVcGRhdGUgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIucmVnaXN0cmF0aW9uLnVwZGF0ZSBpbiB0aGF0IGl0IGlzIHNlbnQgYWZ0ZXIgdGhpcyBldmVudCBjb21wbGV0ZXMsIHRoaXMgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25VcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBvcmlnaW5hbD86IFVzZXJSZWdpc3RyYXRpb247XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogR3JvdXAgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBSZXNwb25zZSB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIGdyb3Vwcz86IEFycmF5PEdyb3VwPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR29vZ2xlQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGxvZ2luTWV0aG9kPzogSWRlbnRpdHlQcm92aWRlckxvZ2luTWV0aG9kO1xuICBwcm9wZXJ0aWVzPzogR29vZ2xlSWRlbnRpdHlQcm92aWRlclByb3BlcnRpZXM7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IExvZyBUeXBlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBFdmVudExvZ1R5cGUge1xuICBJbmZvcm1hdGlvbiA9IFwiSW5mb3JtYXRpb25cIixcbiAgRGVidWcgPSBcIkRlYnVnXCIsXG4gIEVycm9yID0gXCJFcnJvclwiXG59XG5cbi8qKlxuICogVGhlIHRyYW5zYWN0aW9uIHR5cGVzIGZvciBXZWJob29rcyBhbmQgb3RoZXIgZXZlbnQgc3lzdGVtcyB3aXRoaW4gRnVzaW9uQXV0aC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gVHJhbnNhY3Rpb25UeXBlIHtcbiAgTm9uZSA9IFwiTm9uZVwiLFxuICBBbnkgPSBcIkFueVwiLFxuICBTaW1wbGVNYWpvcml0eSA9IFwiU2ltcGxlTWFqb3JpdHlcIixcbiAgU3VwZXJNYWpvcml0eSA9IFwiU3VwZXJNYWpvcml0eVwiLFxuICBBYnNvbHV0ZU1ham9yaXR5ID0gXCJBYnNvbHV0ZU1ham9yaXR5XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Rm9ybUNvbmZpZ3VyYXRpb24ge1xuICBhZG1pblVzZXJGb3JtSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEZhY2Vib29rIHNvY2lhbCBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0lkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxGYWNlYm9va0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBhcHBJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZmllbGRzPzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIEFQSS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeXN0ZW1Db25maWd1cmF0aW9uUmVxdWVzdCB7XG4gIHN5c3RlbUNvbmZpZ3VyYXRpb24/OiBTeXN0ZW1Db25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEVtYWlsIHRlbXBsYXRlIHNlYXJjaCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVTZWFyY2hSZXNwb25zZSB7XG4gIGVtYWlsVGVtcGxhdGVzPzogQXJyYXk8RW1haWxUZW1wbGF0ZT47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFVudmVyaWZpZWRPcHRpb25zIHtcbiAgYWxsb3dFbWFpbENoYW5nZVdoZW5HYXRlZD86IGJvb2xlYW47XG4gIGJlaGF2aW9yPzogVW52ZXJpZmllZEJlaGF2aW9yO1xufVxuXG4vKipcbiAqIENPU0Uga2V5IHR5cGVcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBDb3NlS2V5VHlwZSB7XG4gIFJlc2VydmVkID0gXCIwXCIsXG4gIE9LUCA9IFwiMVwiLFxuICBFQzIgPSBcIjJcIixcbiAgUlNBID0gXCIzXCIsXG4gIFN5bW1ldHJpYyA9IFwiNFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhbGxvd0NoaWxkUmVnaXN0cmF0aW9ucz86IGJvb2xlYW47XG4gIGNvbmZpcm1DaGlsZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGRlbGV0ZU9ycGhhbmVkQWNjb3VudHM/OiBib29sZWFuO1xuICBkZWxldGVPcnBoYW5lZEFjY291bnRzRGF5cz86IG51bWJlcjtcbiAgZmFtaWx5UmVxdWVzdEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIG1heGltdW1DaGlsZEFnZT86IG51bWJlcjtcbiAgbWluaW11bU93bmVyQWdlPzogbnVtYmVyO1xuICBwYXJlbnRFbWFpbFJlcXVpcmVkPzogYm9vbGVhbjtcbiAgcGFyZW50UmVnaXN0cmF0aW9uRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIGNvbXBsZXRpbmcgV2ViQXV0aG4gY3JlZGVudGlhbCByZWdpc3RyYXRpb24gb3IgYXNzZXJ0aW9uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXNwb25zZSB7XG4gIGNyZWRlbnRpYWw/OiBXZWJBdXRobkNyZWRlbnRpYWw7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlIHtcbiAgdHJ1c3RzPzogQXJyYXk8VHdvRmFjdG9yVHJ1c3Q+O1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclRydXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGV4cGlyYXRpb24/OiBudW1iZXI7XG4gIHN0YXJ0SW5zdGFudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZW5kaW5nUmVzcG9uc2Uge1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgR3JvdXBzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIEV2ZW50IChhbmQgY2FuIGJlIGNvbnZlcnRlZCB0byBKU09OKSB0aGF0IGlzIHVzZWQgZm9yIGFsbCB1c2VyIG1vZGlmaWNhdGlvbnMgKGNyZWF0ZSwgdXBkYXRlLFxuICogZGVsZXRlKS5cbiAqIDxwPlxuICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB1c2VyLmRlbGV0ZSBiZWNhdXNlIGl0IGlzIHNlbnQgYWZ0ZXIgdGhlIHR4IGlzIGNvbW1pdHRlZCwgdGhpcyBjYW5ub3QgYmUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRlbGV0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29ydEZpZWxkIHtcbiAgbWlzc2luZz86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgb3JkZXI/OiBTb3J0O1xufVxuXG4vKipcbiAqIFJlcXVlc3QgdG8gY29tcGxldGUgdGhlIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueSBmb3IgYSBuZXcgY3JlZGVudGlhbCwuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXF1ZXN0IHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuUHVibGljS2V5UmVnaXN0cmF0aW9uUmVxdWVzdDtcbiAgb3JpZ2luPzogc3RyaW5nO1xuICBycElkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgTGFtYmRhc1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYm9keT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IExhbWJkYVR5cGU7XG59XG5cbi8qKlxuICogVXNlciBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGN1cnJlbnRQYXNzd29yZD86IHN0cmluZztcbiAgZGlzYWJsZURvbWFpbkJsb2NrPzogYm9vbGVhbjtcbiAgc2VuZFNldFBhc3N3b3JkRW1haWw/OiBib29sZWFuO1xuICBza2lwVmVyaWZpY2F0aW9uPzogYm9vbGVhbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudExvZ2luQ29uZmlndXJhdGlvbiB7XG4gIHJlcXVpcmVBdXRoZW50aWNhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VSZXNwb25zZSB7XG4gIGRldmljZV9jb2RlPzogc3RyaW5nO1xuICBleHBpcmVzX2luPzogbnVtYmVyO1xuICBpbnRlcnZhbD86IG51bWJlcjtcbiAgdXNlcl9jb2RlPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25fdXJpPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25fdXJpX2NvbXBsZXRlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBMb2dvdXQgQVBJIHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gVVJMIHBhcmFtZXRlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nb3V0UmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBnbG9iYWw/OiBib29sZWFuO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVJlZ2lzdHJhdGlvblJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBUaGVtZVR5cGUge1xuICBhZHZhbmNlZCA9IFwiYWR2YW5jZWRcIixcbiAgc2ltcGxlID0gXCJzaW1wbGVcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSYXRlTGltaXRDb25maWd1cmF0aW9uIHtcbiAgZmFpbGVkTG9naW4/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBmb3Jnb3RQYXNzd29yZD86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIHNlbmRFbWFpbFZlcmlmaWNhdGlvbj86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIHNlbmRQYXNzd29yZGxlc3M/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgc2VuZFR3b0ZhY3Rvcj86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudCB7XG4gIGFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uPzogVGVuYW50QWNjZXNzQ29udHJvbENvbmZpZ3VyYXRpb247XG4gIGNhcHRjaGFDb25maWd1cmF0aW9uPzogVGVuYW50Q2FwdGNoYUNvbmZpZ3VyYXRpb247XG4gIGNvbmZpZ3VyZWQ/OiBib29sZWFuO1xuICBjb25uZWN0b3JQb2xpY2llcz86IEFycmF5PENvbm5lY3RvclBvbGljeT47XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbWFpbENvbmZpZ3VyYXRpb24/OiBFbWFpbENvbmZpZ3VyYXRpb247XG4gIGV2ZW50Q29uZmlndXJhdGlvbj86IEV2ZW50Q29uZmlndXJhdGlvbjtcbiAgZXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbj86IEV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb247XG4gIGZhaWxlZEF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbj86IEZhaWxlZEF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbjtcbiAgZmFtaWx5Q29uZmlndXJhdGlvbj86IEZhbWlseUNvbmZpZ3VyYXRpb247XG4gIGZvcm1Db25maWd1cmF0aW9uPzogVGVuYW50Rm9ybUNvbmZpZ3VyYXRpb247XG4gIGh0dHBTZXNzaW9uTWF4SW5hY3RpdmVJbnRlcnZhbD86IG51bWJlcjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGp3dENvbmZpZ3VyYXRpb24/OiBKV1RDb25maWd1cmF0aW9uO1xuICBsYW1iZGFDb25maWd1cmF0aW9uPzogVGVuYW50TGFtYmRhQ29uZmlndXJhdGlvbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvZ2luQ29uZmlndXJhdGlvbj86IFRlbmFudExvZ2luQ29uZmlndXJhdGlvbjtcbiAgbG9nb3V0VVJMPzogc3RyaW5nO1xuICBtYXhpbXVtUGFzc3dvcmRBZ2U/OiBNYXhpbXVtUGFzc3dvcmRBZ2U7XG4gIG1pbmltdW1QYXNzd29yZEFnZT86IE1pbmltdW1QYXNzd29yZEFnZTtcbiAgbXVsdGlGYWN0b3JDb25maWd1cmF0aW9uPzogVGVuYW50TXVsdGlGYWN0b3JDb25maWd1cmF0aW9uO1xuICBuYW1lPzogc3RyaW5nO1xuICBvYXV0aENvbmZpZ3VyYXRpb24/OiBUZW5hbnRPQXV0aDJDb25maWd1cmF0aW9uO1xuICBwYXNzd29yZEVuY3J5cHRpb25Db25maWd1cmF0aW9uPzogUGFzc3dvcmRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM/OiBQYXNzd29yZFZhbGlkYXRpb25SdWxlcztcbiAgcmF0ZUxpbWl0Q29uZmlndXJhdGlvbj86IFRlbmFudFJhdGVMaW1pdENvbmZpZ3VyYXRpb247XG4gIHJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24/OiBUZW5hbnRSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uO1xuICBzY2ltU2VydmVyQ29uZmlndXJhdGlvbj86IFRlbmFudFNDSU1TZXJ2ZXJDb25maWd1cmF0aW9uO1xuICBzc29Db25maWd1cmF0aW9uPzogVGVuYW50U1NPQ29uZmlndXJhdGlvbjtcbiAgc3RhdGU/OiBPYmplY3RTdGF0ZTtcbiAgdGhlbWVJZD86IFVVSUQ7XG4gIHVzZXJEZWxldGVQb2xpY3k/OiBUZW5hbnRVc2VyRGVsZXRlUG9saWN5O1xuICB1c2VybmFtZUNvbmZpZ3VyYXRpb24/OiBUZW5hbnRVc2VybmFtZUNvbmZpZ3VyYXRpb247XG4gIHdlYkF1dGhuQ29uZmlndXJhdGlvbj86IFRlbmFudFdlYkF1dGhuQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRPQXV0aDJDb25maWd1cmF0aW9uIHtcbiAgY2xpZW50Q3JlZGVudGlhbHNBY2Nlc3NUb2tlblBvcHVsYXRlTGFtYmRhSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIEFkZCBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJBZGRDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBUZW5hbnQgQVBJIHRvIGRlbGV0ZSBhIHRlbmFudCByYXRoZXIgdGhhbiB1c2luZyB0aGUgVVJMIHBhcmFtZXRlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50RGVsZXRlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhc3luYz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGNvbm5lY3RvcnMuIFRoaXMgZW51bSBpcyBzdG9yZWQgYXMgYW4gb3JkaW5hbCBvbiB0aGUgPGNvZGU+aWRlbnRpdGllczwvY29kZT4gdGFibGUsIG9yZGVyIG11c3QgYmUgbWFpbnRhaW5lZC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgZW51bSBDb25uZWN0b3JUeXBlIHtcbiAgRnVzaW9uQXV0aCA9IFwiRnVzaW9uQXV0aFwiLFxuICBHZW5lcmljID0gXCJHZW5lcmljXCIsXG4gIExEQVAgPSBcIkxEQVBcIlxufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBldmVudCBmb3IgYSBuZXcgZGV2aWNlICh1bi1yZWNvZ25pemVkKVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5OZXdEZXZpY2VFdmVudCBleHRlbmRzIFVzZXJMb2dpblN1Y2Nlc3NFdmVudCB7XG59XG5cbi8qKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRXZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhdXRoZW50aWNhdG9yQXR0YWNobWVudFByZWZlcmVuY2U/OiBBdXRoZW50aWNhdG9yQXR0YWNobWVudFByZWZlcmVuY2U7XG4gIHVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudD86IFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDtcbn1cblxuLyoqXG4gKiBYYm94IGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBYYm94SWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFhib3hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdHRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY29uc3VtZXJLZXk/OiBzdHJpbmc7XG4gIGNvbnN1bWVyU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUmVxdWVzdCB7XG4gIGNvbm5lY3Rvcj86IEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEV4dGVybmFsIEpXVC1vbmx5IGlkZW50aXR5IHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmYgYW5kIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbEpXVElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxFeHRlcm5hbEpXVEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBjbGFpbU1hcD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGRlZmF1bHRLZXlJZD86IFVVSUQ7XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBoZWFkZXJLZXlQYXJhbWV0ZXI/OiBzdHJpbmc7XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xuICB1bmlxdWVJZGVudGl0eUNsYWltPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgdG8gcmVnaXN0ZXIgYSBuZXcgcHVibGljIGtleSB3aXRoIFdlYkF1dGhuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblB1YmxpY0tleVJlZ2lzdHJhdGlvblJlcXVlc3Qge1xuICBjbGllbnRFeHRlbnNpb25SZXN1bHRzPzogV2ViQXV0aG5FeHRlbnNpb25zQ2xpZW50T3V0cHV0cztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJlc3BvbnNlPzogV2ViQXV0aG5BdXRoZW50aWNhdG9yUmVnaXN0cmF0aW9uUmVzcG9uc2U7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHRyYW5zcG9ydHM/OiBBcnJheTxzdHJpbmc+O1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdlYmhvb2sgc2VhcmNoIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rU2VhcmNoUmVzcG9uc2Uge1xuICB0b3RhbD86IG51bWJlcjtcbiAgd2ViaG9va3M/OiBBcnJheTxXZWJob29rPjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIGxvZ2luIHJlcG9ydC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlcG9ydFJlc3BvbnNlIHtcbiAgaG91cmx5Q291bnRzPzogQXJyYXk8Q291bnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFJlc3BvbnNlIHtcbn1cblxuLyoqXG4gKiBHcm91cCBNZW1iZXIgRGVsZXRlIFJlcXVlc3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyRGVsZXRlUmVxdWVzdCB7XG4gIG1lbWJlcklkcz86IEFycmF5PFVVSUQ+O1xuICBtZW1iZXJzPzogUmVjb3JkPFVVSUQsIEFycmF5PFVVSUQ+Pjtcbn1cblxuLyoqXG4gKiBBIGhpc3RvcmljYWwgc3RhdGUgb2YgYSB1c2VyIGxvZyBldmVudC4gU2luY2UgZXZlbnRzIGNhbiBiZSBtb2RpZmllZCwgdGhpcyBzdG9yZXMgdGhlIGhpc3RvcmljYWwgc3RhdGUuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nSGlzdG9yeSB7XG4gIGhpc3RvcnlJdGVtcz86IEFycmF5PEhpc3RvcnlJdGVtPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5SXRlbSB7XG4gIGFjdGlvbmVyVXNlcklkPzogVVVJRDtcbiAgY29tbWVudD86IHN0cmluZztcbiAgY3JlYXRlSW5zdGFudD86IG51bWJlcjtcbiAgZXhwaXJ5PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhdWRpdExvZz86IEF1ZGl0TG9nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICB0aW1lUGVyaW9kSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgbWFya2VyIGludGVyZmFjZSBpbmRpY2F0aW5nIHRoaXMgZXZlbnQgY2Fubm90IGJlIG1hZGUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9uVHJhbnNhY3Rpb25hbEV2ZW50IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgZW51bSBQcm9vZktleUZvckNvZGVFeGNoYW5nZVBvbGljeSB7XG4gIFJlcXVpcmVkID0gXCJSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZCA9IFwiTm90UmVxdWlyZWRcIixcbiAgTm90UmVxdWlyZWRXaGVuVXNpbmdDbGllbnRBdXRoZW50aWNhdGlvbiA9IFwiTm90UmVxdWlyZWRXaGVuVXNpbmdDbGllbnRBdXRoZW50aWNhdGlvblwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclJlc3BvbnNlIHtcbiAgY29kZT86IHN0cmluZztcbiAgcmVjb3ZlcnlDb2Rlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogRXBpYyBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXBpY0dhbWVzSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEVwaWNHYW1lc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vLyBEbyBub3QgcmVxdWlyZSBhIHNldHRlciBmb3IgJ3R5cGUnLCBpdCBpcyBkZWZpbmVkIGJ5IHRoZSBjb25jcmV0ZSBjbGFzcyBhbmQgaXMgbm90IG11dGFibGVcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVidWc/OiBib29sZWFuO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0cmFuc3BvcnQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBNZXNzZW5nZXJUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRSZXNwb25zZSB7XG4gIHNlY3JldD86IHN0cmluZztcbiAgc2VjcmV0QmFzZTMyRW5jb2RlZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXRpZXNcbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVNlYXJjaFJlc3BvbnNlIHtcbiAgZW50aXRpZXM/OiBBcnJheTxFbnRpdHk+O1xuICBuZXh0UmVzdWx0cz86IHN0cmluZztcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRMYW1iZGFDb25maWd1cmF0aW9uIHtcbiAgbG9naW5WYWxpZGF0aW9uSWQ/OiBVVUlEO1xuICBzY2ltRW50ZXJwcmlzZVVzZXJSZXF1ZXN0Q29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltRW50ZXJwcmlzZVVzZXJSZXNwb25zZUNvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbUdyb3VwUmVxdWVzdENvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbUdyb3VwUmVzcG9uc2VDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1Vc2VyUmVxdWVzdENvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbVVzZXJSZXNwb25zZUNvbnZlcnRlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pa2V5IFNsZWV2aVxuICovXG5leHBvcnQgZW51bSBNZXNzYWdlVHlwZSB7XG4gIFNNUyA9IFwiU01TXCJcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIFJlbHlpbmcgUGFydHkncyByZXF1aXJlbWVudHMgZm9yIDxhIGhyZWY9XCJodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4tMi8jY2xpZW50LXNpZGUtZGlzY292ZXJhYmxlLWNyZWRlbnRpYWxcIj5jbGllbnQtc2lkZVxuICogZGlzY292ZXJhYmxlIGNyZWRlbnRpYWxzPC9hPiAoZm9ybWVybHkga25vd24gYXMgXCJyZXNpZGVudCBrZXlzXCIpXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gUmVzaWRlbnRLZXlSZXF1aXJlbWVudCB7XG4gIGRpc2NvdXJhZ2VkID0gXCJkaXNjb3VyYWdlZFwiLFxuICBwcmVmZXJyZWQgPSBcInByZWZlcnJlZFwiLFxuICByZXF1aXJlZCA9IFwicmVxdWlyZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBlbnVtIENoYW5nZVBhc3N3b3JkUmVhc29uIHtcbiAgQWRtaW5pc3RyYXRpdmUgPSBcIkFkbWluaXN0cmF0aXZlXCIsXG4gIEJyZWFjaGVkID0gXCJCcmVhY2hlZFwiLFxuICBFeHBpcmVkID0gXCJFeHBpcmVkXCIsXG4gIFZhbGlkYXRpb24gPSBcIlZhbGlkYXRpb25cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY01lc3NlbmdlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiB7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBoZWFkZXJzPzogSFRUUEhlYWRlcnM7XG4gIGh0dHBBdXRoZW50aWNhdGlvblBhc3N3b3JkPzogc3RyaW5nO1xuICBodHRwQXV0aGVudGljYXRpb25Vc2VybmFtZT86IHN0cmluZztcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHNzbENlcnRpZmljYXRlPzogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU29ueVBTTiBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29ueVBTTklkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxTb255UFNOQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xFbnRyeSB7XG4gIGFjdGlvbj86IElQQWNjZXNzQ29udHJvbEVudHJ5QWN0aW9uO1xuICBlbmRJUEFkZHJlc3M/OiBzdHJpbmc7XG4gIHN0YXJ0SVBBZGRyZXNzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvdW50IHtcbiAgY291bnQ/OiBudW1iZXI7XG4gIGludGVydmFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBMREFQIGNvbm5lY3Rvci5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExEQVBDb25uZWN0b3JDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xuICBhdXRoZW50aWNhdGlvblVSTD86IHN0cmluZztcbiAgYmFzZVN0cnVjdHVyZT86IHN0cmluZztcbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gIGlkZW50aWZ5aW5nQXR0cmlidXRlPzogc3RyaW5nO1xuICBsYW1iZGFDb25maWd1cmF0aW9uPzogTGFtYmRhQ29uZmlndXJhdGlvbjtcbiAgbG9naW5JZEF0dHJpYnV0ZT86IHN0cmluZztcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHJlcXVlc3RlZEF0dHJpYnV0ZXM/OiBBcnJheTxzdHJpbmc+O1xuICBzZWN1cml0eU1ldGhvZD86IExEQVBTZWN1cml0eU1ldGhvZDtcbiAgc3lzdGVtQWNjb3VudEROPzogc3RyaW5nO1xuICBzeXN0ZW1BY2NvdW50UGFzc3dvcmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIExEQVBTZWN1cml0eU1ldGhvZCB7XG4gIE5vbmUgPSBcIk5vbmVcIixcbiAgTERBUFMgPSBcIkxEQVBTXCIsXG4gIFN0YXJ0VExTID0gXCJTdGFydFRMU1wiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIHJlY29uY2lsZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEpvaG5hdGhvbiBXb29kXG4gKi9cbmV4cG9ydCBlbnVtIE9hdXRoMkF1dGhvcml6ZWRVUkxWYWxpZGF0aW9uUG9saWN5IHtcbiAgQWxsb3dXaWxkY2FyZHMgPSBcIkFsbG93V2lsZGNhcmRzXCIsXG4gIEV4YWN0TWF0Y2ggPSBcIkV4YWN0TWF0Y2hcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ09SU0NvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYWxsb3dDcmVkZW50aWFscz86IGJvb2xlYW47XG4gIGFsbG93ZWRIZWFkZXJzPzogQXJyYXk8c3RyaW5nPjtcbiAgYWxsb3dlZE1ldGhvZHM/OiBBcnJheTxIVFRQTWV0aG9kPjtcbiAgYWxsb3dlZE9yaWdpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGV4cG9zZWRIZWFkZXJzPzogQXJyYXk8c3RyaW5nPjtcbiAgcHJlZmxpZ2h0TWF4QWdlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi0yLyNhdXRoZW50aWNhdG9yLWF0dGFjaG1lbnQtbW9kYWxpdHlcIj5hdXRoZW50aWNhdG9yIGF0dGFjaG1lbnQgbW9kYWxpdHk8L2E+LlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIEF1dGhlbnRpY2F0b3JBdHRhY2htZW50IHtcbiAgcGxhdGZvcm0gPSBcInBsYXRmb3JtXCIsXG4gIGNyb3NzUGxhdGZvcm0gPSBcImNyb3NzUGxhdGZvcm1cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0V4cG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGNyaXRlcmlhPzogQXVkaXRMb2dTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTdXBwbHkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBhY2NvdW50IHdoZW4gY3JlYXRpbmcgYSBuZXcgY3JlZGVudGlhbFxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgZXh0ZW5kcyBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtU3RlcCB7XG4gIGZpZWxkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgZW50aXR5IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBHcm91cCBNZW1iZXJzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBncm91cElkPzogVVVJRDtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Qge1xuICBVc2VQb3B1cCA9IFwiVXNlUG9wdXBcIixcbiAgVXNlUmVkaXJlY3QgPSBcIlVzZVJlZGlyZWN0XCIsXG4gIFVzZVZlbmRvckphdmFTY3JpcHQgPSBcIlVzZVZlbmRvckphdmFTY3JpcHRcIlxufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgdGhlbWVzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBUaGVtZVR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbmltdW1QYXNzd29yZEFnZSBleHRlbmRzIEVuYWJsZWFibGUge1xuICBzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIExvZ2luIFBpbmcgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblBpbmdSZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbm5lY3RBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvbkltYWdlVVJMPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBvYXV0aDI/OiBJZGVudGl0eVByb3ZpZGVyT2F1dGgyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb24ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgbGltaXRVc2VyTGlua0NvdW50PzogSWRlbnRpdHlQcm92aWRlckxpbWl0VXNlckxpbmtpbmdQb2xpY3k7XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgZm9yIFVzZXIgY29uc2VudCB0eXBlcy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFJlcXVlc3Qge1xuICBjb25zZW50PzogQ29uc2VudDtcbn1cblxuLyoqXG4gKiBTdXBwbHkgaW5mb3JtYXRpb24gb24gY3JlZGVudGlhbCB0eXBlIGFuZCBhbGdvcml0aG0gdG8gdGhlIDxpPmF1dGhlbnRpY2F0b3I8L2k+LlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMge1xuICBhbGc/OiBDb3NlQWxnb3JpdGhtSWRlbnRpZmllcjtcbiAgdHlwZT86IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlO1xufVxuXG4vKipcbiAqIE1vZGVscyBhIHNldCBvZiBsb2NhbGl6ZWQgU3RyaW5ncyB0aGF0IGNhbiBiZSBzdG9yZWQgYXMgSlNPTi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbGl6ZWRTdHJpbmdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBSZWZyZXNoVG9rZW5Vc2FnZVBvbGljeSB7XG4gIFJldXNhYmxlID0gXCJSZXVzYWJsZVwiLFxuICBPbmVUaW1lVXNlID0gXCJPbmVUaW1lVXNlXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBlbnVtIFNBTUx2MkRlc3RpbmF0aW9uQXNzZXJ0aW9uUG9saWN5IHtcbiAgRW5hYmxlZCA9IFwiRW5hYmxlZFwiLFxuICBEaXNhYmxlZCA9IFwiRGlzYWJsZWRcIixcbiAgQWxsb3dBbHRlcm5hdGVzID0gXCJBbGxvd0FsdGVybmF0ZXNcIlxufVxuXG4vKipcbiAqIEludGVyZmFjZSBkZXNjcmliaW5nIHRoZSBuZWVkIGZvciBDT1JTIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVzQ09SU0NvbmZpZ3VyYXRpb24ge1xufVxuXG4vKipcbiAqIENoYW5nZSBwYXNzd29yZCByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VQYXNzd29yZFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNoYW5nZVBhc3N3b3JkSWQ/OiBzdHJpbmc7XG4gIGN1cnJlbnRQYXNzd29yZD86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdHJ1c3RDaGFsbGVuZ2U/OiBzdHJpbmc7XG4gIHRydXN0VG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaWRlbnRpdHlQcm92aWRlcklkPzogVVVJRDtcbiAgbG9naW5JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aEVycm9yIHtcbiAgY2hhbmdlX3Bhc3N3b3JkX2lkPzogc3RyaW5nO1xuICBlcnJvcj86IE9BdXRoRXJyb3JUeXBlO1xuICBlcnJvcl9kZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXJyb3JfcmVhc29uPzogT0F1dGhFcnJvclJlYXNvbjtcbiAgZXJyb3JfdXJpPzogc3RyaW5nO1xuICB0d29fZmFjdG9yX2lkPzogc3RyaW5nO1xuICB0d29fZmFjdG9yX21ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xufVxuXG5leHBvcnQgZW51bSBPQXV0aEVycm9yUmVhc29uIHtcbiAgYXV0aF9jb2RlX25vdF9mb3VuZCA9IFwiYXV0aF9jb2RlX25vdF9mb3VuZFwiLFxuICBhY2Nlc3NfdG9rZW5fbWFsZm9ybWVkID0gXCJhY2Nlc3NfdG9rZW5fbWFsZm9ybWVkXCIsXG4gIGFjY2Vzc190b2tlbl9leHBpcmVkID0gXCJhY2Nlc3NfdG9rZW5fZXhwaXJlZFwiLFxuICBhY2Nlc3NfdG9rZW5fdW5hdmFpbGFibGVfZm9yX3Byb2Nlc3NpbmcgPSBcImFjY2Vzc190b2tlbl91bmF2YWlsYWJsZV9mb3JfcHJvY2Vzc2luZ1wiLFxuICBhY2Nlc3NfdG9rZW5fZmFpbGVkX3Byb2Nlc3NpbmcgPSBcImFjY2Vzc190b2tlbl9mYWlsZWRfcHJvY2Vzc2luZ1wiLFxuICBhY2Nlc3NfdG9rZW5faW52YWxpZCA9IFwiYWNjZXNzX3Rva2VuX2ludmFsaWRcIixcbiAgYWNjZXNzX3Rva2VuX3JlcXVpcmVkID0gXCJhY2Nlc3NfdG9rZW5fcmVxdWlyZWRcIixcbiAgcmVmcmVzaF90b2tlbl9ub3RfZm91bmQgPSBcInJlZnJlc2hfdG9rZW5fbm90X2ZvdW5kXCIsXG4gIHJlZnJlc2hfdG9rZW5fdHlwZV9ub3Rfc3VwcG9ydGVkID0gXCJyZWZyZXNoX3Rva2VuX3R5cGVfbm90X3N1cHBvcnRlZFwiLFxuICBpbnZhbGlkX2NsaWVudF9pZCA9IFwiaW52YWxpZF9jbGllbnRfaWRcIixcbiAgaW52YWxpZF91c2VyX2NyZWRlbnRpYWxzID0gXCJpbnZhbGlkX3VzZXJfY3JlZGVudGlhbHNcIixcbiAgaW52YWxpZF9ncmFudF90eXBlID0gXCJpbnZhbGlkX2dyYW50X3R5cGVcIixcbiAgaW52YWxpZF9vcmlnaW4gPSBcImludmFsaWRfb3JpZ2luXCIsXG4gIGludmFsaWRfb3JpZ2luX29wYXF1ZSA9IFwiaW52YWxpZF9vcmlnaW5fb3BhcXVlXCIsXG4gIGludmFsaWRfcGtjZV9jb2RlX3ZlcmlmaWVyID0gXCJpbnZhbGlkX3BrY2VfY29kZV92ZXJpZmllclwiLFxuICBpbnZhbGlkX3BrY2VfY29kZV9jaGFsbGVuZ2UgPSBcImludmFsaWRfcGtjZV9jb2RlX2NoYWxsZW5nZVwiLFxuICBpbnZhbGlkX3BrY2VfY29kZV9jaGFsbGVuZ2VfbWV0aG9kID0gXCJpbnZhbGlkX3BrY2VfY29kZV9jaGFsbGVuZ2VfbWV0aG9kXCIsXG4gIGludmFsaWRfcmVkaXJlY3RfdXJpID0gXCJpbnZhbGlkX3JlZGlyZWN0X3VyaVwiLFxuICBpbnZhbGlkX3Jlc3BvbnNlX21vZGUgPSBcImludmFsaWRfcmVzcG9uc2VfbW9kZVwiLFxuICBpbnZhbGlkX3Jlc3BvbnNlX3R5cGUgPSBcImludmFsaWRfcmVzcG9uc2VfdHlwZVwiLFxuICBpbnZhbGlkX2lkX3Rva2VuX2hpbnQgPSBcImludmFsaWRfaWRfdG9rZW5faGludFwiLFxuICBpbnZhbGlkX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IFwiaW52YWxpZF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIixcbiAgaW52YWxpZF9kZXZpY2VfY29kZSA9IFwiaW52YWxpZF9kZXZpY2VfY29kZVwiLFxuICBpbnZhbGlkX3VzZXJfY29kZSA9IFwiaW52YWxpZF91c2VyX2NvZGVcIixcbiAgaW52YWxpZF9hZGRpdGlvbmFsX2NsaWVudF9pZCA9IFwiaW52YWxpZF9hZGRpdGlvbmFsX2NsaWVudF9pZFwiLFxuICBpbnZhbGlkX3RhcmdldF9lbnRpdHlfc2NvcGUgPSBcImludmFsaWRfdGFyZ2V0X2VudGl0eV9zY29wZVwiLFxuICBpbnZhbGlkX2VudGl0eV9wZXJtaXNzaW9uX3Njb3BlID0gXCJpbnZhbGlkX2VudGl0eV9wZXJtaXNzaW9uX3Njb3BlXCIsXG4gIGludmFsaWRfdXNlcl9pZCA9IFwiaW52YWxpZF91c2VyX2lkXCIsXG4gIGdyYW50X3R5cGVfZGlzYWJsZWQgPSBcImdyYW50X3R5cGVfZGlzYWJsZWRcIixcbiAgbWlzc2luZ19jbGllbnRfaWQgPSBcIm1pc3NpbmdfY2xpZW50X2lkXCIsXG4gIG1pc3NpbmdfY2xpZW50X3NlY3JldCA9IFwibWlzc2luZ19jbGllbnRfc2VjcmV0XCIsXG4gIG1pc3NpbmdfY29kZSA9IFwibWlzc2luZ19jb2RlXCIsXG4gIG1pc3NpbmdfY29kZV9jaGFsbGVuZ2UgPSBcIm1pc3NpbmdfY29kZV9jaGFsbGVuZ2VcIixcbiAgbWlzc2luZ19jb2RlX3ZlcmlmaWVyID0gXCJtaXNzaW5nX2NvZGVfdmVyaWZpZXJcIixcbiAgbWlzc2luZ19kZXZpY2VfY29kZSA9IFwibWlzc2luZ19kZXZpY2VfY29kZVwiLFxuICBtaXNzaW5nX2dyYW50X3R5cGUgPSBcIm1pc3NpbmdfZ3JhbnRfdHlwZVwiLFxuICBtaXNzaW5nX3JlZGlyZWN0X3VyaSA9IFwibWlzc2luZ19yZWRpcmVjdF91cmlcIixcbiAgbWlzc2luZ19yZWZyZXNoX3Rva2VuID0gXCJtaXNzaW5nX3JlZnJlc2hfdG9rZW5cIixcbiAgbWlzc2luZ19yZXNwb25zZV90eXBlID0gXCJtaXNzaW5nX3Jlc3BvbnNlX3R5cGVcIixcbiAgbWlzc2luZ190b2tlbiA9IFwibWlzc2luZ190b2tlblwiLFxuICBtaXNzaW5nX3VzZXJfY29kZSA9IFwibWlzc2luZ191c2VyX2NvZGVcIixcbiAgbWlzc2luZ191c2VyX2lkID0gXCJtaXNzaW5nX3VzZXJfaWRcIixcbiAgbWlzc2luZ192ZXJpZmljYXRpb25fdXJpID0gXCJtaXNzaW5nX3ZlcmlmaWNhdGlvbl91cmlcIixcbiAgbG9naW5fcHJldmVudGVkID0gXCJsb2dpbl9wcmV2ZW50ZWRcIixcbiAgbm90X2xpY2Vuc2VkID0gXCJub3RfbGljZW5zZWRcIixcbiAgdXNlcl9jb2RlX2V4cGlyZWQgPSBcInVzZXJfY29kZV9leHBpcmVkXCIsXG4gIHVzZXJfZXhwaXJlZCA9IFwidXNlcl9leHBpcmVkXCIsXG4gIHVzZXJfbG9ja2VkID0gXCJ1c2VyX2xvY2tlZFwiLFxuICB1c2VyX25vdF9mb3VuZCA9IFwidXNlcl9ub3RfZm91bmRcIixcbiAgY2xpZW50X2F1dGhlbnRpY2F0aW9uX21pc3NpbmcgPSBcImNsaWVudF9hdXRoZW50aWNhdGlvbl9taXNzaW5nXCIsXG4gIGludmFsaWRfY2xpZW50X2F1dGhlbnRpY2F0aW9uX3NjaGVtZSA9IFwiaW52YWxpZF9jbGllbnRfYXV0aGVudGljYXRpb25fc2NoZW1lXCIsXG4gIGludmFsaWRfY2xpZW50X2F1dGhlbnRpY2F0aW9uID0gXCJpbnZhbGlkX2NsaWVudF9hdXRoZW50aWNhdGlvblwiLFxuICBjbGllbnRfaWRfbWlzbWF0Y2ggPSBcImNsaWVudF9pZF9taXNtYXRjaFwiLFxuICBjaGFuZ2VfcGFzc3dvcmRfYWRtaW5pc3RyYXRpdmUgPSBcImNoYW5nZV9wYXNzd29yZF9hZG1pbmlzdHJhdGl2ZVwiLFxuICBjaGFuZ2VfcGFzc3dvcmRfYnJlYWNoZWQgPSBcImNoYW5nZV9wYXNzd29yZF9icmVhY2hlZFwiLFxuICBjaGFuZ2VfcGFzc3dvcmRfZXhwaXJlZCA9IFwiY2hhbmdlX3Bhc3N3b3JkX2V4cGlyZWRcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX3ZhbGlkYXRpb24gPSBcImNoYW5nZV9wYXNzd29yZF92YWxpZGF0aW9uXCIsXG4gIHVua25vd24gPSBcInVua25vd25cIixcbiAgbWlzc2luZ19yZXF1aXJlZF9zY29wZSA9IFwibWlzc2luZ19yZXF1aXJlZF9zY29wZVwiLFxuICB1bmtub3duX3Njb3BlID0gXCJ1bmtub3duX3Njb3BlXCIsXG4gIGNvbnNlbnRfY2FuY2VsZWQgPSBcImNvbnNlbnRfY2FuY2VsZWRcIlxufVxuXG5leHBvcnQgZW51bSBPQXV0aEVycm9yVHlwZSB7XG4gIGludmFsaWRfcmVxdWVzdCA9IFwiaW52YWxpZF9yZXF1ZXN0XCIsXG4gIGludmFsaWRfY2xpZW50ID0gXCJpbnZhbGlkX2NsaWVudFwiLFxuICBpbnZhbGlkX2dyYW50ID0gXCJpbnZhbGlkX2dyYW50XCIsXG4gIGludmFsaWRfdG9rZW4gPSBcImludmFsaWRfdG9rZW5cIixcbiAgdW5hdXRob3JpemVkX2NsaWVudCA9IFwidW5hdXRob3JpemVkX2NsaWVudFwiLFxuICBpbnZhbGlkX3Njb3BlID0gXCJpbnZhbGlkX3Njb3BlXCIsXG4gIHNlcnZlcl9lcnJvciA9IFwic2VydmVyX2Vycm9yXCIsXG4gIHVuc3VwcG9ydGVkX2dyYW50X3R5cGUgPSBcInVuc3VwcG9ydGVkX2dyYW50X3R5cGVcIixcbiAgdW5zdXBwb3J0ZWRfcmVzcG9uc2VfdHlwZSA9IFwidW5zdXBwb3J0ZWRfcmVzcG9uc2VfdHlwZVwiLFxuICBhY2Nlc3NfZGVuaWVkID0gXCJhY2Nlc3NfZGVuaWVkXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9yZXF1aXJlZCA9IFwiY2hhbmdlX3Bhc3N3b3JkX3JlcXVpcmVkXCIsXG4gIG5vdF9saWNlbnNlZCA9IFwibm90X2xpY2Vuc2VkXCIsXG4gIHR3b19mYWN0b3JfcmVxdWlyZWQgPSBcInR3b19mYWN0b3JfcmVxdWlyZWRcIixcbiAgYXV0aG9yaXphdGlvbl9wZW5kaW5nID0gXCJhdXRob3JpemF0aW9uX3BlbmRpbmdcIixcbiAgZXhwaXJlZF90b2tlbiA9IFwiZXhwaXJlZF90b2tlblwiLFxuICB1bnN1cHBvcnRlZF90b2tlbl90eXBlID0gXCJ1bnN1cHBvcnRlZF90b2tlbl90eXBlXCJcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFsbCBpZGVudGl0eSBwcm92aWRlcnMgdGhhdCBjYW4gYmUgZG9tYWluIGJhc2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvbWFpbkJhc2VkSWRlbnRpdHlQcm92aWRlciB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUluZm8ge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbGFzdEFjY2Vzc2VkQWRkcmVzcz86IHN0cmluZztcbiAgbGFzdEFjY2Vzc2VkSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gRGV2aWNlVHlwZSB7XG4gIEJST1dTRVIgPSBcIkJST1dTRVJcIixcbiAgREVTS1RPUCA9IFwiREVTS1RPUFwiLFxuICBMQVBUT1AgPSBcIkxBUFRPUFwiLFxuICBNT0JJTEUgPSBcIk1PQklMRVwiLFxuICBPVEhFUiA9IFwiT1RIRVJcIixcbiAgU0VSVkVSID0gXCJTRVJWRVJcIixcbiAgVEFCTEVUID0gXCJUQUJMRVRcIixcbiAgVFYgPSBcIlRWXCIsXG4gIFVOS05PV04gPSBcIlVOS05PV05cIlxufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gQVBJLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZSB7XG4gIHN5c3RlbUNvbmZpZ3VyYXRpb24/OiBTeXN0ZW1Db25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yU3RhdHVzIHtcbiAgYWR2YW5jZWRJZGVudGl0eVByb3ZpZGVycz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZExhbWJkYXM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYWR2YW5jZWRNdWx0aUZhY3RvckF1dGhlbnRpY2F0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkT0F1dGhTY29wZXM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYWR2YW5jZWRPQXV0aFNjb3Blc0N1c3RvbVNjb3Blcz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZE9BdXRoU2NvcGVzVGhpcmRQYXJ0eUFwcGxpY2F0aW9ucz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZFJlZ2lzdHJhdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhcHBsaWNhdGlvbk11bHRpRmFjdG9yQXV0aGVudGljYXRpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYXBwbGljYXRpb25UaGVtZXM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYnJlYWNoZWRQYXNzd29yZERldGVjdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBjb25uZWN0b3JzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGVudGl0eU1hbmFnZW1lbnQ/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgZXhwaXJhdGlvbj86IHN0cmluZztcbiAgbGljZW5zZUF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBsaWNlbnNlZD86IGJvb2xlYW47XG4gIHNjaW1TZXJ2ZXI/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgdGhyZWF0RGV0ZWN0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIHdlYkF1dGhuPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIHdlYkF1dGhuUGxhdGZvcm1BdXRoZW50aWNhdG9ycz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB3ZWJBdXRoblJvYW1pbmdBdXRoZW50aWNhdG9ycz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgY29tcGxldGluZyBXZWJBdXRobiBhc3NlcnRpb25cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQXNzZXJ0UmVzcG9uc2Uge1xuICBjcmVkZW50aWFsPzogV2ViQXV0aG5DcmVkZW50aWFsO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQXBwbGljYXRpb25NdWx0aUZhY3RvclRydXN0UG9saWN5IHtcbiAgQW55ID0gXCJBbnlcIixcbiAgVGhpcyA9IFwiVGhpc1wiLFxuICBOb25lID0gXCJOb25lXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF4aW11bVBhc3N3b3JkQWdlIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGRheXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgYSB1c2VyIGV2ZW50IChsb2dpbiwgcmVnaXN0ZXIsIGV0YykgdGhhdCBoZWxwcyBpZGVudGlmeSB0aGUgc291cmNlIG9mIHRoZSBldmVudCAobG9jYXRpb24sIGRldmljZSB0eXBlLCBPUywgZXRjKS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudEluZm8ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGV2aWNlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGRldmljZU5hbWU/OiBzdHJpbmc7XG4gIGRldmljZVR5cGU/OiBzdHJpbmc7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgbG9jYXRpb24/OiBMb2NhdGlvbjtcbiAgb3M/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFJhdGVMaW1pdGVkUmVxdWVzdFR5cGUge1xuICBGYWlsZWRMb2dpbiA9IFwiRmFpbGVkTG9naW5cIixcbiAgRm9yZ290UGFzc3dvcmQgPSBcIkZvcmdvdFBhc3N3b3JkXCIsXG4gIFNlbmRFbWFpbFZlcmlmaWNhdGlvbiA9IFwiU2VuZEVtYWlsVmVyaWZpY2F0aW9uXCIsXG4gIFNlbmRQYXNzd29yZGxlc3MgPSBcIlNlbmRQYXNzd29yZGxlc3NcIixcbiAgU2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbiA9IFwiU2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvblwiLFxuICBTZW5kVHdvRmFjdG9yID0gXCJTZW5kVHdvRmFjdG9yXCJcbn1cblxuLyoqXG4gKiBBdWRpdCBsb2cgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dTZWFyY2hSZXNwb25zZSB7XG4gIGF1ZGl0TG9ncz86IEFycmF5PEF1ZGl0TG9nPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBMYW1iZGFFbmdpbmVUeXBlIHtcbiAgR3JhYWxKUyA9IFwiR3JhYWxKU1wiLFxuICBOYXNob3JuID0gXCJOYXNob3JuXCJcbn1cblxuLyoqXG4gKiBTQU1MIHYyIGlkZW50aXR5IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VTQU1MdjJJZGVudGl0eVByb3ZpZGVyPFNBTUx2MkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBhc3NlcnRpb25Db25maWd1cmF0aW9uPzogU0FNTHYyQXNzZXJ0aW9uQ29uZmlndXJhdGlvbjtcbiAgYnV0dG9uSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBpZHBFbmRwb2ludD86IHN0cmluZztcbiAgaWRwSW5pdGlhdGVkQ29uZmlndXJhdGlvbj86IFNBTUx2MklkcEluaXRpYXRlZENvbmZpZ3VyYXRpb247XG4gIGlzc3Vlcj86IHN0cmluZztcbiAgbG9naW5IaW50Q29uZmlndXJhdGlvbj86IExvZ2luSGludENvbmZpZ3VyYXRpb247XG4gIG5hbWVJZEZvcm1hdD86IHN0cmluZztcbiAgcG9zdFJlcXVlc3Q/OiBib29sZWFuO1xuICByZXF1ZXN0U2lnbmluZ0tleUlkPzogVVVJRDtcbiAgc2lnblJlcXVlc3Q/OiBib29sZWFuO1xuICB4bWxTaWduYXR1cmVDMTRuTWV0aG9kPzogQ2Fub25pY2FsaXphdGlvbk1ldGhvZDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHN0YXJ0aW5nIGEgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuU3RhcnRSZXNwb25zZSB7XG4gIG9wdGlvbnM/OiBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0eSB0eXBlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEVudGl0eVR5cGVTZWFyY2hDcml0ZXJpYTtcbn1cblxuLy8gRG8gbm90IHJlcXVpcmUgYSBzZXR0ZXIgZm9yICd0eXBlJywgaXQgaXMgZGVmaW5lZCBieSB0aGUgY29uY3JldGUgY2xhc3MgYW5kIGlzIG5vdCBtdXRhYmxlXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IENvbm5lY3RvclR5cGU7XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgZm9yIG1hbmFnaW5nIGZhbWlsaWVzIGFuZCBtZW1iZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseVJlcXVlc3Qge1xuICBmYW1pbHlNZW1iZXI/OiBGYW1pbHlNZW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbG9hZFJlcXVlc3Qge1xuICBuYW1lcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JTdGFydFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY29kZT86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0cnVzdENoYWxsZW5nZT86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25NdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24ge1xuICBlbWFpbD86IE11bHRpRmFjdG9yRW1haWxUZW1wbGF0ZTtcbiAgbG9naW5Qb2xpY3k/OiBNdWx0aUZhY3RvckxvZ2luUG9saWN5O1xuICBzbXM/OiBNdWx0aUZhY3RvclNNU1RlbXBsYXRlO1xuICB0cnVzdFBvbGljeT86IEFwcGxpY2F0aW9uTXVsdGlGYWN0b3JUcnVzdFBvbGljeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvckVtYWlsVGVtcGxhdGUge1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvclNNU1RlbXBsYXRlIHtcbiAgdGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElzc3VlUmVzcG9uc2Uge1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlIHtcbiAgaWRlbnRpdHlQcm92aWRlckxpbms/OiBJZGVudGl0eVByb3ZpZGVyTGluaztcbiAgaWRlbnRpdHlQcm92aWRlckxpbmtzPzogQXJyYXk8SWRlbnRpdHlQcm92aWRlckxpbms+O1xufVxuXG4vKipcbiAqIFJlcXVlc3QgdG8gYXV0aGVudGljYXRlIHdpdGggV2ViQXV0aG5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuUHVibGljS2V5QXV0aGVudGljYXRpb25SZXF1ZXN0IHtcbiAgY2xpZW50RXh0ZW5zaW9uUmVzdWx0cz86IFdlYkF1dGhuRXh0ZW5zaW9uc0NsaWVudE91dHB1dHM7XG4gIGlkPzogc3RyaW5nO1xuICByZXNwb25zZT86IFdlYkF1dGhuQXV0aGVudGljYXRvckF1dGhlbnRpY2F0aW9uUmVzcG9uc2U7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW50aXR5IEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlSZXF1ZXN0IHtcbiAgZW50aXR5PzogRW50aXR5O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xuICBvcmlnaW5hbD86IEdyb3VwO1xufVxuXG4vKipcbiAqIENsZWFuU3BlYWsgY29uZmlndXJhdGlvbiBhdCB0aGUgc3lzdGVtIGFuZCBhcHBsaWNhdGlvbiBsZXZlbC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGVhblNwZWFrQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIHVybD86IHN0cmluZztcbiAgdXNlcm5hbWVNb2RlcmF0aW9uPzogVXNlcm5hbWVNb2RlcmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJuYW1lTW9kZXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBTdG9yZXMgYW4gZW1haWwgdGVtcGxhdGUgdXNlZCB0byBzZW5kIGVtYWlscyB0byB1c2Vycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlIHtcbiAgZGVmYXVsdEZyb21OYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0SHRtbFRlbXBsYXRlPzogc3RyaW5nO1xuICBkZWZhdWx0U3ViamVjdD86IHN0cmluZztcbiAgZGVmYXVsdFRleHRUZW1wbGF0ZT86IHN0cmluZztcbiAgZnJvbUVtYWlsPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRGcm9tTmFtZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBsb2NhbGl6ZWRIdG1sVGVtcGxhdGVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbG9jYWxpemVkU3ViamVjdHM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBsb2NhbGl6ZWRUZXh0VGVtcGxhdGVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIG1hbmFnaW5nIGZhbWlsaWVzIGFuZCBtZW1iZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseVJlc3BvbnNlIHtcbiAgZmFtaWxpZXM/OiBBcnJheTxGYW1pbHk+O1xuICBmYW1pbHk/OiBGYW1pbHk7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3BvbnNlIGZvciBHcm91cCBNZW1iZXJzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyU2VhcmNoUmVzcG9uc2Uge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWNoZWRQYXNzd29yZFRlbmFudE1ldHJpYyB7XG4gIGFjdGlvblJlcXVpcmVkPzogbnVtYmVyO1xuICBtYXRjaGVkQ29tbW9uUGFzc3dvcmRDb3VudD86IG51bWJlcjtcbiAgbWF0Y2hlZEV4YWN0Q291bnQ/OiBudW1iZXI7XG4gIG1hdGNoZWRQYXNzd29yZENvdW50PzogbnVtYmVyO1xuICBtYXRjaGVkU3ViQWRkcmVzc0NvdW50PzogbnVtYmVyO1xuICBwYXNzd29yZHNDaGVja2VkQ291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogSldUIENvbmZpZ3VyYXRpb24uIEEgSldUIENvbmZpZ3VyYXRpb24gZm9yIGFuIEFwcGxpY2F0aW9uIG1heSBub3QgYmUgYWN0aXZlIGlmIGl0IGlzIHVzaW5nIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiwgdGhlIGNvbmZpZ3VyYXRpb25cbiAqIG1heSBiZSA8Y29kZT5lbmFibGVkID0gZmFsc2U8L2NvZGU+LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFjY2Vzc1Rva2VuS2V5SWQ/OiBVVUlEO1xuICBpZFRva2VuS2V5SWQ/OiBVVUlEO1xuICByZWZyZXNoVG9rZW5FeHBpcmF0aW9uUG9saWN5PzogUmVmcmVzaFRva2VuRXhwaXJhdGlvblBvbGljeTtcbiAgcmVmcmVzaFRva2VuUmV2b2NhdGlvblBvbGljeT86IFJlZnJlc2hUb2tlblJldm9jYXRpb25Qb2xpY3k7XG4gIHJlZnJlc2hUb2tlblNsaWRpbmdXaW5kb3dDb25maWd1cmF0aW9uPzogUmVmcmVzaFRva2VuU2xpZGluZ1dpbmRvd0NvbmZpZ3VyYXRpb247XG4gIHJlZnJlc2hUb2tlblRpbWVUb0xpdmVJbk1pbnV0ZXM/OiBudW1iZXI7XG4gIHJlZnJlc2hUb2tlblVzYWdlUG9saWN5PzogUmVmcmVzaFRva2VuVXNhZ2VQb2xpY3k7XG4gIHRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25JbWFnZVVSTD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NlbmdlclJlcXVlc3Qge1xuICBtZXNzZW5nZXI/OiBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBBIGxvZyBmb3IgYW4gYWN0aW9uIHRoYXQgd2FzIHRha2VuIG9uIGEgVXNlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uTG9nIHtcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGVtYWlsVXNlck9uRW5kPzogYm9vbGVhbjtcbiAgZW5kRXZlbnRTZW50PzogYm9vbGVhbjtcbiAgZXhwaXJ5PzogbnVtYmVyO1xuICBoaXN0b3J5PzogTG9nSGlzdG9yeTtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWROYW1lPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRPcHRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZFJlYXNvbj86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgbm90aWZ5VXNlck9uRW5kPzogYm9vbGVhbjtcbiAgb3B0aW9uPzogc3RyaW5nO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIHJlYXNvbkNvZGU/OiBzdHJpbmc7XG4gIHVzZXJBY3Rpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQ29udGFpbnMgZXh0ZW5zaW9uIG91dHB1dCBmb3IgcmVxdWVzdGVkIGV4dGVuc2lvbnMgZHVyaW5nIGEgV2ViQXV0aG4gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMge1xuICBjcmVkUHJvcHM/OiBDcmVkZW50aWFsUHJvcGVydGllc091dHB1dDtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSB1c2VyIGFjY291bnQgb3IgV2ViQXV0aG4gUmVseWluZyBQYXJ0eSBhc3NvY2lhdGVkIHdpdGggYSBwdWJsaWMga2V5IGNyZWRlbnRpYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWdpc3RyYXRpb24gZGVsZXRlIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25EZWxldGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG59XG5cbi8qKlxuICogVXNlZCB0byBleHByZXNzIHdoZXRoZXIgdGhlIFJlbHlpbmcgUGFydHkgcmVxdWlyZXMgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi0yLyN1c2VyLXZlcmlmaWNhdGlvblwiPnVzZXIgdmVyaWZpY2F0aW9uPC9hPiBmb3IgdGhlXG4gKiBjdXJyZW50IG9wZXJhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQge1xuICByZXF1aXJlZCA9IFwicmVxdWlyZWRcIixcbiAgcHJlZmVycmVkID0gXCJwcmVmZXJyZWRcIixcbiAgZGlzY291cmFnZWQgPSBcImRpc2NvdXJhZ2VkXCJcbn1cblxuLyoqXG4gKiBIZWxwZXIgaW50ZXJmYWNlIHRoYXQgaW5kaWNhdGVzIGFuIGlkZW50aXR5IHByb3ZpZGVyIGNhbiBiZSBmZWRlcmF0ZWQgdG8gdXNpbmcgdGhlIEhUVFAgUE9TVCBtZXRob2QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcG9ydHNQb3N0QmluZGluZ3Mge1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBFeHBpcnlVbml0IHtcbiAgTUlOVVRFUyA9IFwiTUlOVVRFU1wiLFxuICBIT1VSUyA9IFwiSE9VUlNcIixcbiAgREFZUyA9IFwiREFZU1wiLFxuICBXRUVLUyA9IFwiV0VFS1NcIixcbiAgTU9OVEhTID0gXCJNT05USFNcIixcbiAgWUVBUlMgPSBcIllFQVJTXCJcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVzcG9uc2UgZm9yIFRoZW1lc1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lU2VhcmNoUmVzcG9uc2Uge1xuICB0aGVtZXM/OiBBcnJheTxUaGVtZT47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBlbmQ/OiBudW1iZXI7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIG5ld1ZhbHVlPzogc3RyaW5nO1xuICBvbGRWYWx1ZT86IHN0cmluZztcbiAgcmVhc29uPzogc3RyaW5nO1xuICBzdGFydD86IG51bWJlcjtcbiAgdXNlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSFlQUklkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxIWVBSQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIHJlbHlpbmdQYXJ0eUFwcGxpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHJlbHlpbmdQYXJ0eVVSTD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgZW51bSBDbGllbnRBdXRoZW50aWNhdGlvblBvbGljeSB7XG4gIFJlcXVpcmVkID0gXCJSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZCA9IFwiTm90UmVxdWlyZWRcIixcbiAgTm90UmVxdWlyZWRXaGVuVXNpbmdQS0NFID0gXCJOb3RSZXF1aXJlZFdoZW5Vc2luZ1BLQ0VcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZW5kaW5nSWRQTGluayB7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgaWRlbnRpdHlQcm92aWRlcklkPzogVVVJRDtcbiAgaWRlbnRpdHlQcm92aWRlckxpbmtzPzogQXJyYXk8SWRlbnRpdHlQcm92aWRlckxpbms+O1xuICBpZGVudGl0eVByb3ZpZGVyTmFtZT86IHN0cmluZztcbiAgaWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb24/OiBJZGVudGl0eVByb3ZpZGVyVGVuYW50Q29uZmlndXJhdGlvbjtcbiAgaWRlbnRpdHlQcm92aWRlclR5cGU/OiBJZGVudGl0eVByb3ZpZGVyVHlwZTtcbiAgaWRlbnRpdHlQcm92aWRlclVzZXJJZD86IHN0cmluZztcbiAgdXNlcj86IFVzZXI7XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3Igc3RhcnRpbmcgYSBXZWJBdXRobiByZWdpc3RyYXRpb24gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlc3BvbnNlIHtcbiAgb3B0aW9ucz86IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM7XG59XG5cbi8qKlxuICogQSBBcHBsaWNhdGlvbi1sZXZlbCBwb2xpY3kgZm9yIGRlbGV0aW5nIFVzZXJzLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25SZWdpc3RyYXRpb25EZWxldGVQb2xpY3kge1xuICB1bnZlcmlmaWVkPzogVGltZUJhc2VkRGVsZXRlUG9saWN5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTGltaXRVc2VyTGlua2luZ1BvbGljeSBleHRlbmRzIEVuYWJsZWFibGUge1xuICBtYXhpbXVtTGlua3M/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JNZXRyaWNzUmVzcG9uc2Uge1xuICBtZXRyaWNzPzogUmVhY3Rvck1ldHJpY3M7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIElQIEFDTHMgLlxuICpcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBGb3JtVHlwZSB7XG4gIHJlZ2lzdHJhdGlvbiA9IFwicmVnaXN0cmF0aW9uXCIsXG4gIGFkbWluUmVnaXN0cmF0aW9uID0gXCJhZG1pblJlZ2lzdHJhdGlvblwiLFxuICBhZG1pblVzZXIgPSBcImFkbWluVXNlclwiLFxuICBzZWxmU2VydmljZVVzZXIgPSBcInNlbGZTZXJ2aWNlVXNlclwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgc291cmNlVGVuYW50SWQ/OiBVVUlEO1xuICB0ZW5hbnQ/OiBUZW5hbnQ7XG4gIHdlYmhvb2tJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBVc2VyIENvbW1lbnQgUmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbW1lbnRSZXNwb25zZSB7XG4gIHVzZXJDb21tZW50PzogVXNlckNvbW1lbnQ7XG4gIHVzZXJDb21tZW50cz86IEFycmF5PFVzZXJDb21tZW50Pjtcbn1cblxuLyoqXG4gKiBUaGUgcmVhc29uIGZvciB0aGUgbG9naW4gZmFpbHVyZS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luRmFpbGVkUmVhc29uIHtcbiAgY29kZT86IHN0cmluZztcbiAgbGFtYmRhSWQ/OiBVVUlEO1xuICBsYW1iZGFSZXN1bHQ/OiBFcnJvcnM7XG59XG5cbi8qKlxuICogQ29uZmlnIGZvciByZWd1bGFyIFNBTUwgSURQIGNvbmZpZ3VyYXRpb25zIHRoYXQgc3VwcG9ydCBJZFAgaW5pdGlhdGVkIHJlcXVlc3RzXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkcEluaXRpYXRlZENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgaXNzdWVyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgVGVuYW50LWxldmVsIHBvbGljeSBmb3IgZGVsZXRpbmcgVXNlcnMuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRVc2VyRGVsZXRlUG9saWN5IHtcbiAgdW52ZXJpZmllZD86IFRpbWVCYXNlZERlbGV0ZVBvbGljeTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgR3JvdXAgTWVtYmVycy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogR3JvdXBNZW1iZXJTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBHcm91cCBNZW1iZXIgUmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyUmVzcG9uc2Uge1xuICBtZW1iZXJzPzogUmVjb3JkPFVVSUQsIEFycmF5PEdyb3VwTWVtYmVyPj47XG59XG5cbi8qKlxuICogVXNlciBBY3Rpb24gQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25SZXF1ZXN0IHtcbiAgdXNlckFjdGlvbj86IFVzZXJBY3Rpb247XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIGJlaGF2aW9yIG9mIGZhaWxlZCBsb2dpbiBhdHRlbXB0cy4gVGhpcyBoZWxwcyB1cyBwcm90ZWN0IGFnYWluc3QgYnJ1dGUgZm9yY2UgcGFzc3dvcmQgYXR0YWNrcy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbGVkQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYWN0aW9uQ2FuY2VsUG9saWN5PzogRmFpbGVkQXV0aGVudGljYXRpb25BY3Rpb25DYW5jZWxQb2xpY3k7XG4gIGFjdGlvbkR1cmF0aW9uPzogbnVtYmVyO1xuICBhY3Rpb25EdXJhdGlvblVuaXQ/OiBFeHBpcnlVbml0O1xuICBlbWFpbFVzZXI/OiBib29sZWFuO1xuICByZXNldENvdW50SW5TZWNvbmRzPzogbnVtYmVyO1xuICB0b29NYW55QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHVzZXJBY3Rpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uQWNjZXNzQ29udHJvbENvbmZpZ3VyYXRpb24ge1xuICB1aUlQQWNjZXNzQ29udHJvbExpc3RJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogWE1MIGNhbm9uaWNhbGl6YXRpb24gbWV0aG9kIGVudW1lcmF0aW9uLiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBJZFAgYW5kIFNQIHNpZGUgb2YgRnVzaW9uQXV0aCBTQU1MLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBDYW5vbmljYWxpemF0aW9uTWV0aG9kIHtcbiAgZXhjbHVzaXZlID0gXCJleGNsdXNpdmVcIixcbiAgZXhjbHVzaXZlX3dpdGhfY29tbWVudHMgPSBcImV4Y2x1c2l2ZV93aXRoX2NvbW1lbnRzXCIsXG4gIGluY2x1c2l2ZSA9IFwiaW5jbHVzaXZlXCIsXG4gIGluY2x1c2l2ZV93aXRoX2NvbW1lbnRzID0gXCJpbmNsdXNpdmVfd2l0aF9jb21tZW50c1wiXG59XG5cbi8qKlxuICogUmVxdWVzdCB0byBjb21wbGV0ZSB0aGUgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkxvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBjcmVkZW50aWFsPzogV2ViQXV0aG5QdWJsaWNLZXlBdXRoZW50aWNhdGlvblJlcXVlc3Q7XG4gIG9yaWdpbj86IHN0cmluZztcbiAgcnBJZD86IHN0cmluZztcbiAgdHdvRmFjdG9yVHJ1c3RJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgQXBwbGljYXRpb24gQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbj86IEFwcGxpY2F0aW9uO1xuICByb2xlPzogQXBwbGljYXRpb25Sb2xlO1xuICBzb3VyY2VBcHBsaWNhdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBXZWJob29rIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va1Jlc3BvbnNlIHtcbiAgd2ViaG9vaz86IFdlYmhvb2s7XG4gIHdlYmhvb2tzPzogQXJyYXk8V2ViaG9vaz47XG59XG5cbi8qKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb21tZW50UmVxdWVzdCB7XG4gIHVzZXJDb21tZW50PzogVXNlckNvbW1lbnQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbUxvZ3NFeHBvcnRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV4cG9ydFJlcXVlc3Qge1xuICBpbmNsdWRlQXJjaGl2ZWQ/OiBib29sZWFuO1xuICBsYXN0TkJ5dGVzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2VuZ2VyUmVzcG9uc2Uge1xuICBtZXNzZW5nZXI/OiBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbjtcbiAgbWVzc2VuZ2Vycz86IEFycmF5PEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgZXJyb3JzPzogRXJyb3JzO1xuICBtZXNzYWdlPzogU01TTWVzc2FnZTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIEFwcGxpY2F0aW9uc1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25TZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXRlPzogT2JqZWN0U3RhdGU7XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbklkQ29ubmVjdElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxPcGVuSWRDb25uZWN0QXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvbkltYWdlVVJMPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgb2F1dGgyPzogSWRlbnRpdHlQcm92aWRlck9hdXRoMkNvbmZpZ3VyYXRpb247XG4gIHBvc3RSZXF1ZXN0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUmVnaXN0cmF0aW9uIFZlcmlmaWVkIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvblZlcmlmaWVkRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogQSBNZXNzYWdlIFRlbXBsYXRlIFJlcXVlc3QgdG8gdGhlIEFQSVxuICpcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0IHtcbiAgbWVzc2FnZVRlbXBsYXRlPzogTWVzc2FnZVRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VVc2VyQ29kZVJlc3BvbnNlIHtcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBkZXZpY2VJbmZvPzogRGV2aWNlSW5mbztcbiAgZXhwaXJlc19pbj86IG51bWJlcjtcbiAgcGVuZGluZ0lkUExpbms/OiBQZW5kaW5nSWRQTGluaztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdXNlcl9jb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsZUlkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxBcHBsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidW5kbGVJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgc2VydmljZXNJZD86IHN0cmluZztcbiAgdGVhbUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEhlYWRlciB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIFJlbW92ZSBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJSZW1vdmVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZyB7XG4gIGF0dGVtcHRzPzogQXJyYXk8V2ViaG9va0F0dGVtcHRMb2c+O1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZXZlbnQ/OiBFdmVudFJlcXVlc3Q7XG4gIGV2ZW50UmVzdWx0PzogV2ViaG9va0V2ZW50UmVzdWx0O1xuICBldmVudFR5cGU/OiBFdmVudFR5cGU7XG4gIGZhaWxlZEF0dGVtcHRzPzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RBdHRlbXB0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxpbmtlZE9iamVjdElkPzogVVVJRDtcbiAgc2VxdWVuY2U/OiBudW1iZXI7XG4gIHN1Y2Nlc3NmdWxBdHRlbXB0cz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBHcm91cCBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwUmVxdWVzdCB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIHJvbGVJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXR5IGdyYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBFbnRpdHlHcmFudFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBEZWxldGUgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogQ29udGFpbnMgYXR0cmlidXRlcyBmb3IgdGhlIFJlbHlpbmcgUGFydHkgdG8gcmVmZXIgdG8gYW4gZXhpc3RpbmcgcHVibGljIGtleSBjcmVkZW50aWFsIGFzIGFuIGlucHV0IHBhcmFtZXRlci5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIHRyYW5zcG9ydHM/OiBBcnJheTxzdHJpbmc+O1xuICB0eXBlPzogUHVibGljS2V5Q3JlZGVudGlhbFR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2lsaW9NZXNzZW5nZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBhY2NvdW50U0lEPzogc3RyaW5nO1xuICBhdXRoVG9rZW4/OiBzdHJpbmc7XG4gIGZyb21QaG9uZU51bWJlcj86IHN0cmluZztcbiAgbWVzc2FnaW5nU2VydmljZVNpZD86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yTWV0cmljcyB7XG4gIGJyZWFjaGVkUGFzc3dvcmRNZXRyaWNzPzogUmVjb3JkPFVVSUQsIEJyZWFjaGVkUGFzc3dvcmRUZW5hbnRNZXRyaWM+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkZvcm1Db25maWd1cmF0aW9uIHtcbiAgYWRtaW5SZWdpc3RyYXRpb25Gb3JtSWQ/OiBVVUlEO1xuICBzZWxmU2VydmljZUZvcm1Db25maWd1cmF0aW9uPzogU2VsZlNlcnZpY2VGb3JtQ29uZmlndXJhdGlvbjtcbiAgc2VsZlNlcnZpY2VGb3JtSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uVW52ZXJpZmllZE9wdGlvbnMge1xuICBiZWhhdmlvcj86IFVudmVyaWZpZWRCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UmVzcG9uc2Uge1xuICB0ZW5hbnQ/OiBUZW5hbnQ7XG4gIHRlbmFudHM/OiBBcnJheTxUZW5hbnQ+O1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBSZWZyZXNoIFRva2VuIEFQSSB0byByZXZva2UgYSByZWZyZXNoIHRva2VuIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBVUkwgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXZva2VSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBKV1QgUmVmcmVzaCBUb2tlbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIG1ldGFEYXRhPzogTWV0YURhdGE7XG4gIHN0YXJ0SW5zdGFudD86IG51bWJlcjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhRGF0YSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZXZpY2U/OiBEZXZpY2VJbmZvO1xuICBzY29wZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEEgbWFya2VyIGludGVyZmFjZSBpbmRpY2F0aW5nIHRoaXMgZXZlbnQgaXMgYW4gZXZlbnQgdGhhdCBjYW4gc3VwcGx5IGEgbGlua2VkIG9iamVjdCBJZC5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdElkZW50aWZpYWJsZSB7XG59XG5cbi8qKlxuICogRm9ybSBmaWVsZCByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1GaWVsZFJlc3BvbnNlIHtcbiAgZmllbGQ/OiBGb3JtRmllbGQ7XG4gIGZpZWxkcz86IEFycmF5PEZvcm1GaWVsZD47XG59XG5cbi8qKlxuICogSldUIFB1YmxpYyBLZXkgUmVzcG9uc2UgT2JqZWN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleVJlc3BvbnNlIHtcbiAgcHVibGljS2V5Pzogc3RyaW5nO1xuICBwdWJsaWNLZXlzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIHVzZXIgbG9naW4gcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNlbnRMb2dpblJlc3BvbnNlIHtcbiAgbG9naW5zPzogQXJyYXk8RGlzcGxheWFibGVSYXdMb2dpbj47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvckVuYWJsZURpc2FibGVTZW5kUmVxdWVzdCB7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBtZXRob2Q/OiBzdHJpbmc7XG4gIG1ldGhvZElkPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFNlY3VyZUdlbmVyYXRvclR5cGUge1xuICByYW5kb21EaWdpdHMgPSBcInJhbmRvbURpZ2l0c1wiLFxuICByYW5kb21CeXRlcyA9IFwicmFuZG9tQnl0ZXNcIixcbiAgcmFuZG9tQWxwaGEgPSBcInJhbmRvbUFscGhhXCIsXG4gIHJhbmRvbUFscGhhTnVtZXJpYyA9IFwicmFuZG9tQWxwaGFOdW1lcmljXCJcbn1cblxuLyoqXG4gKiBFbnRpdHkgZ3JhbnQgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50UmVxdWVzdCB7XG4gIGdyYW50PzogRW50aXR5R3JhbnQ7XG59XG5cbi8qKlxuICogU29tZXRoaW5nIHRoYXQgY2FuIGJlIHJlcXVpcmVkIGFuZCB0aHVzIGFsc28gb3B0aW9uYWwuIFRoaXMgY3VycmVudGx5IGV4dGVuZHMgRW5hYmxlYWJsZSBiZWNhdXNlIGFueXRoaW5nIHRoYXQgaXNcbiAqIHJlcXVpcmVkL29wdGlvbmFsIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlYWJsZSBhcyB3ZWxsLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmFibGUgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBGYWlsZWQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpbkZhaWxlZEV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBhdXRoZW50aWNhdGlvblR5cGU/OiBzdHJpbmc7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgcmVhc29uPzogVXNlckxvZ2luRmFpbGVkUmVhc29uO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXNwb25zZSBmb3IgR3JvdXBzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwU2VhcmNoUmVzcG9uc2Uge1xuICBncm91cHM/OiBBcnJheTxHcm91cD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEVudGl0eSBUeXBlIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlUmVxdWVzdCB7XG4gIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlO1xuICBwZXJtaXNzaW9uPzogRW50aXR5VHlwZVBlcm1pc3Npb247XG59XG5cbi8qKlxuICogS2V5IHNlYXJjaCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5U2VhcmNoUmVzcG9uc2Uge1xuICBrZXlzPzogQXJyYXk8S2V5PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIGhhbmRsaW5nIHBvbGljeSBmb3Igc2NvcGVzIHByb3ZpZGVkIGJ5IEZ1c2lvbkF1dGhcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVkU2NvcGVQb2xpY3kge1xuICBhZGRyZXNzPzogUmVxdWlyYWJsZTtcbiAgZW1haWw/OiBSZXF1aXJhYmxlO1xuICBwaG9uZT86IFJlcXVpcmFibGU7XG4gIHByb2ZpbGU/OiBSZXF1aXJhYmxlO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgRGVsZXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cERlbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xufVxuXG4vKipcbiAqIFN1cHBseSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBSZWx5aW5nIFBhcnR5IHdoZW4gY3JlYXRpbmcgYSBuZXcgY3JlZGVudGlhbFxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0eSBleHRlbmRzIFB1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkge1xuICBpZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5IaW50Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBwYXJhbWV0ZXJOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXNwb25zZSBmb3IgZW50aXR5IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVTZWFyY2hSZXNwb25zZSB7XG4gIGVudGl0eVR5cGVzPzogQXJyYXk8RW50aXR5VHlwZT47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnRhaW5lciBmb3IgdGhlIGV2ZW50IGluZm9ybWF0aW9uLiBUaGlzIGlzIHRoZSBKU09OIHRoYXQgaXMgc2VudCBmcm9tIEZ1c2lvbkF1dGggdG8gd2ViaG9va3MuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRSZXF1ZXN0IHtcbiAgZXZlbnQ/OiBCYXNlRXZlbnQ7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciB3ZWJob29rcy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzZXQgb2YgbG9jYWxpemVkIEludGVnZXJzIHRoYXQgY2FuIGJlIHN0b3JlZCBhcyBKU09OLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbGl6ZWRJbnRlZ2VycyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4ge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRVbnZlcmlmaWVkQ29uZmlndXJhdGlvbiB7XG4gIGVtYWlsPzogVW52ZXJpZmllZEJlaGF2aW9yO1xuICB3aGVuR2F0ZWQ/OiBSZWdpc3RyYXRpb25VbnZlcmlmaWVkT3B0aW9ucztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXR5IGdyYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFNlYXJjaFJlc3BvbnNlIHtcbiAgZ3JhbnRzPzogQXJyYXk8RW50aXR5R3JhbnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1EYXRhVHlwZSB7XG4gIGJvb2wgPSBcImJvb2xcIixcbiAgY29uc2VudCA9IFwiY29uc2VudFwiLFxuICBkYXRlID0gXCJkYXRlXCIsXG4gIGVtYWlsID0gXCJlbWFpbFwiLFxuICBudW1iZXIgPSBcIm51bWJlclwiLFxuICBzdHJpbmcgPSBcInN0cmluZ1wiXG59XG5cbi8qKlxuICogVXNlciBBY3Rpb24gQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVzcG9uc2Uge1xuICB1c2VyQWN0aW9uPzogVXNlckFjdGlvbjtcbiAgdXNlckFjdGlvbnM/OiBBcnJheTxVc2VyQWN0aW9uPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgR3JvdXBzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBHcm91cFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEF1dGhlbnRpY2F0aW9uIGtleSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFNhbmpheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleVJlcXVlc3Qge1xuICBhcGlLZXk/OiBBUElLZXk7XG4gIHNvdXJjZUtleUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBUd2l0dGVyIHNvY2lhbCBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdHRlcklkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxUd2l0dGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNvbnN1bWVyS2V5Pzogc3RyaW5nO1xuICBjb25zdW1lclNlY3JldD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU01TTWVzc2FnZVRlbXBsYXRlIGV4dGVuZHMgTWVzc2FnZVRlbXBsYXRlIHtcbiAgZGVmYXVsdFRlbXBsYXRlPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRUZW1wbGF0ZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xufVxuXG4vKipcbiAqIExhbWJkYSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhUmVxdWVzdCB7XG4gIGxhbWJkYT86IExhbWJkYTtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZXZlbnQgd2hlcmUgYSB1c2VyIGlzIGJlaW5nIGNyZWF0ZWQgd2l0aCBhbiBcImluLXVzZVwiIGxvZ2luIElkIChlbWFpbCBvciB1c2VybmFtZSkuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpbklkRHVwbGljYXRlT25DcmVhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBkdXBsaWNhdGVFbWFpbD86IHN0cmluZztcbiAgZHVwbGljYXRlVXNlcm5hbWU/OiBzdHJpbmc7XG4gIGV4aXN0aW5nPzogVXNlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pa2V5IFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2Uge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGF1dGhlbnRpY2F0b3JJZD86IHN0cmluZztcbiAgY29kZT86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG1ldGhvZD86IHN0cmluZztcbiAgbW9iaWxlUGhvbmU/OiBzdHJpbmc7XG4gIHNlY3JldD86IHN0cmluZztcbiAgc2VjcmV0QmFzZTMyRW5jb2RlZD86IHN0cmluZztcbiAgdHdvRmFjdG9ySWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUVtYWlsUmVzcG9uc2Uge1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGdsb2JhbCB2aWV3IG9mIGEgVXNlci4gVGhpcyBvYmplY3QgY29udGFpbnMgYWxsIGdsb2JhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBpbmNsdWRpbmcgYmlydGhkYXRlLCByZWdpc3RyYXRpb24gaW5mb3JtYXRpb25cbiAqIHByZWZlcnJlZCBsYW5ndWFnZXMsIGdsb2JhbCBhdHRyaWJ1dGVzLCBldGMuXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIgZXh0ZW5kcyBTZWN1cmVJZGVudGl0eSB7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGJpcnRoRGF0ZT86IHN0cmluZztcbiAgY2xlYW5TcGVha0lkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVtYWlsPzogc3RyaW5nO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIGZpcnN0TmFtZT86IHN0cmluZztcbiAgZnVsbE5hbWU/OiBzdHJpbmc7XG4gIGltYWdlVXJsPzogc3RyaW5nO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0TmFtZT86IHN0cmluZztcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG1lbWJlcnNoaXBzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xuICBtaWRkbGVOYW1lPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbiAgcGFyZW50RW1haWw/OiBzdHJpbmc7XG4gIHByZWZlcnJlZExhbmd1YWdlcz86IEFycmF5PHN0cmluZz47XG4gIHJlZ2lzdHJhdGlvbnM/OiBBcnJheTxVc2VyUmVnaXN0cmF0aW9uPjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0aW1lem9uZT86IHN0cmluZztcbiAgdHdvRmFjdG9yPzogVXNlclR3b0ZhY3RvckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VMb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgbWV0YURhdGE/OiBNZXRhRGF0YTtcbiAgbmV3RGV2aWNlPzogYm9vbGVhbjtcbiAgbm9KV1Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYWZrYUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZGVmYXVsdFRvcGljPzogc3RyaW5nO1xuICBwcm9kdWNlcj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc0xvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBjb2RlPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBVcGRhdGUgRXZlbnQgb25jZSBpdCBpcyBjb21wbGV0ZWQuIFRoaXMgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJVcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIG9yaWdpbmFsPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBvcmlnaW5hbD86IFVzZXI7XG59XG5cbi8qKlxuICogRW50aXR5IEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5UmVzcG9uc2Uge1xuICBlbnRpdHk/OiBFbnRpdHk7XG59XG5cbi8qKlxuICogVXNlZCBieSB0aGUgUmVseWluZyBQYXJ0eSB0byBzcGVjaWZ5IHRoZWlyIHJlcXVpcmVtZW50cyBmb3IgYXV0aGVudGljYXRvciBhdHRyaWJ1dGVzLiBGaWVsZHMgdXNlIHRoZSBkZXByZWNhdGVkIFwicmVzaWRlbnQga2V5XCIgdGVybWlub2xvZ3kgdG8gcmVmZXJcbiAqIHRvIGNsaWVudC1zaWRlIGRpc2NvdmVyYWJsZSBjcmVkZW50aWFscyB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFdlYkF1dGhuIExldmVsIDEuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEge1xuICBhdXRoZW50aWNhdG9yQXR0YWNobWVudD86IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50O1xuICByZXF1aXJlUmVzaWRlbnRLZXk/OiBib29sZWFuO1xuICByZXNpZGVudEtleT86IFJlc2lkZW50S2V5UmVxdWlyZW1lbnQ7XG4gIHVzZXJWZXJpZmljYXRpb24/OiBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ7XG59XG5cbi8qKlxuICogRXZlbnRzIHRoYXQgYXJlIGJvdW5kIHRvIGFwcGxpY2F0aW9ucy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkV2ZW50IHtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCBmb3Igc2VuZGluZyBvdXQgZmFtaWx5IHJlcXVlc3RzIHRvIHBhcmVudCdzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseUVtYWlsUmVxdWVzdCB7XG4gIHBhcmVudEVtYWlsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZnJlc2ggVG9rZW4gSW1wb3J0IHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5JbXBvcnRSZXF1ZXN0IHtcbiAgcmVmcmVzaFRva2Vucz86IEFycmF5PFJlZnJlc2hUb2tlbj47XG4gIHZhbGlkYXRlRGJDb25zdHJhaW50cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIElkUCBiZWhhdmlvciB3aGVuIG5vIHVzZXIgbGluayBoYXMgYmVlbiBtYWRlIHlldC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5UHJvdmlkZXJMaW5raW5nU3RyYXRlZ3kge1xuICBDcmVhdGVQZW5kaW5nTGluayA9IFwiQ3JlYXRlUGVuZGluZ0xpbmtcIixcbiAgRGlzYWJsZWQgPSBcIkRpc2FibGVkXCIsXG4gIExpbmtBbm9ueW1vdXNseSA9IFwiTGlua0Fub255bW91c2x5XCIsXG4gIExpbmtCeUVtYWlsID0gXCJMaW5rQnlFbWFpbFwiLFxuICBMaW5rQnlFbWFpbEZvckV4aXN0aW5nVXNlciA9IFwiTGlua0J5RW1haWxGb3JFeGlzdGluZ1VzZXJcIixcbiAgTGlua0J5VXNlcm5hbWUgPSBcIkxpbmtCeVVzZXJuYW1lXCIsXG4gIExpbmtCeVVzZXJuYW1lRm9yRXhpc3RpbmdVc2VyID0gXCJMaW5rQnlVc2VybmFtZUZvckV4aXN0aW5nVXNlclwiLFxuICBVbnN1cHBvcnRlZCA9IFwiVW5zdXBwb3J0ZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gTXVsdGlGYWN0b3JMb2dpblBvbGljeSB7XG4gIERpc2FibGVkID0gXCJEaXNhYmxlZFwiLFxuICBFbmFibGVkID0gXCJFbmFibGVkXCIsXG4gIFJlcXVpcmVkID0gXCJSZXF1aXJlZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMaW5rUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBpZGVudGl0eVByb3ZpZGVyTGluaz86IElkZW50aXR5UHJvdmlkZXJMaW5rO1xuICBwZW5kaW5nSWRQTGlua0lkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdvb2dsZSBzb2NpYWwgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdvb2dsZUlkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxHb29nbGVBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgcHJvcGVydGllcz86IEdvb2dsZUlkZW50aXR5UHJvdmlkZXJQcm9wZXJ0aWVzO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHcm91cCBNZW1iZXIgUmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1iZXJSZXF1ZXN0IHtcbiAgbWVtYmVycz86IFJlY29yZDxVVUlELCBBcnJheTxHcm91cE1lbWJlcj4+O1xufVxuXG4vKipcbiAqIEVtYWlsIHRlbXBsYXRlIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVSZXNwb25zZSB7XG4gIGVtYWlsVGVtcGxhdGU/OiBFbWFpbFRlbXBsYXRlO1xuICBlbWFpbFRlbXBsYXRlcz86IEFycmF5PEVtYWlsVGVtcGxhdGU+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIElQQWNjZXNzQ29udHJvbEVudHJ5QWN0aW9uIHtcbiAgQWxsb3cgPSBcIkFsbG93XCIsXG4gIEJsb2NrID0gXCJCbG9ja1wiXG59XG5cbi8qKlxuICogS2V5IEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVJlc3BvbnNlIHtcbiAga2V5PzogS2V5O1xuICBrZXlzPzogQXJyYXk8S2V5Pjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIEtleXNcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYWxnb3JpdGhtPzogS2V5QWxnb3JpdGhtO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogS2V5VHlwZTtcbn1cblxuLyoqXG4gKiBTdG9yZXMgYW4gbWVzc2FnZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3RyaWJ1dGUgbWVzc2FnZXM7XG4gKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUZW1wbGF0ZSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogTWVzc2FnZVR5cGU7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFJlYWN0aXZhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlYWN0aXZhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGQge1xuICBjb25maXJtPzogYm9vbGVhbjtcbiAgY29uc2VudElkPzogVVVJRDtcbiAgY29udHJvbD86IEZvcm1Db250cm9sO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAga2V5Pzogc3RyaW5nO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgb3B0aW9ucz86IEFycmF5PHN0cmluZz47XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgdHlwZT86IEZvcm1EYXRhVHlwZTtcbiAgdmFsaWRhdG9yPzogRm9ybUZpZWxkVmFsaWRhdG9yO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBBcHBsaWNhdGlvbnNcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uU2VhcmNoUmVxdWVzdCBleHRlbmRzIEV4cGFuZGFibGVSZXF1ZXN0IHtcbiAgc2VhcmNoPzogQXBwbGljYXRpb25TZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBUeXBlIGZvciB3ZWJob29rIGhlYWRlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSFRUUEhlYWRlcnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbn1cblxuLyoqXG4gKiBBIGN1c3RvbSBPQXV0aCBzY29wZSBmb3IgYSBzcGVjaWZpYyBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uT0F1dGhTY29wZSB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVmYXVsdENvbnNlbnREZXRhaWw/OiBzdHJpbmc7XG4gIGRlZmF1bHRDb25zZW50TWVzc2FnZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIENyZWF0ZSBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBEZWxldGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgSldUIFJlZnJlc2ggRXZlbnQuIFRoaXMgZXZlbnQgd2lsbCBiZSBmaXJlZCB3aGVuIGEgSldUIGlzIFwicmVmcmVzaGVkXCIgKGdlbmVyYXRlZCkgdXNpbmcgYSBSZWZyZXNoIFRva2VuLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RSZWZyZXNoRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgb3JpZ2luYWw/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Q2FwdGNoYUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgY2FwdGNoYU1ldGhvZD86IENhcHRjaGFNZXRob2Q7XG4gIHNlY3JldEtleT86IHN0cmluZztcbiAgc2l0ZUtleT86IHN0cmluZztcbiAgdGhyZXNob2xkPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaFJlcXVlc3Qge1xuICByZXRyaWV2ZVRvdGFsPzogYm9vbGVhbjtcbiAgc2VhcmNoPzogTG9naW5SZWNvcmRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQ3JlYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlU0FNTHYySWRlbnRpdHlQcm92aWRlcjxEIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8RD4ge1xuICBlbWFpbENsYWltPzogc3RyaW5nO1xuICBrZXlJZD86IFVVSUQ7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZU5hbWVJZEZvckVtYWlsPzogYm9vbGVhbjtcbiAgdXNlcm5hbWVDbGFpbT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIHJlcXVlc3QgZXh0ZW5zaW9ucyBkdXJpbmcgY3JlZGVudGlhbCByZWdpc3RyYXRpb25cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuUmVnaXN0cmF0aW9uRXh0ZW5zaW9uT3B0aW9ucyB7XG4gIGNyZWRQcm9wcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVXNlciBBY3Rpb24gUmVhc29uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVhc29uUmVxdWVzdCB7XG4gIHVzZXJBY3Rpb25SZWFzb24/OiBVc2VyQWN0aW9uUmVhc29uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NUb2tlbiB7XG4gIGFjY2Vzc190b2tlbj86IHN0cmluZztcbiAgZXhwaXJlc19pbj86IG51bWJlcjtcbiAgaWRfdG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hfdG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hfdG9rZW5faWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgdG9rZW5fdHlwZT86IFRva2VuVHlwZTtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBTZWFyY2ggQVBJIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3BvbnNlIGV4dGVuZHMgRXhwYW5kYWJsZVJlc3BvbnNlIHtcbiAgbmV4dFJlc3VsdHM/OiBzdHJpbmc7XG4gIHRvdGFsPzogbnVtYmVyO1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVzcG9uc2Uge1xuICBhbm9ueW1vdXNSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgRW1haWxUZW1wbGF0ZUVycm9ycz47XG4gIHJlc3VsdHM/OiBSZWNvcmQ8VVVJRCwgRW1haWxUZW1wbGF0ZUVycm9ycz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZUVycm9ycyB7XG4gIHBhcnNlRXJyb3JzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcmVuZGVyRXJyb3JzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBUaGUgcGhhc2VzIG9mIGEgdGltZS1iYXNlZCB1c2VyIGFjdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gVXNlckFjdGlvblBoYXNlIHtcbiAgc3RhcnQgPSBcInN0YXJ0XCIsXG4gIG1vZGlmeSA9IFwibW9kaWZ5XCIsXG4gIGNhbmNlbCA9IFwiY2FuY2VsXCIsXG4gIGVuZCA9IFwiZW5kXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVtZW1iZXJQcmV2aW91c1Bhc3N3b3JkcyBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjb3VudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZXMgb2YgbGFtYmRhcyB0aGF0IGluZGljYXRlIGhvdyB0aGV5IGFyZSBpbnZva2VkIGJ5IEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIExhbWJkYVR5cGUge1xuICBKV1RQb3B1bGF0ZSA9IFwiSldUUG9wdWxhdGVcIixcbiAgT3BlbklEUmVjb25jaWxlID0gXCJPcGVuSURSZWNvbmNpbGVcIixcbiAgU0FNTHYyUmVjb25jaWxlID0gXCJTQU1MdjJSZWNvbmNpbGVcIixcbiAgU0FNTHYyUG9wdWxhdGUgPSBcIlNBTUx2MlBvcHVsYXRlXCIsXG4gIEFwcGxlUmVjb25jaWxlID0gXCJBcHBsZVJlY29uY2lsZVwiLFxuICBFeHRlcm5hbEpXVFJlY29uY2lsZSA9IFwiRXh0ZXJuYWxKV1RSZWNvbmNpbGVcIixcbiAgRmFjZWJvb2tSZWNvbmNpbGUgPSBcIkZhY2Vib29rUmVjb25jaWxlXCIsXG4gIEdvb2dsZVJlY29uY2lsZSA9IFwiR29vZ2xlUmVjb25jaWxlXCIsXG4gIEhZUFJSZWNvbmNpbGUgPSBcIkhZUFJSZWNvbmNpbGVcIixcbiAgVHdpdHRlclJlY29uY2lsZSA9IFwiVHdpdHRlclJlY29uY2lsZVwiLFxuICBMREFQQ29ubmVjdG9yUmVjb25jaWxlID0gXCJMREFQQ29ubmVjdG9yUmVjb25jaWxlXCIsXG4gIExpbmtlZEluUmVjb25jaWxlID0gXCJMaW5rZWRJblJlY29uY2lsZVwiLFxuICBFcGljR2FtZXNSZWNvbmNpbGUgPSBcIkVwaWNHYW1lc1JlY29uY2lsZVwiLFxuICBOaW50ZW5kb1JlY29uY2lsZSA9IFwiTmludGVuZG9SZWNvbmNpbGVcIixcbiAgU29ueVBTTlJlY29uY2lsZSA9IFwiU29ueVBTTlJlY29uY2lsZVwiLFxuICBTdGVhbVJlY29uY2lsZSA9IFwiU3RlYW1SZWNvbmNpbGVcIixcbiAgVHdpdGNoUmVjb25jaWxlID0gXCJUd2l0Y2hSZWNvbmNpbGVcIixcbiAgWGJveFJlY29uY2lsZSA9IFwiWGJveFJlY29uY2lsZVwiLFxuICBDbGllbnRDcmVkZW50aWFsc0pXVFBvcHVsYXRlID0gXCJDbGllbnRDcmVkZW50aWFsc0pXVFBvcHVsYXRlXCIsXG4gIFNDSU1TZXJ2ZXJHcm91cFJlcXVlc3RDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJHcm91cFJlcXVlc3RDb252ZXJ0ZXJcIixcbiAgU0NJTVNlcnZlckdyb3VwUmVzcG9uc2VDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJHcm91cFJlc3BvbnNlQ29udmVydGVyXCIsXG4gIFNDSU1TZXJ2ZXJVc2VyUmVxdWVzdENvbnZlcnRlciA9IFwiU0NJTVNlcnZlclVzZXJSZXF1ZXN0Q29udmVydGVyXCIsXG4gIFNDSU1TZXJ2ZXJVc2VyUmVzcG9uc2VDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJVc2VyUmVzcG9uc2VDb252ZXJ0ZXJcIixcbiAgU2VsZlNlcnZpY2VSZWdpc3RyYXRpb25WYWxpZGF0aW9uID0gXCJTZWxmU2VydmljZVJlZ2lzdHJhdGlvblZhbGlkYXRpb25cIixcbiAgVXNlckluZm9Qb3B1bGF0ZSA9IFwiVXNlckluZm9Qb3B1bGF0ZVwiLFxuICBMb2dpblZhbGlkYXRpb24gPSBcIkxvZ2luVmFsaWRhdGlvblwiXG59XG5cbi8qKlxuICogVGhlIDxpPmF1dGhlbnRpY2F0b3InczwvaT4gcmVzcG9uc2UgZm9yIHRoZSByZWdpc3RyYXRpb24gY2VyZW1vbnkgaW4gaXRzIGVuY29kZWQgZm9ybWF0XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkF1dGhlbnRpY2F0b3JSZWdpc3RyYXRpb25SZXNwb25zZSB7XG4gIGF0dGVzdGF0aW9uT2JqZWN0Pzogc3RyaW5nO1xuICBjbGllbnREYXRhSlNPTj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgaW5kaWNhdGluZyB0aGlzIGV2ZW50IGlzIG5vdCBzY29wZWQgdG8gYSB0ZW5hbnQgYW5kIHdpbGwgYmUgc2VudCB0byBhbGwgd2ViaG9va3MuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlRXZlbnQgZXh0ZW5kcyBOb25UcmFuc2FjdGlvbmFsRXZlbnQge1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IHRvIGltcG9ydCBhbiBleGlzdGluZyBXZWJBdXRobiBjcmVkZW50aWFsKHMpXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkNyZWRlbnRpYWxJbXBvcnRSZXF1ZXN0IHtcbiAgY3JlZGVudGlhbHM/OiBBcnJheTxXZWJBdXRobkNyZWRlbnRpYWw+O1xuICB2YWxpZGF0ZURiQ29uc3RyYWludHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHNpZ25pbmcgd2ViaG9va3MuXG4gKlxuICogQGF1dGhvciBCcmVudCBIYWxzZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rU2lnbmF0dXJlQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBzaWduaW5nS2V5SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZGxlc3NTdGFydFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgbG9naW5JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgcmV0cmlldmluZyBSZWZyZXNoIFRva2Vuc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IFJlZnJlc2hUb2tlbjtcbiAgcmVmcmVzaFRva2Vucz86IEFycmF5PFJlZnJlc2hUb2tlbj47XG59XG5cbi8qKlxuICogUmVnaXN0cmF0aW9uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGRpc2FibGVEb21haW5CbG9jaz86IGJvb2xlYW47XG4gIGdlbmVyYXRlQXV0aGVudGljYXRpb25Ub2tlbj86IGJvb2xlYW47XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHNlbmRTZXRQYXNzd29yZEVtYWlsPzogYm9vbGVhbjtcbiAgc2tpcFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbj86IGJvb2xlYW47XG4gIHNraXBWZXJpZmljYXRpb24/OiBib29sZWFuO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFN5c3RlbVRydXN0ZWRQcm94eUNvbmZpZ3VyYXRpb25Qb2xpY3kge1xuICBBbGwgPSBcIkFsbFwiLFxuICBPbmx5Q29uZmlndXJlZCA9IFwiT25seUNvbmZpZ3VyZWRcIlxufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIG1hbmFnaW5nIEZ1c2lvbkF1dGggUmVhY3RvciBhbmQgbGljZW5zZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RvclJlcXVlc3Qge1xuICBsaWNlbnNlPzogc3RyaW5nO1xuICBsaWNlbnNlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3VsdHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0czxUPiB7XG4gIG5leHRSZXN1bHRzPzogc3RyaW5nO1xuICByZXN1bHRzPzogQXJyYXk8VD47XG4gIHRvdGFsPzogbnVtYmVyO1xuICB0b3RhbEVxdWFsVG9BY3R1YWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgZGFpbHkgYWN0aXZlIHVzZXIgcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlIHtcbiAgZGFpbHlBY3RpdmVVc2Vycz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogU0FNTCB2MiBJZFAgSW5pdGlhdGVkIGlkZW50aXR5IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkUEluaXRpYXRlZElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlU0FNTHYySWRlbnRpdHlQcm92aWRlcjxTQU1MdjJJZFBJbml0aWF0ZWRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgaXNzdWVyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VBcHByb3ZhbFJlc3BvbnNlIHtcbiAgZGV2aWNlR3JhbnRTdGF0dXM/OiBzdHJpbmc7XG4gIGRldmljZUluZm8/OiBEZXZpY2VJbmZvO1xuICBpZGVudGl0eVByb3ZpZGVyTGluaz86IElkZW50aXR5UHJvdmlkZXJMaW5rO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUd29GYWN0b3JDb25maWd1cmF0aW9uIHtcbiAgbWV0aG9kcz86IEFycmF5PFR3b0ZhY3Rvck1ldGhvZD47XG4gIHJlY292ZXJ5Q29kZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBlbWFpbCB0ZW1wbGF0ZXNcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEVtYWlsVGVtcGxhdGVTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBUaGUgc3VtbWFyeSBvZiB0aGUgYWN0aW9uIHRoYXQgaXMgcHJldmVudGluZyBsb2dpbiB0byBiZSByZXR1cm5lZCBvbiB0aGUgbG9naW4gcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUHJldmVudGVkUmVzcG9uc2Uge1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFjdGlvbklkPzogVVVJRDtcbiAgZXhwaXJ5PzogbnVtYmVyO1xuICBsb2NhbGl6ZWROYW1lPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRPcHRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZFJlYXNvbj86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgb3B0aW9uPzogc3RyaW5nO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIHJlYXNvbkNvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIGNvbnRlbnQgdXNlciBhY3Rpb24gb3B0aW9ucy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uT3B0aW9uIHtcbiAgbG9jYWxpemVkTmFtZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dSZXNwb25zZSB7XG4gIGV2ZW50TG9nPzogRXZlbnRMb2c7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkUEluaXRpYXRlZEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIGFuZHJld3BhaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGZTZXJ2aWNlRm9ybUNvbmZpZ3VyYXRpb24ge1xuICByZXF1aXJlQ3VycmVudFBhc3N3b3JkT25QYXNzd29yZENoYW5nZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBVcGRhdGUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwVXBkYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbiAgb3JpZ2luYWw/OiBHcm91cDtcbn1cblxuLyoqXG4gKiBSZWluZGV4IEFQSSByZXF1ZXN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlaW5kZXhSZXF1ZXN0IHtcbiAgaW5kZXg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uRXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbiB7XG4gIHR3b0ZhY3RvclRydXN0SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbiB7XG4gIGFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25BY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbjtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgYXV0aGVudGljYXRpb25Ub2tlbkNvbmZpZ3VyYXRpb24/OiBBdXRoZW50aWNhdGlvblRva2VuQ29uZmlndXJhdGlvbjtcbiAgY2xlYW5TcGVha0NvbmZpZ3VyYXRpb24/OiBDbGVhblNwZWFrQ29uZmlndXJhdGlvbjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVtYWlsQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uRW1haWxDb25maWd1cmF0aW9uO1xuICBleHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25FeHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uO1xuICBmb3JtQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uRm9ybUNvbmZpZ3VyYXRpb247XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgand0Q29uZmlndXJhdGlvbj86IEpXVENvbmZpZ3VyYXRpb247XG4gIGxhbWJkYUNvbmZpZ3VyYXRpb24/OiBMYW1iZGFDb25maWd1cmF0aW9uO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9naW5Db25maWd1cmF0aW9uPzogTG9naW5Db25maWd1cmF0aW9uO1xuICBtdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbk11bHRpRmFjdG9yQ29uZmlndXJhdGlvbjtcbiAgbmFtZT86IHN0cmluZztcbiAgb2F1dGhDb25maWd1cmF0aW9uPzogT0F1dGgyQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbj86IFBhc3N3b3JkbGVzc0NvbmZpZ3VyYXRpb247XG4gIHJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24/OiBSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25EZWxldGVQb2xpY3k/OiBBcHBsaWNhdGlvblJlZ2lzdHJhdGlvbkRlbGV0ZVBvbGljeTtcbiAgcm9sZXM/OiBBcnJheTxBcHBsaWNhdGlvblJvbGU+O1xuICBzYW1sdjJDb25maWd1cmF0aW9uPzogU0FNTHYyQ29uZmlndXJhdGlvbjtcbiAgc2NvcGVzPzogQXJyYXk8QXBwbGljYXRpb25PQXV0aFNjb3BlPjtcbiAgc3RhdGU/OiBPYmplY3RTdGF0ZTtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0aGVtZUlkPzogVVVJRDtcbiAgdW52ZXJpZmllZD86IFJlZ2lzdHJhdGlvblVudmVyaWZpZWRPcHRpb25zO1xuICB2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB2ZXJpZmljYXRpb25TdHJhdGVneT86IFZlcmlmaWNhdGlvblN0cmF0ZWd5O1xuICB2ZXJpZnlSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICB3ZWJBdXRobkNvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbldlYkF1dGhuQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkVtYWlsQ29uZmlndXJhdGlvbiB7XG4gIGVtYWlsVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZW1haWxWZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBlbWFpbFZlcmlmaWVkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZm9yZ290UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbklkSW5Vc2VPbkNyZWF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luSWRJblVzZU9uVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5OZXdEZXZpY2VFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpblN1c3BpY2lvdXNFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZGxlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFJlc2V0U3VjY2Vzc0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgc2V0UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RBZGRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RSZW1vdmVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhlbnRpY2F0aW9uVG9rZW5Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIGFjY2Vzc1Rva2VuUG9wdWxhdGVJZD86IFVVSUQ7XG4gIGlkVG9rZW5Qb3B1bGF0ZUlkPzogVVVJRDtcbiAgc2FtbHYyUG9wdWxhdGVJZD86IFVVSUQ7XG4gIHNlbGZTZXJ2aWNlUmVnaXN0cmF0aW9uVmFsaWRhdGlvbklkPzogVVVJRDtcbiAgdXNlcmluZm9Qb3B1bGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2dpbkNvbmZpZ3VyYXRpb24ge1xuICBhbGxvd1Rva2VuUmVmcmVzaD86IGJvb2xlYW47XG4gIGdlbmVyYXRlUmVmcmVzaFRva2Vucz86IGJvb2xlYW47XG4gIHJlcXVpcmVBdXRoZW50aWNhdGlvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYmlydGhEYXRlPzogUmVxdWlyYWJsZTtcbiAgY29uZmlybVBhc3N3b3JkPzogYm9vbGVhbjtcbiAgZmlyc3ROYW1lPzogUmVxdWlyYWJsZTtcbiAgZm9ybUlkPzogVVVJRDtcbiAgZnVsbE5hbWU/OiBSZXF1aXJhYmxlO1xuICBsYXN0TmFtZT86IFJlcXVpcmFibGU7XG4gIGxvZ2luSWRUeXBlPzogTG9naW5JZFR5cGU7XG4gIG1pZGRsZU5hbWU/OiBSZXF1aXJhYmxlO1xuICBtb2JpbGVQaG9uZT86IFJlcXVpcmFibGU7XG4gIHByZWZlcnJlZExhbmd1YWdlcz86IFJlcXVpcmFibGU7XG4gIHR5cGU/OiBSZWdpc3RyYXRpb25UeXBlO1xufVxuXG5leHBvcnQgZW51bSBMb2dpbklkVHlwZSB7XG4gIGVtYWlsID0gXCJlbWFpbFwiLFxuICB1c2VybmFtZSA9IFwidXNlcm5hbWVcIlxufVxuXG5leHBvcnQgZW51bSBSZWdpc3RyYXRpb25UeXBlIHtcbiAgYmFzaWMgPSBcImJhc2ljXCIsXG4gIGFkdmFuY2VkID0gXCJhZHZhbmNlZFwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhc3NlcnRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFNBTUx2MkFzc2VydGlvbkVuY3J5cHRpb25Db25maWd1cmF0aW9uO1xuICBhdWRpZW5jZT86IHN0cmluZztcbiAgYXV0aG9yaXplZFJlZGlyZWN0VVJMcz86IEFycmF5PHN0cmluZz47XG4gIGNhbGxiYWNrVVJMPzogc3RyaW5nO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRlZmF1bHRWZXJpZmljYXRpb25LZXlJZD86IFVVSUQ7XG4gIGluaXRpYXRlZExvZ2luPzogU0FNTHYySWRQSW5pdGlhdGVkTG9naW5Db25maWd1cmF0aW9uO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGtleUlkPzogVVVJRDtcbiAgbG9naW5IaW50Q29uZmlndXJhdGlvbj86IExvZ2luSGludENvbmZpZ3VyYXRpb247XG4gIGxvZ291dD86IFNBTUx2MkxvZ291dDtcbiAgbG9nb3V0VVJMPzogc3RyaW5nO1xuICByZXF1aXJlU2lnbmVkUmVxdWVzdHM/OiBib29sZWFuO1xuICB4bWxTaWduYXR1cmVDMTRuTWV0aG9kPzogQ2Fub25pY2FsaXphdGlvbk1ldGhvZDtcbiAgeG1sU2lnbmF0dXJlTG9jYXRpb24/OiBYTUxTaWduYXR1cmVMb2NhdGlvbjtcbn1cblxuZXhwb3J0IGVudW0gU0FNTExvZ291dEJlaGF2aW9yIHtcbiAgQWxsUGFydGljaXBhbnRzID0gXCJBbGxQYXJ0aWNpcGFudHNcIixcbiAgT25seU9yaWdpbmF0b3IgPSBcIk9ubHlPcmlnaW5hdG9yXCJcbn1cblxuZXhwb3J0IGVudW0gWE1MU2lnbmF0dXJlTG9jYXRpb24ge1xuICBBc3NlcnRpb24gPSBcIkFzc2VydGlvblwiLFxuICBSZXNwb25zZSA9IFwiUmVzcG9uc2VcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkFzc2VydGlvbkVuY3J5cHRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGRpZ2VzdEFsZ29yaXRobT86IHN0cmluZztcbiAgZW5jcnlwdGlvbkFsZ29yaXRobT86IHN0cmluZztcbiAga2V5TG9jYXRpb24/OiBzdHJpbmc7XG4gIGtleVRyYW5zcG9ydEFsZ29yaXRobT86IHN0cmluZztcbiAga2V5VHJhbnNwb3J0RW5jcnlwdGlvbktleUlkPzogVVVJRDtcbiAgbWFza0dlbmVyYXRpb25GdW5jdGlvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJMb2dvdXQge1xuICBiZWhhdmlvcj86IFNBTUxMb2dvdXRCZWhhdmlvcjtcbiAgZGVmYXVsdFZlcmlmaWNhdGlvbktleUlkPzogVVVJRDtcbiAga2V5SWQ/OiBVVUlEO1xuICByZXF1aXJlU2lnbmVkUmVxdWVzdHM/OiBib29sZWFuO1xuICBzaW5nbGVMb2dvdXQ/OiBTQU1MdjJTaW5nbGVMb2dvdXQ7XG4gIHhtbFNpZ25hdHVyZUMxNG5NZXRob2Q/OiBDYW5vbmljYWxpemF0aW9uTWV0aG9kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MlNpbmdsZUxvZ291dCBleHRlbmRzIEVuYWJsZWFibGUge1xuICBrZXlJZD86IFVVSUQ7XG4gIHVybD86IHN0cmluZztcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG59XG5cbi8qKlxuICogQWxsb3dzIHRoZSBSZWx5aW5nIFBhcnR5IHRvIHNwZWNpZnkgZGVzaXJlZCBhdHRyaWJ1dGVzIG9mIGEgbmV3IGNyZWRlbnRpYWwuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHtcbiAgYXR0ZXN0YXRpb24/OiBBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlO1xuICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uPzogQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhO1xuICBjaGFsbGVuZ2U/OiBzdHJpbmc7XG4gIGV4Y2x1ZGVDcmVkZW50aWFscz86IEFycmF5PFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yPjtcbiAgZXh0ZW5zaW9ucz86IFdlYkF1dGhuUmVnaXN0cmF0aW9uRXh0ZW5zaW9uT3B0aW9ucztcbiAgcHViS2V5Q3JlZFBhcmFtcz86IEFycmF5PFB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzPjtcbiAgcnA/OiBQdWJsaWNLZXlDcmVkZW50aWFsUmVseWluZ1BhcnR5RW50aXR5O1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICB1c2VyPzogUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHk7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFZlbmRSZXNwb25zZSB7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZW1lIG9iamVjdCBmb3IgdmFsdWVzIHVzZWQgaW4gdGhlIGNzcyB2YXJpYWJsZXMgZm9yIHNpbXBsZSB0aGVtZXMuXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZVRoZW1lVmFyaWFibGVzIHtcbiAgYWxlcnRCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGFsZXJ0Rm9udENvbG9yPzogc3RyaW5nO1xuICBiYWNrZ3JvdW5kSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJhY2tncm91bmRTaXplPzogc3RyaW5nO1xuICBib3JkZXJSYWRpdXM/OiBzdHJpbmc7XG4gIGRlbGV0ZUJ1dHRvbkNvbG9yPzogc3RyaW5nO1xuICBkZWxldGVCdXR0b25Gb2N1c0NvbG9yPzogc3RyaW5nO1xuICBkZWxldGVCdXR0b25UZXh0Q29sb3I/OiBzdHJpbmc7XG4gIGRlbGV0ZUJ1dHRvblRleHRGb2N1c0NvbG9yPzogc3RyaW5nO1xuICBlcnJvckZvbnRDb2xvcj86IHN0cmluZztcbiAgZXJyb3JJY29uQ29sb3I/OiBzdHJpbmc7XG4gIGZvbnRDb2xvcj86IHN0cmluZztcbiAgZm9udEZhbWlseT86IHN0cmluZztcbiAgZm9vdGVyRGlzcGxheT86IGJvb2xlYW47XG4gIGljb25CYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGljb25Db2xvcj86IHN0cmluZztcbiAgaW5mb0ljb25Db2xvcj86IHN0cmluZztcbiAgaW5wdXRCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGlucHV0SWNvbkNvbG9yPzogc3RyaW5nO1xuICBpbnB1dFRleHRDb2xvcj86IHN0cmluZztcbiAgbGlua1RleHRDb2xvcj86IHN0cmluZztcbiAgbGlua1RleHRGb2N1c0NvbG9yPzogc3RyaW5nO1xuICBsb2dvSW1hZ2VTaXplPzogc3RyaW5nO1xuICBsb2dvSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIG1vbm9Gb250Q29sb3I/OiBzdHJpbmc7XG4gIG1vbm9Gb250RmFtaWx5Pzogc3RyaW5nO1xuICBwYWdlQmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBwYW5lbEJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUJ1dHRvbkNvbG9yPzogc3RyaW5nO1xuICBwcmltYXJ5QnV0dG9uRm9jdXNDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUJ1dHRvblRleHRDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUJ1dHRvblRleHRGb2N1c0NvbG9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gU29ydCB7XG4gIGFzYyA9IFwiYXNjXCIsXG4gIGRlc2MgPSBcImRlc2NcIlxufVxuXG4vKipcbiAqIEV2ZW50IHRvIGluZGljYXRlIGFuIGF1ZGl0IGxvZyB3YXMgY3JlYXRlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGF1ZGl0TG9nPzogQXVkaXRMb2c7XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBhdXRoZW50aWNhdG9yIGF0dGFjaG1lbnQgbW9kYWxpdHkgcHJlZmVyZW5jZSBmb3IgYSBXZWJBdXRobiB3b3JrZmxvdy4gU2VlIHtAbGluayBBdXRoZW50aWNhdG9yQXR0YWNobWVudH1cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBBdXRoZW50aWNhdG9yQXR0YWNobWVudFByZWZlcmVuY2Uge1xuICBhbnkgPSBcImFueVwiLFxuICBwbGF0Zm9ybSA9IFwicGxhdGZvcm1cIixcbiAgY3Jvc3NQbGF0Zm9ybSA9IFwiY3Jvc3NQbGF0Zm9ybVwiXG59XG5cbi8qKlxuICogVXNlciBBUEkgYnVsayByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlUmVzcG9uc2Uge1xuICBkcnlSdW4/OiBib29sZWFuO1xuICBoYXJkRGVsZXRlPzogYm9vbGVhbjtcbiAgdG90YWw/OiBudW1iZXI7XG4gIHVzZXJJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU3RhcnRSZXNwb25zZSB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIG1ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBVc2VyIEFjdGlvbiBSZWFzb24gQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2Uge1xuICB1c2VyQWN0aW9uUmVhc29uPzogVXNlckFjdGlvblJlYXNvbjtcbiAgdXNlckFjdGlvblJlYXNvbnM/OiBBcnJheTxVc2VyQWN0aW9uUmVhc29uPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pIHRoYXQgaXMgdXNlZCBmb3IgYWxsIHVzZXIgbW9kaWZpY2F0aW9ucyAoY3JlYXRlLCB1cGRhdGUsXG4gKiBkZWxldGUpLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWxldGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIEFuIGV4cGFuZGFibGUgQVBJIHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuZGFibGVSZXF1ZXN0IHtcbiAgZXhwYW5kPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIFVzZXIgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbnNlbnRSZXF1ZXN0IHtcbiAgdXNlckNvbnNlbnQ/OiBVc2VyQ29uc2VudDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFJvYiBEYXZpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFNDSU1TZXJ2ZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGNsaWVudEVudGl0eVR5cGVJZD86IFVVSUQ7XG4gIHNjaGVtYXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBzZXJ2ZXJFbnRpdHlUeXBlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFRoZW1lIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lUmVxdWVzdCB7XG4gIHNvdXJjZVRoZW1lSWQ/OiBVVUlEO1xuICB0aGVtZT86IFRoZW1lO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aENvbmZpZ3VyYXRpb25SZXNwb25zZSB7XG4gIGh0dHBTZXNzaW9uTWF4SW5hY3RpdmVJbnRlcnZhbD86IG51bWJlcjtcbiAgbG9nb3V0VVJMPzogc3RyaW5nO1xuICBvYXV0aENvbmZpZ3VyYXRpb24/OiBPQXV0aDJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uIHtcbiAgYXV0aG9yaXphdGlvbkdyYW50SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBjaGFuZ2VQYXNzd29yZElkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgY2hhbmdlUGFzc3dvcmRJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIGRldmljZUNvZGVUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBkZXZpY2VVc2VyQ29kZUlkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgZW1haWxWZXJpZmljYXRpb25JZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGVtYWlsVmVyaWZpY2F0aW9uSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBlbWFpbFZlcmlmaWNhdGlvbk9uZVRpbWVDb2RlR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgZXh0ZXJuYWxBdXRoZW50aWNhdGlvbklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgbG9naW5JbnRlbnRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBvbmVUaW1lUGFzc3dvcmRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBwYXNzd29yZGxlc3NMb2dpbkdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHBhc3N3b3JkbGVzc0xvZ2luVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcGVuZGluZ0FjY291bnRMaW5rVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbk9uZVRpbWVDb2RlR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgcmVtZW1iZXJPQXV0aFNjb3BlQ29uc2VudENob2ljZVRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHNhbWx2MkF1dGhOUmVxdWVzdElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgc2V0dXBQYXNzd29yZElkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgc2V0dXBQYXNzd29yZElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdHJ1c3RUb2tlblRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHR3b0ZhY3RvcklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdHdvRmFjdG9yT25lVGltZUNvZGVJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHR3b0ZhY3Rvck9uZVRpbWVDb2RlSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0d29GYWN0b3JUcnVzdElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgd2ViQXV0aG5BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHdlYkF1dGhuUmVnaXN0cmF0aW9uQ2hhbGxlbmdlVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHZhbGlkIGNyZWRlbnRpYWwgdHlwZXMuIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIHBvaW50IGluIHRoZSBXZWJBdXRobiBzcGVjLiBUaGUgb25seSBkZWZpbmVkIHZhbHVlIGF0IHRoaXMgdGltZSBpcyBcInB1YmxpYy1rZXlcIlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlIHtcbiAgcHVibGljS2V5ID0gXCJwdWJsaWMta2V5XCJcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRoZSBlbnRpdHkgcXVlcnkuIEl0IHByb3ZpZGVzIGEgYnVpbGQgcGF0dGVybiBhcyB3ZWxsIGFzIHB1YmxpYyBmaWVsZHMgZm9yIHVzZSBvbiBmb3JtcyBhbmQgaW4gYWN0aW9ucy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VFbGFzdGljU2VhcmNoQ3JpdGVyaWEge1xufVxuXG4vKipcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3UmVzcG9uc2Uge1xuICBlbWFpbD86IEVtYWlsO1xuICBlcnJvcnM/OiBFcnJvcnM7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXBpY0dhbWVzQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wZW5JRCBDb25uZWN0IENvbmZpZ3VyYXRpb24gYXMgZGVzY3JpYmVkIGJ5IHRoZSA8YSBocmVmPVwiaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWRpc2NvdmVyeS0xXzAuaHRtbCNQcm92aWRlck1ldGFkYXRhXCI+T3BlbklEXG4gKiBQcm92aWRlciBNZXRhZGF0YTwvYT4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBiYWNrY2hhbm5lbF9sb2dvdXRfc3VwcG9ydGVkPzogYm9vbGVhbjtcbiAgY2xhaW1zX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIGRldmljZV9hdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBlbmRfc2Vzc2lvbl9lbmRwb2ludD86IHN0cmluZztcbiAgZnJvbnRjaGFubmVsX2xvZ291dF9zdXBwb3J0ZWQ/OiBib29sZWFuO1xuICBncmFudF90eXBlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICBpZF90b2tlbl9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBqd2tzX3VyaT86IHN0cmluZztcbiAgcmVzcG9uc2VfbW9kZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVzcG9uc2VfdHlwZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgc2NvcGVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIHN1YmplY3RfdHlwZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgdG9rZW5fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHRva2VuX2VuZHBvaW50X2F1dGhfbWV0aG9kc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICB1c2VyaW5mb19lbmRwb2ludD86IHN0cmluZztcbiAgdXNlcmluZm9fc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQ09TRSBFbGxpcHRpYyBDdXJ2ZSBpZGVudGlmaWVyIHRvIGRldGVybWluZSB3aGljaCBlbGxpcHRpYyBjdXJ2ZSB0byB1c2Ugd2l0aCBhIGdpdmVuIGtleVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIENvc2VFbGxpcHRpY0N1cnZlIHtcbiAgUmVzZXJ2ZWQgPSBcIlJlc2VydmVkXCIsXG4gIFAyNTYgPSBcIlAyNTZcIixcbiAgUDM4NCA9IFwiUDM4NFwiLFxuICBQNTIxID0gXCJQNTIxXCIsXG4gIFgyNTUxOSA9IFwiWDI1NTE5XCIsXG4gIFg0NDggPSBcIlg0NDhcIixcbiAgRWQyNTUxOSA9IFwiRWQyNTUxOVwiLFxuICBFZDQ0OCA9IFwiRWQ0NDhcIixcbiAgU2VjcDI1NmsxID0gXCJTZWNwMjU2azFcIlxufVxuXG4vKipcbiAqIEZvcm0gcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1SZXNwb25zZSB7XG4gIGZvcm0/OiBGb3JtO1xuICBmb3Jtcz86IEFycmF5PEZvcm0+O1xufVxuXG4vLyBEbyBub3QgcmVxdWlyZSBhIHNldHRlciBmb3IgJ3R5cGUnLCBpdCBpcyBkZWZpbmVkIGJ5IHRoZSBjb25jcmV0ZSBjbGFzcyBhbmQgaXMgbm90IG11dGFibGVcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUlkZW50aXR5UHJvdmlkZXI8RCBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8VVVJRCwgRD47XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFtYmRhQ29uZmlndXJhdGlvbj86IExhbWJkYUNvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsaW5raW5nU3RyYXRlZ3k/OiBJZGVudGl0eVByb3ZpZGVyTGlua2luZ1N0cmF0ZWd5O1xuICBuYW1lPzogc3RyaW5nO1xuICB0ZW5hbnRDb25maWd1cmF0aW9uPzogUmVjb3JkPFVVSUQsIElkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uPjtcbiAgdHlwZT86IElkZW50aXR5UHJvdmlkZXJUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuICByZWNvbmNpbGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlUmVzcG9uc2Uge1xuICBqd3Q/OiBKV1Q7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlIHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGVuZD86IG51bWJlcjtcbiAgc3RhcnQ/OiBudW1iZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoUmVzcG9uc2Uge1xufVxuXG4vKipcbiAqIERvbWFpbiBmb3IgYSBwdWJsaWMga2V5LCBrZXkgcGFpciBvciBhbiBITUFDIHNlY3JldC4gVGhpcyBpcyB1c2VkIGJ5IEtleU1hc3RlciB0byBtYW5hZ2Uga2V5cyBmb3IgSldUcywgU0FNTCwgZXRjLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleSB7XG4gIGFsZ29yaXRobT86IEtleUFsZ29yaXRobTtcbiAgY2VydGlmaWNhdGU/OiBzdHJpbmc7XG4gIGNlcnRpZmljYXRlSW5mb3JtYXRpb24/OiBDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uO1xuICBleHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgaGFzUHJpdmF0ZUtleT86IGJvb2xlYW47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBraWQ/OiBzdHJpbmc7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHByaXZhdGVLZXk/OiBzdHJpbmc7XG4gIHB1YmxpY0tleT86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xuICB0eXBlPzogS2V5VHlwZTtcbn1cblxuZXhwb3J0IGVudW0gS2V5QWxnb3JpdGhtIHtcbiAgRVMyNTYgPSBcIkVTMjU2XCIsXG4gIEVTMzg0ID0gXCJFUzM4NFwiLFxuICBFUzUxMiA9IFwiRVM1MTJcIixcbiAgSFMyNTYgPSBcIkhTMjU2XCIsXG4gIEhTMzg0ID0gXCJIUzM4NFwiLFxuICBIUzUxMiA9IFwiSFM1MTJcIixcbiAgUlMyNTYgPSBcIlJTMjU2XCIsXG4gIFJTMzg0ID0gXCJSUzM4NFwiLFxuICBSUzUxMiA9IFwiUlM1MTJcIlxufVxuXG5leHBvcnQgZW51bSBLZXlUeXBlIHtcbiAgRUMgPSBcIkVDXCIsXG4gIFJTQSA9IFwiUlNBXCIsXG4gIEhNQUMgPSBcIkhNQUNcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENlcnRpZmljYXRlSW5mb3JtYXRpb24ge1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIG1kNUZpbmdlcnByaW50Pzogc3RyaW5nO1xuICBzZXJpYWxOdW1iZXI/OiBzdHJpbmc7XG4gIHNoYTFGaW5nZXJwcmludD86IHN0cmluZztcbiAgc2hhMVRodW1icHJpbnQ/OiBzdHJpbmc7XG4gIHNoYTI1NkZpbmdlcnByaW50Pzogc3RyaW5nO1xuICBzaGEyNTZUaHVtYnByaW50Pzogc3RyaW5nO1xuICBzdWJqZWN0Pzogc3RyaW5nO1xuICB2YWxpZEZyb20/OiBudW1iZXI7XG4gIHZhbGlkVG8/OiBudW1iZXI7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBlbnRpdHkgZ3JhbnRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBlbnRpdHlJZD86IFVVSUQ7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBGdXNpb25BdXRoIGNvbm5lY3Rvci5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1c2lvbkF1dGhDb25uZWN0b3JDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUmVzcG9uc2Uge1xuICBjb25uZWN0b3I/OiBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbjtcbiAgY29ubmVjdG9ycz86IEFycmF5PEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uPjtcbn1cblxuLyoqXG4gKiBDb250cm9scyB0aGUgcG9saWN5IGZvciByZXF1ZXN0aW5nIHVzZXIgcGVybWlzc2lvbiB0byBncmFudCBhY2Nlc3MgdG8gcmVxdWVzdGVkIHNjb3BlcyBkdXJpbmcgYW4gT0F1dGggd29ya2Zsb3dcbiAqIGZvciBhIHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIE9BdXRoU2NvcGVDb25zZW50TW9kZSB7XG4gIEFsd2F5c1Byb21wdCA9IFwiQWx3YXlzUHJvbXB0XCIsXG4gIFJlbWVtYmVyRGVjaXNpb24gPSBcIlJlbWVtYmVyRGVjaXNpb25cIixcbiAgTmV2ZXJQcm9tcHQgPSBcIk5ldmVyUHJvbXB0XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuU2xpZGluZ1dpbmRvd0NvbmZpZ3VyYXRpb24ge1xuICBtYXhpbXVtVGltZVRvTGl2ZUluTWludXRlcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgVGhlbWVzLlxuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IFRoZW1lU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIENvbnNlbnRzXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IENvbnNlbnRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIE9iamVjdFN0YXRlIHtcbiAgQWN0aXZlID0gXCJBY3RpdmVcIixcbiAgSW5hY3RpdmUgPSBcIkluYWN0aXZlXCIsXG4gIFBlbmRpbmdEZWxldGUgPSBcIlBlbmRpbmdEZWxldGVcIlxufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBJZGVudGl0eSBQcm92aWRlcnNcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogSWRlbnRpdHlQcm92aWRlclNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXZvY2F0aW9uUG9saWN5IHtcbiAgb25Mb2dpblByZXZlbnRlZD86IGJvb2xlYW47XG4gIG9uTXVsdGlGYWN0b3JFbmFibGU/OiBib29sZWFuO1xuICBvblBhc3N3b3JkQ2hhbmdlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTW9kZWxzIGEgZmFtaWx5IGdyb3VwaW5nIG9mIHVzZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseSB7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG1lbWJlcnM/OiBBcnJheTxGYW1pbHlNZW1iZXI+O1xufVxuXG4vKipcbiAqIFRoZSBBcHBsaWNhdGlvbiBTY29wZSBBUEkgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZSB7XG4gIHNjb3BlPzogQXBwbGljYXRpb25PQXV0aFNjb3BlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aDJDb25maWd1cmF0aW9uIHtcbiAgYXV0aG9yaXplZE9yaWdpblVSTHM/OiBBcnJheTxzdHJpbmc+O1xuICBhdXRob3JpemVkUmVkaXJlY3RVUkxzPzogQXJyYXk8c3RyaW5nPjtcbiAgYXV0aG9yaXplZFVSTFZhbGlkYXRpb25Qb2xpY3k/OiBPYXV0aDJBdXRob3JpemVkVVJMVmFsaWRhdGlvblBvbGljeTtcbiAgY2xpZW50QXV0aGVudGljYXRpb25Qb2xpY3k/OiBDbGllbnRBdXRoZW50aWNhdGlvblBvbGljeTtcbiAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgY29uc2VudE1vZGU/OiBPQXV0aFNjb3BlQ29uc2VudE1vZGU7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgZGV2aWNlVmVyaWZpY2F0aW9uVVJMPzogc3RyaW5nO1xuICBlbmFibGVkR3JhbnRzPzogQXJyYXk8R3JhbnRUeXBlPjtcbiAgZ2VuZXJhdGVSZWZyZXNoVG9rZW5zPzogYm9vbGVhbjtcbiAgbG9nb3V0QmVoYXZpb3I/OiBMb2dvdXRCZWhhdmlvcjtcbiAgbG9nb3V0VVJMPzogc3RyaW5nO1xuICBwcm9vZktleUZvckNvZGVFeGNoYW5nZVBvbGljeT86IFByb29mS2V5Rm9yQ29kZUV4Y2hhbmdlUG9saWN5O1xuICBwcm92aWRlZFNjb3BlUG9saWN5PzogUHJvdmlkZWRTY29wZVBvbGljeTtcbiAgcmVsYXRpb25zaGlwPzogT0F1dGhBcHBsaWNhdGlvblJlbGF0aW9uc2hpcDtcbiAgcmVxdWlyZUNsaWVudEF1dGhlbnRpY2F0aW9uPzogYm9vbGVhbjtcbiAgcmVxdWlyZVJlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG4gIHNjb3BlSGFuZGxpbmdQb2xpY3k/OiBPQXV0aFNjb3BlSGFuZGxpbmdQb2xpY3k7XG4gIHVua25vd25TY29wZVBvbGljeT86IFVua25vd25TY29wZVBvbGljeTtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFsbCBpZGVudGl0eSBwcm92aWRlcnMgdGhhdCBhcmUgcGFzc3dvcmRsZXNzIGFuZCBkbyBub3QgYWNjZXB0IGEgcGFzc3dvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzSWRlbnRpdHlQcm92aWRlciB7XG59XG5cbi8qKlxuICogQSBsb2cgZm9yIGFuIGV2ZW50IHRoYXQgaGFwcGVuZWQgdG8gYSBVc2VyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb21tZW50IHtcbiAgY29tbWVudD86IHN0cmluZztcbiAgY29tbWVudGVySWQ/OiBVVUlEO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBDcmVhdGVkIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cENyZWF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50U1NPQ29uZmlndXJhdGlvbiB7XG4gIGRldmljZVRydXN0VGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yTWV0aG9kIHtcbiAgYXV0aGVudGljYXRvcj86IEF1dGhlbnRpY2F0b3JDb25maWd1cmF0aW9uO1xuICBlbWFpbD86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGxhc3RVc2VkPzogYm9vbGVhbjtcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgVGVuYW50c1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgSWRlbnRpdHkgUHJvdmlkZXIgTGluayBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIFJvYiBEYXZpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJJZGVudGl0eVByb3ZpZGVyTGlua0V2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rPzogSWRlbnRpdHlQcm92aWRlckxpbms7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0IHtcbiAgbG9jYWxlPzogc3RyaW5nO1xuICBtZXNzYWdlVGVtcGxhdGU/OiBNZXNzYWdlVGVtcGxhdGU7XG59XG5cbi8qKlxuICogTG9naW4gQVBJIHJlcXVlc3Qgb2JqZWN0IHVzZWQgZm9yIGxvZ2luIHRvIHRoaXJkLXBhcnR5IHN5c3RlbXMgKGkuZS4gTG9naW4gd2l0aCBGYWNlYm9vaykuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZW5jb2RlZEpXVD86IHN0cmluZztcbiAgaWRlbnRpdHlQcm92aWRlcklkPzogVVVJRDtcbiAgbm9MaW5rPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBbiBhY3Rpb24gdGhhdCBjYW4gYmUgZXhlY3V0ZWQgb24gYSB1c2VyIChkaXNjaXBsaW5lIG9yIHJld2FyZCBwb3RlbnRpYWxseSkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvbiB7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGNhbmNlbEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGVuZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGlkPzogVVVJRDtcbiAgaW5jbHVkZUVtYWlsSW5FdmVudEpTT04/OiBib29sZWFuO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9jYWxpemVkTmFtZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBtb2RpZnlFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBuYW1lPzogc3RyaW5nO1xuICBvcHRpb25zPzogQXJyYXk8VXNlckFjdGlvbk9wdGlvbj47XG4gIHByZXZlbnRMb2dpbj86IGJvb2xlYW47XG4gIHNlbmRFbmRFdmVudD86IGJvb2xlYW47XG4gIHN0YXJ0RW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdGVtcG9yYWw/OiBib29sZWFuO1xuICB0cmFuc2FjdGlvblR5cGU/OiBUcmFuc2FjdGlvblR5cGU7XG4gIHVzZXJFbWFpbGluZ0VuYWJsZWQ/OiBib29sZWFuO1xuICB1c2VyTm90aWZpY2F0aW9uc0VuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWUge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVmYXVsdE1lc3NhZ2VzPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRNZXNzYWdlcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0eWxlc2hlZXQ/OiBzdHJpbmc7XG4gIHRlbXBsYXRlcz86IFRlbXBsYXRlcztcbiAgdHlwZT86IFRoZW1lVHlwZTtcbiAgdmFyaWFibGVzPzogU2ltcGxlVGhlbWVWYXJpYWJsZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVzIHtcbiAgYWNjb3VudEVkaXQ/OiBzdHJpbmc7XG4gIGFjY291bnRJbmRleD86IHN0cmluZztcbiAgYWNjb3VudFR3b0ZhY3RvckRpc2FibGU/OiBzdHJpbmc7XG4gIGFjY291bnRUd29GYWN0b3JFbmFibGU/OiBzdHJpbmc7XG4gIGFjY291bnRUd29GYWN0b3JJbmRleD86IHN0cmluZztcbiAgYWNjb3VudFdlYkF1dGhuQWRkPzogc3RyaW5nO1xuICBhY2NvdW50V2ViQXV0aG5EZWxldGU/OiBzdHJpbmc7XG4gIGFjY291bnRXZWJBdXRobkluZGV4Pzogc3RyaW5nO1xuICBjb25maXJtYXRpb25SZXF1aXJlZD86IHN0cmluZztcbiAgZW1haWxDb21wbGV0ZT86IHN0cmluZztcbiAgZW1haWxTZW5kPzogc3RyaW5nO1xuICBlbWFpbFNlbnQ/OiBzdHJpbmc7XG4gIGVtYWlsVmVyaWZpY2F0aW9uUmVxdWlyZWQ/OiBzdHJpbmc7XG4gIGVtYWlsVmVyaWZ5Pzogc3RyaW5nO1xuICBoZWxwZXJzPzogc3RyaW5nO1xuICBpbmRleD86IHN0cmluZztcbiAgb2F1dGgyQXV0aG9yaXplPzogc3RyaW5nO1xuICBvYXV0aDJBdXRob3JpemVkTm90UmVnaXN0ZXJlZD86IHN0cmluZztcbiAgb2F1dGgyQ2hpbGRSZWdpc3RyYXRpb25Ob3RBbGxvd2VkPzogc3RyaW5nO1xuICBvYXV0aDJDaGlsZFJlZ2lzdHJhdGlvbk5vdEFsbG93ZWRDb21wbGV0ZT86IHN0cmluZztcbiAgb2F1dGgyQ29tcGxldGVSZWdpc3RyYXRpb24/OiBzdHJpbmc7XG4gIG9hdXRoMkNvbnNlbnQ/OiBzdHJpbmc7XG4gIG9hdXRoMkRldmljZT86IHN0cmluZztcbiAgb2F1dGgyRGV2aWNlQ29tcGxldGU/OiBzdHJpbmc7XG4gIG9hdXRoMkVycm9yPzogc3RyaW5nO1xuICBvYXV0aDJMb2dvdXQ/OiBzdHJpbmc7XG4gIG9hdXRoMlBhc3N3b3JkbGVzcz86IHN0cmluZztcbiAgb2F1dGgyUmVnaXN0ZXI/OiBzdHJpbmc7XG4gIG9hdXRoMlN0YXJ0SWRQTGluaz86IHN0cmluZztcbiAgb2F1dGgyVHdvRmFjdG9yPzogc3RyaW5nO1xuICBvYXV0aDJUd29GYWN0b3JFbmFibGU/OiBzdHJpbmc7XG4gIG9hdXRoMlR3b0ZhY3RvckVuYWJsZUNvbXBsZXRlPzogc3RyaW5nO1xuICBvYXV0aDJUd29GYWN0b3JNZXRob2RzPzogc3RyaW5nO1xuICBvYXV0aDJXYWl0Pzogc3RyaW5nO1xuICBvYXV0aDJXZWJBdXRobj86IHN0cmluZztcbiAgb2F1dGgyV2ViQXV0aG5SZWF1dGg/OiBzdHJpbmc7XG4gIG9hdXRoMldlYkF1dGhuUmVhdXRoRW5hYmxlPzogc3RyaW5nO1xuICBwYXNzd29yZENoYW5nZT86IHN0cmluZztcbiAgcGFzc3dvcmRDb21wbGV0ZT86IHN0cmluZztcbiAgcGFzc3dvcmRGb3Jnb3Q/OiBzdHJpbmc7XG4gIHBhc3N3b3JkU2VudD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uQ29tcGxldGU/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblNlbmQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblNlbnQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvblJlcXVpcmVkPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25WZXJpZnk/OiBzdHJpbmc7XG4gIHNhbWx2MkxvZ291dD86IHN0cmluZztcbiAgdW5hdXRob3JpemVkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gSWRlbnRpdHlQcm92aWRlclR5cGUge1xuICBBcHBsZSA9IFwiQXBwbGVcIixcbiAgRXBpY0dhbWVzID0gXCJFcGljR2FtZXNcIixcbiAgRXh0ZXJuYWxKV1QgPSBcIkV4dGVybmFsSldUXCIsXG4gIEZhY2Vib29rID0gXCJGYWNlYm9va1wiLFxuICBHb29nbGUgPSBcIkdvb2dsZVwiLFxuICBIWVBSID0gXCJIWVBSXCIsXG4gIExpbmtlZEluID0gXCJMaW5rZWRJblwiLFxuICBOaW50ZW5kbyA9IFwiTmludGVuZG9cIixcbiAgT3BlbklEQ29ubmVjdCA9IFwiT3BlbklEQ29ubmVjdFwiLFxuICBTQU1MdjIgPSBcIlNBTUx2MlwiLFxuICBTQU1MdjJJZFBJbml0aWF0ZWQgPSBcIlNBTUx2MklkUEluaXRpYXRlZFwiLFxuICBTb255UFNOID0gXCJTb255UFNOXCIsXG4gIFN0ZWFtID0gXCJTdGVhbVwiLFxuICBUd2l0Y2ggPSBcIlR3aXRjaFwiLFxuICBUd2l0dGVyID0gXCJUd2l0dGVyXCIsXG4gIFhib3ggPSBcIlhib3hcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbnRyaWVzPzogQXJyYXk8SVBBY2Nlc3NDb250cm9sRW50cnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gVmVyaWZpY2F0aW9uU3RyYXRlZ3kge1xuICBDbGlja2FibGVMaW5rID0gXCJDbGlja2FibGVMaW5rXCIsXG4gIEZvcm1GaWVsZCA9IFwiRm9ybUZpZWxkXCJcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBtYW5hZ2VkIGZpZWxkcyB0aGF0IGFyZSBhbHNvIHB1dCBpbnRvIHRoZSBkYXRhYmFzZSBkdXJpbmcgRnVzaW9uQXV0aCBzZXR1cC5cbiAqIDxwPlxuICogSW50ZXJuYWwgTm90ZTogVGhlc2UgZmllbGRzIGFyZSBhbHNvIGRlY2xhcmVkIGluIFNRTCBpbiBvcmRlciB0byBib290c3RyYXAgdGhlIHN5c3RlbS4gVGhlc2UgbmVlZCB0byBzdGF5IGluIHN5bmMuXG4gKiBBbnkgY2hhbmdlcyB0byB0aGVzZSBmaWVsZHMgbmVlZHMgdG8gYWxzbyBiZSByZWZsZWN0ZWQgaW4gbXlzcWwuc3FsIGFuZCBwb3N0Z3Jlc3FsLnNxbFxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZWRGaWVsZHMge1xufVxuXG4vKipcbiAqIFdlYmhvb2sgZXZlbnQgbG9nIHNlYXJjaCByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va0V2ZW50TG9nU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IFdlYmhvb2tFdmVudExvZ1NlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRoZW50aWNhdG9yQ29uZmlndXJhdGlvbiB7XG4gIGFsZ29yaXRobT86IFRPVFBBbGdvcml0aG07XG4gIGNvZGVMZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVTdGVwPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZW51bSBUT1RQQWxnb3JpdGhtIHtcbiAgSG1hY1NIQTEgPSBcIkhtYWNTSEExXCIsXG4gIEhtYWNTSEEyNTYgPSBcIkhtYWNTSEEyNTZcIixcbiAgSG1hY1NIQTUxMiA9IFwiSG1hY1NIQTUxMlwiXG59XG5cbi8qKlxuICogTW9kZWxzIGFjdGlvbiByZWFzb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25SZWFzb24ge1xuICBjb2RlPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRUZXh0cz86IExvY2FsaXplZFN0cmluZ3M7XG4gIHRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBVc2VyJ3MgV2ViQXV0aG5DcmVkZW50aWFsLiBDb250YWlucyBhbGwgZGF0YSByZXF1aXJlZCB0byBjb21wbGV0ZSBXZWJBdXRobiBhdXRoZW50aWNhdGlvbiBjZXJlbW9uaWVzLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5DcmVkZW50aWFsIHtcbiAgYWxnb3JpdGhtPzogQ29zZUFsZ29yaXRobUlkZW50aWZpZXI7XG4gIGF0dGVzdGF0aW9uVHlwZT86IEF0dGVzdGF0aW9uVHlwZTtcbiAgYXV0aGVudGljYXRvclN1cHBvcnRzVXNlclZlcmlmaWNhdGlvbj86IGJvb2xlYW47XG4gIGNyZWRlbnRpYWxJZD86IHN0cmluZztcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRpc2NvdmVyYWJsZT86IGJvb2xlYW47XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVc2VJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gIHJlbHlpbmdQYXJ0eUlkPzogc3RyaW5nO1xuICBzaWduQ291bnQ/OiBudW1iZXI7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdHJhbnNwb3J0cz86IEFycmF5PHN0cmluZz47XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFJlZnJlc2ggVG9rZW4gUmV2b2tlIEV2ZW50LiBUaGlzIGV2ZW50IG1pZ2h0IGJlIGZvciBhIHNpbmdsZSB0b2tlbiwgYSB1c2VyXG4gKiBvciBhbiBlbnRpcmUgYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUUmVmcmVzaFRva2VuUmV2b2tlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25UaW1lVG9MaXZlSW5TZWNvbmRzPzogUmVjb3JkPFVVSUQsIG51bWJlcj47XG4gIHJlZnJlc2hUb2tlbj86IFJlZnJlc2hUb2tlbjtcbiAgdXNlcj86IFVzZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JQb2xpY3kge1xuICBjb25uZWN0b3JJZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgbWlncmF0ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIEF1dGhlbnRpY2F0aW9uVGhyZWF0cyB7XG4gIEltcG9zc2libGVUcmF2ZWwgPSBcIkltcG9zc2libGVUcmF2ZWxcIlxufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBSZXNldCBTZW5kIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUGFzc3dvcmRSZXNldFNlbmRFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIEV2ZW50IHRvIGluZGljYXRlIGtpY2tzdGFydCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY29tcGxldGVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLaWNrc3RhcnRTdWNjZXNzRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBpbnN0YW5jZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBVc2VyIEFQSSBkZWxldGUgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWxldGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGRyeVJ1bj86IGJvb2xlYW47XG4gIGhhcmREZWxldGU/OiBib29sZWFuO1xuICBsaW1pdD86IG51bWJlcjtcbiAgcXVlcnk/OiBzdHJpbmc7XG4gIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xuICB1c2VySWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRBY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbiB7XG4gIHVpSVBBY2Nlc3NDb250cm9sTGlzdElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIGEgc2ltcGxlIGF0dGFjaG1lbnQgd2l0aCBhIGJ5dGUgYXJyYXksIG5hbWUgYW5kIE1JTUUgdHlwZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50IHtcbiAgYXR0YWNobWVudD86IEFycmF5PG51bWJlcj47XG4gIG1pbWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBhbnkgb2JqZWN0IHRoYXQgY2FuIHByb3ZpZGUgSlNPTiBXZWIga2V5IEluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpTT05XZWJLZXlJbmZvUHJvdmlkZXIge1xufVxuXG4vKipcbiAqIFRlbmFudC1sZXZlbCBjb25maWd1cmF0aW9uIGZvciBXZWJBdXRoblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50V2ViQXV0aG5Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGJvb3RzdHJhcFdvcmtmbG93PzogVGVuYW50V2ViQXV0aG5Xb3JrZmxvd0NvbmZpZ3VyYXRpb247XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgcmVhdXRoZW50aWNhdGlvbldvcmtmbG93PzogVGVuYW50V2ViQXV0aG5Xb3JrZmxvd0NvbmZpZ3VyYXRpb247XG4gIHJlbHlpbmdQYXJ0eUlkPzogc3RyaW5nO1xuICByZWx5aW5nUGFydHlOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVtYWlsIHRlbXBsYXRlIHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZVJlcXVlc3Qge1xuICBlbWFpbFRlbXBsYXRlPzogRW1haWxUZW1wbGF0ZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclBlbmRpbmdMaW5rUmVzcG9uc2Uge1xuICBpZGVudGl0eVByb3ZpZGVyVGVuYW50Q29uZmlndXJhdGlvbj86IElkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uO1xuICBsaW5rQ291bnQ/OiBudW1iZXI7XG4gIHBlbmRpbmdJZFBMaW5rPzogUGVuZGluZ0lkUExpbms7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc1NlbmRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJsb2NrZWREb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxpbmsge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIGlkZW50aXR5UHJvdmlkZXJOYW1lPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVyVHlwZT86IElkZW50aXR5UHJvdmlkZXJUeXBlO1xuICBpZGVudGl0eVByb3ZpZGVyVXNlcklkPzogc3RyaW5nO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0TG9naW5JbnN0YW50PzogbnVtYmVyO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHRva2VuPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFJlZ2lzdHJhdGlvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uUmVzcG9uc2Uge1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25PbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuRXhwaXJhdGlvbkluc3RhbnQ/OiBudW1iZXI7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIEEgcm9sZSBnaXZlbiB0byBhIHVzZXIgZm9yIGEgc3BlY2lmaWMgYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uUm9sZSB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGlzRGVmYXVsdD86IGJvb2xlYW47XG4gIGlzU3VwZXJSb2xlPzogYm9vbGVhbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogR29vZ2xlIHNvY2lhbCBsb2dpbiBwcm92aWRlciBwYXJhbWV0ZXJzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHb29nbGVJZGVudGl0eVByb3ZpZGVyUHJvcGVydGllcyB7XG4gIGFwaT86IHN0cmluZztcbiAgYnV0dG9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV0tTUmVzcG9uc2Uge1xuICBrZXlzPzogQXJyYXk8SlNPTldlYktleT47XG59XG5cbi8qKlxuICogU3RlYW0gQVBJIG1vZGVzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gU3RlYW1BUElNb2RlIHtcbiAgUHVibGljID0gXCJQdWJsaWNcIixcbiAgUGFydG5lciA9IFwiUGFydG5lclwiXG59XG5cbi8qKlxuICogTGFtYmRhIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhUmVzcG9uc2Uge1xuICBsYW1iZGE/OiBMYW1iZGE7XG4gIGxhbWJkYXM/OiBBcnJheTxMYW1iZGE+O1xufVxuXG4vKipcbiAqIFRoZSBJbnRlZ3JhdGlvbiBSZXF1ZXN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9uUmVxdWVzdCB7XG4gIGludGVncmF0aW9ucz86IEludGVncmF0aW9ucztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEpXVCBwdWJsaWMga2V5IFJlZnJlc2ggVG9rZW4gUmV2b2tlIEV2ZW50LiBUaGlzIGV2ZW50IG1pZ2h0IGJlIGZvciBhIHNpbmdsZVxuICogdG9rZW4sIGEgdXNlciBvciBhbiBlbnRpcmUgYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUUHVibGljS2V5VXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBDYXB0Y2hhTWV0aG9kIHtcbiAgR29vZ2xlUmVjYXB0Y2hhVjIgPSBcIkdvb2dsZVJlY2FwdGNoYVYyXCIsXG4gIEdvb2dsZVJlY2FwdGNoYVYzID0gXCJHb29nbGVSZWNhcHRjaGFWM1wiLFxuICBIQ2FwdGNoYSA9IFwiSENhcHRjaGFcIixcbiAgSENhcHRjaGFFbnRlcnByaXNlID0gXCJIQ2FwdGNoYUVudGVycHJpc2VcIlxufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgZXZlbnQgdHlwZXMgdGhhdCBGdXNpb25BdXRoIHByb2R1Y2VzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBFdmVudFR5cGUge1xuICBKV1RQdWJsaWNLZXlVcGRhdGUgPSBcImp3dC5wdWJsaWMta2V5LnVwZGF0ZVwiLFxuICBKV1RSZWZyZXNoVG9rZW5SZXZva2UgPSBcImp3dC5yZWZyZXNoLXRva2VuLnJldm9rZVwiLFxuICBKV1RSZWZyZXNoID0gXCJqd3QucmVmcmVzaFwiLFxuICBBdWRpdExvZ0NyZWF0ZSA9IFwiYXVkaXQtbG9nLmNyZWF0ZVwiLFxuICBFdmVudExvZ0NyZWF0ZSA9IFwiZXZlbnQtbG9nLmNyZWF0ZVwiLFxuICBLaWNrc3RhcnRTdWNjZXNzID0gXCJraWNrc3RhcnQuc3VjY2Vzc1wiLFxuICBHcm91cENyZWF0ZSA9IFwiZ3JvdXAuY3JlYXRlXCIsXG4gIEdyb3VwQ3JlYXRlQ29tcGxldGUgPSBcImdyb3VwLmNyZWF0ZS5jb21wbGV0ZVwiLFxuICBHcm91cERlbGV0ZSA9IFwiZ3JvdXAuZGVsZXRlXCIsXG4gIEdyb3VwRGVsZXRlQ29tcGxldGUgPSBcImdyb3VwLmRlbGV0ZS5jb21wbGV0ZVwiLFxuICBHcm91cE1lbWJlckFkZCA9IFwiZ3JvdXAubWVtYmVyLmFkZFwiLFxuICBHcm91cE1lbWJlckFkZENvbXBsZXRlID0gXCJncm91cC5tZW1iZXIuYWRkLmNvbXBsZXRlXCIsXG4gIEdyb3VwTWVtYmVyUmVtb3ZlID0gXCJncm91cC5tZW1iZXIucmVtb3ZlXCIsXG4gIEdyb3VwTWVtYmVyUmVtb3ZlQ29tcGxldGUgPSBcImdyb3VwLm1lbWJlci5yZW1vdmUuY29tcGxldGVcIixcbiAgR3JvdXBNZW1iZXJVcGRhdGUgPSBcImdyb3VwLm1lbWJlci51cGRhdGVcIixcbiAgR3JvdXBNZW1iZXJVcGRhdGVDb21wbGV0ZSA9IFwiZ3JvdXAubWVtYmVyLnVwZGF0ZS5jb21wbGV0ZVwiLFxuICBHcm91cFVwZGF0ZSA9IFwiZ3JvdXAudXBkYXRlXCIsXG4gIEdyb3VwVXBkYXRlQ29tcGxldGUgPSBcImdyb3VwLnVwZGF0ZS5jb21wbGV0ZVwiLFxuICBVc2VyQWN0aW9uID0gXCJ1c2VyLmFjdGlvblwiLFxuICBVc2VyQnVsa0NyZWF0ZSA9IFwidXNlci5idWxrLmNyZWF0ZVwiLFxuICBVc2VyQ3JlYXRlID0gXCJ1c2VyLmNyZWF0ZVwiLFxuICBVc2VyQ3JlYXRlQ29tcGxldGUgPSBcInVzZXIuY3JlYXRlLmNvbXBsZXRlXCIsXG4gIFVzZXJEZWFjdGl2YXRlID0gXCJ1c2VyLmRlYWN0aXZhdGVcIixcbiAgVXNlckRlbGV0ZSA9IFwidXNlci5kZWxldGVcIixcbiAgVXNlckRlbGV0ZUNvbXBsZXRlID0gXCJ1c2VyLmRlbGV0ZS5jb21wbGV0ZVwiLFxuICBVc2VyRW1haWxVcGRhdGUgPSBcInVzZXIuZW1haWwudXBkYXRlXCIsXG4gIFVzZXJFbWFpbFZlcmlmaWVkID0gXCJ1c2VyLmVtYWlsLnZlcmlmaWVkXCIsXG4gIFVzZXJJZGVudGl0eVByb3ZpZGVyTGluayA9IFwidXNlci5pZGVudGl0eS1wcm92aWRlci5saW5rXCIsXG4gIFVzZXJJZGVudGl0eVByb3ZpZGVyVW5saW5rID0gXCJ1c2VyLmlkZW50aXR5LXByb3ZpZGVyLnVubGlua1wiLFxuICBVc2VyTG9naW5JZER1cGxpY2F0ZU9uQ3JlYXRlID0gXCJ1c2VyLmxvZ2luSWQuZHVwbGljYXRlLmNyZWF0ZVwiLFxuICBVc2VyTG9naW5JZER1cGxpY2F0ZU9uVXBkYXRlID0gXCJ1c2VyLmxvZ2luSWQuZHVwbGljYXRlLnVwZGF0ZVwiLFxuICBVc2VyTG9naW5GYWlsZWQgPSBcInVzZXIubG9naW4uZmFpbGVkXCIsXG4gIFVzZXJMb2dpbk5ld0RldmljZSA9IFwidXNlci5sb2dpbi5uZXctZGV2aWNlXCIsXG4gIFVzZXJMb2dpblN1Y2Nlc3MgPSBcInVzZXIubG9naW4uc3VjY2Vzc1wiLFxuICBVc2VyTG9naW5TdXNwaWNpb3VzID0gXCJ1c2VyLmxvZ2luLnN1c3BpY2lvdXNcIixcbiAgVXNlclBhc3N3b3JkQnJlYWNoID0gXCJ1c2VyLnBhc3N3b3JkLmJyZWFjaFwiLFxuICBVc2VyUGFzc3dvcmRSZXNldFNlbmQgPSBcInVzZXIucGFzc3dvcmQucmVzZXQuc2VuZFwiLFxuICBVc2VyUGFzc3dvcmRSZXNldFN0YXJ0ID0gXCJ1c2VyLnBhc3N3b3JkLnJlc2V0LnN0YXJ0XCIsXG4gIFVzZXJQYXNzd29yZFJlc2V0U3VjY2VzcyA9IFwidXNlci5wYXNzd29yZC5yZXNldC5zdWNjZXNzXCIsXG4gIFVzZXJQYXNzd29yZFVwZGF0ZSA9IFwidXNlci5wYXNzd29yZC51cGRhdGVcIixcbiAgVXNlclJlYWN0aXZhdGUgPSBcInVzZXIucmVhY3RpdmF0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uQ3JlYXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi5jcmVhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvbkNyZWF0ZUNvbXBsZXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi5jcmVhdGUuY29tcGxldGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvbkRlbGV0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uZGVsZXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25EZWxldGVDb21wbGV0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uZGVsZXRlLmNvbXBsZXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25VcGRhdGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLnVwZGF0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uVXBkYXRlQ29tcGxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLnVwZGF0ZS5jb21wbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uVmVyaWZpZWQgPSBcInVzZXIucmVnaXN0cmF0aW9uLnZlcmlmaWVkXCIsXG4gIFVzZXJUd29GYWN0b3JNZXRob2RBZGQgPSBcInVzZXIudHdvLWZhY3Rvci5tZXRob2QuYWRkXCIsXG4gIFVzZXJUd29GYWN0b3JNZXRob2RSZW1vdmUgPSBcInVzZXIudHdvLWZhY3Rvci5tZXRob2QucmVtb3ZlXCIsXG4gIFVzZXJVcGRhdGUgPSBcInVzZXIudXBkYXRlXCIsXG4gIFVzZXJVcGRhdGVDb21wbGV0ZSA9IFwidXNlci51cGRhdGUuY29tcGxldGVcIixcbiAgVGVzdCA9IFwidGVzdFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2Uge1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBvbGljeSBmb3IgaGFuZGxpbmcgdW5rbm93biBPQXV0aCBzY29wZXMgaW4gdGhlIHJlcXVlc3RcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBVbmtub3duU2NvcGVQb2xpY3kge1xuICBBbGxvdyA9IFwiQWxsb3dcIixcbiAgUmVtb3ZlID0gXCJSZW1vdmVcIixcbiAgUmVqZWN0ID0gXCJSZWplY3RcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnVuZGxlSWQ/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGtleUlkPzogVVVJRDtcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHNlcnZpY2VzSWQ/OiBzdHJpbmc7XG4gIHRlYW1JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBdWRpdCBsb2cgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dSZXNwb25zZSB7XG4gIGF1ZGl0TG9nPzogQXVkaXRMb2c7XG59XG5cbi8qKlxuICogZG9tYWluIFBPSk8gdG8gcmVwcmVzZW50IEF1dGhlbnRpY2F0aW9uS2V5XG4gKlxuICogQGF1dGhvciBzYW5qYXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBUElLZXkge1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGlwQWNjZXNzQ29udHJvbExpc3RJZD86IFVVSUQ7XG4gIGtleT86IHN0cmluZztcbiAga2V5TWFuYWdlcj86IGJvb2xlYW47XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBtZXRhRGF0YT86IEFQSUtleU1ldGFEYXRhO1xuICBwZXJtaXNzaW9ucz86IEFQSUtleVBlcm1pc3Npb25zO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5TWV0YURhdGEge1xuICBhdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBUElLZXlQZXJtaXNzaW9ucyB7XG4gIGVuZHBvaW50cz86IFJlY29yZDxzdHJpbmcsIEFycmF5PHN0cmluZz4+O1xufVxuXG4vKipcbiAqIFRoZSBhcHBsaWNhdGlvbidzIHJlbGF0aW9uc2hpcCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuIEZpcnN0LXBhcnR5IGFwcGxpY2F0aW9ucyB3aWxsIGJlIGdyYW50ZWQgaW1wbGljaXQgcGVybWlzc2lvbiBmb3IgcmVxdWVzdGVkIHNjb3Blcy5cbiAqIFRoaXJkLXBhcnR5IGFwcGxpY2F0aW9ucyB3aWxsIHVzZSB0aGUge0BsaW5rIE9BdXRoU2NvcGVDb25zZW50TW9kZX0gcG9saWN5LlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIE9BdXRoQXBwbGljYXRpb25SZWxhdGlvbnNoaXAge1xuICBGaXJzdFBhcnR5ID0gXCJGaXJzdFBhcnR5XCIsXG4gIFRoaXJkUGFydHkgPSBcIlRoaXJkUGFydHlcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyT2F1dGgyQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhvcml6YXRpb25fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgY2xpZW50QXV0aGVudGljYXRpb25NZXRob2Q/OiBDbGllbnRBdXRoZW50aWNhdGlvbk1ldGhvZDtcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAgZW1haWxWZXJpZmllZENsYWltPzogc3RyaW5nO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB0b2tlbl9lbmRwb2ludD86IHN0cmluZztcbiAgdW5pcXVlSWRDbGFpbT86IHN0cmluZztcbiAgdXNlcmluZm9fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIENsaWVudEF1dGhlbnRpY2F0aW9uTWV0aG9kIHtcbiAgbm9uZSA9IFwibm9uZVwiLFxuICBjbGllbnRfc2VjcmV0X2Jhc2ljID0gXCJjbGllbnRfc2VjcmV0X2Jhc2ljXCIsXG4gIGNsaWVudF9zZWNyZXRfcG9zdCA9IFwiY2xpZW50X3NlY3JldF9wb3N0XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkSW5JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8TGlua2VkSW5BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlc3BvbnNlIHtcbiAgYWN0aW9ucz86IEFycmF5PExvZ2luUHJldmVudGVkUmVzcG9uc2U+O1xuICBjaGFuZ2VQYXNzd29yZElkPzogc3RyaW5nO1xuICBjaGFuZ2VQYXNzd29yZFJlYXNvbj86IENoYW5nZVBhc3N3b3JkUmVhc29uO1xuICBjb25maWd1cmFibGVNZXRob2RzPzogQXJyYXk8c3RyaW5nPjtcbiAgZW1haWxWZXJpZmljYXRpb25JZD86IHN0cmluZztcbiAgbWV0aG9kcz86IEFycmF5PFR3b0ZhY3Rvck1ldGhvZD47XG4gIHBlbmRpbmdJZFBMaW5rSWQ/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0aHJlYXRzRGV0ZWN0ZWQ/OiBBcnJheTxBdXRoZW50aWNhdGlvblRocmVhdHM+O1xuICB0b2tlbj86IHN0cmluZztcbiAgdG9rZW5FeHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgdHJ1c3RUb2tlbj86IHN0cmluZztcbiAgdHdvRmFjdG9ySWQ/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyBhIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnQge1xuICBjb25zZW50RW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgY291bnRyeU1pbmltdW1BZ2VGb3JTZWxmQ29uc2VudD86IExvY2FsaXplZEludGVnZXJzO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVmYXVsdE1pbmltdW1BZ2VGb3JTZWxmQ29uc2VudD86IG51bWJlcjtcbiAgZW1haWxQbHVzPzogRW1haWxQbHVzO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBtdWx0aXBsZVZhbHVlc0FsbG93ZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICB2YWx1ZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsUGx1cyBleHRlbmRzIEVuYWJsZWFibGUge1xuICBlbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBtYXhpbXVtVGltZVRvU2VuZEVtYWlsSW5Ib3Vycz86IG51bWJlcjtcbiAgbWluaW11bVRpbWVUb1NlbmRFbWFpbEluSG91cnM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIHtAbGluayBHcm91cH0gYW5kIHtAbGluayBHcm91cE1lbWJlcn0gZXZlbnRzLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUdyb3VwRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBncm91cD86IEdyb3VwO1xufVxuXG4vKipcbiAqIE1vZGVscyBhIHNwZWNpZmljIGVudGl0eSB0eXBlIHBlcm1pc3Npb24uIFRoaXMgcGVybWlzc2lvbiBjYW4gYmUgZ3JhbnRlZCB0byB1c2VycyBvciBvdGhlciBlbnRpdGllcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlUGVybWlzc2lvbiB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpc0RlZmF1bHQ/OiBib29sZWFuO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRoZSB1c2VyIHF1ZXJ5LiBJdCBwcm92aWRlcyBhIGJ1aWxkIHBhdHRlcm4gYXMgd2VsbCBhcyBwdWJsaWMgZmllbGRzIGZvciB1c2Ugb24gZm9ybXMgYW5kIGluIGFjdGlvbnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZUVsYXN0aWNTZWFyY2hDcml0ZXJpYSB7XG59XG5cbi8qKlxuICogVXNlciBjb21tZW50IHNlYXJjaCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbW1lbnRTZWFyY2hSZXNwb25zZSB7XG4gIHRvdGFsPzogbnVtYmVyO1xuICB1c2VyQ29tbWVudHM/OiBBcnJheTxVc2VyQ29tbWVudD47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJSZXF1ZXN0IHtcbiAgaWRlbnRpdHlQcm92aWRlcj86IEJhc2VJZGVudGl0eVByb3ZpZGVyPGFueT47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBJZGVudGl0eSBQcm92aWRlcnMuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IElkZW50aXR5UHJvdmlkZXJUeXBlO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkIGVycm9yIGRvbWFpbiBvYmplY3QgdGhhdCBjYW4gYWxzbyBiZSB1c2VkIGFzIHRoZSByZXNwb25zZSBmcm9tIGFuIEFQSSBjYWxsLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVycm9ycyB7XG4gIGZpZWxkRXJyb3JzPzogUmVjb3JkPHN0cmluZywgQXJyYXk8RXJyb3I+PjtcbiAgZ2VuZXJhbEVycm9ycz86IEFycmF5PEVycm9yPjtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIGVycm9yLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yIHtcbiAgY29kZT86IHN0cmluZztcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXZhaWxhYmxlIEpTT04gV2ViIEFsZ29yaXRobXMgKEpXQSkgYXMgZGVzY3JpYmVkIGluIFJGQyA3NTE4IGF2YWlsYWJsZSBmb3IgdGhpcyBKV1QgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBBbGdvcml0aG0ge1xuICBFUzI1NiA9IFwiRVMyNTZcIixcbiAgRVMzODQgPSBcIkVTMzg0XCIsXG4gIEVTNTEyID0gXCJFUzUxMlwiLFxuICBIUzI1NiA9IFwiSFMyNTZcIixcbiAgSFMzODQgPSBcIkhTMzg0XCIsXG4gIEhTNTEyID0gXCJIUzUxMlwiLFxuICBQUzI1NiA9IFwiUFMyNTZcIixcbiAgUFMzODQgPSBcIlBTMzg0XCIsXG4gIFBTNTEyID0gXCJQUzUxMlwiLFxuICBSUzI1NiA9IFwiUlMyNTZcIixcbiAgUlMzODQgPSBcIlJTMzg0XCIsXG4gIFJTNTEyID0gXCJSUzUxMlwiLFxuICBub25lID0gXCJub25lXCJcbn1cblxuLyoqXG4gKiBKU09OIFdlYiBUb2tlbiAoSldUKSBhcyBkZWZpbmVkIGJ5IFJGQyA3NTE5LlxuICogPHByZT5cbiAqIEZyb20gUkZDIDc1MTkgU2VjdGlvbiAxLiBJbnRyb2R1Y3Rpb246XG4gKiAgICBUaGUgc3VnZ2VzdGVkIHByb251bmNpYXRpb24gb2YgSldUIGlzIHRoZSBzYW1lIGFzIHRoZSBFbmdsaXNoIHdvcmQgXCJqb3RcIi5cbiAqIDwvcHJlPlxuICogVGhlIEpXVCBpcyBub3QgVGhyZWFkLVNhZmUgYW5kIHNob3VsZCBub3QgYmUgcmUtdXNlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUIHtcbiAgYXVkPzogYW55O1xuICBleHA/OiBudW1iZXI7XG4gIGlhdD86IG51bWJlcjtcbiAgaXNzPzogc3RyaW5nO1xuICBqdGk/OiBzdHJpbmc7XG4gIG5iZj86IG51bWJlcjtcbiAgW290aGVyQ2xhaW1zOiBzdHJpbmddOiBhbnk7IC8vIEFueSBvdGhlciBmaWVsZHNcbiAgc3ViPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgSlNPTiBXZWIgS2V5IGFzIGRlZmluZWQgYnkgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTE3I3NlY3Rpb24tNFwiPlJGQyA3NTE3IEpTT04gV2ViIEtleSAoSldLKVxuICogU2VjdGlvbiA0PC9hPiBhbmQgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTE4XCI+UkZDIDc1MTggSlNPTiBXZWIgQWxnb3JpdGhtcyAoSldBKTwvYT4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpTT05XZWJLZXkge1xuICBhbGc/OiBBbGdvcml0aG07XG4gIGNydj86IHN0cmluZztcbiAgZD86IHN0cmluZztcbiAgZHA/OiBzdHJpbmc7XG4gIGRxPzogc3RyaW5nO1xuICBlPzogc3RyaW5nO1xuICBraWQ/OiBzdHJpbmc7XG4gIGt0eT86IEtleVR5cGU7XG4gIG4/OiBzdHJpbmc7XG4gIFtvdGhlcjogc3RyaW5nXTogYW55OyAvLyBBbnkgb3RoZXIgZmllbGRzXG4gIHA/OiBzdHJpbmc7XG4gIHE/OiBzdHJpbmc7XG4gIHFpPzogc3RyaW5nO1xuICB1c2U/OiBzdHJpbmc7XG4gIHg/OiBzdHJpbmc7XG4gIHg1Yz86IEFycmF5PHN0cmluZz47XG4gIHg1dD86IHN0cmluZztcbiAgeDV0X1MyNTY/OiBzdHJpbmc7XG4gIHk/OiBzdHJpbmc7XG59XG5cbiIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTksIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBDbGllbnRSZXNwb25zZSBmcm9tIFwiLi9DbGllbnRSZXNwb25zZVwiO1xuaW1wb3J0IHtSZXF1ZXN0Q3JlZGVudGlhbHMsIFJlc3BvbnNlfSBmcm9tIFwibm9kZS1mZXRjaFwiO1xuaW1wb3J0IHtVUkxTZWFyY2hQYXJhbXN9IGZyb20gXCJ1cmxcIjtcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VIYW5kbGVyPFQ+ID0gKHJlc3BvbnNlOiBSZXNwb25zZSkgPT4gUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUPj47XG5leHBvcnQgdHlwZSBFcnJvclJlc3BvbnNlSGFuZGxlcjxUPiA9IChyZXNwb25zZTogUmVzcG9uc2UpID0+IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VD4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIElSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgLyoqXG4gICAqIFNldHMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIHVzaW5nIGEga2V5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHZhbHVlIG9mIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICogQHJldHVybnMge0lSRVNUQ2xpZW50fVxuICAgKi9cbiAgd2l0aEF1dGhvcml6YXRpb24oa2V5OiBzdHJpbmcpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogQWRkcyBhIHNlZ21lbnQgdG8gdGhlIHJlcXVlc3QgdXJpXG4gICAqL1xuICB3aXRoVXJpU2VnbWVudChzZWdtZW50OiBzdHJpbmcgfCBudW1iZXIpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgYm9keSBvZiB0aGUgY2xpZW50IHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBib2R5IFRoZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgcmVxdWVzdCBib2R5IGFzIGZvcm0gZGF0YS5cbiAgICovXG4gIHdpdGhGb3JtRGF0YShib2R5OiBVUkxTZWFyY2hQYXJhbXMpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogQWRkcyBhIGhlYWRlciB0byB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIGtleSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIuXG4gICAqL1xuICB3aXRoSGVhZGVyKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvZHkgb2YgdGhlIGNsaWVudCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlcXVlc3QgYm9keSBhcyBKU09OLlxuICAgKi9cbiAgd2l0aEpTT05Cb2R5KGJvZHk6IG9iamVjdCk6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBodHRwIG1ldGhvZCBmb3IgdGhlIHJlcXVlc3RcbiAgICovXG4gIHdpdGhNZXRob2QobWV0aG9kOiBzdHJpbmcpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgdXJpIG9mIHRoZSByZXF1ZXN0XG4gICAqL1xuICB3aXRoVXJpKHVyaTogc3RyaW5nKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIEFkZHMgcGFyYW1ldGVycyB0byB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLCBtYXkgYmUgYSBzdHJpbmcsIG9iamVjdCBvciBudW1iZXIuXG4gICAqL1xuICB3aXRoUGFyYW1ldGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBTZXRzIHJlcXVlc3QncyBjcmVkZW50aWFscy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIEEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciBjcmVkZW50aWFscyB3aWxsIGJlIHNlbnQgd2l0aCB0aGUgcmVxdWVzdCBhbHdheXMsIG5ldmVyLCBvciBvbmx5IHdoZW4gc2VudCB0byBhIHNhbWUtb3JpZ2luIFVSTC5cbiAgICovXG4gIHdpdGhDcmVkZW50aWFscyh2YWx1ZTogUmVxdWVzdENyZWRlbnRpYWxzKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHJlc3BvbnNlIGhhbmRsZXIuIFRoaXMgY291bGQgZG8gcHJvY2Vzc2luZyBiZWZvcmUgdGhlIENsaWVudFJlc3BvbnNlIGlzIHJldHVybmVkIGRlcGVuZGluZyBvbiB0aGUgQVBJcyBleHBlY3RlZCByZXNwb25zZS5cbiAgICpcbiAgICogQHBhcmFtIGhhbmRsZXJcbiAgICovXG4gIHdpdGhSZXNwb25zZUhhbmRsZXIoaGFuZGxlcjogUmVzcG9uc2VIYW5kbGVyPFJUPik6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBlcnJvciByZXNwb25zZSBoYW5kbGVyLiAgRXJyb3IgcmVzcG9uc2UgaGFuZGxlcnMgaGF2ZSBhIGdlbmVyaWMgYnV0IGR1ZSB0byB0eXBlc2NyaXB0IGxpbWl0YXRpb25zLFxuICAgKiB0aGlzIHZhbHVlIHdpbGwgbm90IGJlIHByb3BhZ2F0ZWQgdG8gdGhlIFByb21pc2UgY2F0Y2ggc3RhdGVtZW50XG4gICAqIFxuICAgKiBAcGFyYW0gaGFuZGxlclxuICAgKi9cbiAgd2l0aEVycm9yUmVzcG9uc2VIYW5kbGVyKGhhbmRsZXI6IEVycm9yUmVzcG9uc2VIYW5kbGVyPEVSVD4pOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogUnVuIHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gYSBwcm9taXNlLiBUaGlzIHByb21pc2Ugd2lsbCByZXNvbHZlIGlmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWxcbiAgICogYW5kIHJlamVjdCBvdGhlcndpc2UuXG4gICAqL1xuICBnbygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJUPj47XG59XG5cbmV4cG9ydCBkZWZhdWx0IElSRVNUQ2xpZW50O1xuIl19
6573
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC50cyIsIm5vZGVfbW9kdWxlcy9ub2RlLWZldGNoL2Jyb3dzZXIuanMiLCJzcmMvQ2xpZW50UmVzcG9uc2UudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnQudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyLnRzIiwic3JjL0Z1c2lvbkF1dGhDbGllbnQudHMiLCJzcmMvSVJFU1RDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7Ozs7Ozs7Ozs7OztBQUVILDJEQUFxRDtBQUNyRCxrQkFBZSwwQkFBZ0IsQ0FBQztBQUVoQyx5REFBdUM7QUFDdkMsb0RBQWtDO0FBQ2xDLGlFQUErQztBQUMvQyx1REFBcUM7QUFDckMsb0RBQWtDO0FBQ2xDLDJEQUF5Qzs7OztBQ3hCekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6QkE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7O0FBRUg7SUFBQTtJQVFBLENBQUM7SUFIQyxzQ0FBYSxHQUFiO1FBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUN6RCxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQVJBLEFBUUMsSUFBQTs7Ozs7O0FDeEJEOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdILG1EQUE4QztBQUM5Qyx5Q0FBMkU7QUFDM0UsMkJBQXNDO0FBRXRDOzs7O0dBSUc7QUFDSDtJQVVFLDJCQUFtQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtR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QUF1QyxDQUFBO0lBQ3ZDLHlFQUFxRCxDQUFBO0lBQ3JELDZEQUF5QyxDQUFBO0lBQ3pDLHFEQUFpQyxDQUFBO0lBQ2pDLG1FQUErQyxDQUFBO0lBQy9DLDZFQUF5RCxDQUFBO0lBQ3pELCtFQUEyRCxDQUFBO0lBQzNELDZGQUF5RSxDQUFBO0lBQ3pFLGlFQUE2QyxDQUFBO0lBQzdDLG1FQUErQyxDQUFBO0lBQy9DLG1FQUErQyxDQUFBO0lBQy9DLG1FQUErQyxDQUFBO0lBQy9DLHlGQUFxRSxDQUFBO0lBQ3JFLCtEQUEyQyxDQUFBO0lBQzNDLDJEQUF1QyxDQUFBO0lBQ3ZDLGlGQUE2RCxDQUFBO0lBQzdELCtFQUEyRCxDQUFBO0lBQzNELHVGQUFtRSxDQUFBO0lBQ25FLHVEQUFtQyxDQUFBO0lBQ25DLCtEQUEyQyxDQUFBO0lBQzNDLDJEQUF1QyxDQUFBO0lBQ3ZDLG1FQUErQyxDQUFBO0lBQy9DLGlEQUE2QixDQUFBO0lBQzdCLHFFQUFpRCxDQUFBO0lBQ2pELG1FQUErQyxDQUFBO0lBQy9DLCtEQUEyQyxDQUFBO0lBQzNDLDZEQUF5QyxDQUFBO0lBQ3pDLGlFQUE2QyxDQUFBO0lBQzdDLG1FQUErQyxDQUFBO0lBQy9DLG1FQUErQyxDQUFBO0lBQy9DLG1EQUErQixDQUFBO0lBQy9CLDJEQUF1QyxDQUFBO0lBQ3ZDLHVEQUFtQyxDQUFBO0lBQ25DLHlFQUFxRCxDQUFBO0lBQ3JELHVEQUFtQyxDQUFBO0lBQ25DLGlEQUE2QixDQUFBO0lBQzdCLDJEQUF1QyxDQUFBO0lBQ3ZDLGlEQUE2QixDQUFBO0lBQzdCLCtDQUEyQixDQUFBO0lBQzNCLHFEQUFpQyxDQUFBO0lBQ2pDLG1GQUErRCxDQUFBO0lBQy9ELGlHQUE2RSxDQUFBO0lBQzdFLG1GQUErRCxDQUFBO0lBQy9ELDZEQUF5QyxDQUFBO0lBQ3pDLHFGQUFpRSxDQUFBO0lBQ2pFLHlFQUFxRCxDQUFBO0lBQ3JELHVFQUFtRCxDQUFBO0lBQ25ELDZFQUF5RCxDQUFBO0lBQ3pELHVDQUFtQixDQUFBO0lBQ25CLHFFQUFpRCxDQUFBO0lBQ2pELG1E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UUFJckM7QUE4SUQ7Ozs7R0FJRztBQUNILElBQVksU0FjWDtBQWRELFdBQVksU0FBUztJQUNuQiw0QkFBZSxDQUFBO0lBQ2YsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiwwQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQWRXLFNBQVMsR0FBVCxpQkFBUyxLQUFULGlCQUFTLFFBY3BCOzs7Ozs7QUMzOFhEOzs7Ozs7Ozs7Ozs7OztHQWNHIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IEZ1c2lvbkF1dGhDbGllbnQgZnJvbSAnLi9zcmMvRnVzaW9uQXV0aENsaWVudCdcbmV4cG9ydCBkZWZhdWx0IEZ1c2lvbkF1dGhDbGllbnQ7XG5cbmV4cG9ydCAqIGZyb20gJy4vc3JjL0Z1c2lvbkF1dGhDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvSVJFU1RDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0NsaWVudFJlc3BvbnNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0lSRVNUQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0lSRVNUQ2xpZW50QnVpbGRlcic7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciBnZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XG5cdC8vIHRoZSBvbmx5IHJlbGlhYmxlIG1lYW5zIHRvIGdldCB0aGUgZ2xvYmFsIG9iamVjdCBpc1xuXHQvLyBgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKWBcblx0Ly8gSG93ZXZlciwgdGhpcyBjYXVzZXMgQ1NQIHZpb2xhdGlvbnMgaW4gQ2hyb21lIGFwcHMuXG5cdGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cblx0aWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cblx0dGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QnKTtcbn1cblxudmFyIGdsb2JhbE9iamVjdCA9IGdldEdsb2JhbCgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBnbG9iYWxPYmplY3QuZmV0Y2g7XG5cbi8vIE5lZWRlZCBmb3IgVHlwZVNjcmlwdCBhbmQgV2VicGFjay5cbmlmIChnbG9iYWxPYmplY3QuZmV0Y2gpIHtcblx0ZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsT2JqZWN0LmZldGNoLmJpbmQoZ2xvYmFsT2JqZWN0KTtcbn1cblxuZXhwb3J0cy5IZWFkZXJzID0gZ2xvYmFsT2JqZWN0LkhlYWRlcnM7XG5leHBvcnRzLlJlcXVlc3QgPSBnbG9iYWxPYmplY3QuUmVxdWVzdDtcbmV4cG9ydHMuUmVzcG9uc2UgPSBnbG9iYWxPYmplY3QuUmVzcG9uc2U7XG4iLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGllbnRSZXNwb25zZTxUPiB7XG4gIHB1YmxpYyBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIHB1YmxpYyByZXNwb25zZTogVDtcbiAgcHVibGljIGV4Y2VwdGlvbjogRXJyb3I7XG5cbiAgd2FzU3VjY2Vzc2Z1bCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNDb2RlID49IDIwMCAmJiB0aGlzLnN0YXR1c0NvZGUgPCAzMDA7XG4gIH1cbn0iLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LTIwMjQsIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBJUkVTVENsaWVudCwgeyBFcnJvclJlc3BvbnNlSGFuZGxlciwgUmVzcG9uc2VIYW5kbGVyIH0gZnJvbSBcIi4vSVJFU1RDbGllbnRcIjtcbmltcG9ydCBDbGllbnRSZXNwb25zZSBmcm9tIFwiLi9DbGllbnRSZXNwb25zZVwiO1xuaW1wb3J0IGZldGNoLCB7IEJvZHlJbml0LCBSZXF1ZXN0Q3JlZGVudGlhbHMsIFJlc3BvbnNlIH0gZnJvbSAnbm9kZS1mZXRjaCc7XG5pbXBvcnQgeyBVUkxTZWFyY2hQYXJhbXMgfSBmcm9tIFwidXJsXCI7XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQXG4gKiBAYXV0aG9yIFR5bGVyIFNjb3R0XG4gKiBAYXV0aG9yIFRKIFBlZGVuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IGltcGxlbWVudHMgSVJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICBwdWJsaWMgYm9keTogQm9keUluaXQ7XG4gIHB1YmxpYyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHB1YmxpYyBtZXRob2Q6IHN0cmluZztcbiAgcHVibGljIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHVibGljIHVyaTogc3RyaW5nO1xuICBwdWJsaWMgY3JlZGVudGlhbHM6IFJlcXVlc3RDcmVkZW50aWFscztcbiAgcHVibGljIHJlc3BvbnNlSGFuZGxlcjogUmVzcG9uc2VIYW5kbGVyPFJUPiA9IERlZmF1bHRSRVNUQ2xpZW50LkpTT05SZXNwb25zZUhhbmRsZXI7XG4gIHB1YmxpYyBlcnJvclJlc3BvbnNlSGFuZGxlcjogRXJyb3JSZXNwb25zZUhhbmRsZXI8RVJUPiA9IERlZmF1bHRSRVNUQ2xpZW50LkVycm9ySlNPTlJlc3BvbnNlSGFuZGxlcjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaG9zdDogc3RyaW5nKSB7XG4gIH1cblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIEpTT04gZm9ybSBvZiB0aGUgcmVzcG9uc2UgdGV4dC5cbiAgICpcbiAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIEpTT05SZXNwb25zZUhhbmRsZXI8UlQ+KHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UlQ+PiB7XG4gICAgbGV0IGNsaWVudFJlc3BvbnNlID0gbmV3IENsaWVudFJlc3BvbnNlPFJUPigpO1xuXG4gICAgY2xpZW50UmVzcG9uc2Uuc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICBsZXQgdHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuICAgIGlmICh0eXBlICYmIHR5cGUuc3RhcnRzV2l0aChcImFwcGxpY2F0aW9uL2pzb25cIikpIHtcbiAgICAgIGNsaWVudFJlc3BvbnNlLnJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGllbnRSZXNwb25zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgSlNPTiBmb3JtIG9mIHRoZSByZXNwb25zZSB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVzcG9uc2VcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgRXJyb3JKU09OUmVzcG9uc2VIYW5kbGVyPEVSVD4ocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFUlQ+PiB7XG4gICAgbGV0IGNsaWVudFJlc3BvbnNlID0gbmV3IENsaWVudFJlc3BvbnNlPEVSVD4oKTtcblxuICAgIGNsaWVudFJlc3BvbnNlLnN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgbGV0IHR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgICBpZiAodHlwZSAmJiB0eXBlLnN0YXJ0c1dpdGgoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSB7XG4gICAgICBjbGllbnRSZXNwb25zZS5leGNlcHRpb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaWVudFJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIHVzaW5nIGEga2V5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHZhbHVlIG9mIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICogQHJldHVybnMge0RlZmF1bHRSRVNUQ2xpZW50fVxuICAgKi9cbiAgd2l0aEF1dGhvcml6YXRpb24oa2V5OiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy53aXRoSGVhZGVyKCdBdXRob3JpemF0aW9uJywga2V5KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc2VnbWVudCB0byB0aGUgcmVxdWVzdCB1cmlcbiAgICovXG4gIHdpdGhVcmlTZWdtZW50KHNlZ21lbnQ6IHN0cmluZyB8IG51bWJlcik6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICBpZiAoc2VnbWVudCA9PT0gbnVsbCB8fCBzZWdtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodGhpcy51cmkgPT09IG51bGwpIHtcbiAgICAgIHRoaXMudXJpID0gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVyaS5jaGFyQXQodGhpcy51cmkubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgdGhpcy51cmkgKz0gJy8nO1xuICAgIH1cbiAgICB0aGlzLnVyaSA9IHRoaXMudXJpICsgc2VnbWVudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZ1bGwgdXJsICsgcGFyYW1ldGVyIGxpc3RcbiAgICovXG4gIGdldEZ1bGxVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdCArIHRoaXMudXJpICsgdGhpcy5nZXRRdWVyeVN0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvZHkgb2YgdGhlIGNsaWVudCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlcXVlc3QgYm9keSBhcyBmb3JtIGRhdGEuXG4gICAqL1xuICB3aXRoRm9ybURhdGEoYm9keTogVVJMU2VhcmNoUGFyYW1zKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIGNvbnN0IGJvZHkyID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChib2R5KSB7XG4gICAgICBib2R5LmZvckVhY2goKHZhbHVlLCBuYW1lLCBzZWFyY2hQYXJhbXMpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUgIT0gXCJudWxsXCIgJiYgdmFsdWUgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGJvZHkyLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYm9keSA9IGJvZHkyO1xuICAgIH1cbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBoZWFkZXIgdG8gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgVGhlIG5hbWUgb2YgdGhlIGhlYWRlci5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyLlxuICAgKi9cbiAgd2l0aEhlYWRlcihrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvZHkgb2YgdGhlIGNsaWVudCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlcXVlc3QgYm9keSBhcyBKU09OLlxuICAgKi9cbiAgd2l0aEpTT05Cb2R5KGJvZHk6IG9iamVjdCk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICB0aGlzLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgLy8gT21pdCB0aGUgQ29udGVudC1MZW5ndGgsIHRoaXMgaXMgc2V0IGF1dG8tbWFnaWNhbGx5IGJ5IHRoZSByZXF1ZXN0IGxpYnJhcnlcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBodHRwIG1ldGhvZCBmb3IgdGhlIHJlcXVlc3RcbiAgICovXG4gIHdpdGhNZXRob2QobWV0aG9kOiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdXJpIG9mIHRoZSByZXF1ZXN0XG4gICAqL1xuICB3aXRoVXJpKHVyaTogc3RyaW5nKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMudXJpID0gdXJpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcGFyYW1ldGVycyB0byB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLCBtYXkgYmUgYSBzdHJpbmcsIG9iamVjdCBvciBudW1iZXIuXG4gICAqL1xuICB3aXRoUGFyYW1ldGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLnBhcmFtZXRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHJlcXVlc3QncyBjcmVkZW50aWFscy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIEEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciBjcmVkZW50aWFscyB3aWxsIGJlIHNlbnQgd2l0aCB0aGUgcmVxdWVzdCBhbHdheXMsIG5ldmVyLCBvciBvbmx5IHdoZW4gc2VudCB0byBhIHNhbWUtb3JpZ2luIFVSTC5cbiAgICovXG4gIHdpdGhDcmVkZW50aWFscyh2YWx1ZTogUmVxdWVzdENyZWRlbnRpYWxzKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMuY3JlZGVudGlhbHMgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdpdGhSZXNwb25zZUhhbmRsZXIoaGFuZGxlcjogUmVzcG9uc2VIYW5kbGVyPFJUPik6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLnJlc3BvbnNlSGFuZGxlciA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aXRoRXJyb3JSZXNwb25zZUhhbmRsZXIoaGFuZGxlcjogRXJyb3JSZXNwb25zZUhhbmRsZXI8RVJUPik6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmVycm9yUmVzcG9uc2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIHJlcXVlc3QgYW5kIHJldHVybiBhIHByb21pc2UuIFRoaXMgcHJvbWlzZSB3aWxsIHJlc29sdmUgaWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bFxuICAgKiBhbmQgcmVqZWN0IG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIGdvKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UlQ+PiB7XG4gICAgY29uc3QgY2xpZW50UmVzcG9uc2UgPSBuZXcgQ2xpZW50UmVzcG9uc2U8UlQ+KCk7XG5cbiAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIHRoaXMuZ2V0RnVsbFVybCgpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICBib2R5OiB0aGlzLmJvZHkgYXMgQm9keUluaXQsXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIChDcmVkZW50aWFscyBhcmUgbm90IHN1cHBvcnRlZCBvbiBOb2RlSlMpXG4gICAgICAgICAgICBjcmVkZW50aWFsczogdGhpcy5jcmVkZW50aWFscyxcbiAgICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlc3BvbnNlSGFuZGxlcihyZXNwb25zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBhd2FpdCB0aGlzLmVycm9yUmVzcG9uc2VIYW5kbGVyKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2xpZW50UmVzcG9uc2UpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7IC8vIERvbid0IGNhdGNoIGEgQ2xpZW50UmVzcG9uc2UgKHdlIHdhbnQgdGhpcyB0byB0cmlnZ2VyIHRoZSBjYXRjaCBvZiB0aGUgcHJvbWlzZVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2UpIHsgLy8gVHJ5IHRvIHJlY292ZXIgdGhlIHJlc3BvbnNlIHN0YXR1c1xuICAgICAgICBjbGllbnRSZXNwb25zZS5zdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgfVxuICAgICAgY2xpZW50UmVzcG9uc2UuZXhjZXB0aW9uID0gZXJyb3I7XG5cbiAgICAgIHRocm93IGNsaWVudFJlc3BvbnNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UXVlcnlTdHJpbmcoKSB7XG4gICAgbGV0IHF1ZXJ5U3RyaW5nID0gJyc7XG4gICAgY29uc3QgYXBwZW5kUGFyYW0gPSAoa2V5OiBzdHJpbmcsIHBhcmFtOiBzdHJpbmcpID0+IHtcbiAgICAgIHF1ZXJ5U3RyaW5nICs9IChxdWVyeVN0cmluZy5sZW5ndGggPT09IDApID8gJz8nIDogJyYnO1xuICAgICAgcXVlcnlTdHJpbmcgKz0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQocGFyYW0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5wYXJhbWV0ZXJzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGFyYW1ldGVyc1trZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2godmFsID0+IGFwcGVuZFBhcmFtKGtleSwgdmFsKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwcGVuZFBhcmFtKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gIH1cbn1cbiIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTksIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBJUkVTVENsaWVudCBmcm9tIFwiLi9JUkVTVENsaWVudFwiO1xuaW1wb3J0IERlZmF1bHRSRVNUQ2xpZW50IGZyb20gXCIuL0RlZmF1bHRSRVNUQ2xpZW50XCI7XG5pbXBvcnQgSVJFU1RDbGllbnRCdWlsZGVyIGZyb20gXCIuL0lSRVNUQ2xpZW50QnVpbGRlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIgaW1wbGVtZW50cyBJUkVTVENsaWVudEJ1aWxkZXIge1xuICBidWlsZDxSVCwgRVJUPihob3N0OiBzdHJpbmcpOiBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgcmV0dXJuIG5ldyBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPihob3N0KTtcbiAgfVxufVxuIiwiLypcbiogQ29weXJpZ2h0IChjKSAyMDE5LTIwMjMsIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbipcbiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbipcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IElSRVNUQ2xpZW50IGZyb20gXCIuL0lSRVNUQ2xpZW50XCJcbmltcG9ydCBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIgZnJvbSBcIi4vRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyXCI7XG5pbXBvcnQgSVJFU1RDbGllbnRCdWlsZGVyIGZyb20gXCIuL0lSRVNUQ2xpZW50QnVpbGRlclwiO1xuaW1wb3J0IENsaWVudFJlc3BvbnNlIGZyb20gXCIuL0NsaWVudFJlc3BvbnNlXCI7XG5pbXBvcnQge1JlcXVlc3RDcmVkZW50aWFsc30gZnJvbSBcIm5vZGUtZmV0Y2hcIjtcbmltcG9ydCB7VVJMU2VhcmNoUGFyYW1zfSBmcm9tIFwidXJsXCI7XG5cbmV4cG9ydCBjbGFzcyBGdXNpb25BdXRoQ2xpZW50IHtcbiAgcHVibGljIGNsaWVudEJ1aWxkZXI6IElSRVNUQ2xpZW50QnVpbGRlciA9IG5ldyBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIoKTtcbiAgcHVibGljIGNyZWRlbnRpYWxzOiBSZXF1ZXN0Q3JlZGVudGlhbHM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFwaUtleTogc3RyaW5nLFxuICAgIHB1YmxpYyBob3N0OiBzdHJpbmcsXG4gICAgcHVibGljIHRlbmFudElkPzogc3RyaW5nLFxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZW5hbnQgaWQsIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgWC1GdXNpb25BdXRoLVRlbmFudElkIGhlYWRlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSB0ZW5hbnRJZCBUaGUgdmFsdWUgb2YgdGhlIFgtRnVzaW9uQXV0aC1UZW5hbnRJZCBoZWFkZXIuXG4gICAqIEByZXR1cm5zIHtGdXNpb25BdXRoQ2xpZW50fVxuICAgKi9cbiAgc2V0VGVuYW50SWQodGVuYW50SWQ6IHN0cmluZyB8IG51bGwpOiBGdXNpb25BdXRoQ2xpZW50IHtcbiAgICB0aGlzLnRlbmFudElkID0gdGVuYW50SWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB3aGV0aGVyIGFuZCBob3cgY29va2llcyB3aWxsIGJlIHNlbnQgd2l0aCBlYWNoIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBhbmQgaG93IGNvb2tpZXMgd2lsbCBiZSBzZW50LlxuICAgKiBAcmV0dXJucyB7RnVzaW9uQXV0aENsaWVudH1cbiAgICovXG4gIHNldFJlcXVlc3RDcmVkZW50aWFscyh2YWx1ZTogUmVxdWVzdENyZWRlbnRpYWxzKTogRnVzaW9uQXV0aENsaWVudCB7XG4gICAgdGhpcy5jcmVkZW50aWFscyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGFuIGFjdGlvbiBvbiBhIHVzZXIuIFRoZSB1c2VyIGJlaW5nIGFjdGlvbmVkIGlzIGNhbGxlZCB0aGUgXCJhY3Rpb25lZVwiIGFuZCB0aGUgdXNlciB0YWtpbmcgdGhlIGFjdGlvbiBpcyBjYWxsZWQgdGhlXG4gICAqIFwiYWN0aW9uZXJcIi4gQm90aCB1c2VyIGlkcyBhcmUgcmVxdWlyZWQgaW4gdGhlIHJlcXVlc3Qgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge0FjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIGFjdGlvbiByZXF1ZXN0IHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWN0aW9uIGJlaW5nIHRha2VuIGluY2x1ZGluZ1xuICAgKiAgICB0aGUgSWQgb2YgdGhlIGFjdGlvbiwgYW55IG9wdGlvbnMgYW5kIHRoZSBkdXJhdGlvbiAoaWYgYXBwbGljYWJsZSkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBhY3Rpb25Vc2VyKHJlcXVlc3Q6IEFjdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZXMgdGhlIEZ1c2lvbkF1dGggUmVhY3RvciB1c2luZyBhIGxpY2Vuc2UgSWQgYW5kIG9wdGlvbmFsbHkgYSBsaWNlbnNlIHRleHQgKGZvciBhaXItZ2FwcGVkIGRlcGxveW1lbnRzKVxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0b3JSZXF1ZXN0fSByZXF1ZXN0IEFuIG9wdGlvbmFsIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgbGljZW5zZSB0ZXh0IHRvIGFjdGl2YXRlIFJlYWN0b3IgKHVzZWZ1bCBmb3IgYWlyLWdhcCBkZXBsb3ltZW50cyBvZiBGdXNpb25BdXRoKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgYWN0aXZhdGVSZWFjdG9yKHJlcXVlc3Q6IFJlYWN0b3JSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZWFjdG9yJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHVzZXIgdG8gYW4gZXhpc3RpbmcgZmFtaWx5LiBUaGUgZmFtaWx5IElkIG11c3QgYmUgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIFRoZSBJZCBvZiB0aGUgZmFtaWx5LlxuICAgKiBAcGFyYW0ge0ZhbWlseVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGRldGVybWluZSB3aGljaCB1c2VyIHRvIGFkZCB0byB0aGUgZmFtaWx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+fVxuICAgKi9cbiAgYWRkVXNlclRvRmFtaWx5KGZhbWlseUlkOiBVVUlELCByZXF1ZXN0OiBGYW1pbHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGYW1pbHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZhbWlseUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcHJvdmUgYSBkZXZpY2UgZ3JhbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIHdpbGwgYmUgcmVxdWlyZWQgaWYgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiBUaGUgYWNjZXNzIHRva2VuIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxEZXZpY2VBcHByb3ZhbFJlc3BvbnNlPj59XG4gICAqL1xuICBhcHByb3ZlRGV2aWNlKGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIHVzZXJfY29kZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxEZXZpY2VBcHByb3ZhbFJlc3BvbnNlPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgndG9rZW4nLCB0b2tlbik7XG4gICAgYm9keS5hcHBlbmQoJ3VzZXJfY29kZScsIHVzZXJfY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RGV2aWNlQXBwcm92YWxSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2RldmljZS9hcHByb3ZlJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyB0aGUgdXNlciBhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYWN0aW9uSWQgVGhlIGFjdGlvbiBJZCBvZiB0aGUgYWN0aW9uIHRvIGNhbmNlbC5cbiAgICogQHBhcmFtIHtBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSBhY3Rpb24gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2FuY2VsbGF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgY2FuY2VsQWN0aW9uKGFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgYSB1c2VyJ3MgcGFzc3dvcmQgdXNpbmcgdGhlIGNoYW5nZSBwYXNzd29yZCBJZC4gVGhpcyB1c3VhbGx5IG9jY3VycyBhZnRlciBhbiBlbWFpbCBoYXMgYmVlbiBzZW50IHRvIHRoZSB1c2VyXG4gICAqIGFuZCB0aGV5IGNsaWNrZWQgb24gYSBsaW5rIHRvIHJlc2V0IHRoZWlyIHBhc3N3b3JkLlxuICAgKiBcbiAgICogQXMgb2YgdmVyc2lvbiAxLjMyLjIsIHByZWZlciBzZW5kaW5nIHRoZSBjaGFuZ2VQYXNzd29yZElkIGluIHRoZSByZXF1ZXN0IGJvZHkuIFRvIGRvIHRoaXMsIG9taXQgdGhlIGZpcnN0IHBhcmFtZXRlciwgYW5kIHNldFxuICAgKiB0aGUgdmFsdWUgaW4gdGhlIHJlcXVlc3QgYm9keS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5nZVBhc3N3b3JkSWQgVGhlIGNoYW5nZSBwYXNzd29yZCBJZCB1c2VkIHRvIGZpbmQgdGhlIHVzZXIuIFRoaXMgdmFsdWUgaXMgZ2VuZXJhdGVkIGJ5IEZ1c2lvbkF1dGggb25jZSB0aGUgY2hhbmdlIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZC5cbiAgICogQHBhcmFtIHtDaGFuZ2VQYXNzd29yZFJlcXVlc3R9IHJlcXVlc3QgVGhlIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNoYW5nZSB0aGUgcGFzc3dvcmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENoYW5nZVBhc3N3b3JkUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNoYW5nZVBhc3N3b3JkKGNoYW5nZVBhc3N3b3JkSWQ6IHN0cmluZywgcmVxdWVzdDogQ2hhbmdlUGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPENoYW5nZVBhc3N3b3JkUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjaGFuZ2VQYXNzd29yZElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIGEgdXNlcidzIHBhc3N3b3JkIHVzaW5nIHRoZWlyIGlkZW50aXR5IChsb2dpbklkIGFuZCBwYXNzd29yZCkuIFVzaW5nIGEgbG9naW5JZCBpbnN0ZWFkIG9mIHRoZSBjaGFuZ2VQYXNzd29yZElkXG4gICAqIGJ5cGFzc2VzIHRoZSBlbWFpbCB2ZXJpZmljYXRpb24gYW5kIGFsbG93cyBhIHBhc3N3b3JkIHRvIGJlIGNoYW5nZWQgZGlyZWN0bHkgd2l0aG91dCBmaXJzdCBjYWxsaW5nIHRoZSAjZm9yZ290UGFzc3dvcmRcbiAgICogbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0ge0NoYW5nZVBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hhbmdlUGFzc3dvcmRCeUlkZW50aXR5KHJlcXVlc3Q6IENoYW5nZVBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgVG9rZW4gYnkgY29tcGxldGluZyBhIFR3by1GYWN0b3IgU3RlcC1VcCBhdXRoZW50aWNhdGlvbi5cbiAgICogXG4gICAqIEFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDAwIHdpdGggYSBnZW5lcmFsIGVycm9yIGNvZGUgb2YgW1RydXN0VG9rZW5SZXF1aXJlZF0gaW5kaWNhdGVzIHRoYXQgYSBUcnVzdCBUb2tlbiBpcyByZXF1aXJlZCB0byBtYWtlIGEgUE9TVCByZXF1ZXN0IHRvIHRoaXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgY2hhbmdlIHBhc3N3b3JkIElkIHVzZWQgdG8gZmluZCB0aGUgdXNlci4gVGhpcyB2YWx1ZSBpcyBnZW5lcmF0ZWQgYnkgRnVzaW9uQXV0aCBvbmNlIHRoZSBjaGFuZ2UgcGFzc3dvcmQgd29ya2Zsb3cgaGFzIGJlZW4gaW5pdGlhdGVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGVja0NoYW5nZVBhc3N3b3JkVXNpbmdJZChjaGFuZ2VQYXNzd29yZElkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNoYW5nZVBhc3N3b3JkSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIElkIGluIG9yZGVyIHRvIGNvbXBsZXRlIGEgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QuXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBlbmFibGVkIFR3by1GYWN0b3IgYXV0aGVudGljYXRpb24sIGJlZm9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBDaGFuZ2UgUGFzc3dvcmQgQVBJIHRvIGNoYW5nZVxuICAgKiB5b3VyIHBhc3N3b3JkLCB5b3UgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nSldUKGVuY29kZWRKV1Q6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBsb2dpbklkIG9mIHRoZSBVc2VyIHRoYXQgeW91IGludGVuZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nTG9naW5JZChsb2dpbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJuYW1lJywgbG9naW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIENsaWVudCBDcmVkZW50aWFscyBncmFudCByZXF1ZXN0IHRvIG9idGFpbiBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEVudGl0eSBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLlxuICAgKiAgICBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIEJhc2ljIEF1dGhvcml6YXRpb24gaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0IHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiBCYXNpYyBBdXRob3JpemF0aW9uIGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlIChPcHRpb25hbCkgVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGljaCB0YXJnZXQgZW50aXR5IHlvdSBhcmUgcmVxdWVzdGluZyBhY2Nlc3MuIFRvIHJlcXVlc3QgYWNjZXNzIHRvIGFuIGVudGl0eSwgdXNlIHRoZSBmb3JtYXQgdGFyZ2V0LWVudGl0eTombHQ7dGFyZ2V0LWVudGl0eS1pZCZndDs6Jmx0O3JvbGVzJmd0Oy4gUm9sZXMgYXJlIGFuIG9wdGlvbmFsIGNvbW1hIHNlcGFyYXRlZCBsaXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgY2xpZW50Q3JlZGVudGlhbHNHcmFudChjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCBzY29wZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAnY2xpZW50X2NyZWRlbnRpYWxzJyk7XG4gICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgc2NvcGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNvbW1lbnQgdG8gdGhlIHVzZXIncyBhY2NvdW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1VzZXJDb21tZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB1c2VyIGNvbW1lbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb21tZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNvbW1lbnRPblVzZXIocmVxdWVzdDogVXNlckNvbW1lbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29tbWVudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb21tZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbW1lbnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255IGJ5IHZhbGlkYXRpbmcgdGhlIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBwcmV2aW91c2x5IGdlbmVyYXRlZCBjaGFsbGVuZ2Ugd2l0aG91dCBsb2dnaW5nIHRoZSB1c2VyIGluXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViQXV0aG5Mb2dpblJlcXVlc3R9IHJlcXVlc3QgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBuZWNlc3NhcnkgZm9yIGNvbXBsZXRpbmcgdGhlIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuQXNzZXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNvbXBsZXRlV2ViQXV0aG5Bc3NlcnRpb24ocmVxdWVzdDogV2ViQXV0aG5Mb2dpblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuQXNzZXJ0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8V2ViQXV0aG5Bc3NlcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuL2Fzc2VydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbnkgYnkgdmFsaWRhdGluZyB0aGUgc2lnbmF0dXJlIGFnYWluc3QgdGhlIHByZXZpb3VzbHkgZ2VuZXJhdGVkIGNoYWxsZW5nZSBhbmQgdGhlbiBsb2dpbiB0aGUgdXNlciBpblxuICAgKlxuICAgKiBAcGFyYW0ge1dlYkF1dGhuTG9naW5SZXF1ZXN0fSByZXF1ZXN0IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgbmVjZXNzYXJ5IGZvciBjb21wbGV0aW5nIHRoZSBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICBjb21wbGV0ZVdlYkF1dGhuTG9naW4ocmVxdWVzdDogV2ViQXV0aG5Mb2dpblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgYSBXZWJBdXRobiByZWdpc3RyYXRpb24gY2VyZW1vbnkgYnkgdmFsaWRhdGluZyB0aGUgY2xpZW50IHJlcXVlc3QgYW5kIHNhdmluZyB0aGUgbmV3IGNyZWRlbnRpYWxcbiAgICpcbiAgICogQHBhcmFtIHtXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXF1ZXN0fSByZXF1ZXN0IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgbmVjZXNzYXJ5IGZvciBjb21wbGV0aW5nIHRoZSByZWdpc3RyYXRpb24gY2VyZW1vbnlcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5SZWdpc3RlckNvbXBsZXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNvbXBsZXRlV2ViQXV0aG5SZWdpc3RyYXRpb24ocmVxdWVzdDogV2ViQXV0aG5SZWdpc3RlckNvbXBsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5SZWdpc3RlckNvbXBsZXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViQXV0aG5SZWdpc3RlckNvbXBsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9yZWdpc3Rlci9jb21wbGV0ZScpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gQVBJIGtleS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSB1bmlxdWUgSWQgZm9yIHRoZSBrZXksIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIGFuIEFQSSBrZXkgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aXRoIGVxdWFsIG9yIGxlc3NlciBhdXRob3JpdHkuIEFuIEFQSSBrZXkgY2Fubm90IGNyZWF0ZSBhbm90aGVyIEFQSSBrZXkgdW5sZXNzIGl0IGlzIGdyYW50ZWQgXG4gICAqIHRvIHRoYXQgQVBJIGtleS5cbiAgICogXG4gICAqIElmIGFuIEFQSSBrZXkgaXMgbG9ja2VkIHRvIGEgdGVuYW50LCBpdCBjYW4gb25seSBjcmVhdGUgQVBJIEtleXMgZm9yIHRoYXQgc2FtZSB0ZW5hbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIElkIG9mIHRoZSBBUEkga2V5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIElkIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0FQSUtleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY3JlYXRlIHRoZSBBUElLZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVBUElLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEFQSUtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFQSUtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhcHBsaWNhdGlvbi4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBhcHBsaWNhdGlvbiwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIElkIHRvIHVzZSBmb3IgdGhlIGFwcGxpY2F0aW9uLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGFwcGxpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcm9sZSBmb3IgYW4gYXBwbGljYXRpb24uIFlvdSBtdXN0IHNwZWNpZnkgdGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB5b3UgYXJlIGNyZWF0aW5nIHRoZSByb2xlIGZvci5cbiAgICogWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSByb2xlIGluc2lkZSB0aGUgQXBwbGljYXRpb25Sb2xlIG9iamVjdCBpdHNlbGYsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGNyZWF0ZSB0aGUgcm9sZSBvbi5cbiAgICogQHBhcmFtIHtVVUlEfSByb2xlSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHJvbGUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgYXBwbGljYXRpb24gcm9sZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQXBwbGljYXRpb25Sb2xlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJvbGVJZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJyb2xlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChyb2xlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXVkaXQgbG9nIHdpdGggdGhlIG1lc3NhZ2UgYW5kIHVzZXIgbmFtZSAodXN1YWxseSBhbiBlbWFpbCkuIEF1ZGl0IGxvZ3Mgc2hvdWxkIGJlIHdyaXR0ZW4gYW55dGltZSB5b3VcbiAgICogbWFrZSBjaGFuZ2VzIHRvIHRoZSBGdXNpb25BdXRoIGRhdGFiYXNlLiBXaGVuIHVzaW5nIHRoZSBGdXNpb25BdXRoIEFwcCB3ZWIgaW50ZXJmYWNlLCBhbnkgY2hhbmdlcyBhcmUgYXV0b21hdGljYWxseVxuICAgKiB3cml0dGVuIHRvIHRoZSBhdWRpdCBsb2cuIEhvd2V2ZXIsIGlmIHlvdSBhcmUgYWNjZXNzaW5nIHRoZSBBUEksIHlvdSBtdXN0IHdyaXRlIHRoZSBhdWRpdCBsb2dzIHlvdXJzZWxmLlxuICAgKlxuICAgKiBAcGFyYW0ge0F1ZGl0TG9nUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBhdWRpdCBsb2cgZW50cnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUF1ZGl0TG9nKHJlcXVlc3Q6IEF1ZGl0TG9nUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXVkaXRMb2dSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBdWRpdExvZ1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2F1ZGl0LWxvZycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb25uZWN0b3IuICBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGNvbm5lY3RvciwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25uZWN0b3JJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGNvbm5lY3Rvci4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0Nvbm5lY3RvclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgY29ubmVjdG9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQ29ubmVjdG9yKGNvbm5lY3RvcklkOiBVVUlELCByZXF1ZXN0OiBDb25uZWN0b3JSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25uZWN0b3JSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25uZWN0b3JJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVzZXIgY29uc2VudCB0eXBlLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGNvbnNlbnQgdHlwZSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBjb25zZW50LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7Q29uc2VudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgY29uc2VudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVDb25zZW50KGNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlbWFpbCB0ZW1wbGF0ZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB0ZW1wbGF0ZSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB0ZW1wbGF0ZS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0VtYWlsVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGVtYWlsIHRlbXBsYXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBFbWFpbFRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVtYWlsVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFbnRpdHkuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgRW50aXR5LiBJZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgRW50aXR5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RW50aXR5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBFbnRpdHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVFbnRpdHkoZW50aXR5SWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgRW50aXR5IFR5cGUuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgRW50aXR5IFR5cGUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgRW50aXR5IFR5cGUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBFbnRpdHkgVHlwZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGVybWlzc2lvbiBmb3IgYW4gZW50aXR5IHR5cGUuIFlvdSBtdXN0IHNwZWNpZnkgdGhlIElkIG9mIHRoZSBlbnRpdHkgdHlwZSB5b3UgYXJlIGNyZWF0aW5nIHRoZSBwZXJtaXNzaW9uIGZvci5cbiAgICogWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBwZXJtaXNzaW9uIGluc2lkZSB0aGUgRW50aXR5VHlwZVBlcm1pc3Npb24gb2JqZWN0IGl0c2VsZiwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBlbnRpdHkgdHlwZSB0byBjcmVhdGUgdGhlIHBlcm1pc3Npb24gb24uXG4gICAqIEBwYXJhbSB7VVVJRH0gcGVybWlzc2lvbklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBwZXJtaXNzaW9uLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgcGVybWlzc2lvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVFbnRpdHlUeXBlUGVybWlzc2lvbihlbnRpdHlUeXBlSWQ6IFVVSUQsIHBlcm1pc3Npb25JZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInBlcm1pc3Npb25cIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHBlcm1pc3Npb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZhbWlseSB3aXRoIHRoZSB1c2VyIElkIGluIHRoZSByZXF1ZXN0IGFzIHRoZSBvd25lciBhbmQgc29sZSBtZW1iZXIgb2YgdGhlIGZhbWlseS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZVxuICAgKiBmYW1pbHksIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmFtaWx5SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBmYW1pbHkuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtGYW1pbHlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGZhbWlseS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUZhbWlseShmYW1pbHlJZDogVVVJRCwgcmVxdWVzdDogRmFtaWx5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RmFtaWx5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmYW1pbHlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZvcm0uICBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGZvcm0sIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZm9ybUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgZm9ybS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0Zvcm1SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGZvcm0uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRm9ybShmb3JtSWQ6IFVVSUQsIHJlcXVlc3Q6IEZvcm1SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmb3JtSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb3JtIGZpZWxkLiAgWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBmb3JtLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZpZWxkSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBmb3JtIGZpZWxkLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7Rm9ybUZpZWxkUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBmb3JtIGZpZWxkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRm9ybUZpZWxkKGZpZWxkSWQ6IFVVSUQsIHJlcXVlc3Q6IEZvcm1GaWVsZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1GaWVsZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybS9maWVsZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmaWVsZElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZ3JvdXAuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgZ3JvdXAsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZ3JvdXBJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGdyb3VwLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7R3JvdXBSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGdyb3VwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVHcm91cChncm91cElkOiBVVUlELCByZXF1ZXN0OiBHcm91cFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGdyb3VwSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtZW1iZXIgaW4gYSBncm91cC5cbiAgICpcbiAgICogQHBhcmFtIHtNZW1iZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGdyb3VwIG1lbWJlcihzKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVtYmVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUdyb3VwTWVtYmVycyhyZXF1ZXN0OiBNZW1iZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZW1iZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZW1iZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwL21lbWJlcicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gSVAgQWNjZXNzIENvbnRyb2wgTGlzdC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgb24gdGhpcyBjcmVhdGUgcmVxdWVzdCwgaWYgb25lIGlzIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYWNjZXNzQ29udHJvbExpc3RJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3QuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUlQQWNjZXNzQ29udHJvbExpc3QoYWNjZXNzQ29udHJvbExpc3RJZDogVVVJRCwgcmVxdWVzdDogSVBBY2Nlc3NDb250cm9sTGlzdFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pcC1hY2wnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYWNjZXNzQ29udHJvbExpc3RJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpZGVudGl0eSBwcm92aWRlci4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBpZGVudGl0eSBwcm92aWRlciwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlSWRlbnRpdHlQcm92aWRlcihpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgTGFtYmRhLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGxhbWJkYSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBsYW1iZGFJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGxhbWJkYS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0xhbWJkYVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbGFtYmRhLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlTGFtYmRhKGxhbWJkYUlkOiBVVUlELCByZXF1ZXN0OiBMYW1iZGFSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBtZXNzYWdlIHRlbXBsYXRlLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHRlbXBsYXRlLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NhZ2VUZW1wbGF0ZUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdGVtcGxhdGUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lc3NhZ2UgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVNZXNzYWdlVGVtcGxhdGUobWVzc2FnZVRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzYWdlVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG1lc3Nlbmdlci4gIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgbWVzc2VuZ2VyLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NlbmdlcklkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgbWVzc2VuZ2VyLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7TWVzc2VuZ2VyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNzZW5nZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVNZXNzZW5nZXIobWVzc2VuZ2VySWQ6IFVVSUQsIHJlcXVlc3Q6IE1lc3NlbmdlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NlbmdlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NlbmdlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGN1c3RvbSBPQXV0aCBzY29wZSBmb3IgYW4gYXBwbGljYXRpb24uIFlvdSBtdXN0IHNwZWNpZnkgdGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB5b3UgYXJlIGNyZWF0aW5nIHRoZSBzY29wZSBmb3IuXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgT0F1dGggc2NvcGUgb24gdGhlIFVSTCwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gY3JlYXRlIHRoZSBPQXV0aCBzY29wZSBvbi5cbiAgICogQHBhcmFtIHtVVUlEfSBzY29wZUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBPQXV0aCBzY29wZS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uT0F1dGhTY29wZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgT0F1dGggT0F1dGggc2NvcGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVPQXV0aFNjb3BlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHNjb3BlSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwic2NvcGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHNjb3BlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZW5hbnQuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgdGVuYW50LCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdGVuYW50LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VGVuYW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZW5hbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVUZW5hbnQodGVuYW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFRlbmFudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRlbmFudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgVGhlbWUuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgdGhlbWUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGhlbWVJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHRoZW1lLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VGhlbWVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHRoZW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVUaGVtZSh0aGVtZUlkOiBVVUlELCByZXF1ZXN0OiBUaGVtZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRoZW1lSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1c2VyLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHVzZXIsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdXNlci4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1VzZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVXNlcih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1c2VyIGFjdGlvbi4gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHRha2VuIG9uIGEgdXNlciB1bnRpbCB0aGlzIGNhbGwgc3VjY2Vzc2Z1bGx5IHJldHVybnMuIEFueXRpbWUgYWZ0ZXJcbiAgICogdGhhdCB0aGUgdXNlciBhY3Rpb24gY2FuIGJlIGFwcGxpZWQgdG8gYW55IHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdXNlciBhY3Rpb24uIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtVc2VyQWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB1c2VyIGFjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCwgcmVxdWVzdDogVXNlckFjdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1c2VyIHJlYXNvbi4gVGhpcyB1c2VyIGFjdGlvbiByZWFzb24gY2Fubm90IGJlIHVzZWQgd2hlbiBhY3Rpb25pbmcgYSB1c2VyIHVudGlsIHRoaXMgY2FsbCBjb21wbGV0ZXNcbiAgICogc3VjY2Vzc2Z1bGx5LiBBbnl0aW1lIGFmdGVyIHRoYXQgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiBjYW4gYmUgdXNlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB1c2VyIGFjdGlvbiByZWFzb24uIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtVc2VyQWN0aW9uUmVhc29uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB1c2VyIGFjdGlvbiByZWFzb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVXNlckFjdGlvblJlYXNvbih1c2VyQWN0aW9uUmVhc29uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZWFzb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25SZWFzb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHNpbmdsZSBVc2VyIGNvbnNlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckNvbnNlbnRJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIFVzZXIgY29uc2VudC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1VzZXJDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNvbnNlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXJDb25zZW50KHVzZXJDb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJDb25zZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJDb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpbmsgYW4gZXh0ZXJuYWwgdXNlciBmcm9tIGEgM3JkIHBhcnR5IGlkZW50aXR5IHByb3ZpZGVyIHRvIGEgRnVzaW9uQXV0aCB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJMaW5rUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gbGluayB0aGUgRnVzaW9uQXV0aCB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVVc2VyTGluayhyZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyTGlua1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xpbmsnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgd2ViaG9vay4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB3ZWJob29rLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHdlYmhvb2tJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHdlYmhvb2suIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtXZWJob29rUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVdlYmhvb2sod2ViaG9va0lkOiBVVUlELCByZXF1ZXN0OiBXZWJob29rUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0lkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgYXBwbGljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlYWN0aXZhdGVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWFjdGl2YXRlUmVhY3RvcigpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZWFjdG9yJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWFjdGl2YXRlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgdXNlciBhY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSB1c2VycyB3aXRoIHRoZSBnaXZlbiBpZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdXNlcklkcyBUaGUgaWRzIG9mIHRoZSB1c2VycyB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBkZWFjdGl2YXRlVXNlcnNCeUlkcywgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBkZWFjdGl2YXRlVXNlcnModXNlcklkczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJEZWxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYnVsaycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWRzKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZHJ5UnVuJywgZmFsc2UpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgZmFsc2UpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSB1c2VycyB3aXRoIHRoZSBnaXZlbiBpZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdXNlcklkcyBUaGUgaWRzIG9mIHRoZSB1c2VycyB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGRlYWN0aXZhdGVVc2Vyc0J5SWRzKHVzZXJJZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyRGVsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2J1bGsnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkcylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2RyeVJ1bicsIGZhbHNlKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaGFyZERlbGV0ZScsIGZhbHNlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBBUEkga2V5IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBBUEkga2V5IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlQVBJS2V5KGtleUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXJkIGRlbGV0ZXMgYW4gYXBwbGljYXRpb24uIFRoaXMgaXMgYSBkYW5nZXJvdXMgb3BlcmF0aW9uIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbW9zdCBjaXJjdW1zdGFuY2VzLiBUaGlzIHdpbGxcbiAgICogZGVsZXRlIHRoZSBhcHBsaWNhdGlvbiwgYW55IHJlZ2lzdHJhdGlvbnMgZm9yIHRoYXQgYXBwbGljYXRpb24sIG1ldHJpY3MgYW5kIHJlcG9ydHMgZm9yIHRoZSBhcHBsaWNhdGlvbiwgYWxsIHRoZVxuICAgKiByb2xlcyBmb3IgdGhlIGFwcGxpY2F0aW9uLCBhbmQgYW55IG90aGVyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBvcGVyYXRpb24gY291bGQgdGFrZSBhIHZlcnlcbiAgICogbG9uZyB0aW1lLCBkZXBlbmRpbmcgb24gdGhlIGFtb3VudCBvZiBkYXRhIGluIHlvdXIgZGF0YWJhc2UuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2hhcmREZWxldGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXJkIGRlbGV0ZXMgYW4gYXBwbGljYXRpb24gcm9sZS4gVGhpcyBpcyBhIGRhbmdlcm91cyBvcGVyYXRpb24gYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBtb3N0IGNpcmN1bXN0YW5jZXMuIFRoaXNcbiAgICogcGVybWFuZW50bHkgcmVtb3ZlcyB0aGUgZ2l2ZW4gcm9sZSBmcm9tIGFsbCB1c2VycyB0aGF0IGhhZCBpdC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB0aGUgcm9sZSBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHJvbGVJZCBUaGUgSWQgb2YgdGhlIHJvbGUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVBcHBsaWNhdGlvblJvbGUoYXBwbGljYXRpb25JZDogVVVJRCwgcm9sZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJyb2xlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChyb2xlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGNvbm5lY3RvciBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbm5lY3RvcklkIFRoZSBJZCBvZiB0aGUgY29ubmVjdG9yIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlQ29ubmVjdG9yKGNvbm5lY3RvcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGNvbnNlbnQgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgVGhlIElkIG9mIHRoZSBjb25zZW50IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlQ29uc2VudChjb25zZW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29uc2VudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBlbWFpbCB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCBUaGUgSWQgb2YgdGhlIGVtYWlsIHRlbXBsYXRlIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRW1haWxUZW1wbGF0ZShlbWFpbFRlbXBsYXRlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgRW50aXR5IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbnRpdHkoZW50aXR5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhbiBFbnRpdHkgR3JhbnQgZm9yIHRoZSBnaXZlbiBVc2VyIG9yIEVudGl0eS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSB0aGF0IHRoZSBFbnRpdHkgR3JhbnQgaXMgYmVpbmcgZGVsZXRlZCBmb3IuXG4gICAqIEBwYXJhbSB7VVVJRH0gcmVjaXBpZW50RW50aXR5SWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIEVudGl0eSB0aGF0IHRoZSBFbnRpdHkgR3JhbnQgaXMgZm9yLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgVXNlciB0aGF0IHRoZSBFbnRpdHkgR3JhbnQgaXMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbnRpdHlHcmFudChlbnRpdHlJZDogVVVJRCwgcmVjaXBpZW50RW50aXR5SWQ6IFVVSUQsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJncmFudFwiKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVjaXBpZW50RW50aXR5SWQnLCByZWNpcGllbnRFbnRpdHlJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgRW50aXR5IFR5cGUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUVudGl0eVR5cGUoZW50aXR5VHlwZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhcmQgZGVsZXRlcyBhIHBlcm1pc3Npb24uIFRoaXMgaXMgYSBkYW5nZXJvdXMgb3BlcmF0aW9uIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbW9zdCBjaXJjdW1zdGFuY2VzLiBUaGlzXG4gICAqIHBlcm1hbmVudGx5IHJlbW92ZXMgdGhlIGdpdmVuIHBlcm1pc3Npb24gZnJvbSBhbGwgZ3JhbnRzIHRoYXQgaGFkIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIGVudGl0eVR5cGUgdGhlIHRoZSBwZXJtaXNzaW9uIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcGVybWlzc2lvbklkIFRoZSBJZCBvZiB0aGUgcGVybWlzc2lvbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUVudGl0eVR5cGVQZXJtaXNzaW9uKGVudGl0eVR5cGVJZDogVVVJRCwgcGVybWlzc2lvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInBlcm1pc3Npb25cIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHBlcm1pc3Npb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgZm9ybSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZvcm1JZCBUaGUgSWQgb2YgdGhlIGZvcm0gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVGb3JtKGZvcm1JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmb3JtSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGZvcm0gZmllbGQgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmaWVsZElkIFRoZSBJZCBvZiB0aGUgZm9ybSBmaWVsZCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUZvcm1GaWVsZChmaWVsZElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtL2ZpZWxkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZpZWxkSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGdyb3VwIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZ3JvdXBJZCBUaGUgSWQgb2YgdGhlIGdyb3VwIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlR3JvdXAoZ3JvdXBJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB1c2VycyBhcyBtZW1iZXJzIG9mIGEgZ3JvdXAuXG4gICAqXG4gICAqIEBwYXJhbSB7TWVtYmVyRGVsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgbWVtYmVyIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gcmVtb3ZlIG1lbWJlcnMgdG8gdGhlIGdyb3VwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVHcm91cE1lbWJlcnMocmVxdWVzdDogTWVtYmVyRGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvbWVtYmVyJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaXBBY2Nlc3NDb250cm9sTGlzdElkIFRoZSBJZCBvZiB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUlQQWNjZXNzQ29udHJvbExpc3QoaXBBY2Nlc3NDb250cm9sTGlzdElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pcC1hY2wnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaXBBY2Nlc3NDb250cm9sTGlzdElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBpZGVudGl0eSBwcm92aWRlciBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlSWRlbnRpdHlQcm92aWRlcihpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUga2V5IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBrZXkgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVLZXkoa2V5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgbGFtYmRhIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbGFtYmRhSWQgVGhlIElkIG9mIHRoZSBsYW1iZGEgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVMYW1iZGEobGFtYmRhSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NhZ2VUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZU1lc3NhZ2VUZW1wbGF0ZShtZXNzYWdlVGVtcGxhdGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzYWdlVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgbWVzc2VuZ2VyIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2VuZ2VySWQgVGhlIElkIG9mIHRoZSBtZXNzZW5nZXIgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVNZXNzZW5nZXIobWVzc2VuZ2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFyZCBkZWxldGVzIGEgY3VzdG9tIE9BdXRoIHNjb3BlLlxuICAgKiBPQXV0aCB3b3JrZmxvd3MgdGhhdCBhcmUgc3RpbGwgcmVxdWVzdGluZyB0aGUgZGVsZXRlZCBPQXV0aCBzY29wZSBtYXkgZmFpbCBkZXBlbmRpbmcgb24gdGhlIGFwcGxpY2F0aW9uJ3MgdW5rbm93biBzY29wZSBwb2xpY3kuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIE9BdXRoIHNjb3BlIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gc2NvcGVJZCBUaGUgSWQgb2YgdGhlIE9BdXRoIHNjb3BlIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlT0F1dGhTY29wZShhcHBsaWNhdGlvbklkOiBVVUlELCBzY29wZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJzY29wZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoc2NvcGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciByZWdpc3RyYXRpb24gZm9yIHRoZSBnaXZlbiB1c2VyIGFuZCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHdob3NlIHJlZ2lzdHJhdGlvbiBpcyBiZWluZyBkZWxldGVkLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byByZW1vdmUgdGhlIHJlZ2lzdHJhdGlvbiBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVJlZ2lzdHJhdGlvbih1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgcmVnaXN0cmF0aW9uIGZvciB0aGUgZ2l2ZW4gdXNlciBhbmQgYXBwbGljYXRpb24gYWxvbmcgd2l0aCB0aGUgZ2l2ZW4gSlNPTiBib2R5IHRoYXQgY29udGFpbnMgdGhlIGV2ZW50IGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgd2hvc2UgcmVnaXN0cmF0aW9uIGlzIGJlaW5nIGRlbGV0ZWQuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHJlbW92ZSB0aGUgcmVnaXN0cmF0aW9uIGZvci5cbiAgICogQHBhcmFtIHtSZWdpc3RyYXRpb25EZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IGJvZHkgdGhhdCBjb250YWlucyB0aGUgZXZlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVJlZ2lzdHJhdGlvbldpdGhSZXF1ZXN0KHVzZXJJZDogVVVJRCwgYXBwbGljYXRpb25JZDogVVVJRCwgcmVxdWVzdDogUmVnaXN0cmF0aW9uRGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB0ZW5hbnQgYmFzZWQgb24gdGhlIGdpdmVuIElkIG9uIHRoZSBVUkwuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyBhbGwgaW5mb3JtYXRpb24sIG1ldHJpY3MsIHJlcG9ydHMgYW5kIGRhdGEgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSB0ZW5hbnQgYW5kIGV2ZXJ5dGhpbmcgdW5kZXIgdGhlIHRlbmFudCAoYXBwbGljYXRpb25zLCB1c2VycywgZXRjKS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVRlbmFudCh0ZW5hbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB0ZW5hbnQgZm9yIHRoZSBnaXZlbiBJZCBhc3luY2hyb25vdXNseS5cbiAgICogVGhpcyBtZXRob2QgaXMgaGVscGZ1bCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gd2FpdCBmb3IgdGhlIGRlbGV0ZSBvcGVyYXRpb24gdG8gY29tcGxldGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVUZW5hbnRBc3luYyh0ZW5hbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXN5bmMnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB0ZW5hbnQgYmFzZWQgb24gdGhlIGdpdmVuIHJlcXVlc3QgKHNlbnQgdG8gdGhlIEFQSSBhcyBKU09OKS4gVGhpcyBwZXJtYW5lbnRseSBkZWxldGVzIGFsbCBpbmZvcm1hdGlvbiwgbWV0cmljcywgcmVwb3J0cyBhbmQgZGF0YSBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHRlbmFudCBhbmQgZXZlcnl0aGluZyB1bmRlciB0aGUgdGVuYW50IChhcHBsaWNhdGlvbnMsIHVzZXJzLCBldGMpLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50IHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtUZW5hbnREZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBkZWxldGUgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVRlbmFudFdpdGhSZXF1ZXN0KHRlbmFudElkOiBVVUlELCByZXF1ZXN0OiBUZW5hbnREZWxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdGhlbWUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0aGVtZUlkIFRoZSBJZCBvZiB0aGUgdGhlbWUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVUaGVtZSh0aGVtZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0aGVtZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gSWQuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyBhbGwgaW5mb3JtYXRpb24sIG1ldHJpY3MsIHJlcG9ydHMgYW5kIGRhdGEgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVVc2VyKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciBhY3Rpb24gZm9yIHRoZSBnaXZlbiBJZC4gVGhpcyBwZXJtYW5lbnRseSBkZWxldGVzIHRoZSB1c2VyIGFjdGlvbiBhbmQgYWxzbyBhbnkgaGlzdG9yeSBhbmQgbG9ncyBvZlxuICAgKiB0aGUgYWN0aW9uIGJlaW5nIGFwcGxpZWQgdG8gYW55IHVzZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2hhcmREZWxldGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVVc2VyQWN0aW9uUmVhc29uKHVzZXJBY3Rpb25SZWFzb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25SZWFzb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGV4aXN0aW5nIGxpbmsgdGhhdCBoYXMgYmVlbiBtYWRlIGZyb20gYSAzcmQgcGFydHkgaWRlbnRpdHkgcHJvdmlkZXIgdG8gYSBGdXNpb25BdXRoIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpdHlQcm92aWRlclVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB1c2VyIGluIHRoZSAzcmQgcGFydHkgaWRlbnRpdHkgcHJvdmlkZXIgdG8gdW5saW5rLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSBGdXNpb25BdXRoIHVzZXIgdG8gdW5saW5rLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj59XG4gICAqL1xuICBkZWxldGVVc2VyTGluayhpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ6IHN0cmluZywgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9saW5rJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJJZCcsIGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJVc2VySWQnLCBpZGVudGl0eVByb3ZpZGVyVXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIGJhc2VkIG9uIHRoZSBnaXZlbiByZXF1ZXN0IChzZW50IHRvIHRoZSBBUEkgYXMgSlNPTikuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyBhbGwgaW5mb3JtYXRpb24sIG1ldHJpY3MsIHJlcG9ydHMgYW5kIGRhdGEgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZGVsZXRlIChyZXF1aXJlZCkuXG4gICAqIEBwYXJhbSB7VXNlckRlbGV0ZVNpbmdsZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGRlbGV0ZSB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVXNlcldpdGhSZXF1ZXN0KHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVXNlckRlbGV0ZVNpbmdsZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIGlkcywgb3IgdXNlcnMgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIEpTT04gcXVlcnkgb3IgcXVlcnlTdHJpbmcuXG4gICAqIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGlzIGlkcywgcXVlcnkgYW5kIHRoZW4gcXVlcnlTdHJpbmcsIGl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgcHJvdmlkZSBvbmUgb2YgdGhlIHRocmVlIGZvciB0aGUgcmVxdWVzdC5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGRlYWN0aXZhdGUgb3IgcGVybWFuZW50bHkgZGVsZXRlIChoYXJkLWRlbGV0ZSkgdXNlcnMgYmFzZWQgdXBvbiB0aGUgaGFyZERlbGV0ZSBib29sZWFuIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqIFVzaW5nIHRoZSBkcnlSdW4gcGFyYW1ldGVyIHlvdSBtYXkgYWxzbyByZXF1ZXN0IHRoZSByZXN1bHQgb2YgdGhlIGFjdGlvbiB3aXRob3V0IGFjdHVhbGx5IGRlbGV0aW5nIG9yIGRlYWN0aXZhdGluZyBhbnkgdXNlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VXNlckRlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIFVzZXJEZWxldGVSZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBkZWxldGVVc2Vyc0J5UXVlcnksIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgZGVsZXRlVXNlcnMocmVxdWVzdDogVXNlckRlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyRGVsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2J1bGsnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIGlkcywgb3IgdXNlcnMgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIEpTT04gcXVlcnkgb3IgcXVlcnlTdHJpbmcuXG4gICAqIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGlzIGlkcywgcXVlcnkgYW5kIHRoZW4gcXVlcnlTdHJpbmcsIGl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgcHJvdmlkZSBvbmUgb2YgdGhlIHRocmVlIGZvciB0aGUgcmVxdWVzdC5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGRlYWN0aXZhdGUgb3IgcGVybWFuZW50bHkgZGVsZXRlIChoYXJkLWRlbGV0ZSkgdXNlcnMgYmFzZWQgdXBvbiB0aGUgaGFyZERlbGV0ZSBib29sZWFuIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqIFVzaW5nIHRoZSBkcnlSdW4gcGFyYW1ldGVyIHlvdSBtYXkgYWxzbyByZXF1ZXN0IHRoZSByZXN1bHQgb2YgdGhlIGFjdGlvbiB3aXRob3V0IGFjdHVhbGx5IGRlbGV0aW5nIG9yIGRlYWN0aXZhdGluZyBhbnkgdXNlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VXNlckRlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIFVzZXJEZWxldGVSZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJzQnlRdWVyeShyZXF1ZXN0OiBVc2VyRGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJEZWxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYnVsaycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgV2ViQXV0aG4gY3JlZGVudGlhbCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkIFRoZSBJZCBvZiB0aGUgV2ViQXV0aG4gY3JlZGVudGlhbCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVdlYkF1dGhuQ3JlZGVudGlhbChpZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHdlYmhvb2sgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB3ZWJob29rSWQgVGhlIElkIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlV2ViaG9vayh3ZWJob29rSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSBVc2VyIGZvciB3aGljaCB5b3UncmUgZGlzYWJsaW5nIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RJZCBUaGUgdHdvLWZhY3RvciBtZXRob2QgaWRlbnRpZmllciB5b3Ugd2lzaCB0byBkaXNhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIFRoZSB0d28tZmFjdG9yIGNvZGUgdXNlZCB2ZXJpZnkgdGhlIHRoZSBjYWxsZXIga25vd3MgdGhlIHR3by1mYWN0b3Igc2VjcmV0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkaXNhYmxlVHdvRmFjdG9yKHVzZXJJZDogVVVJRCwgbWV0aG9kSWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbWV0aG9kSWQnLCBtZXRob2RJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2NvZGUnLCBjb2RlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgdXNlciB1c2luZyBhIEpTT04gYm9keSByYXRoZXIgdGhhbiBVUkwgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSBVc2VyIGZvciB3aGljaCB5b3UncmUgZGlzYWJsaW5nIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yRGlzYWJsZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgaW5mb3JtYXRpb24gdGhhdCBjb250YWlucyB0aGUgY29kZSBhbmQgbWV0aG9kSWQgYWxvbmcgd2l0aCBhbnkgZXZlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRpc2FibGVUd29GYWN0b3JXaXRoUmVxdWVzdCh1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFR3b0ZhY3RvckRpc2FibGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBlbmFibGUgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHBhcmFtIHtUd29GYWN0b3JSZXF1ZXN0fSByZXF1ZXN0IFRoZSB0d28tZmFjdG9yIGVuYWJsZSByZXF1ZXN0IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgZW5hYmxlVHdvRmFjdG9yKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVHdvRmFjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZXMgYW4gT0F1dGggYXV0aG9yaXphdGlvbiBjb2RlIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqIE1ha2VzIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIGF1dGhvcml6YXRpb24gY29kZSByZXR1cm5lZCBmcm9tIHRoZSBBdXRob3JpemUgZW5kcG9pbnQgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgVGhlIGF1dGhvcml6YXRpb24gY29kZSByZXR1cm5lZCBvbiB0aGUgL29hdXRoMi9hdXRob3JpemUgcmVzcG9uc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLlxuICAgKiAgICBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIEJhc2ljIEF1dGhvcml6YXRpb24gaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIHdpbGwgYmUgcmVxdWlyZWQgaWYgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdF91cmkgVGhlIFVSSSB0byByZWRpcmVjdCB0byB1cG9uIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VPQXV0aENvZGVGb3JBY2Nlc3NUb2tlbihjb2RlOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHJlZGlyZWN0X3VyaTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjb2RlJywgY29kZSk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsICdhdXRob3JpemF0aW9uX2NvZGUnKTtcbiAgICBib2R5LmFwcGVuZCgncmVkaXJlY3RfdXJpJywgcmVkaXJlY3RfdXJpKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlcyBhbiBPQXV0aCBhdXRob3JpemF0aW9uIGNvZGUgYW5kIGNvZGVfdmVyaWZpZXIgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICogTWFrZXMgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIGZyb20gdGhlIEF1dGhvcml6ZSBlbmRwb2ludCBhbmQgYSBjb2RlX3ZlcmlmaWVyIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIFRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgb24gdGhlIC9vYXV0aDIvYXV0aG9yaXplIHJlc3BvbnNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS4gVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgaXMgcHJvdmlkZWQuXG4gICAqICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gQmFzaWMgQXV0aG9yaXphdGlvbiBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGlzIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IChPcHRpb25hbCkgVGhlIGNsaWVudCBzZWNyZXQuIFRoaXMgdmFsdWUgbWF5IG9wdGlvbmFsbHkgYmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYm9keSBpbnN0ZWFkIG9mIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZGlyZWN0X3VyaSBUaGUgVVJJIHRvIHJlZGlyZWN0IHRvIHVwb24gYSBzdWNjZXNzZnVsIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlX3ZlcmlmaWVyIFRoZSByYW5kb20gc3RyaW5nIGdlbmVyYXRlZCBwcmV2aW91c2x5LiBXaWxsIGJlIGNvbXBhcmVkIHdpdGggdGhlIGNvZGVfY2hhbGxlbmdlIHNlbnQgcHJldmlvdXNseSwgd2hpY2ggYWxsb3dzIHRoZSBPQXV0aCBwcm92aWRlciB0byBhdXRoZW50aWNhdGUgeW91ciBhcHAuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBleGNoYW5nZU9BdXRoQ29kZUZvckFjY2Vzc1Rva2VuVXNpbmdQS0NFKGNvZGU6IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgcmVkaXJlY3RfdXJpOiBzdHJpbmcsIGNvZGVfdmVyaWZpZXI6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgnY29kZScsIGNvZGUpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAnYXV0aG9yaXphdGlvbl9jb2RlJyk7XG4gICAgYm9keS5hcHBlbmQoJ3JlZGlyZWN0X3VyaScsIHJlZGlyZWN0X3VyaSk7XG4gICAgYm9keS5hcHBlbmQoJ2NvZGVfdmVyaWZpZXInLCBjb2RlX3ZlcmlmaWVyKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlIGEgUmVmcmVzaCBUb2tlbiBmb3IgYW4gQWNjZXNzIFRva2VuLlxuICAgKiBJZiB5b3Ugd2lsbCBiZSB1c2luZyB0aGUgUmVmcmVzaCBUb2tlbiBHcmFudCwgeW91IHdpbGwgbWFrZSBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSB1c2Vy4oCZcyByZWZyZXNoIHRva2VuIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZyZXNoX3Rva2VuIFRoZSByZWZyZXNoIHRva2VuIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gdXNlIHRvIGV4Y2hhbmdlIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBwcm92aWRlZC5cbiAgICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiBCYXNpYyBBdXRob3JpemF0aW9uIGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5IGluc3RlYWQgb2YgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKE9wdGlvbmFsKSBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgaWYgb21pdHRlZCwgdGhlIHNhbWUgc2NvcGUgcmVxdWVzdGVkIGR1cmluZyB0aGUgYXV0aG9yaXphdGlvbiByZXF1ZXN0IHdpbGwgYmUgdXNlZC4gSWYgcHJvdmlkZWQgdGhlIHNjb3BlcyBtdXN0IG1hdGNoIHRob3NlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIGluaXRpYWwgYXV0aG9yaXphdGlvbiByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIChPcHRpb25hbCkgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLiBUaGlzIGNvZGUgaXMgcmVxdWlyZWQgaWYgdXNpbmcgdGhpcyBlbmRwb2ludCB0byBhcHByb3ZlIHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlUmVmcmVzaFRva2VuRm9yQWNjZXNzVG9rZW4ocmVmcmVzaF90b2tlbjogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCBzY29wZTogc3RyaW5nLCB1c2VyX2NvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgncmVmcmVzaF90b2tlbicsIHJlZnJlc2hfdG9rZW4pO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAncmVmcmVzaF90b2tlbicpO1xuICAgIGJvZHkuYXBwZW5kKCdzY29wZScsIHNjb3BlKTtcbiAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgdXNlcl9jb2RlKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlIGEgcmVmcmVzaCB0b2tlbiBmb3IgYSBuZXcgSldULlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZnJlc2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZWZyZXNoIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXVFJlZnJlc2hSZXNwb25zZT4+fVxuICAgKi9cbiAgZXhjaGFuZ2VSZWZyZXNoVG9rZW5Gb3JKV1QocmVxdWVzdDogUmVmcmVzaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXVFJlZnJlc2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxKV1RSZWZyZXNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlIFVzZXIgQ3JlZGVudGlhbHMgZm9yIGEgVG9rZW4uXG4gICAqIElmIHlvdSB3aWxsIGJlIHVzaW5nIHRoZSBSZXNvdXJjZSBPd25lciBQYXNzd29yZCBDcmVkZW50aWFsIEdyYW50LCB5b3Ugd2lsbCBtYWtlIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIHVzZXLigJlzIGVtYWlsIGFuZCBwYXNzd29yZCBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcm5hbWUgVGhlIGxvZ2luIGlkZW50aWZpZXIgb2YgdGhlIHVzZXIuIFRoZSBsb2dpbiBpZGVudGlmaWVyIGNhbiBiZSBlaXRoZXIgdGhlIGVtYWlsIG9yIHRoZSB1c2VybmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkIFRoZSB1c2Vy4oCZcyBwYXNzd29yZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHByb3ZpZGVkLlxuICAgKiAgICBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIEJhc2ljIEF1dGhvcml6YXRpb24gaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkgaW5zdGVhZCBvZiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZSAoT3B0aW9uYWwpIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBpZiBvbWl0dGVkLCB0aGUgc2FtZSBzY29wZSByZXF1ZXN0ZWQgZHVyaW5nIHRoZSBhdXRob3JpemF0aW9uIHJlcXVlc3Qgd2lsbCBiZSB1c2VkLiBJZiBwcm92aWRlZCB0aGUgc2NvcGVzIG11c3QgbWF0Y2ggdGhvc2UgcmVxdWVzdGVkIGR1cmluZyB0aGUgaW5pdGlhbCBhdXRob3JpemF0aW9uIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgKE9wdGlvbmFsKSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuIFRoaXMgY29kZSBpcyByZXF1aXJlZCBpZiB1c2luZyB0aGlzIGVuZHBvaW50IHRvIGFwcHJvdmUgdGhlIERldmljZSBBdXRob3JpemF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VVc2VyQ3JlZGVudGlhbHNGb3JBY2Nlc3NUb2tlbih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCBzY29wZTogc3RyaW5nLCB1c2VyX2NvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgndXNlcm5hbWUnLCB1c2VybmFtZSk7XG4gICAgYm9keS5hcHBlbmQoJ3Bhc3N3b3JkJywgcGFzc3dvcmQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAncGFzc3dvcmQnKTtcbiAgICBib2R5LmFwcGVuZCgnc2NvcGUnLCBzY29wZSk7XG4gICAgYm9keS5hcHBlbmQoJ3VzZXJfY29kZScsIHVzZXJfY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWdpbnMgdGhlIGZvcmdvdCBwYXNzd29yZCBzZXF1ZW5jZSwgd2hpY2gga2lja3Mgb2ZmIGFuIGVtYWlsIHRvIHRoZSB1c2VyIHNvIHRoYXQgdGhleSBjYW4gcmVzZXQgdGhlaXIgcGFzc3dvcmQuXG4gICAqXG4gICAqIEBwYXJhbSB7Rm9yZ290UGFzc3dvcmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VyIHNvIHRoYXQgdGhleSBjYW4gYmUgZW1haWxlZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9yZ290UGFzc3dvcmRSZXNwb25zZT4+fVxuICAgKi9cbiAgZm9yZ290UGFzc3dvcmQocmVxdWVzdDogRm9yZ290UGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3Jnb3RQYXNzd29yZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcmdvdFBhc3N3b3JkUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZvcmdvdC1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IEVtYWlsIFZlcmlmaWNhdGlvbiBJZCB0byBiZSB1c2VkIHdpdGggdGhlIFZlcmlmeSBFbWFpbCBBUEkuIFRoaXMgQVBJIHdpbGwgbm90IGF0dGVtcHQgdG8gc2VuZCBhblxuICAgKiBlbWFpbCB0byB0aGUgVXNlci4gVGhpcyBBUEkgbWF5IGJlIHVzZWQgdG8gY29sbGVjdCB0aGUgdmVyaWZpY2F0aW9uSWQgZm9yIHVzZSB3aXRoIGEgdGhpcmQgcGFydHkgc3lzdGVtLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWwgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIgdGhhdCBuZWVkcyBhIG5ldyB2ZXJpZmljYXRpb24gZW1haWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlRW1haWxWZXJpZmljYXRpb25JZChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeUVtYWlsUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3NlbmRWZXJpZnlFbWFpbCcsIGZhbHNlKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG5ldyBSU0Egb3IgRUMga2V5IHBhaXIgb3IgYW4gSE1BQyBzZWNyZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBrZXkuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGtleS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlS2V5KGtleUlkOiBVVUlELCByZXF1ZXN0OiBLZXlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleS9nZW5lcmF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcgQXBwbGljYXRpb24gUmVnaXN0cmF0aW9uIFZlcmlmaWNhdGlvbiBJZCB0byBiZSB1c2VkIHdpdGggdGhlIFZlcmlmeSBSZWdpc3RyYXRpb24gQVBJLiBUaGlzIEFQSSB3aWxsIG5vdCBhdHRlbXB0IHRvIHNlbmQgYW5cbiAgICogZW1haWwgdG8gdGhlIFVzZXIuIFRoaXMgQVBJIG1heSBiZSB1c2VkIHRvIGNvbGxlY3QgdGhlIHZlcmlmaWNhdGlvbklkIGZvciB1c2Ugd2l0aCBhIHRoaXJkIHBhcnR5IHN5c3RlbS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB2ZXJpZmllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWQoZW1haWw6IHN0cmluZywgYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzZW5kVmVyaWZ5UGFzc3dvcmRFbWFpbCcsIGZhbHNlKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHR3by1mYWN0b3IgcmVjb3ZlcnkgY29kZXMgZm9yIGEgdXNlci4gR2VuZXJhdGluZyB0d28tZmFjdG9yIHJlY292ZXJ5IGNvZGVzIHdpbGwgaW52YWxpZGF0ZSBhbnkgZXhpc3RpbmcgcmVjb3ZlcnkgY29kZXMuIFxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZ2VuZXJhdGUgbmV3IFR3byBGYWN0b3IgcmVjb3ZlcnkgY29kZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZVR3b0ZhY3RvclJlY292ZXJ5Q29kZXModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdHdvLWZhY3Rvci9yZWNvdmVyeS1jb2RlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgVHdvIEZhY3RvciBzZWNyZXQgdGhhdCBjYW4gYmUgdXNlZCB0byBlbmFibGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSBVc2VyLiBUaGUgcmVzcG9uc2Ugd2lsbCBjb250YWluXG4gICAqIGJvdGggdGhlIHNlY3JldCBhbmQgYSBCYXNlMzIgZW5jb2RlZCBmb3JtIG9mIHRoZSBzZWNyZXQgd2hpY2ggY2FuIGJlIHNob3duIHRvIGEgVXNlciB3aGVuIHVzaW5nIGEgMiBTdGVwIEF1dGhlbnRpY2F0aW9uXG4gICAqIGFwcGxpY2F0aW9uIHN1Y2ggYXMgR29vZ2xlIEF1dGhlbnRpY2F0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlY3JldFJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZVR3b0ZhY3RvclNlY3JldCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlY3JldFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlY3JldFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VjcmV0JylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBUd28gRmFjdG9yIHNlY3JldCB0aGF0IGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIFVzZXIuIFRoZSByZXNwb25zZSB3aWxsIGNvbnRhaW5cbiAgICogYm90aCB0aGUgc2VjcmV0IGFuZCBhIEJhc2UzMiBlbmNvZGVkIGZvcm0gb2YgdGhlIHNlY3JldCB3aGljaCBjYW4gYmUgc2hvd24gdG8gYSBVc2VyIHdoZW4gdXNpbmcgYSAyIFN0ZXAgQXV0aGVudGljYXRpb25cbiAgICogYXBwbGljYXRpb24gc3VjaCBhcyBHb29nbGUgQXV0aGVudGljYXRvci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVUd29GYWN0b3JTZWNyZXRVc2luZ0pXVChlbmNvZGVkSldUOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlY3JldFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFNlY3JldFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VjcmV0JylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgbG9naW4gdmlhIHRoaXJkLXBhcnRpZXMgaW5jbHVkaW5nIFNvY2lhbCBsb2dpbiwgZXh0ZXJuYWwgT0F1dGggYW5kIE9wZW5JRCBDb25uZWN0LCBhbmQgb3RoZXJcbiAgICogbG9naW4gc3lzdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyTG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSB0aGlyZC1wYXJ0eSBsb2dpbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gZnJvbSB0aGUgdGhpcmQtcGFydHkgbG9naW5cbiAgICogICAgcHJvdmlkZXJzIHRoYXQgRnVzaW9uQXV0aCB1c2VzIHRvIHJlY29uY2lsZSB0aGUgdXNlcidzIGFjY291bnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGlkZW50aXR5UHJvdmlkZXJMb2dpbihyZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBSU0Egb3IgRUMga2V5IHBhaXIgb3IgYW4gSE1BQyBzZWNyZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBrZXkuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGtleS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIGltcG9ydEtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXkvaW1wb3J0JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWxrIGltcG9ydHMgcmVmcmVzaCB0b2tlbnMuIFRoaXMgcmVxdWVzdCBwZXJmb3JtcyBtaW5pbWFsIHZhbGlkYXRpb24gYW5kIHJ1bnMgYmF0Y2ggaW5zZXJ0cyBvZiByZWZyZXNoIHRva2VucyB3aXRoIHRoZVxuICAgKiBleHBlY3RhdGlvbiB0aGF0IGVhY2ggdG9rZW4gcmVwcmVzZW50cyBhIHVzZXIgdGhhdCBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgRnVzaW9uQXV0aFxuICAgKiBBcHBsaWNhdGlvbi4gVGhpcyBpcyBkb25lIHRvIGluY3JlYXNlcyB0aGUgaW5zZXJ0IHBlcmZvcm1hbmNlLlxuICAgKiBcbiAgICogVGhlcmVmb3JlLCBpZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yIGR1ZSB0byBhIGRhdGFiYXNlIGtleSB2aW9sYXRpb24sIHRoZSByZXNwb25zZSB3aWxsIGxpa2VseSBvZmZlciBhIGdlbmVyaWNcbiAgICogZXhwbGFuYXRpb24uIElmIHlvdSBlbmNvdW50ZXIgYW4gZXJyb3IsIHlvdSBtYXkgb3B0aW9uYWxseSBlbmFibGUgYWRkaXRpb25hbCB2YWxpZGF0aW9uIHRvIHJlY2VpdmUgYSBKU09OIHJlc3BvbnNlXG4gICAqIGJvZHkgd2l0aCBzcGVjaWZpYyB2YWxpZGF0aW9uIGVycm9ycy4gVGhpcyB3aWxsIHNsb3cgdGhlIHJlcXVlc3QgZG93biBidXQgd2lsbCBhbGxvdyB5b3UgdG8gaWRlbnRpZnkgdGhlIGNhdXNlIG9mXG4gICAqIHRoZSBmYWlsdXJlLiBTZWUgdGhlIHZhbGlkYXRlRGJDb25zdHJhaW50cyByZXF1ZXN0IHBhcmFtZXRlci5cbiAgICpcbiAgICogQHBhcmFtIHtSZWZyZXNoVG9rZW5JbXBvcnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIHJlZnJlc2ggdG9rZW5zIHRvIGltcG9ydC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgaW1wb3J0UmVmcmVzaFRva2VucyhyZXF1ZXN0OiBSZWZyZXNoVG9rZW5JbXBvcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlZnJlc2gtdG9rZW4vaW1wb3J0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVsayBpbXBvcnRzIHVzZXJzLiBUaGlzIHJlcXVlc3QgcGVyZm9ybXMgbWluaW1hbCB2YWxpZGF0aW9uIGFuZCBydW5zIGJhdGNoIGluc2VydHMgb2YgdXNlcnMgd2l0aCB0aGUgZXhwZWN0YXRpb25cbiAgICogdGhhdCBlYWNoIHVzZXIgZG9lcyBub3QgeWV0IGV4aXN0IGFuZCBlYWNoIHJlZ2lzdHJhdGlvbiBjb3JyZXNwb25kcyB0byBhbiBleGlzdGluZyBGdXNpb25BdXRoIEFwcGxpY2F0aW9uLiBUaGlzIGlzIGRvbmUgdG9cbiAgICogaW5jcmVhc2VzIHRoZSBpbnNlcnQgcGVyZm9ybWFuY2UuXG4gICAqIFxuICAgKiBUaGVyZWZvcmUsIGlmIHlvdSBlbmNvdW50ZXIgYW4gZXJyb3IgZHVlIHRvIGEgZGF0YWJhc2Uga2V5IHZpb2xhdGlvbiwgdGhlIHJlc3BvbnNlIHdpbGwgbGlrZWx5IG9mZmVyXG4gICAqIGEgZ2VuZXJpYyBleHBsYW5hdGlvbi4gSWYgeW91IGVuY291bnRlciBhbiBlcnJvciwgeW91IG1heSBvcHRpb25hbGx5IGVuYWJsZSBhZGRpdGlvbmFsIHZhbGlkYXRpb24gdG8gcmVjZWl2ZSBhIEpTT04gcmVzcG9uc2VcbiAgICogYm9keSB3aXRoIHNwZWNpZmljIHZhbGlkYXRpb24gZXJyb3JzLiBUaGlzIHdpbGwgc2xvdyB0aGUgcmVxdWVzdCBkb3duIGJ1dCB3aWxsIGFsbG93IHlvdSB0byBpZGVudGlmeSB0aGUgY2F1c2Ugb2YgdGhlIGZhaWx1cmUuIFNlZVxuICAgKiB0aGUgdmFsaWRhdGVEYkNvbnN0cmFpbnRzIHJlcXVlc3QgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0ltcG9ydFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aGUgdXNlcnMgdG8gaW1wb3J0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBpbXBvcnRVc2VycyhyZXF1ZXN0OiBJbXBvcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ltcG9ydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhIFdlYkF1dGhuIGNyZWRlbnRpYWxcbiAgICpcbiAgICogQHBhcmFtIHtXZWJBdXRobkNyZWRlbnRpYWxJbXBvcnRSZXF1ZXN0fSByZXF1ZXN0IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgbmVjZXNzYXJ5IGZvciBpbXBvcnRpbmcgdGhlIGNyZWRlbnRpYWxcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgaW1wb3J0V2ViQXV0aG5DcmVkZW50aWFsKHJlcXVlc3Q6IFdlYkF1dGhuQ3JlZGVudGlhbEltcG9ydFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuL2ltcG9ydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3BlY3QgYW4gYWNjZXNzIHRva2VuIGlzc3VlZCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBVc2VyIGJhc2VkIGdyYW50IHN1Y2ggYXMgdGhlIEF1dGhvcml6YXRpb24gQ29kZSBHcmFudCwgSW1wbGljaXQgR3JhbnQsIHRoZSBVc2VyIENyZWRlbnRpYWxzIEdyYW50IG9yIHRoZSBSZWZyZXNoIEdyYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGZvciB3aGljaCB0aGlzIHRva2VuIHdhcyBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiBUaGUgYWNjZXNzIHRva2VuIHJldHVybmVkIGJ5IHRoaXMgT0F1dGggcHJvdmlkZXIgYXMgdGhlIHJlc3VsdCBvZiBhIHN1Y2Nlc3NmdWwgY2xpZW50IGNyZWRlbnRpYWxzIGdyYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRyb3NwZWN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGludHJvc3BlY3RBY2Nlc3NUb2tlbihjbGllbnRfaWQ6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50cm9zcGVjdFJlc3BvbnNlPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ3Rva2VuJywgdG9rZW4pO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEludHJvc3BlY3RSZXNwb25zZSwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9pbnRyb3NwZWN0JylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5zcGVjdCBhbiBhY2Nlc3MgdG9rZW4gaXNzdWVkIGFzIHRoZSByZXN1bHQgb2YgdGhlIENsaWVudCBDcmVkZW50aWFscyBHcmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuIFRoZSBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgYnkgdGhpcyBPQXV0aCBwcm92aWRlciBhcyB0aGUgcmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBjbGllbnQgY3JlZGVudGlhbHMgZ3JhbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+fVxuICAgKi9cbiAgaW50cm9zcGVjdENsaWVudENyZWRlbnRpYWxzQWNjZXNzVG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50cm9zcGVjdFJlc3BvbnNlPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ3Rva2VuJywgdG9rZW4pO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEludHJvc3BlY3RSZXNwb25zZSwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9pbnRyb3NwZWN0JylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSXNzdWUgYSBuZXcgYWNjZXNzIHRva2VuIChKV1QpIGZvciB0aGUgcmVxdWVzdGVkIEFwcGxpY2F0aW9uIGFmdGVyIGVuc3VyaW5nIHRoZSBwcm92aWRlZCBKV1QgaXMgdmFsaWQuIEEgdmFsaWRcbiAgICogYWNjZXNzIHRva2VuIGlzIHByb3Blcmx5IHNpZ25lZCBhbmQgbm90IGV4cGlyZWQuXG4gICAqIDxwPlxuICAgKiBUaGlzIEFQSSBtYXkgYmUgdXNlZCBpbiBhbiBTU08gY29uZmlndXJhdGlvbiB0byBpc3N1ZSBuZXcgdG9rZW5zIGZvciBhbm90aGVyIGFwcGxpY2F0aW9uIGFmdGVyIHRoZSB1c2VyIGhhc1xuICAgKiBvYnRhaW5lZCBhIHZhbGlkIHRva2VuIGZyb20gYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgQXBwbGljYXRpb24gSWQgZm9yIHdoaWNoIHlvdSBhcmUgcmVxdWVzdGluZyBhIG5ldyBhY2Nlc3MgdG9rZW4gYmUgaXNzdWVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZyZXNoVG9rZW4gKE9wdGlvbmFsKSBBbiBleGlzdGluZyByZWZyZXNoIHRva2VuIHVzZWQgdG8gcmVxdWVzdCBhIHJlZnJlc2ggdG9rZW4gaW4gYWRkaXRpb24gdG8gYSBKV1QgaW4gdGhlIHJlc3BvbnNlLlxuICAgKiAgICA8cD5UaGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbklkIHJlcXVlc3QgcGFyYW1ldGVyIG11c3QgaGF2ZSByZWZyZXNoXG4gICAqICAgIHRva2VucyBlbmFibGVkIGluIG9yZGVyIHRvIHJlY2VpdmUgYSByZWZyZXNoIHRva2VuIGluIHRoZSByZXNwb25zZS48L3A+XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElzc3VlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGlzc3VlSldUKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIGVuY29kZWRKV1Q6IHN0cmluZywgcmVmcmVzaFRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElzc3VlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8SXNzdWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9pc3N1ZScpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWZyZXNoVG9rZW4nLCByZWZyZXNoVG9rZW4pXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgYSB1c2VyIHRvIEZ1c2lvbkF1dGguIFxuICAgKiBcbiAgICogVGhpcyBBUEkgb3B0aW9uYWxseSByZXF1aXJlcyBhbiBBUEkga2V5LiBTZWUgPGNvZGU+QXBwbGljYXRpb24ubG9naW5Db25maWd1cmF0aW9uLnJlcXVpcmVBdXRoZW50aWNhdGlvbjwvY29kZT4uXG4gICAqXG4gICAqIEBwYXJhbSB7TG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSBsb2dpbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXIgY3JlZGVudGlhbHMgdXNlZCB0byBsb2cgdGhlbSBpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgbG9naW4ocmVxdWVzdDogTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcGluZyB0byBGdXNpb25BdXRoIGluZGljYXRpbmcgdGhhdCB0aGUgdXNlciB3YXMgYXV0b21hdGljYWxseSBsb2dnZWQgaW50byBhbiBhcHBsaWNhdGlvbi4gV2hlbiB1c2luZ1xuICAgKiBGdXNpb25BdXRoJ3MgU1NPIG9yIHlvdXIgb3duLCB5b3Ugc2hvdWxkIGNhbGwgdGhpcyBpZiB0aGUgdXNlciBpcyBhbHJlYWR5IGxvZ2dlZCBpbiBjZW50cmFsbHksIGJ1dCBhY2Nlc3NlcyBhblxuICAgKiBhcHBsaWNhdGlvbiB3aGVyZSB0aGV5IG5vIGxvbmdlciBoYXZlIGEgc2Vzc2lvbi4gVGhpcyBoZWxwcyBjb3JyZWN0bHkgdHJhY2sgbG9naW4gY291bnRzLCB0aW1lcyBhbmQgaGVscHMgd2l0aFxuICAgKiByZXBvcnRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0aGF0IHdhcyBsb2dnZWQgaW4uXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhleSBsb2dnZWQgaW50by5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhbGxlcklQQWRkcmVzcyAoT3B0aW9uYWwpIFRoZSBJUCBhZGRyZXNzIG9mIHRoZSBlbmQtdXNlciB0aGF0IGlzIGxvZ2dpbmcgaW4uIElmIGEgbnVsbCB2YWx1ZSBpcyBwcm92aWRlZFxuICAgKiAgICB0aGUgSVAgYWRkcmVzcyB3aWxsIGJlIHRoYXQgb2YgdGhlIGNsaWVudCBvciBsYXN0IHByb3h5IHRoYXQgc2VudCB0aGUgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgbG9naW5QaW5nKHVzZXJJZDogVVVJRCwgYXBwbGljYXRpb25JZDogVVVJRCwgY2FsbGVySVBBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xvZ2luJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpcEFkZHJlc3MnLCBjYWxsZXJJUEFkZHJlc3MpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcGluZyB0byBGdXNpb25BdXRoIGluZGljYXRpbmcgdGhhdCB0aGUgdXNlciB3YXMgYXV0b21hdGljYWxseSBsb2dnZWQgaW50byBhbiBhcHBsaWNhdGlvbi4gV2hlbiB1c2luZ1xuICAgKiBGdXNpb25BdXRoJ3MgU1NPIG9yIHlvdXIgb3duLCB5b3Ugc2hvdWxkIGNhbGwgdGhpcyBpZiB0aGUgdXNlciBpcyBhbHJlYWR5IGxvZ2dlZCBpbiBjZW50cmFsbHksIGJ1dCBhY2Nlc3NlcyBhblxuICAgKiBhcHBsaWNhdGlvbiB3aGVyZSB0aGV5IG5vIGxvbmdlciBoYXZlIGEgc2Vzc2lvbi4gVGhpcyBoZWxwcyBjb3JyZWN0bHkgdHJhY2sgbG9naW4gY291bnRzLCB0aW1lcyBhbmQgaGVscHMgd2l0aFxuICAgKiByZXBvcnRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7TG9naW5QaW5nUmVxdWVzdH0gcmVxdWVzdCBUaGUgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNyZWRlbnRpYWxzIHVzZWQgdG8gbG9nIHRoZW0gaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvZ2luUGluZ1dpdGhSZXF1ZXN0KHJlcXVlc3Q6IExvZ2luUGluZ1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTG9nb3V0IEFQSSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgcmVmcmVzaCB0b2tlbiBhbmQgYWNjZXNzIHRva2VuIGNvb2tpZXMgaWYgdGhleSBleGlzdCBvbiB0aGVcbiAgICogY2xpZW50IGFuZCByZXZva2UgdGhlIHJlZnJlc2ggdG9rZW4gc3RvcmVkLiBUaGlzIEFQSSBkb2VzIG5vdGhpbmcgaWYgdGhlIHJlcXVlc3QgZG9lcyBub3QgY29udGFpbiBhbiBhY2Nlc3NcbiAgICogdG9rZW4gb3IgcmVmcmVzaCB0b2tlbiBjb29raWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdsb2JhbCBXaGVuIHRoaXMgdmFsdWUgaXMgc2V0IHRvIHRydWUgYWxsIHRoZSByZWZyZXNoIHRva2VucyBpc3N1ZWQgdG8gdGhlIG93bmVyIG9mIHRoZVxuICAgKiAgICBwcm92aWRlZCB0b2tlbiB3aWxsIGJlIHJldm9rZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZyZXNoVG9rZW4gKE9wdGlvbmFsKSBUaGUgcmVmcmVzaF90b2tlbiBhcyBhIHJlcXVlc3QgcGFyYW1ldGVyIGluc3RlYWQgb2YgY29taW5nIGluIHZpYSBhIGNvb2tpZS5cbiAgICogICAgSWYgcHJvdmlkZWQgdGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGNvb2tpZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgbG9nb3V0KGdsb2JhbDogYm9vbGVhbiwgcmVmcmVzaFRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dvdXQnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZ2xvYmFsJywgZ2xvYmFsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVmcmVzaFRva2VuJywgcmVmcmVzaFRva2VuKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExvZ291dCBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZW1vdmUgdGhlIHJlZnJlc2ggdG9rZW4gYW5kIGFjY2VzcyB0b2tlbiBjb29raWVzIGlmIHRoZXkgZXhpc3Qgb24gdGhlXG4gICAqIGNsaWVudCBhbmQgcmV2b2tlIHRoZSByZWZyZXNoIHRva2VuIHN0b3JlZC4gVGhpcyBBUEkgdGFrZXMgdGhlIHJlZnJlc2ggdG9rZW4gaW4gdGhlIEpTT04gYm9keS5cbiAgICpcbiAgICogQHBhcmFtIHtMb2dvdXRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBsb2dvdXQgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGxvZ291dFdpdGhSZXF1ZXN0KHJlcXVlc3Q6IExvZ291dFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dvdXQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGlkZW50aXR5IHByb3ZpZGVyIGZvciB0aGUgZ2l2ZW4gZG9tYWluLiBBIDIwMCByZXNwb25zZSBjb2RlIGluZGljYXRlcyB0aGUgZG9tYWluIGlzIG1hbmFnZWRcbiAgICogYnkgYSByZWdpc3RlcmVkIGlkZW50aXR5IHByb3ZpZGVyLiBBIDQwNCBpbmRpY2F0ZXMgdGhlIGRvbWFpbiBpcyBub3QgbWFuYWdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG9yIGVtYWlsIGFkZHJlc3MgdG8gbG9va3VwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb29rdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgbG9va3VwSWRlbnRpdHlQcm92aWRlcihkb21haW46IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9va3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9va3VwUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbG9va3VwJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2RvbWFpbicsIGRvbWFpbilcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogTW9kaWZpZXMgYSB0ZW1wb3JhbCB1c2VyIGFjdGlvbiBieSBjaGFuZ2luZyB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgYWN0aW9uIGFuZCBvcHRpb25hbGx5IGFkZGluZyBhIGNvbW1lbnQgdG8gdGhlXG4gICAqIGFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhY3Rpb25JZCBUaGUgSWQgb2YgdGhlIGFjdGlvbiB0byBtb2RpZnkuIFRoaXMgaXMgdGVjaG5pY2FsbHkgdGhlIHVzZXIgYWN0aW9uIGxvZyBpZC5cbiAgICogQHBhcmFtIHtBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9kaWZpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgbW9kaWZ5QWN0aW9uKGFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgbG9naW4gcmVxdWVzdCB1c2luZyBhIHBhc3N3b3JkbGVzcyBjb2RlXG4gICAqXG4gICAqIEBwYXJhbSB7UGFzc3dvcmRsZXNzTG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSBwYXNzd29yZGxlc3MgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjb21wbGV0ZSBsb2dpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcGFzc3dvcmRsZXNzTG9naW4ocmVxdWVzdDogUGFzc3dvcmRsZXNzTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9wYXNzd29yZGxlc3MvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGFuIGF1dGhlbnRpY2F0aW9uIEFQSSBrZXkgYnkgZ2l2ZW4gaWRcbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIGtleS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBhcGkga2V5IHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0FQSUtleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY3JlYXRlIHRoZSBBUElLZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEFQSUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogQVBJS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QVBJS2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBhcHBsaWNhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBhcHBsaWNhdGlvbiByb2xlIHdpdGggdGhlIGdpdmVuIElkIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIHJvbGUgYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSByb2xlSWQgVGhlIElkIG9mIHRoZSByb2xlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgcm9sZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hBcHBsaWNhdGlvblJvbGUoYXBwbGljYXRpb25JZDogVVVJRCwgcm9sZUlkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInJvbGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHJvbGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGNvbm5lY3RvciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25uZWN0b3JJZCBUaGUgSWQgb2YgdGhlIGNvbm5lY3RvciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Q29ubmVjdG9yUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBjb25uZWN0b3IgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaENvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCwgcmVxdWVzdDogQ29ubmVjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBjb25zZW50IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCBUaGUgSWQgb2YgdGhlIGNvbnNlbnQgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0NvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGNvbnNlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hDb25zZW50KGNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGVtYWlsIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCBUaGUgSWQgb2YgdGhlIGVtYWlsIHRlbXBsYXRlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbWFpbFRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBlbWFpbCB0ZW1wbGF0ZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBFbWFpbFRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVtYWlsVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIEVudGl0eSBUeXBlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSBUeXBlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBFbnRpdHkgVHlwZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEVudGl0eVR5cGUoZW50aXR5VHlwZUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlUeXBlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGdyb3VwIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgVGhlIElkIG9mIHRoZSBncm91cCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7R3JvdXBSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGdyb3VwIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEdyb3VwKGdyb3VwSWQ6IFVVSUQsIHJlcXVlc3Q6IEdyb3VwUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSB1cGRhdGVkIGlkZW50aXR5IHByb3ZpZGVyIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoSWRlbnRpdHlQcm92aWRlcihpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgYXZhaWxhYmxlIGludGVncmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtJbnRlZ3JhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgaW50ZWdyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEludGVncmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoSW50ZWdyYXRpb25zKHJlcXVlc3Q6IEludGVncmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50ZWdyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJbnRlZ3JhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaW50ZWdyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgbGFtYmRhIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGxhbWJkYUlkIFRoZSBJZCBvZiB0aGUgbGFtYmRhIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtMYW1iZGFSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGxhbWJkYSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoTGFtYmRhKGxhbWJkYUlkOiBVVUlELCByZXF1ZXN0OiBMYW1iZGFSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2FnZVRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IG1lc3NhZ2UgdGVtcGxhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaE1lc3NhZ2VUZW1wbGF0ZShtZXNzYWdlVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NhZ2VUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgbWVzc2VuZ2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NlbmdlcklkIFRoZSBJZCBvZiB0aGUgbWVzc2VuZ2VyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtNZXNzZW5nZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IG1lc3NlbmdlciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlELCByZXF1ZXN0OiBNZXNzZW5nZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGN1c3RvbSBPQXV0aCBzY29wZSB3aXRoIHRoZSBnaXZlbiBJZCBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSBPQXV0aCBzY29wZSBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHNjb3BlSWQgVGhlIElkIG9mIHRoZSBPQXV0aCBzY29wZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25PQXV0aFNjb3BlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBPQXV0aCBzY29wZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25PQXV0aFNjb3BlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoT0F1dGhTY29wZShhcHBsaWNhdGlvbklkOiBVVUlELCBzY29wZUlkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInNjb3BlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChzY29wZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZCBhbmQgdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQgaW4gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB3aG9zZSByZWdpc3RyYXRpb24gaXMgZ29pbmcgdG8gYmUgdXBkYXRlZC5cbiAgICogQHBhcmFtIHtSZWdpc3RyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoUmVnaXN0cmF0aW9uKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogUmVnaXN0cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVnaXN0cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTeXN0ZW1Db25maWd1cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBzeXN0ZW0gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFN5c3RlbUNvbmZpZ3VyYXRpb24ocmVxdWVzdDogU3lzdGVtQ29uZmlndXJhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0tY29uZmlndXJhdGlvbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSB0ZW5hbnQgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1RlbmFudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgdGVuYW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hUZW5hbnQodGVuYW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFRlbmFudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRlbmFudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgdGhlbWUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGhlbWVJZCBUaGUgSWQgb2YgdGhlIHRoZW1lIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtUaGVtZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgdGhlbWUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVGhlbWUodGhlbWVJZDogVVVJRCwgcmVxdWVzdDogVGhlbWVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0aGVtZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtVc2VyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB1c2VyIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVXNlcih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSB1c2VyIGFjdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgdXNlciBhY3Rpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCwgcmVxdWVzdDogVXNlckFjdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvblJlYXNvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gcmVhc29uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtVc2VyQWN0aW9uUmVhc29uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB1c2VyIGFjdGlvbiByZWFzb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hVc2VyQWN0aW9uUmVhc29uKHVzZXJBY3Rpb25SZWFzb25JZDogVVVJRCwgcmVxdWVzdDogVXNlckFjdGlvblJlYXNvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbi1yZWFzb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvblJlYXNvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCBhIHNpbmdsZSBVc2VyIGNvbnNlbnQgYnkgSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckNvbnNlbnRJZCBUaGUgVXNlciBDb25zZW50IElkXG4gICAqIEBwYXJhbSB7VXNlckNvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHVzZXIgY29uc2VudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hVc2VyQ29uc2VudCh1c2VyQ29uc2VudElkOiBVVUlELCByZXF1ZXN0OiBVc2VyQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbnNlbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQ29uc2VudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhY3RpdmF0ZXMgdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byByZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZWFjdGl2YXRlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlYWN0aXZhdGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFjdGl2YXRlcyB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIHJlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmVhY3RpdmF0ZVVzZXIodXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWFjdGl2YXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhY3RpdmF0ZXMgdGhlIHVzZXIgYWN0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHRvIHJlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmVhY3RpdmF0ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVhY3RpdmF0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uY2lsZSBhIFVzZXIgdG8gRnVzaW9uQXV0aCB1c2luZyBKV1QgaXNzdWVkIGZyb20gYW5vdGhlciBJZGVudGl0eSBQcm92aWRlci5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyTG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZWNvbmNpbGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIHRvIHJlY29uY2lsZSB0aGUgVXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmVjb25jaWxlSldUKHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJMb2dpblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWNvbmNpbGUnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IGEgcmVmcmVzaCBvZiB0aGUgRW50aXR5IHNlYXJjaCBpbmRleC4gVGhpcyBBUEkgaXMgbm90IGdlbmVyYWxseSBuZWNlc3NhcnkgYW5kIHRoZSBzZWFyY2ggaW5kZXggd2lsbCBiZWNvbWUgY29uc2lzdGVudCBpbiBhXG4gICAqIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUuIFRoZXJlIG1heSBiZSBzY2VuYXJpb3Mgd2hlcmUgeW91IG1heSB3aXNoIHRvIG1hbnVhbGx5IHJlcXVlc3QgYW4gaW5kZXggcmVmcmVzaC4gT25lIGV4YW1wbGUgbWF5IGJlIFxuICAgKiBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTZWFyY2ggQVBJIG9yIERlbGV0ZSBUZW5hbnQgQVBJIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhIEVudGl0eSBDcmVhdGUgZXRjLCB5b3UgbWF5IHdpc2ggdG8gcmVxdWVzdCBhIHJlZnJlc2ggdG9cbiAgICogIGVuc3VyZSB0aGUgaW5kZXggaW1tZWRpYXRlbHkgY3VycmVudCBiZWZvcmUgbWFraW5nIGEgcXVlcnkgcmVxdWVzdCB0byB0aGUgc2VhcmNoIGluZGV4LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZWZyZXNoRW50aXR5U2VhcmNoSW5kZXgoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3NlYXJjaCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgYSByZWZyZXNoIG9mIHRoZSBVc2VyIHNlYXJjaCBpbmRleC4gVGhpcyBBUEkgaXMgbm90IGdlbmVyYWxseSBuZWNlc3NhcnkgYW5kIHRoZSBzZWFyY2ggaW5kZXggd2lsbCBiZWNvbWUgY29uc2lzdGVudCBpbiBhXG4gICAqIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUuIFRoZXJlIG1heSBiZSBzY2VuYXJpb3Mgd2hlcmUgeW91IG1heSB3aXNoIHRvIG1hbnVhbGx5IHJlcXVlc3QgYW4gaW5kZXggcmVmcmVzaC4gT25lIGV4YW1wbGUgbWF5IGJlIFxuICAgKiBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTZWFyY2ggQVBJIG9yIERlbGV0ZSBUZW5hbnQgQVBJIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhIFVzZXIgQ3JlYXRlIGV0YywgeW91IG1heSB3aXNoIHRvIHJlcXVlc3QgYSByZWZyZXNoIHRvXG4gICAqICBlbnN1cmUgdGhlIGluZGV4IGltbWVkaWF0ZWx5IGN1cnJlbnQgYmVmb3JlIG1ha2luZyBhIHF1ZXJ5IHJlcXVlc3QgdG8gdGhlIHNlYXJjaCBpbmRleC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmVmcmVzaFVzZXJTZWFyY2hJbmRleCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2VuZXJhdGVzIGFueSBrZXlzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIEZ1c2lvbkF1dGggUmVhY3Rvci5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmVnZW5lcmF0ZVJlYWN0b3JLZXlzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3InKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB1c2VyIGZvciBhbiBhcHBsaWNhdGlvbi4gSWYgeW91IHByb3ZpZGUgdGhlIFVzZXIgYW5kIHRoZSBVc2VyUmVnaXN0cmF0aW9uIG9iamVjdCBvbiB0aGlzIHJlcXVlc3QsIGl0XG4gICAqIHdpbGwgY3JlYXRlIHRoZSB1c2VyIGFzIHdlbGwgYXMgcmVnaXN0ZXIgdGhlbSBmb3IgdGhlIGFwcGxpY2F0aW9uLiBUaGlzIGlzIGNhbGxlZCBhIEZ1bGwgUmVnaXN0cmF0aW9uLiBIb3dldmVyLCBpZlxuICAgKiB5b3Ugb25seSBwcm92aWRlIHRoZSBVc2VyUmVnaXN0cmF0aW9uIG9iamVjdCwgdGhlbiB0aGUgdXNlciBtdXN0IGFscmVhZHkgZXhpc3QgYW5kIHRoZXkgd2lsbCBiZSByZWdpc3RlcmVkIGZvciB0aGVcbiAgICogYXBwbGljYXRpb24uIFRoZSB1c2VyIElkIGNhbiBhbHNvIGJlIHByb3ZpZGVkIGFuZCBpdCB3aWxsIGVpdGhlciBiZSB1c2VkIHRvIGxvb2sgdXAgYW4gZXhpc3RpbmcgdXNlciBvciBpdCB3aWxsIGJlXG4gICAqIHVzZWQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIFVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSB1c2VyIGJlaW5nIHJlZ2lzdGVyZWQgZm9yIHRoZSBhcHBsaWNhdGlvbiBhbmQgb3B0aW9uYWxseSBjcmVhdGVkLlxuICAgKiBAcGFyYW0ge1JlZ2lzdHJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBvcHRpb25hbGx5IGNvbnRhaW5zIHRoZSBVc2VyIGFuZCBtdXN0IGNvbnRhaW4gdGhlIFVzZXJSZWdpc3RyYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZWdpc3Rlcih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFJlZ2lzdHJhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0cyBFbGFzdGljc2VhcmNoIHRvIGRlbGV0ZSBhbmQgcmVidWlsZCB0aGUgaW5kZXggZm9yIEZ1c2lvbkF1dGggdXNlcnMgb3IgZW50aXRpZXMuIEJlIHZlcnkgY2FyZWZ1bCB3aGVuIHJ1bm5pbmcgdGhpcyByZXF1ZXN0IGFzIGl0IHdpbGwgXG4gICAqIGluY3JlYXNlIHRoZSBDUFUgYW5kIEkvTyBsb2FkIG9uIHlvdXIgZGF0YWJhc2UgdW50aWwgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMuIEdlbmVyYWxseSBzcGVha2luZyB5b3UgZG8gbm90IGV2ZXIgbmVlZCB0byBydW4gdGhpcyBvcGVyYXRpb24gdW5sZXNzIFxuICAgKiBpbnN0cnVjdGVkIGJ5IEZ1c2lvbkF1dGggc3VwcG9ydCwgb3IgaWYgeW91IGFyZSBtaWdyYXRpbmcgYSBkYXRhYmFzZSBhbm90aGVyIHN5c3RlbSBhbmQgeW91IGFyZSBub3QgYnJpbmluZyBhbG9uZyB0aGUgRWxhc3RpY3NlYXJjaCBpbmRleC4gXG4gICAqIFxuICAgKiBZb3UgaGF2ZSBiZWVuIHdhcm5lZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWluZGV4UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBpbmRleCBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZWluZGV4KHJlcXVlc3Q6IFJlaW5kZXhSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vcmVpbmRleCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSB1c2VyIGZyb20gdGhlIGZhbWlseSB3aXRoIHRoZSBnaXZlbiBpZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmYW1pbHlJZCBUaGUgSWQgb2YgdGhlIGZhbWlseSB0byByZW1vdmUgdGhlIHVzZXIgZnJvbS5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIHJlbW92ZSBmcm9tIHRoZSBmYW1pbHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlbW92ZVVzZXJGcm9tRmFtaWx5KGZhbWlseUlkOiBVVUlELCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZhbWlseUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1zZW5kcyB0aGUgdmVyaWZpY2F0aW9uIGVtYWlsIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWwgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIgdGhhdCBuZWVkcyBhIG5ldyB2ZXJpZmljYXRpb24gZW1haWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlc2VuZEVtYWlsVmVyaWZpY2F0aW9uKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyaWZ5RW1haWxSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLXNlbmRzIHRoZSB2ZXJpZmljYXRpb24gZW1haWwgdG8gdGhlIHVzZXIuIElmIHRoZSBBcHBsaWNhdGlvbiBoYXMgY29uZmlndXJlZCBhIHNwZWNpZmljIGVtYWlsIHRlbXBsYXRlIHRoaXMgd2lsbCBiZSB1c2VkXG4gICAqIGluc3RlYWQgb2YgdGhlIHRlbmFudCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIHVuaXF1ZSBBcHBsaWNhdGlvbiBJZCB0byB1c2VkIHRvIHJlc29sdmUgYW4gYXBwbGljYXRpb24gc3BlY2lmaWMgZW1haWwgdGVtcGxhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+fVxuICAgKi9cbiAgcmVzZW5kRW1haWxWZXJpZmljYXRpb25XaXRoQXBwbGljYXRpb25UZW1wbGF0ZShhcHBsaWNhdGlvbklkOiBVVUlELCBlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeUVtYWlsUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLXNlbmRzIHRoZSBhcHBsaWNhdGlvbiByZWdpc3RyYXRpb24gdmVyaWZpY2F0aW9uIGVtYWlsIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWwgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIgdGhhdCBuZWVkcyBhIG5ldyB2ZXJpZmljYXRpb24gZW1haWwuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHZlcmlmaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmVzZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uKGVtYWlsOiBzdHJpbmcsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFuIGF1dGhlbnRpY2F0aW9uIEFQSSBrZXkgZm9yIHRoZSBnaXZlbiBpZFxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUgQVBJIGtleSB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQVBJS2V5KGtleUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBUElLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwaS1rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSBhY3Rpb24gbG9nICh0aGUgbG9nIG9mIGEgdXNlciBhY3Rpb24gdGhhdCB3YXMgdGFrZW4gb24gYSB1c2VyIHByZXZpb3VzbHkpIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYWN0aW9uSWQgVGhlIElkIG9mIHRoZSBhY3Rpb24gdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFjdGlvbihhY3Rpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY3Rpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuIFRoaXMgd2lsbCByZXR1cm4gYWxsIHRpbWUgYmFzZWQgYWN0aW9ucyB0aGF0IGFyZSBhY3RpdmUsXG4gICAqIGFuZCBpbmFjdGl2ZSBhcyB3ZWxsIGFzIG5vbi10aW1lIGJhc2VkIGFjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBmZXRjaCB0aGUgYWN0aW9ucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFjdGlvbnModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQgdGhhdCBhcmUgY3VycmVudGx5IHByZXZlbnRpbmcgdGhlIFVzZXIgZnJvbSBsb2dnaW5nIGluLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZmV0Y2ggdGhlIGFjdGlvbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3Rpb25zUHJldmVudGluZ0xvZ2luKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdwcmV2ZW50aW5nTG9naW4nLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZCB0aGF0IGFyZSBjdXJyZW50bHkgYWN0aXZlLlxuICAgKiBBbiBhY3RpdmUgYWN0aW9uIG1lYW5zIG9uZSB0aGF0IGlzIHRpbWUgYmFzZWQgYW5kIGhhcyBub3QgYmVlbiBjYW5jZWxlZCwgYW5kIGhhcyBub3QgZW5kZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBmZXRjaCB0aGUgYWN0aW9ucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFjdGl2ZUFjdGlvbnModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FjdGl2ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYXBwbGljYXRpb24gZm9yIHRoZSBnaXZlbiBJZCBvciBhbGwgdGhlIGFwcGxpY2F0aW9ucyBpZiB0aGUgSWQgaXMgbnVsbC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIGlkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBhcHBsaWNhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQXBwbGljYXRpb25zKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIGF1ZGl0IGxvZyBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXVkaXRMb2dJZCBUaGUgSWQgb2YgdGhlIGF1ZGl0IGxvZyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXVkaXRMb2dSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBdWRpdExvZyhhdWRpdExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXVkaXRMb2dSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9hdWRpdC1sb2cnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXVkaXRMb2dJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjb25uZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgVGhlIElkIG9mIHRoZSBjb25uZWN0b3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUNvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbm5lY3RvcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBjb25uZWN0b3JzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVDb25uZWN0b3JzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBDb25zZW50IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29uc2VudElkIFRoZSBJZCBvZiB0aGUgY29uc2VudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUNvbnNlbnQoY29uc2VudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29uc2VudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBjb25zZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQ29uc2VudHMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2NvbnNlbnQnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGRhaWx5IGFjdGl2ZSB1c2VyIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIGlkLCBpdCB3aWxsIG9ubHlcbiAgICogcmV0dXJuIHRoZSBkYWlseSBhY3RpdmUgY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxEYWlseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVEYWlseUFjdGl2ZVJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RGFpbHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RGFpbHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvZGFpbHktYWN0aXZlLXVzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGVtYWlsIHRlbXBsYXRlIGZvciB0aGUgZ2l2ZW4gSWQuIElmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBpZCwgdGhpcyB3aWxsIHJldHVybiBhbGwgdGhlIGVtYWlsIHRlbXBsYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIGVtYWlsIHRlbXBsYXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRW1haWxUZW1wbGF0ZShlbWFpbFRlbXBsYXRlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW1haWxUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcHJldmlldyBvZiB0aGUgZW1haWwgdGVtcGxhdGUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QuIFRoaXMgYWxsb3dzIHlvdSB0byBwcmV2aWV3IGFuIGVtYWlsIHRlbXBsYXRlIHRoYXRcbiAgICogaGFzbid0IGJlZW4gc2F2ZWQgdG8gdGhlIGRhdGFiYXNlIHlldC4gVGhlIGVudGlyZSBlbWFpbCB0ZW1wbGF0ZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHByb3ZpZGVkIG9uIHRoZSByZXF1ZXN0LiBUaGlzXG4gICAqIHdpbGwgY3JlYXRlIHRoZSBwcmV2aWV3IGJhc2VkIG9uIHdoYXRldmVyIGlzIGdpdmVuLlxuICAgKlxuICAgKiBAcGFyYW0ge1ByZXZpZXdSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGVtYWlsIHRlbXBsYXRlIGFuZCBvcHRpb25hbGx5IGEgbG9jYWxlIHRvIHJlbmRlciBpdCBpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UHJldmlld1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUVtYWlsVGVtcGxhdGVQcmV2aWV3KHJlcXVlc3Q6IFByZXZpZXdSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQcmV2aWV3UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UHJldmlld1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUvcHJldmlldycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGVtYWlsIHRlbXBsYXRlcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUVtYWlsVGVtcGxhdGVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVtYWlsVGVtcGxhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRW50aXR5IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUVudGl0eShlbnRpdHlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbiBFbnRpdHkgR3JhbnQgZm9yIHRoZSBnaXZlbiBFbnRpdHkgYW5kIFVzZXIvRW50aXR5LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5LlxuICAgKiBAcGFyYW0ge1VVSUR9IHJlY2lwaWVudEVudGl0eUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBFbnRpdHkgdGhhdCB0aGUgRW50aXR5IEdyYW50IGlzIGZvci5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIFVzZXIgdGhhdCB0aGUgRW50aXR5IEdyYW50IGlzIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5R3JhbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbnRpdHlHcmFudChlbnRpdHlJZDogVVVJRCwgcmVjaXBpZW50RW50aXR5SWQ6IFVVSUQsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5R3JhbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlHcmFudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJncmFudFwiKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVjaXBpZW50RW50aXR5SWQnLCByZWNpcGllbnRFbnRpdHlJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBFbnRpdHkgVHlwZSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSBUeXBlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRW50aXR5VHlwZShlbnRpdHlUeXBlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIEVudGl0eSBUeXBlcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUVudGl0eVR5cGVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIGV2ZW50IGxvZyBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnRMb2dJZCBUaGUgSWQgb2YgdGhlIGV2ZW50IGxvZyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RXZlbnRMb2dSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFdmVudExvZyhldmVudExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEV2ZW50TG9nUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RXZlbnRMb2dSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9ldmVudC1sb2cnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZXZlbnRMb2dJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgZmFtaWxpZXMgdGhhdCBhIHVzZXIgYmVsb25ncyB0by5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIFVzZXIncyBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVGYW1pbGllcyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZhbWlseVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgbWVtYmVycyBvZiBhIGZhbWlseSBieSB0aGUgdW5pcXVlIEZhbWlseSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmYW1pbHlJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSBGYW1pbHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUZhbWlseU1lbWJlcnNCeUZhbWlseUlkKGZhbWlseUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGYW1pbHlSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmYW1pbHlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBmb3JtIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZvcm1JZCBUaGUgSWQgb2YgdGhlIGZvcm0uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVGb3JtKGZvcm1JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZvcm1JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBmb3JtIGZpZWxkIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZpZWxkSWQgVGhlIElkIG9mIHRoZSBmb3JtIGZpZWxkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVGb3JtRmllbGQoZmllbGRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybUZpZWxkUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybS9maWVsZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmaWVsZElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBmb3JtcyBmaWVsZHNcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRm9ybUZpZWxkcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1GaWVsZFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBmb3Jtcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUZvcm1zKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBncm91cCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgVGhlIElkIG9mIHRoZSBncm91cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVHcm91cChncm91cElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEdyb3VwUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChncm91cElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBncm91cHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlR3JvdXBzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlwQWNjZXNzQ29udHJvbExpc3RJZCBUaGUgSWQgb2YgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVJUEFjY2Vzc0NvbnRyb2xMaXN0KGlwQWNjZXNzQ29udHJvbExpc3RJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pcC1hY2wnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaXBBY2Nlc3NDb250cm9sTGlzdElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGlkZW50aXR5IHByb3ZpZGVyIGZvciB0aGUgZ2l2ZW4gSWQgb3IgYWxsIHRoZSBpZGVudGl0eSBwcm92aWRlcnMgaWYgdGhlIElkIGlzIG51bGwuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIFRoZSBpZGVudGl0eSBwcm92aWRlciBJZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUlkZW50aXR5UHJvdmlkZXIoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgb25lIG9yIG1vcmUgaWRlbnRpdHkgcHJvdmlkZXIgZm9yIHRoZSBnaXZlbiB0eXBlLiBGb3IgdHlwZXMgc3VjaCBhcyBHb29nbGUsIEZhY2Vib29rLCBUd2l0dGVyIGFuZCBMaW5rZWRJbiwgb25seSBhIHNpbmdsZSBcbiAgICogaWRlbnRpdHkgcHJvdmlkZXIgY2FuIGV4aXN0LiBGb3IgdHlwZXMgc3VjaCBhcyBPcGVuSUQgQ29ubmVjdCBhbmQgU0FNTHYyIG1vcmUgdGhhbiBvbmUgaWRlbnRpdHkgcHJvdmlkZXIgY2FuIGJlIGNvbmZpZ3VyZWQgc28gdGhpcyByZXF1ZXN0IFxuICAgKiBtYXkgcmV0dXJuIG11bHRpcGxlIGlkZW50aXR5IHByb3ZpZGVycy5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyVHlwZX0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVJZGVudGl0eVByb3ZpZGVyQnlUeXBlKHR5cGU6IElkZW50aXR5UHJvdmlkZXJUeXBlKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndHlwZScsIHR5cGUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGlkZW50aXR5IHByb3ZpZGVycy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUlkZW50aXR5UHJvdmlkZXJzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkIHRoYXQgYXJlIGN1cnJlbnRseSBpbmFjdGl2ZS5cbiAgICogQW4gaW5hY3RpdmUgYWN0aW9uIG1lYW5zIG9uZSB0aGF0IGlzIHRpbWUgYmFzZWQgYW5kIGhhcyBiZWVuIGNhbmNlbGVkIG9yIGhhcyBleHBpcmVkLCBvciBpcyBub3QgdGltZSBiYXNlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGZldGNoIHRoZSBhY3Rpb25zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSW5hY3RpdmVBY3Rpb25zKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhY3RpdmUnLCBmYWxzZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYXBwbGljYXRpb25zIHRoYXQgYXJlIGN1cnJlbnRseSBpbmFjdGl2ZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVJbmFjdGl2ZUFwcGxpY2F0aW9ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpbmFjdGl2ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHVzZXIgYWN0aW9ucyB0aGF0IGFyZSBjdXJyZW50bHkgaW5hY3RpdmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVJbmFjdGl2ZVVzZXJBY3Rpb25zKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpbmFjdGl2ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYXZhaWxhYmxlIGludGVncmF0aW9ucy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50ZWdyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVJbnRlZ3JhdGlvbigpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludGVncmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SW50ZWdyYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pbnRlZ3JhdGlvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgUHVibGljIEtleSBjb25maWd1cmVkIGZvciB2ZXJpZnlpbmcgSlNPTiBXZWIgVG9rZW5zIChKV1QpIGJ5IHRoZSBrZXkgSWQgKGtpZCkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlJZCBUaGUgSWQgb2YgdGhlIHB1YmxpYyBrZXkgKGtpZCkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFB1YmxpY0tleVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUpXVFB1YmxpY0tleShrZXlJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQdWJsaWNLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxQdWJsaWNLZXlSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcHVibGljLWtleScpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdraWQnLCBrZXlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBQdWJsaWMgS2V5IGNvbmZpZ3VyZWQgZm9yIHZlcmlmeWluZyB0aGUgSlNPTiBXZWIgVG9rZW5zIChKV1QpIGlzc3VlZCBieSB0aGUgTG9naW4gQVBJIGJ5IHRoZSBBcHBsaWNhdGlvbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBBcHBsaWNhdGlvbiBmb3Igd2hpY2ggdGhpcyBrZXkgaXMgdXNlZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UHVibGljS2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSldUUHVibGljS2V5QnlBcHBsaWNhdGlvbklkKGFwcGxpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UHVibGljS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8UHVibGljS2V5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3B1YmxpYy1rZXknKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgUHVibGljIEtleXMgY29uZmlndXJlZCBmb3IgdmVyaWZ5aW5nIEpTT04gV2ViIFRva2VucyAoSldUKS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UHVibGljS2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSldUUHVibGljS2V5cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFB1YmxpY0tleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFB1YmxpY0tleVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9wdWJsaWMta2V5JylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBwdWJsaWMga2V5cyB1c2VkIGJ5IEZ1c2lvbkF1dGggdG8gY3J5cHRvZ3JhcGhpY2FsbHkgdmVyaWZ5IEpXVHMgdXNpbmcgdGhlIEpTT04gV2ViIEtleSBmb3JtYXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXS1NSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVKc29uV2ViS2V5U2V0KCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SldLU1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEpXS1NSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnLy53ZWxsLWtub3duL2p3a3MuanNvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUga2V5IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUtleShrZXlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGtleXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUtleXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxLZXlSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXknKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxhbWJkYSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGxhbWJkYUlkIFRoZSBJZCBvZiB0aGUgbGFtYmRhLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVMYW1iZGEobGFtYmRhSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExhbWJkYVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGxhbWJkYUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBsYW1iZGFzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVMYW1iZGFzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgbGFtYmRhcyBmb3IgdGhlIHByb3ZpZGVkIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7TGFtYmRhVHlwZX0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgbGFtYmRhIHRvIHJldHVybi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTGFtYmRhc0J5VHlwZSh0eXBlOiBMYW1iZGFUeXBlKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndHlwZScsIHR5cGUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbG9naW4gcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cy4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gaWQsIGl0IHdpbGwgb25seSByZXR1cm4gdGhlXG4gICAqIGxvZ2luIGNvdW50cyBmb3IgdGhhdCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIGlkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVMb2dpblJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb2dpblJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L2xvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBtZXNzYWdlIHRlbXBsYXRlIGZvciB0aGUgZ2l2ZW4gSWQuIElmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBpZCwgdGhpcyB3aWxsIHJldHVybiBhbGwgdGhlIG1lc3NhZ2UgdGVtcGxhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NhZ2VUZW1wbGF0ZUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBtZXNzYWdlIHRlbXBsYXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzYWdlVGVtcGxhdGUobWVzc2FnZVRlbXBsYXRlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2FnZVRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwcmV2aWV3IG9mIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LCBub3JtYWxpemVkIHRvIGEgZ2l2ZW4gbG9jYWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge1ByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGVtYWlsIHRlbXBsYXRlIGFuZCBvcHRpb25hbGx5IGEgbG9jYWxlIHRvIHJlbmRlciBpdCBpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NhZ2VUZW1wbGF0ZVByZXZpZXcocmVxdWVzdDogUHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlL3ByZXZpZXcnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBtZXNzYWdlIHRlbXBsYXRlcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTWVzc2FnZVRlbXBsYXRlcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIG1lc3NlbmdlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzZW5nZXJJZCBUaGUgSWQgb2YgdGhlIG1lc3Nlbmdlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzZW5nZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2VuZ2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIG1lc3NlbmdlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NlbmdlcnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzZW5nZXInKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIG1vbnRobHkgYWN0aXZlIHVzZXIgcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cy4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gaWQsIGl0IHdpbGwgb25seVxuICAgKiByZXR1cm4gdGhlIG1vbnRobHkgYWN0aXZlIGNvdW50cyBmb3IgdGhhdCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIGlkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TW9udGhseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNb250aGx5QWN0aXZlUmVwb3J0KGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNb250aGx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1vbnRobHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvbW9udGhseS1hY3RpdmUtdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGN1c3RvbSBPQXV0aCBzY29wZS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB0aGUgT0F1dGggc2NvcGUgYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSBzY29wZUlkIFRoZSBJZCBvZiB0aGUgT0F1dGggc2NvcGUgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU9BdXRoU2NvcGUoYXBwbGljYXRpb25JZDogVVVJRCwgc2NvcGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25PQXV0aFNjb3BlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25PQXV0aFNjb3BlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJzY29wZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoc2NvcGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBPYXV0aDIgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uIGZvciB0aGUgZ2l2ZW4gQXBwbGljYXRpb24gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIEFwcGxpY2F0aW9uIHRvIHJldHJpZXZlIE9BdXRoIGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE9BdXRoQ29uZmlndXJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU9hdXRoQ29uZmlndXJhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxPQXV0aENvbmZpZ3VyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxPQXV0aENvbmZpZ3VyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcIm9hdXRoLWNvbmZpZ3VyYXRpb25cIilcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2VsbCBrbm93biBPcGVuSUQgQ29uZmlndXJhdGlvbiBKU09OIGRvY3VtZW50XG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE9wZW5JZENvbmZpZ3VyYXRpb24+Pn1cbiAgICovXG4gIHJldHJpZXZlT3BlbklkQ29uZmlndXJhdGlvbigpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE9wZW5JZENvbmZpZ3VyYXRpb24+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8T3BlbklkQ29uZmlndXJhdGlvbiwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCB2YWxpZGF0aW9uIHJ1bGVzIGZvciBhIHNwZWNpZmljIHRlbmFudC4gVGhpcyBtZXRob2QgcmVxdWlyZXMgYSB0ZW5hbnRJZCB0byBiZSBwcm92aWRlZCBcbiAgICogdGhyb3VnaCB0aGUgdXNlIG9mIGEgVGVuYW50IHNjb3BlZCBBUEkga2V5IG9yIGFuIEhUVFAgaGVhZGVyIFgtRnVzaW9uQXV0aC1UZW5hbnRJZCB0byBzcGVjaWZ5IHRoZSBUZW5hbnQgSWQuXG4gICAqIFxuICAgKiBUaGlzIEFQSSBkb2VzIG5vdCByZXF1aXJlIGFuIEFQSSBrZXkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50L3Bhc3N3b3JkLXZhbGlkYXRpb24tcnVsZXMnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIHZhbGlkYXRpb24gcnVsZXMgZm9yIGEgc3BlY2lmaWMgdGVuYW50LlxuICAgKiBcbiAgICogVGhpcyBBUEkgZG9lcyBub3QgcmVxdWlyZSBhbiBBUEkga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzV2l0aFRlbmFudElkKHRlbmFudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50L3Bhc3N3b3JkLXZhbGlkYXRpb24tcnVsZXMnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNoaWxkcmVuIGZvciB0aGUgZ2l2ZW4gcGFyZW50IGVtYWlsIGFkZHJlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRFbWFpbCBUaGUgZW1haWwgb2YgdGhlIHBhcmVudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UGVuZGluZ1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVBlbmRpbmdDaGlsZHJlbihwYXJlbnRFbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQZW5kaW5nUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UGVuZGluZ1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHkvcGVuZGluZycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdwYXJlbnRFbWFpbCcsIHBhcmVudEVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHBlbmRpbmcgaWRlbnRpdHkgcHJvdmlkZXIgbGluay4gVGhpcyBpcyB1c2VmdWwgdG8gdmFsaWRhdGUgYSBwZW5kaW5nIGxpbmsgYW5kIHJldHJpZXZlIG1ldGEtZGF0YSBhYm91dCB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgbGluay5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBlbmRpbmdMaW5rSWQgVGhlIHBlbmRpbmcgbGluayBJZC5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIG9wdGlvbmFsIHVzZXJJZC4gV2hlbiBwcm92aWRlZCBhZGRpdGlvbmFsIG1ldGEtZGF0YSB3aWxsIGJlIHByb3ZpZGVkIHRvIGlkZW50aWZ5IGhvdyBtYW55IGxpbmtzIGlmIGFueSB0aGUgdXNlciBhbHJlYWR5IGhhcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclBlbmRpbmdMaW5rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUGVuZGluZ0xpbmsocGVuZGluZ0xpbmtJZDogc3RyaW5nLCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJQZW5kaW5nTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJQZW5kaW5nTGlua1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbGluay9wZW5kaW5nJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHBlbmRpbmdMaW5rSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yIG1ldHJpY3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlYWN0b3JNZXRyaWNzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVhY3Rvck1ldHJpY3MoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yTWV0cmljc1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlYWN0b3JNZXRyaWNzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3Rvci9tZXRyaWNzJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBGdXNpb25BdXRoIFJlYWN0b3Igc3RhdHVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVhY3RvclN0YXR1cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlYWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWFjdG9yUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGFzdCBudW1iZXIgb2YgbG9naW4gcmVjb3Jkcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgaW5pdGlhbCByZWNvcmQuIGUuZy4gMCBpcyB0aGUgbGFzdCBsb2dpbiwgMTAwIHdpbGwgYmUgdGhlIDEwMHRoIG1vc3QgcmVjZW50IGxvZ2luLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgKE9wdGlvbmFsLCBkZWZhdWx0cyB0byAxMCkgVGhlIG51bWJlciBvZiByZWNvcmRzIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWNlbnRMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlY2VudExvZ2lucyhvZmZzZXQ6IG51bWJlciwgbGltaXQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWNlbnRMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWNlbnQtbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignb2Zmc2V0Jywgb2Zmc2V0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbGltaXQnLCBsaW1pdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIHJlZnJlc2ggdG9rZW4gYnkgdW5pcXVlIElkLiBUaGlzIGlzIG5vdCB0aGUgc2FtZSB0aGluZyBhcyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSByZWZyZXNoIHRva2VuLiBJZiB5b3UgaGF2ZSB0aGF0LCB5b3UgYWxyZWFkeSBoYXZlIHdoYXQgeW91IG5lZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdG9rZW5JZCBUaGUgSWQgb2YgdGhlIHRva2VuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWZyZXNoVG9rZW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWZyZXNoVG9rZW5CeUlkKHRva2VuSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZnJlc2hUb2tlblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZnJlc2hUb2tlblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodG9rZW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSByZWZyZXNoIHRva2VucyB0aGF0IGJlbG9uZyB0byB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWZyZXNoVG9rZW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWZyZXNoVG9rZW5zKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVmcmVzaFRva2VuUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVmcmVzaFRva2VuUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciByZWdpc3RyYXRpb24gZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkIGFuZCB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlZ2lzdHJhdGlvbih1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSByZWdpc3RyYXRpb24gcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cy4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gaWQsIGl0IHdpbGwgb25seSByZXR1cm5cbiAgICogdGhlIHJlZ2lzdHJhdGlvbiBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlZ2lzdHJhdGlvblJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVnaXN0cmF0aW9uUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHN0YXR1cyBvZiBhIHJlLWluZGV4IHByb2Nlc3MuIEEgc3RhdHVzIGNvZGUgb2YgMjAwIGluZGljYXRlcyB0aGUgcmUtaW5kZXggaXMgaW4gcHJvZ3Jlc3MsIGEgc3RhdHVzIGNvZGUgb2YgIFxuICAgKiA0MDQgaW5kaWNhdGVzIG5vIHJlLWluZGV4IGlzIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXRyaWV2ZVJlaW5kZXhTdGF0dXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vcmVpbmRleCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVTeXN0ZW1Db25maWd1cmF0aW9uKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0tY29uZmlndXJhdGlvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRnVzaW9uQXV0aCBzeXN0ZW0gaGVhbHRoLiBUaGlzIEFQSSB3aWxsIHJldHVybiAyMDAgaWYgdGhlIHN5c3RlbSBpcyBoZWFsdGh5LCBhbmQgNTAwIGlmIHRoZSBzeXN0ZW0gaXMgdW4taGVhbHRoeS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV0cmlldmVTeXN0ZW1IZWFsdGgoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaGVhbHRoJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBGdXNpb25BdXRoIHN5c3RlbSBzdGF0dXMuIFRoaXMgcmVxdWVzdCBpcyBhbm9ueW1vdXMgYW5kIGRvZXMgbm90IHJlcXVpcmUgYW4gQVBJIGtleS4gV2hlbiBhbiBBUEkga2V5IGlzIG5vdCBwcm92aWRlZCB0aGUgcmVzcG9uc2Ugd2lsbCBjb250YWluIGEgc2luZ2xlIHZhbHVlIGluIHRoZSBKU09OIHJlc3BvbnNlIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgaGVhbHRoIGNoZWNrLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTdGF0dXNSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVTeXN0ZW1TdGF0dXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTdGF0dXNSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxTdGF0dXNSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zdGF0dXMnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEZ1c2lvbkF1dGggc3lzdGVtIHN0YXR1cyB1c2luZyBhbiBBUEkga2V5LiBVc2luZyBhbiBBUEkga2V5IHdpbGwgY2F1c2UgdGhlIHJlc3BvbnNlIHRvIGluY2x1ZGUgdGhlIHByb2R1Y3QgdmVyc2lvbiwgaGVhbHRoIGNoZWNrcyBhbmQgdmFyaW91cyBydW50aW1lIG1ldHJpY3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFN0YXR1c1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVN5c3RlbVN0YXR1c1VzaW5nQVBJS2V5KCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U3RhdHVzUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U3RhdHVzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3RhdHVzJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB0ZW5hbnQgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVGVuYW50KHRlbmFudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdGVuYW50cy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVGVuYW50cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRlbmFudFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdGhlbWUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0aGVtZUlkIFRoZSBJZCBvZiB0aGUgdGhlbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVGhlbWUodGhlbWVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUaGVtZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGhlbWVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdGhlbWVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRoZW1lcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdG90YWxzIHJlcG9ydC4gVGhpcyBjb250YWlucyBhbGwgdGhlIHRvdGFsIGNvdW50cyBmb3IgZWFjaCBhcHBsaWNhdGlvbiBhbmQgdGhlIGdsb2JhbCByZWdpc3RyYXRpb25cbiAgICogY291bnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRvdGFsc1JlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRvdGFsUmVwb3J0KCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VG90YWxzUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VG90YWxzUmVwb3J0UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L3RvdGFscycpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHR3by1mYWN0b3IgcmVjb3ZlcnkgY29kZXMgZm9yIGEgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIHJldHJpZXZlIFR3byBGYWN0b3IgcmVjb3ZlcnkgY29kZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVR3b0ZhY3RvclJlY292ZXJ5Q29kZXModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdHdvLWZhY3Rvci9yZWNvdmVyeS1jb2RlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSB1c2VyJ3MgdHdvLWZhY3RvciBzdGF0dXMuXG4gICAqIFxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNlZSBpZiBhIHVzZXIgd2lsbCBuZWVkIHRvIGNvbXBsZXRlIGEgdHdvLWZhY3RvciBjaGFsbGVuZ2UgdG8gY29tcGxldGUgYSBsb2dpbixcbiAgICogYW5kIG9wdGlvbmFsbHkgaWRlbnRpZnkgdGhlIHN0YXRlIG9mIHRoZSB0d28tZmFjdG9yIHRydXN0IGFjcm9zcyB2YXJpb3VzIGFwcGxpY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVzZXIgSWQgdG8gcmV0cmlldmUgdGhlIFR3by1GYWN0b3Igc3RhdHVzLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIG9wdGlvbmFsIGFwcGxpY2F0aW9uSWQgdG8gdmVyaWZ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHdvRmFjdG9yVHJ1c3RJZCBUaGUgb3B0aW9uYWwgdHdvLWZhY3RvciB0cnVzdCBJZCB0byB2ZXJpZnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVR3b0ZhY3RvclN0YXR1cyh1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHR3b0ZhY3RvclRydXN0SWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yU3RhdHVzUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yU3RhdHVzUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3N0YXR1cycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHR3b0ZhY3RvclRydXN0SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgYWN0aW9uIGZvciB0aGUgZ2l2ZW4gSWQuIElmIHlvdSBwYXNzIGluIG51bGwgZm9yIHRoZSBpZCwgdGhpcyB3aWxsIHJldHVybiBhbGwgdGhlIHVzZXJcbiAgICogYWN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgcGFzcyBpbiBudWxsIGZvciB0aGUgaWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIHRoZSB1c2VyXG4gICAqIGFjdGlvbiByZWFzb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25SZWFzb25JZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gcmVhc29uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckFjdGlvblJlYXNvbih1c2VyQWN0aW9uUmVhc29uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25SZWFzb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdXNlciBhY3Rpb24gcmVhc29ucy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb25SZWFzb25zKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbi1yZWFzb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB1c2VyIGFjdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQWN0aW9ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgYnkgYSBjaGFuZ2UgcGFzc3dvcmQgSWQuIFRoZSBpbnRlbmRlZCB1c2Ugb2YgdGhpcyBBUEkgaXMgdG8gcmV0cmlldmUgYSB1c2VyIGFmdGVyIHRoZSBmb3Jnb3RcbiAgICogcGFzc3dvcmQgd29ya2Zsb3cgaGFzIGJlZW4gaW5pdGlhdGVkIGFuZCB5b3UgbWF5IG5vdCBrbm93IHRoZSB1c2VyJ3MgZW1haWwgb3IgdXNlcm5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFuZ2VQYXNzd29yZElkIFRoZSB1bmlxdWUgY2hhbmdlIHBhc3N3b3JkIElkIHRoYXQgd2FzIHNlbnQgdmlhIGVtYWlsIG9yIHJldHVybmVkIGJ5IHRoZSBGb3Jnb3QgUGFzc3dvcmQgQVBJLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckJ5Q2hhbmdlUGFzc3dvcmRJZChjaGFuZ2VQYXNzd29yZElkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2NoYW5nZVBhc3N3b3JkSWQnLCBjaGFuZ2VQYXNzd29yZElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiBlbWFpbC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUVtYWlsKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBmb3IgdGhlIGxvZ2luSWQuIFRoZSBsb2dpbklkIGNhbiBiZSBlaXRoZXIgdGhlIHVzZXJuYW1lIG9yIHRoZSBlbWFpbC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2luSWQgVGhlIGVtYWlsIG9yIHVzZXJuYW1lIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckJ5TG9naW5JZChsb2dpbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWQnLCBsb2dpbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiB1c2VybmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJuYW1lIFRoZSB1c2VybmFtZSBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeVVzZXJuYW1lKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJuYW1lJywgdXNlcm5hbWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBieSBhIHZlcmlmaWNhdGlvbklkLiBUaGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgQVBJIGlzIHRvIHJldHJpZXZlIGEgdXNlciBhZnRlciB0aGUgZm9yZ290XG4gICAqIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZCBhbmQgeW91IG1heSBub3Qga25vdyB0aGUgdXNlcidzIGVtYWlsIG9yIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyaWZpY2F0aW9uSWQgVGhlIHVuaXF1ZSB2ZXJpZmljYXRpb24gSWQgdGhhdCBoYXMgYmVlbiBzZXQgb24gdGhlIHVzZXIgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckJ5VmVyaWZpY2F0aW9uSWQodmVyaWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndmVyaWZpY2F0aW9uSWQnLCB2ZXJpZmljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSB1c2VyX2NvZGUgdGhhdCBpcyBwYXJ0IG9mIGFuIGluLXByb2dyZXNzIERldmljZSBBdXRob3JpemF0aW9uIEdyYW50LlxuICAgKiBcbiAgICogVGhpcyBBUEkgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHlvdXIgb3duIGxvZ2luIHdvcmtmbG93IHRvIGNvbXBsZXRlIGEgZGV2aWNlIGdyYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIFRoZSBjbGllbnQgaWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IFRoZSBjbGllbnQgaWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJDb2RlKGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHVzZXJfY29kZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgdXNlcl9jb2RlKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2RldmljZS91c2VyLWNvZGUnKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgdXNlcl9jb2RlIHRoYXQgaXMgcGFydCBvZiBhbiBpbi1wcm9ncmVzcyBEZXZpY2UgQXV0aG9yaXphdGlvbiBHcmFudC5cbiAgICogXG4gICAqIFRoaXMgQVBJIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBidWlsZCB5b3VyIG93biBsb2dpbiB3b3JrZmxvdyB0byBjb21wbGV0ZSBhIGRldmljZSBncmFudC5cbiAgICogXG4gICAqIFRoaXMgcmVxdWVzdCB3aWxsIHJlcXVpcmUgYW4gQVBJIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJfY29kZSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckNvZGVVc2luZ0FQSUtleSh1c2VyX2NvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvZGV2aWNlL3VzZXItY29kZScpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY29tbWVudHMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb21tZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckNvbW1lbnRzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbW1lbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29tbWVudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb21tZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBzaW5nbGUgVXNlciBjb25zZW50IGJ5IElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJDb25zZW50SWQgVGhlIFVzZXIgY29uc2VudCBJZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJDb25zZW50KHVzZXJDb25zZW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbnNlbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckNvbnNlbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY29uc2VudHMgZm9yIGEgVXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIFVzZXIncyBJZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJDb25zZW50cyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbnNlbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBVc2VySW5mbyBlbmRwb2ludCB0byByZXRyaWV2ZSBVc2VyIENsYWltcyBmcm9tIHRoZSBhY2Nlc3MgdG9rZW4gaXNzdWVkIGJ5IEZ1c2lvbkF1dGguXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlcmluZm9SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VySW5mb0Zyb21BY2Nlc3NUb2tlbihlbmNvZGVkSldUOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJpbmZvUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8VXNlcmluZm9SZXNwb25zZSwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi91c2VyaW5mbycpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHNpbmdsZSBJZGVudGl0eSBQcm92aWRlciB1c2VyIChsaW5rKS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGl0eVByb3ZpZGVyVXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIgaW4gdGhlIDNyZCBwYXJ0eSBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJMaW5rKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCwgaWRlbnRpdHlQcm92aWRlclVzZXJJZDogc3RyaW5nLCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xpbmsnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRlbnRpdHlQcm92aWRlcklkJywgaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRlbnRpdHlQcm92aWRlclVzZXJJZCcsIGlkZW50aXR5UHJvdmlkZXJVc2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGFsbCBJZGVudGl0eSBQcm92aWRlciB1c2VycyAobGlua3MpIGZvciB0aGUgdXNlci4gU3BlY2lmeSB0aGUgb3B0aW9uYWwgaWRlbnRpdHlQcm92aWRlcklkIHRvIHJldHJpZXZlIGxpbmtzIGZvciBhIHBhcnRpY3VsYXIgSWRQLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLiBTcGVjaWZ5IHRoaXMgdmFsdWUgdG8gcmVkdWNlIHRoZSBsaW5rcyByZXR1cm5lZCB0byB0aG9zZSBmb3IgYSBwYXJ0aWN1bGFyIElkUC5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyTGlua3NCeVVzZXJJZChpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbGluaycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZGVudGl0eVByb3ZpZGVySWQnLCBpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbG9naW4gcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cyBmb3IgYSBwYXJ0aWN1bGFyIHVzZXIgYnkgSWQuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIGlkLCBpdCB3aWxsIG9ubHkgcmV0dXJuIHRoZVxuICAgKiBsb2dpbiBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVzZXJJZCBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckxvZ2luUmVwb3J0KGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHVzZXJJZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXBvcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC9sb2dpbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbG9naW4gcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cyBmb3IgYSBwYXJ0aWN1bGFyIHVzZXIgYnkgbG9naW4gSWQuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIGlkLCBpdCB3aWxsIG9ubHkgcmV0dXJuIHRoZVxuICAgKiBsb2dpbiBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2luSWQgVGhlIHVzZXJJZCBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckxvZ2luUmVwb3J0QnlMb2dpbklkKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIGxvZ2luSWQ6IHN0cmluZywgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXBvcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC9sb2dpbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWQnLCBsb2dpbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsYXN0IG51bWJlciBvZiBsb2dpbiByZWNvcmRzIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgaW5pdGlhbCByZWNvcmQuIGUuZy4gMCBpcyB0aGUgbGFzdCBsb2dpbiwgMTAwIHdpbGwgYmUgdGhlIDEwMHRoIG1vc3QgcmVjZW50IGxvZ2luLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgKE9wdGlvbmFsLCBkZWZhdWx0cyB0byAxMCkgVGhlIG51bWJlciBvZiByZWNvcmRzIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWNlbnRMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJSZWNlbnRMb2dpbnModXNlcklkOiBVVUlELCBvZmZzZXQ6IG51bWJlciwgbGltaXQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWNlbnRMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWNlbnQtbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignb2Zmc2V0Jywgb2Zmc2V0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbGltaXQnLCBsaW1pdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gSWQuIFRoaXMgbWV0aG9kIGRvZXMgbm90IHVzZSBhbiBBUEkga2V5LCBpbnN0ZWFkIGl0IHVzZXMgYSBKU09OIFdlYiBUb2tlbiAoSldUKSBmb3IgYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJVc2luZ0pXVChlbmNvZGVkSldUOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRnVzaW9uQXV0aCB2ZXJzaW9uIHN0cmluZy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyc2lvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVZlcnNpb24oKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJzaW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyc2lvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL3ZlcnNpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIFdlYkF1dGhuIGNyZWRlbnRpYWwgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZCBUaGUgSWQgb2YgdGhlIFdlYkF1dGhuIGNyZWRlbnRpYWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVdlYkF1dGhuQ3JlZGVudGlhbChpZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5DcmVkZW50aWFsUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViQXV0aG5DcmVkZW50aWFsUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBXZWJBdXRobiBjcmVkZW50aWFscyBmb3IgdGhlIGdpdmVuIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1c2VyJ3MgSUQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVdlYkF1dGhuQ3JlZGVudGlhbHNGb3JVc2VyKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5DcmVkZW50aWFsUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViQXV0aG5DcmVkZW50aWFsUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgd2ViaG9vayBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgcGFzcyBpbiBudWxsIGZvciB0aGUgaWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIHRoZSB3ZWJob29rcy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB3ZWJob29rSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHdlYmhvb2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVXZWJob29rKHdlYmhvb2tJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHdlYmhvb2tJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIHdlYmhvb2sgYXR0ZW1wdCBsb2cgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB3ZWJob29rQXR0ZW1wdExvZ0lkIFRoZSBJZCBvZiB0aGUgd2ViaG9vayBhdHRlbXB0IGxvZyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va0F0dGVtcHRMb2dSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVXZWJob29rQXR0ZW1wdExvZyh3ZWJob29rQXR0ZW1wdExvZ0lkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rQXR0ZW1wdExvZ1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tBdHRlbXB0TG9nUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vd2ViaG9vay1hdHRlbXB0LWxvZycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh3ZWJob29rQXR0ZW1wdExvZ0lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBzaW5nbGUgd2ViaG9vayBldmVudCBsb2cgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB3ZWJob29rRXZlbnRMb2dJZCBUaGUgSWQgb2YgdGhlIHdlYmhvb2sgZXZlbnQgbG9nIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rRXZlbnRMb2dSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVXZWJob29rRXZlbnRMb2cod2ViaG9va0V2ZW50TG9nSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tFdmVudExvZ1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tFdmVudExvZ1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL3dlYmhvb2stZXZlbnQtbG9nJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHdlYmhvb2tFdmVudExvZ0lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB3ZWJob29rcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVdlYmhvb2tzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyByZWZyZXNoIHRva2Vucy5cbiAgICogXG4gICAqIFVzYWdlIGV4YW1wbGVzOlxuICAgKiAgIC0gRGVsZXRlIGEgc2luZ2xlIHJlZnJlc2ggdG9rZW4sIHBhc3MgaW4gb25seSB0aGUgdG9rZW4uXG4gICAqICAgICAgIHJldm9rZVJlZnJlc2hUb2tlbih0b2tlbilcbiAgICogXG4gICAqICAgLSBEZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvciBhIHVzZXIsIHBhc3MgaW4gb25seSB0aGUgdXNlcklkLlxuICAgKiAgICAgICByZXZva2VSZWZyZXNoVG9rZW4obnVsbCwgdXNlcklkKVxuICAgKiBcbiAgICogICAtIERlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yIGEgdXNlciBmb3IgYSBzcGVjaWZpYyBhcHBsaWNhdGlvbiwgcGFzcyBpbiBib3RoIHRoZSB1c2VySWQgYW5kIHRoZSBhcHBsaWNhdGlvbklkLlxuICAgKiAgICAgICByZXZva2VSZWZyZXNoVG9rZW4obnVsbCwgdXNlcklkLCBhcHBsaWNhdGlvbklkKVxuICAgKiBcbiAgICogICAtIERlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yIGFuIGFwcGxpY2F0aW9uXG4gICAqICAgICAgIHJldm9rZVJlZnJlc2hUb2tlbihudWxsLCBudWxsLCBhcHBsaWNhdGlvbklkKVxuICAgKiBcbiAgICogTm90ZTogPGNvZGU+bnVsbDwvY29kZT4gbWF5IGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIHVwb24gdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlLlxuICAgKiBcbiAgICogU2VlIGFsc286IChtZXRob2QgbmFtZXMgbWF5IHZhcnkgYnkgbGFuZ3VhZ2UuLi4gYnV0IHlvdSdsbCBmaWd1cmUgaXQgb3V0KVxuICAgKiBcbiAgICogIC0gcmV2b2tlUmVmcmVzaFRva2VuQnlJZFxuICAgKiAgLSByZXZva2VSZWZyZXNoVG9rZW5CeVRva2VuXG4gICAqICAtIHJldm9rZVJlZnJlc2hUb2tlbnNCeVVzZXJJZFxuICAgKiAgLSByZXZva2VSZWZyZXNoVG9rZW5zQnlBcHBsaWNhdGlvbklkXG4gICAqICAtIHJldm9rZVJlZnJlc2hUb2tlbnNCeVVzZXJJZEZvckFwcGxpY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiAoT3B0aW9uYWwpIFRoZSByZWZyZXNoIHRva2VuIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgdXNlciBJZCB3aG9zZSB0b2tlbnMgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gSWQgb2YgdGhlIHRva2VucyB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbih0b2tlbjogc3RyaW5nLCB1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3Rva2VuJywgdG9rZW4pXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyBhIHNpbmdsZSByZWZyZXNoIHRva2VuIGJ5IHRoZSB1bmlxdWUgSWQuIFRoZSB1bmlxdWUgSWQgaXMgbm90IHNlbnNpdGl2ZSBhcyBpdCBjYW5ub3QgYmUgdXNlZCB0byBvYnRhaW4gYW5vdGhlciBKV1QuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdG9rZW5JZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB0b2tlbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbkJ5SWQodG9rZW5JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodG9rZW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyBhIHNpbmdsZSByZWZyZXNoIHRva2VuIGJ5IHVzaW5nIHRoZSBhY3R1YWwgcmVmcmVzaCB0b2tlbiB2YWx1ZS4gVGhpcyByZWZyZXNoIHRva2VuIHZhbHVlIGlzIHNlbnNpdGl2ZSwgc28gIGJlIGNhcmVmdWwgd2l0aCB0aGlzIEFQSSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gVGhlIHJlZnJlc2ggdG9rZW4gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VSZWZyZXNoVG9rZW5CeVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3Rva2VuJywgdG9rZW4pXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBhbGwgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gYW4gYXBwbGljYXRpb24gYnkgYXBwbGljYXRpb25JZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIGFsbCByZWZyZXNoIHRva2VucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbnNCeUFwcGxpY2F0aW9uSWQoYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBhbGwgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gYSB1c2VyIGJ5IHVzZXIgSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc0J5VXNlcklkKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2UgYWxsIHJlZnJlc2ggdG9rZW5zIHRoYXQgYmVsb25nIHRvIGEgdXNlciBieSB1c2VyIElkIGZvciBhIHNwZWNpZmljIGFwcGxpY2F0aW9uIGJ5IGFwcGxpY2F0aW9uSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc0J5VXNlcklkRm9yQXBwbGljYXRpb24odXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyByZWZyZXNoIHRva2VucyB1c2luZyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIEpTT04gYm9keS4gVGhlIGhhbmRsaW5nIGZvciB0aGlzIG1ldGhvZCBpcyB0aGUgc2FtZSBhcyB0aGUgcmV2b2tlUmVmcmVzaFRva2VuIG1ldGhvZFxuICAgKiBhbmQgaXMgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHlvdSBwcm92aWRlIGluIHRoZSBSZWZyZXNoRGVsZXRlUmVxdWVzdCBvYmplY3QuIFNlZSB0aGF0IG1ldGhvZCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtSZWZyZXNoVG9rZW5SZXZva2VSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IGluZm9ybWF0aW9uIHVzZWQgdG8gcmV2b2tlIHRoZSByZWZyZXNoIHRva2Vucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc1dpdGhSZXF1ZXN0KHJlcXVlc3Q6IFJlZnJlc2hUb2tlblJldm9rZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2VzIGEgc2luZ2xlIFVzZXIgY29uc2VudCBieSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIFRoZSBVc2VyIENvbnNlbnQgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQ29uc2VudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hBcHBsaWNhdGlvbnMocmVxdWVzdDogQXBwbGljYXRpb25TZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbi9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgYXVkaXQgbG9ncyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QXVkaXRMb2dTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEF1ZGl0TG9ncyhyZXF1ZXN0OiBBdWRpdExvZ1NlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXVkaXRMb2dTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9hdWRpdC1sb2cvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgY29uc2VudHMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbnNlbnRTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoQ29uc2VudHMocmVxdWVzdDogQ29uc2VudFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25zZW50U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50L3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGVtYWlsIHRlbXBsYXRlcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RW1haWxUZW1wbGF0ZVNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFbWFpbFRlbXBsYXRlcyhyZXF1ZXN0OiBFbWFpbFRlbXBsYXRlU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVtYWlsVGVtcGxhdGVTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGVudGl0aWVzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtFbnRpdHlTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFbnRpdGllcyhyZXF1ZXN0OiBFbnRpdHlTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGVudGl0aWVzIGZvciB0aGUgZ2l2ZW4gaWRzLiBJZiBhbnkgSWQgaXMgaW52YWxpZCwgaXQgaXMgaWdub3JlZC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBpZHMgVGhlIGVudGl0eSBpZHMgdG8gc2VhcmNoIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEVudGl0aWVzQnlJZHMoaWRzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS9zZWFyY2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRzJywgaWRzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBFbnRpdHkgR3JhbnRzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtFbnRpdHlHcmFudFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5R3JhbnRTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoRW50aXR5R3JhbnRzKHJlcXVlc3Q6IEVudGl0eUdyYW50U2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5R3JhbnRTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlHcmFudFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L2dyYW50L3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSBlbnRpdHkgdHlwZXMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoRW50aXR5VHlwZXMocmVxdWVzdDogRW50aXR5VHlwZVNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZS9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgZXZlbnQgbG9ncyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRMb2dTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEV2ZW50TG9nU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEV2ZW50TG9ncyhyZXF1ZXN0OiBFdmVudExvZ1NlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEV2ZW50TG9nU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RXZlbnRMb2dTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9ldmVudC1sb2cvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgZ3JvdXAgbWVtYmVycyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7R3JvdXBNZW1iZXJTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwTWVtYmVyU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEdyb3VwTWVtYmVycyhyZXF1ZXN0OiBHcm91cE1lbWJlclNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwTWVtYmVyU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBNZW1iZXJTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwL21lbWJlci9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBncm91cHMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0dyb3VwU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hHcm91cHMocmVxdWVzdDogR3JvdXBTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEdyb3VwU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdHMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0lQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoSVBBY2Nlc3NDb250cm9sTGlzdHMocmVxdWVzdDogSVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pcC1hY2wvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgaWRlbnRpdHkgcHJvdmlkZXJzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaElkZW50aXR5UHJvdmlkZXJzKHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlclNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMga2V5cyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoS2V5cyhyZXF1ZXN0OiBLZXlTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxLZXlTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleS9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBsYW1iZGFzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtMYW1iZGFTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hMYW1iZGFzKHJlcXVlc3Q6IExhbWJkYVNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExhbWJkYVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSBsb2dpbiByZWNvcmRzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtMb2dpblJlY29yZFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZWNvcmRTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoTG9naW5SZWNvcmRzKHJlcXVlc3Q6IExvZ2luUmVjb3JkU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZWNvcmRTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb2dpblJlY29yZFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2xvZ2luLXJlY29yZC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0ZW5hbnRzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtUZW5hbnRTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hUZW5hbnRzKHJlcXVlc3Q6IFRlbmFudFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRlbmFudFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50L3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZW1lcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VGhlbWVTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaFRoZW1lcyhyZXF1ZXN0OiBUaGVtZVNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHVzZXIgY29tbWVudHMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VzZXJDb21tZW50U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29tbWVudFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hVc2VyQ29tbWVudHMocmVxdWVzdDogVXNlckNvbW1lbnRTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29tbWVudFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb21tZW50U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbW1lbnQvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIGlkcy4gSWYgYW55IElkIGlzIGludmFsaWQsIGl0IGlzIGlnbm9yZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gaWRzIFRoZSB1c2VyIGlkcyB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHNlYXJjaFVzZXJzQnlJZHMsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VhcmNoVXNlcnMoaWRzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkcycsIGlkcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIGlkcy4gSWYgYW55IElkIGlzIGludmFsaWQsIGl0IGlzIGlnbm9yZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gaWRzIFRoZSB1c2VyIGlkcyB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoVXNlcnNCeUlkcyhpZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9zZWFyY2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRzJywgaWRzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXJzIGZvciB0aGUgZ2l2ZW4gc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBjb25zdHJhaW50cy4gRmllbGRzIHVzZWQ6IGlkcywgcXVlcnksIHF1ZXJ5U3RyaW5nLCBudW1iZXJPZlJlc3VsdHMsIG9yZGVyQnksIHN0YXJ0Um93LFxuICAgKiAgICBhbmQgc29ydEZpZWxkcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaFVzZXJzQnlRdWVyeShyZXF1ZXN0OiBTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gY29uc3RyYWludHMuIEZpZWxkcyB1c2VkOiBpZHMsIHF1ZXJ5LCBxdWVyeVN0cmluZywgbnVtYmVyT2ZSZXN1bHRzLCBvcmRlckJ5LCBzdGFydFJvdyxcbiAgICogICAgYW5kIHNvcnRGaWVsZHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gc2VhcmNoVXNlcnNCeVF1ZXJ5LCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHNlYXJjaFVzZXJzQnlRdWVyeVN0cmluZyhyZXF1ZXN0OiBTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlIHdlYmhvb2sgZXZlbnQgbG9ncyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViaG9va0V2ZW50TG9nU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rRXZlbnRMb2dTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoV2ViaG9va0V2ZW50TG9ncyhyZXF1ZXN0OiBXZWJob29rRXZlbnRMb2dTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rRXZlbnRMb2dTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJob29rRXZlbnRMb2dTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS93ZWJob29rLWV2ZW50LWxvZy9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB3ZWJob29rcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViaG9va1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1NlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hXZWJob29rcyhyZXF1ZXN0OiBXZWJob29rU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1NlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2svc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhbiBlbWFpbCB1c2luZyBhbiBlbWFpbCB0ZW1wbGF0ZSBpZC4gWW91IGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgPGNvZGU+cmVxdWVzdERhdGE8L2NvZGU+IHRvIGFjY2VzcyBrZXkgdmFsdWVcbiAgICogcGFpcnMgaW4gdGhlIGVtYWlsIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCBUaGUgSWQgZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIHtTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VuZCBlbWFpbCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZW5kUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlbmRFbWFpbChlbWFpbFRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IFNlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZW5kUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VuZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvc2VuZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIG91dCBhbiBlbWFpbCB0byBhIHBhcmVudCB0aGF0IHRoZXkgbmVlZCB0byByZWdpc3RlciBhbmQgY3JlYXRlIGEgZmFtaWx5IG9yIG5lZWQgdG8gbG9nIGluIGFuZCBhZGQgYSBjaGlsZCB0byB0aGVpciBleGlzdGluZyBmYW1pbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7RmFtaWx5RW1haWxSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwYXJlbnQgZW1haWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRGYW1pbHlSZXF1ZXN0RW1haWwocmVxdWVzdDogRmFtaWx5RW1haWxSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseS9yZXF1ZXN0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIHBhc3N3b3JkbGVzcyBhdXRoZW50aWNhdGlvbiBjb2RlIGluIGFuIGVtYWlsIHRvIGNvbXBsZXRlIGxvZ2luLlxuICAgKlxuICAgKiBAcGFyYW0ge1Bhc3N3b3JkbGVzc1NlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBwYXNzd29yZGxlc3Mgc2VuZCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgYW4gZW1haWwgY29udGFpbmluZyBhIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRQYXNzd29yZGxlc3NDb2RlKHJlcXVlc3Q6IFBhc3N3b3JkbGVzc1NlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9wYXNzd29yZGxlc3Mvc2VuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGNvZGUgdG8gYXNzaXN0IGluIHNldHRpbmcgdXAgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBvciBkaXNhYmxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yU2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBzZW5kVHdvRmFjdG9yQ29kZUZvckVuYWJsZURpc2FibGUsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VuZFR3b0ZhY3RvckNvZGUocmVxdWVzdDogVHdvRmFjdG9yU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGNvZGUgdG8gYXNzaXN0IGluIHNldHRpbmcgdXAgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBvciBkaXNhYmxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yU2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRUd29GYWN0b3JDb2RlRm9yRW5hYmxlRGlzYWJsZShyZXF1ZXN0OiBUd29GYWN0b3JTZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZW5kJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gY29kZSB0byBhbGxvdyB0aGUgY29tcGxldGlvbiBvZiBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHdvRmFjdG9ySWQgVGhlIElkIHJldHVybmVkIGJ5IHRoZSBMb2dpbiBBUEkgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBzZW5kVHdvRmFjdG9yQ29kZUZvckxvZ2luVXNpbmdNZXRob2QsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VuZFR3b0ZhY3RvckNvZGVGb3JMb2dpbih0d29GYWN0b3JJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlbmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodHdvRmFjdG9ySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBjb2RlIHRvIGFsbG93IHRoZSBjb21wbGV0aW9uIG9mIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0d29GYWN0b3JJZCBUaGUgSWQgcmV0dXJuZWQgYnkgdGhlIExvZ2luIEFQSSBuZWNlc3NhcnkgdG8gY29tcGxldGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHBhcmFtIHtUd29GYWN0b3JTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgVHdvIEZhY3RvciBzZW5kIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gc2VuZCB0aGUgVHdvIEZhY3RvciBjb2RlIHRvIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBzZW5kVHdvRmFjdG9yQ29kZUZvckxvZ2luVXNpbmdNZXRob2QodHdvRmFjdG9ySWQ6IHN0cmluZywgcmVxdWVzdDogVHdvRmFjdG9yU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VuZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0d29GYWN0b3JJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQmVnaW5zIGEgbG9naW4gcmVxdWVzdCBmb3IgYSAzcmQgcGFydHkgbG9naW4gdGhhdCByZXF1aXJlcyB1c2VyIGludGVyYWN0aW9uIHN1Y2ggYXMgSFlQUi5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIHRoaXJkLXBhcnR5IGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0aGlyZC1wYXJ0eSBsb2dpblxuICAgKiAgICBwcm92aWRlcnMgdGhhdCBGdXNpb25BdXRoIHVzZXMgdG8gcmVjb25jaWxlIHRoZSB1c2VyJ3MgYWNjb3VudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgc3RhcnRJZGVudGl0eVByb3ZpZGVyTG9naW4ocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9zdGFydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QgYnkgZ2VuZXJhdGluZyBhIHBhc3N3b3JkbGVzcyBjb2RlLiBUaGlzIGNvZGUgY2FuIGJlIHNlbnQgdG8gdGhlIFVzZXIgdXNpbmcgdGhlIFNlbmRcbiAgICogUGFzc3dvcmRsZXNzIENvZGUgQVBJIG9yIHVzaW5nIGEgbWVjaGFuaXNtIG91dHNpZGUgb2YgRnVzaW9uQXV0aC4gVGhlIHBhc3N3b3JkbGVzcyBsb2dpbiBpcyBjb21wbGV0ZWQgYnkgdXNpbmcgdGhlIFBhc3N3b3JkbGVzcyBMb2dpbiBBUEkgd2l0aCB0aGlzIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFzc3dvcmRsZXNzU3RhcnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBwYXNzd29yZGxlc3Mgc3RhcnQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBiZWdpbiB0aGUgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0UGFzc3dvcmRsZXNzTG9naW4ocmVxdWVzdDogUGFzc3dvcmRsZXNzU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZGxlc3NTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9wYXNzd29yZGxlc3Mvc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIFR3by1GYWN0b3IgbG9naW4gcmVxdWVzdCBieSBnZW5lcmF0aW5nIGEgdHdvLWZhY3RvciBpZGVudGlmaWVyLiBUaGlzIGNvZGUgY2FuIHRoZW4gYmUgc2VudCB0byB0aGUgVHdvIEZhY3RvciBTZW5kIFxuICAgKiBBUEkgKC9hcGkvdHdvLWZhY3Rvci9zZW5kKWluIG9yZGVyIHRvIHNlbmQgYSBvbmUtdGltZSB1c2UgY29kZSB0byBhIHVzZXIuIFlvdSBjYW4gYWxzbyB1c2Ugb25lLXRpbWUgdXNlIGNvZGUgcmV0dXJuZWQgXG4gICAqIHRvIHNlbmQgdGhlIGNvZGUgb3V0LW9mLWJhbmQuIFRoZSBUd28tRmFjdG9yIGxvZ2luIGlzIGNvbXBsZXRlZCBieSBtYWtpbmcgYSByZXF1ZXN0IHRvIHRoZSBUd28tRmFjdG9yIExvZ2luIFxuICAgKiBBUEkgKC9hcGkvdHdvLWZhY3Rvci9sb2dpbikuIHdpdGggdGhlIHR3by1mYWN0b3IgaWRlbnRpZmllciBhbmQgdGhlIG9uZS10aW1lIHVzZSBjb2RlLlxuICAgKiBcbiAgICogVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYWxsb3cgeW91IHRvIGJlZ2luIGEgVHdvLUZhY3RvciBsb2dpbiBvdXRzaWRlIGEgbm9ybWFsIGxvZ2luIHRoYXQgb3JpZ2luYXRlZCBmcm9tIHRoZSBMb2dpbiBBUEkgKC9hcGkvbG9naW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclN0YXJ0UmVxdWVzdH0gcmVxdWVzdCBUaGUgVHdvLUZhY3RvciBzdGFydCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGJlZ2luIHRoZSBUd28tRmFjdG9yIGxvZ2luIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0VHdvRmFjdG9yTG9naW4ocmVxdWVzdDogVHdvRmFjdG9yU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclN0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3N0YXJ0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBXZWJBdXRobiBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueSBieSBnZW5lcmF0aW5nIGEgbmV3IGNoYWxsZW5nZSBmb3IgdGhlIHVzZXJcbiAgICpcbiAgICogQHBhcmFtIHtXZWJBdXRoblN0YXJ0UmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3Igc3RhcnRpbmcgdGhlIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuU3RhcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgc3RhcnRXZWJBdXRobkxvZ2luKHJlcXVlc3Q6IFdlYkF1dGhuU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRoblN0YXJ0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViQXV0aG5TdGFydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueSBieSBnZW5lcmF0aW5nIGEgbmV3IGNoYWxsZW5nZSBmb3IgdGhlIHVzZXJcbiAgICpcbiAgICogQHBhcmFtIHtXZWJBdXRoblJlZ2lzdGVyU3RhcnRSZXF1ZXN0fSByZXF1ZXN0IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgbmVjZXNzYXJ5IGZvciBzdGFydGluZyB0aGUgcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlc3BvbnNlPj59XG4gICAqL1xuICBzdGFydFdlYkF1dGhuUmVnaXN0cmF0aW9uKHJlcXVlc3Q6IFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vcmVnaXN0ZXIvc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBsb2dpbiB1c2luZyBhIDJGQSBjaGFsbGVuZ2VcbiAgICpcbiAgICogQHBhcmFtIHtUd29GYWN0b3JMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlciBjcmVkZW50aWFscyB1c2VkIHRvIGxvZyB0aGVtIGluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICB0d29GYWN0b3JMb2dpbihyZXF1ZXN0OiBUd29GYWN0b3JMb2dpblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3IvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGFuIEFQSSBrZXkgYnkgZ2l2ZW4gaWRcbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcGlLZXlJZCBUaGUgSWQgb2YgdGhlIEFQSSBrZXkgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0FQSUtleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgQVBJIEtleS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUFQSUtleShhcGlLZXlJZDogVVVJRCwgcmVxdWVzdDogQVBJS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QVBJS2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwaUtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgYXBwbGljYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBhcHBsaWNhdGlvbiByb2xlIHdpdGggdGhlIGdpdmVuIElkIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIHJvbGUgYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSByb2xlSWQgVGhlIElkIG9mIHRoZSByb2xlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyByb2xlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVBcHBsaWNhdGlvblJvbGUoYXBwbGljYXRpb25JZDogVVVJRCwgcm9sZUlkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInJvbGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHJvbGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb25uZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgVGhlIElkIG9mIHRoZSBjb25uZWN0b3IgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0Nvbm5lY3RvclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgY29ubmVjdG9yIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlQ29ubmVjdG9yKGNvbm5lY3RvcklkOiBVVUlELCByZXF1ZXN0OiBDb25uZWN0b3JSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25uZWN0b3JSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25uZWN0b3JJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb25zZW50IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCBUaGUgSWQgb2YgdGhlIGNvbnNlbnQgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0NvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgY29uc2VudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVDb25zZW50KGNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBlbWFpbCB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW1haWxUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBlbWFpbCB0ZW1wbGF0ZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogRW1haWxUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgRW50aXR5IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbnRpdHlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgRW50aXR5IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRW50aXR5KGVudGl0eUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBFbnRpdHkgVHlwZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBFbnRpdHkgVHlwZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGVybWlzc2lvbiB3aXRoIHRoZSBnaXZlbiBJZCBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIGVudGl0eVR5cGUgdGhhdCB0aGUgcGVybWlzc2lvbiBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHBlcm1pc3Npb25JZCBUaGUgSWQgb2YgdGhlIHBlcm1pc3Npb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgcGVybWlzc2lvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVFbnRpdHlUeXBlUGVybWlzc2lvbihlbnRpdHlUeXBlSWQ6IFVVSUQsIHBlcm1pc3Npb25JZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInBlcm1pc3Npb25cIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHBlcm1pc3Npb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBmb3JtIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZvcm1JZCBUaGUgSWQgb2YgdGhlIGZvcm0gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0Zvcm1SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IGZvcm0gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRm9ybShmb3JtSWQ6IFVVSUQsIHJlcXVlc3Q6IEZvcm1SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmb3JtSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZm9ybSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmaWVsZElkIFRoZSBJZCBvZiB0aGUgZm9ybSBmaWVsZCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Rm9ybUZpZWxkUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBmb3JtIGZpZWxkIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRm9ybUZpZWxkKGZpZWxkSWQ6IFVVSUQsIHJlcXVlc3Q6IEZvcm1GaWVsZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1GaWVsZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybS9maWVsZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmaWVsZElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGdyb3VwIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgVGhlIElkIG9mIHRoZSBncm91cCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7R3JvdXBSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgZ3JvdXAgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUdyb3VwKGdyb3VwSWQ6IFVVSUQsIHJlcXVlc3Q6IEdyb3VwUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbWVtYmVyIGluIGEgZ3JvdXAuXG4gICAqXG4gICAqIEBwYXJhbSB7TWVtYmVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBncm91cCBtZW1iZXIocykuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lbWJlclJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVHcm91cE1lbWJlcnMocmVxdWVzdDogTWVtYmVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVtYmVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVtYmVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cC9tZW1iZXInKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3Qgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYWNjZXNzQ29udHJvbExpc3RJZCBUaGUgSWQgb2YgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3QgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0lQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVJUEFjY2Vzc0NvbnRyb2xMaXN0KGFjY2Vzc0NvbnRyb2xMaXN0SWQ6IFVVSUQsIHJlcXVlc3Q6IElQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjY2Vzc0NvbnRyb2xMaXN0SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIFRoZSBJZCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSB1cGRhdGVkIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUlkZW50aXR5UHJvdmlkZXIoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCByZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBhdmFpbGFibGUgaW50ZWdyYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0ludGVncmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IGludGVncmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRlZ3JhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVJbnRlZ3JhdGlvbnMocmVxdWVzdDogSW50ZWdyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRlZ3JhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEludGVncmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pbnRlZ3JhdGlvbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUga2V5IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUga2V5IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcga2V5IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlS2V5KGtleUlkOiBVVUlELCByZXF1ZXN0OiBLZXlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsYW1iZGEgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbGFtYmRhSWQgVGhlIElkIG9mIHRoZSBsYW1iZGEgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0xhbWJkYVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBsYW1iZGEgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVMYW1iZGEobGFtYmRhSWQ6IFVVSUQsIHJlcXVlc3Q6IExhbWJkYVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExhbWJkYVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGxhbWJkYUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2FnZVRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgbWVzc2FnZSB0ZW1wbGF0ZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZU1lc3NhZ2VUZW1wbGF0ZShtZXNzYWdlVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NhZ2VUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIG1lc3NlbmdlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzZW5nZXJJZCBUaGUgSWQgb2YgdGhlIG1lc3NlbmdlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TWVzc2VuZ2VyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBtZXNzZW5nZXIgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVNZXNzZW5nZXIobWVzc2VuZ2VySWQ6IFVVSUQsIHJlcXVlc3Q6IE1lc3NlbmdlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NlbmdlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NlbmdlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIE9BdXRoIHNjb3BlIHdpdGggdGhlIGdpdmVuIElkIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIE9BdXRoIHNjb3BlIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gc2NvcGVJZCBUaGUgSWQgb2YgdGhlIE9BdXRoIHNjb3BlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgT0F1dGggc2NvcGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVPQXV0aFNjb3BlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHNjb3BlSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwic2NvcGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHNjb3BlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZCBhbmQgdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQgaW4gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB3aG9zZSByZWdpc3RyYXRpb24gaXMgZ29pbmcgdG8gYmUgdXBkYXRlZC5cbiAgICogQHBhcmFtIHtSZWdpc3RyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlUmVnaXN0cmF0aW9uKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogUmVnaXN0cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVnaXN0cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7U3lzdGVtQ29uZmlndXJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBzeXN0ZW0gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVTeXN0ZW1Db25maWd1cmF0aW9uKHJlcXVlc3Q6IFN5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtLWNvbmZpZ3VyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHRlbmFudCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VGVuYW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IHRlbmFudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVRlbmFudCh0ZW5hbnRJZDogVVVJRCwgcmVxdWVzdDogVGVuYW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdGhlbWUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGhlbWVJZCBUaGUgSWQgb2YgdGhlIHRoZW1lIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtUaGVtZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyB0aGVtZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlVGhlbWUodGhlbWVJZDogVVVJRCwgcmVxdWVzdDogVGhlbWVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0aGVtZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VXNlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyB1c2VyIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVVzZXIodXNlcklkOiBVVUlELCByZXF1ZXN0OiBVc2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgYWN0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtVc2VyQWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IHVzZXIgYWN0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvblJlYXNvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gcmVhc29uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtVc2VyQWN0aW9uUmVhc29uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IHVzZXIgYWN0aW9uIHJlYXNvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVVc2VyQWN0aW9uUmVhc29uKHVzZXJBY3Rpb25SZWFzb25JZDogVVVJRCwgcmVxdWVzdDogVXNlckFjdGlvblJlYXNvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbi1yZWFzb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvblJlYXNvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBzaW5nbGUgVXNlciBjb25zZW50IGJ5IElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJDb25zZW50SWQgVGhlIFVzZXIgQ29uc2VudCBJZFxuICAgKiBAcGFyYW0ge1VzZXJDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNvbnNlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVVzZXJDb25zZW50KHVzZXJDb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJDb25zZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJDb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgd2ViaG9vayB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB3ZWJob29rSWQgVGhlIElkIG9mIHRoZSB3ZWJob29rIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtXZWJob29rUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IHdlYmhvb2sgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlV2ViaG9vayh3ZWJob29rSWQ6IFVVSUQsIHJlcXVlc3Q6IFdlYmhvb2tSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViaG9vaycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh3ZWJob29rSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBvciB1cGRhdGVzIGFuIEVudGl0eSBHcmFudC4gVGhpcyBpcyB3aGVuIGEgVXNlci9FbnRpdHkgaXMgZ3JhbnRlZCBwZXJtaXNzaW9ucyB0byBhbiBFbnRpdHkuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgdGhhdCB0aGUgVXNlci9FbnRpdHkgaXMgYmVpbmcgZ3JhbnRlZCBhY2Nlc3MgdG8uXG4gICAqIEBwYXJhbSB7RW50aXR5R3JhbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIEVudGl0eSBHcmFudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdXBzZXJ0RW50aXR5R3JhbnQoZW50aXR5SWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eUdyYW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJncmFudFwiKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGVuZC11c2VyIHByb3ZpZGVkIHVzZXJfY29kZSBmcm9tIHRoZSB1c2VyLWludGVyYWN0aW9uIG9mIHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbiBHcmFudC5cbiAgICogSWYgeW91IGJ1aWxkIHlvdXIgb3duIGFjdGl2YXRpb24gZm9ybSB5b3Ugc2hvdWxkIHZhbGlkYXRlIHRoZSB1c2VyIHByb3ZpZGVkIGNvZGUgcHJpb3IgdG8gYmVnaW5uaW5nIHRoZSBBdXRob3JpemF0aW9uIGdyYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIFRoZSBlbmQtdXNlciB2ZXJpZmljYXRpb24gY29kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCBUaGUgY2xpZW50IGlkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB2YWxpZGF0ZURldmljZSh1c2VyX2NvZGU6IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9kZXZpY2UvdmFsaWRhdGUnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcl9jb2RlJywgdXNlcl9jb2RlKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignY2xpZW50X2lkJywgY2xpZW50X2lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIEpXVCAoZW5jb2RlZCBKV1Qgc3RyaW5nKSB0byBlbnN1cmUgdGhlIHRva2VuIGlzIHZhbGlkLiBBIHZhbGlkIGFjY2VzcyB0b2tlbiBpcyBwcm9wZXJseVxuICAgKiBzaWduZWQgYW5kIG5vdCBleHBpcmVkLlxuICAgKiA8cD5cbiAgICogVGhpcyBBUEkgbWF5IGJlIHVzZWQgdG8gdmVyaWZ5IHRoZSBKV1QgYXMgd2VsbCBhcyBkZWNvZGUgdGhlIGVuY29kZWQgSldUIGludG8gaHVtYW4gcmVhZGFibGUgaWRlbnRpdHkgY2xhaW1zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZhbGlkYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHZhbGlkYXRlSldUKGVuY29kZWRKV1Q6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmFsaWRhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxWYWxpZGF0ZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC92YWxpZGF0ZScpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCdzIGEgSldUIHZlbmRpbmcgbWFjaGluZSFcbiAgICogXG4gICAqIElzc3VlIGEgbmV3IGFjY2VzcyB0b2tlbiAoSldUKSB3aXRoIHRoZSBwcm92aWRlZCBjbGFpbXMgaW4gdGhlIHJlcXVlc3QuIFRoaXMgSldUIGlzIG5vdCBzY29wZWQgdG8gYSB0ZW5hbnQgb3IgdXNlciwgaXQgaXMgYSBmcmVlIGZvcm0gXG4gICAqIHRva2VuIHRoYXQgd2lsbCBjb250YWluIHdoYXQgY2xhaW1zIHlvdSBwcm92aWRlLlxuICAgKiA8cD5cbiAgICogVGhlIGlhdCwgZXhwIGFuZCBqdGkgY2xhaW1zIHdpbGwgYmUgYWRkZWQgYnkgRnVzaW9uQXV0aCwgYWxsIG90aGVyIGNsYWltcyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuXG4gICAqIFxuICAgKiBJZiBhIFRUTCBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QsIHRoZSBUVEwgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgZGVmYXVsdCBUZW5hbnQgb3IgdGhlIFRlbmFudCBzcGVjaWZpZWQgb24gdGhlIHJlcXVlc3QgZWl0aGVyIFxuICAgKiBieSB3YXkgb2YgdGhlIFgtRnVzaW9uQXV0aC1UZW5hbnRJZCByZXF1ZXN0IGhlYWRlciwgb3IgYSB0ZW5hbnQgc2NvcGVkIEFQSSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7SldUVmVuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGNsYWltcyBmb3IgdGhpcyBKV1QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXVFZlbmRSZXNwb25zZT4+fVxuICAgKi9cbiAgdmVuZEpXVChyZXF1ZXN0OiBKV1RWZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SldUVmVuZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEpXVFZlbmRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC92ZW5kJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybXMgYSBlbWFpbCB2ZXJpZmljYXRpb24uIFRoZSBJZCBnaXZlbiBpcyB1c3VhbGx5IGZyb20gYW4gZW1haWwgc2VudCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcmlmaWNhdGlvbklkIFRoZSBlbWFpbCB2ZXJpZmljYXRpb24gSWQgc2VudCB0byB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHZlcmlmeUVtYWlsQWRkcmVzcyBhbmQgY2hhbmdlZCB0byB0YWtlIGEgSlNPTiByZXF1ZXN0IGJvZHksIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgdmVyaWZ5RW1haWwodmVyaWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodmVyaWZpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtcyBhIHVzZXIncyBlbWFpbCBhZGRyZXNzLiBcbiAgICogXG4gICAqIFRoZSByZXF1ZXN0IGJvZHkgd2lsbCBjb250YWluIHRoZSB2ZXJpZmljYXRpb25JZC4gWW91IG1heSBhbHNvIGJlIHJlcXVpcmVkIHRvIHNlbmQgYSBvbmUtdGltZSB1c2UgY29kZSBiYXNlZCB1cG9uIHlvdXIgY29uZmlndXJhdGlvbi4gV2hlbiBcbiAgICogdGhlIHRlbmFudCBpcyBjb25maWd1cmVkIHRvIGdhdGUgYSB1c2VyIHVudGlsIHRoZWlyIGVtYWlsIGFkZHJlc3MgaXMgdmVyaWZpZWQsIHRoaXMgcHJvY2VkdXJlcyByZXF1aXJlcyB0d28gdmFsdWVzIGluc3RlYWQgb2Ygb25lLiBcbiAgICogVGhlIHZlcmlmaWNhdGlvbklkIGlzIGEgaGlnaCBlbnRyb3B5IHZhbHVlIGFuZCB0aGUgb25lLXRpbWUgdXNlIGNvZGUgaXMgYSBsb3cgZW50cm9weSB2YWx1ZSB0aGF0IGlzIGVhc2lseSBlbnRlcmVkIGluIGEgdXNlciBpbnRlcmFjdGl2ZSBmb3JtLiBUaGUgXG4gICAqIHR3byB2YWx1ZXMgdG9nZXRoZXIgYXJlIGFibGUgdG8gY29uZmlybSBhIHVzZXIncyBlbWFpbCBhZGRyZXNzIGFuZCBtYXJrIHRoZSB1c2VyJ3MgZW1haWwgYWRkcmVzcyBhcyB2ZXJpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlFbWFpbFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdmVyaWZpY2F0aW9uSWQgYW5kIG9wdGlvbmFsIG9uZS10aW1lIHVzZSBjb2RlIHBhaXJlZCB3aXRoIHRoZSB2ZXJpZmljYXRpb25JZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdmVyaWZ5RW1haWxBZGRyZXNzKHJlcXVlc3Q6IFZlcmlmeUVtYWlsUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZG1pbmlzdHJhdGl2ZWx5IHZlcmlmeSBhIHVzZXIncyBlbWFpbCBhZGRyZXNzLiBVc2UgdGhpcyBtZXRob2QgdG8gYnlwYXNzIGVtYWlsIHZlcmlmaWNhdGlvbiBmb3IgdGhlIHVzZXIuXG4gICAqIFxuICAgKiBUaGUgcmVxdWVzdCBib2R5IHdpbGwgY29udGFpbiB0aGUgdXNlcklkIHRvIGJlIHZlcmlmaWVkLiBBbiBBUEkga2V5IGlzIHJlcXVpcmVkIHdoZW4gc2VuZGluZyB0aGUgdXNlcklkIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5RW1haWxSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXJJZCB0byB2ZXJpZnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHZlcmlmeUVtYWlsQWRkcmVzc0J5VXNlcklkKHJlcXVlc3Q6IFZlcmlmeUVtYWlsUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtcyBhbiBhcHBsaWNhdGlvbiByZWdpc3RyYXRpb24uIFRoZSBJZCBnaXZlbiBpcyB1c3VhbGx5IGZyb20gYW4gZW1haWwgc2VudCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcmlmaWNhdGlvbklkIFRoZSByZWdpc3RyYXRpb24gdmVyaWZpY2F0aW9uIElkIHNlbnQgdG8gdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byB2ZXJpZnlVc2VyUmVnaXN0cmF0aW9uIGFuZCBjaGFuZ2VkIHRvIHRha2UgYSBKU09OIHJlcXVlc3QgYm9keSwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICB2ZXJpZnlSZWdpc3RyYXRpb24odmVyaWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHZlcmlmaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybXMgYSB1c2VyJ3MgcmVnaXN0cmF0aW9uLiBcbiAgICogXG4gICAqIFRoZSByZXF1ZXN0IGJvZHkgd2lsbCBjb250YWluIHRoZSB2ZXJpZmljYXRpb25JZC4gWW91IG1heSBhbHNvIGJlIHJlcXVpcmVkIHRvIHNlbmQgYSBvbmUtdGltZSB1c2UgY29kZSBiYXNlZCB1cG9uIHlvdXIgY29uZmlndXJhdGlvbi4gV2hlbiBcbiAgICogdGhlIGFwcGxpY2F0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gZ2F0ZSBhIHVzZXIgdW50aWwgdGhlaXIgcmVnaXN0cmF0aW9uIGlzIHZlcmlmaWVkLCB0aGlzIHByb2NlZHVyZXMgcmVxdWlyZXMgdHdvIHZhbHVlcyBpbnN0ZWFkIG9mIG9uZS4gXG4gICAqIFRoZSB2ZXJpZmljYXRpb25JZCBpcyBhIGhpZ2ggZW50cm9weSB2YWx1ZSBhbmQgdGhlIG9uZS10aW1lIHVzZSBjb2RlIGlzIGEgbG93IGVudHJvcHkgdmFsdWUgdGhhdCBpcyBlYXNpbHkgZW50ZXJlZCBpbiBhIHVzZXIgaW50ZXJhY3RpdmUgZm9ybS4gVGhlIFxuICAgKiB0d28gdmFsdWVzIHRvZ2V0aGVyIGFyZSBhYmxlIHRvIGNvbmZpcm0gYSB1c2VyJ3MgcmVnaXN0cmF0aW9uIGFuZCBtYXJrIHRoZSB1c2VyJ3MgcmVnaXN0cmF0aW9uIGFzIHZlcmlmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeVJlZ2lzdHJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdmVyaWZpY2F0aW9uSWQgYW5kIG9wdGlvbmFsIG9uZS10aW1lIHVzZSBjb2RlIHBhaXJlZCB3aXRoIHRoZSB2ZXJpZmljYXRpb25JZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdmVyaWZ5VXNlclJlZ2lzdHJhdGlvbihyZXF1ZXN0OiBWZXJpZnlSZWdpc3RyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG5cbiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgKiBQcml2YXRlIG1ldGhvZHNcbiAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiAgLyoqXG4gICAqIGNyZWF0ZXMgYSByZXN0IGNsaWVudFxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgUkVTVENsaWVudCB0aGF0IHdpbGwgYmUgdXNlZCB0byBjYWxsLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydDxSVCwgRVJUPigpOiBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8UlQsIEVSVD4oKVxuICAgICAgICAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKHRoaXMuYXBpS2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRBbm9ueW1vdXM8UlQsIEVSVD4oKTogSVJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIGxldCBjbGllbnQgPSB0aGlzLmNsaWVudEJ1aWxkZXIuYnVpbGQ8UlQsIEVSVD4odGhpcy5ob3N0KTtcblxuICAgIGlmICh0aGlzLnRlbmFudElkICE9IG51bGwpIHtcbiAgICAgIGNsaWVudC53aXRoSGVhZGVyKCdYLUZ1c2lvbkF1dGgtVGVuYW50SWQnLCB0aGlzLnRlbmFudElkKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jcmVkZW50aWFscyAhPSBudWxsKSB7XG4gICAgICBjbGllbnQud2l0aENyZWRlbnRpYWxzKHRoaXMuY3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRnVzaW9uQXV0aENsaWVudDtcblxuLyoqXG4gKiBBIDEyOCBiaXQgVVVJRCBpbiBzdHJpbmcgZm9ybWF0IFwiOC00LTQtNC0xMlwiLCBmb3IgZXhhbXBsZSBcIjU4RDVFMjEyLTE2NUItNENBMC05MDlCLUM4NkI5Q0VFMDExMVwiLlxuICovXG5leHBvcnQgdHlwZSBVVUlEID0gc3RyaW5nO1xuXG5cbi8qKlxuICogQXV0aG9yaXphdGlvbiBHcmFudCB0eXBlcyBhcyBkZWZpbmVkIGJ5IHRoZSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDlcIj5UaGUgT0F1dGggMi4wIEF1dGhvcml6YXRpb25cbiAqIEZyYW1ld29yayAtIFJGQyA2NzQ5PC9hPi5cbiAqIDxwPlxuICogU3BlY2lmaWMgbmFtZXMgYXMgZGVmaW5lZCBieSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1OTEjc2VjdGlvbi00LjFcIj5cbiAqIE9BdXRoIDIuMCBEeW5hbWljIENsaWVudCBSZWdpc3RyYXRpb24gUHJvdG9jb2wgLSBSRkMgNzU5MSBTZWN0aW9uIDQuMTwvYT5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEdyYW50VHlwZSB7XG4gIGF1dGhvcml6YXRpb25fY29kZSA9IFwiYXV0aG9yaXphdGlvbl9jb2RlXCIsXG4gIGltcGxpY2l0ID0gXCJpbXBsaWNpdFwiLFxuICBwYXNzd29yZCA9IFwicGFzc3dvcmRcIixcbiAgY2xpZW50X2NyZWRlbnRpYWxzID0gXCJjbGllbnRfY3JlZGVudGlhbHNcIixcbiAgcmVmcmVzaF90b2tlbiA9IFwicmVmcmVzaF90b2tlblwiLFxuICB1bmtub3duID0gXCJ1bmtub3duXCIsXG4gIGRldmljZV9jb2RlID0gXCJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTpkZXZpY2VfY29kZVwiXG59XG5cbi8qKlxuICogVXNlZCB0byBpbmRpY2F0ZSB3aGF0IHR5cGUgb2YgYXR0ZXN0YXRpb24gd2FzIGluY2x1ZGVkIGluIHRoZSBhdXRoZW50aWNhdG9yIHJlc3BvbnNlIGZvciBhIGdpdmVuIFdlYkF1dGhuIGNyZWRlbnRpYWwgYXQgdGhlIHRpbWUgaXQgd2FzIGNyZWF0ZWRcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBBdHRlc3RhdGlvblR5cGUge1xuICBiYXNpYyA9IFwiYmFzaWNcIixcbiAgc2VsZiA9IFwic2VsZlwiLFxuICBhdHRlc3RhdGlvbkNhID0gXCJhdHRlc3RhdGlvbkNhXCIsXG4gIGFub255bWl6YXRpb25DYSA9IFwiYW5vbnltaXphdGlvbkNhXCIsXG4gIG5vbmUgPSBcIm5vbmVcIlxufVxuXG4vKipcbiAqIElkZW50aXR5IFByb3ZpZGVyIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclNlYXJjaFJlc3BvbnNlIHtcbiAgaWRlbnRpdHlQcm92aWRlcnM/OiBBcnJheTxCYXNlSWRlbnRpdHlQcm92aWRlcjxhbnk+PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFeHBvcnRSZXF1ZXN0IHtcbiAgZGF0ZVRpbWVTZWNvbmRzRm9ybWF0Pzogc3RyaW5nO1xuICB6b25lSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZWQgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSB1c2VyLnJlZ2lzdHJhdGlvbi5jcmVhdGUgZXZlbnQgaW4gdGhhdCBpdCB3aWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIHVzZXIgaGFzIGJlZW4gY3JlYXRlZC4gVGhpcyBldmVudCBjYW5ub3QgYmUgbWFkZVxuICogdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbkNyZWF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogVGhlIHVzZXIgYWN0aW9uIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25SZXNwb25zZSB7XG4gIGFjdGlvbj86IFVzZXJBY3Rpb25Mb2c7XG4gIGFjdGlvbnM/OiBBcnJheTxVc2VyQWN0aW9uTG9nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU01TTWVzc2FnZSB7XG4gIHBob25lTnVtYmVyPzogc3RyaW5nO1xuICB0ZXh0TWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2VuZ2VyVHJhbnNwb3J0IHtcbn1cblxuLyoqXG4gKiBVc2VyIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgYSBzaW5nbGUgYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbiB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBhdXRoZW50aWNhdGlvblRva2VuPzogc3RyaW5nO1xuICBjbGVhblNwZWFrSWQ/OiBVVUlEO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0TG9naW5JbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgcHJlZmVycmVkTGFuZ3VhZ2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgcm9sZXM/OiBBcnJheTxzdHJpbmc+O1xuICB0aW1lem9uZT86IHN0cmluZztcbiAgdG9rZW5zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHVzZXJuYW1lU3RhdHVzPzogQ29udGVudFN0YXR1cztcbiAgdmVyaWZpZWQ/OiBib29sZWFuO1xuICB2ZXJpZmllZEluc3RhbnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgcmVxdWVzdHMgdGhhdCBjYW4gY29udGFpbiBldmVudCBpbmZvcm1hdGlvbi4gVGhpcyBldmVudCBpbmZvcm1hdGlvbiBpcyB1c2VkIHdoZW4gc2VuZGluZyBXZWJob29rcyBvciBlbWFpbHNcbiAqIGR1cmluZyB0aGUgdHJhbnNhY3Rpb24uIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIGV2ZW50IGluZm9ybWF0aW9uIGlzIGNvcnJlY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGV2ZW50SW5mbz86IEV2ZW50SW5mbztcbn1cblxuLyoqXG4gKiBBIHdlYmhvb2sgY2FsbCBhdHRlbXB0IGxvZy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tBdHRlbXB0TG9nIHtcbiAgYXR0ZW1wdFJlc3VsdD86IFdlYmhvb2tBdHRlbXB0UmVzdWx0O1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW5kSW5zdGFudD86IG51bWJlcjtcbiAgaWQ/OiBVVUlEO1xuICBzdGFydEluc3RhbnQ/OiBudW1iZXI7XG4gIHdlYmhvb2tDYWxsUmVzcG9uc2U/OiBXZWJob29rQ2FsbFJlc3BvbnNlO1xuICB3ZWJob29rRXZlbnRMb2dJZD86IFVVSUQ7XG4gIHdlYmhvb2tJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFZlbmRSZXF1ZXN0IHtcbiAgY2xhaW1zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAga2V5SWQ/OiBVVUlEO1xuICB0aW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV2ZW50IGxvZyB1c2VkIGludGVybmFsbHkgYnkgRnVzaW9uQXV0aCB0byBoZWxwIGRldmVsb3BlcnMgZGVidWcgaG9va3MsIFdlYmhvb2tzLCBlbWFpbCB0ZW1wbGF0ZXMsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZyB7XG4gIGlkPzogbnVtYmVyO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICB0eXBlPzogRXZlbnRMb2dUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb29rdXBSZXNwb25zZSB7XG4gIGlkZW50aXR5UHJvdmlkZXI/OiBJZGVudGl0eVByb3ZpZGVyRGV0YWlscztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyRGV0YWlscyB7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGlkPzogVVVJRDtcbiAgaWRwRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xuICB0eXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludHJvc3BlY3RSZXNwb25zZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4ge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIFVwZGF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3Igd2ViaG9va3NcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogV2ViaG9va1NlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIENoYW5nZSBwYXNzd29yZCByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZVBhc3N3b3JkUmVzcG9uc2Uge1xuICBvbmVUaW1lUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBBIHNlcnZlciB3aGVyZSBldmVudHMgYXJlIHNlbnQuIFRoaXMgaW5jbHVkZXMgdXNlciBhY3Rpb24gZXZlbnRzIGFuZCBhbnkgb3RoZXIgZXZlbnRzIHNlbnQgYnkgRnVzaW9uQXV0aC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rIHtcbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXZlbnRzRW5hYmxlZD86IFJlY29yZDxFdmVudFR5cGUsIGJvb2xlYW4+O1xuICBnbG9iYWw/OiBib29sZWFuO1xuICBoZWFkZXJzPzogSFRUUEhlYWRlcnM7XG4gIGh0dHBBdXRoZW50aWNhdGlvblBhc3N3b3JkPzogc3RyaW5nO1xuICBodHRwQXV0aGVudGljYXRpb25Vc2VybmFtZT86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHNpZ25hdHVyZUNvbmZpZ3VyYXRpb24/OiBXZWJob29rU2lnbmF0dXJlQ29uZmlndXJhdGlvbjtcbiAgc3NsQ2VydGlmaWNhdGU/OiBzdHJpbmc7XG4gIHNzbENlcnRpZmljYXRlS2V5SWQ/OiBVVUlEO1xuICB0ZW5hbnRJZHM/OiBBcnJheTxVVUlEPjtcbiAgdXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF2YWlsYWJsZSBJbnRlZ3JhdGlvbnNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb25zIHtcbiAgY2xlYW5zcGVhaz86IENsZWFuU3BlYWtDb25maWd1cmF0aW9uO1xuICBrYWZrYT86IEthZmthQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIHRoZSBldmVudCBsb2cuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGVuZD86IG51bWJlcjtcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgc3RhcnQ/OiBudW1iZXI7XG4gIHR5cGU/OiBFdmVudExvZ1R5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxDb25maWd1cmF0aW9uIHtcbiAgYWRkaXRpb25hbEhlYWRlcnM/OiBBcnJheTxFbWFpbEhlYWRlcj47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgZGVmYXVsdEZyb21FbWFpbD86IHN0cmluZztcbiAgZGVmYXVsdEZyb21OYW1lPzogc3RyaW5nO1xuICBlbWFpbFVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGVtYWlsVmVyaWZpZWRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBmb3Jnb3RQYXNzd29yZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGhvc3Q/OiBzdHJpbmc7XG4gIGltcGxpY2l0RW1haWxWZXJpZmljYXRpb25BbGxvd2VkPzogYm9vbGVhbjtcbiAgbG9naW5JZEluVXNlT25DcmVhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbklkSW5Vc2VPblVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luTmV3RGV2aWNlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5TdXNwaWNpb3VzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHBhc3N3b3JkbGVzc0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkUmVzZXRTdWNjZXNzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRVcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwb3J0PzogbnVtYmVyO1xuICBwcm9wZXJ0aWVzPzogc3RyaW5nO1xuICBzZWN1cml0eT86IEVtYWlsU2VjdXJpdHlUeXBlO1xuICBzZXRQYXNzd29yZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHR3b0ZhY3Rvck1ldGhvZEFkZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHR3b0ZhY3Rvck1ldGhvZFJlbW92ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHVudmVyaWZpZWQ/OiBFbWFpbFVudmVyaWZpZWRPcHRpb25zO1xuICB1c2VybmFtZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdmVyaWZpY2F0aW9uU3RyYXRlZ3k/OiBWZXJpZmljYXRpb25TdHJhdGVneTtcbiAgdmVyaWZ5RW1haWw/OiBib29sZWFuO1xuICB2ZXJpZnlFbWFpbFdoZW5DaGFuZ2VkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGVudW0gRW1haWxTZWN1cml0eVR5cGUge1xuICBOT05FID0gXCJOT05FXCIsXG4gIFNTTCA9IFwiU1NMXCIsXG4gIFRMUyA9IFwiVExTXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2l0Y2hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWGJveEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBnZW5lcmljIGNvbm5lY3Rvci5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyaWNDb25uZWN0b3JDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xuICBhdXRoZW50aWNhdGlvblVSTD86IHN0cmluZztcbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gIGhlYWRlcnM/OiBIVFRQSGVhZGVycztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGh0dHBBdXRoZW50aWNhdGlvblVzZXJuYW1lPzogc3RyaW5nO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgc3NsQ2VydGlmaWNhdGVLZXlJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQW4gRXZlbnQgXCJldmVudFwiIHRvIGluZGljYXRlIGFuIGV2ZW50IGxvZyB3YXMgY3JlYXRlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGV2ZW50TG9nPzogRXZlbnRMb2c7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29uZmlndXJhdGlvbiB7XG4gIGF1ZGl0TG9nQ29uZmlndXJhdGlvbj86IEF1ZGl0TG9nQ29uZmlndXJhdGlvbjtcbiAgY29yc0NvbmZpZ3VyYXRpb24/OiBDT1JTQ29uZmlndXJhdGlvbjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGV2ZW50TG9nQ29uZmlndXJhdGlvbj86IEV2ZW50TG9nQ29uZmlndXJhdGlvbjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvZ2luUmVjb3JkQ29uZmlndXJhdGlvbj86IExvZ2luUmVjb3JkQ29uZmlndXJhdGlvbjtcbiAgcmVwb3J0VGltZXpvbmU/OiBzdHJpbmc7XG4gIHRydXN0ZWRQcm94eUNvbmZpZ3VyYXRpb24/OiBTeXN0ZW1UcnVzdGVkUHJveHlDb25maWd1cmF0aW9uO1xuICB1aUNvbmZpZ3VyYXRpb24/OiBVSUNvbmZpZ3VyYXRpb247XG4gIHVzYWdlRGF0YUNvbmZpZ3VyYXRpb24/OiBVc2FnZURhdGFDb25maWd1cmF0aW9uO1xuICB3ZWJob29rRXZlbnRMb2dDb25maWd1cmF0aW9uPzogV2ViaG9va0V2ZW50TG9nQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0NvbmZpZ3VyYXRpb24ge1xuICBkZWxldGU/OiBEZWxldGVDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbnVtYmVyT2ZEYXlzVG9SZXRhaW4/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dDb25maWd1cmF0aW9uIHtcbiAgbnVtYmVyVG9SZXRhaW4/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZWNvcmRDb25maWd1cmF0aW9uIHtcbiAgZGVsZXRlPzogRGVsZXRlQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVSUNvbmZpZ3VyYXRpb24ge1xuICBoZWFkZXJDb2xvcj86IHN0cmluZztcbiAgbG9nb1VSTD86IHN0cmluZztcbiAgbWVudUZvbnRDb2xvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50VXNlcm5hbWVDb25maWd1cmF0aW9uIHtcbiAgdW5pcXVlPzogVW5pcXVlVXNlcm5hbWVDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgZW51bSBVbmlxdWVVc2VybmFtZVN0cmF0ZWd5IHtcbiAgQWx3YXlzID0gXCJBbHdheXNcIixcbiAgT25Db2xsaXNpb24gPSBcIk9uQ29sbGlzaW9uXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmlxdWVVc2VybmFtZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbnVtYmVyT2ZEaWdpdHM/OiBudW1iZXI7XG4gIHNlcGFyYXRvcj86IHN0cmluZztcbiAgc3RyYXRlZ3k/OiBVbmlxdWVVc2VybmFtZVN0cmF0ZWd5O1xufVxuXG4vKipcbiAqIENvbnNlbnQgc2VhcmNoIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50U2VhcmNoUmVzcG9uc2Uge1xuICBjb25zZW50cz86IEFycmF5PENvbnNlbnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiA8dWw+XG4gKiA8bGk+QmVhcmVyIFRva2VuIHR5cGUgYXMgZGVmaW5lZCBieSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NTBcIj5SRkMgNjc1MDwvYT4uPC9saT5cbiAqIDxsaT5NQUMgVG9rZW4gdHlwZSBhcyByZWZlcmVuY2VkIGJ5IDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc0OVwiPlJGQyA2NzQ5PC9hPiBhbmRcbiAqIDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1vYXV0aC12Mi1odHRwLW1hYy0wNVwiPlxuICogRHJhZnQgUkZDIG9uIE9BdXRoIDIuMCBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGUgKE1BQykgVG9rZW5zPC9hPlxuICogPC9saT5cbiAqIDwvdWw+XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBUb2tlblR5cGUge1xuICBCZWFyZXIgPSBcIkJlYXJlclwiLFxuICBNQUMgPSBcIk1BQ1wiXG59XG5cbi8qKlxuICogQSBncmFudCBmb3IgYW4gZW50aXR5IHRvIGEgdXNlciBvciBhbm90aGVyIGVudGl0eS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbnRpdHk/OiBFbnRpdHk7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHBlcm1pc3Npb25zPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVjaXBpZW50RW50aXR5SWQ/OiBVVUlEO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgdXNlciBjb21tZW50cy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb21tZW50U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBjb21tZW50ZXJJZD86IFVVSUQ7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERlcmVrIEtsYXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXMge1xuICBicmVhY2hEZXRlY3Rpb24/OiBQYXNzd29yZEJyZWFjaERldGVjdGlvbjtcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIHJlbWVtYmVyUHJldmlvdXNQYXNzd29yZHM/OiBSZW1lbWJlclByZXZpb3VzUGFzc3dvcmRzO1xuICByZXF1aXJlTWl4ZWRDYXNlPzogYm9vbGVhbjtcbiAgcmVxdWlyZU5vbkFscGhhPzogYm9vbGVhbjtcbiAgcmVxdWlyZU51bWJlcj86IGJvb2xlYW47XG4gIHZhbGlkYXRlT25Mb2dpbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIEVtYWlsIFZlcmlmeSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJFbWFpbFZlcmlmaWVkRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIFVzZXIgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbnNlbnRSZXNwb25zZSB7XG4gIHVzZXJDb25zZW50PzogVXNlckNvbnNlbnQ7XG4gIHVzZXJDb25zZW50cz86IEFycmF5PFVzZXJDb25zZW50Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3UmVxdWVzdCB7XG4gIGVtYWlsVGVtcGxhdGU/OiBFbWFpbFRlbXBsYXRlO1xuICBsb2NhbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWtleSBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRNdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24ge1xuICBhdXRoZW50aWNhdG9yPzogTXVsdGlGYWN0b3JBdXRoZW50aWNhdG9yTWV0aG9kO1xuICBlbWFpbD86IE11bHRpRmFjdG9yRW1haWxNZXRob2Q7XG4gIGxvZ2luUG9saWN5PzogTXVsdGlGYWN0b3JMb2dpblBvbGljeTtcbiAgc21zPzogTXVsdGlGYWN0b3JTTVNNZXRob2Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGYWN0b3JBdXRoZW50aWNhdG9yTWV0aG9kIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFsZ29yaXRobT86IFRPVFBBbGdvcml0aG07XG4gIGNvZGVMZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVTdGVwPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmFjdG9yRW1haWxNZXRob2QgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgdGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGYWN0b3JTTVNNZXRob2QgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbWVzc2VuZ2VySWQ/OiBVVUlEO1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBFbnRpdHkgZ3JhbnQgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFJlc3BvbnNlIHtcbiAgZ3JhbnQ/OiBFbnRpdHlHcmFudDtcbiAgZ3JhbnRzPzogQXJyYXk8RW50aXR5R3JhbnQ+O1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IHRvIHN0YXJ0IGEgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuU3RhcnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNyZWRlbnRpYWxJZD86IFVVSUQ7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdXNlcklkPzogVVVJRDtcbiAgd29ya2Zsb3c/OiBXZWJBdXRobldvcmtmbG93O1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFJlc3BvbnNlIHtcbiAgY29uc2VudD86IENvbnNlbnQ7XG4gIGNvbnNlbnRzPzogQXJyYXk8Q29uc2VudD47XG59XG5cbi8qKlxuICogQSBVc2VyJ3MgbWVtYmVyc2hpcCBpbnRvIGEgR3JvdXBcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXIge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZ3JvdXBJZD86IFVVSUQ7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgdXNlcj86IFVzZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIGFuIGVudGl0eSB0aGF0IGEgdXNlciBjYW4gYmUgZ3JhbnRlZCBwZXJtaXNzaW9ucyB0by4gT3IgYW4gZW50aXR5IHRoYXQgY2FuIGJlIGdyYW50ZWQgcGVybWlzc2lvbnMgdG8gYW5vdGhlciBlbnRpdHkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5IHtcbiAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhcmVudElkPzogVVVJRDtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0eXBlPzogRW50aXR5VHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RvclJlc3BvbnNlIHtcbiAgc3RhdHVzPzogUmVhY3RvclN0YXR1cztcbn1cblxuLyoqXG4gKiBMb2dpbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBvbmVUaW1lUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBJZGVudGl0eSBQcm92aWRlciBVbmxpbmsgRXZlbnQuXG4gKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VySWRlbnRpdHlQcm92aWRlclVubGlua0V2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rPzogSWRlbnRpdHlQcm92aWRlckxpbms7XG59XG5cbi8qKlxuICogV2ViQXV0aG4gQ3JlZGVudGlhbCBBUEkgcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlIHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuQ3JlZGVudGlhbDtcbiAgY3JlZGVudGlhbHM/OiBBcnJheTxXZWJBdXRobkNyZWRlbnRpYWw+O1xufVxuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBvdXRwdXQgZm9yIHRoZSB7QGNvZGUgY3JlZFByb3BzfSBleHRlbnNpb25cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxQcm9wZXJ0aWVzT3V0cHV0IHtcbiAgcms/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIElkUCBJbml0aWF0ZWQgbG9naW4gY29uZmlndXJhdGlvblxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJJZFBJbml0aWF0ZWRMb2dpbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbmFtZUlkRm9ybWF0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVudGl0eSBUeXBlIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVJlc3BvbnNlIHtcbiAgZW50aXR5VHlwZT86IEVudGl0eVR5cGU7XG4gIGVudGl0eVR5cGVzPzogQXJyYXk8RW50aXR5VHlwZT47XG4gIHBlcm1pc3Npb24/OiBFbnRpdHlUeXBlUGVybWlzc2lvbjtcbn1cblxuLyoqXG4gKiBVc2VyIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlc3BvbnNlIHtcbiAgZW1haWxWZXJpZmljYXRpb25JZD86IHN0cmluZztcbiAgZW1haWxWZXJpZmljYXRpb25PbmVUaW1lQ29kZT86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWRzPzogUmVjb3JkPFVVSUQsIHN0cmluZz47XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbk9uZVRpbWVDb2Rlcz86IFJlY29yZDxVVUlELCBzdHJpbmc+O1xuICB0b2tlbj86IHN0cmluZztcbiAgdG9rZW5FeHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogU3RhdHVzIGZvciBjb250ZW50IGxpa2UgdXNlcm5hbWVzLCBwcm9maWxlIGF0dHJpYnV0ZXMsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gQ29udGVudFN0YXR1cyB7XG4gIEFDVElWRSA9IFwiQUNUSVZFXCIsXG4gIFBFTkRJTkcgPSBcIlBFTkRJTkdcIixcbiAgUkVKRUNURUQgPSBcIlJFSkVDVEVEXCJcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgS2V5c1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEtleVNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWF0dGhldyBBbHRtYW5cbiAqL1xuZXhwb3J0IGVudW0gTG9nb3V0QmVoYXZpb3Ige1xuICBSZWRpcmVjdE9ubHkgPSBcIlJlZGlyZWN0T25seVwiLFxuICBBbGxBcHBsaWNhdGlvbnMgPSBcIkFsbEFwcGxpY2F0aW9uc1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50YWJsZSB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIEJ1bGsgQ3JlYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJCdWxrQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIE1vZGVscyBhIHNpbmdsZSBmYW1pbHkgbWVtYmVyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseU1lbWJlciB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgb3duZXI/OiBib29sZWFuO1xuICByb2xlPzogRmFtaWx5Um9sZTtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuZXhwb3J0IGVudW0gRmFtaWx5Um9sZSB7XG4gIENoaWxkID0gXCJDaGlsZFwiLFxuICBUZWVuID0gXCJUZWVuXCIsXG4gIEFkdWx0ID0gXCJBZHVsdFwiXG59XG5cbi8qKlxuICogQW4gZW1haWwgYWRkcmVzcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEFkZHJlc3Mge1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICBkaXNwbGF5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbEpXVEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgVGVuYW50c1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBUZW5hbnRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFjZWJvb2tBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGFwcElkPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBmaWVsZHM/OiBzdHJpbmc7XG4gIGxvZ2luTWV0aG9kPzogSWRlbnRpdHlQcm92aWRlckxvZ2luTWV0aG9kO1xuICBwZXJtaXNzaW9ucz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIHVzZXIgYWN0aW9uIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25FdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFjdGlvbj86IHN0cmluZztcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFjdGlvbklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25JZHM/OiBBcnJheTxVVUlEPjtcbiAgY29tbWVudD86IHN0cmluZztcbiAgZW1haWw/OiBFbWFpbDtcbiAgZW1haWxlZFVzZXI/OiBib29sZWFuO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIGxvY2FsaXplZEFjdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkRHVyYXRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZE9wdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkUmVhc29uPzogc3RyaW5nO1xuICBub3RpZnlVc2VyPzogYm9vbGVhbjtcbiAgb3B0aW9uPzogc3RyaW5nO1xuICBwaGFzZT86IFVzZXJBY3Rpb25QaGFzZTtcbiAgcmVhc29uPzogc3RyaW5nO1xuICByZWFzb25Db2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBDcmVhdGUgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogQSBkaXNwbGF5YWJsZSByYXcgbG9naW4gdGhhdCBpbmNsdWRlcyBhcHBsaWNhdGlvbiBuYW1lIGFuZCB1c2VyIGxvZ2luSWQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcGxheWFibGVSYXdMb2dpbiBleHRlbmRzIFJhd0xvZ2luIHtcbiAgYXBwbGljYXRpb25OYW1lPzogc3RyaW5nO1xuICBsb2NhdGlvbj86IExvY2F0aW9uO1xuICBsb2dpbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbnVtYmVyIGlkZW50aWZ5aW5nIGEgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG0uIFZhbHVlcyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSA8YVxuICogaHJlZj1cImh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2Nvc2UvY29zZS54aHRtbCNhbGdvcml0aG1zXCI+SUFOQSBDT1NFIEFsZ29yaXRobXMgcmVnaXN0cnk8L2E+XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gQ29zZUFsZ29yaXRobUlkZW50aWZpZXIge1xuICBFUzI1NiA9IFwiU0hBMjU2d2l0aEVDRFNBXCIsXG4gIEVTMzg0ID0gXCJTSEEzODR3aXRoRUNEU0FcIixcbiAgRVM1MTIgPSBcIlNIQTUxMndpdGhFQ0RTQVwiLFxuICBSUzI1NiA9IFwiU0hBMjU2d2l0aFJTQVwiLFxuICBSUzM4NCA9IFwiU0hBMzg0d2l0aFJTQVwiLFxuICBSUzUxMiA9IFwiU0hBNTEyd2l0aFJTQVwiLFxuICBQUzI1NiA9IFwiU0hBLTI1NlwiLFxuICBQUzM4NCA9IFwiU0hBLTM4NFwiLFxuICBQUzUxMiA9IFwiU0hBLTUxMlwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJpbmZvUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU2VuZFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG1ldGhvZD86IHN0cmluZztcbiAgbWV0aG9kSWQ/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZWFtQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBhcGlNb2RlPzogU3RlYW1BUElNb2RlO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB3ZWJBUElLZXk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBFbWFpbCB0ZW1wbGF0ZXNcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBSZWFjdG9yRmVhdHVyZVN0YXR1cyB7XG4gIEFDVElWRSA9IFwiQUNUSVZFXCIsXG4gIERJU0NPTk5FQ1RFRCA9IFwiRElTQ09OTkVDVEVEXCIsXG4gIFBFTkRJTkcgPSBcIlBFTkRJTkdcIixcbiAgRElTQUJMRUQgPSBcIkRJU0FCTEVEXCIsXG4gIFVOS05PV04gPSBcIlVOS05PV05cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbnlQU05BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gYXVkaXQgbG9nLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogbnVtYmVyO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpbnNlcnRVc2VyPzogc3RyaW5nO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBuZXdWYWx1ZT86IGFueTtcbiAgb2xkVmFsdWU/OiBhbnk7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHdlYmhvb2sgY2FsbCByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tDYWxsUmVzcG9uc2Uge1xuICBleGNlcHRpb24/OiBzdHJpbmc7XG4gIHN0YXR1c0NvZGU/OiBudW1iZXI7XG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgPGk+YXV0aGVudGljYXRvcjwvaT4gd2l0aCB0aGUgZGF0YSBpdCBuZWVkcyB0byBnZW5lcmF0ZSBhbiBhc3NlcnRpb24uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMge1xuICBhbGxvd0NyZWRlbnRpYWxzPzogQXJyYXk8UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+O1xuICBjaGFsbGVuZ2U/OiBzdHJpbmc7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIHVzZXJWZXJpZmljYXRpb24/OiBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIHVzZXIgY29tbWVudHNcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb21tZW50U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IFVzZXJDb21tZW50U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBVbnZlcmlmaWVkQmVoYXZpb3Ige1xuICBBbGxvdyA9IFwiQWxsb3dcIixcbiAgR2F0ZWQgPSBcIkdhdGVkXCJcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBSZW1vdmUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyUmVtb3ZlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGVudW0gTWVzc2VuZ2VyVHlwZSB7XG4gIEdlbmVyaWMgPSBcIkdlbmVyaWNcIixcbiAgS2Fma2EgPSBcIkthZmthXCIsXG4gIFR3aWxpbyA9IFwiVHdpbGlvXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZ1NlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBFdmVudExvZ1NlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEV2ZW50IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZ1NlYXJjaFJlc3BvbnNlIHtcbiAgZXZlbnRMb2dzPzogQXJyYXk8RXZlbnRMb2c+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXZWJob29rIGV2ZW50IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZ1Jlc3BvbnNlIHtcbiAgd2ViaG9va0V2ZW50TG9nPzogV2ViaG9va0V2ZW50TG9nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZSB7XG4gIHJlY292ZXJ5Q29kZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEFuIGV4cGFuZGFibGUgQVBJIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBhbmRhYmxlUmVzcG9uc2Uge1xuICBleHBhbmRhYmxlPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBNb2RlbCBhIHVzZXIgZXZlbnQgd2hlbiBhIHR3by1mYWN0b3IgbWV0aG9kIGhhcyBiZWVuIGFkZGVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVHdvRmFjdG9yTWV0aG9kUmVtb3ZlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgbWV0aG9kPzogVHdvRmFjdG9yTWV0aG9kO1xufVxuXG4vKipcbiAqIFRoZSByZXNwb25zZSBmcm9tIHRoZSB0b3RhbCByZXBvcnQuIFRoaXMgcmVwb3J0IHN0b3JlcyB0aGUgdG90YWwgbnVtYmVycyBmb3IgZWFjaCBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb3RhbHNSZXBvcnRSZXNwb25zZSB7XG4gIGFwcGxpY2F0aW9uVG90YWxzPzogUmVjb3JkPFVVSUQsIFRvdGFscz47XG4gIGdsb2JhbFJlZ2lzdHJhdGlvbnM/OiBudW1iZXI7XG4gIHRvdGFsR2xvYmFsUmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb3RhbHMge1xuICBsb2dpbnM/OiBudW1iZXI7XG4gIHJlZ2lzdHJhdGlvbnM/OiBudW1iZXI7XG4gIHRvdGFsUmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZSB7XG4gIGlwQWNjZXNzQ29udHJvbExpc3Q/OiBJUEFjY2Vzc0NvbnRyb2xMaXN0O1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0cz86IEFycmF5PElQQWNjZXNzQ29udHJvbExpc3Q+O1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IHRvIHN0YXJ0IGEgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdGVyU3RhcnRSZXF1ZXN0IHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbiAgd29ya2Zsb3c/OiBXZWJBdXRobldvcmtmbG93O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBldmVudCB0aGF0IGlzIHN1c3BpY2lvdXMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpblN1c3BpY2lvdXNFdmVudCBleHRlbmRzIFVzZXJMb2dpblN1Y2Nlc3NFdmVudCB7XG4gIHRocmVhdHNEZXRlY3RlZD86IEFycmF5PEF1dGhlbnRpY2F0aW9uVGhyZWF0cz47XG59XG5cbi8qKlxuICogVXNlciBBUEkgZGVsZXRlIHJlcXVlc3Qgb2JqZWN0IGZvciBhIHNpbmdsZSB1c2VyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWxldGVTaW5nbGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGhhcmREZWxldGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgcmVmcmVzaGluZyBhIEpXVCB3aXRoIGEgUmVmcmVzaCBUb2tlbi5cbiAqIDxwPlxuICogVXNpbmcgYSBkaWZmZXJlbnQgcmVzcG9uc2Ugb2JqZWN0IGZyb20gUmVmcmVzaFRva2VuUmVzcG9uc2UgYmVjYXVzZSB0aGUgcmV0cmlldmUgcmVzcG9uc2Ugd2lsbCByZXR1cm4gYW4gb2JqZWN0IGZvciByZWZyZXNoVG9rZW4sIGFuZCB0aGlzIGlzIGFcbiAqIHN0cmluZy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUUmVmcmVzaFJlc3BvbnNlIHtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW5JZD86IFVVSUQ7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEF1ZGl0TG9nU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVzcG9uc2Uge1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0cz86IEFycmF5PElQQWNjZXNzQ29udHJvbExpc3Q+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvblJlc3BvbnNlIHtcbiAgdmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JEaXNhYmxlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY29kZT86IHN0cmluZztcbiAgbWV0aG9kSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmludGVuZG9BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkQnJlYWNoRGV0ZWN0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG1hdGNoTW9kZT86IEJyZWFjaE1hdGNoTW9kZTtcbiAgbm90aWZ5VXNlckVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIG9uTG9naW4/OiBCcmVhY2hBY3Rpb247XG59XG5cbmV4cG9ydCBlbnVtIEJyZWFjaEFjdGlvbiB7XG4gIE9mZiA9IFwiT2ZmXCIsXG4gIFJlY29yZE9ubHkgPSBcIlJlY29yZE9ubHlcIixcbiAgTm90aWZ5VXNlciA9IFwiTm90aWZ5VXNlclwiLFxuICBSZXF1aXJlQ2hhbmdlID0gXCJSZXF1aXJlQ2hhbmdlXCJcbn1cblxuZXhwb3J0IGVudW0gQnJlYWNoTWF0Y2hNb2RlIHtcbiAgTG93ID0gXCJMb3dcIixcbiAgTWVkaXVtID0gXCJNZWRpdW1cIixcbiAgSGlnaCA9IFwiSGlnaFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBGb3JtRmllbGRBZG1pblBvbGljeSB7XG4gIEVkaXQgPSBcIkVkaXRcIixcbiAgVmlldyA9IFwiVmlld1wiXG59XG5cbi8qKlxuICogVXNlZCB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIGFuZCBob3cgYXV0aGVudGljYXRvciBhdHRlc3RhdGlvbiBzaG91bGQgYmUgZGVsaXZlcmVkIHRvIHRoZSBSZWx5aW5nIFBhcnR5XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSB7XG4gIG5vbmUgPSBcIm5vbmVcIixcbiAgaW5kaXJlY3QgPSBcImluZGlyZWN0XCIsXG4gIGRpcmVjdCA9IFwiZGlyZWN0XCIsXG4gIGVudGVycHJpc2UgPSBcImVudGVycHJpc2VcIlxufVxuXG4vKipcbiAqIEEgcG9saWN5IHRvIGNvbmZpZ3VyZSBpZiBhbmQgd2hlbiB0aGUgdXNlci1hY3Rpb24gaXMgY2FuY2VsZWQgcHJpb3IgdG8gdGhlIGV4cGlyYXRpb24gb2YgdGhlIGFjdGlvbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbGVkQXV0aGVudGljYXRpb25BY3Rpb25DYW5jZWxQb2xpY3kge1xuICBvblBhc3N3b3JkUmVzZXQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBwb3NzaWJsZSByZXN1bHQgc3RhdGVzIG9mIGEgd2ViaG9vayBldmVudC4gVGhpcyB0cmFja3MgdGhlIHN1Y2Nlc3Mgb2YgdGhlIG92ZXJhbGwgd2ViaG9vayB0cmFuc2FjdGlvbiBhY2NvcmRpbmcgdG8gdGhlIHtAbGluayBUcmFuc2FjdGlvblR5cGV9XG4gKiBhbmQgY29uZmlndXJlZCB3ZWJob29rcy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBXZWJob29rRXZlbnRSZXN1bHQge1xuICBGYWlsZWQgPSBcIkZhaWxlZFwiLFxuICBSdW5uaW5nID0gXCJSdW5uaW5nXCIsXG4gIFN1Y2NlZWRlZCA9IFwiU3VjY2VlZGVkXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBudW1iZXJPZlJlc3VsdHM/OiBudW1iZXI7XG4gIG9yZGVyQnk/OiBzdHJpbmc7XG4gIHN0YXJ0Um93PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEZvcmdvdCBwYXNzd29yZCByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3Jnb3RQYXNzd29yZFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNoYW5nZVBhc3N3b3JkSWQ/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBzZW5kRm9yZ290UGFzc3dvcmRFbWFpbD86IGJvb2xlYW47XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIEZvcm1GaWVsZCBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGRSZXF1ZXN0IHtcbiAgZmllbGQ/OiBGb3JtRmllbGQ7XG4gIGZpZWxkcz86IEFycmF5PEZvcm1GaWVsZD47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGJjY0FkZHJlc3Nlcz86IEFycmF5PHN0cmluZz47XG4gIGNjQWRkcmVzc2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgcHJlZmVycmVkTGFuZ3VhZ2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVxdWVzdERhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0b0FkZHJlc3Nlcz86IEFycmF5PEVtYWlsQWRkcmVzcz47XG4gIHVzZXJJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZVRlbXBsYXRlUmVzcG9uc2Uge1xuICBtZXNzYWdlVGVtcGxhdGU/OiBNZXNzYWdlVGVtcGxhdGU7XG4gIG1lc3NhZ2VUZW1wbGF0ZXM/OiBBcnJheTxNZXNzYWdlVGVtcGxhdGU+O1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIFdlYkF1dGhuIHdvcmtmbG93LiBUaGlzIHdpbGwgYWZmZWN0IHRoZSBwYXJhbWV0ZXJzIHVzZWQgZm9yIGNyZWRlbnRpYWwgY3JlYXRpb25cbiAqIGFuZCByZXF1ZXN0IGJhc2VkIG9uIHRoZSBUZW5hbnQgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBXZWJBdXRobldvcmtmbG93IHtcbiAgYm9vdHN0cmFwID0gXCJib290c3RyYXBcIixcbiAgZ2VuZXJhbCA9IFwiZ2VuZXJhbFwiLFxuICByZWF1dGhlbnRpY2F0aW9uID0gXCJyZWF1dGhlbnRpY2F0aW9uXCJcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBjb25zZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQ29uc2VudFN0YXR1cyB7XG4gIEFjdGl2ZSA9IFwiQWN0aXZlXCIsXG4gIFJldm9rZWQgPSBcIlJldm9rZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gSFRUUE1ldGhvZCB7XG4gIEdFVCA9IFwiR0VUXCIsXG4gIFBPU1QgPSBcIlBPU1RcIixcbiAgUFVUID0gXCJQVVRcIixcbiAgREVMRVRFID0gXCJERUxFVEVcIixcbiAgSEVBRCA9IFwiSEVBRFwiLFxuICBPUFRJT05TID0gXCJPUFRJT05TXCIsXG4gIFBBVENIID0gXCJQQVRDSFwiXG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIERlbGV0ZWQgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZSBpbiB0aGF0IGl0IGlzIHNlbnQgYWZ0ZXIgdGhlIFRYIGhhcyBiZWVuIGNvbW1pdHRlZC4gVGhpcyBldmVudCBjYW5ub3QgYmUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbkRlbGV0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogU3RlYW0gZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZWFtSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFN0ZWFtQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGFwaU1vZGU/OiBTdGVhbUFQSU1vZGU7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHdlYkFQSUtleT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBOaW50ZW5kbyBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmludGVuZG9JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8TmludGVuZG9BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBlbWFpbENsYWltPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdW5pcXVlSWRDbGFpbT86IHN0cmluZztcbiAgdXNlcm5hbWVDbGFpbT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIHRydXN0Q29tcHV0ZXI/OiBib29sZWFuO1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBTZWFyY2ggQVBJIHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVxdWVzdCBleHRlbmRzIEV4cGFuZGFibGVSZXF1ZXN0IHtcbiAgc2VhcmNoPzogVXNlclNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjcmVhdGVSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIGFuIGFic3RyYWN0aW9uIG9mIGEgc2ltcGxlIGVtYWlsIG1lc3NhZ2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWwge1xuICBhdHRhY2htZW50cz86IEFycmF5PEF0dGFjaG1lbnQ+O1xuICBiY2M/OiBBcnJheTxFbWFpbEFkZHJlc3M+O1xuICBjYz86IEFycmF5PEVtYWlsQWRkcmVzcz47XG4gIGZyb20/OiBFbWFpbEFkZHJlc3M7XG4gIGh0bWw/OiBzdHJpbmc7XG4gIHJlcGx5VG8/OiBFbWFpbEFkZHJlc3M7XG4gIHN1YmplY3Q/OiBzdHJpbmc7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIHRvPzogQXJyYXk8RW1haWxBZGRyZXNzPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgTGFtYmRhc1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBMYW1iZGFTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBDb25maWcgZm9yIFVzYWdlIERhdGEgLyBTdGF0c1xuICpcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2FnZURhdGFDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG51bWJlck9mRGF5c1RvUmV0YWluPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFVzZXIgbG9naW4gZmFpbGVkIHJlYXNvbiBjb2Rlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5GYWlsZWRSZWFzb25Db2RlIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRWxhc3RpY1NlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYWNjdXJhdGVUb3RhbD86IGJvb2xlYW47XG4gIGlkcz86IEFycmF5PFVVSUQ+O1xuICBuZXh0UmVzdWx0cz86IHN0cmluZztcbiAgcXVlcnk/OiBzdHJpbmc7XG4gIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xuICBzb3J0RmllbGRzPzogQXJyYXk8U29ydEZpZWxkPjtcbn1cblxuLyoqXG4gKiBBcHBsaWNhdGlvbiBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uU2VhcmNoUmVzcG9uc2UgZXh0ZW5kcyBFeHBhbmRhYmxlUmVzcG9uc2Uge1xuICBhcHBsaWNhdGlvbnM/OiBBcnJheTxBcHBsaWNhdGlvbj47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIExhbWJkYSBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFTZWFyY2hSZXNwb25zZSB7XG4gIGxhbWJkYXM/OiBBcnJheTxMYW1iZGE+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXZWJob29rIGF0dGVtcHQgbG9nIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va0F0dGVtcHRMb2dSZXNwb25zZSB7XG4gIHdlYmhvb2tBdHRlbXB0TG9nPzogV2ViaG9va0F0dGVtcHRMb2c7XG59XG5cbi8qKlxuICogUGFzc3dvcmQgRW5jcnlwdGlvbiBTY2hlbWUgQ29uZmlndXJhdGlvblxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZEVuY3J5cHRpb25Db25maWd1cmF0aW9uIHtcbiAgZW5jcnlwdGlvblNjaGVtZT86IHN0cmluZztcbiAgZW5jcnlwdGlvblNjaGVtZUZhY3Rvcj86IG51bWJlcjtcbiAgbW9kaWZ5RW5jcnlwdGlvblNjaGVtZU9uTG9naW4/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBBcHBsaWNhdGlvbiBBUEkgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25SZXNwb25zZSB7XG4gIGFwcGxpY2F0aW9uPzogQXBwbGljYXRpb247XG4gIGFwcGxpY2F0aW9ucz86IEFycmF5PEFwcGxpY2F0aW9uPjtcbiAgcm9sZT86IEFwcGxpY2F0aW9uUm9sZTtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIGRhaWx5IGFjdGl2ZSB1c2VyIHJlcG9ydC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb250aGx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlIHtcbiAgbW9udGhseUFjdGl2ZVVzZXJzPzogQXJyYXk8Q291bnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFR5bGVyIFNjb3R0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXAge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgcm9sZXM/OiBSZWNvcmQ8VVVJRCwgQXJyYXk8QXBwbGljYXRpb25Sb2xlPj47XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGVwcz86IEFycmF5PEZvcm1TdGVwPjtcbiAgdHlwZT86IEZvcm1UeXBlO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCB7QGxpbmsgVXNlcn0tcmVsYXRlZCBldmVudHMuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlVXNlckV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBVc2VyU3RhdGUge1xuICBBdXRoZW50aWNhdGVkID0gXCJBdXRoZW50aWNhdGVkXCIsXG4gIEF1dGhlbnRpY2F0ZWROb3RSZWdpc3RlcmVkID0gXCJBdXRoZW50aWNhdGVkTm90UmVnaXN0ZXJlZFwiLFxuICBBdXRoZW50aWNhdGVkTm90VmVyaWZpZWQgPSBcIkF1dGhlbnRpY2F0ZWROb3RWZXJpZmllZFwiLFxuICBBdXRoZW50aWNhdGVkUmVnaXN0cmF0aW9uTm90VmVyaWZpZWQgPSBcIkF1dGhlbnRpY2F0ZWRSZWdpc3RyYXRpb25Ob3RWZXJpZmllZFwiXG59XG5cbi8qKlxuICogVGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIGZvciBXZWJob29rIEV2ZW50IExvZyBkYXRhLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va0V2ZW50TG9nQ29uZmlndXJhdGlvbiB7XG4gIGRlbGV0ZT86IERlbGV0ZUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogTW9kZWwgYSB1c2VyIGV2ZW50IHdoZW4gYSB0d28tZmFjdG9yIG1ldGhvZCBoYXMgYmVlbiByZW1vdmVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVHdvRmFjdG9yTWV0aG9kQWRkRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgbWV0aG9kPzogVHdvRmFjdG9yTWV0aG9kO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRJbkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyQXNzZXJ0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGRlc3RpbmF0aW9uPzogU0FNTHYyRGVzdGluYXRpb25Bc3NlcnRpb25Db25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIFRoZW1lIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZVJlc3BvbnNlIHtcbiAgdGhlbWU/OiBUaGVtZTtcbiAgdGhlbWVzPzogQXJyYXk8VGhlbWU+O1xufVxuXG4vKipcbiAqIFRoZSA8aT5hdXRoZW50aWNhdG9yJ3M8L2k+IHJlc3BvbnNlIGZvciB0aGUgYXV0aGVudGljYXRpb24gY2VyZW1vbnkgaW4gaXRzIGVuY29kZWQgZm9ybWF0XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkF1dGhlbnRpY2F0b3JBdXRoZW50aWNhdGlvblJlc3BvbnNlIHtcbiAgYXV0aGVudGljYXRvckRhdGE/OiBzdHJpbmc7XG4gIGNsaWVudERhdGFKU09OPzogc3RyaW5nO1xuICBzaWduYXR1cmU/OiBzdHJpbmc7XG4gIHVzZXJIYW5kbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb24ge1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIHR5cGU/OiBTZWN1cmVHZW5lcmF0b3JUeXBlO1xufVxuXG4vKipcbiAqIFdlYmhvb2sgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tSZXF1ZXN0IHtcbiAgd2ViaG9vaz86IFdlYmhvb2s7XG59XG5cbi8qKlxuICogVGhlIEFwcGxpY2F0aW9uIFNjb3BlIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlcXVlc3Qge1xuICBzY29wZT86IEFwcGxpY2F0aW9uT0F1dGhTY29wZTtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQ3JlYXRlZCBFdmVudC5cbiAqIDxwPlxuICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgdXNlci5jcmVhdGUgZXZlbnQgaW4gdGhhdCBpdCB3aWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIHVzZXIgaGFzIGJlZW4gY3JlYXRlZC4gVGhpcyBldmVudCBjYW5ub3QgYmUgbWFkZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ3JlYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBSZXNldCBTdGFydCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhc3N3b3JkUmVzZXRTdGFydEV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogV2ViaG9vayBldmVudCBsb2cgc2VhcmNoIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va0V2ZW50TG9nU2VhcmNoUmVzcG9uc2Uge1xuICB0b3RhbD86IG51bWJlcjtcbiAgd2ViaG9va0V2ZW50TG9ncz86IEFycmF5PFdlYmhvb2tFdmVudExvZz47XG59XG5cbi8qKlxuICogQSBKYXZhU2NyaXB0IGxhbWJkYSBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGR1cmluZyBjZXJ0YWluIGV2ZW50cyBpbnNpZGUgRnVzaW9uQXV0aC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGEge1xuICBib2R5Pzogc3RyaW5nO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGVuZ2luZVR5cGU/OiBMYW1iZGFFbmdpbmVUeXBlO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogTGFtYmRhVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSFlQUkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgcmVseWluZ1BhcnR5QXBwbGljYXRpb25JZD86IHN0cmluZztcbiAgcmVseWluZ1BhcnR5VVJMPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGRWYWxpZGF0b3IgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZXhwcmVzc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZSB7XG4gIHBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzPzogUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDb25maWd1cmF0aW9uIHtcbiAgZXZlbnRzPzogUmVjb3JkPEV2ZW50VHlwZSwgRXZlbnRDb25maWd1cmF0aW9uRGF0YT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDb25maWd1cmF0aW9uRGF0YSBleHRlbmRzIEVuYWJsZWFibGUge1xuICB0cmFuc2FjdGlvblR5cGU/OiBUcmFuc2FjdGlvblR5cGU7XG59XG5cbi8qKlxuICogUmVmcmVzaCB0b2tlbiBvbmUtdGltZSB1c2UgY29uZmlndXJhdGlvbi4gVGhpcyBjb25maWd1cmF0aW9uIGlzIHV0aWxpemVkIHdoZW4gdGhlIHVzYWdlIHBvbGljeSBpc1xuICogY29uZmlndXJlZCBmb3Igb25lLXRpbWUgdXNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5PbmVUaW1lVXNlQ29uZmlndXJhdGlvbiB7XG4gIGdyYWNlUGVyaW9kSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBEZWFjdGl2YXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWFjdGl2YXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgVXBkYXRlIFJlZ2lzdHJhdGlvbiBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvblVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBvcmlnaW5hbD86IFVzZXJSZWdpc3RyYXRpb247XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0aWVzXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogRW50aXR5U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogVGhlIHVzZXIgYWN0aW9uIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYWN0aW9uPzogQWN0aW9uRGF0YTtcbiAgYnJvYWRjYXN0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25EYXRhIHtcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGVtYWlsVXNlcj86IGJvb2xlYW47XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgbm90aWZ5VXNlcj86IGJvb2xlYW47XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcmVhc29uSWQ/OiBVVUlEO1xuICB1c2VyQWN0aW9uSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFRoZSBJbnRlZ3JhdGlvbiBSZXNwb25zZVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvblJlc3BvbnNlIHtcbiAgaW50ZWdyYXRpb25zPzogSW50ZWdyYXRpb25zO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBVcGRhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBDcmVhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSB7XG4gIGlkZW50aXR5UHJvdmlkZXI/OiBCYXNlSWRlbnRpdHlQcm92aWRlcjxhbnk+O1xuICBpZGVudGl0eVByb3ZpZGVycz86IEFycmF5PEJhc2VJZGVudGl0eVByb3ZpZGVyPGFueT4+O1xufVxuXG4vKipcbiAqIFNvbWV0aGluZyB0aGF0IGNhbiBiZSBlbmFibGVkIGFuZCB0aHVzIGFsc28gZGlzYWJsZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZWFibGUge1xuICBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBBZGQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyQWRkRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIFJlc2V0IFN1Y2Nlc3MgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFJlc2V0U3VjY2Vzc0V2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBSZWZyZXNoVG9rZW5FeHBpcmF0aW9uUG9saWN5IHtcbiAgRml4ZWQgPSBcIkZpeGVkXCIsXG4gIFNsaWRpbmdXaW5kb3cgPSBcIlNsaWRpbmdXaW5kb3dcIixcbiAgU2xpZGluZ1dpbmRvd1dpdGhNYXhpbXVtTGlmZXRpbWUgPSBcIlNsaWRpbmdXaW5kb3dXaXRoTWF4aW11bUxpZmV0aW1lXCJcbn1cblxuLyoqXG4gKiBUaGUgcHVibGljIFN0YXR1cyBBUEkgcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHVzUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthZmthTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uIHtcbiAgZGVmYXVsdFRvcGljPzogc3RyaW5nO1xuICBwcm9kdWNlcj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIEJyZWFjaCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIE1hdHRoZXcgQWx0bWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhc3N3b3JkQnJlYWNoRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBUaGUgdXNlIHR5cGUgb2YgYSBrZXkuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBLZXlVc2Uge1xuICBTaWduT25seSA9IFwiU2lnbk9ubHlcIixcbiAgU2lnbkFuZFZlcmlmeSA9IFwiU2lnbkFuZFZlcmlmeVwiLFxuICBWZXJpZnlPbmx5ID0gXCJWZXJpZnlPbmx5XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25XZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBlbnRpdHkgdHlwZSB0aGF0IGhhcyBhIHNwZWNpZmljIHNldCBvZiBwZXJtaXNzaW9ucy4gVGhlc2UgYXJlIGdsb2JhbCBvYmplY3RzIGFuZCBjYW4gYmUgdXNlZCBhY3Jvc3MgdGVuYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgand0Q29uZmlndXJhdGlvbj86IEVudGl0eUpXVENvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwZXJtaXNzaW9ucz86IEFycmF5PEVudGl0eVR5cGVQZXJtaXNzaW9uPjtcbn1cblxuLyoqXG4gKiBKV1QgQ29uZmlndXJhdGlvbiBmb3IgZW50aXRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5SldUQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhY2Nlc3NUb2tlbktleUlkPzogVVVJRDtcbiAgdGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBVcGRhdGUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyVXBkYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIENvbnNlbnRzXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcG9saWN5IGZvciBkZWxldGluZyBVc2VycyBiYXNlZCB1cG9uIHNvbWUgZXh0ZXJuYWwgY3JpdGVyaWEuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lQmFzZWREZWxldGVQb2xpY3kgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZW5hYmxlZEluc3RhbnQ/OiBudW1iZXI7XG4gIG51bWJlck9mRGF5c1RvUmV0YWluPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJhdyBsb2dpbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCB0aW1lIGEgdXNlciBsb2dzIGludG8gYW4gYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF3TG9naW4ge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgaW5zdGFudD86IG51bWJlcjtcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQnJlYWNoZWRQYXNzd29yZFN0YXR1cyB7XG4gIE5vbmUgPSBcIk5vbmVcIixcbiAgRXhhY3RNYXRjaCA9IFwiRXhhY3RNYXRjaFwiLFxuICBTdWJBZGRyZXNzTWF0Y2ggPSBcIlN1YkFkZHJlc3NNYXRjaFwiLFxuICBQYXNzd29yZE9ubHkgPSBcIlBhc3N3b3JkT25seVwiLFxuICBDb21tb25QYXNzd29yZCA9IFwiQ29tbW9uUGFzc3dvcmRcIlxufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBGdXNpb25BdXRoIGV2ZW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRXZlbnQge1xuICBjcmVhdGVJbnN0YW50PzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGluZm8/OiBFdmVudEluZm87XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdHlwZT86IEV2ZW50VHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtVHJ1c3RlZFByb3h5Q29uZmlndXJhdGlvbiB7XG4gIHRydXN0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICB0cnVzdFBvbGljeT86IFN5c3RlbVRydXN0ZWRQcm94eUNvbmZpZ3VyYXRpb25Qb2xpY3k7XG59XG5cbi8qKlxuICogQXV0aGVudGljYXRpb24ga2V5IHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFNhbmpheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleVJlc3BvbnNlIHtcbiAgYXBpS2V5PzogQVBJS2V5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZEV4cG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGNyaXRlcmlhPzogTG9naW5SZWNvcmRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIHRoZSB3ZWJob29rIGV2ZW50IGxvZy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZ1NlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgZW5kPzogbnVtYmVyO1xuICBldmVudD86IHN0cmluZztcbiAgZXZlbnRSZXN1bHQ/OiBXZWJob29rRXZlbnRSZXN1bHQ7XG4gIGV2ZW50VHlwZT86IEV2ZW50VHlwZTtcbiAgc3RhcnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQXBwbGljYXRpb24tbGV2ZWwgY29uZmlndXJhdGlvbiBmb3IgV2ViQXV0aG5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25XZWJBdXRobkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYm9vdHN0cmFwV29ya2Zsb3c/OiBBcHBsaWNhdGlvbldlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uO1xuICByZWF1dGhlbnRpY2F0aW9uV29ya2Zsb3c/OiBBcHBsaWNhdGlvbldlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cmVJZGVudGl0eSB7XG4gIGJyZWFjaGVkUGFzc3dvcmRMYXN0Q2hlY2tlZEluc3RhbnQ/OiBudW1iZXI7XG4gIGJyZWFjaGVkUGFzc3dvcmRTdGF0dXM/OiBCcmVhY2hlZFBhc3N3b3JkU3RhdHVzO1xuICBjb25uZWN0b3JJZD86IFVVSUQ7XG4gIGVuY3J5cHRpb25TY2hlbWU/OiBzdHJpbmc7XG4gIGZhY3Rvcj86IG51bWJlcjtcbiAgaWQ/OiBVVUlEO1xuICBsYXN0TG9naW5JbnN0YW50PzogbnVtYmVyO1xuICBwYXNzd29yZD86IHN0cmluZztcbiAgcGFzc3dvcmRDaGFuZ2VSZWFzb24/OiBDaGFuZ2VQYXNzd29yZFJlYXNvbjtcbiAgcGFzc3dvcmRDaGFuZ2VSZXF1aXJlZD86IGJvb2xlYW47XG4gIHBhc3N3b3JkTGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHNhbHQ/OiBzdHJpbmc7XG4gIHVuaXF1ZVVzZXJuYW1lPzogc3RyaW5nO1xuICB1c2VybmFtZT86IHN0cmluZztcbiAgdXNlcm5hbWVTdGF0dXM/OiBDb250ZW50U3RhdHVzO1xuICB2ZXJpZmllZD86IGJvb2xlYW47XG4gIHZlcmlmaWVkSW5zdGFudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1Db250cm9sIHtcbiAgY2hlY2tib3ggPSBcImNoZWNrYm94XCIsXG4gIG51bWJlciA9IFwibnVtYmVyXCIsXG4gIHBhc3N3b3JkID0gXCJwYXNzd29yZFwiLFxuICByYWRpbyA9IFwicmFkaW9cIixcbiAgc2VsZWN0ID0gXCJzZWxlY3RcIixcbiAgdGV4dGFyZWEgPSBcInRleHRhcmVhXCIsXG4gIHRleHQgPSBcInRleHRcIlxufVxuXG4vKipcbiAqIEEgcmF3IGxvZ2luIHJlY29yZCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaFJlc3BvbnNlIHtcbiAgbG9naW5zPzogQXJyYXk8RGlzcGxheWFibGVSYXdMb2dpbj47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgcmVnaXN0cmF0aW9uIHJlcG9ydC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25SZXBvcnRSZXNwb25zZSB7XG4gIGhvdXJseUNvdW50cz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRm9yZ290IHBhc3N3b3JkIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZ290UGFzc3dvcmRSZXNwb25zZSB7XG4gIGNoYW5nZVBhc3N3b3JkSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgVXNlciBjb25zZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ29uc2VudCB7XG4gIGNvbnNlbnQ/OiBDb25zZW50O1xuICBjb25zZW50SWQ/OiBVVUlEO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZ2l2ZXJVc2VySWQ/OiBVVUlEO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBzdGF0dXM/OiBDb25zZW50U3RhdHVzO1xuICB1c2VySWQ/OiBVVUlEO1xuICB2YWx1ZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlc3BvbnNlIHtcbiAgY29kZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUd2l0Y2ggZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXRjaElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxUd2l0Y2hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3JtIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtUmVxdWVzdCB7XG4gIGZvcm0/OiBGb3JtO1xufVxuXG4vKipcbiAqIFRlbmFudCBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRTZWFyY2hSZXNwb25zZSB7XG4gIHRlbmFudHM/OiBBcnJheTxUZW5hbnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBLZXkgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlSZXF1ZXN0IHtcbiAga2V5PzogS2V5O1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBldmVudCB3aGVyZSBhIHVzZXIgaXMgYmVpbmcgdXBkYXRlZCBhbmQgdHJpZXMgdG8gdXNlIGFuIFwiaW4tdXNlXCIgbG9naW4gSWQgKGVtYWlsIG9yIHVzZXJuYW1lKS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luSWREdXBsaWNhdGVPblVwZGF0ZUV2ZW50IGV4dGVuZHMgVXNlckxvZ2luSWREdXBsaWNhdGVPbkNyZWF0ZUV2ZW50IHtcbn1cblxuLyoqXG4gKiBMb2NhdGlvbiBpbmZvcm1hdGlvbi4gVXNlZnVsIGZvciBJUCBhZGRyZXNzZXMgYW5kIG90aGVyIGRpc3BsYXlhYmxlIGRhdGEgb2JqZWN0cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbiB7XG4gIGNpdHk/OiBzdHJpbmc7XG4gIGNvdW50cnk/OiBzdHJpbmc7XG4gIGRpc3BsYXlTdHJpbmc/OiBzdHJpbmc7XG4gIGxhdGl0dWRlPzogbnVtYmVyO1xuICBsb25naXR1ZGU/OiBudW1iZXI7XG4gIHJlZ2lvbj86IHN0cmluZztcbiAgemlwY29kZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0IHtcbiAgaXBBY2Nlc3NDb250cm9sTGlzdD86IElQQWNjZXNzQ29udHJvbExpc3Q7XG59XG5cbi8qKlxuICogQ29udHJvbHMgdGhlIHBvbGljeSBmb3Igd2hldGhlciBPQXV0aCB3b3JrZmxvd3Mgd2lsbCBtb3JlIHN0cmljdGx5IGFkaGVyZSB0byB0aGUgT0F1dGggYW5kIE9JREMgc3BlY2lmaWNhdGlvblxuICogb3IgcnVuIGluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUuXG4gKlxuICogQGF1dGhvciBEYXZpZCBDaGFybGVzXG4gKi9cbmV4cG9ydCBlbnVtIE9BdXRoU2NvcGVIYW5kbGluZ1BvbGljeSB7XG4gIENvbXBhdGliaWxpdHkgPSBcIkNvbXBhdGliaWxpdHlcIixcbiAgU3RyaWN0ID0gXCJTdHJpY3RcIlxufVxuXG4vKipcbiAqIEltcG9ydCByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgZW5jcnlwdGlvblNjaGVtZT86IHN0cmluZztcbiAgZmFjdG9yPzogbnVtYmVyO1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xuICB2YWxpZGF0ZURiQ29uc3RyYWludHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBldmVudCB3aGVyZSBhIHVzZXIncyBlbWFpbCBpcyB1cGRhdGVkIG91dHNpZGUgb2YgYSBmb3Jnb3QgLyBjaGFuZ2UgcGFzc3dvcmQgd29ya2Zsb3cuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJFbWFpbFVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIHByZXZpb3VzRW1haWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkRlc3RpbmF0aW9uQXNzZXJ0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGFsdGVybmF0ZXM/OiBBcnJheTxzdHJpbmc+O1xuICBwb2xpY3k/OiBTQU1MdjJEZXN0aW5hdGlvbkFzc2VydGlvblBvbGljeTtcbn1cblxuLyoqXG4gKiBUaGUgcG9zc2libGUgc3RhdGVzIG9mIGFuIGluZGl2aWR1YWwgd2ViaG9vayBhdHRlbXB0IHRvIGEgc2luZ2xlIGVuZHBvaW50LlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIFdlYmhvb2tBdHRlbXB0UmVzdWx0IHtcbiAgU3VjY2VzcyA9IFwiU3VjY2Vzc1wiLFxuICBGYWlsdXJlID0gXCJGYWlsdXJlXCIsXG4gIFVua25vd24gPSBcIlVua25vd25cIlxufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBTdWNjZXNzIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5TdWNjZXNzRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGF1dGhlbnRpY2F0aW9uVHlwZT86IHN0cmluZztcbiAgY29ubmVjdG9ySWQ/OiBVVUlEO1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBpZGVudGl0eVByb3ZpZGVyTmFtZT86IHN0cmluZztcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBVcGRhdGUgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIucmVnaXN0cmF0aW9uLnVwZGF0ZSBpbiB0aGF0IGl0IGlzIHNlbnQgYWZ0ZXIgdGhpcyBldmVudCBjb21wbGV0ZXMsIHRoaXMgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25VcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBvcmlnaW5hbD86IFVzZXJSZWdpc3RyYXRpb247XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogR3JvdXAgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBSZXNwb25zZSB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIGdyb3Vwcz86IEFycmF5PEdyb3VwPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR29vZ2xlQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGxvZ2luTWV0aG9kPzogSWRlbnRpdHlQcm92aWRlckxvZ2luTWV0aG9kO1xuICBwcm9wZXJ0aWVzPzogR29vZ2xlSWRlbnRpdHlQcm92aWRlclByb3BlcnRpZXM7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IExvZyBUeXBlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBFdmVudExvZ1R5cGUge1xuICBJbmZvcm1hdGlvbiA9IFwiSW5mb3JtYXRpb25cIixcbiAgRGVidWcgPSBcIkRlYnVnXCIsXG4gIEVycm9yID0gXCJFcnJvclwiXG59XG5cbi8qKlxuICogVGhlIHRyYW5zYWN0aW9uIHR5cGVzIGZvciBXZWJob29rcyBhbmQgb3RoZXIgZXZlbnQgc3lzdGVtcyB3aXRoaW4gRnVzaW9uQXV0aC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gVHJhbnNhY3Rpb25UeXBlIHtcbiAgTm9uZSA9IFwiTm9uZVwiLFxuICBBbnkgPSBcIkFueVwiLFxuICBTaW1wbGVNYWpvcml0eSA9IFwiU2ltcGxlTWFqb3JpdHlcIixcbiAgU3VwZXJNYWpvcml0eSA9IFwiU3VwZXJNYWpvcml0eVwiLFxuICBBYnNvbHV0ZU1ham9yaXR5ID0gXCJBYnNvbHV0ZU1ham9yaXR5XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Rm9ybUNvbmZpZ3VyYXRpb24ge1xuICBhZG1pblVzZXJGb3JtSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEZhY2Vib29rIHNvY2lhbCBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0lkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxGYWNlYm9va0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBhcHBJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZmllbGRzPzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIEFQSS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeXN0ZW1Db25maWd1cmF0aW9uUmVxdWVzdCB7XG4gIHN5c3RlbUNvbmZpZ3VyYXRpb24/OiBTeXN0ZW1Db25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEVtYWlsIHRlbXBsYXRlIHNlYXJjaCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVTZWFyY2hSZXNwb25zZSB7XG4gIGVtYWlsVGVtcGxhdGVzPzogQXJyYXk8RW1haWxUZW1wbGF0ZT47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFVudmVyaWZpZWRPcHRpb25zIHtcbiAgYWxsb3dFbWFpbENoYW5nZVdoZW5HYXRlZD86IGJvb2xlYW47XG4gIGJlaGF2aW9yPzogVW52ZXJpZmllZEJlaGF2aW9yO1xufVxuXG4vKipcbiAqIENPU0Uga2V5IHR5cGVcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBDb3NlS2V5VHlwZSB7XG4gIFJlc2VydmVkID0gXCIwXCIsXG4gIE9LUCA9IFwiMVwiLFxuICBFQzIgPSBcIjJcIixcbiAgUlNBID0gXCIzXCIsXG4gIFN5bW1ldHJpYyA9IFwiNFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhbGxvd0NoaWxkUmVnaXN0cmF0aW9ucz86IGJvb2xlYW47XG4gIGNvbmZpcm1DaGlsZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGRlbGV0ZU9ycGhhbmVkQWNjb3VudHM/OiBib29sZWFuO1xuICBkZWxldGVPcnBoYW5lZEFjY291bnRzRGF5cz86IG51bWJlcjtcbiAgZmFtaWx5UmVxdWVzdEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIG1heGltdW1DaGlsZEFnZT86IG51bWJlcjtcbiAgbWluaW11bU93bmVyQWdlPzogbnVtYmVyO1xuICBwYXJlbnRFbWFpbFJlcXVpcmVkPzogYm9vbGVhbjtcbiAgcGFyZW50UmVnaXN0cmF0aW9uRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIGNvbXBsZXRpbmcgV2ViQXV0aG4gY3JlZGVudGlhbCByZWdpc3RyYXRpb24gb3IgYXNzZXJ0aW9uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXNwb25zZSB7XG4gIGNyZWRlbnRpYWw/OiBXZWJBdXRobkNyZWRlbnRpYWw7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlIHtcbiAgdHJ1c3RzPzogQXJyYXk8VHdvRmFjdG9yVHJ1c3Q+O1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclRydXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGV4cGlyYXRpb24/OiBudW1iZXI7XG4gIHN0YXJ0SW5zdGFudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZW5kaW5nUmVzcG9uc2Uge1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgR3JvdXBzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIEV2ZW50IChhbmQgY2FuIGJlIGNvbnZlcnRlZCB0byBKU09OKSB0aGF0IGlzIHVzZWQgZm9yIGFsbCB1c2VyIG1vZGlmaWNhdGlvbnMgKGNyZWF0ZSwgdXBkYXRlLFxuICogZGVsZXRlKS5cbiAqIDxwPlxuICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB1c2VyLmRlbGV0ZSBiZWNhdXNlIGl0IGlzIHNlbnQgYWZ0ZXIgdGhlIHR4IGlzIGNvbW1pdHRlZCwgdGhpcyBjYW5ub3QgYmUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRlbGV0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHRvIGNvbXBsZXRlIHRoZSBXZWJBdXRobiByZWdpc3RyYXRpb24gY2VyZW1vbnkgZm9yIGEgbmV3IGNyZWRlbnRpYWwsLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5SZWdpc3RlckNvbXBsZXRlUmVxdWVzdCB7XG4gIGNyZWRlbnRpYWw/OiBXZWJBdXRoblB1YmxpY0tleVJlZ2lzdHJhdGlvblJlcXVlc3Q7XG4gIG9yaWdpbj86IHN0cmluZztcbiAgcnBJZD86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29ydEZpZWxkIHtcbiAgbWlzc2luZz86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgb3JkZXI/OiBTb3J0O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgTGFtYmRhc1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYm9keT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IExhbWJkYVR5cGU7XG59XG5cbi8qKlxuICogVXNlciBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGN1cnJlbnRQYXNzd29yZD86IHN0cmluZztcbiAgZGlzYWJsZURvbWFpbkJsb2NrPzogYm9vbGVhbjtcbiAgc2VuZFNldFBhc3N3b3JkRW1haWw/OiBib29sZWFuO1xuICBza2lwVmVyaWZpY2F0aW9uPzogYm9vbGVhbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudExvZ2luQ29uZmlndXJhdGlvbiB7XG4gIHJlcXVpcmVBdXRoZW50aWNhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VSZXNwb25zZSB7XG4gIGRldmljZV9jb2RlPzogc3RyaW5nO1xuICBleHBpcmVzX2luPzogbnVtYmVyO1xuICBpbnRlcnZhbD86IG51bWJlcjtcbiAgdXNlcl9jb2RlPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25fdXJpPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25fdXJpX2NvbXBsZXRlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBMb2dvdXQgQVBJIHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gVVJMIHBhcmFtZXRlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nb3V0UmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBnbG9iYWw/OiBib29sZWFuO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVJlZ2lzdHJhdGlvblJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBUaGVtZVR5cGUge1xuICBhZHZhbmNlZCA9IFwiYWR2YW5jZWRcIixcbiAgc2ltcGxlID0gXCJzaW1wbGVcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSYXRlTGltaXRDb25maWd1cmF0aW9uIHtcbiAgZmFpbGVkTG9naW4/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBmb3Jnb3RQYXNzd29yZD86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIHNlbmRFbWFpbFZlcmlmaWNhdGlvbj86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIHNlbmRQYXNzd29yZGxlc3M/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgc2VuZFR3b0ZhY3Rvcj86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudCB7XG4gIGFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uPzogVGVuYW50QWNjZXNzQ29udHJvbENvbmZpZ3VyYXRpb247XG4gIGNhcHRjaGFDb25maWd1cmF0aW9uPzogVGVuYW50Q2FwdGNoYUNvbmZpZ3VyYXRpb247XG4gIGNvbmZpZ3VyZWQ/OiBib29sZWFuO1xuICBjb25uZWN0b3JQb2xpY2llcz86IEFycmF5PENvbm5lY3RvclBvbGljeT47XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbWFpbENvbmZpZ3VyYXRpb24/OiBFbWFpbENvbmZpZ3VyYXRpb247XG4gIGV2ZW50Q29uZmlndXJhdGlvbj86IEV2ZW50Q29uZmlndXJhdGlvbjtcbiAgZXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbj86IEV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb247XG4gIGZhaWxlZEF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbj86IEZhaWxlZEF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbjtcbiAgZmFtaWx5Q29uZmlndXJhdGlvbj86IEZhbWlseUNvbmZpZ3VyYXRpb247XG4gIGZvcm1Db25maWd1cmF0aW9uPzogVGVuYW50Rm9ybUNvbmZpZ3VyYXRpb247XG4gIGh0dHBTZXNzaW9uTWF4SW5hY3RpdmVJbnRlcnZhbD86IG51bWJlcjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGp3dENvbmZpZ3VyYXRpb24/OiBKV1RDb25maWd1cmF0aW9uO1xuICBsYW1iZGFDb25maWd1cmF0aW9uPzogVGVuYW50TGFtYmRhQ29uZmlndXJhdGlvbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvZ2luQ29uZmlndXJhdGlvbj86IFRlbmFudExvZ2luQ29uZmlndXJhdGlvbjtcbiAgbG9nb3V0VVJMPzogc3RyaW5nO1xuICBtYXhpbXVtUGFzc3dvcmRBZ2U/OiBNYXhpbXVtUGFzc3dvcmRBZ2U7XG4gIG1pbmltdW1QYXNzd29yZEFnZT86IE1pbmltdW1QYXNzd29yZEFnZTtcbiAgbXVsdGlGYWN0b3JDb25maWd1cmF0aW9uPzogVGVuYW50TXVsdGlGYWN0b3JDb25maWd1cmF0aW9uO1xuICBuYW1lPzogc3RyaW5nO1xuICBvYXV0aENvbmZpZ3VyYXRpb24/OiBUZW5hbnRPQXV0aDJDb25maWd1cmF0aW9uO1xuICBwYXNzd29yZEVuY3J5cHRpb25Db25maWd1cmF0aW9uPzogUGFzc3dvcmRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM/OiBQYXNzd29yZFZhbGlkYXRpb25SdWxlcztcbiAgcmF0ZUxpbWl0Q29uZmlndXJhdGlvbj86IFRlbmFudFJhdGVMaW1pdENvbmZpZ3VyYXRpb247XG4gIHJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24/OiBUZW5hbnRSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uO1xuICBzY2ltU2VydmVyQ29uZmlndXJhdGlvbj86IFRlbmFudFNDSU1TZXJ2ZXJDb25maWd1cmF0aW9uO1xuICBzc29Db25maWd1cmF0aW9uPzogVGVuYW50U1NPQ29uZmlndXJhdGlvbjtcbiAgc3RhdGU/OiBPYmplY3RTdGF0ZTtcbiAgdGhlbWVJZD86IFVVSUQ7XG4gIHVzZXJEZWxldGVQb2xpY3k/OiBUZW5hbnRVc2VyRGVsZXRlUG9saWN5O1xuICB1c2VybmFtZUNvbmZpZ3VyYXRpb24/OiBUZW5hbnRVc2VybmFtZUNvbmZpZ3VyYXRpb247XG4gIHdlYkF1dGhuQ29uZmlndXJhdGlvbj86IFRlbmFudFdlYkF1dGhuQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRPQXV0aDJDb25maWd1cmF0aW9uIHtcbiAgY2xpZW50Q3JlZGVudGlhbHNBY2Nlc3NUb2tlblBvcHVsYXRlTGFtYmRhSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIEFkZCBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJBZGRDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBUZW5hbnQgQVBJIHRvIGRlbGV0ZSBhIHRlbmFudCByYXRoZXIgdGhhbiB1c2luZyB0aGUgVVJMIHBhcmFtZXRlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50RGVsZXRlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhc3luYz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGNvbm5lY3RvcnMuIFRoaXMgZW51bSBpcyBzdG9yZWQgYXMgYW4gb3JkaW5hbCBvbiB0aGUgPGNvZGU+aWRlbnRpdGllczwvY29kZT4gdGFibGUsIG9yZGVyIG11c3QgYmUgbWFpbnRhaW5lZC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgZW51bSBDb25uZWN0b3JUeXBlIHtcbiAgRnVzaW9uQXV0aCA9IFwiRnVzaW9uQXV0aFwiLFxuICBHZW5lcmljID0gXCJHZW5lcmljXCIsXG4gIExEQVAgPSBcIkxEQVBcIlxufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBldmVudCBmb3IgYSBuZXcgZGV2aWNlICh1bi1yZWNvZ25pemVkKVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5OZXdEZXZpY2VFdmVudCBleHRlbmRzIFVzZXJMb2dpblN1Y2Nlc3NFdmVudCB7XG59XG5cbi8qKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRXZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhdXRoZW50aWNhdG9yQXR0YWNobWVudFByZWZlcmVuY2U/OiBBdXRoZW50aWNhdG9yQXR0YWNobWVudFByZWZlcmVuY2U7XG4gIHVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudD86IFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDtcbn1cblxuLyoqXG4gKiBYYm94IGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBYYm94SWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFhib3hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdHRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY29uc3VtZXJLZXk/OiBzdHJpbmc7XG4gIGNvbnN1bWVyU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUmVxdWVzdCB7XG4gIGNvbm5lY3Rvcj86IEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEV4dGVybmFsIEpXVC1vbmx5IGlkZW50aXR5IHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmYgYW5kIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbEpXVElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxFeHRlcm5hbEpXVEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBjbGFpbU1hcD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGRlZmF1bHRLZXlJZD86IFVVSUQ7XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBoZWFkZXJLZXlQYXJhbWV0ZXI/OiBzdHJpbmc7XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xuICB1bmlxdWVJZGVudGl0eUNsYWltPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgdG8gcmVnaXN0ZXIgYSBuZXcgcHVibGljIGtleSB3aXRoIFdlYkF1dGhuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblB1YmxpY0tleVJlZ2lzdHJhdGlvblJlcXVlc3Qge1xuICBjbGllbnRFeHRlbnNpb25SZXN1bHRzPzogV2ViQXV0aG5FeHRlbnNpb25zQ2xpZW50T3V0cHV0cztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJlc3BvbnNlPzogV2ViQXV0aG5BdXRoZW50aWNhdG9yUmVnaXN0cmF0aW9uUmVzcG9uc2U7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHRyYW5zcG9ydHM/OiBBcnJheTxzdHJpbmc+O1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdlYmhvb2sgc2VhcmNoIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rU2VhcmNoUmVzcG9uc2Uge1xuICB0b3RhbD86IG51bWJlcjtcbiAgd2ViaG9va3M/OiBBcnJheTxXZWJob29rPjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIGxvZ2luIHJlcG9ydC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlcG9ydFJlc3BvbnNlIHtcbiAgaG91cmx5Q291bnRzPzogQXJyYXk8Q291bnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFJlc3BvbnNlIHtcbn1cblxuLyoqXG4gKiBHcm91cCBNZW1iZXIgRGVsZXRlIFJlcXVlc3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyRGVsZXRlUmVxdWVzdCB7XG4gIG1lbWJlcklkcz86IEFycmF5PFVVSUQ+O1xuICBtZW1iZXJzPzogUmVjb3JkPFVVSUQsIEFycmF5PFVVSUQ+Pjtcbn1cblxuLyoqXG4gKiBBIGhpc3RvcmljYWwgc3RhdGUgb2YgYSB1c2VyIGxvZyBldmVudC4gU2luY2UgZXZlbnRzIGNhbiBiZSBtb2RpZmllZCwgdGhpcyBzdG9yZXMgdGhlIGhpc3RvcmljYWwgc3RhdGUuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nSGlzdG9yeSB7XG4gIGhpc3RvcnlJdGVtcz86IEFycmF5PEhpc3RvcnlJdGVtPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5SXRlbSB7XG4gIGFjdGlvbmVyVXNlcklkPzogVVVJRDtcbiAgY29tbWVudD86IHN0cmluZztcbiAgY3JlYXRlSW5zdGFudD86IG51bWJlcjtcbiAgZXhwaXJ5PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhdWRpdExvZz86IEF1ZGl0TG9nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICB0aW1lUGVyaW9kSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgbWFya2VyIGludGVyZmFjZSBpbmRpY2F0aW5nIHRoaXMgZXZlbnQgY2Fubm90IGJlIG1hZGUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9uVHJhbnNhY3Rpb25hbEV2ZW50IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgZW51bSBQcm9vZktleUZvckNvZGVFeGNoYW5nZVBvbGljeSB7XG4gIFJlcXVpcmVkID0gXCJSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZCA9IFwiTm90UmVxdWlyZWRcIixcbiAgTm90UmVxdWlyZWRXaGVuVXNpbmdDbGllbnRBdXRoZW50aWNhdGlvbiA9IFwiTm90UmVxdWlyZWRXaGVuVXNpbmdDbGllbnRBdXRoZW50aWNhdGlvblwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclJlc3BvbnNlIHtcbiAgY29kZT86IHN0cmluZztcbiAgcmVjb3ZlcnlDb2Rlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogRXBpYyBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXBpY0dhbWVzSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEVwaWNHYW1lc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vLyBEbyBub3QgcmVxdWlyZSBhIHNldHRlciBmb3IgJ3R5cGUnLCBpdCBpcyBkZWZpbmVkIGJ5IHRoZSBjb25jcmV0ZSBjbGFzcyBhbmQgaXMgbm90IG11dGFibGVcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVidWc/OiBib29sZWFuO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0cmFuc3BvcnQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBNZXNzZW5nZXJUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRSZXNwb25zZSB7XG4gIHNlY3JldD86IHN0cmluZztcbiAgc2VjcmV0QmFzZTMyRW5jb2RlZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXRpZXNcbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVNlYXJjaFJlc3BvbnNlIHtcbiAgZW50aXRpZXM/OiBBcnJheTxFbnRpdHk+O1xuICBuZXh0UmVzdWx0cz86IHN0cmluZztcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRMYW1iZGFDb25maWd1cmF0aW9uIHtcbiAgbG9naW5WYWxpZGF0aW9uSWQ/OiBVVUlEO1xuICBzY2ltRW50ZXJwcmlzZVVzZXJSZXF1ZXN0Q29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltRW50ZXJwcmlzZVVzZXJSZXNwb25zZUNvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbUdyb3VwUmVxdWVzdENvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbUdyb3VwUmVzcG9uc2VDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1Vc2VyUmVxdWVzdENvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbVVzZXJSZXNwb25zZUNvbnZlcnRlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pa2V5IFNsZWV2aVxuICovXG5leHBvcnQgZW51bSBNZXNzYWdlVHlwZSB7XG4gIFNNUyA9IFwiU01TXCJcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIFJlbHlpbmcgUGFydHkncyByZXF1aXJlbWVudHMgZm9yIDxhIGhyZWY9XCJodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4tMi8jY2xpZW50LXNpZGUtZGlzY292ZXJhYmxlLWNyZWRlbnRpYWxcIj5jbGllbnQtc2lkZVxuICogZGlzY292ZXJhYmxlIGNyZWRlbnRpYWxzPC9hPiAoZm9ybWVybHkga25vd24gYXMgXCJyZXNpZGVudCBrZXlzXCIpXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gUmVzaWRlbnRLZXlSZXF1aXJlbWVudCB7XG4gIGRpc2NvdXJhZ2VkID0gXCJkaXNjb3VyYWdlZFwiLFxuICBwcmVmZXJyZWQgPSBcInByZWZlcnJlZFwiLFxuICByZXF1aXJlZCA9IFwicmVxdWlyZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBlbnVtIENoYW5nZVBhc3N3b3JkUmVhc29uIHtcbiAgQWRtaW5pc3RyYXRpdmUgPSBcIkFkbWluaXN0cmF0aXZlXCIsXG4gIEJyZWFjaGVkID0gXCJCcmVhY2hlZFwiLFxuICBFeHBpcmVkID0gXCJFeHBpcmVkXCIsXG4gIFZhbGlkYXRpb24gPSBcIlZhbGlkYXRpb25cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY01lc3NlbmdlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiB7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBoZWFkZXJzPzogSFRUUEhlYWRlcnM7XG4gIGh0dHBBdXRoZW50aWNhdGlvblBhc3N3b3JkPzogc3RyaW5nO1xuICBodHRwQXV0aGVudGljYXRpb25Vc2VybmFtZT86IHN0cmluZztcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHNzbENlcnRpZmljYXRlPzogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU29ueVBTTiBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29ueVBTTklkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxTb255UFNOQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xFbnRyeSB7XG4gIGFjdGlvbj86IElQQWNjZXNzQ29udHJvbEVudHJ5QWN0aW9uO1xuICBlbmRJUEFkZHJlc3M/OiBzdHJpbmc7XG4gIHN0YXJ0SVBBZGRyZXNzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvdW50IHtcbiAgY291bnQ/OiBudW1iZXI7XG4gIGludGVydmFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBMREFQIGNvbm5lY3Rvci5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExEQVBDb25uZWN0b3JDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xuICBhdXRoZW50aWNhdGlvblVSTD86IHN0cmluZztcbiAgYmFzZVN0cnVjdHVyZT86IHN0cmluZztcbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gIGlkZW50aWZ5aW5nQXR0cmlidXRlPzogc3RyaW5nO1xuICBsYW1iZGFDb25maWd1cmF0aW9uPzogTGFtYmRhQ29uZmlndXJhdGlvbjtcbiAgbG9naW5JZEF0dHJpYnV0ZT86IHN0cmluZztcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHJlcXVlc3RlZEF0dHJpYnV0ZXM/OiBBcnJheTxzdHJpbmc+O1xuICBzZWN1cml0eU1ldGhvZD86IExEQVBTZWN1cml0eU1ldGhvZDtcbiAgc3lzdGVtQWNjb3VudEROPzogc3RyaW5nO1xuICBzeXN0ZW1BY2NvdW50UGFzc3dvcmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIExEQVBTZWN1cml0eU1ldGhvZCB7XG4gIE5vbmUgPSBcIk5vbmVcIixcbiAgTERBUFMgPSBcIkxEQVBTXCIsXG4gIFN0YXJ0VExTID0gXCJTdGFydFRMU1wiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIHJlY29uY2lsZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEpvaG5hdGhvbiBXb29kXG4gKi9cbmV4cG9ydCBlbnVtIE9hdXRoMkF1dGhvcml6ZWRVUkxWYWxpZGF0aW9uUG9saWN5IHtcbiAgQWxsb3dXaWxkY2FyZHMgPSBcIkFsbG93V2lsZGNhcmRzXCIsXG4gIEV4YWN0TWF0Y2ggPSBcIkV4YWN0TWF0Y2hcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ09SU0NvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYWxsb3dDcmVkZW50aWFscz86IGJvb2xlYW47XG4gIGFsbG93ZWRIZWFkZXJzPzogQXJyYXk8c3RyaW5nPjtcbiAgYWxsb3dlZE1ldGhvZHM/OiBBcnJheTxIVFRQTWV0aG9kPjtcbiAgYWxsb3dlZE9yaWdpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGV4cG9zZWRIZWFkZXJzPzogQXJyYXk8c3RyaW5nPjtcbiAgcHJlZmxpZ2h0TWF4QWdlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi0yLyNhdXRoZW50aWNhdG9yLWF0dGFjaG1lbnQtbW9kYWxpdHlcIj5hdXRoZW50aWNhdG9yIGF0dGFjaG1lbnQgbW9kYWxpdHk8L2E+LlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIEF1dGhlbnRpY2F0b3JBdHRhY2htZW50IHtcbiAgcGxhdGZvcm0gPSBcInBsYXRmb3JtXCIsXG4gIGNyb3NzUGxhdGZvcm0gPSBcImNyb3NzUGxhdGZvcm1cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0V4cG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGNyaXRlcmlhPzogQXVkaXRMb2dTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTdXBwbHkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBhY2NvdW50IHdoZW4gY3JlYXRpbmcgYSBuZXcgY3JlZGVudGlhbFxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgZXh0ZW5kcyBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtU3RlcCB7XG4gIGZpZWxkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgZW50aXR5IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgYSB1c2VyIGV2ZW50IChsb2dpbiwgcmVnaXN0ZXIsIGV0YykgdGhhdCBoZWxwcyBpZGVudGlmeSB0aGUgc291cmNlIG9mIHRoZSBldmVudCAobG9jYXRpb24sIGRldmljZSB0eXBlLCBPUywgZXRjKS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudEluZm8ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGV2aWNlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGRldmljZU5hbWU/OiBzdHJpbmc7XG4gIGRldmljZVR5cGU/OiBzdHJpbmc7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgbG9jYXRpb24/OiBMb2NhdGlvbjtcbiAgb3M/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIEdyb3VwIE1lbWJlcnNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGdyb3VwSWQ/OiBVVUlEO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZCB7XG4gIFVzZVBvcHVwID0gXCJVc2VQb3B1cFwiLFxuICBVc2VSZWRpcmVjdCA9IFwiVXNlUmVkaXJlY3RcIixcbiAgVXNlVmVuZG9ySmF2YVNjcmlwdCA9IFwiVXNlVmVuZG9ySmF2YVNjcmlwdFwiXG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciB0aGVtZXNcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IFRoZW1lVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWluaW11bVBhc3N3b3JkQWdlIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTG9naW4gUGluZyBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUGluZ1JlcXVlc3QgZXh0ZW5kcyBCYXNlTG9naW5SZXF1ZXN0IHtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbklkQ29ubmVjdEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyVGVuYW50Q29uZmlndXJhdGlvbiB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBsaW1pdFVzZXJMaW5rQ291bnQ/OiBJZGVudGl0eVByb3ZpZGVyTGltaXRVc2VyTGlua2luZ1BvbGljeTtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCBmb3IgVXNlciBjb25zZW50IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50UmVxdWVzdCB7XG4gIGNvbnNlbnQ/OiBDb25zZW50O1xufVxuXG4vKipcbiAqIFN1cHBseSBpbmZvcm1hdGlvbiBvbiBjcmVkZW50aWFsIHR5cGUgYW5kIGFsZ29yaXRobSB0byB0aGUgPGk+YXV0aGVudGljYXRvcjwvaT4uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyB7XG4gIGFsZz86IENvc2VBbGdvcml0aG1JZGVudGlmaWVyO1xuICB0eXBlPzogUHVibGljS2V5Q3JlZGVudGlhbFR5cGU7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgc2V0IG9mIGxvY2FsaXplZCBTdHJpbmdzIHRoYXQgY2FuIGJlIHN0b3JlZCBhcyBKU09OLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsaXplZFN0cmluZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFJlZnJlc2hUb2tlblVzYWdlUG9saWN5IHtcbiAgUmV1c2FibGUgPSBcIlJldXNhYmxlXCIsXG4gIE9uZVRpbWVVc2UgPSBcIk9uZVRpbWVVc2VcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGVudW0gU0FNTHYyRGVzdGluYXRpb25Bc3NlcnRpb25Qb2xpY3kge1xuICBFbmFibGVkID0gXCJFbmFibGVkXCIsXG4gIERpc2FibGVkID0gXCJEaXNhYmxlZFwiLFxuICBBbGxvd0FsdGVybmF0ZXMgPSBcIkFsbG93QWx0ZXJuYXRlc1wiXG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGRlc2NyaWJpbmcgdGhlIG5lZWQgZm9yIENPUlMgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWlyZXNDT1JTQ29uZmlndXJhdGlvbiB7XG59XG5cbi8qKlxuICogQ2hhbmdlIHBhc3N3b3JkIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZVBhc3N3b3JkUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY2hhbmdlUGFzc3dvcmRJZD86IHN0cmluZztcbiAgY3VycmVudFBhc3N3b3JkPzogc3RyaW5nO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBwYXNzd29yZD86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0cnVzdENoYWxsZW5nZT86IHN0cmluZztcbiAgdHJ1c3RUb2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoRXJyb3Ige1xuICBjaGFuZ2VfcGFzc3dvcmRfaWQ/OiBzdHJpbmc7XG4gIGVycm9yPzogT0F1dGhFcnJvclR5cGU7XG4gIGVycm9yX2Rlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBlcnJvcl9yZWFzb24/OiBPQXV0aEVycm9yUmVhc29uO1xuICBlcnJvcl91cmk/OiBzdHJpbmc7XG4gIHR3b19mYWN0b3JfaWQ/OiBzdHJpbmc7XG4gIHR3b19mYWN0b3JfbWV0aG9kcz86IEFycmF5PFR3b0ZhY3Rvck1ldGhvZD47XG59XG5cbmV4cG9ydCBlbnVtIE9BdXRoRXJyb3JSZWFzb24ge1xuICBhdXRoX2NvZGVfbm90X2ZvdW5kID0gXCJhdXRoX2NvZGVfbm90X2ZvdW5kXCIsXG4gIGFjY2Vzc190b2tlbl9tYWxmb3JtZWQgPSBcImFjY2Vzc190b2tlbl9tYWxmb3JtZWRcIixcbiAgYWNjZXNzX3Rva2VuX2V4cGlyZWQgPSBcImFjY2Vzc190b2tlbl9leHBpcmVkXCIsXG4gIGFjY2Vzc190b2tlbl91bmF2YWlsYWJsZV9mb3JfcHJvY2Vzc2luZyA9IFwiYWNjZXNzX3Rva2VuX3VuYXZhaWxhYmxlX2Zvcl9wcm9jZXNzaW5nXCIsXG4gIGFjY2Vzc190b2tlbl9mYWlsZWRfcHJvY2Vzc2luZyA9IFwiYWNjZXNzX3Rva2VuX2ZhaWxlZF9wcm9jZXNzaW5nXCIsXG4gIGFjY2Vzc190b2tlbl9pbnZhbGlkID0gXCJhY2Nlc3NfdG9rZW5faW52YWxpZFwiLFxuICBhY2Nlc3NfdG9rZW5fcmVxdWlyZWQgPSBcImFjY2Vzc190b2tlbl9yZXF1aXJlZFwiLFxuICByZWZyZXNoX3Rva2VuX25vdF9mb3VuZCA9IFwicmVmcmVzaF90b2tlbl9ub3RfZm91bmRcIixcbiAgcmVmcmVzaF90b2tlbl90eXBlX25vdF9zdXBwb3J0ZWQgPSBcInJlZnJlc2hfdG9rZW5fdHlwZV9ub3Rfc3VwcG9ydGVkXCIsXG4gIGludmFsaWRfY2xpZW50X2lkID0gXCJpbnZhbGlkX2NsaWVudF9pZFwiLFxuICBpbnZhbGlkX3VzZXJfY3JlZGVudGlhbHMgPSBcImludmFsaWRfdXNlcl9jcmVkZW50aWFsc1wiLFxuICBpbnZhbGlkX2dyYW50X3R5cGUgPSBcImludmFsaWRfZ3JhbnRfdHlwZVwiLFxuICBpbnZhbGlkX29yaWdpbiA9IFwiaW52YWxpZF9vcmlnaW5cIixcbiAgaW52YWxpZF9vcmlnaW5fb3BhcXVlID0gXCJpbnZhbGlkX29yaWdpbl9vcGFxdWVcIixcbiAgaW52YWxpZF9wa2NlX2NvZGVfdmVyaWZpZXIgPSBcImludmFsaWRfcGtjZV9jb2RlX3ZlcmlmaWVyXCIsXG4gIGludmFsaWRfcGtjZV9jb2RlX2NoYWxsZW5nZSA9IFwiaW52YWxpZF9wa2NlX2NvZGVfY2hhbGxlbmdlXCIsXG4gIGludmFsaWRfcGtjZV9jb2RlX2NoYWxsZW5nZV9tZXRob2QgPSBcImludmFsaWRfcGtjZV9jb2RlX2NoYWxsZW5nZV9tZXRob2RcIixcbiAgaW52YWxpZF9yZWRpcmVjdF91cmkgPSBcImludmFsaWRfcmVkaXJlY3RfdXJpXCIsXG4gIGludmFsaWRfcmVzcG9uc2VfbW9kZSA9IFwiaW52YWxpZF9yZXNwb25zZV9tb2RlXCIsXG4gIGludmFsaWRfcmVzcG9uc2VfdHlwZSA9IFwiaW52YWxpZF9yZXNwb25zZV90eXBlXCIsXG4gIGludmFsaWRfaWRfdG9rZW5faGludCA9IFwiaW52YWxpZF9pZF90b2tlbl9oaW50XCIsXG4gIGludmFsaWRfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gXCJpbnZhbGlkX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaVwiLFxuICBpbnZhbGlkX2RldmljZV9jb2RlID0gXCJpbnZhbGlkX2RldmljZV9jb2RlXCIsXG4gIGludmFsaWRfdXNlcl9jb2RlID0gXCJpbnZhbGlkX3VzZXJfY29kZVwiLFxuICBpbnZhbGlkX2FkZGl0aW9uYWxfY2xpZW50X2lkID0gXCJpbnZhbGlkX2FkZGl0aW9uYWxfY2xpZW50X2lkXCIsXG4gIGludmFsaWRfdGFyZ2V0X2VudGl0eV9zY29wZSA9IFwiaW52YWxpZF90YXJnZXRfZW50aXR5X3Njb3BlXCIsXG4gIGludmFsaWRfZW50aXR5X3Blcm1pc3Npb25fc2NvcGUgPSBcImludmFsaWRfZW50aXR5X3Blcm1pc3Npb25fc2NvcGVcIixcbiAgaW52YWxpZF91c2VyX2lkID0gXCJpbnZhbGlkX3VzZXJfaWRcIixcbiAgZ3JhbnRfdHlwZV9kaXNhYmxlZCA9IFwiZ3JhbnRfdHlwZV9kaXNhYmxlZFwiLFxuICBtaXNzaW5nX2NsaWVudF9pZCA9IFwibWlzc2luZ19jbGllbnRfaWRcIixcbiAgbWlzc2luZ19jbGllbnRfc2VjcmV0ID0gXCJtaXNzaW5nX2NsaWVudF9zZWNyZXRcIixcbiAgbWlzc2luZ19jb2RlID0gXCJtaXNzaW5nX2NvZGVcIixcbiAgbWlzc2luZ19jb2RlX2NoYWxsZW5nZSA9IFwibWlzc2luZ19jb2RlX2NoYWxsZW5nZVwiLFxuICBtaXNzaW5nX2NvZGVfdmVyaWZpZXIgPSBcIm1pc3NpbmdfY29kZV92ZXJpZmllclwiLFxuICBtaXNzaW5nX2RldmljZV9jb2RlID0gXCJtaXNzaW5nX2RldmljZV9jb2RlXCIsXG4gIG1pc3NpbmdfZ3JhbnRfdHlwZSA9IFwibWlzc2luZ19ncmFudF90eXBlXCIsXG4gIG1pc3NpbmdfcmVkaXJlY3RfdXJpID0gXCJtaXNzaW5nX3JlZGlyZWN0X3VyaVwiLFxuICBtaXNzaW5nX3JlZnJlc2hfdG9rZW4gPSBcIm1pc3NpbmdfcmVmcmVzaF90b2tlblwiLFxuICBtaXNzaW5nX3Jlc3BvbnNlX3R5cGUgPSBcIm1pc3NpbmdfcmVzcG9uc2VfdHlwZVwiLFxuICBtaXNzaW5nX3Rva2VuID0gXCJtaXNzaW5nX3Rva2VuXCIsXG4gIG1pc3NpbmdfdXNlcl9jb2RlID0gXCJtaXNzaW5nX3VzZXJfY29kZVwiLFxuICBtaXNzaW5nX3VzZXJfaWQgPSBcIm1pc3NpbmdfdXNlcl9pZFwiLFxuICBtaXNzaW5nX3ZlcmlmaWNhdGlvbl91cmkgPSBcIm1pc3NpbmdfdmVyaWZpY2F0aW9uX3VyaVwiLFxuICBsb2dpbl9wcmV2ZW50ZWQgPSBcImxvZ2luX3ByZXZlbnRlZFwiLFxuICBub3RfbGljZW5zZWQgPSBcIm5vdF9saWNlbnNlZFwiLFxuICB1c2VyX2NvZGVfZXhwaXJlZCA9IFwidXNlcl9jb2RlX2V4cGlyZWRcIixcbiAgdXNlcl9leHBpcmVkID0gXCJ1c2VyX2V4cGlyZWRcIixcbiAgdXNlcl9sb2NrZWQgPSBcInVzZXJfbG9ja2VkXCIsXG4gIHVzZXJfbm90X2ZvdW5kID0gXCJ1c2VyX25vdF9mb3VuZFwiLFxuICBjbGllbnRfYXV0aGVudGljYXRpb25fbWlzc2luZyA9IFwiY2xpZW50X2F1dGhlbnRpY2F0aW9uX21pc3NpbmdcIixcbiAgaW52YWxpZF9jbGllbnRfYXV0aGVudGljYXRpb25fc2NoZW1lID0gXCJpbnZhbGlkX2NsaWVudF9hdXRoZW50aWNhdGlvbl9zY2hlbWVcIixcbiAgaW52YWxpZF9jbGllbnRfYXV0aGVudGljYXRpb24gPSBcImludmFsaWRfY2xpZW50X2F1dGhlbnRpY2F0aW9uXCIsXG4gIGNsaWVudF9pZF9taXNtYXRjaCA9IFwiY2xpZW50X2lkX21pc21hdGNoXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9hZG1pbmlzdHJhdGl2ZSA9IFwiY2hhbmdlX3Bhc3N3b3JkX2FkbWluaXN0cmF0aXZlXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9icmVhY2hlZCA9IFwiY2hhbmdlX3Bhc3N3b3JkX2JyZWFjaGVkXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9leHBpcmVkID0gXCJjaGFuZ2VfcGFzc3dvcmRfZXhwaXJlZFwiLFxuICBjaGFuZ2VfcGFzc3dvcmRfdmFsaWRhdGlvbiA9IFwiY2hhbmdlX3Bhc3N3b3JkX3ZhbGlkYXRpb25cIixcbiAgdW5rbm93biA9IFwidW5rbm93blwiLFxuICBtaXNzaW5nX3JlcXVpcmVkX3Njb3BlID0gXCJtaXNzaW5nX3JlcXVpcmVkX3Njb3BlXCIsXG4gIHVua25vd25fc2NvcGUgPSBcInVua25vd25fc2NvcGVcIixcbiAgY29uc2VudF9jYW5jZWxlZCA9IFwiY29uc2VudF9jYW5jZWxlZFwiXG59XG5cbmV4cG9ydCBlbnVtIE9BdXRoRXJyb3JUeXBlIHtcbiAgaW52YWxpZF9yZXF1ZXN0ID0gXCJpbnZhbGlkX3JlcXVlc3RcIixcbiAgaW52YWxpZF9jbGllbnQgPSBcImludmFsaWRfY2xpZW50XCIsXG4gIGludmFsaWRfZ3JhbnQgPSBcImludmFsaWRfZ3JhbnRcIixcbiAgaW52YWxpZF90b2tlbiA9IFwiaW52YWxpZF90b2tlblwiLFxuICB1bmF1dGhvcml6ZWRfY2xpZW50ID0gXCJ1bmF1dGhvcml6ZWRfY2xpZW50XCIsXG4gIGludmFsaWRfc2NvcGUgPSBcImludmFsaWRfc2NvcGVcIixcbiAgc2VydmVyX2Vycm9yID0gXCJzZXJ2ZXJfZXJyb3JcIixcbiAgdW5zdXBwb3J0ZWRfZ3JhbnRfdHlwZSA9IFwidW5zdXBwb3J0ZWRfZ3JhbnRfdHlwZVwiLFxuICB1bnN1cHBvcnRlZF9yZXNwb25zZV90eXBlID0gXCJ1bnN1cHBvcnRlZF9yZXNwb25zZV90eXBlXCIsXG4gIGFjY2Vzc19kZW5pZWQgPSBcImFjY2Vzc19kZW5pZWRcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX3JlcXVpcmVkID0gXCJjaGFuZ2VfcGFzc3dvcmRfcmVxdWlyZWRcIixcbiAgbm90X2xpY2Vuc2VkID0gXCJub3RfbGljZW5zZWRcIixcbiAgdHdvX2ZhY3Rvcl9yZXF1aXJlZCA9IFwidHdvX2ZhY3Rvcl9yZXF1aXJlZFwiLFxuICBhdXRob3JpemF0aW9uX3BlbmRpbmcgPSBcImF1dGhvcml6YXRpb25fcGVuZGluZ1wiLFxuICBleHBpcmVkX3Rva2VuID0gXCJleHBpcmVkX3Rva2VuXCIsXG4gIHVuc3VwcG9ydGVkX3Rva2VuX3R5cGUgPSBcInVuc3VwcG9ydGVkX3Rva2VuX3R5cGVcIlxufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgYWxsIGlkZW50aXR5IHByb3ZpZGVycyB0aGF0IGNhbiBiZSBkb21haW4gYmFzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9tYWluQmFzZWRJZGVudGl0eVByb3ZpZGVyIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGV2aWNlSW5mbyB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsYXN0QWNjZXNzZWRBZGRyZXNzPzogc3RyaW5nO1xuICBsYXN0QWNjZXNzZWRJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBEZXZpY2VUeXBlIHtcbiAgQlJPV1NFUiA9IFwiQlJPV1NFUlwiLFxuICBERVNLVE9QID0gXCJERVNLVE9QXCIsXG4gIExBUFRPUCA9IFwiTEFQVE9QXCIsXG4gIE1PQklMRSA9IFwiTU9CSUxFXCIsXG4gIE9USEVSID0gXCJPVEhFUlwiLFxuICBTRVJWRVIgPSBcIlNFUlZFUlwiLFxuICBUQUJMRVQgPSBcIlRBQkxFVFwiLFxuICBUViA9IFwiVFZcIixcbiAgVU5LTk9XTiA9IFwiVU5LTk9XTlwiXG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiBBUEkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlIHtcbiAgc3lzdGVtQ29uZmlndXJhdGlvbj86IFN5c3RlbUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JTdGF0dXMge1xuICBhZHZhbmNlZElkZW50aXR5UHJvdmlkZXJzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkTGFtYmRhcz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZE11bHRpRmFjdG9yQXV0aGVudGljYXRpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYWR2YW5jZWRPQXV0aFNjb3Blcz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZE9BdXRoU2NvcGVzQ3VzdG9tU2NvcGVzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkT0F1dGhTY29wZXNUaGlyZFBhcnR5QXBwbGljYXRpb25zPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkUmVnaXN0cmF0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFwcGxpY2F0aW9uTXVsdGlGYWN0b3JBdXRoZW50aWNhdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhcHBsaWNhdGlvblRoZW1lcz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBicmVhY2hlZFBhc3N3b3JkRGV0ZWN0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGNvbm5lY3RvcnM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgZW50aXR5TWFuYWdlbWVudD86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBleHBpcmF0aW9uPzogc3RyaW5nO1xuICBsaWNlbnNlQXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGxpY2Vuc2VkPzogYm9vbGVhbjtcbiAgc2NpbVNlcnZlcj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB0aHJlYXREZXRlY3Rpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgd2ViQXV0aG4/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgd2ViQXV0aG5QbGF0Zm9ybUF1dGhlbnRpY2F0b3JzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIHdlYkF1dGhuUm9hbWluZ0F1dGhlbnRpY2F0b3JzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBjb21wbGV0aW5nIFdlYkF1dGhuIGFzc2VydGlvblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5Bc3NlcnRSZXNwb25zZSB7XG4gIGNyZWRlbnRpYWw/OiBXZWJBdXRobkNyZWRlbnRpYWw7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBBcHBsaWNhdGlvbk11bHRpRmFjdG9yVHJ1c3RQb2xpY3kge1xuICBBbnkgPSBcIkFueVwiLFxuICBUaGlzID0gXCJUaGlzXCIsXG4gIE5vbmUgPSBcIk5vbmVcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXhpbXVtUGFzc3dvcmRBZ2UgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZGF5cz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFJhdGVMaW1pdGVkUmVxdWVzdFR5cGUge1xuICBGYWlsZWRMb2dpbiA9IFwiRmFpbGVkTG9naW5cIixcbiAgRm9yZ290UGFzc3dvcmQgPSBcIkZvcmdvdFBhc3N3b3JkXCIsXG4gIFNlbmRFbWFpbFZlcmlmaWNhdGlvbiA9IFwiU2VuZEVtYWlsVmVyaWZpY2F0aW9uXCIsXG4gIFNlbmRQYXNzd29yZGxlc3MgPSBcIlNlbmRQYXNzd29yZGxlc3NcIixcbiAgU2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbiA9IFwiU2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvblwiLFxuICBTZW5kVHdvRmFjdG9yID0gXCJTZW5kVHdvRmFjdG9yXCJcbn1cblxuLyoqXG4gKiBBdWRpdCBsb2cgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dTZWFyY2hSZXNwb25zZSB7XG4gIGF1ZGl0TG9ncz86IEFycmF5PEF1ZGl0TG9nPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBMYW1iZGFFbmdpbmVUeXBlIHtcbiAgR3JhYWxKUyA9IFwiR3JhYWxKU1wiLFxuICBOYXNob3JuID0gXCJOYXNob3JuXCJcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHN0YXJ0aW5nIGEgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuU3RhcnRSZXNwb25zZSB7XG4gIG9wdGlvbnM/OiBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM7XG59XG5cbi8qKlxuICogU0FNTCB2MiBpZGVudGl0eSBwcm92aWRlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlU0FNTHYySWRlbnRpdHlQcm92aWRlcjxTQU1MdjJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYXNzZXJ0aW9uQ29uZmlndXJhdGlvbj86IFNBTUx2MkFzc2VydGlvbkNvbmZpZ3VyYXRpb247XG4gIGJ1dHRvbkltYWdlVVJMPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgaWRwRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGlkcEluaXRpYXRlZENvbmZpZ3VyYXRpb24/OiBTQU1MdjJJZHBJbml0aWF0ZWRDb25maWd1cmF0aW9uO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGxvZ2luSGludENvbmZpZ3VyYXRpb24/OiBMb2dpbkhpbnRDb25maWd1cmF0aW9uO1xuICBuYW1lSWRGb3JtYXQ/OiBzdHJpbmc7XG4gIHBvc3RSZXF1ZXN0PzogYm9vbGVhbjtcbiAgcmVxdWVzdFNpZ25pbmdLZXlJZD86IFVVSUQ7XG4gIHNpZ25SZXF1ZXN0PzogYm9vbGVhbjtcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0eSB0eXBlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEVudGl0eVR5cGVTZWFyY2hDcml0ZXJpYTtcbn1cblxuLy8gRG8gbm90IHJlcXVpcmUgYSBzZXR0ZXIgZm9yICd0eXBlJywgaXQgaXMgZGVmaW5lZCBieSB0aGUgY29uY3JldGUgY2xhc3MgYW5kIGlzIG5vdCBtdXRhYmxlXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IENvbm5lY3RvclR5cGU7XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgZm9yIG1hbmFnaW5nIGZhbWlsaWVzIGFuZCBtZW1iZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseVJlcXVlc3Qge1xuICBmYW1pbHlNZW1iZXI/OiBGYW1pbHlNZW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbG9hZFJlcXVlc3Qge1xuICBuYW1lcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JTdGFydFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY29kZT86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0cnVzdENoYWxsZW5nZT86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25NdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24ge1xuICBlbWFpbD86IE11bHRpRmFjdG9yRW1haWxUZW1wbGF0ZTtcbiAgbG9naW5Qb2xpY3k/OiBNdWx0aUZhY3RvckxvZ2luUG9saWN5O1xuICBzbXM/OiBNdWx0aUZhY3RvclNNU1RlbXBsYXRlO1xuICB0cnVzdFBvbGljeT86IEFwcGxpY2F0aW9uTXVsdGlGYWN0b3JUcnVzdFBvbGljeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvckVtYWlsVGVtcGxhdGUge1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvclNNU1RlbXBsYXRlIHtcbiAgdGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElzc3VlUmVzcG9uc2Uge1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlIHtcbiAgaWRlbnRpdHlQcm92aWRlckxpbms/OiBJZGVudGl0eVByb3ZpZGVyTGluaztcbiAgaWRlbnRpdHlQcm92aWRlckxpbmtzPzogQXJyYXk8SWRlbnRpdHlQcm92aWRlckxpbms+O1xufVxuXG4vKipcbiAqIFJlcXVlc3QgdG8gYXV0aGVudGljYXRlIHdpdGggV2ViQXV0aG5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuUHVibGljS2V5QXV0aGVudGljYXRpb25SZXF1ZXN0IHtcbiAgY2xpZW50RXh0ZW5zaW9uUmVzdWx0cz86IFdlYkF1dGhuRXh0ZW5zaW9uc0NsaWVudE91dHB1dHM7XG4gIGlkPzogc3RyaW5nO1xuICByZXNwb25zZT86IFdlYkF1dGhuQXV0aGVudGljYXRvckF1dGhlbnRpY2F0aW9uUmVzcG9uc2U7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW50aXR5IEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlSZXF1ZXN0IHtcbiAgZW50aXR5PzogRW50aXR5O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xuICBvcmlnaW5hbD86IEdyb3VwO1xufVxuXG4vKipcbiAqIENsZWFuU3BlYWsgY29uZmlndXJhdGlvbiBhdCB0aGUgc3lzdGVtIGFuZCBhcHBsaWNhdGlvbiBsZXZlbC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGVhblNwZWFrQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIHVybD86IHN0cmluZztcbiAgdXNlcm5hbWVNb2RlcmF0aW9uPzogVXNlcm5hbWVNb2RlcmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJuYW1lTW9kZXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBTdG9yZXMgYW4gZW1haWwgdGVtcGxhdGUgdXNlZCB0byBzZW5kIGVtYWlscyB0byB1c2Vycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlIHtcbiAgZGVmYXVsdEZyb21OYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0SHRtbFRlbXBsYXRlPzogc3RyaW5nO1xuICBkZWZhdWx0U3ViamVjdD86IHN0cmluZztcbiAgZGVmYXVsdFRleHRUZW1wbGF0ZT86IHN0cmluZztcbiAgZnJvbUVtYWlsPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRGcm9tTmFtZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBsb2NhbGl6ZWRIdG1sVGVtcGxhdGVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbG9jYWxpemVkU3ViamVjdHM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBsb2NhbGl6ZWRUZXh0VGVtcGxhdGVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIG1hbmFnaW5nIGZhbWlsaWVzIGFuZCBtZW1iZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseVJlc3BvbnNlIHtcbiAgZmFtaWxpZXM/OiBBcnJheTxGYW1pbHk+O1xuICBmYW1pbHk/OiBGYW1pbHk7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3BvbnNlIGZvciBHcm91cCBNZW1iZXJzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyU2VhcmNoUmVzcG9uc2Uge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWNoZWRQYXNzd29yZFRlbmFudE1ldHJpYyB7XG4gIGFjdGlvblJlcXVpcmVkPzogbnVtYmVyO1xuICBtYXRjaGVkQ29tbW9uUGFzc3dvcmRDb3VudD86IG51bWJlcjtcbiAgbWF0Y2hlZEV4YWN0Q291bnQ/OiBudW1iZXI7XG4gIG1hdGNoZWRQYXNzd29yZENvdW50PzogbnVtYmVyO1xuICBtYXRjaGVkU3ViQWRkcmVzc0NvdW50PzogbnVtYmVyO1xuICBwYXNzd29yZHNDaGVja2VkQ291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogSldUIENvbmZpZ3VyYXRpb24uIEEgSldUIENvbmZpZ3VyYXRpb24gZm9yIGFuIEFwcGxpY2F0aW9uIG1heSBub3QgYmUgYWN0aXZlIGlmIGl0IGlzIHVzaW5nIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiwgdGhlIGNvbmZpZ3VyYXRpb25cbiAqIG1heSBiZSA8Y29kZT5lbmFibGVkID0gZmFsc2U8L2NvZGU+LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFjY2Vzc1Rva2VuS2V5SWQ/OiBVVUlEO1xuICBpZFRva2VuS2V5SWQ/OiBVVUlEO1xuICByZWZyZXNoVG9rZW5FeHBpcmF0aW9uUG9saWN5PzogUmVmcmVzaFRva2VuRXhwaXJhdGlvblBvbGljeTtcbiAgcmVmcmVzaFRva2VuT25lVGltZVVzZUNvbmZpZ3VyYXRpb24/OiBSZWZyZXNoVG9rZW5PbmVUaW1lVXNlQ29uZmlndXJhdGlvbjtcbiAgcmVmcmVzaFRva2VuUmV2b2NhdGlvblBvbGljeT86IFJlZnJlc2hUb2tlblJldm9jYXRpb25Qb2xpY3k7XG4gIHJlZnJlc2hUb2tlblNsaWRpbmdXaW5kb3dDb25maWd1cmF0aW9uPzogUmVmcmVzaFRva2VuU2xpZGluZ1dpbmRvd0NvbmZpZ3VyYXRpb247XG4gIHJlZnJlc2hUb2tlblRpbWVUb0xpdmVJbk1pbnV0ZXM/OiBudW1iZXI7XG4gIHJlZnJlc2hUb2tlblVzYWdlUG9saWN5PzogUmVmcmVzaFRva2VuVXNhZ2VQb2xpY3k7XG4gIHRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25JbWFnZVVSTD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NlbmdlclJlcXVlc3Qge1xuICBtZXNzZW5nZXI/OiBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBBIGxvZyBmb3IgYW4gYWN0aW9uIHRoYXQgd2FzIHRha2VuIG9uIGEgVXNlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uTG9nIHtcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGVtYWlsVXNlck9uRW5kPzogYm9vbGVhbjtcbiAgZW5kRXZlbnRTZW50PzogYm9vbGVhbjtcbiAgZXhwaXJ5PzogbnVtYmVyO1xuICBoaXN0b3J5PzogTG9nSGlzdG9yeTtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWROYW1lPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRPcHRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZFJlYXNvbj86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgbm90aWZ5VXNlck9uRW5kPzogYm9vbGVhbjtcbiAgb3B0aW9uPzogc3RyaW5nO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIHJlYXNvbkNvZGU/OiBzdHJpbmc7XG4gIHVzZXJBY3Rpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQ29udGFpbnMgZXh0ZW5zaW9uIG91dHB1dCBmb3IgcmVxdWVzdGVkIGV4dGVuc2lvbnMgZHVyaW5nIGEgV2ViQXV0aG4gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMge1xuICBjcmVkUHJvcHM/OiBDcmVkZW50aWFsUHJvcGVydGllc091dHB1dDtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSB1c2VyIGFjY291bnQgb3IgV2ViQXV0aG4gUmVseWluZyBQYXJ0eSBhc3NvY2lhdGVkIHdpdGggYSBwdWJsaWMga2V5IGNyZWRlbnRpYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWdpc3RyYXRpb24gZGVsZXRlIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25EZWxldGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG59XG5cbi8qKlxuICogVXNlZCB0byBleHByZXNzIHdoZXRoZXIgdGhlIFJlbHlpbmcgUGFydHkgcmVxdWlyZXMgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi0yLyN1c2VyLXZlcmlmaWNhdGlvblwiPnVzZXIgdmVyaWZpY2F0aW9uPC9hPiBmb3IgdGhlXG4gKiBjdXJyZW50IG9wZXJhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQge1xuICByZXF1aXJlZCA9IFwicmVxdWlyZWRcIixcbiAgcHJlZmVycmVkID0gXCJwcmVmZXJyZWRcIixcbiAgZGlzY291cmFnZWQgPSBcImRpc2NvdXJhZ2VkXCJcbn1cblxuLyoqXG4gKiBIZWxwZXIgaW50ZXJmYWNlIHRoYXQgaW5kaWNhdGVzIGFuIGlkZW50aXR5IHByb3ZpZGVyIGNhbiBiZSBmZWRlcmF0ZWQgdG8gdXNpbmcgdGhlIEhUVFAgUE9TVCBtZXRob2QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcG9ydHNQb3N0QmluZGluZ3Mge1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXNwb25zZSBmb3IgVGhlbWVzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVTZWFyY2hSZXNwb25zZSB7XG4gIHRoZW1lcz86IEFycmF5PFRoZW1lPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGVuZD86IG51bWJlcjtcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgbmV3VmFsdWU/OiBzdHJpbmc7XG4gIG9sZFZhbHVlPzogc3RyaW5nO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIHN0YXJ0PzogbnVtYmVyO1xuICB1c2VyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIWVBSSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEhZUFJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgcmVseWluZ1BhcnR5QXBwbGljYXRpb25JZD86IHN0cmluZztcbiAgcmVseWluZ1BhcnR5VVJMPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIENsaWVudEF1dGhlbnRpY2F0aW9uUG9saWN5IHtcbiAgUmVxdWlyZWQgPSBcIlJlcXVpcmVkXCIsXG4gIE5vdFJlcXVpcmVkID0gXCJOb3RSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZFdoZW5Vc2luZ1BLQ0UgPSBcIk5vdFJlcXVpcmVkV2hlblVzaW5nUEtDRVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlbmRpbmdJZFBMaW5rIHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBpZGVudGl0eVByb3ZpZGVyTGlua3M/OiBBcnJheTxJZGVudGl0eVByb3ZpZGVyTGluaz47XG4gIGlkZW50aXR5UHJvdmlkZXJOYW1lPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVyVGVuYW50Q29uZmlndXJhdGlvbj86IElkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uO1xuICBpZGVudGl0eVByb3ZpZGVyVHlwZT86IElkZW50aXR5UHJvdmlkZXJUeXBlO1xuICBpZGVudGl0eVByb3ZpZGVyVXNlcklkPzogc3RyaW5nO1xuICB1c2VyPzogVXNlcjtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBzdGFydGluZyBhIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVzcG9uc2Uge1xuICBvcHRpb25zPzogUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucztcbn1cblxuLyoqXG4gKiBBIEFwcGxpY2F0aW9uLWxldmVsIHBvbGljeSBmb3IgZGVsZXRpbmcgVXNlcnMuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblJlZ2lzdHJhdGlvbkRlbGV0ZVBvbGljeSB7XG4gIHVudmVyaWZpZWQ/OiBUaW1lQmFzZWREZWxldGVQb2xpY3k7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMaW1pdFVzZXJMaW5raW5nUG9saWN5IGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG1heGltdW1MaW5rcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rvck1ldHJpY3NSZXNwb25zZSB7XG4gIG1ldHJpY3M/OiBSZWFjdG9yTWV0cmljcztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgSVAgQUNMcyAuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1UeXBlIHtcbiAgcmVnaXN0cmF0aW9uID0gXCJyZWdpc3RyYXRpb25cIixcbiAgYWRtaW5SZWdpc3RyYXRpb24gPSBcImFkbWluUmVnaXN0cmF0aW9uXCIsXG4gIGFkbWluVXNlciA9IFwiYWRtaW5Vc2VyXCIsXG4gIHNlbGZTZXJ2aWNlVXNlciA9IFwic2VsZlNlcnZpY2VVc2VyXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBzb3VyY2VUZW5hbnRJZD86IFVVSUQ7XG4gIHRlbmFudD86IFRlbmFudDtcbiAgd2ViaG9va0lkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIFVzZXIgQ29tbWVudCBSZXNwb25zZVxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ29tbWVudFJlc3BvbnNlIHtcbiAgdXNlckNvbW1lbnQ/OiBVc2VyQ29tbWVudDtcbiAgdXNlckNvbW1lbnRzPzogQXJyYXk8VXNlckNvbW1lbnQ+O1xufVxuXG4vKipcbiAqIFRoZSByZWFzb24gZm9yIHRoZSBsb2dpbiBmYWlsdXJlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5GYWlsZWRSZWFzb24ge1xuICBjb2RlPzogc3RyaW5nO1xuICBsYW1iZGFJZD86IFVVSUQ7XG4gIGxhbWJkYVJlc3VsdD86IEVycm9ycztcbn1cblxuLyoqXG4gKiBDb25maWcgZm9yIHJlZ3VsYXIgU0FNTCBJRFAgY29uZmlndXJhdGlvbnMgdGhhdCBzdXBwb3J0IElkUCBpbml0aWF0ZWQgcmVxdWVzdHNcbiAqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRwSW5pdGlhdGVkQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBpc3N1ZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBUZW5hbnQtbGV2ZWwgcG9saWN5IGZvciBkZWxldGluZyBVc2Vycy5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFVzZXJEZWxldGVQb2xpY3kge1xuICB1bnZlcmlmaWVkPzogVGltZUJhc2VkRGVsZXRlUG9saWN5O1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBHcm91cCBNZW1iZXJzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBHcm91cE1lbWJlclNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEdyb3VwIE1lbWJlciBSZXNwb25zZVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1iZXJSZXNwb25zZSB7XG4gIG1lbWJlcnM/OiBSZWNvcmQ8VVVJRCwgQXJyYXk8R3JvdXBNZW1iZXI+Pjtcbn1cblxuLyoqXG4gKiBVc2VyIEFjdGlvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvblJlcXVlc3Qge1xuICB1c2VyQWN0aW9uPzogVXNlckFjdGlvbjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgYmVoYXZpb3Igb2YgZmFpbGVkIGxvZ2luIGF0dGVtcHRzLiBUaGlzIGhlbHBzIHVzIHByb3RlY3QgYWdhaW5zdCBicnV0ZSBmb3JjZSBwYXNzd29yZCBhdHRhY2tzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWlsZWRBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBhY3Rpb25DYW5jZWxQb2xpY3k/OiBGYWlsZWRBdXRoZW50aWNhdGlvbkFjdGlvbkNhbmNlbFBvbGljeTtcbiAgYWN0aW9uRHVyYXRpb24/OiBudW1iZXI7XG4gIGFjdGlvbkR1cmF0aW9uVW5pdD86IEV4cGlyeVVuaXQ7XG4gIGVtYWlsVXNlcj86IGJvb2xlYW47XG4gIHJlc2V0Q291bnRJblNlY29uZHM/OiBudW1iZXI7XG4gIHRvb01hbnlBdHRlbXB0cz86IG51bWJlcjtcbiAgdXNlckFjdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25BY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbiB7XG4gIHVpSVBBY2Nlc3NDb250cm9sTGlzdElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBYTUwgY2Fub25pY2FsaXphdGlvbiBtZXRob2QgZW51bWVyYXRpb24uIFRoaXMgaXMgdXNlZCBmb3IgdGhlIElkUCBhbmQgU1Agc2lkZSBvZiBGdXNpb25BdXRoIFNBTUwuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIENhbm9uaWNhbGl6YXRpb25NZXRob2Qge1xuICBleGNsdXNpdmUgPSBcImV4Y2x1c2l2ZVwiLFxuICBleGNsdXNpdmVfd2l0aF9jb21tZW50cyA9IFwiZXhjbHVzaXZlX3dpdGhfY29tbWVudHNcIixcbiAgaW5jbHVzaXZlID0gXCJpbmNsdXNpdmVcIixcbiAgaW5jbHVzaXZlX3dpdGhfY29tbWVudHMgPSBcImluY2x1c2l2ZV93aXRoX2NvbW1lbnRzXCJcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHRvIGNvbXBsZXRlIHRoZSBXZWJBdXRobiByZWdpc3RyYXRpb24gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGNyZWRlbnRpYWw/OiBXZWJBdXRoblB1YmxpY0tleUF1dGhlbnRpY2F0aW9uUmVxdWVzdDtcbiAgb3JpZ2luPzogc3RyaW5nO1xuICBycElkPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBFeHBpcnlVbml0IHtcbiAgTUlOVVRFUyA9IFwiTUlOVVRFU1wiLFxuICBIT1VSUyA9IFwiSE9VUlNcIixcbiAgREFZUyA9IFwiREFZU1wiLFxuICBXRUVLUyA9IFwiV0VFS1NcIixcbiAgTU9OVEhTID0gXCJNT05USFNcIixcbiAgWUVBUlMgPSBcIllFQVJTXCJcbn1cblxuLyoqXG4gKiBUaGUgQXBwbGljYXRpb24gQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbj86IEFwcGxpY2F0aW9uO1xuICByb2xlPzogQXBwbGljYXRpb25Sb2xlO1xuICBzb3VyY2VBcHBsaWNhdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBXZWJob29rIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va1Jlc3BvbnNlIHtcbiAgd2ViaG9vaz86IFdlYmhvb2s7XG4gIHdlYmhvb2tzPzogQXJyYXk8V2ViaG9vaz47XG59XG5cbi8qKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb21tZW50UmVxdWVzdCB7XG4gIHVzZXJDb21tZW50PzogVXNlckNvbW1lbnQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbUxvZ3NFeHBvcnRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV4cG9ydFJlcXVlc3Qge1xuICBpbmNsdWRlQXJjaGl2ZWQ/OiBib29sZWFuO1xuICBsYXN0TkJ5dGVzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2VuZ2VyUmVzcG9uc2Uge1xuICBtZXNzZW5nZXI/OiBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbjtcbiAgbWVzc2VuZ2Vycz86IEFycmF5PEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgZXJyb3JzPzogRXJyb3JzO1xuICBtZXNzYWdlPzogU01TTWVzc2FnZTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIEFwcGxpY2F0aW9uc1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25TZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXRlPzogT2JqZWN0U3RhdGU7XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbklkQ29ubmVjdElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxPcGVuSWRDb25uZWN0QXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvbkltYWdlVVJMPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgb2F1dGgyPzogSWRlbnRpdHlQcm92aWRlck9hdXRoMkNvbmZpZ3VyYXRpb247XG4gIHBvc3RSZXF1ZXN0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUmVnaXN0cmF0aW9uIFZlcmlmaWVkIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvblZlcmlmaWVkRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogQSBNZXNzYWdlIFRlbXBsYXRlIFJlcXVlc3QgdG8gdGhlIEFQSVxuICpcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0IHtcbiAgbWVzc2FnZVRlbXBsYXRlPzogTWVzc2FnZVRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VVc2VyQ29kZVJlc3BvbnNlIHtcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBkZXZpY2VJbmZvPzogRGV2aWNlSW5mbztcbiAgZXhwaXJlc19pbj86IG51bWJlcjtcbiAgcGVuZGluZ0lkUExpbms/OiBQZW5kaW5nSWRQTGluaztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdXNlcl9jb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsZUlkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxBcHBsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidW5kbGVJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgc2VydmljZXNJZD86IHN0cmluZztcbiAgdGVhbUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEhlYWRlciB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIFJlbW92ZSBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJSZW1vdmVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZyB7XG4gIGF0dGVtcHRzPzogQXJyYXk8V2ViaG9va0F0dGVtcHRMb2c+O1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZXZlbnQ/OiBFdmVudFJlcXVlc3Q7XG4gIGV2ZW50UmVzdWx0PzogV2ViaG9va0V2ZW50UmVzdWx0O1xuICBldmVudFR5cGU/OiBFdmVudFR5cGU7XG4gIGZhaWxlZEF0dGVtcHRzPzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RBdHRlbXB0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxpbmtlZE9iamVjdElkPzogVVVJRDtcbiAgc2VxdWVuY2U/OiBudW1iZXI7XG4gIHN1Y2Nlc3NmdWxBdHRlbXB0cz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBHcm91cCBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwUmVxdWVzdCB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIHJvbGVJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXR5IGdyYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBFbnRpdHlHcmFudFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBEZWxldGUgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogQ29udGFpbnMgYXR0cmlidXRlcyBmb3IgdGhlIFJlbHlpbmcgUGFydHkgdG8gcmVmZXIgdG8gYW4gZXhpc3RpbmcgcHVibGljIGtleSBjcmVkZW50aWFsIGFzIGFuIGlucHV0IHBhcmFtZXRlci5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIHRyYW5zcG9ydHM/OiBBcnJheTxzdHJpbmc+O1xuICB0eXBlPzogUHVibGljS2V5Q3JlZGVudGlhbFR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2lsaW9NZXNzZW5nZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBhY2NvdW50U0lEPzogc3RyaW5nO1xuICBhdXRoVG9rZW4/OiBzdHJpbmc7XG4gIGZyb21QaG9uZU51bWJlcj86IHN0cmluZztcbiAgbWVzc2FnaW5nU2VydmljZVNpZD86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yTWV0cmljcyB7XG4gIGJyZWFjaGVkUGFzc3dvcmRNZXRyaWNzPzogUmVjb3JkPFVVSUQsIEJyZWFjaGVkUGFzc3dvcmRUZW5hbnRNZXRyaWM+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkZvcm1Db25maWd1cmF0aW9uIHtcbiAgYWRtaW5SZWdpc3RyYXRpb25Gb3JtSWQ/OiBVVUlEO1xuICBzZWxmU2VydmljZUZvcm1Db25maWd1cmF0aW9uPzogU2VsZlNlcnZpY2VGb3JtQ29uZmlndXJhdGlvbjtcbiAgc2VsZlNlcnZpY2VGb3JtSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uVW52ZXJpZmllZE9wdGlvbnMge1xuICBiZWhhdmlvcj86IFVudmVyaWZpZWRCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UmVzcG9uc2Uge1xuICB0ZW5hbnQ/OiBUZW5hbnQ7XG4gIHRlbmFudHM/OiBBcnJheTxUZW5hbnQ+O1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBSZWZyZXNoIFRva2VuIEFQSSB0byByZXZva2UgYSByZWZyZXNoIHRva2VuIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBVUkwgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXZva2VSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBKV1QgUmVmcmVzaCBUb2tlbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIG1ldGFEYXRhPzogTWV0YURhdGE7XG4gIHN0YXJ0SW5zdGFudD86IG51bWJlcjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhRGF0YSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZXZpY2U/OiBEZXZpY2VJbmZvO1xuICBzY29wZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEEgbWFya2VyIGludGVyZmFjZSBpbmRpY2F0aW5nIHRoaXMgZXZlbnQgaXMgYW4gZXZlbnQgdGhhdCBjYW4gc3VwcGx5IGEgbGlua2VkIG9iamVjdCBJZC5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdElkZW50aWZpYWJsZSB7XG59XG5cbi8qKlxuICogRm9ybSBmaWVsZCByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1GaWVsZFJlc3BvbnNlIHtcbiAgZmllbGQ/OiBGb3JtRmllbGQ7XG4gIGZpZWxkcz86IEFycmF5PEZvcm1GaWVsZD47XG59XG5cbi8qKlxuICogSldUIFB1YmxpYyBLZXkgUmVzcG9uc2UgT2JqZWN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleVJlc3BvbnNlIHtcbiAgcHVibGljS2V5Pzogc3RyaW5nO1xuICBwdWJsaWNLZXlzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIHVzZXIgbG9naW4gcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNlbnRMb2dpblJlc3BvbnNlIHtcbiAgbG9naW5zPzogQXJyYXk8RGlzcGxheWFibGVSYXdMb2dpbj47XG59XG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgZXZlbnQgaW5mb3JtYXRpb24uIFRoaXMgaXMgdGhlIEpTT04gdGhhdCBpcyBzZW50IGZyb20gRnVzaW9uQXV0aCB0byB3ZWJob29rcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFJlcXVlc3Qge1xuICBldmVudD86IEJhc2VFdmVudDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yRW5hYmxlRGlzYWJsZVNlbmRSZXF1ZXN0IHtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG1ldGhvZD86IHN0cmluZztcbiAgbWV0aG9kSWQ/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gU2VjdXJlR2VuZXJhdG9yVHlwZSB7XG4gIHJhbmRvbURpZ2l0cyA9IFwicmFuZG9tRGlnaXRzXCIsXG4gIHJhbmRvbUJ5dGVzID0gXCJyYW5kb21CeXRlc1wiLFxuICByYW5kb21BbHBoYSA9IFwicmFuZG9tQWxwaGFcIixcbiAgcmFuZG9tQWxwaGFOdW1lcmljID0gXCJyYW5kb21BbHBoYU51bWVyaWNcIlxufVxuXG4vKipcbiAqIEVudGl0eSBncmFudCBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R3JhbnRSZXF1ZXN0IHtcbiAgZ3JhbnQ/OiBFbnRpdHlHcmFudDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgTG9naW4gRmFpbGVkIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5GYWlsZWRFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRpb25UeXBlPzogc3RyaW5nO1xuICBpcEFkZHJlc3M/OiBzdHJpbmc7XG4gIHJlYXNvbj86IFVzZXJMb2dpbkZhaWxlZFJlYXNvbjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVzcG9uc2UgZm9yIEdyb3Vwc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFNlYXJjaFJlc3BvbnNlIHtcbiAgZ3JvdXBzPzogQXJyYXk8R3JvdXA+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFbnRpdHkgVHlwZSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVJlcXVlc3Qge1xuICBlbnRpdHlUeXBlPzogRW50aXR5VHlwZTtcbiAgcGVybWlzc2lvbj86IEVudGl0eVR5cGVQZXJtaXNzaW9uO1xufVxuXG4vKipcbiAqIEtleSBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVNlYXJjaFJlc3BvbnNlIHtcbiAga2V5cz86IEFycmF5PEtleT47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBoYW5kbGluZyBwb2xpY3kgZm9yIHNjb3BlcyBwcm92aWRlZCBieSBGdXNpb25BdXRoXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlZFNjb3BlUG9saWN5IHtcbiAgYWRkcmVzcz86IFJlcXVpcmFibGU7XG4gIGVtYWlsPzogUmVxdWlyYWJsZTtcbiAgcGhvbmU/OiBSZXF1aXJhYmxlO1xuICBwcm9maWxlPzogUmVxdWlyYWJsZTtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIERlbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBEZWxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbn1cblxuLyoqXG4gKiBTdXBwbHkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgUmVseWluZyBQYXJ0eSB3aGVuIGNyZWF0aW5nIGEgbmV3IGNyZWRlbnRpYWxcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxSZWx5aW5nUGFydHlFbnRpdHkgZXh0ZW5kcyBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IHtcbiAgaWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luSGludENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgcGFyYW1ldGVyTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVzcG9uc2UgZm9yIGVudGl0eSB0eXBlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlU2VhcmNoUmVzcG9uc2Uge1xuICBlbnRpdHlUeXBlcz86IEFycmF5PEVudGl0eVR5cGU+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIHdlYmhvb2tzLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va1NlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyBhIHNldCBvZiBsb2NhbGl6ZWQgSW50ZWdlcnMgdGhhdCBjYW4gYmUgc3RvcmVkIGFzIEpTT04uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsaXplZEludGVnZXJzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgbnVtYmVyPiB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFVudmVyaWZpZWRDb25maWd1cmF0aW9uIHtcbiAgZW1haWw/OiBVbnZlcmlmaWVkQmVoYXZpb3I7XG4gIHdoZW5HYXRlZD86IFJlZ2lzdHJhdGlvblVudmVyaWZpZWRPcHRpb25zO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBlbnRpdHkgZ3JhbnRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50U2VhcmNoUmVzcG9uc2Uge1xuICBncmFudHM/OiBBcnJheTxFbnRpdHlHcmFudD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gRm9ybURhdGFUeXBlIHtcbiAgYm9vbCA9IFwiYm9vbFwiLFxuICBjb25zZW50ID0gXCJjb25zZW50XCIsXG4gIGRhdGUgPSBcImRhdGVcIixcbiAgZW1haWwgPSBcImVtYWlsXCIsXG4gIG51bWJlciA9IFwibnVtYmVyXCIsXG4gIHN0cmluZyA9IFwic3RyaW5nXCJcbn1cblxuLyoqXG4gKiBVc2VyIEFjdGlvbiBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25SZXNwb25zZSB7XG4gIHVzZXJBY3Rpb24/OiBVc2VyQWN0aW9uO1xuICB1c2VyQWN0aW9ucz86IEFycmF5PFVzZXJBY3Rpb24+O1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBHcm91cHMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEdyb3VwU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQXV0aGVudGljYXRpb24ga2V5IHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgU2FuamF5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5UmVxdWVzdCB7XG4gIGFwaUtleT86IEFQSUtleTtcbiAgc291cmNlS2V5SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFR3aXR0ZXIgc29jaWFsIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2l0dGVySWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFR3aXR0ZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY29uc3VtZXJLZXk/OiBzdHJpbmc7XG4gIGNvbnN1bWVyU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTTVNNZXNzYWdlVGVtcGxhdGUgZXh0ZW5kcyBNZXNzYWdlVGVtcGxhdGUge1xuICBkZWZhdWx0VGVtcGxhdGU/OiBzdHJpbmc7XG4gIGxvY2FsaXplZFRlbXBsYXRlcz86IExvY2FsaXplZFN0cmluZ3M7XG59XG5cbi8qKlxuICogTGFtYmRhIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFSZXF1ZXN0IHtcbiAgbGFtYmRhPzogTGFtYmRhO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBldmVudCB3aGVyZSBhIHVzZXIgaXMgYmVpbmcgY3JlYXRlZCB3aXRoIGFuIFwiaW4tdXNlXCIgbG9naW4gSWQgKGVtYWlsIG9yIHVzZXJuYW1lKS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luSWREdXBsaWNhdGVPbkNyZWF0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGR1cGxpY2F0ZUVtYWlsPzogc3RyaW5nO1xuICBkdXBsaWNhdGVVc2VybmFtZT86IHN0cmluZztcbiAgZXhpc3Rpbmc/OiBVc2VyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWlrZXkgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRvcklkPzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xuICBzZWNyZXRCYXNlMzJFbmNvZGVkPzogc3RyaW5nO1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTb21ldGhpbmcgdGhhdCBjYW4gYmUgcmVxdWlyZWQgYW5kIHRodXMgYWxzbyBvcHRpb25hbC4gVGhpcyBjdXJyZW50bHkgZXh0ZW5kcyBFbmFibGVhYmxlIGJlY2F1c2UgYW55dGhpbmcgdGhhdCBpc1xuICogcmVxdWlyZWQvb3B0aW9uYWwgaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVhYmxlIGFzIHdlbGwuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWlyYWJsZSBleHRlbmRzIEVuYWJsZWFibGUge1xuICByZXF1aXJlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUVtYWlsUmVzcG9uc2Uge1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGdsb2JhbCB2aWV3IG9mIGEgVXNlci4gVGhpcyBvYmplY3QgY29udGFpbnMgYWxsIGdsb2JhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBpbmNsdWRpbmcgYmlydGhkYXRlLCByZWdpc3RyYXRpb24gaW5mb3JtYXRpb25cbiAqIHByZWZlcnJlZCBsYW5ndWFnZXMsIGdsb2JhbCBhdHRyaWJ1dGVzLCBldGMuXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIgZXh0ZW5kcyBTZWN1cmVJZGVudGl0eSB7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGJpcnRoRGF0ZT86IHN0cmluZztcbiAgY2xlYW5TcGVha0lkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVtYWlsPzogc3RyaW5nO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIGZpcnN0TmFtZT86IHN0cmluZztcbiAgZnVsbE5hbWU/OiBzdHJpbmc7XG4gIGltYWdlVXJsPzogc3RyaW5nO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0TmFtZT86IHN0cmluZztcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG1lbWJlcnNoaXBzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xuICBtaWRkbGVOYW1lPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbiAgcGFyZW50RW1haWw/OiBzdHJpbmc7XG4gIHByZWZlcnJlZExhbmd1YWdlcz86IEFycmF5PHN0cmluZz47XG4gIHJlZ2lzdHJhdGlvbnM/OiBBcnJheTxVc2VyUmVnaXN0cmF0aW9uPjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0aW1lem9uZT86IHN0cmluZztcbiAgdHdvRmFjdG9yPzogVXNlclR3b0ZhY3RvckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VMb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgbWV0YURhdGE/OiBNZXRhRGF0YTtcbiAgbmV3RGV2aWNlPzogYm9vbGVhbjtcbiAgbm9KV1Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYWZrYUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZGVmYXVsdFRvcGljPzogc3RyaW5nO1xuICBwcm9kdWNlcj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc0xvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBjb2RlPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBVcGRhdGUgRXZlbnQgb25jZSBpdCBpcyBjb21wbGV0ZWQuIFRoaXMgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJVcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIG9yaWdpbmFsPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBvcmlnaW5hbD86IFVzZXI7XG59XG5cbi8qKlxuICogRW50aXR5IEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5UmVzcG9uc2Uge1xuICBlbnRpdHk/OiBFbnRpdHk7XG59XG5cbi8qKlxuICogVXNlZCBieSB0aGUgUmVseWluZyBQYXJ0eSB0byBzcGVjaWZ5IHRoZWlyIHJlcXVpcmVtZW50cyBmb3IgYXV0aGVudGljYXRvciBhdHRyaWJ1dGVzLiBGaWVsZHMgdXNlIHRoZSBkZXByZWNhdGVkIFwicmVzaWRlbnQga2V5XCIgdGVybWlub2xvZ3kgdG8gcmVmZXJcbiAqIHRvIGNsaWVudC1zaWRlIGRpc2NvdmVyYWJsZSBjcmVkZW50aWFscyB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFdlYkF1dGhuIExldmVsIDEuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEge1xuICBhdXRoZW50aWNhdG9yQXR0YWNobWVudD86IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50O1xuICByZXF1aXJlUmVzaWRlbnRLZXk/OiBib29sZWFuO1xuICByZXNpZGVudEtleT86IFJlc2lkZW50S2V5UmVxdWlyZW1lbnQ7XG4gIHVzZXJWZXJpZmljYXRpb24/OiBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ7XG59XG5cbi8qKlxuICogRXZlbnRzIHRoYXQgYXJlIGJvdW5kIHRvIGFwcGxpY2F0aW9ucy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkV2ZW50IHtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCBmb3Igc2VuZGluZyBvdXQgZmFtaWx5IHJlcXVlc3RzIHRvIHBhcmVudCdzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseUVtYWlsUmVxdWVzdCB7XG4gIHBhcmVudEVtYWlsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZnJlc2ggVG9rZW4gSW1wb3J0IHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5JbXBvcnRSZXF1ZXN0IHtcbiAgcmVmcmVzaFRva2Vucz86IEFycmF5PFJlZnJlc2hUb2tlbj47XG4gIHZhbGlkYXRlRGJDb25zdHJhaW50cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIElkUCBiZWhhdmlvciB3aGVuIG5vIHVzZXIgbGluayBoYXMgYmVlbiBtYWRlIHlldC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5UHJvdmlkZXJMaW5raW5nU3RyYXRlZ3kge1xuICBDcmVhdGVQZW5kaW5nTGluayA9IFwiQ3JlYXRlUGVuZGluZ0xpbmtcIixcbiAgRGlzYWJsZWQgPSBcIkRpc2FibGVkXCIsXG4gIExpbmtBbm9ueW1vdXNseSA9IFwiTGlua0Fub255bW91c2x5XCIsXG4gIExpbmtCeUVtYWlsID0gXCJMaW5rQnlFbWFpbFwiLFxuICBMaW5rQnlFbWFpbEZvckV4aXN0aW5nVXNlciA9IFwiTGlua0J5RW1haWxGb3JFeGlzdGluZ1VzZXJcIixcbiAgTGlua0J5VXNlcm5hbWUgPSBcIkxpbmtCeVVzZXJuYW1lXCIsXG4gIExpbmtCeVVzZXJuYW1lRm9yRXhpc3RpbmdVc2VyID0gXCJMaW5rQnlVc2VybmFtZUZvckV4aXN0aW5nVXNlclwiLFxuICBVbnN1cHBvcnRlZCA9IFwiVW5zdXBwb3J0ZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gTXVsdGlGYWN0b3JMb2dpblBvbGljeSB7XG4gIERpc2FibGVkID0gXCJEaXNhYmxlZFwiLFxuICBFbmFibGVkID0gXCJFbmFibGVkXCIsXG4gIFJlcXVpcmVkID0gXCJSZXF1aXJlZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMaW5rUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBpZGVudGl0eVByb3ZpZGVyTGluaz86IElkZW50aXR5UHJvdmlkZXJMaW5rO1xuICBwZW5kaW5nSWRQTGlua0lkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdvb2dsZSBzb2NpYWwgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdvb2dsZUlkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxHb29nbGVBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgcHJvcGVydGllcz86IEdvb2dsZUlkZW50aXR5UHJvdmlkZXJQcm9wZXJ0aWVzO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHcm91cCBNZW1iZXIgUmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1iZXJSZXF1ZXN0IHtcbiAgbWVtYmVycz86IFJlY29yZDxVVUlELCBBcnJheTxHcm91cE1lbWJlcj4+O1xufVxuXG4vKipcbiAqIEVtYWlsIHRlbXBsYXRlIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVSZXNwb25zZSB7XG4gIGVtYWlsVGVtcGxhdGU/OiBFbWFpbFRlbXBsYXRlO1xuICBlbWFpbFRlbXBsYXRlcz86IEFycmF5PEVtYWlsVGVtcGxhdGU+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIElQQWNjZXNzQ29udHJvbEVudHJ5QWN0aW9uIHtcbiAgQWxsb3cgPSBcIkFsbG93XCIsXG4gIEJsb2NrID0gXCJCbG9ja1wiXG59XG5cbi8qKlxuICogS2V5IEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVJlc3BvbnNlIHtcbiAga2V5PzogS2V5O1xuICBrZXlzPzogQXJyYXk8S2V5Pjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIEtleXNcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYWxnb3JpdGhtPzogS2V5QWxnb3JpdGhtO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogS2V5VHlwZTtcbn1cblxuLyoqXG4gKiBTdG9yZXMgYW4gbWVzc2FnZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3RyaWJ1dGUgbWVzc2FnZXM7XG4gKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUZW1wbGF0ZSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogTWVzc2FnZVR5cGU7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFJlYWN0aXZhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlYWN0aXZhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGQge1xuICBjb25maXJtPzogYm9vbGVhbjtcbiAgY29uc2VudElkPzogVVVJRDtcbiAgY29udHJvbD86IEZvcm1Db250cm9sO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAga2V5Pzogc3RyaW5nO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgb3B0aW9ucz86IEFycmF5PHN0cmluZz47XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgdHlwZT86IEZvcm1EYXRhVHlwZTtcbiAgdmFsaWRhdG9yPzogRm9ybUZpZWxkVmFsaWRhdG9yO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBBcHBsaWNhdGlvbnNcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uU2VhcmNoUmVxdWVzdCBleHRlbmRzIEV4cGFuZGFibGVSZXF1ZXN0IHtcbiAgc2VhcmNoPzogQXBwbGljYXRpb25TZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBUeXBlIGZvciB3ZWJob29rIGhlYWRlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSFRUUEhlYWRlcnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbn1cblxuLyoqXG4gKiBBIGN1c3RvbSBPQXV0aCBzY29wZSBmb3IgYSBzcGVjaWZpYyBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uT0F1dGhTY29wZSB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVmYXVsdENvbnNlbnREZXRhaWw/OiBzdHJpbmc7XG4gIGRlZmF1bHRDb25zZW50TWVzc2FnZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIENyZWF0ZSBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBEZWxldGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgSldUIFJlZnJlc2ggRXZlbnQuIFRoaXMgZXZlbnQgd2lsbCBiZSBmaXJlZCB3aGVuIGEgSldUIGlzIFwicmVmcmVzaGVkXCIgKGdlbmVyYXRlZCkgdXNpbmcgYSBSZWZyZXNoIFRva2VuLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RSZWZyZXNoRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgb3JpZ2luYWw/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Q2FwdGNoYUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgY2FwdGNoYU1ldGhvZD86IENhcHRjaGFNZXRob2Q7XG4gIHNlY3JldEtleT86IHN0cmluZztcbiAgc2l0ZUtleT86IHN0cmluZztcbiAgdGhyZXNob2xkPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaFJlcXVlc3Qge1xuICByZXRyaWV2ZVRvdGFsPzogYm9vbGVhbjtcbiAgc2VhcmNoPzogTG9naW5SZWNvcmRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQ3JlYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIFVzZXIgQWN0aW9uIFJlYXNvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvblJlYXNvblJlcXVlc3Qge1xuICB1c2VyQWN0aW9uUmVhc29uPzogVXNlckFjdGlvblJlYXNvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVNBTUx2MklkZW50aXR5UHJvdmlkZXI8RCBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEQ+IHtcbiAgYXNzZXJ0aW9uRGVjcnlwdGlvbkNvbmZpZ3VyYXRpb24/OiBTQU1MdjJBc3NlcnRpb25EZWNyeXB0aW9uQ29uZmlndXJhdGlvbjtcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICB1bmlxdWVJZENsYWltPzogc3RyaW5nO1xuICB1c2VOYW1lSWRGb3JFbWFpbD86IGJvb2xlYW47XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byByZXF1ZXN0IGV4dGVuc2lvbnMgZHVyaW5nIGNyZWRlbnRpYWwgcmVnaXN0cmF0aW9uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdHJhdGlvbkV4dGVuc2lvbk9wdGlvbnMge1xuICBjcmVkUHJvcHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NUb2tlbiB7XG4gIGFjY2Vzc190b2tlbj86IHN0cmluZztcbiAgZXhwaXJlc19pbj86IG51bWJlcjtcbiAgaWRfdG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hfdG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hfdG9rZW5faWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgdG9rZW5fdHlwZT86IFRva2VuVHlwZTtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBTZWFyY2ggQVBJIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3BvbnNlIGV4dGVuZHMgRXhwYW5kYWJsZVJlc3BvbnNlIHtcbiAgbmV4dFJlc3VsdHM/OiBzdHJpbmc7XG4gIHRvdGFsPzogbnVtYmVyO1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVzcG9uc2Uge1xuICBhbm9ueW1vdXNSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgRW1haWxUZW1wbGF0ZUVycm9ycz47XG4gIHJlc3VsdHM/OiBSZWNvcmQ8VVVJRCwgRW1haWxUZW1wbGF0ZUVycm9ycz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZUVycm9ycyB7XG4gIHBhcnNlRXJyb3JzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcmVuZGVyRXJyb3JzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBUaGUgcGhhc2VzIG9mIGEgdGltZS1iYXNlZCB1c2VyIGFjdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gVXNlckFjdGlvblBoYXNlIHtcbiAgc3RhcnQgPSBcInN0YXJ0XCIsXG4gIG1vZGlmeSA9IFwibW9kaWZ5XCIsXG4gIGNhbmNlbCA9IFwiY2FuY2VsXCIsXG4gIGVuZCA9IFwiZW5kXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVtZW1iZXJQcmV2aW91c1Bhc3N3b3JkcyBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjb3VudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZXMgb2YgbGFtYmRhcyB0aGF0IGluZGljYXRlIGhvdyB0aGV5IGFyZSBpbnZva2VkIGJ5IEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIExhbWJkYVR5cGUge1xuICBKV1RQb3B1bGF0ZSA9IFwiSldUUG9wdWxhdGVcIixcbiAgT3BlbklEUmVjb25jaWxlID0gXCJPcGVuSURSZWNvbmNpbGVcIixcbiAgU0FNTHYyUmVjb25jaWxlID0gXCJTQU1MdjJSZWNvbmNpbGVcIixcbiAgU0FNTHYyUG9wdWxhdGUgPSBcIlNBTUx2MlBvcHVsYXRlXCIsXG4gIEFwcGxlUmVjb25jaWxlID0gXCJBcHBsZVJlY29uY2lsZVwiLFxuICBFeHRlcm5hbEpXVFJlY29uY2lsZSA9IFwiRXh0ZXJuYWxKV1RSZWNvbmNpbGVcIixcbiAgRmFjZWJvb2tSZWNvbmNpbGUgPSBcIkZhY2Vib29rUmVjb25jaWxlXCIsXG4gIEdvb2dsZVJlY29uY2lsZSA9IFwiR29vZ2xlUmVjb25jaWxlXCIsXG4gIEhZUFJSZWNvbmNpbGUgPSBcIkhZUFJSZWNvbmNpbGVcIixcbiAgVHdpdHRlclJlY29uY2lsZSA9IFwiVHdpdHRlclJlY29uY2lsZVwiLFxuICBMREFQQ29ubmVjdG9yUmVjb25jaWxlID0gXCJMREFQQ29ubmVjdG9yUmVjb25jaWxlXCIsXG4gIExpbmtlZEluUmVjb25jaWxlID0gXCJMaW5rZWRJblJlY29uY2lsZVwiLFxuICBFcGljR2FtZXNSZWNvbmNpbGUgPSBcIkVwaWNHYW1lc1JlY29uY2lsZVwiLFxuICBOaW50ZW5kb1JlY29uY2lsZSA9IFwiTmludGVuZG9SZWNvbmNpbGVcIixcbiAgU29ueVBTTlJlY29uY2lsZSA9IFwiU29ueVBTTlJlY29uY2lsZVwiLFxuICBTdGVhbVJlY29uY2lsZSA9IFwiU3RlYW1SZWNvbmNpbGVcIixcbiAgVHdpdGNoUmVjb25jaWxlID0gXCJUd2l0Y2hSZWNvbmNpbGVcIixcbiAgWGJveFJlY29uY2lsZSA9IFwiWGJveFJlY29uY2lsZVwiLFxuICBDbGllbnRDcmVkZW50aWFsc0pXVFBvcHVsYXRlID0gXCJDbGllbnRDcmVkZW50aWFsc0pXVFBvcHVsYXRlXCIsXG4gIFNDSU1TZXJ2ZXJHcm91cFJlcXVlc3RDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJHcm91cFJlcXVlc3RDb252ZXJ0ZXJcIixcbiAgU0NJTVNlcnZlckdyb3VwUmVzcG9uc2VDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJHcm91cFJlc3BvbnNlQ29udmVydGVyXCIsXG4gIFNDSU1TZXJ2ZXJVc2VyUmVxdWVzdENvbnZlcnRlciA9IFwiU0NJTVNlcnZlclVzZXJSZXF1ZXN0Q29udmVydGVyXCIsXG4gIFNDSU1TZXJ2ZXJVc2VyUmVzcG9uc2VDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJVc2VyUmVzcG9uc2VDb252ZXJ0ZXJcIixcbiAgU2VsZlNlcnZpY2VSZWdpc3RyYXRpb25WYWxpZGF0aW9uID0gXCJTZWxmU2VydmljZVJlZ2lzdHJhdGlvblZhbGlkYXRpb25cIixcbiAgVXNlckluZm9Qb3B1bGF0ZSA9IFwiVXNlckluZm9Qb3B1bGF0ZVwiLFxuICBMb2dpblZhbGlkYXRpb24gPSBcIkxvZ2luVmFsaWRhdGlvblwiXG59XG5cbi8qKlxuICogVGhlIDxpPmF1dGhlbnRpY2F0b3InczwvaT4gcmVzcG9uc2UgZm9yIHRoZSByZWdpc3RyYXRpb24gY2VyZW1vbnkgaW4gaXRzIGVuY29kZWQgZm9ybWF0XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkF1dGhlbnRpY2F0b3JSZWdpc3RyYXRpb25SZXNwb25zZSB7XG4gIGF0dGVzdGF0aW9uT2JqZWN0Pzogc3RyaW5nO1xuICBjbGllbnREYXRhSlNPTj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgaW5kaWNhdGluZyB0aGlzIGV2ZW50IGlzIG5vdCBzY29wZWQgdG8gYSB0ZW5hbnQgYW5kIHdpbGwgYmUgc2VudCB0byBhbGwgd2ViaG9va3MuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlRXZlbnQgZXh0ZW5kcyBOb25UcmFuc2FjdGlvbmFsRXZlbnQge1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IHRvIGltcG9ydCBhbiBleGlzdGluZyBXZWJBdXRobiBjcmVkZW50aWFsKHMpXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkNyZWRlbnRpYWxJbXBvcnRSZXF1ZXN0IHtcbiAgY3JlZGVudGlhbHM/OiBBcnJheTxXZWJBdXRobkNyZWRlbnRpYWw+O1xuICB2YWxpZGF0ZURiQ29uc3RyYWludHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHNpZ25pbmcgd2ViaG9va3MuXG4gKlxuICogQGF1dGhvciBCcmVudCBIYWxzZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rU2lnbmF0dXJlQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBzaWduaW5nS2V5SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZGxlc3NTdGFydFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgbG9naW5JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgcmV0cmlldmluZyBSZWZyZXNoIFRva2Vuc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IFJlZnJlc2hUb2tlbjtcbiAgcmVmcmVzaFRva2Vucz86IEFycmF5PFJlZnJlc2hUb2tlbj47XG59XG5cbi8qKlxuICogUmVnaXN0cmF0aW9uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGRpc2FibGVEb21haW5CbG9jaz86IGJvb2xlYW47XG4gIGdlbmVyYXRlQXV0aGVudGljYXRpb25Ub2tlbj86IGJvb2xlYW47XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHNlbmRTZXRQYXNzd29yZEVtYWlsPzogYm9vbGVhbjtcbiAgc2tpcFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbj86IGJvb2xlYW47XG4gIHNraXBWZXJpZmljYXRpb24/OiBib29sZWFuO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFN5c3RlbVRydXN0ZWRQcm94eUNvbmZpZ3VyYXRpb25Qb2xpY3kge1xuICBBbGwgPSBcIkFsbFwiLFxuICBPbmx5Q29uZmlndXJlZCA9IFwiT25seUNvbmZpZ3VyZWRcIlxufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIG1hbmFnaW5nIEZ1c2lvbkF1dGggUmVhY3RvciBhbmQgbGljZW5zZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RvclJlcXVlc3Qge1xuICBsaWNlbnNlPzogc3RyaW5nO1xuICBsaWNlbnNlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3VsdHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0czxUPiB7XG4gIG5leHRSZXN1bHRzPzogc3RyaW5nO1xuICByZXN1bHRzPzogQXJyYXk8VD47XG4gIHRvdGFsPzogbnVtYmVyO1xuICB0b3RhbEVxdWFsVG9BY3R1YWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgZGFpbHkgYWN0aXZlIHVzZXIgcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlIHtcbiAgZGFpbHlBY3RpdmVVc2Vycz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogU0FNTCB2MiBJZFAgSW5pdGlhdGVkIGlkZW50aXR5IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkUEluaXRpYXRlZElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlU0FNTHYySWRlbnRpdHlQcm92aWRlcjxTQU1MdjJJZFBJbml0aWF0ZWRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgaXNzdWVyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VBcHByb3ZhbFJlc3BvbnNlIHtcbiAgZGV2aWNlR3JhbnRTdGF0dXM/OiBzdHJpbmc7XG4gIGRldmljZUluZm8/OiBEZXZpY2VJbmZvO1xuICBpZGVudGl0eVByb3ZpZGVyTGluaz86IElkZW50aXR5UHJvdmlkZXJMaW5rO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUd29GYWN0b3JDb25maWd1cmF0aW9uIHtcbiAgbWV0aG9kcz86IEFycmF5PFR3b0ZhY3Rvck1ldGhvZD47XG4gIHJlY292ZXJ5Q29kZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBlbWFpbCB0ZW1wbGF0ZXNcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEVtYWlsVGVtcGxhdGVTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBUaGUgc3VtbWFyeSBvZiB0aGUgYWN0aW9uIHRoYXQgaXMgcHJldmVudGluZyBsb2dpbiB0byBiZSByZXR1cm5lZCBvbiB0aGUgbG9naW4gcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUHJldmVudGVkUmVzcG9uc2Uge1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFjdGlvbklkPzogVVVJRDtcbiAgZXhwaXJ5PzogbnVtYmVyO1xuICBsb2NhbGl6ZWROYW1lPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRPcHRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZFJlYXNvbj86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgb3B0aW9uPzogc3RyaW5nO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIHJlYXNvbkNvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIGNvbnRlbnQgdXNlciBhY3Rpb24gb3B0aW9ucy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uT3B0aW9uIHtcbiAgbG9jYWxpemVkTmFtZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dSZXNwb25zZSB7XG4gIGV2ZW50TG9nPzogRXZlbnRMb2c7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkUEluaXRpYXRlZEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIGFuZHJld3BhaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGZTZXJ2aWNlRm9ybUNvbmZpZ3VyYXRpb24ge1xuICByZXF1aXJlQ3VycmVudFBhc3N3b3JkT25QYXNzd29yZENoYW5nZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBVcGRhdGUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwVXBkYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbiAgb3JpZ2luYWw/OiBHcm91cDtcbn1cblxuLyoqXG4gKiBSZWluZGV4IEFQSSByZXF1ZXN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlaW5kZXhSZXF1ZXN0IHtcbiAgaW5kZXg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uRXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbiB7XG4gIHR3b0ZhY3RvclRydXN0SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbiB7XG4gIGFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25BY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbjtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgYXV0aGVudGljYXRpb25Ub2tlbkNvbmZpZ3VyYXRpb24/OiBBdXRoZW50aWNhdGlvblRva2VuQ29uZmlndXJhdGlvbjtcbiAgY2xlYW5TcGVha0NvbmZpZ3VyYXRpb24/OiBDbGVhblNwZWFrQ29uZmlndXJhdGlvbjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVtYWlsQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uRW1haWxDb25maWd1cmF0aW9uO1xuICBleHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25FeHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uO1xuICBmb3JtQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uRm9ybUNvbmZpZ3VyYXRpb247XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgand0Q29uZmlndXJhdGlvbj86IEpXVENvbmZpZ3VyYXRpb247XG4gIGxhbWJkYUNvbmZpZ3VyYXRpb24/OiBMYW1iZGFDb25maWd1cmF0aW9uO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9naW5Db25maWd1cmF0aW9uPzogTG9naW5Db25maWd1cmF0aW9uO1xuICBtdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbk11bHRpRmFjdG9yQ29uZmlndXJhdGlvbjtcbiAgbmFtZT86IHN0cmluZztcbiAgb2F1dGhDb25maWd1cmF0aW9uPzogT0F1dGgyQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbj86IFBhc3N3b3JkbGVzc0NvbmZpZ3VyYXRpb247XG4gIHJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24/OiBSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25EZWxldGVQb2xpY3k/OiBBcHBsaWNhdGlvblJlZ2lzdHJhdGlvbkRlbGV0ZVBvbGljeTtcbiAgcm9sZXM/OiBBcnJheTxBcHBsaWNhdGlvblJvbGU+O1xuICBzYW1sdjJDb25maWd1cmF0aW9uPzogU0FNTHYyQ29uZmlndXJhdGlvbjtcbiAgc2NvcGVzPzogQXJyYXk8QXBwbGljYXRpb25PQXV0aFNjb3BlPjtcbiAgc3RhdGU/OiBPYmplY3RTdGF0ZTtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0aGVtZUlkPzogVVVJRDtcbiAgdW52ZXJpZmllZD86IFJlZ2lzdHJhdGlvblVudmVyaWZpZWRPcHRpb25zO1xuICB2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB2ZXJpZmljYXRpb25TdHJhdGVneT86IFZlcmlmaWNhdGlvblN0cmF0ZWd5O1xuICB2ZXJpZnlSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICB3ZWJBdXRobkNvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbldlYkF1dGhuQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkVtYWlsQ29uZmlndXJhdGlvbiB7XG4gIGVtYWlsVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZW1haWxWZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBlbWFpbFZlcmlmaWVkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZm9yZ290UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbklkSW5Vc2VPbkNyZWF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luSWRJblVzZU9uVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5OZXdEZXZpY2VFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpblN1c3BpY2lvdXNFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZGxlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFJlc2V0U3VjY2Vzc0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgc2V0UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RBZGRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RSZW1vdmVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhlbnRpY2F0aW9uVG9rZW5Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIGFjY2Vzc1Rva2VuUG9wdWxhdGVJZD86IFVVSUQ7XG4gIGlkVG9rZW5Qb3B1bGF0ZUlkPzogVVVJRDtcbiAgc2FtbHYyUG9wdWxhdGVJZD86IFVVSUQ7XG4gIHNlbGZTZXJ2aWNlUmVnaXN0cmF0aW9uVmFsaWRhdGlvbklkPzogVVVJRDtcbiAgdXNlcmluZm9Qb3B1bGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2dpbkNvbmZpZ3VyYXRpb24ge1xuICBhbGxvd1Rva2VuUmVmcmVzaD86IGJvb2xlYW47XG4gIGdlbmVyYXRlUmVmcmVzaFRva2Vucz86IGJvb2xlYW47XG4gIHJlcXVpcmVBdXRoZW50aWNhdGlvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYmlydGhEYXRlPzogUmVxdWlyYWJsZTtcbiAgY29uZmlybVBhc3N3b3JkPzogYm9vbGVhbjtcbiAgZmlyc3ROYW1lPzogUmVxdWlyYWJsZTtcbiAgZm9ybUlkPzogVVVJRDtcbiAgZnVsbE5hbWU/OiBSZXF1aXJhYmxlO1xuICBsYXN0TmFtZT86IFJlcXVpcmFibGU7XG4gIGxvZ2luSWRUeXBlPzogTG9naW5JZFR5cGU7XG4gIG1pZGRsZU5hbWU/OiBSZXF1aXJhYmxlO1xuICBtb2JpbGVQaG9uZT86IFJlcXVpcmFibGU7XG4gIHByZWZlcnJlZExhbmd1YWdlcz86IFJlcXVpcmFibGU7XG4gIHR5cGU/OiBSZWdpc3RyYXRpb25UeXBlO1xufVxuXG5leHBvcnQgZW51bSBMb2dpbklkVHlwZSB7XG4gIGVtYWlsID0gXCJlbWFpbFwiLFxuICB1c2VybmFtZSA9IFwidXNlcm5hbWVcIlxufVxuXG5leHBvcnQgZW51bSBSZWdpc3RyYXRpb25UeXBlIHtcbiAgYmFzaWMgPSBcImJhc2ljXCIsXG4gIGFkdmFuY2VkID0gXCJhZHZhbmNlZFwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhc3NlcnRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFNBTUx2MkFzc2VydGlvbkVuY3J5cHRpb25Db25maWd1cmF0aW9uO1xuICBhdWRpZW5jZT86IHN0cmluZztcbiAgYXV0aG9yaXplZFJlZGlyZWN0VVJMcz86IEFycmF5PHN0cmluZz47XG4gIGNhbGxiYWNrVVJMPzogc3RyaW5nO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRlZmF1bHRWZXJpZmljYXRpb25LZXlJZD86IFVVSUQ7XG4gIGluaXRpYXRlZExvZ2luPzogU0FNTHYySWRQSW5pdGlhdGVkTG9naW5Db25maWd1cmF0aW9uO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGtleUlkPzogVVVJRDtcbiAgbG9naW5IaW50Q29uZmlndXJhdGlvbj86IExvZ2luSGludENvbmZpZ3VyYXRpb247XG4gIGxvZ291dD86IFNBTUx2MkxvZ291dDtcbiAgbG9nb3V0VVJMPzogc3RyaW5nO1xuICByZXF1aXJlU2lnbmVkUmVxdWVzdHM/OiBib29sZWFuO1xuICB4bWxTaWduYXR1cmVDMTRuTWV0aG9kPzogQ2Fub25pY2FsaXphdGlvbk1ldGhvZDtcbiAgeG1sU2lnbmF0dXJlTG9jYXRpb24/OiBYTUxTaWduYXR1cmVMb2NhdGlvbjtcbn1cblxuZXhwb3J0IGVudW0gU0FNTExvZ291dEJlaGF2aW9yIHtcbiAgQWxsUGFydGljaXBhbnRzID0gXCJBbGxQYXJ0aWNpcGFudHNcIixcbiAgT25seU9yaWdpbmF0b3IgPSBcIk9ubHlPcmlnaW5hdG9yXCJcbn1cblxuZXhwb3J0IGVudW0gWE1MU2lnbmF0dXJlTG9jYXRpb24ge1xuICBBc3NlcnRpb24gPSBcIkFzc2VydGlvblwiLFxuICBSZXNwb25zZSA9IFwiUmVzcG9uc2VcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkFzc2VydGlvbkVuY3J5cHRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGRpZ2VzdEFsZ29yaXRobT86IHN0cmluZztcbiAgZW5jcnlwdGlvbkFsZ29yaXRobT86IHN0cmluZztcbiAga2V5TG9jYXRpb24/OiBzdHJpbmc7XG4gIGtleVRyYW5zcG9ydEFsZ29yaXRobT86IHN0cmluZztcbiAga2V5VHJhbnNwb3J0RW5jcnlwdGlvbktleUlkPzogVVVJRDtcbiAgbWFza0dlbmVyYXRpb25GdW5jdGlvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJMb2dvdXQge1xuICBiZWhhdmlvcj86IFNBTUxMb2dvdXRCZWhhdmlvcjtcbiAgZGVmYXVsdFZlcmlmaWNhdGlvbktleUlkPzogVVVJRDtcbiAga2V5SWQ/OiBVVUlEO1xuICByZXF1aXJlU2lnbmVkUmVxdWVzdHM/OiBib29sZWFuO1xuICBzaW5nbGVMb2dvdXQ/OiBTQU1MdjJTaW5nbGVMb2dvdXQ7XG4gIHhtbFNpZ25hdHVyZUMxNG5NZXRob2Q/OiBDYW5vbmljYWxpemF0aW9uTWV0aG9kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MlNpbmdsZUxvZ291dCBleHRlbmRzIEVuYWJsZWFibGUge1xuICBrZXlJZD86IFVVSUQ7XG4gIHVybD86IHN0cmluZztcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG59XG5cbi8qKlxuICogQWxsb3dzIHRoZSBSZWx5aW5nIFBhcnR5IHRvIHNwZWNpZnkgZGVzaXJlZCBhdHRyaWJ1dGVzIG9mIGEgbmV3IGNyZWRlbnRpYWwuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHtcbiAgYXR0ZXN0YXRpb24/OiBBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlO1xuICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uPzogQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhO1xuICBjaGFsbGVuZ2U/OiBzdHJpbmc7XG4gIGV4Y2x1ZGVDcmVkZW50aWFscz86IEFycmF5PFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yPjtcbiAgZXh0ZW5zaW9ucz86IFdlYkF1dGhuUmVnaXN0cmF0aW9uRXh0ZW5zaW9uT3B0aW9ucztcbiAgcHViS2V5Q3JlZFBhcmFtcz86IEFycmF5PFB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzPjtcbiAgcnA/OiBQdWJsaWNLZXlDcmVkZW50aWFsUmVseWluZ1BhcnR5RW50aXR5O1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICB1c2VyPzogUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHk7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFZlbmRSZXNwb25zZSB7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZW1lIG9iamVjdCBmb3IgdmFsdWVzIHVzZWQgaW4gdGhlIGNzcyB2YXJpYWJsZXMgZm9yIHNpbXBsZSB0aGVtZXMuXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZVRoZW1lVmFyaWFibGVzIHtcbiAgYWxlcnRCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGFsZXJ0Rm9udENvbG9yPzogc3RyaW5nO1xuICBiYWNrZ3JvdW5kSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJhY2tncm91bmRTaXplPzogc3RyaW5nO1xuICBib3JkZXJSYWRpdXM/OiBzdHJpbmc7XG4gIGRlbGV0ZUJ1dHRvbkNvbG9yPzogc3RyaW5nO1xuICBkZWxldGVCdXR0b25Gb2N1c0NvbG9yPzogc3RyaW5nO1xuICBkZWxldGVCdXR0b25UZXh0Q29sb3I/OiBzdHJpbmc7XG4gIGRlbGV0ZUJ1dHRvblRleHRGb2N1c0NvbG9yPzogc3RyaW5nO1xuICBlcnJvckZvbnRDb2xvcj86IHN0cmluZztcbiAgZXJyb3JJY29uQ29sb3I/OiBzdHJpbmc7XG4gIGZvbnRDb2xvcj86IHN0cmluZztcbiAgZm9udEZhbWlseT86IHN0cmluZztcbiAgZm9vdGVyRGlzcGxheT86IGJvb2xlYW47XG4gIGljb25CYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGljb25Db2xvcj86IHN0cmluZztcbiAgaW5mb0ljb25Db2xvcj86IHN0cmluZztcbiAgaW5wdXRCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGlucHV0SWNvbkNvbG9yPzogc3RyaW5nO1xuICBpbnB1dFRleHRDb2xvcj86IHN0cmluZztcbiAgbGlua1RleHRDb2xvcj86IHN0cmluZztcbiAgbGlua1RleHRGb2N1c0NvbG9yPzogc3RyaW5nO1xuICBsb2dvSW1hZ2VTaXplPzogc3RyaW5nO1xuICBsb2dvSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIG1vbm9Gb250Q29sb3I/OiBzdHJpbmc7XG4gIG1vbm9Gb250RmFtaWx5Pzogc3RyaW5nO1xuICBwYWdlQmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBwYW5lbEJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUJ1dHRvbkNvbG9yPzogc3RyaW5nO1xuICBwcmltYXJ5QnV0dG9uRm9jdXNDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUJ1dHRvblRleHRDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUJ1dHRvblRleHRGb2N1c0NvbG9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gU29ydCB7XG4gIGFzYyA9IFwiYXNjXCIsXG4gIGRlc2MgPSBcImRlc2NcIlxufVxuXG4vKipcbiAqIEV2ZW50IHRvIGluZGljYXRlIGFuIGF1ZGl0IGxvZyB3YXMgY3JlYXRlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGF1ZGl0TG9nPzogQXVkaXRMb2c7XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBhdXRoZW50aWNhdG9yIGF0dGFjaG1lbnQgbW9kYWxpdHkgcHJlZmVyZW5jZSBmb3IgYSBXZWJBdXRobiB3b3JrZmxvdy4gU2VlIHtAbGluayBBdXRoZW50aWNhdG9yQXR0YWNobWVudH1cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBBdXRoZW50aWNhdG9yQXR0YWNobWVudFByZWZlcmVuY2Uge1xuICBhbnkgPSBcImFueVwiLFxuICBwbGF0Zm9ybSA9IFwicGxhdGZvcm1cIixcbiAgY3Jvc3NQbGF0Zm9ybSA9IFwiY3Jvc3NQbGF0Zm9ybVwiXG59XG5cbi8qKlxuICogVXNlciBBUEkgYnVsayByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlUmVzcG9uc2Uge1xuICBkcnlSdW4/OiBib29sZWFuO1xuICBoYXJkRGVsZXRlPzogYm9vbGVhbjtcbiAgdG90YWw/OiBudW1iZXI7XG4gIHVzZXJJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU3RhcnRSZXNwb25zZSB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIG1ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBVc2VyIEFjdGlvbiBSZWFzb24gQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2Uge1xuICB1c2VyQWN0aW9uUmVhc29uPzogVXNlckFjdGlvblJlYXNvbjtcbiAgdXNlckFjdGlvblJlYXNvbnM/OiBBcnJheTxVc2VyQWN0aW9uUmVhc29uPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pIHRoYXQgaXMgdXNlZCBmb3IgYWxsIHVzZXIgbW9kaWZpY2F0aW9ucyAoY3JlYXRlLCB1cGRhdGUsXG4gKiBkZWxldGUpLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWxldGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIEFuIGV4cGFuZGFibGUgQVBJIHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuZGFibGVSZXF1ZXN0IHtcbiAgZXhwYW5kPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIFVzZXIgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbnNlbnRSZXF1ZXN0IHtcbiAgdXNlckNvbnNlbnQ/OiBVc2VyQ29uc2VudDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFJvYiBEYXZpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFNDSU1TZXJ2ZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGNsaWVudEVudGl0eVR5cGVJZD86IFVVSUQ7XG4gIHNjaGVtYXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBzZXJ2ZXJFbnRpdHlUeXBlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFRoZW1lIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lUmVxdWVzdCB7XG4gIHNvdXJjZVRoZW1lSWQ/OiBVVUlEO1xuICB0aGVtZT86IFRoZW1lO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aENvbmZpZ3VyYXRpb25SZXNwb25zZSB7XG4gIGh0dHBTZXNzaW9uTWF4SW5hY3RpdmVJbnRlcnZhbD86IG51bWJlcjtcbiAgbG9nb3V0VVJMPzogc3RyaW5nO1xuICBvYXV0aENvbmZpZ3VyYXRpb24/OiBPQXV0aDJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uIHtcbiAgYXV0aG9yaXphdGlvbkdyYW50SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBjaGFuZ2VQYXNzd29yZElkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgY2hhbmdlUGFzc3dvcmRJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIGRldmljZUNvZGVUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBkZXZpY2VVc2VyQ29kZUlkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgZW1haWxWZXJpZmljYXRpb25JZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGVtYWlsVmVyaWZpY2F0aW9uSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBlbWFpbFZlcmlmaWNhdGlvbk9uZVRpbWVDb2RlR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgZXh0ZXJuYWxBdXRoZW50aWNhdGlvbklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgbG9naW5JbnRlbnRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBvbmVUaW1lUGFzc3dvcmRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBwYXNzd29yZGxlc3NMb2dpbkdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHBhc3N3b3JkbGVzc0xvZ2luVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcGVuZGluZ0FjY291bnRMaW5rVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbk9uZVRpbWVDb2RlR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgcmVtZW1iZXJPQXV0aFNjb3BlQ29uc2VudENob2ljZVRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHNhbWx2MkF1dGhOUmVxdWVzdElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgc2V0dXBQYXNzd29yZElkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgc2V0dXBQYXNzd29yZElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdHJ1c3RUb2tlblRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHR3b0ZhY3RvcklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdHdvRmFjdG9yT25lVGltZUNvZGVJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHR3b0ZhY3Rvck9uZVRpbWVDb2RlSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0d29GYWN0b3JUcnVzdElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgd2ViQXV0aG5BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHdlYkF1dGhuUmVnaXN0cmF0aW9uQ2hhbGxlbmdlVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHZhbGlkIGNyZWRlbnRpYWwgdHlwZXMuIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIHBvaW50IGluIHRoZSBXZWJBdXRobiBzcGVjLiBUaGUgb25seSBkZWZpbmVkIHZhbHVlIGF0IHRoaXMgdGltZSBpcyBcInB1YmxpYy1rZXlcIlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlIHtcbiAgcHVibGljS2V5ID0gXCJwdWJsaWMta2V5XCJcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRoZSBlbnRpdHkgcXVlcnkuIEl0IHByb3ZpZGVzIGEgYnVpbGQgcGF0dGVybiBhcyB3ZWxsIGFzIHB1YmxpYyBmaWVsZHMgZm9yIHVzZSBvbiBmb3JtcyBhbmQgaW4gYWN0aW9ucy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VFbGFzdGljU2VhcmNoQ3JpdGVyaWEge1xufVxuXG4vKipcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3UmVzcG9uc2Uge1xuICBlbWFpbD86IEVtYWlsO1xuICBlcnJvcnM/OiBFcnJvcnM7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXBpY0dhbWVzQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wZW5JRCBDb25uZWN0IENvbmZpZ3VyYXRpb24gYXMgZGVzY3JpYmVkIGJ5IHRoZSA8YSBocmVmPVwiaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWRpc2NvdmVyeS0xXzAuaHRtbCNQcm92aWRlck1ldGFkYXRhXCI+T3BlbklEXG4gKiBQcm92aWRlciBNZXRhZGF0YTwvYT4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBiYWNrY2hhbm5lbF9sb2dvdXRfc3VwcG9ydGVkPzogYm9vbGVhbjtcbiAgY2xhaW1zX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIGRldmljZV9hdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBlbmRfc2Vzc2lvbl9lbmRwb2ludD86IHN0cmluZztcbiAgZnJvbnRjaGFubmVsX2xvZ291dF9zdXBwb3J0ZWQ/OiBib29sZWFuO1xuICBncmFudF90eXBlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICBpZF90b2tlbl9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBqd2tzX3VyaT86IHN0cmluZztcbiAgcmVzcG9uc2VfbW9kZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVzcG9uc2VfdHlwZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgc2NvcGVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIHN1YmplY3RfdHlwZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgdG9rZW5fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHRva2VuX2VuZHBvaW50X2F1dGhfbWV0aG9kc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICB1c2VyaW5mb19lbmRwb2ludD86IHN0cmluZztcbiAgdXNlcmluZm9fc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQ09TRSBFbGxpcHRpYyBDdXJ2ZSBpZGVudGlmaWVyIHRvIGRldGVybWluZSB3aGljaCBlbGxpcHRpYyBjdXJ2ZSB0byB1c2Ugd2l0aCBhIGdpdmVuIGtleVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIENvc2VFbGxpcHRpY0N1cnZlIHtcbiAgUmVzZXJ2ZWQgPSBcIlJlc2VydmVkXCIsXG4gIFAyNTYgPSBcIlAyNTZcIixcbiAgUDM4NCA9IFwiUDM4NFwiLFxuICBQNTIxID0gXCJQNTIxXCIsXG4gIFgyNTUxOSA9IFwiWDI1NTE5XCIsXG4gIFg0NDggPSBcIlg0NDhcIixcbiAgRWQyNTUxOSA9IFwiRWQyNTUxOVwiLFxuICBFZDQ0OCA9IFwiRWQ0NDhcIixcbiAgU2VjcDI1NmsxID0gXCJTZWNwMjU2azFcIlxufVxuXG4vKipcbiAqIEZvcm0gcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1SZXNwb25zZSB7XG4gIGZvcm0/OiBGb3JtO1xuICBmb3Jtcz86IEFycmF5PEZvcm0+O1xufVxuXG4vLyBEbyBub3QgcmVxdWlyZSBhIHNldHRlciBmb3IgJ3R5cGUnLCBpdCBpcyBkZWZpbmVkIGJ5IHRoZSBjb25jcmV0ZSBjbGFzcyBhbmQgaXMgbm90IG11dGFibGVcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUlkZW50aXR5UHJvdmlkZXI8RCBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8VVVJRCwgRD47XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFtYmRhQ29uZmlndXJhdGlvbj86IExhbWJkYUNvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsaW5raW5nU3RyYXRlZ3k/OiBJZGVudGl0eVByb3ZpZGVyTGlua2luZ1N0cmF0ZWd5O1xuICBuYW1lPzogc3RyaW5nO1xuICB0ZW5hbnRDb25maWd1cmF0aW9uPzogUmVjb3JkPFVVSUQsIElkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uPjtcbiAgdHlwZT86IElkZW50aXR5UHJvdmlkZXJUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuICByZWNvbmNpbGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlUmVzcG9uc2Uge1xuICBqd3Q/OiBKV1Q7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlIHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGVuZD86IG51bWJlcjtcbiAgc3RhcnQ/OiBudW1iZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoUmVzcG9uc2Uge1xufVxuXG4vKipcbiAqIERvbWFpbiBmb3IgYSBwdWJsaWMga2V5LCBrZXkgcGFpciBvciBhbiBITUFDIHNlY3JldC4gVGhpcyBpcyB1c2VkIGJ5IEtleU1hc3RlciB0byBtYW5hZ2Uga2V5cyBmb3IgSldUcywgU0FNTCwgZXRjLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleSB7XG4gIGFsZ29yaXRobT86IEtleUFsZ29yaXRobTtcbiAgY2VydGlmaWNhdGU/OiBzdHJpbmc7XG4gIGNlcnRpZmljYXRlSW5mb3JtYXRpb24/OiBDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uO1xuICBleHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgaGFzUHJpdmF0ZUtleT86IGJvb2xlYW47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBraWQ/OiBzdHJpbmc7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHByaXZhdGVLZXk/OiBzdHJpbmc7XG4gIHB1YmxpY0tleT86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xuICB0eXBlPzogS2V5VHlwZTtcbn1cblxuZXhwb3J0IGVudW0gS2V5QWxnb3JpdGhtIHtcbiAgRVMyNTYgPSBcIkVTMjU2XCIsXG4gIEVTMzg0ID0gXCJFUzM4NFwiLFxuICBFUzUxMiA9IFwiRVM1MTJcIixcbiAgSFMyNTYgPSBcIkhTMjU2XCIsXG4gIEhTMzg0ID0gXCJIUzM4NFwiLFxuICBIUzUxMiA9IFwiSFM1MTJcIixcbiAgUlMyNTYgPSBcIlJTMjU2XCIsXG4gIFJTMzg0ID0gXCJSUzM4NFwiLFxuICBSUzUxMiA9IFwiUlM1MTJcIlxufVxuXG5leHBvcnQgZW51bSBLZXlUeXBlIHtcbiAgRUMgPSBcIkVDXCIsXG4gIFJTQSA9IFwiUlNBXCIsXG4gIEhNQUMgPSBcIkhNQUNcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENlcnRpZmljYXRlSW5mb3JtYXRpb24ge1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIG1kNUZpbmdlcnByaW50Pzogc3RyaW5nO1xuICBzZXJpYWxOdW1iZXI/OiBzdHJpbmc7XG4gIHNoYTFGaW5nZXJwcmludD86IHN0cmluZztcbiAgc2hhMVRodW1icHJpbnQ/OiBzdHJpbmc7XG4gIHNoYTI1NkZpbmdlcnByaW50Pzogc3RyaW5nO1xuICBzaGEyNTZUaHVtYnByaW50Pzogc3RyaW5nO1xuICBzdWJqZWN0Pzogc3RyaW5nO1xuICB2YWxpZEZyb20/OiBudW1iZXI7XG4gIHZhbGlkVG8/OiBudW1iZXI7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBlbnRpdHkgZ3JhbnRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBlbnRpdHlJZD86IFVVSUQ7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBGdXNpb25BdXRoIGNvbm5lY3Rvci5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1c2lvbkF1dGhDb25uZWN0b3JDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUmVzcG9uc2Uge1xuICBjb25uZWN0b3I/OiBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbjtcbiAgY29ubmVjdG9ycz86IEFycmF5PEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uPjtcbn1cblxuLyoqXG4gKiBDb250cm9scyB0aGUgcG9saWN5IGZvciByZXF1ZXN0aW5nIHVzZXIgcGVybWlzc2lvbiB0byBncmFudCBhY2Nlc3MgdG8gcmVxdWVzdGVkIHNjb3BlcyBkdXJpbmcgYW4gT0F1dGggd29ya2Zsb3dcbiAqIGZvciBhIHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIE9BdXRoU2NvcGVDb25zZW50TW9kZSB7XG4gIEFsd2F5c1Byb21wdCA9IFwiQWx3YXlzUHJvbXB0XCIsXG4gIFJlbWVtYmVyRGVjaXNpb24gPSBcIlJlbWVtYmVyRGVjaXNpb25cIixcbiAgTmV2ZXJQcm9tcHQgPSBcIk5ldmVyUHJvbXB0XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuU2xpZGluZ1dpbmRvd0NvbmZpZ3VyYXRpb24ge1xuICBtYXhpbXVtVGltZVRvTGl2ZUluTWludXRlcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgVGhlbWVzLlxuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IFRoZW1lU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIENvbnNlbnRzXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IENvbnNlbnRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIE9iamVjdFN0YXRlIHtcbiAgQWN0aXZlID0gXCJBY3RpdmVcIixcbiAgSW5hY3RpdmUgPSBcIkluYWN0aXZlXCIsXG4gIFBlbmRpbmdEZWxldGUgPSBcIlBlbmRpbmdEZWxldGVcIlxufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBJZGVudGl0eSBQcm92aWRlcnNcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogSWRlbnRpdHlQcm92aWRlclNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXZvY2F0aW9uUG9saWN5IHtcbiAgb25Mb2dpblByZXZlbnRlZD86IGJvb2xlYW47XG4gIG9uTXVsdGlGYWN0b3JFbmFibGU/OiBib29sZWFuO1xuICBvbk9uZVRpbWVUb2tlblJldXNlPzogYm9vbGVhbjtcbiAgb25QYXNzd29yZENoYW5nZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vZGVscyBhIGZhbWlseSBncm91cGluZyBvZiB1c2Vycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHkge1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBtZW1iZXJzPzogQXJyYXk8RmFtaWx5TWVtYmVyPjtcbn1cblxuLyoqXG4gKiBUaGUgQXBwbGljYXRpb24gU2NvcGUgQVBJIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25PQXV0aFNjb3BlUmVzcG9uc2Uge1xuICBzY29wZT86IEFwcGxpY2F0aW9uT0F1dGhTY29wZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGgyQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhvcml6ZWRPcmlnaW5VUkxzPzogQXJyYXk8c3RyaW5nPjtcbiAgYXV0aG9yaXplZFJlZGlyZWN0VVJMcz86IEFycmF5PHN0cmluZz47XG4gIGF1dGhvcml6ZWRVUkxWYWxpZGF0aW9uUG9saWN5PzogT2F1dGgyQXV0aG9yaXplZFVSTFZhbGlkYXRpb25Qb2xpY3k7XG4gIGNsaWVudEF1dGhlbnRpY2F0aW9uUG9saWN5PzogQ2xpZW50QXV0aGVudGljYXRpb25Qb2xpY3k7XG4gIGNsaWVudElkPzogc3RyaW5nO1xuICBjbGllbnRTZWNyZXQ/OiBzdHJpbmc7XG4gIGNvbnNlbnRNb2RlPzogT0F1dGhTY29wZUNvbnNlbnRNb2RlO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRldmljZVZlcmlmaWNhdGlvblVSTD86IHN0cmluZztcbiAgZW5hYmxlZEdyYW50cz86IEFycmF5PEdyYW50VHlwZT47XG4gIGdlbmVyYXRlUmVmcmVzaFRva2Vucz86IGJvb2xlYW47XG4gIGxvZ291dEJlaGF2aW9yPzogTG9nb3V0QmVoYXZpb3I7XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgcHJvb2ZLZXlGb3JDb2RlRXhjaGFuZ2VQb2xpY3k/OiBQcm9vZktleUZvckNvZGVFeGNoYW5nZVBvbGljeTtcbiAgcHJvdmlkZWRTY29wZVBvbGljeT86IFByb3ZpZGVkU2NvcGVQb2xpY3k7XG4gIHJlbGF0aW9uc2hpcD86IE9BdXRoQXBwbGljYXRpb25SZWxhdGlvbnNoaXA7XG4gIHJlcXVpcmVDbGllbnRBdXRoZW50aWNhdGlvbj86IGJvb2xlYW47XG4gIHJlcXVpcmVSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICBzY29wZUhhbmRsaW5nUG9saWN5PzogT0F1dGhTY29wZUhhbmRsaW5nUG9saWN5O1xuICB1bmtub3duU2NvcGVQb2xpY3k/OiBVbmtub3duU2NvcGVQb2xpY3k7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBhbGwgaWRlbnRpdHkgcHJvdmlkZXJzIHRoYXQgYXJlIHBhc3N3b3JkbGVzcyBhbmQgZG8gbm90IGFjY2VwdCBhIHBhc3N3b3JkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc0lkZW50aXR5UHJvdmlkZXIge1xufVxuXG4vKipcbiAqIEEgbG9nIGZvciBhbiBldmVudCB0aGF0IGhhcHBlbmVkIHRvIGEgVXNlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ29tbWVudCB7XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGNvbW1lbnRlcklkPzogVVVJRDtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgQ3JlYXRlZCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBDcmVhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFNTT0NvbmZpZ3VyYXRpb24ge1xuICBhbGxvd0FjY2Vzc1Rva2VuQm9vdHN0cmFwPzogYm9vbGVhbjtcbiAgZGV2aWNlVHJ1c3RUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JNZXRob2Qge1xuICBhdXRoZW50aWNhdG9yPzogQXV0aGVudGljYXRvckNvbmZpZ3VyYXRpb247XG4gIGVtYWlsPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgbGFzdFVzZWQ/OiBib29sZWFuO1xuICBtZXRob2Q/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xuICBzZWNyZXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBUZW5hbnRzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBJZGVudGl0eSBQcm92aWRlciBMaW5rIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgUm9iIERhdmlzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlcklkZW50aXR5UHJvdmlkZXJMaW5rRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgaWRlbnRpdHlQcm92aWRlckxpbms/OiBJZGVudGl0eVByb3ZpZGVyTGluaztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlcXVlc3Qge1xuICBsb2NhbGU/OiBzdHJpbmc7XG4gIG1lc3NhZ2VUZW1wbGF0ZT86IE1lc3NhZ2VUZW1wbGF0ZTtcbn1cblxuLyoqXG4gKiBMb2dpbiBBUEkgcmVxdWVzdCBvYmplY3QgdXNlZCBmb3IgbG9naW4gdG8gdGhpcmQtcGFydHkgc3lzdGVtcyAoaS5lLiBMb2dpbiB3aXRoIEZhY2Vib29rKS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBlbmNvZGVkSldUPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBub0xpbms/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFuIGFjdGlvbiB0aGF0IGNhbiBiZSBleGVjdXRlZCBvbiBhIHVzZXIgKGRpc2NpcGxpbmUgb3IgcmV3YXJkIHBvdGVudGlhbGx5KS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uIHtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgY2FuY2VsRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZW5kRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgaWQ/OiBVVUlEO1xuICBpbmNsdWRlRW1haWxJbkV2ZW50SlNPTj86IGJvb2xlYW47XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWROYW1lcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIG1vZGlmeUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBBcnJheTxVc2VyQWN0aW9uT3B0aW9uPjtcbiAgcHJldmVudExvZ2luPzogYm9vbGVhbjtcbiAgc2VuZEVuZEV2ZW50PzogYm9vbGVhbjtcbiAgc3RhcnRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0ZW1wb3JhbD86IGJvb2xlYW47XG4gIHRyYW5zYWN0aW9uVHlwZT86IFRyYW5zYWN0aW9uVHlwZTtcbiAgdXNlckVtYWlsaW5nRW5hYmxlZD86IGJvb2xlYW47XG4gIHVzZXJOb3RpZmljYXRpb25zRW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWZhdWx0TWVzc2FnZXM/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvY2FsaXplZE1lc3NhZ2VzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbmFtZT86IHN0cmluZztcbiAgc3R5bGVzaGVldD86IHN0cmluZztcbiAgdGVtcGxhdGVzPzogVGVtcGxhdGVzO1xuICB0eXBlPzogVGhlbWVUeXBlO1xuICB2YXJpYWJsZXM/OiBTaW1wbGVUaGVtZVZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZXMge1xuICBhY2NvdW50RWRpdD86IHN0cmluZztcbiAgYWNjb3VudEluZGV4Pzogc3RyaW5nO1xuICBhY2NvdW50VHdvRmFjdG9yRGlzYWJsZT86IHN0cmluZztcbiAgYWNjb3VudFR3b0ZhY3RvckVuYWJsZT86IHN0cmluZztcbiAgYWNjb3VudFR3b0ZhY3RvckluZGV4Pzogc3RyaW5nO1xuICBhY2NvdW50V2ViQXV0aG5BZGQ/OiBzdHJpbmc7XG4gIGFjY291bnRXZWJBdXRobkRlbGV0ZT86IHN0cmluZztcbiAgYWNjb3VudFdlYkF1dGhuSW5kZXg/OiBzdHJpbmc7XG4gIGNvbmZpcm1hdGlvblJlcXVpcmVkPzogc3RyaW5nO1xuICBlbWFpbENvbXBsZXRlPzogc3RyaW5nO1xuICBlbWFpbFNlbmQ/OiBzdHJpbmc7XG4gIGVtYWlsU2VudD86IHN0cmluZztcbiAgZW1haWxWZXJpZmljYXRpb25SZXF1aXJlZD86IHN0cmluZztcbiAgZW1haWxWZXJpZnk/OiBzdHJpbmc7XG4gIGhlbHBlcnM/OiBzdHJpbmc7XG4gIGluZGV4Pzogc3RyaW5nO1xuICBvYXV0aDJBdXRob3JpemU/OiBzdHJpbmc7XG4gIG9hdXRoMkF1dGhvcml6ZWROb3RSZWdpc3RlcmVkPzogc3RyaW5nO1xuICBvYXV0aDJDaGlsZFJlZ2lzdHJhdGlvbk5vdEFsbG93ZWQ/OiBzdHJpbmc7XG4gIG9hdXRoMkNoaWxkUmVnaXN0cmF0aW9uTm90QWxsb3dlZENvbXBsZXRlPzogc3RyaW5nO1xuICBvYXV0aDJDb21wbGV0ZVJlZ2lzdHJhdGlvbj86IHN0cmluZztcbiAgb2F1dGgyQ29uc2VudD86IHN0cmluZztcbiAgb2F1dGgyRGV2aWNlPzogc3RyaW5nO1xuICBvYXV0aDJEZXZpY2VDb21wbGV0ZT86IHN0cmluZztcbiAgb2F1dGgyRXJyb3I/OiBzdHJpbmc7XG4gIG9hdXRoMkxvZ291dD86IHN0cmluZztcbiAgb2F1dGgyUGFzc3dvcmRsZXNzPzogc3RyaW5nO1xuICBvYXV0aDJSZWdpc3Rlcj86IHN0cmluZztcbiAgb2F1dGgyU3RhcnRJZFBMaW5rPzogc3RyaW5nO1xuICBvYXV0aDJUd29GYWN0b3I/OiBzdHJpbmc7XG4gIG9hdXRoMlR3b0ZhY3RvckVuYWJsZT86IHN0cmluZztcbiAgb2F1dGgyVHdvRmFjdG9yRW5hYmxlQ29tcGxldGU/OiBzdHJpbmc7XG4gIG9hdXRoMlR3b0ZhY3Rvck1ldGhvZHM/OiBzdHJpbmc7XG4gIG9hdXRoMldhaXQ/OiBzdHJpbmc7XG4gIG9hdXRoMldlYkF1dGhuPzogc3RyaW5nO1xuICBvYXV0aDJXZWJBdXRoblJlYXV0aD86IHN0cmluZztcbiAgb2F1dGgyV2ViQXV0aG5SZWF1dGhFbmFibGU/OiBzdHJpbmc7XG4gIHBhc3N3b3JkQ2hhbmdlPzogc3RyaW5nO1xuICBwYXNzd29yZENvbXBsZXRlPzogc3RyaW5nO1xuICBwYXNzd29yZEZvcmdvdD86IHN0cmluZztcbiAgcGFzc3dvcmRTZW50Pzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25Db21wbGV0ZT86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uU2VuZD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uU2VudD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uUmVxdWlyZWQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblZlcmlmeT86IHN0cmluZztcbiAgc2FtbHYyTG9nb3V0Pzogc3RyaW5nO1xuICB1bmF1dGhvcml6ZWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBJZGVudGl0eVByb3ZpZGVyVHlwZSB7XG4gIEFwcGxlID0gXCJBcHBsZVwiLFxuICBFcGljR2FtZXMgPSBcIkVwaWNHYW1lc1wiLFxuICBFeHRlcm5hbEpXVCA9IFwiRXh0ZXJuYWxKV1RcIixcbiAgRmFjZWJvb2sgPSBcIkZhY2Vib29rXCIsXG4gIEdvb2dsZSA9IFwiR29vZ2xlXCIsXG4gIEhZUFIgPSBcIkhZUFJcIixcbiAgTGlua2VkSW4gPSBcIkxpbmtlZEluXCIsXG4gIE5pbnRlbmRvID0gXCJOaW50ZW5kb1wiLFxuICBPcGVuSURDb25uZWN0ID0gXCJPcGVuSURDb25uZWN0XCIsXG4gIFNBTUx2MiA9IFwiU0FNTHYyXCIsXG4gIFNBTUx2MklkUEluaXRpYXRlZCA9IFwiU0FNTHYySWRQSW5pdGlhdGVkXCIsXG4gIFNvbnlQU04gPSBcIlNvbnlQU05cIixcbiAgU3RlYW0gPSBcIlN0ZWFtXCIsXG4gIFR3aXRjaCA9IFwiVHdpdGNoXCIsXG4gIFR3aXR0ZXIgPSBcIlR3aXR0ZXJcIixcbiAgWGJveCA9IFwiWGJveFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0IHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVudHJpZXM/OiBBcnJheTxJUEFjY2Vzc0NvbnRyb2xFbnRyeT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBWZXJpZmljYXRpb25TdHJhdGVneSB7XG4gIENsaWNrYWJsZUxpbmsgPSBcIkNsaWNrYWJsZUxpbmtcIixcbiAgRm9ybUZpZWxkID0gXCJGb3JtRmllbGRcIlxufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIG1hbmFnZWQgZmllbGRzIHRoYXQgYXJlIGFsc28gcHV0IGludG8gdGhlIGRhdGFiYXNlIGR1cmluZyBGdXNpb25BdXRoIHNldHVwLlxuICogPHA+XG4gKiBJbnRlcm5hbCBOb3RlOiBUaGVzZSBmaWVsZHMgYXJlIGFsc28gZGVjbGFyZWQgaW4gU1FMIGluIG9yZGVyIHRvIGJvb3RzdHJhcCB0aGUgc3lzdGVtLiBUaGVzZSBuZWVkIHRvIHN0YXkgaW4gc3luYy5cbiAqIEFueSBjaGFuZ2VzIHRvIHRoZXNlIGZpZWxkcyBuZWVkcyB0byBhbHNvIGJlIHJlZmxlY3RlZCBpbiBteXNxbC5zcWwgYW5kIHBvc3RncmVzcWwuc3FsXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlZEZpZWxkcyB7XG59XG5cbi8qKlxuICogV2ViaG9vayBldmVudCBsb2cgc2VhcmNoIHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rRXZlbnRMb2dTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogV2ViaG9va0V2ZW50TG9nU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhlbnRpY2F0b3JDb25maWd1cmF0aW9uIHtcbiAgYWxnb3JpdGhtPzogVE9UUEFsZ29yaXRobTtcbiAgY29kZUxlbmd0aD86IG51bWJlcjtcbiAgdGltZVN0ZXA/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIFRPVFBBbGdvcml0aG0ge1xuICBIbWFjU0hBMSA9IFwiSG1hY1NIQTFcIixcbiAgSG1hY1NIQTI1NiA9IFwiSG1hY1NIQTI1NlwiLFxuICBIbWFjU0hBNTEyID0gXCJIbWFjU0hBNTEyXCJcbn1cblxuLyoqXG4gKiBNb2RlbHMgYWN0aW9uIHJlYXNvbnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvblJlYXNvbiB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvY2FsaXplZFRleHRzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgdGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIFVzZXIncyBXZWJBdXRobkNyZWRlbnRpYWwuIENvbnRhaW5zIGFsbCBkYXRhIHJlcXVpcmVkIHRvIGNvbXBsZXRlIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGNlcmVtb25pZXMuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkNyZWRlbnRpYWwge1xuICBhbGdvcml0aG0/OiBDb3NlQWxnb3JpdGhtSWRlbnRpZmllcjtcbiAgYXR0ZXN0YXRpb25UeXBlPzogQXR0ZXN0YXRpb25UeXBlO1xuICBhdXRoZW50aWNhdG9yU3VwcG9ydHNVc2VyVmVyaWZpY2F0aW9uPzogYm9vbGVhbjtcbiAgY3JlZGVudGlhbElkPzogc3RyaW5nO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGlzY292ZXJhYmxlPzogYm9vbGVhbjtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVzZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHB1YmxpY0tleT86IHN0cmluZztcbiAgcmVseWluZ1BhcnR5SWQ/OiBzdHJpbmc7XG4gIHNpZ25Db3VudD86IG51bWJlcjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0cmFuc3BvcnRzPzogQXJyYXk8c3RyaW5nPjtcbiAgdXNlckFnZW50Pzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0RXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGVuY3J5cHRlZCBhc3NlcnRpb25zIHdoZW4gYWN0aW5nIGFzIFNBTUwgU2VydmljZSBQcm92aWRlclxuICpcbiAqIEBhdXRob3IgSmFyZXQgSGVuZHJpY2tzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJBc3NlcnRpb25EZWNyeXB0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBrZXlUcmFuc3BvcnREZWNyeXB0aW9uS2V5SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgUmVmcmVzaCBUb2tlbiBSZXZva2UgRXZlbnQuIFRoaXMgZXZlbnQgbWlnaHQgYmUgZm9yIGEgc2luZ2xlIHRva2VuLCBhIHVzZXJcbiAqIG9yIGFuIGVudGlyZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RSZWZyZXNoVG9rZW5SZXZva2VFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBhcHBsaWNhdGlvblRpbWVUb0xpdmVJblNlY29uZHM/OiBSZWNvcmQ8VVVJRCwgbnVtYmVyPjtcbiAgcmVmcmVzaFRva2VuPzogUmVmcmVzaFRva2VuO1xuICB1c2VyPzogVXNlcjtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclBvbGljeSB7XG4gIGNvbm5lY3RvcklkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBtaWdyYXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gQXV0aGVudGljYXRpb25UaHJlYXRzIHtcbiAgSW1wb3NzaWJsZVRyYXZlbCA9IFwiSW1wb3NzaWJsZVRyYXZlbFwiXG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIFJlc2V0IFNlbmQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFJlc2V0U2VuZEV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogRXZlbnQgdG8gaW5kaWNhdGUga2lja3N0YXJ0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtpY2tzdGFydFN1Y2Nlc3NFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGluc3RhbmNlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFVzZXIgQVBJIGRlbGV0ZSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRlbGV0ZVJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgZHJ5UnVuPzogYm9vbGVhbjtcbiAgaGFyZERlbGV0ZT86IGJvb2xlYW47XG4gIGxpbWl0PzogbnVtYmVyO1xuICBxdWVyeT86IHN0cmluZztcbiAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XG4gIHVzZXJJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudEFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uIHtcbiAgdWlJUEFjY2Vzc0NvbnRyb2xMaXN0SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgYW55IG9iamVjdCB0aGF0IGNhbiBwcm92aWRlIEpTT04gV2ViIGtleSBJbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKU09OV2ViS2V5SW5mb1Byb3ZpZGVyIHtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIGEgc2ltcGxlIGF0dGFjaG1lbnQgd2l0aCBhIGJ5dGUgYXJyYXksIG5hbWUgYW5kIE1JTUUgdHlwZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50IHtcbiAgYXR0YWNobWVudD86IEFycmF5PG51bWJlcj47XG4gIG1pbWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGVuYW50LWxldmVsIGNvbmZpZ3VyYXRpb24gZm9yIFdlYkF1dGhuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRXZWJBdXRobkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYm9vdHN0cmFwV29ya2Zsb3c/OiBUZW5hbnRXZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbjtcbiAgZGVidWc/OiBib29sZWFuO1xuICByZWF1dGhlbnRpY2F0aW9uV29ya2Zsb3c/OiBUZW5hbnRXZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbjtcbiAgcmVseWluZ1BhcnR5SWQ/OiBzdHJpbmc7XG4gIHJlbHlpbmdQYXJ0eU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW1haWwgdGVtcGxhdGUgcmVxdWVzdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlUmVxdWVzdCB7XG4gIGVtYWlsVGVtcGxhdGU/OiBFbWFpbFRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyUGVuZGluZ0xpbmtSZXNwb25zZSB7XG4gIGlkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uPzogSWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb247XG4gIGxpbmtDb3VudD86IG51bWJlcjtcbiAgcGVuZGluZ0lkUExpbms/OiBQZW5kaW5nSWRQTGluaztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzU2VuZFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY29kZT86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYmxvY2tlZERvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTGluayB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgaWRlbnRpdHlQcm92aWRlcklkPzogVVVJRDtcbiAgaWRlbnRpdHlQcm92aWRlck5hbWU/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJUeXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG4gIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ/OiBzdHJpbmc7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RMb2dpbkluc3RhbnQ/OiBudW1iZXI7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogUmVnaXN0cmF0aW9uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25SZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uT25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xuICB0b2tlbkV4cGlyYXRpb25JbnN0YW50PzogbnVtYmVyO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBBIHJvbGUgZ2l2ZW4gdG8gYSB1c2VyIGZvciBhIHNwZWNpZmljIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblJvbGUge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpc0RlZmF1bHQ/OiBib29sZWFuO1xuICBpc1N1cGVyUm9sZT86IGJvb2xlYW47XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdvb2dsZSBzb2NpYWwgbG9naW4gcHJvdmlkZXIgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR29vZ2xlSWRlbnRpdHlQcm92aWRlclByb3BlcnRpZXMge1xuICBhcGk/OiBzdHJpbmc7XG4gIGJ1dHRvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldLU1Jlc3BvbnNlIHtcbiAga2V5cz86IEFycmF5PEpTT05XZWJLZXk+O1xufVxuXG4vKipcbiAqIFN0ZWFtIEFQSSBtb2Rlcy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFN0ZWFtQVBJTW9kZSB7XG4gIFB1YmxpYyA9IFwiUHVibGljXCIsXG4gIFBhcnRuZXIgPSBcIlBhcnRuZXJcIlxufVxuXG4vKipcbiAqIExhbWJkYSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVJlc3BvbnNlIHtcbiAgbGFtYmRhPzogTGFtYmRhO1xuICBsYW1iZGFzPzogQXJyYXk8TGFtYmRhPjtcbn1cblxuLyoqXG4gKiBUaGUgSW50ZWdyYXRpb24gUmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvblJlcXVlc3Qge1xuICBpbnRlZ3JhdGlvbnM/OiBJbnRlZ3JhdGlvbnM7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBKV1QgcHVibGljIGtleSBSZWZyZXNoIFRva2VuIFJldm9rZSBFdmVudC4gVGhpcyBldmVudCBtaWdodCBiZSBmb3IgYSBzaW5nbGVcbiAqIHRva2VuLCBhIHVzZXIgb3IgYW4gZW50aXJlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFB1YmxpY0tleVVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gQ2FwdGNoYU1ldGhvZCB7XG4gIEdvb2dsZVJlY2FwdGNoYVYyID0gXCJHb29nbGVSZWNhcHRjaGFWMlwiLFxuICBHb29nbGVSZWNhcHRjaGFWMyA9IFwiR29vZ2xlUmVjYXB0Y2hhVjNcIixcbiAgSENhcHRjaGEgPSBcIkhDYXB0Y2hhXCIsXG4gIEhDYXB0Y2hhRW50ZXJwcmlzZSA9IFwiSENhcHRjaGFFbnRlcnByaXNlXCJcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIGV2ZW50IHR5cGVzIHRoYXQgRnVzaW9uQXV0aCBwcm9kdWNlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgSldUUHVibGljS2V5VXBkYXRlID0gXCJqd3QucHVibGljLWtleS51cGRhdGVcIixcbiAgSldUUmVmcmVzaFRva2VuUmV2b2tlID0gXCJqd3QucmVmcmVzaC10b2tlbi5yZXZva2VcIixcbiAgSldUUmVmcmVzaCA9IFwiand0LnJlZnJlc2hcIixcbiAgQXVkaXRMb2dDcmVhdGUgPSBcImF1ZGl0LWxvZy5jcmVhdGVcIixcbiAgRXZlbnRMb2dDcmVhdGUgPSBcImV2ZW50LWxvZy5jcmVhdGVcIixcbiAgS2lja3N0YXJ0U3VjY2VzcyA9IFwia2lja3N0YXJ0LnN1Y2Nlc3NcIixcbiAgR3JvdXBDcmVhdGUgPSBcImdyb3VwLmNyZWF0ZVwiLFxuICBHcm91cENyZWF0ZUNvbXBsZXRlID0gXCJncm91cC5jcmVhdGUuY29tcGxldGVcIixcbiAgR3JvdXBEZWxldGUgPSBcImdyb3VwLmRlbGV0ZVwiLFxuICBHcm91cERlbGV0ZUNvbXBsZXRlID0gXCJncm91cC5kZWxldGUuY29tcGxldGVcIixcbiAgR3JvdXBNZW1iZXJBZGQgPSBcImdyb3VwLm1lbWJlci5hZGRcIixcbiAgR3JvdXBNZW1iZXJBZGRDb21wbGV0ZSA9IFwiZ3JvdXAubWVtYmVyLmFkZC5jb21wbGV0ZVwiLFxuICBHcm91cE1lbWJlclJlbW92ZSA9IFwiZ3JvdXAubWVtYmVyLnJlbW92ZVwiLFxuICBHcm91cE1lbWJlclJlbW92ZUNvbXBsZXRlID0gXCJncm91cC5tZW1iZXIucmVtb3ZlLmNvbXBsZXRlXCIsXG4gIEdyb3VwTWVtYmVyVXBkYXRlID0gXCJncm91cC5tZW1iZXIudXBkYXRlXCIsXG4gIEdyb3VwTWVtYmVyVXBkYXRlQ29tcGxldGUgPSBcImdyb3VwLm1lbWJlci51cGRhdGUuY29tcGxldGVcIixcbiAgR3JvdXBVcGRhdGUgPSBcImdyb3VwLnVwZGF0ZVwiLFxuICBHcm91cFVwZGF0ZUNvbXBsZXRlID0gXCJncm91cC51cGRhdGUuY29tcGxldGVcIixcbiAgVXNlckFjdGlvbiA9IFwidXNlci5hY3Rpb25cIixcbiAgVXNlckJ1bGtDcmVhdGUgPSBcInVzZXIuYnVsay5jcmVhdGVcIixcbiAgVXNlckNyZWF0ZSA9IFwidXNlci5jcmVhdGVcIixcbiAgVXNlckNyZWF0ZUNvbXBsZXRlID0gXCJ1c2VyLmNyZWF0ZS5jb21wbGV0ZVwiLFxuICBVc2VyRGVhY3RpdmF0ZSA9IFwidXNlci5kZWFjdGl2YXRlXCIsXG4gIFVzZXJEZWxldGUgPSBcInVzZXIuZGVsZXRlXCIsXG4gIFVzZXJEZWxldGVDb21wbGV0ZSA9IFwidXNlci5kZWxldGUuY29tcGxldGVcIixcbiAgVXNlckVtYWlsVXBkYXRlID0gXCJ1c2VyLmVtYWlsLnVwZGF0ZVwiLFxuICBVc2VyRW1haWxWZXJpZmllZCA9IFwidXNlci5lbWFpbC52ZXJpZmllZFwiLFxuICBVc2VySWRlbnRpdHlQcm92aWRlckxpbmsgPSBcInVzZXIuaWRlbnRpdHktcHJvdmlkZXIubGlua1wiLFxuICBVc2VySWRlbnRpdHlQcm92aWRlclVubGluayA9IFwidXNlci5pZGVudGl0eS1wcm92aWRlci51bmxpbmtcIixcbiAgVXNlckxvZ2luSWREdXBsaWNhdGVPbkNyZWF0ZSA9IFwidXNlci5sb2dpbklkLmR1cGxpY2F0ZS5jcmVhdGVcIixcbiAgVXNlckxvZ2luSWREdXBsaWNhdGVPblVwZGF0ZSA9IFwidXNlci5sb2dpbklkLmR1cGxpY2F0ZS51cGRhdGVcIixcbiAgVXNlckxvZ2luRmFpbGVkID0gXCJ1c2VyLmxvZ2luLmZhaWxlZFwiLFxuICBVc2VyTG9naW5OZXdEZXZpY2UgPSBcInVzZXIubG9naW4ubmV3LWRldmljZVwiLFxuICBVc2VyTG9naW5TdWNjZXNzID0gXCJ1c2VyLmxvZ2luLnN1Y2Nlc3NcIixcbiAgVXNlckxvZ2luU3VzcGljaW91cyA9IFwidXNlci5sb2dpbi5zdXNwaWNpb3VzXCIsXG4gIFVzZXJQYXNzd29yZEJyZWFjaCA9IFwidXNlci5wYXNzd29yZC5icmVhY2hcIixcbiAgVXNlclBhc3N3b3JkUmVzZXRTZW5kID0gXCJ1c2VyLnBhc3N3b3JkLnJlc2V0LnNlbmRcIixcbiAgVXNlclBhc3N3b3JkUmVzZXRTdGFydCA9IFwidXNlci5wYXNzd29yZC5yZXNldC5zdGFydFwiLFxuICBVc2VyUGFzc3dvcmRSZXNldFN1Y2Nlc3MgPSBcInVzZXIucGFzc3dvcmQucmVzZXQuc3VjY2Vzc1wiLFxuICBVc2VyUGFzc3dvcmRVcGRhdGUgPSBcInVzZXIucGFzc3dvcmQudXBkYXRlXCIsXG4gIFVzZXJSZWFjdGl2YXRlID0gXCJ1c2VyLnJlYWN0aXZhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvbkNyZWF0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uY3JlYXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25DcmVhdGVDb21wbGV0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uY3JlYXRlLmNvbXBsZXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25EZWxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlQ29tcGxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZS5jb21wbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uVXBkYXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi51cGRhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvblVwZGF0ZUNvbXBsZXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi51cGRhdGUuY29tcGxldGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvblZlcmlmaWVkID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi52ZXJpZmllZFwiLFxuICBVc2VyVHdvRmFjdG9yTWV0aG9kQWRkID0gXCJ1c2VyLnR3by1mYWN0b3IubWV0aG9kLmFkZFwiLFxuICBVc2VyVHdvRmFjdG9yTWV0aG9kUmVtb3ZlID0gXCJ1c2VyLnR3by1mYWN0b3IubWV0aG9kLnJlbW92ZVwiLFxuICBVc2VyVXBkYXRlID0gXCJ1c2VyLnVwZGF0ZVwiLFxuICBVc2VyVXBkYXRlQ29tcGxldGUgPSBcInVzZXIudXBkYXRlLmNvbXBsZXRlXCIsXG4gIFRlc3QgPSBcInRlc3RcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZGxlc3NTdGFydFJlc3BvbnNlIHtcbiAgY29kZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhhbmRsaW5nIHVua25vd24gT0F1dGggc2NvcGVzIGluIHRoZSByZXF1ZXN0XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gVW5rbm93blNjb3BlUG9saWN5IHtcbiAgQWxsb3cgPSBcIkFsbG93XCIsXG4gIFJlbW92ZSA9IFwiUmVtb3ZlXCIsXG4gIFJlamVjdCA9IFwiUmVqZWN0XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGVBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1bmRsZUlkPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBrZXlJZD86IFVVSUQ7XG4gIHNjb3BlPzogc3RyaW5nO1xuICBzZXJ2aWNlc0lkPzogc3RyaW5nO1xuICB0ZWFtSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXVkaXQgbG9nIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nUmVzcG9uc2Uge1xuICBhdWRpdExvZz86IEF1ZGl0TG9nO1xufVxuXG4vKipcbiAqIGRvbWFpbiBQT0pPIHRvIHJlcHJlc2VudCBBdXRoZW50aWNhdGlvbktleVxuICpcbiAqIEBhdXRob3Igc2FuamF5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5IHtcbiAgZXhwaXJhdGlvbkluc3RhbnQ/OiBudW1iZXI7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXBBY2Nlc3NDb250cm9sTGlzdElkPzogVVVJRDtcbiAga2V5Pzogc3RyaW5nO1xuICBrZXlNYW5hZ2VyPzogYm9vbGVhbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG1ldGFEYXRhPzogQVBJS2V5TWV0YURhdGE7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBlcm1pc3Npb25zPzogQVBJS2V5UGVybWlzc2lvbnM7XG4gIHJldHJpZXZhYmxlPzogYm9vbGVhbjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleU1ldGFEYXRhIHtcbiAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5UGVybWlzc2lvbnMge1xuICBlbmRwb2ludHM/OiBSZWNvcmQ8c3RyaW5nLCBBcnJheTxzdHJpbmc+Pjtcbn1cblxuLyoqXG4gKiBUaGUgYXBwbGljYXRpb24ncyByZWxhdGlvbnNoaXAgdG8gdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLiBGaXJzdC1wYXJ0eSBhcHBsaWNhdGlvbnMgd2lsbCBiZSBncmFudGVkIGltcGxpY2l0IHBlcm1pc3Npb24gZm9yIHJlcXVlc3RlZCBzY29wZXMuXG4gKiBUaGlyZC1wYXJ0eSBhcHBsaWNhdGlvbnMgd2lsbCB1c2UgdGhlIHtAbGluayBPQXV0aFNjb3BlQ29uc2VudE1vZGV9IHBvbGljeS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBPQXV0aEFwcGxpY2F0aW9uUmVsYXRpb25zaGlwIHtcbiAgRmlyc3RQYXJ0eSA9IFwiRmlyc3RQYXJ0eVwiLFxuICBUaGlyZFBhcnR5ID0gXCJUaGlyZFBhcnR5XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlck9hdXRoMkNvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGNsaWVudEF1dGhlbnRpY2F0aW9uTWV0aG9kPzogQ2xpZW50QXV0aGVudGljYXRpb25NZXRob2Q7XG4gIGVtYWlsQ2xhaW0/OiBzdHJpbmc7XG4gIGVtYWlsVmVyaWZpZWRDbGFpbT86IHN0cmluZztcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdG9rZW5fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZXJpbmZvX2VuZHBvaW50Pzogc3RyaW5nO1xuICB1c2VybmFtZUNsYWltPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBDbGllbnRBdXRoZW50aWNhdGlvbk1ldGhvZCB7XG4gIG5vbmUgPSBcIm5vbmVcIixcbiAgY2xpZW50X3NlY3JldF9iYXNpYyA9IFwiY2xpZW50X3NlY3JldF9iYXNpY1wiLFxuICBjbGllbnRfc2VjcmV0X3Bvc3QgPSBcImNsaWVudF9zZWNyZXRfcG9zdFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZEluSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPExpbmtlZEluQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZXNwb25zZSB7XG4gIGFjdGlvbnM/OiBBcnJheTxMb2dpblByZXZlbnRlZFJlc3BvbnNlPjtcbiAgY2hhbmdlUGFzc3dvcmRJZD86IHN0cmluZztcbiAgY2hhbmdlUGFzc3dvcmRSZWFzb24/OiBDaGFuZ2VQYXNzd29yZFJlYXNvbjtcbiAgY29uZmlndXJhYmxlTWV0aG9kcz86IEFycmF5PHN0cmluZz47XG4gIGVtYWlsVmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIG1ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xuICBwZW5kaW5nSWRQTGlua0lkPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbklkPzogVVVJRDtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdGhyZWF0c0RldGVjdGVkPzogQXJyYXk8QXV0aGVudGljYXRpb25UaHJlYXRzPjtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuRXhwaXJhdGlvbkluc3RhbnQ/OiBudW1iZXI7XG4gIHRydXN0VG9rZW4/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvcklkPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBjb25zZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50IHtcbiAgY29uc2VudEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGNvdW50cnlNaW5pbXVtQWdlRm9yU2VsZkNvbnNlbnQ/OiBMb2NhbGl6ZWRJbnRlZ2VycztcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlZmF1bHRNaW5pbXVtQWdlRm9yU2VsZkNvbnNlbnQ/OiBudW1iZXI7XG4gIGVtYWlsUGx1cz86IEVtYWlsUGx1cztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbXVsdGlwbGVWYWx1ZXNBbGxvd2VkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgdmFsdWVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWFpbFBsdXMgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbWF4aW11bVRpbWVUb1NlbmRFbWFpbEluSG91cnM/OiBudW1iZXI7XG4gIG1pbmltdW1UaW1lVG9TZW5kRW1haWxJbkhvdXJzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCB7QGxpbmsgR3JvdXB9IGFuZCB7QGxpbmsgR3JvdXBNZW1iZXJ9IGV2ZW50cy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VHcm91cEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzcGVjaWZpYyBlbnRpdHkgdHlwZSBwZXJtaXNzaW9uLiBUaGlzIHBlcm1pc3Npb24gY2FuIGJlIGdyYW50ZWQgdG8gdXNlcnMgb3Igb3RoZXIgZW50aXRpZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVBlcm1pc3Npb24ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXNEZWZhdWx0PzogYm9vbGVhbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB0aGUgdXNlciBxdWVyeS4gSXQgcHJvdmlkZXMgYSBidWlsZCBwYXR0ZXJuIGFzIHdlbGwgYXMgcHVibGljIGZpZWxkcyBmb3IgdXNlIG9uIGZvcm1zIGFuZCBpbiBhY3Rpb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VFbGFzdGljU2VhcmNoQ3JpdGVyaWEge1xufVxuXG4vKipcbiAqIFVzZXIgY29tbWVudCBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb21tZW50U2VhcmNoUmVzcG9uc2Uge1xuICB0b3RhbD86IG51bWJlcjtcbiAgdXNlckNvbW1lbnRzPzogQXJyYXk8VXNlckNvbW1lbnQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyUmVxdWVzdCB7XG4gIGlkZW50aXR5UHJvdmlkZXI/OiBCYXNlSWRlbnRpdHlQcm92aWRlcjxhbnk+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgSWRlbnRpdHkgUHJvdmlkZXJzLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBJZGVudGl0eVByb3ZpZGVyVHlwZTtcbn1cblxuLyoqXG4gKiBTdGFuZGFyZCBlcnJvciBkb21haW4gb2JqZWN0IHRoYXQgY2FuIGFsc28gYmUgdXNlZCBhcyB0aGUgcmVzcG9uc2UgZnJvbSBhbiBBUEkgY2FsbC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcnJvcnMge1xuICBmaWVsZEVycm9ycz86IFJlY29yZDxzdHJpbmcsIEFycmF5PEVycm9yPj47XG4gIGdlbmVyYWxFcnJvcnM/OiBBcnJheTxFcnJvcj47XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBlcnJvci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcnJvciB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF2YWlsYWJsZSBKU09OIFdlYiBBbGdvcml0aG1zIChKV0EpIGFzIGRlc2NyaWJlZCBpbiBSRkMgNzUxOCBhdmFpbGFibGUgZm9yIHRoaXMgSldUIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQWxnb3JpdGhtIHtcbiAgRVMyNTYgPSBcIkVTMjU2XCIsXG4gIEVTMzg0ID0gXCJFUzM4NFwiLFxuICBFUzUxMiA9IFwiRVM1MTJcIixcbiAgSFMyNTYgPSBcIkhTMjU2XCIsXG4gIEhTMzg0ID0gXCJIUzM4NFwiLFxuICBIUzUxMiA9IFwiSFM1MTJcIixcbiAgUFMyNTYgPSBcIlBTMjU2XCIsXG4gIFBTMzg0ID0gXCJQUzM4NFwiLFxuICBQUzUxMiA9IFwiUFM1MTJcIixcbiAgUlMyNTYgPSBcIlJTMjU2XCIsXG4gIFJTMzg0ID0gXCJSUzM4NFwiLFxuICBSUzUxMiA9IFwiUlM1MTJcIixcbiAgbm9uZSA9IFwibm9uZVwiXG59XG5cbi8qKlxuICogSlNPTiBXZWIgVG9rZW4gKEpXVCkgYXMgZGVmaW5lZCBieSBSRkMgNzUxOS5cbiAqIDxwcmU+XG4gKiBGcm9tIFJGQyA3NTE5IFNlY3Rpb24gMS4gSW50cm9kdWN0aW9uOlxuICogICAgVGhlIHN1Z2dlc3RlZCBwcm9udW5jaWF0aW9uIG9mIEpXVCBpcyB0aGUgc2FtZSBhcyB0aGUgRW5nbGlzaCB3b3JkIFwiam90XCIuXG4gKiA8L3ByZT5cbiAqIFRoZSBKV1QgaXMgbm90IFRocmVhZC1TYWZlIGFuZCBzaG91bGQgbm90IGJlIHJlLXVzZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVCB7XG4gIGF1ZD86IGFueTtcbiAgZXhwPzogbnVtYmVyO1xuICBpYXQ/OiBudW1iZXI7XG4gIGlzcz86IHN0cmluZztcbiAganRpPzogc3RyaW5nO1xuICBuYmY/OiBudW1iZXI7XG4gIFtvdGhlckNsYWltczogc3RyaW5nXTogYW55OyAvLyBBbnkgb3RoZXIgZmllbGRzXG4gIHN1Yj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIEpTT04gV2ViIEtleSBhcyBkZWZpbmVkIGJ5IDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUxNyNzZWN0aW9uLTRcIj5SRkMgNzUxNyBKU09OIFdlYiBLZXkgKEpXSylcbiAqIFNlY3Rpb24gNDwvYT4gYW5kIDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUxOFwiPlJGQyA3NTE4IEpTT04gV2ViIEFsZ29yaXRobXMgKEpXQSk8L2E+LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKU09OV2ViS2V5IHtcbiAgYWxnPzogQWxnb3JpdGhtO1xuICBjcnY/OiBzdHJpbmc7XG4gIGQ/OiBzdHJpbmc7XG4gIGRwPzogc3RyaW5nO1xuICBkcT86IHN0cmluZztcbiAgZT86IHN0cmluZztcbiAga2lkPzogc3RyaW5nO1xuICBrdHk/OiBLZXlUeXBlO1xuICBuPzogc3RyaW5nO1xuICBbb3RoZXI6IHN0cmluZ106IGFueTsgLy8gQW55IG90aGVyIGZpZWxkc1xuICBwPzogc3RyaW5nO1xuICBxPzogc3RyaW5nO1xuICBxaT86IHN0cmluZztcbiAgdXNlPzogc3RyaW5nO1xuICB4Pzogc3RyaW5nO1xuICB4NWM/OiBBcnJheTxzdHJpbmc+O1xuICB4NXQ/OiBzdHJpbmc7XG4gIHg1dF9TMjU2Pzogc3RyaW5nO1xuICB5Pzogc3RyaW5nO1xufVxuXG4iLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgQ2xpZW50UmVzcG9uc2UgZnJvbSBcIi4vQ2xpZW50UmVzcG9uc2VcIjtcbmltcG9ydCB7UmVxdWVzdENyZWRlbnRpYWxzLCBSZXNwb25zZX0gZnJvbSBcIm5vZGUtZmV0Y2hcIjtcbmltcG9ydCB7VVJMU2VhcmNoUGFyYW1zfSBmcm9tIFwidXJsXCI7XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlSGFuZGxlcjxUPiA9IChyZXNwb25zZTogUmVzcG9uc2UpID0+IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VD4+O1xuZXhwb3J0IHR5cGUgRXJyb3JSZXNwb25zZUhhbmRsZXI8VD4gPSAocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFQ+PjtcblxuZXhwb3J0IGludGVyZmFjZSBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlciB1c2luZyBhIGtleVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSB2YWx1ZSBvZiB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEByZXR1cm5zIHtJUkVTVENsaWVudH1cbiAgICovXG4gIHdpdGhBdXRob3JpemF0aW9uKGtleTogc3RyaW5nKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzZWdtZW50IHRvIHRoZSByZXF1ZXN0IHVyaVxuICAgKi9cbiAgd2l0aFVyaVNlZ21lbnQoc2VnbWVudDogc3RyaW5nIHwgbnVtYmVyKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvZHkgb2YgdGhlIGNsaWVudCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlcXVlc3QgYm9keSBhcyBmb3JtIGRhdGEuXG4gICAqL1xuICB3aXRoRm9ybURhdGEoYm9keTogVVJMU2VhcmNoUGFyYW1zKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBoZWFkZXIgdG8gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgVGhlIG5hbWUgb2YgdGhlIGhlYWRlci5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyLlxuICAgKi9cbiAgd2l0aEhlYWRlcihrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBib2R5IG9mIHRoZSBjbGllbnQgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIGJvZHkgVGhlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSByZXF1ZXN0IGJvZHkgYXMgSlNPTi5cbiAgICovXG4gIHdpdGhKU09OQm9keShib2R5OiBvYmplY3QpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgaHR0cCBtZXRob2QgZm9yIHRoZSByZXF1ZXN0XG4gICAqL1xuICB3aXRoTWV0aG9kKG1ldGhvZDogc3RyaW5nKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHVyaSBvZiB0aGUgcmVxdWVzdFxuICAgKi9cbiAgd2l0aFVyaSh1cmk6IHN0cmluZyk6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBBZGRzIHBhcmFtZXRlcnMgdG8gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciwgbWF5IGJlIGEgc3RyaW5nLCBvYmplY3Qgb3IgbnVtYmVyLlxuICAgKi9cbiAgd2l0aFBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogU2V0cyByZXF1ZXN0J3MgY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBBIHN0cmluZyBpbmRpY2F0aW5nIHdoZXRoZXIgY3JlZGVudGlhbHMgd2lsbCBiZSBzZW50IHdpdGggdGhlIHJlcXVlc3QgYWx3YXlzLCBuZXZlciwgb3Igb25seSB3aGVuIHNlbnQgdG8gYSBzYW1lLW9yaWdpbiBVUkwuXG4gICAqL1xuICB3aXRoQ3JlZGVudGlhbHModmFsdWU6IFJlcXVlc3RDcmVkZW50aWFscyk6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSByZXNwb25zZSBoYW5kbGVyLiBUaGlzIGNvdWxkIGRvIHByb2Nlc3NpbmcgYmVmb3JlIHRoZSBDbGllbnRSZXNwb25zZSBpcyByZXR1cm5lZCBkZXBlbmRpbmcgb24gdGhlIEFQSXMgZXhwZWN0ZWQgcmVzcG9uc2UuXG4gICAqXG4gICAqIEBwYXJhbSBoYW5kbGVyXG4gICAqL1xuICB3aXRoUmVzcG9uc2VIYW5kbGVyKGhhbmRsZXI6IFJlc3BvbnNlSGFuZGxlcjxSVD4pOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgZXJyb3IgcmVzcG9uc2UgaGFuZGxlci4gIEVycm9yIHJlc3BvbnNlIGhhbmRsZXJzIGhhdmUgYSBnZW5lcmljIGJ1dCBkdWUgdG8gdHlwZXNjcmlwdCBsaW1pdGF0aW9ucyxcbiAgICogdGhpcyB2YWx1ZSB3aWxsIG5vdCBiZSBwcm9wYWdhdGVkIHRvIHRoZSBQcm9taXNlIGNhdGNoIHN0YXRlbWVudFxuICAgKiBcbiAgICogQHBhcmFtIGhhbmRsZXJcbiAgICovXG4gIHdpdGhFcnJvclJlc3BvbnNlSGFuZGxlcihoYW5kbGVyOiBFcnJvclJlc3BvbnNlSGFuZGxlcjxFUlQ+KTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgcmVxdWVzdCBhbmQgcmV0dXJuIGEgcHJvbWlzZS4gVGhpcyBwcm9taXNlIHdpbGwgcmVzb2x2ZSBpZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsXG4gICAqIGFuZCByZWplY3Qgb3RoZXJ3aXNlLlxuICAgKi9cbiAgZ28oKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSVD4+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBJUkVTVENsaWVudDtcbiJdfQ==