@ecodev/natural 55.0.1 → 55.0.3
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/esm2022/lib/classes/abstract-list.mjs +2 -2
- package/esm2022/lib/classes/tld.mjs +8 -58
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +2 -2
- package/esm2022/lib/modules/sidenav/sidenav.service.mjs +3 -3
- package/fesm2022/ecodev-natural.mjs +11 -61
- package/fesm2022/ecodev-natural.mjs.map +1 -1
- package/lib/classes/abstract-list.d.ts +1 -1
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +1 -1
- package/lib/modules/sidenav/sidenav.service.d.ts +2 -2
- package/package.json +1 -1
- package/src/lib/modules/sidenav/_sidenav.theme.scss +0 -1
|
@@ -33,7 +33,7 @@ export class NaturalAbstractList extends NaturalAbstractPanel {
|
|
|
33
33
|
super();
|
|
34
34
|
this.service = service;
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
36
|
+
* Whether search should be loaded from url/storage and persisted in it too.
|
|
37
37
|
*/
|
|
38
38
|
this.persistSearch = true;
|
|
39
39
|
/**
|
|
@@ -431,4 +431,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImpor
|
|
|
431
431
|
}], forcedVariables: [{
|
|
432
432
|
type: Input
|
|
433
433
|
}] } });
|
|
434
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL2Fic3RyYWN0LWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFHMUUsT0FBTyxFQUFDLGNBQWMsRUFBUSxhQUFhLEVBQW9CLGVBQWUsRUFBRSxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRyxPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzNELE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDbkYsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUk3RCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsaUJBQWlCLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFDSCw0QkFBNEIsRUFJNUIsWUFBWSxHQUNmLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLakQsU0FBUyxlQUFlLENBQUMsSUFBb0I7SUFDekMsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLGVBQWUsSUFB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QUFHLENBQUMsQ0FBQztZQUN2RixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUNuRjtJQUNMLENBQUM7OEdBOWhCUSxtQkFBbUI7a0dBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFEL0IsU0FBUzs2RkF5QlUsYUFBYTtzQkFBNUIsS0FBSztnQkFLVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBaUJVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBdUVLLGVBQWU7c0JBRHpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlbGVjdGlvbk1vZGVsfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHtEaXJlY3RpdmUsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UGFnZUV2ZW50fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHtTb3J0fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIERhdGEsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25FeHRyYXMsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtkZWZhdWx0cywgaXNFbXB0eSwgaXNFcXVhbCwgcGlja30gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05hdHVyYWxBbGVydFNlcnZpY2V9IGZyb20gJy4uL21vZHVsZXMvYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdFBhbmVsfSBmcm9tICcuLi9tb2R1bGVzL3BhbmVscy9hYnN0cmFjdC1wYW5lbCc7XG5pbXBvcnQge3RvR3JhcGhRTERvY3RyaW5lRmlsdGVyfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC9jbGFzc2VzL2dyYXBocWwtZG9jdHJpbmUnO1xuaW1wb3J0IHtmcm9tVXJsLCB0b1VybH0gZnJvbSAnLi4vbW9kdWxlcy9zZWFyY2gvY2xhc3Nlcy91cmwnO1xuaW1wb3J0IHtOYXR1cmFsU2VhcmNoRmFjZXRzfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC90eXBlcy9mYWNldCc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hTZWxlY3Rpb25zfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC90eXBlcy92YWx1ZXMnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2Fic3RyYWN0LW1vZGVsLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9wZXJzaXN0ZW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbERhdGFTb3VyY2UsIFBhZ2luYXRlZERhdGF9IGZyb20gJy4vZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtcbiAgICBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyLFxuICAgIFBhZ2luYXRpb25JbnB1dCxcbiAgICBRdWVyeVZhcmlhYmxlcyxcbiAgICBTb3J0aW5nLFxuICAgIFNvcnRpbmdPcmRlcixcbn0gZnJvbSAnLi9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7RXh0cmFjdFRhbGwsIEV4dHJhY3RWYWxsLCBMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge05hdmlnYWJsZUl0ZW19IGZyb20gJy4vYWJzdHJhY3QtbmF2aWdhYmxlLWxpc3QnO1xuaW1wb3J0IHtmaWx0ZXIsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtBdmFpbGFibGVDb2x1bW59IGZyb20gJy4uL21vZHVsZXMvY29sdW1ucy1waWNrZXIvdHlwZXMnO1xuXG50eXBlIE1heWJlTmF2aWdhYmxlID0gTGl0ZXJhbCB8IE5hdmlnYWJsZUl0ZW08TGl0ZXJhbD47XG5cbmZ1bmN0aW9uIHVud3JhcE5hdmlnYWJsZShpdGVtOiBNYXliZU5hdmlnYWJsZSk6IExpdGVyYWwge1xuICAgIGlmICgnaXRlbScgaW4gaXRlbSAmJiAnaGFzTmF2aWdhdGlvbicgaW4gaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5pdGVtO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtO1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaGVscHMgbWFuYWdpbmcgYSBsaXN0IG9mIHBhZ2luYXRlZCBpdGVtcyB0aGF0IGNhbiBiZSBmaWx0ZXJlZCxcbiAqIHNlbGVjdGVkLCBhbmQgdGhlbiBidWxrIGFjdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBvbiBzZWxlY3Rpb24uXG4gKlxuICogQ29tcG9uZW50cyBpbmhlcml0aW5nIGZyb20gdGhpcyBjbGFzcyBjYW4gYmUgdXNlZCBhcyBzdGFuZGFsb25lIHdpdGggaW5wdXQgYXR0cmlidXRlcy5cbiAqXG4gKiBVc2FnZSA6XG4gKiA8bmF0dXJhbC1teS1saXN0aW5nIFtmb3JjZWRWYXJpYWJsZXNdPVwie2ZpbHRlcjouLi59XCIgW3NlbGVjdGVkQ29sdW1uc109XCJbJ2NvbDEnXVwiIFtwZXJzaXN0U2VhcmNoXT1cImZhbHNlXCI+XG4gKi9cblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdExpc3Q8XG4gICAgICAgIFRTZXJ2aWNlIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlPFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgUGFnaW5hdGVkRGF0YTxMaXRlcmFsPixcbiAgICAgICAgICAgIFF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55XG4gICAgICAgID4sXG4gICAgICAgIC8vIEluIG1vc3QgY2FzZSB0aGlzIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGJ5IGluaGVyaXRpbmcgY2xhc3Nlcy5cbiAgICAgICAgLy8gSXQgc2hvdWxkIG9ubHkgYmUgc3BlY2lmaWVkIHRvIG92ZXJyaWRlIGRlZmF1bHQgaWYgdGhlIHNlcnZpY2UgaXRlbXMgYXJlXG4gICAgICAgIC8vIG1hcHBlZCB0byBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgbGlrZSBpbiBOYXR1cmFsQWJzdHJhY3ROYXZpZ2FibGVMaXN0XG4gICAgICAgIFRhbGwgZXh0ZW5kcyBQYWdpbmF0ZWREYXRhPE1heWJlTmF2aWdhYmxlPiA9IEV4dHJhY3RUYWxsPFRTZXJ2aWNlPixcbiAgICA+XG4gICAgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RQYW5lbFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICAvKipcbiAgICAgKiBXaGVyZXZlciBzZWFyY2ggc2hvdWxkIGJlIGxvYWRlZCBmcm9tIHVybC9zdG9yYWdlIGFuZCBwZXJzaXN0ZWQgaW4gaXQgdG9vLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwZXJzaXN0U2VhcmNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgY29sdW1ucyB0aGF0IGFyZSBhdmFpbGFibGUgdG8gdGhlIGVuZC11c2VyIHRvIHNlbGVjdCBmcm9tLCB2aWEgYDxuYXR1cmFsLWNvbHVtbnMtcGlja2VyPmBcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYXZhaWxhYmxlQ29sdW1uczogQXZhaWxhYmxlQ29sdW1uW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIENvbHVtbnMgbGlzdCBhZnRlciBpbnRlcmFjdGlvbiB3aXRoIGA8bmF0dXJhbC1jb2x1bW5zLXBpY2tlcj5gXG4gICAgICovXG4gICAgcHVibGljIGNvbHVtbnNGb3JUYWJsZTogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGNvbHVtbiBzZWxlY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IGhhcHBlbmVkIGFmdGVyIGA8bmF0dXJhbC1jb2x1bW5zLXBpY2tlcj5gIGluaXRpYWxpemF0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZWZhdWx0U2VsZWN0ZWRDb2x1bW5zOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVmlzaWJsZSAoY2hlY2tlZCkgY29sdW1uc1xuICAgICAqXG4gICAgICogSW5zdGVhZCBvZiB1c2luZyB0aGlzLCB5b3Ugc2hvdWxkIGNvbnNpZGVyIGNvcnJlY3RseSBjb25maWd1cmluZyBgQXZhaWxhYmxlQ29sdW1uLmNoZWNrZWRgLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZENvbHVtbnM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFNvdXJjZSBvZiB0aGUgbGlzdFxuICAgICAqL1xuICAgIHB1YmxpYyBkYXRhU291cmNlPzogTmF0dXJhbERhdGFTb3VyY2U8VGFsbD47XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3Rpb24gZm9yIGJ1bGsgYWN0aW9uc1xuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8RXh0cmFjdFRhbGw8VFNlcnZpY2U+WydpdGVtcyddWzBdPih0cnVlLCBbXSk7XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IGV4ZWN1dGVkIGFjdGlvbiBmcm9tIGJ1bGsgbWVudVxuICAgICAqL1xuICAgIHB1YmxpYyBidWxrQWN0aW9uU2VsZWN0ZWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ2VudHJhbGlzYXRpb24gb2YgcXVlcnkgdmFyaWFibGVzXG4gICAgICovXG4gICAgcHVibGljIHZhcmlhYmxlc01hbmFnZXI6IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8RXh0cmFjdFZhbGw8VFNlcnZpY2U+PiA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFxuICAgICAgICBFeHRyYWN0VmFsbDxUU2VydmljZT5cbiAgICA+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciBuYXR1cmFsLXNlYXJjaCBmYWNldHNcbiAgICAgKi9cbiAgICBwdWJsaWMgbmF0dXJhbFNlYXJjaEZhY2V0czogTmF0dXJhbFNlYXJjaEZhY2V0cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUmVzdWx0IG9mIGEgc2VhcmNoIChjYW4gYmUgcHJvdmlkZWQgYXMgaW5wdXQgZm9yIGluaXRpYWxpc2F0aW9uKVxuICAgICAqL1xuICAgIHB1YmxpYyBuYXR1cmFsU2VhcmNoU2VsZWN0aW9uczogTmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMgPSBbW11dO1xuXG4gICAgLyoqXG4gICAgICogRGF0YSBhdHRyaWJ1dGUgcHJvdmlkZWQgYnkgYWN0aXZhdGVkIHJvdXRlIHNuYXBzaG90XG4gICAgICovXG4gICAgcHVibGljIHJvdXRlRGF0YT86IERhdGE7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIHBhZ2Ugc2l6ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFnZVNpemVPcHRpb25zID0gWzUsIDI1LCA1MCwgMTAwLCAyMDBdO1xuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbCBwYWdpbmF0aW9uIHNldHVwXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRQYWdpbmF0aW9uOiBSZXF1aXJlZDxQYWdpbmF0aW9uSW5wdXQ+ID0ge1xuICAgICAgICBvZmZzZXQ6IG51bGwsXG4gICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgcGFnZVNpemU6IDI1LFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsIHNvcnRpbmdcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFNvcnRpbmc/OiBBcnJheTxTb3J0aW5nPjtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBhbGVydFNlcnZpY2UgPSBpbmplY3QoTmF0dXJhbEFsZXJ0U2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBlcnNpc3RlbmNlU2VydmljZSA9IGluamVjdChOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc2VydmljZTogVFNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYXJpYWJsZXMgdGhhdCBhcmUgYWx3YXlzIGZvcmNlZCBvbiBhIGxpc3QsIGluIGFkZGl0aW9uIHRvIHdoYXRldmVyIHRoZSBlbmQtdXNlciBtaWdodCBzZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZm9yY2VkVmFyaWFibGVzKHZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JjZWRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIGNoYW5nZSwgY2hlY2sgRG9jdW1lbnRzQ29tcG9uZW50IHRoYXQgb3ZlcnJpZGVzIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBjYWxsaW5nIHN1cGVyLm5nT25Jbml0KCkuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvdXRlRGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YTtcblxuICAgICAgICB0aGlzLmluaXRGcm9tUm91dGUoKTtcbiAgICAgICAgdGhpcy5pbml0RnJvbVBlcnNpc3RlZCgpO1xuXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5kZWZhdWx0cygncGFnaW5hdGlvbicsIHtwYWdpbmF0aW9uOiB0aGlzLmRlZmF1bHRQYWdpbmF0aW9ufSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuZGVmYXVsdHMoJ3NvcnRpbmcnLCB7c29ydGluZzogdGhpcy5kZWZhdWx0U29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTmF0dXJhbERhdGFTb3VyY2U8VGFsbD4odGhpcy5nZXREYXRhT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcblxuICAgICAgICAvLyBVcGRhdGUgbmF0dXJhbCBzZWFyY2ggd2hlbiBoaXN0b3J5IGNoYW5nZXMgKGJhY2svZm9yd2FyZCBidXR0b25zKVxuICAgICAgICAvLyBIaXN0b3J5IHN0YXRlIGlzIGRldGVjdGFibGUgb25seSBvbiBOYXZpZ2F0aW9uU3RhcnQgKHBvcHN0YXRlIHRyaWdnZXIpXG4gICAgICAgIC8vIEJ1dCB3ZSBuZWVkIHBhcmFtZXRlcnMgZnJvbSB1cmwgYWZ0ZXIgTmF2aWdhdGlvbkVuZC4gU28gcHJvY2VlZCBpbiB0d28gc3RlcHMgd2l0aCBhIGZsYWcuXG4gICAgICAgIGxldCBpc1BvcFN0YXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0ICYmIGV2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyID09PSAncG9wc3RhdGUnKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlzUG9wU3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kICYmIGlzUG9wU3RhdGUpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXNQb3BTdGF0ZSA9IGZhbHNlOyAvLyByZXNldCBmbGFnXG4gICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IGZyb21VcmwodGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0RnJvbVVybCgnbnMnLCB0aGlzLnJvdXRlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJzaXN0IHNlYXJjaCBhbmQgdGhlbiBsYXVuY2ggd2hhdGV2ZXIgaXMgcmVxdWlyZWQgdG8gcmVmcmVzaCB0aGUgbGlzdFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWFyY2goXG4gICAgICAgIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyxcbiAgICAgICAgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMsXG4gICAgICAgIHJlc2V0UGFnaW5hdGlvbiA9IHRydWUsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIC8vIFJlc2V0IHBhZ2UgaW5kZXggdG8gcmVzdGFydCB0aGUgcGFnaW5hdGlvbiAocHJlc2VydmUgcGFnZVNpemUpXG5cbiAgICAgICAgaWYgKHJlc2V0UGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLm1lcmdlKCdwYWdpbmF0aW9uJywge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHBpY2sodGhpcy5kZWZhdWx0UGFnaW5hdGlvbiwgWydvZmZzZXQnLCAncGFnZUluZGV4J10pLFxuICAgICAgICAgICAgfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVyc2lzdCBpZiBhY3RpdmF0ZWRcbiAgICAgICAgLy8gVHdvIHBhcmFsbGVsIG5hdmlnYXRpb25zIGNvbmZsaWN0LiBXZSBmaXJzdCBwZXJzaXN0IHRoZSBzZWFyY2gsIHRoZW4gdGhlIHBhZ2luYXRpb25cbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlYXJjaCAmJiAhdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdChcbiAgICAgICAgICAgICAgICAnbnMnLFxuICAgICAgICAgICAgICAgIHRvVXJsKG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKSxcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmFnZUtleSgpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uKHBhZ2luYXRpb24sIHByb21pc2UsIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdChuYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHNvcnRpbmcgdmFyaWFibGVzIGZvciBxdWVyeSBhbmQgcGVyc2lzdCB0aGUgbmV3IHZhbHVlIGluIHVybCBhbmQgbG9jYWwgc3RvcmFnZVxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG5vdCBwZXJzaXN0ZWRcbiAgICAgKiBAcGFyYW0gc29ydGluZ0V2ZW50cyBMaXN0IG9mIG1hdGVyaWFsIHNvcnRpbmcgZXZlbnRzXG4gICAgICovXG4gICAgcHVibGljIHNvcnRpbmcoc29ydGluZ0V2ZW50czogKFNvcnQgJiBQYXJ0aWFsPFBpY2s8U29ydGluZywgJ251bGxBc0hpZ2hlc3QnIHwgJ2VtcHR5U3RyaW5nQXNIaWdoZXN0Jz4+KVtdKTogdm9pZCB7XG4gICAgICAgIC8vIFJlc2V0IHBhZ2UgaW5kZXggdG8gcmVzdGFydCB0aGUgcGFnaW5hdGlvbiAocHJlc2VydmUgcGFnZVNpemUpXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5tZXJnZSgncGFnaW5hdGlvbicsIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHBpY2sodGhpcy5kZWZhdWx0UGFnaW5hdGlvbiwgWydvZmZzZXQnLCAncGFnZUluZGV4J10pLFxuICAgICAgICB9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG5cbiAgICAgICAgLy8gUHJlc2VydmUgb25seSBzb3J0aW5nIGV2ZW50cyB3aXRoIGRpcmVjdGlvbiBhbmQgY29udmVydCBpbnRvIG5hdHVyYWwvZ3JhcGhxbCBTb3J0aW5nIHR5cGVcbiAgICAgICAgbGV0IHNvcnRpbmc6IFNvcnRpbmdbXSA9IHNvcnRpbmdFdmVudHNcbiAgICAgICAgICAgIC5maWx0ZXIoZSA9PiAhIWUuZGlyZWN0aW9uKVxuICAgICAgICAgICAgLm1hcChzb3J0aW5nRXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHM6IFNvcnRpbmcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzb3J0aW5nRXZlbnQuYWN0aXZlLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoc29ydGluZ0V2ZW50LmRpcmVjdGlvbiA9PT0gJ2FzYycpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5vcmRlciA9IFNvcnRpbmdPcmRlci5BU0M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzb3J0aW5nRXZlbnQuZGlyZWN0aW9uID09PSAnZGVzYycpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5vcmRlciA9IFNvcnRpbmdPcmRlci5ERVNDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgnbnVsbEFzSGlnaGVzdCcgaW4gc29ydGluZ0V2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHMubnVsbEFzSGlnaGVzdCA9IHNvcnRpbmdFdmVudC5udWxsQXNIaWdoZXN0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgnZW1wdHlTdHJpbmdBc0hpZ2hlc3QnIGluIHNvcnRpbmdFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICBzLmVtcHR5U3RyaW5nQXNIaWdoZXN0ID0gc29ydGluZ0V2ZW50LmVtcHR5U3RyaW5nQXNIaWdoZXN0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRW1wdHkgc29ydGluZyBmYWxsYmFja3Mgb24gZGVmYXVsdFxuICAgICAgICBpZiAoc29ydGluZy5sZW5ndGggPT09IDAgJiYgdGhpcy5kZWZhdWx0U29ydGluZykge1xuICAgICAgICAgICAgc29ydGluZyA9IHRoaXMuZGVmYXVsdFNvcnRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgc29ydGluZyBhcyBzZWFyY2ggdmFyaWFibGVcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnc29ydGluZycsIHtzb3J0aW5nOiBzb3J0aW5nfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuXG4gICAgICAgIGlmICh0aGlzLnBlcnNpc3RTZWFyY2ggJiYgIXRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgLy8gSWYgc29ydGluZyBpcyBlcXVhbCB0byBkZWZhdWx0IHNvcnRpbmcsIG51bGxpZnkgaXQgdG8gcmVtb3ZlIGZyb20gcGVyc2lzdGVuY2UgKHVybCBhbmQgc2Vzc2lvbiBzdG9yYWdlKVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3QoXG4gICAgICAgICAgICAgICAgJ3NvJyxcbiAgICAgICAgICAgICAgICBpc0VxdWFsKHNvcnRpbmcsIHRoaXMuZGVmYXVsdFNvcnRpbmcpID8gbnVsbCA6IHNvcnRpbmcsXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0b3JhZ2VLZXkoKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLmdldFBhZ2luYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbihwYWdpbmF0aW9uLCBwcm9taXNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBjdXJyZW50IHBhZ2luYXRpb24sIGVpdGhlciB0aGUgdXNlciBkZWZpbmVkIG9uZSwgb3IgdGhlIGRlZmF1bHQgb25lXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQYWdpbmF0aW9uKCk6IFBhZ2luYXRpb25JbnB1dCB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25DaGFubmVsOiBQYXJ0aWFsPEV4dHJhY3RWYWxsPFRTZXJ2aWNlPj4gfCB1bmRlZmluZWQgPSB0aGlzLnZhcmlhYmxlc01hbmFnZXIuZ2V0KCdwYWdpbmF0aW9uJyk7XG5cbiAgICAgICAgaWYgKHBhZ2luYXRpb25DaGFubmVsICYmIHBhZ2luYXRpb25DaGFubmVsLnBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIC8vIFRoZSBjYXN0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2UgVHlwZXNjcmlwdCBjb3JyZWN0bHkgbmFycm93IGRvd24gdGhlIHR5cGUgdG8gYFBhZ2luYXRpb25JbnB1dGBcbiAgICAgICAgICAgIC8vIGJ1dCBzb21laG93IHN0aWxsIGdldCBjb25mdXNlZCB3aGVuIHJldHVybmluZyBpdFxuICAgICAgICAgICAgcmV0dXJuIHBhZ2luYXRpb25DaGFubmVsLnBhZ2luYXRpb24gYXMgUGFnaW5hdGlvbklucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBhZ2luYXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHBhZ2luYXRpb24gdmFyaWFibGVzIGZvciBxdWVyeSBhbmQgcGVyc2lzdCBpbiB1cmwgYW5kIGxvY2FsIHN0b3JhZ2UgdGhlIG5ldyB2YWx1ZVxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIG5vdCBwZXJzaXN0ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCBOYXR1cmFsIG9yIFBhZ2luYXRvciBQYWdlRXZlbnRcbiAgICAgKiBAcGFyYW0gZGVmZXIgUHJvbWlzZSAodXN1YWxseSBhIHJvdXRlIHByb21pc2UpIHRoYXQgZGVmZXJzIHRoZSByZWRpcmVjdGlvbiBmcm9tIHRoaXMgY2FsbCB0byBwcmV2ZW50IHJvdXRlIG5hdmlnYXRpb24gY29sbGlzaW9uXG4gICAgICogQHBhcmFtIG5hdmlnYXRpb25FeHRyYXMgQW5ndWxhciByb3V0ZXIgbmF2aWdhdGlvbiBvcHRpb25zLiBJcyByZWxldmFudCBvbmx5IGlmIHBlcnNpc3RTZWFyY2ggaXMgdHJ1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBwYWdpbmF0aW9uKFxuICAgICAgICBldmVudDogUGFnaW5hdGlvbklucHV0IHwgUGFnZUV2ZW50LFxuICAgICAgICBkZWZlcj86IFByb21pc2U8dW5rbm93bj4sXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICk6IHZvaWQge1xuICAgICAgICBsZXQgcGFnaW5hdGlvbjogUGFnaW5hdGlvbklucHV0ID0gdGhpcy5kZWZhdWx0UGFnaW5hdGlvbjtcbiAgICAgICAgbGV0IGZvclBlcnNpc3RlbmNlOiBQYWdpbmF0aW9uSW5wdXQgfCBudWxsID0gbnVsbDtcblxuICAgICAgICAvLyBDb252ZXJ0IHRvIG5hdHVyYWwvZ3JhcGhxbCBmb3JtYXQsIGFkZGluZyBtaXNzaW5nIGF0dHJpYnV0ZXNcbiAgICAgICAgbGV0IG5hdHVyYWxFdmVudDogUGFnaW5hdGlvbklucHV0ID0gcGljayhldmVudCwgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0UGFnaW5hdGlvbikpOyAvLyBvYmplY3Qgd2l0aCBvbmx5IFBhZ2luYXRpb25JbnB1dCBhdHRyaWJ1dGVzXG4gICAgICAgIG5hdHVyYWxFdmVudCA9IGRlZmF1bHRzKG5hdHVyYWxFdmVudCwgdGhpcy5kZWZhdWx0UGFnaW5hdGlvbik7IC8vIERlZmF1bHQgd2l0aCBjb250cm9sbGVyIHZhbHVlc1xuXG4gICAgICAgIGlmICghaXNFcXVhbChuYXR1cmFsRXZlbnQsIHRoaXMuZGVmYXVsdFBhZ2luYXRpb24pKSB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uID0gZm9yUGVyc2lzdGVuY2UgPSBuYXR1cmFsRXZlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdwYWdpbmF0aW9uJywge3BhZ2luYXRpb259IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG5cbiAgICAgICAgdGhpcy5wZXJzaXN0UGFnaW5hdGlvbihmb3JQZXJzaXN0ZW5jZSwgZGVmZXIsIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwZXJzaXN0UGFnaW5hdGlvbihcbiAgICAgICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbklucHV0IHwgbnVsbCxcbiAgICAgICAgZGVmZXI/OiBQcm9taXNlPHVua25vd24+LFxuICAgICAgICBuYXZpZ2F0aW9uRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcyxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlYXJjaCAmJiAhdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICAvLyBEZWNsYXJlIHBlcnNpc3QgZnVuY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IHBlcnNpc3QgPSAodmFsdWU6IFBhZ2luYXRpb25JbnB1dCB8IG51bGwpOiBQcm9taXNlPGJvb2xlYW4+ID0+XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdCgncGEnLCB2YWx1ZSwgdGhpcy5yb3V0ZSwgdGhpcy5nZXRTdG9yYWdlS2V5KCksIG5hdmlnYXRpb25FeHRyYXMpO1xuXG4gICAgICAgICAgICAvLyBDYWxsIGZ1bmN0aW9uIGRpcmVjdGx5IG9yIHdoZW4gcHJvbWlzZSBpcyByZXNvbHZlZFxuICAgICAgICAgICAgaWYgKGRlZmVyKSB7XG4gICAgICAgICAgICAgICAgZGVmZXIudGhlbigoKSA9PiBwZXJzaXN0KHBhZ2luYXRpb24pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVyc2lzdChwYWdpbmF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgYWxsIHJvd3MgaWYgdGhleSBhcmUgbm90IGFsbCBzZWxlY3RlZDsgb3RoZXJ3aXNlIGNsZWFyIHNlbGVjdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBtYXN0ZXJUb2dnbGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uaXRlbXMuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcE5hdmlnYWJsZShyb3cpO1xuICAgICAgICAgICAgICAgIGlmICh1bndyYXBwZWQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KHVud3JhcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgZWxlbWVudHMgbWF0Y2hlcyB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3NcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XG4gICAgICAgIGxldCBudW1Sb3dzID0gMDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5pdGVtcy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bndyYXBwZWQgPSB1bndyYXBOYXZpZ2FibGUocm93KTtcbiAgICAgICAgICAgIGlmICh1bndyYXBwZWQuaWQpIHtcbiAgICAgICAgICAgICAgICBudW1Sb3dzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBhIGJ1bGsgYWN0aW9uIGlzIHNlbGVjdGVkXG4gICAgICovXG4gICAgcHVibGljIGJ1bGtBY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIGV4ZWN1dGUgYSBidWxrIGFjdGlvbiB3aXRob3V0IHNlbGVjdGluZyBvbmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKHRoaXMuYnVsa0FjdGlvblNlbGVjdGVkIGluIHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyeWluZyB0byBleGVjdXRlIGEgYnVsayBhY3Rpb24gdGhhdCBkb2VzIG5vdCBleGlzdDogJyArIHRoaXMuYnVsa0FjdGlvblNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgICh0aGlzIGFzIGFueSlbdGhpcy5idWxrQWN0aW9uU2VsZWN0ZWRdKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW4gbm9uLXBhbmVsIGNvbnRleHQsIGhlYWRlciBpcyBhbHdheXMgdmlzaWJsZS5cbiAgICAgKiBJbiBwYW5lbCBjb250ZXh0LCBoZWFkZXIgaXMgaGlkZGVuIHdoZW4gbm8gcmVzdWx0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd0hlYWRlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzUGFuZWwgfHwgKHRoaXMuaXNQYW5lbCAmJiB0aGlzLnNob3dUYWJsZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2ggaXMgdmlzaWJsZSBpbiBtb3N0IGNhc2VzLCBidXQgaGlkZGVuIG9uIGEgcGFuZWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1NlYXJjaCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzUGFuZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFibGUgc2hvdWxkIGJlIHNob3duIG9ubHkgd2hlbiB0aGVyZSBpcyBkYXRhXG4gICAgICovXG4gICAgcHVibGljIHNob3dUYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5kYXRhU291cmNlICYmICEhdGhpcy5kYXRhU291cmNlLmRhdGEgJiYgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBObyByZXN1bHRzIGlzIHNob3duIHdoZW4gdGhlcmUgaXMgbm8gaXRlbXMsIGJ1dCBvbmx5IGluIG5vbi1wYW5lbCBjb250ZXh0IG9ubHkuXG4gICAgICogSW4gcGFuZWxzIHdlIHdhbnQgZGlzY3JldGUgbW9kZSwgdGhlcmUgaXMgbm8gc2VhcmNoIGFuZCBubyBcIm5vLXJlc3VsdHNcIlxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93Tm9SZXN1bHRzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbCAmJiAhIXRoaXMuZGF0YVNvdXJjZSAmJiAhIXRoaXMuZGF0YVNvdXJjZS5kYXRhICYmIHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGZyb20gcm91dGUuXG4gICAgICpcbiAgICAgKiBVc2VzIGRhdGEgcHJvdmlkZWQgYnkgcm91dGVyIHN1Y2ggYXM6XG4gICAgICpcbiAgICAgKiAtIGByb3V0ZS5kYXRhLmZvcmNlZFZhcmlhYmxlc2BcbiAgICAgKiAtIGByb3V0ZS5kYXRhLmF2YWlsYWJsZUNvbHVtbnNgXG4gICAgICogLSBgcm91dGUuZGF0YS5zZWxlY3RlZENvbHVtbnNgXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGluaXRGcm9tUm91dGUoKTogdm9pZCB7XG4gICAgICAgIC8vIFZhcmlhYmxlc1xuICAgICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmZvcmNlZFZhcmlhYmxlcykge1xuICAgICAgICAgICAgdGhpcy5hcHBseUZvcmNlZFZhcmlhYmxlcyh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZm9yY2VkVmFyaWFibGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEF2YWlsYWJsZSBjb2x1bW5zXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuYXZhaWxhYmxlQ29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmF2YWlsYWJsZUNvbHVtbnM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb2x1bW5zXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5zZWxlY3RlZENvbHVtbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGF0YU9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxUYWxsPiB7XG4gICAgICAgIC8vIEhlcmUgdGhlIGNhc3RpbmcgaXMgYSBiaXQgdW5mb3J0dW5hdGUgYnV0IHJlcXVpcmVkIGJlY2F1c2UgTmF0dXJhbEFic3RyYWN0TmF2aWdhYmxlTGlzdFxuICAgICAgICAvLyBicmVha3MgdGhlIGRhdGEgc3RydWN0dXJlIGNvbnZlbnRpb24gKGJ5IHdyYXBwaW5nIGl0ZW1zIGluIGEgc3RydWN0dXJlKS4gSWRlYWxseSB3ZSBzaG91bGQgcmVtb3ZlXG4gICAgICAgIC8vIHRoZSBjYXN0aW5nIGFuZCByZXNvbHZlIHRoaW5ncyBpbiBhIGJldHRlciB3YXksIGJ1dCB0aGF0J3MgdG9vIG11Y2ggd29yayBmb3Igbm93XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VcbiAgICAgICAgICAgIC53YXRjaEFsbCh0aGlzLnZhcmlhYmxlc01hbmFnZXIgYXMgdW5rbm93biBhcyBhbnkpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkgYXMgdW5rbm93biBhcyBPYnNlcnZhYmxlPFRhbGw+O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0RnJvbVBlcnNpc3RlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBlcnNpc3RTZWFyY2ggfHwgdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdG9yYWdlS2V5ID0gdGhpcy5nZXRTdG9yYWdlS2V5KCk7XG5cbiAgICAgICAgLy8gUGFnaW5hdGlvbiA6IHBhXG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXQoJ3BhJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSk7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdwYWdpbmF0aW9uJywge3BhZ2luYXRpb259IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3J0aW5nIDogc29cbiAgICAgICAgY29uc3Qgc29ydGluZyA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmdldCgnc28nLCB0aGlzLnJvdXRlLCBzdG9yYWdlS2V5KTtcbiAgICAgICAgaWYgKHNvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3NvcnRpbmcnLCB7c29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbHVtbnNcbiAgICAgICAgY29uc3QgcGVyc2lzdGVkQ29sdW1ucyA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmdldCgnY29sJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSk7XG4gICAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVkQ29sdW1ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gcGVyc2lzdGVkQ29sdW1ucy5zcGxpdCgnLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTmF0dXJhbCBzZWFyY2ggOiBuc1xuICAgICAgICB0aGlzLm5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zID0gZnJvbVVybCh0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXQoJ25zJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSkpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlYXJjaEFuZFJlZnJlc2hMaXN0KHRoaXMubmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMsIHRydWUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdChcbiAgICAgICAgbmF0dXJhbFNlYXJjaFNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zLFxuICAgICAgICBpZ25vcmVFbXB0eUZpbHRlciA9IGZhbHNlLFxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0b0dyYXBoUUxEb2N0cmluZUZpbHRlcih0aGlzLm5hdHVyYWxTZWFyY2hGYWNldHMsIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKTtcblxuICAgICAgICBpZiAoaWdub3JlRW1wdHlGaWx0ZXIgJiYgaXNFbXB0eShmaWx0ZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCduYXR1cmFsLXNlYXJjaCcsIHtmaWx0ZXJ9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGN1cnJlbnQgdXJsIGV4Y2x1ZGluZyBsYXN0IHJvdXRlIHBhcmFtZXRlcnM7XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFN0b3JhZ2VLZXkoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XG4gICAgICAgIHVybFRyZWUucm9vdC5jaGlsZHJlbi5wcmltYXJ5LnNlZ21lbnRzW3VybFRyZWUucm9vdC5jaGlsZHJlbi5wcmltYXJ5LnNlZ21lbnRzLmxlbmd0aCAtIDFdLnBhcmFtZXRlcnMgPSB7fTtcbiAgICAgICAgcmV0dXJuIHVybFRyZWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYnVsa2REZWxldGVDb25maXJtYXRpb24oKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsZXJ0U2VydmljZS5jb25maXJtKFxuICAgICAgICAgICAgJGxvY2FsaXplYFN1cHByZXNzaW9uYCxcbiAgICAgICAgICAgICRsb2NhbGl6ZWBWb3VsZXotdm91cyBzdXBwcmltZXIgZMOpZmluaXRpdmVtZW50IGxlcyDDqWzDqW1lbnRzIHPDqWxlY3Rpb25uw6lzID9gLFxuICAgICAgICAgICAgJGxvY2FsaXplYFN1cHByaW1lciBkw6lmaW5pdGl2ZW1lbnRgLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBtdWx0aXBsZSBpdGVtcyBhdCBvbmNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGJ1bGtEZWxldGUoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgICAgICB0aGlzLmJ1bGtkRGVsZXRlQ29uZmlybWF0aW9uKCkuc3Vic2NyaWJlKGNvbmZpcm1lZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgb3VyIG9iamVjdHMgaGF2ZSBJRC4gVGhpcyBpcyB0cnVlIGluIGFsbW9zdCBhbGwgY2FzZXMuIEJ1dCBpZlxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIG5vdCwgbGlrZSBBdHRyaWJ1dGVSZXBvcnRDb21wb25lbnQsIHRoZW4gdGhlIGluaGVyaXRpbmcgY2xhc3MgbXVzdFxuICAgICAgICAgICAgICAgIC8vIG5ldmVyIGNhbGwgdGhpcyBtZXRob2QuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQgYXMge2lkOiBzdHJpbmd9W107XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2UuZGVsZXRlKHNlbGVjdGlvbikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbygkbG9jYWxpemVgU3VwcHJpbcOpYCk7XG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlGb3JjZWRWYXJpYWJsZXModmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyk6IHZvaWQge1xuICAgICAgICBpZiAodmFyaWFibGVzLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnZm9yY2VkLWZpbHRlcicsIHtmaWx0ZXI6IHZhcmlhYmxlcy5maWx0ZXJ9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFyaWFibGVzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3BhZ2luYXRpb24nLCB7cGFnaW5hdGlvbjogdmFyaWFibGVzLnBhZ2luYXRpb259IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFyaWFibGVzLnNvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3NvcnRpbmcnLCB7c29ydGluZzogdmFyaWFibGVzLnNvcnRpbmd9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0Q29sdW1ucyhjb2x1bW5zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtbnNGb3JUYWJsZSA9IGNvbHVtbnM7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBlcnNpc3RTZWFyY2ggfHwgdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0aW9uIHdlIHJlY2VpdmUgaXMgdGhlIGRlZmF1bHQgb25lIG1hZGUgYnkgYDxuYXR1cmFsLWNvbHVtbnMtcGlja2VyPmBcbiAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRTZWxlY3RlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNlbGVjdGVkQ29sdW1ucyA9IGNvbHVtbnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBQZXJzaXN0IG9ubHkgaWYgd2FudGVkIGNvbHVtbnMgYXJlIGRpZmZlcmVudCBmcm9tIGRlZmF1bHQgc2VsZWN0aW9uXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGlzRXF1YWwodGhpcy5kZWZhdWx0U2VsZWN0ZWRDb2x1bW5zLCBjb2x1bW5zKSA/IG51bGwgOiBjb2x1bW5zLmpvaW4oJywnKTtcbiAgICAgICAgICAgIHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3QoJ2NvbCcsIHZhbHVlLCB0aGlzLnJvdXRlLCB0aGlzLmdldFN0b3JhZ2VLZXkoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
434
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL2Fic3RyYWN0LWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFHMUUsT0FBTyxFQUFDLGNBQWMsRUFBUSxhQUFhLEVBQW9CLGVBQWUsRUFBRSxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRyxPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzNELE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDbkYsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUk3RCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsaUJBQWlCLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFDSCw0QkFBNEIsRUFJNUIsWUFBWSxHQUNmLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLakQsU0FBUyxlQUFlLENBQUMsSUFBb0I7SUFDekMsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLGVBQWUsSUFB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QUFHLENBQUMsQ0FBQztZQUN2RixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUNuRjtJQUNMLENBQUM7OEdBOWhCUSxtQkFBbUI7a0dBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFEL0IsU0FBUzs2RkF5QlUsYUFBYTtzQkFBNUIsS0FBSztnQkFLVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBaUJVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBdUVLLGVBQWU7c0JBRHpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlbGVjdGlvbk1vZGVsfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHtEaXJlY3RpdmUsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UGFnZUV2ZW50fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHtTb3J0fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIERhdGEsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25FeHRyYXMsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtkZWZhdWx0cywgaXNFbXB0eSwgaXNFcXVhbCwgcGlja30gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05hdHVyYWxBbGVydFNlcnZpY2V9IGZyb20gJy4uL21vZHVsZXMvYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdFBhbmVsfSBmcm9tICcuLi9tb2R1bGVzL3BhbmVscy9hYnN0cmFjdC1wYW5lbCc7XG5pbXBvcnQge3RvR3JhcGhRTERvY3RyaW5lRmlsdGVyfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC9jbGFzc2VzL2dyYXBocWwtZG9jdHJpbmUnO1xuaW1wb3J0IHtmcm9tVXJsLCB0b1VybH0gZnJvbSAnLi4vbW9kdWxlcy9zZWFyY2gvY2xhc3Nlcy91cmwnO1xuaW1wb3J0IHtOYXR1cmFsU2VhcmNoRmFjZXRzfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC90eXBlcy9mYWNldCc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hTZWxlY3Rpb25zfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC90eXBlcy92YWx1ZXMnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2Fic3RyYWN0LW1vZGVsLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9wZXJzaXN0ZW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbERhdGFTb3VyY2UsIFBhZ2luYXRlZERhdGF9IGZyb20gJy4vZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtcbiAgICBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyLFxuICAgIFBhZ2luYXRpb25JbnB1dCxcbiAgICBRdWVyeVZhcmlhYmxlcyxcbiAgICBTb3J0aW5nLFxuICAgIFNvcnRpbmdPcmRlcixcbn0gZnJvbSAnLi9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7RXh0cmFjdFRhbGwsIEV4dHJhY3RWYWxsLCBMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge05hdmlnYWJsZUl0ZW19IGZyb20gJy4vYWJzdHJhY3QtbmF2aWdhYmxlLWxpc3QnO1xuaW1wb3J0IHtmaWx0ZXIsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtBdmFpbGFibGVDb2x1bW59IGZyb20gJy4uL21vZHVsZXMvY29sdW1ucy1waWNrZXIvdHlwZXMnO1xuXG50eXBlIE1heWJlTmF2aWdhYmxlID0gTGl0ZXJhbCB8IE5hdmlnYWJsZUl0ZW08TGl0ZXJhbD47XG5cbmZ1bmN0aW9uIHVud3JhcE5hdmlnYWJsZShpdGVtOiBNYXliZU5hdmlnYWJsZSk6IExpdGVyYWwge1xuICAgIGlmICgnaXRlbScgaW4gaXRlbSAmJiAnaGFzTmF2aWdhdGlvbicgaW4gaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5pdGVtO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtO1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaGVscHMgbWFuYWdpbmcgYSBsaXN0IG9mIHBhZ2luYXRlZCBpdGVtcyB0aGF0IGNhbiBiZSBmaWx0ZXJlZCxcbiAqIHNlbGVjdGVkLCBhbmQgdGhlbiBidWxrIGFjdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBvbiBzZWxlY3Rpb24uXG4gKlxuICogQ29tcG9uZW50cyBpbmhlcml0aW5nIGZyb20gdGhpcyBjbGFzcyBjYW4gYmUgdXNlZCBhcyBzdGFuZGFsb25lIHdpdGggaW5wdXQgYXR0cmlidXRlcy5cbiAqXG4gKiBVc2FnZSA6XG4gKiA8bmF0dXJhbC1teS1saXN0aW5nIFtmb3JjZWRWYXJpYWJsZXNdPVwie2ZpbHRlcjouLi59XCIgW3NlbGVjdGVkQ29sdW1uc109XCJbJ2NvbDEnXVwiIFtwZXJzaXN0U2VhcmNoXT1cImZhbHNlXCI+XG4gKi9cblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdExpc3Q8XG4gICAgICAgIFRTZXJ2aWNlIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlPFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgUGFnaW5hdGVkRGF0YTxMaXRlcmFsPixcbiAgICAgICAgICAgIFF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55XG4gICAgICAgID4sXG4gICAgICAgIC8vIEluIG1vc3QgY2FzZSB0aGlzIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGJ5IGluaGVyaXRpbmcgY2xhc3Nlcy5cbiAgICAgICAgLy8gSXQgc2hvdWxkIG9ubHkgYmUgc3BlY2lmaWVkIHRvIG92ZXJyaWRlIGRlZmF1bHQgaWYgdGhlIHNlcnZpY2UgaXRlbXMgYXJlXG4gICAgICAgIC8vIG1hcHBlZCB0byBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgbGlrZSBpbiBOYXR1cmFsQWJzdHJhY3ROYXZpZ2FibGVMaXN0XG4gICAgICAgIFRhbGwgZXh0ZW5kcyBQYWdpbmF0ZWREYXRhPE1heWJlTmF2aWdhYmxlPiA9IEV4dHJhY3RUYWxsPFRTZXJ2aWNlPixcbiAgICA+XG4gICAgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RQYW5lbFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHNlYXJjaCBzaG91bGQgYmUgbG9hZGVkIGZyb20gdXJsL3N0b3JhZ2UgYW5kIHBlcnNpc3RlZCBpbiBpdCB0b28uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHBlcnNpc3RTZWFyY2ggPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBjb2x1bW5zIHRoYXQgYXJlIGF2YWlsYWJsZSB0byB0aGUgZW5kLXVzZXIgdG8gc2VsZWN0IGZyb20sIHZpYSBgPG5hdHVyYWwtY29sdW1ucy1waWNrZXI+YFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhdmFpbGFibGVDb2x1bW5zOiBBdmFpbGFibGVDb2x1bW5bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQ29sdW1ucyBsaXN0IGFmdGVyIGludGVyYWN0aW9uIHdpdGggYDxuYXR1cmFsLWNvbHVtbnMtcGlja2VyPmBcbiAgICAgKi9cbiAgICBwdWJsaWMgY29sdW1uc0ZvclRhYmxlOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgY29sdW1uIHNlbGVjdGlvbiB0aGF0IGF1dG9tYXRpY2FsbHkgaGFwcGVuZWQgYWZ0ZXIgYDxuYXR1cmFsLWNvbHVtbnMtcGlja2VyPmAgaW5pdGlhbGl6YXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlZmF1bHRTZWxlY3RlZENvbHVtbnM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBWaXNpYmxlIChjaGVja2VkKSBjb2x1bW5zXG4gICAgICpcbiAgICAgKiBJbnN0ZWFkIG9mIHVzaW5nIHRoaXMsIHlvdSBzaG91bGQgY29uc2lkZXIgY29ycmVjdGx5IGNvbmZpZ3VyaW5nIGBBdmFpbGFibGVDb2x1bW4uY2hlY2tlZGAuXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkQ29sdW1ucz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogU291cmNlIG9mIHRoZSBsaXN0XG4gICAgICovXG4gICAgcHVibGljIGRhdGFTb3VyY2U/OiBOYXR1cmFsRGF0YVNvdXJjZTxUYWxsPjtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGlvbiBmb3IgYnVsayBhY3Rpb25zXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxFeHRyYWN0VGFsbDxUU2VydmljZT5bJ2l0ZW1zJ11bMF0+KHRydWUsIFtdKTtcblxuICAgIC8qKlxuICAgICAqIE5leHQgZXhlY3V0ZWQgYWN0aW9uIGZyb20gYnVsayBtZW51XG4gICAgICovXG4gICAgcHVibGljIGJ1bGtBY3Rpb25TZWxlY3RlZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBDZW50cmFsaXNhdGlvbiBvZiBxdWVyeSB2YXJpYWJsZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgdmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxFeHRyYWN0VmFsbDxUU2VydmljZT4+ID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8XG4gICAgICAgIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPlxuICAgID4oKTtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIG5hdHVyYWwtc2VhcmNoIGZhY2V0c1xuICAgICAqL1xuICAgIHB1YmxpYyBuYXR1cmFsU2VhcmNoRmFjZXRzOiBOYXR1cmFsU2VhcmNoRmFjZXRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBSZXN1bHQgb2YgYSBzZWFyY2ggKGNhbiBiZSBwcm92aWRlZCBhcyBpbnB1dCBmb3IgaW5pdGlhbGlzYXRpb24pXG4gICAgICovXG4gICAgcHVibGljIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IFtbXV07XG5cbiAgICAvKipcbiAgICAgKiBEYXRhIGF0dHJpYnV0ZSBwcm92aWRlZCBieSBhY3RpdmF0ZWQgcm91dGUgc25hcHNob3RcbiAgICAgKi9cbiAgICBwdWJsaWMgcm91dGVEYXRhPzogRGF0YTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgcGFnZSBzaXplc1xuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBwYWdlU2l6ZU9wdGlvbnMgPSBbNSwgMjUsIDUwLCAxMDAsIDIwMF07XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsIHBhZ2luYXRpb24gc2V0dXBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFBhZ2luYXRpb246IFJlcXVpcmVkPFBhZ2luYXRpb25JbnB1dD4gPSB7XG4gICAgICAgIG9mZnNldDogbnVsbCxcbiAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICBwYWdlU2l6ZTogMjUsXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgc29ydGluZ1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZWZhdWx0U29ydGluZz86IEFycmF5PFNvcnRpbmc+O1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0U2VydmljZSA9IGluamVjdChOYXR1cmFsQWxlcnRTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGVyc2lzdGVuY2VTZXJ2aWNlID0gaW5qZWN0KE5hdHVyYWxQZXJzaXN0ZW5jZVNlcnZpY2UpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBzZXJ2aWNlOiBUU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhcmlhYmxlcyB0aGF0IGFyZSBhbHdheXMgZm9yY2VkIG9uIGEgbGlzdCwgaW4gYWRkaXRpb24gdG8gd2hhdGV2ZXIgdGhlIGVuZC11c2VyIG1pZ2h0IHNlbGVjdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBmb3JjZWRWYXJpYWJsZXModmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHZhcmlhYmxlcykge1xuICAgICAgICAgICAgdGhpcy5hcHBseUZvcmNlZFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgY2hhbmdlLCBjaGVjayBEb2N1bWVudHNDb21wb25lbnQgdGhhdCBvdmVycmlkZXMgdGhpcyBmdW5jdGlvbiB3aXRob3V0IGNhbGxpbmcgc3VwZXIubmdPbkluaXQoKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm91dGVEYXRhID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhO1xuXG4gICAgICAgIHRoaXMuaW5pdEZyb21Sb3V0ZSgpO1xuICAgICAgICB0aGlzLmluaXRGcm9tUGVyc2lzdGVkKCk7XG5cbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLmRlZmF1bHRzKCdwYWdpbmF0aW9uJywge3BhZ2luYXRpb246IHRoaXMuZGVmYXVsdFBhZ2luYXRpb259IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5kZWZhdWx0cygnc29ydGluZycsIHtzb3J0aW5nOiB0aGlzLmRlZmF1bHRTb3J0aW5nfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBOYXR1cmFsRGF0YVNvdXJjZTxUYWxsPih0aGlzLmdldERhdGFPYnNlcnZhYmxlKCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBuYXR1cmFsIHNlYXJjaCB3aGVuIGhpc3RvcnkgY2hhbmdlcyAoYmFjay9mb3J3YXJkIGJ1dHRvbnMpXG4gICAgICAgIC8vIEhpc3Rvcnkgc3RhdGUgaXMgZGV0ZWN0YWJsZSBvbmx5IG9uIE5hdmlnYXRpb25TdGFydCAocG9wc3RhdGUgdHJpZ2dlcilcbiAgICAgICAgLy8gQnV0IHdlIG5lZWQgcGFyYW1ldGVycyBmcm9tIHVybCBhZnRlciBOYXZpZ2F0aW9uRW5kLiBTbyBwcm9jZWVkIGluIHR3byBzdGVwcyB3aXRoIGEgZmxhZy5cbiAgICAgICAgbGV0IGlzUG9wU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQgJiYgZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZScpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXNQb3BTdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgaXNQb3BTdGF0ZSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpc1BvcFN0YXRlID0gZmFsc2U7IC8vIHJlc2V0IGZsYWdcbiAgICAgICAgICAgICAgICB0aGlzLm5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zID0gZnJvbVVybCh0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXRGcm9tVXJsKCducycsIHRoaXMucm91dGUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcnNpc3Qgc2VhcmNoIGFuZCB0aGVuIGxhdW5jaCB3aGF0ZXZlciBpcyByZXF1aXJlZCB0byByZWZyZXNoIHRoZSBsaXN0XG4gICAgICovXG4gICAgcHVibGljIHNlYXJjaChcbiAgICAgICAgbmF0dXJhbFNlYXJjaFNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zLFxuICAgICAgICBuYXZpZ2F0aW9uRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcyxcbiAgICAgICAgcmVzZXRQYWdpbmF0aW9uID0gdHJ1ZSxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgLy8gUmVzZXQgcGFnZSBpbmRleCB0byByZXN0YXJ0IHRoZSBwYWdpbmF0aW9uIChwcmVzZXJ2ZSBwYWdlU2l6ZSlcblxuICAgICAgICBpZiAocmVzZXRQYWdpbmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIubWVyZ2UoJ3BhZ2luYXRpb24nLCB7XG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogcGljayh0aGlzLmRlZmF1bHRQYWdpbmF0aW9uLCBbJ29mZnNldCcsICdwYWdlSW5kZXgnXSksXG4gICAgICAgICAgICB9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQZXJzaXN0IGlmIGFjdGl2YXRlZFxuICAgICAgICAvLyBUd28gcGFyYWxsZWwgbmF2aWdhdGlvbnMgY29uZmxpY3QuIFdlIGZpcnN0IHBlcnNpc3QgdGhlIHNlYXJjaCwgdGhlbiB0aGUgcGFnaW5hdGlvblxuICAgICAgICBpZiAodGhpcy5wZXJzaXN0U2VhcmNoICYmICF0aGlzLmlzUGFuZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0KFxuICAgICAgICAgICAgICAgICducycsXG4gICAgICAgICAgICAgICAgdG9VcmwobmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMpLFxuICAgICAgICAgICAgICAgIHRoaXMucm91dGUsXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTdG9yYWdlS2V5KCksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBwYWdpbmF0aW9uID0gdGhpcy5nZXRQYWdpbmF0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24ocGFnaW5hdGlvbiwgcHJvbWlzZSwgbmF2aWdhdGlvbkV4dHJhcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlYXJjaEFuZFJlZnJlc2hMaXN0KG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2Ugc29ydGluZyB2YXJpYWJsZXMgZm9yIHF1ZXJ5IGFuZCBwZXJzaXN0IHRoZSBuZXcgdmFsdWUgaW4gdXJsIGFuZCBsb2NhbCBzdG9yYWdlXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgbm90IHBlcnNpc3RlZFxuICAgICAqIEBwYXJhbSBzb3J0aW5nRXZlbnRzIExpc3Qgb2YgbWF0ZXJpYWwgc29ydGluZyBldmVudHNcbiAgICAgKi9cbiAgICBwdWJsaWMgc29ydGluZyhzb3J0aW5nRXZlbnRzOiAoU29ydCAmIFBhcnRpYWw8UGljazxTb3J0aW5nLCAnbnVsbEFzSGlnaGVzdCcgfCAnZW1wdHlTdHJpbmdBc0hpZ2hlc3QnPj4pW10pOiB2b2lkIHtcbiAgICAgICAgLy8gUmVzZXQgcGFnZSBpbmRleCB0byByZXN0YXJ0IHRoZSBwYWdpbmF0aW9uIChwcmVzZXJ2ZSBwYWdlU2l6ZSlcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLm1lcmdlKCdwYWdpbmF0aW9uJywge1xuICAgICAgICAgICAgcGFnaW5hdGlvbjogcGljayh0aGlzLmRlZmF1bHRQYWdpbmF0aW9uLCBbJ29mZnNldCcsICdwYWdlSW5kZXgnXSksXG4gICAgICAgIH0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICAvLyBQcmVzZXJ2ZSBvbmx5IHNvcnRpbmcgZXZlbnRzIHdpdGggZGlyZWN0aW9uIGFuZCBjb252ZXJ0IGludG8gbmF0dXJhbC9ncmFwaHFsIFNvcnRpbmcgdHlwZVxuICAgICAgICBsZXQgc29ydGluZzogU29ydGluZ1tdID0gc29ydGluZ0V2ZW50c1xuICAgICAgICAgICAgLmZpbHRlcihlID0+ICEhZS5kaXJlY3Rpb24pXG4gICAgICAgICAgICAubWFwKHNvcnRpbmdFdmVudCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgczogU29ydGluZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHNvcnRpbmdFdmVudC5hY3RpdmUsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChzb3J0aW5nRXZlbnQuZGlyZWN0aW9uID09PSAnYXNjJykge1xuICAgICAgICAgICAgICAgICAgICBzLm9yZGVyID0gU29ydGluZ09yZGVyLkFTQztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvcnRpbmdFdmVudC5kaXJlY3Rpb24gPT09ICdkZXNjJykge1xuICAgICAgICAgICAgICAgICAgICBzLm9yZGVyID0gU29ydGluZ09yZGVyLkRFU0M7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCdudWxsQXNIaWdoZXN0JyBpbiBzb3J0aW5nRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5udWxsQXNIaWdoZXN0ID0gc29ydGluZ0V2ZW50Lm51bGxBc0hpZ2hlc3Q7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCdlbXB0eVN0cmluZ0FzSGlnaGVzdCcgaW4gc29ydGluZ0V2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHMuZW1wdHlTdHJpbmdBc0hpZ2hlc3QgPSBzb3J0aW5nRXZlbnQuZW1wdHlTdHJpbmdBc0hpZ2hlc3Q7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBFbXB0eSBzb3J0aW5nIGZhbGxiYWNrcyBvbiBkZWZhdWx0XG4gICAgICAgIGlmIChzb3J0aW5nLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmRlZmF1bHRTb3J0aW5nKSB7XG4gICAgICAgICAgICBzb3J0aW5nID0gdGhpcy5kZWZhdWx0U29ydGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBzb3J0aW5nIGFzIHNlYXJjaCB2YXJpYWJsZVxuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdzb3J0aW5nJywge3NvcnRpbmc6IHNvcnRpbmd9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG5cbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlYXJjaCAmJiAhdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICAvLyBJZiBzb3J0aW5nIGlzIGVxdWFsIHRvIGRlZmF1bHQgc29ydGluZywgbnVsbGlmeSBpdCB0byByZW1vdmUgZnJvbSBwZXJzaXN0ZW5jZSAodXJsIGFuZCBzZXNzaW9uIHN0b3JhZ2UpXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdChcbiAgICAgICAgICAgICAgICAnc28nLFxuICAgICAgICAgICAgICAgIGlzRXF1YWwoc29ydGluZywgdGhpcy5kZWZhdWx0U29ydGluZykgPyBudWxsIDogc29ydGluZyxcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmFnZUtleSgpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uKHBhZ2luYXRpb24sIHByb21pc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGN1cnJlbnQgcGFnaW5hdGlvbiwgZWl0aGVyIHRoZSB1c2VyIGRlZmluZWQgb25lLCBvciB0aGUgZGVmYXVsdCBvbmVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbklucHV0IHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbkNoYW5uZWw6IFBhcnRpYWw8RXh0cmFjdFZhbGw8VFNlcnZpY2U+PiB8IHVuZGVmaW5lZCA9IHRoaXMudmFyaWFibGVzTWFuYWdlci5nZXQoJ3BhZ2luYXRpb24nKTtcblxuICAgICAgICBpZiAocGFnaW5hdGlvbkNoYW5uZWwgJiYgcGFnaW5hdGlvbkNoYW5uZWwucGFnaW5hdGlvbikge1xuICAgICAgICAgICAgLy8gVGhlIGNhc3Qgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYmVjYXVzZSBUeXBlc2NyaXB0IGNvcnJlY3RseSBuYXJyb3cgZG93biB0aGUgdHlwZSB0byBgUGFnaW5hdGlvbklucHV0YFxuICAgICAgICAgICAgLy8gYnV0IHNvbWVob3cgc3RpbGwgZ2V0IGNvbmZ1c2VkIHdoZW4gcmV0dXJuaW5nIGl0XG4gICAgICAgICAgICByZXR1cm4gcGFnaW5hdGlvbkNoYW5uZWwucGFnaW5hdGlvbiBhcyBQYWdpbmF0aW9uSW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UGFnaW5hdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgcGFnaW5hdGlvbiB2YXJpYWJsZXMgZm9yIHF1ZXJ5IGFuZCBwZXJzaXN0IGluIHVybCBhbmQgbG9jYWwgc3RvcmFnZSB0aGUgbmV3IHZhbHVlXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgbm90IHBlcnNpc3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IE5hdHVyYWwgb3IgUGFnaW5hdG9yIFBhZ2VFdmVudFxuICAgICAqIEBwYXJhbSBkZWZlciBQcm9taXNlICh1c3VhbGx5IGEgcm91dGUgcHJvbWlzZSkgdGhhdCBkZWZlcnMgdGhlIHJlZGlyZWN0aW9uIGZyb20gdGhpcyBjYWxsIHRvIHByZXZlbnQgcm91dGUgbmF2aWdhdGlvbiBjb2xsaXNpb25cbiAgICAgKiBAcGFyYW0gbmF2aWdhdGlvbkV4dHJhcyBBbmd1bGFyIHJvdXRlciBuYXZpZ2F0aW9uIG9wdGlvbnMuIElzIHJlbGV2YW50IG9ubHkgaWYgcGVyc2lzdFNlYXJjaCBpcyB0cnVlXG4gICAgICovXG4gICAgcHVibGljIHBhZ2luYXRpb24oXG4gICAgICAgIGV2ZW50OiBQYWdpbmF0aW9uSW5wdXQgfCBQYWdlRXZlbnQsXG4gICAgICAgIGRlZmVyPzogUHJvbWlzZTx1bmtub3duPixcbiAgICAgICAgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGxldCBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uSW5wdXQgPSB0aGlzLmRlZmF1bHRQYWdpbmF0aW9uO1xuICAgICAgICBsZXQgZm9yUGVyc2lzdGVuY2U6IFBhZ2luYXRpb25JbnB1dCB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdG8gbmF0dXJhbC9ncmFwaHFsIGZvcm1hdCwgYWRkaW5nIG1pc3NpbmcgYXR0cmlidXRlc1xuICAgICAgICBsZXQgbmF0dXJhbEV2ZW50OiBQYWdpbmF0aW9uSW5wdXQgPSBwaWNrKGV2ZW50LCBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRQYWdpbmF0aW9uKSk7IC8vIG9iamVjdCB3aXRoIG9ubHkgUGFnaW5hdGlvbklucHV0IGF0dHJpYnV0ZXNcbiAgICAgICAgbmF0dXJhbEV2ZW50ID0gZGVmYXVsdHMobmF0dXJhbEV2ZW50LCB0aGlzLmRlZmF1bHRQYWdpbmF0aW9uKTsgLy8gRGVmYXVsdCB3aXRoIGNvbnRyb2xsZXIgdmFsdWVzXG5cbiAgICAgICAgaWYgKCFpc0VxdWFsKG5hdHVyYWxFdmVudCwgdGhpcy5kZWZhdWx0UGFnaW5hdGlvbikpIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb24gPSBmb3JQZXJzaXN0ZW5jZSA9IG5hdHVyYWxFdmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3BhZ2luYXRpb24nLCB7cGFnaW5hdGlvbn0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICB0aGlzLnBlcnNpc3RQYWdpbmF0aW9uKGZvclBlcnNpc3RlbmNlLCBkZWZlciwgbmF2aWdhdGlvbkV4dHJhcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHBlcnNpc3RQYWdpbmF0aW9uKFxuICAgICAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uSW5wdXQgfCBudWxsLFxuICAgICAgICBkZWZlcj86IFByb21pc2U8dW5rbm93bj4sXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wZXJzaXN0U2VhcmNoICYmICF0aGlzLmlzUGFuZWwpIHtcbiAgICAgICAgICAgIC8vIERlY2xhcmUgcGVyc2lzdCBmdW5jdGlvblxuICAgICAgICAgICAgY29uc3QgcGVyc2lzdCA9ICh2YWx1ZTogUGFnaW5hdGlvbklucHV0IHwgbnVsbCk6IFByb21pc2U8Ym9vbGVhbj4gPT5cbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0KCdwYScsIHZhbHVlLCB0aGlzLnJvdXRlLCB0aGlzLmdldFN0b3JhZ2VLZXkoKSwgbmF2aWdhdGlvbkV4dHJhcyk7XG5cbiAgICAgICAgICAgIC8vIENhbGwgZnVuY3Rpb24gZGlyZWN0bHkgb3Igd2hlbiBwcm9taXNlIGlzIHJlc29sdmVkXG4gICAgICAgICAgICBpZiAoZGVmZXIpIHtcbiAgICAgICAgICAgICAgICBkZWZlci50aGVuKCgpID0+IHBlcnNpc3QocGFnaW5hdGlvbikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZXJzaXN0KHBhZ2luYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIG1hc3RlclRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5pdGVtcy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW53cmFwcGVkID0gdW53cmFwTmF2aWdhYmxlKHJvdyk7XG4gICAgICAgICAgICAgICAgaWYgKHVud3JhcHBlZC5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodW53cmFwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBlbGVtZW50cyBtYXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93c1xuICAgICAqL1xuICAgIHB1YmxpYyBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgICAgICAgbGV0IG51bVJvd3MgPSAwO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/Lml0ZW1zLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcE5hdmlnYWJsZShyb3cpO1xuICAgICAgICAgICAgaWYgKHVud3JhcHBlZC5pZCkge1xuICAgICAgICAgICAgICAgIG51bVJvd3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGEgYnVsayBhY3Rpb24gaXMgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgYnVsa0FjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gZXhlY3V0ZSBhIGJ1bGsgYWN0aW9uIHdpdGhvdXQgc2VsZWN0aW5nIG9uZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQgaW4gdGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIGV4ZWN1dGUgYSBidWxrIGFjdGlvbiB0aGF0IGRvZXMgbm90IGV4aXN0OiAnICsgdGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXMgYXMgYW55KVt0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZF0oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbiBub24tcGFuZWwgY29udGV4dCwgaGVhZGVyIGlzIGFsd2F5cyB2aXNpYmxlLlxuICAgICAqIEluIHBhbmVsIGNvbnRleHQsIGhlYWRlciBpcyBoaWRkZW4gd2hlbiBubyByZXN1bHRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93SGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbCB8fCAodGhpcy5pc1BhbmVsICYmIHRoaXMuc2hvd1RhYmxlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBpcyB2aXNpYmxlIGluIG1vc3QgY2FzZXMsIGJ1dCBoaWRkZW4gb24gYSBwYW5lbFxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93U2VhcmNoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWJsZSBzaG91bGQgYmUgc2hvd24gb25seSB3aGVuIHRoZXJlIGlzIGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1RhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmRhdGFTb3VyY2UgJiYgISF0aGlzLmRhdGFTb3VyY2UuZGF0YSAmJiB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vIHJlc3VsdHMgaXMgc2hvd24gd2hlbiB0aGVyZSBpcyBubyBpdGVtcywgYnV0IG9ubHkgaW4gbm9uLXBhbmVsIGNvbnRleHQgb25seS5cbiAgICAgKiBJbiBwYW5lbHMgd2Ugd2FudCBkaXNjcmV0ZSBtb2RlLCB0aGVyZSBpcyBubyBzZWFyY2ggYW5kIG5vIFwibm8tcmVzdWx0c1wiXG4gICAgICovXG4gICAgcHVibGljIHNob3dOb1Jlc3VsdHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc1BhbmVsICYmICEhdGhpcy5kYXRhU291cmNlICYmICEhdGhpcy5kYXRhU291cmNlLmRhdGEgJiYgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgZnJvbSByb3V0ZS5cbiAgICAgKlxuICAgICAqIFVzZXMgZGF0YSBwcm92aWRlZCBieSByb3V0ZXIgc3VjaCBhczpcbiAgICAgKlxuICAgICAqIC0gYHJvdXRlLmRhdGEuZm9yY2VkVmFyaWFibGVzYFxuICAgICAqIC0gYHJvdXRlLmRhdGEuYXZhaWxhYmxlQ29sdW1uc2BcbiAgICAgKiAtIGByb3V0ZS5kYXRhLnNlbGVjdGVkQ29sdW1uc2BcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaW5pdEZyb21Sb3V0ZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gVmFyaWFibGVzXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZm9yY2VkVmFyaWFibGVzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5Rm9yY2VkVmFyaWFibGVzKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5mb3JjZWRWYXJpYWJsZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXZhaWxhYmxlIGNvbHVtbnNcbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5hdmFpbGFibGVDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUNvbHVtbnMgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuYXZhaWxhYmxlQ29sdW1ucztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbHVtbnNcbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5zZWxlY3RlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnNlbGVjdGVkQ29sdW1ucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXREYXRhT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPFRhbGw+IHtcbiAgICAgICAgLy8gSGVyZSB0aGUgY2FzdGluZyBpcyBhIGJpdCB1bmZvcnR1bmF0ZSBidXQgcmVxdWlyZWQgYmVjYXVzZSBOYXR1cmFsQWJzdHJhY3ROYXZpZ2FibGVMaXN0XG4gICAgICAgIC8vIGJyZWFrcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgY29udmVudGlvbiAoYnkgd3JhcHBpbmcgaXRlbXMgaW4gYSBzdHJ1Y3R1cmUpLiBJZGVhbGx5IHdlIHNob3VsZCByZW1vdmVcbiAgICAgICAgLy8gdGhlIGNhc3RpbmcgYW5kIHJlc29sdmUgdGhpbmdzIGluIGEgYmV0dGVyIHdheSwgYnV0IHRoYXQncyB0b28gbXVjaCB3b3JrIGZvciBub3dcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLndhdGNoQWxsKHRoaXMudmFyaWFibGVzTWFuYWdlciBhcyB1bmtub3duIGFzIGFueSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKSBhcyB1bmtub3duIGFzIE9ic2VydmFibGU8VGFsbD47XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGluaXRGcm9tUGVyc2lzdGVkKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucGVyc2lzdFNlYXJjaCB8fCB0aGlzLmlzUGFuZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSB0aGlzLmdldFN0b3JhZ2VLZXkoKTtcblxuICAgICAgICAvLyBQYWdpbmF0aW9uIDogcGFcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmdldCgncGEnLCB0aGlzLnJvdXRlLCBzdG9yYWdlS2V5KTtcbiAgICAgICAgaWYgKHBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3BhZ2luYXRpb24nLCB7cGFnaW5hdGlvbn0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNvcnRpbmcgOiBzb1xuICAgICAgICBjb25zdCBzb3J0aW5nID0gdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0KCdzbycsIHRoaXMucm91dGUsIHN0b3JhZ2VLZXkpO1xuICAgICAgICBpZiAoc29ydGluZykge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnc29ydGluZycsIHtzb3J0aW5nfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29sdW1uc1xuICAgICAgICBjb25zdCBwZXJzaXN0ZWRDb2x1bW5zID0gdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0KCdjb2wnLCB0aGlzLnJvdXRlLCBzdG9yYWdlS2V5KTtcbiAgICAgICAgaWYgKHR5cGVvZiBwZXJzaXN0ZWRDb2x1bW5zID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBwZXJzaXN0ZWRDb2x1bW5zLnNwbGl0KCcsJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOYXR1cmFsIHNlYXJjaCA6IG5zXG4gICAgICAgIHRoaXMubmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMgPSBmcm9tVXJsKHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmdldCgnbnMnLCB0aGlzLnJvdXRlLCBzdG9yYWdlS2V5KSk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VhcmNoQW5kUmVmcmVzaExpc3QodGhpcy5uYXR1cmFsU2VhcmNoU2VsZWN0aW9ucywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlYXJjaEFuZFJlZnJlc2hMaXN0KFxuICAgICAgICBuYXR1cmFsU2VhcmNoU2VsZWN0aW9uczogTmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMsXG4gICAgICAgIGlnbm9yZUVtcHR5RmlsdGVyID0gZmFsc2UsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRvR3JhcGhRTERvY3RyaW5lRmlsdGVyKHRoaXMubmF0dXJhbFNlYXJjaEZhY2V0cywgbmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMpO1xuXG4gICAgICAgIGlmIChpZ25vcmVFbXB0eUZpbHRlciAmJiBpc0VtcHR5KGZpbHRlcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ25hdHVyYWwtc2VhcmNoJywge2ZpbHRlcn0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gY3VycmVudCB1cmwgZXhjbHVkaW5nIGxhc3Qgcm91dGUgcGFyYW1ldGVycztcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0U3RvcmFnZUtleSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcbiAgICAgICAgdXJsVHJlZS5yb290LmNoaWxkcmVuLnByaW1hcnkuc2VnbWVudHNbdXJsVHJlZS5yb290LmNoaWxkcmVuLnByaW1hcnkuc2VnbWVudHMubGVuZ3RoIC0gMV0ucGFyYW1ldGVycyA9IHt9O1xuICAgICAgICByZXR1cm4gdXJsVHJlZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBidWxrZERlbGV0ZUNvbmZpcm1hdGlvbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxlcnRTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgICAgICAkbG9jYWxpemVgU3VwcHJlc3Npb25gLFxuICAgICAgICAgICAgJGxvY2FsaXplYFZvdWxlei12b3VzIHN1cHByaW1lciBkw6lmaW5pdGl2ZW1lbnQgbGVzIMOpbMOpbWVudHMgc8OpbGVjdGlvbm7DqXMgP2AsXG4gICAgICAgICAgICAkbG9jYWxpemVgU3VwcHJpbWVyIGTDqWZpbml0aXZlbWVudGAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlIG11bHRpcGxlIGl0ZW1zIGF0IG9uY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYnVsa0RlbGV0ZSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgICAgIHRoaXMuYnVsa2REZWxldGVDb25maXJtYXRpb24oKS5zdWJzY3JpYmUoY29uZmlybWVkID0+IHtcbiAgICAgICAgICAgIHRoaXMuYnVsa0FjdGlvblNlbGVjdGVkID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBBc3N1bWUgdGhhdCBvdXIgb2JqZWN0cyBoYXZlIElELiBUaGlzIGlzIHRydWUgaW4gYWxtb3N0IGFsbCBjYXNlcy4gQnV0IGlmXG4gICAgICAgICAgICAgICAgLy8gaXQgaXMgbm90LCBsaWtlIEF0dHJpYnV0ZVJlcG9ydENvbXBvbmVudCwgdGhlbiB0aGUgaW5oZXJpdGluZyBjbGFzcyBtdXN0XG4gICAgICAgICAgICAgICAgLy8gbmV2ZXIgY2FsbCB0aGlzIG1ldGhvZC5cbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCBhcyB7aWQ6IHN0cmluZ31bXTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZS5kZWxldGUoc2VsZWN0aW9uKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKCRsb2NhbGl6ZWBTdXBwcmltw6lgKTtcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseUZvcmNlZFZhcmlhYmxlcyh2YXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzKTogdm9pZCB7XG4gICAgICAgIGlmICh2YXJpYWJsZXMuZmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdmb3JjZWQtZmlsdGVyJywge2ZpbHRlcjogdmFyaWFibGVzLmZpbHRlcn0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YXJpYWJsZXMucGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgncGFnaW5hdGlvbicsIHtwYWdpbmF0aW9uOiB2YXJpYWJsZXMucGFnaW5hdGlvbn0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YXJpYWJsZXMuc29ydGluZykge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnc29ydGluZycsIHtzb3J0aW5nOiB2YXJpYWJsZXMuc29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RDb2x1bW5zKGNvbHVtbnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sdW1uc0ZvclRhYmxlID0gY29sdW1ucztcblxuICAgICAgICBpZiAoIXRoaXMucGVyc2lzdFNlYXJjaCB8fCB0aGlzLmlzUGFuZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBmaXJzdCBzZWxlY3Rpb24gd2UgcmVjZWl2ZSBpcyB0aGUgZGVmYXVsdCBvbmUgbWFkZSBieSBgPG5hdHVyYWwtY29sdW1ucy1waWNrZXI+YFxuICAgICAgICBpZiAoIXRoaXMuZGVmYXVsdFNlbGVjdGVkQ29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2VsZWN0ZWRDb2x1bW5zID0gY29sdW1ucztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFBlcnNpc3Qgb25seSBpZiB3YW50ZWQgY29sdW1ucyBhcmUgZGlmZmVyZW50IGZyb20gZGVmYXVsdCBzZWxlY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXNFcXVhbCh0aGlzLmRlZmF1bHRTZWxlY3RlZENvbHVtbnMsIGNvbHVtbnMpID8gbnVsbCA6IGNvbHVtbnMuam9pbignLCcpO1xuICAgICAgICAgICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdCgnY29sJywgdmFsdWUsIHRoaXMucm91dGUsIHRoaXMuZ2V0U3RvcmFnZUtleSgpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|