@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
@@ -18,6 +18,8 @@ import { arrayToObservable } from '../../../utility/array-to-observable';
18
18
  import { SearchIndexResolverService } from '../../../search/search-keyword-resolver-service/search-index-resolver.service';
19
19
  import { SortableView } from '../../abstract/sortable-view';
20
20
  import { NAE_TASK_VIEW_CONFIGURATION } from '../models/task-view-configuration-injection-token';
21
+ import { PaginationParams } from '../../../utility/pagination/pagination-params';
22
+ import { createSortParam, PaginationSort } from '../../../utility/pagination/pagination-sort';
21
23
  var TaskViewService = /** @class */ (function (_super) {
22
24
  __extends(TaskViewService, _super);
23
25
  function TaskViewService(_taskService, _userService, _snackBarService, _translate, _searchService, _log, _userComparator, resolver, _preferredEndpoint, taskViewConfig) {
@@ -293,11 +295,11 @@ var TaskViewService = /** @class */ (function (_super) {
293
295
  return this._lastHeaderSearchState.fieldIdentifier;
294
296
  };
295
297
  TaskViewService.prototype.getDefaultSortParam = function () {
296
- return 'priority,desc';
298
+ return createSortParam('priority', PaginationSort.DESCENDING);
297
299
  };
298
300
  TaskViewService.prototype.addPageParams = function (params, pagination) {
299
- params = params.set('size', pagination.size + '');
300
- params = params.set('page', pagination.number + '');
301
+ params = params.set(PaginationParams.PAGE_SIZE, "" + pagination.size);
302
+ params = params.set(PaginationParams.PAGE_NUMBER, "" + pagination.number);
301
303
  return params;
302
304
  };
303
305
  TaskViewService.ctorParameters = function () { return [
@@ -330,4 +332,4 @@ var TaskViewService = /** @class */ (function (_super) {
330
332
  return TaskViewService;
331
333
  }(SortableView));
332
334
  export { TaskViewService };
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay12aWV3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUvIiwic291cmNlcyI6WyJsaWIvdmlldy90YXNrLXZpZXcvc2VydmljZS90YXNrLXZpZXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQWdCLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVsRyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUM3RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDaEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUdoRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDNUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBRXRFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUVyRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRixPQUFPLEVBQUMsc0JBQXNC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QkFBZ0I7Z0JBQ1YsYUFBYTtnQkFDekIsYUFBYTtnQkFDRixxQkFBcUI7Z0JBQ3BDLDBCQUEwQjtnREFDbkMsUUFBUSxZQUFJLE1BQU0sU0FBQywyQkFBMkI7Z0RBQzlDLFFBQVEsWUFBSSxNQUFNLFNBQUMsMkJBQTJCOzs7Z0JBL0I5RCxVQUFVOzs7Z0JBM0JILG1CQUFtQjtnQkFDbkIsV0FBVztnQkFDWCxlQUFlO2dCQUNmLGdCQUFnQjtnQkFLaEIsYUFBYTtnQkFDYixhQUFhO2dCQUViLHFCQUFxQjtnQkFTckIsMEJBQTBCO2dCQVIxQixZQUFZLHVCQTZDSCxRQUFRLFlBQUksTUFBTSxTQUFDLDJCQUEyQjtnREFDOUMsUUFBUSxZQUFJLE1BQU0sU0FBQywyQkFBMkI7O0lBNlIvRCxzQkFBQztDQUFBLEFBNVRELENBQ3FDLFlBQVksR0EyVGhEO1NBM1RZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUYXNrUGFuZWxEYXRhfSBmcm9tICcuLi8uLi8uLi9wYW5lbC90YXNrLXBhbmVsLWxpc3QvdGFzay1wYW5lbC1kYXRhL3Rhc2stcGFuZWwtZGF0YSc7XG5pbXBvcnQge1Rhc2tSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvdGFzay1yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7U25hY2tCYXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zbmFjay1iYXIvc2VydmljZXMvc25hY2stYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgY29uY2F0TWFwLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHNjYW4sIHN3aXRjaE1hcCwgdGFrZSwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0h0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7UGFnaW5hdGlvbn0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdpbmF0aW9uJztcbmltcG9ydCB7VGFza30gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS90YXNrJztcbmltcG9ydCB7U2VhcmNoU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VhcmNoL3NlYXJjaC1zZXJ2aWNlL3NlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7TGlzdFJhbmdlfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHtVc2VyQ29tcGFyYXRvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci1jb21wYXJhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtUYXNrRW5kcG9pbnR9IGZyb20gJy4uL21vZGVscy90YXNrLWVuZHBvaW50JztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdlJztcbmltcG9ydCB7TkFFX1BSRUZFUlJFRF9UQVNLX0VORFBPSU5UfSBmcm9tICcuLi9tb2RlbHMvaW5qZWN0aW9uLXRva2VuLXRhc2stZW5kcG9pbnQnO1xuaW1wb3J0IHtQYWdlTG9hZFJlcXVlc3RDb250ZXh0fSBmcm9tICcuLi8uLi9hYnN0cmFjdC9wYWdlLWxvYWQtcmVxdWVzdC1jb250ZXh0JztcbmltcG9ydCB7RmlsdGVyfSBmcm9tICcuLi8uLi8uLi9maWx0ZXIvbW9kZWxzL2ZpbHRlcic7XG5pbXBvcnQge1Rhc2tQYWdlTG9hZFJlcXVlc3RSZXN1bHR9IGZyb20gJy4uL21vZGVscy90YXNrLXBhZ2UtbG9hZC1yZXF1ZXN0LXJlc3VsdCc7XG5pbXBvcnQge0xvYWRpbmdXaXRoRmlsdGVyRW1pdHRlcn0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0eS9sb2FkaW5nLXdpdGgtZmlsdGVyLWVtaXR0ZXInO1xuaW1wb3J0IHthcnJheVRvT2JzZXJ2YWJsZX0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0eS9hcnJheS10by1vYnNlcnZhYmxlJztcbmltcG9ydCB7U2VhcmNoSW5kZXhSZXNvbHZlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlYXJjaC9zZWFyY2gta2V5d29yZC1yZXNvbHZlci1zZXJ2aWNlL3NlYXJjaC1pbmRleC1yZXNvbHZlci5zZXJ2aWNlJztcbmltcG9ydCB7U29ydGFibGVWaWV3fSBmcm9tICcuLi8uLi9hYnN0cmFjdC9zb3J0YWJsZS12aWV3JztcbmltcG9ydCB7TkFFX1RBU0tfVklFV19DT05GSUdVUkFUSU9OfSBmcm9tICcuLi9tb2RlbHMvdGFzay12aWV3LWNvbmZpZ3VyYXRpb24taW5qZWN0aW9uLXRva2VuJztcbmltcG9ydCB7VGFza1ZpZXdDb25maWd1cmF0aW9ufSBmcm9tICcuLi9tb2RlbHMvdGFzay12aWV3LWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtDaGFuZ2VkRmllbGRzTWFwfSBmcm9tICcuLi8uLi8uLi9ldmVudC9zZXJ2aWNlcy9pbnRlcmZhY2VzL2NoYW5nZWQtZmllbGRzLW1hcCc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhc2tWaWV3U2VydmljZSBleHRlbmRzIFNvcnRhYmxlVmlldyBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICBwcm90ZWN0ZWQgX3Rhc2tzJDogT2JzZXJ2YWJsZTxBcnJheTxUYXNrUGFuZWxEYXRhPj47XG4gICAgcHJvdGVjdGVkIF9jaGFuZ2VkRmllbGRzJDogU3ViamVjdDxDaGFuZ2VkRmllbGRzTWFwPjtcbiAgICBwcm90ZWN0ZWQgX3JlcXVlc3RlZFBhZ2UkOiBCZWhhdmlvclN1YmplY3Q8UGFnZUxvYWRSZXF1ZXN0Q29udGV4dD47XG4gICAgcHJvdGVjdGVkIF9sb2FkaW5nJDogTG9hZGluZ1dpdGhGaWx0ZXJFbWl0dGVyO1xuICAgIHByb3RlY3RlZCBfZW5kT2ZEYXRhOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfcGFnaW5hdGlvbjogUGFnaW5hdGlvbjtcbiAgICBwcm90ZWN0ZWQgX2luaXRpYWxseU9wZW5PbmVUYXNrOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfY2xvc2VUYXNrVGFiT25Ob1Rhc2tzOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfcGFuZWxVcGRhdGUkOiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8VGFza1BhbmVsRGF0YT4+O1xuICAgIHByb3RlY3RlZCBfY2xvc2VUYWIkOiBSZXBsYXlTdWJqZWN0PHZvaWQ+O1xuICAgIHByb3RlY3RlZCBfc3ViSW5pdGlhbGx5T3BlbjogU3Vic2NyaXB0aW9uO1xuICAgIHByb3RlY3RlZCBfc3ViQ2xvc2VUYXNrOiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIF9zdWJTZWFyY2g6IFN1YnNjcmlwdGlvbjtcblxuICAgIC8vIFNlcmlhbGl6aW5nIGFzc2lnbiBhZnRlciBjYW5jZWxcbiAgICBwcm90ZWN0ZWQgX2FsbG93TXVsdGlPcGVuOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW5pdGlhbGl6aW5nOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfdGFza1NlcnZpY2U6IFRhc2tSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3NuYWNrQmFyU2VydmljZTogU25hY2tCYXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3NlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3VzZXJDb21wYXJhdG9yOiBVc2VyQ29tcGFyYXRvclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcmVzb2x2ZXI6IFNlYXJjaEluZGV4UmVzb2x2ZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkFFX1BSRUZFUlJFRF9UQVNLX0VORFBPSU5UKSBwcm90ZWN0ZWQgcmVhZG9ubHkgX3ByZWZlcnJlZEVuZHBvaW50OiBUYXNrRW5kcG9pbnQgPSBudWxsLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkFFX1RBU0tfVklFV19DT05GSUdVUkFUSU9OKSB0YXNrVmlld0NvbmZpZzogVGFza1ZpZXdDb25maWd1cmF0aW9uID0gbnVsbCkge1xuICAgICAgICBzdXBlcihyZXNvbHZlcik7XG4gICAgICAgIHRoaXMuX3Rhc2tzJCA9IG5ldyBTdWJqZWN0PEFycmF5PFRhc2tQYW5lbERhdGE+PigpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nJCA9IG5ldyBMb2FkaW5nV2l0aEZpbHRlckVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZEZpZWxkcyQgPSBuZXcgU3ViamVjdDxDaGFuZ2VkRmllbGRzTWFwPigpO1xuICAgICAgICB0aGlzLl9hbGxvd011bHRpT3BlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuX2VuZE9mRGF0YSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uID0ge1xuICAgICAgICAgICAgc2l6ZTogNTAsXG4gICAgICAgICAgICB0b3RhbEVsZW1lbnRzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3RhbFBhZ2VzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBudW1iZXI6IC0xXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX3JlcXVlc3RlZFBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdlTG9hZFJlcXVlc3RDb250ZXh0PihcbiAgICAgICAgICAgIG5ldyBQYWdlTG9hZFJlcXVlc3RDb250ZXh0KHRoaXMuYWN0aXZlRmlsdGVyLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9wYWdpbmF0aW9uLCB7bnVtYmVyOiAwfSkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3BhbmVsVXBkYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8VGFza1BhbmVsRGF0YT4+KFtdKTtcbiAgICAgICAgdGhpcy5fY2xvc2VUYWIkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XG4gICAgICAgIHRoaXMuX3ByZWZlcnJlZEVuZHBvaW50ID0gdGFza1ZpZXdDb25maWc/LnByZWZlcnJlZEVuZHBvaW50ID8/ICh0aGlzLl9wcmVmZXJyZWRFbmRwb2ludCA/PyBUYXNrRW5kcG9pbnQuTU9OR08pO1xuXG4gICAgICAgIHRoaXMuX2luaXRpYWxpemluZyA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX3N1YlNlYXJjaCA9IHRoaXMuX3NlYXJjaFNlcnZpY2UuYWN0aXZlRmlsdGVyJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdGFza3NNYXAkID0gdGhpcy5fcmVxdWVzdGVkUGFnZSQucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKHAgPT4gdGhpcy5sb2FkUGFnZShwKSksXG4gICAgICAgICAgICBtYXAocGFnZUxvYWRSZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYWdlTG9hZFJlc3VsdC5yZXF1ZXN0Q29udGV4dCAmJiBwYWdlTG9hZFJlc3VsdC5yZXF1ZXN0Q29udGV4dC5jbGVhckxvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBzZXQgYW4gZW1wdHkgdmFsdWUgdG8gdGhlIHZpcnR1YWwgc2Nyb2xsIGFuZCB0aGVuIHJlcGxhY2UgaXQgYnkgdGhlIHJlYWwgdmFsdWUgZm9yY2luZyBpdCB0byByZWRyYXcgaXRzIGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IFt7dGFza3M6IHt9LCByZXF1ZXN0Q29udGV4dDogbnVsbH0sIHBhZ2VMb2FkUmVzdWx0XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5VG9PYnNlcnZhYmxlKHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihwYWdlTG9hZFJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjb25jYXRNYXAobyA9PiBvKSxcbiAgICAgICAgICAgIHNjYW4oKGFjYywgcGFnZUxvYWRSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0OiB7IFtrOiBzdHJpbmddOiBUYXNrUGFuZWxEYXRhIH07XG4gICAgICAgICAgICAgICAgaWYgKHBhZ2VMb2FkUmVzdWx0LnJlcXVlc3RDb250ZXh0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWdlTG9hZFJlc3VsdC50YXNrcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGFnZUxvYWRSZXN1bHQucmVxdWVzdENvbnRleHQucmVsb2FkQ3VycmVudFRhc2tQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGFjYykuZm9yRWFjaCh0YXNrSWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWdlTG9hZFJlc3VsdC50YXNrc1t0YXNrSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFjY1t0YXNrSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlTG9hZFJlc3VsdC50YXNrc1t0YXNrSWRdLnRhc2suZGF0YUdyb3VwcyA9IGFjY1t0YXNrSWRdLnRhc2suZGF0YUdyb3VwcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlTG9hZFJlc3VsdC50YXNrc1t0YXNrSWRdLmluaXRpYWxseUV4cGFuZGVkID0gYWNjW3Rhc2tJZF0uaW5pdGlhbGx5RXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUYXNrKGFjY1t0YXNrSWRdLnRhc2ssIHBhZ2VMb2FkUmVzdWx0LnRhc2tzW3Rhc2tJZF0udGFzayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9ja1Rhc2tGaWVsZHMoYWNjW3Rhc2tJZF0udGFzaywgIShhY2NbdGFza0lkXS50YXNrLnVzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5fdXNlckNvbXBhcmF0b3IuY29tcGFyZVVzZXJzKGFjY1t0YXNrSWRdLnRhc2sudXNlcikpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFnZUxvYWRSZXN1bHQudGFza3NbdGFza0lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oYWNjLCBwYWdlTG9hZFJlc3VsdC50YXNrcyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gey4uLmFjYywgLi4ucGFnZUxvYWRSZXN1bHQudGFza3N9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fcGFnaW5hdGlvbiwgcGFnZUxvYWRSZXN1bHQucmVxdWVzdENvbnRleHQucGFnaW5hdGlvbik7XG4gICAgICAgICAgICAgICAgaWYgKHBhZ2VMb2FkUmVzdWx0LnJlcXVlc3RDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmckLm9mZihwYWdlTG9hZFJlc3VsdC5yZXF1ZXN0Q29udGV4dC5maWx0ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSwge30pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3Rhc2tzJCA9IHRhc2tzTWFwJC5waXBlKFxuICAgICAgICAgICAgbWFwKHYgPT4gT2JqZWN0LnZhbHVlcyh2KSBhcyBBcnJheTxUYXNrUGFuZWxEYXRhPiksXG4gICAgICAgICAgICBtYXAodGFza0FycmF5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGFza0FycmF5Lmxlbmd0aCA9PT0gMSAmJiB0aGlzLl9pbml0aWFsbHlPcGVuT25lVGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrQXJyYXlbMF0udGFzay5maW5pc2hEYXRlID09PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFza0FycmF5WzBdLmluaXRpYWxseUV4cGFuZGVkID0gdHJ1ZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrQXJyYXlbMF0uaW5pdGlhbGx5RXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tBcnJheTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKHYgPT4gdGhpcy5fcGFuZWxVcGRhdGUkLm5leHQodikpKTtcblxuICAgICAgICB0aGlzLl9zdWJJbml0aWFsbHlPcGVuID0gKHRhc2tWaWV3Q29uZmlnPy5pbml0aWFsbHlPcGVuT25lVGFzayA/PyBvZih0cnVlKSkuc3Vic2NyaWJlKGJvb2wgPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGx5T3Blbk9uZVRhc2sgPSBib29sO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zdWJDbG9zZVRhc2sgPSAodGFza1ZpZXdDb25maWc/LmNsb3NlVGFza1RhYk9uTm9UYXNrcyA/PyBvZih0cnVlKSkuc3Vic2NyaWJlKGJvb2wgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VUYXNrVGFiT25Ob1Rhc2tzID0gYm9vbDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZWRGaWVsZHMkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RlZFBhZ2UkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX3BhbmVsVXBkYXRlJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9jbG9zZVRhYiQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fc3ViSW5pdGlhbGx5T3Blbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9zdWJDbG9zZVRhc2sudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fc3ViU2VhcmNoLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YXNrcyQoKTogT2JzZXJ2YWJsZTxBcnJheTxUYXNrUGFuZWxEYXRhPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFza3MkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY2hhbmdlZEZpZWxkcyQoKTogU3ViamVjdDxDaGFuZ2VkRmllbGRzTWFwPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFuZ2VkRmllbGRzJDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZyQuaXNBY3RpdmU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYW5lbFVwZGF0ZSgpOiBPYnNlcnZhYmxlPEFycmF5PFRhc2tQYW5lbERhdGE+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYW5lbFVwZGF0ZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbG9zZVRhYigpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlVGFiJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGFjdGl2ZUZpbHRlcigpOiBGaWx0ZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoU2VydmljZS5hY3RpdmVGaWx0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBhbGxvd011bHRpT3Blbihib29sOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2FsbG93TXVsdGlPcGVuID0gYm9vbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFsbG93TXVsdGlPcGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWxsb3dNdWx0aU9wZW47XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWRQYWdlKHJlcXVlc3RDb250ZXh0OiBQYWdlTG9hZFJlcXVlc3RDb250ZXh0KTogT2JzZXJ2YWJsZTxUYXNrUGFnZUxvYWRSZXF1ZXN0UmVzdWx0PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0Q29udGV4dCA9PT0gbnVsbCB8fCByZXF1ZXN0Q29udGV4dC5wYWdlTnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHt0YXNrczoge30sIHJlcXVlc3RDb250ZXh0fSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhcmFtczogSHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgICAgIHBhcmFtcyA9IHRoaXMuYWRkU29ydFBhcmFtcyhwYXJhbXMpO1xuICAgICAgICBwYXJhbXMgPSB0aGlzLmFkZFBhZ2VQYXJhbXMocGFyYW1zLCByZXF1ZXN0Q29udGV4dC5wYWdpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5fbG9hZGluZyQub24ocmVxdWVzdENvbnRleHQuZmlsdGVyKTtcblxuICAgICAgICBsZXQgcmVxdWVzdDogT2JzZXJ2YWJsZTxQYWdlPFRhc2s+PjtcbiAgICAgICAgaWYgKHJlcXVlc3RDb250ZXh0LmZpbHRlci5ib2R5Q29udGFpbnNRdWVyeSgpIHx8IHRoaXMuX3ByZWZlcnJlZEVuZHBvaW50ID09PSBUYXNrRW5kcG9pbnQuRUxBU1RJQykge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHRpbWVyKDIwMCkucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fdGFza1NlcnZpY2Uuc2VhcmNoVGFzayhyZXF1ZXN0Q29udGV4dC5maWx0ZXIsIHBhcmFtcykucGlwZSh0YWtlKDEpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gdGhpcy5fdGFza1NlcnZpY2UuZ2V0VGFza3MocmVxdWVzdENvbnRleHQuZmlsdGVyLCBwYXJhbXMpLnBpcGUodGFrZSgxKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcXVlc3QucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ0xvYWRpbmcgdGFza3MgaGFzIGZhaWxlZCEnLCBlcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmckLm9mZihyZXF1ZXN0Q29udGV4dC5maWx0ZXIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZih7Y29udGVudDogW10sIHBhZ2luYXRpb246IHsuLi50aGlzLl9wYWdpbmF0aW9ufX0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSByZXF1ZXN0Q29udGV4dC5maWx0ZXIgPT09IHRoaXMuX3NlYXJjaFNlcnZpY2UuYWN0aXZlRmlsdGVyO1xuICAgICAgICAgICAgICAgIGlmICghcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nJC5vZmYocmVxdWVzdENvbnRleHQuZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdSZWNlaXZlZCB0YXNrcyBwYWdlIGlzIG5vIGxvbmdlciByZWxldmFudCBzaW5jZSB0aGUgYWN0aXZlIGZpbHRlciBoYXMgY2hhbmdlZCBiZWZvcmUgaXQgY291bGQgYXJyaXZlLidcbiAgICAgICAgICAgICAgICAgICAgICAgICsgJyBEaXNjYXJkaW5nLi4uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAodCA9PiB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZXF1ZXN0Q29udGV4dC5wYWdpbmF0aW9uLCB0LnBhZ2luYXRpb24pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAodCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3BhZ2luYXRpb24udG90YWxFbGVtZW50cyAmJiB0aGlzLl9wYWdpbmF0aW9uLnRvdGFsRWxlbWVudHMgPiAwXG4gICAgICAgICAgICAgICAgICAgICYmIHQucGFnaW5hdGlvbi50b3RhbEVsZW1lbnRzID09PSAwICYmICFBcnJheS5pc0FycmF5KHQuY29udGVudCkgJiYgdGhpcy5fY2xvc2VUYXNrVGFiT25Ob1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlVGFiJC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAodCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5kT2ZEYXRhID0gIUFycmF5LmlzQXJyYXkodC5jb250ZW50KVxuICAgICAgICAgICAgICAgICAgICB8fCB0LmNvbnRlbnQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgIHx8IHQucGFnaW5hdGlvbi5udW1iZXIgPT09IHQucGFnaW5hdGlvbi50b3RhbFBhZ2VzO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAodGFza3MgPT4gQXJyYXkuaXNBcnJheSh0YXNrcy5jb250ZW50KSA/IHRhc2tzIDogey4uLnRhc2tzLCBjb250ZW50OiBbXX0pLFxuICAgICAgICAgICAgbWFwKHRhc2tzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MuY29udGVudC5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJsb2NrVGFza0ZpZWxkcyhjdXJyLCAhKGN1cnIudXNlciAmJiB0aGlzLl91c2VyQ29tcGFyYXRvci5jb21wYXJlVXNlcnMoY3Vyci51c2VyKSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYWNjLCBbY3Vyci5zdHJpbmdJZF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrOiBjdXJyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRGaWVsZHM6IHRoaXMuX2NoYW5nZWRGaWVsZHMkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxseUV4cGFuZGVkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKHRhc2tzID0+ICh7dGFza3MsIHJlcXVlc3RDb250ZXh0fSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUYXNrKG9sZDogVGFzaywgbmV3dzogVGFzaykge1xuICAgICAgICBPYmplY3Qua2V5cyhvbGQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmICghbmV3dy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG9sZFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmtleXMobmV3dykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKG5ld3dba2V5XSAhPT0gdW5kZWZpbmVkICYmIG5ld3dba2V5XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG9sZFtrZXldID0gbmV3d1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ibG9ja1Rhc2tGaWVsZHMob2xkLCAhKG9sZC51c2VyICYmIHRoaXMuX3VzZXJDb21wYXJhdG9yLmNvbXBhcmVVc2VycyhvbGQudXNlcikpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJsb2NrVGFza0ZpZWxkcyh0YXNrOiBUYXNrLCBibG9jazogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIXRhc2suZGF0YUdyb3Vwcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRhc2suZGF0YUdyb3Vwcy5mb3JFYWNoKGcgPT4gZy5maWVsZHMuZm9yRWFjaChmID0+IGYuYmxvY2sgPSBibG9jaykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXh0UGFnZShyZW5kZXJlZFJhbmdlOiBMaXN0UmFuZ2UsIHRvdGFsTG9hZGVkOiBudW1iZXIsIHJlcXVlc3RDb250ZXh0PzogUGFnZUxvYWRSZXF1ZXN0Q29udGV4dCk6IHZvaWQge1xuICAgICAgICBpZiAocmVxdWVzdENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVxdWVzdENvbnRleHQgPSBuZXcgUGFnZUxvYWRSZXF1ZXN0Q29udGV4dCh0aGlzLmFjdGl2ZUZpbHRlciwgdGhpcy5fcGFnaW5hdGlvbik7XG4gICAgICAgICAgICByZXF1ZXN0Q29udGV4dC5wYWdpbmF0aW9uLm51bWJlciArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nUmVsZXZhbnRGaWx0ZXIocmVxdWVzdENvbnRleHQpIHx8IHRoaXMuX2VuZE9mRGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbmRlcmVkUmFuZ2UuZW5kID09PSB0b3RhbExvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdGVkUGFnZSQubmV4dChyZXF1ZXN0Q29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTG9hZGluZ1JlbGV2YW50RmlsdGVyKHJlcXVlc3RDb250ZXh0PzogUGFnZUxvYWRSZXF1ZXN0Q29udGV4dCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcmVxdWVzdENvbnRleHQgPT09IHVuZGVmaW5lZCB8fCAodGhpcy5fbG9hZGluZyQuaXNBY3RpdmVXaXRoRmlsdGVyKHJlcXVlc3RDb250ZXh0LmZpbHRlcikgJiYgIXJlcXVlc3RDb250ZXh0LmZvcmNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVsb2FkKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3Rhc2tzJCB8fCAhdGhpcy5fcGFnaW5hdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZW5kT2ZEYXRhID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RDb250ZXh0ID0gbmV3IFBhZ2VMb2FkUmVxdWVzdENvbnRleHQodGhpcy5hY3RpdmVGaWx0ZXIsIHRoaXMuX3BhZ2luYXRpb24sIHRydWUpO1xuICAgICAgICByZXF1ZXN0Q29udGV4dC5wYWdpbmF0aW9uLm51bWJlciA9IDA7XG4gICAgICAgIGNvbnN0IHJhbmdlID0ge1xuICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgZW5kOiAwXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5uZXh0UGFnZShyYW5nZSwgMCwgcmVxdWVzdENvbnRleHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWxvYWRDdXJyZW50UGFnZShmb3JjZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrcyQgfHwgIXRoaXMuX3BhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VuZE9mRGF0YSA9IGZhbHNlO1xuICAgICAgICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IG5ldyBQYWdlTG9hZFJlcXVlc3RDb250ZXh0KHRoaXMuYWN0aXZlRmlsdGVyLCB0aGlzLl9wYWdpbmF0aW9uLCBmYWxzZSwgdHJ1ZSwgZm9yY2UpO1xuICAgICAgICByZXF1ZXN0Q29udGV4dC5wYWdpbmF0aW9uLm51bWJlciA9IDA7IC8vIFRPRE8gW0JVR10gLSBSZWxvYWRpbmcgb25seSBmaXJzdCBwYWdlXG4gICAgICAgIGNvbnN0IHJhbmdlID0ge1xuICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgZW5kOiAwXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmV4dFBhZ2UocmFuZ2UsIDAsIHJlcXVlc3RDb250ZXh0KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0TWV0YUZpZWxkU29ydElkKCk6IHN0cmluZyB7XG4gICAgICAgIC8vIFRPRE8gVGFza3Mgd2VyZSBub3Qgc29ydGFibGUgb24gb2xkIGZyb250ZW5kIHNvcnRpbmcgbWlnaHQgcmVxdWlyZSBlbGFzdGljIG1hcHBpbmcgY2hhbmdlcyBvbiBiYWNrZW5kXG4gICAgICAgIHJldHVybiB0aGlzLl9sYXN0SGVhZGVyU2VhcmNoU3RhdGUuZmllbGRJZGVudGlmaWVyO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXREZWZhdWx0U29ydFBhcmFtKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAncHJpb3JpdHksZGVzYyc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFkZFBhZ2VQYXJhbXMocGFyYW1zOiBIdHRwUGFyYW1zLCBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uKTogSHR0cFBhcmFtcyB7XG4gICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3NpemUnLCBwYWdpbmF0aW9uLnNpemUgKyAnJyk7XG4gICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3BhZ2UnLCBwYWdpbmF0aW9uLm51bWJlciArICcnKTtcbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG59XG4iXX0=
335
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay12aWV3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUvIiwic291cmNlcyI6WyJsaWIvdmlldy90YXNrLXZpZXcvc2VydmljZS90YXNrLXZpZXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQWdCLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVsRyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUM3RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDaEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUdoRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDNUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBRXRFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUVyRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRixPQUFPLEVBQUMsc0JBQXNC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LENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxLQUFHLFVBQVUsQ0FBQyxNQUFRLENBQUMsQ0FBQztRQUMxRSxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDOztnQkFyU21DLG1CQUFtQjtnQkFDckIsV0FBVztnQkFDUCxlQUFlO2dCQUNyQixnQkFBZ0I7Z0JBQ1YsYUFBYTtnQkFDekIsYUFBYTtnQkFDRixxQkFBcUI7Z0JBQ3BDLDBCQUEwQjtnREFDbkMsUUFBUSxZQUFJLE1BQU0sU0FBQywyQkFBMkI7Z0RBQzlDLFFBQVEsWUFBSSxNQUFNLFNBQUMsMkJBQTJCOzs7Z0JBL0I5RCxVQUFVOzs7Z0JBN0JILG1CQUFtQjtnQkFDbkIsV0FBVztnQkFDWCxlQUFlO2dCQUNmLGdCQUFnQjtnQkFLaEIsYUFBYTtnQkFDYixhQUFhO2dCQUViLHFCQUFxQjtnQkFTckIsMEJBQTBCO2dCQVIxQixZQUFZLHVCQStDSCxRQUFRLFlBQUksTUFBTSxTQUFDLDJCQUEyQjtnREFDOUMsUUFBUSxZQUFJLE1BQU0sU0FBQywyQkFBMkI7O0lBNlIvRCxzQkFBQztDQUFBLEFBNVRELENBQ3FDLFlBQVksR0EyVGhEO1NBM1RZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUYXNrUGFuZWxEYXRhfSBmcm9tICcuLi8uLi8uLi9wYW5lbC90YXNrLXBhbmVsLWxpc3QvdGFzay1wYW5lbC1kYXRhL3Rhc2stcGFuZWwtZGF0YSc7XG5pbXBvcnQge1Rhc2tSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvdGFzay1yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7U25hY2tCYXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zbmFjay1iYXIvc2VydmljZXMvc25hY2stYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgY29uY2F0TWFwLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHNjYW4sIHN3aXRjaE1hcCwgdGFrZSwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0h0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7UGFnaW5hdGlvbn0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdpbmF0aW9uJztcbmltcG9ydCB7VGFza30gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS90YXNrJztcbmltcG9ydCB7U2VhcmNoU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VhcmNoL3NlYXJjaC1zZXJ2aWNlL3NlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7TGlzdFJhbmdlfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHtVc2VyQ29tcGFyYXRvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci1jb21wYXJhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtUYXNrRW5kcG9pbnR9IGZyb20gJy4uL21vZGVscy90YXNrLWVuZHBvaW50JztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdlJztcbmltcG9ydCB7TkFFX1BSRUZFUlJFRF9UQVNLX0VORFBPSU5UfSBmcm9tICcuLi9tb2RlbHMvaW5qZWN0aW9uLXRva2VuLXRhc2stZW5kcG9pbnQnO1xuaW1wb3J0IHtQYWdlTG9hZFJlcXVlc3RDb250ZXh0fSBmcm9tICcuLi8uLi9hYnN0cmFjdC9wYWdlLWxvYWQtcmVxdWVzdC1jb250ZXh0JztcbmltcG9ydCB7RmlsdGVyfSBmcm9tICcuLi8uLi8uLi9maWx0ZXIvbW9kZWxzL2ZpbHRlcic7XG5pbXBvcnQge1Rhc2tQYWdlTG9hZFJlcXVlc3RSZXN1bHR9IGZyb20gJy4uL21vZGVscy90YXNrLXBhZ2UtbG9hZC1yZXF1ZXN0LXJlc3VsdCc7XG5pbXBvcnQge0xvYWRpbmdXaXRoRmlsdGVyRW1pdHRlcn0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0eS9sb2FkaW5nLXdpdGgtZmlsdGVyLWVtaXR0ZXInO1xuaW1wb3J0IHthcnJheVRvT2JzZXJ2YWJsZX0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0eS9hcnJheS10by1vYnNlcnZhYmxlJztcbmltcG9ydCB7U2VhcmNoSW5kZXhSZXNvbHZlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlYXJjaC9zZWFyY2gta2V5d29yZC1yZXNvbHZlci1zZXJ2aWNlL3NlYXJjaC1pbmRleC1yZXNvbHZlci5zZXJ2aWNlJztcbmltcG9ydCB7U29ydGFibGVWaWV3fSBmcm9tICcuLi8uLi9hYnN0cmFjdC9zb3J0YWJsZS12aWV3JztcbmltcG9ydCB7TkFFX1RBU0tfVklFV19DT05GSUdVUkFUSU9OfSBmcm9tICcuLi9tb2RlbHMvdGFzay12aWV3LWNvbmZpZ3VyYXRpb24taW5qZWN0aW9uLXRva2VuJztcbmltcG9ydCB7VGFza1ZpZXdDb25maWd1cmF0aW9ufSBmcm9tICcuLi9tb2RlbHMvdGFzay12aWV3LWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtDaGFuZ2VkRmllbGRzTWFwfSBmcm9tICcuLi8uLi8uLi9ldmVudC9zZXJ2aWNlcy9pbnRlcmZhY2VzL2NoYW5nZWQtZmllbGRzLW1hcCc7XG5pbXBvcnQge1BhZ2luYXRpb25QYXJhbXN9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLXBhcmFtcyc7XG5pbXBvcnQge2NyZWF0ZVNvcnRQYXJhbSwgUGFnaW5hdGlvblNvcnR9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLXNvcnQnO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUYXNrVmlld1NlcnZpY2UgZXh0ZW5kcyBTb3J0YWJsZVZpZXcgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgcHJvdGVjdGVkIF90YXNrcyQ6IE9ic2VydmFibGU8QXJyYXk8VGFza1BhbmVsRGF0YT4+O1xuICAgIHByb3RlY3RlZCBfY2hhbmdlZEZpZWxkcyQ6IFN1YmplY3Q8Q2hhbmdlZEZpZWxkc01hcD47XG4gICAgcHJvdGVjdGVkIF9yZXF1ZXN0ZWRQYWdlJDogQmVoYXZpb3JTdWJqZWN0PFBhZ2VMb2FkUmVxdWVzdENvbnRleHQ+O1xuICAgIHByb3RlY3RlZCBfbG9hZGluZyQ6IExvYWRpbmdXaXRoRmlsdGVyRW1pdHRlcjtcbiAgICBwcm90ZWN0ZWQgX2VuZE9mRGF0YTogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgX3BhZ2luYXRpb246IFBhZ2luYXRpb247XG4gICAgcHJvdGVjdGVkIF9pbml0aWFsbHlPcGVuT25lVGFzazogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgX2Nsb3NlVGFza1RhYk9uTm9UYXNrczogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgX3BhbmVsVXBkYXRlJDogQmVoYXZpb3JTdWJqZWN0PEFycmF5PFRhc2tQYW5lbERhdGE+PjtcbiAgICBwcm90ZWN0ZWQgX2Nsb3NlVGFiJDogUmVwbGF5U3ViamVjdDx2b2lkPjtcbiAgICBwcm90ZWN0ZWQgX3N1YkluaXRpYWxseU9wZW46IFN1YnNjcmlwdGlvbjtcbiAgICBwcm90ZWN0ZWQgX3N1YkNsb3NlVGFzazogU3Vic2NyaXB0aW9uO1xuICAgIHByb3RlY3RlZCBfc3ViU2VhcmNoOiBTdWJzY3JpcHRpb247XG5cbiAgICAvLyBTZXJpYWxpemluZyBhc3NpZ24gYWZ0ZXIgY2FuY2VsXG4gICAgcHJvdGVjdGVkIF9hbGxvd011bHRpT3BlbjogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2luaXRpYWxpemluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3Rhc2tTZXJ2aWNlOiBUYXNrUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9zbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9zZWFyY2hTZXJ2aWNlOiBTZWFyY2hTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF91c2VyQ29tcGFyYXRvcjogVXNlckNvbXBhcmF0b3JTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHJlc29sdmVyOiBTZWFyY2hJbmRleFJlc29sdmVyU2VydmljZSxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BRV9QUkVGRVJSRURfVEFTS19FTkRQT0lOVCkgcHJvdGVjdGVkIHJlYWRvbmx5IF9wcmVmZXJyZWRFbmRwb2ludDogVGFza0VuZHBvaW50ID0gbnVsbCxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BRV9UQVNLX1ZJRVdfQ09ORklHVVJBVElPTikgdGFza1ZpZXdDb25maWc6IFRhc2tWaWV3Q29uZmlndXJhdGlvbiA9IG51bGwpIHtcbiAgICAgICAgc3VwZXIocmVzb2x2ZXIpO1xuICAgICAgICB0aGlzLl90YXNrcyQgPSBuZXcgU3ViamVjdDxBcnJheTxUYXNrUGFuZWxEYXRhPj4oKTtcbiAgICAgICAgdGhpcy5fbG9hZGluZyQgPSBuZXcgTG9hZGluZ1dpdGhGaWx0ZXJFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZWRGaWVsZHMkID0gbmV3IFN1YmplY3Q8Q2hhbmdlZEZpZWxkc01hcD4oKTtcbiAgICAgICAgdGhpcy5fYWxsb3dNdWx0aU9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLl9lbmRPZkRhdGEgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbiA9IHtcbiAgICAgICAgICAgIHNpemU6IDUwLFxuICAgICAgICAgICAgdG90YWxFbGVtZW50czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdG90YWxQYWdlczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbnVtYmVyOiAtMVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9yZXF1ZXN0ZWRQYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFnZUxvYWRSZXF1ZXN0Q29udGV4dD4oXG4gICAgICAgICAgICBuZXcgUGFnZUxvYWRSZXF1ZXN0Q29udGV4dCh0aGlzLmFjdGl2ZUZpbHRlciwgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcGFnaW5hdGlvbiwge251bWJlcjogMH0pKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9wYW5lbFVwZGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PFRhc2tQYW5lbERhdGE+PihbXSk7XG4gICAgICAgIHRoaXMuX2Nsb3NlVGFiJCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuICAgICAgICB0aGlzLl9wcmVmZXJyZWRFbmRwb2ludCA9IHRhc2tWaWV3Q29uZmlnPy5wcmVmZXJyZWRFbmRwb2ludCA/PyAodGhpcy5fcHJlZmVycmVkRW5kcG9pbnQgPz8gVGFza0VuZHBvaW50Lk1PTkdPKTtcblxuICAgICAgICB0aGlzLl9pbml0aWFsaXppbmcgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9zdWJTZWFyY2ggPSB0aGlzLl9zZWFyY2hTZXJ2aWNlLmFjdGl2ZUZpbHRlciQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHRhc2tzTWFwJCA9IHRoaXMuX3JlcXVlc3RlZFBhZ2UkLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcChwID0+IHRoaXMubG9hZFBhZ2UocCkpLFxuICAgICAgICAgICAgbWFwKHBhZ2VMb2FkUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGFnZUxvYWRSZXN1bHQucmVxdWVzdENvbnRleHQgJiYgcGFnZUxvYWRSZXN1bHQucmVxdWVzdENvbnRleHQuY2xlYXJMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2Ugc2V0IGFuIGVtcHR5IHZhbHVlIHRvIHRoZSB2aXJ0dWFsIHNjcm9sbCBhbmQgdGhlbiByZXBsYWNlIGl0IGJ5IHRoZSByZWFsIHZhbHVlIGZvcmNpbmcgaXQgdG8gcmVkcmF3IGl0cyBjb250ZW50XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbe3Rhc2tzOiB7fSwgcmVxdWVzdENvbnRleHQ6IG51bGx9LCBwYWdlTG9hZFJlc3VsdF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVRvT2JzZXJ2YWJsZShyZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YocGFnZUxvYWRSZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY29uY2F0TWFwKG8gPT4gbyksXG4gICAgICAgICAgICBzY2FuKChhY2MsIHBhZ2VMb2FkUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdDogeyBbazogc3RyaW5nXTogVGFza1BhbmVsRGF0YSB9O1xuICAgICAgICAgICAgICAgIGlmIChwYWdlTG9hZFJlc3VsdC5yZXF1ZXN0Q29udGV4dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFnZUxvYWRSZXN1bHQudGFza3M7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBhZ2VMb2FkUmVzdWx0LnJlcXVlc3RDb250ZXh0LnJlbG9hZEN1cnJlbnRUYXNrUGFnZSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhhY2MpLmZvckVhY2godGFza0lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFnZUxvYWRSZXN1bHQudGFza3NbdGFza0lkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhY2NbdGFza0lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUxvYWRSZXN1bHQudGFza3NbdGFza0lkXS50YXNrLmRhdGFHcm91cHMgPSBhY2NbdGFza0lkXS50YXNrLmRhdGFHcm91cHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUxvYWRSZXN1bHQudGFza3NbdGFza0lkXS5pbml0aWFsbHlFeHBhbmRlZCA9IGFjY1t0YXNrSWRdLmluaXRpYWxseUV4cGFuZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGFzayhhY2NbdGFza0lkXS50YXNrLCBwYWdlTG9hZFJlc3VsdC50YXNrc1t0YXNrSWRdLnRhc2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tUYXNrRmllbGRzKGFjY1t0YXNrSWRdLnRhc2ssICEoYWNjW3Rhc2tJZF0udGFzay51c2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuX3VzZXJDb21wYXJhdG9yLmNvbXBhcmVVc2VycyhhY2NbdGFza0lkXS50YXNrLnVzZXIpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhZ2VMb2FkUmVzdWx0LnRhc2tzW3Rhc2tJZF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBPYmplY3QuYXNzaWduKGFjYywgcGFnZUxvYWRSZXN1bHQudGFza3MpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHsuLi5hY2MsIC4uLnBhZ2VMb2FkUmVzdWx0LnRhc2tzfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuX3BhZ2luYXRpb24sIHBhZ2VMb2FkUmVzdWx0LnJlcXVlc3RDb250ZXh0LnBhZ2luYXRpb24pO1xuICAgICAgICAgICAgICAgIGlmIChwYWdlTG9hZFJlc3VsdC5yZXF1ZXN0Q29udGV4dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nJC5vZmYocGFnZUxvYWRSZXN1bHQucmVxdWVzdENvbnRleHQuZmlsdGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIHt9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl90YXNrcyQgPSB0YXNrc01hcCQucGlwZShcbiAgICAgICAgICAgIG1hcCh2ID0+IE9iamVjdC52YWx1ZXModikgYXMgQXJyYXk8VGFza1BhbmVsRGF0YT4pLFxuICAgICAgICAgICAgbWFwKHRhc2tBcnJheSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tBcnJheS5sZW5ndGggPT09IDEgJiYgdGhpcy5faW5pdGlhbGx5T3Blbk9uZVRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza0FycmF5WzBdLnRhc2suZmluaXNoRGF0ZSA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tBcnJheVswXS5pbml0aWFsbHlFeHBhbmRlZCA9IHRydWUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFza0FycmF5WzBdLmluaXRpYWxseUV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0YXNrQXJyYXk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCh2ID0+IHRoaXMuX3BhbmVsVXBkYXRlJC5uZXh0KHYpKSk7XG5cbiAgICAgICAgdGhpcy5fc3ViSW5pdGlhbGx5T3BlbiA9ICh0YXNrVmlld0NvbmZpZz8uaW5pdGlhbGx5T3Blbk9uZVRhc2sgPz8gb2YodHJ1ZSkpLnN1YnNjcmliZShib29sID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxseU9wZW5PbmVUYXNrID0gYm9vbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc3ViQ2xvc2VUYXNrID0gKHRhc2tWaWV3Q29uZmlnPy5jbG9zZVRhc2tUYWJPbk5vVGFza3MgPz8gb2YodHJ1ZSkpLnN1YnNjcmliZShib29sID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlVGFza1RhYk9uTm9UYXNrcyA9IGJvb2w7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkRmllbGRzJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0ZWRQYWdlJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9wYW5lbFVwZGF0ZSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fY2xvc2VUYWIkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX3N1YkluaXRpYWxseU9wZW4udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fc3ViQ2xvc2VUYXNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX3N1YlNlYXJjaC51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFza3MkKCk6IE9ic2VydmFibGU8QXJyYXk8VGFza1BhbmVsRGF0YT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rhc2tzJDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNoYW5nZWRGaWVsZHMkKCk6IFN1YmplY3Q8Q2hhbmdlZEZpZWxkc01hcD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbmdlZEZpZWxkcyQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmckLmlzQWN0aXZlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFuZWxVcGRhdGUoKTogT2JzZXJ2YWJsZTxBcnJheTxUYXNrUGFuZWxEYXRhPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFuZWxVcGRhdGUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY2xvc2VUYWIoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9zZVRhYiQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBhY3RpdmVGaWx0ZXIoKTogRmlsdGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFNlcnZpY2UuYWN0aXZlRmlsdGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYWxsb3dNdWx0aU9wZW4oYm9vbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9hbGxvd011bHRpT3BlbiA9IGJvb2w7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhbGxvd011bHRpT3BlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FsbG93TXVsdGlPcGVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkUGFnZShyZXF1ZXN0Q29udGV4dDogUGFnZUxvYWRSZXF1ZXN0Q29udGV4dCk6IE9ic2VydmFibGU8VGFza1BhZ2VMb2FkUmVxdWVzdFJlc3VsdD4ge1xuICAgICAgICBpZiAocmVxdWVzdENvbnRleHQgPT09IG51bGwgfHwgcmVxdWVzdENvbnRleHQucGFnZU51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBvZih7dGFza3M6IHt9LCByZXF1ZXN0Q29udGV4dH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXJhbXM6IEh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgICAgICBwYXJhbXMgPSB0aGlzLmFkZFNvcnRQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgcGFyYW1zID0gdGhpcy5hZGRQYWdlUGFyYW1zKHBhcmFtcywgcmVxdWVzdENvbnRleHQucGFnaW5hdGlvbik7XG4gICAgICAgIHRoaXMuX2xvYWRpbmckLm9uKHJlcXVlc3RDb250ZXh0LmZpbHRlcik7XG5cbiAgICAgICAgbGV0IHJlcXVlc3Q6IE9ic2VydmFibGU8UGFnZTxUYXNrPj47XG4gICAgICAgIGlmIChyZXF1ZXN0Q29udGV4dC5maWx0ZXIuYm9keUNvbnRhaW5zUXVlcnkoKSB8fCB0aGlzLl9wcmVmZXJyZWRFbmRwb2ludCA9PT0gVGFza0VuZHBvaW50LkVMQVNUSUMpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSB0aW1lcigyMDApLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX3Rhc2tTZXJ2aWNlLnNlYXJjaFRhc2socmVxdWVzdENvbnRleHQuZmlsdGVyLCBwYXJhbXMpLnBpcGUodGFrZSgxKSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHRoaXMuX3Rhc2tTZXJ2aWNlLmdldFRhc2tzKHJlcXVlc3RDb250ZXh0LmZpbHRlciwgcGFyYW1zKS5waXBlKHRha2UoMSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXF1ZXN0LnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdMb2FkaW5nIHRhc2tzIGhhcyBmYWlsZWQhJywgZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nJC5vZmYocmVxdWVzdENvbnRleHQuZmlsdGVyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2Yoe2NvbnRlbnQ6IFtdLCBwYWdpbmF0aW9uOiB7Li4udGhpcy5fcGFnaW5hdGlvbn19KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByID0gcmVxdWVzdENvbnRleHQuZmlsdGVyID09PSB0aGlzLl9zZWFyY2hTZXJ2aWNlLmFjdGl2ZUZpbHRlcjtcbiAgICAgICAgICAgICAgICBpZiAoIXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyQub2ZmKHJlcXVlc3RDb250ZXh0LmZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZygnUmVjZWl2ZWQgdGFza3MgcGFnZSBpcyBubyBsb25nZXIgcmVsZXZhbnQgc2luY2UgdGhlIGFjdGl2ZSBmaWx0ZXIgaGFzIGNoYW5nZWQgYmVmb3JlIGl0IGNvdWxkIGFycml2ZS4nXG4gICAgICAgICAgICAgICAgICAgICAgICArICcgRGlzY2FyZGluZy4uLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKHQgPT4ge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdENvbnRleHQucGFnaW5hdGlvbiwgdC5wYWdpbmF0aW9uKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYWdpbmF0aW9uLnRvdGFsRWxlbWVudHMgJiYgdGhpcy5fcGFnaW5hdGlvbi50b3RhbEVsZW1lbnRzID4gMFxuICAgICAgICAgICAgICAgICAgICAmJiB0LnBhZ2luYXRpb24udG90YWxFbGVtZW50cyA9PT0gMCAmJiAhQXJyYXkuaXNBcnJheSh0LmNvbnRlbnQpICYmIHRoaXMuX2Nsb3NlVGFza1RhYk9uTm9UYXNrcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZVRhYiQubmV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuZE9mRGF0YSA9ICFBcnJheS5pc0FycmF5KHQuY29udGVudClcbiAgICAgICAgICAgICAgICAgICAgfHwgdC5jb250ZW50Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICB8fCB0LnBhZ2luYXRpb24ubnVtYmVyID09PSB0LnBhZ2luYXRpb24udG90YWxQYWdlcztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKHRhc2tzID0+IEFycmF5LmlzQXJyYXkodGFza3MuY29udGVudCkgPyB0YXNrcyA6IHsuLi50YXNrcywgY29udGVudDogW119KSxcbiAgICAgICAgICAgIG1hcCh0YXNrcyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmNvbnRlbnQucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9ja1Rhc2tGaWVsZHMoY3VyciwgIShjdXJyLnVzZXIgJiYgdGhpcy5fdXNlckNvbXBhcmF0b3IuY29tcGFyZVVzZXJzKGN1cnIudXNlcikpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFjYywgW2N1cnIuc3RyaW5nSWRdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzazogY3VycixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkRmllbGRzOiB0aGlzLl9jaGFuZ2VkRmllbGRzJCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsbHlFeHBhbmRlZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCh0YXNrcyA9PiAoe3Rhc2tzLCByZXF1ZXN0Q29udGV4dH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVGFzayhvbGQ6IFRhc2ssIG5ld3c6IFRhc2spIHtcbiAgICAgICAgT2JqZWN0LmtleXMob2xkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5ld3cuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvbGRba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5rZXlzKG5ld3cpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChuZXd3W2tleV0gIT09IHVuZGVmaW5lZCAmJiBuZXd3W2tleV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvbGRba2V5XSA9IG5ld3dba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYmxvY2tUYXNrRmllbGRzKG9sZCwgIShvbGQudXNlciAmJiB0aGlzLl91c2VyQ29tcGFyYXRvci5jb21wYXJlVXNlcnMob2xkLnVzZXIpKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBibG9ja1Rhc2tGaWVsZHModGFzazogVGFzaywgYmxvY2s6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0YXNrLmRhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0YXNrLmRhdGFHcm91cHMuZm9yRWFjaChnID0+IGcuZmllbGRzLmZvckVhY2goZiA9PiBmLmJsb2NrID0gYmxvY2spKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV4dFBhZ2UocmVuZGVyZWRSYW5nZTogTGlzdFJhbmdlLCB0b3RhbExvYWRlZDogbnVtYmVyLCByZXF1ZXN0Q29udGV4dD86IFBhZ2VMb2FkUmVxdWVzdENvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHJlcXVlc3RDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3RDb250ZXh0ID0gbmV3IFBhZ2VMb2FkUmVxdWVzdENvbnRleHQodGhpcy5hY3RpdmVGaWx0ZXIsIHRoaXMuX3BhZ2luYXRpb24pO1xuICAgICAgICAgICAgcmVxdWVzdENvbnRleHQucGFnaW5hdGlvbi5udW1iZXIgKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ1JlbGV2YW50RmlsdGVyKHJlcXVlc3RDb250ZXh0KSB8fCB0aGlzLl9lbmRPZkRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW5kZXJlZFJhbmdlLmVuZCA9PT0gdG90YWxMb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RlZFBhZ2UkLm5leHQocmVxdWVzdENvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xvYWRpbmdSZWxldmFudEZpbHRlcihyZXF1ZXN0Q29udGV4dD86IFBhZ2VMb2FkUmVxdWVzdENvbnRleHQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3RDb250ZXh0ID09PSB1bmRlZmluZWQgfHwgKHRoaXMuX2xvYWRpbmckLmlzQWN0aXZlV2l0aEZpbHRlcihyZXF1ZXN0Q29udGV4dC5maWx0ZXIpICYmICFyZXF1ZXN0Q29udGV4dC5mb3JjZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbG9hZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrcyQgfHwgIXRoaXMuX3BhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VuZE9mRGF0YSA9IGZhbHNlO1xuICAgICAgICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IG5ldyBQYWdlTG9hZFJlcXVlc3RDb250ZXh0KHRoaXMuYWN0aXZlRmlsdGVyLCB0aGlzLl9wYWdpbmF0aW9uLCB0cnVlKTtcbiAgICAgICAgcmVxdWVzdENvbnRleHQucGFnaW5hdGlvbi5udW1iZXIgPSAwO1xuICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiAtMSxcbiAgICAgICAgICAgIGVuZDogMFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMubmV4dFBhZ2UocmFuZ2UsIDAsIHJlcXVlc3RDb250ZXh0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVsb2FkQ3VycmVudFBhZ2UoZm9yY2U/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fdGFza3MkIHx8ICF0aGlzLl9wYWdpbmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lbmRPZkRhdGEgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVxdWVzdENvbnRleHQgPSBuZXcgUGFnZUxvYWRSZXF1ZXN0Q29udGV4dCh0aGlzLmFjdGl2ZUZpbHRlciwgdGhpcy5fcGFnaW5hdGlvbiwgZmFsc2UsIHRydWUsIGZvcmNlKTtcbiAgICAgICAgcmVxdWVzdENvbnRleHQucGFnaW5hdGlvbi5udW1iZXIgPSAwOyAvLyBUT0RPIFtCVUddIC0gUmVsb2FkaW5nIG9ubHkgZmlyc3QgcGFnZVxuICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiAtMSxcbiAgICAgICAgICAgIGVuZDogMFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5leHRQYWdlKHJhbmdlLCAwLCByZXF1ZXN0Q29udGV4dCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE1ldGFGaWVsZFNvcnRJZCgpOiBzdHJpbmcge1xuICAgICAgICAvLyBUT0RPIFRhc2tzIHdlcmUgbm90IHNvcnRhYmxlIG9uIG9sZCBmcm9udGVuZCBzb3J0aW5nIG1pZ2h0IHJlcXVpcmUgZWxhc3RpYyBtYXBwaW5nIGNoYW5nZXMgb24gYmFja2VuZFxuICAgICAgICByZXR1cm4gdGhpcy5fbGFzdEhlYWRlclNlYXJjaFN0YXRlLmZpZWxkSWRlbnRpZmllcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFNvcnRQYXJhbSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gY3JlYXRlU29ydFBhcmFtKCdwcmlvcml0eScsIFBhZ2luYXRpb25Tb3J0LkRFU0NFTkRJTkcpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhZGRQYWdlUGFyYW1zKHBhcmFtczogSHR0cFBhcmFtcywgcGFnaW5hdGlvbjogUGFnaW5hdGlvbik6IEh0dHBQYXJhbXMge1xuICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KFBhZ2luYXRpb25QYXJhbXMuUEFHRV9TSVpFLCBgJHtwYWdpbmF0aW9uLnNpemV9YCk7XG4gICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoUGFnaW5hdGlvblBhcmFtcy5QQUdFX05VTUJFUiwgYCR7cGFnaW5hdGlvbi5udW1iZXJ9YCk7XG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxufVxuIl19