@netgrif/components-core 6.0.3 → 6.0.4

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 (84) hide show
  1. package/bundles/netgrif-components-core.umd.js +166 -61
  2. package/bundles/netgrif-components-core.umd.js.map +1 -1
  3. package/bundles/netgrif-components-core.umd.min.js +2 -2
  4. package/bundles/netgrif-components-core.umd.min.js.map +1 -1
  5. package/esm2015/lib/data-fields/file-field/abstract-file-field.component.js +2 -2
  6. package/esm2015/lib/groups/services/next-group.service.js +3 -2
  7. package/esm2015/lib/resources/abstract-endpoint/abstract-resource.service.js +3 -2
  8. package/esm2015/lib/resources/engine-endpoint/public/public-task-resource.service.js +1 -1
  9. package/esm2015/lib/search/models/category/case/case-dataset.js +3 -6
  10. package/esm2015/lib/search/models/category/case/case-simple-dataset.js +3 -3
  11. package/esm2015/lib/search/models/category/case/case-title.js +13 -3
  12. package/esm2015/lib/search/models/category/case/case-visual-id.js +13 -3
  13. package/esm2015/lib/search/models/category/category.js +10 -2
  14. package/esm2015/lib/search/models/operator/substring.js +3 -3
  15. package/esm2015/lib/search/search-keyword-resolver-service/search-index-resolver.service.js +18 -3
  16. package/esm2015/lib/search/search-service/search.service.js +3 -2
  17. package/esm2015/lib/side-menu/content-components/new-case/abstract-new-case.component.js +6 -1
  18. package/esm2015/lib/task/services/finish-task.service.js +18 -13
  19. package/esm2015/lib/task/services/task-data.service.js +2 -1
  20. package/esm2015/lib/user/services/user-list.service.js +4 -3
  21. package/esm2015/lib/utility/pagination/load-all-pages.js +4 -3
  22. package/esm2015/lib/utility/pagination/pagination-params.js +19 -0
  23. package/esm2015/lib/utility/pagination/pagination-sort.js +17 -0
  24. package/esm2015/lib/utility/public-api.js +3 -1
  25. package/esm2015/lib/utility/tests/mocks/mock-endpoint.js +4 -3
  26. package/esm2015/lib/view/abstract/sortable-view.js +4 -3
  27. package/esm2015/lib/view/case-view/service/case-view-service.js +6 -4
  28. package/esm2015/lib/view/public-api.js +3 -1
  29. package/esm2015/lib/view/task-view/service/task-view.service.js +6 -4
  30. package/esm2015/lib/view/tree-case-view/tree-component/case-tree.service.js +19 -5
  31. package/esm2015/lib/view/tree-case-view/tree-component/model/tree-case-view-configuration.js +2 -0
  32. package/esm2015/lib/view/tree-case-view/tree-component/model/tree-configuration-injection-token.js +3 -0
  33. package/esm2015/lib/view/workflow-view/workflow-view.service.js +4 -11
  34. package/esm5/lib/data-fields/file-field/abstract-file-field.component.js +2 -2
  35. package/esm5/lib/groups/services/next-group.service.js +3 -2
  36. package/esm5/lib/resources/abstract-endpoint/abstract-resource.service.js +3 -2
  37. package/esm5/lib/resources/engine-endpoint/public/public-task-resource.service.js +1 -1
  38. package/esm5/lib/search/models/category/case/case-dataset.js +3 -6
  39. package/esm5/lib/search/models/category/case/case-simple-dataset.js +3 -3
  40. package/esm5/lib/search/models/category/case/case-title.js +19 -4
  41. package/esm5/lib/search/models/category/case/case-visual-id.js +19 -4
  42. package/esm5/lib/search/models/category/category.js +10 -2
  43. package/esm5/lib/search/models/operator/substring.js +3 -3
  44. package/esm5/lib/search/search-keyword-resolver-service/search-index-resolver.service.js +17 -2
  45. package/esm5/lib/search/search-service/search.service.js +3 -2
  46. package/esm5/lib/side-menu/content-components/new-case/abstract-new-case.component.js +6 -1
  47. package/esm5/lib/task/services/finish-task.service.js +18 -13
  48. package/esm5/lib/task/services/task-data.service.js +2 -1
  49. package/esm5/lib/user/services/user-list.service.js +4 -3
  50. package/esm5/lib/utility/pagination/load-all-pages.js +4 -3
  51. package/esm5/lib/utility/pagination/pagination-params.js +19 -0
  52. package/esm5/lib/utility/pagination/pagination-sort.js +17 -0
  53. package/esm5/lib/utility/public-api.js +3 -1
  54. package/esm5/lib/utility/tests/mocks/mock-endpoint.js +4 -3
  55. package/esm5/lib/view/abstract/sortable-view.js +4 -3
  56. package/esm5/lib/view/case-view/service/case-view-service.js +6 -4
  57. package/esm5/lib/view/public-api.js +3 -1
  58. package/esm5/lib/view/task-view/service/task-view.service.js +6 -4
  59. package/esm5/lib/view/tree-case-view/tree-component/case-tree.service.js +19 -5
  60. package/esm5/lib/view/tree-case-view/tree-component/model/tree-case-view-configuration.js +2 -0
  61. package/esm5/lib/view/tree-case-view/tree-component/model/tree-configuration-injection-token.js +3 -0
  62. package/esm5/lib/view/workflow-view/workflow-view.service.js +4 -11
  63. package/fesm2015/netgrif-components-core.js +154 -61
  64. package/fesm2015/netgrif-components-core.js.map +1 -1
  65. package/fesm5/netgrif-components-core.js +165 -62
  66. package/fesm5/netgrif-components-core.js.map +1 -1
  67. package/lib/search/models/category/case/case-dataset.d.ts +0 -2
  68. package/lib/search/models/category/case/case-title.d.ts +4 -1
  69. package/lib/search/models/category/case/case-visual-id.d.ts +4 -1
  70. package/lib/search/models/category/category.d.ts +7 -0
  71. package/lib/search/search-keyword-resolver-service/search-index-resolver.service.d.ts +12 -0
  72. package/lib/side-menu/content-components/new-case/abstract-new-case.component.d.ts +1 -0
  73. package/lib/task/services/finish-task.service.d.ts +5 -0
  74. package/lib/utility/pagination/pagination-params.d.ts +17 -0
  75. package/lib/utility/pagination/pagination-sort.d.ts +13 -0
  76. package/lib/utility/public-api.d.ts +2 -0
  77. package/lib/view/public-api.d.ts +2 -0
  78. package/lib/view/tree-case-view/tree-component/case-tree.service.d.ts +4 -1
  79. package/lib/view/tree-case-view/tree-component/model/tree-case-view-configuration.d.ts +9 -0
  80. package/lib/view/tree-case-view/tree-component/model/tree-configuration-injection-token.d.ts +3 -0
  81. package/lib/view/workflow-view/workflow-view.service.d.ts +0 -1
  82. package/netgrif-components-core.metadata.json +1 -1
  83. package/package.json +2 -2
  84. package/schematics/collection.json +0 -3
@@ -245,6 +245,11 @@ var AbstractNewCaseComponent = /** @class */ (function () {
245
245
  this.netVersion = '';
246
246
  }
247
247
  };
248
+ AbstractNewCaseComponent.prototype.toNextStep = function (viewValue) {
249
+ if (viewValue !== null && viewValue.value !== undefined) {
250
+ this.stepper1.next();
251
+ }
252
+ };
248
253
  AbstractNewCaseComponent.ctorParameters = function () { return [
249
254
  { type: SideMenuControl, decorators: [{ type: Inject, args: [NAE_SIDE_MENU_CONTROL,] }] },
250
255
  { type: FormBuilder },
@@ -261,4 +266,4 @@ var AbstractNewCaseComponent = /** @class */ (function () {
261
266
  return AbstractNewCaseComponent;
262
267
  }());
263
268
  export { AbstractNewCaseComponent };
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmV3LWNhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5ldGdyaWYvY29tcG9uZW50cy1jb3JlLyIsInNvdXJjZXMiOlsibGliL3NpZGUtbWVudS9jb250ZW50LWNvbXBvbmVudHMvbmV3LWNhc2UvYWJzdHJhY3QtbmV3LWNhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFhLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRSxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxhQUFhLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDN0YsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUU3RixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsTUFBTSxFQUFFLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRXhELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQVc1QjtJQXVCSSxrQ0FBK0QsZ0JBQWlDLEVBQ2hFLFlBQXlCLEVBQ3pCLGdCQUFpQyxFQUNqQyxvQkFBeUMsRUFDekMsZUFBK0IsRUFDL0IsVUFBNEI7UUFMNUQsaUJBNkRDO1FBN0Q4RCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2hFLGlCQUFZLEdB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SUFBSSxDQUFDLGFBQWEsMENBQUUsNEJBQTRCLDBDQUFFLG1CQUFtQixtQ0FBSSxJQUFJLENBQUMsQ0FBQztJQUMxSCxDQUFDO0lBRUQsOENBQVcsR0FBWCxVQUFZLE1BQWlCO1FBQ3pCLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTO1lBQ3hGLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDL0MsQ0FBQztJQUVELCtDQUFZLEdBQVosVUFBYSxTQUFjO1FBQ3ZCLElBQU0sYUFBYSxHQUFHLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDMUcsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO0lBQ0wsQ0FBQzs7Z0JBclFHLGVBQWUsdUJBd0NJLE1BQU0sU0FBQyxxQkFBcUI7Z0JBOUMvQyxXQUFXO2dCQUlYLGVBQWU7Z0JBR2YsbUJBQW1CO2dCQUdYLGNBQWM7Z0JBRHRCLGdCQUFnQjs7OzBCQTBCbkIsU0FBUyxTQUFDLFNBQVM7MkJBRW5CLFNBQVMsU0FBQyxVQUFVOzJCQUNwQixTQUFTLFNBQUMsVUFBVTs7SUFzT3pCLCtCQUFDO0NBQUEsQUFyUEQsSUFxUEM7U0FyUHFCLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtTdGVwcGVyU2VsZWN0aW9uRXZlbnR9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zdGVwcGVyJztcbmltcG9ydCB7bWFwLCBzdGFydFdpdGgsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1NuYWNrQmFyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc25hY2stYmFyL3NlcnZpY2VzL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1NJREVfTUVOVV9DT05UUk9MfSBmcm9tICcuLi8uLi9zaWRlLW1lbnUtaW5qZWN0aW9uLXRva2VuJztcbmltcG9ydCB7U2lkZU1lbnVDb250cm9sfSBmcm9tICcuLi8uLi9tb2RlbHMvc2lkZS1tZW51LWNvbnRyb2wnO1xuaW1wb3J0IHtDYXNlUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L2Nhc2UtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge05ld0Nhc2VJbmplY3Rpb25EYXRhfSBmcm9tICcuL21vZGVsL25ldy1jYXNlLWluamVjdGlvbi1kYXRhJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0hvdGtleSwgSG90a2V5c1NlcnZpY2V9IGZyb20gJ2FuZ3VsYXIyLWhvdGtleXMnO1xuaW1wb3J0IHtNYXRUb29sYmFyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sYmFyJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7Q3JlYXRlQ2FzZUV2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvY2FzZS1vdXRjb21lcy9jcmVhdGUtY2FzZS1ldmVudC1vdXRjb21lJztcbmltcG9ydCB7RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL21lc3NhZ2UtcmVzb3VyY2UnO1xuaW1wb3J0IHtNYXRPcHRpb259IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG5pbnRlcmZhY2UgRm9ybSB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICB2aWV3VmFsdWU6IHN0cmluZztcbiAgICB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3ROZXdDYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIHByb2Nlc3NGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgdGl0bGVGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgbmV0VmVyc2lvbjogc3RyaW5nO1xuXG4gICAgb3B0aW9uczogQXJyYXk8Rm9ybT4gPSBbXTtcbiAgICBjb2xvcnM6IEFycmF5PEZvcm0+ID0gW1xuICAgICAgICB7dmFsdWU6ICdwYW5lbC1wcmltYXJ5LWljb24nLCB2aWV3VmFsdWU6ICdQcmltYXJ5J30sXG4gICAgICAgIHt2YWx1ZTogJ3BhbmVsLWFjY2VudC1pY29uJywgdmlld1ZhbHVlOiAnQWNjZW50J30sXG4gICAgXTtcbiAgICBmaWx0ZXJlZE9wdGlvbnMkOiBPYnNlcnZhYmxlPEFycmF5PEZvcm0+PjtcbiAgICBAVmlld0NoaWxkKCd0b29sYmFyJykgdG9vbGJhcjogTWF0VG9vbGJhcjtcblxuICAgIEBWaWV3Q2hpbGQoJ3N0ZXBwZXIxJykgc3RlcHBlcjE7XG4gICAgQFZpZXdDaGlsZCgnc3RlcHBlcjInKSBzdGVwcGVyMjtcblxuICAgIHByb3RlY3RlZCBfb3B0aW9ucyQ6IFJlcGxheVN1YmplY3Q8QXJyYXk8Rm9ybT4+O1xuICAgIHByb3RlY3RlZCBfaW5qZWN0ZWREYXRhOiBOZXdDYXNlSW5qZWN0aW9uRGF0YTtcbiAgICBwcm90ZWN0ZWQgX2hhc011bHRpcGxlTmV0cyQ6IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj47XG4gICAgcHJvdGVjdGVkIF9ub3RJbml0aWFsaXplZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgICBwcml2YXRlIF9hbGxvd2VkTmV0c1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKEBJbmplY3QoTkFFX1NJREVfTUVOVV9DT05UUk9MKSBwcm90ZWN0ZWQgX3NpZGVNZW51Q29udHJvbDogU2lkZU1lbnVDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9zbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9jYXNlUmVzb3VyY2VTZXJ2aWNlOiBDYXNlUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2hvdGtleXNTZXJ2aWNlOiBIb3RrZXlzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NpZGVNZW51Q29udHJvbC5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmplY3RlZERhdGEgPSB0aGlzLl9zaWRlTWVudUNvbnRyb2wuZGF0YSBhcyBOZXdDYXNlSW5qZWN0aW9uRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2luamVjdGVkRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU5vTmV0cygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2hvdGtleXNTZXJ2aWNlLmFkZChuZXcgSG90a2V5KCdlbnRlcicsIChldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgdGhpcy5uZXh0U3RlcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5faGFzTXVsdGlwbGVOZXRzJCA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICAgICAgICB0aGlzLl9ub3RJbml0aWFsaXplZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgICAgICB0aGlzLl9vcHRpb25zJCA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuXG4gICAgICAgIHRoaXMuX2FsbG93ZWROZXRzU3Vic2NyaXB0aW9uID0gdGhpcy5faW5qZWN0ZWREYXRhLmFsbG93ZWROZXRzJC5waXBlKFxuICAgICAgICAgICAgbWFwKG5ldHMgPT4gbmV0cy5tYXAocGV0cmlOZXQgPT4gKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogcGV0cmlOZXQuc3RyaW5nSWQsXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlOiBwZXRyaU5ldC50aXRsZSxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBwZXRyaU5ldC52ZXJzaW9uXG4gICAgICAgICAgICB9KSkpLFxuICAgICAgICAgICAgbWFwKG5ldHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc2lkZU1lbnVDb250cm9sLmFsbFZlcnNpb25FbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZU9sZFZlcnNpb25zKG5ldHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXRzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTm9OZXRzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFzTXVsdGlwbGVOZXRzJC5uZXh0KG9wdGlvbnMubGVuZ3RoID4gMSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApLnN1YnNjcmliZShvcHRpb25zID0+IHtcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMkLm5leHQob3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX25vdEluaXRpYWxpemVkJC5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RJbml0aWFsaXplZCQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90SW5pdGlhbGl6ZWQkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX29wdGlvbnMkLCB0aGlzLnByb2Nlc3NGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgoJycpKV0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoc291cmNlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNvdXJjZXNbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0eXBlb2Ygc291cmNlc1sxXSA9PT0gJ3N0cmluZycgfHwgc291cmNlc1sxXSA9PT0gbnVsbCA/IHNvdXJjZXNbMV0gOiBzb3VyY2VzWzFdLnZpZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQgPyB0aGlzLl9maWx0ZXIoaW5wdXQsIG9wdGlvbnMpIDogb3B0aW9ucy5zbGljZSgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAoZmlsdGVyZWRPcHRpb25zID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NGb3JtQ29udHJvbC5zZXRWYWx1ZShmaWx0ZXJlZE9wdGlvbnNbMF0sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faGFzTXVsdGlwbGVOZXRzJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9hbGxvd2VkTmV0c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzTXVsdGlwbGVOZXRzJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc011bHRpcGxlTmV0cyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBub3RJbml0aWFsaXplZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RJbml0aWFsaXplZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0ZXBDaGFuZ2UoJGV2ZW50OiBTdGVwcGVyU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2lkZU1lbnVDb250cm9sLnB1Ymxpc2goe1xuICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0FjdGl2ZSBzdGVwIGhhcyBjaGFuZ2VkJyxcbiAgICAgICAgICAgIGRhdGE6ICRldmVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkaXNwbGF5Rm4ocHJvY2VzczogRm9ybSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzICYmIHByb2Nlc3Mudmlld1ZhbHVlID8gcHJvY2Vzcy52aWV3VmFsdWUgOiAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlTmV3Q2FzZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGl0bGVGb3JtQ29udHJvbC52YWxpZCB8fCAhdGhpcy5pc0Nhc2VUaXRsZVJlcXVpcmVkKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Nhc2UgPSB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMudGl0bGVGb3JtQ29udHJvbC52YWx1ZSA9PT0gJycgPyBudWxsIDogdGhpcy50aXRsZUZvcm1Db250cm9sLnZhbHVlLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAncGFuZWwtcHJpbWFyeS1pY29uJyxcbiAgICAgICAgICAgICAgICBuZXRJZDogdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMSA/IHRoaXMub3B0aW9uc1swXS52YWx1ZSA6IHRoaXMucHJvY2Vzc0Zvcm1Db250cm9sLnZhbHVlLnZhbHVlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLmNyZWF0ZUNhc2UobmV3Q2FzZSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2U6IEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc25hY2tCYXJTZXJ2aWNlLm9wZW5TdWNjZXNzU25hY2tCYXIocmVzcG9uc2Uub3V0Y29tZS5tZXNzYWdlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdzaWRlLW1lbnUubmV3LWNhc2UuY3JlYXRlQ2FzZScpICsgJyAnICsgbmV3Q2FzZS50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVzcG9uc2Uub3V0Y29tZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZGVNZW51Q29udHJvbC5jbG9zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5vdXRjb21lLm1lc3NhZ2UgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdDb25maXJtIG5ldyBjYXNlIHNldHVwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlc3BvbnNlLm91dGNvbWUubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAocmVzcG9uc2Uub3V0Y29tZSBhcyBDcmVhdGVDYXNlRXZlbnRPdXRjb21lKS5hQ2FzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0+IHRoaXMuX3NuYWNrQmFyU2VydmljZS5vcGVuRXJyb3JTbmFja0JhcihlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IGVycm9yKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBmaWx0ZXIgb3V0IG1hdGNobGVzcyBvcHRpb25zIHdpdGhvdXQgYWNjZW50IGFuZCBjYXNlLXNlbnNpdGl2ZSBkaWZmZXJlbmNlc1xuICAgICAqIEBwYXJhbSB2YWx1ZSB0byBjb21wYXJlIG1hdGNoaW5nIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyB0aGF0IHNob3VsZCBiZSBmaWx0ZXJlZFxuICAgICAqIEByZXR1cm4gIHJldHVybiBtYXRjaGVkIG9wdGlvbnNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2ZpbHRlcih2YWx1ZTogc3RyaW5nLCBvcHRpb25zOiBBcnJheTxGb3JtPik6IEFycmF5PEZvcm0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuXG4gICAgICAgIHJldHVybiBvcHRpb25zLmZpbHRlcihvcHRpb24gPT4gb3B0aW9uLnZpZXdWYWx1ZS50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJykuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPT09IDApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjbG9zZU5vTmV0cygpIHtcbiAgICAgICAgdGhpcy5fc25hY2tCYXJTZXJ2aWNlLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdzaWRlLW1lbnUubmV3LWNhc2Uubm9OZXRzJykpO1xuICAgICAgICB0aGlzLl9zaWRlTWVudUNvbnRyb2wuY2xvc2Uoe1xuICAgICAgICAgICAgb3BlbmVkOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXh0U3RlcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RlcHBlcjEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0ZXBwZXIxLnNlbGVjdGVkSW5kZXggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU5ld0Nhc2UoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyMS5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RlcHBlcjIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0ZXBwZXIyLnNlbGVjdGVkSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU5ld0Nhc2UoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyMi5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aXRsZVNob3J0ZW5pbmcoKSB7XG4gICAgICAgIGxldCBzaXplO1xuICAgICAgICBpZiAodGhpcy50b29sYmFyICYmIHRoaXMudG9vbGJhci5fZWxlbWVudFJlZiAmJiB0aGlzLnRvb2xiYXIuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCAmJlxuICAgICAgICAgICAgdGhpcy50b29sYmFyLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50b29sYmFyLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDI5NjpcbiAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDIyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ5NjpcbiAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDQyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI0NjpcbiAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDE4O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBzaXplID0gMzI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2l6ZSA9IDMyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2F6ZSA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdzaWRlLW1lbnUubmV3LWNhc2UuY2FzZScpO1xuICAgICAgICBjb25zdCBuYW1lID0gdHlwZW9mIHRoaXMucHJvY2Vzc0Zvcm1Db250cm9sLnZhbHVlID09PSAnc3RyaW5nJyB8fCB0aGlzLnByb2Nlc3NGb3JtQ29udHJvbC52YWx1ZSA9PT0gbnVsbCA/XG4gICAgICAgICAgICB1bmRlZmluZWQgOiB0aGlzLnByb2Nlc3NGb3JtQ29udHJvbC52YWx1ZS52aWV3VmFsdWU7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gbmFtZSA9PT0gdW5kZWZpbmVkID8gY2F6ZSA6IGNhemUgKyAnIC0gJyArIG5hbWU7XG4gICAgICAgIGlmICh0aXRsZS5sZW5ndGggPiBzaXplKSB7XG4gICAgICAgICAgICBjb25zdCB0bXAgPSB0aXRsZS5zbGljZSgwLCBzaXplKTtcbiAgICAgICAgICAgIHJldHVybiB0bXAgKyAnLi4uJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVPbGRWZXJzaW9ucyhvcHRpb25zOiBBcnJheTxGb3JtPik6IEFycmF5PEZvcm0+IHtcbiAgICAgICAgY29uc3QgdGVtcE5ldHMgPSBPYmplY3QuYXNzaWduKFtdLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgcGV0cmlOZXRJZHMgPSBuZXcgU2V0KG9wdGlvbnMubWFwKGZvcm0gPT4gZm9ybS52YWx1ZSkpO1xuICAgICAgICBjb25zdCBuZXdlc3ROZXRzID0gbmV3IEFycmF5PEZvcm0+KCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBwZXRyaU5ldElkcykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnQ6IEZvcm0gPSB7dmFsdWUsIHZlcnNpb246ICcxLjAuMCcsIHZpZXdWYWx1ZTogJyd9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBuZXQgb2YgdGVtcE5ldHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG5ldC52YWx1ZSAmJiAhc2VtdmVyLmx0KG5ldC52ZXJzaW9uLCBjdXJyZW50LnZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBuZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3ZXN0TmV0cy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdlc3ROZXRzO1xuICAgIH1cblxuICAgIGlzQ2FzZVRpdGxlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuX2luamVjdGVkRGF0YT8ubmV3Q2FzZUNyZWF0aW9uQ29uZmlndXJhdGlvbj8uZW5hYmxlQ2FzZVRpdGxlID8/IHRydWUpO1xuICAgIH1cblxuICAgIGlzQ2FzZVRpdGxlUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ2FzZVRpdGxlRW5hYmxlZCgpICYmICEhKHRoaXMuX2luamVjdGVkRGF0YT8ubmV3Q2FzZUNyZWF0aW9uQ29uZmlndXJhdGlvbj8uaXNDYXNlVGl0bGVSZXF1aXJlZCA/PyB0cnVlKTtcbiAgICB9XG5cbiAgICBzaG93VmVyc2lvbihvcHRpb246IE1hdE9wdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAob3B0aW9uICE9PSB1bmRlZmluZWQgJiYgb3B0aW9uLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgb3B0aW9uLnZhbHVlLnZlcnNpb24gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMubmV0VmVyc2lvbiA9IG9wdGlvbi52YWx1ZS52ZXJzaW9uO1xuICAgIH1cblxuICAgIGNoZWNrVmVyc2lvbih2aWV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50T3B0aW9uID0gdHlwZW9mIHZpZXdWYWx1ZSA9PT0gJ3N0cmluZycgfHwgdmlld1ZhbHVlID09PSBudWxsID8gdW5kZWZpbmVkIDogdmlld1ZhbHVlLnZlcnNpb247XG4gICAgICAgIGlmIChjdXJyZW50T3B0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMubmV0VmVyc2lvbiA9ICcnO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmV3LWNhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5ldGdyaWYvY29tcG9uZW50cy1jb3JlLyIsInNvdXJjZXMiOlsibGliL3NpZGUtbWVudS9jb250ZW50LWNvbXBvbmVudHMvbmV3LWNhc2UvYWJzdHJhY3QtbmV3LWNhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFhLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRSxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxhQUFhLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDN0YsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUU3RixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsTUFBTSxFQUFFLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRXhELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQVc1QjtJQXVCSSxrQ0FBK0QsZ0JBQWlDLEVBQ2hFLFlBQXlCLEVBQ3pCLGdCQUFpQyxFQUNqQyxvQkFBeUMsRUFDekMsZUFBK0IsRUFDL0IsVUFBNEI7UUFMNUQsaUJBNkRDO1FBN0Q4RCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2hFLGlCQUFZLEdB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ZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtTdGVwcGVyU2VsZWN0aW9uRXZlbnR9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zdGVwcGVyJztcbmltcG9ydCB7bWFwLCBzdGFydFdpdGgsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1NuYWNrQmFyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc25hY2stYmFyL3NlcnZpY2VzL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1NJREVfTUVOVV9DT05UUk9MfSBmcm9tICcuLi8uLi9zaWRlLW1lbnUtaW5qZWN0aW9uLXRva2VuJztcbmltcG9ydCB7U2lkZU1lbnVDb250cm9sfSBmcm9tICcuLi8uLi9tb2RlbHMvc2lkZS1tZW51LWNvbnRyb2wnO1xuaW1wb3J0IHtDYXNlUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L2Nhc2UtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge05ld0Nhc2VJbmplY3Rpb25EYXRhfSBmcm9tICcuL21vZGVsL25ldy1jYXNlLWluamVjdGlvbi1kYXRhJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0hvdGtleSwgSG90a2V5c1NlcnZpY2V9IGZyb20gJ2FuZ3VsYXIyLWhvdGtleXMnO1xuaW1wb3J0IHtNYXRUb29sYmFyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sYmFyJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7Q3JlYXRlQ2FzZUV2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvY2FzZS1vdXRjb21lcy9jcmVhdGUtY2FzZS1ldmVudC1vdXRjb21lJztcbmltcG9ydCB7RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL21lc3NhZ2UtcmVzb3VyY2UnO1xuaW1wb3J0IHtNYXRPcHRpb259IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG5pbnRlcmZhY2UgRm9ybSB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICB2aWV3VmFsdWU6IHN0cmluZztcbiAgICB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3ROZXdDYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIHByb2Nlc3NGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgdGl0bGVGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgbmV0VmVyc2lvbjogc3RyaW5nO1xuXG4gICAgb3B0aW9uczogQXJyYXk8Rm9ybT4gPSBbXTtcbiAgICBjb2xvcnM6IEFycmF5PEZvcm0+ID0gW1xuICAgICAgICB7dmFsdWU6ICdwYW5lbC1wcmltYXJ5LWljb24nLCB2aWV3VmFsdWU6ICdQcmltYXJ5J30sXG4gICAgICAgIHt2YWx1ZTogJ3BhbmVsLWFjY2VudC1pY29uJywgdmlld1ZhbHVlOiAnQWNjZW50J30sXG4gICAgXTtcbiAgICBmaWx0ZXJlZE9wdGlvbnMkOiBPYnNlcnZhYmxlPEFycmF5PEZvcm0+PjtcbiAgICBAVmlld0NoaWxkKCd0b29sYmFyJykgdG9vbGJhcjogTWF0VG9vbGJhcjtcblxuICAgIEBWaWV3Q2hpbGQoJ3N0ZXBwZXIxJykgc3RlcHBlcjE7XG4gICAgQFZpZXdDaGlsZCgnc3RlcHBlcjInKSBzdGVwcGVyMjtcblxuICAgIHByb3RlY3RlZCBfb3B0aW9ucyQ6IFJlcGxheVN1YmplY3Q8QXJyYXk8Rm9ybT4+O1xuICAgIHByb3RlY3RlZCBfaW5qZWN0ZWREYXRhOiBOZXdDYXNlSW5qZWN0aW9uRGF0YTtcbiAgICBwcm90ZWN0ZWQgX2hhc011bHRpcGxlTmV0cyQ6IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj47XG4gICAgcHJvdGVjdGVkIF9ub3RJbml0aWFsaXplZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgICBwcml2YXRlIF9hbGxvd2VkTmV0c1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKEBJbmplY3QoTkFFX1NJREVfTUVOVV9DT05UUk9MKSBwcm90ZWN0ZWQgX3NpZGVNZW51Q29udHJvbDogU2lkZU1lbnVDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9zbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9jYXNlUmVzb3VyY2VTZXJ2aWNlOiBDYXNlUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2hvdGtleXNTZXJ2aWNlOiBIb3RrZXlzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NpZGVNZW51Q29udHJvbC5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmplY3RlZERhdGEgPSB0aGlzLl9zaWRlTWVudUNvbnRyb2wuZGF0YSBhcyBOZXdDYXNlSW5qZWN0aW9uRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2luamVjdGVkRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU5vTmV0cygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2hvdGtleXNTZXJ2aWNlLmFkZChuZXcgSG90a2V5KCdlbnRlcicsIChldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgdGhpcy5uZXh0U3RlcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5faGFzTXVsdGlwbGVOZXRzJCA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICAgICAgICB0aGlzLl9ub3RJbml0aWFsaXplZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgICAgICB0aGlzLl9vcHRpb25zJCA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuXG4gICAgICAgIHRoaXMuX2FsbG93ZWROZXRzU3Vic2NyaXB0aW9uID0gdGhpcy5faW5qZWN0ZWREYXRhLmFsbG93ZWROZXRzJC5waXBlKFxuICAgICAgICAgICAgbWFwKG5ldHMgPT4gbmV0cy5tYXAocGV0cmlOZXQgPT4gKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogcGV0cmlOZXQuc3RyaW5nSWQsXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlOiBwZXRyaU5ldC50aXRsZSxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBwZXRyaU5ldC52ZXJzaW9uXG4gICAgICAgICAgICB9KSkpLFxuICAgICAgICAgICAgbWFwKG5ldHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc2lkZU1lbnVDb250cm9sLmFsbFZlcnNpb25FbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZU9sZFZlcnNpb25zKG5ldHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXRzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTm9OZXRzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFzTXVsdGlwbGVOZXRzJC5uZXh0KG9wdGlvbnMubGVuZ3RoID4gMSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApLnN1YnNjcmliZShvcHRpb25zID0+IHtcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMkLm5leHQob3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX25vdEluaXRpYWxpemVkJC5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RJbml0aWFsaXplZCQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90SW5pdGlhbGl6ZWQkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX29wdGlvbnMkLCB0aGlzLnByb2Nlc3NGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgoJycpKV0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoc291cmNlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNvdXJjZXNbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0eXBlb2Ygc291cmNlc1sxXSA9PT0gJ3N0cmluZycgfHwgc291cmNlc1sxXSA9PT0gbnVsbCA/IHNvdXJjZXNbMV0gOiBzb3VyY2VzWzFdLnZpZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQgPyB0aGlzLl9maWx0ZXIoaW5wdXQsIG9wdGlvbnMpIDogb3B0aW9ucy5zbGljZSgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAoZmlsdGVyZWRPcHRpb25zID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NGb3JtQ29udHJvbC5zZXRWYWx1ZShmaWx0ZXJlZE9wdGlvbnNbMF0sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faGFzTXVsdGlwbGVOZXRzJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9hbGxvd2VkTmV0c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzTXVsdGlwbGVOZXRzJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc011bHRpcGxlTmV0cyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBub3RJbml0aWFsaXplZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RJbml0aWFsaXplZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0ZXBDaGFuZ2UoJGV2ZW50OiBTdGVwcGVyU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2lkZU1lbnVDb250cm9sLnB1Ymxpc2goe1xuICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0FjdGl2ZSBzdGVwIGhhcyBjaGFuZ2VkJyxcbiAgICAgICAgICAgIGRhdGE6ICRldmVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkaXNwbGF5Rm4ocHJvY2VzczogRm9ybSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzICYmIHByb2Nlc3Mudmlld1ZhbHVlID8gcHJvY2Vzcy52aWV3VmFsdWUgOiAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlTmV3Q2FzZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGl0bGVGb3JtQ29udHJvbC52YWxpZCB8fCAhdGhpcy5pc0Nhc2VUaXRsZVJlcXVpcmVkKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Nhc2UgPSB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMudGl0bGVGb3JtQ29udHJvbC52YWx1ZSA9PT0gJycgPyBudWxsIDogdGhpcy50aXRsZUZvcm1Db250cm9sLnZhbHVlLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAncGFuZWwtcHJpbWFyeS1pY29uJyxcbiAgICAgICAgICAgICAgICBuZXRJZDogdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMSA/IHRoaXMub3B0aW9uc1swXS52YWx1ZSA6IHRoaXMucHJvY2Vzc0Zvcm1Db250cm9sLnZhbHVlLnZhbHVlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLmNyZWF0ZUNhc2UobmV3Q2FzZSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2U6IEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc25hY2tCYXJTZXJ2aWNlLm9wZW5TdWNjZXNzU25hY2tCYXIocmVzcG9uc2Uub3V0Y29tZS5tZXNzYWdlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdzaWRlLW1lbnUubmV3LWNhc2UuY3JlYXRlQ2FzZScpICsgJyAnICsgbmV3Q2FzZS50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVzcG9uc2Uub3V0Y29tZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZGVNZW51Q29udHJvbC5jbG9zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5vdXRjb21lLm1lc3NhZ2UgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdDb25maXJtIG5ldyBjYXNlIHNldHVwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlc3BvbnNlLm91dGNvbWUubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAocmVzcG9uc2Uub3V0Y29tZSBhcyBDcmVhdGVDYXNlRXZlbnRPdXRjb21lKS5hQ2FzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0+IHRoaXMuX3NuYWNrQmFyU2VydmljZS5vcGVuRXJyb3JTbmFja0JhcihlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IGVycm9yKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBmaWx0ZXIgb3V0IG1hdGNobGVzcyBvcHRpb25zIHdpdGhvdXQgYWNjZW50IGFuZCBjYXNlLXNlbnNpdGl2ZSBkaWZmZXJlbmNlc1xuICAgICAqIEBwYXJhbSB2YWx1ZSB0byBjb21wYXJlIG1hdGNoaW5nIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyB0aGF0IHNob3VsZCBiZSBmaWx0ZXJlZFxuICAgICAqIEByZXR1cm4gIHJldHVybiBtYXRjaGVkIG9wdGlvbnNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2ZpbHRlcih2YWx1ZTogc3RyaW5nLCBvcHRpb25zOiBBcnJheTxGb3JtPik6IEFycmF5PEZvcm0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuXG4gICAgICAgIHJldHVybiBvcHRpb25zLmZpbHRlcihvcHRpb24gPT4gb3B0aW9uLnZpZXdWYWx1ZS50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJykuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPT09IDApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjbG9zZU5vTmV0cygpIHtcbiAgICAgICAgdGhpcy5fc25hY2tCYXJTZXJ2aWNlLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdzaWRlLW1lbnUubmV3LWNhc2Uubm9OZXRzJykpO1xuICAgICAgICB0aGlzLl9zaWRlTWVudUNvbnRyb2wuY2xvc2Uoe1xuICAgICAgICAgICAgb3BlbmVkOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXh0U3RlcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RlcHBlcjEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0ZXBwZXIxLnNlbGVjdGVkSW5kZXggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU5ld0Nhc2UoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyMS5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RlcHBlcjIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0ZXBwZXIyLnNlbGVjdGVkSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU5ld0Nhc2UoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyMi5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aXRsZVNob3J0ZW5pbmcoKSB7XG4gICAgICAgIGxldCBzaXplO1xuICAgICAgICBpZiAodGhpcy50b29sYmFyICYmIHRoaXMudG9vbGJhci5fZWxlbWVudFJlZiAmJiB0aGlzLnRvb2xiYXIuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCAmJlxuICAgICAgICAgICAgdGhpcy50b29sYmFyLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50b29sYmFyLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDI5NjpcbiAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDIyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ5NjpcbiAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDQyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI0NjpcbiAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDE4O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBzaXplID0gMzI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2l6ZSA9IDMyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2F6ZSA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdzaWRlLW1lbnUubmV3LWNhc2UuY2FzZScpO1xuICAgICAgICBjb25zdCBuYW1lID0gdHlwZW9mIHRoaXMucHJvY2Vzc0Zvcm1Db250cm9sLnZhbHVlID09PSAnc3RyaW5nJyB8fCB0aGlzLnByb2Nlc3NGb3JtQ29udHJvbC52YWx1ZSA9PT0gbnVsbCA/XG4gICAgICAgICAgICB1bmRlZmluZWQgOiB0aGlzLnByb2Nlc3NGb3JtQ29udHJvbC52YWx1ZS52aWV3VmFsdWU7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gbmFtZSA9PT0gdW5kZWZpbmVkID8gY2F6ZSA6IGNhemUgKyAnIC0gJyArIG5hbWU7XG4gICAgICAgIGlmICh0aXRsZS5sZW5ndGggPiBzaXplKSB7XG4gICAgICAgICAgICBjb25zdCB0bXAgPSB0aXRsZS5zbGljZSgwLCBzaXplKTtcbiAgICAgICAgICAgIHJldHVybiB0bXAgKyAnLi4uJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVPbGRWZXJzaW9ucyhvcHRpb25zOiBBcnJheTxGb3JtPik6IEFycmF5PEZvcm0+IHtcbiAgICAgICAgY29uc3QgdGVtcE5ldHMgPSBPYmplY3QuYXNzaWduKFtdLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgcGV0cmlOZXRJZHMgPSBuZXcgU2V0KG9wdGlvbnMubWFwKGZvcm0gPT4gZm9ybS52YWx1ZSkpO1xuICAgICAgICBjb25zdCBuZXdlc3ROZXRzID0gbmV3IEFycmF5PEZvcm0+KCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBwZXRyaU5ldElkcykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnQ6IEZvcm0gPSB7dmFsdWUsIHZlcnNpb246ICcxLjAuMCcsIHZpZXdWYWx1ZTogJyd9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBuZXQgb2YgdGVtcE5ldHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG5ldC52YWx1ZSAmJiAhc2VtdmVyLmx0KG5ldC52ZXJzaW9uLCBjdXJyZW50LnZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBuZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3ZXN0TmV0cy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdlc3ROZXRzO1xuICAgIH1cblxuICAgIGlzQ2FzZVRpdGxlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuX2luamVjdGVkRGF0YT8ubmV3Q2FzZUNyZWF0aW9uQ29uZmlndXJhdGlvbj8uZW5hYmxlQ2FzZVRpdGxlID8/IHRydWUpO1xuICAgIH1cblxuICAgIGlzQ2FzZVRpdGxlUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ2FzZVRpdGxlRW5hYmxlZCgpICYmICEhKHRoaXMuX2luamVjdGVkRGF0YT8ubmV3Q2FzZUNyZWF0aW9uQ29uZmlndXJhdGlvbj8uaXNDYXNlVGl0bGVSZXF1aXJlZCA/PyB0cnVlKTtcbiAgICB9XG5cbiAgICBzaG93VmVyc2lvbihvcHRpb246IE1hdE9wdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAob3B0aW9uICE9PSB1bmRlZmluZWQgJiYgb3B0aW9uLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgb3B0aW9uLnZhbHVlLnZlcnNpb24gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMubmV0VmVyc2lvbiA9IG9wdGlvbi52YWx1ZS52ZXJzaW9uO1xuICAgIH1cblxuICAgIGNoZWNrVmVyc2lvbih2aWV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50T3B0aW9uID0gdHlwZW9mIHZpZXdWYWx1ZSA9PT0gJ3N0cmluZycgfHwgdmlld1ZhbHVlID09PSBudWxsID8gdW5kZWZpbmVkIDogdmlld1ZhbHVlLnZlcnNpb247XG4gICAgICAgIGlmIChjdXJyZW50T3B0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMubmV0VmVyc2lvbiA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9OZXh0U3RlcCh2aWV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodmlld1ZhbHVlICE9PSBudWxsICYmIHZpZXdWYWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXBwZXIxLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -55,7 +55,7 @@ var FinishTaskService = /** @class */ (function (_super) {
55
55
  FinishTaskService.prototype.validateDataAndFinish = function (afterAction) {
56
56
  var _this = this;
57
57
  if (afterAction === void 0) { afterAction = new AfterAction(); }
58
- if (this._safeTask.dataSize <= 0) {
58
+ if (this.dataIsEmpty()) {
59
59
  this._taskDataService.initializeTaskDataFields(this._callChain.create(function () {
60
60
  if (_this._safeTask.dataSize <= 0 ||
61
61
  (_this._taskContentService.validateDynamicEnumField() && _this._taskContentService.validateTaskData())) {
@@ -66,17 +66,15 @@ var FinishTaskService = /** @class */ (function (_super) {
66
66
  else if (this._taskContentService.validateDynamicEnumField() && this._taskContentService.validateTaskData()) {
67
67
  var finishedTaskId_1 = this._safeTask.stringId;
68
68
  this._taskDataService.updateTaskDataFields(this._callChain.create(function (success) {
69
- if (success) {
70
- if (_this._taskState.isUpdating(finishedTaskId_1)) {
71
- _this._taskDataService.updateSuccess$.pipe(take(1)).subscribe(function (bool) {
72
- if (bool) {
73
- _this.queueFinishTaskRequest(afterAction);
74
- }
75
- });
76
- }
77
- else {
78
- _this.queueFinishTaskRequest(afterAction);
79
- }
69
+ if (success && _this._taskState.isUpdating(finishedTaskId_1)) {
70
+ _this._taskDataService.updateSuccess$.pipe(take(1)).subscribe(function (bool) {
71
+ if (bool) {
72
+ _this.queueFinishTaskRequest(afterAction);
73
+ }
74
+ });
75
+ }
76
+ else if (success) {
77
+ _this.queueFinishTaskRequest(afterAction);
80
78
  }
81
79
  }));
82
80
  }
@@ -174,6 +172,13 @@ var FinishTaskService = /** @class */ (function (_super) {
174
172
  FinishTaskService.prototype.sendNotification = function (success) {
175
173
  this._taskEvent.publishTaskEvent(createTaskEventNotification(this._safeTask, TaskEvent.FINISH, success));
176
174
  };
175
+ /**
176
+ * Checks data size
177
+ * @return boolean whether the task contains data or not
178
+ */
179
+ FinishTaskService.prototype.dataIsEmpty = function () {
180
+ return this._safeTask.dataSize <= 0 || !this._safeTask.dataGroups || this._safeTask.dataGroups.length <= 0;
181
+ };
177
182
  FinishTaskService.ctorParameters = function () { return [
178
183
  { type: LoggerService },
179
184
  { type: TaskResourceService },
@@ -212,4 +217,4 @@ var FinishTaskService = /** @class */ (function (_super) {
212
217
  return FinishTaskService;
213
218
  }(TaskHandlingService));
214
219
  export { FinishTaskService };
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluaXNoLXRhc2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZXRncmlmL2NvbXBvbmVudHMtY29yZS8iLCJzb3VyY2VzIjpbImxpYi90YXNrL3NlcnZpY2VzL2ZpbmlzaC10YXNrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBQzFGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFOUUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDN0YsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBR2hG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TyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDTyw0Q0FBZ0IsR0FBMUIsVUFBMkIsT0FBZ0I7UUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM3RyxDQUFDOztnQkE1SjJCLGFBQWE7Z0JBQ0csbUJBQW1CO2dCQUM5QixlQUFlO2dCQUNkLGdCQUFnQjtnQkFDaEIsdUJBQXVCO2dCQUNqQixlQUFlO2dCQUNyQixnQkFBZ0I7Z0JBQ2hCLGdCQUFnQjtnQkFDZixpQkFBaUI7Z0JBQ2YsWUFBWTtnQkFDSixvQkFBb0I7Z0RBQ3BELE1BQU0sU0FBQyxtQkFBbUI7Z0JBQ08sbUJBQW1CLHVCQUFwRCxRQUFRO2dCQUNZLGtCQUFrQjs7O2dCQWhCdEQsVUFBVTs7O2dCQTVCSCxhQUFhO2dCQUViLG1CQUFtQjtnQkFDbkIsZUFBZTtnQkFDZixnQkFBZ0I7Z0JBQ2hCLHVCQUF1QjtnQkFDdkIsZUFBZTtnQkFJZixnQkFBZ0I7Z0JBSWhCLGdCQUFnQjtnQkFHaEIsaUJBQWlCO2dCQUlqQixZQUFZO2dCQURaLG9CQUFvQjtnREFzQlgsTUFBTSxTQUFDLG1CQUFtQjtnQkEvQm5DLG1CQUFtQix1QkFnQ1YsUUFBUTtnQkExQ2pCLGtCQUFrQjs7SUEyTDFCLHdCQUFDO0NBQUEsQUFoS0QsQ0FDdUMsbUJBQW1CLEdBK0p6RDtTQS9KWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tDb250ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L3NlcnZpY2VzL3Rhc2stY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7VGFza1Jlc291cmNlU2VydmljZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC90YXNrLXJlc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtTbmFja0JhclNlcnZpY2V9IGZyb20gJy4uLy4uL3NuYWNrLWJhci9zZXJ2aWNlcy9zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtUYXNrUmVxdWVzdFN0YXRlU2VydmljZX0gZnJvbSAnLi90YXNrLXJlcXVlc3Qtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tEYXRhU2VydmljZX0gZnJvbSAnLi90YXNrLWRhdGEuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tIYW5kbGluZ1NlcnZpY2V9IGZyb20gJy4vdGFzay1oYW5kbGluZy1zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1RBU0tfT1BFUkFUSU9OU30gZnJvbSAnLi4vbW9kZWxzL3Rhc2stb3BlcmF0aW9ucy1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHtUYXNrT3BlcmF0aW9uc30gZnJvbSAnLi4vaW50ZXJmYWNlcy90YXNrLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHtDYWxsQ2hhaW5TZXJ2aWNlfSBmcm9tICcuLi8uLi91dGlsaXR5L2NhbGwtY2hhaW4vY2FsbC1jaGFpbi5zZXJ2aWNlJztcbmltcG9ydCB7U2VsZWN0ZWRDYXNlU2VydmljZX0gZnJvbSAnLi9zZWxlY3RlZC1jYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHtjcmVhdGVUYXNrRXZlbnROb3RpZmljYXRpb259IGZyb20gJy4uLy4uL3Rhc2stY29udGVudC9tb2RlbC90YXNrLWV2ZW50LW5vdGlmaWNhdGlvbic7XG5pbXBvcnQge1Rhc2tFdmVudH0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L21vZGVsL3Rhc2stZXZlbnQnO1xuaW1wb3J0IHtUYXNrRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi90YXNrLWNvbnRlbnQvc2VydmljZXMvdGFzay1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7RmluaXNoVGFza0V2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvdGFzay1vdXRjb21lcy9maW5pc2gtdGFzay1ldmVudC1vdXRjb21lJztcbmltcG9ydCB7RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL21lc3NhZ2UtcmVzb3VyY2UnO1xuaW1wb3J0IHtFdmVudFF1ZXVlU2VydmljZX0gZnJvbSAnLi4vLi4vZXZlbnQtcXVldWUvc2VydmljZXMvZXZlbnQtcXVldWUuc2VydmljZSc7XG5pbXBvcnQge1F1ZXVlZEV2ZW50fSBmcm9tICcuLi8uLi9ldmVudC1xdWV1ZS9tb2RlbC9xdWV1ZWQtZXZlbnQnO1xuaW1wb3J0IHtBZnRlckFjdGlvbn0gZnJvbSAnLi4vLi4vdXRpbGl0eS9jYWxsLWNoYWluL2FmdGVyLWFjdGlvbic7XG5pbXBvcnQge0NoYW5nZWRGaWVsZHNTZXJ2aWNlfSBmcm9tICcuLi8uLi9jaGFuZ2VkLWZpZWxkcy9zZXJ2aWNlcy9jaGFuZ2VkLWZpZWxkcy5zZXJ2aWNlJztcbmltcG9ydCB7RXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9ldmVudC9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkc01hcH0gZnJvbSAnLi4vLi4vZXZlbnQvc2VydmljZXMvaW50ZXJmYWNlcy9jaGFuZ2VkLWZpZWxkcy1tYXAnO1xuXG5cbi8qKlxuICogU2VydmljZSB0aGF0IGhhbmRsZXMgdGhlIGxvZ2ljIG9mIGZpbmlzaGluZyBhIHRhc2suXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGaW5pc2hUYXNrU2VydmljZSBleHRlbmRzIFRhc2tIYW5kbGluZ1NlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90YXNrUmVzb3VyY2VTZXJ2aWNlOiBUYXNrUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Rhc2tTdGF0ZTogVGFza1JlcXVlc3RTdGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90YXNrRGF0YVNlcnZpY2U6IFRhc2tEYXRhU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2NhbGxDaGFpbjogQ2FsbENoYWluU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Rhc2tFdmVudDogVGFza0V2ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2V2ZW50UXVldWU6IEV2ZW50UXVldWVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9jaGFuZ2VkRmllbGRzU2VydmljZTogQ2hhbmdlZEZpZWxkc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgQEluamVjdChOQUVfVEFTS19PUEVSQVRJT05TKSBwcm90ZWN0ZWQgX3Rhc2tPcGVyYXRpb25zOiBUYXNrT3BlcmF0aW9ucyxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBfc2VsZWN0ZWRDYXNlU2VydmljZTogU2VsZWN0ZWRDYXNlU2VydmljZSxcbiAgICAgICAgICAgICAgICBfdGFza0NvbnRlbnRTZXJ2aWNlOiBUYXNrQ29udGVudFNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoX3Rhc2tDb250ZW50U2VydmljZSwgX3NlbGVjdGVkQ2FzZVNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHRhc2sgZGF0YSB0byB0aGVpciBjdXJyZW50IHN0YXRlIGZyb20gYmFja2VuZCwgY2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgZGF0YSBhbmRcbiAgICAgKiBzZW5kcyBhIGZpbmlzaCByZXF1ZXN0IHRvIGJhY2tlbmQuXG4gICAgICpcbiAgICAgKiBGaW5pc2ggcmVxdWVzdCBpcyBub3Qgc2VudCBpZiB0aGUgdGFzayBjb250YWlucyBpbnZhbGlkIGRhdGEuXG4gICAgICpcbiAgICAgKiBJZiBhbiB1cGRhdGUgdG8gdGhlIGRhdGEgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyB3YWl0cyBmb3IgaXQncyBzdWNjZXNzZnVsIGNvbXBsZXRpb24gYW5kIHNlbmRzIHRoZSBmaW5pc2ggcmVxdWVzdCBhZnRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhZnRlckFjdGlvbiBpZiBmaW5pc2ggcmVxdWVzdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGB0cnVlYCB3aWxsIGJlIGVtaXR0ZWQgaW50byB0aGlzIFN1YmplY3QsXG4gICAgICogb3RoZXJ3aXNlIGBmYWxzZWAgd2lsbCBiZSBlbWl0dGVkXG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlRGF0YUFuZEZpbmlzaChhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24gPSBuZXcgQWZ0ZXJBY3Rpb24oKSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fc2FmZVRhc2suZGF0YVNpemUgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5fdGFza0RhdGFTZXJ2aWNlLmluaXRpYWxpemVUYXNrRGF0YUZpZWxkcyh0aGlzLl9jYWxsQ2hhaW4uY3JlYXRlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2FmZVRhc2suZGF0YVNpemUgPD0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAodGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnZhbGlkYXRlRHluYW1pY0VudW1GaWVsZCgpICYmIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS52YWxpZGF0ZVRhc2tEYXRhKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWVGaW5pc2hUYXNrUmVxdWVzdChhZnRlckFjdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS52YWxpZGF0ZUR5bmFtaWNFbnVtRmllbGQoKSAmJiB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudmFsaWRhdGVUYXNrRGF0YSgpKSB7XG4gICAgICAgICAgICBjb25zdCBmaW5pc2hlZFRhc2tJZCA9IHRoaXMuX3NhZmVUYXNrLnN0cmluZ0lkO1xuICAgICAgICAgICAgdGhpcy5fdGFza0RhdGFTZXJ2aWNlLnVwZGF0ZVRhc2tEYXRhRmllbGRzKHRoaXMuX2NhbGxDaGFpbi5jcmVhdGUoc3VjY2VzcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Rhc2tTdGF0ZS5pc1VwZGF0aW5nKGZpbmlzaGVkVGFza0lkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFza0RhdGFTZXJ2aWNlLnVwZGF0ZVN1Y2Nlc3MkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGJvb2wgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWVGaW5pc2hUYXNrUmVxdWVzdChhZnRlckFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlRmluaXNoVGFza1JlcXVlc3QoYWZ0ZXJBY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VuZHMgdGhlIGZpbmlzaCByZXF1ZXN0IHRvIGJhY2tlbmQgYW5kIG5vdGlmaWVzIHRoZSB1c2VyIGFib3V0IHRoZSBvdXRjb21lIG9mIHRoZSBvcGVyYXRpb24gdmlhIGEgc25hY2sgYmFyIG1lc3NhZ2UuXG4gICAgICpcbiAgICAgKiBEb2Vzbid0IHNlbmQgYW55IHJlcXVlc3RzIGlmIHRoZSBsb2FkaW5nIGluZGljYXRvciBpcyBpbiBpdCdzIGFjdGl2ZSBzdGF0ZS5cbiAgICAgKiBPdGhlcndpc2Ugc2V0cyB0aGUgaW5kaWNhdG9yIHRvIHRoZSBhY3RpdmUgc3RhdGUgYW5kIGRpc2FibGVzIGl0IG9uY2UgdGhlIHJlcXVlc3QgcmVzcG9uc2UgaXMgcmVjZWl2ZWQuXG4gICAgICpcbiAgICAgKiBUaGUgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gY2hhaW4gb3BlcmF0aW9ucyB0b2dldGhlcixcbiAgICAgKiBvciB0byBleGVjdXRlIGNvZGUgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB0aGUgc3VjY2VzcyBzdGF0ZSBvZiB0aGUgZmluaXNoIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgdGFzayBoZWxkIHdpdGhpbiB0aGUge0BsaW5rIFRhc2tDb250ZW50U2VydmljZX0gY2hhbmdlcyBiZWZvcmUgYSByZXNwb25zZSBpcyByZWNlaXZlZCwgdGhlIHJlc3BvbnNlIHdpbGwgYmUgaWdub3JlZFxuICAgICAqIGFuZCB0aGUgYGFmdGVyQWN0aW9uYCB3aWxsIG5vdCBiZSBleGVjdXRlZC5cbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gaWYgZmluaXNoIHJlcXVlc3QgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBgdHJ1ZWAgd2lsbCBiZSBlbWl0dGVkIGludG8gdGhpcyBTdWJqZWN0LFxuICAgICAqIG90aGVyd2lzZSBgZmFsc2VgIHdpbGwgYmUgZW1pdHRlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBxdWV1ZUZpbmlzaFRhc2tSZXF1ZXN0KGFmdGVyQWN0aW9uOiBBZnRlckFjdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9ldmVudFF1ZXVlLnNjaGVkdWxlRXZlbnQobmV3IFF1ZXVlZEV2ZW50KFxuICAgICAgICAgICAgKCkgPT4gdHJ1ZSxcbiAgICAgICAgICAgIG5leHRFdmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtRmluaXNoUmVxdWVzdChhZnRlckFjdGlvbiwgbmV4dEV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBgZmluaXNoYCByZXF1ZXN0IG9uIHRoZSB0YXNrIGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlIGB0YXNrQ29udGVudGAgc2VydmljZVxuICAgICAqIEBwYXJhbSBhZnRlckFjdGlvbiB0aGUgYWN0aW9uIHRoYXQgc2hvdWxkIGJlIHBlcmZvcm1lZCBhZnRlciB0aGUgcmVxdWVzdCBpcyBwcm9jZXNzZWRcbiAgICAgKiBAcGFyYW0gbmV4dEV2ZW50IGluZGljYXRlcyB0byB0aGUgZXZlbnQgcXVldWUgdGhhdCB0aGUgbmV4dCBldmVudCBjYW4gYmUgcHJvY2Vzc2VkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHBlcmZvcm1GaW5pc2hSZXF1ZXN0KGFmdGVyQWN0aW9uOiBBZnRlckFjdGlvbiwgbmV4dEV2ZW50OiBBZnRlckFjdGlvbikge1xuICAgICAgICBjb25zdCBmaW5pc2hlZFRhc2tJZCA9IHRoaXMuX3NhZmVUYXNrLnN0cmluZ0lkO1xuXG4gICAgICAgIC8vIHRoaXMgaXMgcHJvYmFibHkgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIHRoZSBldmVudCBxdWV1ZVxuICAgICAgICBpZiAodGhpcy5fdGFza1N0YXRlLmlzTG9hZGluZyhmaW5pc2hlZFRhc2tJZCkpIHtcbiAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0YXJ0TG9hZGluZyhmaW5pc2hlZFRhc2tJZCk7XG5cbiAgICAgICAgdGhpcy5fdGFza1Jlc291cmNlU2VydmljZS5maW5pc2hUYXNrKHRoaXMuX3NhZmVUYXNrLnN0cmluZ0lkKS5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChvdXRjb21lUmVzb3VyY2U6IEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BMb2FkaW5nKGZpbmlzaGVkVGFza0lkKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Rhc2tSZWxldmFudChmaW5pc2hlZFRhc2tJZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ2N1cnJlbnQgdGFzayBjaGFuZ2VkIGJlZm9yZSB0aGUgZmluaXNoIHJlc3BvbnNlIGNvdWxkIGJlIHJlY2VpdmVkLCBkaXNjYXJkaW5nLi4uJyk7XG4gICAgICAgICAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG91dGNvbWVSZXNvdXJjZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnVwZGF0ZVN0YXRlRGF0YShvdXRjb21lUmVzb3VyY2Uub3V0Y29tZSBhcyBGaW5pc2hUYXNrRXZlbnRPdXRjb21lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFuZ2VkRmllbGRzTWFwOiBDaGFuZ2VkRmllbGRzTWFwID0gdGhpcy5fZXZlbnRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5wYXJzZUNoYW5nZWRGaWVsZHNGcm9tT3V0Y29tZVRyZWUob3V0Y29tZVJlc291cmNlLm91dGNvbWUpO1xuICAgICAgICAgICAgICAgIGlmICghIWNoYW5nZWRGaWVsZHNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlZEZpZWxkc1NlcnZpY2UuZW1pdENoYW5nZWRGaWVsZHMoY2hhbmdlZEZpZWxkc01hcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tPcGVyYXRpb25zLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVBY3Rpb25zKGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tPcGVyYXRpb25zLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlblN1Y2Nlc3NTbmFja0JhcihvdXRjb21lUmVzb3VyY2Uub3V0Y29tZS5tZXNzYWdlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgndGFza3Muc25hY2tiYXIuZmluaXNoVGFza1N1Y2Nlc3MnKVxuICAgICAgICAgICAgICAgICAgICA6IG91dGNvbWVSZXNvdXJjZS5vdXRjb21lLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvdXRjb21lUmVzb3VyY2UuZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChvdXRjb21lUmVzb3VyY2UuZXJyb3IgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW5FcnJvclNuYWNrQmFyKG91dGNvbWVSZXNvdXJjZS5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvdXRjb21lUmVzb3VyY2Uub3V0Y29tZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRGaWVsZHNNYXAgPSB0aGlzLl9ldmVudFNlcnZpY2UucGFyc2VDaGFuZ2VkRmllbGRzRnJvbU91dGNvbWVUcmVlKG91dGNvbWVSZXNvdXJjZS5vdXRjb21lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlZEZpZWxkc1NlcnZpY2UuZW1pdENoYW5nZWRGaWVsZHMoY2hhbmdlZEZpZWxkc01hcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVBY3Rpb25zKGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BMb2FkaW5nKGZpbmlzaGVkVGFza0lkKTtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZygnZmluaXNoaW5nIHRhc2sgZmFpbGVkJywgZXJyb3IpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNUYXNrUmVsZXZhbnQoZmluaXNoZWRUYXNrSWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdjdXJyZW50IHRhc2sgY2hhbmdlZCBiZWZvcmUgdGhlIGZpbmlzaCBlcnJvciBjb3VsZCBiZSByZWNlaXZlZCcpO1xuICAgICAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW5FcnJvclNuYWNrQmFyKGAke3RoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5maW5pc2hUYXNrJyl9XG4gICAgICAgICAgICAgJHt0aGlzLl90YXNrLnRpdGxlfSAke3RoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5mYWlsZWQnKX1gKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVBY3Rpb25zKGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGxldGVzIGFsbCB0aGUgYWN0aW9uIHN0cmVhbXMgYW5kIHNlbmRzIHRoZSBub3RpZmljYXRpb24sIHdpdGggdGhlIHByb3ZpZGVkIHJlc3VsdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjb21wbGV0ZUFjdGlvbnMoYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLCBuZXh0RXZlbnQ6IEFmdGVyQWN0aW9uLCByZXN1bHQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZW5kTm90aWZpY2F0aW9uKHJlc3VsdCk7XG4gICAgICAgIGFmdGVyQWN0aW9uLnJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUocmVzdWx0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQdWJsaXNoZXMgYSBmaW5pc2ggbm90aWZpY2F0aW9uIHRvIHRoZSB7QGxpbmsgVGFza0V2ZW50U2VydmljZX1cbiAgICAgKiBAcGFyYW0gc3VjY2VzcyB3aGV0aGVyIHRoZSBmaW5pc2ggb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsIG9yIG5vdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZW5kTm90aWZpY2F0aW9uKHN1Y2Nlc3M6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFza0V2ZW50LnB1Ymxpc2hUYXNrRXZlbnQoY3JlYXRlVGFza0V2ZW50Tm90aWZpY2F0aW9uKHRoaXMuX3NhZmVUYXNrLCBUYXNrRXZlbnQuRklOSVNILCBzdWNjZXNzKSk7XG4gICAgfVxufVxuIl19
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluaXNoLXRhc2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZXRncmlmL2NvbXBvbmVudHMtY29yZS8iLCJzb3VyY2VzIjpbImxpYi90YXNrL3NlcnZpY2VzL2ZpbmlzaC10YXNrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBQzFGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFOUUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDN0YsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBR2hG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IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tDb250ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L3NlcnZpY2VzL3Rhc2stY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7VGFza1Jlc291cmNlU2VydmljZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC90YXNrLXJlc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtTbmFja0JhclNlcnZpY2V9IGZyb20gJy4uLy4uL3NuYWNrLWJhci9zZXJ2aWNlcy9zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtUYXNrUmVxdWVzdFN0YXRlU2VydmljZX0gZnJvbSAnLi90YXNrLXJlcXVlc3Qtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tEYXRhU2VydmljZX0gZnJvbSAnLi90YXNrLWRhdGEuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tIYW5kbGluZ1NlcnZpY2V9IGZyb20gJy4vdGFzay1oYW5kbGluZy1zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1RBU0tfT1BFUkFUSU9OU30gZnJvbSAnLi4vbW9kZWxzL3Rhc2stb3BlcmF0aW9ucy1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHtUYXNrT3BlcmF0aW9uc30gZnJvbSAnLi4vaW50ZXJmYWNlcy90YXNrLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHtDYWxsQ2hhaW5TZXJ2aWNlfSBmcm9tICcuLi8uLi91dGlsaXR5L2NhbGwtY2hhaW4vY2FsbC1jaGFpbi5zZXJ2aWNlJztcbmltcG9ydCB7U2VsZWN0ZWRDYXNlU2VydmljZX0gZnJvbSAnLi9zZWxlY3RlZC1jYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHtjcmVhdGVUYXNrRXZlbnROb3RpZmljYXRpb259IGZyb20gJy4uLy4uL3Rhc2stY29udGVudC9tb2RlbC90YXNrLWV2ZW50LW5vdGlmaWNhdGlvbic7XG5pbXBvcnQge1Rhc2tFdmVudH0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L21vZGVsL3Rhc2stZXZlbnQnO1xuaW1wb3J0IHtUYXNrRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi90YXNrLWNvbnRlbnQvc2VydmljZXMvdGFzay1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7RmluaXNoVGFza0V2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvdGFzay1vdXRjb21lcy9maW5pc2gtdGFzay1ldmVudC1vdXRjb21lJztcbmltcG9ydCB7RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL21lc3NhZ2UtcmVzb3VyY2UnO1xuaW1wb3J0IHtFdmVudFF1ZXVlU2VydmljZX0gZnJvbSAnLi4vLi4vZXZlbnQtcXVldWUvc2VydmljZXMvZXZlbnQtcXVldWUuc2VydmljZSc7XG5pbXBvcnQge1F1ZXVlZEV2ZW50fSBmcm9tICcuLi8uLi9ldmVudC1xdWV1ZS9tb2RlbC9xdWV1ZWQtZXZlbnQnO1xuaW1wb3J0IHtBZnRlckFjdGlvbn0gZnJvbSAnLi4vLi4vdXRpbGl0eS9jYWxsLWNoYWluL2FmdGVyLWFjdGlvbic7XG5pbXBvcnQge0NoYW5nZWRGaWVsZHNTZXJ2aWNlfSBmcm9tICcuLi8uLi9jaGFuZ2VkLWZpZWxkcy9zZXJ2aWNlcy9jaGFuZ2VkLWZpZWxkcy5zZXJ2aWNlJztcbmltcG9ydCB7RXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9ldmVudC9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkc01hcH0gZnJvbSAnLi4vLi4vZXZlbnQvc2VydmljZXMvaW50ZXJmYWNlcy9jaGFuZ2VkLWZpZWxkcy1tYXAnO1xuXG5cbi8qKlxuICogU2VydmljZSB0aGF0IGhhbmRsZXMgdGhlIGxvZ2ljIG9mIGZpbmlzaGluZyBhIHRhc2suXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGaW5pc2hUYXNrU2VydmljZSBleHRlbmRzIFRhc2tIYW5kbGluZ1NlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90YXNrUmVzb3VyY2VTZXJ2aWNlOiBUYXNrUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Rhc2tTdGF0ZTogVGFza1JlcXVlc3RTdGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90YXNrRGF0YVNlcnZpY2U6IFRhc2tEYXRhU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2NhbGxDaGFpbjogQ2FsbENoYWluU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Rhc2tFdmVudDogVGFza0V2ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2V2ZW50UXVldWU6IEV2ZW50UXVldWVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9jaGFuZ2VkRmllbGRzU2VydmljZTogQ2hhbmdlZEZpZWxkc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgQEluamVjdChOQUVfVEFTS19PUEVSQVRJT05TKSBwcm90ZWN0ZWQgX3Rhc2tPcGVyYXRpb25zOiBUYXNrT3BlcmF0aW9ucyxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBfc2VsZWN0ZWRDYXNlU2VydmljZTogU2VsZWN0ZWRDYXNlU2VydmljZSxcbiAgICAgICAgICAgICAgICBfdGFza0NvbnRlbnRTZXJ2aWNlOiBUYXNrQ29udGVudFNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoX3Rhc2tDb250ZW50U2VydmljZSwgX3NlbGVjdGVkQ2FzZVNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHRhc2sgZGF0YSB0byB0aGVpciBjdXJyZW50IHN0YXRlIGZyb20gYmFja2VuZCwgY2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgZGF0YSBhbmRcbiAgICAgKiBzZW5kcyBhIGZpbmlzaCByZXF1ZXN0IHRvIGJhY2tlbmQuXG4gICAgICpcbiAgICAgKiBGaW5pc2ggcmVxdWVzdCBpcyBub3Qgc2VudCBpZiB0aGUgdGFzayBjb250YWlucyBpbnZhbGlkIGRhdGEuXG4gICAgICpcbiAgICAgKiBJZiBhbiB1cGRhdGUgdG8gdGhlIGRhdGEgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyB3YWl0cyBmb3IgaXQncyBzdWNjZXNzZnVsIGNvbXBsZXRpb24gYW5kIHNlbmRzIHRoZSBmaW5pc2ggcmVxdWVzdCBhZnRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhZnRlckFjdGlvbiBpZiBmaW5pc2ggcmVxdWVzdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGB0cnVlYCB3aWxsIGJlIGVtaXR0ZWQgaW50byB0aGlzIFN1YmplY3QsXG4gICAgICogb3RoZXJ3aXNlIGBmYWxzZWAgd2lsbCBiZSBlbWl0dGVkXG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlRGF0YUFuZEZpbmlzaChhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24gPSBuZXcgQWZ0ZXJBY3Rpb24oKSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRhSXNFbXB0eSgpKSB7XG4gICAgICAgICAgICB0aGlzLl90YXNrRGF0YVNlcnZpY2UuaW5pdGlhbGl6ZVRhc2tEYXRhRmllbGRzKHRoaXMuX2NhbGxDaGFpbi5jcmVhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zYWZlVGFzay5kYXRhU2l6ZSA8PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudmFsaWRhdGVEeW5hbWljRW51bUZpZWxkKCkgJiYgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnZhbGlkYXRlVGFza0RhdGEoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWV1ZUZpbmlzaFRhc2tSZXF1ZXN0KGFmdGVyQWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnZhbGlkYXRlRHluYW1pY0VudW1GaWVsZCgpICYmIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS52YWxpZGF0ZVRhc2tEYXRhKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmlzaGVkVGFza0lkID0gdGhpcy5fc2FmZVRhc2suc3RyaW5nSWQ7XG4gICAgICAgICAgICB0aGlzLl90YXNrRGF0YVNlcnZpY2UudXBkYXRlVGFza0RhdGFGaWVsZHModGhpcy5fY2FsbENoYWluLmNyZWF0ZShzdWNjZXNzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgdGhpcy5fdGFza1N0YXRlLmlzVXBkYXRpbmcoZmluaXNoZWRUYXNrSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrRGF0YVNlcnZpY2UudXBkYXRlU3VjY2VzcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoYm9vbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWV1ZUZpbmlzaFRhc2tSZXF1ZXN0KGFmdGVyQWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlRmluaXNoVGFza1JlcXVlc3QoYWZ0ZXJBY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZW5kcyB0aGUgZmluaXNoIHJlcXVlc3QgdG8gYmFja2VuZCBhbmQgbm90aWZpZXMgdGhlIHVzZXIgYWJvdXQgdGhlIG91dGNvbWUgb2YgdGhlIG9wZXJhdGlvbiB2aWEgYSBzbmFjayBiYXIgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIERvZXNuJ3Qgc2VuZCBhbnkgcmVxdWVzdHMgaWYgdGhlIGxvYWRpbmcgaW5kaWNhdG9yIGlzIGluIGl0J3MgYWN0aXZlIHN0YXRlLlxuICAgICAqIE90aGVyd2lzZSBzZXRzIHRoZSBpbmRpY2F0b3IgdG8gdGhlIGFjdGl2ZSBzdGF0ZSBhbmQgZGlzYWJsZXMgaXQgb25jZSB0aGUgcmVxdWVzdCByZXNwb25zZSBpcyByZWNlaXZlZC5cbiAgICAgKlxuICAgICAqIFRoZSBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBjaGFpbiBvcGVyYXRpb25zIHRvZ2V0aGVyLFxuICAgICAqIG9yIHRvIGV4ZWN1dGUgY29kZSBjb25kaXRpb25hbGx5IGJhc2VkIG9uIHRoZSBzdWNjZXNzIHN0YXRlIG9mIHRoZSBmaW5pc2ggcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIElmIHRoZSB0YXNrIGhlbGQgd2l0aGluIHRoZSB7QGxpbmsgVGFza0NvbnRlbnRTZXJ2aWNlfSBjaGFuZ2VzIGJlZm9yZSBhIHJlc3BvbnNlIGlzIHJlY2VpdmVkLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSBpZ25vcmVkXG4gICAgICogYW5kIHRoZSBgYWZ0ZXJBY3Rpb25gIHdpbGwgbm90IGJlIGV4ZWN1dGVkLlxuICAgICAqIEBwYXJhbSBhZnRlckFjdGlvbiBpZiBmaW5pc2ggcmVxdWVzdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGB0cnVlYCB3aWxsIGJlIGVtaXR0ZWQgaW50byB0aGlzIFN1YmplY3QsXG4gICAgICogb3RoZXJ3aXNlIGBmYWxzZWAgd2lsbCBiZSBlbWl0dGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHF1ZXVlRmluaXNoVGFza1JlcXVlc3QoYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2V2ZW50UXVldWUuc2NoZWR1bGVFdmVudChuZXcgUXVldWVkRXZlbnQoXG4gICAgICAgICAgICAoKSA9PiB0cnVlLFxuICAgICAgICAgICAgbmV4dEV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1GaW5pc2hSZXF1ZXN0KGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIGBmaW5pc2hgIHJlcXVlc3Qgb24gdGhlIHRhc2sgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUgYHRhc2tDb250ZW50YCBzZXJ2aWNlXG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBuZXh0RXZlbnQgaW5kaWNhdGVzIHRvIHRoZSBldmVudCBxdWV1ZSB0aGF0IHRoZSBuZXh0IGV2ZW50IGNhbiBiZSBwcm9jZXNzZWRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcGVyZm9ybUZpbmlzaFJlcXVlc3QoYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLCBuZXh0RXZlbnQ6IEFmdGVyQWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkVGFza0lkID0gdGhpcy5fc2FmZVRhc2suc3RyaW5nSWQ7XG5cbiAgICAgICAgLy8gdGhpcyBpcyBwcm9iYWJseSBubyBsb25nZXIgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgdGhlIGV2ZW50IHF1ZXVlXG4gICAgICAgIGlmICh0aGlzLl90YXNrU3RhdGUuaXNMb2FkaW5nKGZpbmlzaGVkVGFza0lkKSkge1xuICAgICAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RhcnRMb2FkaW5nKGZpbmlzaGVkVGFza0lkKTtcblxuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmZpbmlzaFRhc2sodGhpcy5fc2FmZVRhc2suc3RyaW5nSWQpLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKG91dGNvbWVSZXNvdXJjZTogRXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RvcExvYWRpbmcoZmluaXNoZWRUYXNrSWQpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVGFza1JlbGV2YW50KGZpbmlzaGVkVGFza0lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZygnY3VycmVudCB0YXNrIGNoYW5nZWQgYmVmb3JlIHRoZSBmaW5pc2ggcmVzcG9uc2UgY291bGQgYmUgcmVjZWl2ZWQsIGRpc2NhcmRpbmcuLi4nKTtcbiAgICAgICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3V0Y29tZVJlc291cmNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudXBkYXRlU3RhdGVEYXRhKG91dGNvbWVSZXNvdXJjZS5vdXRjb21lIGFzIEZpbmlzaFRhc2tFdmVudE91dGNvbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRGaWVsZHNNYXA6IENoYW5nZWRGaWVsZHNNYXAgPSB0aGlzLl9ldmVudFNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLnBhcnNlQ2hhbmdlZEZpZWxkc0Zyb21PdXRjb21lVHJlZShvdXRjb21lUmVzb3VyY2Uub3V0Y29tZSk7XG4gICAgICAgICAgICAgICAgaWYgKCEhY2hhbmdlZEZpZWxkc01hcCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VkRmllbGRzU2VydmljZS5lbWl0Q2hhbmdlZEZpZWxkcyhjaGFuZ2VkRmllbGRzTWFwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFza09wZXJhdGlvbnMucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUFjdGlvbnMoYWZ0ZXJBY3Rpb24sIG5leHRFdmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFza09wZXJhdGlvbnMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuU3VjY2Vzc1NuYWNrQmFyKG91dGNvbWVSZXNvdXJjZS5vdXRjb21lLm1lc3NhZ2UgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5maW5pc2hUYXNrU3VjY2VzcycpXG4gICAgICAgICAgICAgICAgICAgIDogb3V0Y29tZVJlc291cmNlLm91dGNvbWUubWVzc2FnZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG91dGNvbWVSZXNvdXJjZS5lcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKG91dGNvbWVSZXNvdXJjZS5lcnJvciAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbkVycm9yU25hY2tCYXIob3V0Y29tZVJlc291cmNlLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG91dGNvbWVSZXNvdXJjZS5vdXRjb21lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhbmdlZEZpZWxkc01hcCA9IHRoaXMuX2V2ZW50U2VydmljZS5wYXJzZUNoYW5nZWRGaWVsZHNGcm9tT3V0Y29tZVRyZWUob3V0Y29tZVJlc291cmNlLm91dGNvbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VkRmllbGRzU2VydmljZS5lbWl0Q2hhbmdlZEZpZWxkcyhjaGFuZ2VkRmllbGRzTWFwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUFjdGlvbnMoYWZ0ZXJBY3Rpb24sIG5leHRFdmVudCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RvcExvYWRpbmcoZmluaXNoZWRUYXNrSWQpO1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdmaW5pc2hpbmcgdGFzayBmYWlsZWQnLCBlcnJvcik7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Rhc2tSZWxldmFudChmaW5pc2hlZFRhc2tJZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ2N1cnJlbnQgdGFzayBjaGFuZ2VkIGJlZm9yZSB0aGUgZmluaXNoIGVycm9yIGNvdWxkIGJlIHJlY2VpdmVkJyk7XG4gICAgICAgICAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbkVycm9yU25hY2tCYXIoYCR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3Rhc2tzLnNuYWNrYmFyLmZpbmlzaFRhc2snKX1cbiAgICAgICAgICAgICAke3RoaXMuX3Rhc2sudGl0bGV9ICR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3Rhc2tzLnNuYWNrYmFyLmZhaWxlZCcpfWApO1xuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUFjdGlvbnMoYWZ0ZXJBY3Rpb24sIG5leHRFdmVudCwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wbGV0ZXMgYWxsIHRoZSBhY3Rpb24gc3RyZWFtcyBhbmQgc2VuZHMgdGhlIG5vdGlmaWNhdGlvbiwgd2l0aCB0aGUgcHJvdmlkZWQgcmVzdWx0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNvbXBsZXRlQWN0aW9ucyhhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24sIG5leHRFdmVudDogQWZ0ZXJBY3Rpb24sIHJlc3VsdDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNlbmROb3RpZmljYXRpb24ocmVzdWx0KTtcbiAgICAgICAgYWZ0ZXJBY3Rpb24ucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShyZXN1bHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFB1Ymxpc2hlcyBhIGZpbmlzaCBub3RpZmljYXRpb24gdG8gdGhlIHtAbGluayBUYXNrRXZlbnRTZXJ2aWNlfVxuICAgICAqIEBwYXJhbSBzdWNjZXNzIHdoZXRoZXIgdGhlIGZpbmlzaCBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgb3Igbm90XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNlbmROb3RpZmljYXRpb24oc3VjY2VzczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl90YXNrRXZlbnQucHVibGlzaFRhc2tFdmVudChjcmVhdGVUYXNrRXZlbnROb3RpZmljYXRpb24odGhpcy5fc2FmZVRhc2ssIFRhc2tFdmVudC5GSU5JU0gsIHN1Y2Nlc3MpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgZGF0YSBzaXplXG4gICAgICogQHJldHVybiBib29sZWFuIHdoZXRoZXIgdGhlIHRhc2sgY29udGFpbnMgZGF0YSBvciBub3RcbiAgICAgKi9cbiAgICBwcml2YXRlIGRhdGFJc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2FmZVRhc2suZGF0YVNpemUgPD0gMCB8fCAhdGhpcy5fc2FmZVRhc2suZGF0YUdyb3VwcyB8fCB0aGlzLl9zYWZlVGFzay5kYXRhR3JvdXBzLmxlbmd0aCA8PSAwO1xuICAgIH1cbn1cbiJdfQ==
@@ -152,6 +152,7 @@ var TaskDataService = /** @class */ (function (_super) {
152
152
  if (dataGroups.length === 0) {
153
153
  this._log.info('Task has no data ' + this._safeTask);
154
154
  this._safeTask.dataSize = 0;
155
+ this._taskContentService.taskFieldsIndex[this._safeTask.stringId] = {};
155
156
  }
156
157
  else {
157
158
  this._taskContentService.referencedTaskAndCaseIds[this._safeTask.caseId] = [this._safeTask.stringId];
@@ -600,4 +601,4 @@ var TaskDataService = /** @class */ (function (_super) {
600
601
  return TaskDataService;
601
602
  }(TaskHandlingService));
602
603
  export { TaskDataService };
603
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1kYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUvIiwic291cmNlcyI6WyJsaWIvdGFzay9zZXJ2aWNlcy90YXNrLWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBYSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFdkQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDcEYsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx1REFBdUQsQ0FBQztBQUMxRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxREFBcUQsQ0FBQztBQUUxRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUc5RSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDekUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RCxPQUFPLEVB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QyxtQkFBbUIsdUJBd0NWLFFBQVE7Z0JBckRqQixrQkFBa0I7Z0JBbUJsQixnQkFBZ0I7Z0JBSWhCLGlCQUFpQjtnQkFHakIscUJBQXFCO2dCQUdyQixZQUFZO2dCQUVaLG9CQUFvQjs7SUF3aUI1QixzQkFBQztDQUFBLEFBaGlCRCxDQUNxQyxtQkFBbUIsR0EraEJ2RDtTQS9oQlksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkc30gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2NoYW5nZWQtZmllbGRzJztcbmltcG9ydCB7VGFza0NvbnRlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi90YXNrLWNvbnRlbnQvc2VydmljZXMvdGFzay1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtUYXNrUmVxdWVzdFN0YXRlU2VydmljZX0gZnJvbSAnLi90YXNrLXJlcXVlc3Qtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtTbmFja0JhclNlcnZpY2V9IGZyb20gJy4uLy4uL3NuYWNrLWJhci9zZXJ2aWNlcy9zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvdGFzay1yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCB7RmllbGRDb252ZXJ0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi90YXNrLWNvbnRlbnQvc2VydmljZXMvZmllbGQtY29udmVydGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtUYXNrU2V0RGF0YVJlcXVlc3RCb2R5fSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL3Rhc2stc2V0LWRhdGEtcmVxdWVzdC1ib2R5JztcbmltcG9ydCB7VGFza0hhbmRsaW5nU2VydmljZX0gZnJvbSAnLi90YXNrLWhhbmRsaW5nLXNlcnZpY2UnO1xuaW1wb3J0IHtOQUVfVEFTS19PUEVSQVRJT05TfSBmcm9tICcuLi9tb2RlbHMvdGFzay1vcGVyYXRpb25zLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQge1Rhc2tPcGVyYXRpb25zfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Rhc2stb3BlcmF0aW9ucyc7XG5pbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0ZpbGVGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZmlsZS1maWVsZC9tb2RlbHMvZmlsZS1maWVsZCc7XG5pbXBvcnQge1NlbGVjdGVkQ2FzZVNlcnZpY2V9IGZyb20gJy4vc2VsZWN0ZWQtY2FzZS5zZXJ2aWNlJztcbmltcG9ydCB7RmlsZUxpc3RGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZmlsZS1saXN0LWZpZWxkL21vZGVscy9maWxlLWxpc3QtZmllbGQnO1xuaW1wb3J0IHtjcmVhdGVUYXNrRXZlbnROb3RpZmljYXRpb259IGZyb20gJy4uLy4uL3Rhc2stY29udGVudC9tb2RlbC90YXNrLWV2ZW50LW5vdGlmaWNhdGlvbic7XG5pbXBvcnQge1Rhc2tFdmVudH0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L21vZGVsL3Rhc2stZXZlbnQnO1xuaW1wb3J0IHtUYXNrRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi90YXNrLWNvbnRlbnQvc2VydmljZXMvdGFzay1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7RGF0YUZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9tb2RlbHMvYWJzdHJhY3QtZGF0YS1maWVsZCc7XG5pbXBvcnQge0NhbGxDaGFpblNlcnZpY2V9IGZyb20gJy4uLy4uL3V0aWxpdHkvY2FsbC1jaGFpbi9jYWxsLWNoYWluLnNlcnZpY2UnO1xuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0R5bmFtaWNFbnVtZXJhdGlvbkZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9lbnVtZXJhdGlvbi1maWVsZC9tb2RlbHMvZHluYW1pYy1lbnVtZXJhdGlvbi1maWVsZCc7XG5pbXBvcnQge0RhdGFHcm91cH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9kYXRhLWdyb3Vwcyc7XG5pbXBvcnQge0V2ZW50UXVldWVTZXJ2aWNlfSBmcm9tICcuLi8uLi9ldmVudC1xdWV1ZS9zZXJ2aWNlcy9ldmVudC1xdWV1ZS5zZXJ2aWNlJztcbmltcG9ydCB7UXVldWVkRXZlbnR9IGZyb20gJy4uLy4uL2V2ZW50LXF1ZXVlL21vZGVsL3F1ZXVlZC1ldmVudCc7XG5pbXBvcnQge0FmdGVyQWN0aW9ufSBmcm9tICcuLi8uLi91dGlsaXR5L2NhbGwtY2hhaW4vYWZ0ZXItYWN0aW9uJztcbmltcG9ydCB7VXNlckNvbXBhcmF0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi91c2VyL3NlcnZpY2VzL3VzZXItY29tcGFyYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7VGFza1NldERhdGFSZXF1ZXN0Q29udGV4dH0gZnJvbSAnLi4vbW9kZWxzL3Rhc2stc2V0LWRhdGEtcmVxdWVzdC1jb250ZXh0JztcbmltcG9ydCB7RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL21lc3NhZ2UtcmVzb3VyY2UnO1xuaW1wb3J0IHtFdmVudFNlcnZpY2V9IGZyb20gJy4uLy4uL2V2ZW50L3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtFdmVudE91dGNvbWV9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvZXZlbnQtb3V0Y29tZSc7XG5pbXBvcnQge0NoYW5nZWRGaWVsZHNTZXJ2aWNlfSBmcm9tICcuLi8uLi9jaGFuZ2VkLWZpZWxkcy9zZXJ2aWNlcy9jaGFuZ2VkLWZpZWxkcy5zZXJ2aWNlJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkc01hcH0gZnJvbSAnLi4vLi4vZXZlbnQvc2VydmljZXMvaW50ZXJmYWNlcy9jaGFuZ2VkLWZpZWxkcy1tYXAnO1xuaW1wb3J0IHtUYXNrRmllbGRzfSBmcm9tICcuLi8uLi90YXNrLWNvbnRlbnQvbW9kZWwvdGFzay1maWVsZHMnO1xuXG4vKipcbiAqIEhhbmRsZXMgdGhlIGxvYWRpbmcgYW5kIHVwZGF0aW5nIG9mIGRhdGEgZmllbGRzIGFuZCBiZWhhdmlvdXIgb2ZcbiAqIGEgc2luZ2xlIFRhc2sgb2JqZWN0IG1hbmFnZWQgYnkgYSB7QGxpbmsgVGFza0NvbnRlbnRTZXJ2aWNlfSBpbnN0YW5jZS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhc2tEYXRhU2VydmljZSBleHRlbmRzIFRhc2tIYW5kbGluZ1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgcHJvdGVjdGVkIF91cGRhdGVTdWNjZXNzJDogU3ViamVjdDxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2RhdGFSZWxvYWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfdGFza1N0YXRlOiBUYXNrUmVxdWVzdFN0YXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3NuYWNrQmFyOiBTbmFja0JhclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90YXNrUmVzb3VyY2VTZXJ2aWNlOiBUYXNrUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfZmllbGRDb252ZXJ0ZXJTZXJ2aWNlOiBGaWVsZENvbnZlcnRlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90YXNrRXZlbnQ6IFRhc2tFdmVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQEluamVjdChOQUVfVEFTS19PUEVSQVRJT05TKSBwcm90ZWN0ZWQgX3Rhc2tPcGVyYXRpb25zOiBUYXNrT3BlcmF0aW9ucyxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBfc2VsZWN0ZWRDYXNlU2VydmljZTogU2VsZWN0ZWRDYXNlU2VydmljZSxcbiAgICAgICAgICAgICAgICBfdGFza0NvbnRlbnRTZXJ2aWNlOiBUYXNrQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hZnRlckFjdGlvbkZhY3Rvcnk6IENhbGxDaGFpblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9ldmVudFF1ZXVlOiBFdmVudFF1ZXVlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzZXJDb21wYXJhdG9yOiBVc2VyQ29tcGFyYXRvclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9ldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2NoYW5nZWRGaWVsZHNTZXJ2aWNlOiBDaGFuZ2VkRmllbGRzU2VydmljZSkge1xuICAgICAgICBzdXBlcihfdGFza0NvbnRlbnRTZXJ2aWNlLCBfc2VsZWN0ZWRDYXNlU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVN1Y2Nlc3MkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICAgICAgdGhpcy5fZGF0YVJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRGF0YVJlbG9hZFJlcXVlc3QkLnN1YnNjcmliZShxdWV1ZWRGcm9udGVuZEFjdGlvbiA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVUYXNrRGF0YUZpZWxkcyh0aGlzLl9hZnRlckFjdGlvbkZhY3RvcnkuY3JlYXRlKHN1Y2Nlc3MgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIHF1ZXVlZEZyb250ZW5kQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS5wZXJmb3JtRnJvbnRlbmRBY3Rpb24ocXVldWVkRnJvbnRlbmRBY3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVN1Y2Nlc3MkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2RhdGFSZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNUYXNrUHJlc2VudCgpICYmIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwICYmIGdyb3VwLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICBncm91cC5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiBmaWVsZC5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBiYWNrZW5kXG4gICAgICogY2FsbHMgaW4gW3VwZGF0ZVRhc2tEYXRhRmllbGRzXXtAbGluayBUYXNrRGF0YVNlcnZpY2UjdXBkYXRlVGFza0RhdGFGaWVsZHN9IG1ldGhvZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHVwZGF0ZVN1Y2Nlc3MkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlU3VjY2VzcyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgdGhlIERhdGEgRmllbGRzIG9mIGFuIHVuaW5pdGlhbGl6ZWQgVGFzayBmcm9tIGJhY2tlbmRcbiAgICAgKiBhbmQgcG9wdWxhdGVzIHRoZSBUYXNrIG1hbmFnZWQgYnkge0BsaW5rIFRhc2tDb250ZW50U2VydmljZX0gd2l0aCB0aGUgYXBwcm9wcmlhdGUgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEJld2FyZSB0aGF0IGlmIHRoZSBUYXNrIGhhcyBzb21lIGRhdGEgYWxyZWFkeSBsb2FkZWQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmdcbiAgICAgKiBhbmQgb25seSBwYXNzZXMgYHRydWVgIHRvIHRoZSBgYWZ0ZXJBY3Rpb25gIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogSWYgdGhlIHRhc2sgaGVsZCB3aXRoaW4gdGhlIHtAbGluayBUYXNrQ29udGVudFNlcnZpY2V9IGNoYW5nZXMgYmVmb3JlIGEgcmVzcG9uc2UgaXMgcmVjZWl2ZWQsIHRoZSByZXNwb25zZSB3aWxsIGJlIGlnbm9yZWRcbiAgICAgKiBhbmQgdGhlIGBhZnRlckFjdGlvbmAgd2lsbCBub3QgYmUgZXhlY3V0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gaWYgdGhlIHJlcXVlc3QgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBlbWl0cyBgdHJ1ZWAgaW50byB0aGUgU3ViamVjdCwgb3RoZXJ3aXNlIGBmYWxzZWAgd2lsbCBiZSBlbWl0dGVkXG4gICAgICogQHBhcmFtIGZvcmNlIHNldCB0byBgdHJ1ZWAgaWYgeW91IG5lZWQgZm9yY2UgcmVsb2FkIG9mIGFsbCB0YXNrIGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZVRhc2tEYXRhRmllbGRzKGFmdGVyQWN0aW9uOiBBZnRlckFjdGlvbiA9IG5ldyBBZnRlckFjdGlvbigpLCBmb3JjZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2V2ZW50UXVldWUuc2NoZWR1bGVFdmVudChuZXcgUXVldWVkRXZlbnQoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNUYXNrUHJlc2VudCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRFdmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtR2V0RGF0YVJlcXVlc3QoYWZ0ZXJBY3Rpb24sIGZvcmNlLCBuZXh0RXZlbnQpO1xuICAgICAgICAgICAgfSwgbmV4dEV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgYGdldERhdGFgIHJlcXVlc3Qgb24gdGhlIHRhc2sgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUgYHRhc2tDb250ZW50YCBzZXJ2aWNlXG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBmb3JjZSBzZXQgdG8gYHRydWVgIGlmIHlvdSBuZWVkIGZvcmNlIHJlbG9hZCBvZiBhbGwgdGFzayBkYXRhXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwZXJmb3JtR2V0RGF0YVJlcXVlc3QoYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLCBmb3JjZTogYm9vbGVhbiwgbmV4dEV2ZW50OiBBZnRlckFjdGlvbikge1xuICAgICAgICBpZiAodGhpcy5fc2FmZVRhc2suZGF0YVNpemUgPiAwICYmICFmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy5zZW5kTm90aWZpY2F0aW9uKFRhc2tFdmVudC5HRVRfREFUQSwgdHJ1ZSk7XG4gICAgICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGUubmV4dCh0aGlzLl9zYWZlVGFzay5kYXRhR3JvdXBzKTtcbiAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy5fc2FmZVRhc2suZGF0YVNpemUgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ290dGVuVGFza0lkID0gdGhpcy5fc2FmZVRhc2suc3RyaW5nSWQ7XG4gICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdGFydExvYWRpbmcoZ290dGVuVGFza0lkKTtcblxuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmdldERhdGEoZ290dGVuVGFza0lkKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkYXRhR3JvdXBzID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxHZXREYXRhUmVxdWVzdChnb3R0ZW5UYXNrSWQsIGRhdGFHcm91cHMsIGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NFcnJvbmVvdXNHZXREYXRhUmVxdWVzdChnb3R0ZW5UYXNrSWQsIGVycm9yLCBhZnRlckFjdGlvbiwgbmV4dEV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGEgc3VjY2Vzc2Z1bCBvdXRjb21lIG9mIGEgYGdldERhdGFgIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gZ290dGVuVGFza0lkIHRoZSBJZCBvZiB0aGUgdGFzayB3aG9zZSBkYXRhIHdhcyByZXF1ZXN0ZWRcbiAgICAgKiBAcGFyYW0gZGF0YUdyb3VwcyB0aGUgcmV0dXJuZWQgZGF0YSBncm91cHMgb2YgdGhlIHRhc2tcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gdGhlIGFjdGlvbiB0aGF0IHNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgcHJvY2Vzc2VkXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzU3VjY2Vzc2Z1bEdldERhdGFSZXF1ZXN0KGdvdHRlblRhc2tJZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFHcm91cHM6IEFycmF5PERhdGFHcm91cD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFdmVudDogQWZ0ZXJBY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVGFza1JlbGV2YW50KGdvdHRlblRhc2tJZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZygnY3VycmVudCB0YXNrIGNoYW5nZWQgYmVmb3JlIHRoZSBnZXQgZGF0YSByZXNwb25zZSBjb3VsZCBiZSByZWNlaXZlZCwgZGlzY2FyZGluZy4uLicpO1xuICAgICAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BMb2FkaW5nKGdvdHRlblRhc2tJZCk7XG4gICAgICAgICAgICBhZnRlckFjdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS5yZWZlcmVuY2VkVGFza0FuZENhc2VJZHMgPSB7fTtcbiAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tGaWVsZHNJbmRleCA9IHt9O1xuXG4gICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMgPSBkYXRhR3JvdXBzO1xuICAgICAgICBpZiAoZGF0YUdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5pbmZvKCdUYXNrIGhhcyBubyBkYXRhICcgKyB0aGlzLl9zYWZlVGFzayk7XG4gICAgICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhU2l6ZSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW3RoaXMuX3NhZmVUYXNrLmNhc2VJZF0gPSBbdGhpcy5fc2FmZVRhc2suc3RyaW5nSWRdO1xuICAgICAgICAgICAgZGF0YUdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhR3JvdXBQYXJlbnRDYXNlSWQ6IHN0cmluZyA9IGdyb3VwLnBhcmVudENhc2VJZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5fc2FmZVRhc2suY2FzZUlkIDogZ3JvdXAucGFyZW50Q2FzZUlkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFRhc2tJZDogc3RyaW5nID0gZ3JvdXAucGFyZW50VGFza0lkID09PSB1bmRlZmluZWQgPyB0aGlzLl9zYWZlVGFzay5zdHJpbmdJZCA6IGdyb3VwLnBhcmVudFRhc2tJZDtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRUcmFuc2l0aW9uSWQ6IHN0cmluZyA9IGdyb3VwLnBhcmVudFRyYW5zaXRpb25JZCA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2FmZVRhc2sudHJhbnNpdGlvbklkIDogZ3JvdXAucGFyZW50VHJhbnNpdGlvbklkO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhR3JvdXBQYXJlbnRDYXNlSWQgIT09IHRoaXMuX3NhZmVUYXNrLmNhc2VJZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3Rhc2tDb250ZW50U2VydmljZS5yZWZlcmVuY2VkVGFza0FuZENhc2VJZHNbZGF0YUdyb3VwUGFyZW50Q2FzZUlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnJlZmVyZW5jZWRUYXNrQW5kQ2FzZUlkc1tkYXRhR3JvdXBQYXJlbnRDYXNlSWRdID0gW2dyb3VwLnBhcmVudFRhc2tJZF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW2RhdGFHcm91cFBhcmVudENhc2VJZF0ucHVzaChncm91cC5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhR3JvdXBQYXJlbnRDYXNlSWQgPT09IHRoaXMuX3NhZmVUYXNrLmNhc2VJZFxuICAgICAgICAgICAgICAgICAgICAmJiBwYXJlbnRUYXNrSWQgIT09IHRoaXMuX3NhZmVUYXNrLnN0cmluZ0lkXG4gICAgICAgICAgICAgICAgICAgICYmICF0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW2RhdGFHcm91cFBhcmVudENhc2VJZF0uaW5jbHVkZXMocGFyZW50VGFza0lkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW2RhdGFHcm91cFBhcmVudENhc2VJZF0ucHVzaChncm91cC5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZmllbGRzLmxlbmd0aCA+IDAgJiYgIXRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudGFza0ZpZWxkc0luZGV4W3BhcmVudFRhc2tJZF0gPSB7fSBhcyBUYXNrRmllbGRzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZmllbGRzLmxlbmd0aCA+IDAgJiYgIXRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tGaWVsZHNJbmRleFtwYXJlbnRUYXNrSWRdLmZpZWxkcyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncm91cC5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXS50cmFuc2l0aW9uSWQgPSBwYXJlbnRUcmFuc2l0aW9uSWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXS5maWVsZHNbZmllbGQuc3RyaW5nSWRdID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlQ2hhbmdlcygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy53YXNGaWVsZFVwZGF0ZWQoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkIGluc3RhbmNlb2YgRHluYW1pY0VudW1lcmF0aW9uRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGFza0RhdGFGaWVsZHModGhpcy5fYWZ0ZXJBY3Rpb25GYWN0b3J5LmNyZWF0ZShib29sID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGFza0RhdGFGaWVsZHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBGaWxlRmllbGQgfHwgZmllbGQgaW5zdGFuY2VvZiBGaWxlTGlzdEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5jaGFuZ2VkRmllbGRzJC5zdWJzY3JpYmUoKGNoYW5nZTogQ2hhbmdlZEZpZWxkc01hcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRGaWVsZHNTZXJ2aWNlLmVtaXRDaGFuZ2VkRmllbGRzKGNoYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFTaXplID09PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhU2l6ZSA9IGdyb3VwLmZpZWxkcy5sZW5ndGggOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhU2l6ZSArPSBncm91cC5maWVsZHMubGVuZ3RoO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BMb2FkaW5nKGdvdHRlblRhc2tJZCk7XG4gICAgICAgIHRoaXMuc2VuZE5vdGlmaWNhdGlvbihUYXNrRXZlbnQuR0VUX0RBVEEsIHRydWUpO1xuICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKHRydWUpO1xuICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGUubmV4dCh0aGlzLl9zYWZlVGFzay5kYXRhR3JvdXBzKTtcbiAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGVDb3VudGVyLm5leHQodGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGVDb3VudGVyLmdldFZhbHVlKCkgKyAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzZXMgYW4gZXJyb25lb3VzIG91dGNvbWUgb2YgYSBgZ2V0RGF0YWAgcmVxdWVzdFxuICAgICAqIEBwYXJhbSBnb3R0ZW5UYXNrSWQgdGhlIElkIG9mIHRoZSB0YXNrIHdob3NlIGRhdGEgd2FzIHJlcXVlc3RlZFxuICAgICAqIEBwYXJhbSBlcnJvciB0aGUgcmV0dXJuZWQgZXJyb3JcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gdGhlIGFjdGlvbiB0aGF0IHNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgcHJvY2Vzc2VkXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzRXJyb25lb3VzR2V0RGF0YVJlcXVlc3QoZ290dGVuVGFza0lkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RXZlbnQ6IEFmdGVyQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wTG9hZGluZyhnb3R0ZW5UYXNrSWQpO1xuICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ2dldHRpbmcgdGFzayBkYXRhIGZhaWxlZCcsIGVycm9yKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNUYXNrUmVsZXZhbnQoZ290dGVuVGFza0lkKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdjdXJyZW50IHRhc2sgY2hhbmdlZCBiZWZvcmUgdGhlIGdldCBkYXRhIGVycm9yIGNvdWxkIGJlIHJlY2VpdmVkJyk7XG4gICAgICAgICAgICBhZnRlckFjdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwICYmIGVycm9yLmVycm9yLm1lc3NhZ2UgJiYgZXJyb3IuZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKCdDb3VsZCBub3QgZmluZCB0YXNrIHdpdGggaWQnKSkge1xuICAgICAgICAgICAgdGhpcy5fc25hY2tCYXIub3Blbldhcm5pbmdTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgndGFza3Muc25hY2tiYXIubm9Mb25nZXJFeGlzdHMnKSk7XG4gICAgICAgICAgICB0aGlzLl90YXNrT3BlcmF0aW9ucy5yZWxvYWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW5FcnJvclNuYWNrQmFyKGAke3RoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5ub0dyb3VwJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrLnRpdGxlfSAke3RoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5mYWlsZWRUb0xvYWQnKX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbmROb3RpZmljYXRpb24oVGFza0V2ZW50LkdFVF9EQVRBLCBmYWxzZSk7XG4gICAgICAgIGFmdGVyQWN0aW9uLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGVjdHMgYWxsIGNoYW5nZWQgZGF0YSBmaWVsZHMgYW5kIG5vdGlmaWVzIHRoZSBiYWNrZW5kIG9mIHRoZSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogSWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCBjbGVhcnMgdGhlIFtjaGFuZ2VkXXtAbGluayBEYXRhRmllbGQjY2hhbmdlZH0gZmxhZyBvbiBhbGwgZGF0YSBmaWVsZHMgdGhhdCB3ZXJlIGEgcGFydCBvZiB0aGUgcmVxdWVzdFxuICAgICAqIGFuZCBlbWl0cyBhIHtAbGluayBDaGFuZ2VkRmllbGRzfSBvYmplY3QgaW50byB0aGlzIG9iamVjdCdzIFtjaGFuZ2VkRmllbGRzJF17QGxpbmsgVGFza0RhdGFTZXJ2aWNlI2NoYW5nZWRGaWVsZHMkfSBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBJZiB0aGUgdGFzayBoZWxkIHdpdGhpbiB0aGUge0BsaW5rIFRhc2tDb250ZW50U2VydmljZX0gY2hhbmdlcyBiZWZvcmUgYSByZXNwb25zZSBpcyByZWNlaXZlZCwgdGhlIHJlc3BvbnNlIHdpbGwgYmUgaWdub3JlZFxuICAgICAqIGFuZCB0aGUgYGFmdGVyQWN0aW9uYCB3aWxsIG5vdCBiZSBleGVjdXRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhZnRlckFjdGlvbiBpZiB0aGUgcmVxdWVzdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGVtaXRzIGB0cnVlYCBpbnRvIHRoZSBTdWJqZWN0LCBvdGhlcndpc2UgYGZhbHNlYCB3aWxsIGJlIGVtaXR0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlVGFza0RhdGFGaWVsZHMoYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uID0gbmV3IEFmdGVyQWN0aW9uKCkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVGFza1ByZXNlbnQoKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdUYXNrIGlzIG5vdCBwcmVzZW50LiBVcGRhdGUgcmVxdWVzdCBpZ25vcmVkLicpO1xuICAgICAgICAgICAgYWZ0ZXJBY3Rpb24ucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2FmZVRhc2sudXNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ2N1cnJlbnQgdGFzayBpcyBub3QgYXNzaWduZWQuLi4nKTtcbiAgICAgICAgICAgIGFmdGVyQWN0aW9uLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2V0VGFza0lkID0gdGhpcy5fc2FmZVRhc2suc3RyaW5nSWQ7XG5cbiAgICAgICAgaWYgKHRoaXMuX3NhZmVUYXNrLmRhdGFTaXplIDw9IDApIHtcbiAgICAgICAgICAgIGFmdGVyQWN0aW9uLnJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IHRoaXMuY3JlYXRlVXBkYXRlUmVxdWVzdENvbnRleHQoKTtcblxuICAgICAgICB0aGlzLl9ldmVudFF1ZXVlLnNjaGVkdWxlRXZlbnQobmV3IFF1ZXVlZEV2ZW50KFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5pc1NldERhdGFSZXF1ZXN0U3RpbGxWYWxpZChyZXF1ZXN0Q29udGV4dC5ib2R5KSxcbiAgICAgICAgICAgIG5leHRFdmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtU2V0RGF0YVJlcXVlc3Qoc2V0VGFza0lkLCByZXF1ZXN0Q29udGV4dC5ib2R5LCBhZnRlckFjdGlvbiwgbmV4dEV2ZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmV2ZXJ0U2V0RGF0YVJlcXVlc3QocmVxdWVzdENvbnRleHQpO1xuICAgICAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEdvZXMgb3ZlciBhbGwgdGhlIGRhdGEgZmllbGRzIGluIHRoZSBtYW5hZ2VkIFRhc2sgYW5kIGlmIHRoZXkgYXJlIHZhbGlkIGFuZCBjaGFuZ2VkIGFkZHMgdGhlbSB0byB0aGUgc2V0IGRhdGEgcmVxdWVzdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVVcGRhdGVSZXF1ZXN0Q29udGV4dCgpOiBUYXNrU2V0RGF0YVJlcXVlc3RDb250ZXh0IHtcbiAgICAgICAgY29uc3QgY29udGV4dDogVGFza1NldERhdGFSZXF1ZXN0Q29udGV4dCA9IHtcbiAgICAgICAgICAgIGJvZHk6IHt9LFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZXM6IHt9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnRleHQuYm9keVt0aGlzLl90YXNrLnN0cmluZ0lkXSA9IHt9O1xuICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhR3JvdXBzLmZpbHRlcihkYXRhR3JvdXAgPT4gZGF0YUdyb3VwLnBhcmVudFRhc2tJZCA9PT0gdW5kZWZpbmVkKS5mb3JFYWNoKGRhdGFHcm91cCA9PiB7XG4gICAgICAgICAgICBkYXRhR3JvdXAuZmllbGRzLmZpbHRlcihmaWVsZCA9PiB0aGlzLndhc0ZpZWxkVXBkYXRlZChmaWVsZCkpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmllbGRUb1NldERhdGFSZXF1ZXN0Qm9keShjb250ZXh0LCB0aGlzLl90YXNrLnN0cmluZ0lkLCBmaWVsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMuZmlsdGVyKGRhdGFHcm91cCA9PiBkYXRhR3JvdXAucGFyZW50VGFza0lkICE9PSB1bmRlZmluZWQpLmZvckVhY2goZGF0YUdyb3VwID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhR3JvdXAuZmllbGRzLnNvbWUoZmllbGQgPT4gdGhpcy53YXNGaWVsZFVwZGF0ZWQoZmllbGQpKSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuYm9keVtkYXRhR3JvdXAucGFyZW50VGFza0lkXSA9IHt9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhR3JvdXAuZmllbGRzLmZpbHRlcihmaWVsZCA9PiB0aGlzLndhc0ZpZWxkVXBkYXRlZChmaWVsZCkpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmllbGRUb1NldERhdGFSZXF1ZXN0Qm9keShjb250ZXh0LCBkYXRhR3JvdXAucGFyZW50VGFza0lkLCBmaWVsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhZGRGaWVsZFRvU2V0RGF0YVJlcXVlc3RCb2R5KGNvbnRleHQ6IFRhc2tTZXREYXRhUmVxdWVzdENvbnRleHQsIHRhc2tJZDogc3RyaW5nLCBmaWVsZDogRGF0YUZpZWxkPGFueT4pOiB2b2lkIHtcbiAgICAgICAgY29udGV4dC5ib2R5W3Rhc2tJZF1bZmllbGQuc3RyaW5nSWRdID0ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy5fZmllbGRDb252ZXJ0ZXJTZXJ2aWNlLnJlc29sdmVUeXBlKGZpZWxkKSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9maWVsZENvbnZlcnRlclNlcnZpY2UuZm9ybWF0VmFsdWVGb3JCYWNrZW5kKGZpZWxkLCBmaWVsZC52YWx1ZSlcbiAgICAgICAgfTtcbiAgICAgICAgY29udGV4dC5wcmV2aW91c1ZhbHVlc1tmaWVsZC5zdHJpbmdJZF0gPSBmaWVsZC5wcmV2aW91c1ZhbHVlO1xuICAgICAgICBmaWVsZC5jaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGZpZWxkIHRoZSBjaGVja2VkIGZpZWxkXG4gICAgICogQHJldHVybnMgd2hldGhlciB0aGUgZmllbGQgd2FzIHVwZGF0ZWQgb24gZnJvbnRlbmQgYW5kIHRodXMgdGhlIGJhY2tlbmQgc2hvdWxkIGJlIG5vdGlmaWVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHdhc0ZpZWxkVXBkYXRlZChmaWVsZDogRGF0YUZpZWxkPHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmaWVsZC5pbml0aWFsaXplZCAmJiBmaWVsZC5jaGFuZ2VkICYmIChmaWVsZC52YWxpZCB8fCBmaWVsZC5zZW5kSW52YWxpZFZhbHVlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHJlcXVlc3QgY291bGQgc3RpbGwgYmUgcGVyZm9ybWVkIGJ5IHRoZSBsb2dnZWQgdXNlclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzU2V0RGF0YVJlcXVlc3RTdGlsbFZhbGlkKHJlcXVlc3Q6IFRhc2tTZXREYXRhUmVxdWVzdEJvZHkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVGFza1ByZXNlbnQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zYWZlVGFzay51c2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX3VzZXJDb21wYXJhdG9yLmNvbXBhcmVVc2Vycyh0aGlzLl9zYWZlVGFzay51c2VyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhc2tJZHNJblJlcXVlc3Q6IEFycmF5PHN0cmluZz4gPSBPYmplY3Qua2V5cyhyZXF1ZXN0KTtcbiAgICAgICAgZm9yIChjb25zdCB0YXNrSWQgb2YgdGFza0lkc0luUmVxdWVzdCkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudGFza0ZpZWxkc0luZGV4KS5pbmNsdWRlcyh0YXNrSWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGBUYXNrIGlkICR7dGFza0lkfSBpcyBub3QgcHJlc2VudCBpbiB0YXNrIGZpZWxkcyBpbmRleGApO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkSWRzT2ZSZXF1ZXN0ID0gT2JqZWN0LmtleXMocmVxdWVzdFt0YXNrSWRdKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRJZCBvZiBmaWVsZElkc09mUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tGaWVsZHNJbmRleFt0YXNrSWRdLmZpZWxkc1tmaWVsZElkXTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGUuIERhdGFmaWVsZCAke2ZpZWxkSWR9IG9mIHRhc2sgJHt0YXNrSWRcbiAgICAgICAgICAgICAgICAgICAgfSBpbiBzZXREYXRhIHJlcXVlc3QgaXMgbm90IHByZXNlbnQgaW4gdGhlIHRhc2suYCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFmaWVsZC5iZWhhdmlvci5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoYEZpZWxkICR7ZmllbGRJZH0sIHdhcyBtZWFudCB0byBiZSBzZXQgdG9cbiAgICAgICAgICAgICAgICAgICAgJHtKU09OLnN0cmluZ2lmeShyZXF1ZXN0W3Rhc2tJZF1bZmllbGRJZF0pXG4gICAgICAgICAgICAgICAgICAgIH0sIGJ1dCBpcyBubyBsb25lciBlZGl0YWJsZS5gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIGBzZXREYXRhYCByZXF1ZXN0IG9uIHRoZSB0YXNrIGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlIGB0YXNrQ29udGVudGAgc2VydmljZVxuICAgICAqIEBwYXJhbSBzZXRUYXNrSWQgaWQgb2YgdGhlIHRhc2tcbiAgICAgKiBAcGFyYW0gYm9keSBjb250ZW50IG9mIHRoZSBgc2V0RGF0YWAgcmVxdWVzdFxuICAgICAqIEBwYXJhbSBhZnRlckFjdGlvbiB0aGUgYWN0aW9uIHRoYXQgc2hvdWxkIGJlIHBlcmZvcm1lZCBhZnRlciB0aGUgcmVxdWVzdCBpcyBwcm9jZXNzZWRcbiAgICAgKiBAcGFyYW0gbmV4dEV2ZW50IGluZGljYXRlcyB0byB0aGUgZXZlbnQgcXVldWUgdGhhdCB0aGUgbmV4dCBldmVudCBjYW4gYmUgcHJvY2Vzc2VkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHBlcmZvcm1TZXREYXRhUmVxdWVzdChzZXRUYXNrSWQ6IHN0cmluZywgYm9keTogVGFza1NldERhdGFSZXF1ZXN0Qm9keSwgYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLCBuZXh0RXZlbnQ6IEFmdGVyQWN0aW9uKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhib2R5KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZE5vdGlmaWNhdGlvbihUYXNrRXZlbnQuU0VUX0RBVEEsIHRydWUpO1xuICAgICAgICAgICAgYWZ0ZXJBY3Rpb24ucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0YXJ0TG9hZGluZyhzZXRUYXNrSWQpO1xuICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RhcnRVcGRhdGluZyhzZXRUYXNrSWQpO1xuXG4gICAgICAgIHRoaXMuX3Rhc2tSZXNvdXJjZVNlcnZpY2Uuc2V0RGF0YSh0aGlzLl9zYWZlVGFzay5zdHJpbmdJZCwgYm9keSkucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxTZXREYXRhUmVxdWVzdChzZXRUYXNrSWQsIHJlc3BvbnNlLm91dGNvbWUsIGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQsIGJvZHkpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0Vycm9uZW91c1NldERhdGFSZXF1ZXN0KHNldFRhc2tJZCwgZXJyb3IsIGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQsIGJvZHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGEgc3VjY2Vzc2Z1bCBvdXRjb21lIG9mIGEgYHNldERhdGFgIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gc2V0VGFza0lkIHRoZSBJZCBvZiB0aGUgdGFzayB3aG9zZSBkYXRhIHdhcyBzZXRcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2UgdGhlIHJlc3VsdGluZyBFdmVudCBvdXRjb21lIG9mIHRoZSBzZXQgZGF0YSByZXF1ZXN0XG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBuZXh0RXZlbnQgaW5kaWNhdGVzIHRvIHRoZSBldmVudCBxdWV1ZSB0aGF0IHRoZSBuZXh0IGV2ZW50IGNhbiBiZSBwcm9jZXNzZWRcbiAgICAgKiBAcGFyYW0gYm9keSBob2xkIHRoZSBkYXRhIHRoYXQgd2FzIHNlbnQgaW4gcmVxdWVzdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzU3VjY2Vzc2Z1bFNldERhdGFSZXF1ZXN0KHNldFRhc2tJZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiBFdmVudE91dGNvbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFdmVudDogQWZ0ZXJBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogVGFza1NldERhdGFSZXF1ZXN0Qm9keSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNUYXNrUmVsZXZhbnQoc2V0VGFza0lkKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdjdXJyZW50IHRhc2sgY2hhbmdlZCBiZWZvcmUgdGhlIHNldCBkYXRhIHJlc3BvbnNlIGNvdWxkIGJlIHJlY2VpdmVkLCBkaXNjYXJkaW5nLi4uJyk7XG4gICAgICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RvcExvYWRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wVXBkYXRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgICAgIGFmdGVyQWN0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGFuZ2VkRmllbGRzTWFwOiBDaGFuZ2VkRmllbGRzTWFwID0gdGhpcy5fZXZlbnRTZXJ2aWNlLnBhcnNlQ2hhbmdlZEZpZWxkc0Zyb21PdXRjb21lVHJlZShyZXNwb25zZSk7XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWRGaWVsZHNNYXApLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRGaWVsZHNTZXJ2aWNlLmVtaXRDaGFuZ2VkRmllbGRzKGNoYW5nZWRGaWVsZHNNYXApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJXYWl0aW5nRm9yUmVzcG9uc2VGbGFnKGJvZHkpO1xuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuU3VjY2Vzc1NuYWNrQmFyKCEhcmVzcG9uc2UubWVzc2FnZSA/IHJlc3BvbnNlLm1lc3NhZ2UgOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgndGFza3Muc25hY2tiYXIuZGF0YVNhdmVkJykpO1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlSW5mbyhhZnRlckFjdGlvbiwgdHJ1ZSwgc2V0VGFza0lkKTtcbiAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGFuIGVycm9uZW91cyBvdXRjb21lIG9mIGEgYHNldERhdGFgIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gc2V0VGFza0lkIHRoZSBJZCBvZiB0aGUgdGFzayB3aG9zZSBkYXRhIHdhcyBzZXRcbiAgICAgKiBAcGFyYW0gZXJyb3IgdGhlIHJldHVybmVkIGVycm9yXG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBuZXh0RXZlbnQgaW5kaWNhdGVzIHRvIHRoZSBldmVudCBxdWV1ZSB0aGF0IHRoZSBuZXh0IGV2ZW50IGNhbiBiZSBwcm9jZXNzZWRcbiAgICAgKiBAcGFyYW0gYm9keSBob2xkIHRoZSBkYXRhIHRoYXQgd2FzIHNlbnQgaW4gcmVxdWVzdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzRXJyb25lb3VzU2V0RGF0YVJlcXVlc3Qoc2V0VGFza0lkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RXZlbnQ6IEFmdGVyQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogVGFza1NldERhdGFSZXF1ZXN0Qm9keSkge1xuICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ3NldHRpbmcgdGFzayBkYXRhIGZhaWxlZCcsIGVycm9yKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNUYXNrUmVsZXZhbnQoc2V0VGFza0lkKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdjdXJyZW50IHRhc2sgY2hhbmdlZCBiZWZvcmUgdGhlIGdldCBkYXRhIGVycm9yIGNvdWxkIGJlIHJlY2VpdmVkJyk7XG4gICAgICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RvcExvYWRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wVXBkYXRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgICAgIGFmdGVyQWN0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJldmVydFRvUHJldmlvdXNWYWx1ZSgpO1xuICAgICAgICB0aGlzLmNsZWFyV2FpdGluZ0ZvclJlc3BvbnNlRmxhZyhib2R5KTtcbiAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbkVycm9yU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3Rhc2tzLnNuYWNrYmFyLmZhaWxlZFNhdmUnKSk7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGVJbmZvKGFmdGVyQWN0aW9uLCBmYWxzZSwgc2V0VGFza0lkKTtcbiAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUoZmFsc2UpO1xuICAgICAgICB0aGlzLl90YXNrT3BlcmF0aW9ucy5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXZlcnRzIHRoZSBlZmZlY3RzIG9mIGEgZmFpbGVkIGBzZXREYXRhYCByZXF1ZXN0LCBzbyB0aGF0IHRoZSB1c2VyIHNlZXMgY3VycmVudCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIGNvbnRleHQgdGhlIGNvbnRleHQgb2YgdGhlIGZhaWxlZCByZXF1ZXN0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJldmVydFNldERhdGFSZXF1ZXN0KGNvbnRleHQ6IFRhc2tTZXREYXRhUmVxdWVzdENvbnRleHQpIHtcbiAgICAgICAgLy8gdGhpcyBpdGVyYXRpb24gY291bGQgYmUgaW1wcm92ZWQgaWYgd2UgaGFkIGEgbWFwIG9mIGFsbCB0aGUgZGF0YSBmaWVsZHMgaW4gYSB0YXNrXG4gICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSBPYmplY3Qua2V5cyhjb250ZXh0LmJvZHkpLmxlbmd0aDtcbiAgICAgICAgbGV0IGZvdW5kQ291bnQgPSAwO1xuXG4gICAgICAgIGZvciAoY29uc3QgZGF0YWdyb3VwIG9mIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZGF0YWdyb3VwLmZpZWxkcykge1xuICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5ib2R5W2ZpZWxkLnN0cmluZ0lkXSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21wYXJlQmFja2VuZEZvcm1hdHRlZEZpZWxkVmFsdWVzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWVsZENvbnZlcnRlclNlcnZpY2UuZm9ybWF0VmFsdWVGb3JCYWNrZW5kKGZpZWxkLCBmaWVsZC52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYm9keVtmaWVsZC5zdHJpbmdJZF0udmFsdWUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlV2l0aG91dENoYW5nZShjb250ZXh0LnByZXZpb3VzVmFsdWVzW2ZpZWxkLnN0cmluZ0lkXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm91bmRDb3VudCsrO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZENvdW50ID09PSB0b3RhbENvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2cuZXJyb3IoYEludmFsaWQgc3RhdGUuIFNvbWUgZGF0YSBmaWVsZHMgb2YgdGFzayAke3RoaXMuX3NhZmVUYXNrLnN0cmluZ0lkfSwgYXJlIG5vIGxvbmdlciBwcmVzZW50IGluIGl0IWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBhcmVzIHRoZSB2YWx1ZXMgdGhhdCBhcmUgaW4gdGhlIGJhY2tlbmQgY29tcGF0aWJsZSBmb3JtYXQgYXMgZ2l2ZW4gYnkgdGhlIHtAbGluayBGaWVsZENvbnZlcnRlclNlcnZpY2V9XG4gICAgICogYW5kIGRldGVybWluZXMgd2hldGhlciB0aGV5IGFyZSB0aGUgc2FtZSB2YWx1ZSwgb3Igbm90LlxuICAgICAqIEBwYXJhbSBjdXJyZW50IHRoZSBjdXJyZW50IHZhbHVlIChjYW4gYWxzbyBiZSBjYWxsZWQgYHZhbHVlMWAgb3IgYGxlZnRgKVxuICAgICAqIEBwYXJhbSBvbGQgdGhlIG5ldyB2YWx1ZSAoY2FuIGFsc28gYmUgY2FsbGVkIGB2YWx1ZTJgIG9yIGByaWdodGApXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFuZCBgZmFsc2VgIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjb21wYXJlQmFja2VuZEZvcm1hdHRlZEZpZWxkVmFsdWVzKGN1cnJlbnQsIG9sZCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9sZCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnRzISBDYW5ub3QgY29tcGFyZSBhcnJheSB2YWx1ZSB0byBub24tYXJyYXkgdmFsdWUnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBvbGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudC5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBvbGRbaW5kZXhdID09PSB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VycmVudCA9PT0gb2xkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKlxuICAgICAqIHN0b3BzIGxvYWRpbmcgYW5kIHVwZGF0aW5nIGluZGljYXRvcnMsIGFuZCBlbWl0cyB0aGUgYHJlc3VsdGAgdmFsdWVcbiAgICAgKiB0byBib3RoIHRoZSBgYWZ0ZXJBY3Rpb25gIGFuZCBbX3VwZGF0ZVN1Y2Nlc3MkXXtAbGluayBUYXNrRGF0YVNlcnZpY2UjX3VwZGF0ZVN1Y2Nlc3MkfSBzdHJlYW1zLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBjYWxsIGNoYWluIHN0ZWFtIG9mIHRoZSB1cGRhdGUgZGF0YSBtZXRob2RcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHJlc3VsdCBvZiB0aGUgdXBkYXRlIGRhdGEgcmVxdWVzdFxuICAgICAqIEBwYXJhbSBzZXRUYXNrSWQgdGhlIElkIG9mIHRoZSB7QGxpbmsgVGFza30sIHdobydzIHN0YXRlIHNob3VsZCBiZSB1cGRhdGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVN0YXRlSW5mbyhhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24sIHJlc3VsdDogYm9vbGVhbiwgc2V0VGFza0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BMb2FkaW5nKHNldFRhc2tJZCk7XG4gICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wVXBkYXRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgaWYgKHRoaXMuX3VwZGF0ZVN1Y2Nlc3MkLm9ic2VydmVycy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVN1Y2Nlc3MkLm5leHQocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbmROb3RpZmljYXRpb24oVGFza0V2ZW50LlNFVF9EQVRBLCByZXN1bHQpO1xuICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHVibGlzaGVzIGEgZ2V0L3NldCBkYXRhIG5vdGlmaWNhdGlvbiB0byB0aGUge0BsaW5rIFRhc2tFdmVudFNlcnZpY2V9XG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0aGF0IG9jY3VycmVkIHRvIHRoZSB0YXNrXG4gICAgICogQHBhcmFtIHN1Y2Nlc3Mgd2hldGhlciB0aGUgZ2V0L3NldCBkYXRhIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBvciBub3RcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2VuZE5vdGlmaWNhdGlvbihldmVudDogVGFza0V2ZW50LkdFVF9EQVRBIHwgVGFza0V2ZW50LlNFVF9EQVRBLCBzdWNjZXNzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Rhc2tFdmVudC5wdWJsaXNoVGFza0V2ZW50KGNyZWF0ZVRhc2tFdmVudE5vdGlmaWNhdGlvbih0aGlzLl9zYWZlVGFzaywgZXZlbnQsIHN1Y2Nlc3MpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJldmVydFRvUHJldmlvdXNWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2FmZVRhc2suZGF0YUdyb3Vwcy5mb3JFYWNoKGRhdGFHcm91cCA9PiB7XG4gICAgICAgICAgICBkYXRhR3JvdXAuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbml0aWFsaXplZCAmJiBmaWVsZC52YWxpZCAmJiBmaWVsZC5jaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnJldmVydFRvUHJldmlvdXNWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyV2FpdGluZ0ZvclJlc3BvbnNlRmxhZyhib2R5OiBUYXNrU2V0RGF0YVJlcXVlc3RCb2R5KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGJvZHkpLmZvckVhY2godGFza0lkID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGJvZHlbdGFza0lkXSkuZm9yRWFjaChmaWVsZElkID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudGFza0ZpZWxkc0luZGV4W3Rhc2tJZF0uZmllbGRzW2ZpZWxkSWRdLndhaXRpbmdGb3JSZXNwb25zZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
604
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1kYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUvIiwic291cmNlcyI6WyJsaWIvdGFzay9zZXJ2aWNlcy90YXNrLWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBYSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFdkQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDcEYsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx1REFBdUQsQ0FBQztBQUMxRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxREFBcUQsQ0FBQztBQUUxRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUc5RSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDekUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RCxPQUFPLEVB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YTtnQkFDYixlQUFlO2dCQUNmLG1CQUFtQjtnQkFDbkIscUJBQXFCO2dCQVdyQixnQkFBZ0I7Z0RBbUNQLE1BQU0sU0FBQyxtQkFBbUI7Z0JBdkNuQyxtQkFBbUIsdUJBd0NWLFFBQVE7Z0JBckRqQixrQkFBa0I7Z0JBbUJsQixnQkFBZ0I7Z0JBSWhCLGlCQUFpQjtnQkFHakIscUJBQXFCO2dCQUdyQixZQUFZO2dCQUVaLG9CQUFvQjs7SUF5aUI1QixzQkFBQztDQUFBLEFBamlCRCxDQUNxQyxtQkFBbUIsR0FnaUJ2RDtTQWhpQlksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkc30gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2NoYW5nZWQtZmllbGRzJztcbmltcG9ydCB7VGFza0NvbnRlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi90YXNrLWNvbnRlbnQvc2VydmljZXMvdGFzay1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtUYXNrUmVxdWVzdFN0YXRlU2VydmljZX0gZnJvbSAnLi90YXNrLXJlcXVlc3Qtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtTbmFja0JhclNlcnZpY2V9IGZyb20gJy4uLy4uL3NuYWNrLWJhci9zZXJ2aWNlcy9zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvdGFzay1yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCB7RmllbGRDb252ZXJ0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi90YXNrLWNvbnRlbnQvc2VydmljZXMvZmllbGQtY29udmVydGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtUYXNrU2V0RGF0YVJlcXVlc3RCb2R5fSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL3Rhc2stc2V0LWRhdGEtcmVxdWVzdC1ib2R5JztcbmltcG9ydCB7VGFza0hhbmRsaW5nU2VydmljZX0gZnJvbSAnLi90YXNrLWhhbmRsaW5nLXNlcnZpY2UnO1xuaW1wb3J0IHtOQUVfVEFTS19PUEVSQVRJT05TfSBmcm9tICcuLi9tb2RlbHMvdGFzay1vcGVyYXRpb25zLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQge1Rhc2tPcGVyYXRpb25zfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Rhc2stb3BlcmF0aW9ucyc7XG5pbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0ZpbGVGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZmlsZS1maWVsZC9tb2RlbHMvZmlsZS1maWVsZCc7XG5pbXBvcnQge1NlbGVjdGVkQ2FzZVNlcnZpY2V9IGZyb20gJy4vc2VsZWN0ZWQtY2FzZS5zZXJ2aWNlJztcbmltcG9ydCB7RmlsZUxpc3RGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZmlsZS1saXN0LWZpZWxkL21vZGVscy9maWxlLWxpc3QtZmllbGQnO1xuaW1wb3J0IHtjcmVhdGVUYXNrRXZlbnROb3RpZmljYXRpb259IGZyb20gJy4uLy4uL3Rhc2stY29udGVudC9tb2RlbC90YXNrLWV2ZW50LW5vdGlmaWNhdGlvbic7XG5pbXBvcnQge1Rhc2tFdmVudH0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L21vZGVsL3Rhc2stZXZlbnQnO1xuaW1wb3J0IHtUYXNrRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi90YXNrLWNvbnRlbnQvc2VydmljZXMvdGFzay1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7RGF0YUZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9tb2RlbHMvYWJzdHJhY3QtZGF0YS1maWVsZCc7XG5pbXBvcnQge0NhbGxDaGFpblNlcnZpY2V9IGZyb20gJy4uLy4uL3V0aWxpdHkvY2FsbC1jaGFpbi9jYWxsLWNoYWluLnNlcnZpY2UnO1xuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0R5bmFtaWNFbnVtZXJhdGlvbkZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9lbnVtZXJhdGlvbi1maWVsZC9tb2RlbHMvZHluYW1pYy1lbnVtZXJhdGlvbi1maWVsZCc7XG5pbXBvcnQge0RhdGFHcm91cH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9kYXRhLWdyb3Vwcyc7XG5pbXBvcnQge0V2ZW50UXVldWVTZXJ2aWNlfSBmcm9tICcuLi8uLi9ldmVudC1xdWV1ZS9zZXJ2aWNlcy9ldmVudC1xdWV1ZS5zZXJ2aWNlJztcbmltcG9ydCB7UXVldWVkRXZlbnR9IGZyb20gJy4uLy4uL2V2ZW50LXF1ZXVlL21vZGVsL3F1ZXVlZC1ldmVudCc7XG5pbXBvcnQge0FmdGVyQWN0aW9ufSBmcm9tICcuLi8uLi91dGlsaXR5L2NhbGwtY2hhaW4vYWZ0ZXItYWN0aW9uJztcbmltcG9ydCB7VXNlckNvbXBhcmF0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi91c2VyL3NlcnZpY2VzL3VzZXItY29tcGFyYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7VGFza1NldERhdGFSZXF1ZXN0Q29udGV4dH0gZnJvbSAnLi4vbW9kZWxzL3Rhc2stc2V0LWRhdGEtcmVxdWVzdC1jb250ZXh0JztcbmltcG9ydCB7RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL21lc3NhZ2UtcmVzb3VyY2UnO1xuaW1wb3J0IHtFdmVudFNlcnZpY2V9IGZyb20gJy4uLy4uL2V2ZW50L3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtFdmVudE91dGNvbWV9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvZXZlbnQtb3V0Y29tZSc7XG5pbXBvcnQge0NoYW5nZWRGaWVsZHNTZXJ2aWNlfSBmcm9tICcuLi8uLi9jaGFuZ2VkLWZpZWxkcy9zZXJ2aWNlcy9jaGFuZ2VkLWZpZWxkcy5zZXJ2aWNlJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkc01hcH0gZnJvbSAnLi4vLi4vZXZlbnQvc2VydmljZXMvaW50ZXJmYWNlcy9jaGFuZ2VkLWZpZWxkcy1tYXAnO1xuaW1wb3J0IHtUYXNrRmllbGRzfSBmcm9tICcuLi8uLi90YXNrLWNvbnRlbnQvbW9kZWwvdGFzay1maWVsZHMnO1xuXG4vKipcbiAqIEhhbmRsZXMgdGhlIGxvYWRpbmcgYW5kIHVwZGF0aW5nIG9mIGRhdGEgZmllbGRzIGFuZCBiZWhhdmlvdXIgb2ZcbiAqIGEgc2luZ2xlIFRhc2sgb2JqZWN0IG1hbmFnZWQgYnkgYSB7QGxpbmsgVGFza0NvbnRlbnRTZXJ2aWNlfSBpbnN0YW5jZS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhc2tEYXRhU2VydmljZSBleHRlbmRzIFRhc2tIYW5kbGluZ1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgcHJvdGVjdGVkIF91cGRhdGVTdWNjZXNzJDogU3ViamVjdDxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2RhdGFSZWxvYWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfdGFza1N0YXRlOiBUYXNrUmVxdWVzdFN0YXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3NuYWNrQmFyOiBTbmFja0JhclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90YXNrUmVzb3VyY2VTZXJ2aWNlOiBUYXNrUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfZmllbGRDb252ZXJ0ZXJTZXJ2aWNlOiBGaWVsZENvbnZlcnRlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90YXNrRXZlbnQ6IFRhc2tFdmVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQEluamVjdChOQUVfVEFTS19PUEVSQVRJT05TKSBwcm90ZWN0ZWQgX3Rhc2tPcGVyYXRpb25zOiBUYXNrT3BlcmF0aW9ucyxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBfc2VsZWN0ZWRDYXNlU2VydmljZTogU2VsZWN0ZWRDYXNlU2VydmljZSxcbiAgICAgICAgICAgICAgICBfdGFza0NvbnRlbnRTZXJ2aWNlOiBUYXNrQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hZnRlckFjdGlvbkZhY3Rvcnk6IENhbGxDaGFpblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9ldmVudFF1ZXVlOiBFdmVudFF1ZXVlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzZXJDb21wYXJhdG9yOiBVc2VyQ29tcGFyYXRvclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9ldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2NoYW5nZWRGaWVsZHNTZXJ2aWNlOiBDaGFuZ2VkRmllbGRzU2VydmljZSkge1xuICAgICAgICBzdXBlcihfdGFza0NvbnRlbnRTZXJ2aWNlLCBfc2VsZWN0ZWRDYXNlU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVN1Y2Nlc3MkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICAgICAgdGhpcy5fZGF0YVJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRGF0YVJlbG9hZFJlcXVlc3QkLnN1YnNjcmliZShxdWV1ZWRGcm9udGVuZEFjdGlvbiA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVUYXNrRGF0YUZpZWxkcyh0aGlzLl9hZnRlckFjdGlvbkZhY3RvcnkuY3JlYXRlKHN1Y2Nlc3MgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIHF1ZXVlZEZyb250ZW5kQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS5wZXJmb3JtRnJvbnRlbmRBY3Rpb24ocXVldWVkRnJvbnRlbmRBY3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVN1Y2Nlc3MkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2RhdGFSZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNUYXNrUHJlc2VudCgpICYmIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwICYmIGdyb3VwLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICBncm91cC5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiBmaWVsZC5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBiYWNrZW5kXG4gICAgICogY2FsbHMgaW4gW3VwZGF0ZVRhc2tEYXRhRmllbGRzXXtAbGluayBUYXNrRGF0YVNlcnZpY2UjdXBkYXRlVGFza0RhdGFGaWVsZHN9IG1ldGhvZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHVwZGF0ZVN1Y2Nlc3MkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlU3VjY2VzcyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgdGhlIERhdGEgRmllbGRzIG9mIGFuIHVuaW5pdGlhbGl6ZWQgVGFzayBmcm9tIGJhY2tlbmRcbiAgICAgKiBhbmQgcG9wdWxhdGVzIHRoZSBUYXNrIG1hbmFnZWQgYnkge0BsaW5rIFRhc2tDb250ZW50U2VydmljZX0gd2l0aCB0aGUgYXBwcm9wcmlhdGUgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEJld2FyZSB0aGF0IGlmIHRoZSBUYXNrIGhhcyBzb21lIGRhdGEgYWxyZWFkeSBsb2FkZWQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmdcbiAgICAgKiBhbmQgb25seSBwYXNzZXMgYHRydWVgIHRvIHRoZSBgYWZ0ZXJBY3Rpb25gIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogSWYgdGhlIHRhc2sgaGVsZCB3aXRoaW4gdGhlIHtAbGluayBUYXNrQ29udGVudFNlcnZpY2V9IGNoYW5nZXMgYmVmb3JlIGEgcmVzcG9uc2UgaXMgcmVjZWl2ZWQsIHRoZSByZXNwb25zZSB3aWxsIGJlIGlnbm9yZWRcbiAgICAgKiBhbmQgdGhlIGBhZnRlckFjdGlvbmAgd2lsbCBub3QgYmUgZXhlY3V0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gaWYgdGhlIHJlcXVlc3QgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBlbWl0cyBgdHJ1ZWAgaW50byB0aGUgU3ViamVjdCwgb3RoZXJ3aXNlIGBmYWxzZWAgd2lsbCBiZSBlbWl0dGVkXG4gICAgICogQHBhcmFtIGZvcmNlIHNldCB0byBgdHJ1ZWAgaWYgeW91IG5lZWQgZm9yY2UgcmVsb2FkIG9mIGFsbCB0YXNrIGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZVRhc2tEYXRhRmllbGRzKGFmdGVyQWN0aW9uOiBBZnRlckFjdGlvbiA9IG5ldyBBZnRlckFjdGlvbigpLCBmb3JjZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2V2ZW50UXVldWUuc2NoZWR1bGVFdmVudChuZXcgUXVldWVkRXZlbnQoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNUYXNrUHJlc2VudCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRFdmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtR2V0RGF0YVJlcXVlc3QoYWZ0ZXJBY3Rpb24sIGZvcmNlLCBuZXh0RXZlbnQpO1xuICAgICAgICAgICAgfSwgbmV4dEV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgYGdldERhdGFgIHJlcXVlc3Qgb24gdGhlIHRhc2sgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUgYHRhc2tDb250ZW50YCBzZXJ2aWNlXG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBmb3JjZSBzZXQgdG8gYHRydWVgIGlmIHlvdSBuZWVkIGZvcmNlIHJlbG9hZCBvZiBhbGwgdGFzayBkYXRhXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwZXJmb3JtR2V0RGF0YVJlcXVlc3QoYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLCBmb3JjZTogYm9vbGVhbiwgbmV4dEV2ZW50OiBBZnRlckFjdGlvbikge1xuICAgICAgICBpZiAodGhpcy5fc2FmZVRhc2suZGF0YVNpemUgPiAwICYmICFmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy5zZW5kTm90aWZpY2F0aW9uKFRhc2tFdmVudC5HRVRfREFUQSwgdHJ1ZSk7XG4gICAgICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGUubmV4dCh0aGlzLl9zYWZlVGFzay5kYXRhR3JvdXBzKTtcbiAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy5fc2FmZVRhc2suZGF0YVNpemUgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ290dGVuVGFza0lkID0gdGhpcy5fc2FmZVRhc2suc3RyaW5nSWQ7XG4gICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdGFydExvYWRpbmcoZ290dGVuVGFza0lkKTtcblxuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmdldERhdGEoZ290dGVuVGFza0lkKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkYXRhR3JvdXBzID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxHZXREYXRhUmVxdWVzdChnb3R0ZW5UYXNrSWQsIGRhdGFHcm91cHMsIGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NFcnJvbmVvdXNHZXREYXRhUmVxdWVzdChnb3R0ZW5UYXNrSWQsIGVycm9yLCBhZnRlckFjdGlvbiwgbmV4dEV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGEgc3VjY2Vzc2Z1bCBvdXRjb21lIG9mIGEgYGdldERhdGFgIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gZ290dGVuVGFza0lkIHRoZSBJZCBvZiB0aGUgdGFzayB3aG9zZSBkYXRhIHdhcyByZXF1ZXN0ZWRcbiAgICAgKiBAcGFyYW0gZGF0YUdyb3VwcyB0aGUgcmV0dXJuZWQgZGF0YSBncm91cHMgb2YgdGhlIHRhc2tcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gdGhlIGFjdGlvbiB0aGF0IHNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgcHJvY2Vzc2VkXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzU3VjY2Vzc2Z1bEdldERhdGFSZXF1ZXN0KGdvdHRlblRhc2tJZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFHcm91cHM6IEFycmF5PERhdGFHcm91cD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFdmVudDogQWZ0ZXJBY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVGFza1JlbGV2YW50KGdvdHRlblRhc2tJZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZygnY3VycmVudCB0YXNrIGNoYW5nZWQgYmVmb3JlIHRoZSBnZXQgZGF0YSByZXNwb25zZSBjb3VsZCBiZSByZWNlaXZlZCwgZGlzY2FyZGluZy4uLicpO1xuICAgICAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BMb2FkaW5nKGdvdHRlblRhc2tJZCk7XG4gICAgICAgICAgICBhZnRlckFjdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS5yZWZlcmVuY2VkVGFza0FuZENhc2VJZHMgPSB7fTtcbiAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tGaWVsZHNJbmRleCA9IHt9O1xuXG4gICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMgPSBkYXRhR3JvdXBzO1xuICAgICAgICBpZiAoZGF0YUdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5pbmZvKCdUYXNrIGhhcyBubyBkYXRhICcgKyB0aGlzLl9zYWZlVGFzayk7XG4gICAgICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhU2l6ZSA9IDA7XG4gICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudGFza0ZpZWxkc0luZGV4W3RoaXMuX3NhZmVUYXNrLnN0cmluZ0lkXSA9IHt9IGFzIFRhc2tGaWVsZHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW3RoaXMuX3NhZmVUYXNrLmNhc2VJZF0gPSBbdGhpcy5fc2FmZVRhc2suc3RyaW5nSWRdO1xuICAgICAgICAgICAgZGF0YUdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhR3JvdXBQYXJlbnRDYXNlSWQ6IHN0cmluZyA9IGdyb3VwLnBhcmVudENhc2VJZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5fc2FmZVRhc2suY2FzZUlkIDogZ3JvdXAucGFyZW50Q2FzZUlkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFRhc2tJZDogc3RyaW5nID0gZ3JvdXAucGFyZW50VGFza0lkID09PSB1bmRlZmluZWQgPyB0aGlzLl9zYWZlVGFzay5zdHJpbmdJZCA6IGdyb3VwLnBhcmVudFRhc2tJZDtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRUcmFuc2l0aW9uSWQ6IHN0cmluZyA9IGdyb3VwLnBhcmVudFRyYW5zaXRpb25JZCA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2FmZVRhc2sudHJhbnNpdGlvbklkIDogZ3JvdXAucGFyZW50VHJhbnNpdGlvbklkO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhR3JvdXBQYXJlbnRDYXNlSWQgIT09IHRoaXMuX3NhZmVUYXNrLmNhc2VJZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3Rhc2tDb250ZW50U2VydmljZS5yZWZlcmVuY2VkVGFza0FuZENhc2VJZHNbZGF0YUdyb3VwUGFyZW50Q2FzZUlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnJlZmVyZW5jZWRUYXNrQW5kQ2FzZUlkc1tkYXRhR3JvdXBQYXJlbnRDYXNlSWRdID0gW2dyb3VwLnBhcmVudFRhc2tJZF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW2RhdGFHcm91cFBhcmVudENhc2VJZF0ucHVzaChncm91cC5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhR3JvdXBQYXJlbnRDYXNlSWQgPT09IHRoaXMuX3NhZmVUYXNrLmNhc2VJZFxuICAgICAgICAgICAgICAgICAgICAmJiBwYXJlbnRUYXNrSWQgIT09IHRoaXMuX3NhZmVUYXNrLnN0cmluZ0lkXG4gICAgICAgICAgICAgICAgICAgICYmICF0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW2RhdGFHcm91cFBhcmVudENhc2VJZF0uaW5jbHVkZXMocGFyZW50VGFza0lkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UucmVmZXJlbmNlZFRhc2tBbmRDYXNlSWRzW2RhdGFHcm91cFBhcmVudENhc2VJZF0ucHVzaChncm91cC5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZmllbGRzLmxlbmd0aCA+IDAgJiYgIXRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudGFza0ZpZWxkc0luZGV4W3BhcmVudFRhc2tJZF0gPSB7fSBhcyBUYXNrRmllbGRzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZmllbGRzLmxlbmd0aCA+IDAgJiYgIXRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tGaWVsZHNJbmRleFtwYXJlbnRUYXNrSWRdLmZpZWxkcyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncm91cC5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXS50cmFuc2l0aW9uSWQgPSBwYXJlbnRUcmFuc2l0aW9uSWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrRmllbGRzSW5kZXhbcGFyZW50VGFza0lkXS5maWVsZHNbZmllbGQuc3RyaW5nSWRdID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlQ2hhbmdlcygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy53YXNGaWVsZFVwZGF0ZWQoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkIGluc3RhbmNlb2YgRHluYW1pY0VudW1lcmF0aW9uRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGFza0RhdGFGaWVsZHModGhpcy5fYWZ0ZXJBY3Rpb25GYWN0b3J5LmNyZWF0ZShib29sID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGFza0RhdGFGaWVsZHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBGaWxlRmllbGQgfHwgZmllbGQgaW5zdGFuY2VvZiBGaWxlTGlzdEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5jaGFuZ2VkRmllbGRzJC5zdWJzY3JpYmUoKGNoYW5nZTogQ2hhbmdlZEZpZWxkc01hcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRGaWVsZHNTZXJ2aWNlLmVtaXRDaGFuZ2VkRmllbGRzKGNoYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFTaXplID09PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhU2l6ZSA9IGdyb3VwLmZpZWxkcy5sZW5ndGggOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhU2l6ZSArPSBncm91cC5maWVsZHMubGVuZ3RoO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BMb2FkaW5nKGdvdHRlblRhc2tJZCk7XG4gICAgICAgIHRoaXMuc2VuZE5vdGlmaWNhdGlvbihUYXNrRXZlbnQuR0VUX0RBVEEsIHRydWUpO1xuICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKHRydWUpO1xuICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGUubmV4dCh0aGlzLl9zYWZlVGFzay5kYXRhR3JvdXBzKTtcbiAgICAgICAgdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGVDb3VudGVyLm5leHQodGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGVDb3VudGVyLmdldFZhbHVlKCkgKyAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzZXMgYW4gZXJyb25lb3VzIG91dGNvbWUgb2YgYSBgZ2V0RGF0YWAgcmVxdWVzdFxuICAgICAqIEBwYXJhbSBnb3R0ZW5UYXNrSWQgdGhlIElkIG9mIHRoZSB0YXNrIHdob3NlIGRhdGEgd2FzIHJlcXVlc3RlZFxuICAgICAqIEBwYXJhbSBlcnJvciB0aGUgcmV0dXJuZWQgZXJyb3JcbiAgICAgKiBAcGFyYW0gYWZ0ZXJBY3Rpb24gdGhlIGFjdGlvbiB0aGF0IHNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgcHJvY2Vzc2VkXG4gICAgICogQHBhcmFtIG5leHRFdmVudCBpbmRpY2F0ZXMgdG8gdGhlIGV2ZW50IHF1ZXVlIHRoYXQgdGhlIG5leHQgZXZlbnQgY2FuIGJlIHByb2Nlc3NlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzRXJyb25lb3VzR2V0RGF0YVJlcXVlc3QoZ290dGVuVGFza0lkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RXZlbnQ6IEFmdGVyQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wTG9hZGluZyhnb3R0ZW5UYXNrSWQpO1xuICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ2dldHRpbmcgdGFzayBkYXRhIGZhaWxlZCcsIGVycm9yKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNUYXNrUmVsZXZhbnQoZ290dGVuVGFza0lkKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdjdXJyZW50IHRhc2sgY2hhbmdlZCBiZWZvcmUgdGhlIGdldCBkYXRhIGVycm9yIGNvdWxkIGJlIHJlY2VpdmVkJyk7XG4gICAgICAgICAgICBhZnRlckFjdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwICYmIGVycm9yLmVycm9yLm1lc3NhZ2UgJiYgZXJyb3IuZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKCdDb3VsZCBub3QgZmluZCB0YXNrIHdpdGggaWQnKSkge1xuICAgICAgICAgICAgdGhpcy5fc25hY2tCYXIub3Blbldhcm5pbmdTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgndGFza3Muc25hY2tiYXIubm9Mb25nZXJFeGlzdHMnKSk7XG4gICAgICAgICAgICB0aGlzLl90YXNrT3BlcmF0aW9ucy5yZWxvYWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW5FcnJvclNuYWNrQmFyKGAke3RoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5ub0dyb3VwJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuX3Rhc2tDb250ZW50U2VydmljZS50YXNrLnRpdGxlfSAke3RoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCd0YXNrcy5zbmFja2Jhci5mYWlsZWRUb0xvYWQnKX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbmROb3RpZmljYXRpb24oVGFza0V2ZW50LkdFVF9EQVRBLCBmYWxzZSk7XG4gICAgICAgIGFmdGVyQWN0aW9uLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGVjdHMgYWxsIGNoYW5nZWQgZGF0YSBmaWVsZHMgYW5kIG5vdGlmaWVzIHRoZSBiYWNrZW5kIG9mIHRoZSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogSWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCBjbGVhcnMgdGhlIFtjaGFuZ2VkXXtAbGluayBEYXRhRmllbGQjY2hhbmdlZH0gZmxhZyBvbiBhbGwgZGF0YSBmaWVsZHMgdGhhdCB3ZXJlIGEgcGFydCBvZiB0aGUgcmVxdWVzdFxuICAgICAqIGFuZCBlbWl0cyBhIHtAbGluayBDaGFuZ2VkRmllbGRzfSBvYmplY3QgaW50byB0aGlzIG9iamVjdCdzIFtjaGFuZ2VkRmllbGRzJF17QGxpbmsgVGFza0RhdGFTZXJ2aWNlI2NoYW5nZWRGaWVsZHMkfSBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBJZiB0aGUgdGFzayBoZWxkIHdpdGhpbiB0aGUge0BsaW5rIFRhc2tDb250ZW50U2VydmljZX0gY2hhbmdlcyBiZWZvcmUgYSByZXNwb25zZSBpcyByZWNlaXZlZCwgdGhlIHJlc3BvbnNlIHdpbGwgYmUgaWdub3JlZFxuICAgICAqIGFuZCB0aGUgYGFmdGVyQWN0aW9uYCB3aWxsIG5vdCBiZSBleGVjdXRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhZnRlckFjdGlvbiBpZiB0aGUgcmVxdWVzdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGVtaXRzIGB0cnVlYCBpbnRvIHRoZSBTdWJqZWN0LCBvdGhlcndpc2UgYGZhbHNlYCB3aWxsIGJlIGVtaXR0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlVGFza0RhdGFGaWVsZHMoYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uID0gbmV3IEFmdGVyQWN0aW9uKCkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVGFza1ByZXNlbnQoKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdUYXNrIGlzIG5vdCBwcmVzZW50LiBVcGRhdGUgcmVxdWVzdCBpZ25vcmVkLicpO1xuICAgICAgICAgICAgYWZ0ZXJBY3Rpb24ucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2FmZVRhc2sudXNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ2N1cnJlbnQgdGFzayBpcyBub3QgYXNzaWduZWQuLi4nKTtcbiAgICAgICAgICAgIGFmdGVyQWN0aW9uLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2V0VGFza0lkID0gdGhpcy5fc2FmZVRhc2suc3RyaW5nSWQ7XG5cbiAgICAgICAgaWYgKHRoaXMuX3NhZmVUYXNrLmRhdGFTaXplIDw9IDApIHtcbiAgICAgICAgICAgIGFmdGVyQWN0aW9uLnJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IHRoaXMuY3JlYXRlVXBkYXRlUmVxdWVzdENvbnRleHQoKTtcblxuICAgICAgICB0aGlzLl9ldmVudFF1ZXVlLnNjaGVkdWxlRXZlbnQobmV3IFF1ZXVlZEV2ZW50KFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5pc1NldERhdGFSZXF1ZXN0U3RpbGxWYWxpZChyZXF1ZXN0Q29udGV4dC5ib2R5KSxcbiAgICAgICAgICAgIG5leHRFdmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtU2V0RGF0YVJlcXVlc3Qoc2V0VGFza0lkLCByZXF1ZXN0Q29udGV4dC5ib2R5LCBhZnRlckFjdGlvbiwgbmV4dEV2ZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmV2ZXJ0U2V0RGF0YVJlcXVlc3QocmVxdWVzdENvbnRleHQpO1xuICAgICAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEdvZXMgb3ZlciBhbGwgdGhlIGRhdGEgZmllbGRzIGluIHRoZSBtYW5hZ2VkIFRhc2sgYW5kIGlmIHRoZXkgYXJlIHZhbGlkIGFuZCBjaGFuZ2VkIGFkZHMgdGhlbSB0byB0aGUgc2V0IGRhdGEgcmVxdWVzdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVVcGRhdGVSZXF1ZXN0Q29udGV4dCgpOiBUYXNrU2V0RGF0YVJlcXVlc3RDb250ZXh0IHtcbiAgICAgICAgY29uc3QgY29udGV4dDogVGFza1NldERhdGFSZXF1ZXN0Q29udGV4dCA9IHtcbiAgICAgICAgICAgIGJvZHk6IHt9LFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZXM6IHt9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnRleHQuYm9keVt0aGlzLl90YXNrLnN0cmluZ0lkXSA9IHt9O1xuICAgICAgICB0aGlzLl9zYWZlVGFzay5kYXRhR3JvdXBzLmZpbHRlcihkYXRhR3JvdXAgPT4gZGF0YUdyb3VwLnBhcmVudFRhc2tJZCA9PT0gdW5kZWZpbmVkKS5mb3JFYWNoKGRhdGFHcm91cCA9PiB7XG4gICAgICAgICAgICBkYXRhR3JvdXAuZmllbGRzLmZpbHRlcihmaWVsZCA9PiB0aGlzLndhc0ZpZWxkVXBkYXRlZChmaWVsZCkpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmllbGRUb1NldERhdGFSZXF1ZXN0Qm9keShjb250ZXh0LCB0aGlzLl90YXNrLnN0cmluZ0lkLCBmaWVsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMuZmlsdGVyKGRhdGFHcm91cCA9PiBkYXRhR3JvdXAucGFyZW50VGFza0lkICE9PSB1bmRlZmluZWQpLmZvckVhY2goZGF0YUdyb3VwID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhR3JvdXAuZmllbGRzLnNvbWUoZmllbGQgPT4gdGhpcy53YXNGaWVsZFVwZGF0ZWQoZmllbGQpKSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuYm9keVtkYXRhR3JvdXAucGFyZW50VGFza0lkXSA9IHt9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhR3JvdXAuZmllbGRzLmZpbHRlcihmaWVsZCA9PiB0aGlzLndhc0ZpZWxkVXBkYXRlZChmaWVsZCkpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmllbGRUb1NldERhdGFSZXF1ZXN0Qm9keShjb250ZXh0LCBkYXRhR3JvdXAucGFyZW50VGFza0lkLCBmaWVsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhZGRGaWVsZFRvU2V0RGF0YVJlcXVlc3RCb2R5KGNvbnRleHQ6IFRhc2tTZXREYXRhUmVxdWVzdENvbnRleHQsIHRhc2tJZDogc3RyaW5nLCBmaWVsZDogRGF0YUZpZWxkPGFueT4pOiB2b2lkIHtcbiAgICAgICAgY29udGV4dC5ib2R5W3Rhc2tJZF1bZmllbGQuc3RyaW5nSWRdID0ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy5fZmllbGRDb252ZXJ0ZXJTZXJ2aWNlLnJlc29sdmVUeXBlKGZpZWxkKSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9maWVsZENvbnZlcnRlclNlcnZpY2UuZm9ybWF0VmFsdWVGb3JCYWNrZW5kKGZpZWxkLCBmaWVsZC52YWx1ZSlcbiAgICAgICAgfTtcbiAgICAgICAgY29udGV4dC5wcmV2aW91c1ZhbHVlc1tmaWVsZC5zdHJpbmdJZF0gPSBmaWVsZC5wcmV2aW91c1ZhbHVlO1xuICAgICAgICBmaWVsZC5jaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGZpZWxkIHRoZSBjaGVja2VkIGZpZWxkXG4gICAgICogQHJldHVybnMgd2hldGhlciB0aGUgZmllbGQgd2FzIHVwZGF0ZWQgb24gZnJvbnRlbmQgYW5kIHRodXMgdGhlIGJhY2tlbmQgc2hvdWxkIGJlIG5vdGlmaWVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHdhc0ZpZWxkVXBkYXRlZChmaWVsZDogRGF0YUZpZWxkPHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmaWVsZC5pbml0aWFsaXplZCAmJiBmaWVsZC5jaGFuZ2VkICYmIChmaWVsZC52YWxpZCB8fCBmaWVsZC5zZW5kSW52YWxpZFZhbHVlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHJlcXVlc3QgY291bGQgc3RpbGwgYmUgcGVyZm9ybWVkIGJ5IHRoZSBsb2dnZWQgdXNlclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzU2V0RGF0YVJlcXVlc3RTdGlsbFZhbGlkKHJlcXVlc3Q6IFRhc2tTZXREYXRhUmVxdWVzdEJvZHkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVGFza1ByZXNlbnQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zYWZlVGFzay51c2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX3VzZXJDb21wYXJhdG9yLmNvbXBhcmVVc2Vycyh0aGlzLl9zYWZlVGFzay51c2VyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhc2tJZHNJblJlcXVlc3Q6IEFycmF5PHN0cmluZz4gPSBPYmplY3Qua2V5cyhyZXF1ZXN0KTtcbiAgICAgICAgZm9yIChjb25zdCB0YXNrSWQgb2YgdGFza0lkc0luUmVxdWVzdCkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudGFza0ZpZWxkc0luZGV4KS5pbmNsdWRlcyh0YXNrSWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGBUYXNrIGlkICR7dGFza0lkfSBpcyBub3QgcHJlc2VudCBpbiB0YXNrIGZpZWxkcyBpbmRleGApO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkSWRzT2ZSZXF1ZXN0ID0gT2JqZWN0LmtleXMocmVxdWVzdFt0YXNrSWRdKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRJZCBvZiBmaWVsZElkc09mUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fdGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tGaWVsZHNJbmRleFt0YXNrSWRdLmZpZWxkc1tmaWVsZElkXTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGUuIERhdGFmaWVsZCAke2ZpZWxkSWR9IG9mIHRhc2sgJHt0YXNrSWRcbiAgICAgICAgICAgICAgICAgICAgfSBpbiBzZXREYXRhIHJlcXVlc3QgaXMgbm90IHByZXNlbnQgaW4gdGhlIHRhc2suYCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFmaWVsZC5iZWhhdmlvci5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoYEZpZWxkICR7ZmllbGRJZH0sIHdhcyBtZWFudCB0byBiZSBzZXQgdG9cbiAgICAgICAgICAgICAgICAgICAgJHtKU09OLnN0cmluZ2lmeShyZXF1ZXN0W3Rhc2tJZF1bZmllbGRJZF0pXG4gICAgICAgICAgICAgICAgICAgIH0sIGJ1dCBpcyBubyBsb25lciBlZGl0YWJsZS5gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIGBzZXREYXRhYCByZXF1ZXN0IG9uIHRoZSB0YXNrIGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlIGB0YXNrQ29udGVudGAgc2VydmljZVxuICAgICAqIEBwYXJhbSBzZXRUYXNrSWQgaWQgb2YgdGhlIHRhc2tcbiAgICAgKiBAcGFyYW0gYm9keSBjb250ZW50IG9mIHRoZSBgc2V0RGF0YWAgcmVxdWVzdFxuICAgICAqIEBwYXJhbSBhZnRlckFjdGlvbiB0aGUgYWN0aW9uIHRoYXQgc2hvdWxkIGJlIHBlcmZvcm1lZCBhZnRlciB0aGUgcmVxdWVzdCBpcyBwcm9jZXNzZWRcbiAgICAgKiBAcGFyYW0gbmV4dEV2ZW50IGluZGljYXRlcyB0byB0aGUgZXZlbnQgcXVldWUgdGhhdCB0aGUgbmV4dCBldmVudCBjYW4gYmUgcHJvY2Vzc2VkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHBlcmZvcm1TZXREYXRhUmVxdWVzdChzZXRUYXNrSWQ6IHN0cmluZywgYm9keTogVGFza1NldERhdGFSZXF1ZXN0Qm9keSwgYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLCBuZXh0RXZlbnQ6IEFmdGVyQWN0aW9uKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhib2R5KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZE5vdGlmaWNhdGlvbihUYXNrRXZlbnQuU0VUX0RBVEEsIHRydWUpO1xuICAgICAgICAgICAgYWZ0ZXJBY3Rpb24ucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIG5leHRFdmVudC5yZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0YXJ0TG9hZGluZyhzZXRUYXNrSWQpO1xuICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RhcnRVcGRhdGluZyhzZXRUYXNrSWQpO1xuXG4gICAgICAgIHRoaXMuX3Rhc2tSZXNvdXJjZVNlcnZpY2Uuc2V0RGF0YSh0aGlzLl9zYWZlVGFzay5zdHJpbmdJZCwgYm9keSkucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxTZXREYXRhUmVxdWVzdChzZXRUYXNrSWQsIHJlc3BvbnNlLm91dGNvbWUsIGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQsIGJvZHkpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0Vycm9uZW91c1NldERhdGFSZXF1ZXN0KHNldFRhc2tJZCwgZXJyb3IsIGFmdGVyQWN0aW9uLCBuZXh0RXZlbnQsIGJvZHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGEgc3VjY2Vzc2Z1bCBvdXRjb21lIG9mIGEgYHNldERhdGFgIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gc2V0VGFza0lkIHRoZSBJZCBvZiB0aGUgdGFzayB3aG9zZSBkYXRhIHdhcyBzZXRcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2UgdGhlIHJlc3VsdGluZyBFdmVudCBvdXRjb21lIG9mIHRoZSBzZXQgZGF0YSByZXF1ZXN0XG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBuZXh0RXZlbnQgaW5kaWNhdGVzIHRvIHRoZSBldmVudCBxdWV1ZSB0aGF0IHRoZSBuZXh0IGV2ZW50IGNhbiBiZSBwcm9jZXNzZWRcbiAgICAgKiBAcGFyYW0gYm9keSBob2xkIHRoZSBkYXRhIHRoYXQgd2FzIHNlbnQgaW4gcmVxdWVzdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzU3VjY2Vzc2Z1bFNldERhdGFSZXF1ZXN0KHNldFRhc2tJZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiBFdmVudE91dGNvbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJBY3Rpb246IEFmdGVyQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFdmVudDogQWZ0ZXJBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogVGFza1NldERhdGFSZXF1ZXN0Qm9keSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNUYXNrUmVsZXZhbnQoc2V0VGFza0lkKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdjdXJyZW50IHRhc2sgY2hhbmdlZCBiZWZvcmUgdGhlIHNldCBkYXRhIHJlc3BvbnNlIGNvdWxkIGJlIHJlY2VpdmVkLCBkaXNjYXJkaW5nLi4uJyk7XG4gICAgICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RvcExvYWRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wVXBkYXRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgICAgIGFmdGVyQWN0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGFuZ2VkRmllbGRzTWFwOiBDaGFuZ2VkRmllbGRzTWFwID0gdGhpcy5fZXZlbnRTZXJ2aWNlLnBhcnNlQ2hhbmdlZEZpZWxkc0Zyb21PdXRjb21lVHJlZShyZXNwb25zZSk7XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWRGaWVsZHNNYXApLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZWRGaWVsZHNTZXJ2aWNlLmVtaXRDaGFuZ2VkRmllbGRzKGNoYW5nZWRGaWVsZHNNYXApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJXYWl0aW5nRm9yUmVzcG9uc2VGbGFnKGJvZHkpO1xuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuU3VjY2Vzc1NuYWNrQmFyKCEhcmVzcG9uc2UubWVzc2FnZSA/IHJlc3BvbnNlLm1lc3NhZ2UgOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgndGFza3Muc25hY2tiYXIuZGF0YVNhdmVkJykpO1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlSW5mbyhhZnRlckFjdGlvbiwgdHJ1ZSwgc2V0VGFza0lkKTtcbiAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGFuIGVycm9uZW91cyBvdXRjb21lIG9mIGEgYHNldERhdGFgIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0gc2V0VGFza0lkIHRoZSBJZCBvZiB0aGUgdGFzayB3aG9zZSBkYXRhIHdhcyBzZXRcbiAgICAgKiBAcGFyYW0gZXJyb3IgdGhlIHJldHVybmVkIGVycm9yXG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHByb2Nlc3NlZFxuICAgICAqIEBwYXJhbSBuZXh0RXZlbnQgaW5kaWNhdGVzIHRvIHRoZSBldmVudCBxdWV1ZSB0aGF0IHRoZSBuZXh0IGV2ZW50IGNhbiBiZSBwcm9jZXNzZWRcbiAgICAgKiBAcGFyYW0gYm9keSBob2xkIHRoZSBkYXRhIHRoYXQgd2FzIHNlbnQgaW4gcmVxdWVzdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzRXJyb25lb3VzU2V0RGF0YVJlcXVlc3Qoc2V0VGFza0lkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RXZlbnQ6IEFmdGVyQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogVGFza1NldERhdGFSZXF1ZXN0Qm9keSkge1xuICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ3NldHRpbmcgdGFzayBkYXRhIGZhaWxlZCcsIGVycm9yKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNUYXNrUmVsZXZhbnQoc2V0VGFza0lkKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdjdXJyZW50IHRhc2sgY2hhbmdlZCBiZWZvcmUgdGhlIGdldCBkYXRhIGVycm9yIGNvdWxkIGJlIHJlY2VpdmVkJyk7XG4gICAgICAgICAgICB0aGlzLl90YXNrU3RhdGUuc3RvcExvYWRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wVXBkYXRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgICAgIGFmdGVyQWN0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICBuZXh0RXZlbnQucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJldmVydFRvUHJldmlvdXNWYWx1ZSgpO1xuICAgICAgICB0aGlzLmNsZWFyV2FpdGluZ0ZvclJlc3BvbnNlRmxhZyhib2R5KTtcbiAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbkVycm9yU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3Rhc2tzLnNuYWNrYmFyLmZhaWxlZFNhdmUnKSk7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGVJbmZvKGFmdGVyQWN0aW9uLCBmYWxzZSwgc2V0VGFza0lkKTtcbiAgICAgICAgbmV4dEV2ZW50LnJlc29sdmUoZmFsc2UpO1xuICAgICAgICB0aGlzLl90YXNrT3BlcmF0aW9ucy5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXZlcnRzIHRoZSBlZmZlY3RzIG9mIGEgZmFpbGVkIGBzZXREYXRhYCByZXF1ZXN0LCBzbyB0aGF0IHRoZSB1c2VyIHNlZXMgY3VycmVudCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIGNvbnRleHQgdGhlIGNvbnRleHQgb2YgdGhlIGZhaWxlZCByZXF1ZXN0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJldmVydFNldERhdGFSZXF1ZXN0KGNvbnRleHQ6IFRhc2tTZXREYXRhUmVxdWVzdENvbnRleHQpIHtcbiAgICAgICAgLy8gdGhpcyBpdGVyYXRpb24gY291bGQgYmUgaW1wcm92ZWQgaWYgd2UgaGFkIGEgbWFwIG9mIGFsbCB0aGUgZGF0YSBmaWVsZHMgaW4gYSB0YXNrXG4gICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSBPYmplY3Qua2V5cyhjb250ZXh0LmJvZHkpLmxlbmd0aDtcbiAgICAgICAgbGV0IGZvdW5kQ291bnQgPSAwO1xuXG4gICAgICAgIGZvciAoY29uc3QgZGF0YWdyb3VwIG9mIHRoaXMuX3NhZmVUYXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZGF0YWdyb3VwLmZpZWxkcykge1xuICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5ib2R5W2ZpZWxkLnN0cmluZ0lkXSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21wYXJlQmFja2VuZEZvcm1hdHRlZEZpZWxkVmFsdWVzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWVsZENvbnZlcnRlclNlcnZpY2UuZm9ybWF0VmFsdWVGb3JCYWNrZW5kKGZpZWxkLCBmaWVsZC52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYm9keVtmaWVsZC5zdHJpbmdJZF0udmFsdWUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlV2l0aG91dENoYW5nZShjb250ZXh0LnByZXZpb3VzVmFsdWVzW2ZpZWxkLnN0cmluZ0lkXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm91bmRDb3VudCsrO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZENvdW50ID09PSB0b3RhbENvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2cuZXJyb3IoYEludmFsaWQgc3RhdGUuIFNvbWUgZGF0YSBmaWVsZHMgb2YgdGFzayAke3RoaXMuX3NhZmVUYXNrLnN0cmluZ0lkfSwgYXJlIG5vIGxvbmdlciBwcmVzZW50IGluIGl0IWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBhcmVzIHRoZSB2YWx1ZXMgdGhhdCBhcmUgaW4gdGhlIGJhY2tlbmQgY29tcGF0aWJsZSBmb3JtYXQgYXMgZ2l2ZW4gYnkgdGhlIHtAbGluayBGaWVsZENvbnZlcnRlclNlcnZpY2V9XG4gICAgICogYW5kIGRldGVybWluZXMgd2hldGhlciB0aGV5IGFyZSB0aGUgc2FtZSB2YWx1ZSwgb3Igbm90LlxuICAgICAqIEBwYXJhbSBjdXJyZW50IHRoZSBjdXJyZW50IHZhbHVlIChjYW4gYWxzbyBiZSBjYWxsZWQgYHZhbHVlMWAgb3IgYGxlZnRgKVxuICAgICAqIEBwYXJhbSBvbGQgdGhlIG5ldyB2YWx1ZSAoY2FuIGFsc28gYmUgY2FsbGVkIGB2YWx1ZTJgIG9yIGByaWdodGApXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFuZCBgZmFsc2VgIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjb21wYXJlQmFja2VuZEZvcm1hdHRlZEZpZWxkVmFsdWVzKGN1cnJlbnQsIG9sZCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9sZCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnRzISBDYW5ub3QgY29tcGFyZSBhcnJheSB2YWx1ZSB0byBub24tYXJyYXkgdmFsdWUnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBvbGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudC5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBvbGRbaW5kZXhdID09PSB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VycmVudCA9PT0gb2xkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKlxuICAgICAqIHN0b3BzIGxvYWRpbmcgYW5kIHVwZGF0aW5nIGluZGljYXRvcnMsIGFuZCBlbWl0cyB0aGUgYHJlc3VsdGAgdmFsdWVcbiAgICAgKiB0byBib3RoIHRoZSBgYWZ0ZXJBY3Rpb25gIGFuZCBbX3VwZGF0ZVN1Y2Nlc3MkXXtAbGluayBUYXNrRGF0YVNlcnZpY2UjX3VwZGF0ZVN1Y2Nlc3MkfSBzdHJlYW1zLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFmdGVyQWN0aW9uIHRoZSBjYWxsIGNoYWluIHN0ZWFtIG9mIHRoZSB1cGRhdGUgZGF0YSBtZXRob2RcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHJlc3VsdCBvZiB0aGUgdXBkYXRlIGRhdGEgcmVxdWVzdFxuICAgICAqIEBwYXJhbSBzZXRUYXNrSWQgdGhlIElkIG9mIHRoZSB7QGxpbmsgVGFza30sIHdobydzIHN0YXRlIHNob3VsZCBiZSB1cGRhdGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVN0YXRlSW5mbyhhZnRlckFjdGlvbjogQWZ0ZXJBY3Rpb24sIHJlc3VsdDogYm9vbGVhbiwgc2V0VGFza0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFza1N0YXRlLnN0b3BMb2FkaW5nKHNldFRhc2tJZCk7XG4gICAgICAgIHRoaXMuX3Rhc2tTdGF0ZS5zdG9wVXBkYXRpbmcoc2V0VGFza0lkKTtcbiAgICAgICAgaWYgKHRoaXMuX3VwZGF0ZVN1Y2Nlc3MkLm9ic2VydmVycy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVN1Y2Nlc3MkLm5leHQocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbmROb3RpZmljYXRpb24oVGFza0V2ZW50LlNFVF9EQVRBLCByZXN1bHQpO1xuICAgICAgICBhZnRlckFjdGlvbi5yZXNvbHZlKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHVibGlzaGVzIGEgZ2V0L3NldCBkYXRhIG5vdGlmaWNhdGlvbiB0byB0aGUge0BsaW5rIFRhc2tFdmVudFNlcnZpY2V9XG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0aGF0IG9jY3VycmVkIHRvIHRoZSB0YXNrXG4gICAgICogQHBhcmFtIHN1Y2Nlc3Mgd2hldGhlciB0aGUgZ2V0L3NldCBkYXRhIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBvciBub3RcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2VuZE5vdGlmaWNhdGlvbihldmVudDogVGFza0V2ZW50LkdFVF9EQVRBIHwgVGFza0V2ZW50LlNFVF9EQVRBLCBzdWNjZXNzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Rhc2tFdmVudC5wdWJsaXNoVGFza0V2ZW50KGNyZWF0ZVRhc2tFdmVudE5vdGlmaWNhdGlvbih0aGlzLl9zYWZlVGFzaywgZXZlbnQsIHN1Y2Nlc3MpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJldmVydFRvUHJldmlvdXNWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2FmZVRhc2suZGF0YUdyb3Vwcy5mb3JFYWNoKGRhdGFHcm91cCA9PiB7XG4gICAgICAgICAgICBkYXRhR3JvdXAuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbml0aWFsaXplZCAmJiBmaWVsZC52YWxpZCAmJiBmaWVsZC5jaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnJldmVydFRvUHJldmlvdXNWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyV2FpdGluZ0ZvclJlc3BvbnNlRmxhZyhib2R5OiBUYXNrU2V0RGF0YVJlcXVlc3RCb2R5KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGJvZHkpLmZvckVhY2godGFza0lkID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGJvZHlbdGFza0lkXSkuZm9yRWFjaChmaWVsZElkID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YXNrQ29udGVudFNlcnZpY2UudGFza0ZpZWxkc0luZGV4W3Rhc2tJZF0uZmllbGRzW2ZpZWxkSWRdLndhaXRpbmdGb3JSZXNwb25zZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==