ng-zenduit 2.0.24 → 2.0.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.
@@ -575,7 +575,7 @@ export class ZenduSelectComponent {
575
575
  * Get selected option for leading display
576
576
  */
577
577
  getSelectedOption() {
578
- if (!this.selectModel)
578
+ if (this.isModelEmpty())
579
579
  return null;
580
580
  if (this.isMultiselect && Array.isArray(this.selectModel)) {
581
581
  if (this.selectModel.length === 1) {
@@ -842,4 +842,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
842
842
  type: HostListener,
843
843
  args: ['document:click', ['$event']]
844
844
  }] } });
845
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFxQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0ksT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDckYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7Ozs7O0FBcUR2RixNQUFNLE9BQU8sb0JBQW9CO0lBME8vQixZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBbk8xQzs7V0FFRztRQUNPLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFFOUQ7O1dBRUc7UUFDTSxZQUFPLEdBQTJCLEVBQUUsQ0FBQztRQVk5Qzs7V0FFRztRQUNNLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFFdkI7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLFFBQVEsQ0FBQztRQUVoQzs7V0FFRztRQUNNLGdCQUFXLEdBQXFELFNBQVMsQ0FBQztRQWlCbkY7O1dBRUc7UUFDTSxnQkFBVyxHQUFXLE1BQU0sQ0FBQztRQUV0Qzs7V0FFRztRQUNNLFdBQU0sR0FBVyxJQUFJLENBQUM7UUFFL0I7O1dBRUc7UUFDTSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTNCOztXQUVHO1FBQ00sa0JBQWEsR0FB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QXNCO3NCQUE5QixLQUFLO2dCQUtJLFlBQVk7c0JBQXJCLE1BQU07Z0JBS0csTUFBTTtzQkFBZixNQUFNO2dCQXVCbUMsY0FBYztzQkFBdkQsWUFBWTt1QkFBQywwQkFBMEI7Z0JBS0MsYUFBYTtzQkFBckQsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBS0csY0FBYztzQkFBdkQsWUFBWTt1QkFBQywwQkFBMEI7Z0JBd2Z4QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDb250ZW50Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFplbmR1U2VsZWN0T3B0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi90ZW1wbGF0ZXMvemVuZHUtc2VsZWN0LW9wdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgWmVuZHVTZWxlY3RWYWx1ZURpcmVjdGl2ZSB9IGZyb20gJy4vdGVtcGxhdGVzL3plbmR1LXNlbGVjdC12YWx1ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgWmVuZHVTZWxlY3RCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuL3RlbXBsYXRlcy96ZW5kdS1zZWxlY3QtYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vZmlsdGVyL2ZpbHRlcnNDb25maWcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExhenlMb2FkZXJTZWFyY2gge1xuICB0ZXh0Pzogc3RyaW5nO1xuICBpZHM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXp5TG9hZGVyUmVzdWx0IHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZyB8IG51bWJlcjsgIC8vIENvbXBhdGlibGUgd2l0aCBEYXRhU291cmNlXG4gIHRleHQ/OiBzdHJpbmc7ICAgICAgICAgICAvLyBPcmlnaW5hbCBwcm9wZXJ0eVxuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgaW1hZ2VVcmw/OiBzdHJpbmc7XG4gIGlzT3Blbj86IGJvb2xlYW47XG4gIGNoaWxkcmVuPzogc3RyaW5nW107XG4gIHBhcmVudElkPzogc3RyaW5nIHwgbnVtYmVyO1xuICBsZXZlbD86IG51bWJlcjtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIGJhZGdlQmdDb2xvcj86IHN0cmluZztcbiAgYmFkZ2VDb2xvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgTGF6eUxvYWRlckZ1bmN0aW9uID0gKFxuICBzZWFyY2g6IExhenlMb2FkZXJTZWFyY2gsIFxuICBvZmZzZXQ6IG51bWJlciwgXG4gIGxpbWl0OiBudW1iZXJcbikgPT4gUHJvbWlzZTxMYXp5TG9hZGVyUmVzdWx0W10+O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkZE9wdGlvbkV2ZW50IHtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW1vdmVPcHRpb25FdmVudCB7XG4gIHJlbW92ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBpZD86IHN0cmluZyB8IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgaWNvbk5hbWU/OiBzdHJpbmc7XG4gIGF2YXRhcj86IHN0cmluZztcbiAgZG90Q29sb3I/OiBzdHJpbmc7XG4gIHNlY29uZGFyeVRleHQ/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnemVuLXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3plbmR1LXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vemVuZHUtc2VsZWN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgWmVuZHVTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICogMi1XYXkgY29tcG9uZW50IHByb3BlcnR5IGZvciBzZWxlY3RlZCBpdGVtcy5cbiAgICogRG9uJ3QgaW5pdGlhbGl6ZSBwcm9wZXJ0eSBvbiBjb25zdHJ1Y3RvciB0byBwcmV2ZW50IGNoYW5nZSBzb3VyY2UgcGFyYW1ldGVyXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RNb2RlbDogYW55IHwgYW55W107XG4gIFxuICAvKipcbiAgICogY2FsbGJhY2sgdG8gZW1pdCBjaGFuZ2VzIGZvciBwYXJlbnQgY29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0TW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueSB8IGFueVtdPigpO1xuICBcbiAgLyoqXG4gICAqIExpc3Qgb2Ygb3B0aW9uc1xuICAgKi9cbiAgQElucHV0KCkgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gfCBhbnlbXSA9IFtdO1xuICBcbiAgLyoqXG4gICAqIExhYmVsIHRleHQgYWJvdmUgdGhlIHNlbGVjdFxuICAgKi9cbiAgQElucHV0KCkgbGFiZWw/OiBzdHJpbmc7XG4gIFxuICAvKipcbiAgICogU3VwcG9ydGluZyB0ZXh0IGJlbG93IHRoZSBzZWxlY3RcbiAgICovXG4gIEBJbnB1dCgpIHN1cHBvcnRpbmdUZXh0Pzogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIEhpbnQgdGV4dCAoc2hvd24gYmVsb3cgc2VsZWN0KVxuICAgKi9cbiAgQElucHV0KCkgaGludFRleHQgPSAnJztcbiAgXG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0XG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QnO1xuICBcbiAgLyoqXG4gICAqIExlYWRpbmcgZWxlbWVudCB0eXBlXG4gICAqL1xuICBASW5wdXQoKSBsZWFkaW5nVHlwZTogJ2RlZmF1bHQnIHwgJ2ljb24nIHwgJ2F2YXRhcicgfCAnZG90JyB8ICdzZWFyY2gnID0gJ2RlZmF1bHQnO1xuICBcbiAgLyoqXG4gICAqIEljb24gZm9yIGljb24gbGVhZGluZyB0eXBlXG4gICAqL1xuICBASW5wdXQoKSBsZWFkaW5nSWNvbj86IHN0cmluZztcbiAgXG4gIC8qKlxuICAgKiBBdmF0YXIgVVJMIGZvciBhdmF0YXIgbGVhZGluZyB0eXBlXG4gICAqL1xuICBASW5wdXQoKSBsZWFkaW5nQXZhdGFyPzogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIERvdCBjb2xvciBmb3IgZG90IGxlYWRpbmcgdHlwZVxuICAgKi9cbiAgQElucHV0KCkgbGVhZGluZ0RvdENvbG9yPzogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBrZXkgdmFsdWUgdG8gZ2V0IGRpc3BsYXkgbmFtZSBmcm9tIG9wdGlvbiBvYmplY3RcbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlQcm9wOiBzdHJpbmcgPSAnbmFtZSc7XG4gIFxuICAvKipcbiAgICogVGhpcyBpcyBhIGtleSB2YWx1ZSB0byBnZXQgaWQgZnJvbSBvcHRpb24gb2JqZWN0XG4gICAqL1xuICBASW5wdXQoKSBpZFByb3A6IHN0cmluZyA9ICdpZCc7XG4gIFxuICAvKipcbiAgICogRW5hYmxlIHNlYXJjaCBmdW5jdGlvbmFsaXR5XG4gICAqL1xuICBASW5wdXQoKSBoYXNTZWFyY2ggPSBmYWxzZTtcbiAgXG4gIC8qKlxuICAgKiBDb21wb25lbnQgcHJvcGVydHkgdG8gZW5hYmxlIG11bHRpc2VsZWN0XG4gICAqL1xuICBASW5wdXQoKSBpc011bHRpc2VsZWN0ID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogQWxpYXMgZm9yIGlzTXVsdGlzZWxlY3QgZm9yIGVhc2llciB1c2FnZVxuICAgKi9cbiAgQElucHV0KCkgXG4gIHNldCBtdWx0aXNlbGVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNNdWx0aXNlbGVjdCA9IHZhbHVlO1xuICB9XG4gIGdldCBtdWx0aXNlbGVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc011bHRpc2VsZWN0O1xuICB9XG4gIFxuICAvKipcbiAgICogQXV0by1kZXRlY3RlZCB0cmVlIG1vZGU6IHRydWUgaWYgYW55IG9wdGlvbiBoYXMgYSBgY2hpbGRyZW5gIGFycmF5XG4gICAqL1xuICBwdWJsaWMgaXNUcmVlTW9kZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIaWRlIFwiU2VsZWN0IEFsbFwiIG9wdGlvbiBpbiBib3RoIHRyZWUgbW9kZSBhbmQgZmxhdCBtdWx0aXNlbGVjdFxuICAgKi9cbiAgQElucHV0KCkgaGlkZVNlbGVjdEFsbCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIaWRlIHNlYXJjaCBib3ggaW4gdHJlZSBtb2RlXG4gICAqL1xuICBASW5wdXQoKSBoaWRlVHJlZVNlYXJjaCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBzZWxlY3QgYXMgcmVxdWlyZWQgKHNob3dzICogaW5kaWNhdG9yIG9uIGxhYmVsKVxuICAgKi9cbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgc2VsZWN0XG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBcbiAgLyoqXG4gICAqIFNob3cgZXJyb3Igc3RhdGVcbiAgICovXG4gIEBJbnB1dCgpIGVycm9yID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5XG4gICAqL1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gIFxuICAvKipcbiAgICogRGVzdHJ1Y3RpdmUvZXJyb3Igc3RhdGUgKHNpbWlsYXIgdG8gemVuLWlucHV0KVxuICAgKi9cbiAgQElucHV0KCkgZGVzdHJ1Y3RpdmUgPSBmYWxzZTtcbiAgXG4gIC8qKlxuICAgKiBTaXplIHZhcmlhbnRcbiAgICovXG4gIEBJbnB1dCgpIHNpemU6ICdzbScgfCAnbWQnID0gJ21kJztcbiAgXG4gIC8qKlxuICAgKiBDb21wb25lbnQgcHJvcGVydHkgdG8gcmV0dXJuIHdob2xlIG9wdGlvbiBvYmplY3RcbiAgICogQnkgZGVmYXVsdCBvbmx5IGlkIHZhbHVlIGlzIHJldHVybmVkXG4gICAqL1xuICBASW5wdXQoKSByZXR1cm5PcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIFxuICAvKipcbiAgICogVHJ1bmNhdGUgdGV4dCB3aXRoIFwiLi4uXCIgYXQgdGhlIGVuZFxuICAgKi9cbiAgQElucHV0KCkgaXNUcnVuY2F0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLyoqXG4gICAqIHNob3cgQWRkIE5ldyBPcHRpb24gYXQgZmlyc3QgcGxhY2VcbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZUFkZE5ld09wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLyoqXG4gICAqIFNob3cgQWRkIE5ldyBvcHRpb24gdGV4dCBieSBkZWZhdWx0IGlmIG5ld09wdGlvblRleHQgZW1wdHlcbiAgICovXG4gIEBJbnB1dCgpIHNob3dEZWZhdWx0QWRkT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgXG4gIC8qKlxuICAgKiBkaXNwbGF5IGN1c3RvbSB0ZXh0IGZvciBBZGQgTmV3IE9wdGlvblxuICAgKi9cbiAgQElucHV0KCkgbmV3T3B0aW9uVGV4dDogc3RyaW5nO1xuXG4gIFxuICAvKipcbiAgICogRW1pdCBldmVudCB3aGVuIEFkZCBOZXcgT3B0aW9uIGlzIGNsaWNrZWRcbiAgICovXG4gIEBPdXRwdXQoKSBhZGROZXdPcHRpb246IEV2ZW50RW1pdHRlcjxBZGRPcHRpb25FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFkZE9wdGlvbkV2ZW50PigpO1xuICBcbiAgLyoqXG4gICAqIHNob3cgcmVtb3ZlIE9wdGlvbiBhdCBmaXJzdCBwbGFjZVxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlUmVtb3ZlT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogZGlzcGxheSBjdXN0b20gdGV4dCBmb3IgcmVtb3ZlIE9wdGlvblxuICAgKi9cbiAgQElucHV0KCkgcmVtb3ZlT3B0aW9uVGV4dDogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIEVuYWJsZSBsYXp5IGxvYWRpbmcgZm9yIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIGlzTGF6eUxvYWRpbmcgPSBmYWxzZTtcbiAgXG4gIC8qKlxuICAgKiBMYXp5IGxvYWRlciBmdW5jdGlvbiB0byBmZXRjaCBvcHRpb25zXG4gICAqL1xuICBASW5wdXQoKSBsYXp5TG9hZGVyPzogTGF6eUxvYWRlckZ1bmN0aW9uO1xuICBcbiAgLyoqXG4gICAqIFByZWZlcnJlZCBkaXJlY3Rpb24gZm9yIGRyb3Bkb3duIHRvIG9wZW5cbiAgICovXG4gIEBJbnB1dCgpIHByZWZlcnJlZE9wZW5EaXJlY3Rpb246ICdhdXRvJyB8ICd1cCcgfCAnZG93bicgPSAnYXV0byc7XG4gIFxuICAvKipcbiAgICogRW1pdCBldmVudCB3aGVuIHJlbW92ZSBPcHRpb24gaXMgY2xpY2tlZFxuICAgKi9cbiAgQE91dHB1dCgpIHJlbW92ZU9wdGlvbjogRXZlbnRFbWl0dGVyPFJlbW92ZU9wdGlvbkV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVtb3ZlT3B0aW9uRXZlbnQ+KCk7XG4gIFxuICAvKipcbiAgICogRW1pdCBldmVudCB3aGVuIHNlbGVjdCBpcyBjbG9zZWQsIHNlbmRpbmcgdGhlIHNlbGVjdGVkIGRhdGFcbiAgICovXG4gIEBPdXRwdXQoKSBjbG9zZWQ6IEV2ZW50RW1pdHRlcjxhbnkgfCBhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueSB8IGFueVtdPigpO1xuICBcbiAgLyoqXG4gICAqIFN0YXRlIHRyYWNraW5nXG4gICAqL1xuICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XG4gIHB1YmxpYyBzZWFyY2hUZXh0ID0gJyc7XG4gIHB1YmxpYyBzZWFyY2hJbnB1dFZhbHVlID0gJyc7XG4gIHB1YmxpYyBzZWFyY2hGb2N1c2VkID0gZmFsc2U7XG4gIHB1YmxpYyBmaWx0ZXJlZE9wdGlvbnM6IFNlbGVjdE9wdGlvbltdIHwgYW55W10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkRGlzcGxheSA9ICcnO1xuICBwdWJsaWMgbGFiZWxUZXh0ID0gJyc7XG4gIHB1YmxpYyBvcHRpb246IFNlbGVjdE9wdGlvbiB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY2FuTG9hZE1vcmUgPSBmYWxzZTtcbiAgcHVibGljIGlzTG9hZGluZ05vdyA9IGZhbHNlO1xuXG4gIC8vIFRyZWUgbW9kZSBwcm9wZXJ0aWVzXG4gIHB1YmxpYyB0cmVlRmlsdGVyZWREYXRhU291cmNlOiBEYXRhU291cmNlW10gPSBbXTtcbiAgcHVibGljIGlzU2VsZWN0ZWRBbGwgPSBmYWxzZTtcbiAgXG4gIC8qKlxuICAgKiBTZWxlY3QgT3B0aW9uIFRlbXBsYXRlIGZvciBjdXN0b20gSFRNTFxuICAgKi9cbiAgQENvbnRlbnRDaGlsZChaZW5kdVNlbGVjdE9wdGlvbkRpcmVjdGl2ZSkgb3B0aW9uVGVtcGxhdGU6IFplbmR1U2VsZWN0T3B0aW9uRGlyZWN0aXZlO1xuICBcbiAgLyoqXG4gICAqIFNlbGVjdCBWYWx1ZSBUZW1wbGF0ZSBmb3IgY3VzdG9tIEhUTUxcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoWmVuZHVTZWxlY3RWYWx1ZURpcmVjdGl2ZSkgdmFsdWVUZW1wbGF0ZTogWmVuZHVTZWxlY3RWYWx1ZURpcmVjdGl2ZTtcbiAgXG4gIC8qKlxuICAgKiBTZWxlY3QgQnV0dG9uIFRlbXBsYXRlIGZvciBjdXN0b20gSFRNTFxuICAgKi9cbiAgQENvbnRlbnRDaGlsZChaZW5kdVNlbGVjdEJ1dHRvbkRpcmVjdGl2ZSkgYnV0dG9uVGVtcGxhdGU6IFplbmR1U2VsZWN0QnV0dG9uRGlyZWN0aXZlO1xuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIC8qKlxuICAgKiBHZXQgZHJvcGRvd24gZGlyZWN0aW9uIGNsYXNzIGJhc2VkIG9uIHByZWZlcnJlZE9wZW5EaXJlY3Rpb25cbiAgICovXG4gIGdldERyb3Bkb3duRGlyZWN0aW9uQ2xhc3MoKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMucHJlZmVycmVkT3BlbkRpcmVjdGlvbikge1xuICAgICAgY2FzZSAndXAnOlxuICAgICAgICByZXR1cm4gJ2Ryb3Bkb3duLXVwJztcbiAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICByZXR1cm4gJ2Ryb3Bkb3duLWRvd24nO1xuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5zaG91bGRPcGVuVXB3YXJkKDMyMCkgPyAnZHJvcGRvd24tdXAnIDogJ2Ryb3Bkb3duLWRvd24nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkT3BlblVwd2FyZChkcm9wZG93bkhlaWdodDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b20pIDwgZHJvcGRvd25IZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBpY29uIHBhdGggd2l0aCBmYWxsYmFjayB0byBhc3NldHMgZm9sZGVyXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVJY29uUGF0aChpY29uTmFtZT86IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghaWNvbk5hbWUpIHJldHVybiBudWxsO1xuICAgIFxuICAgIC8vIElmIGl0J3MgYWxyZWFkeSBhIGZ1bGwgcGF0aCBvciBVUkwsIHJldHVybiBhcyBpc1xuICAgIGlmIChpY29uTmFtZS5pbmNsdWRlcygnLycpIHx8IGljb25OYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHJldHVybiBpY29uTmFtZTtcbiAgICB9XG4gICAgXG4gICAgLy8gVHJ5IGFzc2V0cyBmb2xkZXIgd2l0aCAuc3ZnIGV4dGVuc2lvblxuICAgIHJldHVybiBgYXNzZXRzL25nLXplbmR1aXQvaWNvbnMvJHtpY29uTmFtZX0uc3ZnYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaWNvbiBmb3IgZGlzcGxheSAod2l0aCBmYWxsYmFjayBsb2dpYylcbiAgICovXG4gIHB1YmxpYyBnZXRJY29uUGF0aChvcHRpb24/OiBTZWxlY3RPcHRpb24sIGxlYWRpbmdJY29uPzogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gUHJpb3JpdHk6IGxlYWRpbmdJY29uIC0+IG9wdGlvbi5pY29uIC0+IG9wdGlvbi5pY29uTmFtZSAtPiBhc3NldHMve2ljb25OYW1lfS5zdmdcbiAgICBpZiAobGVhZGluZ0ljb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVJY29uUGF0aChsZWFkaW5nSWNvbik7XG4gICAgfVxuICAgIFxuICAgIGlmIChvcHRpb24/Lmljb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVJY29uUGF0aChvcHRpb24uaWNvbik7XG4gICAgfVxuICAgIFxuICAgIGlmIChvcHRpb24/Lmljb25OYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlSWNvblBhdGgob3B0aW9uLmljb25OYW1lKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgXG4gIG5nT25DaGFuZ2VzKGNoYW5nZU9iajogeyBba2V5OiBzdHJpbmddOiB7IGN1cnJlbnRWYWx1ZTogdW5rbm93bjsgcHJldmlvdXNWYWx1ZTogdW5rbm93bjsgZmlyc3RDaGFuZ2U6IGJvb2xlYW4gfSB9KTogdm9pZCB7XG4gICAgdGhpcy5pc1RyZWVNb2RlID0gdGhpcy5vcHRpb25zPy5zb21lKChvcHQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBvcHQuY2hpbGRyZW4gfHwgb3B0LkNoaWxkcmVuIHx8IG9wdC5DaGlsZHJlbnM7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiYgY2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICB9KSA/PyBmYWxzZTtcbiAgICBpZiAodGhpcy5pc1RyZWVNb2RlKSB7XG4gICAgICB0aGlzLmluaXRUcmVlRGF0YSgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZURpc3BsYXkoKTtcbiAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG5cbiAgICBpZiAoY2hhbmdlT2JqW1wic2VsZWN0TW9kZWxcIl0pIHtcbiAgICAgIGlmICh0aGlzLmlzTGF6eUxvYWRpbmcgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSAmJiB0aGlzLnNlbGVjdE1vZGVsLmxlbmd0aCkge1xuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyZWRPcHRpb25zPy5sZW5ndGggJiYgIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgLy8gcHJlbG9hZCBkYXRhIHRvIHNob3cgdGhlIGxhYmVsc1xuICAgICAgICAgIHRoaXMubG9hZE1vcmUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUb2dnbGUgZHJvcGRvd25cbiAgICovXG4gIHRvZ2dsZURyb3Bkb3duKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgXG4gICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBvcHRpb24gc2VsZWN0aW9uXG4gICAqL1xuICBzZWxlY3RPcHRpb24ob3B0aW9uOiBTZWxlY3RPcHRpb24pOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbiA9IG9wdGlvbjtcbiAgICBjb25zdCBvcHRpb25WYWx1ZSA9IHRoaXMucmV0dXJuT3B0aW9uID8gb3B0aW9uIDogdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb24pO1xuICAgIFxuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgIHRoaXMudG9nZ2xlTXVsdGlzZWxlY3RPcHRpb24ob3B0aW9uVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdE1vZGVsID0gb3B0aW9uVmFsdWU7XG4gICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgLy8gVXBkYXRlIHNlYXJjaCBpbnB1dCB2YWx1ZSBmb3Igc2VhcmNoIHR5cGVcbiAgICAgIGlmICh0aGlzLmxlYWRpbmdUeXBlID09PSAnc2VhcmNoJykge1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0VmFsdWUgPSB0aGlzLmdldE9wdGlvbkRpc3BsYXkob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgdGhpcy51cGRhdGVEaXNwbGF5KCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUb2dnbGUgb3B0aW9uIGluIG11bHRpc2VsZWN0IG1vZGVcbiAgICovXG4gIHByaXZhdGUgdG9nZ2xlTXVsdGlzZWxlY3RPcHRpb24odmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSkge1xuICAgICAgdGhpcy5zZWxlY3RNb2RlbCA9IFtdO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RWxlbWVudEluZGV4KHZhbHVlKTtcbiAgICBcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICB0aGlzLnNlbGVjdE1vZGVsLnB1c2godmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdE1vZGVsLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMudXBkYXRlTGFiZWwoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIG9wdGlvbiBpcyBzZWxlY3RlZFxuICAgKi9cbiAgaXNTZWxlY3RlZChvcHRpb246IFNlbGVjdE9wdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzTW9kZWxFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG9wdGlvbklkID0gdGhpcy5nZXRJZChvcHRpb24pO1xuICAgIFxuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZWwuZmluZEluZGV4KGVsID0+IHRoaXMuZ2V0SWQoZWwgYXMgU2VsZWN0T3B0aW9uKSA9PT0gb3B0aW9uSWQpID49IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmdldElkKHRoaXMuc2VsZWN0TW9kZWwgYXMgU2VsZWN0T3B0aW9uKSA9PT0gb3B0aW9uSWQ7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGRpc3BsYXkgdGV4dCBmb3Igb3B0aW9uXG4gICAqL1xuICBnZXRPcHRpb25EaXNwbGF5KG9wdGlvbjogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgb3B0aW9uICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5kaXNwbGF5UHJvcCkge1xuICAgICAgICBjb25zdCBjb21iaW5lZFByb3BzID0gdGhpcy5kaXNwbGF5UHJvcC5zcGxpdChcInxcIilcbiAgICAgICAgICAubWFwKGkgPT4gdGhpcy5nZXRSZWN1cnNpdmVQcm9wZXJ0eShvcHRpb24sIGkpKVxuICAgICAgICAgIC5maWx0ZXIodiA9PiB2KSAvLyBGaWx0ZXIgb3V0IG51bGwgdmFsdWVzXG4gICAgICAgICAgLmpvaW4oXCIgXCIpO1xuICAgICAgICByZXR1cm4gY29tYmluZWRQcm9wcyB8fCAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FwcC1TZWxlY3Q6IHdoZW4gdXNpbmcgb2JqZWN0cyBhcyBtb2RlbCwgYSBkaXNwbGF5UHJvcCB2YWx1ZSBpcyBtYW5kYXRvcnkuJyk7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9wdGlvbik7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBBbGlhcyBmb3IgZ2V0T3B0aW9uRGlzcGxheSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgKi9cbiAgcHVibGljIGdldE5hbWUob3B0aW9uOiBzdHJpbmcgfCBvYmplY3QpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkRpc3BsYXkob3B0aW9uKTtcbiAgfVxuICBcbiAgXG4gIC8qKlxuICAgKiBHZXQgdmFsdWUgZm9yIG9wdGlvbiAodXNpbmcgaWRQcm9wKVxuICAgKi9cbiAgZ2V0T3B0aW9uVmFsdWUob3B0aW9uOiBTZWxlY3RPcHRpb24pOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldElkKG9wdGlvbik7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgaWQgdmFsdWUgZnJvbSBvcHRpb25cbiAgICovXG4gIHByaXZhdGUgZ2V0SWQob3B0aW9uOiBzdHJpbmcgfCBudW1iZXIgfCBvYmplY3QpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb24gIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlkUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpdmVQcm9wZXJ0eShvcHRpb24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHRoaXMuaWRQcm9wKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FwcC1TZWxlY3Q6IHdoZW4gdXNpbmcgb2JqZWN0cyBhcyBtb2RlbCwgYSBpZFByb3AgdmFsdWUgaXMgbWFuZGF0b3J5LicpO1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbiBhcyBzdHJpbmcgfCBudW1iZXI7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIGRpc3BsYXllZCB0ZXh0XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZURpc3BsYXkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNNb2RlbEVtcHR5KCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREaXNwbGF5ID0gJyc7XG4gICAgICB0aGlzLmxhYmVsVGV4dCA9ICcnO1xuICAgICAgLy8gQWxzbyBjbGVhciBzZWFyY2ggaW5wdXQgZm9yIHNlYXJjaCB0eXBlXG4gICAgICBpZiAodGhpcy5sZWFkaW5nVHlwZSA9PT0gJ3NlYXJjaCcpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dFZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0TW9kZWwubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuZmluZE9wdGlvbkJ5VmFsdWUodGhpcy5zZWxlY3RNb2RlbFswXSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREaXNwbGF5ID0gb3B0aW9uID8gdGhpcy5nZXRPcHRpb25EaXNwbGF5KG9wdGlvbikgOiAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREaXNwbGF5ID0gYCR7dGhpcy5zZWxlY3RNb2RlbC5sZW5ndGh9IHNlbGVjdGVkYDtcbiAgICAgIH1cbiAgICAgIC8vIEZvciBtdWx0aXNlbGVjdCBzZWFyY2ggdHlwZSwgc2hvdyBjb3VudCBpbiBzZWFyY2ggaW5wdXQgd2hlbiBjbG9zZWRcbiAgICAgIGlmICh0aGlzLmxlYWRpbmdUeXBlID09PSAnc2VhcmNoJyAmJiAhdGhpcy5zZWFyY2hGb2N1c2VkKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWREaXNwbGF5O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmZpbmRPcHRpb25CeVZhbHVlKHRoaXMuc2VsZWN0TW9kZWwpO1xuICAgICAgdGhpcy5zZWxlY3RlZERpc3BsYXkgPSBvcHRpb24gPyB0aGlzLmdldE9wdGlvbkRpc3BsYXkob3B0aW9uKSA6ICcnO1xuICAgICAgLy8gQWxzbyB1cGRhdGUgc2VhcmNoIGlucHV0IGZvciBzZWFyY2ggdHlwZVxuICAgICAgaWYgKHRoaXMubGVhZGluZ1R5cGUgPT09ICdzZWFyY2gnICYmIG9wdGlvbikge1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0VmFsdWUgPSB0aGlzLmdldE9wdGlvbkRpc3BsYXkob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGaW5kIG9wdGlvbiBieSB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kT3B0aW9uQnlWYWx1ZSh2YWx1ZTogYW55KTogU2VsZWN0T3B0aW9uIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMucmV0dXJuT3B0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQob3B0ID0+IG9wdCA9PT0gdmFsdWUpIHx8IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmluZChvcHQgPT4gdGhpcy5nZXRJZChvcHQpID09PSB2YWx1ZSkgfHwgbnVsbDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIG1vZGVsIGlzIGVtcHR5XG4gICAqL1xuICBwdWJsaWMgaXNNb2RlbEVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgIHJldHVybiAhQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSB8fCAhdGhpcy5zZWxlY3RNb2RlbC5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGVsID09PSBudWxsIHx8IHRoaXMuc2VsZWN0TW9kZWwgPT09IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgZWxlbWVudCBpbmRleCBpbiBtdWx0aXNlbGVjdCBhcnJheVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50SW5kZXgodmFsdWU6IGFueSk6IG51bWJlciB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0TW9kZWwpKSByZXR1cm4gLTE7XG4gICAgXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IHZhbHVlSWQgPSB0aGlzLmdldElkKHZhbHVlKTtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGVsLmZpbmRJbmRleChlbCA9PiB0aGlzLmdldElkKGVsIGFzIFNlbGVjdE9wdGlvbikgPT09IHZhbHVlSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlbC5pbmRleE9mKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUb2dnbGUgYWxsIG9wdGlvbnMgaW4gbXVsdGlzZWxlY3RcbiAgICovXG4gIHB1YmxpYyB0b2dnbGVBbGwoKTogdm9pZCB7XG4gICAgY29uc3QgbW9kZWxBcnJheSA9IEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RNb2RlbCkgPyB0aGlzLnNlbGVjdE1vZGVsIDogW107XG4gICAgaWYgKG1vZGVsQXJyYXkubGVuZ3RoICE9PSB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdE1vZGVsID0gdGhpcy5vcHRpb25zLm1hcCgoZWw6IFNlbGVjdE9wdGlvbikgPT4gdGhpcy5yZXR1cm5PcHRpb24gPyBlbCA6IHRoaXMuZ2V0SWQoZWwpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RNb2RlbCA9IFtdO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXkoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUb2dnbGUgU2VsZWN0IEFsbCBvcHRpb24gZm9yIGZsYXQgbXVsdGlzZWxlY3RcbiAgICovXG4gIHB1YmxpYyB0b2dnbGVTZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICAvLyBEZXNlbGVjdCBhbGxcbiAgICAgIHRoaXMuc2VsZWN0TW9kZWwgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VsZWN0IGFsbCBmaWx0ZXJlZCBvcHRpb25zXG4gICAgICB0aGlzLnNlbGVjdE1vZGVsID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubWFwKChlbDogU2VsZWN0T3B0aW9uKSA9PiBcbiAgICAgICAgdGhpcy5yZXR1cm5PcHRpb24gPyBlbCA6IHRoaXMuZ2V0SWQoZWwpXG4gICAgICApO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXkoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbGwgZmlsdGVyZWQgb3B0aW9ucyBhcmUgc2VsZWN0ZWRcbiAgICovXG4gIHB1YmxpYyBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc011bHRpc2VsZWN0IHx8ICFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0TW9kZWwpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgYWxsIGZpbHRlcmVkIG9wdGlvbnMgYXJlIGluIHRoZSBzZWxlY3RNb2RlbFxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5ldmVyeShvcHRpb24gPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uSWQgPSB0aGlzLmdldElkKG9wdGlvbik7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlbC5zb21lKChzZWxlY3RlZDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLnJldHVybk9wdGlvbiA/IHRoaXMuZ2V0SWQoc2VsZWN0ZWQpIDogc2VsZWN0ZWQ7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZElkID09PSBvcHRpb25JZDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHJlY3Vyc2l2ZSBwcm9wZXJ0eSBmcm9tIG5lc3RlZCBvYmplY3RcbiAgICovXG4gIHByaXZhdGUgZ2V0UmVjdXJzaXZlUHJvcGVydHkob2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgob2JqLCB4KSA9PiB7XG4gICAgICBpZiAob2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHggaW4gb2JqKSB7XG4gICAgICAgIHJldHVybiAob2JqIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVt4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sIG9iamVjdCBhcyB1bmtub3duKSBhcyBzdHJpbmcgfCBudW1iZXI7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgbGFiZWwgdGV4dFxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUxhYmVsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9kZWxFbXB0eSgpKSB7XG4gICAgICB0aGlzLmxhYmVsVGV4dCA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0ICYmIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RNb2RlbCkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ291bnQgPSB0aGlzLnNlbGVjdE1vZGVsLmxlbmd0aDtcbiAgICAgIFxuICAgICAgaWYgKHNlbGVjdGVkQ291bnQgPT09IDEpIHtcbiAgICAgICAgdGhpcy5sYWJlbFRleHQgPSB0aGlzLmdldE5hbWVGcm9tVmFsdWUodGhpcy5zZWxlY3RNb2RlbFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhYmVsVGV4dCA9IGAke3NlbGVjdGVkQ291bnR9IFNlbGVjdGVkYDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYWJlbFRleHQgPSB0aGlzLmdldE5hbWVGcm9tVmFsdWUodGhpcy5zZWxlY3RNb2RlbCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IG5hbWUgZnJvbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGdldE5hbWVGcm9tVmFsdWUodmFsOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnJldHVybk9wdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uRGlzcGxheSh2YWwgYXMgU2VsZWN0T3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNMYXp5TG9hZGluZykge1xuICAgICAgICBjb25zdCBvcHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucz8uZmluZChpID0+IHRoaXMuZ2V0SWQoaSkgPT0gdmFsKTtcbiAgICAgICAgcmV0dXJuIG9wdCA/IHRoaXMuZ2V0T3B0aW9uRGlzcGxheShvcHQpIDogU3RyaW5nKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucyB8fCAhdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBsZXQgb3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoZWwgPT4gdGhpcy5nZXRJZChlbCkgPT09IHZhbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkRpc3BsYXkob3B0aW9uID8/IHZhbCBhcyBTZWxlY3RPcHRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEVtaXQgY2hhbmdlIGV2ZW50XG4gICAqL1xuICBwcml2YXRlIGVtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgLy8gbm90aWZ5IHdpdGggdGltZW91dFxuICAgIC8vIGFsbG93IG91dHB1dCBwcm9wZXJ0eSBcImVuYWJsZWRcIiBhcHBsaWVkIGJ5IHBhcmVudCBmaXJzdCBhbmQgdGhlbiBlbWl0IHRoZSBvbkNoYW5nZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RNb2RlbENoYW5nZS5lbWl0KHRoaXMuc2VsZWN0TW9kZWwpO1xuICAgIH0sIDEpO1xuICB9XG4gIFxuICAvKipcbiAgICogRmlsdGVyIG9wdGlvbnMgYmFzZWQgb24gc2VhcmNoXG4gICAqL1xuICBmaWx0ZXJPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFsuLi50aGlzLm9wdGlvbnNdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaExvd2VyID0gdGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiB7XG4gICAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5nZXRPcHRpb25EaXNwbGF5KG9wdGlvbikudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBkaXNwbGF5LmluY2x1ZGVzKHNlYXJjaExvd2VyKTtcbiAgICB9KTtcblxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIHNlYXJjaCBpbnB1dFxuICAgKi9cbiAgb25TZWFyY2hDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gIH1cblxuICBjbGVhclNlYXJjaCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBzZWFyY2ggaW5wdXQgY2hhbmdlIGZvciBzZWFyY2ggdHlwZVxuICAgKi9cbiAgb25TZWFyY2hJbnB1dENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB0aGlzLnNlYXJjaElucHV0VmFsdWU7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gICAgaWYgKCF0aGlzLmlzT3BlbiAmJiB0aGlzLnNlYXJjaElucHV0VmFsdWUpIHtcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgc2VhcmNoIGlucHV0IGZvY3VzXG4gICAqL1xuICBvblNlYXJjaEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRm9jdXNlZCA9IHRydWU7XG4gICAgLy8gQ2xlYXIgdGhlIHNlYXJjaCBpbnB1dCB3aGVuIGZvY3VzZWQgc28gdXNlciBjYW4gdHlwZSBmcmVzaFxuICAgIHRoaXMuc2VhcmNoSW5wdXRWYWx1ZSA9ICcnO1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICAgIC8vIE9wZW4gZHJvcGRvd24gdG8gc2hvdyBhbGwgb3B0aW9uc1xuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAvLyBSZXNldCBmaWx0ZXJlZCBvcHRpb25zIHRvIHNob3cgYWxsXG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgc2VhcmNoIGlucHV0IGJsdXJcbiAgICovXG4gIG9uU2VhcmNoQmx1cihldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIC8vIERvbid0IGNsb3NlIGltbWVkaWF0ZWx5IGlmIGNsaWNraW5nIG9uIGRyb3Bkb3duXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmICghcmVsYXRlZFRhcmdldCB8fCAhdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMocmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICB0aGlzLnNlYXJjaElucHV0VmFsdWUgPSB0aGlzLnNlbGVjdGVkRGlzcGxheTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDIwMCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgc2VsZWN0ZWQgb3B0aW9uIGZvciBsZWFkaW5nIGRpc3BsYXlcbiAgICovXG4gIGdldFNlbGVjdGVkT3B0aW9uKCk6IFNlbGVjdE9wdGlvbiB8IG51bGwge1xuICAgIGlmICghdGhpcy5zZWxlY3RNb2RlbCkgcmV0dXJuIG51bGw7XG4gICAgXG4gICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCAmJiBBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0TW9kZWwpKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RNb2RlbC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZE9wdGlvbkJ5VmFsdWUodGhpcy5zZWxlY3RNb2RlbFswXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHRoaXMuZmluZE9wdGlvbkJ5VmFsdWUodGhpcy5zZWxlY3RNb2RlbCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgc2VsZWN0ZWQgc2Vjb25kYXJ5IHRleHQgZm9yIGRpc3BsYXlcbiAgICovXG4gIGdldFNlbGVjdGVkU2Vjb25kYXJ5VGV4dCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0TW9kZWwpIHJldHVybiBudWxsO1xuICAgIFxuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0TW9kZWwubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuZmluZE9wdGlvbkJ5VmFsdWUodGhpcy5zZWxlY3RNb2RlbFswXSk7XG4gICAgICAgIHJldHVybiBvcHRpb24/LnNlY29uZGFyeVRleHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIEZvciBtdWx0aXBsZSBzZWxlY3Rpb24sIHdlIHdvbid0IHNob3cgc2Vjb25kYXJ5IHRleHQgdG8gYXZvaWQgY29uZnVzaW9uXG4gICAgICByZXR1cm4gbnVsbDsgXG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuZmluZE9wdGlvbkJ5VmFsdWUodGhpcy5zZWxlY3RNb2RlbCk7XG4gICAgcmV0dXJuIG9wdGlvbj8uc2Vjb25kYXJ5VGV4dCB8fCBudWxsO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xvc2UgZHJvcGRvd24gb24gb3V0c2lkZSBjbGlja1xuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuaGlkZURyb3BEb3duKHRydWUpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEhpZGUgZHJvcGRvd25cbiAgICovXG4gIHB1YmxpYyBhc3luYyBoaWRlRHJvcERvd24odXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gT25seSBlbWl0IGNsb3NlZCBldmVudCBpZiBpdCB3YXMgb3BlbiBBTkQgdHJpZ2dlcmVkIGJ5IHVzZXIgYWN0aW9uXG4gICAgaWYgKHVzZXJBY3Rpb24gJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuY2xvc2VkLmVtaXQodGhpcy5zZWxlY3RNb2RlbCk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgRW50ZXIga2V5IG9uIHNlYXJjaCBpbnB1dFxuICAgKi9cbiAgb25TZWFyY2hFbnRlcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLmVuYWJsZUFkZE5ld09wdGlvbiAmJiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDAgJiYgKHRoaXMuc2VhcmNoVGV4dCB8fCB0aGlzLnNlYXJjaElucHV0VmFsdWUpPy50cmltKCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlQWRkTmV3T3B0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhZGQgbmV3IG9wdGlvblxuICAgKi9cbiAgcHVibGljIGhhbmRsZUFkZE5ld09wdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmFkZE5ld09wdGlvbi5lbWl0KHsgdmFsdWU6IHRoaXMuc2VhcmNoVGV4dCB8fCB0aGlzLnNlYXJjaElucHV0VmFsdWUgfSk7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5zZWFyY2hJbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gICAgdGhpcy5oaWRlRHJvcERvd24odHJ1ZSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgcmVtb3ZlIG9wdGlvblxuICAgKi9cbiAgcHVibGljIGhhbmRsZVJlbW92ZU9wdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZU9wdGlvbi5lbWl0KHsgcmVtb3ZlZDogdHJ1ZSB9KTtcbiAgICB0aGlzLmhpZGVEcm9wRG93bih0cnVlKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBzdGF0ZSBjbGFzc2VzXG4gICAqL1xuICBnZXRTdGF0ZUNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGFzc2VzID0gWydhcHAtc2VsZWN0LWNvbnRhaW5lciddO1xuICAgIFxuICAgIGlmICh0aGlzLmlzT3BlbikgY2xhc3Nlcy5wdXNoKCdvcGVuJyk7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIGNsYXNzZXMucHVzaCgnZGlzYWJsZWQnKTtcbiAgICBpZiAodGhpcy5lcnJvcikgY2xhc3Nlcy5wdXNoKCdlcnJvcicpO1xuICAgIGlmICh0aGlzLmRlc3RydWN0aXZlKSBjbGFzc2VzLnB1c2goJ2Rlc3RydWN0aXZlJyk7XG4gICAgaWYgKHRoaXMubGFiZWwpIGNsYXNzZXMucHVzaCgnd2l0aC1sYWJlbCcpO1xuICAgIGlmICh0aGlzLnN1cHBvcnRpbmdUZXh0KSBjbGFzc2VzLnB1c2goJ3dpdGgtc3VwcG9ydGluZycpO1xuICAgIFxuICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIExvYWQgbW9yZSBpdGVtcyBmb3IgbGF6eSBsb2FkaW5nXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZE1vcmUoc2hvd1NlbGVjdGVkT25Ub3A6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmdOb3cgPSB0cnVlO1xuICAgICAgaWYgKCF0aGlzLmxhenlMb2FkZXIpIHtcbiAgICAgICAgdGhyb3cgYGxvYWRlciBpcyBub3QgYXZhaWxhYmxlYDtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5maWx0ZXJlZE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gbG9hZCBmaXJzdCAxMCByZWNvcmRzIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgY29uc3QgbGltaXQgPSAodGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09IDApID8gMTAgOiAxMDA7XG4gICAgICBsZXQgbmV3SXRlbXM6IExhenlMb2FkZXJSZXN1bHRbXSA9IGF3YWl0IHRoaXMubGF6eUxvYWRlcih7IHRleHQ6IHRoaXMuc2VhcmNoVGV4dCB8fCBcIlwiIH0sIHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCwgbGltaXQpO1xuICAgICAgXG4gICAgICB0aGlzLmNhbkxvYWRNb3JlID0gKG5ld0l0ZW1zLmxlbmd0aCA9PSBsaW1pdCk7XG4gICAgICBcbiAgICAgIC8vIHRoZSBzZWxlY3RNb2RlbCBjb250YWlucyB0aGUgc2VsZWN0ZWQgaXRlbXMgaWRzICBcbiAgICAgIGNvbnN0IGNoZWNrZWRJZHMgPSBBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0TW9kZWwpIFxuICAgICAgICA/IHRoaXMuc2VsZWN0TW9kZWwubWFwKGl0ZW0gPT4gU3RyaW5nKHRoaXMuZ2V0SWQoaXRlbSBhcyBTZWxlY3RPcHRpb24pKSlcbiAgICAgICAgOiBbXTtcbiAgICAgIFxuICAgICAgaWYgKHNob3dTZWxlY3RlZE9uVG9wICYmIGNoZWNrZWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICAvLyByZW1vdmUgdGhlIGNoZWNrZWQgaXRlbXMgZmlyc3RcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maWx0ZXIoaSA9PiAhY2hlY2tlZElkcy5pbmNsdWRlcyhTdHJpbmcodGhpcy5nZXRJZChpKSkpKTtcbiAgICAgICAgbmV3SXRlbXMgPSBuZXdJdGVtcy5maWx0ZXIoaSA9PiAhY2hlY2tlZElkcy5pbmNsdWRlcyhTdHJpbmcoaS5pZCkpKTtcbiAgICAgICAgXG4gICAgICAgIC8vIGFkZCBhbGwgY2hlY2tlZCBpdGVtcyB0byB0aGUgdG9wXG4gICAgICAgIGNvbnN0IGNoZWNrZWRJdGVtczogTGF6eUxvYWRlclJlc3VsdFtdID0gYXdhaXQgdGhpcy5sYXp5TG9hZGVyKHsgaWRzOiBjaGVja2VkSWRzIH0sIDAsIDEwMCk7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gWy4uLihjaGVja2VkSXRlbXMgYXMgU2VsZWN0T3B0aW9uW10pLCAuLi50aGlzLmZpbHRlcmVkT3B0aW9uc107XG4gICAgICAgIFxuICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIHRoZSBmaWx0ZXJlZERhdGFTb3VyY2UgY29udGFpbnMgdGhlIGl0ZW1zIHRoYXQgaXMgdmlzaWJsZSB0byB1c2VyIGF0IHRoZSBjdXJyZW50IG1vbWVudFxuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4udGhpcy5maWx0ZXJlZE9wdGlvbnMsIC4uLihuZXdJdGVtcyBhcyBTZWxlY3RPcHRpb25bXSldO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZ05vdyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRyZWUgZGF0YSBieSBzeW5jaW5nIHNlbGVjdE1vZGVsIElEcyB0byBEYXRhU291cmNlIGNoZWNrZWQgZmxhZ3NcbiAgICovXG4gIHByaXZhdGUgaW5pdFRyZWVEYXRhKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1RyZWVNb2RlIHx8ICF0aGlzLm9wdGlvbnM/Lmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gbmV3IFNldChcbiAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RNb2RlbClcbiAgICAgICAgPyB0aGlzLnNlbGVjdE1vZGVsLm1hcCh2ID0+IFN0cmluZyh0eXBlb2YgdiA9PT0gJ29iamVjdCcgPyB0aGlzLmdldElkKHYpIDogdikpXG4gICAgICAgIDogW11cbiAgICApO1xuICAgICh0aGlzLm9wdGlvbnMgYXMgYW55W10pLmZvckVhY2gob3B0ID0+IHtcbiAgICAgIG9wdC5jaGVja2VkID0gc2VsZWN0ZWRJZHMuaGFzKFN0cmluZyhvcHRbdGhpcy5pZFByb3BdKSk7XG4gICAgfSk7XG4gICAgdGhpcy50cmVlRmlsdGVyZWREYXRhU291cmNlID0gWy4uLnRoaXMub3B0aW9uc10gYXMgRGF0YVNvdXJjZVtdO1xuICAgIHRoaXMudXBkYXRlVHJlZVNlbGVjdEFsbFN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNoZWNrZWQgY2hhbmdlIGZyb20gemVuLWdyb3VwcyBpbiB0cmVlIG1vZGVcbiAgICovXG4gIHB1YmxpYyBvblRyZWVDaGVja2VkQ2hhbmdlKGRzSXRlbTogRGF0YVNvdXJjZSk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrZWRJdGVtcyA9ICh0aGlzLm9wdGlvbnMgYXMgYW55W10pLmZpbHRlcihvcHQgPT4gb3B0LmNoZWNrZWQpO1xuICAgIHRoaXMuc2VsZWN0TW9kZWwgPSBjaGVja2VkSXRlbXMubWFwKG9wdCA9PlxuICAgICAgdGhpcy5yZXR1cm5PcHRpb24gPyBvcHQgOiBvcHRbdGhpcy5pZFByb3BdXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVRyZWVTZWxlY3RBbGxTdGF0ZSgpO1xuICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIHRoaXMudXBkYXRlRGlzcGxheSgpO1xuICAgIHRoaXMudXBkYXRlTGFiZWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc2VsZWN0IGFsbCBjaGFuZ2UgZnJvbSB6ZW4tZ3JvdXBzIGluIHRyZWUgbW9kZVxuICAgKi9cbiAgcHVibGljIG9uVHJlZVNlbGVjdEFsbENoYW5nZShpc1NlbGVjdGVkQWxsOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc1NlbGVjdGVkQWxsID0gaXNTZWxlY3RlZEFsbDtcbiAgICBjb25zdCBjaGVja2VkSXRlbXMgPSAodGhpcy5vcHRpb25zIGFzIGFueVtdKS5maWx0ZXIob3B0ID0+IG9wdC5jaGVja2VkKTtcbiAgICB0aGlzLnNlbGVjdE1vZGVsID0gY2hlY2tlZEl0ZW1zLm1hcChvcHQgPT5cbiAgICAgIHRoaXMucmV0dXJuT3B0aW9uID8gb3B0IDogb3B0W3RoaXMuaWRQcm9wXVxuICAgICk7XG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgdGhpcy51cGRhdGVEaXNwbGF5KCk7XG4gICAgdGhpcy51cGRhdGVMYWJlbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgaXNTZWxlY3RlZEFsbCBmbGFnIGJhc2VkIG9uIGN1cnJlbnQgY2hlY2tlZCBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUcmVlU2VsZWN0QWxsU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnM/Lmxlbmd0aCkgcmV0dXJuO1xuICAgIHRoaXMuaXNTZWxlY3RlZEFsbCA9ICh0aGlzLm9wdGlvbnMgYXMgYW55W10pLmV2ZXJ5KG9wdCA9PiBvcHQuY2hlY2tlZCk7XG4gIH1cblxufSIsIjxkaXYgW2NsYXNzXT1cImdldFN0YXRlQ2xhc3NlcygpXCI+XG4gIDwhLS0gTGFiZWwgLS0+XG4gIDxsYWJlbCBjbGFzcz1cImFwcC1zZWxlY3QtbGFiZWwgdGV4dCB0ZXh0LXNtIHRleHQtd2VpZ2h0LW1lZGl1bVwiICpuZ0lmPVwibGFiZWxcIlxuICAgICAgICAgW25nQ2xhc3NdPVwieydyZXF1aXJlZCc6IHJlcXVpcmVkLCAnZGlzYWJsZWQnOiBkaXNhYmxlZCwgJ2Rlc3RydWN0aXZlJzogZGVzdHJ1Y3RpdmV9XCI+XG4gICAge3sgbGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICA8c3BhbiAqbmdJZj1cInJlcXVpcmVkXCIgY2xhc3M9XCJyZXF1aXJlZC1pbmRpY2F0b3JcIj4qPC9zcGFuPlxuICA8L2xhYmVsPlxuXG4gIDwhLS0gU2VsZWN0IElucHV0IC0tPlxuICA8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdC13cmFwcGVyXCI+XG4gICAgPCEtLSBDdXN0b20gVHJpZ2dlciBUZW1wbGF0ZSAob3ZlcnJpZGVzIGJ1aWx0LWluIHRyaWdnZXIpIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJidXR0b25UZW1wbGF0ZVwiXG4gICAgICAgICBjbGFzcz1cImFwcC1zZWxlY3QtY3VzdG9tLXRyaWdnZXJcIlxuICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJidXR0b25UZW1wbGF0ZS50ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXNPcGVuOiBpc09wZW4sIHNlbGVjdGVkOiBnZXRTZWxlY3RlZE9wdGlvbigpLCBkaXNwbGF5OiBzZWxlY3RlZERpc3BsYXksIGRpc2FibGVkOiBkaXNhYmxlZCB9XCI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBCdWlsdC1pbiBUcmlnZ2VyICh3aGVuIG5vIGN1c3RvbSBidXR0b24gdGVtcGxhdGUgcHJvdmlkZWQpIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYnV0dG9uVGVtcGxhdGVcIiBbbmdTd2l0Y2hdPVwibGVhZGluZ1R5cGVcIj5cbiAgICAgIDwhLS0gRGVmYXVsdCBTZWxlY3QgKG5vIGxlYWRpbmcgZWxlbWVudCkgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGVmYXVsdCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRlZmF1bHRTZWxlY3RUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gSWNvbiBMZWFkaW5nIFNlbGVjdCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpY29uJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvblNlbGVjdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBBdmF0YXIgTGVhZGluZyBTZWxlY3QgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYXZhdGFyJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXZhdGFyU2VsZWN0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIERvdCBMZWFkaW5nIFNlbGVjdCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkb3QnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkb3RTZWxlY3RUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gU2VhcmNoIElucHV0IFNlbGVjdCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZWFyY2gnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWFyY2hJbnB1dFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRHJvcGRvd24gTWVudSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdC1kcm9wZG93blwiIFxuICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0RHJvcGRvd25EaXJlY3Rpb25DbGFzcygpXCJcbiAgICAgICAgICpuZ0lmPVwiaXNPcGVuXCI+XG4gICAgICAgIFxuICAgICAgPCEtLSBUcmVlIE1vZGU6IGVtYmVkIHplbi1ncm91cHMgaW5saW5lIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVHJlZU1vZGUgJiYgaXNNdWx0aXNlbGVjdDsgZWxzZSBmbGF0TGlzdFwiPlxuICAgICAgICA8emVuLWdyb3VwcyBbaW5saW5lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCIkYW55KG9wdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcmVkRGF0YVNvdXJjZV09XCJ0cmVlRmlsdGVyZWREYXRhU291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGVTZWxlY3RBbGxdPVwiaGlkZVNlbGVjdEFsbFwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlU2VhcmNoXT1cImhpZGVUcmVlU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkUHJvcF09XCJpZFByb3BcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVByb3BdPVwiZGlzcGxheVByb3BcIlxuICAgICAgICAgICAgICAgICAgICBbKGlzU2VsZWN0ZWRBbGwpXT1cImlzU2VsZWN0ZWRBbGxcIlxuICAgICAgICAgICAgICAgICAgICAoaXNTZWxlY3RlZEFsbENoYW5nZSk9XCJvblRyZWVTZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGVja2VkQ2hhbmdlKT1cIm9uVHJlZUNoZWNrZWRDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8L3plbi1ncm91cHM+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBGbGF0IExpc3QgTW9kZSAoZGVmYXVsdCkgLS0+XG4gICAgICA8bmctdGVtcGxhdGUgI2ZsYXRMaXN0PlxuICAgICAgICA8IS0tIFNlYXJjaCBCb3ggZm9yIGhhc1NlYXJjaCAobm90IGZvciBzZWFyY2ggdHlwZSBhcyBpdCBoYXMgaW5saW5lIHNlYXJjaCkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtc2VsZWN0LXNlYXJjaFwiICpuZ0lmPVwibGVhZGluZ1R5cGUgIT09ICdzZWFyY2gnICYmIGhhc1NlYXJjaCAmJiAhZGlzYWJsZWRcIj5cbiAgICAgICAgICA8emVuLWljb24gW25hbWVdPVwiJ3NlYXJjaCdcIlxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tQ29sb3JdPVwiJyM2NjcwODUnXCI+XG4gICAgICAgICAgPC96ZW4taWNvbj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25TZWFyY2hFbnRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxuICAgICAgICAgICAgICAgICBjbGFzcz1cImFwcC1zZWxlY3Qtc2VhcmNoLWlucHV0XCI+XG4gICAgICAgICAgPHplbi1pY29uICpuZ0lmPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXBwLXNlbGVjdC1zZWFyY2gtY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCIneCdcIlxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tQ29sb3JdPVwiJyM2NjcwODUnXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VhcmNoKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgIDwvemVuLWljb24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gT3B0aW9ucyBMaXN0IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdC1vcHRpb25zXCI+XG4gICAgICAgICAgPCEtLSBTZWxlY3QgQWxsIE9wdGlvbiBmb3IgTXVsdGlzZWxlY3QgLS0+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzTXVsdGlzZWxlY3QgJiYgIWhpZGVTZWxlY3RBbGwgJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhcHAtc2VsZWN0LW9wdGlvbiBzZWxlY3QtYWxsXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWxlY3RBbGwoKVwiPlxuICAgICAgICAgICAgPHplbi1jaGVja2JveCBjbGFzcz1cImFwcC1zZWxlY3QtY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVZhbHVlQ2hhbmdlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIj5cbiAgICAgICAgICAgIDwvemVuLWNoZWNrYm94PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtc2VsZWN0LW9wdGlvbi10ZXh0XCI+XG4gICAgICAgICAgICAgIFNlbGVjdCBBbGxcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDwhLS0gQWRkIE5ldyBPcHRpb24gLS0+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImVuYWJsZUFkZE5ld09wdGlvbiAmJiAoc2hvd0RlZmF1bHRBZGRPcHRpb24gfHwgc2VhcmNoVGV4dClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhcHAtc2VsZWN0LW9wdGlvbiBhZGQtbmV3LW9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWRkTmV3T3B0aW9uKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgPHplbi1pY29uIFtuYW1lXT1cIidwbHVzJ1wiIFtjdXN0b21Db2xvcl09XCInIzEzNkFCNidcIj48L3plbi1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtc2VsZWN0LW9wdGlvbi10ZXh0XCI+XG4gICAgICAgICAgICAgIHt7IChuZXdPcHRpb25UZXh0IHx8ICdBZGQgTmV3IE9wdGlvbicpICsgKHNlYXJjaFRleHQgPyAnOiBcIicgKyBzZWFyY2hUZXh0ICsgJ1wiJyA6ICcnKSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPCEtLSBSZW1vdmUgT3B0aW9uIC0tPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJlbmFibGVSZW1vdmVPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhcHAtc2VsZWN0LW9wdGlvbiByZW1vdmUtb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVSZW1vdmVPcHRpb24oKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICA8emVuLWljb24gW25hbWVdPVwiJ3VzZXIteCdcIiBbY3VzdG9tQ29sb3JdPVwiJyMzNDQwNTQnXCI+PC96ZW4taWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLXNlbGVjdC1vcHRpb24tdGV4dFwiPlxuICAgICAgICAgICAgICB7eyByZW1vdmVPcHRpb25UZXh0IHx8ICdSZW1vdmUnIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCAmJiAhZW5hYmxlQWRkTmV3T3B0aW9uXCIgY2xhc3M9XCJhcHAtc2VsZWN0LW5vLW9wdGlvbnNcIj5cbiAgICAgICAgICAgIE5vIG1hdGNoaW5nIG9wdGlvbnMgZm91bmRcbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhcHAtc2VsZWN0LW9wdGlvblwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPcHRpb24ob3B0aW9uKVwiPlxuXG4gICAgICAgICAgICA8IS0tIENoZWNrYm94IGZvciBNdWx0aXNlbGVjdCAtLT5cbiAgICAgICAgICAgIDx6ZW4tY2hlY2tib3ggY2xhc3M9XCJhcHAtc2VsZWN0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVWYWx1ZUNoYW5nZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIicnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtXCI+XG4gICAgICAgICAgICA8L3plbi1jaGVja2JveD5cblxuICAgICAgICAgICAgPCEtLSBPcHRpb24gTGVhZGluZyBFbGVtZW50IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3Qtb3B0aW9uLWxlYWRpbmdcIiAqbmdJZj1cImxlYWRpbmdUeXBlICE9PSAnZGVmYXVsdCdcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwibGVhZGluZ1R5cGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaWNvbidcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uTGVhZGluZ0VsZW1lbnQ7IGNvbnRleHQ6IHsgb3B0aW9uOiBvcHRpb24gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhdmF0YXInXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXZhdGFyTGVhZGluZ0VsZW1lbnQ7IGNvbnRleHQ6IHsgb3B0aW9uOiBvcHRpb24gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkb3QnXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZG90TGVhZGluZ0VsZW1lbnQ7IGNvbnRleHQ6IHsgb3B0aW9uOiBvcHRpb24gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIE9wdGlvbiBUZXh0IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3Qtb3B0aW9uLXRleHQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8IS0tIFVzZSBjdXN0b20gdGVtcGxhdGUgaWYgcHJvdmlkZWQgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNNdWx0aXNlbGVjdCAmJiBvcHRpb25UZW1wbGF0ZTsgZWxzZSBkZWZhdWx0T3B0aW9uVGV4dFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25UZW1wbGF0ZS50ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbjogb3B0aW9uIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0T3B0aW9uVGV4dD5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFwcC1zZWxlY3Qtb3B0aW9uLXRleHRcIiBbY2xhc3MuYXBwLXNlbGVjdC1vcHRpb24tdHJ1bmNhdGVdPVwiaXNUcnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0TmFtZShvcHRpb24pIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLXNlbGVjdC1vcHRpb24tc2Vjb25kYXJ5XCIgKm5nSWY9XCJvcHRpb24uc2Vjb25kYXJ5VGV4dFwiPlxuICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnNlY29uZGFyeVRleHQgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDaGVjayBJY29uIGZvciBTaW5nbGUgU2VsZWN0IC0tPlxuICAgICAgICAgICAgPHplbi1pY29uICpuZ0lmPVwiIWlzTXVsdGlzZWxlY3QgJiYgaXNTZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFwcC1zZWxlY3Qtb3B0aW9uLWNoZWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInY2hlY2snXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tQ29sb3JdPVwiJyMxMzZBQjYnXCI+XG4gICAgICAgICAgICA8L3plbi1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBcbiAgPCEtLSBIaW50IHRleHQgLyBFcnJvciBtZXNzYWdlIC0tPlxuICA8ZGl2ICpuZ0lmPVwiKGRlc3RydWN0aXZlICYmIGVycm9yTWVzc2FnZSkgfHwgaGludFRleHRcIiBcbiAgICAgICBjbGFzcz1cImFwcC1zZWxlY3QtaGludCB0ZXh0IHRleHQtc20gdGV4dC13ZWlnaHQtcmVndWxhclwiXG4gICAgICAgW25nQ2xhc3NdPVwieydkZXN0cnVjdGl2ZSc6IGRlc3RydWN0aXZlfVwiPlxuICAgIDxpICpuZ0lmPVwiZGVzdHJ1Y3RpdmVcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIGhpbnQtaWNvblwiPmVycm9yX291dGxpbmU8L2k+XG4gICAgPHNwYW4+e3sgKChkZXN0cnVjdGl2ZSAmJiBlcnJvck1lc3NhZ2UpID8gZXJyb3JNZXNzYWdlIDogaGludFRleHQpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT5cbjwhLS0gTUFJTiBTRUxFQ1QgSU5QVVQgVEVNUExBVEVTIC0tPlxuPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+XG5cbjwhLS0gRGVmYXVsdCBTZWxlY3QgVGVtcGxhdGUgKE5vIExlYWRpbmcgRWxlbWVudCkgLS0+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRTZWxlY3RUZW1wbGF0ZT5cbiAgPGJ1dHRvbiBjbGFzcz1cImFwcC1zZWxlY3QtaW5wdXRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIlxuICAgICAgICAgIFtjbGFzcy5mb2N1c2VkXT1cImlzT3BlblwiXG4gICAgICAgICAgW2NsYXNzLmhhcy12YWx1ZV09XCIhaXNNb2RlbEVtcHR5KClcIj5cbiAgICBcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0VmFsdWVEaXNwbGF5XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duQXJyb3dcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEljb24gU2VsZWN0IFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNpY29uU2VsZWN0VGVtcGxhdGU+XG4gIDxidXR0b24gY2xhc3M9XCJhcHAtc2VsZWN0LWlucHV0XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigpXCJcbiAgICAgICAgICBbY2xhc3MuZm9jdXNlZF09XCJpc09wZW5cIlxuICAgICAgICAgIFtjbGFzcy5oYXMtdmFsdWVdPVwiIWlzTW9kZWxFbXB0eSgpXCI+XG4gICAgXG4gICAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3QtbGVhZGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25MZWFkaW5nRWxlbWVudDsgY29udGV4dDogeyBvcHRpb246IGdldFNlbGVjdGVkT3B0aW9uKCksIGljb246IGxlYWRpbmdJY29uIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0VmFsdWVEaXNwbGF5XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duQXJyb3dcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEF2YXRhciBTZWxlY3QgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2F2YXRhclNlbGVjdFRlbXBsYXRlPlxuICA8YnV0dG9uIGNsYXNzPVwiYXBwLXNlbGVjdC1pbnB1dFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiXG4gICAgICAgICAgW2NsYXNzLmZvY3VzZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgICBbY2xhc3MuaGFzLXZhbHVlXT1cIiFpc01vZGVsRW1wdHkoKVwiPlxuICAgIFxuICAgIDxkaXYgY2xhc3M9XCJhcHAtc2VsZWN0LWxlYWRpbmdcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhdmF0YXJMZWFkaW5nRWxlbWVudDsgY29udGV4dDogeyBvcHRpb246IGdldFNlbGVjdGVkT3B0aW9uKCksIGF2YXRhcjogbGVhZGluZ0F2YXRhciB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdFZhbHVlRGlzcGxheVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkFycm93XCI+PC9uZy1jb250YWluZXI+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBEb3QgU2VsZWN0IFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNkb3RTZWxlY3RUZW1wbGF0ZT5cbiAgPGJ1dHRvbiBjbGFzcz1cImFwcC1zZWxlY3QtaW5wdXRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIlxuICAgICAgICAgIFtjbGFzcy5mb2N1c2VkXT1cImlzT3BlblwiXG4gICAgICAgICAgW2NsYXNzLmhhcy12YWx1ZV09XCIhaXNNb2RlbEVtcHR5KClcIj5cbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdC1sZWFkaW5nXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZG90TGVhZGluZ0VsZW1lbnQ7IGNvbnRleHQ6IHsgb3B0aW9uOiBnZXRTZWxlY3RlZE9wdGlvbigpLCBjb2xvcjogbGVhZGluZ0RvdENvbG9yIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0VmFsdWVEaXNwbGF5XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duQXJyb3dcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFNlYXJjaCBJbnB1dCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoSW5wdXRUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3QtaW5wdXQgYXBwLXNlbGVjdC1zZWFyY2gtaW5wdXRcIlxuICAgICAgIFtjbGFzcy5mb2N1c2VkXT1cImlzT3BlbiB8fCBzZWFyY2hGb2N1c2VkXCJcbiAgICAgICBbY2xhc3MuaGFzLXZhbHVlXT1cIiFpc01vZGVsRW1wdHkoKVwiPlxuICAgIFxuICAgIDwhLS0gU2VhcmNoIEljb24gLS0+XG4gICAgPHplbi1pY29uIFtuYW1lXT1cIidzZWFyY2gnXCJcbiAgICAgICAgICAgICAgW2N1c3RvbUNvbG9yXT1cImRpc2FibGVkID8gJyM5Q0EzQUYnIDogJyM2NjcwODUnXCI+XG4gICAgPC96ZW4taWNvbj5cbiAgICBcbiAgICA8IS0tIFNlYXJjaCBJbnB1dCBGaWVsZCAtLT5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICBjbGFzcz1cImFwcC1zZWxlY3Qtc2VhcmNoLWZpZWxkXCJcbiAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hJbnB1dFZhbHVlXCJcbiAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hJbnB1dENoYW5nZSgpXCJcbiAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25TZWFyY2hFbnRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgKGZvY3VzKT1cIm9uU2VhcmNoRm9jdXMoKVwiXG4gICAgICAgICAgIChibHVyKT1cIm9uU2VhcmNoQmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkRGlzcGxheSB8fCBwbGFjZWhvbGRlclwiXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPlxuPCEtLSBTSEFSRUQgQ09NUE9ORU5UIFRFTVBMQVRFUyAtLT5cbjwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPlxuXG48IS0tIFNlbGVjdCBWYWx1ZSBEaXNwbGF5IC0tPlxuPG5nLXRlbXBsYXRlICNzZWxlY3RWYWx1ZURpc3BsYXk+XG4gIDxkaXYgY2xhc3M9XCJhcHAtc2VsZWN0LXZhbHVlLXdyYXBwZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWVUZW1wbGF0ZSAmJiAhaXNNb2RlbEVtcHR5KCk7IGVsc2UgZGVmYXVsdFZhbHVlRGlzcGxheVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInZhbHVlVGVtcGxhdGUudGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbjogZ2V0U2VsZWN0ZWRPcHRpb24oKSwgZGlzcGxheTogc2VsZWN0ZWREaXNwbGF5IH1cIj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VmFsdWVEaXNwbGF5PlxuICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtc2VsZWN0LXZhbHVlXCIgW2NsYXNzLnBsYWNlaG9sZGVyXT1cImlzTW9kZWxFbXB0eSgpXCI+XG4gICAgICAgIHt7IHNlbGVjdGVkRGlzcGxheSB8fCBwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtc2VsZWN0LXNlY29uZGFyeVwiICpuZ0lmPVwiZ2V0U2VsZWN0ZWRTZWNvbmRhcnlUZXh0KCkgJiYgIWlzTW9kZWxFbXB0eSgpXCI+XG4gICAgICAgIHt7IGdldFNlbGVjdGVkU2Vjb25kYXJ5VGV4dCgpIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIERyb3Bkb3duIEFycm93IC0tPlxuPG5nLXRlbXBsYXRlICNkcm9wZG93bkFycm93PlxuICA8emVuLWljb24gY2xhc3M9XCJhcHAtc2VsZWN0LWFycm93XCIgXG4gICAgICAgICAgICBbY2xhc3Mucm90YXRlZF09XCJpc09wZW5cIiBcbiAgICAgICAgICAgIFtuYW1lXT1cIidjaGV2cm9uLWRvd24nXCJcbiAgICAgICAgICAgIFtjdXN0b21Db2xvcl09XCInIzY2NzA4NSdcIj5cbiAgPC96ZW4taWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPlxuPCEtLSBMRUFESU5HIEVMRU1FTlQgVEVNUExBVEVTIC0tPlxuPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+XG5cbjwhLS0gSWNvbiBMZWFkaW5nIEVsZW1lbnQgKHdpdGggc21hcnQgcmVzb2x1dGlvbikgLS0+XG48bmctdGVtcGxhdGUgI2ljb25MZWFkaW5nRWxlbWVudCBsZXQtb3B0aW9uPVwib3B0aW9uXCIgbGV0LWljb249XCJpY29uXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uIHx8IG9wdGlvbj8uaWNvbiB8fCBvcHRpb24/Lmljb25OYW1lXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEljb25QYXRoKG9wdGlvbiwgaWNvbikgYXMgaWNvblBhdGhcIj5cbiAgICAgIDwhLS0gSWYgaWNvbiBjb250YWlucyAvIG9yIC4gdHJlYXQgYXMgU1ZHIHBhdGggLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGljb24gJiYgKGljb24uaW5jbHVkZXMoJy8nKSB8fCBpY29uLmluY2x1ZGVzKCcuJykpKSB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb24/Lmljb24gJiYgKG9wdGlvbi5pY29uLmluY2x1ZGVzKCcvJykgfHwgb3B0aW9uLmljb24uaW5jbHVkZXMoJy4nKSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9uPy5pY29uTmFtZSAmJiAob3B0aW9uLmljb25OYW1lLmluY2x1ZGVzKCcvJykgfHwgb3B0aW9uLmljb25OYW1lLmluY2x1ZGVzKCcuJykpKVwiPlxuICAgICAgICA8IS0tIFVzZSBpbWcgdGFnIGZvciBFeGNlbCB0byBwcmVzZXJ2ZSBjb2xvcnMgLS0+XG4gICAgICAgIDxpbWcgKm5nSWY9XCJpY29uUGF0aC5pbmNsdWRlcygnZXhjZWwnKVwiIFxuICAgICAgICAgICAgIFtzcmNdPVwiaWNvblBhdGhcIiBcbiAgICAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDIwcHg7IGhlaWdodDogMjBweDtcIj5cbiAgICAgICAgPCEtLSBVc2UgemVuLWljb24gd2l0aCBzcmMgZm9yIG90aGVyIFNWRyBmaWxlcyAtLT5cbiAgICAgICAgPHplbi1pY29uICpuZ0lmPVwiIWljb25QYXRoLmluY2x1ZGVzKCdleGNlbCcpXCJcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaWNvblBhdGhcIlxuICAgICAgICAgICAgICAgICAgW2N1c3RvbUNvbG9yXT1cIicjNjY3MDg1J1wiPlxuICAgICAgICA8L3plbi1pY29uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8IS0tIE90aGVyd2lzZSB0cmVhdCBhcyBNYXRlcmlhbCBpY29uIG5hbWUgb3Igc3BlY2lhbCBjYXNlcyAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKChpY29uICYmIChpY29uLmluY2x1ZGVzKCcvJykgfHwgaWNvbi5pbmNsdWRlcygnLicpKSkgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbj8uaWNvbiAmJiAob3B0aW9uLmljb24uaW5jbHVkZXMoJy8nKSB8fCBvcHRpb24uaWNvbi5pbmNsdWRlcygnLicpKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9uPy5pY29uTmFtZSAmJiAob3B0aW9uLmljb25OYW1lLmluY2x1ZGVzKCcvJykgfHwgb3B0aW9uLmljb25OYW1lLmluY2x1ZGVzKCcuJykpKSlcIj5cbiAgICAgICAgPCEtLSBTcGVjaWFsIGNhc2UgZm9yIEV4Y2VsIGljb24gLSB1c2UgaW1nIHRvIHByZXNlcnZlIGNvbG9ycyAtLT5cbiAgICAgICAgPGltZyAqbmdJZj1cIihpY29uID09PSAnZXhjZWwnKSB8fCAob3B0aW9uPy5pY29uID09PSAnZXhjZWwnKSB8fCAob3B0aW9uPy5pY29uTmFtZSA9PT0gJ2V4Y2VsJylcIlxuICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9uZy16ZW5kdWl0L2ljb25zL2V4Y2VsLnN2Z1wiXG4gICAgICAgICAgICAgYWx0PVwiRXhjZWxcIlxuICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDIwcHg7IGhlaWdodDogMjBweDtcIj5cbiAgICAgICAgPCEtLSBNYXRlcmlhbCBpY29uIG5hbWVzIC0tPlxuICAgICAgICA8emVuLWljb24gKm5nSWY9XCIoaWNvbiAhPT0gJ2V4Y2VsJykgJiYgKG9wdGlvbj8uaWNvbiAhPT0gJ2V4Y2VsJykgJiYgKG9wdGlvbj8uaWNvbk5hbWUgIT09ICdleGNlbCcpXCJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImljb24gfHwgb3B0aW9uPy5pY29uIHx8IG9wdGlvbj8uaWNvbk5hbWVcIlxuICAgICAgICAgICAgICAgICAgW2N1c3RvbUNvbG9yXT1cIicjNjY3MDg1J1wiPlxuICAgICAgICA8L3plbi1pY29uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBBdmF0YXIgTGVhZGluZyBFbGVtZW50IC0tPlxuPG5nLXRlbXBsYXRlICNhdmF0YXJMZWFkaW5nRWxlbWVudCBsZXQtb3B0aW9uPVwib3B0aW9uXCIgbGV0LWF2YXRhcj1cImF2YXRhclwiPlxuICA8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdC1hdmF0YXJcIiAqbmdJZj1cImF2YXRhciB8fCBvcHRpb24/LmF2YXRhclwiID5cbiAgICA8aW1nIFtzcmNdPVwiYXZhdGFyIHx8IG9wdGlvbj8uYXZhdGFyXCIgYWx0PVwiXCI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBEb3QgTGVhZGluZyBFbGVtZW50IC0tPlxuPG5nLXRlbXBsYXRlICNkb3RMZWFkaW5nRWxlbWVudCBsZXQtb3B0aW9uPVwib3B0aW9uXCIgbGV0LWNvbG9yPVwiY29sb3JcIj5cbiAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3QtZG90XCJcbiAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJjb2xvciB8fCBvcHRpb24/LmRvdENvbG9yIHx8ICcjMTBCOTgxJ1wiPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
845
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFxQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0ksT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDckYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7Ozs7O0FBcUR2RixNQUFNLE9BQU8sb0JBQW9CO0lBME8vQixZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBbk8xQzs7V0FFRztRQUNPLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFFOUQ7O1dBRUc7UUFDTSxZQUFPLEdBQTJCLEVBQUUsQ0FBQztRQVk5Qzs7V0FFRztRQUNNLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFFdkI7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLFFBQVEsQ0FBQztRQUVoQzs7V0FFRztRQUNNLGdCQUFXLEdBQXFELFNBQVMsQ0FBQztRQWlCbkY7O1dBRUc7UUFDTSxnQkFBVyxHQUFXLE1BQU0sQ0FBQztRQUV0Qzs7V0FFRztRQUNNLFdBQU0sR0FBVyxJQUFJLENBQUM7UUFFL0I7O1dBRUc7UUFDTSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTNCOztXQUVHO1FBQ00sa0JBQWEsR0FB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QXNCO3NCQUE5QixLQUFLO2dCQUtJLFlBQVk7c0JBQXJCLE1BQU07Z0JBS0csTUFBTTtzQkFBZixNQUFNO2dCQXVCbUMsY0FBYztzQkFBdkQsWUFBWTt1QkFBQywwQkFBMEI7Z0JBS0MsYUFBYTtzQkFBckQsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBS0csY0FBYztzQkFBdkQsWUFBWTt1QkFBQywwQkFBMEI7Z0JBd2Z4QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDb250ZW50Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFplbmR1U2VsZWN0T3B0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi90ZW1wbGF0ZXMvemVuZHUtc2VsZWN0LW9wdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgWmVuZHVTZWxlY3RWYWx1ZURpcmVjdGl2ZSB9IGZyb20gJy4vdGVtcGxhdGVzL3plbmR1LXNlbGVjdC12YWx1ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgWmVuZHVTZWxlY3RCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuL3RlbXBsYXRlcy96ZW5kdS1zZWxlY3QtYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vZmlsdGVyL2ZpbHRlcnNDb25maWcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExhenlMb2FkZXJTZWFyY2gge1xuICB0ZXh0Pzogc3RyaW5nO1xuICBpZHM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXp5TG9hZGVyUmVzdWx0IHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZyB8IG51bWJlcjsgIC8vIENvbXBhdGlibGUgd2l0aCBEYXRhU291cmNlXG4gIHRleHQ/OiBzdHJpbmc7ICAgICAgICAgICAvLyBPcmlnaW5hbCBwcm9wZXJ0eVxuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgaW1hZ2VVcmw/OiBzdHJpbmc7XG4gIGlzT3Blbj86IGJvb2xlYW47XG4gIGNoaWxkcmVuPzogc3RyaW5nW107XG4gIHBhcmVudElkPzogc3RyaW5nIHwgbnVtYmVyO1xuICBsZXZlbD86IG51bWJlcjtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIGJhZGdlQmdDb2xvcj86IHN0cmluZztcbiAgYmFkZ2VDb2xvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgTGF6eUxvYWRlckZ1bmN0aW9uID0gKFxuICBzZWFyY2g6IExhenlMb2FkZXJTZWFyY2gsIFxuICBvZmZzZXQ6IG51bWJlciwgXG4gIGxpbWl0OiBudW1iZXJcbikgPT4gUHJvbWlzZTxMYXp5TG9hZGVyUmVzdWx0W10+O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkZE9wdGlvbkV2ZW50IHtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW1vdmVPcHRpb25FdmVudCB7XG4gIHJlbW92ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBpZD86IHN0cmluZyB8IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgaWNvbk5hbWU/OiBzdHJpbmc7XG4gIGF2YXRhcj86IHN0cmluZztcbiAgZG90Q29sb3I/OiBzdHJpbmc7XG4gIHNlY29uZGFyeVRleHQ/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnemVuLXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3plbmR1LXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vemVuZHUtc2VsZWN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgWmVuZHVTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICogMi1XYXkgY29tcG9uZW50IHByb3BlcnR5IGZvciBzZWxlY3RlZCBpdGVtcy5cbiAgICogRG9uJ3QgaW5pdGlhbGl6ZSBwcm9wZXJ0eSBvbiBjb25zdHJ1Y3RvciB0byBwcmV2ZW50IGNoYW5nZSBzb3VyY2UgcGFyYW1ldGVyXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RNb2RlbDogYW55IHwgYW55W107XG4gIFxuICAvKipcbiAgICogY2FsbGJhY2sgdG8gZW1pdCBjaGFuZ2VzIGZvciBwYXJlbnQgY29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0TW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueSB8IGFueVtdPigpO1xuICBcbiAgLyoqXG4gICAqIExpc3Qgb2Ygb3B0aW9uc1xuICAgKi9cbiAgQElucHV0KCkgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gfCBhbnlbXSA9IFtdO1xuICBcbiAgLyoqXG4gICAqIExhYmVsIHRleHQgYWJvdmUgdGhlIHNlbGVjdFxuICAgKi9cbiAgQElucHV0KCkgbGFiZWw/OiBzdHJpbmc7XG4gIFxuICAvKipcbiAgICogU3VwcG9ydGluZyB0ZXh0IGJlbG93IHRoZSBzZWxlY3RcbiAgICovXG4gIEBJbnB1dCgpIHN1cHBvcnRpbmdUZXh0Pzogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIEhpbnQgdGV4dCAoc2hvd24gYmVsb3cgc2VsZWN0KVxuICAgKi9cbiAgQElucHV0KCkgaGludFRleHQgPSAnJztcbiAgXG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0XG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QnO1xuICBcbiAgLyoqXG4gICAqIExlYWRpbmcgZWxlbWVudCB0eXBlXG4gICAqL1xuICBASW5wdXQoKSBsZWFkaW5nVHlwZTogJ2RlZmF1bHQnIHwgJ2ljb24nIHwgJ2F2YXRhcicgfCAnZG90JyB8ICdzZWFyY2gnID0gJ2RlZmF1bHQnO1xuICBcbiAgLyoqXG4gICAqIEljb24gZm9yIGljb24gbGVhZGluZyB0eXBlXG4gICAqL1xuICBASW5wdXQoKSBsZWFkaW5nSWNvbj86IHN0cmluZztcbiAgXG4gIC8qKlxuICAgKiBBdmF0YXIgVVJMIGZvciBhdmF0YXIgbGVhZGluZyB0eXBlXG4gICAqL1xuICBASW5wdXQoKSBsZWFkaW5nQXZhdGFyPzogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIERvdCBjb2xvciBmb3IgZG90IGxlYWRpbmcgdHlwZVxuICAgKi9cbiAgQElucHV0KCkgbGVhZGluZ0RvdENvbG9yPzogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBrZXkgdmFsdWUgdG8gZ2V0IGRpc3BsYXkgbmFtZSBmcm9tIG9wdGlvbiBvYmplY3RcbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlQcm9wOiBzdHJpbmcgPSAnbmFtZSc7XG4gIFxuICAvKipcbiAgICogVGhpcyBpcyBhIGtleSB2YWx1ZSB0byBnZXQgaWQgZnJvbSBvcHRpb24gb2JqZWN0XG4gICAqL1xuICBASW5wdXQoKSBpZFByb3A6IHN0cmluZyA9ICdpZCc7XG4gIFxuICAvKipcbiAgICogRW5hYmxlIHNlYXJjaCBmdW5jdGlvbmFsaXR5XG4gICAqL1xuICBASW5wdXQoKSBoYXNTZWFyY2ggPSBmYWxzZTtcbiAgXG4gIC8qKlxuICAgKiBDb21wb25lbnQgcHJvcGVydHkgdG8gZW5hYmxlIG11bHRpc2VsZWN0XG4gICAqL1xuICBASW5wdXQoKSBpc011bHRpc2VsZWN0ID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogQWxpYXMgZm9yIGlzTXVsdGlzZWxlY3QgZm9yIGVhc2llciB1c2FnZVxuICAgKi9cbiAgQElucHV0KCkgXG4gIHNldCBtdWx0aXNlbGVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNNdWx0aXNlbGVjdCA9IHZhbHVlO1xuICB9XG4gIGdldCBtdWx0aXNlbGVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc011bHRpc2VsZWN0O1xuICB9XG4gIFxuICAvKipcbiAgICogQXV0by1kZXRlY3RlZCB0cmVlIG1vZGU6IHRydWUgaWYgYW55IG9wdGlvbiBoYXMgYSBgY2hpbGRyZW5gIGFycmF5XG4gICAqL1xuICBwdWJsaWMgaXNUcmVlTW9kZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIaWRlIFwiU2VsZWN0IEFsbFwiIG9wdGlvbiBpbiBib3RoIHRyZWUgbW9kZSBhbmQgZmxhdCBtdWx0aXNlbGVjdFxuICAgKi9cbiAgQElucHV0KCkgaGlkZVNlbGVjdEFsbCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIaWRlIHNlYXJjaCBib3ggaW4gdHJlZSBtb2RlXG4gICAqL1xuICBASW5wdXQoKSBoaWRlVHJlZVNlYXJjaCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBzZWxlY3QgYXMgcmVxdWlyZWQgKHNob3dzICogaW5kaWNhdG9yIG9uIGxhYmVsKVxuICAgKi9cbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgc2VsZWN0XG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBcbiAgLyoqXG4gICAqIFNob3cgZXJyb3Igc3RhdGVcbiAgICovXG4gIEBJbnB1dCgpIGVycm9yID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5XG4gICAqL1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gIFxuICAvKipcbiAgICogRGVzdHJ1Y3RpdmUvZXJyb3Igc3RhdGUgKHNpbWlsYXIgdG8gemVuLWlucHV0KVxuICAgKi9cbiAgQElucHV0KCkgZGVzdHJ1Y3RpdmUgPSBmYWxzZTtcbiAgXG4gIC8qKlxuICAgKiBTaXplIHZhcmlhbnRcbiAgICovXG4gIEBJbnB1dCgpIHNpemU6ICdzbScgfCAnbWQnID0gJ21kJztcbiAgXG4gIC8qKlxuICAgKiBDb21wb25lbnQgcHJvcGVydHkgdG8gcmV0dXJuIHdob2xlIG9wdGlvbiBvYmplY3RcbiAgICogQnkgZGVmYXVsdCBvbmx5IGlkIHZhbHVlIGlzIHJldHVybmVkXG4gICAqL1xuICBASW5wdXQoKSByZXR1cm5PcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIFxuICAvKipcbiAgICogVHJ1bmNhdGUgdGV4dCB3aXRoIFwiLi4uXCIgYXQgdGhlIGVuZFxuICAgKi9cbiAgQElucHV0KCkgaXNUcnVuY2F0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLyoqXG4gICAqIHNob3cgQWRkIE5ldyBPcHRpb24gYXQgZmlyc3QgcGxhY2VcbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZUFkZE5ld09wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLyoqXG4gICAqIFNob3cgQWRkIE5ldyBvcHRpb24gdGV4dCBieSBkZWZhdWx0IGlmIG5ld09wdGlvblRleHQgZW1wdHlcbiAgICovXG4gIEBJbnB1dCgpIHNob3dEZWZhdWx0QWRkT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgXG4gIC8qKlxuICAgKiBkaXNwbGF5IGN1c3RvbSB0ZXh0IGZvciBBZGQgTmV3IE9wdGlvblxuICAgKi9cbiAgQElucHV0KCkgbmV3T3B0aW9uVGV4dDogc3RyaW5nO1xuXG4gIFxuICAvKipcbiAgICogRW1pdCBldmVudCB3aGVuIEFkZCBOZXcgT3B0aW9uIGlzIGNsaWNrZWRcbiAgICovXG4gIEBPdXRwdXQoKSBhZGROZXdPcHRpb246IEV2ZW50RW1pdHRlcjxBZGRPcHRpb25FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFkZE9wdGlvbkV2ZW50PigpO1xuICBcbiAgLyoqXG4gICAqIHNob3cgcmVtb3ZlIE9wdGlvbiBhdCBmaXJzdCBwbGFjZVxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlUmVtb3ZlT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogZGlzcGxheSBjdXN0b20gdGV4dCBmb3IgcmVtb3ZlIE9wdGlvblxuICAgKi9cbiAgQElucHV0KCkgcmVtb3ZlT3B0aW9uVGV4dDogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIEVuYWJsZSBsYXp5IGxvYWRpbmcgZm9yIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIGlzTGF6eUxvYWRpbmcgPSBmYWxzZTtcbiAgXG4gIC8qKlxuICAgKiBMYXp5IGxvYWRlciBmdW5jdGlvbiB0byBmZXRjaCBvcHRpb25zXG4gICAqL1xuICBASW5wdXQoKSBsYXp5TG9hZGVyPzogTGF6eUxvYWRlckZ1bmN0aW9uO1xuICBcbiAgLyoqXG4gICAqIFByZWZlcnJlZCBkaXJlY3Rpb24gZm9yIGRyb3Bkb3duIHRvIG9wZW5cbiAgICovXG4gIEBJbnB1dCgpIHByZWZlcnJlZE9wZW5EaXJlY3Rpb246ICdhdXRvJyB8ICd1cCcgfCAnZG93bicgPSAnYXV0byc7XG4gIFxuICAvKipcbiAgICogRW1pdCBldmVudCB3aGVuIHJlbW92ZSBPcHRpb24gaXMgY2xpY2tlZFxuICAgKi9cbiAgQE91dHB1dCgpIHJlbW92ZU9wdGlvbjogRXZlbnRFbWl0dGVyPFJlbW92ZU9wdGlvbkV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVtb3ZlT3B0aW9uRXZlbnQ+KCk7XG4gIFxuICAvKipcbiAgICogRW1pdCBldmVudCB3aGVuIHNlbGVjdCBpcyBjbG9zZWQsIHNlbmRpbmcgdGhlIHNlbGVjdGVkIGRhdGFcbiAgICovXG4gIEBPdXRwdXQoKSBjbG9zZWQ6IEV2ZW50RW1pdHRlcjxhbnkgfCBhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueSB8IGFueVtdPigpO1xuICBcbiAgLyoqXG4gICAqIFN0YXRlIHRyYWNraW5nXG4gICAqL1xuICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XG4gIHB1YmxpYyBzZWFyY2hUZXh0ID0gJyc7XG4gIHB1YmxpYyBzZWFyY2hJbnB1dFZhbHVlID0gJyc7XG4gIHB1YmxpYyBzZWFyY2hGb2N1c2VkID0gZmFsc2U7XG4gIHB1YmxpYyBmaWx0ZXJlZE9wdGlvbnM6IFNlbGVjdE9wdGlvbltdIHwgYW55W10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkRGlzcGxheSA9ICcnO1xuICBwdWJsaWMgbGFiZWxUZXh0ID0gJyc7XG4gIHB1YmxpYyBvcHRpb246IFNlbGVjdE9wdGlvbiB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY2FuTG9hZE1vcmUgPSBmYWxzZTtcbiAgcHVibGljIGlzTG9hZGluZ05vdyA9IGZhbHNlO1xuXG4gIC8vIFRyZWUgbW9kZSBwcm9wZXJ0aWVzXG4gIHB1YmxpYyB0cmVlRmlsdGVyZWREYXRhU291cmNlOiBEYXRhU291cmNlW10gPSBbXTtcbiAgcHVibGljIGlzU2VsZWN0ZWRBbGwgPSBmYWxzZTtcbiAgXG4gIC8qKlxuICAgKiBTZWxlY3QgT3B0aW9uIFRlbXBsYXRlIGZvciBjdXN0b20gSFRNTFxuICAgKi9cbiAgQENvbnRlbnRDaGlsZChaZW5kdVNlbGVjdE9wdGlvbkRpcmVjdGl2ZSkgb3B0aW9uVGVtcGxhdGU6IFplbmR1U2VsZWN0T3B0aW9uRGlyZWN0aXZlO1xuICBcbiAgLyoqXG4gICAqIFNlbGVjdCBWYWx1ZSBUZW1wbGF0ZSBmb3IgY3VzdG9tIEhUTUxcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoWmVuZHVTZWxlY3RWYWx1ZURpcmVjdGl2ZSkgdmFsdWVUZW1wbGF0ZTogWmVuZHVTZWxlY3RWYWx1ZURpcmVjdGl2ZTtcbiAgXG4gIC8qKlxuICAgKiBTZWxlY3QgQnV0dG9uIFRlbXBsYXRlIGZvciBjdXN0b20gSFRNTFxuICAgKi9cbiAgQENvbnRlbnRDaGlsZChaZW5kdVNlbGVjdEJ1dHRvbkRpcmVjdGl2ZSkgYnV0dG9uVGVtcGxhdGU6IFplbmR1U2VsZWN0QnV0dG9uRGlyZWN0aXZlO1xuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIC8qKlxuICAgKiBHZXQgZHJvcGRvd24gZGlyZWN0aW9uIGNsYXNzIGJhc2VkIG9uIHByZWZlcnJlZE9wZW5EaXJlY3Rpb25cbiAgICovXG4gIGdldERyb3Bkb3duRGlyZWN0aW9uQ2xhc3MoKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMucHJlZmVycmVkT3BlbkRpcmVjdGlvbikge1xuICAgICAgY2FzZSAndXAnOlxuICAgICAgICByZXR1cm4gJ2Ryb3Bkb3duLXVwJztcbiAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICByZXR1cm4gJ2Ryb3Bkb3duLWRvd24nO1xuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5zaG91bGRPcGVuVXB3YXJkKDMyMCkgPyAnZHJvcGRvd24tdXAnIDogJ2Ryb3Bkb3duLWRvd24nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkT3BlblVwd2FyZChkcm9wZG93bkhlaWdodDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b20pIDwgZHJvcGRvd25IZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBpY29uIHBhdGggd2l0aCBmYWxsYmFjayB0byBhc3NldHMgZm9sZGVyXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVJY29uUGF0aChpY29uTmFtZT86IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghaWNvbk5hbWUpIHJldHVybiBudWxsO1xuICAgIFxuICAgIC8vIElmIGl0J3MgYWxyZWFkeSBhIGZ1bGwgcGF0aCBvciBVUkwsIHJldHVybiBhcyBpc1xuICAgIGlmIChpY29uTmFtZS5pbmNsdWRlcygnLycpIHx8IGljb25OYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHJldHVybiBpY29uTmFtZTtcbiAgICB9XG4gICAgXG4gICAgLy8gVHJ5IGFzc2V0cyBmb2xkZXIgd2l0aCAuc3ZnIGV4dGVuc2lvblxuICAgIHJldHVybiBgYXNzZXRzL25nLXplbmR1aXQvaWNvbnMvJHtpY29uTmFtZX0uc3ZnYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaWNvbiBmb3IgZGlzcGxheSAod2l0aCBmYWxsYmFjayBsb2dpYylcbiAgICovXG4gIHB1YmxpYyBnZXRJY29uUGF0aChvcHRpb24/OiBTZWxlY3RPcHRpb24sIGxlYWRpbmdJY29uPzogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gUHJpb3JpdHk6IGxlYWRpbmdJY29uIC0+IG9wdGlvbi5pY29uIC0+IG9wdGlvbi5pY29uTmFtZSAtPiBhc3NldHMve2ljb25OYW1lfS5zdmdcbiAgICBpZiAobGVhZGluZ0ljb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVJY29uUGF0aChsZWFkaW5nSWNvbik7XG4gICAgfVxuICAgIFxuICAgIGlmIChvcHRpb24/Lmljb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVJY29uUGF0aChvcHRpb24uaWNvbik7XG4gICAgfVxuICAgIFxuICAgIGlmIChvcHRpb24/Lmljb25OYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlSWNvblBhdGgob3B0aW9uLmljb25OYW1lKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgXG4gIG5nT25DaGFuZ2VzKGNoYW5nZU9iajogeyBba2V5OiBzdHJpbmddOiB7IGN1cnJlbnRWYWx1ZTogdW5rbm93bjsgcHJldmlvdXNWYWx1ZTogdW5rbm93bjsgZmlyc3RDaGFuZ2U6IGJvb2xlYW4gfSB9KTogdm9pZCB7XG4gICAgdGhpcy5pc1RyZWVNb2RlID0gdGhpcy5vcHRpb25zPy5zb21lKChvcHQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBvcHQuY2hpbGRyZW4gfHwgb3B0LkNoaWxkcmVuIHx8IG9wdC5DaGlsZHJlbnM7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiYgY2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICB9KSA/PyBmYWxzZTtcbiAgICBpZiAodGhpcy5pc1RyZWVNb2RlKSB7XG4gICAgICB0aGlzLmluaXRUcmVlRGF0YSgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZURpc3BsYXkoKTtcbiAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG5cbiAgICBpZiAoY2hhbmdlT2JqW1wic2VsZWN0TW9kZWxcIl0pIHtcbiAgICAgIGlmICh0aGlzLmlzTGF6eUxvYWRpbmcgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSAmJiB0aGlzLnNlbGVjdE1vZGVsLmxlbmd0aCkge1xuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyZWRPcHRpb25zPy5sZW5ndGggJiYgIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgLy8gcHJlbG9hZCBkYXRhIHRvIHNob3cgdGhlIGxhYmVsc1xuICAgICAgICAgIHRoaXMubG9hZE1vcmUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUb2dnbGUgZHJvcGRvd25cbiAgICovXG4gIHRvZ2dsZURyb3Bkb3duKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgXG4gICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBvcHRpb24gc2VsZWN0aW9uXG4gICAqL1xuICBzZWxlY3RPcHRpb24ob3B0aW9uOiBTZWxlY3RPcHRpb24pOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbiA9IG9wdGlvbjtcbiAgICBjb25zdCBvcHRpb25WYWx1ZSA9IHRoaXMucmV0dXJuT3B0aW9uID8gb3B0aW9uIDogdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb24pO1xuICAgIFxuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgIHRoaXMudG9nZ2xlTXVsdGlzZWxlY3RPcHRpb24ob3B0aW9uVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdE1vZGVsID0gb3B0aW9uVmFsdWU7XG4gICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgLy8gVXBkYXRlIHNlYXJjaCBpbnB1dCB2YWx1ZSBmb3Igc2VhcmNoIHR5cGVcbiAgICAgIGlmICh0aGlzLmxlYWRpbmdUeXBlID09PSAnc2VhcmNoJykge1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0VmFsdWUgPSB0aGlzLmdldE9wdGlvbkRpc3BsYXkob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgdGhpcy51cGRhdGVEaXNwbGF5KCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUb2dnbGUgb3B0aW9uIGluIG11bHRpc2VsZWN0IG1vZGVcbiAgICovXG4gIHByaXZhdGUgdG9nZ2xlTXVsdGlzZWxlY3RPcHRpb24odmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSkge1xuICAgICAgdGhpcy5zZWxlY3RNb2RlbCA9IFtdO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RWxlbWVudEluZGV4KHZhbHVlKTtcbiAgICBcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICB0aGlzLnNlbGVjdE1vZGVsLnB1c2godmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdE1vZGVsLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMudXBkYXRlTGFiZWwoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIG9wdGlvbiBpcyBzZWxlY3RlZFxuICAgKi9cbiAgaXNTZWxlY3RlZChvcHRpb246IFNlbGVjdE9wdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzTW9kZWxFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG9wdGlvbklkID0gdGhpcy5nZXRJZChvcHRpb24pO1xuICAgIFxuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZWwuZmluZEluZGV4KGVsID0+IHRoaXMuZ2V0SWQoZWwgYXMgU2VsZWN0T3B0aW9uKSA9PT0gb3B0aW9uSWQpID49IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmdldElkKHRoaXMuc2VsZWN0TW9kZWwgYXMgU2VsZWN0T3B0aW9uKSA9PT0gb3B0aW9uSWQ7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGRpc3BsYXkgdGV4dCBmb3Igb3B0aW9uXG4gICAqL1xuICBnZXRPcHRpb25EaXNwbGF5KG9wdGlvbjogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgb3B0aW9uICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5kaXNwbGF5UHJvcCkge1xuICAgICAgICBjb25zdCBjb21iaW5lZFByb3BzID0gdGhpcy5kaXNwbGF5UHJvcC5zcGxpdChcInxcIilcbiAgICAgICAgICAubWFwKGkgPT4gdGhpcy5nZXRSZWN1cnNpdmVQcm9wZXJ0eShvcHRpb24sIGkpKVxuICAgICAgICAgIC5maWx0ZXIodiA9PiB2KSAvLyBGaWx0ZXIgb3V0IG51bGwgdmFsdWVzXG4gICAgICAgICAgLmpvaW4oXCIgXCIpO1xuICAgICAgICByZXR1cm4gY29tYmluZWRQcm9wcyB8fCAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FwcC1TZWxlY3Q6IHdoZW4gdXNpbmcgb2JqZWN0cyBhcyBtb2RlbCwgYSBkaXNwbGF5UHJvcCB2YWx1ZSBpcyBtYW5kYXRvcnkuJyk7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9wdGlvbik7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBBbGlhcyBmb3IgZ2V0T3B0aW9uRGlzcGxheSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgKi9cbiAgcHVibGljIGdldE5hbWUob3B0aW9uOiBzdHJpbmcgfCBvYmplY3QpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkRpc3BsYXkob3B0aW9uKTtcbiAgfVxuICBcbiAgXG4gIC8qKlxuICAgKiBHZXQgdmFsdWUgZm9yIG9wdGlvbiAodXNpbmcgaWRQcm9wKVxuICAgKi9cbiAgZ2V0T3B0aW9uVmFsdWUob3B0aW9uOiBTZWxlY3RPcHRpb24pOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldElkKG9wdGlvbik7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgaWQgdmFsdWUgZnJvbSBvcHRpb25cbiAgICovXG4gIHByaXZhdGUgZ2V0SWQob3B0aW9uOiBzdHJpbmcgfCBudW1iZXIgfCBvYmplY3QpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb24gIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlkUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpdmVQcm9wZXJ0eShvcHRpb24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHRoaXMuaWRQcm9wKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FwcC1TZWxlY3Q6IHdoZW4gdXNpbmcgb2JqZWN0cyBhcyBtb2RlbCwgYSBpZFByb3AgdmFsdWUgaXMgbWFuZGF0b3J5LicpO1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbiBhcyBzdHJpbmcgfCBudW1iZXI7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIGRpc3BsYXllZCB0ZXh0XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZURpc3BsYXkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNNb2RlbEVtcHR5KCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREaXNwbGF5ID0gJyc7XG4gICAgICB0aGlzLmxhYmVsVGV4dCA9ICcnO1xuICAgICAgLy8gQWxzbyBjbGVhciBzZWFyY2ggaW5wdXQgZm9yIHNlYXJjaCB0eXBlXG4gICAgICBpZiAodGhpcy5sZWFkaW5nVHlwZSA9PT0gJ3NlYXJjaCcpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dFZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0TW9kZWwubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuZmluZE9wdGlvbkJ5VmFsdWUodGhpcy5zZWxlY3RNb2RlbFswXSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREaXNwbGF5ID0gb3B0aW9uID8gdGhpcy5nZXRPcHRpb25EaXNwbGF5KG9wdGlvbikgOiAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREaXNwbGF5ID0gYCR7dGhpcy5zZWxlY3RNb2RlbC5sZW5ndGh9IHNlbGVjdGVkYDtcbiAgICAgIH1cbiAgICAgIC8vIEZvciBtdWx0aXNlbGVjdCBzZWFyY2ggdHlwZSwgc2hvdyBjb3VudCBpbiBzZWFyY2ggaW5wdXQgd2hlbiBjbG9zZWRcbiAgICAgIGlmICh0aGlzLmxlYWRpbmdUeXBlID09PSAnc2VhcmNoJyAmJiAhdGhpcy5zZWFyY2hGb2N1c2VkKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWREaXNwbGF5O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmZpbmRPcHRpb25CeVZhbHVlKHRoaXMuc2VsZWN0TW9kZWwpO1xuICAgICAgdGhpcy5zZWxlY3RlZERpc3BsYXkgPSBvcHRpb24gPyB0aGlzLmdldE9wdGlvbkRpc3BsYXkob3B0aW9uKSA6ICcnO1xuICAgICAgLy8gQWxzbyB1cGRhdGUgc2VhcmNoIGlucHV0IGZvciBzZWFyY2ggdHlwZVxuICAgICAgaWYgKHRoaXMubGVhZGluZ1R5cGUgPT09ICdzZWFyY2gnICYmIG9wdGlvbikge1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0VmFsdWUgPSB0aGlzLmdldE9wdGlvbkRpc3BsYXkob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGaW5kIG9wdGlvbiBieSB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kT3B0aW9uQnlWYWx1ZSh2YWx1ZTogYW55KTogU2VsZWN0T3B0aW9uIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMucmV0dXJuT3B0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQob3B0ID0+IG9wdCA9PT0gdmFsdWUpIHx8IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmluZChvcHQgPT4gdGhpcy5nZXRJZChvcHQpID09PSB2YWx1ZSkgfHwgbnVsbDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIG1vZGVsIGlzIGVtcHR5XG4gICAqL1xuICBwdWJsaWMgaXNNb2RlbEVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgIHJldHVybiAhQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSB8fCAhdGhpcy5zZWxlY3RNb2RlbC5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGVsID09PSBudWxsIHx8IHRoaXMuc2VsZWN0TW9kZWwgPT09IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgZWxlbWVudCBpbmRleCBpbiBtdWx0aXNlbGVjdCBhcnJheVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50SW5kZXgodmFsdWU6IGFueSk6IG51bWJlciB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0TW9kZWwpKSByZXR1cm4gLTE7XG4gICAgXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IHZhbHVlSWQgPSB0aGlzLmdldElkKHZhbHVlKTtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGVsLmZpbmRJbmRleChlbCA9PiB0aGlzLmdldElkKGVsIGFzIFNlbGVjdE9wdGlvbikgPT09IHZhbHVlSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlbC5pbmRleE9mKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUb2dnbGUgYWxsIG9wdGlvbnMgaW4gbXVsdGlzZWxlY3RcbiAgICovXG4gIHB1YmxpYyB0b2dnbGVBbGwoKTogdm9pZCB7XG4gICAgY29uc3QgbW9kZWxBcnJheSA9IEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RNb2RlbCkgPyB0aGlzLnNlbGVjdE1vZGVsIDogW107XG4gICAgaWYgKG1vZGVsQXJyYXkubGVuZ3RoICE9PSB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdE1vZGVsID0gdGhpcy5vcHRpb25zLm1hcCgoZWw6IFNlbGVjdE9wdGlvbikgPT4gdGhpcy5yZXR1cm5PcHRpb24gPyBlbCA6IHRoaXMuZ2V0SWQoZWwpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RNb2RlbCA9IFtdO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXkoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUb2dnbGUgU2VsZWN0IEFsbCBvcHRpb24gZm9yIGZsYXQgbXVsdGlzZWxlY3RcbiAgICovXG4gIHB1YmxpYyB0b2dnbGVTZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICAvLyBEZXNlbGVjdCBhbGxcbiAgICAgIHRoaXMuc2VsZWN0TW9kZWwgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VsZWN0IGFsbCBmaWx0ZXJlZCBvcHRpb25zXG4gICAgICB0aGlzLnNlbGVjdE1vZGVsID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubWFwKChlbDogU2VsZWN0T3B0aW9uKSA9PiBcbiAgICAgICAgdGhpcy5yZXR1cm5PcHRpb24gPyBlbCA6IHRoaXMuZ2V0SWQoZWwpXG4gICAgICApO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXkoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbGwgZmlsdGVyZWQgb3B0aW9ucyBhcmUgc2VsZWN0ZWRcbiAgICovXG4gIHB1YmxpYyBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc011bHRpc2VsZWN0IHx8ICFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0TW9kZWwpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgYWxsIGZpbHRlcmVkIG9wdGlvbnMgYXJlIGluIHRoZSBzZWxlY3RNb2RlbFxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5ldmVyeShvcHRpb24gPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uSWQgPSB0aGlzLmdldElkKG9wdGlvbik7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlbC5zb21lKChzZWxlY3RlZDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLnJldHVybk9wdGlvbiA/IHRoaXMuZ2V0SWQoc2VsZWN0ZWQpIDogc2VsZWN0ZWQ7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZElkID09PSBvcHRpb25JZDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHJlY3Vyc2l2ZSBwcm9wZXJ0eSBmcm9tIG5lc3RlZCBvYmplY3RcbiAgICovXG4gIHByaXZhdGUgZ2V0UmVjdXJzaXZlUHJvcGVydHkob2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgob2JqLCB4KSA9PiB7XG4gICAgICBpZiAob2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHggaW4gb2JqKSB7XG4gICAgICAgIHJldHVybiAob2JqIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVt4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sIG9iamVjdCBhcyB1bmtub3duKSBhcyBzdHJpbmcgfCBudW1iZXI7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgbGFiZWwgdGV4dFxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUxhYmVsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9kZWxFbXB0eSgpKSB7XG4gICAgICB0aGlzLmxhYmVsVGV4dCA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0ICYmIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RNb2RlbCkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ291bnQgPSB0aGlzLnNlbGVjdE1vZGVsLmxlbmd0aDtcbiAgICAgIFxuICAgICAgaWYgKHNlbGVjdGVkQ291bnQgPT09IDEpIHtcbiAgICAgICAgdGhpcy5sYWJlbFRleHQgPSB0aGlzLmdldE5hbWVGcm9tVmFsdWUodGhpcy5zZWxlY3RNb2RlbFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhYmVsVGV4dCA9IGAke3NlbGVjdGVkQ291bnR9IFNlbGVjdGVkYDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYWJlbFRleHQgPSB0aGlzLmdldE5hbWVGcm9tVmFsdWUodGhpcy5zZWxlY3RNb2RlbCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IG5hbWUgZnJvbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGdldE5hbWVGcm9tVmFsdWUodmFsOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnJldHVybk9wdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uRGlzcGxheSh2YWwgYXMgU2VsZWN0T3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNMYXp5TG9hZGluZykge1xuICAgICAgICBjb25zdCBvcHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucz8uZmluZChpID0+IHRoaXMuZ2V0SWQoaSkgPT0gdmFsKTtcbiAgICAgICAgcmV0dXJuIG9wdCA/IHRoaXMuZ2V0T3B0aW9uRGlzcGxheShvcHQpIDogU3RyaW5nKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucyB8fCAhdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBsZXQgb3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoZWwgPT4gdGhpcy5nZXRJZChlbCkgPT09IHZhbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkRpc3BsYXkob3B0aW9uID8/IHZhbCBhcyBTZWxlY3RPcHRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEVtaXQgY2hhbmdlIGV2ZW50XG4gICAqL1xuICBwcml2YXRlIGVtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgLy8gbm90aWZ5IHdpdGggdGltZW91dFxuICAgIC8vIGFsbG93IG91dHB1dCBwcm9wZXJ0eSBcImVuYWJsZWRcIiBhcHBsaWVkIGJ5IHBhcmVudCBmaXJzdCBhbmQgdGhlbiBlbWl0IHRoZSBvbkNoYW5nZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RNb2RlbENoYW5nZS5lbWl0KHRoaXMuc2VsZWN0TW9kZWwpO1xuICAgIH0sIDEpO1xuICB9XG4gIFxuICAvKipcbiAgICogRmlsdGVyIG9wdGlvbnMgYmFzZWQgb24gc2VhcmNoXG4gICAqL1xuICBmaWx0ZXJPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFsuLi50aGlzLm9wdGlvbnNdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaExvd2VyID0gdGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiB7XG4gICAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5nZXRPcHRpb25EaXNwbGF5KG9wdGlvbikudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBkaXNwbGF5LmluY2x1ZGVzKHNlYXJjaExvd2VyKTtcbiAgICB9KTtcblxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIHNlYXJjaCBpbnB1dFxuICAgKi9cbiAgb25TZWFyY2hDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gIH1cblxuICBjbGVhclNlYXJjaCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBzZWFyY2ggaW5wdXQgY2hhbmdlIGZvciBzZWFyY2ggdHlwZVxuICAgKi9cbiAgb25TZWFyY2hJbnB1dENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB0aGlzLnNlYXJjaElucHV0VmFsdWU7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gICAgaWYgKCF0aGlzLmlzT3BlbiAmJiB0aGlzLnNlYXJjaElucHV0VmFsdWUpIHtcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgc2VhcmNoIGlucHV0IGZvY3VzXG4gICAqL1xuICBvblNlYXJjaEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRm9jdXNlZCA9IHRydWU7XG4gICAgLy8gQ2xlYXIgdGhlIHNlYXJjaCBpbnB1dCB3aGVuIGZvY3VzZWQgc28gdXNlciBjYW4gdHlwZSBmcmVzaFxuICAgIHRoaXMuc2VhcmNoSW5wdXRWYWx1ZSA9ICcnO1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICAgIC8vIE9wZW4gZHJvcGRvd24gdG8gc2hvdyBhbGwgb3B0aW9uc1xuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAvLyBSZXNldCBmaWx0ZXJlZCBvcHRpb25zIHRvIHNob3cgYWxsXG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgc2VhcmNoIGlucHV0IGJsdXJcbiAgICovXG4gIG9uU2VhcmNoQmx1cihldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIC8vIERvbid0IGNsb3NlIGltbWVkaWF0ZWx5IGlmIGNsaWNraW5nIG9uIGRyb3Bkb3duXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmICghcmVsYXRlZFRhcmdldCB8fCAhdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMocmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICB0aGlzLnNlYXJjaElucHV0VmFsdWUgPSB0aGlzLnNlbGVjdGVkRGlzcGxheTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDIwMCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgc2VsZWN0ZWQgb3B0aW9uIGZvciBsZWFkaW5nIGRpc3BsYXlcbiAgICovXG4gIGdldFNlbGVjdGVkT3B0aW9uKCk6IFNlbGVjdE9wdGlvbiB8IG51bGwge1xuICAgIGlmICh0aGlzLmlzTW9kZWxFbXB0eSgpKSByZXR1cm4gbnVsbDtcblxuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0TW9kZWwubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRPcHRpb25CeVZhbHVlKHRoaXMuc2VsZWN0TW9kZWxbMF0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmluZE9wdGlvbkJ5VmFsdWUodGhpcy5zZWxlY3RNb2RlbCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgc2VsZWN0ZWQgc2Vjb25kYXJ5IHRleHQgZm9yIGRpc3BsYXlcbiAgICovXG4gIGdldFNlbGVjdGVkU2Vjb25kYXJ5VGV4dCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0TW9kZWwpIHJldHVybiBudWxsO1xuICAgIFxuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0TW9kZWwubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuZmluZE9wdGlvbkJ5VmFsdWUodGhpcy5zZWxlY3RNb2RlbFswXSk7XG4gICAgICAgIHJldHVybiBvcHRpb24/LnNlY29uZGFyeVRleHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIEZvciBtdWx0aXBsZSBzZWxlY3Rpb24sIHdlIHdvbid0IHNob3cgc2Vjb25kYXJ5IHRleHQgdG8gYXZvaWQgY29uZnVzaW9uXG4gICAgICByZXR1cm4gbnVsbDsgXG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuZmluZE9wdGlvbkJ5VmFsdWUodGhpcy5zZWxlY3RNb2RlbCk7XG4gICAgcmV0dXJuIG9wdGlvbj8uc2Vjb25kYXJ5VGV4dCB8fCBudWxsO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xvc2UgZHJvcGRvd24gb24gb3V0c2lkZSBjbGlja1xuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuaGlkZURyb3BEb3duKHRydWUpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEhpZGUgZHJvcGRvd25cbiAgICovXG4gIHB1YmxpYyBhc3luYyBoaWRlRHJvcERvd24odXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gT25seSBlbWl0IGNsb3NlZCBldmVudCBpZiBpdCB3YXMgb3BlbiBBTkQgdHJpZ2dlcmVkIGJ5IHVzZXIgYWN0aW9uXG4gICAgaWYgKHVzZXJBY3Rpb24gJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuY2xvc2VkLmVtaXQodGhpcy5zZWxlY3RNb2RlbCk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgRW50ZXIga2V5IG9uIHNlYXJjaCBpbnB1dFxuICAgKi9cbiAgb25TZWFyY2hFbnRlcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLmVuYWJsZUFkZE5ld09wdGlvbiAmJiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDAgJiYgKHRoaXMuc2VhcmNoVGV4dCB8fCB0aGlzLnNlYXJjaElucHV0VmFsdWUpPy50cmltKCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlQWRkTmV3T3B0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhZGQgbmV3IG9wdGlvblxuICAgKi9cbiAgcHVibGljIGhhbmRsZUFkZE5ld09wdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmFkZE5ld09wdGlvbi5lbWl0KHsgdmFsdWU6IHRoaXMuc2VhcmNoVGV4dCB8fCB0aGlzLnNlYXJjaElucHV0VmFsdWUgfSk7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5zZWFyY2hJbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gICAgdGhpcy5oaWRlRHJvcERvd24odHJ1ZSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGUgcmVtb3ZlIG9wdGlvblxuICAgKi9cbiAgcHVibGljIGhhbmRsZVJlbW92ZU9wdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZU9wdGlvbi5lbWl0KHsgcmVtb3ZlZDogdHJ1ZSB9KTtcbiAgICB0aGlzLmhpZGVEcm9wRG93bih0cnVlKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBzdGF0ZSBjbGFzc2VzXG4gICAqL1xuICBnZXRTdGF0ZUNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGFzc2VzID0gWydhcHAtc2VsZWN0LWNvbnRhaW5lciddO1xuICAgIFxuICAgIGlmICh0aGlzLmlzT3BlbikgY2xhc3Nlcy5wdXNoKCdvcGVuJyk7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIGNsYXNzZXMucHVzaCgnZGlzYWJsZWQnKTtcbiAgICBpZiAodGhpcy5lcnJvcikgY2xhc3Nlcy5wdXNoKCdlcnJvcicpO1xuICAgIGlmICh0aGlzLmRlc3RydWN0aXZlKSBjbGFzc2VzLnB1c2goJ2Rlc3RydWN0aXZlJyk7XG4gICAgaWYgKHRoaXMubGFiZWwpIGNsYXNzZXMucHVzaCgnd2l0aC1sYWJlbCcpO1xuICAgIGlmICh0aGlzLnN1cHBvcnRpbmdUZXh0KSBjbGFzc2VzLnB1c2goJ3dpdGgtc3VwcG9ydGluZycpO1xuICAgIFxuICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIExvYWQgbW9yZSBpdGVtcyBmb3IgbGF6eSBsb2FkaW5nXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZE1vcmUoc2hvd1NlbGVjdGVkT25Ub3A6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmdOb3cgPSB0cnVlO1xuICAgICAgaWYgKCF0aGlzLmxhenlMb2FkZXIpIHtcbiAgICAgICAgdGhyb3cgYGxvYWRlciBpcyBub3QgYXZhaWxhYmxlYDtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5maWx0ZXJlZE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gbG9hZCBmaXJzdCAxMCByZWNvcmRzIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgY29uc3QgbGltaXQgPSAodGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09IDApID8gMTAgOiAxMDA7XG4gICAgICBsZXQgbmV3SXRlbXM6IExhenlMb2FkZXJSZXN1bHRbXSA9IGF3YWl0IHRoaXMubGF6eUxvYWRlcih7IHRleHQ6IHRoaXMuc2VhcmNoVGV4dCB8fCBcIlwiIH0sIHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCwgbGltaXQpO1xuICAgICAgXG4gICAgICB0aGlzLmNhbkxvYWRNb3JlID0gKG5ld0l0ZW1zLmxlbmd0aCA9PSBsaW1pdCk7XG4gICAgICBcbiAgICAgIC8vIHRoZSBzZWxlY3RNb2RlbCBjb250YWlucyB0aGUgc2VsZWN0ZWQgaXRlbXMgaWRzICBcbiAgICAgIGNvbnN0IGNoZWNrZWRJZHMgPSBBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0TW9kZWwpIFxuICAgICAgICA/IHRoaXMuc2VsZWN0TW9kZWwubWFwKGl0ZW0gPT4gU3RyaW5nKHRoaXMuZ2V0SWQoaXRlbSBhcyBTZWxlY3RPcHRpb24pKSlcbiAgICAgICAgOiBbXTtcbiAgICAgIFxuICAgICAgaWYgKHNob3dTZWxlY3RlZE9uVG9wICYmIGNoZWNrZWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICAvLyByZW1vdmUgdGhlIGNoZWNrZWQgaXRlbXMgZmlyc3RcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maWx0ZXIoaSA9PiAhY2hlY2tlZElkcy5pbmNsdWRlcyhTdHJpbmcodGhpcy5nZXRJZChpKSkpKTtcbiAgICAgICAgbmV3SXRlbXMgPSBuZXdJdGVtcy5maWx0ZXIoaSA9PiAhY2hlY2tlZElkcy5pbmNsdWRlcyhTdHJpbmcoaS5pZCkpKTtcbiAgICAgICAgXG4gICAgICAgIC8vIGFkZCBhbGwgY2hlY2tlZCBpdGVtcyB0byB0aGUgdG9wXG4gICAgICAgIGNvbnN0IGNoZWNrZWRJdGVtczogTGF6eUxvYWRlclJlc3VsdFtdID0gYXdhaXQgdGhpcy5sYXp5TG9hZGVyKHsgaWRzOiBjaGVja2VkSWRzIH0sIDAsIDEwMCk7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gWy4uLihjaGVja2VkSXRlbXMgYXMgU2VsZWN0T3B0aW9uW10pLCAuLi50aGlzLmZpbHRlcmVkT3B0aW9uc107XG4gICAgICAgIFxuICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIHRoZSBmaWx0ZXJlZERhdGFTb3VyY2UgY29udGFpbnMgdGhlIGl0ZW1zIHRoYXQgaXMgdmlzaWJsZSB0byB1c2VyIGF0IHRoZSBjdXJyZW50IG1vbWVudFxuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4udGhpcy5maWx0ZXJlZE9wdGlvbnMsIC4uLihuZXdJdGVtcyBhcyBTZWxlY3RPcHRpb25bXSldO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZ05vdyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRyZWUgZGF0YSBieSBzeW5jaW5nIHNlbGVjdE1vZGVsIElEcyB0byBEYXRhU291cmNlIGNoZWNrZWQgZmxhZ3NcbiAgICovXG4gIHByaXZhdGUgaW5pdFRyZWVEYXRhKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1RyZWVNb2RlIHx8ICF0aGlzLm9wdGlvbnM/Lmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gbmV3IFNldChcbiAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RNb2RlbClcbiAgICAgICAgPyB0aGlzLnNlbGVjdE1vZGVsLm1hcCh2ID0+IFN0cmluZyh0eXBlb2YgdiA9PT0gJ29iamVjdCcgPyB0aGlzLmdldElkKHYpIDogdikpXG4gICAgICAgIDogW11cbiAgICApO1xuICAgICh0aGlzLm9wdGlvbnMgYXMgYW55W10pLmZvckVhY2gob3B0ID0+IHtcbiAgICAgIG9wdC5jaGVja2VkID0gc2VsZWN0ZWRJZHMuaGFzKFN0cmluZyhvcHRbdGhpcy5pZFByb3BdKSk7XG4gICAgfSk7XG4gICAgdGhpcy50cmVlRmlsdGVyZWREYXRhU291cmNlID0gWy4uLnRoaXMub3B0aW9uc10gYXMgRGF0YVNvdXJjZVtdO1xuICAgIHRoaXMudXBkYXRlVHJlZVNlbGVjdEFsbFN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNoZWNrZWQgY2hhbmdlIGZyb20gemVuLWdyb3VwcyBpbiB0cmVlIG1vZGVcbiAgICovXG4gIHB1YmxpYyBvblRyZWVDaGVja2VkQ2hhbmdlKGRzSXRlbTogRGF0YVNvdXJjZSk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrZWRJdGVtcyA9ICh0aGlzLm9wdGlvbnMgYXMgYW55W10pLmZpbHRlcihvcHQgPT4gb3B0LmNoZWNrZWQpO1xuICAgIHRoaXMuc2VsZWN0TW9kZWwgPSBjaGVja2VkSXRlbXMubWFwKG9wdCA9PlxuICAgICAgdGhpcy5yZXR1cm5PcHRpb24gPyBvcHQgOiBvcHRbdGhpcy5pZFByb3BdXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVRyZWVTZWxlY3RBbGxTdGF0ZSgpO1xuICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIHRoaXMudXBkYXRlRGlzcGxheSgpO1xuICAgIHRoaXMudXBkYXRlTGFiZWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc2VsZWN0IGFsbCBjaGFuZ2UgZnJvbSB6ZW4tZ3JvdXBzIGluIHRyZWUgbW9kZVxuICAgKi9cbiAgcHVibGljIG9uVHJlZVNlbGVjdEFsbENoYW5nZShpc1NlbGVjdGVkQWxsOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc1NlbGVjdGVkQWxsID0gaXNTZWxlY3RlZEFsbDtcbiAgICBjb25zdCBjaGVja2VkSXRlbXMgPSAodGhpcy5vcHRpb25zIGFzIGFueVtdKS5maWx0ZXIob3B0ID0+IG9wdC5jaGVja2VkKTtcbiAgICB0aGlzLnNlbGVjdE1vZGVsID0gY2hlY2tlZEl0ZW1zLm1hcChvcHQgPT5cbiAgICAgIHRoaXMucmV0dXJuT3B0aW9uID8gb3B0IDogb3B0W3RoaXMuaWRQcm9wXVxuICAgICk7XG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgdGhpcy51cGRhdGVEaXNwbGF5KCk7XG4gICAgdGhpcy51cGRhdGVMYWJlbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgaXNTZWxlY3RlZEFsbCBmbGFnIGJhc2VkIG9uIGN1cnJlbnQgY2hlY2tlZCBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUcmVlU2VsZWN0QWxsU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnM/Lmxlbmd0aCkgcmV0dXJuO1xuICAgIHRoaXMuaXNTZWxlY3RlZEFsbCA9ICh0aGlzLm9wdGlvbnMgYXMgYW55W10pLmV2ZXJ5KG9wdCA9PiBvcHQuY2hlY2tlZCk7XG4gIH1cblxufSIsIjxkaXYgW2NsYXNzXT1cImdldFN0YXRlQ2xhc3NlcygpXCI+XG4gIDwhLS0gTGFiZWwgLS0+XG4gIDxsYWJlbCBjbGFzcz1cImFwcC1zZWxlY3QtbGFiZWwgdGV4dCB0ZXh0LXNtIHRleHQtd2VpZ2h0LW1lZGl1bVwiICpuZ0lmPVwibGFiZWxcIlxuICAgICAgICAgW25nQ2xhc3NdPVwieydyZXF1aXJlZCc6IHJlcXVpcmVkLCAnZGlzYWJsZWQnOiBkaXNhYmxlZCwgJ2Rlc3RydWN0aXZlJzogZGVzdHJ1Y3RpdmV9XCI+XG4gICAge3sgbGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICA8c3BhbiAqbmdJZj1cInJlcXVpcmVkXCIgY2xhc3M9XCJyZXF1aXJlZC1pbmRpY2F0b3JcIj4qPC9zcGFuPlxuICA8L2xhYmVsPlxuXG4gIDwhLS0gU2VsZWN0IElucHV0IC0tPlxuICA8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdC13cmFwcGVyXCI+XG4gICAgPCEtLSBDdXN0b20gVHJpZ2dlciBUZW1wbGF0ZSAob3ZlcnJpZGVzIGJ1aWx0LWluIHRyaWdnZXIpIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJidXR0b25UZW1wbGF0ZVwiXG4gICAgICAgICBjbGFzcz1cImFwcC1zZWxlY3QtY3VzdG9tLXRyaWdnZXJcIlxuICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJidXR0b25UZW1wbGF0ZS50ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXNPcGVuOiBpc09wZW4sIHNlbGVjdGVkOiBnZXRTZWxlY3RlZE9wdGlvbigpLCBkaXNwbGF5OiBzZWxlY3RlZERpc3BsYXksIGRpc2FibGVkOiBkaXNhYmxlZCB9XCI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBCdWlsdC1pbiBUcmlnZ2VyICh3aGVuIG5vIGN1c3RvbSBidXR0b24gdGVtcGxhdGUgcHJvdmlkZWQpIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYnV0dG9uVGVtcGxhdGVcIiBbbmdTd2l0Y2hdPVwibGVhZGluZ1R5cGVcIj5cbiAgICAgIDwhLS0gRGVmYXVsdCBTZWxlY3QgKG5vIGxlYWRpbmcgZWxlbWVudCkgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGVmYXVsdCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRlZmF1bHRTZWxlY3RUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gSWNvbiBMZWFkaW5nIFNlbGVjdCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpY29uJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvblNlbGVjdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBBdmF0YXIgTGVhZGluZyBTZWxlY3QgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYXZhdGFyJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXZhdGFyU2VsZWN0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIERvdCBMZWFkaW5nIFNlbGVjdCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkb3QnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkb3RTZWxlY3RUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gU2VhcmNoIElucHV0IFNlbGVjdCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZWFyY2gnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWFyY2hJbnB1dFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRHJvcGRvd24gTWVudSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdC1kcm9wZG93blwiIFxuICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0RHJvcGRvd25EaXJlY3Rpb25DbGFzcygpXCJcbiAgICAgICAgICpuZ0lmPVwiaXNPcGVuXCI+XG4gICAgICAgIFxuICAgICAgPCEtLSBUcmVlIE1vZGU6IGVtYmVkIHplbi1ncm91cHMgaW5saW5lIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVHJlZU1vZGUgJiYgaXNNdWx0aXNlbGVjdDsgZWxzZSBmbGF0TGlzdFwiPlxuICAgICAgICA8emVuLWdyb3VwcyBbaW5saW5lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCIkYW55KG9wdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcmVkRGF0YVNvdXJjZV09XCJ0cmVlRmlsdGVyZWREYXRhU291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGVTZWxlY3RBbGxdPVwiaGlkZVNlbGVjdEFsbFwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlU2VhcmNoXT1cImhpZGVUcmVlU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkUHJvcF09XCJpZFByb3BcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVByb3BdPVwiZGlzcGxheVByb3BcIlxuICAgICAgICAgICAgICAgICAgICBbKGlzU2VsZWN0ZWRBbGwpXT1cImlzU2VsZWN0ZWRBbGxcIlxuICAgICAgICAgICAgICAgICAgICAoaXNTZWxlY3RlZEFsbENoYW5nZSk9XCJvblRyZWVTZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGVja2VkQ2hhbmdlKT1cIm9uVHJlZUNoZWNrZWRDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8L3plbi1ncm91cHM+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBGbGF0IExpc3QgTW9kZSAoZGVmYXVsdCkgLS0+XG4gICAgICA8bmctdGVtcGxhdGUgI2ZsYXRMaXN0PlxuICAgICAgICA8IS0tIFNlYXJjaCBCb3ggZm9yIGhhc1NlYXJjaCAobm90IGZvciBzZWFyY2ggdHlwZSBhcyBpdCBoYXMgaW5saW5lIHNlYXJjaCkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtc2VsZWN0LXNlYXJjaFwiICpuZ0lmPVwibGVhZGluZ1R5cGUgIT09ICdzZWFyY2gnICYmIGhhc1NlYXJjaCAmJiAhZGlzYWJsZWRcIj5cbiAgICAgICAgICA8emVuLWljb24gW25hbWVdPVwiJ3NlYXJjaCdcIlxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tQ29sb3JdPVwiJyM2NjcwODUnXCI+XG4gICAgICAgICAgPC96ZW4taWNvbj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25TZWFyY2hFbnRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxuICAgICAgICAgICAgICAgICBjbGFzcz1cImFwcC1zZWxlY3Qtc2VhcmNoLWlucHV0XCI+XG4gICAgICAgICAgPHplbi1pY29uICpuZ0lmPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXBwLXNlbGVjdC1zZWFyY2gtY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCIneCdcIlxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tQ29sb3JdPVwiJyM2NjcwODUnXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VhcmNoKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgIDwvemVuLWljb24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gT3B0aW9ucyBMaXN0IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdC1vcHRpb25zXCI+XG4gICAgICAgICAgPCEtLSBTZWxlY3QgQWxsIE9wdGlvbiBmb3IgTXVsdGlzZWxlY3QgLS0+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzTXVsdGlzZWxlY3QgJiYgIWhpZGVTZWxlY3RBbGwgJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhcHAtc2VsZWN0LW9wdGlvbiBzZWxlY3QtYWxsXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWxlY3RBbGwoKVwiPlxuICAgICAgICAgICAgPHplbi1jaGVja2JveCBjbGFzcz1cImFwcC1zZWxlY3QtY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVZhbHVlQ2hhbmdlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIj5cbiAgICAgICAgICAgIDwvemVuLWNoZWNrYm94PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtc2VsZWN0LW9wdGlvbi10ZXh0XCI+XG4gICAgICAgICAgICAgIFNlbGVjdCBBbGxcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDwhLS0gQWRkIE5ldyBPcHRpb24gLS0+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImVuYWJsZUFkZE5ld09wdGlvbiAmJiAoc2hvd0RlZmF1bHRBZGRPcHRpb24gfHwgc2VhcmNoVGV4dClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhcHAtc2VsZWN0LW9wdGlvbiBhZGQtbmV3LW9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWRkTmV3T3B0aW9uKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgPHplbi1pY29uIFtuYW1lXT1cIidwbHVzJ1wiIFtjdXN0b21Db2xvcl09XCInIzEzNkFCNidcIj48L3plbi1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtc2VsZWN0LW9wdGlvbi10ZXh0XCI+XG4gICAgICAgICAgICAgIHt7IChuZXdPcHRpb25UZXh0IHx8ICdBZGQgTmV3IE9wdGlvbicpICsgKHNlYXJjaFRleHQgPyAnOiBcIicgKyBzZWFyY2hUZXh0ICsgJ1wiJyA6ICcnKSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPCEtLSBSZW1vdmUgT3B0aW9uIC0tPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJlbmFibGVSZW1vdmVPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhcHAtc2VsZWN0LW9wdGlvbiByZW1vdmUtb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVSZW1vdmVPcHRpb24oKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICA8emVuLWljb24gW25hbWVdPVwiJ3VzZXIteCdcIiBbY3VzdG9tQ29sb3JdPVwiJyMzNDQwNTQnXCI+PC96ZW4taWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLXNlbGVjdC1vcHRpb24tdGV4dFwiPlxuICAgICAgICAgICAgICB7eyByZW1vdmVPcHRpb25UZXh0IHx8ICdSZW1vdmUnIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCAmJiAhZW5hYmxlQWRkTmV3T3B0aW9uXCIgY2xhc3M9XCJhcHAtc2VsZWN0LW5vLW9wdGlvbnNcIj5cbiAgICAgICAgICAgIE5vIG1hdGNoaW5nIG9wdGlvbnMgZm91bmRcbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhcHAtc2VsZWN0LW9wdGlvblwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPcHRpb24ob3B0aW9uKVwiPlxuXG4gICAgICAgICAgICA8IS0tIENoZWNrYm94IGZvciBNdWx0aXNlbGVjdCAtLT5cbiAgICAgICAgICAgIDx6ZW4tY2hlY2tib3ggY2xhc3M9XCJhcHAtc2VsZWN0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVWYWx1ZUNoYW5nZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIicnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtXCI+XG4gICAgICAgICAgICA8L3plbi1jaGVja2JveD5cblxuICAgICAgICAgICAgPCEtLSBPcHRpb24gTGVhZGluZyBFbGVtZW50IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3Qtb3B0aW9uLWxlYWRpbmdcIiAqbmdJZj1cImxlYWRpbmdUeXBlICE9PSAnZGVmYXVsdCdcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwibGVhZGluZ1R5cGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaWNvbidcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uTGVhZGluZ0VsZW1lbnQ7IGNvbnRleHQ6IHsgb3B0aW9uOiBvcHRpb24gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhdmF0YXInXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXZhdGFyTGVhZGluZ0VsZW1lbnQ7IGNvbnRleHQ6IHsgb3B0aW9uOiBvcHRpb24gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkb3QnXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZG90TGVhZGluZ0VsZW1lbnQ7IGNvbnRleHQ6IHsgb3B0aW9uOiBvcHRpb24gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIE9wdGlvbiBUZXh0IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3Qtb3B0aW9uLXRleHQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8IS0tIFVzZSBjdXN0b20gdGVtcGxhdGUgaWYgcHJvdmlkZWQgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNNdWx0aXNlbGVjdCAmJiBvcHRpb25UZW1wbGF0ZTsgZWxzZSBkZWZhdWx0T3B0aW9uVGV4dFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25UZW1wbGF0ZS50ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbjogb3B0aW9uIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0T3B0aW9uVGV4dD5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFwcC1zZWxlY3Qtb3B0aW9uLXRleHRcIiBbY2xhc3MuYXBwLXNlbGVjdC1vcHRpb24tdHJ1bmNhdGVdPVwiaXNUcnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0TmFtZShvcHRpb24pIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLXNlbGVjdC1vcHRpb24tc2Vjb25kYXJ5XCIgKm5nSWY9XCJvcHRpb24uc2Vjb25kYXJ5VGV4dFwiPlxuICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnNlY29uZGFyeVRleHQgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDaGVjayBJY29uIGZvciBTaW5nbGUgU2VsZWN0IC0tPlxuICAgICAgICAgICAgPHplbi1pY29uICpuZ0lmPVwiIWlzTXVsdGlzZWxlY3QgJiYgaXNTZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFwcC1zZWxlY3Qtb3B0aW9uLWNoZWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInY2hlY2snXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tQ29sb3JdPVwiJyMxMzZBQjYnXCI+XG4gICAgICAgICAgICA8L3plbi1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBcbiAgPCEtLSBIaW50IHRleHQgLyBFcnJvciBtZXNzYWdlIC0tPlxuICA8ZGl2ICpuZ0lmPVwiKGRlc3RydWN0aXZlICYmIGVycm9yTWVzc2FnZSkgfHwgaGludFRleHRcIiBcbiAgICAgICBjbGFzcz1cImFwcC1zZWxlY3QtaGludCB0ZXh0IHRleHQtc20gdGV4dC13ZWlnaHQtcmVndWxhclwiXG4gICAgICAgW25nQ2xhc3NdPVwieydkZXN0cnVjdGl2ZSc6IGRlc3RydWN0aXZlfVwiPlxuICAgIDxpICpuZ0lmPVwiZGVzdHJ1Y3RpdmVcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIGhpbnQtaWNvblwiPmVycm9yX291dGxpbmU8L2k+XG4gICAgPHNwYW4+e3sgKChkZXN0cnVjdGl2ZSAmJiBlcnJvck1lc3NhZ2UpID8gZXJyb3JNZXNzYWdlIDogaGludFRleHQpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT5cbjwhLS0gTUFJTiBTRUxFQ1QgSU5QVVQgVEVNUExBVEVTIC0tPlxuPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+XG5cbjwhLS0gRGVmYXVsdCBTZWxlY3QgVGVtcGxhdGUgKE5vIExlYWRpbmcgRWxlbWVudCkgLS0+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRTZWxlY3RUZW1wbGF0ZT5cbiAgPGJ1dHRvbiBjbGFzcz1cImFwcC1zZWxlY3QtaW5wdXRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIlxuICAgICAgICAgIFtjbGFzcy5mb2N1c2VkXT1cImlzT3BlblwiXG4gICAgICAgICAgW2NsYXNzLmhhcy12YWx1ZV09XCIhaXNNb2RlbEVtcHR5KClcIj5cbiAgICBcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0VmFsdWVEaXNwbGF5XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duQXJyb3dcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEljb24gU2VsZWN0IFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNpY29uU2VsZWN0VGVtcGxhdGU+XG4gIDxidXR0b24gY2xhc3M9XCJhcHAtc2VsZWN0LWlucHV0XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigpXCJcbiAgICAgICAgICBbY2xhc3MuZm9jdXNlZF09XCJpc09wZW5cIlxuICAgICAgICAgIFtjbGFzcy5oYXMtdmFsdWVdPVwiIWlzTW9kZWxFbXB0eSgpXCI+XG4gICAgXG4gICAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3QtbGVhZGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25MZWFkaW5nRWxlbWVudDsgY29udGV4dDogeyBvcHRpb246IGdldFNlbGVjdGVkT3B0aW9uKCksIGljb246IGxlYWRpbmdJY29uIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0VmFsdWVEaXNwbGF5XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duQXJyb3dcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEF2YXRhciBTZWxlY3QgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2F2YXRhclNlbGVjdFRlbXBsYXRlPlxuICA8YnV0dG9uIGNsYXNzPVwiYXBwLXNlbGVjdC1pbnB1dFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiXG4gICAgICAgICAgW2NsYXNzLmZvY3VzZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgICBbY2xhc3MuaGFzLXZhbHVlXT1cIiFpc01vZGVsRW1wdHkoKVwiPlxuICAgIFxuICAgIDxkaXYgY2xhc3M9XCJhcHAtc2VsZWN0LWxlYWRpbmdcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhdmF0YXJMZWFkaW5nRWxlbWVudDsgY29udGV4dDogeyBvcHRpb246IGdldFNlbGVjdGVkT3B0aW9uKCksIGF2YXRhcjogbGVhZGluZ0F2YXRhciB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdFZhbHVlRGlzcGxheVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkFycm93XCI+PC9uZy1jb250YWluZXI+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBEb3QgU2VsZWN0IFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNkb3RTZWxlY3RUZW1wbGF0ZT5cbiAgPGJ1dHRvbiBjbGFzcz1cImFwcC1zZWxlY3QtaW5wdXRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIlxuICAgICAgICAgIFtjbGFzcy5mb2N1c2VkXT1cImlzT3BlblwiXG4gICAgICAgICAgW2NsYXNzLmhhcy12YWx1ZV09XCIhaXNNb2RlbEVtcHR5KClcIj5cbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdC1sZWFkaW5nXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZG90TGVhZGluZ0VsZW1lbnQ7IGNvbnRleHQ6IHsgb3B0aW9uOiBnZXRTZWxlY3RlZE9wdGlvbigpLCBjb2xvcjogbGVhZGluZ0RvdENvbG9yIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0VmFsdWVEaXNwbGF5XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duQXJyb3dcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFNlYXJjaCBJbnB1dCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoSW5wdXRUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3QtaW5wdXQgYXBwLXNlbGVjdC1zZWFyY2gtaW5wdXRcIlxuICAgICAgIFtjbGFzcy5mb2N1c2VkXT1cImlzT3BlbiB8fCBzZWFyY2hGb2N1c2VkXCJcbiAgICAgICBbY2xhc3MuaGFzLXZhbHVlXT1cIiFpc01vZGVsRW1wdHkoKVwiPlxuICAgIFxuICAgIDwhLS0gU2VhcmNoIEljb24gLS0+XG4gICAgPHplbi1pY29uIFtuYW1lXT1cIidzZWFyY2gnXCJcbiAgICAgICAgICAgICAgW2N1c3RvbUNvbG9yXT1cImRpc2FibGVkID8gJyM5Q0EzQUYnIDogJyM2NjcwODUnXCI+XG4gICAgPC96ZW4taWNvbj5cbiAgICBcbiAgICA8IS0tIFNlYXJjaCBJbnB1dCBGaWVsZCAtLT5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICBjbGFzcz1cImFwcC1zZWxlY3Qtc2VhcmNoLWZpZWxkXCJcbiAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hJbnB1dFZhbHVlXCJcbiAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hJbnB1dENoYW5nZSgpXCJcbiAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25TZWFyY2hFbnRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgKGZvY3VzKT1cIm9uU2VhcmNoRm9jdXMoKVwiXG4gICAgICAgICAgIChibHVyKT1cIm9uU2VhcmNoQmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkRGlzcGxheSB8fCBwbGFjZWhvbGRlclwiXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPlxuPCEtLSBTSEFSRUQgQ09NUE9ORU5UIFRFTVBMQVRFUyAtLT5cbjwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPlxuXG48IS0tIFNlbGVjdCBWYWx1ZSBEaXNwbGF5IC0tPlxuPG5nLXRlbXBsYXRlICNzZWxlY3RWYWx1ZURpc3BsYXk+XG4gIDxkaXYgY2xhc3M9XCJhcHAtc2VsZWN0LXZhbHVlLXdyYXBwZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWVUZW1wbGF0ZSAmJiAhaXNNb2RlbEVtcHR5KCk7IGVsc2UgZGVmYXVsdFZhbHVlRGlzcGxheVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInZhbHVlVGVtcGxhdGUudGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbjogZ2V0U2VsZWN0ZWRPcHRpb24oKSwgZGlzcGxheTogc2VsZWN0ZWREaXNwbGF5IH1cIj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VmFsdWVEaXNwbGF5PlxuICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtc2VsZWN0LXZhbHVlXCIgW2NsYXNzLnBsYWNlaG9sZGVyXT1cImlzTW9kZWxFbXB0eSgpXCI+XG4gICAgICAgIHt7IHNlbGVjdGVkRGlzcGxheSB8fCBwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtc2VsZWN0LXNlY29uZGFyeVwiICpuZ0lmPVwiZ2V0U2VsZWN0ZWRTZWNvbmRhcnlUZXh0KCkgJiYgIWlzTW9kZWxFbXB0eSgpXCI+XG4gICAgICAgIHt7IGdldFNlbGVjdGVkU2Vjb25kYXJ5VGV4dCgpIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIERyb3Bkb3duIEFycm93IC0tPlxuPG5nLXRlbXBsYXRlICNkcm9wZG93bkFycm93PlxuICA8emVuLWljb24gY2xhc3M9XCJhcHAtc2VsZWN0LWFycm93XCIgXG4gICAgICAgICAgICBbY2xhc3Mucm90YXRlZF09XCJpc09wZW5cIiBcbiAgICAgICAgICAgIFtuYW1lXT1cIidjaGV2cm9uLWRvd24nXCJcbiAgICAgICAgICAgIFtjdXN0b21Db2xvcl09XCInIzY2NzA4NSdcIj5cbiAgPC96ZW4taWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPlxuPCEtLSBMRUFESU5HIEVMRU1FTlQgVEVNUExBVEVTIC0tPlxuPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+XG5cbjwhLS0gSWNvbiBMZWFkaW5nIEVsZW1lbnQgKHdpdGggc21hcnQgcmVzb2x1dGlvbikgLS0+XG48bmctdGVtcGxhdGUgI2ljb25MZWFkaW5nRWxlbWVudCBsZXQtb3B0aW9uPVwib3B0aW9uXCIgbGV0LWljb249XCJpY29uXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uIHx8IG9wdGlvbj8uaWNvbiB8fCBvcHRpb24/Lmljb25OYW1lXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEljb25QYXRoKG9wdGlvbiwgaWNvbikgYXMgaWNvblBhdGhcIj5cbiAgICAgIDwhLS0gSWYgaWNvbiBjb250YWlucyAvIG9yIC4gdHJlYXQgYXMgU1ZHIHBhdGggLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGljb24gJiYgKGljb24uaW5jbHVkZXMoJy8nKSB8fCBpY29uLmluY2x1ZGVzKCcuJykpKSB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb24/Lmljb24gJiYgKG9wdGlvbi5pY29uLmluY2x1ZGVzKCcvJykgfHwgb3B0aW9uLmljb24uaW5jbHVkZXMoJy4nKSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9uPy5pY29uTmFtZSAmJiAob3B0aW9uLmljb25OYW1lLmluY2x1ZGVzKCcvJykgfHwgb3B0aW9uLmljb25OYW1lLmluY2x1ZGVzKCcuJykpKVwiPlxuICAgICAgICA8IS0tIFVzZSBpbWcgdGFnIGZvciBFeGNlbCB0byBwcmVzZXJ2ZSBjb2xvcnMgLS0+XG4gICAgICAgIDxpbWcgKm5nSWY9XCJpY29uUGF0aC5pbmNsdWRlcygnZXhjZWwnKVwiIFxuICAgICAgICAgICAgIFtzcmNdPVwiaWNvblBhdGhcIiBcbiAgICAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDIwcHg7IGhlaWdodDogMjBweDtcIj5cbiAgICAgICAgPCEtLSBVc2UgemVuLWljb24gd2l0aCBzcmMgZm9yIG90aGVyIFNWRyBmaWxlcyAtLT5cbiAgICAgICAgPHplbi1pY29uICpuZ0lmPVwiIWljb25QYXRoLmluY2x1ZGVzKCdleGNlbCcpXCJcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaWNvblBhdGhcIlxuICAgICAgICAgICAgICAgICAgW2N1c3RvbUNvbG9yXT1cIicjNjY3MDg1J1wiPlxuICAgICAgICA8L3plbi1pY29uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8IS0tIE90aGVyd2lzZSB0cmVhdCBhcyBNYXRlcmlhbCBpY29uIG5hbWUgb3Igc3BlY2lhbCBjYXNlcyAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKChpY29uICYmIChpY29uLmluY2x1ZGVzKCcvJykgfHwgaWNvbi5pbmNsdWRlcygnLicpKSkgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbj8uaWNvbiAmJiAob3B0aW9uLmljb24uaW5jbHVkZXMoJy8nKSB8fCBvcHRpb24uaWNvbi5pbmNsdWRlcygnLicpKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9uPy5pY29uTmFtZSAmJiAob3B0aW9uLmljb25OYW1lLmluY2x1ZGVzKCcvJykgfHwgb3B0aW9uLmljb25OYW1lLmluY2x1ZGVzKCcuJykpKSlcIj5cbiAgICAgICAgPCEtLSBTcGVjaWFsIGNhc2UgZm9yIEV4Y2VsIGljb24gLSB1c2UgaW1nIHRvIHByZXNlcnZlIGNvbG9ycyAtLT5cbiAgICAgICAgPGltZyAqbmdJZj1cIihpY29uID09PSAnZXhjZWwnKSB8fCAob3B0aW9uPy5pY29uID09PSAnZXhjZWwnKSB8fCAob3B0aW9uPy5pY29uTmFtZSA9PT0gJ2V4Y2VsJylcIlxuICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9uZy16ZW5kdWl0L2ljb25zL2V4Y2VsLnN2Z1wiXG4gICAgICAgICAgICAgYWx0PVwiRXhjZWxcIlxuICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDIwcHg7IGhlaWdodDogMjBweDtcIj5cbiAgICAgICAgPCEtLSBNYXRlcmlhbCBpY29uIG5hbWVzIC0tPlxuICAgICAgICA8emVuLWljb24gKm5nSWY9XCIoaWNvbiAhPT0gJ2V4Y2VsJykgJiYgKG9wdGlvbj8uaWNvbiAhPT0gJ2V4Y2VsJykgJiYgKG9wdGlvbj8uaWNvbk5hbWUgIT09ICdleGNlbCcpXCJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImljb24gfHwgb3B0aW9uPy5pY29uIHx8IG9wdGlvbj8uaWNvbk5hbWVcIlxuICAgICAgICAgICAgICAgICAgW2N1c3RvbUNvbG9yXT1cIicjNjY3MDg1J1wiPlxuICAgICAgICA8L3plbi1pY29uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBBdmF0YXIgTGVhZGluZyBFbGVtZW50IC0tPlxuPG5nLXRlbXBsYXRlICNhdmF0YXJMZWFkaW5nRWxlbWVudCBsZXQtb3B0aW9uPVwib3B0aW9uXCIgbGV0LWF2YXRhcj1cImF2YXRhclwiPlxuICA8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdC1hdmF0YXJcIiAqbmdJZj1cImF2YXRhciB8fCBvcHRpb24/LmF2YXRhclwiID5cbiAgICA8aW1nIFtzcmNdPVwiYXZhdGFyIHx8IG9wdGlvbj8uYXZhdGFyXCIgYWx0PVwiXCI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBEb3QgTGVhZGluZyBFbGVtZW50IC0tPlxuPG5nLXRlbXBsYXRlICNkb3RMZWFkaW5nRWxlbWVudCBsZXQtb3B0aW9uPVwib3B0aW9uXCIgbGV0LWNvbG9yPVwiY29sb3JcIj5cbiAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3QtZG90XCJcbiAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJjb2xvciB8fCBvcHRpb24/LmRvdENvbG9yIHx8ICcjMTBCOTgxJ1wiPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
@@ -3964,7 +3964,7 @@ class ZenduSelectComponent {
3964
3964
  * Get selected option for leading display
3965
3965
  */
3966
3966
  getSelectedOption() {
3967
- if (!this.selectModel)
3967
+ if (this.isModelEmpty())
3968
3968
  return null;
3969
3969
  if (this.isMultiselect && Array.isArray(this.selectModel)) {
3970
3970
  if (this.selectModel.length === 1) {