@energycap/energycapid-sdk-angular 1.2112.53-ECAPID-356-ApplicationInstance-Get-API-20220106-1621 → 1.2112.57-develop-20220119-1725

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.
@@ -131,13 +131,11 @@ export class OrganizationService {
131
131
  }));
132
132
  }
133
133
  /**
134
- * Returns the entire oranizaion hiearchy If there are more than 100 organizations a 403 is returned.
134
+ * Returns your entire organization hierarchy For performance returns a max page size of 100
135
135
  *
136
- * @param pageSize The number of elements to return in a page (defaults to 100 elements)
137
- * @param pageNumber The current page number
138
136
  */
139
- getOrganizationHierarchy(pageSize, pageNumber, extraHttpRequestParams, extraHttpRequestHeaders) {
140
- return this.getOrganizationHierarchyWithHttpInfo(pageSize, pageNumber, extraHttpRequestParams, extraHttpRequestHeaders)
137
+ getOrganizationHierarchy(extraHttpRequestParams, extraHttpRequestHeaders) {
138
+ return this.getOrganizationHierarchyWithHttpInfo(extraHttpRequestParams, extraHttpRequestHeaders)
141
139
  .pipe(map((response) => {
142
140
  if (response.status === 204) {
143
141
  return undefined;
@@ -166,12 +164,12 @@ export class OrganizationService {
166
164
  /**
167
165
  * Gets the organizations to which the logged in user has access
168
166
  *
169
- * @param onlyAdmin Defaults to false. If false, returns all organizations to which the current user has access. If set to true will only return results where the logged in user has admin access
170
- * @param pageSize The number of elements to return in a page (defaults to 250 elements)
167
+ * @param filter
168
+ * @param pageSize The number of elements to return in a page (defaults to 50 elements)
171
169
  * @param pageNumber The current page number
172
170
  */
173
- getOrganizations(onlyAdmin, pageSize, pageNumber, extraHttpRequestParams, extraHttpRequestHeaders) {
174
- return this.getOrganizationsWithHttpInfo(onlyAdmin, pageSize, pageNumber, extraHttpRequestParams, extraHttpRequestHeaders)
171
+ getOrganizations(filter, pageSize, pageNumber, extraHttpRequestParams, extraHttpRequestHeaders) {
172
+ return this.getOrganizationsWithHttpInfo(filter, pageSize, pageNumber, extraHttpRequestParams, extraHttpRequestHeaders)
175
173
  .pipe(map((response) => {
176
174
  if (response.status === 204) {
177
175
  return undefined;
@@ -435,12 +433,10 @@ export class OrganizationService {
435
433
  return this.http.request(RequestMethod.Get, path, requestOptions);
436
434
  }
437
435
  /**
438
- * Returns the entire oranizaion hiearchy If there are more than 100 organizations a 403 is returned.
436
+ * Returns your entire organization hierarchy For performance returns a max page size of 100
439
437
  *
440
- * @param pageSize The number of elements to return in a page (defaults to 100 elements)
441
- * @param pageNumber The current page number
442
438
  */
443
- getOrganizationHierarchyWithHttpInfo(pageSize, pageNumber, extraHttpRequestParams, extraHttpRequestHeaders) {
439
+ getOrganizationHierarchyWithHttpInfo(extraHttpRequestParams, extraHttpRequestHeaders) {
444
440
  const path = this.basePath + '/api/v202112/Organization/hierarchy';
445
441
  let queryParameters;
446
442
  if (extraHttpRequestParams) {
@@ -463,12 +459,6 @@ export class OrganizationService {
463
459
  headers = headers.set(key, value);
464
460
  });
465
461
  }
466
- if (pageSize !== undefined) {
467
- queryParameters = queryParameters.set('pageSize', pageSize);
468
- }
469
- if (pageNumber !== undefined) {
470
- queryParameters = queryParameters.set('pageNumber', pageNumber);
471
- }
472
462
  // to determine the Accept header
473
463
  let produces = [
474
464
  'application/json'
@@ -537,11 +527,11 @@ export class OrganizationService {
537
527
  /**
538
528
  * Gets the organizations to which the logged in user has access
539
529
  *
540
- * @param onlyAdmin Defaults to false. If false, returns all organizations to which the current user has access. If set to true will only return results where the logged in user has admin access
541
- * @param pageSize The number of elements to return in a page (defaults to 250 elements)
530
+ * @param filter
531
+ * @param pageSize The number of elements to return in a page (defaults to 50 elements)
542
532
  * @param pageNumber The current page number
543
533
  */
544
- getOrganizationsWithHttpInfo(onlyAdmin, pageSize, pageNumber, extraHttpRequestParams, extraHttpRequestHeaders) {
534
+ getOrganizationsWithHttpInfo(filter, pageSize, pageNumber, extraHttpRequestParams, extraHttpRequestHeaders) {
545
535
  const path = this.basePath + '/api/v202108/Organization';
546
536
  let queryParameters;
547
537
  if (extraHttpRequestParams) {
@@ -564,8 +554,8 @@ export class OrganizationService {
564
554
  headers = headers.set(key, value);
565
555
  });
566
556
  }
567
- if (onlyAdmin !== undefined) {
568
- queryParameters = queryParameters.set('onlyAdmin', onlyAdmin);
557
+ if (filter !== undefined) {
558
+ queryParameters = queryParameters.set('filter', filter);
569
559
  }
570
560
  if (pageSize !== undefined) {
571
561
  queryParameters = queryParameters.set('pageSize', pageSize);
@@ -761,4 +751,4 @@ OrganizationService.ctorParameters = () => [
761
751
  { type: String, decorators: [{ type: Optional }, { type: Inject, args: [BASE_PATH,] }] },
762
752
  { type: Configuration, decorators: [{ type: Optional }] }
763
753
  ];
764
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcGkvb3JnYW5pemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBMkIsZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFvQixzQkFBc0IsQ0FBQztBQUl6RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQW9ELGdCQUFnQixDQUFDO0FBV25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBOEMsY0FBYyxDQUFDO0FBR2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBMEMsa0JBQWtCLENBQUM7QUFFckYsTUFBTSxhQUFhLEdBQUc7SUFDbEIsR0FBRyxFQUFFLEtBQUs7SUFDVixJQUFJLEVBQUUsTUFBTTtJQUNaLEdBQUcsRUFBRSxLQUFLO0lBQ1YsTUFBTSxFQUFFLFFBQVE7SUFDaEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsT0FBTztDQUNqQixDQUFDO0FBSUYsTUFBTSxPQUFPLG1CQUFtQjtJQU01QixZQUFzQixJQUFnQixFQUFnQyxRQUFnQixFQUFjLGFBQTRCO1FBQTFHLFNBQUksR0FBSixJQUFJLENBQVk7UUFKNUIsYUFBUSxHQUFHLG1CQUFtQixDQUFDO1FBQ2xDLG1CQUFjLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEQsa0JBQWEsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUd0RCxJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxhQUFhLEVBQUU7WUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLGFB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LENBQUMsQ0FBQztRQUVuRCxJQUFJLGNBQWMsR0FBRztZQUNqQixPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzNGLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLGVBQWUsRUFBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbEQsT0FBTyxFQUFFLFVBQXdCO1NBQ3BDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUE2QixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNsRyxDQUFDOzs7WUF6MUJKLFVBQVU7OztZQS9CRixVQUFVO3lDQXNDMEIsUUFBUSxZQUFHLE1BQU0sU0FBQyxTQUFTO1lBcEIvRCxhQUFhLHVCQW9CdUUsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFbmVyZ3lDQVAgSUQgU0RLXHJcbiAqIERvY3VtZW50IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEVuZXJneUNBUCBJRCBTREtcclxuICpcclxuICogT3BlbkFQSSBzcGVjIHZlcnNpb246IDEuMjExMlxyXG4gKiBDb250YWN0OiBzdXBwb3J0QGVuZXJneWNhcC5jb21cclxuICpcclxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1jb2RlZ2VuLmdpdFxyXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXHJcbiAqL1xyXG5cclxuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9ICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ3JlYXRlT3JnYW5pemF0aW9uUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2NyZWF0ZU9yZ2FuaXphdGlvblJlcXVlc3QnO1xyXG5pbXBvcnQgeyBIaWVyYXJjaGljYWxPcmdhbml6YXRpb25zIH0gZnJvbSAnLi4vbW9kZWwvaGllcmFyY2hpY2FsT3JnYW5pemF0aW9ucyc7XHJcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xSZXNwb25zZSB9IGZyb20gJy4uL21vZGVsL29yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xSZXNwb25zZSc7XHJcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkRldGFpbFJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWwvb3JnYW5pemF0aW9uRGV0YWlsUmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBPcmdhbml6YXRpb25SZXNwb25zZSB9IGZyb20gJy4uL21vZGVsL29yZ2FuaXphdGlvblJlc3BvbnNlJztcclxuaW1wb3J0IHsgT3JnYW5pemF0aW9uVXNlclJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWwvb3JnYW5pemF0aW9uVXNlclJlc3BvbnNlJztcclxuaW1wb3J0IHsgVXBkYXRlT3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC91cGRhdGVPcmdhbml6YXRpb25BY2Nlc3NDb250cm9sUmVxdWVzdCc7XHJcbmltcG9ydCB7IFVwZGF0ZU9yZ2FuaXphdGlvbkRldGFpbHNSZXF1ZXN0IH0gZnJvbSAnLi4vbW9kZWwvdXBkYXRlT3JnYW5pemF0aW9uRGV0YWlsc1JlcXVlc3QnO1xyXG5cclxuaW1wb3J0IHsgQkFTRV9QQVRIIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XHJcbmltcG9ydCB7IENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xyXG5cclxuY29uc3QgUmVxdWVzdE1ldGhvZCA9IHtcclxuICAgIEdldDogJ2dldCcsXHJcbiAgICBQb3N0OiAncG9zdCcsXHJcbiAgICBQdXQ6ICdwdXQnLFxyXG4gICAgRGVsZXRlOiAnZGVsZXRlJyxcclxuICAgIE9wdGlvbnM6ICdvcHRpb25zJyxcclxuICAgIEhlYWQ6ICdoZWFkJyxcclxuICAgIFBhdGNoOiAncGF0Y2gnXHJcbn07XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgT3JnYW5pemF0aW9uU2VydmljZSB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGJhc2VQYXRoID0gJ2h0dHBzOi8vbG9jYWxob3N0JztcclxuICAgIHB1YmxpYyBkZWZhdWx0SGVhZGVyczogSHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgIHB1YmxpYyBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZywgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIGlmIChiYXNlUGF0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XHJcblx0XHRcdHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aCB8fCBjb25maWd1cmF0aW9uLmJhc2VQYXRoIHx8IHRoaXMuYmFzZVBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBFeHRlbmRzIG9iamVjdCBieSBjb3Bpbmcgbm9uLWV4aXN0aW5nIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0gb2JqQSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcclxuICAgICAqIEBwYXJhbSBvYmpCIHNvdXJjZSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBleHRlbmRPYmo8VDEsVDI+KG9iakE6IFQxLCBvYmpCOiBUMikge1xyXG4gICAgICAgIGZvcihsZXQga2V5IGluIG9iakIpe1xyXG4gICAgICAgICAgICBpZihvYmpCLmhhc093blByb3BlcnR5KGtleSkpe1xyXG4gICAgICAgICAgICAgICAgKG9iakEgYXMgYW55KVtrZXldID0gKG9iakIgYXMgYW55KVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA8VDEmVDI+b2JqQTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSBjb25zdW1lcyBzdHJpbmdbXSBtaW1lLXR5cGVzXHJcbiAgICAgKiBAcmV0dXJuIHRydWU6IGNvbnN1bWVzIGNvbnRhaW5zICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgZmFsc2U6IG90aGVyd2lzZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNhbkNvbnN1bWVGb3JtKGNvbnN1bWVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGZvcm0gPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc7XHJcbiAgICAgICAgZm9yIChsZXQgY29uc3VtZSBvZiBjb25zdW1lcykge1xyXG4gICAgICAgICAgICBpZiAoZm9ybSA9PT0gY29uc3VtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IG9yZ2FuaXphdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgXHJcbiAgICAgKiBAcGFyYW0gYm9keSBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNyZWF0ZU9yZ2FuaXphdGlvbihvcmdhbml6YXRpb25JZDogc3RyaW5nLCBib2R5PzogQ3JlYXRlT3JnYW5pemF0aW9uUmVxdWVzdCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxPcmdhbml6YXRpb25SZXNwb25zZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9yZ2FuaXphdGlvbldpdGhIdHRwSW5mbyhvcmdhbml6YXRpb25JZCwgYm9keSwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPE9yZ2FuaXphdGlvblJlc3BvbnNlPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3JnYW5pemF0aW9uIGFjY2VzcyBjb250cm9sIGRhdGEgIFlvdSBtdXN0IGJlIGFuIGFkbWluIHRvIHRoZSBvcmdhbml6YWlvbiB0byBnZXQgdGhpcyBpbmZvcm1hdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgVGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25BY2Nlc3NDb250cm9sKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8T3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFdpdGhIdHRwSW5mbyhvcmdhbml6YXRpb25JZCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPE9yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xSZXNwb25zZT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IGFuIE9yZ2FuaXphdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgVGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25CeUlkKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8T3JnYW5pemF0aW9uUmVzcG9uc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcmdhbml6YXRpb25CeUlkV2l0aEh0dHBJbmZvKG9yZ2FuaXphdGlvbklkLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8T3JnYW5pemF0aW9uUmVzcG9uc2U+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhZGRpdGlvbmFsIGRldGFpbCBpbmZvcm1hdGlvbiBhYm91dCBhbiBPcmdhbml6YXRpb24gIFlvdSBtdXN0IGJlIGFuIGFkbWluIHRvIHRoZSBvcmdhbml6YWlvbiB0byBnZXQgdGhpcyBpbmZvcm1hdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgVGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25EZXRhaWxzKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8T3JnYW5pemF0aW9uRGV0YWlsUmVzcG9uc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcmdhbml6YXRpb25EZXRhaWxzV2l0aEh0dHBJbmZvKG9yZ2FuaXphdGlvbklkLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8T3JnYW5pemF0aW9uRGV0YWlsUmVzcG9uc2U+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZW50aXJlIG9yYW5pemFpb24gaGllYXJjaHkgIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gMTAwIG9yZ2FuaXphdGlvbnMgYSA0MDMgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJldHVybiBpbiBhIHBhZ2UgKGRlZmF1bHRzIHRvIDEwMCBlbGVtZW50cylcclxuICAgICAqIEBwYXJhbSBwYWdlTnVtYmVyIFRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25IaWVyYXJjaHkocGFnZVNpemU/OiBudW1iZXIsIHBhZ2VOdW1iZXI/OiBudW1iZXIsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8QXJyYXk8SGllcmFyY2hpY2FsT3JnYW5pemF0aW9ucz4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcmdhbml6YXRpb25IaWVyYXJjaHlXaXRoSHR0cEluZm8ocGFnZVNpemUsIHBhZ2VOdW1iZXIsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxBcnJheTxIaWVyYXJjaGljYWxPcmdhbml6YXRpb25zPj4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHVzZXJzIGxpbmtlZCB0byBhbiBvcmdhbml6YXRpb25cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9yZ2FuaXphdGlvbklkIFRoZSBvcmdhbml6YXRpb24gaWRlbnRpZmllclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0T3JnYW5pemF0aW9uVXNlcnMob3JnYW5pemF0aW9uSWQ6IHN0cmluZywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxBcnJheTxPcmdhbml6YXRpb25Vc2VyUmVzcG9uc2U+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JnYW5pemF0aW9uVXNlcnNXaXRoSHR0cEluZm8ob3JnYW5pemF0aW9uSWQsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxBcnJheTxPcmdhbml6YXRpb25Vc2VyUmVzcG9uc2U+PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG9yZ2FuaXphdGlvbnMgdG8gd2hpY2ggdGhlIGxvZ2dlZCBpbiB1c2VyIGhhcyBhY2Nlc3NcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9ubHlBZG1pbiBEZWZhdWx0cyB0byBmYWxzZS4gIElmIGZhbHNlLCByZXR1cm5zIGFsbCBvcmdhbml6YXRpb25zIHRvIHdoaWNoIHRoZSBjdXJyZW50IHVzZXIgaGFzIGFjY2Vzcy4gIElmIHNldCB0byB0cnVlIHdpbGwgb25seSByZXR1cm4gcmVzdWx0cyB3aGVyZSB0aGUgbG9nZ2VkIGluIHVzZXIgaGFzIGFkbWluIGFjY2Vzc1xyXG4gICAgICogQHBhcmFtIHBhZ2VTaXplIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmV0dXJuIGluIGEgcGFnZSAoZGVmYXVsdHMgdG8gMjUwIGVsZW1lbnRzKVxyXG4gICAgICogQHBhcmFtIHBhZ2VOdW1iZXIgVGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldE9yZ2FuaXphdGlvbnMob25seUFkbWluPzogYm9vbGVhbiwgcGFnZVNpemU/OiBudW1iZXIsIHBhZ2VOdW1iZXI/OiBudW1iZXIsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8QXJyYXk8T3JnYW5pemF0aW9uUmVzcG9uc2U+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JnYW5pemF0aW9uc1dpdGhIdHRwSW5mbyhvbmx5QWRtaW4sIHBhZ2VTaXplLCBwYWdlTnVtYmVyLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8QXJyYXk8T3JnYW5pemF0aW9uUmVzcG9uc2U+PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gcXVlcnkgXHJcbiAgICAgKiBAcGFyYW0gcGFnZVNpemUgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byByZXR1cm4gaW4gYSBwYWdlIChkZWZhdWx0cyB0byA1MCBlbGVtZW50cylcclxuICAgICAqIEBwYXJhbSBwYWdlTnVtYmVyIFRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZWFyY2hPcmdhbml6YXRpb25zKHF1ZXJ5Pzogc3RyaW5nLCBwYWdlU2l6ZT86IG51bWJlciwgcGFnZU51bWJlcj86IG51bWJlciwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxBcnJheTxPcmdhbml6YXRpb25SZXNwb25zZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hPcmdhbml6YXRpb25zV2l0aEh0dHBJbmZvKHF1ZXJ5LCBwYWdlU2l6ZSwgcGFnZU51bWJlciwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPEFycmF5PE9yZ2FuaXphdGlvblJlc3BvbnNlPj4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgb3JnYW5pemF0aW9uIGFjY2VzcyBjb250cm9sIGRhdGEgIFlvdSBtdXN0IGJlIGFuIGFkbWluIHRvIHRoZSBvcmdhbml6YWlvbiB0byBnZXQgdGhpcyBpbmZvcm1hdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgVGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyXHJcbiAgICAgKiBAcGFyYW0gYm9keSBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZU9yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2wob3JnYW5pemF0aW9uSWQ6IHN0cmluZywgYm9keT86IFVwZGF0ZU9yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xSZXF1ZXN0LCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPE9yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xSZXNwb25zZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xXaXRoSHR0cEluZm8ob3JnYW5pemF0aW9uSWQsIGJvZHksIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxPcmdhbml6YXRpb25BY2Nlc3NDb250cm9sUmVzcG9uc2U+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIG9yZ2FuaXphdGlvbiBkZXRhaWxzICBZb3UgbXVzdCBiZSBhbiBhZG1pbiB0byB0aGUgb3JnYW5pemFpb24gdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb25cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9yZ2FuaXphdGlvbklkIFRoZSBvcmdhbml6YXRpb24gaWRlbnRpZmllclxyXG4gICAgICogQHBhcmFtIGJvZHkgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVPcmdhbml6YXRpb25EZXRhaWxzKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGJvZHk/OiBVcGRhdGVPcmdhbml6YXRpb25EZXRhaWxzUmVxdWVzdCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxPcmdhbml6YXRpb25EZXRhaWxSZXNwb25zZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9yZ2FuaXphdGlvbkRldGFpbHNXaXRoSHR0cEluZm8ob3JnYW5pemF0aW9uSWQsIGJvZHksIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxPcmdhbml6YXRpb25EZXRhaWxSZXNwb25zZT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IG9yZ2FuaXphdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgXHJcbiAgICAgKiBAcGFyYW0gYm9keSBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNyZWF0ZU9yZ2FuaXphdGlvbldpdGhIdHRwSW5mbyhvcmdhbml6YXRpb25JZDogc3RyaW5nLCBib2R5PzogQ3JlYXRlT3JnYW5pemF0aW9uUmVxdWVzdCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8T3JnYW5pemF0aW9uUmVzcG9uc2U+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTEyL09yZ2FuaXphdGlvbi8ke29yZ2FuaXphdGlvbklkfSdcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnJHsnICsgJ29yZ2FuaXphdGlvbklkJyArICd9JywgU3RyaW5nKG9yZ2FuaXphdGlvbklkKSk7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdvcmdhbml6YXRpb25JZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKG9yZ2FuaXphdGlvbklkID09PSBudWxsIHx8IG9yZ2FuaXphdGlvbklkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgb3JnYW5pemF0aW9uSWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVPcmdhbml6YXRpb24uJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBjb25zdW1lc1swXSk7XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgYm9keTogYm9keSA9PSBudWxsID8gJycgOiAoY29uc3VtZXNbMF0gPT0gJ2FwcGxpY2F0aW9uL2pzb24nID8gSlNPTi5zdHJpbmdpZnkoYm9keSkgOiBib2R5KSwgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTA2MTJcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxPcmdhbml6YXRpb25SZXNwb25zZT4oUmVxdWVzdE1ldGhvZC5Qb3N0LCBwYXRoLCByZXF1ZXN0T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yZ2FuaXphdGlvbiBhY2Nlc3MgY29udHJvbCBkYXRhICBZb3UgbXVzdCBiZSBhbiBhZG1pbiB0byB0aGUgb3JnYW5pemFpb24gdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb25cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9yZ2FuaXphdGlvbklkIFRoZSBvcmdhbml6YXRpb24gaWRlbnRpZmllclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0T3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFdpdGhIdHRwSW5mbyhvcmdhbml6YXRpb25JZDogc3RyaW5nLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxPcmdhbml6YXRpb25BY2Nlc3NDb250cm9sUmVzcG9uc2U+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTEyL09yZ2FuaXphdGlvbi8ke29yZ2FuaXphdGlvbklkfS9hY2Nlc3Njb250cm9sJ1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnb3JnYW5pemF0aW9uSWQnICsgJ30nLCBTdHJpbmcob3JnYW5pemF0aW9uSWQpKTtcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ29yZ2FuaXphdGlvbklkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAob3JnYW5pemF0aW9uSWQgPT09IG51bGwgfHwgb3JnYW5pemF0aW9uSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBvcmdhbml6YXRpb25JZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldE9yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2wuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PE9yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xSZXNwb25zZT4oUmVxdWVzdE1ldGhvZC5HZXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgYW4gT3JnYW5pemF0aW9uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBvcmdhbml6YXRpb25JZCBUaGUgb3JnYW5pemF0aW9uIGlkZW50aWZpZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldE9yZ2FuaXphdGlvbkJ5SWRXaXRoSHR0cEluZm8ob3JnYW5pemF0aW9uSWQ6IHN0cmluZywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8T3JnYW5pemF0aW9uUmVzcG9uc2U+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTA4L09yZ2FuaXphdGlvbi8ke29yZ2FuaXphdGlvbklkfSdcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnJHsnICsgJ29yZ2FuaXphdGlvbklkJyArICd9JywgU3RyaW5nKG9yZ2FuaXphdGlvbklkKSk7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdvcmdhbml6YXRpb25JZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKG9yZ2FuaXphdGlvbklkID09PSBudWxsIHx8IG9yZ2FuaXphdGlvbklkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgb3JnYW5pemF0aW9uSWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRPcmdhbml6YXRpb25CeUlkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxPcmdhbml6YXRpb25SZXNwb25zZT4oUmVxdWVzdE1ldGhvZC5HZXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWRkaXRpb25hbCBkZXRhaWwgaW5mb3JtYXRpb24gYWJvdXQgYW4gT3JnYW5pemF0aW9uICBZb3UgbXVzdCBiZSBhbiBhZG1pbiB0byB0aGUgb3JnYW5pemFpb24gdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb25cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9yZ2FuaXphdGlvbklkIFRoZSBvcmdhbml6YXRpb24gaWRlbnRpZmllclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0T3JnYW5pemF0aW9uRGV0YWlsc1dpdGhIdHRwSW5mbyhvcmdhbml6YXRpb25JZDogc3RyaW5nLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxPcmdhbml6YXRpb25EZXRhaWxSZXNwb25zZT4+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5iYXNlUGF0aCArICcvYXBpL3YyMDIxMTIvT3JnYW5pemF0aW9uLyR7b3JnYW5pemF0aW9uSWR9L2RldGFpbCdcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnJHsnICsgJ29yZ2FuaXphdGlvbklkJyArICd9JywgU3RyaW5nKG9yZ2FuaXphdGlvbklkKSk7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdvcmdhbml6YXRpb25JZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKG9yZ2FuaXphdGlvbklkID09PSBudWxsIHx8IG9yZ2FuaXphdGlvbklkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgb3JnYW5pemF0aW9uSWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRPcmdhbml6YXRpb25EZXRhaWxzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxPcmdhbml6YXRpb25EZXRhaWxSZXNwb25zZT4oUmVxdWVzdE1ldGhvZC5HZXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGVudGlyZSBvcmFuaXphaW9uIGhpZWFyY2h5ICBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDEwMCBvcmdhbml6YXRpb25zIGEgNDAzIGlzIHJldHVybmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gcGFnZVNpemUgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byByZXR1cm4gaW4gYSBwYWdlIChkZWZhdWx0cyB0byAxMDAgZWxlbWVudHMpXHJcbiAgICAgKiBAcGFyYW0gcGFnZU51bWJlciBUaGUgY3VycmVudCBwYWdlIG51bWJlclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0T3JnYW5pemF0aW9uSGllcmFyY2h5V2l0aEh0dHBJbmZvKHBhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheTxIaWVyYXJjaGljYWxPcmdhbml6YXRpb25zPj4+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5iYXNlUGF0aCArICcvYXBpL3YyMDIxMTIvT3JnYW5pemF0aW9uL2hpZXJhcmNoeSc7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFnZVNpemUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdwYWdlU2l6ZScsIDxhbnk+cGFnZVNpemUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBhZ2VOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdwYWdlTnVtYmVyJywgPGFueT5wYWdlTnVtYmVyKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PEFycmF5PEhpZXJhcmNoaWNhbE9yZ2FuaXphdGlvbnM+PihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB1c2VycyBsaW5rZWQgdG8gYW4gb3JnYW5pemF0aW9uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBvcmdhbml6YXRpb25JZCBUaGUgb3JnYW5pemF0aW9uIGlkZW50aWZpZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldE9yZ2FuaXphdGlvblVzZXJzV2l0aEh0dHBJbmZvKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5PE9yZ2FuaXphdGlvblVzZXJSZXNwb25zZT4+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTEyL09yZ2FuaXphdGlvbi8ke29yZ2FuaXphdGlvbklkfS91c2VyJ1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnb3JnYW5pemF0aW9uSWQnICsgJ30nLCBTdHJpbmcob3JnYW5pemF0aW9uSWQpKTtcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ29yZ2FuaXphdGlvbklkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAob3JnYW5pemF0aW9uSWQgPT09IG51bGwgfHwgb3JnYW5pemF0aW9uSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBvcmdhbml6YXRpb25JZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldE9yZ2FuaXphdGlvblVzZXJzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxBcnJheTxPcmdhbml6YXRpb25Vc2VyUmVzcG9uc2U+PihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgb3JnYW5pemF0aW9ucyB0byB3aGljaCB0aGUgbG9nZ2VkIGluIHVzZXIgaGFzIGFjY2Vzc1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb25seUFkbWluIERlZmF1bHRzIHRvIGZhbHNlLiAgSWYgZmFsc2UsIHJldHVybnMgYWxsIG9yZ2FuaXphdGlvbnMgdG8gd2hpY2ggdGhlIGN1cnJlbnQgdXNlciBoYXMgYWNjZXNzLiAgSWYgc2V0IHRvIHRydWUgd2lsbCBvbmx5IHJldHVybiByZXN1bHRzIHdoZXJlIHRoZSBsb2dnZWQgaW4gdXNlciBoYXMgYWRtaW4gYWNjZXNzXHJcbiAgICAgKiBAcGFyYW0gcGFnZVNpemUgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byByZXR1cm4gaW4gYSBwYWdlIChkZWZhdWx0cyB0byAyNTAgZWxlbWVudHMpXHJcbiAgICAgKiBAcGFyYW0gcGFnZU51bWJlciBUaGUgY3VycmVudCBwYWdlIG51bWJlclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0T3JnYW5pemF0aW9uc1dpdGhIdHRwSW5mbyhvbmx5QWRtaW4/OiBib29sZWFuLCBwYWdlU2l6ZT86IG51bWJlciwgcGFnZU51bWJlcj86IG51bWJlciwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXk8T3JnYW5pemF0aW9uUmVzcG9uc2U+Pj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjIwMjEwOC9Pcmdhbml6YXRpb24nO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9ubHlBZG1pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ29ubHlBZG1pbicsIDxhbnk+b25seUFkbWluKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwYWdlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3BhZ2VTaXplJywgPGFueT5wYWdlU2l6ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFnZU51bWJlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3BhZ2VOdW1iZXInLCA8YW55PnBhZ2VOdW1iZXIpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6dGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAncmVzcG9uc2UnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8QXJyYXk8T3JnYW5pemF0aW9uUmVzcG9uc2U+PihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBxdWVyeSBcclxuICAgICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJldHVybiBpbiBhIHBhZ2UgKGRlZmF1bHRzIHRvIDUwIGVsZW1lbnRzKVxyXG4gICAgICogQHBhcmFtIHBhZ2VOdW1iZXIgVGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNlYXJjaE9yZ2FuaXphdGlvbnNXaXRoSHR0cEluZm8ocXVlcnk/OiBzdHJpbmcsIHBhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheTxPcmdhbml6YXRpb25SZXNwb25zZT4+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTEyL09yZ2FuaXphdGlvbi9zZWFyY2gnO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgncXVlcnknLCA8YW55PnF1ZXJ5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwYWdlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3BhZ2VTaXplJywgPGFueT5wYWdlU2l6ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFnZU51bWJlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3BhZ2VOdW1iZXInLCA8YW55PnBhZ2VOdW1iZXIpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6dGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAncmVzcG9uc2UnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8QXJyYXk8T3JnYW5pemF0aW9uUmVzcG9uc2U+PihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIG9yZ2FuaXphdGlvbiBhY2Nlc3MgY29udHJvbCBkYXRhICBZb3UgbXVzdCBiZSBhbiBhZG1pbiB0byB0aGUgb3JnYW5pemFpb24gdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb25cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9yZ2FuaXphdGlvbklkIFRoZSBvcmdhbml6YXRpb24gaWRlbnRpZmllclxyXG4gICAgICogQHBhcmFtIGJvZHkgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVPcmdhbml6YXRpb25BY2Nlc3NDb250cm9sV2l0aEh0dHBJbmZvKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGJvZHk/OiBVcGRhdGVPcmdhbml6YXRpb25BY2Nlc3NDb250cm9sUmVxdWVzdCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8T3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFJlc3BvbnNlPj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjIwMjExMi9Pcmdhbml6YXRpb24vJHtvcmdhbml6YXRpb25JZH0vYWNjZXNzY29udHJvbCdcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnJHsnICsgJ29yZ2FuaXphdGlvbklkJyArICd9JywgU3RyaW5nKG9yZ2FuaXphdGlvbklkKSk7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdvcmdhbml6YXRpb25JZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKG9yZ2FuaXphdGlvbklkID09PSBudWxsIHx8IG9yZ2FuaXphdGlvbklkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgb3JnYW5pemF0aW9uSWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cGRhdGVPcmdhbml6YXRpb25BY2Nlc3NDb250cm9sLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgY29uc3VtZXNbMF0pO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHkgPT0gbnVsbCA/ICcnIDogKGNvbnN1bWVzWzBdID09ICdhcHBsaWNhdGlvbi9qc29uJyA/IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogYm9keSksIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEwNjEyXHJcbiAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6dGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAncmVzcG9uc2UnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8T3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFJlc3BvbnNlPihSZXF1ZXN0TWV0aG9kLlB1dCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIG9yZ2FuaXphdGlvbiBkZXRhaWxzICBZb3UgbXVzdCBiZSBhbiBhZG1pbiB0byB0aGUgb3JnYW5pemFpb24gdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb25cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9yZ2FuaXphdGlvbklkIFRoZSBvcmdhbml6YXRpb24gaWRlbnRpZmllclxyXG4gICAgICogQHBhcmFtIGJvZHkgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVPcmdhbml6YXRpb25EZXRhaWxzV2l0aEh0dHBJbmZvKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGJvZHk/OiBVcGRhdGVPcmdhbml6YXRpb25EZXRhaWxzUmVxdWVzdCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8T3JnYW5pemF0aW9uRGV0YWlsUmVzcG9uc2U+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTEyL09yZ2FuaXphdGlvbi8ke29yZ2FuaXphdGlvbklkfS9kZXRhaWwnXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJyR7JyArICdvcmdhbml6YXRpb25JZCcgKyAnfScsIFN0cmluZyhvcmdhbml6YXRpb25JZCkpO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnb3JnYW5pemF0aW9uSWQnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxyXG4gICAgICAgIGlmIChvcmdhbml6YXRpb25JZCA9PT0gbnVsbCB8fCBvcmdhbml6YXRpb25JZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIG9yZ2FuaXphdGlvbklkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdXBkYXRlT3JnYW5pemF0aW9uRGV0YWlscy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnN1bWVzWzBdKTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5ID09IG51bGwgPyAnJyA6IChjb25zdW1lc1swXSA9PSAnYXBwbGljYXRpb24vanNvbicgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IGJvZHkpLCAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDYxMlxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PE9yZ2FuaXphdGlvbkRldGFpbFJlc3BvbnNlPihSZXF1ZXN0TWV0aG9kLlB1dCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
754
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcGkvb3JnYW5pemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBMkIsZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFvQixzQkFBc0IsQ0FBQztBQUl6RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQW9ELGdCQUFnQixDQUFDO0FBV25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBOEMsY0FBYyxDQUFDO0FBR2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBMEMsa0JBQWtCLENBQUM7QUFFckYsTUFBTSxhQUFhLEdBQUc7SUFDbEIsR0FBRyxFQUFFLEtBQUs7SUFDVixJQUFJLEVBQUUsTUFBTTtJQUNaLEdBQUcsRUFBRSxLQUFLO0lBQ1YsTUFBTSxFQUFFLFFBQVE7SUFDaEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsT0FBTztDQUNqQixDQUFDO0FBSUYsTUFBTSxPQUFPLG1CQUFtQjtJQU01QixZQUFzQixJQUFnQixFQUFnQyxRQUFnQixFQUFjLGFBQTRCO1FBQTFHLFNBQUksR0FBSixJQUFJLENBQVk7UUFKNUIsYUFBUSxHQUFHLG1CQUFtQixDQUFDO1FBQ2xDLG1CQUFjLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEQsa0JBQWEsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUd0RCxJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxhQUFhLEVBQUU7WUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLGFB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QUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbEQsT0FBTyxFQUFFLFVBQXdCO1NBQ3BDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUE2QixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNsRyxDQUFDOzs7WUE3MEJKLFVBQVU7OztZQS9CRixVQUFVO3lDQXNDMEIsUUFBUSxZQUFHLE1BQU0sU0FBQyxTQUFTO1lBcEIvRCxhQUFhLHVCQW9CdUUsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFbmVyZ3lDQVAgSUQgU0RLXHJcbiAqIERvY3VtZW50IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEVuZXJneUNBUCBJRCBTREtcclxuICpcclxuICogT3BlbkFQSSBzcGVjIHZlcnNpb246IDEuMjExMlxyXG4gKiBDb250YWN0OiBzdXBwb3J0QGVuZXJneWNhcC5jb21cclxuICpcclxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1jb2RlZ2VuLmdpdFxyXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXHJcbiAqL1xyXG5cclxuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9ICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ3JlYXRlT3JnYW5pemF0aW9uUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2NyZWF0ZU9yZ2FuaXphdGlvblJlcXVlc3QnO1xyXG5pbXBvcnQgeyBIaWVyYXJjaGljYWxPcmdhbml6YXRpb25zIH0gZnJvbSAnLi4vbW9kZWwvaGllcmFyY2hpY2FsT3JnYW5pemF0aW9ucyc7XHJcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xSZXNwb25zZSB9IGZyb20gJy4uL21vZGVsL29yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xSZXNwb25zZSc7XHJcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkRldGFpbFJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWwvb3JnYW5pemF0aW9uRGV0YWlsUmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBPcmdhbml6YXRpb25SZXNwb25zZSB9IGZyb20gJy4uL21vZGVsL29yZ2FuaXphdGlvblJlc3BvbnNlJztcclxuaW1wb3J0IHsgT3JnYW5pemF0aW9uVXNlclJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWwvb3JnYW5pemF0aW9uVXNlclJlc3BvbnNlJztcclxuaW1wb3J0IHsgVXBkYXRlT3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC91cGRhdGVPcmdhbml6YXRpb25BY2Nlc3NDb250cm9sUmVxdWVzdCc7XHJcbmltcG9ydCB7IFVwZGF0ZU9yZ2FuaXphdGlvbkRldGFpbHNSZXF1ZXN0IH0gZnJvbSAnLi4vbW9kZWwvdXBkYXRlT3JnYW5pemF0aW9uRGV0YWlsc1JlcXVlc3QnO1xyXG5cclxuaW1wb3J0IHsgQkFTRV9QQVRIIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XHJcbmltcG9ydCB7IENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xyXG5cclxuY29uc3QgUmVxdWVzdE1ldGhvZCA9IHtcclxuICAgIEdldDogJ2dldCcsXHJcbiAgICBQb3N0OiAncG9zdCcsXHJcbiAgICBQdXQ6ICdwdXQnLFxyXG4gICAgRGVsZXRlOiAnZGVsZXRlJyxcclxuICAgIE9wdGlvbnM6ICdvcHRpb25zJyxcclxuICAgIEhlYWQ6ICdoZWFkJyxcclxuICAgIFBhdGNoOiAncGF0Y2gnXHJcbn07XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgT3JnYW5pemF0aW9uU2VydmljZSB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGJhc2VQYXRoID0gJ2h0dHBzOi8vbG9jYWxob3N0JztcclxuICAgIHB1YmxpYyBkZWZhdWx0SGVhZGVyczogSHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgIHB1YmxpYyBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZywgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIGlmIChiYXNlUGF0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XHJcblx0XHRcdHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aCB8fCBjb25maWd1cmF0aW9uLmJhc2VQYXRoIHx8IHRoaXMuYmFzZVBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBFeHRlbmRzIG9iamVjdCBieSBjb3Bpbmcgbm9uLWV4aXN0aW5nIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0gb2JqQSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcclxuICAgICAqIEBwYXJhbSBvYmpCIHNvdXJjZSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBleHRlbmRPYmo8VDEsVDI+KG9iakE6IFQxLCBvYmpCOiBUMikge1xyXG4gICAgICAgIGZvcihsZXQga2V5IGluIG9iakIpe1xyXG4gICAgICAgICAgICBpZihvYmpCLmhhc093blByb3BlcnR5KGtleSkpe1xyXG4gICAgICAgICAgICAgICAgKG9iakEgYXMgYW55KVtrZXldID0gKG9iakIgYXMgYW55KVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA8VDEmVDI+b2JqQTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSBjb25zdW1lcyBzdHJpbmdbXSBtaW1lLXR5cGVzXHJcbiAgICAgKiBAcmV0dXJuIHRydWU6IGNvbnN1bWVzIGNvbnRhaW5zICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgZmFsc2U6IG90aGVyd2lzZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNhbkNvbnN1bWVGb3JtKGNvbnN1bWVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGZvcm0gPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc7XHJcbiAgICAgICAgZm9yIChsZXQgY29uc3VtZSBvZiBjb25zdW1lcykge1xyXG4gICAgICAgICAgICBpZiAoZm9ybSA9PT0gY29uc3VtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IG9yZ2FuaXphdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgXHJcbiAgICAgKiBAcGFyYW0gYm9keSBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNyZWF0ZU9yZ2FuaXphdGlvbihvcmdhbml6YXRpb25JZDogc3RyaW5nLCBib2R5PzogQ3JlYXRlT3JnYW5pemF0aW9uUmVxdWVzdCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxPcmdhbml6YXRpb25SZXNwb25zZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9yZ2FuaXphdGlvbldpdGhIdHRwSW5mbyhvcmdhbml6YXRpb25JZCwgYm9keSwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPE9yZ2FuaXphdGlvblJlc3BvbnNlPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3JnYW5pemF0aW9uIGFjY2VzcyBjb250cm9sIGRhdGEgIFlvdSBtdXN0IGJlIGFuIGFkbWluIHRvIHRoZSBvcmdhbml6YWlvbiB0byBnZXQgdGhpcyBpbmZvcm1hdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgVGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25BY2Nlc3NDb250cm9sKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8T3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFdpdGhIdHRwSW5mbyhvcmdhbml6YXRpb25JZCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPE9yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xSZXNwb25zZT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IGFuIE9yZ2FuaXphdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgVGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25CeUlkKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8T3JnYW5pemF0aW9uUmVzcG9uc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcmdhbml6YXRpb25CeUlkV2l0aEh0dHBJbmZvKG9yZ2FuaXphdGlvbklkLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8T3JnYW5pemF0aW9uUmVzcG9uc2U+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhZGRpdGlvbmFsIGRldGFpbCBpbmZvcm1hdGlvbiBhYm91dCBhbiBPcmdhbml6YXRpb24gIFlvdSBtdXN0IGJlIGFuIGFkbWluIHRvIHRoZSBvcmdhbml6YWlvbiB0byBnZXQgdGhpcyBpbmZvcm1hdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgVGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25EZXRhaWxzKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8T3JnYW5pemF0aW9uRGV0YWlsUmVzcG9uc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcmdhbml6YXRpb25EZXRhaWxzV2l0aEh0dHBJbmZvKG9yZ2FuaXphdGlvbklkLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8T3JnYW5pemF0aW9uRGV0YWlsUmVzcG9uc2U+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB5b3VyIGVudGlyZSBvcmdhbml6YXRpb24gaGllcmFyY2h5ICBGb3IgcGVyZm9ybWFuY2UgcmV0dXJucyBhIG1heCBwYWdlIHNpemUgb2YgMTAwXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldE9yZ2FuaXphdGlvbkhpZXJhcmNoeShleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEFycmF5PEhpZXJhcmNoaWNhbE9yZ2FuaXphdGlvbnM+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JnYW5pemF0aW9uSGllcmFyY2h5V2l0aEh0dHBJbmZvKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxBcnJheTxIaWVyYXJjaGljYWxPcmdhbml6YXRpb25zPj4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHVzZXJzIGxpbmtlZCB0byBhbiBvcmdhbml6YXRpb25cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9yZ2FuaXphdGlvbklkIFRoZSBvcmdhbml6YXRpb24gaWRlbnRpZmllclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0T3JnYW5pemF0aW9uVXNlcnMob3JnYW5pemF0aW9uSWQ6IHN0cmluZywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxBcnJheTxPcmdhbml6YXRpb25Vc2VyUmVzcG9uc2U+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JnYW5pemF0aW9uVXNlcnNXaXRoSHR0cEluZm8ob3JnYW5pemF0aW9uSWQsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxBcnJheTxPcmdhbml6YXRpb25Vc2VyUmVzcG9uc2U+PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG9yZ2FuaXphdGlvbnMgdG8gd2hpY2ggdGhlIGxvZ2dlZCBpbiB1c2VyIGhhcyBhY2Nlc3NcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGZpbHRlciBcclxuICAgICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJldHVybiBpbiBhIHBhZ2UgKGRlZmF1bHRzIHRvIDUwIGVsZW1lbnRzKVxyXG4gICAgICogQHBhcmFtIHBhZ2VOdW1iZXIgVGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldE9yZ2FuaXphdGlvbnMoZmlsdGVyPzogc3RyaW5nLCBwYWdlU2l6ZT86IG51bWJlciwgcGFnZU51bWJlcj86IG51bWJlciwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxBcnJheTxPcmdhbml6YXRpb25SZXNwb25zZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcmdhbml6YXRpb25zV2l0aEh0dHBJbmZvKGZpbHRlciwgcGFnZVNpemUsIHBhZ2VOdW1iZXIsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxBcnJheTxPcmdhbml6YXRpb25SZXNwb25zZT4+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBxdWVyeSBcclxuICAgICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJldHVybiBpbiBhIHBhZ2UgKGRlZmF1bHRzIHRvIDUwIGVsZW1lbnRzKVxyXG4gICAgICogQHBhcmFtIHBhZ2VOdW1iZXIgVGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNlYXJjaE9yZ2FuaXphdGlvbnMocXVlcnk/OiBzdHJpbmcsIHBhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEFycmF5PE9yZ2FuaXphdGlvblJlc3BvbnNlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaE9yZ2FuaXphdGlvbnNXaXRoSHR0cEluZm8ocXVlcnksIHBhZ2VTaXplLCBwYWdlTnVtYmVyLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8QXJyYXk8T3JnYW5pemF0aW9uUmVzcG9uc2U+PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBvcmdhbml6YXRpb24gYWNjZXNzIGNvbnRyb2wgZGF0YSAgWW91IG11c3QgYmUgYW4gYWRtaW4gdG8gdGhlIG9yZ2FuaXphaW9uIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBvcmdhbml6YXRpb25JZCBUaGUgb3JnYW5pemF0aW9uIGlkZW50aWZpZXJcclxuICAgICAqIEBwYXJhbSBib2R5IFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlT3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbChvcmdhbml6YXRpb25JZDogc3RyaW5nLCBib2R5PzogVXBkYXRlT3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFJlcXVlc3QsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8T3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFdpdGhIdHRwSW5mbyhvcmdhbml6YXRpb25JZCwgYm9keSwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPE9yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xSZXNwb25zZT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgb3JnYW5pemF0aW9uIGRldGFpbHMgIFlvdSBtdXN0IGJlIGFuIGFkbWluIHRvIHRoZSBvcmdhbml6YWlvbiB0byBnZXQgdGhpcyBpbmZvcm1hdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgVGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyXHJcbiAgICAgKiBAcGFyYW0gYm9keSBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZU9yZ2FuaXphdGlvbkRldGFpbHMob3JnYW5pemF0aW9uSWQ6IHN0cmluZywgYm9keT86IFVwZGF0ZU9yZ2FuaXphdGlvbkRldGFpbHNSZXF1ZXN0LCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPE9yZ2FuaXphdGlvbkRldGFpbFJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JnYW5pemF0aW9uRGV0YWlsc1dpdGhIdHRwSW5mbyhvcmdhbml6YXRpb25JZCwgYm9keSwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPE9yZ2FuaXphdGlvbkRldGFpbFJlc3BvbnNlPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBuZXcgb3JnYW5pemF0aW9uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBvcmdhbml6YXRpb25JZCBcclxuICAgICAqIEBwYXJhbSBib2R5IFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY3JlYXRlT3JnYW5pemF0aW9uV2l0aEh0dHBJbmZvKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGJvZHk/OiBDcmVhdGVPcmdhbml6YXRpb25SZXF1ZXN0LCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxPcmdhbml6YXRpb25SZXNwb25zZT4+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5iYXNlUGF0aCArICcvYXBpL3YyMDIxMTIvT3JnYW5pemF0aW9uLyR7b3JnYW5pemF0aW9uSWR9J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnb3JnYW5pemF0aW9uSWQnICsgJ30nLCBTdHJpbmcob3JnYW5pemF0aW9uSWQpKTtcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ29yZ2FuaXphdGlvbklkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAob3JnYW5pemF0aW9uSWQgPT09IG51bGwgfHwgb3JnYW5pemF0aW9uSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBvcmdhbml6YXRpb25JZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGNyZWF0ZU9yZ2FuaXphdGlvbi4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnN1bWVzWzBdKTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5ID09IG51bGwgPyAnJyA6IChjb25zdW1lc1swXSA9PSAnYXBwbGljYXRpb24vanNvbicgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IGJvZHkpLCAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDYxMlxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PE9yZ2FuaXphdGlvblJlc3BvbnNlPihSZXF1ZXN0TWV0aG9kLlBvc3QsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3JnYW5pemF0aW9uIGFjY2VzcyBjb250cm9sIGRhdGEgIFlvdSBtdXN0IGJlIGFuIGFkbWluIHRvIHRoZSBvcmdhbml6YWlvbiB0byBnZXQgdGhpcyBpbmZvcm1hdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgVGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25BY2Nlc3NDb250cm9sV2l0aEh0dHBJbmZvKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPE9yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xSZXNwb25zZT4+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5iYXNlUGF0aCArICcvYXBpL3YyMDIxMTIvT3JnYW5pemF0aW9uLyR7b3JnYW5pemF0aW9uSWR9L2FjY2Vzc2NvbnRyb2wnXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJyR7JyArICdvcmdhbml6YXRpb25JZCcgKyAnfScsIFN0cmluZyhvcmdhbml6YXRpb25JZCkpO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnb3JnYW5pemF0aW9uSWQnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxyXG4gICAgICAgIGlmIChvcmdhbml6YXRpb25JZCA9PT0gbnVsbCB8fCBvcmdhbml6YXRpb25JZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIG9yZ2FuaXphdGlvbklkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0T3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6dGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAncmVzcG9uc2UnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8T3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFJlc3BvbnNlPihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCBhbiBPcmdhbml6YXRpb25cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9yZ2FuaXphdGlvbklkIFRoZSBvcmdhbml6YXRpb24gaWRlbnRpZmllclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0T3JnYW5pemF0aW9uQnlJZFdpdGhIdHRwSW5mbyhvcmdhbml6YXRpb25JZDogc3RyaW5nLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxPcmdhbml6YXRpb25SZXNwb25zZT4+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5iYXNlUGF0aCArICcvYXBpL3YyMDIxMDgvT3JnYW5pemF0aW9uLyR7b3JnYW5pemF0aW9uSWR9J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnb3JnYW5pemF0aW9uSWQnICsgJ30nLCBTdHJpbmcob3JnYW5pemF0aW9uSWQpKTtcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ29yZ2FuaXphdGlvbklkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAob3JnYW5pemF0aW9uSWQgPT09IG51bGwgfHwgb3JnYW5pemF0aW9uSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBvcmdhbml6YXRpb25JZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldE9yZ2FuaXphdGlvbkJ5SWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PE9yZ2FuaXphdGlvblJlc3BvbnNlPihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhZGRpdGlvbmFsIGRldGFpbCBpbmZvcm1hdGlvbiBhYm91dCBhbiBPcmdhbml6YXRpb24gIFlvdSBtdXN0IGJlIGFuIGFkbWluIHRvIHRoZSBvcmdhbml6YWlvbiB0byBnZXQgdGhpcyBpbmZvcm1hdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgVGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25EZXRhaWxzV2l0aEh0dHBJbmZvKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPE9yZ2FuaXphdGlvbkRldGFpbFJlc3BvbnNlPj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjIwMjExMi9Pcmdhbml6YXRpb24vJHtvcmdhbml6YXRpb25JZH0vZGV0YWlsJ1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnb3JnYW5pemF0aW9uSWQnICsgJ30nLCBTdHJpbmcob3JnYW5pemF0aW9uSWQpKTtcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ29yZ2FuaXphdGlvbklkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAob3JnYW5pemF0aW9uSWQgPT09IG51bGwgfHwgb3JnYW5pemF0aW9uSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBvcmdhbml6YXRpb25JZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldE9yZ2FuaXphdGlvbkRldGFpbHMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PE9yZ2FuaXphdGlvbkRldGFpbFJlc3BvbnNlPihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB5b3VyIGVudGlyZSBvcmdhbml6YXRpb24gaGllcmFyY2h5ICBGb3IgcGVyZm9ybWFuY2UgcmV0dXJucyBhIG1heCBwYWdlIHNpemUgb2YgMTAwXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldE9yZ2FuaXphdGlvbkhpZXJhcmNoeVdpdGhIdHRwSW5mbyhleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheTxIaWVyYXJjaGljYWxPcmdhbml6YXRpb25zPj4+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5iYXNlUGF0aCArICcvYXBpL3YyMDIxMTIvT3JnYW5pemF0aW9uL2hpZXJhcmNoeSc7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxBcnJheTxIaWVyYXJjaGljYWxPcmdhbml6YXRpb25zPj4oUmVxdWVzdE1ldGhvZC5HZXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdXNlcnMgbGlua2VkIHRvIGFuIG9yZ2FuaXphdGlvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnYW5pemF0aW9uSWQgVGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25Vc2Vyc1dpdGhIdHRwSW5mbyhvcmdhbml6YXRpb25JZDogc3RyaW5nLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheTxPcmdhbml6YXRpb25Vc2VyUmVzcG9uc2U+Pj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjIwMjExMi9Pcmdhbml6YXRpb24vJHtvcmdhbml6YXRpb25JZH0vdXNlcidcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnJHsnICsgJ29yZ2FuaXphdGlvbklkJyArICd9JywgU3RyaW5nKG9yZ2FuaXphdGlvbklkKSk7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdvcmdhbml6YXRpb25JZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKG9yZ2FuaXphdGlvbklkID09PSBudWxsIHx8IG9yZ2FuaXphdGlvbklkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgb3JnYW5pemF0aW9uSWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRPcmdhbml6YXRpb25Vc2Vycy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6dGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAncmVzcG9uc2UnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8QXJyYXk8T3JnYW5pemF0aW9uVXNlclJlc3BvbnNlPj4oUmVxdWVzdE1ldGhvZC5HZXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG9yZ2FuaXphdGlvbnMgdG8gd2hpY2ggdGhlIGxvZ2dlZCBpbiB1c2VyIGhhcyBhY2Nlc3NcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGZpbHRlciBcclxuICAgICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJldHVybiBpbiBhIHBhZ2UgKGRlZmF1bHRzIHRvIDUwIGVsZW1lbnRzKVxyXG4gICAgICogQHBhcmFtIHBhZ2VOdW1iZXIgVGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldE9yZ2FuaXphdGlvbnNXaXRoSHR0cEluZm8oZmlsdGVyPzogc3RyaW5nLCBwYWdlU2l6ZT86IG51bWJlciwgcGFnZU51bWJlcj86IG51bWJlciwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXk8T3JnYW5pemF0aW9uUmVzcG9uc2U+Pj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjIwMjEwOC9Pcmdhbml6YXRpb24nO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ2ZpbHRlcicsIDxhbnk+ZmlsdGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwYWdlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3BhZ2VTaXplJywgPGFueT5wYWdlU2l6ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFnZU51bWJlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3BhZ2VOdW1iZXInLCA8YW55PnBhZ2VOdW1iZXIpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6dGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAncmVzcG9uc2UnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8QXJyYXk8T3JnYW5pemF0aW9uUmVzcG9uc2U+PihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBxdWVyeSBcclxuICAgICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJldHVybiBpbiBhIHBhZ2UgKGRlZmF1bHRzIHRvIDUwIGVsZW1lbnRzKVxyXG4gICAgICogQHBhcmFtIHBhZ2VOdW1iZXIgVGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNlYXJjaE9yZ2FuaXphdGlvbnNXaXRoSHR0cEluZm8ocXVlcnk/OiBzdHJpbmcsIHBhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheTxPcmdhbml6YXRpb25SZXNwb25zZT4+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTEyL09yZ2FuaXphdGlvbi9zZWFyY2gnO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgncXVlcnknLCA8YW55PnF1ZXJ5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwYWdlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3BhZ2VTaXplJywgPGFueT5wYWdlU2l6ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFnZU51bWJlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3BhZ2VOdW1iZXInLCA8YW55PnBhZ2VOdW1iZXIpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6dGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAncmVzcG9uc2UnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8QXJyYXk8T3JnYW5pemF0aW9uUmVzcG9uc2U+PihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIG9yZ2FuaXphdGlvbiBhY2Nlc3MgY29udHJvbCBkYXRhICBZb3UgbXVzdCBiZSBhbiBhZG1pbiB0byB0aGUgb3JnYW5pemFpb24gdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb25cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9yZ2FuaXphdGlvbklkIFRoZSBvcmdhbml6YXRpb24gaWRlbnRpZmllclxyXG4gICAgICogQHBhcmFtIGJvZHkgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVPcmdhbml6YXRpb25BY2Nlc3NDb250cm9sV2l0aEh0dHBJbmZvKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGJvZHk/OiBVcGRhdGVPcmdhbml6YXRpb25BY2Nlc3NDb250cm9sUmVxdWVzdCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8T3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFJlc3BvbnNlPj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjIwMjExMi9Pcmdhbml6YXRpb24vJHtvcmdhbml6YXRpb25JZH0vYWNjZXNzY29udHJvbCdcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnJHsnICsgJ29yZ2FuaXphdGlvbklkJyArICd9JywgU3RyaW5nKG9yZ2FuaXphdGlvbklkKSk7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdvcmdhbml6YXRpb25JZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKG9yZ2FuaXphdGlvbklkID09PSBudWxsIHx8IG9yZ2FuaXphdGlvbklkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgb3JnYW5pemF0aW9uSWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cGRhdGVPcmdhbml6YXRpb25BY2Nlc3NDb250cm9sLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgY29uc3VtZXNbMF0pO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHkgPT0gbnVsbCA/ICcnIDogKGNvbnN1bWVzWzBdID09ICdhcHBsaWNhdGlvbi9qc29uJyA/IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogYm9keSksIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEwNjEyXHJcbiAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6dGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAncmVzcG9uc2UnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8T3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFJlc3BvbnNlPihSZXF1ZXN0TWV0aG9kLlB1dCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIG9yZ2FuaXphdGlvbiBkZXRhaWxzICBZb3UgbXVzdCBiZSBhbiBhZG1pbiB0byB0aGUgb3JnYW5pemFpb24gdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb25cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9yZ2FuaXphdGlvbklkIFRoZSBvcmdhbml6YXRpb24gaWRlbnRpZmllclxyXG4gICAgICogQHBhcmFtIGJvZHkgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVPcmdhbml6YXRpb25EZXRhaWxzV2l0aEh0dHBJbmZvKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGJvZHk/OiBVcGRhdGVPcmdhbml6YXRpb25EZXRhaWxzUmVxdWVzdCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8T3JnYW5pemF0aW9uRGV0YWlsUmVzcG9uc2U+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTEyL09yZ2FuaXphdGlvbi8ke29yZ2FuaXphdGlvbklkfS9kZXRhaWwnXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJyR7JyArICdvcmdhbml6YXRpb25JZCcgKyAnfScsIFN0cmluZyhvcmdhbml6YXRpb25JZCkpO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnb3JnYW5pemF0aW9uSWQnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxyXG4gICAgICAgIGlmIChvcmdhbml6YXRpb25JZCA9PT0gbnVsbCB8fCBvcmdhbml6YXRpb25JZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIG9yZ2FuaXphdGlvbklkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdXBkYXRlT3JnYW5pemF0aW9uRGV0YWlscy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnN1bWVzWzBdKTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5ID09IG51bGwgPyAnJyA6IChjb25zdW1lc1swXSA9PSAnYXBwbGljYXRpb24vanNvbicgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IGJvZHkpLCAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDYxMlxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PE9yZ2FuaXphdGlvbkRldGFpbFJlc3BvbnNlPihSZXF1ZXN0TWV0aG9kLlB1dCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
@@ -14,4 +14,4 @@
14
14
  */
15
15
  export class DomainJoinTypeResponse {
16
16
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluSm9pblR5cGVSZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL21vZGVsL2RvbWFpbkpvaW5UeXBlUmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUlIOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtDQWdCbEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogRW5lcmd5Q0FQIElEIFNES1xyXG4gKiBEb2N1bWVudCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBFbmVyZ3lDQVAgSUQgU0RLXHJcbiAqXHJcbiAqIE9wZW5BUEkgc3BlYyB2ZXJzaW9uOiAxLjIxMTJcclxuICogQ29udGFjdDogc3VwcG9ydEBlbmVyZ3ljYXAuY29tXHJcbiAqXHJcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHN3YWdnZXIgY29kZSBnZW5lcmF0b3IgcHJvZ3JhbS5cclxuICogaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItY29kZWdlbi5naXRcclxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxyXG4gKi9cclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIERvbWFpbiBKb2luIFR5cGVzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRG9tYWluSm9pblR5cGVSZXNwb25zZSB7XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgSWQuXHJcbiAgICAgKi9cclxuICAgIGlkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBsYWJlbC5cclxuICAgICAqL1xyXG4gICAgbGFiZWw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yIHNldHMgdGhlIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIG5hbWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG59XHJcbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluSm9pblR5cGVSZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL21vZGVsL2RvbWFpbkpvaW5UeXBlUmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUlIOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtDQVdsQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFbmVyZ3lDQVAgSUQgU0RLXHJcbiAqIERvY3VtZW50IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEVuZXJneUNBUCBJRCBTREtcclxuICpcclxuICogT3BlbkFQSSBzcGVjIHZlcnNpb246IDEuMjExMlxyXG4gKiBDb250YWN0OiBzdXBwb3J0QGVuZXJneWNhcC5jb21cclxuICpcclxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1jb2RlZ2VuLmdpdFxyXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXHJcbiAqL1xyXG5cclxuXHJcblxyXG4vKipcclxuICogRG9tYWluIEpvaW4gVHlwZXNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBEb21haW5Kb2luVHlwZVJlc3BvbnNlIHtcclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBJZC5cclxuICAgICAqL1xyXG4gICAgaWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yIHNldHMgdGhlIGxhYmVsLlxyXG4gICAgICovXHJcbiAgICBsYWJlbDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbn1cclxuIl19
@@ -43,10 +43,11 @@ export * from './userAuthResultEnum';
43
43
  export * from './userChild';
44
44
  export * from './userLoginRequest';
45
45
  export * from './userOrganizationResponse';
46
+ export * from './userOrganizationStateEnum';
46
47
  export * from './userPermissionRequest';
47
48
  export * from './userPermissionResponse';
48
49
  export * from './userResponse';
49
50
  export * from './userStatusEnum';
50
51
  export * from './validatePasswordRequest';
51
52
  export * from './validatePasswordResponse';
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbW9kZWwvbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYVBJRmlsdGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9hUElPcmRlckJ5JztcclxuZXhwb3J0ICogZnJvbSAnLi9hbGxVc2VyUGVybWlzc2lvbnNSZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYXBwbGljYXRpb25JbnN0YW5jZURldGFpbFJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9hcHBsaWNhdGlvbkluc3RhbmNlUmVkaXJlY3RSZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYXBwbGljYXRpb25JbnN0YW5jZVJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9hcHBsaWNhdGlvbkluc3RhbmNlVXNlclJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9hcHBsaWNhdGlvblJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9jaGFuZ2VQYXNzd29yZFJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NyZWF0ZU9yZ2FuaXphdGlvblJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RhdGFTb3VyY2VSZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGF0YVNvdXJjZVVwZGF0ZVJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RvbWFpbkFjY2Vzc0NvbnRyb2xSZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZG9tYWluSm9pblR5cGVSZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZW50aXR5UGVybWlzc2lvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vZW52aXJvbm1lbnRSZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vaGllcmFyY2hpY2FsT3JnYW5pemF0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vaGllcmFyY2hpY2FsT3JnYW5pemF0aW9uczInO1xyXG5leHBvcnQgKiBmcm9tICcuL2ludml0ZVVzZXJSZXF1ZXN0JztcclxuZXhwb3J0ICogZnJvbSAnLi9saW5rRGF0YVNvdXJjZVJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xvZ2luUmVzcG9uc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xvZ2luU291cmNlUmVzcG9uc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbkJhZGdlUmVzcG9uc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbkNhdGVnb3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9ub3RpZmljYXRpb25SZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9uU2V0dGluZ1JlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvblR5cGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvblVwZGF0ZVJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL29yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xSZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vb3JnYW5pemF0aW9uQXBwbGljYXRpb25SZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vb3JnYW5pemF0aW9uRGV0YWlsUmVzcG9uc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL29yZ2FuaXphdGlvblJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9vcmdhbml6YXRpb25Vc2VyUmVzcG9uc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Jlc2V0UGFzc3dvcmRSZXF1ZXN0JztcclxuZXhwb3J0ICogZnJvbSAnLi9yb2xlRW51bSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VsZkNyZWF0ZVVzZXJSZXF1ZXN0JztcclxuZXhwb3J0ICogZnJvbSAnLi91cGRhdGVNZVJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL3VwZGF0ZU9yZ2FuaXphdGlvbkFjY2Vzc0NvbnRyb2xSZXF1ZXN0JztcclxuZXhwb3J0ICogZnJvbSAnLi91cGRhdGVPcmdhbml6YXRpb25EZXRhaWxzUmVxdWVzdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXBkYXRlUmVzdWx0JztcclxuZXhwb3J0ICogZnJvbSAnLi91c2VyQXBwbGljYXRpb25JbnN0YW5jZVJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi91c2VyQXV0aFJlc3VsdEVudW0nO1xyXG5leHBvcnQgKiBmcm9tICcuL3VzZXJDaGlsZCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXNlckxvZ2luUmVxdWVzdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXNlck9yZ2FuaXphdGlvblJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi91c2VyUGVybWlzc2lvblJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL3VzZXJQZXJtaXNzaW9uUmVzcG9uc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3VzZXJSZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXNlclN0YXR1c0VudW0nO1xyXG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRlUGFzc3dvcmRSZXF1ZXN0JztcclxuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0ZVBhc3N3b3JkUmVzcG9uc2UnO1xyXG4iXX0=
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbW9kZWwvbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hUElGaWx0ZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL2FQSU9yZGVyQnknO1xyXG5leHBvcnQgKiBmcm9tICcuL2FsbFVzZXJQZXJtaXNzaW9uc1Jlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9hcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlsUmVzcG9uc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2FwcGxpY2F0aW9uSW5zdGFuY2VSZWRpcmVjdFJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9hcHBsaWNhdGlvbkluc3RhbmNlUmVzcG9uc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2FwcGxpY2F0aW9uSW5zdGFuY2VVc2VyUmVzcG9uc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2FwcGxpY2F0aW9uUmVzcG9uc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NoYW5nZVBhc3N3b3JkUmVxdWVzdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlT3JnYW5pemF0aW9uUmVxdWVzdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGF0YVNvdXJjZVJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9kYXRhU291cmNlVXBkYXRlUmVxdWVzdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZG9tYWluQWNjZXNzQ29udHJvbFJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9kb21haW5Kb2luVHlwZVJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9lbnRpdHlQZXJtaXNzaW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9lbnZpcm9ubWVudFJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9oaWVyYXJjaGljYWxPcmdhbml6YXRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9oaWVyYXJjaGljYWxPcmdhbml6YXRpb25zMic7XHJcbmV4cG9ydCAqIGZyb20gJy4vaW52aXRlVXNlclJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpbmtEYXRhU291cmNlUmVxdWVzdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbG9naW5SZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbG9naW5Tb3VyY2VSZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9uQmFkZ2VSZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9uQ2F0ZWdvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvblJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9ub3RpZmljYXRpb25TZXR0aW5nUmVxdWVzdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9uVHlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9uVXBkYXRlUmVxdWVzdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vb3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9vcmdhbml6YXRpb25BcHBsaWNhdGlvblJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9vcmdhbml6YXRpb25EZXRhaWxSZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vb3JnYW5pemF0aW9uUmVzcG9uc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL29yZ2FuaXphdGlvblVzZXJSZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcmVzZXRQYXNzd29yZFJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL3JvbGVFbnVtJztcclxuZXhwb3J0ICogZnJvbSAnLi9zZWxmQ3JlYXRlVXNlclJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL3VwZGF0ZU1lUmVxdWVzdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXBkYXRlT3JnYW5pemF0aW9uQWNjZXNzQ29udHJvbFJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL3VwZGF0ZU9yZ2FuaXphdGlvbkRldGFpbHNSZXF1ZXN0JztcclxuZXhwb3J0ICogZnJvbSAnLi91cGRhdGVSZXN1bHQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3VzZXJBcHBsaWNhdGlvbkluc3RhbmNlUmVzcG9uc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3VzZXJBdXRoUmVzdWx0RW51bSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXNlckNoaWxkJztcclxuZXhwb3J0ICogZnJvbSAnLi91c2VyTG9naW5SZXF1ZXN0JztcclxuZXhwb3J0ICogZnJvbSAnLi91c2VyT3JnYW5pemF0aW9uUmVzcG9uc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3VzZXJPcmdhbml6YXRpb25TdGF0ZUVudW0nO1xyXG5leHBvcnQgKiBmcm9tICcuL3VzZXJQZXJtaXNzaW9uUmVxdWVzdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXNlclBlcm1pc3Npb25SZXNwb25zZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXNlclJlc3BvbnNlJztcclxuZXhwb3J0ICogZnJvbSAnLi91c2VyU3RhdHVzRW51bSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdmFsaWRhdGVQYXNzd29yZFJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRlUGFzc3dvcmRSZXNwb25zZSc7XHJcbiJdfQ==
@@ -14,4 +14,4 @@
14
14
  */
15
15
  export class OrganizationResponse {
16
16
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uUmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tb2RlbC9vcmdhbml6YXRpb25SZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBS0g7O0dBRUc7QUFDSCxNQUFNLE9BQU8sb0JBQW9CO0NBb0VoQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFbmVyZ3lDQVAgSUQgU0RLXHJcbiAqIERvY3VtZW50IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEVuZXJneUNBUCBJRCBTREtcclxuICpcclxuICogT3BlbkFQSSBzcGVjIHZlcnNpb246IDEuMjExMlxyXG4gKiBDb250YWN0OiBzdXBwb3J0QGVuZXJneWNhcC5jb21cclxuICpcclxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1jb2RlZ2VuLmdpdFxyXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9sZUVudW0gfSBmcm9tICcuL3JvbGVFbnVtJztcclxuXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgbW9yZSBkZXRhaWxlZCBkYXRhIGFib3V0IGFuIG9yZ2FuaXphdGlvblxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE9yZ2FuaXphdGlvblJlc3BvbnNlIHtcclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBuYW1lLlxyXG4gICAgICovXHJcbiAgICBuYW1lOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBsYWJlbC5cclxuICAgICAqL1xyXG4gICAgbGFiZWw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHByb2R1Y3QuXHJcbiAgICAgKi9cclxuICAgIHByb2R1Y3Q6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHR5cGUgb2YgdGhlIG9yZ2FuaXphdGlvbi5cclxuICAgICAqL1xyXG4gICAgb3JnYW5pemF0aW9uVHlwZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgdXNlciBudW1iZXIuXHJcbiAgICAgKi9cclxuICAgIHVzZXJOdW1iZXI6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHZhbGlkYXRpb24gY29kZS5cclxuICAgICAqL1xyXG4gICAgdmFsaWRhdGlvbkNvZGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yIHNldHMgdGhlIG1haW50ZW5hbmNlIHJlbmV3YWwgZGF0ZS5cclxuICAgICAqL1xyXG4gICAgbWFpbnRlbmFuY2VSZW5ld2FsRGF0ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgbWV0YWRhdGEuXHJcbiAgICAgKi9cclxuICAgIG1ldGFkYXRhOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBwYXJlbnQgb3JnYW5pemF0aW9uIGlkZW50aWZpZXIuXHJcbiAgICAgKi9cclxuICAgIHBhcmVudE9yZ2FuaXphdGlvbklkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBwYXJlbnQgbmFtZS5cclxuICAgICAqL1xyXG4gICAgcGFyZW50T3JnYW5pemF0aW9uTmFtZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgcGFyZW50IGxhYmVsLlxyXG4gICAgICovXHJcbiAgICBwYXJlbnRPcmdhbml6YXRpb25MYWJlbDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgaWRlbnRpZmllciBvZiB0aGUgRW50aXR5LlxyXG4gICAgICovXHJcbiAgICBpZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICByb2xlOiBSb2xlRW51bSB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBpbnN0YW5jZSBpcyBpbmhlcml0ZWQuXHJcbiAgICAgKi9cclxuICAgIGlzSW5oZXJpdGVkOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbn1cclxuIl19
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uUmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tb2RlbC9vcmdhbml6YXRpb25SZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBTUg7O0dBRUc7QUFDSCxNQUFNLE9BQU8sb0JBQW9CO0NBMkVoQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFbmVyZ3lDQVAgSUQgU0RLXHJcbiAqIERvY3VtZW50IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEVuZXJneUNBUCBJRCBTREtcclxuICpcclxuICogT3BlbkFQSSBzcGVjIHZlcnNpb246IDEuMjExMlxyXG4gKiBDb250YWN0OiBzdXBwb3J0QGVuZXJneWNhcC5jb21cclxuICpcclxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1jb2RlZ2VuLmdpdFxyXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUm9sZUVudW0gfSBmcm9tICcuL3JvbGVFbnVtJztcclxuaW1wb3J0IHsgVXNlck9yZ2FuaXphdGlvblN0YXRlRW51bSB9IGZyb20gJy4vdXNlck9yZ2FuaXphdGlvblN0YXRlRW51bSc7XHJcblxyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1vcmUgZGV0YWlsZWQgZGF0YSBhYm91dCBhbiBvcmdhbml6YXRpb25cclxuICovXHJcbmV4cG9ydCBjbGFzcyBPcmdhbml6YXRpb25SZXNwb25zZSB7XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgbmFtZS5cclxuICAgICAqL1xyXG4gICAgbmFtZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgbGFiZWwuXHJcbiAgICAgKi9cclxuICAgIGxhYmVsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBwcm9kdWN0LlxyXG4gICAgICovXHJcbiAgICBwcm9kdWN0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSB0eXBlIG9mIHRoZSBvcmdhbml6YXRpb24uXHJcbiAgICAgKi9cclxuICAgIG9yZ2FuaXphdGlvblR5cGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHVzZXIgbnVtYmVyLlxyXG4gICAgICovXHJcbiAgICB1c2VyTnVtYmVyOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSB2YWxpZGF0aW9uIGNvZGUuXHJcbiAgICAgKi9cclxuICAgIHZhbGlkYXRpb25Db2RlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBtYWludGVuYW5jZSByZW5ld2FsIGRhdGUuXHJcbiAgICAgKi9cclxuICAgIG1haW50ZW5hbmNlUmVuZXdhbERhdGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yIHNldHMgdGhlIG1ldGFkYXRhLlxyXG4gICAgICovXHJcbiAgICBtZXRhZGF0YTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgcGFyZW50IG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyLlxyXG4gICAgICovXHJcbiAgICBwYXJlbnRPcmdhbml6YXRpb25JZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgcGFyZW50IG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHBhcmVudE9yZ2FuaXphdGlvbk5hbWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHBhcmVudCBsYWJlbC5cclxuICAgICAqL1xyXG4gICAgcGFyZW50T3JnYW5pemF0aW9uTGFiZWw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yIHNldHMgdGhlIENhbiBIYXZlIENoaWxkcmVuIGZsYWdcclxuICAgICAqL1xyXG4gICAgY2FuSGF2ZUNoaWxkcmVuOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICB1c2VyQWNjZXNzU3RhdGU6IFVzZXJPcmdhbml6YXRpb25TdGF0ZUVudW0gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBFbnRpdHkuXHJcbiAgICAgKi9cclxuICAgIGlkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHJvbGU6IFJvbGVFbnVtIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGlzIGluc3RhbmNlIGlzIGluaGVyaXRlZC5cclxuICAgICAqL1xyXG4gICAgaXNJbmhlcml0ZWQ6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxufVxyXG4iXX0=
@@ -0,0 +1,19 @@
1
+ /**
2
+ * EnergyCAP ID SDK
3
+ * Document used to generate the EnergyCAP ID SDK
4
+ *
5
+ * OpenAPI spec version: 1.2112
6
+ * Contact: support@energycap.com
7
+ *
8
+ * NOTE: This class is auto generated by the swagger code generator program.
9
+ * https://github.com/swagger-api/swagger-codegen.git
10
+ * Do not edit the class manually.
11
+ */
12
+ export var UserOrganizationStateEnum;
13
+ (function (UserOrganizationStateEnum) {
14
+ UserOrganizationStateEnum[UserOrganizationStateEnum["Member"] = 'Member'] = "Member";
15
+ UserOrganizationStateEnum[UserOrganizationStateEnum["JoinRequestPending"] = 'JoinRequestPending'] = "JoinRequestPending";
16
+ UserOrganizationStateEnum[UserOrganizationStateEnum["CanRequestJoin"] = 'CanRequestJoin'] = "CanRequestJoin";
17
+ UserOrganizationStateEnum[UserOrganizationStateEnum["AutoJoinable"] = 'AutoJoinable'] = "AutoJoinable";
18
+ })(UserOrganizationStateEnum || (UserOrganizationStateEnum = {}));
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlck9yZ2FuaXphdGlvblN0YXRlRW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL21vZGVsL3VzZXJPcmdhbml6YXRpb25TdGF0ZUVudW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUlILE1BQU0sQ0FBTixJQUFZLHlCQUtYO0FBTEQsV0FBWSx5QkFBeUI7SUFDakMsZ0VBQWUsUUFBUSxZQUFBLENBQUE7SUFDdkIsNEVBQTJCLG9CQUFvQix3QkFBQSxDQUFBO0lBQy9DLHdFQUF1QixnQkFBZ0Isb0JBQUEsQ0FBQTtJQUN2QyxzRUFBcUIsY0FBYyxrQkFBQSxDQUFBO0FBQ3ZDLENBQUMsRUFMVyx5QkFBeUIsS0FBekIseUJBQXlCLFFBS3BDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEVuZXJneUNBUCBJRCBTREtcclxuICogRG9jdW1lbnQgdXNlZCB0byBnZW5lcmF0ZSB0aGUgRW5lcmd5Q0FQIElEIFNES1xyXG4gKlxyXG4gKiBPcGVuQVBJIHNwZWMgdmVyc2lvbjogMS4yMTEyXHJcbiAqIENvbnRhY3Q6IHN1cHBvcnRAZW5lcmd5Y2FwLmNvbVxyXG4gKlxyXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzd2FnZ2VyIGNvZGUgZ2VuZXJhdG9yIHByb2dyYW0uXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLWNvZGVnZW4uZ2l0XHJcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cclxuICovXHJcblxyXG5cclxuXHJcbmV4cG9ydCBlbnVtIFVzZXJPcmdhbml6YXRpb25TdGF0ZUVudW0ge1xyXG4gICAgTWVtYmVyID0gPGFueT4gJ01lbWJlcicsXHJcbiAgICBKb2luUmVxdWVzdFBlbmRpbmcgPSA8YW55PiAnSm9pblJlcXVlc3RQZW5kaW5nJyxcclxuICAgIENhblJlcXVlc3RKb2luID0gPGFueT4gJ0NhblJlcXVlc3RKb2luJyxcclxuICAgIEF1dG9Kb2luYWJsZSA9IDxhbnk+ICdBdXRvSm9pbmFibGUnXHJcbn1cclxuIl19