@fusionauth/typescript-client 1.62.0 → 1.63.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.
@@ -436,7 +436,7 @@ exports.default = DefaultRESTClientBuilder;
436
436
  (function (global){(function (){
437
437
  "use strict";
438
438
  /*
439
- * Copyright (c) 2019-2025, FusionAuth, All Rights Reserved
439
+ * Copyright (c) 2019-2026, FusionAuth, All Rights Reserved
440
440
  *
441
441
  * Licensed under the Apache License, Version 2.0 (the "License");
442
442
  * you may not use this file except in compliance with the License.
@@ -1966,6 +1966,19 @@ var FusionAuthClient = /** @class */ (function () {
1966
1966
  .withMethod("DELETE")
1967
1967
  .go();
1968
1968
  };
1969
+ /**
1970
+ * Deletes all of the WebAuthn credentials for the given User Id.
1971
+ *
1972
+ * @param {UUID} userId The unique Id of the User to delete WebAuthn passkeys for.
1973
+ * @returns {Promise<ClientResponse<void>>}
1974
+ */
1975
+ FusionAuthClient.prototype.deleteWebAuthnCredentialsForUser = function (userId) {
1976
+ return this.start()
1977
+ .withUri('/api/webauthn')
1978
+ .withParameter('userId', userId)
1979
+ .withMethod("DELETE")
1980
+ .go();
1981
+ };
1969
1982
  /**
1970
1983
  * Deletes the webhook for the given Id.
1971
1984
  *
@@ -2702,7 +2715,7 @@ var FusionAuthClient = /** @class */ (function () {
2702
2715
  .go();
2703
2716
  };
2704
2717
  /**
2705
- * Retrieves the identity provider for the given domain. A 200 response code indicates the domain is managed
2718
+ * Retrieves any global identity providers for the given domain. A 200 response code indicates the domain is managed
2706
2719
  * by a registered identity provider. A 404 indicates the domain is not managed.
2707
2720
  *
2708
2721
  * @param {string} domain The domain or email address to lookup.
@@ -2715,6 +2728,23 @@ var FusionAuthClient = /** @class */ (function () {
2715
2728
  .withMethod("GET")
2716
2729
  .go();
2717
2730
  };
2731
+ /**
2732
+ * Retrieves the identity provider for the given domain and tenantId. A 200 response code indicates the domain is managed
2733
+ * by a registered identity provider. A 404 indicates the domain is not managed.
2734
+ *
2735
+ * @param {string} domain The domain or email address to lookup.
2736
+ * @param {UUID} tenantId If provided, the API searches for an identity provider scoped to the corresponding tenant that manages the requested domain.
2737
+ * If no result is found, the API then searches for global identity providers.
2738
+ * @returns {Promise<ClientResponse<LookupResponse>>}
2739
+ */
2740
+ FusionAuthClient.prototype.lookupIdentityProviderByTenantId = function (domain, tenantId) {
2741
+ return this.start()
2742
+ .withUri('/api/identity-provider/lookup')
2743
+ .withParameter('domain', domain)
2744
+ .withParameter('tenantId', tenantId)
2745
+ .withMethod("GET")
2746
+ .go();
2747
+ };
2718
2748
  /**
2719
2749
  * Modifies a temporal user action by changing the expiration of the action and optionally adding a comment to the
2720
2750
  * action.
@@ -4816,19 +4846,6 @@ var FusionAuthClient = /** @class */ (function () {
4816
4846
  .withMethod("GET")
4817
4847
  .go();
4818
4848
  };
4819
- /**
4820
- * Retrieves the user for the given Id. This method does not use an API key, instead it uses a JSON Web Token (JWT) for authentication.
4821
- *
4822
- * @param {string} encodedJWT The encoded JWT (access token).
4823
- * @returns {Promise<ClientResponse<UserResponse>>}
4824
- */
4825
- FusionAuthClient.prototype.retrieveUserUsingJWT = function (encodedJWT) {
4826
- return this.startAnonymous()
4827
- .withUri('/api/user')
4828
- .withAuthorization('Bearer ' + encodedJWT)
4829
- .withMethod("GET")
4830
- .go();
4831
- };
4832
4849
  /**
4833
4850
  * Retrieves the FusionAuth version string.
4834
4851
  *
@@ -7027,6 +7044,7 @@ var OAuthErrorType;
7027
7044
  OAuthErrorType["authorization_pending"] = "authorization_pending";
7028
7045
  OAuthErrorType["expired_token"] = "expired_token";
7029
7046
  OAuthErrorType["unsupported_token_type"] = "unsupported_token_type";
7047
+ OAuthErrorType["invalid_dpop_proof"] = "invalid_dpop_proof";
7030
7048
  })(OAuthErrorType = exports.OAuthErrorType || (exports.OAuthErrorType = {}));
7031
7049
  /**
7032
7050
  * Controls the policy for requesting user permission to grant access to requested scopes during an OAuth workflow
@@ -7219,6 +7237,7 @@ var ThemeType;
7219
7237
  * <a href="https://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-05">
7220
7238
  * Draft RFC on OAuth 2.0 Message Authentication Code (MAC) Tokens</a>
7221
7239
  * </li>
7240
+ * <li>DPoP Token type as defined by <a href="https://datatracker.ietf.org/doc/html/rfc9449">RFC 9449</a></li>
7222
7241
  * </ul>
7223
7242
  *
7224
7243
  * @author Daniel DeGroff
@@ -7227,6 +7246,7 @@ var TokenType;
7227
7246
  (function (TokenType) {
7228
7247
  TokenType["Bearer"] = "Bearer";
7229
7248
  TokenType["MAC"] = "MAC";
7249
+ TokenType["DPoP"] = "DPoP";
7230
7250
  })(TokenType = exports.TokenType || (exports.TokenType = {}));
7231
7251
  /**
7232
7252
  * The transaction types for Webhooks and other event systems within FusionAuth.
@@ -7366,4 +7386,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
7366
7386
  },{}]},{},[1])(1)
7367
7387
  });
7368
7388
 
7369
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC50cyIsIm5vZGVfbW9kdWxlcy9ub2RlLWZldGNoL2Jyb3dzZXIuanMiLCJzcmMvQ2xpZW50UmVzcG9uc2UudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnQudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyLnRzIiwic3JjL0Z1c2lvbkF1dGhDbGllbnQudHMiLCJzcmMvSVJFU1RDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7Ozs7Ozs7Ozs7OztBQUVILDJEQUFxRDtBQUNyRCxrQkFBZSwwQkFBZ0IsQ0FBQztBQUVoQyx5REFBdUM7QUFDdkMsb0RBQWtDO0FBQ2xDLGlFQUErQztBQUMvQyx1REFBcUM7QUFDckMsb0RBQWtDO0FBQ2xDLDJEQUF5Qzs7OztBQ3hCekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6QkE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7O0FBRUg7SUFBQTtJQVFBLENBQUM7SUFIQyxzQ0FBYSxHQUFiO1FBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUN6RCxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQVJBLEFBUUMsSUFBQTs7Ozs7O0FDeEJEOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdILG1EQUE4QztBQUM5Qyx5Q0FBMkU7QUFDM0UsMkJBQXNDO0FBRXRDOzs7O0dBSUc7QUFDSDtJQVVFLDJCQUFtQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtR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LENBQUE7SUFDMUIsZ0RBQW1DLENBQUE7SUFDbkMsZ0RBQW1DLENBQUE7SUFDbkMsbURBQXNDLENBQUE7SUFDdEMseUNBQTRCLENBQUE7SUFDNUIsMERBQTZDLENBQUE7SUFDN0MseUNBQTRCLENBQUE7SUFDNUIsMERBQTZDLENBQUE7SUFDN0MsZ0RBQW1DLENBQUE7SUFDbkMsaUVBQW9ELENBQUE7SUFDcEQsc0RBQXlDLENBQUE7SUFDekMsdUVBQTBELENBQUE7SUFDMUQsc0RBQXlDLENBQUE7SUFDekMsdUVBQTBELENBQUE7SUFDMUQseUNBQTRCLENBQUE7SUFDNUIsMERBQTZDLENBQUE7SUFDN0MsdUNBQTBCLENBQUE7SUFDMUIsZ0RBQW1DLENBQUE7SUFDbkMsdUNBQTBCLENBQUE7SUFDMUIsd0RBQTJDLENBQUE7SUFDM0MsK0NBQWtDLENBQUE7SUFDbEMsdUNBQTBCLENBQUE7SUFDMUIsd0RBQTJDLENBQUE7SUFDM0Msa0RBQXFDLENBQUE7SUFDckMsc0RBQXlDLENBQUE7SUFDekMscUVBQXdELENBQUE7SUFDeEQseUVBQTRELENBQUE7SUFDNUQsMkVBQThELENBQUE7SUFDOUQsMkVBQThELENBQUE7SUFDOUQsa0RBQXFDLENBQUE7SUFDckMseURBQTRDLENBQUE7SUFDNUMsb0RBQXVDLENBQUE7SUFDdkMsMERBQTZDLENBQUE7SUFDN0Msd0RBQTJDLENBQUE7SUFDM0MsK0RBQWtELENBQUE7SUFDbEQsaUVBQW9ELENBQUE7SUFDcEQscUVBQXdELENBQUE7SUFDeEQsd0RBQTJDLENBQUE7SUFDM0MsK0NBQWtDLENBQUE7SUFDbEMsZ0VBQW1ELENBQUE7SUFDbkQsaUZBQW9FLENBQUE7SUFDcEUsZ0VBQW1ELENBQUE7SUFDbkQsaUZBQW9FLENBQUE7SUFDcEUsZ0VBQW1ELENBQUE7SUFDbkQsaUZBQW9FLENBQUE7SUFDcEUsb0VBQXVELENBQUE7SUFDdkQsa0VBQXFELENBQUE7SUFDckQsd0VBQTJELENBQUE7SUFDM0QsdUNBQTBCLENBQUE7SUFDMUIsd0RBQTJDLENBQUE7SUFDM0MsMEJBQWEs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Z0I7SUFDMUIsK0RBQTJDLENBQUE7SUFDM0MscUVBQWlELENBQUE7SUFDakQsaUVBQTZDLENBQUE7SUFDN0MsdUdBQW1GLENBQUE7SUFDbkYscUZBQWlFLENBQUE7SUFDakUsaUVBQTZDLENBQUE7SUFDN0MsbUVBQStDLENBQUE7SUFDL0MsdUVBQW1ELENBQUE7SUFDbkQseUZBQXFFLENBQUE7SUFDckUseURBQXFDLENBQUE7SUFDckMscUVBQWlELENBQUE7SUFDakQseUVBQXFELENBQUE7SUFDckQsMkRBQXVDLENBQUE7SUFDdkMsNkRBQXlDLENBQUE7SUFDekMseUVBQXFELENBQUE7SUFDckQsNkRBQXlDLENBQUE7SUFDekMscURBQWlDLENBQUE7SUFDakMsbUVBQStDLENBQUE7SUFDL0MsNkVBQXlELENBQUE7SUFDekQsK0VBQTJELENBQUE7SUFDM0QsNkZBQXlFLENBQUE7SUFDekUscURBQWlDLENBQUE7SUFDakMsaUVBQTZDLENBQUE7SUFDN0MsbUVBQStDLENBQUE7SUFDL0MsbUVBQStDLENBQUE7SUFDL0MsbUVBQStDLENBQUE7SUFDL0MseUZBQXFFLENBQUE7SUFDckUsK0RBQTJDLENBQUE7SUFDM0MsMkRBQXVDLENBQUE7SUFDdkMsaUZBQTZELENBQUE7SUFDN0QsK0VBQTJELENBQUE7SUFDM0QsdUZBQW1FLENBQUE7SUFDbkUsdURBQW1DLENBQUE7SUFDbkMsMkRBQXVDLENBQUE7SUFDdkMsK0RBQTJDLENBQUE7SUFDM0MsMkRBQXVDLENBQUE7SUFDdkMsbUVBQStDLENBQUE7SUFDL0MsaURBQTZCLENBQUE7SUFDN0IscUVBQWlELENBQUE7SUFDakQsbUVBQStDLENBQUE7SUFDL0MsK0RBQTJDLENBQUE7SUFDM0MsNkRBQXlDLENBQUE7SUFDekMsaUVBQTZDLENBQUE7SUFDN0MsbUVBQStDLENBQUE7SUFDL0MsbUVBQStDLENBQUE7SUFDL0MsbURBQStCLENBQUE7SUFDL0IsMkRBQXVDLENBQUE7SUFDdkMsdURBQW1DLENBQUE7SUFDbkMseUVBQXFELENBQUE7SUFDckQsMkRBQXVDLENB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Q0FBQTtJQUNuQiwyQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSlcsb0JBQW9CLEdBQXBCLDRCQUFvQixLQUFwQiw0QkFBb0IsUUFJL0I7QUErRUQ7Ozs7O0dBS0c7QUFDSCxJQUFZLGtCQUlYO0FBSkQsV0FBWSxrQkFBa0I7SUFDNUIsdUNBQWlCLENBQUE7SUFDakIseUNBQW1CLENBQUE7SUFDbkIsNkNBQXVCLENBQUE7QUFDekIsQ0FBQyxFQUpXLGtCQUFrQixHQUFsQiwwQkFBa0IsS0FBbEIsMEJBQWtCLFFBSTdCOzs7Ozs7QUNocmFEOzs7Ozs7Ozs7Ozs7OztHQWNHIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IEZ1c2lvbkF1dGhDbGllbnQgZnJvbSAnLi9zcmMvRnVzaW9uQXV0aENsaWVudCdcbmV4cG9ydCBkZWZhdWx0IEZ1c2lvbkF1dGhDbGllbnQ7XG5cbmV4cG9ydCAqIGZyb20gJy4vc3JjL0Z1c2lvbkF1dGhDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvSVJFU1RDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0NsaWVudFJlc3BvbnNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0lSRVNUQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0lSRVNUQ2xpZW50QnVpbGRlcic7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciBnZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XG5cdC8vIHRoZSBvbmx5IHJlbGlhYmxlIG1lYW5zIHRvIGdldCB0aGUgZ2xvYmFsIG9iamVjdCBpc1xuXHQvLyBgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKWBcblx0Ly8gSG93ZXZlciwgdGhpcyBjYXVzZXMgQ1NQIHZpb2xhdGlvbnMgaW4gQ2hyb21lIGFwcHMuXG5cdGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cblx0aWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cblx0dGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QnKTtcbn1cblxudmFyIGdsb2JhbE9iamVjdCA9IGdldEdsb2JhbCgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBnbG9iYWxPYmplY3QuZmV0Y2g7XG5cbi8vIE5lZWRlZCBmb3IgVHlwZVNjcmlwdCBhbmQgV2VicGFjay5cbmlmIChnbG9iYWxPYmplY3QuZmV0Y2gpIHtcblx0ZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsT2JqZWN0LmZldGNoLmJpbmQoZ2xvYmFsT2JqZWN0KTtcbn1cblxuZXhwb3J0cy5IZWFkZXJzID0gZ2xvYmFsT2JqZWN0LkhlYWRlcnM7XG5leHBvcnRzLlJlcXVlc3QgPSBnbG9iYWxPYmplY3QuUmVxdWVzdDtcbmV4cG9ydHMuUmVzcG9uc2UgPSBnbG9iYWxPYmplY3QuUmVzcG9uc2U7XG4iLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGllbnRSZXNwb25zZTxUPiB7XG4gIHB1YmxpYyBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIHB1YmxpYyByZXNwb25zZTogVDtcbiAgcHVibGljIGV4Y2VwdGlvbjogRXJyb3I7XG5cbiAgd2FzU3VjY2Vzc2Z1bCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNDb2RlID49IDIwMCAmJiB0aGlzLnN0YXR1c0NvZGUgPCAzMDA7XG4gIH1cbn0iLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LTIwMjQsIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBJUkVTVENsaWVudCwgeyBFcnJvclJlc3BvbnNlSGFuZGxlciwgUmVzcG9uc2VIYW5kbGVyIH0gZnJvbSBcIi4vSVJFU1RDbGllbnRcIjtcbmltcG9ydCBDbGllbnRSZXNwb25zZSBmcm9tIFwiLi9DbGllbnRSZXNwb25zZVwiO1xuaW1wb3J0IGZldGNoLCB7IEJvZHlJbml0LCBSZXF1ZXN0Q3JlZGVudGlhbHMsIFJlc3BvbnNlIH0gZnJvbSAnbm9kZS1mZXRjaCc7XG5pbXBvcnQgeyBVUkxTZWFyY2hQYXJhbXMgfSBmcm9tIFwidXJsXCI7XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQXG4gKiBAYXV0aG9yIFR5bGVyIFNjb3R0XG4gKiBAYXV0aG9yIFRKIFBlZGVuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IGltcGxlbWVudHMgSVJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICBwdWJsaWMgYm9keTogQm9keUluaXQ7XG4gIHB1YmxpYyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHB1YmxpYyBtZXRob2Q6IHN0cmluZztcbiAgcHVibGljIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHVibGljIHVyaTogc3RyaW5nO1xuICBwdWJsaWMgY3JlZGVudGlhbHM6IFJlcXVlc3RDcmVkZW50aWFscztcbiAgcHVibGljIHJlc3BvbnNlSGFuZGxlcjogUmVzcG9uc2VIYW5kbGVyPFJUPiA9IERlZmF1bHRSRVNUQ2xpZW50LkpTT05SZXNwb25zZUhhbmRsZXI7XG4gIHB1YmxpYyBlcnJvclJlc3BvbnNlSGFuZGxlcjogRXJyb3JSZXNwb25zZUhhbmRsZXI8RVJUPiA9IERlZmF1bHRSRVNUQ2xpZW50LkVycm9ySlNPTlJlc3BvbnNlSGFuZGxlcjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaG9zdDogc3RyaW5nKSB7XG4gIH1cblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIEpTT04gZm9ybSBvZiB0aGUgcmVzcG9uc2UgdGV4dC5cbiAgICpcbiAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIEpTT05SZXNwb25zZUhhbmRsZXI8UlQ+KHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UlQ+PiB7XG4gICAgbGV0IGNsaWVudFJlc3BvbnNlID0gbmV3IENsaWVudFJlc3BvbnNlPFJUPigpO1xuXG4gICAgY2xpZW50UmVzcG9uc2Uuc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICBsZXQgdHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuICAgIGlmICh0eXBlICYmIHR5cGUuc3RhcnRzV2l0aChcImFwcGxpY2F0aW9uL2pzb25cIikpIHtcbiAgICAgIGNsaWVudFJlc3BvbnNlLnJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGllbnRSZXNwb25zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgSlNPTiBmb3JtIG9mIHRoZSByZXNwb25zZSB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVzcG9uc2VcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgRXJyb3JKU09OUmVzcG9uc2VIYW5kbGVyPEVSVD4ocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFUlQ+PiB7XG4gICAgbGV0IGNsaWVudFJlc3BvbnNlID0gbmV3IENsaWVudFJlc3BvbnNlPEVSVD4oKTtcblxuICAgIGNsaWVudFJlc3BvbnNlLnN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgbGV0IHR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgICBpZiAodHlwZSAmJiB0eXBlLnN0YXJ0c1dpdGgoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSB7XG4gICAgICBjbGllbnRSZXNwb25zZS5leGNlcHRpb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaWVudFJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIHVzaW5nIGEga2V5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHZhbHVlIG9mIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICogQHJldHVybnMge0RlZmF1bHRSRVNUQ2xpZW50fVxuICAgKi9cbiAgd2l0aEF1dGhvcml6YXRpb24oa2V5OiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy53aXRoSGVhZGVyKCdBdXRob3JpemF0aW9uJywga2V5KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc2VnbWVudCB0byB0aGUgcmVxdWVzdCB1cmlcbiAgICovXG4gIHdpdGhVcmlTZWdtZW50KHNlZ21lbnQ6IHN0cmluZyB8IG51bWJlcik6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICBpZiAoc2VnbWVudCA9PT0gbnVsbCB8fCBzZWdtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodGhpcy51cmkgPT09IG51bGwpIHtcbiAgICAgIHRoaXMudXJpID0gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVyaS5jaGFyQXQodGhpcy51cmkubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgdGhpcy51cmkgKz0gJy8nO1xuICAgIH1cbiAgICB0aGlzLnVyaSA9IHRoaXMudXJpICsgc2VnbWVudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZ1bGwgdXJsICsgcGFyYW1ldGVyIGxpc3RcbiAgICovXG4gIGdldEZ1bGxVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdCArIHRoaXMudXJpICsgdGhpcy5nZXRRdWVyeVN0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvZHkgb2YgdGhlIGNsaWVudCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlcXVlc3QgYm9keSBhcyBmb3JtIGRhdGEuXG4gICAqL1xuICB3aXRoRm9ybURhdGEoYm9keTogVVJMU2VhcmNoUGFyYW1zKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIGNvbnN0IGJvZHkyID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChib2R5KSB7XG4gICAgICBib2R5LmZvckVhY2goKHZhbHVlLCBuYW1lLCBzZWFyY2hQYXJhbXMpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUgIT0gXCJudWxsXCIgJiYgdmFsdWUgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGJvZHkyLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYm9keSA9IGJvZHkyO1xuICAgIH1cbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBoZWFkZXIgdG8gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgVGhlIG5hbWUgb2YgdGhlIGhlYWRlci5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyLlxuICAgKi9cbiAgd2l0aEhlYWRlcihrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvZHkgb2YgdGhlIGNsaWVudCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlcXVlc3QgYm9keSBhcyBKU09OLlxuICAgKi9cbiAgd2l0aEpTT05Cb2R5KGJvZHk6IG9iamVjdCk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICB0aGlzLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgLy8gT21pdCB0aGUgQ29udGVudC1MZW5ndGgsIHRoaXMgaXMgc2V0IGF1dG8tbWFnaWNhbGx5IGJ5IHRoZSByZXF1ZXN0IGxpYnJhcnlcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBodHRwIG1ldGhvZCBmb3IgdGhlIHJlcXVlc3RcbiAgICovXG4gIHdpdGhNZXRob2QobWV0aG9kOiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdXJpIG9mIHRoZSByZXF1ZXN0XG4gICAqL1xuICB3aXRoVXJpKHVyaTogc3RyaW5nKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMudXJpID0gdXJpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcGFyYW1ldGVycyB0byB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLCBtYXkgYmUgYSBzdHJpbmcsIG9iamVjdCBvciBudW1iZXIuXG4gICAqL1xuICB3aXRoUGFyYW1ldGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLnBhcmFtZXRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHJlcXVlc3QncyBjcmVkZW50aWFscy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIEEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciBjcmVkZW50aWFscyB3aWxsIGJlIHNlbnQgd2l0aCB0aGUgcmVxdWVzdCBhbHdheXMsIG5ldmVyLCBvciBvbmx5IHdoZW4gc2VudCB0byBhIHNhbWUtb3JpZ2luIFVSTC5cbiAgICovXG4gIHdpdGhDcmVkZW50aWFscyh2YWx1ZTogUmVxdWVzdENyZWRlbnRpYWxzKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMuY3JlZGVudGlhbHMgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdpdGhSZXNwb25zZUhhbmRsZXIoaGFuZGxlcjogUmVzcG9uc2VIYW5kbGVyPFJUPik6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLnJlc3BvbnNlSGFuZGxlciA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aXRoRXJyb3JSZXNwb25zZUhhbmRsZXIoaGFuZGxlcjogRXJyb3JSZXNwb25zZUhhbmRsZXI8RVJUPik6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmVycm9yUmVzcG9uc2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIHJlcXVlc3QgYW5kIHJldHVybiBhIHByb21pc2UuIFRoaXMgcHJvbWlzZSB3aWxsIHJlc29sdmUgaWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bFxuICAgKiBhbmQgcmVqZWN0IG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIGdvKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UlQ+PiB7XG4gICAgY29uc3QgY2xpZW50UmVzcG9uc2UgPSBuZXcgQ2xpZW50UmVzcG9uc2U8UlQ+KCk7XG5cbiAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIHRoaXMuZ2V0RnVsbFVybCgpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICBib2R5OiB0aGlzLmJvZHkgYXMgQm9keUluaXQsXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIChDcmVkZW50aWFscyBhcmUgbm90IHN1cHBvcnRlZCBvbiBOb2RlSlMpXG4gICAgICAgICAgICBjcmVkZW50aWFsczogdGhpcy5jcmVkZW50aWFscyxcbiAgICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlc3BvbnNlSGFuZGxlcihyZXNwb25zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBhd2FpdCB0aGlzLmVycm9yUmVzcG9uc2VIYW5kbGVyKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2xpZW50UmVzcG9uc2UpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7IC8vIERvbid0IGNhdGNoIGEgQ2xpZW50UmVzcG9uc2UgKHdlIHdhbnQgdGhpcyB0byB0cmlnZ2VyIHRoZSBjYXRjaCBvZiB0aGUgcHJvbWlzZVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2UpIHsgLy8gVHJ5IHRvIHJlY292ZXIgdGhlIHJlc3BvbnNlIHN0YXR1c1xuICAgICAgICBjbGllbnRSZXNwb25zZS5zdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgfVxuICAgICAgY2xpZW50UmVzcG9uc2UuZXhjZXB0aW9uID0gZXJyb3I7XG5cbiAgICAgIHRocm93IGNsaWVudFJlc3BvbnNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UXVlcnlTdHJpbmcoKSB7XG4gICAgbGV0IHF1ZXJ5U3RyaW5nID0gJyc7XG4gICAgY29uc3QgYXBwZW5kUGFyYW0gPSAoa2V5OiBzdHJpbmcsIHBhcmFtOiBzdHJpbmcpID0+IHtcbiAgICAgIHF1ZXJ5U3RyaW5nICs9IChxdWVyeVN0cmluZy5sZW5ndGggPT09IDApID8gJz8nIDogJyYnO1xuICAgICAgcXVlcnlTdHJpbmcgKz0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQocGFyYW0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5wYXJhbWV0ZXJzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGFyYW1ldGVyc1trZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2godmFsID0+IGFwcGVuZFBhcmFtKGtleSwgdmFsKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwcGVuZFBhcmFtKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gIH1cbn1cbiIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTksIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBJUkVTVENsaWVudCBmcm9tIFwiLi9JUkVTVENsaWVudFwiO1xuaW1wb3J0IERlZmF1bHRSRVNUQ2xpZW50IGZyb20gXCIuL0RlZmF1bHRSRVNUQ2xpZW50XCI7XG5pbXBvcnQgSVJFU1RDbGllbnRCdWlsZGVyIGZyb20gXCIuL0lSRVNUQ2xpZW50QnVpbGRlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIgaW1wbGVtZW50cyBJUkVTVENsaWVudEJ1aWxkZXIge1xuICBidWlsZDxSVCwgRVJUPihob3N0OiBzdHJpbmcpOiBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgcmV0dXJuIG5ldyBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPihob3N0KTtcbiAgfVxufVxuIiwiLypcbiogQ29weXJpZ2h0IChjKSAyMDE5LTIwMjUsIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbipcbiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbipcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IElSRVNUQ2xpZW50IGZyb20gXCIuL0lSRVNUQ2xpZW50XCJcbmltcG9ydCBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIgZnJvbSBcIi4vRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyXCI7XG5pbXBvcnQgSVJFU1RDbGllbnRCdWlsZGVyIGZyb20gXCIuL0lSRVNUQ2xpZW50QnVpbGRlclwiO1xuaW1wb3J0IENsaWVudFJlc3BvbnNlIGZyb20gXCIuL0NsaWVudFJlc3BvbnNlXCI7XG5pbXBvcnQge1JlcXVlc3RDcmVkZW50aWFsc30gZnJvbSBcIm5vZGUtZmV0Y2hcIjtcbmltcG9ydCB7VVJMU2VhcmNoUGFyYW1zfSBmcm9tIFwidXJsXCI7XG5cbmV4cG9ydCBjbGFzcyBGdXNpb25BdXRoQ2xpZW50IHtcbiAgcHVibGljIGNsaWVudEJ1aWxkZXI6IElSRVNUQ2xpZW50QnVpbGRlciA9IG5ldyBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIoKTtcbiAgcHVibGljIGNyZWRlbnRpYWxzOiBSZXF1ZXN0Q3JlZGVudGlhbHM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFwaUtleTogc3RyaW5nLFxuICAgIHB1YmxpYyBob3N0OiBzdHJpbmcsXG4gICAgcHVibGljIHRlbmFudElkPzogc3RyaW5nLFxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZW5hbnQgaWQsIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgWC1GdXNpb25BdXRoLVRlbmFudElkIGhlYWRlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSB0ZW5hbnRJZCBUaGUgdmFsdWUgb2YgdGhlIFgtRnVzaW9uQXV0aC1UZW5hbnRJZCBoZWFkZXIuXG4gICAqIEByZXR1cm5zIHtGdXNpb25BdXRoQ2xpZW50fVxuICAgKi9cbiAgc2V0VGVuYW50SWQodGVuYW50SWQ6IHN0cmluZyB8IG51bGwpOiBGdXNpb25BdXRoQ2xpZW50IHtcbiAgICB0aGlzLnRlbmFudElkID0gdGVuYW50SWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB3aGV0aGVyIGFuZCBob3cgY29va2llcyB3aWxsIGJlIHNlbnQgd2l0aCBlYWNoIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBhbmQgaG93IGNvb2tpZXMgd2lsbCBiZSBzZW50LlxuICAgKiBAcmV0dXJucyB7RnVzaW9uQXV0aENsaWVudH1cbiAgICovXG4gIHNldFJlcXVlc3RDcmVkZW50aWFscyh2YWx1ZTogUmVxdWVzdENyZWRlbnRpYWxzKTogRnVzaW9uQXV0aENsaWVudCB7XG4gICAgdGhpcy5jcmVkZW50aWFscyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGFuIGFjdGlvbiBvbiBhIHVzZXIuIFRoZSB1c2VyIGJlaW5nIGFjdGlvbmVkIGlzIGNhbGxlZCB0aGUgXCJhY3Rpb25lZVwiIGFuZCB0aGUgdXNlciB0YWtpbmcgdGhlIGFjdGlvbiBpcyBjYWxsZWQgdGhlXG4gICAqIFwiYWN0aW9uZXJcIi4gQm90aCB1c2VyIGlkcyBhcmUgcmVxdWlyZWQgaW4gdGhlIHJlcXVlc3Qgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge0FjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIGFjdGlvbiByZXF1ZXN0IHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWN0aW9uIGJlaW5nIHRha2VuIGluY2x1ZGluZ1xuICAgKiAgICB0aGUgSWQgb2YgdGhlIGFjdGlvbiwgYW55IG9wdGlvbnMgYW5kIHRoZSBkdXJhdGlvbiAoaWYgYXBwbGljYWJsZSkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBhY3Rpb25Vc2VyKHJlcXVlc3Q6IEFjdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZXMgdGhlIEZ1c2lvbkF1dGggUmVhY3RvciB1c2luZyBhIGxpY2Vuc2UgSWQgYW5kIG9wdGlvbmFsbHkgYSBsaWNlbnNlIHRleHQgKGZvciBhaXItZ2FwcGVkIGRlcGxveW1lbnRzKVxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0b3JSZXF1ZXN0fSByZXF1ZXN0IEFuIG9wdGlvbmFsIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgbGljZW5zZSB0ZXh0IHRvIGFjdGl2YXRlIFJlYWN0b3IgKHVzZWZ1bCBmb3IgYWlyLWdhcCBkZXBsb3ltZW50cyBvZiBGdXNpb25BdXRoKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgYWN0aXZhdGVSZWFjdG9yKHJlcXVlc3Q6IFJlYWN0b3JSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZWFjdG9yJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHVzZXIgdG8gYW4gZXhpc3RpbmcgZmFtaWx5LiBUaGUgZmFtaWx5IElkIG11c3QgYmUgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIFRoZSBJZCBvZiB0aGUgZmFtaWx5LlxuICAgKiBAcGFyYW0ge0ZhbWlseVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGRldGVybWluZSB3aGljaCB1c2VyIHRvIGFkZCB0byB0aGUgZmFtaWx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+fVxuICAgKi9cbiAgYWRkVXNlclRvRmFtaWx5KGZhbWlseUlkOiBVVUlELCByZXF1ZXN0OiBGYW1pbHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGYW1pbHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZhbWlseUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcHJvdmUgYSBkZXZpY2UgZ3JhbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIHdpbGwgYmUgcmVxdWlyZWQgaWYgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiBUaGUgYWNjZXNzIHRva2VuIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxEZXZpY2VBcHByb3ZhbFJlc3BvbnNlPj59XG4gICAqL1xuICBhcHByb3ZlRGV2aWNlKGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIHVzZXJfY29kZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxEZXZpY2VBcHByb3ZhbFJlc3BvbnNlPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgndG9rZW4nLCB0b2tlbik7XG4gICAgYm9keS5hcHBlbmQoJ3VzZXJfY29kZScsIHVzZXJfY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RGV2aWNlQXBwcm92YWxSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2RldmljZS9hcHByb3ZlJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQXBwcm92ZSBhIGRldmljZSBncmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtEZXZpY2VBcHByb3ZhbFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRldmljZSBhcHByb3ZhbCBpbmZvcm1hdGlvbiBhbmQgb3B0aW9uYWwgdGVuYW50SWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPERldmljZUFwcHJvdmFsUmVzcG9uc2U+Pn1cbiAgICovXG4gIGFwcHJvdmVEZXZpY2VXaXRoUmVxdWVzdChyZXF1ZXN0OiBEZXZpY2VBcHByb3ZhbFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPERldmljZUFwcHJvdmFsUmVzcG9uc2U+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBpZiAocmVxdWVzdC5jbGllbnRfaWQgIT09IG51bGwgJiYgcmVxdWVzdC5jbGllbnRfaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIHJlcXVlc3QuY2xpZW50X2lkKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QuY2xpZW50X3NlY3JldCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNsaWVudF9zZWNyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCByZXF1ZXN0LmNsaWVudF9zZWNyZXQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC50ZW5hbnRJZCAhPT0gbnVsbCAmJiByZXF1ZXN0LnRlbmFudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd0ZW5hbnRJZCcsIHJlcXVlc3QudGVuYW50SWQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnRva2VuICE9PSBudWxsICYmIHJlcXVlc3QudG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3Rva2VuJywgcmVxdWVzdC50b2tlbik7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnVzZXJfY29kZSAhPT0gbnVsbCAmJiByZXF1ZXN0LnVzZXJfY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgcmVxdWVzdC51c2VyX2NvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFydDxEZXZpY2VBcHByb3ZhbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvZGV2aWNlL2FwcHJvdmUnKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIHRoZSB1c2VyIGFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhY3Rpb25JZCBUaGUgYWN0aW9uIElkIG9mIHRoZSBhY3Rpb24gdG8gY2FuY2VsLlxuICAgKiBAcGFyYW0ge0FjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIGFjdGlvbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYW5jZWxsYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBjYW5jZWxBY3Rpb24oYWN0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEFjdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYWN0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyBhIHVzZXIncyBwYXNzd29yZCB1c2luZyB0aGUgY2hhbmdlIHBhc3N3b3JkIElkLiBUaGlzIHVzdWFsbHkgb2NjdXJzIGFmdGVyIGFuIGVtYWlsIGhhcyBiZWVuIHNlbnQgdG8gdGhlIHVzZXJcbiAgICogYW5kIHRoZXkgY2xpY2tlZCBvbiBhIGxpbmsgdG8gcmVzZXQgdGhlaXIgcGFzc3dvcmQuXG4gICAqIFxuICAgKiBBcyBvZiB2ZXJzaW9uIDEuMzIuMiwgcHJlZmVyIHNlbmRpbmcgdGhlIGNoYW5nZVBhc3N3b3JkSWQgaW4gdGhlIHJlcXVlc3QgYm9keS4gVG8gZG8gdGhpcywgb21pdCB0aGUgZmlyc3QgcGFyYW1ldGVyLCBhbmQgc2V0XG4gICAqIHRoZSB2YWx1ZSBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgY2hhbmdlIHBhc3N3b3JkIElkIHVzZWQgdG8gZmluZCB0aGUgdXNlci4gVGhpcyB2YWx1ZSBpcyBnZW5lcmF0ZWQgYnkgRnVzaW9uQXV0aCBvbmNlIHRoZSBjaGFuZ2UgcGFzc3dvcmQgd29ya2Zsb3cgaGFzIGJlZW4gaW5pdGlhdGVkLlxuICAgKiBAcGFyYW0ge0NoYW5nZVBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZT4+fVxuICAgKi9cbiAgY2hhbmdlUGFzc3dvcmQoY2hhbmdlUGFzc3dvcmRJZDogc3RyaW5nLCByZXF1ZXN0OiBDaGFuZ2VQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENoYW5nZVBhc3N3b3JkUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNoYW5nZVBhc3N3b3JkSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgYSB1c2VyJ3MgcGFzc3dvcmQgdXNpbmcgdGhlaXIgYWNjZXNzIHRva2VuIChKV1QpIGluc3RlYWQgb2YgdGhlIGNoYW5nZVBhc3N3b3JkSWRcbiAgICogQSBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgbWV0aG9kIHdpbGwgYmUgaWYgeW91IHdhbnQgdG8gYWxsb3cgdGhlIHVzZXIgdG8gY2hhbmdlIHRoZWlyIG93biBwYXNzd29yZC5cbiAgICogXG4gICAqIFJlbWVtYmVyIHRvIHNlbmQgcmVmcmVzaFRva2VuIGluIHRoZSByZXF1ZXN0IGJvZHkgaWYgeW91IHdhbnQgdG8gZ2V0IGEgbmV3IHJlZnJlc2ggdG9rZW4gd2hlbiBsb2dpbiB1c2luZyB0aGUgcmV0dXJuZWQgb25lVGltZVBhc3N3b3JkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEBwYXJhbSB7Q2hhbmdlUGFzc3dvcmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gY2hhbmdlUGFzc3dvcmRVc2luZ0pXVCwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBjaGFuZ2VQYXNzd29yZEJ5SldUKGVuY29kZWRKV1Q6IHN0cmluZywgcmVxdWVzdDogQ2hhbmdlUGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPENoYW5nZVBhc3N3b3JkUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIGEgdXNlcidzIHBhc3N3b3JkIHVzaW5nIHRoZWlyIGlkZW50aXR5IChsb2dpbklkIGFuZCBwYXNzd29yZCkuIFVzaW5nIGEgbG9naW5JZCBpbnN0ZWFkIG9mIHRoZSBjaGFuZ2VQYXNzd29yZElkXG4gICAqIGJ5cGFzc2VzIHRoZSBlbWFpbCB2ZXJpZmljYXRpb24gYW5kIGFsbG93cyBhIHBhc3N3b3JkIHRvIGJlIGNoYW5nZWQgZGlyZWN0bHkgd2l0aG91dCBmaXJzdCBjYWxsaW5nIHRoZSAjZm9yZ290UGFzc3dvcmRcbiAgICogbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0ge0NoYW5nZVBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hhbmdlUGFzc3dvcmRCeUlkZW50aXR5KHJlcXVlc3Q6IENoYW5nZVBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIGEgdXNlcidzIHBhc3N3b3JkIHVzaW5nIHRoZWlyIGFjY2VzcyB0b2tlbiAoSldUKSBpbnN0ZWFkIG9mIHRoZSBjaGFuZ2VQYXNzd29yZElkXG4gICAqIEEgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIG1ldGhvZCB3aWxsIGJlIGlmIHlvdSB3YW50IHRvIGFsbG93IHRoZSB1c2VyIHRvIGNoYW5nZSB0aGVpciBvd24gcGFzc3dvcmQuXG4gICAqIFxuICAgKiBSZW1lbWJlciB0byBzZW5kIHJlZnJlc2hUb2tlbiBpbiB0aGUgcmVxdWVzdCBib2R5IGlmIHlvdSB3YW50IHRvIGdldCBhIG5ldyByZWZyZXNoIHRva2VuIHdoZW4gbG9naW4gdXNpbmcgdGhlIHJldHVybmVkIG9uZVRpbWVQYXNzd29yZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcGFyYW0ge0NoYW5nZVBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZT4+fVxuICAgKi9cbiAgY2hhbmdlUGFzc3dvcmRVc2luZ0pXVChlbmNvZGVkSldUOiBzdHJpbmcsIHJlcXVlc3Q6IENoYW5nZVBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIG11c3Qgb2J0YWluIGEgVHJ1c3QgVG9rZW4gSWQgaW4gb3JkZXIgdG8gY29tcGxldGUgYSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdC5cbiAgICogV2hlbiBhIHVzZXIgaGFzIGVuYWJsZWQgVHdvLUZhY3RvciBhdXRoZW50aWNhdGlvbiwgYmVmb3JlIHlvdSBhcmUgYWxsb3dlZCB0byB1c2UgdGhlIENoYW5nZSBQYXNzd29yZCBBUEkgdG8gY2hhbmdlXG4gICAqIHlvdXIgcGFzc3dvcmQsIHlvdSBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIGJ5IGNvbXBsZXRpbmcgYSBUd28tRmFjdG9yIFN0ZXAtVXAgYXV0aGVudGljYXRpb24uXG4gICAqIFxuICAgKiBBbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQwMCB3aXRoIGEgZ2VuZXJhbCBlcnJvciBjb2RlIG9mIFtUcnVzdFRva2VuUmVxdWlyZWRdIGluZGljYXRlcyB0aGF0IGEgVHJ1c3QgVG9rZW4gaXMgcmVxdWlyZWQgdG8gbWFrZSBhIFBPU1QgcmVxdWVzdCB0byB0aGlzIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5nZVBhc3N3b3JkSWQgVGhlIGNoYW5nZSBwYXNzd29yZCBJZCB1c2VkIHRvIGZpbmQgdGhlIHVzZXIuIFRoaXMgdmFsdWUgaXMgZ2VuZXJhdGVkIGJ5IEZ1c2lvbkF1dGggb25jZSB0aGUgY2hhbmdlIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nSWQoY2hhbmdlUGFzc3dvcmRJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjaGFuZ2VQYXNzd29yZElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgVG9rZW4gYnkgY29tcGxldGluZyBhIFR3by1GYWN0b3IgU3RlcC1VcCBhdXRoZW50aWNhdGlvbi5cbiAgICogXG4gICAqIEFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDAwIHdpdGggYSBnZW5lcmFsIGVycm9yIGNvZGUgb2YgW1RydXN0VG9rZW5SZXF1aXJlZF0gaW5kaWNhdGVzIHRoYXQgYSBUcnVzdCBUb2tlbiBpcyByZXF1aXJlZCB0byBtYWtlIGEgUE9TVCByZXF1ZXN0IHRvIHRoaXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgY2hhbmdlIHBhc3N3b3JkIElkIHVzZWQgdG8gZmluZCB0aGUgdXNlci4gVGhpcyB2YWx1ZSBpcyBnZW5lcmF0ZWQgYnkgRnVzaW9uQXV0aCBvbmNlIHRoZSBjaGFuZ2UgcGFzc3dvcmQgd29ya2Zsb3cgaGFzIGJlZW4gaW5pdGlhdGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaXBBZGRyZXNzIChPcHRpb25hbCkgSVAgYWRkcmVzcyBvZiB0aGUgdXNlciBjaGFuZ2luZyB0aGVpciBwYXNzd29yZC4gVGhpcyBpcyB1c2VkIGZvciBNRkEgcmlzayBhc3Nlc3NtZW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGVja0NoYW5nZVBhc3N3b3JkVXNpbmdJZEFuZElQQWRkcmVzcyhjaGFuZ2VQYXNzd29yZElkOiBzdHJpbmcsIGlwQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjaGFuZ2VQYXNzd29yZElkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaXBBZGRyZXNzJywgaXBBZGRyZXNzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgVG9rZW4gYnkgY29tcGxldGluZyBhIFR3by1GYWN0b3IgU3RlcC1VcCBhdXRoZW50aWNhdGlvbi5cbiAgICogXG4gICAqIEFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDAwIHdpdGggYSBnZW5lcmFsIGVycm9yIGNvZGUgb2YgW1RydXN0VG9rZW5SZXF1aXJlZF0gaW5kaWNhdGVzIHRoYXQgYSBUcnVzdCBUb2tlbiBpcyByZXF1aXJlZCB0byBtYWtlIGEgUE9TVCByZXF1ZXN0IHRvIHRoaXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNoZWNrQ2hhbmdlUGFzc3dvcmRVc2luZ0pXVChlbmNvZGVkSldUOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIElkIGluIG9yZGVyIHRvIGNvbXBsZXRlIGEgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QuXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBlbmFibGVkIFR3by1GYWN0b3IgYXV0aGVudGljYXRpb24sIGJlZm9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBDaGFuZ2UgUGFzc3dvcmQgQVBJIHRvIGNoYW5nZVxuICAgKiB5b3VyIHBhc3N3b3JkLCB5b3UgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlwQWRkcmVzcyAoT3B0aW9uYWwpIElQIGFkZHJlc3Mgb2YgdGhlIHVzZXIgY2hhbmdpbmcgdGhlaXIgcGFzc3dvcmQuIFRoaXMgaXMgdXNlZCBmb3IgTUZBIHJpc2sgYXNzZXNzbWVudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nSldUQW5kSVBBZGRyZXNzKGVuY29kZWRKV1Q6IHN0cmluZywgaXBBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpcEFkZHJlc3MnLCBpcEFkZHJlc3MpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBtdXN0IG9idGFpbiBhIFRydXN0IFJlcXVlc3QgSWQgaW4gb3JkZXIgdG8gY29tcGxldGUgYSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdC5cbiAgICogV2hlbiBhIHVzZXIgaGFzIGVuYWJsZWQgVHdvLUZhY3RvciBhdXRoZW50aWNhdGlvbiwgYmVmb3JlIHlvdSBhcmUgYWxsb3dlZCB0byB1c2UgdGhlIENoYW5nZSBQYXNzd29yZCBBUEkgdG8gY2hhbmdlXG4gICAqIHlvdXIgcGFzc3dvcmQsIHlvdSBtdXN0IG9idGFpbiBhIFRydXN0IFJlcXVlc3QgSWQgYnkgY29tcGxldGluZyBhIFR3by1GYWN0b3IgU3RlcC1VcCBhdXRoZW50aWNhdGlvbi5cbiAgICogXG4gICAqIEFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDAwIHdpdGggYSBnZW5lcmFsIGVycm9yIGNvZGUgb2YgW1RydXN0VG9rZW5SZXF1aXJlZF0gaW5kaWNhdGVzIHRoYXQgYSBUcnVzdCBUb2tlbiBpcyByZXF1aXJlZCB0byBtYWtlIGEgUE9TVCByZXF1ZXN0IHRvIHRoaXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9naW5JZCBUaGUgbG9naW5JZCAoZW1haWwgb3IgdXNlcm5hbWUpIG9mIHRoZSBVc2VyIHRoYXQgeW91IGludGVuZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nTG9naW5JZChsb2dpbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWQnLCBsb2dpbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgbXVzdCBvYnRhaW4gYSBUcnVzdCBSZXF1ZXN0IElkIGluIG9yZGVyIHRvIGNvbXBsZXRlIGEgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QuXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBlbmFibGVkIFR3by1GYWN0b3IgYXV0aGVudGljYXRpb24sIGJlZm9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBDaGFuZ2UgUGFzc3dvcmQgQVBJIHRvIGNoYW5nZVxuICAgKiB5b3VyIHBhc3N3b3JkLCB5b3UgbXVzdCBvYnRhaW4gYSBUcnVzdCBSZXF1ZXN0IElkIGJ5IGNvbXBsZXRpbmcgYSBUd28tRmFjdG9yIFN0ZXAtVXAgYXV0aGVudGljYXRpb24uXG4gICAqIFxuICAgKiBBbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQwMCB3aXRoIGEgZ2VuZXJhbCBlcnJvciBjb2RlIG9mIFtUcnVzdFRva2VuUmVxdWlyZWRdIGluZGljYXRlcyB0aGF0IGEgVHJ1c3QgVG9rZW4gaXMgcmVxdWlyZWQgdG8gbWFrZSBhIFBPU1QgcmVxdWVzdCB0byB0aGlzIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2luSWQgVGhlIGxvZ2luSWQgKGVtYWlsIG9yIHVzZXJuYW1lKSBvZiB0aGUgVXNlciB0aGF0IHlvdSBpbnRlbmQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZCBmb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpcEFkZHJlc3MgKE9wdGlvbmFsKSBJUCBhZGRyZXNzIG9mIHRoZSB1c2VyIGNoYW5naW5nIHRoZWlyIHBhc3N3b3JkLiBUaGlzIGlzIHVzZWQgZm9yIE1GQSByaXNrIGFzc2Vzc21lbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNoZWNrQ2hhbmdlUGFzc3dvcmRVc2luZ0xvZ2luSWRBbmRJUEFkZHJlc3MobG9naW5JZDogc3RyaW5nLCBpcEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbG9naW5JZCcsIGxvZ2luSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpcEFkZHJlc3MnLCBpcEFkZHJlc3MpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBtdXN0IG9idGFpbiBhIFRydXN0IFJlcXVlc3QgSWQgaW4gb3JkZXIgdG8gY29tcGxldGUgYSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdC5cbiAgICogV2hlbiBhIHVzZXIgaGFzIGVuYWJsZWQgVHdvLUZhY3RvciBhdXRoZW50aWNhdGlvbiwgYmVmb3JlIHlvdSBhcmUgYWxsb3dlZCB0byB1c2UgdGhlIENoYW5nZSBQYXNzd29yZCBBUEkgdG8gY2hhbmdlXG4gICAqIHlvdXIgcGFzc3dvcmQsIHlvdSBtdXN0IG9idGFpbiBhIFRydXN0IFJlcXVlc3QgSWQgYnkgY29tcGxldGluZyBhIFR3by1GYWN0b3IgU3RlcC1VcCBhdXRoZW50aWNhdGlvbi5cbiAgICogXG4gICAqIEFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDAwIHdpdGggYSBnZW5lcmFsIGVycm9yIGNvZGUgb2YgW1RydXN0VG9rZW5SZXF1aXJlZF0gaW5kaWNhdGVzIHRoYXQgYSBUcnVzdCBUb2tlbiBpcyByZXF1aXJlZCB0byBtYWtlIGEgUE9TVCByZXF1ZXN0IHRvIHRoaXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9naW5JZCBUaGUgbG9naW5JZCBvZiB0aGUgVXNlciB0aGF0IHlvdSBpbnRlbmQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZCBmb3IuXG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nPn0gbG9naW5JZFR5cGVzIFRoZSBpZGVudGl0eSB0eXBlcyB0aGF0IEZ1c2lvbkF1dGggd2lsbCBjb21wYXJlIHRoZSBsb2dpbklkIHRvLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGVja0NoYW5nZVBhc3N3b3JkVXNpbmdMb2dpbklkQW5kTG9naW5JZFR5cGVzKGxvZ2luSWQ6IHN0cmluZywgbG9naW5JZFR5cGVzOiBBcnJheTxTdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWRUeXBlcycsIGxvZ2luSWRUeXBlcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBsb2dpbklkIG9mIHRoZSBVc2VyIHRoYXQgeW91IGludGVuZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkIGZvci5cbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmc+fSBsb2dpbklkVHlwZXMgVGhlIGlkZW50aXR5IHR5cGVzIHRoYXQgRnVzaW9uQXV0aCB3aWxsIGNvbXBhcmUgdGhlIGxvZ2luSWQgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpcEFkZHJlc3MgKE9wdGlvbmFsKSBJUCBhZGRyZXNzIG9mIHRoZSB1c2VyIGNoYW5naW5nIHRoZWlyIHBhc3N3b3JkLiBUaGlzIGlzIHVzZWQgZm9yIE1GQSByaXNrIGFzc2Vzc21lbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNoZWNrQ2hhbmdlUGFzc3dvcmRVc2luZ0xvZ2luSWRBbmRMb2dpbklkVHlwZXNBbmRJUEFkZHJlc3MobG9naW5JZDogc3RyaW5nLCBsb2dpbklkVHlwZXM6IEFycmF5PFN0cmluZz4sIGlwQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWRUeXBlcycsIGxvZ2luSWRUeXBlcylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lwQWRkcmVzcycsIGlwQWRkcmVzcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIENsaWVudCBDcmVkZW50aWFscyBncmFudCByZXF1ZXN0IHRvIG9idGFpbiBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEVudGl0eSBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLlxuICAgKiAgICBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIEJhc2ljIEF1dGhvcml6YXRpb24gaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0IHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiBCYXNpYyBBdXRob3JpemF0aW9uIGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlIChPcHRpb25hbCkgVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGljaCB0YXJnZXQgZW50aXR5IHlvdSBhcmUgcmVxdWVzdGluZyBhY2Nlc3MuIFRvIHJlcXVlc3QgYWNjZXNzIHRvIGFuIGVudGl0eSwgdXNlIHRoZSBmb3JtYXQgdGFyZ2V0LWVudGl0eTombHQ7dGFyZ2V0LWVudGl0eS1pZCZndDs6Jmx0O3JvbGVzJmd0Oy4gUm9sZXMgYXJlIGFuIG9wdGlvbmFsIGNvbW1hIHNlcGFyYXRlZCBsaXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgY2xpZW50Q3JlZGVudGlhbHNHcmFudChjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCBzY29wZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAnY2xpZW50X2NyZWRlbnRpYWxzJyk7XG4gICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgc2NvcGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIENsaWVudCBDcmVkZW50aWFscyBncmFudCByZXF1ZXN0IHRvIG9idGFpbiBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7Q2xpZW50Q3JlZGVudGlhbHNHcmFudFJlcXVlc3R9IHJlcXVlc3QgVGhlIGNsaWVudCBjcmVkZW50aWFscyBncmFudCByZXF1ZXN0IGNvbnRhaW5pbmcgY2xpZW50IGF1dGhlbnRpY2F0aW9uLCBzY29wZSBhbmQgb3B0aW9uYWwgdGVuYW50SWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBjbGllbnRDcmVkZW50aWFsc0dyYW50V2l0aFJlcXVlc3QocmVxdWVzdDogQ2xpZW50Q3JlZGVudGlhbHNHcmFudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50X2lkICE9PSBudWxsICYmIHJlcXVlc3QuY2xpZW50X2lkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCByZXF1ZXN0LmNsaWVudF9pZCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LmNsaWVudF9zZWNyZXQgIT09IG51bGwgJiYgcmVxdWVzdC5jbGllbnRfc2VjcmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgcmVxdWVzdC5jbGllbnRfc2VjcmV0KTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QuZ3JhbnRfdHlwZSAhPT0gbnVsbCAmJiByZXF1ZXN0LmdyYW50X3R5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCByZXF1ZXN0LmdyYW50X3R5cGUpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5zY29wZSAhPT0gbnVsbCAmJiByZXF1ZXN0LnNjb3BlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdzY29wZScsIHJlcXVlc3Quc2NvcGUpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC50ZW5hbnRJZCAhPT0gbnVsbCAmJiByZXF1ZXN0LnRlbmFudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd0ZW5hbnRJZCcsIHJlcXVlc3QudGVuYW50SWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb21tZW50IHRvIHRoZSB1c2VyJ3MgYWNjb3VudC5cbiAgICpcbiAgICogQHBhcmFtIHtVc2VyQ29tbWVudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdXNlciBjb21tZW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29tbWVudFJlc3BvbnNlPj59XG4gICAqL1xuICBjb21tZW50T25Vc2VyKHJlcXVlc3Q6IFVzZXJDb21tZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbW1lbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29tbWVudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb21tZW50JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGVzIHZlcmlmaWNhdGlvbiBvZiBhbiBpZGVudGl0eSB1c2luZyB2ZXJpZmljYXRpb24gY29kZXMgZnJvbSB0aGUgVmVyaWZ5IFN0YXJ0IEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlDb21wbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIGlkZW50aXR5IHZlcmlmeSBjb21wbGV0ZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHZlcmlmeSB0aGUgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUNvbXBsZXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNvbXBsZXRlVmVyaWZ5SWRlbnRpdHkocmVxdWVzdDogVmVyaWZ5Q29tcGxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlDb21wbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeUNvbXBsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS92ZXJpZnkvY29tcGxldGUnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255IGJ5IHZhbGlkYXRpbmcgdGhlIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBwcmV2aW91c2x5IGdlbmVyYXRlZCBjaGFsbGVuZ2Ugd2l0aG91dCBsb2dnaW5nIHRoZSB1c2VyIGluXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViQXV0aG5Mb2dpblJlcXVlc3R9IHJlcXVlc3QgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBuZWNlc3NhcnkgZm9yIGNvbXBsZXRpbmcgdGhlIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuQXNzZXJ0UmVzcG9uc2U+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+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSB1c2VycyB3aXRoIHRoZSBnaXZlbiBJZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdXNlcklkcyBUaGUgaWRzIG9mIHRoZSB1c2VycyB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBkZWFjdGl2YXRlVXNlcnNCeUlkcywgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBkZWFjdGl2YXRlVXNlcnModXNlcklkczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJEZWxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYnVsaycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWRzKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZHJ5UnVuJywgZmFsc2UpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgZmFsc2UpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSB1c2VycyB3aXRoIHRoZSBnaXZlbiBJZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdXNlcklkcyBUaGUgaWRzIG9mIHRoZSB1c2VycyB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+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+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIElkcywgb3IgdXNlcnMgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIEpTT04gcXVlcnkgb3IgcXVlcnlTdHJpbmcuXG4gICAqIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGlzIElkcywgcXVlcnkgYW5kIHRoZW4gcXVlcnlTdHJpbmcsIGl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgcHJvdmlkZSBvbmUgb2YgdGhlIHRocmVlIGZvciB0aGUgcmVxdWVzdC5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGRlYWN0aXZhdGUgb3IgcGVybWFuZW50bHkgZGVsZXRlIChoYXJkLWRlbGV0ZSkgdXNlcnMgYmFzZWQgdXBvbiB0aGUgaGFyZERlbGV0ZSBib29sZWFuIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqIFVzaW5nIHRoZSBkcnlSdW4gcGFyYW1ldGVyIHlvdSBtYXkgYWxzbyByZXF1ZXN0IHRoZSByZXN1bHQgb2YgdGhlIGFjdGlvbiB3aXRob3V0IGFjdHVhbGx5IGRlbGV0aW5nIG9yIGRlYWN0aXZhdGluZyBhbnkgdXNlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VXNlckRlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIFVzZXJEZWxldGVSZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBkZWxldGVVc2Vyc0J5UXVlcnksIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgZGVsZXRlVXNlcnMocmVxdWVzdDogVXNlckRlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyRGVsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2J1bGsnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIElkcywgb3IgdXNlcnMgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIEpTT04gcXVlcnkgb3IgcXVlcnlTdHJpbmcuXG4gICAqIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGlzIElkcywgcXVlcnkgYW5kIHRoZW4gcXVlcnlTdHJpbmcsIGl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgcHJvdmlkZSBvbmUgb2YgdGhlIHRocmVlIGZvciB0aGUgcmVxdWVzdC5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGRlYWN0aXZhdGUgb3IgcGVybWFuZW50bHkgZGVsZXRlIChoYXJkLWRlbGV0ZSkgdXNlcnMgYmFzZWQgdXBvbiB0aGUgaGFyZERlbGV0ZSBib29sZWFuIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqIFVzaW5nIHRoZSBkcnlSdW4gcGFyYW1ldGVyIHlvdSBtYXkgYWxzbyByZXF1ZXN0IHRoZSByZXN1bHQgb2YgdGhlIGFjdGlvbiB3aXRob3V0IGFjdHVhbGx5IGRlbGV0aW5nIG9yIGRlYWN0aXZhdGluZyBhbnkgdXNlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VXNlckRlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIFVzZXJEZWxldGVSZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJzQnlRdWVyeShyZXF1ZXN0OiBVc2VyRGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJEZWxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYnVsaycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgV2ViQXV0aG4gY3JlZGVudGlhbCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkIFRoZSBJZCBvZiB0aGUgV2ViQXV0aG4gY3JlZGVudGlhbCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVdlYkF1dGhuQ3JlZGVudGlhbChpZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHdlYmhvb2sgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB3ZWJob29rSWQgVGhlIElkIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlV2ViaG9vayh3ZWJob29rSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgRGV2aWNlIEF1dGhvcml6YXRpb24gZmxvdyB1c2luZyBmb3JtLWVuY29kZWQgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IChPcHRpb25hbCkgVGhlIGNsaWVudCBzZWNyZXQuIFRoaXMgdmFsdWUgbWF5IG9wdGlvbmFsbHkgYmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYm9keSBpbnN0ZWFkIG9mIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlIChPcHRpb25hbCkgQSBzcGFjZS1kZWxpbWl0ZWQgc3RyaW5nIG9mIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLiBEZWZhdWx0cyB0byBhbGwgc2NvcGVzIGNvbmZpZ3VyZWQgaW4gdGhlIEFwcGxpY2F0aW9uJ3MgT0F1dGggY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RGV2aWNlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGRldmljZUF1dGhvcml6ZShjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCBzY29wZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxEZXZpY2VSZXNwb25zZT4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgc2NvcGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPERldmljZVJlc3BvbnNlLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2RldmljZV9hdXRob3JpemUnKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgRGV2aWNlIEF1dGhvcml6YXRpb24gZmxvdyB1c2luZyBhIHJlcXVlc3QgYm9keVxuICAgKlxuICAgKiBAcGFyYW0ge0RldmljZUF1dGhvcml6YXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSBkZXZpY2UgYXV0aG9yaXphdGlvbiByZXF1ZXN0IGNvbnRhaW5pbmcgY2xpZW50IGF1dGhlbnRpY2F0aW9uLCBzY29wZSwgYW5kIG9wdGlvbmFsIGRldmljZSBtZXRhZGF0YS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RGV2aWNlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGRldmljZUF1dGhvcml6ZVdpdGhSZXF1ZXN0KHJlcXVlc3Q6IERldmljZUF1dGhvcml6YXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxEZXZpY2VSZXNwb25zZT4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGlmIChyZXF1ZXN0LmNsaWVudF9pZCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNsaWVudF9pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgcmVxdWVzdC5jbGllbnRfaWQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5jbGllbnRfc2VjcmV0ICE9PSBudWxsICYmIHJlcXVlc3QuY2xpZW50X3NlY3JldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIHJlcXVlc3QuY2xpZW50X3NlY3JldCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnNjb3BlICE9PSBudWxsICYmIHJlcXVlc3Quc2NvcGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgcmVxdWVzdC5zY29wZSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnRlbmFudElkICE9PSBudWxsICYmIHJlcXVlc3QudGVuYW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3RlbmFudElkJywgcmVxdWVzdC50ZW5hbnRJZC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8RGV2aWNlUmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvZGV2aWNlX2F1dGhvcml6ZScpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGUgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIFVzZXIgZm9yIHdoaWNoIHlvdSdyZSBkaXNhYmxpbmcgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZElkIFRoZSB0d28tZmFjdG9yIG1ldGhvZCBpZGVudGlmaWVyIHlvdSB3aXNoIHRvIGRpc2FibGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgVGhlIHR3by1mYWN0b3IgY29kZSB1c2VkIHZlcmlmeSB0aGUgdGhlIGNhbGxlciBrbm93cyB0aGUgdHdvLWZhY3RvciBzZWNyZXQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRpc2FibGVUd29GYWN0b3IodXNlcklkOiBVVUlELCBtZXRob2RJZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdHdvLWZhY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdtZXRob2RJZCcsIG1ldGhvZElkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignY29kZScsIGNvZGUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGUgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSB1c2VyIHVzaW5nIGEgSlNPTiBib2R5IHJhdGhlciB0aGFuIFVSTCBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIFVzZXIgZm9yIHdoaWNoIHlvdSdyZSBkaXNhYmxpbmcgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHBhcmFtIHtUd29GYWN0b3JEaXNhYmxlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBpbmZvcm1hdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBjb2RlIGFuZCBtZXRob2RJZCBhbG9uZyB3aXRoIGFueSBldmVudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGlzYWJsZVR3b0ZhY3RvcldpdGhSZXF1ZXN0KHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVHdvRmFjdG9yRGlzYWJsZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdHdvLWZhY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGVuYWJsZSB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclJlcXVlc3R9IHJlcXVlc3QgVGhlIHR3by1mYWN0b3IgZW5hYmxlIHJlcXVlc3QgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICBlbmFibGVUd29GYWN0b3IodXNlcklkOiBVVUlELCByZXF1ZXN0OiBUd29GYWN0b3JSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUd29GYWN0b3JSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdHdvLWZhY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlcyBhbiBPQXV0aCBhdXRob3JpemF0aW9uIGNvZGUgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICogTWFrZXMgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIGZyb20gdGhlIEF1dGhvcml6ZSBlbmRwb2ludCBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIG9uIHRoZSAvb2F1dGgyL2F1dGhvcml6ZSByZXNwb25zZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuXG4gICAqICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gQmFzaWMgQXV0aG9yaXphdGlvbiBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGlzIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IChPcHRpb25hbCkgVGhlIGNsaWVudCBzZWNyZXQuIFRoaXMgdmFsdWUgd2lsbCBiZSByZXF1aXJlZCBpZiBjbGllbnQgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZGlyZWN0X3VyaSBUaGUgVVJJIHRvIHJlZGlyZWN0IHRvIHVwb24gYSBzdWNjZXNzZnVsIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBleGNoYW5nZU9BdXRoQ29kZUZvckFjY2Vzc1Rva2VuKGNvZGU6IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgcmVkaXJlY3RfdXJpOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NvZGUnLCBjb2RlKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ2F1dGhvcml6YXRpb25fY29kZScpO1xuICAgIGJvZHkuYXBwZW5kKCdyZWRpcmVjdF91cmknLCByZWRpcmVjdF91cmkpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2VzIGFuIE9BdXRoIGF1dGhvcml6YXRpb24gY29kZSBhbmQgY29kZV92ZXJpZmllciBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKiBNYWtlcyBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgZnJvbSB0aGUgQXV0aG9yaXplIGVuZHBvaW50IGFuZCBhIGNvZGVfdmVyaWZpZXIgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgVGhlIGF1dGhvcml6YXRpb24gY29kZSByZXR1cm5lZCBvbiB0aGUgL29hdXRoMi9hdXRob3JpemUgcmVzcG9uc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBwcm92aWRlZC5cbiAgICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiBCYXNpYyBBdXRob3JpemF0aW9uIGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5IGluc3RlYWQgb2YgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVkaXJlY3RfdXJpIFRoZSBVUkkgdG8gcmVkaXJlY3QgdG8gdXBvbiBhIHN1Y2Nlc3NmdWwgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGVfdmVyaWZpZXIgVGhlIHJhbmRvbSBzdHJpbmcgZ2VuZXJhdGVkIHByZXZpb3VzbHkuIFdpbGwgYmUgY29tcGFyZWQgd2l0aCB0aGUgY29kZV9jaGFsbGVuZ2Ugc2VudCBwcmV2aW91c2x5LCB3aGljaCBhbGxvd3MgdGhlIE9BdXRoIHByb3ZpZGVyIHRvIGF1dGhlbnRpY2F0ZSB5b3VyIGFwcC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlT0F1dGhDb2RlRm9yQWNjZXNzVG9rZW5Vc2luZ1BLQ0UoY29kZTogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCByZWRpcmVjdF91cmk6IHN0cmluZywgY29kZV92ZXJpZmllcjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjb2RlJywgY29kZSk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsICdhdXRob3JpemF0aW9uX2NvZGUnKTtcbiAgICBib2R5LmFwcGVuZCgncmVkaXJlY3RfdXJpJywgcmVkaXJlY3RfdXJpKTtcbiAgICBib2R5LmFwcGVuZCgnY29kZV92ZXJpZmllcicsIGNvZGVfdmVyaWZpZXIpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2VzIGFuIE9BdXRoIGF1dGhvcml6YXRpb24gY29kZSBhbmQgY29kZV92ZXJpZmllciBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKiBNYWtlcyBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgZnJvbSB0aGUgQXV0aG9yaXplIGVuZHBvaW50IGFuZCBhIGNvZGVfdmVyaWZpZXIgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtPQXV0aENvZGVQS0NFQWNjZXNzVG9rZW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSBQS0NFIE9BdXRoIGNvZGUgYWNjZXNzIHRva2VuIGV4Y2hhbmdlIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBleGNoYW5nZU9BdXRoQ29kZUZvckFjY2Vzc1Rva2VuVXNpbmdQS0NFV2l0aFJlcXVlc3QocmVxdWVzdDogT0F1dGhDb2RlUEtDRUFjY2Vzc1Rva2VuUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBpZiAocmVxdWVzdC5jbGllbnRfaWQgIT09IG51bGwgJiYgcmVxdWVzdC5jbGllbnRfaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIHJlcXVlc3QuY2xpZW50X2lkKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QuY2xpZW50X3NlY3JldCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNsaWVudF9zZWNyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCByZXF1ZXN0LmNsaWVudF9zZWNyZXQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5jb2RlICE9PSBudWxsICYmIHJlcXVlc3QuY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnY29kZScsIHJlcXVlc3QuY29kZSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LmNvZGVfdmVyaWZpZXIgIT09IG51bGwgJiYgcmVxdWVzdC5jb2RlX3ZlcmlmaWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdjb2RlX3ZlcmlmaWVyJywgcmVxdWVzdC5jb2RlX3ZlcmlmaWVyKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QuZ3JhbnRfdHlwZSAhPT0gbnVsbCAmJiByZXF1ZXN0LmdyYW50X3R5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCByZXF1ZXN0LmdyYW50X3R5cGUpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdF91cmkgIT09IG51bGwgJiYgcmVxdWVzdC5yZWRpcmVjdF91cmkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3JlZGlyZWN0X3VyaScsIHJlcXVlc3QucmVkaXJlY3RfdXJpKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QudGVuYW50SWQgIT09IG51bGwgJiYgcmVxdWVzdC50ZW5hbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgndGVuYW50SWQnLCByZXF1ZXN0LnRlbmFudElkLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlcyBhbiBPQXV0aCBhdXRob3JpemF0aW9uIGNvZGUgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICogTWFrZXMgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIGZyb20gdGhlIEF1dGhvcml6ZSBlbmRwb2ludCBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge09BdXRoQ29kZUFjY2Vzc1Rva2VuUmVxdWVzdH0gcmVxdWVzdCBUaGUgT0F1dGggY29kZSBhY2Nlc3MgdG9rZW4gZXhjaGFuZ2UgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlT0F1dGhDb2RlRm9yQWNjZXNzVG9rZW5XaXRoUmVxdWVzdChyZXF1ZXN0OiBPQXV0aENvZGVBY2Nlc3NUb2tlblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50X2lkICE9PSBudWxsICYmIHJlcXVlc3QuY2xpZW50X2lkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCByZXF1ZXN0LmNsaWVudF9pZCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LmNsaWVudF9zZWNyZXQgIT09IG51bGwgJiYgcmVxdWVzdC5jbGllbnRfc2VjcmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgcmVxdWVzdC5jbGllbnRfc2VjcmV0KTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QuY29kZSAhPT0gbnVsbCAmJiByZXF1ZXN0LmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NvZGUnLCByZXF1ZXN0LmNvZGUpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5ncmFudF90eXBlICE9PSBudWxsICYmIHJlcXVlc3QuZ3JhbnRfdHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsIHJlcXVlc3QuZ3JhbnRfdHlwZSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0X3VyaSAhPT0gbnVsbCAmJiByZXF1ZXN0LnJlZGlyZWN0X3VyaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgncmVkaXJlY3RfdXJpJywgcmVxdWVzdC5yZWRpcmVjdF91cmkpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC50ZW5hbnRJZCAhPT0gbnVsbCAmJiByZXF1ZXN0LnRlbmFudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd0ZW5hbnRJZCcsIHJlcXVlc3QudGVuYW50SWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlIGEgUmVmcmVzaCBUb2tlbiBmb3IgYW4gQWNjZXNzIFRva2VuLlxuICAgKiBJZiB5b3Ugd2lsbCBiZSB1c2luZyB0aGUgUmVmcmVzaCBUb2tlbiBHcmFudCwgeW91IHdpbGwgbWFrZSBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSB1c2Vy4oCZcyByZWZyZXNoIHRva2VuIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZyZXNoX3Rva2VuIFRoZSByZWZyZXNoIHRva2VuIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gdXNlIHRvIGV4Y2hhbmdlIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBwcm92aWRlZC5cbiAgICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiBCYXNpYyBBdXRob3JpemF0aW9uIGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5IGluc3RlYWQgb2YgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKE9wdGlvbmFsKSBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgaWYgb21pdHRlZCwgdGhlIHNhbWUgc2NvcGUgcmVxdWVzdGVkIGR1cmluZyB0aGUgYXV0aG9yaXphdGlvbiByZXF1ZXN0IHdpbGwgYmUgdXNlZC4gSWYgcHJvdmlkZWQgdGhlIHNjb3BlcyBtdXN0IG1hdGNoIHRob3NlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIGluaXRpYWwgYXV0aG9yaXphdGlvbiByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIChPcHRpb25hbCkgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLiBUaGlzIGNvZGUgaXMgcmVxdWlyZWQgaWYgdXNpbmcgdGhpcyBlbmRwb2ludCB0byBhcHByb3ZlIHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlUmVmcmVzaFRva2VuRm9yQWNjZXNzVG9rZW4ocmVmcmVzaF90b2tlbjogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCBzY29wZTogc3RyaW5nLCB1c2VyX2NvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgncmVmcmVzaF90b2tlbicsIHJlZnJlc2hfdG9rZW4pO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAncmVmcmVzaF90b2tlbicpO1xuICAgIGJvZHkuYXBwZW5kKCdzY29wZScsIHNjb3BlKTtcbiAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgdXNlcl9jb2RlKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlIGEgUmVmcmVzaCBUb2tlbiBmb3IgYW4gQWNjZXNzIFRva2VuLlxuICAgKiBJZiB5b3Ugd2lsbCBiZSB1c2luZyB0aGUgUmVmcmVzaCBUb2tlbiBHcmFudCwgeW91IHdpbGwgbWFrZSBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSB1c2Vy4oCZcyByZWZyZXNoIHRva2VuIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7UmVmcmVzaFRva2VuQWNjZXNzVG9rZW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZWZyZXNoIHRva2VuIGFjY2VzcyB0b2tlbiBleGNoYW5nZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VSZWZyZXNoVG9rZW5Gb3JBY2Nlc3NUb2tlbldpdGhSZXF1ZXN0KHJlcXVlc3Q6IFJlZnJlc2hUb2tlbkFjY2Vzc1Rva2VuUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBpZiAocmVxdWVzdC5jbGllbnRfaWQgIT09IG51bGwgJiYgcmVxdWVzdC5jbGllbnRfaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIHJlcXVlc3QuY2xpZW50X2lkKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QuY2xpZW50X3NlY3JldCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNsaWVudF9zZWNyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCByZXF1ZXN0LmNsaWVudF9zZWNyZXQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5ncmFudF90eXBlICE9PSBudWxsICYmIHJlcXVlc3QuZ3JhbnRfdHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsIHJlcXVlc3QuZ3JhbnRfdHlwZSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnJlZnJlc2hfdG9rZW4gIT09IG51bGwgJiYgcmVxdWVzdC5yZWZyZXNoX3Rva2VuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdyZWZyZXNoX3Rva2VuJywgcmVxdWVzdC5yZWZyZXNoX3Rva2VuKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3Quc2NvcGUgIT09IG51bGwgJiYgcmVxdWVzdC5zY29wZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnc2NvcGUnLCByZXF1ZXN0LnNjb3BlKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QudGVuYW50SWQgIT09IG51bGwgJiYgcmVxdWVzdC50ZW5hbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgndGVuYW50SWQnLCByZXF1ZXN0LnRlbmFudElkLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC51c2VyX2NvZGUgIT09IG51bGwgJiYgcmVxdWVzdC51c2VyX2NvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3VzZXJfY29kZScsIHJlcXVlc3QudXNlcl9jb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBhIHJlZnJlc2ggdG9rZW4gZm9yIGEgbmV3IEpXVC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWZyZXNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVmcmVzaCByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RSZWZyZXNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIGV4Y2hhbmdlUmVmcmVzaFRva2VuRm9ySldUKHJlcXVlc3Q6IFJlZnJlc2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RSZWZyZXNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8SldUUmVmcmVzaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBVc2VyIENyZWRlbnRpYWxzIGZvciBhIFRva2VuLlxuICAgKiBJZiB5b3Ugd2lsbCBiZSB1c2luZyB0aGUgUmVzb3VyY2UgT3duZXIgUGFzc3dvcmQgQ3JlZGVudGlhbCBHcmFudCwgeW91IHdpbGwgbWFrZSBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSB1c2Vy4oCZcyBlbWFpbCBhbmQgcGFzc3dvcmQgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJuYW1lIFRoZSBsb2dpbiBpZGVudGlmaWVyIG9mIHRoZSB1c2VyLiBUaGUgbG9naW4gaWRlbnRpZmllciBjYW4gYmUgZWl0aGVyIHRoZSBlbWFpbCBvciB0aGUgdXNlcm5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCBUaGUgdXNlcuKAmXMgcGFzc3dvcmQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBwcm92aWRlZC5cbiAgICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiBCYXNpYyBBdXRob3JpemF0aW9uIGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5IGluc3RlYWQgb2YgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKE9wdGlvbmFsKSBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgaWYgb21pdHRlZCwgdGhlIHNhbWUgc2NvcGUgcmVxdWVzdGVkIGR1cmluZyB0aGUgYXV0aG9yaXphdGlvbiByZXF1ZXN0IHdpbGwgYmUgdXNlZC4gSWYgcHJvdmlkZWQgdGhlIHNjb3BlcyBtdXN0IG1hdGNoIHRob3NlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIGluaXRpYWwgYXV0aG9yaXphdGlvbiByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIChPcHRpb25hbCkgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLiBUaGlzIGNvZGUgaXMgcmVxdWlyZWQgaWYgdXNpbmcgdGhpcyBlbmRwb2ludCB0byBhcHByb3ZlIHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlVXNlckNyZWRlbnRpYWxzRm9yQWNjZXNzVG9rZW4odXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgc2NvcGU6IHN0cmluZywgdXNlcl9jb2RlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ3VzZXJuYW1lJywgdXNlcm5hbWUpO1xuICAgIGJvZHkuYXBwZW5kKCdwYXNzd29yZCcsIHBhc3N3b3JkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ3Bhc3N3b3JkJyk7XG4gICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgc2NvcGUpO1xuICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2UgVXNlciBDcmVkZW50aWFscyBmb3IgYSBUb2tlbi5cbiAgICogSWYgeW91IHdpbGwgYmUgdXNpbmcgdGhlIFJlc291cmNlIE93bmVyIFBhc3N3b3JkIENyZWRlbnRpYWwgR3JhbnQsIHlvdSB3aWxsIG1ha2UgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgdXNlcuKAmXMgZW1haWwgYW5kIHBhc3N3b3JkIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7VXNlckNyZWRlbnRpYWxzQWNjZXNzVG9rZW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSB1c2VyIGNyZWRlbnRpYWxzIGFjY2VzcyB0b2tlbiBleGNoYW5nZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VVc2VyQ3JlZGVudGlhbHNGb3JBY2Nlc3NUb2tlbldpdGhSZXF1ZXN0KHJlcXVlc3Q6IFVzZXJDcmVkZW50aWFsc0FjY2Vzc1Rva2VuUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBpZiAocmVxdWVzdC5jbGllbnRfaWQgIT09IG51bGwgJiYgcmVxdWVzdC5jbGllbnRfaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIHJlcXVlc3QuY2xpZW50X2lkKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QuY2xpZW50X3NlY3JldCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNsaWVudF9zZWNyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCByZXF1ZXN0LmNsaWVudF9zZWNyZXQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5ncmFudF90eXBlICE9PSBudWxsICYmIHJlcXVlc3QuZ3JhbnRfdHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsIHJlcXVlc3QuZ3JhbnRfdHlwZSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnBhc3N3b3JkICE9PSBudWxsICYmIHJlcXVlc3QucGFzc3dvcmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3Bhc3N3b3JkJywgcmVxdWVzdC5wYXNzd29yZCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnNjb3BlICE9PSBudWxsICYmIHJlcXVlc3Quc2NvcGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgcmVxdWVzdC5zY29wZSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnRlbmFudElkICE9PSBudWxsICYmIHJlcXVlc3QudGVuYW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3RlbmFudElkJywgcmVxdWVzdC50ZW5hbnRJZCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnVzZXJfY29kZSAhPT0gbnVsbCAmJiByZXF1ZXN0LnVzZXJfY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgcmVxdWVzdC51c2VyX2NvZGUpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC51c2VybmFtZSAhPT0gbnVsbCAmJiByZXF1ZXN0LnVzZXJuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd1c2VybmFtZScsIHJlcXVlc3QudXNlcm5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlZ2lucyB0aGUgZm9yZ290IHBhc3N3b3JkIHNlcXVlbmNlLCB3aGljaCBraWNrcyBvZmYgYW4gZW1haWwgdG8gdGhlIHVzZXIgc28gdGhhdCB0aGV5IGNhbiByZXNldCB0aGVpciBwYXNzd29yZC5cbiAgICpcbiAgICogQHBhcmFtIHtGb3Jnb3RQYXNzd29yZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXIgc28gdGhhdCB0aGV5IGNhbiBiZSBlbWFpbGVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3Jnb3RQYXNzd29yZFJlc3BvbnNlPj59XG4gICAqL1xuICBmb3Jnb3RQYXNzd29yZChyZXF1ZXN0OiBGb3Jnb3RQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcmdvdFBhc3N3b3JkUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9yZ290UGFzc3dvcmRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZm9yZ290LXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcgRW1haWwgVmVyaWZpY2F0aW9uIElkIHRvIGJlIHVzZWQgd2l0aCB0aGUgVmVyaWZ5IEVtYWlsIEFQSS4gVGhpcyBBUEkgd2lsbCBub3QgYXR0ZW1wdCB0byBzZW5kIGFuXG4gICAqIGVtYWlsIHRvIHRoZSBVc2VyLiBUaGlzIEFQSSBtYXkgYmUgdXNlZCB0byBjb2xsZWN0IHRoZSB2ZXJpZmljYXRpb25JZCBmb3IgdXNlIHdpdGggYSB0aGlyZCBwYXJ0eSBzeXN0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVFbWFpbFZlcmlmaWNhdGlvbklkKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyaWZ5RW1haWxSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc2VuZFZlcmlmeUVtYWlsJywgZmFsc2UpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IFJTQSBvciBFQyBrZXkgcGFpciBvciBhbiBITUFDIHNlY3JldC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGtleS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0tleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUga2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5L2dlbmVyYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG5ldyBBcHBsaWNhdGlvbiBSZWdpc3RyYXRpb24gVmVyaWZpY2F0aW9uIElkIHRvIGJlIHVzZWQgd2l0aCB0aGUgVmVyaWZ5IFJlZ2lzdHJhdGlvbiBBUEkuIFRoaXMgQVBJIHdpbGwgbm90IGF0dGVtcHQgdG8gc2VuZCBhblxuICAgKiBlbWFpbCB0byB0aGUgVXNlci4gVGhpcyBBUEkgbWF5IGJlIHVzZWQgdG8gY29sbGVjdCB0aGUgdmVyaWZpY2F0aW9uSWQgZm9yIHVzZSB3aXRoIGEgdGhpcmQgcGFydHkgc3lzdGVtLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWwgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIgdGhhdCBuZWVkcyBhIG5ldyB2ZXJpZmljYXRpb24gZW1haWwuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHZlcmlmaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVSZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZChlbWFpbDogc3RyaW5nLCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3NlbmRWZXJpZnlQYXNzd29yZEVtYWlsJywgZmFsc2UpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdHdvLWZhY3RvciByZWNvdmVyeSBjb2RlcyBmb3IgYSB1c2VyLiBHZW5lcmF0aW5nIHR3by1mYWN0b3IgcmVjb3ZlcnkgY29kZXMgd2lsbCBpbnZhbGlkYXRlIGFueSBleGlzdGluZyByZWNvdmVyeSBjb2Rlcy4gXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBnZW5lcmF0ZSBuZXcgVHdvIEZhY3RvciByZWNvdmVyeSBjb2Rlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlVHdvRmFjdG9yUmVjb3ZlcnlDb2Rlcyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yL3JlY292ZXJ5LWNvZGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBUd28gRmFjdG9yIHNlY3JldCB0aGF0IGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIFVzZXIuIFRoZSByZXNwb25zZSB3aWxsIGNvbnRhaW5cbiAgICogYm90aCB0aGUgc2VjcmV0IGFuZCBhIEJhc2UzMiBlbmNvZGVkIGZvcm0gb2YgdGhlIHNlY3JldCB3aGljaCBjYW4gYmUgc2hvd24gdG8gYSBVc2VyIHdoZW4gdXNpbmcgYSAyIFN0ZXAgQXV0aGVudGljYXRpb25cbiAgICogYXBwbGljYXRpb24gc3VjaCBhcyBHb29nbGUgQXV0aGVudGljYXRvci5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VjcmV0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlVHdvRmFjdG9yU2VjcmV0KCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VjcmV0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VjcmV0UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZWNyZXQnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIFR3byBGYWN0b3Igc2VjcmV0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgVXNlci4gVGhlIHJlc3BvbnNlIHdpbGwgY29udGFpblxuICAgKiBib3RoIHRoZSBzZWNyZXQgYW5kIGEgQmFzZTMyIGVuY29kZWQgZm9ybSBvZiB0aGUgc2VjcmV0IHdoaWNoIGNhbiBiZSBzaG93biB0byBhIFVzZXIgd2hlbiB1c2luZyBhIDIgU3RlcCBBdXRoZW50aWNhdGlvblxuICAgKiBhcHBsaWNhdGlvbiBzdWNoIGFzIEdvb2dsZSBBdXRoZW50aWNhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlY3JldFJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZVR3b0ZhY3RvclNlY3JldFVzaW5nSldUKGVuY29kZWRKV1Q6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VjcmV0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8U2VjcmV0UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZWNyZXQnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBsb2dpbiB2aWEgdGhpcmQtcGFydGllcyBpbmNsdWRpbmcgU29jaWFsIGxvZ2luLCBleHRlcm5hbCBPQXV0aCBhbmQgT3BlbklEIENvbm5lY3QsIGFuZCBvdGhlclxuICAgKiBsb2dpbiBzeXN0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIHRoaXJkLXBhcnR5IGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0aGlyZC1wYXJ0eSBsb2dpblxuICAgKiAgICBwcm92aWRlcnMgdGhhdCBGdXNpb25BdXRoIHVzZXMgdG8gcmVjb25jaWxlIHRoZSB1c2VyJ3MgYWNjb3VudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgaWRlbnRpdHlQcm92aWRlckxvZ2luKHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJMb2dpblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIFJTQSBvciBFQyBrZXkgcGFpciBvciBhbiBITUFDIHNlY3JldC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGtleS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0tleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUga2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgaW1wb3J0S2V5KGtleUlkOiBVVUlELCByZXF1ZXN0OiBLZXlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleS9pbXBvcnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1bGsgaW1wb3J0cyByZWZyZXNoIHRva2Vucy4gVGhpcyByZXF1ZXN0IHBlcmZvcm1zIG1pbmltYWwgdmFsaWRhdGlvbiBhbmQgcnVucyBiYXRjaCBpbnNlcnRzIG9mIHJlZnJlc2ggdG9rZW5zIHdpdGggdGhlXG4gICAqIGV4cGVjdGF0aW9uIHRoYXQgZWFjaCB0b2tlbiByZXByZXNlbnRzIGEgdXNlciB0aGF0IGFscmVhZHkgZXhpc3RzIGFuZCBpcyByZWdpc3RlcmVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBGdXNpb25BdXRoXG4gICAqIEFwcGxpY2F0aW9uLiBUaGlzIGlzIGRvbmUgdG8gaW5jcmVhc2VzIHRoZSBpbnNlcnQgcGVyZm9ybWFuY2UuXG4gICAqIFxuICAgKiBUaGVyZWZvcmUsIGlmIHlvdSBlbmNvdW50ZXIgYW4gZXJyb3IgZHVlIHRvIGEgZGF0YWJhc2Uga2V5IHZpb2xhdGlvbiwgdGhlIHJlc3BvbnNlIHdpbGwgbGlrZWx5IG9mZmVyIGEgZ2VuZXJpY1xuICAgKiBleHBsYW5hdGlvbi4gSWYgeW91IGVuY291bnRlciBhbiBlcnJvciwgeW91IG1heSBvcHRpb25hbGx5IGVuYWJsZSBhZGRpdGlvbmFsIHZhbGlkYXRpb24gdG8gcmVjZWl2ZSBhIEpTT04gcmVzcG9uc2VcbiAgICogYm9keSB3aXRoIHNwZWNpZmljIHZhbGlkYXRpb24gZXJyb3JzLiBUaGlzIHdpbGwgc2xvdyB0aGUgcmVxdWVzdCBkb3duIGJ1dCB3aWxsIGFsbG93IHlvdSB0byBpZGVudGlmeSB0aGUgY2F1c2Ugb2ZcbiAgICogdGhlIGZhaWx1cmUuIFNlZSB0aGUgdmFsaWRhdGVEYkNvbnN0cmFpbnRzIHJlcXVlc3QgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZnJlc2hUb2tlbkltcG9ydFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aGUgcmVmcmVzaCB0b2tlbnMgdG8gaW1wb3J0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBpbXBvcnRSZWZyZXNoVG9rZW5zKHJlcXVlc3Q6IFJlZnJlc2hUb2tlbkltcG9ydFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVmcmVzaC10b2tlbi9pbXBvcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWxrIGltcG9ydHMgdXNlcnMuIFRoaXMgcmVxdWVzdCBwZXJmb3JtcyBtaW5pbWFsIHZhbGlkYXRpb24gYW5kIHJ1bnMgYmF0Y2ggaW5zZXJ0cyBvZiB1c2VycyB3aXRoIHRoZSBleHBlY3RhdGlvblxuICAgKiB0aGF0IGVhY2ggdXNlciBkb2VzIG5vdCB5ZXQgZXhpc3QgYW5kIGVhY2ggcmVnaXN0cmF0aW9uIGNvcnJlc3BvbmRzIHRvIGFuIGV4aXN0aW5nIEZ1c2lvbkF1dGggQXBwbGljYXRpb24uIFRoaXMgaXMgZG9uZSB0b1xuICAgKiBpbmNyZWFzZXMgdGhlIGluc2VydCBwZXJmb3JtYW5jZS5cbiAgICogXG4gICAqIFRoZXJlZm9yZSwgaWYgeW91IGVuY291bnRlciBhbiBlcnJvciBkdWUgdG8gYSBkYXRhYmFzZSBrZXkgdmlvbGF0aW9uLCB0aGUgcmVzcG9uc2Ugd2lsbCBsaWtlbHkgb2ZmZXJcbiAgICogYSBnZW5lcmljIGV4cGxhbmF0aW9uLiBJZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yLCB5b3UgbWF5IG9wdGlvbmFsbHkgZW5hYmxlIGFkZGl0aW9uYWwgdmFsaWRhdGlvbiB0byByZWNlaXZlIGEgSlNPTiByZXNwb25zZVxuICAgKiBib2R5IHdpdGggc3BlY2lmaWMgdmFsaWRhdGlvbiBlcnJvcnMuIFRoaXMgd2lsbCBzbG93IHRoZSByZXF1ZXN0IGRvd24gYnV0IHdpbGwgYWxsb3cgeW91IHRvIGlkZW50aWZ5IHRoZSBjYXVzZSBvZiB0aGUgZmFpbHVyZS4gU2VlXG4gICAqIHRoZSB2YWxpZGF0ZURiQ29uc3RyYWludHMgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7SW1wb3J0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRoZSB1c2VycyB0byBpbXBvcnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGltcG9ydFVzZXJzKHJlcXVlc3Q6IEltcG9ydFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvaW1wb3J0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGEgV2ViQXV0aG4gY3JlZGVudGlhbFxuICAgKlxuICAgKiBAcGFyYW0ge1dlYkF1dGhuQ3JlZGVudGlhbEltcG9ydFJlcXVlc3R9IHJlcXVlc3QgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBuZWNlc3NhcnkgZm9yIGltcG9ydGluZyB0aGUgY3JlZGVudGlhbFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBpbXBvcnRXZWJBdXRobkNyZWRlbnRpYWwocmVxdWVzdDogV2ViQXV0aG5DcmVkZW50aWFsSW1wb3J0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vaW1wb3J0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5zcGVjdCBhbiBhY2Nlc3MgdG9rZW4gaXNzdWVkIGFzIHRoZSByZXN1bHQgb2YgdGhlIFVzZXIgYmFzZWQgZ3JhbnQgc3VjaCBhcyB0aGUgQXV0aG9yaXphdGlvbiBDb2RlIEdyYW50LCBJbXBsaWNpdCBHcmFudCwgdGhlIFVzZXIgQ3JlZGVudGlhbHMgR3JhbnQgb3IgdGhlIFJlZnJlc2ggR3JhbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gZm9yIHdoaWNoIHRoaXMgdG9rZW4gd2FzIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuIFRoZSBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgYnkgdGhpcyBPQXV0aCBwcm92aWRlciBhcyB0aGUgcmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBjbGllbnQgY3JlZGVudGlhbHMgZ3JhbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+fVxuICAgKi9cbiAgaW50cm9zcGVjdEFjY2Vzc1Rva2VuKGNsaWVudF9pZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRyb3NwZWN0UmVzcG9uc2U+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgndG9rZW4nLCB0b2tlbik7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8SW50cm9zcGVjdFJlc3BvbnNlLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2ludHJvc3BlY3QnKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNwZWN0IGFuIGFjY2VzcyB0b2tlbiBpc3N1ZWQgYXMgdGhlIHJlc3VsdCBvZiB0aGUgVXNlciBiYXNlZCBncmFudCBzdWNoIGFzIHRoZSBBdXRob3JpemF0aW9uIENvZGUgR3JhbnQsIEltcGxpY2l0IEdyYW50LCB0aGUgVXNlciBDcmVkZW50aWFscyBHcmFudCBvciB0aGUgUmVmcmVzaCBHcmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtBY2Nlc3NUb2tlbkludHJvc3BlY3RSZXF1ZXN0fSByZXF1ZXN0IFRoZSBhY2Nlc3MgdG9rZW4gaW50cm9zcGVjdGlvbiByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRyb3NwZWN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGludHJvc3BlY3RBY2Nlc3NUb2tlbldpdGhSZXF1ZXN0KHJlcXVlc3Q6IEFjY2Vzc1Rva2VuSW50cm9zcGVjdFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGlmIChyZXF1ZXN0LmNsaWVudF9pZCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNsaWVudF9pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgcmVxdWVzdC5jbGllbnRfaWQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC50ZW5hbnRJZCAhPT0gbnVsbCAmJiByZXF1ZXN0LnRlbmFudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd0ZW5hbnRJZCcsIHJlcXVlc3QudGVuYW50SWQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC50b2tlbiAhPT0gbnVsbCAmJiByZXF1ZXN0LnRva2VuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd0b2tlbicsIHJlcXVlc3QudG9rZW4pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxJbnRyb3NwZWN0UmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvaW50cm9zcGVjdCcpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3BlY3QgYW4gYWNjZXNzIHRva2VuIGlzc3VlZCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBDbGllbnQgQ3JlZGVudGlhbHMgR3JhbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiBUaGUgYWNjZXNzIHRva2VuIHJldHVybmVkIGJ5IHRoaXMgT0F1dGggcHJvdmlkZXIgYXMgdGhlIHJlc3VsdCBvZiBhIHN1Y2Nlc3NmdWwgY2xpZW50IGNyZWRlbnRpYWxzIGdyYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRyb3NwZWN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGludHJvc3BlY3RDbGllbnRDcmVkZW50aWFsc0FjY2Vzc1Rva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCd0b2tlbicsIHRva2VuKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxJbnRyb3NwZWN0UmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvaW50cm9zcGVjdCcpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3BlY3QgYW4gYWNjZXNzIHRva2VuIGlzc3VlZCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBDbGllbnQgQ3JlZGVudGlhbHMgR3JhbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2xpZW50Q3JlZGVudGlhbHNBY2Nlc3NUb2tlbkludHJvc3BlY3RSZXF1ZXN0fSByZXF1ZXN0IFRoZSBjbGllbnQgY3JlZGVudGlhbHMgYWNjZXNzIHRva2VuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRyb3NwZWN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGludHJvc3BlY3RDbGllbnRDcmVkZW50aWFsc0FjY2Vzc1Rva2VuV2l0aFJlcXVlc3QocmVxdWVzdDogQ2xpZW50Q3JlZGVudGlhbHNBY2Nlc3NUb2tlbkludHJvc3BlY3RSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRyb3NwZWN0UmVzcG9uc2U+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBpZiAocmVxdWVzdC50ZW5hbnRJZCAhPT0gbnVsbCAmJiByZXF1ZXN0LnRlbmFudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd0ZW5hbnRJZCcsIHJlcXVlc3QudGVuYW50SWQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC50b2tlbiAhPT0gbnVsbCAmJiByZXF1ZXN0LnRva2VuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd0b2tlbicsIHJlcXVlc3QudG9rZW4pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxJbnRyb3NwZWN0UmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvaW50cm9zcGVjdCcpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlIGEgbmV3IGFjY2VzcyB0b2tlbiAoSldUKSBmb3IgdGhlIHJlcXVlc3RlZCBBcHBsaWNhdGlvbiBhZnRlciBlbnN1cmluZyB0aGUgcHJvdmlkZWQgSldUIGlzIHZhbGlkLiBBIHZhbGlkXG4gICAqIGFjY2VzcyB0b2tlbiBpcyBwcm9wZXJseSBzaWduZWQgYW5kIG5vdCBleHBpcmVkLlxuICAgKiA8cD5cbiAgICogVGhpcyBBUEkgbWF5IGJlIHVzZWQgaW4gYW4gU1NPIGNvbmZpZ3VyYXRpb24gdG8gaXNzdWUgbmV3IHRva2VucyBmb3IgYW5vdGhlciBhcHBsaWNhdGlvbiBhZnRlciB0aGUgdXNlciBoYXNcbiAgICogb2J0YWluZWQgYSB2YWxpZCB0b2tlbiBmcm9tIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIEFwcGxpY2F0aW9uIElkIGZvciB3aGljaCB5b3UgYXJlIHJlcXVlc3RpbmcgYSBuZXcgYWNjZXNzIHRva2VuIGJlIGlzc3VlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaFRva2VuIChPcHRpb25hbCkgQW4gZXhpc3RpbmcgcmVmcmVzaCB0b2tlbiB1c2VkIHRvIHJlcXVlc3QgYSByZWZyZXNoIHRva2VuIGluIGFkZGl0aW9uIHRvIGEgSldUIGluIHRoZSByZXNwb25zZS5cbiAgICogICAgPHA+VGhlIHRhcmdldCBhcHBsaWNhdGlvbiByZXByZXNlbnRlZCBieSB0aGUgYXBwbGljYXRpb25JZCByZXF1ZXN0IHBhcmFtZXRlciBtdXN0IGhhdmUgcmVmcmVzaFxuICAgKiAgICB0b2tlbnMgZW5hYmxlZCBpbiBvcmRlciB0byByZWNlaXZlIGEgcmVmcmVzaCB0b2tlbiBpbiB0aGUgcmVzcG9uc2UuPC9wPlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJc3N1ZVJlc3BvbnNlPj59XG4gICAqL1xuICBpc3N1ZUpXVChhcHBsaWNhdGlvbklkOiBVVUlELCBlbmNvZGVkSldUOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJc3N1ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPElzc3VlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvaXNzdWUnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVmcmVzaFRva2VuJywgcmVmcmVzaFRva2VuKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGVzIGEgdXNlciB0byBGdXNpb25BdXRoLiBcbiAgICogXG4gICAqIFRoaXMgQVBJIG9wdGlvbmFsbHkgcmVxdWlyZXMgYW4gQVBJIGtleS4gU2VlIDxjb2RlPkFwcGxpY2F0aW9uLmxvZ2luQ29uZmlndXJhdGlvbi5yZXF1aXJlQXV0aGVudGljYXRpb248L2NvZGU+LlxuICAgKlxuICAgKiBAcGFyYW0ge0xvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNyZWRlbnRpYWxzIHVzZWQgdG8gbG9nIHRoZW0gaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvZ2luKHJlcXVlc3Q6IExvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIHBpbmcgdG8gRnVzaW9uQXV0aCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgd2FzIGF1dG9tYXRpY2FsbHkgbG9nZ2VkIGludG8gYW4gYXBwbGljYXRpb24uIFdoZW4gdXNpbmdcbiAgICogRnVzaW9uQXV0aCdzIFNTTyBvciB5b3VyIG93biwgeW91IHNob3VsZCBjYWxsIHRoaXMgaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQgaW4gY2VudHJhbGx5LCBidXQgYWNjZXNzZXMgYW5cbiAgICogYXBwbGljYXRpb24gd2hlcmUgdGhleSBubyBsb25nZXIgaGF2ZSBhIHNlc3Npb24uIFRoaXMgaGVscHMgY29ycmVjdGx5IHRyYWNrIGxvZ2luIGNvdW50cywgdGltZXMgYW5kIGhlbHBzIHdpdGhcbiAgICogcmVwb3J0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdGhhdCB3YXMgbG9nZ2VkIGluLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZXkgbG9nZ2VkIGludG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWxsZXJJUEFkZHJlc3MgKE9wdGlvbmFsKSBUaGUgSVAgYWRkcmVzcyBvZiB0aGUgZW5kLXVzZXIgdGhhdCBpcyBsb2dnaW5nIGluLiBJZiBhIG51bGwgdmFsdWUgaXMgcHJvdmlkZWRcbiAgICogICAgdGhlIElQIGFkZHJlc3Mgd2lsbCBiZSB0aGF0IG9mIHRoZSBjbGllbnQgb3IgbGFzdCBwcm94eSB0aGF0IHNlbnQgdGhlIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvZ2luUGluZyh1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQsIGNhbGxlcklQQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dpbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaXBBZGRyZXNzJywgY2FsbGVySVBBZGRyZXNzKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIHBpbmcgdG8gRnVzaW9uQXV0aCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgd2FzIGF1dG9tYXRpY2FsbHkgbG9nZ2VkIGludG8gYW4gYXBwbGljYXRpb24uIFdoZW4gdXNpbmdcbiAgICogRnVzaW9uQXV0aCdzIFNTTyBvciB5b3VyIG93biwgeW91IHNob3VsZCBjYWxsIHRoaXMgaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQgaW4gY2VudHJhbGx5LCBidXQgYWNjZXNzZXMgYW5cbiAgICogYXBwbGljYXRpb24gd2hlcmUgdGhleSBubyBsb25nZXIgaGF2ZSBhIHNlc3Npb24uIFRoaXMgaGVscHMgY29ycmVjdGx5IHRyYWNrIGxvZ2luIGNvdW50cywgdGltZXMgYW5kIGhlbHBzIHdpdGhcbiAgICogcmVwb3J0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0xvZ2luUGluZ1JlcXVlc3R9IHJlcXVlc3QgVGhlIGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlciBjcmVkZW50aWFscyB1c2VkIHRvIGxvZyB0aGVtIGluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICBsb2dpblBpbmdXaXRoUmVxdWVzdChyZXF1ZXN0OiBMb2dpblBpbmdSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExvZ291dCBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZW1vdmUgdGhlIHJlZnJlc2ggdG9rZW4gYW5kIGFjY2VzcyB0b2tlbiBjb29raWVzIGlmIHRoZXkgZXhpc3Qgb24gdGhlXG4gICAqIGNsaWVudCBhbmQgcmV2b2tlIHRoZSByZWZyZXNoIHRva2VuIHN0b3JlZC4gVGhpcyBBUEkgZG9lcyBub3RoaW5nIGlmIHRoZSByZXF1ZXN0IGRvZXMgbm90IGNvbnRhaW4gYW4gYWNjZXNzXG4gICAqIHRva2VuIG9yIHJlZnJlc2ggdG9rZW4gY29va2llcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBnbG9iYWwgV2hlbiB0aGlzIHZhbHVlIGlzIHNldCB0byB0cnVlIGFsbCB0aGUgcmVmcmVzaCB0b2tlbnMgaXNzdWVkIHRvIHRoZSBvd25lciBvZiB0aGVcbiAgICogICAgcHJvdmlkZWQgdG9rZW4gd2lsbCBiZSByZXZva2VkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaFRva2VuIChPcHRpb25hbCkgVGhlIHJlZnJlc2hfdG9rZW4gYXMgYSByZXF1ZXN0IHBhcmFtZXRlciBpbnN0ZWFkIG9mIGNvbWluZyBpbiB2aWEgYSBjb29raWUuXG4gICAqICAgIElmIHByb3ZpZGVkIHRoaXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBjb29raWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGxvZ291dChnbG9iYWw6IGJvb2xlYW4sIHJlZnJlc2hUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9nb3V0JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2dsb2JhbCcsIGdsb2JhbClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlZnJlc2hUb2tlbicsIHJlZnJlc2hUb2tlbilcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBMb2dvdXQgQVBJIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVtb3ZlIHRoZSByZWZyZXNoIHRva2VuIGFuZCBhY2Nlc3MgdG9rZW4gY29va2llcyBpZiB0aGV5IGV4aXN0IG9uIHRoZVxuICAgKiBjbGllbnQgYW5kIHJldm9rZSB0aGUgcmVmcmVzaCB0b2tlbiBzdG9yZWQuIFRoaXMgQVBJIHRha2VzIHRoZSByZWZyZXNoIHRva2VuIGluIHRoZSBKU09OIGJvZHkuXG4gICAqXG4gICAqIEBwYXJhbSB7TG9nb3V0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gbG9nb3V0IHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBsb2dvdXRXaXRoUmVxdWVzdChyZXF1ZXN0OiBMb2dvdXRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9nb3V0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBpZGVudGl0eSBwcm92aWRlciBmb3IgdGhlIGdpdmVuIGRvbWFpbi4gQSAyMDAgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIGRvbWFpbiBpcyBtYW5hZ2VkXG4gICAqIGJ5IGEgcmVnaXN0ZXJlZCBpZGVudGl0eSBwcm92aWRlci4gQSA0MDQgaW5kaWNhdGVzIHRoZSBkb21haW4gaXMgbm90IG1hbmFnZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBvciBlbWFpbCBhZGRyZXNzIHRvIGxvb2t1cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9va3VwUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvb2t1cElkZW50aXR5UHJvdmlkZXIoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvb2t1cFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvb2t1cFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xvb2t1cCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdkb21haW4nLCBkb21haW4pXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIGEgdGVtcG9yYWwgdXNlciBhY3Rpb24gYnkgY2hhbmdpbmcgdGhlIGV4cGlyYXRpb24gb2YgdGhlIGFjdGlvbiBhbmQgb3B0aW9uYWxseSBhZGRpbmcgYSBjb21tZW50IHRvIHRoZVxuICAgKiBhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYWN0aW9uSWQgVGhlIElkIG9mIHRoZSBhY3Rpb24gdG8gbW9kaWZ5LiBUaGlzIGlzIHRlY2huaWNhbGx5IHRoZSB1c2VyIGFjdGlvbiBsb2cgSWQuXG4gICAqIEBwYXJhbSB7QWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vZGlmaWNhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIG1vZGlmeUFjdGlvbihhY3Rpb25JZDogVVVJRCwgcmVxdWVzdDogQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIGxvZ2luIHJlcXVlc3QgdXNpbmcgYSBwYXNzd29yZGxlc3MgY29kZVxuICAgKlxuICAgKiBAcGFyYW0ge1Bhc3N3b3JkbGVzc0xvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY29tcGxldGUgbG9naW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhc3N3b3JkbGVzc0xvZ2luKHJlcXVlc3Q6IFBhc3N3b3JkbGVzc0xvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcGFzc3dvcmRsZXNzL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBBUEkga2V5IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUgQVBJIGtleS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBhcGkga2V5IHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0FQSUtleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY3JlYXRlIHRoZSBBUEkga2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hBUElLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEFQSUtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFQSUtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGFwcGxpY2F0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGFwcGxpY2F0aW9uIHJvbGUgd2l0aCB0aGUgZ2l2ZW4gSWQgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB0aGUgcm9sZSBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHJvbGVJZCBUaGUgSWQgb2YgdGhlIHJvbGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyByb2xlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEFwcGxpY2F0aW9uUm9sZShhcHBsaWNhdGlvbklkOiBVVUlELCByb2xlSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicm9sZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocm9sZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgY29ubmVjdG9yIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbm5lY3RvcklkIFRoZSBJZCBvZiB0aGUgY29ubmVjdG9yIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtDb25uZWN0b3JSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGNvbm5lY3RvciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoQ29ubmVjdG9yKGNvbm5lY3RvcklkOiBVVUlELCByZXF1ZXN0OiBDb25uZWN0b3JSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25uZWN0b3JSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25uZWN0b3JJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGNvbnNlbnQgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29uc2VudElkIFRoZSBJZCBvZiB0aGUgY29uc2VudCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Q29uc2VudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgY29uc2VudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaENvbnNlbnQoY29uc2VudElkOiBVVUlELCByZXF1ZXN0OiBDb25zZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29uc2VudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgZW1haWwgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgZW1haWwgdGVtcGxhdGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VtYWlsVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGVtYWlsIHRlbXBsYXRlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoRW1haWxUZW1wbGF0ZShlbWFpbFRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVtYWlsVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW1haWxUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW1haWxUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgRW50aXR5IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IFR5cGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VudGl0eVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgRW50aXR5IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hFbnRpdHkoZW50aXR5SWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgRW50aXR5IFR5cGUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IFR5cGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IEVudGl0eSBUeXBlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoRW50aXR5VHlwZShlbnRpdHlUeXBlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyB0aGUgcGVybWlzc2lvbiB3aXRoIHRoZSBnaXZlbiBJZCBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIGVudGl0eVR5cGUgdGhhdCB0aGUgcGVybWlzc2lvbiBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHBlcm1pc3Npb25JZCBUaGUgSWQgb2YgdGhlIHBlcm1pc3Npb24gdG8gcGF0Y2guXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgbmV3IHBlcm1pc3Npb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hFbnRpdHlUeXBlUGVybWlzc2lvbihlbnRpdHlUeXBlSWQ6IFVVSUQsIHBlcm1pc3Npb25JZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInBlcm1pc3Npb25cIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHBlcm1pc3Npb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdGNoZXMgdGhlIGZvcm0gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZm9ybUlkIFRoZSBJZCBvZiB0aGUgZm9ybSB0byBwYXRjaC5cbiAgICogQHBhcmFtIHtGb3JtUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgbmV3IGZvcm0gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hGb3JtKGZvcm1JZDogVVVJRCwgcmVxdWVzdDogRm9ybVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZvcm1JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdGNoZXMgdGhlIGZvcm0gZmllbGQgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmllbGRJZCBUaGUgSWQgb2YgdGhlIGZvcm0gZmllbGQgdG8gcGF0Y2guXG4gICAqIEBwYXJhbSB7Rm9ybUZpZWxkUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgbmV3IGZvcm0gZmllbGQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEZvcm1GaWVsZChmaWVsZElkOiBVVUlELCByZXF1ZXN0OiBGb3JtRmllbGRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtRmllbGRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmllbGRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGdyb3VwIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgVGhlIElkIG9mIHRoZSBncm91cCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7R3JvdXBSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGdyb3VwIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEdyb3VwKGdyb3VwSWQ6IFVVSUQsIHJlcXVlc3Q6IEdyb3VwUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhY2Nlc3NDb250cm9sTGlzdElkIFRoZSBJZCBvZiB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCB0byBwYXRjaC5cbiAgICogQHBhcmFtIHtJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBuZXcgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaElQQWNjZXNzQ29udHJvbExpc3QoYWNjZXNzQ29udHJvbExpc3RJZDogVVVJRCwgcmVxdWVzdDogSVBBY2Nlc3NDb250cm9sTGlzdFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pcC1hY2wnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYWNjZXNzQ29udHJvbExpc3RJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSB1cGRhdGVkIGlkZW50aXR5IHByb3ZpZGVyIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+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+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbnNlbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQ29uc2VudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyB0aGUgd2ViaG9vayB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB3ZWJob29rSWQgVGhlIElkIG9mIHRoZSB3ZWJob29rIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtXZWJob29rUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBuZXcgd2ViaG9vayBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFdlYmhvb2sod2ViaG9va0lkOiBVVUlELCByZXF1ZXN0OiBXZWJob29rUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0lkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhY3RpdmF0ZXMgdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byByZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZWFjdGl2YXRlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlYWN0aXZhdGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFjdGl2YXRlcyB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIHJlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmVhY3RpdmF0ZVVzZXIodXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWFjdGl2YXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhY3RpdmF0ZXMgdGhlIHVzZXIgYWN0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHRvIHJlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmVhY3RpdmF0ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVhY3RpdmF0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uY2lsZSBhIFVzZXIgdG8gRnVzaW9uQXV0aCB1c2luZyBKV1QgaXNzdWVkIGZyb20gYW5vdGhlciBJZGVudGl0eSBQcm92aWRlci5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyTG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZWNvbmNpbGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIHRvIHJlY29uY2lsZSB0aGUgVXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmVjb25jaWxlSldUKHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJMb2dpblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWNvbmNpbGUnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IGEgcmVmcmVzaCBvZiB0aGUgRW50aXR5IHNlYXJjaCBpbmRleC4gVGhpcyBBUEkgaXMgbm90IGdlbmVyYWxseSBuZWNlc3NhcnkgYW5kIHRoZSBzZWFyY2ggaW5kZXggd2lsbCBiZWNvbWUgY29uc2lzdGVudCBpbiBhXG4gICAqIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUuIFRoZXJlIG1heSBiZSBzY2VuYXJpb3Mgd2hlcmUgeW91IG1heSB3aXNoIHRvIG1hbnVhbGx5IHJlcXVlc3QgYW4gaW5kZXggcmVmcmVzaC4gT25lIGV4YW1wbGUgbWF5IGJlIFxuICAgKiBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTZWFyY2ggQVBJIG9yIERlbGV0ZSBUZW5hbnQgQVBJIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhIEVudGl0eSBDcmVhdGUgZXRjLCB5b3UgbWF5IHdpc2ggdG8gcmVxdWVzdCBhIHJlZnJlc2ggdG9cbiAgICogIGVuc3VyZSB0aGUgaW5kZXggaW1tZWRpYXRlbHkgY3VycmVudCBiZWZvcmUgbWFraW5nIGEgcXVlcnkgcmVxdWVzdCB0byB0aGUgc2VhcmNoIGluZGV4LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZWZyZXNoRW50aXR5U2VhcmNoSW5kZXgoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3NlYXJjaCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgYSByZWZyZXNoIG9mIHRoZSBVc2VyIHNlYXJjaCBpbmRleC4gVGhpcyBBUEkgaXMgbm90IGdlbmVyYWxseSBuZWNlc3NhcnkgYW5kIHRoZSBzZWFyY2ggaW5kZXggd2lsbCBiZWNvbWUgY29uc2lzdGVudCBpbiBhXG4gICAqIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUuIFRoZXJlIG1heSBiZSBzY2VuYXJpb3Mgd2hlcmUgeW91IG1heSB3aXNoIHRvIG1hbnVhbGx5IHJlcXVlc3QgYW4gaW5kZXggcmVmcmVzaC4gT25lIGV4YW1wbGUgbWF5IGJlIFxuICAgKiBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTZWFyY2ggQVBJIG9yIERlbGV0ZSBUZW5hbnQgQVBJIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhIFVzZXIgQ3JlYXRlIGV0YywgeW91IG1heSB3aXNoIHRvIHJlcXVlc3QgYSByZWZyZXNoIHRvXG4gICAqICBlbnN1cmUgdGhlIGluZGV4IGltbWVkaWF0ZWx5IGN1cnJlbnQgYmVmb3JlIG1ha2luZyBhIHF1ZXJ5IHJlcXVlc3QgdG8gdGhlIHNlYXJjaCBpbmRleC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmVmcmVzaFVzZXJTZWFyY2hJbmRleCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2VuZXJhdGVzIGFueSBrZXlzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIEZ1c2lvbkF1dGggUmVhY3Rvci5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmVnZW5lcmF0ZVJlYWN0b3JLZXlzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3InKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB1c2VyIGZvciBhbiBhcHBsaWNhdGlvbi4gSWYgeW91IHByb3ZpZGUgdGhlIFVzZXIgYW5kIHRoZSBVc2VyUmVnaXN0cmF0aW9uIG9iamVjdCBvbiB0aGlzIHJlcXVlc3QsIGl0XG4gICAqIHdpbGwgY3JlYXRlIHRoZSB1c2VyIGFzIHdlbGwgYXMgcmVnaXN0ZXIgdGhlbSBmb3IgdGhlIGFwcGxpY2F0aW9uLiBUaGlzIGlzIGNhbGxlZCBhIEZ1bGwgUmVnaXN0cmF0aW9uLiBIb3dldmVyLCBpZlxuICAgKiB5b3Ugb25seSBwcm92aWRlIHRoZSBVc2VyUmVnaXN0cmF0aW9uIG9iamVjdCwgdGhlbiB0aGUgdXNlciBtdXN0IGFscmVhZHkgZXhpc3QgYW5kIHRoZXkgd2lsbCBiZSByZWdpc3RlcmVkIGZvciB0aGVcbiAgICogYXBwbGljYXRpb24uIFRoZSB1c2VyIElkIGNhbiBhbHNvIGJlIHByb3ZpZGVkIGFuZCBpdCB3aWxsIGVpdGhlciBiZSB1c2VkIHRvIGxvb2sgdXAgYW4gZXhpc3RpbmcgdXNlciBvciBpdCB3aWxsIGJlXG4gICAqIHVzZWQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIFVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSB1c2VyIGJlaW5nIHJlZ2lzdGVyZWQgZm9yIHRoZSBhcHBsaWNhdGlvbiBhbmQgb3B0aW9uYWxseSBjcmVhdGVkLlxuICAgKiBAcGFyYW0ge1JlZ2lzdHJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBvcHRpb25hbGx5IGNvbnRhaW5zIHRoZSBVc2VyIGFuZCBtdXN0IGNvbnRhaW4gdGhlIFVzZXJSZWdpc3RyYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZWdpc3Rlcih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFJlZ2lzdHJhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0cyBFbGFzdGljc2VhcmNoIHRvIGRlbGV0ZSBhbmQgcmVidWlsZCB0aGUgaW5kZXggZm9yIEZ1c2lvbkF1dGggdXNlcnMgb3IgZW50aXRpZXMuIEJlIHZlcnkgY2FyZWZ1bCB3aGVuIHJ1bm5pbmcgdGhpcyByZXF1ZXN0IGFzIGl0IHdpbGwgXG4gICAqIGluY3JlYXNlIHRoZSBDUFUgYW5kIEkvTyBsb2FkIG9uIHlvdXIgZGF0YWJhc2UgdW50aWwgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMuIEdlbmVyYWxseSBzcGVha2luZyB5b3UgZG8gbm90IGV2ZXIgbmVlZCB0byBydW4gdGhpcyBvcGVyYXRpb24gdW5sZXNzIFxuICAgKiBpbnN0cnVjdGVkIGJ5IEZ1c2lvbkF1dGggc3VwcG9ydCwgb3IgaWYgeW91IGFyZSBtaWdyYXRpbmcgYSBkYXRhYmFzZSBhbm90aGVyIHN5c3RlbSBhbmQgeW91IGFyZSBub3QgYnJpbmluZyBhbG9uZyB0aGUgRWxhc3RpY3NlYXJjaCBpbmRleC4gXG4gICAqIFxuICAgKiBZb3UgaGF2ZSBiZWVuIHdhcm5lZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWluZGV4UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBpbmRleCBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZWluZGV4KHJlcXVlc3Q6IFJlaW5kZXhSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vcmVpbmRleCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSB1c2VyIGZyb20gdGhlIGZhbWlseSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmYW1pbHlJZCBUaGUgSWQgb2YgdGhlIGZhbWlseSB0byByZW1vdmUgdGhlIHVzZXIgZnJvbS5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIHJlbW92ZSBmcm9tIHRoZSBmYW1pbHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlbW92ZVVzZXJGcm9tRmFtaWx5KGZhbWlseUlkOiBVVUlELCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZhbWlseUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1zZW5kcyB0aGUgdmVyaWZpY2F0aW9uIGVtYWlsIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWwgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIgdGhhdCBuZWVkcyBhIG5ldyB2ZXJpZmljYXRpb24gZW1haWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlc2VuZEVtYWlsVmVyaWZpY2F0aW9uKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyaWZ5RW1haWxSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLXNlbmRzIHRoZSB2ZXJpZmljYXRpb24gZW1haWwgdG8gdGhlIHVzZXIuIElmIHRoZSBBcHBsaWNhdGlvbiBoYXMgY29uZmlndXJlZCBhIHNwZWNpZmljIGVtYWlsIHRlbXBsYXRlIHRoaXMgd2lsbCBiZSB1c2VkXG4gICAqIGluc3RlYWQgb2YgdGhlIHRlbmFudCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIHVuaXF1ZSBBcHBsaWNhdGlvbiBJZCB0byB1c2VkIHRvIHJlc29sdmUgYW4gYXBwbGljYXRpb24gc3BlY2lmaWMgZW1haWwgdGVtcGxhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+fVxuICAgKi9cbiAgcmVzZW5kRW1haWxWZXJpZmljYXRpb25XaXRoQXBwbGljYXRpb25UZW1wbGF0ZShhcHBsaWNhdGlvbklkOiBVVUlELCBlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeUVtYWlsUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLXNlbmRzIHRoZSBhcHBsaWNhdGlvbiByZWdpc3RyYXRpb24gdmVyaWZpY2F0aW9uIGVtYWlsIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWwgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIgdGhhdCBuZWVkcyBhIG5ldyB2ZXJpZmljYXRpb24gZW1haWwuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHZlcmlmaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmVzZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uKGVtYWlsOiBzdHJpbmcsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFuIGF1dGhlbnRpY2F0aW9uIEFQSSBrZXkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIEFQSSBrZXkgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFQSUtleShrZXlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QVBJS2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBzaW5nbGUgYWN0aW9uIGxvZyAodGhlIGxvZyBvZiBhIHVzZXIgYWN0aW9uIHRoYXQgd2FzIHRha2VuIG9uIGEgdXNlciBwcmV2aW91c2x5KSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjdGlvbklkIFRoZSBJZCBvZiB0aGUgYWN0aW9uIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3Rpb24oYWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYWN0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLiBUaGlzIHdpbGwgcmV0dXJuIGFsbCB0aW1lIGJhc2VkIGFjdGlvbnMgdGhhdCBhcmUgYWN0aXZlLFxuICAgKiBhbmQgaW5hY3RpdmUgYXMgd2VsbCBhcyBub24tdGltZSBiYXNlZCBhY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZmV0Y2ggdGhlIGFjdGlvbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3Rpb25zKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkIHRoYXQgYXJlIGN1cnJlbnRseSBwcmV2ZW50aW5nIHRoZSBVc2VyIGZyb20gbG9nZ2luZyBpbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGZldGNoIHRoZSBhY3Rpb25zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQWN0aW9uc1ByZXZlbnRpbmdMb2dpbih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncHJldmVudGluZ0xvZ2luJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZS5cbiAgICogQW4gYWN0aXZlIGFjdGlvbiBtZWFucyBvbmUgdGhhdCBpcyB0aW1lIGJhc2VkIGFuZCBoYXMgbm90IGJlZW4gY2FuY2VsZWQsIGFuZCBoYXMgbm90IGVuZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZmV0Y2ggdGhlIGFjdGlvbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3RpdmVBY3Rpb25zKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhY3RpdmUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGFwcGxpY2F0aW9uIGZvciB0aGUgZ2l2ZW4gSWQgb3IgYWxsIHRoZSBhcHBsaWNhdGlvbnMgaWYgdGhlIElkIGlzIG51bGwuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBJZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYXBwbGljYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFwcGxpY2F0aW9ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSBhdWRpdCBsb2cgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGF1ZGl0TG9nSWQgVGhlIElkIG9mIHRoZSBhdWRpdCBsb2cgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQXVkaXRMb2coYXVkaXRMb2dJZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEF1ZGl0TG9nUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vYXVkaXQtbG9nJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGF1ZGl0TG9nSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY29ubmVjdG9yIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbm5lY3RvcklkIFRoZSBJZCBvZiB0aGUgY29ubmVjdG9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25uZWN0b3JJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY29ubmVjdG9ycy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQ29ubmVjdG9ycygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgQ29uc2VudCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCBUaGUgSWQgb2YgdGhlIGNvbnNlbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVDb25zZW50KGNvbnNlbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY29uc2VudC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUNvbnNlbnRzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBkYWlseSBhY3RpdmUgdXNlciByZXBvcnQgYmV0d2VlbiB0aGUgdHdvIGluc3RhbnRzLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBJZCwgaXQgd2lsbCBvbmx5XG4gICAqIHJldHVybiB0aGUgZGFpbHkgYWN0aXZlIGNvdW50cyBmb3IgdGhhdCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIElkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RGFpbHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRGFpbHlBY3RpdmVSZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L2RhaWx5LWFjdGl2ZS11c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBlbWFpbCB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgSWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIHRoZSBlbWFpbCB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+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+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3R5cGUnLCB0eXBlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxvZ2luIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIElkLCBpdCB3aWxsIG9ubHkgcmV0dXJuIHRoZVxuICAgKiBsb2dpbiBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBJZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTG9naW5SZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXBvcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC9sb2dpbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgSWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIHRoZSBtZXNzYWdlIHRlbXBsYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzYWdlVGVtcGxhdGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTWVzc2FnZVRlbXBsYXRlKG1lc3NhZ2VUZW1wbGF0ZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NhZ2VUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcHJldmlldyBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCwgbm9ybWFsaXplZCB0byBhIGdpdmVuIGxvY2FsZS5cbiAgICpcbiAgICogQHBhcmFtIHtQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBlbWFpbCB0ZW1wbGF0ZSBhbmQgb3B0aW9uYWxseSBhIGxvY2FsZSB0byByZW5kZXIgaXQgaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzYWdlVGVtcGxhdGVQcmV2aWV3KHJlcXVlc3Q6IFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZS9wcmV2aWV3JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgbWVzc2FnZSB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NhZ2VUZW1wbGF0ZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBtZXNzZW5nZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2VuZ2VySWQgVGhlIElkIG9mIHRoZSBtZXNzZW5nZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NlbmdlcihtZXNzZW5nZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NlbmdlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBtZXNzZW5nZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzZW5nZXJzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBtb250aGx5IGFjdGl2ZSB1c2VyIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIElkLCBpdCB3aWxsIG9ubHlcbiAgICogcmV0dXJuIHRoZSBtb250aGx5IGFjdGl2ZSBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBJZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1vbnRobHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTW9udGhseUFjdGl2ZVJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TW9udGhseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNb250aGx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L21vbnRobHktYWN0aXZlLXVzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBjdXN0b20gT0F1dGggc2NvcGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIE9BdXRoIHNjb3BlIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gc2NvcGVJZCBUaGUgSWQgb2YgdGhlIE9BdXRoIHNjb3BlIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVPQXV0aFNjb3BlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHNjb3BlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwic2NvcGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHNjb3BlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgT2F1dGgyIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbiBmb3IgdGhlIGdpdmVuIEFwcGxpY2F0aW9uIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBBcHBsaWNhdGlvbiB0byByZXRyaWV2ZSBPQXV0aCBjb25maWd1cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxPQXV0aENvbmZpZ3VyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVPYXV0aENvbmZpZ3VyYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8T0F1dGhDb25maWd1cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8T0F1dGhDb25maWd1cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJvYXV0aC1jb25maWd1cmF0aW9uXCIpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHdlbGwga25vd24gT3BlbklEIENvbmZpZ3VyYXRpb24gSlNPTiBkb2N1bWVudFxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxPcGVuSWRDb25maWd1cmF0aW9uPj59XG4gICAqL1xuICByZXRyaWV2ZU9wZW5JZENvbmZpZ3VyYXRpb24oKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxPcGVuSWRDb25maWd1cmF0aW9uPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPE9wZW5JZENvbmZpZ3VyYXRpb24sIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcGFzc3dvcmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgYSBzcGVjaWZpYyB0ZW5hbnQuIFRoaXMgbWV0aG9kIHJlcXVpcmVzIGEgdGVuYW50SWQgdG8gYmUgcHJvdmlkZWQgXG4gICAqIHRocm91Z2ggdGhlIHVzZSBvZiBhIFRlbmFudCBzY29wZWQgQVBJIGtleSBvciBhbiBIVFRQIGhlYWRlciBYLUZ1c2lvbkF1dGgtVGVuYW50SWQgdG8gc3BlY2lmeSB0aGUgVGVuYW50IElkLlxuICAgKiBcbiAgICogVGhpcyBBUEkgZG9lcyBub3QgcmVxdWlyZSBhbiBBUEkga2V5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudC9wYXNzd29yZC12YWxpZGF0aW9uLXJ1bGVzJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCB2YWxpZGF0aW9uIHJ1bGVzIGZvciBhIHNwZWNpZmljIHRlbmFudC5cbiAgICogXG4gICAqIFRoaXMgQVBJIGRvZXMgbm90IHJlcXVpcmUgYW4gQVBJIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVQYXNzd29yZFZhbGlkYXRpb25SdWxlc1dpdGhUZW5hbnRJZCh0ZW5hbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudC9wYXNzd29yZC12YWxpZGF0aW9uLXJ1bGVzJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBjaGlsZHJlbiBmb3IgdGhlIGdpdmVuIHBhcmVudCBlbWFpbCBhZGRyZXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50RW1haWwgVGhlIGVtYWlsIG9mIHRoZSBwYXJlbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFBlbmRpbmdSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVQZW5kaW5nQ2hpbGRyZW4ocGFyZW50RW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UGVuZGluZ1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFBlbmRpbmdSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5L3BlbmRpbmcnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncGFyZW50RW1haWwnLCBwYXJlbnRFbWFpbClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBwZW5kaW5nIGlkZW50aXR5IHByb3ZpZGVyIGxpbmsuIFRoaXMgaXMgdXNlZnVsIHRvIHZhbGlkYXRlIGEgcGVuZGluZyBsaW5rIGFuZCByZXRyaWV2ZSBtZXRhLWRhdGEgYWJvdXQgdGhlIGlkZW50aXR5IHByb3ZpZGVyIGxpbmsuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwZW5kaW5nTGlua0lkIFRoZSBwZW5kaW5nIGxpbmsgSWQuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBvcHRpb25hbCB1c2VySWQuIFdoZW4gcHJvdmlkZWQgYWRkaXRpb25hbCBtZXRhLWRhdGEgd2lsbCBiZSBwcm92aWRlZCB0byBpZGVudGlmeSBob3cgbWFueSBsaW5rcyBpZiBhbnkgdGhlIHVzZXIgYWxyZWFkeSBoYXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJQZW5kaW5nTGlua1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVBlbmRpbmdMaW5rKHBlbmRpbmdMaW5rSWQ6IHN0cmluZywgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUGVuZGluZ0xpbmtSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUGVuZGluZ0xpbmtSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xpbmsvcGVuZGluZycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChwZW5kaW5nTGlua0lkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEZ1c2lvbkF1dGggUmVhY3RvciBtZXRyaWNzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yTWV0cmljc1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlYWN0b3JNZXRyaWNzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVhY3Rvck1ldHJpY3NSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWFjdG9yTWV0cmljc1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3IvbWV0cmljcycpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yIHN0YXR1cy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVhY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlYWN0b3JTdGF0dXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVhY3RvclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3InKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxhc3QgbnVtYmVyIG9mIGxvZ2luIHJlY29yZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIGluaXRpYWwgcmVjb3JkLiBlLmcuIDAgaXMgdGhlIGxhc3QgbG9naW4sIDEwMCB3aWxsIGJlIHRoZSAxMDB0aCBtb3N0IHJlY2VudCBsb2dpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IChPcHRpb25hbCwgZGVmYXVsdHMgdG8gMTApIFRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWNlbnRMb2dpbnMob2Zmc2V0OiBudW1iZXIsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlY2VudExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVjZW50TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVjZW50LWxvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ29mZnNldCcsIG9mZnNldClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xpbWl0JywgbGltaXQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSByZWZyZXNoIHRva2VuIGJ5IHVuaXF1ZSBJZC4gVGhpcyBpcyBub3QgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgcmVmcmVzaCB0b2tlbi4gSWYgeW91IGhhdmUgdGhhdCwgeW91IGFscmVhZHkgaGF2ZSB3aGF0IHlvdSBuZWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRva2VuSWQgVGhlIElkIG9mIHRoZSB0b2tlbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVmcmVzaFRva2VuUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVmcmVzaFRva2VuQnlJZCh0b2tlbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWZyZXNoVG9rZW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWZyZXNoVG9rZW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRva2VuSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVmcmVzaFRva2VuUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVmcmVzaFRva2Vucyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZnJlc2hUb2tlblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZnJlc2hUb2tlblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgcmVnaXN0cmF0aW9uIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZCBhbmQgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWdpc3RyYXRpb24odXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVnaXN0cmF0aW9uIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIElkLCBpdCB3aWxsIG9ubHkgcmV0dXJuXG4gICAqIHRoZSByZWdpc3RyYXRpb24gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gSWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWdpc3RyYXRpb25SZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBzdGF0dXMgb2YgYSByZS1pbmRleCBwcm9jZXNzLiBBIHN0YXR1cyBjb2RlIG9mIDIwMCBpbmRpY2F0ZXMgdGhlIHJlLWluZGV4IGlzIGluIHByb2dyZXNzLCBhIHN0YXR1cyBjb2RlIG9mICBcbiAgICogNDA0IGluZGljYXRlcyBubyByZS1pbmRleCBpcyBpbiBwcm9ncmVzcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWluZGV4U3RhdHVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL3JlaW5kZXgnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlU3lzdGVtQ29uZmlndXJhdGlvbigpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtLWNvbmZpZ3VyYXRpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEZ1c2lvbkF1dGggc3lzdGVtIGhlYWx0aC4gVGhpcyBBUEkgd2lsbCByZXR1cm4gMjAwIGlmIHRoZSBzeXN0ZW0gaXMgaGVhbHRoeSwgYW5kIDUwMCBpZiB0aGUgc3lzdGVtIGlzIHVuLWhlYWx0aHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldHJpZXZlU3lzdGVtSGVhbHRoKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2hlYWx0aCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRnVzaW9uQXV0aCBzeXN0ZW0gc3RhdHVzLiBUaGlzIHJlcXVlc3QgaXMgYW5vbnltb3VzIGFuZCBkb2VzIG5vdCByZXF1aXJlIGFuIEFQSSBrZXkuIFdoZW4gYW4gQVBJIGtleSBpcyBub3QgcHJvdmlkZWQgdGhlIHJlc3BvbnNlIHdpbGwgY29udGFpbiBhIHNpbmdsZSB2YWx1ZSBpbiB0aGUgSlNPTiByZXNwb25zZSBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IGhlYWx0aCBjaGVjay5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U3RhdHVzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlU3lzdGVtU3RhdHVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U3RhdHVzUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8U3RhdHVzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3RhdHVzJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBGdXNpb25BdXRoIHN5c3RlbSBzdGF0dXMgdXNpbmcgYW4gQVBJIGtleS4gVXNpbmcgYW4gQVBJIGtleSB3aWxsIGNhdXNlIHRoZSByZXNwb25zZSB0byBpbmNsdWRlIHRoZSBwcm9kdWN0IHZlcnNpb24sIGhlYWx0aCBjaGVja3MgYW5kIHZhcmlvdXMgcnVudGltZSBtZXRyaWNzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTdGF0dXNSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVTeXN0ZW1TdGF0dXNVc2luZ0FQSUtleSgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFN0YXR1c1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFN0YXR1c1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N0YXR1cycpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdGVuYW50IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRlbmFudCh0ZW5hbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHRlbmFudHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRlbmFudHMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRoZW1lIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGhlbWVJZCBUaGUgSWQgb2YgdGhlIHRoZW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRoZW1lKHRoZW1lSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRoZW1lSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHRoZW1lcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUaGVtZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRvdGFscyByZXBvcnQuIFRoaXMgY29udGFpbnMgYWxsIHRoZSB0b3RhbCBjb3VudHMgZm9yIGVhY2ggYXBwbGljYXRpb24gYW5kIHRoZSBnbG9iYWwgcmVnaXN0cmF0aW9uXG4gICAqIGNvdW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUb3RhbHNSZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUb3RhbFJlcG9ydCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRvdGFsc1JlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRvdGFsc1JlcG9ydFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC90b3RhbHMnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRvdGFscyByZXBvcnQuIFRoaXMgYWxsb3dzIGV4Y2x1ZGluZyBhcHBsaWNhdGlvblRvdGFscyBmcm9tIHRoZSByZXBvcnQuIEFuIGVtcHR5IGxpc3Qgd2lsbCBpbmNsdWRlIHRoZSBhcHBsaWNhdGlvblRvdGFscy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmc+fSBleGNsdWRlcyBMaXN0IG9mIGZpZWxkcyB0byBleGNsdWRlIGluIHRoZSByZXNwb25zZS4gQ3VycmVudGx5IG9ubHkgYWxsb3dzIGFwcGxpY2F0aW9uVG90YWxzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUb3RhbHNSZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUb3RhbFJlcG9ydFdpdGhFeGNsdWRlcyhleGNsdWRlczogQXJyYXk8U3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VG90YWxzUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VG90YWxzUmVwb3J0UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L3RvdGFscycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdleGNsdWRlcycsIGV4Y2x1ZGVzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0d28tZmFjdG9yIHJlY292ZXJ5IGNvZGVzIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byByZXRyaWV2ZSBUd28gRmFjdG9yIHJlY292ZXJ5IGNvZGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUd29GYWN0b3JSZWNvdmVyeUNvZGVzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3IvcmVjb3ZlcnktY29kZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgdXNlcidzIHR3by1mYWN0b3Igc3RhdHVzLlxuICAgKiBcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBzZWUgaWYgYSB1c2VyIHdpbGwgbmVlZCB0byBjb21wbGV0ZSBhIHR3by1mYWN0b3IgY2hhbGxlbmdlIHRvIGNvbXBsZXRlIGEgbG9naW4sXG4gICAqIGFuZCBvcHRpb25hbGx5IGlkZW50aWZ5IHRoZSBzdGF0ZSBvZiB0aGUgdHdvLWZhY3RvciB0cnVzdCBhY3Jvc3MgdmFyaW91cyBhcHBsaWNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1c2VyIElkIHRvIHJldHJpZXZlIHRoZSBUd28tRmFjdG9yIHN0YXR1cy5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBvcHRpb25hbCBhcHBsaWNhdGlvbklkIHRvIHZlcmlmeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHR3b0ZhY3RvclRydXN0SWQgVGhlIG9wdGlvbmFsIHR3by1mYWN0b3IgdHJ1c3QgSWQgdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JTdGF0dXNSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUd29GYWN0b3JTdGF0dXModXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlELCB0d29GYWN0b3JUcnVzdElkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zdGF0dXMnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0d29GYWN0b3JUcnVzdElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHVzZXIncyB0d28tZmFjdG9yIHN0YXR1cy5cbiAgICogXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2VlIGlmIGEgdXNlciB3aWxsIG5lZWQgdG8gY29tcGxldGUgYSB0d28tZmFjdG9yIGNoYWxsZW5nZSB0byBjb21wbGV0ZSBhIGxvZ2luLFxuICAgKiBhbmQgb3B0aW9uYWxseSBpZGVudGlmeSB0aGUgc3RhdGUgb2YgdGhlIHR3by1mYWN0b3IgdHJ1c3QgYWNyb3NzIHZhcmlvdXMgYXBwbGljYXRpb25zLiBUaGlzIG9wZXJhdGlvblxuICAgKiBwcm92aWRlcyBtb3JlIHBheWxvYWQgb3B0aW9ucyB0aGFuIHJldHJpZXZlVHdvRmFjdG9yU3RhdHVzLlxuICAgKlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclN0YXR1c1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNoZWNrIHRoZSBzdGF0dXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVR3b0ZhY3RvclN0YXR1c1dpdGhSZXF1ZXN0KHJlcXVlc3Q6IFR3b0ZhY3RvclN0YXR1c1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zdGF0dXMnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGFjdGlvbiBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgcGFzcyBpbiBudWxsIGZvciB0aGUgSWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIHRoZSB1c2VyXG4gICAqIGFjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IHBhc3MgaW4gbnVsbCBmb3IgdGhlIElkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCB0aGUgdXNlclxuICAgKiBhY3Rpb24gcmVhc29ucy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQWN0aW9uUmVhc29ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdXNlciBhY3Rpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckFjdGlvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGJ5IGEgY2hhbmdlIHBhc3N3b3JkIElkLiBUaGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgQVBJIGlzIHRvIHJldHJpZXZlIGEgdXNlciBhZnRlciB0aGUgZm9yZ290XG4gICAqIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZCBhbmQgeW91IG1heSBub3Qga25vdyB0aGUgdXNlcidzIGVtYWlsIG9yIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgdW5pcXVlIGNoYW5nZSBwYXNzd29yZCBJZCB0aGF0IHdhcyBzZW50IHZpYSBlbWFpbCBvciByZXR1cm5lZCBieSB0aGUgRm9yZ290IFBhc3N3b3JkIEFQSS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUNoYW5nZVBhc3N3b3JkSWQoY2hhbmdlUGFzc3dvcmRJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdjaGFuZ2VQYXNzd29yZElkJywgY2hhbmdlUGFzc3dvcmRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gZW1haWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlFbWFpbChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBsb2dpbklkLiBUaGUgbG9naW5JZCBjYW4gYmUgZWl0aGVyIHRoZSB1c2VybmFtZSBvciB0aGUgZW1haWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBlbWFpbCBvciB1c2VybmFtZSBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUxvZ2luSWQobG9naW5JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgbG9naW5JZCwgdXNpbmcgc3BlY2lmaWMgbG9naW5JZFR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9naW5JZCBUaGUgZW1haWwgb3IgdXNlcm5hbWUgb2YgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nPn0gbG9naW5JZFR5cGVzIFRoZSBpZGVudGl0eSB0eXBlcyB0aGF0IEZ1c2lvbkF1dGggd2lsbCBjb21wYXJlIHRoZSBsb2dpbklkIHRvLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckJ5TG9naW5JZFdpdGhMb2dpbklkVHlwZXMobG9naW5JZDogc3RyaW5nLCBsb2dpbklkVHlwZXM6IEFycmF5PFN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWQnLCBsb2dpbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbG9naW5JZFR5cGVzJywgbG9naW5JZFR5cGVzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiB1c2VybmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJuYW1lIFRoZSB1c2VybmFtZSBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeVVzZXJuYW1lKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJuYW1lJywgdXNlcm5hbWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBieSBhIHZlcmlmaWNhdGlvbklkLiBUaGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgQVBJIGlzIHRvIHJldHJpZXZlIGEgdXNlciBhZnRlciB0aGUgZm9yZ290XG4gICAqIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZCBhbmQgeW91IG1heSBub3Qga25vdyB0aGUgdXNlcidzIGVtYWlsIG9yIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyaWZpY2F0aW9uSWQgVGhlIHVuaXF1ZSB2ZXJpZmljYXRpb24gSWQgdGhhdCBoYXMgYmVlbiBzZXQgb24gdGhlIHVzZXIgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckJ5VmVyaWZpY2F0aW9uSWQodmVyaWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndmVyaWZpY2F0aW9uSWQnLCB2ZXJpZmljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSB1c2VyX2NvZGUgdGhhdCBpcyBwYXJ0IG9mIGFuIGluLXByb2dyZXNzIERldmljZSBBdXRob3JpemF0aW9uIEdyYW50LlxuICAgKiBcbiAgICogVGhpcyBBUEkgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHlvdXIgb3duIGxvZ2luIHdvcmtmbG93IHRvIGNvbXBsZXRlIGEgZGV2aWNlIGdyYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIFRoZSBjbGllbnQgSWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IFRoZSBjbGllbnQgSWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJDb2RlKGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHVzZXJfY29kZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgdXNlcl9jb2RlKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2RldmljZS91c2VyLWNvZGUnKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgdXNlcl9jb2RlIHRoYXQgaXMgcGFydCBvZiBhbiBpbi1wcm9ncmVzcyBEZXZpY2UgQXV0aG9yaXphdGlvbiBHcmFudC5cbiAgICogXG4gICAqIFRoaXMgQVBJIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBidWlsZCB5b3VyIG93biBsb2dpbiB3b3JrZmxvdyB0byBjb21wbGV0ZSBhIGRldmljZSBncmFudC5cbiAgICogXG4gICAqIFRoaXMgcmVxdWVzdCB3aWxsIHJlcXVpcmUgYW4gQVBJIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJfY29kZSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckNvZGVVc2luZ0FQSUtleSh1c2VyX2NvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvZGV2aWNlL3VzZXItY29kZScpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSB1c2VyX2NvZGUgdGhhdCBpcyBwYXJ0IG9mIGFuIGluLXByb2dyZXNzIERldmljZSBBdXRob3JpemF0aW9uIEdyYW50LlxuICAgKiBcbiAgICogVGhpcyBBUEkgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHlvdXIgb3duIGxvZ2luIHdvcmtmbG93IHRvIGNvbXBsZXRlIGEgZGV2aWNlIGdyYW50LlxuICAgKiBcbiAgICogVGhpcyByZXF1ZXN0IHdpbGwgcmVxdWlyZSBhbiBBUEkga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge1JldHJpZXZlVXNlckNvZGVVc2luZ0FQSUtleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHVzZXIgY29kZSByZXRyaWV2YWwgcmVxdWVzdCBpbmNsdWRpbmcgb3B0aW9uYWwgdGVuYW50SWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckNvZGVVc2luZ0FQSUtleVdpdGhSZXF1ZXN0KHJlcXVlc3Q6IFJldHJpZXZlVXNlckNvZGVVc2luZ0FQSUtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBpZiAocmVxdWVzdC50ZW5hbnRJZCAhPT0gbnVsbCAmJiByZXF1ZXN0LnRlbmFudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd0ZW5hbnRJZCcsIHJlcXVlc3QudGVuYW50SWQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnVzZXJfY29kZSAhPT0gbnVsbCAmJiByZXF1ZXN0LnVzZXJfY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgcmVxdWVzdC51c2VyX2NvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2RldmljZS91c2VyLWNvZGUnKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHVzZXJfY29kZSB0aGF0IGlzIHBhcnQgb2YgYW4gaW4tcHJvZ3Jlc3MgRGV2aWNlIEF1dGhvcml6YXRpb24gR3JhbnQuXG4gICAqIFxuICAgKiBUaGlzIEFQSSBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gYnVpbGQgeW91ciBvd24gbG9naW4gd29ya2Zsb3cgdG8gY29tcGxldGUgYSBkZXZpY2UgZ3JhbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmV0cmlldmVVc2VyQ29kZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHVzZXIgY29kZSByZXRyaWV2YWwgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29kZVdpdGhSZXF1ZXN0KHJlcXVlc3Q6IFJldHJpZXZlVXNlckNvZGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50X2lkICE9PSBudWxsICYmIHJlcXVlc3QuY2xpZW50X2lkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCByZXF1ZXN0LmNsaWVudF9pZCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LmNsaWVudF9zZWNyZXQgIT09IG51bGwgJiYgcmVxdWVzdC5jbGllbnRfc2VjcmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgcmVxdWVzdC5jbGllbnRfc2VjcmV0KTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QudGVuYW50SWQgIT09IG51bGwgJiYgcmVxdWVzdC50ZW5hbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgndGVuYW50SWQnLCByZXF1ZXN0LnRlbmFudElkLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC51c2VyX2NvZGUgIT09IG51bGwgJiYgcmVxdWVzdC51c2VyX2NvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3VzZXJfY29kZScsIHJlcXVlc3QudXNlcl9jb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9kZXZpY2UvdXNlci1jb2RlJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY29tbWVudHMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb21tZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckNvbW1lbnRzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbW1lbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29tbWVudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb21tZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBzaW5nbGUgVXNlciBjb25zZW50IGJ5IElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJDb25zZW50SWQgVGhlIFVzZXIgY29uc2VudCBJZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJDb25zZW50KHVzZXJDb25zZW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbnNlbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckNvbnNlbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY29uc2VudHMgZm9yIGEgVXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIFVzZXIncyBJZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJDb25zZW50cyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbnNlbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBVc2VySW5mbyBlbmRwb2ludCB0byByZXRyaWV2ZSBVc2VyIENsYWltcyBmcm9tIHRoZSBhY2Nlc3MgdG9rZW4gaXNzdWVkIGJ5IEZ1c2lvbkF1dGguXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlcmluZm9SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VySW5mb0Zyb21BY2Nlc3NUb2tlbihlbmNvZGVkSldUOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJpbmZvUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8VXNlcmluZm9SZXNwb25zZSwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi91c2VyaW5mbycpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHNpbmdsZSBJZGVudGl0eSBQcm92aWRlciB1c2VyIChsaW5rKS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGl0eVByb3ZpZGVyVXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIgaW4gdGhlIDNyZCBwYXJ0eSBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJMaW5rKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCwgaWRlbnRpdHlQcm92aWRlclVzZXJJZDogc3RyaW5nLCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xpbmsnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRlbnRpdHlQcm92aWRlcklkJywgaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRlbnRpdHlQcm92aWRlclVzZXJJZCcsIGlkZW50aXR5UHJvdmlkZXJVc2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGFsbCBJZGVudGl0eSBQcm92aWRlciB1c2VycyAobGlua3MpIGZvciB0aGUgdXNlci4gU3BlY2lmeSB0aGUgb3B0aW9uYWwgaWRlbnRpdHlQcm92aWRlcklkIHRvIHJldHJpZXZlIGxpbmtzIGZvciBhIHBhcnRpY3VsYXIgSWRQLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLiBTcGVjaWZ5IHRoaXMgdmFsdWUgdG8gcmVkdWNlIHRoZSBsaW5rcyByZXR1cm5lZCB0byB0aG9zZSBmb3IgYSBwYXJ0aWN1bGFyIElkUC5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyTGlua3NCeVVzZXJJZChpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbGluaycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZGVudGl0eVByb3ZpZGVySWQnLCBpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbG9naW4gcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cyBmb3IgYSBwYXJ0aWN1bGFyIHVzZXIgYnkgSWQuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIElkLCBpdCB3aWxsIG9ubHkgcmV0dXJuIHRoZVxuICAgKiBsb2dpbiBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBJZC5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVzZXJJZCBJZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckxvZ2luUmVwb3J0KGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHVzZXJJZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXBvcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC9sb2dpbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbG9naW4gcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cyBmb3IgYSBwYXJ0aWN1bGFyIHVzZXIgYnkgbG9naW4gSWQuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIElkLCBpdCB3aWxsIG9ubHkgcmV0dXJuIHRoZVxuICAgKiBsb2dpbiBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBJZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2luSWQgVGhlIHVzZXJJZCBJZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckxvZ2luUmVwb3J0QnlMb2dpbklkKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIGxvZ2luSWQ6IHN0cmluZywgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXBvcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC9sb2dpbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWQnLCBsb2dpbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsb2dpbiByZXBvcnQgYmV0d2VlbiB0aGUgdHdvIGluc3RhbnRzIGZvciBhIHBhcnRpY3VsYXIgdXNlciBieSBsb2dpbiBJZCwgdXNpbmcgc3BlY2lmaWMgbG9naW5JZFR5cGVzLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5IHJldHVybiB0aGVcbiAgICogbG9naW4gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSB1c2VySWQgaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZz59IGxvZ2luSWRUeXBlcyBUaGUgaWRlbnRpdHkgdHlwZXMgdGhhdCBGdXNpb25BdXRoIHdpbGwgY29tcGFyZSB0aGUgbG9naW5JZCB0by5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyTG9naW5SZXBvcnRCeUxvZ2luSWRBbmRMb2dpbklkVHlwZXMoYXBwbGljYXRpb25JZDogVVVJRCwgbG9naW5JZDogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgbG9naW5JZFR5cGVzOiBBcnJheTxTdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkVHlwZXMnLCBsb2dpbklkVHlwZXMpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGFzdCBudW1iZXIgb2YgbG9naW4gcmVjb3JkcyBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIGluaXRpYWwgcmVjb3JkLiBlLmcuIDAgaXMgdGhlIGxhc3QgbG9naW4sIDEwMCB3aWxsIGJlIHRoZSAxMDB0aCBtb3N0IHJlY2VudCBsb2dpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IChPcHRpb25hbCwgZGVmYXVsdHMgdG8gMTApIFRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyUmVjZW50TG9naW5zKHVzZXJJZDogVVVJRCwgb2Zmc2V0OiBudW1iZXIsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlY2VudExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVjZW50TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVjZW50LWxvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ29mZnNldCcsIG9mZnNldClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xpbWl0JywgbGltaXQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBmb3IgdGhlIGdpdmVuIElkLiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB1c2UgYW4gQVBJIGtleSwgaW5zdGVhZCBpdCB1c2VzIGEgSlNPTiBXZWIgVG9rZW4gKEpXVCkgZm9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyVXNpbmdKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEZ1c2lvbkF1dGggdmVyc2lvbiBzdHJpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcnNpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVWZXJzaW9uKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyc2lvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcnNpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS92ZXJzaW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBXZWJBdXRobiBjcmVkZW50aWFsIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWQgVGhlIElkIG9mIHRoZSBXZWJBdXRobiBjcmVkZW50aWFsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVXZWJBdXRobkNyZWRlbnRpYWwoaWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgV2ViQXV0aG4gY3JlZGVudGlhbHMgZm9yIHRoZSBnaXZlbiB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdXNlcidzIElELlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVXZWJBdXRobkNyZWRlbnRpYWxzRm9yVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHdlYmhvb2sgZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IHBhc3MgaW4gbnVsbCBmb3IgdGhlIElkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCB0aGUgd2ViaG9va3MuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0lkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+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+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBlbnRpdGllcyBmb3IgdGhlIGdpdmVuIElkcy4gSWYgYW55IElkIGlzIGludmFsaWQsIGl0IGlzIGlnbm9yZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gaWRzIFRoZSBlbnRpdHkgaWRzIHRvIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFbnRpdGllc0J5SWRzKGlkczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvc2VhcmNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkcycsIGlkcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgRW50aXR5IEdyYW50cyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RW50aXR5R3JhbnRTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eUdyYW50U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEVudGl0eUdyYW50cyhyZXF1ZXN0OiBFbnRpdHlHcmFudFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eUdyYW50U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5R3JhbnRTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS9ncmFudC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgZW50aXR5IHR5cGVzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEVudGl0eVR5cGVzKHJlcXVlc3Q6IEVudGl0eVR5cGVTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlIGV2ZW50IGxvZ3Mgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50TG9nU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFdmVudExvZ1NlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFdmVudExvZ3MocmVxdWVzdDogRXZlbnRMb2dTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFdmVudExvZ1NlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEV2ZW50TG9nU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vZXZlbnQtbG9nL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGdyb3VwIG1lbWJlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0dyb3VwTWVtYmVyU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cE1lbWJlclNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hHcm91cE1lbWJlcnMocmVxdWVzdDogR3JvdXBNZW1iZXJTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cE1lbWJlclNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEdyb3VwTWVtYmVyU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cC9tZW1iZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgZ3JvdXBzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtHcm91cFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoR3JvdXBzKHJlcXVlc3Q6IEdyb3VwU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3RzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaElQQWNjZXNzQ29udHJvbExpc3RzKHJlcXVlc3Q6IElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGlkZW50aXR5IHByb3ZpZGVycyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlclNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hJZGVudGl0eVByb3ZpZGVycyhyZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGtleXMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0tleVNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEtleXMocmVxdWVzdDogS2V5U2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXkvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgbGFtYmRhcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7TGFtYmRhU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoTGFtYmRhcyhyZXF1ZXN0OiBMYW1iZGFTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYS9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgbG9naW4gcmVjb3JkcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7TG9naW5SZWNvcmRTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVjb3JkU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaExvZ2luUmVjb3JkcyhyZXF1ZXN0OiBMb2dpblJlY29yZFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVjb3JkU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZWNvcmRTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9sb2dpbi1yZWNvcmQvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGVuYW50cyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VGVuYW50U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoVGVuYW50cyhyZXF1ZXN0OiBUZW5hbnRTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGVtZXMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1RoZW1lU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hUaGVtZXMocmVxdWVzdDogVGhlbWVTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZS9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB1c2VyIGNvbW1lbnRzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVc2VyQ29tbWVudFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbW1lbnRTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoVXNlckNvbW1lbnRzKHJlcXVlc3Q6IFVzZXJDb21tZW50U2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbW1lbnRTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29tbWVudFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb21tZW50L3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlcnMgZm9yIHRoZSBnaXZlbiBJZHMuIElmIGFueSBJZCBpcyBpbnZhbGlkLCBpdCBpcyBpZ25vcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGlkcyBUaGUgdXNlciBpZHMgdG8gc2VhcmNoIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBzZWFyY2hVc2Vyc0J5SWRzLCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHNlYXJjaFVzZXJzKGlkczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZHMnLCBpZHMpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlcnMgZm9yIHRoZSBnaXZlbiBJZHMuIElmIGFueSBJZCBpcyBpbnZhbGlkLCBpdCBpcyBpZ25vcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGlkcyBUaGUgdXNlciBJZHMgdG8gc2VhcmNoIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaFVzZXJzQnlJZHMoaWRzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkcycsIGlkcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gY29uc3RyYWludHMuIEZpZWxkcyB1c2VkOiBpZHMsIHF1ZXJ5LCBxdWVyeVN0cmluZywgbnVtYmVyT2ZSZXN1bHRzLCBvcmRlckJ5LCBzdGFydFJvdyxcbiAgICogICAgYW5kIHNvcnRGaWVsZHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hVc2Vyc0J5UXVlcnkocmVxdWVzdDogU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlcnMgZm9yIHRoZSBnaXZlbiBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGNvbnN0cmFpbnRzLiBGaWVsZHMgdXNlZDogaWRzLCBxdWVyeSwgcXVlcnlTdHJpbmcsIG51bWJlck9mUmVzdWx0cywgb3JkZXJCeSwgc3RhcnRSb3csXG4gICAqICAgIGFuZCBzb3J0RmllbGRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHNlYXJjaFVzZXJzQnlRdWVyeSwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBzZWFyY2hVc2Vyc0J5UXVlcnlTdHJpbmcocmVxdWVzdDogU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSB3ZWJob29rIGV2ZW50IGxvZ3Mgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1dlYmhvb2tFdmVudExvZ1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va0V2ZW50TG9nU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaFdlYmhvb2tFdmVudExvZ3MocmVxdWVzdDogV2ViaG9va0V2ZW50TG9nU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va0V2ZW50TG9nU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va0V2ZW50TG9nU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vd2ViaG9vay1ldmVudC1sb2cvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgd2ViaG9va3Mgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1dlYmhvb2tTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoV2ViaG9va3MocmVxdWVzdDogV2ViaG9va1NlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJob29rU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYW4gZW1haWwgdXNpbmcgYW4gZW1haWwgdGVtcGxhdGUgSWQuIFlvdSBjYW4gb3B0aW9uYWxseSBwcm92aWRlIDxjb2RlPnJlcXVlc3REYXRhPC9jb2RlPiB0byBhY2Nlc3Mga2V5IHZhbHVlXG4gICAqIHBhaXJzIGluIHRoZSBlbWFpbCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgVGhlIElkIGZvciB0aGUgdGVtcGxhdGUuXG4gICAqIEBwYXJhbSB7U2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlbmQgZW1haWwgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBzZW5kIHRoZSBlbWFpbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VuZFJlc3BvbnNlPj59XG4gICAqL1xuICBzZW5kRW1haWwoZW1haWxUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBTZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VuZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlbmRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3NlbmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW1haWxUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBvdXQgYW4gZW1haWwgdG8gYSBwYXJlbnQgdGhhdCB0aGV5IG5lZWQgdG8gcmVnaXN0ZXIgYW5kIGNyZWF0ZSBhIGZhbWlseSBvciBuZWVkIHRvIGxvZyBpbiBhbmQgYWRkIGEgY2hpbGQgdG8gdGhlaXIgZXhpc3RpbmcgZmFtaWx5LlxuICAgKlxuICAgKiBAcGFyYW0ge0ZhbWlseUVtYWlsUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgcGFyZW50IGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBzZW5kRmFtaWx5UmVxdWVzdEVtYWlsKHJlcXVlc3Q6IEZhbWlseUVtYWlsUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHkvcmVxdWVzdCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBwYXNzd29yZGxlc3MgYXV0aGVudGljYXRpb24gY29kZSBpbiBhbiBlbWFpbCB0byBjb21wbGV0ZSBsb2dpbi5cbiAgICpcbiAgICogQHBhcmFtIHtQYXNzd29yZGxlc3NTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgcGFzc3dvcmRsZXNzIHNlbmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBzZW5kIGFuIGVtYWlsIGNvbnRhaW5pbmcgYSBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBzZW5kUGFzc3dvcmRsZXNzQ29kZShyZXF1ZXN0OiBQYXNzd29yZGxlc3NTZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcGFzc3dvcmRsZXNzL3NlbmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBjb2RlIHRvIGFzc2lzdCBpbiBzZXR0aW5nIHVwIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gb3IgZGlzYWJsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclNlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBzZW5kIHRoZSBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gc2VuZFR3b0ZhY3RvckNvZGVGb3JFbmFibGVEaXNhYmxlLCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHNlbmRUd29GYWN0b3JDb2RlKHJlcXVlc3Q6IFR3b0ZhY3RvclNlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlbmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBjb2RlIHRvIGFzc2lzdCBpbiBzZXR0aW5nIHVwIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gb3IgZGlzYWJsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclNlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBzZW5kIHRoZSBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBzZW5kVHdvRmFjdG9yQ29kZUZvckVuYWJsZURpc2FibGUocmVxdWVzdDogVHdvRmFjdG9yU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGNvZGUgdG8gYWxsb3cgdGhlIGNvbXBsZXRpb24gb2YgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR3b0ZhY3RvcklkIFRoZSBJZCByZXR1cm5lZCBieSB0aGUgTG9naW4gQVBJIG5lY2Vzc2FyeSB0byBjb21wbGV0ZSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gc2VuZFR3b0ZhY3RvckNvZGVGb3JMb2dpblVzaW5nTWV0aG9kLCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHNlbmRUd29GYWN0b3JDb2RlRm9yTG9naW4odHdvRmFjdG9ySWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZW5kJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHR3b0ZhY3RvcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gY29kZSB0byBhbGxvdyB0aGUgY29tcGxldGlvbiBvZiBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHdvRmFjdG9ySWQgVGhlIElkIHJldHVybmVkIGJ5IHRoZSBMb2dpbiBBUEkgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yU2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIFR3byBGYWN0b3Igc2VuZCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIFR3byBGYWN0b3IgY29kZSB0byB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgc2VuZFR3b0ZhY3RvckNvZGVGb3JMb2dpblVzaW5nTWV0aG9kKHR3b0ZhY3RvcklkOiBzdHJpbmcsIHJlcXVlc3Q6IFR3b0ZhY3RvclNlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlbmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodHdvRmFjdG9ySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSB2ZXJpZmljYXRpb24gY29kZSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgdHJhbnNwb3J0IGZvciB0aGUgaWRlbnRpdHkgdHlwZSBiZWluZyB2ZXJpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgaWRlbnRpdHkgdmVyaWZ5IHNlbmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCBzZW5kIHRoZSBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBzZW5kVmVyaWZ5SWRlbnRpdHkocmVxdWVzdDogVmVyaWZ5U2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5L3ZlcmlmeS9zZW5kJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQmVnaW5zIGEgbG9naW4gcmVxdWVzdCBmb3IgYSAzcmQgcGFydHkgbG9naW4gdGhhdCByZXF1aXJlcyB1c2VyIGludGVyYWN0aW9uIHN1Y2ggYXMgSFlQUi5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIHRoaXJkLXBhcnR5IGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0aGlyZC1wYXJ0eSBsb2dpblxuICAgKiAgICBwcm92aWRlcnMgdGhhdCBGdXNpb25BdXRoIHVzZXMgdG8gcmVjb25jaWxlIHRoZSB1c2VyJ3MgYWNjb3VudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgc3RhcnRJZGVudGl0eVByb3ZpZGVyTG9naW4ocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9zdGFydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QgYnkgZ2VuZXJhdGluZyBhIHBhc3N3b3JkbGVzcyBjb2RlLiBUaGlzIGNvZGUgY2FuIGJlIHNlbnQgdG8gdGhlIFVzZXIgdXNpbmcgdGhlIFNlbmRcbiAgICogUGFzc3dvcmRsZXNzIENvZGUgQVBJIG9yIHVzaW5nIGEgbWVjaGFuaXNtIG91dHNpZGUgb2YgRnVzaW9uQXV0aC4gVGhlIHBhc3N3b3JkbGVzcyBsb2dpbiBpcyBjb21wbGV0ZWQgYnkgdXNpbmcgdGhlIFBhc3N3b3JkbGVzcyBMb2dpbiBBUEkgd2l0aCB0aGlzIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFzc3dvcmRsZXNzU3RhcnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBwYXNzd29yZGxlc3Mgc3RhcnQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBiZWdpbiB0aGUgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0UGFzc3dvcmRsZXNzTG9naW4ocmVxdWVzdDogUGFzc3dvcmRsZXNzU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZGxlc3NTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9wYXNzd29yZGxlc3Mvc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIFR3by1GYWN0b3IgbG9naW4gcmVxdWVzdCBieSBnZW5lcmF0aW5nIGEgdHdvLWZhY3RvciBpZGVudGlmaWVyLiBUaGlzIGNvZGUgY2FuIHRoZW4gYmUgc2VudCB0byB0aGUgVHdvIEZhY3RvciBTZW5kIFxuICAgKiBBUEkgKC9hcGkvdHdvLWZhY3Rvci9zZW5kKWluIG9yZGVyIHRvIHNlbmQgYSBvbmUtdGltZSB1c2UgY29kZSB0byBhIHVzZXIuIFlvdSBjYW4gYWxzbyB1c2Ugb25lLXRpbWUgdXNlIGNvZGUgcmV0dXJuZWQgXG4gICAqIHRvIHNlbmQgdGhlIGNvZGUgb3V0LW9mLWJhbmQuIFRoZSBUd28tRmFjdG9yIGxvZ2luIGlzIGNvbXBsZXRlZCBieSBtYWtpbmcgYSByZXF1ZXN0IHRvIHRoZSBUd28tRmFjdG9yIExvZ2luIFxuICAgKiBBUEkgKC9hcGkvdHdvLWZhY3Rvci9sb2dpbikuIHdpdGggdGhlIHR3by1mYWN0b3IgaWRlbnRpZmllciBhbmQgdGhlIG9uZS10aW1lIHVzZSBjb2RlLlxuICAgKiBcbiAgICogVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYWxsb3cgeW91IHRvIGJlZ2luIGEgVHdvLUZhY3RvciBsb2dpbiBvdXRzaWRlIGEgbm9ybWFsIGxvZ2luIHRoYXQgb3JpZ2luYXRlZCBmcm9tIHRoZSBMb2dpbiBBUEkgKC9hcGkvbG9naW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclN0YXJ0UmVxdWVzdH0gcmVxdWVzdCBUaGUgVHdvLUZhY3RvciBzdGFydCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGJlZ2luIHRoZSBUd28tRmFjdG9yIGxvZ2luIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0VHdvRmFjdG9yTG9naW4ocmVxdWVzdDogVHdvRmFjdG9yU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclN0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3N0YXJ0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSB2ZXJpZmljYXRpb24gb2YgYW4gaWRlbnRpdHkgYnkgZ2VuZXJhdGluZyBhIGNvZGUuIFRoaXMgY29kZSBjYW4gYmUgc2VudCB0byB0aGUgVXNlciB1c2luZyB0aGUgVmVyaWZ5IFNlbmQgQVBJXG4gICAqIFZlcmlmaWNhdGlvbiBDb2RlIEFQSSBvciB1c2luZyBhIG1lY2hhbmlzbSBvdXRzaWRlIG9mIEZ1c2lvbkF1dGguIFRoZSB2ZXJpZmljYXRpb24gaXMgY29tcGxldGVkIGJ5IHVzaW5nIHRoZSBWZXJpZnkgQ29tcGxldGUgQVBJIHdpdGggdGhpcyBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeVN0YXJ0UmVxdWVzdH0gcmVxdWVzdCBUaGUgaWRlbnRpdHkgdmVyaWZ5IHN0YXJ0IHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gYmVnaW4gdGhlIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVN0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0VmVyaWZ5SWRlbnRpdHkocmVxdWVzdDogVmVyaWZ5U3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeVN0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS92ZXJpZnkvc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255IGJ5IGdlbmVyYXRpbmcgYSBuZXcgY2hhbGxlbmdlIGZvciB0aGUgdXNlclxuICAgKlxuICAgKiBAcGFyYW0ge1dlYkF1dGhuU3RhcnRSZXF1ZXN0fSByZXF1ZXN0IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgbmVjZXNzYXJ5IGZvciBzdGFydGluZyB0aGUgYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5TdGFydFJlc3BvbnNlPj59XG4gICAqL1xuICBzdGFydFdlYkF1dGhuTG9naW4ocmVxdWVzdDogV2ViQXV0aG5TdGFydFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuU3RhcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJBdXRoblN0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9zdGFydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255IGJ5IGdlbmVyYXRpbmcgYSBuZXcgY2hhbGxlbmdlIGZvciB0aGUgdXNlclxuICAgKlxuICAgKiBAcGFyYW0ge1dlYkF1dGhuUmVnaXN0ZXJTdGFydFJlcXVlc3R9IHJlcXVlc3QgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBuZWNlc3NhcnkgZm9yIHN0YXJ0aW5nIHRoZSByZWdpc3RyYXRpb24gY2VyZW1vbnlcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0V2ViQXV0aG5SZWdpc3RyYXRpb24ocmVxdWVzdDogV2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9yZWdpc3Rlci9zdGFydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGxvZ2luIHVzaW5nIGEgMkZBIGNoYWxsZW5nZVxuICAgKlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvckxvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNyZWRlbnRpYWxzIHVzZWQgdG8gbG9nIHRoZW0gaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIHR3b0ZhY3RvckxvZ2luKHJlcXVlc3Q6IFR3b0ZhY3RvckxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYW4gQVBJIGtleSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIEFQSSBrZXkgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0FQSUtleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBBUEkga2V5IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlQVBJS2V5KGtleUlkOiBVVUlELCByZXF1ZXN0OiBBUElLZXlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBUElLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwaS1rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgYXBwbGljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBhcHBsaWNhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGFwcGxpY2F0aW9uIHJvbGUgd2l0aCB0aGUgZ2l2ZW4gSWQgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB0aGUgcm9sZSBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHJvbGVJZCBUaGUgSWQgb2YgdGhlIHJvbGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IHJvbGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUFwcGxpY2F0aW9uUm9sZShhcHBsaWNhdGlvbklkOiBVVUlELCByb2xlSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicm9sZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocm9sZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbm5lY3RvciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25uZWN0b3JJZCBUaGUgSWQgb2YgdGhlIGNvbm5lY3RvciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Q29ubmVjdG9yUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBjb25uZWN0b3IgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQsIHJlcXVlc3Q6IENvbm5lY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbm5lY3RvcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbnNlbnQgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29uc2VudElkIFRoZSBJZCBvZiB0aGUgY29uc2VudCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Q29uc2VudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUNvbnNlbnQoY29uc2VudElkOiBVVUlELCByZXF1ZXN0OiBDb25zZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29uc2VudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGVtYWlsIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCBUaGUgSWQgb2YgdGhlIGVtYWlsIHRlbXBsYXRlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbWFpbFRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IGVtYWlsIHRlbXBsYXRlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBFbWFpbFRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVtYWlsVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBFbnRpdHkgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VudGl0eVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBFbnRpdHkgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVFbnRpdHkoZW50aXR5SWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIEVudGl0eSBUeXBlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSBUeXBlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IEVudGl0eSBUeXBlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUVudGl0eVR5cGUoZW50aXR5VHlwZUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlUeXBlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwZXJtaXNzaW9uIHdpdGggdGhlIGdpdmVuIElkIGZvciB0aGUgZW50aXR5IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgZW50aXR5VHlwZSB0aGF0IHRoZSBwZXJtaXNzaW9uIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcGVybWlzc2lvbklkIFRoZSBJZCBvZiB0aGUgcGVybWlzc2lvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBwZXJtaXNzaW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUVudGl0eVR5cGVQZXJtaXNzaW9uKGVudGl0eVR5cGVJZDogVVVJRCwgcGVybWlzc2lvbklkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlUeXBlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicGVybWlzc2lvblwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocGVybWlzc2lvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBmYW1pbHkgd2l0aCBhIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIFRoZSBJZCBvZiB0aGUgZmFtaWx5IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtGYW1pbHlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IGZhbWlseSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUZhbWlseShmYW1pbHlJZDogVVVJRCwgcmVxdWVzdDogRmFtaWx5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RmFtaWx5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmYW1pbHlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBmb3JtIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZvcm1JZCBUaGUgSWQgb2YgdGhlIGZvcm0gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0Zvcm1SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgbmV3IGZvcm0gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+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+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJncmFudFwiKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGVuZC11c2VyIHByb3ZpZGVkIHVzZXJfY29kZSBmcm9tIHRoZSB1c2VyLWludGVyYWN0aW9uIG9mIHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbiBHcmFudC5cbiAgICogSWYgeW91IGJ1aWxkIHlvdXIgb3duIGFjdGl2YXRpb24gZm9ybSB5b3Ugc2hvdWxkIHZhbGlkYXRlIHRoZSB1c2VyIHByb3ZpZGVkIGNvZGUgcHJpb3IgdG8gYmVnaW5uaW5nIHRoZSBBdXRob3JpemF0aW9uIGdyYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIFRoZSBlbmQtdXNlciB2ZXJpZmljYXRpb24gY29kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCBUaGUgY2xpZW50IElkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB2YWxpZGF0ZURldmljZSh1c2VyX2NvZGU6IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9kZXZpY2UvdmFsaWRhdGUnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcl9jb2RlJywgdXNlcl9jb2RlKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignY2xpZW50X2lkJywgY2xpZW50X2lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGVuZC11c2VyIHByb3ZpZGVkIHVzZXJfY29kZSBmcm9tIHRoZSB1c2VyLWludGVyYWN0aW9uIG9mIHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbiBHcmFudC5cbiAgICogSWYgeW91IGJ1aWxkIHlvdXIgb3duIGFjdGl2YXRpb24gZm9ybSB5b3Ugc2hvdWxkIHZhbGlkYXRlIHRoZSB1c2VyIHByb3ZpZGVkIGNvZGUgcHJpb3IgdG8gYmVnaW5uaW5nIHRoZSBBdXRob3JpemF0aW9uIGdyYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1ZhbGlkYXRlRGV2aWNlUmVxdWVzdH0gcmVxdWVzdCBUaGUgZGV2aWNlIHZhbGlkYXRpb24gcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdmFsaWRhdGVEZXZpY2VXaXRoUmVxdWVzdChyZXF1ZXN0OiBWYWxpZGF0ZURldmljZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9kZXZpY2UvdmFsaWRhdGUnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignY2xpZW50X2lkJywgcmVxdWVzdC5jbGllbnRfaWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd0ZW5hbnRJZCcsIHJlcXVlc3QudGVuYW50SWQgIT0gbnVsbCA/IHJlcXVlc3QudGVuYW50SWQudG9TdHJpbmcoKSA6IG51bGwpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VyX2NvZGUnLCByZXF1ZXN0LnVzZXJfY29kZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBwcm92aWRlZCBKV1QgKGVuY29kZWQgSldUIHN0cmluZykgdG8gZW5zdXJlIHRoZSB0b2tlbiBpcyB2YWxpZC4gQSB2YWxpZCBhY2Nlc3MgdG9rZW4gaXMgcHJvcGVybHlcbiAgICogc2lnbmVkIGFuZCBub3QgZXhwaXJlZC5cbiAgICogPHA+XG4gICAqIFRoaXMgQVBJIG1heSBiZSB1c2VkIHRvIHZlcmlmeSB0aGUgSldUIGFzIHdlbGwgYXMgZGVjb2RlIHRoZSBlbmNvZGVkIEpXVCBpbnRvIGh1bWFuIHJlYWRhYmxlIGlkZW50aXR5IGNsYWltcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWYWxpZGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICB2YWxpZGF0ZUpXVChlbmNvZGVkSldUOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZhbGlkYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8VmFsaWRhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvdmFsaWRhdGUnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSXQncyBhIEpXVCB2ZW5kaW5nIG1hY2hpbmUhXG4gICAqIFxuICAgKiBJc3N1ZSBhIG5ldyBhY2Nlc3MgdG9rZW4gKEpXVCkgd2l0aCB0aGUgcHJvdmlkZWQgY2xhaW1zIGluIHRoZSByZXF1ZXN0LiBUaGlzIEpXVCBpcyBub3Qgc2NvcGVkIHRvIGEgdGVuYW50IG9yIHVzZXIsIGl0IGlzIGEgZnJlZSBmb3JtIFxuICAgKiB0b2tlbiB0aGF0IHdpbGwgY29udGFpbiB3aGF0IGNsYWltcyB5b3UgcHJvdmlkZS5cbiAgICogPHA+XG4gICAqIFRoZSBpYXQsIGV4cCBhbmQganRpIGNsYWltcyB3aWxsIGJlIGFkZGVkIGJ5IEZ1c2lvbkF1dGgsIGFsbCBvdGhlciBjbGFpbXMgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyLlxuICAgKiBcbiAgICogSWYgYSBUVEwgaXMgbm90IHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LCB0aGUgVFRMIHdpbGwgYmUgcmV0cmlldmVkIGZyb20gdGhlIGRlZmF1bHQgVGVuYW50IG9yIHRoZSBUZW5hbnQgc3BlY2lmaWVkIG9uIHRoZSByZXF1ZXN0IGVpdGhlciBcbiAgICogYnkgd2F5IG9mIHRoZSBYLUZ1c2lvbkF1dGgtVGVuYW50SWQgcmVxdWVzdCBoZWFkZXIsIG9yIGEgdGVuYW50IHNjb3BlZCBBUEkga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge0pXVFZlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBjbGFpbXMgZm9yIHRoaXMgSldULlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RWZW5kUmVzcG9uc2U+Pn1cbiAgICovXG4gIHZlbmRKV1QocmVxdWVzdDogSldUVmVuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXVFZlbmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxKV1RWZW5kUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvdmVuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1zIGEgZW1haWwgdmVyaWZpY2F0aW9uLiBUaGUgSWQgZ2l2ZW4gaXMgdXN1YWxseSBmcm9tIGFuIGVtYWlsIHNlbnQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJpZmljYXRpb25JZCBUaGUgZW1haWwgdmVyaWZpY2F0aW9uIElkIHNlbnQgdG8gdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byB2ZXJpZnlFbWFpbEFkZHJlc3MgYW5kIGNoYW5nZWQgdG8gdGFrZSBhIEpTT04gcmVxdWVzdCBib2R5LCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHZlcmlmeUVtYWlsKHZlcmlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHZlcmlmaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybXMgYSB1c2VyJ3MgZW1haWwgYWRkcmVzcy4gXG4gICAqIFxuICAgKiBUaGUgcmVxdWVzdCBib2R5IHdpbGwgY29udGFpbiB0aGUgdmVyaWZpY2F0aW9uSWQuIFlvdSBtYXkgYWxzbyBiZSByZXF1aXJlZCB0byBzZW5kIGEgb25lLXRpbWUgdXNlIGNvZGUgYmFzZWQgdXBvbiB5b3VyIGNvbmZpZ3VyYXRpb24uIFdoZW4gXG4gICAqIHRoZSB0ZW5hbnQgaXMgY29uZmlndXJlZCB0byBnYXRlIGEgdXNlciB1bnRpbCB0aGVpciBlbWFpbCBhZGRyZXNzIGlzIHZlcmlmaWVkLCB0aGlzIHByb2NlZHVyZXMgcmVxdWlyZXMgdHdvIHZhbHVlcyBpbnN0ZWFkIG9mIG9uZS4gXG4gICAqIFRoZSB2ZXJpZmljYXRpb25JZCBpcyBhIGhpZ2ggZW50cm9weSB2YWx1ZSBhbmQgdGhlIG9uZS10aW1lIHVzZSBjb2RlIGlzIGEgbG93IGVudHJvcHkgdmFsdWUgdGhhdCBpcyBlYXNpbHkgZW50ZXJlZCBpbiBhIHVzZXIgaW50ZXJhY3RpdmUgZm9ybS4gVGhlIFxuICAgKiB0d28gdmFsdWVzIHRvZ2V0aGVyIGFyZSBhYmxlIHRvIGNvbmZpcm0gYSB1c2VyJ3MgZW1haWwgYWRkcmVzcyBhbmQgbWFyayB0aGUgdXNlcidzIGVtYWlsIGFkZHJlc3MgYXMgdmVyaWZpZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5RW1haWxSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHZlcmlmaWNhdGlvbklkIGFuZCBvcHRpb25hbCBvbmUtdGltZSB1c2UgY29kZSBwYWlyZWQgd2l0aCB0aGUgdmVyaWZpY2F0aW9uSWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHZlcmlmeUVtYWlsQWRkcmVzcyhyZXF1ZXN0OiBWZXJpZnlFbWFpbFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRtaW5pc3RyYXRpdmVseSB2ZXJpZnkgYSB1c2VyJ3MgZW1haWwgYWRkcmVzcy4gVXNlIHRoaXMgbWV0aG9kIHRvIGJ5cGFzcyBlbWFpbCB2ZXJpZmljYXRpb24gZm9yIHRoZSB1c2VyLlxuICAgKiBcbiAgICogVGhlIHJlcXVlc3QgYm9keSB3aWxsIGNvbnRhaW4gdGhlIHVzZXJJZCB0byBiZSB2ZXJpZmllZC4gQW4gQVBJIGtleSBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgdGhlIHVzZXJJZCBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeUVtYWlsUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VySWQgdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB2ZXJpZnlFbWFpbEFkZHJlc3NCeVVzZXJJZChyZXF1ZXN0OiBWZXJpZnlFbWFpbFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRtaW5pc3RyYXRpdmVseSB2ZXJpZnkgYSB1c2VyIGlkZW50aXR5LlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeVJlcXVlc3R9IHJlcXVlc3QgVGhlIGlkZW50aXR5IHZlcmlmeSByZXF1ZXN0IHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gdG8gdmVyaWZ5IHRoZSBpZGVudGl0eS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdmVyaWZ5SWRlbnRpdHkocmVxdWVzdDogVmVyaWZ5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHkvdmVyaWZ5JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybXMgYW4gYXBwbGljYXRpb24gcmVnaXN0cmF0aW9uLiBUaGUgSWQgZ2l2ZW4gaXMgdXN1YWxseSBmcm9tIGFuIGVtYWlsIHNlbnQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJpZmljYXRpb25JZCBUaGUgcmVnaXN0cmF0aW9uIHZlcmlmaWNhdGlvbiBJZCBzZW50IHRvIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gdmVyaWZ5VXNlclJlZ2lzdHJhdGlvbiBhbmQgY2hhbmdlZCB0byB0YWtlIGEgSlNPTiByZXF1ZXN0IGJvZHksIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgdmVyaWZ5UmVnaXN0cmF0aW9uKHZlcmlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh2ZXJpZmljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1zIGEgdXNlcidzIHJlZ2lzdHJhdGlvbi4gXG4gICAqIFxuICAgKiBUaGUgcmVxdWVzdCBib2R5IHdpbGwgY29udGFpbiB0aGUgdmVyaWZpY2F0aW9uSWQuIFlvdSBtYXkgYWxzbyBiZSByZXF1aXJlZCB0byBzZW5kIGEgb25lLXRpbWUgdXNlIGNvZGUgYmFzZWQgdXBvbiB5b3VyIGNvbmZpZ3VyYXRpb24uIFdoZW4gXG4gICAqIHRoZSBhcHBsaWNhdGlvbiBpcyBjb25maWd1cmVkIHRvIGdhdGUgYSB1c2VyIHVudGlsIHRoZWlyIHJlZ2lzdHJhdGlvbiBpcyB2ZXJpZmllZCwgdGhpcyBwcm9jZWR1cmVzIHJlcXVpcmVzIHR3byB2YWx1ZXMgaW5zdGVhZCBvZiBvbmUuIFxuICAgKiBUaGUgdmVyaWZpY2F0aW9uSWQgaXMgYSBoaWdoIGVudHJvcHkgdmFsdWUgYW5kIHRoZSBvbmUtdGltZSB1c2UgY29kZSBpcyBhIGxvdyBlbnRyb3B5IHZhbHVlIHRoYXQgaXMgZWFzaWx5IGVudGVyZWQgaW4gYSB1c2VyIGludGVyYWN0aXZlIGZvcm0uIFRoZSBcbiAgICogdHdvIHZhbHVlcyB0b2dldGhlciBhcmUgYWJsZSB0byBjb25maXJtIGEgdXNlcidzIHJlZ2lzdHJhdGlvbiBhbmQgbWFyayB0aGUgdXNlcidzIHJlZ2lzdHJhdGlvbiBhcyB2ZXJpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlSZWdpc3RyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHZlcmlmaWNhdGlvbklkIGFuZCBvcHRpb25hbCBvbmUtdGltZSB1c2UgY29kZSBwYWlyZWQgd2l0aCB0aGUgdmVyaWZpY2F0aW9uSWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHZlcmlmeVVzZXJSZWdpc3RyYXRpb24ocmVxdWVzdDogVmVyaWZ5UmVnaXN0cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuXG4gIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICogUHJpdmF0ZSBtZXRob2RzXG4gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4gIC8qKlxuICAgKiBjcmVhdGVzIGEgcmVzdCBjbGllbnRcbiAgICpcbiAgICogQHJldHVybnMgVGhlIFJFU1RDbGllbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY2FsbC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc3RhcnQ8UlQsIEVSVD4oKTogSVJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFJULCBFUlQ+KClcbiAgICAgICAgICAgICAgIC53aXRoQXV0aG9yaXphdGlvbih0aGlzLmFwaUtleSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0QW5vbnltb3VzPFJULCBFUlQ+KCk6IElSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICBsZXQgY2xpZW50ID0gdGhpcy5jbGllbnRCdWlsZGVyLmJ1aWxkPFJULCBFUlQ+KHRoaXMuaG9zdCk7XG5cbiAgICBpZiAodGhpcy50ZW5hbnRJZCAhPSBudWxsKSB7XG4gICAgICBjbGllbnQud2l0aEhlYWRlcignWC1GdXNpb25BdXRoLVRlbmFudElkJywgdGhpcy50ZW5hbnRJZCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3JlZGVudGlhbHMgIT0gbnVsbCkge1xuICAgICAgY2xpZW50LndpdGhDcmVkZW50aWFscyh0aGlzLmNyZWRlbnRpYWxzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZ1c2lvbkF1dGhDbGllbnQ7XG5cbi8qKlxuICogQSAxMjggYml0IFVVSUQgaW4gc3RyaW5nIGZvcm1hdCBcIjgtNC00LTQtMTJcIiwgZm9yIGV4YW1wbGUgXCI1OEQ1RTIxMi0xNjVCLTRDQTAtOTA5Qi1DODZCOUNFRTAxMTFcIi5cbiAqL1xuZXhwb3J0IHR5cGUgVVVJRCA9IHN0cmluZztcblxuXG4vKipcbiAqIGRvbWFpbiBQT0pPIHRvIHJlcHJlc2VudCBBdXRoZW50aWNhdGlvbktleVxuICpcbiAqIEBhdXRob3Igc2FuamF5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5IHtcbiAgZXhwaXJhdGlvbkluc3RhbnQ/OiBudW1iZXI7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXBBY2Nlc3NDb250cm9sTGlzdElkPzogVVVJRDtcbiAga2V5Pzogc3RyaW5nO1xuICBrZXlNYW5hZ2VyPzogYm9vbGVhbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG1ldGFEYXRhPzogQVBJS2V5TWV0YURhdGE7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBlcm1pc3Npb25zPzogQVBJS2V5UGVybWlzc2lvbnM7XG4gIHJldHJpZXZhYmxlPzogYm9vbGVhbjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleU1ldGFEYXRhIHtcbiAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5UGVybWlzc2lvbnMge1xuICBlbmRwb2ludHM/OiBSZWNvcmQ8c3RyaW5nLCBBcnJheTxzdHJpbmc+Pjtcbn1cblxuLyoqXG4gKiBBdXRoZW50aWNhdGlvbiBrZXkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBTYW5qYXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBUElLZXlSZXF1ZXN0IHtcbiAgYXBpS2V5PzogQVBJS2V5O1xuICBzb3VyY2VLZXlJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQXV0aGVudGljYXRpb24ga2V5IHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFNhbmpheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleVJlc3BvbnNlIHtcbiAgYXBpS2V5PzogQVBJS2V5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NUb2tlbiB7XG4gIGFjY2Vzc190b2tlbj86IHN0cmluZztcbiAgZXhwaXJlc19pbj86IG51bWJlcjtcbiAgaWRfdG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hfdG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hfdG9rZW5faWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgdG9rZW5fdHlwZT86IFRva2VuVHlwZTtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBvYmplY3QgZm9yIGludHJvc3BlY3RpbmcgYW4gYWNjZXNzIHRva2VuLlxuICpcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NUb2tlbkludHJvc3BlY3RSZXF1ZXN0IHtcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICB0ZW5hbnRJZD86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHVzZXIgYWN0aW9uIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYWN0aW9uPzogQWN0aW9uRGF0YTtcbiAgYnJvYWRjYXN0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25EYXRhIHtcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGVtYWlsVXNlcj86IGJvb2xlYW47XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgbm90aWZ5VXNlcj86IGJvb2xlYW47XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcmVhc29uSWQ/OiBVVUlEO1xuICB1c2VyQWN0aW9uSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFRoZSB1c2VyIGFjdGlvbiByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uUmVzcG9uc2Uge1xuICBhY3Rpb24/OiBVc2VyQWN0aW9uTG9nO1xuICBhY3Rpb25zPzogQXJyYXk8VXNlckFjdGlvbkxvZz47XG59XG5cbi8qKlxuICogQXZhaWxhYmxlIEpTT04gV2ViIEFsZ29yaXRobXMgKEpXQSkgYXMgZGVzY3JpYmVkIGluIFJGQyA3NTE4IGF2YWlsYWJsZSBmb3IgdGhpcyBKV1QgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBBbGdvcml0aG0ge1xuICBFUzI1NiA9IFwiRVMyNTZcIixcbiAgRVMzODQgPSBcIkVTMzg0XCIsXG4gIEVTNTEyID0gXCJFUzUxMlwiLFxuICBIUzI1NiA9IFwiSFMyNTZcIixcbiAgSFMzODQgPSBcIkhTMzg0XCIsXG4gIEhTNTEyID0gXCJIUzUxMlwiLFxuICBQUzI1NiA9IFwiUFMyNTZcIixcbiAgUFMzODQgPSBcIlBTMzg0XCIsXG4gIFBTNTEyID0gXCJQUzUxMlwiLFxuICBSUzI1NiA9IFwiUlMyNTZcIixcbiAgUlMzODQgPSBcIlJTMzg0XCIsXG4gIFJTNTEyID0gXCJSUzUxMlwiLFxuICBub25lID0gXCJub25lXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGVBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1bmRsZUlkPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBrZXlJZD86IFVVSUQ7XG4gIHNjb3BlPzogc3RyaW5nO1xuICBzZXJ2aWNlc0lkPzogc3RyaW5nO1xuICB0ZWFtSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxlSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEFwcGxlQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1bmRsZUlkPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBrZXlJZD86IFVVSUQ7XG4gIHNjb3BlPzogc3RyaW5nO1xuICBzZXJ2aWNlc0lkPzogc3RyaW5nO1xuICB0ZWFtSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uIHtcbiAgYWNjZXNzQ29udHJvbENvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbkFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uO1xuICBhY3RpdmU/OiBib29sZWFuO1xuICBhdXRoZW50aWNhdGlvblRva2VuQ29uZmlndXJhdGlvbj86IEF1dGhlbnRpY2F0aW9uVG9rZW5Db25maWd1cmF0aW9uO1xuICBjbGVhblNwZWFrQ29uZmlndXJhdGlvbj86IENsZWFuU3BlYWtDb25maWd1cmF0aW9uO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW1haWxDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25FbWFpbENvbmZpZ3VyYXRpb247XG4gIGV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbkV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb247XG4gIGZvcm1Db25maWd1cmF0aW9uPzogQXBwbGljYXRpb25Gb3JtQ29uZmlndXJhdGlvbjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBqd3RDb25maWd1cmF0aW9uPzogSldUQ29uZmlndXJhdGlvbjtcbiAgbGFtYmRhQ29uZmlndXJhdGlvbj86IExhbWJkYUNvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2dpbkNvbmZpZ3VyYXRpb24/OiBMb2dpbkNvbmZpZ3VyYXRpb247XG4gIG11bHRpRmFjdG9yQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uTXVsdGlGYWN0b3JDb25maWd1cmF0aW9uO1xuICBuYW1lPzogc3RyaW5nO1xuICBvYXV0aENvbmZpZ3VyYXRpb24/OiBPQXV0aDJDb25maWd1cmF0aW9uO1xuICBwYXNzd29yZGxlc3NDb25maWd1cmF0aW9uPzogUGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbjtcbiAgcGhvbmVDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25QaG9uZUNvbmZpZ3VyYXRpb247XG4gIHJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24/OiBSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25EZWxldGVQb2xpY3k/OiBBcHBsaWNhdGlvblJlZ2lzdHJhdGlvbkRlbGV0ZVBvbGljeTtcbiAgcm9sZXM/OiBBcnJheTxBcHBsaWNhdGlvblJvbGU+O1xuICBzYW1sdjJDb25maWd1cmF0aW9uPzogU0FNTHYyQ29uZmlndXJhdGlvbjtcbiAgc2NvcGVzPzogQXJyYXk8QXBwbGljYXRpb25PQXV0aFNjb3BlPjtcbiAgc3RhdGU/OiBPYmplY3RTdGF0ZTtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0aGVtZUlkPzogVVVJRDtcbiAgdW5pdmVyc2FsQ29uZmlndXJhdGlvbj86IFVuaXZlcnNhbEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbjtcbiAgdW52ZXJpZmllZD86IFJlZ2lzdHJhdGlvblVudmVyaWZpZWRPcHRpb25zO1xuICB2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB2ZXJpZmljYXRpb25TdHJhdGVneT86IFZlcmlmaWNhdGlvblN0cmF0ZWd5O1xuICB2ZXJpZnlSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICB3ZWJBdXRobkNvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbldlYkF1dGhuQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkVtYWlsQ29uZmlndXJhdGlvbiB7XG4gIGVtYWlsVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZW1haWxWZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBlbWFpbFZlcmlmaWVkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZm9yZ290UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbklkSW5Vc2VPbkNyZWF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luSWRJblVzZU9uVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5OZXdEZXZpY2VFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpblN1c3BpY2lvdXNFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZGxlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFJlc2V0U3VjY2Vzc0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgc2V0UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RBZGRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RSZW1vdmVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhlbnRpY2F0aW9uVG9rZW5Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIGFjY2Vzc1Rva2VuUG9wdWxhdGVJZD86IFVVSUQ7XG4gIGlkVG9rZW5Qb3B1bGF0ZUlkPzogVVVJRDtcbiAgbXVsdGlGYWN0b3JSZXF1aXJlbWVudElkPzogVVVJRDtcbiAgc2FtbHYyUG9wdWxhdGVJZD86IFVVSUQ7XG4gIHNlbGZTZXJ2aWNlUmVnaXN0cmF0aW9uVmFsaWRhdGlvbklkPzogVVVJRDtcbiAgdXNlcmluZm9Qb3B1bGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2dpbkNvbmZpZ3VyYXRpb24ge1xuICBhbGxvd1Rva2VuUmVmcmVzaD86IGJvb2xlYW47XG4gIGdlbmVyYXRlUmVmcmVzaFRva2Vucz86IGJvb2xlYW47XG4gIHJlcXVpcmVBdXRoZW50aWNhdGlvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYmlydGhEYXRlPzogUmVxdWlyYWJsZTtcbiAgY29uZmlybVBhc3N3b3JkPzogYm9vbGVhbjtcbiAgZmlyc3ROYW1lPzogUmVxdWlyYWJsZTtcbiAgZm9ybUlkPzogVVVJRDtcbiAgZnVsbE5hbWU/OiBSZXF1aXJhYmxlO1xuICBsYXN0TmFtZT86IFJlcXVpcmFibGU7XG4gIGxvZ2luSWRUeXBlPzogTG9naW5JZFR5cGU7XG4gIG1pZGRsZU5hbWU/OiBSZXF1aXJhYmxlO1xuICBtb2JpbGVQaG9uZT86IFJlcXVpcmFibGU7XG4gIHByZWZlcnJlZExhbmd1YWdlcz86IFJlcXVpcmFibGU7XG4gIHR5cGU/OiBSZWdpc3RyYXRpb25UeXBlO1xufVxuXG4vLyAgICAgIFRoaXMgaXMgc2VwYXJhdGUgZnJvbSBJZGVudGl0eVR5cGUuXG5leHBvcnQgZW51bSBMb2dpbklkVHlwZSB7XG4gIGVtYWlsID0gXCJlbWFpbFwiLFxuICBwaG9uZU51bWJlciA9IFwicGhvbmVOdW1iZXJcIixcbiAgdXNlcm5hbWUgPSBcInVzZXJuYW1lXCJcbn1cblxuZXhwb3J0IGVudW0gUmVnaXN0cmF0aW9uVHlwZSB7XG4gIGJhc2ljID0gXCJiYXNpY1wiLFxuICBhZHZhbmNlZCA9IFwiYWR2YW5jZWRcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYXNzZXJ0aW9uRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24/OiBTQU1MdjJBc3NlcnRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbjtcbiAgYXVkaWVuY2U/OiBzdHJpbmc7XG4gIGF1dGhvcml6ZWRSZWRpcmVjdFVSTHM/OiBBcnJheTxzdHJpbmc+O1xuICBjYWxsYmFja1VSTD86IHN0cmluZztcbiAgZGVidWc/OiBib29sZWFuO1xuICBkZWZhdWx0VmVyaWZpY2F0aW9uS2V5SWQ/OiBVVUlEO1xuICBpbml0aWF0ZWRMb2dpbj86IFNBTUx2MklkUEluaXRpYXRlZExvZ2luQ29uZmlndXJhdGlvbjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBrZXlJZD86IFVVSUQ7XG4gIGxvZ2luSGludENvbmZpZ3VyYXRpb24/OiBMb2dpbkhpbnRDb25maWd1cmF0aW9uO1xuICBsb2dvdXQ/OiBTQU1MdjJMb2dvdXQ7XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgcmVxdWlyZVNpZ25lZFJlcXVlc3RzPzogYm9vbGVhbjtcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG4gIHhtbFNpZ25hdHVyZUxvY2F0aW9uPzogWE1MU2lnbmF0dXJlTG9jYXRpb247XG59XG5cbmV4cG9ydCBlbnVtIFNBTUxMb2dvdXRCZWhhdmlvciB7XG4gIEFsbFBhcnRpY2lwYW50cyA9IFwiQWxsUGFydGljaXBhbnRzXCIsXG4gIE9ubHlPcmlnaW5hdG9yID0gXCJPbmx5T3JpZ2luYXRvclwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyQXNzZXJ0aW9uRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZGlnZXN0QWxnb3JpdGhtPzogc3RyaW5nO1xuICBlbmNyeXB0aW9uQWxnb3JpdGhtPzogc3RyaW5nO1xuICBrZXlMb2NhdGlvbj86IHN0cmluZztcbiAga2V5VHJhbnNwb3J0QWxnb3JpdGhtPzogc3RyaW5nO1xuICBrZXlUcmFuc3BvcnRFbmNyeXB0aW9uS2V5SWQ/OiBVVUlEO1xuICBtYXNrR2VuZXJhdGlvbkZ1bmN0aW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkxvZ291dCB7XG4gIGJlaGF2aW9yPzogU0FNTExvZ291dEJlaGF2aW9yO1xuICBkZWZhdWx0VmVyaWZpY2F0aW9uS2V5SWQ/OiBVVUlEO1xuICBrZXlJZD86IFVVSUQ7XG4gIHJlcXVpcmVTaWduZWRSZXF1ZXN0cz86IGJvb2xlYW47XG4gIHNpbmdsZUxvZ291dD86IFNBTUx2MlNpbmdsZUxvZ291dDtcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyU2luZ2xlTG9nb3V0IGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGtleUlkPzogVVVJRDtcbiAgdXJsPzogc3RyaW5nO1xuICB4bWxTaWduYXR1cmVDMTRuTWV0aG9kPzogQ2Fub25pY2FsaXphdGlvbk1ldGhvZDtcbn1cblxuZXhwb3J0IGVudW0gWE1MU2lnbmF0dXJlTG9jYXRpb24ge1xuICBBc3NlcnRpb24gPSBcIkFzc2VydGlvblwiLFxuICBSZXNwb25zZSA9IFwiUmVzcG9uc2VcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uIHtcbiAgdWlJUEFjY2Vzc0NvbnRyb2xMaXN0SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEV2ZW50cyB0aGF0IGFyZSBib3VuZCB0byBhcHBsaWNhdGlvbnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25FdmVudCB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uRXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbiB7XG4gIHR3b0ZhY3RvclRydXN0SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkZvcm1Db25maWd1cmF0aW9uIHtcbiAgYWRtaW5SZWdpc3RyYXRpb25Gb3JtSWQ/OiBVVUlEO1xuICBzZWxmU2VydmljZUZvcm1Db25maWd1cmF0aW9uPzogU2VsZlNlcnZpY2VGb3JtQ29uZmlndXJhdGlvbjtcbiAgc2VsZlNlcnZpY2VGb3JtSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbk11bHRpRmFjdG9yQ29uZmlndXJhdGlvbiB7XG4gIGVtYWlsPzogTXVsdGlGYWN0b3JFbWFpbFRlbXBsYXRlO1xuICBsb2dpblBvbGljeT86IE11bHRpRmFjdG9yTG9naW5Qb2xpY3k7XG4gIHNtcz86IE11bHRpRmFjdG9yU01TVGVtcGxhdGU7XG4gIHRydXN0UG9saWN5PzogQXBwbGljYXRpb25NdWx0aUZhY3RvclRydXN0UG9saWN5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmFjdG9yRW1haWxUZW1wbGF0ZSB7XG4gIHRlbXBsYXRlSWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmFjdG9yU01TVGVtcGxhdGUge1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEFwcGxpY2F0aW9uTXVsdGlGYWN0b3JUcnVzdFBvbGljeSB7XG4gIEFueSA9IFwiQW55XCIsXG4gIFRoaXMgPSBcIlRoaXNcIixcbiAgTm9uZSA9IFwiTm9uZVwiXG59XG5cbi8qKlxuICogQSBjdXN0b20gT0F1dGggc2NvcGUgZm9yIGEgc3BlY2lmaWMgYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbk9BdXRoU2NvcGUge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlZmF1bHRDb25zZW50RGV0YWlsPzogc3RyaW5nO1xuICBkZWZhdWx0Q29uc2VudE1lc3NhZ2U/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIEFwcGxpY2F0aW9uIFNjb3BlIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlcXVlc3Qge1xuICBzY29wZT86IEFwcGxpY2F0aW9uT0F1dGhTY29wZTtcbn1cblxuLyoqXG4gKiBUaGUgQXBwbGljYXRpb24gU2NvcGUgQVBJIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25PQXV0aFNjb3BlUmVzcG9uc2Uge1xuICBzY29wZT86IEFwcGxpY2F0aW9uT0F1dGhTY29wZTtcbn1cblxuLyoqXG4gKiBIb2xkIGFwcGxpY2F0aW9uIHBob25lIGNvbmZpZ3VyYXRpb24gZm9yIHRlbXBsYXRlIG92ZXJyaWRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblBob25lQ29uZmlndXJhdGlvbiB7XG4gIGZvcmdvdFBhc3N3b3JkVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGlkZW50aXR5VXBkYXRlVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luSWRJblVzZU9uQ3JlYXRlVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luSWRJblVzZU9uVXBkYXRlVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luTmV3RGV2aWNlVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luU3VzcGljaW91c1RlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZGxlc3NUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRSZXNldFN1Y2Nlc3NUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRVcGRhdGVUZW1wbGF0ZUlkPzogVVVJRDtcbiAgc2V0UGFzc3dvcmRUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kQWRkVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHR3b0ZhY3Rvck1ldGhvZFJlbW92ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICB2ZXJpZmljYXRpb25Db21wbGV0ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICB2ZXJpZmljYXRpb25UZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBIEFwcGxpY2F0aW9uLWxldmVsIHBvbGljeSBmb3IgZGVsZXRpbmcgVXNlcnMuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblJlZ2lzdHJhdGlvbkRlbGV0ZVBvbGljeSB7XG4gIHVudmVyaWZpZWQ/OiBUaW1lQmFzZWREZWxldGVQb2xpY3k7XG59XG5cbi8qKlxuICogVGhlIEFwcGxpY2F0aW9uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb24/OiBBcHBsaWNhdGlvbjtcbiAgcm9sZT86IEFwcGxpY2F0aW9uUm9sZTtcbiAgc291cmNlQXBwbGljYXRpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogVGhlIEFwcGxpY2F0aW9uIEFQSSByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblJlc3BvbnNlIHtcbiAgYXBwbGljYXRpb24/OiBBcHBsaWNhdGlvbjtcbiAgYXBwbGljYXRpb25zPzogQXJyYXk8QXBwbGljYXRpb24+O1xuICByb2xlPzogQXBwbGljYXRpb25Sb2xlO1xufVxuXG4vKipcbiAqIEEgcm9sZSBnaXZlbiB0byBhIHVzZXIgZm9yIGEgc3BlY2lmaWMgYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uUm9sZSB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGlzRGVmYXVsdD86IGJvb2xlYW47XG4gIGlzU3VwZXJSb2xlPzogYm9vbGVhbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBBcHBsaWNhdGlvbnNcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGF0ZT86IE9iamVjdFN0YXRlO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIEFwcGxpY2F0aW9uc1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25TZWFyY2hSZXF1ZXN0IGV4dGVuZHMgRXhwYW5kYWJsZVJlcXVlc3Qge1xuICBzZWFyY2g/OiBBcHBsaWNhdGlvblNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEFwcGxpY2F0aW9uIHNlYXJjaCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25TZWFyY2hSZXNwb25zZSBleHRlbmRzIEV4cGFuZGFibGVSZXNwb25zZSB7XG4gIGFwcGxpY2F0aW9ucz86IEFycmF5PEFwcGxpY2F0aW9uPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQXBwbGljYXRpb24tbGV2ZWwgY29uZmlndXJhdGlvbiBmb3IgV2ViQXV0aG5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25XZWJBdXRobkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYm9vdHN0cmFwV29ya2Zsb3c/OiBBcHBsaWNhdGlvbldlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uO1xuICByZWF1dGhlbnRpY2F0aW9uV29ya2Zsb3c/OiBBcHBsaWNhdGlvbldlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbldlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyBhIHNpbXBsZSBhdHRhY2htZW50IHdpdGggYSBieXRlIGFycmF5LCBuYW1lIGFuZCBNSU1FIHR5cGUuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudCB7XG4gIGF0dGFjaG1lbnQ/OiBBcnJheTxudW1iZXI+O1xuICBtaW1lPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFVzZWQgdG8gY29tbXVuaWNhdGUgd2hldGhlciBhbmQgaG93IGF1dGhlbnRpY2F0b3IgYXR0ZXN0YXRpb24gc2hvdWxkIGJlIGRlbGl2ZXJlZCB0byB0aGUgUmVseWluZyBQYXJ0eVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2Uge1xuICBub25lID0gXCJub25lXCIsXG4gIGluZGlyZWN0ID0gXCJpbmRpcmVjdFwiLFxuICBkaXJlY3QgPSBcImRpcmVjdFwiLFxuICBlbnRlcnByaXNlID0gXCJlbnRlcnByaXNlXCJcbn1cblxuLyoqXG4gKiBVc2VkIHRvIGluZGljYXRlIHdoYXQgdHlwZSBvZiBhdHRlc3RhdGlvbiB3YXMgaW5jbHVkZWQgaW4gdGhlIGF1dGhlbnRpY2F0b3IgcmVzcG9uc2UgZm9yIGEgZ2l2ZW4gV2ViQXV0aG4gY3JlZGVudGlhbCBhdCB0aGUgdGltZSBpdCB3YXMgY3JlYXRlZFxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIEF0dGVzdGF0aW9uVHlwZSB7XG4gIGJhc2ljID0gXCJiYXNpY1wiLFxuICBzZWxmID0gXCJzZWxmXCIsXG4gIGF0dGVzdGF0aW9uQ2EgPSBcImF0dGVzdGF0aW9uQ2FcIixcbiAgYW5vbnltaXphdGlvbkNhID0gXCJhbm9ueW1pemF0aW9uQ2FcIixcbiAgbm9uZSA9IFwibm9uZVwiXG59XG5cbi8qKlxuICogQW4gYXVkaXQgbG9nLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogbnVtYmVyO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpbnNlcnRVc2VyPzogc3RyaW5nO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBuZXdWYWx1ZT86IGFueTtcbiAgb2xkVmFsdWU/OiBhbnk7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCB0byBpbmRpY2F0ZSBhbiBhdWRpdCBsb2cgd2FzIGNyZWF0ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhdWRpdExvZz86IEF1ZGl0TG9nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0V4cG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGNyaXRlcmlhPzogQXVkaXRMb2dTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ1JlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXVkaXRMb2c/OiBBdWRpdExvZztcbn1cblxuLyoqXG4gKiBBdWRpdCBsb2cgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dSZXNwb25zZSB7XG4gIGF1ZGl0TG9nPzogQXVkaXRMb2c7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGVuZD86IG51bWJlcjtcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgbmV3VmFsdWU/OiBzdHJpbmc7XG4gIG9sZFZhbHVlPzogc3RyaW5nO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIHN0YXJ0PzogbnVtYmVyO1xuICB1c2VyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEF1ZGl0TG9nU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQXVkaXQgbG9nIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nU2VhcmNoUmVzcG9uc2Uge1xuICBhdWRpdExvZ3M/OiBBcnJheTxBdWRpdExvZz47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBBdXRoZW50aWNhdGlvblRocmVhdHMge1xuICBJbXBvc3NpYmxlVHJhdmVsID0gXCJJbXBvc3NpYmxlVHJhdmVsXCJcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIDxhIGhyZWY9XCJodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4tMi8jYXV0aGVudGljYXRvci1hdHRhY2htZW50LW1vZGFsaXR5XCI+YXV0aGVudGljYXRvciBhdHRhY2htZW50IG1vZGFsaXR5PC9hPi5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBBdXRoZW50aWNhdG9yQXR0YWNobWVudCB7XG4gIHBsYXRmb3JtID0gXCJwbGF0Zm9ybVwiLFxuICBjcm9zc1BsYXRmb3JtID0gXCJjcm9zc1BsYXRmb3JtXCJcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIGF1dGhlbnRpY2F0b3IgYXR0YWNobWVudCBtb2RhbGl0eSBwcmVmZXJlbmNlIGZvciBhIFdlYkF1dGhuIHdvcmtmbG93LiBTZWUge0BsaW5rIEF1dGhlbnRpY2F0b3JBdHRhY2htZW50fVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIEF1dGhlbnRpY2F0b3JBdHRhY2htZW50UHJlZmVyZW5jZSB7XG4gIGFueSA9IFwiYW55XCIsXG4gIHBsYXRmb3JtID0gXCJwbGF0Zm9ybVwiLFxuICBjcm9zc1BsYXRmb3JtID0gXCJjcm9zc1BsYXRmb3JtXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aGVudGljYXRvckNvbmZpZ3VyYXRpb24ge1xuICBhbGdvcml0aG0/OiBUT1RQQWxnb3JpdGhtO1xuICBjb2RlTGVuZ3RoPzogbnVtYmVyO1xuICB0aW1lU3RlcD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gVE9UUEFsZ29yaXRobSB7XG4gIEhtYWNTSEExID0gXCJIbWFjU0hBMVwiLFxuICBIbWFjU0hBMjU2ID0gXCJIbWFjU0hBMjU2XCIsXG4gIEhtYWNTSEE1MTIgPSBcIkhtYWNTSEE1MTJcIlxufVxuXG4vKipcbiAqIFVzZWQgYnkgdGhlIFJlbHlpbmcgUGFydHkgdG8gc3BlY2lmeSB0aGVpciByZXF1aXJlbWVudHMgZm9yIGF1dGhlbnRpY2F0b3IgYXR0cmlidXRlcy4gRmllbGRzIHVzZSB0aGUgZGVwcmVjYXRlZCBcInJlc2lkZW50IGtleVwiIHRlcm1pbm9sb2d5IHRvIHJlZmVyXG4gKiB0byBjbGllbnQtc2lkZSBkaXNjb3ZlcmFibGUgY3JlZGVudGlhbHMgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBXZWJBdXRobiBMZXZlbCAxLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhIHtcbiAgYXV0aGVudGljYXRvckF0dGFjaG1lbnQ/OiBBdXRoZW50aWNhdG9yQXR0YWNobWVudDtcbiAgcmVxdWlyZVJlc2lkZW50S2V5PzogYm9vbGVhbjtcbiAgcmVzaWRlbnRLZXk/OiBSZXNpZGVudEtleVJlcXVpcmVtZW50O1xuICB1c2VyVmVyaWZpY2F0aW9uPzogVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50O1xufVxuXG4vLyBEbyBub3QgcmVxdWlyZSBhIHNldHRlciBmb3IgJ3R5cGUnLCBpdCBpcyBkZWZpbmVkIGJ5IHRoZSBjb25jcmV0ZSBjbGFzcyBhbmQgaXMgbm90IG11dGFibGVcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVidWc/OiBib29sZWFuO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogQ29ubmVjdG9yVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRWxhc3RpY1NlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYWNjdXJhdGVUb3RhbD86IGJvb2xlYW47XG4gIGlkcz86IEFycmF5PFVVSUQ+O1xuICBuZXh0UmVzdWx0cz86IHN0cmluZztcbiAgcXVlcnk/OiBzdHJpbmc7XG4gIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xuICBzb3J0RmllbGRzPzogQXJyYXk8U29ydEZpZWxkPjtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgRnVzaW9uQXV0aCBldmVudHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUV2ZW50IHtcbiAgY3JlYXRlSW5zdGFudD86IG51bWJlcjtcbiAgaWQ/OiBVVUlEO1xuICBpbmZvPzogRXZlbnRJbmZvO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHR5cGU/OiBFdmVudFR5cGU7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgcmVxdWVzdHMgdGhhdCBjYW4gY29udGFpbiBldmVudCBpbmZvcm1hdGlvbi4gVGhpcyBldmVudCBpbmZvcm1hdGlvbiBpcyB1c2VkIHdoZW4gc2VuZGluZyBXZWJob29rcyBvciBlbWFpbHNcbiAqIGR1cmluZyB0aGUgdHJhbnNhY3Rpb24uIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIGV2ZW50IGluZm9ybWF0aW9uIGlzIGNvcnJlY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGV2ZW50SW5mbz86IEV2ZW50SW5mbztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUV4cG9ydFJlcXVlc3Qge1xuICBkYXRlVGltZVNlY29uZHNGb3JtYXQ/OiBzdHJpbmc7XG4gIHpvbmVJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwge0BsaW5rIEdyb3VwfSBhbmQge0BsaW5rIEdyb3VwTWVtYmVyfSBldmVudHMuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlR3JvdXBFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGdyb3VwPzogR3JvdXA7XG59XG5cbi8vIERvIG5vdCByZXF1aXJlIGEgc2V0dGVyIGZvciAndHlwZScsIGl0IGlzIGRlZmluZWQgYnkgdGhlIGNvbmNyZXRlIGNsYXNzIGFuZCBpcyBub3QgbXV0YWJsZVxuZXhwb3J0IGludGVyZmFjZSBCYXNlSWRlbnRpdHlQcm92aWRlcjxEIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj86IFJlY29yZDxVVUlELCBEPjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYW1iZGFDb25maWd1cmF0aW9uPzogTGFtYmRhQ29uZmlndXJhdGlvbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxpbmtpbmdTdHJhdGVneT86IElkZW50aXR5UHJvdmlkZXJMaW5raW5nU3RyYXRlZ3k7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRlbmFudENvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8VVVJRCwgSWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb24+O1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHR5cGU/OiBJZGVudGl0eVByb3ZpZGVyVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFDb25maWd1cmF0aW9uIHtcbiAgcmVjb25jaWxlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjcmVhdGVSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUxvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICBtZXRhRGF0YT86IE1ldGFEYXRhO1xuICBuZXdEZXZpY2U/OiBib29sZWFuO1xuICBub0pXVD86IGJvb2xlYW47XG59XG5cbi8vIERvIG5vdCByZXF1aXJlIGEgc2V0dGVyIGZvciAndHlwZScsIGl0IGlzIGRlZmluZWQgYnkgdGhlIGNvbmNyZXRlIGNsYXNzIGFuZCBpcyBub3QgbXV0YWJsZVxuZXhwb3J0IGludGVyZmFjZSBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRyYW5zcG9ydD86IHN0cmluZztcbiAgdHlwZT86IE1lc3NlbmdlclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VTQU1MdjJJZGVudGl0eVByb3ZpZGVyPEQgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxEPiB7XG4gIGFzc2VydGlvbkRlY3J5cHRpb25Db25maWd1cmF0aW9uPzogU0FNTHYyQXNzZXJ0aW9uRGVjcnlwdGlvbkNvbmZpZ3VyYXRpb247XG4gIGVtYWlsQ2xhaW0/OiBzdHJpbmc7XG4gIGtleUlkPzogVVVJRDtcbiAgdW5pcXVlSWRDbGFpbT86IHN0cmluZztcbiAgdXNlTmFtZUlkRm9yRW1haWw/OiBib29sZWFuO1xuICB1c2VybmFtZUNsYWltPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG51bWJlck9mUmVzdWx0cz86IG51bWJlcjtcbiAgb3JkZXJCeT86IHN0cmluZztcbiAgc3RhcnRSb3c/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIHtAbGluayBVc2VyfS1yZWxhdGVkIGV2ZW50cy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VVc2VyRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eUluZm8ge1xuICB0eXBlPzogc3RyaW5nO1xuICB2YWx1ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEJyZWFjaGVkUGFzc3dvcmRTdGF0dXMge1xuICBOb25lID0gXCJOb25lXCIsXG4gIEV4YWN0TWF0Y2ggPSBcIkV4YWN0TWF0Y2hcIixcbiAgU3ViQWRkcmVzc01hdGNoID0gXCJTdWJBZGRyZXNzTWF0Y2hcIixcbiAgUGFzc3dvcmRPbmx5ID0gXCJQYXNzd29yZE9ubHlcIixcbiAgQ29tbW9uUGFzc3dvcmQgPSBcIkNvbW1vblBhc3N3b3JkXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWNoZWRQYXNzd29yZFRlbmFudE1ldHJpYyB7XG4gIGFjdGlvblJlcXVpcmVkPzogbnVtYmVyO1xuICBtYXRjaGVkQ29tbW9uUGFzc3dvcmRDb3VudD86IG51bWJlcjtcbiAgbWF0Y2hlZEV4YWN0Q291bnQ/OiBudW1iZXI7XG4gIG1hdGNoZWRQYXNzd29yZENvdW50PzogbnVtYmVyO1xuICBtYXRjaGVkU3ViQWRkcmVzc0NvdW50PzogbnVtYmVyO1xuICBwYXNzd29yZHNDaGVja2VkQ291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDT1JTQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhbGxvd0NyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgYWxsb3dlZEhlYWRlcnM/OiBBcnJheTxzdHJpbmc+O1xuICBhbGxvd2VkTWV0aG9kcz86IEFycmF5PEhUVFBNZXRob2Q+O1xuICBhbGxvd2VkT3JpZ2lucz86IEFycmF5PHN0cmluZz47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgZXhwb3NlZEhlYWRlcnM/OiBBcnJheTxzdHJpbmc+O1xuICBwcmVmbGlnaHRNYXhBZ2VJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogWE1MIGNhbm9uaWNhbGl6YXRpb24gbWV0aG9kIGVudW1lcmF0aW9uLiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBJZFAgYW5kIFNQIHNpZGUgb2YgRnVzaW9uQXV0aCBTQU1MLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBDYW5vbmljYWxpemF0aW9uTWV0aG9kIHtcbiAgZXhjbHVzaXZlID0gXCJleGNsdXNpdmVcIixcbiAgZXhjbHVzaXZlX3dpdGhfY29tbWVudHMgPSBcImV4Y2x1c2l2ZV93aXRoX2NvbW1lbnRzXCIsXG4gIGluY2x1c2l2ZSA9IFwiaW5jbHVzaXZlXCIsXG4gIGluY2x1c2l2ZV93aXRoX2NvbW1lbnRzID0gXCJpbmNsdXNpdmVfd2l0aF9jb21tZW50c1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIENhcHRjaGFNZXRob2Qge1xuICBHb29nbGVSZWNhcHRjaGFWMiA9IFwiR29vZ2xlUmVjYXB0Y2hhVjJcIixcbiAgR29vZ2xlUmVjYXB0Y2hhVjMgPSBcIkdvb2dsZVJlY2FwdGNoYVYzXCIsXG4gIEhDYXB0Y2hhID0gXCJIQ2FwdGNoYVwiLFxuICBIQ2FwdGNoYUVudGVycHJpc2UgPSBcIkhDYXB0Y2hhRW50ZXJwcmlzZVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGVudW0gQ2hhbmdlUGFzc3dvcmRSZWFzb24ge1xuICBBZG1pbmlzdHJhdGl2ZSA9IFwiQWRtaW5pc3RyYXRpdmVcIixcbiAgQnJlYWNoZWQgPSBcIkJyZWFjaGVkXCIsXG4gIEV4cGlyZWQgPSBcIkV4cGlyZWRcIixcbiAgVmFsaWRhdGlvbiA9IFwiVmFsaWRhdGlvblwiXG59XG5cbi8qKlxuICogQ2hhbmdlIHBhc3N3b3JkIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZVBhc3N3b3JkUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY2hhbmdlUGFzc3dvcmRJZD86IHN0cmluZztcbiAgY3VycmVudFBhc3N3b3JkPzogc3RyaW5nO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBsb2dpbklkVHlwZXM/OiBBcnJheTxzdHJpbmc+O1xuICBwYXNzd29yZD86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0cnVzdENoYWxsZW5nZT86IHN0cmluZztcbiAgdHJ1c3RUb2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDaGFuZ2UgcGFzc3dvcmQgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VQYXNzd29yZFJlc3BvbnNlIHtcbiAgb25lVGltZVBhc3N3b3JkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQ2xlYW5TcGVhayBjb25maWd1cmF0aW9uIGF0IHRoZSBzeXN0ZW0gYW5kIGFwcGxpY2F0aW9uIGxldmVsLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsZWFuU3BlYWtDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFwaUtleT86IHN0cmluZztcbiAgYXBwbGljYXRpb25JZHM/OiBBcnJheTxVVUlEPjtcbiAgdXJsPzogc3RyaW5nO1xuICB1c2VybmFtZU1vZGVyYXRpb24/OiBVc2VybmFtZU1vZGVyYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlcm5hbWVNb2RlcmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIENsaWVudEF1dGhlbnRpY2F0aW9uUG9saWN5IHtcbiAgUmVxdWlyZWQgPSBcIlJlcXVpcmVkXCIsXG4gIE5vdFJlcXVpcmVkID0gXCJOb3RSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZFdoZW5Vc2luZ1BLQ0UgPSBcIk5vdFJlcXVpcmVkV2hlblVzaW5nUEtDRVwiXG59XG5cbi8qKlxuICogQ29udGFpbnMgdGhlIHBhcmFtZXRlcnMgdXNlZCB0byBpbnRyb3NwZWN0IGFuIGFjY2VzcyB0b2tlbiB0aGF0IHdhcyBvYnRhaW5lZCB2aWEgdGhlIGNsaWVudCBjcmVkZW50aWFscyBncmFudC5cbiAqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50Q3JlZGVudGlhbHNBY2Nlc3NUb2tlbkludHJvc3BlY3RSZXF1ZXN0IHtcbiAgdGVuYW50SWQ/OiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IG9iamVjdCB0byBtYWtlIGEgQ2xpZW50IENyZWRlbnRpYWxzIGdyYW50IHJlcXVlc3QgdG8gb2J0YWluIGFuIGFjY2VzcyB0b2tlbi5cbiAqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50Q3JlZGVudGlhbHNHcmFudFJlcXVlc3Qge1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGdyYW50X3R5cGU/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB0ZW5hbnRJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclBvbGljeSB7XG4gIGNvbm5lY3RvcklkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBtaWdyYXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclJlcXVlc3Qge1xuICBjb25uZWN0b3I/OiBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclJlc3BvbnNlIHtcbiAgY29ubmVjdG9yPzogQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb247XG4gIGNvbm5lY3RvcnM/OiBBcnJheTxCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbj47XG59XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGNvbm5lY3RvcnMuIFRoaXMgZW51bSBpcyBzdG9yZWQgYXMgYW4gb3JkaW5hbCBvbiB0aGUgPGNvZGU+aWRlbnRpdGllczwvY29kZT4gdGFibGUsIG9yZGVyIG11c3QgYmUgbWFpbnRhaW5lZC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgZW51bSBDb25uZWN0b3JUeXBlIHtcbiAgRnVzaW9uQXV0aCA9IFwiRnVzaW9uQXV0aFwiLFxuICBHZW5lcmljID0gXCJHZW5lcmljXCIsXG4gIExEQVAgPSBcIkxEQVBcIlxufVxuXG4vKipcbiAqIE1vZGVscyBhIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnQge1xuICBjb25zZW50RW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgY291bnRyeU1pbmltdW1BZ2VGb3JTZWxmQ29uc2VudD86IExvY2FsaXplZEludGVnZXJzO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVmYXVsdE1pbmltdW1BZ2VGb3JTZWxmQ29uc2VudD86IG51bWJlcjtcbiAgZW1haWxQbHVzPzogRW1haWxQbHVzO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBtdWx0aXBsZVZhbHVlc0FsbG93ZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICB2YWx1ZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsUGx1cyBleHRlbmRzIEVuYWJsZWFibGUge1xuICBlbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBtYXhpbXVtVGltZVRvU2VuZEVtYWlsSW5Ib3Vycz86IG51bWJlcjtcbiAgbWluaW11bVRpbWVUb1NlbmRFbWFpbEluSG91cnM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgZm9yIFVzZXIgY29uc2VudCB0eXBlcy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFJlcXVlc3Qge1xuICBjb25zZW50PzogQ29uc2VudDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnRSZXNwb25zZSB7XG4gIGNvbnNlbnQ/OiBDb25zZW50O1xuICBjb25zZW50cz86IEFycmF5PENvbnNlbnQ+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgQ29uc2VudHNcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnRTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIENvbnNlbnRzXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IENvbnNlbnRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBDb25zZW50IHNlYXJjaCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFNlYXJjaFJlc3BvbnNlIHtcbiAgY29uc2VudHM/OiBBcnJheTxDb25zZW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIENvbnNlbnRTdGF0dXMge1xuICBBY3RpdmUgPSBcIkFjdGl2ZVwiLFxuICBSZXZva2VkID0gXCJSZXZva2VkXCJcbn1cblxuLyoqXG4gKiBTdGF0dXMgZm9yIGNvbnRlbnQgbGlrZSB1c2VybmFtZXMsIHByb2ZpbGUgYXR0cmlidXRlcywgZXRjLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBDb250ZW50U3RhdHVzIHtcbiAgQUNUSVZFID0gXCJBQ1RJVkVcIixcbiAgUEVORElORyA9IFwiUEVORElOR1wiLFxuICBSRUpFQ1RFRCA9IFwiUkVKRUNURURcIlxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGluYm91bmQgbGFtYmRhIHBhcmFtZXRlciAnY29udGV4dCcgZm9yIE1GQSBSZXF1aXJlZCBsYW1iZGFzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHQge1xuICBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgYWN0aW9uPzogTXVsdGlGYWN0b3JBY3Rpb247XG4gIGFwcGxpY2F0aW9uPzogQXBwbGljYXRpb247XG4gIGF1dGhlbnRpY2F0aW9uVGhyZWF0cz86IEFycmF5PEF1dGhlbnRpY2F0aW9uVGhyZWF0cz47XG4gIGV2ZW50SW5mbz86IEV2ZW50SW5mbztcbiAgbWZhVHJ1c3Q/OiBUcnVzdDtcbiAgcG9saWNpZXM/OiBQb2xpY2llcztcbn1cblxuLyoqXG4gKiBBIG51bWJlciBpZGVudGlmeWluZyBhIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtLiBWYWx1ZXMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgPGFcbiAqIGhyZWY9XCJodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jb3NlL2Nvc2UueGh0bWwjYWxnb3JpdGhtc1wiPklBTkEgQ09TRSBBbGdvcml0aG1zIHJlZ2lzdHJ5PC9hPlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIENvc2VBbGdvcml0aG1JZGVudGlmaWVyIHtcbiAgRVMyNTYgPSBcIlNIQTI1NndpdGhFQ0RTQVwiLFxuICBFUzM4NCA9IFwiU0hBMzg0d2l0aEVDRFNBXCIsXG4gIEVTNTEyID0gXCJTSEE1MTJ3aXRoRUNEU0FcIixcbiAgUlMyNTYgPSBcIlNIQTI1NndpdGhSU0FcIixcbiAgUlMzODQgPSBcIlNIQTM4NHdpdGhSU0FcIixcbiAgUlM1MTIgPSBcIlNIQTUxMndpdGhSU0FcIixcbiAgUFMyNTYgPSBcIlNIQS0yNTZcIixcbiAgUFMzODQgPSBcIlNIQS0zODRcIixcbiAgUFM1MTIgPSBcIlNIQS01MTJcIlxufVxuXG4vKipcbiAqIENPU0UgRWxsaXB0aWMgQ3VydmUgaWRlbnRpZmllciB0byBkZXRlcm1pbmUgd2hpY2ggZWxsaXB0aWMgY3VydmUgdG8gdXNlIHdpdGggYSBnaXZlbiBrZXlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBDb3NlRWxsaXB0aWNDdXJ2ZSB7XG4gIFJlc2VydmVkID0gXCJSZXNlcnZlZFwiLFxuICBQMjU2ID0gXCJQMjU2XCIsXG4gIFAzODQgPSBcIlAzODRcIixcbiAgUDUyMSA9IFwiUDUyMVwiLFxuICBYMjU1MTkgPSBcIlgyNTUxOVwiLFxuICBYNDQ4ID0gXCJYNDQ4XCIsXG4gIEVkMjU1MTkgPSBcIkVkMjU1MTlcIixcbiAgRWQ0NDggPSBcIkVkNDQ4XCIsXG4gIFNlY3AyNTZrMSA9IFwiU2VjcDI1NmsxXCJcbn1cblxuLyoqXG4gKiBDT1NFIGtleSB0eXBlXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gQ29zZUtleVR5cGUge1xuICBSZXNlcnZlZCA9IFwiMFwiLFxuICBPS1AgPSBcIjFcIixcbiAgRUMyID0gXCIyXCIsXG4gIFJTQSA9IFwiM1wiLFxuICBTeW1tZXRyaWMgPSBcIjRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvdW50IHtcbiAgY291bnQ/OiBudW1iZXI7XG4gIGludGVydmFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBvdXRwdXQgZm9yIHRoZSB7QGNvZGUgY3JlZFByb3BzfSBleHRlbnNpb25cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxQcm9wZXJ0aWVzT3V0cHV0IHtcbiAgcms/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgZGFpbHkgYWN0aXZlIHVzZXIgcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlIHtcbiAgZGFpbHlBY3RpdmVVc2Vycz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3Qgb2JqZWN0IHRvIGFwcHJvdmUgYSBkZXZpY2UgZ3JhbnQuXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUFwcHJvdmFsUmVxdWVzdCB7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcl9jb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VBcHByb3ZhbFJlc3BvbnNlIHtcbiAgZGV2aWNlR3JhbnRTdGF0dXM/OiBzdHJpbmc7XG4gIGRldmljZUluZm8/OiBEZXZpY2VJbmZvO1xuICBpZGVudGl0eVByb3ZpZGVyTGluaz86IElkZW50aXR5UHJvdmlkZXJMaW5rO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUF1dGhvcml6YXRpb25SZXF1ZXN0IHtcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VJbmZvIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhc3RBY2Nlc3NlZEFkZHJlc3M/OiBzdHJpbmc7XG4gIGxhc3RBY2Nlc3NlZEluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIERldmljZVR5cGUge1xuICBCUk9XU0VSID0gXCJCUk9XU0VSXCIsXG4gIERFU0tUT1AgPSBcIkRFU0tUT1BcIixcbiAgTEFQVE9QID0gXCJMQVBUT1BcIixcbiAgTU9CSUxFID0gXCJNT0JJTEVcIixcbiAgT1RIRVIgPSBcIk9USEVSXCIsXG4gIFNFUlZFUiA9IFwiU0VSVkVSXCIsXG4gIFRBQkxFVCA9IFwiVEFCTEVUXCIsXG4gIFRWID0gXCJUVlwiLFxuICBVTktOT1dOID0gXCJVTktOT1dOXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVJlc3BvbnNlIHtcbiAgZGV2aWNlX2NvZGU/OiBzdHJpbmc7XG4gIGV4cGlyZXNfaW4/OiBudW1iZXI7XG4gIGludGVydmFsPzogbnVtYmVyO1xuICB1c2VyX2NvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbl91cmk/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbl91cmlfY29tcGxldGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVVzZXJDb2RlUmVzcG9uc2Uge1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGRldmljZUluZm8/OiBEZXZpY2VJbmZvO1xuICBleHBpcmVzX2luPzogbnVtYmVyO1xuICBwZW5kaW5nSWRQTGluaz86IFBlbmRpbmdJZFBMaW5rO1xuICBzY29wZT86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1c2VyX2NvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBkaXNwbGF5YWJsZSByYXcgbG9naW4gdGhhdCBpbmNsdWRlcyBhcHBsaWNhdGlvbiBuYW1lIGFuZCB1c2VyIGxvZ2luSWQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcGxheWFibGVSYXdMb2dpbiBleHRlbmRzIFJhd0xvZ2luIHtcbiAgYXBwbGljYXRpb25OYW1lPzogc3RyaW5nO1xuICBsb2NhdGlvbj86IExvY2F0aW9uO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBsb2dpbklkVHlwZT86IElkZW50aXR5VHlwZTtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFsbCBpZGVudGl0eSBwcm92aWRlcnMgdGhhdCBjYW4gYmUgZG9tYWluIGJhc2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvbWFpbkJhc2VkSWRlbnRpdHlQcm92aWRlciB7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyBhbiBhYnN0cmFjdGlvbiBvZiBhIHNpbXBsZSBlbWFpbCBtZXNzYWdlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsIHtcbiAgYXR0YWNobWVudHM/OiBBcnJheTxBdHRhY2htZW50PjtcbiAgYmNjPzogQXJyYXk8RW1haWxBZGRyZXNzPjtcbiAgY2M/OiBBcnJheTxFbWFpbEFkZHJlc3M+O1xuICBmcm9tPzogRW1haWxBZGRyZXNzO1xuICBodG1sPzogc3RyaW5nO1xuICByZXBseVRvPzogRW1haWxBZGRyZXNzO1xuICBzdWJqZWN0Pzogc3RyaW5nO1xuICB0ZXh0Pzogc3RyaW5nO1xuICB0bz86IEFycmF5PEVtYWlsQWRkcmVzcz47XG59XG5cbi8qKlxuICogQW4gZW1haWwgYWRkcmVzcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEFkZHJlc3Mge1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICBkaXNwbGF5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsQ29uZmlndXJhdGlvbiB7XG4gIGFkZGl0aW9uYWxIZWFkZXJzPzogQXJyYXk8RW1haWxIZWFkZXI+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRlZmF1bHRGcm9tRW1haWw/OiBzdHJpbmc7XG4gIGRlZmF1bHRGcm9tTmFtZT86IHN0cmluZztcbiAgZW1haWxVcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBlbWFpbFZlcmlmaWVkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZm9yZ290UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBob3N0Pzogc3RyaW5nO1xuICBpbXBsaWNpdEVtYWlsVmVyaWZpY2F0aW9uQWxsb3dlZD86IGJvb2xlYW47XG4gIGxvZ2luSWRJblVzZU9uQ3JlYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5JZEluVXNlT25VcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbk5ld0RldmljZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luU3VzcGljaW91c0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICBwYXNzd29yZGxlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFJlc2V0U3VjY2Vzc0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcG9ydD86IG51bWJlcjtcbiAgcHJvcGVydGllcz86IHN0cmluZztcbiAgc2VjdXJpdHk/OiBFbWFpbFNlY3VyaXR5VHlwZTtcbiAgc2V0UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RBZGRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RSZW1vdmVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB1bnZlcmlmaWVkPzogRW1haWxVbnZlcmlmaWVkT3B0aW9ucztcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHZlcmlmaWNhdGlvblN0cmF0ZWd5PzogVmVyaWZpY2F0aW9uU3RyYXRlZ3k7XG4gIHZlcmlmeUVtYWlsPzogYm9vbGVhbjtcbiAgdmVyaWZ5RW1haWxXaGVuQ2hhbmdlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIEVtYWlsU2VjdXJpdHlUeXBlIHtcbiAgTk9ORSA9IFwiTk9ORVwiLFxuICBTU0wgPSBcIlNTTFwiLFxuICBUTFMgPSBcIlRMU1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsSGVhZGVyIHtcbiAgbmFtZT86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3RvcmVzIGFuIGVtYWlsIHRlbXBsYXRlIHVzZWQgdG8gc2VuZCBlbWFpbHMgdG8gdXNlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZSB7XG4gIGRlZmF1bHRGcm9tTmFtZT86IHN0cmluZztcbiAgZGVmYXVsdEh0bWxUZW1wbGF0ZT86IHN0cmluZztcbiAgZGVmYXVsdFN1YmplY3Q/OiBzdHJpbmc7XG4gIGRlZmF1bHRUZXh0VGVtcGxhdGU/OiBzdHJpbmc7XG4gIGZyb21FbWFpbD86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9jYWxpemVkRnJvbU5hbWVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbG9jYWxpemVkSHRtbFRlbXBsYXRlcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIGxvY2FsaXplZFN1YmplY3RzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbG9jYWxpemVkVGV4dFRlbXBsYXRlcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW1haWwgdGVtcGxhdGUgcmVxdWVzdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlUmVxdWVzdCB7XG4gIGVtYWlsVGVtcGxhdGU/OiBFbWFpbFRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEVtYWlsIHRlbXBsYXRlIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVSZXNwb25zZSB7XG4gIGVtYWlsVGVtcGxhdGU/OiBFbWFpbFRlbXBsYXRlO1xuICBlbWFpbFRlbXBsYXRlcz86IEFycmF5PEVtYWlsVGVtcGxhdGU+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgRW1haWwgdGVtcGxhdGVzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW1haWwgdGVtcGxhdGVzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZVNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBFbWFpbFRlbXBsYXRlU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogRW1haWwgdGVtcGxhdGUgc2VhcmNoIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZVNlYXJjaFJlc3BvbnNlIHtcbiAgZW1haWxUZW1wbGF0ZXM/OiBBcnJheTxFbWFpbFRlbXBsYXRlPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVW52ZXJpZmllZE9wdGlvbnMge1xuICBhbGxvd0VtYWlsQ2hhbmdlV2hlbkdhdGVkPzogYm9vbGVhbjtcbiAgYmVoYXZpb3I/OiBVbnZlcmlmaWVkQmVoYXZpb3I7XG59XG5cbi8qKlxuICogU29tZXRoaW5nIHRoYXQgY2FuIGJlIGVuYWJsZWQgYW5kIHRodXMgYWxzbyBkaXNhYmxlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5hYmxlYWJsZSB7XG4gIGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBlbnRpdHkgdGhhdCBhIHVzZXIgY2FuIGJlIGdyYW50ZWQgcGVybWlzc2lvbnMgdG8uIE9yIGFuIGVudGl0eSB0aGF0IGNhbiBiZSBncmFudGVkIHBlcm1pc3Npb25zIHRvIGFub3RoZXIgZW50aXR5LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eSB7XG4gIGNsaWVudElkPzogc3RyaW5nO1xuICBjbGllbnRTZWNyZXQ/OiBzdHJpbmc7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwYXJlbnRJZD86IFVVSUQ7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdHlwZT86IEVudGl0eVR5cGU7XG59XG5cbi8qKlxuICogQSBncmFudCBmb3IgYW4gZW50aXR5IHRvIGEgdXNlciBvciBhbm90aGVyIGVudGl0eS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbnRpdHk/OiBFbnRpdHk7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHBlcm1pc3Npb25zPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVjaXBpZW50RW50aXR5SWQ/OiBVVUlEO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEVudGl0eSBncmFudCBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R3JhbnRSZXF1ZXN0IHtcbiAgZ3JhbnQ/OiBFbnRpdHlHcmFudDtcbn1cblxuLyoqXG4gKiBFbnRpdHkgZ3JhbnQgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFJlc3BvbnNlIHtcbiAgZ3JhbnQ/OiBFbnRpdHlHcmFudDtcbiAgZ3JhbnRzPzogQXJyYXk8RW50aXR5R3JhbnQ+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgZW50aXR5IGdyYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgZW50aXR5SWQ/OiBVVUlEO1xuICBuYW1lPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBlbnRpdHkgZ3JhbnRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEVudGl0eUdyYW50U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0eSBncmFudHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R3JhbnRTZWFyY2hSZXNwb25zZSB7XG4gIGdyYW50cz86IEFycmF5PEVudGl0eUdyYW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRW50aXR5IEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlSZXF1ZXN0IHtcbiAgZW50aXR5PzogRW50aXR5O1xufVxuXG4vKipcbiAqIEVudGl0eSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVJlc3BvbnNlIHtcbiAgZW50aXR5PzogRW50aXR5O1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdGhlIGVudGl0eSBxdWVyeS4gSXQgcHJvdmlkZXMgYSBidWlsZCBwYXR0ZXJuIGFzIHdlbGwgYXMgcHVibGljIGZpZWxkcyBmb3IgdXNlIG9uIGZvcm1zIGFuZCBpbiBhY3Rpb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZUVsYXN0aWNTZWFyY2hDcml0ZXJpYSB7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0aWVzXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogRW50aXR5U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0aWVzXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZWFyY2hSZXNwb25zZSB7XG4gIGVudGl0aWVzPzogQXJyYXk8RW50aXR5PjtcbiAgbmV4dFJlc3VsdHM/OiBzdHJpbmc7XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBlbnRpdHkgdHlwZSB0aGF0IGhhcyBhIHNwZWNpZmljIHNldCBvZiBwZXJtaXNzaW9ucy4gVGhlc2UgYXJlIGdsb2JhbCBvYmplY3RzIGFuZCBjYW4gYmUgdXNlZCBhY3Jvc3MgdGVuYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgand0Q29uZmlndXJhdGlvbj86IEVudGl0eUpXVENvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwZXJtaXNzaW9ucz86IEFycmF5PEVudGl0eVR5cGVQZXJtaXNzaW9uPjtcbn1cblxuLyoqXG4gKiBKV1QgQ29uZmlndXJhdGlvbiBmb3IgZW50aXRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5SldUQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhY2Nlc3NUb2tlbktleUlkPzogVVVJRDtcbiAgdGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzcGVjaWZpYyBlbnRpdHkgdHlwZSBwZXJtaXNzaW9uLiBUaGlzIHBlcm1pc3Npb24gY2FuIGJlIGdyYW50ZWQgdG8gdXNlcnMgb3Igb3RoZXIgZW50aXRpZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVBlcm1pc3Npb24ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXNEZWZhdWx0PzogYm9vbGVhbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW50aXR5IFR5cGUgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVSZXF1ZXN0IHtcbiAgZW50aXR5VHlwZT86IEVudGl0eVR5cGU7XG4gIHBlcm1pc3Npb24/OiBFbnRpdHlUeXBlUGVybWlzc2lvbjtcbn1cblxuLyoqXG4gKiBFbnRpdHkgVHlwZSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVSZXNwb25zZSB7XG4gIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlO1xuICBlbnRpdHlUeXBlcz86IEFycmF5PEVudGl0eVR5cGU+O1xuICBwZXJtaXNzaW9uPzogRW50aXR5VHlwZVBlcm1pc3Npb247XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBlbnRpdHkgdHlwZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXR5IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogRW50aXR5VHlwZVNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXNwb25zZSBmb3IgZW50aXR5IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVTZWFyY2hSZXNwb25zZSB7XG4gIGVudGl0eVR5cGVzPzogQXJyYXk8RW50aXR5VHlwZT47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVwaWNHYW1lc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFcGljIGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcGljR2FtZXNJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8RXBpY0dhbWVzQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBlcnJvci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcnJvciB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkIGVycm9yIGRvbWFpbiBvYmplY3QgdGhhdCBjYW4gYWxzbyBiZSB1c2VkIGFzIHRoZSByZXNwb25zZSBmcm9tIGFuIEFQSSBjYWxsLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVycm9ycyB7XG4gIGZpZWxkRXJyb3JzPzogUmVjb3JkPHN0cmluZywgQXJyYXk8RXJyb3I+PjtcbiAgZ2VuZXJhbEVycm9ycz86IEFycmF5PEVycm9yPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudENvbmZpZ3VyYXRpb24ge1xuICBldmVudHM/OiBSZWNvcmQ8RXZlbnRUeXBlLCBFdmVudENvbmZpZ3VyYXRpb25EYXRhPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudENvbmZpZ3VyYXRpb25EYXRhIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHRyYW5zYWN0aW9uVHlwZT86IFRyYW5zYWN0aW9uVHlwZTtcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCBhIHVzZXIgZXZlbnQgKGxvZ2luLCByZWdpc3RlciwgZXRjKSB0aGF0IGhlbHBzIGlkZW50aWZ5IHRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50IChsb2NhdGlvbiwgZGV2aWNlIHR5cGUsIE9TLCBldGMpLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50SW5mbyB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZXZpY2VEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZGV2aWNlTmFtZT86IHN0cmluZztcbiAgZGV2aWNlVHlwZT86IHN0cmluZztcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICBsb2NhdGlvbj86IExvY2F0aW9uO1xuICBvcz86IHN0cmluZztcbiAgdXNlckFnZW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IGxvZyB1c2VkIGludGVybmFsbHkgYnkgRnVzaW9uQXV0aCB0byBoZWxwIGRldmVsb3BlcnMgZGVidWcgaG9va3MsIFdlYmhvb2tzLCBlbWFpbCB0ZW1wbGF0ZXMsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZyB7XG4gIGlkPzogbnVtYmVyO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICB0eXBlPzogRXZlbnRMb2dUeXBlO1xufVxuXG4vKipcbiAqIEFuIEV2ZW50IFwiZXZlbnRcIiB0byBpbmRpY2F0ZSBhbiBldmVudCBsb2cgd2FzIGNyZWF0ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBldmVudExvZz86IEV2ZW50TG9nO1xufVxuXG4vKipcbiAqIEV2ZW50IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dSZXNwb25zZSB7XG4gIGV2ZW50TG9nPzogRXZlbnRMb2c7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciB0aGUgZXZlbnQgbG9nLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBlbmQ/OiBudW1iZXI7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIHN0YXJ0PzogbnVtYmVyO1xuICB0eXBlPzogRXZlbnRMb2dUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEV2ZW50TG9nU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogRXZlbnQgbG9nIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nU2VhcmNoUmVzcG9uc2Uge1xuICBldmVudExvZ3M/OiBBcnJheTxFdmVudExvZz47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV2ZW50IExvZyBUeXBlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBFdmVudExvZ1R5cGUge1xuICBJbmZvcm1hdGlvbiA9IFwiSW5mb3JtYXRpb25cIixcbiAgRGVidWcgPSBcIkRlYnVnXCIsXG4gIEVycm9yID0gXCJFcnJvclwiXG59XG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgZXZlbnQgaW5mb3JtYXRpb24uIFRoaXMgaXMgdGhlIEpTT04gdGhhdCBpcyBzZW50IGZyb20gRnVzaW9uQXV0aCB0byB3ZWJob29rcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFJlcXVlc3Qge1xuICBldmVudD86IEJhc2VFdmVudDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIGV2ZW50IHR5cGVzIHRoYXQgRnVzaW9uQXV0aCBwcm9kdWNlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgSldUUHVibGljS2V5VXBkYXRlID0gXCJqd3QucHVibGljLWtleS51cGRhdGVcIixcbiAgSldUUmVmcmVzaFRva2VuUmV2b2tlID0gXCJqd3QucmVmcmVzaC10b2tlbi5yZXZva2VcIixcbiAgSldUUmVmcmVzaCA9IFwiand0LnJlZnJlc2hcIixcbiAgQXVkaXRMb2dDcmVhdGUgPSBcImF1ZGl0LWxvZy5jcmVhdGVcIixcbiAgRXZlbnRMb2dDcmVhdGUgPSBcImV2ZW50LWxvZy5jcmVhdGVcIixcbiAgS2lja3N0YXJ0U3VjY2VzcyA9IFwia2lja3N0YXJ0LnN1Y2Nlc3NcIixcbiAgR3JvdXBDcmVhdGUgPSBcImdyb3VwLmNyZWF0ZVwiLFxuICBHcm91cENyZWF0ZUNvbXBsZXRlID0gXCJncm91cC5jcmVhdGUuY29tcGxldGVcIixcbiAgR3JvdXBEZWxldGUgPSBcImdyb3VwLmRlbGV0ZVwiLFxuICBHcm91cERlbGV0ZUNvbXBsZXRlID0gXCJncm91cC5kZWxldGUuY29tcGxldGVcIixcbiAgR3JvdXBNZW1iZXJBZGQgPSBcImdyb3VwLm1lbWJlci5hZGRcIixcbiAgR3JvdXBNZW1iZXJBZGRDb21wbGV0ZSA9IFwiZ3JvdXAubWVtYmVyLmFkZC5jb21wbGV0ZVwiLFxuICBHcm91cE1lbWJlclJlbW92ZSA9IFwiZ3JvdXAubWVtYmVyLnJlbW92ZVwiLFxuICBHcm91cE1lbWJlclJlbW92ZUNvbXBsZXRlID0gXCJncm91cC5tZW1iZXIucmVtb3ZlLmNvbXBsZXRlXCIsXG4gIEdyb3VwTWVtYmVyVXBkYXRlID0gXCJncm91cC5tZW1iZXIudXBkYXRlXCIsXG4gIEdyb3VwTWVtYmVyVXBkYXRlQ29tcGxldGUgPSBcImdyb3VwLm1lbWJlci51cGRhdGUuY29tcGxldGVcIixcbiAgR3JvdXBVcGRhdGUgPSBcImdyb3VwLnVwZGF0ZVwiLFxuICBHcm91cFVwZGF0ZUNvbXBsZXRlID0gXCJncm91cC51cGRhdGUuY29tcGxldGVcIixcbiAgVXNlckFjdGlvbiA9IFwidXNlci5hY3Rpb25cIixcbiAgVXNlckJ1bGtDcmVhdGUgPSBcInVzZXIuYnVsay5jcmVhdGVcIixcbiAgVXNlckNyZWF0ZSA9IFwidXNlci5jcmVhdGVcIixcbiAgVXNlckNyZWF0ZUNvbXBsZXRlID0gXCJ1c2VyLmNyZWF0ZS5jb21wbGV0ZVwiLFxuICBVc2VyRGVhY3RpdmF0ZSA9IFwidXNlci5kZWFjdGl2YXRlXCIsXG4gIFVzZXJEZWxldGUgPSBcInVzZXIuZGVsZXRlXCIsXG4gIFVzZXJEZWxldGVDb21wbGV0ZSA9IFwidXNlci5kZWxldGUuY29tcGxldGVcIixcbiAgVXNlckVtYWlsVXBkYXRlID0gXCJ1c2VyLmVtYWlsLnVwZGF0ZVwiLFxuICBVc2VyRW1haWxWZXJpZmllZCA9IFwidXNlci5lbWFpbC52ZXJpZmllZFwiLFxuICBVc2VySWRlbnRpdHlQcm92aWRlckxpbmsgPSBcInVzZXIuaWRlbnRpdHktcHJvdmlkZXIubGlua1wiLFxuICBVc2VySWRlbnRpdHlQcm92aWRlclVubGluayA9IFwidXNlci5pZGVudGl0eS1wcm92aWRlci51bmxpbmtcIixcbiAgVXNlckxvZ2luSWREdXBsaWNhdGVPbkNyZWF0ZSA9IFwidXNlci5sb2dpbklkLmR1cGxpY2F0ZS5jcmVhdGVcIixcbiAgVXNlckxvZ2luSWREdXBsaWNhdGVPblVwZGF0ZSA9IFwidXNlci5sb2dpbklkLmR1cGxpY2F0ZS51cGRhdGVcIixcbiAgVXNlckxvZ2luRmFpbGVkID0gXCJ1c2VyLmxvZ2luLmZhaWxlZFwiLFxuICBVc2VyTG9naW5OZXdEZXZpY2UgPSBcInVzZXIubG9naW4ubmV3LWRldmljZVwiLFxuICBVc2VyTG9naW5TdWNjZXNzID0gXCJ1c2VyLmxvZ2luLnN1Y2Nlc3NcIixcbiAgVXNlckxvZ2luU3VzcGljaW91cyA9IFwidXNlci5sb2dpbi5zdXNwaWNpb3VzXCIsXG4gIFVzZXJQYXNzd29yZEJyZWFjaCA9IFwidXNlci5wYXNzd29yZC5icmVhY2hcIixcbiAgVXNlclBhc3N3b3JkUmVzZXRTZW5kID0gXCJ1c2VyLnBhc3N3b3JkLnJlc2V0LnNlbmRcIixcbiAgVXNlclBhc3N3b3JkUmVzZXRTdGFydCA9IFwidXNlci5wYXNzd29yZC5yZXNldC5zdGFydFwiLFxuICBVc2VyUGFzc3dvcmRSZXNldFN1Y2Nlc3MgPSBcInVzZXIucGFzc3dvcmQucmVzZXQuc3VjY2Vzc1wiLFxuICBVc2VyUGFzc3dvcmRVcGRhdGUgPSBcInVzZXIucGFzc3dvcmQudXBkYXRlXCIsXG4gIFVzZXJSZWFjdGl2YXRlID0gXCJ1c2VyLnJlYWN0aXZhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvbkNyZWF0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uY3JlYXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25DcmVhdGVDb21wbGV0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uY3JlYXRlLmNvbXBsZXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25EZWxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlQ29tcGxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZS5jb21wbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uVXBkYXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi51cGRhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvblVwZGF0ZUNvbXBsZXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi51cGRhdGUuY29tcGxldGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvblZlcmlmaWVkID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi52ZXJpZmllZFwiLFxuICBVc2VyVHdvRmFjdG9yTWV0aG9kQWRkID0gXCJ1c2VyLnR3by1mYWN0b3IubWV0aG9kLmFkZFwiLFxuICBVc2VyVHdvRmFjdG9yTWV0aG9kUmVtb3ZlID0gXCJ1c2VyLnR3by1mYWN0b3IubWV0aG9kLnJlbW92ZVwiLFxuICBVc2VyVXBkYXRlID0gXCJ1c2VyLnVwZGF0ZVwiLFxuICBVc2VyVXBkYXRlQ29tcGxldGUgPSBcInVzZXIudXBkYXRlLmNvbXBsZXRlXCIsXG4gIFRlc3QgPSBcInRlc3RcIixcbiAgVXNlcklkZW50aXR5VmVyaWZpZWQgPSBcInVzZXIuaWRlbnRpdHkudmVyaWZpZWRcIixcbiAgVXNlcklkZW50aXR5VXBkYXRlID0gXCJ1c2VyLmlkZW50aXR5LnVwZGF0ZVwiXG59XG5cbi8qKlxuICogUmVwcmVzZW50IHRoZSB2YXJpb3VzIHN0YXRlcy9leHBlY3RhdGlvbnMgb2YgYSB1c2VyIGluIHRoZSBjb250ZXh0IG9mIHN0YXJ0aW5nIHZlcmlmaWNhdGlvblxuICovXG5leHBvcnQgZW51bSBFeGlzdGluZ1VzZXJTdHJhdGVneSB7XG4gIG11c3RFeGlzdCA9IFwibXVzdEV4aXN0XCIsXG4gIG11c3ROb3RFeGlzdCA9IFwibXVzdE5vdEV4aXN0XCJcbn1cblxuLyoqXG4gKiBBbiBleHBhbmRhYmxlIEFQSSByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBhbmRhYmxlUmVxdWVzdCB7XG4gIGV4cGFuZD86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQW4gZXhwYW5kYWJsZSBBUEkgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuZGFibGVSZXNwb25zZSB7XG4gIGV4cGFuZGFibGU/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBFeHBpcnlVbml0IHtcbiAgTUlOVVRFUyA9IFwiTUlOVVRFU1wiLFxuICBIT1VSUyA9IFwiSE9VUlNcIixcbiAgREFZUyA9IFwiREFZU1wiLFxuICBXRUVLUyA9IFwiV0VFS1NcIixcbiAgTU9OVEhTID0gXCJNT05USFNcIixcbiAgWUVBUlMgPSBcIllFQVJTXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhvcml6YXRpb25HcmFudElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgY2hhbmdlUGFzc3dvcmRJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGNoYW5nZVBhc3N3b3JkSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBkZXZpY2VDb2RlVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgZGV2aWNlVXNlckNvZGVJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGVtYWlsVmVyaWZpY2F0aW9uSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBlbWFpbFZlcmlmaWNhdGlvbklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgZW1haWxWZXJpZmljYXRpb25PbmVUaW1lQ29kZUdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGV4dGVybmFsQXV0aGVudGljYXRpb25JZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIGxvZ2luSW50ZW50VGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgb25lVGltZVBhc3N3b3JkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcGFzc3dvcmRsZXNzTG9naW5HZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBwYXNzd29yZGxlc3NMb2dpbk9uZVRpbWVDb2RlR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRsZXNzTG9naW5UaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBwZW5kaW5nQWNjb3VudExpbmtUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBwaG9uZVZlcmlmaWNhdGlvbklkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgcGhvbmVWZXJpZmljYXRpb25JZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHBob25lVmVyaWZpY2F0aW9uT25lVGltZUNvZGVHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uT25lVGltZUNvZGVHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICByZW1lbWJlck9BdXRoU2NvcGVDb25zZW50Q2hvaWNlVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgc2FtbHYyQXV0aE5SZXF1ZXN0SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBzZXR1cFBhc3N3b3JkSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBzZXR1cFBhc3N3b3JkSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0cnVzdFRva2VuVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdHdvRmFjdG9ySWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0d29GYWN0b3JPbmVUaW1lQ29kZUlkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgdHdvRmFjdG9yT25lVGltZUNvZGVJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHR3b0ZhY3RvclRydXN0SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB3ZWJBdXRobkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgd2ViQXV0aG5SZWdpc3RyYXRpb25DaGFsbGVuZ2VUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbEpXVEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBFeHRlcm5hbCBKV1Qtb25seSBpZGVudGl0eSBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmIGFuZCBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxKV1RJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8RXh0ZXJuYWxKV1RBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgY2xhaW1NYXA/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBkZWZhdWx0S2V5SWQ/OiBVVUlEO1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgaGVhZGVyS2V5UGFyYW1ldGVyPzogc3RyaW5nO1xuICBvYXV0aDI/OiBJZGVudGl0eVByb3ZpZGVyT2F1dGgyQ29uZmlndXJhdGlvbjtcbiAgdW5pcXVlSWRlbnRpdHlDbGFpbT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIEZ1c2lvbkF1dGggaXMgaW4gRklQUyBtb2RlIGJhc2VkIG9uIHRoZSBzeXN0ZW0gcHJvcGVydHkgPGNvZGU+ZnVzaW9uYXV0aC5maXBzLmVuYWJsZWQ8L2NvZGU+LiBUaGlzIGNhbiBvbmx5IGJlIGVuYWJsZWQgb25jZSBhbmRcbiAqIHNob3VsZCBiZSBlbmFibGVkIHdoZW4gdGhlIFZNIHN0YXJ0cyBvciBhcyBjbG9zZSB0byB0aGF0IHBvaW50IGFzIHBvc3NpYmxlLlxuICogPHA+XG4gKiBPbmNlIHRoaXMgaGFzIGJlZW4gZW5hYmxlZCwgaXQgY2Fubm90IGJlIGRpc2FibGVkLlxuICogPHA+XG4gKiBUaGlzIGFsc28gcHJvdmlkZXMgc29tZSBoZWxwZXJzIGZvciBGSVBTIHRoaW5ncyBzdWNoIGFzIHBhc3N3b3JkIGxlbmd0aCByZXF1aXJlbWVudHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpIGFuZCBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZJUFMge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYXBwSWQ/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGZpZWxkcz86IHN0cmluZztcbiAgbG9naW5NZXRob2Q/OiBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Q7XG4gIHBlcm1pc3Npb25zPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZhY2Vib29rIHNvY2lhbCBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0lkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxGYWNlYm9va0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBhcHBJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZmllbGRzPzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwb2xpY3kgdG8gY29uZmlndXJlIGlmIGFuZCB3aGVuIHRoZSB1c2VyLWFjdGlvbiBpcyBjYW5jZWxlZCBwcmlvciB0byB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgYWN0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWlsZWRBdXRoZW50aWNhdGlvbkFjdGlvbkNhbmNlbFBvbGljeSB7XG4gIG9uUGFzc3dvcmRSZXNldD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIGJlaGF2aW9yIG9mIGZhaWxlZCBsb2dpbiBhdHRlbXB0cy4gVGhpcyBoZWxwcyB1cyBwcm90ZWN0IGFnYWluc3QgYnJ1dGUgZm9yY2UgcGFzc3dvcmQgYXR0YWNrcy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbGVkQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYWN0aW9uQ2FuY2VsUG9saWN5PzogRmFpbGVkQXV0aGVudGljYXRpb25BY3Rpb25DYW5jZWxQb2xpY3k7XG4gIGFjdGlvbkR1cmF0aW9uPzogbnVtYmVyO1xuICBhY3Rpb25EdXJhdGlvblVuaXQ/OiBFeHBpcnlVbml0O1xuICBlbWFpbFVzZXI/OiBib29sZWFuO1xuICByZXNldENvdW50SW5TZWNvbmRzPzogbnVtYmVyO1xuICB0b29NYW55QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHVzZXJBY3Rpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgZmFtaWx5IGdyb3VwaW5nIG9mIHVzZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseSB7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG1lbWJlcnM/OiBBcnJheTxGYW1pbHlNZW1iZXI+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYWxsb3dDaGlsZFJlZ2lzdHJhdGlvbnM/OiBib29sZWFuO1xuICBjb25maXJtQ2hpbGRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBkZWxldGVPcnBoYW5lZEFjY291bnRzPzogYm9vbGVhbjtcbiAgZGVsZXRlT3JwaGFuZWRBY2NvdW50c0RheXM/OiBudW1iZXI7XG4gIGZhbWlseVJlcXVlc3RFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBtYXhpbXVtQ2hpbGRBZ2U/OiBudW1iZXI7XG4gIG1pbmltdW1Pd25lckFnZT86IG51bWJlcjtcbiAgcGFyZW50RW1haWxSZXF1aXJlZD86IGJvb2xlYW47XG4gIHBhcmVudFJlZ2lzdHJhdGlvbkVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgZm9yIHNlbmRpbmcgb3V0IGZhbWlseSByZXF1ZXN0cyB0byBwYXJlbnQncy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlFbWFpbFJlcXVlc3Qge1xuICBwYXJlbnRFbWFpbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzaW5nbGUgZmFtaWx5IG1lbWJlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlNZW1iZXIge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG93bmVyPzogYm9vbGVhbjtcbiAgcm9sZT86IEZhbWlseVJvbGU7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBlbnVtIEZhbWlseVJvbGUge1xuICBDaGlsZCA9IFwiQ2hpbGRcIixcbiAgVGVlbiA9IFwiVGVlblwiLFxuICBBZHVsdCA9IFwiQWR1bHRcIlxufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IGZvciBtYW5hZ2luZyBmYW1pbGllcyBhbmQgbWVtYmVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlSZXF1ZXN0IHtcbiAgZmFtaWx5TWVtYmVyPzogRmFtaWx5TWVtYmVyO1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgbWFuYWdpbmcgZmFtaWxpZXMgYW5kIG1lbWJlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5UmVzcG9uc2Uge1xuICBmYW1pbGllcz86IEFycmF5PEZhbWlseT47XG4gIGZhbWlseT86IEZhbWlseTtcbn1cblxuLyoqXG4gKiBGb3Jnb3QgcGFzc3dvcmQgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZ290UGFzc3dvcmRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjaGFuZ2VQYXNzd29yZElkPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgbG9naW5JZFR5cGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgc2VuZEZvcmdvdFBhc3N3b3JkRW1haWw/OiBib29sZWFuO1xuICBzZW5kRm9yZ290UGFzc3dvcmRNZXNzYWdlPzogYm9vbGVhbjtcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB1c2VybmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3Jnb3QgcGFzc3dvcmQgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3Jnb3RQYXNzd29yZFJlc3BvbnNlIHtcbiAgY2hhbmdlUGFzc3dvcmRJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGVwcz86IEFycmF5PEZvcm1TdGVwPjtcbiAgdHlwZT86IEZvcm1UeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gRm9ybUNvbnRyb2wge1xuICBjaGVja2JveCA9IFwiY2hlY2tib3hcIixcbiAgbnVtYmVyID0gXCJudW1iZXJcIixcbiAgcGFzc3dvcmQgPSBcInBhc3N3b3JkXCIsXG4gIHJhZGlvID0gXCJyYWRpb1wiLFxuICBzZWxlY3QgPSBcInNlbGVjdFwiLFxuICB0ZXh0YXJlYSA9IFwidGV4dGFyZWFcIixcbiAgdGV4dCA9IFwidGV4dFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBGb3JtRGF0YVR5cGUge1xuICBib29sID0gXCJib29sXCIsXG4gIGNvbnNlbnQgPSBcImNvbnNlbnRcIixcbiAgZGF0ZSA9IFwiZGF0ZVwiLFxuICBlbWFpbCA9IFwiZW1haWxcIixcbiAgbnVtYmVyID0gXCJudW1iZXJcIixcbiAgcGhvbmVOdW1iZXIgPSBcInBob25lTnVtYmVyXCIsXG4gIHN0cmluZyA9IFwic3RyaW5nXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkIHtcbiAgY29uZmlybT86IGJvb2xlYW47XG4gIGNvbnNlbnRJZD86IFVVSUQ7XG4gIGNvbnRyb2w/OiBGb3JtQ29udHJvbDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGtleT86IHN0cmluZztcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBBcnJheTxzdHJpbmc+O1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHR5cGU/OiBGb3JtRGF0YVR5cGU7XG4gIHZhbGlkYXRvcj86IEZvcm1GaWVsZFZhbGlkYXRvcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1GaWVsZEFkbWluUG9saWN5IHtcbiAgRWRpdCA9IFwiRWRpdFwiLFxuICBWaWV3ID0gXCJWaWV3XCJcbn1cblxuLyoqXG4gKiBUaGUgRm9ybUZpZWxkIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1GaWVsZFJlcXVlc3Qge1xuICBmaWVsZD86IEZvcm1GaWVsZDtcbiAgZmllbGRzPzogQXJyYXk8Rm9ybUZpZWxkPjtcbn1cblxuLyoqXG4gKiBGb3JtIGZpZWxkIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkUmVzcG9uc2Uge1xuICBmaWVsZD86IEZvcm1GaWVsZDtcbiAgZmllbGRzPzogQXJyYXk8Rm9ybUZpZWxkPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkVmFsaWRhdG9yIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGV4cHJlc3Npb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRm9ybSByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVJlcXVlc3Qge1xuICBmb3JtPzogRm9ybTtcbn1cblxuLyoqXG4gKiBGb3JtIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtUmVzcG9uc2Uge1xuICBmb3JtPzogRm9ybTtcbiAgZm9ybXM/OiBBcnJheTxGb3JtPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVN0ZXAge1xuICBmaWVsZHM/OiBBcnJheTxVVUlEPjtcbiAgdHlwZT86IEZvcm1TdGVwVHlwZTtcbn1cblxuLyoqXG4gKiBEZW5vdGVzIHRoZSB0eXBlIG9mIGZvcm0gc3RlcC4gVGhpcyBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBkaWZmZXJlbnQgYmVoYXZpb3Igb24gZm9ybSBzdGVwcyBpbiB0aGUgcmVnaXN0cmF0aW9uIGZsb3cuXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1TdGVwVHlwZSB7XG4gIGNvbGxlY3REYXRhID0gXCJjb2xsZWN0RGF0YVwiLFxuICB2ZXJpZnlFbWFpbCA9IFwidmVyaWZ5RW1haWxcIixcbiAgdmVyaWZ5UGhvbmVOdW1iZXIgPSBcInZlcmlmeVBob25lTnVtYmVyXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1UeXBlIHtcbiAgcmVnaXN0cmF0aW9uID0gXCJyZWdpc3RyYXRpb25cIixcbiAgYWRtaW5SZWdpc3RyYXRpb24gPSBcImFkbWluUmVnaXN0cmF0aW9uXCIsXG4gIGFkbWluVXNlciA9IFwiYWRtaW5Vc2VyXCIsXG4gIHNlbGZTZXJ2aWNlVXNlciA9IFwic2VsZlNlcnZpY2VVc2VyXCJcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEZ1c2lvbkF1dGggY29ubmVjdG9yLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVzaW9uQXV0aENvbm5lY3RvckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbiB7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgZ2VuZXJpYyBjb25uZWN0b3IuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljQ29ubmVjdG9yQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uIHtcbiAgYXV0aGVudGljYXRpb25VUkw/OiBzdHJpbmc7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBoZWFkZXJzPzogSFRUUEhlYWRlcnM7XG4gIGh0dHBBdXRoZW50aWNhdGlvblBhc3N3b3JkPzogc3RyaW5nO1xuICBodHRwQXV0aGVudGljYXRpb25Vc2VybmFtZT86IHN0cmluZztcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHNzbENlcnRpZmljYXRlS2V5SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY01lc3NlbmdlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiB7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBoZWFkZXJzPzogSFRUUEhlYWRlcnM7XG4gIGh0dHBBdXRoZW50aWNhdGlvblBhc3N3b3JkPzogc3RyaW5nO1xuICBodHRwQXV0aGVudGljYXRpb25Vc2VybmFtZT86IHN0cmluZztcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHNzbENlcnRpZmljYXRlPzogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdvb2dsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgcHJvcGVydGllcz86IEdvb2dsZUlkZW50aXR5UHJvdmlkZXJQcm9wZXJ0aWVzO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHb29nbGUgc29jaWFsIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHb29nbGVJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8R29vZ2xlQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgbG9naW5NZXRob2Q/OiBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Q7XG4gIHByb3BlcnRpZXM/OiBHb29nbGVJZGVudGl0eVByb3ZpZGVyUHJvcGVydGllcztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogR29vZ2xlIHNvY2lhbCBsb2dpbiBwcm92aWRlciBwYXJhbWV0ZXJzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHb29nbGVJZGVudGl0eVByb3ZpZGVyUHJvcGVydGllcyB7XG4gIGFwaT86IHN0cmluZztcbiAgYnV0dG9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF1dGhvcml6YXRpb24gR3JhbnQgdHlwZXMgYXMgZGVmaW5lZCBieSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5XCI+T0F1dGggMi4wIEF1dGhvcml6YXRpb25cbiAqIEZyYW1ld29yayAtIFJGQyA2NzQ5PC9hPi5cbiAqIDxwPlxuICogU3BlY2lmaWMgbmFtZXMgYXMgZGVmaW5lZCBieSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1OTEjc2VjdGlvbi00LjFcIj5cbiAqIE9BdXRoIDIuMCBEeW5hbWljIENsaWVudCBSZWdpc3RyYXRpb24gUHJvdG9jb2wgLSBSRkMgNzU5MSBTZWN0aW9uIDQuMTwvYT5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEdyYW50VHlwZSB7XG4gIGF1dGhvcml6YXRpb25fY29kZSA9IFwiYXV0aG9yaXphdGlvbl9jb2RlXCIsXG4gIGltcGxpY2l0ID0gXCJpbXBsaWNpdFwiLFxuICBwYXNzd29yZCA9IFwicGFzc3dvcmRcIixcbiAgY2xpZW50X2NyZWRlbnRpYWxzID0gXCJjbGllbnRfY3JlZGVudGlhbHNcIixcbiAgcmVmcmVzaF90b2tlbiA9IFwicmVmcmVzaF90b2tlblwiLFxuICB1bmtub3duID0gXCJ1bmtub3duXCIsXG4gIGRldmljZV9jb2RlID0gXCJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTpkZXZpY2VfY29kZVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBUeWxlciBTY290dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHJvbGVzPzogUmVjb3JkPFVVSUQsIEFycmF5PEFwcGxpY2F0aW9uUm9sZT4+O1xuICB0ZW5hbnRJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBDcmVhdGVkIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cENyZWF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBDcmVhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBDcmVhdGUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwRGVsZXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIERlbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBEZWxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbn1cblxuLyoqXG4gKiBBIFVzZXIncyBtZW1iZXJzaGlwIGludG8gYSBHcm91cFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlciB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBncm91cElkPzogVVVJRDtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIEFkZCBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJBZGRDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIEFkZCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJBZGRFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBSZW1vdmUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyUmVtb3ZlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBSZW1vdmUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyUmVtb3ZlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBHcm91cCBNZW1iZXJzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBncm91cElkPzogVVVJRDtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBHcm91cCBNZW1iZXJzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBHcm91cE1lbWJlclNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXNwb25zZSBmb3IgR3JvdXAgTWVtYmVyc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclNlYXJjaFJlc3BvbnNlIHtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBNZW1iZXIgVXBkYXRlIENvbXBsZXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclVwZGF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBNZW1iZXIgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xufVxuXG4vKipcbiAqIEdyb3VwIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBSZXF1ZXN0IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgcm9sZUlkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIEdyb3VwIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwUmVzcG9uc2Uge1xuICBncm91cD86IEdyb3VwO1xuICBncm91cHM/OiBBcnJheTxHcm91cD47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBHcm91cHNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgR3JvdXBzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBHcm91cFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXNwb25zZSBmb3IgR3JvdXBzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwU2VhcmNoUmVzcG9uc2Uge1xuICBncm91cHM/OiBBcnJheTxHcm91cD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgVXBkYXRlIENvbXBsZXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFVwZGF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG9yaWdpbmFsPzogR3JvdXA7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBVcGRhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwVXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG9yaWdpbmFsPzogR3JvdXA7XG59XG5cbi8qKlxuICogVHlwZSBmb3Igd2ViaG9vayBoZWFkZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhUVFBIZWFkZXJzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBIVFRQTWV0aG9kIHtcbiAgR0VUID0gXCJHRVRcIixcbiAgUE9TVCA9IFwiUE9TVFwiLFxuICBQVVQgPSBcIlBVVFwiLFxuICBERUxFVEUgPSBcIkRFTEVURVwiLFxuICBIRUFEID0gXCJIRUFEXCIsXG4gIE9QVElPTlMgPSBcIk9QVElPTlNcIixcbiAgUEFUQ0ggPSBcIlBBVENIXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSFlQUkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgcmVseWluZ1BhcnR5QXBwbGljYXRpb25JZD86IHN0cmluZztcbiAgcmVseWluZ1BhcnR5VVJMPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIWVBSSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEhZUFJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgcmVseWluZ1BhcnR5QXBwbGljYXRpb25JZD86IHN0cmluZztcbiAgcmVseWluZ1BhcnR5VVJMPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sRW50cnkge1xuICBhY3Rpb24/OiBJUEFjY2Vzc0NvbnRyb2xFbnRyeUFjdGlvbjtcbiAgZW5kSVBBZGRyZXNzPzogc3RyaW5nO1xuICBzdGFydElQQWRkcmVzcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgZW51bSBJUEFjY2Vzc0NvbnRyb2xFbnRyeUFjdGlvbiB7XG4gIEFsbG93ID0gXCJBbGxvd1wiLFxuICBCbG9jayA9IFwiQmxvY2tcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbnRyaWVzPzogQXJyYXk8SVBBY2Nlc3NDb250cm9sRW50cnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFJlcXVlc3Qge1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0PzogSVBBY2Nlc3NDb250cm9sTGlzdDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZSB7XG4gIGlwQWNjZXNzQ29udHJvbExpc3Q/OiBJUEFjY2Vzc0NvbnRyb2xMaXN0O1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0cz86IEFycmF5PElQQWNjZXNzQ29udHJvbExpc3Q+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgSVAgQUNMcyAuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXNwb25zZSB7XG4gIGlwQWNjZXNzQ29udHJvbExpc3RzPzogQXJyYXk8SVBBY2Nlc3NDb250cm9sTGlzdD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTGltaXRVc2VyTGlua2luZ1BvbGljeSBleHRlbmRzIEVuYWJsZWFibGUge1xuICBtYXhpbXVtTGlua3M/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMaW5rIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBpZGVudGl0eVByb3ZpZGVyTmFtZT86IHN0cmluZztcbiAgaWRlbnRpdHlQcm92aWRlclR5cGU/OiBJZGVudGl0eVByb3ZpZGVyVHlwZTtcbiAgaWRlbnRpdHlQcm92aWRlclVzZXJJZD86IHN0cmluZztcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdExvZ2luSW5zdGFudD86IG51bWJlcjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxpbmtSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rPzogSWRlbnRpdHlQcm92aWRlckxpbms7XG4gIHBlbmRpbmdJZFBMaW5rSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2Uge1xuICBpZGVudGl0eVByb3ZpZGVyTGluaz86IElkZW50aXR5UHJvdmlkZXJMaW5rO1xuICBpZGVudGl0eVByb3ZpZGVyTGlua3M/OiBBcnJheTxJZGVudGl0eVByb3ZpZGVyTGluaz47XG59XG5cbi8qKlxuICogVGhlIElkUCBiZWhhdmlvciB3aGVuIG5vIHVzZXIgbGluayBoYXMgYmVlbiBtYWRlIHlldC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5UHJvdmlkZXJMaW5raW5nU3RyYXRlZ3kge1xuICBDcmVhdGVQZW5kaW5nTGluayA9IFwiQ3JlYXRlUGVuZGluZ0xpbmtcIixcbiAgRGlzYWJsZWQgPSBcIkRpc2FibGVkXCIsXG4gIExpbmtBbm9ueW1vdXNseSA9IFwiTGlua0Fub255bW91c2x5XCIsXG4gIExpbmtCeUVtYWlsID0gXCJMaW5rQnlFbWFpbFwiLFxuICBMaW5rQnlFbWFpbEZvckV4aXN0aW5nVXNlciA9IFwiTGlua0J5RW1haWxGb3JFeGlzdGluZ1VzZXJcIixcbiAgTGlua0J5VXNlcm5hbWUgPSBcIkxpbmtCeVVzZXJuYW1lXCIsXG4gIExpbmtCeVVzZXJuYW1lRm9yRXhpc3RpbmdVc2VyID0gXCJMaW5rQnlVc2VybmFtZUZvckV4aXN0aW5nVXNlclwiLFxuICBVbnN1cHBvcnRlZCA9IFwiVW5zdXBwb3J0ZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Qge1xuICBVc2VQb3B1cCA9IFwiVXNlUG9wdXBcIixcbiAgVXNlUmVkaXJlY3QgPSBcIlVzZVJlZGlyZWN0XCIsXG4gIFVzZVZlbmRvckphdmFTY3JpcHQgPSBcIlVzZVZlbmRvckphdmFTY3JpcHRcIlxufVxuXG4vKipcbiAqIExvZ2luIEFQSSByZXF1ZXN0IG9iamVjdCB1c2VkIGZvciBsb2dpbiB0byB0aGlyZC1wYXJ0eSBzeXN0ZW1zIChpLmUuIExvZ2luIHdpdGggRmFjZWJvb2spLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlTG9naW5SZXF1ZXN0IHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGVuY29kZWRKV1Q/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIG5vTGluaz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uIHtcbiAgYXV0aG9yaXphdGlvbl9lbmRwb2ludD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBjbGllbnRBdXRoZW50aWNhdGlvbk1ldGhvZD86IENsaWVudEF1dGhlbnRpY2F0aW9uTWV0aG9kO1xuICBlbWFpbENsYWltPzogc3RyaW5nO1xuICBlbWFpbFZlcmlmaWVkQ2xhaW0/OiBzdHJpbmc7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHRva2VuX2VuZHBvaW50Pzogc3RyaW5nO1xuICB1bmlxdWVJZENsYWltPzogc3RyaW5nO1xuICB1c2VyaW5mb19lbmRwb2ludD86IHN0cmluZztcbiAgdXNlcm5hbWVDbGFpbT86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gQ2xpZW50QXV0aGVudGljYXRpb25NZXRob2Qge1xuICBub25lID0gXCJub25lXCIsXG4gIGNsaWVudF9zZWNyZXRfYmFzaWMgPSBcImNsaWVudF9zZWNyZXRfYmFzaWNcIixcbiAgY2xpZW50X3NlY3JldF9wb3N0ID0gXCJjbGllbnRfc2VjcmV0X3Bvc3RcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyUGVuZGluZ0xpbmtSZXNwb25zZSB7XG4gIGlkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uPzogSWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb247XG4gIGxpbmtDb3VudD86IG51bWJlcjtcbiAgcGVuZGluZ0lkUExpbms/OiBQZW5kaW5nSWRQTGluaztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclJlcXVlc3Qge1xuICBpZGVudGl0eVByb3ZpZGVyPzogQmFzZUlkZW50aXR5UHJvdmlkZXI8YW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclJlc3BvbnNlIHtcbiAgaWRlbnRpdHlQcm92aWRlcj86IEJhc2VJZGVudGl0eVByb3ZpZGVyPGFueT47XG4gIGlkZW50aXR5UHJvdmlkZXJzPzogQXJyYXk8QmFzZUlkZW50aXR5UHJvdmlkZXI8YW55Pj47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBJZGVudGl0eSBQcm92aWRlcnMuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgbmFtZT86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0eXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIElkZW50aXR5IFByb3ZpZGVyc1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBJZGVudGl0eVByb3ZpZGVyU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogSWRlbnRpdHkgUHJvdmlkZXIgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyU2VhcmNoUmVzcG9uc2Uge1xuICBpZGVudGl0eVByb3ZpZGVycz86IEFycmF5PEJhc2VJZGVudGl0eVByb3ZpZGVyPGFueT4+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBsb2dpbklkVHlwZXM/OiBBcnJheTxzdHJpbmc+O1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVzcG9uc2Uge1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyVGVuYW50Q29uZmlndXJhdGlvbiB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBsaW1pdFVzZXJMaW5rQ291bnQ/OiBJZGVudGl0eVByb3ZpZGVyTGltaXRVc2VyTGlua2luZ1BvbGljeTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5UHJvdmlkZXJUeXBlIHtcbiAgQXBwbGUgPSBcIkFwcGxlXCIsXG4gIEVwaWNHYW1lcyA9IFwiRXBpY0dhbWVzXCIsXG4gIEV4dGVybmFsSldUID0gXCJFeHRlcm5hbEpXVFwiLFxuICBGYWNlYm9vayA9IFwiRmFjZWJvb2tcIixcbiAgR29vZ2xlID0gXCJHb29nbGVcIixcbiAgSFlQUiA9IFwiSFlQUlwiLFxuICBMaW5rZWRJbiA9IFwiTGlua2VkSW5cIixcbiAgTmludGVuZG8gPSBcIk5pbnRlbmRvXCIsXG4gIE9wZW5JRENvbm5lY3QgPSBcIk9wZW5JRENvbm5lY3RcIixcbiAgU0FNTHYyID0gXCJTQU1MdjJcIixcbiAgU0FNTHYySWRQSW5pdGlhdGVkID0gXCJTQU1MdjJJZFBJbml0aWF0ZWRcIixcbiAgU29ueVBTTiA9IFwiU29ueVBTTlwiLFxuICBTdGVhbSA9IFwiU3RlYW1cIixcbiAgVHdpdGNoID0gXCJUd2l0Y2hcIixcbiAgVHdpdHRlciA9IFwiVHdpdHRlclwiLFxuICBYYm94ID0gXCJYYm94XCJcbn1cblxuLyoqXG4gKiBNb2RlbCBpZGVudGl0eSB0eXBlcyBwcm92aWRlZCBieSBGdXNpb25BdXRoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5VHlwZSB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSByZWFzb24gdGhhdCB7QGxpbmsgVXNlcklkZW50aXR5I3ZlcmlmaWVkfSB3YXMgc2V0IHRvIHRydWUgb3IgZmFsc2UuXG4gKlxuICogQGF1dGhvciBCcmFkeSBXaWVkXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5VmVyaWZpZWRSZWFzb24ge1xuICBTa2lwcGVkID0gXCJTa2lwcGVkXCIsXG4gIFRydXN0ZWQgPSBcIlRydXN0ZWRcIixcbiAgVW52ZXJpZmlhYmxlID0gXCJVbnZlcmlmaWFibGVcIixcbiAgSW1wbGljaXQgPSBcIkltcGxpY2l0XCIsXG4gIFBlbmRpbmcgPSBcIlBlbmRpbmdcIixcbiAgQ29tcGxldGVkID0gXCJDb21wbGV0ZWRcIixcbiAgRGlzYWJsZWQgPSBcIkRpc2FibGVkXCIsXG4gIEFkbWluaXN0cmF0aXZlID0gXCJBZG1pbmlzdHJhdGl2ZVwiLFxuICBJbXBvcnQgPSBcIkltcG9ydFwiXG59XG5cbi8qKlxuICogSW1wb3J0IHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0UmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBlbmNyeXB0aW9uU2NoZW1lPzogc3RyaW5nO1xuICBmYWN0b3I/OiBudW1iZXI7XG4gIHVzZXJzPzogQXJyYXk8VXNlcj47XG4gIHZhbGlkYXRlRGJDb25zdHJhaW50cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBtYXJrZXIgaW50ZXJmYWNlIGluZGljYXRpbmcgdGhpcyBldmVudCBpcyBub3Qgc2NvcGVkIHRvIGEgdGVuYW50IGFuZCB3aWxsIGJlIHNlbnQgdG8gYWxsIHdlYmhvb2tzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZUV2ZW50IGV4dGVuZHMgTm9uVHJhbnNhY3Rpb25hbEV2ZW50IHtcbn1cblxuLyoqXG4gKiBUaGUgSW50ZWdyYXRpb24gUmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvblJlcXVlc3Qge1xuICBpbnRlZ3JhdGlvbnM/OiBJbnRlZ3JhdGlvbnM7XG59XG5cbi8qKlxuICogVGhlIEludGVncmF0aW9uIFJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9uUmVzcG9uc2Uge1xuICBpbnRlZ3JhdGlvbnM/OiBJbnRlZ3JhdGlvbnM7XG59XG5cbi8qKlxuICogQXZhaWxhYmxlIEludGVncmF0aW9uc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvbnMge1xuICBjbGVhbnNwZWFrPzogQ2xlYW5TcGVha0NvbmZpZ3VyYXRpb247XG4gIGthZmthPzogS2Fma2FDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRyb3NwZWN0UmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXNzdWVSZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBKU09OIFdlYiBLZXkgYXMgZGVmaW5lZCBieSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MTcjc2VjdGlvbi00XCI+UkZDIDc1MTcgSlNPTiBXZWIgS2V5IChKV0spXG4gKiBTZWN0aW9uIDQ8L2E+IGFuZCA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MThcIj5SRkMgNzUxOCBKU09OIFdlYiBBbGdvcml0aG1zIChKV0EpPC9hPi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTldlYktleSB7XG4gIGFsZz86IEFsZ29yaXRobTtcbiAgY3J2Pzogc3RyaW5nO1xuICBkPzogc3RyaW5nO1xuICBkcD86IHN0cmluZztcbiAgZHE/OiBzdHJpbmc7XG4gIGU/OiBzdHJpbmc7XG4gIGtpZD86IHN0cmluZztcbiAga3R5PzogS2V5VHlwZTtcbiAgbj86IHN0cmluZztcbiAgW290aGVyOiBzdHJpbmddOiBhbnk7IC8vIEFueSBvdGhlciBmaWVsZHNcbiAgcD86IHN0cmluZztcbiAgcT86IHN0cmluZztcbiAgcWk/OiBzdHJpbmc7XG4gIHVzZT86IHN0cmluZztcbiAgeD86IHN0cmluZztcbiAgeDVjPzogQXJyYXk8c3RyaW5nPjtcbiAgeDV0Pzogc3RyaW5nO1xuICB4NXRfUzI1Nj86IHN0cmluZztcbiAgeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFueSBvYmplY3QgdGhhdCBjYW4gcHJvdmlkZSBKU09OIFdlYiBrZXkgSW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTldlYktleUluZm9Qcm92aWRlciB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXS1NSZXNwb25zZSB7XG4gIGtleXM/OiBBcnJheTxKU09OV2ViS2V5Pjtcbn1cblxuLyoqXG4gKiBKU09OIFdlYiBUb2tlbiAoSldUKSBhcyBkZWZpbmVkIGJ5IFJGQyA3NTE5LlxuICogPHByZT5cbiAqIEZyb20gUkZDIDc1MTkgU2VjdGlvbiAxLiBJbnRyb2R1Y3Rpb246XG4gKiAgICBUaGUgc3VnZ2VzdGVkIHByb251bmNpYXRpb24gb2YgSldUIGlzIHRoZSBzYW1lIGFzIHRoZSBFbmdsaXNoIHdvcmQgXCJqb3RcIi5cbiAqIDwvcHJlPlxuICogVGhlIEpXVCBpcyBub3QgVGhyZWFkLVNhZmUgYW5kIHNob3VsZCBub3QgYmUgcmUtdXNlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUIHtcbiAgYXVkPzogYW55O1xuICBleHA/OiBudW1iZXI7XG4gIGlhdD86IG51bWJlcjtcbiAgaXNzPzogc3RyaW5nO1xuICBqdGk/OiBzdHJpbmc7XG4gIG5iZj86IG51bWJlcjtcbiAgW290aGVyQ2xhaW1zOiBzdHJpbmddOiBhbnk7IC8vIEFueSBvdGhlciBmaWVsZHNcbiAgc3ViPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpXVCBDb25maWd1cmF0aW9uLiBBIEpXVCBDb25maWd1cmF0aW9uIGZvciBhbiBBcHBsaWNhdGlvbiBtYXkgbm90IGJlIGFjdGl2ZSBpZiBpdCBpcyB1c2luZyB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24sIHRoZSBjb25maWd1cmF0aW9uXG4gKiBtYXkgYmUgPGNvZGU+ZW5hYmxlZCA9IGZhbHNlPC9jb2RlPi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhY2Nlc3NUb2tlbktleUlkPzogVVVJRDtcbiAgaWRUb2tlbktleUlkPzogVVVJRDtcbiAgcmVmcmVzaFRva2VuRXhwaXJhdGlvblBvbGljeT86IFJlZnJlc2hUb2tlbkV4cGlyYXRpb25Qb2xpY3k7XG4gIHJlZnJlc2hUb2tlbk9uZVRpbWVVc2VDb25maWd1cmF0aW9uPzogUmVmcmVzaFRva2VuT25lVGltZVVzZUNvbmZpZ3VyYXRpb247XG4gIHJlZnJlc2hUb2tlblJldm9jYXRpb25Qb2xpY3k/OiBSZWZyZXNoVG9rZW5SZXZvY2F0aW9uUG9saWN5O1xuICByZWZyZXNoVG9rZW5TbGlkaW5nV2luZG93Q29uZmlndXJhdGlvbj86IFJlZnJlc2hUb2tlblNsaWRpbmdXaW5kb3dDb25maWd1cmF0aW9uO1xuICByZWZyZXNoVG9rZW5UaW1lVG9MaXZlSW5NaW51dGVzPzogbnVtYmVyO1xuICByZWZyZXNoVG9rZW5Vc2FnZVBvbGljeT86IFJlZnJlc2hUb2tlblVzYWdlUG9saWN5O1xuICB0aW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgSldUIHB1YmxpYyBrZXkgUmVmcmVzaCBUb2tlbiBSZXZva2UgRXZlbnQuIFRoaXMgZXZlbnQgbWlnaHQgYmUgZm9yIGEgc2luZ2xlXG4gKiB0b2tlbiwgYSB1c2VyIG9yIGFuIGVudGlyZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RQdWJsaWNLZXlVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBKV1QgUmVmcmVzaCBFdmVudC4gVGhpcyBldmVudCB3aWxsIGJlIGZpcmVkIHdoZW4gYSBKV1QgaXMgXCJyZWZyZXNoZWRcIiAoZ2VuZXJhdGVkKSB1c2luZyBhIFJlZnJlc2ggVG9rZW4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFJlZnJlc2hFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBvcmlnaW5hbD86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHJlZnJlc2hpbmcgYSBKV1Qgd2l0aCBhIFJlZnJlc2ggVG9rZW4uXG4gKiA8cD5cbiAqIFVzaW5nIGEgZGlmZmVyZW50IHJlc3BvbnNlIG9iamVjdCBmcm9tIFJlZnJlc2hUb2tlblJlc3BvbnNlIGJlY2F1c2UgdGhlIHJldHJpZXZlIHJlc3BvbnNlIHdpbGwgcmV0dXJuIGFuIG9iamVjdCBmb3IgcmVmcmVzaFRva2VuLCBhbmQgdGhpcyBpcyBhXG4gKiBzdHJpbmcuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFJlZnJlc2hSZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuSWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFJlZnJlc2ggVG9rZW4gUmV2b2tlIEV2ZW50LiBUaGlzIGV2ZW50IG1pZ2h0IGJlIGZvciBhIHNpbmdsZSB0b2tlbiwgYSB1c2VyXG4gKiBvciBhbiBlbnRpcmUgYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUUmVmcmVzaFRva2VuUmV2b2tlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25UaW1lVG9MaXZlSW5TZWNvbmRzPzogUmVjb3JkPFVVSUQsIG51bWJlcj47XG4gIHJlZnJlc2hUb2tlbj86IFJlZnJlc2hUb2tlbjtcbiAgdXNlcj86IFVzZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFZlbmRSZXF1ZXN0IHtcbiAgY2xhaW1zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAga2V5SWQ/OiBVVUlEO1xuICB0aW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RWZW5kUmVzcG9uc2Uge1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGRlZmF1bHRUb3BpYz86IHN0cmluZztcbiAgcHJvZHVjZXI/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FNZXNzZW5nZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBkZWZhdWx0VG9waWM/OiBzdHJpbmc7XG4gIHByb2R1Y2VyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBEb21haW4gZm9yIGEgcHVibGljIGtleSwga2V5IHBhaXIgb3IgYW4gSE1BQyBzZWNyZXQuIFRoaXMgaXMgdXNlZCBieSBLZXlNYXN0ZXIgdG8gbWFuYWdlIGtleXMgZm9yIEpXVHMsIFNBTUwsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXkge1xuICBhbGdvcml0aG0/OiBLZXlBbGdvcml0aG07XG4gIGNlcnRpZmljYXRlPzogc3RyaW5nO1xuICBjZXJ0aWZpY2F0ZUluZm9ybWF0aW9uPzogQ2VydGlmaWNhdGVJbmZvcm1hdGlvbjtcbiAgZXhwaXJhdGlvbkluc3RhbnQ/OiBudW1iZXI7XG4gIGhhc1ByaXZhdGVLZXk/OiBib29sZWFuO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAga2lkPzogc3RyaW5nO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbGVuZ3RoPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwcml2YXRlS2V5Pzogc3RyaW5nO1xuICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gIHNlY3JldD86IHN0cmluZztcbiAgdHlwZT86IEtleVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VydGlmaWNhdGVJbmZvcm1hdGlvbiB7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAgbWQ1RmluZ2VycHJpbnQ/OiBzdHJpbmc7XG4gIHNlcmlhbE51bWJlcj86IHN0cmluZztcbiAgc2hhMUZpbmdlcnByaW50Pzogc3RyaW5nO1xuICBzaGExVGh1bWJwcmludD86IHN0cmluZztcbiAgc2hhMjU2RmluZ2VycHJpbnQ/OiBzdHJpbmc7XG4gIHNoYTI1NlRodW1icHJpbnQ/OiBzdHJpbmc7XG4gIHN1YmplY3Q/OiBzdHJpbmc7XG4gIHZhbGlkRnJvbT86IG51bWJlcjtcbiAgdmFsaWRUbz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gS2V5QWxnb3JpdGhtIHtcbiAgRVMyNTYgPSBcIkVTMjU2XCIsXG4gIEVTMzg0ID0gXCJFUzM4NFwiLFxuICBFUzUxMiA9IFwiRVM1MTJcIixcbiAgSFMyNTYgPSBcIkhTMjU2XCIsXG4gIEhTMzg0ID0gXCJIUzM4NFwiLFxuICBIUzUxMiA9IFwiSFM1MTJcIixcbiAgUlMyNTYgPSBcIlJTMjU2XCIsXG4gIFJTMzg0ID0gXCJSUzM4NFwiLFxuICBSUzUxMiA9IFwiUlM1MTJcIixcbiAgRWQyNTUxOSA9IFwiRWQyNTUxOVwiXG59XG5cbmV4cG9ydCBlbnVtIEtleVR5cGUge1xuICBFQyA9IFwiRUNcIixcbiAgUlNBID0gXCJSU0FcIixcbiAgSE1BQyA9IFwiSE1BQ1wiLFxuICBPS1AgPSBcIk9LUFwiXG59XG5cbi8qKlxuICogS2V5IEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5UmVxdWVzdCB7XG4gIGtleT86IEtleTtcbn1cblxuLyoqXG4gKiBLZXkgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5UmVzcG9uc2Uge1xuICBrZXk/OiBLZXk7XG4gIGtleXM/OiBBcnJheTxLZXk+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgS2V5c1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBhbGdvcml0aG0/OiBLZXlBbGdvcml0aG07XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBLZXlUeXBlO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBLZXlzXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogS2V5U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogS2V5IHNlYXJjaCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5U2VhcmNoUmVzcG9uc2Uge1xuICBrZXlzPzogQXJyYXk8S2V5PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHVzZSB0eXBlIG9mIGEga2V5LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gS2V5VXNlIHtcbiAgU2lnbk9ubHkgPSBcIlNpZ25Pbmx5XCIsXG4gIFNpZ25BbmRWZXJpZnkgPSBcIlNpZ25BbmRWZXJpZnlcIixcbiAgVmVyaWZ5T25seSA9IFwiVmVyaWZ5T25seVwiXG59XG5cbi8qKlxuICogRXZlbnQgdG8gaW5kaWNhdGUga2lja3N0YXJ0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtpY2tzdGFydFN1Y2Nlc3NFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGluc3RhbmNlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBMREFQIGNvbm5lY3Rvci5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExEQVBDb25uZWN0b3JDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xuICBhdXRoZW50aWNhdGlvblVSTD86IHN0cmluZztcbiAgYmFzZVN0cnVjdHVyZT86IHN0cmluZztcbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gIGlkZW50aWZ5aW5nQXR0cmlidXRlPzogc3RyaW5nO1xuICBsYW1iZGFDb25maWd1cmF0aW9uPzogTGFtYmRhQ29uZmlndXJhdGlvbjtcbiAgbG9naW5JZEF0dHJpYnV0ZT86IHN0cmluZztcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHJlcXVlc3RlZEF0dHJpYnV0ZXM/OiBBcnJheTxzdHJpbmc+O1xuICBzZWN1cml0eU1ldGhvZD86IExEQVBTZWN1cml0eU1ldGhvZDtcbiAgc3lzdGVtQWNjb3VudEROPzogc3RyaW5nO1xuICBzeXN0ZW1BY2NvdW50UGFzc3dvcmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIExEQVBTZWN1cml0eU1ldGhvZCB7XG4gIE5vbmUgPSBcIk5vbmVcIixcbiAgTERBUFMgPSBcIkxEQVBTXCIsXG4gIFN0YXJ0VExTID0gXCJTdGFydFRMU1wiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIHJlY29uY2lsZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBIEphdmFTY3JpcHQgbGFtYmRhIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgZHVyaW5nIGNlcnRhaW4gZXZlbnRzIGluc2lkZSBGdXNpb25BdXRoLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYSB7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgZW5naW5lVHlwZT86IExhbWJkYUVuZ2luZVR5cGU7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBMYW1iZGFUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gTGFtYmRhRW5naW5lVHlwZSB7XG4gIEdyYWFsSlMgPSBcIkdyYWFsSlNcIixcbiAgTmFzaG9ybiA9IFwiTmFzaG9yblwiXG59XG5cbi8qKlxuICogTGFtYmRhIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFSZXF1ZXN0IHtcbiAgbGFtYmRhPzogTGFtYmRhO1xufVxuXG4vKipcbiAqIExhbWJkYSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVJlc3BvbnNlIHtcbiAgbGFtYmRhPzogTGFtYmRhO1xuICBsYW1iZGFzPzogQXJyYXk8TGFtYmRhPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIExhbWJkYXNcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBMYW1iZGFUeXBlO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBMYW1iZGFzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IExhbWJkYVNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIExhbWJkYSBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFTZWFyY2hSZXNwb25zZSB7XG4gIGxhbWJkYXM/OiBBcnJheTxMYW1iZGE+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZXMgb2YgbGFtYmRhcyB0aGF0IGluZGljYXRlIGhvdyB0aGV5IGFyZSBpbnZva2VkIGJ5IEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIExhbWJkYVR5cGUge1xuICBKV1RQb3B1bGF0ZSA9IFwiSldUUG9wdWxhdGVcIixcbiAgT3BlbklEUmVjb25jaWxlID0gXCJPcGVuSURSZWNvbmNpbGVcIixcbiAgU0FNTHYyUmVjb25jaWxlID0gXCJTQU1MdjJSZWNvbmNpbGVcIixcbiAgU0FNTHYyUG9wdWxhdGUgPSBcIlNBTUx2MlBvcHVsYXRlXCIsXG4gIEFwcGxlUmVjb25jaWxlID0gXCJBcHBsZVJlY29uY2lsZVwiLFxuICBFeHRlcm5hbEpXVFJlY29uY2lsZSA9IFwiRXh0ZXJuYWxKV1RSZWNvbmNpbGVcIixcbiAgRmFjZWJvb2tSZWNvbmNpbGUgPSBcIkZhY2Vib29rUmVjb25jaWxlXCIsXG4gIEdvb2dsZVJlY29uY2lsZSA9IFwiR29vZ2xlUmVjb25jaWxlXCIsXG4gIEhZUFJSZWNvbmNpbGUgPSBcIkhZUFJSZWNvbmNpbGVcIixcbiAgVHdpdHRlclJlY29uY2lsZSA9IFwiVHdpdHRlclJlY29uY2lsZVwiLFxuICBMREFQQ29ubmVjdG9yUmVjb25jaWxlID0gXCJMREFQQ29ubmVjdG9yUmVjb25jaWxlXCIsXG4gIExpbmtlZEluUmVjb25jaWxlID0gXCJMaW5rZWRJblJlY29uY2lsZVwiLFxuICBFcGljR2FtZXNSZWNvbmNpbGUgPSBcIkVwaWNHYW1lc1JlY29uY2lsZVwiLFxuICBOaW50ZW5kb1JlY29uY2lsZSA9IFwiTmludGVuZG9SZWNvbmNpbGVcIixcbiAgU29ueVBTTlJlY29uY2lsZSA9IFwiU29ueVBTTlJlY29uY2lsZVwiLFxuICBTdGVhbVJlY29uY2lsZSA9IFwiU3RlYW1SZWNvbmNpbGVcIixcbiAgVHdpdGNoUmVjb25jaWxlID0gXCJUd2l0Y2hSZWNvbmNpbGVcIixcbiAgWGJveFJlY29uY2lsZSA9IFwiWGJveFJlY29uY2lsZVwiLFxuICBDbGllbnRDcmVkZW50aWFsc0pXVFBvcHVsYXRlID0gXCJDbGllbnRDcmVkZW50aWFsc0pXVFBvcHVsYXRlXCIsXG4gIFNDSU1TZXJ2ZXJHcm91cFJlcXVlc3RDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJHcm91cFJlcXVlc3RDb252ZXJ0ZXJcIixcbiAgU0NJTVNlcnZlckdyb3VwUmVzcG9uc2VDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJHcm91cFJlc3BvbnNlQ29udmVydGVyXCIsXG4gIFNDSU1TZXJ2ZXJVc2VyUmVxdWVzdENvbnZlcnRlciA9IFwiU0NJTVNlcnZlclVzZXJSZXF1ZXN0Q29udmVydGVyXCIsXG4gIFNDSU1TZXJ2ZXJVc2VyUmVzcG9uc2VDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJVc2VyUmVzcG9uc2VDb252ZXJ0ZXJcIixcbiAgU2VsZlNlcnZpY2VSZWdpc3RyYXRpb25WYWxpZGF0aW9uID0gXCJTZWxmU2VydmljZVJlZ2lzdHJhdGlvblZhbGlkYXRpb25cIixcbiAgVXNlckluZm9Qb3B1bGF0ZSA9IFwiVXNlckluZm9Qb3B1bGF0ZVwiLFxuICBMb2dpblZhbGlkYXRpb24gPSBcIkxvZ2luVmFsaWRhdGlvblwiLFxuICBNRkFSZXF1aXJlbWVudCA9IFwiTUZBUmVxdWlyZW1lbnRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRJbkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkSW5JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8TGlua2VkSW5BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzZXQgb2YgbG9jYWxpemVkIEludGVnZXJzIHRoYXQgY2FuIGJlIHN0b3JlZCBhcyBKU09OLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbGl6ZWRJbnRlZ2VycyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4ge1xufVxuXG4vKipcbiAqIE1vZGVscyBhIHNldCBvZiBsb2NhbGl6ZWQgU3RyaW5ncyB0aGF0IGNhbiBiZSBzdG9yZWQgYXMgSlNPTi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbGl6ZWRTdHJpbmdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG59XG5cbi8qKlxuICogTG9jYXRpb24gaW5mb3JtYXRpb24uIFVzZWZ1bCBmb3IgSVAgYWRkcmVzc2VzIGFuZCBvdGhlciBkaXNwbGF5YWJsZSBkYXRhIG9iamVjdHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb24ge1xuICBjaXR5Pzogc3RyaW5nO1xuICBjb3VudHJ5Pzogc3RyaW5nO1xuICBkaXNwbGF5U3RyaW5nPzogc3RyaW5nO1xuICBsYXRpdHVkZT86IG51bWJlcjtcbiAgbG9uZ2l0dWRlPzogbnVtYmVyO1xuICByZWdpb24/OiBzdHJpbmc7XG4gIHppcGNvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBoaXN0b3JpY2FsIHN0YXRlIG9mIGEgdXNlciBsb2cgZXZlbnQuIFNpbmNlIGV2ZW50cyBjYW4gYmUgbW9kaWZpZWQsIHRoaXMgc3RvcmVzIHRoZSBoaXN0b3JpY2FsIHN0YXRlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0hpc3Rvcnkge1xuICBoaXN0b3J5SXRlbXM/OiBBcnJheTxIaXN0b3J5SXRlbT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUl0ZW0ge1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGNyZWF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGV4cGlyeT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5IaW50Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBwYXJhbWV0ZXJOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIExvZ2luIFBpbmcgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblBpbmdSZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogVGhlIHN1bW1hcnkgb2YgdGhlIGFjdGlvbiB0aGF0IGlzIHByZXZlbnRpbmcgbG9naW4gdG8gYmUgcmV0dXJuZWQgb24gdGhlIGxvZ2luIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblByZXZlbnRlZFJlc3BvbnNlIHtcbiAgYWN0aW9uZXJVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25JZD86IFVVSUQ7XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgbG9jYWxpemVkTmFtZT86IHN0cmluZztcbiAgbG9jYWxpemVkT3B0aW9uPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRSZWFzb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcmVhc29uPzogc3RyaW5nO1xuICByZWFzb25Db2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZEV4cG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGNyaXRlcmlhPzogTG9naW5SZWNvcmRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZWNvcmRTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBlbmQ/OiBudW1iZXI7XG4gIHN0YXJ0PzogbnVtYmVyO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaFJlcXVlc3Qge1xuICByZXRyaWV2ZVRvdGFsPzogYm9vbGVhbjtcbiAgc2VhcmNoPzogTG9naW5SZWNvcmRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBBIHJhdyBsb2dpbiByZWNvcmQgcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZWNvcmRTZWFyY2hSZXNwb25zZSB7XG4gIGxvZ2lucz86IEFycmF5PERpc3BsYXlhYmxlUmF3TG9naW4+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIGxvZ2luIHJlcG9ydC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlcG9ydFJlc3BvbnNlIHtcbiAgaG91cmx5Q291bnRzPzogQXJyYXk8Q291bnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBMb2dpbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBsb2dpbklkVHlwZXM/OiBBcnJheTxzdHJpbmc+O1xuICBvbmVUaW1lUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVzcG9uc2Uge1xuICBhY3Rpb25zPzogQXJyYXk8TG9naW5QcmV2ZW50ZWRSZXNwb25zZT47XG4gIGNoYW5nZVBhc3N3b3JkSWQ/OiBzdHJpbmc7XG4gIGNoYW5nZVBhc3N3b3JkUmVhc29uPzogQ2hhbmdlUGFzc3dvcmRSZWFzb247XG4gIGNvbmZpZ3VyYWJsZU1ldGhvZHM/OiBBcnJheTxzdHJpbmc+O1xuICBlbWFpbFZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICBpZGVudGl0eVZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICBtZXRob2RzPzogQXJyYXk8VHdvRmFjdG9yTWV0aG9kPjtcbiAgcGVuZGluZ0lkUExpbmtJZD86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW5JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHRocmVhdHNEZXRlY3RlZD86IEFycmF5PEF1dGhlbnRpY2F0aW9uVGhyZWF0cz47XG4gIHRva2VuPzogc3RyaW5nO1xuICB0b2tlbkV4cGlyYXRpb25JbnN0YW50PzogbnVtYmVyO1xuICB0cnVzdFRva2VuPzogc3RyaW5nO1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbiAgdHdvRmFjdG9yVHJ1c3RJZD86IHN0cmluZztcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBNYXR0aGV3IEFsdG1hblxuICovXG5leHBvcnQgZW51bSBMb2dvdXRCZWhhdmlvciB7XG4gIFJlZGlyZWN0T25seSA9IFwiUmVkaXJlY3RPbmx5XCIsXG4gIEFsbEFwcGxpY2F0aW9ucyA9IFwiQWxsQXBwbGljYXRpb25zXCJcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IGZvciB0aGUgTG9nb3V0IEFQSSB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRvIFVSTCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ291dFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb29rdXBSZXNwb25zZSB7XG4gIGlkZW50aXR5UHJvdmlkZXI/OiBJZGVudGl0eVByb3ZpZGVyRGV0YWlscztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyRGV0YWlscyB7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGlkPzogVVVJRDtcbiAgaWRwRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHR5cGU/OiBJZGVudGl0eVByb3ZpZGVyVHlwZTtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBtYW5hZ2VkIGZpZWxkcyB0aGF0IGFyZSBhbHNvIHB1dCBpbnRvIHRoZSBkYXRhYmFzZSBkdXJpbmcgRnVzaW9uQXV0aCBzZXR1cC5cbiAqIDxwPlxuICogSW50ZXJuYWwgTm90ZTogVGhlc2UgZmllbGRzIGFyZSBhbHNvIGRlY2xhcmVkIGluIFNRTCBpbiBvcmRlciB0byBib290c3RyYXAgdGhlIHN5c3RlbS4gVGhlc2UgbmVlZCB0byBzdGF5IGluIHN5bmMuXG4gKiBBbnkgY2hhbmdlcyB0byB0aGVzZSBmaWVsZHMgbmVlZHMgdG8gYWxzbyBiZSByZWZsZWN0ZWQgaW4gbXlzcWwuc3FsIGFuZCBwb3N0Z3Jlc3FsLnNxbFxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZWRGaWVsZHMge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXhpbXVtUGFzc3dvcmRBZ2UgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZGF5cz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBHcm91cCBNZW1iZXIgRGVsZXRlIFJlcXVlc3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyRGVsZXRlUmVxdWVzdCB7XG4gIG1lbWJlcklkcz86IEFycmF5PFVVSUQ+O1xuICBtZW1iZXJzPzogUmVjb3JkPFVVSUQsIEFycmF5PFVVSUQ+Pjtcbn1cblxuLyoqXG4gKiBHcm91cCBNZW1iZXIgUmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1iZXJSZXF1ZXN0IHtcbiAgbWVtYmVycz86IFJlY29yZDxVVUlELCBBcnJheTxHcm91cE1lbWJlcj4+O1xufVxuXG4vKipcbiAqIEdyb3VwIE1lbWJlciBSZXNwb25zZVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1iZXJSZXNwb25zZSB7XG4gIG1lbWJlcnM/OiBSZWNvcmQ8VVVJRCwgQXJyYXk8R3JvdXBNZW1iZXI+Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pa2V5IFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2Uge1xufVxuXG4vKipcbiAqIFN0b3JlcyBhbiBtZXNzYWdlIHRlbXBsYXRlIHVzZWQgdG8gZGlzdHJpYnV0ZSBtZXNzYWdlcztcbiAqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZVRlbXBsYXRlIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBNZXNzYWdlVHlwZTtcbn1cblxuLyoqXG4gKiBBIE1lc3NhZ2UgVGVtcGxhdGUgUmVxdWVzdCB0byB0aGUgQVBJXG4gKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3Qge1xuICBtZXNzYWdlVGVtcGxhdGU/OiBNZXNzYWdlVGVtcGxhdGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgbWVzc2FnZVRlbXBsYXRlPzogTWVzc2FnZVRlbXBsYXRlO1xuICBtZXNzYWdlVGVtcGxhdGVzPzogQXJyYXk8TWVzc2FnZVRlbXBsYXRlPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pa2V5IFNsZWV2aVxuICovXG5leHBvcnQgZW51bSBNZXNzYWdlVHlwZSB7XG4gIFNNUyA9IFwiU01TXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NlbmdlclJlcXVlc3Qge1xuICBtZXNzZW5nZXI/OiBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NlbmdlclJlc3BvbnNlIHtcbiAgbWVzc2VuZ2VyPzogQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb247XG4gIG1lc3NlbmdlcnM/OiBBcnJheTxCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbj47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NlbmdlclRyYW5zcG9ydCB7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGVudW0gTWVzc2VuZ2VyVHlwZSB7XG4gIEdlbmVyaWMgPSBcIkdlbmVyaWNcIixcbiAgS2Fma2EgPSBcIkthZmthXCIsXG4gIFR3aWxpbyA9IFwiVHdpbGlvXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWluaW11bVBhc3N3b3JkQWdlIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yIHRoZSBkYWlseSBhY3RpdmUgdXNlciByZXBvcnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9udGhseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZSB7XG4gIG1vbnRobHlBY3RpdmVVc2Vycz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29tbXVuaWNhdGUgdmFyaW91cyBhY3Rpb25zL2NvbnRleHRzIGluIHdoaWNoIG11bHRpLWZhY3RvciBhdXRoZW50aWNhdGlvbiBjYW4gYmUgdXNlZC5cbiAqL1xuZXhwb3J0IGVudW0gTXVsdGlGYWN0b3JBY3Rpb24ge1xuICBjaGFuZ2VQYXNzd29yZCA9IFwiY2hhbmdlUGFzc3dvcmRcIixcbiAgbG9naW4gPSBcImxvZ2luXCIsXG4gIHN0ZXBVcCA9IFwic3RlcFVwXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIE11bHRpRmFjdG9yTG9naW5Qb2xpY3kge1xuICBEaXNhYmxlZCA9IFwiRGlzYWJsZWRcIixcbiAgRW5hYmxlZCA9IFwiRW5hYmxlZFwiLFxuICBSZXF1aXJlZCA9IFwiUmVxdWlyZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pbnRlbmRvQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGVtYWlsQ2xhaW0/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB1bmlxdWVJZENsYWltPzogc3RyaW5nO1xuICB1c2VybmFtZUNsYWltPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE5pbnRlbmRvIGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOaW50ZW5kb0lkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxOaW50ZW5kb0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGVtYWlsQ2xhaW0/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB1bmlxdWVJZENsYWltPzogc3RyaW5nO1xuICB1c2VybmFtZUNsYWltPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbWFya2VyIGludGVyZmFjZSBpbmRpY2F0aW5nIHRoaXMgZXZlbnQgY2Fubm90IGJlIG1hZGUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9uVHJhbnNhY3Rpb25hbEV2ZW50IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGgyQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhvcml6ZWRPcmlnaW5VUkxzPzogQXJyYXk8c3RyaW5nPjtcbiAgYXV0aG9yaXplZFJlZGlyZWN0VVJMcz86IEFycmF5PHN0cmluZz47XG4gIGF1dGhvcml6ZWRVUkxWYWxpZGF0aW9uUG9saWN5PzogT2F1dGgyQXV0aG9yaXplZFVSTFZhbGlkYXRpb25Qb2xpY3k7XG4gIGNsaWVudEF1dGhlbnRpY2F0aW9uUG9saWN5PzogQ2xpZW50QXV0aGVudGljYXRpb25Qb2xpY3k7XG4gIGNsaWVudElkPzogc3RyaW5nO1xuICBjbGllbnRTZWNyZXQ/OiBzdHJpbmc7XG4gIGNvbnNlbnRNb2RlPzogT0F1dGhTY29wZUNvbnNlbnRNb2RlO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRldmljZVZlcmlmaWNhdGlvblVSTD86IHN0cmluZztcbiAgZW5hYmxlZEdyYW50cz86IEFycmF5PEdyYW50VHlwZT47XG4gIGdlbmVyYXRlUmVmcmVzaFRva2Vucz86IGJvb2xlYW47XG4gIGxvZ291dEJlaGF2aW9yPzogTG9nb3V0QmVoYXZpb3I7XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgcHJvb2ZLZXlGb3JDb2RlRXhjaGFuZ2VQb2xpY3k/OiBQcm9vZktleUZvckNvZGVFeGNoYW5nZVBvbGljeTtcbiAgcHJvdmlkZWRTY29wZVBvbGljeT86IFByb3ZpZGVkU2NvcGVQb2xpY3k7XG4gIHJlbGF0aW9uc2hpcD86IE9BdXRoQXBwbGljYXRpb25SZWxhdGlvbnNoaXA7XG4gIHJlcXVpcmVDbGllbnRBdXRoZW50aWNhdGlvbj86IGJvb2xlYW47XG4gIHJlcXVpcmVSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICBzY29wZUhhbmRsaW5nUG9saWN5PzogT0F1dGhTY29wZUhhbmRsaW5nUG9saWN5O1xuICB1bmtub3duU2NvcGVQb2xpY3k/OiBVbmtub3duU2NvcGVQb2xpY3k7XG59XG5cbi8qKlxuICogVGhlIGFwcGxpY2F0aW9uJ3MgcmVsYXRpb25zaGlwIHRvIHRoZSBhdXRob3JpemF0aW9uIHNlcnZlci4gRmlyc3QtcGFydHkgYXBwbGljYXRpb25zIHdpbGwgYmUgZ3JhbnRlZCBpbXBsaWNpdCBwZXJtaXNzaW9uIGZvciByZXF1ZXN0ZWQgc2NvcGVzLlxuICogVGhpcmQtcGFydHkgYXBwbGljYXRpb25zIHdpbGwgdXNlIHRoZSB7QGxpbmsgT0F1dGhTY29wZUNvbnNlbnRNb2RlfSBwb2xpY3kuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gT0F1dGhBcHBsaWNhdGlvblJlbGF0aW9uc2hpcCB7XG4gIEZpcnN0UGFydHkgPSBcIkZpcnN0UGFydHlcIixcbiAgVGhpcmRQYXJ0eSA9IFwiVGhpcmRQYXJ0eVwiXG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3Qgb2JqZWN0IGZvciBleGNoYW5naW5nIGFuIE9BdXRoIGF1dGhvcml6YXRpb24gY29kZSBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICpcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aENvZGVBY2Nlc3NUb2tlblJlcXVlc3Qge1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGdyYW50X3R5cGU/OiBzdHJpbmc7XG4gIHJlZGlyZWN0X3VyaT86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3Qgb2JqZWN0IHRvIG1ha2UgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIGZyb20gdGhlIEF1dGhvcml6ZSBlbmRwb2ludCBhbmQgYVxuICogY29kZV92ZXJpZmllciBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICpcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aENvZGVQS0NFQWNjZXNzVG9rZW5SZXF1ZXN0IHtcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xuICBjb2RlX3ZlcmlmaWVyPzogc3RyaW5nO1xuICBncmFudF90eXBlPzogc3RyaW5nO1xuICByZWRpcmVjdF91cmk/OiBzdHJpbmc7XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGhDb25maWd1cmF0aW9uUmVzcG9uc2Uge1xuICBodHRwU2Vzc2lvbk1heEluYWN0aXZlSW50ZXJ2YWw/OiBudW1iZXI7XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgb2F1dGhDb25maWd1cmF0aW9uPzogT0F1dGgyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGhFcnJvciB7XG4gIGNoYW5nZV9wYXNzd29yZF9pZD86IHN0cmluZztcbiAgZXJyb3I/OiBPQXV0aEVycm9yVHlwZTtcbiAgZXJyb3JfZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGVycm9yX3JlYXNvbj86IE9BdXRoRXJyb3JSZWFzb247XG4gIGVycm9yX3VyaT86IHN0cmluZztcbiAgdHdvX2ZhY3Rvcl9pZD86IHN0cmluZztcbiAgdHdvX2ZhY3Rvcl9tZXRob2RzPzogQXJyYXk8VHdvRmFjdG9yTWV0aG9kPjtcbn1cblxuZXhwb3J0IGVudW0gT0F1dGhFcnJvclJlYXNvbiB7XG4gIGF1dGhfY29kZV9ub3RfZm91bmQgPSBcImF1dGhfY29kZV9ub3RfZm91bmRcIixcbiAgYWNjZXNzX3Rva2VuX21hbGZvcm1lZCA9IFwiYWNjZXNzX3Rva2VuX21hbGZvcm1lZFwiLFxuICBhY2Nlc3NfdG9rZW5fZXhwaXJlZCA9IFwiYWNjZXNzX3Rva2VuX2V4cGlyZWRcIixcbiAgYWNjZXNzX3Rva2VuX3VuYXZhaWxhYmxlX2Zvcl9wcm9jZXNzaW5nID0gXCJhY2Nlc3NfdG9rZW5fdW5hdmFpbGFibGVfZm9yX3Byb2Nlc3NpbmdcIixcbiAgYWNjZXNzX3Rva2VuX2ZhaWxlZF9wcm9jZXNzaW5nID0gXCJhY2Nlc3NfdG9rZW5fZmFpbGVkX3Byb2Nlc3NpbmdcIixcbiAgYWNjZXNzX3Rva2VuX2ludmFsaWQgPSBcImFjY2Vzc190b2tlbl9pbnZhbGlkXCIsXG4gIGFjY2Vzc190b2tlbl9yZXF1aXJlZCA9IFwiYWNjZXNzX3Rva2VuX3JlcXVpcmVkXCIsXG4gIHJlZnJlc2hfdG9rZW5fbm90X2ZvdW5kID0gXCJyZWZyZXNoX3Rva2VuX25vdF9mb3VuZFwiLFxuICByZWZyZXNoX3Rva2VuX3R5cGVfbm90X3N1cHBvcnRlZCA9IFwicmVmcmVzaF90b2tlbl90eXBlX25vdF9zdXBwb3J0ZWRcIixcbiAgaWRfdG9rZW5faW52YWxpZCA9IFwiaWRfdG9rZW5faW52YWxpZFwiLFxuICB1bnN1cHBvcnRlZF90b2tlbl90eXBlID0gXCJ1bnN1cHBvcnRlZF90b2tlbl90eXBlXCIsXG4gIHRva2VuX3R5cGVfaGludF9taXNtYXRjaCA9IFwidG9rZW5fdHlwZV9oaW50X21pc21hdGNoXCIsXG4gIGludmFsaWRfY2xpZW50X2lkID0gXCJpbnZhbGlkX2NsaWVudF9pZFwiLFxuICBpbnZhbGlkX2V4cGlyZXNfaW4gPSBcImludmFsaWRfZXhwaXJlc19pblwiLFxuICBpbnZhbGlkX3VzZXJfY3JlZGVudGlhbHMgPSBcImludmFsaWRfdXNlcl9jcmVkZW50aWFsc1wiLFxuICBpbnZhbGlkX2dyYW50X3R5cGUgPSBcImludmFsaWRfZ3JhbnRfdHlwZVwiLFxuICBpbnZhbGlkX29yaWdpbiA9IFwiaW52YWxpZF9vcmlnaW5cIixcbiAgaW52YWxpZF9vcmlnaW5fb3BhcXVlID0gXCJpbnZhbGlkX29yaWdpbl9vcGFxdWVcIixcbiAgaW52YWxpZF9wa2NlX2NvZGVfdmVyaWZpZXIgPSBcImludmFsaWRfcGtjZV9jb2RlX3ZlcmlmaWVyXCIsXG4gIGludmFsaWRfcGtjZV9jb2RlX2NoYWxsZW5nZSA9IFwiaW52YWxpZF9wa2NlX2NvZGVfY2hhbGxlbmdlXCIsXG4gIGludmFsaWRfcGtjZV9jb2RlX2NoYWxsZW5nZV9tZXRob2QgPSBcImludmFsaWRfcGtjZV9jb2RlX2NoYWxsZW5nZV9tZXRob2RcIixcbiAgaW52YWxpZF9wcm9tcHQgPSBcImludmFsaWRfcHJvbXB0XCIsXG4gIGludmFsaWRfcmVkaXJlY3RfdXJpID0gXCJpbnZhbGlkX3JlZGlyZWN0X3VyaVwiLFxuICBpbnZhbGlkX3Jlc3BvbnNlX21vZGUgPSBcImludmFsaWRfcmVzcG9uc2VfbW9kZVwiLFxuICBpbnZhbGlkX3Jlc3BvbnNlX3R5cGUgPSBcImludmFsaWRfcmVzcG9uc2VfdHlwZVwiLFxuICBpbnZhbGlkX2lkX3Rva2VuX2hpbnQgPSBcImludmFsaWRfaWRfdG9rZW5faGludFwiLFxuICBpbnZhbGlkX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IFwiaW52YWxpZF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIixcbiAgaW52YWxpZF9kZXZpY2VfY29kZSA9IFwiaW52YWxpZF9kZXZpY2VfY29kZVwiLFxuICBpbnZhbGlkX3VzZXJfY29kZSA9IFwiaW52YWxpZF91c2VyX2NvZGVcIixcbiAgaW52YWxpZF9hZGRpdGlvbmFsX2NsaWVudF9pZCA9IFwiaW52YWxpZF9hZGRpdGlvbmFsX2NsaWVudF9pZFwiLFxuICBpbnZhbGlkX3RhcmdldF9lbnRpdHlfc2NvcGUgPSBcImludmFsaWRfdGFyZ2V0X2VudGl0eV9zY29wZVwiLFxuICBpbnZhbGlkX2VudGl0eV9wZXJtaXNzaW9uX3Njb3BlID0gXCJpbnZhbGlkX2VudGl0eV9wZXJtaXNzaW9uX3Njb3BlXCIsXG4gIGludmFsaWRfdXNlcl9pZCA9IFwiaW52YWxpZF91c2VyX2lkXCIsXG4gIGludmFsaWRfdGVuYW50X2lkID0gXCJpbnZhbGlkX3RlbmFudF9pZFwiLFxuICBncmFudF90eXBlX2Rpc2FibGVkID0gXCJncmFudF90eXBlX2Rpc2FibGVkXCIsXG4gIG1pc3NpbmdfY2xpZW50X2lkID0gXCJtaXNzaW5nX2NsaWVudF9pZFwiLFxuICBtaXNzaW5nX2NsaWVudF9zZWNyZXQgPSBcIm1pc3NpbmdfY2xpZW50X3NlY3JldFwiLFxuICBtaXNzaW5nX2NvZGUgPSBcIm1pc3NpbmdfY29kZVwiLFxuICBtaXNzaW5nX2NvZGVfY2hhbGxlbmdlID0gXCJtaXNzaW5nX2NvZGVfY2hhbGxlbmdlXCIsXG4gIG1pc3NpbmdfY29kZV92ZXJpZmllciA9IFwibWlzc2luZ19jb2RlX3ZlcmlmaWVyXCIsXG4gIG1pc3NpbmdfZGV2aWNlX2NvZGUgPSBcIm1pc3NpbmdfZGV2aWNlX2NvZGVcIixcbiAgbWlzc2luZ19ncmFudF90eXBlID0gXCJtaXNzaW5nX2dyYW50X3R5cGVcIixcbiAgbWlzc2luZ19yZWRpcmVjdF91cmkgPSBcIm1pc3NpbmdfcmVkaXJlY3RfdXJpXCIsXG4gIG1pc3NpbmdfcmVmcmVzaF90b2tlbiA9IFwibWlzc2luZ19yZWZyZXNoX3Rva2VuXCIsXG4gIG1pc3NpbmdfcmVzcG9uc2VfdHlwZSA9IFwibWlzc2luZ19yZXNwb25zZV90eXBlXCIsXG4gIG1pc3NpbmdfdG9rZW4gPSBcIm1pc3NpbmdfdG9rZW5cIixcbiAgbWlzc2luZ191c2VyX2NvZGUgPSBcIm1pc3NpbmdfdXNlcl9jb2RlXCIsXG4gIG1pc3NpbmdfdXNlcl9pZCA9IFwibWlzc2luZ191c2VyX2lkXCIsXG4gIG1pc3NpbmdfdmVyaWZpY2F0aW9uX3VyaSA9IFwibWlzc2luZ192ZXJpZmljYXRpb25fdXJpXCIsXG4gIG1pc3NpbmdfdGVuYW50X2lkID0gXCJtaXNzaW5nX3RlbmFudF9pZFwiLFxuICBsb2dpbl9wcmV2ZW50ZWQgPSBcImxvZ2luX3ByZXZlbnRlZFwiLFxuICBub3RfbGljZW5zZWQgPSBcIm5vdF9saWNlbnNlZFwiLFxuICB1c2VyX2NvZGVfZXhwaXJlZCA9IFwidXNlcl9jb2RlX2V4cGlyZWRcIixcbiAgdXNlcl9leHBpcmVkID0gXCJ1c2VyX2V4cGlyZWRcIixcbiAgdXNlcl9sb2NrZWQgPSBcInVzZXJfbG9ja2VkXCIsXG4gIHVzZXJfbm90X2ZvdW5kID0gXCJ1c2VyX25vdF9mb3VuZFwiLFxuICBjbGllbnRfYXV0aGVudGljYXRpb25fbWlzc2luZyA9IFwiY2xpZW50X2F1dGhlbnRpY2F0aW9uX21pc3NpbmdcIixcbiAgaW52YWxpZF9jbGllbnRfYXV0aGVudGljYXRpb25fc2NoZW1lID0gXCJpbnZhbGlkX2NsaWVudF9hdXRoZW50aWNhdGlvbl9zY2hlbWVcIixcbiAgaW52YWxpZF9jbGllbnRfYXV0aGVudGljYXRpb24gPSBcImludmFsaWRfY2xpZW50X2F1dGhlbnRpY2F0aW9uXCIsXG4gIGNsaWVudF9pZF9taXNtYXRjaCA9IFwiY2xpZW50X2lkX21pc21hdGNoXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9hZG1pbmlzdHJhdGl2ZSA9IFwiY2hhbmdlX3Bhc3N3b3JkX2FkbWluaXN0cmF0aXZlXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9icmVhY2hlZCA9IFwiY2hhbmdlX3Bhc3N3b3JkX2JyZWFjaGVkXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9leHBpcmVkID0gXCJjaGFuZ2VfcGFzc3dvcmRfZXhwaXJlZFwiLFxuICBjaGFuZ2VfcGFzc3dvcmRfdmFsaWRhdGlvbiA9IFwiY2hhbmdlX3Bhc3N3b3JkX3ZhbGlkYXRpb25cIixcbiAgdW5rbm93biA9IFwidW5rbm93blwiLFxuICBtaXNzaW5nX3JlcXVpcmVkX3Njb3BlID0gXCJtaXNzaW5nX3JlcXVpcmVkX3Njb3BlXCIsXG4gIHVua25vd25fc2NvcGUgPSBcInVua25vd25fc2NvcGVcIixcbiAgY29uc2VudF9jYW5jZWxlZCA9IFwiY29uc2VudF9jYW5jZWxlZFwiLFxuICBhdXRoZW50aWNhdGlvbl9yZXF1aXJlZCA9IFwiYXV0aGVudGljYXRpb25fcmVxdWlyZWRcIixcbiAgZW1haWxfdmVyaWZpY2F0aW9uX3JlcXVpcmVkID0gXCJlbWFpbF92ZXJpZmljYXRpb25fcmVxdWlyZWRcIixcbiAgbXVsdGlfZmFjdG9yX2NoYWxsZW5nZV9yZXF1aXJlZCA9IFwibXVsdGlfZmFjdG9yX2NoYWxsZW5nZV9yZXF1aXJlZFwiLFxuICBwaG9uZV92ZXJpZmljYXRpb25fcmVxdWlyZWQgPSBcInBob25lX3ZlcmlmaWNhdGlvbl9yZXF1aXJlZFwiLFxuICByZWdpc3RyYXRpb25fbWlzc2luZ19yZXF1aXJlbWVudCA9IFwicmVnaXN0cmF0aW9uX21pc3NpbmdfcmVxdWlyZW1lbnRcIixcbiAgcmVnaXN0cmF0aW9uX3JlcXVpcmVkID0gXCJyZWdpc3RyYXRpb25fcmVxdWlyZWRcIixcbiAgcmVnaXN0cmF0aW9uX3ZlcmlmaWNhdGlvbl9yZXF1aXJlZCA9IFwicmVnaXN0cmF0aW9uX3ZlcmlmaWNhdGlvbl9yZXF1aXJlZFwiLFxuICBjb25zZW50X3JlcXVpcmVkID0gXCJjb25zZW50X3JlcXVpcmVkXCJcbn1cblxuZXhwb3J0IGVudW0gT0F1dGhFcnJvclR5cGUge1xuICBpbnZhbGlkX3JlcXVlc3QgPSBcImludmFsaWRfcmVxdWVzdFwiLFxuICBpbnZhbGlkX2NsaWVudCA9IFwiaW52YWxpZF9jbGllbnRcIixcbiAgaW52YWxpZF9ncmFudCA9IFwiaW52YWxpZF9ncmFudFwiLFxuICBpbnZhbGlkX3Rva2VuID0gXCJpbnZhbGlkX3Rva2VuXCIsXG4gIGNvbnNlbnRfcmVxdWlyZWQgPSBcImNvbnNlbnRfcmVxdWlyZWRcIixcbiAgaW50ZXJhY3Rpb25fcmVxdWlyZWQgPSBcImludGVyYWN0aW9uX3JlcXVpcmVkXCIsXG4gIGxvZ2luX3JlcXVpcmVkID0gXCJsb2dpbl9yZXF1aXJlZFwiLFxuICB1bmF1dGhvcml6ZWRfY2xpZW50ID0gXCJ1bmF1dGhvcml6ZWRfY2xpZW50XCIsXG4gIGludmFsaWRfc2NvcGUgPSBcImludmFsaWRfc2NvcGVcIixcbiAgc2VydmVyX2Vycm9yID0gXCJzZXJ2ZXJfZXJyb3JcIixcbiAgdW5zdXBwb3J0ZWRfZ3JhbnRfdHlwZSA9IFwidW5zdXBwb3J0ZWRfZ3JhbnRfdHlwZVwiLFxuICB1bnN1cHBvcnRlZF9yZXNwb25zZV90eXBlID0gXCJ1bnN1cHBvcnRlZF9yZXNwb25zZV90eXBlXCIsXG4gIGFjY2Vzc19kZW5pZWQgPSBcImFjY2Vzc19kZW5pZWRcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX3JlcXVpcmVkID0gXCJjaGFuZ2VfcGFzc3dvcmRfcmVxdWlyZWRcIixcbiAgbm90X2xpY2Vuc2VkID0gXCJub3RfbGljZW5zZWRcIixcbiAgdHdvX2ZhY3Rvcl9yZXF1aXJlZCA9IFwidHdvX2ZhY3Rvcl9yZXF1aXJlZFwiLFxuICBhdXRob3JpemF0aW9uX3BlbmRpbmcgPSBcImF1dGhvcml6YXRpb25fcGVuZGluZ1wiLFxuICBleHBpcmVkX3Rva2VuID0gXCJleHBpcmVkX3Rva2VuXCIsXG4gIHVuc3VwcG9ydGVkX3Rva2VuX3R5cGUgPSBcInVuc3VwcG9ydGVkX3Rva2VuX3R5cGVcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aFJlc3BvbnNlIHtcbn1cblxuLyoqXG4gKiBDb250cm9scyB0aGUgcG9saWN5IGZvciByZXF1ZXN0aW5nIHVzZXIgcGVybWlzc2lvbiB0byBncmFudCBhY2Nlc3MgdG8gcmVxdWVzdGVkIHNjb3BlcyBkdXJpbmcgYW4gT0F1dGggd29ya2Zsb3dcbiAqIGZvciBhIHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIE9BdXRoU2NvcGVDb25zZW50TW9kZSB7XG4gIEFsd2F5c1Byb21wdCA9IFwiQWx3YXlzUHJvbXB0XCIsXG4gIFJlbWVtYmVyRGVjaXNpb24gPSBcIlJlbWVtYmVyRGVjaXNpb25cIixcbiAgTmV2ZXJQcm9tcHQgPSBcIk5ldmVyUHJvbXB0XCJcbn1cblxuLyoqXG4gKiBDb250cm9scyB0aGUgcG9saWN5IGZvciB3aGV0aGVyIE9BdXRoIHdvcmtmbG93cyB3aWxsIG1vcmUgc3RyaWN0bHkgYWRoZXJlIHRvIHRoZSBPQXV0aCBhbmQgT0lEQyBzcGVjaWZpY2F0aW9uXG4gKiBvciBydW4gaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZS5cbiAqXG4gKiBAYXV0aG9yIERhdmlkIENoYXJsZXNcbiAqL1xuZXhwb3J0IGVudW0gT0F1dGhTY29wZUhhbmRsaW5nUG9saWN5IHtcbiAgQ29tcGF0aWJpbGl0eSA9IFwiQ29tcGF0aWJpbGl0eVwiLFxuICBTdHJpY3QgPSBcIlN0cmljdFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBKb2huYXRob24gV29vZFxuICovXG5leHBvcnQgZW51bSBPYXV0aDJBdXRob3JpemVkVVJMVmFsaWRhdGlvblBvbGljeSB7XG4gIEFsbG93V2lsZGNhcmRzID0gXCJBbGxvd1dpbGRjYXJkc1wiLFxuICBFeGFjdE1hdGNoID0gXCJFeGFjdE1hdGNoXCJcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgaW5kaWNhdGluZyB0aGlzIGV2ZW50IGlzIGFuIGV2ZW50IHRoYXQgY2FuIHN1cHBseSBhIGxpbmtlZCBvYmplY3QgSWQuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYmplY3RJZGVudGlmaWFibGUge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gT2JqZWN0U3RhdGUge1xuICBBY3RpdmUgPSBcIkFjdGl2ZVwiLFxuICBJbmFjdGl2ZSA9IFwiSW5hY3RpdmVcIixcbiAgUGVuZGluZ0RlbGV0ZSA9IFwiUGVuZGluZ0RlbGV0ZVwiXG59XG5cbi8qKlxuICogT3BlbklEIENvbm5lY3QgQ29uZmlndXJhdGlvbiBhcyBkZXNjcmliZWQgYnkgdGhlIDxhIGhyZWY9XCJodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtZGlzY292ZXJ5LTFfMC5odG1sI1Byb3ZpZGVyTWV0YWRhdGFcIj5PcGVuSURcbiAqIFByb3ZpZGVyIE1ldGFkYXRhPC9hPi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbklkQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhvcml6YXRpb25fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGJhY2tjaGFubmVsX2xvZ291dF9zdXBwb3J0ZWQ/OiBib29sZWFuO1xuICBjbGFpbXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgZGV2aWNlX2F1dGhvcml6YXRpb25fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGVuZF9zZXNzaW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBmcm9udGNoYW5uZWxfbG9nb3V0X3N1cHBvcnRlZD86IGJvb2xlYW47XG4gIGdyYW50X3R5cGVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIGlkX3Rva2VuX3NpZ25pbmdfYWxnX3ZhbHVlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGp3a3NfdXJpPzogc3RyaW5nO1xuICByZXNwb25zZV9tb2Rlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICByZXNwb25zZV90eXBlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICBzY29wZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgc3ViamVjdF90eXBlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICB0b2tlbl9lbmRwb2ludD86IHN0cmluZztcbiAgdG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIHVzZXJpbmZvX2VuZHBvaW50Pzogc3RyaW5nO1xuICB1c2VyaW5mb19zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbklkQ29ubmVjdEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuSWRDb25uZWN0SWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPE9wZW5JZENvbm5lY3RBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBvYXV0aDI/OiBJZGVudGl0eVByb3ZpZGVyT2F1dGgyQ29uZmlndXJhdGlvbjtcbiAgcG9zdFJlcXVlc3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZEJyZWFjaERldGVjdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBtYXRjaE1vZGU/OiBCcmVhY2hNYXRjaE1vZGU7XG4gIG5vdGlmeVVzZXJFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBvbkxvZ2luPzogQnJlYWNoQWN0aW9uO1xufVxuXG5leHBvcnQgZW51bSBCcmVhY2hBY3Rpb24ge1xuICBPZmYgPSBcIk9mZlwiLFxuICBSZWNvcmRPbmx5ID0gXCJSZWNvcmRPbmx5XCIsXG4gIE5vdGlmeVVzZXIgPSBcIk5vdGlmeVVzZXJcIixcbiAgUmVxdWlyZUNoYW5nZSA9IFwiUmVxdWlyZUNoYW5nZVwiXG59XG5cbmV4cG9ydCBlbnVtIEJyZWFjaE1hdGNoTW9kZSB7XG4gIExvdyA9IFwiTG93XCIsXG4gIE1lZGl1bSA9IFwiTWVkaXVtXCIsXG4gIEhpZ2ggPSBcIkhpZ2hcIlxufVxuXG4vKipcbiAqIFBhc3N3b3JkIEVuY3J5cHRpb24gU2NoZW1lIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGVuY3J5cHRpb25TY2hlbWU/OiBzdHJpbmc7XG4gIGVuY3J5cHRpb25TY2hlbWVGYWN0b3I/OiBudW1iZXI7XG4gIG1vZGlmeUVuY3J5cHRpb25TY2hlbWVPbkxvZ2luPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERlcmVrIEtsYXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXMge1xuICBicmVhY2hEZXRlY3Rpb24/OiBQYXNzd29yZEJyZWFjaERldGVjdGlvbjtcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIHJlbWVtYmVyUHJldmlvdXNQYXNzd29yZHM/OiBSZW1lbWJlclByZXZpb3VzUGFzc3dvcmRzO1xuICByZXF1aXJlTWl4ZWRDYXNlPzogYm9vbGVhbjtcbiAgcmVxdWlyZU5vbkFscGhhPzogYm9vbGVhbjtcbiAgcmVxdWlyZU51bWJlcj86IGJvb2xlYW47XG4gIHZhbGlkYXRlT25Mb2dpbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2Uge1xuICBwYXNzd29yZFZhbGlkYXRpb25SdWxlcz86IFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgYWxsIGlkZW50aXR5IHByb3ZpZGVycyB0aGF0IGFyZSBwYXNzd29yZGxlc3MgYW5kIGRvIG5vdCBhY2NlcHQgYSBwYXNzd29yZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZGxlc3NJZGVudGl0eVByb3ZpZGVyIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZGxlc3NTZW5kUmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjb2RlPzogc3RyaW5nO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc1N0YXJ0UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBsb2dpbklkVHlwZXM/OiBBcnJheTxzdHJpbmc+O1xuICBsb2dpblN0cmF0ZWd5PzogUGFzc3dvcmRsZXNzU3RyYXRlZ3k7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzU3RhcnRSZXNwb25zZSB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gUGFzc3dvcmRsZXNzU3RyYXRlZ3kge1xuICBDbGlja2FibGVMaW5rID0gXCJDbGlja2FibGVMaW5rXCIsXG4gIEZvcm1GaWVsZCA9IFwiRm9ybUZpZWxkXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVuZGluZ0lkUExpbmsge1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rcz86IEFycmF5PElkZW50aXR5UHJvdmlkZXJMaW5rPjtcbiAgaWRlbnRpdHlQcm92aWRlck5hbWU/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uPzogSWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb247XG4gIGlkZW50aXR5UHJvdmlkZXJUeXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG4gIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ/OiBzdHJpbmc7XG4gIHVzZXI/OiBVc2VyO1xuICB1c2VybmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZW5kaW5nUmVzcG9uc2Uge1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHVudmVyaWZpZWQgcGhvbmUgbnVtYmVyIGlkZW50aXRpZXMuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaG9uZVVudmVyaWZpZWRPcHRpb25zIHtcbiAgYWxsb3dQaG9uZU51bWJlckNoYW5nZVdoZW5HYXRlZD86IGJvb2xlYW47XG4gIGJlaGF2aW9yPzogVW52ZXJpZmllZEJlaGF2aW9yO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGluYm91bmQgbGFtYmRhIHBhcmFtZXRlciAncG9saWNpZXMnIGZvciBNRkEgUmVxdWlyZWQgbGFtYmRhcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2xpY2llcyB7XG4gIGFwcGxpY2F0aW9uTG9naW5Qb2xpY3k/OiBNdWx0aUZhY3RvckxvZ2luUG9saWN5O1xuICBhcHBsaWNhdGlvbk11bHRpRmFjdG9yVHJ1c3RQb2xpY3k/OiBBcHBsaWNhdGlvbk11bHRpRmFjdG9yVHJ1c3RQb2xpY3k7XG4gIHRlbmFudExvZ2luUG9saWN5PzogTXVsdGlGYWN0b3JMb2dpblBvbGljeTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlcXVlc3Qge1xuICBsb2NhbGU/OiBzdHJpbmc7XG4gIG1lc3NhZ2VUZW1wbGF0ZT86IE1lc3NhZ2VUZW1wbGF0ZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgZXJyb3JzPzogRXJyb3JzO1xuICBtZXNzYWdlPzogU01TTWVzc2FnZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3UmVxdWVzdCB7XG4gIGVtYWlsVGVtcGxhdGU/OiBFbWFpbFRlbXBsYXRlO1xuICBsb2NhbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXZpZXdSZXNwb25zZSB7XG4gIGVtYWlsPzogRW1haWw7XG4gIGVycm9ycz86IEVycm9ycztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgZW51bSBQcm9vZktleUZvckNvZGVFeGNoYW5nZVBvbGljeSB7XG4gIFJlcXVpcmVkID0gXCJSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZCA9IFwiTm90UmVxdWlyZWRcIixcbiAgTm90UmVxdWlyZWRXaGVuVXNpbmdDbGllbnRBdXRoZW50aWNhdGlvbiA9IFwiTm90UmVxdWlyZWRXaGVuVXNpbmdDbGllbnRBdXRoZW50aWNhdGlvblwiXG59XG5cbi8qKlxuICogVGhlIGhhbmRsaW5nIHBvbGljeSBmb3Igc2NvcGVzIHByb3ZpZGVkIGJ5IEZ1c2lvbkF1dGhcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVkU2NvcGVQb2xpY3kge1xuICBhZGRyZXNzPzogUmVxdWlyYWJsZTtcbiAgZW1haWw/OiBSZXF1aXJhYmxlO1xuICBwaG9uZT86IFJlcXVpcmFibGU7XG4gIHByb2ZpbGU/OiBSZXF1aXJhYmxlO1xufVxuXG4vKipcbiAqIEFsbG93cyB0aGUgUmVseWluZyBQYXJ0eSB0byBzcGVjaWZ5IGRlc2lyZWQgYXR0cmlidXRlcyBvZiBhIG5ldyBjcmVkZW50aWFsLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7XG4gIGF0dGVzdGF0aW9uPzogQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTtcbiAgYXV0aGVudGljYXRvclNlbGVjdGlvbj86IEF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYTtcbiAgY2hhbGxlbmdlPzogc3RyaW5nO1xuICBleGNsdWRlQ3JlZGVudGlhbHM/OiBBcnJheTxQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcj47XG4gIGV4dGVuc2lvbnM/OiBXZWJBdXRoblJlZ2lzdHJhdGlvbkV4dGVuc2lvbk9wdGlvbnM7XG4gIHB1YktleUNyZWRQYXJhbXM/OiBBcnJheTxQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycz47XG4gIHJwPzogUHVibGljS2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0eTtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgdXNlcj86IFB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5O1xufVxuXG4vKipcbiAqIENvbnRhaW5zIGF0dHJpYnV0ZXMgZm9yIHRoZSBSZWx5aW5nIFBhcnR5IHRvIHJlZmVyIHRvIGFuIGV4aXN0aW5nIHB1YmxpYyBrZXkgY3JlZGVudGlhbCBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciB7XG4gIGlkPzogc3RyaW5nO1xuICB0cmFuc3BvcnRzPzogQXJyYXk8c3RyaW5nPjtcbiAgdHlwZT86IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyBhIHVzZXIgYWNjb3VudCBvciBXZWJBdXRobiBSZWx5aW5nIFBhcnR5IGFzc29jaWF0ZWQgd2l0aCBhIHB1YmxpYyBrZXkgY3JlZGVudGlhbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkge1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN1cHBseSBpbmZvcm1hdGlvbiBvbiBjcmVkZW50aWFsIHR5cGUgYW5kIGFsZ29yaXRobSB0byB0aGUgPGk+YXV0aGVudGljYXRvcjwvaT4uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyB7XG4gIGFsZz86IENvc2VBbGdvcml0aG1JZGVudGlmaWVyO1xuICB0eXBlPzogUHVibGljS2V5Q3JlZGVudGlhbFR5cGU7XG59XG5cbi8qKlxuICogU3VwcGx5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFJlbHlpbmcgUGFydHkgd2hlbiBjcmVhdGluZyBhIG5ldyBjcmVkZW50aWFsXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsUmVseWluZ1BhcnR5RW50aXR5IGV4dGVuZHMgUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eSB7XG4gIGlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSA8aT5hdXRoZW50aWNhdG9yPC9pPiB3aXRoIHRoZSBkYXRhIGl0IG5lZWRzIHRvIGdlbmVyYXRlIGFuIGFzc2VydGlvbi5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7XG4gIGFsbG93Q3JlZGVudGlhbHM/OiBBcnJheTxQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcj47XG4gIGNoYWxsZW5nZT86IHN0cmluZztcbiAgcnBJZD86IHN0cmluZztcbiAgdGltZW91dD86IG51bWJlcjtcbiAgdXNlclZlcmlmaWNhdGlvbj86IFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHZhbGlkIGNyZWRlbnRpYWwgdHlwZXMuIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIHBvaW50IGluIHRoZSBXZWJBdXRobiBzcGVjLiBUaGUgb25seSBkZWZpbmVkIHZhbHVlIGF0IHRoaXMgdGltZSBpcyBcInB1YmxpYy1rZXlcIlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlIHtcbiAgcHVibGljS2V5ID0gXCJwdWJsaWMta2V5XCJcbn1cblxuLyoqXG4gKiBTdXBwbHkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBhY2NvdW50IHdoZW4gY3JlYXRpbmcgYSBuZXcgY3JlZGVudGlhbFxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgZXh0ZW5kcyBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpXVCBQdWJsaWMgS2V5IFJlc3BvbnNlIE9iamVjdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlSZXNwb25zZSB7XG4gIHB1YmxpY0tleT86IHN0cmluZztcbiAgcHVibGljS2V5cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIHRpbWVQZXJpb2RJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmF3IGxvZ2luIGluZm9ybWF0aW9uIGZvciBlYWNoIHRpbWUgYSB1c2VyIGxvZ3MgaW50byBhbiBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXdMb2dpbiB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBpbnN0YW50PzogbnVtYmVyO1xuICBpcEFkZHJlc3M/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIFJlYWN0b3JGZWF0dXJlU3RhdHVzIHtcbiAgQUNUSVZFID0gXCJBQ1RJVkVcIixcbiAgRElTQ09OTkVDVEVEID0gXCJESVNDT05ORUNURURcIixcbiAgUEVORElORyA9IFwiUEVORElOR1wiLFxuICBESVNBQkxFRCA9IFwiRElTQUJMRURcIixcbiAgVU5LTk9XTiA9IFwiVU5LTk9XTlwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JNZXRyaWNzIHtcbiAgYnJlYWNoZWRQYXNzd29yZE1ldHJpY3M/OiBSZWNvcmQ8VVVJRCwgQnJlYWNoZWRQYXNzd29yZFRlbmFudE1ldHJpYz47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JNZXRyaWNzUmVzcG9uc2Uge1xuICBtZXRyaWNzPzogUmVhY3Rvck1ldHJpY3M7XG59XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgbWFuYWdpbmcgRnVzaW9uQXV0aCBSZWFjdG9yIGFuZCBsaWNlbnNlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yUmVxdWVzdCB7XG4gIGxpY2Vuc2U/OiBzdHJpbmc7XG4gIGxpY2Vuc2VJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RvclJlc3BvbnNlIHtcbiAgc3RhdHVzPzogUmVhY3RvclN0YXR1cztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RvclN0YXR1cyB7XG4gIGFkdmFuY2VkSWRlbnRpdHlQcm92aWRlcnM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYWR2YW5jZWRMYW1iZGFzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkTXVsdGlGYWN0b3JBdXRoZW50aWNhdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZE9BdXRoU2NvcGVzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkT0F1dGhTY29wZXNDdXN0b21TY29wZXM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYWR2YW5jZWRPQXV0aFNjb3Blc1RoaXJkUGFydHlBcHBsaWNhdGlvbnM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYWR2YW5jZWRSZWdpc3RyYXRpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYXBwbGljYXRpb25NdWx0aUZhY3RvckF1dGhlbnRpY2F0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFwcGxpY2F0aW9uVGhlbWVzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGJyZWFjaGVkUGFzc3dvcmREZXRlY3Rpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgY29ubmVjdG9ycz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBlbnRpdHlNYW5hZ2VtZW50PzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGV4cGlyYXRpb24/OiBzdHJpbmc7XG4gIGxpY2Vuc2VBdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgbGljZW5zZWQ/OiBib29sZWFuO1xuICBtdWx0aUZhY3RvckxhbWJkYXM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgc2NpbVNlcnZlcj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB0ZW5hbnRNYW5hZ2VyQXBwbGljYXRpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgdGhyZWF0RGV0ZWN0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIHVuaXZlcnNhbEFwcGxpY2F0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIHdlYkF1dGhuPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIHdlYkF1dGhuUGxhdGZvcm1BdXRoZW50aWNhdG9ycz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB3ZWJBdXRoblJvYW1pbmdBdXRoZW50aWNhdG9ycz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgdXNlciBsb2dpbiByZXBvcnQuXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY2VudExvZ2luUmVzcG9uc2Uge1xuICBsb2dpbnM/OiBBcnJheTxEaXNwbGF5YWJsZVJhd0xvZ2luPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0aW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFJlc3BvbnNlIHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBKV1QgUmVmcmVzaCBUb2tlbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIG1ldGFEYXRhPzogTWV0YURhdGE7XG4gIHN0YXJ0SW5zdGFudD86IG51bWJlcjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhRGF0YSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZXZpY2U/OiBEZXZpY2VJbmZvO1xuICBzY29wZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IG9iamVjdCB0byBleGNoYW5nZSBhIFJlZnJlc2ggVG9rZW4gZm9yIGFuIEFjY2VzcyBUb2tlbi5cbiAqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuQWNjZXNzVG9rZW5SZXF1ZXN0IHtcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBncmFudF90eXBlPzogc3RyaW5nO1xuICByZWZyZXNoX3Rva2VuPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1c2VyX2NvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBSZWZyZXNoVG9rZW5FeHBpcmF0aW9uUG9saWN5IHtcbiAgRml4ZWQgPSBcIkZpeGVkXCIsXG4gIFNsaWRpbmdXaW5kb3cgPSBcIlNsaWRpbmdXaW5kb3dcIixcbiAgU2xpZGluZ1dpbmRvd1dpdGhNYXhpbXVtTGlmZXRpbWUgPSBcIlNsaWRpbmdXaW5kb3dXaXRoTWF4aW11bUxpZmV0aW1lXCJcbn1cblxuLyoqXG4gKiBSZWZyZXNoIFRva2VuIEltcG9ydCByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuSW1wb3J0UmVxdWVzdCB7XG4gIHJlZnJlc2hUb2tlbnM/OiBBcnJheTxSZWZyZXNoVG9rZW4+O1xuICB2YWxpZGF0ZURiQ29uc3RyYWludHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlZnJlc2ggdG9rZW4gb25lLXRpbWUgdXNlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29uZmlndXJhdGlvbiBpcyB1dGlsaXplZCB3aGVuIHRoZSB1c2FnZSBwb2xpY3kgaXNcbiAqIGNvbmZpZ3VyZWQgZm9yIG9uZS10aW1lIHVzZS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuT25lVGltZVVzZUNvbmZpZ3VyYXRpb24ge1xuICBncmFjZVBlcmlvZEluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHJldHJpZXZpbmcgUmVmcmVzaCBUb2tlbnNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuUmVzcG9uc2Uge1xuICByZWZyZXNoVG9rZW4/OiBSZWZyZXNoVG9rZW47XG4gIHJlZnJlc2hUb2tlbnM/OiBBcnJheTxSZWZyZXNoVG9rZW4+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXZvY2F0aW9uUG9saWN5IHtcbiAgb25Mb2dpblByZXZlbnRlZD86IGJvb2xlYW47XG4gIG9uTXVsdGlGYWN0b3JFbmFibGU/OiBib29sZWFuO1xuICBvbk9uZVRpbWVUb2tlblJldXNlPzogYm9vbGVhbjtcbiAgb25QYXNzd29yZENoYW5nZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBSZWZyZXNoIFRva2VuIEFQSSB0byByZXZva2UgYSByZWZyZXNoIHRva2VuIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBVUkwgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXZva2VSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuU2xpZGluZ1dpbmRvd0NvbmZpZ3VyYXRpb24ge1xuICBtYXhpbXVtVGltZVRvTGl2ZUluTWludXRlcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFJlZnJlc2hUb2tlblVzYWdlUG9saWN5IHtcbiAgUmV1c2FibGUgPSBcIlJldXNhYmxlXCIsXG4gIE9uZVRpbWVVc2UgPSBcIk9uZVRpbWVVc2VcIlxufVxuXG4vKipcbiAqIFJlZ2lzdHJhdGlvbiBkZWxldGUgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvbkRlbGV0ZVJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIHJlZ2lzdHJhdGlvbiByZXBvcnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uUmVwb3J0UmVzcG9uc2Uge1xuICBob3VybHlDb3VudHM/OiBBcnJheTxDb3VudD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlZ2lzdHJhdGlvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBkaXNhYmxlRG9tYWluQmxvY2s/OiBib29sZWFuO1xuICBnZW5lcmF0ZUF1dGhlbnRpY2F0aW9uVG9rZW4/OiBib29sZWFuO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICBzZW5kU2V0UGFzc3dvcmRFbWFpbD86IGJvb2xlYW47XG4gIHNlbmRTZXRQYXNzd29yZElkZW50aXR5VHlwZT86IFNlbmRTZXRQYXNzd29yZElkZW50aXR5VHlwZTtcbiAgc2tpcFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbj86IGJvb2xlYW47XG4gIHNraXBWZXJpZmljYXRpb24/OiBib29sZWFuO1xuICB1c2VyPzogVXNlcjtcbiAgdmVyaWZpY2F0aW9uSWRzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBSZWdpc3RyYXRpb24gQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvblJlc3BvbnNlIHtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW5JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25PbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuRXhwaXJhdGlvbkluc3RhbnQ/OiBudW1iZXI7XG4gIHVzZXI/OiBVc2VyO1xuICB2ZXJpZmljYXRpb25JZHM/OiBBcnJheTxWZXJpZmljYXRpb25JZD47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvblVudmVyaWZpZWRPcHRpb25zIHtcbiAgYmVoYXZpb3I/OiBVbnZlcmlmaWVkQmVoYXZpb3I7XG59XG5cbi8qKlxuICogUmVpbmRleCBBUEkgcmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWluZGV4UmVxdWVzdCB7XG4gIGluZGV4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWxvYWRSZXF1ZXN0IHtcbiAgbmFtZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW1lbWJlclByZXZpb3VzUGFzc3dvcmRzIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGNvdW50PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFNvbWV0aGluZyB0aGF0IGNhbiBiZSByZXF1aXJlZCBhbmQgdGh1cyBhbHNvIG9wdGlvbmFsLiBUaGlzIGN1cnJlbnRseSBleHRlbmRzIEVuYWJsZWFibGUgYmVjYXVzZSBhbnl0aGluZyB0aGF0IGlzXG4gKiByZXF1aXJlZC9vcHRpb25hbCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWFibGUgYXMgd2VsbC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJhYmxlIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBpbmJvdW5kIGxhbWJkYSBwYXJhbWV0ZXIgJ3Jlc3VsdCcgZm9yIE1GQSBSZXF1aXJlZCBsYW1iZGFzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVkTGFtYmRhUmVzdWx0IHtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBzZW5kU3VzcGljaW91c0xvZ2luRXZlbnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBkZXNjcmliaW5nIHRoZSBuZWVkIGZvciBDT1JTIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVzQ09SU0NvbmZpZ3VyYXRpb24ge1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgUmVseWluZyBQYXJ0eSdzIHJlcXVpcmVtZW50cyBmb3IgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi0yLyNjbGllbnQtc2lkZS1kaXNjb3ZlcmFibGUtY3JlZGVudGlhbFwiPmNsaWVudC1zaWRlXG4gKiBkaXNjb3ZlcmFibGUgY3JlZGVudGlhbHM8L2E+IChmb3JtZXJseSBrbm93biBhcyBcInJlc2lkZW50IGtleXNcIilcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBSZXNpZGVudEtleVJlcXVpcmVtZW50IHtcbiAgZGlzY291cmFnZWQgPSBcImRpc2NvdXJhZ2VkXCIsXG4gIHByZWZlcnJlZCA9IFwicHJlZmVycmVkXCIsXG4gIHJlcXVpcmVkID0gXCJyZXF1aXJlZFwiXG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3Qgb2JqZWN0IGZvciByZXRyaWV2aW5nIGEgdXNlciBjb2RlIHRoYXQgaXMgcGFydCBvZiBhbiBpbi1wcm9ncmVzcyBEZXZpY2UgQXV0aG9yaXphdGlvbiBHcmFudC5cbiAqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cmlldmVVc2VyQ29kZVJlcXVlc3Qge1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdXNlcl9jb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IG9iamVjdCBmb3IgcmV0cmlldmluZyBhIHVzZXIgY29kZSB0aGF0IGlzIHBhcnQgb2YgYW4gaW4tcHJvZ3Jlc3MgRGV2aWNlIEF1dGhvcml6YXRpb24gR3JhbnQgdXNpbmcgYW4gQVBJIGtleVxuICpcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXRyaWV2ZVVzZXJDb2RlVXNpbmdBUElLZXlSZXF1ZXN0IHtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1c2VyX2NvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25JbWFnZVVSTD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyQXNzZXJ0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGRlc3RpbmF0aW9uPzogU0FNTHYyRGVzdGluYXRpb25Bc3NlcnRpb25Db25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGVuY3J5cHRlZCBhc3NlcnRpb25zIHdoZW4gYWN0aW5nIGFzIFNBTUwgU2VydmljZSBQcm92aWRlclxuICpcbiAqIEBhdXRob3IgSmFyZXQgSGVuZHJpY2tzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJBc3NlcnRpb25EZWNyeXB0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBrZXlUcmFuc3BvcnREZWNyeXB0aW9uS2V5SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJEZXN0aW5hdGlvbkFzc2VydGlvbkNvbmZpZ3VyYXRpb24ge1xuICBhbHRlcm5hdGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgcG9saWN5PzogU0FNTHYyRGVzdGluYXRpb25Bc3NlcnRpb25Qb2xpY3k7XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgZW51bSBTQU1MdjJEZXN0aW5hdGlvbkFzc2VydGlvblBvbGljeSB7XG4gIEVuYWJsZWQgPSBcIkVuYWJsZWRcIixcbiAgRGlzYWJsZWQgPSBcIkRpc2FibGVkXCIsXG4gIEFsbG93QWx0ZXJuYXRlcyA9IFwiQWxsb3dBbHRlcm5hdGVzXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRQSW5pdGlhdGVkQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xufVxuXG4vKipcbiAqIFNBTUwgdjIgSWRQIEluaXRpYXRlZCBpZGVudGl0eSBwcm92aWRlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJJZFBJbml0aWF0ZWRJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZVNBTUx2MklkZW50aXR5UHJvdmlkZXI8U0FNTHYySWRQSW5pdGlhdGVkQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGlzc3Vlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJZFAgSW5pdGlhdGVkIGxvZ2luIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRQSW5pdGlhdGVkTG9naW5Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG5hbWVJZEZvcm1hdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTQU1MIHYyIGlkZW50aXR5IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VTQU1MdjJJZGVudGl0eVByb3ZpZGVyPFNBTUx2MkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBhc3NlcnRpb25Db25maWd1cmF0aW9uPzogU0FNTHYyQXNzZXJ0aW9uQ29uZmlndXJhdGlvbjtcbiAgYnV0dG9uSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBpZHBFbmRwb2ludD86IHN0cmluZztcbiAgaWRwSW5pdGlhdGVkQ29uZmlndXJhdGlvbj86IFNBTUx2MklkcEluaXRpYXRlZENvbmZpZ3VyYXRpb247XG4gIGlzc3Vlcj86IHN0cmluZztcbiAgbG9naW5IaW50Q29uZmlndXJhdGlvbj86IExvZ2luSGludENvbmZpZ3VyYXRpb247XG4gIG5hbWVJZEZvcm1hdD86IHN0cmluZztcbiAgcG9zdFJlcXVlc3Q/OiBib29sZWFuO1xuICByZXF1ZXN0U2lnbmluZ0tleUlkPzogVVVJRDtcbiAgc2lnblJlcXVlc3Q/OiBib29sZWFuO1xuICB4bWxTaWduYXR1cmVDMTRuTWV0aG9kPzogQ2Fub25pY2FsaXphdGlvbk1ldGhvZDtcbn1cblxuLyoqXG4gKiBDb25maWcgZm9yIHJlZ3VsYXIgU0FNTCBJRFAgY29uZmlndXJhdGlvbnMgdGhhdCBzdXBwb3J0IElkUCBpbml0aWF0ZWQgcmVxdWVzdHNcbiAqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRwSW5pdGlhdGVkQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBpc3N1ZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNNU01lc3NhZ2Uge1xuICBwaG9uZU51bWJlcj86IHN0cmluZztcbiAgdGV4dE1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNNU01lc3NhZ2VUZW1wbGF0ZSBleHRlbmRzIE1lc3NhZ2VUZW1wbGF0ZSB7XG4gIGRlZmF1bHRUZW1wbGF0ZT86IHN0cmluZztcbiAgbG9jYWxpemVkVGVtcGxhdGVzPzogTG9jYWxpemVkU3RyaW5ncztcbn1cblxuLyoqXG4gKiBTZWFyY2ggQVBJIHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVxdWVzdCBleHRlbmRzIEV4cGFuZGFibGVSZXF1ZXN0IHtcbiAgc2VhcmNoPzogVXNlclNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFNlYXJjaCBBUEkgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzcG9uc2UgZXh0ZW5kcyBFeHBhbmRhYmxlUmVzcG9uc2Uge1xuICBuZXh0UmVzdWx0cz86IHN0cmluZztcbiAgdG90YWw/OiBudW1iZXI7XG4gIHVzZXJzPzogQXJyYXk8VXNlcj47XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3VsdHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0czxUPiB7XG4gIG5leHRSZXN1bHRzPzogc3RyaW5nO1xuICByZXN1bHRzPzogQXJyYXk8VD47XG4gIHRvdGFsPzogbnVtYmVyO1xuICB0b3RhbEVxdWFsVG9BY3R1YWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRSZXNwb25zZSB7XG4gIHNlY3JldD86IHN0cmluZztcbiAgc2VjcmV0QmFzZTMyRW5jb2RlZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbiB7XG4gIGxlbmd0aD86IG51bWJlcjtcbiAgdHlwZT86IFNlY3VyZUdlbmVyYXRvclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBTZWN1cmVHZW5lcmF0b3JUeXBlIHtcbiAgcmFuZG9tRGlnaXRzID0gXCJyYW5kb21EaWdpdHNcIixcbiAgcmFuZG9tQnl0ZXMgPSBcInJhbmRvbUJ5dGVzXCIsXG4gIHJhbmRvbUFscGhhID0gXCJyYW5kb21BbHBoYVwiLFxuICByYW5kb21BbHBoYU51bWVyaWMgPSBcInJhbmRvbUFscGhhTnVtZXJpY1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyZUlkZW50aXR5IHtcbiAgYnJlYWNoZWRQYXNzd29yZExhc3RDaGVja2VkSW5zdGFudD86IG51bWJlcjtcbiAgYnJlYWNoZWRQYXNzd29yZFN0YXR1cz86IEJyZWFjaGVkUGFzc3dvcmRTdGF0dXM7XG4gIGNvbm5lY3RvcklkPzogVVVJRDtcbiAgZW5jcnlwdGlvblNjaGVtZT86IHN0cmluZztcbiAgZmFjdG9yPzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGlkZW50aXRpZXM/OiBBcnJheTxVc2VySWRlbnRpdHk+O1xuICBsYXN0TG9naW5JbnN0YW50PzogbnVtYmVyO1xuICBwYXNzd29yZD86IHN0cmluZztcbiAgcGFzc3dvcmRDaGFuZ2VSZWFzb24/OiBDaGFuZ2VQYXNzd29yZFJlYXNvbjtcbiAgcGFzc3dvcmRDaGFuZ2VSZXF1aXJlZD86IGJvb2xlYW47XG4gIHBhc3N3b3JkTGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHNhbHQ/OiBzdHJpbmc7XG4gIHVuaXF1ZVVzZXJuYW1lPzogc3RyaW5nO1xuICB1c2VybmFtZT86IHN0cmluZztcbiAgdXNlcm5hbWVTdGF0dXM/OiBDb250ZW50U3RhdHVzO1xuICB2ZXJpZmllZD86IGJvb2xlYW47XG4gIHZlcmlmaWVkSW5zdGFudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIGFuZHJld3BhaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGZTZXJ2aWNlRm9ybUNvbmZpZ3VyYXRpb24ge1xuICByZXF1aXJlQ3VycmVudFBhc3N3b3JkT25QYXNzd29yZENoYW5nZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGJjY0FkZHJlc3Nlcz86IEFycmF5PHN0cmluZz47XG4gIGNjQWRkcmVzc2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgcHJlZmVycmVkTGFuZ3VhZ2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVxdWVzdERhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0b0FkZHJlc3Nlcz86IEFycmF5PEVtYWlsQWRkcmVzcz47XG4gIHVzZXJJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZFJlc3BvbnNlIHtcbiAgYW5vbnltb3VzUmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIEVtYWlsVGVtcGxhdGVFcnJvcnM+O1xuICByZXN1bHRzPzogUmVjb3JkPFVVSUQsIEVtYWlsVGVtcGxhdGVFcnJvcnM+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVFcnJvcnMge1xuICBwYXJzZUVycm9ycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlbmRlckVycm9ycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogVXNlZCB0byBpbmRpY2F0ZSB3aGljaCBpZGVudGl0eSB0eXBlIGEgcGFzc3dvcmQgXCJyZXF1ZXN0XCIgbWlnaHQgZ28gdG8uIEl0IGNvdWxkIGJlXG4gKiB1c2VkIGZvciBzZW5kIHNldCBwYXNzd29yZHMgb3Igc2VuZCBwYXNzd29yZCByZXNldHMuXG4gKi9cbmV4cG9ydCBlbnVtIFNlbmRTZXRQYXNzd29yZElkZW50aXR5VHlwZSB7XG4gIGVtYWlsID0gXCJlbWFpbFwiLFxuICBwaG9uZSA9IFwicGhvbmVcIixcbiAgZG9Ob3RTZW5kID0gXCJkb05vdFNlbmRcIlxufVxuXG4vKipcbiAqIFRoZW1lIG9iamVjdCBmb3IgdmFsdWVzIHVzZWQgaW4gdGhlIGNzcyB2YXJpYWJsZXMgZm9yIHNpbXBsZSB0aGVtZXMuXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZVRoZW1lVmFyaWFibGVzIHtcbiAgYWxlcnRCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGFsZXJ0Rm9udENvbG9yPzogc3RyaW5nO1xuICBiYWNrZ3JvdW5kSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJhY2tncm91bmRTaXplPzogc3RyaW5nO1xuICBib3JkZXJSYWRpdXM/OiBzdHJpbmc7XG4gIGRlbGV0ZUJ1dHRvbkNvbG9yPzogc3RyaW5nO1xuICBkZWxldGVCdXR0b25Gb2N1c0NvbG9yPzogc3RyaW5nO1xuICBkZWxldGVCdXR0b25UZXh0Q29sb3I/OiBzdHJpbmc7XG4gIGRlbGV0ZUJ1dHRvblRleHRGb2N1c0NvbG9yPzogc3RyaW5nO1xuICBlcnJvckZvbnRDb2xvcj86IHN0cmluZztcbiAgZXJyb3JJY29uQ29sb3I/OiBzdHJpbmc7XG4gIGZvbnRDb2xvcj86IHN0cmluZztcbiAgZm9udEZhbWlseT86IHN0cmluZztcbiAgZm9vdGVyRGlzcGxheT86IGJvb2xlYW47XG4gIGljb25CYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGljb25Db2xvcj86IHN0cmluZztcbiAgaW5mb0ljb25Db2xvcj86IHN0cmluZztcbiAgaW5wdXRCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGlucHV0SWNvbkNvbG9yPzogc3RyaW5nO1xuICBpbnB1dFRleHRDb2xvcj86IHN0cmluZztcbiAgbGlua1RleHRDb2xvcj86IHN0cmluZztcbiAgbGlua1RleHRGb2N1c0NvbG9yPzogc3RyaW5nO1xuICBsb2dvSW1hZ2VTaXplPzogc3RyaW5nO1xuICBsb2dvSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIG1vbm9Gb250Q29sb3I/OiBzdHJpbmc7XG4gIG1vbm9Gb250RmFtaWx5Pzogc3RyaW5nO1xuICBwYWdlQmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBwYW5lbEJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUJ1dHRvbkNvbG9yPzogc3RyaW5nO1xuICBwcmltYXJ5QnV0dG9uRm9jdXNDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUJ1dHRvblRleHRDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUJ1dHRvblRleHRGb2N1c0NvbG9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbnlQU05BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU29ueVBTTiBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29ueVBTTklkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxTb255UFNOQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBTb3J0IHtcbiAgYXNjID0gXCJhc2NcIixcbiAgZGVzYyA9IFwiZGVzY1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRGaWVsZCB7XG4gIG1pc3Npbmc/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9yZGVyPzogU29ydDtcbn1cblxuLyoqXG4gKiBUaGUgcHVibGljIFN0YXR1cyBBUEkgcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHVzUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbn1cblxuLyoqXG4gKiBTdGVhbSBBUEkgbW9kZXMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBTdGVhbUFQSU1vZGUge1xuICBQdWJsaWMgPSBcIlB1YmxpY1wiLFxuICBQYXJ0bmVyID0gXCJQYXJ0bmVyXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGVhbUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYXBpTW9kZT86IFN0ZWFtQVBJTW9kZTtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgd2ViQVBJS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0ZWFtIGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGVhbUlkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxTdGVhbUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBhcGlNb2RlPzogU3RlYW1BUElNb2RlO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB3ZWJBUElLZXk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSGVscGVyIGludGVyZmFjZSB0aGF0IGluZGljYXRlcyBhbiBpZGVudGl0eSBwcm92aWRlciBjYW4gYmUgZmVkZXJhdGVkIHRvIHVzaW5nIHRoZSBIVFRQIFBPU1QgbWV0aG9kLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1cHBvcnRzUG9zdEJpbmRpbmdzIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeXN0ZW1Db25maWd1cmF0aW9uIHtcbiAgYXVkaXRMb2dDb25maWd1cmF0aW9uPzogQXVkaXRMb2dDb25maWd1cmF0aW9uO1xuICBjb3JzQ29uZmlndXJhdGlvbj86IENPUlNDb25maWd1cmF0aW9uO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZXZlbnRMb2dDb25maWd1cmF0aW9uPzogRXZlbnRMb2dDb25maWd1cmF0aW9uO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9naW5SZWNvcmRDb25maWd1cmF0aW9uPzogTG9naW5SZWNvcmRDb25maWd1cmF0aW9uO1xuICByZXBvcnRUaW1lem9uZT86IHN0cmluZztcbiAgdHJ1c3RlZFByb3h5Q29uZmlndXJhdGlvbj86IFN5c3RlbVRydXN0ZWRQcm94eUNvbmZpZ3VyYXRpb247XG4gIHVpQ29uZmlndXJhdGlvbj86IFVJQ29uZmlndXJhdGlvbjtcbiAgdXNhZ2VEYXRhQ29uZmlndXJhdGlvbj86IFVzYWdlRGF0YUNvbmZpZ3VyYXRpb247XG4gIHdlYmhvb2tFdmVudExvZ0NvbmZpZ3VyYXRpb24/OiBXZWJob29rRXZlbnRMb2dDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nQ29uZmlndXJhdGlvbiB7XG4gIGRlbGV0ZT86IERlbGV0ZUNvbmZpZ3VyYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBudW1iZXJPZkRheXNUb1JldGFpbj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZ0NvbmZpZ3VyYXRpb24ge1xuICBudW1iZXJUb1JldGFpbj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZENvbmZpZ3VyYXRpb24ge1xuICBkZWxldGU/OiBEZWxldGVDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVJQ29uZmlndXJhdGlvbiB7XG4gIGhlYWRlckNvbG9yPzogc3RyaW5nO1xuICBsb2dvVVJMPzogc3RyaW5nO1xuICBtZW51Rm9udENvbG9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiBBUEkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29uZmlndXJhdGlvblJlcXVlc3Qge1xuICBzeXN0ZW1Db25maWd1cmF0aW9uPzogU3lzdGVtQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIEFQSS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2Uge1xuICBzeXN0ZW1Db25maWd1cmF0aW9uPzogU3lzdGVtQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtTG9nc0V4cG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGluY2x1ZGVBcmNoaXZlZD86IGJvb2xlYW47XG4gIGxhc3ROQnl0ZXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbVRydXN0ZWRQcm94eUNvbmZpZ3VyYXRpb24ge1xuICB0cnVzdGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgdHJ1c3RQb2xpY3k/OiBTeXN0ZW1UcnVzdGVkUHJveHlDb25maWd1cmF0aW9uUG9saWN5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gU3lzdGVtVHJ1c3RlZFByb3h5Q29uZmlndXJhdGlvblBvbGljeSB7XG4gIEFsbCA9IFwiQWxsXCIsXG4gIE9ubHlDb25maWd1cmVkID0gXCJPbmx5Q29uZmlndXJlZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudCB7XG4gIGFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uPzogVGVuYW50QWNjZXNzQ29udHJvbENvbmZpZ3VyYXRpb247XG4gIGNhcHRjaGFDb25maWd1cmF0aW9uPzogVGVuYW50Q2FwdGNoYUNvbmZpZ3VyYXRpb247XG4gIGNvbmZpZ3VyZWQ/OiBib29sZWFuO1xuICBjb25uZWN0b3JQb2xpY2llcz86IEFycmF5PENvbm5lY3RvclBvbGljeT47XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbWFpbENvbmZpZ3VyYXRpb24/OiBFbWFpbENvbmZpZ3VyYXRpb247XG4gIGV2ZW50Q29uZmlndXJhdGlvbj86IEV2ZW50Q29uZmlndXJhdGlvbjtcbiAgZXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbj86IEV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb247XG4gIGZhaWxlZEF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbj86IEZhaWxlZEF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbjtcbiAgZmFtaWx5Q29uZmlndXJhdGlvbj86IEZhbWlseUNvbmZpZ3VyYXRpb247XG4gIGZvcm1Db25maWd1cmF0aW9uPzogVGVuYW50Rm9ybUNvbmZpZ3VyYXRpb247XG4gIGh0dHBTZXNzaW9uTWF4SW5hY3RpdmVJbnRlcnZhbD86IG51bWJlcjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGp3dENvbmZpZ3VyYXRpb24/OiBKV1RDb25maWd1cmF0aW9uO1xuICBsYW1iZGFDb25maWd1cmF0aW9uPzogVGVuYW50TGFtYmRhQ29uZmlndXJhdGlvbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvZ2luQ29uZmlndXJhdGlvbj86IFRlbmFudExvZ2luQ29uZmlndXJhdGlvbjtcbiAgbG9nb3V0VVJMPzogc3RyaW5nO1xuICBtYXhpbXVtUGFzc3dvcmRBZ2U/OiBNYXhpbXVtUGFzc3dvcmRBZ2U7XG4gIG1pbmltdW1QYXNzd29yZEFnZT86IE1pbmltdW1QYXNzd29yZEFnZTtcbiAgbXVsdGlGYWN0b3JDb25maWd1cmF0aW9uPzogVGVuYW50TXVsdGlGYWN0b3JDb25maWd1cmF0aW9uO1xuICBuYW1lPzogc3RyaW5nO1xuICBvYXV0aENvbmZpZ3VyYXRpb24/OiBUZW5hbnRPQXV0aDJDb25maWd1cmF0aW9uO1xuICBwYXNzd29yZEVuY3J5cHRpb25Db25maWd1cmF0aW9uPzogUGFzc3dvcmRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM/OiBQYXNzd29yZFZhbGlkYXRpb25SdWxlcztcbiAgcGhvbmVDb25maWd1cmF0aW9uPzogVGVuYW50UGhvbmVDb25maWd1cmF0aW9uO1xuICByYXRlTGltaXRDb25maWd1cmF0aW9uPzogVGVuYW50UmF0ZUxpbWl0Q29uZmlndXJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbj86IFRlbmFudFJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb247XG4gIHNjaW1TZXJ2ZXJDb25maWd1cmF0aW9uPzogVGVuYW50U0NJTVNlcnZlckNvbmZpZ3VyYXRpb247XG4gIHNzb0NvbmZpZ3VyYXRpb24/OiBUZW5hbnRTU09Db25maWd1cmF0aW9uO1xuICBzdGF0ZT86IE9iamVjdFN0YXRlO1xuICB0aGVtZUlkPzogVVVJRDtcbiAgdXNlckRlbGV0ZVBvbGljeT86IFRlbmFudFVzZXJEZWxldGVQb2xpY3k7XG4gIHVzZXJuYW1lQ29uZmlndXJhdGlvbj86IFRlbmFudFVzZXJuYW1lQ29uZmlndXJhdGlvbjtcbiAgd2ViQXV0aG5Db25maWd1cmF0aW9uPzogVGVuYW50V2ViQXV0aG5Db25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudE9BdXRoMkNvbmZpZ3VyYXRpb24ge1xuICBjbGllbnRDcmVkZW50aWFsc0FjY2Vzc1Rva2VuUG9wdWxhdGVMYW1iZGFJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRBY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbiB7XG4gIHVpSVBBY2Nlc3NDb250cm9sTGlzdElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRDYXB0Y2hhQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjYXB0Y2hhTWV0aG9kPzogQ2FwdGNoYU1ldGhvZDtcbiAgc2VjcmV0S2V5Pzogc3RyaW5nO1xuICBzaXRlS2V5Pzogc3RyaW5nO1xuICB0aHJlc2hvbGQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgdGhlIFRlbmFudCBBUEkgdG8gZGVsZXRlIGEgdGVuYW50IHJhdGhlciB0aGFuIHVzaW5nIHRoZSBVUkwgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnREZWxldGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFzeW5jPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Rm9ybUNvbmZpZ3VyYXRpb24ge1xuICBhZG1pblVzZXJGb3JtSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgUm9iIERhdmlzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50TGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIGxvZ2luVmFsaWRhdGlvbklkPzogVVVJRDtcbiAgbXVsdGlGYWN0b3JSZXF1aXJlbWVudElkPzogVVVJRDtcbiAgc2NpbUVudGVycHJpc2VVc2VyUmVxdWVzdENvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbUVudGVycHJpc2VVc2VyUmVzcG9uc2VDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1Hcm91cFJlcXVlc3RDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1Hcm91cFJlc3BvbnNlQ29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltVXNlclJlcXVlc3RDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1Vc2VyUmVzcG9uc2VDb252ZXJ0ZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudExvZ2luQ29uZmlndXJhdGlvbiB7XG4gIHJlcXVpcmVBdXRoZW50aWNhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWtleSBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRNdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24ge1xuICBhdXRoZW50aWNhdG9yPzogTXVsdGlGYWN0b3JBdXRoZW50aWNhdG9yTWV0aG9kO1xuICBlbWFpbD86IE11bHRpRmFjdG9yRW1haWxNZXRob2Q7XG4gIGxvZ2luUG9saWN5PzogTXVsdGlGYWN0b3JMb2dpblBvbGljeTtcbiAgc21zPzogTXVsdGlGYWN0b3JTTVNNZXRob2Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGYWN0b3JBdXRoZW50aWNhdG9yTWV0aG9kIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFsZ29yaXRobT86IFRPVFBBbGdvcml0aG07XG4gIGNvZGVMZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVTdGVwPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmFjdG9yRW1haWxNZXRob2QgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgdGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGYWN0b3JTTVNNZXRob2QgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbWVzc2VuZ2VySWQ/OiBVVUlEO1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBIb2xkIHRlbmFudCBwaG9uZSBjb25maWd1cmF0aW9uIGZvciBwYXNzd29yZGxlc3MgYW5kIHZlcmlmaWNhdGlvbiBjYXNlcy5cbiAqXG4gKiBAYXV0aG9yIEJyYWR5IFdpZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRQaG9uZUNvbmZpZ3VyYXRpb24ge1xuICBmb3Jnb3RQYXNzd29yZFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBpZGVudGl0eVVwZGF0ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICBpbXBsaWNpdFBob25lVmVyaWZpY2F0aW9uQWxsb3dlZD86IGJvb2xlYW47XG4gIGxvZ2luSWRJblVzZU9uQ3JlYXRlVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luSWRJblVzZU9uVXBkYXRlVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luTmV3RGV2aWNlVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luU3VzcGljaW91c1RlbXBsYXRlSWQ/OiBVVUlEO1xuICBtZXNzZW5nZXJJZD86IFVVSUQ7XG4gIHBhc3N3b3JkbGVzc1RlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFJlc2V0U3VjY2Vzc1RlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFVwZGF0ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICBzZXRQYXNzd29yZFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RBZGRUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kUmVtb3ZlVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHVudmVyaWZpZWQ/OiBQaG9uZVVudmVyaWZpZWRPcHRpb25zO1xuICB2ZXJpZmljYXRpb25Db21wbGV0ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICB2ZXJpZmljYXRpb25TdHJhdGVneT86IFZlcmlmaWNhdGlvblN0cmF0ZWd5O1xuICB2ZXJpZmljYXRpb25UZW1wbGF0ZUlkPzogVVVJRDtcbiAgdmVyaWZ5UGhvbmVOdW1iZXI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSYXRlTGltaXRDb25maWd1cmF0aW9uIHtcbiAgZmFpbGVkTG9naW4/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBmb3Jnb3RQYXNzd29yZD86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIHNlbmRFbWFpbFZlcmlmaWNhdGlvbj86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIHNlbmRQYXNzd29yZGxlc3M/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kUGFzc3dvcmRsZXNzUGhvbmU/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kUGhvbmVWZXJpZmljYXRpb24/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgc2VuZFR3b0ZhY3Rvcj86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBibG9ja2VkRG9tYWlucz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgc291cmNlVGVuYW50SWQ/OiBVVUlEO1xuICB0ZW5hbnQ/OiBUZW5hbnQ7XG4gIHdlYmhvb2tJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UmVzcG9uc2Uge1xuICB0ZW5hbnQ/OiBUZW5hbnQ7XG4gIHRlbmFudHM/OiBBcnJheTxUZW5hbnQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgUm9iIERhdmlzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50U0NJTVNlcnZlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgY2xpZW50RW50aXR5VHlwZUlkPzogVVVJRDtcbiAgc2NoZW1hcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHNlcnZlckVudGl0eVR5cGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50U1NPQ29uZmlndXJhdGlvbiB7XG4gIGFsbG93QWNjZXNzVG9rZW5Cb290c3RyYXA/OiBib29sZWFuO1xuICBkZXZpY2VUcnVzdFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBUZW5hbnRzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBUZW5hbnRzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IFRlbmFudFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFRlbmFudCBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRTZWFyY2hSZXNwb25zZSB7XG4gIHRlbmFudHM/OiBBcnJheTxUZW5hbnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50VW52ZXJpZmllZENvbmZpZ3VyYXRpb24ge1xuICBlbWFpbD86IFVudmVyaWZpZWRCZWhhdmlvcjtcbiAgd2hlbkdhdGVkPzogUmVnaXN0cmF0aW9uVW52ZXJpZmllZE9wdGlvbnM7XG59XG5cbi8qKlxuICogQSBUZW5hbnQtbGV2ZWwgcG9saWN5IGZvciBkZWxldGluZyBVc2Vycy5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFVzZXJEZWxldGVQb2xpY3kge1xuICB1bnZlcmlmaWVkPzogVGltZUJhc2VkRGVsZXRlUG9saWN5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRVc2VybmFtZUNvbmZpZ3VyYXRpb24ge1xuICB1bmlxdWU/OiBVbmlxdWVVc2VybmFtZUNvbmZpZ3VyYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pcXVlVXNlcm5hbWVDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG51bWJlck9mRGlnaXRzPzogbnVtYmVyO1xuICBzZXBhcmF0b3I/OiBzdHJpbmc7XG4gIHN0cmF0ZWd5PzogVW5pcXVlVXNlcm5hbWVTdHJhdGVneTtcbn1cblxuZXhwb3J0IGVudW0gVW5pcXVlVXNlcm5hbWVTdHJhdGVneSB7XG4gIEFsd2F5cyA9IFwiQWx3YXlzXCIsXG4gIE9uQ29sbGlzaW9uID0gXCJPbkNvbGxpc2lvblwiXG59XG5cbi8qKlxuICogVGVuYW50LWxldmVsIGNvbmZpZ3VyYXRpb24gZm9yIFdlYkF1dGhuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRXZWJBdXRobkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYm9vdHN0cmFwV29ya2Zsb3c/OiBUZW5hbnRXZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbjtcbiAgZGVidWc/OiBib29sZWFuO1xuICByZWF1dGhlbnRpY2F0aW9uV29ya2Zsb3c/OiBUZW5hbnRXZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbjtcbiAgcmVseWluZ1BhcnR5SWQ/OiBzdHJpbmc7XG4gIHJlbHlpbmdQYXJ0eU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRXZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhdXRoZW50aWNhdG9yQXR0YWNobWVudFByZWZlcmVuY2U/OiBBdXRoZW50aWNhdG9yQXR0YWNobWVudFByZWZlcmVuY2U7XG4gIHVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudD86IFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRhYmxlIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlZmF1bHRNZXNzYWdlcz86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9jYWxpemVkTWVzc2FnZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdHlsZXNoZWV0Pzogc3RyaW5nO1xuICB0ZW1wbGF0ZXM/OiBUZW1wbGF0ZXM7XG4gIHR5cGU/OiBUaGVtZVR5cGU7XG4gIHZhcmlhYmxlcz86IFNpbXBsZVRoZW1lVmFyaWFibGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlcyB7XG4gIGFjY291bnRFZGl0Pzogc3RyaW5nO1xuICBhY2NvdW50SW5kZXg/OiBzdHJpbmc7XG4gIGFjY291bnRUd29GYWN0b3JEaXNhYmxlPzogc3RyaW5nO1xuICBhY2NvdW50VHdvRmFjdG9yRW5hYmxlPzogc3RyaW5nO1xuICBhY2NvdW50VHdvRmFjdG9ySW5kZXg/OiBzdHJpbmc7XG4gIGFjY291bnRXZWJBdXRobkFkZD86IHN0cmluZztcbiAgYWNjb3VudFdlYkF1dGhuRGVsZXRlPzogc3RyaW5nO1xuICBhY2NvdW50V2ViQXV0aG5JbmRleD86IHN0cmluZztcbiAgY29uZmlybWF0aW9uUmVxdWlyZWQ/OiBzdHJpbmc7XG4gIGVtYWlsQ29tcGxldGU/OiBzdHJpbmc7XG4gIGVtYWlsU2VuZD86IHN0cmluZztcbiAgZW1haWxTZW50Pzogc3RyaW5nO1xuICBlbWFpbFZlcmlmaWNhdGlvblJlcXVpcmVkPzogc3RyaW5nO1xuICBlbWFpbFZlcmlmeT86IHN0cmluZztcbiAgaGVscGVycz86IHN0cmluZztcbiAgaW5kZXg/OiBzdHJpbmc7XG4gIG9hdXRoMkF1dGhvcml6ZT86IHN0cmluZztcbiAgb2F1dGgyQXV0aG9yaXplZE5vdFJlZ2lzdGVyZWQ/OiBzdHJpbmc7XG4gIG9hdXRoMkNoaWxkUmVnaXN0cmF0aW9uTm90QWxsb3dlZD86IHN0cmluZztcbiAgb2F1dGgyQ2hpbGRSZWdpc3RyYXRpb25Ob3RBbGxvd2VkQ29tcGxldGU/OiBzdHJpbmc7XG4gIG9hdXRoMkNvbXBsZXRlUmVnaXN0cmF0aW9uPzogc3RyaW5nO1xuICBvYXV0aDJDb25zZW50Pzogc3RyaW5nO1xuICBvYXV0aDJEZXZpY2U/OiBzdHJpbmc7XG4gIG9hdXRoMkRldmljZUNvbXBsZXRlPzogc3RyaW5nO1xuICBvYXV0aDJFcnJvcj86IHN0cmluZztcbiAgb2F1dGgyTG9nb3V0Pzogc3RyaW5nO1xuICBvYXV0aDJQYXNzd29yZGxlc3M/OiBzdHJpbmc7XG4gIG9hdXRoMlJlZ2lzdGVyPzogc3RyaW5nO1xuICBvYXV0aDJTdGFydElkUExpbms/OiBzdHJpbmc7XG4gIG9hdXRoMlR3b0ZhY3Rvcj86IHN0cmluZztcbiAgb2F1dGgyVHdvRmFjdG9yRW5hYmxlPzogc3RyaW5nO1xuICBvYXV0aDJUd29GYWN0b3JFbmFibGVDb21wbGV0ZT86IHN0cmluZztcbiAgb2F1dGgyVHdvRmFjdG9yTWV0aG9kcz86IHN0cmluZztcbiAgb2F1dGgyV2FpdD86IHN0cmluZztcbiAgb2F1dGgyV2ViQXV0aG4/OiBzdHJpbmc7XG4gIG9hdXRoMldlYkF1dGhuUmVhdXRoPzogc3RyaW5nO1xuICBvYXV0aDJXZWJBdXRoblJlYXV0aEVuYWJsZT86IHN0cmluZztcbiAgcGFzc3dvcmRDaGFuZ2U/OiBzdHJpbmc7XG4gIHBhc3N3b3JkQ29tcGxldGU/OiBzdHJpbmc7XG4gIHBhc3N3b3JkRm9yZ290Pzogc3RyaW5nO1xuICBwYXNzd29yZFNlbnQ/OiBzdHJpbmc7XG4gIHBob25lQ29tcGxldGU/OiBzdHJpbmc7XG4gIHBob25lU2VudD86IHN0cmluZztcbiAgcGhvbmVWZXJpZmljYXRpb25SZXF1aXJlZD86IHN0cmluZztcbiAgcGhvbmVWZXJpZnk/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvbkNvbXBsZXRlPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25TZW5kPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25TZW50Pzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25SZXF1aXJlZD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uVmVyaWZ5Pzogc3RyaW5nO1xuICBzYW1sdjJMb2dvdXQ/OiBzdHJpbmc7XG4gIHVuYXV0aG9yaXplZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGVtZSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZVJlcXVlc3Qge1xuICBzb3VyY2VUaGVtZUlkPzogVVVJRDtcbiAgdGhlbWU/OiBUaGVtZTtcbn1cblxuLyoqXG4gKiBUaGVtZSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVSZXNwb25zZSB7XG4gIHRoZW1lPzogVGhlbWU7XG4gIHRoZW1lcz86IEFycmF5PFRoZW1lPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIHRoZW1lc1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogVGhlbWVUeXBlO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBUaGVtZXMuXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogVGhlbWVTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVzcG9uc2UgZm9yIFRoZW1lc1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lU2VhcmNoUmVzcG9uc2Uge1xuICB0aGVtZXM/OiBBcnJheTxUaGVtZT47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZW51bSBUaGVtZVR5cGUge1xuICBhZHZhbmNlZCA9IFwiYWR2YW5jZWRcIixcbiAgc2ltcGxlID0gXCJzaW1wbGVcIlxufVxuXG4vKipcbiAqIEEgcG9saWN5IGZvciBkZWxldGluZyBVc2VycyBiYXNlZCB1cG9uIHNvbWUgZXh0ZXJuYWwgY3JpdGVyaWEuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lQmFzZWREZWxldGVQb2xpY3kgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZW5hYmxlZEluc3RhbnQ/OiBudW1iZXI7XG4gIG51bWJlck9mRGF5c1RvUmV0YWluPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIDx1bD5cbiAqIDxsaT5CZWFyZXIgVG9rZW4gdHlwZSBhcyBkZWZpbmVkIGJ5IDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc1MFwiPlJGQyA2NzUwPC9hPi48L2xpPlxuICogPGxpPk1BQyBUb2tlbiB0eXBlIGFzIHJlZmVyZW5jZWQgYnkgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5XCI+UkZDIDY3NDk8L2E+IGFuZFxuICogPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLW9hdXRoLXYyLWh0dHAtbWFjLTA1XCI+XG4gKiBEcmFmdCBSRkMgb24gT0F1dGggMi4wIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSAoTUFDKSBUb2tlbnM8L2E+XG4gKiA8L2xpPlxuICogPC91bD5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFRva2VuVHlwZSB7XG4gIEJlYXJlciA9IFwiQmVhcmVyXCIsXG4gIE1BQyA9IFwiTUFDXCJcbn1cblxuLyoqXG4gKiBUaGUgcmVzcG9uc2UgZnJvbSB0aGUgdG90YWwgcmVwb3J0LiBUaGlzIHJlcG9ydCBzdG9yZXMgdGhlIHRvdGFsIG51bWJlcnMgZm9yIGVhY2ggYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG90YWxzUmVwb3J0UmVzcG9uc2Uge1xuICBhcHBsaWNhdGlvblRvdGFscz86IFJlY29yZDxVVUlELCBUb3RhbHM+O1xuICBnbG9iYWxSZWdpc3RyYXRpb25zPzogbnVtYmVyO1xuICB0b3RhbEdsb2JhbFJlZ2lzdHJhdGlvbnM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG90YWxzIHtcbiAgbG9naW5zPzogbnVtYmVyO1xuICByZWdpc3RyYXRpb25zPzogbnVtYmVyO1xuICB0b3RhbFJlZ2lzdHJhdGlvbnM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHRyYW5zYWN0aW9uIHR5cGVzIGZvciBXZWJob29rcyBhbmQgb3RoZXIgZXZlbnQgc3lzdGVtcyB3aXRoaW4gRnVzaW9uQXV0aC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gVHJhbnNhY3Rpb25UeXBlIHtcbiAgTm9uZSA9IFwiTm9uZVwiLFxuICBBbnkgPSBcIkFueVwiLFxuICBTaW1wbGVNYWpvcml0eSA9IFwiU2ltcGxlTWFqb3JpdHlcIixcbiAgU3VwZXJNYWpvcml0eSA9IFwiU3VwZXJNYWpvcml0eVwiLFxuICBBYnNvbHV0ZU1ham9yaXR5ID0gXCJBYnNvbHV0ZU1ham9yaXR5XCJcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBpbmJvdW5kIGxhbWJkYSBwYXJhbWV0ZXIgJ21mYVRydXN0JyBpbnNpZGUgdGhlICdjb250ZXh0JyBwYXJhbWV0ZXIgZm9yIE1GQSBSZXF1aXJlZCBsYW1iZGFzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRydXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBleHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgaWQ/OiBzdHJpbmc7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIHN0YXJ0SW5zdGFudHM/OiBTdGFydEluc3RhbnQ7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0SW5zdGFudCB7XG4gIGFwcGxpY2F0aW9ucz86IFJlY29yZDxVVUlELCBudW1iZXI+O1xuICB0ZW5hbnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2lsaW9NZXNzZW5nZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBhY2NvdW50U0lEPzogc3RyaW5nO1xuICBhdXRoVG9rZW4/OiBzdHJpbmc7XG4gIGZyb21QaG9uZU51bWJlcj86IHN0cmluZztcbiAgbWVzc2FnaW5nU2VydmljZVNpZD86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXRjaEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUd2l0Y2ggZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXRjaElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxUd2l0Y2hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdHRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY29uc3VtZXJLZXk/OiBzdHJpbmc7XG4gIGNvbnN1bWVyU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFR3aXR0ZXIgc29jaWFsIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2l0dGVySWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFR3aXR0ZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY29uc3VtZXJLZXk/OiBzdHJpbmc7XG4gIGNvbnN1bWVyU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvckRpc2FibGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjb2RlPzogc3RyaW5nO1xuICBtZXRob2RJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yRW5hYmxlRGlzYWJsZVNlbmRSZXF1ZXN0IHtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG1ldGhvZD86IHN0cmluZztcbiAgbWV0aG9kSWQ/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JMb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlTG9naW5SZXF1ZXN0IHtcbiAgY29kZT86IHN0cmluZztcbiAgdHJ1c3RDb21wdXRlcj86IGJvb2xlYW47XG4gIHR3b0ZhY3RvcklkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JNZXRob2Qge1xuICBhdXRoZW50aWNhdG9yPzogQXV0aGVudGljYXRvckNvbmZpZ3VyYXRpb247XG4gIGVtYWlsPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgbGFzdFVzZWQ/OiBib29sZWFuO1xuICBtZXRob2Q/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xuICBzZWNyZXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlIHtcbiAgcmVjb3ZlcnlDb2Rlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRvcklkPzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xuICBzZWNyZXRCYXNlMzJFbmNvZGVkPzogc3RyaW5nO1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yUmVzcG9uc2Uge1xuICBjb2RlPzogc3RyaW5nO1xuICByZWNvdmVyeUNvZGVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU2VuZFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG1ldGhvZD86IHN0cmluZztcbiAgbWV0aG9kSWQ/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU3RhcnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIGxvZ2luSWRUeXBlcz86IEFycmF5PHN0cmluZz47XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdHJ1c3RDaGFsbGVuZ2U/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclN0YXJ0UmVzcG9uc2Uge1xuICBjb2RlPzogc3RyaW5nO1xuICBtZXRob2RzPzogQXJyYXk8VHdvRmFjdG9yTWV0aG9kPjtcbiAgdHdvRmFjdG9ySWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2hlY2sgdGhlIHN0YXR1cyBvZiB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIHVzZXIsIHdpdGggbW9yZSBvcHRpb25zIHRoYW4gb24gYSBHRVQgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JTdGF0dXNSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICBhY3Rpb24/OiBNdWx0aUZhY3RvckFjdGlvbjtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlIHtcbiAgdHJ1c3RzPzogQXJyYXk8VHdvRmFjdG9yVHJ1c3Q+O1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclRydXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGV4cGlyYXRpb24/OiBudW1iZXI7XG4gIHN0YXJ0SW5zdGFudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pdmVyc2FsQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgdW5pdmVyc2FsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhhbmRsaW5nIHVua25vd24gT0F1dGggc2NvcGVzIGluIHRoZSByZXF1ZXN0XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gVW5rbm93blNjb3BlUG9saWN5IHtcbiAgQWxsb3cgPSBcIkFsbG93XCIsXG4gIFJlbW92ZSA9IFwiUmVtb3ZlXCIsXG4gIFJlamVjdCA9IFwiUmVqZWN0XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFVudmVyaWZpZWRCZWhhdmlvciB7XG4gIEFsbG93ID0gXCJBbGxvd1wiLFxuICBHYXRlZCA9IFwiR2F0ZWRcIlxufVxuXG4vKipcbiAqIENvbmZpZyBmb3IgVXNhZ2UgRGF0YSAvIFN0YXRzXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzYWdlRGF0YUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbnVtYmVyT2ZEYXlzVG9SZXRhaW4/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHB1YmxpYywgZ2xvYmFsIHZpZXcgb2YgYSBVc2VyLiBUaGlzIG9iamVjdCBjb250YWlucyBhbGwgZ2xvYmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VyIGluY2x1ZGluZyBiaXJ0aGRhdGUsIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvblxuICogcHJlZmVycmVkIGxhbmd1YWdlcywgZ2xvYmFsIGF0dHJpYnV0ZXMsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlciBleHRlbmRzIFNlY3VyZUlkZW50aXR5IHtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgYmlydGhEYXRlPzogc3RyaW5nO1xuICBjbGVhblNwZWFrSWQ/OiBVVUlEO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgZmlyc3ROYW1lPzogc3RyaW5nO1xuICBmdWxsTmFtZT86IHN0cmluZztcbiAgaW1hZ2VVcmw/OiBzdHJpbmc7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3ROYW1lPzogc3RyaW5nO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbWVtYmVyc2hpcHM/OiBBcnJheTxHcm91cE1lbWJlcj47XG4gIG1pZGRsZU5hbWU/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xuICBwYXJlbnRFbWFpbD86IHN0cmluZztcbiAgcGhvbmVOdW1iZXI/OiBzdHJpbmc7XG4gIHByZWZlcnJlZExhbmd1YWdlcz86IEFycmF5PHN0cmluZz47XG4gIHJlZ2lzdHJhdGlvbnM/OiBBcnJheTxVc2VyUmVnaXN0cmF0aW9uPjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0aW1lem9uZT86IHN0cmluZztcbiAgdHdvRmFjdG9yPzogVXNlclR3b0ZhY3RvckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQW4gYWN0aW9uIHRoYXQgY2FuIGJlIGV4ZWN1dGVkIG9uIGEgdXNlciAoZGlzY2lwbGluZSBvciByZXdhcmQgcG90ZW50aWFsbHkpLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb24ge1xuICBhY3RpdmU/OiBib29sZWFuO1xuICBjYW5jZWxFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBlbmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBpZD86IFVVSUQ7XG4gIGluY2x1ZGVFbWFpbEluRXZlbnRKU09OPzogYm9vbGVhbjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvY2FsaXplZE5hbWVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbW9kaWZ5RW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbmFtZT86IHN0cmluZztcbiAgb3B0aW9ucz86IEFycmF5PFVzZXJBY3Rpb25PcHRpb24+O1xuICBwcmV2ZW50TG9naW4/OiBib29sZWFuO1xuICBzZW5kRW5kRXZlbnQ/OiBib29sZWFuO1xuICBzdGFydEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHRlbXBvcmFsPzogYm9vbGVhbjtcbiAgdHJhbnNhY3Rpb25UeXBlPzogVHJhbnNhY3Rpb25UeXBlO1xuICB1c2VyRW1haWxpbmdFbmFibGVkPzogYm9vbGVhbjtcbiAgdXNlck5vdGlmaWNhdGlvbnNFbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIHVzZXIgYWN0aW9uIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25FdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFjdGlvbj86IHN0cmluZztcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFjdGlvbklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25JZHM/OiBBcnJheTxVVUlEPjtcbiAgY29tbWVudD86IHN0cmluZztcbiAgZW1haWw/OiBFbWFpbDtcbiAgZW1haWxlZFVzZXI/OiBib29sZWFuO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIGxvY2FsaXplZEFjdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkRHVyYXRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZE9wdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkUmVhc29uPzogc3RyaW5nO1xuICBub3RpZnlVc2VyPzogYm9vbGVhbjtcbiAgb3B0aW9uPzogc3RyaW5nO1xuICBwaGFzZT86IFVzZXJBY3Rpb25QaGFzZTtcbiAgcmVhc29uPzogc3RyaW5nO1xuICByZWFzb25Db2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbG9nIGZvciBhbiBhY3Rpb24gdGhhdCB3YXMgdGFrZW4gb24gYSBVc2VyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25Mb2cge1xuICBhY3Rpb25lZVVzZXJJZD86IFVVSUQ7XG4gIGFjdGlvbmVyVXNlcklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25JZHM/OiBBcnJheTxVVUlEPjtcbiAgY29tbWVudD86IHN0cmluZztcbiAgZW1haWxVc2VyT25FbmQ/OiBib29sZWFuO1xuICBlbmRFdmVudFNlbnQ/OiBib29sZWFuO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIGhpc3Rvcnk/OiBMb2dIaXN0b3J5O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxvY2FsaXplZE5hbWU/OiBzdHJpbmc7XG4gIGxvY2FsaXplZE9wdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkUmVhc29uPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBub3RpZnlVc2VyT25FbmQ/OiBib29sZWFuO1xuICBvcHRpb24/OiBzdHJpbmc7XG4gIHJlYXNvbj86IHN0cmluZztcbiAgcmVhc29uQ29kZT86IHN0cmluZztcbiAgdXNlckFjdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgY29udGVudCB1c2VyIGFjdGlvbiBvcHRpb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25PcHRpb24ge1xuICBsb2NhbGl6ZWROYW1lcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBoYXNlcyBvZiBhIHRpbWUtYmFzZWQgdXNlciBhY3Rpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIFVzZXJBY3Rpb25QaGFzZSB7XG4gIHN0YXJ0ID0gXCJzdGFydFwiLFxuICBtb2RpZnkgPSBcIm1vZGlmeVwiLFxuICBjYW5jZWwgPSBcImNhbmNlbFwiLFxuICBlbmQgPSBcImVuZFwiXG59XG5cbi8qKlxuICogTW9kZWxzIGFjdGlvbiByZWFzb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25SZWFzb24ge1xuICBjb2RlPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRUZXh0cz86IExvY2FsaXplZFN0cmluZ3M7XG4gIHRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVXNlciBBY3Rpb24gUmVhc29uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVhc29uUmVxdWVzdCB7XG4gIHVzZXJBY3Rpb25SZWFzb24/OiBVc2VyQWN0aW9uUmVhc29uO1xufVxuXG4vKipcbiAqIFVzZXIgQWN0aW9uIFJlYXNvbiBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSB7XG4gIHVzZXJBY3Rpb25SZWFzb24/OiBVc2VyQWN0aW9uUmVhc29uO1xuICB1c2VyQWN0aW9uUmVhc29ucz86IEFycmF5PFVzZXJBY3Rpb25SZWFzb24+O1xufVxuXG4vKipcbiAqIFVzZXIgQWN0aW9uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVxdWVzdCB7XG4gIHVzZXJBY3Rpb24/OiBVc2VyQWN0aW9uO1xufVxuXG4vKipcbiAqIFVzZXIgQWN0aW9uIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvblJlc3BvbnNlIHtcbiAgdXNlckFjdGlvbj86IFVzZXJBY3Rpb247XG4gIHVzZXJBY3Rpb25zPzogQXJyYXk8VXNlckFjdGlvbj47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIEJ1bGsgQ3JlYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJCdWxrQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIEEgbG9nIGZvciBhbiBldmVudCB0aGF0IGhhcHBlbmVkIHRvIGEgVXNlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ29tbWVudCB7XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGNvbW1lbnRlcklkPzogVVVJRDtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ29tbWVudFJlcXVlc3Qge1xuICB1c2VyQ29tbWVudD86IFVzZXJDb21tZW50O1xufVxuXG4vKipcbiAqIFVzZXIgQ29tbWVudCBSZXNwb25zZVxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ29tbWVudFJlc3BvbnNlIHtcbiAgdXNlckNvbW1lbnQ/OiBVc2VyQ29tbWVudDtcbiAgdXNlckNvbW1lbnRzPzogQXJyYXk8VXNlckNvbW1lbnQ+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgdXNlciBjb21tZW50cy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb21tZW50U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBjb21tZW50ZXJJZD86IFVVSUQ7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgdXNlciBjb21tZW50c1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbW1lbnRTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogVXNlckNvbW1lbnRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBVc2VyIGNvbW1lbnQgc2VhcmNoIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ29tbWVudFNlYXJjaFJlc3BvbnNlIHtcbiAgdG90YWw/OiBudW1iZXI7XG4gIHVzZXJDb21tZW50cz86IEFycmF5PFVzZXJDb21tZW50Pjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBVc2VyIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb25zZW50IHtcbiAgY29uc2VudD86IENvbnNlbnQ7XG4gIGNvbnNlbnRJZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBnaXZlclVzZXJJZD86IFVVSUQ7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHN0YXR1cz86IENvbnNlbnRTdGF0dXM7XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHZhbHVlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBVc2VyIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb25zZW50UmVxdWVzdCB7XG4gIHVzZXJDb25zZW50PzogVXNlckNvbnNlbnQ7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBVc2VyIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb25zZW50UmVzcG9uc2Uge1xuICB1c2VyQ29uc2VudD86IFVzZXJDb25zZW50O1xuICB1c2VyQ29uc2VudHM/OiBBcnJheTxVc2VyQ29uc2VudD47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZWQgRXZlbnQuXG4gKiA8cD5cbiAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHVzZXIuY3JlYXRlIGV2ZW50IGluIHRoYXQgaXQgd2lsbCBiZSBzZW50IGFmdGVyIHRoZSB1c2VyIGhhcyBiZWVuIGNyZWF0ZWQuIFRoaXMgZXZlbnQgY2Fubm90IGJlIG1hZGUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNyZWF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQ3JlYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IG9iamVjdCBmb3IgZXhjaGFuZ2luZyB1c2VyIGNyZWRlbnRpYWxzICh1c2VybmFtZSBhbmQgcGFzc3dvcmQpIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDcmVkZW50aWFsc0FjY2Vzc1Rva2VuUmVxdWVzdCB7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZ3JhbnRfdHlwZT86IHN0cmluZztcbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB0ZW5hbnRJZD86IHN0cmluZztcbiAgdXNlcl9jb2RlPzogc3RyaW5nO1xuICB1c2VybmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRGVhY3RpdmF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVhY3RpdmF0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIEV2ZW50IChhbmQgY2FuIGJlIGNvbnZlcnRlZCB0byBKU09OKSB0aGF0IGlzIHVzZWQgZm9yIGFsbCB1c2VyIG1vZGlmaWNhdGlvbnMgKGNyZWF0ZSwgdXBkYXRlLFxuICogZGVsZXRlKS5cbiAqIDxwPlxuICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB1c2VyLmRlbGV0ZSBiZWNhdXNlIGl0IGlzIHNlbnQgYWZ0ZXIgdGhlIHR4IGlzIGNvbW1pdHRlZCwgdGhpcyBjYW5ub3QgYmUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRlbGV0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pIHRoYXQgaXMgdXNlZCBmb3IgYWxsIHVzZXIgbW9kaWZpY2F0aW9ucyAoY3JlYXRlLCB1cGRhdGUsXG4gKiBkZWxldGUpLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWxldGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIFVzZXIgQVBJIGRlbGV0ZSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRlbGV0ZVJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgZHJ5UnVuPzogYm9vbGVhbjtcbiAgaGFyZERlbGV0ZT86IGJvb2xlYW47XG4gIGxpbWl0PzogbnVtYmVyO1xuICBxdWVyeT86IHN0cmluZztcbiAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XG4gIHVzZXJJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBVc2VyIEFQSSBidWxrIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWxldGVSZXNwb25zZSB7XG4gIGRyeVJ1bj86IGJvb2xlYW47XG4gIGhhcmREZWxldGU/OiBib29sZWFuO1xuICB0b3RhbD86IG51bWJlcjtcbiAgdXNlcklkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIFVzZXIgQVBJIGRlbGV0ZSByZXF1ZXN0IG9iamVjdCBmb3IgYSBzaW5nbGUgdXNlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlU2luZ2xlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBoYXJkRGVsZXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZXZlbnQgd2hlcmUgYSB1c2VyJ3MgZW1haWwgaXMgdXBkYXRlZCBvdXRzaWRlIG9mIGEgZm9yZ290IC8gY2hhbmdlIHBhc3N3b3JkIHdvcmtmbG93LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRW1haWxVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBwcmV2aW91c0VtYWlsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBFbWFpbCBWZXJpZnkgRXZlbnQuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRW1haWxWZXJpZmllZEV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJJZGVudGl0eSB7XG4gIGRpc3BsYXlWYWx1ZT86IHN0cmluZztcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdExvZ2luSW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG1vZGVyYXRpb25TdGF0dXM/OiBDb250ZW50U3RhdHVzO1xuICBwcmltYXJ5PzogYm9vbGVhbjtcbiAgdHlwZT86IElkZW50aXR5VHlwZTtcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIHZlcmlmaWVkPzogYm9vbGVhbjtcbiAgdmVyaWZpZWRJbnN0YW50PzogbnVtYmVyO1xuICB2ZXJpZmllZFJlYXNvbj86IElkZW50aXR5VmVyaWZpZWRSZWFzb247XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIElkZW50aXR5IFByb3ZpZGVyIExpbmsgRXZlbnQuXG4gKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VySWRlbnRpdHlQcm92aWRlckxpbmtFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBpZGVudGl0eVByb3ZpZGVyTGluaz86IElkZW50aXR5UHJvdmlkZXJMaW5rO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBJZGVudGl0eSBQcm92aWRlciBVbmxpbmsgRXZlbnQuXG4gKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VySWRlbnRpdHlQcm92aWRlclVubGlua0V2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rPzogSWRlbnRpdHlQcm92aWRlckxpbms7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSB1c2VyIGlkZW50aXR5IHVwZGF0ZSBldmVudFxuICpcbiAqIEBhdXRob3IgQnJlbnQgSGFsc2V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlcklkZW50aXR5VXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgbG9naW5JZFR5cGU/OiBzdHJpbmc7XG4gIG5ld0xvZ2luSWQ/OiBzdHJpbmc7XG4gIHByZXZpb3VzTG9naW5JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIHVzZXIgaWRlbnRpdHkgdmVyaWZpZWQgZXZlbnRcbiAqXG4gKiBAYXV0aG9yIEJyYWR5IFdpZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VySWRlbnRpdHlWZXJpZmllZEV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIGxvZ2luSWRUeXBlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBGYWlsZWQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpbkZhaWxlZEV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBhdXRoZW50aWNhdGlvblR5cGU/OiBzdHJpbmc7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgcmVhc29uPzogVXNlckxvZ2luRmFpbGVkUmVhc29uO1xufVxuXG4vKipcbiAqIFRoZSByZWFzb24gZm9yIHRoZSBsb2dpbiBmYWlsdXJlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5GYWlsZWRSZWFzb24ge1xuICBjb2RlPzogc3RyaW5nO1xuICBsYW1iZGFJZD86IFVVSUQ7XG4gIGxhbWJkYVJlc3VsdD86IEVycm9ycztcbn1cblxuLyoqXG4gKiBVc2VyIGxvZ2luIGZhaWxlZCByZWFzb24gY29kZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luRmFpbGVkUmVhc29uQ29kZSB7XG59XG5cbi8qKlxuICogTW9kZWxzIGFuIGV2ZW50IHdoZXJlIGEgdXNlciBpcyBiZWluZyBjcmVhdGVkIHdpdGggYW4gXCJpbi11c2VcIiBsb2dpbiBJZCAoZW1haWwsIHVzZXJuYW1lLCBvciBvdGhlciBpZGVudGl0aWVzKS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luSWREdXBsaWNhdGVPbkNyZWF0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGR1cGxpY2F0ZUVtYWlsPzogc3RyaW5nO1xuICBkdXBsaWNhdGVJZGVudGl0aWVzPzogQXJyYXk8SWRlbnRpdHlJbmZvPjtcbiAgZHVwbGljYXRlUGhvbmVOdW1iZXI/OiBzdHJpbmc7XG4gIGR1cGxpY2F0ZVVzZXJuYW1lPzogc3RyaW5nO1xuICBleGlzdGluZz86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIGFuIGV2ZW50IHdoZXJlIGEgdXNlciBpcyBiZWluZyB1cGRhdGVkIGFuZCB0cmllcyB0byB1c2UgYW4gXCJpbi11c2VcIiBsb2dpbiBJZCAoZW1haWwgb3IgdXNlcm5hbWUpLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5JZER1cGxpY2F0ZU9uVXBkYXRlRXZlbnQgZXh0ZW5kcyBVc2VyTG9naW5JZER1cGxpY2F0ZU9uQ3JlYXRlRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBldmVudCBmb3IgYSBuZXcgZGV2aWNlICh1bi1yZWNvZ25pemVkKVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5OZXdEZXZpY2VFdmVudCBleHRlbmRzIFVzZXJMb2dpblN1Y2Nlc3NFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIExvZ2luIFN1Y2Nlc3MgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpblN1Y2Nlc3NFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRpb25UeXBlPzogc3RyaW5nO1xuICBjb25uZWN0b3JJZD86IFVVSUQ7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIGlkZW50aXR5UHJvdmlkZXJOYW1lPzogc3RyaW5nO1xuICBpcEFkZHJlc3M/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIExvZ2luIGV2ZW50IHRoYXQgaXMgc3VzcGljaW91cy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luU3VzcGljaW91c0V2ZW50IGV4dGVuZHMgVXNlckxvZ2luU3VjY2Vzc0V2ZW50IHtcbiAgdGhyZWF0c0RldGVjdGVkPzogQXJyYXk8QXV0aGVudGljYXRpb25UaHJlYXRzPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUGFzc3dvcmQgQnJlYWNoIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgTWF0dGhldyBBbHRtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUGFzc3dvcmRCcmVhY2hFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBSZXNldCBTZW5kIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUGFzc3dvcmRSZXNldFNlbmRFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBSZXNldCBTdGFydCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhc3N3b3JkUmVzZXRTdGFydEV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIFJlc2V0IFN1Y2Nlc3MgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFJlc2V0U3VjY2Vzc0V2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIFVwZGF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhc3N3b3JkVXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUmVhY3RpdmF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVhY3RpdmF0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogVXNlciByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gZm9yIGEgc2luZ2xlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb24ge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRpb25Ub2tlbj86IHN0cmluZztcbiAgY2xlYW5TcGVha0lkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdExvZ2luSW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHByZWZlcnJlZExhbmd1YWdlcz86IEFycmF5PHN0cmluZz47XG4gIHJvbGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIHRva2Vucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICB1c2VybmFtZVN0YXR1cz86IENvbnRlbnRTdGF0dXM7XG4gIHZlcmlmaWVkPzogYm9vbGVhbjtcbiAgdmVyaWZpZWRJbnN0YW50PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBDcmVhdGVkIFJlZ2lzdHJhdGlvbiBFdmVudC5cbiAqIDxwPlxuICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgdXNlci5yZWdpc3RyYXRpb24uY3JlYXRlIGV2ZW50IGluIHRoYXQgaXQgd2lsbCBiZSBzZW50IGFmdGVyIHRoZSB1c2VyIGhhcyBiZWVuIGNyZWF0ZWQuIFRoaXMgZXZlbnQgY2Fubm90IGJlIG1hZGVcbiAqIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25DcmVhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBDcmVhdGUgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIERlbGV0ZWQgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZSBpbiB0aGF0IGl0IGlzIHNlbnQgYWZ0ZXIgdGhlIFRYIGhhcyBiZWVuIGNvbW1pdHRlZC4gVGhpcyBldmVudCBjYW5ub3QgYmUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbkRlbGV0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIERlbGV0ZSBSZWdpc3RyYXRpb24gRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25EZWxldGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgVXBkYXRlIFJlZ2lzdHJhdGlvbiBFdmVudC5cbiAqIDxwPlxuICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB1c2VyLnJlZ2lzdHJhdGlvbi51cGRhdGUgaW4gdGhhdCBpdCBpcyBzZW50IGFmdGVyIHRoaXMgZXZlbnQgY29tcGxldGVzLCB0aGlzIGNhbm5vdCBiZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uVXBkYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgb3JpZ2luYWw/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBVcGRhdGUgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uVXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIG9yaWdpbmFsPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUmVnaXN0cmF0aW9uIFZlcmlmaWVkIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvblZlcmlmaWVkRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogVXNlciBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGN1cnJlbnRQYXNzd29yZD86IHN0cmluZztcbiAgZGlzYWJsZURvbWFpbkJsb2NrPzogYm9vbGVhbjtcbiAgc2VuZFNldFBhc3N3b3JkRW1haWw/OiBib29sZWFuO1xuICBzZW5kU2V0UGFzc3dvcmRJZGVudGl0eVR5cGU/OiBTZW5kU2V0UGFzc3dvcmRJZGVudGl0eVR5cGU7XG4gIHNraXBWZXJpZmljYXRpb24/OiBib29sZWFuO1xuICB1c2VyPzogVXNlcjtcbiAgdmVyaWZpY2F0aW9uSWRzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBVc2VyIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlc3BvbnNlIHtcbiAgZW1haWxWZXJpZmljYXRpb25JZD86IHN0cmluZztcbiAgZW1haWxWZXJpZmljYXRpb25PbmVUaW1lQ29kZT86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWRzPzogUmVjb3JkPFVVSUQsIHN0cmluZz47XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbk9uZVRpbWVDb2Rlcz86IFJlY29yZDxVVUlELCBzdHJpbmc+O1xuICB0b2tlbj86IHN0cmluZztcbiAgdG9rZW5FeHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgdXNlcj86IFVzZXI7XG4gIHZlcmlmaWNhdGlvbklkcz86IEFycmF5PFZlcmlmaWNhdGlvbklkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZmljYXRpb25JZCB7XG4gIGlkPzogc3RyaW5nO1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdHlwZT86IElkZW50aXR5VHlwZTtcbiAgdmFsdWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB0aGUgdXNlciBxdWVyeS4gSXQgcHJvdmlkZXMgYSBidWlsZCBwYXR0ZXJuIGFzIHdlbGwgYXMgcHVibGljIGZpZWxkcyBmb3IgdXNlIG9uIGZvcm1zIGFuZCBpbiBhY3Rpb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VFbGFzdGljU2VhcmNoQ3JpdGVyaWEge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gVXNlclN0YXRlIHtcbiAgQXV0aGVudGljYXRlZCA9IFwiQXV0aGVudGljYXRlZFwiLFxuICBBdXRoZW50aWNhdGVkTm90UmVnaXN0ZXJlZCA9IFwiQXV0aGVudGljYXRlZE5vdFJlZ2lzdGVyZWRcIixcbiAgQXV0aGVudGljYXRlZE5vdFZlcmlmaWVkID0gXCJBdXRoZW50aWNhdGVkTm90VmVyaWZpZWRcIixcbiAgQXV0aGVudGljYXRlZFJlZ2lzdHJhdGlvbk5vdFZlcmlmaWVkID0gXCJBdXRoZW50aWNhdGVkUmVnaXN0cmF0aW9uTm90VmVyaWZpZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVHdvRmFjdG9yQ29uZmlndXJhdGlvbiB7XG4gIG1ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xuICByZWNvdmVyeUNvZGVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBNb2RlbCBhIHVzZXIgZXZlbnQgd2hlbiBhIHR3by1mYWN0b3IgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUd29GYWN0b3JNZXRob2RBZGRFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBtZXRob2Q/OiBUd29GYWN0b3JNZXRob2Q7XG59XG5cbi8qKlxuICogTW9kZWwgYSB1c2VyIGV2ZW50IHdoZW4gYSB0d28tZmFjdG9yIG1ldGhvZCBoYXMgYmVlbiBhZGRlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclR3b0ZhY3Rvck1ldGhvZFJlbW92ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIG1ldGhvZD86IFR3b0ZhY3Rvck1ldGhvZDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgVXBkYXRlIEV2ZW50IG9uY2UgaXQgaXMgY29tcGxldGVkLiBUaGlzIGNhbm5vdCBiZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVXBkYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBvcmlnaW5hbD86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFVwZGF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgb3JpZ2luYWw/OiBVc2VyO1xufVxuXG4vKipcbiAqIFVzZWQgdG8gZXhwcmVzcyB3aGV0aGVyIHRoZSBSZWx5aW5nIFBhcnR5IHJlcXVpcmVzIDxhIGhyZWY9XCJodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4tMi8jdXNlci12ZXJpZmljYXRpb25cIj51c2VyIHZlcmlmaWNhdGlvbjwvYT4gZm9yIHRoZVxuICogY3VycmVudCBvcGVyYXRpb24uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHtcbiAgcmVxdWlyZWQgPSBcInJlcXVpcmVkXCIsXG4gIHByZWZlcnJlZCA9IFwicHJlZmVycmVkXCIsXG4gIGRpc2NvdXJhZ2VkID0gXCJkaXNjb3VyYWdlZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJpbmZvUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBvYmplY3QgZm9yIHZhbGlkYXRpbmcgYW4gZW5kLXVzZXIgcHJvdmlkZWQgdXNlcl9jb2RlIGZyb20gdGhlIHVzZXItaW50ZXJhY3Rpb24gb2YgdGhlIERldmljZSBBdXRob3JpemF0aW9uIEdyYW50XG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlRGV2aWNlUmVxdWVzdCB7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1c2VyX2NvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlUmVzcG9uc2Uge1xuICBqd3Q/OiBKV1Q7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBWZXJpZmljYXRpb25TdHJhdGVneSB7XG4gIENsaWNrYWJsZUxpbmsgPSBcIkNsaWNrYWJsZUxpbmtcIixcbiAgRm9ybUZpZWxkID0gXCJGb3JtRmllbGRcIlxufVxuXG4vKipcbiAqIFZlcmlmeSBDb21wbGV0ZSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5Q29tcGxldGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBWZXJpZnkgQ29tcGxldGUgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlDb21wbGV0ZVJlc3BvbnNlIHtcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlc3BvbnNlIHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlSZWdpc3RyYXRpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2Uge1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSWRlbnRpdHkgdmVyaWZ5IHJlcXVlc3QuIFVzZWQgdG8gYWRtaW5pc3RyYXRpdmVseSB2ZXJpZnkgYW4gaWRlbnRpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5UmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBsb2dpbklkVHlwZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBWZXJpZnkgU2VuZCBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5U2VuZFJlcXVlc3Qge1xuICB2ZXJpZmljYXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyYWR5IFdpZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlTdGFydFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgZXhpc3RpbmdVc2VyU3RyYXRlZ3k/OiBFeGlzdGluZ1VzZXJTdHJhdGVneTtcbiAgbG9naW5JZD86IHN0cmluZztcbiAgbG9naW5JZFR5cGU/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdmVyaWZpY2F0aW9uU3RyYXRlZ3k/OiBWZXJpZmljYXRpb25TdHJhdGVneTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyYWR5IFdpZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlTdGFydFJlc3BvbnNlIHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uUmVzcG9uc2Uge1xuICB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgY29tcGxldGluZyBXZWJBdXRobiBhc3NlcnRpb25cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQXNzZXJ0UmVzcG9uc2Uge1xuICBjcmVkZW50aWFsPzogV2ViQXV0aG5DcmVkZW50aWFsO1xufVxuXG4vKipcbiAqIFRoZSA8aT5hdXRoZW50aWNhdG9yJ3M8L2k+IHJlc3BvbnNlIGZvciB0aGUgYXV0aGVudGljYXRpb24gY2VyZW1vbnkgaW4gaXRzIGVuY29kZWQgZm9ybWF0XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkF1dGhlbnRpY2F0b3JBdXRoZW50aWNhdGlvblJlc3BvbnNlIHtcbiAgYXV0aGVudGljYXRvckRhdGE/OiBzdHJpbmc7XG4gIGNsaWVudERhdGFKU09OPzogc3RyaW5nO1xuICBzaWduYXR1cmU/OiBzdHJpbmc7XG4gIHVzZXJIYW5kbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIDxpPmF1dGhlbnRpY2F0b3InczwvaT4gcmVzcG9uc2UgZm9yIHRoZSByZWdpc3RyYXRpb24gY2VyZW1vbnkgaW4gaXRzIGVuY29kZWQgZm9ybWF0XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkF1dGhlbnRpY2F0b3JSZWdpc3RyYXRpb25SZXNwb25zZSB7XG4gIGF0dGVzdGF0aW9uT2JqZWN0Pzogc3RyaW5nO1xuICBjbGllbnREYXRhSlNPTj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIFVzZXIncyBXZWJBdXRobkNyZWRlbnRpYWwuIENvbnRhaW5zIGFsbCBkYXRhIHJlcXVpcmVkIHRvIGNvbXBsZXRlIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGNlcmVtb25pZXMuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkNyZWRlbnRpYWwge1xuICBhbGdvcml0aG0/OiBDb3NlQWxnb3JpdGhtSWRlbnRpZmllcjtcbiAgYXR0ZXN0YXRpb25UeXBlPzogQXR0ZXN0YXRpb25UeXBlO1xuICBhdXRoZW50aWNhdG9yU3VwcG9ydHNVc2VyVmVyaWZpY2F0aW9uPzogYm9vbGVhbjtcbiAgY3JlZGVudGlhbElkPzogc3RyaW5nO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGlzY292ZXJhYmxlPzogYm9vbGVhbjtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVzZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHB1YmxpY0tleT86IHN0cmluZztcbiAgcmVseWluZ1BhcnR5SWQ/OiBzdHJpbmc7XG4gIHNpZ25Db3VudD86IG51bWJlcjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0cmFuc3BvcnRzPzogQXJyYXk8c3RyaW5nPjtcbiAgdXNlckFnZW50Pzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IHRvIGltcG9ydCBhbiBleGlzdGluZyBXZWJBdXRobiBjcmVkZW50aWFsKHMpXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkNyZWRlbnRpYWxJbXBvcnRSZXF1ZXN0IHtcbiAgY3JlZGVudGlhbHM/OiBBcnJheTxXZWJBdXRobkNyZWRlbnRpYWw+O1xuICB2YWxpZGF0ZURiQ29uc3RyYWludHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdlYkF1dGhuIENyZWRlbnRpYWwgQVBJIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZSB7XG4gIGNyZWRlbnRpYWw/OiBXZWJBdXRobkNyZWRlbnRpYWw7XG4gIGNyZWRlbnRpYWxzPzogQXJyYXk8V2ViQXV0aG5DcmVkZW50aWFsPjtcbn1cblxuLyoqXG4gKiBDb250YWlucyBleHRlbnNpb24gb3V0cHV0IGZvciByZXF1ZXN0ZWQgZXh0ZW5zaW9ucyBkdXJpbmcgYSBXZWJBdXRobiBjZXJlbW9ueVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyB7XG4gIGNyZWRQcm9wcz86IENyZWRlbnRpYWxQcm9wZXJ0aWVzT3V0cHV0O1xufVxuXG4vKipcbiAqIFJlcXVlc3QgdG8gY29tcGxldGUgdGhlIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5Mb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlTG9naW5SZXF1ZXN0IHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuUHVibGljS2V5QXV0aGVudGljYXRpb25SZXF1ZXN0O1xuICBvcmlnaW4/OiBzdHJpbmc7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCB0byBhdXRoZW50aWNhdGUgd2l0aCBXZWJBdXRoblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5QdWJsaWNLZXlBdXRoZW50aWNhdGlvblJlcXVlc3Qge1xuICBjbGllbnRFeHRlbnNpb25SZXN1bHRzPzogV2ViQXV0aG5FeHRlbnNpb25zQ2xpZW50T3V0cHV0cztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJlc3BvbnNlPzogV2ViQXV0aG5BdXRoZW50aWNhdG9yQXV0aGVudGljYXRpb25SZXNwb25zZTtcbiAgcnBJZD86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHRvIHJlZ2lzdGVyIGEgbmV3IHB1YmxpYyBrZXkgd2l0aCBXZWJBdXRoblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5QdWJsaWNLZXlSZWdpc3RyYXRpb25SZXF1ZXN0IHtcbiAgY2xpZW50RXh0ZW5zaW9uUmVzdWx0cz86IFdlYkF1dGhuRXh0ZW5zaW9uc0NsaWVudE91dHB1dHM7XG4gIGlkPzogc3RyaW5nO1xuICByZXNwb25zZT86IFdlYkF1dGhuQXV0aGVudGljYXRvclJlZ2lzdHJhdGlvblJlc3BvbnNlO1xuICBycElkPzogc3RyaW5nO1xuICB0cmFuc3BvcnRzPzogQXJyYXk8c3RyaW5nPjtcbiAgdHlwZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHRvIGNvbXBsZXRlIHRoZSBXZWJBdXRobiByZWdpc3RyYXRpb24gY2VyZW1vbnkgZm9yIGEgbmV3IGNyZWRlbnRpYWwsLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5SZWdpc3RlckNvbXBsZXRlUmVxdWVzdCB7XG4gIGNyZWRlbnRpYWw/OiBXZWJBdXRoblB1YmxpY0tleVJlZ2lzdHJhdGlvblJlcXVlc3Q7XG4gIG9yaWdpbj86IHN0cmluZztcbiAgcnBJZD86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIGNvbXBsZXRpbmcgV2ViQXV0aG4gY3JlZGVudGlhbCByZWdpc3RyYXRpb24gb3IgYXNzZXJ0aW9uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXNwb25zZSB7XG4gIGNyZWRlbnRpYWw/OiBXZWJBdXRobkNyZWRlbnRpYWw7XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgdG8gc3RhcnQgYSBXZWJBdXRobiByZWdpc3RyYXRpb24gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlcXVlc3Qge1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgdXNlckFnZW50Pzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xuICB3b3JrZmxvdz86IFdlYkF1dGhuV29ya2Zsb3c7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBzdGFydGluZyBhIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVzcG9uc2Uge1xuICBvcHRpb25zPzogUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIHJlcXVlc3QgZXh0ZW5zaW9ucyBkdXJpbmcgY3JlZGVudGlhbCByZWdpc3RyYXRpb25cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuUmVnaXN0cmF0aW9uRXh0ZW5zaW9uT3B0aW9ucyB7XG4gIGNyZWRQcm9wcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgdG8gc3RhcnQgYSBXZWJBdXRobiBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5TdGFydFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY3JlZGVudGlhbElkPzogVVVJRDtcbiAgbG9naW5JZD86IHN0cmluZztcbiAgbG9naW5JZFR5cGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB1c2VySWQ/OiBVVUlEO1xuICB3b3JrZmxvdz86IFdlYkF1dGhuV29ya2Zsb3c7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBzdGFydGluZyBhIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblN0YXJ0UmVzcG9uc2Uge1xuICBvcHRpb25zPzogUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIFdlYkF1dGhuIHdvcmtmbG93LiBUaGlzIHdpbGwgYWZmZWN0IHRoZSBwYXJhbWV0ZXJzIHVzZWQgZm9yIGNyZWRlbnRpYWwgY3JlYXRpb25cbiAqIGFuZCByZXF1ZXN0IGJhc2VkIG9uIHRoZSBUZW5hbnQgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBXZWJBdXRobldvcmtmbG93IHtcbiAgYm9vdHN0cmFwID0gXCJib290c3RyYXBcIixcbiAgZ2VuZXJhbCA9IFwiZ2VuZXJhbFwiLFxuICByZWF1dGhlbnRpY2F0aW9uID0gXCJyZWF1dGhlbnRpY2F0aW9uXCJcbn1cblxuLyoqXG4gKiBBIHNlcnZlciB3aGVyZSBldmVudHMgYXJlIHNlbnQuIFRoaXMgaW5jbHVkZXMgdXNlciBhY3Rpb24gZXZlbnRzIGFuZCBhbnkgb3RoZXIgZXZlbnRzIHNlbnQgYnkgRnVzaW9uQXV0aC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rIHtcbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXZlbnRzRW5hYmxlZD86IFJlY29yZDxFdmVudFR5cGUsIGJvb2xlYW4+O1xuICBnbG9iYWw/OiBib29sZWFuO1xuICBoZWFkZXJzPzogSFRUUEhlYWRlcnM7XG4gIGh0dHBBdXRoZW50aWNhdGlvblBhc3N3b3JkPzogc3RyaW5nO1xuICBodHRwQXV0aGVudGljYXRpb25Vc2VybmFtZT86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHNpZ25hdHVyZUNvbmZpZ3VyYXRpb24/OiBXZWJob29rU2lnbmF0dXJlQ29uZmlndXJhdGlvbjtcbiAgc3NsQ2VydGlmaWNhdGU/OiBzdHJpbmc7XG4gIHNzbENlcnRpZmljYXRlS2V5SWQ/OiBVVUlEO1xuICB0ZW5hbnRJZHM/OiBBcnJheTxVVUlEPjtcbiAgdXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgd2ViaG9vayBjYWxsIGF0dGVtcHQgbG9nLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va0F0dGVtcHRMb2cge1xuICBhdHRlbXB0UmVzdWx0PzogV2ViaG9va0F0dGVtcHRSZXN1bHQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbmRJbnN0YW50PzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIHN0YXJ0SW5zdGFudD86IG51bWJlcjtcbiAgd2ViaG9va0NhbGxSZXNwb25zZT86IFdlYmhvb2tDYWxsUmVzcG9uc2U7XG4gIHdlYmhvb2tFdmVudExvZ0lkPzogVVVJRDtcbiAgd2ViaG9va0lkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBXZWJob29rIGF0dGVtcHQgbG9nIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va0F0dGVtcHRMb2dSZXNwb25zZSB7XG4gIHdlYmhvb2tBdHRlbXB0TG9nPzogV2ViaG9va0F0dGVtcHRMb2c7XG59XG5cbi8qKlxuICogVGhlIHBvc3NpYmxlIHN0YXRlcyBvZiBhbiBpbmRpdmlkdWFsIHdlYmhvb2sgYXR0ZW1wdCB0byBhIHNpbmdsZSBlbmRwb2ludC5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBXZWJob29rQXR0ZW1wdFJlc3VsdCB7XG4gIFN1Y2Nlc3MgPSBcIlN1Y2Nlc3NcIixcbiAgRmFpbHVyZSA9IFwiRmFpbHVyZVwiLFxuICBVbmtub3duID0gXCJVbmtub3duXCJcbn1cblxuLyoqXG4gKiBBIHdlYmhvb2sgY2FsbCByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tDYWxsUmVzcG9uc2Uge1xuICBleGNlcHRpb24/OiBzdHJpbmc7XG4gIHN0YXR1c0NvZGU/OiBudW1iZXI7XG4gIHVybD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWJob29rRXZlbnRMb2cge1xuICBhdHRlbXB0cz86IEFycmF5PFdlYmhvb2tBdHRlbXB0TG9nPjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGV2ZW50PzogRXZlbnRSZXF1ZXN0O1xuICBldmVudFJlc3VsdD86IFdlYmhvb2tFdmVudFJlc3VsdDtcbiAgZXZlbnRUeXBlPzogRXZlbnRUeXBlO1xuICBmYWlsZWRBdHRlbXB0cz86IG51bWJlcjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0QXR0ZW1wdEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsaW5rZWRPYmplY3RJZD86IFVVSUQ7XG4gIHNlcXVlbmNlPzogbnVtYmVyO1xuICBzdWNjZXNzZnVsQXR0ZW1wdHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIGZvciBXZWJob29rIEV2ZW50IExvZyBkYXRhLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va0V2ZW50TG9nQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBkZWxldGU/OiBEZWxldGVDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIFdlYmhvb2sgZXZlbnQgbG9nIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va0V2ZW50TG9nUmVzcG9uc2Uge1xuICB3ZWJob29rRXZlbnRMb2c/OiBXZWJob29rRXZlbnRMb2c7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciB0aGUgd2ViaG9vayBldmVudCBsb2cuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rRXZlbnRMb2dTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGVuZD86IG51bWJlcjtcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGV2ZW50UmVzdWx0PzogV2ViaG9va0V2ZW50UmVzdWx0O1xuICBldmVudFR5cGU/OiBFdmVudFR5cGU7XG4gIHN0YXJ0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFdlYmhvb2sgZXZlbnQgbG9nIHNlYXJjaCByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va0V2ZW50TG9nU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IFdlYmhvb2tFdmVudExvZ1NlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFdlYmhvb2sgZXZlbnQgbG9nIHNlYXJjaCByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZ1NlYXJjaFJlc3BvbnNlIHtcbiAgdG90YWw/OiBudW1iZXI7XG4gIHdlYmhvb2tFdmVudExvZ3M/OiBBcnJheTxXZWJob29rRXZlbnRMb2c+O1xufVxuXG4vKipcbiAqIFRoZSBwb3NzaWJsZSByZXN1bHQgc3RhdGVzIG9mIGEgd2ViaG9vayBldmVudC4gVGhpcyB0cmFja3MgdGhlIHN1Y2Nlc3Mgb2YgdGhlIG92ZXJhbGwgd2ViaG9vayB0cmFuc2FjdGlvbiBhY2NvcmRpbmcgdG8gdGhlIHtAbGluayBUcmFuc2FjdGlvblR5cGV9XG4gKiBhbmQgY29uZmlndXJlZCB3ZWJob29rcy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBXZWJob29rRXZlbnRSZXN1bHQge1xuICBGYWlsZWQgPSBcIkZhaWxlZFwiLFxuICBSdW5uaW5nID0gXCJSdW5uaW5nXCIsXG4gIFN1Y2NlZWRlZCA9IFwiU3VjY2VlZGVkXCJcbn1cblxuLyoqXG4gKiBXZWJob29rIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rUmVxdWVzdCB7XG4gIHdlYmhvb2s/OiBXZWJob29rO1xufVxuXG4vKipcbiAqIFdlYmhvb2sgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rUmVzcG9uc2Uge1xuICB3ZWJob29rPzogV2ViaG9vaztcbiAgd2ViaG9va3M/OiBBcnJheTxXZWJob29rPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIHdlYmhvb2tzLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va1NlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciB3ZWJob29rc1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va1NlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBXZWJob29rU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogV2ViaG9vayBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tTZWFyY2hSZXNwb25zZSB7XG4gIHRvdGFsPzogbnVtYmVyO1xuICB3ZWJob29rcz86IEFycmF5PFdlYmhvb2s+O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHNpZ25pbmcgd2ViaG9va3MuXG4gKlxuICogQGF1dGhvciBCcmVudCBIYWxzZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rU2lnbmF0dXJlQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBzaWduaW5nS2V5SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFhib3hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogWGJveCBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWGJveElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxYYm94QXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbiIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTksIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBDbGllbnRSZXNwb25zZSBmcm9tIFwiLi9DbGllbnRSZXNwb25zZVwiO1xuaW1wb3J0IHtSZXF1ZXN0Q3JlZGVudGlhbHMsIFJlc3BvbnNlfSBmcm9tIFwibm9kZS1mZXRjaFwiO1xuaW1wb3J0IHtVUkxTZWFyY2hQYXJhbXN9IGZyb20gXCJ1cmxcIjtcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VIYW5kbGVyPFQ+ID0gKHJlc3BvbnNlOiBSZXNwb25zZSkgPT4gUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUPj47XG5leHBvcnQgdHlwZSBFcnJvclJlc3BvbnNlSGFuZGxlcjxUPiA9IChyZXNwb25zZTogUmVzcG9uc2UpID0+IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VD4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIElSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgLyoqXG4gICAqIFNldHMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIHVzaW5nIGEga2V5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHZhbHVlIG9mIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICogQHJldHVybnMge0lSRVNUQ2xpZW50fVxuICAgKi9cbiAgd2l0aEF1dGhvcml6YXRpb24oa2V5OiBzdHJpbmcpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogQWRkcyBhIHNlZ21lbnQgdG8gdGhlIHJlcXVlc3QgdXJpXG4gICAqL1xuICB3aXRoVXJpU2VnbWVudChzZWdtZW50OiBzdHJpbmcgfCBudW1iZXIpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgYm9keSBvZiB0aGUgY2xpZW50IHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBib2R5IFRoZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgcmVxdWVzdCBib2R5IGFzIGZvcm0gZGF0YS5cbiAgICovXG4gIHdpdGhGb3JtRGF0YShib2R5OiBVUkxTZWFyY2hQYXJhbXMpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogQWRkcyBhIGhlYWRlciB0byB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIGtleSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIuXG4gICAqL1xuICB3aXRoSGVhZGVyKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvZHkgb2YgdGhlIGNsaWVudCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlcXVlc3QgYm9keSBhcyBKU09OLlxuICAgKi9cbiAgd2l0aEpTT05Cb2R5KGJvZHk6IG9iamVjdCk6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBodHRwIG1ldGhvZCBmb3IgdGhlIHJlcXVlc3RcbiAgICovXG4gIHdpdGhNZXRob2QobWV0aG9kOiBzdHJpbmcpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgdXJpIG9mIHRoZSByZXF1ZXN0XG4gICAqL1xuICB3aXRoVXJpKHVyaTogc3RyaW5nKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIEFkZHMgcGFyYW1ldGVycyB0byB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLCBtYXkgYmUgYSBzdHJpbmcsIG9iamVjdCBvciBudW1iZXIuXG4gICAqL1xuICB3aXRoUGFyYW1ldGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBTZXRzIHJlcXVlc3QncyBjcmVkZW50aWFscy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIEEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciBjcmVkZW50aWFscyB3aWxsIGJlIHNlbnQgd2l0aCB0aGUgcmVxdWVzdCBhbHdheXMsIG5ldmVyLCBvciBvbmx5IHdoZW4gc2VudCB0byBhIHNhbWUtb3JpZ2luIFVSTC5cbiAgICovXG4gIHdpdGhDcmVkZW50aWFscyh2YWx1ZTogUmVxdWVzdENyZWRlbnRpYWxzKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHJlc3BvbnNlIGhhbmRsZXIuIFRoaXMgY291bGQgZG8gcHJvY2Vzc2luZyBiZWZvcmUgdGhlIENsaWVudFJlc3BvbnNlIGlzIHJldHVybmVkIGRlcGVuZGluZyBvbiB0aGUgQVBJcyBleHBlY3RlZCByZXNwb25zZS5cbiAgICpcbiAgICogQHBhcmFtIGhhbmRsZXJcbiAgICovXG4gIHdpdGhSZXNwb25zZUhhbmRsZXIoaGFuZGxlcjogUmVzcG9uc2VIYW5kbGVyPFJUPik6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBlcnJvciByZXNwb25zZSBoYW5kbGVyLiAgRXJyb3IgcmVzcG9uc2UgaGFuZGxlcnMgaGF2ZSBhIGdlbmVyaWMgYnV0IGR1ZSB0byB0eXBlc2NyaXB0IGxpbWl0YXRpb25zLFxuICAgKiB0aGlzIHZhbHVlIHdpbGwgbm90IGJlIHByb3BhZ2F0ZWQgdG8gdGhlIFByb21pc2UgY2F0Y2ggc3RhdGVtZW50XG4gICAqIFxuICAgKiBAcGFyYW0gaGFuZGxlclxuICAgKi9cbiAgd2l0aEVycm9yUmVzcG9uc2VIYW5kbGVyKGhhbmRsZXI6IEVycm9yUmVzcG9uc2VIYW5kbGVyPEVSVD4pOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogUnVuIHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gYSBwcm9taXNlLiBUaGlzIHByb21pc2Ugd2lsbCByZXNvbHZlIGlmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWxcbiAgICogYW5kIHJlamVjdCBvdGhlcndpc2UuXG4gICAqL1xuICBnbygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJUPj47XG59XG5cbmV4cG9ydCBkZWZhdWx0IElSRVNUQ2xpZW50O1xuIl19
7389
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC50cyIsIm5vZGVfbW9kdWxlcy9ub2RlLWZldGNoL2Jyb3dzZXIuanMiLCJzcmMvQ2xpZW50UmVzcG9uc2UudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnQudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyLnRzIiwic3JjL0Z1c2lvbkF1dGhDbGllbnQudHMiLCJzcmMvSVJFU1RDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7Ozs7Ozs7Ozs7OztBQUVILDJEQUFxRDtBQUNyRCxrQkFBZSwwQkFBZ0IsQ0FBQztBQUVoQyx5REFBdUM7QUFDdkMsb0RBQWtDO0FBQ2xDLGlFQUErQztBQUMvQyx1REFBcUM7QUFDckMsb0RBQWtDO0FBQ2xDLDJEQUF5Qzs7OztBQ3hCekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6QkE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7O0FBRUg7SUFBQTtJQVFBLENBQUM7SUFIQyxzQ0FBYSxHQUFiO1FBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUN6RCxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQVJBLEFBUUMsSUFBQTs7Ozs7O0FDeEJEOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdILG1EQUE4QztBQUM5Qyx5Q0FBMkU7QUFDM0UsMkJBQXNDO0FBRXRDOzs7O0dBSUc7QUFDSDtJQVVFLDJCQUFtQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtR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LGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDekUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDL0M7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQy9ELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDM0M7UUFDRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQ2pFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM3QztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUEyQjthQUNoRCxPQUFPLENBQUMsZUFBZSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQUM7YUFDbEIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlDQUFjLEdBQWQsVUFBZSxPQUE4QjtRQUMzQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWtDO2FBQzlDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQzthQUNwQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsc0RBQTJCLEdBQTNCLFVBQTRCLEtBQWE7UUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE2QjthQUN6QyxPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQzthQUN2QyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHNDQUFXLEdBQVgsVUFBWSxLQUFXLEVBQUUsT0FBbUI7UUFDMUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF1QjthQUNuQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUNyQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDZEQUFrQyxHQUFsQyxVQUFtQyxLQUFhLEVBQUUsYUFBbUI7UUFDbkUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFvQzthQUNoRCxPQUFPLENBQUMsK0JBQStCLENBQUM7YUFDeEMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQzthQUMvQyxhQUFhLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQzthQUM3QyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseURBQThCLEdBQTlCLFVBQStCLE1BQVk7UUFDekMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QzthQUNyRCxVQUFVLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQzthQUN4QyxPQUFPLENBQUMsb0NBQW9DLENBQUM7YUFDN0MsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGtEQUF1QixHQUF2QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDBEQUErQixHQUEvQixVQUFnQyxVQUFrQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQXdCO2FBQzdDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO2FBQ3pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILGdEQUFxQixHQUFyQixVQUFzQixPQUFxQztRQUN6RCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQXlCO2FBQzlDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQzthQUN2QyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsb0NBQVMsR0FBVCxVQUFVLEtBQVcsRUFBRSxPQUFtQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXVCO2FBQ25DLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQzthQUMxQixjQUFjLENBQUMsS0FBSyxDQUFDO2FBQ3JCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsT0FBa0M7UUFDcEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsZ0NBQWdDLENBQUM7YUFDekMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILHNDQUFXLEdBQVgsVUFBWSxPQUFzQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtREFBd0IsR0FBeEIsVUFBeUIsT0FBd0M7UUFDL0QsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsc0JBQXNCLENBQUM7YUFDL0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGdEQUFxQixHQUFyQixVQUFzQixTQUFpQixFQUFFLEtBQWE7UUFDcEQsSUFBSSxJQUFJLEdBQUcsSUFBSSxxQkFBZSxFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFrQzthQUN2RCxPQUFPLENBQUMsb0JBQW9CLENBQUM7YUFDN0IsWUFBWSxDQUFDLElBQUksQ0FBQzthQUNsQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMkRBQWdDLEdBQWhDLFVBQWlDLE9BQXFDO1FBQ3BFLElBQUksSUFBSSxHQUFHLElBQUkscUJBQWUsRUFBRSxDQUFDO1FBRWpDLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDakUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDM0M7UUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQztRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBa0M7YUFDdkQsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2FBQzdCLFlBQVksQ0FBQyxJQUFJLENBQUM7YUFDbEIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlFQUFzQyxHQUF0QyxVQUF1QyxLQUFhO1FBQ2xELElBQUksSUFBSSxHQUFHLElBQUkscUJBQWUsRUFBRSxDQUFDO1FBRWpDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBa0M7YUFDdkQsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2FBQzdCLFlBQVksQ0FBQyxJQUFJLENBQUM7YUFDbEIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDRFQUFpRCxHQUFqRCxVQUFrRCxPQUFzRDtRQUN0RyxJQUFJLElBQUksR0FBRyxJQUFJLHFCQUFlLEVBQUUsQ0FBQztRQUVqQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQy9ELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFrQzthQUN2RCxPQUFPLENBQUMsb0JBQW9CLENBQUM7YUFDN0IsWUFBWSxDQUFDLElBQUksQ0FBQzthQUNsQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxtQ0FBUSxHQUFSLFVBQVMsYUFBbUIsRUFBRSxVQUFrQixFQUFFLFlBQW9CO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBeUI7YUFDOUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ3pCLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7YUFDekMsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsYUFBYSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUM7YUFDM0MsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsZ0NBQUssR0FBTCxVQUFNLE9BQXFCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUI7YUFDckMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUNyQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxvQ0FBUyxHQUFULFVBQVUsTUFBWSxFQUFFLGFBQW1CLEVBQUUsZUFBdUI7UUFDbEUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QjthQUNyQyxPQUFPLENBQUMsWUFBWSxDQUFDO2FBQ3JCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixhQUFhLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQzthQUMzQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsK0NBQW9CLEdBQXBCLFVBQXFCLE9BQXlCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUI7YUFDckMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUNyQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILGlDQUFNLEdBQU4sVUFBTyxNQUFlLEVBQUUsWUFBb0I7UUFDMUMsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFjO2FBQ25DLFVBQVUsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDO2FBQ3hDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsYUFBYSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUM7YUFDM0MsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw0Q0FBaUIsR0FBakIsVUFBa0IsT0FBc0I7UUFDdEMsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFjO2FBQ25DLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGlEQUFzQixHQUF0QixVQUF1QixNQUFjO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLCtCQUErQixDQUFDO2FBQ3hDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQy9CLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCwyREFBZ0MsR0FBaEMsVUFBaUMsTUFBYyxFQUFFLFFBQWM7UUFDN0QsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsK0JBQStCLENBQUM7YUFDeEMsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsYUFBYSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7YUFDbkMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsdUNBQVksR0FBWixVQUFhLFFBQWMsRUFBRSxPQUFzQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDRDQUFpQixHQUFqQixVQUFrQixPQUFpQztRQUNqRCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQXlCO2FBQzlDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQzthQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsc0NBQVcsR0FBWCxVQUFZLEtBQVcsRUFBRSxPQUFzQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUNyQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLGFBQW1CLEVBQUUsT0FBMkI7UUFDL0QsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILCtDQUFvQixHQUFwQixVQUFxQixhQUFtQixFQUFFLE1BQVksRUFBRSxPQUEyQjtRQUNqRixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsYUFBYSxDQUFDO2FBQzdCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gseUNBQWMsR0FBZCxVQUFlLFdBQWlCLEVBQUUsT0FBeUI7UUFDekQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE2QjthQUN6QyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7YUFDekIsY0FBYyxDQUFDLFdBQVcsQ0FBQzthQUMzQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsdUNBQVksR0FBWixVQUFhLFNBQWUsRUFBRSxPQUF1QjtRQUNuRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTJCO2FBQ3ZDLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsY0FBYyxDQUFDLFNBQVMsQ0FBQzthQUN6QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLGVBQXFCLEVBQUUsT0FBNkI7UUFDckUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFpQzthQUM3QyxPQUFPLENBQUMscUJBQXFCLENBQUM7YUFDOUIsY0FBYyxDQUFDLGVBQWUsQ0FBQzthQUMvQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsc0NBQVcsR0FBWCxVQUFZLFFBQWMsRUFBRSxPQUFzQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsMENBQWUsR0FBZixVQUFnQixZQUFrQixFQUFFLE9BQTBCO1FBQzVELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBOEI7YUFDMUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxvREFBeUIsR0FBekIsVUFBMEIsWUFBa0IsRUFBRSxZQUFrQixFQUFFLE9BQTBCO1FBQzFGLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBOEI7YUFDMUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUIsY0FBYyxDQUFDLFlBQVksQ0FBQzthQUM1QixjQUFjLENBQUMsWUFBWSxDQUFDO2FBQzVCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxvQ0FBUyxHQUFULFVBQVUsTUFBWSxFQUFFLE9BQW9CO1FBQzFDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx5Q0FBYyxHQUFkLFVBQWUsT0FBYSxFQUFFLE9BQXlCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNkI7YUFDekMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO2FBQzFCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHFDQUFVLEdBQVYsVUFBVyxPQUFhLEVBQUUsT0FBcUI7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QjthQUNyQyxPQUFPLENBQUMsWUFBWSxDQUFDO2FBQ3JCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG1EQUF3QixHQUF4QixVQUF5QixtQkFBeUIsRUFBRSxPQUFtQztRQUNyRixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXVDO2FBQ25ELE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsY0FBYyxDQUFDLG1CQUFtQixDQUFDO2FBQ25DLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxnREFBcUIsR0FBckIsVUFBc0Isa0JBQXdCLEVBQUUsT0FBZ0M7UUFDOUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFvQzthQUNoRCxPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO2FBQ2xDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDRDQUFpQixHQUFqQixVQUFrQixPQUEyQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsc0NBQVcsR0FBWCxVQUFZLFFBQWMsRUFBRSxPQUFzQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsK0NBQW9CLEdBQXBCLFVBQXFCLGlCQUF1QixFQUFFLE9BQStCO1FBQzNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBbUM7YUFDL0MsT0FBTyxDQUFDLHVCQUF1QixDQUFDO2FBQ2hDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQzthQUNqQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gseUNBQWMsR0FBZCxVQUFlLFdBQWlCLEVBQUUsT0FBeUI7UUFDekQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE2QjthQUN6QyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7YUFDekIsY0FBYyxDQUFDLFdBQVcsQ0FBQzthQUMzQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDBDQUFlLEdBQWYsVUFBZ0IsYUFBbUIsRUFBRSxPQUFhLEVBQUUsT0FBcUM7UUFDdkYsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QzthQUNyRCxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDRDQUFpQixHQUFqQixVQUFrQixNQUFZLEVBQUUsT0FBNEI7UUFDMUQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQzthQUM1QyxPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtREFBd0IsR0FBeEIsVUFBeUIsT0FBbUM7UUFDMUQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF1QzthQUNuRCxPQUFPLENBQUMsMkJBQTJCLENBQUM7YUFDcEMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHNDQUFXLEdBQVgsVUFBWSxRQUFjLEVBQUUsT0FBc0I7UUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDeEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHFDQUFVLEdBQVYsVUFBVyxPQUFhLEVBQUUsT0FBcUI7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QjthQUNyQyxPQUFPLENBQUMsWUFBWSxDQUFDO2FBQ3JCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG9DQUFTLEdBQVQsVUFBVSxNQUFZLEVBQUUsT0FBb0I7UUFDMUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3BCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDBDQUFlLEdBQWYsVUFBZ0IsWUFBa0IsRUFBRSxPQUEwQjtRQUM1RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQThCO2FBQzFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsWUFBWSxDQUFDO2FBQzVCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxnREFBcUIsR0FBckIsVUFBc0Isa0JBQXdCLEVBQUUsT0FBZ0M7UUFDOUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFvQzthQUNoRCxPQUFPLENBQUMseUJBQXlCLENBQUM7YUFDbEMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO2FBQ2xDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCwyQ0FBZ0IsR0FBaEIsVUFBaUIsYUFBbUIsRUFBRSxPQUEyQjtRQUMvRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQzthQUM1QixjQUFjLENBQUMsYUFBYSxDQUFDO2FBQzdCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx1Q0FBWSxHQUFaLFVBQWEsU0FBZSxFQUFFLE9BQXVCO1FBQ25ELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMkI7YUFDdkMsT0FBTyxDQUFDLGNBQWMsQ0FBQzthQUN2QixjQUFjLENBQUMsU0FBUyxDQUFDO2FBQ3pCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdEQUFxQixHQUFyQixVQUFzQixhQUFtQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsYUFBYSxDQUFDO2FBQzdCLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO2FBQ2pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx5Q0FBYyxHQUFkLFVBQWUsTUFBWTtRQUN6QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdCO2FBQ3BDLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDcEIsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQzthQUNqQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsK0NBQW9CLEdBQXBCLFVBQXFCLFlBQWtCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBOEI7YUFDMUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUIsYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7YUFDakMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHVDQUFZLEdBQVosVUFBYSxPQUFxQztRQUNoRCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQXlCO2FBQzlDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQzthQUM3QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILG1EQUF3QixHQUF4QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBYzthQUMxQixPQUFPLENBQUMsb0JBQW9CLENBQUM7YUFDN0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsaURBQXNCLEdBQXRCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFjO2FBQzFCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnREFBcUIsR0FBckI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWM7YUFDMUIsT0FBTyxDQUFDLGNBQWMsQ0FBQzthQUN2QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxtQ0FBUSxHQUFSLFVBQVMsTUFBWSxFQUFFLE9BQTRCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0M7YUFDNUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILGtDQUFPLEdBQVAsVUFBUSxPQUF1QjtRQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzthQUM5QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsK0NBQW9CLEdBQXBCLFVBQXFCLFFBQWMsRUFBRSxNQUFZO1FBQy9DLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDeEIsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0RBQXVCLEdBQXZCLFVBQXdCLEtBQWE7UUFDbkMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gseUVBQThDLEdBQTlDLFVBQStDLGFBQW1CLEVBQUUsS0FBYTtRQUMvRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxhQUFhLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQzthQUM3QyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQzthQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHlEQUE4QixHQUE5QixVQUErQixLQUFhLEVBQUUsYUFBbUI7UUFDL0QsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFzQzthQUNsRCxPQUFPLENBQUMsK0JBQStCLENBQUM7YUFDeEMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlDQUFjLEdBQWQsVUFBZSxLQUFXO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGNBQWMsQ0FBQzthQUN2QixjQUFjLENBQUMsS0FBSyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx5Q0FBYyxHQUFkLFVBQWUsUUFBYztRQUMzQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsMENBQWUsR0FBZixVQUFnQixNQUFZO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQy9CLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx5REFBOEIsR0FBOUIsVUFBK0IsTUFBWTtRQUN6QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixhQUFhLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO2FBQ3RDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZ0RBQXFCLEdBQXJCLFVBQXNCLE1BQVk7UUFDaEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7YUFDN0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDhDQUFtQixHQUFuQixVQUFvQixhQUFtQjtRQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTZCO2FBQ3pDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsYUFBYSxDQUFDO2FBQzdCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILCtDQUFvQixHQUFwQjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNkI7YUFDekMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwyQ0FBZ0IsR0FBaEIsVUFBaUIsVUFBa0I7UUFDakMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE0QjthQUN4QyxPQUFPLENBQUMsdUJBQXVCLENBQUM7YUFDaEMsY0FBYyxDQUFDLFVBQVUsQ0FBQzthQUMxQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNENBQWlCLEdBQWpCLFVBQWtCLFdBQWlCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMkI7YUFDdkMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ3pCLGNBQWMsQ0FBQyxXQUFXLENBQUM7YUFDM0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsNkNBQWtCLEdBQWxCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEyQjthQUN2QyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7YUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDBDQUFlLEdBQWYsVUFBZ0IsU0FBZTtRQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXlCO2FBQ3JDLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsY0FBYyxDQUFDLFNBQVMsQ0FBQzthQUN6QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwyQ0FBZ0IsR0FBaEI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXlCO2FBQ3JDLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILG9EQUF5QixHQUF6QixVQUEwQixhQUFtQixFQUFFLEtBQWEsRUFBRSxHQUFXO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUM7YUFDckQsT0FBTyxDQUFDLCtCQUErQixDQUFDO2FBQ3hDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO2FBQzdDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO2FBQzdCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO2FBQ3pCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnREFBcUIsR0FBckIsVUFBc0IsZUFBcUI7UUFDekMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMscUJBQXFCLENBQUM7YUFDOUIsY0FBYyxDQUFDLGVBQWUsQ0FBQzthQUMvQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCx1REFBNEIsR0FBNUIsVUFBNkIsT0FBdUI7UUFDbEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEyQjthQUN2QyxPQUFPLENBQUMsNkJBQTZCLENBQUM7YUFDdEMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxpREFBc0IsR0FBdEI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzthQUM5QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUNBQWMsR0FBZCxVQUFlLFFBQWM7UUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDeEIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsOENBQW1CLEdBQW5CLFVBQW9CLFFBQWMsRUFBRSxpQkFBdUIsRUFBRSxNQUFZO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBK0I7YUFDM0MsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsYUFBYSxDQUFDLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDO2FBQ3JELGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQy9CLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw2Q0FBa0IsR0FBbEIsVUFBbUIsWUFBa0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE4QjthQUMxQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLFlBQVksQ0FBQzthQUM1QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCw4Q0FBbUIsR0FBbkI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQThCO2FBQzFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLFVBQWtCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNEI7YUFDeEMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO2FBQ2hDLGNBQWMsQ0FBQyxVQUFVLENBQUM7YUFDMUIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDJDQUFnQixHQUFoQixVQUFpQixNQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQy9CLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwwREFBK0IsR0FBL0IsVUFBZ0MsUUFBYztRQUM1QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdCO2FBQ3BDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx1Q0FBWSxHQUFaLFVBQWEsTUFBWTtRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXNCO2FBQ2xDLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDcEIsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNENBQWlCLEdBQWpCLFVBQWtCLE9BQWE7UUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEyQjthQUN2QyxPQUFPLENBQUMsaUJBQWlCLENBQUM7YUFDMUIsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCw2Q0FBa0IsR0FBbEI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTJCO2FBQ3ZDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQzthQUMxQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx3Q0FBYSxHQUFiO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFzQjthQUNsQyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3BCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx3Q0FBYSxHQUFiLFVBQWMsT0FBYTtRQUN6QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXlCO2FBQ3JDLE9BQU8sQ0FBQyxZQUFZLENBQUM7YUFDckIsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx5Q0FBYyxHQUFkO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF1QjthQUNuQyxPQUFPLENBQUMsWUFBWSxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxzREFBMkIsR0FBM0IsVUFBNEIscUJBQTJCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBcUM7YUFDakQsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMscUJBQXFCLENBQUM7YUFDckMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG1EQUF3QixHQUF4QixVQUF5QixrQkFBd0I7UUFDL0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFvQzthQUNoRCxPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO2FBQ2xDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILHlEQUE4QixHQUE5QixVQUErQixJQUEwQjtRQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQW9DO2FBQ2hELE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQzthQUMzQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxvREFBeUIsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWtDO2FBQzlDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGtEQUF1QixHQUF2QixVQUF3QixNQUFZO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQy9CLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2FBQzlCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHVEQUE0QixHQUE1QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNkI7YUFDekMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO2FBQy9CLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNEQUEyQixHQUEzQjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNEI7YUFDeEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO2FBQy9CLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDhDQUFtQixHQUFuQjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNkI7YUFDekMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwrQ0FBb0IsR0FBcEIsVUFBcUIsS0FBYTtRQUNoQyxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQTJCO2FBQ2hELE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzthQUM5QixhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQzthQUMzQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsOERBQW1DLEdBQW5DLFVBQW9DLGFBQXFCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBMkI7YUFDaEQsT0FBTyxDQUFDLHFCQUFxQixDQUFDO2FBQzlCLGFBQWEsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO2FBQzdDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdEQUFxQixHQUFyQjtRQUNFLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBMkI7YUFDaEQsT0FBTyxDQUFDLHFCQUFxQixDQUFDO2FBQzlCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdEQUFxQixHQUFyQjtRQUNFLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBc0I7YUFDM0MsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxzQ0FBVyxHQUFYLFVBQVksS0FBVztRQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXVCO2FBQ25DLE9BQU8sQ0FBQyxVQUFVLENBQUM7YUFDbkIsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx1Q0FBWSxHQUFaO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFxQjthQUNqQyxPQUFPLENBQUMsVUFBVSxDQUFDO2FBQ25CLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx5Q0FBYyxHQUFkLFVBQWUsUUFBYztRQUMzQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwwQ0FBZSxHQUFmO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnREFBcUIsR0FBckIsVUFBc0IsSUFBZ0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO2FBQzNCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsYUFBbUIsRUFBRSxLQUFhLEVBQUUsR0FBVztRQUNqRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQzthQUM1QixhQUFhLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQzthQUM3QyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQzthQUM3QixhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQzthQUN6QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0RBQXVCLEdBQXZCLFVBQXdCLGlCQUF1QjtRQUM3QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWlDO2FBQzdDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQzthQUNoQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7YUFDakMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlEQUE4QixHQUE5QixVQUErQixPQUFzQztRQUNuRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBDO2FBQ3RELE9BQU8sQ0FBQywrQkFBK0IsQ0FBQzthQUN4QyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1EQUF3QixHQUF4QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBaUM7YUFDN0MsT0FBTyxDQUFDLHVCQUF1QixDQUFDO2FBQ2hDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw0Q0FBaUIsR0FBakIsVUFBa0IsV0FBaUI7UUFDakMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEyQjthQUN2QyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7YUFDekIsY0FBYyxDQUFDLFdBQVcsQ0FBQzthQUMzQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCw2Q0FBa0IsR0FBbEI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTJCO2FBQ3ZDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsc0RBQTJCLEdBQTNCLFVBQTRCLGFBQW1CLEVBQUUsS0FBYSxFQUFFLEdBQVc7UUFDekUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEyQzthQUN2RCxPQUFPLENBQUMsaUNBQWlDLENBQUM7YUFDMUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw2Q0FBa0IsR0FBbEIsVUFBbUIsYUFBbUIsRUFBRSxPQUFhO1FBQ25ELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUM7YUFDckQsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxhQUFhLENBQUM7YUFDN0IsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxxREFBMEIsR0FBMUIsVUFBMkIsYUFBbUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFzQzthQUNsRCxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixjQUFjLENBQUMscUJBQXFCLENBQUM7YUFDckMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsc0RBQTJCLEdBQTNCO1FBQ0UsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUE2QjthQUNsRCxPQUFPLENBQUMsbUNBQW1DLENBQUM7YUFDNUMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsMERBQStCLEdBQS9CO1FBQ0UsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUF5QzthQUM5RCxPQUFPLENBQUMsdUNBQXVDLENBQUM7YUFDaEQsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsc0VBQTJDLEdBQTNDLFVBQTRDLFFBQWM7UUFDeEQsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUF5QzthQUM5RCxPQUFPLENBQUMsdUNBQXVDLENBQUM7YUFDaEQsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0RBQXVCLEdBQXZCLFVBQXdCLFdBQW1CO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMkI7YUFDdkMsT0FBTyxDQUFDLDBCQUEwQixDQUFDO2FBQ25DLGFBQWEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDO2FBQ3pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsOENBQW1CLEdBQW5CLFVBQW9CLGFBQXFCLEVBQUUsTUFBWTtRQUNyRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStDO2FBQzNELE9BQU8sQ0FBQyxxQ0FBcUMsQ0FBQzthQUM5QyxjQUFjLENBQUMsYUFBYSxDQUFDO2FBQzdCLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQy9CLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGlEQUFzQixHQUF0QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0M7YUFDNUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDO2FBQy9CLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdEQUFxQixHQUFyQjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUI7YUFDckMsT0FBTyxDQUFDLGNBQWMsQ0FBQzthQUN2QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILCtDQUFvQixHQUFwQixVQUFxQixNQUFjLEVBQUUsS0FBYTtRQUNoRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQzthQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsbURBQXdCLEdBQXhCLFVBQXlCLE9BQWE7UUFDcEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQzthQUM1QyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZ0RBQXFCLEdBQXJCLFVBQXNCLE1BQVk7UUFDaEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQzthQUM1QyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCwrQ0FBb0IsR0FBcEIsVUFBcUIsTUFBWSxFQUFFLGFBQW1CO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0M7YUFDNUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gscURBQTBCLEdBQTFCLFVBQTJCLGFBQW1CLEVBQUUsS0FBYSxFQUFFLEdBQVc7UUFDeEUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFzQzthQUNsRCxPQUFPLENBQUMsMEJBQTBCLENBQUM7YUFDbkMsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdEQUFxQixHQUFyQjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLHFCQUFxQixDQUFDO2FBQzlCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNEQUEyQixHQUEzQjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBcUM7YUFDakQsT0FBTyxDQUFDLDJCQUEyQixDQUFDO2FBQ3BDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILCtDQUFvQixHQUFwQjtRQUNFLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBYzthQUNuQyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILCtDQUFvQixHQUFwQjtRQUNFLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBd0I7YUFDN0MsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwwREFBK0IsR0FBL0I7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdCO2FBQ3BDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlDQUFjLEdBQWQsVUFBZSxRQUFjO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDBDQUFlLEdBQWY7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdCO2FBQ3BDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHdDQUFhLEdBQWIsVUFBYyxPQUFhO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUI7YUFDckMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUNyQixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHlDQUFjLEdBQWQ7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXVCO2FBQ25DLE9BQU8sQ0FBQyxZQUFZLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDhDQUFtQixHQUFuQjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBOEI7YUFDMUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2FBQzdCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwwREFBK0IsR0FBL0IsVUFBZ0MsUUFBdUI7UUFDckQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE4QjthQUMxQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7YUFDN0IsYUFBYSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7YUFDbkMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlEQUE4QixHQUE5QixVQUErQixNQUFZO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUM7YUFDckQsT0FBTyxDQUFDLG9DQUFvQyxDQUFDO2FBQzdDLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsa0RBQXVCLEdBQXZCLFVBQXdCLE1BQVksRUFBRSxhQUFtQixFQUFFLGdCQUF3QjtRQUNqRixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQW1DO2FBQy9DLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixhQUFhLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQzthQUM3QyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7YUFDaEMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCw2REFBa0MsR0FBbEMsVUFBbUMsT0FBK0I7UUFDaEUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFtQzthQUMvQyxPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsdUNBQVksR0FBWixVQUFhLE1BQVk7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3BCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw2Q0FBa0IsR0FBbEIsVUFBbUIsWUFBa0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE0QjthQUN4QyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLFlBQVksQ0FBQzthQUM1QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG1EQUF3QixHQUF4QixVQUF5QixrQkFBd0I7UUFDL0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFrQzthQUM5QyxPQUFPLENBQUMseUJBQXlCLENBQUM7YUFDbEMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO2FBQ2xDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG9EQUF5QixHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBa0M7YUFDOUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDO2FBQ2xDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDhDQUFtQixHQUFuQjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNEI7YUFDeEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gseURBQThCLEdBQTlCLFVBQStCLGdCQUF3QjtRQUNyRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdCO2FBQ3BDLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDcEIsYUFBYSxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDO2FBQ25ELFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsS0FBYTtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdCO2FBQ3BDLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDcEIsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdEQUFxQixHQUFyQixVQUFzQixPQUFlO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixhQUFhLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQzthQUNqQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGdFQUFxQyxHQUFyQyxVQUFzQyxPQUFlLEVBQUUsWUFBMkI7UUFDaEYsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3BCLGFBQWEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO2FBQ2pDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDO2FBQzNDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpREFBc0IsR0FBdEIsVUFBdUIsUUFBZ0I7UUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3BCLGFBQWEsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDO2FBQ25DLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsdURBQTRCLEdBQTVCLFVBQTZCLGNBQXNCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixhQUFhLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDO2FBQy9DLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLFNBQWlCLEVBQUUsYUFBcUIsRUFBRSxTQUFpQjtRQUMxRSxJQUFJLElBQUksR0FBRyxJQUFJLHFCQUFlLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWM7YUFDbkMsT0FBTyxDQUFDLDBCQUEwQixDQUFDO2FBQ25DLFlBQVksQ0FBQyxJQUFJLENBQUM7YUFDbEIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxzREFBMkIsR0FBM0IsVUFBNEIsU0FBaUI7UUFDM0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxxQkFBZSxFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFjO2FBQ25DLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQzthQUNuQyxZQUFZLENBQUMsSUFBSSxDQUFDO2FBQ2xCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsaUVBQXNDLEdBQXRDLFVBQXVDLE9BQTJDO1FBQ2hGLElBQUksSUFBSSxHQUFHLElBQUkscUJBQWUsRUFBRSxDQUFDO1FBRWpDLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUNqRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDN0M7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWM7YUFDbkMsT0FBTyxDQUFDLDBCQUEwQixDQUFDO2FBQ25DLFlBQVksQ0FBQyxJQUFJLENBQUM7YUFDbEIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsc0RBQTJCLEdBQTNCLFVBQTRCLE9BQWdDO1FBQzFELElBQUksSUFBSSxHQUFHLElBQUkscUJBQWUsRUFBRSxDQUFDO1FBRWpDLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDakUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxPQUFPLENBQUMsYUFBYSxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRTtZQUN6RSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDckQ7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQy9ELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUN0RDtRQUNELElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDakUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFjO2FBQ25DLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQzthQUNuQyxZQUFZLENBQUMsSUFBSSxDQUFDO2FBQ2xCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwrQ0FBb0IsR0FBcEIsVUFBcUIsTUFBWTtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQzthQUM1QixjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsYUFBbUI7UUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE2QjthQUN6QyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsK0NBQW9CLEdBQXBCLFVBQXFCLE1BQVk7UUFDL0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE2QjthQUN6QyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDBEQUErQixHQUEvQixVQUFnQyxVQUFrQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWdDO2FBQ3JELE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO2FBQ3pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDJDQUFnQixHQUFoQixVQUFpQixrQkFBd0IsRUFBRSxzQkFBOEIsRUFBRSxNQUFZO1FBQ3JGLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0M7YUFDcEQsT0FBTyxDQUFDLDZCQUE2QixDQUFDO2FBQ3RDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQzthQUN2RCxhQUFhLENBQUMsd0JBQXdCLEVBQUUsc0JBQXNCLENBQUM7YUFDL0QsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxvREFBeUIsR0FBekIsVUFBMEIsa0JBQXdCLEVBQUUsTUFBWTtRQUM5RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdDO2FBQ3BELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQzthQUN0QyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLENBQUM7YUFDdkQsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxrREFBdUIsR0FBdkIsVUFBd0IsYUFBbUIsRUFBRSxNQUFZLEVBQUUsS0FBYSxFQUFFLEdBQVc7UUFDbkYsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCwyREFBZ0MsR0FBaEMsVUFBaUMsYUFBbUIsRUFBRSxPQUFlLEVBQUUsS0FBYSxFQUFFLEdBQVc7UUFDL0YsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7YUFDakMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsMEVBQStDLEdBQS9DLFVBQWdELGFBQW1CLEVBQUUsT0FBZSxFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsWUFBMkI7UUFDM0ksT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7YUFDakMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDekIsYUFBYSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUM7YUFDM0MsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsbURBQXdCLEdBQXhCLFVBQXlCLE1BQVksRUFBRSxNQUFjLEVBQUUsS0FBYTtRQUNsRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQzthQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwwQ0FBZSxHQUFmO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEyQjthQUN2QyxPQUFPLENBQUMscUJBQXFCLENBQUM7YUFDOUIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHFEQUEwQixHQUExQixVQUEyQixFQUFRO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBc0M7YUFDbEQsT0FBTyxDQUFDLGVBQWUsQ0FBQzthQUN4QixjQUFjLENBQUMsRUFBRSxDQUFDO2FBQ2xCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw2REFBa0MsR0FBbEMsVUFBbUMsTUFBWTtRQUM3QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXNDO2FBQ2xELE9BQU8sQ0FBQyxlQUFlLENBQUM7YUFDeEIsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDBDQUFlLEdBQWYsVUFBZ0IsU0FBZTtRQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXlCO2FBQ3JDLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsY0FBYyxDQUFDLFNBQVMsQ0FBQzthQUN6QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsb0RBQXlCLEdBQXpCLFVBQTBCLG1CQUF5QjtRQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXFDO2FBQ2pELE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQzthQUMxQyxjQUFjLENBQUMsbUJBQW1CLENBQUM7YUFDbkMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtEQUF1QixHQUF2QixVQUF3QixpQkFBdUI7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFtQzthQUMvQyxPQUFPLENBQUMsK0JBQStCLENBQUM7YUFDeEMsY0FBYyxDQUFDLGlCQUFpQixDQUFDO2FBQ2pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDJDQUFnQixHQUFoQjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUI7YUFDckMsT0FBTyxDQUFDLGNBQWMsQ0FBQzthQUN2QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0E4Qkc7SUFDSCw2Q0FBa0IsR0FBbEIsVUFBbUIsS0FBYSxFQUFFLE1BQVksRUFBRSxhQUFtQjtRQUNqRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQzthQUM3QixhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixhQUFhLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQzthQUM3QyxVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaURBQXNCLEdBQXRCLFVBQXVCLE9BQWE7UUFDbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsb0RBQXlCLEdBQXpCLFVBQTBCLEtBQWE7UUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDZEQUFrQyxHQUFsQyxVQUFtQyxhQUFtQjtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixhQUFhLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQzthQUM3QyxVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsc0RBQTJCLEdBQTNCLFVBQTRCLE1BQVk7UUFDdEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxvRUFBeUMsR0FBekMsVUFBMEMsTUFBWSxFQUFFLGFBQW1CO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQy9CLGFBQWEsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO2FBQzdDLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gseURBQThCLEdBQTlCLFVBQStCLE9BQWtDO1FBQy9ELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDRDQUFpQixHQUFqQixVQUFrQixhQUFtQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWM7YUFDMUIsT0FBTyxDQUFDLG1CQUFtQixDQUFDO2FBQzVCLGNBQWMsQ0FBQyxhQUFhLENBQUM7YUFDN0IsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDZDQUFrQixHQUFsQixVQUFtQixPQUFpQztRQUNsRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXFDO2FBQ2pELE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQzthQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwwQ0FBZSxHQUFmLFVBQWdCLE9BQThCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBa0M7YUFDOUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDO2FBQ3ZDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlDQUFjLEdBQWQsVUFBZSxPQUE2QjtRQUMxQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWlDO2FBQzdDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzthQUM5QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwrQ0FBb0IsR0FBcEIsVUFBcUIsT0FBbUM7UUFDdEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF1QzthQUNuRCxPQUFPLENBQUMsNEJBQTRCLENBQUM7YUFDckMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUNBQWMsR0FBZCxVQUFlLE9BQTRCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0M7YUFDNUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2FBQzdCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDhDQUFtQixHQUFuQixVQUFvQixHQUFrQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdDO2FBQzVDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQzthQUM3QixhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQzthQUN6QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLE9BQWlDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBcUM7YUFDakQsT0FBTyxDQUFDLDBCQUEwQixDQUFDO2FBQ25DLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDRDQUFpQixHQUFqQixVQUFrQixPQUFnQztRQUNoRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQW9DO2FBQ2hELE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQzthQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwwQ0FBZSxHQUFmLFVBQWdCLE9BQThCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBa0M7YUFDOUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDO2FBQ3ZDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDZDQUFrQixHQUFsQixVQUFtQixPQUFpQztRQUNsRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXFDO2FBQ2pELE9BQU8sQ0FBQywwQkFBMEIsQ0FBQzthQUNuQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx1Q0FBWSxHQUFaLFVBQWEsT0FBMkI7UUFDdEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscURBQTBCLEdBQTFCLFVBQTJCLE9BQXlDO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNkM7YUFDekQsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2FBQzdCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtEQUF1QixHQUF2QixVQUF3QixPQUFzQztRQUM1RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBDO2FBQ3RELE9BQU8sQ0FBQywrQkFBK0IsQ0FBQzthQUN4QyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxxQ0FBVSxHQUFWLFVBQVcsT0FBeUI7UUFDbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE2QjthQUN6QyxPQUFPLENBQUMsaUJBQWlCLENBQUM7YUFDMUIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsd0NBQWEsR0FBYixVQUFjLE9BQTRCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0M7YUFDNUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2FBQzdCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDZDQUFrQixHQUFsQixVQUFtQixPQUFpQztRQUNsRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXFDO2FBQ2pELE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQzthQUMxQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx3Q0FBYSxHQUFiLFVBQWMsT0FBNEI7UUFDeEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQzthQUM1QyxPQUFPLENBQUMsb0JBQW9CLENBQUM7YUFDN0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsdUNBQVksR0FBWixVQUFhLE9BQTJCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBK0I7YUFDM0MsT0FBTyxDQUFDLG1CQUFtQixDQUFDO2FBQzVCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDZDQUFrQixHQUFsQixVQUFtQixPQUFpQztRQUNsRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXFDO2FBQ2pELE9BQU8sQ0FBQywwQkFBMEIsQ0FBQzthQUNuQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILHNDQUFXLEdBQVgsVUFBWSxHQUFrQjtRQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQzthQUN6QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLEdBQWtCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO2FBQ3pCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLE9BQXNCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILG1EQUF3QixHQUF4QixVQUF5QixPQUFzQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpREFBc0IsR0FBdEIsVUFBdUIsT0FBcUM7UUFDMUQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QzthQUNyRCxPQUFPLENBQUMsc0NBQXNDLENBQUM7YUFDL0MsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUNBQWMsR0FBZCxVQUFlLE9BQTZCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBaUM7YUFDN0MsT0FBTyxDQUFDLHFCQUFxQixDQUFDO2FBQzlCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsb0NBQVMsR0FBVCxVQUFVLGVBQXFCLEVBQUUsT0FBb0I7UUFDbkQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7YUFDMUIsY0FBYyxDQUFDLGVBQWUsQ0FBQzthQUMvQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpREFBc0IsR0FBdEIsVUFBdUIsT0FBMkI7UUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsMEJBQTBCLENBQUM7YUFDbkMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsK0NBQW9CLEdBQXBCLFVBQXFCLE9BQWdDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBZ0I7YUFDckMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsNENBQWlCLEdBQWpCLFVBQWtCLE9BQTZCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLHNCQUFzQixDQUFDO2FBQy9CLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDREQUFpQyxHQUFqQyxVQUFrQyxPQUE2QjtRQUM3RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQzthQUMvQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILG9EQUF5QixHQUF6QixVQUEwQixXQUFtQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWdCO2FBQ3JDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDO2FBQ3hDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQzthQUMvQixjQUFjLENBQUMsV0FBVyxDQUFDO2FBQzNCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsK0RBQW9DLEdBQXBDLFVBQXFDLFdBQW1CLEVBQUUsT0FBNkI7UUFDckYsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFnQjthQUNyQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7YUFDL0IsY0FBYyxDQUFDLFdBQVcsQ0FBQzthQUMzQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw2Q0FBa0IsR0FBbEIsVUFBbUIsT0FBMEI7UUFDM0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsMkJBQTJCLENBQUM7YUFDcEMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHFEQUEwQixHQUExQixVQUEyQixPQUEwQztRQUNuRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQThDO2FBQzFELE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQzthQUN2QyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsaURBQXNCLEdBQXRCLFVBQXVCLE9BQWlDO1FBQ3RELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBcUM7YUFDakQsT0FBTyxDQUFDLHlCQUF5QixDQUFDO2FBQ2xDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsOENBQW1CLEdBQW5CLFVBQW9CLE9BQThCO1FBQ2hELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBa0M7YUFDOUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO2FBQ2hDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsT0FBMkI7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsNEJBQTRCLENBQUM7YUFDckMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLE9BQTZCO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBaUM7YUFDN0MsT0FBTyxDQUFDLHFCQUFxQixDQUFDO2FBQzlCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG9EQUF5QixHQUF6QixVQUEwQixPQUFxQztRQUM3RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXlDO2FBQ3JELE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQzthQUN2QyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx5Q0FBYyxHQUFkLFVBQWUsT0FBOEI7UUFDM0MsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUF5QjthQUM5QyxPQUFPLENBQUMsdUJBQXVCLENBQUM7YUFDaEMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHVDQUFZLEdBQVosVUFBYSxLQUFXLEVBQUUsT0FBc0I7UUFDOUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsY0FBYyxDQUFDO2FBQ3ZCLGNBQWMsQ0FBQyxLQUFLLENBQUM7YUFDckIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDRDQUFpQixHQUFqQixVQUFrQixhQUFtQixFQUFFLE9BQTJCO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBK0I7YUFDM0MsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxhQUFhLENBQUM7YUFDN0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxnREFBcUIsR0FBckIsVUFBc0IsYUFBbUIsRUFBRSxNQUFZLEVBQUUsT0FBMkI7UUFDbEYsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDBDQUFlLEdBQWYsVUFBZ0IsV0FBaUIsRUFBRSxPQUF5QjtRQUMxRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTZCO2FBQ3pDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixjQUFjLENBQUMsV0FBVyxDQUFDO2FBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx3Q0FBYSxHQUFiLFVBQWMsU0FBZSxFQUFFLE9BQXVCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMkI7YUFDdkMsT0FBTyxDQUFDLGNBQWMsQ0FBQzthQUN2QixjQUFjLENBQUMsU0FBUyxDQUFDO2FBQ3pCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsZUFBcUIsRUFBRSxPQUE2QjtRQUN0RSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWlDO2FBQzdDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzthQUM5QixjQUFjLENBQUMsZUFBZSxDQUFDO2FBQy9CLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx1Q0FBWSxHQUFaLFVBQWEsUUFBYyxFQUFFLE9BQXNCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCwyQ0FBZ0IsR0FBaEIsVUFBaUIsWUFBa0IsRUFBRSxPQUEwQjtRQUM3RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQThCO2FBQzFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsWUFBWSxDQUFDO2FBQzVCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gscURBQTBCLEdBQTFCLFVBQTJCLFlBQWtCLEVBQUUsWUFBa0IsRUFBRSxPQUEwQjtRQUMzRixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQThCO2FBQzFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsWUFBWSxDQUFDO2FBQzVCLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUIsY0FBYyxDQUFDLFlBQVksQ0FBQzthQUM1QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsdUNBQVksR0FBWixVQUFhLFFBQWMsRUFBRSxPQUFzQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQ0FBVSxHQUFWLFVBQVcsTUFBWSxFQUFFLE9BQW9CO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCwwQ0FBZSxHQUFmLFVBQWdCLE9BQWEsRUFBRSxPQUF5QjtRQUN0RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTZCO2FBQ3pDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQzthQUMxQixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxzQ0FBVyxHQUFYLFVBQVksT0FBYSxFQUFFLE9BQXFCO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUI7YUFDckMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUNyQixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDZDQUFrQixHQUFsQixVQUFtQixPQUFzQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQzthQUM1QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsb0RBQXlCLEdBQXpCLFVBQTBCLG1CQUF5QixFQUFFLE9BQW1DO1FBQ3RGLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBdUM7YUFDbkQsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMsbUJBQW1CLENBQUM7YUFDbkMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGlEQUFzQixHQUF0QixVQUF1QixrQkFBd0IsRUFBRSxPQUFnQztRQUMvRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQW9DO2FBQ2hELE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxjQUFjLENBQUMsa0JBQWtCLENBQUM7YUFDbEMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLE9BQTJCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBK0I7YUFDM0MsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxvQ0FBUyxHQUFULFVBQVUsS0FBVyxFQUFFLE9BQW1CO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBdUI7YUFDbkMsT0FBTyxDQUFDLFVBQVUsQ0FBQzthQUNuQixjQUFjLENBQUMsS0FBSyxDQUFDO2FBQ3JCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx1Q0FBWSxHQUFaLFVBQWEsUUFBYyxFQUFFLE9BQXNCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxnREFBcUIsR0FBckIsVUFBc0IsaUJBQXVCLEVBQUUsT0FBK0I7UUFDNUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFtQzthQUMvQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7YUFDaEMsY0FBYyxDQUFDLGlCQUFpQixDQUFDO2FBQ2pDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCwwQ0FBZSxHQUFmLFVBQWdCLFdBQWlCLEVBQUUsT0FBeUI7UUFDMUQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE2QjthQUN6QyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7YUFDekIsY0FBYyxDQUFDLFdBQVcsQ0FBQzthQUMzQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDJDQUFnQixHQUFoQixVQUFpQixhQUFtQixFQUFFLE9BQWEsRUFBRSxPQUFxQztRQUN4RixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXlDO2FBQ3JELE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsYUFBYSxDQUFDO2FBQzdCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLE1BQVksRUFBRSxPQUE0QjtRQUMzRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdDO2FBQzVDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG9EQUF5QixHQUF6QixVQUEwQixPQUFtQztRQUMzRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXVDO2FBQ25ELE9BQU8sQ0FBQywyQkFBMkIsQ0FBQzthQUNwQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsdUNBQVksR0FBWixVQUFhLFFBQWMsRUFBRSxPQUFzQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsc0NBQVcsR0FBWCxVQUFZLE9BQWEsRUFBRSxPQUFxQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXlCO2FBQ3JDLE9BQU8sQ0FBQyxZQUFZLENBQUM7YUFDckIsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gscUNBQVUsR0FBVixVQUFXLE1BQVksRUFBRSxPQUFvQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdCO2FBQ3BDLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDcEIsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLFlBQWtCLEVBQUUsT0FBMEI7UUFDN0QsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE4QjthQUMxQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLFlBQVksQ0FBQzthQUM1QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsaURBQXNCLEdBQXRCLFVBQXVCLGtCQUF3QixFQUFFLE9BQWdDO1FBQy9FLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBb0M7YUFDaEQsT0FBTyxDQUFDLHlCQUF5QixDQUFDO2FBQ2xDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQzthQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsNENBQWlCLEdBQWpCLFVBQWtCLGFBQW1CLEVBQUUsT0FBMkI7UUFDaEUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsd0NBQWEsR0FBYixVQUFjLFNBQWUsRUFBRSxPQUF1QjtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTJCO2FBQ3ZDLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsY0FBYyxDQUFDLFNBQVMsQ0FBQzthQUN6QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsNENBQWlCLEdBQWpCLFVBQWtCLFFBQWMsRUFBRSxPQUEyQjtRQUMzRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gseUNBQWMsR0FBZCxVQUFlLFNBQWlCLEVBQUUsU0FBaUI7UUFDakQsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFjO2FBQ25DLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQzthQUNsQyxhQUFhLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQzthQUNyQyxhQUFhLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQzthQUNyQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG9EQUF5QixHQUF6QixVQUEwQixPQUE4QjtRQUN0RCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWM7YUFDbkMsT0FBTyxDQUFDLHlCQUF5QixDQUFDO2FBQ2xDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQzthQUM3QyxhQUFhLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDeEYsYUFBYSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO2FBQzdDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxzQ0FBVyxHQUFYLFVBQVksVUFBa0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUEwQjthQUMvQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsaUJBQWlCLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQzthQUN6QyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxrQ0FBTyxHQUFQLFVBQVEsT0FBdUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEyQjthQUN2QyxPQUFPLENBQUMsZUFBZSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsc0NBQVcsR0FBWCxVQUFZLGNBQXNCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBZ0I7YUFDckMsVUFBVSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUM7YUFDeEMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLGNBQWMsQ0FBQyxjQUFjLENBQUM7YUFDOUIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLE9BQTJCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBZ0I7YUFDckMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gscURBQTBCLEdBQTFCLFVBQTJCLE9BQTJCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlDQUFjLEdBQWQsVUFBZSxPQUFzQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQzthQUMvQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDZDQUFrQixHQUFsQixVQUFtQixjQUFzQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWdCO2FBQ3JDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDO2FBQ3hDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQzthQUN4QyxjQUFjLENBQUMsY0FBYyxDQUFDO2FBQzlCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILGlEQUFzQixHQUF0QixVQUF1QixPQUFrQztRQUN2RCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWdCO2FBQ3JDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQzthQUN4QyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBR0Q7OzRIQUV3SDtJQUV4SDs7Ozs7T0FLRztJQUNLLGdDQUFLLEdBQWI7UUFDRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQVc7YUFDekIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyx5Q0FBYyxHQUF0QjtRQUNFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNEO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtZQUM1QixNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMxQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDSCx1QkFBQztBQUFELENBbm1NQSxBQW1tTUMsSUFBQTtBQW5tTVksNENBQWdCO0FBcW1NN0Isa0JBQWUsZ0JBQWdCLENBQUM7QUFpSGhDOzs7O0dBSUc7QUFDSCxJQUFZLFNBY1g7QUFkRCxXQUFZLFNBQVM7SUFDbkIsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsMEJBQWEsQ0FBQTtBQUNmLENBQUMsRUFkVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQWNwQjtBQXFIRCwyQ0FBMkM7QUFDM0MsSUFBWSxXQUlYO0FBSkQsV0FBWSxXQUFXO0lBQ3JCLDhCQUFlLENBQUE7SUFDZiwwQ0FBMkIsQ0FBQTtJQUMzQixvQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSlcsV0FBVyxHQUFYLG1CQUFXLEtBQVgsbUJBQVcsUUFJdEI7QUFFRCxJQUFZLGdCQUdYO0FBSEQsV0FBWSxnQkFBZ0I7SUFDMUIsbUNBQWUsQ0FBQTtJQUNmLHlDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxnQkFBZ0IsR0FBaEIsd0JBQWdCLEtBQWhCLHdCQUFnQixRQUczQjtBQW9CRCxJQUFZLGtCQUdYO0FBSEQsV0FBWSxrQkFBa0I7SUFDNUIseURBQW1DLENBQUE7SUFDbkMsdURBQWlDLENBQUE7QUFDbkMsQ0FBQyxFQUhXLGtCQUFrQixHQUFsQiwwQkFBa0IsS0FBbEIsMEJBQWtCLFFBRzdCO0FBMEJELElBQVksb0JBR1g7QUFIRCxXQUFZLG9CQUFvQjtJQUM5QiwrQ0FBdUIsQ0FBQTtJQUN2Qiw2Q0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSFcsb0JBQW9CLEdBQXBCLDRCQUFvQixLQUFwQiw0QkFBb0IsUUFHL0I7QUFtREQ7O0dBRUc7QUFDSCxJQUFZLGlDQUlYO0FBSkQsV0FBWSxpQ0FBaUM7SUFDM0MsZ0RBQVcsQ0FBQTtJQUNYLGtEQUFhLENBQUE7SUFDYixrREFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpXLGlDQUFpQyxHQUFqQyx5Q0FBaUMsS0FBakMseUNBQWlDLFFBSTVDO0FBaUtEOzs7O0dBSUc7QUFDSCxJQUFZLCtCQUtYO0FBTEQsV0FBWSwrQkFBK0I7SUFDekMsZ0RBQWEsQ0FBQTtJQUNiLHdEQUFxQixDQUFBO0lBQ3JCLG9EQUFpQixDQUFBO0lBQ2pCLDREQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMVywrQkFBK0IsR0FBL0IsdUNBQStCLEtBQS9CLHVDQUErQixRQUsxQztBQUVEOzs7O0dBSUc7QUFDSCxJQUFZLGVBTVg7QUFORCxXQUFZLGVBQWU7SUFDekIsa0NBQWUsQ0FBQTtJQUNmLGdDQUFhLENBQUE7SUFDYixrREFBK0IsQ0FBQTtJQUMvQixzREFBbUMsQ0FBQTtJQUNuQyxnQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQU5XLGVBQWUsR0FBZix1QkFBZSxLQUFmLHVCQUFlLFFBTTFCO0FBZ0ZEOztHQUVHO0FBQ0gsSUFBWSxxQkFFWDtBQUZELFdBQVkscUJBQXFCO0lBQy9CLDhEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFGVyxxQkFBcUIsR0FBckIsNkJBQXFCLEtBQXJCLDZCQUFxQixRQUVoQztBQUVEOzs7O0dBSUc7QUFDSCxJQUFZLHVCQUdYO0FBSEQsV0FBWSx1QkFBdUI7SUFDakMsZ0RBQXFCLENBQUE7SUFDckIsMERBQStCLENBQUE7QUFDakMsQ0FBQyxFQUhXLHVCQUF1QixHQUF2QiwrQkFBdUIsS0FBdkIsK0JBQXVCLFFBR2xDO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksaUNBSVg7QUFKRCxXQUFZLGlDQUFpQztJQUMzQyxnREFBVyxDQUFBO0lBQ1gsMERBQXFCLENBQUE7SUFDckIsb0VBQStCLENBQUE7QUFDakMsQ0FBQyxFQUpXLGlDQUFpQyxHQUFqQyx5Q0FBaUMsS0FBakMseUNBQWlDLFFBSTVDO0FBV0QsSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3ZCLHNDQUFxQixDQUFBO0lBQ3JCLDBDQUF5QixDQUFBO0lBQ3pCLDBDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFKVyxhQUFhLEdBQWIscUJBQWEsS0FBYixxQkFBYSxRQUl4QjtBQW9LRDs7R0FFRztBQUNILElBQVksc0JBTVg7QUFORCxXQUFZLHNCQUFzQjtJQUNoQyx1Q0FBYSxDQUFBO0lBQ2IsbURBQXlCLENBQUE7SUFDekIsNkRBQW1DLENBQUE7SUFDbkMsdURBQTZCLENBQUE7SUFDN0IsMkRBQWlDLENBQUE7QUFDbkMsQ0FBQyxFQU5XLHNCQUFzQixHQUF0Qiw4QkFBc0IsS0FBdEIsOEJBQXNCLFFBTWpDO0FBMkJEOzs7O0dBSUc7QUFDSCxJQUFZLHNCQUtYO0FBTEQsV0FBWSxzQkFBc0I7SUFDaEMsaURBQXVCLENBQUE7SUFDdkIsNkVBQW1ELENBQUE7SUFDbkQsaURBQXVCLENBQUE7SUFDdkIsNkVBQW1ELENBQUE7QUFDckQsQ0FBQyxFQUxXLHNCQUFzQixHQUF0Qiw4QkFBc0IsS0FBdEIsOEJBQXNCLFFBS2pDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGFBS1g7QUFMRCxXQUFZLGFBQWE7SUFDdkIsd0RBQXVDLENBQUE7SUFDdkMsd0RBQXVDLENBQUE7SUFDdkMsc0NBQXFCLENBQUE7SUFDckIsMERBQXlDLENBQUE7QUFDM0MsQ0FBQyxFQUxXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBS3hCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLG9CQUtYO0FBTEQsV0FBWSxvQkFBb0I7SUFDOUIseURBQWlDLENBQUE7SUFDakMsNkNBQXFCLENBQUE7SUFDckIsMkNBQW1CLENBQUE7SUFDbkIsaURBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUxXLG9CQUFvQixHQUFwQiw0QkFBb0IsS0FBcEIsNEJBQW9CLFFBSy9CO0FBNkNEOztHQUVHO0FBQ0gsSUFBWSwwQkFJWDtBQUpELFdBQVksMEJBQTBCO0lBQ3BDLG1EQUFxQixDQUFBO0lBQ3JCLHlEQUEyQixDQUFBO0lBQzNCLG1GQUFxRCxDQUFBO0FBQ3ZELENBQUMsRUFKVywwQkFBMEIsR0FBMUIsa0NBQTBCLEtBQTFCLGtDQUEwQixRQUlyQztBQWtERDs7OztHQUlHO0FBQ0gsSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3ZCLDBDQUF5QixDQUFBO0lBQ3pCLG9DQUFtQixDQUFBO0lBQ25CLDhCQUFhLENBQUE7QUFDZixDQUFDLEVBSlcsYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFJeEI7QUEwRUQ7Ozs7R0FJRztBQUNILElBQVksYUFHWDtBQUhELFdBQVksYUFBYTtJQUN2QixrQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSFcsYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFHeEI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3ZCLGtDQUFpQixDQUFBO0lBQ2pCLG9DQUFtQixDQUFBO0lBQ25CLHNDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFKVyxhQUFhLEdBQWIscUJBQWEsS0FBYixxQkFBYSxRQUl4QjtBQWdCRDs7Ozs7R0FLRztBQUNILElBQVksdUJBVVg7QUFWRCxXQUFZLHVCQUF1QjtJQUNqQyxvREFBeUIsQ0FBQTtJQUN6QixvREFBeUIsQ0FBQTtJQUN6QixvREFBeUIsQ0FBQTtJQUN6QixrREFBdUIsQ0FBQTtJQUN2QixrREFBdUIsQ0FBQTtJQUN2QixrREFBdUIsQ0FBQTtJQUN2Qiw0Q0FBaUIsQ0FBQTtJQUNqQiw0Q0FBaUIsQ0FBQTtJQUNqQiw0Q0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBVlcsdUJBQXVCLEdBQXZCLCtCQUF1QixLQUF2QiwrQkFBdUIsUUFVbEM7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxpQkFVWDtBQVZELFdBQVksaUJBQWlCO0lBQzNCLDBDQUFxQixDQUFBO0lBQ3JCLGtDQUFhLENBQUE7SUFDYixrQ0FBYSxDQUFBO0lBQ2Isa0NBQWEsQ0FBQTtJQUNiLHNDQUFpQixDQUFBO0lBQ2pCLGtDQUFhLENBQUE7SUFDYix3Q0FBbUIsQ0FBQTtJQUNuQixvQ0FBZSxDQUFBO0lBQ2YsNENBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVZXLGlCQUFpQixHQUFqQix5QkFBaUIsS0FBakIseUJBQWlCLFFBVTVCO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksV0FNWDtBQU5ELFdBQVksV0FBVztJQUNyQiw2QkFBYyxDQUFBO0lBQ2Qsd0JBQVMsQ0FBQTtJQUNULHdCQUFTLENBQUE7SUFDVCx3QkFBUyxDQUFBO0lBQ1QsOEJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBTlcsV0FBVyxHQUFYLG1CQUFXLEtBQVgsbUJBQVcsUUFNdEI7QUEwRUQsSUFBWSxVQVVYO0FBVkQsV0FBWSxVQUFVO0lBQ3BCLGlDQUFtQixDQUFBO0lBQ25CLGlDQUFtQixDQUFBO0lBQ25CLCtCQUFpQixDQUFBO0lBQ2pCLCtCQUFpQixDQUFBO0lBQ2pCLDZCQUFlLENBQUE7SUFDZiwrQkFBaUIsQ0FBQTtJQUNqQiwrQkFBaUIsQ0FBQTtJQUNqQix1QkFBUyxDQUFBO0lBQ1QsaUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQVZXLFVBQVUsR0FBVixrQkFBVSxLQUFWLGtCQUFVLFFBVXJCO0FBMkdELElBQVksaUJBSVg7QUFKRCxXQUFZLGlCQUFpQjtJQUMzQixrQ0FBYSxDQUFBO0lBQ2IsZ0NBQVcsQ0FBQTtJQUNYLGdDQUFXLENBQUE7QUFDYixDQUFDLEVBSlcsaUJBQWlCLEdBQWpCLHlCQUFpQixLQUFqQix5QkFBaUIsUUFJNUI7QUF3YkQ7Ozs7R0FJRztBQUNILElBQVksWUFJWDtBQUpELFdBQVksWUFBWTtJQUN0QiwyQ0FBMkIsQ0FBQTtJQUMzQiwrQkFBZSxDQUFBO0lBQ2YsK0JBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSlcsWUFBWSxHQUFaLG9CQUFZLEtBQVosb0JBQVksUUFJdkI7QUFXRDs7OztHQUlHO0FBQ0gsSUFBWSxTQXdEWDtBQXhERCxXQUFZLFNBQVM7SUFDbkIseURBQTRDLENBQUE7SUFDNUMsK0RBQWtELENBQUE7SUFDbEQsdUNBQTBCLENBQUE7SUFDMUIsZ0RBQW1DLENBQUE7SUFDbkMsZ0RBQW1DLENBQUE7SUFDbkMsbURBQXNDLENBQUE7SUFDdEMseUNBQTRCLENBQUE7SUFDNUIsMERBQTZDLENBQUE7SUFDN0MseUNBQTRCLENBQUE7SUFDNUIsMERBQTZDLENBQUE7SUFDN0MsZ0RBQW1DLENBQUE7SUFDbkMsaUVBQW9ELENBQUE7SUFDcEQsc0RBQXlDLENBQUE7SUFDekMsdUVBQTBELENBQUE7SUFDMUQsc0RBQXlDLENBQUE7SUFDekMsdUVBQTBELENBQUE7SUFDMUQseUNBQTRCLENBQUE7SUFDNUIsMERBQTZDLENBQUE7SUFDN0MsdUNBQTBCLENBQUE7SUFDMUIsZ0RBQW1DLENBQUE7SUFDbkMsdUNBQTBCLENBQUE7SUFDMUIsd0RBQTJDLENBQUE7SUFDM0MsK0NBQWtDLENBQUE7SUFDbEMsdUNBQTBCLENBQUE7SUFDMUIsd0RBQTJDLENBQUE7SUFDM0Msa0RBQXFDLENBQUE7SUFDckMsc0RBQXlDLENBQUE7SUFDekMscUVBQXdELENBQUE7SUFDeEQseUVBQTRELENBQUE7SUFDNUQsMkVBQThELENBQUE7SUFDOUQsMkVBQThELENBQUE7SUFDOUQsa0RBQXFDLENBQUE7SUFDckMseURBQTRDLENBQUE7SUFDNUMsb0RBQXVDLENBQUE7SUFDdkMsMERBQTZDLENBQUE7SUFDN0Msd0RBQTJDLENBQUE7SUFDM0MsK0RBQWtELENBQUE7SUFDbEQsaUVBQW9ELENBQUE7SUFDcEQscUVBQXdELENBQUE7SUFDeEQsd0RBQTJDLENBQUE7SUFDM0MsK0NBQWtDLENBQUE7SUFDbEMsZ0VBQW1ELENBQUE7SUFDbkQsaUZBQW9FLENBQUE7SUFDcEUsZ0VBQW1ELENBQUE7SUFDbkQsaUZBQW9FLENBQUE7SUFDcEUsZ0VBQW1ELENBQUE7SUFDbkQsaUZBQW9FLENBQUE7SUFDcEUsb0VBQXVELENBQUE7SUFDdkQsa0VBQXFELENBQUE7SUFDckQsd0VBQTJELENBQUE7SUFDM0QsdUNBQTBCLENBQUE7SUFDMUIsd0RBQTJDLENBQUE7SUFDM0MsMEJBQWEsQ0FBQTtJQUNiLDREQUErQyxDQUFBO0lBQy9DLHdEQUEyQyxDQUFBO0FBQzdDLENBQUMsRUF4RFcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUF3RHBCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLG9CQUdYO0FBSEQsV0FBWSxvQkFBb0I7SUFDOUIsK0NBQXVCLENBQUE7SUFDdkIscURBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQUhXLG9CQUFvQixHQUFwQiw0QkFBb0IsS0FBcEIsNEJBQW9CLFFBRy9CO0FBb0JEOztHQUVHO0FBQ0gsSUFBWSxVQU9YO0FBUEQsV0FBWSxVQUFVO0lBQ3BCLGlDQUFtQixDQUFBO0lBQ25CLDZCQUFlLENBQUE7SUFDZiwyQkFBYSxDQUFBO0lBQ2IsNkJBQWUsQ0FBQTtJQUNmLCtCQUFpQixDQUFBO0lBQ2pCLDZCQUFlLENBQUE7QUFDakIsQ0FBQyxFQVBXLFVBQVUsR0FBVixrQkFBVSxLQUFWLGtCQUFVLFFBT3JCO0FBNktELElBQVksVUFJWDtBQUpELFdBQVksVUFBVTtJQUNwQiw2QkFBZSxDQUFBO0lBQ2YsMkJBQWEsQ0FBQTtJQUNiLDZCQUFlLENBQUE7QUFDakIsQ0FBQyxFQUpXLFVBQVUsR0FBVixrQkFBVSxLQUFWLGtCQUFVLFFBSXJCO0FBNEREOztHQUVHO0FBQ0gsSUFBWSxXQVFYO0FBUkQsV0FBWSxXQUFXO0lBQ3JCLG9DQUFxQixDQUFBO0lBQ3JCLGdDQUFpQixDQUFBO0lBQ2pCLG9DQUFxQixDQUFBO0lBQ3JCLDhCQUFlLENBQUE7SUFDZixnQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBcUIsQ0FBQTtJQUNyQiw0QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQVJXLFdBQVcsR0FBWCxtQkFBVyxLQUFYLG1CQUFXLFFBUXRCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFlBUVg7QUFSRCxXQUFZLFlBQVk7SUFDdEIsNkJBQWEsQ0FBQTtJQUNiLG1DQUFtQixDQUFBO0lBQ25CLDZCQUFhLENBQUE7SUFDYiwrQkFBZSxDQUFBO0lBQ2YsaUNBQWlCLENBQUE7SUFDakIsMkNBQTJCLENBQUE7SUFDM0IsaUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVJXLFlBQVksR0FBWixvQkFBWSxLQUFaLG9CQUFZLFFBUXZCO0FBc0JEOztHQUVHO0FBQ0gsSUFBWSxvQkFHWDtBQUhELFdBQVksb0JBQW9CO0lBQzlCLHFDQUFhLENBQUE7SUFDYixxQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUhXLG9CQUFvQixHQUFwQiw0QkFBb0IsS0FBcEIsNEJBQW9CLFFBRy9CO0FBd0REOztHQUVHO0FBQ0gsSUFBWSxZQUlYO0FBSkQsV0FBWSxZQUFZO0lBQ3RCLDJDQUEyQixDQUFBO0lBQzNCLDJDQUEyQixDQUFBO0lBQzNCLHVEQUF1QyxDQUFBO0FBQ3pDLENBQUMsRUFKVyxZQUFZLEdBQVosb0JBQVksS0FBWixvQkFBWSxRQUl2QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxRQUtYO0FBTEQsV0FBWSxRQUFRO0lBQ2xCLHlDQUE2QixDQUFBO0lBQzdCLG1EQUF1QyxDQUFBO0lBQ3ZDLG1DQUF1QixDQUFBO0lBQ3ZCLCtDQUFtQyxDQUFBO0FBQ3JDLENBQUMsRUFMVyxRQUFRLEdBQVIsZ0JBQVEsS0FBUixnQkFBUSxRQUtuQjtBQTBFRDs7Ozs7Ozs7R0FRRztBQUNILElBQVksU0FRWDtBQVJELFdBQVksU0FBUztJQUNuQixzREFBeUMsQ0FBQTtJQUN6QyxrQ0FBcUIsQ0FBQTtJQUNyQixrQ0FBcUIsQ0FBQTtJQUNyQixzREFBeUMsQ0FBQTtJQUN6Qyw0Q0FBK0IsQ0FBQTtJQUMvQixnQ0FBbUIsQ0FBQTtJQUNuQix5RUFBNEQsQ0FBQTtBQUM5RCxDQUFDLEVBUlcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUFRcEI7QUEyTkQ7O0dBRUc7QUFDSCxJQUFZLFVBUVg7QUFSRCxXQUFZLFVBQVU7SUFDcEIseUJBQVcsQ0FBQTtJQUNYLDJCQUFhLENBQUE7SUFDYix5QkFBVyxDQUFBO0lBQ1gsK0JBQWlCLENBQUE7SUFDakIsMkJBQWEsQ0FBQTtJQUNiLGlDQUFtQixDQUFBO0lBQ25CLDZCQUFlLENBQUE7QUFDakIsQ0FBQyxFQVJXLFVBQVUsR0FBVixrQkFBVSxLQUFWLGtCQUFVLFFBUXJCO0FBMkJEOztHQUVHO0FBQ0gsSUFBWSwwQkFHWDtBQUhELFdBQVksMEJBQTBCO0lBQ3BDLDZDQUFlLENBQUE7SUFDZiw2Q0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFIVywwQkFBMEIsR0FBMUIsa0NBQTBCLEtBQTFCLGtDQUEwQixRQUdyQztBQTZGRDs7OztHQUlHO0FBQ0gsSUFBWSwrQkFTWDtBQVRELFdBQVksK0JBQStCO0lBQ3pDLDBFQUF1QyxDQUFBO0lBQ3ZDLHdEQUFxQixDQUFBO0lBQ3JCLHNFQUFtQyxDQUFBO0lBQ25DLDhEQUEyQixDQUFBO0lBQzNCLDRGQUF5RCxDQUFBO0lBQ3pELG9FQUFpQyxDQUFBO0lBQ2pDLGtHQUErRCxDQUFBO0lBQy9ELDhEQUEyQixDQUFBO0FBQzdCLENBQUMsRUFUVywrQkFBK0IsR0FBL0IsdUNBQStCLEtBQS9CLHVDQUErQixRQVMxQztBQUVEOztHQUVHO0FBQ0gsSUFBWSwyQkFJWDtBQUpELFdBQVksMkJBQTJCO0lBQ3JDLG9EQUFxQixDQUFBO0lBQ3JCLDBEQUEyQixDQUFBO0lBQzNCLDBFQUEyQyxDQUFBO0FBQzdDLENBQUMsRUFKVywyQkFBMkIsR0FBM0IsbUNBQTJCLEtBQTNCLG1DQUEyQixRQUl0QztBQWdDRCxJQUFZLDBCQUlYO0FBSkQsV0FBWSwwQkFBMEI7SUFDcEMsMkNBQWEsQ0FBQTtJQUNiLHlFQUEyQyxDQUFBO0lBQzNDLHVFQUF5QyxDQUFBO0FBQzNDLENBQUMsRUFKVywwQkFBMEIsR0FBMUIsa0NBQTBCLEtBQTFCLGtDQUEwQixRQUlyQztBQW1GRDs7R0FFRztBQUNILElBQVksb0JBaUJYO0FBakJELFdBQVksb0JBQW9CO0lBQzlCLHVDQUFlLENBQUE7SUFDZiwrQ0FBdUIsQ0FBQTtJQUN2QixtREFBMkIsQ0FBQTtJQUMzQiw2Q0FBcUIsQ0FBQTtJQUNyQix5Q0FBaUIsQ0FBQTtJQUNqQixxQ0FBYSxDQUFBO0lBQ2IsNkNBQXFCLENBQUE7SUFDckIsNkNBQXFCLENBQUE7SUFDckIsdURBQStCLENBQUE7SUFDL0IseUNBQWlCLENBQUE7SUFDakIsaUVBQXlDLENBQUE7SUFDekMsMkNBQW1CLENBQUE7SUFDbkIsdUNBQWUsQ0FBQTtJQUNmLHlDQUFpQixDQUFBO0lBQ2pCLDJDQUFtQixDQUFBO0lBQ25CLHFDQUFhLENBQUE7QUFDZixDQUFDLEVBakJXLG9CQUFvQixHQUFwQiw0QkFBb0IsS0FBcEIsNEJBQW9CLFFBaUIvQjtBQVNEOzs7O0dBSUc7QUFDSCxJQUFZLHNCQVVYO0FBVkQsV0FBWSxzQkFBc0I7SUFDaEMsNkNBQW1CLENBQUE7SUFDbkIsNkNBQW1CLENBQUE7SUFDbkIsdURBQTZCLENBQUE7SUFDN0IsK0NBQXFCLENBQUE7SUFDckIsNkNBQW1CLENBQUE7SUFDbkIsaURBQXVCLENBQUE7SUFDdkIsK0NBQXFCLENBQUE7SUFDckIsMkRBQWlDLENBQUE7SUFDakMsMkNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLHNCQUFzQixHQUF0Qiw4QkFBc0IsS0FBdEIsOEJBQXNCLFFBVWpDO0FBd1FELElBQVksWUFXWDtBQVhELFdBQVksWUFBWTtJQUN0QiwrQkFBZSxDQUFBO0lBQ2YsK0JBQWUsQ0FBQTtJQUNmLCtCQUFlLENBQUE7SUFDZiwrQkFBZSxDQUFBO0lBQ2YsK0JBQWUsQ0FBQTtJQUNmLCtCQUFlLENBQUE7SUFDZiwrQkFBZSxDQUFBO0lBQ2YsK0JBQWUsQ0FBQTtJQUNmLCtCQUFlLENBQUE7SUFDZixtQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBWFcsWUFBWSxHQUFaLG9CQUFZLEtBQVosb0JBQVksUUFXdkI7QUFFRCxJQUFZLE9BS1g7QUFMRCxXQUFZLE9BQU87SUFDakIsb0JBQVMsQ0FBQTtJQUNULHNCQUFXLENBQUE7SUFDWCx3QkFBYSxDQUFBO0lBQ2Isc0JBQVcsQ0FBQTtBQUNiLENBQUMsRUFMVyxPQUFPLEdBQVAsZUFBTyxLQUFQLGVBQU8sUUFLbEI7QUFtREQ7Ozs7R0FJRztBQUNILElBQVksTUFJWDtBQUpELFdBQVksTUFBTTtJQUNoQiwrQkFBcUIsQ0FBQTtJQUNyQix5Q0FBK0IsQ0FBQTtJQUMvQixtQ0FBeUIsQ0FBQTtBQUMzQixDQUFDLEVBSlcsTUFBTSxHQUFOLGNBQU0sS0FBTixjQUFNLFFBSWpCO0FBOEJELElBQVksa0JBSVg7QUFKRCxXQUFZLGtCQUFrQjtJQUM1QixtQ0FBYSxDQUFBO0lBQ2IscUNBQWUsQ0FBQTtJQUNmLDJDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFKVyxrQkFBa0IsR0FBbEIsMEJBQWtCLEtBQWxCLDBCQUFrQixRQUk3QjtBQXNCRDs7R0FFRztBQUNILElBQVksZ0JBR1g7QUFIRCxXQUFZLGdCQUFnQjtJQUMxQix1Q0FBbUIsQ0FBQTtJQUNuQix1Q0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSFcsZ0JBQWdCLEdBQWhCLHdCQUFnQixLQUFoQix3QkFBZ0IsUUFHM0I7QUFtREQ7Ozs7R0FJRztBQUNILElBQVksVUE0Qlg7QUE1QkQsV0FBWSxVQUFVO0lBQ3BCLHlDQUEyQixDQUFBO0lBQzNCLGlEQUFtQyxDQUFBO0lBQ25DLGlEQUFtQyxDQUFBO0lBQ25DLCtDQUFpQyxDQUFBO0lBQ2pDLCtDQUFpQyxDQUFBO0lBQ2pDLDJEQUE2QyxDQUFBO0lBQzdDLHFEQUF1QyxDQUFBO0lBQ3ZDLGlEQUFtQyxDQUFBO0lBQ25DLDZDQUErQixDQUFBO0lBQy9CLG1EQUFxQyxDQUFBO0lBQ3JDLCtEQUFpRCxDQUFBO0lBQ2pELHFEQUF1QyxDQUFBO0lBQ3ZDLHVEQUF5QyxDQUFBO0lBQ3pDLHFEQUF1QyxDQUFBO0lBQ3ZDLG1EQUFxQyxDQUFBO0lBQ3JDLCtDQUFpQyxDQUFBO0lBQ2pDLGlEQUFtQyxDQUFBO0lBQ25DLDZDQUErQixDQUFBO0lBQy9CLDJFQUE2RCxDQUFBO0lBQzdELGlGQUFtRSxDQUFBO0lBQ25FLG1GQUFxRSxDQUFBO0lBQ3JFLCtFQUFpRSxDQUFBO0lBQ2pFLGlGQUFtRSxDQUFBO0lBQ25FLHFGQUF1RSxDQUFBO0lBQ3ZFLG1EQUFxQyxDQUFBO0lBQ3JDLGlEQUFtQyxDQUFBO0lBQ25DLCtDQUFpQyxDQUFBO0FBQ25DLENBQUMsRUE1QlcsVUFBVSxHQUFWLGtCQUFVLEtBQVYsa0JBQVUsUUE0QnJCO0FBMExEOztHQUVHO0FBQ0gsSUFBWSxjQUdYO0FBSEQsV0FBWSxjQUFjO0lBQ3hCLCtDQUE2QixDQUFBO0lBQzdCLHFEQUFtQyxDQUFBO0FBQ3JDLENBQUMsRUFIVyxjQUFjLEdBQWQsc0JBQWMsS0FBZCxzQkFBYyxRQUd6QjtBQWdIRDs7R0FFRztBQUNILElBQVksV0FFWDtBQUZELFdBQVksV0FBVztJQUNyQiwwQkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUZXLFdBQVcsR0FBWCxtQkFBVyxLQUFYLG1CQUFXLFFBRXRCO0FBdUJEOztHQUVHO0FBQ0gsSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3ZCLG9DQUFtQixDQUFBO0lBQ25CLGdDQUFlLENBQUE7SUFDZixrQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSlcsYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFJeEI7QUFtQkQ7O0dBRUc7QUFDSCxJQUFZLGlCQUlYO0FBSkQsV0FBWSxpQkFBaUI7SUFDM0Isc0RBQWlDLENBQUE7SUFDakMsb0NBQWUsQ0FBQTtJQUNmLHNDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxpQkFBaUIsR0FBakIseUJBQWlCLEtBQWpCLHlCQUFpQixRQUk1QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxzQkFJWDtBQUpELFdBQVksc0JBQXNCO0lBQ2hDLCtDQUFxQixDQUFBO0lBQ3JCLDZDQUFtQixDQUFBO0lBQ25CLCtDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFKVyxzQkFBc0IsR0FBdEIsOEJBQXNCLEtBQXRCLDhCQUFzQixRQUlqQztBQWdFRDs7Ozs7R0FLRztBQUNILElBQVksNEJBR1g7QUFIRCxXQUFZLDRCQUE0QjtJQUN0Qyx5REFBeUIsQ0FBQTtJQUN6Qix5REFBeUIsQ0FBQTtBQUMzQixDQUFDLEVBSFcsNEJBQTRCLEdBQTVCLG9DQUE0QixLQUE1QixvQ0FBNEIsUUFHdkM7QUFzREQsSUFBWSxnQkE2RVg7QUE3RUQsV0FBWSxnQkFBZ0I7SUFDMUIsK0RBQTJDLENBQUE7SUFDM0MscUVBQWlELENBQUE7SUFDakQsaUVBQTZDLENBQUE7SUFDN0MsdUdBQW1GLENBQUE7SUFDbkYscUZBQWlFLENBQUE7SUFDakUsaUVBQTZDLENBQUE7SUFDN0MsbUVBQStDLENBQUE7SUFDL0MsdUVBQW1ELENBQUE7SUFDbkQseUZBQXFFLENBQUE7SUFDckUseURBQXFDLENBQUE7SUFDckMscUVBQWlELENBQUE7SUFDakQseUVBQXFELENBQUE7SUFDckQsMkRBQXVDLENBQUE7SUFDdkMsNkRBQXlDLENBQUE7SUFDekMseUVBQXFELENBQUE7SUFDckQsNkRBQXlDLENBQUE7SUFDekMscURBQWlDLENBQUE7SUFDakMsbUVBQStDLENBQUE7SUFDL0MsNkVBQXlELENBQUE7SUFDekQsK0VBQTJELENBQUE7SUFDM0QsNkZBQXlFLENBQUE7SUFDekUscURBQWlDLENBQUE7SUFDakMsaUVBQTZDLENBQUE7SUFDN0MsbUVBQStDLENBQUE7SUFDL0MsbUVBQStDLENBQUE7SUFDL0MsbUVBQStDLENBQUE7SUFDL0MseUZBQXFFLENBQUE7SUFDckUsK0RBQTJDLENBQUE7SUFDM0MsMkRBQXVDLENBQUE7SUFDdkMsaUZBQTZELENBQUE7SUFDN0QsK0VBQTJELENBQUE7SUFDM0QsdUZBQW1FLENBQUE7SUFDbkUsdURBQW1DLENBQUE7SUFDbkMsMkRBQXVDLENBQUE7SUFDdkMsK0RBQTJDLENBQUE7SUFDM0MsMkRBQXVDLENBQUE7SUFDdkMsbUVBQStDLENBQUE7SUFDL0MsaURBQTZCLENBQUE7SUFDN0IscUVBQWlELENBQUE7SUFDakQsbUVBQStDLENBQUE7SUFDL0MsK0RBQTJDLENBQUE7SUFDM0MsNkRBQXlDLENBQUE7SUFDekMsaUVBQTZDLENBQUE7SUFDN0MsbUVBQStDLENBQUE7SUFDL0MsbUVBQStDLENBQUE7SUFDL0MsbURBQStCLENBQUE7SUFDL0IsMkRBQXVDLENBQUE7SUFDdkMsdURBQW1DLENBQUE7SUFDbkMseUVBQXFELENBQUE7SUFDckQsMkRBQXVDLENBQUE7SUFDdkMsdURBQW1DLENBQUE7SUFDbkMsaURBQTZCLENBQUE7SUFDN0IsMkRBQXVDLENBQUE7SUFDdkMsaURBQTZCLENBQUE7SUFDN0IsK0NBQTJCLENBQUE7SUFDM0IscURBQWlDLENBQUE7SUFDakMsbUZBQStELENBQUE7SUFDL0QsaUdBQTZFLENBQUE7SUFDN0UsbUZBQStELENBQUE7SUFDL0QsNkRBQXlDLENBQUE7SUFDekMscUZBQWlFLENBQUE7SUFDakUseUVBQXFELENBQUE7SUFDckQsdUVBQW1ELENBQUE7SUFDbkQsNkVBQXlELENBQUE7SUFDekQsdUNBQW1CLENBQUE7SUFDbkIscUVBQWlELENBQUE7SUFDakQsbURBQStCLENBQUE7SUFDL0IseURBQXFDLENBQUE7SUFDckMsdUVBQW1ELENBQUE7SUFDbkQsK0VBQTJELENBQUE7SUFDM0QsdUZBQW1FLENBQUE7SUFDbkUsK0VBQTJELENBQUE7SUFDM0QseUZBQXFFLENBQUE7SUFDckUsbUVBQStDLENBQUE7SUFDL0MsNkZBQXlFLENBQUE7SUFDekUseURBQXFDLENBQUE7QUFDdkMsQ0FBQyxFQTdFVyxnQkFBZ0IsR0FBaEIsd0JBQWdCLEtBQWhCLHdCQUFnQixRQTZFM0I7QUFFRCxJQUFZLGNBcUJYO0FBckJELFdBQVksY0FBYztJQUN4QixxREFBbUMsQ0FBQTtJQUNuQyxtREFBaUMsQ0FBQTtJQUNqQyxpREFBK0IsQ0FBQTtJQUMvQixpREFBK0IsQ0FBQTtJQUMvQix1REFBcUMsQ0FBQTtJQUNyQywrREFBNkMsQ0FBQTtJQUM3QyxtREFBaUMsQ0FBQTtJQUNqQyw2REFBMkMsQ0FBQTtJQUMzQyxpREFBK0IsQ0FBQTtJQUMvQiwrQ0FBNkIsQ0FBQTtJQUM3QixtRUFBaUQsQ0FBQTtJQUNqRCx5RUFBdUQsQ0FBQTtJQUN2RCxpREFBK0IsQ0FBQTtJQUMvQix1RUFBcUQsQ0FBQTtJQUNyRCwrQ0FBNkIsQ0FBQTtJQUM3Qiw2REFBMkMsQ0FBQTtJQUMzQyxpRUFBK0MsQ0FBQTtJQUMvQyxpREFBK0IsQ0FBQTtJQUMvQixtRUFBaUQsQ0FBQTtJQUNqRCwyREFBeUMsQ0FBQTtBQUMzQyxDQUFDLEVBckJXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBcUJ6QjtBQVFEOzs7OztHQUtHO0FBQ0gsSUFBWSxxQkFJWDtBQUpELFdBQVkscUJBQXFCO0lBQy9CLHNEQUE2QixDQUFBO0lBQzdCLDhEQUFxQyxDQUFBO0lBQ3JDLG9EQUEyQixDQUFBO0FBQzdCLENBQUMsRUFKVyxxQkFBcUIsR0FBckIsNkJBQXFCLEtBQXJCLDZCQUFxQixRQUloQztBQUVEOzs7OztHQUtHO0FBQ0gsSUFBWSx3QkFHWDtBQUhELFdBQVksd0JBQXdCO0lBQ2xDLDJEQUErQixDQUFBO0lBQy9CLDZDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFIVyx3QkFBd0IsR0FBeEIsZ0NBQXdCLEtBQXhCLGdDQUF3QixRQUduQztBQUVEOztHQUVHO0FBQ0gsSUFBWSxtQ0FHWDtBQUhELFdBQVksbUNBQW1DO0lBQzdDLHdFQUFpQyxDQUFBO0lBQ2pDLGdFQUF5QixDQUFBO0FBQzNCLENBQUMsRUFIVyxtQ0FBbUMsR0FBbkMsMkNBQW1DLEtBQW5DLDJDQUFtQyxRQUc5QztBQVVEOztHQUVHO0FBQ0gsSUFBWSxXQUlYO0FBSkQsV0FBWSxXQUFXO0lBQ3JCLGdDQUFpQixDQUFBO0lBQ2pCLG9DQUFxQixDQUFBO0lBQ3JCLDhDQUErQixDQUFBO0FBQ2pDLENBQUMsRUFKVyxXQUFXLEdBQVgsbUJBQVcsS0FBWCxtQkFBVyxRQUl0QjtBQTJERCxJQUFZLFlBS1g7QUFMRCxXQUFZLFlBQVk7SUFDdEIsMkJBQVcsQ0FBQTtJQUNYLHlDQUF5QixDQUFBO0lBQ3pCLHlDQUF5QixDQUFBO0lBQ3pCLCtDQUErQixDQUFBO0FBQ2pDLENBQUMsRUFMVyxZQUFZLEdBQVosb0JBQVksS0FBWixvQkFBWSxRQUt2QjtBQUVELElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN6Qiw4QkFBVyxDQUFBO0lBQ1gsb0NBQWlCLENBQUE7SUFDakIsZ0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFKVyxlQUFlLEdBQWYsdUJBQWUsS0FBZix1QkFBZSxRQUkxQjtBQStFRDs7R0FFRztBQUNILElBQVksb0JBR1g7QUFIRCxXQUFZLG9CQUFvQjtJQUM5Qix1REFBK0IsQ0FBQTtJQUMvQiwrQ0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBSFcsb0JBQW9CLEdBQXBCLDRCQUFvQixLQUFwQiw0QkFBb0IsUUFHL0I7QUE0RUQ7O0dBRUc7QUFDSCxJQUFZLDZCQUlYO0FBSkQsV0FBWSw2QkFBNkI7SUFDdkMsc0RBQXFCLENBQUE7SUFDckIsNERBQTJCLENBQUE7SUFDM0Isc0hBQXFGLENBQUE7QUFDdkYsQ0FBQyxFQUpXLDZCQUE2QixHQUE3QixxQ0FBNkIsS0FBN0IscUNBQTZCLFFBSXhDO0FBaUZEOzs7O0dBSUc7QUFDSCxJQUFZLHVCQUVYO0FBRkQsV0FBWSx1QkFBdUI7SUFDakMsbURBQXdCLENBQUE7QUFDMUIsQ0FBQyxFQUZXLHVCQUF1QixHQUF2QiwrQkFBdUIsS0FBdkIsK0JBQXVCLFFBRWxDO0FBMENEOztHQUVHO0FBQ0gsSUFBWSxvQkFNWDtBQU5ELFdBQVksb0JBQW9CO0lBQzlCLHlDQUFpQixDQUFBO0lBQ2pCLHFEQUE2QixDQUFBO0lBQzdCLDJDQUFtQixDQUFBO0lBQ25CLDZDQUFxQixDQUFBO0lBQ3JCLDJDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFOVyxvQkFBb0IsR0FBcEIsNEJBQW9CLEtBQXBCLDRCQUFvQixRQU0vQjtBQTZIRDs7R0FFRztBQUNILElBQVksNEJBSVg7QUFKRCxXQUFZLDRCQUE0QjtJQUN0QywrQ0FBZSxDQUFBO0lBQ2YsK0RBQStCLENBQUE7SUFDL0IscUdBQXFFLENBQUE7QUFDdkUsQ0FBQyxFQUpXLDRCQUE0QixHQUE1QixvQ0FBNEIsS0FBNUIsb0NBQTRCLFFBSXZDO0FBNEREOztHQUVHO0FBQ0gsSUFBWSx1QkFHWDtBQUhELFdBQVksdUJBQXVCO0lBQ2pDLGdEQUFxQixDQUFBO0lBQ3JCLG9EQUF5QixDQUFBO0FBQzNCLENBQUMsRUFIVyx1QkFBdUIsR0FBdkIsK0JBQXVCLEtBQXZCLCtCQUF1QixRQUdsQztBQThHRDs7Ozs7R0FLRztBQUNILElBQVksc0JBSVg7QUFKRCxXQUFZLHNCQUFzQjtJQUNoQyxxREFBMkIsQ0FBQTtJQUMzQixpREFBdUIsQ0FBQTtJQUN2QiwrQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSlcsc0JBQXNCLEdBQXRCLDhCQUFzQixLQUF0Qiw4QkFBc0IsUUFJakM7QUF3REQ7O0dBRUc7QUFDSCxJQUFZLGdDQUlYO0FBSkQsV0FBWSxnQ0FBZ0M7SUFDMUMsdURBQW1CLENBQUE7SUFDbkIseURBQXFCLENBQUE7SUFDckIsdUVBQW1DLENBQUE7QUFDckMsQ0FBQyxFQUpXLGdDQUFnQyxHQUFoQyx3Q0FBZ0MsS0FBaEMsd0NBQWdDLFFBSTNDO0FBd0hEOztHQUVHO0FBQ0gsSUFBWSxtQkFLWDtBQUxELFdBQVksbUJBQW1CO0lBQzdCLG9EQUE2QixDQUFBO0lBQzdCLGtEQUEyQixDQUFBO0lBQzNCLGtEQUEyQixDQUFBO0lBQzNCLGdFQUF5QyxDQUFBO0FBQzNDLENBQUMsRUFMVyxtQkFBbUIsR0FBbkIsMkJBQW1CLEtBQW5CLDJCQUFtQixRQUs5QjtBQTJERDs7O0dBR0c7QUFDSCxJQUFZLDJCQUlYO0FBSkQsV0FBWSwyQkFBMkI7SUFDckMsOENBQWUsQ0FBQTtJQUNmLDhDQUFlLENBQUE7SUFDZixzREFBdUIsQ0FBQTtBQUN6QixDQUFDLEVBSlcsMkJBQTJCLEdBQTNCLG1DQUEyQixLQUEzQixtQ0FBMkIsUUFJdEM7QUFnRUQ7O0dBRUc7QUFDSCxJQUFZLElBR1g7QUFIRCxXQUFZLElBQUk7SUFDZCxtQkFBVyxDQUFBO0lBQ1gscUJBQWEsQ0FBQTtBQUNmLENBQUMsRUFIVyxJQUFJLEdBQUosWUFBSSxLQUFKLFlBQUksUUFHZjtBQW1CRDs7OztHQUlHO0FBQ0gsSUFBWSxZQUdYO0FBSEQsV0FBWSxZQUFZO0lBQ3RCLGlDQUFpQixDQUFBO0lBQ2pCLG1DQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxZQUFZLEdBQVosb0JBQVksS0FBWixvQkFBWSxRQUd2QjtBQTRHRDs7R0FFRztBQUNILElBQVkscUNBR1g7QUFIRCxXQUFZLHFDQUFxQztJQUMvQyxvREFBVyxDQUFBO0lBQ1gsMEVBQWlDLENBQUE7QUFDbkMsQ0FBQyxFQUhXLHFDQUFxQyxHQUFyQyw2Q0FBcUMsS0FBckMsNkNBQXFDLFFBR2hEO0FBNFFELElBQVksc0JBR1g7QUFIRCxXQUFZLHNCQUFzQjtJQUNoQywyQ0FBaUIsQ0FBQTtJQUNqQixxREFBMkIsQ0FBQTtBQUM3QixDQUFDLEVBSFcsc0JBQXNCLEdBQXRCLDhCQUFzQixLQUF0Qiw4QkFBc0IsUUFHakM7QUE2SkQsSUFBWSxTQUdYO0FBSEQsV0FBWSxTQUFTO0lBQ25CLGtDQUFxQixDQUFBO0lBQ3JCLDhCQUFpQixDQUFBO0FBQ25CLENBQUMsRUFIVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQUdwQjtBQVlEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ25CLDhCQUFpQixDQUFBO0lBQ2pCLHdCQUFXLENBQUE7SUFDWCwwQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpXLFNBQVMsR0FBVCxpQkFBUyxLQUFULGlCQUFTLFFBSXBCO0FBbUJEOzs7O0dBSUc7QUFDSCxJQUFZLGVBTVg7QUFORCxXQUFZLGVBQWU7SUFDekIsZ0NBQWEsQ0FBQTtJQUNiLDhCQUFXLENBQUE7SUFDWCxvREFBaUMsQ0FBQTtJQUNqQyxrREFBK0IsQ0FBQTtJQUMvQix3REFBcUMsQ0FBQTtBQUN2QyxDQUFDLEVBTlcsZUFBZSxHQUFmLHVCQUFlLEtBQWYsdUJBQWUsUUFNMUI7QUFxTkQ7Ozs7R0FJRztBQUNILElBQVksa0JBSVg7QUFKRCxXQUFZLGtCQUFrQjtJQUM1QixxQ0FBZSxDQUFBO0lBQ2YsdUNBQWlCLENBQUE7SUFDakIsdUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLGtCQUFrQixHQUFsQiwwQkFBa0IsS0FBbEIsMEJBQWtCLFFBSTdCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGtCQUdYO0FBSEQsV0FBWSxrQkFBa0I7SUFDNUIscUNBQWUsQ0FBQTtJQUNmLHFDQUFlLENBQUE7QUFDakIsQ0FBQyxFQUhXLGtCQUFrQixHQUFsQiwwQkFBa0IsS0FBbEIsMEJBQWtCLFFBRzdCO0FBbUlEOzs7O0dBSUc7QUFDSCxJQUFZLGVBS1g7QUFMRCxXQUFZLGVBQWU7SUFDekIsa0NBQWUsQ0FBQTtJQUNmLG9DQUFpQixDQUFBO0lBQ2pCLG9DQUFpQixDQUFBO0lBQ2pCLDhCQUFXLENBQUE7QUFDYixDQUFDLEVBTFcsZUFBZSxHQUFmLHVCQUFlLEtBQWYsdUJBQWUsUUFLMUI7QUFrbUJEOztHQUVHO0FBQ0gsSUFBWSxTQUtYO0FBTEQsV0FBWSxTQUFTO0lBQ25CLDRDQUErQixDQUFBO0lBQy9CLHNFQUF5RCxDQUFBO0lBQ3pELGtFQUFxRCxDQUFBO0lBQ3JELDBGQUE2RSxDQUFBO0FBQy9FLENBQUMsRUFMVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQUtwQjtBQThDRDs7Ozs7R0FLRztBQUNILElBQVksMkJBSVg7QUFKRCxXQUFZLDJCQUEyQjtJQUNyQyxvREFBcUIsQ0FBQTtJQUNyQixzREFBdUIsQ0FBQTtJQUN2QiwwREFBMkIsQ0FBQTtBQUM3QixDQUFDLEVBSlcsMkJBQTJCLEdBQTNCLG1DQUEyQixLQUEzQixtQ0FBMkIsUUFJdEM7QUEwQkQ7O0dBRUc7QUFDSCxJQUFZLG9CQUdYO0FBSEQsV0FBWSxvQkFBb0I7SUFDOUIsdURBQStCLENBQUE7SUFDL0IsK0NBQXVCLENBQUE7QUFDekIsQ0FBQyxFQUhXLG9CQUFvQixHQUFwQiw0QkFBb0IsS0FBcEIsNEJBQW9CLFFBRy9CO0FBcVNEOzs7OztHQUtHO0FBQ0gsSUFBWSxnQkFJWDtBQUpELFdBQVksZ0JBQWdCO0lBQzFCLDJDQUF1QixDQUFBO0lBQ3ZCLHVDQUFtQixDQUFBO0lBQ25CLHlEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFKVyxnQkFBZ0IsR0FBaEIsd0JBQWdCLEtBQWhCLHdCQUFnQixRQUkzQjtBQW9ERDs7OztHQUlHO0FBQ0gsSUFBWSxvQkFJWDtBQUpELFdBQVksb0JBQW9CO0lBQzlCLDJDQUFtQixDQUFBO0lBQ25CLDJDQUFtQixDQUFBO0lBQ25CLDJDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFKVyxvQkFBb0IsR0FBcEIsNEJBQW9CLEtBQXBCLDRCQUFvQixRQUkvQjtBQStFRDs7Ozs7R0FLRztBQUNILElBQVksa0JBSVg7QUFKRCxXQUFZLGtCQUFrQjtJQUM1Qix1Q0FBaUIsQ0FBQTtJQUNqQix5Q0FBbUIsQ0FBQTtJQUNuQiw2Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBSlcsa0JBQWtCLEdBQWxCLDBCQUFrQixLQUFsQiwwQkFBa0IsUUFJN0I7Ozs7OztBQ3pzYUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0ciLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgRnVzaW9uQXV0aENsaWVudCBmcm9tICcuL3NyYy9GdXNpb25BdXRoQ2xpZW50J1xuZXhwb3J0IGRlZmF1bHQgRnVzaW9uQXV0aENsaWVudDtcblxuZXhwb3J0ICogZnJvbSAnLi9zcmMvRnVzaW9uQXV0aENsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9JUkVTVENsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9EZWZhdWx0UkVTVENsaWVudEJ1aWxkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvQ2xpZW50UmVzcG9uc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvSVJFU1RDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvSVJFU1RDbGllbnRCdWlsZGVyJztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyIGdldEdsb2JhbCA9IGZ1bmN0aW9uICgpIHtcblx0Ly8gdGhlIG9ubHkgcmVsaWFibGUgbWVhbnMgdG8gZ2V0IHRoZSBnbG9iYWwgb2JqZWN0IGlzXG5cdC8vIGBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpYFxuXHQvLyBIb3dldmVyLCB0aGlzIGNhdXNlcyBDU1AgdmlvbGF0aW9ucyBpbiBDaHJvbWUgYXBwcy5cblx0aWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gc2VsZjsgfVxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuXHRpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuXHR0aHJvdyBuZXcgRXJyb3IoJ3VuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCcpO1xufVxuXG52YXIgZ2xvYmFsT2JqZWN0ID0gZ2V0R2xvYmFsKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGdsb2JhbE9iamVjdC5mZXRjaDtcblxuLy8gTmVlZGVkIGZvciBUeXBlU2NyaXB0IGFuZCBXZWJwYWNrLlxuaWYgKGdsb2JhbE9iamVjdC5mZXRjaCkge1xuXHRleHBvcnRzLmRlZmF1bHQgPSBnbG9iYWxPYmplY3QuZmV0Y2guYmluZChnbG9iYWxPYmplY3QpO1xufVxuXG5leHBvcnRzLkhlYWRlcnMgPSBnbG9iYWxPYmplY3QuSGVhZGVycztcbmV4cG9ydHMuUmVxdWVzdCA9IGdsb2JhbE9iamVjdC5SZXF1ZXN0O1xuZXhwb3J0cy5SZXNwb25zZSA9IGdsb2JhbE9iamVjdC5SZXNwb25zZTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTksIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsaWVudFJlc3BvbnNlPFQ+IHtcbiAgcHVibGljIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgcHVibGljIHJlc3BvbnNlOiBUO1xuICBwdWJsaWMgZXhjZXB0aW9uOiBFcnJvcjtcblxuICB3YXNTdWNjZXNzZnVsKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXR1c0NvZGUgPj0gMjAwICYmIHRoaXMuc3RhdHVzQ29kZSA8IDMwMDtcbiAgfVxufSIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktMjAyNCwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IElSRVNUQ2xpZW50LCB7IEVycm9yUmVzcG9uc2VIYW5kbGVyLCBSZXNwb25zZUhhbmRsZXIgfSBmcm9tIFwiLi9JUkVTVENsaWVudFwiO1xuaW1wb3J0IENsaWVudFJlc3BvbnNlIGZyb20gXCIuL0NsaWVudFJlc3BvbnNlXCI7XG5pbXBvcnQgZmV0Y2gsIHsgQm9keUluaXQsIFJlcXVlc3RDcmVkZW50aWFscywgUmVzcG9uc2UgfSBmcm9tICdub2RlLWZldGNoJztcbmltcG9ydCB7IFVSTFNlYXJjaFBhcmFtcyB9IGZyb20gXCJ1cmxcIjtcblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBcbiAqIEBhdXRob3IgVHlsZXIgU2NvdHRcbiAqIEBhdXRob3IgVEogUGVkZW5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4gaW1wbGVtZW50cyBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gIHB1YmxpYyBib2R5OiBCb2R5SW5pdDtcbiAgcHVibGljIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHVibGljIG1ldGhvZDogc3RyaW5nO1xuICBwdWJsaWMgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwdWJsaWMgdXJpOiBzdHJpbmc7XG4gIHB1YmxpYyBjcmVkZW50aWFsczogUmVxdWVzdENyZWRlbnRpYWxzO1xuICBwdWJsaWMgcmVzcG9uc2VIYW5kbGVyOiBSZXNwb25zZUhhbmRsZXI8UlQ+ID0gRGVmYXVsdFJFU1RDbGllbnQuSlNPTlJlc3BvbnNlSGFuZGxlcjtcbiAgcHVibGljIGVycm9yUmVzcG9uc2VIYW5kbGVyOiBFcnJvclJlc3BvbnNlSGFuZGxlcjxFUlQ+ID0gRGVmYXVsdFJFU1RDbGllbnQuRXJyb3JKU09OUmVzcG9uc2VIYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBob3N0OiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgSlNPTiBmb3JtIG9mIHRoZSByZXNwb25zZSB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVzcG9uc2VcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgSlNPTlJlc3BvbnNlSGFuZGxlcjxSVD4ocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSVD4+IHtcbiAgICBsZXQgY2xpZW50UmVzcG9uc2UgPSBuZXcgQ2xpZW50UmVzcG9uc2U8UlQ+KCk7XG5cbiAgICBjbGllbnRSZXNwb25zZS5zdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGxldCB0eXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gICAgaWYgKHR5cGUgJiYgdHlwZS5zdGFydHNXaXRoKFwiYXBwbGljYXRpb24vanNvblwiKSkge1xuICAgICAgY2xpZW50UmVzcG9uc2UucmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaWVudFJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBKU09OIGZvcm0gb2YgdGhlIHJlc3BvbnNlIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSByZXNwb25zZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIHN0YXRpYyBhc3luYyBFcnJvckpTT05SZXNwb25zZUhhbmRsZXI8RVJUPihyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVSVD4+IHtcbiAgICBsZXQgY2xpZW50UmVzcG9uc2UgPSBuZXcgQ2xpZW50UmVzcG9uc2U8RVJUPigpO1xuXG4gICAgY2xpZW50UmVzcG9uc2Uuc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICBsZXQgdHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuICAgIGlmICh0eXBlICYmIHR5cGUuc3RhcnRzV2l0aChcImFwcGxpY2F0aW9uL2pzb25cIikpIHtcbiAgICAgIGNsaWVudFJlc3BvbnNlLmV4Y2VwdGlvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpZW50UmVzcG9uc2U7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIgdXNpbmcgYSBrZXlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgdmFsdWUgb2YgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcmV0dXJucyB7RGVmYXVsdFJFU1RDbGllbnR9XG4gICAqL1xuICB3aXRoQXV0aG9yaXphdGlvbihrZXk6IHN0cmluZyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICBpZiAoa2V5ID09PSBudWxsIHx8IHR5cGVvZiBrZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLndpdGhIZWFkZXIoJ0F1dGhvcml6YXRpb24nLCBrZXkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzZWdtZW50IHRvIHRoZSByZXF1ZXN0IHVyaVxuICAgKi9cbiAgd2l0aFVyaVNlZ21lbnQoc2VnbWVudDogc3RyaW5nIHwgbnVtYmVyKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIGlmIChzZWdtZW50ID09PSBudWxsIHx8IHNlZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmICh0aGlzLnVyaSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy51cmkgPSAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMudXJpLmNoYXJBdCh0aGlzLnVyaS5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICB0aGlzLnVyaSArPSAnLyc7XG4gICAgfVxuICAgIHRoaXMudXJpID0gdGhpcy51cmkgKyBzZWdtZW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVsbCB1cmwgKyBwYXJhbWV0ZXIgbGlzdFxuICAgKi9cbiAgZ2V0RnVsbFVybCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0ICsgdGhpcy51cmkgKyB0aGlzLmdldFF1ZXJ5U3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYm9keSBvZiB0aGUgY2xpZW50IHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBib2R5IFRoZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgcmVxdWVzdCBib2R5IGFzIGZvcm0gZGF0YS5cbiAgICovXG4gIHdpdGhGb3JtRGF0YShib2R5OiBVUkxTZWFyY2hQYXJhbXMpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgY29uc3QgYm9keTIgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIGJvZHkuZm9yRWFjaCgodmFsdWUsIG5hbWUsIHNlYXJjaFBhcmFtcykgPT4ge1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCAmJiB2YWx1ZSAhPSBcIm51bGxcIiAmJiB2YWx1ZSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgYm9keTIuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBib2R5ID0gYm9keTI7XG4gICAgfVxuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGhlYWRlciB0byB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIGtleSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIuXG4gICAqL1xuICB3aXRoSGVhZGVyKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMuaGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYm9keSBvZiB0aGUgY2xpZW50IHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBib2R5IFRoZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgcmVxdWVzdCBib2R5IGFzIEpTT04uXG4gICAqL1xuICB3aXRoSlNPTkJvZHkoYm9keTogb2JqZWN0KTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMuYm9keSA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgIHRoaXMud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAvLyBPbWl0IHRoZSBDb250ZW50LUxlbmd0aCwgdGhpcyBpcyBzZXQgYXV0by1tYWdpY2FsbHkgYnkgdGhlIHJlcXVlc3QgbGlicmFyeVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGh0dHAgbWV0aG9kIGZvciB0aGUgcmVxdWVzdFxuICAgKi9cbiAgd2l0aE1ldGhvZChtZXRob2Q6IHN0cmluZyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB1cmkgb2YgdGhlIHJlcXVlc3RcbiAgICovXG4gIHdpdGhVcmkodXJpOiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy51cmkgPSB1cmk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBwYXJhbWV0ZXJzIHRvIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIsIG1heSBiZSBhIHN0cmluZywgb2JqZWN0IG9yIG51bWJlci5cbiAgICovXG4gIHdpdGhQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMucGFyYW1ldGVyc1tuYW1lXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcmVxdWVzdCdzIGNyZWRlbnRpYWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgQSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZSByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICAgKi9cbiAgd2l0aENyZWRlbnRpYWxzKHZhbHVlOiBSZXF1ZXN0Q3JlZGVudGlhbHMpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5jcmVkZW50aWFscyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2l0aFJlc3BvbnNlSGFuZGxlcihoYW5kbGVyOiBSZXNwb25zZUhhbmRsZXI8UlQ+KTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdpdGhFcnJvclJlc3BvbnNlSGFuZGxlcihoYW5kbGVyOiBFcnJvclJlc3BvbnNlSGFuZGxlcjxFUlQ+KTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMuZXJyb3JSZXNwb25zZUhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgcmVxdWVzdCBhbmQgcmV0dXJuIGEgcHJvbWlzZS4gVGhpcyBwcm9taXNlIHdpbGwgcmVzb2x2ZSBpZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsXG4gICAqIGFuZCByZWplY3Qgb3RoZXJ3aXNlLlxuICAgKi9cbiAgYXN5bmMgZ28oKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSVD4+IHtcbiAgICBjb25zdCBjbGllbnRSZXNwb25zZSA9IG5ldyBDbGllbnRSZXNwb25zZTxSVD4oKTtcblxuICAgIGxldCByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgdGhpcy5nZXRGdWxsVXJsKCksXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgIGJvZHk6IHRoaXMuYm9keSBhcyBCb2R5SW5pdCxcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgKENyZWRlbnRpYWxzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIE5vZGVKUylcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiB0aGlzLmNyZWRlbnRpYWxzLFxuICAgICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVzcG9uc2VIYW5kbGVyKHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGF3YWl0IHRoaXMuZXJyb3JSZXNwb25zZUhhbmRsZXIocmVzcG9uc2UpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDbGllbnRSZXNwb25zZSkge1xuICAgICAgICB0aHJvdyBlcnJvcjsgLy8gRG9uJ3QgY2F0Y2ggYSBDbGllbnRSZXNwb25zZSAod2Ugd2FudCB0aGlzIHRvIHRyaWdnZXIgdGhlIGNhdGNoIG9mIHRoZSBwcm9taXNlXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZSkgeyAvLyBUcnkgdG8gcmVjb3ZlciB0aGUgcmVzcG9uc2Ugc3RhdHVzXG4gICAgICAgIGNsaWVudFJlc3BvbnNlLnN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICB9XG4gICAgICBjbGllbnRSZXNwb25zZS5leGNlcHRpb24gPSBlcnJvcjtcblxuICAgICAgdGhyb3cgY2xpZW50UmVzcG9uc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRRdWVyeVN0cmluZygpIHtcbiAgICBsZXQgcXVlcnlTdHJpbmcgPSAnJztcbiAgICBjb25zdCBhcHBlbmRQYXJhbSA9IChrZXk6IHN0cmluZywgcGFyYW06IHN0cmluZykgPT4ge1xuICAgICAgcXVlcnlTdHJpbmcgKz0gKHF1ZXJ5U3RyaW5nLmxlbmd0aCA9PT0gMCkgPyAnPycgOiAnJic7XG4gICAgICBxdWVyeVN0cmluZyArPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbSk7XG4gICAgfVxuICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnBhcmFtZXRlcnMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wYXJhbWV0ZXJzW2tleV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaCh2YWwgPT4gYXBwZW5kUGFyYW0oa2V5LCB2YWwpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXBwZW5kUGFyYW0oa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgfVxufVxuIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IElSRVNUQ2xpZW50IGZyb20gXCIuL0lSRVNUQ2xpZW50XCI7XG5pbXBvcnQgRGVmYXVsdFJFU1RDbGllbnQgZnJvbSBcIi4vRGVmYXVsdFJFU1RDbGllbnRcIjtcbmltcG9ydCBJUkVTVENsaWVudEJ1aWxkZXIgZnJvbSBcIi4vSVJFU1RDbGllbnRCdWlsZGVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmF1bHRSRVNUQ2xpZW50QnVpbGRlciBpbXBsZW1lbnRzIElSRVNUQ2xpZW50QnVpbGRlciB7XG4gIGJ1aWxkPFJULCBFUlQ+KGhvc3Q6IHN0cmluZyk6IElSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICByZXR1cm4gbmV3IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+KGhvc3QpO1xuICB9XG59XG4iLCIvKlxuKiBDb3B5cmlnaHQgKGMpIDIwMTktMjAyNiwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuKlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4qIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKlxuKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4qIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4qIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4qIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgSVJFU1RDbGllbnQgZnJvbSBcIi4vSVJFU1RDbGllbnRcIlxuaW1wb3J0IERlZmF1bHRSRVNUQ2xpZW50QnVpbGRlciBmcm9tIFwiLi9EZWZhdWx0UkVTVENsaWVudEJ1aWxkZXJcIjtcbmltcG9ydCBJUkVTVENsaWVudEJ1aWxkZXIgZnJvbSBcIi4vSVJFU1RDbGllbnRCdWlsZGVyXCI7XG5pbXBvcnQgQ2xpZW50UmVzcG9uc2UgZnJvbSBcIi4vQ2xpZW50UmVzcG9uc2VcIjtcbmltcG9ydCB7UmVxdWVzdENyZWRlbnRpYWxzfSBmcm9tIFwibm9kZS1mZXRjaFwiO1xuaW1wb3J0IHtVUkxTZWFyY2hQYXJhbXN9IGZyb20gXCJ1cmxcIjtcblxuZXhwb3J0IGNsYXNzIEZ1c2lvbkF1dGhDbGllbnQge1xuICBwdWJsaWMgY2xpZW50QnVpbGRlcjogSVJFU1RDbGllbnRCdWlsZGVyID0gbmV3IERlZmF1bHRSRVNUQ2xpZW50QnVpbGRlcigpO1xuICBwdWJsaWMgY3JlZGVudGlhbHM6IFJlcXVlc3RDcmVkZW50aWFscztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYXBpS2V5OiBzdHJpbmcsXG4gICAgcHVibGljIGhvc3Q6IHN0cmluZyxcbiAgICBwdWJsaWMgdGVuYW50SWQ/OiBzdHJpbmcsXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRlbmFudCBpZCwgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBYLUZ1c2lvbkF1dGgtVGVuYW50SWQgaGVhZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IHRlbmFudElkIFRoZSB2YWx1ZSBvZiB0aGUgWC1GdXNpb25BdXRoLVRlbmFudElkIGhlYWRlci5cbiAgICogQHJldHVybnMge0Z1c2lvbkF1dGhDbGllbnR9XG4gICAqL1xuICBzZXRUZW5hbnRJZCh0ZW5hbnRJZDogc3RyaW5nIHwgbnVsbCk6IEZ1c2lvbkF1dGhDbGllbnQge1xuICAgIHRoaXMudGVuYW50SWQgPSB0ZW5hbnRJZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHdoZXRoZXIgYW5kIGhvdyBjb29raWVzIHdpbGwgYmUgc2VudCB3aXRoIGVhY2ggcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIGFuZCBob3cgY29va2llcyB3aWxsIGJlIHNlbnQuXG4gICAqIEByZXR1cm5zIHtGdXNpb25BdXRoQ2xpZW50fVxuICAgKi9cbiAgc2V0UmVxdWVzdENyZWRlbnRpYWxzKHZhbHVlOiBSZXF1ZXN0Q3JlZGVudGlhbHMpOiBGdXNpb25BdXRoQ2xpZW50IHtcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgYW4gYWN0aW9uIG9uIGEgdXNlci4gVGhlIHVzZXIgYmVpbmcgYWN0aW9uZWQgaXMgY2FsbGVkIHRoZSBcImFjdGlvbmVlXCIgYW5kIHRoZSB1c2VyIHRha2luZyB0aGUgYWN0aW9uIGlzIGNhbGxlZCB0aGVcbiAgICogXCJhY3Rpb25lclwiLiBCb3RoIHVzZXIgaWRzIGFyZSByZXF1aXJlZCBpbiB0aGUgcmVxdWVzdCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7QWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgYWN0aW9uIHJlcXVlc3QgdGhhdCBpbmNsdWRlcyBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY3Rpb24gYmVpbmcgdGFrZW4gaW5jbHVkaW5nXG4gICAqICAgIHRoZSBJZCBvZiB0aGUgYWN0aW9uLCBhbnkgb3B0aW9ucyBhbmQgdGhlIGR1cmF0aW9uIChpZiBhcHBsaWNhYmxlKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGFjdGlvblVzZXIocmVxdWVzdDogQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlcyB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yIHVzaW5nIGEgbGljZW5zZSBJZCBhbmQgb3B0aW9uYWxseSBhIGxpY2Vuc2UgdGV4dCAoZm9yIGFpci1nYXBwZWQgZGVwbG95bWVudHMpXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RvclJlcXVlc3R9IHJlcXVlc3QgQW4gb3B0aW9uYWwgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBsaWNlbnNlIHRleHQgdG8gYWN0aXZhdGUgUmVhY3RvciAodXNlZnVsIGZvciBhaXItZ2FwIGRlcGxveW1lbnRzIG9mIEZ1c2lvbkF1dGgpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBhY3RpdmF0ZVJlYWN0b3IocmVxdWVzdDogUmVhY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3InKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgdXNlciB0byBhbiBleGlzdGluZyBmYW1pbHkuIFRoZSBmYW1pbHkgSWQgbXVzdCBiZSBzcGVjaWZpZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmFtaWx5SWQgVGhlIElkIG9mIHRoZSBmYW1pbHkuXG4gICAqIEBwYXJhbSB7RmFtaWx5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIHVzZXIgdG8gYWRkIHRvIHRoZSBmYW1pbHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj59XG4gICAqL1xuICBhZGRVc2VyVG9GYW1pbHkoZmFtaWx5SWQ6IFVVSUQsIHJlcXVlc3Q6IEZhbWlseVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZhbWlseVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmFtaWx5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQXBwcm92ZSBhIGRldmljZSBncmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IChPcHRpb25hbCkgVGhlIGNsaWVudCBzZWNyZXQuIFRoaXMgdmFsdWUgd2lsbCBiZSByZXF1aXJlZCBpZiBjbGllbnQgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuIFRoZSBhY2Nlc3MgdG9rZW4gdXNlZCB0byBpZGVudGlmeSB0aGUgdXNlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJfY29kZSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPERldmljZUFwcHJvdmFsUmVzcG9uc2U+Pn1cbiAgICovXG4gIGFwcHJvdmVEZXZpY2UoY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgdXNlcl9jb2RlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPERldmljZUFwcHJvdmFsUmVzcG9uc2U+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCd0b2tlbicsIHRva2VuKTtcbiAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgdXNlcl9jb2RlKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxEZXZpY2VBcHByb3ZhbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvZGV2aWNlL2FwcHJvdmUnKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIGEgZGV2aWNlIGdyYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0RldmljZUFwcHJvdmFsUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgY29udGFpbmluZyB0aGUgZGV2aWNlIGFwcHJvdmFsIGluZm9ybWF0aW9uIGFuZCBvcHRpb25hbCB0ZW5hbnRJZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RGV2aWNlQXBwcm92YWxSZXNwb25zZT4+fVxuICAgKi9cbiAgYXBwcm92ZURldmljZVdpdGhSZXF1ZXN0KHJlcXVlc3Q6IERldmljZUFwcHJvdmFsUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RGV2aWNlQXBwcm92YWxSZXNwb25zZT4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGlmIChyZXF1ZXN0LmNsaWVudF9pZCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNsaWVudF9pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgcmVxdWVzdC5jbGllbnRfaWQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5jbGllbnRfc2VjcmV0ICE9PSBudWxsICYmIHJlcXVlc3QuY2xpZW50X3NlY3JldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIHJlcXVlc3QuY2xpZW50X3NlY3JldCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnRlbmFudElkICE9PSBudWxsICYmIHJlcXVlc3QudGVuYW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3RlbmFudElkJywgcmVxdWVzdC50ZW5hbnRJZC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QudG9rZW4gIT09IG51bGwgJiYgcmVxdWVzdC50b2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgndG9rZW4nLCByZXF1ZXN0LnRva2VuKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QudXNlcl9jb2RlICE9PSBudWxsICYmIHJlcXVlc3QudXNlcl9jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCByZXF1ZXN0LnVzZXJfY29kZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXJ0PERldmljZUFwcHJvdmFsUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9kZXZpY2UvYXBwcm92ZScpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIHVzZXIgYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjdGlvbklkIFRoZSBhY3Rpb24gSWQgb2YgdGhlIGFjdGlvbiB0byBjYW5jZWwuXG4gICAqIEBwYXJhbSB7QWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgYWN0aW9uIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhbmNlbGxhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNhbmNlbEFjdGlvbihhY3Rpb25JZDogVVVJRCwgcmVxdWVzdDogQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIGEgdXNlcidzIHBhc3N3b3JkIHVzaW5nIHRoZSBjaGFuZ2UgcGFzc3dvcmQgSWQuIFRoaXMgdXN1YWxseSBvY2N1cnMgYWZ0ZXIgYW4gZW1haWwgaGFzIGJlZW4gc2VudCB0byB0aGUgdXNlclxuICAgKiBhbmQgdGhleSBjbGlja2VkIG9uIGEgbGluayB0byByZXNldCB0aGVpciBwYXNzd29yZC5cbiAgICogXG4gICAqIEFzIG9mIHZlcnNpb24gMS4zMi4yLCBwcmVmZXIgc2VuZGluZyB0aGUgY2hhbmdlUGFzc3dvcmRJZCBpbiB0aGUgcmVxdWVzdCBib2R5LiBUbyBkbyB0aGlzLCBvbWl0IHRoZSBmaXJzdCBwYXJhbWV0ZXIsIGFuZCBzZXRcbiAgICogdGhlIHZhbHVlIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFuZ2VQYXNzd29yZElkIFRoZSBjaGFuZ2UgcGFzc3dvcmQgSWQgdXNlZCB0byBmaW5kIHRoZSB1c2VyLiBUaGlzIHZhbHVlIGlzIGdlbmVyYXRlZCBieSBGdXNpb25BdXRoIG9uY2UgdGhlIGNoYW5nZSBwYXNzd29yZCB3b3JrZmxvdyBoYXMgYmVlbiBpbml0aWF0ZWQuXG4gICAqIEBwYXJhbSB7Q2hhbmdlUGFzc3dvcmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlPj59XG4gICAqL1xuICBjaGFuZ2VQYXNzd29yZChjaGFuZ2VQYXNzd29yZElkOiBzdHJpbmcsIHJlcXVlc3Q6IENoYW5nZVBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY2hhbmdlUGFzc3dvcmRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyBhIHVzZXIncyBwYXNzd29yZCB1c2luZyB0aGVpciBhY2Nlc3MgdG9rZW4gKEpXVCkgaW5zdGVhZCBvZiB0aGUgY2hhbmdlUGFzc3dvcmRJZFxuICAgKiBBIGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBtZXRob2Qgd2lsbCBiZSBpZiB5b3Ugd2FudCB0byBhbGxvdyB0aGUgdXNlciB0byBjaGFuZ2UgdGhlaXIgb3duIHBhc3N3b3JkLlxuICAgKiBcbiAgICogUmVtZW1iZXIgdG8gc2VuZCByZWZyZXNoVG9rZW4gaW4gdGhlIHJlcXVlc3QgYm9keSBpZiB5b3Ugd2FudCB0byBnZXQgYSBuZXcgcmVmcmVzaCB0b2tlbiB3aGVuIGxvZ2luIHVzaW5nIHRoZSByZXR1cm5lZCBvbmVUaW1lUGFzc3dvcmQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHBhcmFtIHtDaGFuZ2VQYXNzd29yZFJlcXVlc3R9IHJlcXVlc3QgVGhlIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNoYW5nZSB0aGUgcGFzc3dvcmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENoYW5nZVBhc3N3b3JkUmVzcG9uc2U+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBjaGFuZ2VQYXNzd29yZFVzaW5nSldULCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIGNoYW5nZVBhc3N3b3JkQnlKV1QoZW5jb2RlZEpXVDogc3RyaW5nLCByZXF1ZXN0OiBDaGFuZ2VQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENoYW5nZVBhc3N3b3JkUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgYSB1c2VyJ3MgcGFzc3dvcmQgdXNpbmcgdGhlaXIgaWRlbnRpdHkgKGxvZ2luSWQgYW5kIHBhc3N3b3JkKS4gVXNpbmcgYSBsb2dpbklkIGluc3RlYWQgb2YgdGhlIGNoYW5nZVBhc3N3b3JkSWRcbiAgICogYnlwYXNzZXMgdGhlIGVtYWlsIHZlcmlmaWNhdGlvbiBhbmQgYWxsb3dzIGEgcGFzc3dvcmQgdG8gYmUgY2hhbmdlZCBkaXJlY3RseSB3aXRob3V0IGZpcnN0IGNhbGxpbmcgdGhlICNmb3Jnb3RQYXNzd29yZFxuICAgKiBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2hhbmdlUGFzc3dvcmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGFuZ2VQYXNzd29yZEJ5SWRlbnRpdHkocmVxdWVzdDogQ2hhbmdlUGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgYSB1c2VyJ3MgcGFzc3dvcmQgdXNpbmcgdGhlaXIgYWNjZXNzIHRva2VuIChKV1QpIGluc3RlYWQgb2YgdGhlIGNoYW5nZVBhc3N3b3JkSWRcbiAgICogQSBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgbWV0aG9kIHdpbGwgYmUgaWYgeW91IHdhbnQgdG8gYWxsb3cgdGhlIHVzZXIgdG8gY2hhbmdlIHRoZWlyIG93biBwYXNzd29yZC5cbiAgICogXG4gICAqIFJlbWVtYmVyIHRvIHNlbmQgcmVmcmVzaFRva2VuIGluIHRoZSByZXF1ZXN0IGJvZHkgaWYgeW91IHdhbnQgdG8gZ2V0IGEgbmV3IHJlZnJlc2ggdG9rZW4gd2hlbiBsb2dpbiB1c2luZyB0aGUgcmV0dXJuZWQgb25lVGltZVBhc3N3b3JkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEBwYXJhbSB7Q2hhbmdlUGFzc3dvcmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlPj59XG4gICAqL1xuICBjaGFuZ2VQYXNzd29yZFVzaW5nSldUKGVuY29kZWRKV1Q6IHN0cmluZywgcmVxdWVzdDogQ2hhbmdlUGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPENoYW5nZVBhc3N3b3JkUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgVG9rZW4gYnkgY29tcGxldGluZyBhIFR3by1GYWN0b3IgU3RlcC1VcCBhdXRoZW50aWNhdGlvbi5cbiAgICogXG4gICAqIEFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDAwIHdpdGggYSBnZW5lcmFsIGVycm9yIGNvZGUgb2YgW1RydXN0VG9rZW5SZXF1aXJlZF0gaW5kaWNhdGVzIHRoYXQgYSBUcnVzdCBUb2tlbiBpcyByZXF1aXJlZCB0byBtYWtlIGEgUE9TVCByZXF1ZXN0IHRvIHRoaXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgY2hhbmdlIHBhc3N3b3JkIElkIHVzZWQgdG8gZmluZCB0aGUgdXNlci4gVGhpcyB2YWx1ZSBpcyBnZW5lcmF0ZWQgYnkgRnVzaW9uQXV0aCBvbmNlIHRoZSBjaGFuZ2UgcGFzc3dvcmQgd29ya2Zsb3cgaGFzIGJlZW4gaW5pdGlhdGVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGVja0NoYW5nZVBhc3N3b3JkVXNpbmdJZChjaGFuZ2VQYXNzd29yZElkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNoYW5nZVBhc3N3b3JkSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIElkIGluIG9yZGVyIHRvIGNvbXBsZXRlIGEgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QuXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBlbmFibGVkIFR3by1GYWN0b3IgYXV0aGVudGljYXRpb24sIGJlZm9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBDaGFuZ2UgUGFzc3dvcmQgQVBJIHRvIGNoYW5nZVxuICAgKiB5b3VyIHBhc3N3b3JkLCB5b3UgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFuZ2VQYXNzd29yZElkIFRoZSBjaGFuZ2UgcGFzc3dvcmQgSWQgdXNlZCB0byBmaW5kIHRoZSB1c2VyLiBUaGlzIHZhbHVlIGlzIGdlbmVyYXRlZCBieSBGdXNpb25BdXRoIG9uY2UgdGhlIGNoYW5nZSBwYXNzd29yZCB3b3JrZmxvdyBoYXMgYmVlbiBpbml0aWF0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpcEFkZHJlc3MgKE9wdGlvbmFsKSBJUCBhZGRyZXNzIG9mIHRoZSB1c2VyIGNoYW5naW5nIHRoZWlyIHBhc3N3b3JkLiBUaGlzIGlzIHVzZWQgZm9yIE1GQSByaXNrIGFzc2Vzc21lbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNoZWNrQ2hhbmdlUGFzc3dvcmRVc2luZ0lkQW5kSVBBZGRyZXNzKGNoYW5nZVBhc3N3b3JkSWQ6IHN0cmluZywgaXBBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNoYW5nZVBhc3N3b3JkSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpcEFkZHJlc3MnLCBpcEFkZHJlc3MpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIElkIGluIG9yZGVyIHRvIGNvbXBsZXRlIGEgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QuXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBlbmFibGVkIFR3by1GYWN0b3IgYXV0aGVudGljYXRpb24sIGJlZm9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBDaGFuZ2UgUGFzc3dvcmQgQVBJIHRvIGNoYW5nZVxuICAgKiB5b3VyIHBhc3N3b3JkLCB5b3UgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nSldUKGVuY29kZWRKV1Q6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIG11c3Qgb2J0YWluIGEgVHJ1c3QgVG9rZW4gSWQgaW4gb3JkZXIgdG8gY29tcGxldGUgYSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdC5cbiAgICogV2hlbiBhIHVzZXIgaGFzIGVuYWJsZWQgVHdvLUZhY3RvciBhdXRoZW50aWNhdGlvbiwgYmVmb3JlIHlvdSBhcmUgYWxsb3dlZCB0byB1c2UgdGhlIENoYW5nZSBQYXNzd29yZCBBUEkgdG8gY2hhbmdlXG4gICAqIHlvdXIgcGFzc3dvcmQsIHlvdSBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIGJ5IGNvbXBsZXRpbmcgYSBUd28tRmFjdG9yIFN0ZXAtVXAgYXV0aGVudGljYXRpb24uXG4gICAqIFxuICAgKiBBbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQwMCB3aXRoIGEgZ2VuZXJhbCBlcnJvciBjb2RlIG9mIFtUcnVzdFRva2VuUmVxdWlyZWRdIGluZGljYXRlcyB0aGF0IGEgVHJ1c3QgVG9rZW4gaXMgcmVxdWlyZWQgdG8gbWFrZSBhIFBPU1QgcmVxdWVzdCB0byB0aGlzIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaXBBZGRyZXNzIChPcHRpb25hbCkgSVAgYWRkcmVzcyBvZiB0aGUgdXNlciBjaGFuZ2luZyB0aGVpciBwYXNzd29yZC4gVGhpcyBpcyB1c2VkIGZvciBNRkEgcmlzayBhc3Nlc3NtZW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGVja0NoYW5nZVBhc3N3b3JkVXNpbmdKV1RBbmRJUEFkZHJlc3MoZW5jb2RlZEpXVDogc3RyaW5nLCBpcEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lwQWRkcmVzcycsIGlwQWRkcmVzcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBsb2dpbklkIChlbWFpbCBvciB1c2VybmFtZSkgb2YgdGhlIFVzZXIgdGhhdCB5b3UgaW50ZW5kIHRvIGNoYW5nZSB0aGUgcGFzc3dvcmQgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGVja0NoYW5nZVBhc3N3b3JkVXNpbmdMb2dpbklkKGxvZ2luSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbG9naW5JZCcsIGxvZ2luSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBtdXN0IG9idGFpbiBhIFRydXN0IFJlcXVlc3QgSWQgaW4gb3JkZXIgdG8gY29tcGxldGUgYSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdC5cbiAgICogV2hlbiBhIHVzZXIgaGFzIGVuYWJsZWQgVHdvLUZhY3RvciBhdXRoZW50aWNhdGlvbiwgYmVmb3JlIHlvdSBhcmUgYWxsb3dlZCB0byB1c2UgdGhlIENoYW5nZSBQYXNzd29yZCBBUEkgdG8gY2hhbmdlXG4gICAqIHlvdXIgcGFzc3dvcmQsIHlvdSBtdXN0IG9idGFpbiBhIFRydXN0IFJlcXVlc3QgSWQgYnkgY29tcGxldGluZyBhIFR3by1GYWN0b3IgU3RlcC1VcCBhdXRoZW50aWNhdGlvbi5cbiAgICogXG4gICAqIEFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDAwIHdpdGggYSBnZW5lcmFsIGVycm9yIGNvZGUgb2YgW1RydXN0VG9rZW5SZXF1aXJlZF0gaW5kaWNhdGVzIHRoYXQgYSBUcnVzdCBUb2tlbiBpcyByZXF1aXJlZCB0byBtYWtlIGEgUE9TVCByZXF1ZXN0IHRvIHRoaXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9naW5JZCBUaGUgbG9naW5JZCAoZW1haWwgb3IgdXNlcm5hbWUpIG9mIHRoZSBVc2VyIHRoYXQgeW91IGludGVuZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkIGZvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlwQWRkcmVzcyAoT3B0aW9uYWwpIElQIGFkZHJlc3Mgb2YgdGhlIHVzZXIgY2hhbmdpbmcgdGhlaXIgcGFzc3dvcmQuIFRoaXMgaXMgdXNlZCBmb3IgTUZBIHJpc2sgYXNzZXNzbWVudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nTG9naW5JZEFuZElQQWRkcmVzcyhsb2dpbklkOiBzdHJpbmcsIGlwQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lwQWRkcmVzcycsIGlwQWRkcmVzcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBsb2dpbklkIG9mIHRoZSBVc2VyIHRoYXQgeW91IGludGVuZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkIGZvci5cbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmc+fSBsb2dpbklkVHlwZXMgVGhlIGlkZW50aXR5IHR5cGVzIHRoYXQgRnVzaW9uQXV0aCB3aWxsIGNvbXBhcmUgdGhlIGxvZ2luSWQgdG8uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNoZWNrQ2hhbmdlUGFzc3dvcmRVc2luZ0xvZ2luSWRBbmRMb2dpbklkVHlwZXMobG9naW5JZDogc3RyaW5nLCBsb2dpbklkVHlwZXM6IEFycmF5PFN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWQnLCBsb2dpbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbG9naW5JZFR5cGVzJywgbG9naW5JZFR5cGVzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgbXVzdCBvYnRhaW4gYSBUcnVzdCBSZXF1ZXN0IElkIGluIG9yZGVyIHRvIGNvbXBsZXRlIGEgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QuXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBlbmFibGVkIFR3by1GYWN0b3IgYXV0aGVudGljYXRpb24sIGJlZm9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBDaGFuZ2UgUGFzc3dvcmQgQVBJIHRvIGNoYW5nZVxuICAgKiB5b3VyIHBhc3N3b3JkLCB5b3UgbXVzdCBvYnRhaW4gYSBUcnVzdCBSZXF1ZXN0IElkIGJ5IGNvbXBsZXRpbmcgYSBUd28tRmFjdG9yIFN0ZXAtVXAgYXV0aGVudGljYXRpb24uXG4gICAqIFxuICAgKiBBbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQwMCB3aXRoIGEgZ2VuZXJhbCBlcnJvciBjb2RlIG9mIFtUcnVzdFRva2VuUmVxdWlyZWRdIGluZGljYXRlcyB0aGF0IGEgVHJ1c3QgVG9rZW4gaXMgcmVxdWlyZWQgdG8gbWFrZSBhIFBPU1QgcmVxdWVzdCB0byB0aGlzIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2luSWQgVGhlIGxvZ2luSWQgb2YgdGhlIFVzZXIgdGhhdCB5b3UgaW50ZW5kIHRvIGNoYW5nZSB0aGUgcGFzc3dvcmQgZm9yLlxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZz59IGxvZ2luSWRUeXBlcyBUaGUgaWRlbnRpdHkgdHlwZXMgdGhhdCBGdXNpb25BdXRoIHdpbGwgY29tcGFyZSB0aGUgbG9naW5JZCB0by5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlwQWRkcmVzcyAoT3B0aW9uYWwpIElQIGFkZHJlc3Mgb2YgdGhlIHVzZXIgY2hhbmdpbmcgdGhlaXIgcGFzc3dvcmQuIFRoaXMgaXMgdXNlZCBmb3IgTUZBIHJpc2sgYXNzZXNzbWVudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nTG9naW5JZEFuZExvZ2luSWRUeXBlc0FuZElQQWRkcmVzcyhsb2dpbklkOiBzdHJpbmcsIGxvZ2luSWRUeXBlczogQXJyYXk8U3RyaW5nPiwgaXBBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWQnLCBsb2dpbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbG9naW5JZFR5cGVzJywgbG9naW5JZFR5cGVzKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaXBBZGRyZXNzJywgaXBBZGRyZXNzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGEgQ2xpZW50IENyZWRlbnRpYWxzIGdyYW50IHJlcXVlc3QgdG8gb2J0YWluIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggRW50aXR5IGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuXG4gICAqICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gQmFzaWMgQXV0aG9yaXphdGlvbiBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGlzIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IChPcHRpb25hbCkgVGhlIGNsaWVudCBzZWNyZXQgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiAgICBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIEJhc2ljIEF1dGhvcml6YXRpb24gaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKE9wdGlvbmFsKSBUaGlzIHBhcmFtZXRlciBpcyB1c2VkIHRvIGluZGljYXRlIHdoaWNoIHRhcmdldCBlbnRpdHkgeW91IGFyZSByZXF1ZXN0aW5nIGFjY2Vzcy4gVG8gcmVxdWVzdCBhY2Nlc3MgdG8gYW4gZW50aXR5LCB1c2UgdGhlIGZvcm1hdCB0YXJnZXQtZW50aXR5OiZsdDt0YXJnZXQtZW50aXR5LWlkJmd0OzombHQ7cm9sZXMmZ3Q7LiBSb2xlcyBhcmUgYW4gb3B0aW9uYWwgY29tbWEgc2VwYXJhdGVkIGxpc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBjbGllbnRDcmVkZW50aWFsc0dyYW50KGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHNjb3BlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsICdjbGllbnRfY3JlZGVudGlhbHMnKTtcbiAgICBib2R5LmFwcGVuZCgnc2NvcGUnLCBzY29wZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGEgQ2xpZW50IENyZWRlbnRpYWxzIGdyYW50IHJlcXVlc3QgdG8gb2J0YWluIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtDbGllbnRDcmVkZW50aWFsc0dyYW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgY2xpZW50IGNyZWRlbnRpYWxzIGdyYW50IHJlcXVlc3QgY29udGFpbmluZyBjbGllbnQgYXV0aGVudGljYXRpb24sIHNjb3BlIGFuZCBvcHRpb25hbCB0ZW5hbnRJZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGNsaWVudENyZWRlbnRpYWxzR3JhbnRXaXRoUmVxdWVzdChyZXF1ZXN0OiBDbGllbnRDcmVkZW50aWFsc0dyYW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBpZiAocmVxdWVzdC5jbGllbnRfaWQgIT09IG51bGwgJiYgcmVxdWVzdC5jbGllbnRfaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIHJlcXVlc3QuY2xpZW50X2lkKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QuY2xpZW50X3NlY3JldCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNsaWVudF9zZWNyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCByZXF1ZXN0LmNsaWVudF9zZWNyZXQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5ncmFudF90eXBlICE9PSBudWxsICYmIHJlcXVlc3QuZ3JhbnRfdHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsIHJlcXVlc3QuZ3JhbnRfdHlwZSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnNjb3BlICE9PSBudWxsICYmIHJlcXVlc3Quc2NvcGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgcmVxdWVzdC5zY29wZSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnRlbmFudElkICE9PSBudWxsICYmIHJlcXVlc3QudGVuYW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3RlbmFudElkJywgcmVxdWVzdC50ZW5hbnRJZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNvbW1lbnQgdG8gdGhlIHVzZXIncyBhY2NvdW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1VzZXJDb21tZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB1c2VyIGNvbW1lbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb21tZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNvbW1lbnRPblVzZXIocmVxdWVzdDogVXNlckNvbW1lbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29tbWVudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb21tZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbW1lbnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZXMgdmVyaWZpY2F0aW9uIG9mIGFuIGlkZW50aXR5IHVzaW5nIHZlcmlmaWNhdGlvbiBjb2RlcyBmcm9tIHRoZSBWZXJpZnkgU3RhcnQgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeUNvbXBsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgaWRlbnRpdHkgdmVyaWZ5IGNvbXBsZXRlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gdmVyaWZ5IHRoZSBpZGVudGl0eS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5Q29tcGxldGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY29tcGxldGVWZXJpZnlJZGVudGl0eShyZXF1ZXN0OiBWZXJpZnlDb21wbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUNvbXBsZXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyaWZ5Q29tcGxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5L3ZlcmlmeS9jb21wbGV0ZScpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbnkgYnkgdmFsaWRhdGluZyB0aGUgc2lnbmF0dXJlIGFnYWluc3QgdGhlIHByZXZpb3VzbHkgZ2VuZXJhdGVkIGNoYWxsZW5nZSB3aXRob3V0IGxvZ2dpbmcgdGhlIHVzZXIgaW5cbiAgICpcbiAgICogQHBhcmFtIHtXZWJBdXRobkxvZ2luUmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3IgY29tcGxldGluZyB0aGUgYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5Bc3NlcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgY29tcGxldGVXZWJBdXRobkFzc2VydGlvbihyZXF1ZXN0OiBXZWJBdXRobkxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5Bc3NlcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxXZWJBdXRobkFzc2VydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vYXNzZXJ0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgYSBXZWJBdXRobiBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueSBieSB2YWxpZGF0aW5nIHRoZSBzaWduYXR1cmUgYWdhaW5zdCB0aGUgcHJldmlvdXNseSBnZW5lcmF0ZWQgY2hhbGxlbmdlIGFuZCB0aGVuIGxvZ2luIHRoZSB1c2VyIGluXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViQXV0aG5Mb2dpblJlcXVlc3R9IHJlcXVlc3QgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBuZWNlc3NhcnkgZm9yIGNvbXBsZXRpbmcgdGhlIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNvbXBsZXRlV2ViQXV0aG5Mb2dpbihyZXF1ZXN0OiBXZWJBdXRobkxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueSBieSB2YWxpZGF0aW5nIHRoZSBjbGllbnQgcmVxdWVzdCBhbmQgc2F2aW5nIHRoZSBuZXcgY3JlZGVudGlhbFxuICAgKlxuICAgKiBAcGFyYW0ge1dlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlcXVlc3R9IHJlcXVlc3QgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBuZWNlc3NhcnkgZm9yIGNvbXBsZXRpbmcgdGhlIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY29tcGxldGVXZWJBdXRoblJlZ2lzdHJhdGlvbihyZXF1ZXN0OiBXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuL3JlZ2lzdGVyL2NvbXBsZXRlJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBBUEkga2V5LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhIHVuaXF1ZSBJZCBmb3IgdGhlIGtleSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogYW4gQVBJIGtleSBjYW4gb25seSBiZSBjcmVhdGVkIHdpdGggZXF1YWwgb3IgbGVzc2VyIGF1dGhvcml0eS4gQW4gQVBJIGtleSBjYW5ub3QgY3JlYXRlIGFub3RoZXIgQVBJIGtleSB1bmxlc3MgaXQgaXMgZ3JhbnRlZCBcbiAgICogdG8gdGhhdCBBUEkga2V5LlxuICAgKiBcbiAgICogSWYgYW4gQVBJIGtleSBpcyBsb2NrZWQgdG8gYSB0ZW5hbnQsIGl0IGNhbiBvbmx5IGNyZWF0ZSBBUEkgS2V5cyBmb3IgdGhhdCBzYW1lIHRlbmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgSWQgb2YgdGhlIEFQSSBrZXkuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gSWQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7QVBJS2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjcmVhdGUgdGhlIEFQSUtleS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUFQSUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogQVBJS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QVBJS2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGFwcGxpY2F0aW9uLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGFwcGxpY2F0aW9uLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgSWQgdG8gdXNlIGZvciB0aGUgYXBwbGljYXRpb24uIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgYXBwbGljYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyByb2xlIGZvciBhbiBhcHBsaWNhdGlvbi4gWW91IG11c3Qgc3BlY2lmeSB0aGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHlvdSBhcmUgY3JlYXRpbmcgdGhlIHJvbGUgZm9yLlxuICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHJvbGUgaW5zaWRlIHRoZSBBcHBsaWNhdGlvblJvbGUgb2JqZWN0IGl0c2VsZiwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gY3JlYXRlIHRoZSByb2xlIG9uLlxuICAgKiBAcGFyYW0ge1VVSUR9IHJvbGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgcm9sZS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBhcHBsaWNhdGlvbiByb2xlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVBcHBsaWNhdGlvblJvbGUoYXBwbGljYXRpb25JZDogVVVJRCwgcm9sZUlkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInJvbGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHJvbGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhdWRpdCBsb2cgd2l0aCB0aGUgbWVzc2FnZSBhbmQgdXNlciBuYW1lICh1c3VhbGx5IGFuIGVtYWlsKS4gQXVkaXQgbG9ncyBzaG91bGQgYmUgd3JpdHRlbiBhbnl0aW1lIHlvdVxuICAgKiBtYWtlIGNoYW5nZXMgdG8gdGhlIEZ1c2lvbkF1dGggZGF0YWJhc2UuIFdoZW4gdXNpbmcgdGhlIEZ1c2lvbkF1dGggQXBwIHdlYiBpbnRlcmZhY2UsIGFueSBjaGFuZ2VzIGFyZSBhdXRvbWF0aWNhbGx5XG4gICAqIHdyaXR0ZW4gdG8gdGhlIGF1ZGl0IGxvZy4gSG93ZXZlciwgaWYgeW91IGFyZSBhY2Nlc3NpbmcgdGhlIEFQSSwgeW91IG11c3Qgd3JpdGUgdGhlIGF1ZGl0IGxvZ3MgeW91cnNlbGYuXG4gICAqXG4gICAqIEBwYXJhbSB7QXVkaXRMb2dSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGF1ZGl0IGxvZyBlbnRyeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXVkaXRMb2dSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQXVkaXRMb2cocmVxdWVzdDogQXVkaXRMb2dSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEF1ZGl0TG9nUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vYXVkaXQtbG9nJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNvbm5lY3Rvci4gIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgY29ubmVjdG9yLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbm5lY3RvcklkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgY29ubmVjdG9yLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7Q29ubmVjdG9yUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBjb25uZWN0b3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQsIHJlcXVlc3Q6IENvbm5lY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbm5lY3RvcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdXNlciBjb25zZW50IHR5cGUuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgY29uc2VudCB0eXBlLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGNvbnNlbnQuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBjb25zZW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUNvbnNlbnQoY29uc2VudElkOiBVVUlELCByZXF1ZXN0OiBDb25zZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29uc2VudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtYWlsIHRlbXBsYXRlLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHRlbXBsYXRlLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHRlbXBsYXRlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RW1haWxUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZW1haWwgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW1haWxUZW1wbGF0ZShlbWFpbFRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVtYWlsVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW1haWxUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW1haWxUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEVudGl0eS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBFbnRpdHkuIElmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBFbnRpdHkuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtFbnRpdHlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIEVudGl0eS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUVudGl0eShlbnRpdHlJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBFbnRpdHkgVHlwZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBFbnRpdHkgVHlwZSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBFbnRpdHkgVHlwZS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIEVudGl0eSBUeXBlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUVudGl0eVR5cGUoZW50aXR5VHlwZUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlUeXBlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwZXJtaXNzaW9uIGZvciBhbiBlbnRpdHkgdHlwZS4gWW91IG11c3Qgc3BlY2lmeSB0aGUgSWQgb2YgdGhlIGVudGl0eSB0eXBlIHlvdSBhcmUgY3JlYXRpbmcgdGhlIHBlcm1pc3Npb24gZm9yLlxuICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHBlcm1pc3Npb24gaW5zaWRlIHRoZSBFbnRpdHlUeXBlUGVybWlzc2lvbiBvYmplY3QgaXRzZWxmLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIGVudGl0eSB0eXBlIHRvIGNyZWF0ZSB0aGUgcGVybWlzc2lvbiBvbi5cbiAgICogQHBhcmFtIHtVVUlEfSBwZXJtaXNzaW9uSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHBlcm1pc3Npb24uIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBwZXJtaXNzaW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUVudGl0eVR5cGVQZXJtaXNzaW9uKGVudGl0eVR5cGVJZDogVVVJRCwgcGVybWlzc2lvbklkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlUeXBlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicGVybWlzc2lvblwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocGVybWlzc2lvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZmFtaWx5IHdpdGggdGhlIHVzZXIgSWQgaW4gdGhlIHJlcXVlc3QgYXMgdGhlIG93bmVyIGFuZCBzb2xlIG1lbWJlciBvZiB0aGUgZmFtaWx5LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlXG4gICAqIGZhbWlseSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmYW1pbHlJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGZhbWlseS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0ZhbWlseVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZmFtaWx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRmFtaWx5KGZhbWlseUlkOiBVVUlELCByZXF1ZXN0OiBGYW1pbHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGYW1pbHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZhbWlseUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZm9ybS4gIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgZm9ybSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmb3JtSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBmb3JtLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7Rm9ybVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZm9ybS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVGb3JtKGZvcm1JZDogVVVJRCwgcmVxdWVzdDogRm9ybVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZvcm1JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZvcm0gZmllbGQuICBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGZvcm0sIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmllbGRJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGZvcm0gZmllbGQuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtGb3JtRmllbGRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGZvcm0gZmllbGQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVGb3JtRmllbGQoZmllbGRJZDogVVVJRCwgcmVxdWVzdDogRm9ybUZpZWxkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybUZpZWxkUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtL2ZpZWxkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZpZWxkSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBncm91cC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBncm91cCwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBncm91cElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgZ3JvdXAuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtHcm91cFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZ3JvdXAuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUdyb3VwKGdyb3VwSWQ6IFVVSUQsIHJlcXVlc3Q6IEdyb3VwUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG1lbWJlciBpbiBhIGdyb3VwLlxuICAgKlxuICAgKiBAcGFyYW0ge01lbWJlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZ3JvdXAgbWVtYmVyKHMpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZW1iZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlR3JvdXBNZW1iZXJzKHJlcXVlc3Q6IE1lbWJlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lbWJlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lbWJlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvbWVtYmVyJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBvbiB0aGlzIGNyZWF0ZSByZXF1ZXN0LCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhY2Nlc3NDb250cm9sTGlzdElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0lQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlSVBBY2Nlc3NDb250cm9sTGlzdChhY2Nlc3NDb250cm9sTGlzdElkOiBVVUlELCByZXF1ZXN0OiBJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY2Nlc3NDb250cm9sTGlzdElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGlkZW50aXR5IHByb3ZpZGVyLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGlkZW50aXR5IHByb3ZpZGVyLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVJZGVudGl0eVByb3ZpZGVyKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCwgcmVxdWVzdDogSWRlbnRpdHlQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBMYW1iZGEuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgbGFtYmRhLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGxhbWJkYUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgbGFtYmRhLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7TGFtYmRhUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBsYW1iZGEuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVMYW1iZGEobGFtYmRhSWQ6IFVVSUQsIHJlcXVlc3Q6IExhbWJkYVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExhbWJkYVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGxhbWJkYUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIG1lc3NhZ2UgdGVtcGxhdGUuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgdGVtcGxhdGUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2FnZVRlbXBsYXRlSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB0ZW1wbGF0ZS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge01lc3NhZ2VUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzc2FnZSB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZU1lc3NhZ2VUZW1wbGF0ZShtZXNzYWdlVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NhZ2VUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbWVzc2VuZ2VyLiAgWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBtZXNzZW5nZXIsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2VuZ2VySWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBtZXNzZW5nZXIuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtNZXNzZW5nZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lc3Nlbmdlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZU1lc3NlbmdlcihtZXNzZW5nZXJJZDogVVVJRCwgcmVxdWVzdDogTWVzc2VuZ2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzZW5nZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2VuZ2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY3VzdG9tIE9BdXRoIHNjb3BlIGZvciBhbiBhcHBsaWNhdGlvbi4gWW91IG11c3Qgc3BlY2lmeSB0aGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHlvdSBhcmUgY3JlYXRpbmcgdGhlIHNjb3BlIGZvci5cbiAgICogWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBPQXV0aCBzY29wZSBvbiB0aGUgVVJMLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBjcmVhdGUgdGhlIE9BdXRoIHNjb3BlIG9uLlxuICAgKiBAcGFyYW0ge1VVSUR9IHNjb3BlSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIE9BdXRoIHNjb3BlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25PQXV0aFNjb3BlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBPQXV0aCBPQXV0aCBzY29wZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25PQXV0aFNjb3BlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZU9BdXRoU2NvcGUoYXBwbGljYXRpb25JZDogVVVJRCwgc2NvcGVJZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25PQXV0aFNjb3BlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25PQXV0aFNjb3BlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25PQXV0aFNjb3BlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJzY29wZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoc2NvcGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRlbmFudC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB0ZW5hbnQsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB0ZW5hbnQuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtUZW5hbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHRlbmFudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVRlbmFudCh0ZW5hbnRJZDogVVVJRCwgcmVxdWVzdDogVGVuYW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBUaGVtZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB0aGVtZSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0aGVtZUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdGhlbWUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtUaGVtZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdGhlbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVRoZW1lKHRoZW1lSWQ6IFVVSUQsIHJlcXVlc3Q6IFRoZW1lUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUaGVtZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGhlbWVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVzZXIuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgdXNlciwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB1c2VyLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VXNlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVVc2VyKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVXNlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVzZXIgYWN0aW9uLiBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdGFrZW4gb24gYSB1c2VyIHVudGlsIHRoaXMgY2FsbCBzdWNjZXNzZnVsbHkgcmV0dXJucy4gQW55dGltZSBhZnRlclxuICAgKiB0aGF0IHRoZSB1c2VyIGFjdGlvbiBjYW4gYmUgYXBwbGllZCB0byBhbnkgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB1c2VyIGFjdGlvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVzZXIgYWN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVzZXIgcmVhc29uLiBUaGlzIHVzZXIgYWN0aW9uIHJlYXNvbiBjYW5ub3QgYmUgdXNlZCB3aGVuIGFjdGlvbmluZyBhIHVzZXIgdW50aWwgdGhpcyBjYWxsIGNvbXBsZXRlc1xuICAgKiBzdWNjZXNzZnVsbHkuIEFueXRpbWUgYWZ0ZXIgdGhhdCB0aGUgdXNlciBhY3Rpb24gcmVhc29uIGNhbiBiZSB1c2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25SZWFzb25JZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZWFzb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVVc2VyQWN0aW9uUmVhc29uKHVzZXJBY3Rpb25SZWFzb25JZDogVVVJRCwgcmVxdWVzdDogVXNlckFjdGlvblJlYXNvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbi1yZWFzb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvblJlYXNvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2luZ2xlIFVzZXIgY29uc2VudC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgVXNlciBjb25zZW50LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VXNlckNvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXIgY29uc2VudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogVXNlckNvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogTGluayBhbiBleHRlcm5hbCB1c2VyIGZyb20gYSAzcmQgcGFydHkgaWRlbnRpdHkgcHJvdmlkZXIgdG8gYSBGdXNpb25BdXRoIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlckxpbmtSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBsaW5rIHRoZSBGdXNpb25BdXRoIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXJMaW5rKHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJMaW5rUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbGluaycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB3ZWJob29rLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHdlYmhvb2ssIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0lkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgd2ViaG9vay4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1dlYmhvb2tSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHdlYmhvb2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlV2ViaG9vayh3ZWJob29rSWQ6IFVVSUQsIHJlcXVlc3Q6IFdlYmhvb2tSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViaG9vaycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh3ZWJob29rSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSBGdXNpb25BdXRoIFJlYWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlYWN0aXZhdGVSZWFjdG9yKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3InKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlYWN0aXZhdGVVc2VyKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSB1c2VyIGFjdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWFjdGl2YXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIElkcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSB1c2VySWRzIFRoZSBpZHMgb2YgdGhlIHVzZXJzIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlYWN0aXZhdGVVc2Vyc0J5SWRzLCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIGRlYWN0aXZhdGVVc2Vycyh1c2VySWRzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckRlbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9idWxrJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZHMpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdkcnlSdW4nLCBmYWxzZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2hhcmREZWxldGUnLCBmYWxzZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIElkcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSB1c2VySWRzIFRoZSBpZHMgb2YgdGhlIHVzZXJzIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZVVzZXJzQnlJZHModXNlcklkczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJEZWxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYnVsaycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWRzKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZHJ5UnVuJywgZmFsc2UpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgZmFsc2UpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIEFQSSBrZXkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIEFQSSBrZXkgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVBUElLZXkoa2V5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwaS1rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhcmQgZGVsZXRlcyBhbiBhcHBsaWNhdGlvbi4gVGhpcyBpcyBhIGRhbmdlcm91cyBvcGVyYXRpb24gYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBtb3N0IGNpcmN1bXN0YW5jZXMuIFRoaXMgd2lsbFxuICAgKiBkZWxldGUgdGhlIGFwcGxpY2F0aW9uLCBhbnkgcmVnaXN0cmF0aW9ucyBmb3IgdGhhdCBhcHBsaWNhdGlvbiwgbWV0cmljcyBhbmQgcmVwb3J0cyBmb3IgdGhlIGFwcGxpY2F0aW9uLCBhbGwgdGhlXG4gICAqIHJvbGVzIGZvciB0aGUgYXBwbGljYXRpb24sIGFuZCBhbnkgb3RoZXIgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGFwcGxpY2F0aW9uLiBUaGlzIG9wZXJhdGlvbiBjb3VsZCB0YWtlIGEgdmVyeVxuICAgKiBsb25nIHRpbWUsIGRlcGVuZGluZyBvbiB0aGUgYW1vdW50IG9mIGRhdGEgaW4geW91ciBkYXRhYmFzZS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaGFyZERlbGV0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhcmQgZGVsZXRlcyBhbiBhcHBsaWNhdGlvbiByb2xlLiBUaGlzIGlzIGEgZGFuZ2Vyb3VzIG9wZXJhdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG1vc3QgY2lyY3Vtc3RhbmNlcy4gVGhpc1xuICAgKiBwZXJtYW5lbnRseSByZW1vdmVzIHRoZSBnaXZlbiByb2xlIGZyb20gYWxsIHVzZXJzIHRoYXQgaGFkIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSByb2xlIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcm9sZUlkIFRoZSBJZCBvZiB0aGUgcm9sZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUFwcGxpY2F0aW9uUm9sZShhcHBsaWNhdGlvbklkOiBVVUlELCByb2xlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInJvbGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHJvbGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgY29ubmVjdG9yIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgVGhlIElkIG9mIHRoZSBjb25uZWN0b3IgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25uZWN0b3JJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgY29uc2VudCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCBUaGUgSWQgb2YgdGhlIGNvbnNlbnQgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVDb25zZW50KGNvbnNlbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGVtYWlsIHRlbXBsYXRlIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgZW1haWwgdGVtcGxhdGUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW1haWxUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBFbnRpdHkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUVudGl0eShlbnRpdHlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIEVudGl0eSBHcmFudCBmb3IgdGhlIGdpdmVuIFVzZXIgb3IgRW50aXR5LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRoYXQgdGhlIEVudGl0eSBHcmFudCBpcyBiZWluZyBkZWxldGVkIGZvci5cbiAgICogQHBhcmFtIHtVVUlEfSByZWNpcGllbnRFbnRpdHlJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRoYXQgdGhlIEVudGl0eSBHcmFudCBpcyBmb3IuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBVc2VyIHRoYXQgdGhlIEVudGl0eSBHcmFudCBpcyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUVudGl0eUdyYW50KGVudGl0eUlkOiBVVUlELCByZWNpcGllbnRFbnRpdHlJZDogVVVJRCwgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcImdyYW50XCIpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWNpcGllbnRFbnRpdHlJZCcsIHJlY2lwaWVudEVudGl0eUlkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBFbnRpdHkgVHlwZSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSBUeXBlIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRW50aXR5VHlwZShlbnRpdHlUeXBlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFyZCBkZWxldGVzIGEgcGVybWlzc2lvbi4gVGhpcyBpcyBhIGRhbmdlcm91cyBvcGVyYXRpb24gYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBtb3N0IGNpcmN1bXN0YW5jZXMuIFRoaXNcbiAgICogcGVybWFuZW50bHkgcmVtb3ZlcyB0aGUgZ2l2ZW4gcGVybWlzc2lvbiBmcm9tIGFsbCBncmFudHMgdGhhdCBoYWQgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgZW50aXR5VHlwZSB0aGUgdGhlIHBlcm1pc3Npb24gYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSBwZXJtaXNzaW9uSWQgVGhlIElkIG9mIHRoZSBwZXJtaXNzaW9uIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRW50aXR5VHlwZVBlcm1pc3Npb24oZW50aXR5VHlwZUlkOiBVVUlELCBwZXJtaXNzaW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicGVybWlzc2lvblwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocGVybWlzc2lvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBmb3JtIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZm9ybUlkIFRoZSBJZCBvZiB0aGUgZm9ybSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUZvcm0oZm9ybUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZvcm1JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgZm9ybSBmaWVsZCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZpZWxkSWQgVGhlIElkIG9mIHRoZSBmb3JtIGZpZWxkIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRm9ybUZpZWxkKGZpZWxkSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmllbGRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgZ3JvdXAgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBncm91cElkIFRoZSBJZCBvZiB0aGUgZ3JvdXAgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVHcm91cChncm91cElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChncm91cElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHVzZXJzIGFzIG1lbWJlcnMgb2YgYSBncm91cC5cbiAgICpcbiAgICogQHBhcmFtIHtNZW1iZXJEZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSBtZW1iZXIgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byByZW1vdmUgbWVtYmVycyB0byB0aGUgZ3JvdXAuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUdyb3VwTWVtYmVycyhyZXF1ZXN0OiBNZW1iZXJEZWxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cC9tZW1iZXInKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3QgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpcEFjY2Vzc0NvbnRyb2xMaXN0SWQgVGhlIElkIG9mIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlSVBBY2Nlc3NDb250cm9sTGlzdChpcEFjY2Vzc0NvbnRyb2xMaXN0SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpcEFjY2Vzc0NvbnRyb2xMaXN0SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGlkZW50aXR5IHByb3ZpZGVyIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIFRoZSBJZCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVJZGVudGl0eVByb3ZpZGVyKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBrZXkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIGtleSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUtleShrZXlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBsYW1iZGEgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBsYW1iZGFJZCBUaGUgSWQgb2YgdGhlIGxhbWJkYSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUxhbWJkYShsYW1iZGFJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGxhbWJkYUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBtZXNzYWdlIHRlbXBsYXRlIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2FnZVRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlTWVzc2FnZVRlbXBsYXRlKG1lc3NhZ2VUZW1wbGF0ZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NhZ2VUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBtZXNzZW5nZXIgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzZW5nZXJJZCBUaGUgSWQgb2YgdGhlIG1lc3NlbmdlciB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZU1lc3NlbmdlcihtZXNzZW5nZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NlbmdlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXJkIGRlbGV0ZXMgYSBjdXN0b20gT0F1dGggc2NvcGUuXG4gICAqIE9BdXRoIHdvcmtmbG93cyB0aGF0IGFyZSBzdGlsbCByZXF1ZXN0aW5nIHRoZSBkZWxldGVkIE9BdXRoIHNjb3BlIG1heSBmYWlsIGRlcGVuZGluZyBvbiB0aGUgYXBwbGljYXRpb24ncyB1bmtub3duIHNjb3BlIHBvbGljeS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB0aGUgT0F1dGggc2NvcGUgYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSBzY29wZUlkIFRoZSBJZCBvZiB0aGUgT0F1dGggc2NvcGUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVPQXV0aFNjb3BlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHNjb3BlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInNjb3BlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChzY29wZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGdpdmVuIHVzZXIgYW5kIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgd2hvc2UgcmVnaXN0cmF0aW9uIGlzIGJlaW5nIGRlbGV0ZWQuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHJlbW92ZSB0aGUgcmVnaXN0cmF0aW9uIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlUmVnaXN0cmF0aW9uKHVzZXJJZDogVVVJRCwgYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciByZWdpc3RyYXRpb24gZm9yIHRoZSBnaXZlbiB1c2VyIGFuZCBhcHBsaWNhdGlvbiBhbG9uZyB3aXRoIHRoZSBnaXZlbiBKU09OIGJvZHkgdGhhdCBjb250YWlucyB0aGUgZXZlbnQgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB3aG9zZSByZWdpc3RyYXRpb24gaXMgYmVpbmcgZGVsZXRlZC5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gcmVtb3ZlIHRoZSByZWdpc3RyYXRpb24gZm9yLlxuICAgKiBAcGFyYW0ge1JlZ2lzdHJhdGlvbkRlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgYm9keSB0aGF0IGNvbnRhaW5zIHRoZSBldmVudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlUmVnaXN0cmF0aW9uV2l0aFJlcXVlc3QodXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlELCByZXF1ZXN0OiBSZWdpc3RyYXRpb25EZWxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHRlbmFudCBiYXNlZCBvbiB0aGUgZ2l2ZW4gSWQgb24gdGhlIFVSTC4gVGhpcyBwZXJtYW5lbnRseSBkZWxldGVzIGFsbCBpbmZvcm1hdGlvbiwgbWV0cmljcywgcmVwb3J0cyBhbmQgZGF0YSBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHRlbmFudCBhbmQgZXZlcnl0aGluZyB1bmRlciB0aGUgdGVuYW50IChhcHBsaWNhdGlvbnMsIHVzZXJzLCBldGMpLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVGVuYW50KHRlbmFudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHRlbmFudCBmb3IgdGhlIGdpdmVuIElkIGFzeW5jaHJvbm91c2x5LlxuICAgKiBUaGlzIG1ldGhvZCBpcyBoZWxwZnVsIGlmIHlvdSBkbyBub3Qgd2FudCB0byB3YWl0IGZvciB0aGUgZGVsZXRlIG9wZXJhdGlvbiB0byBjb21wbGV0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVRlbmFudEFzeW5jKHRlbmFudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhc3luYycsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHRlbmFudCBiYXNlZCBvbiB0aGUgZ2l2ZW4gcmVxdWVzdCAoc2VudCB0byB0aGUgQVBJIGFzIEpTT04pLiBUaGlzIHBlcm1hbmVudGx5IGRlbGV0ZXMgYWxsIGluZm9ybWF0aW9uLCBtZXRyaWNzLCByZXBvcnRzIGFuZCBkYXRhIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgdGVuYW50IGFuZCBldmVyeXRoaW5nIHVuZGVyIHRoZSB0ZW5hbnQgKGFwcGxpY2F0aW9ucywgdXNlcnMsIGV0YykuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge1RlbmFudERlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGRlbGV0ZSB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVGVuYW50V2l0aFJlcXVlc3QodGVuYW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFRlbmFudERlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB0aGVtZSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRoZW1lSWQgVGhlIElkIG9mIHRoZSB0aGVtZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVRoZW1lKHRoZW1lSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRoZW1lSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiBJZC4gVGhpcyBwZXJtYW5lbnRseSBkZWxldGVzIGFsbCBpbmZvcm1hdGlvbiwgbWV0cmljcywgcmVwb3J0cyBhbmQgZGF0YSBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXIodXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2hhcmREZWxldGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIGFjdGlvbiBmb3IgdGhlIGdpdmVuIElkLiBUaGlzIHBlcm1hbmVudGx5IGRlbGV0ZXMgdGhlIHVzZXIgYWN0aW9uIGFuZCBhbHNvIGFueSBoaXN0b3J5IGFuZCBsb2dzIG9mXG4gICAqIHRoZSBhY3Rpb24gYmVpbmcgYXBwbGllZCB0byBhbnkgdXNlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaGFyZERlbGV0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25SZWFzb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbi1yZWFzb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvblJlYXNvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZXhpc3RpbmcgbGluayB0aGF0IGhhcyBiZWVuIG1hZGUgZnJvbSBhIDNyZCBwYXJ0eSBpZGVudGl0eSBwcm92aWRlciB0byBhIEZ1c2lvbkF1dGggdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGl0eVByb3ZpZGVyVXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIgaW4gdGhlIDNyZCBwYXJ0eSBpZGVudGl0eSBwcm92aWRlciB0byB1bmxpbmsuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggdXNlciB0byB1bmxpbmsuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJMaW5rKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCwgaWRlbnRpdHlQcm92aWRlclVzZXJJZDogc3RyaW5nLCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xpbmsnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRlbnRpdHlQcm92aWRlcklkJywgaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRlbnRpdHlQcm92aWRlclVzZXJJZCcsIGlkZW50aXR5UHJvdmlkZXJVc2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgYmFzZWQgb24gdGhlIGdpdmVuIHJlcXVlc3QgKHNlbnQgdG8gdGhlIEFQSSBhcyBKU09OKS4gVGhpcyBwZXJtYW5lbnRseSBkZWxldGVzIGFsbCBpbmZvcm1hdGlvbiwgbWV0cmljcywgcmVwb3J0cyBhbmQgZGF0YSBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBkZWxldGUgKHJlcXVpcmVkKS5cbiAgICogQHBhcmFtIHtVc2VyRGVsZXRlU2luZ2xlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gZGVsZXRlIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVVc2VyV2l0aFJlcXVlc3QodXNlcklkOiBVVUlELCByZXF1ZXN0OiBVc2VyRGVsZXRlU2luZ2xlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlcnMgd2l0aCB0aGUgZ2l2ZW4gSWRzLCBvciB1c2VycyBtYXRjaGluZyB0aGUgcHJvdmlkZWQgSlNPTiBxdWVyeSBvciBxdWVyeVN0cmluZy5cbiAgICogVGhlIG9yZGVyIG9mIHByZWZlcmVuY2UgaXMgSWRzLCBxdWVyeSBhbmQgdGhlbiBxdWVyeVN0cmluZywgaXQgaXMgcmVjb21tZW5kZWQgdG8gb25seSBwcm92aWRlIG9uZSBvZiB0aGUgdGhyZWUgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBcbiAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gZGVhY3RpdmF0ZSBvciBwZXJtYW5lbnRseSBkZWxldGUgKGhhcmQtZGVsZXRlKSB1c2VycyBiYXNlZCB1cG9uIHRoZSBoYXJkRGVsZXRlIGJvb2xlYW4gaW4gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogVXNpbmcgdGhlIGRyeVJ1biBwYXJhbWV0ZXIgeW91IG1heSBhbHNvIHJlcXVlc3QgdGhlIHJlc3VsdCBvZiB0aGUgYWN0aW9uIHdpdGhvdXQgYWN0dWFsbHkgZGVsZXRpbmcgb3IgZGVhY3RpdmF0aW5nIGFueSB1c2Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtVc2VyRGVsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgVXNlckRlbGV0ZVJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlbGV0ZVVzZXJzQnlRdWVyeSwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBkZWxldGVVc2VycyhyZXF1ZXN0OiBVc2VyRGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJEZWxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYnVsaycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlcnMgd2l0aCB0aGUgZ2l2ZW4gSWRzLCBvciB1c2VycyBtYXRjaGluZyB0aGUgcHJvdmlkZWQgSlNPTiBxdWVyeSBvciBxdWVyeVN0cmluZy5cbiAgICogVGhlIG9yZGVyIG9mIHByZWZlcmVuY2UgaXMgSWRzLCBxdWVyeSBhbmQgdGhlbiBxdWVyeVN0cmluZywgaXQgaXMgcmVjb21tZW5kZWQgdG8gb25seSBwcm92aWRlIG9uZSBvZiB0aGUgdGhyZWUgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBcbiAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gZGVhY3RpdmF0ZSBvciBwZXJtYW5lbnRseSBkZWxldGUgKGhhcmQtZGVsZXRlKSB1c2VycyBiYXNlZCB1cG9uIHRoZSBoYXJkRGVsZXRlIGJvb2xlYW4gaW4gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogVXNpbmcgdGhlIGRyeVJ1biBwYXJhbWV0ZXIgeW91IG1heSBhbHNvIHJlcXVlc3QgdGhlIHJlc3VsdCBvZiB0aGUgYWN0aW9uIHdpdGhvdXQgYWN0dWFsbHkgZGVsZXRpbmcgb3IgZGVhY3RpdmF0aW5nIGFueSB1c2Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtVc2VyRGVsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgVXNlckRlbGV0ZVJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+fVxuICAgKi9cbiAgZGVsZXRlVXNlcnNCeVF1ZXJ5KHJlcXVlc3Q6IFVzZXJEZWxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckRlbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9idWxrJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBXZWJBdXRobiBjcmVkZW50aWFsIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWQgVGhlIElkIG9mIHRoZSBXZWJBdXRobiBjcmVkZW50aWFsIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlV2ViQXV0aG5DcmVkZW50aWFsKGlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhbGwgb2YgdGhlIFdlYkF1dGhuIGNyZWRlbnRpYWxzIGZvciB0aGUgZ2l2ZW4gVXNlciBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgVXNlciB0byBkZWxldGUgV2ViQXV0aG4gcGFzc2tleXMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVXZWJBdXRobkNyZWRlbnRpYWxzRm9yVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgd2ViaG9vayBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHdlYmhvb2tJZCBUaGUgSWQgb2YgdGhlIHdlYmhvb2sgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVXZWJob29rKHdlYmhvb2tJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViaG9vaycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh3ZWJob29rSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbiBmbG93IHVzaW5nIGZvcm0tZW5jb2RlZCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5IGluc3RlYWQgb2YgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKE9wdGlvbmFsKSBBIHNwYWNlLWRlbGltaXRlZCBzdHJpbmcgb2YgdGhlIHJlcXVlc3RlZCBzY29wZXMuIERlZmF1bHRzIHRvIGFsbCBzY29wZXMgY29uZmlndXJlZCBpbiB0aGUgQXBwbGljYXRpb24ncyBPQXV0aCBjb25maWd1cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxEZXZpY2VSZXNwb25zZT4+fVxuICAgKi9cbiAgZGV2aWNlQXV0aG9yaXplKGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHNjb3BlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPERldmljZVJlc3BvbnNlPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgnc2NvcGUnLCBzY29wZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8RGV2aWNlUmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvZGV2aWNlX2F1dGhvcml6ZScpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbiBmbG93IHVzaW5nIGEgcmVxdWVzdCBib2R5XG4gICAqXG4gICAqIEBwYXJhbSB7RGV2aWNlQXV0aG9yaXphdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIGRldmljZSBhdXRob3JpemF0aW9uIHJlcXVlc3QgY29udGFpbmluZyBjbGllbnQgYXV0aGVudGljYXRpb24sIHNjb3BlLCBhbmQgb3B0aW9uYWwgZGV2aWNlIG1ldGFkYXRhLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxEZXZpY2VSZXNwb25zZT4+fVxuICAgKi9cbiAgZGV2aWNlQXV0aG9yaXplV2l0aFJlcXVlc3QocmVxdWVzdDogRGV2aWNlQXV0aG9yaXphdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPERldmljZVJlc3BvbnNlPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50X2lkICE9PSBudWxsICYmIHJlcXVlc3QuY2xpZW50X2lkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCByZXF1ZXN0LmNsaWVudF9pZCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LmNsaWVudF9zZWNyZXQgIT09IG51bGwgJiYgcmVxdWVzdC5jbGllbnRfc2VjcmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgcmVxdWVzdC5jbGllbnRfc2VjcmV0KTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3Quc2NvcGUgIT09IG51bGwgJiYgcmVxdWVzdC5zY29wZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnc2NvcGUnLCByZXF1ZXN0LnNjb3BlKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QudGVuYW50SWQgIT09IG51bGwgJiYgcmVxdWVzdC50ZW5hbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgndGVuYW50SWQnLCByZXF1ZXN0LnRlbmFudElkLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxEZXZpY2VSZXNwb25zZSwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9kZXZpY2VfYXV0aG9yaXplJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgVXNlciBmb3Igd2hpY2ggeW91J3JlIGRpc2FibGluZyB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kSWQgVGhlIHR3by1mYWN0b3IgbWV0aG9kIGlkZW50aWZpZXIgeW91IHdpc2ggdG8gZGlzYWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgdHdvLWZhY3RvciBjb2RlIHVzZWQgdmVyaWZ5IHRoZSB0aGUgY2FsbGVyIGtub3dzIHRoZSB0d28tZmFjdG9yIHNlY3JldC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGlzYWJsZVR3b0ZhY3Rvcih1c2VySWQ6IFVVSUQsIG1ldGhvZElkOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ21ldGhvZElkJywgbWV0aG9kSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdjb2RlJywgY29kZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIHVzZXIgdXNpbmcgYSBKU09OIGJvZHkgcmF0aGVyIHRoYW4gVVJMIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgVXNlciBmb3Igd2hpY2ggeW91J3JlIGRpc2FibGluZyB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvckRpc2FibGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IGluZm9ybWF0aW9uIHRoYXQgY29udGFpbnMgdGhlIGNvZGUgYW5kIG1ldGhvZElkIGFsb25nIHdpdGggYW55IGV2ZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkaXNhYmxlVHdvRmFjdG9yV2l0aFJlcXVlc3QodXNlcklkOiBVVUlELCByZXF1ZXN0OiBUd29GYWN0b3JEaXNhYmxlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZW5hYmxlIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yUmVxdWVzdH0gcmVxdWVzdCBUaGUgdHdvLWZhY3RvciBlbmFibGUgcmVxdWVzdCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIGVuYWJsZVR3b0ZhY3Rvcih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFR3b0ZhY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2VzIGFuIE9BdXRoIGF1dGhvcml6YXRpb24gY29kZSBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKiBNYWtlcyBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgZnJvbSB0aGUgQXV0aG9yaXplIGVuZHBvaW50IGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIFRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgb24gdGhlIC9vYXV0aDIvYXV0aG9yaXplIHJlc3BvbnNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS5cbiAgICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiBCYXNpYyBBdXRob3JpemF0aW9uIGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHJlcXVpcmVkIGlmIGNsaWVudCBhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVkaXJlY3RfdXJpIFRoZSBVUkkgdG8gcmVkaXJlY3QgdG8gdXBvbiBhIHN1Y2Nlc3NmdWwgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlT0F1dGhDb2RlRm9yQWNjZXNzVG9rZW4oY29kZTogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCByZWRpcmVjdF91cmk6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgnY29kZScsIGNvZGUpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAnYXV0aG9yaXphdGlvbl9jb2RlJyk7XG4gICAgYm9keS5hcHBlbmQoJ3JlZGlyZWN0X3VyaScsIHJlZGlyZWN0X3VyaSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZXMgYW4gT0F1dGggYXV0aG9yaXphdGlvbiBjb2RlIGFuZCBjb2RlX3ZlcmlmaWVyIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqIE1ha2VzIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIGF1dGhvcml6YXRpb24gY29kZSByZXR1cm5lZCBmcm9tIHRoZSBBdXRob3JpemUgZW5kcG9pbnQgYW5kIGEgY29kZV92ZXJpZmllciBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIG9uIHRoZSAvb2F1dGgyL2F1dGhvcml6ZSByZXNwb25zZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHByb3ZpZGVkLlxuICAgKiAgICBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIEJhc2ljIEF1dGhvcml6YXRpb24gaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkgaW5zdGVhZCBvZiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdF91cmkgVGhlIFVSSSB0byByZWRpcmVjdCB0byB1cG9uIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZV92ZXJpZmllciBUaGUgcmFuZG9tIHN0cmluZyBnZW5lcmF0ZWQgcHJldmlvdXNseS4gV2lsbCBiZSBjb21wYXJlZCB3aXRoIHRoZSBjb2RlX2NoYWxsZW5nZSBzZW50IHByZXZpb3VzbHksIHdoaWNoIGFsbG93cyB0aGUgT0F1dGggcHJvdmlkZXIgdG8gYXV0aGVudGljYXRlIHlvdXIgYXBwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VPQXV0aENvZGVGb3JBY2Nlc3NUb2tlblVzaW5nUEtDRShjb2RlOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHJlZGlyZWN0X3VyaTogc3RyaW5nLCBjb2RlX3ZlcmlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NvZGUnLCBjb2RlKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ2F1dGhvcml6YXRpb25fY29kZScpO1xuICAgIGJvZHkuYXBwZW5kKCdyZWRpcmVjdF91cmknLCByZWRpcmVjdF91cmkpO1xuICAgIGJvZHkuYXBwZW5kKCdjb2RlX3ZlcmlmaWVyJywgY29kZV92ZXJpZmllcik7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZXMgYW4gT0F1dGggYXV0aG9yaXphdGlvbiBjb2RlIGFuZCBjb2RlX3ZlcmlmaWVyIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqIE1ha2VzIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIGF1dGhvcml6YXRpb24gY29kZSByZXR1cm5lZCBmcm9tIHRoZSBBdXRob3JpemUgZW5kcG9pbnQgYW5kIGEgY29kZV92ZXJpZmllciBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge09BdXRoQ29kZVBLQ0VBY2Nlc3NUb2tlblJlcXVlc3R9IHJlcXVlc3QgVGhlIFBLQ0UgT0F1dGggY29kZSBhY2Nlc3MgdG9rZW4gZXhjaGFuZ2UgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlT0F1dGhDb2RlRm9yQWNjZXNzVG9rZW5Vc2luZ1BLQ0VXaXRoUmVxdWVzdChyZXF1ZXN0OiBPQXV0aENvZGVQS0NFQWNjZXNzVG9rZW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGlmIChyZXF1ZXN0LmNsaWVudF9pZCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNsaWVudF9pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgcmVxdWVzdC5jbGllbnRfaWQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5jbGllbnRfc2VjcmV0ICE9PSBudWxsICYmIHJlcXVlc3QuY2xpZW50X3NlY3JldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIHJlcXVlc3QuY2xpZW50X3NlY3JldCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LmNvZGUgIT09IG51bGwgJiYgcmVxdWVzdC5jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdjb2RlJywgcmVxdWVzdC5jb2RlKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QuY29kZV92ZXJpZmllciAhPT0gbnVsbCAmJiByZXF1ZXN0LmNvZGVfdmVyaWZpZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NvZGVfdmVyaWZpZXInLCByZXF1ZXN0LmNvZGVfdmVyaWZpZXIpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5ncmFudF90eXBlICE9PSBudWxsICYmIHJlcXVlc3QuZ3JhbnRfdHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsIHJlcXVlc3QuZ3JhbnRfdHlwZSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0X3VyaSAhPT0gbnVsbCAmJiByZXF1ZXN0LnJlZGlyZWN0X3VyaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgncmVkaXJlY3RfdXJpJywgcmVxdWVzdC5yZWRpcmVjdF91cmkpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC50ZW5hbnRJZCAhPT0gbnVsbCAmJiByZXF1ZXN0LnRlbmFudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd0ZW5hbnRJZCcsIHJlcXVlc3QudGVuYW50SWQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2VzIGFuIE9BdXRoIGF1dGhvcml6YXRpb24gY29kZSBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKiBNYWtlcyBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgZnJvbSB0aGUgQXV0aG9yaXplIGVuZHBvaW50IGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7T0F1dGhDb2RlQWNjZXNzVG9rZW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSBPQXV0aCBjb2RlIGFjY2VzcyB0b2tlbiBleGNoYW5nZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VPQXV0aENvZGVGb3JBY2Nlc3NUb2tlbldpdGhSZXF1ZXN0KHJlcXVlc3Q6IE9BdXRoQ29kZUFjY2Vzc1Rva2VuUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBpZiAocmVxdWVzdC5jbGllbnRfaWQgIT09IG51bGwgJiYgcmVxdWVzdC5jbGllbnRfaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIHJlcXVlc3QuY2xpZW50X2lkKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QuY2xpZW50X3NlY3JldCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNsaWVudF9zZWNyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCByZXF1ZXN0LmNsaWVudF9zZWNyZXQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5jb2RlICE9PSBudWxsICYmIHJlcXVlc3QuY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnY29kZScsIHJlcXVlc3QuY29kZSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LmdyYW50X3R5cGUgIT09IG51bGwgJiYgcmVxdWVzdC5ncmFudF90eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgcmVxdWVzdC5ncmFudF90eXBlKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3RfdXJpICE9PSBudWxsICYmIHJlcXVlc3QucmVkaXJlY3RfdXJpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdyZWRpcmVjdF91cmknLCByZXF1ZXN0LnJlZGlyZWN0X3VyaSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnRlbmFudElkICE9PSBudWxsICYmIHJlcXVlc3QudGVuYW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3RlbmFudElkJywgcmVxdWVzdC50ZW5hbnRJZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2UgYSBSZWZyZXNoIFRva2VuIGZvciBhbiBBY2Nlc3MgVG9rZW4uXG4gICAqIElmIHlvdSB3aWxsIGJlIHVzaW5nIHRoZSBSZWZyZXNoIFRva2VuIEdyYW50LCB5b3Ugd2lsbCBtYWtlIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIHVzZXLigJlzIHJlZnJlc2ggdG9rZW4gZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZnJlc2hfdG9rZW4gVGhlIHJlZnJlc2ggdG9rZW4gdGhhdCB5b3Ugd291bGQgbGlrZSB0byB1c2UgdG8gZXhjaGFuZ2UgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHByb3ZpZGVkLlxuICAgKiAgICBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIEJhc2ljIEF1dGhvcml6YXRpb24gaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkgaW5zdGVhZCBvZiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZSAoT3B0aW9uYWwpIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBpZiBvbWl0dGVkLCB0aGUgc2FtZSBzY29wZSByZXF1ZXN0ZWQgZHVyaW5nIHRoZSBhdXRob3JpemF0aW9uIHJlcXVlc3Qgd2lsbCBiZSB1c2VkLiBJZiBwcm92aWRlZCB0aGUgc2NvcGVzIG11c3QgbWF0Y2ggdGhvc2UgcmVxdWVzdGVkIGR1cmluZyB0aGUgaW5pdGlhbCBhdXRob3JpemF0aW9uIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgKE9wdGlvbmFsKSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuIFRoaXMgY29kZSBpcyByZXF1aXJlZCBpZiB1c2luZyB0aGlzIGVuZHBvaW50IHRvIGFwcHJvdmUgdGhlIERldmljZSBBdXRob3JpemF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VSZWZyZXNoVG9rZW5Gb3JBY2Nlc3NUb2tlbihyZWZyZXNoX3Rva2VuOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHNjb3BlOiBzdHJpbmcsIHVzZXJfY29kZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdyZWZyZXNoX3Rva2VuJywgcmVmcmVzaF90b2tlbik7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsICdyZWZyZXNoX3Rva2VuJyk7XG4gICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgc2NvcGUpO1xuICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2UgYSBSZWZyZXNoIFRva2VuIGZvciBhbiBBY2Nlc3MgVG9rZW4uXG4gICAqIElmIHlvdSB3aWxsIGJlIHVzaW5nIHRoZSBSZWZyZXNoIFRva2VuIEdyYW50LCB5b3Ugd2lsbCBtYWtlIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIHVzZXLigJlzIHJlZnJlc2ggdG9rZW4gZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtSZWZyZXNoVG9rZW5BY2Nlc3NUb2tlblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlZnJlc2ggdG9rZW4gYWNjZXNzIHRva2VuIGV4Y2hhbmdlIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBleGNoYW5nZVJlZnJlc2hUb2tlbkZvckFjY2Vzc1Rva2VuV2l0aFJlcXVlc3QocmVxdWVzdDogUmVmcmVzaFRva2VuQWNjZXNzVG9rZW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGlmIChyZXF1ZXN0LmNsaWVudF9pZCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNsaWVudF9pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgcmVxdWVzdC5jbGllbnRfaWQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5jbGllbnRfc2VjcmV0ICE9PSBudWxsICYmIHJlcXVlc3QuY2xpZW50X3NlY3JldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIHJlcXVlc3QuY2xpZW50X3NlY3JldCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LmdyYW50X3R5cGUgIT09IG51bGwgJiYgcmVxdWVzdC5ncmFudF90eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgcmVxdWVzdC5ncmFudF90eXBlKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QucmVmcmVzaF90b2tlbiAhPT0gbnVsbCAmJiByZXF1ZXN0LnJlZnJlc2hfdG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3JlZnJlc2hfdG9rZW4nLCByZXF1ZXN0LnJlZnJlc2hfdG9rZW4pO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5zY29wZSAhPT0gbnVsbCAmJiByZXF1ZXN0LnNjb3BlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdzY29wZScsIHJlcXVlc3Quc2NvcGUpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC50ZW5hbnRJZCAhPT0gbnVsbCAmJiByZXF1ZXN0LnRlbmFudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd0ZW5hbnRJZCcsIHJlcXVlc3QudGVuYW50SWQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnVzZXJfY29kZSAhPT0gbnVsbCAmJiByZXF1ZXN0LnVzZXJfY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgcmVxdWVzdC51c2VyX2NvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlIGEgcmVmcmVzaCB0b2tlbiBmb3IgYSBuZXcgSldULlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZnJlc2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZWZyZXNoIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXVFJlZnJlc2hSZXNwb25zZT4+fVxuICAgKi9cbiAgZXhjaGFuZ2VSZWZyZXNoVG9rZW5Gb3JKV1QocmVxdWVzdDogUmVmcmVzaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXVFJlZnJlc2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxKV1RSZWZyZXNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlIFVzZXIgQ3JlZGVudGlhbHMgZm9yIGEgVG9rZW4uXG4gICAqIElmIHlvdSB3aWxsIGJlIHVzaW5nIHRoZSBSZXNvdXJjZSBPd25lciBQYXNzd29yZCBDcmVkZW50aWFsIEdyYW50LCB5b3Ugd2lsbCBtYWtlIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIHVzZXLigJlzIGVtYWlsIGFuZCBwYXNzd29yZCBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcm5hbWUgVGhlIGxvZ2luIGlkZW50aWZpZXIgb2YgdGhlIHVzZXIuIFRoZSBsb2dpbiBpZGVudGlmaWVyIGNhbiBiZSBlaXRoZXIgdGhlIGVtYWlsIG9yIHRoZSB1c2VybmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkIFRoZSB1c2Vy4oCZcyBwYXNzd29yZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHByb3ZpZGVkLlxuICAgKiAgICBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIEJhc2ljIEF1dGhvcml6YXRpb24gaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkgaW5zdGVhZCBvZiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZSAoT3B0aW9uYWwpIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBpZiBvbWl0dGVkLCB0aGUgc2FtZSBzY29wZSByZXF1ZXN0ZWQgZHVyaW5nIHRoZSBhdXRob3JpemF0aW9uIHJlcXVlc3Qgd2lsbCBiZSB1c2VkLiBJZiBwcm92aWRlZCB0aGUgc2NvcGVzIG11c3QgbWF0Y2ggdGhvc2UgcmVxdWVzdGVkIGR1cmluZyB0aGUgaW5pdGlhbCBhdXRob3JpemF0aW9uIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgKE9wdGlvbmFsKSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuIFRoaXMgY29kZSBpcyByZXF1aXJlZCBpZiB1c2luZyB0aGlzIGVuZHBvaW50IHRvIGFwcHJvdmUgdGhlIERldmljZSBBdXRob3JpemF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VVc2VyQ3JlZGVudGlhbHNGb3JBY2Nlc3NUb2tlbih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCBzY29wZTogc3RyaW5nLCB1c2VyX2NvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgndXNlcm5hbWUnLCB1c2VybmFtZSk7XG4gICAgYm9keS5hcHBlbmQoJ3Bhc3N3b3JkJywgcGFzc3dvcmQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAncGFzc3dvcmQnKTtcbiAgICBib2R5LmFwcGVuZCgnc2NvcGUnLCBzY29wZSk7XG4gICAgYm9keS5hcHBlbmQoJ3VzZXJfY29kZScsIHVzZXJfY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBVc2VyIENyZWRlbnRpYWxzIGZvciBhIFRva2VuLlxuICAgKiBJZiB5b3Ugd2lsbCBiZSB1c2luZyB0aGUgUmVzb3VyY2UgT3duZXIgUGFzc3dvcmQgQ3JlZGVudGlhbCBHcmFudCwgeW91IHdpbGwgbWFrZSBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSB1c2Vy4oCZcyBlbWFpbCBhbmQgcGFzc3dvcmQgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtVc2VyQ3JlZGVudGlhbHNBY2Nlc3NUb2tlblJlcXVlc3R9IHJlcXVlc3QgVGhlIHVzZXIgY3JlZGVudGlhbHMgYWNjZXNzIHRva2VuIGV4Y2hhbmdlIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBleGNoYW5nZVVzZXJDcmVkZW50aWFsc0ZvckFjY2Vzc1Rva2VuV2l0aFJlcXVlc3QocmVxdWVzdDogVXNlckNyZWRlbnRpYWxzQWNjZXNzVG9rZW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGlmIChyZXF1ZXN0LmNsaWVudF9pZCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNsaWVudF9pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgcmVxdWVzdC5jbGllbnRfaWQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5jbGllbnRfc2VjcmV0ICE9PSBudWxsICYmIHJlcXVlc3QuY2xpZW50X3NlY3JldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIHJlcXVlc3QuY2xpZW50X3NlY3JldCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LmdyYW50X3R5cGUgIT09IG51bGwgJiYgcmVxdWVzdC5ncmFudF90eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgcmVxdWVzdC5ncmFudF90eXBlKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QucGFzc3dvcmQgIT09IG51bGwgJiYgcmVxdWVzdC5wYXNzd29yZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgncGFzc3dvcmQnLCByZXF1ZXN0LnBhc3N3b3JkKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3Quc2NvcGUgIT09IG51bGwgJiYgcmVxdWVzdC5zY29wZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgnc2NvcGUnLCByZXF1ZXN0LnNjb3BlKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QudGVuYW50SWQgIT09IG51bGwgJiYgcmVxdWVzdC50ZW5hbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgndGVuYW50SWQnLCByZXF1ZXN0LnRlbmFudElkKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QudXNlcl9jb2RlICE9PSBudWxsICYmIHJlcXVlc3QudXNlcl9jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCByZXF1ZXN0LnVzZXJfY29kZSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnVzZXJuYW1lICE9PSBudWxsICYmIHJlcXVlc3QudXNlcm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3VzZXJuYW1lJywgcmVxdWVzdC51c2VybmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQmVnaW5zIHRoZSBmb3Jnb3QgcGFzc3dvcmQgc2VxdWVuY2UsIHdoaWNoIGtpY2tzIG9mZiBhbiBlbWFpbCB0byB0aGUgdXNlciBzbyB0aGF0IHRoZXkgY2FuIHJlc2V0IHRoZWlyIHBhc3N3b3JkLlxuICAgKlxuICAgKiBAcGFyYW0ge0ZvcmdvdFBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBzbyB0aGF0IHRoZXkgY2FuIGJlIGVtYWlsZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcmdvdFBhc3N3b3JkUmVzcG9uc2U+Pn1cbiAgICovXG4gIGZvcmdvdFBhc3N3b3JkKHJlcXVlc3Q6IEZvcmdvdFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9yZ290UGFzc3dvcmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3Jnb3RQYXNzd29yZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mb3Jnb3QtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG5ldyBFbWFpbCBWZXJpZmljYXRpb24gSWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBWZXJpZnkgRW1haWwgQVBJLiBUaGlzIEFQSSB3aWxsIG5vdCBhdHRlbXB0IHRvIHNlbmQgYW5cbiAgICogZW1haWwgdG8gdGhlIFVzZXIuIFRoaXMgQVBJIG1heSBiZSB1c2VkIHRvIGNvbGxlY3QgdGhlIHZlcmlmaWNhdGlvbklkIGZvciB1c2Ugd2l0aCBhIHRoaXJkIHBhcnR5IHN5c3RlbS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZUVtYWlsVmVyaWZpY2F0aW9uSWQoZW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlFbWFpbFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzZW5kVmVyaWZ5RW1haWwnLCBmYWxzZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcgUlNBIG9yIEVDIGtleSBwYWlyIG9yIGFuIEhNQUMgc2VjcmV0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUga2V5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7S2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXkvZ2VuZXJhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IEFwcGxpY2F0aW9uIFJlZ2lzdHJhdGlvbiBWZXJpZmljYXRpb24gSWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBWZXJpZnkgUmVnaXN0cmF0aW9uIEFQSS4gVGhpcyBBUEkgd2lsbCBub3QgYXR0ZW1wdCB0byBzZW5kIGFuXG4gICAqIGVtYWlsIHRvIHRoZSBVc2VyLiBUaGlzIEFQSSBtYXkgYmUgdXNlZCB0byBjb2xsZWN0IHRoZSB2ZXJpZmljYXRpb25JZCBmb3IgdXNlIHdpdGggYSB0aGlyZCBwYXJ0eSBzeXN0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gYmUgdmVyaWZpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZVJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkKGVtYWlsOiBzdHJpbmcsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc2VuZFZlcmlmeVBhc3N3b3JkRW1haWwnLCBmYWxzZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0d28tZmFjdG9yIHJlY292ZXJ5IGNvZGVzIGZvciBhIHVzZXIuIEdlbmVyYXRpbmcgdHdvLWZhY3RvciByZWNvdmVyeSBjb2RlcyB3aWxsIGludmFsaWRhdGUgYW55IGV4aXN0aW5nIHJlY292ZXJ5IGNvZGVzLiBcbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGdlbmVyYXRlIG5ldyBUd28gRmFjdG9yIHJlY292ZXJ5IGNvZGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVUd29GYWN0b3JSZWNvdmVyeUNvZGVzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3IvcmVjb3ZlcnktY29kZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIFR3byBGYWN0b3Igc2VjcmV0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgVXNlci4gVGhlIHJlc3BvbnNlIHdpbGwgY29udGFpblxuICAgKiBib3RoIHRoZSBzZWNyZXQgYW5kIGEgQmFzZTMyIGVuY29kZWQgZm9ybSBvZiB0aGUgc2VjcmV0IHdoaWNoIGNhbiBiZSBzaG93biB0byBhIFVzZXIgd2hlbiB1c2luZyBhIDIgU3RlcCBBdXRoZW50aWNhdGlvblxuICAgKiBhcHBsaWNhdGlvbiBzdWNoIGFzIEdvb2dsZSBBdXRoZW50aWNhdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVUd29GYWN0b3JTZWNyZXQoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWNyZXRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlY3JldCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgVHdvIEZhY3RvciBzZWNyZXQgdGhhdCBjYW4gYmUgdXNlZCB0byBlbmFibGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSBVc2VyLiBUaGUgcmVzcG9uc2Ugd2lsbCBjb250YWluXG4gICAqIGJvdGggdGhlIHNlY3JldCBhbmQgYSBCYXNlMzIgZW5jb2RlZCBmb3JtIG9mIHRoZSBzZWNyZXQgd2hpY2ggY2FuIGJlIHNob3duIHRvIGEgVXNlciB3aGVuIHVzaW5nIGEgMiBTdGVwIEF1dGhlbnRpY2F0aW9uXG4gICAqIGFwcGxpY2F0aW9uIHN1Y2ggYXMgR29vZ2xlIEF1dGhlbnRpY2F0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VjcmV0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlVHdvRmFjdG9yU2VjcmV0VXNpbmdKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxTZWNyZXRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlY3JldCcpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGxvZ2luIHZpYSB0aGlyZC1wYXJ0aWVzIGluY2x1ZGluZyBTb2NpYWwgbG9naW4sIGV4dGVybmFsIE9BdXRoIGFuZCBPcGVuSUQgQ29ubmVjdCwgYW5kIG90aGVyXG4gICAqIGxvZ2luIHN5c3RlbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgdGhpcmQtcGFydHkgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGZyb20gdGhlIHRoaXJkLXBhcnR5IGxvZ2luXG4gICAqICAgIHByb3ZpZGVycyB0aGF0IEZ1c2lvbkF1dGggdXNlcyB0byByZWNvbmNpbGUgdGhlIHVzZXIncyBhY2NvdW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICBpZGVudGl0eVByb3ZpZGVyTG9naW4ocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgUlNBIG9yIEVDIGtleSBwYWlyIG9yIGFuIEhNQUMgc2VjcmV0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUga2V5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7S2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj59XG4gICAqL1xuICBpbXBvcnRLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5L2ltcG9ydCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVsayBpbXBvcnRzIHJlZnJlc2ggdG9rZW5zLiBUaGlzIHJlcXVlc3QgcGVyZm9ybXMgbWluaW1hbCB2YWxpZGF0aW9uIGFuZCBydW5zIGJhdGNoIGluc2VydHMgb2YgcmVmcmVzaCB0b2tlbnMgd2l0aCB0aGVcbiAgICogZXhwZWN0YXRpb24gdGhhdCBlYWNoIHRva2VuIHJlcHJlc2VudHMgYSB1c2VyIHRoYXQgYWxyZWFkeSBleGlzdHMgYW5kIGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIEZ1c2lvbkF1dGhcbiAgICogQXBwbGljYXRpb24uIFRoaXMgaXMgZG9uZSB0byBpbmNyZWFzZXMgdGhlIGluc2VydCBwZXJmb3JtYW5jZS5cbiAgICogXG4gICAqIFRoZXJlZm9yZSwgaWYgeW91IGVuY291bnRlciBhbiBlcnJvciBkdWUgdG8gYSBkYXRhYmFzZSBrZXkgdmlvbGF0aW9uLCB0aGUgcmVzcG9uc2Ugd2lsbCBsaWtlbHkgb2ZmZXIgYSBnZW5lcmljXG4gICAqIGV4cGxhbmF0aW9uLiBJZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yLCB5b3UgbWF5IG9wdGlvbmFsbHkgZW5hYmxlIGFkZGl0aW9uYWwgdmFsaWRhdGlvbiB0byByZWNlaXZlIGEgSlNPTiByZXNwb25zZVxuICAgKiBib2R5IHdpdGggc3BlY2lmaWMgdmFsaWRhdGlvbiBlcnJvcnMuIFRoaXMgd2lsbCBzbG93IHRoZSByZXF1ZXN0IGRvd24gYnV0IHdpbGwgYWxsb3cgeW91IHRvIGlkZW50aWZ5IHRoZSBjYXVzZSBvZlxuICAgKiB0aGUgZmFpbHVyZS4gU2VlIHRoZSB2YWxpZGF0ZURiQ29uc3RyYWludHMgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVmcmVzaFRva2VuSW1wb3J0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRoZSByZWZyZXNoIHRva2VucyB0byBpbXBvcnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGltcG9ydFJlZnJlc2hUb2tlbnMocmVxdWVzdDogUmVmcmVzaFRva2VuSW1wb3J0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWZyZXNoLXRva2VuL2ltcG9ydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1bGsgaW1wb3J0cyB1c2Vycy4gVGhpcyByZXF1ZXN0IHBlcmZvcm1zIG1pbmltYWwgdmFsaWRhdGlvbiBhbmQgcnVucyBiYXRjaCBpbnNlcnRzIG9mIHVzZXJzIHdpdGggdGhlIGV4cGVjdGF0aW9uXG4gICAqIHRoYXQgZWFjaCB1c2VyIGRvZXMgbm90IHlldCBleGlzdCBhbmQgZWFjaCByZWdpc3RyYXRpb24gY29ycmVzcG9uZHMgdG8gYW4gZXhpc3RpbmcgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbi4gVGhpcyBpcyBkb25lIHRvXG4gICAqIGluY3JlYXNlcyB0aGUgaW5zZXJ0IHBlcmZvcm1hbmNlLlxuICAgKiBcbiAgICogVGhlcmVmb3JlLCBpZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yIGR1ZSB0byBhIGRhdGFiYXNlIGtleSB2aW9sYXRpb24sIHRoZSByZXNwb25zZSB3aWxsIGxpa2VseSBvZmZlclxuICAgKiBhIGdlbmVyaWMgZXhwbGFuYXRpb24uIElmIHlvdSBlbmNvdW50ZXIgYW4gZXJyb3IsIHlvdSBtYXkgb3B0aW9uYWxseSBlbmFibGUgYWRkaXRpb25hbCB2YWxpZGF0aW9uIHRvIHJlY2VpdmUgYSBKU09OIHJlc3BvbnNlXG4gICAqIGJvZHkgd2l0aCBzcGVjaWZpYyB2YWxpZGF0aW9uIGVycm9ycy4gVGhpcyB3aWxsIHNsb3cgdGhlIHJlcXVlc3QgZG93biBidXQgd2lsbCBhbGxvdyB5b3UgdG8gaWRlbnRpZnkgdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJlLiBTZWVcbiAgICogdGhlIHZhbGlkYXRlRGJDb25zdHJhaW50cyByZXF1ZXN0IHBhcmFtZXRlci5cbiAgICpcbiAgICogQHBhcmFtIHtJbXBvcnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIHVzZXJzIHRvIGltcG9ydC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgaW1wb3J0VXNlcnMocmVxdWVzdDogSW1wb3J0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9pbXBvcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBXZWJBdXRobiBjcmVkZW50aWFsXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViQXV0aG5DcmVkZW50aWFsSW1wb3J0UmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3IgaW1wb3J0aW5nIHRoZSBjcmVkZW50aWFsXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGltcG9ydFdlYkF1dGhuQ3JlZGVudGlhbChyZXF1ZXN0OiBXZWJBdXRobkNyZWRlbnRpYWxJbXBvcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9pbXBvcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNwZWN0IGFuIGFjY2VzcyB0b2tlbiBpc3N1ZWQgYXMgdGhlIHJlc3VsdCBvZiB0aGUgVXNlciBiYXNlZCBncmFudCBzdWNoIGFzIHRoZSBBdXRob3JpemF0aW9uIENvZGUgR3JhbnQsIEltcGxpY2l0IEdyYW50LCB0aGUgVXNlciBDcmVkZW50aWFscyBHcmFudCBvciB0aGUgUmVmcmVzaCBHcmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBmb3Igd2hpY2ggdGhpcyB0b2tlbiB3YXMgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gVGhlIGFjY2VzcyB0b2tlbiByZXR1cm5lZCBieSB0aGlzIE9BdXRoIHByb3ZpZGVyIGFzIHRoZSByZXN1bHQgb2YgYSBzdWNjZXNzZnVsIGNsaWVudCBjcmVkZW50aWFscyBncmFudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50cm9zcGVjdFJlc3BvbnNlPj59XG4gICAqL1xuICBpbnRyb3NwZWN0QWNjZXNzVG9rZW4oY2xpZW50X2lkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCd0b2tlbicsIHRva2VuKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxJbnRyb3NwZWN0UmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvaW50cm9zcGVjdCcpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3BlY3QgYW4gYWNjZXNzIHRva2VuIGlzc3VlZCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBVc2VyIGJhc2VkIGdyYW50IHN1Y2ggYXMgdGhlIEF1dGhvcml6YXRpb24gQ29kZSBHcmFudCwgSW1wbGljaXQgR3JhbnQsIHRoZSBVc2VyIENyZWRlbnRpYWxzIEdyYW50IG9yIHRoZSBSZWZyZXNoIEdyYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0FjY2Vzc1Rva2VuSW50cm9zcGVjdFJlcXVlc3R9IHJlcXVlc3QgVGhlIGFjY2VzcyB0b2tlbiBpbnRyb3NwZWN0aW9uIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+fVxuICAgKi9cbiAgaW50cm9zcGVjdEFjY2Vzc1Rva2VuV2l0aFJlcXVlc3QocmVxdWVzdDogQWNjZXNzVG9rZW5JbnRyb3NwZWN0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50cm9zcGVjdFJlc3BvbnNlPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50X2lkICE9PSBudWxsICYmIHJlcXVlc3QuY2xpZW50X2lkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCByZXF1ZXN0LmNsaWVudF9pZCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnRlbmFudElkICE9PSBudWxsICYmIHJlcXVlc3QudGVuYW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3RlbmFudElkJywgcmVxdWVzdC50ZW5hbnRJZCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnRva2VuICE9PSBudWxsICYmIHJlcXVlc3QudG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3Rva2VuJywgcmVxdWVzdC50b2tlbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEludHJvc3BlY3RSZXNwb25zZSwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9pbnRyb3NwZWN0JylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5zcGVjdCBhbiBhY2Nlc3MgdG9rZW4gaXNzdWVkIGFzIHRoZSByZXN1bHQgb2YgdGhlIENsaWVudCBDcmVkZW50aWFscyBHcmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuIFRoZSBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgYnkgdGhpcyBPQXV0aCBwcm92aWRlciBhcyB0aGUgcmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBjbGllbnQgY3JlZGVudGlhbHMgZ3JhbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+fVxuICAgKi9cbiAgaW50cm9zcGVjdENsaWVudENyZWRlbnRpYWxzQWNjZXNzVG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50cm9zcGVjdFJlc3BvbnNlPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ3Rva2VuJywgdG9rZW4pO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEludHJvc3BlY3RSZXNwb25zZSwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9pbnRyb3NwZWN0JylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5zcGVjdCBhbiBhY2Nlc3MgdG9rZW4gaXNzdWVkIGFzIHRoZSByZXN1bHQgb2YgdGhlIENsaWVudCBDcmVkZW50aWFscyBHcmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtDbGllbnRDcmVkZW50aWFsc0FjY2Vzc1Rva2VuSW50cm9zcGVjdFJlcXVlc3R9IHJlcXVlc3QgVGhlIGNsaWVudCBjcmVkZW50aWFscyBhY2Nlc3MgdG9rZW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+fVxuICAgKi9cbiAgaW50cm9zcGVjdENsaWVudENyZWRlbnRpYWxzQWNjZXNzVG9rZW5XaXRoUmVxdWVzdChyZXF1ZXN0OiBDbGllbnRDcmVkZW50aWFsc0FjY2Vzc1Rva2VuSW50cm9zcGVjdFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGlmIChyZXF1ZXN0LnRlbmFudElkICE9PSBudWxsICYmIHJlcXVlc3QudGVuYW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3RlbmFudElkJywgcmVxdWVzdC50ZW5hbnRJZCk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnRva2VuICE9PSBudWxsICYmIHJlcXVlc3QudG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3Rva2VuJywgcmVxdWVzdC50b2tlbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEludHJvc3BlY3RSZXNwb25zZSwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9pbnRyb3NwZWN0JylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSXNzdWUgYSBuZXcgYWNjZXNzIHRva2VuIChKV1QpIGZvciB0aGUgcmVxdWVzdGVkIEFwcGxpY2F0aW9uIGFmdGVyIGVuc3VyaW5nIHRoZSBwcm92aWRlZCBKV1QgaXMgdmFsaWQuIEEgdmFsaWRcbiAgICogYWNjZXNzIHRva2VuIGlzIHByb3Blcmx5IHNpZ25lZCBhbmQgbm90IGV4cGlyZWQuXG4gICAqIDxwPlxuICAgKiBUaGlzIEFQSSBtYXkgYmUgdXNlZCBpbiBhbiBTU08gY29uZmlndXJhdGlvbiB0byBpc3N1ZSBuZXcgdG9rZW5zIGZvciBhbm90aGVyIGFwcGxpY2F0aW9uIGFmdGVyIHRoZSB1c2VyIGhhc1xuICAgKiBvYnRhaW5lZCBhIHZhbGlkIHRva2VuIGZyb20gYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgQXBwbGljYXRpb24gSWQgZm9yIHdoaWNoIHlvdSBhcmUgcmVxdWVzdGluZyBhIG5ldyBhY2Nlc3MgdG9rZW4gYmUgaXNzdWVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZyZXNoVG9rZW4gKE9wdGlvbmFsKSBBbiBleGlzdGluZyByZWZyZXNoIHRva2VuIHVzZWQgdG8gcmVxdWVzdCBhIHJlZnJlc2ggdG9rZW4gaW4gYWRkaXRpb24gdG8gYSBKV1QgaW4gdGhlIHJlc3BvbnNlLlxuICAgKiAgICA8cD5UaGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbklkIHJlcXVlc3QgcGFyYW1ldGVyIG11c3QgaGF2ZSByZWZyZXNoXG4gICAqICAgIHRva2VucyBlbmFibGVkIGluIG9yZGVyIHRvIHJlY2VpdmUgYSByZWZyZXNoIHRva2VuIGluIHRoZSByZXNwb25zZS48L3A+XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElzc3VlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGlzc3VlSldUKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIGVuY29kZWRKV1Q6IHN0cmluZywgcmVmcmVzaFRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElzc3VlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8SXNzdWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9pc3N1ZScpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWZyZXNoVG9rZW4nLCByZWZyZXNoVG9rZW4pXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgYSB1c2VyIHRvIEZ1c2lvbkF1dGguIFxuICAgKiBcbiAgICogVGhpcyBBUEkgb3B0aW9uYWxseSByZXF1aXJlcyBhbiBBUEkga2V5LiBTZWUgPGNvZGU+QXBwbGljYXRpb24ubG9naW5Db25maWd1cmF0aW9uLnJlcXVpcmVBdXRoZW50aWNhdGlvbjwvY29kZT4uXG4gICAqXG4gICAqIEBwYXJhbSB7TG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSBsb2dpbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXIgY3JlZGVudGlhbHMgdXNlZCB0byBsb2cgdGhlbSBpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgbG9naW4ocmVxdWVzdDogTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcGluZyB0byBGdXNpb25BdXRoIGluZGljYXRpbmcgdGhhdCB0aGUgdXNlciB3YXMgYXV0b21hdGljYWxseSBsb2dnZWQgaW50byBhbiBhcHBsaWNhdGlvbi4gV2hlbiB1c2luZ1xuICAgKiBGdXNpb25BdXRoJ3MgU1NPIG9yIHlvdXIgb3duLCB5b3Ugc2hvdWxkIGNhbGwgdGhpcyBpZiB0aGUgdXNlciBpcyBhbHJlYWR5IGxvZ2dlZCBpbiBjZW50cmFsbHksIGJ1dCBhY2Nlc3NlcyBhblxuICAgKiBhcHBsaWNhdGlvbiB3aGVyZSB0aGV5IG5vIGxvbmdlciBoYXZlIGEgc2Vzc2lvbi4gVGhpcyBoZWxwcyBjb3JyZWN0bHkgdHJhY2sgbG9naW4gY291bnRzLCB0aW1lcyBhbmQgaGVscHMgd2l0aFxuICAgKiByZXBvcnRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0aGF0IHdhcyBsb2dnZWQgaW4uXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhleSBsb2dnZWQgaW50by5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhbGxlcklQQWRkcmVzcyAoT3B0aW9uYWwpIFRoZSBJUCBhZGRyZXNzIG9mIHRoZSBlbmQtdXNlciB0aGF0IGlzIGxvZ2dpbmcgaW4uIElmIGEgbnVsbCB2YWx1ZSBpcyBwcm92aWRlZFxuICAgKiAgICB0aGUgSVAgYWRkcmVzcyB3aWxsIGJlIHRoYXQgb2YgdGhlIGNsaWVudCBvciBsYXN0IHByb3h5IHRoYXQgc2VudCB0aGUgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgbG9naW5QaW5nKHVzZXJJZDogVVVJRCwgYXBwbGljYXRpb25JZDogVVVJRCwgY2FsbGVySVBBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xvZ2luJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpcEFkZHJlc3MnLCBjYWxsZXJJUEFkZHJlc3MpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcGluZyB0byBGdXNpb25BdXRoIGluZGljYXRpbmcgdGhhdCB0aGUgdXNlciB3YXMgYXV0b21hdGljYWxseSBsb2dnZWQgaW50byBhbiBhcHBsaWNhdGlvbi4gV2hlbiB1c2luZ1xuICAgKiBGdXNpb25BdXRoJ3MgU1NPIG9yIHlvdXIgb3duLCB5b3Ugc2hvdWxkIGNhbGwgdGhpcyBpZiB0aGUgdXNlciBpcyBhbHJlYWR5IGxvZ2dlZCBpbiBjZW50cmFsbHksIGJ1dCBhY2Nlc3NlcyBhblxuICAgKiBhcHBsaWNhdGlvbiB3aGVyZSB0aGV5IG5vIGxvbmdlciBoYXZlIGEgc2Vzc2lvbi4gVGhpcyBoZWxwcyBjb3JyZWN0bHkgdHJhY2sgbG9naW4gY291bnRzLCB0aW1lcyBhbmQgaGVscHMgd2l0aFxuICAgKiByZXBvcnRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7TG9naW5QaW5nUmVxdWVzdH0gcmVxdWVzdCBUaGUgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNyZWRlbnRpYWxzIHVzZWQgdG8gbG9nIHRoZW0gaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvZ2luUGluZ1dpdGhSZXF1ZXN0KHJlcXVlc3Q6IExvZ2luUGluZ1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTG9nb3V0IEFQSSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgcmVmcmVzaCB0b2tlbiBhbmQgYWNjZXNzIHRva2VuIGNvb2tpZXMgaWYgdGhleSBleGlzdCBvbiB0aGVcbiAgICogY2xpZW50IGFuZCByZXZva2UgdGhlIHJlZnJlc2ggdG9rZW4gc3RvcmVkLiBUaGlzIEFQSSBkb2VzIG5vdGhpbmcgaWYgdGhlIHJlcXVlc3QgZG9lcyBub3QgY29udGFpbiBhbiBhY2Nlc3NcbiAgICogdG9rZW4gb3IgcmVmcmVzaCB0b2tlbiBjb29raWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdsb2JhbCBXaGVuIHRoaXMgdmFsdWUgaXMgc2V0IHRvIHRydWUgYWxsIHRoZSByZWZyZXNoIHRva2VucyBpc3N1ZWQgdG8gdGhlIG93bmVyIG9mIHRoZVxuICAgKiAgICBwcm92aWRlZCB0b2tlbiB3aWxsIGJlIHJldm9rZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZyZXNoVG9rZW4gKE9wdGlvbmFsKSBUaGUgcmVmcmVzaF90b2tlbiBhcyBhIHJlcXVlc3QgcGFyYW1ldGVyIGluc3RlYWQgb2YgY29taW5nIGluIHZpYSBhIGNvb2tpZS5cbiAgICogICAgSWYgcHJvdmlkZWQgdGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGNvb2tpZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgbG9nb3V0KGdsb2JhbDogYm9vbGVhbiwgcmVmcmVzaFRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dvdXQnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZ2xvYmFsJywgZ2xvYmFsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVmcmVzaFRva2VuJywgcmVmcmVzaFRva2VuKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExvZ291dCBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZW1vdmUgdGhlIHJlZnJlc2ggdG9rZW4gYW5kIGFjY2VzcyB0b2tlbiBjb29raWVzIGlmIHRoZXkgZXhpc3Qgb24gdGhlXG4gICAqIGNsaWVudCBhbmQgcmV2b2tlIHRoZSByZWZyZXNoIHRva2VuIHN0b3JlZC4gVGhpcyBBUEkgdGFrZXMgdGhlIHJlZnJlc2ggdG9rZW4gaW4gdGhlIEpTT04gYm9keS5cbiAgICpcbiAgICogQHBhcmFtIHtMb2dvdXRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBsb2dvdXQgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGxvZ291dFdpdGhSZXF1ZXN0KHJlcXVlc3Q6IExvZ291dFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dvdXQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYW55IGdsb2JhbCBpZGVudGl0eSBwcm92aWRlcnMgZm9yIHRoZSBnaXZlbiBkb21haW4uIEEgMjAwIHJlc3BvbnNlIGNvZGUgaW5kaWNhdGVzIHRoZSBkb21haW4gaXMgbWFuYWdlZFxuICAgKiBieSBhIHJlZ2lzdGVyZWQgaWRlbnRpdHkgcHJvdmlkZXIuIEEgNDA0IGluZGljYXRlcyB0aGUgZG9tYWluIGlzIG5vdCBtYW5hZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gb3IgZW1haWwgYWRkcmVzcyB0byBsb29rdXAuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvb2t1cFJlc3BvbnNlPj59XG4gICAqL1xuICBsb29rdXBJZGVudGl0eVByb3ZpZGVyKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb29rdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb29rdXBSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9sb29rdXAnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZG9tYWluJywgZG9tYWluKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGlkZW50aXR5IHByb3ZpZGVyIGZvciB0aGUgZ2l2ZW4gZG9tYWluIGFuZCB0ZW5hbnRJZC4gQSAyMDAgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIGRvbWFpbiBpcyBtYW5hZ2VkXG4gICAqIGJ5IGEgcmVnaXN0ZXJlZCBpZGVudGl0eSBwcm92aWRlci4gQSA0MDQgaW5kaWNhdGVzIHRoZSBkb21haW4gaXMgbm90IG1hbmFnZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBvciBlbWFpbCBhZGRyZXNzIHRvIGxvb2t1cC5cbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBJZiBwcm92aWRlZCwgdGhlIEFQSSBzZWFyY2hlcyBmb3IgYW4gaWRlbnRpdHkgcHJvdmlkZXIgc2NvcGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRlbmFudCB0aGF0IG1hbmFnZXMgdGhlIHJlcXVlc3RlZCBkb21haW4uXG4gICAqICAgIElmIG5vIHJlc3VsdCBpcyBmb3VuZCwgdGhlIEFQSSB0aGVuIHNlYXJjaGVzIGZvciBnbG9iYWwgaWRlbnRpdHkgcHJvdmlkZXJzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb29rdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgbG9va3VwSWRlbnRpdHlQcm92aWRlckJ5VGVuYW50SWQoZG9tYWluOiBzdHJpbmcsIHRlbmFudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb29rdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb29rdXBSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9sb29rdXAnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZG9tYWluJywgZG9tYWluKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndGVuYW50SWQnLCB0ZW5hbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogTW9kaWZpZXMgYSB0ZW1wb3JhbCB1c2VyIGFjdGlvbiBieSBjaGFuZ2luZyB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgYWN0aW9uIGFuZCBvcHRpb25hbGx5IGFkZGluZyBhIGNvbW1lbnQgdG8gdGhlXG4gICAqIGFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhY3Rpb25JZCBUaGUgSWQgb2YgdGhlIGFjdGlvbiB0byBtb2RpZnkuIFRoaXMgaXMgdGVjaG5pY2FsbHkgdGhlIHVzZXIgYWN0aW9uIGxvZyBJZC5cbiAgICogQHBhcmFtIHtBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9kaWZpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgbW9kaWZ5QWN0aW9uKGFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgbG9naW4gcmVxdWVzdCB1c2luZyBhIHBhc3N3b3JkbGVzcyBjb2RlXG4gICAqXG4gICAqIEBwYXJhbSB7UGFzc3dvcmRsZXNzTG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSBwYXNzd29yZGxlc3MgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjb21wbGV0ZSBsb2dpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcGFzc3dvcmRsZXNzTG9naW4ocmVxdWVzdDogUGFzc3dvcmRsZXNzTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9wYXNzd29yZGxlc3MvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGFuIEFQSSBrZXkgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBBUEkga2V5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIGFwaSBrZXkgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7QVBJS2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjcmVhdGUgdGhlIEFQSSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEFQSUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogQVBJS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QVBJS2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgYXBwbGljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgYXBwbGljYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgYXBwbGljYXRpb24gcm9sZSB3aXRoIHRoZSBnaXZlbiBJZCBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSByb2xlIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcm9sZUlkIFRoZSBJZCBvZiB0aGUgcm9sZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHJvbGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoQXBwbGljYXRpb25Sb2xlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJvbGVJZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJyb2xlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChyb2xlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBjb25uZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgVGhlIElkIG9mIHRoZSBjb25uZWN0b3IgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0Nvbm5lY3RvclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgY29ubmVjdG9yIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQsIHJlcXVlc3Q6IENvbm5lY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbm5lY3RvcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgY29uc2VudCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgVGhlIElkIG9mIHRoZSBjb25zZW50IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoQ29uc2VudChjb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IENvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBlbWFpbCB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW1haWxUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgZW1haWwgdGVtcGxhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogRW1haWxUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBFbnRpdHkgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW50aXR5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBFbnRpdHkgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEVudGl0eShlbnRpdHlJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBFbnRpdHkgVHlwZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgRW50aXR5IFR5cGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXRjaGVzIHRoZSBwZXJtaXNzaW9uIHdpdGggdGhlIGdpdmVuIElkIGZvciB0aGUgZW50aXR5IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgZW50aXR5VHlwZSB0aGF0IHRoZSBwZXJtaXNzaW9uIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcGVybWlzc2lvbklkIFRoZSBJZCBvZiB0aGUgcGVybWlzc2lvbiB0byBwYXRjaC5cbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBuZXcgcGVybWlzc2lvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEVudGl0eVR5cGVQZXJtaXNzaW9uKGVudGl0eVR5cGVJZDogVVVJRCwgcGVybWlzc2lvbklkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlUeXBlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicGVybWlzc2lvblwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocGVybWlzc2lvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyB0aGUgZm9ybSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmb3JtSWQgVGhlIElkIG9mIHRoZSBmb3JtIHRvIHBhdGNoLlxuICAgKiBAcGFyYW0ge0Zvcm1SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBuZXcgZm9ybSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEZvcm0oZm9ybUlkOiBVVUlELCByZXF1ZXN0OiBGb3JtUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZm9ybUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyB0aGUgZm9ybSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmaWVsZElkIFRoZSBJZCBvZiB0aGUgZm9ybSBmaWVsZCB0byBwYXRjaC5cbiAgICogQHBhcmFtIHtGb3JtRmllbGRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBuZXcgZm9ybSBmaWVsZCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoRm9ybUZpZWxkKGZpZWxkSWQ6IFVVSUQsIHJlcXVlc3Q6IEZvcm1GaWVsZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1GaWVsZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybS9maWVsZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmaWVsZElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgZ3JvdXAgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZ3JvdXBJZCBUaGUgSWQgb2YgdGhlIGdyb3VwIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtHcm91cFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgZ3JvdXAgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoR3JvdXAoZ3JvdXBJZDogVVVJRCwgcmVxdWVzdDogR3JvdXBSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEdyb3VwUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChncm91cElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjY2Vzc0NvbnRyb2xMaXN0SWQgVGhlIElkIG9mIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IHRvIHBhdGNoLlxuICAgKiBAcGFyYW0ge0lQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIG5ldyBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoSVBBY2Nlc3NDb250cm9sTGlzdChhY2Nlc3NDb250cm9sTGlzdElkOiBVVUlELCByZXF1ZXN0OiBJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY2Nlc3NDb250cm9sTGlzdElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIFRoZSBJZCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIHVwZGF0ZWQgaWRlbnRpdHkgcHJvdmlkZXIgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hJZGVudGl0eVByb3ZpZGVyKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCwgcmVxdWVzdDogSWRlbnRpdHlQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBhdmFpbGFibGUgaW50ZWdyYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0ludGVncmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBpbnRlZ3JhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50ZWdyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hJbnRlZ3JhdGlvbnMocmVxdWVzdDogSW50ZWdyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRlZ3JhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEludGVncmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pbnRlZ3JhdGlvbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBsYW1iZGEgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbGFtYmRhSWQgVGhlIElkIG9mIHRoZSBsYW1iZGEgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0xhbWJkYVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgbGFtYmRhIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hMYW1iZGEobGFtYmRhSWQ6IFVVSUQsIHJlcXVlc3Q6IExhbWJkYVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExhbWJkYVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGxhbWJkYUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzYWdlVGVtcGxhdGVJZCBUaGUgSWQgb2YgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge01lc3NhZ2VUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgbWVzc2FnZSB0ZW1wbGF0ZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoTWVzc2FnZVRlbXBsYXRlKG1lc3NhZ2VUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2FnZVRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBtZXNzZW5nZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2VuZ2VySWQgVGhlIElkIG9mIHRoZSBtZXNzZW5nZXIgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge01lc3NlbmdlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgbWVzc2VuZ2VyIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hNZXNzZW5nZXIobWVzc2VuZ2VySWQ6IFVVSUQsIHJlcXVlc3Q6IE1lc3NlbmdlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NlbmdlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NlbmdlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgY3VzdG9tIE9BdXRoIHNjb3BlIHdpdGggdGhlIGdpdmVuIElkIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIE9BdXRoIHNjb3BlIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gc2NvcGVJZCBUaGUgSWQgb2YgdGhlIE9BdXRoIHNjb3BlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IE9BdXRoIHNjb3BlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hPQXV0aFNjb3BlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHNjb3BlSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwic2NvcGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHNjb3BlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSByZWdpc3RyYXRpb24gZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkIGFuZCB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBpbiB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHdob3NlIHJlZ2lzdHJhdGlvbiBpcyBnb2luZyB0byBiZSB1cGRhdGVkLlxuICAgKiBAcGFyYW0ge1JlZ2lzdHJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hSZWdpc3RyYXRpb24odXNlcklkOiBVVUlELCByZXF1ZXN0OiBSZWdpc3RyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1N5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHN5c3RlbSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoU3lzdGVtQ29uZmlndXJhdGlvbihyZXF1ZXN0OiBTeXN0ZW1Db25maWd1cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS1jb25maWd1cmF0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHRlbmFudCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VGVuYW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB0ZW5hbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFRlbmFudCh0ZW5hbnRJZDogVVVJRCwgcmVxdWVzdDogVGVuYW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSB0aGVtZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0aGVtZUlkIFRoZSBJZCBvZiB0aGUgdGhlbWUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1RoZW1lUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB0aGVtZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hUaGVtZSh0aGVtZUlkOiBVVUlELCByZXF1ZXN0OiBUaGVtZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRoZW1lSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHVzZXIgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hVc2VyKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVXNlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHVzZXIgYWN0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtVc2VyQWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB1c2VyIGFjdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZWFzb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHVzZXIgYWN0aW9uIHJlYXNvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVhc29uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIGEgc2luZ2xlIFVzZXIgY29uc2VudCBieSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIFRoZSBVc2VyIENvbnNlbnQgSWRcbiAgICogQHBhcmFtIHtVc2VyQ29uc2VudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgdXNlciBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFVzZXJDb25zZW50KHVzZXJDb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJDb25zZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJDb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXRjaGVzIHRoZSB3ZWJob29rIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHdlYmhvb2tJZCBUaGUgSWQgb2YgdGhlIHdlYmhvb2sgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1dlYmhvb2tSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIG5ldyB3ZWJob29rIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoV2ViaG9vayh3ZWJob29rSWQ6IFVVSUQsIHJlcXVlc3Q6IFdlYmhvb2tSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViaG9vaycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh3ZWJob29rSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFjdGl2YXRlcyB0aGUgYXBwbGljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHJlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlYWN0aXZhdGVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVhY3RpdmF0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZhdGVzIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gcmVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZWFjdGl2YXRlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlYWN0aXZhdGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFjdGl2YXRlcyB0aGUgdXNlciBhY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gdG8gcmVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZWFjdGl2YXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWFjdGl2YXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb25jaWxlIGEgVXNlciB0byBGdXNpb25BdXRoIHVzaW5nIEpXVCBpc3N1ZWQgZnJvbSBhbm90aGVyIElkZW50aXR5IFByb3ZpZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlY29uY2lsZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgdG8gcmVjb25jaWxlIHRoZSBVc2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICByZWNvbmNpbGVKV1QocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlY29uY2lsZScpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgYSByZWZyZXNoIG9mIHRoZSBFbnRpdHkgc2VhcmNoIGluZGV4LiBUaGlzIEFQSSBpcyBub3QgZ2VuZXJhbGx5IG5lY2Vzc2FyeSBhbmQgdGhlIHNlYXJjaCBpbmRleCB3aWxsIGJlY29tZSBjb25zaXN0ZW50IGluIGFcbiAgICogcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZS4gVGhlcmUgbWF5IGJlIHNjZW5hcmlvcyB3aGVyZSB5b3UgbWF5IHdpc2ggdG8gbWFudWFsbHkgcmVxdWVzdCBhbiBpbmRleCByZWZyZXNoLiBPbmUgZXhhbXBsZSBtYXkgYmUgXG4gICAqIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNlYXJjaCBBUEkgb3IgRGVsZXRlIFRlbmFudCBBUEkgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGEgRW50aXR5IENyZWF0ZSBldGMsIHlvdSBtYXkgd2lzaCB0byByZXF1ZXN0IGEgcmVmcmVzaCB0b1xuICAgKiAgZW5zdXJlIHRoZSBpbmRleCBpbW1lZGlhdGVseSBjdXJyZW50IGJlZm9yZSBtYWtpbmcgYSBxdWVyeSByZXF1ZXN0IHRvIHRoZSBzZWFyY2ggaW5kZXguXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlZnJlc2hFbnRpdHlTZWFyY2hJbmRleCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvc2VhcmNoJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBhIHJlZnJlc2ggb2YgdGhlIFVzZXIgc2VhcmNoIGluZGV4LiBUaGlzIEFQSSBpcyBub3QgZ2VuZXJhbGx5IG5lY2Vzc2FyeSBhbmQgdGhlIHNlYXJjaCBpbmRleCB3aWxsIGJlY29tZSBjb25zaXN0ZW50IGluIGFcbiAgICogcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZS4gVGhlcmUgbWF5IGJlIHNjZW5hcmlvcyB3aGVyZSB5b3UgbWF5IHdpc2ggdG8gbWFudWFsbHkgcmVxdWVzdCBhbiBpbmRleCByZWZyZXNoLiBPbmUgZXhhbXBsZSBtYXkgYmUgXG4gICAqIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNlYXJjaCBBUEkgb3IgRGVsZXRlIFRlbmFudCBBUEkgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGEgVXNlciBDcmVhdGUgZXRjLCB5b3UgbWF5IHdpc2ggdG8gcmVxdWVzdCBhIHJlZnJlc2ggdG9cbiAgICogIGVuc3VyZSB0aGUgaW5kZXggaW1tZWRpYXRlbHkgY3VycmVudCBiZWZvcmUgbWFraW5nIGEgcXVlcnkgcmVxdWVzdCB0byB0aGUgc2VhcmNoIGluZGV4LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZWZyZXNoVXNlclNlYXJjaEluZGV4KCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnZW5lcmF0ZXMgYW55IGtleXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZWdlbmVyYXRlUmVhY3RvcktleXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHVzZXIgZm9yIGFuIGFwcGxpY2F0aW9uLiBJZiB5b3UgcHJvdmlkZSB0aGUgVXNlciBhbmQgdGhlIFVzZXJSZWdpc3RyYXRpb24gb2JqZWN0IG9uIHRoaXMgcmVxdWVzdCwgaXRcbiAgICogd2lsbCBjcmVhdGUgdGhlIHVzZXIgYXMgd2VsbCBhcyByZWdpc3RlciB0aGVtIGZvciB0aGUgYXBwbGljYXRpb24uIFRoaXMgaXMgY2FsbGVkIGEgRnVsbCBSZWdpc3RyYXRpb24uIEhvd2V2ZXIsIGlmXG4gICAqIHlvdSBvbmx5IHByb3ZpZGUgdGhlIFVzZXJSZWdpc3RyYXRpb24gb2JqZWN0LCB0aGVuIHRoZSB1c2VyIG11c3QgYWxyZWFkeSBleGlzdCBhbmQgdGhleSB3aWxsIGJlIHJlZ2lzdGVyZWQgZm9yIHRoZVxuICAgKiBhcHBsaWNhdGlvbi4gVGhlIHVzZXIgSWQgY2FuIGFsc28gYmUgcHJvdmlkZWQgYW5kIGl0IHdpbGwgZWl0aGVyIGJlIHVzZWQgdG8gbG9vayB1cCBhbiBleGlzdGluZyB1c2VyIG9yIGl0IHdpbGwgYmVcbiAgICogdXNlZCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgVXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHVzZXIgYmVpbmcgcmVnaXN0ZXJlZCBmb3IgdGhlIGFwcGxpY2F0aW9uIGFuZCBvcHRpb25hbGx5IGNyZWF0ZWQuXG4gICAqIEBwYXJhbSB7UmVnaXN0cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IG9wdGlvbmFsbHkgY29udGFpbnMgdGhlIFVzZXIgYW5kIG11c3QgY29udGFpbiB0aGUgVXNlclJlZ2lzdHJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlZ2lzdGVyKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogUmVnaXN0cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVnaXN0cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3RzIEVsYXN0aWNzZWFyY2ggdG8gZGVsZXRlIGFuZCByZWJ1aWxkIHRoZSBpbmRleCBmb3IgRnVzaW9uQXV0aCB1c2VycyBvciBlbnRpdGllcy4gQmUgdmVyeSBjYXJlZnVsIHdoZW4gcnVubmluZyB0aGlzIHJlcXVlc3QgYXMgaXQgd2lsbCBcbiAgICogaW5jcmVhc2UgdGhlIENQVSBhbmQgSS9PIGxvYWQgb24geW91ciBkYXRhYmFzZSB1bnRpbCB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcy4gR2VuZXJhbGx5IHNwZWFraW5nIHlvdSBkbyBub3QgZXZlciBuZWVkIHRvIHJ1biB0aGlzIG9wZXJhdGlvbiB1bmxlc3MgXG4gICAqIGluc3RydWN0ZWQgYnkgRnVzaW9uQXV0aCBzdXBwb3J0LCBvciBpZiB5b3UgYXJlIG1pZ3JhdGluZyBhIGRhdGFiYXNlIGFub3RoZXIgc3lzdGVtIGFuZCB5b3UgYXJlIG5vdCBicmluaW5nIGFsb25nIHRoZSBFbGFzdGljc2VhcmNoIGluZGV4LiBcbiAgICogXG4gICAqIFlvdSBoYXZlIGJlZW4gd2FybmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlaW5kZXhSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGluZGV4IG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlaW5kZXgocmVxdWVzdDogUmVpbmRleFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9yZWluZGV4JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHVzZXIgZnJvbSB0aGUgZmFtaWx5IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIFRoZSBJZCBvZiB0aGUgZmFtaWx5IHRvIHJlbW92ZSB0aGUgdXNlciBmcm9tLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gcmVtb3ZlIGZyb20gdGhlIGZhbWlseS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmVtb3ZlVXNlckZyb21GYW1pbHkoZmFtaWx5SWQ6IFVVSUQsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmFtaWx5SWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLXNlbmRzIHRoZSB2ZXJpZmljYXRpb24gZW1haWwgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+fVxuICAgKi9cbiAgcmVzZW5kRW1haWxWZXJpZmljYXRpb24oZW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlFbWFpbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmUtc2VuZHMgdGhlIHZlcmlmaWNhdGlvbiBlbWFpbCB0byB0aGUgdXNlci4gSWYgdGhlIEFwcGxpY2F0aW9uIGhhcyBjb25maWd1cmVkIGEgc3BlY2lmaWMgZW1haWwgdGVtcGxhdGUgdGhpcyB3aWxsIGJlIHVzZWRcbiAgICogaW5zdGVhZCBvZiB0aGUgdGVuYW50IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgdW5pcXVlIEFwcGxpY2F0aW9uIElkIHRvIHVzZWQgdG8gcmVzb2x2ZSBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBlbWFpbCB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj59XG4gICAqL1xuICByZXNlbmRFbWFpbFZlcmlmaWNhdGlvbldpdGhBcHBsaWNhdGlvblRlbXBsYXRlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyaWZ5RW1haWxSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmUtc2VuZHMgdGhlIGFwcGxpY2F0aW9uIHJlZ2lzdHJhdGlvbiB2ZXJpZmljYXRpb24gZW1haWwgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gYmUgdmVyaWZpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXNlbmRSZWdpc3RyYXRpb25WZXJpZmljYXRpb24oZW1haWw6IHN0cmluZywgYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYW4gYXV0aGVudGljYXRpb24gQVBJIGtleSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUgQVBJIGtleSB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQVBJS2V5KGtleUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBUElLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwaS1rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSBhY3Rpb24gbG9nICh0aGUgbG9nIG9mIGEgdXNlciBhY3Rpb24gdGhhdCB3YXMgdGFrZW4gb24gYSB1c2VyIHByZXZpb3VzbHkpIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYWN0aW9uSWQgVGhlIElkIG9mIHRoZSBhY3Rpb24gdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFjdGlvbihhY3Rpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY3Rpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuIFRoaXMgd2lsbCByZXR1cm4gYWxsIHRpbWUgYmFzZWQgYWN0aW9ucyB0aGF0IGFyZSBhY3RpdmUsXG4gICAqIGFuZCBpbmFjdGl2ZSBhcyB3ZWxsIGFzIG5vbi10aW1lIGJhc2VkIGFjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBmZXRjaCB0aGUgYWN0aW9ucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFjdGlvbnModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQgdGhhdCBhcmUgY3VycmVudGx5IHByZXZlbnRpbmcgdGhlIFVzZXIgZnJvbSBsb2dnaW5nIGluLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZmV0Y2ggdGhlIGFjdGlvbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3Rpb25zUHJldmVudGluZ0xvZ2luKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdwcmV2ZW50aW5nTG9naW4nLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZCB0aGF0IGFyZSBjdXJyZW50bHkgYWN0aXZlLlxuICAgKiBBbiBhY3RpdmUgYWN0aW9uIG1lYW5zIG9uZSB0aGF0IGlzIHRpbWUgYmFzZWQgYW5kIGhhcyBub3QgYmVlbiBjYW5jZWxlZCwgYW5kIGhhcyBub3QgZW5kZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBmZXRjaCB0aGUgYWN0aW9ucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFjdGl2ZUFjdGlvbnModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FjdGl2ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYXBwbGljYXRpb24gZm9yIHRoZSBnaXZlbiBJZCBvciBhbGwgdGhlIGFwcGxpY2F0aW9ucyBpZiB0aGUgSWQgaXMgbnVsbC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIElkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBhcHBsaWNhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQXBwbGljYXRpb25zKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIGF1ZGl0IGxvZyBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXVkaXRMb2dJZCBUaGUgSWQgb2YgdGhlIGF1ZGl0IGxvZyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXVkaXRMb2dSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBdWRpdExvZyhhdWRpdExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXVkaXRMb2dSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9hdWRpdC1sb2cnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXVkaXRMb2dJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjb25uZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgVGhlIElkIG9mIHRoZSBjb25uZWN0b3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUNvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbm5lY3RvcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBjb25uZWN0b3JzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVDb25uZWN0b3JzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBDb25zZW50IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29uc2VudElkIFRoZSBJZCBvZiB0aGUgY29uc2VudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUNvbnNlbnQoY29uc2VudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29uc2VudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBjb25zZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQ29uc2VudHMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2NvbnNlbnQnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGRhaWx5IGFjdGl2ZSB1c2VyIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIElkLCBpdCB3aWxsIG9ubHlcbiAgICogcmV0dXJuIHRoZSBkYWlseSBhY3RpdmUgY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gSWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxEYWlseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVEYWlseUFjdGl2ZVJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RGFpbHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RGFpbHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvZGFpbHktYWN0aXZlLXVzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGVtYWlsIHRlbXBsYXRlIGZvciB0aGUgZ2l2ZW4gSWQuIElmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBJZCwgdGhpcyB3aWxsIHJldHVybiBhbGwgdGhlIGVtYWlsIHRlbXBsYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIGVtYWlsIHRlbXBsYXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+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+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndHlwZScsIHR5cGUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbG9naW4gcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cy4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gSWQsIGl0IHdpbGwgb25seSByZXR1cm4gdGhlXG4gICAqIGxvZ2luIGNvdW50cyBmb3IgdGhhdCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIElkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVMb2dpblJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb2dpblJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L2xvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBtZXNzYWdlIHRlbXBsYXRlIGZvciB0aGUgZ2l2ZW4gSWQuIElmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBJZCwgdGhpcyB3aWxsIHJldHVybiBhbGwgdGhlIG1lc3NhZ2UgdGVtcGxhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NhZ2VUZW1wbGF0ZUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBtZXNzYWdlIHRlbXBsYXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzYWdlVGVtcGxhdGUobWVzc2FnZVRlbXBsYXRlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2FnZVRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwcmV2aWV3IG9mIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LCBub3JtYWxpemVkIHRvIGEgZ2l2ZW4gbG9jYWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge1ByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGVtYWlsIHRlbXBsYXRlIGFuZCBvcHRpb25hbGx5IGEgbG9jYWxlIHRvIHJlbmRlciBpdCBpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NhZ2VUZW1wbGF0ZVByZXZpZXcocmVxdWVzdDogUHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlL3ByZXZpZXcnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBtZXNzYWdlIHRlbXBsYXRlcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTWVzc2FnZVRlbXBsYXRlcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIG1lc3NlbmdlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzZW5nZXJJZCBUaGUgSWQgb2YgdGhlIG1lc3Nlbmdlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzZW5nZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2VuZ2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIG1lc3NlbmdlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NlbmdlcnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzZW5nZXInKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIG1vbnRobHkgYWN0aXZlIHVzZXIgcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cy4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gSWQsIGl0IHdpbGwgb25seVxuICAgKiByZXR1cm4gdGhlIG1vbnRobHkgYWN0aXZlIGNvdW50cyBmb3IgdGhhdCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIElkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TW9udGhseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNb250aGx5QWN0aXZlUmVwb3J0KGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNb250aGx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1vbnRobHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvbW9udGhseS1hY3RpdmUtdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGN1c3RvbSBPQXV0aCBzY29wZS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB0aGUgT0F1dGggc2NvcGUgYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSBzY29wZUlkIFRoZSBJZCBvZiB0aGUgT0F1dGggc2NvcGUgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU9BdXRoU2NvcGUoYXBwbGljYXRpb25JZDogVVVJRCwgc2NvcGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25PQXV0aFNjb3BlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25PQXV0aFNjb3BlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJzY29wZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoc2NvcGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBPYXV0aDIgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uIGZvciB0aGUgZ2l2ZW4gQXBwbGljYXRpb24gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIEFwcGxpY2F0aW9uIHRvIHJldHJpZXZlIE9BdXRoIGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE9BdXRoQ29uZmlndXJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU9hdXRoQ29uZmlndXJhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxPQXV0aENvbmZpZ3VyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxPQXV0aENvbmZpZ3VyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcIm9hdXRoLWNvbmZpZ3VyYXRpb25cIilcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2VsbCBrbm93biBPcGVuSUQgQ29uZmlndXJhdGlvbiBKU09OIGRvY3VtZW50XG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE9wZW5JZENvbmZpZ3VyYXRpb24+Pn1cbiAgICovXG4gIHJldHJpZXZlT3BlbklkQ29uZmlndXJhdGlvbigpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE9wZW5JZENvbmZpZ3VyYXRpb24+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8T3BlbklkQ29uZmlndXJhdGlvbiwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCB2YWxpZGF0aW9uIHJ1bGVzIGZvciBhIHNwZWNpZmljIHRlbmFudC4gVGhpcyBtZXRob2QgcmVxdWlyZXMgYSB0ZW5hbnRJZCB0byBiZSBwcm92aWRlZCBcbiAgICogdGhyb3VnaCB0aGUgdXNlIG9mIGEgVGVuYW50IHNjb3BlZCBBUEkga2V5IG9yIGFuIEhUVFAgaGVhZGVyIFgtRnVzaW9uQXV0aC1UZW5hbnRJZCB0byBzcGVjaWZ5IHRoZSBUZW5hbnQgSWQuXG4gICAqIFxuICAgKiBUaGlzIEFQSSBkb2VzIG5vdCByZXF1aXJlIGFuIEFQSSBrZXkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50L3Bhc3N3b3JkLXZhbGlkYXRpb24tcnVsZXMnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIHZhbGlkYXRpb24gcnVsZXMgZm9yIGEgc3BlY2lmaWMgdGVuYW50LlxuICAgKiBcbiAgICogVGhpcyBBUEkgZG9lcyBub3QgcmVxdWlyZSBhbiBBUEkga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzV2l0aFRlbmFudElkKHRlbmFudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50L3Bhc3N3b3JkLXZhbGlkYXRpb24tcnVsZXMnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNoaWxkcmVuIGZvciB0aGUgZ2l2ZW4gcGFyZW50IGVtYWlsIGFkZHJlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRFbWFpbCBUaGUgZW1haWwgb2YgdGhlIHBhcmVudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UGVuZGluZ1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVBlbmRpbmdDaGlsZHJlbihwYXJlbnRFbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQZW5kaW5nUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UGVuZGluZ1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHkvcGVuZGluZycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdwYXJlbnRFbWFpbCcsIHBhcmVudEVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHBlbmRpbmcgaWRlbnRpdHkgcHJvdmlkZXIgbGluay4gVGhpcyBpcyB1c2VmdWwgdG8gdmFsaWRhdGUgYSBwZW5kaW5nIGxpbmsgYW5kIHJldHJpZXZlIG1ldGEtZGF0YSBhYm91dCB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgbGluay5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBlbmRpbmdMaW5rSWQgVGhlIHBlbmRpbmcgbGluayBJZC5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIG9wdGlvbmFsIHVzZXJJZC4gV2hlbiBwcm92aWRlZCBhZGRpdGlvbmFsIG1ldGEtZGF0YSB3aWxsIGJlIHByb3ZpZGVkIHRvIGlkZW50aWZ5IGhvdyBtYW55IGxpbmtzIGlmIGFueSB0aGUgdXNlciBhbHJlYWR5IGhhcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclBlbmRpbmdMaW5rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUGVuZGluZ0xpbmsocGVuZGluZ0xpbmtJZDogc3RyaW5nLCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJQZW5kaW5nTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJQZW5kaW5nTGlua1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbGluay9wZW5kaW5nJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHBlbmRpbmdMaW5rSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yIG1ldHJpY3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlYWN0b3JNZXRyaWNzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVhY3Rvck1ldHJpY3MoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yTWV0cmljc1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlYWN0b3JNZXRyaWNzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3Rvci9tZXRyaWNzJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBGdXNpb25BdXRoIFJlYWN0b3Igc3RhdHVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVhY3RvclN0YXR1cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlYWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWFjdG9yUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGFzdCBudW1iZXIgb2YgbG9naW4gcmVjb3Jkcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgaW5pdGlhbCByZWNvcmQuIGUuZy4gMCBpcyB0aGUgbGFzdCBsb2dpbiwgMTAwIHdpbGwgYmUgdGhlIDEwMHRoIG1vc3QgcmVjZW50IGxvZ2luLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgKE9wdGlvbmFsLCBkZWZhdWx0cyB0byAxMCkgVGhlIG51bWJlciBvZiByZWNvcmRzIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWNlbnRMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlY2VudExvZ2lucyhvZmZzZXQ6IG51bWJlciwgbGltaXQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWNlbnRMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWNlbnQtbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignb2Zmc2V0Jywgb2Zmc2V0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbGltaXQnLCBsaW1pdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIHJlZnJlc2ggdG9rZW4gYnkgdW5pcXVlIElkLiBUaGlzIGlzIG5vdCB0aGUgc2FtZSB0aGluZyBhcyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSByZWZyZXNoIHRva2VuLiBJZiB5b3UgaGF2ZSB0aGF0LCB5b3UgYWxyZWFkeSBoYXZlIHdoYXQgeW91IG5lZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdG9rZW5JZCBUaGUgSWQgb2YgdGhlIHRva2VuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWZyZXNoVG9rZW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWZyZXNoVG9rZW5CeUlkKHRva2VuSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZnJlc2hUb2tlblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZnJlc2hUb2tlblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodG9rZW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSByZWZyZXNoIHRva2VucyB0aGF0IGJlbG9uZyB0byB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWZyZXNoVG9rZW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWZyZXNoVG9rZW5zKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVmcmVzaFRva2VuUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVmcmVzaFRva2VuUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciByZWdpc3RyYXRpb24gZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkIGFuZCB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlZ2lzdHJhdGlvbih1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSByZWdpc3RyYXRpb24gcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cy4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gSWQsIGl0IHdpbGwgb25seSByZXR1cm5cbiAgICogdGhlIHJlZ2lzdHJhdGlvbiBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBJZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlZ2lzdHJhdGlvblJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVnaXN0cmF0aW9uUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHN0YXR1cyBvZiBhIHJlLWluZGV4IHByb2Nlc3MuIEEgc3RhdHVzIGNvZGUgb2YgMjAwIGluZGljYXRlcyB0aGUgcmUtaW5kZXggaXMgaW4gcHJvZ3Jlc3MsIGEgc3RhdHVzIGNvZGUgb2YgIFxuICAgKiA0MDQgaW5kaWNhdGVzIG5vIHJlLWluZGV4IGlzIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXRyaWV2ZVJlaW5kZXhTdGF0dXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vcmVpbmRleCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVTeXN0ZW1Db25maWd1cmF0aW9uKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0tY29uZmlndXJhdGlvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRnVzaW9uQXV0aCBzeXN0ZW0gaGVhbHRoLiBUaGlzIEFQSSB3aWxsIHJldHVybiAyMDAgaWYgdGhlIHN5c3RlbSBpcyBoZWFsdGh5LCBhbmQgNTAwIGlmIHRoZSBzeXN0ZW0gaXMgdW4taGVhbHRoeS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV0cmlldmVTeXN0ZW1IZWFsdGgoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaGVhbHRoJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBGdXNpb25BdXRoIHN5c3RlbSBzdGF0dXMuIFRoaXMgcmVxdWVzdCBpcyBhbm9ueW1vdXMgYW5kIGRvZXMgbm90IHJlcXVpcmUgYW4gQVBJIGtleS4gV2hlbiBhbiBBUEkga2V5IGlzIG5vdCBwcm92aWRlZCB0aGUgcmVzcG9uc2Ugd2lsbCBjb250YWluIGEgc2luZ2xlIHZhbHVlIGluIHRoZSBKU09OIHJlc3BvbnNlIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgaGVhbHRoIGNoZWNrLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTdGF0dXNSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVTeXN0ZW1TdGF0dXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTdGF0dXNSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxTdGF0dXNSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zdGF0dXMnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEZ1c2lvbkF1dGggc3lzdGVtIHN0YXR1cyB1c2luZyBhbiBBUEkga2V5LiBVc2luZyBhbiBBUEkga2V5IHdpbGwgY2F1c2UgdGhlIHJlc3BvbnNlIHRvIGluY2x1ZGUgdGhlIHByb2R1Y3QgdmVyc2lvbiwgaGVhbHRoIGNoZWNrcyBhbmQgdmFyaW91cyBydW50aW1lIG1ldHJpY3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFN0YXR1c1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVN5c3RlbVN0YXR1c1VzaW5nQVBJS2V5KCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U3RhdHVzUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U3RhdHVzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3RhdHVzJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB0ZW5hbnQgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVGVuYW50KHRlbmFudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdGVuYW50cy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVGVuYW50cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRlbmFudFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdGhlbWUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0aGVtZUlkIFRoZSBJZCBvZiB0aGUgdGhlbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVGhlbWUodGhlbWVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUaGVtZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGhlbWVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdGhlbWVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRoZW1lcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdG90YWxzIHJlcG9ydC4gVGhpcyBjb250YWlucyBhbGwgdGhlIHRvdGFsIGNvdW50cyBmb3IgZWFjaCBhcHBsaWNhdGlvbiBhbmQgdGhlIGdsb2JhbCByZWdpc3RyYXRpb25cbiAgICogY291bnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRvdGFsc1JlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRvdGFsUmVwb3J0KCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VG90YWxzUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VG90YWxzUmVwb3J0UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L3RvdGFscycpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdG90YWxzIHJlcG9ydC4gVGhpcyBhbGxvd3MgZXhjbHVkaW5nIGFwcGxpY2F0aW9uVG90YWxzIGZyb20gdGhlIHJlcG9ydC4gQW4gZW1wdHkgbGlzdCB3aWxsIGluY2x1ZGUgdGhlIGFwcGxpY2F0aW9uVG90YWxzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZz59IGV4Y2x1ZGVzIExpc3Qgb2YgZmllbGRzIHRvIGV4Y2x1ZGUgaW4gdGhlIHJlc3BvbnNlLiBDdXJyZW50bHkgb25seSBhbGxvd3MgYXBwbGljYXRpb25Ub3RhbHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRvdGFsc1JlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRvdGFsUmVwb3J0V2l0aEV4Y2x1ZGVzKGV4Y2x1ZGVzOiBBcnJheTxTdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUb3RhbHNSZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUb3RhbHNSZXBvcnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvdG90YWxzJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2V4Y2x1ZGVzJywgZXhjbHVkZXMpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHR3by1mYWN0b3IgcmVjb3ZlcnkgY29kZXMgZm9yIGEgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIHJldHJpZXZlIFR3byBGYWN0b3IgcmVjb3ZlcnkgY29kZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVR3b0ZhY3RvclJlY292ZXJ5Q29kZXModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdHdvLWZhY3Rvci9yZWNvdmVyeS1jb2RlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSB1c2VyJ3MgdHdvLWZhY3RvciBzdGF0dXMuXG4gICAqIFxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNlZSBpZiBhIHVzZXIgd2lsbCBuZWVkIHRvIGNvbXBsZXRlIGEgdHdvLWZhY3RvciBjaGFsbGVuZ2UgdG8gY29tcGxldGUgYSBsb2dpbixcbiAgICogYW5kIG9wdGlvbmFsbHkgaWRlbnRpZnkgdGhlIHN0YXRlIG9mIHRoZSB0d28tZmFjdG9yIHRydXN0IGFjcm9zcyB2YXJpb3VzIGFwcGxpY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVzZXIgSWQgdG8gcmV0cmlldmUgdGhlIFR3by1GYWN0b3Igc3RhdHVzLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIG9wdGlvbmFsIGFwcGxpY2F0aW9uSWQgdG8gdmVyaWZ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHdvRmFjdG9yVHJ1c3RJZCBUaGUgb3B0aW9uYWwgdHdvLWZhY3RvciB0cnVzdCBJZCB0byB2ZXJpZnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVR3b0ZhY3RvclN0YXR1cyh1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHR3b0ZhY3RvclRydXN0SWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yU3RhdHVzUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yU3RhdHVzUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3N0YXR1cycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHR3b0ZhY3RvclRydXN0SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgdXNlcidzIHR3by1mYWN0b3Igc3RhdHVzLlxuICAgKiBcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBzZWUgaWYgYSB1c2VyIHdpbGwgbmVlZCB0byBjb21wbGV0ZSBhIHR3by1mYWN0b3IgY2hhbGxlbmdlIHRvIGNvbXBsZXRlIGEgbG9naW4sXG4gICAqIGFuZCBvcHRpb25hbGx5IGlkZW50aWZ5IHRoZSBzdGF0ZSBvZiB0aGUgdHdvLWZhY3RvciB0cnVzdCBhY3Jvc3MgdmFyaW91cyBhcHBsaWNhdGlvbnMuIFRoaXMgb3BlcmF0aW9uXG4gICAqIHByb3ZpZGVzIG1vcmUgcGF5bG9hZCBvcHRpb25zIHRoYW4gcmV0cmlldmVUd29GYWN0b3JTdGF0dXMuXG4gICAqXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yU3RhdHVzUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY2hlY2sgdGhlIHN0YXR1cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yU3RhdHVzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVHdvRmFjdG9yU3RhdHVzV2l0aFJlcXVlc3QocmVxdWVzdDogVHdvRmFjdG9yU3RhdHVzUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yU3RhdHVzUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yU3RhdHVzUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3N0YXR1cycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgYWN0aW9uIGZvciB0aGUgZ2l2ZW4gSWQuIElmIHlvdSBwYXNzIGluIG51bGwgZm9yIHRoZSBJZCwgdGhpcyB3aWxsIHJldHVybiBhbGwgdGhlIHVzZXJcbiAgICogYWN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgcGFzcyBpbiBudWxsIGZvciB0aGUgSWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIHRoZSB1c2VyXG4gICAqIGFjdGlvbiByZWFzb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25SZWFzb25JZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gcmVhc29uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckFjdGlvblJlYXNvbih1c2VyQWN0aW9uUmVhc29uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25SZWFzb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdXNlciBhY3Rpb24gcmVhc29ucy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb25SZWFzb25zKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbi1yZWFzb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB1c2VyIGFjdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQWN0aW9ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgYnkgYSBjaGFuZ2UgcGFzc3dvcmQgSWQuIFRoZSBpbnRlbmRlZCB1c2Ugb2YgdGhpcyBBUEkgaXMgdG8gcmV0cmlldmUgYSB1c2VyIGFmdGVyIHRoZSBmb3Jnb3RcbiAgICogcGFzc3dvcmQgd29ya2Zsb3cgaGFzIGJlZW4gaW5pdGlhdGVkIGFuZCB5b3UgbWF5IG5vdCBrbm93IHRoZSB1c2VyJ3MgZW1haWwgb3IgdXNlcm5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFuZ2VQYXNzd29yZElkIFRoZSB1bmlxdWUgY2hhbmdlIHBhc3N3b3JkIElkIHRoYXQgd2FzIHNlbnQgdmlhIGVtYWlsIG9yIHJldHVybmVkIGJ5IHRoZSBGb3Jnb3QgUGFzc3dvcmQgQVBJLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckJ5Q2hhbmdlUGFzc3dvcmRJZChjaGFuZ2VQYXNzd29yZElkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2NoYW5nZVBhc3N3b3JkSWQnLCBjaGFuZ2VQYXNzd29yZElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiBlbWFpbC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUVtYWlsKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBmb3IgdGhlIGxvZ2luSWQuIFRoZSBsb2dpbklkIGNhbiBiZSBlaXRoZXIgdGhlIHVzZXJuYW1lIG9yIHRoZSBlbWFpbC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2luSWQgVGhlIGVtYWlsIG9yIHVzZXJuYW1lIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckJ5TG9naW5JZChsb2dpbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWQnLCBsb2dpbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBsb2dpbklkLCB1c2luZyBzcGVjaWZpYyBsb2dpbklkVHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBlbWFpbCBvciB1c2VybmFtZSBvZiB0aGUgdXNlci5cbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmc+fSBsb2dpbklkVHlwZXMgVGhlIGlkZW50aXR5IHR5cGVzIHRoYXQgRnVzaW9uQXV0aCB3aWxsIGNvbXBhcmUgdGhlIGxvZ2luSWQgdG8uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlMb2dpbklkV2l0aExvZ2luSWRUeXBlcyhsb2dpbklkOiBzdHJpbmcsIGxvZ2luSWRUeXBlczogQXJyYXk8U3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbG9naW5JZCcsIGxvZ2luSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkVHlwZXMnLCBsb2dpbklkVHlwZXMpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBmb3IgdGhlIGdpdmVuIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcm5hbWUgVGhlIHVzZXJuYW1lIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckJ5VXNlcm5hbWUodXNlcm5hbWU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcm5hbWUnLCB1c2VybmFtZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGJ5IGEgdmVyaWZpY2F0aW9uSWQuIFRoZSBpbnRlbmRlZCB1c2Ugb2YgdGhpcyBBUEkgaXMgdG8gcmV0cmlldmUgYSB1c2VyIGFmdGVyIHRoZSBmb3Jnb3RcbiAgICogcGFzc3dvcmQgd29ya2Zsb3cgaGFzIGJlZW4gaW5pdGlhdGVkIGFuZCB5b3UgbWF5IG5vdCBrbm93IHRoZSB1c2VyJ3MgZW1haWwgb3IgdXNlcm5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJpZmljYXRpb25JZCBUaGUgdW5pcXVlIHZlcmlmaWNhdGlvbiBJZCB0aGF0IGhhcyBiZWVuIHNldCBvbiB0aGUgdXNlciBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlWZXJpZmljYXRpb25JZCh2ZXJpZmljYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd2ZXJpZmljYXRpb25JZCcsIHZlcmlmaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHVzZXJfY29kZSB0aGF0IGlzIHBhcnQgb2YgYW4gaW4tcHJvZ3Jlc3MgRGV2aWNlIEF1dGhvcml6YXRpb24gR3JhbnQuXG4gICAqIFxuICAgKiBUaGlzIEFQSSBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gYnVpbGQgeW91ciBvd24gbG9naW4gd29ya2Zsb3cgdG8gY29tcGxldGUgYSBkZXZpY2UgZ3JhbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgVGhlIGNsaWVudCBJZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgVGhlIGNsaWVudCBJZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJfY29kZSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckNvZGUoY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgdXNlcl9jb2RlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvZGV2aWNlL3VzZXItY29kZScpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSB1c2VyX2NvZGUgdGhhdCBpcyBwYXJ0IG9mIGFuIGluLXByb2dyZXNzIERldmljZSBBdXRob3JpemF0aW9uIEdyYW50LlxuICAgKiBcbiAgICogVGhpcyBBUEkgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHlvdXIgb3duIGxvZ2luIHdvcmtmbG93IHRvIGNvbXBsZXRlIGEgZGV2aWNlIGdyYW50LlxuICAgKiBcbiAgICogVGhpcyByZXF1ZXN0IHdpbGwgcmVxdWlyZSBhbiBBUEkga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIFRoZSBlbmQtdXNlciB2ZXJpZmljYXRpb24gY29kZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29kZVVzaW5nQVBJS2V5KHVzZXJfY29kZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ3VzZXJfY29kZScsIHVzZXJfY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9kZXZpY2UvdXNlci1jb2RlJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHVzZXJfY29kZSB0aGF0IGlzIHBhcnQgb2YgYW4gaW4tcHJvZ3Jlc3MgRGV2aWNlIEF1dGhvcml6YXRpb24gR3JhbnQuXG4gICAqIFxuICAgKiBUaGlzIEFQSSBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gYnVpbGQgeW91ciBvd24gbG9naW4gd29ya2Zsb3cgdG8gY29tcGxldGUgYSBkZXZpY2UgZ3JhbnQuXG4gICAqIFxuICAgKiBUaGlzIHJlcXVlc3Qgd2lsbCByZXF1aXJlIGFuIEFQSSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7UmV0cmlldmVVc2VyQ29kZVVzaW5nQVBJS2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgdXNlciBjb2RlIHJldHJpZXZhbCByZXF1ZXN0IGluY2x1ZGluZyBvcHRpb25hbCB0ZW5hbnRJZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29kZVVzaW5nQVBJS2V5V2l0aFJlcXVlc3QocmVxdWVzdDogUmV0cmlldmVVc2VyQ29kZVVzaW5nQVBJS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGlmIChyZXF1ZXN0LnRlbmFudElkICE9PSBudWxsICYmIHJlcXVlc3QudGVuYW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ3RlbmFudElkJywgcmVxdWVzdC50ZW5hbnRJZC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QudXNlcl9jb2RlICE9PSBudWxsICYmIHJlcXVlc3QudXNlcl9jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCByZXF1ZXN0LnVzZXJfY29kZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvZGV2aWNlL3VzZXItY29kZScpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgdXNlcl9jb2RlIHRoYXQgaXMgcGFydCBvZiBhbiBpbi1wcm9ncmVzcyBEZXZpY2UgQXV0aG9yaXphdGlvbiBHcmFudC5cbiAgICogXG4gICAqIFRoaXMgQVBJIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBidWlsZCB5b3VyIG93biBsb2dpbiB3b3JrZmxvdyB0byBjb21wbGV0ZSBhIGRldmljZSBncmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZXRyaWV2ZVVzZXJDb2RlUmVxdWVzdH0gcmVxdWVzdCBUaGUgdXNlciBjb2RlIHJldHJpZXZhbCByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJDb2RlV2l0aFJlcXVlc3QocmVxdWVzdDogUmV0cmlldmVVc2VyQ29kZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBpZiAocmVxdWVzdC5jbGllbnRfaWQgIT09IG51bGwgJiYgcmVxdWVzdC5jbGllbnRfaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIHJlcXVlc3QuY2xpZW50X2lkKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QuY2xpZW50X3NlY3JldCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNsaWVudF9zZWNyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCByZXF1ZXN0LmNsaWVudF9zZWNyZXQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC50ZW5hbnRJZCAhPT0gbnVsbCAmJiByZXF1ZXN0LnRlbmFudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuYXBwZW5kKCd0ZW5hbnRJZCcsIHJlcXVlc3QudGVuYW50SWQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnVzZXJfY29kZSAhPT0gbnVsbCAmJiByZXF1ZXN0LnVzZXJfY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgcmVxdWVzdC51c2VyX2NvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2RldmljZS91c2VyLWNvZGUnKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBjb21tZW50cyBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbW1lbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29tbWVudHModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29tbWVudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb21tZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbW1lbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHNpbmdsZSBVc2VyIGNvbnNlbnQgYnkgSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckNvbnNlbnRJZCBUaGUgVXNlciBjb25zZW50IElkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29uc2VudFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQ29uc2VudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBjb25zZW50cyBmb3IgYSBVc2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgVXNlcidzIElkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckNvbnNlbnRzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29uc2VudFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgdGhlIFVzZXJJbmZvIGVuZHBvaW50IHRvIHJldHJpZXZlIFVzZXIgQ2xhaW1zIGZyb20gdGhlIGFjY2VzcyB0b2tlbiBpc3N1ZWQgYnkgRnVzaW9uQXV0aC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyaW5mb1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJJbmZvRnJvbUFjY2Vzc1Rva2VuKGVuY29kZWRKV1Q6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlcmluZm9SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxVc2VyaW5mb1Jlc3BvbnNlLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3VzZXJpbmZvJylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgc2luZ2xlIElkZW50aXR5IFByb3ZpZGVyIHVzZXIgKGxpbmspLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aXR5UHJvdmlkZXJVc2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgdXNlciBpbiB0aGUgM3JkIHBhcnR5IGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSBGdXNpb25BdXRoIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckxpbmsoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCBpZGVudGl0eVByb3ZpZGVyVXNlcklkOiBzdHJpbmcsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbGluaycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZGVudGl0eVByb3ZpZGVySWQnLCBpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZGVudGl0eVByb3ZpZGVyVXNlcklkJywgaWRlbnRpdHlQcm92aWRlclVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYWxsIElkZW50aXR5IFByb3ZpZGVyIHVzZXJzIChsaW5rcykgZm9yIHRoZSB1c2VyLiBTcGVjaWZ5IHRoZSBvcHRpb25hbCBpZGVudGl0eVByb3ZpZGVySWQgdG8gcmV0cmlldmUgbGlua3MgZm9yIGEgcGFydGljdWxhciBJZFAuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuIFNwZWNpZnkgdGhpcyB2YWx1ZSB0byByZWR1Y2UgdGhlIGxpbmtzIHJldHVybmVkIHRvIHRob3NlIGZvciBhIHBhcnRpY3VsYXIgSWRQLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJMaW5rc0J5VXNlcklkKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCwgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9saW5rJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJJZCcsIGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsb2dpbiByZXBvcnQgYmV0d2VlbiB0aGUgdHdvIGluc3RhbnRzIGZvciBhIHBhcnRpY3VsYXIgdXNlciBieSBJZC4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gSWQsIGl0IHdpbGwgb25seSByZXR1cm4gdGhlXG4gICAqIGxvZ2luIGNvdW50cyBmb3IgdGhhdCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIElkLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdXNlcklkIElkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyTG9naW5SZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgdXNlcklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb2dpblJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L2xvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsb2dpbiByZXBvcnQgYmV0d2VlbiB0aGUgdHdvIGluc3RhbnRzIGZvciBhIHBhcnRpY3VsYXIgdXNlciBieSBsb2dpbiBJZC4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gSWQsIGl0IHdpbGwgb25seSByZXR1cm4gdGhlXG4gICAqIGxvZ2luIGNvdW50cyBmb3IgdGhhdCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIElkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9naW5JZCBUaGUgdXNlcklkIElkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyTG9naW5SZXBvcnRCeUxvZ2luSWQoYXBwbGljYXRpb25JZDogVVVJRCwgbG9naW5JZDogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb2dpblJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L2xvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbG9naW5JZCcsIGxvZ2luSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxvZ2luIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMgZm9yIGEgcGFydGljdWxhciB1c2VyIGJ5IGxvZ2luIElkLCB1c2luZyBzcGVjaWZpYyBsb2dpbklkVHlwZXMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIGlkLCBpdCB3aWxsIG9ubHkgcmV0dXJuIHRoZVxuICAgKiBsb2dpbiBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2luSWQgVGhlIHVzZXJJZCBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nPn0gbG9naW5JZFR5cGVzIFRoZSBpZGVudGl0eSB0eXBlcyB0aGF0IEZ1c2lvbkF1dGggd2lsbCBjb21wYXJlIHRoZSBsb2dpbklkIHRvLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJMb2dpblJlcG9ydEJ5TG9naW5JZEFuZExvZ2luSWRUeXBlcyhhcHBsaWNhdGlvbklkOiBVVUlELCBsb2dpbklkOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBsb2dpbklkVHlwZXM6IEFycmF5PFN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXBvcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC9sb2dpbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWQnLCBsb2dpbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWRUeXBlcycsIGxvZ2luSWRUeXBlcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsYXN0IG51bWJlciBvZiBsb2dpbiByZWNvcmRzIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgaW5pdGlhbCByZWNvcmQuIGUuZy4gMCBpcyB0aGUgbGFzdCBsb2dpbiwgMTAwIHdpbGwgYmUgdGhlIDEwMHRoIG1vc3QgcmVjZW50IGxvZ2luLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgKE9wdGlvbmFsLCBkZWZhdWx0cyB0byAxMCkgVGhlIG51bWJlciBvZiByZWNvcmRzIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWNlbnRMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJSZWNlbnRMb2dpbnModXNlcklkOiBVVUlELCBvZmZzZXQ6IG51bWJlciwgbGltaXQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWNlbnRMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWNlbnQtbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignb2Zmc2V0Jywgb2Zmc2V0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbGltaXQnLCBsaW1pdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBGdXNpb25BdXRoIHZlcnNpb24gc3RyaW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJzaW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVmVyc2lvbigpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcnNpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJzaW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vdmVyc2lvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgV2ViQXV0aG4gY3JlZGVudGlhbCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkIFRoZSBJZCBvZiB0aGUgV2ViQXV0aG4gY3JlZGVudGlhbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5DcmVkZW50aWFsUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlV2ViQXV0aG5DcmVkZW50aWFsKGlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIFdlYkF1dGhuIGNyZWRlbnRpYWxzIGZvciB0aGUgZ2l2ZW4gdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVzZXIncyBJRC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5DcmVkZW50aWFsUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlV2ViQXV0aG5DcmVkZW50aWFsc0ZvclVzZXIodXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB3ZWJob29rIGZvciB0aGUgZ2l2ZW4gSWQuIElmIHlvdSBwYXNzIGluIG51bGwgZm9yIHRoZSBJZCwgdGhpcyB3aWxsIHJldHVybiBhbGwgdGhlIHdlYmhvb2tzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHdlYmhvb2tJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgd2ViaG9vay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVdlYmhvb2sod2ViaG9va0lkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBzaW5nbGUgd2ViaG9vayBhdHRlbXB0IGxvZyBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHdlYmhvb2tBdHRlbXB0TG9nSWQgVGhlIElkIG9mIHRoZSB3ZWJob29rIGF0dGVtcHQgbG9nIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rQXR0ZW1wdExvZ1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVdlYmhvb2tBdHRlbXB0TG9nKHdlYmhvb2tBdHRlbXB0TG9nSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tBdHRlbXB0TG9nUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va0F0dGVtcHRMb2dSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS93ZWJob29rLWF0dGVtcHQtbG9nJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHdlYmhvb2tBdHRlbXB0TG9nSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSB3ZWJob29rIGV2ZW50IGxvZyBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHdlYmhvb2tFdmVudExvZ0lkIFRoZSBJZCBvZiB0aGUgd2ViaG9vayBldmVudCBsb2cgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tFdmVudExvZ1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVdlYmhvb2tFdmVudExvZyh3ZWJob29rRXZlbnRMb2dJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va0V2ZW50TG9nUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va0V2ZW50TG9nUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vd2ViaG9vay1ldmVudC1sb2cnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0V2ZW50TG9nSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHdlYmhvb2tzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlV2ViaG9va3MoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2VzIHJlZnJlc2ggdG9rZW5zLlxuICAgKiBcbiAgICogVXNhZ2UgZXhhbXBsZXM6XG4gICAqICAgLSBEZWxldGUgYSBzaW5nbGUgcmVmcmVzaCB0b2tlbiwgcGFzcyBpbiBvbmx5IHRoZSB0b2tlbi5cbiAgICogICAgICAgcmV2b2tlUmVmcmVzaFRva2VuKHRva2VuKVxuICAgKiBcbiAgICogICAtIERlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yIGEgdXNlciwgcGFzcyBpbiBvbmx5IHRoZSB1c2VySWQuXG4gICAqICAgICAgIHJldm9rZVJlZnJlc2hUb2tlbihudWxsLCB1c2VySWQpXG4gICAqIFxuICAgKiAgIC0gRGVsZXRlIGFsbCByZWZyZXNoIHRva2VucyBmb3IgYSB1c2VyIGZvciBhIHNwZWNpZmljIGFwcGxpY2F0aW9uLCBwYXNzIGluIGJvdGggdGhlIHVzZXJJZCBhbmQgdGhlIGFwcGxpY2F0aW9uSWQuXG4gICAqICAgICAgIHJldm9rZVJlZnJlc2hUb2tlbihudWxsLCB1c2VySWQsIGFwcGxpY2F0aW9uSWQpXG4gICAqIFxuICAgKiAgIC0gRGVsZXRlIGFsbCByZWZyZXNoIHRva2VucyBmb3IgYW4gYXBwbGljYXRpb25cbiAgICogICAgICAgcmV2b2tlUmVmcmVzaFRva2VuKG51bGwsIG51bGwsIGFwcGxpY2F0aW9uSWQpXG4gICAqIFxuICAgKiBOb3RlOiA8Y29kZT5udWxsPC9jb2RlPiBtYXkgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgdXBvbiB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuXG4gICAqIFxuICAgKiBTZWUgYWxzbzogKG1ldGhvZCBuYW1lcyBtYXkgdmFyeSBieSBsYW5ndWFnZS4uLiBidXQgeW91J2xsIGZpZ3VyZSBpdCBvdXQpXG4gICAqIFxuICAgKiAgLSByZXZva2VSZWZyZXNoVG9rZW5CeUlkXG4gICAqICAtIHJldm9rZVJlZnJlc2hUb2tlbkJ5VG9rZW5cbiAgICogIC0gcmV2b2tlUmVmcmVzaFRva2Vuc0J5VXNlcklkXG4gICAqICAtIHJldm9rZVJlZnJlc2hUb2tlbnNCeUFwcGxpY2F0aW9uSWRcbiAgICogIC0gcmV2b2tlUmVmcmVzaFRva2Vuc0J5VXNlcklkRm9yQXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuIChPcHRpb25hbCkgVGhlIHJlZnJlc2ggdG9rZW4gdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCAoT3B0aW9uYWwpIFRoZSB1c2VyIElkIHdob3NlIHRva2VucyB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBJZCBvZiB0aGUgdG9rZW5zIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2VuKHRva2VuOiBzdHJpbmcsIHVzZXJJZDogVVVJRCwgYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndG9rZW4nLCB0b2tlbilcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2VzIGEgc2luZ2xlIHJlZnJlc2ggdG9rZW4gYnkgdGhlIHVuaXF1ZSBJZC4gVGhlIHVuaXF1ZSBJZCBpcyBub3Qgc2Vuc2l0aXZlIGFzIGl0IGNhbm5vdCBiZSB1c2VkIHRvIG9idGFpbiBhbm90aGVyIEpXVC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0b2tlbklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHRva2VuIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2VuQnlJZCh0b2tlbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0b2tlbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2VzIGEgc2luZ2xlIHJlZnJlc2ggdG9rZW4gYnkgdXNpbmcgdGhlIGFjdHVhbCByZWZyZXNoIHRva2VuIHZhbHVlLiBUaGlzIHJlZnJlc2ggdG9rZW4gdmFsdWUgaXMgc2Vuc2l0aXZlLCBzbyAgYmUgY2FyZWZ1bCB3aXRoIHRoaXMgQVBJIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiBUaGUgcmVmcmVzaCB0b2tlbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbkJ5VG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndG9rZW4nLCB0b2tlbilcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlIGFsbCByZWZyZXNoIHRva2VucyB0aGF0IGJlbG9uZyB0byBhbiBhcHBsaWNhdGlvbiBieSBhcHBsaWNhdGlvbklkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc0J5QXBwbGljYXRpb25JZChhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlIGFsbCByZWZyZXNoIHRva2VucyB0aGF0IGJlbG9uZyB0byBhIHVzZXIgYnkgdXNlciBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgdXNlciB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VSZWZyZXNoVG9rZW5zQnlVc2VySWQodXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBhbGwgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gYSB1c2VyIGJ5IHVzZXIgSWQgZm9yIGEgc3BlY2lmaWMgYXBwbGljYXRpb24gYnkgYXBwbGljYXRpb25JZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgdXNlciB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgcmVmcmVzaCB0b2tlbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VSZWZyZXNoVG9rZW5zQnlVc2VySWRGb3JBcHBsaWNhdGlvbih1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2VzIHJlZnJlc2ggdG9rZW5zIHVzaW5nIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgSlNPTiBib2R5LiBUaGUgaGFuZGxpbmcgZm9yIHRoaXMgbWV0aG9kIGlzIHRoZSBzYW1lIGFzIHRoZSByZXZva2VSZWZyZXNoVG9rZW4gbWV0aG9kXG4gICAqIGFuZCBpcyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24geW91IHByb3ZpZGUgaW4gdGhlIFJlZnJlc2hEZWxldGVSZXF1ZXN0IG9iamVjdC4gU2VlIHRoYXQgbWV0aG9kIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZnJlc2hUb2tlblJldm9rZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgaW5mb3JtYXRpb24gdXNlZCB0byByZXZva2UgdGhlIHJlZnJlc2ggdG9rZW5zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VSZWZyZXNoVG9rZW5zV2l0aFJlcXVlc3QocmVxdWVzdDogUmVmcmVzaFRva2VuUmV2b2tlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZXMgYSBzaW5nbGUgVXNlciBjb25zZW50IGJ5IElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJDb25zZW50SWQgVGhlIFVzZXIgQ29uc2VudCBJZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VVc2VyQ29uc2VudCh1c2VyQ29uc2VudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJDb25zZW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGFwcGxpY2F0aW9ucyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25TZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEFwcGxpY2F0aW9ucyhyZXF1ZXN0OiBBcHBsaWNhdGlvblNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25TZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSBhdWRpdCBsb2dzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtBdWRpdExvZ1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXVkaXRMb2dTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoQXVkaXRMb2dzKHJlcXVlc3Q6IEF1ZGl0TG9nU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXVkaXRMb2dTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBdWRpdExvZ1NlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2F1ZGl0LWxvZy9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBjb25zZW50cyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uc2VudFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hDb25zZW50cyhyZXF1ZXN0OiBDb25zZW50U2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2NvbnNlbnQvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgZW1haWwgdGVtcGxhdGVzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtFbWFpbFRlbXBsYXRlU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEVtYWlsVGVtcGxhdGVzKHJlcXVlc3Q6IEVtYWlsVGVtcGxhdGVTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW1haWxUZW1wbGF0ZVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgZW50aXRpZXMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0VudGl0eVNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEVudGl0aWVzKHJlcXVlc3Q6IEVudGl0eVNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZW50aXRpZXMgZm9yIHRoZSBnaXZlbiBJZHMuIElmIGFueSBJZCBpcyBpbnZhbGlkLCBpdCBpcyBpZ25vcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGlkcyBUaGUgZW50aXR5IGlkcyB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoRW50aXRpZXNCeUlkcyhpZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3NlYXJjaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZHMnLCBpZHMpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIEVudGl0eSBHcmFudHMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0VudGl0eUdyYW50U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlHcmFudFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFbnRpdHlHcmFudHMocmVxdWVzdDogRW50aXR5R3JhbnRTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlHcmFudFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eUdyYW50U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvZ3JhbnQvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlIGVudGl0eSB0eXBlcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFbnRpdHlUeXBlcyhyZXF1ZXN0OiBFbnRpdHlUeXBlU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSBldmVudCBsb2dzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudExvZ1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RXZlbnRMb2dTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoRXZlbnRMb2dzKHJlcXVlc3Q6IEV2ZW50TG9nU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RXZlbnRMb2dTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFdmVudExvZ1NlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2V2ZW50LWxvZy9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBncm91cCBtZW1iZXJzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtHcm91cE1lbWJlclNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBNZW1iZXJTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoR3JvdXBNZW1iZXJzKHJlcXVlc3Q6IEdyb3VwTWVtYmVyU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBNZW1iZXJTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cE1lbWJlclNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvbWVtYmVyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGdyb3VwcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7R3JvdXBTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEdyb3VwcyhyZXF1ZXN0OiBHcm91cFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0cyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hJUEFjY2Vzc0NvbnRyb2xMaXN0cyhyZXF1ZXN0OiBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBpZGVudGl0eSBwcm92aWRlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoSWRlbnRpdHlQcm92aWRlcnMocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlclNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBrZXlzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtLZXlTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hLZXlzKHJlcXVlc3Q6IEtleVNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5L3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGxhbWJkYXMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0xhbWJkYVNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaExhbWJkYXMocmVxdWVzdDogTGFtYmRhU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlIGxvZ2luIHJlY29yZHMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0xvZ2luUmVjb3JkU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlY29yZFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hMb2dpblJlY29yZHMocmVxdWVzdDogTG9naW5SZWNvcmRTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlY29yZFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVjb3JkU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vbG9naW4tcmVjb3JkL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRlbmFudHMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1RlbmFudFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaFRlbmFudHMocmVxdWVzdDogVGVuYW50U2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlbWVzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtUaGVtZVNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoVGhlbWVzKHJlcXVlc3Q6IFRoZW1lU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUaGVtZVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdXNlciBjb21tZW50cyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VXNlckNvbW1lbnRTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb21tZW50U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaFVzZXJDb21tZW50cyhyZXF1ZXN0OiBVc2VyQ29tbWVudFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb21tZW50U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbW1lbnRTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29tbWVudC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXJzIGZvciB0aGUgZ2l2ZW4gSWRzLiBJZiBhbnkgSWQgaXMgaW52YWxpZCwgaXQgaXMgaWdub3JlZC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBpZHMgVGhlIHVzZXIgaWRzIHRvIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gc2VhcmNoVXNlcnNCeUlkcywgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBzZWFyY2hVc2VycyhpZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9zZWFyY2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRzJywgaWRzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXJzIGZvciB0aGUgZ2l2ZW4gSWRzLiBJZiBhbnkgSWQgaXMgaW52YWxpZCwgaXQgaXMgaWdub3JlZC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBpZHMgVGhlIHVzZXIgSWRzIHRvIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hVc2Vyc0J5SWRzKGlkczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZHMnLCBpZHMpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlcnMgZm9yIHRoZSBnaXZlbiBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGNvbnN0cmFpbnRzLiBGaWVsZHMgdXNlZDogaWRzLCBxdWVyeSwgcXVlcnlTdHJpbmcsIG51bWJlck9mUmVzdWx0cywgb3JkZXJCeSwgc3RhcnRSb3csXG4gICAqICAgIGFuZCBzb3J0RmllbGRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoVXNlcnNCeVF1ZXJ5KHJlcXVlc3Q6IFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXJzIGZvciB0aGUgZ2l2ZW4gc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBjb25zdHJhaW50cy4gRmllbGRzIHVzZWQ6IGlkcywgcXVlcnksIHF1ZXJ5U3RyaW5nLCBudW1iZXJPZlJlc3VsdHMsIG9yZGVyQnksIHN0YXJ0Um93LFxuICAgKiAgICBhbmQgc29ydEZpZWxkcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBzZWFyY2hVc2Vyc0J5UXVlcnksIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VhcmNoVXNlcnNCeVF1ZXJ5U3RyaW5nKHJlcXVlc3Q6IFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgd2ViaG9vayBldmVudCBsb2dzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtXZWJob29rRXZlbnRMb2dTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tFdmVudExvZ1NlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hXZWJob29rRXZlbnRMb2dzKHJlcXVlc3Q6IFdlYmhvb2tFdmVudExvZ1NlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tFdmVudExvZ1NlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tFdmVudExvZ1NlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL3dlYmhvb2stZXZlbnQtbG9nL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHdlYmhvb2tzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtXZWJob29rU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaFdlYmhvb2tzKHJlcXVlc3Q6IFdlYmhvb2tTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va1NlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViaG9vay9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGFuIGVtYWlsIHVzaW5nIGFuIGVtYWlsIHRlbXBsYXRlIElkLiBZb3UgY2FuIG9wdGlvbmFsbHkgcHJvdmlkZSA8Y29kZT5yZXF1ZXN0RGF0YTwvY29kZT4gdG8gYWNjZXNzIGtleSB2YWx1ZVxuICAgKiBwYWlycyBpbiB0aGUgZW1haWwgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIFRoZSBJZCBmb3IgdGhlIHRlbXBsYXRlLlxuICAgKiBAcGFyYW0ge1NlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZW5kIGVtYWlsIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gc2VuZCB0aGUgZW1haWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlbmRSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VuZEVtYWlsKGVtYWlsVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlbmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZW5kUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC9zZW5kJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgb3V0IGFuIGVtYWlsIHRvIGEgcGFyZW50IHRoYXQgdGhleSBuZWVkIHRvIHJlZ2lzdGVyIGFuZCBjcmVhdGUgYSBmYW1pbHkgb3IgbmVlZCB0byBsb2cgaW4gYW5kIGFkZCBhIGNoaWxkIHRvIHRoZWlyIGV4aXN0aW5nIGZhbWlseS5cbiAgICpcbiAgICogQHBhcmFtIHtGYW1pbHlFbWFpbFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHBhcmVudCBlbWFpbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgc2VuZEZhbWlseVJlcXVlc3RFbWFpbChyZXF1ZXN0OiBGYW1pbHlFbWFpbFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5L3JlcXVlc3QnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgcGFzc3dvcmRsZXNzIGF1dGhlbnRpY2F0aW9uIGNvZGUgaW4gYW4gZW1haWwgdG8gY29tcGxldGUgbG9naW4uXG4gICAqXG4gICAqIEBwYXJhbSB7UGFzc3dvcmRsZXNzU2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHBhc3N3b3JkbGVzcyBzZW5kIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gc2VuZCBhbiBlbWFpbCBjb250YWluaW5nIGEgY29kZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgc2VuZFBhc3N3b3JkbGVzc0NvZGUocmVxdWVzdDogUGFzc3dvcmRsZXNzU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3Bhc3N3b3JkbGVzcy9zZW5kJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gY29kZSB0byBhc3Npc3QgaW4gc2V0dGluZyB1cCBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIG9yIGRpc2FibGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtUd29GYWN0b3JTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gc2VuZCB0aGUgY29kZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHNlbmRUd29GYWN0b3JDb2RlRm9yRW5hYmxlRGlzYWJsZSwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBzZW5kVHdvRmFjdG9yQ29kZShyZXF1ZXN0OiBUd29GYWN0b3JTZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZW5kJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gY29kZSB0byBhc3Npc3QgaW4gc2V0dGluZyB1cCBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIG9yIGRpc2FibGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtUd29GYWN0b3JTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gc2VuZCB0aGUgY29kZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgc2VuZFR3b0ZhY3RvckNvZGVGb3JFbmFibGVEaXNhYmxlKHJlcXVlc3Q6IFR3b0ZhY3RvclNlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlbmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBjb2RlIHRvIGFsbG93IHRoZSBjb21wbGV0aW9uIG9mIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0d29GYWN0b3JJZCBUaGUgSWQgcmV0dXJuZWQgYnkgdGhlIExvZ2luIEFQSSBuZWNlc3NhcnkgdG8gY29tcGxldGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHNlbmRUd29GYWN0b3JDb2RlRm9yTG9naW5Vc2luZ01ldGhvZCwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBzZW5kVHdvRmFjdG9yQ29kZUZvckxvZ2luKHR3b0ZhY3RvcklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VuZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0d29GYWN0b3JJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGNvZGUgdG8gYWxsb3cgdGhlIGNvbXBsZXRpb24gb2YgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR3b0ZhY3RvcklkIFRoZSBJZCByZXR1cm5lZCBieSB0aGUgTG9naW4gQVBJIG5lY2Vzc2FyeSB0byBjb21wbGV0ZSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclNlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBUd28gRmFjdG9yIHNlbmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBzZW5kIHRoZSBUd28gRmFjdG9yIGNvZGUgdG8gdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRUd29GYWN0b3JDb2RlRm9yTG9naW5Vc2luZ01ldGhvZCh0d29GYWN0b3JJZDogc3RyaW5nLCByZXF1ZXN0OiBUd29GYWN0b3JTZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZW5kJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHR3b0ZhY3RvcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgdmVyaWZpY2F0aW9uIGNvZGUgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIHRyYW5zcG9ydCBmb3IgdGhlIGlkZW50aXR5IHR5cGUgYmVpbmcgdmVyaWZpZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5U2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIGlkZW50aXR5IHZlcmlmeSBzZW5kIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgc2VuZCB0aGUgY29kZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgc2VuZFZlcmlmeUlkZW50aXR5KHJlcXVlc3Q6IFZlcmlmeVNlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS92ZXJpZnkvc2VuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlZ2lucyBhIGxvZ2luIHJlcXVlc3QgZm9yIGEgM3JkIHBhcnR5IGxvZ2luIHRoYXQgcmVxdWlyZXMgdXNlciBpbnRlcmFjdGlvbiBzdWNoIGFzIEhZUFIuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSB0aGlyZC1wYXJ0eSBsb2dpbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gZnJvbSB0aGUgdGhpcmQtcGFydHkgbG9naW5cbiAgICogICAgcHJvdmlkZXJzIHRoYXQgRnVzaW9uQXV0aCB1c2VzIHRvIHJlY29uY2lsZSB0aGUgdXNlcidzIGFjY291bnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0SWRlbnRpdHlQcm92aWRlckxvZ2luKHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIHBhc3N3b3JkbGVzcyBsb2dpbiByZXF1ZXN0IGJ5IGdlbmVyYXRpbmcgYSBwYXNzd29yZGxlc3MgY29kZS4gVGhpcyBjb2RlIGNhbiBiZSBzZW50IHRvIHRoZSBVc2VyIHVzaW5nIHRoZSBTZW5kXG4gICAqIFBhc3N3b3JkbGVzcyBDb2RlIEFQSSBvciB1c2luZyBhIG1lY2hhbmlzbSBvdXRzaWRlIG9mIEZ1c2lvbkF1dGguIFRoZSBwYXNzd29yZGxlc3MgbG9naW4gaXMgY29tcGxldGVkIGJ5IHVzaW5nIHRoZSBQYXNzd29yZGxlc3MgTG9naW4gQVBJIHdpdGggdGhpcyBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge1Bhc3N3b3JkbGVzc1N0YXJ0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcGFzc3dvcmRsZXNzIHN0YXJ0IHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gYmVnaW4gdGhlIHBhc3N3b3JkbGVzcyBsb2dpbiByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZGxlc3NTdGFydFJlc3BvbnNlPj59XG4gICAqL1xuICBzdGFydFBhc3N3b3JkbGVzc0xvZ2luKHJlcXVlc3Q6IFBhc3N3b3JkbGVzc1N0YXJ0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UGFzc3dvcmRsZXNzU3RhcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxQYXNzd29yZGxlc3NTdGFydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcGFzc3dvcmRsZXNzL3N0YXJ0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBUd28tRmFjdG9yIGxvZ2luIHJlcXVlc3QgYnkgZ2VuZXJhdGluZyBhIHR3by1mYWN0b3IgaWRlbnRpZmllci4gVGhpcyBjb2RlIGNhbiB0aGVuIGJlIHNlbnQgdG8gdGhlIFR3byBGYWN0b3IgU2VuZCBcbiAgICogQVBJICgvYXBpL3R3by1mYWN0b3Ivc2VuZClpbiBvcmRlciB0byBzZW5kIGEgb25lLXRpbWUgdXNlIGNvZGUgdG8gYSB1c2VyLiBZb3UgY2FuIGFsc28gdXNlIG9uZS10aW1lIHVzZSBjb2RlIHJldHVybmVkIFxuICAgKiB0byBzZW5kIHRoZSBjb2RlIG91dC1vZi1iYW5kLiBUaGUgVHdvLUZhY3RvciBsb2dpbiBpcyBjb21wbGV0ZWQgYnkgbWFraW5nIGEgcmVxdWVzdCB0byB0aGUgVHdvLUZhY3RvciBMb2dpbiBcbiAgICogQVBJICgvYXBpL3R3by1mYWN0b3IvbG9naW4pLiB3aXRoIHRoZSB0d28tZmFjdG9yIGlkZW50aWZpZXIgYW5kIHRoZSBvbmUtdGltZSB1c2UgY29kZS5cbiAgICogXG4gICAqIFRoaXMgQVBJIGlzIGludGVuZGVkIHRvIGFsbG93IHlvdSB0byBiZWdpbiBhIFR3by1GYWN0b3IgbG9naW4gb3V0c2lkZSBhIG5vcm1hbCBsb2dpbiB0aGF0IG9yaWdpbmF0ZWQgZnJvbSB0aGUgTG9naW4gQVBJICgvYXBpL2xvZ2luKS5cbiAgICpcbiAgICogQHBhcmFtIHtUd29GYWN0b3JTdGFydFJlcXVlc3R9IHJlcXVlc3QgVGhlIFR3by1GYWN0b3Igc3RhcnQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBiZWdpbiB0aGUgVHdvLUZhY3RvciBsb2dpbiByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JTdGFydFJlc3BvbnNlPj59XG4gICAqL1xuICBzdGFydFR3b0ZhY3RvckxvZ2luKHJlcXVlc3Q6IFR3b0ZhY3RvclN0YXJ0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yU3RhcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUd29GYWN0b3JTdGFydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zdGFydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgdmVyaWZpY2F0aW9uIG9mIGFuIGlkZW50aXR5IGJ5IGdlbmVyYXRpbmcgYSBjb2RlLiBUaGlzIGNvZGUgY2FuIGJlIHNlbnQgdG8gdGhlIFVzZXIgdXNpbmcgdGhlIFZlcmlmeSBTZW5kIEFQSVxuICAgKiBWZXJpZmljYXRpb24gQ29kZSBBUEkgb3IgdXNpbmcgYSBtZWNoYW5pc20gb3V0c2lkZSBvZiBGdXNpb25BdXRoLiBUaGUgdmVyaWZpY2F0aW9uIGlzIGNvbXBsZXRlZCBieSB1c2luZyB0aGUgVmVyaWZ5IENvbXBsZXRlIEFQSSB3aXRoIHRoaXMgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlTdGFydFJlcXVlc3R9IHJlcXVlc3QgVGhlIGlkZW50aXR5IHZlcmlmeSBzdGFydCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGJlZ2luIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlTdGFydFJlc3BvbnNlPj59XG4gICAqL1xuICBzdGFydFZlcmlmeUlkZW50aXR5KHJlcXVlc3Q6IFZlcmlmeVN0YXJ0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5U3RhcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlTdGFydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHkvdmVyaWZ5L3N0YXJ0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBXZWJBdXRobiBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueSBieSBnZW5lcmF0aW5nIGEgbmV3IGNoYWxsZW5nZSBmb3IgdGhlIHVzZXJcbiAgICpcbiAgICogQHBhcmFtIHtXZWJBdXRoblN0YXJ0UmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3Igc3RhcnRpbmcgdGhlIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuU3RhcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgc3RhcnRXZWJBdXRobkxvZ2luKHJlcXVlc3Q6IFdlYkF1dGhuU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRoblN0YXJ0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViQXV0aG5TdGFydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueSBieSBnZW5lcmF0aW5nIGEgbmV3IGNoYWxsZW5nZSBmb3IgdGhlIHVzZXJcbiAgICpcbiAgICogQHBhcmFtIHtXZWJBdXRoblJlZ2lzdGVyU3RhcnRSZXF1ZXN0fSByZXF1ZXN0IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgbmVjZXNzYXJ5IGZvciBzdGFydGluZyB0aGUgcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlc3BvbnNlPj59XG4gICAqL1xuICBzdGFydFdlYkF1dGhuUmVnaXN0cmF0aW9uKHJlcXVlc3Q6IFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vcmVnaXN0ZXIvc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBsb2dpbiB1c2luZyBhIDJGQSBjaGFsbGVuZ2VcbiAgICpcbiAgICogQHBhcmFtIHtUd29GYWN0b3JMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlciBjcmVkZW50aWFscyB1c2VkIHRvIGxvZyB0aGVtIGluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICB0d29GYWN0b3JMb2dpbihyZXF1ZXN0OiBUd29GYWN0b3JMb2dpblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3IvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGFuIEFQSSBrZXkgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBBUEkga2V5IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBUElLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgQVBJIGtleSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUFQSUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogQVBJS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QVBJS2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgYXBwbGljYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBhcHBsaWNhdGlvbiByb2xlIHdpdGggdGhlIGdpdmVuIElkIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIHJvbGUgYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSByb2xlSWQgVGhlIElkIG9mIHRoZSByb2xlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyByb2xlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVBcHBsaWNhdGlvblJvbGUoYXBwbGljYXRpb25JZDogVVVJRCwgcm9sZUlkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInJvbGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHJvbGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb25uZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgVGhlIElkIG9mIHRoZSBjb25uZWN0b3IgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0Nvbm5lY3RvclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgY29ubmVjdG9yIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlQ29ubmVjdG9yKGNvbm5lY3RvcklkOiBVVUlELCByZXF1ZXN0OiBDb25uZWN0b3JSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25uZWN0b3JSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25uZWN0b3JJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb25zZW50IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCBUaGUgSWQgb2YgdGhlIGNvbnNlbnQgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0NvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgY29uc2VudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVDb25zZW50KGNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBlbWFpbCB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW1haWxUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBlbWFpbCB0ZW1wbGF0ZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogRW1haWxUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgRW50aXR5IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbnRpdHlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgRW50aXR5IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRW50aXR5KGVudGl0eUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBFbnRpdHkgVHlwZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBFbnRpdHkgVHlwZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGVybWlzc2lvbiB3aXRoIHRoZSBnaXZlbiBJZCBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIGVudGl0eVR5cGUgdGhhdCB0aGUgcGVybWlzc2lvbiBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHBlcm1pc3Npb25JZCBUaGUgSWQgb2YgdGhlIHBlcm1pc3Npb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBuZXcgcGVybWlzc2lvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVFbnRpdHlUeXBlUGVybWlzc2lvbihlbnRpdHlUeXBlSWQ6IFVVSUQsIHBlcm1pc3Npb25JZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInBlcm1pc3Npb25cIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHBlcm1pc3Npb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgZmFtaWx5IHdpdGggYSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmYW1pbHlJZCBUaGUgSWQgb2YgdGhlIGZhbWlseSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RmFtaWx5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBmYW1pbHkgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVGYW1pbHkoZmFtaWx5SWQ6IFVVSUQsIHJlcXVlc3Q6IEZhbWlseVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZhbWlseVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmFtaWx5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZm9ybSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmb3JtSWQgVGhlIElkIG9mIHRoZSBmb3JtIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtGb3JtUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIG5ldyBmb3JtIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+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+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwiZ3JhbnRcIilcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBlbmQtdXNlciBwcm92aWRlZCB1c2VyX2NvZGUgZnJvbSB0aGUgdXNlci1pbnRlcmFjdGlvbiBvZiB0aGUgRGV2aWNlIEF1dGhvcml6YXRpb24gR3JhbnQuXG4gICAqIElmIHlvdSBidWlsZCB5b3VyIG93biBhY3RpdmF0aW9uIGZvcm0geW91IHNob3VsZCB2YWxpZGF0ZSB0aGUgdXNlciBwcm92aWRlZCBjb2RlIHByaW9yIHRvIGJlZ2lubmluZyB0aGUgQXV0aG9yaXphdGlvbiBncmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJfY29kZSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgVGhlIGNsaWVudCBJZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdmFsaWRhdGVEZXZpY2UodXNlcl9jb2RlOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvZGV2aWNlL3ZhbGlkYXRlJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJfY29kZScsIHVzZXJfY29kZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2NsaWVudF9pZCcsIGNsaWVudF9pZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBlbmQtdXNlciBwcm92aWRlZCB1c2VyX2NvZGUgZnJvbSB0aGUgdXNlci1pbnRlcmFjdGlvbiBvZiB0aGUgRGV2aWNlIEF1dGhvcml6YXRpb24gR3JhbnQuXG4gICAqIElmIHlvdSBidWlsZCB5b3VyIG93biBhY3RpdmF0aW9uIGZvcm0geW91IHNob3VsZCB2YWxpZGF0ZSB0aGUgdXNlciBwcm92aWRlZCBjb2RlIHByaW9yIHRvIGJlZ2lubmluZyB0aGUgQXV0aG9yaXphdGlvbiBncmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtWYWxpZGF0ZURldmljZVJlcXVlc3R9IHJlcXVlc3QgVGhlIGRldmljZSB2YWxpZGF0aW9uIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHZhbGlkYXRlRGV2aWNlV2l0aFJlcXVlc3QocmVxdWVzdDogVmFsaWRhdGVEZXZpY2VSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvZGV2aWNlL3ZhbGlkYXRlJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2NsaWVudF9pZCcsIHJlcXVlc3QuY2xpZW50X2lkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndGVuYW50SWQnLCByZXF1ZXN0LnRlbmFudElkICE9IG51bGwgPyByZXF1ZXN0LnRlbmFudElkLnRvU3RyaW5nKCkgOiBudWxsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcl9jb2RlJywgcmVxdWVzdC51c2VyX2NvZGUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcHJvdmlkZWQgSldUIChlbmNvZGVkIEpXVCBzdHJpbmcpIHRvIGVuc3VyZSB0aGUgdG9rZW4gaXMgdmFsaWQuIEEgdmFsaWQgYWNjZXNzIHRva2VuIGlzIHByb3Blcmx5XG4gICAqIHNpZ25lZCBhbmQgbm90IGV4cGlyZWQuXG4gICAqIDxwPlxuICAgKiBUaGlzIEFQSSBtYXkgYmUgdXNlZCB0byB2ZXJpZnkgdGhlIEpXVCBhcyB3ZWxsIGFzIGRlY29kZSB0aGUgZW5jb2RlZCBKV1QgaW50byBodW1hbiByZWFkYWJsZSBpZGVudGl0eSBjbGFpbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmFsaWRhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdmFsaWRhdGVKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWYWxpZGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFZhbGlkYXRlUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3ZhbGlkYXRlJylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0J3MgYSBKV1QgdmVuZGluZyBtYWNoaW5lIVxuICAgKiBcbiAgICogSXNzdWUgYSBuZXcgYWNjZXNzIHRva2VuIChKV1QpIHdpdGggdGhlIHByb3ZpZGVkIGNsYWltcyBpbiB0aGUgcmVxdWVzdC4gVGhpcyBKV1QgaXMgbm90IHNjb3BlZCB0byBhIHRlbmFudCBvciB1c2VyLCBpdCBpcyBhIGZyZWUgZm9ybSBcbiAgICogdG9rZW4gdGhhdCB3aWxsIGNvbnRhaW4gd2hhdCBjbGFpbXMgeW91IHByb3ZpZGUuXG4gICAqIDxwPlxuICAgKiBUaGUgaWF0LCBleHAgYW5kIGp0aSBjbGFpbXMgd2lsbCBiZSBhZGRlZCBieSBGdXNpb25BdXRoLCBhbGwgb3RoZXIgY2xhaW1zIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci5cbiAgICogXG4gICAqIElmIGEgVFRMIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCwgdGhlIFRUTCB3aWxsIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBkZWZhdWx0IFRlbmFudCBvciB0aGUgVGVuYW50IHNwZWNpZmllZCBvbiB0aGUgcmVxdWVzdCBlaXRoZXIgXG4gICAqIGJ5IHdheSBvZiB0aGUgWC1GdXNpb25BdXRoLVRlbmFudElkIHJlcXVlc3QgaGVhZGVyLCBvciBhIHRlbmFudCBzY29wZWQgQVBJIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtKV1RWZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgY2xhaW1zIGZvciB0aGlzIEpXVC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SldUVmVuZFJlc3BvbnNlPj59XG4gICAqL1xuICB2ZW5kSldUKHJlcXVlc3Q6IEpXVFZlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RWZW5kUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SldUVmVuZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3ZlbmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtcyBhIGVtYWlsIHZlcmlmaWNhdGlvbi4gVGhlIElkIGdpdmVuIGlzIHVzdWFsbHkgZnJvbSBhbiBlbWFpbCBzZW50IHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyaWZpY2F0aW9uSWQgVGhlIGVtYWlsIHZlcmlmaWNhdGlvbiBJZCBzZW50IHRvIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gdmVyaWZ5RW1haWxBZGRyZXNzIGFuZCBjaGFuZ2VkIHRvIHRha2UgYSBKU09OIHJlcXVlc3QgYm9keSwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICB2ZXJpZnlFbWFpbCh2ZXJpZmljYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh2ZXJpZmljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1zIGEgdXNlcidzIGVtYWlsIGFkZHJlc3MuIFxuICAgKiBcbiAgICogVGhlIHJlcXVlc3QgYm9keSB3aWxsIGNvbnRhaW4gdGhlIHZlcmlmaWNhdGlvbklkLiBZb3UgbWF5IGFsc28gYmUgcmVxdWlyZWQgdG8gc2VuZCBhIG9uZS10aW1lIHVzZSBjb2RlIGJhc2VkIHVwb24geW91ciBjb25maWd1cmF0aW9uLiBXaGVuIFxuICAgKiB0aGUgdGVuYW50IGlzIGNvbmZpZ3VyZWQgdG8gZ2F0ZSBhIHVzZXIgdW50aWwgdGhlaXIgZW1haWwgYWRkcmVzcyBpcyB2ZXJpZmllZCwgdGhpcyBwcm9jZWR1cmVzIHJlcXVpcmVzIHR3byB2YWx1ZXMgaW5zdGVhZCBvZiBvbmUuIFxuICAgKiBUaGUgdmVyaWZpY2F0aW9uSWQgaXMgYSBoaWdoIGVudHJvcHkgdmFsdWUgYW5kIHRoZSBvbmUtdGltZSB1c2UgY29kZSBpcyBhIGxvdyBlbnRyb3B5IHZhbHVlIHRoYXQgaXMgZWFzaWx5IGVudGVyZWQgaW4gYSB1c2VyIGludGVyYWN0aXZlIGZvcm0uIFRoZSBcbiAgICogdHdvIHZhbHVlcyB0b2dldGhlciBhcmUgYWJsZSB0byBjb25maXJtIGEgdXNlcidzIGVtYWlsIGFkZHJlc3MgYW5kIG1hcmsgdGhlIHVzZXIncyBlbWFpbCBhZGRyZXNzIGFzIHZlcmlmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeUVtYWlsUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB2ZXJpZmljYXRpb25JZCBhbmQgb3B0aW9uYWwgb25lLXRpbWUgdXNlIGNvZGUgcGFpcmVkIHdpdGggdGhlIHZlcmlmaWNhdGlvbklkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB2ZXJpZnlFbWFpbEFkZHJlc3MocmVxdWVzdDogVmVyaWZ5RW1haWxSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkbWluaXN0cmF0aXZlbHkgdmVyaWZ5IGEgdXNlcidzIGVtYWlsIGFkZHJlc3MuIFVzZSB0aGlzIG1ldGhvZCB0byBieXBhc3MgZW1haWwgdmVyaWZpY2F0aW9uIGZvciB0aGUgdXNlci5cbiAgICogXG4gICAqIFRoZSByZXF1ZXN0IGJvZHkgd2lsbCBjb250YWluIHRoZSB1c2VySWQgdG8gYmUgdmVyaWZpZWQuIEFuIEFQSSBrZXkgaXMgcmVxdWlyZWQgd2hlbiBzZW5kaW5nIHRoZSB1c2VySWQgaW4gdGhlIHJlcXVlc3QgYm9keS5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlFbWFpbFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlcklkIHRvIHZlcmlmeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdmVyaWZ5RW1haWxBZGRyZXNzQnlVc2VySWQocmVxdWVzdDogVmVyaWZ5RW1haWxSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkbWluaXN0cmF0aXZlbHkgdmVyaWZ5IGEgdXNlciBpZGVudGl0eS5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlSZXF1ZXN0fSByZXF1ZXN0IFRoZSBpZGVudGl0eSB2ZXJpZnkgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIHRvIHZlcmlmeSB0aGUgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHZlcmlmeUlkZW50aXR5KHJlcXVlc3Q6IFZlcmlmeVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5L3ZlcmlmeScpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1zIGFuIGFwcGxpY2F0aW9uIHJlZ2lzdHJhdGlvbi4gVGhlIElkIGdpdmVuIGlzIHVzdWFsbHkgZnJvbSBhbiBlbWFpbCBzZW50IHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyaWZpY2F0aW9uSWQgVGhlIHJlZ2lzdHJhdGlvbiB2ZXJpZmljYXRpb24gSWQgc2VudCB0byB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHZlcmlmeVVzZXJSZWdpc3RyYXRpb24gYW5kIGNoYW5nZWQgdG8gdGFrZSBhIEpTT04gcmVxdWVzdCBib2R5LCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHZlcmlmeVJlZ2lzdHJhdGlvbih2ZXJpZmljYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodmVyaWZpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtcyBhIHVzZXIncyByZWdpc3RyYXRpb24uIFxuICAgKiBcbiAgICogVGhlIHJlcXVlc3QgYm9keSB3aWxsIGNvbnRhaW4gdGhlIHZlcmlmaWNhdGlvbklkLiBZb3UgbWF5IGFsc28gYmUgcmVxdWlyZWQgdG8gc2VuZCBhIG9uZS10aW1lIHVzZSBjb2RlIGJhc2VkIHVwb24geW91ciBjb25maWd1cmF0aW9uLiBXaGVuIFxuICAgKiB0aGUgYXBwbGljYXRpb24gaXMgY29uZmlndXJlZCB0byBnYXRlIGEgdXNlciB1bnRpbCB0aGVpciByZWdpc3RyYXRpb24gaXMgdmVyaWZpZWQsIHRoaXMgcHJvY2VkdXJlcyByZXF1aXJlcyB0d28gdmFsdWVzIGluc3RlYWQgb2Ygb25lLiBcbiAgICogVGhlIHZlcmlmaWNhdGlvbklkIGlzIGEgaGlnaCBlbnRyb3B5IHZhbHVlIGFuZCB0aGUgb25lLXRpbWUgdXNlIGNvZGUgaXMgYSBsb3cgZW50cm9weSB2YWx1ZSB0aGF0IGlzIGVhc2lseSBlbnRlcmVkIGluIGEgdXNlciBpbnRlcmFjdGl2ZSBmb3JtLiBUaGUgXG4gICAqIHR3byB2YWx1ZXMgdG9nZXRoZXIgYXJlIGFibGUgdG8gY29uZmlybSBhIHVzZXIncyByZWdpc3RyYXRpb24gYW5kIG1hcmsgdGhlIHVzZXIncyByZWdpc3RyYXRpb24gYXMgdmVyaWZpZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5UmVnaXN0cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB2ZXJpZmljYXRpb25JZCBhbmQgb3B0aW9uYWwgb25lLXRpbWUgdXNlIGNvZGUgcGFpcmVkIHdpdGggdGhlIHZlcmlmaWNhdGlvbklkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB2ZXJpZnlVc2VyUmVnaXN0cmF0aW9uKHJlcXVlc3Q6IFZlcmlmeVJlZ2lzdHJhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cblxuICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAqIFByaXZhdGUgbWV0aG9kc1xuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuICAvKipcbiAgICogY3JlYXRlcyBhIHJlc3QgY2xpZW50XG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBSRVNUQ2xpZW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNhbGwuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0PFJULCBFUlQ+KCk6IElSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxSVCwgRVJUPigpXG4gICAgICAgICAgICAgICAud2l0aEF1dGhvcml6YXRpb24odGhpcy5hcGlLZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEFub255bW91czxSVCwgRVJUPigpOiBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgbGV0IGNsaWVudCA9IHRoaXMuY2xpZW50QnVpbGRlci5idWlsZDxSVCwgRVJUPih0aGlzLmhvc3QpO1xuXG4gICAgaWYgKHRoaXMudGVuYW50SWQgIT0gbnVsbCkge1xuICAgICAgY2xpZW50LndpdGhIZWFkZXIoJ1gtRnVzaW9uQXV0aC1UZW5hbnRJZCcsIHRoaXMudGVuYW50SWQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNyZWRlbnRpYWxzICE9IG51bGwpIHtcbiAgICAgIGNsaWVudC53aXRoQ3JlZGVudGlhbHModGhpcy5jcmVkZW50aWFscyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGdXNpb25BdXRoQ2xpZW50O1xuXG4vKipcbiAqIEEgMTI4IGJpdCBVVUlEIGluIHN0cmluZyBmb3JtYXQgXCI4LTQtNC00LTEyXCIsIGZvciBleGFtcGxlIFwiNThENUUyMTItMTY1Qi00Q0EwLTkwOUItQzg2QjlDRUUwMTExXCIuXG4gKi9cbmV4cG9ydCB0eXBlIFVVSUQgPSBzdHJpbmc7XG5cblxuLyoqXG4gKiBkb21haW4gUE9KTyB0byByZXByZXNlbnQgQXV0aGVudGljYXRpb25LZXlcbiAqXG4gKiBAYXV0aG9yIHNhbmpheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleSB7XG4gIGV4cGlyYXRpb25JbnN0YW50PzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGlwQWNjZXNzQ29udHJvbExpc3RJZD86IFVVSUQ7XG4gIGtleT86IHN0cmluZztcbiAga2V5TWFuYWdlcj86IGJvb2xlYW47XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBtZXRhRGF0YT86IEFQSUtleU1ldGFEYXRhO1xuICBuYW1lPzogc3RyaW5nO1xuICBwZXJtaXNzaW9ucz86IEFQSUtleVBlcm1pc3Npb25zO1xuICByZXRyaWV2YWJsZT86IGJvb2xlYW47XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBUElLZXlNZXRhRGF0YSB7XG4gIGF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleVBlcm1pc3Npb25zIHtcbiAgZW5kcG9pbnRzPzogUmVjb3JkPHN0cmluZywgQXJyYXk8c3RyaW5nPj47XG59XG5cbi8qKlxuICogQXV0aGVudGljYXRpb24ga2V5IHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgU2FuamF5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5UmVxdWVzdCB7XG4gIGFwaUtleT86IEFQSUtleTtcbiAgc291cmNlS2V5SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEF1dGhlbnRpY2F0aW9uIGtleSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBTYW5qYXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBUElLZXlSZXNwb25zZSB7XG4gIGFwaUtleT86IEFQSUtleTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzVG9rZW4ge1xuICBhY2Nlc3NfdG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyZXNfaW4/OiBudW1iZXI7XG4gIGlkX3Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoX3Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoX3Rva2VuX2lkPzogVVVJRDtcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHRva2VuX3R5cGU/OiBUb2tlblR5cGU7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3Qgb2JqZWN0IGZvciBpbnRyb3NwZWN0aW5nIGFuIGFjY2VzcyB0b2tlbi5cbiAqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzVG9rZW5JbnRyb3NwZWN0UmVxdWVzdCB7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSB1c2VyIGFjdGlvbiByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFjdGlvbj86IEFjdGlvbkRhdGE7XG4gIGJyb2FkY2FzdD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGF0YSB7XG4gIGFjdGlvbmVlVXNlcklkPzogVVVJRDtcbiAgYWN0aW9uZXJVc2VySWQ/OiBVVUlEO1xuICBhcHBsaWNhdGlvbklkcz86IEFycmF5PFVVSUQ+O1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBlbWFpbFVzZXI/OiBib29sZWFuO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIG5vdGlmeVVzZXI/OiBib29sZWFuO1xuICBvcHRpb24/OiBzdHJpbmc7XG4gIHJlYXNvbklkPzogVVVJRDtcbiAgdXNlckFjdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBUaGUgdXNlciBhY3Rpb24gcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblJlc3BvbnNlIHtcbiAgYWN0aW9uPzogVXNlckFjdGlvbkxvZztcbiAgYWN0aW9ucz86IEFycmF5PFVzZXJBY3Rpb25Mb2c+O1xufVxuXG4vKipcbiAqIEF2YWlsYWJsZSBKU09OIFdlYiBBbGdvcml0aG1zIChKV0EpIGFzIGRlc2NyaWJlZCBpbiBSRkMgNzUxOCBhdmFpbGFibGUgZm9yIHRoaXMgSldUIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQWxnb3JpdGhtIHtcbiAgRVMyNTYgPSBcIkVTMjU2XCIsXG4gIEVTMzg0ID0gXCJFUzM4NFwiLFxuICBFUzUxMiA9IFwiRVM1MTJcIixcbiAgSFMyNTYgPSBcIkhTMjU2XCIsXG4gIEhTMzg0ID0gXCJIUzM4NFwiLFxuICBIUzUxMiA9IFwiSFM1MTJcIixcbiAgUFMyNTYgPSBcIlBTMjU2XCIsXG4gIFBTMzg0ID0gXCJQUzM4NFwiLFxuICBQUzUxMiA9IFwiUFM1MTJcIixcbiAgUlMyNTYgPSBcIlJTMjU2XCIsXG4gIFJTMzg0ID0gXCJSUzM4NFwiLFxuICBSUzUxMiA9IFwiUlM1MTJcIixcbiAgbm9uZSA9IFwibm9uZVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxlQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidW5kbGVJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgc2VydmljZXNJZD86IHN0cmluZztcbiAgdGVhbUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsZUlkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxBcHBsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidW5kbGVJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgc2VydmljZXNJZD86IHN0cmluZztcbiAgdGVhbUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbiB7XG4gIGFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25BY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbjtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgYXV0aGVudGljYXRpb25Ub2tlbkNvbmZpZ3VyYXRpb24/OiBBdXRoZW50aWNhdGlvblRva2VuQ29uZmlndXJhdGlvbjtcbiAgY2xlYW5TcGVha0NvbmZpZ3VyYXRpb24/OiBDbGVhblNwZWFrQ29uZmlndXJhdGlvbjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVtYWlsQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uRW1haWxDb25maWd1cmF0aW9uO1xuICBleHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25FeHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uO1xuICBmb3JtQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uRm9ybUNvbmZpZ3VyYXRpb247XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgand0Q29uZmlndXJhdGlvbj86IEpXVENvbmZpZ3VyYXRpb247XG4gIGxhbWJkYUNvbmZpZ3VyYXRpb24/OiBMYW1iZGFDb25maWd1cmF0aW9uO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9naW5Db25maWd1cmF0aW9uPzogTG9naW5Db25maWd1cmF0aW9uO1xuICBtdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbk11bHRpRmFjdG9yQ29uZmlndXJhdGlvbjtcbiAgbmFtZT86IHN0cmluZztcbiAgb2F1dGhDb25maWd1cmF0aW9uPzogT0F1dGgyQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbj86IFBhc3N3b3JkbGVzc0NvbmZpZ3VyYXRpb247XG4gIHBob25lQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uUGhvbmVDb25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25Db25maWd1cmF0aW9uPzogUmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uRGVsZXRlUG9saWN5PzogQXBwbGljYXRpb25SZWdpc3RyYXRpb25EZWxldGVQb2xpY3k7XG4gIHJvbGVzPzogQXJyYXk8QXBwbGljYXRpb25Sb2xlPjtcbiAgc2FtbHYyQ29uZmlndXJhdGlvbj86IFNBTUx2MkNvbmZpZ3VyYXRpb247XG4gIHNjb3Blcz86IEFycmF5PEFwcGxpY2F0aW9uT0F1dGhTY29wZT47XG4gIHN0YXRlPzogT2JqZWN0U3RhdGU7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdGhlbWVJZD86IFVVSUQ7XG4gIHVuaXZlcnNhbENvbmZpZ3VyYXRpb24/OiBVbml2ZXJzYWxBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb247XG4gIHVudmVyaWZpZWQ/OiBSZWdpc3RyYXRpb25VbnZlcmlmaWVkT3B0aW9ucztcbiAgdmVyaWZpY2F0aW9uRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdmVyaWZpY2F0aW9uU3RyYXRlZ3k/OiBWZXJpZmljYXRpb25TdHJhdGVneTtcbiAgdmVyaWZ5UmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbiAgd2ViQXV0aG5Db25maWd1cmF0aW9uPzogQXBwbGljYXRpb25XZWJBdXRobkNvbmZpZ3VyYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25FbWFpbENvbmZpZ3VyYXRpb24ge1xuICBlbWFpbFVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGVtYWlsVmVyaWZpY2F0aW9uRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZW1haWxWZXJpZmllZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGZvcmdvdFBhc3N3b3JkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5JZEluVXNlT25DcmVhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbklkSW5Vc2VPblVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luTmV3RGV2aWNlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5TdXNwaWNpb3VzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRsZXNzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRSZXNldFN1Y2Nlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHNldFBhc3N3b3JkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kQWRkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kUmVtb3ZlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoZW50aWNhdGlvblRva2VuQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuICBhY2Nlc3NUb2tlblBvcHVsYXRlSWQ/OiBVVUlEO1xuICBpZFRva2VuUG9wdWxhdGVJZD86IFVVSUQ7XG4gIG11bHRpRmFjdG9yUmVxdWlyZW1lbnRJZD86IFVVSUQ7XG4gIHNhbWx2MlBvcHVsYXRlSWQ/OiBVVUlEO1xuICBzZWxmU2VydmljZVJlZ2lzdHJhdGlvblZhbGlkYXRpb25JZD86IFVVSUQ7XG4gIHVzZXJpbmZvUG9wdWxhdGVJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5Db25maWd1cmF0aW9uIHtcbiAgYWxsb3dUb2tlblJlZnJlc2g/OiBib29sZWFuO1xuICBnZW5lcmF0ZVJlZnJlc2hUb2tlbnM/OiBib29sZWFuO1xuICByZXF1aXJlQXV0aGVudGljYXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc0NvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGJpcnRoRGF0ZT86IFJlcXVpcmFibGU7XG4gIGNvbmZpcm1QYXNzd29yZD86IGJvb2xlYW47XG4gIGZpcnN0TmFtZT86IFJlcXVpcmFibGU7XG4gIGZvcm1JZD86IFVVSUQ7XG4gIGZ1bGxOYW1lPzogUmVxdWlyYWJsZTtcbiAgbGFzdE5hbWU/OiBSZXF1aXJhYmxlO1xuICBsb2dpbklkVHlwZT86IExvZ2luSWRUeXBlO1xuICBtaWRkbGVOYW1lPzogUmVxdWlyYWJsZTtcbiAgbW9iaWxlUGhvbmU/OiBSZXF1aXJhYmxlO1xuICBwcmVmZXJyZWRMYW5ndWFnZXM/OiBSZXF1aXJhYmxlO1xuICB0eXBlPzogUmVnaXN0cmF0aW9uVHlwZTtcbn1cblxuLy8gICAgICBUaGlzIGlzIHNlcGFyYXRlIGZyb20gSWRlbnRpdHlUeXBlLlxuZXhwb3J0IGVudW0gTG9naW5JZFR5cGUge1xuICBlbWFpbCA9IFwiZW1haWxcIixcbiAgcGhvbmVOdW1iZXIgPSBcInBob25lTnVtYmVyXCIsXG4gIHVzZXJuYW1lID0gXCJ1c2VybmFtZVwiXG59XG5cbmV4cG9ydCBlbnVtIFJlZ2lzdHJhdGlvblR5cGUge1xuICBiYXNpYyA9IFwiYmFzaWNcIixcbiAgYWR2YW5jZWQgPSBcImFkdmFuY2VkXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFzc2VydGlvbkVuY3J5cHRpb25Db25maWd1cmF0aW9uPzogU0FNTHYyQXNzZXJ0aW9uRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb247XG4gIGF1ZGllbmNlPzogc3RyaW5nO1xuICBhdXRob3JpemVkUmVkaXJlY3RVUkxzPzogQXJyYXk8c3RyaW5nPjtcbiAgY2FsbGJhY2tVUkw/OiBzdHJpbmc7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgZGVmYXVsdFZlcmlmaWNhdGlvbktleUlkPzogVVVJRDtcbiAgaW5pdGlhdGVkTG9naW4/OiBTQU1MdjJJZFBJbml0aWF0ZWRMb2dpbkNvbmZpZ3VyYXRpb247XG4gIGlzc3Vlcj86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBsb2dpbkhpbnRDb25maWd1cmF0aW9uPzogTG9naW5IaW50Q29uZmlndXJhdGlvbjtcbiAgbG9nb3V0PzogU0FNTHYyTG9nb3V0O1xuICBsb2dvdXRVUkw/OiBzdHJpbmc7XG4gIHJlcXVpcmVTaWduZWRSZXF1ZXN0cz86IGJvb2xlYW47XG4gIHhtbFNpZ25hdHVyZUMxNG5NZXRob2Q/OiBDYW5vbmljYWxpemF0aW9uTWV0aG9kO1xuICB4bWxTaWduYXR1cmVMb2NhdGlvbj86IFhNTFNpZ25hdHVyZUxvY2F0aW9uO1xufVxuXG5leHBvcnQgZW51bSBTQU1MTG9nb3V0QmVoYXZpb3Ige1xuICBBbGxQYXJ0aWNpcGFudHMgPSBcIkFsbFBhcnRpY2lwYW50c1wiLFxuICBPbmx5T3JpZ2luYXRvciA9IFwiT25seU9yaWdpbmF0b3JcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkFzc2VydGlvbkVuY3J5cHRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGRpZ2VzdEFsZ29yaXRobT86IHN0cmluZztcbiAgZW5jcnlwdGlvbkFsZ29yaXRobT86IHN0cmluZztcbiAga2V5TG9jYXRpb24/OiBzdHJpbmc7XG4gIGtleVRyYW5zcG9ydEFsZ29yaXRobT86IHN0cmluZztcbiAga2V5VHJhbnNwb3J0RW5jcnlwdGlvbktleUlkPzogVVVJRDtcbiAgbWFza0dlbmVyYXRpb25GdW5jdGlvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJMb2dvdXQge1xuICBiZWhhdmlvcj86IFNBTUxMb2dvdXRCZWhhdmlvcjtcbiAgZGVmYXVsdFZlcmlmaWNhdGlvbktleUlkPzogVVVJRDtcbiAga2V5SWQ/OiBVVUlEO1xuICByZXF1aXJlU2lnbmVkUmVxdWVzdHM/OiBib29sZWFuO1xuICBzaW5nbGVMb2dvdXQ/OiBTQU1MdjJTaW5nbGVMb2dvdXQ7XG4gIHhtbFNpZ25hdHVyZUMxNG5NZXRob2Q/OiBDYW5vbmljYWxpemF0aW9uTWV0aG9kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MlNpbmdsZUxvZ291dCBleHRlbmRzIEVuYWJsZWFibGUge1xuICBrZXlJZD86IFVVSUQ7XG4gIHVybD86IHN0cmluZztcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG59XG5cbmV4cG9ydCBlbnVtIFhNTFNpZ25hdHVyZUxvY2F0aW9uIHtcbiAgQXNzZXJ0aW9uID0gXCJBc3NlcnRpb25cIixcbiAgUmVzcG9uc2UgPSBcIlJlc3BvbnNlXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25BY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbiB7XG4gIHVpSVBBY2Nlc3NDb250cm9sTGlzdElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBFdmVudHMgdGhhdCBhcmUgYm91bmQgdG8gYXBwbGljYXRpb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uRXZlbnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb24ge1xuICB0d29GYWN0b3JUcnVzdElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25Gb3JtQ29uZmlndXJhdGlvbiB7XG4gIGFkbWluUmVnaXN0cmF0aW9uRm9ybUlkPzogVVVJRDtcbiAgc2VsZlNlcnZpY2VGb3JtQ29uZmlndXJhdGlvbj86IFNlbGZTZXJ2aWNlRm9ybUNvbmZpZ3VyYXRpb247XG4gIHNlbGZTZXJ2aWNlRm9ybUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25NdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24ge1xuICBlbWFpbD86IE11bHRpRmFjdG9yRW1haWxUZW1wbGF0ZTtcbiAgbG9naW5Qb2xpY3k/OiBNdWx0aUZhY3RvckxvZ2luUG9saWN5O1xuICBzbXM/OiBNdWx0aUZhY3RvclNNU1RlbXBsYXRlO1xuICB0cnVzdFBvbGljeT86IEFwcGxpY2F0aW9uTXVsdGlGYWN0b3JUcnVzdFBvbGljeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvckVtYWlsVGVtcGxhdGUge1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvclNNU1RlbXBsYXRlIHtcbiAgdGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBBcHBsaWNhdGlvbk11bHRpRmFjdG9yVHJ1c3RQb2xpY3kge1xuICBBbnkgPSBcIkFueVwiLFxuICBUaGlzID0gXCJUaGlzXCIsXG4gIE5vbmUgPSBcIk5vbmVcIlxufVxuXG4vKipcbiAqIEEgY3VzdG9tIE9BdXRoIHNjb3BlIGZvciBhIHNwZWNpZmljIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25PQXV0aFNjb3BlIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWZhdWx0Q29uc2VudERldGFpbD86IHN0cmluZztcbiAgZGVmYXVsdENvbnNlbnRNZXNzYWdlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBBcHBsaWNhdGlvbiBTY29wZSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXF1ZXN0IHtcbiAgc2NvcGU/OiBBcHBsaWNhdGlvbk9BdXRoU2NvcGU7XG59XG5cbi8qKlxuICogVGhlIEFwcGxpY2F0aW9uIFNjb3BlIEFQSSByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uT0F1dGhTY29wZVJlc3BvbnNlIHtcbiAgc2NvcGU/OiBBcHBsaWNhdGlvbk9BdXRoU2NvcGU7XG59XG5cbi8qKlxuICogSG9sZCBhcHBsaWNhdGlvbiBwaG9uZSBjb25maWd1cmF0aW9uIGZvciB0ZW1wbGF0ZSBvdmVycmlkZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25QaG9uZUNvbmZpZ3VyYXRpb24ge1xuICBmb3Jnb3RQYXNzd29yZFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBpZGVudGl0eVVwZGF0ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbklkSW5Vc2VPbkNyZWF0ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbklkSW5Vc2VPblVwZGF0ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbk5ld0RldmljZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpblN1c3BpY2lvdXNUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRsZXNzVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkUmVzZXRTdWNjZXNzVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkVXBkYXRlVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHNldFBhc3N3b3JkVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHR3b0ZhY3Rvck1ldGhvZEFkZFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RSZW1vdmVUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdmVyaWZpY2F0aW9uQ29tcGxldGVUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdmVyaWZpY2F0aW9uVGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQSBBcHBsaWNhdGlvbi1sZXZlbCBwb2xpY3kgZm9yIGRlbGV0aW5nIFVzZXJzLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25SZWdpc3RyYXRpb25EZWxldGVQb2xpY3kge1xuICB1bnZlcmlmaWVkPzogVGltZUJhc2VkRGVsZXRlUG9saWN5O1xufVxuXG4vKipcbiAqIFRoZSBBcHBsaWNhdGlvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uPzogQXBwbGljYXRpb247XG4gIHJvbGU/OiBBcHBsaWNhdGlvblJvbGU7XG4gIHNvdXJjZUFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFRoZSBBcHBsaWNhdGlvbiBBUEkgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25SZXNwb25zZSB7XG4gIGFwcGxpY2F0aW9uPzogQXBwbGljYXRpb247XG4gIGFwcGxpY2F0aW9ucz86IEFycmF5PEFwcGxpY2F0aW9uPjtcbiAgcm9sZT86IEFwcGxpY2F0aW9uUm9sZTtcbn1cblxuLyoqXG4gKiBBIHJvbGUgZ2l2ZW4gdG8gYSB1c2VyIGZvciBhIHNwZWNpZmljIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblJvbGUge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpc0RlZmF1bHQ/OiBib29sZWFuO1xuICBpc1N1cGVyUm9sZT86IGJvb2xlYW47XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgQXBwbGljYXRpb25zXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhdGU/OiBPYmplY3RTdGF0ZTtcbiAgdGVuYW50SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBBcHBsaWNhdGlvbnNcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uU2VhcmNoUmVxdWVzdCBleHRlbmRzIEV4cGFuZGFibGVSZXF1ZXN0IHtcbiAgc2VhcmNoPzogQXBwbGljYXRpb25TZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBBcHBsaWNhdGlvbiBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uU2VhcmNoUmVzcG9uc2UgZXh0ZW5kcyBFeHBhbmRhYmxlUmVzcG9uc2Uge1xuICBhcHBsaWNhdGlvbnM/OiBBcnJheTxBcHBsaWNhdGlvbj47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFwcGxpY2F0aW9uLWxldmVsIGNvbmZpZ3VyYXRpb24gZm9yIFdlYkF1dGhuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uV2ViQXV0aG5Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGJvb3RzdHJhcFdvcmtmbG93PzogQXBwbGljYXRpb25XZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbjtcbiAgcmVhdXRoZW50aWNhdGlvbldvcmtmbG93PzogQXBwbGljYXRpb25XZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25XZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgYSBzaW1wbGUgYXR0YWNobWVudCB3aXRoIGEgYnl0ZSBhcnJheSwgbmFtZSBhbmQgTUlNRSB0eXBlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnQge1xuICBhdHRhY2htZW50PzogQXJyYXk8bnVtYmVyPjtcbiAgbWltZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBVc2VkIHRvIGNvbW11bmljYXRlIHdoZXRoZXIgYW5kIGhvdyBhdXRoZW50aWNhdG9yIGF0dGVzdGF0aW9uIHNob3VsZCBiZSBkZWxpdmVyZWQgdG8gdGhlIFJlbHlpbmcgUGFydHlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlIHtcbiAgbm9uZSA9IFwibm9uZVwiLFxuICBpbmRpcmVjdCA9IFwiaW5kaXJlY3RcIixcbiAgZGlyZWN0ID0gXCJkaXJlY3RcIixcbiAgZW50ZXJwcmlzZSA9IFwiZW50ZXJwcmlzZVwiXG59XG5cbi8qKlxuICogVXNlZCB0byBpbmRpY2F0ZSB3aGF0IHR5cGUgb2YgYXR0ZXN0YXRpb24gd2FzIGluY2x1ZGVkIGluIHRoZSBhdXRoZW50aWNhdG9yIHJlc3BvbnNlIGZvciBhIGdpdmVuIFdlYkF1dGhuIGNyZWRlbnRpYWwgYXQgdGhlIHRpbWUgaXQgd2FzIGNyZWF0ZWRcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBBdHRlc3RhdGlvblR5cGUge1xuICBiYXNpYyA9IFwiYmFzaWNcIixcbiAgc2VsZiA9IFwic2VsZlwiLFxuICBhdHRlc3RhdGlvbkNhID0gXCJhdHRlc3RhdGlvbkNhXCIsXG4gIGFub255bWl6YXRpb25DYSA9IFwiYW5vbnltaXphdGlvbkNhXCIsXG4gIG5vbmUgPSBcIm5vbmVcIlxufVxuXG4vKipcbiAqIEFuIGF1ZGl0IGxvZy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZyB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IG51bWJlcjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaW5zZXJ0VXNlcj86IHN0cmluZztcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgbmV3VmFsdWU/OiBhbnk7XG4gIG9sZFZhbHVlPzogYW55O1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZlbnQgdG8gaW5kaWNhdGUgYW4gYXVkaXQgbG9nIHdhcyBjcmVhdGVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0NyZWF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXVkaXRMb2c/OiBBdWRpdExvZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dFeHBvcnRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV4cG9ydFJlcXVlc3Qge1xuICBjcml0ZXJpYT86IEF1ZGl0TG9nU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGF1ZGl0TG9nPzogQXVkaXRMb2c7XG59XG5cbi8qKlxuICogQXVkaXQgbG9nIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nUmVzcG9uc2Uge1xuICBhdWRpdExvZz86IEF1ZGl0TG9nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBlbmQ/OiBudW1iZXI7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIG5ld1ZhbHVlPzogc3RyaW5nO1xuICBvbGRWYWx1ZT86IHN0cmluZztcbiAgcmVhc29uPzogc3RyaW5nO1xuICBzdGFydD86IG51bWJlcjtcbiAgdXNlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ1NlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBBdWRpdExvZ1NlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEF1ZGl0IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ1NlYXJjaFJlc3BvbnNlIHtcbiAgYXVkaXRMb2dzPzogQXJyYXk8QXVkaXRMb2c+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gQXV0aGVudGljYXRpb25UaHJlYXRzIHtcbiAgSW1wb3NzaWJsZVRyYXZlbCA9IFwiSW1wb3NzaWJsZVRyYXZlbFwiXG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSA8YSBocmVmPVwiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLTIvI2F1dGhlbnRpY2F0b3ItYXR0YWNobWVudC1tb2RhbGl0eVwiPmF1dGhlbnRpY2F0b3IgYXR0YWNobWVudCBtb2RhbGl0eTwvYT4uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gQXV0aGVudGljYXRvckF0dGFjaG1lbnQge1xuICBwbGF0Zm9ybSA9IFwicGxhdGZvcm1cIixcbiAgY3Jvc3NQbGF0Zm9ybSA9IFwiY3Jvc3NQbGF0Zm9ybVwiXG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBhdXRoZW50aWNhdG9yIGF0dGFjaG1lbnQgbW9kYWxpdHkgcHJlZmVyZW5jZSBmb3IgYSBXZWJBdXRobiB3b3JrZmxvdy4gU2VlIHtAbGluayBBdXRoZW50aWNhdG9yQXR0YWNobWVudH1cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBBdXRoZW50aWNhdG9yQXR0YWNobWVudFByZWZlcmVuY2Uge1xuICBhbnkgPSBcImFueVwiLFxuICBwbGF0Zm9ybSA9IFwicGxhdGZvcm1cIixcbiAgY3Jvc3NQbGF0Zm9ybSA9IFwiY3Jvc3NQbGF0Zm9ybVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhlbnRpY2F0b3JDb25maWd1cmF0aW9uIHtcbiAgYWxnb3JpdGhtPzogVE9UUEFsZ29yaXRobTtcbiAgY29kZUxlbmd0aD86IG51bWJlcjtcbiAgdGltZVN0ZXA/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIFRPVFBBbGdvcml0aG0ge1xuICBIbWFjU0hBMSA9IFwiSG1hY1NIQTFcIixcbiAgSG1hY1NIQTI1NiA9IFwiSG1hY1NIQTI1NlwiLFxuICBIbWFjU0hBNTEyID0gXCJIbWFjU0hBNTEyXCJcbn1cblxuLyoqXG4gKiBVc2VkIGJ5IHRoZSBSZWx5aW5nIFBhcnR5IHRvIHNwZWNpZnkgdGhlaXIgcmVxdWlyZW1lbnRzIGZvciBhdXRoZW50aWNhdG9yIGF0dHJpYnV0ZXMuIEZpZWxkcyB1c2UgdGhlIGRlcHJlY2F0ZWQgXCJyZXNpZGVudCBrZXlcIiB0ZXJtaW5vbG9neSB0byByZWZlclxuICogdG8gY2xpZW50LXNpZGUgZGlzY292ZXJhYmxlIGNyZWRlbnRpYWxzIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggV2ViQXV0aG4gTGV2ZWwgMS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSB7XG4gIGF1dGhlbnRpY2F0b3JBdHRhY2htZW50PzogQXV0aGVudGljYXRvckF0dGFjaG1lbnQ7XG4gIHJlcXVpcmVSZXNpZGVudEtleT86IGJvb2xlYW47XG4gIHJlc2lkZW50S2V5PzogUmVzaWRlbnRLZXlSZXF1aXJlbWVudDtcbiAgdXNlclZlcmlmaWNhdGlvbj86IFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDtcbn1cblxuLy8gRG8gbm90IHJlcXVpcmUgYSBzZXR0ZXIgZm9yICd0eXBlJywgaXQgaXMgZGVmaW5lZCBieSB0aGUgY29uY3JldGUgY2xhc3MgYW5kIGlzIG5vdCBtdXRhYmxlXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IENvbm5lY3RvclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUVsYXN0aWNTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGFjY3VyYXRlVG90YWw/OiBib29sZWFuO1xuICBpZHM/OiBBcnJheTxVVUlEPjtcbiAgbmV4dFJlc3VsdHM/OiBzdHJpbmc7XG4gIHF1ZXJ5Pzogc3RyaW5nO1xuICBxdWVyeVN0cmluZz86IHN0cmluZztcbiAgc29ydEZpZWxkcz86IEFycmF5PFNvcnRGaWVsZD47XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIEZ1c2lvbkF1dGggZXZlbnRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFdmVudCB7XG4gIGNyZWF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGlkPzogVVVJRDtcbiAgaW5mbz86IEV2ZW50SW5mbztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0eXBlPzogRXZlbnRUeXBlO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHJlcXVlc3RzIHRoYXQgY2FuIGNvbnRhaW4gZXZlbnQgaW5mb3JtYXRpb24uIFRoaXMgZXZlbnQgaW5mb3JtYXRpb24gaXMgdXNlZCB3aGVuIHNlbmRpbmcgV2ViaG9va3Mgb3IgZW1haWxzXG4gKiBkdXJpbmcgdGhlIHRyYW5zYWN0aW9uLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBldmVudCBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFdmVudFJlcXVlc3Qge1xuICBldmVudEluZm8/OiBFdmVudEluZm87XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFeHBvcnRSZXF1ZXN0IHtcbiAgZGF0ZVRpbWVTZWNvbmRzRm9ybWF0Pzogc3RyaW5nO1xuICB6b25lSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIHtAbGluayBHcm91cH0gYW5kIHtAbGluayBHcm91cE1lbWJlcn0gZXZlbnRzLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUdyb3VwRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBncm91cD86IEdyb3VwO1xufVxuXG4vLyBEbyBub3QgcmVxdWlyZSBhIHNldHRlciBmb3IgJ3R5cGUnLCBpdCBpcyBkZWZpbmVkIGJ5IHRoZSBjb25jcmV0ZSBjbGFzcyBhbmQgaXMgbm90IG11dGFibGVcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUlkZW50aXR5UHJvdmlkZXI8RCBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8VVVJRCwgRD47XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFtYmRhQ29uZmlndXJhdGlvbj86IExhbWJkYUNvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsaW5raW5nU3RyYXRlZ3k/OiBJZGVudGl0eVByb3ZpZGVyTGlua2luZ1N0cmF0ZWd5O1xuICBuYW1lPzogc3RyaW5nO1xuICB0ZW5hbnRDb25maWd1cmF0aW9uPzogUmVjb3JkPFVVSUQsIElkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uPjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0eXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIHJlY29uY2lsZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgY3JlYXRlUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VMb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgbWV0YURhdGE/OiBNZXRhRGF0YTtcbiAgbmV3RGV2aWNlPzogYm9vbGVhbjtcbiAgbm9KV1Q/OiBib29sZWFuO1xufVxuXG4vLyBEbyBub3QgcmVxdWlyZSBhIHNldHRlciBmb3IgJ3R5cGUnLCBpdCBpcyBkZWZpbmVkIGJ5IHRoZSBjb25jcmV0ZSBjbGFzcyBhbmQgaXMgbm90IG11dGFibGVcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVidWc/OiBib29sZWFuO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0cmFuc3BvcnQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBNZXNzZW5nZXJUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlU0FNTHYySWRlbnRpdHlQcm92aWRlcjxEIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8RD4ge1xuICBhc3NlcnRpb25EZWNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFNBTUx2MkFzc2VydGlvbkRlY3J5cHRpb25Db25maWd1cmF0aW9uO1xuICBlbWFpbENsYWltPzogc3RyaW5nO1xuICBrZXlJZD86IFVVSUQ7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZU5hbWVJZEZvckVtYWlsPzogYm9vbGVhbjtcbiAgdXNlcm5hbWVDbGFpbT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBudW1iZXJPZlJlc3VsdHM/OiBudW1iZXI7XG4gIG9yZGVyQnk/OiBzdHJpbmc7XG4gIHN0YXJ0Um93PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCB7QGxpbmsgVXNlcn0tcmVsYXRlZCBldmVudHMuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlVXNlckV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlJbmZvIHtcbiAgdHlwZT86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBCcmVhY2hlZFBhc3N3b3JkU3RhdHVzIHtcbiAgTm9uZSA9IFwiTm9uZVwiLFxuICBFeGFjdE1hdGNoID0gXCJFeGFjdE1hdGNoXCIsXG4gIFN1YkFkZHJlc3NNYXRjaCA9IFwiU3ViQWRkcmVzc01hdGNoXCIsXG4gIFBhc3N3b3JkT25seSA9IFwiUGFzc3dvcmRPbmx5XCIsXG4gIENvbW1vblBhc3N3b3JkID0gXCJDb21tb25QYXNzd29yZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyZWFjaGVkUGFzc3dvcmRUZW5hbnRNZXRyaWMge1xuICBhY3Rpb25SZXF1aXJlZD86IG51bWJlcjtcbiAgbWF0Y2hlZENvbW1vblBhc3N3b3JkQ291bnQ/OiBudW1iZXI7XG4gIG1hdGNoZWRFeGFjdENvdW50PzogbnVtYmVyO1xuICBtYXRjaGVkUGFzc3dvcmRDb3VudD86IG51bWJlcjtcbiAgbWF0Y2hlZFN1YkFkZHJlc3NDb3VudD86IG51bWJlcjtcbiAgcGFzc3dvcmRzQ2hlY2tlZENvdW50PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ09SU0NvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYWxsb3dDcmVkZW50aWFscz86IGJvb2xlYW47XG4gIGFsbG93ZWRIZWFkZXJzPzogQXJyYXk8c3RyaW5nPjtcbiAgYWxsb3dlZE1ldGhvZHM/OiBBcnJheTxIVFRQTWV0aG9kPjtcbiAgYWxsb3dlZE9yaWdpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGV4cG9zZWRIZWFkZXJzPzogQXJyYXk8c3RyaW5nPjtcbiAgcHJlZmxpZ2h0TWF4QWdlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFhNTCBjYW5vbmljYWxpemF0aW9uIG1ldGhvZCBlbnVtZXJhdGlvbi4gVGhpcyBpcyB1c2VkIGZvciB0aGUgSWRQIGFuZCBTUCBzaWRlIG9mIEZ1c2lvbkF1dGggU0FNTC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gQ2Fub25pY2FsaXphdGlvbk1ldGhvZCB7XG4gIGV4Y2x1c2l2ZSA9IFwiZXhjbHVzaXZlXCIsXG4gIGV4Y2x1c2l2ZV93aXRoX2NvbW1lbnRzID0gXCJleGNsdXNpdmVfd2l0aF9jb21tZW50c1wiLFxuICBpbmNsdXNpdmUgPSBcImluY2x1c2l2ZVwiLFxuICBpbmNsdXNpdmVfd2l0aF9jb21tZW50cyA9IFwiaW5jbHVzaXZlX3dpdGhfY29tbWVudHNcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBDYXB0Y2hhTWV0aG9kIHtcbiAgR29vZ2xlUmVjYXB0Y2hhVjIgPSBcIkdvb2dsZVJlY2FwdGNoYVYyXCIsXG4gIEdvb2dsZVJlY2FwdGNoYVYzID0gXCJHb29nbGVSZWNhcHRjaGFWM1wiLFxuICBIQ2FwdGNoYSA9IFwiSENhcHRjaGFcIixcbiAgSENhcHRjaGFFbnRlcnByaXNlID0gXCJIQ2FwdGNoYUVudGVycHJpc2VcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBlbnVtIENoYW5nZVBhc3N3b3JkUmVhc29uIHtcbiAgQWRtaW5pc3RyYXRpdmUgPSBcIkFkbWluaXN0cmF0aXZlXCIsXG4gIEJyZWFjaGVkID0gXCJCcmVhY2hlZFwiLFxuICBFeHBpcmVkID0gXCJFeHBpcmVkXCIsXG4gIFZhbGlkYXRpb24gPSBcIlZhbGlkYXRpb25cIlxufVxuXG4vKipcbiAqIENoYW5nZSBwYXNzd29yZCByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VQYXNzd29yZFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNoYW5nZVBhc3N3b3JkSWQ/OiBzdHJpbmc7XG4gIGN1cnJlbnRQYXNzd29yZD86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgbG9naW5JZFR5cGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdHJ1c3RDaGFsbGVuZ2U/OiBzdHJpbmc7XG4gIHRydXN0VG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2hhbmdlIHBhc3N3b3JkIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlUGFzc3dvcmRSZXNwb25zZSB7XG4gIG9uZVRpbWVQYXNzd29yZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIENsZWFuU3BlYWsgY29uZmlndXJhdGlvbiBhdCB0aGUgc3lzdGVtIGFuZCBhcHBsaWNhdGlvbiBsZXZlbC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGVhblNwZWFrQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIHVybD86IHN0cmluZztcbiAgdXNlcm5hbWVNb2RlcmF0aW9uPzogVXNlcm5hbWVNb2RlcmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJuYW1lTW9kZXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgZW51bSBDbGllbnRBdXRoZW50aWNhdGlvblBvbGljeSB7XG4gIFJlcXVpcmVkID0gXCJSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZCA9IFwiTm90UmVxdWlyZWRcIixcbiAgTm90UmVxdWlyZWRXaGVuVXNpbmdQS0NFID0gXCJOb3RSZXF1aXJlZFdoZW5Vc2luZ1BLQ0VcIlxufVxuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBwYXJhbWV0ZXJzIHVzZWQgdG8gaW50cm9zcGVjdCBhbiBhY2Nlc3MgdG9rZW4gdGhhdCB3YXMgb2J0YWluZWQgdmlhIHRoZSBjbGllbnQgY3JlZGVudGlhbHMgZ3JhbnQuXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudENyZWRlbnRpYWxzQWNjZXNzVG9rZW5JbnRyb3NwZWN0UmVxdWVzdCB7XG4gIHRlbmFudElkPzogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBvYmplY3QgdG8gbWFrZSBhIENsaWVudCBDcmVkZW50aWFscyBncmFudCByZXF1ZXN0IHRvIG9idGFpbiBhbiBhY2Nlc3MgdG9rZW4uXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudENyZWRlbnRpYWxzR3JhbnRSZXF1ZXN0IHtcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBncmFudF90eXBlPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JQb2xpY3kge1xuICBjb25uZWN0b3JJZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgbWlncmF0ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JSZXF1ZXN0IHtcbiAgY29ubmVjdG9yPzogQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JSZXNwb25zZSB7XG4gIGNvbm5lY3Rvcj86IEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uO1xuICBjb25uZWN0b3JzPzogQXJyYXk8QmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24+O1xufVxuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBjb25uZWN0b3JzLiBUaGlzIGVudW0gaXMgc3RvcmVkIGFzIGFuIG9yZGluYWwgb24gdGhlIDxjb2RlPmlkZW50aXRpZXM8L2NvZGU+IHRhYmxlLCBvcmRlciBtdXN0IGJlIG1haW50YWluZWQuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGVudW0gQ29ubmVjdG9yVHlwZSB7XG4gIEZ1c2lvbkF1dGggPSBcIkZ1c2lvbkF1dGhcIixcbiAgR2VuZXJpYyA9IFwiR2VuZXJpY1wiLFxuICBMREFQID0gXCJMREFQXCJcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBjb25zZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50IHtcbiAgY29uc2VudEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGNvdW50cnlNaW5pbXVtQWdlRm9yU2VsZkNvbnNlbnQ/OiBMb2NhbGl6ZWRJbnRlZ2VycztcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlZmF1bHRNaW5pbXVtQWdlRm9yU2VsZkNvbnNlbnQ/OiBudW1iZXI7XG4gIGVtYWlsUGx1cz86IEVtYWlsUGx1cztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbXVsdGlwbGVWYWx1ZXNBbGxvd2VkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgdmFsdWVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWFpbFBsdXMgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbWF4aW11bVRpbWVUb1NlbmRFbWFpbEluSG91cnM/OiBudW1iZXI7XG4gIG1pbmltdW1UaW1lVG9TZW5kRW1haWxJbkhvdXJzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IGZvciBVc2VyIGNvbnNlbnQgdHlwZXMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnRSZXF1ZXN0IHtcbiAgY29uc2VudD86IENvbnNlbnQ7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBjb25zZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50UmVzcG9uc2Uge1xuICBjb25zZW50PzogQ29uc2VudDtcbiAgY29uc2VudHM/OiBBcnJheTxDb25zZW50Pjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIENvbnNlbnRzXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBDb25zZW50c1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBDb25zZW50U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQ29uc2VudCBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnRTZWFyY2hSZXNwb25zZSB7XG4gIGNvbnNlbnRzPzogQXJyYXk8Q29uc2VudD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyBhIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBDb25zZW50U3RhdHVzIHtcbiAgQWN0aXZlID0gXCJBY3RpdmVcIixcbiAgUmV2b2tlZCA9IFwiUmV2b2tlZFwiXG59XG5cbi8qKlxuICogU3RhdHVzIGZvciBjb250ZW50IGxpa2UgdXNlcm5hbWVzLCBwcm9maWxlIGF0dHJpYnV0ZXMsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gQ29udGVudFN0YXR1cyB7XG4gIEFDVElWRSA9IFwiQUNUSVZFXCIsXG4gIFBFTkRJTkcgPSBcIlBFTkRJTkdcIixcbiAgUkVKRUNURUQgPSBcIlJFSkVDVEVEXCJcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBpbmJvdW5kIGxhbWJkYSBwYXJhbWV0ZXIgJ2NvbnRleHQnIGZvciBNRkEgUmVxdWlyZWQgbGFtYmRhcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0IHtcbiAgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIGFjdGlvbj86IE11bHRpRmFjdG9yQWN0aW9uO1xuICBhcHBsaWNhdGlvbj86IEFwcGxpY2F0aW9uO1xuICBhdXRoZW50aWNhdGlvblRocmVhdHM/OiBBcnJheTxBdXRoZW50aWNhdGlvblRocmVhdHM+O1xuICBhdXRoZW50aWNhdGlvblR5cGU/OiBzdHJpbmc7XG4gIGV2ZW50SW5mbz86IEV2ZW50SW5mbztcbiAgbWZhVHJ1c3Q/OiBUcnVzdDtcbiAgcG9saWNpZXM/OiBQb2xpY2llcztcbn1cblxuLyoqXG4gKiBBIG51bWJlciBpZGVudGlmeWluZyBhIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtLiBWYWx1ZXMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgPGFcbiAqIGhyZWY9XCJodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jb3NlL2Nvc2UueGh0bWwjYWxnb3JpdGhtc1wiPklBTkEgQ09TRSBBbGdvcml0aG1zIHJlZ2lzdHJ5PC9hPlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIENvc2VBbGdvcml0aG1JZGVudGlmaWVyIHtcbiAgRVMyNTYgPSBcIlNIQTI1NndpdGhFQ0RTQVwiLFxuICBFUzM4NCA9IFwiU0hBMzg0d2l0aEVDRFNBXCIsXG4gIEVTNTEyID0gXCJTSEE1MTJ3aXRoRUNEU0FcIixcbiAgUlMyNTYgPSBcIlNIQTI1NndpdGhSU0FcIixcbiAgUlMzODQgPSBcIlNIQTM4NHdpdGhSU0FcIixcbiAgUlM1MTIgPSBcIlNIQTUxMndpdGhSU0FcIixcbiAgUFMyNTYgPSBcIlNIQS0yNTZcIixcbiAgUFMzODQgPSBcIlNIQS0zODRcIixcbiAgUFM1MTIgPSBcIlNIQS01MTJcIlxufVxuXG4vKipcbiAqIENPU0UgRWxsaXB0aWMgQ3VydmUgaWRlbnRpZmllciB0byBkZXRlcm1pbmUgd2hpY2ggZWxsaXB0aWMgY3VydmUgdG8gdXNlIHdpdGggYSBnaXZlbiBrZXlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBDb3NlRWxsaXB0aWNDdXJ2ZSB7XG4gIFJlc2VydmVkID0gXCJSZXNlcnZlZFwiLFxuICBQMjU2ID0gXCJQMjU2XCIsXG4gIFAzODQgPSBcIlAzODRcIixcbiAgUDUyMSA9IFwiUDUyMVwiLFxuICBYMjU1MTkgPSBcIlgyNTUxOVwiLFxuICBYNDQ4ID0gXCJYNDQ4XCIsXG4gIEVkMjU1MTkgPSBcIkVkMjU1MTlcIixcbiAgRWQ0NDggPSBcIkVkNDQ4XCIsXG4gIFNlY3AyNTZrMSA9IFwiU2VjcDI1NmsxXCJcbn1cblxuLyoqXG4gKiBDT1NFIGtleSB0eXBlXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gQ29zZUtleVR5cGUge1xuICBSZXNlcnZlZCA9IFwiMFwiLFxuICBPS1AgPSBcIjFcIixcbiAgRUMyID0gXCIyXCIsXG4gIFJTQSA9IFwiM1wiLFxuICBTeW1tZXRyaWMgPSBcIjRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvdW50IHtcbiAgY291bnQ/OiBudW1iZXI7XG4gIGludGVydmFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBvdXRwdXQgZm9yIHRoZSB7QGNvZGUgY3JlZFByb3BzfSBleHRlbnNpb25cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxQcm9wZXJ0aWVzT3V0cHV0IHtcbiAgcms/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgZGFpbHkgYWN0aXZlIHVzZXIgcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlIHtcbiAgZGFpbHlBY3RpdmVVc2Vycz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3Qgb2JqZWN0IHRvIGFwcHJvdmUgYSBkZXZpY2UgZ3JhbnQuXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUFwcHJvdmFsUmVxdWVzdCB7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcl9jb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VBcHByb3ZhbFJlc3BvbnNlIHtcbiAgZGV2aWNlR3JhbnRTdGF0dXM/OiBzdHJpbmc7XG4gIGRldmljZUluZm8/OiBEZXZpY2VJbmZvO1xuICBpZGVudGl0eVByb3ZpZGVyTGluaz86IElkZW50aXR5UHJvdmlkZXJMaW5rO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUF1dGhvcml6YXRpb25SZXF1ZXN0IHtcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VJbmZvIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhc3RBY2Nlc3NlZEFkZHJlc3M/OiBzdHJpbmc7XG4gIGxhc3RBY2Nlc3NlZEluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIERldmljZVR5cGUge1xuICBCUk9XU0VSID0gXCJCUk9XU0VSXCIsXG4gIERFU0tUT1AgPSBcIkRFU0tUT1BcIixcbiAgTEFQVE9QID0gXCJMQVBUT1BcIixcbiAgTU9CSUxFID0gXCJNT0JJTEVcIixcbiAgT1RIRVIgPSBcIk9USEVSXCIsXG4gIFNFUlZFUiA9IFwiU0VSVkVSXCIsXG4gIFRBQkxFVCA9IFwiVEFCTEVUXCIsXG4gIFRWID0gXCJUVlwiLFxuICBVTktOT1dOID0gXCJVTktOT1dOXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVJlc3BvbnNlIHtcbiAgZGV2aWNlX2NvZGU/OiBzdHJpbmc7XG4gIGV4cGlyZXNfaW4/OiBudW1iZXI7XG4gIGludGVydmFsPzogbnVtYmVyO1xuICB1c2VyX2NvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbl91cmk/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbl91cmlfY29tcGxldGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVVzZXJDb2RlUmVzcG9uc2Uge1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGRldmljZUluZm8/OiBEZXZpY2VJbmZvO1xuICBleHBpcmVzX2luPzogbnVtYmVyO1xuICBwZW5kaW5nSWRQTGluaz86IFBlbmRpbmdJZFBMaW5rO1xuICBzY29wZT86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1c2VyX2NvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBkaXNwbGF5YWJsZSByYXcgbG9naW4gdGhhdCBpbmNsdWRlcyBhcHBsaWNhdGlvbiBuYW1lIGFuZCB1c2VyIGxvZ2luSWQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcGxheWFibGVSYXdMb2dpbiBleHRlbmRzIFJhd0xvZ2luIHtcbiAgYXBwbGljYXRpb25OYW1lPzogc3RyaW5nO1xuICBsb2NhdGlvbj86IExvY2F0aW9uO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBsb2dpbklkVHlwZT86IElkZW50aXR5VHlwZTtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFsbCBpZGVudGl0eSBwcm92aWRlcnMgdGhhdCBjYW4gYmUgZG9tYWluIGJhc2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvbWFpbkJhc2VkSWRlbnRpdHlQcm92aWRlciB7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyBhbiBhYnN0cmFjdGlvbiBvZiBhIHNpbXBsZSBlbWFpbCBtZXNzYWdlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsIHtcbiAgYXR0YWNobWVudHM/OiBBcnJheTxBdHRhY2htZW50PjtcbiAgYmNjPzogQXJyYXk8RW1haWxBZGRyZXNzPjtcbiAgY2M/OiBBcnJheTxFbWFpbEFkZHJlc3M+O1xuICBmcm9tPzogRW1haWxBZGRyZXNzO1xuICBodG1sPzogc3RyaW5nO1xuICByZXBseVRvPzogRW1haWxBZGRyZXNzO1xuICBzdWJqZWN0Pzogc3RyaW5nO1xuICB0ZXh0Pzogc3RyaW5nO1xuICB0bz86IEFycmF5PEVtYWlsQWRkcmVzcz47XG59XG5cbi8qKlxuICogQW4gZW1haWwgYWRkcmVzcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEFkZHJlc3Mge1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICBkaXNwbGF5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsQ29uZmlndXJhdGlvbiB7XG4gIGFkZGl0aW9uYWxIZWFkZXJzPzogQXJyYXk8RW1haWxIZWFkZXI+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRlZmF1bHRGcm9tRW1haWw/OiBzdHJpbmc7XG4gIGRlZmF1bHRGcm9tTmFtZT86IHN0cmluZztcbiAgZW1haWxVcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBlbWFpbFZlcmlmaWVkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZm9yZ290UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBob3N0Pzogc3RyaW5nO1xuICBpbXBsaWNpdEVtYWlsVmVyaWZpY2F0aW9uQWxsb3dlZD86IGJvb2xlYW47XG4gIGxvZ2luSWRJblVzZU9uQ3JlYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5JZEluVXNlT25VcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbk5ld0RldmljZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luU3VzcGljaW91c0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICBwYXNzd29yZGxlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFJlc2V0U3VjY2Vzc0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcG9ydD86IG51bWJlcjtcbiAgcHJvcGVydGllcz86IHN0cmluZztcbiAgc2VjdXJpdHk/OiBFbWFpbFNlY3VyaXR5VHlwZTtcbiAgc2V0UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RBZGRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RSZW1vdmVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB1bnZlcmlmaWVkPzogRW1haWxVbnZlcmlmaWVkT3B0aW9ucztcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHZlcmlmaWNhdGlvblN0cmF0ZWd5PzogVmVyaWZpY2F0aW9uU3RyYXRlZ3k7XG4gIHZlcmlmeUVtYWlsPzogYm9vbGVhbjtcbiAgdmVyaWZ5RW1haWxXaGVuQ2hhbmdlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIEVtYWlsU2VjdXJpdHlUeXBlIHtcbiAgTk9ORSA9IFwiTk9ORVwiLFxuICBTU0wgPSBcIlNTTFwiLFxuICBUTFMgPSBcIlRMU1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsSGVhZGVyIHtcbiAgbmFtZT86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3RvcmVzIGFuIGVtYWlsIHRlbXBsYXRlIHVzZWQgdG8gc2VuZCBlbWFpbHMgdG8gdXNlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZSB7XG4gIGRlZmF1bHRGcm9tTmFtZT86IHN0cmluZztcbiAgZGVmYXVsdEh0bWxUZW1wbGF0ZT86IHN0cmluZztcbiAgZGVmYXVsdFN1YmplY3Q/OiBzdHJpbmc7XG4gIGRlZmF1bHRUZXh0VGVtcGxhdGU/OiBzdHJpbmc7XG4gIGZyb21FbWFpbD86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9jYWxpemVkRnJvbU5hbWVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbG9jYWxpemVkSHRtbFRlbXBsYXRlcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIGxvY2FsaXplZFN1YmplY3RzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbG9jYWxpemVkVGV4dFRlbXBsYXRlcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW1haWwgdGVtcGxhdGUgcmVxdWVzdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlUmVxdWVzdCB7XG4gIGVtYWlsVGVtcGxhdGU/OiBFbWFpbFRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEVtYWlsIHRlbXBsYXRlIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVSZXNwb25zZSB7XG4gIGVtYWlsVGVtcGxhdGU/OiBFbWFpbFRlbXBsYXRlO1xuICBlbWFpbFRlbXBsYXRlcz86IEFycmF5PEVtYWlsVGVtcGxhdGU+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgRW1haWwgdGVtcGxhdGVzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW1haWwgdGVtcGxhdGVzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZVNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBFbWFpbFRlbXBsYXRlU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogRW1haWwgdGVtcGxhdGUgc2VhcmNoIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZVNlYXJjaFJlc3BvbnNlIHtcbiAgZW1haWxUZW1wbGF0ZXM/OiBBcnJheTxFbWFpbFRlbXBsYXRlPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVW52ZXJpZmllZE9wdGlvbnMge1xuICBhbGxvd0VtYWlsQ2hhbmdlV2hlbkdhdGVkPzogYm9vbGVhbjtcbiAgYmVoYXZpb3I/OiBVbnZlcmlmaWVkQmVoYXZpb3I7XG59XG5cbi8qKlxuICogU29tZXRoaW5nIHRoYXQgY2FuIGJlIGVuYWJsZWQgYW5kIHRodXMgYWxzbyBkaXNhYmxlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5hYmxlYWJsZSB7XG4gIGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBlbnRpdHkgdGhhdCBhIHVzZXIgY2FuIGJlIGdyYW50ZWQgcGVybWlzc2lvbnMgdG8uIE9yIGFuIGVudGl0eSB0aGF0IGNhbiBiZSBncmFudGVkIHBlcm1pc3Npb25zIHRvIGFub3RoZXIgZW50aXR5LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eSB7XG4gIGNsaWVudElkPzogc3RyaW5nO1xuICBjbGllbnRTZWNyZXQ/OiBzdHJpbmc7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwYXJlbnRJZD86IFVVSUQ7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdHlwZT86IEVudGl0eVR5cGU7XG59XG5cbi8qKlxuICogQSBncmFudCBmb3IgYW4gZW50aXR5IHRvIGEgdXNlciBvciBhbm90aGVyIGVudGl0eS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbnRpdHk/OiBFbnRpdHk7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHBlcm1pc3Npb25zPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVjaXBpZW50RW50aXR5SWQ/OiBVVUlEO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEVudGl0eSBncmFudCBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R3JhbnRSZXF1ZXN0IHtcbiAgZ3JhbnQ/OiBFbnRpdHlHcmFudDtcbn1cblxuLyoqXG4gKiBFbnRpdHkgZ3JhbnQgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFJlc3BvbnNlIHtcbiAgZ3JhbnQ/OiBFbnRpdHlHcmFudDtcbiAgZ3JhbnRzPzogQXJyYXk8RW50aXR5R3JhbnQ+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgZW50aXR5IGdyYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgZW50aXR5SWQ/OiBVVUlEO1xuICBuYW1lPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBlbnRpdHkgZ3JhbnRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEVudGl0eUdyYW50U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0eSBncmFudHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R3JhbnRTZWFyY2hSZXNwb25zZSB7XG4gIGdyYW50cz86IEFycmF5PEVudGl0eUdyYW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRW50aXR5IEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlSZXF1ZXN0IHtcbiAgZW50aXR5PzogRW50aXR5O1xufVxuXG4vKipcbiAqIEVudGl0eSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVJlc3BvbnNlIHtcbiAgZW50aXR5PzogRW50aXR5O1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdGhlIGVudGl0eSBxdWVyeS4gSXQgcHJvdmlkZXMgYSBidWlsZCBwYXR0ZXJuIGFzIHdlbGwgYXMgcHVibGljIGZpZWxkcyBmb3IgdXNlIG9uIGZvcm1zIGFuZCBpbiBhY3Rpb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZUVsYXN0aWNTZWFyY2hDcml0ZXJpYSB7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0aWVzXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogRW50aXR5U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0aWVzXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZWFyY2hSZXNwb25zZSB7XG4gIGVudGl0aWVzPzogQXJyYXk8RW50aXR5PjtcbiAgbmV4dFJlc3VsdHM/OiBzdHJpbmc7XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBlbnRpdHkgdHlwZSB0aGF0IGhhcyBhIHNwZWNpZmljIHNldCBvZiBwZXJtaXNzaW9ucy4gVGhlc2UgYXJlIGdsb2JhbCBvYmplY3RzIGFuZCBjYW4gYmUgdXNlZCBhY3Jvc3MgdGVuYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgand0Q29uZmlndXJhdGlvbj86IEVudGl0eUpXVENvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwZXJtaXNzaW9ucz86IEFycmF5PEVudGl0eVR5cGVQZXJtaXNzaW9uPjtcbn1cblxuLyoqXG4gKiBKV1QgQ29uZmlndXJhdGlvbiBmb3IgZW50aXRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5SldUQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhY2Nlc3NUb2tlbktleUlkPzogVVVJRDtcbiAgdGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzcGVjaWZpYyBlbnRpdHkgdHlwZSBwZXJtaXNzaW9uLiBUaGlzIHBlcm1pc3Npb24gY2FuIGJlIGdyYW50ZWQgdG8gdXNlcnMgb3Igb3RoZXIgZW50aXRpZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVBlcm1pc3Npb24ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXNEZWZhdWx0PzogYm9vbGVhbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW50aXR5IFR5cGUgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVSZXF1ZXN0IHtcbiAgZW50aXR5VHlwZT86IEVudGl0eVR5cGU7XG4gIHBlcm1pc3Npb24/OiBFbnRpdHlUeXBlUGVybWlzc2lvbjtcbn1cblxuLyoqXG4gKiBFbnRpdHkgVHlwZSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVSZXNwb25zZSB7XG4gIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlO1xuICBlbnRpdHlUeXBlcz86IEFycmF5PEVudGl0eVR5cGU+O1xuICBwZXJtaXNzaW9uPzogRW50aXR5VHlwZVBlcm1pc3Npb247XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBlbnRpdHkgdHlwZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXR5IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogRW50aXR5VHlwZVNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXNwb25zZSBmb3IgZW50aXR5IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVTZWFyY2hSZXNwb25zZSB7XG4gIGVudGl0eVR5cGVzPzogQXJyYXk8RW50aXR5VHlwZT47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVwaWNHYW1lc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFcGljIGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcGljR2FtZXNJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8RXBpY0dhbWVzQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBlcnJvci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcnJvciB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkIGVycm9yIGRvbWFpbiBvYmplY3QgdGhhdCBjYW4gYWxzbyBiZSB1c2VkIGFzIHRoZSByZXNwb25zZSBmcm9tIGFuIEFQSSBjYWxsLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVycm9ycyB7XG4gIGZpZWxkRXJyb3JzPzogUmVjb3JkPHN0cmluZywgQXJyYXk8RXJyb3I+PjtcbiAgZ2VuZXJhbEVycm9ycz86IEFycmF5PEVycm9yPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudENvbmZpZ3VyYXRpb24ge1xuICBldmVudHM/OiBSZWNvcmQ8RXZlbnRUeXBlLCBFdmVudENvbmZpZ3VyYXRpb25EYXRhPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudENvbmZpZ3VyYXRpb25EYXRhIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHRyYW5zYWN0aW9uVHlwZT86IFRyYW5zYWN0aW9uVHlwZTtcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCBhIHVzZXIgZXZlbnQgKGxvZ2luLCByZWdpc3RlciwgZXRjKSB0aGF0IGhlbHBzIGlkZW50aWZ5IHRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50IChsb2NhdGlvbiwgZGV2aWNlIHR5cGUsIE9TLCBldGMpLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50SW5mbyB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZXZpY2VEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZGV2aWNlTmFtZT86IHN0cmluZztcbiAgZGV2aWNlVHlwZT86IHN0cmluZztcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICBsb2NhdGlvbj86IExvY2F0aW9uO1xuICBvcz86IHN0cmluZztcbiAgdXNlckFnZW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IGxvZyB1c2VkIGludGVybmFsbHkgYnkgRnVzaW9uQXV0aCB0byBoZWxwIGRldmVsb3BlcnMgZGVidWcgaG9va3MsIFdlYmhvb2tzLCBlbWFpbCB0ZW1wbGF0ZXMsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZyB7XG4gIGlkPzogbnVtYmVyO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICB0eXBlPzogRXZlbnRMb2dUeXBlO1xufVxuXG4vKipcbiAqIEFuIEV2ZW50IFwiZXZlbnRcIiB0byBpbmRpY2F0ZSBhbiBldmVudCBsb2cgd2FzIGNyZWF0ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBldmVudExvZz86IEV2ZW50TG9nO1xufVxuXG4vKipcbiAqIEV2ZW50IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dSZXNwb25zZSB7XG4gIGV2ZW50TG9nPzogRXZlbnRMb2c7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciB0aGUgZXZlbnQgbG9nLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBlbmQ/OiBudW1iZXI7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIHN0YXJ0PzogbnVtYmVyO1xuICB0eXBlPzogRXZlbnRMb2dUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEV2ZW50TG9nU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogRXZlbnQgbG9nIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nU2VhcmNoUmVzcG9uc2Uge1xuICBldmVudExvZ3M/OiBBcnJheTxFdmVudExvZz47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV2ZW50IExvZyBUeXBlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBFdmVudExvZ1R5cGUge1xuICBJbmZvcm1hdGlvbiA9IFwiSW5mb3JtYXRpb25cIixcbiAgRGVidWcgPSBcIkRlYnVnXCIsXG4gIEVycm9yID0gXCJFcnJvclwiXG59XG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgZXZlbnQgaW5mb3JtYXRpb24uIFRoaXMgaXMgdGhlIEpTT04gdGhhdCBpcyBzZW50IGZyb20gRnVzaW9uQXV0aCB0byB3ZWJob29rcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFJlcXVlc3Qge1xuICBldmVudD86IEJhc2VFdmVudDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIGV2ZW50IHR5cGVzIHRoYXQgRnVzaW9uQXV0aCBwcm9kdWNlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgSldUUHVibGljS2V5VXBkYXRlID0gXCJqd3QucHVibGljLWtleS51cGRhdGVcIixcbiAgSldUUmVmcmVzaFRva2VuUmV2b2tlID0gXCJqd3QucmVmcmVzaC10b2tlbi5yZXZva2VcIixcbiAgSldUUmVmcmVzaCA9IFwiand0LnJlZnJlc2hcIixcbiAgQXVkaXRMb2dDcmVhdGUgPSBcImF1ZGl0LWxvZy5jcmVhdGVcIixcbiAgRXZlbnRMb2dDcmVhdGUgPSBcImV2ZW50LWxvZy5jcmVhdGVcIixcbiAgS2lja3N0YXJ0U3VjY2VzcyA9IFwia2lja3N0YXJ0LnN1Y2Nlc3NcIixcbiAgR3JvdXBDcmVhdGUgPSBcImdyb3VwLmNyZWF0ZVwiLFxuICBHcm91cENyZWF0ZUNvbXBsZXRlID0gXCJncm91cC5jcmVhdGUuY29tcGxldGVcIixcbiAgR3JvdXBEZWxldGUgPSBcImdyb3VwLmRlbGV0ZVwiLFxuICBHcm91cERlbGV0ZUNvbXBsZXRlID0gXCJncm91cC5kZWxldGUuY29tcGxldGVcIixcbiAgR3JvdXBNZW1iZXJBZGQgPSBcImdyb3VwLm1lbWJlci5hZGRcIixcbiAgR3JvdXBNZW1iZXJBZGRDb21wbGV0ZSA9IFwiZ3JvdXAubWVtYmVyLmFkZC5jb21wbGV0ZVwiLFxuICBHcm91cE1lbWJlclJlbW92ZSA9IFwiZ3JvdXAubWVtYmVyLnJlbW92ZVwiLFxuICBHcm91cE1lbWJlclJlbW92ZUNvbXBsZXRlID0gXCJncm91cC5tZW1iZXIucmVtb3ZlLmNvbXBsZXRlXCIsXG4gIEdyb3VwTWVtYmVyVXBkYXRlID0gXCJncm91cC5tZW1iZXIudXBkYXRlXCIsXG4gIEdyb3VwTWVtYmVyVXBkYXRlQ29tcGxldGUgPSBcImdyb3VwLm1lbWJlci51cGRhdGUuY29tcGxldGVcIixcbiAgR3JvdXBVcGRhdGUgPSBcImdyb3VwLnVwZGF0ZVwiLFxuICBHcm91cFVwZGF0ZUNvbXBsZXRlID0gXCJncm91cC51cGRhdGUuY29tcGxldGVcIixcbiAgVXNlckFjdGlvbiA9IFwidXNlci5hY3Rpb25cIixcbiAgVXNlckJ1bGtDcmVhdGUgPSBcInVzZXIuYnVsay5jcmVhdGVcIixcbiAgVXNlckNyZWF0ZSA9IFwidXNlci5jcmVhdGVcIixcbiAgVXNlckNyZWF0ZUNvbXBsZXRlID0gXCJ1c2VyLmNyZWF0ZS5jb21wbGV0ZVwiLFxuICBVc2VyRGVhY3RpdmF0ZSA9IFwidXNlci5kZWFjdGl2YXRlXCIsXG4gIFVzZXJEZWxldGUgPSBcInVzZXIuZGVsZXRlXCIsXG4gIFVzZXJEZWxldGVDb21wbGV0ZSA9IFwidXNlci5kZWxldGUuY29tcGxldGVcIixcbiAgVXNlckVtYWlsVXBkYXRlID0gXCJ1c2VyLmVtYWlsLnVwZGF0ZVwiLFxuICBVc2VyRW1haWxWZXJpZmllZCA9IFwidXNlci5lbWFpbC52ZXJpZmllZFwiLFxuICBVc2VySWRlbnRpdHlQcm92aWRlckxpbmsgPSBcInVzZXIuaWRlbnRpdHktcHJvdmlkZXIubGlua1wiLFxuICBVc2VySWRlbnRpdHlQcm92aWRlclVubGluayA9IFwidXNlci5pZGVudGl0eS1wcm92aWRlci51bmxpbmtcIixcbiAgVXNlckxvZ2luSWREdXBsaWNhdGVPbkNyZWF0ZSA9IFwidXNlci5sb2dpbklkLmR1cGxpY2F0ZS5jcmVhdGVcIixcbiAgVXNlckxvZ2luSWREdXBsaWNhdGVPblVwZGF0ZSA9IFwidXNlci5sb2dpbklkLmR1cGxpY2F0ZS51cGRhdGVcIixcbiAgVXNlckxvZ2luRmFpbGVkID0gXCJ1c2VyLmxvZ2luLmZhaWxlZFwiLFxuICBVc2VyTG9naW5OZXdEZXZpY2UgPSBcInVzZXIubG9naW4ubmV3LWRldmljZVwiLFxuICBVc2VyTG9naW5TdWNjZXNzID0gXCJ1c2VyLmxvZ2luLnN1Y2Nlc3NcIixcbiAgVXNlckxvZ2luU3VzcGljaW91cyA9IFwidXNlci5sb2dpbi5zdXNwaWNpb3VzXCIsXG4gIFVzZXJQYXNzd29yZEJyZWFjaCA9IFwidXNlci5wYXNzd29yZC5icmVhY2hcIixcbiAgVXNlclBhc3N3b3JkUmVzZXRTZW5kID0gXCJ1c2VyLnBhc3N3b3JkLnJlc2V0LnNlbmRcIixcbiAgVXNlclBhc3N3b3JkUmVzZXRTdGFydCA9IFwidXNlci5wYXNzd29yZC5yZXNldC5zdGFydFwiLFxuICBVc2VyUGFzc3dvcmRSZXNldFN1Y2Nlc3MgPSBcInVzZXIucGFzc3dvcmQucmVzZXQuc3VjY2Vzc1wiLFxuICBVc2VyUGFzc3dvcmRVcGRhdGUgPSBcInVzZXIucGFzc3dvcmQudXBkYXRlXCIsXG4gIFVzZXJSZWFjdGl2YXRlID0gXCJ1c2VyLnJlYWN0aXZhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvbkNyZWF0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uY3JlYXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25DcmVhdGVDb21wbGV0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uY3JlYXRlLmNvbXBsZXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25EZWxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlQ29tcGxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZS5jb21wbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uVXBkYXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi51cGRhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvblVwZGF0ZUNvbXBsZXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi51cGRhdGUuY29tcGxldGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvblZlcmlmaWVkID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi52ZXJpZmllZFwiLFxuICBVc2VyVHdvRmFjdG9yTWV0aG9kQWRkID0gXCJ1c2VyLnR3by1mYWN0b3IubWV0aG9kLmFkZFwiLFxuICBVc2VyVHdvRmFjdG9yTWV0aG9kUmVtb3ZlID0gXCJ1c2VyLnR3by1mYWN0b3IubWV0aG9kLnJlbW92ZVwiLFxuICBVc2VyVXBkYXRlID0gXCJ1c2VyLnVwZGF0ZVwiLFxuICBVc2VyVXBkYXRlQ29tcGxldGUgPSBcInVzZXIudXBkYXRlLmNvbXBsZXRlXCIsXG4gIFRlc3QgPSBcInRlc3RcIixcbiAgVXNlcklkZW50aXR5VmVyaWZpZWQgPSBcInVzZXIuaWRlbnRpdHkudmVyaWZpZWRcIixcbiAgVXNlcklkZW50aXR5VXBkYXRlID0gXCJ1c2VyLmlkZW50aXR5LnVwZGF0ZVwiXG59XG5cbi8qKlxuICogUmVwcmVzZW50IHRoZSB2YXJpb3VzIHN0YXRlcy9leHBlY3RhdGlvbnMgb2YgYSB1c2VyIGluIHRoZSBjb250ZXh0IG9mIHN0YXJ0aW5nIHZlcmlmaWNhdGlvblxuICovXG5leHBvcnQgZW51bSBFeGlzdGluZ1VzZXJTdHJhdGVneSB7XG4gIG11c3RFeGlzdCA9IFwibXVzdEV4aXN0XCIsXG4gIG11c3ROb3RFeGlzdCA9IFwibXVzdE5vdEV4aXN0XCJcbn1cblxuLyoqXG4gKiBBbiBleHBhbmRhYmxlIEFQSSByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBhbmRhYmxlUmVxdWVzdCB7XG4gIGV4cGFuZD86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQW4gZXhwYW5kYWJsZSBBUEkgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuZGFibGVSZXNwb25zZSB7XG4gIGV4cGFuZGFibGU/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBFeHBpcnlVbml0IHtcbiAgTUlOVVRFUyA9IFwiTUlOVVRFU1wiLFxuICBIT1VSUyA9IFwiSE9VUlNcIixcbiAgREFZUyA9IFwiREFZU1wiLFxuICBXRUVLUyA9IFwiV0VFS1NcIixcbiAgTU9OVEhTID0gXCJNT05USFNcIixcbiAgWUVBUlMgPSBcIllFQVJTXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhvcml6YXRpb25HcmFudElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgY2hhbmdlUGFzc3dvcmRJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGNoYW5nZVBhc3N3b3JkSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBkZXZpY2VDb2RlVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgZGV2aWNlVXNlckNvZGVJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGVtYWlsVmVyaWZpY2F0aW9uSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBlbWFpbFZlcmlmaWNhdGlvbklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgZW1haWxWZXJpZmljYXRpb25PbmVUaW1lQ29kZUdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGV4dGVybmFsQXV0aGVudGljYXRpb25JZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIGxvZ2luSW50ZW50VGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgb25lVGltZVBhc3N3b3JkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcGFzc3dvcmRsZXNzTG9naW5HZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBwYXNzd29yZGxlc3NMb2dpbk9uZVRpbWVDb2RlR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRsZXNzTG9naW5UaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBwZW5kaW5nQWNjb3VudExpbmtUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBwaG9uZVZlcmlmaWNhdGlvbklkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgcGhvbmVWZXJpZmljYXRpb25JZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHBob25lVmVyaWZpY2F0aW9uT25lVGltZUNvZGVHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uT25lVGltZUNvZGVHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICByZW1lbWJlck9BdXRoU2NvcGVDb25zZW50Q2hvaWNlVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgc2FtbHYyQXV0aE5SZXF1ZXN0SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBzZXR1cFBhc3N3b3JkSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBzZXR1cFBhc3N3b3JkSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0cnVzdFRva2VuVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdHdvRmFjdG9ySWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0d29GYWN0b3JPbmVUaW1lQ29kZUlkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgdHdvRmFjdG9yT25lVGltZUNvZGVJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHR3b0ZhY3RvclRydXN0SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB3ZWJBdXRobkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgd2ViQXV0aG5SZWdpc3RyYXRpb25DaGFsbGVuZ2VUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbEpXVEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBFeHRlcm5hbCBKV1Qtb25seSBpZGVudGl0eSBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmIGFuZCBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxKV1RJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8RXh0ZXJuYWxKV1RBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgY2xhaW1NYXA/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBkZWZhdWx0S2V5SWQ/OiBVVUlEO1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgaGVhZGVyS2V5UGFyYW1ldGVyPzogc3RyaW5nO1xuICBvYXV0aDI/OiBJZGVudGl0eVByb3ZpZGVyT2F1dGgyQ29uZmlndXJhdGlvbjtcbiAgdW5pcXVlSWRlbnRpdHlDbGFpbT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIEZ1c2lvbkF1dGggaXMgaW4gRklQUyBtb2RlIGJhc2VkIG9uIHRoZSBzeXN0ZW0gcHJvcGVydHkgPGNvZGU+ZnVzaW9uYXV0aC5maXBzLmVuYWJsZWQ8L2NvZGU+LiBUaGlzIGNhbiBvbmx5IGJlIGVuYWJsZWQgb25jZSBhbmRcbiAqIHNob3VsZCBiZSBlbmFibGVkIHdoZW4gdGhlIFZNIHN0YXJ0cyBvciBhcyBjbG9zZSB0byB0aGF0IHBvaW50IGFzIHBvc3NpYmxlLlxuICogPHA+XG4gKiBPbmNlIHRoaXMgaGFzIGJlZW4gZW5hYmxlZCwgaXQgY2Fubm90IGJlIGRpc2FibGVkLlxuICogPHA+XG4gKiBUaGlzIGFsc28gcHJvdmlkZXMgc29tZSBoZWxwZXJzIGZvciBGSVBTIHRoaW5ncyBzdWNoIGFzIHBhc3N3b3JkIGxlbmd0aCByZXF1aXJlbWVudHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpIGFuZCBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZJUFMge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYXBwSWQ/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGZpZWxkcz86IHN0cmluZztcbiAgbG9naW5NZXRob2Q/OiBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Q7XG4gIHBlcm1pc3Npb25zPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZhY2Vib29rIHNvY2lhbCBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0lkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxGYWNlYm9va0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBhcHBJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZmllbGRzPzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwb2xpY3kgdG8gY29uZmlndXJlIGlmIGFuZCB3aGVuIHRoZSB1c2VyLWFjdGlvbiBpcyBjYW5jZWxlZCBwcmlvciB0byB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgYWN0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWlsZWRBdXRoZW50aWNhdGlvbkFjdGlvbkNhbmNlbFBvbGljeSB7XG4gIG9uUGFzc3dvcmRSZXNldD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIGJlaGF2aW9yIG9mIGZhaWxlZCBsb2dpbiBhdHRlbXB0cy4gVGhpcyBoZWxwcyB1cyBwcm90ZWN0IGFnYWluc3QgYnJ1dGUgZm9yY2UgcGFzc3dvcmQgYXR0YWNrcy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbGVkQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYWN0aW9uQ2FuY2VsUG9saWN5PzogRmFpbGVkQXV0aGVudGljYXRpb25BY3Rpb25DYW5jZWxQb2xpY3k7XG4gIGFjdGlvbkR1cmF0aW9uPzogbnVtYmVyO1xuICBhY3Rpb25EdXJhdGlvblVuaXQ/OiBFeHBpcnlVbml0O1xuICBlbWFpbFVzZXI/OiBib29sZWFuO1xuICByZXNldENvdW50SW5TZWNvbmRzPzogbnVtYmVyO1xuICB0b29NYW55QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHVzZXJBY3Rpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgZmFtaWx5IGdyb3VwaW5nIG9mIHVzZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseSB7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG1lbWJlcnM/OiBBcnJheTxGYW1pbHlNZW1iZXI+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYWxsb3dDaGlsZFJlZ2lzdHJhdGlvbnM/OiBib29sZWFuO1xuICBjb25maXJtQ2hpbGRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBkZWxldGVPcnBoYW5lZEFjY291bnRzPzogYm9vbGVhbjtcbiAgZGVsZXRlT3JwaGFuZWRBY2NvdW50c0RheXM/OiBudW1iZXI7XG4gIGZhbWlseVJlcXVlc3RFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBtYXhpbXVtQ2hpbGRBZ2U/OiBudW1iZXI7XG4gIG1pbmltdW1Pd25lckFnZT86IG51bWJlcjtcbiAgcGFyZW50RW1haWxSZXF1aXJlZD86IGJvb2xlYW47XG4gIHBhcmVudFJlZ2lzdHJhdGlvbkVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgZm9yIHNlbmRpbmcgb3V0IGZhbWlseSByZXF1ZXN0cyB0byBwYXJlbnQncy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlFbWFpbFJlcXVlc3Qge1xuICBwYXJlbnRFbWFpbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzaW5nbGUgZmFtaWx5IG1lbWJlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlNZW1iZXIge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG93bmVyPzogYm9vbGVhbjtcbiAgcm9sZT86IEZhbWlseVJvbGU7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBlbnVtIEZhbWlseVJvbGUge1xuICBDaGlsZCA9IFwiQ2hpbGRcIixcbiAgVGVlbiA9IFwiVGVlblwiLFxuICBBZHVsdCA9IFwiQWR1bHRcIlxufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IGZvciBtYW5hZ2luZyBmYW1pbGllcyBhbmQgbWVtYmVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlSZXF1ZXN0IHtcbiAgZmFtaWx5TWVtYmVyPzogRmFtaWx5TWVtYmVyO1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgbWFuYWdpbmcgZmFtaWxpZXMgYW5kIG1lbWJlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5UmVzcG9uc2Uge1xuICBmYW1pbGllcz86IEFycmF5PEZhbWlseT47XG4gIGZhbWlseT86IEZhbWlseTtcbn1cblxuLyoqXG4gKiBGb3Jnb3QgcGFzc3dvcmQgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZ290UGFzc3dvcmRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjaGFuZ2VQYXNzd29yZElkPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgbG9naW5JZFR5cGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgc2VuZEZvcmdvdFBhc3N3b3JkRW1haWw/OiBib29sZWFuO1xuICBzZW5kRm9yZ290UGFzc3dvcmRNZXNzYWdlPzogYm9vbGVhbjtcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB1c2VybmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3Jnb3QgcGFzc3dvcmQgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3Jnb3RQYXNzd29yZFJlc3BvbnNlIHtcbiAgY2hhbmdlUGFzc3dvcmRJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGVwcz86IEFycmF5PEZvcm1TdGVwPjtcbiAgdHlwZT86IEZvcm1UeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gRm9ybUNvbnRyb2wge1xuICBjaGVja2JveCA9IFwiY2hlY2tib3hcIixcbiAgbnVtYmVyID0gXCJudW1iZXJcIixcbiAgcGFzc3dvcmQgPSBcInBhc3N3b3JkXCIsXG4gIHJhZGlvID0gXCJyYWRpb1wiLFxuICBzZWxlY3QgPSBcInNlbGVjdFwiLFxuICB0ZXh0YXJlYSA9IFwidGV4dGFyZWFcIixcbiAgdGV4dCA9IFwidGV4dFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBGb3JtRGF0YVR5cGUge1xuICBib29sID0gXCJib29sXCIsXG4gIGNvbnNlbnQgPSBcImNvbnNlbnRcIixcbiAgZGF0ZSA9IFwiZGF0ZVwiLFxuICBlbWFpbCA9IFwiZW1haWxcIixcbiAgbnVtYmVyID0gXCJudW1iZXJcIixcbiAgcGhvbmVOdW1iZXIgPSBcInBob25lTnVtYmVyXCIsXG4gIHN0cmluZyA9IFwic3RyaW5nXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkIHtcbiAgY29uZmlybT86IGJvb2xlYW47XG4gIGNvbnNlbnRJZD86IFVVSUQ7XG4gIGNvbnRyb2w/OiBGb3JtQ29udHJvbDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGtleT86IHN0cmluZztcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBBcnJheTxzdHJpbmc+O1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHR5cGU/OiBGb3JtRGF0YVR5cGU7XG4gIHZhbGlkYXRvcj86IEZvcm1GaWVsZFZhbGlkYXRvcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1GaWVsZEFkbWluUG9saWN5IHtcbiAgRWRpdCA9IFwiRWRpdFwiLFxuICBWaWV3ID0gXCJWaWV3XCJcbn1cblxuLyoqXG4gKiBUaGUgRm9ybUZpZWxkIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1GaWVsZFJlcXVlc3Qge1xuICBmaWVsZD86IEZvcm1GaWVsZDtcbiAgZmllbGRzPzogQXJyYXk8Rm9ybUZpZWxkPjtcbn1cblxuLyoqXG4gKiBGb3JtIGZpZWxkIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkUmVzcG9uc2Uge1xuICBmaWVsZD86IEZvcm1GaWVsZDtcbiAgZmllbGRzPzogQXJyYXk8Rm9ybUZpZWxkPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkVmFsaWRhdG9yIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGV4cHJlc3Npb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRm9ybSByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVJlcXVlc3Qge1xuICBmb3JtPzogRm9ybTtcbn1cblxuLyoqXG4gKiBGb3JtIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtUmVzcG9uc2Uge1xuICBmb3JtPzogRm9ybTtcbiAgZm9ybXM/OiBBcnJheTxGb3JtPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVN0ZXAge1xuICBmaWVsZHM/OiBBcnJheTxVVUlEPjtcbiAgdHlwZT86IEZvcm1TdGVwVHlwZTtcbn1cblxuLyoqXG4gKiBEZW5vdGVzIHRoZSB0eXBlIG9mIGZvcm0gc3RlcC4gVGhpcyBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBkaWZmZXJlbnQgYmVoYXZpb3Igb24gZm9ybSBzdGVwcyBpbiB0aGUgcmVnaXN0cmF0aW9uIGZsb3cuXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1TdGVwVHlwZSB7XG4gIGNvbGxlY3REYXRhID0gXCJjb2xsZWN0RGF0YVwiLFxuICB2ZXJpZnlFbWFpbCA9IFwidmVyaWZ5RW1haWxcIixcbiAgdmVyaWZ5UGhvbmVOdW1iZXIgPSBcInZlcmlmeVBob25lTnVtYmVyXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1UeXBlIHtcbiAgcmVnaXN0cmF0aW9uID0gXCJyZWdpc3RyYXRpb25cIixcbiAgYWRtaW5SZWdpc3RyYXRpb24gPSBcImFkbWluUmVnaXN0cmF0aW9uXCIsXG4gIGFkbWluVXNlciA9IFwiYWRtaW5Vc2VyXCIsXG4gIHNlbGZTZXJ2aWNlVXNlciA9IFwic2VsZlNlcnZpY2VVc2VyXCJcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEZ1c2lvbkF1dGggY29ubmVjdG9yLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVzaW9uQXV0aENvbm5lY3RvckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbiB7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgZ2VuZXJpYyBjb25uZWN0b3IuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljQ29ubmVjdG9yQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uIHtcbiAgYXV0aGVudGljYXRpb25VUkw/OiBzdHJpbmc7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBoZWFkZXJzPzogSFRUUEhlYWRlcnM7XG4gIGh0dHBBdXRoZW50aWNhdGlvblBhc3N3b3JkPzogc3RyaW5nO1xuICBodHRwQXV0aGVudGljYXRpb25Vc2VybmFtZT86IHN0cmluZztcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHNzbENlcnRpZmljYXRlS2V5SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY01lc3NlbmdlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiB7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBoZWFkZXJzPzogSFRUUEhlYWRlcnM7XG4gIGh0dHBBdXRoZW50aWNhdGlvblBhc3N3b3JkPzogc3RyaW5nO1xuICBodHRwQXV0aGVudGljYXRpb25Vc2VybmFtZT86IHN0cmluZztcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHNzbENlcnRpZmljYXRlPzogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdvb2dsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgcHJvcGVydGllcz86IEdvb2dsZUlkZW50aXR5UHJvdmlkZXJQcm9wZXJ0aWVzO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHb29nbGUgc29jaWFsIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHb29nbGVJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8R29vZ2xlQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgbG9naW5NZXRob2Q/OiBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Q7XG4gIHByb3BlcnRpZXM/OiBHb29nbGVJZGVudGl0eVByb3ZpZGVyUHJvcGVydGllcztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogR29vZ2xlIHNvY2lhbCBsb2dpbiBwcm92aWRlciBwYXJhbWV0ZXJzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHb29nbGVJZGVudGl0eVByb3ZpZGVyUHJvcGVydGllcyB7XG4gIGFwaT86IHN0cmluZztcbiAgYnV0dG9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF1dGhvcml6YXRpb24gR3JhbnQgdHlwZXMgYXMgZGVmaW5lZCBieSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5XCI+T0F1dGggMi4wIEF1dGhvcml6YXRpb25cbiAqIEZyYW1ld29yayAtIFJGQyA2NzQ5PC9hPi5cbiAqIDxwPlxuICogU3BlY2lmaWMgbmFtZXMgYXMgZGVmaW5lZCBieSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1OTEjc2VjdGlvbi00LjFcIj5cbiAqIE9BdXRoIDIuMCBEeW5hbWljIENsaWVudCBSZWdpc3RyYXRpb24gUHJvdG9jb2wgLSBSRkMgNzU5MSBTZWN0aW9uIDQuMTwvYT5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEdyYW50VHlwZSB7XG4gIGF1dGhvcml6YXRpb25fY29kZSA9IFwiYXV0aG9yaXphdGlvbl9jb2RlXCIsXG4gIGltcGxpY2l0ID0gXCJpbXBsaWNpdFwiLFxuICBwYXNzd29yZCA9IFwicGFzc3dvcmRcIixcbiAgY2xpZW50X2NyZWRlbnRpYWxzID0gXCJjbGllbnRfY3JlZGVudGlhbHNcIixcbiAgcmVmcmVzaF90b2tlbiA9IFwicmVmcmVzaF90b2tlblwiLFxuICB1bmtub3duID0gXCJ1bmtub3duXCIsXG4gIGRldmljZV9jb2RlID0gXCJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTpkZXZpY2VfY29kZVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBUeWxlciBTY290dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHJvbGVzPzogUmVjb3JkPFVVSUQsIEFycmF5PEFwcGxpY2F0aW9uUm9sZT4+O1xuICB0ZW5hbnRJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBDcmVhdGVkIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cENyZWF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBDcmVhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBDcmVhdGUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwRGVsZXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIERlbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBEZWxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbn1cblxuLyoqXG4gKiBBIFVzZXIncyBtZW1iZXJzaGlwIGludG8gYSBHcm91cFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlciB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBncm91cElkPzogVVVJRDtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIEFkZCBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJBZGRDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIEFkZCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJBZGRFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBSZW1vdmUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyUmVtb3ZlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBSZW1vdmUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyUmVtb3ZlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBHcm91cCBNZW1iZXJzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBncm91cElkPzogVVVJRDtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBHcm91cCBNZW1iZXJzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBHcm91cE1lbWJlclNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXNwb25zZSBmb3IgR3JvdXAgTWVtYmVyc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclNlYXJjaFJlc3BvbnNlIHtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBNZW1iZXIgVXBkYXRlIENvbXBsZXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclVwZGF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBNZW1iZXIgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xufVxuXG4vKipcbiAqIEdyb3VwIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBSZXF1ZXN0IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgcm9sZUlkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIEdyb3VwIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwUmVzcG9uc2Uge1xuICBncm91cD86IEdyb3VwO1xuICBncm91cHM/OiBBcnJheTxHcm91cD47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBHcm91cHNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgR3JvdXBzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBHcm91cFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXNwb25zZSBmb3IgR3JvdXBzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwU2VhcmNoUmVzcG9uc2Uge1xuICBncm91cHM/OiBBcnJheTxHcm91cD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgVXBkYXRlIENvbXBsZXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFVwZGF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG9yaWdpbmFsPzogR3JvdXA7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBVcGRhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwVXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG9yaWdpbmFsPzogR3JvdXA7XG59XG5cbi8qKlxuICogVHlwZSBmb3Igd2ViaG9vayBoZWFkZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhUVFBIZWFkZXJzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBIVFRQTWV0aG9kIHtcbiAgR0VUID0gXCJHRVRcIixcbiAgUE9TVCA9IFwiUE9TVFwiLFxuICBQVVQgPSBcIlBVVFwiLFxuICBERUxFVEUgPSBcIkRFTEVURVwiLFxuICBIRUFEID0gXCJIRUFEXCIsXG4gIE9QVElPTlMgPSBcIk9QVElPTlNcIixcbiAgUEFUQ0ggPSBcIlBBVENIXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSFlQUkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgcmVseWluZ1BhcnR5QXBwbGljYXRpb25JZD86IHN0cmluZztcbiAgcmVseWluZ1BhcnR5VVJMPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIWVBSSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEhZUFJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgcmVseWluZ1BhcnR5QXBwbGljYXRpb25JZD86IHN0cmluZztcbiAgcmVseWluZ1BhcnR5VVJMPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sRW50cnkge1xuICBhY3Rpb24/OiBJUEFjY2Vzc0NvbnRyb2xFbnRyeUFjdGlvbjtcbiAgZW5kSVBBZGRyZXNzPzogc3RyaW5nO1xuICBzdGFydElQQWRkcmVzcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgZW51bSBJUEFjY2Vzc0NvbnRyb2xFbnRyeUFjdGlvbiB7XG4gIEFsbG93ID0gXCJBbGxvd1wiLFxuICBCbG9jayA9IFwiQmxvY2tcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbnRyaWVzPzogQXJyYXk8SVBBY2Nlc3NDb250cm9sRW50cnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFJlcXVlc3Qge1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0PzogSVBBY2Nlc3NDb250cm9sTGlzdDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZSB7XG4gIGlwQWNjZXNzQ29udHJvbExpc3Q/OiBJUEFjY2Vzc0NvbnRyb2xMaXN0O1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0cz86IEFycmF5PElQQWNjZXNzQ29udHJvbExpc3Q+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgSVAgQUNMcyAuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXNwb25zZSB7XG4gIGlwQWNjZXNzQ29udHJvbExpc3RzPzogQXJyYXk8SVBBY2Nlc3NDb250cm9sTGlzdD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTGltaXRVc2VyTGlua2luZ1BvbGljeSBleHRlbmRzIEVuYWJsZWFibGUge1xuICBtYXhpbXVtTGlua3M/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMaW5rIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBpZGVudGl0eVByb3ZpZGVyTmFtZT86IHN0cmluZztcbiAgaWRlbnRpdHlQcm92aWRlclR5cGU/OiBJZGVudGl0eVByb3ZpZGVyVHlwZTtcbiAgaWRlbnRpdHlQcm92aWRlclVzZXJJZD86IHN0cmluZztcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdExvZ2luSW5zdGFudD86IG51bWJlcjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxpbmtSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rPzogSWRlbnRpdHlQcm92aWRlckxpbms7XG4gIHBlbmRpbmdJZFBMaW5rSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2Uge1xuICBpZGVudGl0eVByb3ZpZGVyTGluaz86IElkZW50aXR5UHJvdmlkZXJMaW5rO1xuICBpZGVudGl0eVByb3ZpZGVyTGlua3M/OiBBcnJheTxJZGVudGl0eVByb3ZpZGVyTGluaz47XG59XG5cbi8qKlxuICogVGhlIElkUCBiZWhhdmlvciB3aGVuIG5vIHVzZXIgbGluayBoYXMgYmVlbiBtYWRlIHlldC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5UHJvdmlkZXJMaW5raW5nU3RyYXRlZ3kge1xuICBDcmVhdGVQZW5kaW5nTGluayA9IFwiQ3JlYXRlUGVuZGluZ0xpbmtcIixcbiAgRGlzYWJsZWQgPSBcIkRpc2FibGVkXCIsXG4gIExpbmtBbm9ueW1vdXNseSA9IFwiTGlua0Fub255bW91c2x5XCIsXG4gIExpbmtCeUVtYWlsID0gXCJMaW5rQnlFbWFpbFwiLFxuICBMaW5rQnlFbWFpbEZvckV4aXN0aW5nVXNlciA9IFwiTGlua0J5RW1haWxGb3JFeGlzdGluZ1VzZXJcIixcbiAgTGlua0J5VXNlcm5hbWUgPSBcIkxpbmtCeVVzZXJuYW1lXCIsXG4gIExpbmtCeVVzZXJuYW1lRm9yRXhpc3RpbmdVc2VyID0gXCJMaW5rQnlVc2VybmFtZUZvckV4aXN0aW5nVXNlclwiLFxuICBVbnN1cHBvcnRlZCA9IFwiVW5zdXBwb3J0ZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Qge1xuICBVc2VQb3B1cCA9IFwiVXNlUG9wdXBcIixcbiAgVXNlUmVkaXJlY3QgPSBcIlVzZVJlZGlyZWN0XCIsXG4gIFVzZVZlbmRvckphdmFTY3JpcHQgPSBcIlVzZVZlbmRvckphdmFTY3JpcHRcIlxufVxuXG4vKipcbiAqIExvZ2luIEFQSSByZXF1ZXN0IG9iamVjdCB1c2VkIGZvciBsb2dpbiB0byB0aGlyZC1wYXJ0eSBzeXN0ZW1zIChpLmUuIExvZ2luIHdpdGggRmFjZWJvb2spLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlTG9naW5SZXF1ZXN0IHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGVuY29kZWRKV1Q/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIG5vTGluaz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uIHtcbiAgYXV0aG9yaXphdGlvbl9lbmRwb2ludD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBjbGllbnRBdXRoZW50aWNhdGlvbk1ldGhvZD86IENsaWVudEF1dGhlbnRpY2F0aW9uTWV0aG9kO1xuICBlbWFpbENsYWltPzogc3RyaW5nO1xuICBlbWFpbFZlcmlmaWVkQ2xhaW0/OiBzdHJpbmc7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHRva2VuX2VuZHBvaW50Pzogc3RyaW5nO1xuICB1bmlxdWVJZENsYWltPzogc3RyaW5nO1xuICB1c2VyaW5mb19lbmRwb2ludD86IHN0cmluZztcbiAgdXNlcm5hbWVDbGFpbT86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gQ2xpZW50QXV0aGVudGljYXRpb25NZXRob2Qge1xuICBub25lID0gXCJub25lXCIsXG4gIGNsaWVudF9zZWNyZXRfYmFzaWMgPSBcImNsaWVudF9zZWNyZXRfYmFzaWNcIixcbiAgY2xpZW50X3NlY3JldF9wb3N0ID0gXCJjbGllbnRfc2VjcmV0X3Bvc3RcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyUGVuZGluZ0xpbmtSZXNwb25zZSB7XG4gIGlkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uPzogSWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb247XG4gIGxpbmtDb3VudD86IG51bWJlcjtcbiAgcGVuZGluZ0lkUExpbms/OiBQZW5kaW5nSWRQTGluaztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclJlcXVlc3Qge1xuICBpZGVudGl0eVByb3ZpZGVyPzogQmFzZUlkZW50aXR5UHJvdmlkZXI8YW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclJlc3BvbnNlIHtcbiAgaWRlbnRpdHlQcm92aWRlcj86IEJhc2VJZGVudGl0eVByb3ZpZGVyPGFueT47XG4gIGlkZW50aXR5UHJvdmlkZXJzPzogQXJyYXk8QmFzZUlkZW50aXR5UHJvdmlkZXI8YW55Pj47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBJZGVudGl0eSBQcm92aWRlcnMuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgbmFtZT86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0eXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIElkZW50aXR5IFByb3ZpZGVyc1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBJZGVudGl0eVByb3ZpZGVyU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogSWRlbnRpdHkgUHJvdmlkZXIgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyU2VhcmNoUmVzcG9uc2Uge1xuICBpZGVudGl0eVByb3ZpZGVycz86IEFycmF5PEJhc2VJZGVudGl0eVByb3ZpZGVyPGFueT4+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBsb2dpbklkVHlwZXM/OiBBcnJheTxzdHJpbmc+O1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVzcG9uc2Uge1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyVGVuYW50Q29uZmlndXJhdGlvbiB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBsaW1pdFVzZXJMaW5rQ291bnQ/OiBJZGVudGl0eVByb3ZpZGVyTGltaXRVc2VyTGlua2luZ1BvbGljeTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5UHJvdmlkZXJUeXBlIHtcbiAgQXBwbGUgPSBcIkFwcGxlXCIsXG4gIEVwaWNHYW1lcyA9IFwiRXBpY0dhbWVzXCIsXG4gIEV4dGVybmFsSldUID0gXCJFeHRlcm5hbEpXVFwiLFxuICBGYWNlYm9vayA9IFwiRmFjZWJvb2tcIixcbiAgR29vZ2xlID0gXCJHb29nbGVcIixcbiAgSFlQUiA9IFwiSFlQUlwiLFxuICBMaW5rZWRJbiA9IFwiTGlua2VkSW5cIixcbiAgTmludGVuZG8gPSBcIk5pbnRlbmRvXCIsXG4gIE9wZW5JRENvbm5lY3QgPSBcIk9wZW5JRENvbm5lY3RcIixcbiAgU0FNTHYyID0gXCJTQU1MdjJcIixcbiAgU0FNTHYySWRQSW5pdGlhdGVkID0gXCJTQU1MdjJJZFBJbml0aWF0ZWRcIixcbiAgU29ueVBTTiA9IFwiU29ueVBTTlwiLFxuICBTdGVhbSA9IFwiU3RlYW1cIixcbiAgVHdpdGNoID0gXCJUd2l0Y2hcIixcbiAgVHdpdHRlciA9IFwiVHdpdHRlclwiLFxuICBYYm94ID0gXCJYYm94XCJcbn1cblxuLyoqXG4gKiBNb2RlbCBpZGVudGl0eSB0eXBlcyBwcm92aWRlZCBieSBGdXNpb25BdXRoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5VHlwZSB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSByZWFzb24gdGhhdCB7QGxpbmsgVXNlcklkZW50aXR5I3ZlcmlmaWVkfSB3YXMgc2V0IHRvIHRydWUgb3IgZmFsc2UuXG4gKlxuICogQGF1dGhvciBCcmFkeSBXaWVkXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5VmVyaWZpZWRSZWFzb24ge1xuICBTa2lwcGVkID0gXCJTa2lwcGVkXCIsXG4gIFRydXN0ZWQgPSBcIlRydXN0ZWRcIixcbiAgVW52ZXJpZmlhYmxlID0gXCJVbnZlcmlmaWFibGVcIixcbiAgSW1wbGljaXQgPSBcIkltcGxpY2l0XCIsXG4gIFBlbmRpbmcgPSBcIlBlbmRpbmdcIixcbiAgQ29tcGxldGVkID0gXCJDb21wbGV0ZWRcIixcbiAgRGlzYWJsZWQgPSBcIkRpc2FibGVkXCIsXG4gIEFkbWluaXN0cmF0aXZlID0gXCJBZG1pbmlzdHJhdGl2ZVwiLFxuICBJbXBvcnQgPSBcIkltcG9ydFwiXG59XG5cbi8qKlxuICogSW1wb3J0IHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0UmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBlbmNyeXB0aW9uU2NoZW1lPzogc3RyaW5nO1xuICBmYWN0b3I/OiBudW1iZXI7XG4gIHVzZXJzPzogQXJyYXk8VXNlcj47XG4gIHZhbGlkYXRlRGJDb25zdHJhaW50cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBtYXJrZXIgaW50ZXJmYWNlIGluZGljYXRpbmcgdGhpcyBldmVudCBpcyBub3Qgc2NvcGVkIHRvIGEgdGVuYW50IGFuZCB3aWxsIGJlIHNlbnQgdG8gYWxsIHdlYmhvb2tzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZUV2ZW50IGV4dGVuZHMgTm9uVHJhbnNhY3Rpb25hbEV2ZW50IHtcbn1cblxuLyoqXG4gKiBUaGUgSW50ZWdyYXRpb24gUmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvblJlcXVlc3Qge1xuICBpbnRlZ3JhdGlvbnM/OiBJbnRlZ3JhdGlvbnM7XG59XG5cbi8qKlxuICogVGhlIEludGVncmF0aW9uIFJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9uUmVzcG9uc2Uge1xuICBpbnRlZ3JhdGlvbnM/OiBJbnRlZ3JhdGlvbnM7XG59XG5cbi8qKlxuICogQXZhaWxhYmxlIEludGVncmF0aW9uc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvbnMge1xuICBjbGVhbnNwZWFrPzogQ2xlYW5TcGVha0NvbmZpZ3VyYXRpb247XG4gIGthZmthPzogS2Fma2FDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRyb3NwZWN0UmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXNzdWVSZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBKU09OIFdlYiBLZXkgYXMgZGVmaW5lZCBieSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MTcjc2VjdGlvbi00XCI+UkZDIDc1MTcgSlNPTiBXZWIgS2V5IChKV0spXG4gKiBTZWN0aW9uIDQ8L2E+IGFuZCA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MThcIj5SRkMgNzUxOCBKU09OIFdlYiBBbGdvcml0aG1zIChKV0EpPC9hPi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTldlYktleSB7XG4gIGFsZz86IEFsZ29yaXRobTtcbiAgY3J2Pzogc3RyaW5nO1xuICBkPzogc3RyaW5nO1xuICBkcD86IHN0cmluZztcbiAgZHE/OiBzdHJpbmc7XG4gIGU/OiBzdHJpbmc7XG4gIGtpZD86IHN0cmluZztcbiAga3R5PzogS2V5VHlwZTtcbiAgbj86IHN0cmluZztcbiAgW290aGVyOiBzdHJpbmddOiBhbnk7IC8vIEFueSBvdGhlciBmaWVsZHNcbiAgcD86IHN0cmluZztcbiAgcT86IHN0cmluZztcbiAgcWk/OiBzdHJpbmc7XG4gIHVzZT86IHN0cmluZztcbiAgeD86IHN0cmluZztcbiAgeDVjPzogQXJyYXk8c3RyaW5nPjtcbiAgeDV0Pzogc3RyaW5nO1xuICB4NXRfUzI1Nj86IHN0cmluZztcbiAgeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFueSBvYmplY3QgdGhhdCBjYW4gcHJvdmlkZSBKU09OIFdlYiBrZXkgSW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTldlYktleUluZm9Qcm92aWRlciB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXS1NSZXNwb25zZSB7XG4gIGtleXM/OiBBcnJheTxKU09OV2ViS2V5Pjtcbn1cblxuLyoqXG4gKiBKU09OIFdlYiBUb2tlbiAoSldUKSBhcyBkZWZpbmVkIGJ5IFJGQyA3NTE5LlxuICogPHByZT5cbiAqIEZyb20gUkZDIDc1MTkgU2VjdGlvbiAxLiBJbnRyb2R1Y3Rpb246XG4gKiAgICBUaGUgc3VnZ2VzdGVkIHByb251bmNpYXRpb24gb2YgSldUIGlzIHRoZSBzYW1lIGFzIHRoZSBFbmdsaXNoIHdvcmQgXCJqb3RcIi5cbiAqIDwvcHJlPlxuICogVGhlIEpXVCBpcyBub3QgVGhyZWFkLVNhZmUgYW5kIHNob3VsZCBub3QgYmUgcmUtdXNlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUIHtcbiAgYXVkPzogYW55O1xuICBleHA/OiBudW1iZXI7XG4gIGlhdD86IG51bWJlcjtcbiAgaXNzPzogc3RyaW5nO1xuICBqdGk/OiBzdHJpbmc7XG4gIG5iZj86IG51bWJlcjtcbiAgW290aGVyQ2xhaW1zOiBzdHJpbmddOiBhbnk7IC8vIEFueSBvdGhlciBmaWVsZHNcbiAgc3ViPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpXVCBDb25maWd1cmF0aW9uLiBBIEpXVCBDb25maWd1cmF0aW9uIGZvciBhbiBBcHBsaWNhdGlvbiBtYXkgbm90IGJlIGFjdGl2ZSBpZiBpdCBpcyB1c2luZyB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24sIHRoZSBjb25maWd1cmF0aW9uXG4gKiBtYXkgYmUgPGNvZGU+ZW5hYmxlZCA9IGZhbHNlPC9jb2RlPi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhY2Nlc3NUb2tlbktleUlkPzogVVVJRDtcbiAgaWRUb2tlbktleUlkPzogVVVJRDtcbiAgcmVmcmVzaFRva2VuRXhwaXJhdGlvblBvbGljeT86IFJlZnJlc2hUb2tlbkV4cGlyYXRpb25Qb2xpY3k7XG4gIHJlZnJlc2hUb2tlbk9uZVRpbWVVc2VDb25maWd1cmF0aW9uPzogUmVmcmVzaFRva2VuT25lVGltZVVzZUNvbmZpZ3VyYXRpb247XG4gIHJlZnJlc2hUb2tlblJldm9jYXRpb25Qb2xpY3k/OiBSZWZyZXNoVG9rZW5SZXZvY2F0aW9uUG9saWN5O1xuICByZWZyZXNoVG9rZW5TbGlkaW5nV2luZG93Q29uZmlndXJhdGlvbj86IFJlZnJlc2hUb2tlblNsaWRpbmdXaW5kb3dDb25maWd1cmF0aW9uO1xuICByZWZyZXNoVG9rZW5UaW1lVG9MaXZlSW5NaW51dGVzPzogbnVtYmVyO1xuICByZWZyZXNoVG9rZW5Vc2FnZVBvbGljeT86IFJlZnJlc2hUb2tlblVzYWdlUG9saWN5O1xuICB0aW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgSldUIHB1YmxpYyBrZXkgUmVmcmVzaCBUb2tlbiBSZXZva2UgRXZlbnQuIFRoaXMgZXZlbnQgbWlnaHQgYmUgZm9yIGEgc2luZ2xlXG4gKiB0b2tlbiwgYSB1c2VyIG9yIGFuIGVudGlyZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RQdWJsaWNLZXlVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBKV1QgUmVmcmVzaCBFdmVudC4gVGhpcyBldmVudCB3aWxsIGJlIGZpcmVkIHdoZW4gYSBKV1QgaXMgXCJyZWZyZXNoZWRcIiAoZ2VuZXJhdGVkKSB1c2luZyBhIFJlZnJlc2ggVG9rZW4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFJlZnJlc2hFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBvcmlnaW5hbD86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHJlZnJlc2hpbmcgYSBKV1Qgd2l0aCBhIFJlZnJlc2ggVG9rZW4uXG4gKiA8cD5cbiAqIFVzaW5nIGEgZGlmZmVyZW50IHJlc3BvbnNlIG9iamVjdCBmcm9tIFJlZnJlc2hUb2tlblJlc3BvbnNlIGJlY2F1c2UgdGhlIHJldHJpZXZlIHJlc3BvbnNlIHdpbGwgcmV0dXJuIGFuIG9iamVjdCBmb3IgcmVmcmVzaFRva2VuLCBhbmQgdGhpcyBpcyBhXG4gKiBzdHJpbmcuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFJlZnJlc2hSZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuSWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFJlZnJlc2ggVG9rZW4gUmV2b2tlIEV2ZW50LiBUaGlzIGV2ZW50IG1pZ2h0IGJlIGZvciBhIHNpbmdsZSB0b2tlbiwgYSB1c2VyXG4gKiBvciBhbiBlbnRpcmUgYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUUmVmcmVzaFRva2VuUmV2b2tlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25UaW1lVG9MaXZlSW5TZWNvbmRzPzogUmVjb3JkPFVVSUQsIG51bWJlcj47XG4gIHJlZnJlc2hUb2tlbj86IFJlZnJlc2hUb2tlbjtcbiAgdXNlcj86IFVzZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFZlbmRSZXF1ZXN0IHtcbiAgY2xhaW1zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAga2V5SWQ/OiBVVUlEO1xuICB0aW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RWZW5kUmVzcG9uc2Uge1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGRlZmF1bHRUb3BpYz86IHN0cmluZztcbiAgcHJvZHVjZXI/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FNZXNzZW5nZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBkZWZhdWx0VG9waWM/OiBzdHJpbmc7XG4gIHByb2R1Y2VyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBEb21haW4gZm9yIGEgcHVibGljIGtleSwga2V5IHBhaXIgb3IgYW4gSE1BQyBzZWNyZXQuIFRoaXMgaXMgdXNlZCBieSBLZXlNYXN0ZXIgdG8gbWFuYWdlIGtleXMgZm9yIEpXVHMsIFNBTUwsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXkge1xuICBhbGdvcml0aG0/OiBLZXlBbGdvcml0aG07XG4gIGNlcnRpZmljYXRlPzogc3RyaW5nO1xuICBjZXJ0aWZpY2F0ZUluZm9ybWF0aW9uPzogQ2VydGlmaWNhdGVJbmZvcm1hdGlvbjtcbiAgZXhwaXJhdGlvbkluc3RhbnQ/OiBudW1iZXI7XG4gIGhhc1ByaXZhdGVLZXk/OiBib29sZWFuO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAga2lkPzogc3RyaW5nO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbGVuZ3RoPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwcml2YXRlS2V5Pzogc3RyaW5nO1xuICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gIHNlY3JldD86IHN0cmluZztcbiAgdHlwZT86IEtleVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VydGlmaWNhdGVJbmZvcm1hdGlvbiB7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAgbWQ1RmluZ2VycHJpbnQ/OiBzdHJpbmc7XG4gIHNlcmlhbE51bWJlcj86IHN0cmluZztcbiAgc2hhMUZpbmdlcnByaW50Pzogc3RyaW5nO1xuICBzaGExVGh1bWJwcmludD86IHN0cmluZztcbiAgc2hhMjU2RmluZ2VycHJpbnQ/OiBzdHJpbmc7XG4gIHNoYTI1NlRodW1icHJpbnQ/OiBzdHJpbmc7XG4gIHN1YmplY3Q/OiBzdHJpbmc7XG4gIHZhbGlkRnJvbT86IG51bWJlcjtcbiAgdmFsaWRUbz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gS2V5QWxnb3JpdGhtIHtcbiAgRVMyNTYgPSBcIkVTMjU2XCIsXG4gIEVTMzg0ID0gXCJFUzM4NFwiLFxuICBFUzUxMiA9IFwiRVM1MTJcIixcbiAgSFMyNTYgPSBcIkhTMjU2XCIsXG4gIEhTMzg0ID0gXCJIUzM4NFwiLFxuICBIUzUxMiA9IFwiSFM1MTJcIixcbiAgUlMyNTYgPSBcIlJTMjU2XCIsXG4gIFJTMzg0ID0gXCJSUzM4NFwiLFxuICBSUzUxMiA9IFwiUlM1MTJcIixcbiAgRWQyNTUxOSA9IFwiRWQyNTUxOVwiXG59XG5cbmV4cG9ydCBlbnVtIEtleVR5cGUge1xuICBFQyA9IFwiRUNcIixcbiAgUlNBID0gXCJSU0FcIixcbiAgSE1BQyA9IFwiSE1BQ1wiLFxuICBPS1AgPSBcIk9LUFwiXG59XG5cbi8qKlxuICogS2V5IEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5UmVxdWVzdCB7XG4gIGtleT86IEtleTtcbn1cblxuLyoqXG4gKiBLZXkgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5UmVzcG9uc2Uge1xuICBrZXk/OiBLZXk7XG4gIGtleXM/OiBBcnJheTxLZXk+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgS2V5c1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBhbGdvcml0aG0/OiBLZXlBbGdvcml0aG07XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBLZXlUeXBlO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBLZXlzXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogS2V5U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogS2V5IHNlYXJjaCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5U2VhcmNoUmVzcG9uc2Uge1xuICBrZXlzPzogQXJyYXk8S2V5PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHVzZSB0eXBlIG9mIGEga2V5LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gS2V5VXNlIHtcbiAgU2lnbk9ubHkgPSBcIlNpZ25Pbmx5XCIsXG4gIFNpZ25BbmRWZXJpZnkgPSBcIlNpZ25BbmRWZXJpZnlcIixcbiAgVmVyaWZ5T25seSA9IFwiVmVyaWZ5T25seVwiXG59XG5cbi8qKlxuICogRXZlbnQgdG8gaW5kaWNhdGUga2lja3N0YXJ0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtpY2tzdGFydFN1Y2Nlc3NFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGluc3RhbmNlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBMREFQIGNvbm5lY3Rvci5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExEQVBDb25uZWN0b3JDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xuICBhdXRoZW50aWNhdGlvblVSTD86IHN0cmluZztcbiAgYmFzZVN0cnVjdHVyZT86IHN0cmluZztcbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gIGlkZW50aWZ5aW5nQXR0cmlidXRlPzogc3RyaW5nO1xuICBsYW1iZGFDb25maWd1cmF0aW9uPzogTGFtYmRhQ29uZmlndXJhdGlvbjtcbiAgbG9naW5JZEF0dHJpYnV0ZT86IHN0cmluZztcbiAgcmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIHJlcXVlc3RlZEF0dHJpYnV0ZXM/OiBBcnJheTxzdHJpbmc+O1xuICBzZWN1cml0eU1ldGhvZD86IExEQVBTZWN1cml0eU1ldGhvZDtcbiAgc3lzdGVtQWNjb3VudEROPzogc3RyaW5nO1xuICBzeXN0ZW1BY2NvdW50UGFzc3dvcmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIExEQVBTZWN1cml0eU1ldGhvZCB7XG4gIE5vbmUgPSBcIk5vbmVcIixcbiAgTERBUFMgPSBcIkxEQVBTXCIsXG4gIFN0YXJ0VExTID0gXCJTdGFydFRMU1wiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIHJlY29uY2lsZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBIEphdmFTY3JpcHQgbGFtYmRhIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgZHVyaW5nIGNlcnRhaW4gZXZlbnRzIGluc2lkZSBGdXNpb25BdXRoLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYSB7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgZW5naW5lVHlwZT86IExhbWJkYUVuZ2luZVR5cGU7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBMYW1iZGFUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gTGFtYmRhRW5naW5lVHlwZSB7XG4gIEdyYWFsSlMgPSBcIkdyYWFsSlNcIixcbiAgTmFzaG9ybiA9IFwiTmFzaG9yblwiXG59XG5cbi8qKlxuICogTGFtYmRhIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFSZXF1ZXN0IHtcbiAgbGFtYmRhPzogTGFtYmRhO1xufVxuXG4vKipcbiAqIExhbWJkYSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVJlc3BvbnNlIHtcbiAgbGFtYmRhPzogTGFtYmRhO1xuICBsYW1iZGFzPzogQXJyYXk8TGFtYmRhPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIExhbWJkYXNcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBMYW1iZGFUeXBlO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBMYW1iZGFzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IExhbWJkYVNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIExhbWJkYSBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFTZWFyY2hSZXNwb25zZSB7XG4gIGxhbWJkYXM/OiBBcnJheTxMYW1iZGE+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZXMgb2YgbGFtYmRhcyB0aGF0IGluZGljYXRlIGhvdyB0aGV5IGFyZSBpbnZva2VkIGJ5IEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIExhbWJkYVR5cGUge1xuICBKV1RQb3B1bGF0ZSA9IFwiSldUUG9wdWxhdGVcIixcbiAgT3BlbklEUmVjb25jaWxlID0gXCJPcGVuSURSZWNvbmNpbGVcIixcbiAgU0FNTHYyUmVjb25jaWxlID0gXCJTQU1MdjJSZWNvbmNpbGVcIixcbiAgU0FNTHYyUG9wdWxhdGUgPSBcIlNBTUx2MlBvcHVsYXRlXCIsXG4gIEFwcGxlUmVjb25jaWxlID0gXCJBcHBsZVJlY29uY2lsZVwiLFxuICBFeHRlcm5hbEpXVFJlY29uY2lsZSA9IFwiRXh0ZXJuYWxKV1RSZWNvbmNpbGVcIixcbiAgRmFjZWJvb2tSZWNvbmNpbGUgPSBcIkZhY2Vib29rUmVjb25jaWxlXCIsXG4gIEdvb2dsZVJlY29uY2lsZSA9IFwiR29vZ2xlUmVjb25jaWxlXCIsXG4gIEhZUFJSZWNvbmNpbGUgPSBcIkhZUFJSZWNvbmNpbGVcIixcbiAgVHdpdHRlclJlY29uY2lsZSA9IFwiVHdpdHRlclJlY29uY2lsZVwiLFxuICBMREFQQ29ubmVjdG9yUmVjb25jaWxlID0gXCJMREFQQ29ubmVjdG9yUmVjb25jaWxlXCIsXG4gIExpbmtlZEluUmVjb25jaWxlID0gXCJMaW5rZWRJblJlY29uY2lsZVwiLFxuICBFcGljR2FtZXNSZWNvbmNpbGUgPSBcIkVwaWNHYW1lc1JlY29uY2lsZVwiLFxuICBOaW50ZW5kb1JlY29uY2lsZSA9IFwiTmludGVuZG9SZWNvbmNpbGVcIixcbiAgU29ueVBTTlJlY29uY2lsZSA9IFwiU29ueVBTTlJlY29uY2lsZVwiLFxuICBTdGVhbVJlY29uY2lsZSA9IFwiU3RlYW1SZWNvbmNpbGVcIixcbiAgVHdpdGNoUmVjb25jaWxlID0gXCJUd2l0Y2hSZWNvbmNpbGVcIixcbiAgWGJveFJlY29uY2lsZSA9IFwiWGJveFJlY29uY2lsZVwiLFxuICBDbGllbnRDcmVkZW50aWFsc0pXVFBvcHVsYXRlID0gXCJDbGllbnRDcmVkZW50aWFsc0pXVFBvcHVsYXRlXCIsXG4gIFNDSU1TZXJ2ZXJHcm91cFJlcXVlc3RDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJHcm91cFJlcXVlc3RDb252ZXJ0ZXJcIixcbiAgU0NJTVNlcnZlckdyb3VwUmVzcG9uc2VDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJHcm91cFJlc3BvbnNlQ29udmVydGVyXCIsXG4gIFNDSU1TZXJ2ZXJVc2VyUmVxdWVzdENvbnZlcnRlciA9IFwiU0NJTVNlcnZlclVzZXJSZXF1ZXN0Q29udmVydGVyXCIsXG4gIFNDSU1TZXJ2ZXJVc2VyUmVzcG9uc2VDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJVc2VyUmVzcG9uc2VDb252ZXJ0ZXJcIixcbiAgU2VsZlNlcnZpY2VSZWdpc3RyYXRpb25WYWxpZGF0aW9uID0gXCJTZWxmU2VydmljZVJlZ2lzdHJhdGlvblZhbGlkYXRpb25cIixcbiAgVXNlckluZm9Qb3B1bGF0ZSA9IFwiVXNlckluZm9Qb3B1bGF0ZVwiLFxuICBMb2dpblZhbGlkYXRpb24gPSBcIkxvZ2luVmFsaWRhdGlvblwiLFxuICBNRkFSZXF1aXJlbWVudCA9IFwiTUZBUmVxdWlyZW1lbnRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRJbkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkSW5JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8TGlua2VkSW5BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzZXQgb2YgbG9jYWxpemVkIEludGVnZXJzIHRoYXQgY2FuIGJlIHN0b3JlZCBhcyBKU09OLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbGl6ZWRJbnRlZ2VycyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4ge1xufVxuXG4vKipcbiAqIE1vZGVscyBhIHNldCBvZiBsb2NhbGl6ZWQgU3RyaW5ncyB0aGF0IGNhbiBiZSBzdG9yZWQgYXMgSlNPTi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbGl6ZWRTdHJpbmdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG59XG5cbi8qKlxuICogTG9jYXRpb24gaW5mb3JtYXRpb24uIFVzZWZ1bCBmb3IgSVAgYWRkcmVzc2VzIGFuZCBvdGhlciBkaXNwbGF5YWJsZSBkYXRhIG9iamVjdHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb24ge1xuICBjaXR5Pzogc3RyaW5nO1xuICBjb3VudHJ5Pzogc3RyaW5nO1xuICBkaXNwbGF5U3RyaW5nPzogc3RyaW5nO1xuICBsYXRpdHVkZT86IG51bWJlcjtcbiAgbG9uZ2l0dWRlPzogbnVtYmVyO1xuICByZWdpb24/OiBzdHJpbmc7XG4gIHppcGNvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBoaXN0b3JpY2FsIHN0YXRlIG9mIGEgdXNlciBsb2cgZXZlbnQuIFNpbmNlIGV2ZW50cyBjYW4gYmUgbW9kaWZpZWQsIHRoaXMgc3RvcmVzIHRoZSBoaXN0b3JpY2FsIHN0YXRlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0hpc3Rvcnkge1xuICBoaXN0b3J5SXRlbXM/OiBBcnJheTxIaXN0b3J5SXRlbT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUl0ZW0ge1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGNyZWF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGV4cGlyeT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5IaW50Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBwYXJhbWV0ZXJOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIExvZ2luIFBpbmcgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblBpbmdSZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogVGhlIHN1bW1hcnkgb2YgdGhlIGFjdGlvbiB0aGF0IGlzIHByZXZlbnRpbmcgbG9naW4gdG8gYmUgcmV0dXJuZWQgb24gdGhlIGxvZ2luIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblByZXZlbnRlZFJlc3BvbnNlIHtcbiAgYWN0aW9uZXJVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25JZD86IFVVSUQ7XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgbG9jYWxpemVkTmFtZT86IHN0cmluZztcbiAgbG9jYWxpemVkT3B0aW9uPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRSZWFzb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcmVhc29uPzogc3RyaW5nO1xuICByZWFzb25Db2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZEV4cG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGNyaXRlcmlhPzogTG9naW5SZWNvcmRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZWNvcmRTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBlbmQ/OiBudW1iZXI7XG4gIHN0YXJ0PzogbnVtYmVyO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaFJlcXVlc3Qge1xuICByZXRyaWV2ZVRvdGFsPzogYm9vbGVhbjtcbiAgc2VhcmNoPzogTG9naW5SZWNvcmRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBBIHJhdyBsb2dpbiByZWNvcmQgcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZWNvcmRTZWFyY2hSZXNwb25zZSB7XG4gIGxvZ2lucz86IEFycmF5PERpc3BsYXlhYmxlUmF3TG9naW4+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIGxvZ2luIHJlcG9ydC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlcG9ydFJlc3BvbnNlIHtcbiAgaG91cmx5Q291bnRzPzogQXJyYXk8Q291bnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBMb2dpbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBsb2dpbklkVHlwZXM/OiBBcnJheTxzdHJpbmc+O1xuICBvbmVUaW1lUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVzcG9uc2Uge1xuICBhY3Rpb25zPzogQXJyYXk8TG9naW5QcmV2ZW50ZWRSZXNwb25zZT47XG4gIGNoYW5nZVBhc3N3b3JkSWQ/OiBzdHJpbmc7XG4gIGNoYW5nZVBhc3N3b3JkUmVhc29uPzogQ2hhbmdlUGFzc3dvcmRSZWFzb247XG4gIGNvbmZpZ3VyYWJsZU1ldGhvZHM/OiBBcnJheTxzdHJpbmc+O1xuICBlbWFpbFZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICBpZGVudGl0eVZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICBtZXRob2RzPzogQXJyYXk8VHdvRmFjdG9yTWV0aG9kPjtcbiAgcGVuZGluZ0lkUExpbmtJZD86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW5JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHRocmVhdHNEZXRlY3RlZD86IEFycmF5PEF1dGhlbnRpY2F0aW9uVGhyZWF0cz47XG4gIHRva2VuPzogc3RyaW5nO1xuICB0b2tlbkV4cGlyYXRpb25JbnN0YW50PzogbnVtYmVyO1xuICB0cnVzdFRva2VuPzogc3RyaW5nO1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbiAgdHdvRmFjdG9yVHJ1c3RJZD86IHN0cmluZztcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBNYXR0aGV3IEFsdG1hblxuICovXG5leHBvcnQgZW51bSBMb2dvdXRCZWhhdmlvciB7XG4gIFJlZGlyZWN0T25seSA9IFwiUmVkaXJlY3RPbmx5XCIsXG4gIEFsbEFwcGxpY2F0aW9ucyA9IFwiQWxsQXBwbGljYXRpb25zXCJcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IGZvciB0aGUgTG9nb3V0IEFQSSB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRvIFVSTCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ291dFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb29rdXBSZXNwb25zZSB7XG4gIGlkZW50aXR5UHJvdmlkZXI/OiBJZGVudGl0eVByb3ZpZGVyRGV0YWlscztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyRGV0YWlscyB7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGlkPzogVVVJRDtcbiAgaWRwRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHR5cGU/OiBJZGVudGl0eVByb3ZpZGVyVHlwZTtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBtYW5hZ2VkIGZpZWxkcyB0aGF0IGFyZSBhbHNvIHB1dCBpbnRvIHRoZSBkYXRhYmFzZSBkdXJpbmcgRnVzaW9uQXV0aCBzZXR1cC5cbiAqIDxwPlxuICogSW50ZXJuYWwgTm90ZTogVGhlc2UgZmllbGRzIGFyZSBhbHNvIGRlY2xhcmVkIGluIFNRTCBpbiBvcmRlciB0byBib290c3RyYXAgdGhlIHN5c3RlbS4gVGhlc2UgbmVlZCB0byBzdGF5IGluIHN5bmMuXG4gKiBBbnkgY2hhbmdlcyB0byB0aGVzZSBmaWVsZHMgbmVlZHMgdG8gYWxzbyBiZSByZWZsZWN0ZWQgaW4gbXlzcWwuc3FsIGFuZCBwb3N0Z3Jlc3FsLnNxbFxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZWRGaWVsZHMge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXhpbXVtUGFzc3dvcmRBZ2UgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZGF5cz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBHcm91cCBNZW1iZXIgRGVsZXRlIFJlcXVlc3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyRGVsZXRlUmVxdWVzdCB7XG4gIG1lbWJlcklkcz86IEFycmF5PFVVSUQ+O1xuICBtZW1iZXJzPzogUmVjb3JkPFVVSUQsIEFycmF5PFVVSUQ+Pjtcbn1cblxuLyoqXG4gKiBHcm91cCBNZW1iZXIgUmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1iZXJSZXF1ZXN0IHtcbiAgbWVtYmVycz86IFJlY29yZDxVVUlELCBBcnJheTxHcm91cE1lbWJlcj4+O1xufVxuXG4vKipcbiAqIEdyb3VwIE1lbWJlciBSZXNwb25zZVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1iZXJSZXNwb25zZSB7XG4gIG1lbWJlcnM/OiBSZWNvcmQ8VVVJRCwgQXJyYXk8R3JvdXBNZW1iZXI+Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pa2V5IFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2Uge1xufVxuXG4vKipcbiAqIFN0b3JlcyBhbiBtZXNzYWdlIHRlbXBsYXRlIHVzZWQgdG8gZGlzdHJpYnV0ZSBtZXNzYWdlcztcbiAqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZVRlbXBsYXRlIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBNZXNzYWdlVHlwZTtcbn1cblxuLyoqXG4gKiBBIE1lc3NhZ2UgVGVtcGxhdGUgUmVxdWVzdCB0byB0aGUgQVBJXG4gKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3Qge1xuICBtZXNzYWdlVGVtcGxhdGU/OiBNZXNzYWdlVGVtcGxhdGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgbWVzc2FnZVRlbXBsYXRlPzogTWVzc2FnZVRlbXBsYXRlO1xuICBtZXNzYWdlVGVtcGxhdGVzPzogQXJyYXk8TWVzc2FnZVRlbXBsYXRlPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pa2V5IFNsZWV2aVxuICovXG5leHBvcnQgZW51bSBNZXNzYWdlVHlwZSB7XG4gIFNNUyA9IFwiU01TXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NlbmdlclJlcXVlc3Qge1xuICBtZXNzZW5nZXI/OiBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NlbmdlclJlc3BvbnNlIHtcbiAgbWVzc2VuZ2VyPzogQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb247XG4gIG1lc3NlbmdlcnM/OiBBcnJheTxCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbj47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NlbmdlclRyYW5zcG9ydCB7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGVudW0gTWVzc2VuZ2VyVHlwZSB7XG4gIEdlbmVyaWMgPSBcIkdlbmVyaWNcIixcbiAgS2Fma2EgPSBcIkthZmthXCIsXG4gIFR3aWxpbyA9IFwiVHdpbGlvXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWluaW11bVBhc3N3b3JkQWdlIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yIHRoZSBkYWlseSBhY3RpdmUgdXNlciByZXBvcnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9udGhseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZSB7XG4gIG1vbnRobHlBY3RpdmVVc2Vycz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29tbXVuaWNhdGUgdmFyaW91cyBhY3Rpb25zL2NvbnRleHRzIGluIHdoaWNoIG11bHRpLWZhY3RvciBhdXRoZW50aWNhdGlvbiBjYW4gYmUgdXNlZC5cbiAqL1xuZXhwb3J0IGVudW0gTXVsdGlGYWN0b3JBY3Rpb24ge1xuICBjaGFuZ2VQYXNzd29yZCA9IFwiY2hhbmdlUGFzc3dvcmRcIixcbiAgbG9naW4gPSBcImxvZ2luXCIsXG4gIHN0ZXBVcCA9IFwic3RlcFVwXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIE11bHRpRmFjdG9yTG9naW5Qb2xpY3kge1xuICBEaXNhYmxlZCA9IFwiRGlzYWJsZWRcIixcbiAgRW5hYmxlZCA9IFwiRW5hYmxlZFwiLFxuICBSZXF1aXJlZCA9IFwiUmVxdWlyZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pbnRlbmRvQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGVtYWlsQ2xhaW0/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB1bmlxdWVJZENsYWltPzogc3RyaW5nO1xuICB1c2VybmFtZUNsYWltPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE5pbnRlbmRvIGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOaW50ZW5kb0lkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxOaW50ZW5kb0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGVtYWlsQ2xhaW0/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB1bmlxdWVJZENsYWltPzogc3RyaW5nO1xuICB1c2VybmFtZUNsYWltPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbWFya2VyIGludGVyZmFjZSBpbmRpY2F0aW5nIHRoaXMgZXZlbnQgY2Fubm90IGJlIG1hZGUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9uVHJhbnNhY3Rpb25hbEV2ZW50IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGgyQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhvcml6ZWRPcmlnaW5VUkxzPzogQXJyYXk8c3RyaW5nPjtcbiAgYXV0aG9yaXplZFJlZGlyZWN0VVJMcz86IEFycmF5PHN0cmluZz47XG4gIGF1dGhvcml6ZWRVUkxWYWxpZGF0aW9uUG9saWN5PzogT2F1dGgyQXV0aG9yaXplZFVSTFZhbGlkYXRpb25Qb2xpY3k7XG4gIGNsaWVudEF1dGhlbnRpY2F0aW9uUG9saWN5PzogQ2xpZW50QXV0aGVudGljYXRpb25Qb2xpY3k7XG4gIGNsaWVudElkPzogc3RyaW5nO1xuICBjbGllbnRTZWNyZXQ/OiBzdHJpbmc7XG4gIGNvbnNlbnRNb2RlPzogT0F1dGhTY29wZUNvbnNlbnRNb2RlO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRldmljZVZlcmlmaWNhdGlvblVSTD86IHN0cmluZztcbiAgZW5hYmxlZEdyYW50cz86IEFycmF5PEdyYW50VHlwZT47XG4gIGdlbmVyYXRlUmVmcmVzaFRva2Vucz86IGJvb2xlYW47XG4gIGxvZ291dEJlaGF2aW9yPzogTG9nb3V0QmVoYXZpb3I7XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgcHJvb2ZLZXlGb3JDb2RlRXhjaGFuZ2VQb2xpY3k/OiBQcm9vZktleUZvckNvZGVFeGNoYW5nZVBvbGljeTtcbiAgcHJvdmlkZWRTY29wZVBvbGljeT86IFByb3ZpZGVkU2NvcGVQb2xpY3k7XG4gIHJlbGF0aW9uc2hpcD86IE9BdXRoQXBwbGljYXRpb25SZWxhdGlvbnNoaXA7XG4gIHJlcXVpcmVDbGllbnRBdXRoZW50aWNhdGlvbj86IGJvb2xlYW47XG4gIHJlcXVpcmVSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICBzY29wZUhhbmRsaW5nUG9saWN5PzogT0F1dGhTY29wZUhhbmRsaW5nUG9saWN5O1xuICB1bmtub3duU2NvcGVQb2xpY3k/OiBVbmtub3duU2NvcGVQb2xpY3k7XG59XG5cbi8qKlxuICogVGhlIGFwcGxpY2F0aW9uJ3MgcmVsYXRpb25zaGlwIHRvIHRoZSBhdXRob3JpemF0aW9uIHNlcnZlci4gRmlyc3QtcGFydHkgYXBwbGljYXRpb25zIHdpbGwgYmUgZ3JhbnRlZCBpbXBsaWNpdCBwZXJtaXNzaW9uIGZvciByZXF1ZXN0ZWQgc2NvcGVzLlxuICogVGhpcmQtcGFydHkgYXBwbGljYXRpb25zIHdpbGwgdXNlIHRoZSB7QGxpbmsgT0F1dGhTY29wZUNvbnNlbnRNb2RlfSBwb2xpY3kuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gT0F1dGhBcHBsaWNhdGlvblJlbGF0aW9uc2hpcCB7XG4gIEZpcnN0UGFydHkgPSBcIkZpcnN0UGFydHlcIixcbiAgVGhpcmRQYXJ0eSA9IFwiVGhpcmRQYXJ0eVwiXG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3Qgb2JqZWN0IGZvciBleGNoYW5naW5nIGFuIE9BdXRoIGF1dGhvcml6YXRpb24gY29kZSBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICpcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aENvZGVBY2Nlc3NUb2tlblJlcXVlc3Qge1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGdyYW50X3R5cGU/OiBzdHJpbmc7XG4gIHJlZGlyZWN0X3VyaT86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3Qgb2JqZWN0IHRvIG1ha2UgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIGZyb20gdGhlIEF1dGhvcml6ZSBlbmRwb2ludCBhbmQgYVxuICogY29kZV92ZXJpZmllciBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICpcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aENvZGVQS0NFQWNjZXNzVG9rZW5SZXF1ZXN0IHtcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xuICBjb2RlX3ZlcmlmaWVyPzogc3RyaW5nO1xuICBncmFudF90eXBlPzogc3RyaW5nO1xuICByZWRpcmVjdF91cmk/OiBzdHJpbmc7XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGhDb25maWd1cmF0aW9uUmVzcG9uc2Uge1xuICBodHRwU2Vzc2lvbk1heEluYWN0aXZlSW50ZXJ2YWw/OiBudW1iZXI7XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgb2F1dGhDb25maWd1cmF0aW9uPzogT0F1dGgyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGhFcnJvciB7XG4gIGNoYW5nZV9wYXNzd29yZF9pZD86IHN0cmluZztcbiAgZXJyb3I/OiBPQXV0aEVycm9yVHlwZTtcbiAgZXJyb3JfZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGVycm9yX3JlYXNvbj86IE9BdXRoRXJyb3JSZWFzb247XG4gIGVycm9yX3VyaT86IHN0cmluZztcbiAgdHdvX2ZhY3Rvcl9pZD86IHN0cmluZztcbiAgdHdvX2ZhY3Rvcl9tZXRob2RzPzogQXJyYXk8VHdvRmFjdG9yTWV0aG9kPjtcbn1cblxuZXhwb3J0IGVudW0gT0F1dGhFcnJvclJlYXNvbiB7XG4gIGF1dGhfY29kZV9ub3RfZm91bmQgPSBcImF1dGhfY29kZV9ub3RfZm91bmRcIixcbiAgYWNjZXNzX3Rva2VuX21hbGZvcm1lZCA9IFwiYWNjZXNzX3Rva2VuX21hbGZvcm1lZFwiLFxuICBhY2Nlc3NfdG9rZW5fZXhwaXJlZCA9IFwiYWNjZXNzX3Rva2VuX2V4cGlyZWRcIixcbiAgYWNjZXNzX3Rva2VuX3VuYXZhaWxhYmxlX2Zvcl9wcm9jZXNzaW5nID0gXCJhY2Nlc3NfdG9rZW5fdW5hdmFpbGFibGVfZm9yX3Byb2Nlc3NpbmdcIixcbiAgYWNjZXNzX3Rva2VuX2ZhaWxlZF9wcm9jZXNzaW5nID0gXCJhY2Nlc3NfdG9rZW5fZmFpbGVkX3Byb2Nlc3NpbmdcIixcbiAgYWNjZXNzX3Rva2VuX2ludmFsaWQgPSBcImFjY2Vzc190b2tlbl9pbnZhbGlkXCIsXG4gIGFjY2Vzc190b2tlbl9yZXF1aXJlZCA9IFwiYWNjZXNzX3Rva2VuX3JlcXVpcmVkXCIsXG4gIHJlZnJlc2hfdG9rZW5fbm90X2ZvdW5kID0gXCJyZWZyZXNoX3Rva2VuX25vdF9mb3VuZFwiLFxuICByZWZyZXNoX3Rva2VuX3R5cGVfbm90X3N1cHBvcnRlZCA9IFwicmVmcmVzaF90b2tlbl90eXBlX25vdF9zdXBwb3J0ZWRcIixcbiAgaWRfdG9rZW5faW52YWxpZCA9IFwiaWRfdG9rZW5faW52YWxpZFwiLFxuICB1bnN1cHBvcnRlZF90b2tlbl90eXBlID0gXCJ1bnN1cHBvcnRlZF90b2tlbl90eXBlXCIsXG4gIHRva2VuX3R5cGVfaGludF9taXNtYXRjaCA9IFwidG9rZW5fdHlwZV9oaW50X21pc21hdGNoXCIsXG4gIGludmFsaWRfY2xpZW50X2lkID0gXCJpbnZhbGlkX2NsaWVudF9pZFwiLFxuICBpbnZhbGlkX2V4cGlyZXNfaW4gPSBcImludmFsaWRfZXhwaXJlc19pblwiLFxuICBpbnZhbGlkX3VzZXJfY3JlZGVudGlhbHMgPSBcImludmFsaWRfdXNlcl9jcmVkZW50aWFsc1wiLFxuICBpbnZhbGlkX2dyYW50X3R5cGUgPSBcImludmFsaWRfZ3JhbnRfdHlwZVwiLFxuICBpbnZhbGlkX29yaWdpbiA9IFwiaW52YWxpZF9vcmlnaW5cIixcbiAgaW52YWxpZF9vcmlnaW5fb3BhcXVlID0gXCJpbnZhbGlkX29yaWdpbl9vcGFxdWVcIixcbiAgaW52YWxpZF9wa2NlX2NvZGVfdmVyaWZpZXIgPSBcImludmFsaWRfcGtjZV9jb2RlX3ZlcmlmaWVyXCIsXG4gIGludmFsaWRfcGtjZV9jb2RlX2NoYWxsZW5nZSA9IFwiaW52YWxpZF9wa2NlX2NvZGVfY2hhbGxlbmdlXCIsXG4gIGludmFsaWRfcGtjZV9jb2RlX2NoYWxsZW5nZV9tZXRob2QgPSBcImludmFsaWRfcGtjZV9jb2RlX2NoYWxsZW5nZV9tZXRob2RcIixcbiAgaW52YWxpZF9wcm9tcHQgPSBcImludmFsaWRfcHJvbXB0XCIsXG4gIGludmFsaWRfcmVkaXJlY3RfdXJpID0gXCJpbnZhbGlkX3JlZGlyZWN0X3VyaVwiLFxuICBpbnZhbGlkX3Jlc3BvbnNlX21vZGUgPSBcImludmFsaWRfcmVzcG9uc2VfbW9kZVwiLFxuICBpbnZhbGlkX3Jlc3BvbnNlX3R5cGUgPSBcImludmFsaWRfcmVzcG9uc2VfdHlwZVwiLFxuICBpbnZhbGlkX2lkX3Rva2VuX2hpbnQgPSBcImludmFsaWRfaWRfdG9rZW5faGludFwiLFxuICBpbnZhbGlkX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IFwiaW52YWxpZF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIixcbiAgaW52YWxpZF9kZXZpY2VfY29kZSA9IFwiaW52YWxpZF9kZXZpY2VfY29kZVwiLFxuICBpbnZhbGlkX3VzZXJfY29kZSA9IFwiaW52YWxpZF91c2VyX2NvZGVcIixcbiAgaW52YWxpZF9hZGRpdGlvbmFsX2NsaWVudF9pZCA9IFwiaW52YWxpZF9hZGRpdGlvbmFsX2NsaWVudF9pZFwiLFxuICBpbnZhbGlkX3RhcmdldF9lbnRpdHlfc2NvcGUgPSBcImludmFsaWRfdGFyZ2V0X2VudGl0eV9zY29wZVwiLFxuICBpbnZhbGlkX2VudGl0eV9wZXJtaXNzaW9uX3Njb3BlID0gXCJpbnZhbGlkX2VudGl0eV9wZXJtaXNzaW9uX3Njb3BlXCIsXG4gIGludmFsaWRfdXNlcl9pZCA9IFwiaW52YWxpZF91c2VyX2lkXCIsXG4gIGludmFsaWRfdGVuYW50X2lkID0gXCJpbnZhbGlkX3RlbmFudF9pZFwiLFxuICBncmFudF90eXBlX2Rpc2FibGVkID0gXCJncmFudF90eXBlX2Rpc2FibGVkXCIsXG4gIG1pc3NpbmdfY2xpZW50X2lkID0gXCJtaXNzaW5nX2NsaWVudF9pZFwiLFxuICBtaXNzaW5nX2NsaWVudF9zZWNyZXQgPSBcIm1pc3NpbmdfY2xpZW50X3NlY3JldFwiLFxuICBtaXNzaW5nX2NvZGUgPSBcIm1pc3NpbmdfY29kZVwiLFxuICBtaXNzaW5nX2NvZGVfY2hhbGxlbmdlID0gXCJtaXNzaW5nX2NvZGVfY2hhbGxlbmdlXCIsXG4gIG1pc3NpbmdfY29kZV92ZXJpZmllciA9IFwibWlzc2luZ19jb2RlX3ZlcmlmaWVyXCIsXG4gIG1pc3NpbmdfZGV2aWNlX2NvZGUgPSBcIm1pc3NpbmdfZGV2aWNlX2NvZGVcIixcbiAgbWlzc2luZ19ncmFudF90eXBlID0gXCJtaXNzaW5nX2dyYW50X3R5cGVcIixcbiAgbWlzc2luZ19yZWRpcmVjdF91cmkgPSBcIm1pc3NpbmdfcmVkaXJlY3RfdXJpXCIsXG4gIG1pc3NpbmdfcmVmcmVzaF90b2tlbiA9IFwibWlzc2luZ19yZWZyZXNoX3Rva2VuXCIsXG4gIG1pc3NpbmdfcmVzcG9uc2VfdHlwZSA9IFwibWlzc2luZ19yZXNwb25zZV90eXBlXCIsXG4gIG1pc3NpbmdfdG9rZW4gPSBcIm1pc3NpbmdfdG9rZW5cIixcbiAgbWlzc2luZ191c2VyX2NvZGUgPSBcIm1pc3NpbmdfdXNlcl9jb2RlXCIsXG4gIG1pc3NpbmdfdXNlcl9pZCA9IFwibWlzc2luZ191c2VyX2lkXCIsXG4gIG1pc3NpbmdfdmVyaWZpY2F0aW9uX3VyaSA9IFwibWlzc2luZ192ZXJpZmljYXRpb25fdXJpXCIsXG4gIG1pc3NpbmdfdGVuYW50X2lkID0gXCJtaXNzaW5nX3RlbmFudF9pZFwiLFxuICBsb2dpbl9wcmV2ZW50ZWQgPSBcImxvZ2luX3ByZXZlbnRlZFwiLFxuICBub3RfbGljZW5zZWQgPSBcIm5vdF9saWNlbnNlZFwiLFxuICB1c2VyX2NvZGVfZXhwaXJlZCA9IFwidXNlcl9jb2RlX2V4cGlyZWRcIixcbiAgdXNlcl9leHBpcmVkID0gXCJ1c2VyX2V4cGlyZWRcIixcbiAgdXNlcl9sb2NrZWQgPSBcInVzZXJfbG9ja2VkXCIsXG4gIHVzZXJfbm90X2ZvdW5kID0gXCJ1c2VyX25vdF9mb3VuZFwiLFxuICBjbGllbnRfYXV0aGVudGljYXRpb25fbWlzc2luZyA9IFwiY2xpZW50X2F1dGhlbnRpY2F0aW9uX21pc3NpbmdcIixcbiAgaW52YWxpZF9jbGllbnRfYXV0aGVudGljYXRpb25fc2NoZW1lID0gXCJpbnZhbGlkX2NsaWVudF9hdXRoZW50aWNhdGlvbl9zY2hlbWVcIixcbiAgaW52YWxpZF9jbGllbnRfYXV0aGVudGljYXRpb24gPSBcImludmFsaWRfY2xpZW50X2F1dGhlbnRpY2F0aW9uXCIsXG4gIGNsaWVudF9pZF9taXNtYXRjaCA9IFwiY2xpZW50X2lkX21pc21hdGNoXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9hZG1pbmlzdHJhdGl2ZSA9IFwiY2hhbmdlX3Bhc3N3b3JkX2FkbWluaXN0cmF0aXZlXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9icmVhY2hlZCA9IFwiY2hhbmdlX3Bhc3N3b3JkX2JyZWFjaGVkXCIsXG4gIGNoYW5nZV9wYXNzd29yZF9leHBpcmVkID0gXCJjaGFuZ2VfcGFzc3dvcmRfZXhwaXJlZFwiLFxuICBjaGFuZ2VfcGFzc3dvcmRfdmFsaWRhdGlvbiA9IFwiY2hhbmdlX3Bhc3N3b3JkX3ZhbGlkYXRpb25cIixcbiAgdW5rbm93biA9IFwidW5rbm93blwiLFxuICBtaXNzaW5nX3JlcXVpcmVkX3Njb3BlID0gXCJtaXNzaW5nX3JlcXVpcmVkX3Njb3BlXCIsXG4gIHVua25vd25fc2NvcGUgPSBcInVua25vd25fc2NvcGVcIixcbiAgY29uc2VudF9jYW5jZWxlZCA9IFwiY29uc2VudF9jYW5jZWxlZFwiLFxuICBhdXRoZW50aWNhdGlvbl9yZXF1aXJlZCA9IFwiYXV0aGVudGljYXRpb25fcmVxdWlyZWRcIixcbiAgZW1haWxfdmVyaWZpY2F0aW9uX3JlcXVpcmVkID0gXCJlbWFpbF92ZXJpZmljYXRpb25fcmVxdWlyZWRcIixcbiAgbXVsdGlfZmFjdG9yX2NoYWxsZW5nZV9yZXF1aXJlZCA9IFwibXVsdGlfZmFjdG9yX2NoYWxsZW5nZV9yZXF1aXJlZFwiLFxuICBwaG9uZV92ZXJpZmljYXRpb25fcmVxdWlyZWQgPSBcInBob25lX3ZlcmlmaWNhdGlvbl9yZXF1aXJlZFwiLFxuICByZWdpc3RyYXRpb25fbWlzc2luZ19yZXF1aXJlbWVudCA9IFwicmVnaXN0cmF0aW9uX21pc3NpbmdfcmVxdWlyZW1lbnRcIixcbiAgcmVnaXN0cmF0aW9uX3JlcXVpcmVkID0gXCJyZWdpc3RyYXRpb25fcmVxdWlyZWRcIixcbiAgcmVnaXN0cmF0aW9uX3ZlcmlmaWNhdGlvbl9yZXF1aXJlZCA9IFwicmVnaXN0cmF0aW9uX3ZlcmlmaWNhdGlvbl9yZXF1aXJlZFwiLFxuICBjb25zZW50X3JlcXVpcmVkID0gXCJjb25zZW50X3JlcXVpcmVkXCJcbn1cblxuZXhwb3J0IGVudW0gT0F1dGhFcnJvclR5cGUge1xuICBpbnZhbGlkX3JlcXVlc3QgPSBcImludmFsaWRfcmVxdWVzdFwiLFxuICBpbnZhbGlkX2NsaWVudCA9IFwiaW52YWxpZF9jbGllbnRcIixcbiAgaW52YWxpZF9ncmFudCA9IFwiaW52YWxpZF9ncmFudFwiLFxuICBpbnZhbGlkX3Rva2VuID0gXCJpbnZhbGlkX3Rva2VuXCIsXG4gIGNvbnNlbnRfcmVxdWlyZWQgPSBcImNvbnNlbnRfcmVxdWlyZWRcIixcbiAgaW50ZXJhY3Rpb25fcmVxdWlyZWQgPSBcImludGVyYWN0aW9uX3JlcXVpcmVkXCIsXG4gIGxvZ2luX3JlcXVpcmVkID0gXCJsb2dpbl9yZXF1aXJlZFwiLFxuICB1bmF1dGhvcml6ZWRfY2xpZW50ID0gXCJ1bmF1dGhvcml6ZWRfY2xpZW50XCIsXG4gIGludmFsaWRfc2NvcGUgPSBcImludmFsaWRfc2NvcGVcIixcbiAgc2VydmVyX2Vycm9yID0gXCJzZXJ2ZXJfZXJyb3JcIixcbiAgdW5zdXBwb3J0ZWRfZ3JhbnRfdHlwZSA9IFwidW5zdXBwb3J0ZWRfZ3JhbnRfdHlwZVwiLFxuICB1bnN1cHBvcnRlZF9yZXNwb25zZV90eXBlID0gXCJ1bnN1cHBvcnRlZF9yZXNwb25zZV90eXBlXCIsXG4gIGFjY2Vzc19kZW5pZWQgPSBcImFjY2Vzc19kZW5pZWRcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX3JlcXVpcmVkID0gXCJjaGFuZ2VfcGFzc3dvcmRfcmVxdWlyZWRcIixcbiAgbm90X2xpY2Vuc2VkID0gXCJub3RfbGljZW5zZWRcIixcbiAgdHdvX2ZhY3Rvcl9yZXF1aXJlZCA9IFwidHdvX2ZhY3Rvcl9yZXF1aXJlZFwiLFxuICBhdXRob3JpemF0aW9uX3BlbmRpbmcgPSBcImF1dGhvcml6YXRpb25fcGVuZGluZ1wiLFxuICBleHBpcmVkX3Rva2VuID0gXCJleHBpcmVkX3Rva2VuXCIsXG4gIHVuc3VwcG9ydGVkX3Rva2VuX3R5cGUgPSBcInVuc3VwcG9ydGVkX3Rva2VuX3R5cGVcIixcbiAgaW52YWxpZF9kcG9wX3Byb29mID0gXCJpbnZhbGlkX2Rwb3BfcHJvb2ZcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aFJlc3BvbnNlIHtcbn1cblxuLyoqXG4gKiBDb250cm9scyB0aGUgcG9saWN5IGZvciByZXF1ZXN0aW5nIHVzZXIgcGVybWlzc2lvbiB0byBncmFudCBhY2Nlc3MgdG8gcmVxdWVzdGVkIHNjb3BlcyBkdXJpbmcgYW4gT0F1dGggd29ya2Zsb3dcbiAqIGZvciBhIHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIE9BdXRoU2NvcGVDb25zZW50TW9kZSB7XG4gIEFsd2F5c1Byb21wdCA9IFwiQWx3YXlzUHJvbXB0XCIsXG4gIFJlbWVtYmVyRGVjaXNpb24gPSBcIlJlbWVtYmVyRGVjaXNpb25cIixcbiAgTmV2ZXJQcm9tcHQgPSBcIk5ldmVyUHJvbXB0XCJcbn1cblxuLyoqXG4gKiBDb250cm9scyB0aGUgcG9saWN5IGZvciB3aGV0aGVyIE9BdXRoIHdvcmtmbG93cyB3aWxsIG1vcmUgc3RyaWN0bHkgYWRoZXJlIHRvIHRoZSBPQXV0aCBhbmQgT0lEQyBzcGVjaWZpY2F0aW9uXG4gKiBvciBydW4gaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZS5cbiAqXG4gKiBAYXV0aG9yIERhdmlkIENoYXJsZXNcbiAqL1xuZXhwb3J0IGVudW0gT0F1dGhTY29wZUhhbmRsaW5nUG9saWN5IHtcbiAgQ29tcGF0aWJpbGl0eSA9IFwiQ29tcGF0aWJpbGl0eVwiLFxuICBTdHJpY3QgPSBcIlN0cmljdFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBKb2huYXRob24gV29vZFxuICovXG5leHBvcnQgZW51bSBPYXV0aDJBdXRob3JpemVkVVJMVmFsaWRhdGlvblBvbGljeSB7XG4gIEFsbG93V2lsZGNhcmRzID0gXCJBbGxvd1dpbGRjYXJkc1wiLFxuICBFeGFjdE1hdGNoID0gXCJFeGFjdE1hdGNoXCJcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgaW5kaWNhdGluZyB0aGlzIGV2ZW50IGlzIGFuIGV2ZW50IHRoYXQgY2FuIHN1cHBseSBhIGxpbmtlZCBvYmplY3QgSWQuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYmplY3RJZGVudGlmaWFibGUge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gT2JqZWN0U3RhdGUge1xuICBBY3RpdmUgPSBcIkFjdGl2ZVwiLFxuICBJbmFjdGl2ZSA9IFwiSW5hY3RpdmVcIixcbiAgUGVuZGluZ0RlbGV0ZSA9IFwiUGVuZGluZ0RlbGV0ZVwiXG59XG5cbi8qKlxuICogT3BlbklEIENvbm5lY3QgQ29uZmlndXJhdGlvbiBhcyBkZXNjcmliZWQgYnkgdGhlIDxhIGhyZWY9XCJodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtZGlzY292ZXJ5LTFfMC5odG1sI1Byb3ZpZGVyTWV0YWRhdGFcIj5PcGVuSURcbiAqIFByb3ZpZGVyIE1ldGFkYXRhPC9hPi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbklkQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhvcml6YXRpb25fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGJhY2tjaGFubmVsX2xvZ291dF9zdXBwb3J0ZWQ/OiBib29sZWFuO1xuICBjbGFpbXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgZGV2aWNlX2F1dGhvcml6YXRpb25fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGRwb3Bfc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIGVuZF9zZXNzaW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBmcm9udGNoYW5uZWxfbG9nb3V0X3N1cHBvcnRlZD86IGJvb2xlYW47XG4gIGdyYW50X3R5cGVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIGlkX3Rva2VuX3NpZ25pbmdfYWxnX3ZhbHVlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGp3a3NfdXJpPzogc3RyaW5nO1xuICByZXNwb25zZV9tb2Rlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICByZXNwb25zZV90eXBlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICBzY29wZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgc3ViamVjdF90eXBlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICB0b2tlbl9lbmRwb2ludD86IHN0cmluZztcbiAgdG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIHVzZXJpbmZvX2VuZHBvaW50Pzogc3RyaW5nO1xuICB1c2VyaW5mb19zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbklkQ29ubmVjdEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuSWRDb25uZWN0SWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPE9wZW5JZENvbm5lY3RBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBvYXV0aDI/OiBJZGVudGl0eVByb3ZpZGVyT2F1dGgyQ29uZmlndXJhdGlvbjtcbiAgcG9zdFJlcXVlc3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZEJyZWFjaERldGVjdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBtYXRjaE1vZGU/OiBCcmVhY2hNYXRjaE1vZGU7XG4gIG5vdGlmeVVzZXJFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBvbkxvZ2luPzogQnJlYWNoQWN0aW9uO1xufVxuXG5leHBvcnQgZW51bSBCcmVhY2hBY3Rpb24ge1xuICBPZmYgPSBcIk9mZlwiLFxuICBSZWNvcmRPbmx5ID0gXCJSZWNvcmRPbmx5XCIsXG4gIE5vdGlmeVVzZXIgPSBcIk5vdGlmeVVzZXJcIixcbiAgUmVxdWlyZUNoYW5nZSA9IFwiUmVxdWlyZUNoYW5nZVwiXG59XG5cbmV4cG9ydCBlbnVtIEJyZWFjaE1hdGNoTW9kZSB7XG4gIExvdyA9IFwiTG93XCIsXG4gIE1lZGl1bSA9IFwiTWVkaXVtXCIsXG4gIEhpZ2ggPSBcIkhpZ2hcIlxufVxuXG4vKipcbiAqIFBhc3N3b3JkIEVuY3J5cHRpb24gU2NoZW1lIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGVuY3J5cHRpb25TY2hlbWU/OiBzdHJpbmc7XG4gIGVuY3J5cHRpb25TY2hlbWVGYWN0b3I/OiBudW1iZXI7XG4gIG1vZGlmeUVuY3J5cHRpb25TY2hlbWVPbkxvZ2luPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERlcmVrIEtsYXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXMge1xuICBicmVhY2hEZXRlY3Rpb24/OiBQYXNzd29yZEJyZWFjaERldGVjdGlvbjtcbiAgZGlzYWxsb3dVc2VyTG9naW5JZD86IGJvb2xlYW47XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICByZW1lbWJlclByZXZpb3VzUGFzc3dvcmRzPzogUmVtZW1iZXJQcmV2aW91c1Bhc3N3b3JkcztcbiAgcmVxdWlyZU1peGVkQ2FzZT86IGJvb2xlYW47XG4gIHJlcXVpcmVOb25BbHBoYT86IGJvb2xlYW47XG4gIHJlcXVpcmVOdW1iZXI/OiBib29sZWFuO1xuICB2YWxpZGF0ZU9uTG9naW4/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlIHtcbiAgcGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM/OiBQYXNzd29yZFZhbGlkYXRpb25SdWxlcztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFsbCBpZGVudGl0eSBwcm92aWRlcnMgdGhhdCBhcmUgcGFzc3dvcmRsZXNzIGFuZCBkbyBub3QgYWNjZXB0IGEgcGFzc3dvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzSWRlbnRpdHlQcm92aWRlciB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc0xvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBjb2RlPzogc3RyaW5nO1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdHdvRmFjdG9yVHJ1c3RJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzU2VuZFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY29kZT86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZGxlc3NTdGFydFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgbG9naW5JZD86IHN0cmluZztcbiAgbG9naW5JZFR5cGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgbG9naW5TdHJhdGVneT86IFBhc3N3b3JkbGVzc1N0cmF0ZWd5O1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2Uge1xuICBjb2RlPzogc3RyaW5nO1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFBhc3N3b3JkbGVzc1N0cmF0ZWd5IHtcbiAgQ2xpY2thYmxlTGluayA9IFwiQ2xpY2thYmxlTGlua1wiLFxuICBGb3JtRmllbGQgPSBcIkZvcm1GaWVsZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlbmRpbmdJZFBMaW5rIHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBpZGVudGl0eVByb3ZpZGVyTGlua3M/OiBBcnJheTxJZGVudGl0eVByb3ZpZGVyTGluaz47XG4gIGlkZW50aXR5UHJvdmlkZXJOYW1lPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVyVGVuYW50Q29uZmlndXJhdGlvbj86IElkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uO1xuICBpZGVudGl0eVByb3ZpZGVyVHlwZT86IElkZW50aXR5UHJvdmlkZXJUeXBlO1xuICBpZGVudGl0eVByb3ZpZGVyVXNlcklkPzogc3RyaW5nO1xuICB1c2VyPzogVXNlcjtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVuZGluZ1Jlc3BvbnNlIHtcbiAgdXNlcnM/OiBBcnJheTxVc2VyPjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB1bnZlcmlmaWVkIHBob25lIG51bWJlciBpZGVudGl0aWVzLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGhvbmVVbnZlcmlmaWVkT3B0aW9ucyB7XG4gIGFsbG93UGhvbmVOdW1iZXJDaGFuZ2VXaGVuR2F0ZWQ/OiBib29sZWFuO1xuICBiZWhhdmlvcj86IFVudmVyaWZpZWRCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBpbmJvdW5kIGxhbWJkYSBwYXJhbWV0ZXIgJ3BvbGljaWVzJyBmb3IgTUZBIFJlcXVpcmVkIGxhbWJkYXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWNpZXMge1xuICBhcHBsaWNhdGlvbkxvZ2luUG9saWN5PzogTXVsdGlGYWN0b3JMb2dpblBvbGljeTtcbiAgYXBwbGljYXRpb25NdWx0aUZhY3RvclRydXN0UG9saWN5PzogQXBwbGljYXRpb25NdWx0aUZhY3RvclRydXN0UG9saWN5O1xuICB0ZW5hbnRMb2dpblBvbGljeT86IE11bHRpRmFjdG9yTG9naW5Qb2xpY3k7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0IHtcbiAgbG9jYWxlPzogc3RyaW5nO1xuICBtZXNzYWdlVGVtcGxhdGU/OiBNZXNzYWdlVGVtcGxhdGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSB7XG4gIGVycm9ycz86IEVycm9ycztcbiAgbWVzc2FnZT86IFNNU01lc3NhZ2U7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld1JlcXVlc3Qge1xuICBlbWFpbFRlbXBsYXRlPzogRW1haWxUZW1wbGF0ZTtcbiAgbG9jYWxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3UmVzcG9uc2Uge1xuICBlbWFpbD86IEVtYWlsO1xuICBlcnJvcnM/OiBFcnJvcnM7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGVudW0gUHJvb2ZLZXlGb3JDb2RlRXhjaGFuZ2VQb2xpY3kge1xuICBSZXF1aXJlZCA9IFwiUmVxdWlyZWRcIixcbiAgTm90UmVxdWlyZWQgPSBcIk5vdFJlcXVpcmVkXCIsXG4gIE5vdFJlcXVpcmVkV2hlblVzaW5nQ2xpZW50QXV0aGVudGljYXRpb24gPSBcIk5vdFJlcXVpcmVkV2hlblVzaW5nQ2xpZW50QXV0aGVudGljYXRpb25cIlxufVxuXG4vKipcbiAqIFRoZSBoYW5kbGluZyBwb2xpY3kgZm9yIHNjb3BlcyBwcm92aWRlZCBieSBGdXNpb25BdXRoXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlZFNjb3BlUG9saWN5IHtcbiAgYWRkcmVzcz86IFJlcXVpcmFibGU7XG4gIGVtYWlsPzogUmVxdWlyYWJsZTtcbiAgcGhvbmU/OiBSZXF1aXJhYmxlO1xuICBwcm9maWxlPzogUmVxdWlyYWJsZTtcbn1cblxuLyoqXG4gKiBBbGxvd3MgdGhlIFJlbHlpbmcgUGFydHkgdG8gc3BlY2lmeSBkZXNpcmVkIGF0dHJpYnV0ZXMgb2YgYSBuZXcgY3JlZGVudGlhbC5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMge1xuICBhdHRlc3RhdGlvbj86IEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U7XG4gIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24/OiBBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWE7XG4gIGNoYWxsZW5nZT86IHN0cmluZztcbiAgZXhjbHVkZUNyZWRlbnRpYWxzPzogQXJyYXk8UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+O1xuICBleHRlbnNpb25zPzogV2ViQXV0aG5SZWdpc3RyYXRpb25FeHRlbnNpb25PcHRpb25zO1xuICBwdWJLZXlDcmVkUGFyYW1zPzogQXJyYXk8UHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnM+O1xuICBycD86IFB1YmxpY0tleUNyZWRlbnRpYWxSZWx5aW5nUGFydHlFbnRpdHk7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIHVzZXI/OiBQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eTtcbn1cblxuLyoqXG4gKiBDb250YWlucyBhdHRyaWJ1dGVzIGZvciB0aGUgUmVseWluZyBQYXJ0eSB0byByZWZlciB0byBhbiBleGlzdGluZyBwdWJsaWMga2V5IGNyZWRlbnRpYWwgYXMgYW4gaW5wdXQgcGFyYW1ldGVyLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3Ige1xuICBpZD86IHN0cmluZztcbiAgdHJhbnNwb3J0cz86IEFycmF5PHN0cmluZz47XG4gIHR5cGU/OiBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSB1c2VyIGFjY291bnQgb3IgV2ViQXV0aG4gUmVseWluZyBQYXJ0eSBhc3NvY2lhdGVkIHdpdGggYSBwdWJsaWMga2V5IGNyZWRlbnRpYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdXBwbHkgaW5mb3JtYXRpb24gb24gY3JlZGVudGlhbCB0eXBlIGFuZCBhbGdvcml0aG0gdG8gdGhlIDxpPmF1dGhlbnRpY2F0b3I8L2k+LlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMge1xuICBhbGc/OiBDb3NlQWxnb3JpdGhtSWRlbnRpZmllcjtcbiAgdHlwZT86IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlO1xufVxuXG4vKipcbiAqIFN1cHBseSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBSZWx5aW5nIFBhcnR5IHdoZW4gY3JlYXRpbmcgYSBuZXcgY3JlZGVudGlhbFxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0eSBleHRlbmRzIFB1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkge1xuICBpZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgPGk+YXV0aGVudGljYXRvcjwvaT4gd2l0aCB0aGUgZGF0YSBpdCBuZWVkcyB0byBnZW5lcmF0ZSBhbiBhc3NlcnRpb24uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMge1xuICBhbGxvd0NyZWRlbnRpYWxzPzogQXJyYXk8UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+O1xuICBjaGFsbGVuZ2U/OiBzdHJpbmc7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIHVzZXJWZXJpZmljYXRpb24/OiBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ7XG59XG5cbi8qKlxuICogRGVmaW5lcyB2YWxpZCBjcmVkZW50aWFsIHR5cGVzLiBUaGlzIGlzIGFuIGV4dGVuc2lvbiBwb2ludCBpbiB0aGUgV2ViQXV0aG4gc3BlYy4gVGhlIG9ubHkgZGVmaW5lZCB2YWx1ZSBhdCB0aGlzIHRpbWUgaXMgXCJwdWJsaWMta2V5XCJcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZSB7XG4gIHB1YmxpY0tleSA9IFwicHVibGljLWtleVwiXG59XG5cbi8qKlxuICogU3VwcGx5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXIgYWNjb3VudCB3aGVuIGNyZWF0aW5nIGEgbmV3IGNyZWRlbnRpYWxcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGV4dGVuZHMgUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eSB7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBKV1QgUHVibGljIEtleSBSZXNwb25zZSBPYmplY3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5UmVzcG9uc2Uge1xuICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gIHB1YmxpY0tleXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICB0aW1lUGVyaW9kSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJhdyBsb2dpbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCB0aW1lIGEgdXNlciBsb2dzIGludG8gYW4gYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF3TG9naW4ge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgaW5zdGFudD86IG51bWJlcjtcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBSZWFjdG9yRmVhdHVyZVN0YXR1cyB7XG4gIEFDVElWRSA9IFwiQUNUSVZFXCIsXG4gIERJU0NPTk5FQ1RFRCA9IFwiRElTQ09OTkVDVEVEXCIsXG4gIFBFTkRJTkcgPSBcIlBFTkRJTkdcIixcbiAgRElTQUJMRUQgPSBcIkRJU0FCTEVEXCIsXG4gIFVOS05PV04gPSBcIlVOS05PV05cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yTWV0cmljcyB7XG4gIGJyZWFjaGVkUGFzc3dvcmRNZXRyaWNzPzogUmVjb3JkPFVVSUQsIEJyZWFjaGVkUGFzc3dvcmRUZW5hbnRNZXRyaWM+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yTWV0cmljc1Jlc3BvbnNlIHtcbiAgbWV0cmljcz86IFJlYWN0b3JNZXRyaWNzO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIG1hbmFnaW5nIEZ1c2lvbkF1dGggUmVhY3RvciBhbmQgbGljZW5zZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RvclJlcXVlc3Qge1xuICBsaWNlbnNlPzogc3RyaW5nO1xuICBsaWNlbnNlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JSZXNwb25zZSB7XG4gIHN0YXR1cz86IFJlYWN0b3JTdGF0dXM7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JTdGF0dXMge1xuICBhZHZhbmNlZElkZW50aXR5UHJvdmlkZXJzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkTGFtYmRhcz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZE11bHRpRmFjdG9yQXV0aGVudGljYXRpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYWR2YW5jZWRPQXV0aFNjb3Blcz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZE9BdXRoU2NvcGVzQ3VzdG9tU2NvcGVzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkT0F1dGhTY29wZXNUaGlyZFBhcnR5QXBwbGljYXRpb25zPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkUmVnaXN0cmF0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFwcGxpY2F0aW9uTXVsdGlGYWN0b3JBdXRoZW50aWNhdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhcHBsaWNhdGlvblRoZW1lcz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBicmVhY2hlZFBhc3N3b3JkRGV0ZWN0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGNvbm5lY3RvcnM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgZFBvUD86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBlbnRpdHlNYW5hZ2VtZW50PzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGV4cGlyYXRpb24/OiBzdHJpbmc7XG4gIGxpY2Vuc2VBdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgbGljZW5zZWQ/OiBib29sZWFuO1xuICBtdWx0aUZhY3RvckxhbWJkYXM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgc2NpbVNlcnZlcj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB0ZW5hbnRNYW5hZ2VyQXBwbGljYXRpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgdGhyZWF0RGV0ZWN0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIHVuaXZlcnNhbEFwcGxpY2F0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIHdlYkF1dGhuPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIHdlYkF1dGhuUGxhdGZvcm1BdXRoZW50aWNhdG9ycz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB3ZWJBdXRoblJvYW1pbmdBdXRoZW50aWNhdG9ycz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgdXNlciBsb2dpbiByZXBvcnQuXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY2VudExvZ2luUmVzcG9uc2Uge1xuICBsb2dpbnM/OiBBcnJheTxEaXNwbGF5YWJsZVJhd0xvZ2luPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0aW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFJlc3BvbnNlIHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBKV1QgUmVmcmVzaCBUb2tlbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIG1ldGFEYXRhPzogTWV0YURhdGE7XG4gIHN0YXJ0SW5zdGFudD86IG51bWJlcjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhRGF0YSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZXZpY2U/OiBEZXZpY2VJbmZvO1xuICBzY29wZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IG9iamVjdCB0byBleGNoYW5nZSBhIFJlZnJlc2ggVG9rZW4gZm9yIGFuIEFjY2VzcyBUb2tlbi5cbiAqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuQWNjZXNzVG9rZW5SZXF1ZXN0IHtcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBncmFudF90eXBlPzogc3RyaW5nO1xuICByZWZyZXNoX3Rva2VuPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1c2VyX2NvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBSZWZyZXNoVG9rZW5FeHBpcmF0aW9uUG9saWN5IHtcbiAgRml4ZWQgPSBcIkZpeGVkXCIsXG4gIFNsaWRpbmdXaW5kb3cgPSBcIlNsaWRpbmdXaW5kb3dcIixcbiAgU2xpZGluZ1dpbmRvd1dpdGhNYXhpbXVtTGlmZXRpbWUgPSBcIlNsaWRpbmdXaW5kb3dXaXRoTWF4aW11bUxpZmV0aW1lXCJcbn1cblxuLyoqXG4gKiBSZWZyZXNoIFRva2VuIEltcG9ydCByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuSW1wb3J0UmVxdWVzdCB7XG4gIHJlZnJlc2hUb2tlbnM/OiBBcnJheTxSZWZyZXNoVG9rZW4+O1xuICB2YWxpZGF0ZURiQ29uc3RyYWludHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlZnJlc2ggdG9rZW4gb25lLXRpbWUgdXNlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29uZmlndXJhdGlvbiBpcyB1dGlsaXplZCB3aGVuIHRoZSB1c2FnZSBwb2xpY3kgaXNcbiAqIGNvbmZpZ3VyZWQgZm9yIG9uZS10aW1lIHVzZS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuT25lVGltZVVzZUNvbmZpZ3VyYXRpb24ge1xuICBncmFjZVBlcmlvZEluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHJldHJpZXZpbmcgUmVmcmVzaCBUb2tlbnNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuUmVzcG9uc2Uge1xuICByZWZyZXNoVG9rZW4/OiBSZWZyZXNoVG9rZW47XG4gIHJlZnJlc2hUb2tlbnM/OiBBcnJheTxSZWZyZXNoVG9rZW4+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXZvY2F0aW9uUG9saWN5IHtcbiAgb25Mb2dpblByZXZlbnRlZD86IGJvb2xlYW47XG4gIG9uTXVsdGlGYWN0b3JFbmFibGU/OiBib29sZWFuO1xuICBvbk9uZVRpbWVUb2tlblJldXNlPzogYm9vbGVhbjtcbiAgb25QYXNzd29yZENoYW5nZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBSZWZyZXNoIFRva2VuIEFQSSB0byByZXZva2UgYSByZWZyZXNoIHRva2VuIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBVUkwgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXZva2VSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuU2xpZGluZ1dpbmRvd0NvbmZpZ3VyYXRpb24ge1xuICBtYXhpbXVtVGltZVRvTGl2ZUluTWludXRlcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFJlZnJlc2hUb2tlblVzYWdlUG9saWN5IHtcbiAgUmV1c2FibGUgPSBcIlJldXNhYmxlXCIsXG4gIE9uZVRpbWVVc2UgPSBcIk9uZVRpbWVVc2VcIlxufVxuXG4vKipcbiAqIFJlZ2lzdHJhdGlvbiBkZWxldGUgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvbkRlbGV0ZVJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIHJlZ2lzdHJhdGlvbiByZXBvcnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uUmVwb3J0UmVzcG9uc2Uge1xuICBob3VybHlDb3VudHM/OiBBcnJheTxDb3VudD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlZ2lzdHJhdGlvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBkaXNhYmxlRG9tYWluQmxvY2s/OiBib29sZWFuO1xuICBnZW5lcmF0ZUF1dGhlbnRpY2F0aW9uVG9rZW4/OiBib29sZWFuO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICBzZW5kU2V0UGFzc3dvcmRFbWFpbD86IGJvb2xlYW47XG4gIHNlbmRTZXRQYXNzd29yZElkZW50aXR5VHlwZT86IFNlbmRTZXRQYXNzd29yZElkZW50aXR5VHlwZTtcbiAgc2tpcFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbj86IGJvb2xlYW47XG4gIHNraXBWZXJpZmljYXRpb24/OiBib29sZWFuO1xuICB1c2VyPzogVXNlcjtcbiAgdmVyaWZpY2F0aW9uSWRzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBSZWdpc3RyYXRpb24gQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvblJlc3BvbnNlIHtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW5JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25PbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuRXhwaXJhdGlvbkluc3RhbnQ/OiBudW1iZXI7XG4gIHVzZXI/OiBVc2VyO1xuICB2ZXJpZmljYXRpb25JZHM/OiBBcnJheTxWZXJpZmljYXRpb25JZD47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvblVudmVyaWZpZWRPcHRpb25zIHtcbiAgYmVoYXZpb3I/OiBVbnZlcmlmaWVkQmVoYXZpb3I7XG59XG5cbi8qKlxuICogUmVpbmRleCBBUEkgcmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWluZGV4UmVxdWVzdCB7XG4gIGluZGV4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWxvYWRSZXF1ZXN0IHtcbiAgbmFtZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW1lbWJlclByZXZpb3VzUGFzc3dvcmRzIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGNvdW50PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFNvbWV0aGluZyB0aGF0IGNhbiBiZSByZXF1aXJlZCBhbmQgdGh1cyBhbHNvIG9wdGlvbmFsLiBUaGlzIGN1cnJlbnRseSBleHRlbmRzIEVuYWJsZWFibGUgYmVjYXVzZSBhbnl0aGluZyB0aGF0IGlzXG4gKiByZXF1aXJlZC9vcHRpb25hbCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWFibGUgYXMgd2VsbC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJhYmxlIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBpbmJvdW5kIGxhbWJkYSBwYXJhbWV0ZXIgJ3Jlc3VsdCcgZm9yIE1GQSBSZXF1aXJlZCBsYW1iZGFzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVkTGFtYmRhUmVzdWx0IHtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBzZW5kU3VzcGljaW91c0xvZ2luRXZlbnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBkZXNjcmliaW5nIHRoZSBuZWVkIGZvciBDT1JTIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVzQ09SU0NvbmZpZ3VyYXRpb24ge1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgUmVseWluZyBQYXJ0eSdzIHJlcXVpcmVtZW50cyBmb3IgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi0yLyNjbGllbnQtc2lkZS1kaXNjb3ZlcmFibGUtY3JlZGVudGlhbFwiPmNsaWVudC1zaWRlXG4gKiBkaXNjb3ZlcmFibGUgY3JlZGVudGlhbHM8L2E+IChmb3JtZXJseSBrbm93biBhcyBcInJlc2lkZW50IGtleXNcIilcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBSZXNpZGVudEtleVJlcXVpcmVtZW50IHtcbiAgZGlzY291cmFnZWQgPSBcImRpc2NvdXJhZ2VkXCIsXG4gIHByZWZlcnJlZCA9IFwicHJlZmVycmVkXCIsXG4gIHJlcXVpcmVkID0gXCJyZXF1aXJlZFwiXG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3Qgb2JqZWN0IGZvciByZXRyaWV2aW5nIGEgdXNlciBjb2RlIHRoYXQgaXMgcGFydCBvZiBhbiBpbi1wcm9ncmVzcyBEZXZpY2UgQXV0aG9yaXphdGlvbiBHcmFudC5cbiAqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cmlldmVVc2VyQ29kZVJlcXVlc3Qge1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdXNlcl9jb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IG9iamVjdCBmb3IgcmV0cmlldmluZyBhIHVzZXIgY29kZSB0aGF0IGlzIHBhcnQgb2YgYW4gaW4tcHJvZ3Jlc3MgRGV2aWNlIEF1dGhvcml6YXRpb24gR3JhbnQgdXNpbmcgYW4gQVBJIGtleVxuICpcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXRyaWV2ZVVzZXJDb2RlVXNpbmdBUElLZXlSZXF1ZXN0IHtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1c2VyX2NvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25JbWFnZVVSTD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyQXNzZXJ0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGRlc3RpbmF0aW9uPzogU0FNTHYyRGVzdGluYXRpb25Bc3NlcnRpb25Db25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGVuY3J5cHRlZCBhc3NlcnRpb25zIHdoZW4gYWN0aW5nIGFzIFNBTUwgU2VydmljZSBQcm92aWRlclxuICpcbiAqIEBhdXRob3IgSmFyZXQgSGVuZHJpY2tzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJBc3NlcnRpb25EZWNyeXB0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBrZXlUcmFuc3BvcnREZWNyeXB0aW9uS2V5SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJEZXN0aW5hdGlvbkFzc2VydGlvbkNvbmZpZ3VyYXRpb24ge1xuICBhbHRlcm5hdGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgcG9saWN5PzogU0FNTHYyRGVzdGluYXRpb25Bc3NlcnRpb25Qb2xpY3k7XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgZW51bSBTQU1MdjJEZXN0aW5hdGlvbkFzc2VydGlvblBvbGljeSB7XG4gIEVuYWJsZWQgPSBcIkVuYWJsZWRcIixcbiAgRGlzYWJsZWQgPSBcIkRpc2FibGVkXCIsXG4gIEFsbG93QWx0ZXJuYXRlcyA9IFwiQWxsb3dBbHRlcm5hdGVzXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRQSW5pdGlhdGVkQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xufVxuXG4vKipcbiAqIFNBTUwgdjIgSWRQIEluaXRpYXRlZCBpZGVudGl0eSBwcm92aWRlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJJZFBJbml0aWF0ZWRJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZVNBTUx2MklkZW50aXR5UHJvdmlkZXI8U0FNTHYySWRQSW5pdGlhdGVkQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGlzc3Vlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJZFAgSW5pdGlhdGVkIGxvZ2luIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRQSW5pdGlhdGVkTG9naW5Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG5hbWVJZEZvcm1hdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTQU1MIHYyIGlkZW50aXR5IHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VTQU1MdjJJZGVudGl0eVByb3ZpZGVyPFNBTUx2MkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBhc3NlcnRpb25Db25maWd1cmF0aW9uPzogU0FNTHYyQXNzZXJ0aW9uQ29uZmlndXJhdGlvbjtcbiAgYnV0dG9uSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBpZHBFbmRwb2ludD86IHN0cmluZztcbiAgaWRwSW5pdGlhdGVkQ29uZmlndXJhdGlvbj86IFNBTUx2MklkcEluaXRpYXRlZENvbmZpZ3VyYXRpb247XG4gIGlzc3Vlcj86IHN0cmluZztcbiAgbG9naW5IaW50Q29uZmlndXJhdGlvbj86IExvZ2luSGludENvbmZpZ3VyYXRpb247XG4gIG5hbWVJZEZvcm1hdD86IHN0cmluZztcbiAgcG9zdFJlcXVlc3Q/OiBib29sZWFuO1xuICByZXF1ZXN0U2lnbmluZ0tleUlkPzogVVVJRDtcbiAgc2lnblJlcXVlc3Q/OiBib29sZWFuO1xuICB4bWxTaWduYXR1cmVDMTRuTWV0aG9kPzogQ2Fub25pY2FsaXphdGlvbk1ldGhvZDtcbn1cblxuLyoqXG4gKiBDb25maWcgZm9yIHJlZ3VsYXIgU0FNTCBJRFAgY29uZmlndXJhdGlvbnMgdGhhdCBzdXBwb3J0IElkUCBpbml0aWF0ZWQgcmVxdWVzdHNcbiAqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRwSW5pdGlhdGVkQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBpc3N1ZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNNU01lc3NhZ2Uge1xuICBwaG9uZU51bWJlcj86IHN0cmluZztcbiAgdGV4dE1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNNU01lc3NhZ2VUZW1wbGF0ZSBleHRlbmRzIE1lc3NhZ2VUZW1wbGF0ZSB7XG4gIGRlZmF1bHRUZW1wbGF0ZT86IHN0cmluZztcbiAgbG9jYWxpemVkVGVtcGxhdGVzPzogTG9jYWxpemVkU3RyaW5ncztcbn1cblxuLyoqXG4gKiBTZWFyY2ggQVBJIHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVxdWVzdCBleHRlbmRzIEV4cGFuZGFibGVSZXF1ZXN0IHtcbiAgc2VhcmNoPzogVXNlclNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFNlYXJjaCBBUEkgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzcG9uc2UgZXh0ZW5kcyBFeHBhbmRhYmxlUmVzcG9uc2Uge1xuICBuZXh0UmVzdWx0cz86IHN0cmluZztcbiAgdG90YWw/OiBudW1iZXI7XG4gIHVzZXJzPzogQXJyYXk8VXNlcj47XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3VsdHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0czxUPiB7XG4gIG5leHRSZXN1bHRzPzogc3RyaW5nO1xuICByZXN1bHRzPzogQXJyYXk8VD47XG4gIHRvdGFsPzogbnVtYmVyO1xuICB0b3RhbEVxdWFsVG9BY3R1YWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRSZXNwb25zZSB7XG4gIHNlY3JldD86IHN0cmluZztcbiAgc2VjcmV0QmFzZTMyRW5jb2RlZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbiB7XG4gIGxlbmd0aD86IG51bWJlcjtcbiAgdHlwZT86IFNlY3VyZUdlbmVyYXRvclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBTZWN1cmVHZW5lcmF0b3JUeXBlIHtcbiAgcmFuZG9tRGlnaXRzID0gXCJyYW5kb21EaWdpdHNcIixcbiAgcmFuZG9tQnl0ZXMgPSBcInJhbmRvbUJ5dGVzXCIsXG4gIHJhbmRvbUFscGhhID0gXCJyYW5kb21BbHBoYVwiLFxuICByYW5kb21BbHBoYU51bWVyaWMgPSBcInJhbmRvbUFscGhhTnVtZXJpY1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyZUlkZW50aXR5IHtcbiAgYnJlYWNoZWRQYXNzd29yZExhc3RDaGVja2VkSW5zdGFudD86IG51bWJlcjtcbiAgYnJlYWNoZWRQYXNzd29yZFN0YXR1cz86IEJyZWFjaGVkUGFzc3dvcmRTdGF0dXM7XG4gIGNvbm5lY3RvcklkPzogVVVJRDtcbiAgZW5jcnlwdGlvblNjaGVtZT86IHN0cmluZztcbiAgZmFjdG9yPzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGlkZW50aXRpZXM/OiBBcnJheTxVc2VySWRlbnRpdHk+O1xuICBsYXN0TG9naW5JbnN0YW50PzogbnVtYmVyO1xuICBwYXNzd29yZD86IHN0cmluZztcbiAgcGFzc3dvcmRDaGFuZ2VSZWFzb24/OiBDaGFuZ2VQYXNzd29yZFJlYXNvbjtcbiAgcGFzc3dvcmRDaGFuZ2VSZXF1aXJlZD86IGJvb2xlYW47XG4gIHBhc3N3b3JkTGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHNhbHQ/OiBzdHJpbmc7XG4gIHVuaXF1ZVVzZXJuYW1lPzogc3RyaW5nO1xuICB1c2VybmFtZT86IHN0cmluZztcbiAgdXNlcm5hbWVTdGF0dXM/OiBDb250ZW50U3RhdHVzO1xuICB2ZXJpZmllZD86IGJvb2xlYW47XG4gIHZlcmlmaWVkSW5zdGFudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIGFuZHJld3BhaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGZTZXJ2aWNlRm9ybUNvbmZpZ3VyYXRpb24ge1xuICByZXF1aXJlQ3VycmVudFBhc3N3b3JkT25QYXNzd29yZENoYW5nZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGJjY0FkZHJlc3Nlcz86IEFycmF5PHN0cmluZz47XG4gIGNjQWRkcmVzc2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgcHJlZmVycmVkTGFuZ3VhZ2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVxdWVzdERhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0b0FkZHJlc3Nlcz86IEFycmF5PEVtYWlsQWRkcmVzcz47XG4gIHVzZXJJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZFJlc3BvbnNlIHtcbiAgYW5vbnltb3VzUmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIEVtYWlsVGVtcGxhdGVFcnJvcnM+O1xuICByZXN1bHRzPzogUmVjb3JkPFVVSUQsIEVtYWlsVGVtcGxhdGVFcnJvcnM+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVFcnJvcnMge1xuICBwYXJzZUVycm9ycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlbmRlckVycm9ycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogVXNlZCB0byBpbmRpY2F0ZSB3aGljaCBpZGVudGl0eSB0eXBlIGEgcGFzc3dvcmQgXCJyZXF1ZXN0XCIgbWlnaHQgZ28gdG8uIEl0IGNvdWxkIGJlXG4gKiB1c2VkIGZvciBzZW5kIHNldCBwYXNzd29yZHMgb3Igc2VuZCBwYXNzd29yZCByZXNldHMuXG4gKi9cbmV4cG9ydCBlbnVtIFNlbmRTZXRQYXNzd29yZElkZW50aXR5VHlwZSB7XG4gIGVtYWlsID0gXCJlbWFpbFwiLFxuICBwaG9uZSA9IFwicGhvbmVcIixcbiAgZG9Ob3RTZW5kID0gXCJkb05vdFNlbmRcIlxufVxuXG4vKipcbiAqIFRoZW1lIG9iamVjdCBmb3IgdmFsdWVzIHVzZWQgaW4gdGhlIGNzcyB2YXJpYWJsZXMgZm9yIHNpbXBsZSB0aGVtZXMuXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZVRoZW1lVmFyaWFibGVzIHtcbiAgYWxlcnRCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGFsZXJ0Rm9udENvbG9yPzogc3RyaW5nO1xuICBiYWNrZ3JvdW5kSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJhY2tncm91bmRTaXplPzogc3RyaW5nO1xuICBib3JkZXJSYWRpdXM/OiBzdHJpbmc7XG4gIGRlbGV0ZUJ1dHRvbkNvbG9yPzogc3RyaW5nO1xuICBkZWxldGVCdXR0b25Gb2N1c0NvbG9yPzogc3RyaW5nO1xuICBkZWxldGVCdXR0b25UZXh0Q29sb3I/OiBzdHJpbmc7XG4gIGRlbGV0ZUJ1dHRvblRleHRGb2N1c0NvbG9yPzogc3RyaW5nO1xuICBlcnJvckZvbnRDb2xvcj86IHN0cmluZztcbiAgZXJyb3JJY29uQ29sb3I/OiBzdHJpbmc7XG4gIGZvbnRDb2xvcj86IHN0cmluZztcbiAgZm9udEZhbWlseT86IHN0cmluZztcbiAgZm9vdGVyRGlzcGxheT86IGJvb2xlYW47XG4gIGljb25CYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGljb25Db2xvcj86IHN0cmluZztcbiAgaW5mb0ljb25Db2xvcj86IHN0cmluZztcbiAgaW5wdXRCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGlucHV0SWNvbkNvbG9yPzogc3RyaW5nO1xuICBpbnB1dFRleHRDb2xvcj86IHN0cmluZztcbiAgbGlua1RleHRDb2xvcj86IHN0cmluZztcbiAgbGlua1RleHRGb2N1c0NvbG9yPzogc3RyaW5nO1xuICBsb2dvSW1hZ2VTaXplPzogc3RyaW5nO1xuICBsb2dvSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIG1vbm9Gb250Q29sb3I/OiBzdHJpbmc7XG4gIG1vbm9Gb250RmFtaWx5Pzogc3RyaW5nO1xuICBwYWdlQmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBwYW5lbEJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUJ1dHRvbkNvbG9yPzogc3RyaW5nO1xuICBwcmltYXJ5QnV0dG9uRm9jdXNDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUJ1dHRvblRleHRDb2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUJ1dHRvblRleHRGb2N1c0NvbG9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbnlQU05BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU29ueVBTTiBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29ueVBTTklkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxTb255UFNOQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBTb3J0IHtcbiAgYXNjID0gXCJhc2NcIixcbiAgZGVzYyA9IFwiZGVzY1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRGaWVsZCB7XG4gIG1pc3Npbmc/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9yZGVyPzogU29ydDtcbn1cblxuLyoqXG4gKiBUaGUgcHVibGljIFN0YXR1cyBBUEkgcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHVzUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbn1cblxuLyoqXG4gKiBTdGVhbSBBUEkgbW9kZXMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBTdGVhbUFQSU1vZGUge1xuICBQdWJsaWMgPSBcIlB1YmxpY1wiLFxuICBQYXJ0bmVyID0gXCJQYXJ0bmVyXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGVhbUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYXBpTW9kZT86IFN0ZWFtQVBJTW9kZTtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgd2ViQVBJS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0ZWFtIGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGVhbUlkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxTdGVhbUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBhcGlNb2RlPzogU3RlYW1BUElNb2RlO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB3ZWJBUElLZXk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSGVscGVyIGludGVyZmFjZSB0aGF0IGluZGljYXRlcyBhbiBpZGVudGl0eSBwcm92aWRlciBjYW4gYmUgZmVkZXJhdGVkIHRvIHVzaW5nIHRoZSBIVFRQIFBPU1QgbWV0aG9kLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1cHBvcnRzUG9zdEJpbmRpbmdzIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeXN0ZW1Db25maWd1cmF0aW9uIHtcbiAgYXVkaXRMb2dDb25maWd1cmF0aW9uPzogQXVkaXRMb2dDb25maWd1cmF0aW9uO1xuICBjb3JzQ29uZmlndXJhdGlvbj86IENPUlNDb25maWd1cmF0aW9uO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZXZlbnRMb2dDb25maWd1cmF0aW9uPzogRXZlbnRMb2dDb25maWd1cmF0aW9uO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9naW5SZWNvcmRDb25maWd1cmF0aW9uPzogTG9naW5SZWNvcmRDb25maWd1cmF0aW9uO1xuICByZXBvcnRUaW1lem9uZT86IHN0cmluZztcbiAgdHJ1c3RlZFByb3h5Q29uZmlndXJhdGlvbj86IFN5c3RlbVRydXN0ZWRQcm94eUNvbmZpZ3VyYXRpb247XG4gIHVpQ29uZmlndXJhdGlvbj86IFVJQ29uZmlndXJhdGlvbjtcbiAgdXNhZ2VEYXRhQ29uZmlndXJhdGlvbj86IFVzYWdlRGF0YUNvbmZpZ3VyYXRpb247XG4gIHdlYmhvb2tFdmVudExvZ0NvbmZpZ3VyYXRpb24/OiBXZWJob29rRXZlbnRMb2dDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nQ29uZmlndXJhdGlvbiB7XG4gIGRlbGV0ZT86IERlbGV0ZUNvbmZpZ3VyYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBudW1iZXJPZkRheXNUb1JldGFpbj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZ0NvbmZpZ3VyYXRpb24ge1xuICBudW1iZXJUb1JldGFpbj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZENvbmZpZ3VyYXRpb24ge1xuICBkZWxldGU/OiBEZWxldGVDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVJQ29uZmlndXJhdGlvbiB7XG4gIGhlYWRlckNvbG9yPzogc3RyaW5nO1xuICBsb2dvVVJMPzogc3RyaW5nO1xuICBtZW51Rm9udENvbG9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiBBUEkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29uZmlndXJhdGlvblJlcXVlc3Qge1xuICBzeXN0ZW1Db25maWd1cmF0aW9uPzogU3lzdGVtQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIEFQSS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2Uge1xuICBzeXN0ZW1Db25maWd1cmF0aW9uPzogU3lzdGVtQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtTG9nc0V4cG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGluY2x1ZGVBcmNoaXZlZD86IGJvb2xlYW47XG4gIGxhc3ROQnl0ZXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbVRydXN0ZWRQcm94eUNvbmZpZ3VyYXRpb24ge1xuICB0cnVzdGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgdHJ1c3RQb2xpY3k/OiBTeXN0ZW1UcnVzdGVkUHJveHlDb25maWd1cmF0aW9uUG9saWN5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gU3lzdGVtVHJ1c3RlZFByb3h5Q29uZmlndXJhdGlvblBvbGljeSB7XG4gIEFsbCA9IFwiQWxsXCIsXG4gIE9ubHlDb25maWd1cmVkID0gXCJPbmx5Q29uZmlndXJlZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudCB7XG4gIGFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uPzogVGVuYW50QWNjZXNzQ29udHJvbENvbmZpZ3VyYXRpb247XG4gIGNhcHRjaGFDb25maWd1cmF0aW9uPzogVGVuYW50Q2FwdGNoYUNvbmZpZ3VyYXRpb247XG4gIGNvbmZpZ3VyZWQ/OiBib29sZWFuO1xuICBjb25uZWN0b3JQb2xpY2llcz86IEFycmF5PENvbm5lY3RvclBvbGljeT47XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbWFpbENvbmZpZ3VyYXRpb24/OiBFbWFpbENvbmZpZ3VyYXRpb247XG4gIGV2ZW50Q29uZmlndXJhdGlvbj86IEV2ZW50Q29uZmlndXJhdGlvbjtcbiAgZXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbj86IEV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb247XG4gIGZhaWxlZEF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbj86IEZhaWxlZEF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbjtcbiAgZmFtaWx5Q29uZmlndXJhdGlvbj86IEZhbWlseUNvbmZpZ3VyYXRpb247XG4gIGZvcm1Db25maWd1cmF0aW9uPzogVGVuYW50Rm9ybUNvbmZpZ3VyYXRpb247XG4gIGh0dHBTZXNzaW9uTWF4SW5hY3RpdmVJbnRlcnZhbD86IG51bWJlcjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGp3dENvbmZpZ3VyYXRpb24/OiBKV1RDb25maWd1cmF0aW9uO1xuICBsYW1iZGFDb25maWd1cmF0aW9uPzogVGVuYW50TGFtYmRhQ29uZmlndXJhdGlvbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvZ2luQ29uZmlndXJhdGlvbj86IFRlbmFudExvZ2luQ29uZmlndXJhdGlvbjtcbiAgbG9nb3V0VVJMPzogc3RyaW5nO1xuICBtYXhpbXVtUGFzc3dvcmRBZ2U/OiBNYXhpbXVtUGFzc3dvcmRBZ2U7XG4gIG1pbmltdW1QYXNzd29yZEFnZT86IE1pbmltdW1QYXNzd29yZEFnZTtcbiAgbXVsdGlGYWN0b3JDb25maWd1cmF0aW9uPzogVGVuYW50TXVsdGlGYWN0b3JDb25maWd1cmF0aW9uO1xuICBuYW1lPzogc3RyaW5nO1xuICBvYXV0aENvbmZpZ3VyYXRpb24/OiBUZW5hbnRPQXV0aDJDb25maWd1cmF0aW9uO1xuICBwYXNzd29yZEVuY3J5cHRpb25Db25maWd1cmF0aW9uPzogUGFzc3dvcmRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM/OiBQYXNzd29yZFZhbGlkYXRpb25SdWxlcztcbiAgcGhvbmVDb25maWd1cmF0aW9uPzogVGVuYW50UGhvbmVDb25maWd1cmF0aW9uO1xuICByYXRlTGltaXRDb25maWd1cmF0aW9uPzogVGVuYW50UmF0ZUxpbWl0Q29uZmlndXJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbj86IFRlbmFudFJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb247XG4gIHNjaW1TZXJ2ZXJDb25maWd1cmF0aW9uPzogVGVuYW50U0NJTVNlcnZlckNvbmZpZ3VyYXRpb247XG4gIHNzb0NvbmZpZ3VyYXRpb24/OiBUZW5hbnRTU09Db25maWd1cmF0aW9uO1xuICBzdGF0ZT86IE9iamVjdFN0YXRlO1xuICB0aGVtZUlkPzogVVVJRDtcbiAgdXNlckRlbGV0ZVBvbGljeT86IFRlbmFudFVzZXJEZWxldGVQb2xpY3k7XG4gIHVzZXJuYW1lQ29uZmlndXJhdGlvbj86IFRlbmFudFVzZXJuYW1lQ29uZmlndXJhdGlvbjtcbiAgd2ViQXV0aG5Db25maWd1cmF0aW9uPzogVGVuYW50V2ViQXV0aG5Db25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudE9BdXRoMkNvbmZpZ3VyYXRpb24ge1xuICBjbGllbnRDcmVkZW50aWFsc0FjY2Vzc1Rva2VuUG9wdWxhdGVMYW1iZGFJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRBY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbiB7XG4gIHVpSVBBY2Nlc3NDb250cm9sTGlzdElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRDYXB0Y2hhQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjYXB0Y2hhTWV0aG9kPzogQ2FwdGNoYU1ldGhvZDtcbiAgc2VjcmV0S2V5Pzogc3RyaW5nO1xuICBzaXRlS2V5Pzogc3RyaW5nO1xuICB0aHJlc2hvbGQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgdGhlIFRlbmFudCBBUEkgdG8gZGVsZXRlIGEgdGVuYW50IHJhdGhlciB0aGFuIHVzaW5nIHRoZSBVUkwgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnREZWxldGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFzeW5jPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Rm9ybUNvbmZpZ3VyYXRpb24ge1xuICBhZG1pblVzZXJGb3JtSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgUm9iIERhdmlzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50TGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIGxvZ2luVmFsaWRhdGlvbklkPzogVVVJRDtcbiAgbXVsdGlGYWN0b3JSZXF1aXJlbWVudElkPzogVVVJRDtcbiAgc2NpbUVudGVycHJpc2VVc2VyUmVxdWVzdENvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbUVudGVycHJpc2VVc2VyUmVzcG9uc2VDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1Hcm91cFJlcXVlc3RDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1Hcm91cFJlc3BvbnNlQ29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltVXNlclJlcXVlc3RDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1Vc2VyUmVzcG9uc2VDb252ZXJ0ZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudExvZ2luQ29uZmlndXJhdGlvbiB7XG4gIHJlcXVpcmVBdXRoZW50aWNhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWtleSBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRNdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24ge1xuICBhdXRoZW50aWNhdG9yPzogTXVsdGlGYWN0b3JBdXRoZW50aWNhdG9yTWV0aG9kO1xuICBlbWFpbD86IE11bHRpRmFjdG9yRW1haWxNZXRob2Q7XG4gIGxvZ2luUG9saWN5PzogTXVsdGlGYWN0b3JMb2dpblBvbGljeTtcbiAgc21zPzogTXVsdGlGYWN0b3JTTVNNZXRob2Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGYWN0b3JBdXRoZW50aWNhdG9yTWV0aG9kIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFsZ29yaXRobT86IFRPVFBBbGdvcml0aG07XG4gIGNvZGVMZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVTdGVwPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmFjdG9yRW1haWxNZXRob2QgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgdGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGYWN0b3JTTVNNZXRob2QgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbWVzc2VuZ2VySWQ/OiBVVUlEO1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBIb2xkIHRlbmFudCBwaG9uZSBjb25maWd1cmF0aW9uIGZvciBwYXNzd29yZGxlc3MgYW5kIHZlcmlmaWNhdGlvbiBjYXNlcy5cbiAqXG4gKiBAYXV0aG9yIEJyYWR5IFdpZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRQaG9uZUNvbmZpZ3VyYXRpb24ge1xuICBmb3Jnb3RQYXNzd29yZFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBpZGVudGl0eVVwZGF0ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICBpbXBsaWNpdFBob25lVmVyaWZpY2F0aW9uQWxsb3dlZD86IGJvb2xlYW47XG4gIGxvZ2luSWRJblVzZU9uQ3JlYXRlVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luSWRJblVzZU9uVXBkYXRlVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luTmV3RGV2aWNlVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luU3VzcGljaW91c1RlbXBsYXRlSWQ/OiBVVUlEO1xuICBtZXNzZW5nZXJJZD86IFVVSUQ7XG4gIHBhc3N3b3JkbGVzc1RlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFJlc2V0U3VjY2Vzc1RlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFVwZGF0ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICBzZXRQYXNzd29yZFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RBZGRUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kUmVtb3ZlVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHVudmVyaWZpZWQ/OiBQaG9uZVVudmVyaWZpZWRPcHRpb25zO1xuICB2ZXJpZmljYXRpb25Db21wbGV0ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICB2ZXJpZmljYXRpb25TdHJhdGVneT86IFZlcmlmaWNhdGlvblN0cmF0ZWd5O1xuICB2ZXJpZmljYXRpb25UZW1wbGF0ZUlkPzogVVVJRDtcbiAgdmVyaWZ5UGhvbmVOdW1iZXI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSYXRlTGltaXRDb25maWd1cmF0aW9uIHtcbiAgZmFpbGVkTG9naW4/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBmb3Jnb3RQYXNzd29yZD86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIHNlbmRFbWFpbFZlcmlmaWNhdGlvbj86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIHNlbmRQYXNzd29yZGxlc3M/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kUGFzc3dvcmRsZXNzUGhvbmU/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kUGhvbmVWZXJpZmljYXRpb24/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgc2VuZFR3b0ZhY3Rvcj86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBibG9ja2VkRG9tYWlucz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgc291cmNlVGVuYW50SWQ/OiBVVUlEO1xuICB0ZW5hbnQ/OiBUZW5hbnQ7XG4gIHdlYmhvb2tJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UmVzcG9uc2Uge1xuICB0ZW5hbnQ/OiBUZW5hbnQ7XG4gIHRlbmFudHM/OiBBcnJheTxUZW5hbnQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgUm9iIERhdmlzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50U0NJTVNlcnZlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgY2xpZW50RW50aXR5VHlwZUlkPzogVVVJRDtcbiAgc2NoZW1hcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHNlcnZlckVudGl0eVR5cGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50U1NPQ29uZmlndXJhdGlvbiB7XG4gIGFsbG93QWNjZXNzVG9rZW5Cb290c3RyYXA/OiBib29sZWFuO1xuICBkZXZpY2VUcnVzdFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBUZW5hbnRzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBUZW5hbnRzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IFRlbmFudFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFRlbmFudCBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRTZWFyY2hSZXNwb25zZSB7XG4gIHRlbmFudHM/OiBBcnJheTxUZW5hbnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50VW52ZXJpZmllZENvbmZpZ3VyYXRpb24ge1xuICBlbWFpbD86IFVudmVyaWZpZWRCZWhhdmlvcjtcbiAgd2hlbkdhdGVkPzogUmVnaXN0cmF0aW9uVW52ZXJpZmllZE9wdGlvbnM7XG59XG5cbi8qKlxuICogQSBUZW5hbnQtbGV2ZWwgcG9saWN5IGZvciBkZWxldGluZyBVc2Vycy5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFVzZXJEZWxldGVQb2xpY3kge1xuICB1bnZlcmlmaWVkPzogVGltZUJhc2VkRGVsZXRlUG9saWN5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRVc2VybmFtZUNvbmZpZ3VyYXRpb24ge1xuICB1bmlxdWU/OiBVbmlxdWVVc2VybmFtZUNvbmZpZ3VyYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pcXVlVXNlcm5hbWVDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG51bWJlck9mRGlnaXRzPzogbnVtYmVyO1xuICBzZXBhcmF0b3I/OiBzdHJpbmc7XG4gIHN0cmF0ZWd5PzogVW5pcXVlVXNlcm5hbWVTdHJhdGVneTtcbn1cblxuZXhwb3J0IGVudW0gVW5pcXVlVXNlcm5hbWVTdHJhdGVneSB7XG4gIEFsd2F5cyA9IFwiQWx3YXlzXCIsXG4gIE9uQ29sbGlzaW9uID0gXCJPbkNvbGxpc2lvblwiXG59XG5cbi8qKlxuICogVGVuYW50LWxldmVsIGNvbmZpZ3VyYXRpb24gZm9yIFdlYkF1dGhuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRXZWJBdXRobkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYm9vdHN0cmFwV29ya2Zsb3c/OiBUZW5hbnRXZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbjtcbiAgZGVidWc/OiBib29sZWFuO1xuICByZWF1dGhlbnRpY2F0aW9uV29ya2Zsb3c/OiBUZW5hbnRXZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbjtcbiAgcmVseWluZ1BhcnR5SWQ/OiBzdHJpbmc7XG4gIHJlbHlpbmdQYXJ0eU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRXZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhdXRoZW50aWNhdG9yQXR0YWNobWVudFByZWZlcmVuY2U/OiBBdXRoZW50aWNhdG9yQXR0YWNobWVudFByZWZlcmVuY2U7XG4gIHVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudD86IFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRhYmxlIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlZmF1bHRNZXNzYWdlcz86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9jYWxpemVkTWVzc2FnZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdHlsZXNoZWV0Pzogc3RyaW5nO1xuICB0ZW1wbGF0ZXM/OiBUZW1wbGF0ZXM7XG4gIHR5cGU/OiBUaGVtZVR5cGU7XG4gIHZhcmlhYmxlcz86IFNpbXBsZVRoZW1lVmFyaWFibGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlcyB7XG4gIGFjY291bnRFZGl0Pzogc3RyaW5nO1xuICBhY2NvdW50SW5kZXg/OiBzdHJpbmc7XG4gIGFjY291bnRUd29GYWN0b3JEaXNhYmxlPzogc3RyaW5nO1xuICBhY2NvdW50VHdvRmFjdG9yRW5hYmxlPzogc3RyaW5nO1xuICBhY2NvdW50VHdvRmFjdG9ySW5kZXg/OiBzdHJpbmc7XG4gIGFjY291bnRXZWJBdXRobkFkZD86IHN0cmluZztcbiAgYWNjb3VudFdlYkF1dGhuRGVsZXRlPzogc3RyaW5nO1xuICBhY2NvdW50V2ViQXV0aG5JbmRleD86IHN0cmluZztcbiAgY29uZmlybWF0aW9uUmVxdWlyZWQ/OiBzdHJpbmc7XG4gIGVtYWlsQ29tcGxldGU/OiBzdHJpbmc7XG4gIGVtYWlsU2VuZD86IHN0cmluZztcbiAgZW1haWxTZW50Pzogc3RyaW5nO1xuICBlbWFpbFZlcmlmaWNhdGlvblJlcXVpcmVkPzogc3RyaW5nO1xuICBlbWFpbFZlcmlmeT86IHN0cmluZztcbiAgaGVscGVycz86IHN0cmluZztcbiAgaW5kZXg/OiBzdHJpbmc7XG4gIG9hdXRoMkF1dGhvcml6ZT86IHN0cmluZztcbiAgb2F1dGgyQXV0aG9yaXplZE5vdFJlZ2lzdGVyZWQ/OiBzdHJpbmc7XG4gIG9hdXRoMkNoaWxkUmVnaXN0cmF0aW9uTm90QWxsb3dlZD86IHN0cmluZztcbiAgb2F1dGgyQ2hpbGRSZWdpc3RyYXRpb25Ob3RBbGxvd2VkQ29tcGxldGU/OiBzdHJpbmc7XG4gIG9hdXRoMkNvbXBsZXRlUmVnaXN0cmF0aW9uPzogc3RyaW5nO1xuICBvYXV0aDJDb25zZW50Pzogc3RyaW5nO1xuICBvYXV0aDJEZXZpY2U/OiBzdHJpbmc7XG4gIG9hdXRoMkRldmljZUNvbXBsZXRlPzogc3RyaW5nO1xuICBvYXV0aDJFcnJvcj86IHN0cmluZztcbiAgb2F1dGgyTG9nb3V0Pzogc3RyaW5nO1xuICBvYXV0aDJQYXNzd29yZGxlc3M/OiBzdHJpbmc7XG4gIG9hdXRoMlJlZ2lzdGVyPzogc3RyaW5nO1xuICBvYXV0aDJTdGFydElkUExpbms/OiBzdHJpbmc7XG4gIG9hdXRoMlR3b0ZhY3Rvcj86IHN0cmluZztcbiAgb2F1dGgyVHdvRmFjdG9yRW5hYmxlPzogc3RyaW5nO1xuICBvYXV0aDJUd29GYWN0b3JFbmFibGVDb21wbGV0ZT86IHN0cmluZztcbiAgb2F1dGgyVHdvRmFjdG9yTWV0aG9kcz86IHN0cmluZztcbiAgb2F1dGgyV2FpdD86IHN0cmluZztcbiAgb2F1dGgyV2ViQXV0aG4/OiBzdHJpbmc7XG4gIG9hdXRoMldlYkF1dGhuUmVhdXRoPzogc3RyaW5nO1xuICBvYXV0aDJXZWJBdXRoblJlYXV0aEVuYWJsZT86IHN0cmluZztcbiAgcGFzc3dvcmRDaGFuZ2U/OiBzdHJpbmc7XG4gIHBhc3N3b3JkQ29tcGxldGU/OiBzdHJpbmc7XG4gIHBhc3N3b3JkRm9yZ290Pzogc3RyaW5nO1xuICBwYXNzd29yZFNlbnQ/OiBzdHJpbmc7XG4gIHBob25lQ29tcGxldGU/OiBzdHJpbmc7XG4gIHBob25lU2VudD86IHN0cmluZztcbiAgcGhvbmVWZXJpZmljYXRpb25SZXF1aXJlZD86IHN0cmluZztcbiAgcGhvbmVWZXJpZnk/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvbkNvbXBsZXRlPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25TZW5kPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25TZW50Pzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25SZXF1aXJlZD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uVmVyaWZ5Pzogc3RyaW5nO1xuICBzYW1sdjJMb2dvdXQ/OiBzdHJpbmc7XG4gIHVuYXV0aG9yaXplZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGVtZSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZVJlcXVlc3Qge1xuICBzb3VyY2VUaGVtZUlkPzogVVVJRDtcbiAgdGhlbWU/OiBUaGVtZTtcbn1cblxuLyoqXG4gKiBUaGVtZSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVSZXNwb25zZSB7XG4gIHRoZW1lPzogVGhlbWU7XG4gIHRoZW1lcz86IEFycmF5PFRoZW1lPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIHRoZW1lc1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogVGhlbWVUeXBlO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBUaGVtZXMuXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogVGhlbWVTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVzcG9uc2UgZm9yIFRoZW1lc1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lU2VhcmNoUmVzcG9uc2Uge1xuICB0aGVtZXM/OiBBcnJheTxUaGVtZT47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZW51bSBUaGVtZVR5cGUge1xuICBhZHZhbmNlZCA9IFwiYWR2YW5jZWRcIixcbiAgc2ltcGxlID0gXCJzaW1wbGVcIlxufVxuXG4vKipcbiAqIEEgcG9saWN5IGZvciBkZWxldGluZyBVc2VycyBiYXNlZCB1cG9uIHNvbWUgZXh0ZXJuYWwgY3JpdGVyaWEuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lQmFzZWREZWxldGVQb2xpY3kgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZW5hYmxlZEluc3RhbnQ/OiBudW1iZXI7XG4gIG51bWJlck9mRGF5c1RvUmV0YWluPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIDx1bD5cbiAqIDxsaT5CZWFyZXIgVG9rZW4gdHlwZSBhcyBkZWZpbmVkIGJ5IDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc1MFwiPlJGQyA2NzUwPC9hPi48L2xpPlxuICogPGxpPk1BQyBUb2tlbiB0eXBlIGFzIHJlZmVyZW5jZWQgYnkgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5XCI+UkZDIDY3NDk8L2E+IGFuZFxuICogPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLW9hdXRoLXYyLWh0dHAtbWFjLTA1XCI+XG4gKiBEcmFmdCBSRkMgb24gT0F1dGggMi4wIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSAoTUFDKSBUb2tlbnM8L2E+XG4gKiA8L2xpPlxuICogPGxpPkRQb1AgVG9rZW4gdHlwZSBhcyBkZWZpbmVkIGJ5IDxhIGhyZWY9XCJodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzk0NDlcIj5SRkMgOTQ0OTwvYT48L2xpPlxuICogPC91bD5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFRva2VuVHlwZSB7XG4gIEJlYXJlciA9IFwiQmVhcmVyXCIsXG4gIE1BQyA9IFwiTUFDXCIsXG4gIERQb1AgPSBcIkRQb1BcIlxufVxuXG4vKipcbiAqIFRoZSByZXNwb25zZSBmcm9tIHRoZSB0b3RhbCByZXBvcnQuIFRoaXMgcmVwb3J0IHN0b3JlcyB0aGUgdG90YWwgbnVtYmVycyBmb3IgZWFjaCBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb3RhbHNSZXBvcnRSZXNwb25zZSB7XG4gIGFwcGxpY2F0aW9uVG90YWxzPzogUmVjb3JkPFVVSUQsIFRvdGFscz47XG4gIGdsb2JhbFJlZ2lzdHJhdGlvbnM/OiBudW1iZXI7XG4gIHRvdGFsR2xvYmFsUmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb3RhbHMge1xuICBsb2dpbnM/OiBudW1iZXI7XG4gIHJlZ2lzdHJhdGlvbnM/OiBudW1iZXI7XG4gIHRvdGFsUmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdHJhbnNhY3Rpb24gdHlwZXMgZm9yIFdlYmhvb2tzIGFuZCBvdGhlciBldmVudCBzeXN0ZW1zIHdpdGhpbiBGdXNpb25BdXRoLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBUcmFuc2FjdGlvblR5cGUge1xuICBOb25lID0gXCJOb25lXCIsXG4gIEFueSA9IFwiQW55XCIsXG4gIFNpbXBsZU1ham9yaXR5ID0gXCJTaW1wbGVNYWpvcml0eVwiLFxuICBTdXBlck1ham9yaXR5ID0gXCJTdXBlck1ham9yaXR5XCIsXG4gIEFic29sdXRlTWFqb3JpdHkgPSBcIkFic29sdXRlTWFqb3JpdHlcIlxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGluYm91bmQgbGFtYmRhIHBhcmFtZXRlciAnbWZhVHJ1c3QnIGluc2lkZSB0aGUgJ2NvbnRleHQnIHBhcmFtZXRlciBmb3IgTUZBIFJlcXVpcmVkIGxhbWJkYXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJ1c3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGV4cGlyYXRpb25JbnN0YW50PzogbnVtYmVyO1xuICBpZD86IHN0cmluZztcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgc3RhcnRJbnN0YW50cz86IFN0YXJ0SW5zdGFudDtcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRJbnN0YW50IHtcbiAgYXBwbGljYXRpb25zPzogUmVjb3JkPFVVSUQsIG51bWJlcj47XG4gIHRlbmFudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aWxpb01lc3NlbmdlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiB7XG4gIGFjY291bnRTSUQ/OiBzdHJpbmc7XG4gIGF1dGhUb2tlbj86IHN0cmluZztcbiAgZnJvbVBob25lTnVtYmVyPzogc3RyaW5nO1xuICBtZXNzYWdpbmdTZXJ2aWNlU2lkPzogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdGNoQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFR3aXRjaCBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdGNoSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFR3aXRjaEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2l0dGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjb25zdW1lcktleT86IHN0cmluZztcbiAgY29uc3VtZXJTZWNyZXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHdpdHRlciBzb2NpYWwgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXR0ZXJJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8VHdpdHRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjb25zdW1lcktleT86IHN0cmluZztcbiAgY29uc3VtZXJTZWNyZXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yRGlzYWJsZVJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIG1ldGhvZElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JFbmFibGVEaXNhYmxlU2VuZFJlcXVlc3Qge1xuICBlbWFpbD86IHN0cmluZztcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtZXRob2RJZD86IHN0cmluZztcbiAgbW9iaWxlUGhvbmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvckxvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBjb2RlPzogc3RyaW5nO1xuICB0cnVzdENvbXB1dGVyPzogYm9vbGVhbjtcbiAgdHdvRmFjdG9ySWQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3Rvck1ldGhvZCB7XG4gIGF1dGhlbnRpY2F0b3I/OiBBdXRoZW50aWNhdG9yQ29uZmlndXJhdGlvbjtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBsYXN0VXNlZD86IGJvb2xlYW47XG4gIG1ldGhvZD86IHN0cmluZztcbiAgbW9iaWxlUGhvbmU/OiBzdHJpbmc7XG4gIHNlY3JldD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2Uge1xuICByZWNvdmVyeUNvZGVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBhdXRoZW50aWNhdG9ySWQ/OiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBtZXRob2Q/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xuICBzZWNyZXQ/OiBzdHJpbmc7XG4gIHNlY3JldEJhc2UzMkVuY29kZWQ/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvcklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JSZXNwb25zZSB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIHJlY292ZXJ5Q29kZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JTZW5kUmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBlbWFpbD86IHN0cmluZztcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtZXRob2RJZD86IHN0cmluZztcbiAgbW9iaWxlUGhvbmU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JTdGFydFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY29kZT86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgbG9naW5JZFR5cGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0cnVzdENoYWxsZW5nZT86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU3RhcnRSZXNwb25zZSB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIG1ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDaGVjayB0aGUgc3RhdHVzIG9mIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgdXNlciwgd2l0aCBtb3JlIG9wdGlvbnMgdGhhbiBvbiBhIEdFVCByZXF1ZXN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclN0YXR1c1JlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIGFjdGlvbj86IE11bHRpRmFjdG9yQWN0aW9uO1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgdHdvRmFjdG9yVHJ1c3RJZD86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU3RhdHVzUmVzcG9uc2Uge1xuICB0cnVzdHM/OiBBcnJheTxUd29GYWN0b3JUcnVzdD47XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yVHJ1c3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgZXhwaXJhdGlvbj86IG51bWJlcjtcbiAgc3RhcnRJbnN0YW50PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbml2ZXJzYWxBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICB1bml2ZXJzYWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBvbGljeSBmb3IgaGFuZGxpbmcgdW5rbm93biBPQXV0aCBzY29wZXMgaW4gdGhlIHJlcXVlc3RcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBVbmtub3duU2NvcGVQb2xpY3kge1xuICBBbGxvdyA9IFwiQWxsb3dcIixcbiAgUmVtb3ZlID0gXCJSZW1vdmVcIixcbiAgUmVqZWN0ID0gXCJSZWplY3RcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gVW52ZXJpZmllZEJlaGF2aW9yIHtcbiAgQWxsb3cgPSBcIkFsbG93XCIsXG4gIEdhdGVkID0gXCJHYXRlZFwiXG59XG5cbi8qKlxuICogQ29uZmlnIGZvciBVc2FnZSBEYXRhIC8gU3RhdHNcbiAqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNhZ2VEYXRhQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBudW1iZXJPZkRheXNUb1JldGFpbj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgcHVibGljLCBnbG9iYWwgdmlldyBvZiBhIFVzZXIuIFRoaXMgb2JqZWN0IGNvbnRhaW5zIGFsbCBnbG9iYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXIgaW5jbHVkaW5nIGJpcnRoZGF0ZSwgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uXG4gKiBwcmVmZXJyZWQgbGFuZ3VhZ2VzLCBnbG9iYWwgYXR0cmlidXRlcywgZXRjLlxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyIGV4dGVuZHMgU2VjdXJlSWRlbnRpdHkge1xuICBhY3RpdmU/OiBib29sZWFuO1xuICBiaXJ0aERhdGU/OiBzdHJpbmc7XG4gIGNsZWFuU3BlYWtJZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbWFpbD86IHN0cmluZztcbiAgZXhwaXJ5PzogbnVtYmVyO1xuICBmaXJzdE5hbWU/OiBzdHJpbmc7XG4gIGZ1bGxOYW1lPzogc3RyaW5nO1xuICBpbWFnZVVybD86IHN0cmluZztcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdE5hbWU/OiBzdHJpbmc7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBtZW1iZXJzaGlwcz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbiAgbWlkZGxlTmFtZT86IHN0cmluZztcbiAgbW9iaWxlUGhvbmU/OiBzdHJpbmc7XG4gIHBhcmVudEVtYWlsPzogc3RyaW5nO1xuICBwaG9uZU51bWJlcj86IHN0cmluZztcbiAgcHJlZmVycmVkTGFuZ3VhZ2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVnaXN0cmF0aW9ucz86IEFycmF5PFVzZXJSZWdpc3RyYXRpb24+O1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHRpbWV6b25lPzogc3RyaW5nO1xuICB0d29GYWN0b3I/OiBVc2VyVHdvRmFjdG9yQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBBbiBhY3Rpb24gdGhhdCBjYW4gYmUgZXhlY3V0ZWQgb24gYSB1c2VyIChkaXNjaXBsaW5lIG9yIHJld2FyZCBwb3RlbnRpYWxseSkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvbiB7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGNhbmNlbEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGVuZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGlkPzogVVVJRDtcbiAgaW5jbHVkZUVtYWlsSW5FdmVudEpTT04/OiBib29sZWFuO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9jYWxpemVkTmFtZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBtb2RpZnlFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBuYW1lPzogc3RyaW5nO1xuICBvcHRpb25zPzogQXJyYXk8VXNlckFjdGlvbk9wdGlvbj47XG4gIHByZXZlbnRMb2dpbj86IGJvb2xlYW47XG4gIHNlbmRFbmRFdmVudD86IGJvb2xlYW47XG4gIHN0YXJ0RW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdGVtcG9yYWw/OiBib29sZWFuO1xuICB0cmFuc2FjdGlvblR5cGU/OiBUcmFuc2FjdGlvblR5cGU7XG4gIHVzZXJFbWFpbGluZ0VuYWJsZWQ/OiBib29sZWFuO1xuICB1c2VyTm90aWZpY2F0aW9uc0VuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgdXNlciBhY3Rpb24gRXZlbnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvbkV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYWN0aW9uPzogc3RyaW5nO1xuICBhY3Rpb25lZVVzZXJJZD86IFVVSUQ7XG4gIGFjdGlvbmVyVXNlcklkPzogVVVJRDtcbiAgYWN0aW9uSWQ/OiBVVUlEO1xuICBhcHBsaWNhdGlvbklkcz86IEFycmF5PFVVSUQ+O1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBlbWFpbD86IEVtYWlsO1xuICBlbWFpbGVkVXNlcj86IGJvb2xlYW47XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgbG9jYWxpemVkQWN0aW9uPzogc3RyaW5nO1xuICBsb2NhbGl6ZWREdXJhdGlvbj86IHN0cmluZztcbiAgbG9jYWxpemVkT3B0aW9uPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRSZWFzb24/OiBzdHJpbmc7XG4gIG5vdGlmeVVzZXI/OiBib29sZWFuO1xuICBvcHRpb24/OiBzdHJpbmc7XG4gIHBoYXNlPzogVXNlckFjdGlvblBoYXNlO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIHJlYXNvbkNvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBsb2cgZm9yIGFuIGFjdGlvbiB0aGF0IHdhcyB0YWtlbiBvbiBhIFVzZXIuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvbkxvZyB7XG4gIGFjdGlvbmVlVXNlcklkPzogVVVJRDtcbiAgYWN0aW9uZXJVc2VySWQ/OiBVVUlEO1xuICBhcHBsaWNhdGlvbklkcz86IEFycmF5PFVVSUQ+O1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBlbWFpbFVzZXJPbkVuZD86IGJvb2xlYW47XG4gIGVuZEV2ZW50U2VudD86IGJvb2xlYW47XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgaGlzdG9yeT86IExvZ0hpc3Rvcnk7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbG9jYWxpemVkTmFtZT86IHN0cmluZztcbiAgbG9jYWxpemVkT3B0aW9uPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRSZWFzb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG5vdGlmeVVzZXJPbkVuZD86IGJvb2xlYW47XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcmVhc29uPzogc3RyaW5nO1xuICByZWFzb25Db2RlPzogc3RyaW5nO1xuICB1c2VyQWN0aW9uSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyBjb250ZW50IHVzZXIgYWN0aW9uIG9wdGlvbnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvbk9wdGlvbiB7XG4gIGxvY2FsaXplZE5hbWVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGhhc2VzIG9mIGEgdGltZS1iYXNlZCB1c2VyIGFjdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gVXNlckFjdGlvblBoYXNlIHtcbiAgc3RhcnQgPSBcInN0YXJ0XCIsXG4gIG1vZGlmeSA9IFwibW9kaWZ5XCIsXG4gIGNhbmNlbCA9IFwiY2FuY2VsXCIsXG4gIGVuZCA9IFwiZW5kXCJcbn1cblxuLyoqXG4gKiBNb2RlbHMgYWN0aW9uIHJlYXNvbnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvblJlYXNvbiB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvY2FsaXplZFRleHRzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgdGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBVc2VyIEFjdGlvbiBSZWFzb24gQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25SZWFzb25SZXF1ZXN0IHtcbiAgdXNlckFjdGlvblJlYXNvbj86IFVzZXJBY3Rpb25SZWFzb247XG59XG5cbi8qKlxuICogVXNlciBBY3Rpb24gUmVhc29uIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvblJlYXNvblJlc3BvbnNlIHtcbiAgdXNlckFjdGlvblJlYXNvbj86IFVzZXJBY3Rpb25SZWFzb247XG4gIHVzZXJBY3Rpb25SZWFzb25zPzogQXJyYXk8VXNlckFjdGlvblJlYXNvbj47XG59XG5cbi8qKlxuICogVXNlciBBY3Rpb24gQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25SZXF1ZXN0IHtcbiAgdXNlckFjdGlvbj86IFVzZXJBY3Rpb247XG59XG5cbi8qKlxuICogVXNlciBBY3Rpb24gQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVzcG9uc2Uge1xuICB1c2VyQWN0aW9uPzogVXNlckFjdGlvbjtcbiAgdXNlckFjdGlvbnM/OiBBcnJheTxVc2VyQWN0aW9uPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQnVsayBDcmVhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckJ1bGtDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXJzPzogQXJyYXk8VXNlcj47XG59XG5cbi8qKlxuICogQSBsb2cgZm9yIGFuIGV2ZW50IHRoYXQgaGFwcGVuZWQgdG8gYSBVc2VyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb21tZW50IHtcbiAgY29tbWVudD86IHN0cmluZztcbiAgY29tbWVudGVySWQ/OiBVVUlEO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb21tZW50UmVxdWVzdCB7XG4gIHVzZXJDb21tZW50PzogVXNlckNvbW1lbnQ7XG59XG5cbi8qKlxuICogVXNlciBDb21tZW50IFJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb21tZW50UmVzcG9uc2Uge1xuICB1c2VyQ29tbWVudD86IFVzZXJDb21tZW50O1xuICB1c2VyQ29tbWVudHM/OiBBcnJheTxVc2VyQ29tbWVudD47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciB1c2VyIGNvbW1lbnRzLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbW1lbnRTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGNvbW1lbnRlcklkPzogVVVJRDtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciB1c2VyIGNvbW1lbnRzXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ29tbWVudFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBVc2VyQ29tbWVudFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFVzZXIgY29tbWVudCBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb21tZW50U2VhcmNoUmVzcG9uc2Uge1xuICB0b3RhbD86IG51bWJlcjtcbiAgdXNlckNvbW1lbnRzPzogQXJyYXk8VXNlckNvbW1lbnQ+O1xufVxuXG4vKipcbiAqIE1vZGVscyBhIFVzZXIgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbnNlbnQge1xuICBjb25zZW50PzogQ29uc2VudDtcbiAgY29uc2VudElkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGdpdmVyVXNlcklkPzogVVVJRDtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgc3RhdHVzPzogQ29uc2VudFN0YXR1cztcbiAgdXNlcklkPzogVVVJRDtcbiAgdmFsdWVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIFVzZXIgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbnNlbnRSZXF1ZXN0IHtcbiAgdXNlckNvbnNlbnQ/OiBVc2VyQ29uc2VudDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIFVzZXIgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbnNlbnRSZXNwb25zZSB7XG4gIHVzZXJDb25zZW50PzogVXNlckNvbnNlbnQ7XG4gIHVzZXJDb25zZW50cz86IEFycmF5PFVzZXJDb25zZW50Pjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQ3JlYXRlZCBFdmVudC5cbiAqIDxwPlxuICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgdXNlci5jcmVhdGUgZXZlbnQgaW4gdGhhdCBpdCB3aWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIHVzZXIgaGFzIGJlZW4gY3JlYXRlZC4gVGhpcyBldmVudCBjYW5ub3QgYmUgbWFkZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQ3JlYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBDcmVhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNyZWF0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3Qgb2JqZWN0IGZvciBleGNoYW5naW5nIHVzZXIgY3JlZGVudGlhbHMgKHVzZXJuYW1lIGFuZCBwYXNzd29yZCkgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNyZWRlbnRpYWxzQWNjZXNzVG9rZW5SZXF1ZXN0IHtcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBncmFudF90eXBlPzogc3RyaW5nO1xuICBwYXNzd29yZD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHRlbmFudElkPzogc3RyaW5nO1xuICB1c2VyX2NvZGU/OiBzdHJpbmc7XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBEZWFjdGl2YXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWFjdGl2YXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pIHRoYXQgaXMgdXNlZCBmb3IgYWxsIHVzZXIgbW9kaWZpY2F0aW9ucyAoY3JlYXRlLCB1cGRhdGUsXG4gKiBkZWxldGUpLlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIuZGVsZXRlIGJlY2F1c2UgaXQgaXMgc2VudCBhZnRlciB0aGUgdHggaXMgY29tbWl0dGVkLCB0aGlzIGNhbm5vdCBiZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBFdmVudCAoYW5kIGNhbiBiZSBjb252ZXJ0ZWQgdG8gSlNPTikgdGhhdCBpcyB1c2VkIGZvciBhbGwgdXNlciBtb2RpZmljYXRpb25zIChjcmVhdGUsIHVwZGF0ZSxcbiAqIGRlbGV0ZSkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRlbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogVXNlciBBUEkgZGVsZXRlIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBkcnlSdW4/OiBib29sZWFuO1xuICBoYXJkRGVsZXRlPzogYm9vbGVhbjtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIHF1ZXJ5Pzogc3RyaW5nO1xuICBxdWVyeVN0cmluZz86IHN0cmluZztcbiAgdXNlcklkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIFVzZXIgQVBJIGJ1bGsgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRlbGV0ZVJlc3BvbnNlIHtcbiAgZHJ5UnVuPzogYm9vbGVhbjtcbiAgaGFyZERlbGV0ZT86IGJvb2xlYW47XG4gIHRvdGFsPzogbnVtYmVyO1xuICB1c2VySWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogVXNlciBBUEkgZGVsZXRlIHJlcXVlc3Qgb2JqZWN0IGZvciBhIHNpbmdsZSB1c2VyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWxldGVTaW5nbGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGhhcmREZWxldGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBldmVudCB3aGVyZSBhIHVzZXIncyBlbWFpbCBpcyB1cGRhdGVkIG91dHNpZGUgb2YgYSBmb3Jnb3QgLyBjaGFuZ2UgcGFzc3dvcmQgd29ya2Zsb3cuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJFbWFpbFVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIHByZXZpb3VzRW1haWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIEVtYWlsIFZlcmlmeSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJFbWFpbFZlcmlmaWVkRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlcklkZW50aXR5IHtcbiAgZGlzcGxheVZhbHVlPzogc3RyaW5nO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0TG9naW5JbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbW9kZXJhdGlvblN0YXR1cz86IENvbnRlbnRTdGF0dXM7XG4gIHByaW1hcnk/OiBib29sZWFuO1xuICB0eXBlPzogSWRlbnRpdHlUeXBlO1xuICB2YWx1ZT86IHN0cmluZztcbiAgdmVyaWZpZWQ/OiBib29sZWFuO1xuICB2ZXJpZmllZEluc3RhbnQ/OiBudW1iZXI7XG4gIHZlcmlmaWVkUmVhc29uPzogSWRlbnRpdHlWZXJpZmllZFJlYXNvbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgSWRlbnRpdHkgUHJvdmlkZXIgTGluayBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIFJvYiBEYXZpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJJZGVudGl0eVByb3ZpZGVyTGlua0V2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rPzogSWRlbnRpdHlQcm92aWRlckxpbms7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIElkZW50aXR5IFByb3ZpZGVyIFVubGluayBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIFJvYiBEYXZpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJJZGVudGl0eVByb3ZpZGVyVW5saW5rRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgaWRlbnRpdHlQcm92aWRlckxpbms/OiBJZGVudGl0eVByb3ZpZGVyTGluaztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIHVzZXIgaWRlbnRpdHkgdXBkYXRlIGV2ZW50XG4gKlxuICogQGF1dGhvciBCcmVudCBIYWxzZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VySWRlbnRpdHlVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBsb2dpbklkVHlwZT86IHN0cmluZztcbiAgbmV3TG9naW5JZD86IHN0cmluZztcbiAgcHJldmlvdXNMb2dpbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgdXNlciBpZGVudGl0eSB2ZXJpZmllZCBldmVudFxuICpcbiAqIEBhdXRob3IgQnJhZHkgV2llZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJJZGVudGl0eVZlcmlmaWVkRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgbG9naW5JZD86IHN0cmluZztcbiAgbG9naW5JZFR5cGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIExvZ2luIEZhaWxlZCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luRmFpbGVkRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGF1dGhlbnRpY2F0aW9uVHlwZT86IHN0cmluZztcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICByZWFzb24/OiBVc2VyTG9naW5GYWlsZWRSZWFzb247XG59XG5cbi8qKlxuICogVGhlIHJlYXNvbiBmb3IgdGhlIGxvZ2luIGZhaWx1cmUuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpbkZhaWxlZFJlYXNvbiB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGxhbWJkYUlkPzogVVVJRDtcbiAgbGFtYmRhUmVzdWx0PzogRXJyb3JzO1xufVxuXG4vKipcbiAqIFVzZXIgbG9naW4gZmFpbGVkIHJlYXNvbiBjb2Rlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5GYWlsZWRSZWFzb25Db2RlIHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZXZlbnQgd2hlcmUgYSB1c2VyIGlzIGJlaW5nIGNyZWF0ZWQgd2l0aCBhbiBcImluLXVzZVwiIGxvZ2luIElkIChlbWFpbCwgdXNlcm5hbWUsIG9yIG90aGVyIGlkZW50aXRpZXMpLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5JZER1cGxpY2F0ZU9uQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgZHVwbGljYXRlRW1haWw/OiBzdHJpbmc7XG4gIGR1cGxpY2F0ZUlkZW50aXRpZXM/OiBBcnJheTxJZGVudGl0eUluZm8+O1xuICBkdXBsaWNhdGVQaG9uZU51bWJlcj86IHN0cmluZztcbiAgZHVwbGljYXRlVXNlcm5hbWU/OiBzdHJpbmc7XG4gIGV4aXN0aW5nPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZXZlbnQgd2hlcmUgYSB1c2VyIGlzIGJlaW5nIHVwZGF0ZWQgYW5kIHRyaWVzIHRvIHVzZSBhbiBcImluLXVzZVwiIGxvZ2luIElkIChlbWFpbCBvciB1c2VybmFtZSkuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpbklkRHVwbGljYXRlT25VcGRhdGVFdmVudCBleHRlbmRzIFVzZXJMb2dpbklkRHVwbGljYXRlT25DcmVhdGVFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIExvZ2luIGV2ZW50IGZvciBhIG5ldyBkZXZpY2UgKHVuLXJlY29nbml6ZWQpXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpbk5ld0RldmljZUV2ZW50IGV4dGVuZHMgVXNlckxvZ2luU3VjY2Vzc0V2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgTG9naW4gU3VjY2VzcyBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luU3VjY2Vzc0V2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBhdXRoZW50aWNhdGlvblR5cGU/OiBzdHJpbmc7XG4gIGNvbm5lY3RvcklkPzogVVVJRDtcbiAgaWRlbnRpdHlQcm92aWRlcklkPzogVVVJRDtcbiAgaWRlbnRpdHlQcm92aWRlck5hbWU/OiBzdHJpbmc7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgTG9naW4gZXZlbnQgdGhhdCBpcyBzdXNwaWNpb3VzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5TdXNwaWNpb3VzRXZlbnQgZXh0ZW5kcyBVc2VyTG9naW5TdWNjZXNzRXZlbnQge1xuICB0aHJlYXRzRGV0ZWN0ZWQ/OiBBcnJheTxBdXRoZW50aWNhdGlvblRocmVhdHM+O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBCcmVhY2ggRXZlbnQuXG4gKlxuICogQGF1dGhvciBNYXR0aGV3IEFsdG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZEJyZWFjaEV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIFJlc2V0IFNlbmQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFJlc2V0U2VuZEV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIFJlc2V0IFN0YXJ0IEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUGFzc3dvcmRSZXNldFN0YXJ0RXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUGFzc3dvcmQgUmVzZXQgU3VjY2VzcyBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhc3N3b3JkUmVzZXRTdWNjZXNzRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUGFzc3dvcmQgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUGFzc3dvcmRVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBSZWFjdGl2YXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWFjdGl2YXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBVc2VyIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgYSBzaW5nbGUgYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbiB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBhdXRoZW50aWNhdGlvblRva2VuPzogc3RyaW5nO1xuICBjbGVhblNwZWFrSWQ/OiBVVUlEO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0TG9naW5JbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgcHJlZmVycmVkTGFuZ3VhZ2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgcm9sZXM/OiBBcnJheTxzdHJpbmc+O1xuICB0aW1lem9uZT86IHN0cmluZztcbiAgdG9rZW5zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHVzZXJuYW1lU3RhdHVzPzogQ29udGVudFN0YXR1cztcbiAgdmVyaWZpZWQ/OiBib29sZWFuO1xuICB2ZXJpZmllZEluc3RhbnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZWQgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSB1c2VyLnJlZ2lzdHJhdGlvbi5jcmVhdGUgZXZlbnQgaW4gdGhhdCBpdCB3aWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIHVzZXIgaGFzIGJlZW4gY3JlYXRlZC4gVGhpcyBldmVudCBjYW5ub3QgYmUgbWFkZVxuICogdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbkNyZWF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZSBSZWdpc3RyYXRpb24gRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25DcmVhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRGVsZXRlZCBSZWdpc3RyYXRpb24gRXZlbnQuXG4gKiA8cD5cbiAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdXNlci5yZWdpc3RyYXRpb24uZGVsZXRlIGluIHRoYXQgaXQgaXMgc2VudCBhZnRlciB0aGUgVFggaGFzIGJlZW4gY29tbWl0dGVkLiBUaGlzIGV2ZW50IGNhbm5vdCBiZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRGVsZXRlIFJlZ2lzdHJhdGlvbiBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbkRlbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBVcGRhdGUgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIucmVnaXN0cmF0aW9uLnVwZGF0ZSBpbiB0aGF0IGl0IGlzIHNlbnQgYWZ0ZXIgdGhpcyBldmVudCBjb21wbGV0ZXMsIHRoaXMgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25VcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBvcmlnaW5hbD86IFVzZXJSZWdpc3RyYXRpb247XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFVwZGF0ZSBSZWdpc3RyYXRpb24gRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25VcGRhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgb3JpZ2luYWw/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBSZWdpc3RyYXRpb24gVmVyaWZpZWQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uVmVyaWZpZWRFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbn1cblxuLyoqXG4gKiBVc2VyIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY3VycmVudFBhc3N3b3JkPzogc3RyaW5nO1xuICBkaXNhYmxlRG9tYWluQmxvY2s/OiBib29sZWFuO1xuICBzZW5kU2V0UGFzc3dvcmRFbWFpbD86IGJvb2xlYW47XG4gIHNlbmRTZXRQYXNzd29yZElkZW50aXR5VHlwZT86IFNlbmRTZXRQYXNzd29yZElkZW50aXR5VHlwZTtcbiAgc2tpcFZlcmlmaWNhdGlvbj86IGJvb2xlYW47XG4gIHVzZXI/OiBVc2VyO1xuICB2ZXJpZmljYXRpb25JZHM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFVzZXIgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVzcG9uc2Uge1xuICBlbWFpbFZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICBlbWFpbFZlcmlmaWNhdGlvbk9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZHM/OiBSZWNvcmQ8VVVJRCwgc3RyaW5nPjtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uT25lVGltZUNvZGVzPzogUmVjb3JkPFVVSUQsIHN0cmluZz47XG4gIHRva2VuPzogc3RyaW5nO1xuICB0b2tlbkV4cGlyYXRpb25JbnN0YW50PzogbnVtYmVyO1xuICB1c2VyPzogVXNlcjtcbiAgdmVyaWZpY2F0aW9uSWRzPzogQXJyYXk8VmVyaWZpY2F0aW9uSWQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmaWNhdGlvbklkIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB0eXBlPzogSWRlbnRpdHlUeXBlO1xuICB2YWx1ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRoZSB1c2VyIHF1ZXJ5LiBJdCBwcm92aWRlcyBhIGJ1aWxkIHBhdHRlcm4gYXMgd2VsbCBhcyBwdWJsaWMgZmllbGRzIGZvciB1c2Ugb24gZm9ybXMgYW5kIGluIGFjdGlvbnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZUVsYXN0aWNTZWFyY2hDcml0ZXJpYSB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBVc2VyU3RhdGUge1xuICBBdXRoZW50aWNhdGVkID0gXCJBdXRoZW50aWNhdGVkXCIsXG4gIEF1dGhlbnRpY2F0ZWROb3RSZWdpc3RlcmVkID0gXCJBdXRoZW50aWNhdGVkTm90UmVnaXN0ZXJlZFwiLFxuICBBdXRoZW50aWNhdGVkTm90VmVyaWZpZWQgPSBcIkF1dGhlbnRpY2F0ZWROb3RWZXJpZmllZFwiLFxuICBBdXRoZW50aWNhdGVkUmVnaXN0cmF0aW9uTm90VmVyaWZpZWQgPSBcIkF1dGhlbnRpY2F0ZWRSZWdpc3RyYXRpb25Ob3RWZXJpZmllZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUd29GYWN0b3JDb25maWd1cmF0aW9uIHtcbiAgbWV0aG9kcz86IEFycmF5PFR3b0ZhY3Rvck1ldGhvZD47XG4gIHJlY292ZXJ5Q29kZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIE1vZGVsIGEgdXNlciBldmVudCB3aGVuIGEgdHdvLWZhY3RvciBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclR3b0ZhY3Rvck1ldGhvZEFkZEV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIG1ldGhvZD86IFR3b0ZhY3Rvck1ldGhvZDtcbn1cblxuLyoqXG4gKiBNb2RlbCBhIHVzZXIgZXZlbnQgd2hlbiBhIHR3by1mYWN0b3IgbWV0aG9kIGhhcyBiZWVuIGFkZGVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVHdvRmFjdG9yTWV0aG9kUmVtb3ZlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgbWV0aG9kPzogVHdvRmFjdG9yTWV0aG9kO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBVcGRhdGUgRXZlbnQgb25jZSBpdCBpcyBjb21wbGV0ZWQuIFRoaXMgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJVcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIG9yaWdpbmFsPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBvcmlnaW5hbD86IFVzZXI7XG59XG5cbi8qKlxuICogVXNlZCB0byBleHByZXNzIHdoZXRoZXIgdGhlIFJlbHlpbmcgUGFydHkgcmVxdWlyZXMgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi0yLyN1c2VyLXZlcmlmaWNhdGlvblwiPnVzZXIgdmVyaWZpY2F0aW9uPC9hPiBmb3IgdGhlXG4gKiBjdXJyZW50IG9wZXJhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQge1xuICByZXF1aXJlZCA9IFwicmVxdWlyZWRcIixcbiAgcHJlZmVycmVkID0gXCJwcmVmZXJyZWRcIixcbiAgZGlzY291cmFnZWQgPSBcImRpc2NvdXJhZ2VkXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlcmluZm9SZXNwb25zZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4ge1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IG9iamVjdCBmb3IgdmFsaWRhdGluZyBhbiBlbmQtdXNlciBwcm92aWRlZCB1c2VyX2NvZGUgZnJvbSB0aGUgdXNlci1pbnRlcmFjdGlvbiBvZiB0aGUgRGV2aWNlIEF1dGhvcml6YXRpb24gR3JhbnRcbiAqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGVEZXZpY2VSZXF1ZXN0IHtcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHVzZXJfY29kZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGVSZXNwb25zZSB7XG4gIGp3dD86IEpXVDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFZlcmlmaWNhdGlvblN0cmF0ZWd5IHtcbiAgQ2xpY2thYmxlTGluayA9IFwiQ2xpY2thYmxlTGlua1wiLFxuICBGb3JtRmllbGQgPSBcIkZvcm1GaWVsZFwiXG59XG5cbi8qKlxuICogVmVyaWZ5IENvbXBsZXRlIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlDb21wbGV0ZVJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFZlcmlmeSBDb21wbGV0ZSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUNvbXBsZXRlUmVzcG9uc2Uge1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUVtYWlsUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbiAgdmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUVtYWlsUmVzcG9uc2Uge1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVJlZ2lzdHJhdGlvblJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZSB7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJZGVudGl0eSB2ZXJpZnkgcmVxdWVzdC4gVXNlZCB0byBhZG1pbmlzdHJhdGl2ZWx5IHZlcmlmeSBhbiBpZGVudGl0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIGxvZ2luSWRUeXBlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFZlcmlmeSBTZW5kIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlTZW5kUmVxdWVzdCB7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJhZHkgV2llZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVN0YXJ0UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBleGlzdGluZ1VzZXJTdHJhdGVneT86IEV4aXN0aW5nVXNlclN0cmF0ZWd5O1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBsb2dpbklkVHlwZT86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB2ZXJpZmljYXRpb25TdHJhdGVneT86IFZlcmlmaWNhdGlvblN0cmF0ZWd5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJhZHkgV2llZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVN0YXJ0UmVzcG9uc2Uge1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25SZXNwb25zZSB7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBjb21wbGV0aW5nIFdlYkF1dGhuIGFzc2VydGlvblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5Bc3NlcnRSZXNwb25zZSB7XG4gIGNyZWRlbnRpYWw/OiBXZWJBdXRobkNyZWRlbnRpYWw7XG59XG5cbi8qKlxuICogVGhlIDxpPmF1dGhlbnRpY2F0b3InczwvaT4gcmVzcG9uc2UgZm9yIHRoZSBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueSBpbiBpdHMgZW5jb2RlZCBmb3JtYXRcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQXV0aGVudGljYXRvckF1dGhlbnRpY2F0aW9uUmVzcG9uc2Uge1xuICBhdXRoZW50aWNhdG9yRGF0YT86IHN0cmluZztcbiAgY2xpZW50RGF0YUpTT04/OiBzdHJpbmc7XG4gIHNpZ25hdHVyZT86IHN0cmluZztcbiAgdXNlckhhbmRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgPGk+YXV0aGVudGljYXRvcidzPC9pPiByZXNwb25zZSBmb3IgdGhlIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueSBpbiBpdHMgZW5jb2RlZCBmb3JtYXRcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQXV0aGVudGljYXRvclJlZ2lzdHJhdGlvblJlc3BvbnNlIHtcbiAgYXR0ZXN0YXRpb25PYmplY3Q/OiBzdHJpbmc7XG4gIGNsaWVudERhdGFKU09OPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgVXNlcidzIFdlYkF1dGhuQ3JlZGVudGlhbC4gQ29udGFpbnMgYWxsIGRhdGEgcmVxdWlyZWQgdG8gY29tcGxldGUgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbmllcy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQ3JlZGVudGlhbCB7XG4gIGFsZ29yaXRobT86IENvc2VBbGdvcml0aG1JZGVudGlmaWVyO1xuICBhdHRlc3RhdGlvblR5cGU/OiBBdHRlc3RhdGlvblR5cGU7XG4gIGF1dGhlbnRpY2F0b3JTdXBwb3J0c1VzZXJWZXJpZmljYXRpb24/OiBib29sZWFuO1xuICBjcmVkZW50aWFsSWQ/OiBzdHJpbmc7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkaXNjb3ZlcmFibGU/OiBib29sZWFuO1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXNlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgcHVibGljS2V5Pzogc3RyaW5nO1xuICByZWx5aW5nUGFydHlJZD86IHN0cmluZztcbiAgc2lnbkNvdW50PzogbnVtYmVyO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHRyYW5zcG9ydHM/OiBBcnJheTxzdHJpbmc+O1xuICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgdG8gaW1wb3J0IGFuIGV4aXN0aW5nIFdlYkF1dGhuIGNyZWRlbnRpYWwocylcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQ3JlZGVudGlhbEltcG9ydFJlcXVlc3Qge1xuICBjcmVkZW50aWFscz86IEFycmF5PFdlYkF1dGhuQ3JlZGVudGlhbD47XG4gIHZhbGlkYXRlRGJDb25zdHJhaW50cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogV2ViQXV0aG4gQ3JlZGVudGlhbCBBUEkgcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlIHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuQ3JlZGVudGlhbDtcbiAgY3JlZGVudGlhbHM/OiBBcnJheTxXZWJBdXRobkNyZWRlbnRpYWw+O1xufVxuXG4vKipcbiAqIENvbnRhaW5zIGV4dGVuc2lvbiBvdXRwdXQgZm9yIHJlcXVlc3RlZCBleHRlbnNpb25zIGR1cmluZyBhIFdlYkF1dGhuIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIHtcbiAgY3JlZFByb3BzPzogQ3JlZGVudGlhbFByb3BlcnRpZXNPdXRwdXQ7XG59XG5cbi8qKlxuICogUmVxdWVzdCB0byBjb21wbGV0ZSB0aGUgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkxvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBjcmVkZW50aWFsPzogV2ViQXV0aG5QdWJsaWNLZXlBdXRoZW50aWNhdGlvblJlcXVlc3Q7XG4gIG9yaWdpbj86IHN0cmluZztcbiAgcnBJZD86IHN0cmluZztcbiAgdHdvRmFjdG9yVHJ1c3RJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHRvIGF1dGhlbnRpY2F0ZSB3aXRoIFdlYkF1dGhuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblB1YmxpY0tleUF1dGhlbnRpY2F0aW9uUmVxdWVzdCB7XG4gIGNsaWVudEV4dGVuc2lvblJlc3VsdHM/OiBXZWJBdXRobkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzO1xuICBpZD86IHN0cmluZztcbiAgcmVzcG9uc2U/OiBXZWJBdXRobkF1dGhlbnRpY2F0b3JBdXRoZW50aWNhdGlvblJlc3BvbnNlO1xuICBycElkPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgdG8gcmVnaXN0ZXIgYSBuZXcgcHVibGljIGtleSB3aXRoIFdlYkF1dGhuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblB1YmxpY0tleVJlZ2lzdHJhdGlvblJlcXVlc3Qge1xuICBjbGllbnRFeHRlbnNpb25SZXN1bHRzPzogV2ViQXV0aG5FeHRlbnNpb25zQ2xpZW50T3V0cHV0cztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJlc3BvbnNlPzogV2ViQXV0aG5BdXRoZW50aWNhdG9yUmVnaXN0cmF0aW9uUmVzcG9uc2U7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHRyYW5zcG9ydHM/OiBBcnJheTxzdHJpbmc+O1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgdG8gY29tcGxldGUgdGhlIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueSBmb3IgYSBuZXcgY3JlZGVudGlhbCwuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXF1ZXN0IHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuUHVibGljS2V5UmVnaXN0cmF0aW9uUmVxdWVzdDtcbiAgb3JpZ2luPzogc3RyaW5nO1xuICBycElkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgY29tcGxldGluZyBXZWJBdXRobiBjcmVkZW50aWFsIHJlZ2lzdHJhdGlvbiBvciBhc3NlcnRpb25cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlc3BvbnNlIHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuQ3JlZGVudGlhbDtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCB0byBzdGFydCBhIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVxdWVzdCB7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHdvcmtmbG93PzogV2ViQXV0aG5Xb3JrZmxvdztcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHN0YXJ0aW5nIGEgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdGVyU3RhcnRSZXNwb25zZSB7XG4gIG9wdGlvbnM/OiBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gcmVxdWVzdCBleHRlbnNpb25zIGR1cmluZyBjcmVkZW50aWFsIHJlZ2lzdHJhdGlvblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5SZWdpc3RyYXRpb25FeHRlbnNpb25PcHRpb25zIHtcbiAgY3JlZFByb3BzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCB0byBzdGFydCBhIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblN0YXJ0UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjcmVkZW50aWFsSWQ/OiBVVUlEO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBsb2dpbklkVHlwZXM/OiBBcnJheTxzdHJpbmc+O1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHdvcmtmbG93PzogV2ViQXV0aG5Xb3JrZmxvdztcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHN0YXJ0aW5nIGEgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuU3RhcnRSZXNwb25zZSB7XG4gIG9wdGlvbnM/OiBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM7XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyB0aGUgV2ViQXV0aG4gd29ya2Zsb3cuIFRoaXMgd2lsbCBhZmZlY3QgdGhlIHBhcmFtZXRlcnMgdXNlZCBmb3IgY3JlZGVudGlhbCBjcmVhdGlvblxuICogYW5kIHJlcXVlc3QgYmFzZWQgb24gdGhlIFRlbmFudCBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIFdlYkF1dGhuV29ya2Zsb3cge1xuICBib290c3RyYXAgPSBcImJvb3RzdHJhcFwiLFxuICBnZW5lcmFsID0gXCJnZW5lcmFsXCIsXG4gIHJlYXV0aGVudGljYXRpb24gPSBcInJlYXV0aGVudGljYXRpb25cIlxufVxuXG4vKipcbiAqIEEgc2VydmVyIHdoZXJlIGV2ZW50cyBhcmUgc2VudC4gVGhpcyBpbmNsdWRlcyB1c2VyIGFjdGlvbiBldmVudHMgYW5kIGFueSBvdGhlciBldmVudHMgc2VudCBieSBGdXNpb25BdXRoLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2sge1xuICBjb25uZWN0VGltZW91dD86IG51bWJlcjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudHNFbmFibGVkPzogUmVjb3JkPEV2ZW50VHlwZSwgYm9vbGVhbj47XG4gIGdsb2JhbD86IGJvb2xlYW47XG4gIGhlYWRlcnM/OiBIVFRQSGVhZGVycztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGh0dHBBdXRoZW50aWNhdGlvblVzZXJuYW1lPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgc2lnbmF0dXJlQ29uZmlndXJhdGlvbj86IFdlYmhvb2tTaWduYXR1cmVDb25maWd1cmF0aW9uO1xuICBzc2xDZXJ0aWZpY2F0ZT86IHN0cmluZztcbiAgc3NsQ2VydGlmaWNhdGVLZXlJZD86IFVVSUQ7XG4gIHRlbmFudElkcz86IEFycmF5PFVVSUQ+O1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSB3ZWJob29rIGNhbGwgYXR0ZW1wdCBsb2cuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rQXR0ZW1wdExvZyB7XG4gIGF0dGVtcHRSZXN1bHQ/OiBXZWJob29rQXR0ZW1wdFJlc3VsdDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVuZEluc3RhbnQ/OiBudW1iZXI7XG4gIGlkPzogVVVJRDtcbiAgc3RhcnRJbnN0YW50PzogbnVtYmVyO1xuICB3ZWJob29rQ2FsbFJlc3BvbnNlPzogV2ViaG9va0NhbGxSZXNwb25zZTtcbiAgd2ViaG9va0V2ZW50TG9nSWQ/OiBVVUlEO1xuICB3ZWJob29rSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFdlYmhvb2sgYXR0ZW1wdCBsb2cgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rQXR0ZW1wdExvZ1Jlc3BvbnNlIHtcbiAgd2ViaG9va0F0dGVtcHRMb2c/OiBXZWJob29rQXR0ZW1wdExvZztcbn1cblxuLyoqXG4gKiBUaGUgcG9zc2libGUgc3RhdGVzIG9mIGFuIGluZGl2aWR1YWwgd2ViaG9vayBhdHRlbXB0IHRvIGEgc2luZ2xlIGVuZHBvaW50LlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIFdlYmhvb2tBdHRlbXB0UmVzdWx0IHtcbiAgU3VjY2VzcyA9IFwiU3VjY2Vzc1wiLFxuICBGYWlsdXJlID0gXCJGYWlsdXJlXCIsXG4gIFVua25vd24gPSBcIlVua25vd25cIlxufVxuXG4vKipcbiAqIEEgd2ViaG9vayBjYWxsIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va0NhbGxSZXNwb25zZSB7XG4gIGV4Y2VwdGlvbj86IHN0cmluZztcbiAgc3RhdHVzQ29kZT86IG51bWJlcjtcbiAgdXJsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZyB7XG4gIGF0dGVtcHRzPzogQXJyYXk8V2ViaG9va0F0dGVtcHRMb2c+O1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZXZlbnQ/OiBFdmVudFJlcXVlc3Q7XG4gIGV2ZW50UmVzdWx0PzogV2ViaG9va0V2ZW50UmVzdWx0O1xuICBldmVudFR5cGU/OiBFdmVudFR5cGU7XG4gIGZhaWxlZEF0dGVtcHRzPzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RBdHRlbXB0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxpbmtlZE9iamVjdElkPzogVVVJRDtcbiAgc2VxdWVuY2U/OiBudW1iZXI7XG4gIHN1Y2Nlc3NmdWxBdHRlbXB0cz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZm9yIFdlYmhvb2sgRXZlbnQgTG9nIGRhdGEuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rRXZlbnRMb2dDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGRlbGV0ZT86IERlbGV0ZUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogV2ViaG9vayBldmVudCBsb2cgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rRXZlbnRMb2dSZXNwb25zZSB7XG4gIHdlYmhvb2tFdmVudExvZz86IFdlYmhvb2tFdmVudExvZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIHRoZSB3ZWJob29rIGV2ZW50IGxvZy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZ1NlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgZW5kPzogbnVtYmVyO1xuICBldmVudD86IHN0cmluZztcbiAgZXZlbnRSZXN1bHQ/OiBXZWJob29rRXZlbnRSZXN1bHQ7XG4gIGV2ZW50VHlwZT86IEV2ZW50VHlwZTtcbiAgc3RhcnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogV2ViaG9vayBldmVudCBsb2cgc2VhcmNoIHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rRXZlbnRMb2dTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogV2ViaG9va0V2ZW50TG9nU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogV2ViaG9vayBldmVudCBsb2cgc2VhcmNoIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va0V2ZW50TG9nU2VhcmNoUmVzcG9uc2Uge1xuICB0b3RhbD86IG51bWJlcjtcbiAgd2ViaG9va0V2ZW50TG9ncz86IEFycmF5PFdlYmhvb2tFdmVudExvZz47XG59XG5cbi8qKlxuICogVGhlIHBvc3NpYmxlIHJlc3VsdCBzdGF0ZXMgb2YgYSB3ZWJob29rIGV2ZW50LiBUaGlzIHRyYWNrcyB0aGUgc3VjY2VzcyBvZiB0aGUgb3ZlcmFsbCB3ZWJob29rIHRyYW5zYWN0aW9uIGFjY29yZGluZyB0byB0aGUge0BsaW5rIFRyYW5zYWN0aW9uVHlwZX1cbiAqIGFuZCBjb25maWd1cmVkIHdlYmhvb2tzLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIFdlYmhvb2tFdmVudFJlc3VsdCB7XG4gIEZhaWxlZCA9IFwiRmFpbGVkXCIsXG4gIFJ1bm5pbmcgPSBcIlJ1bm5pbmdcIixcbiAgU3VjY2VlZGVkID0gXCJTdWNjZWVkZWRcIlxufVxuXG4vKipcbiAqIFdlYmhvb2sgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tSZXF1ZXN0IHtcbiAgd2ViaG9vaz86IFdlYmhvb2s7XG59XG5cbi8qKlxuICogV2ViaG9vayBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tSZXNwb25zZSB7XG4gIHdlYmhvb2s/OiBXZWJob29rO1xuICB3ZWJob29rcz86IEFycmF5PFdlYmhvb2s+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3Igd2ViaG9va3MuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIHdlYmhvb2tzXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IFdlYmhvb2tTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBXZWJob29rIHNlYXJjaCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va1NlYXJjaFJlc3BvbnNlIHtcbiAgdG90YWw/OiBudW1iZXI7XG4gIHdlYmhvb2tzPzogQXJyYXk8V2ViaG9vaz47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3Igc2lnbmluZyB3ZWJob29rcy5cbiAqXG4gKiBAYXV0aG9yIEJyZW50IEhhbHNleVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tTaWduYXR1cmVDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHNpZ25pbmdLZXlJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWGJveEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBYYm94IGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBYYm94SWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFhib3hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IENsaWVudFJlc3BvbnNlIGZyb20gXCIuL0NsaWVudFJlc3BvbnNlXCI7XG5pbXBvcnQge1JlcXVlc3RDcmVkZW50aWFscywgUmVzcG9uc2V9IGZyb20gXCJub2RlLWZldGNoXCI7XG5pbXBvcnQge1VSTFNlYXJjaFBhcmFtc30gZnJvbSBcInVybFwiO1xuXG5leHBvcnQgdHlwZSBSZXNwb25zZUhhbmRsZXI8VD4gPSAocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFQ+PjtcbmV4cG9ydCB0eXBlIEVycm9yUmVzcG9uc2VIYW5kbGVyPFQ+ID0gKHJlc3BvbnNlOiBSZXNwb25zZSkgPT4gUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUPj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAvKipcbiAgICogU2V0cyB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIgdXNpbmcgYSBrZXlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgdmFsdWUgb2YgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcmV0dXJucyB7SVJFU1RDbGllbnR9XG4gICAqL1xuICB3aXRoQXV0aG9yaXphdGlvbihrZXk6IHN0cmluZyk6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgc2VnbWVudCB0byB0aGUgcmVxdWVzdCB1cmlcbiAgICovXG4gIHdpdGhVcmlTZWdtZW50KHNlZ21lbnQ6IHN0cmluZyB8IG51bWJlcik6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBib2R5IG9mIHRoZSBjbGllbnQgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIGJvZHkgVGhlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSByZXF1ZXN0IGJvZHkgYXMgZm9ybSBkYXRhLlxuICAgKi9cbiAgd2l0aEZvcm1EYXRhKGJvZHk6IFVSTFNlYXJjaFBhcmFtcyk6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgaGVhZGVyIHRvIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGhlYWRlci5cbiAgICovXG4gIHdpdGhIZWFkZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgYm9keSBvZiB0aGUgY2xpZW50IHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBib2R5IFRoZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgcmVxdWVzdCBib2R5IGFzIEpTT04uXG4gICAqL1xuICB3aXRoSlNPTkJvZHkoYm9keTogb2JqZWN0KTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGh0dHAgbWV0aG9kIGZvciB0aGUgcmVxdWVzdFxuICAgKi9cbiAgd2l0aE1ldGhvZChtZXRob2Q6IHN0cmluZyk6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB1cmkgb2YgdGhlIHJlcXVlc3RcbiAgICovXG4gIHdpdGhVcmkodXJpOiBzdHJpbmcpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogQWRkcyBwYXJhbWV0ZXJzIHRvIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIsIG1heSBiZSBhIHN0cmluZywgb2JqZWN0IG9yIG51bWJlci5cbiAgICovXG4gIHdpdGhQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIFNldHMgcmVxdWVzdCdzIGNyZWRlbnRpYWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgQSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZSByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICAgKi9cbiAgd2l0aENyZWRlbnRpYWxzKHZhbHVlOiBSZXF1ZXN0Q3JlZGVudGlhbHMpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgcmVzcG9uc2UgaGFuZGxlci4gVGhpcyBjb3VsZCBkbyBwcm9jZXNzaW5nIGJlZm9yZSB0aGUgQ2xpZW50UmVzcG9uc2UgaXMgcmV0dXJuZWQgZGVwZW5kaW5nIG9uIHRoZSBBUElzIGV4cGVjdGVkIHJlc3BvbnNlLlxuICAgKlxuICAgKiBAcGFyYW0gaGFuZGxlclxuICAgKi9cbiAgd2l0aFJlc3BvbnNlSGFuZGxlcihoYW5kbGVyOiBSZXNwb25zZUhhbmRsZXI8UlQ+KTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGVycm9yIHJlc3BvbnNlIGhhbmRsZXIuICBFcnJvciByZXNwb25zZSBoYW5kbGVycyBoYXZlIGEgZ2VuZXJpYyBidXQgZHVlIHRvIHR5cGVzY3JpcHQgbGltaXRhdGlvbnMsXG4gICAqIHRoaXMgdmFsdWUgd2lsbCBub3QgYmUgcHJvcGFnYXRlZCB0byB0aGUgUHJvbWlzZSBjYXRjaCBzdGF0ZW1lbnRcbiAgICogXG4gICAqIEBwYXJhbSBoYW5kbGVyXG4gICAqL1xuICB3aXRoRXJyb3JSZXNwb25zZUhhbmRsZXIoaGFuZGxlcjogRXJyb3JSZXNwb25zZUhhbmRsZXI8RVJUPik6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBSdW4gdGhlIHJlcXVlc3QgYW5kIHJldHVybiBhIHByb21pc2UuIFRoaXMgcHJvbWlzZSB3aWxsIHJlc29sdmUgaWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bFxuICAgKiBhbmQgcmVqZWN0IG90aGVyd2lzZS5cbiAgICovXG4gIGdvKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UlQ+Pjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSVJFU1RDbGllbnQ7XG4iXX0=