@deeksha2309/sunbird-collection-editor 8.0.7 → 8.0.8

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.
Files changed (107) hide show
  1. package/deeksha2309-sunbird-collection-editor.d.ts.map +1 -0
  2. package/esm2022/deeksha2309-sunbird-collection-editor.mjs +5 -0
  3. package/esm2022/lib/collection-editor-library.module.mjs +30 -6
  4. package/esm2022/lib/components/answer/answer.component.mjs +6 -3
  5. package/esm2022/lib/components/app-loader/app-loader.component.mjs +30 -0
  6. package/esm2022/lib/components/asset-browser/asset-browser.component.mjs +30 -12
  7. package/esm2022/lib/components/assign-page-number/assign-page-number.component.mjs +1 -1
  8. package/esm2022/lib/components/bulk-upload/bulk-upload.component.mjs +447 -0
  9. package/esm2022/lib/components/ckeditor-tool/ckeditor-tool.component.mjs +30 -12
  10. package/esm2022/lib/components/collection-icon/collection-icon.component.mjs +3 -3
  11. package/esm2022/lib/components/csv-upload/csv-upload.component.mjs +2 -2
  12. package/esm2022/lib/components/editor/editor.component.mjs +143 -64
  13. package/esm2022/lib/components/fancy-tree/fancy-tree.component.mjs +91 -9
  14. package/esm2022/lib/components/header/header.component.mjs +27 -9
  15. package/esm2022/lib/components/library/library.component.mjs +4 -4
  16. package/esm2022/lib/components/library-list/library-list.component.mjs +4 -4
  17. package/esm2022/lib/components/library-player/library-player.component.mjs +4 -4
  18. package/esm2022/lib/components/meta-form/meta-form.component.mjs +10 -18
  19. package/esm2022/lib/components/options/options.component.mjs +40 -27
  20. package/esm2022/lib/components/progress-status/progress-status.component.mjs +1 -1
  21. package/esm2022/lib/components/publish-checklist/publish-checklist.component.mjs +6 -3
  22. package/esm2022/lib/components/question/question.component.mjs +185 -77
  23. package/esm2022/lib/components/question-option-sub-menu/question-option-sub-menu.component.mjs +36 -0
  24. package/esm2022/lib/components/quml-player/quml-player.component.mjs +2 -2
  25. package/esm2022/lib/components/qumlplayer-page/qumlplayer-page.component.mjs +3 -3
  26. package/esm2022/lib/components/relational-metadata/relational-metadata.component.mjs +80 -0
  27. package/esm2022/lib/components/resource-reorder/resource-reorder.component.mjs +3 -3
  28. package/esm2022/lib/components/slider/slider.component.mjs +46 -0
  29. package/esm2022/lib/components/template/template.component.mjs +3 -3
  30. package/esm2022/lib/components/translations/translations.component.mjs +132 -0
  31. package/esm2022/lib/directives/date-format/date-format.pipe.mjs +34 -0
  32. package/esm2022/lib/interfaces/CreationContext.mjs +2 -0
  33. package/esm2022/lib/interfaces/editor.mjs +1 -1
  34. package/esm2022/lib/interfaces/loader.mjs +2 -0
  35. package/esm2022/lib/pipes/interpolate.pipe.mjs +17 -0
  36. package/esm2022/lib/pipes/sanitize-html.pipe.mjs +6 -8
  37. package/esm2022/lib/services/bulk-job/bulk-job.service.mjs +67 -0
  38. package/esm2022/lib/services/config/category.config.json +1 -0
  39. package/esm2022/lib/services/config/editor.config.json +29 -2
  40. package/esm2022/lib/services/config/label.config.json +16 -3
  41. package/esm2022/lib/services/config/player.config.json +3 -0
  42. package/esm2022/lib/services/config/url.config.json +17 -1
  43. package/esm2022/lib/services/editor/editor.service.mjs +64 -26
  44. package/esm2022/lib/services/question/question.service.mjs +27 -35
  45. package/esm2022/lib/services/tree/tree.service.mjs +20 -5
  46. package/fesm2022/{project-sunbird-sunbird-collection-editor.mjs → deeksha2309-sunbird-collection-editor.mjs} +1779 -483
  47. package/fesm2022/deeksha2309-sunbird-collection-editor.mjs.map +1 -0
  48. package/index.d.ts +2 -2
  49. package/lib/collection-editor-library.module.d.ts +51 -43
  50. package/lib/collection-editor-library.module.d.ts.map +1 -1
  51. package/lib/components/answer/answer.component.d.ts +2 -1
  52. package/lib/components/answer/answer.component.d.ts.map +1 -1
  53. package/lib/components/app-loader/app-loader.component.d.ts +18 -0
  54. package/lib/components/app-loader/app-loader.component.d.ts.map +1 -0
  55. package/lib/components/asset-browser/asset-browser.component.d.ts.map +1 -1
  56. package/lib/components/bulk-upload/bulk-upload.component.d.ts +71 -0
  57. package/lib/components/bulk-upload/bulk-upload.component.d.ts.map +1 -0
  58. package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts +1 -1
  59. package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts.map +1 -1
  60. package/lib/components/editor/editor.component.d.ts +11 -7
  61. package/lib/components/editor/editor.component.d.ts.map +1 -1
  62. package/lib/components/fancy-tree/fancy-tree.component.d.ts +11 -3
  63. package/lib/components/fancy-tree/fancy-tree.component.d.ts.map +1 -1
  64. package/lib/components/header/header.component.d.ts +6 -2
  65. package/lib/components/header/header.component.d.ts.map +1 -1
  66. package/lib/components/library/library.component.d.ts +1 -1
  67. package/lib/components/library/library.component.d.ts.map +1 -1
  68. package/lib/components/meta-form/meta-form.component.d.ts +3 -4
  69. package/lib/components/meta-form/meta-form.component.d.ts.map +1 -1
  70. package/lib/components/options/options.component.d.ts +15 -7
  71. package/lib/components/options/options.component.d.ts.map +1 -1
  72. package/lib/components/publish-checklist/publish-checklist.component.d.ts +2 -1
  73. package/lib/components/publish-checklist/publish-checklist.component.d.ts.map +1 -1
  74. package/lib/components/question/question.component.d.ts +21 -28
  75. package/lib/components/question/question.component.d.ts.map +1 -1
  76. package/lib/components/question-option-sub-menu/question-option-sub-menu.component.d.ts +27 -0
  77. package/lib/components/question-option-sub-menu/question-option-sub-menu.component.d.ts.map +1 -0
  78. package/lib/components/relational-metadata/relational-metadata.component.d.ts +25 -0
  79. package/lib/components/relational-metadata/relational-metadata.component.d.ts.map +1 -0
  80. package/lib/components/slider/slider.component.d.ts +25 -0
  81. package/lib/components/slider/slider.component.d.ts.map +1 -0
  82. package/lib/components/translations/translations.component.d.ts +70 -0
  83. package/lib/components/translations/translations.component.d.ts.map +1 -0
  84. package/lib/directives/date-format/date-format.pipe.d.ts +20 -0
  85. package/lib/directives/date-format/date-format.pipe.d.ts.map +1 -0
  86. package/lib/interfaces/CreationContext.d.ts +11 -0
  87. package/lib/interfaces/CreationContext.d.ts.map +1 -0
  88. package/lib/interfaces/editor.d.ts +10 -5
  89. package/lib/interfaces/editor.d.ts.map +1 -1
  90. package/lib/interfaces/loader.d.ts +11 -0
  91. package/lib/interfaces/loader.d.ts.map +1 -0
  92. package/lib/pipes/interpolate.pipe.d.ts +8 -0
  93. package/lib/pipes/interpolate.pipe.d.ts.map +1 -0
  94. package/lib/pipes/sanitize-html.pipe.d.ts +4 -4
  95. package/lib/pipes/sanitize-html.pipe.d.ts.map +1 -1
  96. package/lib/services/bulk-job/bulk-job.service.d.ts +17 -0
  97. package/lib/services/bulk-job/bulk-job.service.d.ts.map +1 -0
  98. package/lib/services/editor/editor.service.d.ts +7 -4
  99. package/lib/services/editor/editor.service.d.ts.map +1 -1
  100. package/lib/services/question/question.service.d.ts +2 -2
  101. package/lib/services/question/question.service.d.ts.map +1 -1
  102. package/lib/services/tree/tree.service.d.ts +3 -1
  103. package/lib/services/tree/tree.service.d.ts.map +1 -1
  104. package/package.json +5 -5
  105. package/esm2022/project-sunbird-sunbird-collection-editor.mjs +0 -5
  106. package/fesm2022/project-sunbird-sunbird-collection-editor.mjs.map +0 -1
  107. package/project-sunbird-sunbird-collection-editor.d.ts.map +0 -1
@@ -84,12 +84,21 @@ export class EditorService {
84
84
  getToolbarConfig() {
85
85
  return _.cloneDeep(_.merge(this.configService.labelConfig.button_labels, _.get(this.editorConfig, 'context.labels')));
86
86
  }
87
+ nextBulkUploadStatus(status) {
88
+ this._bulkUploadStatus$.next(status);
89
+ }
87
90
  emitshowLibraryPageEvent(page) {
88
91
  this.showLibraryPage.emit(page);
89
92
  }
90
93
  getshowLibraryPageEmitter() {
91
94
  return this.showLibraryPage;
92
95
  }
96
+ emitshowQuestionLibraryPageEvent(page) {
97
+ this.showQuestionLibraryPage.emit(page);
98
+ }
99
+ getshowQuestionLibraryPageEmitter() {
100
+ return this.showQuestionLibraryPage;
101
+ }
93
102
  getQuestionList(questionIds) {
94
103
  const option = {
95
104
  url: _.get(this.configService.urlConFig, 'URLS.QUESTION.LIST'),
@@ -147,7 +156,7 @@ export class EditorService {
147
156
  return this.publicDataService.patch(req);
148
157
  }
149
158
  getFieldsToUpdate(collectionId) {
150
- let formFields = {};
159
+ const formFields = {};
151
160
  const editableFields = _.get(this.editorConfig.config, 'editableFields');
152
161
  if (editableFields && !_.isEmpty(editableFields[this.editorMode])) {
153
162
  const fields = editableFields[this.editorMode];
@@ -159,20 +168,32 @@ export class EditorService {
159
168
  }
160
169
  return formFields;
161
170
  }
162
- updateCollection(collectionId, data) {
171
+ updateCollection(collectionId, event = {}) {
163
172
  let objType = this.configService.categoryConfig[this.editorConfig.config.objectType];
173
+ let url = this.configService.urlConFig.URLS[this.editorConfig.config.objectType];
174
+ let requestBody = {
175
+ request: {}
176
+ };
164
177
  objType = objType.toLowerCase();
165
- const url = this.configService.urlConFig.URLS[this.editorConfig.config.objectType];
166
- const fieldsObj = this.getFieldsToUpdate(collectionId);
167
- const requestBody = {
168
- request: {
169
- [objType]: {
170
- ...fieldsObj,
171
- lastPublishedBy: this.editorConfig.context.user.id
178
+ if (event.button === 'sourcingApproveQuestion' || event.button === 'sourcingRejectQuestion') {
179
+ objType = this.configService.categoryConfig[this.editorConfig.context['collectionObjectType']];
180
+ objType = objType.toLowerCase();
181
+ url = this.configService.urlConFig.URLS[this.editorConfig.context['collectionObjectType']];
182
+ requestBody = event.requestBody;
183
+ requestBody.request[objType]['lastPublishedBy'] = this.editorConfig.context.user.id;
184
+ }
185
+ else {
186
+ const fieldsObj = this.getFieldsToUpdate(collectionId);
187
+ requestBody = {
188
+ request: {
189
+ [objType]: {
190
+ ...fieldsObj,
191
+ lastPublishedBy: this.editorConfig.context.user.id
192
+ }
172
193
  }
173
- }
174
- };
175
- const publishData = _.get(data, 'publishData');
194
+ };
195
+ }
196
+ const publishData = _.get(event, 'publishData');
176
197
  if (publishData) {
177
198
  requestBody.request[objType] = { ...requestBody.request[objType], ...publishData };
178
199
  }
@@ -335,34 +356,41 @@ export class EditorService {
335
356
  const data = this.treeService.getFirstChild();
336
357
  return {
337
358
  nodesModified: this.treeService.treeCache.nodesModified,
338
- hierarchy: instance._toFlatObj(data)
359
+ hierarchy: instance.getHierarchyObj(data)
339
360
  };
340
361
  }
341
- _toFlatObj(data, questionId, selectUnitId) {
362
+ getHierarchyObj(data, questionId, selectUnitId, parentId) {
342
363
  const instance = this;
343
364
  if (data && data.data) {
365
+ const relationalMetadata = this.getRelationalMetadataObj(data.children);
344
366
  instance.data[data.data.id] = {
345
367
  name: data.title,
346
- children: _.map(data.children, (child) => {
347
- return child.data.id;
348
- }),
368
+ children: _.map(data.children, (child) => child.data.id),
369
+ ...(!_.isEmpty(relationalMetadata) && { relationalMetadata }),
349
370
  root: data.data.root
350
371
  };
351
372
  if (questionId && selectUnitId && selectUnitId === data.data.id) {
352
- instance.data[data.data.id].children.push(questionId);
373
+ if (parentId) {
374
+ const children = instance.data[data.data.id].children;
375
+ const index = _.findIndex(children, (e) => {
376
+ return e === parentId;
377
+ }, 0);
378
+ const setIndex = index + 1;
379
+ children.splice(setIndex, 0, questionId);
380
+ }
381
+ else {
382
+ instance.data[data.data.id].children.push(questionId);
383
+ }
353
384
  }
354
385
  if (questionId && selectUnitId && data.folder === false) {
355
386
  delete instance.data[data.data.id];
356
387
  }
357
388
  _.forEach(data.children, (collection) => {
358
- instance._toFlatObj(collection, questionId, selectUnitId);
389
+ instance.getHierarchyObj(collection, questionId, selectUnitId, parentId);
359
390
  });
360
391
  }
361
392
  return instance.data;
362
393
  }
363
- getHierarchyObj(data, questionId, selectUnitId, parentIdentifier) {
364
- return this._toFlatObj(data, questionId, selectUnitId);
365
- }
366
394
  _toFlatObjFromHierarchy(data) {
367
395
  const instance = this;
368
396
  if (data && data.children) {
@@ -470,18 +498,28 @@ export class EditorService {
470
498
  this.contentsCount = this.contentsCount + 1;
471
499
  }
472
500
  }
473
- checkIfContentsCanbeAdded() {
501
+ checkIfContentsCanbeAdded(buttonAction) {
474
502
  const config = {
475
503
  errorMessage: '',
476
504
  maxLimit: 0
477
505
  };
478
506
  if (_.get(this.editorConfig, 'config.objectType') === 'QuestionSet') {
479
- config.errorMessage = _.get(this.configService, 'labelConfig.messages.error.031');
480
507
  config.maxLimit = _.get(this.editorConfig, 'config.questionSet.maxQuestionsLimit');
508
+ if (buttonAction === 'add') {
509
+ config.errorMessage = _.get(this.configService, 'labelConfig.messages.error.041');
510
+ }
511
+ if (buttonAction === 'create') {
512
+ config.errorMessage = _.get(this.configService, 'labelConfig.messages.error.031');
513
+ }
481
514
  }
482
515
  else {
483
- config.errorMessage = _.get(this.configService, 'labelConfig.messages.error.032');
484
516
  config.maxLimit = _.get(this.editorConfig, 'config.collection.maxContentsLimit');
517
+ if (buttonAction === 'add') {
518
+ config.errorMessage = _.get(this.configService, 'labelConfig.messages.error.032');
519
+ }
520
+ if (buttonAction === 'create') {
521
+ config.errorMessage = _.get(this.configService, 'labelConfig.messages.error.042');
522
+ }
485
523
  }
486
524
  const childrenCount = this.getContentChildrens().length + this.contentsCount;
487
525
  if (childrenCount >= config.maxLimit) {
@@ -679,4 +717,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
679
717
  type: Injectable,
680
718
  args: [{ providedIn: 'root' }]
681
719
  }], ctorParameters: function () { return [{ type: i1.TreeService }, { type: i2.ToasterService }, { type: i3.ConfigService }, { type: i4.EditorTelemetryService }, { type: i5.PublicDataService }, { type: i6.DataService }, { type: i7.HttpClient }]; } });
682
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2xsZWN0aW9uLWVkaXRvci1saWJyYXJ5L3NyYy9saWIvc2VydmljZXMvZWRpdG9yL2VkaXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBYyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDO0FBUS9CLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFTNUMsTUFBTSxPQUFPLGFBQWE7SUF5QnhCLFlBQW1CLFdBQXdCLEVBQVUsY0FBOEIsRUFDaEUsYUFBNEIsRUFBVSxnQkFBd0MsRUFDN0UsaUJBQW9DLEVBQVUsV0FBd0IsRUFBUyxVQUFzQjtRQUZ0RyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNoRSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBd0I7UUFDN0Usc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQTFCekgsU0FBSSxHQUFRLEVBQUUsQ0FBQztRQUNQLHNCQUFpQixHQUFxQixFQUFFLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBRXBDLGdCQUFXLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5QixpQ0FBNEIsR0FBRyxLQUFLLENBQUM7UUFD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QixLQUFLLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUU7U0FDdEMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQVU7UUFDckMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLDZCQUE2QjtRQUMvQixPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FBQztJQUMzQyxDQUFDO0lBRU8sZ0NBQWdDLENBQUMsS0FBYztRQUNyRCxPQUFPLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxLQUFLLENBQUM7SUFDckQsQ0FBQztJQUVILHlCQUF5QixDQUFDLE1BQU07UUFDOUIsTUFBTSxPQUFPLEdBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLHdDQUF3QyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUMsQ0FBQztZQUNqRCxPQUFPLE1BQU0sQ0FBQztTQUNmO2FBQU07WUFDTCxPQUFPLE1BQU0sQ0FBQztTQUNmO0lBQ0gsQ0FBQzsrR0Fwc0JVLGFBQWE7bUhBQWIsYUFBYSxjQUZBLE1BQU07OzRGQUVuQixhQUFhO2tCQUZ6QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gJy4uL3RyZWUvdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IFB1YmxpY0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vcHVibGljLWRhdGEvcHVibGljLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBJRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lZGl0b3InO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2NvbmZpZy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdGVyU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9hc3Rlci90b2FzdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdG9yVGVsZW1ldHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbGVtZXRyeS90ZWxlbWV0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uL2RhdGEvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBFeHBvcnRUb0NzdiB9IGZyb20gJ2V4cG9ydC10by1jc3YnO1xuXG5pbnRlcmZhY2UgU2VsZWN0ZWRDaGlsZHJlbiB7XG4gIHByaW1hcnlDYXRlZ29yeT86IHN0cmluZztcbiAgbWltZVR5cGU/OiBzdHJpbmc7XG4gIGludGVyYWN0aW9uVHlwZT86IHN0cmluZztcbn1cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5cbmV4cG9ydCBjbGFzcyBFZGl0b3JTZXJ2aWNlIHtcbiAgZGF0YTogYW55ID0ge307XG4gIHByaXZhdGUgX3NlbGVjdGVkQ2hpbGRyZW46IFNlbGVjdGVkQ2hpbGRyZW4gPSB7fTtcbiAgcHVibGljIHF1ZXN0aW9uU3RyZWFtJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgcHJpdmF0ZSBfZWRpdG9yQ29uZmlnOiBJRWRpdG9yQ29uZmlnO1xuICBwcml2YXRlIF9lZGl0b3JNb2RlID0gJ2VkaXQnO1xuICBwcml2YXRlIF9pc1Jldmlld2VyRWRpdEVuYWJsZSA9IGZhbHNlO1xuICBwcml2YXRlIF9pc1Jldmlld01vZGlmaWNhdGlvbkFsbG93ZWQgPSBmYWxzZTtcbiAgcHVibGljIHNob3dMaWJyYXJ5UGFnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBzaG93UXVlc3Rpb25MaWJyYXJ5UGFnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHByaXZhdGUgX2J1bGtVcGxvYWRTdGF0dXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBidWxrVXBsb2FkU3RhdHVzJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5fYnVsa1VwbG9hZFN0YXR1cyQ7XG4gIHB1YmxpYyBjb250ZW50c0NvdW50ID0gMDtcbiAgdGVtcGxhdGVMaXN0ID0gW107XG4gIHBhcmVudElkZW50aWZpZXI6IGFueTtcbiAgYnJhbmNoaW5nTG9naWMgPSB7fTtcbiAgc2VsZWN0ZWRTZWN0aW9uOiBhbnk7XG4gIG9wdGlvbnNMZW5ndGg6IGFueTtcbiAgc2VsZWN0ZWRQcmltYXJ5Q2F0ZWdvcnk6IGFueTtcbiAgbGVhZlBhcmVudElkZW50aWZpZXI6IGFueTtcbiAgcXVlc3Rpb25JZHMgPSBbXTtcbiAgb3V0Y29tZURlY2xhcmF0aW9uOiBhbnk7XG4gIHRyZWVEYXRhOiBhbnk7XG4gIHByaXZhdGUgX3F1YWxpdHlGb3JtQ29uZmlnOiBhbnk7XG4gIHByaXZhdGUgX2lzUmV2aWV3ZXJRdWFsaXR5Q2hlY2tFbmFibGVkOiBib29sZWFuO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlLCBwcml2YXRlIHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdGVyU2VydmljZSxcbiAgICAgICAgICAgICAgcHVibGljIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsIHByaXZhdGUgdGVsZW1ldHJ5U2VydmljZTogRWRpdG9yVGVsZW1ldHJ5U2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwdWJsaWNEYXRhU2VydmljZTogUHVibGljRGF0YVNlcnZpY2UsIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLCBwdWJsaWMgaHR0cENsaWVudDogSHR0cENsaWVudCkge1xuICAgICAgICAgICAgICB9XG5cbiAgcHVibGljIGluaXRpYWxpemUoY29uZmlnOiBJRWRpdG9yQ29uZmlnKSB7XG4gICAgdGhpcy5fZWRpdG9yQ29uZmlnID0gY29uZmlnO1xuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuZWRpdG9yQ29uZmlnICYmIHRoaXMuY29uZmlnU2VydmljZS5lZGl0b3JDb25maWcuZGVmYXVsdCkge1xuICAgICAgdGhpcy5fZWRpdG9yQ29uZmlnLmNvbmZpZyA9IF8uYXNzaWduKHRoaXMuY29uZmlnU2VydmljZS5lZGl0b3JDb25maWcuZGVmYXVsdCwgdGhpcy5fZWRpdG9yQ29uZmlnLmNvbmZpZyk7XG4gICAgfVxuICAgIHRoaXMuX2VkaXRvck1vZGUgPSBfLmdldCh0aGlzLl9lZGl0b3JDb25maWcsICdjb25maWcubW9kZScpLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5zZXRJc1Jldmlld2VyRWRpdEVuYWJsZShfLmdldCh0aGlzLl9lZGl0b3JDb25maWcsICdjb250ZXh0LmVuYWJsZVJldmlld0VkaXQnLCBmYWxzZSkpO1xuICAgIHRoaXMuc2V0UXVhbGl0eUZvcm1Db25maWcoXy5nZXQodGhpcy5fZWRpdG9yQ29uZmlnLCAnY29uZmlnLnF1YWxpdHlGb3JtQ29uZmlnJywgbnVsbCkpO1xuICAgIHRoaXMuc2V0SXNSZXZpZXdlclF1YWxpdHlDaGVja0VuYWJsZWQoXy5nZXQodGhpcy5fZWRpdG9yQ29uZmlnLCAnY29uZmlnLmlzUmV2aWV3ZXJRdWFsaXR5Q2hlY2tFbmFibGVkJywgZmFsc2UpKTtcbiAgfVxuXG4gIHNldCBzZWxlY3RlZENoaWxkcmVuKHZhbHVlOiBTZWxlY3RlZENoaWxkcmVuKSB7XG4gICAgaWYgKHZhbHVlLm1pbWVUeXBlKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZENoaWxkcmVuLm1pbWVUeXBlID0gdmFsdWUubWltZVR5cGU7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5wcmltYXJ5Q2F0ZWdvcnkpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkQ2hpbGRyZW4ucHJpbWFyeUNhdGVnb3J5ID0gdmFsdWUucHJpbWFyeUNhdGVnb3J5O1xuICAgIH1cbiAgICBpZiAodmFsdWUuaW50ZXJhY3Rpb25UeXBlKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZENoaWxkcmVuLmludGVyYWN0aW9uVHlwZSA9IHZhbHVlLmludGVyYWN0aW9uVHlwZTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDaGlsZHJlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRDaGlsZHJlbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZWRpdG9yQ29uZmlnKCk6IElFZGl0b3JDb25maWcge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JDb25maWc7XG4gIH1cblxuICBnZXQgZWRpdG9yTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdG9yTW9kZTtcbiAgfVxuXG4gIGdldCBpc1Jldmlld2VyRWRpdEVuYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNSZXZpZXdlckVkaXRFbmFibGU7XG4gIH1cblxuICBwcml2YXRlIHNldElzUmV2aWV3ZXJFZGl0RW5hYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmV2aWV3ZXJFZGl0RW5hYmxlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaXNSZXZpZXdNb2RpZmljYXRpb25BbGxvd2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Jldmlld01vZGlmaWNhdGlvbkFsbG93ZWQ7XG4gIH1cblxuICBzZXRJc1Jldmlld01vZGlmaWNhdGlvbkFsbG93ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5faXNSZXZpZXdNb2RpZmljYXRpb25BbGxvd2VkID0gdmFsdWU7XG4gIH1cblxuICBnZXQgY29udGVudFBvbGljeVVybCgpIHtcbiAgICBjb25zdCB1cmwgPSBfLmdldCh0aGlzLmVkaXRvckNvbmZpZywgJ2NvbmZpZy5jb250ZW50UG9saWN5VXJsJyk7XG4gICAgcmV0dXJuIHVybCA/IHVybCA6IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuQ29udGVudFBvbGljeVVybDtcbiAgfVxuXG4gIGdldFRvb2xiYXJDb25maWcoKSB7XG4gICAgcmV0dXJuIF8uY2xvbmVEZWVwKF8ubWVyZ2UodGhpcy5jb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnLmJ1dHRvbl9sYWJlbHMsIF8uZ2V0KHRoaXMuZWRpdG9yQ29uZmlnLCAnY29udGV4dC5sYWJlbHMnKSkpO1xuICB9XG5cbiAgZW1pdHNob3dMaWJyYXJ5UGFnZUV2ZW50KHBhZ2UpIHtcbiAgICB0aGlzLnNob3dMaWJyYXJ5UGFnZS5lbWl0KHBhZ2UpO1xuICB9XG4gIGdldHNob3dMaWJyYXJ5UGFnZUVtaXR0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0xpYnJhcnlQYWdlO1xuICB9XG5cbiAgZ2V0UXVlc3Rpb25MaXN0KHF1ZXN0aW9uSWRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgdXJsOiBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLCAnVVJMUy5RVUVTVElPTi5MSVNUJyksXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBzZWFyY2g6IHtcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHF1ZXN0aW9uSWRzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5wb3N0KG9wdGlvbikucGlwZShtYXAoZGF0YSA9PiBfLmdldChkYXRhLCAncmVzdWx0JykpKTtcbiAgfVxuXG4gIGZldGNoQ29sbGVjdGlvbkhpZXJhcmNoeShjb2xsZWN0aW9uSWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMU1t0aGlzLmVkaXRvckNvbmZpZy5jb25maWcub2JqZWN0VHlwZV07XG4gICAgY29uc3QgaGllcmFyY2h5VXJsID0gYCR7dXJsLkhJRVJBUkNIWV9SRUFEfS8ke2NvbGxlY3Rpb25JZH1gO1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIHVybDogaGllcmFyY2h5VXJsLFxuICAgICAgcGFyYW06IHsgbW9kZTogJ2VkaXQnIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLmdldChyZXEpO1xuICB9XG5cbiAgcmVhZFF1ZXN0aW9uU2V0KHF1ZXN0aW9uU2V0SWQsIG9wdGlvbjogYW55ID0geyBwYXJhbXM6IHt9IH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMU1t0aGlzLmVkaXRvckNvbmZpZy5jb25maWcub2JqZWN0VHlwZV07XG4gICAgY29uc3QgcGFyYW0gPSB7XG4gICAgICBtb2RlOiAnZWRpdCcsXG4gICAgICBmaWVsZHM6IHVybC5ERUZBVUxUX1BBUkFNU19GSUVMRFNcbiAgICB9O1xuICAgIGNvbnN0IGhpZXJhcmNoeVVybCA9IGAke3VybC5SRUFEfS8ke3F1ZXN0aW9uU2V0SWR9YDtcbiAgICBjb25zdCByZXEgPSB7XG4gICAgICB1cmw6IGhpZXJhcmNoeVVybCxcbiAgICAgIHBhcmFtOiB7IC4uLnBhcmFtLCAuLi5vcHRpb24ucGFyYW1zIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLmdldChyZXEpO1xuICB9XG5cbiAgZmV0Y2hDb250ZW50RGV0YWlscyhjb250ZW50SWQpIHtcbiAgICBjb25zdCByZXEgPSB7XG4gICAgICB1cmw6IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcsICdVUkxTLkNPTlRFTlQuUkVBRCcpICsgY29udGVudElkXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5nZXQocmVxKTtcbiAgfVxuXG4gIHVwZGF0ZUhpZXJhcmNoeSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMU1t0aGlzLmVkaXRvckNvbmZpZy5jb25maWcub2JqZWN0VHlwZV07XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgdXJsOiB1cmwuSElFUkFSQ0hZX1VQREFURSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0Q29sbGVjdGlvbkhpZXJhcmNoeSgpLFxuICAgICAgICAgICAgLi4ue2xhc3RVcGRhdGVkQnk6IF8uZ2V0KHRoaXMuZWRpdG9yQ29uZmlnLCAnY29udGV4dC51c2VyLmlkJyl9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5wYXRjaChyZXEpO1xuICB9XG5cbiAgZ2V0RmllbGRzVG9VcGRhdGUoY29sbGVjdGlvbklkKSB7XG4gICAgbGV0IGZvcm1GaWVsZHMgPSB7fTtcbiAgICBjb25zdCBlZGl0YWJsZUZpZWxkcyA9IF8uZ2V0KHRoaXMuZWRpdG9yQ29uZmlnLmNvbmZpZywgJ2VkaXRhYmxlRmllbGRzJyk7XG4gICAgaWYgKGVkaXRhYmxlRmllbGRzICYmICFfLmlzRW1wdHkoZWRpdGFibGVGaWVsZHNbdGhpcy5lZGl0b3JNb2RlXSkpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IGVkaXRhYmxlRmllbGRzW3RoaXMuZWRpdG9yTW9kZV07XG4gICAgICBjb25zdCBub2Rlc01vZGlmaWVkID0gXy5nZXQodGhpcy5nZXRDb2xsZWN0aW9uSGllcmFyY2h5KCksICdub2Rlc01vZGlmaWVkJyk7XG4gICAgICBjb25zdCBjb2xsZWN0aW9uRm9ybURhdGEgPSBfLmdldChub2Rlc01vZGlmaWVkW2NvbGxlY3Rpb25JZF0sICdtZXRhZGF0YScpO1xuICAgICAgXy5mb3JFYWNoKGZpZWxkcywgZmllbGRDb2RlID0+IHtcbiAgICAgICAgZm9ybUZpZWxkc1tmaWVsZENvZGVdID0gY29sbGVjdGlvbkZvcm1EYXRhW2ZpZWxkQ29kZV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1GaWVsZHM7XG4gIH1cblxuICB1cGRhdGVDb2xsZWN0aW9uKGNvbGxlY3Rpb25JZCwgZGF0YT8pIHtcbiAgICBsZXQgb2JqVHlwZSA9IHRoaXMuY29uZmlnU2VydmljZS5jYXRlZ29yeUNvbmZpZ1t0aGlzLmVkaXRvckNvbmZpZy5jb25maWcub2JqZWN0VHlwZV07XG4gICAgb2JqVHlwZSA9IG9ialR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLlVSTFNbdGhpcy5lZGl0b3JDb25maWcuY29uZmlnLm9iamVjdFR5cGVdO1xuICAgIGNvbnN0IGZpZWxkc09iaiA9IHRoaXMuZ2V0RmllbGRzVG9VcGRhdGUoY29sbGVjdGlvbklkKTtcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgW29ialR5cGVdOiB7XG4gICAgICAgICAgLi4uZmllbGRzT2JqLFxuICAgICAgICAgIGxhc3RQdWJsaXNoZWRCeTogdGhpcy5lZGl0b3JDb25maWcuY29udGV4dC51c2VyLmlkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHB1Ymxpc2hEYXRhID0gIF8uZ2V0KGRhdGEsICdwdWJsaXNoRGF0YScpO1xuICAgIGlmKHB1Ymxpc2hEYXRhKSB7IFxuICAgICByZXF1ZXN0Qm9keS5yZXF1ZXN0W29ialR5cGVdID0geyAuLi5yZXF1ZXN0Qm9keS5yZXF1ZXN0W29ialR5cGVdLCAuLi5wdWJsaXNoRGF0YSB9O1xuICAgIH1cbiAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICB1cmw6IGAke3VybC5TWVNZVEVNX1VQREFURX0ke2NvbGxlY3Rpb25JZH1gLFxuICAgICAgZGF0YTogcmVxdWVzdEJvZHlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBhdGNoKG9wdGlvbik7XG4gIH1cblxuICByZXZpZXdDb250ZW50KGNvbnRlbnRJZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IG9ialR5cGUgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY2F0ZWdvcnlDb25maWdbdGhpcy5lZGl0b3JDb25maWcuY29uZmlnLm9iamVjdFR5cGVdO1xuICAgIG9ialR5cGUgPSBvYmpUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdXJsID0gdGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTW3RoaXMuZWRpdG9yQ29uZmlnLmNvbmZpZy5vYmplY3RUeXBlXTtcbiAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICB1cmw6IHVybC5DT05URU5UX1JFVklFVyArIGNvbnRlbnRJZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIFtvYmpUeXBlXToge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucG9zdChvcHRpb24pO1xuICB9XG5cbiAgc3VibWl0UmVxdWVzdENoYW5nZXMoY29udGVudElkLCBjb21tZW50KSB7XG4gICAgbGV0IG9ialR5cGUgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY2F0ZWdvcnlDb25maWdbdGhpcy5lZGl0b3JDb25maWcuY29uZmlnLm9iamVjdFR5cGVdO1xuICAgIG9ialR5cGUgPSBvYmpUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdXJsID0gdGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTW3RoaXMuZWRpdG9yQ29uZmlnLmNvbmZpZy5vYmplY3RUeXBlXTtcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgW29ialR5cGVdOiB7XG4gICAgICAgICAgcmVqZWN0Q29tbWVudDogXy50cmltKGNvbW1lbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgIHVybDogYCR7dXJsLkNPTlRFTlRfUkVKRUNUfSR7Y29udGVudElkfWAsXG4gICAgICBkYXRhOiByZXF1ZXN0Qm9keVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucG9zdChvcHRpb24pO1xuICB9XG5cbiAgcHVibGlzaENvbnRlbnQoY29udGVudElkLCBldmVudCkge1xuICAgIGxldCBvYmpUeXBlID0gdGhpcy5jb25maWdTZXJ2aWNlLmNhdGVnb3J5Q29uZmlnW3RoaXMuZWRpdG9yQ29uZmlnLmNvbmZpZy5vYmplY3RUeXBlXTtcbiAgICBvYmpUeXBlID0gb2JqVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMU1t0aGlzLmVkaXRvckNvbmZpZy5jb25maWcub2JqZWN0VHlwZV07XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIFtvYmpUeXBlXToge1xuICAgICAgICAgIGxhc3RQdWJsaXNoZWRCeTogdGhpcy5lZGl0b3JDb25maWcuY29udGV4dC51c2VyLmlkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgY29uc3QgcHVibGlzaERhdGEgPSAgXy5nZXQoZXZlbnQsICdwdWJsaXNoRGF0YScpO1xuICAgaWYocHVibGlzaERhdGEpIHsgXG4gICAgcmVxdWVzdEJvZHkucmVxdWVzdFtvYmpUeXBlXSA9IHsgLi4ucmVxdWVzdEJvZHkucmVxdWVzdFtvYmpUeXBlXSwgLi4ucHVibGlzaERhdGEgfTtcbiAgIH0gXG4gICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgdXJsOiBgJHt1cmwuQ09OVEVOVF9QVUJMSVNIfSR7Y29udGVudElkfWAsXG4gICAgICBkYXRhOiByZXF1ZXN0Qm9keVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucG9zdChvcHRpb24pO1xuICB9XG5cbiAgYWRkUmVzb3VyY2VUb0hpZXJhcmNoeShjb2xsZWN0aW9uLCB1bml0SWRlbnRpZmllciwgY29udGVudElkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCByZXEgPSB7XG4gICAgICB1cmw6IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcsICdVUkxTLkNPTlRFTlQuSElFUkFSQ0hZX0FERCcpLFxuICAgICAgZGF0YToge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgcm9vdElkOiBjb2xsZWN0aW9uLFxuICAgICAgICAgIHVuaXRJZDogdW5pdElkZW50aWZpZXIsXG4gICAgICAgICAgY2hpbGRyZW46IFtjb250ZW50SWRdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBhdGNoKHJlcSk7XG4gIH1cblxuICBhZGRSZXNvdXJjZVRvUXVlc3Rpb25zZXQoY29sbGVjdGlvbiwgdW5pdElkZW50aWZpZXIsIGNvbnRlbnRJZCkge1xuICAgIGNvbnN0IGNoaWxkcmVuOiBhbnlbXSA9IF8uaXNBcnJheShjb250ZW50SWQpID8gY29udGVudElkIDogW2NvbnRlbnRJZF07XG4gICAgbGV0IHJlcSA9IHtcbiAgICAgIHVybDogXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZywgJ1VSTFMuUXVlc3Rpb25TZXQuQUREJyksXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBxdWVzdGlvbnNldDoge1xuICAgICAgICAgICAgcm9vdElkOiBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgY29sbGVjdGlvbklkOiB1bml0SWRlbnRpZmllcixcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoY29sbGVjdGlvbiA9PT0gdW5pdElkZW50aWZpZXIpIHtcbiAgICAgIHJlcSA9IF8ub21pdChyZXEsICdkYXRhLnJlcXVlc3QucXVlc3Rpb25zZXQuY29sbGVjdGlvbklkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBhdGNoKHJlcSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UXVlc3Rpb25TdHJlYW0kKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uU3RyZWFtJDtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uU3RyZWFtJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHNldFF1ZXN0aW9uSWRzKGNoaWxkcmVucykge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGZvciAoY29uc3QgY2hpbGRyZW4gb2YgY2hpbGRyZW5zKSB7XG4gICAgICBpZiAoY2hpbGRyZW4uZGF0YS5vYmplY3RUeXBlID09PSAnUXVlc3Rpb25TZXQnKSB7XG4gICAgICAgIGxldCBxdWVzdGlvbkNvdW50ID0gMDtcbiAgICAgICAgaWYgKGNoaWxkcmVuPy5kYXRhPy5tZXRhZGF0YT8ubWF4UXVlc3Rpb25zICYmIChjaGlsZHJlbj8uZGF0YT8ubWV0YWRhdGE/Lm1heFF1ZXN0aW9ucyA8IGNoaWxkcmVuPy5jaGlsZHJlbj8ubGVuZ3RoKSkge1xuICAgICAgICAgIHF1ZXN0aW9uQ291bnQgPSBjaGlsZHJlbi5kYXRhLm1ldGFkYXRhLm1heFF1ZXN0aW9ucztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBxdWVzdGlvbkNvdW50ID0gY2hpbGRyZW4/LmNoaWxkcmVuID9cbiAgICAgICAgICBjaGlsZHJlbj8uY2hpbGRyZW4/Lmxlbmd0aCA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXN0aW9uQ291bnQgPiAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVzdGlvbkNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGlmICghXy5pc0VtcHR5KGNoaWxkcmVuLCAnY2hpbGRyZW4nKSkge1xuICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4uY2hpbGRyZW5baV0uZGF0YS5vYmplY3RUeXBlID09PSAnUXVlc3Rpb25TZXQnKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXRRdWVzdGlvbklkcyhbY2hpbGRyZW4uY2hpbGRyZW5baV1dKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIV8uaW5jbHVkZXModGhpcy5xdWVzdGlvbklkcywgY2hpbGRyZW4uY2hpbGRyZW5baV0uZGF0YS5pZCkpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JZHMucHVzaChjaGlsZHJlbi5jaGlsZHJlbltpXS5kYXRhLmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRNYXhTY29yZSgpIHtcbiAgICBsZXQgbWF4U2NvcmUgPSAwO1xuICAgIGxldCByb290Tm9kZSA9IFtdO1xuICAgIHRoaXMucXVlc3Rpb25JZHMgPSBbXTtcbiAgICBjb25zdCByb290Tm9kZURhdGEgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldEZpcnN0Q2hpbGQoKTtcbiAgICBpZiAocm9vdE5vZGVEYXRhLmNoaWxkcmVuKSB7XG4gICAgICByb290Tm9kZSA9IFtyb290Tm9kZURhdGFdO1xuICAgIH1cbiAgICBpZiAoIV8uaXNFbXB0eShyb290Tm9kZSkpIHtcbiAgICAgIHRoaXMuc2V0UXVlc3Rpb25JZHMocm9vdE5vZGUpO1xuICAgIH1cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLnF1ZXN0aW9uSWRzKSkge1xuICAgICAgY29uc3QgeyBxdWVzdGlvbnMgfSA9ICBhd2FpdCB0aGlzLmdldFF1ZXN0aW9uTGlzdCh0aGlzLnF1ZXN0aW9uSWRzKS50b1Byb21pc2UoKTtcbiAgICAgIG1heFNjb3JlID0gdGhpcy5jYWxjdWxhdGVNYXhTY29yZShxdWVzdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gbWF4U2NvcmU7XG4gIH1cblxuICBjYWxjdWxhdGVNYXhTY29yZShxdWVzdGlvbnM6IEFycmF5PGFueT4pIHtcbiAgIHJldHVybiBfLnJlZHVjZShxdWVzdGlvbnMsIChzdW0sIHF1ZXN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBub2RlRGF0YSA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0Tm9kZUJ5SWQocXVlc3Rpb24uaWRlbnRpZmllcik7XG4gICAgICBpZiAoXy5oYXMobm9kZURhdGEucGFyZW50LmRhdGEubWV0YWRhdGEsICdzaHVmZmxlJykgJiYgbm9kZURhdGEucGFyZW50LmRhdGEubWV0YWRhdGEuc2h1ZmZsZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gc3VtICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdW0gKyAocXVlc3Rpb24/LnJlc3BvbnNlRGVjbGFyYXRpb24/LnJlc3BvbnNlMT8ubWF4U2NvcmUgPyBfLmdldChxdWVzdGlvbiwgJ3Jlc3BvbnNlRGVjbGFyYXRpb24ucmVzcG9uc2UxLm1heFNjb3JlJykgOiAwKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIGdldENvbGxlY3Rpb25IaWVyYXJjaHkoKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzO1xuICAgIHRoaXMuZGF0YSA9IHt9O1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldEZpcnN0Q2hpbGQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgbm9kZXNNb2RpZmllZDogdGhpcy50cmVlU2VydmljZS50cmVlQ2FjaGUubm9kZXNNb2RpZmllZCxcbiAgICAgIGhpZXJhcmNoeTogaW5zdGFuY2UuX3RvRmxhdE9iaihkYXRhKVxuICAgIH07XG4gIH1cblxuICBfdG9GbGF0T2JqKGRhdGEsIHF1ZXN0aW9uSWQ/LCBzZWxlY3RVbml0SWQ/KSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzO1xuICAgIGlmIChkYXRhICYmIGRhdGEuZGF0YSkge1xuICAgICAgaW5zdGFuY2UuZGF0YVtkYXRhLmRhdGEuaWRdID0ge1xuICAgICAgICBuYW1lOiBkYXRhLnRpdGxlLFxuICAgICAgICBjaGlsZHJlbjogXy5tYXAoZGF0YS5jaGlsZHJlbiwgKGNoaWxkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkLmRhdGEuaWQ7XG4gICAgICAgIH0pLFxuICAgICAgICByb290OiBkYXRhLmRhdGEucm9vdFxuICAgICAgfTtcbiAgICAgIGlmIChxdWVzdGlvbklkICYmIHNlbGVjdFVuaXRJZCAmJiBzZWxlY3RVbml0SWQgPT09IGRhdGEuZGF0YS5pZCkge1xuICAgICAgICAgIGluc3RhbmNlLmRhdGFbZGF0YS5kYXRhLmlkXS5jaGlsZHJlbi5wdXNoKHF1ZXN0aW9uSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHF1ZXN0aW9uSWQgJiYgc2VsZWN0VW5pdElkICYmIGRhdGEuZm9sZGVyID09PSBmYWxzZSkge1xuICAgICAgICAgIGRlbGV0ZSBpbnN0YW5jZS5kYXRhW2RhdGEuZGF0YS5pZF07XG4gICAgICB9XG4gICAgICBfLmZvckVhY2goZGF0YS5jaGlsZHJlbiwgKGNvbGxlY3Rpb24pID0+IHtcbiAgICAgICAgaW5zdGFuY2UuX3RvRmxhdE9iaihjb2xsZWN0aW9uLCBxdWVzdGlvbklkLCBzZWxlY3RVbml0SWQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5kYXRhO1xuICB9XG5cbiAgZ2V0SGllcmFyY2h5T2JqKGRhdGEsIHF1ZXN0aW9uSWQ/LCBzZWxlY3RVbml0SWQ/LCBwYXJlbnRJZGVudGlmaWVyPykge1xuICAgIHJldHVybiB0aGlzLl90b0ZsYXRPYmooZGF0YSwgcXVlc3Rpb25JZCwgc2VsZWN0VW5pdElkKTtcbiAgfVxuXG4gX3RvRmxhdE9iakZyb21IaWVyYXJjaHkoZGF0YSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcztcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmNoaWxkcmVuKSB7XG4gICAgICBpbnN0YW5jZS5kYXRhW2RhdGEuaWRlbnRpZmllcl0gPSB7XG4gICAgICAgIG5hbWU6IGRhdGEubmFtZSxcbiAgICAgICAgY2hpbGRyZW46IF8ubWFwKGRhdGEuY2hpbGRyZW4sIChjaGlsZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBjaGlsZC5pZGVudGlmaWVyO1xuICAgICAgICB9KSxcbiAgICAgICAgYnJhbmNoaW5nTG9naWM6IGRhdGEuYnJhbmNoaW5nTG9naWNcbiAgICAgIH07XG4gICAgICBfLmZvckVhY2goZGF0YS5jaGlsZHJlbiwgKGNvbGxlY3Rpb24pID0+IHtcbiAgICAgICAgaW5zdGFuY2UuX3RvRmxhdE9iakZyb21IaWVyYXJjaHkoY29sbGVjdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlLmRhdGE7XG4gIH1cblxuICBnZXRSZWxhdGlvbmFsTWV0YWRhdGFPYmooZGF0YSkge1xuICAgIGxldCByZWxhdGlvbmFsTWV0YWRhdGEgPSB7fTtcbiAgICBfLmZvckVhY2goZGF0YSwgKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoXy5nZXQoY2hpbGQsICdkYXRhLm1ldGFkYXRhLnJlbGF0aW9uYWxNZXRhZGF0YScpKSB7XG4gICAgICAgIHJlbGF0aW9uYWxNZXRhZGF0YSA9IHtcbiAgICAgICAgICAuLi5yZWxhdGlvbmFsTWV0YWRhdGEsXG4gICAgICAgICAgW2NoaWxkLmRhdGEuaWRdOiBfLmdldChjaGlsZCwgJ2RhdGEubWV0YWRhdGEucmVsYXRpb25hbE1ldGFkYXRhJylcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVsYXRpb25hbE1ldGFkYXRhO1xuICB9XG5cbiAgZ2V0Q2F0ZWdvcnlEZWZpbml0aW9uKGNhdGVnb3J5TmFtZSwgY2hhbm5lbCwgb2JqZWN0VHlwZT86IGFueSkge1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIHVybDogXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZywgJ1VSTFMuZ2V0Q2F0ZWdvcnlEZWZpbml0aW9uJyksXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBvYmplY3RDYXRlZ29yeURlZmluaXRpb246IHtcbiAgICAgICAgICAgICAgb2JqZWN0VHlwZTogb2JqZWN0VHlwZSA/IG9iamVjdFR5cGUgOiAnQ29udGVudCcsXG4gICAgICAgICAgICAgIG5hbWU6IGNhdGVnb3J5TmFtZSxcbiAgICAgICAgICAgICAgLi4uKGNoYW5uZWwgJiYgeyBjaGFubmVsIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucG9zdChyZXEpO1xuICB9XG4gIGZldGNoQ29udGVudExpc3REZXRhaWxzKHJlcSkge1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBvc3QocmVxKTtcbiAgfVxuICBzb3J0KGEsIGIsIGNvbHVtbikge1xuICAgIGlmICghdGhpcy5pc05vdEVtcHR5KGEsIGNvbHVtbikgfHwgIXRoaXMuaXNOb3RFbXB0eShiLCBjb2x1bW4pKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgbGV0IGFDb2x1bW4gPSBhW2NvbHVtbl07XG4gICAgbGV0IGJDb2x1bW4gPSBiW2NvbHVtbl07XG4gICAgaWYgKF8uaXNBcnJheShhQ29sdW1uKSkge1xuICAgICAgYUNvbHVtbiA9IF8uam9pbihhQ29sdW1uLCAnLCAnKTtcbiAgICB9XG4gICAgaWYgKF8uaXNBcnJheShiQ29sdW1uKSkge1xuICAgICAgYkNvbHVtbiA9IF8uam9pbihiQ29sdW1uLCAnLCAnKTtcbiAgICB9XG4gICAgaWYgKF8uaXNOdW1iZXIoYUNvbHVtbikpIHtcbiAgICBhQ29sdW1uID0gXy50b1N0cmluZyhhQ29sdW1uKTtcbiAgICB9XG4gICAgaWYgKF8uaXNOdW1iZXIoYkNvbHVtbikpIHtcbiAgICBiQ29sdW1uID0gXy50b1N0cmluZyhiQ29sdW1uKTtcbiAgICB9XG4gICAgcmV0dXJuIGJDb2x1bW4ubG9jYWxlQ29tcGFyZShhQ29sdW1uKTtcbiAgfVxuICBpc05vdEVtcHR5KG9iaiwga2V5KSB7XG4gICAgaWYgKF8uaXNOaWwob2JqKSB8fCBfLmlzTmlsKG9ialtrZXldKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgIH1cblxuICAgYXBpRXJyb3JIYW5kbGluZyhlcnIsIGVycm9ySW5mbykge1xuICAgIGlmIChfLmdldChlcnIsICdlcnJvci5wYXJhbXMuZXJybXNnJykgfHwgZXJyb3JJbmZvLmVycm9yTXNnKSB7XG4gICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKF8uZ2V0KGVyciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCBlcnJvckluZm8uZXJyb3JNc2cpO1xuICAgIH1cbiAgICBjb25zdCB0ZWxlbWV0cnlFcnJvckRhdGEgPSB7XG4gICAgICAgIGVycjogXy50b1N0cmluZyhlcnIuc3RhdHVzKSxcbiAgICAgICAgZXJydHlwZTogJ1NZU1RFTScsXG4gICAgICAgIHN0YWNrdHJhY2U6IEpTT04uc3RyaW5naWZ5KHtyZXNwb25zZTogXy5waWNrKGVyciwgWydlcnJvcicsICd1cmwnXSksIHJlcXVlc3Q6IF8uZ2V0KGVycm9ySW5mbywgJ3JlcXVlc3QnKX0pIHx8IGVycm9ySW5mby5lcnJvck1zZyxcbiAgICAgICAgcGFnZWlkOiB0aGlzLnRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkXG4gICAgfTtcbiAgICB0aGlzLnRlbGVtZXRyeVNlcnZpY2UuZXJyb3IodGVsZW1ldHJ5RXJyb3JEYXRhKTtcbiAgfVxuICAvLyB0aGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCBhbGwgdGhlIGNvbnRlbnRzIGluIGNvdXJzZS9xdWVzdGlvbiBpbnNpZGUgZXZlcnkgbW9kdWxlIGFuZCBzdWIgbW9kdWxlXG4gIGdldENvbnRlbnRDaGlsZHJlbnMoYWN0aXZlTm9kZT8pIHtcbiAgICBsZXQgdHJlZU9iaiA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0VHJlZU9iamVjdCgpO1xuICAgIGNvbnN0IGNvbnRlbnRzID0gW107XG4gICAgaWYgKGFjdGl2ZU5vZGUpIHsgdHJlZU9iaiA9IGFjdGl2ZU5vZGU7IH1cbiAgICB0cmVlT2JqLnZpc2l0KChub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZS5mb2xkZXIgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnRlbnRzLnB1c2gobm9kZS5kYXRhLmlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29udGVudHM7XG4gIH1cbiAgLy8gdGhpcyBtZXRob2QgaXMgdXNlZCB0byBrZWVwIGNvdW50IG9mIGNvbnRlbnRzIGFkZGVkIGZyb20gbGlicmFyeSBwYWdlXG4gIGNvbnRlbnRzQ291bnRBZGRlZEluTGlicmFyeVBhZ2Uoc2V0VG9aZXJvPykge1xuICAgIGlmIChzZXRUb1plcm8pIHtcbiAgICAgIHRoaXMuY29udGVudHNDb3VudCA9IDA7IC8vIHNldHRpbmcgdGhpcyBjb3VudCB0byB6ZXJvICB3aGlsZSBnb2luZyBvdXQgZnJvbSBsaWJyYXJ5IHBhZ2VcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50c0NvdW50ID0gdGhpcy5jb250ZW50c0NvdW50ICsgMTtcbiAgICB9XG4gIH1cbiAgY2hlY2tJZkNvbnRlbnRzQ2FuYmVBZGRlZCgpIHtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBlcnJvck1lc3NhZ2U6ICcnLFxuICAgICAgbWF4TGltaXQ6IDBcbiAgICB9O1xuICAgIGlmIChfLmdldCh0aGlzLmVkaXRvckNvbmZpZywgJ2NvbmZpZy5vYmplY3RUeXBlJykgPT09ICdRdWVzdGlvblNldCcpIHtcbiAgICAgIGNvbmZpZy5lcnJvck1lc3NhZ2UgPSBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UsICdsYWJlbENvbmZpZy5tZXNzYWdlcy5lcnJvci4wMzEnKTtcbiAgICAgIGNvbmZpZy5tYXhMaW1pdCA9IF8uZ2V0KHRoaXMuZWRpdG9yQ29uZmlnLCAnY29uZmlnLnF1ZXN0aW9uU2V0Lm1heFF1ZXN0aW9uc0xpbWl0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZy5lcnJvck1lc3NhZ2UgPSBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UsICdsYWJlbENvbmZpZy5tZXNzYWdlcy5lcnJvci4wMzInKTtcbiAgICAgIGNvbmZpZy5tYXhMaW1pdCA9IF8uZ2V0KHRoaXMuZWRpdG9yQ29uZmlnLCAnY29uZmlnLmNvbGxlY3Rpb24ubWF4Q29udGVudHNMaW1pdCcpO1xuICAgIH1cbiAgICBjb25zdCBjaGlsZHJlbkNvdW50ID0gdGhpcy5nZXRDb250ZW50Q2hpbGRyZW5zKCkubGVuZ3RoICsgdGhpcy5jb250ZW50c0NvdW50O1xuICAgIGlmIChjaGlsZHJlbkNvdW50ID49IGNvbmZpZy5tYXhMaW1pdCkge1xuICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihjb25maWcuZXJyb3JNZXNzYWdlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIGdldEhpZXJhcmNoeUZvbGRlcigpIHtcbiAgICBjb25zdCB0cmVlT2JqID0gdGhpcy50cmVlU2VydmljZS5nZXRUcmVlT2JqZWN0KCk7XG4gICAgY29uc3QgY29udGVudHMgPSBbXTtcbiAgICBpZiAodHJlZU9iaikge1xuICAgIHRyZWVPYmoudmlzaXQoKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlICYmICFub2RlLmRhdGEucm9vdCkge1xuICAgICAgICBjb250ZW50cy5wdXNoKG5vZGUuZGF0YS5pZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgICByZXR1cm4gY29udGVudHM7XG4gIH1cbiAgdmFsaWRhdGVDU1ZGaWxlKGZvcm1EYXRhLCBjb2xsZWN0aW9ubklkOiBhbnkpIHtcbiAgICBjb25zdCB1cmwgPSBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLCAnVVJMUy5DU1YuVVBMT0FEJyk7XG4gICAgY29uc3QgcmVxUGFyYW0gPSB7XG4gICAgICB1cmw6IGAke3VybH0ke2NvbGxlY3Rpb25uSWR9YCxcbiAgICAgIGRhdGE6IGZvcm1EYXRhLmRhdGFcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBvc3QocmVxUGFyYW0pO1xuICB9XG4gIGRvd25sb2FkSGllcmFyY2h5Q3N2KGNvbGxlY3Rpb25JZCkge1xuICAgIGNvbnN0IHVybCA9IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcsICdVUkxTLkNTVi5ET1dOTE9BRCcpO1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIHVybDogYCR7dXJsfSR7Y29sbGVjdGlvbklkfWAsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5nZXQocmVxKTtcbiAgfVxuICBnZW5lcmF0ZVByZVNpZ25lZFVybChyZXEsIGNvbnRlbnRJZDogYW55LCB0eXBlKSB7XG4gICAgY29uc3QgcmVxUGFyYW0gPSB7XG4gICAgICB1cmw6IGAke3RoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMUy5DT05URU5ULlVQTE9BRF9VUkx9JHtjb250ZW50SWR9P3R5cGU9JHt0eXBlfWAsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlcXVlc3Q6IHJlcVxuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucG9zdChyZXFQYXJhbSk7XG4gIH1cbiAgZG93bmxvYWRCbG9iVXJsRmlsZShjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5odHRwQ2xpZW50LmdldChjb25maWcuYmxvYlVybCwge3Jlc3BvbnNlVHlwZTogJ2Jsb2InfSlcbiAgICAgIC5zdWJzY3JpYmUoYmxvYiA9PiB7XG4gICAgICAgIGNvbnN0IG9iamVjdFVybDogc3RyaW5nID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgY29uc3QgYTogSFRNTEFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJykgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XG4gICAgICAgIGEuaHJlZiA9IG9iamVjdFVybDtcbiAgICAgICAgYS5kb3dubG9hZCA9IGNvbmZpZy5maWxlTmFtZTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVybCk7XG4gICAgICAgIGlmIChjb25maWcuc3VjY2Vzc01lc3NhZ2UpIHtcbiAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MoY29uZmlnLnN1Y2Nlc3NNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMuZXJyb3IuMDM0JykgKyBlcnJvcik7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvciggXy5yZXBsYWNlKF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ2xhYmVsQ29uZmlnLm1lc3NhZ2VzLmVycm9yLjAzMycpLCAne0ZJTEVfVFlQRX0nLCBjb25maWcuZmlsZVR5cGUgKSArIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZUNTVihjb25maWcpIHtcbiAgICBjb25zdCB0YWJsZURhdGEgPSBjb25maWcudGFibGVEYXRhO1xuICAgIGRlbGV0ZSBjb25maWcudGFibGVEYXRhO1xuICAgIGxldCBvcHRpb25zID0ge1xuICAgICAgZmllbGRTZXBhcmF0b3I6ICcsJyxcbiAgICAgIHF1b3RlU3RyaW5nczogJ1wiJyxcbiAgICAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcbiAgICAgIHNob3dMYWJlbHM6IHRydWUsXG4gICAgICB1c2VUZXh0RmlsZTogZmFsc2UsXG4gICAgICB1c2VCb206IHRydWUsXG4gICAgICBzaG93VGl0bGU6IHRydWUsXG4gICAgICB0aXRsZTogJycsXG4gICAgICBmaWxlbmFtZTogJycsXG4gICAgICBoZWFkZXJzOiBbXVxuICAgIH07XG4gICAgb3B0aW9ucyA9IF8ubWVyZ2Uob3B0aW9ucywgY29uZmlnKTtcbiAgICBjb25zdCBjc3ZFeHBvcnRlciA9IG5ldyBFeHBvcnRUb0NzdihvcHRpb25zKTtcbiAgICBjc3ZFeHBvcnRlci5nZW5lcmF0ZUNzdih0YWJsZURhdGEpO1xuICB9XG5cbiAgZ2V0QnJhbmNoaW5nTG9naWNCeUZvbGRlcihpZGVudGlmaWVyKSB7XG4gICAgY29uc3Qgbm9kZURhdGEgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldE5vZGVCeUlkKGlkZW50aWZpZXIpO1xuICAgIGNvbnN0IGJyYW5jaGluZ0xvZ2ljID0gXy5nZXQobm9kZURhdGEsICdkYXRhLm1ldGFkYXRhLmJyYW5jaGluZ0xvZ2ljJyk7XG4gICAgcmV0dXJuIGJyYW5jaGluZ0xvZ2ljIHx8IHt9O1xuICB9XG5cbi8qKlxuICpcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBpZGVudGlmaWVyIGlkZW50aWZpZXIgb2YgdGhlIG5vZGVcbiAqIEByZXR1cm5zIHsgc291cmNlOiBbXSwgdGFyZ2V0OiBbXSwgc291cmNlVGFyZ2V0PzogW10gfVxuICogQG1lbWJlcm9mIEVkaXRvclNlcnZpY2VcbiAqL1xuZ2V0RGVwZW5kZW50Tm9kZXMoaWRlbnRpZmllcikge1xuICAgIGNvbnN0IHNlY3Rpb25CcmFuY2hpbmdMb2dpYyA9IHRoaXMuZ2V0QnJhbmNoaW5nTG9naWNCeU5vZGVJZChpZGVudGlmaWVyKTtcblxuICAgIGlmICghXy5pc0VtcHR5KHNlY3Rpb25CcmFuY2hpbmdMb2dpYykpIHtcbiAgICAgY29uc3QgYnJhbmNoaW5nRW50cnkgPSB0aGlzLmdldEJyYW5jaGluZ0xvZ2ljRW50cnkoc2VjdGlvbkJyYW5jaGluZ0xvZ2ljLCBpZGVudGlmaWVyKTtcbiAgICAgY29uc3Qgc291cmNlID0gXy5nZXQoYnJhbmNoaW5nRW50cnksICdzb3VyY2UnKTtcbiAgICAgaWYgKCFfLmlzRW1wdHkoc291cmNlKSkgeyAvLyBpZiB0aGUgbm9kZSBpcyBhIGRlcGVuZGVudCBub2RlXG5cbiAgICAgICBjb25zdCBzb3VyY2VCcmFuY2hpbmdFbnRyeSA9IHRoaXMuZ2V0QnJhbmNoaW5nTG9naWNFbnRyeShzZWN0aW9uQnJhbmNoaW5nTG9naWMsIF8uZmlyc3QoYnJhbmNoaW5nRW50cnkuc291cmNlKSk7XG5cbiAgICAgICByZXR1cm4gIV8uaXNFbXB0eShzb3VyY2VCcmFuY2hpbmdFbnRyeSkgPyB7IHNvdXJjZTogYnJhbmNoaW5nRW50cnkuc291cmNlLCB0YXJnZXQ6IGJyYW5jaGluZ0VudHJ5LnRhcmdldCxcbiAgICAgICAgc291cmNlVGFyZ2V0OiBzb3VyY2VCcmFuY2hpbmdFbnRyeS50YXJnZXQgfSA6IHt9O1xuXG4gICAgIH0gZWxzZSB7IC8vIGlmIHRoZSBub2RlIGlzIGEgcGFyZW50IG5vZGVcbiAgICAgICByZXR1cm4gIV8uaXNFbXB0eShicmFuY2hpbmdFbnRyeSkgPyB7IHNvdXJjZTogYnJhbmNoaW5nRW50cnkuc291cmNlLCB0YXJnZXQ6IGJyYW5jaGluZ0VudHJ5LnRhcmdldCB9IDoge307XG4gICAgIH1cbiAgICB9XG4gIH1cblxuLyoqXG4gKlxuICogQHB1YmxpY1xuICogQHBhcmFtIGlkZW50aWZpZXIgaWRlbnRpZmllciBvZiB0aGUgbm9kZVxuICogQHJldHVybnMge1wiZG9faWRcIjogeyBcInRhcmdldFwiOiBbIFwiZG9faWQxMjNcIiwgXCJkb19pZDQ1NlwiIF0sIFwicHJlQ29uZGl0aW9uXCI6IHt9LCBcInNvdXJjZVwiOiBbXSB9fVxuICogQG1lbWJlcm9mIEVkaXRvclNlcnZpY2VcbiAqL1xuICBnZXRCcmFuY2hpbmdMb2dpY0J5Tm9kZUlkKGlkZW50aWZpZXIpIHtcbiAgICBjb25zdCBsZWFmTm9kZSA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0Tm9kZUJ5SWQoaWRlbnRpZmllcik7XG4gICAgY29uc3QgcGFyZW50SWRlbnRpZmllciA9IF8uZ2V0KGxlYWZOb2RlLCAncGFyZW50LmRhdGEuaWQnKTtcbiAgICByZXR1cm4gdGhpcy5nZXRCcmFuY2hpbmdMb2dpY0J5Rm9sZGVyKHBhcmVudElkZW50aWZpZXIpO1xuICB9XG5cbiAgZ2V0QnJhbmNoaW5nTG9naWNFbnRyeShwYXJlbnRCcmFuY2hpbmdMb2dpYywgaWRlbnRpZmllcikge1xuICAgIHJldHVybiBfLmZpbmQocGFyZW50QnJhbmNoaW5nTG9naWMsIChsb2dpYywga2V5KSA9PiB7XG4gICAgICByZXR1cm4ga2V5ID09PSBpZGVudGlmaWVyO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0RmxhdHRlbmVkQnJhbmNoaW5nTG9naWMoZGF0YSkge1xuICAgIGNvbnN0IGZsYXRIaWVyYXJjaHkgPSB0aGlzLl90b0ZsYXRPYmpGcm9tSGllcmFyY2h5KGRhdGEpO1xuICAgIGNvbnN0IGJyYW5jaGluZ0xvZ2ljcyA9IF8uY29tcGFjdChfLm1hcChmbGF0SGllcmFyY2h5LCAnYnJhbmNoaW5nTG9naWMnKSk7XG4gICAgcmV0dXJuIF8ucmVkdWNlKGJyYW5jaGluZ0xvZ2ljcywgKGFjYywgdmFsKSA9PiB7XG4gICAgICByZXR1cm4gIF8uYXNzaWduKGFjYywgdmFsKTtcbiAgICB9LCB7fSk7XG4gIH1cblxuICBnZXRQYXJlbnREZXBlbmRlbnRNYXAoZGF0YSkge1xuICAgIGNvbnN0IGJyYW5jaGluZ0xvZ2ljID0gdGhpcy5nZXRGbGF0dGVuZWRCcmFuY2hpbmdMb2dpYyhkYXRhKTtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBfLmZvckVhY2goXy5rZXlzKGJyYW5jaGluZ0xvZ2ljKSwgaXRlbSA9PiB7XG4gICAgICBvYmpbaXRlbV0gPSAhXy5pc0VtcHR5KGJyYW5jaGluZ0xvZ2ljW2l0ZW1dLnNvdXJjZSkgPyAnZGVwZW5kZW50JyA6ICFfLmlzRW1wdHkoYnJhbmNoaW5nTG9naWNbaXRlbV0udGFyZ2V0KSA/ICdwYXJlbnQnIDogJyc7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIGdldFByaW1hcnlDYXRlZ29yeU5hbWUoc2VjdGlvbklkKSB7XG4gICAgY29uc3Qgbm9kZURhdGEgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldE5vZGVCeUlkKHNlY3Rpb25JZCk7XG4gICAgcmV0dXJuIF8uZ2V0KG5vZGVEYXRhLCAnZGF0YS5wcmltYXJ5Q2F0ZWdvcnknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBmZXRjaCBPdXRjb21lIERlY2xhcmF0aW9uIGxldmVscyB1c2luZyB0aGUgcXVlc3Rpb25zZXRJZFxuICAgKiBvbmx5IGZvciBPYnNlcnZhdGlvbiB3aXRoIFJ1YnJpY3NcbiAgICogQHBhcmFtIGlkZW50aWZpZXIgcXVlc3Rpb25zZXQgaWRlbnRpZmllclxuICAgKi9cbiAgIGZldGNoT3V0Q29tZURlY2xhcmF0aW9uKHF1ZXN0aW9uU2V0SWQsIG9wdGlvbjogYW55ID0geyBwYXJhbXM6IHt9IH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMU1t0aGlzLmVkaXRvckNvbmZpZy5jb25maWcub2JqZWN0VHlwZV07XG4gICAgY29uc3QgcGFyYW0gPSB7XG4gICAgICBmaWVsZHM6ICdvdXRjb21lRGVjbGFyYXRpb24nXG4gICAgfTtcbiAgICBjb25zdCBoaWVyYXJjaHlVcmwgPSBgJHt1cmwuUkVBRH0vJHtxdWVzdGlvblNldElkfWA7XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgdXJsOiBoaWVyYXJjaHlVcmwsXG4gICAgICBwYXJhbTogeyAuLi5wYXJhbSwgLi4ub3B0aW9uLnBhcmFtcyB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5nZXQocmVxKTtcbiAgfVxuXG4gIGdldCBxdWFsaXR5Rm9ybUNvbmZpZygpe1xuICAgIHJldHVybiB0aGlzLl9xdWFsaXR5Rm9ybUNvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgc2V0UXVhbGl0eUZvcm1Db25maWcodmFsdWU6IGFueSl7XG4gICAgcmV0dXJuIHRoaXMuX3F1YWxpdHlGb3JtQ29uZmlnID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaXNSZXZpZXdlclF1YWxpdHlDaGVja0VuYWJsZWQoKXtcbiAgICByZXR1cm4gdGhpcy5faXNSZXZpZXdlclF1YWxpdHlDaGVja0VuYWJsZWQ7XG4gICAgfVxuICBcbiAgICBwcml2YXRlIHNldElzUmV2aWV3ZXJRdWFsaXR5Q2hlY2tFbmFibGVkKHZhbHVlOiBib29sZWFuKXtcbiAgICAgIHJldHVybiB0aGlzLl9pc1Jldmlld2VyUXVhbGl0eUNoZWNrRW5hYmxlZCA9IHZhbHVlO1xuICAgIH1cblxuICBhcHBlbmRDbG91ZFN0b3JhZ2VIZWFkZXJzKGNvbmZpZykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSAgXy5nZXQodGhpcy5lZGl0b3JDb25maWcsICdjb250ZXh0LmNsb3VkU3RvcmFnZS5wcmVzaWduZWRfaGVhZGVycycsIHt9KTtcbiAgICBpZiAoIV8uaXNFbXB0eShoZWFkZXJzKSkge1xuICAgICAgY29uZmlnLmhlYWRlcnMgPSB7Li4uY29uZmlnLmhlYWRlcnMsIC4uLmhlYWRlcnN9O1xuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
720
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2xsZWN0aW9uLWVkaXRvci1saWJyYXJ5L3NyYy9saWIvc2VydmljZXMvZWRpdG9yL2VkaXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBYyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDO0FBUS9CLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFTNUMsTUFBTSxPQUFPLGFBQWE7SUF5QnhCLFlBQW1CLFdBQXdCLEVBQVUsY0FBOEIsRUFDaEUsYUFBNEIsRUFBVSxnQkFBd0MsRUFDN0UsaUJBQW9DLEVBQVUsV0FBd0IsRUFBUyxVQUFzQjtRQUZ0RyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNoRSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBd0I7UUFDN0Usc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQTFCekgsU0FBSSxHQUFRLEVBQUUsQ0FBQztRQUNQLHNCQUFpQixHQUFxQixFQUFFLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBRXBDLGdCQUFXLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5QixpQ0FBNEIsR0FBRyxLQUFLLENBQUM7UUFD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QUM7SUFFTyxnQ0FBZ0MsQ0FBQyxLQUFjO1FBQ3JELE9BQU8sSUFBSSxDQUFDLDhCQUE4QixHQUFHLEtBQUssQ0FBQztJQUNyRCxDQUFDO0lBRUgseUJBQXlCLENBQUMsTUFBTTtRQUM5QixNQUFNLE9BQU8sR0FBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsd0NBQXdDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBQyxDQUFDO1lBQ2pELE9BQU8sTUFBTSxDQUFDO1NBQ2Y7YUFBTTtZQUNMLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7SUFDSCxDQUFDOytHQTd1QlUsYUFBYTttSEFBYixhQUFhLGNBRkEsTUFBTTs7NEZBRW5CLGFBQWE7a0JBRnpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi4vdHJlZS90cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHVibGljRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9wdWJsaWMtZGF0YS9wdWJsaWMtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IElFZGl0b3JDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VkaXRvcic7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vY29uZmlnL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90b2FzdGVyL3RvYXN0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0b3JUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGVsZW1ldHJ5L3RlbGVtZXRyeS5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YS9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEV4cG9ydFRvQ3N2IH0gZnJvbSAnZXhwb3J0LXRvLWNzdic7XG5pbnRlcmZhY2UgU2VsZWN0ZWRDaGlsZHJlbiB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBwcmltYXJ5Q2F0ZWdvcnk/OiBzdHJpbmc7XG4gIG1pbWVUeXBlPzogc3RyaW5nO1xuICBpbnRlcmFjdGlvblR5cGU/OiBzdHJpbmc7XG59XG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuXG5leHBvcnQgY2xhc3MgRWRpdG9yU2VydmljZSB7XG4gIGRhdGE6IGFueSA9IHt9O1xuICBwcml2YXRlIF9zZWxlY3RlZENoaWxkcmVuOiBTZWxlY3RlZENoaWxkcmVuID0ge307XG4gIHB1YmxpYyBxdWVzdGlvblN0cmVhbSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIHByaXZhdGUgX2VkaXRvckNvbmZpZzogSUVkaXRvckNvbmZpZztcbiAgcHJpdmF0ZSBfZWRpdG9yTW9kZSA9ICdlZGl0JztcbiAgcHJpdmF0ZSBfaXNSZXZpZXdlckVkaXRFbmFibGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNSZXZpZXdNb2RpZmljYXRpb25BbGxvd2VkID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93TGlicmFyeVBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgc2hvd1F1ZXN0aW9uTGlicmFyeVBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwcml2YXRlIF9idWxrVXBsb2FkU3RhdHVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgYnVsa1VwbG9hZFN0YXR1cyQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX2J1bGtVcGxvYWRTdGF0dXMkO1xuICBwdWJsaWMgY29udGVudHNDb3VudCA9IDA7XG4gIHRlbXBsYXRlTGlzdCA9IFtdO1xuICBwYXJlbnRJZGVudGlmaWVyOiBhbnk7XG4gIGJyYW5jaGluZ0xvZ2ljID0ge307XG4gIHNlbGVjdGVkU2VjdGlvbjogYW55O1xuICBvcHRpb25zTGVuZ3RoOiBhbnk7XG4gIHNlbGVjdGVkUHJpbWFyeUNhdGVnb3J5OiBhbnk7XG4gIGxlYWZQYXJlbnRJZGVudGlmaWVyOiBhbnk7XG4gIHF1ZXN0aW9uSWRzID0gW107XG4gIG91dGNvbWVEZWNsYXJhdGlvbjogYW55O1xuICB0cmVlRGF0YTogYW55O1xuICBwcml2YXRlIF9xdWFsaXR5Rm9ybUNvbmZpZzogYW55O1xuICBwcml2YXRlIF9pc1Jldmlld2VyUXVhbGl0eUNoZWNrRW5hYmxlZDogYm9vbGVhbjtcbiAgY29uc3RydWN0b3IocHVibGljIHRyZWVTZXJ2aWNlOiBUcmVlU2VydmljZSwgcHJpdmF0ZSB0b2FzdGVyU2VydmljZTogVG9hc3RlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLCBwcml2YXRlIHRlbGVtZXRyeVNlcnZpY2U6IEVkaXRvclRlbGVtZXRyeVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcHVibGljRGF0YVNlcnZpY2U6IFB1YmxpY0RhdGFTZXJ2aWNlLCBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSwgcHVibGljIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpIHtcbiAgICAgICAgICAgICAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplKGNvbmZpZzogSUVkaXRvckNvbmZpZykge1xuICAgIHRoaXMuX2VkaXRvckNvbmZpZyA9IGNvbmZpZztcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmVkaXRvckNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuZWRpdG9yQ29uZmlnLmRlZmF1bHQpIHtcbiAgICAgIHRoaXMuX2VkaXRvckNvbmZpZy5jb25maWcgPSBfLmFzc2lnbih0aGlzLmNvbmZpZ1NlcnZpY2UuZWRpdG9yQ29uZmlnLmRlZmF1bHQsIHRoaXMuX2VkaXRvckNvbmZpZy5jb25maWcpO1xuICAgIH1cbiAgICB0aGlzLl9lZGl0b3JNb2RlID0gXy5nZXQodGhpcy5fZWRpdG9yQ29uZmlnLCAnY29uZmlnLm1vZGUnKS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc2V0SXNSZXZpZXdlckVkaXRFbmFibGUoXy5nZXQodGhpcy5fZWRpdG9yQ29uZmlnLCAnY29udGV4dC5lbmFibGVSZXZpZXdFZGl0JywgZmFsc2UpKTtcbiAgICB0aGlzLnNldFF1YWxpdHlGb3JtQ29uZmlnKF8uZ2V0KHRoaXMuX2VkaXRvckNvbmZpZywgJ2NvbmZpZy5xdWFsaXR5Rm9ybUNvbmZpZycsIG51bGwpKTtcbiAgICB0aGlzLnNldElzUmV2aWV3ZXJRdWFsaXR5Q2hlY2tFbmFibGVkKF8uZ2V0KHRoaXMuX2VkaXRvckNvbmZpZywgJ2NvbmZpZy5pc1Jldmlld2VyUXVhbGl0eUNoZWNrRW5hYmxlZCcsIGZhbHNlKSk7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRDaGlsZHJlbih2YWx1ZTogU2VsZWN0ZWRDaGlsZHJlbikge1xuICAgIGlmICh2YWx1ZS5taW1lVHlwZSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRDaGlsZHJlbi5taW1lVHlwZSA9IHZhbHVlLm1pbWVUeXBlO1xuICAgIH1cbiAgICBpZiAodmFsdWUucHJpbWFyeUNhdGVnb3J5KSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZENoaWxkcmVuLnByaW1hcnlDYXRlZ29yeSA9IHZhbHVlLnByaW1hcnlDYXRlZ29yeTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmludGVyYWN0aW9uVHlwZSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRDaGlsZHJlbi5pbnRlcmFjdGlvblR5cGUgPSB2YWx1ZS5pbnRlcmFjdGlvblR5cGU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlbGVjdGVkQ2hpbGRyZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ2hpbGRyZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVkaXRvckNvbmZpZygpOiBJRWRpdG9yQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdG9yQ29uZmlnO1xuICB9XG5cbiAgZ2V0IGVkaXRvck1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRvck1vZGU7XG4gIH1cblxuICBnZXQgaXNSZXZpZXdlckVkaXRFbmFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmV2aWV3ZXJFZGl0RW5hYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJc1Jldmlld2VyRWRpdEVuYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHJldHVybiB0aGlzLl9pc1Jldmlld2VyRWRpdEVuYWJsZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzUmV2aWV3TW9kaWZpY2F0aW9uQWxsb3dlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNSZXZpZXdNb2RpZmljYXRpb25BbGxvd2VkO1xuICB9XG5cbiAgc2V0SXNSZXZpZXdNb2RpZmljYXRpb25BbGxvd2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmV2aWV3TW9kaWZpY2F0aW9uQWxsb3dlZCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnRQb2xpY3lVcmwoKSB7XG4gICAgY29uc3QgdXJsID0gXy5nZXQodGhpcy5lZGl0b3JDb25maWcsICdjb25maWcuY29udGVudFBvbGljeVVybCcpO1xuICAgIHJldHVybiB1cmwgPyB1cmwgOiB0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLkNvbnRlbnRQb2xpY3lVcmw7XG4gIH1cblxuICBnZXRUb29sYmFyQ29uZmlnKCkge1xuICAgIHJldHVybiBfLmNsb25lRGVlcChfLm1lcmdlKHRoaXMuY29uZmlnU2VydmljZS5sYWJlbENvbmZpZy5idXR0b25fbGFiZWxzLCBfLmdldCh0aGlzLmVkaXRvckNvbmZpZywgJ2NvbnRleHQubGFiZWxzJykpKTtcbiAgfVxuXG4gIG5leHRCdWxrVXBsb2FkU3RhdHVzKHN0YXR1cykge1xuICAgIHRoaXMuX2J1bGtVcGxvYWRTdGF0dXMkLm5leHQoc3RhdHVzKTtcbiAgfVxuICBlbWl0c2hvd0xpYnJhcnlQYWdlRXZlbnQocGFnZSkge1xuICAgIHRoaXMuc2hvd0xpYnJhcnlQYWdlLmVtaXQocGFnZSk7XG4gIH1cbiAgZ2V0c2hvd0xpYnJhcnlQYWdlRW1pdHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93TGlicmFyeVBhZ2U7XG4gIH1cbiAgZW1pdHNob3dRdWVzdGlvbkxpYnJhcnlQYWdlRXZlbnQocGFnZSkge1xuICAgIHRoaXMuc2hvd1F1ZXN0aW9uTGlicmFyeVBhZ2UuZW1pdChwYWdlKTtcbiAgfVxuICBnZXRzaG93UXVlc3Rpb25MaWJyYXJ5UGFnZUVtaXR0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1F1ZXN0aW9uTGlicmFyeVBhZ2U7XG4gIH1cblxuICBnZXRRdWVzdGlvbkxpc3QocXVlc3Rpb25JZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICB1cmw6IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcsICdVUkxTLlFVRVNUSU9OLkxJU1QnKSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIHNlYXJjaDoge1xuICAgICAgICAgICAgaWRlbnRpZmllcjogcXVlc3Rpb25JZHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLnBvc3Qob3B0aW9uKS5waXBlKG1hcChkYXRhID0+IF8uZ2V0KGRhdGEsICdyZXN1bHQnKSkpO1xuICB9XG5cbiAgZmV0Y2hDb2xsZWN0aW9uSGllcmFyY2h5KGNvbGxlY3Rpb25JZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTW3RoaXMuZWRpdG9yQ29uZmlnLmNvbmZpZy5vYmplY3RUeXBlXTtcbiAgICBjb25zdCBoaWVyYXJjaHlVcmwgPSBgJHt1cmwuSElFUkFSQ0hZX1JFQUR9LyR7Y29sbGVjdGlvbklkfWA7XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgdXJsOiBoaWVyYXJjaHlVcmwsXG4gICAgICBwYXJhbTogeyBtb2RlOiAnZWRpdCcgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UuZ2V0KHJlcSk7XG4gIH1cblxuICByZWFkUXVlc3Rpb25TZXQocXVlc3Rpb25TZXRJZCwgb3B0aW9uOiBhbnkgPSB7IHBhcmFtczoge30gfSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTW3RoaXMuZWRpdG9yQ29uZmlnLmNvbmZpZy5vYmplY3RUeXBlXTtcbiAgICBjb25zdCBwYXJhbSA9IHtcbiAgICAgIG1vZGU6ICdlZGl0JyxcbiAgICAgIGZpZWxkczogdXJsLkRFRkFVTFRfUEFSQU1TX0ZJRUxEU1xuICAgIH07XG4gICAgY29uc3QgaGllcmFyY2h5VXJsID0gYCR7dXJsLlJFQUR9LyR7cXVlc3Rpb25TZXRJZH1gO1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIHVybDogaGllcmFyY2h5VXJsLFxuICAgICAgcGFyYW06IHsgLi4ucGFyYW0sIC4uLm9wdGlvbi5wYXJhbXMgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UuZ2V0KHJlcSk7XG4gIH1cblxuICBmZXRjaENvbnRlbnREZXRhaWxzKGNvbnRlbnRJZCkge1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIHVybDogXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZywgJ1VSTFMuQ09OVEVOVC5SRUFEJykgKyBjb250ZW50SWRcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLmdldChyZXEpO1xuICB9XG5cbiAgdXBkYXRlSGllcmFyY2h5KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTW3RoaXMuZWRpdG9yQ29uZmlnLmNvbmZpZy5vYmplY3RUeXBlXTtcbiAgICBjb25zdCByZXEgPSB7XG4gICAgICB1cmw6IHVybC5ISUVSQVJDSFlfVVBEQVRFLFxuICAgICAgZGF0YToge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgLi4udGhpcy5nZXRDb2xsZWN0aW9uSGllcmFyY2h5KCksXG4gICAgICAgICAgICAuLi57bGFzdFVwZGF0ZWRCeTogXy5nZXQodGhpcy5lZGl0b3JDb25maWcsICdjb250ZXh0LnVzZXIuaWQnKX1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBhdGNoKHJlcSk7XG4gIH1cblxuICBnZXRGaWVsZHNUb1VwZGF0ZShjb2xsZWN0aW9uSWQpIHtcbiAgICBjb25zdCBmb3JtRmllbGRzID0ge307XG4gICAgY29uc3QgZWRpdGFibGVGaWVsZHMgPSBfLmdldCh0aGlzLmVkaXRvckNvbmZpZy5jb25maWcsICdlZGl0YWJsZUZpZWxkcycpO1xuICAgIGlmIChlZGl0YWJsZUZpZWxkcyAmJiAhXy5pc0VtcHR5KGVkaXRhYmxlRmllbGRzW3RoaXMuZWRpdG9yTW9kZV0pKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBlZGl0YWJsZUZpZWxkc1t0aGlzLmVkaXRvck1vZGVdO1xuICAgICAgY29uc3Qgbm9kZXNNb2RpZmllZCA9IF8uZ2V0KHRoaXMuZ2V0Q29sbGVjdGlvbkhpZXJhcmNoeSgpLCAnbm9kZXNNb2RpZmllZCcpO1xuICAgICAgY29uc3QgY29sbGVjdGlvbkZvcm1EYXRhID0gXy5nZXQobm9kZXNNb2RpZmllZFtjb2xsZWN0aW9uSWRdLCAnbWV0YWRhdGEnKTtcbiAgICAgIF8uZm9yRWFjaChmaWVsZHMsIGZpZWxkQ29kZSA9PiB7XG4gICAgICAgIGZvcm1GaWVsZHNbZmllbGRDb2RlXSA9IGNvbGxlY3Rpb25Gb3JtRGF0YVtmaWVsZENvZGVdO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmb3JtRmllbGRzO1xuICB9XG5cbiAgdXBkYXRlQ29sbGVjdGlvbihjb2xsZWN0aW9uSWQsIGV2ZW50OiBhbnkgPSB7fSkge1xuICAgIGxldCBvYmpUeXBlID0gdGhpcy5jb25maWdTZXJ2aWNlLmNhdGVnb3J5Q29uZmlnW3RoaXMuZWRpdG9yQ29uZmlnLmNvbmZpZy5vYmplY3RUeXBlXTtcbiAgICBsZXQgdXJsID0gdGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTW3RoaXMuZWRpdG9yQ29uZmlnLmNvbmZpZy5vYmplY3RUeXBlXTtcbiAgICBsZXQgcmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1ZXN0OiB7IH1cbiAgICB9O1xuICAgIG9ialR5cGUgPSBvYmpUeXBlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAnc291cmNpbmdBcHByb3ZlUXVlc3Rpb24nIHx8IGV2ZW50LmJ1dHRvbiA9PT0gJ3NvdXJjaW5nUmVqZWN0UXVlc3Rpb24nKSB7XG4gICAgICBvYmpUeXBlID0gdGhpcy5jb25maWdTZXJ2aWNlLmNhdGVnb3J5Q29uZmlnW3RoaXMuZWRpdG9yQ29uZmlnLmNvbnRleHRbJ2NvbGxlY3Rpb25PYmplY3RUeXBlJ11dO1xuICAgICAgb2JqVHlwZSA9IG9ialR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHVybCA9IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMU1t0aGlzLmVkaXRvckNvbmZpZy5jb250ZXh0Wydjb2xsZWN0aW9uT2JqZWN0VHlwZSddXTtcblxuICAgICAgcmVxdWVzdEJvZHkgPSBldmVudC5yZXF1ZXN0Qm9keTtcbiAgICAgIHJlcXVlc3RCb2R5LnJlcXVlc3Rbb2JqVHlwZV1bJ2xhc3RQdWJsaXNoZWRCeSddID0gdGhpcy5lZGl0b3JDb25maWcuY29udGV4dC51c2VyLmlkO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGZpZWxkc09iaiA9IHRoaXMuZ2V0RmllbGRzVG9VcGRhdGUoY29sbGVjdGlvbklkKTtcbiAgICAgIHJlcXVlc3RCb2R5ID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgW29ialR5cGVdOiB7XG4gICAgICAgICAgICAuLi5maWVsZHNPYmosXG4gICAgICAgICAgICBsYXN0UHVibGlzaGVkQnk6IHRoaXMuZWRpdG9yQ29uZmlnLmNvbnRleHQudXNlci5pZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBwdWJsaXNoRGF0YSA9ICBfLmdldChldmVudCwgJ3B1Ymxpc2hEYXRhJyk7XG4gICAgaWYocHVibGlzaERhdGEpIHtcbiAgICAgcmVxdWVzdEJvZHkucmVxdWVzdFtvYmpUeXBlXSA9IHsgLi4ucmVxdWVzdEJvZHkucmVxdWVzdFtvYmpUeXBlXSwgLi4ucHVibGlzaERhdGEgfTtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgdXJsOiBgJHt1cmwuU1lTWVRFTV9VUERBVEV9JHtjb2xsZWN0aW9uSWR9YCxcbiAgICAgIGRhdGE6IHJlcXVlc3RCb2R5XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5wYXRjaChvcHRpb24pO1xuICB9XG5cbiAgcmV2aWV3Q29udGVudChjb250ZW50SWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBvYmpUeXBlID0gdGhpcy5jb25maWdTZXJ2aWNlLmNhdGVnb3J5Q29uZmlnW3RoaXMuZWRpdG9yQ29uZmlnLmNvbmZpZy5vYmplY3RUeXBlXTtcbiAgICBvYmpUeXBlID0gb2JqVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMU1t0aGlzLmVkaXRvckNvbmZpZy5jb25maWcub2JqZWN0VHlwZV07XG4gICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgdXJsOiB1cmwuQ09OVEVOVF9SRVZJRVcgKyBjb250ZW50SWQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBbb2JqVHlwZV06IHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBvc3Qob3B0aW9uKTtcbiAgfVxuXG4gIHN1Ym1pdFJlcXVlc3RDaGFuZ2VzKGNvbnRlbnRJZCwgY29tbWVudCkge1xuICAgIGxldCBvYmpUeXBlID0gdGhpcy5jb25maWdTZXJ2aWNlLmNhdGVnb3J5Q29uZmlnW3RoaXMuZWRpdG9yQ29uZmlnLmNvbmZpZy5vYmplY3RUeXBlXTtcbiAgICBvYmpUeXBlID0gb2JqVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMU1t0aGlzLmVkaXRvckNvbmZpZy5jb25maWcub2JqZWN0VHlwZV07XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIFtvYmpUeXBlXToge1xuICAgICAgICAgIHJlamVjdENvbW1lbnQ6IF8udHJpbShjb21tZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICB1cmw6IGAke3VybC5DT05URU5UX1JFSkVDVH0ke2NvbnRlbnRJZH1gLFxuICAgICAgZGF0YTogcmVxdWVzdEJvZHlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBvc3Qob3B0aW9uKTtcbiAgfVxuXG4gIHB1Ymxpc2hDb250ZW50KGNvbnRlbnRJZCwgZXZlbnQpIHtcbiAgICBsZXQgb2JqVHlwZSA9IHRoaXMuY29uZmlnU2VydmljZS5jYXRlZ29yeUNvbmZpZ1t0aGlzLmVkaXRvckNvbmZpZy5jb25maWcub2JqZWN0VHlwZV07XG4gICAgb2JqVHlwZSA9IG9ialR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLlVSTFNbdGhpcy5lZGl0b3JDb25maWcuY29uZmlnLm9iamVjdFR5cGVdO1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWVzdDoge1xuICAgICAgICBbb2JqVHlwZV06IHtcbiAgICAgICAgICBsYXN0UHVibGlzaGVkQnk6IHRoaXMuZWRpdG9yQ29uZmlnLmNvbnRleHQudXNlci5pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgIGNvbnN0IHB1Ymxpc2hEYXRhID0gIF8uZ2V0KGV2ZW50LCAncHVibGlzaERhdGEnKTtcbiAgIGlmKHB1Ymxpc2hEYXRhKSB7XG4gICAgcmVxdWVzdEJvZHkucmVxdWVzdFtvYmpUeXBlXSA9IHsgLi4ucmVxdWVzdEJvZHkucmVxdWVzdFtvYmpUeXBlXSwgLi4ucHVibGlzaERhdGEgfTtcbiAgIH1cbiAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICB1cmw6IGAke3VybC5DT05URU5UX1BVQkxJU0h9JHtjb250ZW50SWR9YCxcbiAgICAgIGRhdGE6IHJlcXVlc3RCb2R5XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5wb3N0KG9wdGlvbik7XG4gIH1cblxuICBhZGRSZXNvdXJjZVRvSGllcmFyY2h5KGNvbGxlY3Rpb24sIHVuaXRJZGVudGlmaWVyLCBjb250ZW50SWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIHVybDogXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZywgJ1VSTFMuQ09OVEVOVC5ISUVSQVJDSFlfQUREJyksXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICByb290SWQ6IGNvbGxlY3Rpb24sXG4gICAgICAgICAgdW5pdElkOiB1bml0SWRlbnRpZmllcixcbiAgICAgICAgICBjaGlsZHJlbjogW2NvbnRlbnRJZF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucGF0Y2gocmVxKTtcbiAgfVxuXG4gIGFkZFJlc291cmNlVG9RdWVzdGlvbnNldChjb2xsZWN0aW9uLCB1bml0SWRlbnRpZmllciwgY29udGVudElkKSB7XG4gICAgY29uc3QgY2hpbGRyZW46IGFueVtdID0gXy5pc0FycmF5KGNvbnRlbnRJZCkgPyBjb250ZW50SWQgOiBbY29udGVudElkXTtcbiAgICBsZXQgcmVxID0ge1xuICAgICAgdXJsOiBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLCAnVVJMUy5RdWVzdGlvblNldC5BREQnKSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIHF1ZXN0aW9uc2V0OiB7XG4gICAgICAgICAgICByb290SWQ6IGNvbGxlY3Rpb24sXG4gICAgICAgICAgICBjb2xsZWN0aW9uSWQ6IHVuaXRJZGVudGlmaWVyLFxuICAgICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChjb2xsZWN0aW9uID09PSB1bml0SWRlbnRpZmllcikge1xuICAgICAgcmVxID0gXy5vbWl0KHJlcSwgJ2RhdGEucmVxdWVzdC5xdWVzdGlvbnNldC5jb2xsZWN0aW9uSWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucGF0Y2gocmVxKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRRdWVzdGlvblN0cmVhbSQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25TdHJlYW0kO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2godmFsdWU6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb25TdHJlYW0kLm5leHQodmFsdWUpO1xuICB9XG5cbiAgc2V0UXVlc3Rpb25JZHMoY2hpbGRyZW5zKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgZm9yIChjb25zdCBjaGlsZHJlbiBvZiBjaGlsZHJlbnMpIHtcbiAgICAgIGlmIChjaGlsZHJlbi5kYXRhLm9iamVjdFR5cGUgPT09ICdRdWVzdGlvblNldCcpIHtcbiAgICAgICAgbGV0IHF1ZXN0aW9uQ291bnQgPSAwO1xuICAgICAgICBpZiAoY2hpbGRyZW4/LmRhdGE/Lm1ldGFkYXRhPy5tYXhRdWVzdGlvbnMgJiYgKGNoaWxkcmVuPy5kYXRhPy5tZXRhZGF0YT8ubWF4UXVlc3Rpb25zIDwgY2hpbGRyZW4/LmNoaWxkcmVuPy5sZW5ndGgpKSB7XG4gICAgICAgICAgcXVlc3Rpb25Db3VudCA9IGNoaWxkcmVuLmRhdGEubWV0YWRhdGEubWF4UXVlc3Rpb25zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXN0aW9uQ291bnQgPSBjaGlsZHJlbj8uY2hpbGRyZW4gP1xuICAgICAgICAgIGNoaWxkcmVuPy5jaGlsZHJlbj8ubGVuZ3RoIDogMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocXVlc3Rpb25Db3VudCA+IDApIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXN0aW9uQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFfLmlzRW1wdHkoY2hpbGRyZW4sICdjaGlsZHJlbicpKSB7XG4gICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5jaGlsZHJlbltpXS5kYXRhLm9iamVjdFR5cGUgPT09ICdRdWVzdGlvblNldCcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNldFF1ZXN0aW9uSWRzKFtjaGlsZHJlbi5jaGlsZHJlbltpXV0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghXy5pbmNsdWRlcyh0aGlzLnF1ZXN0aW9uSWRzLCBjaGlsZHJlbi5jaGlsZHJlbltpXS5kYXRhLmlkKSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbklkcy5wdXNoKGNoaWxkcmVuLmNoaWxkcmVuW2ldLmRhdGEuaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldE1heFNjb3JlKCkge1xuICAgIGxldCBtYXhTY29yZSA9IDA7XG4gICAgbGV0IHJvb3ROb2RlID0gW107XG4gICAgdGhpcy5xdWVzdGlvbklkcyA9IFtdO1xuICAgIGNvbnN0IHJvb3ROb2RlRGF0YSA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0Rmlyc3RDaGlsZCgpO1xuICAgIGlmIChyb290Tm9kZURhdGEuY2hpbGRyZW4pIHtcbiAgICAgIHJvb3ROb2RlID0gW3Jvb3ROb2RlRGF0YV07XG4gICAgfVxuICAgIGlmICghXy5pc0VtcHR5KHJvb3ROb2RlKSkge1xuICAgICAgdGhpcy5zZXRRdWVzdGlvbklkcyhyb290Tm9kZSk7XG4gICAgfVxuICAgIGlmICghXy5pc0VtcHR5KHRoaXMucXVlc3Rpb25JZHMpKSB7XG4gICAgICBjb25zdCB7IHF1ZXN0aW9ucyB9ID0gIGF3YWl0IHRoaXMuZ2V0UXVlc3Rpb25MaXN0KHRoaXMucXVlc3Rpb25JZHMpLnRvUHJvbWlzZSgpO1xuICAgICAgbWF4U2NvcmUgPSB0aGlzLmNhbGN1bGF0ZU1heFNjb3JlKHF1ZXN0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBtYXhTY29yZTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU1heFNjb3JlKHF1ZXN0aW9uczogQXJyYXk8YW55Pikge1xuICAgcmV0dXJuIF8ucmVkdWNlKHF1ZXN0aW9ucywgKHN1bSwgcXVlc3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IG5vZGVEYXRhID0gdGhpcy50cmVlU2VydmljZS5nZXROb2RlQnlJZChxdWVzdGlvbi5pZGVudGlmaWVyKTtcbiAgICAgIGlmIChfLmhhcyhub2RlRGF0YS5wYXJlbnQuZGF0YS5tZXRhZGF0YSwgJ3NodWZmbGUnKSAmJiBub2RlRGF0YS5wYXJlbnQuZGF0YS5tZXRhZGF0YS5zaHVmZmxlID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBzdW0gKyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN1bSArIChxdWVzdGlvbj8ucmVzcG9uc2VEZWNsYXJhdGlvbj8ucmVzcG9uc2UxPy5tYXhTY29yZSA/IF8uZ2V0KHF1ZXN0aW9uLCAncmVzcG9uc2VEZWNsYXJhdGlvbi5yZXNwb25zZTEubWF4U2NvcmUnKSA6IDApO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgZ2V0Q29sbGVjdGlvbkhpZXJhcmNoeSgpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXM7XG4gICAgdGhpcy5kYXRhID0ge307XG4gICAgY29uc3QgZGF0YSA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0Rmlyc3RDaGlsZCgpO1xuICAgIHJldHVybiB7XG4gICAgICBub2Rlc01vZGlmaWVkOiB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDYWNoZS5ub2Rlc01vZGlmaWVkLFxuICAgICAgaGllcmFyY2h5OiBpbnN0YW5jZS5nZXRIaWVyYXJjaHlPYmooZGF0YSlcbiAgICB9O1xuICB9XG5cbiAgZ2V0SGllcmFyY2h5T2JqKGRhdGEsIHF1ZXN0aW9uSWQ/LCBzZWxlY3RVbml0SWQ/LCBwYXJlbnRJZD8pIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXM7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5kYXRhKSB7XG4gICAgICBjb25zdCByZWxhdGlvbmFsTWV0YWRhdGEgPSB0aGlzLmdldFJlbGF0aW9uYWxNZXRhZGF0YU9iaihkYXRhLmNoaWxkcmVuKTtcbiAgICAgIGluc3RhbmNlLmRhdGFbZGF0YS5kYXRhLmlkXSA9IHtcbiAgICAgICAgbmFtZTogZGF0YS50aXRsZSxcbiAgICAgICAgY2hpbGRyZW46IF8ubWFwKGRhdGEuY2hpbGRyZW4sIChjaGlsZCkgPT4gY2hpbGQuZGF0YS5pZCksXG4gICAgICAgIC4uLighXy5pc0VtcHR5KHJlbGF0aW9uYWxNZXRhZGF0YSkgJiYgIHtyZWxhdGlvbmFsTWV0YWRhdGF9KSxcbiAgICAgICAgcm9vdDogZGF0YS5kYXRhLnJvb3RcbiAgICAgIH07XG4gICAgICBpZiAocXVlc3Rpb25JZCAmJiBzZWxlY3RVbml0SWQgJiYgc2VsZWN0VW5pdElkID09PSBkYXRhLmRhdGEuaWQpIHtcbiAgICAgICAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gaW5zdGFuY2UuZGF0YVtkYXRhLmRhdGEuaWRdLmNoaWxkcmVuO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBfLmZpbmRJbmRleChjaGlsZHJlbiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGUgPT09IHBhcmVudElkO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICBjb25zdCBzZXRJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShzZXRJbmRleCwgMCwgcXVlc3Rpb25JZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluc3RhbmNlLmRhdGFbZGF0YS5kYXRhLmlkXS5jaGlsZHJlbi5wdXNoKHF1ZXN0aW9uSWQpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChxdWVzdGlvbklkICYmIHNlbGVjdFVuaXRJZCAmJiBkYXRhLmZvbGRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBkZWxldGUgaW5zdGFuY2UuZGF0YVtkYXRhLmRhdGEuaWRdO1xuICAgICAgfVxuICAgICAgXy5mb3JFYWNoKGRhdGEuY2hpbGRyZW4sIChjb2xsZWN0aW9uKSA9PiB7XG4gICAgICAgIGluc3RhbmNlLmdldEhpZXJhcmNoeU9iaihjb2xsZWN0aW9uLCBxdWVzdGlvbklkLCBzZWxlY3RVbml0SWQsIHBhcmVudElkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW5zdGFuY2UuZGF0YTtcbiAgfVxuXG5cbiBfdG9GbGF0T2JqRnJvbUhpZXJhcmNoeShkYXRhKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzO1xuICAgIGlmIChkYXRhICYmIGRhdGEuY2hpbGRyZW4pIHtcbiAgICAgIGluc3RhbmNlLmRhdGFbZGF0YS5pZGVudGlmaWVyXSA9IHtcbiAgICAgICAgbmFtZTogZGF0YS5uYW1lLFxuICAgICAgICBjaGlsZHJlbjogXy5tYXAoZGF0YS5jaGlsZHJlbiwgKGNoaWxkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkLmlkZW50aWZpZXI7XG4gICAgICAgIH0pLFxuICAgICAgICBicmFuY2hpbmdMb2dpYzogZGF0YS5icmFuY2hpbmdMb2dpY1xuICAgICAgfTtcbiAgICAgIF8uZm9yRWFjaChkYXRhLmNoaWxkcmVuLCAoY29sbGVjdGlvbikgPT4ge1xuICAgICAgICBpbnN0YW5jZS5fdG9GbGF0T2JqRnJvbUhpZXJhcmNoeShjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW5zdGFuY2UuZGF0YTtcbiAgfVxuXG4gIGdldFJlbGF0aW9uYWxNZXRhZGF0YU9iaihkYXRhKSB7XG4gICAgbGV0IHJlbGF0aW9uYWxNZXRhZGF0YSA9IHt9O1xuICAgIF8uZm9yRWFjaChkYXRhLCAoY2hpbGQpID0+IHtcbiAgICAgIGlmIChfLmdldChjaGlsZCwgJ2RhdGEubWV0YWRhdGEucmVsYXRpb25hbE1ldGFkYXRhJykpIHtcbiAgICAgICAgcmVsYXRpb25hbE1ldGFkYXRhID0ge1xuICAgICAgICAgIC4uLnJlbGF0aW9uYWxNZXRhZGF0YSxcbiAgICAgICAgICBbY2hpbGQuZGF0YS5pZF06IF8uZ2V0KGNoaWxkLCAnZGF0YS5tZXRhZGF0YS5yZWxhdGlvbmFsTWV0YWRhdGEnKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZWxhdGlvbmFsTWV0YWRhdGE7XG4gIH1cblxuICBnZXRDYXRlZ29yeURlZmluaXRpb24oY2F0ZWdvcnlOYW1lLCBjaGFubmVsLCBvYmplY3RUeXBlPzogYW55KSB7XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgdXJsOiBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLCAnVVJMUy5nZXRDYXRlZ29yeURlZmluaXRpb24nKSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIG9iamVjdENhdGVnb3J5RGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgICBvYmplY3RUeXBlOiBvYmplY3RUeXBlID8gb2JqZWN0VHlwZSA6ICdDb250ZW50JyxcbiAgICAgICAgICAgICAgbmFtZTogY2F0ZWdvcnlOYW1lLFxuICAgICAgICAgICAgICAuLi4oY2hhbm5lbCAmJiB7IGNoYW5uZWwgfSlcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5wb3N0KHJlcSk7XG4gIH1cbiAgZmV0Y2hDb250ZW50TGlzdERldGFpbHMocmVxKSB7XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucG9zdChyZXEpO1xuICB9XG4gIHNvcnQoYSwgYiwgY29sdW1uKSB7XG4gICAgaWYgKCF0aGlzLmlzTm90RW1wdHkoYSwgY29sdW1uKSB8fCAhdGhpcy5pc05vdEVtcHR5KGIsIGNvbHVtbikpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBsZXQgYUNvbHVtbiA9IGFbY29sdW1uXTtcbiAgICBsZXQgYkNvbHVtbiA9IGJbY29sdW1uXTtcbiAgICBpZiAoXy5pc0FycmF5KGFDb2x1bW4pKSB7XG4gICAgICBhQ29sdW1uID0gXy5qb2luKGFDb2x1bW4sICcsICcpO1xuICAgIH1cbiAgICBpZiAoXy5pc0FycmF5KGJDb2x1bW4pKSB7XG4gICAgICBiQ29sdW1uID0gXy5qb2luKGJDb2x1bW4sICcsICcpO1xuICAgIH1cbiAgICBpZiAoXy5pc051bWJlcihhQ29sdW1uKSkge1xuICAgIGFDb2x1bW4gPSBfLnRvU3RyaW5nKGFDb2x1bW4pO1xuICAgIH1cbiAgICBpZiAoXy5pc051bWJlcihiQ29sdW1uKSkge1xuICAgIGJDb2x1bW4gPSBfLnRvU3RyaW5nKGJDb2x1bW4pO1xuICAgIH1cbiAgICByZXR1cm4gYkNvbHVtbi5sb2NhbGVDb21wYXJlKGFDb2x1bW4pO1xuICB9XG4gIGlzTm90RW1wdHkob2JqLCBrZXkpIHtcbiAgICBpZiAoXy5pc05pbChvYmopIHx8IF8uaXNOaWwob2JqW2tleV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICAgfVxuXG4gICBhcGlFcnJvckhhbmRsaW5nKGVyciwgZXJyb3JJbmZvKSB7XG4gICAgaWYgKF8uZ2V0KGVyciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCBlcnJvckluZm8uZXJyb3JNc2cpIHtcbiAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXy5nZXQoZXJyLCAnZXJyb3IucGFyYW1zLmVycm1zZycpIHx8IGVycm9ySW5mby5lcnJvck1zZyk7XG4gICAgfVxuICAgIGNvbnN0IHRlbGVtZXRyeUVycm9yRGF0YSA9IHtcbiAgICAgICAgZXJyOiBfLnRvU3RyaW5nKGVyci5zdGF0dXMpLFxuICAgICAgICBlcnJ0eXBlOiAnU1lTVEVNJyxcbiAgICAgICAgc3RhY2t0cmFjZTogSlNPTi5zdHJpbmdpZnkoe3Jlc3BvbnNlOiBfLnBpY2soZXJyLCBbJ2Vycm9yJywgJ3VybCddKSwgcmVxdWVzdDogXy5nZXQoZXJyb3JJbmZvLCAncmVxdWVzdCcpfSkgfHwgZXJyb3JJbmZvLmVycm9yTXNnLFxuICAgICAgICBwYWdlaWQ6IHRoaXMudGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWRcbiAgICB9O1xuICAgIHRoaXMudGVsZW1ldHJ5U2VydmljZS5lcnJvcih0ZWxlbWV0cnlFcnJvckRhdGEpO1xuICB9XG4gIC8vIHRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IGFsbCB0aGUgY29udGVudHMgaW4gY291cnNlL3F1ZXN0aW9uIGluc2lkZSBldmVyeSBtb2R1bGUgYW5kIHN1YiBtb2R1bGVcbiAgZ2V0Q29udGVudENoaWxkcmVucyhhY3RpdmVOb2RlPykge1xuICAgIGxldCB0cmVlT2JqID0gdGhpcy50cmVlU2VydmljZS5nZXRUcmVlT2JqZWN0KCk7XG4gICAgY29uc3QgY29udGVudHMgPSBbXTtcbiAgICBpZiAoYWN0aXZlTm9kZSkgeyB0cmVlT2JqID0gYWN0aXZlTm9kZTsgfVxuICAgIHRyZWVPYmoudmlzaXQoKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLmZvbGRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29udGVudHMucHVzaChub2RlLmRhdGEuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb250ZW50cztcbiAgfVxuICAvLyB0aGlzIG1ldGhvZCBpcyB1c2VkIHRvIGtlZXAgY291bnQgb2YgY29udGVudHMgYWRkZWQgZnJvbSBsaWJyYXJ5IHBhZ2VcbiAgY29udGVudHNDb3VudEFkZGVkSW5MaWJyYXJ5UGFnZShzZXRUb1plcm8/KSB7XG4gICAgaWYgKHNldFRvWmVybykge1xuICAgICAgdGhpcy5jb250ZW50c0NvdW50ID0gMDsgLy8gc2V0dGluZyB0aGlzIGNvdW50IHRvIHplcm8gIHdoaWxlIGdvaW5nIG91dCBmcm9tIGxpYnJhcnkgcGFnZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRlbnRzQ291bnQgPSB0aGlzLmNvbnRlbnRzQ291bnQgKyAxO1xuICAgIH1cbiAgfVxuICBjaGVja0lmQ29udGVudHNDYW5iZUFkZGVkKGJ1dHRvbkFjdGlvbikge1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGVycm9yTWVzc2FnZTogJycsXG4gICAgICBtYXhMaW1pdDogMFxuICAgIH07XG4gICAgaWYgKF8uZ2V0KHRoaXMuZWRpdG9yQ29uZmlnLCAnY29uZmlnLm9iamVjdFR5cGUnKSA9PT0gJ1F1ZXN0aW9uU2V0Jykge1xuICAgICAgY29uZmlnLm1heExpbWl0ID0gXy5nZXQodGhpcy5lZGl0b3JDb25maWcsICdjb25maWcucXVlc3Rpb25TZXQubWF4UXVlc3Rpb25zTGltaXQnKTtcbiAgICAgIGlmIChidXR0b25BY3Rpb24gPT09ICdhZGQnKSB7XG4gICAgICAgIGNvbmZpZy5lcnJvck1lc3NhZ2UgPSBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UsICdsYWJlbENvbmZpZy5tZXNzYWdlcy5lcnJvci4wNDEnKTtcbiAgICAgIH1cbiAgICAgIGlmIChidXR0b25BY3Rpb24gPT09ICdjcmVhdGUnKSB7XG4gICAgICAgIGNvbmZpZy5lcnJvck1lc3NhZ2UgPSBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UsICdsYWJlbENvbmZpZy5tZXNzYWdlcy5lcnJvci4wMzEnKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcubWF4TGltaXQgPSBfLmdldCh0aGlzLmVkaXRvckNvbmZpZywgJ2NvbmZpZy5jb2xsZWN0aW9uLm1heENvbnRlbnRzTGltaXQnKTtcbiAgICAgIGlmIChidXR0b25BY3Rpb24gPT09ICdhZGQnKSB7XG4gICAgICAgIGNvbmZpZy5lcnJvck1lc3NhZ2UgPSBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UsICdsYWJlbENvbmZpZy5tZXNzYWdlcy5lcnJvci4wMzInKTtcbiAgICAgIH1cbiAgICAgIGlmIChidXR0b25BY3Rpb24gPT09ICdjcmVhdGUnKSB7XG4gICAgICAgIGNvbmZpZy5lcnJvck1lc3NhZ2UgPSBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UsICdsYWJlbENvbmZpZy5tZXNzYWdlcy5lcnJvci4wNDInKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRyZW5Db3VudCA9IHRoaXMuZ2V0Q29udGVudENoaWxkcmVucygpLmxlbmd0aCArIHRoaXMuY29udGVudHNDb3VudDtcbiAgICBpZiAoY2hpbGRyZW5Db3VudCA+PSBjb25maWcubWF4TGltaXQpIHtcbiAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoY29uZmlnLmVycm9yTWVzc2FnZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBnZXRIaWVyYXJjaHlGb2xkZXIoKSB7XG4gICAgY29uc3QgdHJlZU9iaiA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0VHJlZU9iamVjdCgpO1xuICAgIGNvbnN0IGNvbnRlbnRzID0gW107XG4gICAgaWYgKHRyZWVPYmopIHtcbiAgICB0cmVlT2JqLnZpc2l0KChub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZSAmJiAhbm9kZS5kYXRhLnJvb3QpIHtcbiAgICAgICAgY29udGVudHMucHVzaChub2RlLmRhdGEuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xuICB9XG4gIHZhbGlkYXRlQ1NWRmlsZShmb3JtRGF0YSwgY29sbGVjdGlvbm5JZDogYW55KSB7XG4gICAgY29uc3QgdXJsID0gXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZywgJ1VSTFMuQ1NWLlVQTE9BRCcpO1xuICAgIGNvbnN0IHJlcVBhcmFtID0ge1xuICAgICAgdXJsOiBgJHt1cmx9JHtjb2xsZWN0aW9ubklkfWAsXG4gICAgICBkYXRhOiBmb3JtRGF0YS5kYXRhXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5wb3N0KHJlcVBhcmFtKTtcbiAgfVxuICBkb3dubG9hZEhpZXJhcmNoeUNzdihjb2xsZWN0aW9uSWQpIHtcbiAgICBjb25zdCB1cmwgPSBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLCAnVVJMUy5DU1YuRE9XTkxPQUQnKTtcbiAgICBjb25zdCByZXEgPSB7XG4gICAgICB1cmw6IGAke3VybH0ke2NvbGxlY3Rpb25JZH1gLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UuZ2V0KHJlcSk7XG4gIH1cbiAgZ2VuZXJhdGVQcmVTaWduZWRVcmwocmVxLCBjb250ZW50SWQ6IGFueSwgdHlwZSkge1xuICAgIGNvbnN0IHJlcVBhcmFtID0ge1xuICAgICAgdXJsOiBgJHt0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLlVSTFMuQ09OVEVOVC5VUExPQURfVVJMfSR7Y29udGVudElkfT90eXBlPSR7dHlwZX1gLFxuICAgICAgZGF0YToge1xuICAgICAgICByZXF1ZXN0OiByZXFcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBvc3QocmVxUGFyYW0pO1xuICB9XG4gIGRvd25sb2FkQmxvYlVybEZpbGUoY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoY29uZmlnLmJsb2JVcmwsIHtyZXNwb25zZVR5cGU6ICdibG9iJ30pXG4gICAgICAuc3Vic2NyaWJlKGJsb2IgPT4ge1xuICAgICAgICBjb25zdCBvYmplY3RVcmw6IHN0cmluZyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgIGNvbnN0IGE6IEhUTUxBbmNob3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpIGFzIEhUTUxBbmNob3JFbGVtZW50O1xuICAgICAgICBhLmhyZWYgPSBvYmplY3RVcmw7XG4gICAgICAgIGEuZG93bmxvYWQgPSBjb25maWcuZmlsZU5hbWU7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICAgIGEuY2xpY2soKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChvYmplY3RVcmwpO1xuICAgICAgICBpZiAoY29uZmlnLnN1Y2Nlc3NNZXNzYWdlKSB7XG4gICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5zdWNjZXNzKGNvbmZpZy5zdWNjZXNzTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ2xhYmVsQ29uZmlnLm1lc3NhZ2VzLmVycm9yLjAzNCcpICsgZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoIF8ucmVwbGFjZShfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UsICdsYWJlbENvbmZpZy5tZXNzYWdlcy5lcnJvci4wMzMnKSwgJ3tGSUxFX1RZUEV9JywgY29uZmlnLmZpbGVUeXBlICkgKyBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVDU1YoY29uZmlnKSB7XG4gICAgY29uc3QgdGFibGVEYXRhID0gY29uZmlnLnRhYmxlRGF0YTtcbiAgICBkZWxldGUgY29uZmlnLnRhYmxlRGF0YTtcbiAgICBsZXQgb3B0aW9ucyA9IHtcbiAgICAgIGZpZWxkU2VwYXJhdG9yOiAnLCcsXG4gICAgICBxdW90ZVN0cmluZ3M6ICdcIicsXG4gICAgICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXG4gICAgICBzaG93TGFiZWxzOiB0cnVlLFxuICAgICAgdXNlVGV4dEZpbGU6IGZhbHNlLFxuICAgICAgdXNlQm9tOiB0cnVlLFxuICAgICAgc2hvd1RpdGxlOiB0cnVlLFxuICAgICAgdGl0bGU6ICcnLFxuICAgICAgZmlsZW5hbWU6ICcnLFxuICAgICAgaGVhZGVyczogW11cbiAgICB9O1xuICAgIG9wdGlvbnMgPSBfLm1lcmdlKG9wdGlvbnMsIGNvbmZpZyk7XG4gICAgY29uc3QgY3N2RXhwb3J0ZXIgPSBuZXcgRXhwb3J0VG9Dc3Yob3B0aW9ucyk7XG4gICAgY3N2RXhwb3J0ZXIuZ2VuZXJhdGVDc3YodGFibGVEYXRhKTtcbiAgfVxuXG4gIGdldEJyYW5jaGluZ0xvZ2ljQnlGb2xkZXIoaWRlbnRpZmllcikge1xuICAgIGNvbnN0IG5vZGVEYXRhID0gdGhpcy50cmVlU2VydmljZS5nZXROb2RlQnlJZChpZGVudGlmaWVyKTtcbiAgICBjb25zdCBicmFuY2hpbmdMb2dpYyA9IF8uZ2V0KG5vZGVEYXRhLCAnZGF0YS5tZXRhZGF0YS5icmFuY2hpbmdMb2dpYycpO1xuICAgIHJldHVybiBicmFuY2hpbmdMb2dpYyB8fCB7fTtcbiAgfVxuXG4vKipcbiAqXG4gKiBAcHVibGljXG4gKiBAcGFyYW0gaWRlbnRpZmllciBpZGVudGlmaWVyIG9mIHRoZSBub2RlXG4gKiBAcmV0dXJucyB7IHNvdXJjZTogW10sIHRhcmdldDogW10sIHNvdXJjZVRhcmdldD86IFtdIH1cbiAqIEBtZW1iZXJvZiBFZGl0b3JTZXJ2aWNlXG4gKi9cbmdldERlcGVuZGVudE5vZGVzKGlkZW50aWZpZXIpIHtcbiAgICBjb25zdCBzZWN0aW9uQnJhbmNoaW5nTG9naWMgPSB0aGlzLmdldEJyYW5jaGluZ0xvZ2ljQnlOb2RlSWQoaWRlbnRpZmllcik7XG5cbiAgICBpZiAoIV8uaXNFbXB0eShzZWN0aW9uQnJhbmNoaW5nTG9naWMpKSB7XG4gICAgIGNvbnN0IGJyYW5jaGluZ0VudHJ5ID0gdGhpcy5nZXRCcmFuY2hpbmdMb2dpY0VudHJ5KHNlY3Rpb25CcmFuY2hpbmdMb2dpYywgaWRlbnRpZmllcik7XG4gICAgIGNvbnN0IHNvdXJjZSA9IF8uZ2V0KGJyYW5jaGluZ0VudHJ5LCAnc291cmNlJyk7XG4gICAgIGlmICghXy5pc0VtcHR5KHNvdXJjZSkpIHsgLy8gaWYgdGhlIG5vZGUgaXMgYSBkZXBlbmRlbnQgbm9kZVxuXG4gICAgICAgY29uc3Qgc291cmNlQnJhbmNoaW5nRW50cnkgPSB0aGlzLmdldEJyYW5jaGluZ0xvZ2ljRW50cnkoc2VjdGlvbkJyYW5jaGluZ0xvZ2ljLCBfLmZpcnN0KGJyYW5jaGluZ0VudHJ5LnNvdXJjZSkpO1xuXG4gICAgICAgcmV0dXJuICFfLmlzRW1wdHkoc291cmNlQnJhbmNoaW5nRW50cnkpID8geyBzb3VyY2U6IGJyYW5jaGluZ0VudHJ5LnNvdXJjZSwgdGFyZ2V0OiBicmFuY2hpbmdFbnRyeS50YXJnZXQsXG4gICAgICAgIHNvdXJjZVRhcmdldDogc291cmNlQnJhbmNoaW5nRW50cnkudGFyZ2V0IH0gOiB7fTtcblxuICAgICB9IGVsc2UgeyAvLyBpZiB0aGUgbm9kZSBpcyBhIHBhcmVudCBub2RlXG4gICAgICAgcmV0dXJuICFfLmlzRW1wdHkoYnJhbmNoaW5nRW50cnkpID8geyBzb3VyY2U6IGJyYW5jaGluZ0VudHJ5LnNvdXJjZSwgdGFyZ2V0OiBicmFuY2hpbmdFbnRyeS50YXJnZXQgfSA6IHt9O1xuICAgICB9XG4gICAgfVxuICB9XG5cbi8qKlxuICpcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBpZGVudGlmaWVyIGlkZW50aWZpZXIgb2YgdGhlIG5vZGVcbiAqIEByZXR1cm5zIHtcImRvX2lkXCI6IHsgXCJ0YXJnZXRcIjogWyBcImRvX2lkMTIzXCIsIFwiZG9faWQ0NTZcIiBdLCBcInByZUNvbmRpdGlvblwiOiB7fSwgXCJzb3VyY2VcIjogW10gfX1cbiAqIEBtZW1iZXJvZiBFZGl0b3JTZXJ2aWNlXG4gKi9cbiAgZ2V0QnJhbmNoaW5nTG9naWNCeU5vZGVJZChpZGVudGlmaWVyKSB7XG4gICAgY29uc3QgbGVhZk5vZGUgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldE5vZGVCeUlkKGlkZW50aWZpZXIpO1xuICAgIGNvbnN0IHBhcmVudElkZW50aWZpZXIgPSBfLmdldChsZWFmTm9kZSwgJ3BhcmVudC5kYXRhLmlkJyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QnJhbmNoaW5nTG9naWNCeUZvbGRlcihwYXJlbnRJZGVudGlmaWVyKTtcbiAgfVxuXG4gIGdldEJyYW5jaGluZ0xvZ2ljRW50cnkocGFyZW50QnJhbmNoaW5nTG9naWMsIGlkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gXy5maW5kKHBhcmVudEJyYW5jaGluZ0xvZ2ljLCAobG9naWMsIGtleSkgPT4ge1xuICAgICAgcmV0dXJuIGtleSA9PT0gaWRlbnRpZmllcjtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEZsYXR0ZW5lZEJyYW5jaGluZ0xvZ2ljKGRhdGEpIHtcbiAgICBjb25zdCBmbGF0SGllcmFyY2h5ID0gdGhpcy5fdG9GbGF0T2JqRnJvbUhpZXJhcmNoeShkYXRhKTtcbiAgICBjb25zdCBicmFuY2hpbmdMb2dpY3MgPSBfLmNvbXBhY3QoXy5tYXAoZmxhdEhpZXJhcmNoeSwgJ2JyYW5jaGluZ0xvZ2ljJykpO1xuICAgIHJldHVybiBfLnJlZHVjZShicmFuY2hpbmdMb2dpY3MsIChhY2MsIHZhbCkgPT4ge1xuICAgICAgcmV0dXJuICBfLmFzc2lnbihhY2MsIHZhbCk7XG4gICAgfSwge30pO1xuICB9XG5cbiAgZ2V0UGFyZW50RGVwZW5kZW50TWFwKGRhdGEpIHtcbiAgICBjb25zdCBicmFuY2hpbmdMb2dpYyA9IHRoaXMuZ2V0RmxhdHRlbmVkQnJhbmNoaW5nTG9naWMoZGF0YSk7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgXy5mb3JFYWNoKF8ua2V5cyhicmFuY2hpbmdMb2dpYyksIGl0ZW0gPT4ge1xuICAgICAgb2JqW2l0ZW1dID0gIV8uaXNFbXB0eShicmFuY2hpbmdMb2dpY1tpdGVtXS5zb3VyY2UpID8gJ2RlcGVuZGVudCcgOiAhXy5pc0VtcHR5KGJyYW5jaGluZ0xvZ2ljW2l0ZW1dLnRhcmdldCkgPyAncGFyZW50JyA6ICcnO1xuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBnZXRQcmltYXJ5Q2F0ZWdvcnlOYW1lKHNlY3Rpb25JZCkge1xuICAgIGNvbnN0IG5vZGVEYXRhID0gdGhpcy50cmVlU2VydmljZS5nZXROb2RlQnlJZChzZWN0aW9uSWQpO1xuICAgIHJldHVybiBfLmdldChub2RlRGF0YSwgJ2RhdGEucHJpbWFyeUNhdGVnb3J5Jyk7XG4gIH1cblxuICAvKipcbiAgICogZmV0Y2ggT3V0Y29tZSBEZWNsYXJhdGlvbiBsZXZlbHMgdXNpbmcgdGhlIHF1ZXN0aW9uc2V0SWRcbiAgICogb25seSBmb3IgT2JzZXJ2YXRpb24gd2l0aCBSdWJyaWNzXG4gICAqIEBwYXJhbSBpZGVudGlmaWVyIHF1ZXN0aW9uc2V0IGlkZW50aWZpZXJcbiAgICovXG4gICBmZXRjaE91dENvbWVEZWNsYXJhdGlvbihxdWVzdGlvblNldElkLCBvcHRpb246IGFueSA9IHsgcGFyYW1zOiB7fSB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLlVSTFNbdGhpcy5lZGl0b3JDb25maWcuY29uZmlnLm9iamVjdFR5cGVdO1xuICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgZmllbGRzOiAnb3V0Y29tZURlY2xhcmF0aW9uJ1xuICAgIH07XG4gICAgY29uc3QgaGllcmFyY2h5VXJsID0gYCR7dXJsLlJFQUR9LyR7cXVlc3Rpb25TZXRJZH1gO1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIHVybDogaGllcmFyY2h5VXJsLFxuICAgICAgcGFyYW06IHsgLi4ucGFyYW0sIC4uLm9wdGlvbi5wYXJhbXMgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UuZ2V0KHJlcSk7XG4gIH1cblxuICBnZXQgcXVhbGl0eUZvcm1Db25maWcoKXtcbiAgICByZXR1cm4gdGhpcy5fcXVhbGl0eUZvcm1Db25maWc7XG4gIH1cblxuICBwcml2YXRlIHNldFF1YWxpdHlGb3JtQ29uZmlnKHZhbHVlOiBhbnkpe1xuICAgIHJldHVybiB0aGlzLl9xdWFsaXR5Rm9ybUNvbmZpZyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzUmV2aWV3ZXJRdWFsaXR5Q2hlY2tFbmFibGVkKCl7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmV2aWV3ZXJRdWFsaXR5Q2hlY2tFbmFibGVkO1xuICAgIH1cbiAgXG4gICAgcHJpdmF0ZSBzZXRJc1Jldmlld2VyUXVhbGl0eUNoZWNrRW5hYmxlZCh2YWx1ZTogYm9vbGVhbil7XG4gICAgICByZXR1cm4gdGhpcy5faXNSZXZpZXdlclF1YWxpdHlDaGVja0VuYWJsZWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgYXBwZW5kQ2xvdWRTdG9yYWdlSGVhZGVycyhjb25maWcpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gIF8uZ2V0KHRoaXMuZWRpdG9yQ29uZmlnLCAnY29udGV4dC5jbG91ZFN0b3JhZ2UucHJlc2lnbmVkX2hlYWRlcnMnLCB7fSk7XG4gICAgaWYgKCFfLmlzRW1wdHkoaGVhZGVycykpIHtcbiAgICAgIGNvbmZpZy5oZWFkZXJzID0gey4uLmNvbmZpZy5oZWFkZXJzLCAuLi5oZWFkZXJzfTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -27,6 +27,27 @@ export class QuestionService {
27
27
  };
28
28
  return this.publicDataService.get(option);
29
29
  }
30
+ upsertQuestion(questionId, questionBody) {
31
+ let mode = questionId ? 'UPDATE' : 'CREATE';
32
+ const req = {
33
+ url: `${this.configService.urlConFig.URLS[this.editorService.editorConfig.config.objectType][mode]}${mode === 'UPDATE' ? questionId : ''}`,
34
+ data: {
35
+ request: questionBody
36
+ }
37
+ };
38
+ return mode === 'UPDATE' ? this.publicDataService.patch(req)
39
+ : this.publicDataService.post(req);
40
+ }
41
+ updateQuestion(questionId, requestObj) {
42
+ const objectType = _.get(this.editorService.editorConfig, 'config.objectType');
43
+ const req = {
44
+ url: `${this.configService.urlConFig.URLS[objectType].SYSYTEM_UPDATE}${questionId}`,
45
+ data: {
46
+ request: requestObj
47
+ }
48
+ };
49
+ return this.publicDataService.patch(req);
50
+ }
30
51
  updateHierarchyQuestionCreate(hierarchyBody) {
31
52
  const requestObj = {
32
53
  data: hierarchyBody
@@ -73,11 +94,11 @@ export class QuestionService {
73
94
  }
74
95
  createMediaAsset(req) {
75
96
  const reqParam = {
76
- url: _.get(this.configService.urlConFig, 'URLS.CONTENT.CREATE'),
97
+ url: _.get(this.configService.urlConFig, 'URLS.ASSET.CREATE'),
77
98
  data: {
78
99
  request: {
79
- content: {
80
- contentType: 'Asset',
100
+ asset: {
101
+ primaryCategory: 'asset',
81
102
  language: ['English'],
82
103
  code: uuidv4(),
83
104
  }
@@ -89,7 +110,7 @@ export class QuestionService {
89
110
  }
90
111
  uploadMedia(req, assetId) {
91
112
  let reqParam = {
92
- url: `${this.configService.urlConFig.URLS.CONTENT.UPLOAD}${assetId}`,
113
+ url: `${this.configService.urlConFig.URLS.ASSET.UPLOAD}${assetId}`,
93
114
  data: req.data
94
115
  };
95
116
  reqParam = req ? _.merge({}, reqParam, req) : reqParam;
@@ -106,7 +127,7 @@ export class QuestionService {
106
127
  }
107
128
  getVideo(videoId) {
108
129
  const reqParam = {
109
- url: `${this.configService.urlConFig.URLS.CONTENT.READ}${videoId}`
130
+ url: `${this.configService.urlConFig.URLS.ASSET.READ}${videoId}`
110
131
  };
111
132
  return this.publicDataService.get(reqParam);
112
133
  }
@@ -126,35 +147,6 @@ export class QuestionService {
126
147
  }
127
148
  return this.publicDataService.post(reqParam);
128
149
  }
129
- updateQuestion(questionId, requestBody) {
130
- const req = {
131
- url: `${this.configService.urlConFig.URLS.QUESTION.UPDATE}${questionId}`,
132
- data: {
133
- request: requestBody
134
- }
135
- };
136
- return this.publicDataService.patch(req);
137
- }
138
- upsertQuestion(questionId, requestBody) {
139
- if (questionId) {
140
- const req = {
141
- url: `${this.configService.urlConFig.URLS.QUESTION.UPDATE}${questionId}`,
142
- data: {
143
- request: requestBody
144
- }
145
- };
146
- return this.publicDataService.patch(req);
147
- }
148
- else {
149
- const req = {
150
- url: this.configService.urlConFig.URLS.QUESTION.CREATE,
151
- data: {
152
- request: requestBody
153
- }
154
- };
155
- return this.publicDataService.post(req);
156
- }
157
- }
158
150
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QuestionService, deps: [{ token: i1.DataService }, { token: i2.HttpClient }, { token: i3.ConfigService }, { token: i4.PublicDataService }, { token: i5.EditorService }], target: i0.ɵɵFactoryTarget.Injectable }); }
159
151
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QuestionService, providedIn: 'root' }); }
160
152
  }
@@ -164,4 +156,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
164
156
  providedIn: 'root'
165
157
  }]
166
158
  }], ctorParameters: function () { return [{ type: i1.DataService }, { type: i2.HttpClient }, { type: i3.ConfigService }, { type: i4.PublicDataService }, { type: i5.EditorService }]; } });
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbGxlY3Rpb24tZWRpdG9yLWxpYnJhcnkvc3JjL2xpYi9zZXJ2aWNlcy9xdWVzdGlvbi9xdWVzdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLM0MsT0FBTyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUM7QUFDL0IsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFRcEMsTUFBTSxPQUFPLGVBQWU7SUFFMUIsWUFBbUIsV0FBd0IsRUFBRSxJQUFnQixFQUFVLGFBQTRCLEVBQ3pGLGlCQUFvQyxFQUFVLGFBQTRCO1FBRGpFLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQTRCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ3pGLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUNsRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsWUFBWSxDQUFDLFVBQVUsRUFBRSxvQkFBcUI7UUFDNUMsMkNBQTJDO1FBQzNDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBQy9ELEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDcEUsTUFBTSxNQUFNLEdBQUc7WUFDYixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFVLEVBQUU7WUFDdEUsS0FBSyxFQUFFO2dCQUNMLE1BQU0sRUFB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QWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO2dCQUN0RCxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLFdBQVc7aUJBQ3JCO2FBQ0YsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7K0dBM0pVLGVBQWU7bUhBQWYsZUFBZSxjQUZkLE1BQU07OzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBQdWJsaWNEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3B1YmxpYy1kYXRhL3B1YmxpYy1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmVyUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NlcnZlclJlc3BvbnNlJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9jb25maWcvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uL2VkaXRvci9lZGl0b3Iuc2VydmljZSc7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblNlcnZpY2Uge1xuICBwdWJsaWMgaHR0cDogSHR0cENsaWVudDtcbiAgY29uc3RydWN0b3IocHVibGljIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSwgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHVibGljRGF0YVNlcnZpY2U6IFB1YmxpY0RhdGFTZXJ2aWNlLCBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UpIHtcbiAgICB0aGlzLmh0dHAgPSBodHRwO1xuICB9XG5cbiAgcmVhZFF1ZXN0aW9uKHF1ZXN0aW9uSWQsIGxlYWZGb3JtQ29uZmlnZmllbGRzPykge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICBsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuZWRpdG9yQ29uZmlnLnJlYWRRdWVzdGlvbkZpZWxkcztcbiAgICBmaWVsZCA9IGxlYWZGb3JtQ29uZmlnZmllbGRzID8gZmllbGQgKyBsZWFmRm9ybUNvbmZpZ2ZpZWxkcyA6IGZpZWxkO1xuICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgIHVybDogYCR7dGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTLlFVRVNUSU9OLlJFQUR9JHtxdWVzdGlvbklkfWAsXG4gICAgICBwYXJhbToge1xuICAgICAgICBmaWVsZHM6IGZpZWxkXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5nZXQob3B0aW9uKTtcbiAgfVxuXG4gIHVwZGF0ZUhpZXJhcmNoeVF1ZXN0aW9uQ3JlYXRlKGhpZXJhcmNoeUJvZHkpOiBPYnNlcnZhYmxlPFNlcnZlclJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdE9iaiA9IHtcbiAgICAgIGRhdGE6IGhpZXJhcmNoeUJvZHlcbiAgICB9O1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIHVybDogdGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTW3RoaXMuZWRpdG9yU2VydmljZS5lZGl0b3JDb25maWcuY29uZmlnLm9iamVjdFR5cGVdLkhJRVJBUkNIWV9VUERBVEUsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPYmpcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBhdGNoKHJlcSk7XG4gIH1cblxuICB1cGRhdGVIaWVyYXJjaHlRdWVzdGlvblVwZGF0ZShoaWVyYXJjaHlCb2R5KTogT2JzZXJ2YWJsZTxTZXJ2ZXJSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcXVlc3RPYmogPSB7XG4gICAgICBkYXRhOiBoaWVyYXJjaHlCb2R5XG4gICAgfTtcbiAgICBjb25zdCByZXEgPSB7XG4gICAgICB1cmw6IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMU1t0aGlzLmVkaXRvclNlcnZpY2UuZWRpdG9yQ29uZmlnLmNvbmZpZy5vYmplY3RUeXBlXS5ISUVSQVJDSFlfVVBEQVRFLFxuICAgICAgZGF0YToge1xuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T2JqXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5wYXRjaChyZXEpO1xuICB9XG5cbiAgZ2V0QXNzZXRNZWRpYShyZXE/OiBvYmplY3QpIHtcbiAgICBjb25zdCByZXFQYXJhbSA9IHtcbiAgICAgIHVybDogXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZywgJ1VSTFMuY29tcG9zaXRTZWFyY2gnKSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAnQXNzZXQnLFxuICAgICAgICAgICAgY29tcGF0aWJpbGl0eUxldmVsOiB7XG4gICAgICAgICAgICAgIG1pbjogMSxcbiAgICAgICAgICAgICAgbWF4OiAyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzOiBbJ0xpdmUnXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxpbWl0OiA1MCxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgcmVxUGFyYW0uZGF0YS5yZXF1ZXN0ID0gcmVxID8gXy5tZXJnZSh7fSwgcmVxUGFyYW0uZGF0YS5yZXF1ZXN0LCByZXEpIDogcmVxUGFyYW07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucG9zdChyZXFQYXJhbSk7XG4gIH1cblxuICBjcmVhdGVNZWRpYUFzc2V0KHJlcT86IG9iamVjdCkge1xuICAgIGNvbnN0IHJlcVBhcmFtID0ge1xuICAgICAgdXJsOiBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLCAnVVJMUy5DT05URU5ULkNSRUFURScpLFxuICAgICAgZGF0YToge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgY29udGVudFR5cGU6ICdBc3NldCcsXG4gICAgICAgICAgICBsYW5ndWFnZTogWydFbmdsaXNoJ10sXG4gICAgICAgICAgICBjb2RlOiB1dWlkdjQoKSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJlcVBhcmFtLmRhdGEucmVxdWVzdCA9IHJlcSA/IF8ubWVyZ2Uoe30sIHJlcVBhcmFtLmRhdGEucmVxdWVzdCwgcmVxKSA6IHJlcVBhcmFtO1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBvc3QocmVxUGFyYW0pO1xuICB9XG5cbiAgdXBsb2FkTWVkaWEocmVxLCBhc3NldElkOiBhbnkpIHtcbiAgICBsZXQgcmVxUGFyYW0gPSB7XG4gICAgICB1cmw6IGAke3RoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMUy5DT05URU5ULlVQTE9BRH0ke2Fzc2V0SWR9YCxcbiAgICAgIGRhdGE6IHJlcS5kYXRhXG4gICAgfTtcbiAgICByZXFQYXJhbSA9IHJlcSA/IF8ubWVyZ2Uoe30sIHJlcVBhcmFtLCByZXEpIDogcmVxUGFyYW07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucG9zdChyZXFQYXJhbSk7XG4gIH1cblxuICBnZW5lcmF0ZVByZVNpZ25lZFVybChyZXEsIGNvbnRlbnRJZDogYW55KSB7XG4gICAgY29uc3QgcmVxUGFyYW0gPSB7XG4gICAgICB1cmw6IGAke3RoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMUy5DT05URU5ULlVQTE9BRF9VUkx9JHtjb250ZW50SWR9YCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcmVxdWVzdDogcmVxXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5wb3N0KHJlcVBhcmFtKTtcbiAgfVxuXG4gIGdldFZpZGVvKHZpZGVvSWQpIHtcbiAgICBjb25zdCByZXFQYXJhbSA9IHtcbiAgICAgIHVybDogYCR7dGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTLkNPTlRFTlQuUkVBRH0ke3ZpZGVvSWR9YFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UuZ2V0KHJlcVBhcmFtKTtcbiAgfVxuXG4gIGdldFF1ZXN0aW9uTGlzdChyZXEsIGZpZWxkPzogYW55KSB7XG4gICAgY29uc3QgcmVxUGFyYW06IGFueSA9IHtcbiAgICAgIHVybDogdGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTLlF1ZXN0aW9uU2V0LlFVRVNUSU9OX0xJU1QsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBzZWFyY2g6IHtcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHJlcVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKGZpZWxkKSB7XG4gICAgICByZXFQYXJhbS5wYXJhbSA9IHsgZmllbGRzOiBmaWVsZCB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5wb3N0KHJlcVBhcmFtKTtcbiAgfVxuXG4gIHVwZGF0ZVF1ZXN0aW9uKHF1ZXN0aW9uSWQsIHJlcXVlc3RCb2R5KTogT2JzZXJ2YWJsZTxTZXJ2ZXJSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIHVybDogYCR7dGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTLlFVRVNUSU9OLlVQREFURX0ke3F1ZXN0aW9uSWR9YCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdEJvZHlcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBhdGNoKHJlcSk7XG4gIH1cblxuICB1cHNlcnRRdWVzdGlvbihxdWVzdGlvbklkLCByZXF1ZXN0Qm9keSk6IE9ic2VydmFibGU8U2VydmVyUmVzcG9uc2U+IHtcbiAgICBpZiAocXVlc3Rpb25JZCkge1xuICAgICAgY29uc3QgcmVxID0ge1xuICAgICAgICB1cmw6IGAke3RoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMUy5RVUVTVElPTi5VUERBVEV9JHtxdWVzdGlvbklkfWAsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0Qm9keVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucGF0Y2gocmVxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVxID0ge1xuICAgICAgICB1cmw6IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMUy5RVUVTVElPTi5DUkVBVEUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0Qm9keVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucG9zdChyZXEpO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbGxlY3Rpb24tZWRpdG9yLWxpYnJhcnkvc3JjL2xpYi9zZXJ2aWNlcy9xdWVzdGlvbi9xdWVzdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLM0MsT0FBTyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUM7QUFDL0IsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFPcEMsTUFBTSxPQUFPLGVBQWU7SUFFMUIsWUFBbUIsV0FBd0IsRUFBRSxJQUFnQixFQUFVLGFBQTRCLEVBQy9FLGlCQUFvQyxFQUFVLGFBQTRCO1FBRDNFLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQTRCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQy9FLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1RixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsWUFBWSxDQUFDLFVBQVUsRUFBRSxvQkFBcUI7UUFDNUMsMkNBQTJDO1FBQzNDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBQy9ELEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBRSxLQUFLLENBQUM7UUFDckUsTUFBTSxNQUFNLEdBQUc7WUFDYixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFVLEVBQUU7WUFDdEUsS0FBSyxFQUFFO2dCQUNMLE1BQU0sRUFB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U0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYTtZQUNoRSxJQUFJLEVBQUU7Z0JBQ0osT0FBTyxFQUFFO29CQUNQLE1BQU0sRUFBRTt3QkFDTixVQUFVLEVBQUUsR0FBRztxQkFDaEI7aUJBQ0Y7YUFDRjtTQUNGLENBQUM7UUFDRixJQUFJLEtBQUssRUFBQztZQUNSLFFBQVEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDcEM7UUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQzsrR0FwSlUsZUFBZTttSEFBZixlQUFlLGNBRmQsTUFBTTs7NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFB1YmxpY0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljLWRhdGEvcHVibGljLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2VydmVyUmVzcG9uc2UnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2NvbmZpZy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vZWRpdG9yL2VkaXRvci5zZXJ2aWNlJztcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uU2VydmljZSB7XG4gIHB1YmxpYyBodHRwOiBIdHRwQ2xpZW50O1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLCBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcHVibGljRGF0YVNlcnZpY2U6IFB1YmxpY0RhdGFTZXJ2aWNlLCBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UpIHtcbiAgICB0aGlzLmh0dHAgPSBodHRwO1xuICB9XG5cbiAgcmVhZFF1ZXN0aW9uKHF1ZXN0aW9uSWQsIGxlYWZGb3JtQ29uZmlnZmllbGRzPyApIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgbGV0IGZpZWxkID0gdGhpcy5jb25maWdTZXJ2aWNlLmVkaXRvckNvbmZpZy5yZWFkUXVlc3Rpb25GaWVsZHM7XG4gICAgZmllbGQgPSBsZWFmRm9ybUNvbmZpZ2ZpZWxkcyA/IGZpZWxkICsgbGVhZkZvcm1Db25maWdmaWVsZHMgOiAgZmllbGQ7XG4gICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgdXJsOiBgJHt0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLlVSTFMuUVVFU1RJT04uUkVBRH0ke3F1ZXN0aW9uSWR9YCxcbiAgICAgIHBhcmFtOiB7XG4gICAgICAgIGZpZWxkczogZmllbGRcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLmdldChvcHRpb24pO1xuICB9XG5cbiAgdXBzZXJ0UXVlc3Rpb24ocXVlc3Rpb25JZCwgcXVlc3Rpb25Cb2R5KSB7XG4gICAgbGV0IG1vZGUgPSBxdWVzdGlvbklkID8gJ1VQREFURScgOiAnQ1JFQVRFJztcbiAgICBjb25zdCByZXEgPSB7XG4gICAgICB1cmw6IGAke3RoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMU1t0aGlzLmVkaXRvclNlcnZpY2UuZWRpdG9yQ29uZmlnLmNvbmZpZy5vYmplY3RUeXBlXVttb2RlXX0ke21vZGUgPT09ICdVUERBVEUnID8gcXVlc3Rpb25JZCA6ICcnfWAsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlcXVlc3Q6IHF1ZXN0aW9uQm9keVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kZSA9PT0gJ1VQREFURScgPyB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBhdGNoKHJlcSlcbiAgICAgIDogdGhpcy5wdWJsaWNEYXRhU2VydmljZS5wb3N0KHJlcSk7XG4gIH1cblxuICB1cGRhdGVRdWVzdGlvbihxdWVzdGlvbklkLCByZXF1ZXN0T2JqKSB7XG4gICAgY29uc3Qgb2JqZWN0VHlwZSA9IF8uZ2V0KHRoaXMuZWRpdG9yU2VydmljZS5lZGl0b3JDb25maWcsICdjb25maWcub2JqZWN0VHlwZScpO1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIHVybDogYCR7dGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTW29iamVjdFR5cGVdLlNZU1lURU1fVVBEQVRFfSR7cXVlc3Rpb25JZH1gLFxuICAgICAgZGF0YToge1xuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0T2JqXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5wYXRjaChyZXEpO1xuICB9XG5cbiAgdXBkYXRlSGllcmFyY2h5UXVlc3Rpb25DcmVhdGUoaGllcmFyY2h5Qm9keSk6IE9ic2VydmFibGU8U2VydmVyUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0T2JqID0ge1xuICAgICAgZGF0YTogaGllcmFyY2h5Qm9keVxuICAgIH07XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgdXJsOiB0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLlVSTFNbdGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZy5jb25maWcub2JqZWN0VHlwZV0uSElFUkFSQ0hZX1VQREFURSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdE9ialxuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucGF0Y2gocmVxKTtcbiAgfVxuXG4gIHVwZGF0ZUhpZXJhcmNoeVF1ZXN0aW9uVXBkYXRlKGhpZXJhcmNoeUJvZHkpOiBPYnNlcnZhYmxlPFNlcnZlclJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdE9iaiA9IHtcbiAgICAgIGRhdGE6IGhpZXJhcmNoeUJvZHlcbiAgICB9O1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgIHVybDogdGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTW3RoaXMuZWRpdG9yU2VydmljZS5lZGl0b3JDb25maWcuY29uZmlnLm9iamVjdFR5cGVdLkhJRVJBUkNIWV9VUERBVEUsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPYmpcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBhdGNoKHJlcSk7XG4gIH1cblxuICBnZXRBc3NldE1lZGlhKHJlcT86IG9iamVjdCkge1xuICAgIGNvbnN0IHJlcVBhcmFtID0ge1xuICAgICAgdXJsOiBfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLCAnVVJMUy5jb21wb3NpdFNlYXJjaCcpLFxuICAgICAgZGF0YToge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgICAgY29udGVudFR5cGU6ICdBc3NldCcsXG4gICAgICAgICAgICBjb21wYXRpYmlsaXR5TGV2ZWw6IHtcbiAgICAgICAgICAgICAgbWluOiAxLFxuICAgICAgICAgICAgICBtYXg6IDJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0dXM6IFsnTGl2ZSddLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGltaXQ6IDUwLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICByZXFQYXJhbS5kYXRhLnJlcXVlc3QgPSByZXEgPyBfLm1lcmdlKHt9LCByZXFQYXJhbS5kYXRhLnJlcXVlc3QsIHJlcSkgOiByZXFQYXJhbTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5wb3N0KHJlcVBhcmFtKTtcbiAgfVxuXG4gIGNyZWF0ZU1lZGlhQXNzZXQocmVxPzogb2JqZWN0KSB7XG4gICAgY29uc3QgcmVxUGFyYW0gPSB7XG4gICAgICB1cmw6IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcsICdVUkxTLkFTU0VULkNSRUFURScpLFxuICAgICAgZGF0YToge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgYXNzZXQ6IHtcbiAgICAgICAgICAgIHByaW1hcnlDYXRlZ29yeTogJ2Fzc2V0JyxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBbJ0VuZ2xpc2gnXSxcbiAgICAgICAgICAgIGNvZGU6IHV1aWR2NCgpLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgcmVxUGFyYW0uZGF0YS5yZXF1ZXN0ID0gcmVxID8gXy5tZXJnZSh7fSwgcmVxUGFyYW0uZGF0YS5yZXF1ZXN0LCByZXEpIDogcmVxUGFyYW07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucG9zdChyZXFQYXJhbSk7XG4gIH1cblxuICB1cGxvYWRNZWRpYShyZXEsIGFzc2V0SWQ6IGFueSkge1xuICAgIGxldCByZXFQYXJhbSA9IHtcbiAgICAgIHVybDogYCR7dGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTLkFTU0VULlVQTE9BRH0ke2Fzc2V0SWR9YCxcbiAgICAgIGRhdGE6IHJlcS5kYXRhXG4gICAgfTtcbiAgICByZXFQYXJhbSA9IHJlcSA/IF8ubWVyZ2Uoe30sIHJlcVBhcmFtLCByZXEpIDogcmVxUGFyYW07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucG9zdChyZXFQYXJhbSk7XG4gIH1cblxuICBnZW5lcmF0ZVByZVNpZ25lZFVybChyZXEsIGNvbnRlbnRJZDogYW55KSB7XG4gICAgY29uc3QgcmVxUGFyYW0gPSB7XG4gICAgICB1cmw6IGAke3RoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMUy5DT05URU5ULlVQTE9BRF9VUkx9JHtjb250ZW50SWR9YCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcmVxdWVzdDogcmVxXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5wb3N0KHJlcVBhcmFtKTtcbiAgfVxuXG4gIGdldFZpZGVvKHZpZGVvSWQpIHtcbiAgICBjb25zdCByZXFQYXJhbSA9IHtcbiAgICAgIHVybDogYCR7dGhpcy5jb25maWdTZXJ2aWNlLnVybENvbkZpZy5VUkxTLkFTU0VULlJFQUR9JHt2aWRlb0lkfWBcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLmdldChyZXFQYXJhbSk7XG4gIH1cblxuICBnZXRRdWVzdGlvbkxpc3QocmVxLCBmaWVsZD86IGFueSkge1xuICAgIGNvbnN0IHJlcVBhcmFtOiBhbnkgPSB7XG4gICAgICB1cmw6IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMUy5RdWVzdGlvblNldC5RVUVTVElPTl9MSVNULFxuICAgICAgZGF0YToge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgc2VhcmNoOiB7XG4gICAgICAgICAgICBpZGVudGlmaWVyOiByZXFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChmaWVsZCl7XG4gICAgICByZXFQYXJhbS5wYXJhbSA9IHsgZmllbGRzOiBmaWVsZCB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wdWJsaWNEYXRhU2VydmljZS5wb3N0KHJlcVBhcmFtKTtcbiAgfVxuXG59XG4iXX0=