ngx-mask 17.1.5 → 17.1.7

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.
@@ -178,6 +178,13 @@ export class NgxMaskDirective {
178
178
  }
179
179
  if (value && value.toString().length >= 1) {
180
180
  let counterOfOpt = 0;
181
+ if (this._maskValue.includes("{" /* MaskExpression.CURLY_BRACKETS_LEFT */) &&
182
+ this._maskValue.includes("}" /* MaskExpression.CURLY_BRACKETS_RIGHT */)) {
183
+ const lengthInsideCurlyBrackets = this._maskValue.slice(this._maskValue.indexOf("{" /* MaskExpression.CURLY_BRACKETS_LEFT */) + 1, this._maskValue.indexOf("}" /* MaskExpression.CURLY_BRACKETS_RIGHT */));
184
+ return lengthInsideCurlyBrackets === String(value.length)
185
+ ? null
186
+ : this._createValidationError(value);
187
+ }
181
188
  if (this._maskValue.startsWith("percent" /* MaskExpression.PERCENT */)) {
182
189
  return null;
183
190
  }
@@ -202,21 +209,12 @@ export class NgxMaskDirective {
202
209
  }
203
210
  }
204
211
  }
205
- if (this._maskValue.indexOf("{" /* MaskExpression.CURLY_BRACKETS_LEFT */) === 1 &&
206
- value.toString().length ===
207
- this._maskValue.length +
208
- Number((this._maskValue.split("{" /* MaskExpression.CURLY_BRACKETS_LEFT */)[1] ??
209
- "" /* MaskExpression.EMPTY_STRING */).split("}" /* MaskExpression.CURLY_BRACKETS_RIGHT */)[0]) -
210
- 4) {
211
- return null;
212
- }
213
- else if ((this._maskValue.indexOf("*" /* MaskExpression.SYMBOL_STAR */) > 1 &&
212
+ if ((this._maskValue.indexOf("*" /* MaskExpression.SYMBOL_STAR */) > 1 &&
214
213
  value.toString().length <
215
214
  this._maskValue.indexOf("*" /* MaskExpression.SYMBOL_STAR */)) ||
216
215
  (this._maskValue.indexOf("?" /* MaskExpression.SYMBOL_QUESTION */) > 1 &&
217
216
  value.toString().length <
218
- this._maskValue.indexOf("?" /* MaskExpression.SYMBOL_QUESTION */)) ||
219
- this._maskValue.indexOf("{" /* MaskExpression.CURLY_BRACKETS_LEFT */) === 1) {
217
+ this._maskValue.indexOf("?" /* MaskExpression.SYMBOL_QUESTION */))) {
220
218
  return this._createValidationError(value);
221
219
  }
222
220
  if (this._maskValue.indexOf("*" /* MaskExpression.SYMBOL_STAR */) === -1 ||
@@ -927,4 +925,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
927
925
  type: HostListener,
928
926
  args: ['keydown', ['$event']]
929
927
  }] } });
930
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hc2suZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hc2stbGliL3NyYy9saWIvbmd4LW1hc2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdILGFBQWEsRUFDYixpQkFBaUIsR0FHcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQVcsZUFBZSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFxQnBELE1BQU0sT0FBTyxnQkFBZ0I7SUFsQjdCO1FBbUIwQixtQkFBYyxHQUE4QixFQUFFLENBQUM7UUFFckQsc0JBQWlCLEdBQWlDLEVBQUUsQ0FBQztRQUVyRCxhQUFRLEdBQXdCLEVBQUUsQ0FBQztRQUVuQyxXQUFNLEdBQXNCLEVBQUUsQ0FBQztRQUUvQixXQUFNLEdBQXNCLEVBQUUsQ0FBQztRQUUvQixzQkFBaUIsR0FBaUMsR0FBRyxDQUFDO1FBRXRELGtCQUFhLEdBQTZCLEdBQUcsQ0FBQztRQUU5QywwQkFBcUIsR0FBNEMsSUFBSSxDQUFDO1FBRXRFLGdCQUFXLEdBQWtDLElBQUksQ0FBQztRQUVsRCxrQkFBYSxHQUFvQyxJQUFJLENBQUM7UUFFdEQseUJBQW9CLEdBQTJDLElBQUksQ0FBQztRQUVwRSx3QkFBbUIsR0FBMEMsSUFBSSxDQUFDO1FBRWxFLGlCQUFZLEdBQW1DLElBQUksQ0FBQztRQUVwRCxvQkFBZSxHQUFzQyxJQUFJLENBQUM7UUFFMUQsZUFBVSxHQUFp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QUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUsxQixhQUFhO3NCQURuQixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjbEMsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF5UDFCLGtCQUFrQjtzQkFEeEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFPckMsZ0JBQWdCO3NCQUR0QixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVFuQyxNQUFNO3NCQURaLFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWlDekIsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFtRTFCLFNBQVM7c0JBRGYsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIERpcmVjdGl2ZSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBGb3JtQ29udHJvbCxcbiAgICBOR19WQUxJREFUT1JTLFxuICAgIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIFZhbGlkYXRpb25FcnJvcnMsXG4gICAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEN1c3RvbUtleWJvYXJkRXZlbnQgfSBmcm9tICcuL2N1c3RvbS1rZXlib2FyZC1ldmVudCc7XG5pbXBvcnQgeyBJQ29uZmlnLCBOR1hfTUFTS19DT05GSUcsIHRpbWVNYXNrcywgd2l0aG91dFZhbGlkYXRpb24gfSBmcm9tICcuL25neC1tYXNrLmNvbmZpZyc7XG5pbXBvcnQgeyBOZ3hNYXNrU2VydmljZSB9IGZyb20gJy4vbmd4LW1hc2suc2VydmljZSc7XG5pbXBvcnQgeyBNYXNrRXhwcmVzc2lvbiB9IGZyb20gJy4vbmd4LW1hc2stZXhwcmVzc2lvbi5lbnVtJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdpbnB1dFttYXNrXSwgdGV4dGFyZWFbbWFza10nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IE5neE1hc2tEaXJlY3RpdmUsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBOZ3hNYXNrRGlyZWN0aXZlLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIE5neE1hc2tTZXJ2aWNlLFxuICAgIF0sXG4gICAgZXhwb3J0QXM6ICdtYXNrLG5neE1hc2snLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hNYXNrRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uQ2hhbmdlcywgVmFsaWRhdG9yIHtcbiAgICBASW5wdXQoJ21hc2snKSBwdWJsaWMgbWFza0V4cHJlc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgPSAnJztcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBzcGVjaWFsQ2hhcmFjdGVyczogSUNvbmZpZ1snc3BlY2lhbENoYXJhY3RlcnMnXSA9IFtdO1xuXG4gICAgQElucHV0KCkgcHVibGljIHBhdHRlcm5zOiBJQ29uZmlnWydwYXR0ZXJucyddID0ge307XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgcHJlZml4OiBJQ29uZmlnWydwcmVmaXgnXSA9ICcnO1xuXG4gICAgQElucHV0KCkgcHVibGljIHN1ZmZpeDogSUNvbmZpZ1snc3VmZml4J10gPSAnJztcblxuICAgIEBJbnB1dCgpIHB1YmxpYyB0aG91c2FuZFNlcGFyYXRvcjogSUNvbmZpZ1sndGhvdXNhbmRTZXBhcmF0b3InXSA9ICcgJztcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBkZWNpbWFsTWFya2VyOiBJQ29uZmlnWydkZWNpbWFsTWFya2VyJ10gPSAnLic7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgZHJvcFNwZWNpYWxDaGFyYWN0ZXJzOiBJQ29uZmlnWydkcm9wU3BlY2lhbENoYXJhY3RlcnMnXSB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KCkgcHVibGljIGhpZGRlbklucHV0OiBJQ29uZmlnWydoaWRkZW5JbnB1dCddIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd01hc2tUeXBlZDogSUNvbmZpZ1snc2hvd01hc2tUeXBlZCddIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgcGxhY2VIb2xkZXJDaGFyYWN0ZXI6IElDb25maWdbJ3BsYWNlSG9sZGVyQ2hhcmFjdGVyJ10gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93bk1hc2tFeHByZXNzaW9uOiBJQ29uZmlnWydzaG93bk1hc2tFeHByZXNzaW9uJ10gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93VGVtcGxhdGU6IElDb25maWdbJ3Nob3dUZW1wbGF0ZSddIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgY2xlYXJJZk5vdE1hdGNoOiBJQ29uZmlnWydjbGVhcklmTm90TWF0Y2gnXSB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KCkgcHVibGljIHZhbGlkYXRpb246IElDb25maWdbJ3ZhbGlkYXRpb24nXSB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KCkgcHVibGljIHNlcGFyYXRvckxpbWl0OiBJQ29uZmlnWydzZXBhcmF0b3JMaW1pdCddIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dOZWdhdGl2ZU51bWJlcnM6IElDb25maWdbJ2FsbG93TmVnYXRpdmVOdW1iZXJzJ10gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBsZWFkWmVyb0RhdGVUaW1lOiBJQ29uZmlnWydsZWFkWmVyb0RhdGVUaW1lJ10gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBsZWFkWmVybzogSUNvbmZpZ1snbGVhZFplcm8nXSB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KCkgcHVibGljIHRyaWdnZXJPbk1hc2tDaGFuZ2U6IElDb25maWdbJ3RyaWdnZXJPbk1hc2tDaGFuZ2UnXSB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KCkgcHVibGljIGFwbTogSUNvbmZpZ1snYXBtJ10gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBpbnB1dFRyYW5zZm9ybUZuOiBJQ29uZmlnWydpbnB1dFRyYW5zZm9ybUZuJ10gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBvdXRwdXRUcmFuc2Zvcm1GbjogSUNvbmZpZ1snb3V0cHV0VHJhbnNmb3JtRm4nXSB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KCkgcHVibGljIGtlZXBDaGFyYWN0ZXJQb3NpdGlvbnM6IElDb25maWdbJ2tlZXBDaGFyYWN0ZXJQb3NpdGlvbnMnXSB8IG51bGwgPSBudWxsO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBtYXNrRmlsbGVkOiBJQ29uZmlnWydtYXNrRmlsbGVkJ10gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIF9tYXNrVmFsdWUgPSAnJztcblxuICAgIHByaXZhdGUgX2lucHV0VmFsdWUhOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9wb3NpdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIF9jb2RlITogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBfbWFza0V4cHJlc3Npb25BcnJheTogc3RyaW5nW10gPSBbXTtcblxuICAgIHByaXZhdGUgX2p1c3RQYXN0ZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2lzRm9jdXNlZCA9IGZhbHNlO1xuXG4gICAgLyoqRm9yIElNRSBjb21wb3NpdGlvbiBldmVudCAqL1xuICAgIHByaXZhdGUgX2lzQ29tcG9zaW5nID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAgIHB1YmxpYyBfbWFza1NlcnZpY2UgPSBpbmplY3QoTmd4TWFza1NlcnZpY2UsIHsgc2VsZjogdHJ1ZSB9KTtcblxuICAgIHByb3RlY3RlZCBfY29uZmlnID0gaW5qZWN0PElDb25maWc+KE5HWF9NQVNLX0NPTkZJRyk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHB1YmxpYyBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gICAgcHVibGljIG9uVG91Y2ggPSAoKSA9PiB7fTtcblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG1hc2tFeHByZXNzaW9uLFxuICAgICAgICAgICAgc3BlY2lhbENoYXJhY3RlcnMsXG4gICAgICAgICAgICBwYXR0ZXJucyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHN1ZmZpeCxcbiAgICAgICAgICAgIHRob3VzYW5kU2VwYXJhdG9yLFxuICAgICAgICAgICAgZGVjaW1hbE1hcmtlcixcbiAgICAgICAgICAgIGRyb3BTcGVjaWFsQ2hhcmFjdGVycyxcbiAgICAgICAgICAgIGhpZGRlbklucHV0LFxuICAgICAgICAgICAgc2hvd01hc2tUeXBlZCxcbiAgICAgICAgICAgIHBsYWNlSG9sZGVyQ2hhcmFjdGVyLFxuICAgICAgICAgICAgc2hvd25NYXNrRXhwcmVzc2lvbixcbiAgICAgICAgICAgIHNob3dUZW1wbGF0ZSxcbiAgICAgICAgICAgIGNsZWFySWZOb3RNYXRjaCxcbiAgICAgICAgICAgIHZhbGlkYXRpb24sXG4gICAgICAgICAgICBzZXBhcmF0b3JMaW1pdCxcbiAgICAgICAgICAgIGFsbG93TmVnYXRpdmVOdW1iZXJzLFxuICAgICAgICAgICAgbGVhZFplcm9EYXRlVGltZSxcbiAgICAgICAgICAgIGxlYWRaZXJvLFxuICAgICAgICAgICAgdHJpZ2dlck9uTWFza0NoYW5nZSxcbiAgICAgICAgICAgIGFwbSxcbiAgICAgICAgICAgIGlucHV0VHJhbnNmb3JtRm4sXG4gICAgICAgICAgICBvdXRwdXRUcmFuc2Zvcm1GbixcbiAgICAgICAgICAgIGtlZXBDaGFyYWN0ZXJQb3NpdGlvbnMsXG4gICAgICAgIH0gPSBjaGFuZ2VzO1xuICAgICAgICBpZiAobWFza0V4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBtYXNrRXhwcmVzc2lvbi5jdXJyZW50VmFsdWUgIT09IG1hc2tFeHByZXNzaW9uLnByZXZpb3VzVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAhbWFza0V4cHJlc3Npb24uZmlyc3RDaGFuZ2VcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBtYXNrRXhwcmVzc2lvbi5jdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAgICAgICBtYXNrRXhwcmVzc2lvbi5jdXJyZW50VmFsdWUuc3BsaXQoTWFza0V4cHJlc3Npb24uT1IpLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2tFeHByZXNzaW9uQXJyYXkgPSBtYXNrRXhwcmVzc2lvbi5jdXJyZW50VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KE1hc2tFeHByZXNzaW9uLk9SKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYTogc3RyaW5nLCBiOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmxlbmd0aCAtIGIubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRNYXNrKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2tFeHByZXNzaW9uQXJyYXkgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUgPSBtYXNrRXhwcmVzc2lvbi5jdXJyZW50VmFsdWUgfHwgTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uID0gdGhpcy5fbWFza1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzcGVjaWFsQ2hhcmFjdGVycykge1xuICAgICAgICAgICAgaWYgKCFzcGVjaWFsQ2hhcmFjdGVycy5jdXJyZW50VmFsdWUgfHwgIUFycmF5LmlzQXJyYXkoc3BlY2lhbENoYXJhY3RlcnMuY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2Uuc3BlY2lhbENoYXJhY3RlcnMgPSBzcGVjaWFsQ2hhcmFjdGVycy5jdXJyZW50VmFsdWUgfHwgW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbG93TmVnYXRpdmVOdW1iZXJzKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hbGxvd05lZ2F0aXZlTnVtYmVycyA9IGFsbG93TmVnYXRpdmVOdW1iZXJzLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrU2VydmljZS5hbGxvd05lZ2F0aXZlTnVtYmVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnNwZWNpYWxDaGFyYWN0ZXJzID0gdGhpcy5fbWFza1NlcnZpY2Uuc3BlY2lhbENoYXJhY3RlcnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoYzogc3RyaW5nKSA9PiBjICE9PSBNYXNrRXhwcmVzc2lvbi5NSU5VU1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gT25seSBvdmVyd3JpdGUgdGhlIG1hc2sgYXZhaWxhYmxlIHBhdHRlcm5zIGlmIGEgcGF0dGVybiBoYXMgYWN0dWFsbHkgYmVlbiBwYXNzZWQgaW5cbiAgICAgICAgaWYgKHBhdHRlcm5zICYmIHBhdHRlcm5zLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UucGF0dGVybnMgPSBwYXR0ZXJucy5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFwbSAmJiBhcG0uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hcG0gPSBhcG0uY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVmaXgpIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnByZWZpeCA9IHByZWZpeC5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN1ZmZpeCkge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2Uuc3VmZml4ID0gc3VmZml4LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhvdXNhbmRTZXBhcmF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnRob3VzYW5kU2VwYXJhdG9yID0gdGhvdXNhbmRTZXBhcmF0b3IuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWNpbWFsTWFya2VyKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5kZWNpbWFsTWFya2VyID0gZGVjaW1hbE1hcmtlci5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRyb3BTcGVjaWFsQ2hhcmFjdGVycykge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzID0gZHJvcFNwZWNpYWxDaGFyYWN0ZXJzLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGlkZGVuSW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmhpZGRlbklucHV0ID0gaGlkZGVuSW5wdXQuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG93TWFza1R5cGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5zaG93TWFza1R5cGVkID0gc2hvd01hc2tUeXBlZC5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc2hvd01hc2tUeXBlZC5wcmV2aW91c1ZhbHVlID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgICAgIHNob3dNYXNrVHlwZWQuY3VycmVudFZhbHVlID09PSB0cnVlICYmXG4gICAgICAgICAgICAgICAgdGhpcy5faXNGb2N1c2VkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwbGFjZUhvbGRlckNoYXJhY3Rlcikge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UucGxhY2VIb2xkZXJDaGFyYWN0ZXIgPSBwbGFjZUhvbGRlckNoYXJhY3Rlci5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3duTWFza0V4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnNob3duTWFza0V4cHJlc3Npb24gPSBzaG93bk1hc2tFeHByZXNzaW9uLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvd1RlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5zaG93VGVtcGxhdGUgPSBzaG93VGVtcGxhdGUuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGVhcklmTm90TWF0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmNsZWFySWZOb3RNYXRjaCA9IGNsZWFySWZOb3RNYXRjaC5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnZhbGlkYXRpb24gPSB2YWxpZGF0aW9uLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yTGltaXQpIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnNlcGFyYXRvckxpbWl0ID0gc2VwYXJhdG9yTGltaXQuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWFkWmVyb0RhdGVUaW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5sZWFkWmVyb0RhdGVUaW1lID0gbGVhZFplcm9EYXRlVGltZS5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlYWRaZXJvKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5sZWFkWmVybyA9IGxlYWRaZXJvLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJpZ2dlck9uTWFza0NoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UudHJpZ2dlck9uTWFza0NoYW5nZSA9IHRyaWdnZXJPbk1hc2tDaGFuZ2UuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dFRyYW5zZm9ybUZuKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5pbnB1dFRyYW5zZm9ybUZuID0gaW5wdXRUcmFuc2Zvcm1Gbi5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG91dHB1dFRyYW5zZm9ybUZuKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5vdXRwdXRUcmFuc2Zvcm1GbiA9IG91dHB1dFRyYW5zZm9ybUZuLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2VlcENoYXJhY3RlclBvc2l0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2Uua2VlcENoYXJhY3RlclBvc2l0aW9ucyA9IGtlZXBDaGFyYWN0ZXJQb3NpdGlvbnMuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FwcGx5TWFzaygpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSh7IHZhbHVlIH06IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuX21hc2tTZXJ2aWNlLnZhbGlkYXRpb24gfHwgIXRoaXMuX21hc2tWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21hc2tTZXJ2aWNlLmlwRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVWYWxpZGF0aW9uRXJyb3IodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9tYXNrU2VydmljZS5jcGZDbnBqRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVWYWxpZGF0aW9uRXJyb3IodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9tYXNrVmFsdWUuc3RhcnRzV2l0aChNYXNrRXhwcmVzc2lvbi5TRVBBUkFUT1IpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2l0aG91dFZhbGlkYXRpb24uaW5jbHVkZXModGhpcy5fbWFza1ZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21hc2tTZXJ2aWNlLmNsZWFySWZOb3RNYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVNYXNrcy5pbmNsdWRlcyh0aGlzLl9tYXNrVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVUaW1lKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgbGV0IGNvdW50ZXJPZk9wdCA9IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFza1ZhbHVlLnN0YXJ0c1dpdGgoTWFza0V4cHJlc3Npb24uUEVSQ0VOVCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX21hc2tTZXJ2aWNlLnBhdHRlcm5zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX21hc2tTZXJ2aWNlLnBhdHRlcm5zW2tleV0/Lm9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihrZXkpICE9PSB0aGlzLl9tYXNrVmFsdWUubGFzdEluZGV4T2Yoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0OiBzdHJpbmcgPSB0aGlzLl9tYXNrVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGk6IHN0cmluZykgPT4gaSA9PT0ga2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyT2ZPcHQgKz0gb3B0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlck9mT3B0Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1ZhbHVlLmluZGV4T2Yoa2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID49IHRoaXMuX21hc2tWYWx1ZS5pbmRleE9mKGtleSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlck9mT3B0ID09PSB0aGlzLl9tYXNrVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihNYXNrRXhwcmVzc2lvbi5DVVJMWV9CUkFDS0VUU19MRUZUKSA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID09PVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUubGVuZ3RoICtcbiAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tWYWx1ZS5zcGxpdChNYXNrRXhwcmVzc2lvbi5DVVJMWV9CUkFDS0VUU19MRUZUKVsxXSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnNwbGl0KE1hc2tFeHByZXNzaW9uLkNVUkxZX0JSQUNLRVRTX1JJR0hUKVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgKHRoaXMuX21hc2tWYWx1ZS5pbmRleE9mKE1hc2tFeHByZXNzaW9uLlNZTUJPTF9TVEFSKSA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1ZhbHVlLmluZGV4T2YoTWFza0V4cHJlc3Npb24uU1lNQk9MX1NUQVIpKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihNYXNrRXhwcmVzc2lvbi5TWU1CT0xfUVVFU1RJT04pID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS50b1N0cmluZygpLmxlbmd0aCA8XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihNYXNrRXhwcmVzc2lvbi5TWU1CT0xfUVVFU1RJT04pKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuX21hc2tWYWx1ZS5pbmRleE9mKE1hc2tFeHByZXNzaW9uLkNVUkxZX0JSQUNLRVRTX0xFRlQpID09PSAxXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlVmFsaWRhdGlvbkVycm9yKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihNYXNrRXhwcmVzc2lvbi5TWU1CT0xfU1RBUikgPT09IC0xIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1ZhbHVlLmluZGV4T2YoTWFza0V4cHJlc3Npb24uU1lNQk9MX1FVRVNUSU9OKSA9PT0gLTFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IFN0cmluZyh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheSA9IHRoaXMuX21hc2tWYWx1ZS5zcGxpdCgnKicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aDogbnVtYmVyID0gdGhpcy5fbWFza1NlcnZpY2UuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5fbWFza1ZhbHVlLmxlbmd0aCAtXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuY2hlY2tEcm9wU3BlY2lhbENoYXJBbW91bnQodGhpcy5fbWFza1ZhbHVlKSAtXG4gICAgICAgICAgICAgICAgICAgICAgY291bnRlck9mT3B0XG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5wcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX21hc2tWYWx1ZS5sZW5ndGggKyB0aGlzLnByZWZpeC5sZW5ndGggLSBjb3VudGVyT2ZPcHRcbiAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX21hc2tWYWx1ZS5sZW5ndGggLSBjb3VudGVyT2ZPcHQ7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50b1N0cmluZygpLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVZhbGlkYXRpb25FcnJvcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4QXJyYXkgPSBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEluZGV4QXJyYXkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKGxhc3RJbmRleEFycmF5WzBdIGFzIHN0cmluZykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyh2YWx1ZSkuaW5jbHVkZXMobGFzdEluZGV4QXJyYXlbMF0gPz8gJycpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnNcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGVjaWFsID0gdmFsdWUuc3BsaXQobGFzdEluZGV4QXJyYXlbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWxbc3BlY2lhbC5sZW5ndGggLSAxXS5sZW5ndGggPT09IGxhc3RJbmRleEFycmF5Lmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2NyZWF0ZVZhbGlkYXRpb25FcnJvcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGxhc3RJbmRleEFycmF5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuX21hc2tTZXJ2aWNlLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0SW5kZXhBcnJheVswXSBhcyBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFsYXN0SW5kZXhBcnJheSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmRyb3BTcGVjaWFsQ2hhcmFjdGVycykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA+PSBsZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlVmFsaWRhdGlvbkVycm9yKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihNYXNrRXhwcmVzc2lvbi5TWU1CT0xfU1RBUikgPT09IDEgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihNYXNrRXhwcmVzc2lvbi5TWU1CT0xfUVVFU1RJT04pID09PSAxXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubWFza0ZpbGxlZC5lbWl0KCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdwYXN0ZScpXG4gICAgcHVibGljIG9uUGFzdGUoKSB7XG4gICAgICAgIHRoaXMuX2p1c3RQYXN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJywgWyckZXZlbnQnXSkgcHVibGljIG9uRm9jdXMoKSB7XG4gICAgICAgIHRoaXMuX2lzRm9jdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbmdNb2RlbENoYW5nZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uTW9kZWxDaGFuZ2UodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgfCBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gb24gZm9ybSByZXNldCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYWN0dWFsVmFsdWVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHZhbHVlID09PSBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUgPSB0aGlzLl9tYXNrU2VydmljZS5nZXRBY3R1YWxWYWx1ZShcbiAgICAgICAgICAgICAgICBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdpbnB1dCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uSW5wdXQoZTogQ3VzdG9tS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyBJZiBJTUUgaXMgY29tcG9zaW5nIHRleHQsIHdlIHdhaXQgZm9yIHRoZSBjb21wb3NlZCB0ZXh0LlxuICAgICAgICBpZiAodGhpcy5faXNDb21wb3NpbmcpIHJldHVybjtcbiAgICAgICAgY29uc3QgZWw6IEhUTUxJbnB1dEVsZW1lbnQgPSBlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fbWFza1NlcnZpY2UuaW5wdXRUcmFuc2Zvcm1GbihlbC52YWx1ZSk7XG4gICAgICAgIGlmIChlbC50eXBlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lZFZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHJhbnNmb3JtZWRWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBlbC52YWx1ZSA9IHRyYW5zZm9ybWVkVmFsdWUudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0VmFsdWUgPSBlbC52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRNYXNrKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX21hc2tWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGVsLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbjogbnVtYmVyID1cbiAgICAgICAgICAgICAgICAgICAgZWwuc2VsZWN0aW9uU3RhcnQgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgKyB0aGlzLl9tYXNrU2VydmljZS5wcmVmaXgubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChlbC5zZWxlY3Rpb25TdGFydCBhcyBudW1iZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNYXNrVHlwZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5rZWVwQ2hhcmFjdGVyUG9zaXRpb25zICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnBsYWNlSG9sZGVyQ2hhcmFjdGVyLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFN5bWJvbCA9IGVsLnZhbHVlLnNsaWNlKHBvc2l0aW9uIC0gMSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXhMZW5ndGggPSB0aGlzLnByZWZpeC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrU3ltYm9sczogYm9vbGVhbiA9IHRoaXMuX21hc2tTZXJ2aWNlLl9jaGVja1N5bWJvbE1hc2soXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFN5bWJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uW3Bvc2l0aW9uIC0gMSAtIHByZWZpeExlbmd0aF0gPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkdcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja1NwZWNpYWxDaGFyYWN0ZXI6IGJvb2xlYW4gPSB0aGlzLl9tYXNrU2VydmljZS5fY2hlY2tTeW1ib2xNYXNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTeW1ib2wsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvbltwb3NpdGlvbiArIDEgLSBwcmVmaXhMZW5ndGhdID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdFJhbmdlQmFja3NwYWNlOiBib29sZWFuID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnNlbFN0YXJ0ID09PSB0aGlzLl9tYXNrU2VydmljZS5zZWxFbmQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbFN0YXJ0ID0gTnVtYmVyKHRoaXMuX21hc2tTZXJ2aWNlLnNlbFN0YXJ0KSAtIHByZWZpeExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsRW5kID0gTnVtYmVyKHRoaXMuX21hc2tTZXJ2aWNlLnNlbEVuZCkgLSBwcmVmaXhMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvZGUgPT09IE1hc2tFeHByZXNzaW9uLkJBQ0tTUEFDRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RSYW5nZUJhY2tzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrU2VydmljZS5zZWxTdGFydCA9PT0gcHJlZml4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlID0gYCR7dGhpcy5wcmVmaXh9JHt0aGlzLl9tYXNrU2VydmljZS5tYXNrSXNTaG93bi5zbGljZSgwLCBzZWxFbmQpfSR7dGhpcy5faW5wdXRWYWx1ZS5zcGxpdCh0aGlzLnByZWZpeCkuam9pbignJyl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5zZWxTdGFydCA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0lzU2hvd24ubGVuZ3RoICsgcHJlZml4TGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlID0gYCR7dGhpcy5faW5wdXRWYWx1ZX0ke3RoaXMuX21hc2tTZXJ2aWNlLm1hc2tJc1Nob3duLnNsaWNlKHNlbFN0YXJ0LCBzZWxFbmQpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUgPSBgJHt0aGlzLnByZWZpeH0ke3RoaXMuX2lucHV0VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCh0aGlzLnByZWZpeClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsU3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9JHt0aGlzLl9tYXNrU2VydmljZS5tYXNrSXNTaG93bi5zbGljZShzZWxTdGFydCwgc2VsRW5kKX0ke3RoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsRW5kICsgcHJlZml4TGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0lzU2hvd24ubGVuZ3RoICsgcHJlZml4TGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9JHt0aGlzLnN1ZmZpeH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuX21hc2tTZXJ2aWNlLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvbi5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIC0gdGhpcy5wcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKyAxIC0gdGhpcy5wcmVmaXgubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0UmFuZ2VCYWNrc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxTdGFydCA9PT0gMSAmJiB0aGlzLnByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hY3R1YWxWYWx1ZSA9IGAke3RoaXMucHJlZml4fSR7dGhpcy5fbWFza1NlcnZpY2UucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHtlbC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHRoaXMucHJlZml4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQodGhpcy5zdWZmaXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignJyl9JHt0aGlzLnN1ZmZpeH1gO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQxID0gZWwudmFsdWUuc3Vic3RyaW5nKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydDIgPSBlbC52YWx1ZS5zdWJzdHJpbmcocG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hY3R1YWxWYWx1ZSA9IGAke3BhcnQxfSR7dGhpcy5fbWFza1NlcnZpY2UucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHtwYXJ0Mn1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29kZSAhPT0gTWFza0V4cHJlc3Npb24uQkFDS1NQQUNFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrU3ltYm9scyAmJiAhY2hlY2tTcGVjaWFsQ2hhcmFjdGVyICYmIHNlbGVjdFJhbmdlQmFja3NwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBOdW1iZXIoZWwuc2VsZWN0aW9uU3RhcnQpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2Uuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLnZhbHVlLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrU3BlY2lhbENoYXJhY3RlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLl9tYXNrU2VydmljZS5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwudmFsdWUuc2xpY2UocG9zaXRpb24gKyAxLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUgPSBgJHtlbC52YWx1ZS5zbGljZSgwLCBwb3NpdGlvbiAtIDEpfSR7ZWwudmFsdWUuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgMSl9JHtpbnB1dFN5bWJvbH0ke2VsLnZhbHVlLnNsaWNlKHBvc2l0aW9uICsgMil9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hlY2tTeW1ib2xzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnZhbHVlLmxlbmd0aCA9PT0gMSAmJiBwb3NpdGlvbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hY3R1YWxWYWx1ZSA9IGAke3RoaXMucHJlZml4fSR7aW5wdXRTeW1ib2x9JHt0aGlzLl9tYXNrU2VydmljZS5tYXNrSXNTaG93bi5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrSXNTaG93bi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX0ke3RoaXMuc3VmZml4fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUgPSBgJHtlbC52YWx1ZS5zbGljZSgwLCBwb3NpdGlvbiAtIDEpfSR7aW5wdXRTeW1ib2x9JHtlbC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKHBvc2l0aW9uICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCh0aGlzLnN1ZmZpeClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcnKX0ke3RoaXMuc3VmZml4fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWZpeCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLnZhbHVlLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIC0gcHJlZml4TGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuX2NoZWNrU3ltYm9sTWFzayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uW3Bvc2l0aW9uIC0gMSAtIHByZWZpeExlbmd0aF0gPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklOR1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlID0gYCR7dGhpcy5wcmVmaXh9JHtlbC52YWx1ZX0ke3RoaXMuX21hc2tTZXJ2aWNlLm1hc2tJc1Nob3duLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrSXNTaG93bi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfSR7dGhpcy5zdWZmaXh9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBjYXJldFNoaWZ0ID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgYmFja3NwYWNlU2hpZnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29kZSA9PT0gTWFza0V4cHJlc3Npb24uREVMRVRFICYmIE1hc2tFeHByZXNzaW9uLlNFUEFSQVRPUikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5kZWxldGVkU3BlY2lhbENoYXJhY3RlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRWYWx1ZS5sZW5ndGggPj0gdGhpcy5fbWFza1NlcnZpY2UubWFza0V4cHJlc3Npb24ubGVuZ3RoIC0gMSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb2RlICE9PSBNYXNrRXhwcmVzc2lvbi5CQUNLU1BBQ0UgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0V4cHJlc3Npb24gPT09IE1hc2tFeHByZXNzaW9uLkRBWVNfTU9OVEhTX1lFQVJTICYmXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIDwgMTBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRTeW1ib2wgPSB0aGlzLl9pbnB1dFZhbHVlLnNsaWNlKHBvc2l0aW9uIC0gMSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dFZhbHVlLnNsaWNlKDAsIHBvc2l0aW9uIC0gMSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTeW1ib2wgK1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRWYWx1ZS5zbGljZShwb3NpdGlvbiArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uID09PSBNYXNrRXhwcmVzc2lvbi5EQVlTX01PTlRIU19ZRUFSUyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlYWRaZXJvRGF0ZVRpbWVcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uIDwgMyAmJiBOdW1iZXIoZWwudmFsdWUpID4gMzEgJiYgTnVtYmVyKGVsLnZhbHVlKSA8IDQwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uID09PSA1ICYmIE51bWJlcihlbC52YWx1ZS5zbGljZSgzLCA1KSkgPiAxMilcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uID09PSBNYXNrRXhwcmVzc2lvbi5IT1VSU19NSU5VVEVTX1NFQ09ORFMgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcG1cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2p1c3RQYXN0ZWQgJiYgZWwudmFsdWUuc2xpY2UoMCwgMikgPT09IE1hc2tFeHByZXNzaW9uLkRPVUJMRV9aRVJPKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZSA9IGVsLnZhbHVlLnNsaWNlKDEsIDIpICsgZWwudmFsdWUuc2xpY2UoMiwgZWwudmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZSA9PT0gTWFza0V4cHJlc3Npb24uRE9VQkxFX1pFUk9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1hc2tFeHByZXNzaW9uLk5VTUJFUl9aRVJPXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlbC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hcHBseVZhbHVlQ2hhbmdlcyhcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2p1c3RQYXN0ZWQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvZGUgPT09IE1hc2tFeHByZXNzaW9uLkJBQ0tTUEFDRSB8fCB0aGlzLl9jb2RlID09PSBNYXNrRXhwcmVzc2lvbi5ERUxFVEUsXG4gICAgICAgICAgICAgICAgICAgIChzaGlmdDogbnVtYmVyLCBfYmFja3NwYWNlU2hpZnQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2p1c3RQYXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0U2hpZnQgPSBzaGlmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tzcGFjZVNoaWZ0ID0gX2JhY2tzcGFjZVNoaWZ0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAvLyBvbmx5IHNldCB0aGUgc2VsZWN0aW9uIGlmIHRoZSBlbGVtZW50IGlzIGFjdGl2ZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9nZXRBY3RpdmVFbGVtZW50KCkgIT09IGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWFza1NlcnZpY2UucGx1c09uZVBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5wbHVzT25lUG9zaXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHBvc2l0aW9uIGFmdGVyIGFwcGx5VmFsdWVDaGFuZ2VzIHRvIHByZXZlbnQgY3Vyc29yIG9uIHdyb25nIHBvc2l0aW9uIHdoZW4gaXQgaGFzIGFuIGFycmF5IG9mIG1hc2tFeHByZXNzaW9uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX21hc2tFeHByZXNzaW9uQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQmFja1NwYWNlSW5TcGVjaWFsQ2hhcmFjdGVyc1Bvc2l0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvZGUgPT09IE1hc2tFeHByZXNzaW9uLkJBQ0tTUEFDRSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZS5zbGljZShwb3NpdGlvbiwgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQmFja1NwYWNlSW5TcGVjaWFsQ2hhcmFjdGVyc1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5zZWxlY3Rpb25TdGFydCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChlbC5zZWxlY3Rpb25TdGFydCBhcyBudW1iZXIpICsgdGhpcy5fbWFza1NlcnZpY2UucHJlZml4Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChlbC5zZWxlY3Rpb25TdGFydCBhcyBudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gPT09IDEgJiYgdGhpcy5faW5wdXRWYWx1ZS5sZW5ndGggPT09IDEgPyBudWxsIDogdGhpcy5fcG9zaXRpb247XG4gICAgICAgICAgICAgICAgbGV0IHBvc2l0aW9uVG9BcHBseTogbnVtYmVyID0gdGhpcy5fcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9pbnB1dFZhbHVlLmxlbmd0aCArIHBvc2l0aW9uICsgY2FyZXRTaGlmdFxuICAgICAgICAgICAgICAgICAgICA6IHBvc2l0aW9uICtcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5fY29kZSA9PT0gTWFza0V4cHJlc3Npb24uQkFDS1NQQUNFICYmICFiYWNrc3BhY2VTaGlmdCA/IDAgOiBjYXJldFNoaWZ0KTtcbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb25Ub0FwcGx5ID4gdGhpcy5fZ2V0QWN0dWFsSW5wdXRMZW5ndGgoKSkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblRvQXBwbHkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZWwudmFsdWUgPT09IHRoaXMuX21hc2tTZXJ2aWNlLmRlY2ltYWxNYXJrZXIgJiYgZWwudmFsdWUubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9nZXRBY3R1YWxJbnB1dExlbmd0aCgpICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0QWN0dWFsSW5wdXRMZW5ndGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uVG9BcHBseSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25Ub0FwcGx5ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UocG9zaXRpb25Ub0FwcGx5LCBwb3NpdGlvblRvQXBwbHkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAnTmd4LW1hc2sgd3JpdGVWYWx1ZSB3b3JrIHdpdGggc3RyaW5nIHwgbnVtYmVyLCB5b3VyIGN1cnJlbnQgdmFsdWU6JyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRyYW5zZm9ybWVkVmFsdWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXNrVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGVsLnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hcHBseVZhbHVlQ2hhbmdlcyhcbiAgICAgICAgICAgICAgICBlbC52YWx1ZS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgdGhpcy5fanVzdFBhc3RlZCxcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2RlID09PSBNYXNrRXhwcmVzc2lvbi5CQUNLU1BBQ0UgfHwgdGhpcy5fY29kZSA9PT0gTWFza0V4cHJlc3Npb24uREVMRVRFXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSU1FIHN0YXJ0c1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkNvbXBvc2l0aW9uU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzQ29tcG9zaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJTUUgY29tcGxldGVzXG4gICAgQEhvc3RMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkNvbXBvc2l0aW9uRW5kKGU6IEN1c3RvbUtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fanVzdFBhc3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub25JbnB1dChlKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25CbHVyKGU6IEN1c3RvbUtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX21hc2tWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZWw6IEhUTUxJbnB1dEVsZW1lbnQgPSBlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHRoaXMubGVhZFplcm8gJiYgZWwudmFsdWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdGhpcy5kZWNpbWFsTWFya2VyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hc2tFeHByZXNzaW9uID0gdGhpcy5fbWFza1NlcnZpY2UubWFza0V4cHJlc3Npb247XG4gICAgICAgICAgICAgICAgY29uc3QgcHJlY2lzaW9uID0gTnVtYmVyKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvbi5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tFeHByZXNzaW9uLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrRXhwcmVzc2lvbi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHByZWNpc2lvbiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZWwudmFsdWUgPSB0aGlzLnN1ZmZpeCA/IGVsLnZhbHVlLnNwbGl0KHRoaXMuc3VmZml4KS5qb2luKCcnKSA6IGVsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWNpbWFsUGFydCA9IGVsLnZhbHVlLnNwbGl0KHRoaXMuZGVjaW1hbE1hcmtlcilbMV0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZSA9IGVsLnZhbHVlLmluY2x1ZGVzKHRoaXMuZGVjaW1hbE1hcmtlcilcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZWwudmFsdWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBNYXNrRXhwcmVzc2lvbi5OVU1CRVJfWkVSTy5yZXBlYXQocHJlY2lzaW9uIC0gZGVjaW1hbFBhcnQubGVuZ3RoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICA6IGVsLnZhbHVlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNpbWFsTWFya2VyICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgTWFza0V4cHJlc3Npb24uTlVNQkVSX1pFUk8ucmVwZWF0KHByZWNpc2lvbikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1ZmZpeDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUgPSBlbC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5jbGVhcklmTm90TWF0Y2hGbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uQ2xpY2soZTogTW91c2VFdmVudCB8IEN1c3RvbUtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tYXNrVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsOiBIVE1MSW5wdXRFbGVtZW50ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgY29uc3QgcG9zU3RhcnQgPSAwO1xuICAgICAgICBjb25zdCBwb3NFbmQgPSAwO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGVsICE9PSBudWxsICYmXG4gICAgICAgICAgICBlbC5zZWxlY3Rpb25TdGFydCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgZWwuc2VsZWN0aW9uU3RhcnQgPT09IGVsLnNlbGVjdGlvbkVuZCAmJlxuICAgICAgICAgICAgZWwuc2VsZWN0aW9uU3RhcnQgPiB0aGlzLl9tYXNrU2VydmljZS5wcmVmaXgubGVuZ3RoICYmXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIChlIGFzIGFueSkua2V5Q29kZSAhPT0gMzhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFza1NlcnZpY2Uuc2hvd01hc2tUeXBlZCAmJiAhdGhpcy5rZWVwQ2hhcmFjdGVyUG9zaXRpb25zKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHNob3dpbmcgdGhlIG1hc2sgaW4gdGhlIGlucHV0XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0lzU2hvd24gPSB0aGlzLl9tYXNrU2VydmljZS5zaG93TWFza0luSW5wdXQoKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnByZWZpeCArIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tJc1Nob3duID09PSBlbC52YWx1ZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgaW5wdXQgT05MWSBjb250YWlucyB0aGUgbWFzaywgc28gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgZWwuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UocG9zU3RhcnQsIHBvc0VuZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGlucHV0IGNvbnRhaW5zIHNvbWUgY2hhcmFjdGVycyBhbHJlYWR5XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5zZWxlY3Rpb25TdGFydCA+IHRoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHVzZXIgY2xpY2tlZCBiZXlvbmQgb3VyIHZhbHVlJ3MgbGVuZ3RoLCBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBlbmQgb2Ygb3VyIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hY3R1YWxWYWx1ZS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZTogc3RyaW5nIHwgbnVsbCA9XG4gICAgICAgICAgICBlbCAmJlxuICAgICAgICAgICAgKGVsLnZhbHVlID09PSB0aGlzLl9tYXNrU2VydmljZS5wcmVmaXhcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21hc2tTZXJ2aWNlLnByZWZpeCArIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tJc1Nob3duXG4gICAgICAgICAgICAgICAgOiBlbC52YWx1ZSk7XG5cbiAgICAgICAgLyoqIEZpeCBvZiBjdXJzb3IgcG9zaXRpb24ganVtcGluZyB0byBlbmQgaW4gbW9zdCBicm93c2VycyBubyBtYXR0ZXIgd2hlcmUgY3Vyc29yIGlzIGluc2VydGVkIG9uRm9jdXMgKi9cbiAgICAgICAgaWYgKGVsICYmIGVsLnZhbHVlICE9PSBuZXh0VmFsdWUpIHtcbiAgICAgICAgICAgIGVsLnZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8qKiBmaXggb2YgY3Vyc29yIHBvc2l0aW9uIHdpdGggcHJlZml4IHdoZW4gbW91c2UgY2xpY2sgb2NjdXIgKi9cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZWwgJiZcbiAgICAgICAgICAgIGVsLnR5cGUgIT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAoKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgfHwgKGVsLnNlbGVjdGlvbkVuZCBhcyBudW1iZXIpKSA8PVxuICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnByZWZpeC5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBlbC5zZWxlY3Rpb25TdGFydCA9IHRoaXMuX21hc2tTZXJ2aWNlLnByZWZpeC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLyoqIHNlbGVjdCBvbmx5IGluc2VydGVkIHRleHQgKi9cbiAgICAgICAgaWYgKGVsICYmIChlbC5zZWxlY3Rpb25FbmQgYXMgbnVtYmVyKSA+IHRoaXMuX2dldEFjdHVhbElucHV0TGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIGVsLnNlbGVjdGlvbkVuZCA9IHRoaXMuX2dldEFjdHVhbElucHV0TGVuZ3RoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlEb3duKGU6IEN1c3RvbUtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tYXNrVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pc0NvbXBvc2luZykge1xuICAgICAgICAgICAgLy8gVXNlciBmaW5hbGl6ZSB0aGVpciBjaG9pY2UgZnJvbSBJTUUgY29tcG9zaXRpb24sIHNvIHRyaWdnZXIgb25JbnB1dCgpIGZvciB0aGUgY29tcG9zZWQgdGV4dC5cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykgdGhpcy5vbkNvbXBvc2l0aW9uRW5kKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29kZSA9IGUuY29kZSA/IGUuY29kZSA6IGUua2V5O1xuICAgICAgICBjb25zdCBlbDogSFRNTElucHV0RWxlbWVudCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX2lucHV0VmFsdWUgPSBlbC52YWx1ZTtcbiAgICAgICAgdGhpcy5fc2V0TWFzaygpO1xuXG4gICAgICAgIGlmIChlbC50eXBlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKGUua2V5ID09PSBNYXNrRXhwcmVzc2lvbi5BUlJPV19VUCkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlLmtleSA9PT0gTWFza0V4cHJlc3Npb24uQVJST1dfTEVGVCB8fFxuICAgICAgICAgICAgICAgIGUua2V5ID09PSBNYXNrRXhwcmVzc2lvbi5CQUNLU1BBQ0UgfHxcbiAgICAgICAgICAgICAgICBlLmtleSA9PT0gTWFza0V4cHJlc3Npb24uREVMRVRFXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09IE1hc2tFeHByZXNzaW9uLkJBQ0tTUEFDRSAmJiBlbC52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuc2VsZWN0aW9uU3RhcnQgPSBlbC5zZWxlY3Rpb25FbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gTWFza0V4cHJlc3Npb24uQkFDS1NQQUNFICYmIChlbC5zZWxlY3Rpb25TdGFydCBhcyBudW1iZXIpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHNwZWNpYWxDaGFycyBpcyBmYWxzZSwgKHNob3VsZG4ndCBldmVyIGhhcHBlbikgdGhlbiBzZXQgdG8gdGhlIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BlY2lhbENoYXJhY3RlcnMgPSB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzPy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5zcGVjaWFsQ2hhcmFjdGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9jb25maWcuc3BlY2lhbENoYXJhY3RlcnM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlZml4Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChlbC5zZWxlY3Rpb25TdGFydCBhcyBudW1iZXIpIDw9IHRoaXMucHJlZml4Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKHRoaXMucHJlZml4Lmxlbmd0aCwgZWwuc2VsZWN0aW9uRW5kKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dFZhbHVlLmxlbmd0aCAhPT0gKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWwuc2VsZWN0aW9uU3RhcnQgYXMgbnVtYmVyKSAhPT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0VmFsdWVbKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgLSAxXSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklOR1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh0aGlzLnByZWZpeC5sZW5ndGggPj0gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgPiB0aGlzLnByZWZpeC5sZW5ndGgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWZpeC5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwuc2VsZWN0aW9uRW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tTZWxlY3Rpb25PbkRlbGV0aW9uKGVsKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnByZWZpeC5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgPD0gdGhpcy5fbWFza1NlcnZpY2UucHJlZml4Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAoZWwuc2VsZWN0aW9uRW5kIGFzIG51bWJlcikgPD0gdGhpcy5fbWFza1NlcnZpY2UucHJlZml4Lmxlbmd0aFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclN0YXJ0OiBudW1iZXIgfCBudWxsID0gZWwuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBlLmtleSA9PT0gTWFza0V4cHJlc3Npb24uQkFDS1NQQUNFICYmXG4gICAgICAgICAgICAgICAgICAgICFlbC5yZWFkT25seSAmJlxuICAgICAgICAgICAgICAgICAgICBjdXJzb3JTdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBlbC5zZWxlY3Rpb25FbmQgPT09IGVsLnZhbHVlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZS5sZW5ndGggIT09IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gPSB0aGlzLl9tYXNrU2VydmljZS5wcmVmaXggPyB0aGlzLl9tYXNrU2VydmljZS5wcmVmaXgubGVuZ3RoIDogMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYXBwbHlNYXNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UucHJlZml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhIXRoaXMuc3VmZml4ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zdWZmaXgubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0VmFsdWUubGVuZ3RoIC0gdGhpcy5zdWZmaXgubGVuZ3RoIDwgKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dFZhbHVlLmxlbmd0aCAtIHRoaXMuc3VmZml4Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRWYWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAoZS5jb2RlID09PSAnS2V5QScgJiYgZS5jdHJsS2V5KSB8fFxuICAgICAgICAgICAgICAgIChlLmNvZGUgPT09ICdLZXlBJyAmJiBlLm1ldGFLZXkpIC8vIENtZCArIEEgKE1hYylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKDAsIHRoaXMuX2dldEFjdHVhbElucHV0TGVuZ3RoKCkpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnNlbFN0YXJ0ID0gZWwuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5zZWxFbmQgPSBlbC5zZWxlY3Rpb25FbmQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSXQgd3JpdGVzIHRoZSB2YWx1ZSBpbiB0aGUgaW5wdXQgKi9cbiAgICBwdWJsaWMgYXN5bmMgd3JpdGVWYWx1ZShjb250cm9sVmFsdWU6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb250cm9sVmFsdWUgPT09ICdvYmplY3QnICYmIGNvbnRyb2xWYWx1ZSAhPT0gbnVsbCAmJiAndmFsdWUnIGluIGNvbnRyb2xWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKCdkaXNhYmxlJyBpbiBjb250cm9sVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERpc2FibGVkU3RhdGUoQm9vbGVhbihjb250cm9sVmFsdWUuZGlzYWJsZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBjb250cm9sVmFsdWUgPSBjb250cm9sVmFsdWUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRyb2xWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBjb250cm9sVmFsdWUgPSB0aGlzLmlucHV0VHJhbnNmb3JtRm5cbiAgICAgICAgICAgICAgICA/IHRoaXMuaW5wdXRUcmFuc2Zvcm1Gbihjb250cm9sVmFsdWUpXG4gICAgICAgICAgICAgICAgOiBjb250cm9sVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgY29udHJvbFZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgdHlwZW9mIGNvbnRyb2xWYWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIGNvbnRyb2xWYWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgY29udHJvbFZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbFZhbHVlID09PSBudWxsIHx8IGNvbnRyb2xWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2xWYWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5fY3VycmVudFZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuX3ByZXZpb3VzVmFsdWUgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlucHV0VmFsdWU6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSBjb250cm9sVmFsdWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdHlwZW9mIGlucHV0VmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1ZhbHVlLnN0YXJ0c1dpdGgoTWFza0V4cHJlc3Npb24uU0VQQVJBVE9SKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IFN0cmluZyhpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbGVEZWNpbWFsTWFya2VyID0gdGhpcy5fbWFza1NlcnZpY2UuY3VycmVudExvY2FsZURlY2ltYWxNYXJrZXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fbWFza1NlcnZpY2UuZGVjaW1hbE1hcmtlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5kZWNpbWFsTWFya2VyICE9PSBsb2NhbGVEZWNpbWFsTWFya2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpbnB1dFZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRGVjaW1hbE1hcmtlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5kZWNpbWFsTWFya2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubGVhZFplcm8gJiZcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hc2tFeHByZXNzaW9uICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzICE9PSBmYWxzZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gdGhpcy5fbWFza1NlcnZpY2UuX2NoZWNrUHJlY2lzaW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlIGFzIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjaW1hbE1hcmtlciA9PT0gTWFza0V4cHJlc3Npb24uQ09NTUEgfHxcbiAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkodGhpcy5fbWFza1NlcnZpY2UuZGVjaW1hbE1hcmtlcikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3IgPT09IE1hc2tFeHByZXNzaW9uLkRPVClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IGlucHV0VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShNYXNrRXhwcmVzc2lvbi5ET1QsIE1hc2tFeHByZXNzaW9uLkNPTU1BKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWFza0V4cHJlc3Npb24/LnN0YXJ0c1dpdGgoTWFza0V4cHJlc3Npb24uU0VQQVJBVE9SKSAmJiB0aGlzLmxlYWRaZXJvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hcHBseU1hc2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZT8udG9TdHJpbmcoKSA/PyAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmlzTnVtYmVyVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9pbnB1dFZhbHVlID0gaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NldE1hc2soKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChpbnB1dFZhbHVlICYmIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvbiAmJlxuICAgICAgICAgICAgICAgICAgICAodGhpcy5fbWFza1NlcnZpY2UucHJlZml4IHx8IHRoaXMuX21hc2tTZXJ2aWNlLnNob3dNYXNrVHlwZWQpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBzZXJ2aWNlIHdlIGtub3cgd2UgYXJlIHdyaXRpbmcgdmFsdWUgc28gdGhhdCB0cmlnZ2VyaW5nIG9uQ2hhbmdlIGZ1bmN0aW9uIHdvbid0IGhhcHBlbiBkdXJpbmcgYXBwbHlNYXNrXG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuaW5wdXRUcmFuc2Zvcm1GbiAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICA/ICh0aGlzLl9tYXNrU2VydmljZS53cml0aW5nVmFsdWUgPSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICA6ICcnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuZm9ybUVsZW1lbnRQcm9wZXJ0eSA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYXBwbHlNYXNrKGlucHV0VmFsdWUsIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uKSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIC8vIExldCB0aGUgc2VydmljZSBrbm93IHdlJ3ZlIGZpbmlzaGVkIHdyaXRpbmcgdmFsdWVcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5pbnB1dFRyYW5zZm9ybUZuICE9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgID8gKHRoaXMuX21hc2tTZXJ2aWNlLndyaXRpbmdWYWx1ZSA9IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5mb3JtRWxlbWVudFByb3BlcnR5ID0gWyd2YWx1ZScsIGlucHV0VmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5faW5wdXRWYWx1ZSA9IGlucHV0VmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgJ05neC1tYXNrIHdyaXRlVmFsdWUgd29yayB3aXRoIHN0cmluZyB8IG51bWJlciwgeW91ciBjdXJyZW50IHZhbHVlOicsXG4gICAgICAgICAgICAgICAgdHlwZW9mIGNvbnRyb2xWYWx1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiB0eXBlb2YgdGhpcy5vbkNoYW5nZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IHR5cGVvZiB0aGlzLm9uVG91Y2gpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoID0gZm47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0QWN0aXZlRWxlbWVudChkb2N1bWVudDogRG9jdW1lbnRPclNoYWRvd1Jvb3QgPSB0aGlzLmRvY3VtZW50KTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBzaGFkb3dSb290RWwgPSBkb2N1bWVudD8uYWN0aXZlRWxlbWVudD8uc2hhZG93Um9vdDtcbiAgICAgICAgaWYgKCFzaGFkb3dSb290RWw/LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoc2hhZG93Um9vdEVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja1NlbGVjdGlvbk9uRGVsZXRpb24oZWw6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgZWwuc2VsZWN0aW9uU3RhcnQgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIE1hdGgubWF4KHRoaXMucHJlZml4Lmxlbmd0aCwgZWwuc2VsZWN0aW9uU3RhcnQgYXMgbnVtYmVyKSxcbiAgICAgICAgICAgIHRoaXMuX2lucHV0VmFsdWUubGVuZ3RoIC0gdGhpcy5zdWZmaXgubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICAgIGVsLnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKFxuICAgICAgICAgICAgTWF0aC5tYXgodGhpcy5wcmVmaXgubGVuZ3RoLCBlbC5zZWxlY3Rpb25FbmQgYXMgbnVtYmVyKSxcbiAgICAgICAgICAgIHRoaXMuX2lucHV0VmFsdWUubGVuZ3RoIC0gdGhpcy5zdWZmaXgubGVuZ3RoXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEl0IGRpc2FibGVzIHRoZSBpbnB1dCBlbGVtZW50ICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5mb3JtRWxlbWVudFByb3BlcnR5ID0gWydkaXNhYmxlZCcsIGlzRGlzYWJsZWRdO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHJpdmF0ZSBfYXBwbHlNYXNrKCk6IGFueSB7XG4gICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uID0gdGhpcy5fbWFza1NlcnZpY2UuX3JlcGVhdFBhdHRlcm5TeW1ib2xzKFxuICAgICAgICAgICAgdGhpcy5fbWFza1ZhbHVlIHx8ICcnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmZvcm1FbGVtZW50UHJvcGVydHkgPSBbXG4gICAgICAgICAgICAndmFsdWUnLFxuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYXBwbHlNYXNrKHRoaXMuX2lucHV0VmFsdWUsIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF92YWxpZGF0ZVRpbWUodmFsdWU6IHN0cmluZyk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgcm93TWFza0xlbjogbnVtYmVyID0gdGhpcy5fbWFza1ZhbHVlXG4gICAgICAgICAgICAuc3BsaXQoTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKVxuICAgICAgICAgICAgLmZpbHRlcigoczogc3RyaW5nKSA9PiBzICE9PSAnOicpLmxlbmd0aDtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIERvbid0IHZhbGlkYXRlIGVtcHR5IHZhbHVlcyB0byBhbGxvdyBmb3Igb3B0aW9uYWwgZm9ybSBjb250cm9sXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoKyh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSA/PyAtMSkgPT09IDAgJiYgdmFsdWUubGVuZ3RoIDwgcm93TWFza0xlbikgfHxcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA8PSByb3dNYXNrTGVuIC0gMlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVWYWxpZGF0aW9uRXJyb3IodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0QWN0dWFsSW5wdXRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hY3R1YWxWYWx1ZS5sZW5ndGggfHxcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlLmxlbmd0aCArIHRoaXMuX21hc2tTZXJ2aWNlLnByZWZpeC5sZW5ndGhcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVWYWxpZGF0aW9uRXJyb3IoYWN0dWFsVmFsdWU6IHN0cmluZyk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWFzazoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkTWFzazogdGhpcy5fbWFza1ZhbHVlLFxuICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRNYXNrKCkge1xuICAgICAgICB0aGlzLl9tYXNrRXhwcmVzc2lvbkFycmF5LnNvbWUoKG1hc2spOiBib29sZWFuIHwgdm9pZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsQ2hhcnQ6IGJvb2xlYW4gPSBtYXNrXG4gICAgICAgICAgICAgICAgLnNwbGl0KE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORylcbiAgICAgICAgICAgICAgICAuc29tZSgoY2hhcikgPT4gdGhpcy5fbWFza1NlcnZpY2Uuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoY2hhcikpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKHNwZWNpYWxDaGFydCAmJiB0aGlzLl9pbnB1dFZhbHVlICYmICFtYXNrLmluY2x1ZGVzKE1hc2tFeHByZXNzaW9uLkxFVFRFUl9TKSkgfHxcbiAgICAgICAgICAgICAgICBtYXNrLmluY2x1ZGVzKE1hc2tFeHByZXNzaW9uLkNVUkxZX0JSQUNLRVRTX0xFRlQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UucmVtb3ZlTWFzayh0aGlzLl9pbnB1dFZhbHVlKT8ubGVuZ3RoIDw9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnJlbW92ZU1hc2sobWFzayk/Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAodGVzdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXNrRXhwcmVzc2lvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzay5pbmNsdWRlcyhNYXNrRXhwcmVzc2lvbi5DVVJMWV9CUkFDS0VUU19MRUZUKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX21hc2tTZXJ2aWNlLl9yZXBlYXRQYXR0ZXJuU3ltYm9scyhtYXNrKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1hc2s7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza0V4cHJlc3Npb25BcnJheVt0aGlzLl9tYXNrRXhwcmVzc2lvbkFycmF5Lmxlbmd0aCAtIDFdID8/XG4gICAgICAgICAgICAgICAgICAgICAgICBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hc2tFeHByZXNzaW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uLmluY2x1ZGVzKE1hc2tFeHByZXNzaW9uLkNVUkxZX0JSQUNLRVRTX0xFRlQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5fbWFza1NlcnZpY2UuX3JlcGVhdFBhdHRlcm5TeW1ib2xzKGV4cHJlc3Npb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZXhwcmVzc2lvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrOiBib29sZWFuID0gdGhpcy5fbWFza1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLnJlbW92ZU1hc2sodGhpcy5faW5wdXRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgPy5zcGxpdChNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpXG4gICAgICAgICAgICAgICAgICAgIC5ldmVyeSgoY2hhcmFjdGVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhNYXNrID0gbWFzay5jaGFyQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2tTZXJ2aWNlLl9jaGVja1N5bWJvbE1hc2soY2hhcmFjdGVyLCBpbmRleE1hc2spO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGVjayB8fCB0aGlzLl9qdXN0UGFzdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tWYWx1ZSA9IHRoaXMubWFza0V4cHJlc3Npb24gPSB0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvbiA9IG1hc2s7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
928
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hc2suZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hc2stbGliL3NyYy9saWIvbmd4LW1hc2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdILGFBQWEsRUFDYixpQkFBaUIsR0FHcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQVcsZUFBZSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFxQnBELE1BQU0sT0FBTyxnQkFBZ0I7SUFsQjdCO1FBbUIwQixtQkFBYyxHQUE4QixFQUFFLENBQUM7UUFFckQsc0JBQWlCLEdBQWlDLEVBQUUsQ0FBQztRQUVyRCxhQUFRLEdBQXdCLEVBQUUsQ0FBQztRQUVuQyxXQUFNLEdBQXNCLEVBQUUsQ0FBQztRQUUvQixXQUFNLEdBQXNCLEVBQUUsQ0FBQztRQUUvQixzQkFBaUIsR0FBaUMsR0FBRyxDQUFDO1FBRXRELGtCQUFhLEdBQTZCLEdBQUcsQ0FBQztRQUU5QywwQkFBcUIsR0FBNEMsSUFBSSxDQUFDO1FBRXRFLGdCQUFXLEdBQWtDLElBQUksQ0FBQztRQUVsRCxrQkFBYSxHQUFvQyxJQUFJLENBQUM7UUFFdEQseUJBQW9CLEdBQTJDLElBQUksQ0FBQztRQUVwRSx3QkFBbUIsR0FBMEMsSUFBSSxDQUFDO1FBRWxFLGlCQUFZLEdBQW1DLElBQUksQ0FBQztRQUVwRCxvQkFBZSxHQUFzQyxJQUFJLENBQUM7UUFFMUQsZUFBVSxHQUFp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T0FBTztnQkFLcUIsT0FBTztzQkFBaEQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBSzFCLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWNsQyxPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXlQMUIsa0JBQWtCO3NCQUR4QixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU9yQyxnQkFBZ0I7c0JBRHRCLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUW5DLE1BQU07c0JBRFosWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBaUN6QixPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW1FMUIsU0FBUztzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1Db250cm9sLFxuICAgIE5HX1ZBTElEQVRPUlMsXG4gICAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgVmFsaWRhdGlvbkVycm9ycyxcbiAgICBWYWxpZGF0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQ3VzdG9tS2V5Ym9hcmRFdmVudCB9IGZyb20gJy4vY3VzdG9tLWtleWJvYXJkLWV2ZW50JztcbmltcG9ydCB7IElDb25maWcsIE5HWF9NQVNLX0NPTkZJRywgdGltZU1hc2tzLCB3aXRob3V0VmFsaWRhdGlvbiB9IGZyb20gJy4vbmd4LW1hc2suY29uZmlnJztcbmltcG9ydCB7IE5neE1hc2tTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtbWFzay5zZXJ2aWNlJztcbmltcG9ydCB7IE1hc2tFeHByZXNzaW9uIH0gZnJvbSAnLi9uZ3gtbWFzay1leHByZXNzaW9uLmVudW0nO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2lucHV0W21hc2tdLCB0ZXh0YXJlYVttYXNrXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogTmd4TWFza0RpcmVjdGl2ZSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IE5neE1hc2tEaXJlY3RpdmUsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgTmd4TWFza1NlcnZpY2UsXG4gICAgXSxcbiAgICBleHBvcnRBczogJ21hc2ssbmd4TWFzaycsXG59KVxuZXhwb3J0IGNsYXNzIE5neE1hc2tEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzLCBWYWxpZGF0b3Ige1xuICAgIEBJbnB1dCgnbWFzaycpIHB1YmxpYyBtYXNrRXhwcmVzc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCA9ICcnO1xuXG4gICAgQElucHV0KCkgcHVibGljIHNwZWNpYWxDaGFyYWN0ZXJzOiBJQ29uZmlnWydzcGVjaWFsQ2hhcmFjdGVycyddID0gW107XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgcGF0dGVybnM6IElDb25maWdbJ3BhdHRlcm5zJ10gPSB7fTtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBwcmVmaXg6IElDb25maWdbJ3ByZWZpeCddID0gJyc7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgc3VmZml4OiBJQ29uZmlnWydzdWZmaXgnXSA9ICcnO1xuXG4gICAgQElucHV0KCkgcHVibGljIHRob3VzYW5kU2VwYXJhdG9yOiBJQ29uZmlnWyd0aG91c2FuZFNlcGFyYXRvciddID0gJyAnO1xuXG4gICAgQElucHV0KCkgcHVibGljIGRlY2ltYWxNYXJrZXI6IElDb25maWdbJ2RlY2ltYWxNYXJrZXInXSA9ICcuJztcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBkcm9wU3BlY2lhbENoYXJhY3RlcnM6IElDb25maWdbJ2Ryb3BTcGVjaWFsQ2hhcmFjdGVycyddIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZGVuSW5wdXQ6IElDb25maWdbJ2hpZGRlbklucHV0J10gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93TWFza1R5cGVkOiBJQ29uZmlnWydzaG93TWFza1R5cGVkJ10gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBwbGFjZUhvbGRlckNoYXJhY3RlcjogSUNvbmZpZ1sncGxhY2VIb2xkZXJDaGFyYWN0ZXInXSB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KCkgcHVibGljIHNob3duTWFza0V4cHJlc3Npb246IElDb25maWdbJ3Nob3duTWFza0V4cHJlc3Npb24nXSB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KCkgcHVibGljIHNob3dUZW1wbGF0ZTogSUNvbmZpZ1snc2hvd1RlbXBsYXRlJ10gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGVhcklmTm90TWF0Y2g6IElDb25maWdbJ2NsZWFySWZOb3RNYXRjaCddIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgdmFsaWRhdGlvbjogSUNvbmZpZ1sndmFsaWRhdGlvbiddIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgc2VwYXJhdG9yTGltaXQ6IElDb25maWdbJ3NlcGFyYXRvckxpbWl0J10gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd05lZ2F0aXZlTnVtYmVyczogSUNvbmZpZ1snYWxsb3dOZWdhdGl2ZU51bWJlcnMnXSB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KCkgcHVibGljIGxlYWRaZXJvRGF0ZVRpbWU6IElDb25maWdbJ2xlYWRaZXJvRGF0ZVRpbWUnXSB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KCkgcHVibGljIGxlYWRaZXJvOiBJQ29uZmlnWydsZWFkWmVybyddIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgdHJpZ2dlck9uTWFza0NoYW5nZTogSUNvbmZpZ1sndHJpZ2dlck9uTWFza0NoYW5nZSddIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgYXBtOiBJQ29uZmlnWydhcG0nXSB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KCkgcHVibGljIGlucHV0VHJhbnNmb3JtRm46IElDb25maWdbJ2lucHV0VHJhbnNmb3JtRm4nXSB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KCkgcHVibGljIG91dHB1dFRyYW5zZm9ybUZuOiBJQ29uZmlnWydvdXRwdXRUcmFuc2Zvcm1GbiddIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMga2VlcENoYXJhY3RlclBvc2l0aW9uczogSUNvbmZpZ1sna2VlcENoYXJhY3RlclBvc2l0aW9ucyddIHwgbnVsbCA9IG51bGw7XG5cbiAgICBAT3V0cHV0KCkgcHVibGljIG1hc2tGaWxsZWQ6IElDb25maWdbJ21hc2tGaWxsZWQnXSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHByaXZhdGUgX21hc2tWYWx1ZSA9ICcnO1xuXG4gICAgcHJpdmF0ZSBfaW5wdXRWYWx1ZSE6IHN0cmluZztcblxuICAgIHByaXZhdGUgX3Bvc2l0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgX2NvZGUhOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9tYXNrRXhwcmVzc2lvbkFycmF5OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfanVzdFBhc3RlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfaXNGb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvKipGb3IgSU1FIGNvbXBvc2l0aW9uIGV2ZW50ICovXG4gICAgcHJpdmF0ZSBfaXNDb21wb3NpbmcgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgcHVibGljIF9tYXNrU2VydmljZSA9IGluamVjdChOZ3hNYXNrU2VydmljZSwgeyBzZWxmOiB0cnVlIH0pO1xuXG4gICAgcHJvdGVjdGVkIF9jb25maWcgPSBpbmplY3Q8SUNvbmZpZz4oTkdYX01BU0tfQ09ORklHKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHVibGljIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cbiAgICBwdWJsaWMgb25Ub3VjaCA9ICgpID0+IHt9O1xuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbWFza0V4cHJlc3Npb24sXG4gICAgICAgICAgICBzcGVjaWFsQ2hhcmFjdGVycyxcbiAgICAgICAgICAgIHBhdHRlcm5zLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgc3VmZml4LFxuICAgICAgICAgICAgdGhvdXNhbmRTZXBhcmF0b3IsXG4gICAgICAgICAgICBkZWNpbWFsTWFya2VyLFxuICAgICAgICAgICAgZHJvcFNwZWNpYWxDaGFyYWN0ZXJzLFxuICAgICAgICAgICAgaGlkZGVuSW5wdXQsXG4gICAgICAgICAgICBzaG93TWFza1R5cGVkLFxuICAgICAgICAgICAgcGxhY2VIb2xkZXJDaGFyYWN0ZXIsXG4gICAgICAgICAgICBzaG93bk1hc2tFeHByZXNzaW9uLFxuICAgICAgICAgICAgc2hvd1RlbXBsYXRlLFxuICAgICAgICAgICAgY2xlYXJJZk5vdE1hdGNoLFxuICAgICAgICAgICAgdmFsaWRhdGlvbixcbiAgICAgICAgICAgIHNlcGFyYXRvckxpbWl0LFxuICAgICAgICAgICAgYWxsb3dOZWdhdGl2ZU51bWJlcnMsXG4gICAgICAgICAgICBsZWFkWmVyb0RhdGVUaW1lLFxuICAgICAgICAgICAgbGVhZFplcm8sXG4gICAgICAgICAgICB0cmlnZ2VyT25NYXNrQ2hhbmdlLFxuICAgICAgICAgICAgYXBtLFxuICAgICAgICAgICAgaW5wdXRUcmFuc2Zvcm1GbixcbiAgICAgICAgICAgIG91dHB1dFRyYW5zZm9ybUZuLFxuICAgICAgICAgICAga2VlcENoYXJhY3RlclBvc2l0aW9ucyxcbiAgICAgICAgfSA9IGNoYW5nZXM7XG4gICAgICAgIGlmIChtYXNrRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG1hc2tFeHByZXNzaW9uLmN1cnJlbnRWYWx1ZSAhPT0gbWFza0V4cHJlc3Npb24ucHJldmlvdXNWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICFtYXNrRXhwcmVzc2lvbi5maXJzdENoYW5nZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG1hc2tFeHByZXNzaW9uLmN1cnJlbnRWYWx1ZSAmJlxuICAgICAgICAgICAgICAgIG1hc2tFeHByZXNzaW9uLmN1cnJlbnRWYWx1ZS5zcGxpdChNYXNrRXhwcmVzc2lvbi5PUikubGVuZ3RoID4gMVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza0V4cHJlc3Npb25BcnJheSA9IG1hc2tFeHByZXNzaW9uLmN1cnJlbnRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoTWFza0V4cHJlc3Npb24uT1IpXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KChhOiBzdHJpbmcsIGI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubGVuZ3RoIC0gYi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldE1hc2soKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza0V4cHJlc3Npb25BcnJheSA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2tWYWx1ZSA9IG1hc2tFeHByZXNzaW9uLmN1cnJlbnRWYWx1ZSB8fCBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkc7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0V4cHJlc3Npb24gPSB0aGlzLl9tYXNrVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNwZWNpYWxDaGFyYWN0ZXJzKSB7XG4gICAgICAgICAgICBpZiAoIXNwZWNpYWxDaGFyYWN0ZXJzLmN1cnJlbnRWYWx1ZSB8fCAhQXJyYXkuaXNBcnJheShzcGVjaWFsQ2hhcmFjdGVycy5jdXJyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5zcGVjaWFsQ2hhcmFjdGVycyA9IHNwZWNpYWxDaGFyYWN0ZXJzLmN1cnJlbnRWYWx1ZSB8fCBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dOZWdhdGl2ZU51bWJlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmFsbG93TmVnYXRpdmVOdW1iZXJzID0gYWxsb3dOZWdhdGl2ZU51bWJlcnMuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2tTZXJ2aWNlLmFsbG93TmVnYXRpdmVOdW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2Uuc3BlY2lhbENoYXJhY3RlcnMgPSB0aGlzLl9tYXNrU2VydmljZS5zcGVjaWFsQ2hhcmFjdGVycy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChjOiBzdHJpbmcpID0+IGMgIT09IE1hc2tFeHByZXNzaW9uLk1JTlVTXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBPbmx5IG92ZXJ3cml0ZSB0aGUgbWFzayBhdmFpbGFibGUgcGF0dGVybnMgaWYgYSBwYXR0ZXJuIGhhcyBhY3R1YWxseSBiZWVuIHBhc3NlZCBpblxuICAgICAgICBpZiAocGF0dGVybnMgJiYgcGF0dGVybnMuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5wYXR0ZXJucyA9IHBhdHRlcm5zLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXBtICYmIGFwbS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmFwbSA9IGFwbS5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UucHJlZml4ID0gcHJlZml4LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3VmZml4KSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5zdWZmaXggPSBzdWZmaXguY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aG91c2FuZFNlcGFyYXRvcikge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UudGhvdXNhbmRTZXBhcmF0b3IgPSB0aG91c2FuZFNlcGFyYXRvci5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlY2ltYWxNYXJrZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmRlY2ltYWxNYXJrZXIgPSBkZWNpbWFsTWFya2VyLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZHJvcFNwZWNpYWxDaGFyYWN0ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5kcm9wU3BlY2lhbENoYXJhY3RlcnMgPSBkcm9wU3BlY2lhbENoYXJhY3RlcnMuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoaWRkZW5JbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuaGlkZGVuSW5wdXQgPSBoaWRkZW5JbnB1dC5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnNob3dNYXNrVHlwZWQgPSBzaG93TWFza1R5cGVkLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzaG93TWFza1R5cGVkLnByZXZpb3VzVmFsdWUgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgc2hvd01hc2tUeXBlZC5jdXJyZW50VmFsdWUgPT09IHRydWUgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0ZvY3VzZWRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLl9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlSG9sZGVyQ2hhcmFjdGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5wbGFjZUhvbGRlckNoYXJhY3RlciA9IHBsYWNlSG9sZGVyQ2hhcmFjdGVyLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvd25NYXNrRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2Uuc2hvd25NYXNrRXhwcmVzc2lvbiA9IHNob3duTWFza0V4cHJlc3Npb24uY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG93VGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnNob3dUZW1wbGF0ZSA9IHNob3dUZW1wbGF0ZS5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsZWFySWZOb3RNYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuY2xlYXJJZk5vdE1hdGNoID0gY2xlYXJJZk5vdE1hdGNoLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsaWRhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UudmFsaWRhdGlvbiA9IHZhbGlkYXRpb24uY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JMaW1pdCkge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2Uuc2VwYXJhdG9yTGltaXQgPSBzZXBhcmF0b3JMaW1pdC5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlYWRaZXJvRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmxlYWRaZXJvRGF0ZVRpbWUgPSBsZWFkWmVyb0RhdGVUaW1lLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVhZFplcm8pIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmxlYWRaZXJvID0gbGVhZFplcm8uY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmlnZ2VyT25NYXNrQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS50cmlnZ2VyT25NYXNrQ2hhbmdlID0gdHJpZ2dlck9uTWFza0NoYW5nZS5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0VHJhbnNmb3JtRm4pIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmlucHV0VHJhbnNmb3JtRm4gPSBpbnB1dFRyYW5zZm9ybUZuLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3V0cHV0VHJhbnNmb3JtRm4pIHtcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm91dHB1dFRyYW5zZm9ybUZuID0gb3V0cHV0VHJhbnNmb3JtRm4uY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZWVwQ2hhcmFjdGVyUG9zaXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5rZWVwQ2hhcmFjdGVyUG9zaXRpb25zID0ga2VlcENoYXJhY3RlclBvc2l0aW9ucy5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYXBwbHlNYXNrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKHsgdmFsdWUgfTogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5fbWFza1NlcnZpY2UudmFsaWRhdGlvbiB8fCAhdGhpcy5fbWFza1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fbWFza1NlcnZpY2UuaXBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVZhbGlkYXRpb25FcnJvcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21hc2tTZXJ2aWNlLmNwZkNucGpFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVZhbGlkYXRpb25FcnJvcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21hc2tWYWx1ZS5zdGFydHNXaXRoKE1hc2tFeHByZXNzaW9uLlNFUEFSQVRPUikpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3aXRob3V0VmFsaWRhdGlvbi5pbmNsdWRlcyh0aGlzLl9tYXNrVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fbWFza1NlcnZpY2UuY2xlYXJJZk5vdE1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGltZU1hc2tzLmluY2x1ZGVzKHRoaXMuX21hc2tWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZVRpbWUodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICAgIGxldCBjb3VudGVyT2ZPcHQgPSAwO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1ZhbHVlLmluY2x1ZGVzKE1hc2tFeHByZXNzaW9uLkNVUkxZX0JSQUNLRVRTX0xFRlQpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1ZhbHVlLmluY2x1ZGVzKE1hc2tFeHByZXNzaW9uLkNVUkxZX0JSQUNLRVRTX1JJR0hUKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoSW5zaWRlQ3VybHlCcmFja2V0cyA9IHRoaXMuX21hc2tWYWx1ZS5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1ZhbHVlLmluZGV4T2YoTWFza0V4cHJlc3Npb24uQ1VSTFlfQlJBQ0tFVFNfTEVGVCkgKyAxLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihNYXNrRXhwcmVzc2lvbi5DVVJMWV9CUkFDS0VUU19SSUdIVClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlbmd0aEluc2lkZUN1cmx5QnJhY2tldHMgPT09IFN0cmluZyh2YWx1ZS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2NyZWF0ZVZhbGlkYXRpb25FcnJvcih2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFza1ZhbHVlLnN0YXJ0c1dpdGgoTWFza0V4cHJlc3Npb24uUEVSQ0VOVCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX21hc2tTZXJ2aWNlLnBhdHRlcm5zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX21hc2tTZXJ2aWNlLnBhdHRlcm5zW2tleV0/Lm9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihrZXkpICE9PSB0aGlzLl9tYXNrVmFsdWUubGFzdEluZGV4T2Yoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0OiBzdHJpbmcgPSB0aGlzLl9tYXNrVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGk6IHN0cmluZykgPT4gaSA9PT0ga2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyT2ZPcHQgKz0gb3B0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlck9mT3B0Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1ZhbHVlLmluZGV4T2Yoa2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID49IHRoaXMuX21hc2tWYWx1ZS5pbmRleE9mKGtleSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlck9mT3B0ID09PSB0aGlzLl9tYXNrVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAodGhpcy5fbWFza1ZhbHVlLmluZGV4T2YoTWFza0V4cHJlc3Npb24uU1lNQk9MX1NUQVIpID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS50b1N0cmluZygpLmxlbmd0aCA8XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihNYXNrRXhwcmVzc2lvbi5TWU1CT0xfU1RBUikpIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuX21hc2tWYWx1ZS5pbmRleE9mKE1hc2tFeHByZXNzaW9uLlNZTUJPTF9RVUVTVElPTikgPiAxICYmXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoIDxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tWYWx1ZS5pbmRleE9mKE1hc2tFeHByZXNzaW9uLlNZTUJPTF9RVUVTVElPTikpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlVmFsaWRhdGlvbkVycm9yKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihNYXNrRXhwcmVzc2lvbi5TWU1CT0xfU1RBUikgPT09IC0xIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1ZhbHVlLmluZGV4T2YoTWFza0V4cHJlc3Npb24uU1lNQk9MX1FVRVNUSU9OKSA9PT0gLTFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IFN0cmluZyh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheSA9IHRoaXMuX21hc2tWYWx1ZS5zcGxpdCgnKicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aDogbnVtYmVyID0gdGhpcy5fbWFza1NlcnZpY2UuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5fbWFza1ZhbHVlLmxlbmd0aCAtXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuY2hlY2tEcm9wU3BlY2lhbENoYXJBbW91bnQodGhpcy5fbWFza1ZhbHVlKSAtXG4gICAgICAgICAgICAgICAgICAgICAgY291bnRlck9mT3B0XG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5wcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX21hc2tWYWx1ZS5sZW5ndGggKyB0aGlzLnByZWZpeC5sZW5ndGggLSBjb3VudGVyT2ZPcHRcbiAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX21hc2tWYWx1ZS5sZW5ndGggLSBjb3VudGVyT2ZPcHQ7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50b1N0cmluZygpLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVZhbGlkYXRpb25FcnJvcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4QXJyYXkgPSBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEluZGV4QXJyYXkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKGxhc3RJbmRleEFycmF5WzBdIGFzIHN0cmluZykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyh2YWx1ZSkuaW5jbHVkZXMobGFzdEluZGV4QXJyYXlbMF0gPz8gJycpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnNcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGVjaWFsID0gdmFsdWUuc3BsaXQobGFzdEluZGV4QXJyYXlbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWxbc3BlY2lhbC5sZW5ndGggLSAxXS5sZW5ndGggPT09IGxhc3RJbmRleEFycmF5Lmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2NyZWF0ZVZhbGlkYXRpb25FcnJvcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGxhc3RJbmRleEFycmF5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuX21hc2tTZXJ2aWNlLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0SW5kZXhBcnJheVswXSBhcyBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFsYXN0SW5kZXhBcnJheSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmRyb3BTcGVjaWFsQ2hhcmFjdGVycykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA+PSBsZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlVmFsaWRhdGlvbkVycm9yKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihNYXNrRXhwcmVzc2lvbi5TWU1CT0xfU1RBUikgPT09IDEgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUuaW5kZXhPZihNYXNrRXhwcmVzc2lvbi5TWU1CT0xfUVVFU1RJT04pID09PSAxXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubWFza0ZpbGxlZC5lbWl0KCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdwYXN0ZScpXG4gICAgcHVibGljIG9uUGFzdGUoKSB7XG4gICAgICAgIHRoaXMuX2p1c3RQYXN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJywgWyckZXZlbnQnXSkgcHVibGljIG9uRm9jdXMoKSB7XG4gICAgICAgIHRoaXMuX2lzRm9jdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbmdNb2RlbENoYW5nZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uTW9kZWxDaGFuZ2UodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgfCBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gb24gZm9ybSByZXNldCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYWN0dWFsVmFsdWVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHZhbHVlID09PSBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUgPSB0aGlzLl9tYXNrU2VydmljZS5nZXRBY3R1YWxWYWx1ZShcbiAgICAgICAgICAgICAgICBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdpbnB1dCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uSW5wdXQoZTogQ3VzdG9tS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyBJZiBJTUUgaXMgY29tcG9zaW5nIHRleHQsIHdlIHdhaXQgZm9yIHRoZSBjb21wb3NlZCB0ZXh0LlxuICAgICAgICBpZiAodGhpcy5faXNDb21wb3NpbmcpIHJldHVybjtcbiAgICAgICAgY29uc3QgZWw6IEhUTUxJbnB1dEVsZW1lbnQgPSBlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fbWFza1NlcnZpY2UuaW5wdXRUcmFuc2Zvcm1GbihlbC52YWx1ZSk7XG4gICAgICAgIGlmIChlbC50eXBlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lZFZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHJhbnNmb3JtZWRWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBlbC52YWx1ZSA9IHRyYW5zZm9ybWVkVmFsdWUudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0VmFsdWUgPSBlbC52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRNYXNrKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX21hc2tWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGVsLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbjogbnVtYmVyID1cbiAgICAgICAgICAgICAgICAgICAgZWwuc2VsZWN0aW9uU3RhcnQgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgKyB0aGlzLl9tYXNrU2VydmljZS5wcmVmaXgubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChlbC5zZWxlY3Rpb25TdGFydCBhcyBudW1iZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNYXNrVHlwZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5rZWVwQ2hhcmFjdGVyUG9zaXRpb25zICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnBsYWNlSG9sZGVyQ2hhcmFjdGVyLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFN5bWJvbCA9IGVsLnZhbHVlLnNsaWNlKHBvc2l0aW9uIC0gMSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXhMZW5ndGggPSB0aGlzLnByZWZpeC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrU3ltYm9sczogYm9vbGVhbiA9IHRoaXMuX21hc2tTZXJ2aWNlLl9jaGVja1N5bWJvbE1hc2soXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFN5bWJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uW3Bvc2l0aW9uIC0gMSAtIHByZWZpeExlbmd0aF0gPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkdcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja1NwZWNpYWxDaGFyYWN0ZXI6IGJvb2xlYW4gPSB0aGlzLl9tYXNrU2VydmljZS5fY2hlY2tTeW1ib2xNYXNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTeW1ib2wsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvbltwb3NpdGlvbiArIDEgLSBwcmVmaXhMZW5ndGhdID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdFJhbmdlQmFja3NwYWNlOiBib29sZWFuID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnNlbFN0YXJ0ID09PSB0aGlzLl9tYXNrU2VydmljZS5zZWxFbmQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbFN0YXJ0ID0gTnVtYmVyKHRoaXMuX21hc2tTZXJ2aWNlLnNlbFN0YXJ0KSAtIHByZWZpeExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsRW5kID0gTnVtYmVyKHRoaXMuX21hc2tTZXJ2aWNlLnNlbEVuZCkgLSBwcmVmaXhMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvZGUgPT09IE1hc2tFeHByZXNzaW9uLkJBQ0tTUEFDRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RSYW5nZUJhY2tzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrU2VydmljZS5zZWxTdGFydCA9PT0gcHJlZml4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlID0gYCR7dGhpcy5wcmVmaXh9JHt0aGlzLl9tYXNrU2VydmljZS5tYXNrSXNTaG93bi5zbGljZSgwLCBzZWxFbmQpfSR7dGhpcy5faW5wdXRWYWx1ZS5zcGxpdCh0aGlzLnByZWZpeCkuam9pbignJyl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5zZWxTdGFydCA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0lzU2hvd24ubGVuZ3RoICsgcHJlZml4TGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlID0gYCR7dGhpcy5faW5wdXRWYWx1ZX0ke3RoaXMuX21hc2tTZXJ2aWNlLm1hc2tJc1Nob3duLnNsaWNlKHNlbFN0YXJ0LCBzZWxFbmQpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUgPSBgJHt0aGlzLnByZWZpeH0ke3RoaXMuX2lucHV0VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCh0aGlzLnByZWZpeClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsU3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9JHt0aGlzLl9tYXNrU2VydmljZS5tYXNrSXNTaG93bi5zbGljZShzZWxTdGFydCwgc2VsRW5kKX0ke3RoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsRW5kICsgcHJlZml4TGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0lzU2hvd24ubGVuZ3RoICsgcHJlZml4TGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9JHt0aGlzLnN1ZmZpeH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuX21hc2tTZXJ2aWNlLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvbi5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIC0gdGhpcy5wcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKyAxIC0gdGhpcy5wcmVmaXgubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0UmFuZ2VCYWNrc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxTdGFydCA9PT0gMSAmJiB0aGlzLnByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hY3R1YWxWYWx1ZSA9IGAke3RoaXMucHJlZml4fSR7dGhpcy5fbWFza1NlcnZpY2UucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHtlbC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHRoaXMucHJlZml4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQodGhpcy5zdWZmaXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignJyl9JHt0aGlzLnN1ZmZpeH1gO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQxID0gZWwudmFsdWUuc3Vic3RyaW5nKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydDIgPSBlbC52YWx1ZS5zdWJzdHJpbmcocG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hY3R1YWxWYWx1ZSA9IGAke3BhcnQxfSR7dGhpcy5fbWFza1NlcnZpY2UucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHtwYXJ0Mn1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29kZSAhPT0gTWFza0V4cHJlc3Npb24uQkFDS1NQQUNFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrU3ltYm9scyAmJiAhY2hlY2tTcGVjaWFsQ2hhcmFjdGVyICYmIHNlbGVjdFJhbmdlQmFja3NwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBOdW1iZXIoZWwuc2VsZWN0aW9uU3RhcnQpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2Uuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLnZhbHVlLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrU3BlY2lhbENoYXJhY3RlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLl9tYXNrU2VydmljZS5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwudmFsdWUuc2xpY2UocG9zaXRpb24gKyAxLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUgPSBgJHtlbC52YWx1ZS5zbGljZSgwLCBwb3NpdGlvbiAtIDEpfSR7ZWwudmFsdWUuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgMSl9JHtpbnB1dFN5bWJvbH0ke2VsLnZhbHVlLnNsaWNlKHBvc2l0aW9uICsgMil9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hlY2tTeW1ib2xzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnZhbHVlLmxlbmd0aCA9PT0gMSAmJiBwb3NpdGlvbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hY3R1YWxWYWx1ZSA9IGAke3RoaXMucHJlZml4fSR7aW5wdXRTeW1ib2x9JHt0aGlzLl9tYXNrU2VydmljZS5tYXNrSXNTaG93bi5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrSXNTaG93bi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX0ke3RoaXMuc3VmZml4fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUgPSBgJHtlbC52YWx1ZS5zbGljZSgwLCBwb3NpdGlvbiAtIDEpfSR7aW5wdXRTeW1ib2x9JHtlbC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKHBvc2l0aW9uICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCh0aGlzLnN1ZmZpeClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcnKX0ke3RoaXMuc3VmZml4fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWZpeCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLnZhbHVlLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIC0gcHJlZml4TGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuX2NoZWNrU3ltYm9sTWFzayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uW3Bvc2l0aW9uIC0gMSAtIHByZWZpeExlbmd0aF0gPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklOR1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlID0gYCR7dGhpcy5wcmVmaXh9JHtlbC52YWx1ZX0ke3RoaXMuX21hc2tTZXJ2aWNlLm1hc2tJc1Nob3duLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrSXNTaG93bi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfSR7dGhpcy5zdWZmaXh9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBjYXJldFNoaWZ0ID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgYmFja3NwYWNlU2hpZnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29kZSA9PT0gTWFza0V4cHJlc3Npb24uREVMRVRFICYmIE1hc2tFeHByZXNzaW9uLlNFUEFSQVRPUikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5kZWxldGVkU3BlY2lhbENoYXJhY3RlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRWYWx1ZS5sZW5ndGggPj0gdGhpcy5fbWFza1NlcnZpY2UubWFza0V4cHJlc3Npb24ubGVuZ3RoIC0gMSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb2RlICE9PSBNYXNrRXhwcmVzc2lvbi5CQUNLU1BBQ0UgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0V4cHJlc3Npb24gPT09IE1hc2tFeHByZXNzaW9uLkRBWVNfTU9OVEhTX1lFQVJTICYmXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIDwgMTBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRTeW1ib2wgPSB0aGlzLl9pbnB1dFZhbHVlLnNsaWNlKHBvc2l0aW9uIC0gMSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dFZhbHVlLnNsaWNlKDAsIHBvc2l0aW9uIC0gMSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTeW1ib2wgK1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRWYWx1ZS5zbGljZShwb3NpdGlvbiArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uID09PSBNYXNrRXhwcmVzc2lvbi5EQVlTX01PTlRIU19ZRUFSUyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlYWRaZXJvRGF0ZVRpbWVcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uIDwgMyAmJiBOdW1iZXIoZWwudmFsdWUpID4gMzEgJiYgTnVtYmVyKGVsLnZhbHVlKSA8IDQwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uID09PSA1ICYmIE51bWJlcihlbC52YWx1ZS5zbGljZSgzLCA1KSkgPiAxMilcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uID09PSBNYXNrRXhwcmVzc2lvbi5IT1VSU19NSU5VVEVTX1NFQ09ORFMgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcG1cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2p1c3RQYXN0ZWQgJiYgZWwudmFsdWUuc2xpY2UoMCwgMikgPT09IE1hc2tFeHByZXNzaW9uLkRPVUJMRV9aRVJPKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZSA9IGVsLnZhbHVlLnNsaWNlKDEsIDIpICsgZWwudmFsdWUuc2xpY2UoMiwgZWwudmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZSA9PT0gTWFza0V4cHJlc3Npb24uRE9VQkxFX1pFUk9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1hc2tFeHByZXNzaW9uLk5VTUJFUl9aRVJPXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlbC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hcHBseVZhbHVlQ2hhbmdlcyhcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2p1c3RQYXN0ZWQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvZGUgPT09IE1hc2tFeHByZXNzaW9uLkJBQ0tTUEFDRSB8fCB0aGlzLl9jb2RlID09PSBNYXNrRXhwcmVzc2lvbi5ERUxFVEUsXG4gICAgICAgICAgICAgICAgICAgIChzaGlmdDogbnVtYmVyLCBfYmFja3NwYWNlU2hpZnQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2p1c3RQYXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0U2hpZnQgPSBzaGlmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tzcGFjZVNoaWZ0ID0gX2JhY2tzcGFjZVNoaWZ0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAvLyBvbmx5IHNldCB0aGUgc2VsZWN0aW9uIGlmIHRoZSBlbGVtZW50IGlzIGFjdGl2ZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9nZXRBY3RpdmVFbGVtZW50KCkgIT09IGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWFza1NlcnZpY2UucGx1c09uZVBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5wbHVzT25lUG9zaXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHBvc2l0aW9uIGFmdGVyIGFwcGx5VmFsdWVDaGFuZ2VzIHRvIHByZXZlbnQgY3Vyc29yIG9uIHdyb25nIHBvc2l0aW9uIHdoZW4gaXQgaGFzIGFuIGFycmF5IG9mIG1hc2tFeHByZXNzaW9uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX21hc2tFeHByZXNzaW9uQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQmFja1NwYWNlSW5TcGVjaWFsQ2hhcmFjdGVyc1Bvc2l0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvZGUgPT09IE1hc2tFeHByZXNzaW9uLkJBQ0tTUEFDRSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZS5zbGljZShwb3NpdGlvbiwgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQmFja1NwYWNlSW5TcGVjaWFsQ2hhcmFjdGVyc1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5zZWxlY3Rpb25TdGFydCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChlbC5zZWxlY3Rpb25TdGFydCBhcyBudW1iZXIpICsgdGhpcy5fbWFza1NlcnZpY2UucHJlZml4Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChlbC5zZWxlY3Rpb25TdGFydCBhcyBudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gPT09IDEgJiYgdGhpcy5faW5wdXRWYWx1ZS5sZW5ndGggPT09IDEgPyBudWxsIDogdGhpcy5fcG9zaXRpb247XG4gICAgICAgICAgICAgICAgbGV0IHBvc2l0aW9uVG9BcHBseTogbnVtYmVyID0gdGhpcy5fcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9pbnB1dFZhbHVlLmxlbmd0aCArIHBvc2l0aW9uICsgY2FyZXRTaGlmdFxuICAgICAgICAgICAgICAgICAgICA6IHBvc2l0aW9uICtcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5fY29kZSA9PT0gTWFza0V4cHJlc3Npb24uQkFDS1NQQUNFICYmICFiYWNrc3BhY2VTaGlmdCA/IDAgOiBjYXJldFNoaWZ0KTtcbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb25Ub0FwcGx5ID4gdGhpcy5fZ2V0QWN0dWFsSW5wdXRMZW5ndGgoKSkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblRvQXBwbHkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZWwudmFsdWUgPT09IHRoaXMuX21hc2tTZXJ2aWNlLmRlY2ltYWxNYXJrZXIgJiYgZWwudmFsdWUubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9nZXRBY3R1YWxJbnB1dExlbmd0aCgpICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZ2V0QWN0dWFsSW5wdXRMZW5ndGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uVG9BcHBseSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25Ub0FwcGx5ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UocG9zaXRpb25Ub0FwcGx5LCBwb3NpdGlvblRvQXBwbHkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAnTmd4LW1hc2sgd3JpdGVWYWx1ZSB3b3JrIHdpdGggc3RyaW5nIHwgbnVtYmVyLCB5b3VyIGN1cnJlbnQgdmFsdWU6JyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRyYW5zZm9ybWVkVmFsdWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXNrVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGVsLnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hcHBseVZhbHVlQ2hhbmdlcyhcbiAgICAgICAgICAgICAgICBlbC52YWx1ZS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgdGhpcy5fanVzdFBhc3RlZCxcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2RlID09PSBNYXNrRXhwcmVzc2lvbi5CQUNLU1BBQ0UgfHwgdGhpcy5fY29kZSA9PT0gTWFza0V4cHJlc3Npb24uREVMRVRFXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSU1FIHN0YXJ0c1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkNvbXBvc2l0aW9uU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzQ29tcG9zaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJTUUgY29tcGxldGVzXG4gICAgQEhvc3RMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkNvbXBvc2l0aW9uRW5kKGU6IEN1c3RvbUtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fanVzdFBhc3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub25JbnB1dChlKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25CbHVyKGU6IEN1c3RvbUtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX21hc2tWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZWw6IEhUTUxJbnB1dEVsZW1lbnQgPSBlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHRoaXMubGVhZFplcm8gJiYgZWwudmFsdWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdGhpcy5kZWNpbWFsTWFya2VyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hc2tFeHByZXNzaW9uID0gdGhpcy5fbWFza1NlcnZpY2UubWFza0V4cHJlc3Npb247XG4gICAgICAgICAgICAgICAgY29uc3QgcHJlY2lzaW9uID0gTnVtYmVyKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvbi5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tFeHByZXNzaW9uLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrRXhwcmVzc2lvbi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHByZWNpc2lvbiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZWwudmFsdWUgPSB0aGlzLnN1ZmZpeCA/IGVsLnZhbHVlLnNwbGl0KHRoaXMuc3VmZml4KS5qb2luKCcnKSA6IGVsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWNpbWFsUGFydCA9IGVsLnZhbHVlLnNwbGl0KHRoaXMuZGVjaW1hbE1hcmtlcilbMV0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZSA9IGVsLnZhbHVlLmluY2x1ZGVzKHRoaXMuZGVjaW1hbE1hcmtlcilcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZWwudmFsdWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBNYXNrRXhwcmVzc2lvbi5OVU1CRVJfWkVSTy5yZXBlYXQocHJlY2lzaW9uIC0gZGVjaW1hbFBhcnQubGVuZ3RoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICA6IGVsLnZhbHVlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNpbWFsTWFya2VyICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgTWFza0V4cHJlc3Npb24uTlVNQkVSX1pFUk8ucmVwZWF0KHByZWNpc2lvbikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1ZmZpeDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUgPSBlbC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5jbGVhcklmTm90TWF0Y2hGbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uQ2xpY2soZTogTW91c2VFdmVudCB8IEN1c3RvbUtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tYXNrVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsOiBIVE1MSW5wdXRFbGVtZW50ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgY29uc3QgcG9zU3RhcnQgPSAwO1xuICAgICAgICBjb25zdCBwb3NFbmQgPSAwO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGVsICE9PSBudWxsICYmXG4gICAgICAgICAgICBlbC5zZWxlY3Rpb25TdGFydCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgZWwuc2VsZWN0aW9uU3RhcnQgPT09IGVsLnNlbGVjdGlvbkVuZCAmJlxuICAgICAgICAgICAgZWwuc2VsZWN0aW9uU3RhcnQgPiB0aGlzLl9tYXNrU2VydmljZS5wcmVmaXgubGVuZ3RoICYmXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIChlIGFzIGFueSkua2V5Q29kZSAhPT0gMzhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFza1NlcnZpY2Uuc2hvd01hc2tUeXBlZCAmJiAhdGhpcy5rZWVwQ2hhcmFjdGVyUG9zaXRpb25zKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHNob3dpbmcgdGhlIG1hc2sgaW4gdGhlIGlucHV0XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0lzU2hvd24gPSB0aGlzLl9tYXNrU2VydmljZS5zaG93TWFza0luSW5wdXQoKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnByZWZpeCArIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tJc1Nob3duID09PSBlbC52YWx1ZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgaW5wdXQgT05MWSBjb250YWlucyB0aGUgbWFzaywgc28gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgZWwuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UocG9zU3RhcnQsIHBvc0VuZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGlucHV0IGNvbnRhaW5zIHNvbWUgY2hhcmFjdGVycyBhbHJlYWR5XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5zZWxlY3Rpb25TdGFydCA+IHRoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHVzZXIgY2xpY2tlZCBiZXlvbmQgb3VyIHZhbHVlJ3MgbGVuZ3RoLCBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBlbmQgb2Ygb3VyIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hY3R1YWxWYWx1ZS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYWN0dWFsVmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZTogc3RyaW5nIHwgbnVsbCA9XG4gICAgICAgICAgICBlbCAmJlxuICAgICAgICAgICAgKGVsLnZhbHVlID09PSB0aGlzLl9tYXNrU2VydmljZS5wcmVmaXhcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21hc2tTZXJ2aWNlLnByZWZpeCArIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tJc1Nob3duXG4gICAgICAgICAgICAgICAgOiBlbC52YWx1ZSk7XG5cbiAgICAgICAgLyoqIEZpeCBvZiBjdXJzb3IgcG9zaXRpb24ganVtcGluZyB0byBlbmQgaW4gbW9zdCBicm93c2VycyBubyBtYXR0ZXIgd2hlcmUgY3Vyc29yIGlzIGluc2VydGVkIG9uRm9jdXMgKi9cbiAgICAgICAgaWYgKGVsICYmIGVsLnZhbHVlICE9PSBuZXh0VmFsdWUpIHtcbiAgICAgICAgICAgIGVsLnZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8qKiBmaXggb2YgY3Vyc29yIHBvc2l0aW9uIHdpdGggcHJlZml4IHdoZW4gbW91c2UgY2xpY2sgb2NjdXIgKi9cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZWwgJiZcbiAgICAgICAgICAgIGVsLnR5cGUgIT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAoKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgfHwgKGVsLnNlbGVjdGlvbkVuZCBhcyBudW1iZXIpKSA8PVxuICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnByZWZpeC5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBlbC5zZWxlY3Rpb25TdGFydCA9IHRoaXMuX21hc2tTZXJ2aWNlLnByZWZpeC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLyoqIHNlbGVjdCBvbmx5IGluc2VydGVkIHRleHQgKi9cbiAgICAgICAgaWYgKGVsICYmIChlbC5zZWxlY3Rpb25FbmQgYXMgbnVtYmVyKSA+IHRoaXMuX2dldEFjdHVhbElucHV0TGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIGVsLnNlbGVjdGlvbkVuZCA9IHRoaXMuX2dldEFjdHVhbElucHV0TGVuZ3RoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlEb3duKGU6IEN1c3RvbUtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tYXNrVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pc0NvbXBvc2luZykge1xuICAgICAgICAgICAgLy8gVXNlciBmaW5hbGl6ZSB0aGVpciBjaG9pY2UgZnJvbSBJTUUgY29tcG9zaXRpb24sIHNvIHRyaWdnZXIgb25JbnB1dCgpIGZvciB0aGUgY29tcG9zZWQgdGV4dC5cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykgdGhpcy5vbkNvbXBvc2l0aW9uRW5kKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29kZSA9IGUuY29kZSA/IGUuY29kZSA6IGUua2V5O1xuICAgICAgICBjb25zdCBlbDogSFRNTElucHV0RWxlbWVudCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX2lucHV0VmFsdWUgPSBlbC52YWx1ZTtcbiAgICAgICAgdGhpcy5fc2V0TWFzaygpO1xuXG4gICAgICAgIGlmIChlbC50eXBlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKGUua2V5ID09PSBNYXNrRXhwcmVzc2lvbi5BUlJPV19VUCkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlLmtleSA9PT0gTWFza0V4cHJlc3Npb24uQVJST1dfTEVGVCB8fFxuICAgICAgICAgICAgICAgIGUua2V5ID09PSBNYXNrRXhwcmVzc2lvbi5CQUNLU1BBQ0UgfHxcbiAgICAgICAgICAgICAgICBlLmtleSA9PT0gTWFza0V4cHJlc3Npb24uREVMRVRFXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09IE1hc2tFeHByZXNzaW9uLkJBQ0tTUEFDRSAmJiBlbC52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuc2VsZWN0aW9uU3RhcnQgPSBlbC5zZWxlY3Rpb25FbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gTWFza0V4cHJlc3Npb24uQkFDS1NQQUNFICYmIChlbC5zZWxlY3Rpb25TdGFydCBhcyBudW1iZXIpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHNwZWNpYWxDaGFycyBpcyBmYWxzZSwgKHNob3VsZG4ndCBldmVyIGhhcHBlbikgdGhlbiBzZXQgdG8gdGhlIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BlY2lhbENoYXJhY3RlcnMgPSB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzPy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5zcGVjaWFsQ2hhcmFjdGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9jb25maWcuc3BlY2lhbENoYXJhY3RlcnM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlZml4Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChlbC5zZWxlY3Rpb25TdGFydCBhcyBudW1iZXIpIDw9IHRoaXMucHJlZml4Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKHRoaXMucHJlZml4Lmxlbmd0aCwgZWwuc2VsZWN0aW9uRW5kKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dFZhbHVlLmxlbmd0aCAhPT0gKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWwuc2VsZWN0aW9uU3RhcnQgYXMgbnVtYmVyKSAhPT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0VmFsdWVbKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgLSAxXSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklOR1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh0aGlzLnByZWZpeC5sZW5ndGggPj0gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgPiB0aGlzLnByZWZpeC5sZW5ndGgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWZpeC5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwuc2VsZWN0aW9uRW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tTZWxlY3Rpb25PbkRlbGV0aW9uKGVsKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnByZWZpeC5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcikgPD0gdGhpcy5fbWFza1NlcnZpY2UucHJlZml4Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAoZWwuc2VsZWN0aW9uRW5kIGFzIG51bWJlcikgPD0gdGhpcy5fbWFza1NlcnZpY2UucHJlZml4Lmxlbmd0aFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclN0YXJ0OiBudW1iZXIgfCBudWxsID0gZWwuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBlLmtleSA9PT0gTWFza0V4cHJlc3Npb24uQkFDS1NQQUNFICYmXG4gICAgICAgICAgICAgICAgICAgICFlbC5yZWFkT25seSAmJlxuICAgICAgICAgICAgICAgICAgICBjdXJzb3JTdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBlbC5zZWxlY3Rpb25FbmQgPT09IGVsLnZhbHVlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZS5sZW5ndGggIT09IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gPSB0aGlzLl9tYXNrU2VydmljZS5wcmVmaXggPyB0aGlzLl9tYXNrU2VydmljZS5wcmVmaXgubGVuZ3RoIDogMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYXBwbHlNYXNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UucHJlZml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhIXRoaXMuc3VmZml4ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zdWZmaXgubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0VmFsdWUubGVuZ3RoIC0gdGhpcy5zdWZmaXgubGVuZ3RoIDwgKGVsLnNlbGVjdGlvblN0YXJ0IGFzIG51bWJlcilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dFZhbHVlLmxlbmd0aCAtIHRoaXMuc3VmZml4Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRWYWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAoZS5jb2RlID09PSAnS2V5QScgJiYgZS5jdHJsS2V5KSB8fFxuICAgICAgICAgICAgICAgIChlLmNvZGUgPT09ICdLZXlBJyAmJiBlLm1ldGFLZXkpIC8vIENtZCArIEEgKE1hYylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKDAsIHRoaXMuX2dldEFjdHVhbElucHV0TGVuZ3RoKCkpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnNlbFN0YXJ0ID0gZWwuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5zZWxFbmQgPSBlbC5zZWxlY3Rpb25FbmQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSXQgd3JpdGVzIHRoZSB2YWx1ZSBpbiB0aGUgaW5wdXQgKi9cbiAgICBwdWJsaWMgYXN5bmMgd3JpdGVWYWx1ZShjb250cm9sVmFsdWU6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb250cm9sVmFsdWUgPT09ICdvYmplY3QnICYmIGNvbnRyb2xWYWx1ZSAhPT0gbnVsbCAmJiAndmFsdWUnIGluIGNvbnRyb2xWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKCdkaXNhYmxlJyBpbiBjb250cm9sVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERpc2FibGVkU3RhdGUoQm9vbGVhbihjb250cm9sVmFsdWUuZGlzYWJsZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBjb250cm9sVmFsdWUgPSBjb250cm9sVmFsdWUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRyb2xWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBjb250cm9sVmFsdWUgPSB0aGlzLmlucHV0VHJhbnNmb3JtRm5cbiAgICAgICAgICAgICAgICA/IHRoaXMuaW5wdXRUcmFuc2Zvcm1Gbihjb250cm9sVmFsdWUpXG4gICAgICAgICAgICAgICAgOiBjb250cm9sVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgY29udHJvbFZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgdHlwZW9mIGNvbnRyb2xWYWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIGNvbnRyb2xWYWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgY29udHJvbFZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbFZhbHVlID09PSBudWxsIHx8IGNvbnRyb2xWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2xWYWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5fY3VycmVudFZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuX3ByZXZpb3VzVmFsdWUgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlucHV0VmFsdWU6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSBjb250cm9sVmFsdWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdHlwZW9mIGlucHV0VmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1ZhbHVlLnN0YXJ0c1dpdGgoTWFza0V4cHJlc3Npb24uU0VQQVJBVE9SKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IFN0cmluZyhpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbGVEZWNpbWFsTWFya2VyID0gdGhpcy5fbWFza1NlcnZpY2UuY3VycmVudExvY2FsZURlY2ltYWxNYXJrZXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fbWFza1NlcnZpY2UuZGVjaW1hbE1hcmtlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5kZWNpbWFsTWFya2VyICE9PSBsb2NhbGVEZWNpbWFsTWFya2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpbnB1dFZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRGVjaW1hbE1hcmtlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5kZWNpbWFsTWFya2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubGVhZFplcm8gJiZcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hc2tFeHByZXNzaW9uICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzICE9PSBmYWxzZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gdGhpcy5fbWFza1NlcnZpY2UuX2NoZWNrUHJlY2lzaW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UubWFza0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlIGFzIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjaW1hbE1hcmtlciA9PT0gTWFza0V4cHJlc3Npb24uQ09NTUEgfHxcbiAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkodGhpcy5fbWFza1NlcnZpY2UuZGVjaW1hbE1hcmtlcikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3IgPT09IE1hc2tFeHByZXNzaW9uLkRPVClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IGlucHV0VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShNYXNrRXhwcmVzc2lvbi5ET1QsIE1hc2tFeHByZXNzaW9uLkNPTU1BKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWFza0V4cHJlc3Npb24/LnN0YXJ0c1dpdGgoTWFza0V4cHJlc3Npb24uU0VQQVJBVE9SKSAmJiB0aGlzLmxlYWRaZXJvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hcHBseU1hc2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZT8udG9TdHJpbmcoKSA/PyAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmlzTnVtYmVyVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9pbnB1dFZhbHVlID0gaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NldE1hc2soKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChpbnB1dFZhbHVlICYmIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvbiAmJlxuICAgICAgICAgICAgICAgICAgICAodGhpcy5fbWFza1NlcnZpY2UucHJlZml4IHx8IHRoaXMuX21hc2tTZXJ2aWNlLnNob3dNYXNrVHlwZWQpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBzZXJ2aWNlIHdlIGtub3cgd2UgYXJlIHdyaXRpbmcgdmFsdWUgc28gdGhhdCB0cmlnZ2VyaW5nIG9uQ2hhbmdlIGZ1bmN0aW9uIHdvbid0IGhhcHBlbiBkdXJpbmcgYXBwbHlNYXNrXG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuaW5wdXRUcmFuc2Zvcm1GbiAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICA/ICh0aGlzLl9tYXNrU2VydmljZS53cml0aW5nVmFsdWUgPSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICA6ICcnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuZm9ybUVsZW1lbnRQcm9wZXJ0eSA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYXBwbHlNYXNrKGlucHV0VmFsdWUsIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uKSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIC8vIExldCB0aGUgc2VydmljZSBrbm93IHdlJ3ZlIGZpbmlzaGVkIHdyaXRpbmcgdmFsdWVcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5pbnB1dFRyYW5zZm9ybUZuICE9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgID8gKHRoaXMuX21hc2tTZXJ2aWNlLndyaXRpbmdWYWx1ZSA9IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5mb3JtRWxlbWVudFByb3BlcnR5ID0gWyd2YWx1ZScsIGlucHV0VmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5faW5wdXRWYWx1ZSA9IGlucHV0VmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgJ05neC1tYXNrIHdyaXRlVmFsdWUgd29yayB3aXRoIHN0cmluZyB8IG51bWJlciwgeW91ciBjdXJyZW50IHZhbHVlOicsXG4gICAgICAgICAgICAgICAgdHlwZW9mIGNvbnRyb2xWYWx1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiB0eXBlb2YgdGhpcy5vbkNoYW5nZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IHR5cGVvZiB0aGlzLm9uVG91Y2gpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoID0gZm47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0QWN0aXZlRWxlbWVudChkb2N1bWVudDogRG9jdW1lbnRPclNoYWRvd1Jvb3QgPSB0aGlzLmRvY3VtZW50KTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBzaGFkb3dSb290RWwgPSBkb2N1bWVudD8uYWN0aXZlRWxlbWVudD8uc2hhZG93Um9vdDtcbiAgICAgICAgaWYgKCFzaGFkb3dSb290RWw/LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoc2hhZG93Um9vdEVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja1NlbGVjdGlvbk9uRGVsZXRpb24oZWw6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgZWwuc2VsZWN0aW9uU3RhcnQgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIE1hdGgubWF4KHRoaXMucHJlZml4Lmxlbmd0aCwgZWwuc2VsZWN0aW9uU3RhcnQgYXMgbnVtYmVyKSxcbiAgICAgICAgICAgIHRoaXMuX2lucHV0VmFsdWUubGVuZ3RoIC0gdGhpcy5zdWZmaXgubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICAgIGVsLnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKFxuICAgICAgICAgICAgTWF0aC5tYXgodGhpcy5wcmVmaXgubGVuZ3RoLCBlbC5zZWxlY3Rpb25FbmQgYXMgbnVtYmVyKSxcbiAgICAgICAgICAgIHRoaXMuX2lucHV0VmFsdWUubGVuZ3RoIC0gdGhpcy5zdWZmaXgubGVuZ3RoXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEl0IGRpc2FibGVzIHRoZSBpbnB1dCBlbGVtZW50ICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5mb3JtRWxlbWVudFByb3BlcnR5ID0gWydkaXNhYmxlZCcsIGlzRGlzYWJsZWRdO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHJpdmF0ZSBfYXBwbHlNYXNrKCk6IGFueSB7XG4gICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uID0gdGhpcy5fbWFza1NlcnZpY2UuX3JlcGVhdFBhdHRlcm5TeW1ib2xzKFxuICAgICAgICAgICAgdGhpcy5fbWFza1ZhbHVlIHx8ICcnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmZvcm1FbGVtZW50UHJvcGVydHkgPSBbXG4gICAgICAgICAgICAndmFsdWUnLFxuICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UuYXBwbHlNYXNrKHRoaXMuX2lucHV0VmFsdWUsIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF92YWxpZGF0ZVRpbWUodmFsdWU6IHN0cmluZyk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgcm93TWFza0xlbjogbnVtYmVyID0gdGhpcy5fbWFza1ZhbHVlXG4gICAgICAgICAgICAuc3BsaXQoTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKVxuICAgICAgICAgICAgLmZpbHRlcigoczogc3RyaW5nKSA9PiBzICE9PSAnOicpLmxlbmd0aDtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIERvbid0IHZhbGlkYXRlIGVtcHR5IHZhbHVlcyB0byBhbGxvdyBmb3Igb3B0aW9uYWwgZm9ybSBjb250cm9sXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoKyh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSA/PyAtMSkgPT09IDAgJiYgdmFsdWUubGVuZ3RoIDwgcm93TWFza0xlbikgfHxcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA8PSByb3dNYXNrTGVuIC0gMlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVWYWxpZGF0aW9uRXJyb3IodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0QWN0dWFsSW5wdXRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5hY3R1YWxWYWx1ZS5sZW5ndGggfHxcbiAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLmFjdHVhbFZhbHVlLmxlbmd0aCArIHRoaXMuX21hc2tTZXJ2aWNlLnByZWZpeC5sZW5ndGhcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVWYWxpZGF0aW9uRXJyb3IoYWN0dWFsVmFsdWU6IHN0cmluZyk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWFzazoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkTWFzazogdGhpcy5fbWFza1ZhbHVlLFxuICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRNYXNrKCkge1xuICAgICAgICB0aGlzLl9tYXNrRXhwcmVzc2lvbkFycmF5LnNvbWUoKG1hc2spOiBib29sZWFuIHwgdm9pZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsQ2hhcnQ6IGJvb2xlYW4gPSBtYXNrXG4gICAgICAgICAgICAgICAgLnNwbGl0KE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORylcbiAgICAgICAgICAgICAgICAuc29tZSgoY2hhcikgPT4gdGhpcy5fbWFza1NlcnZpY2Uuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoY2hhcikpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKHNwZWNpYWxDaGFydCAmJiB0aGlzLl9pbnB1dFZhbHVlICYmICFtYXNrLmluY2x1ZGVzKE1hc2tFeHByZXNzaW9uLkxFVFRFUl9TKSkgfHxcbiAgICAgICAgICAgICAgICBtYXNrLmluY2x1ZGVzKE1hc2tFeHByZXNzaW9uLkNVUkxZX0JSQUNLRVRTX0xFRlQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza1NlcnZpY2UucmVtb3ZlTWFzayh0aGlzLl9pbnB1dFZhbHVlKT8ubGVuZ3RoIDw9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLnJlbW92ZU1hc2sobWFzayk/Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAodGVzdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrVmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXNrRXhwcmVzc2lvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzay5pbmNsdWRlcyhNYXNrRXhwcmVzc2lvbi5DVVJMWV9CUkFDS0VUU19MRUZUKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX21hc2tTZXJ2aWNlLl9yZXBlYXRQYXR0ZXJuU3ltYm9scyhtYXNrKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1hc2s7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFza0V4cHJlc3Npb25BcnJheVt0aGlzLl9tYXNrRXhwcmVzc2lvbkFycmF5Lmxlbmd0aCAtIDFdID8/XG4gICAgICAgICAgICAgICAgICAgICAgICBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hc2tFeHByZXNzaW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tTZXJ2aWNlLm1hc2tFeHByZXNzaW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uLmluY2x1ZGVzKE1hc2tFeHByZXNzaW9uLkNVUkxZX0JSQUNLRVRTX0xFRlQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5fbWFza1NlcnZpY2UuX3JlcGVhdFBhdHRlcm5TeW1ib2xzKGV4cHJlc3Npb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZXhwcmVzc2lvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrOiBib29sZWFuID0gdGhpcy5fbWFza1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLnJlbW92ZU1hc2sodGhpcy5faW5wdXRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgPy5zcGxpdChNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpXG4gICAgICAgICAgICAgICAgICAgIC5ldmVyeSgoY2hhcmFjdGVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhNYXNrID0gbWFzay5jaGFyQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2tTZXJ2aWNlLl9jaGVja1N5bWJvbE1hc2soY2hhcmFjdGVyLCBpbmRleE1hc2spO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGVjayB8fCB0aGlzLl9qdXN0UGFzdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tWYWx1ZSA9IHRoaXMubWFza0V4cHJlc3Npb24gPSB0aGlzLl9tYXNrU2VydmljZS5tYXNrRXhwcmVzc2lvbiA9IG1hc2s7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==