@hmcts/ccd-case-ui-toolkit 7.1.56-srt-rc2 → 7.1.56-srt-rc4

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.
@@ -1,5 +1,4 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { isEqual } from 'underscore';
3
2
  import * as i0 from "@angular/core";
4
3
  export class FieldTypeSanitiser {
5
4
  static FIELD_TYPE_COMPLEX = 'Complex';
@@ -41,7 +40,6 @@ export class FieldTypeSanitiser {
41
40
  this.sanitiseLists(caseField.field_type.complex_fields, data[caseField.id]);
42
41
  break;
43
42
  case FieldTypeSanitiser.FIELD_TYPE_COLLECTION:
44
- this.synchronizeCasefieldWithData(caseField, data);
45
43
  if (Array.isArray(data[caseField.id])) {
46
44
  data[caseField.id].forEach((formElement) => {
47
45
  this.sanitiseLists(caseField.field_type.collection_field_type.complex_fields, formElement.value);
@@ -51,35 +49,6 @@ export class FieldTypeSanitiser {
51
49
  }
52
50
  });
53
51
  }
54
- synchronizeCasefieldWithData(caseField, data) {
55
- for (const field in caseField._value) {
56
- for (const id in data[caseField.id]) {
57
- if (caseField._value[field]?.id === data[caseField.id][id]?.id) {
58
- this.updateFieldValues(caseField._value[field].value, data[caseField.id][id]?.value);
59
- }
60
- }
61
- }
62
- }
63
- updateFieldValues(caseFieldValue, dataValue) {
64
- for (const key in dataValue) {
65
- if ((typeof caseFieldValue[key] === 'object') && (!isEqual(caseFieldValue[key], dataValue[key]))) {
66
- this.updateObjectValue(caseFieldValue[key], dataValue[key]);
67
- }
68
- else {
69
- this.updatePrimitiveValue(caseFieldValue, key, dataValue[key]);
70
- }
71
- }
72
- }
73
- updateObjectValue(formattedObject, dataObject) {
74
- if (formattedObject?.value !== dataObject) {
75
- formattedObject.value = dataObject;
76
- }
77
- }
78
- updatePrimitiveValue(caseFieldValue, key, dataValue) {
79
- if ((!caseFieldValue[key]) || (caseFieldValue[key] !== dataValue)) {
80
- caseFieldValue[key] = dataValue;
81
- }
82
- }
83
52
  ensureDynamicMultiSelectListPopulated(caseFields) {
84
53
  return caseFields.map((field) => {
85
54
  if (field.field_type.type !== 'Complex') {
@@ -120,7 +89,7 @@ export class FieldTypeSanitiser {
120
89
  const values = data[field.id];
121
90
  if (Array.isArray(values)) {
122
91
  const listItems = this.getListItems(field);
123
- const matches = listItems.filter((item) => values.map((v) => v.code).indexOf(item.code) !== -1);
92
+ const matches = listItems.filter(item => values.map(v => v.code).indexOf(item.code) !== -1);
124
93
  data[field.id] = {
125
94
  value: matches,
126
95
  list_items: listItems
@@ -131,7 +100,7 @@ export class FieldTypeSanitiser {
131
100
  const stringValue = data[field.id];
132
101
  if (typeof stringValue === 'string') {
133
102
  const listItems = this.getListItems(field);
134
- const matches = listItems.filter((value) => value?.code === stringValue);
103
+ const matches = listItems.filter(value => value?.code === stringValue);
135
104
  if (matches && matches.length > 0) {
136
105
  data[field.id] = {
137
106
  value: matches[0],
@@ -157,4 +126,4 @@ export class FieldTypeSanitiser {
157
126
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FieldTypeSanitiser, [{
158
127
  type: Injectable
159
128
  }], null, null); })();
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtdHlwZS1zYW5pdGlzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL2Zvcm0vZmllbGQtdHlwZS1zYW5pdGlzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDOztBQUdyQyxNQUFNLE9BQU8sa0JBQWtCO0lBQ3RCLE1BQU0sQ0FBVSxrQkFBa0IsR0FBa0IsU0FBUyxDQUFDO0lBQzlELE1BQU0sQ0FBVSxxQkFBcUIsR0FBa0IsWUFBWSxDQUFDO0lBQ3BFLE1BQU0sQ0FBVSx1QkFBdUIsR0FBa0IsYUFBYSxDQUFDO0lBQ3ZFLE1BQU0sQ0FBVSw2QkFBNkIsR0FBa0Isa0JBQWtCLENBQUM7SUFDbEYsTUFBTSxDQUFVLG1DQUFtQyxHQUFrQix3QkFBd0IsQ0FBQztJQUM5RixNQUFNLENBQVUsaUJBQWlCLEdBQW9CLENBQUMsYUFBYSxFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDMUg7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLGFBQWEsQ0FBQyxVQUF1QixFQUFFLElBQVM7UUFDckQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBQ0QsVUFBVSxHQUFHLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDL0IsMENBQTBDO1lBQzFDLFFBQVEsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbEMsS0FBSyxrQkFBa0IsQ0FBQyxtQ0FBbUM7b0JBQ3pELElBQUks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LFVBQVUsRUFBRSxDQUFDO2dCQUNyQixPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDMUIsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM5RCxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOzRFQWpLVSxrQkFBa0I7Z0VBQWxCLGtCQUFrQixXQUFsQixrQkFBa0I7O2lGQUFsQixrQkFBa0I7Y0FEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhc2VGaWVsZCB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2UtZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2ZpZWxkLXR5cGUtZW51bS5tb2RlbCc7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAndW5kZXJzY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGaWVsZFR5cGVTYW5pdGlzZXIge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1RZUEVfQ09NUExFWDogRmllbGRUeXBlRW51bSA9ICdDb21wbGV4JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSUVMRF9UWVBFX0NPTExFQ1RJT046IEZpZWxkVHlwZUVudW0gPSAnQ29sbGVjdGlvbic7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRklFTERfVFlQRV9EWU5BTUlDX0xJU1Q6IEZpZWxkVHlwZUVudW0gPSAnRHluYW1pY0xpc3QnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1RZUEVfRFlOQU1JQ19SQURJT19MSVNUOiBGaWVsZFR5cGVFbnVtID0gJ0R5bmFtaWNSYWRpb0xpc3QnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1RZUEVfRFlOQU1JQ19NVUxUSVNFTEVDVF9MSVNUOiBGaWVsZFR5cGVFbnVtID0gJ0R5bmFtaWNNdWx0aVNlbGVjdExpc3QnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERZTkFNSUNfTElTVF9UWVBFOiBGaWVsZFR5cGVFbnVtW10gPSBbJ0R5bmFtaWNMaXN0JywgJ0R5bmFtaWNSYWRpb0xpc3QnLCAnRHluYW1pY011bHRpU2VsZWN0TGlzdCddO1xuICAvKipcbiAgICogVGhpcyBtZXRob2QgZmluZHMgZHluYW1pY2xpc3RzIGluIGEgZm9ybSBhbmQgcmVwbGFjZXMgdGhlaXIgc3RyaW5nXG4gICAqIHZhbHVlcywgd2l0aCBhIEpTT04gb2JqZWN0LCBhcyBiZWxvdzpcbiAgICogRnJvbTogJ3h5eidcbiAgICogVG8gIDoge1xuICAgKiAgIHZhbHVlOiB7IGNvZGU6J3h5eicsIGxhYmVsOidYWVonIH0sXG4gICAqICAgbGlzdF9pdGVtczogW1xuICAgKiAgICAgeyBjb2RlOid4eXonLCBsYWJlbDonWFlaJ30sXG4gICAqICAgICB7IGNvZGU6J2FiYycsIGxhYmVsOidBQkMnfVxuICAgKiAgIF1cbiAgICogfVxuICAgKiBAcGFyYW0gY2FzZUZpZWxkcyBUaGUgQ2FzZUZpZWxkcyB0byBhc3Nlc3MuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIGluIHRoZSBmb3JtLlxuICAgKi9cbiAgcHVibGljIHNhbml0aXNlTGlzdHMoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGRhdGE6IGFueSkge1xuICAgIGlmICghZGF0YSB8fCAhY2FzZUZpZWxkcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYXNlRmllbGRzID0gdGhpcy5lbnN1cmVEeW5hbWljTXVsdGlTZWxlY3RMaXN0UG9wdWxhdGVkKGNhc2VGaWVsZHMpO1xuICAgIGNhc2VGaWVsZHMuZm9yRWFjaCgoY2FzZUZpZWxkKSA9PiB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6c3dpdGNoLWRlZmF1bHRcbiAgICAgIHN3aXRjaCAoY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSkge1xuICAgICAgICBjYXNlIEZpZWxkVHlwZVNhbml0aXNlci5GSUVMRF9UWVBFX0RZTkFNSUNfTVVMVElTRUxFQ1RfTElTVDpcbiAgICAgICAgICB0aGlzLmNvbnZlcnRBcnJheVRvRHluYW1pY0xpc3RPdXRwdXQoY2FzZUZpZWxkLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVTYW5pdGlzZXIuRklFTERfVFlQRV9EWU5BTUlDX1JBRElPX0xJU1Q6XG4gICAgICAgIGNhc2UgRmllbGRUeXBlU2FuaXRpc2VyLkZJRUxEX1RZUEVfRFlOQU1JQ19MSVNUOlxuICAgICAgICAgIHRoaXMuY29udmVydFN0cmluZ1RvRHluYW1pY0xpc3RPdXRwdXQoY2FzZUZpZWxkLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEZpZWxkVHlwZVNhbml0aXNlci5GSUVMRF9UWVBFX0NPTVBMRVg6XG4gICAgICAgICAgdGhpcy5zYW5pdGlzZUxpc3RzKGNhc2VGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLCBkYXRhW2Nhc2VGaWVsZC5pZF0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgRmllbGRUeXBlU2FuaXRpc2VyLkZJRUxEX1RZUEVfQ09MTEVDVElPTjpcbiAgICAgICAgICB0aGlzLnN5bmNocm9uaXplQ2FzZWZpZWxkV2l0aERhdGEoY2FzZUZpZWxkLCBkYXRhKTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhW2Nhc2VGaWVsZC5pZF0pKSB7XG4gICAgICAgICAgICBkYXRhW2Nhc2VGaWVsZC5pZF0uZm9yRWFjaCgoZm9ybUVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNhbml0aXNlTGlzdHMoY2FzZUZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLCBmb3JtRWxlbWVudC52YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3luY2hyb25pemVDYXNlZmllbGRXaXRoRGF0YShjYXNlRmllbGQ6IENhc2VGaWVsZCwgZGF0YTogYW55KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBmaWVsZCBpbiBjYXNlRmllbGQuX3ZhbHVlKSB7XG4gICAgICBmb3IgKGNvbnN0IGlkIGluIGRhdGFbY2FzZUZpZWxkLmlkXSkge1xuICAgICAgICBpZiAoY2FzZUZpZWxkLl92YWx1ZVtmaWVsZF0/LmlkID09PSBkYXRhW2Nhc2VGaWVsZC5pZF1baWRdPy5pZCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRmllbGRWYWx1ZXMoY2FzZUZpZWxkLl92YWx1ZVtmaWVsZF0udmFsdWUsIGRhdGFbY2FzZUZpZWxkLmlkXVtpZF0/LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGaWVsZFZhbHVlcyhjYXNlRmllbGRWYWx1ZTogYW55LCBkYXRhVmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGFWYWx1ZSkge1xuICAgICAgaWYgKCh0eXBlb2YgY2FzZUZpZWxkVmFsdWVba2V5XSA9PT0gJ29iamVjdCcpICYmICghaXNFcXVhbChjYXNlRmllbGRWYWx1ZVtrZXldLCBkYXRhVmFsdWVba2V5XSkpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlT2JqZWN0VmFsdWUoY2FzZUZpZWxkVmFsdWVba2V5XSwgZGF0YVZhbHVlW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGRhdGVQcmltaXRpdmVWYWx1ZShjYXNlRmllbGRWYWx1ZSwga2V5LCBkYXRhVmFsdWVba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZU9iamVjdFZhbHVlKGZvcm1hdHRlZE9iamVjdDogYW55LCBkYXRhT2JqZWN0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoZm9ybWF0dGVkT2JqZWN0Py52YWx1ZSAhPT0gZGF0YU9iamVjdCkge1xuICAgICAgZm9ybWF0dGVkT2JqZWN0LnZhbHVlID0gZGF0YU9iamVjdDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUHJpbWl0aXZlVmFsdWUoY2FzZUZpZWxkVmFsdWU6IGFueSwga2V5OiBzdHJpbmcsIGRhdGFWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKCghY2FzZUZpZWxkVmFsdWVba2V5XSkgfHwgKGNhc2VGaWVsZFZhbHVlW2tleV0gIT09IGRhdGFWYWx1ZSkpIHtcbiAgICAgIGNhc2VGaWVsZFZhbHVlW2tleV0gPSBkYXRhVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVuc3VyZUR5bmFtaWNNdWx0aVNlbGVjdExpc3RQb3B1bGF0ZWQoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiBDYXNlRmllbGRbXSB7XG4gICAgcmV0dXJuIGNhc2VGaWVsZHMubWFwKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUudHlwZSAhPT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNhc2VGaWVsZERhdGEgPSBmaWVsZC5fdmFsdWU7XG4gICAgICAvLyBQcm9jZXNzIGVhY2ggY29tcGxleCBmaWVsZFxuICAgICAgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5mb3JFYWNoKChjb21wbGV4RmllbGQpID0+IHtcbiAgICAgICAgaWYgKGNvbXBsZXhGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09IEZpZWxkVHlwZVNhbml0aXNlci5GSUVMRF9UWVBFX0NPTVBMRVgpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrTmVzdGVkRHluYW1pY0xpc3QoY29tcGxleEZpZWxkLCBjYXNlRmllbGREYXRhPy5bY29tcGxleEZpZWxkLmlkXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0R5bmFtaWNMaXN0KGNvbXBsZXhGaWVsZC5maWVsZF90eXBlLnR5cGUpICYmXG4gICAgICAgICAgY29tcGxleEZpZWxkLmRpc3BsYXlfY29udGV4dCAhPT0gJ0hJRERFTicgJiZcbiAgICAgICAgICBmaWVsZC5fdmFsdWU/Lltjb21wbGV4RmllbGQuaWRdXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbXBsZXhGaWVsZC5saXN0X2l0ZW1zID0gZmllbGQuX3ZhbHVlW2NvbXBsZXhGaWVsZC5pZF0/Lmxpc3RfaXRlbXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gRmluYWwgdHJhbnNmb3JtYXRpb246IGNvbnN0cnVjdCB1cGRhdGVkIGZpZWxkIG9iamVjdFxuICAgICAgcmV0dXJuIHsgLi4uZmllbGQsIGZpZWxkX3R5cGU6IHsgLi4uZmllbGQ/LmZpZWxkX3R5cGUgfSB9IGFzIENhc2VGaWVsZDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tOZXN0ZWREeW5hbWljTGlzdChjYXNlRmllbGQ6IENhc2VGaWVsZCwgZmllbGREYXRhOiBhbnkgPSBudWxsKTogdm9pZCB7XG4gICAgY2FzZUZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMuZm9yRWFjaCgoY29tcGxleEZpZWxkKSA9PiB7XG4gICAgICBpZiAoY29tcGxleEZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gRmllbGRUeXBlU2FuaXRpc2VyLkZJRUxEX1RZUEVfQ09NUExFWCkge1xuICAgICAgICB0aGlzLmNoZWNrTmVzdGVkRHluYW1pY0xpc3QoY29tcGxleEZpZWxkLCBmaWVsZERhdGE/Lltjb21wbGV4RmllbGQuaWRdKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0R5bmFtaWNMaXN0KGNvbXBsZXhGaWVsZC5maWVsZF90eXBlLnR5cGUpICYmXG4gICAgICAgIGNvbXBsZXhGaWVsZC5kaXNwbGF5X2NvbnRleHQgIT09ICdISURERU4nICYmXG4gICAgICAgIGZpZWxkRGF0YT8uW2NvbXBsZXhGaWVsZC5pZF1cbiAgICAgICkge1xuICAgICAgICBjb21wbGV4RmllbGQubGlzdF9pdGVtcyA9IGZpZWxkRGF0YT8uW2NvbXBsZXhGaWVsZC5pZF0/Lmxpc3RfaXRlbXM7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzRHluYW1pY0xpc3QoZmllbGRUeXBlOiBGaWVsZFR5cGVFbnVtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEZpZWxkVHlwZVNhbml0aXNlci5EWU5BTUlDX0xJU1RfVFlQRS5pbmRleE9mKGZpZWxkVHlwZSkgIT09IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0QXJyYXlUb0R5bmFtaWNMaXN0T3V0cHV0KGZpZWxkOiBDYXNlRmllbGQsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlcyA9IGRhdGFbZmllbGQuaWRdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgIGNvbnN0IGxpc3RJdGVtcyA9IHRoaXMuZ2V0TGlzdEl0ZW1zKGZpZWxkKTtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBsaXN0SXRlbXMuZmlsdGVyKChpdGVtKSA9PiB2YWx1ZXMubWFwKCh2KSA9PiB2LmNvZGUpLmluZGV4T2YoaXRlbS5jb2RlKSAhPT0gLTEpO1xuXG4gICAgICBkYXRhW2ZpZWxkLmlkXSA9IHtcbiAgICAgICAgdmFsdWU6IG1hdGNoZXMsXG4gICAgICAgIGxpc3RfaXRlbXM6IGxpc3RJdGVtc1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRTdHJpbmdUb0R5bmFtaWNMaXN0T3V0cHV0KGZpZWxkOiBDYXNlRmllbGQsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gZGF0YVtmaWVsZC5pZF07XG4gICAgaWYgKHR5cGVvZiBzdHJpbmdWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGxpc3RJdGVtcyA9IHRoaXMuZ2V0TGlzdEl0ZW1zKGZpZWxkKTtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBsaXN0SXRlbXMuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWU/LmNvZGUgPT09IHN0cmluZ1ZhbHVlKTtcbiAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBkYXRhW2ZpZWxkLmlkXSA9IHtcbiAgICAgICAgICB2YWx1ZTogbWF0Y2hlc1swXSxcbiAgICAgICAgICBsaXN0X2l0ZW1zOiBsaXN0SXRlbXNcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldExpc3RJdGVtcyhmaWVsZDogQ2FzZUZpZWxkKTogYW55W10ge1xuICAgIGlmIChmaWVsZCkge1xuICAgICAgaWYgKGZpZWxkLmxpc3RfaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmxpc3RfaXRlbXM7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQuZm9ybWF0dGVkX3ZhbHVlICYmIGZpZWxkLmZvcm1hdHRlZF92YWx1ZS5saXN0X2l0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmaWVsZC5mb3JtYXR0ZWRfdmFsdWUubGlzdF9pdGVtcztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG4iXX0=
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtdHlwZS1zYW5pdGlzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL2Zvcm0vZmllbGQtdHlwZS1zYW5pdGlzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLGtCQUFrQjtJQUN0QixNQUFNLENBQVUsa0JBQWtCLEdBQWtCLFNBQVMsQ0FBQztJQUM5RCxNQUFNLENBQVUscUJBQXFCLEdBQWtCLFlBQVksQ0FBQztJQUNwRSxNQUFNLENBQVUsdUJBQXVCLEdBQWtCLGFBQWEsQ0FBQztJQUN2RSxNQUFNLENBQVUsNkJBQTZCLEdBQWtCLGtCQUFrQixDQUFDO0lBQ2xGLE1BQU0sQ0FBVSxtQ0FBbUMsR0FBa0Isd0JBQXdCLENBQUM7SUFDOUYsTUFBTSxDQUFVLGlCQUFpQixHQUFvQixDQUFDLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQzFIOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSSxhQUFhLENBQUMsVUFBdUIsRUFBRSxJQUFTO1FBQ3JELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUNELFVBQVUsR0FBRyxJQUFJLENBQUMscUNBQXFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQy9CLDBDQUEwQztZQUMxQyxRQUFRLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLEtBQUssa0JBQWtCLENBQUMsbUNBQW1DO29CQUN6RCxJQUFJLENBQUMsK0JBQStCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFD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QUM7UUFDbkMsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7b0JBQ2YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLFVBQVUsRUFBRSxTQUFTO2lCQUN0QixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWdCO1FBQ25DLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQzFCLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDOUQsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs0RUEvSFUsa0JBQWtCO2dFQUFsQixrQkFBa0IsV0FBbEIsa0JBQWtCOztpRkFBbEIsa0JBQWtCO2NBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9jYXNlLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9maWVsZC10eXBlLWVudW0ubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmllbGRUeXBlU2FuaXRpc2VyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSUVMRF9UWVBFX0NPTVBMRVg6IEZpZWxkVHlwZUVudW0gPSAnQ29tcGxleCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRklFTERfVFlQRV9DT0xMRUNUSU9OOiBGaWVsZFR5cGVFbnVtID0gJ0NvbGxlY3Rpb24nO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1RZUEVfRFlOQU1JQ19MSVNUOiBGaWVsZFR5cGVFbnVtID0gJ0R5bmFtaWNMaXN0JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSUVMRF9UWVBFX0RZTkFNSUNfUkFESU9fTElTVDogRmllbGRUeXBlRW51bSA9ICdEeW5hbWljUmFkaW9MaXN0JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSUVMRF9UWVBFX0RZTkFNSUNfTVVMVElTRUxFQ1RfTElTVDogRmllbGRUeXBlRW51bSA9ICdEeW5hbWljTXVsdGlTZWxlY3RMaXN0JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEWU5BTUlDX0xJU1RfVFlQRTogRmllbGRUeXBlRW51bVtdID0gWydEeW5hbWljTGlzdCcsICdEeW5hbWljUmFkaW9MaXN0JywgJ0R5bmFtaWNNdWx0aVNlbGVjdExpc3QnXTtcbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGZpbmRzIGR5bmFtaWNsaXN0cyBpbiBhIGZvcm0gYW5kIHJlcGxhY2VzIHRoZWlyIHN0cmluZ1xuICAgKiB2YWx1ZXMsIHdpdGggYSBKU09OIG9iamVjdCwgYXMgYmVsb3c6XG4gICAqIEZyb206ICd4eXonXG4gICAqIFRvICA6IHtcbiAgICogICB2YWx1ZTogeyBjb2RlOid4eXonLCBsYWJlbDonWFlaJyB9LFxuICAgKiAgIGxpc3RfaXRlbXM6IFtcbiAgICogICAgIHsgY29kZToneHl6JywgbGFiZWw6J1hZWid9LFxuICAgKiAgICAgeyBjb2RlOidhYmMnLCBsYWJlbDonQUJDJ31cbiAgICogICBdXG4gICAqIH1cbiAgICogQHBhcmFtIGNhc2VGaWVsZHMgVGhlIENhc2VGaWVsZHMgdG8gYXNzZXNzLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSBpbiB0aGUgZm9ybS5cbiAgICovXG4gIHB1YmxpYyBzYW5pdGlzZUxpc3RzKGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdLCBkYXRhOiBhbnkpIHtcbiAgICBpZiAoIWRhdGEgfHwgIWNhc2VGaWVsZHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FzZUZpZWxkcyA9IHRoaXMuZW5zdXJlRHluYW1pY011bHRpU2VsZWN0TGlzdFBvcHVsYXRlZChjYXNlRmllbGRzKTtcbiAgICBjYXNlRmllbGRzLmZvckVhY2goKGNhc2VGaWVsZCkgPT4ge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnN3aXRjaC1kZWZhdWx0XG4gICAgICBzd2l0Y2ggKGNhc2VGaWVsZC5maWVsZF90eXBlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBGaWVsZFR5cGVTYW5pdGlzZXIuRklFTERfVFlQRV9EWU5BTUlDX01VTFRJU0VMRUNUX0xJU1Q6XG4gICAgICAgICAgdGhpcy5jb252ZXJ0QXJyYXlUb0R5bmFtaWNMaXN0T3V0cHV0KGNhc2VGaWVsZCwgZGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRmllbGRUeXBlU2FuaXRpc2VyLkZJRUxEX1RZUEVfRFlOQU1JQ19SQURJT19MSVNUOlxuICAgICAgICBjYXNlIEZpZWxkVHlwZVNhbml0aXNlci5GSUVMRF9UWVBFX0RZTkFNSUNfTElTVDpcbiAgICAgICAgICB0aGlzLmNvbnZlcnRTdHJpbmdUb0R5bmFtaWNMaXN0T3V0cHV0KGNhc2VGaWVsZCwgZGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBGaWVsZFR5cGVTYW5pdGlzZXIuRklFTERfVFlQRV9DT01QTEVYOlxuICAgICAgICAgIHRoaXMuc2FuaXRpc2VMaXN0cyhjYXNlRmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgZGF0YVtjYXNlRmllbGQuaWRdKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEZpZWxkVHlwZVNhbml0aXNlci5GSUVMRF9UWVBFX0NPTExFQ1RJT046XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVtjYXNlRmllbGQuaWRdKSkge1xuICAgICAgICAgICAgZGF0YVtjYXNlRmllbGQuaWRdLmZvckVhY2goKGZvcm1FbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zYW5pdGlzZUxpc3RzKGNhc2VGaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgZm9ybUVsZW1lbnQudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGVuc3VyZUR5bmFtaWNNdWx0aVNlbGVjdExpc3RQb3B1bGF0ZWQoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiBDYXNlRmllbGRbXSB7XG4gICAgcmV0dXJuIGNhc2VGaWVsZHMubWFwKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUudHlwZSAhPT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNhc2VGaWVsZERhdGEgPSBmaWVsZC5fdmFsdWU7XG4gICAgICAvLyBQcm9jZXNzIGVhY2ggY29tcGxleCBmaWVsZFxuICAgICAgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5mb3JFYWNoKChjb21wbGV4RmllbGQpID0+IHtcbiAgICAgICAgaWYgKGNvbXBsZXhGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09IEZpZWxkVHlwZVNhbml0aXNlci5GSUVMRF9UWVBFX0NPTVBMRVgpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrTmVzdGVkRHluYW1pY0xpc3QoY29tcGxleEZpZWxkLCBjYXNlRmllbGREYXRhPy5bY29tcGxleEZpZWxkLmlkXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0R5bmFtaWNMaXN0KGNvbXBsZXhGaWVsZC5maWVsZF90eXBlLnR5cGUpICYmXG4gICAgICAgICAgY29tcGxleEZpZWxkLmRpc3BsYXlfY29udGV4dCAhPT0gJ0hJRERFTicgJiZcbiAgICAgICAgICBmaWVsZC5fdmFsdWU/Lltjb21wbGV4RmllbGQuaWRdXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbXBsZXhGaWVsZC5saXN0X2l0ZW1zID0gZmllbGQuX3ZhbHVlW2NvbXBsZXhGaWVsZC5pZF0/Lmxpc3RfaXRlbXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gRmluYWwgdHJhbnNmb3JtYXRpb246IGNvbnN0cnVjdCB1cGRhdGVkIGZpZWxkIG9iamVjdFxuICAgICAgcmV0dXJuIHsgLi4uZmllbGQsIGZpZWxkX3R5cGU6IHsgLi4uZmllbGQ/LmZpZWxkX3R5cGUgfSB9IGFzIENhc2VGaWVsZDtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNoZWNrTmVzdGVkRHluYW1pY0xpc3QoY2FzZUZpZWxkOiBDYXNlRmllbGQsIGZpZWxkRGF0YTogYW55ID0gbnVsbCk6IHZvaWQge1xuICAgIGNhc2VGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmZvckVhY2goKGNvbXBsZXhGaWVsZCkgPT4ge1xuICAgICAgaWYgKGNvbXBsZXhGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09IEZpZWxkVHlwZVNhbml0aXNlci5GSUVMRF9UWVBFX0NPTVBMRVgpIHtcbiAgICAgICAgdGhpcy5jaGVja05lc3RlZER5bmFtaWNMaXN0KGNvbXBsZXhGaWVsZCwgZmllbGREYXRhPy5bY29tcGxleEZpZWxkLmlkXSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNEeW5hbWljTGlzdChjb21wbGV4RmllbGQuZmllbGRfdHlwZS50eXBlKSAmJlxuICAgICAgICBjb21wbGV4RmllbGQuZGlzcGxheV9jb250ZXh0ICE9PSAnSElEREVOJyAmJlxuICAgICAgICBmaWVsZERhdGE/Lltjb21wbGV4RmllbGQuaWRdXG4gICAgICApIHtcbiAgICAgICAgY29tcGxleEZpZWxkLmxpc3RfaXRlbXMgPSBmaWVsZERhdGE/Lltjb21wbGV4RmllbGQuaWRdPy5saXN0X2l0ZW1zO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0R5bmFtaWNMaXN0KGZpZWxkVHlwZTogRmllbGRUeXBlRW51bSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBGaWVsZFR5cGVTYW5pdGlzZXIuRFlOQU1JQ19MSVNUX1RZUEUuaW5kZXhPZihmaWVsZFR5cGUpICE9PSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEFycmF5VG9EeW5hbWljTGlzdE91dHB1dChmaWVsZDogQ2FzZUZpZWxkLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBkYXRhW2ZpZWxkLmlkXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICBjb25zdCBsaXN0SXRlbXMgPSB0aGlzLmdldExpc3RJdGVtcyhmaWVsZCk7XG4gICAgICBjb25zdCBtYXRjaGVzID0gbGlzdEl0ZW1zLmZpbHRlcihpdGVtID0+IHZhbHVlcy5tYXAodiA9PiB2LmNvZGUpLmluZGV4T2YoaXRlbS5jb2RlKSAhPT0gLTEpO1xuXG4gICAgICBkYXRhW2ZpZWxkLmlkXSA9IHtcbiAgICAgICAgdmFsdWU6IG1hdGNoZXMsXG4gICAgICAgIGxpc3RfaXRlbXM6IGxpc3RJdGVtc1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRTdHJpbmdUb0R5bmFtaWNMaXN0T3V0cHV0KGZpZWxkOiBDYXNlRmllbGQsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gZGF0YVtmaWVsZC5pZF07XG4gICAgaWYgKHR5cGVvZiBzdHJpbmdWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGxpc3RJdGVtcyA9IHRoaXMuZ2V0TGlzdEl0ZW1zKGZpZWxkKTtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBsaXN0SXRlbXMuZmlsdGVyKHZhbHVlID0+IHZhbHVlPy5jb2RlID09PSBzdHJpbmdWYWx1ZSk7XG4gICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGF0YVtmaWVsZC5pZF0gPSB7XG4gICAgICAgICAgdmFsdWU6IG1hdGNoZXNbMF0sXG4gICAgICAgICAgbGlzdF9pdGVtczogbGlzdEl0ZW1zXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRMaXN0SXRlbXMoZmllbGQ6IENhc2VGaWVsZCk6IGFueVtdIHtcbiAgICBpZiAoZmllbGQpIHtcbiAgICAgIGlmIChmaWVsZC5saXN0X2l0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmaWVsZC5saXN0X2l0ZW1zO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLmZvcm1hdHRlZF92YWx1ZSAmJiBmaWVsZC5mb3JtYXR0ZWRfdmFsdWUubGlzdF9pdGVtcykge1xuICAgICAgICByZXR1cm4gZmllbGQuZm9ybWF0dGVkX3ZhbHVlLmxpc3RfaXRlbXM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxufVxuIl19
@@ -288,24 +288,6 @@ export class FormValueService {
288
288
  }
289
289
  }
290
290
  }
291
- checkValuesSetInCollection(caseField, data) {
292
- for (const field in data) {
293
- const fieldId = data[field].id;
294
- if (Array.isArray(caseField.data[fieldId])) {
295
- for (const subField in caseField.data[fieldId]) {
296
- if (data[field]?._value) {
297
- if (caseField.data[fieldId][subField] !== data[field]?._value[subField]) {
298
- caseField.data[fieldId][subField] = data[field]._value[subField];
299
- }
300
- }
301
- }
302
- }
303
- else if ((data[field]._value) && (caseField.data[fieldId] !== data[field]._value)) {
304
- caseField.data[fieldId] = data[field]._value;
305
- }
306
- }
307
- return caseField;
308
- }
309
291
  // TODO refactor so that this and remove unnecessary fields have a common iterator that applies functions to each node visited
310
292
  removeNullLabels(data, caseFields) {
311
293
  if (data && caseFields && caseFields.length > 0) {
@@ -567,4 +549,4 @@ export class FormValueService {
567
549
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormValueService, [{
568
550
  type: Injectable
569
551
  }], () => [{ type: i1.FieldTypeSanitiser }], null); })();
570
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWx1ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9mb3JtL2Zvcm0tdmFsdWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQUc1RCxNQUFNLE9BQU8sZ0JBQWdCO0lBOExFO0lBN0w3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BbUdHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVE7UUFDbEQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEUsQ0FBQzthQUFNLElBQUksV0FBVyxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDOUQsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FB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LENBQUMsR0FBRyxFQUFFLEVBQUU7NEJBQzlDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQ0FDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUNqRCxDQUFDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHdDQUF3QyxDQUFDLElBQVksRUFBRSxVQUF1QjtRQUNuRixJQUFJLElBQUksSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoRCxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2lCQUM3RixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ25CLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDdkMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7MEVBMWpCVSxnQkFBZ0I7Z0VBQWhCLGdCQUFnQixXQUFoQixnQkFBZ0I7O2lGQUFoQixnQkFBZ0I7Y0FENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ2FzZUZpZWxkLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vZmllbGRzJztcbmltcG9ydCB7IEZpZWxkVHlwZVNhbml0aXNlciB9IGZyb20gJy4vZmllbGQtdHlwZS1zYW5pdGlzZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRm9ybVZhbHVlU2VydmljZSB7XG4gIC8qKlxuICAgKiBHZXRzIHZhbHVlIG9mIGEgZmllbGQgYmFzZWQgb24gZmllbGRLZXkgd2hpY2ggaXMgYSBkb3Qgc2VwYXJhdGVkIHJlZmVyZW5jZSB0byB2YWx1ZSBhbmQgY29sbGVjdGlvbiBpbmRleC5cbiAgICogVGhlcmUgYXJlIHR3byBleGNlcHRpb25zOlxuICAgKiAxKSBJbiBjYXNlIG9mIGEgbXVsdGlzZWxlY3QgYmVpbmcgaWRlbnRpZmllZCBhcyBhIGxlYWYgYSAnLS0tTEFCRUwnIHN1ZmZpeCBpcyBhcHBlbmRlZCB0byB0aGUga2V5IGFuZCB2YWx1ZXMgb2YgdGhhdCBrZXkgYXJlIHJldHVybmVkXG4gICAqICAgICAgZm9ybT0geyAnbGlzdCc6IFsnY29kZTEnLCAnY29kZTInXSxcbiAgICogICAgICAgICAgICAgICdsaXN0LS0tTEFCRUwnOiBbJ2xhYmVsMScsICdsYWJlbDInXSB9LFxuICAgKiAgICAgIGZpZWxkS2V5PWxpc3QsXG4gICAqICAgICAgY29sSW5kZXg9MCxcbiAgICogICAgICB2YWx1ZT1sYWJlbDEsIGxhYmVsMlxuICAgKiAyKSBJbiBjYXNlIG9mIGEgY29sbGVjdGlvbiBvZiBzaW1wbGUgZmllbGRzIGlzIGlkZW50aWZpZWQgYXMgYSBsZWFmIGFsbCB2YWx1ZXMgYXJlIGpvaW5lZCBzZXBlcmF0ZWQgYnkgYSBjb21tYVxuICAgKiAgICAgIGZvcm09IHsgJ2NvbGxlY3Rpb24nOiBbeyAndmFsdWUnOiAndmFsdWUxJyB9LCB7ICd2YWx1ZSc6ICd2YWx1ZTInIH1dIH1cbiAgICogICAgICBmaWVsZEtleT1jb2xsZWN0aW9uXG4gICAqICAgICAgY29sSW5kZXg9MVxuICAgKiAgICAgIHZhbHVlPXZhbHVlMSwgdmFsdWUyXG4gICAqXG4gICAqIE90aGVyIGV4YW1wbGVzOlxuICAgKiAxKSBzaW1wbGUgZmllbGQgcmVmZXJlbmNlOiBmb3JtPXsgJ1BlcnNvbkZpcnN0TmFtZSc6ICdKb2huJyB9LCBmaWVsZEtleT1QZXJzb25GaXJzdE5hbWUsIHZhbHVlPUpvaG5cbiAgICogMikgY29tcGxleCBmaWVsZCByZWZlcmVuY2U6XG4gICAqICAgICAgZm9ybT0geyBjb21wbGV4MSc6IHsgJ3NpbXBsZTExJzogJ3ZhbHVlMTEnLCAnc2ltcGxlMTInOiAndmFsdWUxMicsICdjb21wbGV4Mic6IHsgJ3NpbXBsZTIxJzogJ3ZhbHVlMjEnIH0gfX0sXG4gICAqICAgICAgZmllbGRLZXk9Y29tcGxleDEuY29tcGxleDIuc2ltcGxlMjFcbiAgICogICAgICBjb2xJbmRleD0wLFxuICAgKiAgICAgIHZhbHVlPXZhbHVlMjFcbiAgICogMykgY29tcGxleCBmaWVsZCB3aXRoIGNvbGxlY3Rpb24gZmllbGQgd2l0aCBjb21wbGV4IGZpZWxkIHJlZmVyZW5jZTpcbiAgICogICAgICBmb3JtPSB7ICdjb21wbGV4MSc6IHtcbiAgICogICAgICAgICAgICAgICAnY29sbGVjdGlvbjEnOiBbXG4gICAqICAgICAgICAgICAgICAgeyAndmFsdWUnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICdjb21wbGV4Mic6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMSc6ICd2YWx1ZTEnLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Myc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4NCc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTInOiAndmFsdWUxMidcbiAgICogICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgICAgIHsgJ3ZhbHVlJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAnY29tcGxleDInOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTEnOiAndmFsdWUyJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAnY29tcGxleDMnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDQnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUyJzogJ3ZhbHVlMjEnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgfSxcbiAgICogICAgICAgICAgICAgICB7ICd2YWx1ZSc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgyJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUxJzogJ3ZhbHVlMycsXG4gICAqICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgzJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXg0Jzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMic6ICd2YWx1ZTMxJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgXX19XG4gICAqICAgICAgZmllbGRLZXk9Y29tcGxleDEuY29sbGVjdGlvbjEuY29tcGxleDIuY29tcGxleDMuY29tcGxleDQuc2ltcGxlMlxuICAgKiAgICAgIGNvbEluZGV4PTIsXG4gICAqICAgICAgdmFsdWU9dmFsdWUyMVxuICAgKiA0KSBjb2xsZWN0aW9uIG9mIGNvbXBsZXggdHlwZXNcbiAgICogICAgICBmb3JtPSB7ICdjb2xsZWN0aW9uMSc6IFtcbiAgICogICAgICAgICAgICAgICB7ICd2YWx1ZSc6IHsnY29tcGxleDEnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMSc6ICd2YWx1ZTExJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Mic6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgzJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUyJzogJ3ZhbHVlMTInXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICogICAgICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgICAgIHsgJ3ZhbHVlJzogeydjb21wbGV4MSc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUxJzogJ3ZhbHVlMjEnLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgyJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDMnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTInOiAndmFsdWUyMidcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgKiAgICAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgICAgeyAndmFsdWUnOiB7J2NvbXBsZXgxJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTEnOiAndmFsdWUzMScsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDInOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Myc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMic6ICd2YWx1ZTMyJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICogICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgIF19XG4gICAqICAgICAgZmllbGRLZXk9Y29sbGVjdGlvbjEuY29tcGxleDEuY29tcGxleDIuY29tcGxleDMuc2ltcGxlMlxuICAgKiAgICAgIGNvbEluZGV4PTJcbiAgICogICAgICB2YWx1ZT12YWx1ZTMyXG4gICAqXG4gICAqIElmIGtleSBpcyBwb2ludGluZyBhdCBhIGNvbXBsZXggb3IgY29sbGVjdGlvbiBsZWFmIChub3Qgc2ltcGxlLCBjb2xsZWN0aW9uIG9mIHNpbXBsZSBvciBtdWx0aXNlbGVjdCB0eXBlcykgdGhlbiB1bmRlZmluZWQgaXMgcmV0dXJuZWQuXG4gICAqIEFsc28gbm8ga2V5IHJlZmVycmluZyBhIGxlYWYgdGhhdCBpcyBjb250YWluZWQgd2l0aGluIGNvbGxlY3Rpb24gd2lsbCBjb250YWluIGluZGV4IG51bWJlci4gVGhlIGluZGV4IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGVcbiAgICogbWV0aG9kLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRGaWVsZFZhbHVlKGZvcm0sIGZpZWxkS2V5LCBjb2xJbmRleCkge1xuICAgIGNvbnN0IGZpZWxkSWRzID0gZmllbGRLZXkuc3BsaXQoJy4nKTtcbiAgICBjb25zdCBjdXJyZW50RmllbGRJZCA9IGZpZWxkSWRzWzBdO1xuICAgIGNvbnN0IGN1cnJlbnRGb3JtID0gZm9ybVtjdXJyZW50RmllbGRJZF07XG4gICAgaWYgKEZpZWxkc1V0aWxzLmlzTXVsdGlTZWxlY3RWYWx1ZShjdXJyZW50Rm9ybSkpIHtcbiAgICAgIHJldHVybiBmb3JtW2N1cnJlbnRGaWVsZElkICsgRmllbGRzVXRpbHMuTEFCRUxfU1VGRklYXS5qb2luKCcsICcpO1xuICAgIH0gZWxzZSBpZiAoRmllbGRzVXRpbHMuaXNDb2xsZWN0aW9uT2ZTaW1wbGVUeXBlcyhjdXJyZW50Rm9ybSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Rm9ybS5tYXAoZmllbGRWYWx1ZSA9PiBmaWVsZFZhbHVlWyd2YWx1ZSddKS5qb2luKCcsICcpO1xuICAgIH0gZWxzZSBpZiAoRmllbGRzVXRpbHMuaXNDb2xsZWN0aW9uKGN1cnJlbnRGb3JtKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRWYWx1ZShjdXJyZW50Rm9ybVtjb2xJbmRleF1bJ3ZhbHVlJ10sIGZpZWxkSWRzLnNsaWNlKDEpLmpvaW4oJy4nKSwgY29sSW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChjdXJyZW50Rm9ybSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkVmFsdWUoY3VycmVudEZvcm0sIGZpZWxkSWRzLnNsaWNlKDEpLmpvaW4oJy4nKSwgY29sSW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3VycmVudEZvcm07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgcmVjdXJzaXZlIG1ldGhvZCB0byByZW1vdmUgYW55dGhpbmcgd2l0aCBhIGAtLS1MQUJFTGAgc3VmZml4LlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byByZWN1cnNlIHRocm91Z2ggYW5kIHJlbW92ZSBNdWx0aVNlbGVjdCBsYWJlbHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlbW92ZU11bHRpU2VsZWN0TGFiZWxzKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEpIHtcbiAgICAgICAgICBGb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZU11bHRpU2VsZWN0TGFiZWxzKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgLy8gSGF2ZSB3ZSBmb3VuZCBvbmUgYSBNdWx0aVNlbGVjdCBsYWJlbD9cbiAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoRmllbGRzVXRpbHMuTEFCRUxfU1VGRklYKSA+IDApIHtcbiAgICAgICAgICAgIC8vIElmIHNvLCByZW1vdmUgaXQuXG4gICAgICAgICAgICBkZWxldGUgZGF0YVtrZXldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBGb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZU11bHRpU2VsZWN0TGFiZWxzKGRhdGFba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNSZWFkT25seShmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpZWxkLmRpc3BsYXlfY29udGV4dCA/IGZpZWxkLmRpc3BsYXlfY29udGV4dC50b1VwcGVyQ2FzZSgpID09PSAnUkVBRE9OTFknIDogZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc09wdGlvbmFsKGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmllbGQuZGlzcGxheV9jb250ZXh0ID8gZmllbGQuZGlzcGxheV9jb250ZXh0LnRvVXBwZXJDYXNlKCkgPT09ICdPUFRJT05BTCcgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzTGFiZWwoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIGlmIChmaWVsZC5maWVsZF90eXBlKSB7XG4gICAgICByZXR1cm4gZmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnTGFiZWwnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNFbXB0eURhdGEoZGF0YTogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGxldCBhbGxFbXB0eSA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoZGF0YSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW3Byb3BdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhbGxFbXB0eSA9IGFsbEVtcHR5ICYmIHRoaXMuaXNFbXB0eURhdGEodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbGxFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFsbEVtcHR5O1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG91bGQgd2UgY2xlYXIgb3V0IG9wdGlvbmFsLCBlbXB0eSwgY29tcGxleCBvYmplY3RzP1xuICAgKiBAcGFyYW0gY2xlYXJFbXB0eSBGYWxzZSBwcm9wZXJ0eSBpZiB3ZSBzaW1wbHkgd2FudCB0byBza2lwIGl0LlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBhc3Nlc3MgZm9yIFwiZW1wdGluZXNzXCIuXG4gICAqIEBwYXJhbSBmaWVsZCBUaGUgQ2FzZUZpZWxkIHRoYXQgd2lsbCB0ZWxsIHVzIGlmIHRoaXMgaXMgb3B0aW9uYWwuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjbGVhck9wdGlvbmFsRW1wdHkoY2xlYXJFbXB0eTogYm9vbGVhbiwgZGF0YTogb2JqZWN0LCBmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgaWYgKGNsZWFyRW1wdHkpIHtcbiAgICAgIHJldHVybiBGb3JtVmFsdWVTZXJ2aWNlLmlzT3B0aW9uYWwoZmllbGQpICYmIEZvcm1WYWx1ZVNlcnZpY2UuaXNFbXB0eURhdGEoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZmllbGRUeXBlU2FuaXRpc2VyOiBGaWVsZFR5cGVTYW5pdGlzZXIpIHtcbiAgfVxuXG4gIHB1YmxpYyBzYW5pdGlzZShyYXdWYWx1ZTogb2JqZWN0KTogb2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGlzZU9iamVjdChyYXdWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2FuaXRpc2VDYXNlUmVmZXJlbmNlKHJlZmVyZW5jZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBzdHJpcCBub24gZGlnaXRzXG4gICAgY29uc3Qgczogc3RyaW5nID0gcmVmZXJlbmNlLnJlcGxhY2UoL1tcXERdL2csICcnKTtcbiAgICBpZiAocy5sZW5ndGggPiAxNikge1xuICAgICAgcmV0dXJuIHMuc3Vic3RyKHMubGVuZ3RoIC0gMTYsIDE2KTtcbiAgICB9XG4gICAgcmV0dXJuIHM7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyQ3VycmVudFBhZ2VGaWVsZHMoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGVkaXRGb3JtOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGNsb25lRm9ybSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZWRpdEZvcm0pKTtcbiAgICBPYmplY3Qua2V5cyhjbG9uZUZvcm1bJ2RhdGEnXSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoY2FzZUZpZWxkcy5maW5kSW5kZXgoKGVsZW1lbnQpID0+IGVsZW1lbnQuaWQgPT09IGtleSkgPCAwKSB7XG4gICAgICAgIGRlbGV0ZSBjbG9uZUZvcm1bJ2RhdGEnXVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZUZvcm07XG4gIH1cblxuICBwdWJsaWMgc2FuaXRpc2VEeW5hbWljTGlzdHMoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGVkaXRGb3JtOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkVHlwZVNhbml0aXNlci5zYW5pdGlzZUxpc3RzKGNhc2VGaWVsZHMsIGVkaXRGb3JtLmRhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGlzZU9iamVjdChyYXdPYmplY3Q6IG9iamVjdCk6IG9iamVjdCB7XG4gICAgaWYgKCFyYXdPYmplY3QpIHtcbiAgICAgIHJldHVybiByYXdPYmplY3Q7XG4gICAgfVxuXG4gICAgbGV0IHNhbml0aXNlZE9iamVjdCA9IHt9O1xuICAgIGNvbnN0IGRvY3VtZW50RmllbGRLZXlzID0gWydkb2N1bWVudF91cmwnLCAnZG9jdW1lbnRfYmluYXJ5X3VybCcsICdkb2N1bWVudF9maWxlbmFtZSddO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHJhd09iamVjdCkge1xuICAgICAgLy8gSWYgdGhlIGtleSBpcyBvbmUgb2YgZG9jdW1lbnRGaWVsZEtleXMsIGl0IG1lYW5zIHRoZSBmaWVsZCBpcyBvZiBEb2N1bWVudCB0eXBlLiBJZiB0aGUgdmFsdWUgb2YgYW55IG9mIHRoZXNlXG4gICAgICAvLyBwcm9wZXJ0aWVzIGlzIG51bGwsIHRoZSBlbnRpcmUgc2FuaXRpc2VkIG9iamVjdCB0byBiZSByZXR1cm5lZCBzaG91bGQgYmUgbnVsbFxuICAgICAgaWYgKGRvY3VtZW50RmllbGRLZXlzLmluZGV4T2Yoa2V5KSA+IC0xICYmIHJhd09iamVjdFtrZXldID09PSBudWxsKSB7XG4gICAgICAgIHNhbml0aXNlZE9iamVjdCA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICgnQ2FzZVJlZmVyZW5jZScgPT09IGtleSkge1xuICAgICAgICBzYW5pdGlzZWRPYmplY3Rba2V5XSA9IHRoaXMuc2FuaXRpc2VWYWx1ZSh0aGlzLnNhbml0aXNlQ2FzZVJlZmVyZW5jZShTdHJpbmcocmF3T2JqZWN0W2tleV0pKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzYW5pdGlzZWRPYmplY3Rba2V5XSA9IHRoaXMuc2FuaXRpc2VWYWx1ZShyYXdPYmplY3Rba2V5XSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNhbml0aXNlZE9iamVjdFtrZXldKSkge1xuICAgICAgICAgIC8vIElmIHRoZSAnc2FuaXRpc2VkJyBhcnJheSBpcyBlbXB0eSwgd2hlcmVhcyB0aGUgb3JpZ2luYWwgYXJyYXkgaGFkIDEgb3IgbW9yZSBpdGVtc1xuICAgICAgICAgIC8vIGRlbGV0ZSB0aGUgcHJvcGVydHkgZnJvbSB0aGUgc2FuYXRpc2VkIG9iamVjdFxuICAgICAgICAgIGlmIChzYW5pdGlzZWRPYmplY3Rba2V5XS5sZW5ndGggPT09IDAgJiYgcmF3T2JqZWN0W2tleV0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHNhbml0aXNlZE9iamVjdFtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2FuaXRpc2VkT2JqZWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGlzZUFycmF5KHJhd0FycmF5OiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIXJhd0FycmF5KSB7XG4gICAgICByZXR1cm4gcmF3QXJyYXk7XG4gICAgfVxuXG4gICAgcmF3QXJyYXkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcbiAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMuc2FuaXRpc2VWYWx1ZShpdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEZpbHRlciB0aGUgYXJyYXkgdG8gZW5zdXJlIG9ubHkgdHJ1dGh5IHZhbHVlcyBhcmUgcmV0dXJuZWQ7IGRvdWJsZS1iYW5nIG9wZXJhdG9yIHJldHVybnMgdGhlIGJvb2xlYW4gdHJ1ZS9mYWxzZVxuICAgIC8vIGFzc29jaWF0aW9uIG9mIGEgdmFsdWUuIEluIGFkZGl0aW9uLCBpZiB0aGUgYXJyYXkgY29udGFpbnMgaXRlbXMgd2l0aCBhIFwidmFsdWVcIiBvYmplY3QgcHJvcGVydHksIHJldHVybiBvbmx5XG4gICAgLy8gdGhvc2Ugd2hvc2UgdmFsdWUgb2JqZWN0IGNvbnRhaW5zIG5vbi1lbXB0eSB2YWx1ZXMsIGluY2x1ZGluZyBmb3IgYW55IGRlc2NlbmRhbnQgb2JqZWN0c1xuICAgIHJldHVybiByYXdBcnJheVxuICAgICAgLmZpbHRlcihpdGVtID0+ICEhaXRlbSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gRmllbGRzVXRpbHMuY29udGFpbnNOb25FbXB0eVZhbHVlcyhpdGVtLnZhbHVlKSA6IHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGlzZVZhbHVlKHJhd1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJhd1ZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpc2VBcnJheShyYXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlb2YgcmF3VmFsdWUpIHtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiB0aGlzLnNhbml0aXNlT2JqZWN0KHJhd1ZhbHVlKTtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiByYXdWYWx1ZS50cmltKCk7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHJhd1ZhbHVlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiByYXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXJOb25DYXNlRmllbGRzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFLZXkgaW4gZGF0YSkge1xuICAgICAgaWYgKCFjYXNlRmllbGRzLmZpbmQoY2YgPT4gY2YuaWQgPT09IGRhdGFLZXkpKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhW2RhdGFLZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjaGVja1ZhbHVlc1NldEluQ29sbGVjdGlvbihjYXNlRmllbGQ6IGFueSwgZGF0YTogYW55KTogYW55IHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIGluIGRhdGEpIHtcbiAgICAgIGNvbnN0IGZpZWxkSWQgPSBkYXRhW2ZpZWxkXS5pZDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNhc2VGaWVsZC5kYXRhW2ZpZWxkSWRdKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHN1YkZpZWxkIGluIGNhc2VGaWVsZC5kYXRhW2ZpZWxkSWRdKSB7XG4gICAgICAgICAgaWYgKGRhdGFbZmllbGRdPy5fdmFsdWUpe1xuICAgICAgICAgICAgaWYgKGNhc2VGaWVsZC5kYXRhW2ZpZWxkSWRdW3N1YkZpZWxkXSAhPT0gZGF0YVtmaWVsZF0/Ll92YWx1ZVtzdWJGaWVsZF0pIHtcbiAgICAgICAgICAgICAgY2FzZUZpZWxkLmRhdGFbZmllbGRJZF1bc3ViRmllbGRdID0gZGF0YVtmaWVsZF0uX3ZhbHVlW3N1YkZpZWxkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKGRhdGFbZmllbGRdLl92YWx1ZSkgJiYgKGNhc2VGaWVsZC5kYXRhW2ZpZWxkSWRdICE9PSBkYXRhW2ZpZWxkXS5fdmFsdWUpKSB7XG4gICAgICAgIGNhc2VGaWVsZC5kYXRhW2ZpZWxkSWRdID0gZGF0YVtmaWVsZF0uX3ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FzZUZpZWxkO1xuICB9XG5cbiAgLy8gVE9ETyByZWZhY3RvciBzbyB0aGF0IHRoaXMgYW5kIHJlbW92ZSB1bm5lY2Vzc2FyeSBmaWVsZHMgaGF2ZSBhIGNvbW1vbiBpdGVyYXRvciB0aGF0IGFwcGxpZXMgZnVuY3Rpb25zIHRvIGVhY2ggbm9kZSB2aXNpdGVkXG4gIHB1YmxpYyByZW1vdmVOdWxsTGFiZWxzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IGRhdGEgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgZm9ybSB0aGF0J3Mgbm90IGluIHRoZSBjYXNlRmllbGRzXG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGNhc2VGaWVsZHMpIHtcbiAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmZpZWxkX3R5cGUudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnTGFiZWwnOlxuICAgICAgICAgICAgICAvLyBEZWxldGUgYW55IGxhYmVscyB0aGF0IGFyZSBudWxsXG4gICAgICAgICAgICAgIGlmICgoZGF0YVtmaWVsZC5pZF0gPT09IG51bGwpIHx8IChkYXRhW2ZpZWxkLmlkXSA9PT0gJycpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ29tcGxleCc6XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2UgYW5kIHJlbW92ZSBhbnl0aGluZyB1bm5lY2Vzc2FyeSBmcm9tIHdpdGhpbiBhIGNvbXBsZXggZmllbGQuXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlTnVsbExhYmVscyhkYXRhW2ZpZWxkLmlkXSwgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgICAgIC8vIEdldCBob2xkIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFjdHVhbGx5IGhhdmUgYSBjb2xsZWN0aW9uIHRvIHdvcmsgd2l0aC5cbiAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gJiYgQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGNvbXBsZXggb2JqZWN0LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaFxuICAgICAgICAgICAgICAgIC8vIGFuZCBjbGVhciB0aGVtIG91dC5cbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGVsZW1lbnRzIGFuZCByZW1vdmUgYW55IHVubmVjZXNzYXJ5IGZpZWxkcyB3aXRoaW4uXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZU51bGxMYWJlbHMoaXRlbSwgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZU51bGxMYWJlbHMoaXRlbS52YWx1ZSwgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBUT0RPIHJlZmFjdG9yIHNvIHRoYXQgdGhpcyBhbmQgcmVtb3ZlIHVubmVjZXNzYXJ5IGZpZWxkcyBoYXZlIGEgY29tbW9uIGl0ZXJhdG9yIHRoYXQgYXBwbGllcyBmdW5jdGlvbnMgdG8gZWFjaCBub2RlIHZpc2l0ZWRcbiAgcHVibGljIHJlbW92ZUVtcHR5RG9jdW1lbnRzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IGRhdGEgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgZm9ybSB0aGF0J3Mgbm90IGluIHRoZSBjYXNlRmllbGRzXG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGNhc2VGaWVsZHMpIHtcbiAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmZpZWxkX3R5cGUudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnQ29tcGxleCc6XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2UgYW5kIHJlbW92ZSBhbnkgZW1wdHkgZG9jdW1lbnRzIGZyb20gd2l0aGluIGEgY29tcGxleCBmaWVsZC5cbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eURvY3VtZW50cyhkYXRhW2ZpZWxkLmlkXSwgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgICAgIC8vIEdldCBob2xkIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFjdHVhbGx5IGhhdmUgYSBjb2xsZWN0aW9uIHRvIHdvcmsgd2l0aC5cbiAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gJiYgQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGNvbXBsZXggb2JqZWN0LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaFxuICAgICAgICAgICAgICAgIC8vIGFuZCBjbGVhciBvdXQgZW1wdHkgZG9jdW1lbnRzXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4Jykge1xuICAgICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBlbGVtZW50cyBhbmQgcmVtb3ZlIGFueSBlbXB0eSBkb2N1bWVudHMgd2l0aGluLlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eURvY3VtZW50cyhpdGVtLCBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlEb2N1bWVudHMoaXRlbS52YWx1ZSwgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0RvY3VtZW50JzpcbiAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoaXMgaXMgZXhlY3V0ZWQgb25seSBpZiB0aGUgRG9jdW1lbnQgZmllbGQgaXMgTk9UIGhpZGRlbiBhbmQgaXMgZW1wdHkgb2YgZGF0YTsgaGlkZGVuIERvY3VtZW50XG4gICAgICAgICAgICAgIC8vIGZpZWxkcyBhcmUgaGFuZGxlZCBieSB0aGUgZmlsdGVyUmF3Rm9ybVZhbHVlcygpIGZ1bmN0aW9uIGluIENhc2VFZGl0U3VibWl0IGNvbXBvbmVudFxuICAgICAgICAgICAgICBpZiAoZmllbGQuaGlkZGVuICE9PSB0cnVlICYmIEZvcm1WYWx1ZVNlcnZpY2UuaXNFbXB0eURhdGEoZGF0YVtmaWVsZC5pZF0pKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDbGVhciBvdXQgdW5uZWNlc3NhcnkgZmllbGRzIGZyb20gYSBkYXRhIG9iamVjdCwgYmFzZWQgb24gYW4gYXJyYXkgb2YgQ2FzZUZpZWxkcy5cbiAgICogVGhpcyBtZXRob2QgaXMgcmVjdXJzaXZlIGFuZCB3aWxsIGNhbGwgaXRzZWxmIGlmIGl0IGVuY291bnRlcnMgcGFydGljdWxhciBmaWVsZCB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIG9iamVjdCB0byBiZSB0aWRpZWQgdXAuXG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBDYXNlRmllbGRzIHRoYXQgbmVlZCB0byBiZSBjbGVhbmVkIHVwLlxuICAgKiBAcGFyYW0gY2xlYXJFbXB0eSBXaGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgY2xlYXIgb3V0IGVtcHR5LCBvcHRpb25hbCwgY29tcGxleCBvYmplY3RzLlxuICAgKiBAcGFyYW0gY2xlYXJOb25DYXNlIFdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBjbGVhciBvdXQgbm9uLWNhc2UgZmllbGRzIGF0IHRoZSB0b3AgbGV2ZWwuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlVW5uZWNlc3NhcnlGaWVsZHMoZGF0YTogb2JqZWN0LCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgY2xlYXJFbXB0eSA9IGZhbHNlLCBjbGVhck5vbkNhc2UgPSBmYWxzZSxcbiAgICBmcm9tUHJldmlvdXNQYWdlID0gZmFsc2UsIGN1cnJlbnRQYWdlQ2FzZUZpZWxkcyA9IFtdKTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBkYXRhIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGZvcm0gdGhhdCdzIG5vdCBpbiB0aGUgY2FzZUZpZWxkc1xuICAgICAgaWYgKGNsZWFyTm9uQ2FzZSkge1xuICAgICAgICB0aGlzLmNsZWFyTm9uQ2FzZUZpZWxkcyhkYXRhLCBjYXNlRmllbGRzKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgY2FzZUZpZWxkcykge1xuICAgICAgICBpZiAoIUZvcm1WYWx1ZVNlcnZpY2UuaXNMYWJlbChmaWVsZCkgJiYgRm9ybVZhbHVlU2VydmljZS5pc1JlYWRPbmx5KGZpZWxkKSkge1xuICAgICAgICAgIC8vIFJldGFpbiBhbnl0aGluZyB0aGF0IGlzIHJlYWRvbmx5IGFuZCBub3QgYSBsYWJlbC5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQuaGlkZGVuID09PSB0cnVlICYmIGZpZWxkLmRpc3BsYXlfY29udGV4dCAhPT0gJ0hJRERFTicgJiYgZmllbGQuZGlzcGxheV9jb250ZXh0ICE9PSAnSElEREVOX1RFTVAnICYmIGZpZWxkLmlkICE9PSAnY2FzZUxpbmtzJyAmJiAhZmllbGQucmV0YWluX2hpZGRlbl92YWx1ZSkge1xuICAgICAgICAgIC8vIERlbGV0ZSBhbnl0aGluZyB0aGF0IGlzIGhpZGRlbiAodGhhdCBpcyBOT1QgcmVhZG9ubHkpLCBhbmQgdGhhdFxuICAgICAgICAgIC8vIGhhc24ndCBoYWQgaXRzIGRpc3BsYXlfY29udGV4dCBvdmVycmlkZGVuIHRvIG1ha2UgaXQgaGlkZGVuLlxuICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5maWVsZF90eXBlKSB7XG4gICAgICAgICAgc3dpdGNoIChmaWVsZC5maWVsZF90eXBlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0xhYmVsJzpcbiAgICAgICAgICAgICAgLy8gRGVsZXRlIGFueSBsYWJlbHMuXG4gICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdEb2N1bWVudCc6XG4gICAgICAgICAgICAgIGlmIChGb3JtVmFsdWVTZXJ2aWNlLmlzRW1wdHlEYXRhKGRhdGFbZmllbGQuaWRdKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0NvbXBsZXgnOlxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZVVubmVjZXNzYXJ5RmllbGRzKGRhdGFbZmllbGQuaWRdLCBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLCBjbGVhckVtcHR5KTtcbiAgICAgICAgICAgICAgLy8gQWxzbyByZW1vdmUgYW55IG9wdGlvbmFsIGNvbXBsZXggb2JqZWN0cyB0aGF0IGFyZSBjb21wbGV0ZWx5IGVtcHR5LlxuICAgICAgICAgICAgICAvLyBFVUktNDI0NDogUml0ZXNoJ3MgZml4LCBwYXNzaW5nIHRydWUgaW5zdGVhZCBvZiBjbGVhckVtcHR5LlxuICAgICAgICAgICAgICBpZiAoRm9ybVZhbHVlU2VydmljZS5jbGVhck9wdGlvbmFsRW1wdHkodHJ1ZSwgZGF0YVtmaWVsZC5pZF0sIGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZGF0YVtmaWVsZC5pZF0gJiYgRm9ybVZhbHVlU2VydmljZS5pc0VtcHR5RGF0YShkYXRhW2ZpZWxkLmlkXSkgJiYgZnJvbVByZXZpb3VzUGFnZVxuICAgICAgICAgICAgICAgICYmIGN1cnJlbnRQYWdlQ2FzZUZpZWxkcy5maW5kSW5kZXgoKGNGaWVsZDogYW55KSA9PiBjRmllbGQuaWQgPT09IGZpZWxkLmlkKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHZhbGlkIGNvbGxlY3Rpb24gZGF0YVxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUludmFsaWRDb2xsZWN0aW9uRGF0YShkYXRhLCBmaWVsZCk7XG4gICAgICAgICAgICAgIC8vIEdldCBob2xkIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFjdHVhbGx5IGhhdmUgYSBjb2xsZWN0aW9uIHRvIHdvcmsgd2l0aC5cbiAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gJiYgQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGNvbXBsZXggb2JqZWN0LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaFxuICAgICAgICAgICAgICAgIC8vIGFuZCBjbGVhciB0aGVtIG91dC5cbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGVsZW1lbnRzIGFuZCByZW1vdmUgYW55IHVubmVjZXNzYXJ5IGZpZWxkcyB3aXRoaW4uXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVVubmVjZXNzYXJ5RmllbGRzKGl0ZW0sIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLCBjbGVhckVtcHR5KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVVbm5lY2Vzc2FyeUZpZWxkcyhpdGVtLnZhbHVlLCBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIG91dCBhbnkgTXVsdGlTZWxlY3QgbGFiZWxzLlxuICAgIEZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlTXVsdGlTZWxlY3RMYWJlbHMoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlSW52YWxpZENvbGxlY3Rpb25EYXRhKGRhdGE6IG9iamVjdCwgZmllbGQ6IENhc2VGaWVsZCkge1xuICAgIGlmIChkYXRhW2ZpZWxkLmlkXSAmJiBkYXRhW2ZpZWxkLmlkXS5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IG9iakNvbGxlY3Rpb24gb2YgZGF0YVtmaWVsZC5pZF0pIHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iakNvbGxlY3Rpb24pLmxlbmd0aCA9PT0gMSAmJiBPYmplY3Qua2V5cyhvYmpDb2xsZWN0aW9uKS5pbmRleE9mKCdpZCcpID4gLTEpIHtcbiAgICAgICAgICBkYXRhW2ZpZWxkLmlkXSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbnkgZW1wdHkgY29sbGVjdGlvbiBmaWVsZHMgd2hlcmUgYSB2YWx1ZSBvZiBncmVhdGVyIHRoYW4gemVybyBpcyBzcGVjaWZpZWQgaW4gdGhlIGZpZWxkJ3Mge0BsaW5rIEZpZWxkVHlwZX1cbiAgICogYG1pbmAgYXR0cmlidXRlLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRyZWUgb2YgZm9ybSB2YWx1ZXMgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUgcmVtb3ZhbFxuICAgKiBAcGFyYW0gY2FzZUZpZWxkcyBUaGUgbGlzdCBvZiB1bmRlcmx5aW5nIHtAbGluayBDYXNlRmllbGR9IGRvbWFpbiBtb2RlbCBvYmplY3RzIGZvciBlYWNoIGZpZWxkXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlRW1wdHlDb2xsZWN0aW9uc1dpdGhNaW5WYWxpZGF0aW9uKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiB2b2lkIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBjYXNlRmllbGRzKSB7XG4gICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdDb2xsZWN0aW9uJyAmJiB0eXBlb2YgZmllbGQuZmllbGRfdHlwZS5taW4gPT09ICdudW1iZXInICYmIGZpZWxkLmZpZWxkX3R5cGUubWluID4gMCAmJlxuICAgICAgICAgIGRhdGFbZmllbGQuaWRdICYmIEFycmF5LmlzQXJyYXkoZGF0YVtmaWVsZC5pZF0pICYmIGRhdGFbZmllbGQuaWRdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZnJvbSB0aGUgdG9wIGxldmVsIG9mIHRoZSBmb3JtIGRhdGEgYW55IGNhc2UgZmllbGRzIG9mIGEgZ2l2ZW4gdHlwZSBvciB0eXBlcyB0aGF0IGFyZSBub3QgaW50ZW5kZWQgdG8gYmVcbiAgICogcGVyc2lzdGVkLiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIHJlbW92ZSBcInNwZWNpYWxcIiBjYXNlIGZpZWxkIHR5cGVzIGZyb20gdGhlIGRhdGEsIHN1Y2ggYXMgRmxhZ0xhdW5jaGVyIG9yXG4gICAqIENvbXBvbmVudExhdW5jaGVyIGZpZWxkcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIG9iamVjdCB0cmVlIG9mIGZvcm0gdmFsdWVzIG9uIHdoaWNoIHRvIHBlcmZvcm0gdGhlIHJlbW92YWwgYXQgdGhlIHRvcCBsZXZlbCBvbmx5XG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBsaXN0IG9mIHVuZGVybHlpbmcge0BsaW5rIENhc2VGaWVsZH0gZG9tYWluIG1vZGVsIG9iamVjdHMgZm9yIGVhY2ggZmllbGRcbiAgICogQHBhcmFtIHR5cGVzIEFuIGFycmF5IG9mIG9uZSBvciBtb3JlIGZpZWxkIHR5cGVzXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlQ2FzZUZpZWxkc09mVHlwZShkYXRhOiBvYmplY3QsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdLCB0eXBlczogRmllbGRUeXBlRW51bVtdKTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDAgJiYgdHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY2FzZUZpZWxkc1RvUmVtb3ZlID0gY2FzZUZpZWxkcy5maWx0ZXIoY2FzZUZpZWxkID0+IEZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VGaWVsZCwgdHlwZXMpKTtcbiAgICAgIGZvciAoY29uc3QgY2FzZUZpZWxkIG9mIGNhc2VGaWVsZHNUb1JlbW92ZSkge1xuICAgICAgICBkZWxldGUgZGF0YVtjYXNlRmllbGQuaWRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1wb3B1bGF0ZSB0aGUgZm9ybSBkYXRhIGZyb20gdGhlIHZhbHVlcyBoZWxkIGluIHRoZSBjYXNlIGZpZWxkcy4gVGhpcyBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gcGljayB1cCwgZm9yXG4gICAqIGVhY2ggYEZsYWdzYCBmaWVsZCwgYW55IGZsYWcgZGV0YWlscyBkYXRhIG5vdCBjdXJyZW50bHkgcHJlc2VudC5cbiAgICpcbiAgICogYEZsYWdzYCBmaWVsZHMgbWF5IGJlIGNvbnRhaW5lZCBpbiBvdGhlciBgQ2FzZUZpZWxkYCBpbnN0YW5jZXMsIGVpdGhlciBhcyBhIHN1Yi1maWVsZCBvZiBhIENvbXBsZXggZmllbGQsIG9yXG4gICAqIGZpZWxkcyBpbiBhIGNvbGxlY3Rpb24gKG9yIHN1Yi1maWVsZHMgb2YgQ29tcGxleCBmaWVsZHMgaW4gYSBjb2xsZWN0aW9uKS4gVGhlcmVmb3JlLCBpdCBpcyBuZWNlc3NhcnkgdG9cbiAgICogaXRlcmF0ZSB0aHJvdWdoIGFsbCBgQ2FzZUZpZWxkYHMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBvYmplY3QgdHJlZSBvZiBmb3JtIHZhbHVlcyBvbiB3aGljaCB0byBwZXJmb3JtIHRoZSBkYXRhIHBvcHVsYXRpb25cbiAgICogQHBhcmFtIGNhc2VGaWVsZHMgVGhlIGxpc3Qgb2YgdW5kZXJseWluZyB7QGxpbmsgQ2FzZUZpZWxkfSBkb21haW4gbW9kZWwgb2JqZWN0cyBmb3IgZWFjaCBmaWVsZFxuICAgKi9cbiAgcHVibGljIHJlcG9wdWxhdGVGb3JtRGF0YUZyb21DYXNlRmllbGRWYWx1ZXMoZGF0YTogb2JqZWN0LCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IHZvaWQge1xuICAgIGlmIChkYXRhICYmIGNhc2VGaWVsZHMgJiYgY2FzZUZpZWxkcy5sZW5ndGggPiAwICYmXG4gICAgICBjYXNlRmllbGRzLmZpbmRJbmRleChjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0ZsYWdMYXVuY2hlciddKSkgPiAtMSkge1xuICAgICAgLy8gSWdub3JlIHRoZSBGbGFnTGF1bmNoZXIgQ2FzZUZpZWxkIGJlY2F1c2UgaXQgZG9lcyBub3QgaG9sZCBhbnkgdmFsdWVzXG4gICAgICBjYXNlRmllbGRzLmZpbHRlcihjYXNlRmllbGQgPT4gIUZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VGaWVsZCwgWydGbGFnTGF1bmNoZXInXSkpXG4gICAgICAgIC5mb3JFYWNoKGNhc2VGaWVsZCA9PiB7XG4gICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRhdGEgb2JqZWN0IGlzIHBvcHVsYXRlZCBmb3IgYWxsIENhc2VGaWVsZCBrZXlzIGl0IGNvbnRhaW5zLCBldmVuIGlmIGZvciBhIGdpdmVuXG4gICAgICAgICAgLy8gQ2FzZUZpZWxkIGtleSwgdGhlIGRhdGEgb2JqZWN0IGhhcyBhIGZhbHN5IHZhbHVlIChoZW5jZSB0aGUgdXNlIG9mIGhhc093blByb3BlcnR5KCkgZm9yIHRoZSBjaGVjayBiZWxvdylcbiAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly90b29scy5obWN0cy5uZXQvamlyYS9icm93c2UvRVVJLTczNzdcbiAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShjYXNlRmllbGQuaWQpICYmIGNhc2VGaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyBvYmplY3QgZm9yIHRoZSBDYXNlRmllbGQgSUQgd2l0aGluIHRoZSBkYXRhIG9iamVjdCwgaWYgbmVjZXNzYXJ5IChpLmUuIGlmIHRoZSBjdXJyZW50IHZhbHVlXG4gICAgICAgICAgICAvLyBpcyBmYWxzeSk7IHBvcHVsYXRlIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgQ2FzZUZpZWxkXG4gICAgICAgICAgICBpZiAoIWRhdGFbY2FzZUZpZWxkLmlkXSkge1xuICAgICAgICAgICAgICBkYXRhW2Nhc2VGaWVsZC5pZF0gPSB7fTtcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY2FzZUZpZWxkLnZhbHVlKS5mb3JFYWNoKChrZXkpID0+IGRhdGFbY2FzZUZpZWxkLmlkXVtrZXldID0gY2FzZUZpZWxkLnZhbHVlW2tleV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgQ2FzZUZpZWxkOyB0aGlzIGVuc3VyZXMgYWxsIG5lc3RlZCBmbGFnIGRhdGEgKGZvciBleGFtcGxlLCBhXG4gICAgICAgICAgICAgIC8vIEZsYWdzIGZpZWxkIHdpdGhpbiBhIENvbXBsZXggZmllbGQgb3IgYSBjb2xsZWN0aW9uIG9mIENvbXBsZXggZmllbGRzKSBpcyBjb3BpZWQgYWNyb3NzXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGRhdGFbY2FzZUZpZWxkLmlkXSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhc2VGaWVsZC52YWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICBkYXRhW2Nhc2VGaWVsZC5pZF1ba2V5XSA9IGNhc2VGaWVsZC52YWx1ZVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGUgdGhlIGxpbmtlZCBjYXNlcyBmcm9tIHRoZSBkYXRhIGhlbGQgaW4gaXRzIGNvcnJlc3BvbmRpbmcgQ2FzZUZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRyZWUgb2YgZm9ybSB2YWx1ZXMgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUgZGF0YSBwb3B1bGF0aW9uXG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBsaXN0IG9mIHVuZGVybHlpbmcge0BsaW5rIENhc2VGaWVsZH0gZG9tYWluIG1vZGVsIG9iamVjdHMgZm9yIGVhY2ggZmllbGRcbiAgICovXG4gIHB1YmxpYyBwb3B1bGF0ZUxpbmtlZENhc2VzRGV0YWlsc0Zyb21DYXNlRmllbGRzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiB2b2lkIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgY2FzZUZpZWxkcy5maWx0ZXIoY2FzZUZpZWxkID0+ICFGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnQ29tcG9uZW50TGF1bmNoZXInXSkpXG4gICAgICAgIC5mb3JFYWNoKGNhc2VGaWVsZCA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoJ2Nhc2VMaW5rcycpICYmIGNhc2VGaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgZGF0YVtjYXNlRmllbGQuaWRdID0gY2FzZUZpZWxkLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
552
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWx1ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9mb3JtL2Zvcm0tdmFsdWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQUc1RCxNQUFNLE9BQU8sZ0JBQWdCO0lBOExFO0lBN0w3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BbUdHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVE7UUFDbEQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEUsQ0FBQzthQUFNLElBQUksV0FBVyxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDOUQsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FB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QUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTs0QkFDOUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dDQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ2pELENBQUM7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksd0NBQXdDLENBQUMsSUFBWSxFQUFFLFVBQXVCO1FBQ25GLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hELFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7aUJBQzdGLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDbkIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUN2QyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQzswRUF4aUJVLGdCQUFnQjtnRUFBaEIsZ0JBQWdCLFdBQWhCLGdCQUFnQjs7aUZBQWhCLGdCQUFnQjtjQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDYXNlRmllbGQsIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmllbGRzVXRpbHMgfSBmcm9tICcuLi9maWVsZHMnO1xuaW1wb3J0IHsgRmllbGRUeXBlU2FuaXRpc2VyIH0gZnJvbSAnLi9maWVsZC10eXBlLXNhbml0aXNlcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGb3JtVmFsdWVTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEdldHMgdmFsdWUgb2YgYSBmaWVsZCBiYXNlZCBvbiBmaWVsZEtleSB3aGljaCBpcyBhIGRvdCBzZXBhcmF0ZWQgcmVmZXJlbmNlIHRvIHZhbHVlIGFuZCBjb2xsZWN0aW9uIGluZGV4LlxuICAgKiBUaGVyZSBhcmUgdHdvIGV4Y2VwdGlvbnM6XG4gICAqIDEpIEluIGNhc2Ugb2YgYSBtdWx0aXNlbGVjdCBiZWluZyBpZGVudGlmaWVkIGFzIGEgbGVhZiBhICctLS1MQUJFTCcgc3VmZml4IGlzIGFwcGVuZGVkIHRvIHRoZSBrZXkgYW5kIHZhbHVlcyBvZiB0aGF0IGtleSBhcmUgcmV0dXJuZWRcbiAgICogICAgICBmb3JtPSB7ICdsaXN0JzogWydjb2RlMScsICdjb2RlMiddLFxuICAgKiAgICAgICAgICAgICAgJ2xpc3QtLS1MQUJFTCc6IFsnbGFiZWwxJywgJ2xhYmVsMiddIH0sXG4gICAqICAgICAgZmllbGRLZXk9bGlzdCxcbiAgICogICAgICBjb2xJbmRleD0wLFxuICAgKiAgICAgIHZhbHVlPWxhYmVsMSwgbGFiZWwyXG4gICAqIDIpIEluIGNhc2Ugb2YgYSBjb2xsZWN0aW9uIG9mIHNpbXBsZSBmaWVsZHMgaXMgaWRlbnRpZmllZCBhcyBhIGxlYWYgYWxsIHZhbHVlcyBhcmUgam9pbmVkIHNlcGVyYXRlZCBieSBhIGNvbW1hXG4gICAqICAgICAgZm9ybT0geyAnY29sbGVjdGlvbic6IFt7ICd2YWx1ZSc6ICd2YWx1ZTEnIH0sIHsgJ3ZhbHVlJzogJ3ZhbHVlMicgfV0gfVxuICAgKiAgICAgIGZpZWxkS2V5PWNvbGxlY3Rpb25cbiAgICogICAgICBjb2xJbmRleD0xXG4gICAqICAgICAgdmFsdWU9dmFsdWUxLCB2YWx1ZTJcbiAgICpcbiAgICogT3RoZXIgZXhhbXBsZXM6XG4gICAqIDEpIHNpbXBsZSBmaWVsZCByZWZlcmVuY2U6IGZvcm09eyAnUGVyc29uRmlyc3ROYW1lJzogJ0pvaG4nIH0sIGZpZWxkS2V5PVBlcnNvbkZpcnN0TmFtZSwgdmFsdWU9Sm9oblxuICAgKiAyKSBjb21wbGV4IGZpZWxkIHJlZmVyZW5jZTpcbiAgICogICAgICBmb3JtPSB7IGNvbXBsZXgxJzogeyAnc2ltcGxlMTEnOiAndmFsdWUxMScsICdzaW1wbGUxMic6ICd2YWx1ZTEyJywgJ2NvbXBsZXgyJzogeyAnc2ltcGxlMjEnOiAndmFsdWUyMScgfSB9fSxcbiAgICogICAgICBmaWVsZEtleT1jb21wbGV4MS5jb21wbGV4Mi5zaW1wbGUyMVxuICAgKiAgICAgIGNvbEluZGV4PTAsXG4gICAqICAgICAgdmFsdWU9dmFsdWUyMVxuICAgKiAzKSBjb21wbGV4IGZpZWxkIHdpdGggY29sbGVjdGlvbiBmaWVsZCB3aXRoIGNvbXBsZXggZmllbGQgcmVmZXJlbmNlOlxuICAgKiAgICAgIGZvcm09IHsgJ2NvbXBsZXgxJzoge1xuICAgKiAgICAgICAgICAgICAgICdjb2xsZWN0aW9uMSc6IFtcbiAgICogICAgICAgICAgICAgICB7ICd2YWx1ZSc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgyJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUxJzogJ3ZhbHVlMScsXG4gICAqICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgzJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXg0Jzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMic6ICd2YWx1ZTEyJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgICAgeyAndmFsdWUnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICdjb21wbGV4Mic6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMSc6ICd2YWx1ZTInLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Myc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4NCc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTInOiAndmFsdWUyMSdcbiAgICogICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgICAgIHsgJ3ZhbHVlJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAnY29tcGxleDInOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTEnOiAndmFsdWUzJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAnY29tcGxleDMnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDQnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUyJzogJ3ZhbHVlMzEnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICBdfX1cbiAgICogICAgICBmaWVsZEtleT1jb21wbGV4MS5jb2xsZWN0aW9uMS5jb21wbGV4Mi5jb21wbGV4My5jb21wbGV4NC5zaW1wbGUyXG4gICAqICAgICAgY29sSW5kZXg9MixcbiAgICogICAgICB2YWx1ZT12YWx1ZTIxXG4gICAqIDQpIGNvbGxlY3Rpb24gb2YgY29tcGxleCB0eXBlc1xuICAgKiAgICAgIGZvcm09IHsgJ2NvbGxlY3Rpb24xJzogW1xuICAgKiAgICAgICAgICAgICAgIHsgJ3ZhbHVlJzogeydjb21wbGV4MSc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUxJzogJ3ZhbHVlMTEnLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgyJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDMnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTInOiAndmFsdWUxMidcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgKiAgICAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgICAgeyAndmFsdWUnOiB7J2NvbXBsZXgxJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTEnOiAndmFsdWUyMScsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDInOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Myc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMic6ICd2YWx1ZTIyJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAqICAgICAgICAgICAgICAgfSxcbiAgICogICAgICAgICAgICAgICB7ICd2YWx1ZSc6IHsnY29tcGxleDEnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMSc6ICd2YWx1ZTMxJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Mic6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgzJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUyJzogJ3ZhbHVlMzInXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgKiAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgXX1cbiAgICogICAgICBmaWVsZEtleT1jb2xsZWN0aW9uMS5jb21wbGV4MS5jb21wbGV4Mi5jb21wbGV4My5zaW1wbGUyXG4gICAqICAgICAgY29sSW5kZXg9MlxuICAgKiAgICAgIHZhbHVlPXZhbHVlMzJcbiAgICpcbiAgICogSWYga2V5IGlzIHBvaW50aW5nIGF0IGEgY29tcGxleCBvciBjb2xsZWN0aW9uIGxlYWYgKG5vdCBzaW1wbGUsIGNvbGxlY3Rpb24gb2Ygc2ltcGxlIG9yIG11bHRpc2VsZWN0IHR5cGVzKSB0aGVuIHVuZGVmaW5lZCBpcyByZXR1cm5lZC5cbiAgICogQWxzbyBubyBrZXkgcmVmZXJyaW5nIGEgbGVhZiB0aGF0IGlzIGNvbnRhaW5lZCB3aXRoaW4gY29sbGVjdGlvbiB3aWxsIGNvbnRhaW4gaW5kZXggbnVtYmVyLiBUaGUgaW5kZXggaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZVxuICAgKiBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEZpZWxkVmFsdWUoZm9ybSwgZmllbGRLZXksIGNvbEluZGV4KSB7XG4gICAgY29uc3QgZmllbGRJZHMgPSBmaWVsZEtleS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGN1cnJlbnRGaWVsZElkID0gZmllbGRJZHNbMF07XG4gICAgY29uc3QgY3VycmVudEZvcm0gPSBmb3JtW2N1cnJlbnRGaWVsZElkXTtcbiAgICBpZiAoRmllbGRzVXRpbHMuaXNNdWx0aVNlbGVjdFZhbHVlKGN1cnJlbnRGb3JtKSkge1xuICAgICAgcmV0dXJuIGZvcm1bY3VycmVudEZpZWxkSWQgKyBGaWVsZHNVdGlscy5MQUJFTF9TVUZGSVhdLmpvaW4oJywgJyk7XG4gICAgfSBlbHNlIGlmIChGaWVsZHNVdGlscy5pc0NvbGxlY3Rpb25PZlNpbXBsZVR5cGVzKGN1cnJlbnRGb3JtKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRGb3JtLm1hcChmaWVsZFZhbHVlID0+IGZpZWxkVmFsdWVbJ3ZhbHVlJ10pLmpvaW4oJywgJyk7XG4gICAgfSBlbHNlIGlmIChGaWVsZHNVdGlscy5pc0NvbGxlY3Rpb24oY3VycmVudEZvcm0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFZhbHVlKGN1cnJlbnRGb3JtW2NvbEluZGV4XVsndmFsdWUnXSwgZmllbGRJZHMuc2xpY2UoMSkuam9pbignLicpLCBjb2xJbmRleCk7XG4gICAgfSBlbHNlIGlmIChGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KGN1cnJlbnRGb3JtKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRWYWx1ZShjdXJyZW50Rm9ybSwgZmllbGRJZHMuc2xpY2UoMSkuam9pbignLicpLCBjb2xJbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdXJyZW50Rm9ybTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQSByZWN1cnNpdmUgbWV0aG9kIHRvIHJlbW92ZSBhbnl0aGluZyB3aXRoIGEgYC0tLUxBQkVMYCBzdWZmaXguXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHJlY3Vyc2UgdGhyb3VnaCBhbmQgcmVtb3ZlIE11bHRpU2VsZWN0IGxhYmVscy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVtb3ZlTXVsdGlTZWxlY3RMYWJlbHMoZGF0YTogYW55KTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YSkge1xuICAgICAgICAgIEZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlTXVsdGlTZWxlY3RMYWJlbHMoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAvLyBIYXZlIHdlIGZvdW5kIG9uZSBhIE11bHRpU2VsZWN0IGxhYmVsP1xuICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihGaWVsZHNVdGlscy5MQUJFTF9TVUZGSVgpID4gMCkge1xuICAgICAgICAgICAgLy8gSWYgc28sIHJlbW92ZSBpdC5cbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2tleV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIEZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlTXVsdGlTZWxlY3RMYWJlbHMoZGF0YVtrZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc1JlYWRPbmx5KGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmllbGQuZGlzcGxheV9jb250ZXh0ID8gZmllbGQuZGlzcGxheV9jb250ZXh0LnRvVXBwZXJDYXNlKCkgPT09ICdSRUFET05MWScgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzT3B0aW9uYWwoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaWVsZC5kaXNwbGF5X2NvbnRleHQgPyBmaWVsZC5kaXNwbGF5X2NvbnRleHQudG9VcHBlckNhc2UoKSA9PT0gJ09QVElPTkFMJyA6IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNMYWJlbChmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgIHJldHVybiBmaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdMYWJlbCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc0VtcHR5RGF0YShkYXRhOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgbGV0IGFsbEVtcHR5ID0gdHJ1ZTtcbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbcHJvcF07XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFsbEVtcHR5ID0gYWxsRW1wdHkgJiYgdGhpcy5pc0VtcHR5RGF0YSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFsbEVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWxsRW1wdHk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3VsZCB3ZSBjbGVhciBvdXQgb3B0aW9uYWwsIGVtcHR5LCBjb21wbGV4IG9iamVjdHM/XG4gICAqIEBwYXJhbSBjbGVhckVtcHR5IEZhbHNlIHByb3BlcnR5IGlmIHdlIHNpbXBseSB3YW50IHRvIHNraXAgaXQuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGFzc2VzcyBmb3IgXCJlbXB0aW5lc3NcIi5cbiAgICogQHBhcmFtIGZpZWxkIFRoZSBDYXNlRmllbGQgdGhhdCB3aWxsIHRlbGwgdXMgaWYgdGhpcyBpcyBvcHRpb25hbC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGNsZWFyT3B0aW9uYWxFbXB0eShjbGVhckVtcHR5OiBib29sZWFuLCBkYXRhOiBvYmplY3QsIGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICBpZiAoY2xlYXJFbXB0eSkge1xuICAgICAgcmV0dXJuIEZvcm1WYWx1ZVNlcnZpY2UuaXNPcHRpb25hbChmaWVsZCkgJiYgRm9ybVZhbHVlU2VydmljZS5pc0VtcHR5RGF0YShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmaWVsZFR5cGVTYW5pdGlzZXI6IEZpZWxkVHlwZVNhbml0aXNlcikge1xuICB9XG5cbiAgcHVibGljIHNhbml0aXNlKHJhd1ZhbHVlOiBvYmplY3QpOiBvYmplY3Qge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXNlT2JqZWN0KHJhd1ZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzYW5pdGlzZUNhc2VSZWZlcmVuY2UocmVmZXJlbmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIHN0cmlwIG5vbiBkaWdpdHNcbiAgICBjb25zdCBzOiBzdHJpbmcgPSByZWZlcmVuY2UucmVwbGFjZSgvW1xcRF0vZywgJycpO1xuICAgIGlmIChzLmxlbmd0aCA+IDE2KSB7XG4gICAgICByZXR1cm4gcy5zdWJzdHIocy5sZW5ndGggLSAxNiwgMTYpO1xuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXJDdXJyZW50UGFnZUZpZWxkcyhjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgZWRpdEZvcm06IGFueSk6IGFueSB7XG4gICAgY29uc3QgY2xvbmVGb3JtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlZGl0Rm9ybSkpO1xuICAgIE9iamVjdC5rZXlzKGNsb25lRm9ybVsnZGF0YSddKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChjYXNlRmllbGRzLmZpbmRJbmRleCgoZWxlbWVudCkgPT4gZWxlbWVudC5pZCA9PT0ga2V5KSA8IDApIHtcbiAgICAgICAgZGVsZXRlIGNsb25lRm9ybVsnZGF0YSddW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lRm9ybTtcbiAgfVxuXG4gIHB1YmxpYyBzYW5pdGlzZUR5bmFtaWNMaXN0cyhjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgZWRpdEZvcm06IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRUeXBlU2FuaXRpc2VyLnNhbml0aXNlTGlzdHMoY2FzZUZpZWxkcywgZWRpdEZvcm0uZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXNlT2JqZWN0KHJhd09iamVjdDogb2JqZWN0KTogb2JqZWN0IHtcbiAgICBpZiAoIXJhd09iamVjdCkge1xuICAgICAgcmV0dXJuIHJhd09iamVjdDtcbiAgICB9XG5cbiAgICBsZXQgc2FuaXRpc2VkT2JqZWN0ID0ge307XG4gICAgY29uc3QgZG9jdW1lbnRGaWVsZEtleXMgPSBbJ2RvY3VtZW50X3VybCcsICdkb2N1bWVudF9iaW5hcnlfdXJsJywgJ2RvY3VtZW50X2ZpbGVuYW1lJ107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcmF3T2JqZWN0KSB7XG4gICAgICAvLyBJZiB0aGUga2V5IGlzIG9uZSBvZiBkb2N1bWVudEZpZWxkS2V5cywgaXQgbWVhbnMgdGhlIGZpZWxkIGlzIG9mIERvY3VtZW50IHR5cGUuIElmIHRoZSB2YWx1ZSBvZiBhbnkgb2YgdGhlc2VcbiAgICAgIC8vIHByb3BlcnRpZXMgaXMgbnVsbCwgdGhlIGVudGlyZSBzYW5pdGlzZWQgb2JqZWN0IHRvIGJlIHJldHVybmVkIHNob3VsZCBiZSBudWxsXG4gICAgICBpZiAoZG9jdW1lbnRGaWVsZEtleXMuaW5kZXhPZihrZXkpID4gLTEgJiYgcmF3T2JqZWN0W2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgc2FuaXRpc2VkT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKCdDYXNlUmVmZXJlbmNlJyA9PT0ga2V5KSB7XG4gICAgICAgIHNhbml0aXNlZE9iamVjdFtrZXldID0gdGhpcy5zYW5pdGlzZVZhbHVlKHRoaXMuc2FuaXRpc2VDYXNlUmVmZXJlbmNlKFN0cmluZyhyYXdPYmplY3Rba2V5XSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNhbml0aXNlZE9iamVjdFtrZXldID0gdGhpcy5zYW5pdGlzZVZhbHVlKHJhd09iamVjdFtrZXldKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2FuaXRpc2VkT2JqZWN0W2tleV0pKSB7XG4gICAgICAgICAgLy8gSWYgdGhlICdzYW5pdGlzZWQnIGFycmF5IGlzIGVtcHR5LCB3aGVyZWFzIHRoZSBvcmlnaW5hbCBhcnJheSBoYWQgMSBvciBtb3JlIGl0ZW1zXG4gICAgICAgICAgLy8gZGVsZXRlIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZSBzYW5hdGlzZWQgb2JqZWN0XG4gICAgICAgICAgaWYgKHNhbml0aXNlZE9iamVjdFtrZXldLmxlbmd0aCA9PT0gMCAmJiByYXdPYmplY3Rba2V5XS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkZWxldGUgc2FuaXRpc2VkT2JqZWN0W2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzYW5pdGlzZWRPYmplY3Q7XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXNlQXJyYXkocmF3QXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghcmF3QXJyYXkpIHtcbiAgICAgIHJldHVybiByYXdBcnJheTtcbiAgICB9XG5cbiAgICByYXdBcnJheS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSkge1xuICAgICAgICBpdGVtLnZhbHVlID0gdGhpcy5zYW5pdGlzZVZhbHVlKGl0ZW0udmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRmlsdGVyIHRoZSBhcnJheSB0byBlbnN1cmUgb25seSB0cnV0aHkgdmFsdWVzIGFyZSByZXR1cm5lZDsgZG91YmxlLWJhbmcgb3BlcmF0b3IgcmV0dXJucyB0aGUgYm9vbGVhbiB0cnVlL2ZhbHNlXG4gICAgLy8gYXNzb2NpYXRpb24gb2YgYSB2YWx1ZS4gSW4gYWRkaXRpb24sIGlmIHRoZSBhcnJheSBjb250YWlucyBpdGVtcyB3aXRoIGEgXCJ2YWx1ZVwiIG9iamVjdCBwcm9wZXJ0eSwgcmV0dXJuIG9ubHlcbiAgICAvLyB0aG9zZSB3aG9zZSB2YWx1ZSBvYmplY3QgY29udGFpbnMgbm9uLWVtcHR5IHZhbHVlcywgaW5jbHVkaW5nIGZvciBhbnkgZGVzY2VuZGFudCBvYmplY3RzXG4gICAgcmV0dXJuIHJhd0FycmF5XG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gISFpdGVtKVxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgPyBGaWVsZHNVdGlscy5jb250YWluc05vbkVtcHR5VmFsdWVzKGl0ZW0udmFsdWUpIDogdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXNlVmFsdWUocmF3VmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmF3VmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGlzZUFycmF5KHJhd1ZhbHVlKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiByYXdWYWx1ZSkge1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpc2VPYmplY3QocmF3VmFsdWUpO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHJhd1ZhbHVlLnRyaW0oKTtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiBTdHJpbmcocmF3VmFsdWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHJhd1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbGVhck5vbkNhc2VGaWVsZHMoZGF0YTogb2JqZWN0LCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSkge1xuICAgIGZvciAoY29uc3QgZGF0YUtleSBpbiBkYXRhKSB7XG4gICAgICBpZiAoIWNhc2VGaWVsZHMuZmluZChjZiA9PiBjZi5pZCA9PT0gZGF0YUtleSkpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFbZGF0YUtleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyByZWZhY3RvciBzbyB0aGF0IHRoaXMgYW5kIHJlbW92ZSB1bm5lY2Vzc2FyeSBmaWVsZHMgaGF2ZSBhIGNvbW1vbiBpdGVyYXRvciB0aGF0IGFwcGxpZXMgZnVuY3Rpb25zIHRvIGVhY2ggbm9kZSB2aXNpdGVkXG4gIHB1YmxpYyByZW1vdmVOdWxsTGFiZWxzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IGRhdGEgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgZm9ybSB0aGF0J3Mgbm90IGluIHRoZSBjYXNlRmllbGRzXG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGNhc2VGaWVsZHMpIHtcbiAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmZpZWxkX3R5cGUudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnTGFiZWwnOlxuICAgICAgICAgICAgICAvLyBEZWxldGUgYW55IGxhYmVscyB0aGF0IGFyZSBudWxsXG4gICAgICAgICAgICAgIGlmICgoZGF0YVtmaWVsZC5pZF0gPT09IG51bGwpIHx8IChkYXRhW2ZpZWxkLmlkXSA9PT0gJycpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ29tcGxleCc6XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2UgYW5kIHJlbW92ZSBhbnl0aGluZyB1bm5lY2Vzc2FyeSBmcm9tIHdpdGhpbiBhIGNvbXBsZXggZmllbGQuXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlTnVsbExhYmVscyhkYXRhW2ZpZWxkLmlkXSwgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgICAgIC8vIEdldCBob2xkIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFjdHVhbGx5IGhhdmUgYSBjb2xsZWN0aW9uIHRvIHdvcmsgd2l0aC5cbiAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gJiYgQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGNvbXBsZXggb2JqZWN0LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaFxuICAgICAgICAgICAgICAgIC8vIGFuZCBjbGVhciB0aGVtIG91dC5cbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGVsZW1lbnRzIGFuZCByZW1vdmUgYW55IHVubmVjZXNzYXJ5IGZpZWxkcyB3aXRoaW4uXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZU51bGxMYWJlbHMoaXRlbSwgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZU51bGxMYWJlbHMoaXRlbS52YWx1ZSwgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBUT0RPIHJlZmFjdG9yIHNvIHRoYXQgdGhpcyBhbmQgcmVtb3ZlIHVubmVjZXNzYXJ5IGZpZWxkcyBoYXZlIGEgY29tbW9uIGl0ZXJhdG9yIHRoYXQgYXBwbGllcyBmdW5jdGlvbnMgdG8gZWFjaCBub2RlIHZpc2l0ZWRcbiAgcHVibGljIHJlbW92ZUVtcHR5RG9jdW1lbnRzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IGRhdGEgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgZm9ybSB0aGF0J3Mgbm90IGluIHRoZSBjYXNlRmllbGRzXG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGNhc2VGaWVsZHMpIHtcbiAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmZpZWxkX3R5cGUudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnQ29tcGxleCc6XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2UgYW5kIHJlbW92ZSBhbnkgZW1wdHkgZG9jdW1lbnRzIGZyb20gd2l0aGluIGEgY29tcGxleCBmaWVsZC5cbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eURvY3VtZW50cyhkYXRhW2ZpZWxkLmlkXSwgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgICAgIC8vIEdldCBob2xkIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFjdHVhbGx5IGhhdmUgYSBjb2xsZWN0aW9uIHRvIHdvcmsgd2l0aC5cbiAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gJiYgQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGNvbXBsZXggb2JqZWN0LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaFxuICAgICAgICAgICAgICAgIC8vIGFuZCBjbGVhciBvdXQgZW1wdHkgZG9jdW1lbnRzXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4Jykge1xuICAgICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBlbGVtZW50cyBhbmQgcmVtb3ZlIGFueSBlbXB0eSBkb2N1bWVudHMgd2l0aGluLlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eURvY3VtZW50cyhpdGVtLCBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlEb2N1bWVudHMoaXRlbS52YWx1ZSwgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0RvY3VtZW50JzpcbiAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoaXMgaXMgZXhlY3V0ZWQgb25seSBpZiB0aGUgRG9jdW1lbnQgZmllbGQgaXMgTk9UIGhpZGRlbiBhbmQgaXMgZW1wdHkgb2YgZGF0YTsgaGlkZGVuIERvY3VtZW50XG4gICAgICAgICAgICAgIC8vIGZpZWxkcyBhcmUgaGFuZGxlZCBieSB0aGUgZmlsdGVyUmF3Rm9ybVZhbHVlcygpIGZ1bmN0aW9uIGluIENhc2VFZGl0U3VibWl0IGNvbXBvbmVudFxuICAgICAgICAgICAgICBpZiAoZmllbGQuaGlkZGVuICE9PSB0cnVlICYmIEZvcm1WYWx1ZVNlcnZpY2UuaXNFbXB0eURhdGEoZGF0YVtmaWVsZC5pZF0pKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDbGVhciBvdXQgdW5uZWNlc3NhcnkgZmllbGRzIGZyb20gYSBkYXRhIG9iamVjdCwgYmFzZWQgb24gYW4gYXJyYXkgb2YgQ2FzZUZpZWxkcy5cbiAgICogVGhpcyBtZXRob2QgaXMgcmVjdXJzaXZlIGFuZCB3aWxsIGNhbGwgaXRzZWxmIGlmIGl0IGVuY291bnRlcnMgcGFydGljdWxhciBmaWVsZCB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIG9iamVjdCB0byBiZSB0aWRpZWQgdXAuXG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBDYXNlRmllbGRzIHRoYXQgbmVlZCB0byBiZSBjbGVhbmVkIHVwLlxuICAgKiBAcGFyYW0gY2xlYXJFbXB0eSBXaGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgY2xlYXIgb3V0IGVtcHR5LCBvcHRpb25hbCwgY29tcGxleCBvYmplY3RzLlxuICAgKiBAcGFyYW0gY2xlYXJOb25DYXNlIFdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBjbGVhciBvdXQgbm9uLWNhc2UgZmllbGRzIGF0IHRoZSB0b3AgbGV2ZWwuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlVW5uZWNlc3NhcnlGaWVsZHMoZGF0YTogb2JqZWN0LCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgY2xlYXJFbXB0eSA9IGZhbHNlLCBjbGVhck5vbkNhc2UgPSBmYWxzZSxcbiAgICBmcm9tUHJldmlvdXNQYWdlID0gZmFsc2UsIGN1cnJlbnRQYWdlQ2FzZUZpZWxkcyA9IFtdKTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBkYXRhIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGZvcm0gdGhhdCdzIG5vdCBpbiB0aGUgY2FzZUZpZWxkc1xuICAgICAgaWYgKGNsZWFyTm9uQ2FzZSkge1xuICAgICAgICB0aGlzLmNsZWFyTm9uQ2FzZUZpZWxkcyhkYXRhLCBjYXNlRmllbGRzKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgY2FzZUZpZWxkcykge1xuICAgICAgICBpZiAoIUZvcm1WYWx1ZVNlcnZpY2UuaXNMYWJlbChmaWVsZCkgJiYgRm9ybVZhbHVlU2VydmljZS5pc1JlYWRPbmx5KGZpZWxkKSkge1xuICAgICAgICAgIC8vIFJldGFpbiBhbnl0aGluZyB0aGF0IGlzIHJlYWRvbmx5IGFuZCBub3QgYSBsYWJlbC5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQuaGlkZGVuID09PSB0cnVlICYmIGZpZWxkLmRpc3BsYXlfY29udGV4dCAhPT0gJ0hJRERFTicgJiYgZmllbGQuZGlzcGxheV9jb250ZXh0ICE9PSAnSElEREVOX1RFTVAnICYmIGZpZWxkLmlkICE9PSAnY2FzZUxpbmtzJyAmJiAhZmllbGQucmV0YWluX2hpZGRlbl92YWx1ZSkge1xuICAgICAgICAgIC8vIERlbGV0ZSBhbnl0aGluZyB0aGF0IGlzIGhpZGRlbiAodGhhdCBpcyBOT1QgcmVhZG9ubHkpLCBhbmQgdGhhdFxuICAgICAgICAgIC8vIGhhc24ndCBoYWQgaXRzIGRpc3BsYXlfY29udGV4dCBvdmVycmlkZGVuIHRvIG1ha2UgaXQgaGlkZGVuLlxuICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5maWVsZF90eXBlKSB7XG4gICAgICAgICAgc3dpdGNoIChmaWVsZC5maWVsZF90eXBlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0xhYmVsJzpcbiAgICAgICAgICAgICAgLy8gRGVsZXRlIGFueSBsYWJlbHMuXG4gICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdEb2N1bWVudCc6XG4gICAgICAgICAgICAgIGlmIChGb3JtVmFsdWVTZXJ2aWNlLmlzRW1wdHlEYXRhKGRhdGFbZmllbGQuaWRdKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0NvbXBsZXgnOlxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZVVubmVjZXNzYXJ5RmllbGRzKGRhdGFbZmllbGQuaWRdLCBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLCBjbGVhckVtcHR5KTtcbiAgICAgICAgICAgICAgLy8gQWxzbyByZW1vdmUgYW55IG9wdGlvbmFsIGNvbXBsZXggb2JqZWN0cyB0aGF0IGFyZSBjb21wbGV0ZWx5IGVtcHR5LlxuICAgICAgICAgICAgICAvLyBFVUktNDI0NDogUml0ZXNoJ3MgZml4LCBwYXNzaW5nIHRydWUgaW5zdGVhZCBvZiBjbGVhckVtcHR5LlxuICAgICAgICAgICAgICBpZiAoRm9ybVZhbHVlU2VydmljZS5jbGVhck9wdGlvbmFsRW1wdHkodHJ1ZSwgZGF0YVtmaWVsZC5pZF0sIGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZGF0YVtmaWVsZC5pZF0gJiYgRm9ybVZhbHVlU2VydmljZS5pc0VtcHR5RGF0YShkYXRhW2ZpZWxkLmlkXSkgJiYgZnJvbVByZXZpb3VzUGFnZVxuICAgICAgICAgICAgICAgICYmIGN1cnJlbnRQYWdlQ2FzZUZpZWxkcy5maW5kSW5kZXgoKGNGaWVsZDogYW55KSA9PiBjRmllbGQuaWQgPT09IGZpZWxkLmlkKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHZhbGlkIGNvbGxlY3Rpb24gZGF0YVxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUludmFsaWRDb2xsZWN0aW9uRGF0YShkYXRhLCBmaWVsZCk7XG4gICAgICAgICAgICAgIC8vIEdldCBob2xkIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFjdHVhbGx5IGhhdmUgYSBjb2xsZWN0aW9uIHRvIHdvcmsgd2l0aC5cbiAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gJiYgQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGNvbXBsZXggb2JqZWN0LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaFxuICAgICAgICAgICAgICAgIC8vIGFuZCBjbGVhciB0aGVtIG91dC5cbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGVsZW1lbnRzIGFuZCByZW1vdmUgYW55IHVubmVjZXNzYXJ5IGZpZWxkcyB3aXRoaW4uXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVVubmVjZXNzYXJ5RmllbGRzKGl0ZW0sIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLCBjbGVhckVtcHR5KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVVbm5lY2Vzc2FyeUZpZWxkcyhpdGVtLnZhbHVlLCBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIG91dCBhbnkgTXVsdGlTZWxlY3QgbGFiZWxzLlxuICAgIEZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlTXVsdGlTZWxlY3RMYWJlbHMoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlSW52YWxpZENvbGxlY3Rpb25EYXRhKGRhdGE6IG9iamVjdCwgZmllbGQ6IENhc2VGaWVsZCkge1xuICAgIGlmIChkYXRhW2ZpZWxkLmlkXSAmJiBkYXRhW2ZpZWxkLmlkXS5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IG9iakNvbGxlY3Rpb24gb2YgZGF0YVtmaWVsZC5pZF0pIHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iakNvbGxlY3Rpb24pLmxlbmd0aCA9PT0gMSAmJiBPYmplY3Qua2V5cyhvYmpDb2xsZWN0aW9uKS5pbmRleE9mKCdpZCcpID4gLTEpIHtcbiAgICAgICAgICBkYXRhW2ZpZWxkLmlkXSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbnkgZW1wdHkgY29sbGVjdGlvbiBmaWVsZHMgd2hlcmUgYSB2YWx1ZSBvZiBncmVhdGVyIHRoYW4gemVybyBpcyBzcGVjaWZpZWQgaW4gdGhlIGZpZWxkJ3Mge0BsaW5rIEZpZWxkVHlwZX1cbiAgICogYG1pbmAgYXR0cmlidXRlLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRyZWUgb2YgZm9ybSB2YWx1ZXMgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUgcmVtb3ZhbFxuICAgKiBAcGFyYW0gY2FzZUZpZWxkcyBUaGUgbGlzdCBvZiB1bmRlcmx5aW5nIHtAbGluayBDYXNlRmllbGR9IGRvbWFpbiBtb2RlbCBvYmplY3RzIGZvciBlYWNoIGZpZWxkXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlRW1wdHlDb2xsZWN0aW9uc1dpdGhNaW5WYWxpZGF0aW9uKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiB2b2lkIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBjYXNlRmllbGRzKSB7XG4gICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdDb2xsZWN0aW9uJyAmJiB0eXBlb2YgZmllbGQuZmllbGRfdHlwZS5taW4gPT09ICdudW1iZXInICYmIGZpZWxkLmZpZWxkX3R5cGUubWluID4gMCAmJlxuICAgICAgICAgIGRhdGFbZmllbGQuaWRdICYmIEFycmF5LmlzQXJyYXkoZGF0YVtmaWVsZC5pZF0pICYmIGRhdGFbZmllbGQuaWRdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZnJvbSB0aGUgdG9wIGxldmVsIG9mIHRoZSBmb3JtIGRhdGEgYW55IGNhc2UgZmllbGRzIG9mIGEgZ2l2ZW4gdHlwZSBvciB0eXBlcyB0aGF0IGFyZSBub3QgaW50ZW5kZWQgdG8gYmVcbiAgICogcGVyc2lzdGVkLiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIHJlbW92ZSBcInNwZWNpYWxcIiBjYXNlIGZpZWxkIHR5cGVzIGZyb20gdGhlIGRhdGEsIHN1Y2ggYXMgRmxhZ0xhdW5jaGVyIG9yXG4gICAqIENvbXBvbmVudExhdW5jaGVyIGZpZWxkcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIG9iamVjdCB0cmVlIG9mIGZvcm0gdmFsdWVzIG9uIHdoaWNoIHRvIHBlcmZvcm0gdGhlIHJlbW92YWwgYXQgdGhlIHRvcCBsZXZlbCBvbmx5XG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBsaXN0IG9mIHVuZGVybHlpbmcge0BsaW5rIENhc2VGaWVsZH0gZG9tYWluIG1vZGVsIG9iamVjdHMgZm9yIGVhY2ggZmllbGRcbiAgICogQHBhcmFtIHR5cGVzIEFuIGFycmF5IG9mIG9uZSBvciBtb3JlIGZpZWxkIHR5cGVzXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlQ2FzZUZpZWxkc09mVHlwZShkYXRhOiBvYmplY3QsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdLCB0eXBlczogRmllbGRUeXBlRW51bVtdKTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDAgJiYgdHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY2FzZUZpZWxkc1RvUmVtb3ZlID0gY2FzZUZpZWxkcy5maWx0ZXIoY2FzZUZpZWxkID0+IEZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VGaWVsZCwgdHlwZXMpKTtcbiAgICAgIGZvciAoY29uc3QgY2FzZUZpZWxkIG9mIGNhc2VGaWVsZHNUb1JlbW92ZSkge1xuICAgICAgICBkZWxldGUgZGF0YVtjYXNlRmllbGQuaWRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1wb3B1bGF0ZSB0aGUgZm9ybSBkYXRhIGZyb20gdGhlIHZhbHVlcyBoZWxkIGluIHRoZSBjYXNlIGZpZWxkcy4gVGhpcyBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gcGljayB1cCwgZm9yXG4gICAqIGVhY2ggYEZsYWdzYCBmaWVsZCwgYW55IGZsYWcgZGV0YWlscyBkYXRhIG5vdCBjdXJyZW50bHkgcHJlc2VudC5cbiAgICpcbiAgICogYEZsYWdzYCBmaWVsZHMgbWF5IGJlIGNvbnRhaW5lZCBpbiBvdGhlciBgQ2FzZUZpZWxkYCBpbnN0YW5jZXMsIGVpdGhlciBhcyBhIHN1Yi1maWVsZCBvZiBhIENvbXBsZXggZmllbGQsIG9yXG4gICAqIGZpZWxkcyBpbiBhIGNvbGxlY3Rpb24gKG9yIHN1Yi1maWVsZHMgb2YgQ29tcGxleCBmaWVsZHMgaW4gYSBjb2xsZWN0aW9uKS4gVGhlcmVmb3JlLCBpdCBpcyBuZWNlc3NhcnkgdG9cbiAgICogaXRlcmF0ZSB0aHJvdWdoIGFsbCBgQ2FzZUZpZWxkYHMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBvYmplY3QgdHJlZSBvZiBmb3JtIHZhbHVlcyBvbiB3aGljaCB0byBwZXJmb3JtIHRoZSBkYXRhIHBvcHVsYXRpb25cbiAgICogQHBhcmFtIGNhc2VGaWVsZHMgVGhlIGxpc3Qgb2YgdW5kZXJseWluZyB7QGxpbmsgQ2FzZUZpZWxkfSBkb21haW4gbW9kZWwgb2JqZWN0cyBmb3IgZWFjaCBmaWVsZFxuICAgKi9cbiAgcHVibGljIHJlcG9wdWxhdGVGb3JtRGF0YUZyb21DYXNlRmllbGRWYWx1ZXMoZGF0YTogb2JqZWN0LCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IHZvaWQge1xuICAgIGlmIChkYXRhICYmIGNhc2VGaWVsZHMgJiYgY2FzZUZpZWxkcy5sZW5ndGggPiAwICYmXG4gICAgICBjYXNlRmllbGRzLmZpbmRJbmRleChjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0ZsYWdMYXVuY2hlciddKSkgPiAtMSkge1xuICAgICAgLy8gSWdub3JlIHRoZSBGbGFnTGF1bmNoZXIgQ2FzZUZpZWxkIGJlY2F1c2UgaXQgZG9lcyBub3QgaG9sZCBhbnkgdmFsdWVzXG4gICAgICBjYXNlRmllbGRzLmZpbHRlcihjYXNlRmllbGQgPT4gIUZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VGaWVsZCwgWydGbGFnTGF1bmNoZXInXSkpXG4gICAgICAgIC5mb3JFYWNoKGNhc2VGaWVsZCA9PiB7XG4gICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRhdGEgb2JqZWN0IGlzIHBvcHVsYXRlZCBmb3IgYWxsIENhc2VGaWVsZCBrZXlzIGl0IGNvbnRhaW5zLCBldmVuIGlmIGZvciBhIGdpdmVuXG4gICAgICAgICAgLy8gQ2FzZUZpZWxkIGtleSwgdGhlIGRhdGEgb2JqZWN0IGhhcyBhIGZhbHN5IHZhbHVlIChoZW5jZSB0aGUgdXNlIG9mIGhhc093blByb3BlcnR5KCkgZm9yIHRoZSBjaGVjayBiZWxvdylcbiAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly90b29scy5obWN0cy5uZXQvamlyYS9icm93c2UvRVVJLTczNzdcbiAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShjYXNlRmllbGQuaWQpICYmIGNhc2VGaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyBvYmplY3QgZm9yIHRoZSBDYXNlRmllbGQgSUQgd2l0aGluIHRoZSBkYXRhIG9iamVjdCwgaWYgbmVjZXNzYXJ5IChpLmUuIGlmIHRoZSBjdXJyZW50IHZhbHVlXG4gICAgICAgICAgICAvLyBpcyBmYWxzeSk7IHBvcHVsYXRlIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgQ2FzZUZpZWxkXG4gICAgICAgICAgICBpZiAoIWRhdGFbY2FzZUZpZWxkLmlkXSkge1xuICAgICAgICAgICAgICBkYXRhW2Nhc2VGaWVsZC5pZF0gPSB7fTtcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY2FzZUZpZWxkLnZhbHVlKS5mb3JFYWNoKChrZXkpID0+IGRhdGFbY2FzZUZpZWxkLmlkXVtrZXldID0gY2FzZUZpZWxkLnZhbHVlW2tleV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgQ2FzZUZpZWxkOyB0aGlzIGVuc3VyZXMgYWxsIG5lc3RlZCBmbGFnIGRhdGEgKGZvciBleGFtcGxlLCBhXG4gICAgICAgICAgICAgIC8vIEZsYWdzIGZpZWxkIHdpdGhpbiBhIENvbXBsZXggZmllbGQgb3IgYSBjb2xsZWN0aW9uIG9mIENvbXBsZXggZmllbGRzKSBpcyBjb3BpZWQgYWNyb3NzXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGRhdGFbY2FzZUZpZWxkLmlkXSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhc2VGaWVsZC52YWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICBkYXRhW2Nhc2VGaWVsZC5pZF1ba2V5XSA9IGNhc2VGaWVsZC52YWx1ZVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGUgdGhlIGxpbmtlZCBjYXNlcyBmcm9tIHRoZSBkYXRhIGhlbGQgaW4gaXRzIGNvcnJlc3BvbmRpbmcgQ2FzZUZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRyZWUgb2YgZm9ybSB2YWx1ZXMgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUgZGF0YSBwb3B1bGF0aW9uXG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBsaXN0IG9mIHVuZGVybHlpbmcge0BsaW5rIENhc2VGaWVsZH0gZG9tYWluIG1vZGVsIG9iamVjdHMgZm9yIGVhY2ggZmllbGRcbiAgICovXG4gIHB1YmxpYyBwb3B1bGF0ZUxpbmtlZENhc2VzRGV0YWlsc0Zyb21DYXNlRmllbGRzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiB2b2lkIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgY2FzZUZpZWxkcy5maWx0ZXIoY2FzZUZpZWxkID0+ICFGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnQ29tcG9uZW50TGF1bmNoZXInXSkpXG4gICAgICAgIC5mb3JFYWNoKGNhc2VGaWVsZCA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoJ2Nhc2VMaW5rcycpICYmIGNhc2VGaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgZGF0YVtjYXNlRmllbGQuaWRdID0gY2FzZUZpZWxkLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -17,7 +17,6 @@ import { Type, Expose, plainToClassFromExist, plainToClass } from 'class-transfo
17
17
  import moment from 'moment';
18
18
  import { __decorate, __metadata } from 'tslib';
19
19
  import * as _ from 'underscore';
20
- import { isEqual } from 'underscore';
21
20
  import 'reflect-metadata';
22
21
  import { generate } from 'pegjs';
23
22
  import { isUndefined } from 'util';
@@ -5706,7 +5705,6 @@ class FieldTypeSanitiser {
5706
5705
  this.sanitiseLists(caseField.field_type.complex_fields, data[caseField.id]);
5707
5706
  break;
5708
5707
  case FieldTypeSanitiser.FIELD_TYPE_COLLECTION:
5709
- this.synchronizeCasefieldWithData(caseField, data);
5710
5708
  if (Array.isArray(data[caseField.id])) {
5711
5709
  data[caseField.id].forEach((formElement) => {
5712
5710
  this.sanitiseLists(caseField.field_type.collection_field_type.complex_fields, formElement.value);
@@ -5716,35 +5714,6 @@ class FieldTypeSanitiser {
5716
5714
  }
5717
5715
  });
5718
5716
  }
5719
- synchronizeCasefieldWithData(caseField, data) {
5720
- for (const field in caseField._value) {
5721
- for (const id in data[caseField.id]) {
5722
- if (caseField._value[field]?.id === data[caseField.id][id]?.id) {
5723
- this.updateFieldValues(caseField._value[field].value, data[caseField.id][id]?.value);
5724
- }
5725
- }
5726
- }
5727
- }
5728
- updateFieldValues(caseFieldValue, dataValue) {
5729
- for (const key in dataValue) {
5730
- if ((typeof caseFieldValue[key] === 'object') && (!isEqual(caseFieldValue[key], dataValue[key]))) {
5731
- this.updateObjectValue(caseFieldValue[key], dataValue[key]);
5732
- }
5733
- else {
5734
- this.updatePrimitiveValue(caseFieldValue, key, dataValue[key]);
5735
- }
5736
- }
5737
- }
5738
- updateObjectValue(formattedObject, dataObject) {
5739
- if (formattedObject?.value !== dataObject) {
5740
- formattedObject.value = dataObject;
5741
- }
5742
- }
5743
- updatePrimitiveValue(caseFieldValue, key, dataValue) {
5744
- if ((!caseFieldValue[key]) || (caseFieldValue[key] !== dataValue)) {
5745
- caseFieldValue[key] = dataValue;
5746
- }
5747
- }
5748
5717
  ensureDynamicMultiSelectListPopulated(caseFields) {
5749
5718
  return caseFields.map((field) => {
5750
5719
  if (field.field_type.type !== 'Complex') {
@@ -5785,7 +5754,7 @@ class FieldTypeSanitiser {
5785
5754
  const values = data[field.id];
5786
5755
  if (Array.isArray(values)) {
5787
5756
  const listItems = this.getListItems(field);
5788
- const matches = listItems.filter((item) => values.map((v) => v.code).indexOf(item.code) !== -1);
5757
+ const matches = listItems.filter(item => values.map(v => v.code).indexOf(item.code) !== -1);
5789
5758
  data[field.id] = {
5790
5759
  value: matches,
5791
5760
  list_items: listItems
@@ -5796,7 +5765,7 @@ class FieldTypeSanitiser {
5796
5765
  const stringValue = data[field.id];
5797
5766
  if (typeof stringValue === 'string') {
5798
5767
  const listItems = this.getListItems(field);
5799
- const matches = listItems.filter((value) => value?.code === stringValue);
5768
+ const matches = listItems.filter(value => value?.code === stringValue);
5800
5769
  if (matches && matches.length > 0) {
5801
5770
  data[field.id] = {
5802
5771
  value: matches[0],
@@ -6108,24 +6077,6 @@ class FormValueService {
6108
6077
  }
6109
6078
  }
6110
6079
  }
6111
- checkValuesSetInCollection(caseField, data) {
6112
- for (const field in data) {
6113
- const fieldId = data[field].id;
6114
- if (Array.isArray(caseField.data[fieldId])) {
6115
- for (const subField in caseField.data[fieldId]) {
6116
- if (data[field]?._value) {
6117
- if (caseField.data[fieldId][subField] !== data[field]?._value[subField]) {
6118
- caseField.data[fieldId][subField] = data[field]._value[subField];
6119
- }
6120
- }
6121
- }
6122
- }
6123
- else if ((data[field]._value) && (caseField.data[fieldId] !== data[field]._value)) {
6124
- caseField.data[fieldId] = data[field]._value;
6125
- }
6126
- }
6127
- return caseField;
6128
- }
6129
6080
  // TODO refactor so that this and remove unnecessary fields have a common iterator that applies functions to each node visited
6130
6081
  removeNullLabels(data, caseFields) {
6131
6082
  if (data && caseFields && caseFields.length > 0) {
@@ -11485,13 +11436,9 @@ class CaseEditPageComponent {
11485
11436
  */
11486
11437
  getFilteredCaseEventData(caseFields, formValue, clearEmpty = false, clearNonCase = false, fromPreviousPage = false) {
11487
11438
  // Get the data for the fields specified.
11488
- let formFields = this.formValueService.filterCurrentPageFields(caseFields, formValue);
11439
+ const formFields = this.formValueService.filterCurrentPageFields(caseFields, formValue);
11489
11440
  // Sort out the dynamic lists.
11490
11441
  this.formValueService.sanitiseDynamicLists(caseFields, formFields);
11491
- // we only want to ensure this when the field_type is a collection of complex fields
11492
- if (caseFields.some((field) => field.field_type?.type === 'Collection' && field.field_type?.collection_field_type?.type === 'Complex')) {
11493
- formFields = this.formValueService.checkValuesSetInCollection(formFields, caseFields);
11494
- }
11495
11442
  // Get hold of the CaseEventData.
11496
11443
  const caseEventData = this.formValueService.sanitise(formFields);
11497
11444
  // delete fields which are not part of the case event journey wizard pages case fields
@@ -33672,7 +33619,7 @@ class EventTriggerResolver {
33672
33619
  }
33673
33620
  resolve(route) {
33674
33621
  return this.isRootTriggerEventRoute(route) ? this.getAndCacheEventTrigger(route)
33675
- : this.cachedEventTrigger ? Promise.resolve(this.cachedEventTrigger)
33622
+ : (this.cachedEventTrigger && (route.params?.eid === this.cachedEventTrigger?.id)) ? Promise.resolve(this.cachedEventTrigger)
33676
33623
  : this.getAndCacheEventTrigger(route);
33677
33624
  }
33678
33625
  isRootTriggerEventRoute(route) {