@esfaenza/forms-and-validations 13.3.8 → 13.3.9

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.
@@ -194,7 +194,7 @@ export class BaseFormControl {
194
194
  });
195
195
  // Post trybind se c'è un modello associato ricalcolo l'**EvaluatedModel**
196
196
  if (this.Model)
197
- this.EvaluatedModel = this.BoundSource.find(t => t.id == this.Model)?.description;
197
+ this.BoundSource.find(t => t.id == this.Model)?.description;
198
198
  }
199
199
  }
200
200
  /** Valuta il contenuto della variabile BindCheckingGroups */
@@ -373,8 +373,8 @@ export class BaseFormControl {
373
373
  * Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html
374
374
  */
375
375
  changed(forcedValue = null, markForCheck = false) {
376
- this.propagateChange(forcedValue == null ? this.Model : forcedValue);
377
- this.inputChange.emit(forcedValue == null ? this.Model : forcedValue);
376
+ this.propagateChange(forcedValue == null || forcedValue == "" ? this.Model ?? "" : forcedValue);
377
+ this.inputChange.emit(forcedValue == null || forcedValue == "" ? this.Model ?? "" : forcedValue);
378
378
  if (markForCheck)
379
379
  this.cdr.markForCheck();
380
380
  }
@@ -481,4 +481,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
481
481
  }], inputFinalized: [{
482
482
  type: Output
483
483
  }] } });
484
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9iYXNlLWZvcm0tY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFvRCxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSXZILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7O0FBSTFELGtFQUFrRTtBQUVsRSxNQUFNLE9BQWdCLGVBQWU7SUFnTGpDLDJCQUEyQjtJQUMzQixZQUFzQixHQUFzQixFQUFTLFNBQW9CLEVBQVksV0FBdUIsRUFBc0IsRUFBd0IsRUFBcUIsVUFBNEIsRUFBNkMsYUFBcUIsRUFBOEMsY0FBdUIsRUFBVSxjQUF1QixLQUFLO1FBQWxXLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFZLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQXNCLE9BQUUsR0FBRixFQUFFLENBQXNCO1FBQXFCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQTZDLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQThDLG1CQUFjLEdBQWQsY0FBYyxDQUFTO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBL0t4WDs7Ozs7V0FLRztRQUNLLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFbEMsb0RBQW9EO1FBQzdDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFXakMseUVBQXlFO1FBQy9ELHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUU1Qzs7OztXQUlHO1FBQ08sc0JBQWlC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RyxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wsIE5nRm9ybSwgTmdNb2RlbCwgUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIE9wdGlvbmFsLCBJbmplY3QsIERpcmVjdGl2ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UsIENvbXBvbmVudENvbnRleHQgfSBmcm9tIFwiQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sXCI7XHJcbmltcG9ydCB7IEFDT19DVVNUT01LRVksIEZBVl9ERUJVR19NT0RFIH0gZnJvbSAnLi4vdG9rZW5zJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8qKiBDb21wb25lbnRlIGJhc2UgZGEgY3VpIHR1dHRpIGkgY29tcG9uZW50aSBGb3JtIGltcGxlbWVudGFubyAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VGb3JtQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE0OTg4XHJcbiAgICAgKiBUTDpEUjsgSWwgcHJpbW8gdmFsb3JlIHBhc3NhdG8gYWwgd3JpdGVWYWx1ZSDDqCBudWxsbyBwZXJjaMOpIHF1YW5kbyBpIGNhZ25hY2NpIGZhbm5vIG5ldyBGb3JtQ29udHJvbCgpXHJcbiAgICAgKiBzY3Jpdm9ubyB1biB3cml0ZVZhbHVlIG51bGxvLi4uIHF1aW5kaSBhbCBwcmltbyBiaW5kaW5nIHNhbHRvIGwnaW5pemlhbGl6emF6aW9uZSBzZSBobyBsYSBjb3BwaWEgbnVsbC1maXJzdEJpbmRcclxuICAgICAqIHBvaSBtZXR0ZW5kbyBmaXJzdEJpbmQgYSBmYWxzZSBkaSBsw6wgaW4gcG9pIGZ1bnppb25vIGNvbWUgZGV2by4gVmlzdGEgbGEgY2FzaXN0aWNhIGV2aXRvIGVzc2VuemlhbG1lbnRlIG1ldMOgIGRldGVjdENoYW5nZXNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmaXJzdEJpbmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2UgaWwgY2FtcG8gw6ggb2JibGlnYXRvcmlvIGkgb3B6aW9uYWxlICovXHJcbiAgICBwdWJsaWMgUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogTW9kZWxsbyByYXBwcmVzZW50YXRvIGRhIHF1ZXN0byBjYW1wbyAqL1xyXG4gICAgcHVibGljIE1vZGVsOiBhbnk7XHJcblxyXG4gICAgLyoqIFZhbG9yZSBkZWwgTW9kZWxsbyAqL1xyXG4gICAgcHVibGljIEV2YWx1YXRlZE1vZGVsOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIE5vbWUgZ2VuZXJhdG8gcGVyIGlsIGNvbnRyb2xsbyBpbnRlcm5vLiBEaSBkZWZhdWx0IMOoIGlsIG5vbWUgZGVsIGNvbnRyb2xsbyBlc3Rlcm5vIGNvbiBsJ2FnZ2l1bnRhIGRpIFwiX2ludGVybmFsXCIuIFNlcnZlIHBlciBldml0YXJlIGNyb3NzLWJpbmQgKi9cclxuICAgIHB1YmxpYyBHZW5lcmF0ZWROYW1lOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSBpbCBGb3JtIGNoZSBjb250aWVuZSBxdWVzdG8gY2FtcG8gw6ggZ2nDoCBzdGF0byByZWdpc3RyYXRvICovXHJcbiAgICBwcm90ZWN0ZWQgZm9ybUhhc0Jlbm5Cb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIHF1ZXN0byBjYW1wbyDDqCBzdGFjY2F0byBkYWwgRm9ybSwgYWQgZXNlbXBpbyBuZWwgY2FzbyBzaWEgaW4gdW4gbmctdGVtcGxhdGUgcHJvaWV0dGF0byBuZWwgZm9ybS5cclxuICAgICAqIFxyXG4gICAgICogSW4gcXVlbCBjYXNvIGxhIHZhcmlhYmlsZSAqKkZvcm0qKiBkZWwgY29tcG9uZW50ZSBkZXYnZXNzZXJlIHZhbG9yaXp6YXRhXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBkZXRhdGNoZWRGcm9tZm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcm90ZWN0ZWQgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcm90ZWN0ZWQgb25Ub3VjaGVkID0gKCkgPT4geyB9O1xyXG5cclxuICAgIC8qKiBAaWdub3JlIFZlZGkgZ2V0dGVyIGUgc2V0dGVyICovXHJcbiAgICBwcml2YXRlIF9yZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVhbG9yYSBjaSBmb3NzZSB1biBjb250ZXN0byBjb2xsZWdhdG8gcXVlc3RhIHZhcmlhYmlsZSBpZGVudGlmaWNhIHNlIFNvbm8gbCdPd25lciBvIG1lbm8uXHJcbiAgICAgKiBcclxuICAgICAqIFNlIG5vbiBsbyBzb25vLCBpbCBjYW1wbyByaXN1bHRlcsOgIGluIHNvbGEgbGV0dHVyYSBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBBcHBDb250ZXh0T3duZXJzaGlwOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogU3ViamVjdCBhIGN1aSBsJ29nZ2V0dG8gaW50ZXJubyBzaSBjb2xsZWdhIHBlciBlZmZldHR1YXJlIGlsIGZvY3VzIGRlbGwnZWxlbWVudG8gaW5wdXQgc290dG9zdGFudGUgKi9cclxuICAgIEBJbnB1dCgpIEZvY3VzU3ViamVjdDogU3ViamVjdDx2b2lkPjtcclxuXHJcbiAgICAvKiogTW9kYWxpdMOgIGluIGN1aSB2aWVuZSBtb3N0cmF0byBpbCBjYW1wbywgMS0xIHJpc3BldHRvIGFsbGUgZGVmaW5pemlvbmkgZGkgQW5ndWxhciBNYXRlcmlhbCAgKi9cclxuICAgIEBJbnB1dCgpIEZpZWxkQXBwZWFyZW5jZTogXCJsZWdhY3lcIiB8IFwic3RhbmRhcmRcIiB8IFwiZmlsbFwiIHwgXCJvdXRsaW5lXCIgPSBcIm91dGxpbmVcIjtcclxuXHJcbiAgICAvKiogVXRpbGl6emEgbyBtZW5vIGlsIExheW91dCBkaSB1biBmb3JtIChMYWJlbCBjb24gaW5wdXQgZGkgZmlhbmNvKSwgc2UgZmFsc2UgbW9zdHJhIHNvbG8gbCdpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgRm9ybUxheW91dDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIEluZGljYSBjaGUgbGEgcGFydGUgaW5wdXQgZGVsIGNvbnRyb2xsbyBkZXYnZXNzZXJlIHVuYSBsYWJlbCByZWFkb25seSBlIGxhIHBhcnRlIGxhYmVsIGRpIHRpdG9sbyBkZXYnZXNzZXJlIGluIGJvbGQuIFBlciB1dGlsaXp6YXJlIHVuIHNvbG8gY29tcG9uZW50ZSBzaWEgcGVyIGxhIG1vZGlmaWNhIGNoZSBwZXIgaWwgZGV0dGFnbGlvICovXHJcbiAgICBASW5wdXQoKSBEaXNwbGF5TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBEZWZpbmlzY2Ugc2UgcmljaGlhbWFyZSBsJ0V2ZW50RW1pdHRlciAqKmlucHV0Q2hhbmdlKiogaW4gbWFuaWVyYSBjbGFzc2ljYSAodHJ1ZSkgbyBzb2xvIHBlciBsYSBjaGFuZ2UgY29uc2lkZXJhdGUgZGVmaW5pdGl2ZSBjb21lIHRhc3RvIGludmlvIC8gYmx1ciAvIGVjYy4uLiAoZmFsc2UpICovXHJcbiAgICBASW5wdXQoKSBFbWl0UGVuZGluZ0NoYW5nZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBBdHRpdmEgbyBkaXNhdHRpdmEgbGEgdmFsaWRhemlvbmUgcGVyIHF1ZXN0byBjb21wb25lbnRlICovXHJcbiAgICBASW5wdXQoKSBWYWxpZGF0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogUGxhY2Vob2xkZXIgcGVyIHF1YW5kbyBsJ2lucHV0IMOoIHZ1b3RvICovXHJcbiAgICBASW5wdXQoKSBQbGFjZWhvbGRlcjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogQ2xhc3NlIGV4dHJhIHBlciBpbCBmb3JtLWdyb3VwIGluIGN1aSB2aWVuZSB3cmFwcGF0byBsJ2lucHV0ICovXHJcbiAgICBASW5wdXQoKSBGb3JtR3JvdXBDbGFzczogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogTWVzc2FnZ2lvIGRhIG1vc3RyYXJlIHF1YW5kbyBsYSB2YWxpZGF6aW9uZSBmYWxsaXNjZSBwZXIgcXVlc3RvIGNvbXBvbmVudGUuIERpIGRlZmF1bHQgdmllbmUgcHJvcG9zdGEgZGFsbGEgbGlicmVyaWEgKi9cclxuICAgIEBJbnB1dCgpIEZhaWxlZFZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBJbnB1dCBjaGUgZm9yemEgbCdpbnZhbGlkaXTDoCBkZWwgY29tcG9uZW50ZSAqL1xyXG4gICAgQElucHV0KCkgRm9yY2VkRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogTW9zdHJhIHVuIHRlc3RvIGEgc2luaXN0cmEgZGVsbCdpbnB1dCAoRm9ybUxheW91dCBwZXJtZXR0ZW5kbykgKi9cclxuICAgIEBJbnB1dCgpIExhYmVsOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBjb2wtbWQtWCBwZXIgbGEgbGFiZWwgKi9cclxuICAgIEBJbnB1dCgpIExhYmVsQ29sV2lkdGg6IG51bWJlciA9IDQ7XHJcblxyXG4gICAgLyoqIGNvbC1tZC1YIHBlciBsJ2lucHV0ICovXHJcbiAgICBASW5wdXQoKSBJbnB1dENvbFdpZHRoOiBudW1iZXIgPSA4O1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2Ugw6ggbCd1bHRpbW8gY29tcG9uZW50ZSBkaSB1biBmb3JtIChzZXJ2ZSBwZXIgcmltdW92ZXJlIGlsIG1hcmdpbmUgZmluYWxlKSAqL1xyXG4gICAgQElucHV0KCkgTGFzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBBc3NvY2lhIGlsIGNvbXBvbmVudGUgRm9ybSBhIHF1ZXN0byBpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgRm9ybTogTmdGb3JtID0gbnVsbDtcclxuXHJcbiAgICAvKiogU29yZ2VudGUgZGEgY3VpIHNjZWdsaWVyZSB2YWxvcmkgcGVyIGkgY29tcG9uZW50aSBGb3JtIGNoZSBsbyBjb25zZW50b25vICovXHJcbiAgICBASW5wdXQoKSBTb3VyY2U6IGFueVtdO1xyXG5cclxuICAgIC8qKiBOb21lIGRlbGxhIHByb3ByaWV0w6AgY2hlIGNvbnRpZW5lIGwnSWQgZGVnbGkgb2dnZXR0aSBiaW5kYXRpIG5lbGxhICoqU291cmNlKiogKi9cclxuICAgIEBJbnB1dCgpIElkRmllbGQ6IHN0cmluZyA9ICdpZCc7XHJcblxyXG4gICAgLyoqIFRlbXBsYXRlIHBlciB2aXN1YWxpenphcmUgbGEgbW9kYWxpdMOgICoqRGlzcGxheU1vZGUqKiBjb21lIHZ1b2xlIGlsIHByb2dyYW1tYXRvcmUgZnJvY2lvIGRpIHR1cm5vICovXHJcbiAgICBASW5wdXQoKSBEaXNwbGF5TW9kZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNwcmVzc2lvbmUgc2ltaWwtQW5ndWxhciBwZXIgY2FtYmlhcmUgaWwgdGVzdG8gZGVpIGNvbXBvbmVudGkgY2hlIHNjZWxnb25vIGlsIHByb3ByaW8gbW9kZWxsbyBkYSB1bmEgKipTb3VyY2UqKlxyXG4gICAgICogXHJcbiAgICAgKiBJbCBmdW56aW9uYW1lbnRvIMOoIGlkZW50aWNvIGFsIGJpbmRlciBkaSBhbmd1bGFyLCBzb2xvIGNvbiB1bmEgZ3JhZmZhIGludmVjZSBjaGUgMi5cclxuICAgICAqIMOIIGlub2x0cmUgcG9zc2liaWxlIGFnZ2l1bmdlcmUgcGV6emkgZGkgZGVzY3JpemlvbmUgaW4gbWFuaWVyYSBjb25kaXppb25hbGUgY29uIGxhIHNpbnRhc3NpICoqOnByb3A/KFByb3AgdmFsZSB7cHJvcH0pKipcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgRGlzcGxheTogc3RyaW5nID0gJ3tkZXNjcmlwdGlvbn0nO1xyXG5cclxuICAgIC8qKiBSaXN1bHRhdG8gZGVsbCd1bmlvbmUgZnJhIGxlIGluZm9ybWF6aW9uaSBkZWdsaSBvZ2dldHRpIGluICoqU291cmNlKiogZSBsZSBpbXBvc3Rhemlvbmkgc3BlY2lmaWNhdGUgbmVsbCdJbnB1dCAqKkRpc3BsYXkqKiAqL1xyXG4gICAgcHVibGljIEJvdW5kU291cmNlOiB7IGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSDDqCBpbCBwcmltbyBCaW5kIGRlbGxhIFNvdXJjZSAqL1xyXG4gICAgcHJvdGVjdGVkIFNvdXJjZUZpcnN0QmluZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdHRpZW5lIGlsIHZhbG9yZSBkZWxsYSB2YXJpYWJpbGUgKipfcmVhZG9ubHkqKlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gKip0cnVlKiogc2Ugc29sYSBsZXR0dXJhLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhZG9ubHkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9yZWFkb25seTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wb3N0YSBpbCB2YWxvcmUgZGVsbGEgdmFyaWFiaWxlICoqX3JlYWRvbmx5KiogZ2VzdGVuZG8gYW5jaGUgaWwgQ29udGVzdG8gYXBwbGljYXRpdm9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSBWYWxvcmUgZGEgaW1wb3N0YXJlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHNldCBSZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLkFwcENvbnRleHRPd25lcnNoaXApXHJcbiAgICAgICAgICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJtZXR0ZSBkaSBzZXR0YXJlIGluIHVuYSB2b2x0YSBzb2xvIGdsaSBpbnB1dCBMYWJlbENvbFdpZHRoIGUgSW5wdXRDb2xXaWR0aCwgYmFzdGEgc2NyaXZlcmxvIGNvbiBsYSBzaW50YXNzaSBcIlggWVwiXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCBJbnB1dCBuZWwgZm9ybWF0byBcIlggWVwiXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHNldCBMYWJlbElucHV0UmF0aW8oaW5wdXQ6IHN0cmluZykge1xyXG4gICAgICAgIHZhciByYXRpbyA9IGlucHV0LnNwbGl0KC9cXHMvKTtcclxuICAgICAgICB0aGlzLkxhYmVsQ29sV2lkdGggPSBwYXJzZUludChyYXRpb1swXSk7XHJcbiAgICAgICAgdGhpcy5JbnB1dENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMV0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiB2YWwtcXVhbGNvc2EgY2hlIGZhIGVmZmV0dGl2YW1lbnRlIGRhIGlucHV0LCBvIGV2ZW50dWFsbWVudGUgaWwgc2luZ29sbyBpbnB1dCBpbiBjYXNpIHBhcnRpY29sYXJpIChlcyBjaGVja2JveCkgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0aW9uQ29udHJvbDogTmdNb2RlbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1ZXJ5IHN1bGwnZWxlbWVudG8gJ3ZhbGlkYXRpb25Db250cm9sJyBjaGUgZnVuemlvbmEgaW4gYW1iaWVudGUgc3RhdGljb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge05nTW9kZWx9IGNvbXAgRWxlbWVudG8gSFRNTCBtYXJjYXRvIGNvbiBcIiN2YWxpZGF0aW9uQ29udHJvbFwiXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoXCJ2YWxpZGF0aW9uQ29udHJvbFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgc2V0IF92YWxpZGF0aW9uQ29udHJvbChjb21wOiBOZ01vZGVsKSB7IHRoaXMucmVnaXN0ZXJWYWxDb21wKGNvbXApOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWVyeSBzdWxsJ2VsZW1lbnRvICd2YWxpZGF0aW9uQ29udHJvbCcgY2hlIGZ1bnppb25hIGluIGFtYmllbnRlIGRpbmFtaWNvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7TmdNb2RlbH0gY29tcCBFbGVtZW50byBIVE1MIG1hcmNhdG8gY29uIFwiI3ZhbGlkYXRpb25Db250cm9sXCJcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChcInZhbGlkYXRpb25Db250cm9sXCIsIHsgc3RhdGljOiB0cnVlIH0pIHNldCB2YWxpZGF0aW9uQ29udHJvbF9zdGF0aWMoY29tcDogTmdNb2RlbCkgeyB0aGlzLnJlZ2lzdGVyVmFsQ29tcChjb21wKTsgfTtcclxuXHJcbiAgICAvKiogRXZlbnRvIGNoaWFtYXRvIGFsbGEgbW9kaWZpY2EgZGVsIHZhbG9yZSBjb2xsZWdhdG8gYSBxdWVzdG8gY2FtcG8gKi9cclxuICAgIEBPdXRwdXQoKSBpbnB1dENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICAvKiogRXZlbnRvIGNoaWFtYXRvIGFsIGZvY3VzIGRlbCBjYW1wbyBkaSB0ZXN0by9jb21iby9xdWVsY2hlw6gsIHJpZW1pdHRhIGwnZXZlbnRvIG9yaWdpbmFsZSBKYXZhc2NyaXB0ICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRGb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKiogRXZlbnRvIGNoaWFtYXRvIGFsIGZpbmFsaXplIGRlbCBjYW1wbyBkaSB0ZXN0by9jb21iby9xdWVsY2hlw6ggKi9cclxuICAgIEBPdXRwdXQoKSBpbnB1dEZpbmFsaXplZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKiogQ2FjaGUgZGVsbGUgY29uZGl6aW9uaSBzY3JpdHRlIHRpcG8gOnByb3A/KFJvYmEgY29uIHtwcm9wfSkgKi9cclxuICAgIHByaXZhdGUgQmluZENoZWNraW5nR3JvdXBzOiB7IGdsb2JhbDogc3RyaW5nLCBwcm9wOiBzdHJpbmcsIHdoZW5leGlzdHM6IHN0cmluZyB9W10gPSBbXVxyXG5cclxuICAgIC8qKiBDYWNoZSBkZWxsZSBwcm9wcmlldMOgIHNjcml0dGUgdGlwbyAtLT4ge3Byb3B9ICovXHJcbiAgICBwcml2YXRlIEJpbmRQcm9wZXJ0aWVzOiB7IGdsb2JhbDogc3RyaW5nLCBwcm9wOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLCBwcm90ZWN0ZWQgX3ZhbGlkYXRvcnM6IEFycmF5PGFueT4sIEBPcHRpb25hbCgpIHByaXZhdGUgYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBAT3B0aW9uYWwoKSBwdWJsaWMgQXBwQ29udGV4dDogQ29tcG9uZW50Q29udGV4dCwgQE9wdGlvbmFsKCkgQEluamVjdChBQ09fQ1VTVE9NS0VZKSBwcml2YXRlIEFDT19DVVNUT01LRVk6IHN0cmluZywgQE9wdGlvbmFsKCkgQEluamVjdChGQVZfREVCVUdfTU9ERSkgcHJpdmF0ZSBGQVZfREVCVUdfTU9ERTogYm9vbGVhbiwgcHJpdmF0ZSBuYXRpdmVJbnB1dDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblxyXG4gICAgICAgIGlmIChuZ0NvbnRyb2wgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFuZGxlTnVsbE5nQ29udHJvbCgpKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIm5nQ29udHJvbCBudWxsbyBwZXIgcXVhbGNoZSBtb3Rpdm8hIElsIDkwJSBkZWxsZSBmdW56aW9uYWxpdMOgIGRpIHF1ZXN0byBpbnB1dCBzYXJhbm5vIGRpc2FiaWxpdGF0ZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vU2UgbWkgYXJyaXZhIGwnaW5qZWN0YWJsZSBkZWwgY29udGVzdG8gcG9zc28gY2FwaXJlIHNlIHF1ZXN0byBjYW1wbyBkZXZlIGVzc2VyZSBpbiByZWFkb25seSBvIG5vLCBzb2xvIHNlIGhvIGdpw6AgaW5pemlhbGl6emF0byBpIGNvbnRyb2xsZXIgY3VzdG9tIGRlbGwnYWNjZXNzIGNvbnRyb2xcclxuICAgICAgICBpZiAodGhpcy5BcHBDb250ZXh0ICYmIHRoaXMuQXBwQ29udGV4dC5uYW1lICYmIHRoaXMuQUNPX0NVU1RPTUtFWSAmJiB0aGlzLmFjICYmIHRoaXMuYWMuSW5pdGlhbGl6ZWRDdXN0b20pIHtcclxuICAgICAgICAgICAgdGhpcy5BcHBDb250ZXh0T3duZXJzaGlwID0gIXRoaXMuYWMuaGFzKHRoaXMuQUNPX0NVU1RPTUtFWSArIFwiOlwiICsgdGhpcy5BcHBDb250ZXh0Lm5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWFkb25seSA9ICF0aGlzLkFwcENvbnRleHRPd25lcnNoaXBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuXHJcbiAgICAgICAgLy9TZSBobyBnacOgIHVuIHBhcmVudCBpbXBvc3RhdG8gdnVvbCBkaXJlIGNoZSBzb3R0byBhbCB0YWcgPGZvcm0+IGhvIGRpcmV0dGFtZW50ZSB1biB0YWcgPGZvcm0tKj4uLlxyXG4gICAgICAgIC8vLi4gcXVpbmRpIHBvc3NvIGltcG9zdGFyZSBkaXJldHRhbWVudGUgaWwgcmlmZXJpbWVudG8gZGVsIEZvcm0gZGEgdXNhcmUgaW4gSFRNTCBwZXIgaWwgc3VibWl0dGVkXHJcblxyXG4gICAgICAgIC8vU2Ugbm9uIGMnw6ggdnVvbCBkaXJlIGNoZSBkZW50cm8gYWwgdGFnIDxmb3JtPiBjJ8OoIHVubyBzcGxlbmRpZG8gPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiAuLi4uXCI+Li5cclxuICAgICAgICAvLy4uIGlsIHF1YWxlIGEgc3VhIHZvbHRhIGNvbnRpZW5lIGlsIGNvbnRyb2xsbyA8Zm9ybS0qPiBxdWluZGkgYXZyw7IgaWwgZm9ybSBuZWxsJ2lucHV0IFwiRm9ybVwiXHJcbiAgICAgICAgaWYgKCg8YW55Pm5nQ29udHJvbCkuX3BhcmVudClcclxuICAgICAgICAgICAgdGhpcy5Gb3JtID0gPE5nRm9ybT4oPGFueT5uZ0NvbnRyb2wpLl9wYXJlbnQ7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmRldGF0Y2hlZEZyb21mb3JtID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy9RdWVzdGEgc2VydmUgcGVyIGltcG9zdGFyZSBtZSBzdGVzc28gY29tZSBzaSBkZXZlLCBpbCB2YWxpZGF0b3JlIGludmVjZSBsbyBwYXNzbyBhbCB2YWxpZGF0aW9uLWlucHV0IHF1YW5kbyB2aWVuZSBzZXR0YXRvIGlsIHZhbGlkYXRpb25Db250cm9sXHJcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAgICAgICAgIC8vUGVyIHR1dHRpIGkgdmFsaWRhdG9yaTogcmlnZW5lcm8gbGEgZnVuemlvbmUgZGkgdmFsaWRhemlvbmUuIFBlciBxdWFsY2hlIG1vdGl2byBhIHZvbHRlIGhvIHZhbGlkYXRvcmkgc2VuemEuLi5cclxuICAgICAgICAgICAgLy8uLi4gcXVlc3RvIMOoIHVuIHdvcmthcm91bmQgcGVyIGVzc2VyZSBzaWN1cm8gZGkgYXZlcmxhIHNlbXByZS5cclxuICAgICAgICAgICAgLy9Tb2xvIGkgdmFsaWRhdG9yaSBjb24gcGFyYW1ldHJpIGhhbm5vIGJpc29nbm8gZGVsbGEgX2NyZWF0ZVZhbGlkYXRvciAoZXMuIFwibWF4bGVuZ3RoXCIgY2hlIGhhIDEgcGFyYW1ldHJvKSwgcXVpbmRpIG5vIHZhbGlkYXRvcmkgdGlwbyBcInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRvcnMuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodi5fY3JlYXRlVmFsaWRhdG9yKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2Ll9jcmVhdGVWYWxpZGF0b3IoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuYWRkVmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWZmZXR0dWEgaWwgQmluZC9QYXJzZSBkZWxsZSB2YXJpZSAqKlNvdXJjZSoqIHVuZW5kbyBsZSBpbmZvcm1hemlvbmkgc3BlY2lmaWNhdGUgaW4gKipEaXNwbGF5KipcclxuICAgICAqIFxyXG4gICAgICogRXZlbnR1YWxtZW50ZSByaWVmZmV0dHVhIHVuIGJpbmQgYWwgbW9kZWxsbyBpbiBiYXNlIGFsIHZhbG9yZSBkZWxsYSB2YXJpYWJpbGUgKipSZWJpbmRNb2RlbEFmdGVyU291cmNlKipcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHRyeUJpbmRTb3VyY2VEaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5Tb3VyY2UpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU291cmNlLmxlbmd0aCA9PSAwICYmICF0aGlzLlNvdXJjZUZpcnN0QmluZClcclxuICAgICAgICAgICAgdGhpcy5Cb3VuZFNvdXJjZSA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLlNvdXJjZUZpcnN0QmluZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBDYWNoZSBsb2NhbGUgcGVyIGV2aXRhcmUgZGkgcmlmYXJlIGRlaSByZWdleC5tYXRjaCBvZ25pIHNhbnRhIHZvbHRhXHJcbiAgICAgICAgaWYgKHRoaXMuU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5Cb3VuZFNvdXJjZSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuQmluZENoZWNraW5nR3JvdXBzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZUJpbmRDaGVja2luZ0dyb3VwcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuQmluZFByb3BlcnRpZXMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRlQmluZFByb3BlcnRpZXMoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEJsb2NjbyBwZXIgZ2VuZXJhcmUgbGEgZGVzY3JpemlvbmUgZmluYWxlIGRpIHVuIGVsZW1lbnRvXHJcbiAgICAgICAgICAgIHRoaXMuU291cmNlLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBBZ2dpdW5nbyBhbGxhIEJvdW5kU291cmNlIGluIGZvcm1hdG8gc3RhbmRhcmQgS2V5VmFsdWVcclxuICAgICAgICAgICAgICAgIHRoaXMuQm91bmRTb3VyY2UucHVzaCh0aGlzLnRyYW5zZm9ybVNvdXJjZUl0ZW0ocykpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIFBvc3QgdHJ5YmluZCBzZSBjJ8OoIHVuIG1vZGVsbG8gYXNzb2NpYXRvIHJpY2FsY29sbyBsJyoqRXZhbHVhdGVkTW9kZWwqKlxyXG4gICAgICAgICAgICBpZih0aGlzLk1vZGVsKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuQm91bmRTb3VyY2UuZmluZCh0ID0+IHQuaWQgPT0gdGhpcy5Nb2RlbCk/LmRlc2NyaXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogVmFsdXRhIGlsIGNvbnRlbnV0byBkZWxsYSB2YXJpYWJpbGUgQmluZENoZWNraW5nR3JvdXBzICovXHJcbiAgICBwcml2YXRlIGV2YWx1YXRlQmluZENoZWNraW5nR3JvdXBzKCkge1xyXG4gICAgICAgIC8vIEJsb2NjbyBwZXIgdGlyYXJlIGZ1b3JpIGxlIGNvbmRpemlvbmkgc2NyaXR0ZSB0aXBvIC0tPiA6cHJvcD8oUm9iYSBjb24ge3Byb3B9KVxyXG4gICAgICAgIHZhciBpZmZlZE1hdGNoZXMgPSB0aGlzLkRpc3BsYXkubWF0Y2goLzooW2Etel0rKVxcP1xcKChbXlxcKFxcKV0rKVxcKS9nKTtcclxuICAgICAgICBpZiAoaWZmZWRNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgIGlmZmVkTWF0Y2hlcy5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gU3Rlc3NhIHJlZ2V4IGRpIHNvcHJhIG1hIGlsIHRhZyBcImlcIiBzZXJ2ZSBwZXIgdGlyYXJlIGZ1b3JpIGkgc2luZ29saSBjYXB0dXJpbmcgZ3JvdXAgZSBwZXIgcXVhbGNoZSBtb3Rpdm8gXHJcbiAgICAgICAgICAgICAgICAvLyBuZXcgUmVnRXhwKGJhc2VSZWdleCwgXCJnXCIpIG5vbiBmdW56aW9uYSBxdWluZGkgbm9uIGhvIHBvdHV0byByYXppb25hbGl6emFybG9cclxuICAgICAgICAgICAgICAgIGxldCBncm91cHMgPSBtLm1hdGNoKC86KFthLXpdKylcXD9cXCgoW15cXChcXCldKylcXCkvaSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkJpbmRDaGVja2luZ0dyb3Vwcy5wdXNoKHsgZ2xvYmFsOiBtLCBwcm9wOiBncm91cHNbMV0sIHdoZW5leGlzdHM6IGdyb3Vwc1syXSB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBWYWx1dGEgaWwgY29udGVudXRvIGRlbGxhIHZhcmlhYmlsZSBCaW5kUHJvcGVydGllcyAqL1xyXG4gICAgcHJpdmF0ZSBldmFsdWF0ZUJpbmRQcm9wZXJ0aWVzKCkge1xyXG4gICAgICAgIC8vIEJsb2NjbyBwZXIgdGlyYXJlIGZ1b3JpIGxlIHByb3ByaWV0w6Agc2NyaXR0ZSB0aXBvIC0tPiB7cHJvcH1cclxuICAgICAgICB2YXIgbWF0Y2hlcyA9IHRoaXMuRGlzcGxheS5tYXRjaCgve1thLXpdK30vZ2kpO1xyXG4gICAgICAgIGlmIChtYXRjaGVzKVxyXG4gICAgICAgICAgICBtYXRjaGVzLmZvckVhY2gobSA9PiB7IHRoaXMuQmluZFByb3BlcnRpZXMucHVzaCh7IGdsb2JhbDogbSwgcHJvcDogbS5zdWJzdHJpbmcoMSwgbS5sZW5ndGggLSAxKSB9KTsgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFzZm9ybWEgdW4gb2dnZXR0byBkZWxsYSBTb3VyY2UgYWxsYSBzdWEgdmVyc2lvbmUgXCJudW92YVwiIGJhc2FuZG9zaSBzdWxsZSBpbmZvcm1hemlvbmkgc3UgZ3J1cHBpIGUgcHJvcHJpZXTDoFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBPZ2dldHRvIGRhIHRyYXNmb3JtYXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHt7aWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZ319IE9nZ2V0dG8gZmluYWxlIHRyYXNmb3JtYXRvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdHJhbnNmb3JtU291cmNlSXRlbShzOiBhbnkpOiB7aWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZ30ge1xyXG4gICAgICAgIC8vIFBhcnRvIHNlbXByZSBkYWxsYSB2YXJpYWJpbGUgZGkgRGlzcGxheSwgcG9pIHNvc3RpdHVpc2NvIHBlenpvIHBlciBwZXp6b1xyXG4gICAgICAgIGxldCBkZXNjID0gdGhpcy5EaXNwbGF5O1xyXG5cclxuICAgICAgICAvLyBUYWdsaW8gbyBtYW50ZW5nbyBsZSBjb25kaXppb25pIGluIGJhc2UgYWxsYSBwcm9wcmlldMOgIHN1IGN1aSBmYXJlIGNoZWNrXHJcbiAgICAgICAgLy8gRG9wb2RpY2jDqSBzY3Jpdm8gdHV0dGUgbGUgcHJvcHJpZXTDoFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5CaW5kQ2hlY2tpbmdHcm91cHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHQgPSB0aGlzLkJpbmRDaGVja2luZ0dyb3Vwc1tpXTtcclxuICAgICAgICAgICAgZGVzYyA9IGRlc2MucmVwbGFjZSh0Lmdsb2JhbCwgKHNbdC5wcm9wXSAhPSBudWxsICYmIHNbdC5wcm9wXSAhPSB1bmRlZmluZWQpID8gdC53aGVuZXhpc3RzIDogXCJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuQmluZFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHQgPSB0aGlzLkJpbmRQcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgICAgICBkZXNjID0gZGVzYy5yZXBsYWNlKHQuZ2xvYmFsLCBzW3QucHJvcF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHsgaWQ6IHNbdGhpcy5JZEZpZWxkXSwgZGVzY3JpcHRpb246IGRlc2MgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBpbCBjb21vcG5lbnRlIGluIHF1ZXN0aW9uZSDDqCBpbiBncmFkbyBkaSBnZXN0aXJlIG5nQ29udHJvbCBudWxsaS4gXHJcbiAgICAgKiBEaSBkZWZhdWx0IMOoICoqZmFsc2UqKlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gKip0cnVlKiogc2UgZ2VzdGlzY28gbmdDb250cm9sIG51bGxpLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBoYW5kbGVOdWxsTmdDb250cm9sKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgLy8gQSB2b2x0ZSBuZWxsJ25nT25Jbml0IG5vbiBjaSBwYXNzYSBxdWluZGkgbG8gbWV0dG8gc2lhIHF1aSBzaWEgbmVsbCdhZnRlcnZpZXdpbml0LCBwZW5zbyBjaGUgdmFsZ2EgcGVyIGkgY29tcG9uZW50aSBkaSB0ZXJ6ZSBwYXJ0aVxyXG4gICAgICAgIC8vIGNoZSBzaSBjb2xsZWdhbm8gcGVyIGkgY2F6emkgbG9ybyBhbCBmb3JtIGVjYywgcXVpbmRpIGxhIHBhcnRlIHNvcHJhIG5vbiBzZXJ2ZS4uLiBCT0hcclxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRWYWxpZGF0b3IoKTtcclxuXHJcbiAgICAgICAgLy9JbCBub21lIG5vbiBjJ8OoIHNlIG1ldHRvIHN0YW5kYWxvbmUgOiB0cnVlIChDSEUgTk9OIMOpIERBIE1FVFRFUkUpXHJcbiAgICAgICAgLy9EYXRvIGNoZSBhbmNoZSBpbCBjb250cm9sbG8gZXN0ZXJubyB2aWVuZSBjb25zaWRlcmF0byBjb21lIGNvbXBvbmVudGUgZGVsIGZvcm0sIG5vbiBwb3NzbyBiYXNhcm1pIHNvbG8gc3VsIG5vbWUgbWEgZGV2byBhZ2dpdW5nZXJlIHVuIHRhZy4gSW4gcXVlc3RvIGNhc28gXCJfaW50ZXJuYWxcIlxyXG4gICAgICAgIC8vIEFUVEVOWklPTkU6IFFVQUxTSUFTSSBTSUEgSUwgTU9USVZPLCBTRSBTVE8gQ09TTyBWSUVORSBTUE9TVEFUTyBEQUxMIG5nT25Jbml0IE5PTiBGVU5aSU9OQSBQSVUgTlVMTEFcclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wubmFtZSlcclxuICAgICAgICAgICAgdGhpcy5HZW5lcmF0ZWROYW1lID0gdGhpcy5uZ0NvbnRyb2wubmFtZS50b1N0cmluZygpICsgXCJfaW50ZXJuYWxcIjtcclxuXHJcbiAgICAgICAgLy8gQVRURU5aSU9ORTogUVVBTFNJQVNJIFNJQSBJTCBNT1RJVk8sIFNFIFNUTyBDT1NPIFZJRU5FIFNQT1NUQVRPIERBTEwgbmdPbkluaXQgTk9OIEZVTlpJT05BIFBJVSBOVUxMQVxyXG4gICAgICAgIGlmICh0aGlzLkZvcm0pIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmZvcm1IYXNCZW5uQm91bmQgJiYgdGhpcy52YWxpZGF0aW9uQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Gb3JtLmFkZENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1IYXNCZW5uQm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBRdWFuZG8gdW4gZm9ybSB2aWVuZSBzdWJtaXR0YXRvIGxhIHZhcmlhYmlsZSBGb3JtLnN1Ym1pdHRlZCB2aWVuZSBhc3NlZ25hdGEgYWxsJ2lucHV0IFtzdWJtaXR0ZWRdIGRlbCB2YWwtY29udHJvbFxyXG4gICAgICAgICAgICAvLyBFc3NlbmRvIGNoZSBwZXLDsiBsYSBDRCDDqCBPblB1c2ggcGVyIGRpcmUgYWQgQW5ndWxhciBjaGUgbCdJbnB1dCDDqCBjYW1iaWF0byBlIHBlcm1ldHRlcmUgaSBzaWRlZmZlY3RzIGRpIGFzc2VnbmFyZSBbc3VibWl0dGVkXVxyXG4gICAgICAgICAgICAvLyBkZXZvIGF0dGFjY2FybWkgYWwgc3VibWl0IGF0dHVhbGUgZGVsIGZvcm0gZSBwcmltYSBkaSBlc2VndWlybG8gZGV2byBtYXJjYXJlIGlsIGNvbXBvbmVudGUgcGVyIGlsIGNoZWNrXHJcbiAgICAgICAgICAgIGxldCBvcmlnRnVuYyA9IHRoaXMuRm9ybS5vblN1Ym1pdDtcclxuICAgICAgICAgICAgdmFyIGZvcm1PdXRzaWRlUmVmID0gdGhpcy5Gb3JtO1xyXG4gICAgICAgICAgICB0aGlzLkZvcm0ub25TdWJtaXQgPSAoZXYpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdGdW5jLmFwcGx5KGZvcm1PdXRzaWRlUmVmKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZSBzb25vIGluIG1vZGFsaXTDoCBkZXRhdGNoZWQgZGV2byByaW11b3ZlcmUgbWFudWFsbWVudGUgcXVlc3RvIGNvbnRyb2xsbyBxdWFuZG8gZW50cm8gbmVsbGEgZGlzcG9zZSwgYWx0cmltZW50aSBzZSBwb2kgbmUgYW5kYXNzaSBhIHJpYWdnaXVuZ2VyZVxyXG4gICAgICogdW4gYWx0cm8gY29uIGxvIHN0ZXNzbyBcIm5hbWVcIiBtYSBtYWdhcmkgcmVzZXR0YXRvLCBBbmd1bGFyIGxvIHJlLWlkcmF0ZXJlYmJlIGNvbiBpIHZhbG9yaSBwcmVjZWRlbnRpIG5vbm9zdGFudGUgaWwgbW9kZWxsbyBmb3NzZSB2dW90b1xyXG4gICAgICovXHJcbiAgICBuZ09uRGVzdHJveSgpe1xyXG4gICAgICAgIGlmKHRoaXMuZGV0YXRjaGVkRnJvbWZvcm0gJiYgdGhpcy5Gb3JtKVxyXG4gICAgICAgICAgICB0aGlzLkZvcm0ucmVtb3ZlQ29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogRWxhYm9yYSBpIHZhbGlkYXRvcmkgaW5pZXR0YXRpIGUgY2FwaXNjZSBzZSBpbCB2YWxvcmUgw6ggb2JibGlnYXRvcmlvIG8gbWVubyAqL1xyXG4gICAgY2hlY2tSZXF1aXJlZFZhbGlkYXRvcigpIHtcclxuICAgICAgICAvLyBjb250cm9sbG8gc2Ugw6ggc2V0dGF0byB1biByZXF1aXJlZCBwZXIgZGVjaWRlcmUgaW4gbWFuaWVyYSBjb25kaXppb25hbGUgc2UgdXRpbGl6emFyZSBpbCB2YWxpZGF0b3JlIHJlcXVpcmVkIG5lbCBjb21wb25lbnRlIGludGVybm9cclxuICAgICAgICAvLyBMbyBmYWNjaW8gcXVpIGUgbm9uIGluIHVuIGV2ZW50dWFsZSBuZ09uSW5pdCBvIGNvc3RydXR0b3JlIHBlcmNow6kgbmdPbkluaXQgbm9uIHNlbXByZSB2aWVuZSBjaGlhbWF0byBlIGRhIGNvc3RydXR0b3JlIGlsIHZhbGlkYXRvcmUgbm9uIGhhIGFuY29yYSBpbCB2YWxvcmUgZ2l1c3RvXHJcbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRvcnMgJiYgdGhpcy5fdmFsaWRhdG9ycy5zb21lKGVsZW0gPT4gZWxlbSBpbnN0YW5jZW9mIFJlcXVpcmVkVmFsaWRhdG9yICYmIGVsZW0ucmVxdWlyZWQpKVxyXG4gICAgICAgICAgICB0aGlzLlJlcXVpcmVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5uZ0NvbnRyb2wpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkVmFsaWRhdG9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhlbHBlciBjaGUgY29sbGVnYSBsYSBmdW56aW9uZSBkaSByZXNldCBkZWwgY29udHJvbGxvIGZvcm0gYWwgY29udHJvbGxvIGRpIHZhbGlkYXppb25lIHNvdHRvc3RhbnRlICovXHJcbiAgICBwcml2YXRlIGJpbmRSZXNldEZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vZmFjY2lvIGluIG1vZG8gY2hlIHNlIGNoaWFtbyBpbCByZXNldCBkZWwgY29udHJvbGxvIChvIGRlbGxhIGZvcm0pIGRhbGwnZXN0ZXJubyBzaSByZXNldHRpIGFuY2hlIGlsIGNvbnRyb2xsbyBuYXRpdm9cclxuICAgICAgICBjb25zdCBvcmlnRnVuYyA9ICg8YW55PnRoaXMubmdDb250cm9sLmNvbnRyb2wpLl9fb3JpZ2luYWxfcmVzZXRfXyB8fCB0aGlzLm5nQ29udHJvbC5jb250cm9sLnJlc2V0O1xyXG4gICAgICAgIHZhciBuZ0NvbnRyb2xfb3V0c2lkZVJlZmVyZW5jZSA9IHRoaXMubmdDb250cm9sLmNvbnRyb2w7XHJcbiAgICAgICAgdmFyIHZhbGlkYXRpb25Db250cm9sX291dHNpZGVSZWZlcmVuY2UgPSB0aGlzLnZhbGlkYXRpb25Db250cm9sLmNvbnRyb2w7XHJcblxyXG4gICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wucmVzZXQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIG9yaWdGdW5jLmFwcGx5KG5nQ29udHJvbF9vdXRzaWRlUmVmZXJlbmNlKTtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbkNvbnRyb2xfb3V0c2lkZVJlZmVyZW5jZS5yZXNldCgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vUGVyIGNvbnNlbnRpcmUgcmljaGlhbWkgbXVsdGlwbGkgZGkgcXVlc3RhIGZ1bnppb25lIHByZW5kZW5kbyBzZW1wcmUgbGEgZml1bnppb25lIGRpIHJlc2V0IGJhc2VcclxuICAgICAgICAoPGFueT50aGlzLm5nQ29udHJvbC5jb250cm9sKS5fX29yaWdpbmFsX3Jlc2V0X18gPSBvcmlnRnVuY1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKG9iaiA9PSBudWxsICYmIHRoaXMuZmlyc3RCaW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyc3RCaW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuTW9kZWwgPSBvYmo7XHJcblxyXG4gICAgICAgIC8vUGVyIHN2ZWdsaWFyZSBBbmd1bGFyLiBJbCB2YWxvcmUgY2hlIGVudHJhIHBvdHJlYmJlIGVzc2VyZSB2YWxpZG8vbm9uIHZhbGlkbyBlIHF1ZXN0byBsbyBiaW5kYSBhIHR1dHRvLCBmb3JtIGNvbXByZXNvXHJcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKVxyXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuTW9kZWwpXHJcbiAgICAgICAgICAgIHRoaXMub25Ob3ROdWxsVmFsdWVTZXQoKTtcclxuXHJcbiAgICAgICAgLy8gbWFya0ZvckNoZWNrIG5vbiB2YSBiZW5lIGluIHF1YW50byBhcnJpdmFubyBwb3NzaWJpbG1lbnRlIDIgdXBkYXRlIHN1IHVuIHNvbG8gY2ljbG8gZGkgc3RhY2tcclxuICAgICAgICAvLyBzZXRUaW1lKnV0IGNoZSB3cmFwcGEgdHV0dG8gbm9uIHZhIGJlbmUgc2VubsOyIHNwYW1tYSBkZWxsZSBjaGFuZ2UgZGV0ZWN0aW9uIGEgc3VvbiBkaSBpbnRlcnZhbCBjaGUgcmFsbGVudGFubyB0YW50aXNzaW1vIGwnYXBwXHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdHJhIGludGVybmFtZW50ZSBpbCBjb21wb25lbnRlIGRpIHZhbGlkYXppb25lLCBuZSBpbXBvc3RhIGkgdmFsaWRhdG9yaSBlIGNvbGxlZ2EgaWwgRm9ybSwgc2UgcHJlc2VudGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtOZ01vZGVsfSBjb21wIEVsZW1lbnRvIEhUTUwgbWFyY2F0byBjb24gXCIjdmFsaWRhdGlvbkNvbnRyb2xcIlxyXG4gICAgICovXHJcbiAgICByZWdpc3RlclZhbENvbXAoY29tcDogTmdNb2RlbCkge1xyXG4gICAgICAgIGlmIChjb21wKSB7XHJcbiAgICAgICAgICAgIC8vIMOIIGFycml2YXRvIHVuIG51b3ZvIHZhbGlkYXRpb25Db250b3JsIChzdWNjZWRlIHNvbG8gbmVsIGZvcm0tc2VsZWN0IHF1YW5kbyBjYW1iaWEgbGEgc291cmNlIGRhIDAgZWxlbWVudGkgLyBudWxsIGFkIE4gZWxlbWVudGksIHF1aW5kaSBhbCBtYXNzaW1vIHVuYSB2b2x0YSkgXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25Db250cm9sICYmIHRoaXMuRm9ybSlcclxuICAgICAgICAgICAgICAgIHRoaXMuRm9ybS5yZW1vdmVDb250cm9sKHRoaXMudmFsaWRhdGlvbkNvbnRyb2wpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uQ29udHJvbCA9IGNvbXA7XHJcblxyXG4gICAgICAgICAgICAvL1F1ZXN0YSBzZXJ2ZSBwZXIgcGFzc2FyZSBhdmFudGkgaSB2YWxpZGF0b3JpXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wuY29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuX3ZhbGlkYXRvcnMpO1xyXG5cclxuICAgICAgICAgICAgLy9TZSBzb25vIHN0YWNjYXRvIGRhbCBGb3JtICh2dW9sIGRpcmUgY2hlIHNvbm8gYWQgZXNlbXBpbyBkZW50cm8gdW4gbmctdGVtcGxhdGUpIGFnZ2l1bmdvIGlsIGNvbnRyb2xsbyBhbCBGb3JtIHBhc3NhdG8gY29tZSBpbnB1dCAoY29udGV4dCBkZWwgdGVtcGxhdGUpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRldGF0Y2hlZEZyb21mb3JtICYmIHRoaXMuRm9ybSAmJiAhdGhpcy5mb3JtSGFzQmVubkJvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkZvcm0uYWRkQ29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtSGFzQmVubkJvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kUmVzZXRGdW5jdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgLy9JIHZhbC1yb2JhIHF1ZXN0byBsbyBmYW5ubyBhdXRvbWF0aWNhbWVudGUgZGVudHJvLi4uIGdsaSBhbHRyaSBubyAoZXMuIHNlbXBsaWNlIGlucHV0IGNoZWNrYm94KVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5Rm9yTmF0aXZlSW5wdXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZ2dpb3JuYSBpbCB2YWxvcmUgZSBsYSB2YWxpZGl0w6AgZGVsbCdpbnB1dCBzb3R0b3N0YW50ZS4gTm9uIHZpZW5lIGNoaWFtYXRvIHBlciBpbnB1dCBuYXRpdmkgY29tZSBsZSBjaGVja2JveFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlZFZhbHVlIEZvcnphIGwnYWdnaW9ybmFtZW50byBhbmNoZSBzZSBub24gw6ggdW4gaW5wdXQgbmF0aXZvIChpbnB1dCBuYXRpdm8gPSBjaGVja2JveCwgYWQgZXNlbXBpbylcclxuICAgICAqL1xyXG4gICAgdXBkYXRlVmFsaWRpdHlGb3JOYXRpdmVJbnB1dChmb3JjZWRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKGZvcmNlZFZhbHVlIHx8IHRoaXMubmF0aXZlSW5wdXQpXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBDbGFzc2ljbyBcInNwYXJhIGZ1b3JpXCIuIE1hbnRlbmdvIGxvIHN0ZXNzbyBub21lIGRlbGwnZXZlbnRvIGRlaSA8dmFsLSo+IChpbnB1dENoYW5nZSkgcGVyIHJldHJvY29tcGF0aWJpbGl0w6AuXHJcbiAgICAgKiBcclxuICAgICAqIE5vbiBwb3NzbyB0ZW5lcmxvIHByb3RlY3RlZCBhbHRyaW1lbnRpIHBvc3NvIGVzZWd1aXJsbyBzb2xvIGRhbCAudHMgZSBub24gZGFsbCcgLmh0bWxcclxuICAgICAqL1xyXG4gICAgY2hhbmdlZChmb3JjZWRWYWx1ZTogYW55ID0gbnVsbCwgbWFya0ZvckNoZWNrOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShmb3JjZWRWYWx1ZSA9PSBudWxsID8gdGhpcy5Nb2RlbCA6IGZvcmNlZFZhbHVlKTtcclxuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoZm9yY2VkVmFsdWUgPT0gbnVsbCA/IHRoaXMuTW9kZWwgOiBmb3JjZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hcmtGb3JDaGVjaylcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBDbGFzc2ljbyBcInNwYXJhIGZ1b3JpXCIgc3VsIGZvY3VzLiBNYW50ZW5nbyBsbyBzdGVzc28gbm9tZSBkZWxsJ2V2ZW50byBkZWkgPHZhbC0qPiAoaW5wdXRDaGFuZ2UpIHBlciByZXRyb2NvbXBhdGliaWxpdMOgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb24gcG9zc28gdGVuZXJsbyBwcm90ZWN0ZWQgYWx0cmltZW50aSBwb3NzbyBlc2VndWlybG8gc29sbyBkYWwgLnRzIGUgbm9uIGRhbGwnIC5odG1sXHJcbiAgICAgKi9cclxuICAgIGZvY3VzZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cy5lbWl0KGV2ZW50KTtcclxuICAgICAgICB0aGlzLmxvZyhcIkNvbnRyb2wgRm9jdXNlZCAtIFwiICsgdGhpcy5HZW5lcmF0ZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqIENsYXNzaWNvIFwic3BhcmEgZnVvcmlcIiBzdWxsYSBmaW5hbGl6emF6aW9uZSBkZWwgdmFsb3JlIGRlbGwnaW5wdXQgKGJsdXIgLyB0YXN0byBpbnZpbywgZWNjLi4uKS4gTWFudGVuZ28gbG8gc3Rlc3NvIG5vbWUgZGVsbCdldmVudG8gZGVpIDx2YWwtKj4gKGlucHV0Q2hhbmdlKSBwZXIgcmV0cm9jb21wYXRpYmlsaXTDoC5cclxuICAgICAqIFxyXG4gICAgICogTm9uIHBvc3NvIHRlbmVybG8gcHJvdGVjdGVkIGFsdHJpbWVudGkgcG9zc28gZXNlZ3VpcmxvIHNvbG8gZGFsIC50cyBlIG5vbiBkYWxsJyAuaHRtbFxyXG4gICAgICovXHJcbiAgICBmaW5hbGl6ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dEZpbmFsaXplZC5lbWl0KCk7XHJcbiAgICAgICAgdGhpcy5sb2coXCJDb250cm9sIFZhbHVlIEZpbmFsaXplZCAtIFwiICsgdGhpcy5HZW5lcmF0ZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YW1wYSB1biBsb2cgYSBjb25zb2xlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIE1lc3NhZ2dpbyBkYSBzdGFtcGFyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbG9nKG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLkZBVl9ERUJVR19NT0RFKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkBmb3Jtcy1hbmQtdmFsaWRhdGlvbnM6IFwiICsgbWVzc2FnZSlcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgYWJzdHJhY3Qgb25Ob3ROdWxsVmFsdWVTZXQoKTogdm9pZDtcclxufSJdfQ==
484
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9iYXNlLWZvcm0tY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFvRCxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSXZILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7O0FBSTFELGtFQUFrRTtBQUVsRSxNQUFNLE9BQWdCLGVBQWU7SUFnTGpDLDJCQUEyQjtJQUMzQixZQUFzQixHQUFzQixFQUFTLFNBQW9CLEVBQVksV0FBdUIsRUFBc0IsRUFBd0IsRUFBcUIsVUFBNEIsRUFBNkMsYUFBcUIsRUFBOEMsY0FBdUIsRUFBVSxjQUF1QixLQUFLO1FBQWxXLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFZLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQXNCLE9BQUUsR0FBRixFQUFFLENBQXNCO1FBQXFCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQTZDLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQThDLG1CQUFjLEdBQWQsY0FBYyxDQUFTO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBL0t4WDs7Ozs7V0FLRztRQUNLLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFbEMsb0RBQW9EO1FBQzdDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFXakMseUVBQXlFO1FBQy9ELHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUU1Qzs7OztXQUlHO1FBQ08sc0JBQWlC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RSxJQUFJLEVBQUU7Z0JBR3RDLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0csVUFBVTtzQkFBbkIsTUFBTTtnQkFHRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sLCBOZ0Zvcm0sIE5nTW9kZWwsIFJlcXVpcmVkVmFsaWRhdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBPcHRpb25hbCwgSW5qZWN0LCBEaXJlY3RpdmUsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIC8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBDb21wb25lbnRDb250ZXh0IH0gZnJvbSBcIkBlc2ZhZW56YS9hY2Nlc3MtY29udHJvbFwiO1xyXG5pbXBvcnQgeyBBQ09fQ1VTVE9NS0VZLCBGQVZfREVCVUdfTU9ERSB9IGZyb20gJy4uL3Rva2Vucyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKiogQ29tcG9uZW50ZSBiYXNlIGRhIGN1aSB0dXR0aSBpIGNvbXBvbmVudGkgRm9ybSBpbXBsZW1lbnRhbm8gKi9cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRm9ybUNvbnRyb2wgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNDk4OFxyXG4gICAgICogVEw6RFI7IElsIHByaW1vIHZhbG9yZSBwYXNzYXRvIGFsIHdyaXRlVmFsdWUgw6ggbnVsbG8gcGVyY2jDqSBxdWFuZG8gaSBjYWduYWNjaSBmYW5ubyBuZXcgRm9ybUNvbnRyb2woKVxyXG4gICAgICogc2NyaXZvbm8gdW4gd3JpdGVWYWx1ZSBudWxsby4uLiBxdWluZGkgYWwgcHJpbW8gYmluZGluZyBzYWx0byBsJ2luaXppYWxpenphemlvbmUgc2UgaG8gbGEgY29wcGlhIG51bGwtZmlyc3RCaW5kXHJcbiAgICAgKiBwb2kgbWV0dGVuZG8gZmlyc3RCaW5kIGEgZmFsc2UgZGkgbMOsIGluIHBvaSBmdW56aW9ubyBjb21lIGRldm8uIFZpc3RhIGxhIGNhc2lzdGljYSBldml0byBlc3NlbnppYWxtZW50ZSBtZXTDoCBkZXRlY3RDaGFuZ2VzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZmlyc3RCaW5kOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogSW5kaWNhIHNlIGlsIGNhbXBvIMOoIG9iYmxpZ2F0b3JpbyBpIG9wemlvbmFsZSAqL1xyXG4gICAgcHVibGljIFJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIE1vZGVsbG8gcmFwcHJlc2VudGF0byBkYSBxdWVzdG8gY2FtcG8gKi9cclxuICAgIHB1YmxpYyBNb2RlbDogYW55O1xyXG5cclxuICAgIC8qKiBWYWxvcmUgZGVsIE1vZGVsbG8gKi9cclxuICAgIHB1YmxpYyBFdmFsdWF0ZWRNb2RlbDogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBOb21lIGdlbmVyYXRvIHBlciBpbCBjb250cm9sbG8gaW50ZXJuby4gRGkgZGVmYXVsdCDDqCBpbCBub21lIGRlbCBjb250cm9sbG8gZXN0ZXJubyBjb24gbCdhZ2dpdW50YSBkaSBcIl9pbnRlcm5hbFwiLiBTZXJ2ZSBwZXIgZXZpdGFyZSBjcm9zcy1iaW5kICovXHJcbiAgICBwdWJsaWMgR2VuZXJhdGVkTmFtZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2UgaWwgRm9ybSBjaGUgY29udGllbmUgcXVlc3RvIGNhbXBvIMOoIGdpw6Agc3RhdG8gcmVnaXN0cmF0byAqL1xyXG4gICAgcHJvdGVjdGVkIGZvcm1IYXNCZW5uQm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBxdWVzdG8gY2FtcG8gw6ggc3RhY2NhdG8gZGFsIEZvcm0sIGFkIGVzZW1waW8gbmVsIGNhc28gc2lhIGluIHVuIG5nLXRlbXBsYXRlIHByb2lldHRhdG8gbmVsIGZvcm0uXHJcbiAgICAgKiBcclxuICAgICAqIEluIHF1ZWwgY2FzbyBsYSB2YXJpYWJpbGUgKipGb3JtKiogZGVsIGNvbXBvbmVudGUgZGV2J2Vzc2VyZSB2YWxvcml6emF0YVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZGV0YXRjaGVkRnJvbWZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJvdGVjdGVkIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJvdGVjdGVkIG9uVG91Y2hlZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBWZWRpIGdldHRlciBlIHNldHRlciAqL1xyXG4gICAgcHJpdmF0ZSBfcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1YWxvcmEgY2kgZm9zc2UgdW4gY29udGVzdG8gY29sbGVnYXRvIHF1ZXN0YSB2YXJpYWJpbGUgaWRlbnRpZmljYSBzZSBTb25vIGwnT3duZXIgbyBtZW5vLlxyXG4gICAgICogXHJcbiAgICAgKiBTZSBub24gbG8gc29ubywgaWwgY2FtcG8gcmlzdWx0ZXLDoCBpbiBzb2xhIGxldHR1cmEgXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgQXBwQ29udGV4dE93bmVyc2hpcDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIFN1YmplY3QgYSBjdWkgbCdvZ2dldHRvIGludGVybm8gc2kgY29sbGVnYSBwZXIgZWZmZXR0dWFyZSBpbCBmb2N1cyBkZWxsJ2VsZW1lbnRvIGlucHV0IHNvdHRvc3RhbnRlICovXHJcbiAgICBASW5wdXQoKSBGb2N1c1N1YmplY3Q6IFN1YmplY3Q8dm9pZD47XHJcblxyXG4gICAgLyoqIE1vZGFsaXTDoCBpbiBjdWkgdmllbmUgbW9zdHJhdG8gaWwgY2FtcG8sIDEtMSByaXNwZXR0byBhbGxlIGRlZmluaXppb25pIGRpIEFuZ3VsYXIgTWF0ZXJpYWwgICovXHJcbiAgICBASW5wdXQoKSBGaWVsZEFwcGVhcmVuY2U6IFwibGVnYWN5XCIgfCBcInN0YW5kYXJkXCIgfCBcImZpbGxcIiB8IFwib3V0bGluZVwiID0gXCJvdXRsaW5lXCI7XHJcblxyXG4gICAgLyoqIFV0aWxpenphIG8gbWVubyBpbCBMYXlvdXQgZGkgdW4gZm9ybSAoTGFiZWwgY29uIGlucHV0IGRpIGZpYW5jbyksIHNlIGZhbHNlIG1vc3RyYSBzb2xvIGwnaW5wdXQgKi9cclxuICAgIEBJbnB1dCgpIEZvcm1MYXlvdXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBJbmRpY2EgY2hlIGxhIHBhcnRlIGlucHV0IGRlbCBjb250cm9sbG8gZGV2J2Vzc2VyZSB1bmEgbGFiZWwgcmVhZG9ubHkgZSBsYSBwYXJ0ZSBsYWJlbCBkaSB0aXRvbG8gZGV2J2Vzc2VyZSBpbiBib2xkLiBQZXIgdXRpbGl6emFyZSB1biBzb2xvIGNvbXBvbmVudGUgc2lhIHBlciBsYSBtb2RpZmljYSBjaGUgcGVyIGlsIGRldHRhZ2xpbyAqL1xyXG4gICAgQElucHV0KCkgRGlzcGxheU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogRGVmaW5pc2NlIHNlIHJpY2hpYW1hcmUgbCdFdmVudEVtaXR0ZXIgKippbnB1dENoYW5nZSoqIGluIG1hbmllcmEgY2xhc3NpY2EgKHRydWUpIG8gc29sbyBwZXIgbGEgY2hhbmdlIGNvbnNpZGVyYXRlIGRlZmluaXRpdmUgY29tZSB0YXN0byBpbnZpbyAvIGJsdXIgLyBlY2MuLi4gKGZhbHNlKSAqL1xyXG4gICAgQElucHV0KCkgRW1pdFBlbmRpbmdDaGFuZ2VzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogQXR0aXZhIG8gZGlzYXR0aXZhIGxhIHZhbGlkYXppb25lIHBlciBxdWVzdG8gY29tcG9uZW50ZSAqL1xyXG4gICAgQElucHV0KCkgVmFsaWRhdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIFBsYWNlaG9sZGVyIHBlciBxdWFuZG8gbCdpbnB1dCDDqCB2dW90byAqL1xyXG4gICAgQElucHV0KCkgUGxhY2Vob2xkZXI6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqIENsYXNzZSBleHRyYSBwZXIgaWwgZm9ybS1ncm91cCBpbiBjdWkgdmllbmUgd3JhcHBhdG8gbCdpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgRm9ybUdyb3VwQ2xhc3M6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqIE1lc3NhZ2dpbyBkYSBtb3N0cmFyZSBxdWFuZG8gbGEgdmFsaWRhemlvbmUgZmFsbGlzY2UgcGVyIHF1ZXN0byBjb21wb25lbnRlLiBEaSBkZWZhdWx0IHZpZW5lIHByb3Bvc3RhIGRhbGxhIGxpYnJlcmlhICovXHJcbiAgICBASW5wdXQoKSBGYWlsZWRWYWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogSW5wdXQgY2hlIGZvcnphIGwnaW52YWxpZGl0w6AgZGVsIGNvbXBvbmVudGUgKi9cclxuICAgIEBJbnB1dCgpIEZvcmNlZEVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIE1vc3RyYSB1biB0ZXN0byBhIHNpbmlzdHJhIGRlbGwnaW5wdXQgKEZvcm1MYXlvdXQgcGVybWV0dGVuZG8pICovXHJcbiAgICBASW5wdXQoKSBMYWJlbDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogY29sLW1kLVggcGVyIGxhIGxhYmVsICovXHJcbiAgICBASW5wdXQoKSBMYWJlbENvbFdpZHRoOiBudW1iZXIgPSA0O1xyXG5cclxuICAgIC8qKiBjb2wtbWQtWCBwZXIgbCdpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgSW5wdXRDb2xXaWR0aDogbnVtYmVyID0gODtcclxuXHJcbiAgICAvKiogSW5kaWNhIHNlIMOoIGwndWx0aW1vIGNvbXBvbmVudGUgZGkgdW4gZm9ybSAoc2VydmUgcGVyIHJpbXVvdmVyZSBpbCBtYXJnaW5lIGZpbmFsZSkgKi9cclxuICAgIEBJbnB1dCgpIExhc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogQXNzb2NpYSBpbCBjb21wb25lbnRlIEZvcm0gYSBxdWVzdG8gaW5wdXQgKi9cclxuICAgIEBJbnB1dCgpIEZvcm06IE5nRm9ybSA9IG51bGw7XHJcblxyXG4gICAgLyoqIFNvcmdlbnRlIGRhIGN1aSBzY2VnbGllcmUgdmFsb3JpIHBlciBpIGNvbXBvbmVudGkgRm9ybSBjaGUgbG8gY29uc2VudG9ubyAqL1xyXG4gICAgQElucHV0KCkgU291cmNlOiBhbnlbXTtcclxuXHJcbiAgICAvKiogTm9tZSBkZWxsYSBwcm9wcmlldMOgIGNoZSBjb250aWVuZSBsJ0lkIGRlZ2xpIG9nZ2V0dGkgYmluZGF0aSBuZWxsYSAqKlNvdXJjZSoqICovXHJcbiAgICBASW5wdXQoKSBJZEZpZWxkOiBzdHJpbmcgPSAnaWQnO1xyXG5cclxuICAgIC8qKiBUZW1wbGF0ZSBwZXIgdmlzdWFsaXp6YXJlIGxhIG1vZGFsaXTDoCAqKkRpc3BsYXlNb2RlKiogY29tZSB2dW9sZSBpbCBwcm9ncmFtbWF0b3JlIGZyb2NpbyBkaSB0dXJubyAqL1xyXG4gICAgQElucHV0KCkgRGlzcGxheU1vZGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzcHJlc3Npb25lIHNpbWlsLUFuZ3VsYXIgcGVyIGNhbWJpYXJlIGlsIHRlc3RvIGRlaSBjb21wb25lbnRpIGNoZSBzY2VsZ29ubyBpbCBwcm9wcmlvIG1vZGVsbG8gZGEgdW5hICoqU291cmNlKipcclxuICAgICAqIFxyXG4gICAgICogSWwgZnVuemlvbmFtZW50byDDqCBpZGVudGljbyBhbCBiaW5kZXIgZGkgYW5ndWxhciwgc29sbyBjb24gdW5hIGdyYWZmYSBpbnZlY2UgY2hlIDIuXHJcbiAgICAgKiDDiCBpbm9sdHJlIHBvc3NpYmlsZSBhZ2dpdW5nZXJlIHBlenppIGRpIGRlc2NyaXppb25lIGluIG1hbmllcmEgY29uZGl6aW9uYWxlIGNvbiBsYSBzaW50YXNzaSAqKjpwcm9wPyhQcm9wIHZhbGUge3Byb3B9KSoqXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIERpc3BsYXk6IHN0cmluZyA9ICd7ZGVzY3JpcHRpb259JztcclxuXHJcbiAgICAvKiogUmlzdWx0YXRvIGRlbGwndW5pb25lIGZyYSBsZSBpbmZvcm1hemlvbmkgZGVnbGkgb2dnZXR0aSBpbiAqKlNvdXJjZSoqIGUgbGUgaW1wb3N0YXppb25pIHNwZWNpZmljYXRlIG5lbGwnSW5wdXQgKipEaXNwbGF5KiogKi9cclxuICAgIHB1YmxpYyBCb3VuZFNvdXJjZTogeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2Ugw6ggaWwgcHJpbW8gQmluZCBkZWxsYSBTb3VyY2UgKi9cclxuICAgIHByb3RlY3RlZCBTb3VyY2VGaXJzdEJpbmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBpbCB2YWxvcmUgZGVsbGEgdmFyaWFiaWxlICoqX3JlYWRvbmx5KipcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59ICoqdHJ1ZSoqIHNlIHNvbGEgbGV0dHVyYSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWRvbmx5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fcmVhZG9ubHk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcG9zdGEgaWwgdmFsb3JlIGRlbGxhIHZhcmlhYmlsZSAqKl9yZWFkb25seSoqIGdlc3RlbmRvIGFuY2hlIGlsIENvbnRlc3RvIGFwcGxpY2F0aXZvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgVmFsb3JlIGRhIGltcG9zdGFyZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBzZXQgUmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5BcHBDb250ZXh0T3duZXJzaGlwKVxyXG4gICAgICAgICAgICB0aGlzLl9yZWFkb25seSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVybWV0dGUgZGkgc2V0dGFyZSBpbiB1bmEgdm9sdGEgc29sbyBnbGkgaW5wdXQgTGFiZWxDb2xXaWR0aCBlIElucHV0Q29sV2lkdGgsIGJhc3RhIHNjcml2ZXJsbyBjb24gbGEgc2ludGFzc2kgXCJYIFlcIlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgSW5wdXQgbmVsIGZvcm1hdG8gXCJYIFlcIlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBzZXQgTGFiZWxJbnB1dFJhdGlvKGlucHV0OiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcmF0aW8gPSBpbnB1dC5zcGxpdCgvXFxzLyk7XHJcbiAgICAgICAgdGhpcy5MYWJlbENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMF0pO1xyXG4gICAgICAgIHRoaXMuSW5wdXRDb2xXaWR0aCA9IHBhcnNlSW50KHJhdGlvWzFdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogdmFsLXF1YWxjb3NhIGNoZSBmYSBlZmZldHRpdmFtZW50ZSBkYSBpbnB1dCwgbyBldmVudHVhbG1lbnRlIGlsIHNpbmdvbG8gaW5wdXQgaW4gY2FzaSBwYXJ0aWNvbGFyaSAoZXMgY2hlY2tib3gpICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGlvbkNvbnRyb2w6IE5nTW9kZWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWVyeSBzdWxsJ2VsZW1lbnRvICd2YWxpZGF0aW9uQ29udHJvbCcgY2hlIGZ1bnppb25hIGluIGFtYmllbnRlIHN0YXRpY29cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtOZ01vZGVsfSBjb21wIEVsZW1lbnRvIEhUTUwgbWFyY2F0byBjb24gXCIjdmFsaWRhdGlvbkNvbnRyb2xcIlxyXG4gICAgICovXHJcbiAgICBAVmlld0NoaWxkKFwidmFsaWRhdGlvbkNvbnRyb2xcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHNldCBfdmFsaWRhdGlvbkNvbnRyb2woY29tcDogTmdNb2RlbCkgeyB0aGlzLnJlZ2lzdGVyVmFsQ29tcChjb21wKTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVlcnkgc3VsbCdlbGVtZW50byAndmFsaWRhdGlvbkNvbnRyb2wnIGNoZSBmdW56aW9uYSBpbiBhbWJpZW50ZSBkaW5hbWljb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge05nTW9kZWx9IGNvbXAgRWxlbWVudG8gSFRNTCBtYXJjYXRvIGNvbiBcIiN2YWxpZGF0aW9uQ29udHJvbFwiXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoXCJ2YWxpZGF0aW9uQ29udHJvbFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZXQgdmFsaWRhdGlvbkNvbnRyb2xfc3RhdGljKGNvbXA6IE5nTW9kZWwpIHsgdGhpcy5yZWdpc3RlclZhbENvbXAoY29tcCk7IH07XHJcblxyXG4gICAgLyoqIEV2ZW50byBjaGlhbWF0byBhbGxhIG1vZGlmaWNhIGRlbCB2YWxvcmUgY29sbGVnYXRvIGEgcXVlc3RvIGNhbXBvICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgLyoqIEV2ZW50byBjaGlhbWF0byBhbCBmb2N1cyBkZWwgY2FtcG8gZGkgdGVzdG8vY29tYm8vcXVlbGNoZcOoLCByaWVtaXR0YSBsJ2V2ZW50byBvcmlnaW5hbGUgSmF2YXNjcmlwdCAqL1xyXG4gICAgQE91dHB1dCgpIGlucHV0Rm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqIEV2ZW50byBjaGlhbWF0byBhbCBmaW5hbGl6ZSBkZWwgY2FtcG8gZGkgdGVzdG8vY29tYm8vcXVlbGNoZcOoICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRGaW5hbGl6ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqIENhY2hlIGRlbGxlIGNvbmRpemlvbmkgc2NyaXR0ZSB0aXBvIDpwcm9wPyhSb2JhIGNvbiB7cHJvcH0pICovXHJcbiAgICBwcml2YXRlIEJpbmRDaGVja2luZ0dyb3VwczogeyBnbG9iYWw6IHN0cmluZywgcHJvcDogc3RyaW5nLCB3aGVuZXhpc3RzOiBzdHJpbmcgfVtdID0gW11cclxuXHJcbiAgICAvKiogQ2FjaGUgZGVsbGUgcHJvcHJpZXTDoCBzY3JpdHRlIHRpcG8gLS0+IHtwcm9wfSAqL1xyXG4gICAgcHJpdmF0ZSBCaW5kUHJvcGVydGllczogeyBnbG9iYWw6IHN0cmluZywgcHJvcDogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCwgcHJvdGVjdGVkIF92YWxpZGF0b3JzOiBBcnJheTxhbnk+LCBAT3B0aW9uYWwoKSBwcml2YXRlIGFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgQE9wdGlvbmFsKCkgcHVibGljIEFwcENvbnRleHQ6IENvbXBvbmVudENvbnRleHQsIEBPcHRpb25hbCgpIEBJbmplY3QoQUNPX0NVU1RPTUtFWSkgcHJpdmF0ZSBBQ09fQ1VTVE9NS0VZOiBzdHJpbmcsIEBPcHRpb25hbCgpIEBJbmplY3QoRkFWX0RFQlVHX01PREUpIHByaXZhdGUgRkFWX0RFQlVHX01PREU6IGJvb2xlYW4sIHByaXZhdGUgbmF0aXZlSW5wdXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cclxuICAgICAgICBpZiAobmdDb250cm9sID09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmhhbmRsZU51bGxOZ0NvbnRyb2woKSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJuZ0NvbnRyb2wgbnVsbG8gcGVyIHF1YWxjaGUgbW90aXZvISBJbCA5MCUgZGVsbGUgZnVuemlvbmFsaXTDoCBkaSBxdWVzdG8gaW5wdXQgc2FyYW5ubyBkaXNhYmlsaXRhdGVcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1NlIG1pIGFycml2YSBsJ2luamVjdGFibGUgZGVsIGNvbnRlc3RvIHBvc3NvIGNhcGlyZSBzZSBxdWVzdG8gY2FtcG8gZGV2ZSBlc3NlcmUgaW4gcmVhZG9ubHkgbyBubywgc29sbyBzZSBobyBnacOgIGluaXppYWxpenphdG8gaSBjb250cm9sbGVyIGN1c3RvbSBkZWxsJ2FjY2VzcyBjb250cm9sXHJcbiAgICAgICAgaWYgKHRoaXMuQXBwQ29udGV4dCAmJiB0aGlzLkFwcENvbnRleHQubmFtZSAmJiB0aGlzLkFDT19DVVNUT01LRVkgJiYgdGhpcy5hYyAmJiB0aGlzLmFjLkluaXRpYWxpemVkQ3VzdG9tKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQXBwQ29udGV4dE93bmVyc2hpcCA9ICF0aGlzLmFjLmhhcyh0aGlzLkFDT19DVVNUT01LRVkgKyBcIjpcIiArIHRoaXMuQXBwQ29udGV4dC5uYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVhZG9ubHkgPSAhdGhpcy5BcHBDb250ZXh0T3duZXJzaGlwXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBuZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8vU2UgaG8gZ2nDoCB1biBwYXJlbnQgaW1wb3N0YXRvIHZ1b2wgZGlyZSBjaGUgc290dG8gYWwgdGFnIDxmb3JtPiBobyBkaXJldHRhbWVudGUgdW4gdGFnIDxmb3JtLSo+Li5cclxuICAgICAgICAvLy4uIHF1aW5kaSBwb3NzbyBpbXBvc3RhcmUgZGlyZXR0YW1lbnRlIGlsIHJpZmVyaW1lbnRvIGRlbCBGb3JtIGRhIHVzYXJlIGluIEhUTUwgcGVyIGlsIHN1Ym1pdHRlZFxyXG5cclxuICAgICAgICAvL1NlIG5vbiBjJ8OoIHZ1b2wgZGlyZSBjaGUgZGVudHJvIGFsIHRhZyA8Zm9ybT4gYyfDqCB1bm8gc3BsZW5kaWRvIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogLi4uLlwiPi4uXHJcbiAgICAgICAgLy8uLiBpbCBxdWFsZSBhIHN1YSB2b2x0YSBjb250aWVuZSBpbCBjb250cm9sbG8gPGZvcm0tKj4gcXVpbmRpIGF2csOyIGlsIGZvcm0gbmVsbCdpbnB1dCBcIkZvcm1cIlxyXG4gICAgICAgIGlmICgoPGFueT5uZ0NvbnRyb2wpLl9wYXJlbnQpXHJcbiAgICAgICAgICAgIHRoaXMuRm9ybSA9IDxOZ0Zvcm0+KDxhbnk+bmdDb250cm9sKS5fcGFyZW50O1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5kZXRhdGNoZWRGcm9tZm9ybSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vUXVlc3RhIHNlcnZlIHBlciBpbXBvc3RhcmUgbWUgc3Rlc3NvIGNvbWUgc2kgZGV2ZSwgaWwgdmFsaWRhdG9yZSBpbnZlY2UgbG8gcGFzc28gYWwgdmFsaWRhdGlvbi1pbnB1dCBxdWFuZG8gdmllbmUgc2V0dGF0byBpbCB2YWxpZGF0aW9uQ29udHJvbFxyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgICAgICAgICAvL1BlciB0dXR0aSBpIHZhbGlkYXRvcmk6IHJpZ2VuZXJvIGxhIGZ1bnppb25lIGRpIHZhbGlkYXppb25lLiBQZXIgcXVhbGNoZSBtb3Rpdm8gYSB2b2x0ZSBobyB2YWxpZGF0b3JpIHNlbnphLi4uXHJcbiAgICAgICAgICAgIC8vLi4uIHF1ZXN0byDDqCB1biB3b3JrYXJvdW5kIHBlciBlc3NlcmUgc2ljdXJvIGRpIGF2ZXJsYSBzZW1wcmUuXHJcbiAgICAgICAgICAgIC8vU29sbyBpIHZhbGlkYXRvcmkgY29uIHBhcmFtZXRyaSBoYW5ubyBiaXNvZ25vIGRlbGxhIF9jcmVhdGVWYWxpZGF0b3IgKGVzLiBcIm1heGxlbmd0aFwiIGNoZSBoYSAxIHBhcmFtZXRybyksIHF1aW5kaSBubyB2YWxpZGF0b3JpIHRpcG8gXCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWxpZGF0b3JzLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYuX2NyZWF0ZVZhbGlkYXRvcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgdi5fY3JlYXRlVmFsaWRhdG9yKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLmFkZFZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVmZmV0dHVhIGlsIEJpbmQvUGFyc2UgZGVsbGUgdmFyaWUgKipTb3VyY2UqKiB1bmVuZG8gbGUgaW5mb3JtYXppb25pIHNwZWNpZmljYXRlIGluICoqRGlzcGxheSoqXHJcbiAgICAgKiBcclxuICAgICAqIEV2ZW50dWFsbWVudGUgcmllZmZldHR1YSB1biBiaW5kIGFsIG1vZGVsbG8gaW4gYmFzZSBhbCB2YWxvcmUgZGVsbGEgdmFyaWFiaWxlICoqUmViaW5kTW9kZWxBZnRlclNvdXJjZSoqXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB0cnlCaW5kU291cmNlRGlzcGxheSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuU291cmNlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNvdXJjZS5sZW5ndGggPT0gMCAmJiAhdGhpcy5Tb3VyY2VGaXJzdEJpbmQpXHJcbiAgICAgICAgICAgIHRoaXMuQm91bmRTb3VyY2UgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5Tb3VyY2VGaXJzdEJpbmQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gQ2FjaGUgbG9jYWxlIHBlciBldml0YXJlIGRpIHJpZmFyZSBkZWkgcmVnZXgubWF0Y2ggb2duaSBzYW50YSB2b2x0YVxyXG4gICAgICAgIGlmICh0aGlzLlNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQm91bmRTb3VyY2UgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLkJpbmRDaGVja2luZ0dyb3Vwcy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVCaW5kQ2hlY2tpbmdHcm91cHMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLkJpbmRQcm9wZXJ0aWVzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZUJpbmRQcm9wZXJ0aWVzKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBCbG9jY28gcGVyIGdlbmVyYXJlIGxhIGRlc2NyaXppb25lIGZpbmFsZSBkaSB1biBlbGVtZW50b1xyXG4gICAgICAgICAgICB0aGlzLlNvdXJjZS5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gQWdnaXVuZ28gYWxsYSBCb3VuZFNvdXJjZSBpbiBmb3JtYXRvIHN0YW5kYXJkIEtleVZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLkJvdW5kU291cmNlLnB1c2godGhpcy50cmFuc2Zvcm1Tb3VyY2VJdGVtKHMpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBQb3N0IHRyeWJpbmQgc2UgYyfDqCB1biBtb2RlbGxvIGFzc29jaWF0byByaWNhbGNvbG8gbCcqKkV2YWx1YXRlZE1vZGVsKipcclxuICAgICAgICAgICAgaWYgKHRoaXMuTW9kZWwpXHJcbiAgICAgICAgICAgICAgICB0aGlzLkJvdW5kU291cmNlLmZpbmQodCA9PiB0LmlkID09IHRoaXMuTW9kZWwpPy5kZXNjcmlwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZhbHV0YSBpbCBjb250ZW51dG8gZGVsbGEgdmFyaWFiaWxlIEJpbmRDaGVja2luZ0dyb3VwcyAqL1xyXG4gICAgcHJpdmF0ZSBldmFsdWF0ZUJpbmRDaGVja2luZ0dyb3VwcygpIHtcclxuICAgICAgICAvLyBCbG9jY28gcGVyIHRpcmFyZSBmdW9yaSBsZSBjb25kaXppb25pIHNjcml0dGUgdGlwbyAtLT4gOnByb3A/KFJvYmEgY29uIHtwcm9wfSlcclxuICAgICAgICB2YXIgaWZmZWRNYXRjaGVzID0gdGhpcy5EaXNwbGF5Lm1hdGNoKC86KFthLXpdKylcXD9cXCgoW15cXChcXCldKylcXCkvZyk7XHJcbiAgICAgICAgaWYgKGlmZmVkTWF0Y2hlcykge1xyXG4gICAgICAgICAgICBpZmZlZE1hdGNoZXMuZm9yRWFjaChtID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIFN0ZXNzYSByZWdleCBkaSBzb3ByYSBtYSBpbCB0YWcgXCJpXCIgc2VydmUgcGVyIHRpcmFyZSBmdW9yaSBpIHNpbmdvbGkgY2FwdHVyaW5nIGdyb3VwIGUgcGVyIHF1YWxjaGUgbW90aXZvIFxyXG4gICAgICAgICAgICAgICAgLy8gbmV3IFJlZ0V4cChiYXNlUmVnZXgsIFwiZ1wiKSBub24gZnVuemlvbmEgcXVpbmRpIG5vbiBobyBwb3R1dG8gcmF6aW9uYWxpenphcmxvXHJcbiAgICAgICAgICAgICAgICBsZXQgZ3JvdXBzID0gbS5tYXRjaCgvOihbYS16XSspXFw/XFwoKFteXFwoXFwpXSspXFwpL2kpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5CaW5kQ2hlY2tpbmdHcm91cHMucHVzaCh7IGdsb2JhbDogbSwgcHJvcDogZ3JvdXBzWzFdLCB3aGVuZXhpc3RzOiBncm91cHNbMl0gfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogVmFsdXRhIGlsIGNvbnRlbnV0byBkZWxsYSB2YXJpYWJpbGUgQmluZFByb3BlcnRpZXMgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGVCaW5kUHJvcGVydGllcygpIHtcclxuICAgICAgICAvLyBCbG9jY28gcGVyIHRpcmFyZSBmdW9yaSBsZSBwcm9wcmlldMOgIHNjcml0dGUgdGlwbyAtLT4ge3Byb3B9XHJcbiAgICAgICAgdmFyIG1hdGNoZXMgPSB0aGlzLkRpc3BsYXkubWF0Y2goL3tbYS16XSt9L2dpKTtcclxuICAgICAgICBpZiAobWF0Y2hlcylcclxuICAgICAgICAgICAgbWF0Y2hlcy5mb3JFYWNoKG0gPT4geyB0aGlzLkJpbmRQcm9wZXJ0aWVzLnB1c2goeyBnbG9iYWw6IG0sIHByb3A6IG0uc3Vic3RyaW5nKDEsIG0ubGVuZ3RoIC0gMSkgfSk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhc2Zvcm1hIHVuIG9nZ2V0dG8gZGVsbGEgU291cmNlIGFsbGEgc3VhIHZlcnNpb25lIFwibnVvdmFcIiBiYXNhbmRvc2kgc3VsbGUgaW5mb3JtYXppb25pIHN1IGdydXBwaSBlIHByb3ByaWV0w6BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gT2dnZXR0byBkYSB0cmFzZm9ybWFyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7e2lkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmd9fSBPZ2dldHRvIGZpbmFsZSB0cmFzZm9ybWF0b1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHRyYW5zZm9ybVNvdXJjZUl0ZW0oczogYW55KToge2lkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmd9IHtcclxuICAgICAgICAvLyBQYXJ0byBzZW1wcmUgZGFsbGEgdmFyaWFiaWxlIGRpIERpc3BsYXksIHBvaSBzb3N0aXR1aXNjbyBwZXp6byBwZXIgcGV6em9cclxuICAgICAgICBsZXQgZGVzYyA9IHRoaXMuRGlzcGxheTtcclxuXHJcbiAgICAgICAgLy8gVGFnbGlvIG8gbWFudGVuZ28gbGUgY29uZGl6aW9uaSBpbiBiYXNlIGFsbGEgcHJvcHJpZXTDoCBzdSBjdWkgZmFyZSBjaGVja1xyXG4gICAgICAgIC8vIERvcG9kaWNow6kgc2NyaXZvIHR1dHRlIGxlIHByb3ByaWV0w6BcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuQmluZENoZWNraW5nR3JvdXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0ID0gdGhpcy5CaW5kQ2hlY2tpbmdHcm91cHNbaV07XHJcbiAgICAgICAgICAgIGRlc2MgPSBkZXNjLnJlcGxhY2UodC5nbG9iYWwsIChzW3QucHJvcF0gIT0gbnVsbCAmJiBzW3QucHJvcF0gIT0gdW5kZWZpbmVkKSA/IHQud2hlbmV4aXN0cyA6IFwiXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLkJpbmRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0ID0gdGhpcy5CaW5kUHJvcGVydGllc1tpXTtcclxuICAgICAgICAgICAgZGVzYyA9IGRlc2MucmVwbGFjZSh0Lmdsb2JhbCwgc1t0LnByb3BdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7IGlkOiBzW3RoaXMuSWRGaWVsZF0sIGRlc2NyaXB0aW9uOiBkZXNjIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgaWwgY29tb3BuZW50ZSBpbiBxdWVzdGlvbmUgw6ggaW4gZ3JhZG8gZGkgZ2VzdGlyZSBuZ0NvbnRyb2wgbnVsbGkuIFxyXG4gICAgICogRGkgZGVmYXVsdCDDqCAqKmZhbHNlKipcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59ICoqdHJ1ZSoqIHNlIGdlc3Rpc2NvIG5nQ29udHJvbCBudWxsaSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgaGFuZGxlTnVsbE5nQ29udHJvbCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIC8vIEEgdm9sdGUgbmVsbCduZ09uSW5pdCBub24gY2kgcGFzc2EgcXVpbmRpIGxvIG1ldHRvIHNpYSBxdWkgc2lhIG5lbGwnYWZ0ZXJ2aWV3aW5pdCwgcGVuc28gY2hlIHZhbGdhIHBlciBpIGNvbXBvbmVudGkgZGkgdGVyemUgcGFydGlcclxuICAgICAgICAvLyBjaGUgc2kgY29sbGVnYW5vIHBlciBpIGNhenppIGxvcm8gYWwgZm9ybSBlY2MsIHF1aW5kaSBsYSBwYXJ0ZSBzb3ByYSBub24gc2VydmUuLi4gQk9IXHJcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkVmFsaWRhdG9yKCk7XHJcblxyXG4gICAgICAgIC8vSWwgbm9tZSBub24gYyfDqCBzZSBtZXR0byBzdGFuZGFsb25lIDogdHJ1ZSAoQ0hFIE5PTiDDqSBEQSBNRVRURVJFKVxyXG4gICAgICAgIC8vRGF0byBjaGUgYW5jaGUgaWwgY29udHJvbGxvIGVzdGVybm8gdmllbmUgY29uc2lkZXJhdG8gY29tZSBjb21wb25lbnRlIGRlbCBmb3JtLCBub24gcG9zc28gYmFzYXJtaSBzb2xvIHN1bCBub21lIG1hIGRldm8gYWdnaXVuZ2VyZSB1biB0YWcuIEluIHF1ZXN0byBjYXNvIFwiX2ludGVybmFsXCJcclxuICAgICAgICAvLyBBVFRFTlpJT05FOiBRVUFMU0lBU0kgU0lBIElMIE1PVElWTywgU0UgU1RPIENPU08gVklFTkUgU1BPU1RBVE8gREFMTCBuZ09uSW5pdCBOT04gRlVOWklPTkEgUElVIE5VTExBXHJcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sLm5hbWUpXHJcbiAgICAgICAgICAgIHRoaXMuR2VuZXJhdGVkTmFtZSA9IHRoaXMubmdDb250cm9sLm5hbWUudG9TdHJpbmcoKSArIFwiX2ludGVybmFsXCI7XHJcblxyXG4gICAgICAgIC8vIEFUVEVOWklPTkU6IFFVQUxTSUFTSSBTSUEgSUwgTU9USVZPLCBTRSBTVE8gQ09TTyBWSUVORSBTUE9TVEFUTyBEQUxMIG5nT25Jbml0IE5PTiBGVU5aSU9OQSBQSVUgTlVMTEFcclxuICAgICAgICBpZiAodGhpcy5Gb3JtKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5mb3JtSGFzQmVubkJvdW5kICYmIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuRm9ybS5hZGRDb250cm9sKHRoaXMudmFsaWRhdGlvbkNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtSGFzQmVubkJvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUXVhbmRvIHVuIGZvcm0gdmllbmUgc3VibWl0dGF0byBsYSB2YXJpYWJpbGUgRm9ybS5zdWJtaXR0ZWQgdmllbmUgYXNzZWduYXRhIGFsbCdpbnB1dCBbc3VibWl0dGVkXSBkZWwgdmFsLWNvbnRyb2xcclxuICAgICAgICAgICAgLy8gRXNzZW5kbyBjaGUgcGVyw7IgbGEgQ0Qgw6ggT25QdXNoIHBlciBkaXJlIGFkIEFuZ3VsYXIgY2hlIGwnSW5wdXQgw6ggY2FtYmlhdG8gZSBwZXJtZXR0ZXJlIGkgc2lkZWZmZWN0cyBkaSBhc3NlZ25hcmUgW3N1Ym1pdHRlZF1cclxuICAgICAgICAgICAgLy8gZGV2byBhdHRhY2Nhcm1pIGFsIHN1Ym1pdCBhdHR1YWxlIGRlbCBmb3JtIGUgcHJpbWEgZGkgZXNlZ3VpcmxvIGRldm8gbWFyY2FyZSBpbCBjb21wb25lbnRlIHBlciBpbCBjaGVja1xyXG4gICAgICAgICAgICBsZXQgb3JpZ0Z1bmMgPSB0aGlzLkZvcm0ub25TdWJtaXQ7XHJcbiAgICAgICAgICAgIHZhciBmb3JtT3V0c2lkZVJlZiA9IHRoaXMuRm9ybTtcclxuICAgICAgICAgICAgdGhpcy5Gb3JtLm9uU3VibWl0ID0gKGV2KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnRnVuYy5hcHBseShmb3JtT3V0c2lkZVJlZik7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2Ugc29ubyBpbiBtb2RhbGl0w6AgZGV0YXRjaGVkIGRldm8gcmltdW92ZXJlIG1hbnVhbG1lbnRlIHF1ZXN0byBjb250cm9sbG8gcXVhbmRvIGVudHJvIG5lbGxhIGRpc3Bvc2UsIGFsdHJpbWVudGkgc2UgcG9pIG5lIGFuZGFzc2kgYSByaWFnZ2l1bmdlcmVcclxuICAgICAqIHVuIGFsdHJvIGNvbiBsbyBzdGVzc28gXCJuYW1lXCIgbWEgbWFnYXJpIHJlc2V0dGF0bywgQW5ndWxhciBsbyByZS1pZHJhdGVyZWJiZSBjb24gaSB2YWxvcmkgcHJlY2VkZW50aSBub25vc3RhbnRlIGlsIG1vZGVsbG8gZm9zc2UgdnVvdG9cclxuICAgICAqL1xyXG4gICAgbmdPbkRlc3Ryb3koKXtcclxuICAgICAgICBpZih0aGlzLmRldGF0Y2hlZEZyb21mb3JtICYmIHRoaXMuRm9ybSlcclxuICAgICAgICAgICAgdGhpcy5Gb3JtLnJlbW92ZUNvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEVsYWJvcmEgaSB2YWxpZGF0b3JpIGluaWV0dGF0aSBlIGNhcGlzY2Ugc2UgaWwgdmFsb3JlIMOoIG9iYmxpZ2F0b3JpbyBvIG1lbm8gKi9cclxuICAgIGNoZWNrUmVxdWlyZWRWYWxpZGF0b3IoKSB7XHJcbiAgICAgICAgLy8gY29udHJvbGxvIHNlIMOoIHNldHRhdG8gdW4gcmVxdWlyZWQgcGVyIGRlY2lkZXJlIGluIG1hbmllcmEgY29uZGl6aW9uYWxlIHNlIHV0aWxpenphcmUgaWwgdmFsaWRhdG9yZSByZXF1aXJlZCBuZWwgY29tcG9uZW50ZSBpbnRlcm5vXHJcbiAgICAgICAgLy8gTG8gZmFjY2lvIHF1aSBlIG5vbiBpbiB1biBldmVudHVhbGUgbmdPbkluaXQgbyBjb3N0cnV0dG9yZSBwZXJjaMOpIG5nT25Jbml0IG5vbiBzZW1wcmUgdmllbmUgY2hpYW1hdG8gZSBkYSBjb3N0cnV0dG9yZSBpbCB2YWxpZGF0b3JlIG5vbiBoYSBhbmNvcmEgaWwgdmFsb3JlIGdpdXN0b1xyXG4gICAgICAgIGlmICh0aGlzLl92YWxpZGF0b3JzICYmIHRoaXMuX3ZhbGlkYXRvcnMuc29tZShlbGVtID0+IGVsZW0gaW5zdGFuY2VvZiBSZXF1aXJlZFZhbGlkYXRvciAmJiBlbGVtLnJlcXVpcmVkKSlcclxuICAgICAgICAgICAgdGhpcy5SZXF1aXJlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubmdDb250cm9sKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFZhbGlkYXRvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIZWxwZXIgY2hlIGNvbGxlZ2EgbGEgZnVuemlvbmUgZGkgcmVzZXQgZGVsIGNvbnRyb2xsbyBmb3JtIGFsIGNvbnRyb2xsbyBkaSB2YWxpZGF6aW9uZSBzb3R0b3N0YW50ZSAqL1xyXG4gICAgcHJpdmF0ZSBiaW5kUmVzZXRGdW5jdGlvbigpIHtcclxuICAgICAgICAvL2ZhY2NpbyBpbiBtb2RvIGNoZSBzZSBjaGlhbW8gaWwgcmVzZXQgZGVsIGNvbnRyb2xsbyAobyBkZWxsYSBmb3JtKSBkYWxsJ2VzdGVybm8gc2kgcmVzZXR0aSBhbmNoZSBpbCBjb250cm9sbG8gbmF0aXZvXHJcbiAgICAgICAgY29uc3Qgb3JpZ0Z1bmMgPSAoPGFueT50aGlzLm5nQ29udHJvbC5jb250cm9sKS5fX29yaWdpbmFsX3Jlc2V0X18gfHwgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5yZXNldDtcclxuICAgICAgICB2YXIgbmdDb250cm9sX291dHNpZGVSZWZlcmVuY2UgPSB0aGlzLm5nQ29udHJvbC5jb250cm9sO1xyXG4gICAgICAgIHZhciB2YWxpZGF0aW9uQ29udHJvbF9vdXRzaWRlUmVmZXJlbmNlID0gdGhpcy52YWxpZGF0aW9uQ29udHJvbC5jb250cm9sO1xyXG5cclxuICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnJlc2V0ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBvcmlnRnVuYy5hcHBseShuZ0NvbnRyb2xfb3V0c2lkZVJlZmVyZW5jZSk7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db250cm9sX291dHNpZGVSZWZlcmVuY2UucmVzZXQoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvL1BlciBjb25zZW50aXJlIHJpY2hpYW1pIG11bHRpcGxpIGRpIHF1ZXN0YSBmdW56aW9uZSBwcmVuZGVuZG8gc2VtcHJlIGxhIGZpdW56aW9uZSBkaSByZXNldCBiYXNlXHJcbiAgICAgICAgKDxhbnk+dGhpcy5uZ0NvbnRyb2wuY29udHJvbCkuX19vcmlnaW5hbF9yZXNldF9fID0gb3JpZ0Z1bmNcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCAmJiB0aGlzLmZpcnN0QmluZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0QmluZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLk1vZGVsID0gb2JqO1xyXG5cclxuICAgICAgICAvL1BlciBzdmVnbGlhcmUgQW5ndWxhci4gSWwgdmFsb3JlIGNoZSBlbnRyYSBwb3RyZWJiZSBlc3NlcmUgdmFsaWRvL25vbiB2YWxpZG8gZSBxdWVzdG8gbG8gYmluZGEgYSB0dXR0bywgZm9ybSBjb21wcmVzb1xyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbClcclxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLk1vZGVsKVxyXG4gICAgICAgICAgICB0aGlzLm9uTm90TnVsbFZhbHVlU2V0KCk7XHJcblxyXG4gICAgICAgIC8vIG1hcmtGb3JDaGVjayBub24gdmEgYmVuZSBpbiBxdWFudG8gYXJyaXZhbm8gcG9zc2liaWxtZW50ZSAyIHVwZGF0ZSBzdSB1biBzb2xvIGNpY2xvIGRpIHN0YWNrXHJcbiAgICAgICAgLy8gc2V0VGltZSp1dCBjaGUgd3JhcHBhIHR1dHRvIG5vbiB2YSBiZW5lIHNlbm7DsiBzcGFtbWEgZGVsbGUgY2hhbmdlIGRldGVjdGlvbiBhIHN1b24gZGkgaW50ZXJ2YWwgY2hlIHJhbGxlbnRhbm8gdGFudGlzc2ltbyBsJ2FwcFxyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RyYSBpbnRlcm5hbWVudGUgaWwgY29tcG9uZW50ZSBkaSB2YWxpZGF6aW9uZSwgbmUgaW1wb3N0YSBpIHZhbGlkYXRvcmkgZSBjb2xsZWdhIGlsIEZvcm0sIHNlIHByZXNlbnRlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7TmdNb2RlbH0gY29tcCBFbGVtZW50byBIVE1MIG1hcmNhdG8gY29uIFwiI3ZhbGlkYXRpb25Db250cm9sXCJcclxuICAgICAqL1xyXG4gICAgcmVnaXN0ZXJWYWxDb21wKGNvbXA6IE5nTW9kZWwpIHtcclxuICAgICAgICBpZiAoY29tcCkge1xyXG4gICAgICAgICAgICAvLyDDiCBhcnJpdmF0byB1biBudW92byB2YWxpZGF0aW9uQ29udG9ybCAoc3VjY2VkZSBzb2xvIG5lbCBmb3JtLXNlbGVjdCBxdWFuZG8gY2FtYmlhIGxhIHNvdXJjZSBkYSAwIGVsZW1lbnRpIC8gbnVsbCBhZCBOIGVsZW1lbnRpLCBxdWluZGkgYWwgbWFzc2ltbyB1bmEgdm9sdGEpIFxyXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uQ29udHJvbCAmJiB0aGlzLkZvcm0pXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZvcm0ucmVtb3ZlQ29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wgPSBjb21wO1xyXG5cclxuICAgICAgICAgICAgLy9RdWVzdGEgc2VydmUgcGVyIHBhc3NhcmUgYXZhbnRpIGkgdmFsaWRhdG9yaVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzKTtcclxuXHJcbiAgICAgICAgICAgIC8vU2Ugc29ubyBzdGFjY2F0byBkYWwgRm9ybSAodnVvbCBkaXJlIGNoZSBzb25vIGFkIGVzZW1waW8gZGVudHJvIHVuIG5nLXRlbXBsYXRlKSBhZ2dpdW5nbyBpbCBjb250cm9sbG8gYWwgRm9ybSBwYXNzYXRvIGNvbWUgaW5wdXQgKGNvbnRleHQgZGVsIHRlbXBsYXRlKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5kZXRhdGNoZWRGcm9tZm9ybSAmJiB0aGlzLkZvcm0gJiYgIXRoaXMuZm9ybUhhc0Jlbm5Cb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Gb3JtLmFkZENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbClcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUhhc0Jlbm5Cb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5nQ29udHJvbClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZFJlc2V0RnVuY3Rpb24oKTtcclxuXHJcbiAgICAgICAgICAgIC8vSSB2YWwtcm9iYSBxdWVzdG8gbG8gZmFubm8gYXV0b21hdGljYW1lbnRlIGRlbnRyby4uLiBnbGkgYWx0cmkgbm8gKGVzLiBzZW1wbGljZSBpbnB1dCBjaGVja2JveClcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eUZvck5hdGl2ZUlucHV0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWdnaW9ybmEgaWwgdmFsb3JlIGUgbGEgdmFsaWRpdMOgIGRlbGwnaW5wdXQgc290dG9zdGFudGUuIE5vbiB2aWVuZSBjaGlhbWF0byBwZXIgaW5wdXQgbmF0aXZpIGNvbWUgbGUgY2hlY2tib3hcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZWRWYWx1ZSBGb3J6YSBsJ2FnZ2lvcm5hbWVudG8gYW5jaGUgc2Ugbm9uIMOoIHVuIGlucHV0IG5hdGl2byAoaW5wdXQgbmF0aXZvID0gY2hlY2tib3gsIGFkIGVzZW1waW8pXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVZhbGlkaXR5Rm9yTmF0aXZlSW5wdXQoZm9yY2VkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChmb3JjZWRWYWx1ZSB8fCB0aGlzLm5hdGl2ZUlucHV0KVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICogQ2xhc3NpY28gXCJzcGFyYSBmdW9yaVwiLiBNYW50ZW5nbyBsbyBzdGVzc28gbm9tZSBkZWxsJ2V2ZW50byBkZWkgPHZhbC0qPiAoaW5wdXRDaGFuZ2UpIHBlciByZXRyb2NvbXBhdGliaWxpdMOgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb24gcG9zc28gdGVuZXJsbyBwcm90ZWN0ZWQgYWx0cmltZW50aSBwb3NzbyBlc2VndWlybG8gc29sbyBkYWwgLnRzIGUgbm9uIGRhbGwnIC5odG1sXHJcbiAgICAgKi9cclxuICAgIGNoYW5nZWQoZm9yY2VkVmFsdWU6IGFueSA9IG51bGwsIG1hcmtGb3JDaGVjazogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UoZm9yY2VkVmFsdWUgPT0gbnVsbCB8fCBmb3JjZWRWYWx1ZSA9PSBcIlwiID8gdGhpcy5Nb2RlbCA/PyBcIlwiIDogZm9yY2VkVmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdChmb3JjZWRWYWx1ZSA9PSBudWxsIHx8IGZvcmNlZFZhbHVlID09IFwiXCIgPyB0aGlzLk1vZGVsID8/IFwiXCIgOiBmb3JjZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hcmtGb3JDaGVjaylcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBDbGFzc2ljbyBcInNwYXJhIGZ1b3JpXCIgc3VsIGZvY3VzLiBNYW50ZW5nbyBsbyBzdGVzc28gbm9tZSBkZWxsJ2V2ZW50byBkZWkgPHZhbC0qPiAoaW5wdXRDaGFuZ2UpIHBlciByZXRyb2NvbXBhdGliaWxpdMOgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb24gcG9zc28gdGVuZXJsbyBwcm90ZWN0ZWQgYWx0cmltZW50aSBwb3NzbyBlc2VndWlybG8gc29sbyBkYWwgLnRzIGUgbm9uIGRhbGwnIC5odG1sXHJcbiAgICAgKi9cclxuICAgIGZvY3VzZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cy5lbWl0KGV2ZW50KTtcclxuICAgICAgICB0aGlzLmxvZyhcIkNvbnRyb2wgRm9jdXNlZCAtIFwiICsgdGhpcy5HZW5lcmF0ZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqIENsYXNzaWNvIFwic3BhcmEgZnVvcmlcIiBzdWxsYSBmaW5hbGl6emF6aW9uZSBkZWwgdmFsb3JlIGRlbGwnaW5wdXQgKGJsdXIgLyB0YXN0byBpbnZpbywgZWNjLi4uKS4gTWFudGVuZ28gbG8gc3Rlc3NvIG5vbWUgZGVsbCdldmVudG8gZGVpIDx2YWwtKj4gKGlucHV0Q2hhbmdlKSBwZXIgcmV0cm9jb21wYXRpYmlsaXTDoC5cclxuICAgICAqIFxyXG4gICAgICogTm9uIHBvc3NvIHRlbmVybG8gcHJvdGVjdGVkIGFsdHJpbWVudGkgcG9zc28gZXNlZ3VpcmxvIHNvbG8gZGFsIC50cyBlIG5vbiBkYWxsJyAuaHRtbFxyXG4gICAgICovXHJcbiAgICBmaW5hbGl6ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dEZpbmFsaXplZC5lbWl0KCk7XHJcbiAgICAgICAgdGhpcy5sb2coXCJDb250cm9sIFZhbHVlIEZpbmFsaXplZCAtIFwiICsgdGhpcy5HZW5lcmF0ZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YW1wYSB1biBsb2cgYSBjb25zb2xlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIE1lc3NhZ2dpbyBkYSBzdGFtcGFyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbG9nKG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLkZBVl9ERUJVR19NT0RFKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkBmb3Jtcy1hbmQtdmFsaWRhdGlvbnM6IFwiICsgbWVzc2FnZSlcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgYWJzdHJhY3Qgb25Ob3ROdWxsVmFsdWVTZXQoKTogdm9pZDtcclxufSJdfQ==
@@ -150,7 +150,7 @@ export class FormAdaptiveComponent extends BaseFormControl {
150
150
  return;
151
151
  }
152
152
  // Quando filtro la source, se non devo ignorare l'evento devo comunque assicurarmi di impostare il valore selezionato a null
153
- super.changed("");
153
+ super.changed(null);
154
154
  if (!event && this.MinChars == 0 && !this.SearchFunction) {
155
155
  this.FilteredBoundSource = this.BoundSource;
156
156
  return;
@@ -168,6 +168,7 @@ export class FormAdaptiveComponent extends BaseFormControl {
168
168
  this.tryBindSourceDisplay();
169
169
  // In questo caso è già filtrata dalla SearchFunction
170
170
  this.FilteredBoundSource = this.BoundSource;
171
+ this.removeFilteredSourceOnDescriptionSelection();
171
172
  this.cdr.markForCheck();
172
173
  });
173
174
  }, 400);
@@ -176,10 +177,19 @@ export class FormAdaptiveComponent extends BaseFormControl {
176
177
  this.throttla("filtersource", () => {
177
178
  // In questo caso devo filtrare io in memoria
178
179
  this.FilteredBoundSource = this.BoundSource.filter(t => (this.CaseSensitive && t.description.includes(event)) || (!this.CaseSensitive && t.description.toLowerCase().includes(event.toLowerCase())));
180
+ this.removeFilteredSourceOnDescriptionSelection();
179
181
  this.cdr.markForCheck();
180
182
  }, 100);
181
183
  }
182
184
  }
185
+ /** @ignore */
186
+ removeFilteredSourceOnDescriptionSelection() {
187
+ if (this.FilteredBoundSource.length == 1 && (this.FilteredBoundSource[0].description === this.Model)) {
188
+ this.Model = this.BoundSource[0].id;
189
+ this.EvaluatedModel = this.BoundSource[0].description;
190
+ this.FilteredBoundSource = [];
191
+ }
192
+ }
183
193
  /** Metodo richiamato quando viene modificato il modello del campo di input */
184
194
  changed() {
185
195
  var toEmit = this.getModelToEmit();
@@ -302,4 +312,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
302
312
  }], CaseSensitive: [{
303
313
  type: Input
304
314
  }] } });
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hZGFwdGl2ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWFkYXB0aXZlL2Zvcm0tYWRhcHRpdmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1hZGFwdGl2ZS9mb3JtLWFkYXB0aXZlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSixPQUFPLEVBQXdCLGFBQWEsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBRWhGLHNCQUFzQjtBQUN0QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUs5RCxlQUFlO0FBQ2YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXpFLFVBQVU7QUFDVixPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBVS9DLDJKQUEySjtBQVEzSixNQUFNLE9BQU8scUJBQXNCLFNBQVEsZUFBZTtJQWtEdEQsMkJBQTJCO0lBQzNCLFlBQVksR0FBc0IsRUFBVSxPQUF1QixFQUFVLFNBQXNCLEVBQVUsV0FBbUMsRUFBUyxFQUF1QixFQUFzQixTQUFvQixFQUFxQyxXQUF1QixFQUFFLEVBQXdC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Q0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzVHLENBQUM7O2tIQXRTUSxxQkFBcUIscU9BbURrTixhQUFhLGlIQUFtSCxhQUFhLDZCQUE4QyxjQUFjO3NHQW5EaGIscUJBQXFCLHdTQUxuQixDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxDQUFDLDRLQzdCckYscXdRQWlGYzsyRkQvQ0QscUJBQXFCO2tCQVBqQyxTQUFTOytCQUNJLGVBQWUsYUFDZCxDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxDQUFDLG1CQUdoRSx1QkFBdUIsQ0FBQyxNQUFNOzswQkFxRG9JLFFBQVE7OzBCQUFJLElBQUk7OEJBQXlFLEtBQUs7MEJBQXBELFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQXNELFFBQVE7OzBCQUFrQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7OzBCQUEyQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWM7NENBaERoYixJQUFJO3NCQUFaLEtBQUs7Z0JBR0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHcUMsT0FBTztzQkFBakQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUdoQyxhQUFhO3NCQUFyQixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBTZWxmLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMSURBVE9SUywgTmdDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG4vLyBFUyAvIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuaW1wb3J0IHsgRGF0ZVNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBDb21wb25lbnRDb250ZXh0IH0gZnJvbSAnQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sJztcclxuaW1wb3J0IHsgTmd4TWF0RGF0ZUFkYXB0ZXIgfSBmcm9tIFwiQGFuZ3VsYXItbWF0ZXJpYWwtY29tcG9uZW50cy9kYXRldGltZS1waWNrZXJcIjtcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBCYXNlRm9ybUNvbnRyb2wgfSBmcm9tIFwiLi4vYmFzZS1mb3JtLWNvbnRyb2xcIjtcclxuaW1wb3J0IHsgRm9ybUFkYXB0aXZlQ29tcG9uZW50TG9jIH0gZnJvbSBcIi4vZm9ybS1hZGFwdGl2ZS5jb21wb25lbnQubG9jXCI7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IEFDT19DVVNUT01LRVksIEZBVl9ERUJVR19NT0RFIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcclxuaW1wb3J0IHsgQXBwRmlsZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvQXBwRmlsZVwiO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG4vKipcclxuICogRGljaGlhcmF6aW9uZSBkZWxsYSB2YXJpYWJpbGUgZ2xvYmFsZSBkYXlqcy4gTCdvbmVyZSBkaSBcImNyZWFybGFcIiDDqCBhZmZpZGF0byBhbGwnYXBwbGljYXppb25lIGNoZSB1dGlsaXp6YSBxdWVzdGEgbGlicmVyaWEsIFxyXG4gKiBjaGUgZG92csOgIGltcG9ydGFyZSBsbyBzY3JpcHQgZ2xvYmFsZSBkaSBkYXlqcyBuZWxsYSBDTElcclxuICovXHJcbmRlY2xhcmUgdmFyIGRheWpzOiBhbnk7XHJcblxyXG4vKiogQ29tcG9uZW50ZSBpbiBncmFkbyBkaSBhc3N1bWVyZSBsYSBmb3JtYSBkaSB1biBxdWFsc2lhc2kgYWx0cm8gY29tcG9uZW50ZSBmb3JtIGluIGJhc2UgYWwgdGlwbyBzcGVjaWZpY2F0by4gVXRpbGUgIHBlciBsYSBjcmVhemlvbmUgZGkgZm9ybSBkaW5hbWljaSAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImZvcm0tYWRhcHRpdmVcIixcclxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IEZvcm1BZGFwdGl2ZUNvbXBvbmVudExvYyB9XSxcclxuICAgIHRlbXBsYXRlVXJsOiBcImZvcm0tYWRhcHRpdmUuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogW1wiLi4vZm9ybS1maWxlL2Zvcm0tZmlsZS5jb21wb25lbnQuY3NzXCJdLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1BZGFwdGl2ZUNvbXBvbmVudCBleHRlbmRzIEJhc2VGb3JtQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgICAvKiogVGlwb2xvZ2lhIGNoZSBkZWNpZGUgY2hlIGNvbXBvbmVudGUgbW9zdHJhcmUgKi9cclxuICAgIEBJbnB1dCgpIFR5cGU6ICdzdHJpbmcnIHwgJ2Zsb2F0JyB8ICdkYXRlJyB8ICdudW1iZXInIHwgJ2ludCcgfCAnYm9vbGVhbicgfCAnZW51bScgfCAnYXV0b2NvbXBsZXRlJyB8ICdkYXRldGltZScgfCAndGltZScgfCAnZmlsZScgfCAnY3VycmVuY3knO1xyXG5cclxuICAgIC8qKiBNZXNzYWdnaW8gcGVyIHF1YW5kbyBzaSBiaW5kYSB1biBmb3JtLWFkYXB0aXZlIHNlbnphIHRpcG8gKi9cclxuICAgIEBJbnB1dCgpIFR5cGVNaXNzaW5nTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBQYXR0ZXJuIGRpIHZhbGlkYXppb25lICovXHJcbiAgICBASW5wdXQoKSBQYXR0ZXJuOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIFJpZmVyaW1lbnRvIGFsbCdlbGVtZW50byBpbnB1dCBkaSB0aXBvIGZpbGUgcXVhbG9yYSBpbCAqKlR5cGUqKiBkaSBxdWVzdG8gY29tcG9uZW50ZSBmb3NzZSAqKmZpbGUqKiAqL1xyXG4gICAgQFZpZXdDaGlsZChcImZpbGVJbnB1dFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgaW5wdXRFbDogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKiogUGVybWV0dGUgZGkgc2NhcmljYXJlIGwnZXZlbnR1YWxlIGZpbGUgcHJlc2VudGUgcXVhbG9yYSBpbCAqKlR5cGUqKiBkaSBxdWVzdG8gY29tcG9uZW50ZSBmb3NzZSAqKmZpbGUqKiAqL1xyXG4gICAgQElucHV0KCkgQWxsb3dEb3dubG9hZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIE1vZGVsbG8gdHlwZXNjcmlwdCBkaSBiaW5kIGRlaSBmaWxlICovXHJcbiAgICBNb2RlbEZpbGU6IEFwcEZpbGU7XHJcblxyXG4gICAgLyoqIFV0aWxpenphdGEgbmVsIGZvcm0tYWRhcHRlciBwZXIgc3BlY2lmaWNhcmUgbGEgcHJlY2lzaW9uZSBkZWdsaSBpbnB1dCBjdXJyZW5jeW1hcCAoVHlwZTogY3VycmVuY3kpICovXHJcbiAgICBASW5wdXQoKSBQcmVjaXNpb246IG51bWJlciA9IDI7XHJcblxyXG4gICAgLyoqIEFsbGluZWFtZW50byBkZWxsYSBjdXJyZW5jeSBtYXNrICovXHJcbiAgICBASW5wdXQoKSBBbGlnbm1lbnQ6ICdsZWZ0JyB8ICdyaWdodCcgPSAncmlnaHQnO1xyXG5cclxuICAgIC8qKiBGdW56aW9uZSBkaSByaWNlcmNhIGNoZSB2ZXJyw6AgY2hpYW1hdGEgZGFsIGNvbXBvbmVudGUgKi9cclxuICAgIEBJbnB1dCgpIFNlYXJjaEZ1bmN0aW9uOiAoc2VhcmNoOiBzdHJpbmcsIGJ5aWQ6IGJvb2xlYW4pID0+IE9ic2VydmFibGU8eyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXT4gPSBudWxsO1xyXG5cclxuICAgIC8qKiBOdW1lcm8gbWluaW1vIGRpIGNhcmF0dGVyaSBjb24gY3VpIGNlcmNhcmUgKi9cclxuICAgIEBJbnB1dCgpIE1pbkNoYXJzOiBudW1iZXIgPSAzO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2UgaSBjb250cm9sbGkgZGV2b25vIGVzc2VyZSBlZmZldHR1YXRpIHRlbmVuZG8gY29udG8gZGVsIENhc2UgbyBtZW5vLiBWYWxlIHNvbG8gcXVhbG9yYSBsYSAqKlNvdXJjZSoqIGZvc3NlIGZvcm5pdGEgKi9cclxuICAgIEBJbnB1dCgpIENhc2VTZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogVmFyaWFiaWxlIGludGVybmEgY2hlIGdlc3Rpc2NlIHNlIGVmZmV0dHVhcmUgaWwgcmlhbGxpbmVhbWVudG8gZGVpIGRhdGkgbyBtZW5vICovXHJcbiAgICBwcml2YXRlIGFsaWduVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgaWdub3JhcmUgaWwgcHJvc3NpbW8gZXZlbnRvIHdyaXRlVmFsdWUgY2hlIG5vcm1hbG1lbnRlIGRvdnJlYmJlIHJpY2hpZWRlcmUgbGEgbnVvdmEgc291cmNlLiBTZXJ2ZSBwZXIgcXVhbmRvIGwndXRlbnRlIHNlbGV6aW9uYSB1biBlbGVtZW50bzpcclxuICAgICAqIFN1Yml0byBkb3BvIHBhcnRpcmViYmUgdW4gYWx0cm8gZXZlbnRvIG1vZGVsQ2hhbmdlIGNoZSByaWNhcmljaGVyZWJiZSBudW92YW1lbnRlIGxhIHNvdXJjZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGlnbm9yZU5leHRXcml0ZVZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIENhY2hlIGRlbGxhIHNvcmdlbnRlIG9yaWdpbmFsZSBQT1NUIGJpbmRpbmcsIGluIG1vZG8gZGEgcG90ZXIgZmFyZSBmaWx0cmkgaW4gbG9jYWxlIHF1YWxvcmEgbGEgKipTZWFyY2hGdW5jdGlvbioqIG5vbiBmb3NzZSBkZWZpbml0YSBlIGxhICoqU291cmNlKiogZm9zc2UgYXNzZWduYXRhICovXHJcbiAgICBwdWJsaWMgRmlsdGVyZWRCb3VuZFNvdXJjZTogeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBTb2xvIHBlciBnbGkgaW5wdXQgZGkgdGlwbyBcImRhdGVcIi4gQ2FwaXNjZSBjaGUgbW9kYWxpdMOgIHVzYXJlIHBlciBpbCB2YWxpZGF0aW9uLWRhdGUgc290dG9zdGFudGUgKi9cclxuICAgIHB1YmxpYyB1c2VKc0RhdGVzOiBib29sZWFuO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICAqL1xyXG4gICAgY29uc3RydWN0b3IoY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBkYXRlc0V4dHM6IERhdGVTZXJ2aWNlLCBwcml2YXRlIGRhdGVBZGFwdGVyOiBOZ3hNYXREYXRlQWRhcHRlcjxhbnk+LCBwdWJsaWMgbGM6IExvY2FsaXphdGlvblNlcnZpY2UsIEBPcHRpb25hbCgpIEBTZWxmKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wsIEBPcHRpb25hbCgpIEBJbmplY3QoTkdfVkFMSURBVE9SUykgX3ZhbGlkYXRvcnM6IEFycmF5PGFueT4sIGFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgQE9wdGlvbmFsKCkgQXBwQ29udGV4dDogQ29tcG9uZW50Q29udGV4dCwgQE9wdGlvbmFsKCkgQEluamVjdChBQ09fQ1VTVE9NS0VZKSBBQ09fQ1VTVE9NS0VZIDogc3RyaW5nLCBAT3B0aW9uYWwoKSBASW5qZWN0KEZBVl9ERUJVR19NT0RFKSBGQVZfREVCVUdfTU9ERSA6IGJvb2xlYW4pIHtcclxuICAgICAgICBzdXBlcihjZHIsIG5nQ29udHJvbCwgX3ZhbGlkYXRvcnMsIGFjLCBBcHBDb250ZXh0LCBBQ09fQ1VTVE9NS0VZLCBGQVZfREVCVUdfTU9ERSk7XHJcblxyXG4gICAgICAgIHRoaXMuTW9kZWxGaWxlID0gbmV3IEFwcEZpbGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBjb25zdCBuZXdTb3VyY2UgPSBjaGFuZ2VzW1wiU291cmNlXCJdO1xyXG4gICAgICAgIGNvbnN0IG5ld1R5cGUgPSBjaGFuZ2VzW1wiVHlwZVwiXTtcclxuXHJcbiAgICAgICAgaWYgKG5ld1NvdXJjZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyeUJpbmRTb3VyY2VEaXNwbGF5KCk7XHJcblxyXG4gICAgICAgICAgICAvLyBQcmltYSBhc3NlZ25hemlvbmUgc2UgY2FtYmlhIGxhIHNvdXJjZSBzb3R0byAocXVpbmRpIHNlIHZpZW5lIGJpbmRhdGEgZGlyZXR0YW1lbnRlIGRhIEhUTUwpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJhdXRvY29tcGxldGVcIiAmJiAodGhpcy5Nb2RlbD8ubGVuZ3RoIHx8IDApID49IHRoaXMuTWluQ2hhcnMgJiYgIXRoaXMuU2VhcmNoRnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSB0aGlzLkJvdW5kU291cmNlO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG5ld1R5cGUgJiYgdGhpcy5Nb2RlbClcclxuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hbGlnblZhbHVlcyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gb2JqPy50b1N0cmluZygpIHx8IFwiXCI7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5UeXBlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5UeXBlID0gXCJzdHJpbmdcIjtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IG9iajtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJkYXRlXCIgfHwgdGhpcy5UeXBlID09IFwiZGF0ZXRpbWVcIikge1xyXG4gICAgICAgICAgICB0aGlzLnVzZUpzRGF0ZXMgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IERhdGVdXCI7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJkYXRlXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5kYXRlc0V4dHMuZ2V0Rm9ybWF0dGVkKG9iaiwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5UeXBlID09IFwiZGF0ZXRpbWVcIilcclxuICAgICAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLmRhdGVzRXh0cy5nZXRGb3JtYXR0ZWQob2JqLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCh0aGlzLlR5cGUgPT0gXCJmbG9hdFwiIHx8IHRoaXMuVHlwZSA9PSBcIm51bWJlclwiKSAmJiBvYmopXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvYmogPSBvYmoudG9TdHJpbmcoKS5yZXBsYWNlKFwiLlwiLCBcIixcIik7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFBlciBzaWN1cmV6emEgcmlhbGxpbmVvIGkgdmFsb3JpXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IG9iaiA/IChvYmogPT09IHRydWUgfHwgb2JqLnRvTG93ZXJDYXNlKCkgPT0gXCJ0cnVlXCIpIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuYWxpZ25WYWx1ZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5sYy5sb2Mob2JqID8gJ1llcycgOiAnTm8nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwidGltZVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kc10gPSAob2JqIHx8IFwiMDA6MDA6MDBcIikuc3BsaXQoXCI6XCIpO1xyXG4gICAgICAgICAgICBvYmogPSBkYXlqcygpLmhvdXIocGFyc2VJbnQoaG91cnMgPz8gMCkpLm1pbnV0ZShwYXJzZUludChtaW51dGVzID8/IDApKS5zZWNvbmQocGFyc2VJbnQoc2Vjb25kcyA/PyAwKSk7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBgJHtob3VycyB8fCAnMDAnfToke21pbnV0ZXMgfHwgJzAwJ306JHtzZWNvbmRzIHx8ICcwMCd9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwiZmlsZVwiKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb2JqID0gdGhpcy5Nb2RlbEZpbGU7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLk1vZGVsRmlsZS5maWxlbmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwiYXV0b2NvbXBsZXRlXCIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuU2VhcmNoRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2VhcmNoRnVuY3Rpb24ob2JqLCB0cnVlKS5zdWJzY3JpYmUodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Tb3VyY2UgPSB0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QmluZFNvdXJjZURpc3BsYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5maW5hbGl6ZVZhbHVlKG9iaik7IH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5maW5hbGl6ZVZhbHVlKG9iaik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLkJvdW5kU291cmNlICYmIHRoaXMuQm91bmRTb3VyY2UubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuQm91bmRTb3VyY2UuZmluZCh0ID0+IHQuaWQgPT0gb2JqKT8uZGVzY3JpcHRpb247XHJcblxyXG4gICAgICAgIHN1cGVyLndyaXRlVmFsdWUob2JqKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYWxpZ25WYWx1ZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gdW4gdmFsb3JlIHZlcmlmaWNhIHNlIHB1w7IgcmVzdGl0dWlyZSBsZSBpbmZvcm1hemlvbmkgdHJvdmF0ZSBpbiAqKlNvdXJjZSoqIGNvbiBpZCB1Z3VhbGUgYSAqKnZhbHVlKiogbyBzZSBkZXZlIHJlc3RpdHVpcmUgaWwgdmFsb3JlIGluIHNlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSB2YWx1ZSBWYWxvcmUgc2NyaXR0byBuZWxsJ2lucHV0IGRpIHRlc3RvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZmluYWxpemVWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuU291cmNlLmZpbmQodCA9PiB0LmlkID09IHZhbHVlKTtcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh2YWwgPyB2YWwuaWQgOiB2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5Nb2RlbCA9IHZhbCA/IHZhbC5kZXNjcmlwdGlvbiA6IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLk1vZGVsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnRvIGRpIGZpbHRybyBkZWxsYSBzb3JnZW50ZSBkYXRpIGluIGJhc2UgYWxsJ2lucHV0IHV0ZW50ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgSW5wdXQgdXRlbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmaWx0ZXJTb3VyY2UoZXZlbnQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmlnbm9yZU5leHRXcml0ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaWdub3JlTmV4dFdyaXRlVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUXVhbmRvIGZpbHRybyBsYSBzb3VyY2UsIHNlIG5vbiBkZXZvIGlnbm9yYXJlIGwnZXZlbnRvIGRldm8gY29tdW5xdWUgYXNzaWN1cmFybWkgZGkgaW1wb3N0YXJlIGlsIHZhbG9yZSBzZWxlemlvbmF0byBhIG51bGxcclxuICAgICAgICBzdXBlci5jaGFuZ2VkKFwiXCIpO1xyXG5cclxuICAgICAgICBpZiAoIWV2ZW50ICYmIHRoaXMuTWluQ2hhcnMgPT0gMCAmJiAhdGhpcy5TZWFyY2hGdW5jdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSB0aGlzLkJvdW5kU291cmNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWV2ZW50IHx8IGV2ZW50Lmxlbmd0aCA8IHRoaXMuTWluQ2hhcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlID0gW107XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5TZWFyY2hGdW5jdGlvbiAmJiAoIXRoaXMuU291cmNlIHx8IHRoaXMuU291cmNlLmxlbmd0aCA9PSAwKSlcclxuICAgICAgICAgICAgdGhyb3cgXCJJbXBvc3NpYmlsZSBmaWx0cmFyZSBnbGkgZWxlbWVudGkgc2VuemEgdW5hIGZ1bnppb25lIGRpIHJpY2VyY2EgY2hlIHJlc3RpdHVpc2NhIHVuYSBsaXN0YSBkaSB7IGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfVwiO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5TZWFyY2hGdW5jdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRocm90dGxhKFwiZmlsdGVyc291cmNlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2VhcmNoRnVuY3Rpb24oZXZlbnQsIGZhbHNlKS5zdWJzY3JpYmUodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Tb3VyY2UgPSB0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QmluZFNvdXJjZURpc3BsYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJbiBxdWVzdG8gY2FzbyDDqCBnacOgIGZpbHRyYXRhIGRhbGxhIFNlYXJjaEZ1bmN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlID0gdGhpcy5Cb3VuZFNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LCA0MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50aHJvdHRsYShcImZpbHRlcnNvdXJjZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbiBxdWVzdG8gY2FzbyBkZXZvIGZpbHRyYXJlIGlvIGluIG1lbW9yaWFcclxuICAgICAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IHRoaXMuQm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gKHRoaXMuQ2FzZVNlbnNpdGl2ZSAmJiB0LmRlc2NyaXB0aW9uLmluY2x1ZGVzKGV2ZW50KSkgfHwgKCF0aGlzLkNhc2VTZW5zaXRpdmUgJiYgdC5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnRvTG93ZXJDYXNlKCkpKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIE1ldG9kbyByaWNoaWFtYXRvIHF1YW5kbyB2aWVuZSBtb2RpZmljYXRvIGlsIG1vZGVsbG8gZGVsIGNhbXBvIGRpIGlucHV0ICovXHJcbiAgICBjaGFuZ2VkKCkge1xyXG4gICAgICAgIHZhciB0b0VtaXQgPSB0aGlzLmdldE1vZGVsVG9FbWl0KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJhdXRvY29tcGxldGVcIilcclxuICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0V3JpdGVWYWx1ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuRW1pdFBlbmRpbmdDaGFuZ2VzKVxyXG4gICAgICAgICAgICBzdXBlci5jaGFuZ2VkKHRvRW1pdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIGZpbmFsaXplZCgpIHtcclxuICAgICAgICBzdXBlci5maW5hbGl6ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogTWV0b2RvIHJpY2hpYW1hdG8gcXVhbmRvIHZpZW5lIHNlbGV6aW9uYXRvIGlsIGNhbXBvIGNvbCBtb3VzZSAqL1xyXG4gICAgZm9jdXNlZChldmVudDogYW55KSB7XHJcbiAgICAgICAgc3VwZXIuZm9jdXNlZChldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEVmZmV0dHVhIGdsaSBhZ2dpdXN0YW1lbnRpIGRhdGkgZGVsIGNhc28gZWQgZW1ldHRlIGlsIG1vZGVsbG8gY29ycmV0dG8gKi9cclxuICAgIHByaXZhdGUgZ2V0TW9kZWxUb0VtaXQoKSB7XHJcbiAgICAgICAgdmFyIHRvRW1pdCA9IHRoaXMuTW9kZWwgP1xyXG4gICAgICAgICAgICAodGhpcy5UeXBlID09IFwidGltZVwiIHx8IHRoaXMudXNlSnNEYXRlcyA/XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVBZGFwdGVyLmNsb25lKHRoaXMuZGF0ZXNFeHRzLmdldERhdGVDb252ZXJ0aW9uKHRoaXMuTW9kZWwpKVxyXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuTW9kZWwpKSlcclxuICAgICAgICAgICAgOiBudWxsO1xyXG5cclxuICAgICAgICBpZiAoKHRoaXMuVHlwZSA9PSBcImZsb2F0XCIgfHwgdGhpcy5UeXBlID09IFwibnVtYmVyXCIpICYmIHRvRW1pdClcclxuICAgICAgICAgICAgdG9FbWl0ID0gdG9FbWl0LnJlcGxhY2UoXCIuXCIsIFwiXCIpLnJlcGxhY2UoXCIsXCIsIFwiLlwiKTtcclxuXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwiYm9vbGVhblwiKVxyXG4gICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuVHlwZSA9PSBcInRpbWVcIilcclxuICAgICAgICAgICAgdG9FbWl0ID0gdG9FbWl0LmZvcm1hdChcIkhIOm1tOnNzXCIpO1xyXG5cclxuICAgICAgICBlbHNlIGlmKCh0aGlzLlR5cGUgPT0gXCJkYXRlXCIgfHwgdGhpcy5UeXBlID09IFwiZGF0ZXRpbWVcIikgJiYgdGhpcy51c2VKc0RhdGVzKVxyXG4gICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQudG9EYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0b0VtaXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgcGVyIGdlc3RpcmUgbGEgbW9kaWZpY2EgZGVsIGZpbGUgYXR0dWFsbWVudGUgYmluZGF0by4gT3Z2aWFtZW50ZSBmdW56aW9uYSBzb2xvIHF1YWxvcmEgaWwgKipUeXBlKiogZm9zc2UgKipmaWxlKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBjbGVhciBJbmRpY2Egc2UgYmlzb2duYSBzdnVvdGFyZSBsJ2lucHV0IG8gbWVubyBcclxuICAgICAqL1xyXG4gICAgZmlsZUNoYW5nZShjbGVhcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IGZpbGVzOiBGaWxlW10gPSBbXTtcclxuICAgICAgICBsZXQgbW9kZWwgPSAoPEFwcEZpbGU+dGhpcy5Nb2RlbCk7XHJcbiAgICAgICAgbGV0IG5lOiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmIChjbGVhcikge1xyXG4gICAgICAgICAgICBtb2RlbC5maWxlbmFtZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIG5lLnZhbHVlID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmUuZmlsZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKG5lLmZpbGVzLml0ZW0oaSkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5lLmZpbGVzLmxlbmd0aCA9PSAxKVxyXG4gICAgICAgICAgICAgICAgbW9kZWwuZmlsZW5hbWUgPSBuZS5maWxlc1swXS5uYW1lO1xyXG4gICAgICAgICAgICBpZiAobmUuZmlsZXMubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgICAgIG1vZGVsLmZpbGVuYW1lID0gbmUuZmlsZXMubGVuZ3RoICsgXCIgXCIgKyB0aGlzLmxjLmxvYyhcIkZpbGVzIFNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBtb2RlbC5uYXRpdmVmaWxlcyA9IGZpbGVzO1xyXG4gICAgICAgICAgICBtb2RlbC5maWxlYjY0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHNjYXJpY2FyZSBpbCBmaWxlIGNvbGxlZ2F0byBhbGwnZXZldG51YWxlIGZpbGUgaW5wdXQgcmFwcHJlc2VudGF0byBkYSBxdWVzdG8gY29tcG9uZW50ZSAqL1xyXG4gICAgZG93bmxvYWRBdHRhY2htZW50KCkge1xyXG4gICAgICAgIGxldCBtb2RlbCA9ICg8QXBwRmlsZT50aGlzLk1vZGVsKTtcclxuICAgICAgICB0aGlzLnV0aUV4dHMuc2F2ZUZpbGUobW9kZWwuZmlsZWI2NCwgbW9kZWwuZmlsZW5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBvbk5vdE51bGxWYWx1ZVNldCgpOiB2b2lkIHsgfVxyXG5cclxuICAgIC8vKioqKioqKioqKioqKioqKioqKiogRnVuemlvbmUgZGkgdGhyb3R0bGluZyBwZXIgbm9uIHNwYW1tYXJlIHJpY2hpZXN0ZSBpbiBjYXNvIGRpIGFuaW1hemlvbmkgYXR0aXZhdGVcclxuICAgIC8vVE9ETzogc3Bvc3RhcmxhIGluIHVuIG1ldG9kbyBkaSB1dGlsaXTDoCAoZXNmYWVuemEvZXh0ZW5zaW9ucylcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIGV4ZWN1dGlvblRpbWVyczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSB0aHJvdHRsYShpZDogc3RyaW5nLCBmdW5jOiBGdW5jdGlvbiwgdGhyb3R0bGVUaW1lOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICAvL1NlIGhvIGxhIGZ1bnppb25lIGNoZSB2dW9sZSBlc2VndWlyZSByaXB1bGlzY28gcXVlbCB0aW1lb3V0XHJcbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSlcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSk7XHJcblxyXG4gICAgICAgIC8vUmljcmVvIGlsIHRpbWVvdXQgcGVyIGVzZWd1aXJlIHF1ZWxsYSBmdW56aW9uZSBkb3BvIHRocm90dGxlVGltZSBtaWxsaXNlY29uZGlcclxuICAgICAgICB0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0gPSBzZXRUaW1lb3V0KCgpID0+IHsgZnVuYygpOyB0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0gPSBudWxsOyB9LCB0aHJvdHRsZVRpbWUpO1xyXG4gICAgfVxyXG4gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqXHJcbn0iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIUZvcm1MYXlvdXRcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiAhRGlzcGxheU1vZGVUZW1wbGF0ZVwiPnt7IEV2YWx1YXRlZE1vZGVsIH19PC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheU1vZGVUZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJEaXNwbGF5TW9kZVRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogRXZhbHVhdGVkTW9kZWwgfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiBbaGlkZGVuXT1cIkRpc3BsYXlNb2RlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRyb2xUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPjwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxkaXYgKm5nSWY9XCJGb3JtTGF5b3V0XCIgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyB7e0Zvcm1Hcm91cENsYXNzfX1cIiBbY2xhc3MuYXBwLW1hcmdpbi1ib3R0b20tMF09XCJMYXN0XCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQte3tMYWJlbENvbFdpZHRofX1cIiBbY2xhc3MuYXBwLWJvbGRdPVwiRGlzcGxheU1vZGVcIiBbY2xhc3MubS10LTVdPVwiIURpc3BsYXlNb2RlXCI+e3tMYWJlbH19e3tSZXF1aXJlZCAmJiAhRGlzcGxheU1vZGUgPyAnKicgOiAnJ319OjwvbGFiZWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheU1vZGVUZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJEaXNwbGF5TW9kZVRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogRXZhbHVhdGVkTW9kZWwgfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgW2hpZGRlbl09XCJEaXNwbGF5TW9kZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIVR5cGVcIiBjbGFzcz1cImFwcC1tYXJnaW4tdG9wLTVcIj5cclxuICAgICAgICA8ZW0+e3tUeXBlTWlzc2luZ01lc3NhZ2V9fTwvZW0+XHJcbiAgICA8L2Rpdj5cclxuICAgXHJcbiAgICAgPCEtLVNlIGN1cnJlbmN5LS0+XHJcbiAgICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgIDx2YWwtY3VycmVuY3kgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCJcclxuICAgICAgICBbQ3VycmVuY3lPcHRpb25zXT1cInsgcHJlZml4OiAnJywgdGhvdXNhbmRzOiAnLicsIGRlY2ltYWw6ICcsJywgcHJlY2lzaW9uOiBQcmVjaXNpb24sIGFsaWduOiBBbGlnbm1lbnQgfVwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCJcclxuICAgICAgICB0eXBlPVwidGV4dFwiIFtyZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtY3VycmVuY3k+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBkYXRhLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnZGF0ZSdcIj5cclxuICAgICAgICA8dmFsLWRhdGUgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbcmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIFt1c2VKc0RhdGVzXT1cInVzZUpzRGF0ZXNcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIj48L3ZhbC1kYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2Ugc3RyaW5nYS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ3N0cmluZydcIj5cclxuICAgICAgICA8dmFsLWlucHV0ICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW3JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiB0eXBlPVwidGV4dFwiIHBhdHRlcm49XCJ7e1BhdHRlcm4gfHwgJyd9fVwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWlucHV0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgbnVtZXJvLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnZmxvYXQnIHx8IFR5cGUgPT0gJ251bWJlcidcIj5cclxuICAgICAgICA8dmFsLWlucHV0ICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW3JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiB0eXBlPVwidGV4dFwiIHBhdHRlcm49XCJ7e1BhdHRlcm4gfHwgJ14oWzAtOV0qWyxdKT9bMC05XSskJ319XCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtaW5wdXQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBudW1lcm8gaW50ZXJvLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnaW50J1wiPlxyXG4gICAgICAgIDx2YWwtaW5wdXQgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbcmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIHR5cGU9XCJ0ZXh0XCIgcGF0dGVybj1cInt7UGF0dGVybiB8fCAnXlswLTldXFxcXGQqJCd9fVwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWlucHV0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgYm9vbGVhbi0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm0tdC01XCIgKm5nSWY9XCJUeXBlID09ICdib29sZWFuJ1wiPlxyXG4gICAgICAgIDxpbnB1dCAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW3JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJhcHAtcG9pbnRlclwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBpZD1cInt7R2VuZXJhdGVkTmFtZX19XCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlZCgpOyBmaW5hbGl6ZWQoKTtcIiAoY2xpY2spPVwiZm9jdXNlZCgkZXZlbnQpO1wiIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBlbnVtLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnZW51bSdcIj5cclxuICAgICAgICA8dmFsLXNlbGVjdCAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiIFtyZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgW3BsYWNlSG9sZGVyVmFsdWVdPVwiJydcIiBbcGxhY2Vob2xkZXJdPVwiUmVxdWlyZWQgPyAoJ1NlbGVjdCcgfCBsb2NhbGl6ZSA6IGxjKSArICcuLi4nIDogUGxhY2Vob2xkZXJcIiBbcmVxdWlyZWRdPVwiUmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCIgW2lkXT1cIkdlbmVyYXRlZE5hbWVcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIj5cclxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsIG9mIEJvdW5kU291cmNlXCIgW3ZhbHVlXT1cInZhbC5pZFwiPnt7dmFsLmRlc2NyaXB0aW9ufX08L29wdGlvbj5cclxuICAgICAgICA8L3ZhbC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBhdXRvY29tcGxldGUtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICdhdXRvY29tcGxldGUnXCI+XHJcbiAgICAgICAgPHZhbC1hdXRvY29tcGxldGUgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbcmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFtwbGFjZWhvbGRlcl09XCJSZXF1aXJlZCA/ICgnU2VsZWN0JyB8IGxvY2FsaXplIDogbGMpICsgJy4uLicgOiBQbGFjZWhvbGRlclwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIFtGaWx0ZXJlZFNvdXJjZV09XCJGaWx0ZXJlZEJvdW5kU291cmNlXCIgKGlucHV0Q2hhbmdlKT1cImZpbHRlclNvdXJjZSgkZXZlbnQpOyBjaGFuZ2VkKCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWF1dG9jb21wbGV0ZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIGRhdGUgdGltZS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2RhdGV0aW1lJ1wiPlxyXG4gICAgICAgIDx2YWwtZGF0ZXRpbWUgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbcmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFt1c2VKc0RhdGVzXT1cInVzZUpzRGF0ZXNcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2lkXT1cIkdlbmVyYXRlZE5hbWVcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIj48L3ZhbC1kYXRldGltZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIHRpbWUtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICd0aW1lJ1wiPlxyXG4gICAgICAgIDxuZ3gtbWF0LXRpbWVwaWNrZXIgbmFtZT1cInZhbC10aW1lXCIgI2VsZW1lbnRSZWYgI2Jhc2VJbnB1dD1cIm5nTW9kZWxcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2Rpc2FibGVkXT1cIlJlYWRvbmx5XCJcclxuICAgICAgICBbc2hvd1NwaW5uZXJzXT1cImZhbHNlXCIgW3N0ZXBIb3VyXT1cIjJcIiBbc3RlcE1pbnV0ZV09XCI1XCIgW3N0ZXBTZWNvbmRdPVwiMzBcIlxyXG4gICAgICAgIFtzaG93U2Vjb25kc109XCJ0cnVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlZCgpXCIgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiPlxyXG4gICAgICAgIDwvbmd4LW1hdC10aW1lcGlja2VyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgZmlsZS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2ZpbGUnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGZpbGUtdXBsb2FkXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIChjaGFuZ2UpPVwiZmlsZUNoYW5nZSgpXCIgI2ZpbGVJbnB1dCBpZD1cInt7R2VuZXJhdGVkTmFtZX19XCIgY2xhc3M9XCJmaWxlLXVwbG9hZC1idG4gYXBwLXBvaW50ZXJcIiBbbXVsdGlwbGVdPVwibnVsbFwiLz5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2NsYXNzLmZybS1wYWRkaW5nLWxlZnQtMjJdPVwiQWxsb3dEb3dubG9hZCAmJiBNb2RlbEZpbGUuZmlsZW5hbWUgJiYgTW9kZWxGaWxlLmZpbGViNjRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjaGVja2luZy1maWVsZFwiIHBsYWNlaG9sZGVyPVwie3snU2VsZWN0IGEgZmlsZScgfCBsb2NhbGl6ZSA6IGxjfX0uLi5cIiBbKG5nTW9kZWwpXT1cIk1vZGVsRmlsZS5maWxlbmFtZVwiIG5hbWU9XCJkc2ZpbGVcIiAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIvPlxyXG4gICAgXHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZmEgZmEtZG93bmxvYWQgYXBwLXBvaW50ZXIgYXBwLWlucHV0LWljb25cIiAqbmdJZj1cIkFsbG93RG93bmxvYWQgJiYgTW9kZWxGaWxlLmZpbGVuYW1lICYmIE1vZGVsRmlsZS5maWxlYjY0XCIgKGNsaWNrKT1cImRvd25sb2FkQXR0YWNobWVudCgpXCI+PC9hPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzIGRlbGV0ZS1maWxlXCIgKGNsaWNrKT1cImZpbGVDaGFuZ2UodHJ1ZSlcIiAqbmdJZj1cIk1vZGVsRmlsZS5maWxlbmFtZVwiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWZpbGUtdXBsb2FkXCIgdHlwZT1cImJ1dHRvblwiPjxpIGNsYXNzPVwiZmEgZmEtdXBsb2FkXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hZGFwdGl2ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWFkYXB0aXZlL2Zvcm0tYWRhcHRpdmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1hZGFwdGl2ZS9mb3JtLWFkYXB0aXZlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSixPQUFPLEVBQXdCLGFBQWEsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBRWhGLHNCQUFzQjtBQUN0QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUs5RCxlQUFlO0FBQ2YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXpFLFVBQVU7QUFDVixPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBVS9DLDJKQUEySjtBQVEzSixNQUFNLE9BQU8scUJBQXNCLFNBQVEsZUFBZTtJQWtEdEQsMkJBQTJCO0lBQzNCLFlBQVksR0FBc0IsRUFBVSxPQUF1QixFQUFVLFNBQXNCLEVBQVUsV0FBbUMsRUFBUyxFQUF1QixFQUFzQixTQUFvQixFQUFxQyxXQUF1QixFQUFFLEVBQXdC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QVosS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUdxQyxPQUFPO3NCQUFqRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR2hDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsU0FBUztzQkFBakIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwsIFNlbGYsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBOZ0NvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbi8vIEVTIC8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UsIENvbXBvbmVudENvbnRleHQgfSBmcm9tICdAZXNmYWVuemEvYWNjZXNzLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyBOZ3hNYXREYXRlQWRhcHRlciB9IGZyb20gXCJAYW5ndWxhci1tYXRlcmlhbC1jb21wb25lbnRzL2RhdGV0aW1lLXBpY2tlclwiO1xyXG5cclxuLy8gQXBwbGljYXppb25lXHJcbmltcG9ydCB7IEJhc2VGb3JtQ29udHJvbCB9IGZyb20gXCIuLi9iYXNlLWZvcm0tY29udHJvbFwiO1xyXG5pbXBvcnQgeyBGb3JtQWRhcHRpdmVDb21wb25lbnRMb2MgfSBmcm9tIFwiLi9mb3JtLWFkYXB0aXZlLmNvbXBvbmVudC5sb2NcIjtcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUgfSBmcm9tICcuLi8uLi90b2tlbnMnO1xyXG5pbXBvcnQgeyBBcHBGaWxlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9BcHBGaWxlXCI7XHJcblxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbi8qKlxyXG4gKiBEaWNoaWFyYXppb25lIGRlbGxhIHZhcmlhYmlsZSBnbG9iYWxlIGRheWpzLiBMJ29uZXJlIGRpIFwiY3JlYXJsYVwiIMOoIGFmZmlkYXRvIGFsbCdhcHBsaWNhemlvbmUgY2hlIHV0aWxpenphIHF1ZXN0YSBsaWJyZXJpYSwgXHJcbiAqIGNoZSBkb3Zyw6AgaW1wb3J0YXJlIGxvIHNjcmlwdCBnbG9iYWxlIGRpIGRheWpzIG5lbGxhIENMSVxyXG4gKi9cclxuZGVjbGFyZSB2YXIgZGF5anM6IGFueTtcclxuXHJcbi8qKiBDb21wb25lbnRlIGluIGdyYWRvIGRpIGFzc3VtZXJlIGxhIGZvcm1hIGRpIHVuIHF1YWxzaWFzaSBhbHRybyBjb21wb25lbnRlIGZvcm0gaW4gYmFzZSBhbCB0aXBvIHNwZWNpZmljYXRvLiBVdGlsZSAgcGVyIGxhIGNyZWF6aW9uZSBkaSBmb3JtIGRpbmFtaWNpICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiZm9ybS1hZGFwdGl2ZVwiLFxyXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCB1c2VDbGFzczogRm9ybUFkYXB0aXZlQ29tcG9uZW50TG9jIH1dLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiZm9ybS1hZGFwdGl2ZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuLi9mb3JtLWZpbGUvZm9ybS1maWxlLmNvbXBvbmVudC5jc3NcIl0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUFkYXB0aXZlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZvcm1Db250cm9sIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIC8qKiBUaXBvbG9naWEgY2hlIGRlY2lkZSBjaGUgY29tcG9uZW50ZSBtb3N0cmFyZSAqL1xyXG4gICAgQElucHV0KCkgVHlwZTogJ3N0cmluZycgfCAnZmxvYXQnIHwgJ2RhdGUnIHwgJ251bWJlcicgfCAnaW50JyB8ICdib29sZWFuJyB8ICdlbnVtJyB8ICdhdXRvY29tcGxldGUnIHwgJ2RhdGV0aW1lJyB8ICd0aW1lJyB8ICdmaWxlJyB8ICdjdXJyZW5jeSc7XHJcblxyXG4gICAgLyoqIE1lc3NhZ2dpbyBwZXIgcXVhbmRvIHNpIGJpbmRhIHVuIGZvcm0tYWRhcHRpdmUgc2VuemEgdGlwbyAqL1xyXG4gICAgQElucHV0KCkgVHlwZU1pc3NpbmdNZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIFBhdHRlcm4gZGkgdmFsaWRhemlvbmUgKi9cclxuICAgIEBJbnB1dCgpIFBhdHRlcm46IHN0cmluZztcclxuXHJcbiAgICAvKiogUmlmZXJpbWVudG8gYWxsJ2VsZW1lbnRvIGlucHV0IGRpIHRpcG8gZmlsZSBxdWFsb3JhIGlsICoqVHlwZSoqIGRpIHF1ZXN0byBjb21wb25lbnRlIGZvc3NlICoqZmlsZSoqICovXHJcbiAgICBAVmlld0NoaWxkKFwiZmlsZUlucHV0XCIsIHsgc3RhdGljOiBmYWxzZSB9KSBpbnB1dEVsOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBzY2FyaWNhcmUgbCdldmVudHVhbGUgZmlsZSBwcmVzZW50ZSBxdWFsb3JhIGlsICoqVHlwZSoqIGRpIHF1ZXN0byBjb21wb25lbnRlIGZvc3NlICoqZmlsZSoqICovXHJcbiAgICBASW5wdXQoKSBBbGxvd0Rvd25sb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogTW9kZWxsbyB0eXBlc2NyaXB0IGRpIGJpbmQgZGVpIGZpbGUgKi9cclxuICAgIE1vZGVsRmlsZTogQXBwRmlsZTtcclxuXHJcbiAgICAvKiogVXRpbGl6emF0YSBuZWwgZm9ybS1hZGFwdGVyIHBlciBzcGVjaWZpY2FyZSBsYSBwcmVjaXNpb25lIGRlZ2xpIGlucHV0IGN1cnJlbmN5bWFwIChUeXBlOiBjdXJyZW5jeSkgKi9cclxuICAgIEBJbnB1dCgpIFByZWNpc2lvbjogbnVtYmVyID0gMjtcclxuXHJcbiAgICAvKiogQWxsaW5lYW1lbnRvIGRlbGxhIGN1cnJlbmN5IG1hc2sgKi9cclxuICAgIEBJbnB1dCgpIEFsaWdubWVudDogJ2xlZnQnIHwgJ3JpZ2h0JyA9ICdyaWdodCc7XHJcblxyXG4gICAgLyoqIEZ1bnppb25lIGRpIHJpY2VyY2EgY2hlIHZlcnLDoCBjaGlhbWF0YSBkYWwgY29tcG9uZW50ZSAqL1xyXG4gICAgQElucHV0KCkgU2VhcmNoRnVuY3Rpb246IChzZWFyY2g6IHN0cmluZywgYnlpZDogYm9vbGVhbikgPT4gT2JzZXJ2YWJsZTx7IGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfVtdPiA9IG51bGw7XHJcblxyXG4gICAgLyoqIE51bWVybyBtaW5pbW8gZGkgY2FyYXR0ZXJpIGNvbiBjdWkgY2VyY2FyZSAqL1xyXG4gICAgQElucHV0KCkgTWluQ2hhcnM6IG51bWJlciA9IDM7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSBpIGNvbnRyb2xsaSBkZXZvbm8gZXNzZXJlIGVmZmV0dHVhdGkgdGVuZW5kbyBjb250byBkZWwgQ2FzZSBvIG1lbm8uIFZhbGUgc29sbyBxdWFsb3JhIGxhICoqU291cmNlKiogZm9zc2UgZm9ybml0YSAqL1xyXG4gICAgQElucHV0KCkgQ2FzZVNlbnNpdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBWYXJpYWJpbGUgaW50ZXJuYSBjaGUgZ2VzdGlzY2Ugc2UgZWZmZXR0dWFyZSBpbCByaWFsbGluZWFtZW50byBkZWkgZGF0aSBvIG1lbm8gKi9cclxuICAgIHByaXZhdGUgYWxpZ25WYWx1ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBpZ25vcmFyZSBpbCBwcm9zc2ltbyBldmVudG8gd3JpdGVWYWx1ZSBjaGUgbm9ybWFsbWVudGUgZG92cmViYmUgcmljaGllZGVyZSBsYSBudW92YSBzb3VyY2UuIFNlcnZlIHBlciBxdWFuZG8gbCd1dGVudGUgc2VsZXppb25hIHVuIGVsZW1lbnRvOlxyXG4gICAgICogU3ViaXRvIGRvcG8gcGFydGlyZWJiZSB1biBhbHRybyBldmVudG8gbW9kZWxDaGFuZ2UgY2hlIHJpY2FyaWNoZXJlYmJlIG51b3ZhbWVudGUgbGEgc291cmNlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaWdub3JlTmV4dFdyaXRlVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogQ2FjaGUgZGVsbGEgc29yZ2VudGUgb3JpZ2luYWxlIFBPU1QgYmluZGluZywgaW4gbW9kbyBkYSBwb3RlciBmYXJlIGZpbHRyaSBpbiBsb2NhbGUgcXVhbG9yYSBsYSAqKlNlYXJjaEZ1bmN0aW9uKiogbm9uIGZvc3NlIGRlZmluaXRhIGUgbGEgKipTb3VyY2UqKiBmb3NzZSBhc3NlZ25hdGEgKi9cclxuICAgIHB1YmxpYyBGaWx0ZXJlZEJvdW5kU291cmNlOiB7IGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gICAgLyoqIFNvbG8gcGVyIGdsaSBpbnB1dCBkaSB0aXBvIFwiZGF0ZVwiLiBDYXBpc2NlIGNoZSBtb2RhbGl0w6AgdXNhcmUgcGVyIGlsIHZhbGlkYXRpb24tZGF0ZSBzb3R0b3N0YW50ZSAqL1xyXG4gICAgcHVibGljIHVzZUpzRGF0ZXM6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUgICovXHJcbiAgICBjb25zdHJ1Y3RvcihjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHV0aUV4dHM6IFV0aWxpdHlTZXJ2aWNlLCBwcml2YXRlIGRhdGVzRXh0czogRGF0ZVNlcnZpY2UsIHByaXZhdGUgZGF0ZUFkYXB0ZXI6IE5neE1hdERhdGVBZGFwdGVyPGFueT4sIHB1YmxpYyBsYzogTG9jYWxpemF0aW9uU2VydmljZSwgQE9wdGlvbmFsKCkgQFNlbGYoKSBuZ0NvbnRyb2w6IE5nQ29udHJvbCwgQE9wdGlvbmFsKCkgQEluamVjdChOR19WQUxJREFUT1JTKSBfdmFsaWRhdG9yczogQXJyYXk8YW55PiwgYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBAT3B0aW9uYWwoKSBBcHBDb250ZXh0OiBDb21wb25lbnRDb250ZXh0LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFDT19DVVNUT01LRVkpIEFDT19DVVNUT01LRVk6IHN0cmluZywgQE9wdGlvbmFsKCkgQEluamVjdChGQVZfREVCVUdfTU9ERSkgRkFWX0RFQlVHX01PREU6IGJvb2xlYW4pIHtcclxuICAgICAgICBzdXBlcihjZHIsIG5nQ29udHJvbCwgX3ZhbGlkYXRvcnMsIGFjLCBBcHBDb250ZXh0LCBBQ09fQ1VTVE9NS0VZLCBGQVZfREVCVUdfTU9ERSk7XHJcblxyXG4gICAgICAgIHRoaXMuTW9kZWxGaWxlID0gbmV3IEFwcEZpbGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBjb25zdCBuZXdTb3VyY2UgPSBjaGFuZ2VzW1wiU291cmNlXCJdO1xyXG4gICAgICAgIGNvbnN0IG5ld1R5cGUgPSBjaGFuZ2VzW1wiVHlwZVwiXTtcclxuXHJcbiAgICAgICAgaWYgKG5ld1NvdXJjZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyeUJpbmRTb3VyY2VEaXNwbGF5KCk7XHJcblxyXG4gICAgICAgICAgICAvLyBQcmltYSBhc3NlZ25hemlvbmUgc2UgY2FtYmlhIGxhIHNvdXJjZSBzb3R0byAocXVpbmRpIHNlIHZpZW5lIGJpbmRhdGEgZGlyZXR0YW1lbnRlIGRhIEhUTUwpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJhdXRvY29tcGxldGVcIiAmJiAodGhpcy5Nb2RlbD8ubGVuZ3RoIHx8IDApID49IHRoaXMuTWluQ2hhcnMgJiYgIXRoaXMuU2VhcmNoRnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSB0aGlzLkJvdW5kU291cmNlO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG5ld1R5cGUgJiYgdGhpcy5Nb2RlbClcclxuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hbGlnblZhbHVlcyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gb2JqPy50b1N0cmluZygpIHx8IFwiXCI7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5UeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuVHlwZSA9IFwic3RyaW5nXCI7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBvYmo7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5UeXBlID09IFwiZGF0ZVwiIHx8IHRoaXMuVHlwZSA9PSBcImRhdGV0aW1lXCIpIHtcclxuICAgICAgICAgICAgdGhpcy51c2VKc0RhdGVzID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBEYXRlXVwiO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5UeXBlID09IFwiZGF0ZVwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuZGF0ZXNFeHRzLmdldEZvcm1hdHRlZChvYmosIHRydWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuVHlwZSA9PSBcImRhdGV0aW1lXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5kYXRlc0V4dHMuZ2V0Rm9ybWF0dGVkKG9iaiwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgodGhpcy5UeXBlID09IFwiZmxvYXRcIiB8fCB0aGlzLlR5cGUgPT0gXCJudW1iZXJcIikgJiYgb2JqKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IG9iai50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIFwiLFwiKTtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUGVyIHNpY3VyZXp6YSByaWFsbGluZW8gaSB2YWxvcmlcclxuICAgICAgICBlbHNlIGlmICh0aGlzLlR5cGUgPT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgb2JqID0gb2JqID8gKG9iaiA9PT0gdHJ1ZSB8fCBvYmoudG9Mb3dlckNhc2UoKSA9PSBcInRydWVcIikgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5hbGlnblZhbHVlcyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLmxjLmxvYyhvYmogPyAnWWVzJyA6ICdObycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLlR5cGUgPT0gXCJ0aW1lXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzXSA9IChvYmogfHwgXCIwMDowMDowMFwiKS5zcGxpdChcIjpcIik7XHJcbiAgICAgICAgICAgIG9iaiA9IGRheWpzKCkuaG91cihwYXJzZUludChob3VycyA/PyAwKSkubWludXRlKHBhcnNlSW50KG1pbnV0ZXMgPz8gMCkpLnNlY29uZChwYXJzZUludChzZWNvbmRzID8/IDApKTtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IGAke2hvdXJzIHx8ICcwMCd9OiR7bWludXRlcyB8fCAnMDAnfToke3NlY29uZHMgfHwgJzAwJ31gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLlR5cGUgPT0gXCJmaWxlXCIpIHtcclxuICAgICAgICAgICAgb2JqID0gdGhpcy5Nb2RlbEZpbGU7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLk1vZGVsRmlsZS5maWxlbmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwiYXV0b2NvbXBsZXRlXCIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuU2VhcmNoRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2VhcmNoRnVuY3Rpb24ob2JqLCB0cnVlKS5zdWJzY3JpYmUodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Tb3VyY2UgPSB0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QmluZFNvdXJjZURpc3BsYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5maW5hbGl6ZVZhbHVlKG9iaik7IH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5maW5hbGl6ZVZhbHVlKG9iaik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5Cb3VuZFNvdXJjZSAmJiB0aGlzLkJvdW5kU291cmNlLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLkJvdW5kU291cmNlLmZpbmQodCA9PiB0LmlkID09IG9iaik/LmRlc2NyaXB0aW9uO1xyXG5cclxuICAgICAgICBzdXBlci53cml0ZVZhbHVlKG9iaik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFsaWduVmFsdWVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRvIHVuIHZhbG9yZSB2ZXJpZmljYSBzZSBwdcOyIHJlc3RpdHVpcmUgbGUgaW5mb3JtYXppb25pIHRyb3ZhdGUgaW4gKipTb3VyY2UqKiBjb24gaWQgdWd1YWxlIGEgKip2YWx1ZSoqIG8gc2UgZGV2ZSByZXN0aXR1aXJlIGlsIHZhbG9yZSBpbiBzZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVmFsb3JlIHNjcml0dG8gbmVsbCdpbnB1dCBkaSB0ZXN0b1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGZpbmFsaXplVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLlNvdXJjZS5maW5kKHQgPT4gdC5pZCA9PSB2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodmFsID8gdmFsLmlkIDogdmFsdWUpO1xyXG4gICAgICAgIHRoaXMuTW9kZWwgPSB2YWwgPyB2YWwuZGVzY3JpcHRpb24gOiB2YWx1ZTtcclxuICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Nb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50byBkaSBmaWx0cm8gZGVsbGEgc29yZ2VudGUgZGF0aSBpbiBiYXNlIGFsbCdpbnB1dCB1dGVudGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IElucHV0IHV0ZW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmlsdGVyU291cmNlKGV2ZW50OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5pZ25vcmVOZXh0V3JpdGVWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlnbm9yZU5leHRXcml0ZVZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFF1YW5kbyBmaWx0cm8gbGEgc291cmNlLCBzZSBub24gZGV2byBpZ25vcmFyZSBsJ2V2ZW50byBkZXZvIGNvbXVucXVlIGFzc2ljdXJhcm1pIGRpIGltcG9zdGFyZSBpbCB2YWxvcmUgc2VsZXppb25hdG8gYSBudWxsXHJcbiAgICAgICAgc3VwZXIuY2hhbmdlZChudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKCFldmVudCAmJiB0aGlzLk1pbkNoYXJzID09IDAgJiYgIXRoaXMuU2VhcmNoRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlID0gdGhpcy5Cb3VuZFNvdXJjZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFldmVudCB8fCBldmVudC5sZW5ndGggPCB0aGlzLk1pbkNoYXJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuU2VhcmNoRnVuY3Rpb24gJiYgKCF0aGlzLlNvdXJjZSB8fCB0aGlzLlNvdXJjZS5sZW5ndGggPT0gMCkpXHJcbiAgICAgICAgICAgIHRocm93IFwiSW1wb3NzaWJpbGUgZmlsdHJhcmUgZ2xpIGVsZW1lbnRpIHNlbnphIHVuYSBmdW56aW9uZSBkaSByaWNlcmNhIGNoZSByZXN0aXR1aXNjYSB1bmEgbGlzdGEgZGkgeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1cIjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU2VhcmNoRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy50aHJvdHRsYShcImZpbHRlcnNvdXJjZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaEZ1bmN0aW9uKGV2ZW50LCBmYWxzZSkuc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuU291cmNlID0gdDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUJpbmRTb3VyY2VEaXNwbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gcXVlc3RvIGNhc28gw6ggZ2nDoCBmaWx0cmF0YSBkYWxsYSBTZWFyY2hGdW5jdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IHRoaXMuQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWx0ZXJlZFNvdXJjZU9uRGVzY3JpcHRpb25TZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LCA0MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50aHJvdHRsYShcImZpbHRlcnNvdXJjZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbiBxdWVzdG8gY2FzbyBkZXZvIGZpbHRyYXJlIGlvIGluIG1lbW9yaWFcclxuICAgICAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IHRoaXMuQm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gKHRoaXMuQ2FzZVNlbnNpdGl2ZSAmJiB0LmRlc2NyaXB0aW9uLmluY2x1ZGVzKGV2ZW50KSkgfHwgKCF0aGlzLkNhc2VTZW5zaXRpdmUgJiYgdC5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnRvTG93ZXJDYXNlKCkpKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZpbHRlcmVkU291cmNlT25EZXNjcmlwdGlvblNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIHJlbW92ZUZpbHRlcmVkU291cmNlT25EZXNjcmlwdGlvblNlbGVjdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlLmxlbmd0aCA9PSAxICYmICh0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2VbMF0uZGVzY3JpcHRpb24gPT09IHRoaXMuTW9kZWwpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuTW9kZWwgPSB0aGlzLkJvdW5kU291cmNlWzBdLmlkO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Cb3VuZFNvdXJjZVswXS5kZXNjcmlwdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBNZXRvZG8gcmljaGlhbWF0byBxdWFuZG8gdmllbmUgbW9kaWZpY2F0byBpbCBtb2RlbGxvIGRlbCBjYW1wbyBkaSBpbnB1dCAqL1xyXG4gICAgY2hhbmdlZCgpIHtcclxuICAgICAgICB2YXIgdG9FbWl0ID0gdGhpcy5nZXRNb2RlbFRvRW1pdCgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5UeXBlID09IFwiYXV0b2NvbXBsZXRlXCIpXHJcbiAgICAgICAgICAgIHRoaXMuaWdub3JlTmV4dFdyaXRlVmFsdWUgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5FbWl0UGVuZGluZ0NoYW5nZXMpXHJcbiAgICAgICAgICAgIHN1cGVyLmNoYW5nZWQodG9FbWl0KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgZmluYWxpemVkKCkge1xyXG4gICAgICAgIHN1cGVyLmZpbmFsaXplZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBNZXRvZG8gcmljaGlhbWF0byBxdWFuZG8gdmllbmUgc2VsZXppb25hdG8gaWwgY2FtcG8gY29sIG1vdXNlICovXHJcbiAgICBmb2N1c2VkKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBzdXBlci5mb2N1c2VkKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogRWZmZXR0dWEgZ2xpIGFnZ2l1c3RhbWVudGkgZGF0aSBkZWwgY2FzbyBlZCBlbWV0dGUgaWwgbW9kZWxsbyBjb3JyZXR0byAqL1xyXG4gICAgcHJpdmF0ZSBnZXRNb2RlbFRvRW1pdCgpIHtcclxuICAgICAgICB2YXIgdG9FbWl0ID0gdGhpcy5Nb2RlbCA/XHJcbiAgICAgICAgICAgICh0aGlzLlR5cGUgPT0gXCJ0aW1lXCIgfHwgdGhpcy51c2VKc0RhdGVzID9cclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUFkYXB0ZXIuY2xvbmUodGhpcy5kYXRlc0V4dHMuZ2V0RGF0ZUNvbnZlcnRpb24odGhpcy5Nb2RlbCkpXHJcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5Nb2RlbCkpKVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5UeXBlID09IFwiZmxvYXRcIiB8fCB0aGlzLlR5cGUgPT0gXCJudW1iZXJcIikgJiYgdG9FbWl0KVxyXG4gICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQucmVwbGFjZShcIi5cIiwgXCJcIikucmVwbGFjZShcIixcIiwgXCIuXCIpO1xyXG5cclxuICAgICAgICBlbHNlIGlmICh0aGlzLlR5cGUgPT0gXCJib29sZWFuXCIpXHJcbiAgICAgICAgICAgIHRvRW1pdCA9IHRvRW1pdCA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwidGltZVwiKVxyXG4gICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQuZm9ybWF0KFwiSEg6bW06c3NcIik7XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKCh0aGlzLlR5cGUgPT0gXCJkYXRlXCIgfHwgdGhpcy5UeXBlID09IFwiZGF0ZXRpbWVcIikgJiYgdGhpcy51c2VKc0RhdGVzKVxyXG4gICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQudG9EYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0b0VtaXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgcGVyIGdlc3RpcmUgbGEgbW9kaWZpY2EgZGVsIGZpbGUgYXR0dWFsbWVudGUgYmluZGF0by4gT3Z2aWFtZW50ZSBmdW56aW9uYSBzb2xvIHF1YWxvcmEgaWwgKipUeXBlKiogZm9zc2UgKipmaWxlKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBjbGVhciBJbmRpY2Egc2UgYmlzb2duYSBzdnVvdGFyZSBsJ2lucHV0IG8gbWVubyBcclxuICAgICAqL1xyXG4gICAgZmlsZUNoYW5nZShjbGVhcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IGZpbGVzOiBGaWxlW10gPSBbXTtcclxuICAgICAgICBsZXQgbW9kZWwgPSAoPEFwcEZpbGU+dGhpcy5Nb2RlbCk7XHJcbiAgICAgICAgbGV0IG5lOiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmIChjbGVhcikge1xyXG4gICAgICAgICAgICBtb2RlbC5maWxlbmFtZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIG5lLnZhbHVlID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmUuZmlsZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKG5lLmZpbGVzLml0ZW0oaSkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5lLmZpbGVzLmxlbmd0aCA9PSAxKVxyXG4gICAgICAgICAgICAgICAgbW9kZWwuZmlsZW5hbWUgPSBuZS5maWxlc1swXS5uYW1lO1xyXG4gICAgICAgICAgICBpZiAobmUuZmlsZXMubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgICAgIG1vZGVsLmZpbGVuYW1lID0gbmUuZmlsZXMubGVuZ3RoICsgXCIgXCIgKyB0aGlzLmxjLmxvYyhcIkZpbGVzIFNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBtb2RlbC5uYXRpdmVmaWxlcyA9IGZpbGVzO1xyXG4gICAgICAgICAgICBtb2RlbC5maWxlYjY0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHNjYXJpY2FyZSBpbCBmaWxlIGNvbGxlZ2F0byBhbGwnZXZldG51YWxlIGZpbGUgaW5wdXQgcmFwcHJlc2VudGF0byBkYSBxdWVzdG8gY29tcG9uZW50ZSAqL1xyXG4gICAgZG93bmxvYWRBdHRhY2htZW50KCkge1xyXG4gICAgICAgIGxldCBtb2RlbCA9ICg8QXBwRmlsZT50aGlzLk1vZGVsKTtcclxuICAgICAgICB0aGlzLnV0aUV4dHMuc2F2ZUZpbGUobW9kZWwuZmlsZWI2NCwgbW9kZWwuZmlsZW5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBvbk5vdE51bGxWYWx1ZVNldCgpOiB2b2lkIHsgfVxyXG5cclxuICAgIC8vKioqKioqKioqKioqKioqKioqKiogRnVuemlvbmUgZGkgdGhyb3R0bGluZyBwZXIgbm9uIHNwYW1tYXJlIHJpY2hpZXN0ZSBpbiBjYXNvIGRpIGFuaW1hemlvbmkgYXR0aXZhdGVcclxuICAgIC8vVE9ETzogc3Bvc3RhcmxhIGluIHVuIG1ldG9kbyBkaSB1dGlsaXTDoCAoZXNmYWVuemEvZXh0ZW5zaW9ucylcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIGV4ZWN1dGlvblRpbWVyczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSB0aHJvdHRsYShpZDogc3RyaW5nLCBmdW5jOiBGdW5jdGlvbiwgdGhyb3R0bGVUaW1lOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICAvL1NlIGhvIGxhIGZ1bnppb25lIGNoZSB2dW9sZSBlc2VndWlyZSByaXB1bGlzY28gcXVlbCB0aW1lb3V0XHJcbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSlcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSk7XHJcblxyXG4gICAgICAgIC8vUmljcmVvIGlsIHRpbWVvdXQgcGVyIGVzZWd1aXJlIHF1ZWxsYSBmdW56aW9uZSBkb3BvIHRocm90dGxlVGltZSBtaWxsaXNlY29uZGlcclxuICAgICAgICB0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0gPSBzZXRUaW1lb3V0KCgpID0+IHsgZnVuYygpOyB0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0gPSBudWxsOyB9LCB0aHJvdHRsZVRpbWUpO1xyXG4gICAgfVxyXG4gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqXHJcbn0iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIUZvcm1MYXlvdXRcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiAhRGlzcGxheU1vZGVUZW1wbGF0ZVwiPnt7IEV2YWx1YXRlZE1vZGVsIH19PC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheU1vZGVUZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJEaXNwbGF5TW9kZVRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogRXZhbHVhdGVkTW9kZWwgfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiBbaGlkZGVuXT1cIkRpc3BsYXlNb2RlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRyb2xUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPjwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxkaXYgKm5nSWY9XCJGb3JtTGF5b3V0XCIgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyB7e0Zvcm1Hcm91cENsYXNzfX1cIiBbY2xhc3MuYXBwLW1hcmdpbi1ib3R0b20tMF09XCJMYXN0XCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQte3tMYWJlbENvbFdpZHRofX1cIiBbY2xhc3MuYXBwLWJvbGRdPVwiRGlzcGxheU1vZGVcIiBbY2xhc3MubS10LTVdPVwiIURpc3BsYXlNb2RlXCI+e3tMYWJlbH19e3tSZXF1aXJlZCAmJiAhRGlzcGxheU1vZGUgPyAnKicgOiAnJ319OjwvbGFiZWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheU1vZGVUZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJEaXNwbGF5TW9kZVRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogRXZhbHVhdGVkTW9kZWwgfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgW2hpZGRlbl09XCJEaXNwbGF5TW9kZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIVR5cGVcIiBjbGFzcz1cImFwcC1tYXJnaW4tdG9wLTVcIj5cclxuICAgICAgICA8ZW0+e3tUeXBlTWlzc2luZ01lc3NhZ2V9fTwvZW0+XHJcbiAgICA8L2Rpdj5cclxuICAgXHJcbiAgICAgPCEtLVNlIGN1cnJlbmN5LS0+XHJcbiAgICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgIDx2YWwtY3VycmVuY3kgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCJcclxuICAgICAgICBbQ3VycmVuY3lPcHRpb25zXT1cInsgcHJlZml4OiAnJywgdGhvdXNhbmRzOiAnLicsIGRlY2ltYWw6ICcsJywgcHJlY2lzaW9uOiBQcmVjaXNpb24sIGFsaWduOiBBbGlnbm1lbnQgfVwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCJcclxuICAgICAgICB0eXBlPVwidGV4dFwiIFtyZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtY3VycmVuY3k+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBkYXRhLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnZGF0ZSdcIj5cclxuICAgICAgICA8dmFsLWRhdGUgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbcmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIFt1c2VKc0RhdGVzXT1cInVzZUpzRGF0ZXNcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIj48L3ZhbC1kYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2Ugc3RyaW5nYS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ3N0cmluZydcIj5cclxuICAgICAgICA8dmFsLWlucHV0ICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW3JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiB0eXBlPVwidGV4dFwiIHBhdHRlcm49XCJ7e1BhdHRlcm4gfHwgJyd9fVwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWlucHV0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgbnVtZXJvLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnZmxvYXQnIHx8IFR5cGUgPT0gJ251bWJlcidcIj5cclxuICAgICAgICA8dmFsLWlucHV0ICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW3JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiB0eXBlPVwidGV4dFwiIHBhdHRlcm49XCJ7e1BhdHRlcm4gfHwgJ14oWzAtOV0qWyxdKT9bMC05XSskJ319XCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtaW5wdXQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBudW1lcm8gaW50ZXJvLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnaW50J1wiPlxyXG4gICAgICAgIDx2YWwtaW5wdXQgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbcmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIHR5cGU9XCJ0ZXh0XCIgcGF0dGVybj1cInt7UGF0dGVybiB8fCAnXlswLTldXFxcXGQqJCd9fVwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWlucHV0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgYm9vbGVhbi0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm0tdC01XCIgKm5nSWY9XCJUeXBlID09ICdib29sZWFuJ1wiPlxyXG4gICAgICAgIDxpbnB1dCAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW3JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJhcHAtcG9pbnRlclwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBpZD1cInt7R2VuZXJhdGVkTmFtZX19XCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlZCgpOyBmaW5hbGl6ZWQoKTtcIiAoY2xpY2spPVwiZm9jdXNlZCgkZXZlbnQpO1wiIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBlbnVtLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnZW51bSdcIj5cclxuICAgICAgICA8dmFsLXNlbGVjdCAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiIFtyZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgW3BsYWNlSG9sZGVyVmFsdWVdPVwiJydcIiBbcGxhY2Vob2xkZXJdPVwiUmVxdWlyZWQgPyAoJ1NlbGVjdCcgfCBsb2NhbGl6ZSA6IGxjKSArICcuLi4nIDogUGxhY2Vob2xkZXJcIiBbcmVxdWlyZWRdPVwiUmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCIgW2lkXT1cIkdlbmVyYXRlZE5hbWVcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIj5cclxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsIG9mIEJvdW5kU291cmNlXCIgW3ZhbHVlXT1cInZhbC5pZFwiPnt7dmFsLmRlc2NyaXB0aW9ufX08L29wdGlvbj5cclxuICAgICAgICA8L3ZhbC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBhdXRvY29tcGxldGUtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICdhdXRvY29tcGxldGUnXCI+XHJcbiAgICAgICAgPHZhbC1hdXRvY29tcGxldGUgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbcmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFtwbGFjZWhvbGRlcl09XCJSZXF1aXJlZCA/ICgnU2VsZWN0JyB8IGxvY2FsaXplIDogbGMpICsgJy4uLicgOiBQbGFjZWhvbGRlclwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIFtGaWx0ZXJlZFNvdXJjZV09XCJGaWx0ZXJlZEJvdW5kU291cmNlXCIgKGlucHV0Q2hhbmdlKT1cImZpbHRlclNvdXJjZSgkZXZlbnQpOyBjaGFuZ2VkKCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWF1dG9jb21wbGV0ZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIGRhdGUgdGltZS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2RhdGV0aW1lJ1wiPlxyXG4gICAgICAgIDx2YWwtZGF0ZXRpbWUgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbcmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFt1c2VKc0RhdGVzXT1cInVzZUpzRGF0ZXNcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2lkXT1cIkdlbmVyYXRlZE5hbWVcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIj48L3ZhbC1kYXRldGltZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIHRpbWUtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICd0aW1lJ1wiPlxyXG4gICAgICAgIDxuZ3gtbWF0LXRpbWVwaWNrZXIgbmFtZT1cInZhbC10aW1lXCIgI2VsZW1lbnRSZWYgI2Jhc2VJbnB1dD1cIm5nTW9kZWxcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2Rpc2FibGVkXT1cIlJlYWRvbmx5XCJcclxuICAgICAgICBbc2hvd1NwaW5uZXJzXT1cImZhbHNlXCIgW3N0ZXBIb3VyXT1cIjJcIiBbc3RlcE1pbnV0ZV09XCI1XCIgW3N0ZXBTZWNvbmRdPVwiMzBcIlxyXG4gICAgICAgIFtzaG93U2Vjb25kc109XCJ0cnVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlZCgpXCIgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiPlxyXG4gICAgICAgIDwvbmd4LW1hdC10aW1lcGlja2VyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgZmlsZS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2ZpbGUnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGZpbGUtdXBsb2FkXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIChjaGFuZ2UpPVwiZmlsZUNoYW5nZSgpXCIgI2ZpbGVJbnB1dCBpZD1cInt7R2VuZXJhdGVkTmFtZX19XCIgY2xhc3M9XCJmaWxlLXVwbG9hZC1idG4gYXBwLXBvaW50ZXJcIiBbbXVsdGlwbGVdPVwibnVsbFwiLz5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2NsYXNzLmZybS1wYWRkaW5nLWxlZnQtMjJdPVwiQWxsb3dEb3dubG9hZCAmJiBNb2RlbEZpbGUuZmlsZW5hbWUgJiYgTW9kZWxGaWxlLmZpbGViNjRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjaGVja2luZy1maWVsZFwiIHBsYWNlaG9sZGVyPVwie3snU2VsZWN0IGEgZmlsZScgfCBsb2NhbGl6ZSA6IGxjfX0uLi5cIiBbKG5nTW9kZWwpXT1cIk1vZGVsRmlsZS5maWxlbmFtZVwiIG5hbWU9XCJkc2ZpbGVcIiAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIvPlxyXG4gICAgXHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZmEgZmEtZG93bmxvYWQgYXBwLXBvaW50ZXIgYXBwLWlucHV0LWljb25cIiAqbmdJZj1cIkFsbG93RG93bmxvYWQgJiYgTW9kZWxGaWxlLmZpbGVuYW1lICYmIE1vZGVsRmlsZS5maWxlYjY0XCIgKGNsaWNrKT1cImRvd25sb2FkQXR0YWNobWVudCgpXCI+PC9hPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzIGRlbGV0ZS1maWxlXCIgKGNsaWNrKT1cImZpbGVDaGFuZ2UodHJ1ZSlcIiAqbmdJZj1cIk1vZGVsRmlsZS5maWxlbmFtZVwiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWZpbGUtdXBsb2FkXCIgdHlwZT1cImJ1dHRvblwiPjxpIGNsYXNzPVwiZmEgZmEtdXBsb2FkXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=