@datorama/core 22.9.2-rc.6 → 22.10.3-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/datorama-core.umd.js +14 -10
- package/bundles/datorama-core.umd.js.map +1 -1
- package/bundles/datorama-core.umd.min.js +3 -3
- package/bundles/datorama-core.umd.min.js.map +1 -1
- package/datorama-core.metadata.json +1 -1
- package/esm2015/lib/grid-v2/grid-filter/grid-filter.component.js +2 -2
- package/esm2015/lib/icon/icon.types.js +1 -1
- package/esm2015/lib/select/select.component.js +10 -9
- package/esm2015/lib/version.js +2 -2
- package/esm5/lib/grid-v2/grid-filter/grid-filter.component.js +5 -2
- package/esm5/lib/icon/icon.types.js +1 -1
- package/esm5/lib/select/select.component.js +10 -9
- package/esm5/lib/version.js +2 -2
- package/fesm2015/datorama-core.js +11 -10
- package/fesm2015/datorama-core.js.map +1 -1
- package/fesm5/datorama-core.js +14 -10
- package/fesm5/datorama-core.js.map +1 -1
- package/lib/icon/icon.types.d.ts +1 -1
- package/package.json +1 -1
|
@@ -145,7 +145,6 @@ var DatoSelectComponent = /** @class */ (function (_super) {
|
|
|
145
145
|
this.limitSelectedTo = limitSelectedTo;
|
|
146
146
|
if (this.options) {
|
|
147
147
|
this.updateDisabledState();
|
|
148
|
-
this.cdr.markForCheck();
|
|
149
148
|
}
|
|
150
149
|
},
|
|
151
150
|
enumerable: true,
|
|
@@ -375,16 +374,18 @@ var DatoSelectComponent = /** @class */ (function (_super) {
|
|
|
375
374
|
});
|
|
376
375
|
this.datoOverlay.attach({ placement: this.placement }, this._dropdownClass);
|
|
377
376
|
this.toggle();
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
377
|
+
if (this.hasValue) {
|
|
378
|
+
/**
|
|
379
|
+
* When we first open the dropdown we need to mark the
|
|
380
|
+
* FormControl values as actives
|
|
381
|
+
*/
|
|
382
|
+
if (this._initialOpen) {
|
|
383
|
+
this.markAsActive(this._model);
|
|
384
|
+
this._initialOpen = false;
|
|
385
|
+
}
|
|
384
386
|
if (this.limitSelectedTo) {
|
|
385
387
|
this.updateDisabledState();
|
|
386
388
|
}
|
|
387
|
-
this._initialOpen = false;
|
|
388
389
|
}
|
|
389
390
|
if (this._withInfiniteScroll) {
|
|
390
391
|
this.activateInfiniteScroll();
|
|
@@ -1092,4 +1093,4 @@ var DatoSelectComponent = /** @class */ (function (_super) {
|
|
|
1092
1093
|
return DatoSelectComponent;
|
|
1093
1094
|
}(BaseCustomControl));
|
|
1094
1095
|
export { DatoSelectComponent };
|
|
1095
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7QUFFSCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RFLE9BQU8sRUFBNEIsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxP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LEVBQUUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDO1lBQ3ZDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO1lBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1lBQy9DLFFBQVEsRUFBRSxZQUFZO1NBQ3ZCLENBQUM7UUFnVUcsV0FBQSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbEIsV0FBQSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDckIsV0FBQSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7eUNBTk4saUJBQWlCO1lBQ1gsb0JBQW9CO1lBQ3pCLFVBQVU7WUFDSCxXQUFXO09BOVR2QixtQkFBbUIsQ0FnNEIvQjtJQUFELDBCQUFDO0NBQUEsQUFoNEJELENBQXlDLGlCQUFpQixHQWc0QnpEO1NBaDRCWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgRGF0b3JhbWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gQXBhY2hlIExpY2Vuc2UgMi4wIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2RhdG9yYW1hL2NsaWVudC1jb3JlL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VDdXN0b21Db250cm9sIH0gZnJvbSAnLi4vY3VzdG9tLWNvbnRyb2wvYmFzZS1jdXN0b20tY29udHJvbCc7XG5pbXBvcnQgeyBkZWZhdWx0T3B0aW9uc0Rpc3BsYXlMaW1pdCwgU2VsZWN0VHlwZSB9IGZyb20gJy4vc2VsZWN0LnR5cGVzJztcbmltcG9ydCB7IERhdG9PcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9vcHRpb25zL29wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEYXRvU2VsZWN0QWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi9zZWxlY3QtYWN0aXZlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRvU2VsZWN0U2VhcmNoU3RyYXRlZ3ksIGRlZmF1bHRDbGllbnRTZWFyY2hTdHJhdGVneSB9IGZyb20gJy4vc2VhcmNoLnN0cmF0ZWd5JztcbmltcG9ydCB7IGNsb3Nlc3QsIHF1ZXJ5LCBzZXRTdHlsZSB9IGZyb20gJy4uL2ludGVybmFsL2hlbHBlcnMnO1xuaW1wb3J0IHsgRGF0b092ZXJsYXksIERhdG9UZW1wbGF0ZVBvcnRhbCB9IGZyb20gJy4uL2FuZ3VsYXIvb3ZlcmxheSc7XG5pbXBvcnQgeyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IF9zY3JvbGxUb09wdGlvbiB9IGZyb20gJy4uL29wdGlvbnMvb3B0aW9ucy11dGlscyc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IG5vcm1hbGl6ZURhdGEgfSBmcm9tICcuLi9pbnRlcm5hbC9kYXRhLW5vcm1hbGl6YXRpb24nO1xuaW1wb3J0IHsgRGF0b0FjY29yZGlvbkNvbXBvbmVudCwgRGF0b0FjY29yZGlvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vYWNjb3JkaW9uL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgRGF0b0dyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9ucy9ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vbGlzdC9saXN0LnR5cGVzJztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBpc0Fycm93VXBEb3duLCBpc0VudGVyLCBpc0VzY2FwZSB9IGZyb20gJy4uL3J4L2V2ZW50cyc7XG5pbXBvcnQgeyBjb2VyY2VBcnJheSB9IGZyb20gJ0BkYXRvcmFtYS9ha2l0YSc7XG5pbXBvcnQgeyBpc1N0cmluZywgc2l6ZSB9IGZyb20gJy4uL3V0aWxzL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgekluZGV4UGxlYXNlIH0gZnJvbSAnLi4vaW50ZXJuYWwvei1pbmRleCc7XG5pbXBvcnQgeyBpc1Rlc3RFbnYgfSBmcm9tICcuLi9pc3Rlc3QtZW52JztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vdXRpbHMvdXNlci1hZ2VudCc7XG5pbXBvcnQgeyBQb3BwZXJPcHRpb25zIH0gZnJvbSAnLi4vc2VydmljZXMvcG9wcGVyJztcbmltcG9ydCB7IHNldERpbWVuc2lvbnMgfSBmcm9tICcuLi9pbnRlcm5hbC9jdXN0b20tZGltZW5zaW9ucyc7XG5cbmNvbnN0IHZhbHVlQWNjZXNzb3IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRvU2VsZWN0Q29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdG8tc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBwcm92aWRlcnM6IFt2YWx1ZUFjY2Vzc29yLCBEYXRvT3ZlcmxheV0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBleHBvcnRBczogJ2RhdG9TZWxlY3QnXG59KVxuZXhwb3J0IGNsYXNzIERhdG9TZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ3VzdG9tQ29udHJvbFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIC8qKiBUaGUgZHJvcGRvd24gY29udGFpbmVyIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHBvcnRhbCAgKiovXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJylcbiAgZHJvcGRvd246IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqIFRoZSBvdmVybGF5IG9yaWdpbiB3aGljaCBpcyBvbmUgb2YgZGF0by10cmlnZ2VycyAqKi9cbiAgQFZpZXdDaGlsZCgnb3ZlcmxheU9yaWdpbicpXG4gIG9yaWdpbjogRWxlbWVudFJlZjtcblxuICAvKiogUXVlcnlMaXN0IG9mIGRhdG9PcHRpb25zIGNoaWxkcmVuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oRGF0b09wdGlvbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBvcHRpb25zOiBRdWVyeUxpc3Q8RGF0b09wdGlvbkNvbXBvbmVudD47XG5cbiAgLyoqIFF1ZXJ5TGlzdCBvZiBkYXRvQWNjb3JkaW9uR3JvdXBzIGNoaWxkcmVuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBEYXRvQWNjb3JkaW9uQ29tcG9uZW50KSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBhY2NvcmRpb246IFF1ZXJ5TGlzdDxEYXRvQWNjb3JkaW9uQ29tcG9uZW50PjtcblxuICAvKiogUXVlcnlMaXN0IG9mIGRhdG9Hcm91cHMgY2hpbGRyZW4gKi9cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRvR3JvdXBDb21wb25lbnQpXG4gIGdyb3VwczogUXVlcnlMaXN0PERhdG9Hcm91cENvbXBvbmVudD47XG5cbiAgLyoqIEFsbG93aW5nIGN1c3RvbSB0ZW1wbGF0ZSBieSBwYXNzaW5nICpkYXRvQWN0aXZlIGRpcmVjdGl2ZSB3aGljaCBnZXRzIHRoZSBhY3RpdmUgYXMgY29udGV4dCAqL1xuICBAQ29udGVudENoaWxkKERhdG9TZWxlY3RBY3RpdmVEaXJlY3RpdmUpXG4gIGFjdGl2ZTogRGF0b1NlbGVjdEFjdGl2ZURpcmVjdGl2ZTtcblxuICAvKiogVGhlIGtleSB0aGF0IHN0b3JlcyB0aGUgb3B0aW9uIGlkICovXG4gIEBJbnB1dCgpXG4gIGlkS2V5ID0gJ2lkJztcblxuICAvKiogVGhlIGxvb2t1cCBrZXkgZm9yIHRoZSBsYWJlbCAqL1xuICBASW5wdXQoKVxuICBsYWJlbEtleSA9ICdsYWJlbCc7XG5cbiAgLyoqIEEgcGxhY2Vob2xkZXIgZm9yIHRoZSB0cmlnZ2VyICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ2NvcmUuc2VsZWN0JztcblxuICAvKiogQSBwbGFjZWhvbGRlciBmb3IgdGhlIHNlYXJjaCAqL1xuICBASW5wdXQoKSBzZWFyY2hQbGFjZWhvbGRlciA9ICdjb3JlLnNlYXJjaCc7XG5cbiAgLyoqIEN1c3RvbSB0ZXh0IHdoZW4gd2UgZG9uJ3QgaGF2ZSByZXN1bHRzICovXG4gIEBJbnB1dCgpXG4gIHNldCBub0l0ZW1zTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25vSXRlbXNMYWJlbCA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gIH1cblxuICAvKiogSWYgZGVmaW5lZCwgaW5kaWNhdGVzIGJ5IHdoaWNoIGtleSB0aGUgZGF0YSBzaG91bGQgYmUgbm9ybWFsaXplZCAqL1xuICBASW5wdXQoKVxuICBncm91cEJ5OiBzdHJpbmc7XG5cbiAgLyoqIEFkZC9yZW1vdmVzIHNlYXJjaCBpbnB1dCAqL1xuICBASW5wdXQoKVxuICBpc0NvbWJvID0gdHJ1ZTtcblxuICAvKiogV2hldGhlciBpdCdzIGEgZ3JvdXAgKi9cbiAgQElucHV0KClcbiAgaXNHcm91cCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZWNpZGUgd2hldGhlciB0byBmaWx0ZXIgdGhlIHJlc3VsdHMgaW50ZXJuYWxseSBiYXNlZCBvbiBzZWFyY2ggcXVlcnkuXG4gICAqIFVzZWZ1bCBmb3IgYXN5bmMgZmlsdGVyaW5nLCB3aGVyZSB3ZSBzZWFyY2ggdGhyb3VnaCBtb3JlIGNvbXBsZXggZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGludGVybmFsU2VhcmNoID0gdHJ1ZTtcblxuICAvKiogRGVib3VuY2UgdGltZSB0byBlbWl0IHNlYXJjaCBxdWVyaWVzICovXG4gIEBJbnB1dCgpXG4gIGRlYm91bmNlVGltZSA9IDMwMDtcblxuICAvKiogV2hldGhlciB0byBzaG93IGxvYWRpbmcgaW5kaWNhdG9yICovXG4gIEBJbnB1dCgpXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFsbG93IHNlbGVjdCBhbGwgY2hlY2tib3ggKi9cbiAgQElucHV0KClcbiAgYWxsb3dTZWxlY3RBbGwgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0byBhbGxvdyBzZWxlY3QgYWxsIGNoaXAuIGVtcHR5IG1lYW5zIGl0J3MgZGlzYWJsZWQgKi9cbiAgQElucHV0KClcbiAgc2VsZWN0QWxsQ2hpcFR4dCA9ICcnO1xuXG4gIC8qKiBUaGUgdHlwZSBvZiB0aGUgc2VsZWN0ICovXG4gIEBJbnB1dCgpXG4gIHR5cGU6IFNlbGVjdFR5cGUgPSBTZWxlY3RUeXBlLlNJTkdMRTtcblxuICAvKiogQ2xpZW50IHNlYXJjaCBzdHJhdGVneSAqL1xuICBASW5wdXQoKVxuICBzZWFyY2hTdHJhdGVneTogRGF0b1NlbGVjdFNlYXJjaFN0cmF0ZWd5ID0gZGVmYXVsdENsaWVudFNlYXJjaFN0cmF0ZWd5O1xuXG4gIC8qKiBUaGUgZGVmYXVsdCBwb3NpdGlvbiBvZiB0aGUgZHJvcGRvd24gKi9cbiAgQElucHV0KClcbiAgcGxhY2VtZW50OiBQb3BwZXJPcHRpb25zWydwbGFjZW1lbnQnXSA9ICdib3R0b20tc3RhcnQnO1xuXG4gIEBJbnB1dCgpXG4gIGluZmluaXRlU2Nyb2xsTG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKiBMaW1pdCB0aGUgbnVtYmVyIG9mIHJlc3VsdHMgc2hvd24gKi9cbiAgQElucHV0KClcbiAgbGltaXRUbyA9IGRlZmF1bHRPcHRpb25zRGlzcGxheUxpbWl0O1xuXG4gIEBJbnB1dCgnbGltaXRTZWxlY3RlZFRvJylcbiAgc2V0IGxpbWl0U2VsZWN0ZWQobGltaXRTZWxlY3RlZFRvOiBudW1iZXIpIHtcbiAgICB0aGlzLmxpbWl0U2VsZWN0ZWRUbyA9IGxpbWl0U2VsZWN0ZWRUbztcbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBbGxvdyBzb3J0aW5nIG9mIHNlbGVjdGVkIG9wdGlvbnMgaW4gbXVsdGkgbW9kZSAqL1xuICBASW5wdXQoKVxuICBpc1NvcnRhYmxlID0gZmFsc2U7XG5cbiAgLyoqIEVsZW1lbnQgdG8gYXBwZW5kIHRoZSBvcHRpb25zIG92ZXJsYXkgdG8gKi9cbiAgQElucHV0KClcbiAgYXBwZW5kVG86IEhUTUxFbGVtZW50IHwgc3RyaW5nO1xuXG4gIC8qKiBUaGUgb3B0aW9ucyB0byBkaXNwbGF5IGluIHRoZSBkcm9wZG93biAqL1xuICBASW5wdXQoKVxuICBzZXQgZGF0YVNldChkYXRhOiBhbnlbXSkge1xuICAgIGlmICghdGhpcy5pbml0aWFsUnVuKSB7XG4gICAgICB0aGlzLl9kYXRhID0gbm9ybWFsaXplRGF0YShkYXRhLCB0aGlzLmxhYmVsS2V5LCB0aGlzLmdyb3VwQnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiogZGF0YSBub3JtYWxpemF0aW9uLCBpZiByZXF1aXJlZCwgd2lsbCBiZSBoYW5kbGVkIGJ5IG5nT25Jbml0IGluIHRoZSBpbml0aWFsIHJ1biAqL1xuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgfVxuXG4gICAgLyoqIElmIGl0J3MgYXN5bmMgdXBkYXRlcywgY3JlYXRlIG1pY3JvIHRhc2sgaW4gb3JkZXIgdG8gcmUtc3Vic2NyaWJlIHRvIGNsaWNrcyAqL1xuICAgIGlmICh0aGlzLl9kYXRhSXNEaXJ0eSkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9PcHRpb25DbGljayh0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLm1hcmtBc0FjdGl2ZSh0aGlzLl9tb2RlbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhSXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICAvKiogU2VhcmNoIGdyb3VwcyBhcyB3ZWxsIGFzIG9wdGlvbnMgKi9cbiAgQElucHV0KClcbiAgc2VhcmNoR3JvdXBMYWJlbHMgPSB0cnVlO1xuXG4gIC8qKiBBZGQgY3VzdG9tIGNsYXNzIHRvIHRoZSBzZWxlY3QgZHJvcERvd24gKi9cbiAgQElucHV0KClcbiAgZGF0b1NlbGVjdENsYXNzOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbG9hZGluZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKiBzaG93IGVtcHR5IHJlc3VsdCB0ZXh0ICovXG4gIEBJbnB1dCgpXG4gIHNob3dFbXB0eVJlc3VsdHNUZXh0ID0gdHJ1ZTtcblxuICAvKipcbiAgICoga2VlcCBmb2N1cyBpbiBpbnB1dCBhZnRlciBzZWxlY3Rpbmcgb3B0aW9uXG4gICAqL1xuICBASW5wdXQoKVxuICBrZWVwRm9jdXMgPSBmYWxzZTtcblxuICAvKiogRW1pdCBzZWFyY2ggdmFsdWUgd2hlbiBpbnRlcm5hbCBzZWFyY2ggaXMgZmFsc2UgKi9cbiAgQE91dHB1dCgpXG4gIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gW3dpdGhBY3Rpb25zXSBpcyB0cnVlIGFuZCB0aGUgdXNlciBjbGlja3Mgc2F2ZSAqL1xuICBAT3V0cHV0KClcbiAgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgZmV0Y2ggPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgbGltaXRTZWxlY3RlZFRvOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEdldHRlcnMgYW5kIFNldHRlcnNcbiAgICovXG5cbiAgZ2V0IGNvbnRhaW5zR3JvdXBzKCkge1xuICAgIHJldHVybiB0aGlzLmdyb3VwcyAmJiB0aGlzLmdyb3Vwcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlbjtcbiAgfVxuXG4gIHNldCBvcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3BlbiA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGhhc1Jlc3VsdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc1Jlc3VsdHM7XG4gIH1cblxuICBzZXQgaGFzUmVzdWx0cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hhc1Jlc3VsdHMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZWwubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzU2luZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFNlbGVjdFR5cGUuU0lOR0xFO1xuICB9XG5cbiAgZ2V0IGlzTXVsdGkoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gU2VsZWN0VHlwZS5NVUxUSTtcbiAgfVxuXG4gIGdldCBfc2hvd0VtcHR5UmVzdWx0cygpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93RW1wdHlSZXN1bHRzVGV4dCAmJiB0aGlzLl9kYXRhICYmICghdGhpcy5oYXNSZXN1bHRzIHx8ICF0aGlzLl9kYXRhLmxlbmd0aCkgJiYgIXRoaXMuaXNHcm91cDtcbiAgfVxuXG4gIGdldCBfY291bnQoKSB7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLmdldFZpc2libGVPcHRpb25zKGZhbHNlKS5sZW5ndGg7XG4gICAgY29uc3QgYWN0aXZlcyA9IHRoaXMuX21vZGVsLmxlbmd0aDtcbiAgICByZXR1cm4gYCgke2FjdGl2ZXN9LyR7dG90YWx9KWA7XG4gIH1cblxuICAvKiogV2hldGhlciBhbGwgdGhlIG9wdGlvbnMgYXJlIGNoZWNrZWQgKi9cbiAgZ2V0IF9pc0FsbENoZWNrZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKS5ldmVyeShvcHRpb24gPT4gdGhpcy5fbW9kZWwuaW5kZXhPZihvcHRpb24pID4gLTEpO1xuICB9XG5cbiAgZ2V0IHNob3dTZWxlY3RBbGxDaGlwKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGVuZ3RoICYmIHRoaXMuX21vZGVsLmxlbmd0aCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHNvbWUgdGhlIG9wdGlvbnMgYXJlIGNoZWNrZWQgKi9cbiAgZ2V0IF9pc0luZGV0ZXJtaW5hdGVseUNoZWNrZWQoKSB7XG4gICAgbGV0IHNvbWVDaGVja2VkLFxuICAgICAgc29tZU5vdENoZWNrZWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHZpc2libGVPcHRpb24gb2YgdGhpcy5nZXRWaXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICBpZiAodGhpcy5fbW9kZWwuaW5kZXhPZih2aXNpYmxlT3B0aW9uKSA+IC0xKSB7XG4gICAgICAgIHNvbWVDaGVja2VkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWVOb3RDaGVja2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzb21lQ2hlY2tlZCAmJiBzb21lTm90Q2hlY2tlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEZvcm1Db250cm9sIHdoaWNoIGxpc3RlbnMgZm9yIHNlYXJjaCB2YWx1ZSBjaGFuZ2VzICovXG4gIHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICAvKiogRXhwb3NlIHRoZSBzZWFyY2ggdGVybSBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBoaWdobGlnaHQgZGlyZWN0aXZlICovXG4gIHNlYXJjaFRlcm0gPSAnJztcblxuICAvKipcbiAgICogUHJpdmF0ZSBQcm9wZXJ0aWVzXG4gICAqL1xuICBfbm9JdGVtc0xhYmVsID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKCdjb3JlLm5vLWl0ZW1zJyk7XG5cbiAgLyoqIFN0b3JlIHRoZSBpbml0aWFsIGRhdGEgKi9cbiAgX2RhdGEgPSBbXTtcblxuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgd2UgYWxyZWFkeSBpbml0aWFsaXplZCB0aGUgZGF0YSxcbiAgICogIFRoaXMgaXMgb3B0aW1pemF0aW9uIGZvciBub24gYXN5bmMgY2FsbHMuXG4gICAqICovXG4gIF9kYXRhSXNEaXJ0eSA9IGZhbHNlO1xuXG4gIC8qKiBUcmlnZ2VycyB0aGUgZm9jdXMgb24gdGhlIGlucHV0ICovXG4gIF9mb2N1cyA9IGZhbHNlO1xuXG4gIC8qKiBTdG9yZSB0aGUgYWN0aXZlIG9wdGlvbnMgKi9cbiAgX21vZGVsID0gW107XG5cbiAgLyoqIEVuYWJsZS9kaXNhYmxlIHRoZSBzZWxlY3QtdHJpZ2dlciAqL1xuICBfZGlzYWJsZWQ7XG5cbiAgLyoqIFdoZXRlciB0aGUgZHJvcGRvd24gaXMgb3BlbiAqL1xuICBfb3BlbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHdlIGhhdmUgc2VhcmNoIHJlc3VsdHMgKi9cbiAgX2hhc1Jlc3VsdHMgPSB0cnVlO1xuXG4gIC8qKiBJbmRpY2F0aW9uIGlmIHdlIG5lZWQgdG8gc2V0IHRoZSBpbml0aWFsIGNvbnRyb2wgdmFsdWUgYXMgYWN0aXZlcyAqL1xuICBfaW5pdGlhbE9wZW4gPSB0cnVlO1xuXG4gIC8qKiBXaGV0aGVyIGdlbmVyYXRlIGNhbmNlbC9zYXZlIGZvb3RlciAqL1xuICBfd2l0aEFjdGlvbnMgPSBmYWxzZTtcblxuICBfd2l0aEluZmluaXRlU2Nyb2xsID0gZmFsc2U7XG5cbiAgLyoqIE5vdGlmeSB0aGUgbXVsdGkgdHJpZ2dlciB3aGVuIGNsaWNrIG91dHNpZGUgdG8gcmVtb3ZlIHRoZSBmb2N1cyAgKi9cbiAgX2NsaWNrT3V0c2lkZSA9IGZhbHNlO1xuXG4gIC8qKiBEcm9wZG93biBzaXplIGNsYXNzICovXG4gIF9kcm9wZG93bkNsYXNzOiBzdHJpbmdbXTtcblxuICAvKiogdHJ1ZSB1bnRpbCBuZ09uSW5pdCAqL1xuICBwcml2YXRlIGluaXRpYWxSdW4gPSB0cnVlO1xuXG4gIC8qKiBTZWFyY2ggY29udHJvbCBzdWJzY3JpcHRpb24gKi9cbiAgcHJpdmF0ZSBzZWFyY2hTdWJzY3JpcHRpb247XG5cbiAgLyoqIENsaWNrcyBvcHRpb25zIHN1YnNjcmlwdGlvbiAqL1xuICBwcml2YXRlIGNsaWNrc1N1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGtleU1hbmFnZXI6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPERhdG9PcHRpb25Db21wb25lbnQ+O1xuXG4gIHByaXZhdGUgaW5maW5pdGVTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBzY3JvbGxFdmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogRGF0b1RyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIGRhdG9PdmVybGF5OiBEYXRvT3ZlcmxheSxcbiAgICBAQXR0cmlidXRlKCduYWtlZCcpIHB1YmxpYyBfbmFrZWQsXG4gICAgQEF0dHJpYnV0ZSgnZGF0b1NpemUnKSBwdWJsaWMgc2l6ZSxcbiAgICBAQXR0cmlidXRlKCd3aWR0aCcpIHB1YmxpYyB3aWR0aDogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zaXplID0gc2l6ZSB8fCAnbWQnO1xuICAgIHRoaXMuX2Ryb3Bkb3duQ2xhc3MgPSBbYGRhdG8tc2VsZWN0LSR7dGhpcy5zaXplfWBdO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZGF0b1NlbGVjdENsYXNzKSB7XG4gICAgICB0aGlzLl9kcm9wZG93bkNsYXNzLnB1c2godGhpcy5kYXRvU2VsZWN0Q2xhc3MpO1xuICAgIH1cblxuICAgIHRoaXMuX3dpdGhBY3Rpb25zID0gdGhpcy5zYXZlLm9ic2VydmVycy5sZW5ndGggPT09IDE7XG4gICAgdGhpcy5fd2l0aEluZmluaXRlU2Nyb2xsID0gdGhpcy5mZXRjaC5vYnNlcnZlcnMubGVuZ3RoID09PSAxO1xuICAgIHRoaXMubGlzdGVuVG9TZWFyY2goKTtcbiAgICB0aGlzLl9kYXRhID0gbm9ybWFsaXplRGF0YSh0aGlzLl9kYXRhLCB0aGlzLmxhYmVsS2V5LCB0aGlzLmdyb3VwQnkpO1xuICAgIHRoaXMuaW5pdGlhbFJ1biA9IGZhbHNlO1xuICAgIC8vIGhlaWdodCBpcyBiZWluZyBjb250cm9sbGVkIGJ5IHNpemUgcHJvcGVydHlcbiAgICBzZXREaW1lbnNpb25zKHRoaXMud2lkdGgsIG51bGwsIHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0JylcbiAgbWFya1RvdWNoZWQoKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLm9uVG91Y2hlZCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSB0aGUgZHJvcGRvd25cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wucGF0Y2hWYWx1ZSgnJyk7XG4gICAgdGhpcy5kYXRvT3ZlcmxheS5kZXRhY2goKTtcbiAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIHRoaXMuX2ZvY3VzID0gZmFsc2U7XG4gICAgdGhpcy5fY2xpY2tPdXRzaWRlID0gdHJ1ZTtcbiAgICB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uICYmIHRoaXMuaW5maW5pdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uICYmIHRoaXMuc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmJsdXIuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgZHJvcGRvd24gdmlzaWJpbGl0eVxuICAgKi9cbiAgdG9nZ2xlKCkge1xuICAgIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gICAgaWYgKHRoaXMub3BlbiAmJiAodGhpcy5pc011bHRpIHx8IHRoaXMuaXNDb21ibykpIHtcbiAgICAgIHRoaXMuX2ZvY3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShhY3RpdmVPcHRpb25zOiBhbnkgfCBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuX21vZGVsID0gYWN0aXZlT3B0aW9ucyA/IGNvZXJjZUFycmF5KGFjdGl2ZU9wdGlvbnMpIDogW107XG4gICAgaWYgKHRoaXMub3B0aW9ucykge1xuICAgICAgdGhpcy5tYXJrQXNBY3RpdmUodGhpcy5fbW9kZWwsIHsgZGVzZWxlY3RBbGw6IHRydWUgfSk7XG4gICAgICB0aGlzLmxpbWl0U2VsZWN0ZWRUbyAmJiB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICB9XG4gICAgLyoqIEZvciBsYXRlciB1cGRhdGVzICovXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiB0aGUgb3ZlcmxheVxuICAgKi9cbiAgb3BlbkRyb3Bkb3duKGV2ZW50Pykge1xuICAgIC8qKiBDbG9zZSB0aGUgZHJvcGRvd24gd2hlbiB3ZSBjbGljayBvbiB0aGUgdHJpZ2dlciBhbmQgd2UgZG9uJ3QgaGF2ZSBzZWFyY2ggb3IgbXVsdGlwbGUgKi9cbiAgICBpZiAodGhpcy5vcGVuICYmICF0aGlzLmlzQ29tYm8gJiYgdGhpcy5pc1NpbmdsZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKiBEb24ndCBjbG9zZSB0aGUgZHJvcGRvd24gaWYgd2UgY2xpY2sgb24gdGhlIGlucHV0IGFuZCBpdCdzIG9wZW4gKi9cbiAgICBpZiAodGhpcy5vcGVuICYmICh0aGlzLmlzTXVsdGkgfHwgdGhpcy5pc0NvbWJvKSkge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhcmdldC5ub2RlTmFtZSAhPT0gJ0lOUFVUJykge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0b092ZXJsYXkuY3JlYXRlZCkge1xuICAgICAgdGhpcy5jcmVhdGVPdmVybGF5KCk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRvT3ZlcmxheS5iYWNrRHJvcENsaWNrJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9jbGlja091dHNpZGUgPSB0cnVlO1xuICAgICAgdGhpcy5vcGVuICYmIHRoaXMuY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGF0b092ZXJsYXkuYXR0YWNoKHsgcGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudCB9LCB0aGlzLl9kcm9wZG93bkNsYXNzKTtcblxuICAgIHRoaXMudG9nZ2xlKCk7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHdlIGZpcnN0IG9wZW4gdGhlIGRyb3Bkb3duIHdlIG5lZWQgdG8gbWFyayB0aGVcbiAgICAgKiBGb3JtQ29udHJvbCB2YWx1ZXMgYXMgYWN0aXZlc1xuICAgICAqL1xuICAgIGlmICh0aGlzLmhhc1ZhbHVlICYmIHRoaXMuX2luaXRpYWxPcGVuKSB7XG4gICAgICB0aGlzLm1hcmtBc0FjdGl2ZSh0aGlzLl9tb2RlbCk7XG4gICAgICBpZiAodGhpcy5saW1pdFNlbGVjdGVkVG8pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pbml0aWFsT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl93aXRoSW5maW5pdGVTY3JvbGwpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVJbmZpbml0ZVNjcm9sbCgpO1xuICAgIH1cblxuICAgIHNldFN0eWxlKHF1ZXJ5KCcuZGF0by1vdmVybGF5JyksICd6SW5kZXgnLCB6SW5kZXhQbGVhc2UoKSk7XG4gICAgY29uc3QgZHJvcGRvd25Db250YWluZXIgPSBxdWVyeSgnLmRhdG8tc2VsZWN0X19kcm9wZG93bi1jb250YWluZXInKTtcbiAgICBzZXRTdHlsZShkcm9wZG93bkNvbnRhaW5lciwgJ3dpZHRoJywgYCR7dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGh9cHhgKTtcblxuICAgIC8qKiBQcmV2ZW50IHNjcm9sbCB3aGlsZSB0aGUgZHJvcGRvd24gaXMgb3BlbiAqL1xuICAgIGlmIChpc1Rlc3RFbnYoKSkge1xuICAgICAgdGhpcy5zY3JvbGxFdmVudFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXZlbnROYW1lID0gaXNNb2JpbGUoKSA/ICd0b3VjaG1vdmUnIDogJ3Njcm9sbCc7XG4gICAgICBsZXQgc2Nyb2xsRXZlbnQgPSBmcm9tRXZlbnQod2luZG93LCBldmVudE5hbWUpO1xuICAgICAgaWYgKGlzTW9iaWxlKCkpIHtcbiAgICAgICAgc2Nyb2xsRXZlbnQgPSBzY3JvbGxFdmVudC5waXBlKGZpbHRlcihldmVudCA9PiAhZHJvcGRvd25Db250YWluZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uID0gc2Nyb2xsRXZlbnQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKGUgPT4gdGhpcy5jbG9zZSgpKTtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZVBlcmZlY3RTY3JvbGxCYXIoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmliZVRvT3B0aW9uQ2xpY2sodGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmtleU1hbmFnZXIgPSBuZXcgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIodGhpcy5vcHRpb25zKS53aXRoV3JhcCgpO1xuICB9XG5cbiAgY2hlY2tBbGwoY2hlY2s6IGJvb2xlYW4pIHtcbiAgICBsZXQgY2hlY2tlZCA9IGNoZWNrO1xuICAgIGlmICh0aGlzLl9pc0luZGV0ZXJtaW5hdGVseUNoZWNrZWQpIHtcbiAgICAgIGNoZWNrZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBkYXRvT3B0aW9uIG9mIHRoaXMub3B0aW9ucy50b0FycmF5KCkpIHtcbiAgICAgIGlmICghZGF0b09wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICBkYXRvT3B0aW9uLmFjdGl2ZSA9IGNoZWNrZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdmlzaWJsZU9wdGlvbnMgPSB0aGlzLmdldFZpc2libGVPcHRpb25zKCk7XG4gICAgY29uc3QgaXNBbGxWaXNpYmxlID0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoID09PSB0aGlzLm9wdGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKGlzQWxsVmlzaWJsZSkge1xuICAgICAgdGhpcy5fbW9kZWwgPSBjaGVja2VkID8gdmlzaWJsZU9wdGlvbnMgOiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB2aXNpYmxlT3B0aW9ucykge1xuICAgICAgICAgIGlmICh0aGlzLl9tb2RlbC5pbmRleE9mKG9wdGlvbikgPT09IC0xKSB7XG4gICAgICAgICAgICB0ZW1wLnB1c2gob3B0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9kZWwgPSBbLi4udGhpcy5fbW9kZWwsIC4uLnRlbXBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSB0aGlzLl9tb2RlbC5maWx0ZXIob3B0aW9uID0+IHZpc2libGVPcHRpb25zLmluZGV4T2Yob3B0aW9uKSA9PT0gLTEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fbW9kZWwpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuYXN5bmNVcGRhdGVEcm9wZG93blBvc2l0aW9uKCk7XG4gIH1cblxuICByZW9yZGVyT3B0aW9ucyhuZXdPcmRlcjogYW55W10pIHtcbiAgICB0aGlzLl9tb2RlbCA9IG5ld09yZGVyO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fbW9kZWwpO1xuICB9XG5cbiAgcmVtb3ZlT3B0aW9uKG9wdGlvbikge1xuICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuZmlsdGVyKGN1cnJlbnQgPT4gY3VycmVudFt0aGlzLmlkS2V5XSAhPT0gb3B0aW9uW3RoaXMuaWRLZXldKTtcbiAgICBjb25zdCBvcHRpb25Ub1JlbW92ZSA9IHRoaXMub3B0aW9ucy5maW5kKFxuICAgICAgZGF0b09wdGlvbiA9PiBkYXRvT3B0aW9uLm9wdGlvbiAmJiBkYXRvT3B0aW9uLm9wdGlvblt0aGlzLmlkS2V5XSA9PT0gb3B0aW9uW3RoaXMuaWRLZXldXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFRvIHByZXZlbnQgY2FzZXMgd2hlbiB0aGUgb3B0aW9ucyBhcmUgbGltaXRlZCBhbmQgZG9lc250IGluY2x1ZGUgdGhlIGFjdGl2ZSBvcHRpb24sXG4gICAgICogdGhhdCBjYW4gYmUgcmVhY2hlZCBvbmx5IGJ5IHNlcnZlciBzZWFyY2guXG4gICAgICovXG4gICAgaWYgKG9wdGlvblRvUmVtb3ZlKSB7XG4gICAgICBvcHRpb25Ub1JlbW92ZS5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmxpbWl0U2VsZWN0ZWRUbyAmJiB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcblxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fbW9kZWwpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuYXN5bmNVcGRhdGVEcm9wZG93blBvc2l0aW9uKCk7XG4gIH1cblxuICBwcmV2ZW50Qm9keVNjcm9sbChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChpc0Fycm93VXBEb3duKGV2ZW50KSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIG92ZXJsYXkgdG8gZGlzcGxheSB0aGUgc2VsZWN0IG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheSgpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZVBvcnRhbCA9IG5ldyBEYXRvVGVtcGxhdGVQb3J0YWwodGhpcy5kcm9wZG93bik7XG4gICAgbGV0IGFwcGVuZFRvRWxlbWVudDtcbiAgICBpZiAoaXNTdHJpbmcodGhpcy5hcHBlbmRUbykpIHtcbiAgICAgIGFwcGVuZFRvRWxlbWVudCA9IGNsb3Nlc3QodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuYXBwZW5kVG8gYXMgc3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kVG9FbGVtZW50ID0gdGhpcy5hcHBlbmRUbztcbiAgICB9XG5cbiAgICB0aGlzLmRhdG9PdmVybGF5LmNyZWF0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgdGVtcGxhdGVQb3J0YWwsIGFwcGVuZFRvRWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogUG9wcGVyIGRvZXNuJ3Qgc3VwcG9ydCBwZXJmZWN0LXNjcm9sbC1iYXIsIHNvIHdlIG5lZWQgdG8gZG8gaXQgbWFudWFsbHlcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlUGVyZmVjdFNjcm9sbEJhcigpIHtcbiAgICBjb25zdCBwZXJmZWN0U2Nyb2xsQmFyUGFyZW50ID0gY2xvc2VzdCh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgJy5wcycpO1xuICAgIGlmIChwZXJmZWN0U2Nyb2xsQmFyUGFyZW50KSB7XG4gICAgICBmcm9tRXZlbnQocGVyZmVjdFNjcm9sbEJhclBhcmVudCwgJ3Njcm9sbCcpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRocm90dGxlVGltZSgxMCksXG4gICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdG9PdmVybGF5LnNjaGVkdWxlVXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmlzaWJsZU9wdGlvbnMoZ2V0UmF3T3B0aW9ucyA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcihkYXRvT3B0aW9uID0+ICFkYXRvT3B0aW9uLmRpc2FibGVkKTtcbiAgICBpZiAoZ2V0UmF3T3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubWFwKGRhdG9PcHRpb24gPT4gZGF0b09wdGlvbi5vcHRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBpbml0aWFsIGNvbnRyb2wgdmFsdWUgYXMgYWN0aXZlXG4gICAqL1xuICBwcml2YXRlIG1hcmtBc0FjdGl2ZShtb2RlbDogYW55W10sIG9wdGlvbnM6IHsgZGVzZWxlY3RBbGw6IGJvb2xlYW4gfSA9IHsgZGVzZWxlY3RBbGw6IGZhbHNlIH0pIHtcbiAgICBjb25zdCBhc0FycmF5ID0gdGhpcy5vcHRpb25zLnRvQXJyYXkoKTtcbiAgICBpZiAob3B0aW9ucy5kZXNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5yZXNldEFsbCgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBtb2RlbCkge1xuICAgICAgaWYgKCFvcHRpb24pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaCA9IGFzQXJyYXkuZmluZChjdXJyZW50ID0+IGN1cnJlbnQub3B0aW9uICYmIGN1cnJlbnQub3B0aW9uW3RoaXMuaWRLZXldID09PSBvcHRpb25bdGhpcy5pZEtleV0pO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmFjdGl2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgYWxsIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgc2hvd0FsbCgpIHtcbiAgICBjb25zdCBpc0FjY29yZGlvbiA9IHRoaXMuaXNBY2NvcmRpb25Hcm91cCgpO1xuICAgIGNvbnN0IGdyb3VwQ29tcG9uZW50czogTGlzdEdyb3VwQ29tcG9uZW50W10gPSB0aGlzLmdldEdyb3VwQ29tcG9uZW50c0FycmF5KCk7XG5cbiAgICBmb3IgKGNvbnN0IGdyb3VwQ29tcG9uZW50IG9mIGdyb3VwQ29tcG9uZW50cykge1xuICAgICAgZ3JvdXBDb21wb25lbnQuX2hpZGRlbiA9IGZhbHNlO1xuXG4gICAgICAvKiBJZiB0aGlzIGFjY29yZGlvbiBncm91cCBoYXMgYmVlbiBleHBlbmRlZCBieSB0aGUgc2VhcmNoIGZ1bmN0aW9uLFxuICAgICAgICAgdGhlbiBjb2xsYXBzZSBpdCB0byB0aGUgb3JpZ2luYWwgc3RhdGVcbiAgICAgICovXG4gICAgICBpZiAoaXNBY2NvcmRpb24pIHtcbiAgICAgICAgY29uc3QgYW55R3JvdXAgPSBncm91cENvbXBvbmVudCBhcyBhbnk7XG5cbiAgICAgICAgaWYgKGFueUdyb3VwLl9fZXhwZW5kZWQpIHtcbiAgICAgICAgICBhbnlHcm91cC5fX2V4cGVuZGVkID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgYWNjb3JkaW9uR3JvdXAgPSBhbnlHcm91cCBhcyBEYXRvQWNjb3JkaW9uR3JvdXBDb21wb25lbnQ7XG4gICAgICAgICAgYWNjb3JkaW9uR3JvdXAuY29udGVudC5kaXNhYmxlQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgYWNjb3JkaW9uR3JvdXAuZXhwYW5kKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGF0b09wdGlvbiBvZiB0aGlzLm9wdGlvbnMudG9BcnJheSgpKSB7XG4gICAgICBkYXRvT3B0aW9uLmhpZGVBbmREaXNhYmxlZChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBmb3Igb3B0aW9ucyBhbmQgcmV0dXJucyBpZiB3ZSBoYXZlIHJlc3VsdFxuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hPcHRpb25zKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgaGFzUmVzdWx0ID0gZmFsc2U7XG4gICAgY29uc3QgZ3JvdXBDb21wb25lbnRzQXJyYXk6IExpc3RHcm91cENvbXBvbmVudFtdID0gdGhpcy5nZXRHcm91cENvbXBvbmVudHNBcnJheSgpO1xuICAgIGNvbnN0IGhhc0dyb3VwcyA9IGdyb3VwQ29tcG9uZW50c0FycmF5Lmxlbmd0aDtcblxuICAgIGlmIChoYXNHcm91cHMpIHtcbiAgICAgIGhhc1Jlc3VsdCA9IHRoaXMuc2VhcmNoSW5Hcm91cHMoZ3JvdXBDb21wb25lbnRzQXJyYXksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzUmVzdWx0ID0gdGhpcy5zZWFyY2hJbk9wdGlvbnModmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBoYXNSZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGZvciBtYXRjaGluZyBncm91cHMgYW5kIGNoaWxkcmVuLlxuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hJbkdyb3Vwcyhncm91cENvbXBvbmVudHNBcnJheTogTGlzdEdyb3VwQ29tcG9uZW50W10sIHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0FjY29yZGlvbiA9IHRoaXMuaXNBY2NvcmRpb25Hcm91cCgpO1xuICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLl9kYXRhLmxlbmd0aDtcbiAgICBsZXQgaGFzUmVzdWx0cyA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5fZGF0YVtpXTtcbiAgICAgIGNvbnN0IGdyb3VwS2V5ID0gdGhpcy5nZXRHcm91cEtleShncm91cCk7XG4gICAgICBjb25zdCBncm91cE1hdGNoID0gdGhpcy5zZWFyY2hHcm91cExhYmVscyAmJiB0aGlzLnNlYXJjaFN0cmF0ZWd5KGdyb3VwLCB2YWx1ZSwgdGhpcy5sYWJlbEtleSk7XG4gICAgICBjb25zdCBncm91cE9wdGlvbnMgPSBncm91cC5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gY2hpbGRbdGhpcy5pZEtleV0pO1xuICAgICAgLyogc2hvdy9oaWRlIHRoZSBvcHRpb25zICovXG4gICAgICBjb25zdCBzaG93R3JvdXAgPSB0aGlzLnNlYXJjaEluT3B0aW9ucyh2YWx1ZSwgZ3JvdXBPcHRpb25zLCBncm91cE1hdGNoKTtcblxuICAgICAgaWYgKHNob3dHcm91cCAmJiAhaGFzUmVzdWx0cykge1xuICAgICAgICBoYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLyogRmluZCB0aGUgcmlnaHQgY29tcG9uZW50LCBhY2NvcmRpbmcgdG8gdGhlIGludGVybmFsIGtleSBhc3NpZ25lZCBpbiB0aGUgcHJldmlvdXMgc2VhcmNoLlxuICAgICAgICAgV2hlbiBubyBtYXRjaCBpcyBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHRoZSBzYW1lIGluZGV4IGFzIHRoZSBncm91cCBvcHRpb24uXG4gICAgICAqICBUaGUgaW5kZXggaXMgY29uc2lkZXJlZCBsZXNzIHNhZmUsIGJlY2F1c2UgaXQgY2FuIGNoYW5nZSBhZnRlciBzb3J0aW5nLiAqL1xuICAgICAgY29uc3QgZ3JvdXBDb21wb25lbnQgPSBncm91cENvbXBvbmVudHNBcnJheS5maW5kKChnOiBhbnkpID0+IGcuX19rZXkgPT09IGdyb3VwS2V5KSB8fCBncm91cENvbXBvbmVudHNBcnJheVtpXTtcbiAgICAgIC8qIFNob3cvaGlkZSB0aGUgZ3JvdXAgKi9cbiAgICAgIGlmIChncm91cENvbXBvbmVudCkge1xuICAgICAgICBncm91cENvbXBvbmVudC5faGlkZGVuID0gIXNob3dHcm91cDtcbiAgICAgICAgLyogYXNzaWduIGFuIGludGVybmFsIGtleSB0byB0aGUgY29tcG9uZW50IGluc3RhbmNlLCBzbyB3ZSBjYW4gZmluZCBpdCBsYXRlciAoYWJvdmUpLiAqL1xuICAgICAgICAoZ3JvdXBDb21wb25lbnQgYXMgYW55KS5fX2tleSA9IGdyb3VwS2V5O1xuICAgICAgICAvKiBFeHBhbmQgdGhlIGFjY29yZGlvbiBvbiBtYXRjaGluZyByZXN1bHRzICovXG4gICAgICAgIGlmIChpc0FjY29yZGlvbiAmJiBzaG93R3JvdXApIHtcbiAgICAgICAgICBjb25zdCBhY2NvcmRpb25Hcm91cCA9IGdyb3VwQ29tcG9uZW50IGFzIERhdG9BY2NvcmRpb25Hcm91cENvbXBvbmVudDtcblxuICAgICAgICAgIGlmICghYWNjb3JkaW9uR3JvdXAuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIGFjY29yZGlvbkdyb3VwLmNvbnRlbnQuZGlzYWJsZUFuaW1hdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAvKiBFeHBhbmQgdGhlIGFjY29yZGlvbiAqL1xuICAgICAgICAgICAgYWNjb3JkaW9uR3JvdXAuZXhwYW5kKHRydWUpO1xuICAgICAgICAgICAgLyogTWFyayB0aGUgYWNjb3JkaW9uIGFzIGV4cGFuZGVkLCBzbyB3ZSBjYW4gcmV0dXJuIHRvIHRoZSBkZWZhdWx0IHN0YXRlIGxhdGVyICovXG4gICAgICAgICAgICAoZ3JvdXBDb21wb25lbnQgYXMgYW55KS5fX2V4cGVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGFzUmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggdGhlIG9wdGlvbnMgdG8gc2hvdyBvciBoaWRlIGVhY2ggYW5kIHJldHVybiBpZiByZXN1bHQgaGFzIGJlZW4gZm91bmQuXG4gICAqIENvbnNpZGVyIHdlIGhhdmUgYSBncm91cCB0aGF0IG1hdGNoIHdlIHNob3cgYWxsIG9mIGl0cyBvcHRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hJbk9wdGlvbnModmFsdWU6IHN0cmluZywgZ3JvdXBPcHRpb25zID0gW10sIGdyb3VwTWF0Y2ggPSBmYWxzZSkge1xuICAgIGxldCBoYXNSZXN1bHRzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgY29uc3Qgb3B0aW9uSW5Hcm91cCA9IGdyb3VwT3B0aW9ucy5pbmRleE9mKGRhdG9PcHRpb24ub3B0aW9uICYmIGRhdG9PcHRpb24ub3B0aW9uW3RoaXMuaWRLZXldKSAhPT0gLTE7XG5cbiAgICAgIGlmIChncm91cE1hdGNoICYmIG9wdGlvbkluR3JvdXApIHtcbiAgICAgICAgZGF0b09wdGlvbi5oaWRlQW5kRGlzYWJsZWQoZmFsc2UpO1xuICAgICAgICBoYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoIXNpemUoZ3JvdXBPcHRpb25zKSB8fCBvcHRpb25Jbkdyb3VwKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5zZWFyY2hTdHJhdGVneShkYXRvT3B0aW9uLCB2YWx1ZSwgdGhpcy5sYWJlbEtleSk7XG5cbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgIGRhdG9PcHRpb24uaGlkZUFuZERpc2FibGVkKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdG9PcHRpb24uaGlkZUFuZERpc2FibGVkKGZhbHNlKTtcbiAgICAgICAgICBoYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNSZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUga2V5IG9mIHRoZSBvcHRpb24gZ3JvdXAuIEl0IGNhbiBiZSB0aGUgZ3JvdXAgSWQgaWYgZXhpc3RzLCBvciB0aGUgbGFiZWwuXG4gICAqL1xuICBwcml2YXRlIGdldEdyb3VwS2V5KG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24gJiYgKG9wdGlvblt0aGlzLmlkS2V5XSB8fCBvcHRpb25bdGhpcy5sYWJlbEtleV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VtcHR5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBzZWFyY2ggY2hhbmdlcyBhbmQgZmlsdGVyIHRoZSBsaXN0XG4gICAqL1xuICBwcml2YXRlIGxpc3RlblRvU2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID1cbiAgICAgIHRoaXMuaXNDb21ibyAmJlxuICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmludGVybmFsU2VhcmNoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0FsbCgpO1xuICAgICAgICAgICAgdGhpcy5oYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYXNSZXN1bHRzID0gdGhpcy5zZWFyY2hPcHRpb25zKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWFyY2guZW1pdCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaFRlcm0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBvcHRpb24gY2xpY2sgYW5kIGNoYW5nZSB0aGUgc3RhdGUgYWNjb3JkaW5nbHlcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9PcHRpb25DbGljayhvcHRpb25zOiBRdWVyeUxpc3Q8RGF0b09wdGlvbkNvbXBvbmVudD4pIHtcbiAgICB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbiAmJiB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgLyoqIEdhdGhlciBhbGwgdGhlIGNsaWNrcyAqL1xuICAgIGNvbnN0IGNsaWNrcyQgPSBvcHRpb25zLm1hcChvcHRpb24gPT5cbiAgICAgIG9wdGlvbi5jbGljayQucGlwZShcbiAgICAgICAgbWFwKChldmVudDogRXZlbnQpID0+ICh7XG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgb3B0aW9uXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvKiogQ29uc2lkZXIgY2hhbmdlIGl0IHRvIHVzZSBldmVudCBkZWxlZ2F0aW9uICovXG4gICAgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24gPSBtZXJnZSguLi5jbGlja3MkKS5zdWJzY3JpYmUoKHsgb3B0aW9uLCBldmVudCB9KSA9PiB7XG4gICAgICBpZiAob3B0aW9uLmRpc2FibGVkKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5pc1NpbmdsZSA/IHRoaXMuaGFuZGxlU2luZ2xlQ2xpY2sob3B0aW9uKSA6IHRoaXMuaGFuZGxlTXVsdGlDbGljayhvcHRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGlzRXNjYXBlKGV2ZW50KSAmJiB0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IHRydWU7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAga2V5dXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoaXNFbnRlcihldmVudCkpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDtcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMub3B0aW9ucy50b0FycmF5KClbaW5kZXhdO1xuICAgICAgdGhpcy5pc1NpbmdsZSA/IHRoaXMuaGFuZGxlU2luZ2xlQ2xpY2soYWN0aXZlKSA6IHRoaXMuaGFuZGxlTXVsdGlDbGljayhhY3RpdmUpO1xuICAgIH1cblxuICAgIGlmIChpc0Fycm93VXBEb3duKGV2ZW50KSkge1xuICAgICAgdGhpcy5rZXlNYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kYXRvLXNlbGVjdF9fZHJvcGRvd24nKTtcbiAgICAgIF9zY3JvbGxUb09wdGlvbih7XG4gICAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleDogdGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCxcbiAgICAgICAgZ3JvdXBzOiB0aGlzLmdyb3VwcyxcbiAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNFc2NhcGUoZXZlbnQpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEFsbCgpIHtcbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgZGF0b09wdGlvbi5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNpbmdsZUNsaWNrKGRhdG9PcHRpb246IERhdG9PcHRpb25Db21wb25lbnQpIHtcbiAgICBpZiAoIWRhdG9PcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRhdG9PcHRpb24uYWN0aXZlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXRBbGwoKTtcbiAgICAgIGRhdG9PcHRpb24uYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByYXdPcHRpb24gPSBkYXRvT3B0aW9uLm9wdGlvbjtcbiAgICB0aGlzLl9tb2RlbCA9IFtyYXdPcHRpb25dO1xuICAgIHRoaXMub25DaGFuZ2UocmF3T3B0aW9uKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU11bHRpQ2xpY2soZGF0b09wdGlvbjogRGF0b09wdGlvbkNvbXBvbmVudCkge1xuICAgIGlmICghZGF0b09wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdG9PcHRpb24uYWN0aXZlID0gIWRhdG9PcHRpb24uYWN0aXZlO1xuICAgIGNvbnN0IHJhd09wdGlvbiA9IGRhdG9PcHRpb24ub3B0aW9uO1xuICAgIGlmIChkYXRvT3B0aW9uLmFjdGl2ZSkge1xuICAgICAgdGhpcy5fbW9kZWwgPSB0aGlzLl9tb2RlbC5jb25jYXQocmF3T3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW9kZWwgPSB0aGlzLl9tb2RlbC5maWx0ZXIoY3VycmVudCA9PiBjdXJyZW50W3RoaXMuaWRLZXldICE9PSByYXdPcHRpb25bdGhpcy5pZEtleV0pO1xuICAgIH1cbiAgICB0aGlzLmxpbWl0U2VsZWN0ZWRUbyAmJiB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX21vZGVsKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmFzeW5jVXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmF0ZUluZmluaXRlU2Nyb2xsKCkge1xuICAgIHRoaXMuaW5maW5pdGVTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRhdG8tc2VsZWN0X19kcm9wZG93bicpLCAnc2Nyb2xsJylcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MCkpXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZGF0by1zZWxlY3RfX2Ryb3Bkb3duJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHNjcm9sbFkgPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gY29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gaGVpZ2h0IC0gc2Nyb2xsWTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gMCB8fCBvZmZzZXQgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmZldGNoLmVtaXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24gJiYgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbiAmJiB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5maW5pdGVTdWJzY3JpcHRpb24gJiYgdGhpcy5pbmZpbml0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZGF0b092ZXJsYXkuYXR0YWNoZWQgJiYgdGhpcy5kYXRvT3ZlcmxheS5kZXN0cm95KCk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ3JvdXAgY29tcG9uZW50IGlzIEFjY29yZGlvblxuICAgKi9cbiAgcHJpdmF0ZSBpc0FjY29yZGlvbkdyb3VwKCkge1xuICAgIHJldHVybiB0aGlzLmFjY29yZGlvbiAmJiB0aGlzLmFjY29yZGlvbi5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYW4gYXJyYXkgb2YgdGhlIGdyb3VwIGNvbXBvbmVudHNcbiAgICovXG4gIHByaXZhdGUgZ2V0R3JvdXBDb21wb25lbnRzQXJyYXkoKTogTGlzdEdyb3VwQ29tcG9uZW50W10ge1xuICAgIHJldHVybiB0aGlzLmlzQWNjb3JkaW9uR3JvdXAoKSA/IHRoaXMuYWNjb3JkaW9uLmZpcnN0Lmdyb3Vwcy50b0FycmF5KCkgOiB0aGlzLmdyb3VwcyAmJiB0aGlzLmdyb3Vwcy50b0FycmF5KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURpc2FibGVkU3RhdGUoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLl9tb2RlbC5sZW5ndGggPT09IHRoaXMubGltaXRTZWxlY3RlZFRvO1xuICAgIGZvciAoY29uc3QgZGF0b09wdGlvbiBvZiB0aGlzLm9wdGlvbnMudG9BcnJheSgpKSB7XG4gICAgICBpZiAoIWRhdG9PcHRpb24uYWN0aXZlKSB7XG4gICAgICAgIGRhdG9PcHRpb24uZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgdGhlIG92ZXJsYXkgd2lsbCBiZSB1cGRhdGUgQUZURVIgQ2hhbmdlIERldGVjdGlvbiB3YXMgZG9uZVxuICAvLyBTbyB0aGUgaXRlbXMgaW4gdGhlIGlucHV0IChhbmQgaXRzIGhlaWdodCkgaXMgdXBkYXRlXG4gIHByaXZhdGUgYXN5bmNVcGRhdGVEcm9wZG93blBvc2l0aW9uKCkge1xuICAgIGlmICh0aGlzLmRhdG9PdmVybGF5ICYmIHRoaXMuZGF0b092ZXJsYXkuYXR0YWNoZWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kYXRvT3ZlcmxheS5zY2hlZHVsZVVwZGF0ZSgpLCAwKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
1096
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7QUFFSCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RFLE9BQU8sRUFBNEIsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxP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VyxDQUFDO1lBQ3ZDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO1lBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1lBQy9DLFFBQVEsRUFBRSxZQUFZO1NBQ3ZCLENBQUM7UUErVEcsV0FBQSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbEIsV0FBQSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDckIsV0FBQSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7eUNBTk4saUJBQWlCO1lBQ1gsb0JBQW9CO1lBQ3pCLFVBQVU7WUFDSCxXQUFXO09BN1R2QixtQkFBbUIsQ0FrNEIvQjtJQUFELDBCQUFDO0NBQUEsQUFsNEJELENBQXlDLGlCQUFpQixHQWs0QnpEO1NBbDRCWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgRGF0b3JhbWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gQXBhY2hlIExpY2Vuc2UgMi4wIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2RhdG9yYW1hL2NsaWVudC1jb3JlL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VDdXN0b21Db250cm9sIH0gZnJvbSAnLi4vY3VzdG9tLWNvbnRyb2wvYmFzZS1jdXN0b20tY29udHJvbCc7XG5pbXBvcnQgeyBkZWZhdWx0T3B0aW9uc0Rpc3BsYXlMaW1pdCwgU2VsZWN0VHlwZSB9IGZyb20gJy4vc2VsZWN0LnR5cGVzJztcbmltcG9ydCB7IERhdG9PcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9vcHRpb25zL29wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEYXRvU2VsZWN0QWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi9zZWxlY3QtYWN0aXZlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRvU2VsZWN0U2VhcmNoU3RyYXRlZ3ksIGRlZmF1bHRDbGllbnRTZWFyY2hTdHJhdGVneSB9IGZyb20gJy4vc2VhcmNoLnN0cmF0ZWd5JztcbmltcG9ydCB7IGNsb3Nlc3QsIHF1ZXJ5LCBzZXRTdHlsZSB9IGZyb20gJy4uL2ludGVybmFsL2hlbHBlcnMnO1xuaW1wb3J0IHsgRGF0b092ZXJsYXksIERhdG9UZW1wbGF0ZVBvcnRhbCB9IGZyb20gJy4uL2FuZ3VsYXIvb3ZlcmxheSc7XG5pbXBvcnQgeyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IF9zY3JvbGxUb09wdGlvbiB9IGZyb20gJy4uL29wdGlvbnMvb3B0aW9ucy11dGlscyc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IG5vcm1hbGl6ZURhdGEgfSBmcm9tICcuLi9pbnRlcm5hbC9kYXRhLW5vcm1hbGl6YXRpb24nO1xuaW1wb3J0IHsgRGF0b0FjY29yZGlvbkNvbXBvbmVudCwgRGF0b0FjY29yZGlvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vYWNjb3JkaW9uL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgRGF0b0dyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9ucy9ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vbGlzdC9saXN0LnR5cGVzJztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBpc0Fycm93VXBEb3duLCBpc0VudGVyLCBpc0VzY2FwZSB9IGZyb20gJy4uL3J4L2V2ZW50cyc7XG5pbXBvcnQgeyBjb2VyY2VBcnJheSB9IGZyb20gJ0BkYXRvcmFtYS9ha2l0YSc7XG5pbXBvcnQgeyBpc1N0cmluZywgc2l6ZSB9IGZyb20gJy4uL3V0aWxzL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgekluZGV4UGxlYXNlIH0gZnJvbSAnLi4vaW50ZXJuYWwvei1pbmRleCc7XG5pbXBvcnQgeyBpc1Rlc3RFbnYgfSBmcm9tICcuLi9pc3Rlc3QtZW52JztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vdXRpbHMvdXNlci1hZ2VudCc7XG5pbXBvcnQgeyBQb3BwZXJPcHRpb25zIH0gZnJvbSAnLi4vc2VydmljZXMvcG9wcGVyJztcbmltcG9ydCB7IHNldERpbWVuc2lvbnMgfSBmcm9tICcuLi9pbnRlcm5hbC9jdXN0b20tZGltZW5zaW9ucyc7XG5cbmNvbnN0IHZhbHVlQWNjZXNzb3IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRvU2VsZWN0Q29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdG8tc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBwcm92aWRlcnM6IFt2YWx1ZUFjY2Vzc29yLCBEYXRvT3ZlcmxheV0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBleHBvcnRBczogJ2RhdG9TZWxlY3QnXG59KVxuZXhwb3J0IGNsYXNzIERhdG9TZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ3VzdG9tQ29udHJvbFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIC8qKiBUaGUgZHJvcGRvd24gY29udGFpbmVyIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHBvcnRhbCAgKiovXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJylcbiAgZHJvcGRvd246IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqIFRoZSBvdmVybGF5IG9yaWdpbiB3aGljaCBpcyBvbmUgb2YgZGF0by10cmlnZ2VycyAqKi9cbiAgQFZpZXdDaGlsZCgnb3ZlcmxheU9yaWdpbicpXG4gIG9yaWdpbjogRWxlbWVudFJlZjtcblxuICAvKiogUXVlcnlMaXN0IG9mIGRhdG9PcHRpb25zIGNoaWxkcmVuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oRGF0b09wdGlvbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBvcHRpb25zOiBRdWVyeUxpc3Q8RGF0b09wdGlvbkNvbXBvbmVudD47XG5cbiAgLyoqIFF1ZXJ5TGlzdCBvZiBkYXRvQWNjb3JkaW9uR3JvdXBzIGNoaWxkcmVuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBEYXRvQWNjb3JkaW9uQ29tcG9uZW50KSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBhY2NvcmRpb246IFF1ZXJ5TGlzdDxEYXRvQWNjb3JkaW9uQ29tcG9uZW50PjtcblxuICAvKiogUXVlcnlMaXN0IG9mIGRhdG9Hcm91cHMgY2hpbGRyZW4gKi9cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRvR3JvdXBDb21wb25lbnQpXG4gIGdyb3VwczogUXVlcnlMaXN0PERhdG9Hcm91cENvbXBvbmVudD47XG5cbiAgLyoqIEFsbG93aW5nIGN1c3RvbSB0ZW1wbGF0ZSBieSBwYXNzaW5nICpkYXRvQWN0aXZlIGRpcmVjdGl2ZSB3aGljaCBnZXRzIHRoZSBhY3RpdmUgYXMgY29udGV4dCAqL1xuICBAQ29udGVudENoaWxkKERhdG9TZWxlY3RBY3RpdmVEaXJlY3RpdmUpXG4gIGFjdGl2ZTogRGF0b1NlbGVjdEFjdGl2ZURpcmVjdGl2ZTtcblxuICAvKiogVGhlIGtleSB0aGF0IHN0b3JlcyB0aGUgb3B0aW9uIGlkICovXG4gIEBJbnB1dCgpXG4gIGlkS2V5ID0gJ2lkJztcblxuICAvKiogVGhlIGxvb2t1cCBrZXkgZm9yIHRoZSBsYWJlbCAqL1xuICBASW5wdXQoKVxuICBsYWJlbEtleSA9ICdsYWJlbCc7XG5cbiAgLyoqIEEgcGxhY2Vob2xkZXIgZm9yIHRoZSB0cmlnZ2VyICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ2NvcmUuc2VsZWN0JztcblxuICAvKiogQSBwbGFjZWhvbGRlciBmb3IgdGhlIHNlYXJjaCAqL1xuICBASW5wdXQoKSBzZWFyY2hQbGFjZWhvbGRlciA9ICdjb3JlLnNlYXJjaCc7XG5cbiAgLyoqIEN1c3RvbSB0ZXh0IHdoZW4gd2UgZG9uJ3QgaGF2ZSByZXN1bHRzICovXG4gIEBJbnB1dCgpXG4gIHNldCBub0l0ZW1zTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25vSXRlbXNMYWJlbCA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gIH1cblxuICAvKiogSWYgZGVmaW5lZCwgaW5kaWNhdGVzIGJ5IHdoaWNoIGtleSB0aGUgZGF0YSBzaG91bGQgYmUgbm9ybWFsaXplZCAqL1xuICBASW5wdXQoKVxuICBncm91cEJ5OiBzdHJpbmc7XG5cbiAgLyoqIEFkZC9yZW1vdmVzIHNlYXJjaCBpbnB1dCAqL1xuICBASW5wdXQoKVxuICBpc0NvbWJvID0gdHJ1ZTtcblxuICAvKiogV2hldGhlciBpdCdzIGEgZ3JvdXAgKi9cbiAgQElucHV0KClcbiAgaXNHcm91cCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZWNpZGUgd2hldGhlciB0byBmaWx0ZXIgdGhlIHJlc3VsdHMgaW50ZXJuYWxseSBiYXNlZCBvbiBzZWFyY2ggcXVlcnkuXG4gICAqIFVzZWZ1bCBmb3IgYXN5bmMgZmlsdGVyaW5nLCB3aGVyZSB3ZSBzZWFyY2ggdGhyb3VnaCBtb3JlIGNvbXBsZXggZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGludGVybmFsU2VhcmNoID0gdHJ1ZTtcblxuICAvKiogRGVib3VuY2UgdGltZSB0byBlbWl0IHNlYXJjaCBxdWVyaWVzICovXG4gIEBJbnB1dCgpXG4gIGRlYm91bmNlVGltZSA9IDMwMDtcblxuICAvKiogV2hldGhlciB0byBzaG93IGxvYWRpbmcgaW5kaWNhdG9yICovXG4gIEBJbnB1dCgpXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFsbG93IHNlbGVjdCBhbGwgY2hlY2tib3ggKi9cbiAgQElucHV0KClcbiAgYWxsb3dTZWxlY3RBbGwgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0byBhbGxvdyBzZWxlY3QgYWxsIGNoaXAuIGVtcHR5IG1lYW5zIGl0J3MgZGlzYWJsZWQgKi9cbiAgQElucHV0KClcbiAgc2VsZWN0QWxsQ2hpcFR4dCA9ICcnO1xuXG4gIC8qKiBUaGUgdHlwZSBvZiB0aGUgc2VsZWN0ICovXG4gIEBJbnB1dCgpXG4gIHR5cGU6IFNlbGVjdFR5cGUgPSBTZWxlY3RUeXBlLlNJTkdMRTtcblxuICAvKiogQ2xpZW50IHNlYXJjaCBzdHJhdGVneSAqL1xuICBASW5wdXQoKVxuICBzZWFyY2hTdHJhdGVneTogRGF0b1NlbGVjdFNlYXJjaFN0cmF0ZWd5ID0gZGVmYXVsdENsaWVudFNlYXJjaFN0cmF0ZWd5O1xuXG4gIC8qKiBUaGUgZGVmYXVsdCBwb3NpdGlvbiBvZiB0aGUgZHJvcGRvd24gKi9cbiAgQElucHV0KClcbiAgcGxhY2VtZW50OiBQb3BwZXJPcHRpb25zWydwbGFjZW1lbnQnXSA9ICdib3R0b20tc3RhcnQnO1xuXG4gIEBJbnB1dCgpXG4gIGluZmluaXRlU2Nyb2xsTG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKiBMaW1pdCB0aGUgbnVtYmVyIG9mIHJlc3VsdHMgc2hvd24gKi9cbiAgQElucHV0KClcbiAgbGltaXRUbyA9IGRlZmF1bHRPcHRpb25zRGlzcGxheUxpbWl0O1xuXG4gIEBJbnB1dCgnbGltaXRTZWxlY3RlZFRvJylcbiAgc2V0IGxpbWl0U2VsZWN0ZWQobGltaXRTZWxlY3RlZFRvOiBudW1iZXIpIHtcbiAgICB0aGlzLmxpbWl0U2VsZWN0ZWRUbyA9IGxpbWl0U2VsZWN0ZWRUbztcbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQWxsb3cgc29ydGluZyBvZiBzZWxlY3RlZCBvcHRpb25zIGluIG11bHRpIG1vZGUgKi9cbiAgQElucHV0KClcbiAgaXNTb3J0YWJsZSA9IGZhbHNlO1xuXG4gIC8qKiBFbGVtZW50IHRvIGFwcGVuZCB0aGUgb3B0aW9ucyBvdmVybGF5IHRvICovXG4gIEBJbnB1dCgpXG4gIGFwcGVuZFRvOiBIVE1MRWxlbWVudCB8IHN0cmluZztcblxuICAvKiogVGhlIG9wdGlvbnMgdG8gZGlzcGxheSBpbiB0aGUgZHJvcGRvd24gKi9cbiAgQElucHV0KClcbiAgc2V0IGRhdGFTZXQoZGF0YTogYW55W10pIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbFJ1bikge1xuICAgICAgdGhpcy5fZGF0YSA9IG5vcm1hbGl6ZURhdGEoZGF0YSwgdGhpcy5sYWJlbEtleSwgdGhpcy5ncm91cEJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyoqIGRhdGEgbm9ybWFsaXphdGlvbiwgaWYgcmVxdWlyZWQsIHdpbGwgYmUgaGFuZGxlZCBieSBuZ09uSW5pdCBpbiB0aGUgaW5pdGlhbCBydW4gKi9cbiAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgIH1cblxuICAgIC8qKiBJZiBpdCdzIGFzeW5jIHVwZGF0ZXMsIGNyZWF0ZSBtaWNybyB0YXNrIGluIG9yZGVyIHRvIHJlLXN1YnNjcmliZSB0byBjbGlja3MgKi9cbiAgICBpZiAodGhpcy5fZGF0YUlzRGlydHkpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvT3B0aW9uQ2xpY2sodGhpcy5vcHRpb25zKTtcbiAgICAgICAgdGhpcy5tYXJrQXNBY3RpdmUodGhpcy5fbW9kZWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YUlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgLyoqIFNlYXJjaCBncm91cHMgYXMgd2VsbCBhcyBvcHRpb25zICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaEdyb3VwTGFiZWxzID0gdHJ1ZTtcblxuICAvKiogQWRkIGN1c3RvbSBjbGFzcyB0byB0aGUgc2VsZWN0IGRyb3BEb3duICovXG4gIEBJbnB1dCgpXG4gIGRhdG9TZWxlY3RDbGFzczogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKiogc2hvdyBlbXB0eSByZXN1bHQgdGV4dCAqL1xuICBASW5wdXQoKVxuICBzaG93RW1wdHlSZXN1bHRzVGV4dCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIGtlZXAgZm9jdXMgaW4gaW5wdXQgYWZ0ZXIgc2VsZWN0aW5nIG9wdGlvblxuICAgKi9cbiAgQElucHV0KClcbiAga2VlcEZvY3VzID0gZmFsc2U7XG5cbiAgLyoqIEVtaXQgc2VhcmNoIHZhbHVlIHdoZW4gaW50ZXJuYWwgc2VhcmNoIGlzIGZhbHNlICovXG4gIEBPdXRwdXQoKVxuICBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogRW1pdCB3aGVuIFt3aXRoQWN0aW9uc10gaXMgdHJ1ZSBhbmQgdGhlIHVzZXIgY2xpY2tzIHNhdmUgKi9cbiAgQE91dHB1dCgpXG4gIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGZldGNoID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBPdXRwdXQoKVxuICBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGxpbWl0U2VsZWN0ZWRUbzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBHZXR0ZXJzIGFuZCBTZXR0ZXJzXG4gICAqL1xuXG4gIGdldCBjb250YWluc0dyb3VwcygpIHtcbiAgICByZXR1cm4gdGhpcy5ncm91cHMgJiYgdGhpcy5ncm91cHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wZW47XG4gIH1cblxuICBzZXQgb3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX29wZW4gPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNSZXN1bHRzKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNSZXN1bHRzO1xuICB9XG5cbiAgc2V0IGhhc1Jlc3VsdHModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oYXNSZXN1bHRzID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaGFzVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGVsLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBpc1NpbmdsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSBTZWxlY3RUeXBlLlNJTkdMRTtcbiAgfVxuXG4gIGdldCBpc011bHRpKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFNlbGVjdFR5cGUuTVVMVEk7XG4gIH1cblxuICBnZXQgX3Nob3dFbXB0eVJlc3VsdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0VtcHR5UmVzdWx0c1RleHQgJiYgdGhpcy5fZGF0YSAmJiAoIXRoaXMuaGFzUmVzdWx0cyB8fCAhdGhpcy5fZGF0YS5sZW5ndGgpICYmICF0aGlzLmlzR3JvdXA7XG4gIH1cblxuICBnZXQgX2NvdW50KCkge1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5nZXRWaXNpYmxlT3B0aW9ucyhmYWxzZSkubGVuZ3RoO1xuICAgIGNvbnN0IGFjdGl2ZXMgPSB0aGlzLl9tb2RlbC5sZW5ndGg7XG4gICAgcmV0dXJuIGAoJHthY3RpdmVzfS8ke3RvdGFsfSlgO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYWxsIHRoZSBvcHRpb25zIGFyZSBjaGVja2VkICovXG4gIGdldCBfaXNBbGxDaGVja2VkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFZpc2libGVPcHRpb25zKCkuZXZlcnkob3B0aW9uID0+IHRoaXMuX21vZGVsLmluZGV4T2Yob3B0aW9uKSA+IC0xKTtcbiAgfVxuXG4gIGdldCBzaG93U2VsZWN0QWxsQ2hpcCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxlbmd0aCAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPT09IHRoaXMub3B0aW9ucy5sZW5ndGg7XG4gIH1cblxuICAvKiogV2hldGhlciBzb21lIHRoZSBvcHRpb25zIGFyZSBjaGVja2VkICovXG4gIGdldCBfaXNJbmRldGVybWluYXRlbHlDaGVja2VkKCkge1xuICAgIGxldCBzb21lQ2hlY2tlZCxcbiAgICAgIHNvbWVOb3RDaGVja2VkID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB2aXNpYmxlT3B0aW9uIG9mIHRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKSkge1xuICAgICAgaWYgKHRoaXMuX21vZGVsLmluZGV4T2YodmlzaWJsZU9wdGlvbikgPiAtMSkge1xuICAgICAgICBzb21lQ2hlY2tlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb21lTm90Q2hlY2tlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoc29tZUNoZWNrZWQgJiYgc29tZU5vdENoZWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBGb3JtQ29udHJvbCB3aGljaCBsaXN0ZW5zIGZvciBzZWFyY2ggdmFsdWUgY2hhbmdlcyAqL1xuICBzZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG5cbiAgLyoqIEV4cG9zZSB0aGUgc2VhcmNoIHRlcm0gc28gaXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgaGlnaGxpZ2h0IGRpcmVjdGl2ZSAqL1xuICBzZWFyY2hUZXJtID0gJyc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgUHJvcGVydGllc1xuICAgKi9cbiAgX25vSXRlbXNMYWJlbCA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5uby1pdGVtcycpO1xuXG4gIC8qKiBTdG9yZSB0aGUgaW5pdGlhbCBkYXRhICovXG4gIF9kYXRhID0gW107XG5cbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHdlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhlIGRhdGEsXG4gICAqICBUaGlzIGlzIG9wdGltaXphdGlvbiBmb3Igbm9uIGFzeW5jIGNhbGxzLlxuICAgKiAqL1xuICBfZGF0YUlzRGlydHkgPSBmYWxzZTtcblxuICAvKiogVHJpZ2dlcnMgdGhlIGZvY3VzIG9uIHRoZSBpbnB1dCAqL1xuICBfZm9jdXMgPSBmYWxzZTtcblxuICAvKiogU3RvcmUgdGhlIGFjdGl2ZSBvcHRpb25zICovXG4gIF9tb2RlbCA9IFtdO1xuXG4gIC8qKiBFbmFibGUvZGlzYWJsZSB0aGUgc2VsZWN0LXRyaWdnZXIgKi9cbiAgX2Rpc2FibGVkO1xuXG4gIC8qKiBXaGV0ZXIgdGhlIGRyb3Bkb3duIGlzIG9wZW4gKi9cbiAgX29wZW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB3ZSBoYXZlIHNlYXJjaCByZXN1bHRzICovXG4gIF9oYXNSZXN1bHRzID0gdHJ1ZTtcblxuICAvKiogSW5kaWNhdGlvbiBpZiB3ZSBuZWVkIHRvIHNldCB0aGUgaW5pdGlhbCBjb250cm9sIHZhbHVlIGFzIGFjdGl2ZXMgKi9cbiAgX2luaXRpYWxPcGVuID0gdHJ1ZTtcblxuICAvKiogV2hldGhlciBnZW5lcmF0ZSBjYW5jZWwvc2F2ZSBmb290ZXIgKi9cbiAgX3dpdGhBY3Rpb25zID0gZmFsc2U7XG5cbiAgX3dpdGhJbmZpbml0ZVNjcm9sbCA9IGZhbHNlO1xuXG4gIC8qKiBOb3RpZnkgdGhlIG11bHRpIHRyaWdnZXIgd2hlbiBjbGljayBvdXRzaWRlIHRvIHJlbW92ZSB0aGUgZm9jdXMgICovXG4gIF9jbGlja091dHNpZGUgPSBmYWxzZTtcblxuICAvKiogRHJvcGRvd24gc2l6ZSBjbGFzcyAqL1xuICBfZHJvcGRvd25DbGFzczogc3RyaW5nW107XG5cbiAgLyoqIHRydWUgdW50aWwgbmdPbkluaXQgKi9cbiAgcHJpdmF0ZSBpbml0aWFsUnVuID0gdHJ1ZTtcblxuICAvKiogU2VhcmNoIGNvbnRyb2wgc3Vic2NyaXB0aW9uICovXG4gIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uO1xuXG4gIC8qKiBDbGlja3Mgb3B0aW9ucyBzdWJzY3JpcHRpb24gKi9cbiAgcHJpdmF0ZSBjbGlja3NTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBrZXlNYW5hZ2VyOiBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcjxEYXRvT3B0aW9uQ29tcG9uZW50PjtcblxuICBwcml2YXRlIGluZmluaXRlU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBkYXRvT3ZlcmxheTogRGF0b092ZXJsYXksXG4gICAgQEF0dHJpYnV0ZSgnbmFrZWQnKSBwdWJsaWMgX25ha2VkLFxuICAgIEBBdHRyaWJ1dGUoJ2RhdG9TaXplJykgcHVibGljIHNpemUsXG4gICAgQEF0dHJpYnV0ZSgnd2lkdGgnKSBwdWJsaWMgd2lkdGg6IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2l6ZSA9IHNpemUgfHwgJ21kJztcbiAgICB0aGlzLl9kcm9wZG93bkNsYXNzID0gW2BkYXRvLXNlbGVjdC0ke3RoaXMuc2l6ZX1gXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmRhdG9TZWxlY3RDbGFzcykge1xuICAgICAgdGhpcy5fZHJvcGRvd25DbGFzcy5wdXNoKHRoaXMuZGF0b1NlbGVjdENsYXNzKTtcbiAgICB9XG5cbiAgICB0aGlzLl93aXRoQWN0aW9ucyA9IHRoaXMuc2F2ZS5vYnNlcnZlcnMubGVuZ3RoID09PSAxO1xuICAgIHRoaXMuX3dpdGhJbmZpbml0ZVNjcm9sbCA9IHRoaXMuZmV0Y2gub2JzZXJ2ZXJzLmxlbmd0aCA9PT0gMTtcbiAgICB0aGlzLmxpc3RlblRvU2VhcmNoKCk7XG4gICAgdGhpcy5fZGF0YSA9IG5vcm1hbGl6ZURhdGEodGhpcy5fZGF0YSwgdGhpcy5sYWJlbEtleSwgdGhpcy5ncm91cEJ5KTtcbiAgICB0aGlzLmluaXRpYWxSdW4gPSBmYWxzZTtcbiAgICAvLyBoZWlnaHQgaXMgYmVpbmcgY29udHJvbGxlZCBieSBzaXplIHByb3BlcnR5XG4gICAgc2V0RGltZW5zaW9ucyh0aGlzLndpZHRoLCBudWxsLCB0aGlzLmhvc3QubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcpXG4gIG1hcmtUb3VjaGVkKCkge1xuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5vblRvdWNoZWQoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIGRyb3Bkb3duXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICB0aGlzLmtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSk7XG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnBhdGNoVmFsdWUoJycpO1xuICAgIHRoaXMuZGF0b092ZXJsYXkuZGV0YWNoKCk7XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgICB0aGlzLl9mb2N1cyA9IGZhbHNlO1xuICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IHRydWU7XG4gICAgdGhpcy5pbmZpbml0ZVN1YnNjcmlwdGlvbiAmJiB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zY3JvbGxFdmVudFN1YnNjcmlwdGlvbiAmJiB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5ibHVyLmVtaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICAgIGlmICh0aGlzLm9wZW4gJiYgKHRoaXMuaXNNdWx0aSB8fCB0aGlzLmlzQ29tYm8pKSB7XG4gICAgICB0aGlzLl9mb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLl9jbGlja091dHNpZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUoYWN0aXZlT3B0aW9uczogYW55IHwgYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLl9tb2RlbCA9IGFjdGl2ZU9wdGlvbnMgPyBjb2VyY2VBcnJheShhY3RpdmVPcHRpb25zKSA6IFtdO1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMubWFya0FzQWN0aXZlKHRoaXMuX21vZGVsLCB7IGRlc2VsZWN0QWxsOiB0cnVlIH0pO1xuICAgICAgdGhpcy5saW1pdFNlbGVjdGVkVG8gJiYgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgfVxuICAgIC8qKiBGb3IgbGF0ZXIgdXBkYXRlcyAqL1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIG92ZXJsYXlcbiAgICovXG4gIG9wZW5Ecm9wZG93bihldmVudD8pIHtcbiAgICAvKiogQ2xvc2UgdGhlIGRyb3Bkb3duIHdoZW4gd2UgY2xpY2sgb24gdGhlIHRyaWdnZXIgYW5kIHdlIGRvbid0IGhhdmUgc2VhcmNoIG9yIG11bHRpcGxlICovXG4gICAgaWYgKHRoaXMub3BlbiAmJiAhdGhpcy5pc0NvbWJvICYmIHRoaXMuaXNTaW5nbGUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKiogRG9uJ3QgY2xvc2UgdGhlIGRyb3Bkb3duIGlmIHdlIGNsaWNrIG9uIHRoZSBpbnB1dCBhbmQgaXQncyBvcGVuICovXG4gICAgaWYgKHRoaXMub3BlbiAmJiAodGhpcy5pc011bHRpIHx8IHRoaXMuaXNDb21ibykpIHtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC50YXJnZXQubm9kZU5hbWUgIT09ICdJTlBVVCcpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRhdG9PdmVybGF5LmNyZWF0ZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlT3ZlcmxheSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0b092ZXJsYXkuYmFja0Ryb3BDbGljayQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fY2xpY2tPdXRzaWRlID0gdHJ1ZTtcbiAgICAgIHRoaXMub3BlbiAmJiB0aGlzLmNsb3NlKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRhdG9PdmVybGF5LmF0dGFjaCh7IHBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQgfSwgdGhpcy5fZHJvcGRvd25DbGFzcyk7XG5cbiAgICB0aGlzLnRvZ2dsZSgpO1xuXG4gICAgaWYgKHRoaXMuaGFzVmFsdWUpIHtcbiAgICAgIC8qKlxuICAgICAgICogV2hlbiB3ZSBmaXJzdCBvcGVuIHRoZSBkcm9wZG93biB3ZSBuZWVkIHRvIG1hcmsgdGhlXG4gICAgICAgKiBGb3JtQ29udHJvbCB2YWx1ZXMgYXMgYWN0aXZlc1xuICAgICAgICovXG4gICAgICBpZiAodGhpcy5faW5pdGlhbE9wZW4pIHtcbiAgICAgICAgdGhpcy5tYXJrQXNBY3RpdmUodGhpcy5fbW9kZWwpO1xuICAgICAgICB0aGlzLl9pbml0aWFsT3BlbiA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saW1pdFNlbGVjdGVkVG8pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3dpdGhJbmZpbml0ZVNjcm9sbCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZUluZmluaXRlU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgc2V0U3R5bGUocXVlcnkoJy5kYXRvLW92ZXJsYXknKSwgJ3pJbmRleCcsIHpJbmRleFBsZWFzZSgpKTtcbiAgICBjb25zdCBkcm9wZG93bkNvbnRhaW5lciA9IHF1ZXJ5KCcuZGF0by1zZWxlY3RfX2Ryb3Bkb3duLWNvbnRhaW5lcicpO1xuICAgIHNldFN0eWxlKGRyb3Bkb3duQ29udGFpbmVyLCAnd2lkdGgnLCBgJHt0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1weGApO1xuXG4gICAgLyoqIFByZXZlbnQgc2Nyb2xsIHdoaWxlIHRoZSBkcm9wZG93biBpcyBvcGVuICovXG4gICAgaWYgKGlzVGVzdEVudigpKSB7XG4gICAgICB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBldmVudE5hbWUgPSBpc01vYmlsZSgpID8gJ3RvdWNobW92ZScgOiAnc2Nyb2xsJztcbiAgICAgIGxldCBzY3JvbGxFdmVudCA9IGZyb21FdmVudCh3aW5kb3csIGV2ZW50TmFtZSk7XG4gICAgICBpZiAoaXNNb2JpbGUoKSkge1xuICAgICAgICBzY3JvbGxFdmVudCA9IHNjcm9sbEV2ZW50LnBpcGUoZmlsdGVyKGV2ZW50ID0+ICFkcm9wZG93bkNvbnRhaW5lci5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb24gPSBzY3JvbGxFdmVudC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoZSA9PiB0aGlzLmNsb3NlKCkpO1xuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlUGVyZmVjdFNjcm9sbEJhcigpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaWJlVG9PcHRpb25DbGljayh0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMua2V5TWFuYWdlciA9IG5ldyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcih0aGlzLm9wdGlvbnMpLndpdGhXcmFwKCk7XG4gIH1cblxuICBjaGVja0FsbChjaGVjazogYm9vbGVhbikge1xuICAgIGxldCBjaGVja2VkID0gY2hlY2s7XG4gICAgaWYgKHRoaXMuX2lzSW5kZXRlcm1pbmF0ZWx5Q2hlY2tlZCkge1xuICAgICAgY2hlY2tlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgaWYgKCFkYXRvT3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIGRhdG9PcHRpb24uYWN0aXZlID0gY2hlY2tlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IHRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKTtcbiAgICBjb25zdCBpc0FsbFZpc2libGUgPSB2aXNpYmxlT3B0aW9ucy5sZW5ndGggPT09IHRoaXMub3B0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoaXNBbGxWaXNpYmxlKSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IGNoZWNrZWQgPyB2aXNpYmxlT3B0aW9ucyA6IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICBjb25zdCB0ZW1wID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHZpc2libGVPcHRpb25zKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX21vZGVsLmluZGV4T2Yob3B0aW9uKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRlbXAucHVzaChvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb2RlbCA9IFsuLi50aGlzLl9tb2RlbCwgLi4udGVtcF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IHRoaXMuX21vZGVsLmZpbHRlcihvcHRpb24gPT4gdmlzaWJsZU9wdGlvbnMuaW5kZXhPZihvcHRpb24pID09PSAtMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgfVxuXG4gIHJlb3JkZXJPcHRpb25zKG5ld09yZGVyOiBhbnlbXSkge1xuICAgIHRoaXMuX21vZGVsID0gbmV3T3JkZXI7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gIH1cblxuICByZW1vdmVPcHRpb24ob3B0aW9uKSB7XG4gICAgdGhpcy5fbW9kZWwgPSB0aGlzLl9tb2RlbC5maWx0ZXIoY3VycmVudCA9PiBjdXJyZW50W3RoaXMuaWRLZXldICE9PSBvcHRpb25bdGhpcy5pZEtleV0pO1xuICAgIGNvbnN0IG9wdGlvblRvUmVtb3ZlID0gdGhpcy5vcHRpb25zLmZpbmQoXG4gICAgICBkYXRvT3B0aW9uID0+IGRhdG9PcHRpb24ub3B0aW9uICYmIGRhdG9PcHRpb24ub3B0aW9uW3RoaXMuaWRLZXldID09PSBvcHRpb25bdGhpcy5pZEtleV1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogVG8gcHJldmVudCBjYXNlcyB3aGVuIHRoZSBvcHRpb25zIGFyZSBsaW1pdGVkIGFuZCBkb2VzbnQgaW5jbHVkZSB0aGUgYWN0aXZlIG9wdGlvbixcbiAgICAgKiB0aGF0IGNhbiBiZSByZWFjaGVkIG9ubHkgYnkgc2VydmVyIHNlYXJjaC5cbiAgICAgKi9cbiAgICBpZiAob3B0aW9uVG9SZW1vdmUpIHtcbiAgICAgIG9wdGlvblRvUmVtb3ZlLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMubGltaXRTZWxlY3RlZFRvICYmIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgfVxuXG4gIHByZXZlbnRCb2R5U2Nyb2xsKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGlzQXJyb3dVcERvd24oZXZlbnQpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgb3ZlcmxheSB0byBkaXNwbGF5IHRoZSBzZWxlY3Qgb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVPdmVybGF5KCkge1xuICAgIGNvbnN0IHRlbXBsYXRlUG9ydGFsID0gbmV3IERhdG9UZW1wbGF0ZVBvcnRhbCh0aGlzLmRyb3Bkb3duKTtcbiAgICBsZXQgYXBwZW5kVG9FbGVtZW50O1xuICAgIGlmIChpc1N0cmluZyh0aGlzLmFwcGVuZFRvKSkge1xuICAgICAgYXBwZW5kVG9FbGVtZW50ID0gY2xvc2VzdCh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgdGhpcy5hcHBlbmRUbyBhcyBzdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRUb0VsZW1lbnQgPSB0aGlzLmFwcGVuZFRvO1xuICAgIH1cblxuICAgIHRoaXMuZGF0b092ZXJsYXkuY3JlYXRlKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCB0ZW1wbGF0ZVBvcnRhbCwgYXBwZW5kVG9FbGVtZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3BwZXIgZG9lc24ndCBzdXBwb3J0IHBlcmZlY3Qtc2Nyb2xsLWJhciwgc28gd2UgbmVlZCB0byBkbyBpdCBtYW51YWxseVxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVQZXJmZWN0U2Nyb2xsQmFyKCkge1xuICAgIGNvbnN0IHBlcmZlY3RTY3JvbGxCYXJQYXJlbnQgPSBjbG9zZXN0KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCAnLnBzJyk7XG4gICAgaWYgKHBlcmZlY3RTY3JvbGxCYXJQYXJlbnQpIHtcbiAgICAgIGZyb21FdmVudChwZXJmZWN0U2Nyb2xsQmFyUGFyZW50LCAnc2Nyb2xsJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGhyb3R0bGVUaW1lKDEwKSxcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0b092ZXJsYXkuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRWaXNpYmxlT3B0aW9ucyhnZXRSYXdPcHRpb25zID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKGRhdG9PcHRpb24gPT4gIWRhdG9PcHRpb24uZGlzYWJsZWQpO1xuICAgIGlmIChnZXRSYXdPcHRpb25zKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5tYXAoZGF0b09wdGlvbiA9PiBkYXRvT3B0aW9uLm9wdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmsgdGhlIGluaXRpYWwgY29udHJvbCB2YWx1ZSBhcyBhY3RpdmVcbiAgICovXG4gIHByaXZhdGUgbWFya0FzQWN0aXZlKG1vZGVsOiBhbnlbXSwgb3B0aW9uczogeyBkZXNlbGVjdEFsbDogYm9vbGVhbiB9ID0geyBkZXNlbGVjdEFsbDogZmFsc2UgfSkge1xuICAgIGNvbnN0IGFzQXJyYXkgPSB0aGlzLm9wdGlvbnMudG9BcnJheSgpO1xuICAgIGlmIChvcHRpb25zLmRlc2VsZWN0QWxsKSB7XG4gICAgICB0aGlzLnJlc2V0QWxsKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG1vZGVsKSB7XG4gICAgICBpZiAoIW9wdGlvbikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoID0gYXNBcnJheS5maW5kKGN1cnJlbnQgPT4gY3VycmVudC5vcHRpb24gJiYgY3VycmVudC5vcHRpb25bdGhpcy5pZEtleV0gPT09IG9wdGlvblt0aGlzLmlkS2V5XSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgbWF0Y2guYWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBhbGwgb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBzaG93QWxsKCkge1xuICAgIGNvbnN0IGlzQWNjb3JkaW9uID0gdGhpcy5pc0FjY29yZGlvbkdyb3VwKCk7XG4gICAgY29uc3QgZ3JvdXBDb21wb25lbnRzOiBMaXN0R3JvdXBDb21wb25lbnRbXSA9IHRoaXMuZ2V0R3JvdXBDb21wb25lbnRzQXJyYXkoKTtcblxuICAgIGZvciAoY29uc3QgZ3JvdXBDb21wb25lbnQgb2YgZ3JvdXBDb21wb25lbnRzKSB7XG4gICAgICBncm91cENvbXBvbmVudC5faGlkZGVuID0gZmFsc2U7XG5cbiAgICAgIC8qIElmIHRoaXMgYWNjb3JkaW9uIGdyb3VwIGhhcyBiZWVuIGV4cGVuZGVkIGJ5IHRoZSBzZWFyY2ggZnVuY3Rpb24sXG4gICAgICAgICB0aGVuIGNvbGxhcHNlIGl0IHRvIHRoZSBvcmlnaW5hbCBzdGF0ZVxuICAgICAgKi9cbiAgICAgIGlmIChpc0FjY29yZGlvbikge1xuICAgICAgICBjb25zdCBhbnlHcm91cCA9IGdyb3VwQ29tcG9uZW50IGFzIGFueTtcblxuICAgICAgICBpZiAoYW55R3JvdXAuX19leHBlbmRlZCkge1xuICAgICAgICAgIGFueUdyb3VwLl9fZXhwZW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICBjb25zdCBhY2NvcmRpb25Hcm91cCA9IGFueUdyb3VwIGFzIERhdG9BY2NvcmRpb25Hcm91cENvbXBvbmVudDtcbiAgICAgICAgICBhY2NvcmRpb25Hcm91cC5jb250ZW50LmRpc2FibGVBbmltYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICBhY2NvcmRpb25Hcm91cC5leHBhbmQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBkYXRvT3B0aW9uIG9mIHRoaXMub3B0aW9ucy50b0FycmF5KCkpIHtcbiAgICAgIGRhdG9PcHRpb24uaGlkZUFuZERpc2FibGVkKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGZvciBvcHRpb25zIGFuZCByZXR1cm5zIGlmIHdlIGhhdmUgcmVzdWx0XG4gICAqL1xuICBwcml2YXRlIHNlYXJjaE9wdGlvbnModmFsdWU6IHN0cmluZykge1xuICAgIGxldCBoYXNSZXN1bHQgPSBmYWxzZTtcbiAgICBjb25zdCBncm91cENvbXBvbmVudHNBcnJheTogTGlzdEdyb3VwQ29tcG9uZW50W10gPSB0aGlzLmdldEdyb3VwQ29tcG9uZW50c0FycmF5KCk7XG4gICAgY29uc3QgaGFzR3JvdXBzID0gZ3JvdXBDb21wb25lbnRzQXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGhhc0dyb3Vwcykge1xuICAgICAgaGFzUmVzdWx0ID0gdGhpcy5zZWFyY2hJbkdyb3Vwcyhncm91cENvbXBvbmVudHNBcnJheSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYXNSZXN1bHQgPSB0aGlzLnNlYXJjaEluT3B0aW9ucyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc1Jlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZm9yIG1hdGNoaW5nIGdyb3VwcyBhbmQgY2hpbGRyZW4uXG4gICAqL1xuICBwcml2YXRlIHNlYXJjaEluR3JvdXBzKGdyb3VwQ29tcG9uZW50c0FycmF5OiBMaXN0R3JvdXBDb21wb25lbnRbXSwgdmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzQWNjb3JkaW9uID0gdGhpcy5pc0FjY29yZGlvbkdyb3VwKCk7XG4gICAgY29uc3QgZGF0YUxlbmd0aCA9IHRoaXMuX2RhdGEubGVuZ3RoO1xuICAgIGxldCBoYXNSZXN1bHRzID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFMZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLl9kYXRhW2ldO1xuICAgICAgY29uc3QgZ3JvdXBLZXkgPSB0aGlzLmdldEdyb3VwS2V5KGdyb3VwKTtcbiAgICAgIGNvbnN0IGdyb3VwTWF0Y2ggPSB0aGlzLnNlYXJjaEdyb3VwTGFiZWxzICYmIHRoaXMuc2VhcmNoU3RyYXRlZ3koZ3JvdXAsIHZhbHVlLCB0aGlzLmxhYmVsS2V5KTtcbiAgICAgIGNvbnN0IGdyb3VwT3B0aW9ucyA9IGdyb3VwLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZFt0aGlzLmlkS2V5XSk7XG4gICAgICAvKiBzaG93L2hpZGUgdGhlIG9wdGlvbnMgKi9cbiAgICAgIGNvbnN0IHNob3dHcm91cCA9IHRoaXMuc2VhcmNoSW5PcHRpb25zKHZhbHVlLCBncm91cE9wdGlvbnMsIGdyb3VwTWF0Y2gpO1xuXG4gICAgICBpZiAoc2hvd0dyb3VwICYmICFoYXNSZXN1bHRzKSB7XG4gICAgICAgIGhhc1Jlc3VsdHMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBGaW5kIHRoZSByaWdodCBjb21wb25lbnQsIGFjY29yZGluZyB0byB0aGUgaW50ZXJuYWwga2V5IGFzc2lnbmVkIGluIHRoZSBwcmV2aW91cyBzZWFyY2guXG4gICAgICAgICBXaGVuIG5vIG1hdGNoIGlzIGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gdGhlIHNhbWUgaW5kZXggYXMgdGhlIGdyb3VwIG9wdGlvbi5cbiAgICAgICogIFRoZSBpbmRleCBpcyBjb25zaWRlcmVkIGxlc3Mgc2FmZSwgYmVjYXVzZSBpdCBjYW4gY2hhbmdlIGFmdGVyIHNvcnRpbmcuICovXG4gICAgICBjb25zdCBncm91cENvbXBvbmVudCA9IGdyb3VwQ29tcG9uZW50c0FycmF5LmZpbmQoKGc6IGFueSkgPT4gZy5fX2tleSA9PT0gZ3JvdXBLZXkpIHx8IGdyb3VwQ29tcG9uZW50c0FycmF5W2ldO1xuICAgICAgLyogU2hvdy9oaWRlIHRoZSBncm91cCAqL1xuICAgICAgaWYgKGdyb3VwQ29tcG9uZW50KSB7XG4gICAgICAgIGdyb3VwQ29tcG9uZW50Ll9oaWRkZW4gPSAhc2hvd0dyb3VwO1xuICAgICAgICAvKiBhc3NpZ24gYW4gaW50ZXJuYWwga2V5IHRvIHRoZSBjb21wb25lbnQgaW5zdGFuY2UsIHNvIHdlIGNhbiBmaW5kIGl0IGxhdGVyIChhYm92ZSkuICovXG4gICAgICAgIChncm91cENvbXBvbmVudCBhcyBhbnkpLl9fa2V5ID0gZ3JvdXBLZXk7XG4gICAgICAgIC8qIEV4cGFuZCB0aGUgYWNjb3JkaW9uIG9uIG1hdGNoaW5nIHJlc3VsdHMgKi9cbiAgICAgICAgaWYgKGlzQWNjb3JkaW9uICYmIHNob3dHcm91cCkge1xuICAgICAgICAgIGNvbnN0IGFjY29yZGlvbkdyb3VwID0gZ3JvdXBDb21wb25lbnQgYXMgRGF0b0FjY29yZGlvbkdyb3VwQ29tcG9uZW50O1xuXG4gICAgICAgICAgaWYgKCFhY2NvcmRpb25Hcm91cC5leHBhbmRlZCkge1xuICAgICAgICAgICAgYWNjb3JkaW9uR3JvdXAuY29udGVudC5kaXNhYmxlQW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIC8qIEV4cGFuZCB0aGUgYWNjb3JkaW9uICovXG4gICAgICAgICAgICBhY2NvcmRpb25Hcm91cC5leHBhbmQodHJ1ZSk7XG4gICAgICAgICAgICAvKiBNYXJrIHRoZSBhY2NvcmRpb24gYXMgZXhwYW5kZWQsIHNvIHdlIGNhbiByZXR1cm4gdG8gdGhlIGRlZmF1bHQgc3RhdGUgbGF0ZXIgKi9cbiAgICAgICAgICAgIChncm91cENvbXBvbmVudCBhcyBhbnkpLl9fZXhwZW5kZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNSZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCB0aGUgb3B0aW9ucyB0byBzaG93IG9yIGhpZGUgZWFjaCBhbmQgcmV0dXJuIGlmIHJlc3VsdCBoYXMgYmVlbiBmb3VuZC5cbiAgICogQ29uc2lkZXIgd2UgaGF2ZSBhIGdyb3VwIHRoYXQgbWF0Y2ggd2Ugc2hvdyBhbGwgb2YgaXRzIG9wdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHNlYXJjaEluT3B0aW9ucyh2YWx1ZTogc3RyaW5nLCBncm91cE9wdGlvbnMgPSBbXSwgZ3JvdXBNYXRjaCA9IGZhbHNlKSB7XG4gICAgbGV0IGhhc1Jlc3VsdHMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgZGF0b09wdGlvbiBvZiB0aGlzLm9wdGlvbnMudG9BcnJheSgpKSB7XG4gICAgICBjb25zdCBvcHRpb25Jbkdyb3VwID0gZ3JvdXBPcHRpb25zLmluZGV4T2YoZGF0b09wdGlvbi5vcHRpb24gJiYgZGF0b09wdGlvbi5vcHRpb25bdGhpcy5pZEtleV0pICE9PSAtMTtcblxuICAgICAgaWYgKGdyb3VwTWF0Y2ggJiYgb3B0aW9uSW5Hcm91cCkge1xuICAgICAgICBkYXRvT3B0aW9uLmhpZGVBbmREaXNhYmxlZChmYWxzZSk7XG4gICAgICAgIGhhc1Jlc3VsdHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICghc2l6ZShncm91cE9wdGlvbnMpIHx8IG9wdGlvbkluR3JvdXApIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLnNlYXJjaFN0cmF0ZWd5KGRhdG9PcHRpb24sIHZhbHVlLCB0aGlzLmxhYmVsS2V5KTtcblxuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgZGF0b09wdGlvbi5oaWRlQW5kRGlzYWJsZWQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0b09wdGlvbi5oaWRlQW5kRGlzYWJsZWQoZmFsc2UpO1xuICAgICAgICAgIGhhc1Jlc3VsdHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc1Jlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBrZXkgb2YgdGhlIG9wdGlvbiBncm91cC4gSXQgY2FuIGJlIHRoZSBncm91cCBJZCBpZiBleGlzdHMsIG9yIHRoZSBsYWJlbC5cbiAgICovXG4gIHByaXZhdGUgZ2V0R3JvdXBLZXkob3B0aW9uKSB7XG4gICAgcmV0dXJuIG9wdGlvbiAmJiAob3B0aW9uW3RoaXMuaWRLZXldIHx8IG9wdGlvblt0aGlzLmxhYmVsS2V5XSk7XG4gIH1cblxuICBwcml2YXRlIGlzRW1wdHkodmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJyc7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHNlYXJjaCBjaGFuZ2VzIGFuZCBmaWx0ZXIgdGhlIGxpc3RcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVG9TZWFyY2goKSB7XG4gICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24gPVxuICAgICAgdGhpcy5pc0NvbWJvICYmXG4gICAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJuYWxTZWFyY2gpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5zaG93QWxsKCk7XG4gICAgICAgICAgICB0aGlzLmhhc1Jlc3VsdHMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhc1Jlc3VsdHMgPSB0aGlzLnNlYXJjaE9wdGlvbnModmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlYXJjaC5lbWl0KHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLmFzeW5jVXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIG9wdGlvbiBjbGljayBhbmQgY2hhbmdlIHRoZSBzdGF0ZSBhY2NvcmRpbmdseVxuICAgKi9cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb09wdGlvbkNsaWNrKG9wdGlvbnM6IFF1ZXJ5TGlzdDxEYXRvT3B0aW9uQ29tcG9uZW50Pikge1xuICAgIHRoaXMuY2xpY2tzU3Vic2NyaXB0aW9uICYmIHRoaXMuY2xpY2tzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAvKiogR2F0aGVyIGFsbCB0aGUgY2xpY2tzICovXG4gICAgY29uc3QgY2xpY2tzJCA9IG9wdGlvbnMubWFwKG9wdGlvbiA9PlxuICAgICAgb3B0aW9uLmNsaWNrJC5waXBlKFxuICAgICAgICBtYXAoKGV2ZW50OiBFdmVudCkgPT4gKHtcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBvcHRpb25cbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgKTtcblxuICAgIC8qKiBDb25zaWRlciBjaGFuZ2UgaXQgdG8gdXNlIGV2ZW50IGRlbGVnYXRpb24gKi9cbiAgICB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbiA9IG1lcmdlKC4uLmNsaWNrcyQpLnN1YnNjcmliZSgoeyBvcHRpb24sIGV2ZW50IH0pID0+IHtcbiAgICAgIGlmIChvcHRpb24uZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmlzU2luZ2xlID8gdGhpcy5oYW5kbGVTaW5nbGVDbGljayhvcHRpb24pIDogdGhpcy5oYW5kbGVNdWx0aUNsaWNrKG9wdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoaXNFc2NhcGUoZXZlbnQpICYmIHRoaXMub3Blbikge1xuICAgICAgdGhpcy5fY2xpY2tPdXRzaWRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBrZXl1cChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChpc0VudGVyKGV2ZW50KSkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4O1xuICAgICAgY29uc3QgYWN0aXZlID0gdGhpcy5vcHRpb25zLnRvQXJyYXkoKVtpbmRleF07XG4gICAgICB0aGlzLmlzU2luZ2xlID8gdGhpcy5oYW5kbGVTaW5nbGVDbGljayhhY3RpdmUpIDogdGhpcy5oYW5kbGVNdWx0aUNsaWNrKGFjdGl2ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyb3dVcERvd24oZXZlbnQpKSB7XG4gICAgICB0aGlzLmtleU1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRhdG8tc2VsZWN0X19kcm9wZG93bicpO1xuICAgICAgX3Njcm9sbFRvT3B0aW9uKHtcbiAgICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4OiB0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4LFxuICAgICAgICBncm91cHM6IHRoaXMuZ3JvdXBzLFxuICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc0VzY2FwZShldmVudCkpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0QWxsKCkge1xuICAgIGZvciAoY29uc3QgZGF0b09wdGlvbiBvZiB0aGlzLm9wdGlvbnMudG9BcnJheSgpKSB7XG4gICAgICBkYXRvT3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2luZ2xlQ2xpY2soZGF0b09wdGlvbjogRGF0b09wdGlvbkNvbXBvbmVudCkge1xuICAgIGlmICghZGF0b09wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZGF0b09wdGlvbi5hY3RpdmUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldEFsbCgpO1xuICAgICAgZGF0b09wdGlvbi5hY3RpdmUgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd09wdGlvbiA9IGRhdG9PcHRpb24ub3B0aW9uO1xuICAgIHRoaXMuX21vZGVsID0gW3Jhd09wdGlvbl07XG4gICAgdGhpcy5vbkNoYW5nZShyYXdPcHRpb24pO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTXVsdGlDbGljayhkYXRvT3B0aW9uOiBEYXRvT3B0aW9uQ29tcG9uZW50KSB7XG4gICAgaWYgKCFkYXRvT3B0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGF0b09wdGlvbi5hY3RpdmUgPSAhZGF0b09wdGlvbi5hY3RpdmU7XG4gICAgY29uc3QgcmF3T3B0aW9uID0gZGF0b09wdGlvbi5vcHRpb247XG4gICAgaWYgKGRhdG9PcHRpb24uYWN0aXZlKSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IHRoaXMuX21vZGVsLmNvbmNhdChyYXdPcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IHRoaXMuX21vZGVsLmZpbHRlcihjdXJyZW50ID0+IGN1cnJlbnRbdGhpcy5pZEtleV0gIT09IHJhd09wdGlvblt0aGlzLmlkS2V5XSk7XG4gICAgfVxuICAgIHRoaXMubGltaXRTZWxlY3RlZFRvICYmIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fbW9kZWwpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuYXN5bmNVcGRhdGVEcm9wZG93blBvc2l0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2YXRlSW5maW5pdGVTY3JvbGwoKSB7XG4gICAgdGhpcy5pbmZpbml0ZVN1YnNjcmlwdGlvbiA9IGZyb21FdmVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZGF0by1zZWxlY3RfX2Ryb3Bkb3duJyksICdzY3JvbGwnKVxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwKSlcbiAgICAgIC5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kYXRvLXNlbGVjdF9fZHJvcGRvd24nKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsWSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBjb250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBoZWlnaHQgLSBzY3JvbGxZO1xuICAgICAgICBpZiAob2Zmc2V0ID09PSAwIHx8IG9mZnNldCA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuZmV0Y2guZW1pdCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiAmJiB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2xpY2tzU3Vic2NyaXB0aW9uICYmIHRoaXMuY2xpY2tzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbmZpbml0ZVN1YnNjcmlwdGlvbiAmJiB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5kYXRvT3ZlcmxheS5hdHRhY2hlZCAmJiB0aGlzLmRhdG9PdmVybGF5LmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBncm91cCBjb21wb25lbnQgaXMgQWNjb3JkaW9uXG4gICAqL1xuICBwcml2YXRlIGlzQWNjb3JkaW9uR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWNjb3JkaW9uICYmIHRoaXMuYWNjb3JkaW9uLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhbiBhcnJheSBvZiB0aGUgZ3JvdXAgY29tcG9uZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRHcm91cENvbXBvbmVudHNBcnJheSgpOiBMaXN0R3JvdXBDb21wb25lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuaXNBY2NvcmRpb25Hcm91cCgpID8gdGhpcy5hY2NvcmRpb24uZmlyc3QuZ3JvdXBzLnRvQXJyYXkoKSA6IHRoaXMuZ3JvdXBzICYmIHRoaXMuZ3JvdXBzLnRvQXJyYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGlzYWJsZWRTdGF0ZSgpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuX21vZGVsLmxlbmd0aCA9PT0gdGhpcy5saW1pdFNlbGVjdGVkVG87XG4gICAgZm9yIChjb25zdCBkYXRvT3B0aW9uIG9mIHRoaXMub3B0aW9ucy50b0FycmF5KCkpIHtcbiAgICAgIGlmICghZGF0b09wdGlvbi5hY3RpdmUpIHtcbiAgICAgICAgZGF0b09wdGlvbi5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB0aGUgb3ZlcmxheSB3aWxsIGJlIHVwZGF0ZSBBRlRFUiBDaGFuZ2UgRGV0ZWN0aW9uIHdhcyBkb25lXG4gIC8vIFNvIHRoZSBpdGVtcyBpbiB0aGUgaW5wdXQgKGFuZCBpdHMgaGVpZ2h0KSBpcyB1cGRhdGVcbiAgcHJpdmF0ZSBhc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKSB7XG4gICAgaWYgKHRoaXMuZGF0b092ZXJsYXkgJiYgdGhpcy5kYXRvT3ZlcmxheS5hdHRhY2hlZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRhdG9PdmVybGF5LnNjaGVkdWxlVXBkYXRlKCksIDApO1xuICAgIH1cbiAgfVxufVxuIl19
|
package/esm5/lib/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
window.coreVersion = '22.10.
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
window.coreVersion = '22.10.3-rc.';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUMsTUFBYyxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIod2luZG93IGFzIGFueSkuY29yZVZlcnNpb24gPSAnMjIuMTAuMy1yYy4nOyJdfQ==
|
|
@@ -7476,7 +7476,6 @@ let DatoSelectComponent = class DatoSelectComponent extends BaseCustomControl {
|
|
|
7476
7476
|
this.limitSelectedTo = limitSelectedTo;
|
|
7477
7477
|
if (this.options) {
|
|
7478
7478
|
this.updateDisabledState();
|
|
7479
|
-
this.cdr.markForCheck();
|
|
7480
7479
|
}
|
|
7481
7480
|
}
|
|
7482
7481
|
/** The options to display in the dropdown */
|
|
@@ -7636,16 +7635,18 @@ let DatoSelectComponent = class DatoSelectComponent extends BaseCustomControl {
|
|
|
7636
7635
|
});
|
|
7637
7636
|
this.datoOverlay.attach({ placement: this.placement }, this._dropdownClass);
|
|
7638
7637
|
this.toggle();
|
|
7639
|
-
|
|
7640
|
-
|
|
7641
|
-
|
|
7642
|
-
|
|
7643
|
-
|
|
7644
|
-
|
|
7638
|
+
if (this.hasValue) {
|
|
7639
|
+
/**
|
|
7640
|
+
* When we first open the dropdown we need to mark the
|
|
7641
|
+
* FormControl values as actives
|
|
7642
|
+
*/
|
|
7643
|
+
if (this._initialOpen) {
|
|
7644
|
+
this.markAsActive(this._model);
|
|
7645
|
+
this._initialOpen = false;
|
|
7646
|
+
}
|
|
7645
7647
|
if (this.limitSelectedTo) {
|
|
7646
7648
|
this.updateDisabledState();
|
|
7647
7649
|
}
|
|
7648
|
-
this._initialOpen = false;
|
|
7649
7650
|
}
|
|
7650
7651
|
if (this._withInfiniteScroll) {
|
|
7651
7652
|
this.activateInfiniteScroll();
|
|
@@ -11314,7 +11315,7 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
|
|
|
11314
11315
|
this.listOptions = rawValues.map(mapToListItem);
|
|
11315
11316
|
}
|
|
11316
11317
|
else {
|
|
11317
|
-
const columnValues = this.getColumnValues();
|
|
11318
|
+
const columnValues = this.getColumnValues().filter(({ value }) => !isNil(value));
|
|
11318
11319
|
this.columnValues = columnValues.map(({ value }) => {
|
|
11319
11320
|
return !isNil(this.pivotColumn) && value ? value[this.colField] : value;
|
|
11320
11321
|
});
|
|
@@ -22737,7 +22738,7 @@ function fixNgLeaks() {
|
|
|
22737
22738
|
};
|
|
22738
22739
|
}
|
|
22739
22740
|
|
|
22740
|
-
window.coreVersion = '22.10.
|
|
22741
|
+
window.coreVersion = '22.10.3-rc.';
|
|
22741
22742
|
|
|
22742
22743
|
/**
|
|
22743
22744
|
* @license
|