@c80/ui 1.0.34 → 1.0.35

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.
@@ -18,116 +18,103 @@ export class TableSelectionService {
18
18
  const selectedItems = signal(new Set());
19
19
  const selectAllChecked = signal(false);
20
20
  const selectAllIndeterminate = signal(false);
21
- const clearSelection = () => {
22
- selectedItems.set(new Set());
23
- updateSelectAllState();
21
+ return {
22
+ selectedItems: selectedItems.asReadonly(),
23
+ selectAllChecked: selectAllChecked.asReadonly(),
24
+ selectAllIndeterminate: selectAllIndeterminate.asReadonly(),
25
+ clearSelection: this.createClearSelectionFn(selectedItems, selectAllChecked, selectAllIndeterminate),
26
+ toggleSelectAll: this.createToggleSelectAllFn(selectedItems, selectAllChecked, selectAllIndeterminate),
27
+ toggleItemSelection: this.createToggleItemSelectionFn(selectedItems),
28
+ isItemSelected: this.createIsItemSelectedFn(selectedItems),
29
+ preserveSelection: this.createPreserveSelectionFn(selectedItems, selectAllChecked, selectAllIndeterminate),
30
+ getSelectedItems: this.createGetSelectedItemsFn(selectedItems),
24
31
  };
25
- const updateSelectAllState = () => {
26
- // Esta función será actualizada cuando se tengan los datos disponibles
32
+ }
33
+ createClearSelectionFn(selectedItems, selectAllChecked, selectAllIndeterminate) {
34
+ return () => {
35
+ selectedItems.set(new Set());
27
36
  selectAllChecked.set(false);
28
37
  selectAllIndeterminate.set(false);
29
38
  };
30
- const toggleSelectAll = (allItems) => {
39
+ }
40
+ createToggleSelectAllFn(selectedItems, selectAllChecked, selectAllIndeterminate) {
41
+ return (allItems) => {
31
42
  const currentSelection = selectedItems();
32
43
  if (currentSelection.size === allItems.length) {
33
- // Desmarcar todos los elementos
34
- clearSelection();
44
+ selectedItems.set(new Set());
45
+ selectAllChecked.set(false);
46
+ selectAllIndeterminate.set(false);
35
47
  }
36
48
  else {
37
- // Marcar todos los elementos
38
49
  const allIds = new Set(allItems.map(item => item['id']));
39
50
  selectedItems.set(allIds);
40
- updateSelectAllStateWithData(allItems);
51
+ this.updateSelectAllState(allItems, allIds.size, selectAllChecked, selectAllIndeterminate);
41
52
  }
42
53
  };
43
- const toggleItemSelection = (item, multiple) => {
54
+ }
55
+ createToggleItemSelectionFn(selectedItems) {
56
+ return (item, multiple) => {
44
57
  const id = item['id'];
45
58
  const currentSelection = new Set(selectedItems());
46
59
  if (!multiple) {
47
- // Selección simple: solo permitir un elemento seleccionado
48
60
  if (currentSelection.has(id)) {
49
- // Deseleccionar el elemento actual
50
61
  currentSelection.clear();
51
62
  }
52
63
  else {
53
- // Seleccionar solo este elemento
54
64
  currentSelection.clear();
55
65
  currentSelection.add(id);
56
66
  }
57
67
  }
58
68
  else if (currentSelection.has(id)) {
59
- // Selección múltiple: deseleccionar elemento existente
60
69
  currentSelection.delete(id);
61
70
  }
62
71
  else {
63
- // Selección múltiple: agregar nuevo elemento
64
72
  currentSelection.add(id);
65
73
  }
66
74
  selectedItems.set(currentSelection);
67
75
  };
68
- const isItemSelected = (item) => {
76
+ }
77
+ createIsItemSelectedFn(selectedItems) {
78
+ return (item) => {
69
79
  const id = item['id'];
70
80
  return selectedItems().has(id);
71
81
  };
72
- const updateSelectAllStateWithData = (allItems) => {
73
- const selectedCount = selectedItems().size;
74
- const totalCount = allItems.length;
75
- if (selectedCount === 0) {
76
- selectAllChecked.set(false);
77
- selectAllIndeterminate.set(false);
78
- }
79
- else if (selectedCount === totalCount) {
80
- selectAllChecked.set(true);
81
- selectAllIndeterminate.set(false);
82
- }
83
- else {
84
- selectAllChecked.set(false);
85
- selectAllIndeterminate.set(true);
86
- }
87
- };
88
- const preserveSelection = (newData) => {
82
+ }
83
+ createPreserveSelectionFn(selectedItems, selectAllChecked, selectAllIndeterminate) {
84
+ return (newData) => {
89
85
  const currentSelection = selectedItems();
90
86
  if (currentSelection.size === 0 || newData.length === 0) {
91
- // Si no hay selección o no hay datos, limpiar la selección
92
- clearSelection();
87
+ selectedItems.set(new Set());
88
+ selectAllChecked.set(false);
89
+ selectAllIndeterminate.set(false);
93
90
  return;
94
91
  }
95
- // Obtener los IDs disponibles en los nuevos datos
96
92
  const availableIds = new Set(newData.map(item => item['id']));
97
- // Filtrar la selección actual para mantener solo los IDs que aún existen
98
93
  const preservedSelection = new Set(Array.from(currentSelection).filter(id => availableIds.has(id)));
99
- // Actualizar la selección con los IDs preservados
100
94
  selectedItems.set(preservedSelection);
101
- updateSelectAllStateWithData(newData);
95
+ this.updateSelectAllState(newData, preservedSelection.size, selectAllChecked, selectAllIndeterminate);
102
96
  };
103
- const getSelectedItems = (allData) => {
97
+ }
98
+ createGetSelectedItemsFn(selectedItems) {
99
+ return (allData) => {
104
100
  const selectedIds = selectedItems();
105
101
  return allData.filter(item => selectedIds.has(item['id']));
106
102
  };
107
- // Redefinir updateSelectAllState con acceso a los datos
108
- const originalUpdateSelectAllState = updateSelectAllState;
109
- const updateSelectAllStateWrapper = (allItems) => {
110
- if (allItems) {
111
- updateSelectAllStateWithData(allItems);
112
- }
113
- else {
114
- originalUpdateSelectAllState();
115
- }
116
- };
117
- return {
118
- // Signals
119
- selectedItems: selectedItems.asReadonly(),
120
- selectAllChecked: selectAllChecked.asReadonly(),
121
- selectAllIndeterminate: selectAllIndeterminate.asReadonly(),
122
- // Métodos
123
- clearSelection,
124
- toggleSelectAll,
125
- toggleItemSelection,
126
- isItemSelected,
127
- preserveSelection,
128
- getSelectedItems,
129
- updateSelectAllState: updateSelectAllStateWrapper,
130
- };
103
+ }
104
+ updateSelectAllState(allItems, selectedCount, selectAllChecked, selectAllIndeterminate) {
105
+ const totalCount = allItems.length;
106
+ if (selectedCount === 0) {
107
+ selectAllChecked.set(false);
108
+ selectAllIndeterminate.set(false);
109
+ }
110
+ else if (selectedCount === totalCount) {
111
+ selectAllChecked.set(true);
112
+ selectAllIndeterminate.set(false);
113
+ }
114
+ else {
115
+ selectAllChecked.set(false);
116
+ selectAllIndeterminate.set(true);
117
+ }
131
118
  }
132
119
  /**
133
120
  * Emite los elementos seleccionados a través del EventEmitter proporcionado
@@ -148,4 +135,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
148
135
  providedIn: 'root'
149
136
  }]
150
137
  }] });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpL3NyYy9saWIvdGFibGUvdGFibGUtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWdCLE1BQU0sZUFBZSxDQUFDOztBQUdqRTs7Ozs7Ozs7R0FRRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUFFOUI7OztPQUdHO0lBQ0gsb0JBQW9CO1FBQ2hCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDakQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsTUFBTSxjQUFjLEdBQUcsR0FBUyxFQUFFO1lBQzlCLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLG9CQUFvQixFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDO1FBRUYsTUFBTSxvQkFBb0IsR0FBRyxHQUFTLEVBQUU7WUFDcEMsdUVBQXVFO1lBQ3ZFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDO1FBRUYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxRQUFhLEVBQVEsRUFBRTtZQUM1QyxNQUFNLGdCQUFnQixHQUFHLGFBQWEsRUFBRSxDQUFDO1lBRXpDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUMsZ0NBQWdDO2dCQUNoQyxjQUFjLEVBQUUsQ0FBQztZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JB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QkFBZ0IsQ0FBQyxVQUFVLEVBQUU7WUFDL0Msc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsVUFBVSxFQUFFO1lBRTNELFVBQVU7WUFDVixjQUFjO1lBQ2QsZUFBZTtZQUNmLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLGdCQUFnQjtZQUNoQixvQkFBb0IsRUFBRSwyQkFBMkI7U0FDcEQsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGFBQWEsQ0FDVCxjQUErRCxFQUMvRCxPQUFZLEVBQ1osaUJBQW9DO1FBRXBDLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQzt3R0FySlEscUJBQXFCOzRHQUFyQixxQkFBcUIsY0FGbEIsTUFBTTs7NEZBRVQscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRCB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xuXG4vKipcbiAqIFNlcnZpY2lvIHBhcmEgZ2VzdGlvbmFyIGxhIHNlbGVjY2nDs24gZGUgZWxlbWVudG9zIGVuIHRhYmxhcyBDODBcbiAqXG4gKiBNYW5lamE6XG4gKiAtIFNlbGVjY2nDs24gc2ltcGxlIHkgbcO6bHRpcGxlXG4gKiAtIEVzdGFkbyBkZSBzZWxlY2Npw7NuIGNvbXBsZXRhXG4gKiAtIFByZXNlcnZhY2nDs24gZGUgc2VsZWNjacOzbiB0cmFzIGFjdHVhbGl6YWNpb25lcyBkZSBkYXRvc1xuICogLSBFbWlzacOzbiBkZSBldmVudG9zIGRlIHNlbGVjY2nDs25cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVNlbGVjdGlvblNlcnZpY2Uge1xuXG4gICAgLyoqXG4gICAgICogSW5pY2lhbGl6YSBlbCBlc3RhZG8gZGUgc2VsZWNjacOzbiBwYXJhIHVuYSBudWV2YSB0YWJsYVxuICAgICAqIEByZXR1cm5zIE9iamV0byBjb24gc2lnbmFscyB5IG3DqXRvZG9zIGRlIHNlbGVjY2nDs25cbiAgICAgKi9cbiAgICBjcmVhdGVTZWxlY3Rpb25TdGF0ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gc2lnbmFsPFNldDxJRD4+KG5ldyBTZXQoKSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdEFsbENoZWNrZWQgPSBzaWduYWwoZmFsc2UpO1xuICAgICAgICBjb25zdCBzZWxlY3RBbGxJbmRldGVybWluYXRlID0gc2lnbmFsKGZhbHNlKTtcblxuICAgICAgICBjb25zdCBjbGVhclNlbGVjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMuc2V0KG5ldyBTZXQoKSk7XG4gICAgICAgICAgICB1cGRhdGVTZWxlY3RBbGxTdGF0ZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHVwZGF0ZVNlbGVjdEFsbFN0YXRlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgLy8gRXN0YSBmdW5jacOzbiBzZXLDoSBhY3R1YWxpemFkYSBjdWFuZG8gc2UgdGVuZ2FuIGxvcyBkYXRvcyBkaXNwb25pYmxlc1xuICAgICAgICAgICAgc2VsZWN0QWxsQ2hlY2tlZC5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHRvZ2dsZVNlbGVjdEFsbCA9IChhbGxJdGVtczogVFtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gc2VsZWN0ZWRJdGVtcygpO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5zaXplID09PSBhbGxJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyBEZXNtYXJjYXIgdG9kb3MgbG9zIGVsZW1lbnRvc1xuICAgICAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE1hcmNhciB0b2RvcyBsb3MgZWxlbWVudG9zXG4gICAgICAgICAgICAgICAgY29uc3QgYWxsSWRzID0gbmV3IFNldChhbGxJdGVtcy5tYXAoaXRlbSA9PiBpdGVtWydpZCddIGFzIElEKSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5zZXQoYWxsSWRzKTtcbiAgICAgICAgICAgICAgICB1cGRhdGVTZWxlY3RBbGxTdGF0ZVdpdGhEYXRhKGFsbEl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB0b2dnbGVJdGVtU2VsZWN0aW9uID0gKGl0ZW06IFQsIG11bHRpcGxlOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1bJ2lkJ10gYXMgSUQ7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gbmV3IFNldChzZWxlY3RlZEl0ZW1zKCkpO1xuXG4gICAgICAgICAgICBpZiAoIW11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgLy8gU2VsZWNjacOzbiBzaW1wbGU6IHNvbG8gcGVybWl0aXIgdW4gZWxlbWVudG8gc2VsZWNjaW9uYWRvXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24uaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBEZXNlbGVjY2lvbmFyIGVsIGVsZW1lbnRvIGFjdHVhbFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VsZWNjaW9uYXIgc29sbyBlc3RlIGVsZW1lbnRvXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi5hZGQoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFNlbGVjdGlvbi5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgICAgLy8gU2VsZWNjacOzbiBtw7psdGlwbGU6IGRlc2VsZWNjaW9uYXIgZWxlbWVudG8gZXhpc3RlbnRlXG4gICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi5kZWxldGUoaWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBTZWxlY2Npw7NuIG3Dumx0aXBsZTogYWdyZWdhciBudWV2byBlbGVtZW50b1xuICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uYWRkKGlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5zZXQoY3VycmVudFNlbGVjdGlvbik7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNJdGVtU2VsZWN0ZWQgPSAoaXRlbTogVCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtWydpZCddIGFzIElEO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMoKS5oYXMoaWQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHVwZGF0ZVNlbGVjdEFsbFN0YXRlV2l0aERhdGEgPSAoYWxsSXRlbXM6IFRbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IHNlbGVjdGVkSXRlbXMoKS5zaXplO1xuICAgICAgICAgICAgY29uc3QgdG90YWxDb3VudCA9IGFsbEl0ZW1zLmxlbmd0aDtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGxDaGVja2VkLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZENvdW50ID09PSB0b3RhbENvdW50KSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsQ2hlY2tlZC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGxDaGVja2VkLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlc2VydmVTZWxlY3Rpb24gPSAobmV3RGF0YTogVFtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gc2VsZWN0ZWRJdGVtcygpO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5zaXplID09PSAwIHx8IG5ld0RhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gU2kgbm8gaGF5IHNlbGVjY2nDs24gbyBubyBoYXkgZGF0b3MsIGxpbXBpYXIgbGEgc2VsZWNjacOzblxuICAgICAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBPYnRlbmVyIGxvcyBJRHMgZGlzcG9uaWJsZXMgZW4gbG9zIG51ZXZvcyBkYXRvc1xuICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlSWRzID0gbmV3IFNldChuZXdEYXRhLm1hcChpdGVtID0+IGl0ZW1bJ2lkJ10gYXMgSUQpKTtcblxuICAgICAgICAgICAgLy8gRmlsdHJhciBsYSBzZWxlY2Npw7NuIGFjdHVhbCBwYXJhIG1hbnRlbmVyIHNvbG8gbG9zIElEcyBxdWUgYcO6biBleGlzdGVuXG4gICAgICAgICAgICBjb25zdCBwcmVzZXJ2ZWRTZWxlY3Rpb24gPSBuZXcgU2V0KFxuICAgICAgICAgICAgICAgIEFycmF5LmZyb20oY3VycmVudFNlbGVjdGlvbikuZmlsdGVyKGlkID0+IGF2YWlsYWJsZUlkcy5oYXMoaWQpKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gQWN0dWFsaXphciBsYSBzZWxlY2Npw7NuIGNvbiBsb3MgSURzIHByZXNlcnZhZG9zXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnNldChwcmVzZXJ2ZWRTZWxlY3Rpb24pO1xuICAgICAgICAgICAgdXBkYXRlU2VsZWN0QWxsU3RhdGVXaXRoRGF0YShuZXdEYXRhKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBnZXRTZWxlY3RlZEl0ZW1zID0gKGFsbERhdGE6IFRbXSk6IFRbXSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgICAgIHJldHVybiBhbGxEYXRhLmZpbHRlcihpdGVtID0+IHNlbGVjdGVkSWRzLmhhcyhpdGVtWydpZCddIGFzIElEKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVkZWZpbmlyIHVwZGF0ZVNlbGVjdEFsbFN0YXRlIGNvbiBhY2Nlc28gYSBsb3MgZGF0b3NcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxVcGRhdGVTZWxlY3RBbGxTdGF0ZSA9IHVwZGF0ZVNlbGVjdEFsbFN0YXRlO1xuICAgICAgICBjb25zdCB1cGRhdGVTZWxlY3RBbGxTdGF0ZVdyYXBwZXIgPSAoYWxsSXRlbXM/OiBUW10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGlmIChhbGxJdGVtcykge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdEFsbFN0YXRlV2l0aERhdGEoYWxsSXRlbXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFVwZGF0ZVNlbGVjdEFsbFN0YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vIFNpZ25hbHNcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM6IHNlbGVjdGVkSXRlbXMuYXNSZWFkb25seSgpLFxuICAgICAgICAgICAgc2VsZWN0QWxsQ2hlY2tlZDogc2VsZWN0QWxsQ2hlY2tlZC5hc1JlYWRvbmx5KCksXG4gICAgICAgICAgICBzZWxlY3RBbGxJbmRldGVybWluYXRlOiBzZWxlY3RBbGxJbmRldGVybWluYXRlLmFzUmVhZG9ubHkoKSxcblxuICAgICAgICAgICAgLy8gTcOpdG9kb3NcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uLFxuICAgICAgICAgICAgdG9nZ2xlU2VsZWN0QWxsLFxuICAgICAgICAgICAgdG9nZ2xlSXRlbVNlbGVjdGlvbixcbiAgICAgICAgICAgIGlzSXRlbVNlbGVjdGVkLFxuICAgICAgICAgICAgcHJlc2VydmVTZWxlY3Rpb24sXG4gICAgICAgICAgICBnZXRTZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICAgdXBkYXRlU2VsZWN0QWxsU3RhdGU6IHVwZGF0ZVNlbGVjdEFsbFN0YXRlV3JhcHBlcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0ZSBsb3MgZWxlbWVudG9zIHNlbGVjY2lvbmFkb3MgYSB0cmF2w6lzIGRlbCBFdmVudEVtaXR0ZXIgcHJvcG9yY2lvbmFkb1xuICAgICAqIEBwYXJhbSBzZWxlY3Rpb25TdGF0ZSAtIEVzdGFkbyBkZSBzZWxlY2Npw7NuXG4gICAgICogQHBhcmFtIGFsbERhdGEgLSBUb2RvcyBsb3MgZGF0b3MgZGUgbGEgdGFibGFcbiAgICAgKiBAcGFyYW0gc2VsZWN0YWJsZUVtaXR0ZXIgLSBFdmVudEVtaXR0ZXIgcGFyYSBlbWl0aXIgbGEgc2VsZWNjacOzblxuICAgICAqL1xuICAgIGVtaXRTZWxlY3Rpb248VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgICAgc2VsZWN0aW9uU3RhdGU6IFJldHVyblR5cGU8dHlwZW9mIHRoaXMuY3JlYXRlU2VsZWN0aW9uU3RhdGU8VD4+LFxuICAgICAgICBhbGxEYXRhOiBUW10sXG4gICAgICAgIHNlbGVjdGFibGVFbWl0dGVyOiBFdmVudEVtaXR0ZXI8VFtdPlxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gc2VsZWN0aW9uU3RhdGUuZ2V0U2VsZWN0ZWRJdGVtcyhhbGxEYXRhKTtcbiAgICAgICAgc2VsZWN0YWJsZUVtaXR0ZXIuZW1pdChzZWxlY3RlZEl0ZW1zKTtcbiAgICB9XG59XG4iXX0=
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpL3NyYy9saWIvdGFibGUvdGFibGUtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWdCLE1BQU0sZUFBZSxDQUFDOztBQUdqRTs7Ozs7Ozs7R0FRRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUFFOUI7OztPQUdHO0lBQ0gsb0JBQW9CO1FBQ2hCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDakQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsT0FBTztZQUNILGFBQWEsRUFBRSxhQUFhLENBQUMsVUFBVSxFQUFFO1lBQ3pDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtZQUMvQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxVQUFVLEVBQUU7WUFDM0QsY0FBYyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUM7WUFDcEcsZUFBZSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUM7WUFDdEcsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGFBQWEsQ0FBQztZQUNwRSxjQUFjLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQztZQUMxRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDO1lBQzFHLGdCQUFnQixFQUFFLElBQUks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O1FBQ3JFLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxvQkFBb0IsQ0FDeEIsUUFBYSxFQUNiLGFBQXFCLEVBQ3JCLGdCQUFvRCxFQUNwRCxzQkFBMEQ7UUFFMUQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUVuQyxJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLGFBQWEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN0QyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0Isc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxDQUFDO1lBQ0osZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsYUFBYSxDQUNULGNBQTRELEVBQzVELE9BQVksRUFDWixpQkFBb0M7UUFFcEMsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBUSxDQUFDO1FBQ3RFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxQyxDQUFDO3dHQTVKUSxxQkFBcUI7NEdBQXJCLHFCQUFxQixjQUZsQixNQUFNOzs0RkFFVCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElEIH0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBnZXN0aW9uYXIgbGEgc2VsZWNjacOzbiBkZSBlbGVtZW50b3MgZW4gdGFibGFzIEM4MFxuICpcbiAqIE1hbmVqYTpcbiAqIC0gU2VsZWNjacOzbiBzaW1wbGUgeSBtw7psdGlwbGVcbiAqIC0gRXN0YWRvIGRlIHNlbGVjY2nDs24gY29tcGxldGFcbiAqIC0gUHJlc2VydmFjacOzbiBkZSBzZWxlY2Npw7NuIHRyYXMgYWN0dWFsaXphY2lvbmVzIGRlIGRhdG9zXG4gKiAtIEVtaXNpw7NuIGRlIGV2ZW50b3MgZGUgc2VsZWNjacOzblxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlU2VsZWN0aW9uU2VydmljZSB7XG5cbiAgICAvKipcbiAgICAgKiBJbmljaWFsaXphIGVsIGVzdGFkbyBkZSBzZWxlY2Npw7NuIHBhcmEgdW5hIG51ZXZhIHRhYmxhXG4gICAgICogQHJldHVybnMgT2JqZXRvIGNvbiBzaWduYWxzIHkgbcOpdG9kb3MgZGUgc2VsZWNjacOzblxuICAgICAqL1xuICAgIGNyZWF0ZVNlbGVjdGlvblN0YXRlPF9UIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gc2lnbmFsPFNldDxJRD4+KG5ldyBTZXQoKSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdEFsbENoZWNrZWQgPSBzaWduYWwoZmFsc2UpO1xuICAgICAgICBjb25zdCBzZWxlY3RBbGxJbmRldGVybWluYXRlID0gc2lnbmFsKGZhbHNlKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtczogc2VsZWN0ZWRJdGVtcy5hc1JlYWRvbmx5KCksXG4gICAgICAgICAgICBzZWxlY3RBbGxDaGVja2VkOiBzZWxlY3RBbGxDaGVja2VkLmFzUmVhZG9ubHkoKSxcbiAgICAgICAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGU6IHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUuYXNSZWFkb25seSgpLFxuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb246IHRoaXMuY3JlYXRlQ2xlYXJTZWxlY3Rpb25GbihzZWxlY3RlZEl0ZW1zLCBzZWxlY3RBbGxDaGVja2VkLCBzZWxlY3RBbGxJbmRldGVybWluYXRlKSxcbiAgICAgICAgICAgIHRvZ2dsZVNlbGVjdEFsbDogdGhpcy5jcmVhdGVUb2dnbGVTZWxlY3RBbGxGbihzZWxlY3RlZEl0ZW1zLCBzZWxlY3RBbGxDaGVja2VkLCBzZWxlY3RBbGxJbmRldGVybWluYXRlKSxcbiAgICAgICAgICAgIHRvZ2dsZUl0ZW1TZWxlY3Rpb246IHRoaXMuY3JlYXRlVG9nZ2xlSXRlbVNlbGVjdGlvbkZuKHNlbGVjdGVkSXRlbXMpLFxuICAgICAgICAgICAgaXNJdGVtU2VsZWN0ZWQ6IHRoaXMuY3JlYXRlSXNJdGVtU2VsZWN0ZWRGbihzZWxlY3RlZEl0ZW1zKSxcbiAgICAgICAgICAgIHByZXNlcnZlU2VsZWN0aW9uOiB0aGlzLmNyZWF0ZVByZXNlcnZlU2VsZWN0aW9uRm4oc2VsZWN0ZWRJdGVtcywgc2VsZWN0QWxsQ2hlY2tlZCwgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSksXG4gICAgICAgICAgICBnZXRTZWxlY3RlZEl0ZW1zOiB0aGlzLmNyZWF0ZUdldFNlbGVjdGVkSXRlbXNGbihzZWxlY3RlZEl0ZW1zKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNsZWFyU2VsZWN0aW9uRm4oXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxTZXQ8SUQ+Pj4sXG4gICAgICAgIHNlbGVjdEFsbENoZWNrZWQ6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxib29sZWFuPj4sXG4gICAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGU6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxib29sZWFuPj5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMuc2V0KG5ldyBTZXQoKSk7XG4gICAgICAgICAgICBzZWxlY3RBbGxDaGVja2VkLnNldChmYWxzZSk7XG4gICAgICAgICAgICBzZWxlY3RBbGxJbmRldGVybWluYXRlLnNldChmYWxzZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUb2dnbGVTZWxlY3RBbGxGbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8U2V0PElEPj4+LFxuICAgICAgICBzZWxlY3RBbGxDaGVja2VkOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8Ym9vbGVhbj4+LFxuICAgICAgICBzZWxlY3RBbGxJbmRldGVybWluYXRlOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8Ym9vbGVhbj4+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiAoYWxsSXRlbXM6IFRbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHNlbGVjdGVkSXRlbXMoKTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24uc2l6ZSA9PT0gYWxsSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5zZXQobmV3IFNldCgpKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGxDaGVja2VkLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGxJZHMgPSBuZXcgU2V0KGFsbEl0ZW1zLm1hcChpdGVtID0+IGl0ZW1bJ2lkJ10gYXMgSUQpKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnNldChhbGxJZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdGUoYWxsSXRlbXMsIGFsbElkcy5zaXplLCBzZWxlY3RBbGxDaGVja2VkLCBzZWxlY3RBbGxJbmRldGVybWluYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRvZ2dsZUl0ZW1TZWxlY3Rpb25GbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8U2V0PElEPj4+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiAoaXRlbTogVCwgbXVsdGlwbGU6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbVsnaWQnXSBhcyBJRDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSBuZXcgU2V0KHNlbGVjdGVkSXRlbXMoKSk7XG5cbiAgICAgICAgICAgIGlmICghbXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uYWRkKGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRTZWxlY3Rpb24uaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi5hZGQoaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnNldChjdXJyZW50U2VsZWN0aW9uKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUlzSXRlbVNlbGVjdGVkRm48VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgICAgc2VsZWN0ZWRJdGVtczogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFNldDxJRD4+PlxuICAgICkge1xuICAgICAgICByZXR1cm4gKGl0ZW06IFQpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbVsnaWQnXSBhcyBJRDtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1zKCkuaGFzKGlkKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVByZXNlcnZlU2VsZWN0aW9uRm48VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgICAgc2VsZWN0ZWRJdGVtczogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFNldDxJRD4+PixcbiAgICAgICAgc2VsZWN0QWxsQ2hlY2tlZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPGJvb2xlYW4+PixcbiAgICAgICAgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZTogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPGJvb2xlYW4+PlxuICAgICkge1xuICAgICAgICByZXR1cm4gKG5ld0RhdGE6IFRbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHNlbGVjdGVkSXRlbXMoKTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24uc2l6ZSA9PT0gMCB8fCBuZXdEYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMuc2V0KG5ldyBTZXQoKSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsQ2hlY2tlZC5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUlkcyA9IG5ldyBTZXQobmV3RGF0YS5tYXAoaXRlbSA9PiBpdGVtWydpZCddIGFzIElEKSk7XG4gICAgICAgICAgICBjb25zdCBwcmVzZXJ2ZWRTZWxlY3Rpb24gPSBuZXcgU2V0KFxuICAgICAgICAgICAgICAgIEFycmF5LmZyb20oY3VycmVudFNlbGVjdGlvbikuZmlsdGVyKGlkID0+IGF2YWlsYWJsZUlkcy5oYXMoaWQpKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5zZXQocHJlc2VydmVkU2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdGUobmV3RGF0YSwgcHJlc2VydmVkU2VsZWN0aW9uLnNpemUsIHNlbGVjdEFsbENoZWNrZWQsIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlR2V0U2VsZWN0ZWRJdGVtc0ZuPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxTZXQ8SUQ+Pj5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIChhbGxEYXRhOiBUW10pOiBUW10gPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBzZWxlY3RlZEl0ZW1zKCk7XG4gICAgICAgICAgICByZXR1cm4gYWxsRGF0YS5maWx0ZXIoaXRlbSA9PiBzZWxlY3RlZElkcy5oYXMoaXRlbVsnaWQnXSBhcyBJRCkpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2VsZWN0QWxsU3RhdGU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgICAgYWxsSXRlbXM6IFRbXSxcbiAgICAgICAgc2VsZWN0ZWRDb3VudDogbnVtYmVyLFxuICAgICAgICBzZWxlY3RBbGxDaGVja2VkOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8Ym9vbGVhbj4+LFxuICAgICAgICBzZWxlY3RBbGxJbmRldGVybWluYXRlOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8Ym9vbGVhbj4+XG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSBhbGxJdGVtcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHNlbGVjdEFsbENoZWNrZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUuc2V0KGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZENvdW50ID09PSB0b3RhbENvdW50KSB7XG4gICAgICAgICAgICBzZWxlY3RBbGxDaGVja2VkLnNldCh0cnVlKTtcbiAgICAgICAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUuc2V0KGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdEFsbENoZWNrZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdGUgbG9zIGVsZW1lbnRvcyBzZWxlY2Npb25hZG9zIGEgdHJhdsOpcyBkZWwgRXZlbnRFbWl0dGVyIHByb3BvcmNpb25hZG9cbiAgICAgKiBAcGFyYW0gc2VsZWN0aW9uU3RhdGUgLSBFc3RhZG8gZGUgc2VsZWNjacOzblxuICAgICAqIEBwYXJhbSBhbGxEYXRhIC0gVG9kb3MgbG9zIGRhdG9zIGRlIGxhIHRhYmxhXG4gICAgICogQHBhcmFtIHNlbGVjdGFibGVFbWl0dGVyIC0gRXZlbnRFbWl0dGVyIHBhcmEgZW1pdGlyIGxhIHNlbGVjY2nDs25cbiAgICAgKi9cbiAgICBlbWl0U2VsZWN0aW9uPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgICAgIHNlbGVjdGlvblN0YXRlOiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmNyZWF0ZVNlbGVjdGlvblN0YXRlPixcbiAgICAgICAgYWxsRGF0YTogVFtdLFxuICAgICAgICBzZWxlY3RhYmxlRW1pdHRlcjogRXZlbnRFbWl0dGVyPFRbXT5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGlvblN0YXRlLmdldFNlbGVjdGVkSXRlbXMoYWxsRGF0YSkgYXMgVFtdO1xuICAgICAgICBzZWxlY3RhYmxlRW1pdHRlci5lbWl0KHNlbGVjdGVkSXRlbXMpO1xuICAgIH1cbn1cbiJdfQ==