@fusionauth/typescript-client 1.61.0 → 1.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -451,7 +451,7 @@ exports.default = DefaultRESTClientBuilder;
451
451
  * language governing permissions and limitations under the License.
452
452
  */
453
453
  Object.defineProperty(exports, "__esModule", { value: true });
454
- exports.WebhookEventResult = exports.WebhookAttemptResult = exports.WebAuthnWorkflow = exports.VerificationStrategy = exports.UserVerificationRequirement = exports.UserState = exports.UserActionPhase = exports.UnverifiedBehavior = exports.UnknownScopePolicy = exports.TransactionType = exports.TokenType = exports.ThemeType = exports.UniqueUsernameStrategy = exports.SystemTrustedProxyConfigurationPolicy = exports.SteamAPIMode = exports.Sort = exports.SendSetPasswordIdentityType = exports.SecureGeneratorType = exports.SAMLv2DestinationAssertionPolicy = exports.ResidentKeyRequirement = exports.RefreshTokenUsagePolicy = exports.RefreshTokenExpirationPolicy = exports.ReactorFeatureStatus = exports.PublicKeyCredentialType = exports.ProofKeyForCodeExchangePolicy = exports.PasswordlessStrategy = exports.BreachMatchMode = exports.BreachAction = exports.ObjectState = exports.Oauth2AuthorizedURLValidationPolicy = exports.OAuthScopeHandlingPolicy = exports.OAuthScopeConsentMode = exports.OAuthErrorType = exports.OAuthErrorReason = exports.OAuthApplicationRelationship = exports.MultiFactorLoginPolicy = exports.MessengerType = exports.MessageType = exports.LogoutBehavior = exports.LambdaType = exports.LambdaEngineType = exports.LDAPSecurityMethod = exports.KeyUse = exports.KeyType = exports.KeyAlgorithm = exports.IdentityVerifiedReason = exports.IdentityProviderType = exports.ClientAuthenticationMethod = exports.IdentityProviderLoginMethod = exports.IdentityProviderLinkingStrategy = exports.IPAccessControlEntryAction = exports.HTTPMethod = exports.GrantType = exports.FormType = exports.FormFieldAdminPolicy = exports.FormDataType = exports.FormControl = exports.FamilyRole = exports.ExpiryUnit = exports.EventType = exports.EventLogType = exports.EmailSecurityType = exports.DeviceType = exports.CoseKeyType = exports.CoseEllipticCurve = exports.CoseAlgorithmIdentifier = exports.ContentStatus = exports.ConsentStatus = exports.ConnectorType = exports.ClientAuthenticationPolicy = exports.ChangePasswordReason = exports.CaptchaMethod = exports.CanonicalizationMethod = exports.BreachedPasswordStatus = exports.TOTPAlgorithm = exports.AuthenticatorAttachmentPreference = exports.AuthenticatorAttachment = exports.AuthenticationThreats = exports.AttestationType = exports.AttestationConveyancePreference = exports.ApplicationMultiFactorTrustPolicy = exports.XMLSignatureLocation = exports.SAMLLogoutBehavior = exports.RegistrationType = exports.LoginIdType = exports.Algorithm = exports.FusionAuthClient = void 0;
454
+ exports.WebhookEventResult = exports.WebhookAttemptResult = exports.WebAuthnWorkflow = exports.VerificationStrategy = exports.UserVerificationRequirement = exports.UserState = exports.UserActionPhase = exports.UnverifiedBehavior = exports.UnknownScopePolicy = exports.TransactionType = exports.TokenType = exports.ThemeType = exports.UniqueUsernameStrategy = exports.SystemTrustedProxyConfigurationPolicy = exports.SteamAPIMode = exports.Sort = exports.SendSetPasswordIdentityType = exports.SecureGeneratorType = exports.SAMLv2DestinationAssertionPolicy = exports.ResidentKeyRequirement = exports.RefreshTokenUsagePolicy = exports.RefreshTokenExpirationPolicy = exports.ReactorFeatureStatus = exports.PublicKeyCredentialType = exports.ProofKeyForCodeExchangePolicy = exports.PasswordlessStrategy = exports.BreachMatchMode = exports.BreachAction = exports.ObjectState = exports.Oauth2AuthorizedURLValidationPolicy = exports.OAuthScopeHandlingPolicy = exports.OAuthScopeConsentMode = exports.OAuthErrorType = exports.OAuthErrorReason = exports.OAuthApplicationRelationship = exports.MultiFactorLoginPolicy = exports.MultiFactorAction = exports.MessengerType = exports.MessageType = exports.LogoutBehavior = exports.LambdaType = exports.LambdaEngineType = exports.LDAPSecurityMethod = exports.KeyUse = exports.KeyType = exports.KeyAlgorithm = exports.IdentityVerifiedReason = exports.IdentityProviderType = exports.ClientAuthenticationMethod = exports.IdentityProviderLoginMethod = exports.IdentityProviderLinkingStrategy = exports.IPAccessControlEntryAction = exports.HTTPMethod = exports.GrantType = exports.FormType = exports.FormStepType = exports.FormFieldAdminPolicy = exports.FormDataType = exports.FormControl = exports.FamilyRole = exports.ExpiryUnit = exports.ExistingUserStrategy = exports.EventType = exports.EventLogType = exports.EmailSecurityType = exports.DeviceType = exports.CoseKeyType = exports.CoseEllipticCurve = exports.CoseAlgorithmIdentifier = exports.ContentStatus = exports.ConsentStatus = exports.ConnectorType = exports.ClientAuthenticationPolicy = exports.ChangePasswordReason = exports.CaptchaMethod = exports.CanonicalizationMethod = exports.BreachedPasswordStatus = exports.TOTPAlgorithm = exports.AuthenticatorAttachmentPreference = exports.AuthenticatorAttachment = exports.AuthenticationThreats = exports.AttestationType = exports.AttestationConveyancePreference = exports.ApplicationMultiFactorTrustPolicy = exports.XMLSignatureLocation = exports.SAMLLogoutBehavior = exports.RegistrationType = exports.LoginIdType = exports.Algorithm = exports.FusionAuthClient = void 0;
455
455
  var DefaultRESTClientBuilder_1 = require("./DefaultRESTClientBuilder");
456
456
  var url_1 = (typeof window !== "undefined" ? window['window'] : typeof global !== "undefined" ? global['window'] : null);
457
457
  var FusionAuthClient = /** @class */ (function () {
@@ -545,6 +545,35 @@ var FusionAuthClient = /** @class */ (function () {
545
545
  .withMethod("POST")
546
546
  .go();
547
547
  };
548
+ /**
549
+ * Approve a device grant.
550
+ *
551
+ * @param {DeviceApprovalRequest} request The request object containing the device approval information and optional tenantId.
552
+ * @returns {Promise<ClientResponse<DeviceApprovalResponse>>}
553
+ */
554
+ FusionAuthClient.prototype.approveDeviceWithRequest = function (request) {
555
+ var body = new url_1.URLSearchParams();
556
+ if (request.client_id !== null && request.client_id !== undefined) {
557
+ body.append('client_id', request.client_id);
558
+ }
559
+ if (request.client_secret !== null && request.client_secret !== undefined) {
560
+ body.append('client_secret', request.client_secret);
561
+ }
562
+ if (request.tenantId !== null && request.tenantId !== undefined) {
563
+ body.append('tenantId', request.tenantId.toString());
564
+ }
565
+ if (request.token !== null && request.token !== undefined) {
566
+ body.append('token', request.token);
567
+ }
568
+ if (request.user_code !== null && request.user_code !== undefined) {
569
+ body.append('user_code', request.user_code);
570
+ }
571
+ return this.start()
572
+ .withUri('/oauth2/device/approve')
573
+ .withFormData(body)
574
+ .withMethod("POST")
575
+ .go();
576
+ };
548
577
  /**
549
578
  * Cancels the user action.
550
579
  *
@@ -649,6 +678,25 @@ var FusionAuthClient = /** @class */ (function () {
649
678
  .withMethod("GET")
650
679
  .go();
651
680
  };
681
+ /**
682
+ * Check to see if the user must obtain a Trust Token Id in order to complete a change password request.
683
+ * When a user has enabled Two-Factor authentication, before you are allowed to use the Change Password API to change
684
+ * your password, you must obtain a Trust Token by completing a Two-Factor Step-Up authentication.
685
+ *
686
+ * An HTTP status code of 400 with a general error code of [TrustTokenRequired] indicates that a Trust Token is required to make a POST request to this API.
687
+ *
688
+ * @param {string} changePasswordId The change password Id used to find the user. This value is generated by FusionAuth once the change password workflow has been initiated.
689
+ * @param {string} ipAddress (Optional) IP address of the user changing their password. This is used for MFA risk assessment.
690
+ * @returns {Promise<ClientResponse<void>>}
691
+ */
692
+ FusionAuthClient.prototype.checkChangePasswordUsingIdAndIPAddress = function (changePasswordId, ipAddress) {
693
+ return this.startAnonymous()
694
+ .withUri('/api/user/change-password')
695
+ .withUriSegment(changePasswordId)
696
+ .withParameter('ipAddress', ipAddress)
697
+ .withMethod("GET")
698
+ .go();
699
+ };
652
700
  /**
653
701
  * Check to see if the user must obtain a Trust Token Id in order to complete a change password request.
654
702
  * When a user has enabled Two-Factor authentication, before you are allowed to use the Change Password API to change
@@ -666,6 +714,25 @@ var FusionAuthClient = /** @class */ (function () {
666
714
  .withMethod("GET")
667
715
  .go();
668
716
  };
717
+ /**
718
+ * Check to see if the user must obtain a Trust Token Id in order to complete a change password request.
719
+ * When a user has enabled Two-Factor authentication, before you are allowed to use the Change Password API to change
720
+ * your password, you must obtain a Trust Token by completing a Two-Factor Step-Up authentication.
721
+ *
722
+ * An HTTP status code of 400 with a general error code of [TrustTokenRequired] indicates that a Trust Token is required to make a POST request to this API.
723
+ *
724
+ * @param {string} encodedJWT The encoded JWT (access token).
725
+ * @param {string} ipAddress (Optional) IP address of the user changing their password. This is used for MFA risk assessment.
726
+ * @returns {Promise<ClientResponse<void>>}
727
+ */
728
+ FusionAuthClient.prototype.checkChangePasswordUsingJWTAndIPAddress = function (encodedJWT, ipAddress) {
729
+ return this.startAnonymous()
730
+ .withUri('/api/user/change-password')
731
+ .withAuthorization('Bearer ' + encodedJWT)
732
+ .withParameter('ipAddress', ipAddress)
733
+ .withMethod("GET")
734
+ .go();
735
+ };
669
736
  /**
670
737
  * Check to see if the user must obtain a Trust Request Id in order to complete a change password request.
671
738
  * When a user has enabled Two-Factor authentication, before you are allowed to use the Change Password API to change
@@ -683,6 +750,25 @@ var FusionAuthClient = /** @class */ (function () {
683
750
  .withMethod("GET")
684
751
  .go();
685
752
  };
753
+ /**
754
+ * Check to see if the user must obtain a Trust Request Id in order to complete a change password request.
755
+ * When a user has enabled Two-Factor authentication, before you are allowed to use the Change Password API to change
756
+ * your password, you must obtain a Trust Request Id by completing a Two-Factor Step-Up authentication.
757
+ *
758
+ * An HTTP status code of 400 with a general error code of [TrustTokenRequired] indicates that a Trust Token is required to make a POST request to this API.
759
+ *
760
+ * @param {string} loginId The loginId (email or username) of the User that you intend to change the password for.
761
+ * @param {string} ipAddress (Optional) IP address of the user changing their password. This is used for MFA risk assessment.
762
+ * @returns {Promise<ClientResponse<void>>}
763
+ */
764
+ FusionAuthClient.prototype.checkChangePasswordUsingLoginIdAndIPAddress = function (loginId, ipAddress) {
765
+ return this.start()
766
+ .withUri('/api/user/change-password')
767
+ .withParameter('loginId', loginId)
768
+ .withParameter('ipAddress', ipAddress)
769
+ .withMethod("GET")
770
+ .go();
771
+ };
686
772
  /**
687
773
  * Check to see if the user must obtain a Trust Request Id in order to complete a change password request.
688
774
  * When a user has enabled Two-Factor authentication, before you are allowed to use the Change Password API to change
@@ -702,6 +788,27 @@ var FusionAuthClient = /** @class */ (function () {
702
788
  .withMethod("GET")
703
789
  .go();
704
790
  };
791
+ /**
792
+ * Check to see if the user must obtain a Trust Request Id in order to complete a change password request.
793
+ * When a user has enabled Two-Factor authentication, before you are allowed to use the Change Password API to change
794
+ * your password, you must obtain a Trust Request Id by completing a Two-Factor Step-Up authentication.
795
+ *
796
+ * An HTTP status code of 400 with a general error code of [TrustTokenRequired] indicates that a Trust Token is required to make a POST request to this API.
797
+ *
798
+ * @param {string} loginId The loginId of the User that you intend to change the password for.
799
+ * @param {Array<String>} loginIdTypes The identity types that FusionAuth will compare the loginId to.
800
+ * @param {string} ipAddress (Optional) IP address of the user changing their password. This is used for MFA risk assessment.
801
+ * @returns {Promise<ClientResponse<void>>}
802
+ */
803
+ FusionAuthClient.prototype.checkChangePasswordUsingLoginIdAndLoginIdTypesAndIPAddress = function (loginId, loginIdTypes, ipAddress) {
804
+ return this.start()
805
+ .withUri('/api/user/change-password')
806
+ .withParameter('loginId', loginId)
807
+ .withParameter('loginIdTypes', loginIdTypes)
808
+ .withParameter('ipAddress', ipAddress)
809
+ .withMethod("GET")
810
+ .go();
811
+ };
705
812
  /**
706
813
  * Make a Client Credentials grant request to obtain an access token.
707
814
  *
@@ -724,6 +831,35 @@ var FusionAuthClient = /** @class */ (function () {
724
831
  .withMethod("POST")
725
832
  .go();
726
833
  };
834
+ /**
835
+ * Make a Client Credentials grant request to obtain an access token.
836
+ *
837
+ * @param {ClientCredentialsGrantRequest} request The client credentials grant request containing client authentication, scope and optional tenantId.
838
+ * @returns {Promise<ClientResponse<AccessToken>>}
839
+ */
840
+ FusionAuthClient.prototype.clientCredentialsGrantWithRequest = function (request) {
841
+ var body = new url_1.URLSearchParams();
842
+ if (request.client_id !== null && request.client_id !== undefined) {
843
+ body.append('client_id', request.client_id);
844
+ }
845
+ if (request.client_secret !== null && request.client_secret !== undefined) {
846
+ body.append('client_secret', request.client_secret);
847
+ }
848
+ if (request.grant_type !== null && request.grant_type !== undefined) {
849
+ body.append('grant_type', request.grant_type);
850
+ }
851
+ if (request.scope !== null && request.scope !== undefined) {
852
+ body.append('scope', request.scope);
853
+ }
854
+ if (request.tenantId !== null && request.tenantId !== undefined) {
855
+ body.append('tenantId', request.tenantId);
856
+ }
857
+ return this.startAnonymous()
858
+ .withUri('/oauth2/token')
859
+ .withFormData(body)
860
+ .withMethod("POST")
861
+ .go();
862
+ };
727
863
  /**
728
864
  * Adds a comment to the user's account.
729
865
  *
@@ -1843,6 +1979,51 @@ var FusionAuthClient = /** @class */ (function () {
1843
1979
  .withMethod("DELETE")
1844
1980
  .go();
1845
1981
  };
1982
+ /**
1983
+ * Start the Device Authorization flow using form-encoded parameters
1984
+ *
1985
+ * @param {string} client_id The unique client identifier. The client Id is the Id of the FusionAuth Application in which you are attempting to authenticate.
1986
+ * @param {string} client_secret (Optional) The client secret. This value may optionally be provided in the request body instead of the Authorization header.
1987
+ * @param {string} scope (Optional) A space-delimited string of the requested scopes. Defaults to all scopes configured in the Application's OAuth configuration.
1988
+ * @returns {Promise<ClientResponse<DeviceResponse>>}
1989
+ */
1990
+ FusionAuthClient.prototype.deviceAuthorize = function (client_id, client_secret, scope) {
1991
+ var body = new url_1.URLSearchParams();
1992
+ body.append('client_id', client_id);
1993
+ body.append('client_secret', client_secret);
1994
+ body.append('scope', scope);
1995
+ return this.startAnonymous()
1996
+ .withUri('/oauth2/device_authorize')
1997
+ .withFormData(body)
1998
+ .withMethod("POST")
1999
+ .go();
2000
+ };
2001
+ /**
2002
+ * Start the Device Authorization flow using a request body
2003
+ *
2004
+ * @param {DeviceAuthorizationRequest} request The device authorization request containing client authentication, scope, and optional device metadata.
2005
+ * @returns {Promise<ClientResponse<DeviceResponse>>}
2006
+ */
2007
+ FusionAuthClient.prototype.deviceAuthorizeWithRequest = function (request) {
2008
+ var body = new url_1.URLSearchParams();
2009
+ if (request.client_id !== null && request.client_id !== undefined) {
2010
+ body.append('client_id', request.client_id);
2011
+ }
2012
+ if (request.client_secret !== null && request.client_secret !== undefined) {
2013
+ body.append('client_secret', request.client_secret);
2014
+ }
2015
+ if (request.scope !== null && request.scope !== undefined) {
2016
+ body.append('scope', request.scope);
2017
+ }
2018
+ if (request.tenantId !== null && request.tenantId !== undefined) {
2019
+ body.append('tenantId', request.tenantId.toString());
2020
+ }
2021
+ return this.startAnonymous()
2022
+ .withUri('/oauth2/device_authorize')
2023
+ .withFormData(body)
2024
+ .withMethod("POST")
2025
+ .go();
2026
+ };
1846
2027
  /**
1847
2028
  * Disable two-factor authentication for a user.
1848
2029
  *
@@ -1940,6 +2121,75 @@ var FusionAuthClient = /** @class */ (function () {
1940
2121
  .withMethod("POST")
1941
2122
  .go();
1942
2123
  };
2124
+ /**
2125
+ * Exchanges an OAuth authorization code and code_verifier for an access token.
2126
+ * Makes a request to the Token endpoint to exchange the authorization code returned from the Authorize endpoint and a code_verifier for an access token.
2127
+ *
2128
+ * @param {OAuthCodePKCEAccessTokenRequest} request The PKCE OAuth code access token exchange request.
2129
+ * @returns {Promise<ClientResponse<AccessToken>>}
2130
+ */
2131
+ FusionAuthClient.prototype.exchangeOAuthCodeForAccessTokenUsingPKCEWithRequest = function (request) {
2132
+ var body = new url_1.URLSearchParams();
2133
+ if (request.client_id !== null && request.client_id !== undefined) {
2134
+ body.append('client_id', request.client_id);
2135
+ }
2136
+ if (request.client_secret !== null && request.client_secret !== undefined) {
2137
+ body.append('client_secret', request.client_secret);
2138
+ }
2139
+ if (request.code !== null && request.code !== undefined) {
2140
+ body.append('code', request.code);
2141
+ }
2142
+ if (request.code_verifier !== null && request.code_verifier !== undefined) {
2143
+ body.append('code_verifier', request.code_verifier);
2144
+ }
2145
+ if (request.grant_type !== null && request.grant_type !== undefined) {
2146
+ body.append('grant_type', request.grant_type);
2147
+ }
2148
+ if (request.redirect_uri !== null && request.redirect_uri !== undefined) {
2149
+ body.append('redirect_uri', request.redirect_uri);
2150
+ }
2151
+ if (request.tenantId !== null && request.tenantId !== undefined) {
2152
+ body.append('tenantId', request.tenantId.toString());
2153
+ }
2154
+ return this.startAnonymous()
2155
+ .withUri('/oauth2/token')
2156
+ .withFormData(body)
2157
+ .withMethod("POST")
2158
+ .go();
2159
+ };
2160
+ /**
2161
+ * Exchanges an OAuth authorization code for an access token.
2162
+ * Makes a request to the Token endpoint to exchange the authorization code returned from the Authorize endpoint for an access token.
2163
+ *
2164
+ * @param {OAuthCodeAccessTokenRequest} request The OAuth code access token exchange request.
2165
+ * @returns {Promise<ClientResponse<AccessToken>>}
2166
+ */
2167
+ FusionAuthClient.prototype.exchangeOAuthCodeForAccessTokenWithRequest = function (request) {
2168
+ var body = new url_1.URLSearchParams();
2169
+ if (request.client_id !== null && request.client_id !== undefined) {
2170
+ body.append('client_id', request.client_id);
2171
+ }
2172
+ if (request.client_secret !== null && request.client_secret !== undefined) {
2173
+ body.append('client_secret', request.client_secret);
2174
+ }
2175
+ if (request.code !== null && request.code !== undefined) {
2176
+ body.append('code', request.code);
2177
+ }
2178
+ if (request.grant_type !== null && request.grant_type !== undefined) {
2179
+ body.append('grant_type', request.grant_type);
2180
+ }
2181
+ if (request.redirect_uri !== null && request.redirect_uri !== undefined) {
2182
+ body.append('redirect_uri', request.redirect_uri);
2183
+ }
2184
+ if (request.tenantId !== null && request.tenantId !== undefined) {
2185
+ body.append('tenantId', request.tenantId);
2186
+ }
2187
+ return this.startAnonymous()
2188
+ .withUri('/oauth2/token')
2189
+ .withFormData(body)
2190
+ .withMethod("POST")
2191
+ .go();
2192
+ };
1943
2193
  /**
1944
2194
  * Exchange a Refresh Token for an Access Token.
1945
2195
  * If you will be using the Refresh Token Grant, you will make a request to the Token endpoint to exchange the user’s refresh token for an access token.
@@ -1966,6 +2216,42 @@ var FusionAuthClient = /** @class */ (function () {
1966
2216
  .withMethod("POST")
1967
2217
  .go();
1968
2218
  };
2219
+ /**
2220
+ * Exchange a Refresh Token for an Access Token.
2221
+ * If you will be using the Refresh Token Grant, you will make a request to the Token endpoint to exchange the user’s refresh token for an access token.
2222
+ *
2223
+ * @param {RefreshTokenAccessTokenRequest} request The refresh token access token exchange request.
2224
+ * @returns {Promise<ClientResponse<AccessToken>>}
2225
+ */
2226
+ FusionAuthClient.prototype.exchangeRefreshTokenForAccessTokenWithRequest = function (request) {
2227
+ var body = new url_1.URLSearchParams();
2228
+ if (request.client_id !== null && request.client_id !== undefined) {
2229
+ body.append('client_id', request.client_id);
2230
+ }
2231
+ if (request.client_secret !== null && request.client_secret !== undefined) {
2232
+ body.append('client_secret', request.client_secret);
2233
+ }
2234
+ if (request.grant_type !== null && request.grant_type !== undefined) {
2235
+ body.append('grant_type', request.grant_type);
2236
+ }
2237
+ if (request.refresh_token !== null && request.refresh_token !== undefined) {
2238
+ body.append('refresh_token', request.refresh_token);
2239
+ }
2240
+ if (request.scope !== null && request.scope !== undefined) {
2241
+ body.append('scope', request.scope);
2242
+ }
2243
+ if (request.tenantId !== null && request.tenantId !== undefined) {
2244
+ body.append('tenantId', request.tenantId.toString());
2245
+ }
2246
+ if (request.user_code !== null && request.user_code !== undefined) {
2247
+ body.append('user_code', request.user_code);
2248
+ }
2249
+ return this.startAnonymous()
2250
+ .withUri('/oauth2/token')
2251
+ .withFormData(body)
2252
+ .withMethod("POST")
2253
+ .go();
2254
+ };
1969
2255
  /**
1970
2256
  * Exchange a refresh token for a new JWT.
1971
2257
  *
@@ -2007,6 +2293,45 @@ var FusionAuthClient = /** @class */ (function () {
2007
2293
  .withMethod("POST")
2008
2294
  .go();
2009
2295
  };
2296
+ /**
2297
+ * Exchange User Credentials for a Token.
2298
+ * If you will be using the Resource Owner Password Credential Grant, you will make a request to the Token endpoint to exchange the user’s email and password for an access token.
2299
+ *
2300
+ * @param {UserCredentialsAccessTokenRequest} request The user credentials access token exchange request.
2301
+ * @returns {Promise<ClientResponse<AccessToken>>}
2302
+ */
2303
+ FusionAuthClient.prototype.exchangeUserCredentialsForAccessTokenWithRequest = function (request) {
2304
+ var body = new url_1.URLSearchParams();
2305
+ if (request.client_id !== null && request.client_id !== undefined) {
2306
+ body.append('client_id', request.client_id);
2307
+ }
2308
+ if (request.client_secret !== null && request.client_secret !== undefined) {
2309
+ body.append('client_secret', request.client_secret);
2310
+ }
2311
+ if (request.grant_type !== null && request.grant_type !== undefined) {
2312
+ body.append('grant_type', request.grant_type);
2313
+ }
2314
+ if (request.password !== null && request.password !== undefined) {
2315
+ body.append('password', request.password);
2316
+ }
2317
+ if (request.scope !== null && request.scope !== undefined) {
2318
+ body.append('scope', request.scope);
2319
+ }
2320
+ if (request.tenantId !== null && request.tenantId !== undefined) {
2321
+ body.append('tenantId', request.tenantId);
2322
+ }
2323
+ if (request.user_code !== null && request.user_code !== undefined) {
2324
+ body.append('user_code', request.user_code);
2325
+ }
2326
+ if (request.username !== null && request.username !== undefined) {
2327
+ body.append('username', request.username);
2328
+ }
2329
+ return this.startAnonymous()
2330
+ .withUri('/oauth2/token')
2331
+ .withFormData(body)
2332
+ .withMethod("POST")
2333
+ .go();
2334
+ };
2010
2335
  /**
2011
2336
  * Begins the forgot password sequence, which kicks off an email to the user so that they can reset their password.
2012
2337
  *
@@ -2209,6 +2534,29 @@ var FusionAuthClient = /** @class */ (function () {
2209
2534
  .withMethod("POST")
2210
2535
  .go();
2211
2536
  };
2537
+ /**
2538
+ * Inspect an access token issued as the result of the User based grant such as the Authorization Code Grant, Implicit Grant, the User Credentials Grant or the Refresh Grant.
2539
+ *
2540
+ * @param {AccessTokenIntrospectRequest} request The access token introspection request.
2541
+ * @returns {Promise<ClientResponse<IntrospectResponse>>}
2542
+ */
2543
+ FusionAuthClient.prototype.introspectAccessTokenWithRequest = function (request) {
2544
+ var body = new url_1.URLSearchParams();
2545
+ if (request.client_id !== null && request.client_id !== undefined) {
2546
+ body.append('client_id', request.client_id);
2547
+ }
2548
+ if (request.tenantId !== null && request.tenantId !== undefined) {
2549
+ body.append('tenantId', request.tenantId);
2550
+ }
2551
+ if (request.token !== null && request.token !== undefined) {
2552
+ body.append('token', request.token);
2553
+ }
2554
+ return this.startAnonymous()
2555
+ .withUri('/oauth2/introspect')
2556
+ .withFormData(body)
2557
+ .withMethod("POST")
2558
+ .go();
2559
+ };
2212
2560
  /**
2213
2561
  * Inspect an access token issued as the result of the Client Credentials Grant.
2214
2562
  *
@@ -2224,6 +2572,26 @@ var FusionAuthClient = /** @class */ (function () {
2224
2572
  .withMethod("POST")
2225
2573
  .go();
2226
2574
  };
2575
+ /**
2576
+ * Inspect an access token issued as the result of the Client Credentials Grant.
2577
+ *
2578
+ * @param {ClientCredentialsAccessTokenIntrospectRequest} request The client credentials access token.
2579
+ * @returns {Promise<ClientResponse<IntrospectResponse>>}
2580
+ */
2581
+ FusionAuthClient.prototype.introspectClientCredentialsAccessTokenWithRequest = function (request) {
2582
+ var body = new url_1.URLSearchParams();
2583
+ if (request.tenantId !== null && request.tenantId !== undefined) {
2584
+ body.append('tenantId', request.tenantId);
2585
+ }
2586
+ if (request.token !== null && request.token !== undefined) {
2587
+ body.append('token', request.token);
2588
+ }
2589
+ return this.startAnonymous()
2590
+ .withUri('/oauth2/introspect')
2591
+ .withFormData(body)
2592
+ .withMethod("POST")
2593
+ .go();
2594
+ };
2227
2595
  /**
2228
2596
  * Issue a new access token (JWT) for the requested Application after ensuring the provided JWT is valid. A valid
2229
2597
  * access token is properly signed and not expired.
@@ -3985,6 +4353,19 @@ var FusionAuthClient = /** @class */ (function () {
3985
4353
  .withMethod("GET")
3986
4354
  .go();
3987
4355
  };
4356
+ /**
4357
+ * Retrieves the totals report. This allows excluding applicationTotals from the report. An empty list will include the applicationTotals.
4358
+ *
4359
+ * @param {Array<String>} excludes List of fields to exclude in the response. Currently only allows applicationTotals.
4360
+ * @returns {Promise<ClientResponse<TotalsReportResponse>>}
4361
+ */
4362
+ FusionAuthClient.prototype.retrieveTotalReportWithExcludes = function (excludes) {
4363
+ return this.start()
4364
+ .withUri('/api/report/totals')
4365
+ .withParameter('excludes', excludes)
4366
+ .withMethod("GET")
4367
+ .go();
4368
+ };
3988
4369
  /**
3989
4370
  * Retrieve two-factor recovery codes for a user.
3990
4371
  *
@@ -4018,6 +4399,23 @@ var FusionAuthClient = /** @class */ (function () {
4018
4399
  .withMethod("GET")
4019
4400
  .go();
4020
4401
  };
4402
+ /**
4403
+ * Retrieve a user's two-factor status.
4404
+ *
4405
+ * This can be used to see if a user will need to complete a two-factor challenge to complete a login,
4406
+ * and optionally identify the state of the two-factor trust across various applications. This operation
4407
+ * provides more payload options than retrieveTwoFactorStatus.
4408
+ *
4409
+ * @param {TwoFactorStatusRequest} request The request object that contains all the information used to check the status.
4410
+ * @returns {Promise<ClientResponse<TwoFactorStatusResponse>>}
4411
+ */
4412
+ FusionAuthClient.prototype.retrieveTwoFactorStatusWithRequest = function (request) {
4413
+ return this.start()
4414
+ .withUri('/api/two-factor/status')
4415
+ .withJSONBody(request)
4416
+ .withMethod("POST")
4417
+ .go();
4418
+ };
4021
4419
  /**
4022
4420
  * Retrieves the user for the given Id.
4023
4421
  *
@@ -4203,6 +4601,58 @@ var FusionAuthClient = /** @class */ (function () {
4203
4601
  .withMethod("GET")
4204
4602
  .go();
4205
4603
  };
4604
+ /**
4605
+ * Retrieve a user_code that is part of an in-progress Device Authorization Grant.
4606
+ *
4607
+ * This API is useful if you want to build your own login workflow to complete a device grant.
4608
+ *
4609
+ * This request will require an API key.
4610
+ *
4611
+ * @param {RetrieveUserCodeUsingAPIKeyRequest} request The user code retrieval request including optional tenantId.
4612
+ * @returns {Promise<ClientResponse<void>>}
4613
+ */
4614
+ FusionAuthClient.prototype.retrieveUserCodeUsingAPIKeyWithRequest = function (request) {
4615
+ var body = new url_1.URLSearchParams();
4616
+ if (request.tenantId !== null && request.tenantId !== undefined) {
4617
+ body.append('tenantId', request.tenantId.toString());
4618
+ }
4619
+ if (request.user_code !== null && request.user_code !== undefined) {
4620
+ body.append('user_code', request.user_code);
4621
+ }
4622
+ return this.startAnonymous()
4623
+ .withUri('/oauth2/device/user-code')
4624
+ .withFormData(body)
4625
+ .withMethod("POST")
4626
+ .go();
4627
+ };
4628
+ /**
4629
+ * Retrieve a user_code that is part of an in-progress Device Authorization Grant.
4630
+ *
4631
+ * This API is useful if you want to build your own login workflow to complete a device grant.
4632
+ *
4633
+ * @param {RetrieveUserCodeRequest} request The user code retrieval request.
4634
+ * @returns {Promise<ClientResponse<void>>}
4635
+ */
4636
+ FusionAuthClient.prototype.retrieveUserCodeWithRequest = function (request) {
4637
+ var body = new url_1.URLSearchParams();
4638
+ if (request.client_id !== null && request.client_id !== undefined) {
4639
+ body.append('client_id', request.client_id);
4640
+ }
4641
+ if (request.client_secret !== null && request.client_secret !== undefined) {
4642
+ body.append('client_secret', request.client_secret);
4643
+ }
4644
+ if (request.tenantId !== null && request.tenantId !== undefined) {
4645
+ body.append('tenantId', request.tenantId.toString());
4646
+ }
4647
+ if (request.user_code !== null && request.user_code !== undefined) {
4648
+ body.append('user_code', request.user_code);
4649
+ }
4650
+ return this.startAnonymous()
4651
+ .withUri('/oauth2/device/user-code')
4652
+ .withFormData(body)
4653
+ .withMethod("POST")
4654
+ .go();
4655
+ };
4206
4656
  /**
4207
4657
  * Retrieves all the comments for the user with the given Id.
4208
4658
  *
@@ -5644,6 +6094,22 @@ var FusionAuthClient = /** @class */ (function () {
5644
6094
  .withMethod("GET")
5645
6095
  .go();
5646
6096
  };
6097
+ /**
6098
+ * Validates the end-user provided user_code from the user-interaction of the Device Authorization Grant.
6099
+ * If you build your own activation form you should validate the user provided code prior to beginning the Authorization grant.
6100
+ *
6101
+ * @param {ValidateDeviceRequest} request The device validation request.
6102
+ * @returns {Promise<ClientResponse<void>>}
6103
+ */
6104
+ FusionAuthClient.prototype.validateDeviceWithRequest = function (request) {
6105
+ return this.startAnonymous()
6106
+ .withUri('/oauth2/device/validate')
6107
+ .withParameter('client_id', request.client_id)
6108
+ .withParameter('tenantId', request.tenantId != null ? request.tenantId.toString() : null)
6109
+ .withParameter('user_code', request.user_code)
6110
+ .withMethod("GET")
6111
+ .go();
6112
+ };
5647
6113
  /**
5648
6114
  * Validates the provided JWT (encoded JWT string) to ensure the token is valid. A valid access token is properly
5649
6115
  * signed and not expired.
@@ -6139,6 +6605,14 @@ var EventType;
6139
6605
  EventType["UserIdentityVerified"] = "user.identity.verified";
6140
6606
  EventType["UserIdentityUpdate"] = "user.identity.update";
6141
6607
  })(EventType = exports.EventType || (exports.EventType = {}));
6608
+ /**
6609
+ * Represent the various states/expectations of a user in the context of starting verification
6610
+ */
6611
+ var ExistingUserStrategy;
6612
+ (function (ExistingUserStrategy) {
6613
+ ExistingUserStrategy["mustExist"] = "mustExist";
6614
+ ExistingUserStrategy["mustNotExist"] = "mustNotExist";
6615
+ })(ExistingUserStrategy = exports.ExistingUserStrategy || (exports.ExistingUserStrategy = {}));
6142
6616
  /**
6143
6617
  * @author Brian Pontarelli
6144
6618
  */
@@ -6191,6 +6665,15 @@ var FormFieldAdminPolicy;
6191
6665
  FormFieldAdminPolicy["Edit"] = "Edit";
6192
6666
  FormFieldAdminPolicy["View"] = "View";
6193
6667
  })(FormFieldAdminPolicy = exports.FormFieldAdminPolicy || (exports.FormFieldAdminPolicy = {}));
6668
+ /**
6669
+ * Denotes the type of form step. This is used to configure different behavior on form steps in the registration flow.
6670
+ */
6671
+ var FormStepType;
6672
+ (function (FormStepType) {
6673
+ FormStepType["collectData"] = "collectData";
6674
+ FormStepType["verifyEmail"] = "verifyEmail";
6675
+ FormStepType["verifyPhoneNumber"] = "verifyPhoneNumber";
6676
+ })(FormStepType = exports.FormStepType || (exports.FormStepType = {}));
6194
6677
  /**
6195
6678
  * @author Daniel DeGroff
6196
6679
  */
@@ -6322,12 +6805,14 @@ var KeyAlgorithm;
6322
6805
  KeyAlgorithm["RS256"] = "RS256";
6323
6806
  KeyAlgorithm["RS384"] = "RS384";
6324
6807
  KeyAlgorithm["RS512"] = "RS512";
6808
+ KeyAlgorithm["Ed25519"] = "Ed25519";
6325
6809
  })(KeyAlgorithm = exports.KeyAlgorithm || (exports.KeyAlgorithm = {}));
6326
6810
  var KeyType;
6327
6811
  (function (KeyType) {
6328
6812
  KeyType["EC"] = "EC";
6329
6813
  KeyType["RSA"] = "RSA";
6330
6814
  KeyType["HMAC"] = "HMAC";
6815
+ KeyType["OKP"] = "OKP";
6331
6816
  })(KeyType = exports.KeyType || (exports.KeyType = {}));
6332
6817
  /**
6333
6818
  * The use type of a key.
@@ -6387,6 +6872,7 @@ var LambdaType;
6387
6872
  LambdaType["SelfServiceRegistrationValidation"] = "SelfServiceRegistrationValidation";
6388
6873
  LambdaType["UserInfoPopulate"] = "UserInfoPopulate";
6389
6874
  LambdaType["LoginValidation"] = "LoginValidation";
6875
+ LambdaType["MFARequirement"] = "MFARequirement";
6390
6876
  })(LambdaType = exports.LambdaType || (exports.LambdaType = {}));
6391
6877
  /**
6392
6878
  * @author Matthew Altman
@@ -6412,6 +6898,15 @@ var MessengerType;
6412
6898
  MessengerType["Kafka"] = "Kafka";
6413
6899
  MessengerType["Twilio"] = "Twilio";
6414
6900
  })(MessengerType = exports.MessengerType || (exports.MessengerType = {}));
6901
+ /**
6902
+ * Communicate various actions/contexts in which multi-factor authentication can be used.
6903
+ */
6904
+ var MultiFactorAction;
6905
+ (function (MultiFactorAction) {
6906
+ MultiFactorAction["changePassword"] = "changePassword";
6907
+ MultiFactorAction["login"] = "login";
6908
+ MultiFactorAction["stepUp"] = "stepUp";
6909
+ })(MultiFactorAction = exports.MultiFactorAction || (exports.MultiFactorAction = {}));
6415
6910
  /**
6416
6911
  * @author Daniel DeGroff
6417
6912
  */
@@ -6871,4 +7366,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
6871
7366
  },{}]},{},[1])(1)
6872
7367
  });
6873
7368
 
6874
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC50cyIsIm5vZGVfbW9kdWxlcy9ub2RlLWZldGNoL2Jyb3dzZXIuanMiLCJzcmMvQ2xpZW50UmVzcG9uc2UudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnQudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyLnRzIiwic3JjL0Z1c2lvbkF1dGhDbGllbnQudHMiLCJzcmMvSVJFU1RDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7Ozs7Ozs7Ozs7OztBQUVILDJEQUFxRDtBQUNyRCxrQkFBZSwwQkFBZ0IsQ0FBQztBQUVoQyx5REFBdUM7QUFDdkMsb0RBQWtDO0FBQ2xDLGlFQUErQztBQUMvQyx1REFBcUM7QUFDckMsb0RBQWtDO0FBQ2xDLDJEQUF5Qzs7OztBQ3hCekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6QkE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7O0FBRUg7SUFBQTtJQVFBLENBQUM7SUFIQyxzQ0FBYSxHQUFiO1FBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUN6RCxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQVJBLEFBUUMsSUFBQTs7Ozs7O0FDeEJEOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdILG1EQUE4QztBQUM5Qyx5Q0FBMkU7QUFDM0UsMkJBQXNDO0FBRXRDOzs7O0dBSUc7QUFDSDtJQVVFLDJCQUFtQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQVJ4QixZQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUVyQyxlQUFVLEdBQTJCLEVBQUUsQ0FBQztRQUd4QyxvQkFBZSxHQUF3QixpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQztRQUM3RSx5QkFBb0IsR0FBOEIsaUJBQWlCLENBQUMsd0JBQXdCLENBQUM7SUFHcEcsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ1UscUNBQW1CLEdBQWhDLFVBQXFDLFFBQWtCOzs7Ozs7d0JBQ2pELGNBQWMsR0FBRyxJQUFJLHdCQUFjLEVBQU0sQ0FBQzt3QkFFOUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO3dCQUN4QyxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7NkJBQzVDLENBQUEsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQSxFQUEzQyx3QkFBMkM7d0JBQzdDLEtBQUEsY0FBYyxDQUFBO3dCQUFZLHFCQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBQTs7d0JBQS9DLEdBQWUsUUFBUSxHQUFHLFNBQXFCLENBQUM7OzRCQUdsRCxzQkFBTyxjQUFjLEVBQUM7Ozs7S0FDdkI7SUFFRDs7Ozs7T0FLRztJQUNVLDBDQUF3QixHQUFyQyxVQUEyQyxRQUFrQjs7Ozs7O3dCQUN2RCxjQUFjLEdBQUcsSUFBSSx3QkFBYyxFQUFPLENBQUM7d0JBRS9DLGNBQWMsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQzt3QkFDeEMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDOzZCQUM1QyxDQUFBLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUEsRUFBM0Msd0JBQTJDO3dCQUM3QyxLQUFBLGNBQWMsQ0FBQTt3QkFBYSxxQkFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUE7O3dCQUFoRCxHQUFlLFNBQVMsR0FBRyxTQUFxQixDQUFDOzs0QkFHbkQsc0JBQU8sY0FBYyxFQUFDOzs7O0tBQ3ZCO0lBRUQ7Ozs7O09BS0c7SUFDSCw2Q0FBaUIsR0FBakIsVUFBa0IsR0FBVztRQUMzQixJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssV0FBVyxFQUFFO1lBQzlDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILDBDQUFjLEdBQWQsVUFBZSxPQUF3QjtRQUNyQyxJQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUM3QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRTtZQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztTQUNmO1FBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDaEQsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7U0FDakI7UUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsc0NBQVUsR0FBVjtRQUNFLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHdDQUFZLEdBQVosVUFBYSxJQUFxQjtRQUNoQyxJQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFlLEVBQUUsQ0FBQztRQUNwQyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVk7Z0JBQ3JDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxNQUFNLElBQUksS0FBSyxJQUFJLFdBQVcsRUFBRTtvQkFDeEUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3hCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsc0NBQVUsR0FBVixVQUFXLEdBQVcsRUFBRSxLQUFhO1FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx3Q0FBWSxHQUFaLFVBQWEsSUFBWTtRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUNwRCw2RUFBNkU7UUFDN0UsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxzQ0FBVSxHQUFWLFVBQVcsTUFBYztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILG1DQUFPLEdBQVAsVUFBUSxHQUFXO1FBQ2pCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx5Q0FBYSxHQUFiLFVBQWMsSUFBWSxFQUFFLEtBQVU7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDJDQUFlLEdBQWYsVUFBZ0IsS0FBeUI7UUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsK0NBQW1CLEdBQW5CLFVBQW9CLE9BQTRCO1FBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELG9EQUF3QixHQUF4QixVQUF5QixPQUFrQztRQUN6RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNHLDhCQUFFLEdBQVI7Ozs7Ozt3QkFDUSxjQUFjLEdBQUcsSUFBSSx3QkFBYyxFQUFNLENBQUM7Ozs7d0JBSW5DLHFCQUFNLG9CQUFLLENBQ2xCLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFDakI7Z0NBQ0UsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dDQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0NBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBZ0I7Z0NBQzNCLHVEQUF1RDtnQ0FDdkQsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXOzZCQUM5QixDQUNKLEVBQUE7O3dCQVRELFFBQVEsR0FBRyxTQVNWLENBQUM7NkJBRUUsUUFBUSxDQUFDLEVBQUUsRUFBWCx3QkFBVzt3QkFDTixxQkFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFBOzRCQUEzQyxzQkFBTyxTQUFvQyxFQUFDOzRCQUV0QyxxQkFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLEVBQUE7NEJBQS9DLE1BQU0sU0FBeUMsQ0FBQzs7Ozt3QkFHbEQsSUFBSSxPQUFLLFlBQVksd0JBQWMsRUFBRTs0QkFDbkMsTUFBTSxPQUFLLENBQUMsQ0FBQyxpRkFBaUY7eUJBQy9GO3dCQUVELElBQUksUUFBUSxFQUFFLEVBQUUscUNBQXFDOzRCQUNuRCxjQUFjLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7eUJBQzdDO3dCQUNELGNBQWMsQ0FBQyxTQUFTLEdBQUcsT0FBSyxDQUFDO3dCQUVqQyxNQUFNLGNBQWMsQ0FBQzs7Ozs7S0FFeEI7SUFFTywwQ0FBYyxHQUF0QjtRQUNFLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFNLFdBQVcsR0FBRyxVQUFDLEdBQVcsRUFBRSxLQUFhO1lBQzdDLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3RELFdBQVcsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFBO2dDQUNRLEdBQUc7WUFDVixJQUFNLEtBQUssR0FBRyxPQUFLLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hCLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFyQixDQUFxQixDQUFDLENBQUE7YUFDNUM7aUJBQU07Z0JBQ0wsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6Qjs7O1FBTkgsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVTtvQkFBdEIsR0FBRztTQU9YO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUNILHdCQUFDO0FBQUQsQ0F6T0EsQUF5T0MsSUFBQTs7Ozs7OztBQ25RRDs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7QUFHSCx5REFBb0Q7QUFHcEQ7SUFBQTtJQUlBLENBQUM7SUFIQyx3Q0FBSyxHQUFMLFVBQWUsSUFBWTtRQUN6QixPQUFPLElBQUksMkJBQWlCLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNILCtCQUFDO0FBQUQsQ0FKQSxBQUlDLElBQUE7Ozs7OztBQ3hCRDs7Ozs7Ozs7Ozs7Ozs7RUFjRTs7O0FBR0YsdUVBQWtFO0FBSWxFLDJCQUFvQztBQUVwQztJQUlFLDBCQUNTLE1BQWMsRUFDZCxJQUFZLEVBQ1osUUFBaUI7UUFGakIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixhQUFRLEdBQVIsUUFBUSxDQUFTO1FBTm5CLGtCQUFhLEdBQXVCLElBQUksa0NBQXdCLEVBQUUsQ0FBQztJQU90RSxDQUFDO0lBRUw7Ozs7O09BS0c7SUFDSCxzQ0FBVyxHQUFYLFVBQVksUUFBdUI7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnREFBcUIsR0FBckIsVUFBc0IsS0FBeUI7UUFDN0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILHFDQUFVLEdBQVYsVUFBVyxPQUFzQjtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwwQ0FBZSxHQUFmLFVBQWdCLE9BQXVCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGNBQWMsQ0FBQzthQUN2QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsMENBQWUsR0FBZixVQUFnQixRQUFjLEVBQUUsT0FBc0I7UUFDcEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCx3Q0FBYSxHQUFiLFVBQWMsU0FBaUIsRUFBRSxhQUFxQixFQUFFLEtBQWEsRUFBRSxTQUFpQjtRQUN0RixJQUFJLElBQUksR0FBRyxJQUFJLHFCQUFlLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWtDO2FBQzlDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxZQUFZLENBQUMsSUFBSSxDQUFDO2FBQ2xCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsdUNBQVksR0FBWixVQUFhLFFBQWMsRUFBRSxPQUFzQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gseUNBQWMsR0FBZCxVQUFlLGdCQUF3QixFQUFFLE9BQThCO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBa0M7YUFDdkQsT0FBTyxDQUFDLDJCQUEyQixDQUFDO2FBQ3BDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQzthQUNoQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsVUFBa0IsRUFBRSxPQUE4QjtRQUNwRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWtDO2FBQ3ZELE9BQU8sQ0FBQywyQkFBMkIsQ0FBQzthQUNwQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO2FBQ3pDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsbURBQXdCLEdBQXhCLFVBQXlCLE9BQThCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLDJCQUEyQixDQUFDO2FBQ3BDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxpREFBc0IsR0FBdEIsVUFBdUIsVUFBa0IsRUFBRSxPQUE4QjtRQUN2RSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWtDO2FBQ3ZELE9BQU8sQ0FBQywyQkFBMkIsQ0FBQzthQUNwQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO2FBQ3pDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxxREFBMEIsR0FBMUIsVUFBMkIsZ0JBQXdCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBZ0I7YUFDckMsT0FBTyxDQUFDLDJCQUEyQixDQUFDO2FBQ3BDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQzthQUNoQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILHNEQUEyQixHQUEzQixVQUE0QixVQUFrQjtRQUM1QyxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWdCO2FBQ3JDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQzthQUNwQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO2FBQ3pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsMERBQStCLEdBQS9CLFVBQWdDLE9BQWU7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsMkJBQTJCLENBQUM7YUFDcEMsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7YUFDakMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gseUVBQThDLEdBQTlDLFVBQStDLE9BQWUsRUFBRSxZQUEyQjtRQUN6RixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQzthQUNwQyxhQUFhLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQzthQUNqQyxhQUFhLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQzthQUMzQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILGlEQUFzQixHQUF0QixVQUF1QixTQUFpQixFQUFFLGFBQXFCLEVBQUUsS0FBYTtRQUM1RSxJQUFJLElBQUksR0FBRyxJQUFJLHFCQUFlLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBMkI7YUFDaEQsT0FBTyxDQUFDLGVBQWUsQ0FBQzthQUN4QixZQUFZLENBQUMsSUFBSSxDQUFDO2FBQ2xCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx3Q0FBYSxHQUFiLFVBQWMsT0FBMkI7UUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaURBQXNCLEdBQXRCLFVBQXVCLE9BQThCO1FBQ25ELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBa0M7YUFDOUMsT0FBTyxDQUFDLCtCQUErQixDQUFDO2FBQ3hDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG9EQUF5QixHQUF6QixVQUEwQixPQUE2QjtRQUNyRCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWtDO2FBQ3ZELE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQzthQUMvQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnREFBcUIsR0FBckIsVUFBc0IsT0FBNkI7UUFDakQsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUF5QjthQUM5QyxPQUFPLENBQUMscUJBQXFCLENBQUM7YUFDOUIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsdURBQTRCLEdBQTVCLFVBQTZCLE9BQXdDO1FBQ25FLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNEM7YUFDeEQsT0FBTyxDQUFDLGlDQUFpQyxDQUFDO2FBQzFDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsdUNBQVksR0FBWixVQUFhLEtBQVcsRUFBRSxPQUFzQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUNyQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsNENBQWlCLEdBQWpCLFVBQWtCLGFBQW1CLEVBQUUsT0FBMkI7UUFDaEUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxnREFBcUIsR0FBckIsVUFBc0IsYUFBbUIsRUFBRSxNQUFZLEVBQUUsT0FBMkI7UUFDbEYsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCx5Q0FBYyxHQUFkLFVBQWUsT0FBd0I7UUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE0QjthQUN4QyxPQUFPLENBQUMsdUJBQXVCLENBQUM7YUFDaEMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDBDQUFlLEdBQWYsVUFBZ0IsV0FBaUIsRUFBRSxPQUF5QjtRQUMxRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTZCO2FBQ3pDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixjQUFjLENBQUMsV0FBVyxDQUFDO2FBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx3Q0FBYSxHQUFiLFVBQWMsU0FBZSxFQUFFLE9BQXVCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMkI7YUFDdkMsT0FBTyxDQUFDLGNBQWMsQ0FBQzthQUN2QixjQUFjLENBQUMsU0FBUyxDQUFDO2FBQ3pCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsZUFBcUIsRUFBRSxPQUE2QjtRQUN0RSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWlDO2FBQzdDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzthQUM5QixjQUFjLENBQUMsZUFBZSxDQUFDO2FBQy9CLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx1Q0FBWSxHQUFaLFVBQWEsUUFBYyxFQUFFLE9BQXNCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCwyQ0FBZ0IsR0FBaEIsVUFBaUIsWUFBa0IsRUFBRSxPQUEwQjtRQUM3RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQThCO2FBQzFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsWUFBWSxDQUFDO2FBQzVCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILHFEQUEwQixHQUExQixVQUEyQixZQUFrQixFQUFFLFlBQWtCLEVBQUUsT0FBMEI7UUFDM0YsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE4QjthQUMxQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLFlBQVksQ0FBQzthQUM1QixjQUFjLENBQUMsWUFBWSxDQUFDO2FBQzVCLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCx1Q0FBWSxHQUFaLFVBQWEsUUFBYyxFQUFFLE9BQXNCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDeEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHFDQUFVLEdBQVYsVUFBVyxNQUFZLEVBQUUsT0FBb0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3BCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDBDQUFlLEdBQWYsVUFBZ0IsT0FBYSxFQUFFLE9BQXlCO1FBQ3RELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNkI7YUFDekMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO2FBQzFCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHNDQUFXLEdBQVgsVUFBWSxPQUFhLEVBQUUsT0FBcUI7UUFDOUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QjthQUNyQyxPQUFPLENBQUMsWUFBWSxDQUFDO2FBQ3JCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLE9BQXNCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO2FBQzVCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxvREFBeUIsR0FBekIsVUFBMEIsbUJBQXlCLEVBQUUsT0FBbUM7UUFDdEYsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF1QzthQUNuRCxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQzthQUNuQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsaURBQXNCLEdBQXRCLFVBQXVCLGtCQUF3QixFQUFFLE9BQWdDO1FBQy9FLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBb0M7YUFDaEQsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQzthQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsdUNBQVksR0FBWixVQUFhLFFBQWMsRUFBRSxPQUFzQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZ0RBQXFCLEdBQXJCLFVBQXNCLGlCQUF1QixFQUFFLE9BQStCO1FBQzVFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBbUM7YUFDL0MsT0FBTyxDQUFDLHVCQUF1QixDQUFDO2FBQ2hDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQzthQUNqQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsMENBQWUsR0FBZixVQUFnQixXQUFpQixFQUFFLE9BQXlCO1FBQzFELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNkI7YUFDekMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ3pCLGNBQWMsQ0FBQyxXQUFXLENBQUM7YUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLGFBQW1CLEVBQUUsT0FBYSxFQUFFLE9BQXFDO1FBQ3hGLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUM7YUFDckQsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxhQUFhLENBQUM7YUFDN0IsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx1Q0FBWSxHQUFaLFVBQWEsUUFBYyxFQUFFLE9BQXNCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxzQ0FBVyxHQUFYLFVBQVksT0FBYSxFQUFFLE9BQXFCO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUI7YUFDckMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUNyQixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQ0FBVSxHQUFWLFVBQVcsTUFBWSxFQUFFLE9BQW9CO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLFlBQWtCLEVBQUUsT0FBMEI7UUFDN0QsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE4QjthQUMxQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLFlBQVksQ0FBQzthQUM1QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILGlEQUFzQixHQUF0QixVQUF1QixrQkFBd0IsRUFBRSxPQUFnQztRQUMvRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQW9DO2FBQ2hELE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQzthQUNsQyxjQUFjLENBQUMsa0JBQWtCLENBQUM7YUFDbEMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDRDQUFpQixHQUFqQixVQUFrQixhQUFtQixFQUFFLE9BQTJCO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBK0I7YUFDM0MsT0FBTyxDQUFDLG1CQUFtQixDQUFDO2FBQzVCLGNBQWMsQ0FBQyxhQUFhLENBQUM7YUFDN0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUNBQWMsR0FBZCxVQUFlLE9BQW9DO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0M7YUFDcEQsT0FBTyxDQUFDLDZCQUE2QixDQUFDO2FBQ3RDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx3Q0FBYSxHQUFiLFVBQWMsU0FBZSxFQUFFLE9BQXVCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMkI7YUFDdkMsT0FBTyxDQUFDLGNBQWMsQ0FBQzthQUN2QixjQUFjLENBQUMsU0FBUyxDQUFDO2FBQ3pCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdEQUFxQixHQUFyQixVQUFzQixhQUFtQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsYUFBYSxDQUFDO2FBQzdCLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDRDQUFpQixHQUFqQjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBYzthQUMxQixPQUFPLENBQUMsY0FBYyxDQUFDO2FBQ3ZCLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx5Q0FBYyxHQUFkLFVBQWUsTUFBWTtRQUN6QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDcEIsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsK0NBQW9CLEdBQXBCLFVBQXFCLFlBQWtCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUIsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsMENBQWUsR0FBZixVQUFnQixPQUFzQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQThCO2FBQzFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixhQUFhLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQzthQUNoQyxhQUFhLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQzthQUM5QixhQUFhLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQzthQUNsQyxVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsK0NBQW9CLEdBQXBCLFVBQXFCLE9BQXNCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBOEI7YUFDMUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ3pCLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDO2FBQ2hDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2FBQzlCLGFBQWEsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO2FBQ2xDLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx1Q0FBWSxHQUFaLFVBQWEsS0FBVztRQUN0QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUNyQixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsNENBQWlCLEdBQWpCLFVBQWtCLGFBQW1CO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxhQUFhLENBQUM7YUFDN0IsYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7YUFDakMsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsZ0RBQXFCLEdBQXJCLFVBQXNCLGFBQW1CLEVBQUUsTUFBWTtRQUNyRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsYUFBYSxDQUFDO2FBQzdCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMENBQWUsR0FBZixVQUFnQixXQUFpQjtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixjQUFjLENBQUMsV0FBVyxDQUFDO2FBQzNCLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx3Q0FBYSxHQUFiLFVBQWMsU0FBZTtRQUMzQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsY0FBYyxDQUFDLFNBQVMsQ0FBQzthQUN6QixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsOENBQW1CLEdBQW5CLFVBQW9CLGVBQXFCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLHFCQUFxQixDQUFDO2FBQzlCLGNBQWMsQ0FBQyxlQUFlLENBQUM7YUFDL0IsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHVDQUFZLEdBQVosVUFBYSxRQUFjO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDRDQUFpQixHQUFqQixVQUFrQixRQUFjLEVBQUUsaUJBQXVCLEVBQUUsTUFBWTtRQUNyRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxpQkFBaUIsQ0FBQzthQUNyRCxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLFlBQWtCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUIsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gscURBQTBCLEdBQTFCLFVBQTJCLFlBQWtCLEVBQUUsWUFBa0I7UUFDL0QsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLFlBQVksQ0FBQzthQUM1QixjQUFjLENBQUMsWUFBWSxDQUFDO2FBQzVCLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUIsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHFDQUFVLEdBQVYsVUFBVyxNQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwwQ0FBZSxHQUFmLFVBQWdCLE9BQWE7UUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsaUJBQWlCLENBQUM7YUFDMUIsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsc0NBQVcsR0FBWCxVQUFZLE9BQWE7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsWUFBWSxDQUFDO2FBQ3JCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDZDQUFrQixHQUFsQixVQUFtQixPQUE0QjtRQUM3QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQzthQUM1QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxvREFBeUIsR0FBekIsVUFBMEIscUJBQTJCO1FBQ25ELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMscUJBQXFCLENBQUM7YUFDckMsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlEQUFzQixHQUF0QixVQUF1QixrQkFBd0I7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO2FBQ2xDLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxvQ0FBUyxHQUFULFVBQVUsS0FBVztRQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxVQUFVLENBQUM7YUFDbkIsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUNyQixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsdUNBQVksR0FBWixVQUFhLFFBQWM7UUFDekIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDeEIsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdEQUFxQixHQUFyQixVQUFzQixpQkFBdUI7UUFDM0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsdUJBQXVCLENBQUM7YUFDaEMsY0FBYyxDQUFDLGlCQUFpQixDQUFDO2FBQ2pDLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwwQ0FBZSxHQUFmLFVBQWdCLFdBQWlCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ3pCLGNBQWMsQ0FBQyxXQUFXLENBQUM7YUFDM0IsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLGFBQW1CLEVBQUUsT0FBYTtRQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsYUFBYSxDQUFDO2FBQzdCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDZDQUFrQixHQUFsQixVQUFtQixNQUFZLEVBQUUsYUFBbUI7UUFDbEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixjQUFjLENBQUMsYUFBYSxDQUFDO2FBQzdCLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILHdEQUE2QixHQUE3QixVQUE4QixNQUFZLEVBQUUsYUFBbUIsRUFBRSxPQUFrQztRQUNqRyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxhQUFhLENBQUM7YUFDN0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHVDQUFZLEdBQVosVUFBYSxRQUFjO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsNENBQWlCLEdBQWpCLFVBQWtCLFFBQWM7UUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDeEIsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7YUFDNUIsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsa0RBQXVCLEdBQXZCLFVBQXdCLFFBQWMsRUFBRSxPQUE0QjtRQUNsRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxzQ0FBVyxHQUFYLFVBQVksT0FBYTtRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxZQUFZLENBQUM7YUFDckIsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHFDQUFVLEdBQVYsVUFBVyxNQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO2FBQ2pDLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLFlBQWtCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUIsYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7YUFDakMsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlEQUFzQixHQUF0QixVQUF1QixrQkFBd0I7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMseUJBQXlCLENBQUM7YUFDbEMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO2FBQ2xDLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILHlDQUFjLEdBQWQsVUFBZSxrQkFBd0IsRUFBRSxzQkFBOEIsRUFBRSxNQUFZO1FBQ25GLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0M7YUFDcEQsT0FBTyxDQUFDLDZCQUE2QixDQUFDO2FBQ3RDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQzthQUN2RCxhQUFhLENBQUMsd0JBQXdCLEVBQUUsc0JBQXNCLENBQUM7YUFDL0QsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsZ0RBQXFCLEdBQXJCLFVBQXNCLE1BQVksRUFBRSxPQUFnQztRQUNsRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDcEIsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxzQ0FBVyxHQUFYLFVBQVksT0FBMEI7UUFDcEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE4QjthQUMxQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7YUFDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILDZDQUFrQixHQUFsQixVQUFtQixPQUEwQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQThCO2FBQzFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtREFBd0IsR0FBeEIsVUFBeUIsRUFBUTtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxlQUFlLENBQUM7YUFDeEIsY0FBYyxDQUFDLEVBQUUsQ0FBQzthQUNsQixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsd0NBQWEsR0FBYixVQUFjLFNBQWU7UUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsY0FBYyxDQUFDO2FBQ3ZCLGNBQWMsQ0FBQyxTQUFTLENBQUM7YUFDekIsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLE1BQVksRUFBRSxRQUFnQixFQUFFLElBQVk7UUFDM0QsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsc0JBQXNCLENBQUM7YUFDL0IsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixhQUFhLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQzthQUNuQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQzthQUMzQixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHNEQUEyQixHQUEzQixVQUE0QixNQUFZLEVBQUUsT0FBZ0M7UUFDeEUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsc0JBQXNCLENBQUM7YUFDL0IsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsMENBQWUsR0FBZixVQUFnQixNQUFZLEVBQUUsT0FBeUI7UUFDckQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE2QjthQUN6QyxPQUFPLENBQUMsc0JBQXNCLENBQUM7YUFDL0IsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILDBEQUErQixHQUEvQixVQUFnQyxJQUFZLEVBQUUsU0FBaUIsRUFBRSxhQUFxQixFQUFFLFlBQW9CO1FBQzFHLElBQUksSUFBSSxHQUFHLElBQUkscUJBQWUsRUFBRSxDQUFDO1FBRWpDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUEyQjthQUNoRCxPQUFPLENBQUMsZUFBZSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQUM7YUFDbEIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILG1FQUF3QyxHQUF4QyxVQUF5QyxJQUFZLEVBQUUsU0FBaUIsRUFBRSxhQUFxQixFQUFFLFlBQW9CLEVBQUUsYUFBcUI7UUFDMUksSUFBSSxJQUFJLEdBQUcsSUFBSSxxQkFBZSxFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQTJCO2FBQ2hELE9BQU8sQ0FBQyxlQUFlLENBQUM7YUFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQzthQUNsQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsNkRBQWtDLEdBQWxDLFVBQW1DLGFBQXFCLEVBQUUsU0FBaUIsRUFBRSxhQUFxQixFQUFFLEtBQWEsRUFBRSxTQUFpQjtRQUNsSSxJQUFJLElBQUksR0FBRyxJQUFJLHFCQUFlLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQTJCO2FBQ2hELE9BQU8sQ0FBQyxlQUFlLENBQUM7YUFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQzthQUNsQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscURBQTBCLEdBQTFCLFVBQTJCLE9BQXVCO1FBQ2hELE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBOEI7YUFDbkQsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxnRUFBcUMsR0FBckMsVUFBc0MsUUFBZ0IsRUFBRSxRQUFnQixFQUFFLFNBQWlCLEVBQUUsYUFBcUIsRUFBRSxLQUFhLEVBQUUsU0FBaUI7UUFDbEosSUFBSSxJQUFJLEdBQUcsSUFBSSxxQkFBZSxFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUEyQjthQUNoRCxPQUFPLENBQUMsZUFBZSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQUM7YUFDbEIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlDQUFjLEdBQWQsVUFBZSxPQUE4QjtRQUMzQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWtDO2FBQzlDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQzthQUNwQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsc0RBQTJCLEdBQTNCLFVBQTRCLEtBQWE7UUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE2QjthQUN6QyxPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQzthQUN2QyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHNDQUFXLEdBQVgsVUFBWSxLQUFXLEVBQUUsT0FBbUI7UUFDMUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF1QjthQUNuQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUNyQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDZEQUFrQyxHQUFsQyxVQUFtQyxLQUFhLEVBQUUsYUFBbUI7UUFDbkUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFvQzthQUNoRCxPQUFPLENBQUMsK0JBQStCLENBQUM7YUFDeEMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQzthQUMvQyxhQUFhLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQzthQUM3QyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseURBQThCLEdBQTlCLFVBQStCLE1BQVk7UUFDekMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QzthQUNyRCxVQUFVLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQzthQUN4QyxPQUFPLENBQUMsb0NBQW9DLENBQUM7YUFDN0MsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGtEQUF1QixHQUF2QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDBEQUErQixHQUEvQixVQUFnQyxVQUFrQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQXdCO2FBQzdDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO2FBQ3pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILGdEQUFxQixHQUFyQixVQUFzQixPQUFxQztRQUN6RCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQXlCO2FBQzlDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQzthQUN2QyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsb0NBQVMsR0FBVCxVQUFVLEtBQVcsRUFBRSxPQUFtQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXVCO2FBQ25DLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQzthQUMxQixjQUFjLENBQUMsS0FBSyxDQUFDO2FBQ3JCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsT0FBa0M7UUFDcEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsZ0NBQWdDLENBQUM7YUFDekMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILHNDQUFXLEdBQVgsVUFBWSxPQUFzQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtREFBd0IsR0FBeEIsVUFBeUIsT0FBd0M7UUFDL0QsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsc0JBQXNCLENBQUM7YUFDL0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGdEQUFxQixHQUFyQixVQUFzQixTQUFpQixFQUFFLEtBQWE7UUFDcEQsSUFBSSxJQUFJLEdBQUcsSUFBSSxxQkFBZSxFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFrQzthQUN2RCxPQUFPLENBQUMsb0JBQW9CLENBQUM7YUFDN0IsWUFBWSxDQUFDLElBQUksQ0FBQzthQUNsQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaUVBQXNDLEdBQXRDLFVBQXVDLEtBQWE7UUFDbEQsSUFBSSxJQUFJLEdBQUcsSUFBSSxxQkFBZSxFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFrQzthQUN2RCxPQUFPLENBQUMsb0JBQW9CLENBQUM7YUFDN0IsWUFBWSxDQUFDLElBQUksQ0FBQzthQUNsQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxtQ0FBUSxHQUFSLFVBQVMsYUFBbUIsRUFBRSxVQUFrQixFQUFFLFlBQW9CO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBeUI7YUFDOUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ3pCLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7YUFDekMsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsYUFBYSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUM7YUFDM0MsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsZ0NBQUssR0FBTCxVQUFNLE9BQXFCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUI7YUFDckMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUNyQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxvQ0FBUyxHQUFULFVBQVUsTUFBWSxFQUFFLGFBQW1CLEVBQUUsZUFBdUI7UUFDbEUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QjthQUNyQyxPQUFPLENBQUMsWUFBWSxDQUFDO2FBQ3JCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixhQUFhLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQzthQUMzQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsK0NBQW9CLEdBQXBCLFVBQXFCLE9BQXlCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUI7YUFDckMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUNyQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILGlDQUFNLEdBQU4sVUFBTyxNQUFlLEVBQUUsWUFBb0I7UUFDMUMsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFjO2FBQ25DLFVBQVUsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDO2FBQ3hDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsYUFBYSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUM7YUFDM0MsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw0Q0FBaUIsR0FBakIsVUFBa0IsT0FBc0I7UUFDdEMsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFjO2FBQ25DLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGlEQUFzQixHQUF0QixVQUF1QixNQUFjO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLCtCQUErQixDQUFDO2FBQ3hDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQy9CLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILHVDQUFZLEdBQVosVUFBYSxRQUFjLEVBQUUsT0FBc0I7UUFDakQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw0Q0FBaUIsR0FBakIsVUFBa0IsT0FBaUM7UUFDakQsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUF5QjthQUM5QyxPQUFPLENBQUMseUJBQXlCLENBQUM7YUFDbEMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHNDQUFXLEdBQVgsVUFBWSxLQUFXLEVBQUUsT0FBc0I7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsY0FBYyxDQUFDO2FBQ3ZCLGNBQWMsQ0FBQyxLQUFLLENBQUM7YUFDckIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDJDQUFnQixHQUFoQixVQUFpQixhQUFtQixFQUFFLE9BQTJCO1FBQy9ELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBK0I7YUFDM0MsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxhQUFhLENBQUM7YUFDN0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCwrQ0FBb0IsR0FBcEIsVUFBcUIsYUFBbUIsRUFBRSxNQUFZLEVBQUUsT0FBMkI7UUFDakYsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHlDQUFjLEdBQWQsVUFBZSxXQUFpQixFQUFFLE9BQXlCO1FBQ3pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNkI7YUFDekMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ3pCLGNBQWMsQ0FBQyxXQUFXLENBQUM7YUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHVDQUFZLEdBQVosVUFBYSxTQUFlLEVBQUUsT0FBdUI7UUFDbkQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEyQjthQUN2QyxPQUFPLENBQUMsY0FBYyxDQUFDO2FBQ3ZCLGNBQWMsQ0FBQyxTQUFTLENBQUM7YUFDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDZDQUFrQixHQUFsQixVQUFtQixlQUFxQixFQUFFLE9BQTZCO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBaUM7YUFDN0MsT0FBTyxDQUFDLHFCQUFxQixDQUFDO2FBQzlCLGNBQWMsQ0FBQyxlQUFlLENBQUM7YUFDL0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHNDQUFXLEdBQVgsVUFBWSxRQUFjLEVBQUUsT0FBc0I7UUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDeEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDBDQUFlLEdBQWYsVUFBZ0IsWUFBa0IsRUFBRSxPQUEwQjtRQUM1RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQThCO2FBQzFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsWUFBWSxDQUFDO2FBQzVCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsb0RBQXlCLEdBQXpCLFVBQTBCLFlBQWtCLEVBQUUsWUFBa0IsRUFBRSxPQUEwQjtRQUMxRixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQThCO2FBQzFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsWUFBWSxDQUFDO2FBQzVCLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUIsY0FBYyxDQUFDLFlBQVksQ0FBQzthQUM1QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsb0NBQVMsR0FBVCxVQUFVLE1BQVksRUFBRSxPQUFvQjtRQUMxQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdCO2FBQ3BDLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDcEIsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gseUNBQWMsR0FBZCxVQUFlLE9BQWEsRUFBRSxPQUF5QjtRQUNyRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTZCO2FBQ3pDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQzthQUMxQixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQ0FBVSxHQUFWLFVBQVcsT0FBYSxFQUFFLE9BQXFCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUI7YUFDckMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUNyQixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxtREFBd0IsR0FBeEIsVUFBeUIsbUJBQXlCLEVBQUUsT0FBbUM7UUFDckYsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF1QzthQUNuRCxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQzthQUNuQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZ0RBQXFCLEdBQXJCLFVBQXNCLGtCQUF3QixFQUFFLE9BQWdDO1FBQzlFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBb0M7YUFDaEQsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQzthQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw0Q0FBaUIsR0FBakIsVUFBa0IsT0FBMkI7UUFDM0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHNDQUFXLEdBQVgsVUFBWSxRQUFjLEVBQUUsT0FBc0I7UUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDeEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILCtDQUFvQixHQUFwQixVQUFxQixpQkFBdUIsRUFBRSxPQUErQjtRQUMzRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQW1DO2FBQy9DLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQzthQUNoQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7YUFDakMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHlDQUFjLEdBQWQsVUFBZSxXQUFpQixFQUFFLE9BQXlCO1FBQ3pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNkI7YUFDekMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ3pCLGNBQWMsQ0FBQyxXQUFXLENBQUM7YUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCwwQ0FBZSxHQUFmLFVBQWdCLGFBQW1CLEVBQUUsT0FBYSxFQUFFLE9BQXFDO1FBQ3ZGLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUM7YUFDckQsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxhQUFhLENBQUM7YUFDN0IsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw0Q0FBaUIsR0FBakIsVUFBa0IsTUFBWSxFQUFFLE9BQTRCO1FBQzFELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0M7YUFDNUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ25CLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsbURBQXdCLEdBQXhCLFVBQXlCLE9BQW1DO1FBQzFELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBdUM7YUFDbkQsT0FBTyxDQUFDLDJCQUEyQixDQUFDO2FBQ3BDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxzQ0FBVyxHQUFYLFVBQVksUUFBYyxFQUFFLE9BQXNCO1FBQ2hELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQ0FBVSxHQUFWLFVBQVcsT0FBYSxFQUFFLE9BQXFCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUI7YUFDckMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUNyQixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxvQ0FBUyxHQUFULFVBQVUsTUFBWSxFQUFFLE9BQW9CO1FBQzFDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNuQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCwwQ0FBZSxHQUFmLFVBQWdCLFlBQWtCLEVBQUUsT0FBMEI7UUFDNUQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE4QjthQUMxQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLFlBQVksQ0FBQzthQUM1QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZ0RBQXFCLEdBQXJCLFVBQXNCLGtCQUF3QixFQUFFLE9BQWdDO1FBQzlFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBb0M7YUFDaEQsT0FBTyxDQUFDLHlCQUF5QixDQUFDO2FBQ2xDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQzthQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLGFBQW1CLEVBQUUsT0FBMkI7UUFDL0QsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsdUNBQVksR0FBWixVQUFhLFNBQWUsRUFBRSxPQUF1QjtRQUNuRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTJCO2FBQ3ZDLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsY0FBYyxDQUFDLFNBQVMsQ0FBQzthQUN6QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDbkIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnREFBcUIsR0FBckIsVUFBc0IsYUFBbUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQzthQUNqQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUNBQWMsR0FBZCxVQUFlLE1BQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3BCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7YUFDakMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILCtDQUFvQixHQUFwQixVQUFxQixZQUFrQjtRQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQThCO2FBQzFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsWUFBWSxDQUFDO2FBQzVCLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO2FBQ2pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx1Q0FBWSxHQUFaLFVBQWEsT0FBcUM7UUFDaEQsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUF5QjthQUM5QyxPQUFPLENBQUMsb0JBQW9CLENBQUM7YUFDN0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxtREFBd0IsR0FBeEI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWM7YUFDMUIsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2FBQzdCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILGlEQUFzQixHQUF0QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBYzthQUMxQixPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZ0RBQXFCLEdBQXJCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFjO2FBQzFCLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsbUNBQVEsR0FBUixVQUFTLE1BQVksRUFBRSxPQUE0QjtRQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdDO2FBQzVDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxrQ0FBTyxHQUFQLFVBQVEsT0FBdUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMscUJBQXFCLENBQUM7YUFDOUIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILCtDQUFvQixHQUFwQixVQUFxQixRQUFjLEVBQUUsTUFBWTtRQUMvQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtEQUF1QixHQUF2QixVQUF3QixLQUFhO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBK0I7YUFDM0MsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO2FBQzdCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILHlFQUE4QyxHQUE5QyxVQUErQyxhQUFtQixFQUFFLEtBQWE7UUFDL0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx5REFBOEIsR0FBOUIsVUFBK0IsS0FBYSxFQUFFLGFBQW1CO1FBQy9ELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBc0M7YUFDbEQsT0FBTyxDQUFDLCtCQUErQixDQUFDO2FBQ3hDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO2FBQzdCLGFBQWEsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO2FBQzdDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx5Q0FBYyxHQUFkLFVBQWUsS0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUNBQWMsR0FBZCxVQUFlLFFBQWM7UUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDBDQUFlLEdBQWYsVUFBZ0IsTUFBWTtRQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseURBQThCLEdBQTlCLFVBQStCLE1BQVk7UUFDekMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsYUFBYSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQzthQUN0QyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGdEQUFxQixHQUFyQixVQUFzQixNQUFZO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQy9CLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO2FBQzdCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsYUFBbUI7UUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE2QjthQUN6QyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwrQ0FBb0IsR0FBcEI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTZCO2FBQ3pDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLFVBQWtCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNEI7YUFDeEMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO2FBQ2hDLGNBQWMsQ0FBQyxVQUFVLENBQUM7YUFDMUIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDRDQUFpQixHQUFqQixVQUFrQixXQUFpQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTJCO2FBQ3ZDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixjQUFjLENBQUMsV0FBVyxDQUFDO2FBQzNCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDZDQUFrQixHQUFsQjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMkI7YUFDdkMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ3pCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwwQ0FBZSxHQUFmLFVBQWdCLFNBQWU7UUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QjthQUNyQyxPQUFPLENBQUMsY0FBYyxDQUFDO2FBQ3ZCLGNBQWMsQ0FBQyxTQUFTLENBQUM7YUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMkNBQWdCLEdBQWhCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QjthQUNyQyxPQUFPLENBQUMsY0FBYyxDQUFDO2FBQ3ZCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxvREFBeUIsR0FBekIsVUFBMEIsYUFBbUIsRUFBRSxLQUFhLEVBQUUsR0FBVztRQUN2RSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXlDO2FBQ3JELE9BQU8sQ0FBQywrQkFBK0IsQ0FBQzthQUN4QyxhQUFhLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQzthQUM3QyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQzthQUM3QixhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQzthQUN6QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZ0RBQXFCLEdBQXJCLFVBQXNCLGVBQXFCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBK0I7YUFDM0MsT0FBTyxDQUFDLHFCQUFxQixDQUFDO2FBQzlCLGNBQWMsQ0FBQyxlQUFlLENBQUM7YUFDL0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsdURBQTRCLEdBQTVCLFVBQTZCLE9BQXVCO1FBQ2xELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMkI7YUFDdkMsT0FBTyxDQUFDLDZCQUE2QixDQUFDO2FBQ3RDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaURBQXNCLEdBQXRCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMscUJBQXFCLENBQUM7YUFDOUIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlDQUFjLEdBQWQsVUFBZSxRQUFjO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDhDQUFtQixHQUFuQixVQUFvQixRQUFjLEVBQUUsaUJBQXVCLEVBQUUsTUFBWTtRQUN2RSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxpQkFBaUIsQ0FBQzthQUNyRCxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLFlBQWtCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBOEI7YUFDMUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsOENBQW1CLEdBQW5CO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE4QjthQUMxQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDJDQUFnQixHQUFoQixVQUFpQixVQUFrQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTRCO2FBQ3hDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQzthQUNoQyxjQUFjLENBQUMsVUFBVSxDQUFDO2FBQzFCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwyQ0FBZ0IsR0FBaEIsVUFBaUIsTUFBWTtRQUMzQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdCO2FBQ3BDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMERBQStCLEdBQS9CLFVBQWdDLFFBQWM7UUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsdUNBQVksR0FBWixVQUFhLE1BQVk7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFzQjthQUNsQyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3BCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDRDQUFpQixHQUFqQixVQUFrQixPQUFhO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMkI7YUFDdkMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO2FBQzFCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsNkNBQWtCLEdBQWxCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEyQjthQUN2QyxPQUFPLENBQUMsaUJBQWlCLENBQUM7YUFDMUIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsd0NBQWEsR0FBYjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBc0I7YUFDbEMsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsd0NBQWEsR0FBYixVQUFjLE9BQWE7UUFDekIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QjthQUNyQyxPQUFPLENBQUMsWUFBWSxDQUFDO2FBQ3JCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gseUNBQWMsR0FBZDtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBdUI7YUFDbkMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsc0RBQTJCLEdBQTNCLFVBQTRCLHFCQUEyQjtRQUNyRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXFDO2FBQ2pELE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsY0FBYyxDQUFDLHFCQUFxQixDQUFDO2FBQ3JDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtREFBd0IsR0FBeEIsVUFBeUIsa0JBQXdCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBb0M7YUFDaEQsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQzthQUNsQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCx5REFBOEIsR0FBOUIsVUFBK0IsSUFBMEI7UUFDdkQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFvQzthQUNoRCxPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7YUFDM0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsb0RBQXlCLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFrQzthQUM5QyxPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxrREFBdUIsR0FBdkIsVUFBd0IsTUFBWTtRQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixhQUFhLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQzthQUM5QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx1REFBNEIsR0FBNUI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTZCO2FBQ3pDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQzthQUMvQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxzREFBMkIsR0FBM0I7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTRCO2FBQ3hDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQzthQUMvQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCw4Q0FBbUIsR0FBbkI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTZCO2FBQ3pDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsK0NBQW9CLEdBQXBCLFVBQXFCLEtBQWE7UUFDaEMsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUEyQjthQUNoRCxPQUFPLENBQUMscUJBQXFCLENBQUM7YUFDOUIsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7YUFDM0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDhEQUFtQyxHQUFuQyxVQUFvQyxhQUFxQjtRQUN2RCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQTJCO2FBQ2hELE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzthQUM5QixhQUFhLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQzthQUM3QyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnREFBcUIsR0FBckI7UUFDRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQTJCO2FBQ2hELE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzthQUM5QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnREFBcUIsR0FBckI7UUFDRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQXNCO2FBQzNDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsc0NBQVcsR0FBWCxVQUFZLEtBQVc7UUFDckIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF1QjthQUNuQyxPQUFPLENBQUMsVUFBVSxDQUFDO2FBQ25CLGNBQWMsQ0FBQyxLQUFLLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsdUNBQVksR0FBWjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBcUI7YUFDakMsT0FBTyxDQUFDLFVBQVUsQ0FBQzthQUNuQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUNBQWMsR0FBZCxVQUFlLFFBQWM7UUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDeEIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMENBQWUsR0FBZjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZ0RBQXFCLEdBQXJCLFVBQXNCLElBQWdCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQzthQUMzQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsOENBQW1CLEdBQW5CLFVBQW9CLGFBQW1CLEVBQUUsS0FBYSxFQUFFLEdBQVc7UUFDakUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtEQUF1QixHQUF2QixVQUF3QixpQkFBdUI7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFpQzthQUM3QyxPQUFPLENBQUMsdUJBQXVCLENBQUM7YUFDaEMsY0FBYyxDQUFDLGlCQUFpQixDQUFDO2FBQ2pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx5REFBOEIsR0FBOUIsVUFBK0IsT0FBc0M7UUFDbkUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQzthQUN0RCxPQUFPLENBQUMsK0JBQStCLENBQUM7YUFDeEMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxtREFBd0IsR0FBeEI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWlDO2FBQzdDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQzthQUNoQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNENBQWlCLEdBQWpCLFVBQWtCLFdBQWlCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMkI7YUFDdkMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ3pCLGNBQWMsQ0FBQyxXQUFXLENBQUM7YUFDM0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsNkNBQWtCLEdBQWxCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEyQjthQUN2QyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7YUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILHNEQUEyQixHQUEzQixVQUE0QixhQUFtQixFQUFFLEtBQWEsRUFBRSxHQUFXO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMkM7YUFDdkQsT0FBTyxDQUFDLGlDQUFpQyxDQUFDO2FBQzFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO2FBQzdDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO2FBQzdCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO2FBQ3pCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLGFBQW1CLEVBQUUsT0FBYTtRQUNuRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXlDO2FBQ3JELE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsYUFBYSxDQUFDO2FBQzdCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscURBQTBCLEdBQTFCLFVBQTJCLGFBQW1CO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBc0M7YUFDbEQsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxhQUFhLENBQUM7YUFDN0IsY0FBYyxDQUFDLHFCQUFxQixDQUFDO2FBQ3JDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNEQUEyQixHQUEzQjtRQUNFLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBNkI7YUFDbEQsT0FBTyxDQUFDLG1DQUFtQyxDQUFDO2FBQzVDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDBEQUErQixHQUEvQjtRQUNFLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBeUM7YUFDOUQsT0FBTyxDQUFDLHVDQUF1QyxDQUFDO2FBQ2hELFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILHNFQUEyQyxHQUEzQyxVQUE0QyxRQUFjO1FBQ3hELE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBeUM7YUFDOUQsT0FBTyxDQUFDLHVDQUF1QyxDQUFDO2FBQ2hELGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDeEIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtEQUF1QixHQUF2QixVQUF3QixXQUFtQjtRQUN6QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTJCO2FBQ3ZDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQzthQUNuQyxhQUFhLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQzthQUN6QyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDhDQUFtQixHQUFuQixVQUFvQixhQUFxQixFQUFFLE1BQVk7UUFDckQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQzthQUMzRCxPQUFPLENBQUMscUNBQXFDLENBQUM7YUFDOUMsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxpREFBc0IsR0FBdEI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdDO2FBQzVDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQzthQUMvQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnREFBcUIsR0FBckI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXlCO2FBQ3JDLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCwrQ0FBb0IsR0FBcEIsVUFBcUIsTUFBYyxFQUFFLEtBQWE7UUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG1EQUF3QixHQUF4QixVQUF5QixPQUFhO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0M7YUFDNUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdEQUFxQixHQUFyQixVQUFzQixNQUFZO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0M7YUFDNUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQy9CLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsK0NBQW9CLEdBQXBCLFVBQXFCLE1BQVksRUFBRSxhQUFtQjtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdDO2FBQzVDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxhQUFhLENBQUM7YUFDN0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILHFEQUEwQixHQUExQixVQUEyQixhQUFtQixFQUFFLEtBQWEsRUFBRSxHQUFXO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBc0M7YUFDbEQsT0FBTyxDQUFDLDBCQUEwQixDQUFDO2FBQ25DLGFBQWEsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO2FBQzdDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO2FBQzdCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO2FBQ3pCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnREFBcUIsR0FBckI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzthQUM5QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxzREFBMkIsR0FBM0I7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXFDO2FBQ2pELE9BQU8sQ0FBQywyQkFBMkIsQ0FBQzthQUNwQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwrQ0FBb0IsR0FBcEI7UUFDRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWM7YUFDbkMsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwrQ0FBb0IsR0FBcEI7UUFDRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQXdCO2FBQzdDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMERBQStCLEdBQS9CO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx5Q0FBYyxHQUFkLFVBQWUsUUFBYztRQUMzQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUN4QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwwQ0FBZSxHQUFmO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx3Q0FBYSxHQUFiLFVBQWMsT0FBYTtRQUN6QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXlCO2FBQ3JDLE9BQU8sQ0FBQyxZQUFZLENBQUM7YUFDckIsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx5Q0FBYyxHQUFkO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF1QjthQUNuQyxPQUFPLENBQUMsWUFBWSxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw4Q0FBbUIsR0FBbkI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQThCO2FBQzFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQzthQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseURBQThCLEdBQTlCLFVBQStCLE1BQVk7UUFDekMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QzthQUNyRCxPQUFPLENBQUMsb0NBQW9DLENBQUM7YUFDN0MsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxrREFBdUIsR0FBdkIsVUFBd0IsTUFBWSxFQUFFLGFBQW1CLEVBQUUsZ0JBQXdCO1FBQ2pGLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBbUM7YUFDL0MsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQy9CLGFBQWEsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO2FBQzdDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQzthQUNoQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsdUNBQVksR0FBWixVQUFhLE1BQVk7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3BCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw2Q0FBa0IsR0FBbEIsVUFBbUIsWUFBa0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE0QjthQUN4QyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLFlBQVksQ0FBQzthQUM1QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG1EQUF3QixHQUF4QixVQUF5QixrQkFBd0I7UUFDL0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFrQzthQUM5QyxPQUFPLENBQUMseUJBQXlCLENBQUM7YUFDbEMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO2FBQ2xDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG9EQUF5QixHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBa0M7YUFDOUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDO2FBQ2xDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDhDQUFtQixHQUFuQjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNEI7YUFDeEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gseURBQThCLEdBQTlCLFVBQStCLGdCQUF3QjtRQUNyRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdCO2FBQ3BDLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDcEIsYUFBYSxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDO2FBQ25ELFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsS0FBYTtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdCO2FBQ3BDLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDcEIsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdEQUFxQixHQUFyQixVQUFzQixPQUFlO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixhQUFhLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQzthQUNqQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGdFQUFxQyxHQUFyQyxVQUFzQyxPQUFlLEVBQUUsWUFBMkI7UUFDaEYsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3BCLGFBQWEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO2FBQ2pDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDO2FBQzNDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpREFBc0IsR0FBdEIsVUFBdUIsUUFBZ0I7UUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3BCLGFBQWEsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDO2FBQ25DLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsdURBQTRCLEdBQTVCLFVBQTZCLGNBQXNCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixhQUFhLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDO2FBQy9DLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLFNBQWlCLEVBQUUsYUFBcUIsRUFBRSxTQUFpQjtRQUMxRSxJQUFJLElBQUksR0FBRyxJQUFJLHFCQUFlLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWM7YUFDbkMsT0FBTyxDQUFDLDBCQUEwQixDQUFDO2FBQ25DLFlBQVksQ0FBQyxJQUFJLENBQUM7YUFDbEIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxzREFBMkIsR0FBM0IsVUFBNEIsU0FBaUI7UUFDM0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxxQkFBZSxFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFjO2FBQ25DLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQzthQUNuQyxZQUFZLENBQUMsSUFBSSxDQUFDO2FBQ2xCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwrQ0FBb0IsR0FBcEIsVUFBcUIsTUFBWTtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQzthQUM1QixjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsYUFBbUI7UUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE2QjthQUN6QyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsK0NBQW9CLEdBQXBCLFVBQXFCLE1BQVk7UUFDL0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE2QjthQUN6QyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDBEQUErQixHQUEvQixVQUFnQyxVQUFrQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWdDO2FBQ3JELE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO2FBQ3pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDJDQUFnQixHQUFoQixVQUFpQixrQkFBd0IsRUFBRSxzQkFBOEIsRUFBRSxNQUFZO1FBQ3JGLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0M7YUFDcEQsT0FBTyxDQUFDLDZCQUE2QixDQUFDO2FBQ3RDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQzthQUN2RCxhQUFhLENBQUMsd0JBQXdCLEVBQUUsc0JBQXNCLENBQUM7YUFDL0QsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxvREFBeUIsR0FBekIsVUFBMEIsa0JBQXdCLEVBQUUsTUFBWTtRQUM5RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdDO2FBQ3BELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQzthQUN0QyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLENBQUM7YUFDdkQsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxrREFBdUIsR0FBdkIsVUFBd0IsYUFBbUIsRUFBRSxNQUFZLEVBQUUsS0FBYSxFQUFFLEdBQVc7UUFDbkYsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCwyREFBZ0MsR0FBaEMsVUFBaUMsYUFBbUIsRUFBRSxPQUFlLEVBQUUsS0FBYSxFQUFFLEdBQVc7UUFDL0YsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7YUFDakMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsMEVBQStDLEdBQS9DLFVBQWdELGFBQW1CLEVBQUUsT0FBZSxFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsWUFBMkI7UUFDM0ksT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7YUFDakMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDN0IsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDekIsYUFBYSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUM7YUFDM0MsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsbURBQXdCLEdBQXhCLFVBQXlCLE1BQVksRUFBRSxNQUFjLEVBQUUsS0FBYTtRQUNsRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzthQUNqQyxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQzthQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsK0NBQW9CLEdBQXBCLFVBQXFCLFVBQWtCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBd0I7YUFDN0MsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO2FBQ3pDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDBDQUFlLEdBQWY7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTJCO2FBQ3ZDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzthQUM5QixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscURBQTBCLEdBQTFCLFVBQTJCLEVBQVE7UUFDakMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFzQzthQUNsRCxPQUFPLENBQUMsZUFBZSxDQUFDO2FBQ3hCLGNBQWMsQ0FBQyxFQUFFLENBQUM7YUFDbEIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDZEQUFrQyxHQUFsQyxVQUFtQyxNQUFZO1FBQzdDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBc0M7YUFDbEQsT0FBTyxDQUFDLGVBQWUsQ0FBQzthQUN4QixhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMENBQWUsR0FBZixVQUFnQixTQUFlO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUI7YUFDckMsT0FBTyxDQUFDLGNBQWMsQ0FBQzthQUN2QixjQUFjLENBQUMsU0FBUyxDQUFDO2FBQ3pCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxvREFBeUIsR0FBekIsVUFBMEIsbUJBQXlCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBcUM7YUFDakQsT0FBTyxDQUFDLGlDQUFpQyxDQUFDO2FBQzFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQzthQUNuQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0RBQXVCLEdBQXZCLFVBQXdCLGlCQUF1QjtRQUM3QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQW1DO2FBQy9DLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQzthQUN4QyxjQUFjLENBQUMsaUJBQWlCLENBQUM7YUFDakMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMkNBQWdCLEdBQWhCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QjthQUNyQyxPQUFPLENBQUMsY0FBYyxDQUFDO2FBQ3ZCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQThCRztJQUNILDZDQUFrQixHQUFsQixVQUFtQixLQUFhLEVBQUUsTUFBWSxFQUFFLGFBQW1CO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO2FBQzdCLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQy9CLGFBQWEsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO2FBQzdDLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpREFBc0IsR0FBdEIsVUFBdUIsT0FBYTtRQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxvREFBeUIsR0FBekIsVUFBMEIsS0FBYTtRQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQzthQUM3QixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNkRBQWtDLEdBQWxDLFVBQW1DLGFBQW1CO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGFBQWEsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO2FBQzdDLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDcEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxzREFBMkIsR0FBM0IsVUFBNEIsTUFBWTtRQUN0QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUMvQixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG9FQUF5QyxHQUF6QyxVQUEwQyxNQUFZLEVBQUUsYUFBbUI7UUFDekUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDL0IsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7YUFDN0MsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNwQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx5REFBOEIsR0FBOUIsVUFBK0IsT0FBa0M7UUFDL0QsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNENBQWlCLEdBQWpCLFVBQWtCLGFBQW1CO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBYzthQUMxQixPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3BCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLE9BQWlDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBcUM7YUFDakQsT0FBTyxDQUFDLHlCQUF5QixDQUFDO2FBQ2xDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDBDQUFlLEdBQWYsVUFBZ0IsT0FBOEI7UUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFrQzthQUM5QyxPQUFPLENBQUMsOEJBQThCLENBQUM7YUFDdkMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUNBQWMsR0FBZCxVQUFlLE9BQTZCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBaUM7YUFDN0MsT0FBTyxDQUFDLHFCQUFxQixDQUFDO2FBQzlCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILCtDQUFvQixHQUFwQixVQUFxQixPQUFtQztRQUN0RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXVDO2FBQ25ELE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQzthQUNyQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx5Q0FBYyxHQUFkLFVBQWUsT0FBNEI7UUFDekMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQzthQUM1QyxPQUFPLENBQUMsb0JBQW9CLENBQUM7YUFDN0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsOENBQW1CLEdBQW5CLFVBQW9CLEdBQWtCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0M7YUFDNUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2FBQzdCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO2FBQ3pCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw2Q0FBa0IsR0FBbEIsVUFBbUIsT0FBaUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFxQzthQUNqRCxPQUFPLENBQUMsMEJBQTBCLENBQUM7YUFDbkMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNENBQWlCLEdBQWpCLFVBQWtCLE9BQWdDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBb0M7YUFDaEQsT0FBTyxDQUFDLHlCQUF5QixDQUFDO2FBQ2xDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDBDQUFlLEdBQWYsVUFBZ0IsT0FBOEI7UUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFrQzthQUM5QyxPQUFPLENBQUMsOEJBQThCLENBQUM7YUFDdkMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLE9BQWlDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBcUM7YUFDakQsT0FBTyxDQUFDLDBCQUEwQixDQUFDO2FBQ25DLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHVDQUFZLEdBQVosVUFBYSxPQUEyQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQzthQUM1QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxxREFBMEIsR0FBMUIsVUFBMkIsT0FBeUM7UUFDbEUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUE2QzthQUN6RCxPQUFPLENBQUMsb0JBQW9CLENBQUM7YUFDN0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0RBQXVCLEdBQXZCLFVBQXdCLE9BQXNDO1FBQzVELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEM7YUFDdEQsT0FBTyxDQUFDLCtCQUErQixDQUFDO2FBQ3hDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHFDQUFVLEdBQVYsVUFBVyxPQUF5QjtRQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTZCO2FBQ3pDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQzthQUMxQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx3Q0FBYSxHQUFiLFVBQWMsT0FBNEI7UUFDeEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQzthQUM1QyxPQUFPLENBQUMsb0JBQW9CLENBQUM7YUFDN0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLE9BQWlDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBcUM7YUFDakQsT0FBTyxDQUFDLGlDQUFpQyxDQUFDO2FBQzFDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHdDQUFhLEdBQWIsVUFBYyxPQUE0QjtRQUN4QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdDO2FBQzVDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQzthQUM3QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx1Q0FBWSxHQUFaLFVBQWEsT0FBMkI7UUFDdEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLE9BQWlDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBcUM7YUFDakQsT0FBTyxDQUFDLDBCQUEwQixDQUFDO2FBQ25DLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsc0NBQVcsR0FBWCxVQUFZLEdBQWtCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO2FBQ3pCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwyQ0FBZ0IsR0FBaEIsVUFBaUIsR0FBa0I7UUFDakMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw2Q0FBa0IsR0FBbEIsVUFBbUIsT0FBc0I7UUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsbURBQXdCLEdBQXhCLFVBQXlCLE9BQXNCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlEQUFzQixHQUF0QixVQUF1QixPQUFxQztRQUMxRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXlDO2FBQ3JELE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQzthQUMvQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx5Q0FBYyxHQUFkLFVBQWUsT0FBNkI7UUFDMUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFpQzthQUM3QyxPQUFPLENBQUMscUJBQXFCLENBQUM7YUFDOUIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxvQ0FBUyxHQUFULFVBQVUsZUFBcUIsRUFBRSxPQUFvQjtRQUNuRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQXdCO2FBQ3BDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQzthQUMxQixjQUFjLENBQUMsZUFBZSxDQUFDO2FBQy9CLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlEQUFzQixHQUF0QixVQUF1QixPQUEyQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQzthQUNuQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCwrQ0FBb0IsR0FBcEIsVUFBcUIsT0FBZ0M7UUFDbkQsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFnQjthQUNyQyxPQUFPLENBQUMsd0JBQXdCLENBQUM7YUFDakMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCw0Q0FBaUIsR0FBakIsVUFBa0IsT0FBNkI7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFnQjthQUM1QixPQUFPLENBQUMsc0JBQXNCLENBQUM7YUFDL0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNERBQWlDLEdBQWpDLFVBQWtDLE9BQTZCO1FBQzdELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLHNCQUFzQixDQUFDO2FBQy9CLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsb0RBQXlCLEdBQXpCLFVBQTBCLFdBQW1CO1FBQzNDLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBZ0I7YUFDckMsVUFBVSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUM7YUFDeEMsT0FBTyxDQUFDLHNCQUFzQixDQUFDO2FBQy9CLGNBQWMsQ0FBQyxXQUFXLENBQUM7YUFDM0IsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCwrREFBb0MsR0FBcEMsVUFBcUMsV0FBbUIsRUFBRSxPQUE2QjtRQUNyRixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWdCO2FBQ3JDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQzthQUMvQixjQUFjLENBQUMsV0FBVyxDQUFDO2FBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDZDQUFrQixHQUFsQixVQUFtQixPQUEwQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQzthQUNwQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gscURBQTBCLEdBQTFCLFVBQTJCLE9BQTBDO1FBQ25FLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBOEM7YUFDMUQsT0FBTyxDQUFDLDhCQUE4QixDQUFDO2FBQ3ZDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxpREFBc0IsR0FBdEIsVUFBdUIsT0FBaUM7UUFDdEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFxQzthQUNqRCxPQUFPLENBQUMseUJBQXlCLENBQUM7YUFDbEMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCw4Q0FBbUIsR0FBbkIsVUFBb0IsT0FBOEI7UUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFrQzthQUM5QyxPQUFPLENBQUMsdUJBQXVCLENBQUM7YUFDaEMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDhDQUFtQixHQUFuQixVQUFvQixPQUEyQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQzthQUNyQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw2Q0FBa0IsR0FBbEIsVUFBbUIsT0FBNkI7UUFDOUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFpQzthQUM3QyxPQUFPLENBQUMscUJBQXFCLENBQUM7YUFDOUIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsb0RBQXlCLEdBQXpCLFVBQTBCLE9BQXFDO1FBQzdELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUM7YUFDckQsT0FBTyxDQUFDLDhCQUE4QixDQUFDO2FBQ3ZDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlDQUFjLEdBQWQsVUFBZSxPQUE4QjtRQUMzQyxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQXlCO2FBQzlDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQzthQUNoQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsdUNBQVksR0FBWixVQUFhLEtBQVcsRUFBRSxPQUFzQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTBCO2FBQ3RDLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDdkIsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUNyQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsNENBQWlCLEdBQWpCLFVBQWtCLGFBQW1CLEVBQUUsT0FBMkI7UUFDaEUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM3QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILGdEQUFxQixHQUFyQixVQUFzQixhQUFtQixFQUFFLE1BQVksRUFBRSxPQUEyQjtRQUNsRixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsYUFBYSxDQUFDO2FBQzdCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsY0FBYyxDQUFDLE1BQU0sQ0FBQzthQUN0QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsMENBQWUsR0FBZixVQUFnQixXQUFpQixFQUFFLE9BQXlCO1FBQzFELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNkI7YUFDekMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ3pCLGNBQWMsQ0FBQyxXQUFXLENBQUM7YUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHdDQUFhLEdBQWIsVUFBYyxTQUFlLEVBQUUsT0FBdUI7UUFDcEQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEyQjthQUN2QyxPQUFPLENBQUMsY0FBYyxDQUFDO2FBQ3ZCLGNBQWMsQ0FBQyxTQUFTLENBQUM7YUFDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDhDQUFtQixHQUFuQixVQUFvQixlQUFxQixFQUFFLE9BQTZCO1FBQ3RFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBaUM7YUFDN0MsT0FBTyxDQUFDLHFCQUFxQixDQUFDO2FBQzlCLGNBQWMsQ0FBQyxlQUFlLENBQUM7YUFDL0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHVDQUFZLEdBQVosVUFBYSxRQUFjLEVBQUUsT0FBc0I7UUFDakQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDeEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDJDQUFnQixHQUFoQixVQUFpQixZQUFrQixFQUFFLE9BQTBCO1FBQzdELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBOEI7YUFDMUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxxREFBMEIsR0FBMUIsVUFBMkIsWUFBa0IsRUFBRSxZQUFrQixFQUFFLE9BQTBCO1FBQzNGLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBOEI7YUFDMUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxZQUFZLENBQUM7YUFDNUIsY0FBYyxDQUFDLFlBQVksQ0FBQzthQUM1QixjQUFjLENBQUMsWUFBWSxDQUFDO2FBQzVCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx1Q0FBWSxHQUFaLFVBQWEsUUFBYyxFQUFFLE9BQXNCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDeEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHFDQUFVLEdBQVYsVUFBVyxNQUFZLEVBQUUsT0FBb0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF3QjthQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3BCLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDBDQUFlLEdBQWYsVUFBZ0IsT0FBYSxFQUFFLE9BQXlCO1FBQ3RELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBNkI7YUFDekMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO2FBQzFCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHNDQUFXLEdBQVgsVUFBWSxPQUFhLEVBQUUsT0FBcUI7UUFDOUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF5QjthQUNyQyxPQUFPLENBQUMsWUFBWSxDQUFDO2FBQ3JCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLE9BQXNCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO2FBQzVCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxvREFBeUIsR0FBekIsVUFBMEIsbUJBQXlCLEVBQUUsT0FBbUM7UUFDdEYsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF1QzthQUNuRCxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQzthQUNuQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsaURBQXNCLEdBQXRCLFVBQXVCLGtCQUF3QixFQUFFLE9BQWdDO1FBQy9FLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBb0M7YUFDaEQsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQzthQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw2Q0FBa0IsR0FBbEIsVUFBbUIsT0FBMkI7UUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUErQjthQUMzQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG9DQUFTLEdBQVQsVUFBVSxLQUFXLEVBQUUsT0FBbUI7UUFDeEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUF1QjthQUNuQyxPQUFPLENBQUMsVUFBVSxDQUFDO2FBQ25CLGNBQWMsQ0FBQyxLQUFLLENBQUM7YUFDckIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHVDQUFZLEdBQVosVUFBYSxRQUFjLEVBQUUsT0FBc0I7UUFDakQsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEwQjthQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RCLGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDeEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGdEQUFxQixHQUFyQixVQUFzQixpQkFBdUIsRUFBRSxPQUErQjtRQUM1RSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQW1DO2FBQy9DLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQzthQUNoQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7YUFDakMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDBDQUFlLEdBQWYsVUFBZ0IsV0FBaUIsRUFBRSxPQUF5QjtRQUMxRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQTZCO2FBQ3pDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixjQUFjLENBQUMsV0FBVyxDQUFDO2FBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsMkNBQWdCLEdBQWhCLFVBQWlCLGFBQW1CLEVBQUUsT0FBYSxFQUFFLE9BQXFDO1FBQ3hGLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUM7YUFDckQsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQzNCLGNBQWMsQ0FBQyxhQUFhLENBQUM7YUFDN0IsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUN2QixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw2Q0FBa0IsR0FBbEIsVUFBbUIsTUFBWSxFQUFFLE9BQTRCO1FBQzNELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0M7YUFDNUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDdEIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsb0RBQXlCLEdBQXpCLFVBQTBCLE9BQW1DO1FBQzNELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBdUM7YUFDbkQsT0FBTyxDQUFDLDJCQUEyQixDQUFDO2FBQ3BDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx1Q0FBWSxHQUFaLFVBQWEsUUFBYyxFQUFFLE9BQXNCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMEI7YUFDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxzQ0FBVyxHQUFYLFVBQVksT0FBYSxFQUFFLE9BQXFCO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBeUI7YUFDckMsT0FBTyxDQUFDLFlBQVksQ0FBQzthQUNyQixjQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3ZCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQ0FBVSxHQUFWLFVBQVcsTUFBWSxFQUFFLE9BQW9CO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBd0I7YUFDcEMsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixjQUFjLENBQUMsTUFBTSxDQUFDO2FBQ3RCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCwyQ0FBZ0IsR0FBaEIsVUFBaUIsWUFBa0IsRUFBRSxPQUEwQjtRQUM3RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQThCO2FBQzFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUMzQixjQUFjLENBQUMsWUFBWSxDQUFDO2FBQzVCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxpREFBc0IsR0FBdEIsVUFBdUIsa0JBQXdCLEVBQUUsT0FBZ0M7UUFDL0UsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFvQzthQUNoRCxPQUFPLENBQUMseUJBQXlCLENBQUM7YUFDbEMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO2FBQ2xDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw0Q0FBaUIsR0FBakIsVUFBa0IsYUFBbUIsRUFBRSxPQUEyQjtRQUNoRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQStCO2FBQzNDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQzthQUM1QixjQUFjLENBQUMsYUFBYSxDQUFDO2FBQzdCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx3Q0FBYSxHQUFiLFVBQWMsU0FBZSxFQUFFLE9BQXVCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBMkI7YUFDdkMsT0FBTyxDQUFDLGNBQWMsQ0FBQzthQUN2QixjQUFjLENBQUMsU0FBUyxDQUFDO2FBQ3pCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNqQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw0Q0FBaUIsR0FBakIsVUFBa0IsUUFBYyxFQUFFLE9BQTJCO1FBQzNELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLGNBQWMsQ0FBQyxPQUFPLENBQUM7YUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUNyQixVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2xCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCx5Q0FBYyxHQUFkLFVBQWUsU0FBaUIsRUFBRSxTQUFpQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWM7YUFDbkMsT0FBTyxDQUFDLHlCQUF5QixDQUFDO2FBQ2xDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDO2FBQ3JDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDO2FBQ3JDLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDakIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxzQ0FBVyxHQUFYLFVBQVksVUFBa0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUEwQjthQUMvQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsaUJBQWlCLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQzthQUN6QyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQ2pCLEVBQUUsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxrQ0FBTyxHQUFQLFVBQVEsT0FBdUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUEyQjthQUN2QyxPQUFPLENBQUMsZUFBZSxDQUFDO2FBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsc0NBQVcsR0FBWCxVQUFZLGNBQXNCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBZ0I7YUFDckMsVUFBVSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUM7YUFDeEMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLGNBQWMsQ0FBQyxjQUFjLENBQUM7YUFDOUIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsNkNBQWtCLEdBQWxCLFVBQW1CLE9BQTJCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBZ0I7YUFDckMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gscURBQTBCLEdBQTFCLFVBQTJCLE9BQTJCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBZ0I7YUFDNUIsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQ2pDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlDQUFjLEdBQWQsVUFBZSxPQUFzQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQWdCO2FBQzVCLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQzthQUMvQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDZDQUFrQixHQUFsQixVQUFtQixjQUFzQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWdCO2FBQ3JDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDO2FBQ3hDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQzthQUN4QyxjQUFjLENBQUMsY0FBYyxDQUFDO2FBQzlCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILGlEQUFzQixHQUF0QixVQUF1QixPQUFrQztRQUN2RCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQWdCO2FBQ3JDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQzthQUN4QyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBR0Q7OzRIQUV3SDtJQUV4SDs7Ozs7T0FLRztJQUNLLGdDQUFLLEdBQWI7UUFDRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQVc7YUFDekIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyx5Q0FBYyxHQUF0QjtRQUNFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNEO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtZQUM1QixNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMxQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDSCx1QkFBQztBQUFELENBaG1MQSxBQWdtTEMsSUFBQTtBQWhtTFksNENBQWdCO0FBa21MN0Isa0JBQWUsZ0JBQWdCLENBQUM7QUFzR2hDOzs7O0dBSUc7QUFDSCxJQUFZLFNBY1g7QUFkRCxXQUFZLFNBQVM7SUFDbkIsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0lBQ2YsMEJBQWEsQ0FBQTtBQUNmLENBQUMsRUFkVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQWNwQjtBQW9IRCwyQ0FBMkM7QUFDM0MsSUFBWSxXQUlYO0FBSkQsV0FBWSxXQUFXO0lBQ3JCLDhCQUFlLENBQUE7SUFDZiwwQ0FBMkIsQ0FBQTtJQUMzQixvQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSlcsV0FBVyxHQUFYLG1CQUFXLEtBQVgsbUJBQVcsUUFJdEI7QUFFRCxJQUFZLGdCQUdYO0FBSEQsV0FBWSxnQkFBZ0I7SUFDMUIsbUNBQWUsQ0FBQTtJQUNmLHlDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxnQkFBZ0IsR0FBaEIsd0JBQWdCLEtBQWhCLHdCQUFnQixRQUczQjtBQW9CRCxJQUFZLGtCQUdYO0FBSEQsV0FBWSxrQkFBa0I7SUFDNUIseURBQW1DLENBQUE7SUFDbkMsdURBQWlDLENBQUE7QUFDbkMsQ0FBQyxFQUhXLGtCQUFrQixHQUFsQiwwQkFBa0IsS0FBbEIsMEJBQWtCLFFBRzdCO0FBMEJELElBQVksb0JBR1g7QUFIRCxXQUFZLG9CQUFvQjtJQUM5QiwrQ0FBdUIsQ0FBQTtJQUN2Qiw2Q0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSFcsb0JBQW9CLEdBQXBCLDRCQUFvQixLQUFwQiw0QkFBb0IsUUFHL0I7QUFtREQ7O0dBRUc7QUFDSCxJQUFZLGlDQUlYO0FBSkQsV0FBWSxpQ0FBaUM7SUFDM0MsZ0RBQVcsQ0FBQTtJQUNYLGtEQUFhLENBQUE7SUFDYixrREFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpXLGlDQUFpQyxHQUFqQyx5Q0FBaUMsS0FBakMseUNBQWlDLFFBSTVDO0FBaUtEOzs7O0dBSUc7QUFDSCxJQUFZLCtCQUtYO0FBTEQsV0FBWSwrQkFBK0I7SUFDekMsZ0RBQWEsQ0FBQTtJQUNiLHdEQUFxQixDQUFBO0lBQ3JCLG9EQUFpQixDQUFBO0lBQ2pCLDREQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMVywrQkFBK0IsR0FBL0IsdUNBQStCLEtBQS9CLHVDQUErQixRQUsxQztBQUVEOzs7O0dBSUc7QUFDSCxJQUFZLGVBTVg7QUFORCxXQUFZLGVBQWU7SUFDekIsa0NBQWUsQ0FBQTtJQUNmLGdDQUFhLENBQUE7SUFDYixrREFBK0IsQ0FBQTtJQUMvQixzREFBbUMsQ0FBQTtJQUNuQyxnQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQU5XLGVBQWUsR0FBZix1QkFBZSxLQUFmLHVCQUFlLFFBTTFCO0FBZ0ZEOztHQUVHO0FBQ0gsSUFBWSxxQkFFWDtBQUZELFdBQVkscUJBQXFCO0lBQy9CLDhEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFGVyxxQkFBcUIsR0FBckIsNkJBQXFCLEtBQXJCLDZCQUFxQixRQUVoQztBQUVEOzs7O0dBSUc7QUFDSCxJQUFZLHVCQUdYO0FBSEQsV0FBWSx1QkFBdUI7SUFDakMsZ0RBQXFCLENBQUE7SUFDckIsMERBQStCLENBQUE7QUFDakMsQ0FBQyxFQUhXLHVCQUF1QixHQUF2QiwrQkFBdUIsS0FBdkIsK0JBQXVCLFFBR2xDO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksaUNBSVg7QUFKRCxXQUFZLGlDQUFpQztJQUMzQyxnREFBVyxDQUFBO0lBQ1gsMERBQXFCLENBQUE7SUFDckIsb0VBQStCLENBQUE7QUFDakMsQ0FBQyxFQUpXLGlDQUFpQyxHQUFqQyx5Q0FBaUMsS0FBakMseUNBQWlDLFFBSTVDO0FBV0QsSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3ZCLHNDQUFxQixDQUFBO0lBQ3JCLDBDQUF5QixDQUFBO0lBQ3pCLDBDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFKVyxhQUFhLEdBQWIscUJBQWEsS0FBYixxQkFBYSxRQUl4QjtBQW1LRDs7R0FFRztBQUNILElBQVksc0JBTVg7QUFORCxXQUFZLHNCQUFzQjtJQUNoQyx1Q0FBYSxDQUFBO0lBQ2IsbURBQXlCLENBQUE7SUFDekIsNkRBQW1DLENBQUE7SUFDbkMsdURBQTZCLENBQUE7SUFDN0IsMkRBQWlDLENBQUE7QUFDbkMsQ0FBQyxFQU5XLHNCQUFzQixHQUF0Qiw4QkFBc0IsS0FBdEIsOEJBQXNCLFFBTWpDO0FBMkJEOzs7O0dBSUc7QUFDSCxJQUFZLHNCQUtYO0FBTEQsV0FBWSxzQkFBc0I7SUFDaEMsaURBQXVCLENBQUE7SUFDdkIsNkVBQW1ELENBQUE7SUFDbkQsaURBQXVCLENBQUE7SUFDdkIsNkVBQW1ELENBQUE7QUFDckQsQ0FBQyxFQUxXLHNCQUFzQixHQUF0Qiw4QkFBc0IsS0FBdEIsOEJBQXNCLFFBS2pDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGFBS1g7QUFMRCxXQUFZLGFBQWE7SUFDdkIsd0RBQXVDLENBQUE7SUFDdkMsd0RBQXVDLENBQUE7SUFDdkMsc0NBQXFCLENBQUE7SUFDckIsMERBQXlDLENBQUE7QUFDM0MsQ0FBQyxFQUxXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBS3hCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLG9CQUtYO0FBTEQsV0FBWSxvQkFBb0I7SUFDOUIseURBQWlDLENBQUE7SUFDakMsNkNBQXFCLENBQUE7SUFDckIsMkNBQW1CLENBQUE7SUFDbkIsaURBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUxXLG9CQUFvQixHQUFwQiw0QkFBb0IsS0FBcEIsNEJBQW9CLFFBSy9CO0FBNkNEOztHQUVHO0FBQ0gsSUFBWSwwQkFJWDtBQUpELFdBQVksMEJBQTBCO0lBQ3BDLG1EQUFxQixDQUFBO0lBQ3JCLHlEQUEyQixDQUFBO0lBQzNCLG1GQUFxRCxDQUFBO0FBQ3ZELENBQUMsRUFKVywwQkFBMEIsR0FBMUIsa0NBQTBCLEtBQTFCLGtDQUEwQixRQUlyQztBQTJCRDs7OztHQUlHO0FBQ0gsSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3ZCLDBDQUF5QixDQUFBO0lBQ3pCLG9DQUFtQixDQUFBO0lBQ25CLDhCQUFhLENBQUE7QUFDZixDQUFDLEVBSlcsYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFJeEI7QUEwRUQ7Ozs7R0FJRztBQUNILElBQVksYUFHWDtBQUhELFdBQVksYUFBYTtJQUN2QixrQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSFcsYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFHeEI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3ZCLGtDQUFpQixDQUFBO0lBQ2pCLG9DQUFtQixDQUFBO0lBQ25CLHNDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFKVyxhQUFhLEdBQWIscUJBQWEsS0FBYixxQkFBYSxRQUl4QjtBQUVEOzs7OztHQUtHO0FBQ0gsSUFBWSx1QkFVWDtBQVZELFdBQVksdUJBQXVCO0lBQ2pDLG9EQUF5QixDQUFBO0lBQ3pCLG9EQUF5QixDQUFBO0lBQ3pCLG9EQUF5QixDQUFBO0lBQ3pCLGtEQUF1QixDQUFBO0lBQ3ZCLGtEQUF1QixDQUFBO0lBQ3ZCLGtEQUF1QixDQUFBO0lBQ3ZCLDRDQUFpQixDQUFBO0lBQ2pCLDRDQUFpQixDQUFBO0lBQ2pCLDRDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFWVyx1QkFBdUIsR0FBdkIsK0JBQXVCLEtBQXZCLCtCQUF1QixRQVVsQztBQUVEOzs7O0dBSUc7QUFDSCxJQUFZLGlCQVVYO0FBVkQsV0FBWSxpQkFBaUI7SUFDM0IsMENBQXFCLENBQUE7SUFDckIsa0NBQWEsQ0FBQTtJQUNiLGtDQUFhLENBQUE7SUFDYixrQ0FBYSxDQUFBO0lBQ2Isc0NBQWlCLENBQUE7SUFDakIsa0NBQWEsQ0FBQTtJQUNiLHdDQUFtQixDQUFBO0lBQ25CLG9DQUFlLENBQUE7SUFDZiw0Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBVlcsaUJBQWlCLEdBQWpCLHlCQUFpQixLQUFqQix5QkFBaUIsUUFVNUI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxXQU1YO0FBTkQsV0FBWSxXQUFXO0lBQ3JCLDZCQUFjLENBQUE7SUFDZCx3QkFBUyxDQUFBO0lBQ1Qsd0JBQVMsQ0FBQTtJQUNULHdCQUFTLENBQUE7SUFDVCw4QkFBZSxDQUFBO0FBQ2pCLENBQUMsRUFOVyxXQUFXLEdBQVgsbUJBQVcsS0FBWCxtQkFBVyxRQU10QjtBQW1ERCxJQUFZLFVBVVg7QUFWRCxXQUFZLFVBQVU7SUFDcEIsaUNBQW1CLENBQUE7SUFDbkIsaUNBQW1CLENBQUE7SUFDbkIsK0JBQWlCLENBQUE7SUFDakIsK0JBQWlCLENBQUE7SUFDakIsNkJBQWUsQ0FBQTtJQUNmLCtCQUFpQixDQUFBO0lBQ2pCLCtCQUFpQixDQUFBO0lBQ2pCLHVCQUFTLENBQUE7SUFDVCxpQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBVlcsVUFBVSxHQUFWLGtCQUFVLEtBQVYsa0JBQVUsUUFVckI7QUEyR0QsSUFBWSxpQkFJWDtBQUpELFdBQVksaUJBQWlCO0lBQzNCLGtDQUFhLENBQUE7SUFDYixnQ0FBVyxDQUFBO0lBQ1gsZ0NBQVcsQ0FBQTtBQUNiLENBQUMsRUFKVyxpQkFBaUIsR0FBakIseUJBQWlCLEtBQWpCLHlCQUFpQixRQUk1QjtBQXdiRDs7OztHQUlHO0FBQ0gsSUFBWSxZQUlYO0FBSkQsV0FBWSxZQUFZO0lBQ3RCLDJDQUEyQixDQUFBO0lBQzNCLCtCQUFlLENBQUE7SUFDZiwrQkFBZSxDQUFBO0FBQ2pCLENBQUMsRUFKVyxZQUFZLEdBQVosb0JBQVksS0FBWixvQkFBWSxRQUl2QjtBQVdEOzs7O0dBSUc7QUFDSCxJQUFZLFNBd0RYO0FBeERELFdBQVksU0FBUztJQUNuQix5REFBNEMsQ0FBQTtJQUM1QywrREFBa0QsQ0FBQTtJQUNsRCx1Q0FBMEIsQ0FBQTtJQUMxQixnREFBbUMsQ0FBQTtJQUNuQyxnREFBbUMsQ0FBQTtJQUNuQyxtREFBc0MsQ0FBQTtJQUN0Qyx5Q0FBNEIsQ0FBQTtJQUM1QiwwREFBNkMsQ0FBQTtJQUM3Qyx5Q0FBNEIsQ0FBQTtJQUM1QiwwREFBNkMsQ0FBQTtJQUM3QyxnREFBbUMsQ0FBQTtJQUNuQyxpRUFBb0QsQ0FBQTtJQUNwRCxzREFBeUMsQ0FBQTtJQUN6Qyx1RUFBMEQsQ0FBQTtJQUMxRCxzREFBeUMsQ0FBQTtJQUN6Qyx1RUFBMEQsQ0FBQTtJQUMxRCx5Q0FBNEIsQ0FBQTtJQUM1QiwwREFBNkMsQ0FBQTtJQUM3Qyx1Q0FBMEIsQ0FBQTtJQUMxQixnREFBbUMsQ0FBQTtJQUNuQyx1Q0FBMEIsQ0FBQTtJQUMxQix3REFBMkMsQ0FBQTtJQUMzQywrQ0FBa0MsQ0FBQTtJQUNsQyx1Q0FBMEIsQ0FBQTtJQUMxQix3REFBMkMsQ0FBQTtJQUMzQyxrREFBcUMsQ0FBQTtJQUNyQyxzREFBeUMsQ0FBQTtJQUN6QyxxRUFBd0QsQ0FBQTtJQUN4RCx5RUFBNEQsQ0FBQTtJQUM1RCwyRUFBOEQsQ0FBQTtJQUM5RCwyRUFBOEQsQ0FBQTtJQUM5RCxrREFBcUMsQ0FBQTtJQUNyQyx5REFBNEMsQ0FBQTtJQUM1QyxvREFBdUMsQ0FBQTtJQUN2QywwREFBNkMsQ0FBQTtJQUM3Qyx3REFBMkMsQ0FBQTtJQUMzQywrREFBa0QsQ0FBQTtJQUNsRCxpRUFBb0QsQ0FBQTtJQUNwRCxxRUFBd0QsQ0FBQTtJQUN4RCx3REFBMkMsQ0FBQTtJQUMzQywrQ0FBa0MsQ0FBQTtJQUNsQyxnRUFBbUQsQ0FBQTtJQUNuRCxpRkFBb0UsQ0FBQTtJQUNwRSxnRUFBbUQsQ0FBQTtJQUNuRCxpRkFBb0UsQ0FBQTtJQUNwRSxnRUFBbUQsQ0FBQTtJQUNuRCxpRkFBb0UsQ0FBQTtJQUNwRSxvRUFBdUQsQ0FBQTtJQUN2RCxrRUFBcUQsQ0FBQTtJQUNyRCx3RUFBMkQsQ0FBQTtJQUMzRCx1Q0FBMEIsQ0FBQTtJQUMxQix3REFBMkMsQ0FBQTtJQUMzQywwQkFBYSxDQUFBO0lBQ2IsNERBQStDLENBQUE7SUFDL0Msd0RBQTJDLENBQUE7QUFDN0MsQ0FBQyxFQXhEVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQXdEcEI7QUFvQkQ7O0dBRUc7QUFDSCxJQUFZLFVBT1g7QUFQRCxXQUFZLFVBQVU7SUFDcEIsaUNBQW1CLENBQUE7SUFDbkIsNkJBQWUsQ0FBQTtJQUNmLDJCQUFhLENBQUE7SUFDYiw2QkFBZSxDQUFBO0lBQ2YsK0JBQWlCLENBQUE7SUFDakIsNkJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBUFcsVUFBVSxHQUFWLGtCQUFVLEtBQVYsa0JBQVUsUUFPckI7QUFnS0QsSUFBWSxVQUlYO0FBSkQsV0FBWSxVQUFVO0lBQ3BCLDZCQUFlLENBQUE7SUFDZiwyQkFBYSxDQUFBO0lBQ2IsNkJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSlcsVUFBVSxHQUFWLGtCQUFVLEtBQVYsa0JBQVUsUUFJckI7QUE0REQ7O0dBRUc7QUFDSCxJQUFZLFdBUVg7QUFSRCxXQUFZLFdBQVc7SUFDckIsb0NBQXFCLENBQUE7SUFDckIsZ0NBQWlCLENBQUE7SUFDakIsb0NBQXFCLENBQUE7SUFDckIsOEJBQWUsQ0FBQTtJQUNmLGdDQUFpQixDQUFBO0lBQ2pCLG9DQUFxQixDQUFBO0lBQ3JCLDRCQUFhLENBQUE7QUFDZixDQUFDLEVBUlcsV0FBVyxHQUFYLG1CQUFXLEtBQVgsbUJBQVcsUUFRdEI7QUFFRDs7R0FFRztBQUNILElBQVksWUFRWDtBQVJELFdBQVksWUFBWTtJQUN0Qiw2QkFBYSxDQUFBO0lBQ2IsbUNBQW1CLENBQUE7SUFDbkIsNkJBQWEsQ0FBQTtJQUNiLCtCQUFlLENBQUE7SUFDZixpQ0FBaUIsQ0FBQTtJQUNqQiwyQ0FBMkIsQ0FBQTtJQUMzQixpQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBUlcsWUFBWSxHQUFaLG9CQUFZLEtBQVosb0JBQVksUUFRdkI7QUFzQkQ7O0dBRUc7QUFDSCxJQUFZLG9CQUdYO0FBSEQsV0FBWSxvQkFBb0I7SUFDOUIscUNBQWEsQ0FBQTtJQUNiLHFDQUFhLENBQUE7QUFDZixDQUFDLEVBSFcsb0JBQW9CLEdBQXBCLDRCQUFvQixLQUFwQiw0QkFBb0IsUUFHL0I7QUF1REQ7O0dBRUc7QUFDSCxJQUFZLFFBS1g7QUFMRCxXQUFZLFFBQVE7SUFDbEIseUNBQTZCLENBQUE7SUFDN0IsbURBQXVDLENBQUE7SUFDdkMsbUNBQXVCLENBQUE7SUFDdkIsK0NBQW1DLENBQUE7QUFDckMsQ0FBQyxFQUxXLFFBQVEsR0FBUixnQkFBUSxLQUFSLGdCQUFRLFFBS25CO0FBMEVEOzs7Ozs7OztHQVFHO0FBQ0gsSUFBWSxTQVFYO0FBUkQsV0FBWSxTQUFTO0lBQ25CLHNEQUF5QyxDQUFBO0lBQ3pDLGtDQUFxQixDQUFBO0lBQ3JCLGtDQUFxQixDQUFBO0lBQ3JCLHNEQUF5QyxDQUFBO0lBQ3pDLDRDQUErQixDQUFBO0lBQy9CLGdDQUFtQixDQUFBO0lBQ25CLHlFQUE0RCxDQUFBO0FBQzlELENBQUMsRUFSVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQVFwQjtBQTJORDs7R0FFRztBQUNILElBQVksVUFRWDtBQVJELFdBQVksVUFBVTtJQUNwQix5QkFBVyxDQUFBO0lBQ1gsMkJBQWEsQ0FBQTtJQUNiLHlCQUFXLENBQUE7SUFDWCwrQkFBaUIsQ0FBQTtJQUNqQiwyQkFBYSxDQUFBO0lBQ2IsaUNBQW1CLENBQUE7SUFDbkIsNkJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBUlcsVUFBVSxHQUFWLGtCQUFVLEtBQVYsa0JBQVUsUUFRckI7QUEyQkQ7O0dBRUc7QUFDSCxJQUFZLDBCQUdYO0FBSEQsV0FBWSwwQkFBMEI7SUFDcEMsNkNBQWUsQ0FBQTtJQUNmLDZDQUFlLENBQUE7QUFDakIsQ0FBQyxFQUhXLDBCQUEwQixHQUExQixrQ0FBMEIsS0FBMUIsa0NBQTBCLFFBR3JDO0FBNkZEOzs7O0dBSUc7QUFDSCxJQUFZLCtCQVNYO0FBVEQsV0FBWSwrQkFBK0I7SUFDekMsMEVBQXVDLENBQUE7SUFDdkMsd0RBQXFCLENBQUE7SUFDckIsc0VBQW1DLENBQUE7SUFDbkMsOERBQTJCLENBQUE7SUFDM0IsNEZBQXlELENBQUE7SUFDekQsb0VBQWlDLENBQUE7SUFDakMsa0dBQStELENBQUE7SUFDL0QsOERBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQVRXLCtCQUErQixHQUEvQix1Q0FBK0IsS0FBL0IsdUNBQStCLFFBUzFDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLDJCQUlYO0FBSkQsV0FBWSwyQkFBMkI7SUFDckMsb0RBQXFCLENBQUE7SUFDckIsMERBQTJCLENBQUE7SUFDM0IsMEVBQTJDLENBQUE7QUFDN0MsQ0FBQyxFQUpXLDJCQUEyQixHQUEzQixtQ0FBMkIsS0FBM0IsbUNBQTJCLFFBSXRDO0FBZ0NELElBQVksMEJBSVg7QUFKRCxXQUFZLDBCQUEwQjtJQUNwQywyQ0FBYSxDQUFBO0lBQ2IseUVBQTJDLENBQUE7SUFDM0MsdUVBQXlDLENBQUE7QUFDM0MsQ0FBQyxFQUpXLDBCQUEwQixHQUExQixrQ0FBMEIsS0FBMUIsa0NBQTBCLFFBSXJDO0FBa0ZEOztHQUVHO0FBQ0gsSUFBWSxvQkFpQlg7QUFqQkQsV0FBWSxvQkFBb0I7SUFDOUIsdUNBQWUsQ0FBQTtJQUNmLCtDQUF1QixDQUFBO0lBQ3ZCLG1EQUEyQixDQUFBO0lBQzNCLDZDQUFxQixDQUFBO0lBQ3JCLHlDQUFpQixDQUFBO0lBQ2pCLHFDQUFhLENBQUE7SUFDYiw2Q0FBcUIsQ0FBQTtJQUNyQiw2Q0FBcUIsQ0FBQTtJQUNyQix1REFBK0IsQ0FBQTtJQUMvQix5Q0FBaUIsQ0FBQTtJQUNqQixpRUFBeUMsQ0FBQTtJQUN6QywyQ0FBbUIsQ0FBQTtJQUNuQix1Q0FBZSxDQUFBO0lBQ2YseUNBQWlCLENBQUE7SUFDakIsMkNBQW1CLENBQUE7SUFDbkIscUNBQWEsQ0FBQTtBQUNmLENBQUMsRUFqQlcsb0JBQW9CLEdBQXBCLDRCQUFvQixLQUFwQiw0QkFBb0IsUUFpQi9CO0FBU0Q7Ozs7R0FJRztBQUNILElBQVksc0JBVVg7QUFWRCxXQUFZLHNCQUFzQjtJQUNoQyw2Q0FBbUIsQ0FBQTtJQUNuQiw2Q0FBbUIsQ0FBQTtJQUNuQix1REFBNkIsQ0FBQTtJQUM3QiwrQ0FBcUIsQ0FBQTtJQUNyQiw2Q0FBbUIsQ0FBQTtJQUNuQixpREFBdUIsQ0FBQTtJQUN2QiwrQ0FBcUIsQ0FBQTtJQUNyQiwyREFBaUMsQ0FBQTtJQUNqQywyQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBVlcsc0JBQXNCLEdBQXRCLDhCQUFzQixLQUF0Qiw4QkFBc0IsUUFVakM7QUF3UUQsSUFBWSxZQVVYO0FBVkQsV0FBWSxZQUFZO0lBQ3RCLCtCQUFlLENBQUE7SUFDZiwrQkFBZSxDQUFBO0lBQ2YsK0JBQWUsQ0FBQTtJQUNmLCtCQUFlLENBQUE7SUFDZiwrQkFBZSxDQUFBO0lBQ2YsK0JBQWUsQ0FBQTtJQUNmLCtCQUFlLENBQUE7SUFDZiwrQkFBZSxDQUFBO0lBQ2YsK0JBQWUsQ0FBQTtBQUNqQixDQUFDLEVBVlcsWUFBWSxHQUFaLG9CQUFZLEtBQVosb0JBQVksUUFVdkI7QUFFRCxJQUFZLE9BSVg7QUFKRCxXQUFZLE9BQU87SUFDakIsb0JBQVMsQ0FBQTtJQUNULHNCQUFXLENBQUE7SUFDWCx3QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpXLE9BQU8sR0FBUCxlQUFPLEtBQVAsZUFBTyxRQUlsQjtBQW1ERDs7OztHQUlHO0FBQ0gsSUFBWSxNQUlYO0FBSkQsV0FBWSxNQUFNO0lBQ2hCLCtCQUFxQixDQUFBO0lBQ3JCLHlDQUErQixDQUFBO0lBQy9CLG1DQUF5QixDQUFBO0FBQzNCLENBQUMsRUFKVyxNQUFNLEdBQU4sY0FBTSxLQUFOLGNBQU0sUUFJakI7QUE4QkQsSUFBWSxrQkFJWDtBQUpELFdBQVksa0JBQWtCO0lBQzVCLG1DQUFhLENBQUE7SUFDYixxQ0FBZSxDQUFBO0lBQ2YsMkNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUpXLGtCQUFrQixHQUFsQiwwQkFBa0IsS0FBbEIsMEJBQWtCLFFBSTdCO0FBc0JEOztHQUVHO0FBQ0gsSUFBWSxnQkFHWDtBQUhELFdBQVksZ0JBQWdCO0lBQzFCLHVDQUFtQixDQUFBO0lBQ25CLHVDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxnQkFBZ0IsR0FBaEIsd0JBQWdCLEtBQWhCLHdCQUFnQixRQUczQjtBQW1ERDs7OztHQUlHO0FBQ0gsSUFBWSxVQTJCWDtBQTNCRCxXQUFZLFVBQVU7SUFDcEIseUNBQTJCLENBQUE7SUFDM0IsaURBQW1DLENBQUE7SUFDbkMsaURBQW1DLENBQUE7SUFDbkMsK0NBQWlDLENBQUE7SUFDakMsK0NBQWlDLENBQUE7SUFDakMsMkRBQTZDLENBQUE7SUFDN0MscURBQXVDLENBQUE7SUFDdkMsaURBQW1DLENBQUE7SUFDbkMsNkNBQStCLENBQUE7SUFDL0IsbURBQXFDLENBQUE7SUFDckMsK0RBQWlELENBQUE7SUFDakQscURBQXVDLENBQUE7SUFDdkMsdURBQXlDLENBQUE7SUFDekMscURBQXVDLENBQUE7SUFDdkMsbURBQXFDLENBQUE7SUFDckMsK0NBQWlDLENBQUE7SUFDakMsaURBQW1DLENBQUE7SUFDbkMsNkNBQStCLENBQUE7SUFDL0IsMkVBQTZELENBQUE7SUFDN0QsaUZBQW1FLENBQUE7SUFDbkUsbUZBQXFFLENBQUE7SUFDckUsK0VBQWlFLENBQUE7SUFDakUsaUZBQW1FLENBQUE7SUFDbkUscUZBQXVFLENBQUE7SUFDdkUsbURBQXFDLENBQUE7SUFDckMsaURBQW1DLENBQUE7QUFDckMsQ0FBQyxFQTNCVyxVQUFVLEdBQVYsa0JBQVUsS0FBVixrQkFBVSxRQTJCckI7QUEwTEQ7O0dBRUc7QUFDSCxJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDeEIsK0NBQTZCLENBQUE7SUFDN0IscURBQW1DLENBQUE7QUFDckMsQ0FBQyxFQUhXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBR3pCO0FBK0dEOztHQUVHO0FBQ0gsSUFBWSxXQUVYO0FBRkQsV0FBWSxXQUFXO0lBQ3JCLDBCQUFXLENBQUE7QUFDYixDQUFDLEVBRlcsV0FBVyxHQUFYLG1CQUFXLEtBQVgsbUJBQVcsUUFFdEI7QUF1QkQ7O0dBRUc7QUFDSCxJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDdkIsb0NBQW1CLENBQUE7SUFDbkIsZ0NBQWUsQ0FBQTtJQUNmLGtDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxhQUFhLEdBQWIscUJBQWEsS0FBYixxQkFBYSxRQUl4QjtBQW1CRDs7R0FFRztBQUNILElBQVksc0JBSVg7QUFKRCxXQUFZLHNCQUFzQjtJQUNoQywrQ0FBcUIsQ0FBQTtJQUNyQiw2Q0FBbUIsQ0FBQTtJQUNuQiwrQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSlcsc0JBQXNCLEdBQXRCLDhCQUFzQixLQUF0Qiw4QkFBc0IsUUFJakM7QUFnRUQ7Ozs7O0dBS0c7QUFDSCxJQUFZLDRCQUdYO0FBSEQsV0FBWSw0QkFBNEI7SUFDdEMseURBQXlCLENBQUE7SUFDekIseURBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUhXLDRCQUE0QixHQUE1QixvQ0FBNEIsS0FBNUIsb0NBQTRCLFFBR3ZDO0FBd0JELElBQVksZ0JBNkVYO0FBN0VELFdBQVksZ0JBQWdCO0lBQzFCLCtEQUEyQyxDQUFBO0lBQzNDLHFFQUFpRCxDQUFBO0lBQ2pELGlFQUE2QyxDQUFBO0lBQzdDLHVHQUFtRixDQUFBO0lBQ25GLHFGQUFpRSxDQUFBO0lBQ2pFLGlFQUE2QyxDQUFBO0lBQzdDLG1FQUErQyxDQUFBO0lBQy9DLHVFQUFtRCxDQUFBO0lBQ25ELHlGQUFxRSxDQUFBO0lBQ3JFLHlEQUFxQyxDQUFBO0lBQ3JDLHFFQUFpRCxDQUFBO0lBQ2pELHlFQUFxRCxDQUFBO0lBQ3JELDJEQUF1QyxDQUFBO0lBQ3ZDLDZEQUF5QyxDQUFBO0lBQ3pDLHlFQUFxRCxDQUFBO0lBQ3JELDZEQUF5QyxDQUFBO0lBQ3pDLHFEQUFpQyxDQUFBO0lBQ2pDLG1FQUErQyxDQUFBO0lBQy9DLDZFQUF5RCxDQUFBO0lBQ3pELCtFQUEyRCxDQUFBO0lBQzNELDZGQUF5RSxDQUFBO0lBQ3pFLHFEQUFpQyxDQUFBO0lBQ2pDLGlFQUE2QyxDQUFBO0lBQzdDLG1FQUErQyxDQUFBO0lBQy9DLG1FQUErQyxDQUFBO0lBQy9DLG1FQUErQyxDQUFBO0lBQy9DLHlGQUFxRSxDQUFBO0lBQ3JFLCtEQUEyQyxDQUFBO0lBQzNDLDJEQUF1QyxDQUFBO0lBQ3ZDLGlGQUE2RCxDQUFBO0lBQzdELCtFQUEyRCxDQUFBO0lBQzNELHVGQUFtRSxDQUFBO0lBQ25FLHVEQUFtQyxDQUFBO0lBQ25DLDJEQUF1QyxDQUFBO0lBQ3ZDLCtEQUEyQyxDQUFBO0lBQzNDLDJEQUF1QyxDQUFBO0lBQ3ZDLG1FQUErQyxDQUFBO0lBQy9DLGlEQUE2QixDQUFBO0lBQzdCLHFFQUFpRCxDQUFBO0lBQ2pELG1FQUErQyxDQUFBO0lBQy9DLCtEQUEyQyxDQUFBO0lBQzNDLDZEQUF5QyxDQUFBO0lBQ3pDLGlFQUE2QyxDQUFBO0lBQzdDLG1FQUErQyxDQUFBO0lBQy9DLG1FQUErQyxDQUFBO0lBQy9DLG1EQUErQixDQUFBO0lBQy9CLDJEQUF1QyxDQUFBO0lBQ3ZDLHVEQUFtQyxDQUFBO0lBQ25DLHlFQUFxRCxDQUFBO0lBQ3JELDJEQUF1QyxDQUFBO0lBQ3ZDLHVEQUFtQyxDQUFBO0lBQ25DLGlEQUE2QixDQUFBO0lBQzdCLDJEQUF1QyxDQUFBO0lBQ3ZDLGlEQUE2QixDQUFBO0lBQzdCLCtDQUEyQixDQUFBO0lBQzNCLHFEQUFpQyxDQUFBO0lBQ2pDLG1GQUErRCxDQUFBO0lBQy9ELGlHQUE2RSxDQUFBO0lBQzdFLG1GQUErRCxDQUFBO0lBQy9ELDZEQUF5QyxDQUFBO0lBQ3pDLHFGQUFpRSxDQUFBO0lBQ2pFLHlFQUFxRCxDQUFBO0lBQ3JELHVFQUFtRCxDQUFBO0lBQ25ELDZFQUF5RCxDQUFBO0lBQ3pELHVDQUFtQixDQUFBO0lBQ25CLHFFQUFpRCxDQUFBO0lBQ2pELG1EQUErQixDQUFBO0lBQy9CLHlEQUFxQyxDQUFBO0lBQ3JDLHVFQUFtRCxDQUFBO0lBQ25ELCtFQUEyRCxDQUFBO0lBQzNELHVGQUFtRSxDQUFBO0lBQ25FLCtFQUEyRCxDQUFBO0lBQzNELHlGQUFxRSxDQUFBO0lBQ3JFLG1FQUErQyxDQUFBO0lBQy9DLDZGQUF5RSxDQUFBO0lBQ3pFLHlEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUE3RVcsZ0JBQWdCLEdBQWhCLHdCQUFnQixLQUFoQix3QkFBZ0IsUUE2RTNCO0FBRUQsSUFBWSxjQW9CWDtBQXBCRCxXQUFZLGNBQWM7SUFDeEIscURBQW1DLENBQUE7SUFDbkMsbURBQWlDLENBQUE7SUFDakMsaURBQStCLENBQUE7SUFDL0IsaURBQStCLENBQUE7SUFDL0IsdURBQXFDLENBQUE7SUFDckMsK0RBQTZDLENBQUE7SUFDN0MsbURBQWlDLENBQUE7SUFDakMsNkRBQTJDLENBQUE7SUFDM0MsaURBQStCLENBQUE7SUFDL0IsK0NBQTZCLENBQUE7SUFDN0IsbUVBQWlELENBQUE7SUFDakQseUVBQXVELENBQUE7SUFDdkQsaURBQStCLENBQUE7SUFDL0IsdUVBQXFELENBQUE7SUFDckQsK0NBQTZCLENBQUE7SUFDN0IsNkRBQTJDLENBQUE7SUFDM0MsaUVBQStDLENBQUE7SUFDL0MsaURBQStCLENBQUE7SUFDL0IsbUVBQWlELENBQUE7QUFDbkQsQ0FBQyxFQXBCVyxjQUFjLEdBQWQsc0JBQWMsS0FBZCxzQkFBYyxRQW9CekI7QUFRRDs7Ozs7R0FLRztBQUNILElBQVkscUJBSVg7QUFKRCxXQUFZLHFCQUFxQjtJQUMvQixzREFBNkIsQ0FBQTtJQUM3Qiw4REFBcUMsQ0FBQTtJQUNyQyxvREFBMkIsQ0FBQTtBQUM3QixDQUFDLEVBSlcscUJBQXFCLEdBQXJCLDZCQUFxQixLQUFyQiw2QkFBcUIsUUFJaEM7QUFFRDs7Ozs7R0FLRztBQUNILElBQVksd0JBR1g7QUFIRCxXQUFZLHdCQUF3QjtJQUNsQywyREFBK0IsQ0FBQTtJQUMvQiw2Q0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSFcsd0JBQXdCLEdBQXhCLGdDQUF3QixLQUF4QixnQ0FBd0IsUUFHbkM7QUFFRDs7R0FFRztBQUNILElBQVksbUNBR1g7QUFIRCxXQUFZLG1DQUFtQztJQUM3Qyx3RUFBaUMsQ0FBQTtJQUNqQyxnRUFBeUIsQ0FBQTtBQUMzQixDQUFDLEVBSFcsbUNBQW1DLEdBQW5DLDJDQUFtQyxLQUFuQywyQ0FBbUMsUUFHOUM7QUFVRDs7R0FFRztBQUNILElBQVksV0FJWDtBQUpELFdBQVksV0FBVztJQUNyQixnQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBcUIsQ0FBQTtJQUNyQiw4Q0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBSlcsV0FBVyxHQUFYLG1CQUFXLEtBQVgsbUJBQVcsUUFJdEI7QUEwREQsSUFBWSxZQUtYO0FBTEQsV0FBWSxZQUFZO0lBQ3RCLDJCQUFXLENBQUE7SUFDWCx5Q0FBeUIsQ0FBQTtJQUN6Qix5Q0FBeUIsQ0FBQTtJQUN6QiwrQ0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBTFcsWUFBWSxHQUFaLG9CQUFZLEtBQVosb0JBQVksUUFLdkI7QUFFRCxJQUFZLGVBSVg7QUFKRCxXQUFZLGVBQWU7SUFDekIsOEJBQVcsQ0FBQTtJQUNYLG9DQUFpQixDQUFBO0lBQ2pCLGdDQUFhLENBQUE7QUFDZixDQUFDLEVBSlcsZUFBZSxHQUFmLHVCQUFlLEtBQWYsdUJBQWUsUUFJMUI7QUE4RUQ7O0dBRUc7QUFDSCxJQUFZLG9CQUdYO0FBSEQsV0FBWSxvQkFBb0I7SUFDOUIsdURBQStCLENBQUE7SUFDL0IsK0NBQXVCLENBQUE7QUFDekIsQ0FBQyxFQUhXLG9CQUFvQixHQUFwQiw0QkFBb0IsS0FBcEIsNEJBQW9CLFFBRy9CO0FBbUVEOztHQUVHO0FBQ0gsSUFBWSw2QkFJWDtBQUpELFdBQVksNkJBQTZCO0lBQ3ZDLHNEQUFxQixDQUFBO0lBQ3JCLDREQUEyQixDQUFBO0lBQzNCLHNIQUFxRixDQUFBO0FBQ3ZGLENBQUMsRUFKVyw2QkFBNkIsR0FBN0IscUNBQTZCLEtBQTdCLHFDQUE2QixRQUl4QztBQWlGRDs7OztHQUlHO0FBQ0gsSUFBWSx1QkFFWDtBQUZELFdBQVksdUJBQXVCO0lBQ2pDLG1EQUF3QixDQUFBO0FBQzFCLENBQUMsRUFGVyx1QkFBdUIsR0FBdkIsK0JBQXVCLEtBQXZCLCtCQUF1QixRQUVsQztBQTBDRDs7R0FFRztBQUNILElBQVksb0JBTVg7QUFORCxXQUFZLG9CQUFvQjtJQUM5Qix5Q0FBaUIsQ0FBQTtJQUNqQixxREFBNkIsQ0FBQTtJQUM3QiwyQ0FBbUIsQ0FBQTtJQUNuQiw2Q0FBcUIsQ0FBQTtJQUNyQiwyQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTlcsb0JBQW9CLEdBQXBCLDRCQUFvQixLQUFwQiw0QkFBb0IsUUFNL0I7QUE0R0Q7O0dBRUc7QUFDSCxJQUFZLDRCQUlYO0FBSkQsV0FBWSw0QkFBNEI7SUFDdEMsK0NBQWUsQ0FBQTtJQUNmLCtEQUErQixDQUFBO0lBQy9CLHFHQUFxRSxDQUFBO0FBQ3ZFLENBQUMsRUFKVyw0QkFBNEIsR0FBNUIsb0NBQTRCLEtBQTVCLG9DQUE0QixRQUl2QztBQTRERDs7R0FFRztBQUNILElBQVksdUJBR1g7QUFIRCxXQUFZLHVCQUF1QjtJQUNqQyxnREFBcUIsQ0FBQTtJQUNyQixvREFBeUIsQ0FBQTtBQUMzQixDQUFDLEVBSFcsdUJBQXVCLEdBQXZCLCtCQUF1QixLQUF2QiwrQkFBdUIsUUFHbEM7QUFvR0Q7Ozs7O0dBS0c7QUFDSCxJQUFZLHNCQUlYO0FBSkQsV0FBWSxzQkFBc0I7SUFDaEMscURBQTJCLENBQUE7SUFDM0IsaURBQXVCLENBQUE7SUFDdkIsK0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUpXLHNCQUFzQixHQUF0Qiw4QkFBc0IsS0FBdEIsOEJBQXNCLFFBSWpDO0FBa0NEOztHQUVHO0FBQ0gsSUFBWSxnQ0FJWDtBQUpELFdBQVksZ0NBQWdDO0lBQzFDLHVEQUFtQixDQUFBO0lBQ25CLHlEQUFxQixDQUFBO0lBQ3JCLHVFQUFtQyxDQUFBO0FBQ3JDLENBQUMsRUFKVyxnQ0FBZ0MsR0FBaEMsd0NBQWdDLEtBQWhDLHdDQUFnQyxRQUkzQztBQXdIRDs7R0FFRztBQUNILElBQVksbUJBS1g7QUFMRCxXQUFZLG1CQUFtQjtJQUM3QixvREFBNkIsQ0FBQTtJQUM3QixrREFBMkIsQ0FBQTtJQUMzQixrREFBMkIsQ0FBQTtJQUMzQixnRUFBeUMsQ0FBQTtBQUMzQyxDQUFDLEVBTFcsbUJBQW1CLEdBQW5CLDJCQUFtQixLQUFuQiwyQkFBbUIsUUFLOUI7QUEyREQ7OztHQUdHO0FBQ0gsSUFBWSwyQkFJWDtBQUpELFdBQVksMkJBQTJCO0lBQ3JDLDhDQUFlLENBQUE7SUFDZiw4Q0FBZSxDQUFBO0lBQ2Ysc0RBQXVCLENBQUE7QUFDekIsQ0FBQyxFQUpXLDJCQUEyQixHQUEzQixtQ0FBMkIsS0FBM0IsbUNBQTJCLFFBSXRDO0FBZ0VEOztHQUVHO0FBQ0gsSUFBWSxJQUdYO0FBSEQsV0FBWSxJQUFJO0lBQ2QsbUJBQVcsQ0FBQTtJQUNYLHFCQUFhLENBQUE7QUFDZixDQUFDLEVBSFcsSUFBSSxHQUFKLFlBQUksS0FBSixZQUFJLFFBR2Y7QUFtQkQ7Ozs7R0FJRztBQUNILElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUN0QixpQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSFcsWUFBWSxHQUFaLG9CQUFZLEtBQVosb0JBQVksUUFHdkI7QUE0R0Q7O0dBRUc7QUFDSCxJQUFZLHFDQUdYO0FBSEQsV0FBWSxxQ0FBcUM7SUFDL0Msb0RBQVcsQ0FBQTtJQUNYLDBFQUFpQyxDQUFBO0FBQ25DLENBQUMsRUFIVyxxQ0FBcUMsR0FBckMsNkNBQXFDLEtBQXJDLDZDQUFxQyxRQUdoRDtBQTJRRCxJQUFZLHNCQUdYO0FBSEQsV0FBWSxzQkFBc0I7SUFDaEMsMkNBQWlCLENBQUE7SUFDakIscURBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQUhXLHNCQUFzQixHQUF0Qiw4QkFBc0IsS0FBdEIsOEJBQXNCLFFBR2pDO0FBNkpELElBQVksU0FHWDtBQUhELFdBQVksU0FBUztJQUNuQixrQ0FBcUIsQ0FBQTtJQUNyQiw4QkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSFcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUFHcEI7QUFZRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsSUFBWSxTQUdYO0FBSEQsV0FBWSxTQUFTO0lBQ25CLDhCQUFpQixDQUFBO0lBQ2pCLHdCQUFXLENBQUE7QUFDYixDQUFDLEVBSFcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUFHcEI7QUFtQkQ7Ozs7R0FJRztBQUNILElBQVksZUFNWDtBQU5ELFdBQVksZUFBZTtJQUN6QixnQ0FBYSxDQUFBO0lBQ2IsOEJBQVcsQ0FBQTtJQUNYLG9EQUFpQyxDQUFBO0lBQ2pDLGtEQUErQixDQUFBO0lBQy9CLHdEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFOVyxlQUFlLEdBQWYsdUJBQWUsS0FBZix1QkFBZSxRQU0xQjtBQXNMRDs7OztHQUlHO0FBQ0gsSUFBWSxrQkFJWDtBQUpELFdBQVksa0JBQWtCO0lBQzVCLHFDQUFlLENBQUE7SUFDZix1Q0FBaUIsQ0FBQTtJQUNqQix1Q0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSlcsa0JBQWtCLEdBQWxCLDBCQUFrQixLQUFsQiwwQkFBa0IsUUFJN0I7QUFFRDs7R0FFRztBQUNILElBQVksa0JBR1g7QUFIRCxXQUFZLGtCQUFrQjtJQUM1QixxQ0FBZSxDQUFBO0lBQ2YscUNBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSFcsa0JBQWtCLEdBQWxCLDBCQUFrQixLQUFsQiwwQkFBa0IsUUFHN0I7QUFtSUQ7Ozs7R0FJRztBQUNILElBQVksZUFLWDtBQUxELFdBQVksZUFBZTtJQUN6QixrQ0FBZSxDQUFBO0lBQ2Ysb0NBQWlCLENBQUE7SUFDakIsb0NBQWlCLENBQUE7SUFDakIsOEJBQVcsQ0FBQTtBQUNiLENBQUMsRUFMVyxlQUFlLEdBQWYsdUJBQWUsS0FBZix1QkFBZSxRQUsxQjtBQWtsQkQ7O0dBRUc7QUFDSCxJQUFZLFNBS1g7QUFMRCxXQUFZLFNBQVM7SUFDbkIsNENBQStCLENBQUE7SUFDL0Isc0VBQXlELENBQUE7SUFDekQsa0VBQXFELENBQUE7SUFDckQsMEZBQTZFLENBQUE7QUFDL0UsQ0FBQyxFQUxXLFNBQVMsR0FBVCxpQkFBUyxLQUFULGlCQUFTLFFBS3BCO0FBOENEOzs7OztHQUtHO0FBQ0gsSUFBWSwyQkFJWDtBQUpELFdBQVksMkJBQTJCO0lBQ3JDLG9EQUFxQixDQUFBO0lBQ3JCLHNEQUF1QixDQUFBO0lBQ3ZCLDBEQUEyQixDQUFBO0FBQzdCLENBQUMsRUFKVywyQkFBMkIsR0FBM0IsbUNBQTJCLEtBQTNCLG1DQUEyQixRQUl0QztBQWVEOztHQUVHO0FBQ0gsSUFBWSxvQkFHWDtBQUhELFdBQVksb0JBQW9CO0lBQzlCLHVEQUErQixDQUFBO0lBQy9CLCtDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFIVyxvQkFBb0IsR0FBcEIsNEJBQW9CLEtBQXBCLDRCQUFvQixRQUcvQjtBQW9TRDs7Ozs7R0FLRztBQUNILElBQVksZ0JBSVg7QUFKRCxXQUFZLGdCQUFnQjtJQUMxQiwyQ0FBdUIsQ0FBQTtJQUN2Qix1Q0FBbUIsQ0FBQTtJQUNuQix5REFBcUMsQ0FBQTtBQUN2QyxDQUFDLEVBSlcsZ0JBQWdCLEdBQWhCLHdCQUFnQixLQUFoQix3QkFBZ0IsUUFJM0I7QUFvREQ7Ozs7R0FJRztBQUNILElBQVksb0JBSVg7QUFKRCxXQUFZLG9CQUFvQjtJQUM5QiwyQ0FBbUIsQ0FBQTtJQUNuQiwyQ0FBbUIsQ0FBQTtJQUNuQiwyQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSlcsb0JBQW9CLEdBQXBCLDRCQUFvQixLQUFwQiw0QkFBb0IsUUFJL0I7QUErRUQ7Ozs7O0dBS0c7QUFDSCxJQUFZLGtCQUlYO0FBSkQsV0FBWSxrQkFBa0I7SUFDNUIsdUNBQWlCLENBQUE7SUFDakIseUNBQW1CLENBQUE7SUFDbkIsNkNBQXVCLENBQUE7QUFDekIsQ0FBQyxFQUpXLGtCQUFrQixHQUFsQiwwQkFBa0IsS0FBbEIsMEJBQWtCLFFBSTdCOzs7Ozs7QUN2N1lEOzs7Ozs7Ozs7Ozs7OztHQWNHIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IEZ1c2lvbkF1dGhDbGllbnQgZnJvbSAnLi9zcmMvRnVzaW9uQXV0aENsaWVudCdcbmV4cG9ydCBkZWZhdWx0IEZ1c2lvbkF1dGhDbGllbnQ7XG5cbmV4cG9ydCAqIGZyb20gJy4vc3JjL0Z1c2lvbkF1dGhDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvSVJFU1RDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0NsaWVudFJlc3BvbnNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0lSRVNUQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0lSRVNUQ2xpZW50QnVpbGRlcic7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciBnZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XG5cdC8vIHRoZSBvbmx5IHJlbGlhYmxlIG1lYW5zIHRvIGdldCB0aGUgZ2xvYmFsIG9iamVjdCBpc1xuXHQvLyBgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKWBcblx0Ly8gSG93ZXZlciwgdGhpcyBjYXVzZXMgQ1NQIHZpb2xhdGlvbnMgaW4gQ2hyb21lIGFwcHMuXG5cdGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cblx0aWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cblx0dGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QnKTtcbn1cblxudmFyIGdsb2JhbE9iamVjdCA9IGdldEdsb2JhbCgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBnbG9iYWxPYmplY3QuZmV0Y2g7XG5cbi8vIE5lZWRlZCBmb3IgVHlwZVNjcmlwdCBhbmQgV2VicGFjay5cbmlmIChnbG9iYWxPYmplY3QuZmV0Y2gpIHtcblx0ZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsT2JqZWN0LmZldGNoLmJpbmQoZ2xvYmFsT2JqZWN0KTtcbn1cblxuZXhwb3J0cy5IZWFkZXJzID0gZ2xvYmFsT2JqZWN0LkhlYWRlcnM7XG5leHBvcnRzLlJlcXVlc3QgPSBnbG9iYWxPYmplY3QuUmVxdWVzdDtcbmV4cG9ydHMuUmVzcG9uc2UgPSBnbG9iYWxPYmplY3QuUmVzcG9uc2U7XG4iLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGllbnRSZXNwb25zZTxUPiB7XG4gIHB1YmxpYyBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIHB1YmxpYyByZXNwb25zZTogVDtcbiAgcHVibGljIGV4Y2VwdGlvbjogRXJyb3I7XG5cbiAgd2FzU3VjY2Vzc2Z1bCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNDb2RlID49IDIwMCAmJiB0aGlzLnN0YXR1c0NvZGUgPCAzMDA7XG4gIH1cbn0iLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LTIwMjQsIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBJUkVTVENsaWVudCwgeyBFcnJvclJlc3BvbnNlSGFuZGxlciwgUmVzcG9uc2VIYW5kbGVyIH0gZnJvbSBcIi4vSVJFU1RDbGllbnRcIjtcbmltcG9ydCBDbGllbnRSZXNwb25zZSBmcm9tIFwiLi9DbGllbnRSZXNwb25zZVwiO1xuaW1wb3J0IGZldGNoLCB7IEJvZHlJbml0LCBSZXF1ZXN0Q3JlZGVudGlhbHMsIFJlc3BvbnNlIH0gZnJvbSAnbm9kZS1mZXRjaCc7XG5pbXBvcnQgeyBVUkxTZWFyY2hQYXJhbXMgfSBmcm9tIFwidXJsXCI7XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQXG4gKiBAYXV0aG9yIFR5bGVyIFNjb3R0XG4gKiBAYXV0aG9yIFRKIFBlZGVuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IGltcGxlbWVudHMgSVJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICBwdWJsaWMgYm9keTogQm9keUluaXQ7XG4gIHB1YmxpYyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHB1YmxpYyBtZXRob2Q6IHN0cmluZztcbiAgcHVibGljIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHVibGljIHVyaTogc3RyaW5nO1xuICBwdWJsaWMgY3JlZGVudGlhbHM6IFJlcXVlc3RDcmVkZW50aWFscztcbiAgcHVibGljIHJlc3BvbnNlSGFuZGxlcjogUmVzcG9uc2VIYW5kbGVyPFJUPiA9IERlZmF1bHRSRVNUQ2xpZW50LkpTT05SZXNwb25zZUhhbmRsZXI7XG4gIHB1YmxpYyBlcnJvclJlc3BvbnNlSGFuZGxlcjogRXJyb3JSZXNwb25zZUhhbmRsZXI8RVJUPiA9IERlZmF1bHRSRVNUQ2xpZW50LkVycm9ySlNPTlJlc3BvbnNlSGFuZGxlcjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaG9zdDogc3RyaW5nKSB7XG4gIH1cblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIEpTT04gZm9ybSBvZiB0aGUgcmVzcG9uc2UgdGV4dC5cbiAgICpcbiAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIEpTT05SZXNwb25zZUhhbmRsZXI8UlQ+KHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UlQ+PiB7XG4gICAgbGV0IGNsaWVudFJlc3BvbnNlID0gbmV3IENsaWVudFJlc3BvbnNlPFJUPigpO1xuXG4gICAgY2xpZW50UmVzcG9uc2Uuc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICBsZXQgdHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuICAgIGlmICh0eXBlICYmIHR5cGUuc3RhcnRzV2l0aChcImFwcGxpY2F0aW9uL2pzb25cIikpIHtcbiAgICAgIGNsaWVudFJlc3BvbnNlLnJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGllbnRSZXNwb25zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgSlNPTiBmb3JtIG9mIHRoZSByZXNwb25zZSB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVzcG9uc2VcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgRXJyb3JKU09OUmVzcG9uc2VIYW5kbGVyPEVSVD4ocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFUlQ+PiB7XG4gICAgbGV0IGNsaWVudFJlc3BvbnNlID0gbmV3IENsaWVudFJlc3BvbnNlPEVSVD4oKTtcblxuICAgIGNsaWVudFJlc3BvbnNlLnN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgbGV0IHR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgICBpZiAodHlwZSAmJiB0eXBlLnN0YXJ0c1dpdGgoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSB7XG4gICAgICBjbGllbnRSZXNwb25zZS5leGNlcHRpb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaWVudFJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIHVzaW5nIGEga2V5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHZhbHVlIG9mIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICogQHJldHVybnMge0RlZmF1bHRSRVNUQ2xpZW50fVxuICAgKi9cbiAgd2l0aEF1dGhvcml6YXRpb24oa2V5OiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy53aXRoSGVhZGVyKCdBdXRob3JpemF0aW9uJywga2V5KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc2VnbWVudCB0byB0aGUgcmVxdWVzdCB1cmlcbiAgICovXG4gIHdpdGhVcmlTZWdtZW50KHNlZ21lbnQ6IHN0cmluZyB8IG51bWJlcik6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICBpZiAoc2VnbWVudCA9PT0gbnVsbCB8fCBzZWdtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodGhpcy51cmkgPT09IG51bGwpIHtcbiAgICAgIHRoaXMudXJpID0gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVyaS5jaGFyQXQodGhpcy51cmkubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgdGhpcy51cmkgKz0gJy8nO1xuICAgIH1cbiAgICB0aGlzLnVyaSA9IHRoaXMudXJpICsgc2VnbWVudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZ1bGwgdXJsICsgcGFyYW1ldGVyIGxpc3RcbiAgICovXG4gIGdldEZ1bGxVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdCArIHRoaXMudXJpICsgdGhpcy5nZXRRdWVyeVN0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvZHkgb2YgdGhlIGNsaWVudCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlcXVlc3QgYm9keSBhcyBmb3JtIGRhdGEuXG4gICAqL1xuICB3aXRoRm9ybURhdGEoYm9keTogVVJMU2VhcmNoUGFyYW1zKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIGNvbnN0IGJvZHkyID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChib2R5KSB7XG4gICAgICBib2R5LmZvckVhY2goKHZhbHVlLCBuYW1lLCBzZWFyY2hQYXJhbXMpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUgIT0gXCJudWxsXCIgJiYgdmFsdWUgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGJvZHkyLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYm9keSA9IGJvZHkyO1xuICAgIH1cbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBoZWFkZXIgdG8gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgVGhlIG5hbWUgb2YgdGhlIGhlYWRlci5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyLlxuICAgKi9cbiAgd2l0aEhlYWRlcihrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvZHkgb2YgdGhlIGNsaWVudCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlcXVlc3QgYm9keSBhcyBKU09OLlxuICAgKi9cbiAgd2l0aEpTT05Cb2R5KGJvZHk6IG9iamVjdCk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICB0aGlzLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgLy8gT21pdCB0aGUgQ29udGVudC1MZW5ndGgsIHRoaXMgaXMgc2V0IGF1dG8tbWFnaWNhbGx5IGJ5IHRoZSByZXF1ZXN0IGxpYnJhcnlcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBodHRwIG1ldGhvZCBmb3IgdGhlIHJlcXVlc3RcbiAgICovXG4gIHdpdGhNZXRob2QobWV0aG9kOiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdXJpIG9mIHRoZSByZXF1ZXN0XG4gICAqL1xuICB3aXRoVXJpKHVyaTogc3RyaW5nKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMudXJpID0gdXJpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcGFyYW1ldGVycyB0byB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLCBtYXkgYmUgYSBzdHJpbmcsIG9iamVjdCBvciBudW1iZXIuXG4gICAqL1xuICB3aXRoUGFyYW1ldGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLnBhcmFtZXRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHJlcXVlc3QncyBjcmVkZW50aWFscy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIEEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciBjcmVkZW50aWFscyB3aWxsIGJlIHNlbnQgd2l0aCB0aGUgcmVxdWVzdCBhbHdheXMsIG5ldmVyLCBvciBvbmx5IHdoZW4gc2VudCB0byBhIHNhbWUtb3JpZ2luIFVSTC5cbiAgICovXG4gIHdpdGhDcmVkZW50aWFscyh2YWx1ZTogUmVxdWVzdENyZWRlbnRpYWxzKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMuY3JlZGVudGlhbHMgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdpdGhSZXNwb25zZUhhbmRsZXIoaGFuZGxlcjogUmVzcG9uc2VIYW5kbGVyPFJUPik6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLnJlc3BvbnNlSGFuZGxlciA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aXRoRXJyb3JSZXNwb25zZUhhbmRsZXIoaGFuZGxlcjogRXJyb3JSZXNwb25zZUhhbmRsZXI8RVJUPik6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmVycm9yUmVzcG9uc2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIHJlcXVlc3QgYW5kIHJldHVybiBhIHByb21pc2UuIFRoaXMgcHJvbWlzZSB3aWxsIHJlc29sdmUgaWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bFxuICAgKiBhbmQgcmVqZWN0IG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIGdvKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UlQ+PiB7XG4gICAgY29uc3QgY2xpZW50UmVzcG9uc2UgPSBuZXcgQ2xpZW50UmVzcG9uc2U8UlQ+KCk7XG5cbiAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIHRoaXMuZ2V0RnVsbFVybCgpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICBib2R5OiB0aGlzLmJvZHkgYXMgQm9keUluaXQsXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIChDcmVkZW50aWFscyBhcmUgbm90IHN1cHBvcnRlZCBvbiBOb2RlSlMpXG4gICAgICAgICAgICBjcmVkZW50aWFsczogdGhpcy5jcmVkZW50aWFscyxcbiAgICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlc3BvbnNlSGFuZGxlcihyZXNwb25zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBhd2FpdCB0aGlzLmVycm9yUmVzcG9uc2VIYW5kbGVyKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2xpZW50UmVzcG9uc2UpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7IC8vIERvbid0IGNhdGNoIGEgQ2xpZW50UmVzcG9uc2UgKHdlIHdhbnQgdGhpcyB0byB0cmlnZ2VyIHRoZSBjYXRjaCBvZiB0aGUgcHJvbWlzZVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2UpIHsgLy8gVHJ5IHRvIHJlY292ZXIgdGhlIHJlc3BvbnNlIHN0YXR1c1xuICAgICAgICBjbGllbnRSZXNwb25zZS5zdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgfVxuICAgICAgY2xpZW50UmVzcG9uc2UuZXhjZXB0aW9uID0gZXJyb3I7XG5cbiAgICAgIHRocm93IGNsaWVudFJlc3BvbnNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UXVlcnlTdHJpbmcoKSB7XG4gICAgbGV0IHF1ZXJ5U3RyaW5nID0gJyc7XG4gICAgY29uc3QgYXBwZW5kUGFyYW0gPSAoa2V5OiBzdHJpbmcsIHBhcmFtOiBzdHJpbmcpID0+IHtcbiAgICAgIHF1ZXJ5U3RyaW5nICs9IChxdWVyeVN0cmluZy5sZW5ndGggPT09IDApID8gJz8nIDogJyYnO1xuICAgICAgcXVlcnlTdHJpbmcgKz0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQocGFyYW0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5wYXJhbWV0ZXJzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGFyYW1ldGVyc1trZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2godmFsID0+IGFwcGVuZFBhcmFtKGtleSwgdmFsKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwcGVuZFBhcmFtKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gIH1cbn1cbiIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTksIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBJUkVTVENsaWVudCBmcm9tIFwiLi9JUkVTVENsaWVudFwiO1xuaW1wb3J0IERlZmF1bHRSRVNUQ2xpZW50IGZyb20gXCIuL0RlZmF1bHRSRVNUQ2xpZW50XCI7XG5pbXBvcnQgSVJFU1RDbGllbnRCdWlsZGVyIGZyb20gXCIuL0lSRVNUQ2xpZW50QnVpbGRlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIgaW1wbGVtZW50cyBJUkVTVENsaWVudEJ1aWxkZXIge1xuICBidWlsZDxSVCwgRVJUPihob3N0OiBzdHJpbmcpOiBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgcmV0dXJuIG5ldyBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPihob3N0KTtcbiAgfVxufVxuIiwiLypcbiogQ29weXJpZ2h0IChjKSAyMDE5LTIwMjUsIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbipcbiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbipcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IElSRVNUQ2xpZW50IGZyb20gXCIuL0lSRVNUQ2xpZW50XCJcbmltcG9ydCBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIgZnJvbSBcIi4vRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyXCI7XG5pbXBvcnQgSVJFU1RDbGllbnRCdWlsZGVyIGZyb20gXCIuL0lSRVNUQ2xpZW50QnVpbGRlclwiO1xuaW1wb3J0IENsaWVudFJlc3BvbnNlIGZyb20gXCIuL0NsaWVudFJlc3BvbnNlXCI7XG5pbXBvcnQge1JlcXVlc3RDcmVkZW50aWFsc30gZnJvbSBcIm5vZGUtZmV0Y2hcIjtcbmltcG9ydCB7VVJMU2VhcmNoUGFyYW1zfSBmcm9tIFwidXJsXCI7XG5cbmV4cG9ydCBjbGFzcyBGdXNpb25BdXRoQ2xpZW50IHtcbiAgcHVibGljIGNsaWVudEJ1aWxkZXI6IElSRVNUQ2xpZW50QnVpbGRlciA9IG5ldyBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIoKTtcbiAgcHVibGljIGNyZWRlbnRpYWxzOiBSZXF1ZXN0Q3JlZGVudGlhbHM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFwaUtleTogc3RyaW5nLFxuICAgIHB1YmxpYyBob3N0OiBzdHJpbmcsXG4gICAgcHVibGljIHRlbmFudElkPzogc3RyaW5nLFxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZW5hbnQgaWQsIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgWC1GdXNpb25BdXRoLVRlbmFudElkIGhlYWRlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSB0ZW5hbnRJZCBUaGUgdmFsdWUgb2YgdGhlIFgtRnVzaW9uQXV0aC1UZW5hbnRJZCBoZWFkZXIuXG4gICAqIEByZXR1cm5zIHtGdXNpb25BdXRoQ2xpZW50fVxuICAgKi9cbiAgc2V0VGVuYW50SWQodGVuYW50SWQ6IHN0cmluZyB8IG51bGwpOiBGdXNpb25BdXRoQ2xpZW50IHtcbiAgICB0aGlzLnRlbmFudElkID0gdGVuYW50SWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB3aGV0aGVyIGFuZCBob3cgY29va2llcyB3aWxsIGJlIHNlbnQgd2l0aCBlYWNoIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBhbmQgaG93IGNvb2tpZXMgd2lsbCBiZSBzZW50LlxuICAgKiBAcmV0dXJucyB7RnVzaW9uQXV0aENsaWVudH1cbiAgICovXG4gIHNldFJlcXVlc3RDcmVkZW50aWFscyh2YWx1ZTogUmVxdWVzdENyZWRlbnRpYWxzKTogRnVzaW9uQXV0aENsaWVudCB7XG4gICAgdGhpcy5jcmVkZW50aWFscyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGFuIGFjdGlvbiBvbiBhIHVzZXIuIFRoZSB1c2VyIGJlaW5nIGFjdGlvbmVkIGlzIGNhbGxlZCB0aGUgXCJhY3Rpb25lZVwiIGFuZCB0aGUgdXNlciB0YWtpbmcgdGhlIGFjdGlvbiBpcyBjYWxsZWQgdGhlXG4gICAqIFwiYWN0aW9uZXJcIi4gQm90aCB1c2VyIGlkcyBhcmUgcmVxdWlyZWQgaW4gdGhlIHJlcXVlc3Qgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge0FjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIGFjdGlvbiByZXF1ZXN0IHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWN0aW9uIGJlaW5nIHRha2VuIGluY2x1ZGluZ1xuICAgKiAgICB0aGUgSWQgb2YgdGhlIGFjdGlvbiwgYW55IG9wdGlvbnMgYW5kIHRoZSBkdXJhdGlvbiAoaWYgYXBwbGljYWJsZSkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBhY3Rpb25Vc2VyKHJlcXVlc3Q6IEFjdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZXMgdGhlIEZ1c2lvbkF1dGggUmVhY3RvciB1c2luZyBhIGxpY2Vuc2UgSWQgYW5kIG9wdGlvbmFsbHkgYSBsaWNlbnNlIHRleHQgKGZvciBhaXItZ2FwcGVkIGRlcGxveW1lbnRzKVxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0b3JSZXF1ZXN0fSByZXF1ZXN0IEFuIG9wdGlvbmFsIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgbGljZW5zZSB0ZXh0IHRvIGFjdGl2YXRlIFJlYWN0b3IgKHVzZWZ1bCBmb3IgYWlyLWdhcCBkZXBsb3ltZW50cyBvZiBGdXNpb25BdXRoKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgYWN0aXZhdGVSZWFjdG9yKHJlcXVlc3Q6IFJlYWN0b3JSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZWFjdG9yJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHVzZXIgdG8gYW4gZXhpc3RpbmcgZmFtaWx5LiBUaGUgZmFtaWx5IElkIG11c3QgYmUgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIFRoZSBJZCBvZiB0aGUgZmFtaWx5LlxuICAgKiBAcGFyYW0ge0ZhbWlseVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGRldGVybWluZSB3aGljaCB1c2VyIHRvIGFkZCB0byB0aGUgZmFtaWx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+fVxuICAgKi9cbiAgYWRkVXNlclRvRmFtaWx5KGZhbWlseUlkOiBVVUlELCByZXF1ZXN0OiBGYW1pbHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGYW1pbHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZhbWlseUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcHJvdmUgYSBkZXZpY2UgZ3JhbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIHdpbGwgYmUgcmVxdWlyZWQgaWYgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiBUaGUgYWNjZXNzIHRva2VuIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxEZXZpY2VBcHByb3ZhbFJlc3BvbnNlPj59XG4gICAqL1xuICBhcHByb3ZlRGV2aWNlKGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIHVzZXJfY29kZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxEZXZpY2VBcHByb3ZhbFJlc3BvbnNlPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgndG9rZW4nLCB0b2tlbik7XG4gICAgYm9keS5hcHBlbmQoJ3VzZXJfY29kZScsIHVzZXJfY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RGV2aWNlQXBwcm92YWxSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2RldmljZS9hcHByb3ZlJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyB0aGUgdXNlciBhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYWN0aW9uSWQgVGhlIGFjdGlvbiBJZCBvZiB0aGUgYWN0aW9uIHRvIGNhbmNlbC5cbiAgICogQHBhcmFtIHtBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSBhY3Rpb24gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2FuY2VsbGF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgY2FuY2VsQWN0aW9uKGFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgYSB1c2VyJ3MgcGFzc3dvcmQgdXNpbmcgdGhlIGNoYW5nZSBwYXNzd29yZCBJZC4gVGhpcyB1c3VhbGx5IG9jY3VycyBhZnRlciBhbiBlbWFpbCBoYXMgYmVlbiBzZW50IHRvIHRoZSB1c2VyXG4gICAqIGFuZCB0aGV5IGNsaWNrZWQgb24gYSBsaW5rIHRvIHJlc2V0IHRoZWlyIHBhc3N3b3JkLlxuICAgKiBcbiAgICogQXMgb2YgdmVyc2lvbiAxLjMyLjIsIHByZWZlciBzZW5kaW5nIHRoZSBjaGFuZ2VQYXNzd29yZElkIGluIHRoZSByZXF1ZXN0IGJvZHkuIFRvIGRvIHRoaXMsIG9taXQgdGhlIGZpcnN0IHBhcmFtZXRlciwgYW5kIHNldFxuICAgKiB0aGUgdmFsdWUgaW4gdGhlIHJlcXVlc3QgYm9keS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5nZVBhc3N3b3JkSWQgVGhlIGNoYW5nZSBwYXNzd29yZCBJZCB1c2VkIHRvIGZpbmQgdGhlIHVzZXIuIFRoaXMgdmFsdWUgaXMgZ2VuZXJhdGVkIGJ5IEZ1c2lvbkF1dGggb25jZSB0aGUgY2hhbmdlIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZC5cbiAgICogQHBhcmFtIHtDaGFuZ2VQYXNzd29yZFJlcXVlc3R9IHJlcXVlc3QgVGhlIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNoYW5nZSB0aGUgcGFzc3dvcmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENoYW5nZVBhc3N3b3JkUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNoYW5nZVBhc3N3b3JkKGNoYW5nZVBhc3N3b3JkSWQ6IHN0cmluZywgcmVxdWVzdDogQ2hhbmdlUGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPENoYW5nZVBhc3N3b3JkUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjaGFuZ2VQYXNzd29yZElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIGEgdXNlcidzIHBhc3N3b3JkIHVzaW5nIHRoZWlyIGFjY2VzcyB0b2tlbiAoSldUKSBpbnN0ZWFkIG9mIHRoZSBjaGFuZ2VQYXNzd29yZElkXG4gICAqIEEgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIG1ldGhvZCB3aWxsIGJlIGlmIHlvdSB3YW50IHRvIGFsbG93IHRoZSB1c2VyIHRvIGNoYW5nZSB0aGVpciBvd24gcGFzc3dvcmQuXG4gICAqIFxuICAgKiBSZW1lbWJlciB0byBzZW5kIHJlZnJlc2hUb2tlbiBpbiB0aGUgcmVxdWVzdCBib2R5IGlmIHlvdSB3YW50IHRvIGdldCBhIG5ldyByZWZyZXNoIHRva2VuIHdoZW4gbG9naW4gdXNpbmcgdGhlIHJldHVybmVkIG9uZVRpbWVQYXNzd29yZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcGFyYW0ge0NoYW5nZVBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZT4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGNoYW5nZVBhc3N3b3JkVXNpbmdKV1QsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgY2hhbmdlUGFzc3dvcmRCeUpXVChlbmNvZGVkSldUOiBzdHJpbmcsIHJlcXVlc3Q6IENoYW5nZVBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyBhIHVzZXIncyBwYXNzd29yZCB1c2luZyB0aGVpciBpZGVudGl0eSAobG9naW5JZCBhbmQgcGFzc3dvcmQpLiBVc2luZyBhIGxvZ2luSWQgaW5zdGVhZCBvZiB0aGUgY2hhbmdlUGFzc3dvcmRJZFxuICAgKiBieXBhc3NlcyB0aGUgZW1haWwgdmVyaWZpY2F0aW9uIGFuZCBhbGxvd3MgYSBwYXNzd29yZCB0byBiZSBjaGFuZ2VkIGRpcmVjdGx5IHdpdGhvdXQgZmlyc3QgY2FsbGluZyB0aGUgI2ZvcmdvdFBhc3N3b3JkXG4gICAqIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtDaGFuZ2VQYXNzd29yZFJlcXVlc3R9IHJlcXVlc3QgVGhlIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNoYW5nZSB0aGUgcGFzc3dvcmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNoYW5nZVBhc3N3b3JkQnlJZGVudGl0eShyZXF1ZXN0OiBDaGFuZ2VQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyBhIHVzZXIncyBwYXNzd29yZCB1c2luZyB0aGVpciBhY2Nlc3MgdG9rZW4gKEpXVCkgaW5zdGVhZCBvZiB0aGUgY2hhbmdlUGFzc3dvcmRJZFxuICAgKiBBIGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBtZXRob2Qgd2lsbCBiZSBpZiB5b3Ugd2FudCB0byBhbGxvdyB0aGUgdXNlciB0byBjaGFuZ2UgdGhlaXIgb3duIHBhc3N3b3JkLlxuICAgKiBcbiAgICogUmVtZW1iZXIgdG8gc2VuZCByZWZyZXNoVG9rZW4gaW4gdGhlIHJlcXVlc3QgYm9keSBpZiB5b3Ugd2FudCB0byBnZXQgYSBuZXcgcmVmcmVzaCB0b2tlbiB3aGVuIGxvZ2luIHVzaW5nIHRoZSByZXR1cm5lZCBvbmVUaW1lUGFzc3dvcmQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHBhcmFtIHtDaGFuZ2VQYXNzd29yZFJlcXVlc3R9IHJlcXVlc3QgVGhlIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNoYW5nZSB0aGUgcGFzc3dvcmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENoYW5nZVBhc3N3b3JkUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNoYW5nZVBhc3N3b3JkVXNpbmdKV1QoZW5jb2RlZEpXVDogc3RyaW5nLCByZXF1ZXN0OiBDaGFuZ2VQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENoYW5nZVBhc3N3b3JkUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIElkIGluIG9yZGVyIHRvIGNvbXBsZXRlIGEgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QuXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBlbmFibGVkIFR3by1GYWN0b3IgYXV0aGVudGljYXRpb24sIGJlZm9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBDaGFuZ2UgUGFzc3dvcmQgQVBJIHRvIGNoYW5nZVxuICAgKiB5b3VyIHBhc3N3b3JkLCB5b3UgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFuZ2VQYXNzd29yZElkIFRoZSBjaGFuZ2UgcGFzc3dvcmQgSWQgdXNlZCB0byBmaW5kIHRoZSB1c2VyLiBUaGlzIHZhbHVlIGlzIGdlbmVyYXRlZCBieSBGdXNpb25BdXRoIG9uY2UgdGhlIGNoYW5nZSBwYXNzd29yZCB3b3JrZmxvdyBoYXMgYmVlbiBpbml0aWF0ZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNoZWNrQ2hhbmdlUGFzc3dvcmRVc2luZ0lkKGNoYW5nZVBhc3N3b3JkSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY2hhbmdlUGFzc3dvcmRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIG11c3Qgb2J0YWluIGEgVHJ1c3QgVG9rZW4gSWQgaW4gb3JkZXIgdG8gY29tcGxldGUgYSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdC5cbiAgICogV2hlbiBhIHVzZXIgaGFzIGVuYWJsZWQgVHdvLUZhY3RvciBhdXRoZW50aWNhdGlvbiwgYmVmb3JlIHlvdSBhcmUgYWxsb3dlZCB0byB1c2UgdGhlIENoYW5nZSBQYXNzd29yZCBBUEkgdG8gY2hhbmdlXG4gICAqIHlvdXIgcGFzc3dvcmQsIHlvdSBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIGJ5IGNvbXBsZXRpbmcgYSBUd28tRmFjdG9yIFN0ZXAtVXAgYXV0aGVudGljYXRpb24uXG4gICAqIFxuICAgKiBBbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQwMCB3aXRoIGEgZ2VuZXJhbCBlcnJvciBjb2RlIG9mIFtUcnVzdFRva2VuUmVxdWlyZWRdIGluZGljYXRlcyB0aGF0IGEgVHJ1c3QgVG9rZW4gaXMgcmVxdWlyZWQgdG8gbWFrZSBhIFBPU1QgcmVxdWVzdCB0byB0aGlzIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGVja0NoYW5nZVBhc3N3b3JkVXNpbmdKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgbXVzdCBvYnRhaW4gYSBUcnVzdCBSZXF1ZXN0IElkIGluIG9yZGVyIHRvIGNvbXBsZXRlIGEgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QuXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBlbmFibGVkIFR3by1GYWN0b3IgYXV0aGVudGljYXRpb24sIGJlZm9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBDaGFuZ2UgUGFzc3dvcmQgQVBJIHRvIGNoYW5nZVxuICAgKiB5b3VyIHBhc3N3b3JkLCB5b3UgbXVzdCBvYnRhaW4gYSBUcnVzdCBSZXF1ZXN0IElkIGJ5IGNvbXBsZXRpbmcgYSBUd28tRmFjdG9yIFN0ZXAtVXAgYXV0aGVudGljYXRpb24uXG4gICAqIFxuICAgKiBBbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQwMCB3aXRoIGEgZ2VuZXJhbCBlcnJvciBjb2RlIG9mIFtUcnVzdFRva2VuUmVxdWlyZWRdIGluZGljYXRlcyB0aGF0IGEgVHJ1c3QgVG9rZW4gaXMgcmVxdWlyZWQgdG8gbWFrZSBhIFBPU1QgcmVxdWVzdCB0byB0aGlzIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2luSWQgVGhlIGxvZ2luSWQgKGVtYWlsIG9yIHVzZXJuYW1lKSBvZiB0aGUgVXNlciB0aGF0IHlvdSBpbnRlbmQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZCBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNoZWNrQ2hhbmdlUGFzc3dvcmRVc2luZ0xvZ2luSWQobG9naW5JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBsb2dpbklkIG9mIHRoZSBVc2VyIHRoYXQgeW91IGludGVuZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkIGZvci5cbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmc+fSBsb2dpbklkVHlwZXMgVGhlIGlkZW50aXR5IHR5cGVzIHRoYXQgRnVzaW9uQXV0aCB3aWxsIGNvbXBhcmUgdGhlIGxvZ2luSWQgdG8uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNoZWNrQ2hhbmdlUGFzc3dvcmRVc2luZ0xvZ2luSWRBbmRMb2dpbklkVHlwZXMobG9naW5JZDogc3RyaW5nLCBsb2dpbklkVHlwZXM6IEFycmF5PFN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWQnLCBsb2dpbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbG9naW5JZFR5cGVzJywgbG9naW5JZFR5cGVzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGEgQ2xpZW50IENyZWRlbnRpYWxzIGdyYW50IHJlcXVlc3QgdG8gb2J0YWluIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggRW50aXR5IGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuXG4gICAqICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gQmFzaWMgQXV0aG9yaXphdGlvbiBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGlzIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IChPcHRpb25hbCkgVGhlIGNsaWVudCBzZWNyZXQgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiAgICBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIEJhc2ljIEF1dGhvcml6YXRpb24gaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKE9wdGlvbmFsKSBUaGlzIHBhcmFtZXRlciBpcyB1c2VkIHRvIGluZGljYXRlIHdoaWNoIHRhcmdldCBlbnRpdHkgeW91IGFyZSByZXF1ZXN0aW5nIGFjY2Vzcy4gVG8gcmVxdWVzdCBhY2Nlc3MgdG8gYW4gZW50aXR5LCB1c2UgdGhlIGZvcm1hdCB0YXJnZXQtZW50aXR5OiZsdDt0YXJnZXQtZW50aXR5LWlkJmd0OzombHQ7cm9sZXMmZ3Q7LiBSb2xlcyBhcmUgYW4gb3B0aW9uYWwgY29tbWEgc2VwYXJhdGVkIGxpc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBjbGllbnRDcmVkZW50aWFsc0dyYW50KGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHNjb3BlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsICdjbGllbnRfY3JlZGVudGlhbHMnKTtcbiAgICBib2R5LmFwcGVuZCgnc2NvcGUnLCBzY29wZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29tbWVudCB0byB0aGUgdXNlcidzIGFjY291bnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VXNlckNvbW1lbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVzZXIgY29tbWVudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbW1lbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgY29tbWVudE9uVXNlcihyZXF1ZXN0OiBVc2VyQ29tbWVudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb21tZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbW1lbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29tbWVudCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlcyB2ZXJpZmljYXRpb24gb2YgYW4gaWRlbnRpdHkgdXNpbmcgdmVyaWZpY2F0aW9uIGNvZGVzIGZyb20gdGhlIFZlcmlmeSBTdGFydCBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5Q29tcGxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSBpZGVudGl0eSB2ZXJpZnkgY29tcGxldGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byB2ZXJpZnkgdGhlIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlDb21wbGV0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBjb21wbGV0ZVZlcmlmeUlkZW50aXR5KHJlcXVlc3Q6IFZlcmlmeUNvbXBsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5Q29tcGxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlDb21wbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHkvdmVyaWZ5L2NvbXBsZXRlJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgYSBXZWJBdXRobiBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueSBieSB2YWxpZGF0aW5nIHRoZSBzaWduYXR1cmUgYWdhaW5zdCB0aGUgcHJldmlvdXNseSBnZW5lcmF0ZWQgY2hhbGxlbmdlIHdpdGhvdXQgbG9nZ2luZyB0aGUgdXNlciBpblxuICAgKlxuICAgKiBAcGFyYW0ge1dlYkF1dGhuTG9naW5SZXF1ZXN0fSByZXF1ZXN0IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgbmVjZXNzYXJ5IGZvciBjb21wbGV0aW5nIHRoZSBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkFzc2VydFJlc3BvbnNlPj59XG4gICAqL1xuICBjb21wbGV0ZVdlYkF1dGhuQXNzZXJ0aW9uKHJlcXVlc3Q6IFdlYkF1dGhuTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkFzc2VydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFdlYkF1dGhuQXNzZXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9hc3NlcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255IGJ5IHZhbGlkYXRpbmcgdGhlIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBwcmV2aW91c2x5IGdlbmVyYXRlZCBjaGFsbGVuZ2UgYW5kIHRoZW4gbG9naW4gdGhlIHVzZXIgaW5cbiAgICpcbiAgICogQHBhcmFtIHtXZWJBdXRobkxvZ2luUmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3IgY29tcGxldGluZyB0aGUgYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgY29tcGxldGVXZWJBdXRobkxvZ2luKHJlcXVlc3Q6IFdlYkF1dGhuTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255IGJ5IHZhbGlkYXRpbmcgdGhlIGNsaWVudCByZXF1ZXN0IGFuZCBzYXZpbmcgdGhlIG5ldyBjcmVkZW50aWFsXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViQXV0aG5SZWdpc3RlckNvbXBsZXRlUmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3IgY29tcGxldGluZyB0aGUgcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBjb21wbGV0ZVdlYkF1dGhuUmVnaXN0cmF0aW9uKHJlcXVlc3Q6IFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vcmVnaXN0ZXIvY29tcGxldGUnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEFQSSBrZXkuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgdW5pcXVlIElkIGZvciB0aGUga2V5LCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBhbiBBUEkga2V5IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2l0aCBlcXVhbCBvciBsZXNzZXIgYXV0aG9yaXR5LiBBbiBBUEkga2V5IGNhbm5vdCBjcmVhdGUgYW5vdGhlciBBUEkga2V5IHVubGVzcyBpdCBpcyBncmFudGVkIFxuICAgKiB0byB0aGF0IEFQSSBrZXkuXG4gICAqIFxuICAgKiBJZiBhbiBBUEkga2V5IGlzIGxvY2tlZCB0byBhIHRlbmFudCwgaXQgY2FuIG9ubHkgY3JlYXRlIEFQSSBLZXlzIGZvciB0aGF0IHNhbWUgdGVuYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgQVBJIGtleS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBJZCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtBUElLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSB0aGUgQVBJS2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQVBJS2V5KGtleUlkOiBVVUlELCByZXF1ZXN0OiBBUElLZXlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBUElLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwaS1rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXBwbGljYXRpb24uIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgYXBwbGljYXRpb24sIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBJZCB0byB1c2UgZm9yIHRoZSBhcHBsaWNhdGlvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBhcHBsaWNhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHJvbGUgZm9yIGFuIGFwcGxpY2F0aW9uLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24geW91IGFyZSBjcmVhdGluZyB0aGUgcm9sZSBmb3IuXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgcm9sZSBpbnNpZGUgdGhlIEFwcGxpY2F0aW9uUm9sZSBvYmplY3QgaXRzZWxmLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBjcmVhdGUgdGhlIHJvbGUgb24uXG4gICAqIEBwYXJhbSB7VVVJRH0gcm9sZUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSByb2xlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGFwcGxpY2F0aW9uIHJvbGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUFwcGxpY2F0aW9uUm9sZShhcHBsaWNhdGlvbklkOiBVVUlELCByb2xlSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicm9sZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocm9sZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGF1ZGl0IGxvZyB3aXRoIHRoZSBtZXNzYWdlIGFuZCB1c2VyIG5hbWUgKHVzdWFsbHkgYW4gZW1haWwpLiBBdWRpdCBsb2dzIHNob3VsZCBiZSB3cml0dGVuIGFueXRpbWUgeW91XG4gICAqIG1ha2UgY2hhbmdlcyB0byB0aGUgRnVzaW9uQXV0aCBkYXRhYmFzZS4gV2hlbiB1c2luZyB0aGUgRnVzaW9uQXV0aCBBcHAgd2ViIGludGVyZmFjZSwgYW55IGNoYW5nZXMgYXJlIGF1dG9tYXRpY2FsbHlcbiAgICogd3JpdHRlbiB0byB0aGUgYXVkaXQgbG9nLiBIb3dldmVyLCBpZiB5b3UgYXJlIGFjY2Vzc2luZyB0aGUgQVBJLCB5b3UgbXVzdCB3cml0ZSB0aGUgYXVkaXQgbG9ncyB5b3Vyc2VsZi5cbiAgICpcbiAgICogQHBhcmFtIHtBdWRpdExvZ1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgYXVkaXQgbG9nIGVudHJ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1Jlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVBdWRpdExvZyhyZXF1ZXN0OiBBdWRpdExvZ1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXVkaXRMb2dSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9hdWRpdC1sb2cnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY29ubmVjdG9yLiAgWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBjb25uZWN0b3IsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBjb25uZWN0b3IuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtDb25uZWN0b3JSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGNvbm5lY3Rvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUNvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCwgcmVxdWVzdDogQ29ubmVjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1c2VyIGNvbnNlbnQgdHlwZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBjb25zZW50IHR5cGUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29uc2VudElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgY29uc2VudC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0NvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGNvbnNlbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQ29uc2VudChjb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IENvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZW1haWwgdGVtcGxhdGUuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgdGVtcGxhdGUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdGVtcGxhdGUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtFbWFpbFRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBlbWFpbCB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogRW1haWxUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gRW50aXR5LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIEVudGl0eS4gSWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIEVudGl0eS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0VudGl0eVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgRW50aXR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW50aXR5KGVudGl0eUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEVudGl0eSBUeXBlLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIEVudGl0eSBUeXBlLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIEVudGl0eSBUeXBlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgRW50aXR5IFR5cGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW50aXR5VHlwZShlbnRpdHlUeXBlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBlcm1pc3Npb24gZm9yIGFuIGVudGl0eSB0eXBlLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBJZCBvZiB0aGUgZW50aXR5IHR5cGUgeW91IGFyZSBjcmVhdGluZyB0aGUgcGVybWlzc2lvbiBmb3IuXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgcGVybWlzc2lvbiBpbnNpZGUgdGhlIEVudGl0eVR5cGVQZXJtaXNzaW9uIG9iamVjdCBpdHNlbGYsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgZW50aXR5IHR5cGUgdG8gY3JlYXRlIHRoZSBwZXJtaXNzaW9uIG9uLlxuICAgKiBAcGFyYW0ge1VVSUR9IHBlcm1pc3Npb25JZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgcGVybWlzc2lvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHBlcm1pc3Npb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW50aXR5VHlwZVBlcm1pc3Npb24oZW50aXR5VHlwZUlkOiBVVUlELCBwZXJtaXNzaW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJwZXJtaXNzaW9uXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChwZXJtaXNzaW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmYW1pbHkgd2l0aCB0aGUgdXNlciBJZCBpbiB0aGUgcmVxdWVzdCBhcyB0aGUgb3duZXIgYW5kIHNvbGUgbWVtYmVyIG9mIHRoZSBmYW1pbHkuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGVcbiAgICogZmFtaWx5LCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgZmFtaWx5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RmFtaWx5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBmYW1pbHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVGYW1pbHkoZmFtaWx5SWQ6IFVVSUQsIHJlcXVlc3Q6IEZhbWlseVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZhbWlseVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmFtaWx5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb3JtLiAgWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBmb3JtLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZvcm1JZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGZvcm0uIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtGb3JtUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBmb3JtLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUZvcm0oZm9ybUlkOiBVVUlELCByZXF1ZXN0OiBGb3JtUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZm9ybUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZm9ybSBmaWVsZC4gIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgZm9ybSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmaWVsZElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgZm9ybSBmaWVsZC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0Zvcm1GaWVsZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZm9ybSBmaWVsZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUZvcm1GaWVsZChmaWVsZElkOiBVVUlELCByZXF1ZXN0OiBGb3JtRmllbGRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtRmllbGRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmllbGRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGdyb3VwLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGdyb3VwLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBncm91cC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0dyb3VwUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBncm91cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlR3JvdXAoZ3JvdXBJZDogVVVJRCwgcmVxdWVzdDogR3JvdXBSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEdyb3VwUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChncm91cElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbWVtYmVyIGluIGEgZ3JvdXAuXG4gICAqXG4gICAqIEBwYXJhbSB7TWVtYmVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBncm91cCBtZW1iZXIocykuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lbWJlclJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVHcm91cE1lbWJlcnMocmVxdWVzdDogTWVtYmVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVtYmVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVtYmVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cC9tZW1iZXInKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIElQIEFjY2VzcyBDb250cm9sIExpc3QuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIG9uIHRoaXMgY3JlYXRlIHJlcXVlc3QsIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjY2Vzc0NvbnRyb2xMaXN0SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7SVBBY2Nlc3NDb250cm9sTGlzdFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVJUEFjY2Vzc0NvbnRyb2xMaXN0KGFjY2Vzc0NvbnRyb2xMaXN0SWQ6IFVVSUQsIHJlcXVlc3Q6IElQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjY2Vzc0NvbnRyb2xMaXN0SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaWRlbnRpdHkgcHJvdmlkZXIuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgaWRlbnRpdHkgcHJvdmlkZXIsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUlkZW50aXR5UHJvdmlkZXIoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCByZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIExhbWJkYS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBsYW1iZGEsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbGFtYmRhSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBsYW1iZGEuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtMYW1iZGFSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGxhbWJkYS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUxhbWJkYShsYW1iZGFJZDogVVVJRCwgcmVxdWVzdDogTGFtYmRhUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobGFtYmRhSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gbWVzc2FnZSB0ZW1wbGF0ZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB0ZW1wbGF0ZSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzYWdlVGVtcGxhdGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHRlbXBsYXRlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNzYWdlIHRlbXBsYXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlTWVzc2FnZVRlbXBsYXRlKG1lc3NhZ2VUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2FnZVRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtZXNzZW5nZXIuICBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIG1lc3NlbmdlciwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzZW5nZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIG1lc3Nlbmdlci4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge01lc3NlbmdlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzc2VuZ2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlELCByZXF1ZXN0OiBNZXNzZW5nZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjdXN0b20gT0F1dGggc2NvcGUgZm9yIGFuIGFwcGxpY2F0aW9uLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24geW91IGFyZSBjcmVhdGluZyB0aGUgc2NvcGUgZm9yLlxuICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIE9BdXRoIHNjb3BlIG9uIHRoZSBVUkwsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGNyZWF0ZSB0aGUgT0F1dGggc2NvcGUgb24uXG4gICAqIEBwYXJhbSB7VVVJRH0gc2NvcGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgT0F1dGggc2NvcGUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIE9BdXRoIE9BdXRoIHNjb3BlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlT0F1dGhTY29wZShhcHBsaWNhdGlvbklkOiBVVUlELCBzY29wZUlkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvbk9BdXRoU2NvcGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInNjb3BlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChzY29wZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGVuYW50LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHRlbmFudCwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHRlbmFudC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1RlbmFudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdGVuYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVGVuYW50KHRlbmFudElkOiBVVUlELCByZXF1ZXN0OiBUZW5hbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFRoZW1lLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHRoZW1lLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRoZW1lSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB0aGVtZS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1RoZW1lUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB0aGVtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVGhlbWUodGhlbWVJZDogVVVJRCwgcmVxdWVzdDogVGhlbWVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0aGVtZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdXNlci4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB1c2VyLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHVzZXIuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtVc2VyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXIodXNlcklkOiBVVUlELCByZXF1ZXN0OiBVc2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdXNlciBhY3Rpb24uIFRoaXMgYWN0aW9uIGNhbm5vdCBiZSB0YWtlbiBvbiBhIHVzZXIgdW50aWwgdGhpcyBjYWxsIHN1Y2Nlc3NmdWxseSByZXR1cm5zLiBBbnl0aW1lIGFmdGVyXG4gICAqIHRoYXQgdGhlIHVzZXIgYWN0aW9uIGNhbiBiZSBhcHBsaWVkIHRvIGFueSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHVzZXIgYWN0aW9uLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdXNlciBhY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdXNlciByZWFzb24uIFRoaXMgdXNlciBhY3Rpb24gcmVhc29uIGNhbm5vdCBiZSB1c2VkIHdoZW4gYWN0aW9uaW5nIGEgdXNlciB1bnRpbCB0aGlzIGNhbGwgY29tcGxldGVzXG4gICAqIHN1Y2Nlc3NmdWxseS4gQW55dGltZSBhZnRlciB0aGF0IHRoZSB1c2VyIGFjdGlvbiByZWFzb24gY2FuIGJlIHVzZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvblJlYXNvbklkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdXNlciBhY3Rpb24gcmVhc29uLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlYXNvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdXNlciBhY3Rpb24gcmVhc29uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVhc29uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzaW5nbGUgVXNlciBjb25zZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJDb25zZW50SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBVc2VyIGNvbnNlbnQuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtVc2VyQ29uc2VudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlciBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVVc2VyQ29uc2VudCh1c2VyQ29uc2VudElkOiBVVUlELCByZXF1ZXN0OiBVc2VyQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbnNlbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQ29uc2VudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW5rIGFuIGV4dGVybmFsIHVzZXIgZnJvbSBhIDNyZCBwYXJ0eSBpZGVudGl0eSBwcm92aWRlciB0byBhIEZ1c2lvbkF1dGggdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyTGlua1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGxpbmsgdGhlIEZ1c2lvbkF1dGggdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVXNlckxpbmsocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlckxpbmtSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9saW5rJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHdlYmhvb2suIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgd2ViaG9vaywgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB3ZWJob29rSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB3ZWJob29rLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7V2ViaG9va1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgd2ViaG9vay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVXZWJob29rKHdlYmhvb2tJZDogVVVJRCwgcmVxdWVzdDogV2ViaG9va1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJob29rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHdlYmhvb2tJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWFjdGl2YXRlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIEZ1c2lvbkF1dGggUmVhY3Rvci5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZVJlYWN0b3IoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZVVzZXIodXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIHVzZXIgYWN0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlYWN0aXZhdGVVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgdXNlcnMgd2l0aCB0aGUgZ2l2ZW4gSWRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHVzZXJJZHMgVGhlIGlkcyBvZiB0aGUgdXNlcnMgdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVhY3RpdmF0ZVVzZXJzQnlJZHMsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgZGVhY3RpdmF0ZVVzZXJzKHVzZXJJZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyRGVsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2J1bGsnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkcylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2RyeVJ1bicsIGZhbHNlKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaGFyZERlbGV0ZScsIGZhbHNlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgdXNlcnMgd2l0aCB0aGUgZ2l2ZW4gSWRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHVzZXJJZHMgVGhlIGlkcyBvZiB0aGUgdXNlcnMgdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBkZWFjdGl2YXRlVXNlcnNCeUlkcyh1c2VySWRzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckRlbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9idWxrJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZHMpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdkcnlSdW4nLCBmYWxzZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2hhcmREZWxldGUnLCBmYWxzZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgQVBJIGtleSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUgYXV0aGVudGljYXRpb24gQVBJIGtleSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUFQSUtleShrZXlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFyZCBkZWxldGVzIGFuIGFwcGxpY2F0aW9uLiBUaGlzIGlzIGEgZGFuZ2Vyb3VzIG9wZXJhdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG1vc3QgY2lyY3Vtc3RhbmNlcy4gVGhpcyB3aWxsXG4gICAqIGRlbGV0ZSB0aGUgYXBwbGljYXRpb24sIGFueSByZWdpc3RyYXRpb25zIGZvciB0aGF0IGFwcGxpY2F0aW9uLCBtZXRyaWNzIGFuZCByZXBvcnRzIGZvciB0aGUgYXBwbGljYXRpb24sIGFsbCB0aGVcbiAgICogcm9sZXMgZm9yIHRoZSBhcHBsaWNhdGlvbiwgYW5kIGFueSBvdGhlciBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXBwbGljYXRpb24uIFRoaXMgb3BlcmF0aW9uIGNvdWxkIHRha2UgYSB2ZXJ5XG4gICAqIGxvbmcgdGltZSwgZGVwZW5kaW5nIG9uIHRoZSBhbW91bnQgb2YgZGF0YSBpbiB5b3VyIGRhdGFiYXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFyZCBkZWxldGVzIGFuIGFwcGxpY2F0aW9uIHJvbGUuIFRoaXMgaXMgYSBkYW5nZXJvdXMgb3BlcmF0aW9uIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbW9zdCBjaXJjdW1zdGFuY2VzLiBUaGlzXG4gICAqIHBlcm1hbmVudGx5IHJlbW92ZXMgdGhlIGdpdmVuIHJvbGUgZnJvbSBhbGwgdXNlcnMgdGhhdCBoYWQgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIHJvbGUgYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSByb2xlSWQgVGhlIElkIG9mIHRoZSByb2xlIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlQXBwbGljYXRpb25Sb2xlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJvbGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicm9sZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocm9sZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBjb25uZWN0b3IgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25uZWN0b3JJZCBUaGUgSWQgb2YgdGhlIGNvbm5lY3RvciB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUNvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbm5lY3RvcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBjb25zZW50IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29uc2VudElkIFRoZSBJZCBvZiB0aGUgY29uc2VudCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUNvbnNlbnQoY29uc2VudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgZW1haWwgdGVtcGxhdGUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIEVudGl0eSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRW50aXR5KGVudGl0eUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gRW50aXR5IEdyYW50IGZvciB0aGUgZ2l2ZW4gVXNlciBvciBFbnRpdHkuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgdGhhdCB0aGUgRW50aXR5IEdyYW50IGlzIGJlaW5nIGRlbGV0ZWQgZm9yLlxuICAgKiBAcGFyYW0ge1VVSUR9IHJlY2lwaWVudEVudGl0eUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBFbnRpdHkgdGhhdCB0aGUgRW50aXR5IEdyYW50IGlzIGZvci5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIFVzZXIgdGhhdCB0aGUgRW50aXR5IEdyYW50IGlzIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRW50aXR5R3JhbnQoZW50aXR5SWQ6IFVVSUQsIHJlY2lwaWVudEVudGl0eUlkOiBVVUlELCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwiZ3JhbnRcIilcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlY2lwaWVudEVudGl0eUlkJywgcmVjaXBpZW50RW50aXR5SWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIEVudGl0eSBUeXBlIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IFR5cGUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXJkIGRlbGV0ZXMgYSBwZXJtaXNzaW9uLiBUaGlzIGlzIGEgZGFuZ2Vyb3VzIG9wZXJhdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG1vc3QgY2lyY3Vtc3RhbmNlcy4gVGhpc1xuICAgKiBwZXJtYW5lbnRseSByZW1vdmVzIHRoZSBnaXZlbiBwZXJtaXNzaW9uIGZyb20gYWxsIGdyYW50cyB0aGF0IGhhZCBpdC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBlbnRpdHlUeXBlIHRoZSB0aGUgcGVybWlzc2lvbiBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHBlcm1pc3Npb25JZCBUaGUgSWQgb2YgdGhlIHBlcm1pc3Npb24gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbnRpdHlUeXBlUGVybWlzc2lvbihlbnRpdHlUeXBlSWQ6IFVVSUQsIHBlcm1pc3Npb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJwZXJtaXNzaW9uXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChwZXJtaXNzaW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGZvcm0gZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmb3JtSWQgVGhlIElkIG9mIHRoZSBmb3JtIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRm9ybShmb3JtSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZm9ybUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBmb3JtIGZpZWxkIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmllbGRJZCBUaGUgSWQgb2YgdGhlIGZvcm0gZmllbGQgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVGb3JtRmllbGQoZmllbGRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybS9maWVsZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmaWVsZElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBncm91cCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgVGhlIElkIG9mIHRoZSBncm91cCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUdyb3VwKGdyb3VwSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGdyb3VwSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdXNlcnMgYXMgbWVtYmVycyBvZiBhIGdyb3VwLlxuICAgKlxuICAgKiBAcGFyYW0ge01lbWJlckRlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIG1lbWJlciByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHJlbW92ZSBtZW1iZXJzIHRvIHRoZSBncm91cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlR3JvdXBNZW1iZXJzKHJlcXVlc3Q6IE1lbWJlckRlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwL21lbWJlcicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlwQWNjZXNzQ29udHJvbExpc3RJZCBUaGUgSWQgb2YgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3QgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVJUEFjY2Vzc0NvbnRyb2xMaXN0KGlwQWNjZXNzQ29udHJvbExpc3RJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlwQWNjZXNzQ29udHJvbExpc3RJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgVGhlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlciB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUlkZW50aXR5UHJvdmlkZXIoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGtleSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUga2V5IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlS2V5KGtleUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGxhbWJkYSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGxhbWJkYUlkIFRoZSBJZCBvZiB0aGUgbGFtYmRhIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlTGFtYmRhKGxhbWJkYUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobGFtYmRhSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzYWdlVGVtcGxhdGVJZCBUaGUgSWQgb2YgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVNZXNzYWdlVGVtcGxhdGUobWVzc2FnZVRlbXBsYXRlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2FnZVRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIG1lc3NlbmdlciBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NlbmdlcklkIFRoZSBJZCBvZiB0aGUgbWVzc2VuZ2VyIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzZW5nZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2VuZ2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhcmQgZGVsZXRlcyBhIGN1c3RvbSBPQXV0aCBzY29wZS5cbiAgICogT0F1dGggd29ya2Zsb3dzIHRoYXQgYXJlIHN0aWxsIHJlcXVlc3RpbmcgdGhlIGRlbGV0ZWQgT0F1dGggc2NvcGUgbWF5IGZhaWwgZGVwZW5kaW5nIG9uIHRoZSBhcHBsaWNhdGlvbidzIHVua25vd24gc2NvcGUgcG9saWN5LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSBPQXV0aCBzY29wZSBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHNjb3BlSWQgVGhlIElkIG9mIHRoZSBPQXV0aCBzY29wZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZU9BdXRoU2NvcGUoYXBwbGljYXRpb25JZDogVVVJRCwgc2NvcGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwic2NvcGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHNjb3BlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgcmVnaXN0cmF0aW9uIGZvciB0aGUgZ2l2ZW4gdXNlciBhbmQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB3aG9zZSByZWdpc3RyYXRpb24gaXMgYmVpbmcgZGVsZXRlZC5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gcmVtb3ZlIHRoZSByZWdpc3RyYXRpb24gZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVSZWdpc3RyYXRpb24odXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGdpdmVuIHVzZXIgYW5kIGFwcGxpY2F0aW9uIGFsb25nIHdpdGggdGhlIGdpdmVuIEpTT04gYm9keSB0aGF0IGNvbnRhaW5zIHRoZSBldmVudCBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHdob3NlIHJlZ2lzdHJhdGlvbiBpcyBiZWluZyBkZWxldGVkLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byByZW1vdmUgdGhlIHJlZ2lzdHJhdGlvbiBmb3IuXG4gICAqIEBwYXJhbSB7UmVnaXN0cmF0aW9uRGVsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBib2R5IHRoYXQgY29udGFpbnMgdGhlIGV2ZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVSZWdpc3RyYXRpb25XaXRoUmVxdWVzdCh1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IFJlZ2lzdHJhdGlvbkRlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdGVuYW50IGJhc2VkIG9uIHRoZSBnaXZlbiBJZCBvbiB0aGUgVVJMLiBUaGlzIHBlcm1hbmVudGx5IGRlbGV0ZXMgYWxsIGluZm9ybWF0aW9uLCBtZXRyaWNzLCByZXBvcnRzIGFuZCBkYXRhIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgdGVuYW50IGFuZCBldmVyeXRoaW5nIHVuZGVyIHRoZSB0ZW5hbnQgKGFwcGxpY2F0aW9ucywgdXNlcnMsIGV0YykuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVUZW5hbnQodGVuYW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdGVuYW50IGZvciB0aGUgZ2l2ZW4gSWQgYXN5bmNocm9ub3VzbHkuXG4gICAqIFRoaXMgbWV0aG9kIGlzIGhlbHBmdWwgaWYgeW91IGRvIG5vdCB3YW50IHRvIHdhaXQgZm9yIHRoZSBkZWxldGUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVGVuYW50QXN5bmModGVuYW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FzeW5jJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdGVuYW50IGJhc2VkIG9uIHRoZSBnaXZlbiByZXF1ZXN0IChzZW50IHRvIHRoZSBBUEkgYXMgSlNPTikuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyBhbGwgaW5mb3JtYXRpb24sIG1ldHJpY3MsIHJlcG9ydHMgYW5kIGRhdGEgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSB0ZW5hbnQgYW5kIGV2ZXJ5dGhpbmcgdW5kZXIgdGhlIHRlbmFudCAoYXBwbGljYXRpb25zLCB1c2VycywgZXRjKS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudCB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7VGVuYW50RGVsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gZGVsZXRlIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVUZW5hbnRXaXRoUmVxdWVzdCh0ZW5hbnRJZDogVVVJRCwgcmVxdWVzdDogVGVuYW50RGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHRoZW1lIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGhlbWVJZCBUaGUgSWQgb2YgdGhlIHRoZW1lIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVGhlbWUodGhlbWVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGhlbWVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciBmb3IgdGhlIGdpdmVuIElkLiBUaGlzIHBlcm1hbmVudGx5IGRlbGV0ZXMgYWxsIGluZm9ybWF0aW9uLCBtZXRyaWNzLCByZXBvcnRzIGFuZCBkYXRhIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaGFyZERlbGV0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgYWN0aW9uIGZvciB0aGUgZ2l2ZW4gSWQuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyB0aGUgdXNlciBhY3Rpb24gYW5kIGFsc28gYW55IGhpc3RvcnkgYW5kIGxvZ3Mgb2ZcbiAgICogdGhlIGFjdGlvbiBiZWluZyBhcHBsaWVkIHRvIGFueSB1c2Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciBhY3Rpb24gcmVhc29uIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvblJlYXNvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gcmVhc29uIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVXNlckFjdGlvblJlYXNvbih1c2VyQWN0aW9uUmVhc29uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBleGlzdGluZyBsaW5rIHRoYXQgaGFzIGJlZW4gbWFkZSBmcm9tIGEgM3JkIHBhcnR5IGlkZW50aXR5IHByb3ZpZGVyIHRvIGEgRnVzaW9uQXV0aCB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aXR5UHJvdmlkZXJVc2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgdXNlciBpbiB0aGUgM3JkIHBhcnR5IGlkZW50aXR5IHByb3ZpZGVyIHRvIHVubGluay5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCB1c2VyIHRvIHVubGluay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+fVxuICAgKi9cbiAgZGVsZXRlVXNlckxpbmsoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCBpZGVudGl0eVByb3ZpZGVyVXNlcklkOiBzdHJpbmcsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbGluaycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZGVudGl0eVByb3ZpZGVySWQnLCBpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZGVudGl0eVByb3ZpZGVyVXNlcklkJywgaWRlbnRpdHlQcm92aWRlclVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciBiYXNlZCBvbiB0aGUgZ2l2ZW4gcmVxdWVzdCAoc2VudCB0byB0aGUgQVBJIGFzIEpTT04pLiBUaGlzIHBlcm1hbmVudGx5IGRlbGV0ZXMgYWxsIGluZm9ybWF0aW9uLCBtZXRyaWNzLCByZXBvcnRzIGFuZCBkYXRhIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGRlbGV0ZSAocmVxdWlyZWQpLlxuICAgKiBAcGFyYW0ge1VzZXJEZWxldGVTaW5nbGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBkZWxldGUgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJXaXRoUmVxdWVzdCh1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJEZWxldGVTaW5nbGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VycyB3aXRoIHRoZSBnaXZlbiBJZHMsIG9yIHVzZXJzIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBKU09OIHF1ZXJ5IG9yIHF1ZXJ5U3RyaW5nLlxuICAgKiBUaGUgb3JkZXIgb2YgcHJlZmVyZW5jZSBpcyBJZHMsIHF1ZXJ5IGFuZCB0aGVuIHF1ZXJ5U3RyaW5nLCBpdCBpcyByZWNvbW1lbmRlZCB0byBvbmx5IHByb3ZpZGUgb25lIG9mIHRoZSB0aHJlZSBmb3IgdGhlIHJlcXVlc3QuXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBkZWFjdGl2YXRlIG9yIHBlcm1hbmVudGx5IGRlbGV0ZSAoaGFyZC1kZWxldGUpIHVzZXJzIGJhc2VkIHVwb24gdGhlIGhhcmREZWxldGUgYm9vbGVhbiBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKiBVc2luZyB0aGUgZHJ5UnVuIHBhcmFtZXRlciB5b3UgbWF5IGFsc28gcmVxdWVzdCB0aGUgcmVzdWx0IG9mIHRoZSBhY3Rpb24gd2l0aG91dCBhY3R1YWxseSBkZWxldGluZyBvciBkZWFjdGl2YXRpbmcgYW55IHVzZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VzZXJEZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSBVc2VyRGVsZXRlUmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVsZXRlVXNlcnNCeVF1ZXJ5LCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIGRlbGV0ZVVzZXJzKHJlcXVlc3Q6IFVzZXJEZWxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckRlbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9idWxrJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VycyB3aXRoIHRoZSBnaXZlbiBJZHMsIG9yIHVzZXJzIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBKU09OIHF1ZXJ5IG9yIHF1ZXJ5U3RyaW5nLlxuICAgKiBUaGUgb3JkZXIgb2YgcHJlZmVyZW5jZSBpcyBJZHMsIHF1ZXJ5IGFuZCB0aGVuIHF1ZXJ5U3RyaW5nLCBpdCBpcyByZWNvbW1lbmRlZCB0byBvbmx5IHByb3ZpZGUgb25lIG9mIHRoZSB0aHJlZSBmb3IgdGhlIHJlcXVlc3QuXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBkZWFjdGl2YXRlIG9yIHBlcm1hbmVudGx5IGRlbGV0ZSAoaGFyZC1kZWxldGUpIHVzZXJzIGJhc2VkIHVwb24gdGhlIGhhcmREZWxldGUgYm9vbGVhbiBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKiBVc2luZyB0aGUgZHJ5UnVuIHBhcmFtZXRlciB5b3UgbWF5IGFsc28gcmVxdWVzdCB0aGUgcmVzdWx0IG9mIHRoZSBhY3Rpb24gd2l0aG91dCBhY3R1YWxseSBkZWxldGluZyBvciBkZWFjdGl2YXRpbmcgYW55IHVzZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VzZXJEZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSBVc2VyRGVsZXRlUmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBkZWxldGVVc2Vyc0J5UXVlcnkocmVxdWVzdDogVXNlckRlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyRGVsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2J1bGsnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIFdlYkF1dGhuIGNyZWRlbnRpYWwgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZCBUaGUgSWQgb2YgdGhlIFdlYkF1dGhuIGNyZWRlbnRpYWwgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVXZWJBdXRobkNyZWRlbnRpYWwoaWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB3ZWJob29rIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0lkIFRoZSBJZCBvZiB0aGUgd2ViaG9vayB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHdlYmhvb2tJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgVXNlciBmb3Igd2hpY2ggeW91J3JlIGRpc2FibGluZyB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kSWQgVGhlIHR3by1mYWN0b3IgbWV0aG9kIGlkZW50aWZpZXIgeW91IHdpc2ggdG8gZGlzYWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgdHdvLWZhY3RvciBjb2RlIHVzZWQgdmVyaWZ5IHRoZSB0aGUgY2FsbGVyIGtub3dzIHRoZSB0d28tZmFjdG9yIHNlY3JldC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGlzYWJsZVR3b0ZhY3Rvcih1c2VySWQ6IFVVSUQsIG1ldGhvZElkOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ21ldGhvZElkJywgbWV0aG9kSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdjb2RlJywgY29kZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIHVzZXIgdXNpbmcgYSBKU09OIGJvZHkgcmF0aGVyIHRoYW4gVVJMIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgVXNlciBmb3Igd2hpY2ggeW91J3JlIGRpc2FibGluZyB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvckRpc2FibGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IGluZm9ybWF0aW9uIHRoYXQgY29udGFpbnMgdGhlIGNvZGUgYW5kIG1ldGhvZElkIGFsb25nIHdpdGggYW55IGV2ZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkaXNhYmxlVHdvRmFjdG9yV2l0aFJlcXVlc3QodXNlcklkOiBVVUlELCByZXF1ZXN0OiBUd29GYWN0b3JEaXNhYmxlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZW5hYmxlIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yUmVxdWVzdH0gcmVxdWVzdCBUaGUgdHdvLWZhY3RvciBlbmFibGUgcmVxdWVzdCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIGVuYWJsZVR3b0ZhY3Rvcih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFR3b0ZhY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2VzIGFuIE9BdXRoIGF1dGhvcml6YXRpb24gY29kZSBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKiBNYWtlcyBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgZnJvbSB0aGUgQXV0aG9yaXplIGVuZHBvaW50IGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIFRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgb24gdGhlIC9vYXV0aDIvYXV0aG9yaXplIHJlc3BvbnNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS5cbiAgICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiBCYXNpYyBBdXRob3JpemF0aW9uIGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHJlcXVpcmVkIGlmIGNsaWVudCBhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVkaXJlY3RfdXJpIFRoZSBVUkkgdG8gcmVkaXJlY3QgdG8gdXBvbiBhIHN1Y2Nlc3NmdWwgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlT0F1dGhDb2RlRm9yQWNjZXNzVG9rZW4oY29kZTogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCByZWRpcmVjdF91cmk6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgnY29kZScsIGNvZGUpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAnYXV0aG9yaXphdGlvbl9jb2RlJyk7XG4gICAgYm9keS5hcHBlbmQoJ3JlZGlyZWN0X3VyaScsIHJlZGlyZWN0X3VyaSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZXMgYW4gT0F1dGggYXV0aG9yaXphdGlvbiBjb2RlIGFuZCBjb2RlX3ZlcmlmaWVyIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqIE1ha2VzIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIGF1dGhvcml6YXRpb24gY29kZSByZXR1cm5lZCBmcm9tIHRoZSBBdXRob3JpemUgZW5kcG9pbnQgYW5kIGEgY29kZV92ZXJpZmllciBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIG9uIHRoZSAvb2F1dGgyL2F1dGhvcml6ZSByZXNwb25zZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHByb3ZpZGVkLlxuICAgKiAgICBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIEJhc2ljIEF1dGhvcml6YXRpb24gaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkgaW5zdGVhZCBvZiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdF91cmkgVGhlIFVSSSB0byByZWRpcmVjdCB0byB1cG9uIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZV92ZXJpZmllciBUaGUgcmFuZG9tIHN0cmluZyBnZW5lcmF0ZWQgcHJldmlvdXNseS4gV2lsbCBiZSBjb21wYXJlZCB3aXRoIHRoZSBjb2RlX2NoYWxsZW5nZSBzZW50IHByZXZpb3VzbHksIHdoaWNoIGFsbG93cyB0aGUgT0F1dGggcHJvdmlkZXIgdG8gYXV0aGVudGljYXRlIHlvdXIgYXBwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VPQXV0aENvZGVGb3JBY2Nlc3NUb2tlblVzaW5nUEtDRShjb2RlOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHJlZGlyZWN0X3VyaTogc3RyaW5nLCBjb2RlX3ZlcmlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NvZGUnLCBjb2RlKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ2F1dGhvcml6YXRpb25fY29kZScpO1xuICAgIGJvZHkuYXBwZW5kKCdyZWRpcmVjdF91cmknLCByZWRpcmVjdF91cmkpO1xuICAgIGJvZHkuYXBwZW5kKCdjb2RlX3ZlcmlmaWVyJywgY29kZV92ZXJpZmllcik7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBhIFJlZnJlc2ggVG9rZW4gZm9yIGFuIEFjY2VzcyBUb2tlbi5cbiAgICogSWYgeW91IHdpbGwgYmUgdXNpbmcgdGhlIFJlZnJlc2ggVG9rZW4gR3JhbnQsIHlvdSB3aWxsIG1ha2UgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgdXNlcuKAmXMgcmVmcmVzaCB0b2tlbiBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaF90b2tlbiBUaGUgcmVmcmVzaCB0b2tlbiB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0byBleGNoYW5nZSBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS4gVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgaXMgcHJvdmlkZWQuXG4gICAqICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gQmFzaWMgQXV0aG9yaXphdGlvbiBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGlzIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IChPcHRpb25hbCkgVGhlIGNsaWVudCBzZWNyZXQuIFRoaXMgdmFsdWUgbWF5IG9wdGlvbmFsbHkgYmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYm9keSBpbnN0ZWFkIG9mIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlIChPcHRpb25hbCkgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgYW5kIGlmIG9taXR0ZWQsIHRoZSBzYW1lIHNjb3BlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIGF1dGhvcml6YXRpb24gcmVxdWVzdCB3aWxsIGJlIHVzZWQuIElmIHByb3ZpZGVkIHRoZSBzY29wZXMgbXVzdCBtYXRjaCB0aG9zZSByZXF1ZXN0ZWQgZHVyaW5nIHRoZSBpbml0aWFsIGF1dGhvcml6YXRpb24gcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJfY29kZSAoT3B0aW9uYWwpIFRoZSBlbmQtdXNlciB2ZXJpZmljYXRpb24gY29kZS4gVGhpcyBjb2RlIGlzIHJlcXVpcmVkIGlmIHVzaW5nIHRoaXMgZW5kcG9pbnQgdG8gYXBwcm92ZSB0aGUgRGV2aWNlIEF1dGhvcml6YXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBleGNoYW5nZVJlZnJlc2hUb2tlbkZvckFjY2Vzc1Rva2VuKHJlZnJlc2hfdG9rZW46IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgc2NvcGU6IHN0cmluZywgdXNlcl9jb2RlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ3JlZnJlc2hfdG9rZW4nLCByZWZyZXNoX3Rva2VuKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ3JlZnJlc2hfdG9rZW4nKTtcbiAgICBib2R5LmFwcGVuZCgnc2NvcGUnLCBzY29wZSk7XG4gICAgYm9keS5hcHBlbmQoJ3VzZXJfY29kZScsIHVzZXJfY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBhIHJlZnJlc2ggdG9rZW4gZm9yIGEgbmV3IEpXVC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWZyZXNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVmcmVzaCByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RSZWZyZXNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIGV4Y2hhbmdlUmVmcmVzaFRva2VuRm9ySldUKHJlcXVlc3Q6IFJlZnJlc2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RSZWZyZXNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8SldUUmVmcmVzaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBVc2VyIENyZWRlbnRpYWxzIGZvciBhIFRva2VuLlxuICAgKiBJZiB5b3Ugd2lsbCBiZSB1c2luZyB0aGUgUmVzb3VyY2UgT3duZXIgUGFzc3dvcmQgQ3JlZGVudGlhbCBHcmFudCwgeW91IHdpbGwgbWFrZSBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSB1c2Vy4oCZcyBlbWFpbCBhbmQgcGFzc3dvcmQgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJuYW1lIFRoZSBsb2dpbiBpZGVudGlmaWVyIG9mIHRoZSB1c2VyLiBUaGUgbG9naW4gaWRlbnRpZmllciBjYW4gYmUgZWl0aGVyIHRoZSBlbWFpbCBvciB0aGUgdXNlcm5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCBUaGUgdXNlcuKAmXMgcGFzc3dvcmQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBwcm92aWRlZC5cbiAgICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiBCYXNpYyBBdXRob3JpemF0aW9uIGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoaXMgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5IGluc3RlYWQgb2YgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKE9wdGlvbmFsKSBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgaWYgb21pdHRlZCwgdGhlIHNhbWUgc2NvcGUgcmVxdWVzdGVkIGR1cmluZyB0aGUgYXV0aG9yaXphdGlvbiByZXF1ZXN0IHdpbGwgYmUgdXNlZC4gSWYgcHJvdmlkZWQgdGhlIHNjb3BlcyBtdXN0IG1hdGNoIHRob3NlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIGluaXRpYWwgYXV0aG9yaXphdGlvbiByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIChPcHRpb25hbCkgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLiBUaGlzIGNvZGUgaXMgcmVxdWlyZWQgaWYgdXNpbmcgdGhpcyBlbmRwb2ludCB0byBhcHByb3ZlIHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlVXNlckNyZWRlbnRpYWxzRm9yQWNjZXNzVG9rZW4odXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgc2NvcGU6IHN0cmluZywgdXNlcl9jb2RlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ3VzZXJuYW1lJywgdXNlcm5hbWUpO1xuICAgIGJvZHkuYXBwZW5kKCdwYXNzd29yZCcsIHBhc3N3b3JkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ3Bhc3N3b3JkJyk7XG4gICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgc2NvcGUpO1xuICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQmVnaW5zIHRoZSBmb3Jnb3QgcGFzc3dvcmQgc2VxdWVuY2UsIHdoaWNoIGtpY2tzIG9mZiBhbiBlbWFpbCB0byB0aGUgdXNlciBzbyB0aGF0IHRoZXkgY2FuIHJlc2V0IHRoZWlyIHBhc3N3b3JkLlxuICAgKlxuICAgKiBAcGFyYW0ge0ZvcmdvdFBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBzbyB0aGF0IHRoZXkgY2FuIGJlIGVtYWlsZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcmdvdFBhc3N3b3JkUmVzcG9uc2U+Pn1cbiAgICovXG4gIGZvcmdvdFBhc3N3b3JkKHJlcXVlc3Q6IEZvcmdvdFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9yZ290UGFzc3dvcmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3Jnb3RQYXNzd29yZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mb3Jnb3QtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG5ldyBFbWFpbCBWZXJpZmljYXRpb24gSWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBWZXJpZnkgRW1haWwgQVBJLiBUaGlzIEFQSSB3aWxsIG5vdCBhdHRlbXB0IHRvIHNlbmQgYW5cbiAgICogZW1haWwgdG8gdGhlIFVzZXIuIFRoaXMgQVBJIG1heSBiZSB1c2VkIHRvIGNvbGxlY3QgdGhlIHZlcmlmaWNhdGlvbklkIGZvciB1c2Ugd2l0aCBhIHRoaXJkIHBhcnR5IHN5c3RlbS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZUVtYWlsVmVyaWZpY2F0aW9uSWQoZW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlFbWFpbFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzZW5kVmVyaWZ5RW1haWwnLCBmYWxzZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcgUlNBIG9yIEVDIGtleSBwYWlyIG9yIGFuIEhNQUMgc2VjcmV0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUga2V5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7S2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXkvZ2VuZXJhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IEFwcGxpY2F0aW9uIFJlZ2lzdHJhdGlvbiBWZXJpZmljYXRpb24gSWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBWZXJpZnkgUmVnaXN0cmF0aW9uIEFQSS4gVGhpcyBBUEkgd2lsbCBub3QgYXR0ZW1wdCB0byBzZW5kIGFuXG4gICAqIGVtYWlsIHRvIHRoZSBVc2VyLiBUaGlzIEFQSSBtYXkgYmUgdXNlZCB0byBjb2xsZWN0IHRoZSB2ZXJpZmljYXRpb25JZCBmb3IgdXNlIHdpdGggYSB0aGlyZCBwYXJ0eSBzeXN0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gYmUgdmVyaWZpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZVJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkKGVtYWlsOiBzdHJpbmcsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc2VuZFZlcmlmeVBhc3N3b3JkRW1haWwnLCBmYWxzZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0d28tZmFjdG9yIHJlY292ZXJ5IGNvZGVzIGZvciBhIHVzZXIuIEdlbmVyYXRpbmcgdHdvLWZhY3RvciByZWNvdmVyeSBjb2RlcyB3aWxsIGludmFsaWRhdGUgYW55IGV4aXN0aW5nIHJlY292ZXJ5IGNvZGVzLiBcbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGdlbmVyYXRlIG5ldyBUd28gRmFjdG9yIHJlY292ZXJ5IGNvZGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVUd29GYWN0b3JSZWNvdmVyeUNvZGVzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3IvcmVjb3ZlcnktY29kZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIFR3byBGYWN0b3Igc2VjcmV0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgVXNlci4gVGhlIHJlc3BvbnNlIHdpbGwgY29udGFpblxuICAgKiBib3RoIHRoZSBzZWNyZXQgYW5kIGEgQmFzZTMyIGVuY29kZWQgZm9ybSBvZiB0aGUgc2VjcmV0IHdoaWNoIGNhbiBiZSBzaG93biB0byBhIFVzZXIgd2hlbiB1c2luZyBhIDIgU3RlcCBBdXRoZW50aWNhdGlvblxuICAgKiBhcHBsaWNhdGlvbiBzdWNoIGFzIEdvb2dsZSBBdXRoZW50aWNhdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVUd29GYWN0b3JTZWNyZXQoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWNyZXRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlY3JldCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgVHdvIEZhY3RvciBzZWNyZXQgdGhhdCBjYW4gYmUgdXNlZCB0byBlbmFibGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSBVc2VyLiBUaGUgcmVzcG9uc2Ugd2lsbCBjb250YWluXG4gICAqIGJvdGggdGhlIHNlY3JldCBhbmQgYSBCYXNlMzIgZW5jb2RlZCBmb3JtIG9mIHRoZSBzZWNyZXQgd2hpY2ggY2FuIGJlIHNob3duIHRvIGEgVXNlciB3aGVuIHVzaW5nIGEgMiBTdGVwIEF1dGhlbnRpY2F0aW9uXG4gICAqIGFwcGxpY2F0aW9uIHN1Y2ggYXMgR29vZ2xlIEF1dGhlbnRpY2F0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VjcmV0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlVHdvRmFjdG9yU2VjcmV0VXNpbmdKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxTZWNyZXRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlY3JldCcpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGxvZ2luIHZpYSB0aGlyZC1wYXJ0aWVzIGluY2x1ZGluZyBTb2NpYWwgbG9naW4sIGV4dGVybmFsIE9BdXRoIGFuZCBPcGVuSUQgQ29ubmVjdCwgYW5kIG90aGVyXG4gICAqIGxvZ2luIHN5c3RlbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgdGhpcmQtcGFydHkgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGZyb20gdGhlIHRoaXJkLXBhcnR5IGxvZ2luXG4gICAqICAgIHByb3ZpZGVycyB0aGF0IEZ1c2lvbkF1dGggdXNlcyB0byByZWNvbmNpbGUgdGhlIHVzZXIncyBhY2NvdW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICBpZGVudGl0eVByb3ZpZGVyTG9naW4ocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgUlNBIG9yIEVDIGtleSBwYWlyIG9yIGFuIEhNQUMgc2VjcmV0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUga2V5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7S2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj59XG4gICAqL1xuICBpbXBvcnRLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5L2ltcG9ydCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVsayBpbXBvcnRzIHJlZnJlc2ggdG9rZW5zLiBUaGlzIHJlcXVlc3QgcGVyZm9ybXMgbWluaW1hbCB2YWxpZGF0aW9uIGFuZCBydW5zIGJhdGNoIGluc2VydHMgb2YgcmVmcmVzaCB0b2tlbnMgd2l0aCB0aGVcbiAgICogZXhwZWN0YXRpb24gdGhhdCBlYWNoIHRva2VuIHJlcHJlc2VudHMgYSB1c2VyIHRoYXQgYWxyZWFkeSBleGlzdHMgYW5kIGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIEZ1c2lvbkF1dGhcbiAgICogQXBwbGljYXRpb24uIFRoaXMgaXMgZG9uZSB0byBpbmNyZWFzZXMgdGhlIGluc2VydCBwZXJmb3JtYW5jZS5cbiAgICogXG4gICAqIFRoZXJlZm9yZSwgaWYgeW91IGVuY291bnRlciBhbiBlcnJvciBkdWUgdG8gYSBkYXRhYmFzZSBrZXkgdmlvbGF0aW9uLCB0aGUgcmVzcG9uc2Ugd2lsbCBsaWtlbHkgb2ZmZXIgYSBnZW5lcmljXG4gICAqIGV4cGxhbmF0aW9uLiBJZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yLCB5b3UgbWF5IG9wdGlvbmFsbHkgZW5hYmxlIGFkZGl0aW9uYWwgdmFsaWRhdGlvbiB0byByZWNlaXZlIGEgSlNPTiByZXNwb25zZVxuICAgKiBib2R5IHdpdGggc3BlY2lmaWMgdmFsaWRhdGlvbiBlcnJvcnMuIFRoaXMgd2lsbCBzbG93IHRoZSByZXF1ZXN0IGRvd24gYnV0IHdpbGwgYWxsb3cgeW91IHRvIGlkZW50aWZ5IHRoZSBjYXVzZSBvZlxuICAgKiB0aGUgZmFpbHVyZS4gU2VlIHRoZSB2YWxpZGF0ZURiQ29uc3RyYWludHMgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVmcmVzaFRva2VuSW1wb3J0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRoZSByZWZyZXNoIHRva2VucyB0byBpbXBvcnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGltcG9ydFJlZnJlc2hUb2tlbnMocmVxdWVzdDogUmVmcmVzaFRva2VuSW1wb3J0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWZyZXNoLXRva2VuL2ltcG9ydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1bGsgaW1wb3J0cyB1c2Vycy4gVGhpcyByZXF1ZXN0IHBlcmZvcm1zIG1pbmltYWwgdmFsaWRhdGlvbiBhbmQgcnVucyBiYXRjaCBpbnNlcnRzIG9mIHVzZXJzIHdpdGggdGhlIGV4cGVjdGF0aW9uXG4gICAqIHRoYXQgZWFjaCB1c2VyIGRvZXMgbm90IHlldCBleGlzdCBhbmQgZWFjaCByZWdpc3RyYXRpb24gY29ycmVzcG9uZHMgdG8gYW4gZXhpc3RpbmcgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbi4gVGhpcyBpcyBkb25lIHRvXG4gICAqIGluY3JlYXNlcyB0aGUgaW5zZXJ0IHBlcmZvcm1hbmNlLlxuICAgKiBcbiAgICogVGhlcmVmb3JlLCBpZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yIGR1ZSB0byBhIGRhdGFiYXNlIGtleSB2aW9sYXRpb24sIHRoZSByZXNwb25zZSB3aWxsIGxpa2VseSBvZmZlclxuICAgKiBhIGdlbmVyaWMgZXhwbGFuYXRpb24uIElmIHlvdSBlbmNvdW50ZXIgYW4gZXJyb3IsIHlvdSBtYXkgb3B0aW9uYWxseSBlbmFibGUgYWRkaXRpb25hbCB2YWxpZGF0aW9uIHRvIHJlY2VpdmUgYSBKU09OIHJlc3BvbnNlXG4gICAqIGJvZHkgd2l0aCBzcGVjaWZpYyB2YWxpZGF0aW9uIGVycm9ycy4gVGhpcyB3aWxsIHNsb3cgdGhlIHJlcXVlc3QgZG93biBidXQgd2lsbCBhbGxvdyB5b3UgdG8gaWRlbnRpZnkgdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJlLiBTZWVcbiAgICogdGhlIHZhbGlkYXRlRGJDb25zdHJhaW50cyByZXF1ZXN0IHBhcmFtZXRlci5cbiAgICpcbiAgICogQHBhcmFtIHtJbXBvcnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIHVzZXJzIHRvIGltcG9ydC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgaW1wb3J0VXNlcnMocmVxdWVzdDogSW1wb3J0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9pbXBvcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBXZWJBdXRobiBjcmVkZW50aWFsXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViQXV0aG5DcmVkZW50aWFsSW1wb3J0UmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3IgaW1wb3J0aW5nIHRoZSBjcmVkZW50aWFsXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGltcG9ydFdlYkF1dGhuQ3JlZGVudGlhbChyZXF1ZXN0OiBXZWJBdXRobkNyZWRlbnRpYWxJbXBvcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9pbXBvcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNwZWN0IGFuIGFjY2VzcyB0b2tlbiBpc3N1ZWQgYXMgdGhlIHJlc3VsdCBvZiB0aGUgVXNlciBiYXNlZCBncmFudCBzdWNoIGFzIHRoZSBBdXRob3JpemF0aW9uIENvZGUgR3JhbnQsIEltcGxpY2l0IEdyYW50LCB0aGUgVXNlciBDcmVkZW50aWFscyBHcmFudCBvciB0aGUgUmVmcmVzaCBHcmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBmb3Igd2hpY2ggdGhpcyB0b2tlbiB3YXMgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gVGhlIGFjY2VzcyB0b2tlbiByZXR1cm5lZCBieSB0aGlzIE9BdXRoIHByb3ZpZGVyIGFzIHRoZSByZXN1bHQgb2YgYSBzdWNjZXNzZnVsIGNsaWVudCBjcmVkZW50aWFscyBncmFudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50cm9zcGVjdFJlc3BvbnNlPj59XG4gICAqL1xuICBpbnRyb3NwZWN0QWNjZXNzVG9rZW4oY2xpZW50X2lkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCd0b2tlbicsIHRva2VuKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxJbnRyb3NwZWN0UmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvaW50cm9zcGVjdCcpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3BlY3QgYW4gYWNjZXNzIHRva2VuIGlzc3VlZCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBDbGllbnQgQ3JlZGVudGlhbHMgR3JhbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiBUaGUgYWNjZXNzIHRva2VuIHJldHVybmVkIGJ5IHRoaXMgT0F1dGggcHJvdmlkZXIgYXMgdGhlIHJlc3VsdCBvZiBhIHN1Y2Nlc3NmdWwgY2xpZW50IGNyZWRlbnRpYWxzIGdyYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRyb3NwZWN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGludHJvc3BlY3RDbGllbnRDcmVkZW50aWFsc0FjY2Vzc1Rva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCd0b2tlbicsIHRva2VuKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxJbnRyb3NwZWN0UmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvaW50cm9zcGVjdCcpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlIGEgbmV3IGFjY2VzcyB0b2tlbiAoSldUKSBmb3IgdGhlIHJlcXVlc3RlZCBBcHBsaWNhdGlvbiBhZnRlciBlbnN1cmluZyB0aGUgcHJvdmlkZWQgSldUIGlzIHZhbGlkLiBBIHZhbGlkXG4gICAqIGFjY2VzcyB0b2tlbiBpcyBwcm9wZXJseSBzaWduZWQgYW5kIG5vdCBleHBpcmVkLlxuICAgKiA8cD5cbiAgICogVGhpcyBBUEkgbWF5IGJlIHVzZWQgaW4gYW4gU1NPIGNvbmZpZ3VyYXRpb24gdG8gaXNzdWUgbmV3IHRva2VucyBmb3IgYW5vdGhlciBhcHBsaWNhdGlvbiBhZnRlciB0aGUgdXNlciBoYXNcbiAgICogb2J0YWluZWQgYSB2YWxpZCB0b2tlbiBmcm9tIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIEFwcGxpY2F0aW9uIElkIGZvciB3aGljaCB5b3UgYXJlIHJlcXVlc3RpbmcgYSBuZXcgYWNjZXNzIHRva2VuIGJlIGlzc3VlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaFRva2VuIChPcHRpb25hbCkgQW4gZXhpc3RpbmcgcmVmcmVzaCB0b2tlbiB1c2VkIHRvIHJlcXVlc3QgYSByZWZyZXNoIHRva2VuIGluIGFkZGl0aW9uIHRvIGEgSldUIGluIHRoZSByZXNwb25zZS5cbiAgICogICAgPHA+VGhlIHRhcmdldCBhcHBsaWNhdGlvbiByZXByZXNlbnRlZCBieSB0aGUgYXBwbGljYXRpb25JZCByZXF1ZXN0IHBhcmFtZXRlciBtdXN0IGhhdmUgcmVmcmVzaFxuICAgKiAgICB0b2tlbnMgZW5hYmxlZCBpbiBvcmRlciB0byByZWNlaXZlIGEgcmVmcmVzaCB0b2tlbiBpbiB0aGUgcmVzcG9uc2UuPC9wPlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJc3N1ZVJlc3BvbnNlPj59XG4gICAqL1xuICBpc3N1ZUpXVChhcHBsaWNhdGlvbklkOiBVVUlELCBlbmNvZGVkSldUOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJc3N1ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPElzc3VlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvaXNzdWUnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVmcmVzaFRva2VuJywgcmVmcmVzaFRva2VuKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGVzIGEgdXNlciB0byBGdXNpb25BdXRoLiBcbiAgICogXG4gICAqIFRoaXMgQVBJIG9wdGlvbmFsbHkgcmVxdWlyZXMgYW4gQVBJIGtleS4gU2VlIDxjb2RlPkFwcGxpY2F0aW9uLmxvZ2luQ29uZmlndXJhdGlvbi5yZXF1aXJlQXV0aGVudGljYXRpb248L2NvZGU+LlxuICAgKlxuICAgKiBAcGFyYW0ge0xvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNyZWRlbnRpYWxzIHVzZWQgdG8gbG9nIHRoZW0gaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvZ2luKHJlcXVlc3Q6IExvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIHBpbmcgdG8gRnVzaW9uQXV0aCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgd2FzIGF1dG9tYXRpY2FsbHkgbG9nZ2VkIGludG8gYW4gYXBwbGljYXRpb24uIFdoZW4gdXNpbmdcbiAgICogRnVzaW9uQXV0aCdzIFNTTyBvciB5b3VyIG93biwgeW91IHNob3VsZCBjYWxsIHRoaXMgaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQgaW4gY2VudHJhbGx5LCBidXQgYWNjZXNzZXMgYW5cbiAgICogYXBwbGljYXRpb24gd2hlcmUgdGhleSBubyBsb25nZXIgaGF2ZSBhIHNlc3Npb24uIFRoaXMgaGVscHMgY29ycmVjdGx5IHRyYWNrIGxvZ2luIGNvdW50cywgdGltZXMgYW5kIGhlbHBzIHdpdGhcbiAgICogcmVwb3J0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdGhhdCB3YXMgbG9nZ2VkIGluLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZXkgbG9nZ2VkIGludG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWxsZXJJUEFkZHJlc3MgKE9wdGlvbmFsKSBUaGUgSVAgYWRkcmVzcyBvZiB0aGUgZW5kLXVzZXIgdGhhdCBpcyBsb2dnaW5nIGluLiBJZiBhIG51bGwgdmFsdWUgaXMgcHJvdmlkZWRcbiAgICogICAgdGhlIElQIGFkZHJlc3Mgd2lsbCBiZSB0aGF0IG9mIHRoZSBjbGllbnQgb3IgbGFzdCBwcm94eSB0aGF0IHNlbnQgdGhlIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvZ2luUGluZyh1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQsIGNhbGxlcklQQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dpbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaXBBZGRyZXNzJywgY2FsbGVySVBBZGRyZXNzKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIHBpbmcgdG8gRnVzaW9uQXV0aCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgd2FzIGF1dG9tYXRpY2FsbHkgbG9nZ2VkIGludG8gYW4gYXBwbGljYXRpb24uIFdoZW4gdXNpbmdcbiAgICogRnVzaW9uQXV0aCdzIFNTTyBvciB5b3VyIG93biwgeW91IHNob3VsZCBjYWxsIHRoaXMgaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQgaW4gY2VudHJhbGx5LCBidXQgYWNjZXNzZXMgYW5cbiAgICogYXBwbGljYXRpb24gd2hlcmUgdGhleSBubyBsb25nZXIgaGF2ZSBhIHNlc3Npb24uIFRoaXMgaGVscHMgY29ycmVjdGx5IHRyYWNrIGxvZ2luIGNvdW50cywgdGltZXMgYW5kIGhlbHBzIHdpdGhcbiAgICogcmVwb3J0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0xvZ2luUGluZ1JlcXVlc3R9IHJlcXVlc3QgVGhlIGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlciBjcmVkZW50aWFscyB1c2VkIHRvIGxvZyB0aGVtIGluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICBsb2dpblBpbmdXaXRoUmVxdWVzdChyZXF1ZXN0OiBMb2dpblBpbmdSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExvZ291dCBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZW1vdmUgdGhlIHJlZnJlc2ggdG9rZW4gYW5kIGFjY2VzcyB0b2tlbiBjb29raWVzIGlmIHRoZXkgZXhpc3Qgb24gdGhlXG4gICAqIGNsaWVudCBhbmQgcmV2b2tlIHRoZSByZWZyZXNoIHRva2VuIHN0b3JlZC4gVGhpcyBBUEkgZG9lcyBub3RoaW5nIGlmIHRoZSByZXF1ZXN0IGRvZXMgbm90IGNvbnRhaW4gYW4gYWNjZXNzXG4gICAqIHRva2VuIG9yIHJlZnJlc2ggdG9rZW4gY29va2llcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBnbG9iYWwgV2hlbiB0aGlzIHZhbHVlIGlzIHNldCB0byB0cnVlIGFsbCB0aGUgcmVmcmVzaCB0b2tlbnMgaXNzdWVkIHRvIHRoZSBvd25lciBvZiB0aGVcbiAgICogICAgcHJvdmlkZWQgdG9rZW4gd2lsbCBiZSByZXZva2VkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaFRva2VuIChPcHRpb25hbCkgVGhlIHJlZnJlc2hfdG9rZW4gYXMgYSByZXF1ZXN0IHBhcmFtZXRlciBpbnN0ZWFkIG9mIGNvbWluZyBpbiB2aWEgYSBjb29raWUuXG4gICAqICAgIElmIHByb3ZpZGVkIHRoaXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBjb29raWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGxvZ291dChnbG9iYWw6IGJvb2xlYW4sIHJlZnJlc2hUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9nb3V0JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2dsb2JhbCcsIGdsb2JhbClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlZnJlc2hUb2tlbicsIHJlZnJlc2hUb2tlbilcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBMb2dvdXQgQVBJIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVtb3ZlIHRoZSByZWZyZXNoIHRva2VuIGFuZCBhY2Nlc3MgdG9rZW4gY29va2llcyBpZiB0aGV5IGV4aXN0IG9uIHRoZVxuICAgKiBjbGllbnQgYW5kIHJldm9rZSB0aGUgcmVmcmVzaCB0b2tlbiBzdG9yZWQuIFRoaXMgQVBJIHRha2VzIHRoZSByZWZyZXNoIHRva2VuIGluIHRoZSBKU09OIGJvZHkuXG4gICAqXG4gICAqIEBwYXJhbSB7TG9nb3V0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gbG9nb3V0IHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBsb2dvdXRXaXRoUmVxdWVzdChyZXF1ZXN0OiBMb2dvdXRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9nb3V0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBpZGVudGl0eSBwcm92aWRlciBmb3IgdGhlIGdpdmVuIGRvbWFpbi4gQSAyMDAgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIGRvbWFpbiBpcyBtYW5hZ2VkXG4gICAqIGJ5IGEgcmVnaXN0ZXJlZCBpZGVudGl0eSBwcm92aWRlci4gQSA0MDQgaW5kaWNhdGVzIHRoZSBkb21haW4gaXMgbm90IG1hbmFnZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBvciBlbWFpbCBhZGRyZXNzIHRvIGxvb2t1cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9va3VwUmVzcG9uc2U+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+fVxuICAgKi9cbiAgcmV0cmlldmVUb3RhbFJlcG9ydCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRvdGFsc1JlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRvdGFsc1JlcG9ydFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC90b3RhbHMnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0d28tZmFjdG9yIHJlY292ZXJ5IGNvZGVzIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byByZXRyaWV2ZSBUd28gRmFjdG9yIHJlY292ZXJ5IGNvZGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUd29GYWN0b3JSZWNvdmVyeUNvZGVzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3IvcmVjb3ZlcnktY29kZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgdXNlcidzIHR3by1mYWN0b3Igc3RhdHVzLlxuICAgKiBcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBzZWUgaWYgYSB1c2VyIHdpbGwgbmVlZCB0byBjb21wbGV0ZSBhIHR3by1mYWN0b3IgY2hhbGxlbmdlIHRvIGNvbXBsZXRlIGEgbG9naW4sXG4gICAqIGFuZCBvcHRpb25hbGx5IGlkZW50aWZ5IHRoZSBzdGF0ZSBvZiB0aGUgdHdvLWZhY3RvciB0cnVzdCBhY3Jvc3MgdmFyaW91cyBhcHBsaWNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1c2VyIElkIHRvIHJldHJpZXZlIHRoZSBUd28tRmFjdG9yIHN0YXR1cy5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBvcHRpb25hbCBhcHBsaWNhdGlvbklkIHRvIHZlcmlmeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHR3b0ZhY3RvclRydXN0SWQgVGhlIG9wdGlvbmFsIHR3by1mYWN0b3IgdHJ1c3QgSWQgdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JTdGF0dXNSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUd29GYWN0b3JTdGF0dXModXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlELCB0d29GYWN0b3JUcnVzdElkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zdGF0dXMnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0d29GYWN0b3JUcnVzdElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGFjdGlvbiBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgcGFzcyBpbiBudWxsIGZvciB0aGUgSWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIHRoZSB1c2VyXG4gICAqIGFjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IHBhc3MgaW4gbnVsbCBmb3IgdGhlIElkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCB0aGUgdXNlclxuICAgKiBhY3Rpb24gcmVhc29ucy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQWN0aW9uUmVhc29ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdXNlciBhY3Rpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckFjdGlvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGJ5IGEgY2hhbmdlIHBhc3N3b3JkIElkLiBUaGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgQVBJIGlzIHRvIHJldHJpZXZlIGEgdXNlciBhZnRlciB0aGUgZm9yZ290XG4gICAqIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZCBhbmQgeW91IG1heSBub3Qga25vdyB0aGUgdXNlcidzIGVtYWlsIG9yIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgdW5pcXVlIGNoYW5nZSBwYXNzd29yZCBJZCB0aGF0IHdhcyBzZW50IHZpYSBlbWFpbCBvciByZXR1cm5lZCBieSB0aGUgRm9yZ290IFBhc3N3b3JkIEFQSS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUNoYW5nZVBhc3N3b3JkSWQoY2hhbmdlUGFzc3dvcmRJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdjaGFuZ2VQYXNzd29yZElkJywgY2hhbmdlUGFzc3dvcmRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gZW1haWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlFbWFpbChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBsb2dpbklkLiBUaGUgbG9naW5JZCBjYW4gYmUgZWl0aGVyIHRoZSB1c2VybmFtZSBvciB0aGUgZW1haWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBlbWFpbCBvciB1c2VybmFtZSBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUxvZ2luSWQobG9naW5JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgbG9naW5JZCwgdXNpbmcgc3BlY2lmaWMgbG9naW5JZFR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9naW5JZCBUaGUgZW1haWwgb3IgdXNlcm5hbWUgb2YgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nPn0gbG9naW5JZFR5cGVzIFRoZSBpZGVudGl0eSB0eXBlcyB0aGF0IEZ1c2lvbkF1dGggd2lsbCBjb21wYXJlIHRoZSBsb2dpbklkIHRvLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckJ5TG9naW5JZFdpdGhMb2dpbklkVHlwZXMobG9naW5JZDogc3RyaW5nLCBsb2dpbklkVHlwZXM6IEFycmF5PFN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xvZ2luSWQnLCBsb2dpbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbG9naW5JZFR5cGVzJywgbG9naW5JZFR5cGVzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiB1c2VybmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJuYW1lIFRoZSB1c2VybmFtZSBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeVVzZXJuYW1lKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJuYW1lJywgdXNlcm5hbWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBieSBhIHZlcmlmaWNhdGlvbklkLiBUaGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgQVBJIGlzIHRvIHJldHJpZXZlIGEgdXNlciBhZnRlciB0aGUgZm9yZ290XG4gICAqIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZCBhbmQgeW91IG1heSBub3Qga25vdyB0aGUgdXNlcidzIGVtYWlsIG9yIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyaWZpY2F0aW9uSWQgVGhlIHVuaXF1ZSB2ZXJpZmljYXRpb24gSWQgdGhhdCBoYXMgYmVlbiBzZXQgb24gdGhlIHVzZXIgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckJ5VmVyaWZpY2F0aW9uSWQodmVyaWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndmVyaWZpY2F0aW9uSWQnLCB2ZXJpZmljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSB1c2VyX2NvZGUgdGhhdCBpcyBwYXJ0IG9mIGFuIGluLXByb2dyZXNzIERldmljZSBBdXRob3JpemF0aW9uIEdyYW50LlxuICAgKiBcbiAgICogVGhpcyBBUEkgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHlvdXIgb3duIGxvZ2luIHdvcmtmbG93IHRvIGNvbXBsZXRlIGEgZGV2aWNlIGdyYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIFRoZSBjbGllbnQgSWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IFRoZSBjbGllbnQgSWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJDb2RlKGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHVzZXJfY29kZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgdXNlcl9jb2RlKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL2RldmljZS91c2VyLWNvZGUnKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgdXNlcl9jb2RlIHRoYXQgaXMgcGFydCBvZiBhbiBpbi1wcm9ncmVzcyBEZXZpY2UgQXV0aG9yaXphdGlvbiBHcmFudC5cbiAgICogXG4gICAqIFRoaXMgQVBJIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBidWlsZCB5b3VyIG93biBsb2dpbiB3b3JrZmxvdyB0byBjb21wbGV0ZSBhIGRldmljZSBncmFudC5cbiAgICogXG4gICAqIFRoaXMgcmVxdWVzdCB3aWxsIHJlcXVpcmUgYW4gQVBJIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJfY29kZSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckNvZGVVc2luZ0FQSUtleSh1c2VyX2NvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvZGV2aWNlL3VzZXItY29kZScpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY29tbWVudHMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb21tZW50UmVzcG9uc2U+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+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9kZXZpY2UvdmFsaWRhdGUnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcl9jb2RlJywgdXNlcl9jb2RlKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignY2xpZW50X2lkJywgY2xpZW50X2lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIEpXVCAoZW5jb2RlZCBKV1Qgc3RyaW5nKSB0byBlbnN1cmUgdGhlIHRva2VuIGlzIHZhbGlkLiBBIHZhbGlkIGFjY2VzcyB0b2tlbiBpcyBwcm9wZXJseVxuICAgKiBzaWduZWQgYW5kIG5vdCBleHBpcmVkLlxuICAgKiA8cD5cbiAgICogVGhpcyBBUEkgbWF5IGJlIHVzZWQgdG8gdmVyaWZ5IHRoZSBKV1QgYXMgd2VsbCBhcyBkZWNvZGUgdGhlIGVuY29kZWQgSldUIGludG8gaHVtYW4gcmVhZGFibGUgaWRlbnRpdHkgY2xhaW1zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZhbGlkYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHZhbGlkYXRlSldUKGVuY29kZWRKV1Q6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmFsaWRhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxWYWxpZGF0ZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC92YWxpZGF0ZScpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCdzIGEgSldUIHZlbmRpbmcgbWFjaGluZSFcbiAgICogXG4gICAqIElzc3VlIGEgbmV3IGFjY2VzcyB0b2tlbiAoSldUKSB3aXRoIHRoZSBwcm92aWRlZCBjbGFpbXMgaW4gdGhlIHJlcXVlc3QuIFRoaXMgSldUIGlzIG5vdCBzY29wZWQgdG8gYSB0ZW5hbnQgb3IgdXNlciwgaXQgaXMgYSBmcmVlIGZvcm0gXG4gICAqIHRva2VuIHRoYXQgd2lsbCBjb250YWluIHdoYXQgY2xhaW1zIHlvdSBwcm92aWRlLlxuICAgKiA8cD5cbiAgICogVGhlIGlhdCwgZXhwIGFuZCBqdGkgY2xhaW1zIHdpbGwgYmUgYWRkZWQgYnkgRnVzaW9uQXV0aCwgYWxsIG90aGVyIGNsYWltcyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuXG4gICAqIFxuICAgKiBJZiBhIFRUTCBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QsIHRoZSBUVEwgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgZGVmYXVsdCBUZW5hbnQgb3IgdGhlIFRlbmFudCBzcGVjaWZpZWQgb24gdGhlIHJlcXVlc3QgZWl0aGVyIFxuICAgKiBieSB3YXkgb2YgdGhlIFgtRnVzaW9uQXV0aC1UZW5hbnRJZCByZXF1ZXN0IGhlYWRlciwgb3IgYSB0ZW5hbnQgc2NvcGVkIEFQSSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7SldUVmVuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGNsYWltcyBmb3IgdGhpcyBKV1QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXVFZlbmRSZXNwb25zZT4+fVxuICAgKi9cbiAgdmVuZEpXVChyZXF1ZXN0OiBKV1RWZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SldUVmVuZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEpXVFZlbmRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC92ZW5kJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybXMgYSBlbWFpbCB2ZXJpZmljYXRpb24uIFRoZSBJZCBnaXZlbiBpcyB1c3VhbGx5IGZyb20gYW4gZW1haWwgc2VudCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcmlmaWNhdGlvbklkIFRoZSBlbWFpbCB2ZXJpZmljYXRpb24gSWQgc2VudCB0byB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHZlcmlmeUVtYWlsQWRkcmVzcyBhbmQgY2hhbmdlZCB0byB0YWtlIGEgSlNPTiByZXF1ZXN0IGJvZHksIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgdmVyaWZ5RW1haWwodmVyaWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodmVyaWZpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtcyBhIHVzZXIncyBlbWFpbCBhZGRyZXNzLiBcbiAgICogXG4gICAqIFRoZSByZXF1ZXN0IGJvZHkgd2lsbCBjb250YWluIHRoZSB2ZXJpZmljYXRpb25JZC4gWW91IG1heSBhbHNvIGJlIHJlcXVpcmVkIHRvIHNlbmQgYSBvbmUtdGltZSB1c2UgY29kZSBiYXNlZCB1cG9uIHlvdXIgY29uZmlndXJhdGlvbi4gV2hlbiBcbiAgICogdGhlIHRlbmFudCBpcyBjb25maWd1cmVkIHRvIGdhdGUgYSB1c2VyIHVudGlsIHRoZWlyIGVtYWlsIGFkZHJlc3MgaXMgdmVyaWZpZWQsIHRoaXMgcHJvY2VkdXJlcyByZXF1aXJlcyB0d28gdmFsdWVzIGluc3RlYWQgb2Ygb25lLiBcbiAgICogVGhlIHZlcmlmaWNhdGlvbklkIGlzIGEgaGlnaCBlbnRyb3B5IHZhbHVlIGFuZCB0aGUgb25lLXRpbWUgdXNlIGNvZGUgaXMgYSBsb3cgZW50cm9weSB2YWx1ZSB0aGF0IGlzIGVhc2lseSBlbnRlcmVkIGluIGEgdXNlciBpbnRlcmFjdGl2ZSBmb3JtLiBUaGUgXG4gICAqIHR3byB2YWx1ZXMgdG9nZXRoZXIgYXJlIGFibGUgdG8gY29uZmlybSBhIHVzZXIncyBlbWFpbCBhZGRyZXNzIGFuZCBtYXJrIHRoZSB1c2VyJ3MgZW1haWwgYWRkcmVzcyBhcyB2ZXJpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlFbWFpbFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdmVyaWZpY2F0aW9uSWQgYW5kIG9wdGlvbmFsIG9uZS10aW1lIHVzZSBjb2RlIHBhaXJlZCB3aXRoIHRoZSB2ZXJpZmljYXRpb25JZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdmVyaWZ5RW1haWxBZGRyZXNzKHJlcXVlc3Q6IFZlcmlmeUVtYWlsUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZG1pbmlzdHJhdGl2ZWx5IHZlcmlmeSBhIHVzZXIncyBlbWFpbCBhZGRyZXNzLiBVc2UgdGhpcyBtZXRob2QgdG8gYnlwYXNzIGVtYWlsIHZlcmlmaWNhdGlvbiBmb3IgdGhlIHVzZXIuXG4gICAqIFxuICAgKiBUaGUgcmVxdWVzdCBib2R5IHdpbGwgY29udGFpbiB0aGUgdXNlcklkIHRvIGJlIHZlcmlmaWVkLiBBbiBBUEkga2V5IGlzIHJlcXVpcmVkIHdoZW4gc2VuZGluZyB0aGUgdXNlcklkIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5RW1haWxSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXJJZCB0byB2ZXJpZnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHZlcmlmeUVtYWlsQWRkcmVzc0J5VXNlcklkKHJlcXVlc3Q6IFZlcmlmeUVtYWlsUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZG1pbmlzdHJhdGl2ZWx5IHZlcmlmeSBhIHVzZXIgaWRlbnRpdHkuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5UmVxdWVzdH0gcmVxdWVzdCBUaGUgaWRlbnRpdHkgdmVyaWZ5IHJlcXVlc3QgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiB0byB2ZXJpZnkgdGhlIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB2ZXJpZnlJZGVudGl0eShyZXF1ZXN0OiBWZXJpZnlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS92ZXJpZnknKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtcyBhbiBhcHBsaWNhdGlvbiByZWdpc3RyYXRpb24uIFRoZSBJZCBnaXZlbiBpcyB1c3VhbGx5IGZyb20gYW4gZW1haWwgc2VudCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcmlmaWNhdGlvbklkIFRoZSByZWdpc3RyYXRpb24gdmVyaWZpY2F0aW9uIElkIHNlbnQgdG8gdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byB2ZXJpZnlVc2VyUmVnaXN0cmF0aW9uIGFuZCBjaGFuZ2VkIHRvIHRha2UgYSBKU09OIHJlcXVlc3QgYm9keSwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICB2ZXJpZnlSZWdpc3RyYXRpb24odmVyaWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHZlcmlmaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybXMgYSB1c2VyJ3MgcmVnaXN0cmF0aW9uLiBcbiAgICogXG4gICAqIFRoZSByZXF1ZXN0IGJvZHkgd2lsbCBjb250YWluIHRoZSB2ZXJpZmljYXRpb25JZC4gWW91IG1heSBhbHNvIGJlIHJlcXVpcmVkIHRvIHNlbmQgYSBvbmUtdGltZSB1c2UgY29kZSBiYXNlZCB1cG9uIHlvdXIgY29uZmlndXJhdGlvbi4gV2hlbiBcbiAgICogdGhlIGFwcGxpY2F0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gZ2F0ZSBhIHVzZXIgdW50aWwgdGhlaXIgcmVnaXN0cmF0aW9uIGlzIHZlcmlmaWVkLCB0aGlzIHByb2NlZHVyZXMgcmVxdWlyZXMgdHdvIHZhbHVlcyBpbnN0ZWFkIG9mIG9uZS4gXG4gICAqIFRoZSB2ZXJpZmljYXRpb25JZCBpcyBhIGhpZ2ggZW50cm9weSB2YWx1ZSBhbmQgdGhlIG9uZS10aW1lIHVzZSBjb2RlIGlzIGEgbG93IGVudHJvcHkgdmFsdWUgdGhhdCBpcyBlYXNpbHkgZW50ZXJlZCBpbiBhIHVzZXIgaW50ZXJhY3RpdmUgZm9ybS4gVGhlIFxuICAgKiB0d28gdmFsdWVzIHRvZ2V0aGVyIGFyZSBhYmxlIHRvIGNvbmZpcm0gYSB1c2VyJ3MgcmVnaXN0cmF0aW9uIGFuZCBtYXJrIHRoZSB1c2VyJ3MgcmVnaXN0cmF0aW9uIGFzIHZlcmlmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeVJlZ2lzdHJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdmVyaWZpY2F0aW9uSWQgYW5kIG9wdGlvbmFsIG9uZS10aW1lIHVzZSBjb2RlIHBhaXJlZCB3aXRoIHRoZSB2ZXJpZmljYXRpb25JZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdmVyaWZ5VXNlclJlZ2lzdHJhdGlvbihyZXF1ZXN0OiBWZXJpZnlSZWdpc3RyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG5cbiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgKiBQcml2YXRlIG1ldGhvZHNcbiAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiAgLyoqXG4gICAqIGNyZWF0ZXMgYSByZXN0IGNsaWVudFxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgUkVTVENsaWVudCB0aGF0IHdpbGwgYmUgdXNlZCB0byBjYWxsLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydDxSVCwgRVJUPigpOiBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8UlQsIEVSVD4oKVxuICAgICAgICAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKHRoaXMuYXBpS2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRBbm9ueW1vdXM8UlQsIEVSVD4oKTogSVJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIGxldCBjbGllbnQgPSB0aGlzLmNsaWVudEJ1aWxkZXIuYnVpbGQ8UlQsIEVSVD4odGhpcy5ob3N0KTtcblxuICAgIGlmICh0aGlzLnRlbmFudElkICE9IG51bGwpIHtcbiAgICAgIGNsaWVudC53aXRoSGVhZGVyKCdYLUZ1c2lvbkF1dGgtVGVuYW50SWQnLCB0aGlzLnRlbmFudElkKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jcmVkZW50aWFscyAhPSBudWxsKSB7XG4gICAgICBjbGllbnQud2l0aENyZWRlbnRpYWxzKHRoaXMuY3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRnVzaW9uQXV0aENsaWVudDtcblxuLyoqXG4gKiBBIDEyOCBiaXQgVVVJRCBpbiBzdHJpbmcgZm9ybWF0IFwiOC00LTQtNC0xMlwiLCBmb3IgZXhhbXBsZSBcIjU4RDVFMjEyLTE2NUItNENBMC05MDlCLUM4NkI5Q0VFMDExMVwiLlxuICovXG5leHBvcnQgdHlwZSBVVUlEID0gc3RyaW5nO1xuXG5cbi8qKlxuICogZG9tYWluIFBPSk8gdG8gcmVwcmVzZW50IEF1dGhlbnRpY2F0aW9uS2V5XG4gKlxuICogQGF1dGhvciBzYW5qYXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBUElLZXkge1xuICBleHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0SWQ/OiBVVUlEO1xuICBrZXk/OiBzdHJpbmc7XG4gIGtleU1hbmFnZXI/OiBib29sZWFuO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbWV0YURhdGE/OiBBUElLZXlNZXRhRGF0YTtcbiAgbmFtZT86IHN0cmluZztcbiAgcGVybWlzc2lvbnM/OiBBUElLZXlQZXJtaXNzaW9ucztcbiAgcmV0cmlldmFibGU/OiBib29sZWFuO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5TWV0YURhdGEge1xuICBhdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBUElLZXlQZXJtaXNzaW9ucyB7XG4gIGVuZHBvaW50cz86IFJlY29yZDxzdHJpbmcsIEFycmF5PHN0cmluZz4+O1xufVxuXG4vKipcbiAqIEF1dGhlbnRpY2F0aW9uIGtleSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFNhbmpheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleVJlcXVlc3Qge1xuICBhcGlLZXk/OiBBUElLZXk7XG4gIHNvdXJjZUtleUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBdXRoZW50aWNhdGlvbiBrZXkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgU2FuamF5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5UmVzcG9uc2Uge1xuICBhcGlLZXk/OiBBUElLZXk7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjY2Vzc1Rva2VuIHtcbiAgYWNjZXNzX3Rva2VuPzogc3RyaW5nO1xuICBleHBpcmVzX2luPzogbnVtYmVyO1xuICBpZF90b2tlbj86IHN0cmluZztcbiAgcmVmcmVzaF90b2tlbj86IHN0cmluZztcbiAgcmVmcmVzaF90b2tlbl9pZD86IFVVSUQ7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB0b2tlbl90eXBlPzogVG9rZW5UeXBlO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFRoZSB1c2VyIGFjdGlvbiByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFjdGlvbj86IEFjdGlvbkRhdGE7XG4gIGJyb2FkY2FzdD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGF0YSB7XG4gIGFjdGlvbmVlVXNlcklkPzogVVVJRDtcbiAgYWN0aW9uZXJVc2VySWQ/OiBVVUlEO1xuICBhcHBsaWNhdGlvbklkcz86IEFycmF5PFVVSUQ+O1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBlbWFpbFVzZXI/OiBib29sZWFuO1xuICBleHBpcnk/OiBudW1iZXI7XG4gIG5vdGlmeVVzZXI/OiBib29sZWFuO1xuICBvcHRpb24/OiBzdHJpbmc7XG4gIHJlYXNvbklkPzogVVVJRDtcbiAgdXNlckFjdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBUaGUgdXNlciBhY3Rpb24gcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblJlc3BvbnNlIHtcbiAgYWN0aW9uPzogVXNlckFjdGlvbkxvZztcbiAgYWN0aW9ucz86IEFycmF5PFVzZXJBY3Rpb25Mb2c+O1xufVxuXG4vKipcbiAqIEF2YWlsYWJsZSBKU09OIFdlYiBBbGdvcml0aG1zIChKV0EpIGFzIGRlc2NyaWJlZCBpbiBSRkMgNzUxOCBhdmFpbGFibGUgZm9yIHRoaXMgSldUIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQWxnb3JpdGhtIHtcbiAgRVMyNTYgPSBcIkVTMjU2XCIsXG4gIEVTMzg0ID0gXCJFUzM4NFwiLFxuICBFUzUxMiA9IFwiRVM1MTJcIixcbiAgSFMyNTYgPSBcIkhTMjU2XCIsXG4gIEhTMzg0ID0gXCJIUzM4NFwiLFxuICBIUzUxMiA9IFwiSFM1MTJcIixcbiAgUFMyNTYgPSBcIlBTMjU2XCIsXG4gIFBTMzg0ID0gXCJQUzM4NFwiLFxuICBQUzUxMiA9IFwiUFM1MTJcIixcbiAgUlMyNTYgPSBcIlJTMjU2XCIsXG4gIFJTMzg0ID0gXCJSUzM4NFwiLFxuICBSUzUxMiA9IFwiUlM1MTJcIixcbiAgbm9uZSA9IFwibm9uZVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxlQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidW5kbGVJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgc2VydmljZXNJZD86IHN0cmluZztcbiAgdGVhbUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsZUlkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxBcHBsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidW5kbGVJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgc2VydmljZXNJZD86IHN0cmluZztcbiAgdGVhbUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbiB7XG4gIGFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25BY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbjtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgYXV0aGVudGljYXRpb25Ub2tlbkNvbmZpZ3VyYXRpb24/OiBBdXRoZW50aWNhdGlvblRva2VuQ29uZmlndXJhdGlvbjtcbiAgY2xlYW5TcGVha0NvbmZpZ3VyYXRpb24/OiBDbGVhblNwZWFrQ29uZmlndXJhdGlvbjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVtYWlsQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uRW1haWxDb25maWd1cmF0aW9uO1xuICBleHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25FeHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uO1xuICBmb3JtQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uRm9ybUNvbmZpZ3VyYXRpb247XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgand0Q29uZmlndXJhdGlvbj86IEpXVENvbmZpZ3VyYXRpb247XG4gIGxhbWJkYUNvbmZpZ3VyYXRpb24/OiBMYW1iZGFDb25maWd1cmF0aW9uO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9naW5Db25maWd1cmF0aW9uPzogTG9naW5Db25maWd1cmF0aW9uO1xuICBtdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbk11bHRpRmFjdG9yQ29uZmlndXJhdGlvbjtcbiAgbmFtZT86IHN0cmluZztcbiAgb2F1dGhDb25maWd1cmF0aW9uPzogT0F1dGgyQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbj86IFBhc3N3b3JkbGVzc0NvbmZpZ3VyYXRpb247XG4gIHBob25lQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uUGhvbmVDb25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25Db25maWd1cmF0aW9uPzogUmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uRGVsZXRlUG9saWN5PzogQXBwbGljYXRpb25SZWdpc3RyYXRpb25EZWxldGVQb2xpY3k7XG4gIHJvbGVzPzogQXJyYXk8QXBwbGljYXRpb25Sb2xlPjtcbiAgc2FtbHYyQ29uZmlndXJhdGlvbj86IFNBTUx2MkNvbmZpZ3VyYXRpb247XG4gIHNjb3Blcz86IEFycmF5PEFwcGxpY2F0aW9uT0F1dGhTY29wZT47XG4gIHN0YXRlPzogT2JqZWN0U3RhdGU7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdGhlbWVJZD86IFVVSUQ7XG4gIHVuaXZlcnNhbENvbmZpZ3VyYXRpb24/OiBVbml2ZXJzYWxBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb247XG4gIHVudmVyaWZpZWQ/OiBSZWdpc3RyYXRpb25VbnZlcmlmaWVkT3B0aW9ucztcbiAgdmVyaWZpY2F0aW9uRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdmVyaWZpY2F0aW9uU3RyYXRlZ3k/OiBWZXJpZmljYXRpb25TdHJhdGVneTtcbiAgdmVyaWZ5UmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbiAgd2ViQXV0aG5Db25maWd1cmF0aW9uPzogQXBwbGljYXRpb25XZWJBdXRobkNvbmZpZ3VyYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25FbWFpbENvbmZpZ3VyYXRpb24ge1xuICBlbWFpbFVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGVtYWlsVmVyaWZpY2F0aW9uRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZW1haWxWZXJpZmllZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGZvcmdvdFBhc3N3b3JkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5JZEluVXNlT25DcmVhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbklkSW5Vc2VPblVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luTmV3RGV2aWNlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5TdXNwaWNpb3VzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRsZXNzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRSZXNldFN1Y2Nlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHNldFBhc3N3b3JkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kQWRkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kUmVtb3ZlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoZW50aWNhdGlvblRva2VuQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuICBhY2Nlc3NUb2tlblBvcHVsYXRlSWQ/OiBVVUlEO1xuICBpZFRva2VuUG9wdWxhdGVJZD86IFVVSUQ7XG4gIHNhbWx2MlBvcHVsYXRlSWQ/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/OiBJZGVudGl0eVByb3ZpZGVyTGlua2luZ1N0cmF0ZWd5O1xuICBuYW1lPzogc3RyaW5nO1xuICB0ZW5hbnRDb25maWd1cmF0aW9uPzogUmVjb3JkPFVVSUQsIElkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uPjtcbiAgdHlwZT86IElkZW50aXR5UHJvdmlkZXJUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuICByZWNvbmNpbGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGNyZWF0ZVJlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBpcEFkZHJlc3M/OiBzdHJpbmc7XG4gIG1ldGFEYXRhPzogTWV0YURhdGE7XG4gIG5ld0RldmljZT86IGJvb2xlYW47XG4gIG5vSldUPzogYm9vbGVhbjtcbn1cblxuLy8gRG8gbm90IHJlcXVpcmUgYSBzZXR0ZXIgZm9yICd0eXBlJywgaXQgaXMgZGVmaW5lZCBieSB0aGUgY29uY3JldGUgY2xhc3MgYW5kIGlzIG5vdCBtdXRhYmxlXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgdHJhbnNwb3J0Pzogc3RyaW5nO1xuICB0eXBlPzogTWVzc2VuZ2VyVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVNBTUx2MklkZW50aXR5UHJvdmlkZXI8RCBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEQ+IHtcbiAgYXNzZXJ0aW9uRGVjcnlwdGlvbkNvbmZpZ3VyYXRpb24/OiBTQU1MdjJBc3NlcnRpb25EZWNyeXB0aW9uQ29uZmlndXJhdGlvbjtcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICB1bmlxdWVJZENsYWltPzogc3RyaW5nO1xuICB1c2VOYW1lSWRGb3JFbWFpbD86IGJvb2xlYW47XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbnVtYmVyT2ZSZXN1bHRzPzogbnVtYmVyO1xuICBvcmRlckJ5Pzogc3RyaW5nO1xuICBzdGFydFJvdz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwge0BsaW5rIFVzZXJ9LXJlbGF0ZWQgZXZlbnRzLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVVzZXJFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5SW5mbyB7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQnJlYWNoZWRQYXNzd29yZFN0YXR1cyB7XG4gIE5vbmUgPSBcIk5vbmVcIixcbiAgRXhhY3RNYXRjaCA9IFwiRXhhY3RNYXRjaFwiLFxuICBTdWJBZGRyZXNzTWF0Y2ggPSBcIlN1YkFkZHJlc3NNYXRjaFwiLFxuICBQYXNzd29yZE9ubHkgPSBcIlBhc3N3b3JkT25seVwiLFxuICBDb21tb25QYXNzd29yZCA9IFwiQ29tbW9uUGFzc3dvcmRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmVhY2hlZFBhc3N3b3JkVGVuYW50TWV0cmljIHtcbiAgYWN0aW9uUmVxdWlyZWQ/OiBudW1iZXI7XG4gIG1hdGNoZWRDb21tb25QYXNzd29yZENvdW50PzogbnVtYmVyO1xuICBtYXRjaGVkRXhhY3RDb3VudD86IG51bWJlcjtcbiAgbWF0Y2hlZFBhc3N3b3JkQ291bnQ/OiBudW1iZXI7XG4gIG1hdGNoZWRTdWJBZGRyZXNzQ291bnQ/OiBudW1iZXI7XG4gIHBhc3N3b3Jkc0NoZWNrZWRDb3VudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENPUlNDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFsbG93Q3JlZGVudGlhbHM/OiBib29sZWFuO1xuICBhbGxvd2VkSGVhZGVycz86IEFycmF5PHN0cmluZz47XG4gIGFsbG93ZWRNZXRob2RzPzogQXJyYXk8SFRUUE1ldGhvZD47XG4gIGFsbG93ZWRPcmlnaW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgZGVidWc/OiBib29sZWFuO1xuICBleHBvc2VkSGVhZGVycz86IEFycmF5PHN0cmluZz47XG4gIHByZWZsaWdodE1heEFnZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBYTUwgY2Fub25pY2FsaXphdGlvbiBtZXRob2QgZW51bWVyYXRpb24uIFRoaXMgaXMgdXNlZCBmb3IgdGhlIElkUCBhbmQgU1Agc2lkZSBvZiBGdXNpb25BdXRoIFNBTUwuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIENhbm9uaWNhbGl6YXRpb25NZXRob2Qge1xuICBleGNsdXNpdmUgPSBcImV4Y2x1c2l2ZVwiLFxuICBleGNsdXNpdmVfd2l0aF9jb21tZW50cyA9IFwiZXhjbHVzaXZlX3dpdGhfY29tbWVudHNcIixcbiAgaW5jbHVzaXZlID0gXCJpbmNsdXNpdmVcIixcbiAgaW5jbHVzaXZlX3dpdGhfY29tbWVudHMgPSBcImluY2x1c2l2ZV93aXRoX2NvbW1lbnRzXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gQ2FwdGNoYU1ldGhvZCB7XG4gIEdvb2dsZVJlY2FwdGNoYVYyID0gXCJHb29nbGVSZWNhcHRjaGFWMlwiLFxuICBHb29nbGVSZWNhcHRjaGFWMyA9IFwiR29vZ2xlUmVjYXB0Y2hhVjNcIixcbiAgSENhcHRjaGEgPSBcIkhDYXB0Y2hhXCIsXG4gIEhDYXB0Y2hhRW50ZXJwcmlzZSA9IFwiSENhcHRjaGFFbnRlcnByaXNlXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgZW51bSBDaGFuZ2VQYXNzd29yZFJlYXNvbiB7XG4gIEFkbWluaXN0cmF0aXZlID0gXCJBZG1pbmlzdHJhdGl2ZVwiLFxuICBCcmVhY2hlZCA9IFwiQnJlYWNoZWRcIixcbiAgRXhwaXJlZCA9IFwiRXhwaXJlZFwiLFxuICBWYWxpZGF0aW9uID0gXCJWYWxpZGF0aW9uXCJcbn1cblxuLyoqXG4gKiBDaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlUGFzc3dvcmRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjaGFuZ2VQYXNzd29yZElkPzogc3RyaW5nO1xuICBjdXJyZW50UGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIGxvZ2luSWRUeXBlcz86IEFycmF5PHN0cmluZz47XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHRydXN0Q2hhbGxlbmdlPzogc3RyaW5nO1xuICB0cnVzdFRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENoYW5nZSBwYXNzd29yZCByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZVBhc3N3b3JkUmVzcG9uc2Uge1xuICBvbmVUaW1lUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBDbGVhblNwZWFrIGNvbmZpZ3VyYXRpb24gYXQgdGhlIHN5c3RlbSBhbmQgYXBwbGljYXRpb24gbGV2ZWwuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xlYW5TcGVha0NvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYXBpS2V5Pzogc3RyaW5nO1xuICBhcHBsaWNhdGlvbklkcz86IEFycmF5PFVVSUQ+O1xuICB1cmw/OiBzdHJpbmc7XG4gIHVzZXJuYW1lTW9kZXJhdGlvbj86IFVzZXJuYW1lTW9kZXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VybmFtZU1vZGVyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGVudW0gQ2xpZW50QXV0aGVudGljYXRpb25Qb2xpY3kge1xuICBSZXF1aXJlZCA9IFwiUmVxdWlyZWRcIixcbiAgTm90UmVxdWlyZWQgPSBcIk5vdFJlcXVpcmVkXCIsXG4gIE5vdFJlcXVpcmVkV2hlblVzaW5nUEtDRSA9IFwiTm90UmVxdWlyZWRXaGVuVXNpbmdQS0NFXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclBvbGljeSB7XG4gIGNvbm5lY3RvcklkPzogVVVJRDtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBtaWdyYXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclJlcXVlc3Qge1xuICBjb25uZWN0b3I/OiBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclJlc3BvbnNlIHtcbiAgY29ubmVjdG9yPzogQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb247XG4gIGNvbm5lY3RvcnM/OiBBcnJheTxCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbj47XG59XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGNvbm5lY3RvcnMuIFRoaXMgZW51bSBpcyBzdG9yZWQgYXMgYW4gb3JkaW5hbCBvbiB0aGUgPGNvZGU+aWRlbnRpdGllczwvY29kZT4gdGFibGUsIG9yZGVyIG11c3QgYmUgbWFpbnRhaW5lZC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgZW51bSBDb25uZWN0b3JUeXBlIHtcbiAgRnVzaW9uQXV0aCA9IFwiRnVzaW9uQXV0aFwiLFxuICBHZW5lcmljID0gXCJHZW5lcmljXCIsXG4gIExEQVAgPSBcIkxEQVBcIlxufVxuXG4vKipcbiAqIE1vZGVscyBhIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnQge1xuICBjb25zZW50RW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgY291bnRyeU1pbmltdW1BZ2VGb3JTZWxmQ29uc2VudD86IExvY2FsaXplZEludGVnZXJzO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVmYXVsdE1pbmltdW1BZ2VGb3JTZWxmQ29uc2VudD86IG51bWJlcjtcbiAgZW1haWxQbHVzPzogRW1haWxQbHVzO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBtdWx0aXBsZVZhbHVlc0FsbG93ZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICB2YWx1ZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsUGx1cyBleHRlbmRzIEVuYWJsZWFibGUge1xuICBlbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBtYXhpbXVtVGltZVRvU2VuZEVtYWlsSW5Ib3Vycz86IG51bWJlcjtcbiAgbWluaW11bVRpbWVUb1NlbmRFbWFpbEluSG91cnM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgZm9yIFVzZXIgY29uc2VudCB0eXBlcy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFJlcXVlc3Qge1xuICBjb25zZW50PzogQ29uc2VudDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnRSZXNwb25zZSB7XG4gIGNvbnNlbnQ/OiBDb25zZW50O1xuICBjb25zZW50cz86IEFycmF5PENvbnNlbnQ+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgQ29uc2VudHNcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnRTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIENvbnNlbnRzXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IENvbnNlbnRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBDb25zZW50IHNlYXJjaCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFNlYXJjaFJlc3BvbnNlIHtcbiAgY29uc2VudHM/OiBBcnJheTxDb25zZW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIENvbnNlbnRTdGF0dXMge1xuICBBY3RpdmUgPSBcIkFjdGl2ZVwiLFxuICBSZXZva2VkID0gXCJSZXZva2VkXCJcbn1cblxuLyoqXG4gKiBTdGF0dXMgZm9yIGNvbnRlbnQgbGlrZSB1c2VybmFtZXMsIHByb2ZpbGUgYXR0cmlidXRlcywgZXRjLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBDb250ZW50U3RhdHVzIHtcbiAgQUNUSVZFID0gXCJBQ1RJVkVcIixcbiAgUEVORElORyA9IFwiUEVORElOR1wiLFxuICBSRUpFQ1RFRCA9IFwiUkVKRUNURURcIlxufVxuXG4vKipcbiAqIEEgbnVtYmVyIGlkZW50aWZ5aW5nIGEgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG0uIFZhbHVlcyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSA8YVxuICogaHJlZj1cImh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2Nvc2UvY29zZS54aHRtbCNhbGdvcml0aG1zXCI+SUFOQSBDT1NFIEFsZ29yaXRobXMgcmVnaXN0cnk8L2E+XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gQ29zZUFsZ29yaXRobUlkZW50aWZpZXIge1xuICBFUzI1NiA9IFwiU0hBMjU2d2l0aEVDRFNBXCIsXG4gIEVTMzg0ID0gXCJTSEEzODR3aXRoRUNEU0FcIixcbiAgRVM1MTIgPSBcIlNIQTUxMndpdGhFQ0RTQVwiLFxuICBSUzI1NiA9IFwiU0hBMjU2d2l0aFJTQVwiLFxuICBSUzM4NCA9IFwiU0hBMzg0d2l0aFJTQVwiLFxuICBSUzUxMiA9IFwiU0hBNTEyd2l0aFJTQVwiLFxuICBQUzI1NiA9IFwiU0hBLTI1NlwiLFxuICBQUzM4NCA9IFwiU0hBLTM4NFwiLFxuICBQUzUxMiA9IFwiU0hBLTUxMlwiXG59XG5cbi8qKlxuICogQ09TRSBFbGxpcHRpYyBDdXJ2ZSBpZGVudGlmaWVyIHRvIGRldGVybWluZSB3aGljaCBlbGxpcHRpYyBjdXJ2ZSB0byB1c2Ugd2l0aCBhIGdpdmVuIGtleVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIENvc2VFbGxpcHRpY0N1cnZlIHtcbiAgUmVzZXJ2ZWQgPSBcIlJlc2VydmVkXCIsXG4gIFAyNTYgPSBcIlAyNTZcIixcbiAgUDM4NCA9IFwiUDM4NFwiLFxuICBQNTIxID0gXCJQNTIxXCIsXG4gIFgyNTUxOSA9IFwiWDI1NTE5XCIsXG4gIFg0NDggPSBcIlg0NDhcIixcbiAgRWQyNTUxOSA9IFwiRWQyNTUxOVwiLFxuICBFZDQ0OCA9IFwiRWQ0NDhcIixcbiAgU2VjcDI1NmsxID0gXCJTZWNwMjU2azFcIlxufVxuXG4vKipcbiAqIENPU0Uga2V5IHR5cGVcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBDb3NlS2V5VHlwZSB7XG4gIFJlc2VydmVkID0gXCIwXCIsXG4gIE9LUCA9IFwiMVwiLFxuICBFQzIgPSBcIjJcIixcbiAgUlNBID0gXCIzXCIsXG4gIFN5bW1ldHJpYyA9IFwiNFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ291bnQge1xuICBjb3VudD86IG51bWJlcjtcbiAgaW50ZXJ2YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29udGFpbnMgdGhlIG91dHB1dCBmb3IgdGhlIHtAY29kZSBjcmVkUHJvcHN9IGV4dGVuc2lvblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlZGVudGlhbFByb3BlcnRpZXNPdXRwdXQge1xuICByaz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yIHRoZSBkYWlseSBhY3RpdmUgdXNlciByZXBvcnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFpbHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2Uge1xuICBkYWlseUFjdGl2ZVVzZXJzPzogQXJyYXk8Q291bnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGV2aWNlQXBwcm92YWxSZXNwb25zZSB7XG4gIGRldmljZUdyYW50U3RhdHVzPzogc3RyaW5nO1xuICBkZXZpY2VJbmZvPzogRGV2aWNlSW5mbztcbiAgaWRlbnRpdHlQcm92aWRlckxpbms/OiBJZGVudGl0eVByb3ZpZGVyTGluaztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB1c2VySWQ/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/OiBBcnJheTxFdmVudExvZz47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV2ZW50IExvZyBUeXBlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBFdmVudExvZ1R5cGUge1xuICBJbmZvcm1hdGlvbiA9IFwiSW5mb3JtYXRpb25cIixcbiAgRGVidWcgPSBcIkRlYnVnXCIsXG4gIEVycm9yID0gXCJFcnJvclwiXG59XG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgZXZlbnQgaW5mb3JtYXRpb24uIFRoaXMgaXMgdGhlIEpTT04gdGhhdCBpcyBzZW50IGZyb20gRnVzaW9uQXV0aCB0byB3ZWJob29rcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFJlcXVlc3Qge1xuICBldmVudD86IEJhc2VFdmVudDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIGV2ZW50IHR5cGVzIHRoYXQgRnVzaW9uQXV0aCBwcm9kdWNlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgSldUUHVibGljS2V5VXBkYXRlID0gXCJqd3QucHVibGljLWtleS51cGRhdGVcIixcbiAgSldUUmVmcmVzaFRva2VuUmV2b2tlID0gXCJqd3QucmVmcmVzaC10b2tlbi5yZXZva2VcIixcbiAgSldUUmVmcmVzaCA9IFwiand0LnJlZnJlc2hcIixcbiAgQXVkaXRMb2dDcmVhdGUgPSBcImF1ZGl0LWxvZy5jcmVhdGVcIixcbiAgRXZlbnRMb2dDcmVhdGUgPSBcImV2ZW50LWxvZy5jcmVhdGVcIixcbiAgS2lja3N0YXJ0U3VjY2VzcyA9IFwia2lja3N0YXJ0LnN1Y2Nlc3NcIixcbiAgR3JvdXBDcmVhdGUgPSBcImdyb3VwLmNyZWF0ZVwiLFxuICBHcm91cENyZWF0ZUNvbXBsZXRlID0gXCJncm91cC5jcmVhdGUuY29tcGxldGVcIixcbiAgR3JvdXBEZWxldGUgPSBcImdyb3VwLmRlbGV0ZVwiLFxuICBHcm91cERlbGV0ZUNvbXBsZXRlID0gXCJncm91cC5kZWxldGUuY29tcGxldGVcIixcbiAgR3JvdXBNZW1iZXJBZGQgPSBcImdyb3VwLm1lbWJlci5hZGRcIixcbiAgR3JvdXBNZW1iZXJBZGRDb21wbGV0ZSA9IFwiZ3JvdXAubWVtYmVyLmFkZC5jb21wbGV0ZVwiLFxuICBHcm91cE1lbWJlclJlbW92ZSA9IFwiZ3JvdXAubWVtYmVyLnJlbW92ZVwiLFxuICBHcm91cE1lbWJlclJlbW92ZUNvbXBsZXRlID0gXCJncm91cC5tZW1iZXIucmVtb3ZlLmNvbXBsZXRlXCIsXG4gIEdyb3VwTWVtYmVyVXBkYXRlID0gXCJncm91cC5tZW1iZXIudXBkYXRlXCIsXG4gIEdyb3VwTWVtYmVyVXBkYXRlQ29tcGxldGUgPSBcImdyb3VwLm1lbWJlci51cGRhdGUuY29tcGxldGVcIixcbiAgR3JvdXBVcGRhdGUgPSBcImdyb3VwLnVwZGF0ZVwiLFxuICBHcm91cFVwZGF0ZUNvbXBsZXRlID0gXCJncm91cC51cGRhdGUuY29tcGxldGVcIixcbiAgVXNlckFjdGlvbiA9IFwidXNlci5hY3Rpb25cIixcbiAgVXNlckJ1bGtDcmVhdGUgPSBcInVzZXIuYnVsay5jcmVhdGVcIixcbiAgVXNlckNyZWF0ZSA9IFwidXNlci5jcmVhdGVcIixcbiAgVXNlckNyZWF0ZUNvbXBsZXRlID0gXCJ1c2VyLmNyZWF0ZS5jb21wbGV0ZVwiLFxuICBVc2VyRGVhY3RpdmF0ZSA9IFwidXNlci5kZWFjdGl2YXRlXCIsXG4gIFVzZXJEZWxldGUgPSBcInVzZXIuZGVsZXRlXCIsXG4gIFVzZXJEZWxldGVDb21wbGV0ZSA9IFwidXNlci5kZWxldGUuY29tcGxldGVcIixcbiAgVXNlckVtYWlsVXBkYXRlID0gXCJ1c2VyLmVtYWlsLnVwZGF0ZVwiLFxuICBVc2VyRW1haWxWZXJpZmllZCA9IFwidXNlci5lbWFpbC52ZXJpZmllZFwiLFxuICBVc2VySWRlbnRpdHlQcm92aWRlckxpbmsgPSBcInVzZXIuaWRlbnRpdHktcHJvdmlkZXIubGlua1wiLFxuICBVc2VySWRlbnRpdHlQcm92aWRlclVubGluayA9IFwidXNlci5pZGVudGl0eS1wcm92aWRlci51bmxpbmtcIixcbiAgVXNlckxvZ2luSWREdXBsaWNhdGVPbkNyZWF0ZSA9IFwidXNlci5sb2dpbklkLmR1cGxpY2F0ZS5jcmVhdGVcIixcbiAgVXNlckxvZ2luSWREdXBsaWNhdGVPblVwZGF0ZSA9IFwidXNlci5sb2dpbklkLmR1cGxpY2F0ZS51cGRhdGVcIixcbiAgVXNlckxvZ2luRmFpbGVkID0gXCJ1c2VyLmxvZ2luLmZhaWxlZFwiLFxuICBVc2VyTG9naW5OZXdEZXZpY2UgPSBcInVzZXIubG9naW4ubmV3LWRldmljZVwiLFxuICBVc2VyTG9naW5TdWNjZXNzID0gXCJ1c2VyLmxvZ2luLnN1Y2Nlc3NcIixcbiAgVXNlckxvZ2luU3VzcGljaW91cyA9IFwidXNlci5sb2dpbi5zdXNwaWNpb3VzXCIsXG4gIFVzZXJQYXNzd29yZEJyZWFjaCA9IFwidXNlci5wYXNzd29yZC5icmVhY2hcIixcbiAgVXNlclBhc3N3b3JkUmVzZXRTZW5kID0gXCJ1c2VyLnBhc3N3b3JkLnJlc2V0LnNlbmRcIixcbiAgVXNlclBhc3N3b3JkUmVzZXRTdGFydCA9IFwidXNlci5wYXNzd29yZC5yZXNldC5zdGFydFwiLFxuICBVc2VyUGFzc3dvcmRSZXNldFN1Y2Nlc3MgPSBcInVzZXIucGFzc3dvcmQucmVzZXQuc3VjY2Vzc1wiLFxuICBVc2VyUGFzc3dvcmRVcGRhdGUgPSBcInVzZXIucGFzc3dvcmQudXBkYXRlXCIsXG4gIFVzZXJSZWFjdGl2YXRlID0gXCJ1c2VyLnJlYWN0aXZhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvbkNyZWF0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uY3JlYXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25DcmVhdGVDb21wbGV0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uY3JlYXRlLmNvbXBsZXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25EZWxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlQ29tcGxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZS5jb21wbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uVXBkYXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi51cGRhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvblVwZGF0ZUNvbXBsZXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi51cGRhdGUuY29tcGxldGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvblZlcmlmaWVkID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi52ZXJpZmllZFwiLFxuICBVc2VyVHdvRmFjdG9yTWV0aG9kQWRkID0gXCJ1c2VyLnR3by1mYWN0b3IubWV0aG9kLmFkZFwiLFxuICBVc2VyVHdvRmFjdG9yTWV0aG9kUmVtb3ZlID0gXCJ1c2VyLnR3by1mYWN0b3IubWV0aG9kLnJlbW92ZVwiLFxuICBVc2VyVXBkYXRlID0gXCJ1c2VyLnVwZGF0ZVwiLFxuICBVc2VyVXBkYXRlQ29tcGxldGUgPSBcInVzZXIudXBkYXRlLmNvbXBsZXRlXCIsXG4gIFRlc3QgPSBcInRlc3RcIixcbiAgVXNlcklkZW50aXR5VmVyaWZpZWQgPSBcInVzZXIuaWRlbnRpdHkudmVyaWZpZWRcIixcbiAgVXNlcklkZW50aXR5VXBkYXRlID0gXCJ1c2VyLmlkZW50aXR5LnVwZGF0ZVwiXG59XG5cbi8qKlxuICogQW4gZXhwYW5kYWJsZSBBUEkgcmVxdWVzdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwYW5kYWJsZVJlcXVlc3Qge1xuICBleHBhbmQ/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEFuIGV4cGFuZGFibGUgQVBJIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBhbmRhYmxlUmVzcG9uc2Uge1xuICBleHBhbmRhYmxlPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gRXhwaXJ5VW5pdCB7XG4gIE1JTlVURVMgPSBcIk1JTlVURVNcIixcbiAgSE9VUlMgPSBcIkhPVVJTXCIsXG4gIERBWVMgPSBcIkRBWVNcIixcbiAgV0VFS1MgPSBcIldFRUtTXCIsXG4gIE1PTlRIUyA9IFwiTU9OVEhTXCIsXG4gIFlFQVJTID0gXCJZRUFSU1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemF0aW9uR3JhbnRJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIGNoYW5nZVBhc3N3b3JkSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBjaGFuZ2VQYXNzd29yZElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgZGV2aWNlQ29kZVRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIGRldmljZVVzZXJDb2RlSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBlbWFpbFZlcmlmaWNhdGlvbklkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgZW1haWxWZXJpZmljYXRpb25JZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIGVtYWlsVmVyaWZpY2F0aW9uT25lVGltZUNvZGVHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBleHRlcm5hbEF1dGhlbnRpY2F0aW9uSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBsb2dpbkludGVudFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIG9uZVRpbWVQYXNzd29yZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHBhc3N3b3JkbGVzc0xvZ2luR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRsZXNzTG9naW5PbmVUaW1lQ29kZUdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHBhc3N3b3JkbGVzc0xvZ2luVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcGVuZGluZ0FjY291bnRMaW5rVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcGhvbmVWZXJpZmljYXRpb25JZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHBob25lVmVyaWZpY2F0aW9uSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBwaG9uZVZlcmlmaWNhdGlvbk9uZVRpbWVDb2RlR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbk9uZVRpbWVDb2RlR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgcmVtZW1iZXJPQXV0aFNjb3BlQ29uc2VudENob2ljZVRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHNhbWx2MkF1dGhOUmVxdWVzdElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgc2V0dXBQYXNzd29yZElkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgc2V0dXBQYXNzd29yZElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdHJ1c3RUb2tlblRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHR3b0ZhY3RvcklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdHdvRmFjdG9yT25lVGltZUNvZGVJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHR3b0ZhY3Rvck9uZVRpbWVDb2RlSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0d29GYWN0b3JUcnVzdElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgd2ViQXV0aG5BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHdlYkF1dGhuUmVnaXN0cmF0aW9uQ2hhbGxlbmdlVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxKV1RBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG59XG5cbi8qKlxuICogRXh0ZXJuYWwgSldULW9ubHkgaWRlbnRpdHkgcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZiBhbmQgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVybmFsSldUSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEV4dGVybmFsSldUQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGNsYWltTWFwPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZGVmYXVsdEtleUlkPzogVVVJRDtcbiAgZG9tYWlucz86IEFycmF5PHN0cmluZz47XG4gIGhlYWRlcktleVBhcmFtZXRlcj86IHN0cmluZztcbiAgb2F1dGgyPzogSWRlbnRpdHlQcm92aWRlck9hdXRoMkNvbmZpZ3VyYXRpb247XG4gIHVuaXF1ZUlkZW50aXR5Q2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhY2Vib29rQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBhcHBJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZmllbGRzPzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmFjZWJvb2sgc29jaWFsIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhY2Vib29rSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEZhY2Vib29rQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGFwcElkPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBmaWVsZHM/OiBzdHJpbmc7XG4gIGxvZ2luTWV0aG9kPzogSWRlbnRpdHlQcm92aWRlckxvZ2luTWV0aG9kO1xuICBwZXJtaXNzaW9ucz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHBvbGljeSB0byBjb25maWd1cmUgaWYgYW5kIHdoZW4gdGhlIHVzZXItYWN0aW9uIGlzIGNhbmNlbGVkIHByaW9yIHRvIHRoZSBleHBpcmF0aW9uIG9mIHRoZSBhY3Rpb24uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhaWxlZEF1dGhlbnRpY2F0aW9uQWN0aW9uQ2FuY2VsUG9saWN5IHtcbiAgb25QYXNzd29yZFJlc2V0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgYmVoYXZpb3Igb2YgZmFpbGVkIGxvZ2luIGF0dGVtcHRzLiBUaGlzIGhlbHBzIHVzIHByb3RlY3QgYWdhaW5zdCBicnV0ZSBmb3JjZSBwYXNzd29yZCBhdHRhY2tzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWlsZWRBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBhY3Rpb25DYW5jZWxQb2xpY3k/OiBGYWlsZWRBdXRoZW50aWNhdGlvbkFjdGlvbkNhbmNlbFBvbGljeTtcbiAgYWN0aW9uRHVyYXRpb24/OiBudW1iZXI7XG4gIGFjdGlvbkR1cmF0aW9uVW5pdD86IEV4cGlyeVVuaXQ7XG4gIGVtYWlsVXNlcj86IGJvb2xlYW47XG4gIHJlc2V0Q291bnRJblNlY29uZHM/OiBudW1iZXI7XG4gIHRvb01hbnlBdHRlbXB0cz86IG51bWJlcjtcbiAgdXNlckFjdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBmYW1pbHkgZ3JvdXBpbmcgb2YgdXNlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5IHtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbWVtYmVycz86IEFycmF5PEZhbWlseU1lbWJlcj47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhbGxvd0NoaWxkUmVnaXN0cmF0aW9ucz86IGJvb2xlYW47XG4gIGNvbmZpcm1DaGlsZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGRlbGV0ZU9ycGhhbmVkQWNjb3VudHM/OiBib29sZWFuO1xuICBkZWxldGVPcnBoYW5lZEFjY291bnRzRGF5cz86IG51bWJlcjtcbiAgZmFtaWx5UmVxdWVzdEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIG1heGltdW1DaGlsZEFnZT86IG51bWJlcjtcbiAgbWluaW11bU93bmVyQWdlPzogbnVtYmVyO1xuICBwYXJlbnRFbWFpbFJlcXVpcmVkPzogYm9vbGVhbjtcbiAgcGFyZW50UmVnaXN0cmF0aW9uRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCBmb3Igc2VuZGluZyBvdXQgZmFtaWx5IHJlcXVlc3RzIHRvIHBhcmVudCdzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseUVtYWlsUmVxdWVzdCB7XG4gIHBhcmVudEVtYWlsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1vZGVscyBhIHNpbmdsZSBmYW1pbHkgbWVtYmVyLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseU1lbWJlciB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgb3duZXI/OiBib29sZWFuO1xuICByb2xlPzogRmFtaWx5Um9sZTtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuZXhwb3J0IGVudW0gRmFtaWx5Um9sZSB7XG4gIENoaWxkID0gXCJDaGlsZFwiLFxuICBUZWVuID0gXCJUZWVuXCIsXG4gIEFkdWx0ID0gXCJBZHVsdFwiXG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgZm9yIG1hbmFnaW5nIGZhbWlsaWVzIGFuZCBtZW1iZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseVJlcXVlc3Qge1xuICBmYW1pbHlNZW1iZXI/OiBGYW1pbHlNZW1iZXI7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBtYW5hZ2luZyBmYW1pbGllcyBhbmQgbWVtYmVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlSZXNwb25zZSB7XG4gIGZhbWlsaWVzPzogQXJyYXk8RmFtaWx5PjtcbiAgZmFtaWx5PzogRmFtaWx5O1xufVxuXG4vKipcbiAqIEZvcmdvdCBwYXNzd29yZCByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3Jnb3RQYXNzd29yZFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNoYW5nZVBhc3N3b3JkSWQ/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBsb2dpbklkVHlwZXM/OiBBcnJheTxzdHJpbmc+O1xuICBzZW5kRm9yZ290UGFzc3dvcmRFbWFpbD86IGJvb2xlYW47XG4gIHNlbmRGb3Jnb3RQYXNzd29yZE1lc3NhZ2U/OiBib29sZWFuO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZvcmdvdCBwYXNzd29yZCByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmdvdFBhc3N3b3JkUmVzcG9uc2Uge1xuICBjaGFuZ2VQYXNzd29yZElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0ZXBzPzogQXJyYXk8Rm9ybVN0ZXA+O1xuICB0eXBlPzogRm9ybVR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBGb3JtQ29udHJvbCB7XG4gIGNoZWNrYm94ID0gXCJjaGVja2JveFwiLFxuICBudW1iZXIgPSBcIm51bWJlclwiLFxuICBwYXNzd29yZCA9IFwicGFzc3dvcmRcIixcbiAgcmFkaW8gPSBcInJhZGlvXCIsXG4gIHNlbGVjdCA9IFwic2VsZWN0XCIsXG4gIHRleHRhcmVhID0gXCJ0ZXh0YXJlYVwiLFxuICB0ZXh0ID0gXCJ0ZXh0XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1EYXRhVHlwZSB7XG4gIGJvb2wgPSBcImJvb2xcIixcbiAgY29uc2VudCA9IFwiY29uc2VudFwiLFxuICBkYXRlID0gXCJkYXRlXCIsXG4gIGVtYWlsID0gXCJlbWFpbFwiLFxuICBudW1iZXIgPSBcIm51bWJlclwiLFxuICBwaG9uZU51bWJlciA9IFwicGhvbmVOdW1iZXJcIixcbiAgc3RyaW5nID0gXCJzdHJpbmdcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGQge1xuICBjb25maXJtPzogYm9vbGVhbjtcbiAgY29uc2VudElkPzogVVVJRDtcbiAgY29udHJvbD86IEZvcm1Db250cm9sO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAga2V5Pzogc3RyaW5nO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgb3B0aW9ucz86IEFycmF5PHN0cmluZz47XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgdHlwZT86IEZvcm1EYXRhVHlwZTtcbiAgdmFsaWRhdG9yPzogRm9ybUZpZWxkVmFsaWRhdG9yO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gRm9ybUZpZWxkQWRtaW5Qb2xpY3kge1xuICBFZGl0ID0gXCJFZGl0XCIsXG4gIFZpZXcgPSBcIlZpZXdcIlxufVxuXG4vKipcbiAqIFRoZSBGb3JtRmllbGQgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkUmVxdWVzdCB7XG4gIGZpZWxkPzogRm9ybUZpZWxkO1xuICBmaWVsZHM/OiBBcnJheTxGb3JtRmllbGQ+O1xufVxuXG4vKipcbiAqIEZvcm0gZmllbGQgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGRSZXNwb25zZSB7XG4gIGZpZWxkPzogRm9ybUZpZWxkO1xuICBmaWVsZHM/OiBBcnJheTxGb3JtRmllbGQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGRWYWxpZGF0b3IgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZXhwcmVzc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3JtIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtUmVxdWVzdCB7XG4gIGZvcm0/OiBGb3JtO1xufVxuXG4vKipcbiAqIEZvcm0gcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1SZXNwb25zZSB7XG4gIGZvcm0/OiBGb3JtO1xuICBmb3Jtcz86IEFycmF5PEZvcm0+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtU3RlcCB7XG4gIGZpZWxkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gRm9ybVR5cGUge1xuICByZWdpc3RyYXRpb24gPSBcInJlZ2lzdHJhdGlvblwiLFxuICBhZG1pblJlZ2lzdHJhdGlvbiA9IFwiYWRtaW5SZWdpc3RyYXRpb25cIixcbiAgYWRtaW5Vc2VyID0gXCJhZG1pblVzZXJcIixcbiAgc2VsZlNlcnZpY2VVc2VyID0gXCJzZWxmU2VydmljZVVzZXJcIlxufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgRnVzaW9uQXV0aCBjb25uZWN0b3IuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdXNpb25BdXRoQ29ubmVjdG9yQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBnZW5lcmljIGNvbm5lY3Rvci5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyaWNDb25uZWN0b3JDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xuICBhdXRoZW50aWNhdGlvblVSTD86IHN0cmluZztcbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gIGhlYWRlcnM/OiBIVFRQSGVhZGVycztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGh0dHBBdXRoZW50aWNhdGlvblVzZXJuYW1lPzogc3RyaW5nO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgc3NsQ2VydGlmaWNhdGVLZXlJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uIHtcbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gIGhlYWRlcnM/OiBIVFRQSGVhZGVycztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGh0dHBBdXRoZW50aWNhdGlvblVzZXJuYW1lPzogc3RyaW5nO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgc3NsQ2VydGlmaWNhdGU/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR29vZ2xlQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGxvZ2luTWV0aG9kPzogSWRlbnRpdHlQcm92aWRlckxvZ2luTWV0aG9kO1xuICBwcm9wZXJ0aWVzPzogR29vZ2xlSWRlbnRpdHlQcm92aWRlclByb3BlcnRpZXM7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdvb2dsZSBzb2NpYWwgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdvb2dsZUlkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxHb29nbGVBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgcHJvcGVydGllcz86IEdvb2dsZUlkZW50aXR5UHJvdmlkZXJQcm9wZXJ0aWVzO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHb29nbGUgc29jaWFsIGxvZ2luIHByb3ZpZGVyIHBhcmFtZXRlcnMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdvb2dsZUlkZW50aXR5UHJvdmlkZXJQcm9wZXJ0aWVzIHtcbiAgYXBpPzogc3RyaW5nO1xuICBidXR0b24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXV0aG9yaXphdGlvbiBHcmFudCB0eXBlcyBhcyBkZWZpbmVkIGJ5IHRoZSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDlcIj5PQXV0aCAyLjAgQXV0aG9yaXphdGlvblxuICogRnJhbWV3b3JrIC0gUkZDIDY3NDk8L2E+LlxuICogPHA+XG4gKiBTcGVjaWZpYyBuYW1lcyBhcyBkZWZpbmVkIGJ5IDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzU5MSNzZWN0aW9uLTQuMVwiPlxuICogT0F1dGggMi4wIER5bmFtaWMgQ2xpZW50IFJlZ2lzdHJhdGlvbiBQcm90b2NvbCAtIFJGQyA3NTkxIFNlY3Rpb24gNC4xPC9hPlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gR3JhbnRUeXBlIHtcbiAgYXV0aG9yaXphdGlvbl9jb2RlID0gXCJhdXRob3JpemF0aW9uX2NvZGVcIixcbiAgaW1wbGljaXQgPSBcImltcGxpY2l0XCIsXG4gIHBhc3N3b3JkID0gXCJwYXNzd29yZFwiLFxuICBjbGllbnRfY3JlZGVudGlhbHMgPSBcImNsaWVudF9jcmVkZW50aWFsc1wiLFxuICByZWZyZXNoX3Rva2VuID0gXCJyZWZyZXNoX3Rva2VuXCIsXG4gIHVua25vd24gPSBcInVua25vd25cIixcbiAgZGV2aWNlX2NvZGUgPSBcInVybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOmRldmljZV9jb2RlXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFR5bGVyIFNjb3R0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXAge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgcm9sZXM/OiBSZWNvcmQ8VVVJRCwgQXJyYXk8QXBwbGljYXRpb25Sb2xlPj47XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIENyZWF0ZWQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwQ3JlYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIENyZWF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIENyZWF0ZSBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBEZWxldGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgRGVsZXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cERlbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xufVxuXG4vKipcbiAqIEEgVXNlcidzIG1lbWJlcnNoaXAgaW50byBhIEdyb3VwXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGdyb3VwSWQ/OiBVVUlEO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBNZW1iZXIgQWRkIENvbXBsZXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlckFkZENvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBNZW1iZXIgQWRkIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlckFkZEV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIFJlbW92ZSBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJSZW1vdmVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUdyb3VwRXZlbnQge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIFJlbW92ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJSZW1vdmVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIEdyb3VwIE1lbWJlcnNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGdyb3VwSWQ/OiBVVUlEO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIEdyb3VwIE1lbWJlcnMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEdyb3VwTWVtYmVyU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3BvbnNlIGZvciBHcm91cCBNZW1iZXJzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyU2VhcmNoUmVzcG9uc2Uge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBVcGRhdGUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyVXBkYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBVcGRhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyVXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlR3JvdXBFdmVudCB7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogR3JvdXAgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFJlcXVlc3Qge1xuICBncm91cD86IEdyb3VwO1xuICByb2xlSWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogR3JvdXAgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBSZXNwb25zZSB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIGdyb3Vwcz86IEFycmF5PEdyb3VwPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIEdyb3Vwc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbiAgdGVuYW50SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBHcm91cHMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEdyb3VwU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3BvbnNlIGZvciBHcm91cHNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBTZWFyY2hSZXNwb25zZSB7XG4gIGdyb3Vwcz86IEFycmF5PEdyb3VwPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBVcGRhdGUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwVXBkYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbiAgb3JpZ2luYWw/OiBHcm91cDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIFVwZGF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VHcm91cEV2ZW50IHtcbiAgb3JpZ2luYWw/OiBHcm91cDtcbn1cblxuLyoqXG4gKiBUeXBlIGZvciB3ZWJob29rIGhlYWRlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSFRUUEhlYWRlcnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEhUVFBNZXRob2Qge1xuICBHRVQgPSBcIkdFVFwiLFxuICBQT1NUID0gXCJQT1NUXCIsXG4gIFBVVCA9IFwiUFVUXCIsXG4gIERFTEVURSA9IFwiREVMRVRFXCIsXG4gIEhFQUQgPSBcIkhFQURcIixcbiAgT1BUSU9OUyA9IFwiT1BUSU9OU1wiLFxuICBQQVRDSCA9IFwiUEFUQ0hcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIWVBSQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICByZWx5aW5nUGFydHlBcHBsaWNhdGlvbklkPzogc3RyaW5nO1xuICByZWx5aW5nUGFydHlVUkw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhZUFJJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8SFlQUkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICByZWx5aW5nUGFydHlBcHBsaWNhdGlvbklkPzogc3RyaW5nO1xuICByZWx5aW5nUGFydHlVUkw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xFbnRyeSB7XG4gIGFjdGlvbj86IElQQWNjZXNzQ29udHJvbEVudHJ5QWN0aW9uO1xuICBlbmRJUEFkZHJlc3M/OiBzdHJpbmc7XG4gIHN0YXJ0SVBBZGRyZXNzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIElQQWNjZXNzQ29udHJvbEVudHJ5QWN0aW9uIHtcbiAgQWxsb3cgPSBcIkFsbG93XCIsXG4gIEJsb2NrID0gXCJCbG9ja1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0IHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVudHJpZXM/OiBBcnJheTxJUEFjY2Vzc0NvbnRyb2xFbnRyeT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdCB7XG4gIGlwQWNjZXNzQ29udHJvbExpc3Q/OiBJUEFjY2Vzc0NvbnRyb2xMaXN0O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlIHtcbiAgaXBBY2Nlc3NDb250cm9sTGlzdD86IElQQWNjZXNzQ29udHJvbExpc3Q7XG4gIGlwQWNjZXNzQ29udHJvbExpc3RzPzogQXJyYXk8SVBBY2Nlc3NDb250cm9sTGlzdD47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBJUCBBQ0xzIC5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogSVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlc3BvbnNlIHtcbiAgaXBBY2Nlc3NDb250cm9sTGlzdHM/OiBBcnJheTxJUEFjY2Vzc0NvbnRyb2xMaXN0PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMaW1pdFVzZXJMaW5raW5nUG9saWN5IGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG1heGltdW1MaW5rcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxpbmsge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIGlkZW50aXR5UHJvdmlkZXJOYW1lPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVyVHlwZT86IElkZW50aXR5UHJvdmlkZXJUeXBlO1xuICBpZGVudGl0eVByb3ZpZGVyVXNlcklkPzogc3RyaW5nO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0TG9naW5JbnN0YW50PzogbnVtYmVyO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHRva2VuPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTGlua1JlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgaWRlbnRpdHlQcm92aWRlckxpbms/OiBJZGVudGl0eVByb3ZpZGVyTGluaztcbiAgcGVuZGluZ0lkUExpbmtJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZSB7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rPzogSWRlbnRpdHlQcm92aWRlckxpbms7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rcz86IEFycmF5PElkZW50aXR5UHJvdmlkZXJMaW5rPjtcbn1cblxuLyoqXG4gKiBUaGUgSWRQIGJlaGF2aW9yIHdoZW4gbm8gdXNlciBsaW5rIGhhcyBiZWVuIG1hZGUgeWV0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gSWRlbnRpdHlQcm92aWRlckxpbmtpbmdTdHJhdGVneSB7XG4gIENyZWF0ZVBlbmRpbmdMaW5rID0gXCJDcmVhdGVQZW5kaW5nTGlua1wiLFxuICBEaXNhYmxlZCA9IFwiRGlzYWJsZWRcIixcbiAgTGlua0Fub255bW91c2x5ID0gXCJMaW5rQW5vbnltb3VzbHlcIixcbiAgTGlua0J5RW1haWwgPSBcIkxpbmtCeUVtYWlsXCIsXG4gIExpbmtCeUVtYWlsRm9yRXhpc3RpbmdVc2VyID0gXCJMaW5rQnlFbWFpbEZvckV4aXN0aW5nVXNlclwiLFxuICBMaW5rQnlVc2VybmFtZSA9IFwiTGlua0J5VXNlcm5hbWVcIixcbiAgTGlua0J5VXNlcm5hbWVGb3JFeGlzdGluZ1VzZXIgPSBcIkxpbmtCeVVzZXJuYW1lRm9yRXhpc3RpbmdVc2VyXCIsXG4gIFVuc3VwcG9ydGVkID0gXCJVbnN1cHBvcnRlZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZCB7XG4gIFVzZVBvcHVwID0gXCJVc2VQb3B1cFwiLFxuICBVc2VSZWRpcmVjdCA9IFwiVXNlUmVkaXJlY3RcIixcbiAgVXNlVmVuZG9ySmF2YVNjcmlwdCA9IFwiVXNlVmVuZG9ySmF2YVNjcmlwdFwiXG59XG5cbi8qKlxuICogTG9naW4gQVBJIHJlcXVlc3Qgb2JqZWN0IHVzZWQgZm9yIGxvZ2luIHRvIHRoaXJkLXBhcnR5IHN5c3RlbXMgKGkuZS4gTG9naW4gd2l0aCBGYWNlYm9vaykuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZW5jb2RlZEpXVD86IHN0cmluZztcbiAgaWRlbnRpdHlQcm92aWRlcklkPzogVVVJRDtcbiAgbm9MaW5rPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlck9hdXRoMkNvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGNsaWVudEF1dGhlbnRpY2F0aW9uTWV0aG9kPzogQ2xpZW50QXV0aGVudGljYXRpb25NZXRob2Q7XG4gIGVtYWlsQ2xhaW0/OiBzdHJpbmc7XG4gIGVtYWlsVmVyaWZpZWRDbGFpbT86IHN0cmluZztcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdG9rZW5fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZXJpbmZvX2VuZHBvaW50Pzogc3RyaW5nO1xuICB1c2VybmFtZUNsYWltPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBDbGllbnRBdXRoZW50aWNhdGlvbk1ldGhvZCB7XG4gIG5vbmUgPSBcIm5vbmVcIixcbiAgY2xpZW50X3NlY3JldF9iYXNpYyA9IFwiY2xpZW50X3NlY3JldF9iYXNpY1wiLFxuICBjbGllbnRfc2VjcmV0X3Bvc3QgPSBcImNsaWVudF9zZWNyZXRfcG9zdFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJQZW5kaW5nTGlua1Jlc3BvbnNlIHtcbiAgaWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb24/OiBJZGVudGl0eVByb3ZpZGVyVGVuYW50Q29uZmlndXJhdGlvbjtcbiAgbGlua0NvdW50PzogbnVtYmVyO1xuICBwZW5kaW5nSWRQTGluaz86IFBlbmRpbmdJZFBMaW5rO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyUmVxdWVzdCB7XG4gIGlkZW50aXR5UHJvdmlkZXI/OiBCYXNlSWRlbnRpdHlQcm92aWRlcjxhbnk+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2Uge1xuICBpZGVudGl0eVByb3ZpZGVyPzogQmFzZUlkZW50aXR5UHJvdmlkZXI8YW55PjtcbiAgaWRlbnRpdHlQcm92aWRlcnM/OiBBcnJheTxCYXNlSWRlbnRpdHlQcm92aWRlcjxhbnk+Pjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIElkZW50aXR5IFByb3ZpZGVycy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIElkZW50aXR5IFByb3ZpZGVyc1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/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/OiBzdHJpbmc7XG4gIHZhbGlkRnJvbT86IG51bWJlcjtcbiAgdmFsaWRUbz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gS2V5QWxnb3JpdGhtIHtcbiAgRVMyNTYgPSBcIkVTMjU2XCIsXG4gIEVTMzg0ID0gXCJFUzM4NFwiLFxuICBFUzUxMiA9IFwiRVM1MTJcIixcbiAgSFMyNTYgPSBcIkhTMjU2XCIsXG4gIEhTMzg0ID0gXCJIUzM4NFwiLFxuICBIUzUxMiA9IFwiSFM1MTJcIixcbiAgUlMyNTYgPSBcIlJTMjU2XCIsXG4gIFJTMzg0ID0gXCJSUzM4NFwiLFxuICBSUzUxMiA9IFwiUlM1MTJcIlxufVxuXG5leHBvcnQgZW51bSBLZXlUeXBlIHtcbiAgRUMgPSBcIkVDXCIsXG4gIFJTQSA9IFwiUlNBXCIsXG4gIEhNQUMgPSBcIkhNQUNcIlxufVxuXG4vKipcbiAqIEtleSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVJlcXVlc3Qge1xuICBrZXk/OiBLZXk7XG59XG5cbi8qKlxuICogS2V5IEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVJlc3BvbnNlIHtcbiAga2V5PzogS2V5O1xuICBrZXlzPzogQXJyYXk8S2V5Pjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIEtleXNcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYWxnb3JpdGhtPzogS2V5QWxnb3JpdGhtO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogS2V5VHlwZTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgS2V5c1xuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEtleVNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEtleSBzZWFyY2ggcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVNlYXJjaFJlc3BvbnNlIHtcbiAga2V5cz86IEFycmF5PEtleT47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSB1c2UgdHlwZSBvZiBhIGtleS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEtleVVzZSB7XG4gIFNpZ25Pbmx5ID0gXCJTaWduT25seVwiLFxuICBTaWduQW5kVmVyaWZ5ID0gXCJTaWduQW5kVmVyaWZ5XCIsXG4gIFZlcmlmeU9ubHkgPSBcIlZlcmlmeU9ubHlcIlxufVxuXG4vKipcbiAqIEV2ZW50IHRvIGluZGljYXRlIGtpY2tzdGFydCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY29tcGxldGVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLaWNrc3RhcnRTdWNjZXNzRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBpbnN0YW5jZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gTERBUCBjb25uZWN0b3IuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMREFQQ29ubmVjdG9yQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uIHtcbiAgYXV0aGVudGljYXRpb25VUkw/OiBzdHJpbmc7XG4gIGJhc2VTdHJ1Y3R1cmU/OiBzdHJpbmc7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBpZGVudGlmeWluZ0F0dHJpYnV0ZT86IHN0cmluZztcbiAgbGFtYmRhQ29uZmlndXJhdGlvbj86IExhbWJkYUNvbmZpZ3VyYXRpb247XG4gIGxvZ2luSWRBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIHJlYWRUaW1lb3V0PzogbnVtYmVyO1xuICByZXF1ZXN0ZWRBdHRyaWJ1dGVzPzogQXJyYXk8c3RyaW5nPjtcbiAgc2VjdXJpdHlNZXRob2Q/OiBMREFQU2VjdXJpdHlNZXRob2Q7XG4gIHN5c3RlbUFjY291bnRETj86IHN0cmluZztcbiAgc3lzdGVtQWNjb3VudFBhc3N3b3JkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBMREFQU2VjdXJpdHlNZXRob2Qge1xuICBOb25lID0gXCJOb25lXCIsXG4gIExEQVBTID0gXCJMREFQU1wiLFxuICBTdGFydFRMUyA9IFwiU3RhcnRUTFNcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuICByZWNvbmNpbGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQSBKYXZhU2NyaXB0IGxhbWJkYSBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGR1cmluZyBjZXJ0YWluIGV2ZW50cyBpbnNpZGUgRnVzaW9uQXV0aC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGEge1xuICBib2R5Pzogc3RyaW5nO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGVuZ2luZVR5cGU/OiBMYW1iZGFFbmdpbmVUeXBlO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogTGFtYmRhVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIExhbWJkYUVuZ2luZVR5cGUge1xuICBHcmFhbEpTID0gXCJHcmFhbEpTXCIsXG4gIE5hc2hvcm4gPSBcIk5hc2hvcm5cIlxufVxuXG4vKipcbiAqIExhbWJkYSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhUmVxdWVzdCB7XG4gIGxhbWJkYT86IExhbWJkYTtcbn1cblxuLyoqXG4gKiBMYW1iZGEgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFSZXNwb25zZSB7XG4gIGxhbWJkYT86IExhbWJkYTtcbiAgbGFtYmRhcz86IEFycmF5PExhbWJkYT47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBMYW1iZGFzXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBib2R5Pzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogTGFtYmRhVHlwZTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgTGFtYmRhc1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBMYW1iZGFTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBMYW1iZGEgc2VhcmNoIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhU2VhcmNoUmVzcG9uc2Uge1xuICBsYW1iZGFzPzogQXJyYXk8TGFtYmRhPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxhbWJkYXMgdGhhdCBpbmRpY2F0ZSBob3cgdGhleSBhcmUgaW52b2tlZCBieSBGdXNpb25BdXRoLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBMYW1iZGFUeXBlIHtcbiAgSldUUG9wdWxhdGUgPSBcIkpXVFBvcHVsYXRlXCIsXG4gIE9wZW5JRFJlY29uY2lsZSA9IFwiT3BlbklEUmVjb25jaWxlXCIsXG4gIFNBTUx2MlJlY29uY2lsZSA9IFwiU0FNTHYyUmVjb25jaWxlXCIsXG4gIFNBTUx2MlBvcHVsYXRlID0gXCJTQU1MdjJQb3B1bGF0ZVwiLFxuICBBcHBsZVJlY29uY2lsZSA9IFwiQXBwbGVSZWNvbmNpbGVcIixcbiAgRXh0ZXJuYWxKV1RSZWNvbmNpbGUgPSBcIkV4dGVybmFsSldUUmVjb25jaWxlXCIsXG4gIEZhY2Vib29rUmVjb25jaWxlID0gXCJGYWNlYm9va1JlY29uY2lsZVwiLFxuICBHb29nbGVSZWNvbmNpbGUgPSBcIkdvb2dsZVJlY29uY2lsZVwiLFxuICBIWVBSUmVjb25jaWxlID0gXCJIWVBSUmVjb25jaWxlXCIsXG4gIFR3aXR0ZXJSZWNvbmNpbGUgPSBcIlR3aXR0ZXJSZWNvbmNpbGVcIixcbiAgTERBUENvbm5lY3RvclJlY29uY2lsZSA9IFwiTERBUENvbm5lY3RvclJlY29uY2lsZVwiLFxuICBMaW5rZWRJblJlY29uY2lsZSA9IFwiTGlua2VkSW5SZWNvbmNpbGVcIixcbiAgRXBpY0dhbWVzUmVjb25jaWxlID0gXCJFcGljR2FtZXNSZWNvbmNpbGVcIixcbiAgTmludGVuZG9SZWNvbmNpbGUgPSBcIk5pbnRlbmRvUmVjb25jaWxlXCIsXG4gIFNvbnlQU05SZWNvbmNpbGUgPSBcIlNvbnlQU05SZWNvbmNpbGVcIixcbiAgU3RlYW1SZWNvbmNpbGUgPSBcIlN0ZWFtUmVjb25jaWxlXCIsXG4gIFR3aXRjaFJlY29uY2lsZSA9IFwiVHdpdGNoUmVjb25jaWxlXCIsXG4gIFhib3hSZWNvbmNpbGUgPSBcIlhib3hSZWNvbmNpbGVcIixcbiAgQ2xpZW50Q3JlZGVudGlhbHNKV1RQb3B1bGF0ZSA9IFwiQ2xpZW50Q3JlZGVudGlhbHNKV1RQb3B1bGF0ZVwiLFxuICBTQ0lNU2VydmVyR3JvdXBSZXF1ZXN0Q29udmVydGVyID0gXCJTQ0lNU2VydmVyR3JvdXBSZXF1ZXN0Q29udmVydGVyXCIsXG4gIFNDSU1TZXJ2ZXJHcm91cFJlc3BvbnNlQ29udmVydGVyID0gXCJTQ0lNU2VydmVyR3JvdXBSZXNwb25zZUNvbnZlcnRlclwiLFxuICBTQ0lNU2VydmVyVXNlclJlcXVlc3RDb252ZXJ0ZXIgPSBcIlNDSU1TZXJ2ZXJVc2VyUmVxdWVzdENvbnZlcnRlclwiLFxuICBTQ0lNU2VydmVyVXNlclJlc3BvbnNlQ29udmVydGVyID0gXCJTQ0lNU2VydmVyVXNlclJlc3BvbnNlQ29udmVydGVyXCIsXG4gIFNlbGZTZXJ2aWNlUmVnaXN0cmF0aW9uVmFsaWRhdGlvbiA9IFwiU2VsZlNlcnZpY2VSZWdpc3RyYXRpb25WYWxpZGF0aW9uXCIsXG4gIFVzZXJJbmZvUG9wdWxhdGUgPSBcIlVzZXJJbmZvUG9wdWxhdGVcIixcbiAgTG9naW5WYWxpZGF0aW9uID0gXCJMb2dpblZhbGlkYXRpb25cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRJbkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkSW5JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8TGlua2VkSW5BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzZXQgb2YgbG9jYWxpemVkIEludGVnZXJzIHRoYXQgY2FuIGJlIHN0b3JlZCBhcyBKU09OLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbGl6ZWRJbnRlZ2VycyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4ge1xufVxuXG4vKipcbiAqIE1vZGVscyBhIHNldCBvZiBsb2NhbGl6ZWQgU3RyaW5ncyB0aGF0IGNhbiBiZSBzdG9yZWQgYXMgSlNPTi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbGl6ZWRTdHJpbmdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG59XG5cbi8qKlxuICogTG9jYXRpb24gaW5mb3JtYXRpb24uIFVzZWZ1bCBmb3IgSVAgYWRkcmVzc2VzIGFuZCBvdGhlciBkaXNwbGF5YWJsZSBkYXRhIG9iamVjdHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb24ge1xuICBjaXR5Pzogc3RyaW5nO1xuICBjb3VudHJ5Pzogc3RyaW5nO1xuICBkaXNwbGF5U3RyaW5nPzogc3RyaW5nO1xuICBsYXRpdHVkZT86IG51bWJlcjtcbiAgbG9uZ2l0dWRlPzogbnVtYmVyO1xuICByZWdpb24/OiBzdHJpbmc7XG4gIHppcGNvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBoaXN0b3JpY2FsIHN0YXRlIG9mIGEgdXNlciBsb2cgZXZlbnQuIFNpbmNlIGV2ZW50cyBjYW4gYmUgbW9kaWZpZWQsIHRoaXMgc3RvcmVzIHRoZSBoaXN0b3JpY2FsIHN0YXRlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0hpc3Rvcnkge1xuICBoaXN0b3J5SXRlbXM/OiBBcnJheTxIaXN0b3J5SXRlbT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUl0ZW0ge1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGNyZWF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGV4cGlyeT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5IaW50Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBwYXJhbWV0ZXJOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIExvZ2luIFBpbmcgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblBpbmdSZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogVGhlIHN1bW1hcnkgb2YgdGhlIGFjdGlvbiB0aGF0IGlzIHByZXZlbnRpbmcgbG9naW4gdG8gYmUgcmV0dXJuZWQgb24gdGhlIGxvZ2luIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblByZXZlbnRlZFJlc3BvbnNlIHtcbiAgYWN0aW9uZXJVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25JZD86IFVVSUQ7XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgbG9jYWxpemVkTmFtZT86IHN0cmluZztcbiAgbG9jYWxpemVkT3B0aW9uPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRSZWFzb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcmVhc29uPzogc3RyaW5nO1xuICByZWFzb25Db2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZEV4cG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGNyaXRlcmlhPzogTG9naW5SZWNvcmRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZWNvcmRTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBlbmQ/OiBudW1iZXI7XG4gIHN0YXJ0PzogbnVtYmVyO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaFJlcXVlc3Qge1xuICByZXRyaWV2ZVRvdGFsPzogYm9vbGVhbjtcbiAgc2VhcmNoPzogTG9naW5SZWNvcmRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBBIHJhdyBsb2dpbiByZWNvcmQgcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZWNvcmRTZWFyY2hSZXNwb25zZSB7XG4gIGxvZ2lucz86IEFycmF5PERpc3BsYXlhYmxlUmF3TG9naW4+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIGxvZ2luIHJlcG9ydC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlcG9ydFJlc3BvbnNlIHtcbiAgaG91cmx5Q291bnRzPzogQXJyYXk8Q291bnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBMb2dpbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBsb2dpbklkVHlwZXM/OiBBcnJheTxzdHJpbmc+O1xuICBvbmVUaW1lUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVzcG9uc2Uge1xuICBhY3Rpb25zPzogQXJyYXk8TG9naW5QcmV2ZW50ZWRSZXNwb25zZT47XG4gIGNoYW5nZVBhc3N3b3JkSWQ/OiBzdHJpbmc7XG4gIGNoYW5nZVBhc3N3b3JkUmVhc29uPzogQ2hhbmdlUGFzc3dvcmRSZWFzb247XG4gIGNvbmZpZ3VyYWJsZU1ldGhvZHM/OiBBcnJheTxzdHJpbmc+O1xuICBlbWFpbFZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICBpZGVudGl0eVZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICBtZXRob2RzPzogQXJyYXk8VHdvRmFjdG9yTWV0aG9kPjtcbiAgcGVuZGluZ0lkUExpbmtJZD86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW5JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHRocmVhdHNEZXRlY3RlZD86IEFycmF5PEF1dGhlbnRpY2F0aW9uVGhyZWF0cz47XG4gIHRva2VuPzogc3RyaW5nO1xuICB0b2tlbkV4cGlyYXRpb25JbnN0YW50PzogbnVtYmVyO1xuICB0cnVzdFRva2VuPzogc3RyaW5nO1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbiAgdHdvRmFjdG9yVHJ1c3RJZD86IHN0cmluZztcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBNYXR0aGV3IEFsdG1hblxuICovXG5leHBvcnQgZW51bSBMb2dvdXRCZWhhdmlvciB7XG4gIFJlZGlyZWN0T25seSA9IFwiUmVkaXJlY3RPbmx5XCIsXG4gIEFsbEFwcGxpY2F0aW9ucyA9IFwiQWxsQXBwbGljYXRpb25zXCJcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IGZvciB0aGUgTG9nb3V0IEFQSSB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRvIFVSTCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ291dFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb29rdXBSZXNwb25zZSB7XG4gIGlkZW50aXR5UHJvdmlkZXI/OiBJZGVudGl0eVByb3ZpZGVyRGV0YWlscztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyRGV0YWlscyB7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGlkPzogVVVJRDtcbiAgaWRwRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xuICB0eXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBjb250YWlucyB0aGUgbWFuYWdlZCBmaWVsZHMgdGhhdCBhcmUgYWxzbyBwdXQgaW50byB0aGUgZGF0YWJhc2UgZHVyaW5nIEZ1c2lvbkF1dGggc2V0dXAuXG4gKiA8cD5cbiAqIEludGVybmFsIE5vdGU6IFRoZXNlIGZpZWxkcyBhcmUgYWxzbyBkZWNsYXJlZCBpbiBTUUwgaW4gb3JkZXIgdG8gYm9vdHN0cmFwIHRoZSBzeXN0ZW0uIFRoZXNlIG5lZWQgdG8gc3RheSBpbiBzeW5jLlxuICogQW55IGNoYW5nZXMgdG8gdGhlc2UgZmllbGRzIG5lZWRzIHRvIGFsc28gYmUgcmVmbGVjdGVkIGluIG15c3FsLnNxbCBhbmQgcG9zdGdyZXNxbC5zcWxcbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5hZ2VkRmllbGRzIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF4aW11bVBhc3N3b3JkQWdlIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGRheXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogR3JvdXAgTWVtYmVyIERlbGV0ZSBSZXF1ZXN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbWJlckRlbGV0ZVJlcXVlc3Qge1xuICBtZW1iZXJJZHM/OiBBcnJheTxVVUlEPjtcbiAgbWVtYmVycz86IFJlY29yZDxVVUlELCBBcnJheTxVVUlEPj47XG59XG5cbi8qKlxuICogR3JvdXAgTWVtYmVyIFJlcXVlc3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyUmVxdWVzdCB7XG4gIG1lbWJlcnM/OiBSZWNvcmQ8VVVJRCwgQXJyYXk8R3JvdXBNZW1iZXI+Pjtcbn1cblxuLyoqXG4gKiBHcm91cCBNZW1iZXIgUmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyUmVzcG9uc2Uge1xuICBtZW1iZXJzPzogUmVjb3JkPFVVSUQsIEFycmF5PEdyb3VwTWVtYmVyPj47XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWtleSBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlIHtcbn1cblxuLyoqXG4gKiBTdG9yZXMgYW4gbWVzc2FnZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3RyaWJ1dGUgbWVzc2FnZXM7XG4gKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUZW1wbGF0ZSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogTWVzc2FnZVR5cGU7XG59XG5cbi8qKlxuICogQSBNZXNzYWdlIFRlbXBsYXRlIFJlcXVlc3QgdG8gdGhlIEFQSVxuICpcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0IHtcbiAgbWVzc2FnZVRlbXBsYXRlPzogTWVzc2FnZVRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSB7XG4gIG1lc3NhZ2VUZW1wbGF0ZT86IE1lc3NhZ2VUZW1wbGF0ZTtcbiAgbWVzc2FnZVRlbXBsYXRlcz86IEFycmF5PE1lc3NhZ2VUZW1wbGF0ZT47XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWtleSBTbGVldmlcbiAqL1xuZXhwb3J0IGVudW0gTWVzc2FnZVR5cGUge1xuICBTTVMgPSBcIlNNU1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzZW5nZXJSZXF1ZXN0IHtcbiAgbWVzc2VuZ2VyPzogQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzZW5nZXJSZXNwb25zZSB7XG4gIG1lc3Nlbmdlcj86IEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uO1xuICBtZXNzZW5nZXJzPzogQXJyYXk8QmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzZW5nZXJUcmFuc3BvcnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIE1lc3NlbmdlclR5cGUge1xuICBHZW5lcmljID0gXCJHZW5lcmljXCIsXG4gIEthZmthID0gXCJLYWZrYVwiLFxuICBUd2lsaW8gPSBcIlR3aWxpb1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbmltdW1QYXNzd29yZEFnZSBleHRlbmRzIEVuYWJsZWFibGUge1xuICBzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgZGFpbHkgYWN0aXZlIHVzZXIgcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRobHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2Uge1xuICBtb250aGx5QWN0aXZlVXNlcnM/OiBBcnJheTxDb3VudD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gTXVsdGlGYWN0b3JMb2dpblBvbGljeSB7XG4gIERpc2FibGVkID0gXCJEaXNhYmxlZFwiLFxuICBFbmFibGVkID0gXCJFbmFibGVkXCIsXG4gIFJlcXVpcmVkID0gXCJSZXF1aXJlZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmludGVuZG9BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTmludGVuZG8gZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pbnRlbmRvSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPE5pbnRlbmRvQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBtYXJrZXIgaW50ZXJmYWNlIGluZGljYXRpbmcgdGhpcyBldmVudCBjYW5ub3QgYmUgbWFkZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb25UcmFuc2FjdGlvbmFsRXZlbnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aDJDb25maWd1cmF0aW9uIHtcbiAgYXV0aG9yaXplZE9yaWdpblVSTHM/OiBBcnJheTxzdHJpbmc+O1xuICBhdXRob3JpemVkUmVkaXJlY3RVUkxzPzogQXJyYXk8c3RyaW5nPjtcbiAgYXV0aG9yaXplZFVSTFZhbGlkYXRpb25Qb2xpY3k/OiBPYXV0aDJBdXRob3JpemVkVVJMVmFsaWRhdGlvblBvbGljeTtcbiAgY2xpZW50QXV0aGVudGljYXRpb25Qb2xpY3k/OiBDbGllbnRBdXRoZW50aWNhdGlvblBvbGljeTtcbiAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgY29uc2VudE1vZGU/OiBPQXV0aFNjb3BlQ29uc2VudE1vZGU7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgZGV2aWNlVmVyaWZpY2F0aW9uVVJMPzogc3RyaW5nO1xuICBlbmFibGVkR3JhbnRzPzogQXJyYXk8R3JhbnRUeXBlPjtcbiAgZ2VuZXJhdGVSZWZyZXNoVG9rZW5zPzogYm9vbGVhbjtcbiAgbG9nb3V0QmVoYXZpb3I/OiBMb2dvdXRCZWhhdmlvcjtcbiAgbG9nb3V0VVJMPzogc3RyaW5nO1xuICBwcm9vZktleUZvckNvZGVFeGNoYW5nZVBvbGljeT86IFByb29mS2V5Rm9yQ29kZUV4Y2hhbmdlUG9saWN5O1xuICBwcm92aWRlZFNjb3BlUG9saWN5PzogUHJvdmlkZWRTY29wZVBvbGljeTtcbiAgcmVsYXRpb25zaGlwPzogT0F1dGhBcHBsaWNhdGlvblJlbGF0aW9uc2hpcDtcbiAgcmVxdWlyZUNsaWVudEF1dGhlbnRpY2F0aW9uPzogYm9vbGVhbjtcbiAgcmVxdWlyZVJlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG4gIHNjb3BlSGFuZGxpbmdQb2xpY3k/OiBPQXV0aFNjb3BlSGFuZGxpbmdQb2xpY3k7XG4gIHVua25vd25TY29wZVBvbGljeT86IFVua25vd25TY29wZVBvbGljeTtcbn1cblxuLyoqXG4gKiBUaGUgYXBwbGljYXRpb24ncyByZWxhdGlvbnNoaXAgdG8gdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLiBGaXJzdC1wYXJ0eSBhcHBsaWNhdGlvbnMgd2lsbCBiZSBncmFudGVkIGltcGxpY2l0IHBlcm1pc3Npb24gZm9yIHJlcXVlc3RlZCBzY29wZXMuXG4gKiBUaGlyZC1wYXJ0eSBhcHBsaWNhdGlvbnMgd2lsbCB1c2UgdGhlIHtAbGluayBPQXV0aFNjb3BlQ29uc2VudE1vZGV9IHBvbGljeS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBPQXV0aEFwcGxpY2F0aW9uUmVsYXRpb25zaGlwIHtcbiAgRmlyc3RQYXJ0eSA9IFwiRmlyc3RQYXJ0eVwiLFxuICBUaGlyZFBhcnR5ID0gXCJUaGlyZFBhcnR5XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGhDb25maWd1cmF0aW9uUmVzcG9uc2Uge1xuICBodHRwU2Vzc2lvbk1heEluYWN0aXZlSW50ZXJ2YWw/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+O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHVudmVyaWZpZWQgcGhvbmUgbnVtYmVyIGlkZW50aXRpZXMuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaG9uZVVudmVyaWZpZWRPcHRpb25zIHtcbiAgYWxsb3dQaG9uZU51bWJlckNoYW5nZVdoZW5HYXRlZD86IGJvb2xlYW47XG4gIGJlaGF2aW9yPzogVW52ZXJpZmllZEJlaGF2aW9yO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVxdWVzdCB7XG4gIGxvY2FsZT86IHN0cmluZztcbiAgbWVzc2FnZVRlbXBsYXRlPzogTWVzc2FnZVRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2Uge1xuICBlcnJvcnM/OiBFcnJvcnM7XG4gIG1lc3NhZ2U/OiBTTVNNZXNzYWdlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXZpZXdSZXF1ZXN0IHtcbiAgZW1haWxUZW1wbGF0ZT86IEVtYWlsVGVtcGxhdGU7XG4gIGxvY2FsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld1Jlc3BvbnNlIHtcbiAgZW1haWw/OiBFbWFpbDtcbiAgZXJyb3JzPzogRXJyb3JzO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIFByb29mS2V5Rm9yQ29kZUV4Y2hhbmdlUG9saWN5IHtcbiAgUmVxdWlyZWQgPSBcIlJlcXVpcmVkXCIsXG4gIE5vdFJlcXVpcmVkID0gXCJOb3RSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZFdoZW5Vc2luZ0NsaWVudEF1dGhlbnRpY2F0aW9uID0gXCJOb3RSZXF1aXJlZFdoZW5Vc2luZ0NsaWVudEF1dGhlbnRpY2F0aW9uXCJcbn1cblxuLyoqXG4gKiBUaGUgaGFuZGxpbmcgcG9saWN5IGZvciBzY29wZXMgcHJvdmlkZWQgYnkgRnVzaW9uQXV0aFxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZWRTY29wZVBvbGljeSB7XG4gIGFkZHJlc3M/OiBSZXF1aXJhYmxlO1xuICBlbWFpbD86IFJlcXVpcmFibGU7XG4gIHBob25lPzogUmVxdWlyYWJsZTtcbiAgcHJvZmlsZT86IFJlcXVpcmFibGU7XG59XG5cbi8qKlxuICogQWxsb3dzIHRoZSBSZWx5aW5nIFBhcnR5IHRvIHNwZWNpZnkgZGVzaXJlZCBhdHRyaWJ1dGVzIG9mIGEgbmV3IGNyZWRlbnRpYWwuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHtcbiAgYXR0ZXN0YXRpb24/OiBBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlO1xuICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uPzogQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhO1xuICBjaGFsbGVuZ2U/OiBzdHJpbmc7XG4gIGV4Y2x1ZGVDcmVkZW50aWFscz86IEFycmF5PFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yPjtcbiAgZXh0ZW5zaW9ucz86IFdlYkF1dGhuUmVnaXN0cmF0aW9uRXh0ZW5zaW9uT3B0aW9ucztcbiAgcHViS2V5Q3JlZFBhcmFtcz86IEFycmF5PFB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzPjtcbiAgcnA/OiBQdWJsaWNLZXlDcmVkZW50aWFsUmVseWluZ1BhcnR5RW50aXR5O1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICB1c2VyPzogUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHk7XG59XG5cbi8qKlxuICogQ29udGFpbnMgYXR0cmlidXRlcyBmb3IgdGhlIFJlbHlpbmcgUGFydHkgdG8gcmVmZXIgdG8gYW4gZXhpc3RpbmcgcHVibGljIGtleSBjcmVkZW50aWFsIGFzIGFuIGlucHV0IHBhcmFtZXRlci5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIHRyYW5zcG9ydHM/OiBBcnJheTxzdHJpbmc+O1xuICB0eXBlPzogUHVibGljS2V5Q3JlZGVudGlhbFR5cGU7XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIGEgdXNlciBhY2NvdW50IG9yIFdlYkF1dGhuIFJlbHlpbmcgUGFydHkgYXNzb2NpYXRlZCB3aXRoIGEgcHVibGljIGtleSBjcmVkZW50aWFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eSB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3VwcGx5IGluZm9ybWF0aW9uIG9uIGNyZWRlbnRpYWwgdHlwZSBhbmQgYWxnb3JpdGhtIHRvIHRoZSA8aT5hdXRoZW50aWNhdG9yPC9pPi5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIHtcbiAgYWxnPzogQ29zZUFsZ29yaXRobUlkZW50aWZpZXI7XG4gIHR5cGU/OiBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTtcbn1cblxuLyoqXG4gKiBTdXBwbHkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgUmVseWluZyBQYXJ0eSB3aGVuIGNyZWF0aW5nIGEgbmV3IGNyZWRlbnRpYWxcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxSZWx5aW5nUGFydHlFbnRpdHkgZXh0ZW5kcyBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IHtcbiAgaWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIDxpPmF1dGhlbnRpY2F0b3I8L2k+IHdpdGggdGhlIGRhdGEgaXQgbmVlZHMgdG8gZ2VuZXJhdGUgYW4gYXNzZXJ0aW9uLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHtcbiAgYWxsb3dDcmVkZW50aWFscz86IEFycmF5PFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yPjtcbiAgY2hhbGxlbmdlPzogc3RyaW5nO1xuICBycElkPzogc3RyaW5nO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICB1c2VyVmVyaWZpY2F0aW9uPzogVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50O1xufVxuXG4vKipcbiAqIERlZmluZXMgdmFsaWQgY3JlZGVudGlhbCB0eXBlcy4gVGhpcyBpcyBhbiBleHRlbnNpb24gcG9pbnQgaW4gdGhlIFdlYkF1dGhuIHNwZWMuIFRoZSBvbmx5IGRlZmluZWQgdmFsdWUgYXQgdGhpcyB0aW1lIGlzIFwicHVibGljLWtleVwiXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gUHVibGljS2V5Q3JlZGVudGlhbFR5cGUge1xuICBwdWJsaWNLZXkgPSBcInB1YmxpYy1rZXlcIlxufVxuXG4vKipcbiAqIFN1cHBseSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VyIGFjY291bnQgd2hlbiBjcmVhdGluZyBhIG5ldyBjcmVkZW50aWFsXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSBleHRlbmRzIFB1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkge1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSldUIFB1YmxpYyBLZXkgUmVzcG9uc2UgT2JqZWN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleVJlc3BvbnNlIHtcbiAgcHVibGljS2V5Pzogc3RyaW5nO1xuICBwdWJsaWNLZXlzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBsaW1pdD86IG51bWJlcjtcbiAgdGltZVBlcmlvZEluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSYXcgbG9naW4gaW5mb3JtYXRpb24gZm9yIGVhY2ggdGltZSBhIHVzZXIgbG9ncyBpbnRvIGFuIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhd0xvZ2luIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGluc3RhbnQ/OiBudW1iZXI7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gUmVhY3RvckZlYXR1cmVTdGF0dXMge1xuICBBQ1RJVkUgPSBcIkFDVElWRVwiLFxuICBESVNDT05ORUNURUQgPSBcIkRJU0NPTk5FQ1RFRFwiLFxuICBQRU5ESU5HID0gXCJQRU5ESU5HXCIsXG4gIERJU0FCTEVEID0gXCJESVNBQkxFRFwiLFxuICBVTktOT1dOID0gXCJVTktOT1dOXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rvck1ldHJpY3Mge1xuICBicmVhY2hlZFBhc3N3b3JkTWV0cmljcz86IFJlY29yZDxVVUlELCBCcmVhY2hlZFBhc3N3b3JkVGVuYW50TWV0cmljPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rvck1ldHJpY3NSZXNwb25zZSB7XG4gIG1ldHJpY3M/OiBSZWFjdG9yTWV0cmljcztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IGZvciBtYW5hZ2luZyBGdXNpb25BdXRoIFJlYWN0b3IgYW5kIGxpY2Vuc2VzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JSZXF1ZXN0IHtcbiAgbGljZW5zZT86IHN0cmluZztcbiAgbGljZW5zZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yUmVzcG9uc2Uge1xuICBzdGF0dXM/OiBSZWFjdG9yU3RhdHVzO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yU3RhdHVzIHtcbiAgYWR2YW5jZWRJZGVudGl0eVByb3ZpZGVycz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZExhbWJkYXM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYWR2YW5jZWRNdWx0aUZhY3RvckF1dGhlbnRpY2F0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkT0F1dGhTY29wZXM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYWR2YW5jZWRPQXV0aFNjb3Blc0N1c3RvbVNjb3Blcz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZE9BdXRoU2NvcGVzVGhpcmRQYXJ0eUFwcGxpY2F0aW9ucz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZFJlZ2lzdHJhdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhcHBsaWNhdGlvbk11bHRpRmFjdG9yQXV0aGVudGljYXRpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYXBwbGljYXRpb25UaGVtZXM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYnJlYWNoZWRQYXNzd29yZERldGVjdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBjb25uZWN0b3JzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGVudGl0eU1hbmFnZW1lbnQ/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgZXhwaXJhdGlvbj86IHN0cmluZztcbiAgbGljZW5zZUF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBsaWNlbnNlZD86IGJvb2xlYW47XG4gIHNjaW1TZXJ2ZXI/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgdGVuYW50TWFuYWdlckFwcGxpY2F0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIHRocmVhdERldGVjdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB1bml2ZXJzYWxBcHBsaWNhdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB3ZWJBdXRobj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB3ZWJBdXRoblBsYXRmb3JtQXV0aGVudGljYXRvcnM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgd2ViQXV0aG5Sb2FtaW5nQXV0aGVudGljYXRvcnM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIHVzZXIgbG9naW4gcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNlbnRMb2dpblJlc3BvbnNlIHtcbiAgbG9naW5zPzogQXJyYXk8RGlzcGxheWFibGVSYXdMb2dpbj47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hSZXNwb25zZSB7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgSldUIFJlZnJlc2ggVG9rZW4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBtZXRhRGF0YT86IE1ldGFEYXRhO1xuICBzdGFydEluc3RhbnQ/OiBudW1iZXI7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YURhdGEge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGV2aWNlPzogRGV2aWNlSW5mbztcbiAgc2NvcGVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFJlZnJlc2hUb2tlbkV4cGlyYXRpb25Qb2xpY3kge1xuICBGaXhlZCA9IFwiRml4ZWRcIixcbiAgU2xpZGluZ1dpbmRvdyA9IFwiU2xpZGluZ1dpbmRvd1wiLFxuICBTbGlkaW5nV2luZG93V2l0aE1heGltdW1MaWZldGltZSA9IFwiU2xpZGluZ1dpbmRvd1dpdGhNYXhpbXVtTGlmZXRpbWVcIlxufVxuXG4vKipcbiAqIFJlZnJlc2ggVG9rZW4gSW1wb3J0IHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5JbXBvcnRSZXF1ZXN0IHtcbiAgcmVmcmVzaFRva2Vucz86IEFycmF5PFJlZnJlc2hUb2tlbj47XG4gIHZhbGlkYXRlRGJDb25zdHJhaW50cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVmcmVzaCB0b2tlbiBvbmUtdGltZSB1c2UgY29uZmlndXJhdGlvbi4gVGhpcyBjb25maWd1cmF0aW9uIGlzIHV0aWxpemVkIHdoZW4gdGhlIHVzYWdlIHBvbGljeSBpc1xuICogY29uZmlndXJlZCBmb3Igb25lLXRpbWUgdXNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5PbmVUaW1lVXNlQ29uZmlndXJhdGlvbiB7XG4gIGdyYWNlUGVyaW9kSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgcmV0cmlldmluZyBSZWZyZXNoIFRva2Vuc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IFJlZnJlc2hUb2tlbjtcbiAgcmVmcmVzaFRva2Vucz86IEFycmF5PFJlZnJlc2hUb2tlbj47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlblJldm9jYXRpb25Qb2xpY3kge1xuICBvbkxvZ2luUHJldmVudGVkPzogYm9vbGVhbjtcbiAgb25NdWx0aUZhY3RvckVuYWJsZT86IGJvb2xlYW47XG4gIG9uT25lVGltZVRva2VuUmV1c2U/OiBib29sZWFuO1xuICBvblBhc3N3b3JkQ2hhbmdlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgdGhlIFJlZnJlc2ggVG9rZW4gQVBJIHRvIHJldm9rZSBhIHJlZnJlc2ggdG9rZW4gcmF0aGVyIHRoYW4gdXNpbmcgdGhlIFVSTCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlblJldm9rZVJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHRva2VuPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5TbGlkaW5nV2luZG93Q29uZmlndXJhdGlvbiB7XG4gIG1heGltdW1UaW1lVG9MaXZlSW5NaW51dGVzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gUmVmcmVzaFRva2VuVXNhZ2VQb2xpY3kge1xuICBSZXVzYWJsZSA9IFwiUmV1c2FibGVcIixcbiAgT25lVGltZVVzZSA9IFwiT25lVGltZVVzZVwiXG59XG5cbi8qKlxuICogUmVnaXN0cmF0aW9uIGRlbGV0ZSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uRGVsZXRlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgcmVnaXN0cmF0aW9uIHJlcG9ydC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25SZXBvcnRSZXNwb25zZSB7XG4gIGhvdXJseUNvdW50cz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVnaXN0cmF0aW9uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGRpc2FibGVEb21haW5CbG9jaz86IGJvb2xlYW47XG4gIGdlbmVyYXRlQXV0aGVudGljYXRpb25Ub2tlbj86IGJvb2xlYW47XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHNlbmRTZXRQYXNzd29yZEVtYWlsPzogYm9vbGVhbjtcbiAgc2VuZFNldFBhc3N3b3JkSWRlbnRpdHlUeXBlPzogU2VuZFNldFBhc3N3b3JkSWRlbnRpdHlUeXBlO1xuICBza2lwUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uPzogYm9vbGVhbjtcbiAgc2tpcFZlcmlmaWNhdGlvbj86IGJvb2xlYW47XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIFJlZ2lzdHJhdGlvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uUmVzcG9uc2Uge1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbklkPzogVVVJRDtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbk9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbiAgdG9rZW5FeHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvblVudmVyaWZpZWRPcHRpb25zIHtcbiAgYmVoYXZpb3I/OiBVbnZlcmlmaWVkQmVoYXZpb3I7XG59XG5cbi8qKlxuICogUmVpbmRleCBBUEkgcmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWluZGV4UmVxdWVzdCB7XG4gIGluZGV4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWxvYWRSZXF1ZXN0IHtcbiAgbmFtZXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW1lbWJlclByZXZpb3VzUGFzc3dvcmRzIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGNvdW50PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFNvbWV0aGluZyB0aGF0IGNhbiBiZSByZXF1aXJlZCBhbmQgdGh1cyBhbHNvIG9wdGlvbmFsLiBUaGlzIGN1cnJlbnRseSBleHRlbmRzIEVuYWJsZWFibGUgYmVjYXVzZSBhbnl0aGluZyB0aGF0IGlzXG4gKiByZXF1aXJlZC9vcHRpb25hbCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWFibGUgYXMgd2VsbC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJhYmxlIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZGVzY3JpYmluZyB0aGUgbmVlZCBmb3IgQ09SUyBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJlc0NPUlNDb25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIFJlbHlpbmcgUGFydHkncyByZXF1aXJlbWVudHMgZm9yIDxhIGhyZWY9XCJodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4tMi8jY2xpZW50LXNpZGUtZGlzY292ZXJhYmxlLWNyZWRlbnRpYWxcIj5jbGllbnQtc2lkZVxuICogZGlzY292ZXJhYmxlIGNyZWRlbnRpYWxzPC9hPiAoZm9ybWVybHkga25vd24gYXMgXCJyZXNpZGVudCBrZXlzXCIpXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gUmVzaWRlbnRLZXlSZXF1aXJlbWVudCB7XG4gIGRpc2NvdXJhZ2VkID0gXCJkaXNjb3VyYWdlZFwiLFxuICBwcmVmZXJyZWQgPSBcInByZWZlcnJlZFwiLFxuICByZXF1aXJlZCA9IFwicmVxdWlyZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkFzc2VydGlvbkNvbmZpZ3VyYXRpb24ge1xuICBkZXN0aW5hdGlvbj86IFNBTUx2MkRlc3RpbmF0aW9uQXNzZXJ0aW9uQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBlbmNyeXB0ZWQgYXNzZXJ0aW9ucyB3aGVuIGFjdGluZyBhcyBTQU1MIFNlcnZpY2UgUHJvdmlkZXJcbiAqXG4gKiBAYXV0aG9yIEphcmV0IEhlbmRyaWNrc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyQXNzZXJ0aW9uRGVjcnlwdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAga2V5VHJhbnNwb3J0RGVjcnlwdGlvbktleUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYyRGVzdGluYXRpb25Bc3NlcnRpb25Db25maWd1cmF0aW9uIHtcbiAgYWx0ZXJuYXRlcz86IEFycmF5PHN0cmluZz47XG4gIHBvbGljeT86IFNBTUx2MkRlc3RpbmF0aW9uQXNzZXJ0aW9uUG9saWN5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGVudW0gU0FNTHYyRGVzdGluYXRpb25Bc3NlcnRpb25Qb2xpY3kge1xuICBFbmFibGVkID0gXCJFbmFibGVkXCIsXG4gIERpc2FibGVkID0gXCJEaXNhYmxlZFwiLFxuICBBbGxvd0FsdGVybmF0ZXMgPSBcIkFsbG93QWx0ZXJuYXRlc1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkUEluaXRpYXRlZEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBTQU1MIHYyIElkUCBJbml0aWF0ZWQgaWRlbnRpdHkgcHJvdmlkZXIgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRQSW5pdGlhdGVkSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VTQU1MdjJJZGVudGl0eVByb3ZpZGVyPFNBTUx2MklkUEluaXRpYXRlZEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBpc3N1ZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSWRQIEluaXRpYXRlZCBsb2dpbiBjb25maWd1cmF0aW9uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkUEluaXRpYXRlZExvZ2luQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBuYW1lSWRGb3JtYXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU0FNTCB2MiBpZGVudGl0eSBwcm92aWRlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlU0FNTHYySWRlbnRpdHlQcm92aWRlcjxTQU1MdjJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYXNzZXJ0aW9uQ29uZmlndXJhdGlvbj86IFNBTUx2MkFzc2VydGlvbkNvbmZpZ3VyYXRpb247XG4gIGJ1dHRvbkltYWdlVVJMPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgaWRwRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGlkcEluaXRpYXRlZENvbmZpZ3VyYXRpb24/OiBTQU1MdjJJZHBJbml0aWF0ZWRDb25maWd1cmF0aW9uO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGxvZ2luSGludENvbmZpZ3VyYXRpb24/OiBMb2dpbkhpbnRDb25maWd1cmF0aW9uO1xuICBuYW1lSWRGb3JtYXQ/OiBzdHJpbmc7XG4gIHBvc3RSZXF1ZXN0PzogYm9vbGVhbjtcbiAgcmVxdWVzdFNpZ25pbmdLZXlJZD86IFVVSUQ7XG4gIHNpZ25SZXF1ZXN0PzogYm9vbGVhbjtcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG59XG5cbi8qKlxuICogQ29uZmlnIGZvciByZWd1bGFyIFNBTUwgSURQIGNvbmZpZ3VyYXRpb25zIHRoYXQgc3VwcG9ydCBJZFAgaW5pdGlhdGVkIHJlcXVlc3RzXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkcEluaXRpYXRlZENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgaXNzdWVyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTTVNNZXNzYWdlIHtcbiAgcGhvbmVOdW1iZXI/OiBzdHJpbmc7XG4gIHRleHRNZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTTVNNZXNzYWdlVGVtcGxhdGUgZXh0ZW5kcyBNZXNzYWdlVGVtcGxhdGUge1xuICBkZWZhdWx0VGVtcGxhdGU/OiBzdHJpbmc7XG4gIGxvY2FsaXplZFRlbXBsYXRlcz86IExvY2FsaXplZFN0cmluZ3M7XG59XG5cbi8qKlxuICogU2VhcmNoIEFQSSByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlcXVlc3QgZXh0ZW5kcyBFeHBhbmRhYmxlUmVxdWVzdCB7XG4gIHNlYXJjaD86IFVzZXJTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggQVBJIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3BvbnNlIGV4dGVuZHMgRXhwYW5kYWJsZVJlc3BvbnNlIHtcbiAgbmV4dFJlc3VsdHM/OiBzdHJpbmc7XG4gIHRvdGFsPzogbnVtYmVyO1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXN1bHRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdHM8VD4ge1xuICBuZXh0UmVzdWx0cz86IHN0cmluZztcbiAgcmVzdWx0cz86IEFycmF5PFQ+O1xuICB0b3RhbD86IG51bWJlcjtcbiAgdG90YWxFcXVhbFRvQWN0dWFsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0UmVzcG9uc2Uge1xuICBzZWNyZXQ/OiBzdHJpbmc7XG4gIHNlY3JldEJhc2UzMkVuY29kZWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb24ge1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIHR5cGU/OiBTZWN1cmVHZW5lcmF0b3JUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gU2VjdXJlR2VuZXJhdG9yVHlwZSB7XG4gIHJhbmRvbURpZ2l0cyA9IFwicmFuZG9tRGlnaXRzXCIsXG4gIHJhbmRvbUJ5dGVzID0gXCJyYW5kb21CeXRlc1wiLFxuICByYW5kb21BbHBoYSA9IFwicmFuZG9tQWxwaGFcIixcbiAgcmFuZG9tQWxwaGFOdW1lcmljID0gXCJyYW5kb21BbHBoYU51bWVyaWNcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cmVJZGVudGl0eSB7XG4gIGJyZWFjaGVkUGFzc3dvcmRMYXN0Q2hlY2tlZEluc3RhbnQ/OiBudW1iZXI7XG4gIGJyZWFjaGVkUGFzc3dvcmRTdGF0dXM/OiBCcmVhY2hlZFBhc3N3b3JkU3RhdHVzO1xuICBjb25uZWN0b3JJZD86IFVVSUQ7XG4gIGVuY3J5cHRpb25TY2hlbWU/OiBzdHJpbmc7XG4gIGZhY3Rvcj86IG51bWJlcjtcbiAgaWQ/OiBVVUlEO1xuICBpZGVudGl0aWVzPzogQXJyYXk8VXNlcklkZW50aXR5PjtcbiAgbGFzdExvZ2luSW5zdGFudD86IG51bWJlcjtcbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHBhc3N3b3JkQ2hhbmdlUmVhc29uPzogQ2hhbmdlUGFzc3dvcmRSZWFzb247XG4gIHBhc3N3b3JkQ2hhbmdlUmVxdWlyZWQ/OiBib29sZWFuO1xuICBwYXNzd29yZExhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBzYWx0Pzogc3RyaW5nO1xuICB1bmlxdWVVc2VybmFtZT86IHN0cmluZztcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHVzZXJuYW1lU3RhdHVzPzogQ29udGVudFN0YXR1cztcbiAgdmVyaWZpZWQ/OiBib29sZWFuO1xuICB2ZXJpZmllZEluc3RhbnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBhbmRyZXdwYWlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxmU2VydmljZUZvcm1Db25maWd1cmF0aW9uIHtcbiAgcmVxdWlyZUN1cnJlbnRQYXNzd29yZE9uUGFzc3dvcmRDaGFuZ2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBiY2NBZGRyZXNzZXM/OiBBcnJheTxzdHJpbmc+O1xuICBjY0FkZHJlc3Nlcz86IEFycmF5PHN0cmluZz47XG4gIHByZWZlcnJlZExhbmd1YWdlcz86IEFycmF5PHN0cmluZz47XG4gIHJlcXVlc3REYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdG9BZGRyZXNzZXM/OiBBcnJheTxFbWFpbEFkZHJlc3M+O1xuICB1c2VySWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRSZXNwb25zZSB7XG4gIGFub255bW91c1Jlc3VsdHM/OiBSZWNvcmQ8c3RyaW5nLCBFbWFpbFRlbXBsYXRlRXJyb3JzPjtcbiAgcmVzdWx0cz86IFJlY29yZDxVVUlELCBFbWFpbFRlbXBsYXRlRXJyb3JzPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlRXJyb3JzIHtcbiAgcGFyc2VFcnJvcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByZW5kZXJFcnJvcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIFVzZWQgdG8gaW5kaWNhdGUgd2hpY2ggaWRlbnRpdHkgdHlwZSBhIHBhc3N3b3JkIFwicmVxdWVzdFwiIG1pZ2h0IGdvIHRvLiBJdCBjb3VsZCBiZVxuICogdXNlZCBmb3Igc2VuZCBzZXQgcGFzc3dvcmRzIG9yIHNlbmQgcGFzc3dvcmQgcmVzZXRzLlxuICovXG5leHBvcnQgZW51bSBTZW5kU2V0UGFzc3dvcmRJZGVudGl0eVR5cGUge1xuICBlbWFpbCA9IFwiZW1haWxcIixcbiAgcGhvbmUgPSBcInBob25lXCIsXG4gIGRvTm90U2VuZCA9IFwiZG9Ob3RTZW5kXCJcbn1cblxuLyoqXG4gKiBUaGVtZSBvYmplY3QgZm9yIHZhbHVlcyB1c2VkIGluIHRoZSBjc3MgdmFyaWFibGVzIGZvciBzaW1wbGUgdGhlbWVzLlxuICpcbiAqIEBhdXRob3IgTHlsZSBTY2hlbW1lcmxpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVUaGVtZVZhcmlhYmxlcyB7XG4gIGFsZXJ0QmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBhbGVydEZvbnRDb2xvcj86IHN0cmluZztcbiAgYmFja2dyb3VuZEltYWdlVVJMPzogc3RyaW5nO1xuICBiYWNrZ3JvdW5kU2l6ZT86IHN0cmluZztcbiAgYm9yZGVyUmFkaXVzPzogc3RyaW5nO1xuICBkZWxldGVCdXR0b25Db2xvcj86IHN0cmluZztcbiAgZGVsZXRlQnV0dG9uRm9jdXNDb2xvcj86IHN0cmluZztcbiAgZGVsZXRlQnV0dG9uVGV4dENvbG9yPzogc3RyaW5nO1xuICBkZWxldGVCdXR0b25UZXh0Rm9jdXNDb2xvcj86IHN0cmluZztcbiAgZXJyb3JGb250Q29sb3I/OiBzdHJpbmc7XG4gIGVycm9ySWNvbkNvbG9yPzogc3RyaW5nO1xuICBmb250Q29sb3I/OiBzdHJpbmc7XG4gIGZvbnRGYW1pbHk/OiBzdHJpbmc7XG4gIGZvb3RlckRpc3BsYXk/OiBib29sZWFuO1xuICBpY29uQmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBpY29uQ29sb3I/OiBzdHJpbmc7XG4gIGluZm9JY29uQ29sb3I/OiBzdHJpbmc7XG4gIGlucHV0QmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBpbnB1dEljb25Db2xvcj86IHN0cmluZztcbiAgaW5wdXRUZXh0Q29sb3I/OiBzdHJpbmc7XG4gIGxpbmtUZXh0Q29sb3I/OiBzdHJpbmc7XG4gIGxpbmtUZXh0Rm9jdXNDb2xvcj86IHN0cmluZztcbiAgbG9nb0ltYWdlU2l6ZT86IHN0cmluZztcbiAgbG9nb0ltYWdlVVJMPzogc3RyaW5nO1xuICBtb25vRm9udENvbG9yPzogc3RyaW5nO1xuICBtb25vRm9udEZhbWlseT86IHN0cmluZztcbiAgcGFnZUJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgcGFuZWxCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIHByaW1hcnlCdXR0b25Db2xvcj86IHN0cmluZztcbiAgcHJpbWFyeUJ1dHRvbkZvY3VzQ29sb3I/OiBzdHJpbmc7XG4gIHByaW1hcnlCdXR0b25UZXh0Q29sb3I/OiBzdHJpbmc7XG4gIHByaW1hcnlCdXR0b25UZXh0Rm9jdXNDb2xvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb255UFNOQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNvbnlQU04gZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbnlQU05JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8U29ueVBTTkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gU29ydCB7XG4gIGFzYyA9IFwiYXNjXCIsXG4gIGRlc2MgPSBcImRlc2NcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3J0RmllbGQge1xuICBtaXNzaW5nPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBvcmRlcj86IFNvcnQ7XG59XG5cbi8qKlxuICogVGhlIHB1YmxpYyBTdGF0dXMgQVBJIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXR1c1Jlc3BvbnNlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiB7XG59XG5cbi8qKlxuICogU3RlYW0gQVBJIG1vZGVzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gU3RlYW1BUElNb2RlIHtcbiAgUHVibGljID0gXCJQdWJsaWNcIixcbiAgUGFydG5lciA9IFwiUGFydG5lclwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlYW1BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGFwaU1vZGU/OiBTdGVhbUFQSU1vZGU7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHdlYkFQSUtleT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdGVhbSBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlYW1JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8U3RlYW1BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYXBpTW9kZT86IFN0ZWFtQVBJTW9kZTtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgd2ViQVBJS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhlbHBlciBpbnRlcmZhY2UgdGhhdCBpbmRpY2F0ZXMgYW4gaWRlbnRpdHkgcHJvdmlkZXIgY2FuIGJlIGZlZGVyYXRlZCB0byB1c2luZyB0aGUgSFRUUCBQT1NUIG1ldGhvZC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdXBwb3J0c1Bvc3RCaW5kaW5ncyB7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29uZmlndXJhdGlvbiB7XG4gIGF1ZGl0TG9nQ29uZmlndXJhdGlvbj86IEF1ZGl0TG9nQ29uZmlndXJhdGlvbjtcbiAgY29yc0NvbmZpZ3VyYXRpb24/OiBDT1JTQ29uZmlndXJhdGlvbjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGV2ZW50TG9nQ29uZmlndXJhdGlvbj86IEV2ZW50TG9nQ29uZmlndXJhdGlvbjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvZ2luUmVjb3JkQ29uZmlndXJhdGlvbj86IExvZ2luUmVjb3JkQ29uZmlndXJhdGlvbjtcbiAgcmVwb3J0VGltZXpvbmU/OiBzdHJpbmc7XG4gIHRydXN0ZWRQcm94eUNvbmZpZ3VyYXRpb24/OiBTeXN0ZW1UcnVzdGVkUHJveHlDb25maWd1cmF0aW9uO1xuICB1aUNvbmZpZ3VyYXRpb24/OiBVSUNvbmZpZ3VyYXRpb247XG4gIHVzYWdlRGF0YUNvbmZpZ3VyYXRpb24/OiBVc2FnZURhdGFDb25maWd1cmF0aW9uO1xuICB3ZWJob29rRXZlbnRMb2dDb25maWd1cmF0aW9uPzogV2ViaG9va0V2ZW50TG9nQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0NvbmZpZ3VyYXRpb24ge1xuICBkZWxldGU/OiBEZWxldGVDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbnVtYmVyT2ZEYXlzVG9SZXRhaW4/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dDb25maWd1cmF0aW9uIHtcbiAgbnVtYmVyVG9SZXRhaW4/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZWNvcmRDb25maWd1cmF0aW9uIHtcbiAgZGVsZXRlPzogRGVsZXRlQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVSUNvbmZpZ3VyYXRpb24ge1xuICBoZWFkZXJDb2xvcj86IHN0cmluZztcbiAgbG9nb1VSTD86IHN0cmluZztcbiAgbWVudUZvbnRDb2xvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IGZvciB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gQVBJLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0IHtcbiAgc3lzdGVtQ29uZmlndXJhdGlvbj86IFN5c3RlbUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiBBUEkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlIHtcbiAgc3lzdGVtQ29uZmlndXJhdGlvbj86IFN5c3RlbUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbUxvZ3NFeHBvcnRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV4cG9ydFJlcXVlc3Qge1xuICBpbmNsdWRlQXJjaGl2ZWQ/OiBib29sZWFuO1xuICBsYXN0TkJ5dGVzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeXN0ZW1UcnVzdGVkUHJveHlDb25maWd1cmF0aW9uIHtcbiAgdHJ1c3RlZD86IEFycmF5PHN0cmluZz47XG4gIHRydXN0UG9saWN5PzogU3lzdGVtVHJ1c3RlZFByb3h5Q29uZmlndXJhdGlvblBvbGljeTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFN5c3RlbVRydXN0ZWRQcm94eUNvbmZpZ3VyYXRpb25Qb2xpY3kge1xuICBBbGwgPSBcIkFsbFwiLFxuICBPbmx5Q29uZmlndXJlZCA9IFwiT25seUNvbmZpZ3VyZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnQge1xuICBhY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbj86IFRlbmFudEFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uO1xuICBjYXB0Y2hhQ29uZmlndXJhdGlvbj86IFRlbmFudENhcHRjaGFDb25maWd1cmF0aW9uO1xuICBjb25maWd1cmVkPzogYm9vbGVhbjtcbiAgY29ubmVjdG9yUG9saWNpZXM/OiBBcnJheTxDb25uZWN0b3JQb2xpY3k+O1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW1haWxDb25maWd1cmF0aW9uPzogRW1haWxDb25maWd1cmF0aW9uO1xuICBldmVudENvbmZpZ3VyYXRpb24/OiBFdmVudENvbmZpZ3VyYXRpb247XG4gIGV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb24/OiBFeHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uO1xuICBmYWlsZWRBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24/OiBGYWlsZWRBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb247XG4gIGZhbWlseUNvbmZpZ3VyYXRpb24/OiBGYW1pbHlDb25maWd1cmF0aW9uO1xuICBmb3JtQ29uZmlndXJhdGlvbj86IFRlbmFudEZvcm1Db25maWd1cmF0aW9uO1xuICBodHRwU2Vzc2lvbk1heEluYWN0aXZlSW50ZXJ2YWw/OiBudW1iZXI7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBqd3RDb25maWd1cmF0aW9uPzogSldUQ29uZmlndXJhdGlvbjtcbiAgbGFtYmRhQ29uZmlndXJhdGlvbj86IFRlbmFudExhbWJkYUNvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2dpbkNvbmZpZ3VyYXRpb24/OiBUZW5hbnRMb2dpbkNvbmZpZ3VyYXRpb247XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgbWF4aW11bVBhc3N3b3JkQWdlPzogTWF4aW11bVBhc3N3b3JkQWdlO1xuICBtaW5pbXVtUGFzc3dvcmRBZ2U/OiBNaW5pbXVtUGFzc3dvcmRBZ2U7XG4gIG11bHRpRmFjdG9yQ29uZmlndXJhdGlvbj86IFRlbmFudE11bHRpRmFjdG9yQ29uZmlndXJhdGlvbjtcbiAgbmFtZT86IHN0cmluZztcbiAgb2F1dGhDb25maWd1cmF0aW9uPzogVGVuYW50T0F1dGgyQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFBhc3N3b3JkRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb247XG4gIHBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzPzogUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM7XG4gIHBob25lQ29uZmlndXJhdGlvbj86IFRlbmFudFBob25lQ29uZmlndXJhdGlvbjtcbiAgcmF0ZUxpbWl0Q29uZmlndXJhdGlvbj86IFRlbmFudFJhdGVMaW1pdENvbmZpZ3VyYXRpb247XG4gIHJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24/OiBUZW5hbnRSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uO1xuICBzY2ltU2VydmVyQ29uZmlndXJhdGlvbj86IFRlbmFudFNDSU1TZXJ2ZXJDb25maWd1cmF0aW9uO1xuICBzc29Db25maWd1cmF0aW9uPzogVGVuYW50U1NPQ29uZmlndXJhdGlvbjtcbiAgc3RhdGU/OiBPYmplY3RTdGF0ZTtcbiAgdGhlbWVJZD86IFVVSUQ7XG4gIHVzZXJEZWxldGVQb2xpY3k/OiBUZW5hbnRVc2VyRGVsZXRlUG9saWN5O1xuICB1c2VybmFtZUNvbmZpZ3VyYXRpb24/OiBUZW5hbnRVc2VybmFtZUNvbmZpZ3VyYXRpb247XG4gIHdlYkF1dGhuQ29uZmlndXJhdGlvbj86IFRlbmFudFdlYkF1dGhuQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRPQXV0aDJDb25maWd1cmF0aW9uIHtcbiAgY2xpZW50Q3JlZGVudGlhbHNBY2Nlc3NUb2tlblBvcHVsYXRlTGFtYmRhSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50QWNjZXNzQ29udHJvbENvbmZpZ3VyYXRpb24ge1xuICB1aUlQQWNjZXNzQ29udHJvbExpc3RJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Q2FwdGNoYUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgY2FwdGNoYU1ldGhvZD86IENhcHRjaGFNZXRob2Q7XG4gIHNlY3JldEtleT86IHN0cmluZztcbiAgc2l0ZUtleT86IHN0cmluZztcbiAgdGhyZXNob2xkPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBUZW5hbnQgQVBJIHRvIGRlbGV0ZSBhIHRlbmFudCByYXRoZXIgdGhhbiB1c2luZyB0aGUgVVJMIHBhcmFtZXRlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50RGVsZXRlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhc3luYz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudEZvcm1Db25maWd1cmF0aW9uIHtcbiAgYWRtaW5Vc2VyRm9ybUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFJvYiBEYXZpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuICBsb2dpblZhbGlkYXRpb25JZD86IFVVSUQ7XG4gIHNjaW1FbnRlcnByaXNlVXNlclJlcXVlc3RDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1FbnRlcnByaXNlVXNlclJlc3BvbnNlQ29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltR3JvdXBSZXF1ZXN0Q29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltR3JvdXBSZXNwb25zZUNvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbVVzZXJSZXF1ZXN0Q29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltVXNlclJlc3BvbnNlQ29udmVydGVySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRMb2dpbkNvbmZpZ3VyYXRpb24ge1xuICByZXF1aXJlQXV0aGVudGljYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWlrZXkgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50TXVsdGlGYWN0b3JDb25maWd1cmF0aW9uIHtcbiAgYXV0aGVudGljYXRvcj86IE11bHRpRmFjdG9yQXV0aGVudGljYXRvck1ldGhvZDtcbiAgZW1haWw/OiBNdWx0aUZhY3RvckVtYWlsTWV0aG9kO1xuICBsb2dpblBvbGljeT86IE11bHRpRmFjdG9yTG9naW5Qb2xpY3k7XG4gIHNtcz86IE11bHRpRmFjdG9yU01TTWV0aG9kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmFjdG9yQXV0aGVudGljYXRvck1ldGhvZCBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhbGdvcml0aG0/OiBUT1RQQWxnb3JpdGhtO1xuICBjb2RlTGVuZ3RoPzogbnVtYmVyO1xuICB0aW1lU3RlcD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvckVtYWlsTWV0aG9kIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHRlbXBsYXRlSWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmFjdG9yU01TTWV0aG9kIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG1lc3NlbmdlcklkPzogVVVJRDtcbiAgdGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogSG9sZCB0ZW5hbnQgcGhvbmUgY29uZmlndXJhdGlvbiBmb3IgcGFzc3dvcmRsZXNzIGFuZCB2ZXJpZmljYXRpb24gY2FzZXMuXG4gKlxuICogQGF1dGhvciBCcmFkeSBXaWVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UGhvbmVDb25maWd1cmF0aW9uIHtcbiAgZm9yZ290UGFzc3dvcmRUZW1wbGF0ZUlkPzogVVVJRDtcbiAgaWRlbnRpdHlVcGRhdGVUZW1wbGF0ZUlkPzogVVVJRDtcbiAgaW1wbGljaXRQaG9uZVZlcmlmaWNhdGlvbkFsbG93ZWQ/OiBib29sZWFuO1xuICBsb2dpbklkSW5Vc2VPbkNyZWF0ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbklkSW5Vc2VPblVwZGF0ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbk5ld0RldmljZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpblN1c3BpY2lvdXNUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbWVzc2VuZ2VySWQ/OiBVVUlEO1xuICBwYXNzd29yZGxlc3NUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRSZXNldFN1Y2Nlc3NUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRVcGRhdGVUZW1wbGF0ZUlkPzogVVVJRDtcbiAgc2V0UGFzc3dvcmRUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kQWRkVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHR3b0ZhY3Rvck1ldGhvZFJlbW92ZVRlbXBsYXRlSWQ/OiBVVUlEO1xuICB1bnZlcmlmaWVkPzogUGhvbmVVbnZlcmlmaWVkT3B0aW9ucztcbiAgdmVyaWZpY2F0aW9uQ29tcGxldGVUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdmVyaWZpY2F0aW9uU3RyYXRlZ3k/OiBWZXJpZmljYXRpb25TdHJhdGVneTtcbiAgdmVyaWZpY2F0aW9uVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHZlcmlmeVBob25lTnVtYmVyPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UmF0ZUxpbWl0Q29uZmlndXJhdGlvbiB7XG4gIGZhaWxlZExvZ2luPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgZm9yZ290UGFzc3dvcmQ/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kRW1haWxWZXJpZmljYXRpb24/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kUGFzc3dvcmRsZXNzPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgc2VuZFBhc3N3b3JkbGVzc1Bob25lPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgc2VuZFBob25lVmVyaWZpY2F0aW9uPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgc2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbj86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIHNlbmRUd29GYWN0b3I/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYmxvY2tlZERvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIHNvdXJjZVRlbmFudElkPzogVVVJRDtcbiAgdGVuYW50PzogVGVuYW50O1xuICB3ZWJob29rSWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFJlc3BvbnNlIHtcbiAgdGVuYW50PzogVGVuYW50O1xuICB0ZW5hbnRzPzogQXJyYXk8VGVuYW50Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFJvYiBEYXZpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFNDSU1TZXJ2ZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGNsaWVudEVudGl0eVR5cGVJZD86IFVVSUQ7XG4gIHNjaGVtYXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBzZXJ2ZXJFbnRpdHlUeXBlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFNTT0NvbmZpZ3VyYXRpb24ge1xuICBhbGxvd0FjY2Vzc1Rva2VuQm9vdHN0cmFwPzogYm9vbGVhbjtcbiAgZGV2aWNlVHJ1c3RUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgVGVuYW50c1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgVGVuYW50c1xuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBUZW5hbnRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBUZW5hbnQgc2VhcmNoIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBNYXJrIE1hbmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50U2VhcmNoUmVzcG9uc2Uge1xuICB0ZW5hbnRzPzogQXJyYXk8VGVuYW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFVudmVyaWZpZWRDb25maWd1cmF0aW9uIHtcbiAgZW1haWw/OiBVbnZlcmlmaWVkQmVoYXZpb3I7XG4gIHdoZW5HYXRlZD86IFJlZ2lzdHJhdGlvblVudmVyaWZpZWRPcHRpb25zO1xufVxuXG4vKipcbiAqIEEgVGVuYW50LWxldmVsIHBvbGljeSBmb3IgZGVsZXRpbmcgVXNlcnMuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRVc2VyRGVsZXRlUG9saWN5IHtcbiAgdW52ZXJpZmllZD86IFRpbWVCYXNlZERlbGV0ZVBvbGljeTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50VXNlcm5hbWVDb25maWd1cmF0aW9uIHtcbiAgdW5pcXVlPzogVW5pcXVlVXNlcm5hbWVDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaXF1ZVVzZXJuYW1lQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBudW1iZXJPZkRpZ2l0cz86IG51bWJlcjtcbiAgc2VwYXJhdG9yPzogc3RyaW5nO1xuICBzdHJhdGVneT86IFVuaXF1ZVVzZXJuYW1lU3RyYXRlZ3k7XG59XG5cbmV4cG9ydCBlbnVtIFVuaXF1ZVVzZXJuYW1lU3RyYXRlZ3kge1xuICBBbHdheXMgPSBcIkFsd2F5c1wiLFxuICBPbkNvbGxpc2lvbiA9IFwiT25Db2xsaXNpb25cIlxufVxuXG4vKipcbiAqIFRlbmFudC1sZXZlbCBjb25maWd1cmF0aW9uIGZvciBXZWJBdXRoblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50V2ViQXV0aG5Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGJvb3RzdHJhcFdvcmtmbG93PzogVGVuYW50V2ViQXV0aG5Xb3JrZmxvd0NvbmZpZ3VyYXRpb247XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgcmVhdXRoZW50aWNhdGlvbldvcmtmbG93PzogVGVuYW50V2ViQXV0aG5Xb3JrZmxvd0NvbmZpZ3VyYXRpb247XG4gIHJlbHlpbmdQYXJ0eUlkPzogc3RyaW5nO1xuICByZWx5aW5nUGFydHlOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50V2ViQXV0aG5Xb3JrZmxvd0NvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYXV0aGVudGljYXRvckF0dGFjaG1lbnRQcmVmZXJlbmNlPzogQXV0aGVudGljYXRvckF0dGFjaG1lbnRQcmVmZXJlbmNlO1xuICB1c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ/OiBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50YWJsZSB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWZhdWx0TWVzc2FnZXM/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvY2FsaXplZE1lc3NhZ2VzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbmFtZT86IHN0cmluZztcbiAgc3R5bGVzaGVldD86IHN0cmluZztcbiAgdGVtcGxhdGVzPzogVGVtcGxhdGVzO1xuICB0eXBlPzogVGhlbWVUeXBlO1xuICB2YXJpYWJsZXM/OiBTaW1wbGVUaGVtZVZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZXMge1xuICBhY2NvdW50RWRpdD86IHN0cmluZztcbiAgYWNjb3VudEluZGV4Pzogc3RyaW5nO1xuICBhY2NvdW50VHdvRmFjdG9yRGlzYWJsZT86IHN0cmluZztcbiAgYWNjb3VudFR3b0ZhY3RvckVuYWJsZT86IHN0cmluZztcbiAgYWNjb3VudFR3b0ZhY3RvckluZGV4Pzogc3RyaW5nO1xuICBhY2NvdW50V2ViQXV0aG5BZGQ/OiBzdHJpbmc7XG4gIGFjY291bnRXZWJBdXRobkRlbGV0ZT86IHN0cmluZztcbiAgYWNjb3VudFdlYkF1dGhuSW5kZXg/OiBzdHJpbmc7XG4gIGNvbmZpcm1hdGlvblJlcXVpcmVkPzogc3RyaW5nO1xuICBlbWFpbENvbXBsZXRlPzogc3RyaW5nO1xuICBlbWFpbFNlbmQ/OiBzdHJpbmc7XG4gIGVtYWlsU2VudD86IHN0cmluZztcbiAgZW1haWxWZXJpZmljYXRpb25SZXF1aXJlZD86IHN0cmluZztcbiAgZW1haWxWZXJpZnk/OiBzdHJpbmc7XG4gIGhlbHBlcnM/OiBzdHJpbmc7XG4gIGluZGV4Pzogc3RyaW5nO1xuICBvYXV0aDJBdXRob3JpemU/OiBzdHJpbmc7XG4gIG9hdXRoMkF1dGhvcml6ZWROb3RSZWdpc3RlcmVkPzogc3RyaW5nO1xuICBvYXV0aDJDaGlsZFJlZ2lzdHJhdGlvbk5vdEFsbG93ZWQ/OiBzdHJpbmc7XG4gIG9hdXRoMkNoaWxkUmVnaXN0cmF0aW9uTm90QWxsb3dlZENvbXBsZXRlPzogc3RyaW5nO1xuICBvYXV0aDJDb21wbGV0ZVJlZ2lzdHJhdGlvbj86IHN0cmluZztcbiAgb2F1dGgyQ29uc2VudD86IHN0cmluZztcbiAgb2F1dGgyRGV2aWNlPzogc3RyaW5nO1xuICBvYXV0aDJEZXZpY2VDb21wbGV0ZT86IHN0cmluZztcbiAgb2F1dGgyRXJyb3I/OiBzdHJpbmc7XG4gIG9hdXRoMkxvZ291dD86IHN0cmluZztcbiAgb2F1dGgyUGFzc3dvcmRsZXNzPzogc3RyaW5nO1xuICBvYXV0aDJSZWdpc3Rlcj86IHN0cmluZztcbiAgb2F1dGgyU3RhcnRJZFBMaW5rPzogc3RyaW5nO1xuICBvYXV0aDJUd29GYWN0b3I/OiBzdHJpbmc7XG4gIG9hdXRoMlR3b0ZhY3RvckVuYWJsZT86IHN0cmluZztcbiAgb2F1dGgyVHdvRmFjdG9yRW5hYmxlQ29tcGxldGU/OiBzdHJpbmc7XG4gIG9hdXRoMlR3b0ZhY3Rvck1ldGhvZHM/OiBzdHJpbmc7XG4gIG9hdXRoMldhaXQ/OiBzdHJpbmc7XG4gIG9hdXRoMldlYkF1dGhuPzogc3RyaW5nO1xuICBvYXV0aDJXZWJBdXRoblJlYXV0aD86IHN0cmluZztcbiAgb2F1dGgyV2ViQXV0aG5SZWF1dGhFbmFibGU/OiBzdHJpbmc7XG4gIHBhc3N3b3JkQ2hhbmdlPzogc3RyaW5nO1xuICBwYXNzd29yZENvbXBsZXRlPzogc3RyaW5nO1xuICBwYXNzd29yZEZvcmdvdD86IHN0cmluZztcbiAgcGFzc3dvcmRTZW50Pzogc3RyaW5nO1xuICBwaG9uZUNvbXBsZXRlPzogc3RyaW5nO1xuICBwaG9uZVNlbnQ/OiBzdHJpbmc7XG4gIHBob25lVmVyaWZpY2F0aW9uUmVxdWlyZWQ/OiBzdHJpbmc7XG4gIHBob25lVmVyaWZ5Pzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25Db21wbGV0ZT86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uU2VuZD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uU2VudD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uUmVxdWlyZWQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblZlcmlmeT86IHN0cmluZztcbiAgc2FtbHYyTG9nb3V0Pzogc3RyaW5nO1xuICB1bmF1dGhvcml6ZWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlbWUgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVSZXF1ZXN0IHtcbiAgc291cmNlVGhlbWVJZD86IFVVSUQ7XG4gIHRoZW1lPzogVGhlbWU7XG59XG5cbi8qKlxuICogVGhlbWUgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lUmVzcG9uc2Uge1xuICB0aGVtZT86IFRoZW1lO1xuICB0aGVtZXM/OiBBcnJheTxUaGVtZT47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciB0aGVtZXNcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IFRoZW1lVHlwZTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgVGhlbWVzLlxuICpcbiAqIEBhdXRob3IgTWFyayBNYW5lc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IFRoZW1lU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3BvbnNlIGZvciBUaGVtZXNcbiAqXG4gKiBAYXV0aG9yIE1hcmsgTWFuZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZVNlYXJjaFJlc3BvbnNlIHtcbiAgdGhlbWVzPzogQXJyYXk8VGhlbWU+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gVGhlbWVUeXBlIHtcbiAgYWR2YW5jZWQgPSBcImFkdmFuY2VkXCIsXG4gIHNpbXBsZSA9IFwic2ltcGxlXCJcbn1cblxuLyoqXG4gKiBBIHBvbGljeSBmb3IgZGVsZXRpbmcgVXNlcnMgYmFzZWQgdXBvbiBzb21lIGV4dGVybmFsIGNyaXRlcmlhLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGltZUJhc2VkRGVsZXRlUG9saWN5IGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGVuYWJsZWRJbnN0YW50PzogbnVtYmVyO1xuICBudW1iZXJPZkRheXNUb1JldGFpbj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiA8dWw+XG4gKiA8bGk+QmVhcmVyIFRva2VuIHR5cGUgYXMgZGVmaW5lZCBieSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NTBcIj5SRkMgNjc1MDwvYT4uPC9saT5cbiAqIDxsaT5NQUMgVG9rZW4gdHlwZSBhcyByZWZlcmVuY2VkIGJ5IDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc0OVwiPlJGQyA2NzQ5PC9hPiBhbmRcbiAqIDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1vYXV0aC12Mi1odHRwLW1hYy0wNVwiPlxuICogRHJhZnQgUkZDIG9uIE9BdXRoIDIuMCBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGUgKE1BQykgVG9rZW5zPC9hPlxuICogPC9saT5cbiAqIDwvdWw+XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBUb2tlblR5cGUge1xuICBCZWFyZXIgPSBcIkJlYXJlclwiLFxuICBNQUMgPSBcIk1BQ1wiXG59XG5cbi8qKlxuICogVGhlIHJlc3BvbnNlIGZyb20gdGhlIHRvdGFsIHJlcG9ydC4gVGhpcyByZXBvcnQgc3RvcmVzIHRoZSB0b3RhbCBudW1iZXJzIGZvciBlYWNoIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvdGFsc1JlcG9ydFJlc3BvbnNlIHtcbiAgYXBwbGljYXRpb25Ub3RhbHM/OiBSZWNvcmQ8VVVJRCwgVG90YWxzPjtcbiAgZ2xvYmFsUmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbiAgdG90YWxHbG9iYWxSZWdpc3RyYXRpb25zPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvdGFscyB7XG4gIGxvZ2lucz86IG51bWJlcjtcbiAgcmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbiAgdG90YWxSZWdpc3RyYXRpb25zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSB0cmFuc2FjdGlvbiB0eXBlcyBmb3IgV2ViaG9va3MgYW5kIG90aGVyIGV2ZW50IHN5c3RlbXMgd2l0aGluIEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uVHlwZSB7XG4gIE5vbmUgPSBcIk5vbmVcIixcbiAgQW55ID0gXCJBbnlcIixcbiAgU2ltcGxlTWFqb3JpdHkgPSBcIlNpbXBsZU1ham9yaXR5XCIsXG4gIFN1cGVyTWFqb3JpdHkgPSBcIlN1cGVyTWFqb3JpdHlcIixcbiAgQWJzb2x1dGVNYWpvcml0eSA9IFwiQWJzb2x1dGVNYWpvcml0eVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2lsaW9NZXNzZW5nZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBhY2NvdW50U0lEPzogc3RyaW5nO1xuICBhdXRoVG9rZW4/OiBzdHJpbmc7XG4gIGZyb21QaG9uZU51bWJlcj86IHN0cmluZztcbiAgbWVzc2FnaW5nU2VydmljZVNpZD86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXRjaEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUd2l0Y2ggZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXRjaElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxUd2l0Y2hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdHRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY29uc3VtZXJLZXk/OiBzdHJpbmc7XG4gIGNvbnN1bWVyU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFR3aXR0ZXIgc29jaWFsIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2l0dGVySWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFR3aXR0ZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY29uc3VtZXJLZXk/OiBzdHJpbmc7XG4gIGNvbnN1bWVyU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvckRpc2FibGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjb2RlPzogc3RyaW5nO1xuICBtZXRob2RJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yRW5hYmxlRGlzYWJsZVNlbmRSZXF1ZXN0IHtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG1ldGhvZD86IHN0cmluZztcbiAgbWV0aG9kSWQ/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JMb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlTG9naW5SZXF1ZXN0IHtcbiAgY29kZT86IHN0cmluZztcbiAgdHJ1c3RDb21wdXRlcj86IGJvb2xlYW47XG4gIHR3b0ZhY3RvcklkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JNZXRob2Qge1xuICBhdXRoZW50aWNhdG9yPzogQXV0aGVudGljYXRvckNvbmZpZ3VyYXRpb247XG4gIGVtYWlsPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgbGFzdFVzZWQ/OiBib29sZWFuO1xuICBtZXRob2Q/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xuICBzZWNyZXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlIHtcbiAgcmVjb3ZlcnlDb2Rlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRvcklkPzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xuICBzZWNyZXRCYXNlMzJFbmNvZGVkPzogc3RyaW5nO1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yUmVzcG9uc2Uge1xuICBjb2RlPzogc3RyaW5nO1xuICByZWNvdmVyeUNvZGVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU2VuZFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG1ldGhvZD86IHN0cmluZztcbiAgbWV0aG9kSWQ/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU3RhcnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIGxvZ2luSWRUeXBlcz86IEFycmF5PHN0cmluZz47XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdHJ1c3RDaGFsbGVuZ2U/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclN0YXJ0UmVzcG9uc2Uge1xuICBjb2RlPzogc3RyaW5nO1xuICBtZXRob2RzPzogQXJyYXk8VHdvRmFjdG9yTWV0aG9kPjtcbiAgdHdvRmFjdG9ySWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlIHtcbiAgdHJ1c3RzPzogQXJyYXk8VHdvRmFjdG9yVHJ1c3Q+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/OiBBcnJheTxVc2VyQ29uc2VudD47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZWQgRXZlbnQuXG4gKiA8cD5cbiAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHVzZXIuY3JlYXRlIGV2ZW50IGluIHRoYXQgaXQgd2lsbCBiZSBzZW50IGFmdGVyIHRoZSB1c2VyIGhhcyBiZWVuIGNyZWF0ZWQuIFRoaXMgZXZlbnQgY2Fubm90IGJlIG1hZGUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNyZWF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQ3JlYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBEZWFjdGl2YXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWFjdGl2YXRlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pIHRoYXQgaXMgdXNlZCBmb3IgYWxsIHVzZXIgbW9kaWZpY2F0aW9ucyAoY3JlYXRlLCB1cGRhdGUsXG4gKiBkZWxldGUpLlxuICogPHA+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+O1xufVxuXG4vKipcbiAqIE1vZGVsIGEgdXNlciBldmVudCB3aGVuIGEgdHdvLWZhY3RvciBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclR3b0ZhY3Rvck1ldGhvZEFkZEV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIG1ldGhvZD86IFR3b0ZhY3Rvck1ldGhvZDtcbn1cblxuLyoqXG4gKiBNb2RlbCBhIHVzZXIgZXZlbnQgd2hlbiBhIHR3by1mYWN0b3IgbWV0aG9kIGhhcyBiZWVuIGFkZGVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVHdvRmFjdG9yTWV0aG9kUmVtb3ZlRXZlbnQgZXh0ZW5kcyBCYXNlVXNlckV2ZW50IHtcbiAgbWV0aG9kPzogVHdvRmFjdG9yTWV0aG9kO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBVcGRhdGUgRXZlbnQgb25jZSBpdCBpcyBjb21wbGV0ZWQuIFRoaXMgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJVcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZVVzZXJFdmVudCB7XG4gIG9yaWdpbmFsPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VVc2VyRXZlbnQge1xuICBvcmlnaW5hbD86IFVzZXI7XG59XG5cbi8qKlxuICogVXNlZCB0byBleHByZXNzIHdoZXRoZXIgdGhlIFJlbHlpbmcgUGFydHkgcmVxdWlyZXMgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi0yLyN1c2VyLXZlcmlmaWNhdGlvblwiPnVzZXIgdmVyaWZpY2F0aW9uPC9hPiBmb3IgdGhlXG4gKiBjdXJyZW50IG9wZXJhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQge1xuICByZXF1aXJlZCA9IFwicmVxdWlyZWRcIixcbiAgcHJlZmVycmVkID0gXCJwcmVmZXJyZWRcIixcbiAgZGlzY291cmFnZWQgPSBcImRpc2NvdXJhZ2VkXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlcmluZm9SZXNwb25zZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4ge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0ZVJlc3BvbnNlIHtcbiAgand0PzogSldUO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gVmVyaWZpY2F0aW9uU3RyYXRlZ3kge1xuICBDbGlja2FibGVMaW5rID0gXCJDbGlja2FibGVMaW5rXCIsXG4gIEZvcm1GaWVsZCA9IFwiRm9ybUZpZWxkXCJcbn1cblxuLyoqXG4gKiBWZXJpZnkgQ29tcGxldGUgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUNvbXBsZXRlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVmVyaWZ5IENvbXBsZXRlIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5Q29tcGxldGVSZXNwb25zZSB7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5RW1haWxSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xuICB2ZXJpZmljYXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5RW1haWxSZXNwb25zZSB7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5UmVnaXN0cmF0aW9uUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlIHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIElkZW50aXR5IHZlcmlmeSByZXF1ZXN0LiBVc2VkIHRvIGFkbWluaXN0cmF0aXZlbHkgdmVyaWZ5IGFuIGlkZW50aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgbG9naW5JZD86IHN0cmluZztcbiAgbG9naW5JZFR5cGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVmVyaWZ5IFNlbmQgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVNlbmRSZXF1ZXN0IHtcbiAgdmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmFkeSBXaWVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5U3RhcnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIGxvZ2luSWRUeXBlPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHZlcmlmaWNhdGlvblN0cmF0ZWd5PzogVmVyaWZpY2F0aW9uU3RyYXRlZ3k7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmFkeSBXaWVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5U3RhcnRSZXNwb25zZSB7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvblJlc3BvbnNlIHtcbiAgdmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIGNvbXBsZXRpbmcgV2ViQXV0aG4gYXNzZXJ0aW9uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkFzc2VydFJlc3BvbnNlIHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuQ3JlZGVudGlhbDtcbn1cblxuLyoqXG4gKiBUaGUgPGk+YXV0aGVudGljYXRvcidzPC9pPiByZXNwb25zZSBmb3IgdGhlIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255IGluIGl0cyBlbmNvZGVkIGZvcm1hdFxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5BdXRoZW50aWNhdG9yQXV0aGVudGljYXRpb25SZXNwb25zZSB7XG4gIGF1dGhlbnRpY2F0b3JEYXRhPzogc3RyaW5nO1xuICBjbGllbnREYXRhSlNPTj86IHN0cmluZztcbiAgc2lnbmF0dXJlPzogc3RyaW5nO1xuICB1c2VySGFuZGxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSA8aT5hdXRoZW50aWNhdG9yJ3M8L2k+IHJlc3BvbnNlIGZvciB0aGUgcmVnaXN0cmF0aW9uIGNlcmVtb255IGluIGl0cyBlbmNvZGVkIGZvcm1hdFxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5BdXRoZW50aWNhdG9yUmVnaXN0cmF0aW9uUmVzcG9uc2Uge1xuICBhdHRlc3RhdGlvbk9iamVjdD86IHN0cmluZztcbiAgY2xpZW50RGF0YUpTT04/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBVc2VyJ3MgV2ViQXV0aG5DcmVkZW50aWFsLiBDb250YWlucyBhbGwgZGF0YSByZXF1aXJlZCB0byBjb21wbGV0ZSBXZWJBdXRobiBhdXRoZW50aWNhdGlvbiBjZXJlbW9uaWVzLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5DcmVkZW50aWFsIHtcbiAgYWxnb3JpdGhtPzogQ29zZUFsZ29yaXRobUlkZW50aWZpZXI7XG4gIGF0dGVzdGF0aW9uVHlwZT86IEF0dGVzdGF0aW9uVHlwZTtcbiAgYXV0aGVudGljYXRvclN1cHBvcnRzVXNlclZlcmlmaWNhdGlvbj86IGJvb2xlYW47XG4gIGNyZWRlbnRpYWxJZD86IHN0cmluZztcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRpc2NvdmVyYWJsZT86IGJvb2xlYW47XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVc2VJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gIHJlbHlpbmdQYXJ0eUlkPzogc3RyaW5nO1xuICBzaWduQ291bnQ/OiBudW1iZXI7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdHJhbnNwb3J0cz86IEFycmF5PHN0cmluZz47XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCB0byBpbXBvcnQgYW4gZXhpc3RpbmcgV2ViQXV0aG4gY3JlZGVudGlhbChzKVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5DcmVkZW50aWFsSW1wb3J0UmVxdWVzdCB7XG4gIGNyZWRlbnRpYWxzPzogQXJyYXk8V2ViQXV0aG5DcmVkZW50aWFsPjtcbiAgdmFsaWRhdGVEYkNvbnN0cmFpbnRzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBXZWJBdXRobiBDcmVkZW50aWFsIEFQSSByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5DcmVkZW50aWFsUmVzcG9uc2Uge1xuICBjcmVkZW50aWFsPzogV2ViQXV0aG5DcmVkZW50aWFsO1xuICBjcmVkZW50aWFscz86IEFycmF5PFdlYkF1dGhuQ3JlZGVudGlhbD47XG59XG5cbi8qKlxuICogQ29udGFpbnMgZXh0ZW5zaW9uIG91dHB1dCBmb3IgcmVxdWVzdGVkIGV4dGVuc2lvbnMgZHVyaW5nIGEgV2ViQXV0aG4gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMge1xuICBjcmVkUHJvcHM/OiBDcmVkZW50aWFsUHJvcGVydGllc091dHB1dDtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHRvIGNvbXBsZXRlIHRoZSBXZWJBdXRobiByZWdpc3RyYXRpb24gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGNyZWRlbnRpYWw/OiBXZWJBdXRoblB1YmxpY0tleUF1dGhlbnRpY2F0aW9uUmVxdWVzdDtcbiAgb3JpZ2luPzogc3RyaW5nO1xuICBycElkPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgdG8gYXV0aGVudGljYXRlIHdpdGggV2ViQXV0aG5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuUHVibGljS2V5QXV0aGVudGljYXRpb25SZXF1ZXN0IHtcbiAgY2xpZW50RXh0ZW5zaW9uUmVzdWx0cz86IFdlYkF1dGhuRXh0ZW5zaW9uc0NsaWVudE91dHB1dHM7XG4gIGlkPzogc3RyaW5nO1xuICByZXNwb25zZT86IFdlYkF1dGhuQXV0aGVudGljYXRvckF1dGhlbnRpY2F0aW9uUmVzcG9uc2U7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCB0byByZWdpc3RlciBhIG5ldyBwdWJsaWMga2V5IHdpdGggV2ViQXV0aG5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuUHVibGljS2V5UmVnaXN0cmF0aW9uUmVxdWVzdCB7XG4gIGNsaWVudEV4dGVuc2lvblJlc3VsdHM/OiBXZWJBdXRobkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzO1xuICBpZD86IHN0cmluZztcbiAgcmVzcG9uc2U/OiBXZWJBdXRobkF1dGhlbnRpY2F0b3JSZWdpc3RyYXRpb25SZXNwb25zZTtcbiAgcnBJZD86IHN0cmluZztcbiAgdHJhbnNwb3J0cz86IEFycmF5PHN0cmluZz47XG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCB0byBjb21wbGV0ZSB0aGUgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255IGZvciBhIG5ldyBjcmVkZW50aWFsLC5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlcXVlc3Qge1xuICBjcmVkZW50aWFsPzogV2ViQXV0aG5QdWJsaWNLZXlSZWdpc3RyYXRpb25SZXF1ZXN0O1xuICBvcmlnaW4/OiBzdHJpbmc7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBjb21wbGV0aW5nIFdlYkF1dGhuIGNyZWRlbnRpYWwgcmVnaXN0cmF0aW9uIG9yIGFzc2VydGlvblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5SZWdpc3RlckNvbXBsZXRlUmVzcG9uc2Uge1xuICBjcmVkZW50aWFsPzogV2ViQXV0aG5DcmVkZW50aWFsO1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IHRvIHN0YXJ0IGEgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdGVyU3RhcnRSZXF1ZXN0IHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbiAgd29ya2Zsb3c/OiBXZWJBdXRobldvcmtmbG93O1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3Igc3RhcnRpbmcgYSBXZWJBdXRobiByZWdpc3RyYXRpb24gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlc3BvbnNlIHtcbiAgb3B0aW9ucz86IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM7XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byByZXF1ZXN0IGV4dGVuc2lvbnMgZHVyaW5nIGNyZWRlbnRpYWwgcmVnaXN0cmF0aW9uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdHJhdGlvbkV4dGVuc2lvbk9wdGlvbnMge1xuICBjcmVkUHJvcHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IHRvIHN0YXJ0IGEgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuU3RhcnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNyZWRlbnRpYWxJZD86IFVVSUQ7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIGxvZ2luSWRUeXBlcz86IEFycmF5PHN0cmluZz47XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdXNlcklkPzogVVVJRDtcbiAgd29ya2Zsb3c/OiBXZWJBdXRobldvcmtmbG93O1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3Igc3RhcnRpbmcgYSBXZWJBdXRobiBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5TdGFydFJlc3BvbnNlIHtcbiAgb3B0aW9ucz86IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucztcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIHRoZSBXZWJBdXRobiB3b3JrZmxvdy4gVGhpcyB3aWxsIGFmZmVjdCB0aGUgcGFyYW1ldGVycyB1c2VkIGZvciBjcmVkZW50aWFsIGNyZWF0aW9uXG4gKiBhbmQgcmVxdWVzdCBiYXNlZCBvbiB0aGUgVGVuYW50IGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gV2ViQXV0aG5Xb3JrZmxvdyB7XG4gIGJvb3RzdHJhcCA9IFwiYm9vdHN0cmFwXCIsXG4gIGdlbmVyYWwgPSBcImdlbmVyYWxcIixcbiAgcmVhdXRoZW50aWNhdGlvbiA9IFwicmVhdXRoZW50aWNhdGlvblwiXG59XG5cbi8qKlxuICogQSBzZXJ2ZXIgd2hlcmUgZXZlbnRzIGFyZSBzZW50LiBUaGlzIGluY2x1ZGVzIHVzZXIgYWN0aW9uIGV2ZW50cyBhbmQgYW55IG90aGVyIGV2ZW50cyBzZW50IGJ5IEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9vayB7XG4gIGNvbm5lY3RUaW1lb3V0PzogbnVtYmVyO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV2ZW50c0VuYWJsZWQ/OiBSZWNvcmQ8RXZlbnRUeXBlLCBib29sZWFuPjtcbiAgZ2xvYmFsPzogYm9vbGVhbjtcbiAgaGVhZGVycz86IEhUVFBIZWFkZXJzO1xuICBodHRwQXV0aGVudGljYXRpb25QYXNzd29yZD86IHN0cmluZztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uVXNlcm5hbWU/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHJlYWRUaW1lb3V0PzogbnVtYmVyO1xuICBzaWduYXR1cmVDb25maWd1cmF0aW9uPzogV2ViaG9va1NpZ25hdHVyZUNvbmZpZ3VyYXRpb247XG4gIHNzbENlcnRpZmljYXRlPzogc3RyaW5nO1xuICBzc2xDZXJ0aWZpY2F0ZUtleUlkPzogVVVJRDtcbiAgdGVuYW50SWRzPzogQXJyYXk8VVVJRD47XG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHdlYmhvb2sgY2FsbCBhdHRlbXB0IGxvZy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tBdHRlbXB0TG9nIHtcbiAgYXR0ZW1wdFJlc3VsdD86IFdlYmhvb2tBdHRlbXB0UmVzdWx0O1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW5kSW5zdGFudD86IG51bWJlcjtcbiAgaWQ/OiBVVUlEO1xuICBzdGFydEluc3RhbnQ/OiBudW1iZXI7XG4gIHdlYmhvb2tDYWxsUmVzcG9uc2U/OiBXZWJob29rQ2FsbFJlc3BvbnNlO1xuICB3ZWJob29rRXZlbnRMb2dJZD86IFVVSUQ7XG4gIHdlYmhvb2tJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogV2ViaG9vayBhdHRlbXB0IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tBdHRlbXB0TG9nUmVzcG9uc2Uge1xuICB3ZWJob29rQXR0ZW1wdExvZz86IFdlYmhvb2tBdHRlbXB0TG9nO1xufVxuXG4vKipcbiAqIFRoZSBwb3NzaWJsZSBzdGF0ZXMgb2YgYW4gaW5kaXZpZHVhbCB3ZWJob29rIGF0dGVtcHQgdG8gYSBzaW5nbGUgZW5kcG9pbnQuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gV2ViaG9va0F0dGVtcHRSZXN1bHQge1xuICBTdWNjZXNzID0gXCJTdWNjZXNzXCIsXG4gIEZhaWx1cmUgPSBcIkZhaWx1cmVcIixcbiAgVW5rbm93biA9IFwiVW5rbm93blwiXG59XG5cbi8qKlxuICogQSB3ZWJob29rIGNhbGwgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rQ2FsbFJlc3BvbnNlIHtcbiAgZXhjZXB0aW9uPzogc3RyaW5nO1xuICBzdGF0dXNDb2RlPzogbnVtYmVyO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va0V2ZW50TG9nIHtcbiAgYXR0ZW1wdHM/OiBBcnJheTxXZWJob29rQXR0ZW1wdExvZz47XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBldmVudD86IEV2ZW50UmVxdWVzdDtcbiAgZXZlbnRSZXN1bHQ/OiBXZWJob29rRXZlbnRSZXN1bHQ7XG4gIGV2ZW50VHlwZT86IEV2ZW50VHlwZTtcbiAgZmFpbGVkQXR0ZW1wdHM/OiBudW1iZXI7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdEF0dGVtcHRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbGlua2VkT2JqZWN0SWQ/OiBVVUlEO1xuICBzZXF1ZW5jZT86IG51bWJlcjtcbiAgc3VjY2Vzc2Z1bEF0dGVtcHRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiBmb3IgV2ViaG9vayBFdmVudCBMb2cgZGF0YS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZ0NvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZGVsZXRlPzogRGVsZXRlQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBXZWJob29rIGV2ZW50IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZ1Jlc3BvbnNlIHtcbiAgd2ViaG9va0V2ZW50TG9nPzogV2ViaG9va0V2ZW50TG9nO1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgdGhlIHdlYmhvb2sgZXZlbnQgbG9nLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va0V2ZW50TG9nU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBlbmQ/OiBudW1iZXI7XG4gIGV2ZW50Pzogc3RyaW5nO1xuICBldmVudFJlc3VsdD86IFdlYmhvb2tFdmVudFJlc3VsdDtcbiAgZXZlbnRUeXBlPzogRXZlbnRUeXBlO1xuICBzdGFydD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXZWJob29rIGV2ZW50IGxvZyBzZWFyY2ggcmVxdWVzdC5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tFdmVudExvZ1NlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBXZWJob29rRXZlbnRMb2dTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBXZWJob29rIGV2ZW50IGxvZyBzZWFyY2ggcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rRXZlbnRMb2dTZWFyY2hSZXNwb25zZSB7XG4gIHRvdGFsPzogbnVtYmVyO1xuICB3ZWJob29rRXZlbnRMb2dzPzogQXJyYXk8V2ViaG9va0V2ZW50TG9nPjtcbn1cblxuLyoqXG4gKiBUaGUgcG9zc2libGUgcmVzdWx0IHN0YXRlcyBvZiBhIHdlYmhvb2sgZXZlbnQuIFRoaXMgdHJhY2tzIHRoZSBzdWNjZXNzIG9mIHRoZSBvdmVyYWxsIHdlYmhvb2sgdHJhbnNhY3Rpb24gYWNjb3JkaW5nIHRvIHRoZSB7QGxpbmsgVHJhbnNhY3Rpb25UeXBlfVxuICogYW5kIGNvbmZpZ3VyZWQgd2ViaG9va3MuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gV2ViaG9va0V2ZW50UmVzdWx0IHtcbiAgRmFpbGVkID0gXCJGYWlsZWRcIixcbiAgUnVubmluZyA9IFwiUnVubmluZ1wiLFxuICBTdWNjZWVkZWQgPSBcIlN1Y2NlZWRlZFwiXG59XG5cbi8qKlxuICogV2ViaG9vayBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va1JlcXVlc3Qge1xuICB3ZWJob29rPzogV2ViaG9vaztcbn1cblxuLyoqXG4gKiBXZWJob29rIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va1Jlc3BvbnNlIHtcbiAgd2ViaG9vaz86IFdlYmhvb2s7XG4gIHdlYmhvb2tzPzogQXJyYXk8V2ViaG9vaz47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciB3ZWJob29rcy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3Igd2ViaG9va3NcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogV2ViaG9va1NlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFdlYmhvb2sgc2VhcmNoIHJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rU2VhcmNoUmVzcG9uc2Uge1xuICB0b3RhbD86IG51bWJlcjtcbiAgd2ViaG9va3M/OiBBcnJheTxXZWJob29rPjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBzaWduaW5nIHdlYmhvb2tzLlxuICpcbiAqIEBhdXRob3IgQnJlbnQgSGFsc2V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va1NpZ25hdHVyZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgc2lnbmluZ0tleUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBYYm94QXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFhib3ggZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFhib3hJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8WGJveEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4iLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgQ2xpZW50UmVzcG9uc2UgZnJvbSBcIi4vQ2xpZW50UmVzcG9uc2VcIjtcbmltcG9ydCB7UmVxdWVzdENyZWRlbnRpYWxzLCBSZXNwb25zZX0gZnJvbSBcIm5vZGUtZmV0Y2hcIjtcbmltcG9ydCB7VVJMU2VhcmNoUGFyYW1zfSBmcm9tIFwidXJsXCI7XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlSGFuZGxlcjxUPiA9IChyZXNwb25zZTogUmVzcG9uc2UpID0+IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VD4+O1xuZXhwb3J0IHR5cGUgRXJyb3JSZXNwb25zZUhhbmRsZXI8VD4gPSAocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFQ+PjtcblxuZXhwb3J0IGludGVyZmFjZSBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlciB1c2luZyBhIGtleVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSB2YWx1ZSBvZiB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEByZXR1cm5zIHtJUkVTVENsaWVudH1cbiAgICovXG4gIHdpdGhBdXRob3JpemF0aW9uKGtleTogc3RyaW5nKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzZWdtZW50IHRvIHRoZSByZXF1ZXN0IHVyaVxuICAgKi9cbiAgd2l0aFVyaVNlZ21lbnQoc2VnbWVudDogc3RyaW5nIHwgbnVtYmVyKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvZHkgb2YgdGhlIGNsaWVudCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlcXVlc3QgYm9keSBhcyBmb3JtIGRhdGEuXG4gICAqL1xuICB3aXRoRm9ybURhdGEoYm9keTogVVJMU2VhcmNoUGFyYW1zKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBoZWFkZXIgdG8gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgVGhlIG5hbWUgb2YgdGhlIGhlYWRlci5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyLlxuICAgKi9cbiAgd2l0aEhlYWRlcihrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBib2R5IG9mIHRoZSBjbGllbnQgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIGJvZHkgVGhlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSByZXF1ZXN0IGJvZHkgYXMgSlNPTi5cbiAgICovXG4gIHdpdGhKU09OQm9keShib2R5OiBvYmplY3QpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgaHR0cCBtZXRob2QgZm9yIHRoZSByZXF1ZXN0XG4gICAqL1xuICB3aXRoTWV0aG9kKG1ldGhvZDogc3RyaW5nKTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHVyaSBvZiB0aGUgcmVxdWVzdFxuICAgKi9cbiAgd2l0aFVyaSh1cmk6IHN0cmluZyk6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBBZGRzIHBhcmFtZXRlcnMgdG8gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciwgbWF5IGJlIGEgc3RyaW5nLCBvYmplY3Qgb3IgbnVtYmVyLlxuICAgKi9cbiAgd2l0aFBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogU2V0cyByZXF1ZXN0J3MgY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBBIHN0cmluZyBpbmRpY2F0aW5nIHdoZXRoZXIgY3JlZGVudGlhbHMgd2lsbCBiZSBzZW50IHdpdGggdGhlIHJlcXVlc3QgYWx3YXlzLCBuZXZlciwgb3Igb25seSB3aGVuIHNlbnQgdG8gYSBzYW1lLW9yaWdpbiBVUkwuXG4gICAqL1xuICB3aXRoQ3JlZGVudGlhbHModmFsdWU6IFJlcXVlc3RDcmVkZW50aWFscyk6IElSRVNUQ2xpZW50PFJULCBFUlQ+O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSByZXNwb25zZSBoYW5kbGVyLiBUaGlzIGNvdWxkIGRvIHByb2Nlc3NpbmcgYmVmb3JlIHRoZSBDbGllbnRSZXNwb25zZSBpcyByZXR1cm5lZCBkZXBlbmRpbmcgb24gdGhlIEFQSXMgZXhwZWN0ZWQgcmVzcG9uc2UuXG4gICAqXG4gICAqIEBwYXJhbSBoYW5kbGVyXG4gICAqL1xuICB3aXRoUmVzcG9uc2VIYW5kbGVyKGhhbmRsZXI6IFJlc3BvbnNlSGFuZGxlcjxSVD4pOiBJUkVTVENsaWVudDxSVCwgRVJUPjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgZXJyb3IgcmVzcG9uc2UgaGFuZGxlci4gIEVycm9yIHJlc3BvbnNlIGhhbmRsZXJzIGhhdmUgYSBnZW5lcmljIGJ1dCBkdWUgdG8gdHlwZXNjcmlwdCBsaW1pdGF0aW9ucyxcbiAgICogdGhpcyB2YWx1ZSB3aWxsIG5vdCBiZSBwcm9wYWdhdGVkIHRvIHRoZSBQcm9taXNlIGNhdGNoIHN0YXRlbWVudFxuICAgKiBcbiAgICogQHBhcmFtIGhhbmRsZXJcbiAgICovXG4gIHdpdGhFcnJvclJlc3BvbnNlSGFuZGxlcihoYW5kbGVyOiBFcnJvclJlc3BvbnNlSGFuZGxlcjxFUlQ+KTogSVJFU1RDbGllbnQ8UlQsIEVSVD47XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgcmVxdWVzdCBhbmQgcmV0dXJuIGEgcHJvbWlzZS4gVGhpcyBwcm9taXNlIHdpbGwgcmVzb2x2ZSBpZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsXG4gICAqIGFuZCByZWplY3Qgb3RoZXJ3aXNlLlxuICAgKi9cbiAgZ28oKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSVD4+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBJUkVTVENsaWVudDtcbiJdfQ==
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