igniteui-angular 12.3.24 → 12.3.25

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.
@@ -163,10 +163,12 @@ export class IgxDateTimeEditorDirective extends IgxMaskDirective {
163
163
  return this.maskParser.applyMask(null, this.maskOptions);
164
164
  }
165
165
  get targetDatePart() {
166
- var _a;
167
- if (this.document.activeElement === this.nativeElement) {
168
- return (_a = this._inputDateParts
169
- .find(p => p.start <= this.selectionStart && this.selectionStart <= p.end && p.type !== DatePart.Literal)) === null || _a === void 0 ? void 0 : _a.type;
166
+ var _a, _b, _c;
167
+ // V.K. May 16th, 2022 #11557 Get correct date part in shadow DOM
168
+ if (this.document.activeElement === this.nativeElement ||
169
+ ((_b = (_a = this.document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement) === this.nativeElement) {
170
+ return (_c = this._inputDateParts
171
+ .find(p => p.start <= this.selectionStart && this.selectionStart <= p.end && p.type !== DatePart.Literal)) === null || _c === void 0 ? void 0 : _c.type;
170
172
  }
171
173
  else {
172
174
  if (this._inputDateParts.some(p => p.type === DatePart.Date)) {
@@ -655,4 +657,4 @@ IgxDateTimeEditorModule.decorators = [
655
657
  exports: [IgxDateTimeEditorDirective]
656
658
  },] }
657
659
  ];
658
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLWVkaXRvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZGlyZWN0aXZlcy9kYXRlLXRpbWUtZWRpdG9yL2RhdGUtdGltZS1lZGl0b3IuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQzVCLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQ2pELFNBQVMsRUFBNEIsWUFBWSxFQUNsRCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRXlDLGFBQWEsRUFBRSxpQkFBaUIsR0FDL0UsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQTRDLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXJFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFTSCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsZ0JBQWdCO0lBMk45RCxZQUNZLFFBQW1CLEVBQ25CLFVBQXNCLEVBQ3RCLFVBQThCLEVBQzlCLFFBQXNCLEVBQ04sU0FBYyxFQUNiLE9BQVk7UUFDdkMsS0FBSyxDQUFDLFVBQVUs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LEVBQUUsSUFBSSxFQUFFO2lCQUNqRjthQUNGOzs7WUFuREMsU0FBUztZQURTLFVBQVU7WUFVckIsa0JBQWtCO1lBQ1YsWUFBWTs0Q0EwUXhCLE1BQU0sU0FBQyxRQUFROzRDQUNmLE1BQU0sU0FBQyxTQUFTOzs7cUJBbE5sQixLQUFLO3VCQWtCTCxLQUFLO3VCQXFCTCxLQUFLO3VCQWNMLEtBQUs7NEJBWUwsS0FBSzswQkFXTCxLQUFLLFNBQUMsbUJBQW1CO29CQW9CekIsS0FBSzt3QkFxQkwsS0FBSzswQkFXTCxNQUFNOytCQVdOLE1BQU07c0JBNkVOLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBaWVuQyxNQUFNLE9BQU8sdUJBQXVCOzs7WUFKbkMsUUFBUSxTQUFDO2dCQUNSLFlBQVksRUFBRSxDQUFDLDBCQUEwQixDQUFDO2dCQUMxQyxPQUFPLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQzthQUN0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1jb25mbGljdGluZy1saWZlY3ljbGUgKi9cbmltcG9ydCB7XG4gIERpcmVjdGl2ZSwgSW5wdXQsIEVsZW1lbnRSZWYsXG4gIFJlbmRlcmVyMiwgTmdNb2R1bGUsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsXG4gIExPQ0FMRV9JRCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBIb3N0TGlzdGVuZXIsIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBWYWxpZGF0b3IsIEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElneE1hc2tEaXJlY3RpdmUgfSBmcm9tICcuLi9tYXNrL21hc2suZGlyZWN0aXZlJztcbmltcG9ydCB7IE1hc2tQYXJzaW5nU2VydmljZSB9IGZyb20gJy4uL21hc2svbWFzay1wYXJzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNEYXRlLCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneERhdGVUaW1lRWRpdG9yRXZlbnRBcmdzLCBEYXRlUGFydEluZm8sIERhdGVQYXJ0IH0gZnJvbSAnLi9kYXRlLXRpbWUtZWRpdG9yLmNvbW1vbic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXRlUGFydERlbHRhcyB9IGZyb20gJy4vZGF0ZS10aW1lLWVkaXRvci5jb21tb24nO1xuaW1wb3J0IHsgRGF0ZVRpbWVVdGlsIH0gZnJvbSAnLi4vLi4vZGF0ZS1jb21tb24vdXRpbC9kYXRlLXRpbWUudXRpbCc7XG5cbi8qKlxuICogRGF0ZSBUaW1lIEVkaXRvciBwcm92aWRlcyBhIGZ1bmN0aW9uYWxpdHkgdG8gaW5wdXQsIGVkaXQgYW5kIGZvcm1hdCBkYXRlIGFuZCB0aW1lLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4RGF0ZVRpbWVFZGl0b3JNb2R1bGVcbiAqXG4gKiBAaWd4UGFyZW50IElneElucHV0R3JvdXBcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWlucHV0LXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIGRhdGUsIHRpbWUsIGVkaXRvclxuICpcbiAqIEBpZ3hHcm91cCBTY2hlZHVsaW5nXG4gKlxuICogQHJlbWFya3NcbiAqXG4gKiBUaGUgSWduaXRlIFVJIERhdGUgVGltZSBFZGl0b3IgRGlyZWN0aXZlIG1ha2VzIGl0IGVhc3kgZm9yIGRldmVsb3BlcnMgdG8gbWFuaXB1bGF0ZSBkYXRlL3RpbWUgdXNlciBpbnB1dC5cbiAqIEl0IHJlcXVpcmVzIGlucHV0IGluIGEgc3BlY2lmaWVkIG9yIGRlZmF1bHQgaW5wdXQgZm9ybWF0IHdoaWNoIGlzIHZpc2libGUgaW4gdGhlIGlucHV0IGVsZW1lbnQgYXMgYSBwbGFjZWhvbGRlci5cbiAqIEl0IGFsbG93cyB0aGUgaW5wdXQgb2Ygb25seSBkYXRlIChleDogJ2RkL01NL3l5eXknKSwgb25seSB0aW1lIChleDonSEg6bW0gdHQnKSBvciBib3RoIGF0IG9uY2UsIGlmIG5lZWRlZC5cbiAqIFN1cHBvcnRzIGRpc3BsYXkgZm9ybWF0IHRoYXQgbWF5IGRpZmZlciBmcm9tIHRoZSBpbnB1dCBmb3JtYXQuXG4gKiBQcm92aWRlcyBtZXRob2RzIHRvIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGFueSBzcGVjaWZpYy90YXJnZXRlZCBgRGF0ZVBhcnRgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LWlucHV0LWdyb3VwPlxuICogICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZ3hJbnB1dCBbaWd4RGF0ZVRpbWVFZGl0b3JdPVwiJ2RkL01NL3l5eXknXCIgW2Rpc3BsYXlGb3JtYXRdPVwiJ3Nob3J0RGF0ZSdcIiBbKG5nTW9kZWwpXT1cImRhdGVcIi8+XG4gKiA8L2lneC1pbnB1dC1ncm91cD5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbaWd4RGF0ZVRpbWVFZGl0b3JdJyxcbiAgZXhwb3J0QXM6ICdpZ3hEYXRlVGltZUVkaXRvcicsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBJZ3hEYXRlVGltZUVkaXRvckRpcmVjdGl2ZSwgbXVsdGk6IHRydWUgfSxcbiAgICB7IHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBJZ3hEYXRlVGltZUVkaXRvckRpcmVjdGl2ZSwgbXVsdGk6IHRydWUgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlIGV4dGVuZHMgSWd4TWFza0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBWYWxpZGF0b3IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgLyoqXG4gICAqIExvY2FsZSBzZXR0aW5ncyB1c2VkIGZvciB2YWx1ZSBmb3JtYXR0aW5nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVc2VzIEFuZ3VsYXIncyBgTE9DQUxFX0lEYCBieSBkZWZhdWx0LiBBZmZlY3RzIGJvdGggaW5wdXQgbWFzayBhbmQgZGlzcGxheSBmb3JtYXQgaWYgdGhvc2UgYXJlIG5vdCBzZXQuXG4gICAqIElmIGEgYGxvY2FsZWAgaXMgc2V0LCBpdCBtdXN0IGJlIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3RlckxvY2FsZURhdGFgLlxuICAgKiBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL2kxOG4jaTE4bi1waXBlcy5cbiAgICogSWYgaXQgaXMgbm90IHJlZ2lzdGVyZWQsIGBJbnRsYCB3aWxsIGJlIHVzZWQgZm9yIGZvcm1hdHRpbmcuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGh0bWxcbiAgICogPGlucHV0IGlneERhdGVUaW1lRWRpdG9yIFtsb2NhbGVdPVwiJ2VuJ1wiPlxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2NhbGU6IHN0cmluZztcblxuICAvKipcbiAgICogTWluaW11bSB2YWx1ZSByZXF1aXJlZCBmb3IgdGhlIGVkaXRvciB0byByZW1haW4gdmFsaWQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIGEgYHN0cmluZ2AgdmFsdWUgaXMgcGFzc2VkLCBpdCBtdXN0IGJlIGluIHRoZSBkZWZpbmVkIGlucHV0IGZvcm1hdC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgaHRtbFxuICAgKiA8aW5wdXQgaWd4RGF0ZVRpbWVFZGl0b3IgW21pblZhbHVlXT1cIm1pbkRhdGVcIj5cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pblZhbHVlKCk6IHN0cmluZyB8IERhdGUge1xuICAgIHJldHVybiB0aGlzLl9taW5WYWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWluVmFsdWUodmFsdWU6IHN0cmluZyB8IERhdGUpIHtcbiAgICB0aGlzLl9taW5WYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHZhbHVlIHJlcXVpcmVkIGZvciB0aGUgZWRpdG9yIHRvIHJlbWFpbiB2YWxpZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgYSBgc3RyaW5nYCB2YWx1ZSBpcyBwYXNzZWQgaW4sIGl0IG11c3QgYmUgaW4gdGhlIGRlZmluZWQgaW5wdXQgZm9ybWF0LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBodG1sXG4gICAqIDxpbnB1dCBpZ3hEYXRlVGltZUVkaXRvciBbbWF4VmFsdWVdPVwibWF4RGF0ZVwiPlxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4VmFsdWUoKTogc3RyaW5nIHwgRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX21heFZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSkge1xuICAgIHRoaXMuX21heFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgaWYgdGhlIGN1cnJlbnRseSBzcHVuIGRhdGUgc2VnbWVudCBzaG91bGQgbG9vcCBvdmVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBodG1sXG4gICAqIDxpbnB1dCBpZ3hEYXRlVGltZUVkaXRvciBbc3Bpbkxvb3BdPVwiZmFsc2VcIj5cbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3Bpbkxvb3AgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTZXQgYm90aCBwcmUtZGVmaW5lZCBmb3JtYXQgb3B0aW9ucyBzdWNoIGFzIGBzaG9ydERhdGVgIGFuZCBgbG9uZ0RhdGVgLFxuICAgKiBhcyB3ZWxsIGFzIGNvbnN0cnVjdGVkIGZvcm1hdCBzdHJpbmcgdXNpbmcgY2hhcmFjdGVycyBzdXBwb3J0ZWQgYnkgYERhdGVQaXBlYCwgZS5nLiBgRUUvTU0veXl5eWAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGh0bWxcbiAgICogPGlucHV0IGlneERhdGVUaW1lRWRpdG9yIFtkaXNwbGF5Rm9ybWF0XT1cIidzaG9ydERhdGUnXCI+XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRpc3BsYXlGb3JtYXQ6IHN0cmluZztcblxuICAvKipcbiAgICogRXhwZWN0ZWQgdXNlciBpbnB1dCBmb3JtYXQgKGFuZCBwbGFjZWhvbGRlcikuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGh0bWxcbiAgICogPGlucHV0IFtpZ3hEYXRlVGltZUVkaXRvcl09XCInZGQvTU0veXl5eSdcIj5cbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoYGlneERhdGVUaW1lRWRpdG9yYClcbiAgcHVibGljIHNldCBpbnB1dEZvcm1hdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnNldE1hc2sodmFsdWUpO1xuICAgICAgdGhpcy5faW5wdXRGb3JtYXQgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlucHV0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0Rm9ybWF0IHx8IHRoaXMuX2RlZmF1bHRJbnB1dEZvcm1hdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0b3IgdmFsdWUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGh0bWxcbiAgICogPGlucHV0IGlneERhdGVUaW1lRWRpdG9yIFt2YWx1ZV09XCJkYXRlXCI+XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5zZXREYXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVNYXNrKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWx0YSB2YWx1ZXMgdXNlZCB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGVhY2ggZWRpdG9yIGRhdGUgcGFydCBvbiBzcGluIGFjdGlvbnMuXG4gICAqIEFsbCB2YWx1ZXMgZGVmYXVsdCB0byBgMWAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGh0bWxcbiAgICogPGlucHV0IGlneERhdGVUaW1lRWRpdG9yIFtzcGluRGVsdGFdPVwie2RhdGU6IDUsIG1pbnV0ZTogMzB9XCI+XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNwaW5EZWx0YTogRGF0ZVBhcnREZWx0YXM7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgZWRpdG9yJ3MgdmFsdWUgaGFzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGh0bWxcbiAgICogPGlucHV0IGlneERhdGVUaW1lRWRpdG9yICh2YWx1ZUNoYW5nZSk9XCJ2YWx1ZUNoYW5nZSgkZXZlbnQpXCIvPlxuICAgKiBgYGBcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgZWRpdG9yIGlzIG5vdCB3aXRoaW4gYSBzcGVjaWZpZWQgcmFuZ2Ugb3Igd2hlbiB0aGUgZWRpdG9yJ3MgdmFsdWUgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgaHRtbFxuICAgKiA8aW5wdXQgaWd4RGF0ZVRpbWVFZGl0b3IgW21pblZhbHVlXT1cIm1pbkRhdGVcIiBbbWF4VmFsdWVdPVwibWF4RGF0ZVwiICh2YWxpZGF0aW9uRmFpbGVkKT1cIm9uVmFsaWRhdGlvbkZhaWxlZCgkZXZlbnQpXCIvPlxuICAgKiBgYGBcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgdmFsaWRhdGlvbkZhaWxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4RGF0ZVRpbWVFZGl0b3JFdmVudEFyZ3M+KCk7XG5cbiAgcHJpdmF0ZSBfaW5wdXRGb3JtYXQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfb2xkVmFsdWU6IERhdGU7XG4gIHByaXZhdGUgX2RhdGVWYWx1ZTogRGF0ZTtcbiAgcHJpdmF0ZSBfb25DbGVhcjogYm9vbGVhbjtcbiAgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQ7XG4gIHByaXZhdGUgX2lzRm9jdXNlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGVmYXVsdElucHV0Rm9ybWF0OiBzdHJpbmc7XG4gIHByaXZhdGUgX3ZhbHVlOiBEYXRlIHwgc3RyaW5nO1xuICBwcml2YXRlIF9taW5WYWx1ZTogRGF0ZSB8IHN0cmluZztcbiAgcHJpdmF0ZSBfbWF4VmFsdWU6IERhdGUgfCBzdHJpbmc7XG4gIHByaXZhdGUgX2lucHV0RGF0ZVBhcnRzOiBEYXRlUGFydEluZm9bXTtcbiAgcHJpdmF0ZSBfZGF0ZVBhcnREZWx0YXM6IERhdGVQYXJ0RGVsdGFzID0ge1xuICAgIGRhdGU6IDEsXG4gICAgbW9udGg6IDEsXG4gICAgeWVhcjogMSxcbiAgICBob3VyczogMSxcbiAgICBtaW51dGVzOiAxLFxuICAgIHNlY29uZHM6IDFcbiAgfTtcbiAgcHJpdmF0ZSBvblRvdWNoQ2FsbGJhY2s6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBvblZhbGlkYXRvckNoYW5nZTogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkID0gbm9vcDtcblxuICBwcml2YXRlIGdldCBkYXRlUGFydERlbHRhcygpOiBEYXRlUGFydERlbHRhcyB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RhdGVQYXJ0RGVsdGFzLCB0aGlzLnNwaW5EZWx0YSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBlbXB0eU1hc2soKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tYXNrUGFyc2VyLmFwcGx5TWFzayhudWxsLCB0aGlzLm1hc2tPcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHRhcmdldERhdGVQYXJ0KCk6IERhdGVQYXJ0IHtcbiAgICBpZiAodGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnB1dERhdGVQYXJ0c1xuICAgICAgICAuZmluZChwID0+IHAuc3RhcnQgPD0gdGhpcy5zZWxlY3Rpb25TdGFydCAmJiB0aGlzLnNlbGVjdGlvblN0YXJ0IDw9IHAuZW5kICYmIHAudHlwZSAhPT0gRGF0ZVBhcnQuTGl0ZXJhbCk/LnR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9pbnB1dERhdGVQYXJ0cy5zb21lKHAgPT4gcC50eXBlID09PSBEYXRlUGFydC5EYXRlKSkge1xuICAgICAgICByZXR1cm4gRGF0ZVBhcnQuRGF0ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faW5wdXREYXRlUGFydHMuc29tZShwID0+IHAudHlwZSA9PT0gRGF0ZVBhcnQuSG91cnMpKSB7XG4gICAgICAgIHJldHVybiBEYXRlUGFydC5Ib3VycztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBoYXNEYXRlUGFydHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0RGF0ZVBhcnRzLnNvbWUoXG4gICAgICBwID0+IHAudHlwZSA9PT0gRGF0ZVBhcnQuRGF0ZVxuICAgICAgICB8fCBwLnR5cGUgPT09IERhdGVQYXJ0Lk1vbnRoXG4gICAgICAgIHx8IHAudHlwZSA9PT0gRGF0ZVBhcnQuWWVhcik7XG4gIH1cblxuICBwcml2YXRlIGdldCBoYXNUaW1lUGFydHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0RGF0ZVBhcnRzLnNvbWUoXG4gICAgICBwID0+IHAudHlwZSA9PT0gRGF0ZVBhcnQuSG91cnNcbiAgICAgICAgfHwgcC50eXBlID09PSBEYXRlUGFydC5NaW51dGVzXG4gICAgICAgIHx8IHAudHlwZSA9PT0gRGF0ZVBhcnQuU2Vjb25kcyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkYXRlVmFsdWUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVWYWx1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByb3RlY3RlZCBtYXNrUGFyc2VyOiBNYXNrUGFyc2luZ1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSxcbiAgICBASW5qZWN0KExPQ0FMRV9JRCkgcHJpdmF0ZSBfbG9jYWxlOiBhbnkpIHtcbiAgICBzdXBlcihlbGVtZW50UmVmLCBtYXNrUGFyc2VyLCByZW5kZXJlciwgcGxhdGZvcm0pO1xuICAgIHRoaXMuZG9jdW1lbnQgPSB0aGlzLl9kb2N1bWVudCBhcyBEb2N1bWVudDtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMubG9jYWxlIHx8IHRoaXMuX2xvY2FsZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3doZWVsJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uV2hlZWwoZXZlbnQ6IFdoZWVsRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzRm9jdXNlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChldmVudC5kZWx0YVkgPiAwKSB7XG4gICAgICB0aGlzLmRlY3JlbWVudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluY3JlbWVudCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZURlZmF1bHRGb3JtYXQoKTtcbiAgICB0aGlzLnNldE1hc2sodGhpcy5pbnB1dEZvcm1hdCk7XG4gICAgdGhpcy51cGRhdGVNYXNrKCk7XG4gIH1cblxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snbG9jYWxlJ10gJiYgIWNoYW5nZXNbJ2xvY2FsZSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnVwZGF0ZURlZmF1bHRGb3JtYXQoKTtcbiAgICAgIGlmICghdGhpcy5faW5wdXRGb3JtYXQpIHtcbiAgICAgICAgdGhpcy5zZXRNYXNrKHRoaXMuaW5wdXRGb3JtYXQpO1xuICAgICAgICB0aGlzLnVwZGF0ZU1hc2soKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2lucHV0Rm9ybWF0J10gJiYgIWNoYW5nZXNbJ2lucHV0Rm9ybWF0J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlTWFzaygpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqIENsZWFyIHRoZSBpbnB1dCBlbGVtZW50IHZhbHVlLiAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5fb25DbGVhciA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVWYWx1ZShudWxsKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKDAsIHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGgpO1xuICAgIHRoaXMuX29uQ2xlYXIgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmNyZW1lbnQgc3BlY2lmaWVkIERhdGVQYXJ0LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0ZVBhcnQgVGhlIG9wdGlvbmFsIERhdGVQYXJ0IHRvIGluY3JlbWVudC4gRGVmYXVsdHMgdG8gRGF0ZSBvciBIb3VycyAod2hlbiBEYXRlIGlzIGFic2VudCBmcm9tIHRoZSBpbnB1dEZvcm1hdCAtIGV4OidISDptbScpLlxuICAgKiBAcGFyYW0gZGVsdGEgVGhlIG9wdGlvbmFsIGRlbHRhIHRvIGluY3JlbWVudCBieS4gT3ZlcnJpZGVzIGBzcGluRGVsdGFgLlxuICAgKi9cbiAgcHVibGljIGluY3JlbWVudChkYXRlUGFydD86IERhdGVQYXJ0LCBkZWx0YT86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldFBhcnQgPSBkYXRlUGFydCB8fCB0aGlzLnRhcmdldERhdGVQYXJ0O1xuICAgIGlmICghdGFyZ2V0UGFydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMudHJ5U3BpblZhbHVlKHRhcmdldFBhcnQsIGRlbHRhKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKG5ld1ZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNyZW1lbnQgc3BlY2lmaWVkIERhdGVQYXJ0LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0ZVBhcnQgVGhlIG9wdGlvbmFsIERhdGVQYXJ0IHRvIGRlY3JlbWVudC4gRGVmYXVsdHMgdG8gRGF0ZSBvciBIb3VycyAod2hlbiBEYXRlIGlzIGFic2VudCBmcm9tIHRoZSBpbnB1dEZvcm1hdCAtIGV4OidISDptbScpLlxuICAgKiBAcGFyYW0gZGVsdGEgVGhlIG9wdGlvbmFsIGRlbHRhIHRvIGRlY3JlbWVudCBieS4gT3ZlcnJpZGVzIGBzcGluRGVsdGFgLlxuICAgKi9cbiAgcHVibGljIGRlY3JlbWVudChkYXRlUGFydD86IERhdGVQYXJ0LCBkZWx0YT86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldFBhcnQgPSBkYXRlUGFydCB8fCB0aGlzLnRhcmdldERhdGVQYXJ0O1xuICAgIGlmICghdGFyZ2V0UGFydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMudHJ5U3BpblZhbHVlKHRhcmdldFBhcnQsIGRlbHRhLCB0cnVlKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKG5ld1ZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnNldERhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVNYXNrKCk7XG4gIH1cblxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBJbnZhbGlkRGF0ZSBoYW5kbGluZ1xuICAgIGlmIChpc0RhdGUoY29udHJvbC52YWx1ZSkgJiYgIURhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZShjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHsgdmFsdWU6IHRydWUgfTtcbiAgICB9XG5cbiAgICBsZXQgZXJyb3JzID0ge307XG4gICAgY29uc3QgdmFsdWUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUoY29udHJvbC52YWx1ZSkgPyBjb250cm9sLnZhbHVlIDogRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZShjb250cm9sLnZhbHVlKTtcbiAgICBjb25zdCBtaW5WYWx1ZURhdGUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5taW5WYWx1ZSkgPyB0aGlzLm1pblZhbHVlIDogdGhpcy5wYXJzZURhdGUodGhpcy5taW5WYWx1ZSk7XG4gICAgY29uc3QgbWF4VmFsdWVEYXRlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKHRoaXMubWF4VmFsdWUpID8gdGhpcy5tYXhWYWx1ZSA6IHRoaXMucGFyc2VEYXRlKHRoaXMubWF4VmFsdWUpO1xuICAgIGlmIChtaW5WYWx1ZURhdGUgfHwgbWF4VmFsdWVEYXRlKSB7XG4gICAgICBlcnJvcnMgPSBEYXRlVGltZVV0aWwudmFsaWRhdGVNaW5NYXgodmFsdWUsXG4gICAgICAgIG1pblZhbHVlRGF0ZSwgbWF4VmFsdWVEYXRlLFxuICAgICAgICB0aGlzLmhhc1RpbWVQYXJ0cywgdGhpcy5oYXNEYXRlUGFydHMpO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA+IDAgPyBlcnJvcnMgOiBudWxsO1xuICB9XG5cbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlPyhmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlPyhfaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQgeyB9XG5cbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gIHB1YmxpYyBvbkNvbXBvc2l0aW9uRW5kKCk6IHZvaWQge1xuICAgIHN1cGVyLm9uQ29tcG9zaXRpb25FbmQoKTtcblxuICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy5wYXJzZURhdGUodGhpcy5pbnB1dFZhbHVlKSk7XG4gICAgdGhpcy51cGRhdGVNYXNrKCk7XG4gIH1cblxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIG9uSW5wdXRDaGFuZ2VkKGV2ZW50KTogdm9pZCB7XG4gICAgc3VwZXIub25JbnB1dENoYW5nZWQoZXZlbnQpO1xuICAgIGlmICh0aGlzLl9jb21wb3NpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbnB1dElzQ29tcGxldGUoKSkge1xuICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IHRoaXMucGFyc2VEYXRlKHRoaXMuaW5wdXRWYWx1ZSk7XG4gICAgICBpZiAoRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKHBhcnNlZERhdGUpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUocGFyc2VkRGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMudmFsdWUgJiYgbmV3IERhdGUodGhpcy5kYXRlVmFsdWUuZ2V0VGltZSgpKTtcbiAgICAgICAgY29uc3QgYXJnczogSWd4RGF0ZVRpbWVFZGl0b3JFdmVudEFyZ3MgPSB7IG9sZFZhbHVlLCBuZXdWYWx1ZTogcGFyc2VkRGF0ZSwgdXNlcklucHV0OiB0aGlzLmlucHV0VmFsdWUgfTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkLmVtaXQoYXJncyk7XG4gICAgICAgIGlmIChEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUoYXJncy5uZXdWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKGFyZ3MubmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3VwZXIub25LZXlEb3duKGV2ZW50KTtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG5cbiAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfRE9XTiB8fCBrZXkgPT09IHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX1VQKSB7XG4gICAgICB0aGlzLnNwaW4oZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jdHJsS2V5ICYmIGtleSA9PT0gdGhpcy5wbGF0Zm9ybS5LRVlNQVAuU0VNSUNPTE9OKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKG5ldyBEYXRlKCkpO1xuICAgIH1cblxuICAgIHRoaXMubW92ZUN1cnNvcihldmVudCk7XG4gIH1cblxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5yZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc0ZvY3VzZWQgPSB0cnVlO1xuICAgIHRoaXMub25Ub3VjaENhbGxiYWNrKCk7XG4gICAgdGhpcy51cGRhdGVNYXNrKCk7XG4gICAgc3VwZXIub25Gb2N1cygpO1xuICB9XG5cbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gIHB1YmxpYyBvbkJsdXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2lzRm9jdXNlZCA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5pbnB1dElzQ29tcGxldGUoKSAmJiB0aGlzLmlucHV0VmFsdWUgIT09IHRoaXMuZW1wdHlNYXNrKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMucGFyc2VEYXRlKHRoaXMuaW5wdXRWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZU1hc2soKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiB0aGluayBvZiBhIGJldHRlciB3YXkgdG8gc2V0IGRpc3BsYXlWYWx1ZVBpcGUgaW4gbWFzayBkaXJlY3RpdmVcbiAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWVQaXBlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIub25CbHVyKHZhbHVlKTtcbiAgfVxuXG4gIC8vIHRoZSBkYXRlIGVkaXRvciBzZXRzIGl0cyBvd24gaW5wdXRGb3JtYXQgYXMgaXRzIHBsYWNlaG9sZGVyIGlmIG5vbmUgaXMgcHJvdmlkZWRcbiAgLyoqIEBoaWRkZW4gKi9cbiAgcHJvdGVjdGVkIHNldFBsYWNlaG9sZGVyKF92YWx1ZTogc3RyaW5nKTogdm9pZCB7IH1cblxuICBwcml2YXRlIHVwZGF0ZURlZmF1bHRGb3JtYXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZGVmYXVsdElucHV0Rm9ybWF0ID0gRGF0ZVRpbWVVdGlsLmdldERlZmF1bHRJbnB1dEZvcm1hdCh0aGlzLmxvY2FsZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1hc2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRm9jdXNlZCkge1xuICAgICAgLy8gc3RvcmUgdGhlIGN1cnNvciBwb3NpdGlvbiBhcyBpdCB3aWxsIGJlIG1vdmVkIGR1cmluZyBtYXNraW5nXG4gICAgICBjb25zdCBjdXJzb3IgPSB0aGlzLnNlbGVjdGlvbkVuZDtcbiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuZ2V0TWFza2VkVmFsdWUoKTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UoY3Vyc29yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmRhdGVWYWx1ZSB8fCAhRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKHRoaXMuZGF0ZVZhbHVlKSkge1xuICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSAnJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGlzcGxheVZhbHVlUGlwZSkge1xuICAgICAgICAvLyBUT0RPOiByZW1vdmUgd2hlbiBmb3JtYXR0ZXIgZnVuYyBoYXMgYmVlbiBkZWxldGVkXG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuZGlzcGxheVZhbHVlUGlwZS50cmFuc2Zvcm0odGhpcy52YWx1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuZGlzcGxheUZvcm1hdCB8fCB0aGlzLmlucHV0Rm9ybWF0O1xuICAgICAgaWYgKGZvcm1hdCkge1xuICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSBEYXRlVGltZVV0aWwuZm9ybWF0RGF0ZSh0aGlzLmRhdGVWYWx1ZSwgZm9ybWF0LnJlcGxhY2UoJ3R0JywgJ2FhJyksIHRoaXMubG9jYWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuZGF0ZVZhbHVlLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRNYXNrKGlucHV0Rm9ybWF0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBvbGRGb3JtYXQgPSB0aGlzLl9pbnB1dERhdGVQYXJ0cz8ubWFwKHAgPT4gcC5mb3JtYXQpLmpvaW4oJycpO1xuICAgIHRoaXMuX2lucHV0RGF0ZVBhcnRzID0gRGF0ZVRpbWVVdGlsLnBhcnNlRGF0ZVRpbWVGb3JtYXQoaW5wdXRGb3JtYXQpO1xuICAgIGlucHV0Rm9ybWF0ID0gdGhpcy5faW5wdXREYXRlUGFydHMubWFwKHAgPT4gcC5mb3JtYXQpLmpvaW4oJycpO1xuICAgIGNvbnN0IG1hc2sgPSAoaW5wdXRGb3JtYXQgfHwgRGF0ZVRpbWVVdGlsLkRFRkFVTFRfSU5QVVRfRk9STUFUKVxuICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cCgvKD89W150XSlbXFx3XS8sICdnJyksICcwJyk7XG4gICAgdGhpcy5tYXNrID0gbWFzay5pbmRleE9mKCd0dCcpICE9PSAtMSA/IG1hc2sucmVwbGFjZShuZXcgUmVnRXhwKCd0dCcsICdnJyksICdMTCcpIDogbWFzaztcblxuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5uYXRpdmVFbGVtZW50LnBsYWNlaG9sZGVyO1xuICAgIGlmICghcGxhY2Vob2xkZXIgfHwgb2xkRm9ybWF0ID09PSBwbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5uYXRpdmVFbGVtZW50LCAncGxhY2Vob2xkZXInLCBpbnB1dEZvcm1hdCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURhdGUodmFsOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBEYXRlVGltZVV0aWwucGFyc2VWYWx1ZUZyb21NYXNrKHZhbCwgdGhpcy5faW5wdXREYXRlUGFydHMsIHRoaXMucHJvbXB0Q2hhcik7XG4gIH1cblxuICBwcml2YXRlIGdldE1hc2tlZFZhbHVlKCk6IHN0cmluZyB7XG4gICAgbGV0IG1hc2sgPSB0aGlzLmVtcHR5TWFzaztcbiAgICBpZiAoRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKHRoaXMudmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgdGhpcy5faW5wdXREYXRlUGFydHMpIHtcbiAgICAgICAgaWYgKHBhcnQudHlwZSA9PT0gRGF0ZVBhcnQuTGl0ZXJhbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGhpcy5nZXRQYXJ0VmFsdWUocGFydCwgcGFydC5mb3JtYXQubGVuZ3RoKTtcbiAgICAgICAgbWFzayA9IHRoaXMubWFza1BhcnNlci5yZXBsYWNlSW5NYXNrKG1hc2ssIHRhcmdldFZhbHVlLCB0aGlzLm1hc2tPcHRpb25zLCBwYXJ0LnN0YXJ0LCBwYXJ0LmVuZCkudmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFzaztcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlucHV0SXNDb21wbGV0ZSgpIHx8ICF0aGlzLl9vbkNsZWFyKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbWFzaztcbiAgfVxuXG5cbiAgcHJpdmF0ZSB2YWx1ZUluUmFuZ2UodmFsdWU6IERhdGUpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGVycm9ycyA9IHt9O1xuICAgIGNvbnN0IG1pblZhbHVlRGF0ZSA9IERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLm1pblZhbHVlKSA/IHRoaXMubWluVmFsdWUgOiB0aGlzLnBhcnNlRGF0ZSh0aGlzLm1pblZhbHVlKTtcbiAgICBjb25zdCBtYXhWYWx1ZURhdGUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5tYXhWYWx1ZSkgPyB0aGlzLm1heFZhbHVlIDogdGhpcy5wYXJzZURhdGUodGhpcy5tYXhWYWx1ZSk7XG4gICAgaWYgKG1pblZhbHVlRGF0ZSB8fCBtYXhWYWx1ZURhdGUpIHtcbiAgICAgIGVycm9ycyA9IERhdGVUaW1lVXRpbC52YWxpZGF0ZU1pbk1heCh2YWx1ZSxcbiAgICAgICAgdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZSxcbiAgICAgICAgdGhpcy5oYXNUaW1lUGFydHMsIHRoaXMuaGFzRGF0ZVBhcnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPT09IDA7XG4gIH1cblxuICBwcml2YXRlIHNwaW5WYWx1ZShkYXRlUGFydDogRGF0ZVBhcnQsIGRlbHRhOiBudW1iZXIpOiBEYXRlIHtcbiAgICBpZiAoIXRoaXMuZGF0ZVZhbHVlIHx8ICFEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5kYXRlVmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZVZhbHVlLmdldFRpbWUoKSk7XG4gICAgc3dpdGNoIChkYXRlUGFydCkge1xuICAgICAgY2FzZSBEYXRlUGFydC5EYXRlOlxuICAgICAgICBEYXRlVGltZVV0aWwuc3BpbkRhdGUoZGVsdGEsIG5ld0RhdGUsIHRoaXMuc3Bpbkxvb3ApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGF0ZVBhcnQuTW9udGg6XG4gICAgICAgIERhdGVUaW1lVXRpbC5zcGluTW9udGgoZGVsdGEsIG5ld0RhdGUsIHRoaXMuc3Bpbkxvb3ApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGF0ZVBhcnQuWWVhcjpcbiAgICAgICAgRGF0ZVRpbWVVdGlsLnNwaW5ZZWFyKGRlbHRhLCBuZXdEYXRlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERhdGVQYXJ0LkhvdXJzOlxuICAgICAgICBEYXRlVGltZVV0aWwuc3BpbkhvdXJzKGRlbHRhLCBuZXdEYXRlLCB0aGlzLnNwaW5Mb29wKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERhdGVQYXJ0Lk1pbnV0ZXM6XG4gICAgICAgIERhdGVUaW1lVXRpbC5zcGluTWludXRlcyhkZWx0YSwgbmV3RGF0ZSwgdGhpcy5zcGluTG9vcCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYXRlUGFydC5TZWNvbmRzOlxuICAgICAgICBEYXRlVGltZVV0aWwuc3BpblNlY29uZHMoZGVsdGEsIG5ld0RhdGUsIHRoaXMuc3Bpbkxvb3ApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGF0ZVBhcnQuQW1QbTpcbiAgICAgICAgY29uc3QgZm9ybWF0UGFydCA9IHRoaXMuX2lucHV0RGF0ZVBhcnRzLmZpbmQoZHAgPT4gZHAudHlwZSA9PT0gRGF0ZVBhcnQuQW1QbSk7XG4gICAgICAgIGNvbnN0IGFtUG1Gcm9tTWFzayA9IHRoaXMuaW5wdXRWYWx1ZS5zdWJzdHJpbmcoZm9ybWF0UGFydC5zdGFydCwgZm9ybWF0UGFydC5lbmQpO1xuICAgICAgICByZXR1cm4gRGF0ZVRpbWVVdGlsLnNwaW5BbVBtKG5ld0RhdGUsIHRoaXMuZGF0ZVZhbHVlLCBhbVBtRnJvbU1hc2spO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdEYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnlTcGluVmFsdWUoZGF0ZVBhcnQ6IERhdGVQYXJ0LCBkZWx0YT86IG51bWJlciwgbmVnYXRpdmUgPSBmYWxzZSk6IERhdGUge1xuICAgIGlmICghZGVsdGEpIHtcbiAgICAgIC8vIGRlZmF1bHQgdG8gMSBpZiBhIGRlbHRhIGlzIHNldCB0byAwIG9yIGFueSBvdGhlciBmYWxzeSB2YWx1ZVxuICAgICAgZGVsdGEgPSB0aGlzLmRhdGVQYXJ0RGVsdGFzW2RhdGVQYXJ0XSB8fCAxO1xuICAgIH1cbiAgICBjb25zdCBzcGluVmFsdWUgPSBuZWdhdGl2ZSA/IC1NYXRoLmFicyhkZWx0YSkgOiBNYXRoLmFicyhkZWx0YSk7XG4gICAgcmV0dXJuIHRoaXMuc3BpblZhbHVlKGRhdGVQYXJ0LCBzcGluVmFsdWUpIHx8IG5ldyBEYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERhdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2RhdGVWYWx1ZSA9IERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh2YWx1ZSlcbiAgICAgID8gdmFsdWVcbiAgICAgIDogRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlKG5ld0RhdGU6IERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLl9vbGRWYWx1ZSA9IHRoaXMuZGF0ZVZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSBuZXdEYXRlO1xuXG4gICAgLy8gVE9ETzogc2hvdWxkIHdlIGVtaXQgZXZlbnRzIGhlcmU/XG4gICAgaWYgKHRoaXMuaW5wdXRJc0NvbXBsZXRlKCkgfHwgdGhpcy5pbnB1dFZhbHVlID09PSB0aGlzLmVtcHR5TWFzaykge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZGF0ZVZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0ZVZhbHVlICYmICF0aGlzLnZhbHVlSW5SYW5nZSh0aGlzLmRhdGVWYWx1ZSkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZC5lbWl0KHsgb2xkVmFsdWU6IHRoaXMuX29sZFZhbHVlLCBuZXdWYWx1ZTogdGhpcy5kYXRlVmFsdWUsIHVzZXJJbnB1dDogdGhpcy5pbnB1dFZhbHVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9Ud2VsdmVIb3VyRm9ybWF0KHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBob3VyID0gcGFyc2VJbnQodmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKHRoaXMucHJvbXB0Q2hhciwgJ2cnKSwgJzAnKSwgMTApO1xuICAgIGlmIChob3VyID4gMTIpIHtcbiAgICAgIGhvdXIgLT0gMTI7XG4gICAgfSBlbHNlIGlmIChob3VyID09PSAwKSB7XG4gICAgICBob3VyID0gMTI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdXI7XG4gIH1cblxuICBwcml2YXRlIGdldFBhcnRWYWx1ZShkYXRlUGFydEluZm86IERhdGVQYXJ0SW5mbywgcGFydExlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgbWFza2VkVmFsdWU7XG4gICAgY29uc3QgZGF0ZVBhcnQgPSBkYXRlUGFydEluZm8udHlwZTtcbiAgICBzd2l0Y2ggKGRhdGVQYXJ0KSB7XG4gICAgICBjYXNlIERhdGVQYXJ0LkRhdGU6XG4gICAgICAgIG1hc2tlZFZhbHVlID0gdGhpcy5kYXRlVmFsdWUuZ2V0RGF0ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGF0ZVBhcnQuTW9udGg6XG4gICAgICAgIC8vIG1vbnRocyBhcmUgemVybyBiYXNlZFxuICAgICAgICBtYXNrZWRWYWx1ZSA9IHRoaXMuZGF0ZVZhbHVlLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGF0ZVBhcnQuWWVhcjpcbiAgICAgICAgaWYgKHBhcnRMZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBtYXNrZWRWYWx1ZSA9IHRoaXMucHJlcGVuZFZhbHVlKFxuICAgICAgICAgICAgcGFyc2VJbnQodGhpcy5kYXRlVmFsdWUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLnNsaWNlKC0yKSwgMTApLCBwYXJ0TGVuZ3RoLCAnMCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hc2tlZFZhbHVlID0gdGhpcy5kYXRlVmFsdWUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGF0ZVBhcnQuSG91cnM6XG4gICAgICAgIGlmIChkYXRlUGFydEluZm8uZm9ybWF0LmluZGV4T2YoJ2gnKSAhPT0gLTEpIHtcbiAgICAgICAgICBtYXNrZWRWYWx1ZSA9IHRoaXMucHJlcGVuZFZhbHVlKFxuICAgICAgICAgICAgdGhpcy50b1R3ZWx2ZUhvdXJGb3JtYXQodGhpcy5kYXRlVmFsdWUuZ2V0SG91cnMoKS50b1N0cmluZygpKSwgcGFydExlbmd0aCwgJzAnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXNrZWRWYWx1ZSA9IHRoaXMuZGF0ZVZhbHVlLmdldEhvdXJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERhdGVQYXJ0Lk1pbnV0ZXM6XG4gICAgICAgIG1hc2tlZFZhbHVlID0gdGhpcy5kYXRlVmFsdWUuZ2V0TWludXRlcygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGF0ZVBhcnQuU2Vjb25kczpcbiAgICAgICAgbWFza2VkVmFsdWUgPSB0aGlzLmRhdGVWYWx1ZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYXRlUGFydC5BbVBtOlxuICAgICAgICBtYXNrZWRWYWx1ZSA9IHRoaXMuZGF0ZVZhbHVlLmdldEhvdXJzKCkgPj0gMTIgPyAnUE0nIDogJ0FNJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVQYXJ0SW5mby50eXBlICE9PSBEYXRlUGFydC5BbVBtKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmVwZW5kVmFsdWUobWFza2VkVmFsdWUsIHBhcnRMZW5ndGgsICcwJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hc2tlZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwZW5kVmFsdWUodmFsdWU6IG51bWJlciwgcGFydExlbmd0aDogbnVtYmVyLCBwcmVwZW5kQ2hhcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHByZXBlbmRDaGFyICsgdmFsdWUudG9TdHJpbmcoKSkuc2xpY2UoLXBhcnRMZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzcGluKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19VUDpcbiAgICAgICAgdGhpcy5pbmNyZW1lbnQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX0RPV046XG4gICAgICAgIHRoaXMuZGVjcmVtZW50KCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5wdXRJc0NvbXBsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlucHV0VmFsdWUuaW5kZXhPZih0aGlzLnByb21wdENoYXIpID09PSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZUN1cnNvcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19MRUZUOlxuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLmdldE5ld1Bvc2l0aW9uKHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX1JJR0hUOlxuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLmdldE5ld1Bvc2l0aW9uKHZhbHVlLCAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIGN1cnNvciBpbiBhIHNwZWNpZmljIGRpcmVjdGlvbiB1bnRpbCBpdCByZWFjaGVzIGEgZGF0ZS90aW1lIHNlcGFyYXRvci5cbiAgICogVGhlbiByZXR1cm4gaXRzIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHN0cmluZyBpdCBvcGVyYXRlcyBvbi5cbiAgICogQHBhcmFtIGRpcmVjdGlvbiAwIGlzIGxlZnQsIDEgaXMgcmlnaHQuIERlZmF1bHQgaXMgMC5cbiAgICovXG4gIHByaXZhdGUgZ2V0TmV3UG9zaXRpb24odmFsdWU6IHN0cmluZywgZGlyZWN0aW9uID0gMCk6IG51bWJlciB7XG4gICAgY29uc3QgbGl0ZXJhbHMgPSB0aGlzLl9pbnB1dERhdGVQYXJ0cy5maWx0ZXIocCA9PiBwLnR5cGUgPT09IERhdGVQYXJ0LkxpdGVyYWwpO1xuICAgIGxldCBjdXJzb3JQb3MgPSB0aGlzLnNlbGVjdGlvblN0YXJ0O1xuICAgIGlmICghZGlyZWN0aW9uKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGN1cnNvclBvcyA9IGN1cnNvclBvcyA+IDAgPyAtLWN1cnNvclBvcyA6IGN1cnNvclBvcztcbiAgICAgIH0gd2hpbGUgKCFsaXRlcmFscy5zb21lKGwgPT4gbC5lbmQgPT09IGN1cnNvclBvcykgJiYgY3Vyc29yUG9zID4gMCk7XG4gICAgICByZXR1cm4gY3Vyc29yUG9zO1xuICAgIH0gZWxzZSB7XG4gICAgICBkbyB7XG4gICAgICAgIGN1cnNvclBvcysrO1xuICAgICAgfSB3aGlsZSAoIWxpdGVyYWxzLnNvbWUobCA9PiBsLnN0YXJ0ID09PSBjdXJzb3JQb3MpICYmIGN1cnNvclBvcyA8IHZhbHVlLmxlbmd0aCk7XG4gICAgICByZXR1cm4gY3Vyc29yUG9zO1xuICAgIH1cbiAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtJZ3hEYXRlVGltZUVkaXRvckRpcmVjdGl2ZV0sXG4gIGV4cG9ydHM6IFtJZ3hEYXRlVGltZUVkaXRvckRpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4RGF0ZVRpbWVFZGl0b3JNb2R1bGUgeyB9XG4iXX0=
660
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLWVkaXRvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZGlyZWN0aXZlcy9kYXRlLXRpbWUtZWRpdG9yL2RhdGUtdGltZS1lZGl0b3IuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQzVCLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQ2pELFNBQVMsRUFBNEIsWUFBWSxFQUNsRCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRXlDLGFBQWEsRUFBRSxpQkFBaUIsR0FDL0UsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQTRDLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXJFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFTSCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsZ0JBQWdCO0lBNk45RCxZQUNZLFFBQW1CLEVBQ25CLFVBQXNCLEVBQ3RCLFVBQThCLEVBQzlCLFFBQXNCLEVBQ04sU0FBYyxFQUNiLE9BQVk7UUFDdkMsS0FBSyxDQUFDLFVBQVUs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LFdBQVcsRUFBRSwwQkFBMEIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO29CQUNwRixFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7aUJBQ2pGO2FBQ0Y7OztZQW5EQyxTQUFTO1lBRFMsVUFBVTtZQVVyQixrQkFBa0I7WUFDVixZQUFZOzRDQTRReEIsTUFBTSxTQUFDLFFBQVE7NENBQ2YsTUFBTSxTQUFDLFNBQVM7OztxQkFwTmxCLEtBQUs7dUJBa0JMLEtBQUs7dUJBcUJMLEtBQUs7dUJBY0wsS0FBSzs0QkFZTCxLQUFLOzBCQVdMLEtBQUssU0FBQyxtQkFBbUI7b0JBb0J6QixLQUFLO3dCQXFCTCxLQUFLOzBCQVdMLE1BQU07K0JBV04sTUFBTTtzQkErRU4sWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUFpZW5DLE1BQU0sT0FBTyx1QkFBdUI7OztZQUpuQyxRQUFRLFNBQUM7Z0JBQ1IsWUFBWSxFQUFFLENBQUMsMEJBQTBCLENBQUM7Z0JBQzFDLE9BQU8sRUFBRSxDQUFDLDBCQUEwQixDQUFDO2FBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L25vLWNvbmZsaWN0aW5nLWxpZmVjeWNsZSAqL1xuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLCBJbnB1dCwgRWxlbWVudFJlZixcbiAgUmVuZGVyZXIyLCBOZ01vZHVsZSwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEluamVjdCxcbiAgTE9DQUxFX0lELCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEhvc3RMaXN0ZW5lciwgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIFZhbGlkYXRvciwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWd4TWFza0RpcmVjdGl2ZSB9IGZyb20gJy4uL21hc2svbWFzay5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWFza1BhcnNpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzay9tYXNrLXBhcnNpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBpc0RhdGUsIFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4RGF0ZVRpbWVFZGl0b3JFdmVudEFyZ3MsIERhdGVQYXJ0SW5mbywgRGF0ZVBhcnQgfSBmcm9tICcuL2RhdGUtdGltZS1lZGl0b3IuY29tbW9uJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdGVQYXJ0RGVsdGFzIH0gZnJvbSAnLi9kYXRlLXRpbWUtZWRpdG9yLmNvbW1vbic7XG5pbXBvcnQgeyBEYXRlVGltZVV0aWwgfSBmcm9tICcuLi8uLi9kYXRlLWNvbW1vbi91dGlsL2RhdGUtdGltZS51dGlsJztcblxuLyoqXG4gKiBEYXRlIFRpbWUgRWRpdG9yIHByb3ZpZGVzIGEgZnVuY3Rpb25hbGl0eSB0byBpbnB1dCwgZWRpdCBhbmQgZm9ybWF0IGRhdGUgYW5kIHRpbWUuXG4gKlxuICogQGlneE1vZHVsZSBJZ3hEYXRlVGltZUVkaXRvck1vZHVsZVxuICpcbiAqIEBpZ3hQYXJlbnQgSWd4SW5wdXRHcm91cFxuICpcbiAqIEBpZ3hUaGVtZSBpZ3gtaW5wdXQtdGhlbWVcbiAqXG4gKiBAaWd4S2V5d29yZHMgZGF0ZSwgdGltZSwgZWRpdG9yXG4gKlxuICogQGlneEdyb3VwIFNjaGVkdWxpbmdcbiAqXG4gKiBAcmVtYXJrc1xuICpcbiAqIFRoZSBJZ25pdGUgVUkgRGF0ZSBUaW1lIEVkaXRvciBEaXJlY3RpdmUgbWFrZXMgaXQgZWFzeSBmb3IgZGV2ZWxvcGVycyB0byBtYW5pcHVsYXRlIGRhdGUvdGltZSB1c2VyIGlucHV0LlxuICogSXQgcmVxdWlyZXMgaW5wdXQgaW4gYSBzcGVjaWZpZWQgb3IgZGVmYXVsdCBpbnB1dCBmb3JtYXQgd2hpY2ggaXMgdmlzaWJsZSBpbiB0aGUgaW5wdXQgZWxlbWVudCBhcyBhIHBsYWNlaG9sZGVyLlxuICogSXQgYWxsb3dzIHRoZSBpbnB1dCBvZiBvbmx5IGRhdGUgKGV4OiAnZGQvTU0veXl5eScpLCBvbmx5IHRpbWUgKGV4OidISDptbSB0dCcpIG9yIGJvdGggYXQgb25jZSwgaWYgbmVlZGVkLlxuICogU3VwcG9ydHMgZGlzcGxheSBmb3JtYXQgdGhhdCBtYXkgZGlmZmVyIGZyb20gdGhlIGlucHV0IGZvcm1hdC5cbiAqIFByb3ZpZGVzIG1ldGhvZHMgdG8gaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYW55IHNwZWNpZmljL3RhcmdldGVkIGBEYXRlUGFydGAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtaW5wdXQtZ3JvdXA+XG4gKiAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlneElucHV0IFtpZ3hEYXRlVGltZUVkaXRvcl09XCInZGQvTU0veXl5eSdcIiBbZGlzcGxheUZvcm1hdF09XCInc2hvcnREYXRlJ1wiIFsobmdNb2RlbCldPVwiZGF0ZVwiLz5cbiAqIDwvaWd4LWlucHV0LWdyb3VwPlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tpZ3hEYXRlVGltZUVkaXRvcl0nLFxuICBleHBvcnRBczogJ2lneERhdGVUaW1lRWRpdG9yJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlLCBtdWx0aTogdHJ1ZSB9LFxuICAgIHsgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlLCBtdWx0aTogdHJ1ZSB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmUgZXh0ZW5kcyBJZ3hNYXNrRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIFZhbGlkYXRvciwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAvKipcbiAgICogTG9jYWxlIHNldHRpbmdzIHVzZWQgZm9yIHZhbHVlIGZvcm1hdHRpbmcuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVzZXMgQW5ndWxhcidzIGBMT0NBTEVfSURgIGJ5IGRlZmF1bHQuIEFmZmVjdHMgYm90aCBpbnB1dCBtYXNrIGFuZCBkaXNwbGF5IGZvcm1hdCBpZiB0aG9zZSBhcmUgbm90IHNldC5cbiAgICogSWYgYSBgbG9jYWxlYCBpcyBzZXQsIGl0IG11c3QgYmUgcmVnaXN0ZXJlZCB2aWEgYHJlZ2lzdGVyTG9jYWxlRGF0YWAuXG4gICAqIFBsZWFzZSByZWZlciB0byBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvaTE4biNpMThuLXBpcGVzLlxuICAgKiBJZiBpdCBpcyBub3QgcmVnaXN0ZXJlZCwgYEludGxgIHdpbGwgYmUgdXNlZCBmb3IgZm9ybWF0dGluZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgaHRtbFxuICAgKiA8aW5wdXQgaWd4RGF0ZVRpbWVFZGl0b3IgW2xvY2FsZV09XCInZW4nXCI+XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGxvY2FsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIHZhbHVlIHJlcXVpcmVkIGZvciB0aGUgZWRpdG9yIHRvIHJlbWFpbiB2YWxpZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgYSBgc3RyaW5nYCB2YWx1ZSBpcyBwYXNzZWQsIGl0IG11c3QgYmUgaW4gdGhlIGRlZmluZWQgaW5wdXQgZm9ybWF0LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBodG1sXG4gICAqIDxpbnB1dCBpZ3hEYXRlVGltZUVkaXRvciBbbWluVmFsdWVdPVwibWluRGF0ZVwiPlxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBnZXQgbWluVmFsdWUoKTogc3RyaW5nIHwgRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX21pblZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW5WYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSkge1xuICAgIHRoaXMuX21pblZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1heGltdW0gdmFsdWUgcmVxdWlyZWQgZm9yIHRoZSBlZGl0b3IgdG8gcmVtYWluIHZhbGlkLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiBhIGBzdHJpbmdgIHZhbHVlIGlzIHBhc3NlZCBpbiwgaXQgbXVzdCBiZSBpbiB0aGUgZGVmaW5lZCBpbnB1dCBmb3JtYXQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGh0bWxcbiAgICogPGlucHV0IGlneERhdGVUaW1lRWRpdG9yIFttYXhWYWx1ZV09XCJtYXhEYXRlXCI+XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGdldCBtYXhWYWx1ZSgpOiBzdHJpbmcgfCBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4VmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1heFZhbHVlKHZhbHVlOiBzdHJpbmcgfCBEYXRlKSB7XG4gICAgdGhpcy5fbWF4VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmeSBpZiB0aGUgY3VycmVudGx5IHNwdW4gZGF0ZSBzZWdtZW50IHNob3VsZCBsb29wIG92ZXIuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGh0bWxcbiAgICogPGlucHV0IGlneERhdGVUaW1lRWRpdG9yIFtzcGluTG9vcF09XCJmYWxzZVwiPlxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzcGluTG9vcCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNldCBib3RoIHByZS1kZWZpbmVkIGZvcm1hdCBvcHRpb25zIHN1Y2ggYXMgYHNob3J0RGF0ZWAgYW5kIGBsb25nRGF0ZWAsXG4gICAqIGFzIHdlbGwgYXMgY29uc3RydWN0ZWQgZm9ybWF0IHN0cmluZyB1c2luZyBjaGFyYWN0ZXJzIHN1cHBvcnRlZCBieSBgRGF0ZVBpcGVgLCBlLmcuIGBFRS9NTS95eXl5YC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgaHRtbFxuICAgKiA8aW5wdXQgaWd4RGF0ZVRpbWVFZGl0b3IgW2Rpc3BsYXlGb3JtYXRdPVwiJ3Nob3J0RGF0ZSdcIj5cbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGlzcGxheUZvcm1hdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHBlY3RlZCB1c2VyIGlucHV0IGZvcm1hdCAoYW5kIHBsYWNlaG9sZGVyKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgaHRtbFxuICAgKiA8aW5wdXQgW2lneERhdGVUaW1lRWRpdG9yXT1cIidkZC9NTS95eXl5J1wiPlxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dChgaWd4RGF0ZVRpbWVFZGl0b3JgKVxuICBwdWJsaWMgc2V0IGlucHV0Rm9ybWF0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0TWFzayh2YWx1ZSk7XG4gICAgICB0aGlzLl9pbnB1dEZvcm1hdCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5wdXRGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXRGb3JtYXQgfHwgdGhpcy5fZGVmYXVsdElucHV0Rm9ybWF0O1xuICB9XG5cbiAgLyoqXG4gICAqIEVkaXRvciB2YWx1ZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgaHRtbFxuICAgKiA8aW5wdXQgaWd4RGF0ZVRpbWVFZGl0b3IgW3ZhbHVlXT1cImRhdGVcIj5cbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnNldERhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZU1hc2soKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbHRhIHZhbHVlcyB1c2VkIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgZWFjaCBlZGl0b3IgZGF0ZSBwYXJ0IG9uIHNwaW4gYWN0aW9ucy5cbiAgICogQWxsIHZhbHVlcyBkZWZhdWx0IHRvIGAxYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgaHRtbFxuICAgKiA8aW5wdXQgaWd4RGF0ZVRpbWVFZGl0b3IgW3NwaW5EZWx0YV09XCJ7ZGF0ZTogNSwgbWludXRlOiAzMH1cIj5cbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3BpbkRlbHRhOiBEYXRlUGFydERlbHRhcztcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHRoZSBlZGl0b3IncyB2YWx1ZSBoYXMgY2hhbmdlZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgaHRtbFxuICAgKiA8aW5wdXQgaWd4RGF0ZVRpbWVFZGl0b3IgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlKCRldmVudClcIi8+XG4gICAqIGBgYFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IHN0cmluZz4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHRoZSBlZGl0b3IgaXMgbm90IHdpdGhpbiBhIHNwZWNpZmllZCByYW5nZSBvciB3aGVuIHRoZSBlZGl0b3IncyB2YWx1ZSBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBodG1sXG4gICAqIDxpbnB1dCBpZ3hEYXRlVGltZUVkaXRvciBbbWluVmFsdWVdPVwibWluRGF0ZVwiIFttYXhWYWx1ZV09XCJtYXhEYXRlXCIgKHZhbGlkYXRpb25GYWlsZWQpPVwib25WYWxpZGF0aW9uRmFpbGVkKCRldmVudClcIi8+XG4gICAqIGBgYFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyB2YWxpZGF0aW9uRmFpbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hEYXRlVGltZUVkaXRvckV2ZW50QXJncz4oKTtcblxuICBwcml2YXRlIF9pbnB1dEZvcm1hdDogc3RyaW5nO1xuICBwcml2YXRlIF9vbGRWYWx1ZTogRGF0ZTtcbiAgcHJpdmF0ZSBfZGF0ZVZhbHVlOiBEYXRlO1xuICBwcml2YXRlIF9vbkNsZWFyOiBib29sZWFuO1xuICBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudDtcbiAgcHJpdmF0ZSBfaXNGb2N1c2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kZWZhdWx0SW5wdXRGb3JtYXQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdmFsdWU6IERhdGUgfCBzdHJpbmc7XG4gIHByaXZhdGUgX21pblZhbHVlOiBEYXRlIHwgc3RyaW5nO1xuICBwcml2YXRlIF9tYXhWYWx1ZTogRGF0ZSB8IHN0cmluZztcbiAgcHJpdmF0ZSBfaW5wdXREYXRlUGFydHM6IERhdGVQYXJ0SW5mb1tdO1xuICBwcml2YXRlIF9kYXRlUGFydERlbHRhczogRGF0ZVBhcnREZWx0YXMgPSB7XG4gICAgZGF0ZTogMSxcbiAgICBtb250aDogMSxcbiAgICB5ZWFyOiAxLFxuICAgIGhvdXJzOiAxLFxuICAgIG1pbnV0ZXM6IDEsXG4gICAgc2Vjb25kczogMVxuICB9O1xuICBwcml2YXRlIG9uVG91Y2hDYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIG9uVmFsaWRhdG9yQ2hhbmdlOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQgPSBub29wO1xuXG4gIHByaXZhdGUgZ2V0IGRhdGVQYXJ0RGVsdGFzKCk6IERhdGVQYXJ0RGVsdGFzIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGF0ZVBhcnREZWx0YXMsIHRoaXMuc3BpbkRlbHRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGVtcHR5TWFzaygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1hc2tQYXJzZXIuYXBwbHlNYXNrKG51bGwsIHRoaXMubWFza09wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgdGFyZ2V0RGF0ZVBhcnQoKTogRGF0ZVBhcnQge1xuICAgIC8vIFYuSy4gTWF5IDE2dGgsIDIwMjIgIzExNTU3IEdldCBjb3JyZWN0IGRhdGUgcGFydCBpbiBzaGFkb3cgRE9NXG4gICAgaWYgKHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5uYXRpdmVFbGVtZW50IHx8XG4gICAgICB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ/LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lucHV0RGF0ZVBhcnRzXG4gICAgICAgIC5maW5kKHAgPT4gcC5zdGFydCA8PSB0aGlzLnNlbGVjdGlvblN0YXJ0ICYmIHRoaXMuc2VsZWN0aW9uU3RhcnQgPD0gcC5lbmQgJiYgcC50eXBlICE9PSBEYXRlUGFydC5MaXRlcmFsKT8udHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX2lucHV0RGF0ZVBhcnRzLnNvbWUocCA9PiBwLnR5cGUgPT09IERhdGVQYXJ0LkRhdGUpKSB7XG4gICAgICAgIHJldHVybiBEYXRlUGFydC5EYXRlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9pbnB1dERhdGVQYXJ0cy5zb21lKHAgPT4gcC50eXBlID09PSBEYXRlUGFydC5Ib3VycykpIHtcbiAgICAgICAgcmV0dXJuIERhdGVQYXJ0LkhvdXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhc0RhdGVQYXJ0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXREYXRlUGFydHMuc29tZShcbiAgICAgIHAgPT4gcC50eXBlID09PSBEYXRlUGFydC5EYXRlXG4gICAgICAgIHx8IHAudHlwZSA9PT0gRGF0ZVBhcnQuTW9udGhcbiAgICAgICAgfHwgcC50eXBlID09PSBEYXRlUGFydC5ZZWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhc1RpbWVQYXJ0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXREYXRlUGFydHMuc29tZShcbiAgICAgIHAgPT4gcC50eXBlID09PSBEYXRlUGFydC5Ib3Vyc1xuICAgICAgICB8fCBwLnR5cGUgPT09IERhdGVQYXJ0Lk1pbnV0ZXNcbiAgICAgICAgfHwgcC50eXBlID09PSBEYXRlUGFydC5TZWNvbmRzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRhdGVWYWx1ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZVZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJvdGVjdGVkIG1hc2tQYXJzZXI6IE1hc2tQYXJzaW5nU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwcml2YXRlIF9sb2NhbGU6IGFueSkge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYsIG1hc2tQYXJzZXIsIHJlbmRlcmVyLCBwbGF0Zm9ybSk7XG4gICAgdGhpcy5kb2N1bWVudCA9IHRoaXMuX2RvY3VtZW50IGFzIERvY3VtZW50O1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5sb2NhbGUgfHwgdGhpcy5fbG9jYWxlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2hlZWwnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25XaGVlbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNGb2N1c2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGV2ZW50LmRlbHRhWSA+IDApIHtcbiAgICAgIHRoaXMuZGVjcmVtZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5jcmVtZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRGVmYXVsdEZvcm1hdCgpO1xuICAgIHRoaXMuc2V0TWFzayh0aGlzLmlucHV0Rm9ybWF0KTtcbiAgICB0aGlzLnVwZGF0ZU1hc2soKTtcbiAgfVxuXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydsb2NhbGUnXSAmJiAhY2hhbmdlc1snbG9jYWxlJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlRGVmYXVsdEZvcm1hdCgpO1xuICAgICAgaWYgKCF0aGlzLl9pbnB1dEZvcm1hdCkge1xuICAgICAgICB0aGlzLnNldE1hc2sodGhpcy5pbnB1dEZvcm1hdCk7XG4gICAgICAgIHRoaXMudXBkYXRlTWFzaygpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5wdXRGb3JtYXQnXSAmJiAhY2hhbmdlc1snaW5wdXRGb3JtYXQnXS5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy51cGRhdGVNYXNrKCk7XG4gICAgfVxuICB9XG5cblxuICAvKiogQ2xlYXIgdGhlIGlucHV0IGVsZW1lbnQgdmFsdWUuICovXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNsZWFyID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKG51bGwpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgdGhpcy5pbnB1dFZhbHVlLmxlbmd0aCk7XG4gICAgdGhpcy5fb25DbGVhciA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluY3JlbWVudCBzcGVjaWZpZWQgRGF0ZVBhcnQuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRlUGFydCBUaGUgb3B0aW9uYWwgRGF0ZVBhcnQgdG8gaW5jcmVtZW50LiBEZWZhdWx0cyB0byBEYXRlIG9yIEhvdXJzICh3aGVuIERhdGUgaXMgYWJzZW50IGZyb20gdGhlIGlucHV0Rm9ybWF0IC0gZXg6J0hIOm1tJykuXG4gICAqIEBwYXJhbSBkZWx0YSBUaGUgb3B0aW9uYWwgZGVsdGEgdG8gaW5jcmVtZW50IGJ5LiBPdmVycmlkZXMgYHNwaW5EZWx0YWAuXG4gICAqL1xuICBwdWJsaWMgaW5jcmVtZW50KGRhdGVQYXJ0PzogRGF0ZVBhcnQsIGRlbHRhPzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0UGFydCA9IGRhdGVQYXJ0IHx8IHRoaXMudGFyZ2V0RGF0ZVBhcnQ7XG4gICAgaWYgKCF0YXJnZXRQYXJ0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy50cnlTcGluVmFsdWUodGFyZ2V0UGFydCwgZGVsdGEpO1xuICAgIHRoaXMudXBkYXRlVmFsdWUobmV3VmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY3JlbWVudCBzcGVjaWZpZWQgRGF0ZVBhcnQuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRlUGFydCBUaGUgb3B0aW9uYWwgRGF0ZVBhcnQgdG8gZGVjcmVtZW50LiBEZWZhdWx0cyB0byBEYXRlIG9yIEhvdXJzICh3aGVuIERhdGUgaXMgYWJzZW50IGZyb20gdGhlIGlucHV0Rm9ybWF0IC0gZXg6J0hIOm1tJykuXG4gICAqIEBwYXJhbSBkZWx0YSBUaGUgb3B0aW9uYWwgZGVsdGEgdG8gZGVjcmVtZW50IGJ5LiBPdmVycmlkZXMgYHNwaW5EZWx0YWAuXG4gICAqL1xuICBwdWJsaWMgZGVjcmVtZW50KGRhdGVQYXJ0PzogRGF0ZVBhcnQsIGRlbHRhPzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0UGFydCA9IGRhdGVQYXJ0IHx8IHRoaXMudGFyZ2V0RGF0ZVBhcnQ7XG4gICAgaWYgKCF0YXJnZXRQYXJ0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy50cnlTcGluVmFsdWUodGFyZ2V0UGFydCwgZGVsdGEsIHRydWUpO1xuICAgIHRoaXMudXBkYXRlVmFsdWUobmV3VmFsdWUpO1xuICB9XG5cbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0RGF0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZU1hc2soKTtcbiAgfVxuXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIEludmFsaWREYXRlIGhhbmRsaW5nXG4gICAgaWYgKGlzRGF0ZShjb250cm9sLnZhbHVlKSAmJiAhRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4geyB2YWx1ZTogdHJ1ZSB9O1xuICAgIH1cblxuICAgIGxldCBlcnJvcnMgPSB7fTtcbiAgICBjb25zdCB2YWx1ZSA9IERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZShjb250cm9sLnZhbHVlKSA/IGNvbnRyb2wudmFsdWUgOiBEYXRlVGltZVV0aWwucGFyc2VJc29EYXRlKGNvbnRyb2wudmFsdWUpO1xuICAgIGNvbnN0IG1pblZhbHVlRGF0ZSA9IERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLm1pblZhbHVlKSA/IHRoaXMubWluVmFsdWUgOiB0aGlzLnBhcnNlRGF0ZSh0aGlzLm1pblZhbHVlKTtcbiAgICBjb25zdCBtYXhWYWx1ZURhdGUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5tYXhWYWx1ZSkgPyB0aGlzLm1heFZhbHVlIDogdGhpcy5wYXJzZURhdGUodGhpcy5tYXhWYWx1ZSk7XG4gICAgaWYgKG1pblZhbHVlRGF0ZSB8fCBtYXhWYWx1ZURhdGUpIHtcbiAgICAgIGVycm9ycyA9IERhdGVUaW1lVXRpbC52YWxpZGF0ZU1pbk1heCh2YWx1ZSxcbiAgICAgICAgbWluVmFsdWVEYXRlLCBtYXhWYWx1ZURhdGUsXG4gICAgICAgIHRoaXMuaGFzVGltZVBhcnRzLCB0aGlzLmhhc0RhdGVQYXJ0cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCA/IGVycm9ycyA6IG51bGw7XG4gIH1cblxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2U/KGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaENhbGxiYWNrID0gZm47XG4gIH1cblxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGU/KF9pc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7IH1cblxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIG9uQ29tcG9zaXRpb25FbmQoKTogdm9pZCB7XG4gICAgc3VwZXIub25Db21wb3NpdGlvbkVuZCgpO1xuXG4gICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLnBhcnNlRGF0ZSh0aGlzLmlucHV0VmFsdWUpKTtcbiAgICB0aGlzLnVwZGF0ZU1hc2soKTtcbiAgfVxuXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb25JbnB1dENoYW5nZWQoZXZlbnQpOiB2b2lkIHtcbiAgICBzdXBlci5vbklucHV0Q2hhbmdlZChldmVudCk7XG4gICAgaWYgKHRoaXMuX2NvbXBvc2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlucHV0SXNDb21wbGV0ZSgpKSB7XG4gICAgICBjb25zdCBwYXJzZWREYXRlID0gdGhpcy5wYXJzZURhdGUodGhpcy5pbnB1dFZhbHVlKTtcbiAgICAgIGlmIChEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUocGFyc2VkRGF0ZSkpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShwYXJzZWREYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy52YWx1ZSAmJiBuZXcgRGF0ZSh0aGlzLmRhdGVWYWx1ZS5nZXRUaW1lKCkpO1xuICAgICAgICBjb25zdCBhcmdzOiBJZ3hEYXRlVGltZUVkaXRvckV2ZW50QXJncyA9IHsgb2xkVmFsdWUsIG5ld1ZhbHVlOiBwYXJzZWREYXRlLCB1c2VySW5wdXQ6IHRoaXMuaW5wdXRWYWx1ZSB9O1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQuZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZShhcmdzLm5ld1ZhbHVlKSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUoYXJncy5uZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5yZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5vbktleURvd24oZXZlbnQpO1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcblxuICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19ET1dOIHx8IGtleSA9PT0gdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfVVApIHtcbiAgICAgIHRoaXMuc3BpbihldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYga2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5TRU1JQ09MT04pIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUobmV3IERhdGUoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5tb3ZlQ3Vyc29yKGV2ZW50KTtcbiAgfVxuXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LnJlYWRPbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzRm9jdXNlZCA9IHRydWU7XG4gICAgdGhpcy5vblRvdWNoQ2FsbGJhY2soKTtcbiAgICB0aGlzLnVwZGF0ZU1hc2soKTtcbiAgICBzdXBlci5vbkZvY3VzKCk7XG4gIH1cblxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIG9uQmx1cih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5faXNGb2N1c2VkID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLmlucHV0SXNDb21wbGV0ZSgpICYmIHRoaXMuaW5wdXRWYWx1ZSAhPT0gdGhpcy5lbXB0eU1hc2spIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy5wYXJzZURhdGUodGhpcy5pbnB1dFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlTWFzaygpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHRoaW5rIG9mIGEgYmV0dGVyIHdheSB0byBzZXQgZGlzcGxheVZhbHVlUGlwZSBpbiBtYXNrIGRpcmVjdGl2ZVxuICAgIGlmICh0aGlzLmRpc3BsYXlWYWx1ZVBpcGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5vbkJsdXIodmFsdWUpO1xuICB9XG5cbiAgLy8gdGhlIGRhdGUgZWRpdG9yIHNldHMgaXRzIG93biBpbnB1dEZvcm1hdCBhcyBpdHMgcGxhY2Vob2xkZXIgaWYgbm9uZSBpcyBwcm92aWRlZFxuICAvKiogQGhpZGRlbiAqL1xuICBwcm90ZWN0ZWQgc2V0UGxhY2Vob2xkZXIoX3ZhbHVlOiBzdHJpbmcpOiB2b2lkIHsgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGVmYXVsdEZvcm1hdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZWZhdWx0SW5wdXRGb3JtYXQgPSBEYXRlVGltZVV0aWwuZ2V0RGVmYXVsdElucHV0Rm9ybWF0KHRoaXMubG9jYWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWFzaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNGb2N1c2VkKSB7XG4gICAgICAvLyBzdG9yZSB0aGUgY3Vyc29yIHBvc2l0aW9uIGFzIGl0IHdpbGwgYmUgbW92ZWQgZHVyaW5nIG1hc2tpbmdcbiAgICAgIGNvbnN0IGN1cnNvciA9IHRoaXMuc2VsZWN0aW9uRW5kO1xuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5nZXRNYXNrZWRWYWx1ZSgpO1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShjdXJzb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuZGF0ZVZhbHVlIHx8ICFEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5kYXRlVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICcnO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWVQaXBlKSB7XG4gICAgICAgIC8vIFRPRE86IHJlbW92ZSB3aGVuIGZvcm1hdHRlciBmdW5jIGhhcyBiZWVuIGRlbGV0ZWRcbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5kaXNwbGF5VmFsdWVQaXBlLnRyYW5zZm9ybSh0aGlzLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5kaXNwbGF5Rm9ybWF0IHx8IHRoaXMuaW5wdXRGb3JtYXQ7XG4gICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IERhdGVUaW1lVXRpbC5mb3JtYXREYXRlKHRoaXMuZGF0ZVZhbHVlLCBmb3JtYXQucmVwbGFjZSgndHQnLCAnYWEnKSwgdGhpcy5sb2NhbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5kYXRlVmFsdWUudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE1hc2soaW5wdXRGb3JtYXQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG9sZEZvcm1hdCA9IHRoaXMuX2lucHV0RGF0ZVBhcnRzPy5tYXAocCA9PiBwLmZvcm1hdCkuam9pbignJyk7XG4gICAgdGhpcy5faW5wdXREYXRlUGFydHMgPSBEYXRlVGltZVV0aWwucGFyc2VEYXRlVGltZUZvcm1hdChpbnB1dEZvcm1hdCk7XG4gICAgaW5wdXRGb3JtYXQgPSB0aGlzLl9pbnB1dERhdGVQYXJ0cy5tYXAocCA9PiBwLmZvcm1hdCkuam9pbignJyk7XG4gICAgY29uc3QgbWFzayA9IChpbnB1dEZvcm1hdCB8fCBEYXRlVGltZVV0aWwuREVGQVVMVF9JTlBVVF9GT1JNQVQpXG4gICAgICAucmVwbGFjZShuZXcgUmVnRXhwKC8oPz1bXnRdKVtcXHddLywgJ2cnKSwgJzAnKTtcbiAgICB0aGlzLm1hc2sgPSBtYXNrLmluZGV4T2YoJ3R0JykgIT09IC0xID8gbWFzay5yZXBsYWNlKG5ldyBSZWdFeHAoJ3R0JywgJ2cnKSwgJ0xMJykgOiBtYXNrO1xuXG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucGxhY2Vob2xkZXI7XG4gICAgaWYgKCFwbGFjZWhvbGRlciB8fCBvbGRGb3JtYXQgPT09IHBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdwbGFjZWhvbGRlcicsIGlucHV0Rm9ybWF0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRGF0ZSh2YWw6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXZhbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIERhdGVUaW1lVXRpbC5wYXJzZVZhbHVlRnJvbU1hc2sodmFsLCB0aGlzLl9pbnB1dERhdGVQYXJ0cywgdGhpcy5wcm9tcHRDaGFyKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWFza2VkVmFsdWUoKTogc3RyaW5nIHtcbiAgICBsZXQgbWFzayA9IHRoaXMuZW1wdHlNYXNrO1xuICAgIGlmIChEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy52YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgcGFydCBvZiB0aGlzLl9pbnB1dERhdGVQYXJ0cykge1xuICAgICAgICBpZiAocGFydC50eXBlID09PSBEYXRlUGFydC5MaXRlcmFsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0aGlzLmdldFBhcnRWYWx1ZShwYXJ0LCBwYXJ0LmZvcm1hdC5sZW5ndGgpO1xuICAgICAgICBtYXNrID0gdGhpcy5tYXNrUGFyc2VyLnJlcGxhY2VJbk1hc2sobWFzaywgdGFyZ2V0VmFsdWUsIHRoaXMubWFza09wdGlvbnMsIHBhcnQuc3RhcnQsIHBhcnQuZW5kKS52YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXNrO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaW5wdXRJc0NvbXBsZXRlKCkgfHwgIXRoaXMuX29uQ2xlYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBtYXNrO1xuICB9XG5cblxuICBwcml2YXRlIHZhbHVlSW5SYW5nZSh2YWx1ZTogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgZXJyb3JzID0ge307XG4gICAgY29uc3QgbWluVmFsdWVEYXRlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKHRoaXMubWluVmFsdWUpID8gdGhpcy5taW5WYWx1ZSA6IHRoaXMucGFyc2VEYXRlKHRoaXMubWluVmFsdWUpO1xuICAgIGNvbnN0IG1heFZhbHVlRGF0ZSA9IERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLm1heFZhbHVlKSA/IHRoaXMubWF4VmFsdWUgOiB0aGlzLnBhcnNlRGF0ZSh0aGlzLm1heFZhbHVlKTtcbiAgICBpZiAobWluVmFsdWVEYXRlIHx8IG1heFZhbHVlRGF0ZSkge1xuICAgICAgZXJyb3JzID0gRGF0ZVRpbWVVdGlsLnZhbGlkYXRlTWluTWF4KHZhbHVlLFxuICAgICAgICB0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlLFxuICAgICAgICB0aGlzLmhhc1RpbWVQYXJ0cywgdGhpcy5oYXNEYXRlUGFydHMpO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgc3BpblZhbHVlKGRhdGVQYXJ0OiBEYXRlUGFydCwgZGVsdGE6IG51bWJlcik6IERhdGUge1xuICAgIGlmICghdGhpcy5kYXRlVmFsdWUgfHwgIURhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLmRhdGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5kYXRlVmFsdWUuZ2V0VGltZSgpKTtcbiAgICBzd2l0Y2ggKGRhdGVQYXJ0KSB7XG4gICAgICBjYXNlIERhdGVQYXJ0LkRhdGU6XG4gICAgICAgIERhdGVUaW1lVXRpbC5zcGluRGF0ZShkZWx0YSwgbmV3RGF0ZSwgdGhpcy5zcGluTG9vcCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYXRlUGFydC5Nb250aDpcbiAgICAgICAgRGF0ZVRpbWVVdGlsLnNwaW5Nb250aChkZWx0YSwgbmV3RGF0ZSwgdGhpcy5zcGluTG9vcCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYXRlUGFydC5ZZWFyOlxuICAgICAgICBEYXRlVGltZVV0aWwuc3BpblllYXIoZGVsdGEsIG5ld0RhdGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGF0ZVBhcnQuSG91cnM6XG4gICAgICAgIERhdGVUaW1lVXRpbC5zcGluSG91cnMoZGVsdGEsIG5ld0RhdGUsIHRoaXMuc3Bpbkxvb3ApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGF0ZVBhcnQuTWludXRlczpcbiAgICAgICAgRGF0ZVRpbWVVdGlsLnNwaW5NaW51dGVzKGRlbHRhLCBuZXdEYXRlLCB0aGlzLnNwaW5Mb29wKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERhdGVQYXJ0LlNlY29uZHM6XG4gICAgICAgIERhdGVUaW1lVXRpbC5zcGluU2Vjb25kcyhkZWx0YSwgbmV3RGF0ZSwgdGhpcy5zcGluTG9vcCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYXRlUGFydC5BbVBtOlxuICAgICAgICBjb25zdCBmb3JtYXRQYXJ0ID0gdGhpcy5faW5wdXREYXRlUGFydHMuZmluZChkcCA9PiBkcC50eXBlID09PSBEYXRlUGFydC5BbVBtKTtcbiAgICAgICAgY29uc3QgYW1QbUZyb21NYXNrID0gdGhpcy5pbnB1dFZhbHVlLnN1YnN0cmluZyhmb3JtYXRQYXJ0LnN0YXJ0LCBmb3JtYXRQYXJ0LmVuZCk7XG4gICAgICAgIHJldHVybiBEYXRlVGltZVV0aWwuc3BpbkFtUG0obmV3RGF0ZSwgdGhpcy5kYXRlVmFsdWUsIGFtUG1Gcm9tTWFzayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0RhdGU7XG4gIH1cblxuICBwcml2YXRlIHRyeVNwaW5WYWx1ZShkYXRlUGFydDogRGF0ZVBhcnQsIGRlbHRhPzogbnVtYmVyLCBuZWdhdGl2ZSA9IGZhbHNlKTogRGF0ZSB7XG4gICAgaWYgKCFkZWx0YSkge1xuICAgICAgLy8gZGVmYXVsdCB0byAxIGlmIGEgZGVsdGEgaXMgc2V0IHRvIDAgb3IgYW55IG90aGVyIGZhbHN5IHZhbHVlXG4gICAgICBkZWx0YSA9IHRoaXMuZGF0ZVBhcnREZWx0YXNbZGF0ZVBhcnRdIHx8IDE7XG4gICAgfVxuICAgIGNvbnN0IHNwaW5WYWx1ZSA9IG5lZ2F0aXZlID8gLU1hdGguYWJzKGRlbHRhKSA6IE1hdGguYWJzKGRlbHRhKTtcbiAgICByZXR1cm4gdGhpcy5zcGluVmFsdWUoZGF0ZVBhcnQsIHNwaW5WYWx1ZSkgfHwgbmV3IERhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGF0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fZGF0ZVZhbHVlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKHZhbHVlKVxuICAgICAgPyB2YWx1ZVxuICAgICAgOiBEYXRlVGltZVV0aWwucGFyc2VJc29EYXRlKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWUobmV3RGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuX29sZFZhbHVlID0gdGhpcy5kYXRlVmFsdWU7XG4gICAgdGhpcy52YWx1ZSA9IG5ld0RhdGU7XG5cbiAgICAvLyBUT0RPOiBzaG91bGQgd2UgZW1pdCBldmVudHMgaGVyZT9cbiAgICBpZiAodGhpcy5pbnB1dElzQ29tcGxldGUoKSB8fCB0aGlzLmlucHV0VmFsdWUgPT09IHRoaXMuZW1wdHlNYXNrKSB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5kYXRlVmFsdWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRlVmFsdWUgJiYgIXRoaXMudmFsdWVJblJhbmdlKHRoaXMuZGF0ZVZhbHVlKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkLmVtaXQoeyBvbGRWYWx1ZTogdGhpcy5fb2xkVmFsdWUsIG5ld1ZhbHVlOiB0aGlzLmRhdGVWYWx1ZSwgdXNlcklucHV0OiB0aGlzLmlucHV0VmFsdWUgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0b1R3ZWx2ZUhvdXJGb3JtYXQodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGhvdXIgPSBwYXJzZUludCh2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAodGhpcy5wcm9tcHRDaGFyLCAnZycpLCAnMCcpLCAxMCk7XG4gICAgaWYgKGhvdXIgPiAxMikge1xuICAgICAgaG91ciAtPSAxMjtcbiAgICB9IGVsc2UgaWYgKGhvdXIgPT09IDApIHtcbiAgICAgIGhvdXIgPSAxMjtcbiAgICB9XG5cbiAgICByZXR1cm4gaG91cjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFydFZhbHVlKGRhdGVQYXJ0SW5mbzogRGF0ZVBhcnRJbmZvLCBwYXJ0TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGxldCBtYXNrZWRWYWx1ZTtcbiAgICBjb25zdCBkYXRlUGFydCA9IGRhdGVQYXJ0SW5mby50eXBlO1xuICAgIHN3aXRjaCAoZGF0ZVBhcnQpIHtcbiAgICAgIGNhc2UgRGF0ZVBhcnQuRGF0ZTpcbiAgICAgICAgbWFza2VkVmFsdWUgPSB0aGlzLmRhdGVWYWx1ZS5nZXREYXRlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYXRlUGFydC5Nb250aDpcbiAgICAgICAgLy8gbW9udGhzIGFyZSB6ZXJvIGJhc2VkXG4gICAgICAgIG1hc2tlZFZhbHVlID0gdGhpcy5kYXRlVmFsdWUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYXRlUGFydC5ZZWFyOlxuICAgICAgICBpZiAocGFydExlbmd0aCA9PT0gMikge1xuICAgICAgICAgIG1hc2tlZFZhbHVlID0gdGhpcy5wcmVwZW5kVmFsdWUoXG4gICAgICAgICAgICBwYXJzZUludCh0aGlzLmRhdGVWYWx1ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc2xpY2UoLTIpLCAxMCksIHBhcnRMZW5ndGgsICcwJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWFza2VkVmFsdWUgPSB0aGlzLmRhdGVWYWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYXRlUGFydC5Ib3VyczpcbiAgICAgICAgaWYgKGRhdGVQYXJ0SW5mby5mb3JtYXQuaW5kZXhPZignaCcpICE9PSAtMSkge1xuICAgICAgICAgIG1hc2tlZFZhbHVlID0gdGhpcy5wcmVwZW5kVmFsdWUoXG4gICAgICAgICAgICB0aGlzLnRvVHdlbHZlSG91ckZvcm1hdCh0aGlzLmRhdGVWYWx1ZS5nZXRIb3VycygpLnRvU3RyaW5nKCkpLCBwYXJ0TGVuZ3RoLCAnMCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hc2tlZFZhbHVlID0gdGhpcy5kYXRlVmFsdWUuZ2V0SG91cnMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGF0ZVBhcnQuTWludXRlczpcbiAgICAgICAgbWFza2VkVmFsdWUgPSB0aGlzLmRhdGVWYWx1ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYXRlUGFydC5TZWNvbmRzOlxuICAgICAgICBtYXNrZWRWYWx1ZSA9IHRoaXMuZGF0ZVZhbHVlLmdldFNlY29uZHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERhdGVQYXJ0LkFtUG06XG4gICAgICAgIG1hc2tlZFZhbHVlID0gdGhpcy5kYXRlVmFsdWUuZ2V0SG91cnMoKSA+PSAxMiA/ICdQTScgOiAnQU0nO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoZGF0ZVBhcnRJbmZvLnR5cGUgIT09IERhdGVQYXJ0LkFtUG0pIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXBlbmRWYWx1ZShtYXNrZWRWYWx1ZSwgcGFydExlbmd0aCwgJzAnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFza2VkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHByZXBlbmRWYWx1ZSh2YWx1ZTogbnVtYmVyLCBwYXJ0TGVuZ3RoOiBudW1iZXIsIHByZXBlbmRDaGFyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAocHJlcGVuZENoYXIgKyB2YWx1ZS50b1N0cmluZygpKS5zbGljZSgtcGFydExlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIHNwaW4oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX1VQOlxuICAgICAgICB0aGlzLmluY3JlbWVudCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfRE9XTjpcbiAgICAgICAgdGhpcy5kZWNyZW1lbnQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbnB1dElzQ29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRWYWx1ZS5pbmRleE9mKHRoaXMucHJvbXB0Q2hhcikgPT09IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlQ3Vyc29yKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX0xFRlQ6XG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHRoaXMuZ2V0TmV3UG9zaXRpb24odmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfUklHSFQ6XG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHRoaXMuZ2V0TmV3UG9zaXRpb24odmFsdWUsIDEpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW92ZSB0aGUgY3Vyc29yIGluIGEgc3BlY2lmaWMgZGlyZWN0aW9uIHVudGlsIGl0IHJlYWNoZXMgYSBkYXRlL3RpbWUgc2VwYXJhdG9yLlxuICAgKiBUaGVuIHJldHVybiBpdHMgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RyaW5nIGl0IG9wZXJhdGVzIG9uLlxuICAgKiBAcGFyYW0gZGlyZWN0aW9uIDAgaXMgbGVmdCwgMSBpcyByaWdodC4gRGVmYXVsdCBpcyAwLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXROZXdQb3NpdGlvbih2YWx1ZTogc3RyaW5nLCBkaXJlY3Rpb24gPSAwKTogbnVtYmVyIHtcbiAgICBjb25zdCBsaXRlcmFscyA9IHRoaXMuX2lucHV0RGF0ZVBhcnRzLmZpbHRlcihwID0+IHAudHlwZSA9PT0gRGF0ZVBhcnQuTGl0ZXJhbCk7XG4gICAgbGV0IGN1cnNvclBvcyA9IHRoaXMuc2VsZWN0aW9uU3RhcnQ7XG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIGRvIHtcbiAgICAgICAgY3Vyc29yUG9zID0gY3Vyc29yUG9zID4gMCA/IC0tY3Vyc29yUG9zIDogY3Vyc29yUG9zO1xuICAgICAgfSB3aGlsZSAoIWxpdGVyYWxzLnNvbWUobCA9PiBsLmVuZCA9PT0gY3Vyc29yUG9zKSAmJiBjdXJzb3JQb3MgPiAwKTtcbiAgICAgIHJldHVybiBjdXJzb3JQb3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvIHtcbiAgICAgICAgY3Vyc29yUG9zKys7XG4gICAgICB9IHdoaWxlICghbGl0ZXJhbHMuc29tZShsID0+IGwuc3RhcnQgPT09IGN1cnNvclBvcykgJiYgY3Vyc29yUG9zIDwgdmFsdWUubGVuZ3RoKTtcbiAgICAgIHJldHVybiBjdXJzb3JQb3M7XG4gICAgfVxuICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0lneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlXSxcbiAgZXhwb3J0czogW0lneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hEYXRlVGltZUVkaXRvck1vZHVsZSB7IH1cbiJdfQ==