@smartbit4all/ng-client 3.1.34 → 3.1.36

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 (69) hide show
  1. package/esm2020/lib/smart-client/smart-component-api-client.mjs +13 -1
  2. package/esm2020/lib/smart-filter-editor/api/api/filter.service.mjs +198 -0
  3. package/esm2020/lib/smart-filter-editor/api/configuration.mjs +91 -0
  4. package/esm2020/lib/smart-filter-editor/api/encoder.mjs +19 -0
  5. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.mjs +16 -0
  6. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +13 -0
  7. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +9 -0
  8. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +13 -0
  9. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionData.mjs +2 -0
  10. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionDataType.mjs +19 -0
  11. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionField.mjs +2 -0
  12. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +13 -0
  13. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +13 -0
  14. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.mjs +25 -0
  15. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionList.mjs +2 -0
  16. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +2 -0
  17. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionOperation.mjs +31 -0
  18. package/esm2020/lib/smart-filter-editor/api/param.mjs +2 -0
  19. package/esm2020/lib/smart-filter-editor/api/variables.mjs +9 -0
  20. package/esm2020/lib/smart-filter-editor/project.mjs +4 -0
  21. package/esm2020/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +54 -0
  22. package/esm2020/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.mjs +42 -0
  23. package/esm2020/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +109 -0
  24. package/esm2020/lib/smart-filter-editor/smart-filter-editor.model.mjs +2 -0
  25. package/esm2020/lib/smart-filter-editor/smart-filter-editor.module.mjs +53 -0
  26. package/esm2020/lib/smart-filter-editor/smart-filter-editor.service.mjs +43 -0
  27. package/esm2020/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.mjs +28 -0
  28. package/esm2020/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +107 -0
  29. package/esm2020/lib/smart-ng-client.module.mjs +6 -2
  30. package/esm2020/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +2 -2
  31. package/esm2020/lib/smart-table/tables/table.mjs +7 -1
  32. package/esm2020/projects.mjs +2 -1
  33. package/fesm2015/smartbit4all-ng-client.mjs +811 -79
  34. package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
  35. package/fesm2020/smartbit4all-ng-client.mjs +793 -79
  36. package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
  37. package/lib/smart-filter-editor/api/api/filter.service.d.ts +57 -0
  38. package/lib/smart-filter-editor/api/configuration.d.ts +104 -0
  39. package/lib/smart-filter-editor/api/encoder.d.ts +11 -0
  40. package/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.d.ts +16 -0
  41. package/lib/smart-filter-editor/api/model/filterExpressionBuilderField.d.ts +27 -0
  42. package/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.d.ts +39 -0
  43. package/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.d.ts +29 -0
  44. package/lib/smart-filter-editor/api/model/filterExpressionData.d.ts +29 -0
  45. package/lib/smart-filter-editor/api/model/filterExpressionDataType.d.ts +19 -0
  46. package/lib/smart-filter-editor/api/model/filterExpressionField.d.ts +38 -0
  47. package/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.d.ts +17 -0
  48. package/lib/smart-filter-editor/api/model/filterExpressionFieldList.d.ts +21 -0
  49. package/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.d.ts +25 -0
  50. package/lib/smart-filter-editor/api/model/filterExpressionList.d.ts +18 -0
  51. package/lib/smart-filter-editor/api/model/filterExpressionOperandData.d.ts +26 -0
  52. package/lib/smart-filter-editor/api/model/filterExpressionOperation.d.ts +31 -0
  53. package/lib/smart-filter-editor/api/param.d.ts +37 -0
  54. package/lib/smart-filter-editor/api/variables.d.ts +8 -0
  55. package/lib/smart-filter-editor/project.d.ts +3 -0
  56. package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.d.ts +17 -0
  57. package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.d.ts +18 -0
  58. package/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.d.ts +28 -0
  59. package/lib/smart-filter-editor/smart-filter-editor.model.d.ts +4 -0
  60. package/lib/smart-filter-editor/smart-filter-editor.module.d.ts +16 -0
  61. package/lib/smart-filter-editor/smart-filter-editor.service.d.ts +25 -0
  62. package/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.d.ts +13 -0
  63. package/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.d.ts +24 -0
  64. package/lib/smart-ng-client.module.d.ts +3 -2
  65. package/package.json +1 -1
  66. package/projects.d.ts +1 -0
  67. package/smartbit4all-ng-client-3.1.36.tgz +0 -0
  68. package/src/lib/smart-filter-editor/api/README.md +226 -0
  69. package/smartbit4all-ng-client-3.1.34.tgz +0 -0
@@ -166,6 +166,7 @@ let SmartComponentApiClient = class SmartComponentApiClient {
166
166
  delete uiActionRequest.params['param'];
167
167
  delete uiActionRequest.params['_files'];
168
168
  delete uiActionRequest.params['isMultiple'];
169
+ // await this.sendModelToServer();
169
170
  if (!isMultiple) {
170
171
  await this.viewContext.performUploadAction(this.uuid, uiActionRequest, param, files[0]);
171
172
  }
@@ -174,15 +175,26 @@ let SmartComponentApiClient = class SmartComponentApiClient {
174
175
  }
175
176
  }
176
177
  else if (widgetId && nodeId) {
178
+ // await this.sendModelToServer();
177
179
  await this.viewContext.performWidgetAction(this.uuid, widgetId, nodeId, uiActionRequest);
178
180
  }
179
181
  else if (widgetId) {
182
+ // await this.sendModelToServer();
180
183
  await this.viewContext.performWidgetMainAction(this.uuid, widgetId, uiActionRequest);
181
184
  }
182
185
  else {
183
186
  await this.viewContext.performAction(this.uuid, uiActionRequest);
184
187
  }
185
188
  }
189
+ // private async sendModelToServer() {
190
+ // this.submitForms(false);
191
+ // let dataChange = {
192
+ // kind: DataChangeKind.Widget,
193
+ // source: '',
194
+ // values: [['', this.getModel()]],
195
+ // };
196
+ // await this.viewContext.dataChanged(this.uuid!, dataChange);
197
+ // }
186
198
  handleSpecificDemandsAsynchronously(uiAction, uiActionRequest) {
187
199
  throw new Error('handleSpecificDemandsAsynchronously method not implemented.');
188
200
  }
@@ -399,4 +411,4 @@ export class WidgetMap {
399
411
  return this.widgets.get(key);
400
412
  }
401
413
  }
402
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jbGllbnQvc21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFLTCxrQkFBa0IsRUFDbEIsWUFBWSxHQUdiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUlMLGNBQWMsRUFHZCx1QkFBdUIsRUFHdkIseUJBQXlCLEVBR3pCLGVBQWUsR0FHaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUdsQyxJQUFzQix1QkFBdUIsR0FBN0MsTUFBc0IsdUJBQXVCO0lBbUczQyxZQUNZLE1BQWdCLEVBQ2hCLElBQXlDLEVBQ3JCLFFBQWdCO1FBRnBDLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBcUM7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQXJHdEMsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRTNDLGlCQUFZLEdBQXVDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQTZEckYsbUJBQWMsR0FBb0IsRUFBRSxDQUFDO1FBRXJDLGdCQUFXLEdBQWtCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQTRCckUsb0JBQW9CO1FBQ3BCLFlBQU8sR0FBd0UsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUUvRixnQkFBVyxHQUE4QyxJQUFJLFNBQVMsRUFBRSxDQUFD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LEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELFlBQVksQ0FBQyxHQUFXO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBHcmlkT3B0aW9ucyxcclxuICBTbWFydEZvcm0sXHJcbiAgU21hcnRGb3JtSW52YWxpZEZpZWxkcyxcclxuICBTbWFydEdyaWQsXHJcbiAgU21hcnRHcmlkQ29tcG9uZW50LFxyXG4gIFNtYXJ0U3ViamVjdCxcclxuICBTbWFydGZvcm1Db21wb25lbnQsXHJcbiAgU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlLFxyXG59IGZyb20gJy4uLy4uL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi9zbWFydC10cmVlL3Byb2plY3RzJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnRNb2RlbCxcclxuICBDb21wb25lbnRNb2RlbENoYW5nZSxcclxuICBEYXRhQ2hhbmdlLFxyXG4gIERhdGFDaGFuZ2VLaW5kLFxyXG4gIEV4ZWN1dGVVaUFjdGlvbk9wdGlvbnMsXHJcbiAgU21hcnRUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gIFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uLFxyXG4gIFVpQWN0aW9uQWRkaXRpb25hbFBhcmFtcyxcclxuICBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uTW9kZWwsXHJcbiAgVWlBY3Rpb25SZXF1ZXN0LFxyXG4gIFVpQWN0aW9uU2VydmljZSxcclxuICBVaUFjdGlvblNwZWNpZmljRGVtYW5kUmVzcG9uc2UsXHJcbiAgVXNlVWlBY3Rpb24yLFxyXG59IGZyb20gJy4uL3ZpZXctY29udGV4dC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0QXV0aGVudGljYXRpb25TZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi9zbWFydC1hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTbWFydENvbXBvbmVudEFwaUNsaWVudDxUPiBpbXBsZW1lbnRzIFVzZVVpQWN0aW9uMiB7XHJcbiAgcHJvdGVjdGVkIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgZGV0ZWN0Q2hhbmdlOiBTbWFydFN1YmplY3Q8Q29tcG9uZW50TW9kZWxDaGFuZ2U+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIHByaXZhdGUgX3V1aWQ/OiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgdXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBnZXQgdXVpZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3V1aWQ7XHJcbiAgfVxyXG4gIHNldCB1dWlkKHV1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuX3V1aWQgPT09IHV1aWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpcnN0VXVpZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBpZiAodGhpcy51dWlkKSB7XHJcbiAgICAgIHRoaXMudmlld0NvbnRleHQudW5mb2xsb3codGhpcy51dWlkKTtcclxuICAgICAgZmlyc3RVdWlkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91dWlkID0gdXVpZDtcclxuICAgIGlmICh1dWlkKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0cy53aWRnZXRzLmZvckVhY2goKHJlZiwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlZiBpbnN0YW5jZW9mIFNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICAgICAgcmVmLnV1aWQgPSB1dWlkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXJlZiAmJiAhZmlyc3RVdWlkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBQcm92aWRlZCByZWZlcmVuY2UgZm9yICR7a2V5fSBpcyB1bmRlZmluZWQgb24gdXVpZCBjaGFuZ2UuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCF0aGlzLnV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZFN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgIHRoaXMudXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkU3Vic2NyaXB0aW9uID0gdGhpcy52aWV3Q29udGV4dC51dWlkT2ZQYWdlSGFzQmVlbkNoYW5nZWRcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChwYWdlTmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFnZU5hbWUgPT09IHRoaXMucGFnZU5hbWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJ1bigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3Q29udGV4dC5mb2xsb3codGhpcy5fdXVpZCEsIHRoaXMuZGV0ZWN0Q2hhbmdlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21vZGVsOiBDb21wb25lbnRNb2RlbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgZ2V0IG1vZGVsKCk6IENvbXBvbmVudE1vZGVsIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RlbDtcclxuICB9XHJcbiAgc2V0IG1vZGVsKG1vZGVsOiBDb21wb25lbnRNb2RlbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcclxuXHJcbiAgICB0aGlzLmluaXRDb21wb25lbnRCeU1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kYXRhPzogVDtcclxuXHJcbiAgZ2V0IGRhdGEoKTogVCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICB9XHJcbiAgc2V0IGRhdGEobW9kZWw6IFQgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2RhdGEgPSBtb2RlbDtcclxuICAgIHRoaXMuZGF0YUNoYW5nZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVpQWN0aW9uTW9kZWxzOiBVaUFjdGlvbk1vZGVsW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGRhdGFDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIC8vIFVzZVVpQWN0aW9uXHJcbiAgLy8gc3VibWl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcbiAgLy8gcmVTdWJzY3JpYmVUb0NoYW5nZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG5cclxuICAvLyBHcmlkXHJcbiAgc21hcnRHcmlkPzogU21hcnRHcmlkO1xyXG5cclxuICAvLyBTZXJ2aWNlc1xyXG4gIHByb3RlY3RlZCB2aWV3Q29udGV4dDogU21hcnRWaWV3Q29udGV4dFNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHVpQWN0aW9uU2VydmljZTogVWlBY3Rpb25TZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCB1aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlOiBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCB0cmFuc2xhdGU/OiBTbWFydFRyYW5zbGF0ZVNlcnZpY2U7XHJcblxyXG4gIC8vIFRyZWVcclxuICBwcml2YXRlIF9zbWFydFRyZWVTZXJ2aWNlPzogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2U7XHJcblxyXG4gIHB1YmxpYyBnZXQgc21hcnRUcmVlU2VydmljZSgpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc21hcnRUcmVlU2VydmljZTtcclxuICB9XHJcbiAgcHVibGljIHNldCBzbWFydFRyZWVTZXJ2aWNlKHNtYXJ0VHJlZVNlcnZpY2U6IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fc21hcnRUcmVlU2VydmljZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdUaGUgZGVmYXVsdCB0cmVlIGhhcyBhbHJlYWR5IHNldCB1cCEnKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NtYXJ0VHJlZVNlcnZpY2UgPSBzbWFydFRyZWVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29udGFpbmVkIFdpZGdldHNcclxuICB3aWRnZXRzOiBXaWRnZXRNYXA8U21hcnRHcmlkQ29tcG9uZW50IHwgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfCB1bmRlZmluZWQ+ID0gbmV3IFdpZGdldE1hcCgpO1xyXG5cclxuICBmb3JtV2lkZ2V0czogV2lkZ2V0TWFwPFNtYXJ0Zm9ybUNvbXBvbmVudCB8IHVuZGVmaW5lZD4gPSBuZXcgV2lkZ2V0TWFwKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIGluamVjdDogSW5qZWN0b3IsXHJcbiAgICBwcm90ZWN0ZWQgYXV0aDogU21hcnRBdXRoZW50aWNhdGlvblNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBASW5qZWN0KCdwYWdlTmFtZScpIHByb3RlY3RlZCBwYWdlTmFtZTogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICB0aGlzLmRldGVjdENoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZTogQ29tcG9uZW50TW9kZWxDaGFuZ2UpID0+IHtcclxuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VzKGNoYW5nZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gaW5qZWN0LmdldChTbWFydFZpZXdDb250ZXh0U2VydmljZSk7XHJcblxyXG4gICAgdGhpcy51aUFjdGlvblNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uU2VydmljZSk7XHJcbiAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgX25nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ydW4oKTtcclxuICB9XHJcbiAgX25nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy52aWV3Q29udGV4dC51bmZvbGxvdyh0aGlzLnV1aWQhKTtcclxuICAgIHRoaXMud2lkZ2V0cy5jbGVhcldpZGdldHMoKTtcclxuXHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgaW5pdENvbXBvbmVudEJ5TW9kZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXREYXRhKCk7XHJcbiAgICB0aGlzLmluaXRBY3Rpb25zKCk7XHJcblxyXG4gICAgLy8gVE9ETzogbGF5b3V0LCB2YWx1ZVNldCwgd2lkZ2V0c1xyXG4gIH1cclxuXHJcbiAgaW5pdERhdGEoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tb2RlbD8uZGF0YSkge1xyXG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLm1vZGVsPy5kYXRhIGFzIGFueTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRBY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW9kZWw/LmFjdGlvbnMpIHtcclxuICAgICAgdGhpcy51aUFjdGlvbk1vZGVscyA9IHRoaXMubW9kZWw/LmFjdGlvbnMubWFwKCh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgc2VydmljZVRvVXNlOiB0aGlzLFxyXG4gICAgICAgICAgdWlBY3Rpb24sXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBydW4oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hdXRoLmJmZkFwaXNIYXZlQmVlblNldFVwKSB7XHJcbiAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hdXRoLmhlYWRlcnNVcGRhdGVkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lKTtcclxuICAgIC8vIHRoaXMubW9kZWwgPSBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmxvYWQodGhpcy51dWlkKTtcclxuICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQubG9hZDIodGhpcy51dWlkKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGV4ZWN1dGVVaUFjdGlvbih1aUFjdGlvbjogVWlBY3Rpb24sIG9wdGlvbnM/OiBFeGVjdXRlVWlBY3Rpb25PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZS51aUFjdGlvbk1vZGVsID0ge1xyXG4gICAgICBzZXJ2aWNlVG9Vc2U6IHRoaXMsXHJcbiAgICAgIHVpQWN0aW9uOiB1aUFjdGlvbixcclxuICAgIH07XHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZS5leGVjdXRlKHVpQWN0aW9uLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldEludmFsaWRGaWVsZHMoKTogU21hcnRGb3JtSW52YWxpZEZpZWxkcyB7XHJcbiAgICBsZXQgYWdncmVnYXRlZEludmFsaWRGaWVsZHM6IFNtYXJ0Rm9ybUludmFsaWRGaWVsZHMgPSB7XHJcbiAgICAgIGludmFsaWRGaWVsZEtleXM6IFtdLFxyXG4gICAgICBpbnZhbGlkRmllbGROYW1lczogW10sXHJcbiAgICB9O1xyXG5cclxuICAgIGZvciAobGV0IGVudHJ5IG9mIHRoaXMuZm9ybVdpZGdldHMud2lkZ2V0cykge1xyXG4gICAgICBsZXQgaW52YWxpZEZpZWxkc09mRm9ybSA9IGVudHJ5WzFdPy5nZXRJbnZhbGlkRmllbGRzKCk7XHJcbiAgICAgIGlmIChpbnZhbGlkRmllbGRzT2ZGb3JtKSB7XHJcbiAgICAgICAgaW52YWxpZEZpZWxkc09mRm9ybS5pbnZhbGlkRmllbGRLZXlzLmZvckVhY2goKGtleSkgPT5cclxuICAgICAgICAgIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzLmludmFsaWRGaWVsZEtleXMucHVzaChrZXkpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpbnZhbGlkRmllbGRzT2ZGb3JtLmludmFsaWRGaWVsZE5hbWVzLmZvckVhY2goKGtleSkgPT5cclxuICAgICAgICAgIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzLmludmFsaWRGaWVsZE5hbWVzLnB1c2goa2V5KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYWdncmVnYXRlZEludmFsaWRGaWVsZHM7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gVXNlVWlBY3Rpb25cclxuICBnZXRBZGRpdGlvbmFsUGFyYW1zKHVpQWN0aW9uOiBVaUFjdGlvbik6IFVpQWN0aW9uQWRkaXRpb25hbFBhcmFtcyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3JUZXh0QXJlYTogJycsXHJcbiAgICAgIGZvclRleHRGaWVsZDogJycsXHJcbiAgICB9O1xyXG4gIH1cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRGb3JtKHZhbGlkYXRlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1Ym1pdEZvcm1zKHZhbGlkYXRlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBlcmZvcm1VaUFjdGlvblJlcXVlc3QoXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCxcclxuICAgIHdpZGdldElkPzogc3RyaW5nLFxyXG4gICAgbm9kZUlkPzogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh1aUFjdGlvblJlcXVlc3QucGFyYW1zWydfZmlsZXMnXSkge1xyXG4gICAgICBjb25zdCBwYXJhbSA9IHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ3BhcmFtJ107XHJcbiAgICAgIGNvbnN0IGZpbGVzID0gdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snX2ZpbGVzJ107XHJcbiAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydpc011bHRpcGxlJ107XHJcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydwYXJhbSddO1xyXG4gICAgICBkZWxldGUgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snX2ZpbGVzJ107XHJcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydpc011bHRpcGxlJ107XHJcblxyXG4gICAgICBpZiAoIWlzTXVsdGlwbGUpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LnBlcmZvcm1VcGxvYWRBY3Rpb24odGhpcy51dWlkISwgdWlBY3Rpb25SZXF1ZXN0LCBwYXJhbSwgZmlsZXNbMF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQucGVyZm9ybVVwbG9hZE11bHRpcGxlQWN0aW9uKFxyXG4gICAgICAgICAgdGhpcy51dWlkISxcclxuICAgICAgICAgIHVpQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICAgIHBhcmFtLFxyXG4gICAgICAgICAgZmlsZXNcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHdpZGdldElkICYmIG5vZGVJZCkge1xyXG4gICAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LnBlcmZvcm1XaWRnZXRBY3Rpb24odGhpcy51dWlkISwgd2lkZ2V0SWQsIG5vZGVJZCwgdWlBY3Rpb25SZXF1ZXN0KTtcclxuICAgIH0gZWxzZSBpZiAod2lkZ2V0SWQpIHtcclxuICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbih0aGlzLnV1aWQhLCB3aWRnZXRJZCwgdWlBY3Rpb25SZXF1ZXN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQucGVyZm9ybUFjdGlvbih0aGlzLnV1aWQhLCB1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlU3BlY2lmaWNEZW1hbmRzQXN5bmNocm9ub3VzbHkoXHJcbiAgICB1aUFjdGlvbjogVWlBY3Rpb24sXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxyXG4gICk6IFByb21pc2U8VWlBY3Rpb25TcGVjaWZpY0RlbWFuZFJlc3BvbnNlPiB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhbmRsZVNwZWNpZmljRGVtYW5kc0FzeW5jaHJvbm91c2x5IG1ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBTdWJtaXRzIGFsbCB0aGUgcmVnaXN0ZXJlZCBmb3JtcyBpbiB0aGUgU21hcnRDb21wb25lbnRcclxuICAgKi9cclxuICBwdWJsaWMgc3VibWl0Rm9ybXModmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybVdpZGdldHM/LndpZGdldHM/LmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgZm9ybT8uc3VibWl0Rm9ybSh2YWxpZGF0ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRHcmlkKFxyXG4gICAgc21hcnRHcmlkOiBTbWFydEdyaWQsXHJcbiAgICBvcHRpb25zOiBHcmlkT3B0aW9ucyxcclxuICAgIHVzZUFzRGVmYXVsdEdyaWQ/OiBib29sZWFuLFxyXG4gICAgY29tcG9uZW50UmVmZXJlbmNlPzogU21hcnRHcmlkQ29tcG9uZW50XHJcbiAgKTogU21hcnRHcmlkIHtcclxuICAgIHNtYXJ0R3JpZC5vcHRpb25zID0gb3B0aW9ucztcclxuICAgIHNtYXJ0R3JpZC51aUFjdGlvblNlcnZpY2UgPSB0aGlzLnVpQWN0aW9uU2VydmljZTtcclxuICAgIHNtYXJ0R3JpZC51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlID0gdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xyXG4gICAgc21hcnRHcmlkLnNlcnZpY2VUb1VzZSA9IHRoaXM7XHJcbiAgICBzbWFydEdyaWQudmlld0NvbnRleHRTZXJ2aWNlID0gdGhpcy52aWV3Q29udGV4dDtcclxuXHJcbiAgICB0aGlzLndpZGdldHMuYWRkV2lkZ2V0KHNtYXJ0R3JpZC5ncmlkSWRlbnRpZmllciwgY29tcG9uZW50UmVmZXJlbmNlKTtcclxuXHJcbiAgICBpZiAodXNlQXNEZWZhdWx0R3JpZCkge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCA9IHNtYXJ0R3JpZDtcclxuICAgICAgcmV0dXJuIHRoaXMuc21hcnRHcmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzbWFydEdyaWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkRm9ybShcclxuICAgIHNtYXJ0Rm9ybUlkOiBzdHJpbmcsXHJcbiAgICBzbWFydEZvcm06IFNtYXJ0Rm9ybSxcclxuICAgIGNvbXBvbmVudFJlZmVyZW5jZT86IFNtYXJ0Zm9ybUNvbXBvbmVudFxyXG4gICk6IFNtYXJ0Rm9ybSB7XHJcbiAgICB0aGlzLmZvcm1XaWRnZXRzLmFkZFdpZGdldChzbWFydEZvcm1JZCwgY29tcG9uZW50UmVmZXJlbmNlKTtcclxuXHJcbiAgICAvLyBpZiAodGhpcy5zZW5kRGF0YUNoYW5nZXMgJiYgY29tcG9uZW50UmVmZXJlbmNlKSB7XHJcbiAgICAvLyAgIHNtYXJ0Rm9ybS51c2VPblZhbHVlQ2hhbmdlRXZlbnQgPSB0cnVlO1xyXG5cclxuICAgIC8vICAgY29tcG9uZW50UmVmZXJlbmNlLnNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZVxyXG4gICAgLy8gICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAvLyAgICAgLnN1YnNjcmliZSgodmFsdWVDaGFuZ2U6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSkgPT4ge1xyXG4gICAgLy8gICAgICAgdGhpcy5oYW5kbGVWYWx1ZUNoYW5nZXModmFsdWVDaGFuZ2UpO1xyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHJldHVybiBzbWFydEZvcm07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VXBEZWZhdWx0VHJlZSh0cmVlSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydFRyZWVTZXJ2aWNlID0gbmV3IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlKHRoaXMuaW5qZWN0LCB0aGlzLnBhZ2VOYW1lLCB0cmVlSWQpO1xyXG4gICAgdGhpcy53aWRnZXRzLmFkZFdpZGdldCh0cmVlSWQsIHRoaXMuc21hcnRUcmVlU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlVHJlZVNlcnZpY2UodHJlZUlkOiBzdHJpbmcpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB7XHJcbiAgICBjb25zdCB0cmVlU2VydmljZSA9IG5ldyBTbWFydHRyZWVHZW5lcmljU2VydmljZSh0aGlzLmluamVjdCwgdGhpcy5wYWdlTmFtZSwgdHJlZUlkKTtcclxuICAgIHRoaXMud2lkZ2V0cy5hZGRXaWRnZXQodHJlZUlkLCB0cmVlU2VydmljZSk7XHJcblxyXG4gICAgcmV0dXJuIHRyZWVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEZpbGVVcGxvYWRlcihcclxuICAgIHVpQWN0aW9uQ29kZTogc3RyaW5nLFxyXG4gICAgZmlsZUZvcm1hdHM/OiBzdHJpbmdbXSxcclxuICAgIG1heFNpemVNYj86IG51bWJlcixcclxuICAgIGlzTXVsdGlwbGU/OiBib29sZWFuXHJcbiAgKTogU21hcnRDb21wb25lbnRGaWxlVXBsb2FkZXIge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdWlBY3Rpb25Db2RlLFxyXG4gICAgICBzbWFydENvbXBvbmVudDogdGhpcyxcclxuICAgICAgZmlsZUZvcm1hdHMsXHJcbiAgICAgIGlzTXVsdGlwbGUsXHJcbiAgICAgIG1heFNpemVNYixcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIGhhbmRsZSBjaGFuZ2VzXHJcbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZUNoYW5nZXModmFsdWVDaGFuZ2U6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSk6IHZvaWQge1xyXG4gICAgbGV0IGRhdGFDaGFuZ2U6IERhdGFDaGFuZ2U7XHJcbiAgICBpZiAodmFsdWVDaGFuZ2Uua2V5LmluY2x1ZGVzKCcuJykpIHtcclxuICAgICAgY29uc3Qgc291cmNlID0gdmFsdWVDaGFuZ2Uua2V5LnNwbGl0KCcuJylbMF07XHJcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gdmFsdWVDaGFuZ2Uua2V5LnNwbGl0KCcuJylbMV07XHJcbiAgICAgIGRhdGFDaGFuZ2UgPSB7XHJcbiAgICAgICAga2luZDogdmFsdWVDaGFuZ2Uua2luZCA9PT0gJ2Jhc2ljJyA/IERhdGFDaGFuZ2VLaW5kLldpZGdldCA6IERhdGFDaGFuZ2VLaW5kLlNlbGVjdGlvbixcclxuICAgICAgICBzb3VyY2UsXHJcbiAgICAgICAgdmFsdWVzOiBbW3ZhbHVlS2V5LCB2YWx1ZUNoYW5nZS52YWx1ZV1dLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0YUNoYW5nZSA9IHtcclxuICAgICAgICBraW5kOiB2YWx1ZUNoYW5nZS5raW5kID09PSAnYmFzaWMnID8gRGF0YUNoYW5nZUtpbmQuV2lkZ2V0IDogRGF0YUNoYW5nZUtpbmQuU2VsZWN0aW9uLFxyXG4gICAgICAgIHNvdXJjZTogdmFsdWVDaGFuZ2Uua2V5LFxyXG4gICAgICAgIHZhbHVlczogW1t2YWx1ZUNoYW5nZS5rZXksIHZhbHVlQ2hhbmdlLnZhbHVlXV0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGV4dC5kYXRhQ2hhbmdlZCh0aGlzLnV1aWQhLCBkYXRhQ2hhbmdlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ2hhbmdlcyhjaGFuZ2U6IENvbXBvbmVudE1vZGVsQ2hhbmdlKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoY2hhbmdlLmNoYW5nZWRXaWRnZXRzKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VXaWRnZXRzKGNoYW5nZS5jaGFuZ2VkV2lkZ2V0cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBkYXRhQ2hhbmdlSGFzQmVlbk5leHRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoY2hhbmdlLmNoYW5nZXMpIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2VzID0gY2hhbmdlLmNoYW5nZXM7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcykubWFwKChjaGFuZ2VLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCdkYXRhLicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0YUNoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkuc3RhcnRzV2l0aCgnbGF5b3V0cy4nKSAmJiB0aGlzLm1vZGVsPy5sYXlvdXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTGF5b3V0Q2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCdjb21wb25lbnRMYXlvdXRzLicpICYmIHRoaXMubW9kZWw/LmxheW91dHMpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb21wb25lbnRMYXlvdXRDaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5LnN0YXJ0c1dpdGgoJ3ZhbHVlU2V0cy4nKSAmJiB0aGlzLm1vZGVsPy52YWx1ZVNldHMpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZVNldENoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkgPT09ICdhY3Rpb25zJykge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbkNoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkgPT09ICdjb25zdHJhaW50cycpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb25zdHJhaW50Q2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleSA9PT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IGNoYW5nZXNbJyddIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgICAgICAgICBkYXRhQ2hhbmdlSGFzQmVlbk5leHRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghZGF0YUNoYW5nZUhhc0JlZW5OZXh0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZWQubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIHRoaXMubW9kZWwgPSBjaGFuZ2UudmFsdWUgYXMgQ29tcG9uZW50TW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjaGFuZ2UuY2hhbmdlZFdpZGdldHMgJiYgIWNoYW5nZS5jaGFuZ2VzICYmIGNoYW5nZS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm1vZGVsID0gY2hhbmdlLnZhbHVlIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2VXaWRnZXRzKGNoYW5nZWRXaWRnZXRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgY2hhbmdlZFdpZGdldHMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcy53aWRnZXRzLmdldChrZXkpO1xyXG5cclxuICAgICAgaWYgKHJlZmVyZW5jZSBpbnN0YW5jZW9mIFNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICAgIHJlZmVyZW5jZS5yZWZyZXNoKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlIGluc3RhbmNlb2YgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UpIHtcclxuICAgICAgICByZWZlcmVuY2UuaW5pdGlhbGl6ZSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgUHJvdmlkZWQgcmVmZXJlbmNlIGZvciAke2tleX0gaXMgdW5kZWZpbmVkLmApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIGxldCBzcGxpdHRlZEtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuXHJcbiAgICBsZXQgZGVlcE1vZGVsOiBhbnlbXSA9IFttb2RlbF07XHJcbiAgICBsZXQgdGVtcE1vZGVsOiBhbnk7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNwbGl0dGVkS2V5cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdGVtcE1vZGVsID0gZGVlcE1vZGVsW2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdib29sZWFuJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVlcE1vZGVsLnB1c2godGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZGV4ID09PSBzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXTtcclxuICAgICAgICAvLyBpZiAodmFsdWUgPT09ICcnICYmIChvbGRWYWx1ZSA9PT0gbnVsbCB8fCBvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGVuIGRvbid0IGNoYW5nZSB2YWx1ZS5cclxuICAgICAgICBpZiAodmFsdWUgIT09ICcnIHx8IChvbGRWYWx1ZSAhPT0gbnVsbCAmJiBvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZURhdGFDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0VmFsdWVEZWVwbHkodGhpcy5tb2RlbCwgY2hhbmdlS2V5LCBjaGFuZ2VzW2NoYW5nZUtleV0pO1xyXG5cclxuICAgIHRoaXMuZm9ybVdpZGdldHMud2lkZ2V0cy5mb3JFYWNoKFxyXG4gICAgICAoZm9ybUNvbXBvbmVudDogU21hcnRmb3JtQ29tcG9uZW50IHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChmb3JtQ29tcG9uZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFByb3ZpZGVkIGZvcm0gcmVmZXJlbmNlIGZvciAke2tleX0gaXMgdW5kZWZpbmVkLmApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3JtQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUxheW91dENoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGxheW91dEtleSA9IGNoYW5nZUtleS5zcGxpdCgnLicpWzFdO1xyXG4gICAgdGhpcy5tb2RlbCEubGF5b3V0c1tsYXlvdXRLZXldID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDb21wb25lbnRMYXlvdXRDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBsYXlvdXRLZXkgPSBjaGFuZ2VLZXkuc3BsaXQoJy4nKVsxXTtcclxuICAgIGxldCBjb21wb25lbnRMYXlvdXRzOiB7IFtrZXk6IHN0cmluZ106IE9iamVjdCB9ID0gdGhpcy5tb2RlbCEuY29tcG9uZW50TGF5b3V0cyBhcyB7XHJcbiAgICAgIFtrZXk6IHN0cmluZ106IE9iamVjdDtcclxuICAgIH07XHJcbiAgICBjb21wb25lbnRMYXlvdXRzW2xheW91dEtleV0gPSBjaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVZhbHVlU2V0Q2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgdmFsdWVTZXRLZXkgPSBjaGFuZ2VLZXkuc3BsaXQoJy4nKVsxXTtcclxuICAgIHRoaXMubW9kZWwhLnZhbHVlU2V0cyFbdmFsdWVTZXRLZXldID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVBY3Rpb25DaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwhLmFjdGlvbnMgPSBjaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgICB0aGlzLmluaXRBY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNvbnN0cmFpbnRDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwhLmNvbnN0cmFpbnRzID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV2lkZ2V0TWFwPFQ+IHtcclxuICBwcml2YXRlIF93aWRnZXRzOiBNYXA8c3RyaW5nLCBUPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgZ2V0IHdpZGdldHMoKTogTWFwPHN0cmluZywgVD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dpZGdldHM7XHJcbiAgfVxyXG4gIHNldCB3aWRnZXRzKHdpZGdldHM6IE1hcDxzdHJpbmcsIFQ+KSB7XHJcbiAgICB0aGlzLl93aWRnZXRzID0gd2lkZ2V0cztcclxuICB9XHJcbiAgYWRkV2lkZ2V0KGtleTogc3RyaW5nLCByZWZlcmVuY2U6IFQsIGlzRm9ybT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX3dpZGdldHMuc2V0KGtleSwgcmVmZXJlbmNlKTtcclxuICB9XHJcbiAgcmVtb3ZlV2lkZ2V0KGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl93aWRnZXRzLmRlbGV0ZShrZXkpO1xyXG4gIH1cclxuICBjbGVhcldpZGdldHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl93aWRnZXRzLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBnZXQoa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLndpZGdldHMuZ2V0KGtleSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0Q29tcG9uZW50RmlsZVVwbG9hZGVyIHtcclxuICB1aUFjdGlvbkNvZGU6IHN0cmluZztcclxuICBtYXhTaXplTWI/OiBudW1iZXI7XHJcbiAgZmlsZUZvcm1hdHM/OiBzdHJpbmdbXTtcclxuICBpc011bHRpcGxlPzogYm9vbGVhbjtcclxuICBzbWFydENvbXBvbmVudDogU21hcnRDb21wb25lbnRBcGlDbGllbnQ8YW55PjtcclxufVxyXG4iXX0=
414
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jbGllbnQvc21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFLTCxrQkFBa0IsRUFDbEIsWUFBWSxHQUdiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUlMLGNBQWMsRUFHZCx1QkFBdUIsRUFHdkIseUJBQXlCLEVBR3pCLGVBQWUsR0FHaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUdsQyxJQUFzQix1QkFBdUIsR0FBN0MsTUFBc0IsdUJBQXVCO0lBbUczQyxZQUNZLE1BQWdCLEVBQ2hCLElBQXlDLEVBQ3JCLFFBQWdCO1FBRnBDLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBcUM7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQXJHdEMsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRTNDLGlCQUFZLEdBQXVDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQTZEckYsbUJBQWMsR0FBb0IsRUFBRSxDQUFDO1FBRXJDLGdCQUFXLEdBQWtCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQTRCckUsb0JBQW9CO1FBQ3BCLFlBQU8sR0FBd0UsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUUvRixnQkFBVyxHQUE4QyxJQUFJLFNBQVMsRUFBRSxDQUFD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LElBQUksT0FBTyxDQUFDLE9BQXVCO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFDRCxTQUFTLENBQUMsR0FBVyxFQUFFLFNBQVksRUFBRSxNQUFnQjtRQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELFlBQVksQ0FBQyxHQUFXO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBHcmlkT3B0aW9ucyxcclxuICBTbWFydEZvcm0sXHJcbiAgU21hcnRGb3JtSW52YWxpZEZpZWxkcyxcclxuICBTbWFydEdyaWQsXHJcbiAgU21hcnRHcmlkQ29tcG9uZW50LFxyXG4gIFNtYXJ0U3ViamVjdCxcclxuICBTbWFydGZvcm1Db21wb25lbnQsXHJcbiAgU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlLFxyXG59IGZyb20gJy4uLy4uL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi9zbWFydC10cmVlL3Byb2plY3RzJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnRNb2RlbCxcclxuICBDb21wb25lbnRNb2RlbENoYW5nZSxcclxuICBEYXRhQ2hhbmdlLFxyXG4gIERhdGFDaGFuZ2VLaW5kLFxyXG4gIEV4ZWN1dGVVaUFjdGlvbk9wdGlvbnMsXHJcbiAgU21hcnRUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gIFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uLFxyXG4gIFVpQWN0aW9uQWRkaXRpb25hbFBhcmFtcyxcclxuICBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uTW9kZWwsXHJcbiAgVWlBY3Rpb25SZXF1ZXN0LFxyXG4gIFVpQWN0aW9uU2VydmljZSxcclxuICBVaUFjdGlvblNwZWNpZmljRGVtYW5kUmVzcG9uc2UsXHJcbiAgVXNlVWlBY3Rpb24yLFxyXG59IGZyb20gJy4uL3ZpZXctY29udGV4dC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0QXV0aGVudGljYXRpb25TZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi9zbWFydC1hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTbWFydENvbXBvbmVudEFwaUNsaWVudDxUPiBpbXBsZW1lbnRzIFVzZVVpQWN0aW9uMiB7XHJcbiAgcHJvdGVjdGVkIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgZGV0ZWN0Q2hhbmdlOiBTbWFydFN1YmplY3Q8Q29tcG9uZW50TW9kZWxDaGFuZ2U+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIHByaXZhdGUgX3V1aWQ/OiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgdXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBnZXQgdXVpZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3V1aWQ7XHJcbiAgfVxyXG4gIHNldCB1dWlkKHV1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuX3V1aWQgPT09IHV1aWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpcnN0VXVpZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBpZiAodGhpcy51dWlkKSB7XHJcbiAgICAgIHRoaXMudmlld0NvbnRleHQudW5mb2xsb3codGhpcy51dWlkKTtcclxuICAgICAgZmlyc3RVdWlkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91dWlkID0gdXVpZDtcclxuICAgIGlmICh1dWlkKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0cy53aWRnZXRzLmZvckVhY2goKHJlZiwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlZiBpbnN0YW5jZW9mIFNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICAgICAgcmVmLnV1aWQgPSB1dWlkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXJlZiAmJiAhZmlyc3RVdWlkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBQcm92aWRlZCByZWZlcmVuY2UgZm9yICR7a2V5fSBpcyB1bmRlZmluZWQgb24gdXVpZCBjaGFuZ2UuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCF0aGlzLnV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZFN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgIHRoaXMudXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkU3Vic2NyaXB0aW9uID0gdGhpcy52aWV3Q29udGV4dC51dWlkT2ZQYWdlSGFzQmVlbkNoYW5nZWRcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChwYWdlTmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFnZU5hbWUgPT09IHRoaXMucGFnZU5hbWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJ1bigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3Q29udGV4dC5mb2xsb3codGhpcy5fdXVpZCEsIHRoaXMuZGV0ZWN0Q2hhbmdlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21vZGVsOiBDb21wb25lbnRNb2RlbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgZ2V0IG1vZGVsKCk6IENvbXBvbmVudE1vZGVsIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RlbDtcclxuICB9XHJcbiAgc2V0IG1vZGVsKG1vZGVsOiBDb21wb25lbnRNb2RlbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcclxuXHJcbiAgICB0aGlzLmluaXRDb21wb25lbnRCeU1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kYXRhPzogVDtcclxuXHJcbiAgZ2V0IGRhdGEoKTogVCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICB9XHJcbiAgc2V0IGRhdGEobW9kZWw6IFQgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2RhdGEgPSBtb2RlbDtcclxuICAgIHRoaXMuZGF0YUNoYW5nZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVpQWN0aW9uTW9kZWxzOiBVaUFjdGlvbk1vZGVsW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGRhdGFDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIC8vIFVzZVVpQWN0aW9uXHJcbiAgLy8gc3VibWl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcbiAgLy8gcmVTdWJzY3JpYmVUb0NoYW5nZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG5cclxuICAvLyBHcmlkXHJcbiAgc21hcnRHcmlkPzogU21hcnRHcmlkO1xyXG5cclxuICAvLyBTZXJ2aWNlc1xyXG4gIHByb3RlY3RlZCB2aWV3Q29udGV4dDogU21hcnRWaWV3Q29udGV4dFNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHVpQWN0aW9uU2VydmljZTogVWlBY3Rpb25TZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCB1aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlOiBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCB0cmFuc2xhdGU/OiBTbWFydFRyYW5zbGF0ZVNlcnZpY2U7XHJcblxyXG4gIC8vIFRyZWVcclxuICBwcml2YXRlIF9zbWFydFRyZWVTZXJ2aWNlPzogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2U7XHJcblxyXG4gIHB1YmxpYyBnZXQgc21hcnRUcmVlU2VydmljZSgpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc21hcnRUcmVlU2VydmljZTtcclxuICB9XHJcbiAgcHVibGljIHNldCBzbWFydFRyZWVTZXJ2aWNlKHNtYXJ0VHJlZVNlcnZpY2U6IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fc21hcnRUcmVlU2VydmljZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdUaGUgZGVmYXVsdCB0cmVlIGhhcyBhbHJlYWR5IHNldCB1cCEnKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NtYXJ0VHJlZVNlcnZpY2UgPSBzbWFydFRyZWVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29udGFpbmVkIFdpZGdldHNcclxuICB3aWRnZXRzOiBXaWRnZXRNYXA8U21hcnRHcmlkQ29tcG9uZW50IHwgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfCB1bmRlZmluZWQ+ID0gbmV3IFdpZGdldE1hcCgpO1xyXG5cclxuICBmb3JtV2lkZ2V0czogV2lkZ2V0TWFwPFNtYXJ0Zm9ybUNvbXBvbmVudCB8IHVuZGVmaW5lZD4gPSBuZXcgV2lkZ2V0TWFwKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIGluamVjdDogSW5qZWN0b3IsXHJcbiAgICBwcm90ZWN0ZWQgYXV0aDogU21hcnRBdXRoZW50aWNhdGlvblNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBASW5qZWN0KCdwYWdlTmFtZScpIHByb3RlY3RlZCBwYWdlTmFtZTogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICB0aGlzLmRldGVjdENoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZTogQ29tcG9uZW50TW9kZWxDaGFuZ2UpID0+IHtcclxuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VzKGNoYW5nZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gaW5qZWN0LmdldChTbWFydFZpZXdDb250ZXh0U2VydmljZSk7XHJcblxyXG4gICAgdGhpcy51aUFjdGlvblNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uU2VydmljZSk7XHJcbiAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgX25nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ydW4oKTtcclxuICB9XHJcbiAgX25nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy52aWV3Q29udGV4dC51bmZvbGxvdyh0aGlzLnV1aWQhKTtcclxuICAgIHRoaXMud2lkZ2V0cy5jbGVhcldpZGdldHMoKTtcclxuXHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgaW5pdENvbXBvbmVudEJ5TW9kZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXREYXRhKCk7XHJcbiAgICB0aGlzLmluaXRBY3Rpb25zKCk7XHJcblxyXG4gICAgLy8gVE9ETzogbGF5b3V0LCB2YWx1ZVNldCwgd2lkZ2V0c1xyXG4gIH1cclxuXHJcbiAgaW5pdERhdGEoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tb2RlbD8uZGF0YSkge1xyXG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLm1vZGVsPy5kYXRhIGFzIGFueTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRBY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW9kZWw/LmFjdGlvbnMpIHtcclxuICAgICAgdGhpcy51aUFjdGlvbk1vZGVscyA9IHRoaXMubW9kZWw/LmFjdGlvbnMubWFwKCh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgc2VydmljZVRvVXNlOiB0aGlzLFxyXG4gICAgICAgICAgdWlBY3Rpb24sXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBydW4oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hdXRoLmJmZkFwaXNIYXZlQmVlblNldFVwKSB7XHJcbiAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hdXRoLmhlYWRlcnNVcGRhdGVkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lKTtcclxuICAgIC8vIHRoaXMubW9kZWwgPSBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmxvYWQodGhpcy51dWlkKTtcclxuICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQubG9hZDIodGhpcy51dWlkKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGV4ZWN1dGVVaUFjdGlvbih1aUFjdGlvbjogVWlBY3Rpb24sIG9wdGlvbnM/OiBFeGVjdXRlVWlBY3Rpb25PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZS51aUFjdGlvbk1vZGVsID0ge1xyXG4gICAgICBzZXJ2aWNlVG9Vc2U6IHRoaXMsXHJcbiAgICAgIHVpQWN0aW9uOiB1aUFjdGlvbixcclxuICAgIH07XHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZS5leGVjdXRlKHVpQWN0aW9uLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldEludmFsaWRGaWVsZHMoKTogU21hcnRGb3JtSW52YWxpZEZpZWxkcyB7XHJcbiAgICBsZXQgYWdncmVnYXRlZEludmFsaWRGaWVsZHM6IFNtYXJ0Rm9ybUludmFsaWRGaWVsZHMgPSB7XHJcbiAgICAgIGludmFsaWRGaWVsZEtleXM6IFtdLFxyXG4gICAgICBpbnZhbGlkRmllbGROYW1lczogW10sXHJcbiAgICB9O1xyXG5cclxuICAgIGZvciAobGV0IGVudHJ5IG9mIHRoaXMuZm9ybVdpZGdldHMud2lkZ2V0cykge1xyXG4gICAgICBsZXQgaW52YWxpZEZpZWxkc09mRm9ybSA9IGVudHJ5WzFdPy5nZXRJbnZhbGlkRmllbGRzKCk7XHJcbiAgICAgIGlmIChpbnZhbGlkRmllbGRzT2ZGb3JtKSB7XHJcbiAgICAgICAgaW52YWxpZEZpZWxkc09mRm9ybS5pbnZhbGlkRmllbGRLZXlzLmZvckVhY2goKGtleSkgPT5cclxuICAgICAgICAgIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzLmludmFsaWRGaWVsZEtleXMucHVzaChrZXkpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpbnZhbGlkRmllbGRzT2ZGb3JtLmludmFsaWRGaWVsZE5hbWVzLmZvckVhY2goKGtleSkgPT5cclxuICAgICAgICAgIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzLmludmFsaWRGaWVsZE5hbWVzLnB1c2goa2V5KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYWdncmVnYXRlZEludmFsaWRGaWVsZHM7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gVXNlVWlBY3Rpb25cclxuICBnZXRBZGRpdGlvbmFsUGFyYW1zKHVpQWN0aW9uOiBVaUFjdGlvbik6IFVpQWN0aW9uQWRkaXRpb25hbFBhcmFtcyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3JUZXh0QXJlYTogJycsXHJcbiAgICAgIGZvclRleHRGaWVsZDogJycsXHJcbiAgICB9O1xyXG4gIH1cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRGb3JtKHZhbGlkYXRlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1Ym1pdEZvcm1zKHZhbGlkYXRlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBlcmZvcm1VaUFjdGlvblJlcXVlc3QoXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCxcclxuICAgIHdpZGdldElkPzogc3RyaW5nLFxyXG4gICAgbm9kZUlkPzogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh1aUFjdGlvblJlcXVlc3QucGFyYW1zWydfZmlsZXMnXSkge1xyXG4gICAgICBjb25zdCBwYXJhbSA9IHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ3BhcmFtJ107XHJcbiAgICAgIGNvbnN0IGZpbGVzID0gdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snX2ZpbGVzJ107XHJcbiAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydpc011bHRpcGxlJ107XHJcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydwYXJhbSddO1xyXG4gICAgICBkZWxldGUgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snX2ZpbGVzJ107XHJcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydpc011bHRpcGxlJ107XHJcblxyXG4gICAgICAvLyBhd2FpdCB0aGlzLnNlbmRNb2RlbFRvU2VydmVyKCk7XHJcbiAgICAgIGlmICghaXNNdWx0aXBsZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQucGVyZm9ybVVwbG9hZEFjdGlvbih0aGlzLnV1aWQhLCB1aUFjdGlvblJlcXVlc3QsIHBhcmFtLCBmaWxlc1swXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtVXBsb2FkTXVsdGlwbGVBY3Rpb24oXHJcbiAgICAgICAgICB0aGlzLnV1aWQhLFxyXG4gICAgICAgICAgdWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgICAgICAgcGFyYW0sXHJcbiAgICAgICAgICBmaWxlc1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAod2lkZ2V0SWQgJiYgbm9kZUlkKSB7XHJcbiAgICAgIC8vIGF3YWl0IHRoaXMuc2VuZE1vZGVsVG9TZXJ2ZXIoKTtcclxuICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtV2lkZ2V0QWN0aW9uKHRoaXMudXVpZCEsIHdpZGdldElkLCBub2RlSWQsIHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICB9IGVsc2UgaWYgKHdpZGdldElkKSB7XHJcbiAgICAgIC8vIGF3YWl0IHRoaXMuc2VuZE1vZGVsVG9TZXJ2ZXIoKTtcclxuICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbih0aGlzLnV1aWQhLCB3aWRnZXRJZCwgdWlBY3Rpb25SZXF1ZXN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQucGVyZm9ybUFjdGlvbih0aGlzLnV1aWQhLCB1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBhc3luYyBzZW5kTW9kZWxUb1NlcnZlcigpIHtcclxuICAvLyAgIHRoaXMuc3VibWl0Rm9ybXMoZmFsc2UpO1xyXG4gIC8vICAgbGV0IGRhdGFDaGFuZ2UgPSB7XHJcbiAgLy8gICAgIGtpbmQ6IERhdGFDaGFuZ2VLaW5kLldpZGdldCxcclxuICAvLyAgICAgc291cmNlOiAnJyxcclxuICAvLyAgICAgdmFsdWVzOiBbWycnLCB0aGlzLmdldE1vZGVsKCldXSxcclxuICAvLyAgIH07XHJcbiAgLy8gICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmRhdGFDaGFuZ2VkKHRoaXMudXVpZCEsIGRhdGFDaGFuZ2UpO1xyXG4gIC8vIH1cclxuXHJcbiAgaGFuZGxlU3BlY2lmaWNEZW1hbmRzQXN5bmNocm9ub3VzbHkoXHJcbiAgICB1aUFjdGlvbjogVWlBY3Rpb24sXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxyXG4gICk6IFByb21pc2U8VWlBY3Rpb25TcGVjaWZpY0RlbWFuZFJlc3BvbnNlPiB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhbmRsZVNwZWNpZmljRGVtYW5kc0FzeW5jaHJvbm91c2x5IG1ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBTdWJtaXRzIGFsbCB0aGUgcmVnaXN0ZXJlZCBmb3JtcyBpbiB0aGUgU21hcnRDb21wb25lbnRcclxuICAgKi9cclxuICBwdWJsaWMgc3VibWl0Rm9ybXModmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybVdpZGdldHM/LndpZGdldHM/LmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgZm9ybT8uc3VibWl0Rm9ybSh2YWxpZGF0ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRHcmlkKFxyXG4gICAgc21hcnRHcmlkOiBTbWFydEdyaWQsXHJcbiAgICBvcHRpb25zOiBHcmlkT3B0aW9ucyxcclxuICAgIHVzZUFzRGVmYXVsdEdyaWQ/OiBib29sZWFuLFxyXG4gICAgY29tcG9uZW50UmVmZXJlbmNlPzogU21hcnRHcmlkQ29tcG9uZW50XHJcbiAgKTogU21hcnRHcmlkIHtcclxuICAgIHNtYXJ0R3JpZC5vcHRpb25zID0gb3B0aW9ucztcclxuICAgIHNtYXJ0R3JpZC51aUFjdGlvblNlcnZpY2UgPSB0aGlzLnVpQWN0aW9uU2VydmljZTtcclxuICAgIHNtYXJ0R3JpZC51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlID0gdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xyXG4gICAgc21hcnRHcmlkLnNlcnZpY2VUb1VzZSA9IHRoaXM7XHJcbiAgICBzbWFydEdyaWQudmlld0NvbnRleHRTZXJ2aWNlID0gdGhpcy52aWV3Q29udGV4dDtcclxuXHJcbiAgICB0aGlzLndpZGdldHMuYWRkV2lkZ2V0KHNtYXJ0R3JpZC5ncmlkSWRlbnRpZmllciwgY29tcG9uZW50UmVmZXJlbmNlKTtcclxuXHJcbiAgICBpZiAodXNlQXNEZWZhdWx0R3JpZCkge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCA9IHNtYXJ0R3JpZDtcclxuICAgICAgcmV0dXJuIHRoaXMuc21hcnRHcmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzbWFydEdyaWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkRm9ybShcclxuICAgIHNtYXJ0Rm9ybUlkOiBzdHJpbmcsXHJcbiAgICBzbWFydEZvcm06IFNtYXJ0Rm9ybSxcclxuICAgIGNvbXBvbmVudFJlZmVyZW5jZT86IFNtYXJ0Zm9ybUNvbXBvbmVudFxyXG4gICk6IFNtYXJ0Rm9ybSB7XHJcbiAgICB0aGlzLmZvcm1XaWRnZXRzLmFkZFdpZGdldChzbWFydEZvcm1JZCwgY29tcG9uZW50UmVmZXJlbmNlKTtcclxuXHJcbiAgICAvLyBpZiAodGhpcy5zZW5kRGF0YUNoYW5nZXMgJiYgY29tcG9uZW50UmVmZXJlbmNlKSB7XHJcbiAgICAvLyAgIHNtYXJ0Rm9ybS51c2VPblZhbHVlQ2hhbmdlRXZlbnQgPSB0cnVlO1xyXG5cclxuICAgIC8vICAgY29tcG9uZW50UmVmZXJlbmNlLnNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZVxyXG4gICAgLy8gICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAvLyAgICAgLnN1YnNjcmliZSgodmFsdWVDaGFuZ2U6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSkgPT4ge1xyXG4gICAgLy8gICAgICAgdGhpcy5oYW5kbGVWYWx1ZUNoYW5nZXModmFsdWVDaGFuZ2UpO1xyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHJldHVybiBzbWFydEZvcm07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VXBEZWZhdWx0VHJlZSh0cmVlSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydFRyZWVTZXJ2aWNlID0gbmV3IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlKHRoaXMuaW5qZWN0LCB0aGlzLnBhZ2VOYW1lLCB0cmVlSWQpO1xyXG4gICAgdGhpcy53aWRnZXRzLmFkZFdpZGdldCh0cmVlSWQsIHRoaXMuc21hcnRUcmVlU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlVHJlZVNlcnZpY2UodHJlZUlkOiBzdHJpbmcpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB7XHJcbiAgICBjb25zdCB0cmVlU2VydmljZSA9IG5ldyBTbWFydHRyZWVHZW5lcmljU2VydmljZSh0aGlzLmluamVjdCwgdGhpcy5wYWdlTmFtZSwgdHJlZUlkKTtcclxuICAgIHRoaXMud2lkZ2V0cy5hZGRXaWRnZXQodHJlZUlkLCB0cmVlU2VydmljZSk7XHJcblxyXG4gICAgcmV0dXJuIHRyZWVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEZpbGVVcGxvYWRlcihcclxuICAgIHVpQWN0aW9uQ29kZTogc3RyaW5nLFxyXG4gICAgZmlsZUZvcm1hdHM/OiBzdHJpbmdbXSxcclxuICAgIG1heFNpemVNYj86IG51bWJlcixcclxuICAgIGlzTXVsdGlwbGU/OiBib29sZWFuXHJcbiAgKTogU21hcnRDb21wb25lbnRGaWxlVXBsb2FkZXIge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdWlBY3Rpb25Db2RlLFxyXG4gICAgICBzbWFydENvbXBvbmVudDogdGhpcyxcclxuICAgICAgZmlsZUZvcm1hdHMsXHJcbiAgICAgIGlzTXVsdGlwbGUsXHJcbiAgICAgIG1heFNpemVNYixcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIGhhbmRsZSBjaGFuZ2VzXHJcbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZUNoYW5nZXModmFsdWVDaGFuZ2U6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSk6IHZvaWQge1xyXG4gICAgbGV0IGRhdGFDaGFuZ2U6IERhdGFDaGFuZ2U7XHJcbiAgICBpZiAodmFsdWVDaGFuZ2Uua2V5LmluY2x1ZGVzKCcuJykpIHtcclxuICAgICAgY29uc3Qgc291cmNlID0gdmFsdWVDaGFuZ2Uua2V5LnNwbGl0KCcuJylbMF07XHJcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gdmFsdWVDaGFuZ2Uua2V5LnNwbGl0KCcuJylbMV07XHJcbiAgICAgIGRhdGFDaGFuZ2UgPSB7XHJcbiAgICAgICAga2luZDogdmFsdWVDaGFuZ2Uua2luZCA9PT0gJ2Jhc2ljJyA/IERhdGFDaGFuZ2VLaW5kLldpZGdldCA6IERhdGFDaGFuZ2VLaW5kLlNlbGVjdGlvbixcclxuICAgICAgICBzb3VyY2UsXHJcbiAgICAgICAgdmFsdWVzOiBbW3ZhbHVlS2V5LCB2YWx1ZUNoYW5nZS52YWx1ZV1dLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0YUNoYW5nZSA9IHtcclxuICAgICAgICBraW5kOiB2YWx1ZUNoYW5nZS5raW5kID09PSAnYmFzaWMnID8gRGF0YUNoYW5nZUtpbmQuV2lkZ2V0IDogRGF0YUNoYW5nZUtpbmQuU2VsZWN0aW9uLFxyXG4gICAgICAgIHNvdXJjZTogdmFsdWVDaGFuZ2Uua2V5LFxyXG4gICAgICAgIHZhbHVlczogW1t2YWx1ZUNoYW5nZS5rZXksIHZhbHVlQ2hhbmdlLnZhbHVlXV0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGV4dC5kYXRhQ2hhbmdlZCh0aGlzLnV1aWQhLCBkYXRhQ2hhbmdlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ2hhbmdlcyhjaGFuZ2U6IENvbXBvbmVudE1vZGVsQ2hhbmdlKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoY2hhbmdlLmNoYW5nZWRXaWRnZXRzKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VXaWRnZXRzKGNoYW5nZS5jaGFuZ2VkV2lkZ2V0cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBkYXRhQ2hhbmdlSGFzQmVlbk5leHRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoY2hhbmdlLmNoYW5nZXMpIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2VzID0gY2hhbmdlLmNoYW5nZXM7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcykubWFwKChjaGFuZ2VLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCdkYXRhLicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0YUNoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkuc3RhcnRzV2l0aCgnbGF5b3V0cy4nKSAmJiB0aGlzLm1vZGVsPy5sYXlvdXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTGF5b3V0Q2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCdjb21wb25lbnRMYXlvdXRzLicpICYmIHRoaXMubW9kZWw/LmxheW91dHMpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb21wb25lbnRMYXlvdXRDaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5LnN0YXJ0c1dpdGgoJ3ZhbHVlU2V0cy4nKSAmJiB0aGlzLm1vZGVsPy52YWx1ZVNldHMpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZVNldENoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkgPT09ICdhY3Rpb25zJykge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbkNoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkgPT09ICdjb25zdHJhaW50cycpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb25zdHJhaW50Q2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleSA9PT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IGNoYW5nZXNbJyddIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgICAgICAgICBkYXRhQ2hhbmdlSGFzQmVlbk5leHRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghZGF0YUNoYW5nZUhhc0JlZW5OZXh0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZWQubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIHRoaXMubW9kZWwgPSBjaGFuZ2UudmFsdWUgYXMgQ29tcG9uZW50TW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjaGFuZ2UuY2hhbmdlZFdpZGdldHMgJiYgIWNoYW5nZS5jaGFuZ2VzICYmIGNoYW5nZS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm1vZGVsID0gY2hhbmdlLnZhbHVlIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2VXaWRnZXRzKGNoYW5nZWRXaWRnZXRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgY2hhbmdlZFdpZGdldHMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcy53aWRnZXRzLmdldChrZXkpO1xyXG5cclxuICAgICAgaWYgKHJlZmVyZW5jZSBpbnN0YW5jZW9mIFNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICAgIHJlZmVyZW5jZS5yZWZyZXNoKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlIGluc3RhbmNlb2YgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UpIHtcclxuICAgICAgICByZWZlcmVuY2UuaW5pdGlhbGl6ZSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgUHJvdmlkZWQgcmVmZXJlbmNlIGZvciAke2tleX0gaXMgdW5kZWZpbmVkLmApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIGxldCBzcGxpdHRlZEtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuXHJcbiAgICBsZXQgZGVlcE1vZGVsOiBhbnlbXSA9IFttb2RlbF07XHJcbiAgICBsZXQgdGVtcE1vZGVsOiBhbnk7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNwbGl0dGVkS2V5cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdGVtcE1vZGVsID0gZGVlcE1vZGVsW2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdib29sZWFuJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVlcE1vZGVsLnB1c2godGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZGV4ID09PSBzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXTtcclxuICAgICAgICAvLyBpZiAodmFsdWUgPT09ICcnICYmIChvbGRWYWx1ZSA9PT0gbnVsbCB8fCBvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGVuIGRvbid0IGNoYW5nZSB2YWx1ZS5cclxuICAgICAgICBpZiAodmFsdWUgIT09ICcnIHx8IChvbGRWYWx1ZSAhPT0gbnVsbCAmJiBvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZURhdGFDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0VmFsdWVEZWVwbHkodGhpcy5tb2RlbCwgY2hhbmdlS2V5LCBjaGFuZ2VzW2NoYW5nZUtleV0pO1xyXG5cclxuICAgIHRoaXMuZm9ybVdpZGdldHMud2lkZ2V0cy5mb3JFYWNoKFxyXG4gICAgICAoZm9ybUNvbXBvbmVudDogU21hcnRmb3JtQ29tcG9uZW50IHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChmb3JtQ29tcG9uZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFByb3ZpZGVkIGZvcm0gcmVmZXJlbmNlIGZvciAke2tleX0gaXMgdW5kZWZpbmVkLmApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3JtQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUxheW91dENoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGxheW91dEtleSA9IGNoYW5nZUtleS5zcGxpdCgnLicpWzFdO1xyXG4gICAgdGhpcy5tb2RlbCEubGF5b3V0c1tsYXlvdXRLZXldID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDb21wb25lbnRMYXlvdXRDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBsYXlvdXRLZXkgPSBjaGFuZ2VLZXkuc3BsaXQoJy4nKVsxXTtcclxuICAgIGxldCBjb21wb25lbnRMYXlvdXRzOiB7IFtrZXk6IHN0cmluZ106IE9iamVjdCB9ID0gdGhpcy5tb2RlbCEuY29tcG9uZW50TGF5b3V0cyBhcyB7XHJcbiAgICAgIFtrZXk6IHN0cmluZ106IE9iamVjdDtcclxuICAgIH07XHJcbiAgICBjb21wb25lbnRMYXlvdXRzW2xheW91dEtleV0gPSBjaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVZhbHVlU2V0Q2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgdmFsdWVTZXRLZXkgPSBjaGFuZ2VLZXkuc3BsaXQoJy4nKVsxXTtcclxuICAgIHRoaXMubW9kZWwhLnZhbHVlU2V0cyFbdmFsdWVTZXRLZXldID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVBY3Rpb25DaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwhLmFjdGlvbnMgPSBjaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgICB0aGlzLmluaXRBY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNvbnN0cmFpbnRDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwhLmNvbnN0cmFpbnRzID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV2lkZ2V0TWFwPFQ+IHtcclxuICBwcml2YXRlIF93aWRnZXRzOiBNYXA8c3RyaW5nLCBUPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgZ2V0IHdpZGdldHMoKTogTWFwPHN0cmluZywgVD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dpZGdldHM7XHJcbiAgfVxyXG4gIHNldCB3aWRnZXRzKHdpZGdldHM6IE1hcDxzdHJpbmcsIFQ+KSB7XHJcbiAgICB0aGlzLl93aWRnZXRzID0gd2lkZ2V0cztcclxuICB9XHJcbiAgYWRkV2lkZ2V0KGtleTogc3RyaW5nLCByZWZlcmVuY2U6IFQsIGlzRm9ybT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX3dpZGdldHMuc2V0KGtleSwgcmVmZXJlbmNlKTtcclxuICB9XHJcbiAgcmVtb3ZlV2lkZ2V0KGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl93aWRnZXRzLmRlbGV0ZShrZXkpO1xyXG4gIH1cclxuICBjbGVhcldpZGdldHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl93aWRnZXRzLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBnZXQoa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLndpZGdldHMuZ2V0KGtleSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0Q29tcG9uZW50RmlsZVVwbG9hZGVyIHtcclxuICB1aUFjdGlvbkNvZGU6IHN0cmluZztcclxuICBtYXhTaXplTWI/OiBudW1iZXI7XHJcbiAgZmlsZUZvcm1hdHM/OiBzdHJpbmdbXTtcclxuICBpc011bHRpcGxlPzogYm9vbGVhbjtcclxuICBzbWFydENvbXBvbmVudDogU21hcnRDb21wb25lbnRBcGlDbGllbnQ8YW55PjtcclxufVxyXG4iXX0=
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Filter API 2
3
+ * Filter API 2
4
+ *
5
+ * The version of the OpenAPI document: 1.0.0
6
+ * Contact: info@it4all.hu
7
+ *
8
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
+ * https://openapi-generator.tech
10
+ * Do not edit the class manually.
11
+ */
12
+ /* tslint:disable:no-unused-variable member-ordering */
13
+ import { Inject, Injectable, Optional } from '@angular/core';
14
+ import { HttpHeaders, HttpContext } from '@angular/common/http';
15
+ import { CustomHttpParameterCodec } from '../encoder';
16
+ // @ts-ignore
17
+ import { BASE_PATH } from '../variables';
18
+ import { Configuration } from '../configuration';
19
+ import * as i0 from "@angular/core";
20
+ import * as i1 from "@angular/common/http";
21
+ import * as i2 from "../configuration";
22
+ export class FilterService {
23
+ constructor(httpClient, basePath, configuration) {
24
+ this.httpClient = httpClient;
25
+ this.basePath = 'http://localhost';
26
+ this.defaultHeaders = new HttpHeaders();
27
+ this.configuration = new Configuration();
28
+ if (configuration) {
29
+ this.configuration = configuration;
30
+ }
31
+ if (typeof this.configuration.basePath !== 'string') {
32
+ if (Array.isArray(basePath) && basePath.length > 0) {
33
+ basePath = basePath[0];
34
+ }
35
+ if (typeof basePath !== 'string') {
36
+ basePath = this.basePath;
37
+ }
38
+ this.configuration.basePath = basePath;
39
+ }
40
+ this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
41
+ }
42
+ // @ts-ignore
43
+ addToHttpParams(httpParams, value, key) {
44
+ if (typeof value === "object" && value instanceof Date === false) {
45
+ httpParams = this.addToHttpParamsRecursive(httpParams, value);
46
+ }
47
+ else {
48
+ httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
49
+ }
50
+ return httpParams;
51
+ }
52
+ addToHttpParamsRecursive(httpParams, value, key) {
53
+ if (value == null) {
54
+ return httpParams;
55
+ }
56
+ if (typeof value === "object") {
57
+ if (Array.isArray(value)) {
58
+ value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
59
+ }
60
+ else if (value instanceof Date) {
61
+ if (key != null) {
62
+ httpParams = httpParams.append(key, value.toISOString().substr(0, 10));
63
+ }
64
+ else {
65
+ throw Error("key may not be null if value is Date");
66
+ }
67
+ }
68
+ else {
69
+ Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
70
+ }
71
+ }
72
+ else if (key != null) {
73
+ httpParams = httpParams.append(key, value);
74
+ }
75
+ else {
76
+ throw Error("key may not be null if value is not object or array");
77
+ }
78
+ return httpParams;
79
+ }
80
+ load(uuid, filterIdentifier, observe = 'body', reportProgress = false, options) {
81
+ if (uuid === null || uuid === undefined) {
82
+ throw new Error('Required parameter uuid was null or undefined when calling load.');
83
+ }
84
+ if (filterIdentifier === null || filterIdentifier === undefined) {
85
+ throw new Error('Required parameter filterIdentifier was null or undefined when calling load.');
86
+ }
87
+ let localVarHeaders = this.defaultHeaders;
88
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
89
+ if (localVarHttpHeaderAcceptSelected === undefined) {
90
+ // to determine the Accept header
91
+ const httpHeaderAccepts = [
92
+ 'application/json'
93
+ ];
94
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
95
+ }
96
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
97
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
98
+ }
99
+ let localVarHttpContext = options && options.context;
100
+ if (localVarHttpContext === undefined) {
101
+ localVarHttpContext = new HttpContext();
102
+ }
103
+ let responseType_ = 'json';
104
+ if (localVarHttpHeaderAcceptSelected) {
105
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
106
+ responseType_ = 'text';
107
+ }
108
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
109
+ responseType_ = 'json';
110
+ }
111
+ else {
112
+ responseType_ = 'blob';
113
+ }
114
+ }
115
+ let localVarPath = `/filter/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/${this.configuration.encodeParam({ name: "filterIdentifier", value: filterIdentifier, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/load`;
116
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
117
+ context: localVarHttpContext,
118
+ responseType: responseType_,
119
+ withCredentials: this.configuration.withCredentials,
120
+ headers: localVarHeaders,
121
+ observe: observe,
122
+ reportProgress: reportProgress
123
+ });
124
+ }
125
+ performWidgetAction(uuid, filterIdentifier, body, observe = 'body', reportProgress = false, options) {
126
+ if (uuid === null || uuid === undefined) {
127
+ throw new Error('Required parameter uuid was null or undefined when calling performWidgetAction.');
128
+ }
129
+ if (filterIdentifier === null || filterIdentifier === undefined) {
130
+ throw new Error('Required parameter filterIdentifier was null or undefined when calling performWidgetAction.');
131
+ }
132
+ if (body === null || body === undefined) {
133
+ throw new Error('Required parameter body was null or undefined when calling performWidgetAction.');
134
+ }
135
+ let localVarHeaders = this.defaultHeaders;
136
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
137
+ if (localVarHttpHeaderAcceptSelected === undefined) {
138
+ // to determine the Accept header
139
+ const httpHeaderAccepts = [
140
+ 'application/json'
141
+ ];
142
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
143
+ }
144
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
145
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
146
+ }
147
+ let localVarHttpContext = options && options.context;
148
+ if (localVarHttpContext === undefined) {
149
+ localVarHttpContext = new HttpContext();
150
+ }
151
+ // to determine the Content-Type header
152
+ const consumes = [
153
+ 'application/json'
154
+ ];
155
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
156
+ if (httpContentTypeSelected !== undefined) {
157
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
158
+ }
159
+ let responseType_ = 'json';
160
+ if (localVarHttpHeaderAcceptSelected) {
161
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
162
+ responseType_ = 'text';
163
+ }
164
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
165
+ responseType_ = 'json';
166
+ }
167
+ else {
168
+ responseType_ = 'blob';
169
+ }
170
+ }
171
+ let localVarPath = `/filter/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/${this.configuration.encodeParam({ name: "filterIdentifier", value: filterIdentifier, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/performWidgetAction`;
172
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
173
+ context: localVarHttpContext,
174
+ body: body,
175
+ responseType: responseType_,
176
+ withCredentials: this.configuration.withCredentials,
177
+ headers: localVarHeaders,
178
+ observe: observe,
179
+ reportProgress: reportProgress
180
+ });
181
+ }
182
+ }
183
+ FilterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FilterService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
184
+ FilterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FilterService, providedIn: 'root' });
185
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FilterService, decorators: [{
186
+ type: Injectable,
187
+ args: [{
188
+ providedIn: 'root'
189
+ }]
190
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
191
+ type: Optional
192
+ }, {
193
+ type: Inject,
194
+ args: [BASE_PATH]
195
+ }] }, { type: i2.Configuration, decorators: [{
196
+ type: Optional
197
+ }] }]; } });
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1maWx0ZXItZWRpdG9yL2FwaS9hcGkvZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUNILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBMkIsZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBYyxXQUFXLEVBQ3NCLFdBQVcsRUFDeEQsTUFBWSxzQkFBc0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBK0IsWUFBWSxDQUFDO0FBUS9FLGFBQWE7QUFDYixPQUFPLEVBQUUsU0FBUyxFQUFzQixNQUEwQixjQUFjLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUEwQyxrQkFBa0IsQ0FBQzs7OztBQU9yRixNQUFNLE9BQU8sYUFBYTtJQU90QixZQUFzQixVQUFzQixFQUFnQyxRQUF5QixFQUFjLGFBQTRCO1FBQXpILGVBQVUsR0FBVixVQUFVLENBQVk7UUFMbEMsYUFBUSxHQUFHLGtCQUFrQixDQUFDO1FBQ2pDLG1CQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNuQyxrQkFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFJdkMsSUFBSSxhQUFhLEVBQUU7WUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztTQUN0QztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDakQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNoRCxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMs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QUNuQjs7MEJBUWtELFFBQVE7OzBCQUFHLE1BQU07MkJBQUMsU0FBUzs7MEJBQThCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpbHRlciBBUEkgMlxuICogRmlsdGVyIEFQSSAyXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMC4wXG4gKiBDb250YWN0OiBpbmZvQGl0NGFsbC5odVxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyxcbiAgICAgICAgIEh0dHBSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwUGFyYW1ldGVyQ29kZWMsIEh0dHBDb250ZXh0IFxuICAgICAgICB9ICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYyB9ICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9lbmNvZGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdyeGpzJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvbkJ1aWxkZXJVaU1vZGVsIH0gZnJvbSAnLi4vbW9kZWwvZmlsdGVyRXhwcmVzc2lvbkJ1aWxkZXJVaU1vZGVsJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFVpQWN0aW9uUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL3VpQWN0aW9uUmVxdWVzdCc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEJBU0VfUEFUSCwgQ09MTEVDVElPTl9GT1JNQVRTIH0gICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xuXG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyU2VydmljZSB7XG5cbiAgICBwcm90ZWN0ZWQgYmFzZVBhdGggPSAnaHR0cDovL2xvY2FsaG9zdCc7XG4gICAgcHVibGljIGRlZmF1bHRIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgcHVibGljIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIHB1YmxpYyBlbmNvZGVyOiBIdHRwUGFyYW1ldGVyQ29kZWM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZ3xzdHJpbmdbXSwgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJhc2VQYXRoKSAmJiBiYXNlUGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSBiYXNlUGF0aFswXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBiYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlciB8fCBuZXcgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjKCk7XG4gICAgfVxuXG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXMoaHR0cFBhcmFtczogSHR0cFBhcmFtcywgdmFsdWU6IGFueSwga2V5Pzogc3RyaW5nKTogSHR0cFBhcmFtcyB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zOiBIdHRwUGFyYW1zLCB2YWx1ZT86IGFueSwga2V5Pzogc3RyaW5nKTogSHR0cFBhcmFtcyB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnlbXSkuZm9yRWFjaCggZWxlbSA9PiBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgZWxlbSwga2V5KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCAodmFsdWUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKS5zdWJzdHIoMCwgMTApKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBEYXRlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goIGsgPT4gaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKFxuICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1zLCB2YWx1ZVtrXSwga2V5ICE9IG51bGwgPyBgJHtrZXl9LiR7a31gIDogaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgbm90IG9iamVjdCBvciBhcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdXVpZCBcbiAgICAgKiBAcGFyYW0gZmlsdGVySWRlbnRpZmllciBcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZCh1dWlkOiBzdHJpbmcsIGZpbHRlcklkZW50aWZpZXI6IHN0cmluZywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEZpbHRlckV4cHJlc3Npb25CdWlsZGVyVWlNb2RlbD47XG4gICAgcHVibGljIGxvYWQodXVpZDogc3RyaW5nLCBmaWx0ZXJJZGVudGlmaWVyOiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEZpbHRlckV4cHJlc3Npb25CdWlsZGVyVWlNb2RlbD4+O1xuICAgIHB1YmxpYyBsb2FkKHV1aWQ6IHN0cmluZywgZmlsdGVySWRlbnRpZmllcjogc3RyaW5nLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RmlsdGVyRXhwcmVzc2lvbkJ1aWxkZXJVaU1vZGVsPj47XG4gICAgcHVibGljIGxvYWQodXVpZDogc3RyaW5nLCBmaWx0ZXJJZGVudGlmaWVyOiBzdHJpbmcsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgaWYgKHV1aWQgPT09IG51bGwgfHwgdXVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB1dWlkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgbG9hZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVySWRlbnRpZmllciA9PT0gbnVsbCB8fCBmaWx0ZXJJZGVudGlmaWVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGZpbHRlcklkZW50aWZpZXIgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBsb2FkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9maWx0ZXIvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwidXVpZFwiLCB2YWx1ZTogdXVpZCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiBcInV1aWRcIn0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJmaWx0ZXJJZGVudGlmaWVyXCIsIHZhbHVlOiBmaWx0ZXJJZGVudGlmaWVyLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS9sb2FkYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEZpbHRlckV4cHJlc3Npb25CdWlsZGVyVWlNb2RlbD4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB1dWlkIFxuICAgICAqIEBwYXJhbSBmaWx0ZXJJZGVudGlmaWVyIFxuICAgICAqIEBwYXJhbSBib2R5IFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBwZXJmb3JtV2lkZ2V0QWN0aW9uKHV1aWQ6IHN0cmluZywgZmlsdGVySWRlbnRpZmllcjogc3RyaW5nLCBib2R5OiBVaUFjdGlvblJlcXVlc3QsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxGaWx0ZXJFeHByZXNzaW9uQnVpbGRlclVpTW9kZWw+O1xuICAgIHB1YmxpYyBwZXJmb3JtV2lkZ2V0QWN0aW9uKHV1aWQ6IHN0cmluZywgZmlsdGVySWRlbnRpZmllcjogc3RyaW5nLCBib2R5OiBVaUFjdGlvblJlcXVlc3QsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEZpbHRlckV4cHJlc3Npb25CdWlsZGVyVWlNb2RlbD4+O1xuICAgIHB1YmxpYyBwZXJmb3JtV2lkZ2V0QWN0aW9uKHV1aWQ6IHN0cmluZywgZmlsdGVySWRlbnRpZmllcjogc3RyaW5nLCBib2R5OiBVaUFjdGlvblJlcXVlc3QsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxGaWx0ZXJFeHByZXNzaW9uQnVpbGRlclVpTW9kZWw+PjtcbiAgICBwdWJsaWMgcGVyZm9ybVdpZGdldEFjdGlvbih1dWlkOiBzdHJpbmcsIGZpbHRlcklkZW50aWZpZXI6IHN0cmluZywgYm9keTogVWlBY3Rpb25SZXF1ZXN0LCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGlmICh1dWlkID09PSBudWxsIHx8IHV1aWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgdXVpZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHBlcmZvcm1XaWRnZXRBY3Rpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcklkZW50aWZpZXIgPT09IG51bGwgfHwgZmlsdGVySWRlbnRpZmllciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBmaWx0ZXJJZGVudGlmaWVyIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgcGVyZm9ybVdpZGdldEFjdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGJvZHkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBwZXJmb3JtV2lkZ2V0QWN0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvZmlsdGVyLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInV1aWRcIiwgdmFsdWU6IHV1aWQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiZmlsdGVySWRlbnRpZmllclwiLCB2YWx1ZTogZmlsdGVySWRlbnRpZmllciwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vcGVyZm9ybVdpZGdldEFjdGlvbmA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxGaWx0ZXJFeHByZXNzaW9uQnVpbGRlclVpTW9kZWw+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,91 @@
1
+ export class Configuration {
2
+ constructor(configurationParameters = {}) {
3
+ this.apiKeys = configurationParameters.apiKeys;
4
+ this.username = configurationParameters.username;
5
+ this.password = configurationParameters.password;
6
+ this.accessToken = configurationParameters.accessToken;
7
+ this.basePath = configurationParameters.basePath;
8
+ this.withCredentials = configurationParameters.withCredentials;
9
+ this.encoder = configurationParameters.encoder;
10
+ if (configurationParameters.encodeParam) {
11
+ this.encodeParam = configurationParameters.encodeParam;
12
+ }
13
+ else {
14
+ this.encodeParam = param => this.defaultEncodeParam(param);
15
+ }
16
+ if (configurationParameters.credentials) {
17
+ this.credentials = configurationParameters.credentials;
18
+ }
19
+ else {
20
+ this.credentials = {};
21
+ }
22
+ }
23
+ /**
24
+ * Select the correct content-type to use for a request.
25
+ * Uses {@link Configuration#isJsonMime} to determine the correct content-type.
26
+ * If no content type is found return the first found type if the contentTypes is not empty
27
+ * @param contentTypes - the array of content types that are available for selection
28
+ * @returns the selected content-type or <code>undefined</code> if no selection could be made.
29
+ */
30
+ selectHeaderContentType(contentTypes) {
31
+ if (contentTypes.length === 0) {
32
+ return undefined;
33
+ }
34
+ const type = contentTypes.find((x) => this.isJsonMime(x));
35
+ if (type === undefined) {
36
+ return contentTypes[0];
37
+ }
38
+ return type;
39
+ }
40
+ /**
41
+ * Select the correct accept content-type to use for a request.
42
+ * Uses {@link Configuration#isJsonMime} to determine the correct accept content-type.
43
+ * If no content type is found return the first found type if the contentTypes is not empty
44
+ * @param accepts - the array of content types that are available for selection.
45
+ * @returns the selected content-type or <code>undefined</code> if no selection could be made.
46
+ */
47
+ selectHeaderAccept(accepts) {
48
+ if (accepts.length === 0) {
49
+ return undefined;
50
+ }
51
+ const type = accepts.find((x) => this.isJsonMime(x));
52
+ if (type === undefined) {
53
+ return accepts[0];
54
+ }
55
+ return type;
56
+ }
57
+ /**
58
+ * Check if the given MIME is a JSON MIME.
59
+ * JSON MIME examples:
60
+ * application/json
61
+ * application/json; charset=UTF8
62
+ * APPLICATION/JSON
63
+ * application/vnd.company+json
64
+ * @param mime - MIME (Multipurpose Internet Mail Extensions)
65
+ * @return True if the given MIME is JSON, false otherwise.
66
+ */
67
+ isJsonMime(mime) {
68
+ const jsonMime = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
69
+ return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
70
+ }
71
+ lookupCredential(key) {
72
+ const value = this.credentials[key];
73
+ return typeof value === 'function'
74
+ ? value()
75
+ : value;
76
+ }
77
+ defaultEncodeParam(param) {
78
+ // This implementation exists as fallback for missing configuration
79
+ // and for backwards compatibility to older typescript-angular generator versions.
80
+ // It only works for the 'simple' parameter style.
81
+ // Date-handling only works for the 'date-time' format.
82
+ // All other styles and Date-formats are probably handled incorrectly.
83
+ //
84
+ // But: if that's all you need (i.e.: the most common use-case): no need for customization!
85
+ const value = param.dataFormat === 'date-time' && param.value instanceof Date
86
+ ? param.value.toISOString()
87
+ : param.value;
88
+ return encodeURIComponent(String(value));
89
+ }
90
+ }
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LWZpbHRlci1lZGl0b3IvYXBpL2NvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb0NBLE1BQU0sT0FBTyxhQUFhO0lBZ0N0QixZQUFZLDBCQUFtRCxFQUFFO1FBQzdELElBQUksQ0FBQyxPQUFPLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxDQUFDO1FBQy9DLElBQUksQ0FBQyxRQUFRLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxDQUFDO1FBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxRQUFRLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxDQUFDO1FBQ2pELElBQUksQ0FBQyxlQUFlLEdBQUcsdUJBQXVCLENBQUMsZUFBZSxDQUFDO1FBQy9ELElBQUksQ0FBQyxPQUFPLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxDQUFDO1FBQy9DLElBQUksdUJBQXVCLENBQUMsV0FBVyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxDQUFDO1NBQzFEO2FBQ0k7WUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsSUFBSSx1QkFBdUIsQ0FBQyxXQUFXLEVBQUU7WUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLENBQUM7U0FDMUQ7YUFDSTtZQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHVCQUF1QixDQUFFLFlBQXNCO1FBQ2xELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0IsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFFRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3BCLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGtCQUFrQixDQUFDLE9BQWlCO1FBQ3ZDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFFRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3BCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLFVBQVUsQ0FBQyxJQUFZO1FBQzFCLE1BQU0sUUFBUSxHQUFXLElBQUksTUFBTSxDQUFDLCtEQUErRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFHLE9BQU8sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLDZCQUE2QixDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEdBQVc7UUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVU7WUFDOUIsQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUNULENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDaEIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQVk7UUFDbkMsbUVBQW1FO1FBQ25FLGtGQUFrRjtRQUNsRixrREFBa0Q7UUFDbEQsdURBQXVEO1FBQ3ZELHNFQUFzRTtRQUN0RSxFQUFFO1FBQ0YsMkZBQTJGO1FBRTNGLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxLQUFLLFlBQVksSUFBSTtZQUN6RSxDQUFDLENBQUUsS0FBSyxDQUFDLEtBQWMsQ0FBQyxXQUFXLEVBQUU7WUFDckMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFFbEIsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUGFyYW1ldGVyQ29kZWMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBQYXJhbSB9IGZyb20gJy4vcGFyYW0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzIHtcbiAgICAvKipcbiAgICAgKiAgQGRlcHJlY2F0ZWQgU2luY2UgNS4wLiBVc2UgY3JlZGVudGlhbHMgaW5zdGVhZFxuICAgICAqL1xuICAgIGFwaUtleXM/OiB7WyBrZXk6IHN0cmluZyBdOiBzdHJpbmd9O1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqICBAZGVwcmVjYXRlZCBTaW5jZSA1LjAuIFVzZSBjcmVkZW50aWFscyBpbnN0ZWFkXG4gICAgICovXG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nKTtcbiAgICBiYXNlUGF0aD86IHN0cmluZztcbiAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFRha2VzIGNhcmUgb2YgZW5jb2RpbmcgcXVlcnktIGFuZCBmb3JtLXBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZW5jb2Rlcj86IEh0dHBQYXJhbWV0ZXJDb2RlYztcbiAgICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtZXRob2QgZm9yIGVuY29kaW5nIHBhdGggcGFyYW1ldGVycyBpbiB2YXJpb3VzXG4gICAgICogPGEgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9PQUkvT3BlbkFQSS1TcGVjaWZpY2F0aW9uL2Jsb2IvbWFpbi92ZXJzaW9ucy8zLjEuMC5tZCNzdHlsZS12YWx1ZXNcIj5zdHlsZXM8L2E+LlxuICAgICAqIDxwPlxuICAgICAqIFNlZSB7QGxpbmsgUkVBRE1FLm1kfSBmb3IgbW9yZSBkZXRhaWxzXG4gICAgICogPC9wPlxuICAgICAqL1xuICAgIGVuY29kZVBhcmFtPzogKHBhcmFtOiBQYXJhbSkgPT4gc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBrZXlzIGFyZSB0aGUgbmFtZXMgaW4gdGhlIHNlY3VyaXR5U2NoZW1lcyBzZWN0aW9uIG9mIHRoZSBPcGVuQVBJXG4gICAgICogZG9jdW1lbnQuIFRoZXkgc2hvdWxkIG1hcCB0byB0aGUgdmFsdWUgdXNlZCBmb3IgYXV0aGVudGljYXRpb25cbiAgICAgKiBtaW51cyBhbnkgc3RhbmRhcmQgcHJlZml4ZXMgc3VjaCBhcyAnQmFzaWMnIG9yICdCZWFyZXInLlxuICAgICAqL1xuICAgIGNyZWRlbnRpYWxzPzoge1sga2V5OiBzdHJpbmcgXTogc3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IHVuZGVmaW5lZCl9O1xufVxuXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbiB7XG4gICAgLyoqXG4gICAgICogIEBkZXByZWNhdGVkIFNpbmNlIDUuMC4gVXNlIGNyZWRlbnRpYWxzIGluc3RlYWRcbiAgICAgKi9cbiAgICBhcGlLZXlzPzoge1sga2V5OiBzdHJpbmcgXTogc3RyaW5nfTtcbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiAgQGRlcHJlY2F0ZWQgU2luY2UgNS4wLiBVc2UgY3JlZGVudGlhbHMgaW5zdGVhZFxuICAgICAqL1xuICAgIGFjY2Vzc1Rva2VuPzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyk7XG4gICAgYmFzZVBhdGg/OiBzdHJpbmc7XG4gICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBUYWtlcyBjYXJlIG9mIGVuY29kaW5nIHF1ZXJ5LSBhbmQgZm9ybS1wYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGVuY29kZXI/OiBIdHRwUGFyYW1ldGVyQ29kZWM7XG4gICAgLyoqXG4gICAgICogRW5jb2Rpbmcgb2YgdmFyaW91cyBwYXRoIHBhcmFtZXRlclxuICAgICAqIDxhIGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vT0FJL09wZW5BUEktU3BlY2lmaWNhdGlvbi9ibG9iL21haW4vdmVyc2lvbnMvMy4xLjAubWQjc3R5bGUtdmFsdWVzXCI+c3R5bGVzPC9hPi5cbiAgICAgKiA8cD5cbiAgICAgKiBTZWUge0BsaW5rIFJFQURNRS5tZH0gZm9yIG1vcmUgZGV0YWlsc1xuICAgICAqIDwvcD5cbiAgICAgKi9cbiAgICBlbmNvZGVQYXJhbTogKHBhcmFtOiBQYXJhbSkgPT4gc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBrZXlzIGFyZSB0aGUgbmFtZXMgaW4gdGhlIHNlY3VyaXR5U2NoZW1lcyBzZWN0aW9uIG9mIHRoZSBPcGVuQVBJXG4gICAgICogZG9jdW1lbnQuIFRoZXkgc2hvdWxkIG1hcCB0byB0aGUgdmFsdWUgdXNlZCBmb3IgYXV0aGVudGljYXRpb25cbiAgICAgKiBtaW51cyBhbnkgc3RhbmRhcmQgcHJlZml4ZXMgc3VjaCBhcyAnQmFzaWMnIG9yICdCZWFyZXInLlxuICAgICAqL1xuICAgIGNyZWRlbnRpYWxzOiB7WyBrZXk6IHN0cmluZyBdOiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKX07XG5cbiAgICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uUGFyYW1ldGVyczogQ29uZmlndXJhdGlvblBhcmFtZXRlcnMgPSB7fSkge1xuICAgICAgICB0aGlzLmFwaUtleXMgPSBjb25maWd1cmF0aW9uUGFyYW1ldGVycy5hcGlLZXlzO1xuICAgICAgICB0aGlzLnVzZXJuYW1lID0gY29uZmlndXJhdGlvblBhcmFtZXRlcnMudXNlcm5hbWU7XG4gICAgICAgIHRoaXMucGFzc3dvcmQgPSBjb25maWd1cmF0aW9uUGFyYW1ldGVycy5wYXNzd29yZDtcbiAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IGNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmFjY2Vzc1Rva2VuO1xuICAgICAgICB0aGlzLmJhc2VQYXRoID0gY29uZmlndXJhdGlvblBhcmFtZXRlcnMuYmFzZVBhdGg7XG4gICAgICAgIHRoaXMud2l0aENyZWRlbnRpYWxzID0gY29uZmlndXJhdGlvblBhcmFtZXRlcnMud2l0aENyZWRlbnRpYWxzO1xuICAgICAgICB0aGlzLmVuY29kZXIgPSBjb25maWd1cmF0aW9uUGFyYW1ldGVycy5lbmNvZGVyO1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvblBhcmFtZXRlcnMuZW5jb2RlUGFyYW0pIHtcbiAgICAgICAgICAgIHRoaXMuZW5jb2RlUGFyYW0gPSBjb25maWd1cmF0aW9uUGFyYW1ldGVycy5lbmNvZGVQYXJhbTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW5jb2RlUGFyYW0gPSBwYXJhbSA9PiB0aGlzLmRlZmF1bHRFbmNvZGVQYXJhbShwYXJhbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmNyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gY29uZmlndXJhdGlvblBhcmFtZXRlcnMuY3JlZGVudGlhbHM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0ge307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3QgdGhlIGNvcnJlY3QgY29udGVudC10eXBlIHRvIHVzZSBmb3IgYSByZXF1ZXN0LlxuICAgICAqIFVzZXMge0BsaW5rIENvbmZpZ3VyYXRpb24jaXNKc29uTWltZX0gdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGNvbnRlbnQtdHlwZS5cbiAgICAgKiBJZiBubyBjb250ZW50IHR5cGUgaXMgZm91bmQgcmV0dXJuIHRoZSBmaXJzdCBmb3VuZCB0eXBlIGlmIHRoZSBjb250ZW50VHlwZXMgaXMgbm90IGVtcHR5XG4gICAgICogQHBhcmFtIGNvbnRlbnRUeXBlcyAtIHRoZSBhcnJheSBvZiBjb250ZW50IHR5cGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uXG4gICAgICogQHJldHVybnMgdGhlIHNlbGVjdGVkIGNvbnRlbnQtdHlwZSBvciA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IGlmIG5vIHNlbGVjdGlvbiBjb3VsZCBiZSBtYWRlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RIZWFkZXJDb250ZW50VHlwZSAoY29udGVudFR5cGVzOiBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChjb250ZW50VHlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRlbnRUeXBlcy5maW5kKCh4OiBzdHJpbmcpID0+IHRoaXMuaXNKc29uTWltZSh4KSk7XG4gICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50VHlwZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IHRoZSBjb3JyZWN0IGFjY2VwdCBjb250ZW50LXR5cGUgdG8gdXNlIGZvciBhIHJlcXVlc3QuXG4gICAgICogVXNlcyB7QGxpbmsgQ29uZmlndXJhdGlvbiNpc0pzb25NaW1lfSB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgYWNjZXB0IGNvbnRlbnQtdHlwZS5cbiAgICAgKiBJZiBubyBjb250ZW50IHR5cGUgaXMgZm91bmQgcmV0dXJuIHRoZSBmaXJzdCBmb3VuZCB0eXBlIGlmIHRoZSBjb250ZW50VHlwZXMgaXMgbm90IGVtcHR5XG4gICAgICogQHBhcmFtIGFjY2VwdHMgLSB0aGUgYXJyYXkgb2YgY29udGVudCB0eXBlcyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbi5cbiAgICAgKiBAcmV0dXJucyB0aGUgc2VsZWN0ZWQgY29udGVudC10eXBlIG9yIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gaWYgbm8gc2VsZWN0aW9uIGNvdWxkIGJlIG1hZGUuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdEhlYWRlckFjY2VwdChhY2NlcHRzOiBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChhY2NlcHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBhY2NlcHRzLmZpbmQoKHg6IHN0cmluZykgPT4gdGhpcy5pc0pzb25NaW1lKHgpKTtcbiAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGFjY2VwdHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIE1JTUUgaXMgYSBKU09OIE1JTUUuXG4gICAgICogSlNPTiBNSU1FIGV4YW1wbGVzOlxuICAgICAqICAgYXBwbGljYXRpb24vanNvblxuICAgICAqICAgYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEY4XG4gICAgICogICBBUFBMSUNBVElPTi9KU09OXG4gICAgICogICBhcHBsaWNhdGlvbi92bmQuY29tcGFueStqc29uXG4gICAgICogQHBhcmFtIG1pbWUgLSBNSU1FIChNdWx0aXB1cnBvc2UgSW50ZXJuZXQgTWFpbCBFeHRlbnNpb25zKVxuICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgZ2l2ZW4gTUlNRSBpcyBKU09OLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGlzSnNvbk1pbWUobWltZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGpzb25NaW1lOiBSZWdFeHAgPSBuZXcgUmVnRXhwKCdeKGFwcGxpY2F0aW9uXFwvanNvbnxbXjsvIFxcdF0rXFwvW147LyBcXHRdK1srXWpzb24pWyBcXHRdKig7LiopPyQnLCAnaScpO1xuICAgICAgICByZXR1cm4gbWltZSAhPT0gbnVsbCAmJiAoanNvbk1pbWUudGVzdChtaW1lKSB8fCBtaW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb24nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9va3VwQ3JlZGVudGlhbChrZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jcmVkZW50aWFsc1trZXldO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHZhbHVlKClcbiAgICAgICAgICAgIDogdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWZhdWx0RW5jb2RlUGFyYW0ocGFyYW06IFBhcmFtKTogc3RyaW5nIHtcbiAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBleGlzdHMgYXMgZmFsbGJhY2sgZm9yIG1pc3NpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAvLyBhbmQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHRvIG9sZGVyIHR5cGVzY3JpcHQtYW5ndWxhciBnZW5lcmF0b3IgdmVyc2lvbnMuXG4gICAgICAgIC8vIEl0IG9ubHkgd29ya3MgZm9yIHRoZSAnc2ltcGxlJyBwYXJhbWV0ZXIgc3R5bGUuXG4gICAgICAgIC8vIERhdGUtaGFuZGxpbmcgb25seSB3b3JrcyBmb3IgdGhlICdkYXRlLXRpbWUnIGZvcm1hdC5cbiAgICAgICAgLy8gQWxsIG90aGVyIHN0eWxlcyBhbmQgRGF0ZS1mb3JtYXRzIGFyZSBwcm9iYWJseSBoYW5kbGVkIGluY29ycmVjdGx5LlxuICAgICAgICAvL1xuICAgICAgICAvLyBCdXQ6IGlmIHRoYXQncyBhbGwgeW91IG5lZWQgKGkuZS46IHRoZSBtb3N0IGNvbW1vbiB1c2UtY2FzZSk6IG5vIG5lZWQgZm9yIGN1c3RvbWl6YXRpb24hXG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbS5kYXRhRm9ybWF0ID09PSAnZGF0ZS10aW1lJyAmJiBwYXJhbS52YWx1ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgID8gKHBhcmFtLnZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogcGFyYW0udmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodmFsdWUpKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Custom HttpParameterCodec
3
+ * Workaround for https://github.com/angular/angular/issues/18261
4
+ */
5
+ export class CustomHttpParameterCodec {
6
+ encodeKey(k) {
7
+ return encodeURIComponent(k);
8
+ }
9
+ encodeValue(v) {
10
+ return encodeURIComponent(v);
11
+ }
12
+ decodeKey(k) {
13
+ return decodeURIComponent(k);
14
+ }
15
+ decodeValue(v) {
16
+ return decodeURIComponent(v);
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LWZpbHRlci1lZGl0b3IvYXBpL2VuY29kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQUNqQyxTQUFTLENBQUMsQ0FBUztRQUNmLE9BQU8sa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELFdBQVcsQ0FBQyxDQUFTO1FBQ2pCLE9BQU8sa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELFNBQVMsQ0FBQyxDQUFTO1FBQ2YsT0FBTyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsV0FBVyxDQUFDLENBQVM7UUFDakIsT0FBTyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUGFyYW1ldGVyQ29kZWMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbi8qKlxuICogQ3VzdG9tIEh0dHBQYXJhbWV0ZXJDb2RlY1xuICogV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTgyNjFcbiAqL1xuZXhwb3J0IGNsYXNzIEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYyBpbXBsZW1lbnRzIEh0dHBQYXJhbWV0ZXJDb2RlYyB7XG4gICAgZW5jb2RlS2V5KGs6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoayk7XG4gICAgfVxuICAgIGVuY29kZVZhbHVlKHY6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodik7XG4gICAgfVxuICAgIGRlY29kZUtleShrOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGspO1xuICAgIH1cbiAgICBkZWNvZGVWYWx1ZSh2OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHYpO1xuICAgIH1cbn1cbiJdfQ==