@hmcts/ccd-case-ui-toolkit 7.2.23-multiple-followup → 7.2.23-srt-rc1

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 (132) hide show
  1. package/esm2022/lib/app.config.mjs +1 -2
  2. package/esm2022/lib/components/form/date-input/date-input.component.mjs +56 -19
  3. package/esm2022/lib/shared/components/case-editor/case-edit/case-edit.component.mjs +3 -3
  4. package/esm2022/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.mjs +24 -3
  5. package/esm2022/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.mjs +6 -2
  6. package/esm2022/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.mjs +9 -5
  7. package/esm2022/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.mjs +9 -5
  8. package/esm2022/lib/shared/components/case-header/case-header.component.mjs +5 -5
  9. package/esm2022/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.mjs +9 -4
  10. package/esm2022/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.mjs +16 -3
  11. package/esm2022/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.mjs +20 -13
  12. package/esm2022/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.mjs +13 -9
  13. package/esm2022/lib/shared/components/case-viewer/services/event-trigger.resolver.mjs +4 -2
  14. package/esm2022/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.mjs +9 -5
  15. package/esm2022/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.mjs +9 -5
  16. package/esm2022/lib/shared/components/event-start/components/task-assigned/task-assigned.component.mjs +9 -5
  17. package/esm2022/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.mjs +9 -5
  18. package/esm2022/lib/shared/components/event-start/event-guard/event-start.guard.mjs +3 -3
  19. package/esm2022/lib/shared/components/event-start/services/event-start-state-machine.service.mjs +6 -6
  20. package/esm2022/lib/shared/components/palette/collection/read-collection-field.component.mjs +13 -10
  21. package/esm2022/lib/shared/components/palette/complex/read-complex-field-table.component.mjs +8 -8
  22. package/esm2022/lib/shared/components/palette/date/read-date-field.component.mjs +4 -4
  23. package/esm2022/lib/shared/components/palette/datetime-picker/datetime-picker.component.mjs +41 -10
  24. package/esm2022/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.mjs +2 -2
  25. package/esm2022/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-from-table.component.mjs +7 -7
  26. package/esm2022/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-to-table.component.mjs +7 -7
  27. package/esm2022/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.mjs +2 -2
  28. package/esm2022/lib/shared/components/palette/linked-cases/read-linked-cases-field.component.mjs +3 -3
  29. package/esm2022/lib/shared/components/palette/number/write-number-field.component.mjs +3 -3
  30. package/esm2022/lib/shared/components/palette/organisation/read-organisation-field-raw.component.mjs +21 -25
  31. package/esm2022/lib/shared/components/palette/organisation/read-organisation-field-table.component.mjs +21 -25
  32. package/esm2022/lib/shared/components/palette/palette.module.mjs +12 -3
  33. package/esm2022/lib/shared/components/palette/query-management/components/close-query/close-query.component.mjs +3 -3
  34. package/esm2022/lib/shared/components/palette/query-management/components/qualifying-questions/qualifying-question-detail/qualifying-question-detail.component.mjs +26 -15
  35. package/esm2022/lib/shared/components/palette/query-management/components/qualifying-questions/qualifying-question-options/qualifying-question-options.component.mjs +6 -2
  36. package/esm2022/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.mjs +50 -180
  37. package/esm2022/lib/shared/components/palette/query-management/components/query-confirmation/query-confirmation.component.mjs +22 -18
  38. package/esm2022/lib/shared/components/palette/query-management/components/query-details/query-details.component.mjs +2 -2
  39. package/esm2022/lib/shared/components/palette/query-management/components/query-list/query-list.component.mjs +2 -2
  40. package/esm2022/lib/shared/components/palette/query-management/components/query-write/query-write-raise-query/query-write-raise-query.component.mjs +59 -6
  41. package/esm2022/lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.mjs +44 -11
  42. package/esm2022/lib/shared/components/palette/query-management/constants/query-management.constants.mjs +7 -0
  43. package/esm2022/lib/shared/components/palette/query-management/models/query-list/query-list-item/query-list-item.model.mjs +32 -14
  44. package/esm2022/lib/shared/components/palette/query-management/read-query-management-field.component.mjs +4 -4
  45. package/esm2022/lib/shared/components/palette/query-management/services/index.mjs +2 -1
  46. package/esm2022/lib/shared/components/palette/query-management/services/query-management.service.mjs +179 -0
  47. package/esm2022/lib/shared/components/palette/query-management/utils/query-management.utils.mjs +5 -5
  48. package/esm2022/lib/shared/components/palette/utils/field-label.pipe.mjs +11 -3
  49. package/esm2022/lib/shared/components/search-result/search-result.component.mjs +1 -1
  50. package/esm2022/lib/shared/directives/index.mjs +2 -1
  51. package/esm2022/lib/shared/directives/welsh-translated-markdown/index.mjs +3 -0
  52. package/esm2022/lib/shared/directives/welsh-translated-markdown/welsh-translated-markdown.directive.mjs +104 -0
  53. package/esm2022/lib/shared/directives/welsh-translated-markdown/welsh-translated-markdown.module.mjs +21 -0
  54. package/esm2022/lib/shared/pipes/search-result/sorting/sort-search-result.pipe.mjs +2 -3
  55. package/esm2022/lib/shared/services/draft/draft.service.mjs +2 -2
  56. package/esm2022/lib/shared/services/form/field-type-sanitiser.mjs +38 -3
  57. package/esm2022/lib/shared/services/form/form-value.service.mjs +24 -1
  58. package/esm2022/lib/shared/services/search-result/sorting/search-result-view-item-comparator-factory.mjs +7 -8
  59. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs +1310 -820
  60. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
  61. package/lib/app.config.d.ts +0 -1
  62. package/lib/app.config.d.ts.map +1 -1
  63. package/lib/components/form/date-input/date-input.component.d.ts +4 -0
  64. package/lib/components/form/date-input/date-input.component.d.ts.map +1 -1
  65. package/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.d.ts +1 -0
  66. package/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.d.ts.map +1 -1
  67. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
  68. package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.d.ts +2 -0
  69. package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.d.ts.map +1 -1
  70. package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.d.ts +2 -0
  71. package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.d.ts.map +1 -1
  72. package/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.d.ts +2 -0
  73. package/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.d.ts.map +1 -1
  74. package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts +1 -0
  75. package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts.map +1 -1
  76. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -1
  77. package/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.d.ts +2 -0
  78. package/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.d.ts.map +1 -1
  79. package/lib/shared/components/case-viewer/services/event-trigger.resolver.d.ts.map +1 -1
  80. package/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.d.ts +2 -0
  81. package/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.d.ts.map +1 -1
  82. package/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.d.ts +2 -0
  83. package/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.d.ts.map +1 -1
  84. package/lib/shared/components/event-start/components/task-assigned/task-assigned.component.d.ts +2 -0
  85. package/lib/shared/components/event-start/components/task-assigned/task-assigned.component.d.ts.map +1 -1
  86. package/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.d.ts +2 -0
  87. package/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.d.ts.map +1 -1
  88. package/lib/shared/components/event-start/event-guard/event-start.guard.d.ts +2 -2
  89. package/lib/shared/components/event-start/event-guard/event-start.guard.d.ts.map +1 -1
  90. package/lib/shared/components/event-start/services/event-start-state-machine.service.d.ts.map +1 -1
  91. package/lib/shared/components/palette/collection/read-collection-field.component.d.ts +3 -1
  92. package/lib/shared/components/palette/collection/read-collection-field.component.d.ts.map +1 -1
  93. package/lib/shared/components/palette/date/read-date-field.component.d.ts.map +1 -1
  94. package/lib/shared/components/palette/datetime-picker/datetime-picker.component.d.ts +2 -0
  95. package/lib/shared/components/palette/datetime-picker/datetime-picker.component.d.ts.map +1 -1
  96. package/lib/shared/components/palette/palette.module.d.ts +18 -17
  97. package/lib/shared/components/palette/palette.module.d.ts.map +1 -1
  98. package/lib/shared/components/palette/query-management/components/qualifying-questions/qualifying-question-options/qualifying-question-options.component.d.ts +2 -0
  99. package/lib/shared/components/palette/query-management/components/qualifying-questions/qualifying-question-options/qualifying-question-options.component.d.ts.map +1 -1
  100. package/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.d.ts +15 -13
  101. package/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.d.ts.map +1 -1
  102. package/lib/shared/components/palette/query-management/components/query-confirmation/query-confirmation.component.d.ts +2 -0
  103. package/lib/shared/components/palette/query-management/components/query-confirmation/query-confirmation.component.d.ts.map +1 -1
  104. package/lib/shared/components/palette/query-management/components/query-write/query-write-raise-query/query-write-raise-query.component.d.ts +24 -3
  105. package/lib/shared/components/palette/query-management/components/query-write/query-write-raise-query/query-write-raise-query.component.d.ts.map +1 -1
  106. package/lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.d.ts +12 -3
  107. package/lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.d.ts.map +1 -1
  108. package/lib/shared/components/palette/query-management/constants/query-management.constants.d.ts +7 -0
  109. package/lib/shared/components/palette/query-management/constants/query-management.constants.d.ts.map +1 -0
  110. package/lib/shared/components/palette/query-management/models/query-list/query-list-item/query-list-item.model.d.ts.map +1 -1
  111. package/lib/shared/components/palette/query-management/services/index.d.ts +1 -0
  112. package/lib/shared/components/palette/query-management/services/index.d.ts.map +1 -1
  113. package/lib/shared/components/palette/query-management/services/query-management.service.d.ts +21 -0
  114. package/lib/shared/components/palette/query-management/services/query-management.service.d.ts.map +1 -0
  115. package/lib/shared/components/palette/utils/field-label.pipe.d.ts +1 -0
  116. package/lib/shared/components/palette/utils/field-label.pipe.d.ts.map +1 -1
  117. package/lib/shared/components/search-result/search-result.component.d.ts.map +1 -1
  118. package/lib/shared/directives/index.d.ts +1 -0
  119. package/lib/shared/directives/index.d.ts.map +1 -1
  120. package/lib/shared/directives/welsh-translated-markdown/index.d.ts +3 -0
  121. package/lib/shared/directives/welsh-translated-markdown/index.d.ts.map +1 -0
  122. package/lib/shared/directives/welsh-translated-markdown/welsh-translated-markdown.directive.d.ts +76 -0
  123. package/lib/shared/directives/welsh-translated-markdown/welsh-translated-markdown.directive.d.ts.map +1 -0
  124. package/lib/shared/directives/welsh-translated-markdown/welsh-translated-markdown.module.d.ts +8 -0
  125. package/lib/shared/directives/welsh-translated-markdown/welsh-translated-markdown.module.d.ts.map +1 -0
  126. package/lib/shared/pipes/search-result/sorting/sort-search-result.pipe.d.ts.map +1 -1
  127. package/lib/shared/services/form/field-type-sanitiser.d.ts +5 -0
  128. package/lib/shared/services/form/field-type-sanitiser.d.ts.map +1 -1
  129. package/lib/shared/services/form/form-value.service.d.ts +1 -0
  130. package/lib/shared/services/form/form-value.service.d.ts.map +1 -1
  131. package/lib/shared/services/search-result/sorting/search-result-view-item-comparator-factory.d.ts.map +1 -1
  132. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
1
  import { Injectable } from '@angular/core';
2
+ import { isEqual } from 'underscore';
2
3
  import * as i0 from "@angular/core";
3
4
  export class FieldTypeSanitiser {
4
5
  static FIELD_TYPE_COMPLEX = 'Complex';
@@ -7,6 +8,7 @@ export class FieldTypeSanitiser {
7
8
  static FIELD_TYPE_DYNAMIC_RADIO_LIST = 'DynamicRadioList';
8
9
  static FIELD_TYPE_DYNAMIC_MULTISELECT_LIST = 'DynamicMultiSelectList';
9
10
  static DYNAMIC_LIST_TYPE = ['DynamicList', 'DynamicRadioList', 'DynamicMultiSelectList'];
11
+ static DATE_FORMAT = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z$/;
10
12
  /**
11
13
  * This method finds dynamiclists in a form and replaces their string
12
14
  * values, with a JSON object, as below:
@@ -40,6 +42,7 @@ export class FieldTypeSanitiser {
40
42
  this.sanitiseLists(caseField.field_type.complex_fields, data[caseField.id]);
41
43
  break;
42
44
  case FieldTypeSanitiser.FIELD_TYPE_COLLECTION:
45
+ this.synchronizeCasefieldWithData(caseField, data);
43
46
  if (Array.isArray(data[caseField.id])) {
44
47
  data[caseField.id].forEach((formElement) => {
45
48
  this.sanitiseLists(caseField.field_type.collection_field_type.complex_fields, formElement.value);
@@ -49,6 +52,38 @@ export class FieldTypeSanitiser {
49
52
  }
50
53
  });
51
54
  }
55
+ synchronizeCasefieldWithData(caseField, data) {
56
+ for (const field in caseField._value) {
57
+ for (const id in data[caseField.id]) {
58
+ if (caseField._value[field]?.id === data[caseField.id][id]?.id) {
59
+ this.updateFieldValues(caseField._value[field].value, data[caseField.id][id]?.value);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ updateFieldValues(caseFieldValue, dataValue) {
65
+ for (const key in dataValue) {
66
+ if ((typeof caseFieldValue[key] === 'object')) {
67
+ if (!isEqual(caseFieldValue[key], dataValue[key])) {
68
+ this.updateObjectValue(caseFieldValue[key], dataValue[key]);
69
+ }
70
+ }
71
+ else {
72
+ this.updatePrimitiveValue(caseFieldValue, key, dataValue[key]);
73
+ }
74
+ }
75
+ }
76
+ updateObjectValue(formattedObject, dataObject) {
77
+ // we only want to update the value if there is a list_items property
78
+ if ((formattedObject?.value !== dataObject) && (formattedObject.list_items)) {
79
+ formattedObject.value = dataObject;
80
+ }
81
+ }
82
+ updatePrimitiveValue(caseFieldValue, key, dataValue) {
83
+ if ((!caseFieldValue[key]) || (caseFieldValue[key] !== dataValue)) {
84
+ caseFieldValue[key] = dataValue;
85
+ }
86
+ }
52
87
  ensureDynamicMultiSelectListPopulated(caseFields) {
53
88
  return caseFields.map((field) => {
54
89
  if (field.field_type.type !== 'Complex') {
@@ -89,7 +124,7 @@ export class FieldTypeSanitiser {
89
124
  const values = data[field.id];
90
125
  if (Array.isArray(values)) {
91
126
  const listItems = this.getListItems(field);
92
- const matches = listItems.filter(item => values.map(v => v.code).indexOf(item.code) !== -1);
127
+ const matches = listItems.filter((item) => values.map((v) => v.code).indexOf(item.code) !== -1);
93
128
  data[field.id] = {
94
129
  value: matches,
95
130
  list_items: listItems
@@ -100,7 +135,7 @@ export class FieldTypeSanitiser {
100
135
  const stringValue = data[field.id];
101
136
  if (typeof stringValue === 'string') {
102
137
  const listItems = this.getListItems(field);
103
- const matches = listItems.filter(value => value?.code === stringValue);
138
+ const matches = listItems.filter((value) => value?.code === stringValue);
104
139
  if (matches && matches.length > 0) {
105
140
  data[field.id] = {
106
141
  value: matches[0],
@@ -126,4 +161,4 @@ export class FieldTypeSanitiser {
126
161
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FieldTypeSanitiser, [{
127
162
  type: Injectable
128
163
  }], null, null); })();
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtdHlwZS1zYW5pdGlzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL2Zvcm0vZmllbGQtdHlwZS1zYW5pdGlzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLGtCQUFrQjtJQUN0QixNQUFNLENBQVUsa0JBQWtCLEdBQWtCLFNBQVMsQ0FBQztJQUM5RCxNQUFNLENBQVUscUJBQXFCLEdBQWtCLFlBQVksQ0FBQztJQUNwRSxNQUFNLENBQVUsdUJBQXVCLEdBQWtCLGFBQWEsQ0FBQztJQUN2RSxNQUFNLENBQVUsNkJBQTZCLEdBQWtCLGtCQUFrQixDQUFDO0lBQ2xGLE1BQU0sQ0FBVSxtQ0FBbUMsR0FBa0Isd0JBQXdCLENBQUM7SUFDOUYsTUFBTSxDQUFVLGlCQUFpQixHQUFvQixDQUFDLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQzFIOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSSxhQUFhLENBQUMsVUFBdUIsRUFBRSxJQUFTO1FBQ3JELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUNELFVBQVUsR0FBRyxJQUFJLENBQUMscUNBQXFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQy9CLDBDQUEwQztZQUMxQyxRQUFRLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLEtBQUssa0JBQWtCLENBQUMsbUNBQW1DO29CQUN6RCxJQUFJLENBQUMsK0JBQStCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFD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QUM7UUFDbkMsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7b0JBQ2YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLFVBQVUsRUFBRSxTQUFTO2lCQUN0QixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWdCO1FBQ25DLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQzFCLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDOUQsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs0R0EvSFUsa0JBQWtCO2dFQUFsQixrQkFBa0IsV0FBbEIsa0JBQWtCOztpRkFBbEIsa0JBQWtCO2NBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9jYXNlLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9maWVsZC10eXBlLWVudW0ubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmllbGRUeXBlU2FuaXRpc2VyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSUVMRF9UWVBFX0NPTVBMRVg6IEZpZWxkVHlwZUVudW0gPSAnQ29tcGxleCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRklFTERfVFlQRV9DT0xMRUNUSU9OOiBGaWVsZFR5cGVFbnVtID0gJ0NvbGxlY3Rpb24nO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1RZUEVfRFlOQU1JQ19MSVNUOiBGaWVsZFR5cGVFbnVtID0gJ0R5bmFtaWNMaXN0JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSUVMRF9UWVBFX0RZTkFNSUNfUkFESU9fTElTVDogRmllbGRUeXBlRW51bSA9ICdEeW5hbWljUmFkaW9MaXN0JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSUVMRF9UWVBFX0RZTkFNSUNfTVVMVElTRUxFQ1RfTElTVDogRmllbGRUeXBlRW51bSA9ICdEeW5hbWljTXVsdGlTZWxlY3RMaXN0JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEWU5BTUlDX0xJU1RfVFlQRTogRmllbGRUeXBlRW51bVtdID0gWydEeW5hbWljTGlzdCcsICdEeW5hbWljUmFkaW9MaXN0JywgJ0R5bmFtaWNNdWx0aVNlbGVjdExpc3QnXTtcbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGZpbmRzIGR5bmFtaWNsaXN0cyBpbiBhIGZvcm0gYW5kIHJlcGxhY2VzIHRoZWlyIHN0cmluZ1xuICAgKiB2YWx1ZXMsIHdpdGggYSBKU09OIG9iamVjdCwgYXMgYmVsb3c6XG4gICAqIEZyb206ICd4eXonXG4gICAqIFRvICA6IHtcbiAgICogICB2YWx1ZTogeyBjb2RlOid4eXonLCBsYWJlbDonWFlaJyB9LFxuICAgKiAgIGxpc3RfaXRlbXM6IFtcbiAgICogICAgIHsgY29kZToneHl6JywgbGFiZWw6J1hZWid9LFxuICAgKiAgICAgeyBjb2RlOidhYmMnLCBsYWJlbDonQUJDJ31cbiAgICogICBdXG4gICAqIH1cbiAgICogQHBhcmFtIGNhc2VGaWVsZHMgVGhlIENhc2VGaWVsZHMgdG8gYXNzZXNzLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSBpbiB0aGUgZm9ybS5cbiAgICovXG4gIHB1YmxpYyBzYW5pdGlzZUxpc3RzKGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdLCBkYXRhOiBhbnkpIHtcbiAgICBpZiAoIWRhdGEgfHwgIWNhc2VGaWVsZHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FzZUZpZWxkcyA9IHRoaXMuZW5zdXJlRHluYW1pY011bHRpU2VsZWN0TGlzdFBvcHVsYXRlZChjYXNlRmllbGRzKTtcbiAgICBjYXNlRmllbGRzLmZvckVhY2goKGNhc2VGaWVsZCkgPT4ge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnN3aXRjaC1kZWZhdWx0XG4gICAgICBzd2l0Y2ggKGNhc2VGaWVsZC5maWVsZF90eXBlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVTYW5pdGlzZXIuRklFTERfVFlQRV9EWU5BTUlDX01VTFRJU0VMRUNUX0xJU1Q6XG4gICAgICAgICAgdGhpcy5jb252ZXJ0QXJyYXlUb0R5bmFtaWNMaXN0T3V0cHV0KGNhc2VGaWVsZCwgZGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRmllbGRUeXBlU2FuaXRpc2VyLkZJRUxEX1RZUEVfRFlOQU1JQ19SQURJT19MSVNUOlxuICAgICAgICBjYXNlIEZpZWxkVHlwZVNhbml0aXNlci5GSUVMRF9UWVBFX0RZTkFNSUNfTElTVDpcbiAgICAgICAgICB0aGlzLmNvbnZlcnRTdHJpbmdUb0R5bmFtaWNMaXN0T3V0cHV0KGNhc2VGaWVsZCwgZGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBGaWVsZFR5cGVTYW5pdGlzZXIuRklFTERfVFlQRV9DT01QTEVYOlxuICAgICAgICAgIHRoaXMuc2FuaXRpc2VMaXN0cyhjYXNlRmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgZGF0YVtjYXNlRmllbGQuaWRdKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEZpZWxkVHlwZVNhbml0aXNlci5GSUVMRF9UWVBFX0NPTExFQ1RJT046XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVtjYXNlRmllbGQuaWRdKSkge1xuICAgICAgICAgICAgZGF0YVtjYXNlRmllbGQuaWRdLmZvckVhY2goKGZvcm1FbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zYW5pdGlzZUxpc3RzKGNhc2VGaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgZm9ybUVsZW1lbnQudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGVuc3VyZUR5bmFtaWNNdWx0aVNlbGVjdExpc3RQb3B1bGF0ZWQoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiBDYXNlRmllbGRbXSB7XG4gICAgcmV0dXJuIGNhc2VGaWVsZHMubWFwKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUudHlwZSAhPT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNhc2VGaWVsZERhdGEgPSBmaWVsZC5fdmFsdWU7XG4gICAgICAvLyBQcm9jZXNzIGVhY2ggY29tcGxleCBmaWVsZFxuICAgICAgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5mb3JFYWNoKChjb21wbGV4RmllbGQpID0+IHtcbiAgICAgICAgaWYgKGNvbXBsZXhGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09IEZpZWxkVHlwZVNhbml0aXNlci5GSUVMRF9UWVBFX0NPTVBMRVgpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrTmVzdGVkRHluYW1pY0xpc3QoY29tcGxleEZpZWxkLCBjYXNlRmllbGREYXRhPy5bY29tcGxleEZpZWxkLmlkXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0R5bmFtaWNMaXN0KGNvbXBsZXhGaWVsZC5maWVsZF90eXBlLnR5cGUpICYmXG4gICAgICAgICAgY29tcGxleEZpZWxkLmRpc3BsYXlfY29udGV4dCAhPT0gJ0hJRERFTicgJiZcbiAgICAgICAgICBmaWVsZC5fdmFsdWU/Lltjb21wbGV4RmllbGQuaWRdXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbXBsZXhGaWVsZC5saXN0X2l0ZW1zID0gZmllbGQuX3ZhbHVlW2NvbXBsZXhGaWVsZC5pZF0/Lmxpc3RfaXRlbXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gRmluYWwgdHJhbnNmb3JtYXRpb246IGNvbnN0cnVjdCB1cGRhdGVkIGZpZWxkIG9iamVjdFxuICAgICAgcmV0dXJuIHsgLi4uZmllbGQsIGZpZWxkX3R5cGU6IHsgLi4uZmllbGQ/LmZpZWxkX3R5cGUgfSB9IGFzIENhc2VGaWVsZDtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNoZWNrTmVzdGVkRHluYW1pY0xpc3QoY2FzZUZpZWxkOiBDYXNlRmllbGQsIGZpZWxkRGF0YTogYW55ID0gbnVsbCk6IHZvaWQge1xuICAgIGNhc2VGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmZvckVhY2goKGNvbXBsZXhGaWVsZCkgPT4ge1xuICAgICAgaWYgKGNvbXBsZXhGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09IEZpZWxkVHlwZVNhbml0aXNlci5GSUVMRF9UWVBFX0NPTVBMRVgpIHtcbiAgICAgICAgdGhpcy5jaGVja05lc3RlZER5bmFtaWNMaXN0KGNvbXBsZXhGaWVsZCwgZmllbGREYXRhPy5bY29tcGxleEZpZWxkLmlkXSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNEeW5hbWljTGlzdChjb21wbGV4RmllbGQuZmllbGRfdHlwZS50eXBlKSAmJlxuICAgICAgICBjb21wbGV4RmllbGQuZGlzcGxheV9jb250ZXh0ICE9PSAnSElEREVOJyAmJlxuICAgICAgICBmaWVsZERhdGE/Lltjb21wbGV4RmllbGQuaWRdXG4gICAgICApIHtcbiAgICAgICAgY29tcGxleEZpZWxkLmxpc3RfaXRlbXMgPSBmaWVsZERhdGE/Lltjb21wbGV4RmllbGQuaWRdPy5saXN0X2l0ZW1zO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0R5bmFtaWNMaXN0KGZpZWxkVHlwZTogRmllbGRUeXBlRW51bSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBGaWVsZFR5cGVTYW5pdGlzZXIuRFlOQU1JQ19MSVNUX1RZUEUuaW5kZXhPZihmaWVsZFR5cGUpICE9PSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEFycmF5VG9EeW5hbWljTGlzdE91dHB1dChmaWVsZDogQ2FzZUZpZWxkLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBkYXRhW2ZpZWxkLmlkXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICBjb25zdCBsaXN0SXRlbXMgPSB0aGlzLmdldExpc3RJdGVtcyhmaWVsZCk7XG4gICAgICBjb25zdCBtYXRjaGVzID0gbGlzdEl0ZW1zLmZpbHRlcihpdGVtID0+IHZhbHVlcy5tYXAodiA9PiB2LmNvZGUpLmluZGV4T2YoaXRlbS5jb2RlKSAhPT0gLTEpO1xuXG4gICAgICBkYXRhW2ZpZWxkLmlkXSA9IHtcbiAgICAgICAgdmFsdWU6IG1hdGNoZXMsXG4gICAgICAgIGxpc3RfaXRlbXM6IGxpc3RJdGVtc1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRTdHJpbmdUb0R5bmFtaWNMaXN0T3V0cHV0KGZpZWxkOiBDYXNlRmllbGQsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gZGF0YVtmaWVsZC5pZF07XG4gICAgaWYgKHR5cGVvZiBzdHJpbmdWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGxpc3RJdGVtcyA9IHRoaXMuZ2V0TGlzdEl0ZW1zKGZpZWxkKTtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBsaXN0SXRlbXMuZmlsdGVyKHZhbHVlID0+IHZhbHVlPy5jb2RlID09PSBzdHJpbmdWYWx1ZSk7XG4gICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGF0YVtmaWVsZC5pZF0gPSB7XG4gICAgICAgICAgdmFsdWU6IG1hdGNoZXNbMF0sXG4gICAgICAgICAgbGlzdF9pdGVtczogbGlzdEl0ZW1zXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRMaXN0SXRlbXMoZmllbGQ6IENhc2VGaWVsZCk6IGFueVtdIHtcbiAgICBpZiAoZmllbGQpIHtcbiAgICAgIGlmIChmaWVsZC5saXN0X2l0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmaWVsZC5saXN0X2l0ZW1zO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLmZvcm1hdHRlZF92YWx1ZSAmJiBmaWVsZC5mb3JtYXR0ZWRfdmFsdWUubGlzdF9pdGVtcykge1xuICAgICAgICByZXR1cm4gZmllbGQuZm9ybWF0dGVkX3ZhbHVlLmxpc3RfaXRlbXM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxufVxuIl19
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtdHlwZS1zYW5pdGlzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL2Zvcm0vZmllbGQtdHlwZS1zYW5pdGlzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDOztBQUdyQyxNQUFNLE9BQU8sa0JBQWtCO0lBQ3RCLE1BQU0sQ0FBVSxrQkFBa0IsR0FBa0IsU0FBUyxDQUFDO0lBQzlELE1BQU0sQ0FBVSxxQkFBcUIsR0FBa0IsWUFBWSxDQUFDO0lBQ3BFLE1BQU0sQ0FBVSx1QkFBdUIsR0FBa0IsYUFBYSxDQUFDO0lBQ3ZFLE1BQU0sQ0FBVSw2QkFBNkIsR0FBa0Isa0JBQWtCLENBQUM7SUFDbEYsTUFBTSxDQUFVLG1DQUFtQyxHQUFrQix3QkFBd0IsQ0FBQztJQUM5RixNQUFNLENBQVUsaUJBQWlCLEdBQW9CLENBQUMsYUFBYSxFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDbkgsTUFBTSxDQUFVLFdBQVcsR0FBRyw4Q0FBOEMsQ0FBQztJQUNwRjs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0ksYUFBYSxDQUFDLFVBQXVCLEVBQUUsSUFBUztRQUNyRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDekIsT0FBTztRQUNULENBQUM7UUFDRCxVQUFVLEdBQUcsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUMvQiwwQ0FBMEM7WUFDMUMsUUFBUSxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNs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O2lCQUN0QixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWdCO1FBQ25DLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQzFCLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDOUQsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs0R0FyS1Usa0JBQWtCO2dFQUFsQixrQkFBa0IsV0FBbEIsa0JBQWtCOztpRkFBbEIsa0JBQWtCO2NBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9jYXNlLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9maWVsZC10eXBlLWVudW0ubW9kZWwnO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gJ3VuZGVyc2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmllbGRUeXBlU2FuaXRpc2VyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSUVMRF9UWVBFX0NPTVBMRVg6IEZpZWxkVHlwZUVudW0gPSAnQ29tcGxleCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRklFTERfVFlQRV9DT0xMRUNUSU9OOiBGaWVsZFR5cGVFbnVtID0gJ0NvbGxlY3Rpb24nO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1RZUEVfRFlOQU1JQ19MSVNUOiBGaWVsZFR5cGVFbnVtID0gJ0R5bmFtaWNMaXN0JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSUVMRF9UWVBFX0RZTkFNSUNfUkFESU9fTElTVDogRmllbGRUeXBlRW51bSA9ICdEeW5hbWljUmFkaW9MaXN0JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSUVMRF9UWVBFX0RZTkFNSUNfTVVMVElTRUxFQ1RfTElTVDogRmllbGRUeXBlRW51bSA9ICdEeW5hbWljTXVsdGlTZWxlY3RMaXN0JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEWU5BTUlDX0xJU1RfVFlQRTogRmllbGRUeXBlRW51bVtdID0gWydEeW5hbWljTGlzdCcsICdEeW5hbWljUmFkaW9MaXN0JywgJ0R5bmFtaWNNdWx0aVNlbGVjdExpc3QnXTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEQVRFX0ZPUk1BVCA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0uXFxkezN9WiQvOyAgXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBmaW5kcyBkeW5hbWljbGlzdHMgaW4gYSBmb3JtIGFuZCByZXBsYWNlcyB0aGVpciBzdHJpbmdcbiAgICogdmFsdWVzLCB3aXRoIGEgSlNPTiBvYmplY3QsIGFzIGJlbG93OlxuICAgKiBGcm9tOiAneHl6J1xuICAgKiBUbyAgOiB7XG4gICAqICAgdmFsdWU6IHsgY29kZToneHl6JywgbGFiZWw6J1hZWicgfSxcbiAgICogICBsaXN0X2l0ZW1zOiBbXG4gICAqICAgICB7IGNvZGU6J3h5eicsIGxhYmVsOidYWVonfSxcbiAgICogICAgIHsgY29kZTonYWJjJywgbGFiZWw6J0FCQyd9XG4gICAqICAgXVxuICAgKiB9XG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBDYXNlRmllbGRzIHRvIGFzc2Vzcy5cbiAgICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgaW4gdGhlIGZvcm0uXG4gICAqL1xuICBwdWJsaWMgc2FuaXRpc2VMaXN0cyhjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgZGF0YTogYW55KSB7XG4gICAgaWYgKCFkYXRhIHx8ICFjYXNlRmllbGRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhc2VGaWVsZHMgPSB0aGlzLmVuc3VyZUR5bmFtaWNNdWx0aVNlbGVjdExpc3RQb3B1bGF0ZWQoY2FzZUZpZWxkcyk7XG4gICAgY2FzZUZpZWxkcy5mb3JFYWNoKChjYXNlRmllbGQpID0+IHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpzd2l0Y2gtZGVmYXVsdFxuICAgICAgc3dpdGNoIChjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlKSB7XG4gICAgICAgIGNhc2UgRmllbGRUeXBlU2FuaXRpc2VyLkZJRUxEX1RZUEVfRFlOQU1JQ19NVUxUSVNFTEVDVF9MSVNUOlxuICAgICAgICAgIHRoaXMuY29udmVydEFycmF5VG9EeW5hbWljTGlzdE91dHB1dChjYXNlRmllbGQsIGRhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEZpZWxkVHlwZVNhbml0aXNlci5GSUVMRF9UWVBFX0RZTkFNSUNfUkFESU9fTElTVDpcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVTYW5pdGlzZXIuRklFTERfVFlQRV9EWU5BTUlDX0xJU1Q6XG4gICAgICAgICAgdGhpcy5jb252ZXJ0U3RyaW5nVG9EeW5hbWljTGlzdE91dHB1dChjYXNlRmllbGQsIGRhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgRmllbGRUeXBlU2FuaXRpc2VyLkZJRUxEX1RZUEVfQ09NUExFWDpcbiAgICAgICAgICB0aGlzLnNhbml0aXNlTGlzdHMoY2FzZUZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMsIGRhdGFbY2FzZUZpZWxkLmlkXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBGaWVsZFR5cGVTYW5pdGlzZXIuRklFTERfVFlQRV9DT0xMRUNUSU9OOlxuICAgICAgICAgIHRoaXMuc3luY2hyb25pemVDYXNlZmllbGRXaXRoRGF0YShjYXNlRmllbGQsIGRhdGEpO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbY2FzZUZpZWxkLmlkXSkpIHtcbiAgICAgICAgICAgIGRhdGFbY2FzZUZpZWxkLmlkXS5mb3JFYWNoKChmb3JtRWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2FuaXRpc2VMaXN0cyhjYXNlRmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMsIGZvcm1FbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzeW5jaHJvbml6ZUNhc2VmaWVsZFdpdGhEYXRhKGNhc2VGaWVsZDogQ2FzZUZpZWxkLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIGluIGNhc2VGaWVsZC5fdmFsdWUpIHtcbiAgICAgIGZvciAoY29uc3QgaWQgaW4gZGF0YVtjYXNlRmllbGQuaWRdKSB7XG4gICAgICAgIGlmIChjYXNlRmllbGQuX3ZhbHVlW2ZpZWxkXT8uaWQgPT09IGRhdGFbY2FzZUZpZWxkLmlkXVtpZF0/LmlkKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVGaWVsZFZhbHVlcyhjYXNlRmllbGQuX3ZhbHVlW2ZpZWxkXS52YWx1ZSwgZGF0YVtjYXNlRmllbGQuaWRdW2lkXT8udmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZpZWxkVmFsdWVzKGNhc2VGaWVsZFZhbHVlOiBhbnksIGRhdGFWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YVZhbHVlKSB7XG4gICAgICBpZiAoKHR5cGVvZiBjYXNlRmllbGRWYWx1ZVtrZXldID09PSAnb2JqZWN0Jykpe1xuICAgICAgICBpZiAoIWlzRXF1YWwoY2FzZUZpZWxkVmFsdWVba2V5XSwgZGF0YVZhbHVlW2tleV0pKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVPYmplY3RWYWx1ZShjYXNlRmllbGRWYWx1ZVtrZXldLCBkYXRhVmFsdWVba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlUHJpbWl0aXZlVmFsdWUoY2FzZUZpZWxkVmFsdWUsIGtleSwgZGF0YVZhbHVlW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVPYmplY3RWYWx1ZShmb3JtYXR0ZWRPYmplY3Q6IGFueSwgZGF0YU9iamVjdDogYW55KTogdm9pZCB7XG4gICAgLy8gd2Ugb25seSB3YW50IHRvIHVwZGF0ZSB0aGUgdmFsdWUgaWYgdGhlcmUgaXMgYSBsaXN0X2l0ZW1zIHByb3BlcnR5XG4gICAgaWYgKChmb3JtYXR0ZWRPYmplY3Q/LnZhbHVlICE9PSBkYXRhT2JqZWN0KSAmJiAoZm9ybWF0dGVkT2JqZWN0Lmxpc3RfaXRlbXMpKSB7XG4gICAgICBmb3JtYXR0ZWRPYmplY3QudmFsdWUgPSBkYXRhT2JqZWN0O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVQcmltaXRpdmVWYWx1ZShjYXNlRmllbGRWYWx1ZTogYW55LCBrZXk6IHN0cmluZywgZGF0YVZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoKCFjYXNlRmllbGRWYWx1ZVtrZXldKSB8fCAoY2FzZUZpZWxkVmFsdWVba2V5XSAhPT0gZGF0YVZhbHVlKSkge1xuICAgICAgY2FzZUZpZWxkVmFsdWVba2V5XSA9IGRhdGFWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZW5zdXJlRHluYW1pY011bHRpU2VsZWN0TGlzdFBvcHVsYXRlZChjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IENhc2VGaWVsZFtdIHtcbiAgICByZXR1cm4gY2FzZUZpZWxkcy5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS50eXBlICE9PSAnQ29tcGxleCcpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FzZUZpZWxkRGF0YSA9IGZpZWxkLl92YWx1ZTtcbiAgICAgIC8vIFByb2Nlc3MgZWFjaCBjb21wbGV4IGZpZWxkXG4gICAgICBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmZvckVhY2goKGNvbXBsZXhGaWVsZCkgPT4ge1xuICAgICAgICBpZiAoY29tcGxleEZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gRmllbGRUeXBlU2FuaXRpc2VyLkZJRUxEX1RZUEVfQ09NUExFWCkge1xuICAgICAgICAgIHRoaXMuY2hlY2tOZXN0ZWREeW5hbWljTGlzdChjb21wbGV4RmllbGQsIGNhc2VGaWVsZERhdGE/Lltjb21wbGV4RmllbGQuaWRdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRHluYW1pY0xpc3QoY29tcGxleEZpZWxkLmZpZWxkX3R5cGUudHlwZSkgJiZcbiAgICAgICAgICBjb21wbGV4RmllbGQuZGlzcGxheV9jb250ZXh0ICE9PSAnSElEREVOJyAmJlxuICAgICAgICAgIGZpZWxkLl92YWx1ZT8uW2NvbXBsZXhGaWVsZC5pZF1cbiAgICAgICAgKSB7XG4gICAgICAgICAgY29tcGxleEZpZWxkLmxpc3RfaXRlbXMgPSBmaWVsZC5fdmFsdWVbY29tcGxleEZpZWxkLmlkXT8ubGlzdF9pdGVtcztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBGaW5hbCB0cmFuc2Zvcm1hdGlvbjogY29uc3RydWN0IHVwZGF0ZWQgZmllbGQgb2JqZWN0XG4gICAgICByZXR1cm4geyAuLi5maWVsZCwgZmllbGRfdHlwZTogeyAuLi5maWVsZD8uZmllbGRfdHlwZSB9IH0gYXMgQ2FzZUZpZWxkO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja05lc3RlZER5bmFtaWNMaXN0KGNhc2VGaWVsZDogQ2FzZUZpZWxkLCBmaWVsZERhdGE6IGFueSA9IG51bGwpOiB2b2lkIHtcbiAgICBjYXNlRmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5mb3JFYWNoKChjb21wbGV4RmllbGQpID0+IHtcbiAgICAgIGlmIChjb21wbGV4RmllbGQuZmllbGRfdHlwZS50eXBlID09PSBGaWVsZFR5cGVTYW5pdGlzZXIuRklFTERfVFlQRV9DT01QTEVYKSB7XG4gICAgICAgIHRoaXMuY2hlY2tOZXN0ZWREeW5hbWljTGlzdChjb21wbGV4RmllbGQsIGZpZWxkRGF0YT8uW2NvbXBsZXhGaWVsZC5pZF0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRHluYW1pY0xpc3QoY29tcGxleEZpZWxkLmZpZWxkX3R5cGUudHlwZSkgJiZcbiAgICAgICAgY29tcGxleEZpZWxkLmRpc3BsYXlfY29udGV4dCAhPT0gJ0hJRERFTicgJiZcbiAgICAgICAgZmllbGREYXRhPy5bY29tcGxleEZpZWxkLmlkXVxuICAgICAgKSB7XG4gICAgICAgIGNvbXBsZXhGaWVsZC5saXN0X2l0ZW1zID0gZmllbGREYXRhPy5bY29tcGxleEZpZWxkLmlkXT8ubGlzdF9pdGVtcztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEeW5hbWljTGlzdChmaWVsZFR5cGU6IEZpZWxkVHlwZUVudW0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gRmllbGRUeXBlU2FuaXRpc2VyLkRZTkFNSUNfTElTVF9UWVBFLmluZGV4T2YoZmllbGRUeXBlKSAhPT0gLTE7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRBcnJheVRvRHluYW1pY0xpc3RPdXRwdXQoZmllbGQ6IENhc2VGaWVsZCwgZGF0YTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWVzID0gZGF0YVtmaWVsZC5pZF07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGhpcy5nZXRMaXN0SXRlbXMoZmllbGQpO1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGxpc3RJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHZhbHVlcy5tYXAoKHYpID0+IHYuY29kZSkuaW5kZXhPZihpdGVtLmNvZGUpICE9PSAtMSk7XG5cbiAgICAgIGRhdGFbZmllbGQuaWRdID0ge1xuICAgICAgICB2YWx1ZTogbWF0Y2hlcyxcbiAgICAgICAgbGlzdF9pdGVtczogbGlzdEl0ZW1zXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFN0cmluZ1RvRHluYW1pY0xpc3RPdXRwdXQoZmllbGQ6IENhc2VGaWVsZCwgZGF0YTogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgc3RyaW5nVmFsdWUgPSBkYXRhW2ZpZWxkLmlkXTtcbiAgICBpZiAodHlwZW9mIHN0cmluZ1ZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGhpcy5nZXRMaXN0SXRlbXMoZmllbGQpO1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGxpc3RJdGVtcy5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZT8uY29kZSA9PT0gc3RyaW5nVmFsdWUpO1xuICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRhdGFbZmllbGQuaWRdID0ge1xuICAgICAgICAgIHZhbHVlOiBtYXRjaGVzWzBdLFxuICAgICAgICAgIGxpc3RfaXRlbXM6IGxpc3RJdGVtc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGlzdEl0ZW1zKGZpZWxkOiBDYXNlRmllbGQpOiBhbnlbXSB7XG4gICAgaWYgKGZpZWxkKSB7XG4gICAgICBpZiAoZmllbGQubGlzdF9pdGVtcykge1xuICAgICAgICByZXR1cm4gZmllbGQubGlzdF9pdGVtcztcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5mb3JtYXR0ZWRfdmFsdWUgJiYgZmllbGQuZm9ybWF0dGVkX3ZhbHVlLmxpc3RfaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZvcm1hdHRlZF92YWx1ZS5saXN0X2l0ZW1zO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbn1cbiJdfQ==
@@ -270,6 +270,9 @@ export class FormValueService {
270
270
  if (Array.isArray(rawValue)) {
271
271
  return this.sanitiseArray(rawValue);
272
272
  }
273
+ if (FieldTypeSanitiser.DATE_FORMAT.test(rawValue)) {
274
+ return rawValue.replace(/Z$/, '');
275
+ }
273
276
  switch (typeof rawValue) {
274
277
  case 'object':
275
278
  return this.sanitiseObject(rawValue);
@@ -288,6 +291,26 @@ export class FormValueService {
288
291
  }
289
292
  }
290
293
  }
294
+ checkValuesSetInCollection(caseField, data) {
295
+ for (const field in data) {
296
+ const fieldId = data[field].id;
297
+ if (Array.isArray(caseField.data[fieldId])) {
298
+ for (const subField in caseField.data[fieldId]) {
299
+ if (data[field]?._value &&
300
+ typeof data[field]._value[subField] === 'object' &&
301
+ Object.keys(caseField.data[fieldId][subField] ?? {}).every((key) => key in data[field]._value[subField])) {
302
+ if (caseField.data[fieldId][subField] !== data[field]?._value[subField]) {
303
+ caseField.data[fieldId][subField] = data[field]._value[subField];
304
+ }
305
+ }
306
+ }
307
+ }
308
+ else if ((data[field]._value) && (caseField.data[fieldId] !== data[field]._value)) {
309
+ caseField.data[fieldId] = data[field]._value;
310
+ }
311
+ }
312
+ return caseField;
313
+ }
291
314
  // TODO refactor so that this and remove unnecessary fields have a common iterator that applies functions to each node visited
292
315
  removeNullLabels(data, caseFields) {
293
316
  if (data && caseFields && caseFields.length > 0) {
@@ -549,4 +572,4 @@ export class FormValueService {
549
572
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormValueService, [{
550
573
  type: Injectable
551
574
  }], () => [{ type: i1.FieldTypeSanitiser }], null); })();
552
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWx1ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9mb3JtL2Zvcm0tdmFsdWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQUc1RCxNQUFNLE9BQU8sZ0JBQWdCO0lBOExFO0lBN0w3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BbUdHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVE7UUFDbEQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEUsQ0FBQzthQUFNLElBQUksV0FBVyxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDOUQsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FB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QUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTs0QkFDOUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dDQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ2pELENBQUM7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksd0NBQXdDLENBQUMsSUFBWSxFQUFFLFVBQXVCO1FBQ25GLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hELFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7aUJBQzdGLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDbkIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUN2QyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQzswR0F4aUJVLGdCQUFnQjtnRUFBaEIsZ0JBQWdCLFdBQWhCLGdCQUFnQjs7aUZBQWhCLGdCQUFnQjtjQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDYXNlRmllbGQsIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmllbGRzVXRpbHMgfSBmcm9tICcuLi9maWVsZHMnO1xuaW1wb3J0IHsgRmllbGRUeXBlU2FuaXRpc2VyIH0gZnJvbSAnLi9maWVsZC10eXBlLXNhbml0aXNlcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGb3JtVmFsdWVTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEdldHMgdmFsdWUgb2YgYSBmaWVsZCBiYXNlZCBvbiBmaWVsZEtleSB3aGljaCBpcyBhIGRvdCBzZXBhcmF0ZWQgcmVmZXJlbmNlIHRvIHZhbHVlIGFuZCBjb2xsZWN0aW9uIGluZGV4LlxuICAgKiBUaGVyZSBhcmUgdHdvIGV4Y2VwdGlvbnM6XG4gICAqIDEpIEluIGNhc2Ugb2YgYSBtdWx0aXNlbGVjdCBiZWluZyBpZGVudGlmaWVkIGFzIGEgbGVhZiBhICctLS1MQUJFTCcgc3VmZml4IGlzIGFwcGVuZGVkIHRvIHRoZSBrZXkgYW5kIHZhbHVlcyBvZiB0aGF0IGtleSBhcmUgcmV0dXJuZWRcbiAgICogICAgICBmb3JtPSB7ICdsaXN0JzogWydjb2RlMScsICdjb2RlMiddLFxuICAgKiAgICAgICAgICAgICAgJ2xpc3QtLS1MQUJFTCc6IFsnbGFiZWwxJywgJ2xhYmVsMiddIH0sXG4gICAqICAgICAgZmllbGRLZXk9bGlzdCxcbiAgICogICAgICBjb2xJbmRleD0wLFxuICAgKiAgICAgIHZhbHVlPWxhYmVsMSwgbGFiZWwyXG4gICAqIDIpIEluIGNhc2Ugb2YgYSBjb2xsZWN0aW9uIG9mIHNpbXBsZSBmaWVsZHMgaXMgaWRlbnRpZmllZCBhcyBhIGxlYWYgYWxsIHZhbHVlcyBhcmUgam9pbmVkIHNlcGVyYXRlZCBieSBhIGNvbW1hXG4gICAqICAgICAgZm9ybT0geyAnY29sbGVjdGlvbic6IFt7ICd2YWx1ZSc6ICd2YWx1ZTEnIH0sIHsgJ3ZhbHVlJzogJ3ZhbHVlMicgfV0gfVxuICAgKiAgICAgIGZpZWxkS2V5PWNvbGxlY3Rpb25cbiAgICogICAgICBjb2xJbmRleD0xXG4gICAqICAgICAgdmFsdWU9dmFsdWUxLCB2YWx1ZTJcbiAgICpcbiAgICogT3RoZXIgZXhhbXBsZXM6XG4gICAqIDEpIHNpbXBsZSBmaWVsZCByZWZlcmVuY2U6IGZvcm09eyAnUGVyc29uRmlyc3ROYW1lJzogJ0pvaG4nIH0sIGZpZWxkS2V5PVBlcnNvbkZpcnN0TmFtZSwgdmFsdWU9Sm9oblxuICAgKiAyKSBjb21wbGV4IGZpZWxkIHJlZmVyZW5jZTpcbiAgICogICAgICBmb3JtPSB7IGNvbXBsZXgxJzogeyAnc2ltcGxlMTEnOiAndmFsdWUxMScsICdzaW1wbGUxMic6ICd2YWx1ZTEyJywgJ2NvbXBsZXgyJzogeyAnc2ltcGxlMjEnOiAndmFsdWUyMScgfSB9fSxcbiAgICogICAgICBmaWVsZEtleT1jb21wbGV4MS5jb21wbGV4Mi5zaW1wbGUyMVxuICAgKiAgICAgIGNvbEluZGV4PTAsXG4gICAqICAgICAgdmFsdWU9dmFsdWUyMVxuICAgKiAzKSBjb21wbGV4IGZpZWxkIHdpdGggY29sbGVjdGlvbiBmaWVsZCB3aXRoIGNvbXBsZXggZmllbGQgcmVmZXJlbmNlOlxuICAgKiAgICAgIGZvcm09IHsgJ2NvbXBsZXgxJzoge1xuICAgKiAgICAgICAgICAgICAgICdjb2xsZWN0aW9uMSc6IFtcbiAgICogICAgICAgICAgICAgICB7ICd2YWx1ZSc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgyJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUxJzogJ3ZhbHVlMScsXG4gICAqICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgzJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXg0Jzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMic6ICd2YWx1ZTEyJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgICAgeyAndmFsdWUnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICdjb21wbGV4Mic6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMSc6ICd2YWx1ZTInLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Myc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4NCc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTInOiAndmFsdWUyMSdcbiAgICogICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgICAgIHsgJ3ZhbHVlJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAnY29tcGxleDInOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTEnOiAndmFsdWUzJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAnY29tcGxleDMnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDQnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUyJzogJ3ZhbHVlMzEnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICBdfX1cbiAgICogICAgICBmaWVsZEtleT1jb21wbGV4MS5jb2xsZWN0aW9uMS5jb21wbGV4Mi5jb21wbGV4My5jb21wbGV4NC5zaW1wbGUyXG4gICAqICAgICAgY29sSW5kZXg9MixcbiAgICogICAgICB2YWx1ZT12YWx1ZTIxXG4gICAqIDQpIGNvbGxlY3Rpb24gb2YgY29tcGxleCB0eXBlc1xuICAgKiAgICAgIGZvcm09IHsgJ2NvbGxlY3Rpb24xJzogW1xuICAgKiAgICAgICAgICAgICAgIHsgJ3ZhbHVlJzogeydjb21wbGV4MSc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUxJzogJ3ZhbHVlMTEnLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgyJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDMnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTInOiAndmFsdWUxMidcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgKiAgICAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgICAgeyAndmFsdWUnOiB7J2NvbXBsZXgxJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTEnOiAndmFsdWUyMScsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDInOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Myc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMic6ICd2YWx1ZTIyJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAqICAgICAgICAgICAgICAgfSxcbiAgICogICAgICAgICAgICAgICB7ICd2YWx1ZSc6IHsnY29tcGxleDEnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMSc6ICd2YWx1ZTMxJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Mic6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgzJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUyJzogJ3ZhbHVlMzInXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgKiAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgXX1cbiAgICogICAgICBmaWVsZEtleT1jb2xsZWN0aW9uMS5jb21wbGV4MS5jb21wbGV4Mi5jb21wbGV4My5zaW1wbGUyXG4gICAqICAgICAgY29sSW5kZXg9MlxuICAgKiAgICAgIHZhbHVlPXZhbHVlMzJcbiAgICpcbiAgICogSWYga2V5IGlzIHBvaW50aW5nIGF0IGEgY29tcGxleCBvciBjb2xsZWN0aW9uIGxlYWYgKG5vdCBzaW1wbGUsIGNvbGxlY3Rpb24gb2Ygc2ltcGxlIG9yIG11bHRpc2VsZWN0IHR5cGVzKSB0aGVuIHVuZGVmaW5lZCBpcyByZXR1cm5lZC5cbiAgICogQWxzbyBubyBrZXkgcmVmZXJyaW5nIGEgbGVhZiB0aGF0IGlzIGNvbnRhaW5lZCB3aXRoaW4gY29sbGVjdGlvbiB3aWxsIGNvbnRhaW4gaW5kZXggbnVtYmVyLiBUaGUgaW5kZXggaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZVxuICAgKiBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEZpZWxkVmFsdWUoZm9ybSwgZmllbGRLZXksIGNvbEluZGV4KSB7XG4gICAgY29uc3QgZmllbGRJZHMgPSBmaWVsZEtleS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGN1cnJlbnRGaWVsZElkID0gZmllbGRJZHNbMF07XG4gICAgY29uc3QgY3VycmVudEZvcm0gPSBmb3JtW2N1cnJlbnRGaWVsZElkXTtcbiAgICBpZiAoRmllbGRzVXRpbHMuaXNNdWx0aVNlbGVjdFZhbHVlKGN1cnJlbnRGb3JtKSkge1xuICAgICAgcmV0dXJuIGZvcm1bY3VycmVudEZpZWxkSWQgKyBGaWVsZHNVdGlscy5MQUJFTF9TVUZGSVhdLmpvaW4oJywgJyk7XG4gICAgfSBlbHNlIGlmIChGaWVsZHNVdGlscy5pc0NvbGxlY3Rpb25PZlNpbXBsZVR5cGVzKGN1cnJlbnRGb3JtKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRGb3JtLm1hcChmaWVsZFZhbHVlID0+IGZpZWxkVmFsdWVbJ3ZhbHVlJ10pLmpvaW4oJywgJyk7XG4gICAgfSBlbHNlIGlmIChGaWVsZHNVdGlscy5pc0NvbGxlY3Rpb24oY3VycmVudEZvcm0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFZhbHVlKGN1cnJlbnRGb3JtW2NvbEluZGV4XVsndmFsdWUnXSwgZmllbGRJZHMuc2xpY2UoMSkuam9pbignLicpLCBjb2xJbmRleCk7XG4gICAgfSBlbHNlIGlmIChGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KGN1cnJlbnRGb3JtKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRWYWx1ZShjdXJyZW50Rm9ybSwgZmllbGRJZHMuc2xpY2UoMSkuam9pbignLicpLCBjb2xJbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdXJyZW50Rm9ybTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQSByZWN1cnNpdmUgbWV0aG9kIHRvIHJlbW92ZSBhbnl0aGluZyB3aXRoIGEgYC0tLUxBQkVMYCBzdWZmaXguXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHJlY3Vyc2UgdGhyb3VnaCBhbmQgcmVtb3ZlIE11bHRpU2VsZWN0IGxhYmVscy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVtb3ZlTXVsdGlTZWxlY3RMYWJlbHMoZGF0YTogYW55KTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YSkge1xuICAgICAgICAgIEZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlTXVsdGlTZWxlY3RMYWJlbHMoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAvLyBIYXZlIHdlIGZvdW5kIG9uZSBhIE11bHRpU2VsZWN0IGxhYmVsP1xuICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihGaWVsZHNVdGlscy5MQUJFTF9TVUZGSVgpID4gMCkge1xuICAgICAgICAgICAgLy8gSWYgc28sIHJlbW92ZSBpdC5cbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2tleV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIEZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlTXVsdGlTZWxlY3RMYWJlbHMoZGF0YVtrZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc1JlYWRPbmx5KGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmllbGQuZGlzcGxheV9jb250ZXh0ID8gZmllbGQuZGlzcGxheV9jb250ZXh0LnRvVXBwZXJDYXNlKCkgPT09ICdSRUFET05MWScgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzT3B0aW9uYWwoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaWVsZC5kaXNwbGF5X2NvbnRleHQgPyBmaWVsZC5kaXNwbGF5X2NvbnRleHQudG9VcHBlckNhc2UoKSA9PT0gJ09QVElPTkFMJyA6IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNMYWJlbChmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgIHJldHVybiBmaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdMYWJlbCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc0VtcHR5RGF0YShkYXRhOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgbGV0IGFsbEVtcHR5ID0gdHJ1ZTtcbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbcHJvcF07XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFsbEVtcHR5ID0gYWxsRW1wdHkgJiYgdGhpcy5pc0VtcHR5RGF0YSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFsbEVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWxsRW1wdHk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3VsZCB3ZSBjbGVhciBvdXQgb3B0aW9uYWwsIGVtcHR5LCBjb21wbGV4IG9iamVjdHM/XG4gICAqIEBwYXJhbSBjbGVhckVtcHR5IEZhbHNlIHByb3BlcnR5IGlmIHdlIHNpbXBseSB3YW50IHRvIHNraXAgaXQuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGFzc2VzcyBmb3IgXCJlbXB0aW5lc3NcIi5cbiAgICogQHBhcmFtIGZpZWxkIFRoZSBDYXNlRmllbGQgdGhhdCB3aWxsIHRlbGwgdXMgaWYgdGhpcyBpcyBvcHRpb25hbC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGNsZWFyT3B0aW9uYWxFbXB0eShjbGVhckVtcHR5OiBib29sZWFuLCBkYXRhOiBvYmplY3QsIGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICBpZiAoY2xlYXJFbXB0eSkge1xuICAgICAgcmV0dXJuIEZvcm1WYWx1ZVNlcnZpY2UuaXNPcHRpb25hbChmaWVsZCkgJiYgRm9ybVZhbHVlU2VydmljZS5pc0VtcHR5RGF0YShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmaWVsZFR5cGVTYW5pdGlzZXI6IEZpZWxkVHlwZVNhbml0aXNlcikge1xuICB9XG5cbiAgcHVibGljIHNhbml0aXNlKHJhd1ZhbHVlOiBvYmplY3QpOiBvYmplY3Qge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXNlT2JqZWN0KHJhd1ZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzYW5pdGlzZUNhc2VSZWZlcmVuY2UocmVmZXJlbmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIHN0cmlwIG5vbiBkaWdpdHNcbiAgICBjb25zdCBzOiBzdHJpbmcgPSByZWZlcmVuY2UucmVwbGFjZSgvW1xcRF0vZywgJycpO1xuICAgIGlmIChzLmxlbmd0aCA+IDE2KSB7XG4gICAgICByZXR1cm4gcy5zdWJzdHIocy5sZW5ndGggLSAxNiwgMTYpO1xuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXJDdXJyZW50UGFnZUZpZWxkcyhjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgZWRpdEZvcm06IGFueSk6IGFueSB7XG4gICAgY29uc3QgY2xvbmVGb3JtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlZGl0Rm9ybSkpO1xuICAgIE9iamVjdC5rZXlzKGNsb25lRm9ybVsnZGF0YSddKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChjYXNlRmllbGRzLmZpbmRJbmRleCgoZWxlbWVudCkgPT4gZWxlbWVudC5pZCA9PT0ga2V5KSA8IDApIHtcbiAgICAgICAgZGVsZXRlIGNsb25lRm9ybVsnZGF0YSddW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lRm9ybTtcbiAgfVxuXG4gIHB1YmxpYyBzYW5pdGlzZUR5bmFtaWNMaXN0cyhjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgZWRpdEZvcm06IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRUeXBlU2FuaXRpc2VyLnNhbml0aXNlTGlzdHMoY2FzZUZpZWxkcywgZWRpdEZvcm0uZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXNlT2JqZWN0KHJhd09iamVjdDogb2JqZWN0KTogb2JqZWN0IHtcbiAgICBpZiAoIXJhd09iamVjdCkge1xuICAgICAgcmV0dXJuIHJhd09iamVjdDtcbiAgICB9XG5cbiAgICBsZXQgc2FuaXRpc2VkT2JqZWN0ID0ge307XG4gICAgY29uc3QgZG9jdW1lbnRGaWVsZEtleXMgPSBbJ2RvY3VtZW50X3VybCcsICdkb2N1bWVudF9iaW5hcnlfdXJsJywgJ2RvY3VtZW50X2ZpbGVuYW1lJ107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcmF3T2JqZWN0KSB7XG4gICAgICAvLyBJZiB0aGUga2V5IGlzIG9uZSBvZiBkb2N1bWVudEZpZWxkS2V5cywgaXQgbWVhbnMgdGhlIGZpZWxkIGlzIG9mIERvY3VtZW50IHR5cGUuIElmIHRoZSB2YWx1ZSBvZiBhbnkgb2YgdGhlc2VcbiAgICAgIC8vIHByb3BlcnRpZXMgaXMgbnVsbCwgdGhlIGVudGlyZSBzYW5pdGlzZWQgb2JqZWN0IHRvIGJlIHJldHVybmVkIHNob3VsZCBiZSBudWxsXG4gICAgICBpZiAoZG9jdW1lbnRGaWVsZEtleXMuaW5kZXhPZihrZXkpID4gLTEgJiYgcmF3T2JqZWN0W2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgc2FuaXRpc2VkT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKCdDYXNlUmVmZXJlbmNlJyA9PT0ga2V5KSB7XG4gICAgICAgIHNhbml0aXNlZE9iamVjdFtrZXldID0gdGhpcy5zYW5pdGlzZVZhbHVlKHRoaXMuc2FuaXRpc2VDYXNlUmVmZXJlbmNlKFN0cmluZyhyYXdPYmplY3Rba2V5XSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNhbml0aXNlZE9iamVjdFtrZXldID0gdGhpcy5zYW5pdGlzZVZhbHVlKHJhd09iamVjdFtrZXldKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2FuaXRpc2VkT2JqZWN0W2tleV0pKSB7XG4gICAgICAgICAgLy8gSWYgdGhlICdzYW5pdGlzZWQnIGFycmF5IGlzIGVtcHR5LCB3aGVyZWFzIHRoZSBvcmlnaW5hbCBhcnJheSBoYWQgMSBvciBtb3JlIGl0ZW1zXG4gICAgICAgICAgLy8gZGVsZXRlIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZSBzYW5hdGlzZWQgb2JqZWN0XG4gICAgICAgICAgaWYgKHNhbml0aXNlZE9iamVjdFtrZXldLmxlbmd0aCA9PT0gMCAmJiByYXdPYmplY3Rba2V5XS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkZWxldGUgc2FuaXRpc2VkT2JqZWN0W2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzYW5pdGlzZWRPYmplY3Q7XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXNlQXJyYXkocmF3QXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghcmF3QXJyYXkpIHtcbiAgICAgIHJldHVybiByYXdBcnJheTtcbiAgICB9XG5cbiAgICByYXdBcnJheS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSkge1xuICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5zYW5pdGlzZVZhbHVlKGl0ZW0udmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRmlsdGVyIHRoZSBhcnJheSB0byBlbnN1cmUgb25seSB0cnV0aHkgdmFsdWVzIGFyZSByZXR1cm5lZDsgZG91YmxlLWJhbmcgb3BlcmF0b3IgcmV0dXJucyB0aGUgYm9vbGVhbiB0cnVlL2ZhbHNlXG4gICAgLy8gYXNzb2NpYXRpb24gb2YgYSB2YWx1ZS4gSW4gYWRkaXRpb24sIGlmIHRoZSBhcnJheSBjb250YWlucyBpdGVtcyB3aXRoIGEgXCJ2YWx1ZVwiIG9iamVjdCBwcm9wZXJ0eSwgcmV0dXJuIG9ubHlcbiAgICAvLyB0aG9zZSB3aG9zZSB2YWx1ZSBvYmplY3QgY29udGFpbnMgbm9uLWVtcHR5IHZhbHVlcywgaW5jbHVkaW5nIGZvciBhbnkgZGVzY2VuZGFudCBvYmplY3RzXG4gICAgcmV0dXJuIHJhd0FycmF5XG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gISFpdGVtKVxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgPyBGaWVsZHNVdGlscy5jb250YWluc05vbkVtcHR5VmFsdWVzKGl0ZW0udmFsdWUpIDogdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXNlVmFsdWUocmF3VmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmF3VmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGlzZUFycmF5KHJhd1ZhbHVlKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiByYXdWYWx1ZSkge1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpc2VPYmplY3QocmF3VmFsdWUpO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHJhd1ZhbHVlLnRyaW0oKTtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiBTdHJpbmcocmF3VmFsdWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHJhd1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbGVhck5vbkNhc2VGaWVsZHMoZGF0YTogb2JqZWN0LCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSkge1xuICAgIGZvciAoY29uc3QgZGF0YUtleSBpbiBkYXRhKSB7XG4gICAgICBpZiAoIWNhc2VGaWVsZHMuZmluZChjZiA9PiBjZi5pZCA9PT0gZGF0YUtleSkpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFbZGF0YUtleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyByZWZhY3RvciBzbyB0aGF0IHRoaXMgYW5kIHJlbW92ZSB1bm5lY2Vzc2FyeSBmaWVsZHMgaGF2ZSBhIGNvbW1vbiBpdGVyYXRvciB0aGF0IGFwcGxpZXMgZnVuY3Rpb25zIHRvIGVhY2ggbm9kZSB2aXNpdGVkXG4gIHB1YmxpYyByZW1vdmVOdWxsTGFiZWxzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IGRhdGEgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgZm9ybSB0aGF0J3Mgbm90IGluIHRoZSBjYXNlRmllbGRzXG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGNhc2VGaWVsZHMpIHtcbiAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmZpZWxkX3R5cGUudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnTGFiZWwnOlxuICAgICAgICAgICAgICAvLyBEZWxldGUgYW55IGxhYmVscyB0aGF0IGFyZSBudWxsXG4gICAgICAgICAgICAgIGlmICgoZGF0YVtmaWVsZC5pZF0gPT09IG51bGwpIHx8IChkYXRhW2ZpZWxkLmlkXSA9PT0gJycpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ29tcGxleCc6XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2UgYW5kIHJlbW92ZSBhbnl0aGluZyB1bm5lY2Vzc2FyeSBmcm9tIHdpdGhpbiBhIGNvbXBsZXggZmllbGQuXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlTnVsbExhYmVscyhkYXRhW2ZpZWxkLmlkXSwgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgICAgIC8vIEdldCBob2xkIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFjdHVhbGx5IGhhdmUgYSBjb2xsZWN0aW9uIHRvIHdvcmsgd2l0aC5cbiAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gJiYgQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGNvbXBsZXggb2JqZWN0LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaFxuICAgICAgICAgICAgICAgIC8vIGFuZCBjbGVhciB0aGVtIG91dC5cbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGVsZW1lbnRzIGFuZCByZW1vdmUgYW55IHVubmVjZXNzYXJ5IGZpZWxkcyB3aXRoaW4uXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZU51bGxMYWJlbHMoaXRlbSwgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZU51bGxMYWJlbHMoaXRlbS52YWx1ZSwgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBUT0RPIHJlZmFjdG9yIHNvIHRoYXQgdGhpcyBhbmQgcmVtb3ZlIHVubmVjZXNzYXJ5IGZpZWxkcyBoYXZlIGEgY29tbW9uIGl0ZXJhdG9yIHRoYXQgYXBwbGllcyBmdW5jdGlvbnMgdG8gZWFjaCBub2RlIHZpc2l0ZWRcbiAgcHVibGljIHJlbW92ZUVtcHR5RG9jdW1lbnRzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IGRhdGEgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgZm9ybSB0aGF0J3Mgbm90IGluIHRoZSBjYXNlRmllbGRzXG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGNhc2VGaWVsZHMpIHtcbiAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmZpZWxkX3R5cGUudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnQ29tcGxleCc6XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2UgYW5kIHJlbW92ZSBhbnkgZW1wdHkgZG9jdW1lbnRzIGZyb20gd2l0aGluIGEgY29tcGxleCBmaWVsZC5cbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eURvY3VtZW50cyhkYXRhW2ZpZWxkLmlkXSwgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgICAgIC8vIEdldCBob2xkIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFjdHVhbGx5IGhhdmUgYSBjb2xsZWN0aW9uIHRvIHdvcmsgd2l0aC5cbiAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gJiYgQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGNvbXBsZXggb2JqZWN0LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaFxuICAgICAgICAgICAgICAgIC8vIGFuZCBjbGVhciBvdXQgZW1wdHkgZG9jdW1lbnRzXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4Jykge1xuICAgICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBlbGVtZW50cyBhbmQgcmVtb3ZlIGFueSBlbXB0eSBkb2N1bWVudHMgd2l0aGluLlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eURvY3VtZW50cyhpdGVtLCBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlEb2N1bWVudHMoaXRlbS52YWx1ZSwgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0RvY3VtZW50JzpcbiAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoaXMgaXMgZXhlY3V0ZWQgb25seSBpZiB0aGUgRG9jdW1lbnQgZmllbGQgaXMgTk9UIGhpZGRlbiBhbmQgaXMgZW1wdHkgb2YgZGF0YTsgaGlkZGVuIERvY3VtZW50XG4gICAgICAgICAgICAgIC8vIGZpZWxkcyBhcmUgaGFuZGxlZCBieSB0aGUgZmlsdGVyUmF3Rm9ybVZhbHVlcygpIGZ1bmN0aW9uIGluIENhc2VFZGl0U3VibWl0IGNvbXBvbmVudFxuICAgICAgICAgICAgICBpZiAoZmllbGQuaGlkZGVuICE9PSB0cnVlICYmIEZvcm1WYWx1ZVNlcnZpY2UuaXNFbXB0eURhdGEoZGF0YVtmaWVsZC5pZF0pKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDbGVhciBvdXQgdW5uZWNlc3NhcnkgZmllbGRzIGZyb20gYSBkYXRhIG9iamVjdCwgYmFzZWQgb24gYW4gYXJyYXkgb2YgQ2FzZUZpZWxkcy5cbiAgICogVGhpcyBtZXRob2QgaXMgcmVjdXJzaXZlIGFuZCB3aWxsIGNhbGwgaXRzZWxmIGlmIGl0IGVuY291bnRlcnMgcGFydGljdWxhciBmaWVsZCB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIG9iamVjdCB0byBiZSB0aWRpZWQgdXAuXG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBDYXNlRmllbGRzIHRoYXQgbmVlZCB0byBiZSBjbGVhbmVkIHVwLlxuICAgKiBAcGFyYW0gY2xlYXJFbXB0eSBXaGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgY2xlYXIgb3V0IGVtcHR5LCBvcHRpb25hbCwgY29tcGxleCBvYmplY3RzLlxuICAgKiBAcGFyYW0gY2xlYXJOb25DYXNlIFdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBjbGVhciBvdXQgbm9uLWNhc2UgZmllbGRzIGF0IHRoZSB0b3AgbGV2ZWwuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlVW5uZWNlc3NhcnlGaWVsZHMoZGF0YTogb2JqZWN0LCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgY2xlYXJFbXB0eSA9IGZhbHNlLCBjbGVhck5vbkNhc2UgPSBmYWxzZSxcbiAgICBmcm9tUHJldmlvdXNQYWdlID0gZmFsc2UsIGN1cnJlbnRQYWdlQ2FzZUZpZWxkcyA9IFtdKTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBkYXRhIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGZvcm0gdGhhdCdzIG5vdCBpbiB0aGUgY2FzZUZpZWxkc1xuICAgICAgaWYgKGNsZWFyTm9uQ2FzZSkge1xuICAgICAgICB0aGlzLmNsZWFyTm9uQ2FzZUZpZWxkcyhkYXRhLCBjYXNlRmllbGRzKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgY2FzZUZpZWxkcykge1xuICAgICAgICBpZiAoIUZvcm1WYWx1ZVNlcnZpY2UuaXNMYWJlbChmaWVsZCkgJiYgRm9ybVZhbHVlU2VydmljZS5pc1JlYWRPbmx5KGZpZWxkKSkge1xuICAgICAgICAgIC8vIFJldGFpbiBhbnl0aGluZyB0aGF0IGlzIHJlYWRvbmx5IGFuZCBub3QgYSBsYWJlbC5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQuaGlkZGVuID09PSB0cnVlICYmIGZpZWxkLmRpc3BsYXlfY29udGV4dCAhPT0gJ0hJRERFTicgJiYgZmllbGQuZGlzcGxheV9jb250ZXh0ICE9PSAnSElEREVOX1RFTVAnICYmIGZpZWxkLmlkICE9PSAnY2FzZUxpbmtzJyAmJiAhZmllbGQucmV0YWluX2hpZGRlbl92YWx1ZSkge1xuICAgICAgICAgIC8vIERlbGV0ZSBhbnl0aGluZyB0aGF0IGlzIGhpZGRlbiAodGhhdCBpcyBOT1QgcmVhZG9ubHkpLCBhbmQgdGhhdFxuICAgICAgICAgIC8vIGhhc24ndCBoYWQgaXRzIGRpc3BsYXlfY29udGV4dCBvdmVycmlkZGVuIHRvIG1ha2UgaXQgaGlkZGVuLlxuICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5maWVsZF90eXBlKSB7XG4gICAgICAgICAgc3dpdGNoIChmaWVsZC5maWVsZF90eXBlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0xhYmVsJzpcbiAgICAgICAgICAgICAgLy8gRGVsZXRlIGFueSBsYWJlbHMuXG4gICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdEb2N1bWVudCc6XG4gICAgICAgICAgICAgIGlmIChGb3JtVmFsdWVTZXJ2aWNlLmlzRW1wdHlEYXRhKGRhdGFbZmllbGQuaWRdKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0NvbXBsZXgnOlxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZVVubmVjZXNzYXJ5RmllbGRzKGRhdGFbZmllbGQuaWRdLCBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLCBjbGVhckVtcHR5KTtcbiAgICAgICAgICAgICAgLy8gQWxzbyByZW1vdmUgYW55IG9wdGlvbmFsIGNvbXBsZXggb2JqZWN0cyB0aGF0IGFyZSBjb21wbGV0ZWx5IGVtcHR5LlxuICAgICAgICAgICAgICAvLyBFVUktNDI0NDogUml0ZXNoJ3MgZml4LCBwYXNzaW5nIHRydWUgaW5zdGVhZCBvZiBjbGVhckVtcHR5LlxuICAgICAgICAgICAgICBpZiAoRm9ybVZhbHVlU2VydmljZS5jbGVhck9wdGlvbmFsRW1wdHkodHJ1ZSwgZGF0YVtmaWVsZC5pZF0sIGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZGF0YVtmaWVsZC5pZF0gJiYgRm9ybVZhbHVlU2VydmljZS5pc0VtcHR5RGF0YShkYXRhW2ZpZWxkLmlkXSkgJiYgZnJvbVByZXZpb3VzUGFnZVxuICAgICAgICAgICAgICAgICYmIGN1cnJlbnRQYWdlQ2FzZUZpZWxkcy5maW5kSW5kZXgoKGNGaWVsZDogYW55KSA9PiBjRmllbGQuaWQgPT09IGZpZWxkLmlkKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHZhbGlkIGNvbGxlY3Rpb24gZGF0YVxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUludmFsaWRDb2xsZWN0aW9uRGF0YShkYXRhLCBmaWVsZCk7XG4gICAgICAgICAgICAgIC8vIEdldCBob2xkIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFjdHVhbGx5IGhhdmUgYSBjb2xsZWN0aW9uIHRvIHdvcmsgd2l0aC5cbiAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gJiYgQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGNvbXBsZXggb2JqZWN0LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaFxuICAgICAgICAgICAgICAgIC8vIGFuZCBjbGVhciB0aGVtIG91dC5cbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGVsZW1lbnRzIGFuZCByZW1vdmUgYW55IHVubmVjZXNzYXJ5IGZpZWxkcyB3aXRoaW4uXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVVubmVjZXNzYXJ5RmllbGRzKGl0ZW0sIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLCBjbGVhckVtcHR5KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVVbm5lY2Vzc2FyeUZpZWxkcyhpdGVtLnZhbHVlLCBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIG91dCBhbnkgTXVsdGlTZWxlY3QgbGFiZWxzLlxuICAgIEZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlTXVsdGlTZWxlY3RMYWJlbHMoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlSW52YWxpZENvbGxlY3Rpb25EYXRhKGRhdGE6IG9iamVjdCwgZmllbGQ6IENhc2VGaWVsZCkge1xuICAgIGlmIChkYXRhW2ZpZWxkLmlkXSAmJiBkYXRhW2ZpZWxkLmlkXS5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IG9iakNvbGxlY3Rpb24gb2YgZGF0YVtmaWVsZC5pZF0pIHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iakNvbGxlY3Rpb24pLmxlbmd0aCA9PT0gMSAmJiBPYmplY3Qua2V5cyhvYmpDb2xsZWN0aW9uKS5pbmRleE9mKCdpZCcpID4gLTEpIHtcbiAgICAgICAgICBkYXRhW2ZpZWxkLmlkXSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbnkgZW1wdHkgY29sbGVjdGlvbiBmaWVsZHMgd2hlcmUgYSB2YWx1ZSBvZiBncmVhdGVyIHRoYW4gemVybyBpcyBzcGVjaWZpZWQgaW4gdGhlIGZpZWxkJ3Mge0BsaW5rIEZpZWxkVHlwZX1cbiAgICogYG1pbmAgYXR0cmlidXRlLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRyZWUgb2YgZm9ybSB2YWx1ZXMgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUgcmVtb3ZhbFxuICAgKiBAcGFyYW0gY2FzZUZpZWxkcyBUaGUgbGlzdCBvZiB1bmRlcmx5aW5nIHtAbGluayBDYXNlRmllbGR9IGRvbWFpbiBtb2RlbCBvYmplY3RzIGZvciBlYWNoIGZpZWxkXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlRW1wdHlDb2xsZWN0aW9uc1dpdGhNaW5WYWxpZGF0aW9uKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiB2b2lkIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBjYXNlRmllbGRzKSB7XG4gICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdDb2xsZWN0aW9uJyAmJiB0eXBlb2YgZmllbGQuZmllbGRfdHlwZS5taW4gPT09ICdudW1iZXInICYmIGZpZWxkLmZpZWxkX3R5cGUubWluID4gMCAmJlxuICAgICAgICAgIGRhdGFbZmllbGQuaWRdICYmIEFycmF5LmlzQXJyYXkoZGF0YVtmaWVsZC5pZF0pICYmIGRhdGFbZmllbGQuaWRdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZnJvbSB0aGUgdG9wIGxldmVsIG9mIHRoZSBmb3JtIGRhdGEgYW55IGNhc2UgZmllbGRzIG9mIGEgZ2l2ZW4gdHlwZSBvciB0eXBlcyB0aGF0IGFyZSBub3QgaW50ZW5kZWQgdG8gYmVcbiAgICogcGVyc2lzdGVkLiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIHJlbW92ZSBcInNwZWNpYWxcIiBjYXNlIGZpZWxkIHR5cGVzIGZyb20gdGhlIGRhdGEsIHN1Y2ggYXMgRmxhZ0xhdW5jaGVyIG9yXG4gICAqIENvbXBvbmVudExhdW5jaGVyIGZpZWxkcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIG9iamVjdCB0cmVlIG9mIGZvcm0gdmFsdWVzIG9uIHdoaWNoIHRvIHBlcmZvcm0gdGhlIHJlbW92YWwgYXQgdGhlIHRvcCBsZXZlbCBvbmx5XG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBsaXN0IG9mIHVuZGVybHlpbmcge0BsaW5rIENhc2VGaWVsZH0gZG9tYWluIG1vZGVsIG9iamVjdHMgZm9yIGVhY2ggZmllbGRcbiAgICogQHBhcmFtIHR5cGVzIEFuIGFycmF5IG9mIG9uZSBvciBtb3JlIGZpZWxkIHR5cGVzXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlQ2FzZUZpZWxkc09mVHlwZShkYXRhOiBvYmplY3QsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdLCB0eXBlczogRmllbGRUeXBlRW51bVtdKTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDAgJiYgdHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY2FzZUZpZWxkc1RvUmVtb3ZlID0gY2FzZUZpZWxkcy5maWx0ZXIoY2FzZUZpZWxkID0+IEZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VGaWVsZCwgdHlwZXMpKTtcbiAgICAgIGZvciAoY29uc3QgY2FzZUZpZWxkIG9mIGNhc2VGaWVsZHNUb1JlbW92ZSkge1xuICAgICAgICBkZWxldGUgZGF0YVtjYXNlRmllbGQuaWRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1wb3B1bGF0ZSB0aGUgZm9ybSBkYXRhIGZyb20gdGhlIHZhbHVlcyBoZWxkIGluIHRoZSBjYXNlIGZpZWxkcy4gVGhpcyBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gcGljayB1cCwgZm9yXG4gICAqIGVhY2ggYEZsYWdzYCBmaWVsZCwgYW55IGZsYWcgZGV0YWlscyBkYXRhIG5vdCBjdXJyZW50bHkgcHJlc2VudC5cbiAgICpcbiAgICogYEZsYWdzYCBmaWVsZHMgbWF5IGJlIGNvbnRhaW5lZCBpbiBvdGhlciBgQ2FzZUZpZWxkYCBpbnN0YW5jZXMsIGVpdGhlciBhcyBhIHN1Yi1maWVsZCBvZiBhIENvbXBsZXggZmllbGQsIG9yXG4gICAqIGZpZWxkcyBpbiBhIGNvbGxlY3Rpb24gKG9yIHN1Yi1maWVsZHMgb2YgQ29tcGxleCBmaWVsZHMgaW4gYSBjb2xsZWN0aW9uKS4gVGhlcmVmb3JlLCBpdCBpcyBuZWNlc3NhcnkgdG9cbiAgICogaXRlcmF0ZSB0aHJvdWdoIGFsbCBgQ2FzZUZpZWxkYHMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBvYmplY3QgdHJlZSBvZiBmb3JtIHZhbHVlcyBvbiB3aGljaCB0byBwZXJmb3JtIHRoZSBkYXRhIHBvcHVsYXRpb25cbiAgICogQHBhcmFtIGNhc2VGaWVsZHMgVGhlIGxpc3Qgb2YgdW5kZXJseWluZyB7QGxpbmsgQ2FzZUZpZWxkfSBkb21haW4gbW9kZWwgb2JqZWN0cyBmb3IgZWFjaCBmaWVsZFxuICAgKi9cbiAgcHVibGljIHJlcG9wdWxhdGVGb3JtRGF0YUZyb21DYXNlRmllbGRWYWx1ZXMoZGF0YTogb2JqZWN0LCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IHZvaWQge1xuICAgIGlmIChkYXRhICYmIGNhc2VGaWVsZHMgJiYgY2FzZUZpZWxkcy5sZW5ndGggPiAwICYmXG4gICAgICBjYXNlRmllbGRzLmZpbmRJbmRleChjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0ZsYWdMYXVuY2hlciddKSkgPiAtMSkge1xuICAgICAgLy8gSWdub3JlIHRoZSBGbGFnTGF1bmNoZXIgQ2FzZUZpZWxkIGJlY2F1c2UgaXQgZG9lcyBub3QgaG9sZCBhbnkgdmFsdWVzXG4gICAgICBjYXNlRmllbGRzLmZpbHRlcihjYXNlRmllbGQgPT4gIUZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VGaWVsZCwgWydGbGFnTGF1bmNoZXInXSkpXG4gICAgICAgIC5mb3JFYWNoKGNhc2VGaWVsZCA9PiB7XG4gICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRhdGEgb2JqZWN0IGlzIHBvcHVsYXRlZCBmb3IgYWxsIENhc2VGaWVsZCBrZXlzIGl0IGNvbnRhaW5zLCBldmVuIGlmIGZvciBhIGdpdmVuXG4gICAgICAgICAgLy8gQ2FzZUZpZWxkIGtleSwgdGhlIGRhdGEgb2JqZWN0IGhhcyBhIGZhbHN5IHZhbHVlIChoZW5jZSB0aGUgdXNlIG9mIGhhc093blByb3BlcnR5KCkgZm9yIHRoZSBjaGVjayBiZWxvdylcbiAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly90b29scy5obWN0cy5uZXQvamlyYS9icm93c2UvRVVJLTczNzdcbiAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShjYXNlRmllbGQuaWQpICYmIGNhc2VGaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyBvYmplY3QgZm9yIHRoZSBDYXNlRmllbGQgSUQgd2l0aGluIHRoZSBkYXRhIG9iamVjdCwgaWYgbmVjZXNzYXJ5IChpLmUuIGlmIHRoZSBjdXJyZW50IHZhbHVlXG4gICAgICAgICAgICAvLyBpcyBmYWxzeSk7IHBvcHVsYXRlIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgQ2FzZUZpZWxkXG4gICAgICAgICAgICBpZiAoIWRhdGFbY2FzZUZpZWxkLmlkXSkge1xuICAgICAgICAgICAgICBkYXRhW2Nhc2VGaWVsZC5pZF0gPSB7fTtcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY2FzZUZpZWxkLnZhbHVlKS5mb3JFYWNoKChrZXkpID0+IGRhdGFbY2FzZUZpZWxkLmlkXVtrZXldID0gY2FzZUZpZWxkLnZhbHVlW2tleV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgQ2FzZUZpZWxkOyB0aGlzIGVuc3VyZXMgYWxsIG5lc3RlZCBmbGFnIGRhdGEgKGZvciBleGFtcGxlLCBhXG4gICAgICAgICAgICAgIC8vIEZsYWdzIGZpZWxkIHdpdGhpbiBhIENvbXBsZXggZmllbGQgb3IgYSBjb2xsZWN0aW9uIG9mIENvbXBsZXggZmllbGRzKSBpcyBjb3BpZWQgYWNyb3NzXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGRhdGFbY2FzZUZpZWxkLmlkXSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhc2VGaWVsZC52YWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICBkYXRhW2Nhc2VGaWVsZC5pZF1ba2V5XSA9IGNhc2VGaWVsZC52YWx1ZVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGUgdGhlIGxpbmtlZCBjYXNlcyBmcm9tIHRoZSBkYXRhIGhlbGQgaW4gaXRzIGNvcnJlc3BvbmRpbmcgQ2FzZUZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRyZWUgb2YgZm9ybSB2YWx1ZXMgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUgZGF0YSBwb3B1bGF0aW9uXG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBsaXN0IG9mIHVuZGVybHlpbmcge0BsaW5rIENhc2VGaWVsZH0gZG9tYWluIG1vZGVsIG9iamVjdHMgZm9yIGVhY2ggZmllbGRcbiAgICovXG4gIHB1YmxpYyBwb3B1bGF0ZUxpbmtlZENhc2VzRGV0YWlsc0Zyb21DYXNlRmllbGRzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiB2b2lkIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgY2FzZUZpZWxkcy5maWx0ZXIoY2FzZUZpZWxkID0+ICFGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnQ29tcG9uZW50TGF1bmNoZXInXSkpXG4gICAgICAgIC5mb3JFYWNoKGNhc2VGaWVsZCA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoJ2Nhc2VMaW5rcycpICYmIGNhc2VGaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgZGF0YVtjYXNlRmllbGQuaWRdID0gY2FzZUZpZWxkLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
575
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWx1ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9mb3JtL2Zvcm0tdmFsdWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQUc1RCxNQUFNLE9BQU8sZ0JBQWdCO0lBOExFO0lBN0w3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BbUdHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVE7UUFDbEQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEUsQ0FBQzthQUFNLElBQUksV0FBVyxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDOUQsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FB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QUMsRUFBRTtnQkFDbkIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUN2QyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQzswR0Fsa0JVLGdCQUFnQjtnRUFBaEIsZ0JBQWdCLFdBQWhCLGdCQUFnQjs7aUZBQWhCLGdCQUFnQjtjQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDYXNlRmllbGQsIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmllbGRzVXRpbHMgfSBmcm9tICcuLi9maWVsZHMnO1xuaW1wb3J0IHsgRmllbGRUeXBlU2FuaXRpc2VyIH0gZnJvbSAnLi9maWVsZC10eXBlLXNhbml0aXNlcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGb3JtVmFsdWVTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEdldHMgdmFsdWUgb2YgYSBmaWVsZCBiYXNlZCBvbiBmaWVsZEtleSB3aGljaCBpcyBhIGRvdCBzZXBhcmF0ZWQgcmVmZXJlbmNlIHRvIHZhbHVlIGFuZCBjb2xsZWN0aW9uIGluZGV4LlxuICAgKiBUaGVyZSBhcmUgdHdvIGV4Y2VwdGlvbnM6XG4gICAqIDEpIEluIGNhc2Ugb2YgYSBtdWx0aXNlbGVjdCBiZWluZyBpZGVudGlmaWVkIGFzIGEgbGVhZiBhICctLS1MQUJFTCcgc3VmZml4IGlzIGFwcGVuZGVkIHRvIHRoZSBrZXkgYW5kIHZhbHVlcyBvZiB0aGF0IGtleSBhcmUgcmV0dXJuZWRcbiAgICogICAgICBmb3JtPSB7ICdsaXN0JzogWydjb2RlMScsICdjb2RlMiddLFxuICAgKiAgICAgICAgICAgICAgJ2xpc3QtLS1MQUJFTCc6IFsnbGFiZWwxJywgJ2xhYmVsMiddIH0sXG4gICAqICAgICAgZmllbGRLZXk9bGlzdCxcbiAgICogICAgICBjb2xJbmRleD0wLFxuICAgKiAgICAgIHZhbHVlPWxhYmVsMSwgbGFiZWwyXG4gICAqIDIpIEluIGNhc2Ugb2YgYSBjb2xsZWN0aW9uIG9mIHNpbXBsZSBmaWVsZHMgaXMgaWRlbnRpZmllZCBhcyBhIGxlYWYgYWxsIHZhbHVlcyBhcmUgam9pbmVkIHNlcGVyYXRlZCBieSBhIGNvbW1hXG4gICAqICAgICAgZm9ybT0geyAnY29sbGVjdGlvbic6IFt7ICd2YWx1ZSc6ICd2YWx1ZTEnIH0sIHsgJ3ZhbHVlJzogJ3ZhbHVlMicgfV0gfVxuICAgKiAgICAgIGZpZWxkS2V5PWNvbGxlY3Rpb25cbiAgICogICAgICBjb2xJbmRleD0xXG4gICAqICAgICAgdmFsdWU9dmFsdWUxLCB2YWx1ZTJcbiAgICpcbiAgICogT3RoZXIgZXhhbXBsZXM6XG4gICAqIDEpIHNpbXBsZSBmaWVsZCByZWZlcmVuY2U6IGZvcm09eyAnUGVyc29uRmlyc3ROYW1lJzogJ0pvaG4nIH0sIGZpZWxkS2V5PVBlcnNvbkZpcnN0TmFtZSwgdmFsdWU9Sm9oblxuICAgKiAyKSBjb21wbGV4IGZpZWxkIHJlZmVyZW5jZTpcbiAgICogICAgICBmb3JtPSB7IGNvbXBsZXgxJzogeyAnc2ltcGxlMTEnOiAndmFsdWUxMScsICdzaW1wbGUxMic6ICd2YWx1ZTEyJywgJ2NvbXBsZXgyJzogeyAnc2ltcGxlMjEnOiAndmFsdWUyMScgfSB9fSxcbiAgICogICAgICBmaWVsZEtleT1jb21wbGV4MS5jb21wbGV4Mi5zaW1wbGUyMVxuICAgKiAgICAgIGNvbEluZGV4PTAsXG4gICAqICAgICAgdmFsdWU9dmFsdWUyMVxuICAgKiAzKSBjb21wbGV4IGZpZWxkIHdpdGggY29sbGVjdGlvbiBmaWVsZCB3aXRoIGNvbXBsZXggZmllbGQgcmVmZXJlbmNlOlxuICAgKiAgICAgIGZvcm09IHsgJ2NvbXBsZXgxJzoge1xuICAgKiAgICAgICAgICAgICAgICdjb2xsZWN0aW9uMSc6IFtcbiAgICogICAgICAgICAgICAgICB7ICd2YWx1ZSc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgyJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUxJzogJ3ZhbHVlMScsXG4gICAqICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgzJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXg0Jzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMic6ICd2YWx1ZTEyJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgICAgeyAndmFsdWUnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICdjb21wbGV4Mic6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMSc6ICd2YWx1ZTInLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Myc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4NCc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTInOiAndmFsdWUyMSdcbiAgICogICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgICAgIHsgJ3ZhbHVlJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAnY29tcGxleDInOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTEnOiAndmFsdWUzJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAnY29tcGxleDMnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDQnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUyJzogJ3ZhbHVlMzEnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICBdfX1cbiAgICogICAgICBmaWVsZEtleT1jb21wbGV4MS5jb2xsZWN0aW9uMS5jb21wbGV4Mi5jb21wbGV4My5jb21wbGV4NC5zaW1wbGUyXG4gICAqICAgICAgY29sSW5kZXg9MixcbiAgICogICAgICB2YWx1ZT12YWx1ZTIxXG4gICAqIDQpIGNvbGxlY3Rpb24gb2YgY29tcGxleCB0eXBlc1xuICAgKiAgICAgIGZvcm09IHsgJ2NvbGxlY3Rpb24xJzogW1xuICAgKiAgICAgICAgICAgICAgIHsgJ3ZhbHVlJzogeydjb21wbGV4MSc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUxJzogJ3ZhbHVlMTEnLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgyJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDMnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTInOiAndmFsdWUxMidcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgKiAgICAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgICAgeyAndmFsdWUnOiB7J2NvbXBsZXgxJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTEnOiAndmFsdWUyMScsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDInOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Myc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMic6ICd2YWx1ZTIyJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAqICAgICAgICAgICAgICAgfSxcbiAgICogICAgICAgICAgICAgICB7ICd2YWx1ZSc6IHsnY29tcGxleDEnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMSc6ICd2YWx1ZTMxJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Mic6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgzJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUyJzogJ3ZhbHVlMzInXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgKiAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgXX1cbiAgICogICAgICBmaWVsZEtleT1jb2xsZWN0aW9uMS5jb21wbGV4MS5jb21wbGV4Mi5jb21wbGV4My5zaW1wbGUyXG4gICAqICAgICAgY29sSW5kZXg9MlxuICAgKiAgICAgIHZhbHVlPXZhbHVlMzJcbiAgICpcbiAgICogSWYga2V5IGlzIHBvaW50aW5nIGF0IGEgY29tcGxleCBvciBjb2xsZWN0aW9uIGxlYWYgKG5vdCBzaW1wbGUsIGNvbGxlY3Rpb24gb2Ygc2ltcGxlIG9yIG11bHRpc2VsZWN0IHR5cGVzKSB0aGVuIHVuZGVmaW5lZCBpcyByZXR1cm5lZC5cbiAgICogQWxzbyBubyBrZXkgcmVmZXJyaW5nIGEgbGVhZiB0aGF0IGlzIGNvbnRhaW5lZCB3aXRoaW4gY29sbGVjdGlvbiB3aWxsIGNvbnRhaW4gaW5kZXggbnVtYmVyLiBUaGUgaW5kZXggaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZVxuICAgKiBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEZpZWxkVmFsdWUoZm9ybSwgZmllbGRLZXksIGNvbEluZGV4KSB7XG4gICAgY29uc3QgZmllbGRJZHMgPSBmaWVsZEtleS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGN1cnJlbnRGaWVsZElkID0gZmllbGRJZHNbMF07XG4gICAgY29uc3QgY3VycmVudEZvcm0gPSBmb3JtW2N1cnJlbnRGaWVsZElkXTtcbiAgICBpZiAoRmllbGRzVXRpbHMuaXNNdWx0aVNlbGVjdFZhbHVlKGN1cnJlbnRGb3JtKSkge1xuICAgICAgcmV0dXJuIGZvcm1bY3VycmVudEZpZWxkSWQgKyBGaWVsZHNVdGlscy5MQUJFTF9TVUZGSVhdLmpvaW4oJywgJyk7XG4gICAgfSBlbHNlIGlmIChGaWVsZHNVdGlscy5pc0NvbGxlY3Rpb25PZlNpbXBsZVR5cGVzKGN1cnJlbnRGb3JtKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRGb3JtLm1hcChmaWVsZFZhbHVlID0+IGZpZWxkVmFsdWVbJ3ZhbHVlJ10pLmpvaW4oJywgJyk7XG4gICAgfSBlbHNlIGlmIChGaWVsZHNVdGlscy5pc0NvbGxlY3Rpb24oY3VycmVudEZvcm0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFZhbHVlKGN1cnJlbnRGb3JtW2NvbEluZGV4XVsndmFsdWUnXSwgZmllbGRJZHMuc2xpY2UoMSkuam9pbignLicpLCBjb2xJbmRleCk7XG4gICAgfSBlbHNlIGlmIChGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KGN1cnJlbnRGb3JtKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRWYWx1ZShjdXJyZW50Rm9ybSwgZmllbGRJZHMuc2xpY2UoMSkuam9pbignLicpLCBjb2xJbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdXJyZW50Rm9ybTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQSByZWN1cnNpdmUgbWV0aG9kIHRvIHJlbW92ZSBhbnl0aGluZyB3aXRoIGEgYC0tLUxBQkVMYCBzdWZmaXguXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHJlY3Vyc2UgdGhyb3VnaCBhbmQgcmVtb3ZlIE11bHRpU2VsZWN0IGxhYmVscy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVtb3ZlTXVsdGlTZWxlY3RMYWJlbHMoZGF0YTogYW55KTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YSkge1xuICAgICAgICAgIEZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlTXVsdGlTZWxlY3RMYWJlbHMoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAvLyBIYXZlIHdlIGZvdW5kIG9uZSBhIE11bHRpU2VsZWN0IGxhYmVsP1xuICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihGaWVsZHNVdGlscy5MQUJFTF9TVUZGSVgpID4gMCkge1xuICAgICAgICAgICAgLy8gSWYgc28sIHJlbW92ZSBpdC5cbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2tleV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIEZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlTXVsdGlTZWxlY3RMYWJlbHMoZGF0YVtrZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc1JlYWRPbmx5KGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmllbGQuZGlzcGxheV9jb250ZXh0ID8gZmllbGQuZGlzcGxheV9jb250ZXh0LnRvVXBwZXJDYXNlKCkgPT09ICdSRUFET05MWScgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzT3B0aW9uYWwoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaWVsZC5kaXNwbGF5X2NvbnRleHQgPyBmaWVsZC5kaXNwbGF5X2NvbnRleHQudG9VcHBlckNhc2UoKSA9PT0gJ09QVElPTkFMJyA6IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNMYWJlbChmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgIHJldHVybiBmaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdMYWJlbCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc0VtcHR5RGF0YShkYXRhOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgbGV0IGFsbEVtcHR5ID0gdHJ1ZTtcbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbcHJvcF07XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFsbEVtcHR5ID0gYWxsRW1wdHkgJiYgdGhpcy5pc0VtcHR5RGF0YSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFsbEVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWxsRW1wdHk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3VsZCB3ZSBjbGVhciBvdXQgb3B0aW9uYWwsIGVtcHR5LCBjb21wbGV4IG9iamVjdHM/XG4gICAqIEBwYXJhbSBjbGVhckVtcHR5IEZhbHNlIHByb3BlcnR5IGlmIHdlIHNpbXBseSB3YW50IHRvIHNraXAgaXQuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGFzc2VzcyBmb3IgXCJlbXB0aW5lc3NcIi5cbiAgICogQHBhcmFtIGZpZWxkIFRoZSBDYXNlRmllbGQgdGhhdCB3aWxsIHRlbGwgdXMgaWYgdGhpcyBpcyBvcHRpb25hbC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGNsZWFyT3B0aW9uYWxFbXB0eShjbGVhckVtcHR5OiBib29sZWFuLCBkYXRhOiBvYmplY3QsIGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICBpZiAoY2xlYXJFbXB0eSkge1xuICAgICAgcmV0dXJuIEZvcm1WYWx1ZVNlcnZpY2UuaXNPcHRpb25hbChmaWVsZCkgJiYgRm9ybVZhbHVlU2VydmljZS5pc0VtcHR5RGF0YShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmaWVsZFR5cGVTYW5pdGlzZXI6IEZpZWxkVHlwZVNhbml0aXNlcikge1xuICB9XG5cbiAgcHVibGljIHNhbml0aXNlKHJhd1ZhbHVlOiBvYmplY3QpOiBvYmplY3Qge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXNlT2JqZWN0KHJhd1ZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzYW5pdGlzZUNhc2VSZWZlcmVuY2UocmVmZXJlbmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIHN0cmlwIG5vbiBkaWdpdHNcbiAgICBjb25zdCBzOiBzdHJpbmcgPSByZWZlcmVuY2UucmVwbGFjZSgvW1xcRF0vZywgJycpO1xuICAgIGlmIChzLmxlbmd0aCA+IDE2KSB7XG4gICAgICByZXR1cm4gcy5zdWJzdHIocy5sZW5ndGggLSAxNiwgMTYpO1xuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXJDdXJyZW50UGFnZUZpZWxkcyhjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgZWRpdEZvcm06IGFueSk6IGFueSB7XG4gICAgY29uc3QgY2xvbmVGb3JtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlZGl0Rm9ybSkpO1xuICAgIE9iamVjdC5rZXlzKGNsb25lRm9ybVsnZGF0YSddKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChjYXNlRmllbGRzLmZpbmRJbmRleCgoZWxlbWVudCkgPT4gZWxlbWVudC5pZCA9PT0ga2V5KSA8IDApIHtcbiAgICAgICAgZGVsZXRlIGNsb25lRm9ybVsnZGF0YSddW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lRm9ybTtcbiAgfVxuXG4gIHB1YmxpYyBzYW5pdGlzZUR5bmFtaWNMaXN0cyhjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgZWRpdEZvcm06IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRUeXBlU2FuaXRpc2VyLnNhbml0aXNlTGlzdHMoY2FzZUZpZWxkcywgZWRpdEZvcm0uZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXNlT2JqZWN0KHJhd09iamVjdDogb2JqZWN0KTogb2JqZWN0IHtcbiAgICBpZiAoIXJhd09iamVjdCkge1xuICAgICAgcmV0dXJuIHJhd09iamVjdDtcbiAgICB9XG5cbiAgICBsZXQgc2FuaXRpc2VkT2JqZWN0ID0ge307XG4gICAgY29uc3QgZG9jdW1lbnRGaWVsZEtleXMgPSBbJ2RvY3VtZW50X3VybCcsICdkb2N1bWVudF9iaW5hcnlfdXJsJywgJ2RvY3VtZW50X2ZpbGVuYW1lJ107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcmF3T2JqZWN0KSB7XG4gICAgICAvLyBJZiB0aGUga2V5IGlzIG9uZSBvZiBkb2N1bWVudEZpZWxkS2V5cywgaXQgbWVhbnMgdGhlIGZpZWxkIGlzIG9mIERvY3VtZW50IHR5cGUuIElmIHRoZSB2YWx1ZSBvZiBhbnkgb2YgdGhlc2VcbiAgICAgIC8vIHByb3BlcnRpZXMgaXMgbnVsbCwgdGhlIGVudGlyZSBzYW5pdGlzZWQgb2JqZWN0IHRvIGJlIHJldHVybmVkIHNob3VsZCBiZSBudWxsXG4gICAgICBpZiAoZG9jdW1lbnRGaWVsZEtleXMuaW5kZXhPZihrZXkpID4gLTEgJiYgcmF3T2JqZWN0W2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgc2FuaXRpc2VkT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKCdDYXNlUmVmZXJlbmNlJyA9PT0ga2V5KSB7XG4gICAgICAgIHNhbml0aXNlZE9iamVjdFtrZXldID0gdGhpcy5zYW5pdGlzZVZhbHVlKHRoaXMuc2FuaXRpc2VDYXNlUmVmZXJlbmNlKFN0cmluZyhyYXdPYmplY3Rba2V5XSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNhbml0aXNlZE9iamVjdFtrZXldID0gdGhpcy5zYW5pdGlzZVZhbHVlKHJhd09iamVjdFtrZXldKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2FuaXRpc2VkT2JqZWN0W2tleV0pKSB7XG4gICAgICAgICAgLy8gSWYgdGhlICdzYW5pdGlzZWQnIGFycmF5IGlzIGVtcHR5LCB3aGVyZWFzIHRoZSBvcmlnaW5hbCBhcnJheSBoYWQgMSBvciBtb3JlIGl0ZW1zXG4gICAgICAgICAgLy8gZGVsZXRlIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZSBzYW5hdGlzZWQgb2JqZWN0XG4gICAgICAgICAgaWYgKHNhbml0aXNlZE9iamVjdFtrZXldLmxlbmd0aCA9PT0gMCAmJiByYXdPYmplY3Rba2V5XS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkZWxldGUgc2FuaXRpc2VkT2JqZWN0W2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzYW5pdGlzZWRPYmplY3Q7XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXNlQXJyYXkocmF3QXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghcmF3QXJyYXkpIHtcbiAgICAgIHJldHVybiByYXdBcnJheTtcbiAgICB9XG5cbiAgICByYXdBcnJheS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSkge1xuICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5zYW5pdGlzZVZhbHVlKGl0ZW0udmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRmlsdGVyIHRoZSBhcnJheSB0byBlbnN1cmUgb25seSB0cnV0aHkgdmFsdWVzIGFyZSByZXR1cm5lZDsgZG91YmxlLWJhbmcgb3BlcmF0b3IgcmV0dXJucyB0aGUgYm9vbGVhbiB0cnVlL2ZhbHNlXG4gICAgLy8gYXNzb2NpYXRpb24gb2YgYSB2YWx1ZS4gSW4gYWRkaXRpb24sIGlmIHRoZSBhcnJheSBjb250YWlucyBpdGVtcyB3aXRoIGEgXCJ2YWx1ZVwiIG9iamVjdCBwcm9wZXJ0eSwgcmV0dXJuIG9ubHlcbiAgICAvLyB0aG9zZSB3aG9zZSB2YWx1ZSBvYmplY3QgY29udGFpbnMgbm9uLWVtcHR5IHZhbHVlcywgaW5jbHVkaW5nIGZvciBhbnkgZGVzY2VuZGFudCBvYmplY3RzXG4gICAgcmV0dXJuIHJhd0FycmF5XG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gISFpdGVtKVxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgPyBGaWVsZHNVdGlscy5jb250YWluc05vbkVtcHR5VmFsdWVzKGl0ZW0udmFsdWUpIDogdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXNlVmFsdWUocmF3VmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmF3VmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGlzZUFycmF5KHJhd1ZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoRmllbGRUeXBlU2FuaXRpc2VyLkRBVEVfRk9STUFULnRlc3QocmF3VmFsdWUpKSB7XG4gICAgICByZXR1cm4gcmF3VmFsdWUucmVwbGFjZSgvWiQvLCAnJylcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiByYXdWYWx1ZSkge1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpc2VPYmplY3QocmF3VmFsdWUpO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHJhd1ZhbHVlLnRyaW0oKTtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiBTdHJpbmcocmF3VmFsdWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHJhd1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbGVhck5vbkNhc2VGaWVsZHMoZGF0YTogb2JqZWN0LCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSkge1xuICAgIGZvciAoY29uc3QgZGF0YUtleSBpbiBkYXRhKSB7XG4gICAgICBpZiAoIWNhc2VGaWVsZHMuZmluZChjZiA9PiBjZi5pZCA9PT0gZGF0YUtleSkpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFbZGF0YUtleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNoZWNrVmFsdWVzU2V0SW5Db2xsZWN0aW9uKGNhc2VGaWVsZDogYW55LCBkYXRhOiBhbnkpOiBhbnkge1xuICAgIGZvciAoY29uc3QgZmllbGQgaW4gZGF0YSkge1xuICAgICAgY29uc3QgZmllbGRJZCA9IGRhdGFbZmllbGRdLmlkO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2FzZUZpZWxkLmRhdGFbZmllbGRJZF0pKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc3ViRmllbGQgaW4gY2FzZUZpZWxkLmRhdGFbZmllbGRJZF0pIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkYXRhW2ZpZWxkXT8uX3ZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgZGF0YVtmaWVsZF0uX3ZhbHVlW3N1YkZpZWxkXSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNhc2VGaWVsZC5kYXRhW2ZpZWxkSWRdW3N1YkZpZWxkXSA/PyB7fSkuZXZlcnkoKGtleSkgPT4ga2V5IGluIGRhdGFbZmllbGRdLl92YWx1ZVtzdWJGaWVsZF0pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoY2FzZUZpZWxkLmRhdGFbZmllbGRJZF1bc3ViRmllbGRdICE9PSBkYXRhW2ZpZWxkXT8uX3ZhbHVlW3N1YkZpZWxkXSkge1xuICAgICAgICAgICAgICBjYXNlRmllbGQuZGF0YVtmaWVsZElkXVtzdWJGaWVsZF0gPSBkYXRhW2ZpZWxkXS5fdmFsdWVbc3ViRmllbGRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgoZGF0YVtmaWVsZF0uX3ZhbHVlKSAmJiAoY2FzZUZpZWxkLmRhdGFbZmllbGRJZF0gIT09IGRhdGFbZmllbGRdLl92YWx1ZSkpIHtcbiAgICAgICAgY2FzZUZpZWxkLmRhdGFbZmllbGRJZF0gPSBkYXRhW2ZpZWxkXS5fdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYXNlRmllbGQ7XG4gIH1cblxuICAvLyBUT0RPIHJlZmFjdG9yIHNvIHRoYXQgdGhpcyBhbmQgcmVtb3ZlIHVubmVjZXNzYXJ5IGZpZWxkcyBoYXZlIGEgY29tbW9uIGl0ZXJhdG9yIHRoYXQgYXBwbGllcyBmdW5jdGlvbnMgdG8gZWFjaCBub2RlIHZpc2l0ZWRcbiAgcHVibGljIHJlbW92ZU51bGxMYWJlbHMoZGF0YTogb2JqZWN0LCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSkge1xuICAgIGlmIChkYXRhICYmIGNhc2VGaWVsZHMgJiYgY2FzZUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhbnkgZGF0YSBhdCB0aGUgdG9wIGxldmVsIG9mIHRoZSBmb3JtIHRoYXQncyBub3QgaW4gdGhlIGNhc2VGaWVsZHNcbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgY2FzZUZpZWxkcykge1xuICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZSkge1xuICAgICAgICAgIHN3aXRjaCAoZmllbGQuZmllbGRfdHlwZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdMYWJlbCc6XG4gICAgICAgICAgICAgIC8vIERlbGV0ZSBhbnkgbGFiZWxzIHRoYXQgYXJlIG51bGxcbiAgICAgICAgICAgICAgaWYgKChkYXRhW2ZpZWxkLmlkXSA9PT0gbnVsbCkgfHwgKGRhdGFbZmllbGQuaWRdID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdDb21wbGV4JzpcbiAgICAgICAgICAgICAgLy8gUmVjdXJzZSBhbmQgcmVtb3ZlIGFueXRoaW5nIHVubmVjZXNzYXJ5IGZyb20gd2l0aGluIGEgY29tcGxleCBmaWVsZC5cbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVOdWxsTGFiZWxzKGRhdGFbZmllbGQuaWRdLCBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgICAgLy8gR2V0IGhvbGQgb2YgdGhlIGNvbGxlY3Rpb24uXG4gICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhIGNvbGxlY3Rpb24gdG8gd29yayB3aXRoLlxuICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbiAmJiBBcnJheS5pc0FycmF5KGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgY29tcGxleCBvYmplY3QsIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoXG4gICAgICAgICAgICAgICAgLy8gYW5kIGNsZWFyIHRoZW0gb3V0LlxuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZWxlbWVudHMgYW5kIHJlbW92ZSBhbnkgdW5uZWNlc3NhcnkgZmllbGRzIHdpdGhpbi5cbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTnVsbExhYmVscyhpdGVtLCBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTnVsbExhYmVscyhpdGVtLnZhbHVlLCBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIFRPRE8gcmVmYWN0b3Igc28gdGhhdCB0aGlzIGFuZCByZW1vdmUgdW5uZWNlc3NhcnkgZmllbGRzIGhhdmUgYSBjb21tb24gaXRlcmF0b3IgdGhhdCBhcHBsaWVzIGZ1bmN0aW9ucyB0byBlYWNoIG5vZGUgdmlzaXRlZFxuICBwdWJsaWMgcmVtb3ZlRW1wdHlEb2N1bWVudHMoZGF0YTogb2JqZWN0LCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSkge1xuICAgIGlmIChkYXRhICYmIGNhc2VGaWVsZHMgJiYgY2FzZUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhbnkgZGF0YSBhdCB0aGUgdG9wIGxldmVsIG9mIHRoZSBmb3JtIHRoYXQncyBub3QgaW4gdGhlIGNhc2VGaWVsZHNcbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgY2FzZUZpZWxkcykge1xuICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZSkge1xuICAgICAgICAgIHN3aXRjaCAoZmllbGQuZmllbGRfdHlwZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdDb21wbGV4JzpcbiAgICAgICAgICAgICAgLy8gUmVjdXJzZSBhbmQgcmVtb3ZlIGFueSBlbXB0eSBkb2N1bWVudHMgZnJvbSB3aXRoaW4gYSBjb21wbGV4IGZpZWxkLlxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUVtcHR5RG9jdW1lbnRzKGRhdGFbZmllbGQuaWRdLCBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgICAgLy8gR2V0IGhvbGQgb2YgdGhlIGNvbGxlY3Rpb24uXG4gICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhIGNvbGxlY3Rpb24gdG8gd29yayB3aXRoLlxuICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbiAmJiBBcnJheS5pc0FycmF5KGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgY29tcGxleCBvYmplY3QsIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoXG4gICAgICAgICAgICAgICAgLy8gYW5kIGNsZWFyIG91dCBlbXB0eSBkb2N1bWVudHNcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGVsZW1lbnRzIGFuZCByZW1vdmUgYW55IGVtcHR5IGRvY3VtZW50cyB3aXRoaW4uXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUVtcHR5RG9jdW1lbnRzKGl0ZW0sIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eURvY3VtZW50cyhpdGVtLnZhbHVlLCBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRG9jdW1lbnQnOlxuICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhpcyBpcyBleGVjdXRlZCBvbmx5IGlmIHRoZSBEb2N1bWVudCBmaWVsZCBpcyBOT1QgaGlkZGVuIGFuZCBpcyBlbXB0eSBvZiBkYXRhOyBoaWRkZW4gRG9jdW1lbnRcbiAgICAgICAgICAgICAgLy8gZmllbGRzIGFyZSBoYW5kbGVkIGJ5IHRoZSBmaWx0ZXJSYXdGb3JtVmFsdWVzKCkgZnVuY3Rpb24gaW4gQ2FzZUVkaXRTdWJtaXQgY29tcG9uZW50XG4gICAgICAgICAgICAgIGlmIChmaWVsZC5oaWRkZW4gIT09IHRydWUgJiYgRm9ybVZhbHVlU2VydmljZS5pc0VtcHR5RGF0YShkYXRhW2ZpZWxkLmlkXSkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENsZWFyIG91dCB1bm5lY2Vzc2FyeSBmaWVsZHMgZnJvbSBhIGRhdGEgb2JqZWN0LCBiYXNlZCBvbiBhbiBhcnJheSBvZiBDYXNlRmllbGRzLlxuICAgKiBUaGlzIG1ldGhvZCBpcyByZWN1cnNpdmUgYW5kIHdpbGwgY2FsbCBpdHNlbGYgaWYgaXQgZW5jb3VudGVycyBwYXJ0aWN1bGFyIGZpZWxkIHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRvIGJlIHRpZGllZCB1cC5cbiAgICogQHBhcmFtIGNhc2VGaWVsZHMgVGhlIENhc2VGaWVsZHMgdGhhdCBuZWVkIHRvIGJlIGNsZWFuZWQgdXAuXG4gICAqIEBwYXJhbSBjbGVhckVtcHR5IFdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBjbGVhciBvdXQgZW1wdHksIG9wdGlvbmFsLCBjb21wbGV4IG9iamVjdHMuXG4gICAqIEBwYXJhbSBjbGVhck5vbkNhc2UgV2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGNsZWFyIG91dCBub24tY2FzZSBmaWVsZHMgYXQgdGhlIHRvcCBsZXZlbC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVVbm5lY2Vzc2FyeUZpZWxkcyhkYXRhOiBvYmplY3QsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdLCBjbGVhckVtcHR5ID0gZmFsc2UsIGNsZWFyTm9uQ2FzZSA9IGZhbHNlLFxuICAgIGZyb21QcmV2aW91c1BhZ2UgPSBmYWxzZSwgY3VycmVudFBhZ2VDYXNlRmllbGRzID0gW10pOiB2b2lkIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IGRhdGEgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgZm9ybSB0aGF0J3Mgbm90IGluIHRoZSBjYXNlRmllbGRzXG4gICAgICBpZiAoY2xlYXJOb25DYXNlKSB7XG4gICAgICAgIHRoaXMuY2xlYXJOb25DYXNlRmllbGRzKGRhdGEsIGNhc2VGaWVsZHMpO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBjYXNlRmllbGRzKSB7XG4gICAgICAgIGlmICghRm9ybVZhbHVlU2VydmljZS5pc0xhYmVsKGZpZWxkKSAmJiBGb3JtVmFsdWVTZXJ2aWNlLmlzUmVhZE9ubHkoZmllbGQpKSB7XG4gICAgICAgICAgLy8gUmV0YWluIGFueXRoaW5nIHRoYXQgaXMgcmVhZG9ubHkgYW5kIG5vdCBhIGxhYmVsLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC5oaWRkZW4gPT09IHRydWUgJiYgZmllbGQuZGlzcGxheV9jb250ZXh0ICE9PSAnSElEREVOJyAmJiBmaWVsZC5kaXNwbGF5X2NvbnRleHQgIT09ICdISURERU5fVEVNUCcgJiYgZmllbGQuaWQgIT09ICdjYXNlTGlua3MnICYmICFmaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlKSB7XG4gICAgICAgICAgLy8gRGVsZXRlIGFueXRoaW5nIHRoYXQgaXMgaGlkZGVuICh0aGF0IGlzIE5PVCByZWFkb25seSksIGFuZCB0aGF0XG4gICAgICAgICAgLy8gaGFzbid0IGhhZCBpdHMgZGlzcGxheV9jb250ZXh0IG92ZXJyaWRkZW4gdG8gbWFrZSBpdCBoaWRkZW4uXG4gICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmZpZWxkX3R5cGUudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnTGFiZWwnOlxuICAgICAgICAgICAgICAvLyBEZWxldGUgYW55IGxhYmVscy5cbiAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0RvY3VtZW50JzpcbiAgICAgICAgICAgICAgaWYgKEZvcm1WYWx1ZVNlcnZpY2UuaXNFbXB0eURhdGEoZGF0YVtmaWVsZC5pZF0pKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ29tcGxleCc6XG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlVW5uZWNlc3NhcnlGaWVsZHMoZGF0YVtmaWVsZC5pZF0sIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMsIGNsZWFyRW1wdHkpO1xuICAgICAgICAgICAgICAvLyBBbHNvIHJlbW92ZSBhbnkgb3B0aW9uYWwgY29tcGxleCBvYmplY3RzIHRoYXQgYXJlIGNvbXBsZXRlbHkgZW1wdHkuXG4gICAgICAgICAgICAgIC8vIEVVSS00MjQ0OiBSaXRlc2gncyBmaXgsIHBhc3NpbmcgdHJ1ZSBpbnN0ZWFkIG9mIGNsZWFyRW1wdHkuXG4gICAgICAgICAgICAgIGlmIChGb3JtVmFsdWVTZXJ2aWNlLmNsZWFyT3B0aW9uYWxFbXB0eSh0cnVlLCBkYXRhW2ZpZWxkLmlkXSwgZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChkYXRhW2ZpZWxkLmlkXSAmJiBGb3JtVmFsdWVTZXJ2aWNlLmlzRW1wdHlEYXRhKGRhdGFbZmllbGQuaWRdKSAmJiBmcm9tUHJldmlvdXNQYWdlXG4gICAgICAgICAgICAgICAgJiYgY3VycmVudFBhZ2VDYXNlRmllbGRzLmZpbmRJbmRleCgoY0ZpZWxkOiBhbnkpID0+IGNGaWVsZC5pZCA9PT0gZmllbGQuaWQpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0NvbGxlY3Rpb24nOlxuICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgdmFsaWQgY29sbGVjdGlvbiBkYXRhXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlSW52YWxpZENvbGxlY3Rpb25EYXRhKGRhdGEsIGZpZWxkKTtcbiAgICAgICAgICAgICAgLy8gR2V0IGhvbGQgb2YgdGhlIGNvbGxlY3Rpb24uXG4gICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhIGNvbGxlY3Rpb24gdG8gd29yayB3aXRoLlxuICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbiAmJiBBcnJheS5pc0FycmF5KGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgY29tcGxleCBvYmplY3QsIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoXG4gICAgICAgICAgICAgICAgLy8gYW5kIGNsZWFyIHRoZW0gb3V0LlxuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZWxlbWVudHMgYW5kIHJlbW92ZSBhbnkgdW5uZWNlc3NhcnkgZmllbGRzIHdpdGhpbi5cbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlVW5uZWNlc3NhcnlGaWVsZHMoaXRlbSwgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMsIGNsZWFyRW1wdHkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVVubmVjZXNzYXJ5RmllbGRzKGl0ZW0udmFsdWUsIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgb3V0IGFueSBNdWx0aVNlbGVjdCBsYWJlbHMuXG4gICAgRm9ybVZhbHVlU2VydmljZS5yZW1vdmVNdWx0aVNlbGVjdExhYmVscyhkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVJbnZhbGlkQ29sbGVjdGlvbkRhdGEoZGF0YTogb2JqZWN0LCBmaWVsZDogQ2FzZUZpZWxkKSB7XG4gICAgaWYgKGRhdGFbZmllbGQuaWRdICYmIGRhdGFbZmllbGQuaWRdLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3Qgb2JqQ29sbGVjdGlvbiBvZiBkYXRhW2ZpZWxkLmlkXSkge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMob2JqQ29sbGVjdGlvbikubGVuZ3RoID09PSAxICYmIE9iamVjdC5rZXlzKG9iakNvbGxlY3Rpb24pLmluZGV4T2YoJ2lkJykgPiAtMSkge1xuICAgICAgICAgIGRhdGFbZmllbGQuaWRdID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFueSBlbXB0eSBjb2xsZWN0aW9uIGZpZWxkcyB3aGVyZSBhIHZhbHVlIG9mIGdyZWF0ZXIgdGhhbiB6ZXJvIGlzIHNwZWNpZmllZCBpbiB0aGUgZmllbGQncyB7QGxpbmsgRmllbGRUeXBlfVxuICAgKiBgbWluYCBhdHRyaWJ1dGUuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBvYmplY3QgdHJlZSBvZiBmb3JtIHZhbHVlcyBvbiB3aGljaCB0byBwZXJmb3JtIHRoZSByZW1vdmFsXG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBsaXN0IG9mIHVuZGVybHlpbmcge0BsaW5rIENhc2VGaWVsZH0gZG9tYWluIG1vZGVsIG9iamVjdHMgZm9yIGVhY2ggZmllbGRcbiAgICovXG4gIHB1YmxpYyByZW1vdmVFbXB0eUNvbGxlY3Rpb25zV2l0aE1pblZhbGlkYXRpb24oZGF0YTogb2JqZWN0LCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IHZvaWQge1xuICAgIGlmIChkYXRhICYmIGNhc2VGaWVsZHMgJiYgY2FzZUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGNhc2VGaWVsZHMpIHtcbiAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbGxlY3Rpb24nICYmIHR5cGVvZiBmaWVsZC5maWVsZF90eXBlLm1pbiA9PT0gJ251bWJlcicgJiYgZmllbGQuZmllbGRfdHlwZS5taW4gPiAwICYmXG4gICAgICAgICAgZGF0YVtmaWVsZC5pZF0gJiYgQXJyYXkuaXNBcnJheShkYXRhW2ZpZWxkLmlkXSkgJiYgZGF0YVtmaWVsZC5pZF0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBmcm9tIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGZvcm0gZGF0YSBhbnkgY2FzZSBmaWVsZHMgb2YgYSBnaXZlbiB0eXBlIG9yIHR5cGVzIHRoYXQgYXJlIG5vdCBpbnRlbmRlZCB0byBiZVxuICAgKiBwZXJzaXN0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gcmVtb3ZlIFwic3BlY2lhbFwiIGNhc2UgZmllbGQgdHlwZXMgZnJvbSB0aGUgZGF0YSwgc3VjaCBhcyBGbGFnTGF1bmNoZXIgb3JcbiAgICogQ29tcG9uZW50TGF1bmNoZXIgZmllbGRzLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRyZWUgb2YgZm9ybSB2YWx1ZXMgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUgcmVtb3ZhbCBhdCB0aGUgdG9wIGxldmVsIG9ubHlcbiAgICogQHBhcmFtIGNhc2VGaWVsZHMgVGhlIGxpc3Qgb2YgdW5kZXJseWluZyB7QGxpbmsgQ2FzZUZpZWxkfSBkb21haW4gbW9kZWwgb2JqZWN0cyBmb3IgZWFjaCBmaWVsZFxuICAgKiBAcGFyYW0gdHlwZXMgQW4gYXJyYXkgb2Ygb25lIG9yIG1vcmUgZmllbGQgdHlwZXNcbiAgICovXG4gIHB1YmxpYyByZW1vdmVDYXNlRmllbGRzT2ZUeXBlKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIHR5cGVzOiBGaWVsZFR5cGVFbnVtW10pOiB2b2lkIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCAmJiB0eXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjYXNlRmllbGRzVG9SZW1vdmUgPSBjYXNlRmllbGRzLmZpbHRlcihjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCB0eXBlcykpO1xuICAgICAgZm9yIChjb25zdCBjYXNlRmllbGQgb2YgY2FzZUZpZWxkc1RvUmVtb3ZlKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhW2Nhc2VGaWVsZC5pZF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlLXBvcHVsYXRlIHRoZSBmb3JtIGRhdGEgZnJvbSB0aGUgdmFsdWVzIGhlbGQgaW4gdGhlIGNhc2UgZmllbGRzLiBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBwaWNrIHVwLCBmb3JcbiAgICogZWFjaCBgRmxhZ3NgIGZpZWxkLCBhbnkgZmxhZyBkZXRhaWxzIGRhdGEgbm90IGN1cnJlbnRseSBwcmVzZW50LlxuICAgKlxuICAgKiBgRmxhZ3NgIGZpZWxkcyBtYXkgYmUgY29udGFpbmVkIGluIG90aGVyIGBDYXNlRmllbGRgIGluc3RhbmNlcywgZWl0aGVyIGFzIGEgc3ViLWZpZWxkIG9mIGEgQ29tcGxleCBmaWVsZCwgb3JcbiAgICogZmllbGRzIGluIGEgY29sbGVjdGlvbiAob3Igc3ViLWZpZWxkcyBvZiBDb21wbGV4IGZpZWxkcyBpbiBhIGNvbGxlY3Rpb24pLiBUaGVyZWZvcmUsIGl0IGlzIG5lY2Vzc2FyeSB0b1xuICAgKiBpdGVyYXRlIHRocm91Z2ggYWxsIGBDYXNlRmllbGRgcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIG9iamVjdCB0cmVlIG9mIGZvcm0gdmFsdWVzIG9uIHdoaWNoIHRvIHBlcmZvcm0gdGhlIGRhdGEgcG9wdWxhdGlvblxuICAgKiBAcGFyYW0gY2FzZUZpZWxkcyBUaGUgbGlzdCBvZiB1bmRlcmx5aW5nIHtAbGluayBDYXNlRmllbGR9IGRvbWFpbiBtb2RlbCBvYmplY3RzIGZvciBlYWNoIGZpZWxkXG4gICAqL1xuICBwdWJsaWMgcmVwb3B1bGF0ZUZvcm1EYXRhRnJvbUNhc2VGaWVsZFZhbHVlcyhkYXRhOiBvYmplY3QsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdKTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDAgJiZcbiAgICAgIGNhc2VGaWVsZHMuZmluZEluZGV4KGNhc2VGaWVsZCA9PiBGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnRmxhZ0xhdW5jaGVyJ10pKSA+IC0xKSB7XG4gICAgICAvLyBJZ25vcmUgdGhlIEZsYWdMYXVuY2hlciBDYXNlRmllbGQgYmVjYXVzZSBpdCBkb2VzIG5vdCBob2xkIGFueSB2YWx1ZXNcbiAgICAgIGNhc2VGaWVsZHMuZmlsdGVyKGNhc2VGaWVsZCA9PiAhRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0ZsYWdMYXVuY2hlciddKSlcbiAgICAgICAgLmZvckVhY2goY2FzZUZpZWxkID0+IHtcbiAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGF0YSBvYmplY3QgaXMgcG9wdWxhdGVkIGZvciBhbGwgQ2FzZUZpZWxkIGtleXMgaXQgY29udGFpbnMsIGV2ZW4gaWYgZm9yIGEgZ2l2ZW5cbiAgICAgICAgICAvLyBDYXNlRmllbGQga2V5LCB0aGUgZGF0YSBvYmplY3QgaGFzIGEgZmFsc3kgdmFsdWUgKGhlbmNlIHRoZSB1c2Ugb2YgaGFzT3duUHJvcGVydHkoKSBmb3IgdGhlIGNoZWNrIGJlbG93KVxuICAgICAgICAgIC8vIFNlZSBodHRwczovL3Rvb2xzLmhtY3RzLm5ldC9qaXJhL2Jyb3dzZS9FVUktNzM3N1xuICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KGNhc2VGaWVsZC5pZCkgJiYgY2FzZUZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgbmV3IG9iamVjdCBmb3IgdGhlIENhc2VGaWVsZCBJRCB3aXRoaW4gdGhlIGRhdGEgb2JqZWN0LCBpZiBuZWNlc3NhcnkgKGkuZS4gaWYgdGhlIGN1cnJlbnQgdmFsdWVcbiAgICAgICAgICAgIC8vIGlzIGZhbHN5KTsgcG9wdWxhdGUgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBDYXNlRmllbGRcbiAgICAgICAgICAgIGlmICghZGF0YVtjYXNlRmllbGQuaWRdKSB7XG4gICAgICAgICAgICAgIGRhdGFbY2FzZUZpZWxkLmlkXSA9IHt9O1xuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjYXNlRmllbGQudmFsdWUpLmZvckVhY2goKGtleSkgPT4gZGF0YVtjYXNlRmllbGQuaWRdW2tleV0gPSBjYXNlRmllbGQudmFsdWVba2V5XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBDYXNlRmllbGQ7IHRoaXMgZW5zdXJlcyBhbGwgbmVzdGVkIGZsYWcgZGF0YSAoZm9yIGV4YW1wbGUsIGFcbiAgICAgICAgICAgICAgLy8gRmxhZ3MgZmllbGQgd2l0aGluIGEgQ29tcGxleCBmaWVsZCBvciBhIGNvbGxlY3Rpb24gb2YgQ29tcGxleCBmaWVsZHMpIGlzIGNvcGllZCBhY3Jvc3NcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZGF0YVtjYXNlRmllbGQuaWRdKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FzZUZpZWxkLnZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgIGRhdGFbY2FzZUZpZWxkLmlkXVtrZXldID0gY2FzZUZpZWxkLnZhbHVlW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQb3B1bGF0ZSB0aGUgbGlua2VkIGNhc2VzIGZyb20gdGhlIGRhdGEgaGVsZCBpbiBpdHMgY29ycmVzcG9uZGluZyBDYXNlRmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBvYmplY3QgdHJlZSBvZiBmb3JtIHZhbHVlcyBvbiB3aGljaCB0byBwZXJmb3JtIHRoZSBkYXRhIHBvcHVsYXRpb25cbiAgICogQHBhcmFtIGNhc2VGaWVsZHMgVGhlIGxpc3Qgb2YgdW5kZXJseWluZyB7QGxpbmsgQ2FzZUZpZWxkfSBkb21haW4gbW9kZWwgb2JqZWN0cyBmb3IgZWFjaCBmaWVsZFxuICAgKi9cbiAgcHVibGljIHBvcHVsYXRlTGlua2VkQ2FzZXNEZXRhaWxzRnJvbUNhc2VGaWVsZHMoZGF0YTogb2JqZWN0LCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IHZvaWQge1xuICAgIGlmIChkYXRhICYmIGNhc2VGaWVsZHMgJiYgY2FzZUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBjYXNlRmllbGRzLmZpbHRlcihjYXNlRmllbGQgPT4gIUZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VGaWVsZCwgWydDb21wb25lbnRMYXVuY2hlciddKSlcbiAgICAgICAgLmZvckVhY2goY2FzZUZpZWxkID0+IHtcbiAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eSgnY2FzZUxpbmtzJykgJiYgY2FzZUZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICBkYXRhW2Nhc2VGaWVsZC5pZF0gPSBjYXNlRmllbGQudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,4 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { isUndefined } from 'util';
3
2
  import * as i0 from "@angular/core";
4
3
  export class SearchResultViewItemComparatorFactory {
5
4
  createSearchResultViewItemComparator(column) {
@@ -34,8 +33,8 @@ export class SearchResultViewItemComparatorFactory {
34
33
  compare(a, b) {
35
34
  let fieldA = a.case_fields[fieldId];
36
35
  let fieldB = b.case_fields[fieldId];
37
- fieldA = isUndefined(fieldA) || fieldA === null ? 0 : fieldA;
38
- fieldB = isUndefined(fieldB) || fieldB === null ? 0 : fieldB;
36
+ fieldA = fieldA === undefined || fieldA === null ? 0 : fieldA;
37
+ fieldB = fieldB === undefined || fieldB === null ? 0 : fieldB;
39
38
  return fieldA - fieldB;
40
39
  }
41
40
  };
@@ -45,8 +44,8 @@ export class SearchResultViewItemComparatorFactory {
45
44
  compare(a, b) {
46
45
  let fieldA = a.case_fields[fieldId];
47
46
  let fieldB = b.case_fields[fieldId];
48
- fieldA = isUndefined(fieldA) || fieldA === null ? '' : fieldA.toLowerCase();
49
- fieldB = isUndefined(fieldB) || fieldB === null ? '' : fieldB.toLowerCase();
47
+ fieldA = fieldA === undefined || fieldA === null ? '' : fieldA.toLowerCase();
48
+ fieldB = fieldB === undefined || fieldB === null ? '' : fieldB.toLowerCase();
50
49
  return fieldA === fieldB ? 0 : fieldA > fieldB ? 1 : -1;
51
50
  }
52
51
  };
@@ -56,8 +55,8 @@ export class SearchResultViewItemComparatorFactory {
56
55
  compare(a, b) {
57
56
  let fieldA = a.case_fields[fieldId];
58
57
  let fieldB = b.case_fields[fieldId];
59
- fieldA = isUndefined(fieldA) || fieldA === null ? '' : fieldA.join().toLowerCase();
60
- fieldB = isUndefined(fieldB) || fieldB === null ? '' : fieldB.join().toLowerCase();
58
+ fieldA = fieldA === undefined || fieldA === null ? '' : fieldA.join().toLowerCase();
59
+ fieldB = fieldB === undefined || fieldB === null ? '' : fieldB.join().toLowerCase();
61
60
  return fieldA === fieldB ? 0 : fieldA > fieldB ? 1 : -1;
62
61
  }
63
62
  };
@@ -68,4 +67,4 @@ export class SearchResultViewItemComparatorFactory {
68
67
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchResultViewItemComparatorFactory, [{
69
68
  type: Injectable
70
69
  }], null, null); })();
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXJlc3VsdC12aWV3LWl0ZW0tY29tcGFyYXRvci1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9zZWFyY2gtcmVzdWx0L3NvcnRpbmcvc2VhcmNoLXJlc3VsdC12aWV3LWl0ZW0tY29tcGFyYXRvci1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFNbkMsTUFBTSxPQUFPLHFDQUFxQztJQUN6QyxvQ0FBb0MsQ0FBQyxNQUE4QjtRQUN4RSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQ3JDLFFBQVEsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNkLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDZixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDZCxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lB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QUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRCxDQUFDO1NBQ2dDLENBQUM7SUFDdEMsQ0FBQzsrSEEvRFUscUNBQXFDO2dFQUFyQyxxQ0FBcUMsV0FBckMscUNBQXFDOztpRkFBckMscUNBQXFDO2NBRGpELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgU2VhcmNoUmVzdWx0Vmlld0NvbHVtbiB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9zZWFyY2gvc2VhcmNoLXJlc3VsdC12aWV3LWNvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBTZWFyY2hSZXN1bHRWaWV3SXRlbSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9zZWFyY2gvc2VhcmNoLXJlc3VsdC12aWV3LWl0ZW0ubW9kZWwnO1xuaW1wb3J0IHsgU2VhcmNoUmVzdWx0Vmlld0l0ZW1Db21wYXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL3NlYXJjaC9zb3J0aW5nL3NlYXJjaC1yZXN1bHQtdmlldy1pdGVtLWNvbXBhcmF0b3InO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VhcmNoUmVzdWx0Vmlld0l0ZW1Db21wYXJhdG9yRmFjdG9yeSB7XG4gIHB1YmxpYyBjcmVhdGVTZWFyY2hSZXN1bHRWaWV3SXRlbUNvbXBhcmF0b3IoY29sdW1uOiBTZWFyY2hSZXN1bHRWaWV3Q29sdW1uKTogU2VhcmNoUmVzdWx0Vmlld0l0ZW1Db21wYXJhdG9yIHtcbiAgICBjb25zdCBmaWVsZElkID0gY29sdW1uLmNhc2VfZmllbGRfaWQ7XG4gICAgc3dpdGNoIChjb2x1bW4uY2FzZV9maWVsZF90eXBlLnR5cGUpIHtcbiAgICAgIGNhc2UgKCdNdWx0aVNlbGVjdExpc3QnKToge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0QXJyYXlDb21wYXJhdG9yKGZpZWxkSWQpO1xuICAgICAgfVxuICAgICAgY2FzZSAoJ051bWJlcicpOlxuICAgICAgY2FzZSAoJ01vbmV5R0JQJyk6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubnVtYmVyQ29tcGFyYXRvcihmaWVsZElkKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgKCdUZXh0Jyk6XG4gICAgICBjYXNlICgnVGV4dEFyZWEnKTpcbiAgICAgIGNhc2UgKCdFbWFpbCcpOlxuICAgICAgY2FzZSAoJ0RhdGUnKTpcbiAgICAgIGNhc2UgKCdEYXRlVGltZScpOlxuICAgICAgY2FzZSAoJ0xhYmVsJyk6XG4gICAgICBjYXNlICgnUG9zdGNvZGUnKTpcbiAgICAgIGNhc2UgKCdZZXNPck5vJyk6XG4gICAgICBjYXNlICgnUGhvbmVVSycpOlxuICAgICAgY2FzZSAoJ0ZpeGVkTGlzdCcpOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZ0NvbXBhcmF0b3IoZmllbGRJZCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBudW1iZXJDb21wYXJhdG9yKGZpZWxkSWQ6IHN0cmluZyk6IFNlYXJjaFJlc3VsdFZpZXdJdGVtQ29tcGFyYXRvciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmUoYTogU2VhcmNoUmVzdWx0Vmlld0l0ZW0sIGI6IFNlYXJjaFJlc3VsdFZpZXdJdGVtKSB7XG4gICAgICAgIGxldCBmaWVsZEEgPSBhLmNhc2VfZmllbGRzW2ZpZWxkSWRdO1xuICAgICAgICBsZXQgZmllbGRCID0gYi5jYXNlX2ZpZWxkc1tmaWVsZElkXTtcbiAgICAgICAgZmllbGRBID0gaXNVbmRlZmluZWQoZmllbGRBKSB8fCBmaWVsZEEgPT09IG51bGwgPyAwIDogZmllbGRBO1xuICAgICAgICBmaWVsZEIgPSBpc1VuZGVmaW5lZChmaWVsZEIpIHx8IGZpZWxkQiA9PT0gbnVsbCA/IDAgOiBmaWVsZEI7XG4gICAgICAgIHJldHVybiBmaWVsZEEgLSBmaWVsZEI7XG4gICAgICB9XG4gICAgfSBhcyBTZWFyY2hSZXN1bHRWaWV3SXRlbUNvbXBhcmF0b3I7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ0NvbXBhcmF0b3IoZmllbGRJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmUoYTogU2VhcmNoUmVzdWx0Vmlld0l0ZW0sIGI6IFNlYXJjaFJlc3VsdFZpZXdJdGVtKSB7XG4gICAgICAgIGxldCBmaWVsZEEgPSBhLmNhc2VfZmllbGRzW2ZpZWxkSWRdO1xuICAgICAgICBsZXQgZmllbGRCID0gYi5jYXNlX2ZpZWxkc1tmaWVsZElkXTtcbiAgICAgICAgZmllbGRBID0gaXNVbmRlZmluZWQoZmllbGRBKSB8fCBmaWVsZEEgPT09IG51bGwgPyAnJyA6IGZpZWxkQS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBmaWVsZEIgPSBpc1VuZGVmaW5lZChmaWVsZEIpIHx8IGZpZWxkQiA9PT0gbnVsbCA/ICcnIDogZmllbGRCLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBmaWVsZEEgPT09IGZpZWxkQiA/IDAgOiBmaWVsZEEgPiBmaWVsZEIgPyAxIDogLTE7XG4gICAgICB9XG4gICAgfSBhcyBTZWFyY2hSZXN1bHRWaWV3SXRlbUNvbXBhcmF0b3I7XG4gIH1cblxuICBwcml2YXRlIHRleHRBcnJheUNvbXBhcmF0b3IoZmllbGRJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmUoYTogU2VhcmNoUmVzdWx0Vmlld0l0ZW0sIGI6IFNlYXJjaFJlc3VsdFZpZXdJdGVtKSB7XG4gICAgICAgIGxldCBmaWVsZEEgPSBhLmNhc2VfZmllbGRzW2ZpZWxkSWRdO1xuICAgICAgICBsZXQgZmllbGRCID0gYi5jYXNlX2ZpZWxkc1tmaWVsZElkXTtcbiAgICAgICAgZmllbGRBID0gaXNVbmRlZmluZWQoZmllbGRBKSB8fCBmaWVsZEEgPT09IG51bGwgPyAnJyA6IGZpZWxkQS5qb2luKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgZmllbGRCID0gaXNVbmRlZmluZWQoZmllbGRCKSB8fCBmaWVsZEIgPT09IG51bGwgPyAnJyA6IGZpZWxkQi5qb2luKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkQSA9PT0gZmllbGRCID8gMCA6IGZpZWxkQSA+IGZpZWxkQiA/IDEgOiAtMTtcbiAgICAgIH1cbiAgICB9IGFzIFNlYXJjaFJlc3VsdFZpZXdJdGVtQ29tcGFyYXRvcjtcbiAgfVxufVxuIl19
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXJlc3VsdC12aWV3LWl0ZW0tY29tcGFyYXRvci1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9zZWFyY2gtcmVzdWx0L3NvcnRpbmcvc2VhcmNoLXJlc3VsdC12aWV3LWl0ZW0tY29tcGFyYXRvci1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTTNDLE1BQU0sT0FBTyxxQ0FBcUM7SUFDekMsb0NBQW9DLENBQUMsTUFBOEI7UUFDeEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUNyQyxRQUFRLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFDRCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDZCxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2YsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2QsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNmLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsQixLQUFLLENB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QUNnQyxDQUFDO0lBQ3RDLENBQUM7K0hBL0RVLHFDQUFxQztnRUFBckMscUNBQXFDLFdBQXJDLHFDQUFxQzs7aUZBQXJDLHFDQUFxQztjQURqRCxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2VhcmNoUmVzdWx0Vmlld0NvbHVtbiB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9zZWFyY2gvc2VhcmNoLXJlc3VsdC12aWV3LWNvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBTZWFyY2hSZXN1bHRWaWV3SXRlbSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9zZWFyY2gvc2VhcmNoLXJlc3VsdC12aWV3LWl0ZW0ubW9kZWwnO1xuaW1wb3J0IHsgU2VhcmNoUmVzdWx0Vmlld0l0ZW1Db21wYXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL3NlYXJjaC9zb3J0aW5nL3NlYXJjaC1yZXN1bHQtdmlldy1pdGVtLWNvbXBhcmF0b3InO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VhcmNoUmVzdWx0Vmlld0l0ZW1Db21wYXJhdG9yRmFjdG9yeSB7XG4gIHB1YmxpYyBjcmVhdGVTZWFyY2hSZXN1bHRWaWV3SXRlbUNvbXBhcmF0b3IoY29sdW1uOiBTZWFyY2hSZXN1bHRWaWV3Q29sdW1uKTogU2VhcmNoUmVzdWx0Vmlld0l0ZW1Db21wYXJhdG9yIHtcbiAgICBjb25zdCBmaWVsZElkID0gY29sdW1uLmNhc2VfZmllbGRfaWQ7XG4gICAgc3dpdGNoIChjb2x1bW4uY2FzZV9maWVsZF90eXBlLnR5cGUpIHtcbiAgICAgIGNhc2UgKCdNdWx0aVNlbGVjdExpc3QnKToge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0QXJyYXlDb21wYXJhdG9yKGZpZWxkSWQpO1xuICAgICAgfVxuICAgICAgY2FzZSAoJ051bWJlcicpOlxuICAgICAgY2FzZSAoJ01vbmV5R0JQJyk6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubnVtYmVyQ29tcGFyYXRvcihmaWVsZElkKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgKCdUZXh0Jyk6XG4gICAgICBjYXNlICgnVGV4dEFyZWEnKTpcbiAgICAgIGNhc2UgKCdFbWFpbCcpOlxuICAgICAgY2FzZSAoJ0RhdGUnKTpcbiAgICAgIGNhc2UgKCdEYXRlVGltZScpOlxuICAgICAgY2FzZSAoJ0xhYmVsJyk6XG4gICAgICBjYXNlICgnUG9zdGNvZGUnKTpcbiAgICAgIGNhc2UgKCdZZXNPck5vJyk6XG4gICAgICBjYXNlICgnUGhvbmVVSycpOlxuICAgICAgY2FzZSAoJ0ZpeGVkTGlzdCcpOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZ0NvbXBhcmF0b3IoZmllbGRJZCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBudW1iZXJDb21wYXJhdG9yKGZpZWxkSWQ6IHN0cmluZyk6IFNlYXJjaFJlc3VsdFZpZXdJdGVtQ29tcGFyYXRvciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmUoYTogU2VhcmNoUmVzdWx0Vmlld0l0ZW0sIGI6IFNlYXJjaFJlc3VsdFZpZXdJdGVtKSB7XG4gICAgICAgIGxldCBmaWVsZEEgPSBhLmNhc2VfZmllbGRzW2ZpZWxkSWRdO1xuICAgICAgICBsZXQgZmllbGRCID0gYi5jYXNlX2ZpZWxkc1tmaWVsZElkXTtcbiAgICAgICAgZmllbGRBID0gZmllbGRBID09PSB1bmRlZmluZWQgfHwgZmllbGRBID09PSBudWxsID8gMCA6IGZpZWxkQTtcbiAgICAgICAgZmllbGRCID0gZmllbGRCID09PSB1bmRlZmluZWQgfHwgZmllbGRCID09PSBudWxsID8gMCA6IGZpZWxkQjtcbiAgICAgICAgcmV0dXJuIGZpZWxkQSAtIGZpZWxkQjtcbiAgICAgIH1cbiAgICB9IGFzIFNlYXJjaFJlc3VsdFZpZXdJdGVtQ29tcGFyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5nQ29tcGFyYXRvcihmaWVsZElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZShhOiBTZWFyY2hSZXN1bHRWaWV3SXRlbSwgYjogU2VhcmNoUmVzdWx0Vmlld0l0ZW0pIHtcbiAgICAgICAgbGV0IGZpZWxkQSA9IGEuY2FzZV9maWVsZHNbZmllbGRJZF07XG4gICAgICAgIGxldCBmaWVsZEIgPSBiLmNhc2VfZmllbGRzW2ZpZWxkSWRdO1xuICAgICAgICBmaWVsZEEgPSBmaWVsZEEgPT09IHVuZGVmaW5lZCB8fCBmaWVsZEEgPT09IG51bGwgPyAnJyA6IGZpZWxkQS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBmaWVsZEIgPSBmaWVsZEIgPT09IHVuZGVmaW5lZCB8fCBmaWVsZEIgPT09IG51bGwgPyAnJyA6IGZpZWxkQi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gZmllbGRBID09PSBmaWVsZEIgPyAwIDogZmllbGRBID4gZmllbGRCID8gMSA6IC0xO1xuICAgICAgfVxuICAgIH0gYXMgU2VhcmNoUmVzdWx0Vmlld0l0ZW1Db21wYXJhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZXh0QXJyYXlDb21wYXJhdG9yKGZpZWxkSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlKGE6IFNlYXJjaFJlc3VsdFZpZXdJdGVtLCBiOiBTZWFyY2hSZXN1bHRWaWV3SXRlbSkge1xuICAgICAgICBsZXQgZmllbGRBID0gYS5jYXNlX2ZpZWxkc1tmaWVsZElkXTtcbiAgICAgICAgbGV0IGZpZWxkQiA9IGIuY2FzZV9maWVsZHNbZmllbGRJZF07XG4gICAgICAgIGZpZWxkQSA9IGZpZWxkQSA9PT0gdW5kZWZpbmVkIHx8IGZpZWxkQSA9PT0gbnVsbCA/ICcnIDogZmllbGRBLmpvaW4oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBmaWVsZEIgPSBmaWVsZEIgPT09IHVuZGVmaW5lZCB8fCBmaWVsZEIgPT09IG51bGwgPyAnJyA6IGZpZWxkQi5qb2luKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkQSA9PT0gZmllbGRCID8gMCA6IGZpZWxkQSA+IGZpZWxkQiA/IDEgOiAtMTtcbiAgICAgIH1cbiAgICB9IGFzIFNlYXJjaFJlc3VsdFZpZXdJdGVtQ29tcGFyYXRvcjtcbiAgfVxufVxuIl19