@libs-ui/utils 0.2.307-0 → 0.2.309-0

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,8 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { signal, TemplateRef, ElementRef, isSignal } from '@angular/core';
2
+ import { isSignal, signal } from '@angular/core';
3
+ import { isArrayObject, isAsyncObject, isMapObject, isReturnAsIsObject, isSetObject } from './dangerous-object';
3
4
  import { cloneDeep } from './helpers';
4
- import { Observable } from 'rxjs';
5
- import { HttpParams } from '@angular/common/http';
6
5
  /**
7
6
  * Chuyển đổi một đối tượng hoặc giá trị thành signal
8
7
  * @param data Dữ liệu cần chuyển đổi thành signal
@@ -29,11 +28,11 @@ export const convertObjectToSignal = (data, cloneDeepIfNotSignal = true, isSigna
29
28
  seen.set(data, convertObjectToSignal(data(), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen));
30
29
  return seen.get(data);
31
30
  }
32
- if (Array.isArray(data)) {
31
+ if (isArrayObject(data)) {
33
32
  seen.set(data, signal(data.map((item) => convertObjectToSignal(item, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen))));
34
33
  return seen.get(data);
35
34
  }
36
- if (data instanceof Map) {
35
+ if (isMapObject(data)) {
37
36
  const mapCopy = new Map();
38
37
  Array.from(data.keys()).forEach((key) => {
39
38
  mapCopy.set(key, convertObjectToSignal(data.get(key), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal));
@@ -41,26 +40,16 @@ export const convertObjectToSignal = (data, cloneDeepIfNotSignal = true, isSigna
41
40
  seen.set(data, signal(mapCopy));
42
41
  return seen.get(data);
43
42
  }
44
- if (data instanceof Promise || data instanceof Observable) {
43
+ // Bỏ qua các đối tượng async
44
+ if (isAsyncObject(data)) {
45
45
  return data;
46
46
  }
47
47
  data = signal(cloneDeepIfNotSignal ? { ...data } : data);
48
48
  seen.set(data, data);
49
49
  for (const key in data()) {
50
50
  const value = data()[key];
51
- if (value instanceof TemplateRef ||
52
- value instanceof File ||
53
- value instanceof Blob ||
54
- Object.prototype.toString.call(value) === '[object File]' ||
55
- value instanceof ElementRef ||
56
- value instanceof Element ||
57
- value instanceof Date ||
58
- value instanceof RegExp ||
59
- value instanceof Set ||
60
- value instanceof Map ||
61
- value instanceof Promise ||
62
- value instanceof Observable ||
63
- value instanceof HttpParams) {
51
+ // Bỏ qua các đối tượng nguy hiểm và đặc biệt
52
+ if (isReturnAsIsObject(value)) {
64
53
  continue;
65
54
  }
66
55
  if (Object.prototype.hasOwnProperty.call(data(), key)) {
@@ -74,7 +63,7 @@ export const convertSignalToObject = (data, isCloneDeep = true, seen = new WeakM
74
63
  while (isSignal(data) && !seen.has(data)) {
75
64
  const dataConvert = data();
76
65
  if (typeof dataConvert === 'object') {
77
- if (dataConvert === null) {
66
+ if (dataConvert === null || isReturnAsIsObject(dataConvert)) {
78
67
  return dataConvert;
79
68
  }
80
69
  seen.set(dataConvert, dataConvert);
@@ -85,20 +74,20 @@ export const convertSignalToObject = (data, isCloneDeep = true, seen = new WeakM
85
74
  seen.set(data, dataConvert);
86
75
  data = dataConvert;
87
76
  }
88
- if (data === null || typeof data === 'function' || typeof data !== 'object') {
77
+ if (data === null || typeof data === 'function' || typeof data !== 'object' || isReturnAsIsObject(data)) {
89
78
  return data;
90
79
  }
91
80
  if (!ignoreCheckSeenHasDataAfterWhile && seen.has(data)) {
92
81
  return seen.get(data);
93
82
  }
94
- if (Array.isArray(data)) {
83
+ if (isArrayObject(data)) {
95
84
  if (!isSignal(data[0])) {
96
85
  return data;
97
86
  }
98
87
  seen.set(data, data.map((item) => convertSignalToObject(isCloneDeep ? cloneDeep(item) : item, isCloneDeep, seen)));
99
88
  return seen.get(data);
100
89
  }
101
- if (data instanceof Map) {
90
+ if (isMapObject(data)) {
102
91
  const mapCopy = new Map();
103
92
  Array.from(data.keys()).forEach((key) => {
104
93
  mapCopy.set(key, convertSignalToObject(isCloneDeep ? cloneDeep(data.get(key)) : data.get(key), isCloneDeep));
@@ -106,10 +95,16 @@ export const convertSignalToObject = (data, isCloneDeep = true, seen = new WeakM
106
95
  seen.set(data, mapCopy);
107
96
  return seen.get(data);
108
97
  }
109
- if (data instanceof File || data instanceof Blob || Object.prototype.toString.call(data) === '[object File]') {
110
- return data;
98
+ if (isSetObject(data)) {
99
+ const setCopy = new Set();
100
+ Array.from(data.values()).forEach((value) => {
101
+ setCopy.add(convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep));
102
+ });
103
+ seen.set(data, setCopy);
104
+ return seen.get(data);
111
105
  }
112
- if (data instanceof TemplateRef || data instanceof ElementRef || data instanceof Element || data instanceof Promise || data instanceof Observable || data instanceof HttpParams) {
106
+ // Bỏ qua các đối tượng nguy hiểm đặc biệt
107
+ if (isReturnAsIsObject(data)) {
113
108
  return data;
114
109
  }
115
110
  const result = isCloneDeep ? {} : data;
@@ -117,9 +112,14 @@ export const convertSignalToObject = (data, isCloneDeep = true, seen = new WeakM
117
112
  for (const key in data) {
118
113
  const value = data[key];
119
114
  if (Object.prototype.hasOwnProperty.call(data, key)) {
115
+ // Bỏ qua các đối tượng nguy hiểm để tránh maximum call stack
116
+ if (isReturnAsIsObject(value)) {
117
+ result[key] = value;
118
+ continue;
119
+ }
120
120
  result[key] = convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep);
121
121
  }
122
122
  }
123
123
  return result;
124
124
  };
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdvLXdheS1zaWduYWwtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvdHdvLXdheS1zaWduYWwtb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQWtCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBVSxJQUFTLEVBQUUsb0JBQW9CLEdBQUcsSUFBSSxFQUFFLHFCQUFxQixHQUFHLEtBQUssRUFBRSxzQ0FBc0MsR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLEVBQUssRUFBRTtJQUMvTCxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ25FLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQU0sQ0FBQztJQUM1RCxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxzQ0FB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QUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssZUFBZSxFQUFFLENBQUM7UUFDN0csT0FBTyxJQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksSUFBSSxZQUFZLFdBQVcsSUFBSSxJQUFJLFlBQVksVUFBVSxJQUFJLElBQUksWUFBWSxPQUFPLElBQUksSUFBSSxZQUFZLE9BQU8sSUFBSSxJQUFJLFlBQVksVUFBVSxJQUFJLElBQUksWUFBWSxVQUFVLEVBQUUsQ0FBQztRQUNoTCxPQUFPLElBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQXdCLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0YsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQVcsQ0FBQztBQUNyQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBzaWduYWwsIFRlbXBsYXRlUmVmLCBFbGVtZW50UmVmLCBXcml0YWJsZVNpZ25hbCwgaXNTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG4vKipcbiAqIENodXnhu4NuIMSR4buVaSBt4buZdCDEkeG7kWkgdMaw4bujbmcgaG/hurdjIGdpw6EgdHLhu4sgdGjDoG5oIHNpZ25hbFxuICogQHBhcmFtIGRhdGEgROG7ryBsaeG7h3UgY+G6p24gY2h1eeG7g24gxJHhu5VpIHRow6BuaCBzaWduYWxcbiAqIEBwYXJhbSBjbG9uZURlZXBJZk5vdFNpZ25hbCBDw7MgdGjhu7FjIGhp4buHbiBzYW8gY2jDqXAgc8OidSBk4buvIGxp4buHdSB0csaw4bubYyBraGkgY2h1eeG7g24gxJHhu5VpIGhheSBraMO0bmcgbuG6v3UgZGF0YSBraMO0bmcgcGjhuqNpIHNpZ25hbC4gTeG6t2MgxJHhu4tuaCBsw6AgdHJ1ZS5cbiAqIMSQ4bq3dCBmYWxzZSBu4bq/dSBtdeG7kW4gZ2nhu68gbmd1ecOqbiB0aGFtIGNoaeG6v3UgxJHhur9uIGThu68gbGnhu4d1IGfhu5FjLlxuICogTuG6v3UgbXXhu5FuIHNhbyBjaMOpcCBzw6J1IMSR4buRaSB0xrDhu6NuZyBzaWduYWwgdGjDrCDEkeG6t3QgY2xvbmVEZWVwSWZOb3RTaWduYWwgbMOgIHRydWUgdsOgIGFjY2VwdENvbnZlcnRPYmplY3RJbm5lcldyaXRhYmxlU2lnbmFsIGzDoCB0cnVlLlxuICogQHBhcmFtIGlzU2lnbmFsUHJpbWl0aXZlVHlwZSBDw7MgY2h1eeG7g24gxJHhu5VpIGPDoWMgZ2nDoSB0cuG7iyBuZ3V5w6puIHRo4buneSAoc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4pIHRow6BuaCBzaWduYWwgaGF5IGtow7RuZy4gTeG6t2MgxJHhu4tuaCBsw6AgZmFsc2UuXG4gKiDEkOG6t3QgdHJ1ZSBu4bq/dSBtdeG7kW4gYuG7jWMgY8OhYyBnacOhIHRy4buLIG5ndXnDqm4gdGjhu6d5IHRyb25nIHNpZ25hbC5cbiAqIEBwYXJhbSBhY2NlcHRDb252ZXJ0T2JqZWN0SW5uZXJXcml0YWJsZVNpZ25hbCBDw7MgdGnhur9wIHThu6VjIHTDrG0ga2nhur9tIHbDoCBjaHV54buDbiDEkeG7lWkgY8OhYyDEkeG7kWkgdMaw4bujbmcgYsOqbiB0cm9uZyBzaWduYWwgaGF5IGtow7RuZy4gTeG6t2MgxJHhu4tuaCBsw6AgZmFsc2UuXG4gKiDEkOG6t3QgdHJ1ZSBu4bq/dSBtdeG7kW4gdMOsbSB2w6AgY2h1eeG7g24gxJHhu5VpIGPDoWMgxJHhu5FpIHTGsOG7o25nIGLDqm4gdHJvbmcgc2lnbmFsIGhv4bq3YyBjaMOtbmggbsOzIHRow6BuaCBzaWduYWwgbeG7m2kuXG4gKiBAcmV0dXJucyBE4buvIGxp4buHdSDEkcOjIMSRxrDhu6NjIGNodXnhu4NuIMSR4buVaSB0aGVvIGtp4buDdSBUXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0T2JqZWN0VG9TaWduYWwgPSA8VCA9IGFueT4oZGF0YTogYW55LCBjbG9uZURlZXBJZk5vdFNpZ25hbCA9IHRydWUsIGlzU2lnbmFsUHJpbWl0aXZlVHlwZSA9IGZhbHNlLCBhY2NlcHRDb252ZXJ0T2JqZWN0SW5uZXJXcml0YWJsZVNpZ25hbCA9IGZhbHNlLCBzZWVuID0gbmV3IFdlYWtNYXAoKSk6IFQgPT4ge1xuICBpZiAoKGRhdGEgPT09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSAmJiAhaXNTaWduYWwoZGF0YSkpIHtcbiAgICByZXR1cm4gKGlzU2lnbmFsUHJpbWl0aXZlVHlwZSA/IHNpZ25hbChkYXRhKSA6IGRhdGEpIGFzIFQ7XG4gIH1cbiAgaWYgKHNlZW4uaGFzKGRhdGEpKSB7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgaWYgKGlzU2lnbmFsKGRhdGEpKSB7XG4gICAgaWYgKCFhY2NlcHRDb252ZXJ0T2JqZWN0SW5uZXJXcml0YWJsZVNpZ25hbCkge1xuICAgICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgICB9XG4gICAgc2Vlbi5zZXQoZGF0YSwgY29udmVydE9iamVjdFRvU2lnbmFsKGRhdGEoKSwgY2xvbmVEZWVwSWZOb3RTaWduYWwsIGlzU2lnbmFsUHJpbWl0aXZlVHlwZSwgYWNjZXB0Q29udmVydE9iamVjdElubmVyV3JpdGFibGVTaWduYWwsIHNlZW4pKTtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIHNlZW4uc2V0KGRhdGEsIHNpZ25hbChkYXRhLm1hcCgoaXRlbSkgPT4gY29udmVydE9iamVjdFRvU2lnbmFsKGl0ZW0sIGNsb25lRGVlcElmTm90U2lnbmFsLCBpc1NpZ25hbFByaW1pdGl2ZVR5cGUsIGFjY2VwdENvbnZlcnRPYmplY3RJbm5lcldyaXRhYmxlU2lnbmFsLCBzZWVuKSkpIGFzIFQpO1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKTtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgY29uc3QgbWFwQ29weSA9IG5ldyBNYXAoKTtcbiAgICBBcnJheS5mcm9tKGRhdGEua2V5cygpKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIG1hcENvcHkuc2V0KGtleSwgY29udmVydE9iamVjdFRvU2lnbmFsKGRhdGEuZ2V0KGtleSksIGNsb25lRGVlcElmTm90U2lnbmFsLCBpc1NpZ25hbFByaW1pdGl2ZVR5cGUsIGFjY2VwdENvbnZlcnRPYmplY3RJbm5lcldyaXRhYmxlU2lnbmFsKSk7XG4gICAgfSk7XG4gICAgc2Vlbi5zZXQoZGF0YSwgc2lnbmFsKG1hcENvcHkpIGFzIFQpO1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKTtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgUHJvbWlzZSB8fCBkYXRhIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gIH1cblxuICBkYXRhID0gc2lnbmFsKGNsb25lRGVlcElmTm90U2lnbmFsID8geyAuLi5kYXRhIH0gOiBkYXRhKTtcbiAgc2Vlbi5zZXQoZGF0YSwgZGF0YSk7XG4gIGZvciAoY29uc3Qga2V5IGluIGRhdGEoKSkge1xuICAgIGNvbnN0IHZhbHVlID0gZGF0YSgpW2tleV07XG4gICAgaWYgKFxuICAgICAgdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiB8fFxuICAgICAgdmFsdWUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIEJsb2IgfHxcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZpbGVdJyB8fFxuICAgICAgdmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50UmVmIHx8XG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHxcbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgdmFsdWUgaW5zdGFuY2VvZiBSZWdFeHAgfHxcbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgU2V0IHx8XG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIE1hcCB8fFxuICAgICAgdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlIHx8XG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIE9ic2VydmFibGUgfHxcbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgSHR0cFBhcmFtc1xuICAgICkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSgpLCBrZXkpKSB7XG4gICAgICBkYXRhKClba2V5XSA9IGNvbnZlcnRPYmplY3RUb1NpZ25hbCh2YWx1ZSwgY2xvbmVEZWVwSWZOb3RTaWduYWwsIGlzU2lnbmFsUHJpbWl0aXZlVHlwZSwgYWNjZXB0Q29udmVydE9iamVjdElubmVyV3JpdGFibGVTaWduYWwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRhIGFzIFQ7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydFNpZ25hbFRvT2JqZWN0ID0gPFQgPSBhbnk+KGRhdGE6IGFueSwgaXNDbG9uZURlZXAgPSB0cnVlLCBzZWVuID0gbmV3IFdlYWtNYXAoKSk6IFQgPT4ge1xuICBsZXQgaWdub3JlQ2hlY2tTZWVuSGFzRGF0YUFmdGVyV2hpbGUgPSBmYWxzZTtcbiAgd2hpbGUgKGlzU2lnbmFsKGRhdGEpICYmICFzZWVuLmhhcyhkYXRhKSkge1xuICAgIGNvbnN0IGRhdGFDb252ZXJ0ID0gKGRhdGEgYXMgV3JpdGFibGVTaWduYWw8dW5rbm93bj4pKCk7XG4gICAgaWYgKHR5cGVvZiBkYXRhQ29udmVydCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChkYXRhQ29udmVydCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZGF0YUNvbnZlcnQgYXMgVDtcbiAgICAgIH1cbiAgICAgIHNlZW4uc2V0KGRhdGFDb252ZXJ0IGFzIG9iamVjdCwgZGF0YUNvbnZlcnQpO1xuICAgICAgZGF0YSA9IGRhdGFDb252ZXJ0O1xuICAgICAgaWdub3JlQ2hlY2tTZWVuSGFzRGF0YUFmdGVyV2hpbGUgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNlZW4uc2V0KGRhdGEsIGRhdGFDb252ZXJ0KTtcbiAgICBkYXRhID0gZGF0YUNvbnZlcnQ7XG4gIH1cblxuICBpZiAoZGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGlmICghaWdub3JlQ2hlY2tTZWVuSGFzRGF0YUFmdGVyV2hpbGUgJiYgc2Vlbi5oYXMoZGF0YSkpIHtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIGlmICghaXNTaWduYWwoZGF0YVswXSkpIHtcbiAgICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gICAgfVxuICAgIHNlZW4uc2V0KGRhdGEsIGRhdGEubWFwKChpdGVtKSA9PiBjb252ZXJ0U2lnbmFsVG9PYmplY3QoaXNDbG9uZURlZXAgPyBjbG9uZURlZXAoaXRlbSkgOiBpdGVtLCBpc0Nsb25lRGVlcCwgc2VlbikpIGFzIFQpO1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKTtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgY29uc3QgbWFwQ29weSA9IG5ldyBNYXAoKTtcbiAgICBBcnJheS5mcm9tKGRhdGEua2V5cygpKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIG1hcENvcHkuc2V0KGtleSwgY29udmVydFNpZ25hbFRvT2JqZWN0KGlzQ2xvbmVEZWVwID8gY2xvbmVEZWVwKGRhdGEuZ2V0KGtleSkpIDogZGF0YS5nZXQoa2V5KSwgaXNDbG9uZURlZXApKTtcbiAgICB9KTtcbiAgICBzZWVuLnNldChkYXRhLCBtYXBDb3B5IGFzIFQpO1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKTtcbiAgfVxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIEZpbGUgfHwgZGF0YSBpbnN0YW5jZW9mIEJsb2IgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpID09PSAnW29iamVjdCBGaWxlXScpIHtcbiAgICByZXR1cm4gZGF0YSBhcyBUO1xuICB9XG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiB8fCBkYXRhIGluc3RhbmNlb2YgRWxlbWVudFJlZiB8fCBkYXRhIGluc3RhbmNlb2YgRWxlbWVudCB8fCBkYXRhIGluc3RhbmNlb2YgUHJvbWlzZSB8fCBkYXRhIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSB8fCBkYXRhIGluc3RhbmNlb2YgSHR0cFBhcmFtcykge1xuICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBpc0Nsb25lRGVlcCA/IHt9IDogZGF0YTtcbiAgc2Vlbi5zZXQoZGF0YSwgcmVzdWx0KTtcbiAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgIGNvbnN0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBjb252ZXJ0U2lnbmFsVG9PYmplY3QoaXNDbG9uZURlZXAgPyBjbG9uZURlZXAodmFsdWUpIDogdmFsdWUsIGlzQ2xvbmVEZWVwKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59O1xuIl19
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdvLXdheS1zaWduYWwtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvdHdvLXdheS1zaWduYWwtb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFVLElBQVMsRUFBRSxvQkFBb0IsR0FBRyxJQUFJLEVBQUUscUJBQXFCLEdBQUcsS0FBSyxFQUFFLHNDQUFzQyxHQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsRUFBSyxFQUFFO0lBQy9MLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkUsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBTSxDQUFDO0lBQzVELENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUM7WUFDNUMs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LENBQUM7UUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFZLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTyxJQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUF3QixXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzVELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BELDZEQUE2RDtZQUM3RCxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLFNBQVM7WUFDWCxDQUFDO1lBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0YsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQVcsQ0FBQztBQUNyQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBpc1NpZ25hbCwgc2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNBcnJheU9iamVjdCwgaXNBc3luY09iamVjdCwgaXNNYXBPYmplY3QsIGlzUmV0dXJuQXNJc09iamVjdCwgaXNTZXRPYmplY3QgfSBmcm9tICcuL2Rhbmdlcm91cy1vYmplY3QnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnLi9oZWxwZXJzJztcblxuLyoqXG4gKiBDaHV54buDbiDEkeG7lWkgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGhv4bq3YyBnacOhIHRy4buLIHRow6BuaCBzaWduYWxcbiAqIEBwYXJhbSBkYXRhIEThu68gbGnhu4d1IGPhuqduIGNodXnhu4NuIMSR4buVaSB0aMOgbmggc2lnbmFsXG4gKiBAcGFyYW0gY2xvbmVEZWVwSWZOb3RTaWduYWwgQ8OzIHRo4buxYyBoaeG7h24gc2FvIGNow6lwIHPDonUgZOG7ryBsaeG7h3UgdHLGsOG7m2Mga2hpIGNodXnhu4NuIMSR4buVaSBoYXkga2jDtG5nIG7hur91IGRhdGEga2jDtG5nIHBo4bqjaSBzaWduYWwuIE3hurdjIMSR4buLbmggbMOgIHRydWUuXG4gKiDEkOG6t3QgZmFsc2UgbuG6v3UgbXXhu5FuIGdp4buvIG5ndXnDqm4gdGhhbSBjaGnhur91IMSR4bq/biBk4buvIGxp4buHdSBn4buRYy5cbiAqIE7hur91IG114buRbiBzYW8gY2jDqXAgc8OidSDEkeG7kWkgdMaw4bujbmcgc2lnbmFsIHRow6wgxJHhurd0IGNsb25lRGVlcElmTm90U2lnbmFsIGzDoCB0cnVlIHbDoCBhY2NlcHRDb252ZXJ0T2JqZWN0SW5uZXJXcml0YWJsZVNpZ25hbCBsw6AgdHJ1ZS5cbiAqIEBwYXJhbSBpc1NpZ25hbFByaW1pdGl2ZVR5cGUgQ8OzIGNodXnhu4NuIMSR4buVaSBjw6FjIGdpw6EgdHLhu4sgbmd1ecOqbiB0aOG7p3kgKHN0cmluZywgbnVtYmVyLCBib29sZWFuKSB0aMOgbmggc2lnbmFsIGhheSBraMO0bmcuIE3hurdjIMSR4buLbmggbMOgIGZhbHNlLlxuICogxJDhurd0IHRydWUgbuG6v3UgbXXhu5FuIGLhu41jIGPDoWMgZ2nDoSB0cuG7iyBuZ3V5w6puIHRo4buneSB0cm9uZyBzaWduYWwuXG4gKiBAcGFyYW0gYWNjZXB0Q29udmVydE9iamVjdElubmVyV3JpdGFibGVTaWduYWwgQ8OzIHRp4bq/cCB04bulYyB0w6xtIGtp4bq/bSB2w6AgY2h1eeG7g24gxJHhu5VpIGPDoWMgxJHhu5FpIHTGsOG7o25nIGLDqm4gdHJvbmcgc2lnbmFsIGhheSBraMO0bmcuIE3hurdjIMSR4buLbmggbMOgIGZhbHNlLlxuICogxJDhurd0IHRydWUgbuG6v3UgbXXhu5FuIHTDrG0gdsOgIGNodXnhu4NuIMSR4buVaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBiw6puIHRyb25nIHNpZ25hbCBob+G6t2MgY2jDrW5oIG7DsyB0aMOgbmggc2lnbmFsIG3hu5tpLlxuICogQHJldHVybnMgROG7ryBsaeG7h3UgxJHDoyDEkcaw4bujYyBjaHV54buDbiDEkeG7lWkgdGhlbyBraeG7g3UgVFxuICovXG5leHBvcnQgY29uc3QgY29udmVydE9iamVjdFRvU2lnbmFsID0gPFQgPSBhbnk+KGRhdGE6IGFueSwgY2xvbmVEZWVwSWZOb3RTaWduYWwgPSB0cnVlLCBpc1NpZ25hbFByaW1pdGl2ZVR5cGUgPSBmYWxzZSwgYWNjZXB0Q29udmVydE9iamVjdElubmVyV3JpdGFibGVTaWduYWwgPSBmYWxzZSwgc2VlbiA9IG5ldyBXZWFrTWFwKCkpOiBUID0+IHtcbiAgaWYgKChkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JykgJiYgIWlzU2lnbmFsKGRhdGEpKSB7XG4gICAgcmV0dXJuIChpc1NpZ25hbFByaW1pdGl2ZVR5cGUgPyBzaWduYWwoZGF0YSkgOiBkYXRhKSBhcyBUO1xuICB9XG4gIGlmIChzZWVuLmhhcyhkYXRhKSkge1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKTtcbiAgfVxuXG4gIGlmIChpc1NpZ25hbChkYXRhKSkge1xuICAgIGlmICghYWNjZXB0Q29udmVydE9iamVjdElubmVyV3JpdGFibGVTaWduYWwpIHtcbiAgICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gICAgfVxuICAgIHNlZW4uc2V0KGRhdGEsIGNvbnZlcnRPYmplY3RUb1NpZ25hbChkYXRhKCksIGNsb25lRGVlcElmTm90U2lnbmFsLCBpc1NpZ25hbFByaW1pdGl2ZVR5cGUsIGFjY2VwdENvbnZlcnRPYmplY3RJbm5lcldyaXRhYmxlU2lnbmFsLCBzZWVuKSk7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgaWYgKGlzQXJyYXlPYmplY3QoZGF0YSkpIHtcbiAgICBzZWVuLnNldChkYXRhLCBzaWduYWwoZGF0YS5tYXAoKGl0ZW0pID0+IGNvbnZlcnRPYmplY3RUb1NpZ25hbChpdGVtLCBjbG9uZURlZXBJZk5vdFNpZ25hbCwgaXNTaWduYWxQcmltaXRpdmVUeXBlLCBhY2NlcHRDb252ZXJ0T2JqZWN0SW5uZXJXcml0YWJsZVNpZ25hbCwgc2VlbikpKSBhcyBUKTtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICBpZiAoaXNNYXBPYmplY3QoZGF0YSkpIHtcbiAgICBjb25zdCBtYXBDb3B5ID0gbmV3IE1hcCgpO1xuICAgIEFycmF5LmZyb20oZGF0YS5rZXlzKCkpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgbWFwQ29weS5zZXQoa2V5LCBjb252ZXJ0T2JqZWN0VG9TaWduYWwoZGF0YS5nZXQoa2V5KSwgY2xvbmVEZWVwSWZOb3RTaWduYWwsIGlzU2lnbmFsUHJpbWl0aXZlVHlwZSwgYWNjZXB0Q29udmVydE9iamVjdElubmVyV3JpdGFibGVTaWduYWwpKTtcbiAgICB9KTtcbiAgICBzZWVuLnNldChkYXRhLCBzaWduYWwobWFwQ29weSkgYXMgVCk7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgLy8gQuG7jyBxdWEgY8OhYyDEkeG7kWkgdMaw4bujbmcgYXN5bmNcbiAgaWYgKGlzQXN5bmNPYmplY3QoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YSBhcyBUO1xuICB9XG5cbiAgZGF0YSA9IHNpZ25hbChjbG9uZURlZXBJZk5vdFNpZ25hbCA/IHsgLi4uZGF0YSB9IDogZGF0YSk7XG4gIHNlZW4uc2V0KGRhdGEsIGRhdGEpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKCkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGEoKVtrZXldO1xuICAgIC8vIELhu48gcXVhIGPDoWMgxJHhu5FpIHTGsOG7o25nIG5ndXkgaGnhu4NtIHbDoCDEkeG6t2MgYmnhu4d0XG4gICAgaWYgKGlzUmV0dXJuQXNJc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEoKSwga2V5KSkge1xuICAgICAgZGF0YSgpW2tleV0gPSBjb252ZXJ0T2JqZWN0VG9TaWduYWwodmFsdWUsIGNsb25lRGVlcElmTm90U2lnbmFsLCBpc1NpZ25hbFByaW1pdGl2ZVR5cGUsIGFjY2VwdENvbnZlcnRPYmplY3RJbm5lcldyaXRhYmxlU2lnbmFsKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0YSBhcyBUO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRTaWduYWxUb09iamVjdCA9IDxUID0gYW55PihkYXRhOiBhbnksIGlzQ2xvbmVEZWVwID0gdHJ1ZSwgc2VlbiA9IG5ldyBXZWFrTWFwKCkpOiBUID0+IHtcbiAgbGV0IGlnbm9yZUNoZWNrU2Vlbkhhc0RhdGFBZnRlcldoaWxlID0gZmFsc2U7XG4gIHdoaWxlIChpc1NpZ25hbChkYXRhKSAmJiAhc2Vlbi5oYXMoZGF0YSkpIHtcbiAgICBjb25zdCBkYXRhQ29udmVydCA9IChkYXRhIGFzIFdyaXRhYmxlU2lnbmFsPHVua25vd24+KSgpO1xuICAgIGlmICh0eXBlb2YgZGF0YUNvbnZlcnQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoZGF0YUNvbnZlcnQgPT09IG51bGwgfHwgaXNSZXR1cm5Bc0lzT2JqZWN0KGRhdGFDb252ZXJ0KSkge1xuICAgICAgICByZXR1cm4gZGF0YUNvbnZlcnQgYXMgVDtcbiAgICAgIH1cbiAgICAgIHNlZW4uc2V0KGRhdGFDb252ZXJ0IGFzIG9iamVjdCwgZGF0YUNvbnZlcnQpO1xuICAgICAgZGF0YSA9IGRhdGFDb252ZXJ0O1xuICAgICAgaWdub3JlQ2hlY2tTZWVuSGFzRGF0YUFmdGVyV2hpbGUgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNlZW4uc2V0KGRhdGEsIGRhdGFDb252ZXJ0KTtcbiAgICBkYXRhID0gZGF0YUNvbnZlcnQ7XG4gIH1cblxuICBpZiAoZGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgaXNSZXR1cm5Bc0lzT2JqZWN0KGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBpZiAoIWlnbm9yZUNoZWNrU2Vlbkhhc0RhdGFBZnRlcldoaWxlICYmIHNlZW4uaGFzKGRhdGEpKSB7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgaWYgKGlzQXJyYXlPYmplY3QoZGF0YSkpIHtcbiAgICBpZiAoIWlzU2lnbmFsKGRhdGFbMF0pKSB7XG4gICAgICByZXR1cm4gZGF0YSBhcyBUO1xuICAgIH1cbiAgICBzZWVuLnNldChkYXRhLCBkYXRhLm1hcCgoaXRlbTogYW55KSA9PiBjb252ZXJ0U2lnbmFsVG9PYmplY3QoaXNDbG9uZURlZXAgPyBjbG9uZURlZXAoaXRlbSkgOiBpdGVtLCBpc0Nsb25lRGVlcCwgc2VlbikpIGFzIFQpO1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKTtcbiAgfVxuXG4gIGlmIChpc01hcE9iamVjdChkYXRhKSkge1xuICAgIGNvbnN0IG1hcENvcHkgPSBuZXcgTWFwKCk7XG4gICAgQXJyYXkuZnJvbShkYXRhLmtleXMoKSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBtYXBDb3B5LnNldChrZXksIGNvbnZlcnRTaWduYWxUb09iamVjdChpc0Nsb25lRGVlcCA/IGNsb25lRGVlcChkYXRhLmdldChrZXkpKSA6IGRhdGEuZ2V0KGtleSksIGlzQ2xvbmVEZWVwKSk7XG4gICAgfSk7XG4gICAgc2Vlbi5zZXQoZGF0YSwgbWFwQ29weSBhcyBUKTtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICBpZiAoaXNTZXRPYmplY3QoZGF0YSkpIHtcbiAgICBjb25zdCBzZXRDb3B5ID0gbmV3IFNldCgpO1xuICAgIEFycmF5LmZyb20oZGF0YS52YWx1ZXMoKSkuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgIHNldENvcHkuYWRkKGNvbnZlcnRTaWduYWxUb09iamVjdChpc0Nsb25lRGVlcCA/IGNsb25lRGVlcCh2YWx1ZSkgOiB2YWx1ZSwgaXNDbG9uZURlZXApKTtcbiAgICB9KTtcbiAgICBzZWVuLnNldChkYXRhLCBzZXRDb3B5IGFzIFQpO1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKTtcbiAgfVxuXG4gIC8vIELhu48gcXVhIGPDoWMgxJHhu5FpIHTGsOG7o25nIG5ndXkgaGnhu4NtIHbDoCDEkeG6t2MgYmnhu4d0XG4gIGlmIChpc1JldHVybkFzSXNPYmplY3QoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YSBhcyBUO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gaXNDbG9uZURlZXAgPyB7fSA6IGRhdGE7XG4gIHNlZW4uc2V0KGRhdGEsIHJlc3VsdCk7XG4gIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkpIHtcbiAgICAgIC8vIELhu48gcXVhIGPDoWMgxJHhu5FpIHTGsOG7o25nIG5ndXkgaGnhu4NtIMSR4buDIHRyw6FuaCBtYXhpbXVtIGNhbGwgc3RhY2tcbiAgICAgIGlmIChpc1JldHVybkFzSXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0W2tleV0gPSBjb252ZXJ0U2lnbmFsVG9PYmplY3QoaXNDbG9uZURlZXAgPyBjbG9uZURlZXAodmFsdWUpIDogdmFsdWUsIGlzQ2xvbmVEZWVwKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59O1xuIl19