@yelon/bis 12.0.16 → 12.0.17

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.
Files changed (76) hide show
  1. package/LICENSE +21 -21
  2. package/bis.d.ts +4 -4
  3. package/bundles/bis.umd.js +7 -7
  4. package/bundles/layout.umd.js +2557 -1968
  5. package/bundles/layout.umd.js.map +1 -1
  6. package/bundles/shared.umd.js +1226 -1230
  7. package/bundles/shared.umd.js.map +1 -1
  8. package/esm2015/bis.js +4 -4
  9. package/esm2015/layout/act.guard.js +114 -114
  10. package/esm2015/layout/bis.config.js +10 -10
  11. package/esm2015/layout/contact/contact.component.js +434 -0
  12. package/esm2015/layout/contact/contact.service.js +150 -0
  13. package/esm2015/layout/layout.js +8 -6
  14. package/esm2015/layout/layout.module.js +47 -37
  15. package/esm2015/layout/path-to-regexp.service.js +236 -236
  16. package/esm2015/layout/public_api.js +14 -14
  17. package/esm2015/layout/stomp.config.js +19 -19
  18. package/esm2015/layout/widgets/index.js +7 -7
  19. package/esm2015/layout/widgets/yz.application.component.js +132 -132
  20. package/esm2015/layout/widgets/yz.clear-storage.component.js +35 -35
  21. package/esm2015/layout/widgets/yz.fullscreen.component.js +32 -32
  22. package/esm2015/layout/widgets/yz.i18n.component.js +50 -50
  23. package/esm2015/layout/widgets/yz.notify.component.js +143 -143
  24. package/esm2015/layout/widgets/yz.them-btn.component.js +106 -106
  25. package/esm2015/layout/widgets/yz.user.component.js +57 -57
  26. package/esm2015/layout/yz.auth.service.js +157 -157
  27. package/esm2015/layout/yz.basic.component.js +40 -40
  28. package/esm2015/layout/yz.default.interceptor.js +203 -203
  29. package/esm2015/layout/yz.i18n.service.js +101 -101
  30. package/esm2015/layout/yz.startup.service.js +137 -137
  31. package/esm2015/layout/yz.stomp.service.js +90 -90
  32. package/esm2015/public_api.js +1 -1
  33. package/esm2015/shared/public_api.js +4 -4
  34. package/esm2015/shared/shared-yelon.module.js +108 -108
  35. package/esm2015/shared/shared-zorro.module.js +80 -80
  36. package/esm2015/shared/shared.js +4 -4
  37. package/esm2015/shared/shared.module.js +22 -16
  38. package/esm2015/shared/style-icons.js +795 -795
  39. package/fesm2015/bis.js +2 -2
  40. package/fesm2015/layout.js +2140 -1555
  41. package/fesm2015/layout.js.map +1 -1
  42. package/fesm2015/shared.js +909 -902
  43. package/fesm2015/shared.js.map +1 -1
  44. package/layout/act.guard.d.ts +20 -20
  45. package/layout/bis.config.d.ts +3 -3
  46. package/layout/contact/contact.component.d.ts +166 -0
  47. package/layout/contact/contact.service.d.ts +115 -0
  48. package/layout/layout.d.ts +7 -5
  49. package/layout/layout.metadata.json +1 -1
  50. package/layout/layout.module.d.ts +2 -2
  51. package/layout/path-to-regexp.service.d.ts +23 -23
  52. package/layout/public_api.d.ts +12 -12
  53. package/layout/stomp.config.d.ts +3 -3
  54. package/layout/widgets/index.d.ts +7 -7
  55. package/layout/widgets/yz.application.component.d.ts +45 -45
  56. package/layout/widgets/yz.clear-storage.component.d.ts +8 -8
  57. package/layout/widgets/yz.fullscreen.component.d.ts +6 -6
  58. package/layout/widgets/yz.i18n.component.d.ts +19 -19
  59. package/layout/widgets/yz.notify.component.d.ts +25 -25
  60. package/layout/widgets/yz.them-btn.component.d.ts +29 -29
  61. package/layout/widgets/yz.user.component.d.ts +25 -25
  62. package/layout/yz.auth.service.d.ts +19 -19
  63. package/layout/yz.basic.component.d.ts +15 -15
  64. package/layout/yz.default.interceptor.d.ts +26 -26
  65. package/layout/yz.i18n.service.d.ts +24 -24
  66. package/layout/yz.startup.service.d.ts +31 -31
  67. package/layout/yz.stomp.service.d.ts +39 -39
  68. package/package.json +10 -10
  69. package/public_api.d.ts +2 -2
  70. package/shared/public_api.d.ts +4 -4
  71. package/shared/shared-yelon.module.d.ts +3 -3
  72. package/shared/shared-zorro.module.d.ts +2 -2
  73. package/shared/shared.d.ts +4 -4
  74. package/shared/shared.metadata.json +1 -1
  75. package/shared/shared.module.d.ts +2 -2
  76. package/shared/style-icons.d.ts +1 -1
@@ -1,6 +1,8 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public_api';
5
- export { YzHeaderApplicationComponent as ɵa, YzHeaderClearStorageComponent as ɵf, YzHeaderFullScreenComponent as ɵe, YzHeaderI18NComponent as ɵg, YzHeaderNotifyComponent as ɵb, YzHeaderThemBtnComponent as ɵc, YzHeaderUserComponent as ɵd } from './widgets';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC9sYXlvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMsNEJBQTRCLElBQUksRUFBRSxFQUFDLDZCQUE2QixJQUFJLEVBQUUsRUFBQywyQkFBMkIsSUFBSSxFQUFFLEVBQUMscUJBQXFCLElBQUksRUFBRSxFQUFDLHVCQUF1QixJQUFJLEVBQUUsRUFBQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUMscUJBQXFCLElBQUksRUFBRSxFQUFDLE1BQU0sV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuXG5leHBvcnQge1l6SGVhZGVyQXBwbGljYXRpb25Db21wb25lbnQgYXMgybVhLFl6SGVhZGVyQ2xlYXJTdG9yYWdlQ29tcG9uZW50IGFzIMm1ZixZekhlYWRlckZ1bGxTY3JlZW5Db21wb25lbnQgYXMgybVlLFl6SGVhZGVySTE4TkNvbXBvbmVudCBhcyDJtWcsWXpIZWFkZXJOb3RpZnlDb21wb25lbnQgYXMgybViLFl6SGVhZGVyVGhlbUJ0bkNvbXBvbmVudCBhcyDJtWMsWXpIZWFkZXJVc2VyQ29tcG9uZW50IGFzIMm1ZH0gZnJvbSAnLi93aWRnZXRzJzsiXX0=
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ export { ContactComponent as ɵa } from './contact/contact.component';
6
+ export { ContactService as ɵb } from './contact/contact.service';
7
+ export { YzHeaderApplicationComponent as ɵc, YzHeaderClearStorageComponent as ɵh, YzHeaderFullScreenComponent as ɵg, YzHeaderI18NComponent as ɵi, YzHeaderNotifyComponent as ɵd, YzHeaderThemBtnComponent as ɵe, YzHeaderUserComponent as ɵf } from './widgets';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC9sYXlvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsNEJBQTRCLElBQUksRUFBRSxFQUFDLDZCQUE2QixJQUFJLEVBQUUsRUFBQywyQkFBMkIsSUFBSSxFQUFFLEVBQUMscUJBQXFCLElBQUksRUFBRSxFQUFDLHVCQUF1QixJQUFJLEVBQUUsRUFBQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUMscUJBQXFCLElBQUksRUFBRSxFQUFDLE1BQU0sV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuXG5leHBvcnQge0NvbnRhY3RDb21wb25lbnQgYXMgybVhfSBmcm9tICcuL2NvbnRhY3QvY29udGFjdC5jb21wb25lbnQnO1xuZXhwb3J0IHtDb250YWN0U2VydmljZSBhcyDJtWJ9IGZyb20gJy4vY29udGFjdC9jb250YWN0LnNlcnZpY2UnO1xuZXhwb3J0IHtZekhlYWRlckFwcGxpY2F0aW9uQ29tcG9uZW50IGFzIMm1YyxZekhlYWRlckNsZWFyU3RvcmFnZUNvbXBvbmVudCBhcyDJtWgsWXpIZWFkZXJGdWxsU2NyZWVuQ29tcG9uZW50IGFzIMm1ZyxZekhlYWRlckkxOE5Db21wb25lbnQgYXMgybVpLFl6SGVhZGVyTm90aWZ5Q29tcG9uZW50IGFzIMm1ZCxZekhlYWRlclRoZW1CdG5Db21wb25lbnQgYXMgybVlLFl6SGVhZGVyVXNlckNvbXBvbmVudCBhcyDJtWZ9IGZyb20gJy4vd2lkZ2V0cyc7Il19
@@ -1,37 +1,47 @@
1
- import { CommonModule } from '@angular/common';
2
- import { HttpClientModule } from '@angular/common/http';
3
- import { NgModule } from '@angular/core';
4
- import { FormsModule, ReactiveFormsModule } from '@angular/forms';
5
- import { RouterModule } from '@angular/router';
6
- import { YzSharedModule } from '@yelon/bis/shared';
7
- import { YUNZAI_THEME_BTN_KEYS } from '@yelon/theme/theme-btn';
8
- // import { ContactComponent } from './contact/contact.component';
9
- import { YzHeaderApplicationComponent, YzHeaderNotifyComponent, YzHeaderThemBtnComponent, YzHeaderUserComponent, YzHeaderClearStorageComponent, YzHeaderFullScreenComponent, YzHeaderI18NComponent } from './widgets';
10
- import { YzLayoutBasicComponent } from './yz.basic.component';
11
- const COMPONENTS = [
12
- // ContactComponent,
13
- YzLayoutBasicComponent,
14
- YzHeaderApplicationComponent,
15
- YzHeaderNotifyComponent,
16
- YzHeaderThemBtnComponent,
17
- YzHeaderUserComponent,
18
- YzHeaderFullScreenComponent,
19
- YzHeaderClearStorageComponent,
20
- YzHeaderI18NComponent
21
- ];
22
- export class YunzaiLayoutModule {
23
- }
24
- YunzaiLayoutModule.decorators = [
25
- { type: NgModule, args: [{
26
- imports: [HttpClientModule, CommonModule, FormsModule, RouterModule, ReactiveFormsModule, YzSharedModule],
27
- providers: [
28
- {
29
- provide: YUNZAI_THEME_BTN_KEYS,
30
- useValue: 'site-theme'
31
- }
32
- ],
33
- declarations: [...COMPONENTS],
34
- exports: [...COMPONENTS]
35
- },] }
36
- ];
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQvbGF5b3V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUvRCxrRUFBa0U7QUFDbEUsT0FBTyxFQUNMLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUNyQiw2QkFBNkIsRUFDN0IsMkJBQTJCLEVBQzNCLHFCQUFxQixFQUN0QixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxNQUFNLFVBQVUsR0FBRztJQUNqQixvQkFBb0I7SUFDcEIsc0JBQXNCO0lBQ3RCLDRCQUE0QjtJQUM1Qix1QkFBdUI7SUFDdkIsd0JBQXdCO0lBQ3hCLHFCQUFxQjtJQUNyQiwyQkFBMkI7SUFDM0IsNkJBQTZCO0lBQzdCLHFCQUFxQjtDQUN0QixDQUFDO0FBYUYsTUFBTSxPQUFPLGtCQUFrQjs7O1lBWDlCLFFBQVEsU0FBQztnQkFDUixPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxjQUFjLENBQUM7Z0JBQ3pHLFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxPQUFPLEVBQUUscUJBQXFCO3dCQUM5QixRQUFRLEVBQUUsWUFBWTtxQkFDdkI7aUJBQ0Y7Z0JBQ0QsWUFBWSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO2FBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBZelNoYXJlZE1vZHVsZSB9IGZyb20gJ0B5ZWxvbi9iaXMvc2hhcmVkJztcbmltcG9ydCB7IFlVTlpBSV9USEVNRV9CVE5fS0VZUyB9IGZyb20gJ0B5ZWxvbi90aGVtZS90aGVtZS1idG4nO1xuXG4vLyBpbXBvcnQgeyBDb250YWN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb250YWN0L2NvbnRhY3QuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFl6SGVhZGVyQXBwbGljYXRpb25Db21wb25lbnQsXG4gIFl6SGVhZGVyTm90aWZ5Q29tcG9uZW50LFxuICBZekhlYWRlclRoZW1CdG5Db21wb25lbnQsXG4gIFl6SGVhZGVyVXNlckNvbXBvbmVudCxcbiAgWXpIZWFkZXJDbGVhclN0b3JhZ2VDb21wb25lbnQsXG4gIFl6SGVhZGVyRnVsbFNjcmVlbkNvbXBvbmVudCxcbiAgWXpIZWFkZXJJMThOQ29tcG9uZW50XG59IGZyb20gJy4vd2lkZ2V0cyc7XG5pbXBvcnQgeyBZekxheW91dEJhc2ljQ29tcG9uZW50IH0gZnJvbSAnLi95ei5iYXNpYy5jb21wb25lbnQnO1xuY29uc3QgQ09NUE9ORU5UUyA9IFtcbiAgLy8gQ29udGFjdENvbXBvbmVudCxcbiAgWXpMYXlvdXRCYXNpY0NvbXBvbmVudCxcbiAgWXpIZWFkZXJBcHBsaWNhdGlvbkNvbXBvbmVudCxcbiAgWXpIZWFkZXJOb3RpZnlDb21wb25lbnQsXG4gIFl6SGVhZGVyVGhlbUJ0bkNvbXBvbmVudCxcbiAgWXpIZWFkZXJVc2VyQ29tcG9uZW50LFxuICBZekhlYWRlckZ1bGxTY3JlZW5Db21wb25lbnQsXG4gIFl6SGVhZGVyQ2xlYXJTdG9yYWdlQ29tcG9uZW50LFxuICBZekhlYWRlckkxOE5Db21wb25lbnRcbl07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtIdHRwQ2xpZW50TW9kdWxlLCBDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBSb3V0ZXJNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFl6U2hhcmVkTW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogWVVOWkFJX1RIRU1FX0JUTl9LRVlTLFxuICAgICAgdXNlVmFsdWU6ICdzaXRlLXRoZW1lJ1xuICAgIH1cbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbLi4uQ09NUE9ORU5UU10sXG4gIGV4cG9ydHM6IFsuLi5DT01QT05FTlRTXVxufSlcbmV4cG9ydCBjbGFzcyBZdW56YWlMYXlvdXRNb2R1bGUge31cbiJdfQ==
1
+ /*
2
+ * @Author: cui <devcui@outlook.com>
3
+ * @Editor: microsoft vscode
4
+ * @Date: 2021-11-27 11:30:50
5
+ * @LastEditTime: 2021-11-27 14:38:46
6
+ * @LastEditors: cui <devcui@outlook.com>
7
+ * @Description: empty description
8
+ * @FilePath: \yelon\packages\bis\layout\layout.module.ts
9
+ * LICENSE HERE
10
+ */
11
+ import { CommonModule } from '@angular/common';
12
+ import { HttpClientModule } from '@angular/common/http';
13
+ import { NgModule } from '@angular/core';
14
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
15
+ import { RouterModule } from '@angular/router';
16
+ import { YzSharedModule } from '@yelon/bis/shared';
17
+ import { YUNZAI_THEME_BTN_KEYS } from '@yelon/theme/theme-btn';
18
+ import { ContactComponent } from './contact/contact.component';
19
+ import { YzHeaderApplicationComponent, YzHeaderNotifyComponent, YzHeaderThemBtnComponent, YzHeaderUserComponent, YzHeaderClearStorageComponent, YzHeaderFullScreenComponent, YzHeaderI18NComponent } from './widgets';
20
+ import { YzLayoutBasicComponent } from './yz.basic.component';
21
+ const COMPONENTS = [
22
+ ContactComponent,
23
+ YzLayoutBasicComponent,
24
+ YzHeaderApplicationComponent,
25
+ YzHeaderNotifyComponent,
26
+ YzHeaderThemBtnComponent,
27
+ YzHeaderUserComponent,
28
+ YzHeaderFullScreenComponent,
29
+ YzHeaderClearStorageComponent,
30
+ YzHeaderI18NComponent
31
+ ];
32
+ export class YunzaiLayoutModule {
33
+ }
34
+ YunzaiLayoutModule.decorators = [
35
+ { type: NgModule, args: [{
36
+ imports: [HttpClientModule, CommonModule, FormsModule, RouterModule, ReactiveFormsModule, YzSharedModule],
37
+ providers: [
38
+ {
39
+ provide: YUNZAI_THEME_BTN_KEYS,
40
+ useValue: 'site-theme'
41
+ }
42
+ ],
43
+ declarations: [...COMPONENTS],
44
+ exports: [...COMPONENTS]
45
+ },] }
46
+ ];
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQvbGF5b3V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHVCQUF1QixFQUN2Qix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLDZCQUE2QixFQUM3QiwyQkFBMkIsRUFDM0IscUJBQXFCLEVBQ3RCLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE1BQU0sVUFBVSxHQUFHO0lBQ2pCLGdCQUFnQjtJQUNoQixzQkFBc0I7SUFDdEIsNEJBQTRCO0lBQzVCLHVCQUF1QjtJQUN2Qix3QkFBd0I7SUFDeEIscUJBQXFCO0lBQ3JCLDJCQUEyQjtJQUMzQiw2QkFBNkI7SUFDN0IscUJBQXFCO0NBQ3RCLENBQUM7QUFhRixNQUFNLE9BQU8sa0JBQWtCOzs7WUFYOUIsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsQ0FBQztnQkFDekcsU0FBUyxFQUFFO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxxQkFBcUI7d0JBQzlCLFFBQVEsRUFBRSxZQUFZO3FCQUN2QjtpQkFDRjtnQkFDRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztnQkFDN0IsT0FBTyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7YUFDekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQEF1dGhvcjogY3VpIDxkZXZjdWlAb3V0bG9vay5jb20+XG4gKiBARWRpdG9yOiBtaWNyb3NvZnQgdnNjb2RlXG4gKiBARGF0ZTogMjAyMS0xMS0yNyAxMTozMDo1MFxuICogQExhc3RFZGl0VGltZTogMjAyMS0xMS0yNyAxNDozODo0NlxuICogQExhc3RFZGl0b3JzOiBjdWkgPGRldmN1aUBvdXRsb29rLmNvbT5cbiAqIEBEZXNjcmlwdGlvbjogZW1wdHkgZGVzY3JpcHRpb25cbiAqIEBGaWxlUGF0aDogXFx5ZWxvblxccGFja2FnZXNcXGJpc1xcbGF5b3V0XFxsYXlvdXQubW9kdWxlLnRzXG4gKiBMSUNFTlNFIEhFUkVcbiAqL1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBZelNoYXJlZE1vZHVsZSB9IGZyb20gJ0B5ZWxvbi9iaXMvc2hhcmVkJztcbmltcG9ydCB7IFlVTlpBSV9USEVNRV9CVE5fS0VZUyB9IGZyb20gJ0B5ZWxvbi90aGVtZS90aGVtZS1idG4nO1xuXG5pbXBvcnQgeyBDb250YWN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb250YWN0L2NvbnRhY3QuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFl6SGVhZGVyQXBwbGljYXRpb25Db21wb25lbnQsXG4gIFl6SGVhZGVyTm90aWZ5Q29tcG9uZW50LFxuICBZekhlYWRlclRoZW1CdG5Db21wb25lbnQsXG4gIFl6SGVhZGVyVXNlckNvbXBvbmVudCxcbiAgWXpIZWFkZXJDbGVhclN0b3JhZ2VDb21wb25lbnQsXG4gIFl6SGVhZGVyRnVsbFNjcmVlbkNvbXBvbmVudCxcbiAgWXpIZWFkZXJJMThOQ29tcG9uZW50XG59IGZyb20gJy4vd2lkZ2V0cyc7XG5pbXBvcnQgeyBZekxheW91dEJhc2ljQ29tcG9uZW50IH0gZnJvbSAnLi95ei5iYXNpYy5jb21wb25lbnQnO1xuY29uc3QgQ09NUE9ORU5UUyA9IFtcbiAgQ29udGFjdENvbXBvbmVudCxcbiAgWXpMYXlvdXRCYXNpY0NvbXBvbmVudCxcbiAgWXpIZWFkZXJBcHBsaWNhdGlvbkNvbXBvbmVudCxcbiAgWXpIZWFkZXJOb3RpZnlDb21wb25lbnQsXG4gIFl6SGVhZGVyVGhlbUJ0bkNvbXBvbmVudCxcbiAgWXpIZWFkZXJVc2VyQ29tcG9uZW50LFxuICBZekhlYWRlckZ1bGxTY3JlZW5Db21wb25lbnQsXG4gIFl6SGVhZGVyQ2xlYXJTdG9yYWdlQ29tcG9uZW50LFxuICBZekhlYWRlckkxOE5Db21wb25lbnRcbl07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtIdHRwQ2xpZW50TW9kdWxlLCBDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBSb3V0ZXJNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFl6U2hhcmVkTW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogWVVOWkFJX1RIRU1FX0JUTl9LRVlTLFxuICAgICAgdXNlVmFsdWU6ICdzaXRlLXRoZW1lJ1xuICAgIH1cbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbLi4uQ09NUE9ORU5UU10sXG4gIGV4cG9ydHM6IFsuLi5DT01QT05FTlRTXVxufSlcbmV4cG9ydCBjbGFzcyBZdW56YWlMYXlvdXRNb2R1bGUge31cbiJdfQ==
@@ -1,237 +1,237 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class PathToRegexpService {
4
- constructor() {
5
- this.DEFAULT_DELIMITER = '/';
6
- this.PATH_REGEXP = new RegExp(['(\\\\.)', '(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?'].join('|'), 'g');
7
- }
8
- parse(str, options) {
9
- const tokens = [];
10
- let key = 0;
11
- let index = 0;
12
- let path = '';
13
- const defaultDelimiter = (options && options.delimiter) || this.DEFAULT_DELIMITER;
14
- const whitelist = (options && options.whitelist) || undefined;
15
- let pathEscaped = false;
16
- let res;
17
- while ((res = this.PATH_REGEXP.exec(str)) !== null) {
18
- const m = res[0];
19
- const escaped = res[1];
20
- const offset = res.index;
21
- path += str.slice(index, offset);
22
- index = offset + m.length;
23
- // Ignore already escaped sequences.
24
- if (escaped) {
25
- path += escaped[1];
26
- pathEscaped = true;
27
- continue;
28
- }
29
- let prev = '';
30
- const name = res[2];
31
- const capture = res[3];
32
- const group = res[4];
33
- const modifier = res[5];
34
- if (!pathEscaped && path.length) {
35
- const k = path.length - 1;
36
- const c = path[k];
37
- const matches = whitelist ? whitelist.indexOf(c) > -1 : true;
38
- if (matches) {
39
- prev = c;
40
- path = path.slice(0, k);
41
- }
42
- }
43
- // Push the current path onto the tokens.
44
- if (path) {
45
- tokens.push(path);
46
- path = '';
47
- pathEscaped = false;
48
- }
49
- const repeat = modifier === '+' || modifier === '*';
50
- const optional = modifier === '?' || modifier === '*';
51
- const pattern = capture || group;
52
- const delimiter = prev || defaultDelimiter;
53
- tokens.push({
54
- name: name || key++,
55
- prefix: prev,
56
- delimiter: delimiter,
57
- optional: optional,
58
- repeat: repeat,
59
- pattern: pattern
60
- ? this.escapeGroup(pattern)
61
- : `[^${this.escapeString(delimiter === defaultDelimiter ? delimiter : delimiter + defaultDelimiter)}]+?`
62
- });
63
- }
64
- // Push any remaining characters.
65
- if (path || index < str.length) {
66
- tokens.push(path + str.substr(index));
67
- }
68
- return tokens;
69
- }
70
- compile(str, options) {
71
- return this.tokensToFunction(this.parse(str, options), options);
72
- }
73
- tokensToFunction(tokens, options) {
74
- const matches = new Array(tokens.length);
75
- for (let i = 0; i < tokens.length; i++) {
76
- if (typeof tokens[i] === 'object') {
77
- matches[i] = new RegExp(`^(?:${tokens[i].pattern})$`, this.flags(options));
78
- }
79
- }
80
- return function (data, options) {
81
- let path = '';
82
- const encode = (options && options.encode) || encodeURIComponent;
83
- const validate = options ? options.validate !== false : true;
84
- for (let i = 0; i < tokens.length; i++) {
85
- const token = tokens[i];
86
- if (typeof token === 'string') {
87
- path += token;
88
- continue;
89
- }
90
- const value = data ? data[token.name] : undefined;
91
- let segment;
92
- if (Array.isArray(value)) {
93
- if (!token.repeat) {
94
- throw new TypeError(`Expected "${token.name}" to not repeat, but got array`);
95
- }
96
- if (value.length === 0) {
97
- if (token.optional) {
98
- continue;
99
- }
100
- throw new TypeError(`Expected "${token.name}" to not be empty`);
101
- }
102
- for (let j = 0; j < value.length; j++) {
103
- segment = encode(value[j], token);
104
- if (validate && !matches[i].test(segment)) {
105
- throw new TypeError(`Expected all "${token.name}" to match "${token.pattern}"`);
106
- }
107
- path += (j === 0 ? token.prefix : token.delimiter) + segment;
108
- }
109
- continue;
110
- }
111
- if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
112
- segment = encode(String(value), token);
113
- if (validate && !matches[i].test(segment)) {
114
- throw new TypeError(`Expected "${token.name}" to match "${token.pattern}", but got "${segment}"`);
115
- }
116
- path += token.prefix + segment;
117
- continue;
118
- }
119
- if (token.optional) {
120
- continue;
121
- }
122
- throw new TypeError(`Expected "${token.name}" to be ${token.repeat ? 'an array' : 'a string'}`);
123
- }
124
- return path;
125
- };
126
- }
127
- escapeString(str) {
128
- return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, '\\$1');
129
- }
130
- escapeGroup(group) {
131
- return group.replace(/([=!:$/()])/g, '\\$1');
132
- }
133
- flags(options) {
134
- return options && options.sensitive ? '' : 'i';
135
- }
136
- regexpToRegexp(path, keys) {
137
- if (!keys) {
138
- return path;
139
- }
140
- const groups = path.source.match(/\((?!\?)/g);
141
- if (groups) {
142
- for (let i = 0; i < groups.length; i++) {
143
- keys.push({
144
- name: i,
145
- prefix: null,
146
- delimiter: null,
147
- optional: false,
148
- repeat: false,
149
- pattern: null
150
- });
151
- }
152
- }
153
- return path;
154
- }
155
- arrayToRegexp(path, keys, options) {
156
- const parts = [];
157
- for (let i = 0; i < path.length; i++) {
158
- parts.push(this.pathToRegexp(path[i], keys, options).source);
159
- }
160
- return new RegExp(`(?:${parts.join('|')})`, this.flags(options));
161
- }
162
- stringToRegexp(path, keys, options) {
163
- return this.tokensToRegExp(this.parse(path, options), keys, options);
164
- }
165
- tokensToRegExp(tokens, keys, options) {
166
- options = options || {};
167
- const strict = options.strict;
168
- const start = options.start !== false;
169
- const end = options.end !== false;
170
- const delimiter = options.delimiter || this.DEFAULT_DELIMITER;
171
- const endsWith = []
172
- .concat(options.endsWith || [])
173
- .map(this.escapeString)
174
- .concat('$')
175
- .join('|');
176
- let route = start ? '^' : '';
177
- for (let i = 0; i < tokens.length; i++) {
178
- const token = tokens[i];
179
- if (typeof token === 'string') {
180
- route += this.escapeString(token);
181
- }
182
- else {
183
- const capture = token.repeat
184
- ? `(?:${token.pattern})(?:${this.escapeString(token.delimiter)}(?:${token.pattern}))*`
185
- : token.pattern;
186
- if (keys) {
187
- keys.push(token);
188
- }
189
- if (token.optional) {
190
- if (!token.prefix) {
191
- route += `(${capture})?`;
192
- }
193
- else {
194
- route += `(?:${this.escapeString(token.prefix)}(${capture}))?`;
195
- }
196
- }
197
- else {
198
- route += `${this.escapeString(token.prefix)}(${capture})`;
199
- }
200
- }
201
- }
202
- if (end) {
203
- if (!strict) {
204
- route += `(?:${this.escapeString(delimiter)})?`;
205
- }
206
- route += endsWith === '$' ? '$' : `(?=${endsWith})`;
207
- }
208
- else {
209
- const endToken = tokens[tokens.length - 1];
210
- const isEndDelimited = typeof endToken === 'string' ? endToken[endToken.length - 1] === delimiter : endToken === undefined;
211
- if (!strict) {
212
- route += `(?:${this.escapeString(delimiter)}(?=${endsWith}))?`;
213
- }
214
- if (!isEndDelimited) {
215
- route += `(?=${this.escapeString(delimiter)}|${endsWith})`;
216
- }
217
- }
218
- return new RegExp(route, this.flags(options));
219
- }
220
- pathToRegexp(path, keys, options) {
221
- if (path instanceof RegExp) {
222
- return this.regexpToRegexp(path, keys);
223
- }
224
- if (Array.isArray(path)) {
225
- return this.arrayToRegexp(/** @type {!Array} */ path, keys, options);
226
- }
227
- return this.stringToRegexp(/** @type {string} */ path, keys, options);
228
- }
229
- }
230
- PathToRegexpService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PathToRegexpService_Factory() { return new PathToRegexpService(); }, token: PathToRegexpService, providedIn: "root" });
231
- PathToRegexpService.decorators = [
232
- { type: Injectable, args: [{
233
- providedIn: 'root'
234
- },] }
235
- ];
236
- PathToRegexpService.ctorParameters = () => [];
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class PathToRegexpService {
4
+ constructor() {
5
+ this.DEFAULT_DELIMITER = '/';
6
+ this.PATH_REGEXP = new RegExp(['(\\\\.)', '(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?'].join('|'), 'g');
7
+ }
8
+ parse(str, options) {
9
+ const tokens = [];
10
+ let key = 0;
11
+ let index = 0;
12
+ let path = '';
13
+ const defaultDelimiter = (options && options.delimiter) || this.DEFAULT_DELIMITER;
14
+ const whitelist = (options && options.whitelist) || undefined;
15
+ let pathEscaped = false;
16
+ let res;
17
+ while ((res = this.PATH_REGEXP.exec(str)) !== null) {
18
+ const m = res[0];
19
+ const escaped = res[1];
20
+ const offset = res.index;
21
+ path += str.slice(index, offset);
22
+ index = offset + m.length;
23
+ // Ignore already escaped sequences.
24
+ if (escaped) {
25
+ path += escaped[1];
26
+ pathEscaped = true;
27
+ continue;
28
+ }
29
+ let prev = '';
30
+ const name = res[2];
31
+ const capture = res[3];
32
+ const group = res[4];
33
+ const modifier = res[5];
34
+ if (!pathEscaped && path.length) {
35
+ const k = path.length - 1;
36
+ const c = path[k];
37
+ const matches = whitelist ? whitelist.indexOf(c) > -1 : true;
38
+ if (matches) {
39
+ prev = c;
40
+ path = path.slice(0, k);
41
+ }
42
+ }
43
+ // Push the current path onto the tokens.
44
+ if (path) {
45
+ tokens.push(path);
46
+ path = '';
47
+ pathEscaped = false;
48
+ }
49
+ const repeat = modifier === '+' || modifier === '*';
50
+ const optional = modifier === '?' || modifier === '*';
51
+ const pattern = capture || group;
52
+ const delimiter = prev || defaultDelimiter;
53
+ tokens.push({
54
+ name: name || key++,
55
+ prefix: prev,
56
+ delimiter: delimiter,
57
+ optional: optional,
58
+ repeat: repeat,
59
+ pattern: pattern
60
+ ? this.escapeGroup(pattern)
61
+ : `[^${this.escapeString(delimiter === defaultDelimiter ? delimiter : delimiter + defaultDelimiter)}]+?`
62
+ });
63
+ }
64
+ // Push any remaining characters.
65
+ if (path || index < str.length) {
66
+ tokens.push(path + str.substr(index));
67
+ }
68
+ return tokens;
69
+ }
70
+ compile(str, options) {
71
+ return this.tokensToFunction(this.parse(str, options), options);
72
+ }
73
+ tokensToFunction(tokens, options) {
74
+ const matches = new Array(tokens.length);
75
+ for (let i = 0; i < tokens.length; i++) {
76
+ if (typeof tokens[i] === 'object') {
77
+ matches[i] = new RegExp(`^(?:${tokens[i].pattern})$`, this.flags(options));
78
+ }
79
+ }
80
+ return function (data, options) {
81
+ let path = '';
82
+ const encode = (options && options.encode) || encodeURIComponent;
83
+ const validate = options ? options.validate !== false : true;
84
+ for (let i = 0; i < tokens.length; i++) {
85
+ const token = tokens[i];
86
+ if (typeof token === 'string') {
87
+ path += token;
88
+ continue;
89
+ }
90
+ const value = data ? data[token.name] : undefined;
91
+ let segment;
92
+ if (Array.isArray(value)) {
93
+ if (!token.repeat) {
94
+ throw new TypeError(`Expected "${token.name}" to not repeat, but got array`);
95
+ }
96
+ if (value.length === 0) {
97
+ if (token.optional) {
98
+ continue;
99
+ }
100
+ throw new TypeError(`Expected "${token.name}" to not be empty`);
101
+ }
102
+ for (let j = 0; j < value.length; j++) {
103
+ segment = encode(value[j], token);
104
+ if (validate && !matches[i].test(segment)) {
105
+ throw new TypeError(`Expected all "${token.name}" to match "${token.pattern}"`);
106
+ }
107
+ path += (j === 0 ? token.prefix : token.delimiter) + segment;
108
+ }
109
+ continue;
110
+ }
111
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
112
+ segment = encode(String(value), token);
113
+ if (validate && !matches[i].test(segment)) {
114
+ throw new TypeError(`Expected "${token.name}" to match "${token.pattern}", but got "${segment}"`);
115
+ }
116
+ path += token.prefix + segment;
117
+ continue;
118
+ }
119
+ if (token.optional) {
120
+ continue;
121
+ }
122
+ throw new TypeError(`Expected "${token.name}" to be ${token.repeat ? 'an array' : 'a string'}`);
123
+ }
124
+ return path;
125
+ };
126
+ }
127
+ escapeString(str) {
128
+ return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, '\\$1');
129
+ }
130
+ escapeGroup(group) {
131
+ return group.replace(/([=!:$/()])/g, '\\$1');
132
+ }
133
+ flags(options) {
134
+ return options && options.sensitive ? '' : 'i';
135
+ }
136
+ regexpToRegexp(path, keys) {
137
+ if (!keys) {
138
+ return path;
139
+ }
140
+ const groups = path.source.match(/\((?!\?)/g);
141
+ if (groups) {
142
+ for (let i = 0; i < groups.length; i++) {
143
+ keys.push({
144
+ name: i,
145
+ prefix: null,
146
+ delimiter: null,
147
+ optional: false,
148
+ repeat: false,
149
+ pattern: null
150
+ });
151
+ }
152
+ }
153
+ return path;
154
+ }
155
+ arrayToRegexp(path, keys, options) {
156
+ const parts = [];
157
+ for (let i = 0; i < path.length; i++) {
158
+ parts.push(this.pathToRegexp(path[i], keys, options).source);
159
+ }
160
+ return new RegExp(`(?:${parts.join('|')})`, this.flags(options));
161
+ }
162
+ stringToRegexp(path, keys, options) {
163
+ return this.tokensToRegExp(this.parse(path, options), keys, options);
164
+ }
165
+ tokensToRegExp(tokens, keys, options) {
166
+ options = options || {};
167
+ const strict = options.strict;
168
+ const start = options.start !== false;
169
+ const end = options.end !== false;
170
+ const delimiter = options.delimiter || this.DEFAULT_DELIMITER;
171
+ const endsWith = []
172
+ .concat(options.endsWith || [])
173
+ .map(this.escapeString)
174
+ .concat('$')
175
+ .join('|');
176
+ let route = start ? '^' : '';
177
+ for (let i = 0; i < tokens.length; i++) {
178
+ const token = tokens[i];
179
+ if (typeof token === 'string') {
180
+ route += this.escapeString(token);
181
+ }
182
+ else {
183
+ const capture = token.repeat
184
+ ? `(?:${token.pattern})(?:${this.escapeString(token.delimiter)}(?:${token.pattern}))*`
185
+ : token.pattern;
186
+ if (keys) {
187
+ keys.push(token);
188
+ }
189
+ if (token.optional) {
190
+ if (!token.prefix) {
191
+ route += `(${capture})?`;
192
+ }
193
+ else {
194
+ route += `(?:${this.escapeString(token.prefix)}(${capture}))?`;
195
+ }
196
+ }
197
+ else {
198
+ route += `${this.escapeString(token.prefix)}(${capture})`;
199
+ }
200
+ }
201
+ }
202
+ if (end) {
203
+ if (!strict) {
204
+ route += `(?:${this.escapeString(delimiter)})?`;
205
+ }
206
+ route += endsWith === '$' ? '$' : `(?=${endsWith})`;
207
+ }
208
+ else {
209
+ const endToken = tokens[tokens.length - 1];
210
+ const isEndDelimited = typeof endToken === 'string' ? endToken[endToken.length - 1] === delimiter : endToken === undefined;
211
+ if (!strict) {
212
+ route += `(?:${this.escapeString(delimiter)}(?=${endsWith}))?`;
213
+ }
214
+ if (!isEndDelimited) {
215
+ route += `(?=${this.escapeString(delimiter)}|${endsWith})`;
216
+ }
217
+ }
218
+ return new RegExp(route, this.flags(options));
219
+ }
220
+ pathToRegexp(path, keys, options) {
221
+ if (path instanceof RegExp) {
222
+ return this.regexpToRegexp(path, keys);
223
+ }
224
+ if (Array.isArray(path)) {
225
+ return this.arrayToRegexp(/** @type {!Array} */ path, keys, options);
226
+ }
227
+ return this.stringToRegexp(/** @type {string} */ path, keys, options);
228
+ }
229
+ }
230
+ PathToRegexpService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PathToRegexpService_Factory() { return new PathToRegexpService(); }, token: PathToRegexpService, providedIn: "root" });
231
+ PathToRegexpService.decorators = [
232
+ { type: Injectable, args: [{
233
+ providedIn: 'root'
234
+ },] }
235
+ ];
236
+ PathToRegexpService.ctorParameters = () => [];
237
237
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC10by1yZWdleHAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9sYXlvdXQvcGF0aC10by1yZWdleHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCO1FBQ0Esc0JBQWlCLEdBQUcsR0FBRyxDQUFDO1FBRXhCLGdCQUFXLEdBQUcsSUFBSSxNQUFNLENBQ3RCLENBQUMsU0FBUyxFQUFFLHFGQUFxRixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUM1RyxHQUFHLENBQ0osQ0FBQztJQU5hLENBQUM7SUFRaEIsS0FBSyxDQUFDLEdBQVEsRUFBRSxPQUFZO1FBQzFCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxNQUFNLGdCQUFnQixHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDbEYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUM5RCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxHQUFHLENBQUM7UUFFUixPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2xELE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUN6QixJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakMsS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBRTFCLG9DQUFvQztZQUNwQyxJQUFJLE9BQU8sRUFBRTtnQkFDWCxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixTQUFTO2FBQ1Y7WUFFRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFeEIsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUMvQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDMUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFFN0QsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFDVCxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ3pCO2FBQ0Y7WUFFRCx5Q0FBeUM7WUFDekMsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDVixXQUFXLEdBQUcsS0FBSyxDQUFDO2FBQ3JCO1lBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxLQUFLLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDO1lBQ3BELE1BQU0sUUFBUSxHQUFHLFFBQVEsS0FBSyxHQUFHLElBQUksUUFBUSxLQUFLLEdBQUcsQ0FBQztZQUN0RCxNQUFNLE9BQU8sR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDO1lBQ2pDLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxnQkFBZ0IsQ0FBQztZQUUzQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLElBQUksRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFO2dCQUNuQixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsU0FBUztnQkFDcEIsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE9BQU8sRUFBRSxPQUFPO29CQUNkLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztvQkFDM0IsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDLEtBQUs7YUFDM0csQ0FBQyxDQUFDO1NBQ0o7UUFFRCxpQ0FBaUM7UUFDakMsSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFRLEVBQUUsT0FBWTtRQUM1QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBVyxFQUFFLE9BQVk7UUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RDLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUNqQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQzVFO1NBQ0Y7UUFFRCxPQUFPLFVBQVUsSUFBUyxFQUFFLE9BQVk7WUFDdEMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGtCQUFrQixDQUFDO1lBQ2pFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUU3RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV4QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtvQkFDN0IsSUFBSSxJQUFJLEtBQUssQ0FBQztvQkFDZCxTQUFTO2lCQUNWO2dCQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNsRCxJQUFJLE9BQU8sQ0FBQztnQkFFWixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO3dCQUNqQixNQUFNLElBQUksU0FBUyxDQUFDLGFBQWEsS0FBSyxDQUFDLElBQUksZ0NBQWdDLENBQUMsQ0FBQztxQkFDOUU7b0JBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTt3QkFDdEIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFOzRCQUNsQixTQUFTO3lCQUNWO3dCQUVELE1BQU0sSUFBSSxTQUFTLENBQUMsYUFBYSxLQUFLLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxDQUFDO3FCQUNqRTtvQkFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDckMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBRWxDLElBQUksUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTs0QkFDekMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLElBQUksZUFBZSxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQzt5QkFDakY7d0JBRUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztxQkFDOUQ7b0JBRUQsU0FBUztpQkFDVjtnQkFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFO29CQUN4RixPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFFdkMsSUFBSSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUN6QyxNQUFNLElBQUksU0FBUyxDQUFDLGFBQWEsS0FBSyxDQUFDLElBQUksZUFBZSxLQUFLLENBQUMsT0FBTyxlQUFlLE9BQU8sR0FBRyxDQUFDLENBQUM7cUJBQ25HO29CQUVELElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztvQkFDL0IsU0FBUztpQkFDVjtnQkFFRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0JBQ2xCLFNBQVM7aUJBQ1Y7Z0JBRUQsTUFBTSxJQUFJLFNBQVMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxJQUFJLFdBQVcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2FBQ2pHO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQVE7UUFDbkIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLDJCQUEyQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVTtRQUNwQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBWTtRQUNoQixPQUFPLE9BQU8sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNqRCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVMsRUFBRSxJQUFTO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFOUMsSUFBSSxNQUFNLEVBQUU7WUFDVixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDUixJQUFJLEVBQUUsQ0FBQztvQkFDUCxNQUFNLEVBQUUsSUFBSTtvQkFDWixTQUFTLEVBQUUsSUFBSTtvQkFDZixRQUFRLEVBQUUsS0FBSztvQkFDZixNQUFNLEVBQUUsS0FBSztvQkFDYixPQUFPLEVBQUUsSUFBSTtpQkFDZCxDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVMsRUFBRSxJQUFTLEVBQUUsT0FBWTtRQUM5QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFFakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUQ7UUFFRCxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVMsRUFBRSxJQUFTLEVBQUUsT0FBWTtRQUMvQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBVyxFQUFFLElBQVMsRUFBRSxPQUFZO1FBQ2pELE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBRXhCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDOUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUM7UUFDdEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUM7UUFDbEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDOUQsTUFBTSxRQUFRLEdBQUcsRUFBRTthQUNoQixNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7YUFDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDdEIsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNYLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNiLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXhCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUM3QixLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNuQztpQkFBTTtnQkFDTCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTTtvQkFDMUIsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLE9BQU8sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsT0FBTyxLQUFLO29CQUN0RixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFFbEIsSUFBSSxJQUFJLEVBQUU7b0JBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDbEI7Z0JBRUQsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO29CQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTt3QkFDakIsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUM7cUJBQzFCO3lCQUFNO3dCQUNMLEtBQUssSUFBSSxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sS0FBSyxDQUFDO3FCQUNoRTtpQkFDRjtxQkFBTTtvQkFDTCxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQztpQkFDM0Q7YUFDRjtTQUNGO1FBRUQsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNYLEtBQUssSUFBSSxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQzthQUNqRDtZQUVELEtBQUssSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUM7U0FDckQ7YUFBTTtZQUNMLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sY0FBYyxHQUNsQixPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQztZQUV0RyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNYLEtBQUssSUFBSSxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sUUFBUSxLQUFLLENBQUM7YUFDaEU7WUFDRCxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNuQixLQUFLLElBQUksTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDO2FBQzVEO1NBQ0Y7UUFFRCxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFTLEVBQUUsSUFBUyxFQUFFLE9BQVk7UUFDN0MsSUFBSSxJQUFJLFlBQVksTUFBTSxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDdEU7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxDQUFDOzs7O1lBMVJGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGF0aFRvUmVnZXhwU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgREVGQVVMVF9ERUxJTUlURVIgPSAnLyc7XG5cbiAgUEFUSF9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICAgIFsnKFxcXFxcXFxcLiknLCAnKD86XFxcXDooXFxcXHcrKSg/OlxcXFwoKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKCldKSspXFxcXCkpP3xcXFxcKCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpXSkrKVxcXFwpKShbKyo/XSk/J10uam9pbignfCcpLFxuICAgICdnJ1xuICApO1xuXG4gIHBhcnNlKHN0cjogYW55LCBvcHRpb25zOiBhbnkpIHtcbiAgICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgICBsZXQga2V5ID0gMDtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBwYXRoID0gJyc7XG4gICAgY29uc3QgZGVmYXVsdERlbGltaXRlciA9IChvcHRpb25zICYmIG9wdGlvbnMuZGVsaW1pdGVyKSB8fCB0aGlzLkRFRkFVTFRfREVMSU1JVEVSO1xuICAgIGNvbnN0IHdoaXRlbGlzdCA9IChvcHRpb25zICYmIG9wdGlvbnMud2hpdGVsaXN0KSB8fCB1bmRlZmluZWQ7XG4gICAgbGV0IHBhdGhFc2NhcGVkID0gZmFsc2U7XG4gICAgbGV0IHJlcztcblxuICAgIHdoaWxlICgocmVzID0gdGhpcy5QQVRIX1JFR0VYUC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtID0gcmVzWzBdO1xuICAgICAgY29uc3QgZXNjYXBlZCA9IHJlc1sxXTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IHJlcy5pbmRleDtcbiAgICAgIHBhdGggKz0gc3RyLnNsaWNlKGluZGV4LCBvZmZzZXQpO1xuICAgICAgaW5kZXggPSBvZmZzZXQgKyBtLmxlbmd0aDtcblxuICAgICAgLy8gSWdub3JlIGFscmVhZHkgZXNjYXBlZCBzZXF1ZW5jZXMuXG4gICAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgICBwYXRoICs9IGVzY2FwZWRbMV07XG4gICAgICAgIHBhdGhFc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBwcmV2ID0gJyc7XG4gICAgICBjb25zdCBuYW1lID0gcmVzWzJdO1xuICAgICAgY29uc3QgY2FwdHVyZSA9IHJlc1szXTtcbiAgICAgIGNvbnN0IGdyb3VwID0gcmVzWzRdO1xuICAgICAgY29uc3QgbW9kaWZpZXIgPSByZXNbNV07XG5cbiAgICAgIGlmICghcGF0aEVzY2FwZWQgJiYgcGF0aC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgayA9IHBhdGgubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgYyA9IHBhdGhba107XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSB3aGl0ZWxpc3QgPyB3aGl0ZWxpc3QuaW5kZXhPZihjKSA+IC0xIDogdHJ1ZTtcblxuICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgIHByZXYgPSBjO1xuICAgICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKDAsIGspO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFB1c2ggdGhlIGN1cnJlbnQgcGF0aCBvbnRvIHRoZSB0b2tlbnMuXG4gICAgICBpZiAocGF0aCkge1xuICAgICAgICB0b2tlbnMucHVzaChwYXRoKTtcbiAgICAgICAgcGF0aCA9ICcnO1xuICAgICAgICBwYXRoRXNjYXBlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXBlYXQgPSBtb2RpZmllciA9PT0gJysnIHx8IG1vZGlmaWVyID09PSAnKic7XG4gICAgICBjb25zdCBvcHRpb25hbCA9IG1vZGlmaWVyID09PSAnPycgfHwgbW9kaWZpZXIgPT09ICcqJztcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBjYXB0dXJlIHx8IGdyb3VwO1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gcHJldiB8fCBkZWZhdWx0RGVsaW1pdGVyO1xuXG4gICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgIG5hbWU6IG5hbWUgfHwga2V5KyssXG4gICAgICAgIHByZWZpeDogcHJldixcbiAgICAgICAgZGVsaW1pdGVyOiBkZWxpbWl0ZXIsXG4gICAgICAgIG9wdGlvbmFsOiBvcHRpb25hbCxcbiAgICAgICAgcmVwZWF0OiByZXBlYXQsXG4gICAgICAgIHBhdHRlcm46IHBhdHRlcm5cbiAgICAgICAgICA/IHRoaXMuZXNjYXBlR3JvdXAocGF0dGVybilcbiAgICAgICAgICA6IGBbXiR7dGhpcy5lc2NhcGVTdHJpbmcoZGVsaW1pdGVyID09PSBkZWZhdWx0RGVsaW1pdGVyID8gZGVsaW1pdGVyIDogZGVsaW1pdGVyICsgZGVmYXVsdERlbGltaXRlcil9XSs/YFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUHVzaCBhbnkgcmVtYWluaW5nIGNoYXJhY3RlcnMuXG4gICAgaWYgKHBhdGggfHwgaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgICB0b2tlbnMucHVzaChwYXRoICsgc3RyLnN1YnN0cihpbmRleCkpO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cbiAgY29tcGlsZShzdHI6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zVG9GdW5jdGlvbih0aGlzLnBhcnNlKHN0ciwgb3B0aW9ucyksIG9wdGlvbnMpO1xuICB9XG5cbiAgdG9rZW5zVG9GdW5jdGlvbih0b2tlbnM6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IG5ldyBBcnJheSh0b2tlbnMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodHlwZW9mIHRva2Vuc1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbWF0Y2hlc1tpXSA9IG5ldyBSZWdFeHAoYF4oPzoke3Rva2Vuc1tpXS5wYXR0ZXJufSkkYCwgdGhpcy5mbGFncyhvcHRpb25zKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhOiBhbnksIG9wdGlvbnM6IGFueSkge1xuICAgICAgbGV0IHBhdGggPSAnJztcbiAgICAgIGNvbnN0IGVuY29kZSA9IChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlKSB8fCBlbmNvZGVVUklDb21wb25lbnQ7XG4gICAgICBjb25zdCB2YWxpZGF0ZSA9IG9wdGlvbnMgPyBvcHRpb25zLnZhbGlkYXRlICE9PSBmYWxzZSA6IHRydWU7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcGF0aCArPSB0b2tlbjtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YSA/IGRhdGFbdG9rZW4ubmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBzZWdtZW50O1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGlmICghdG9rZW4ucmVwZWF0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcIiR7dG9rZW4ubmFtZX1cIiB0byBub3QgcmVwZWF0LCBidXQgZ290IGFycmF5YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcIiR7dG9rZW4ubmFtZX1cIiB0byBub3QgYmUgZW1wdHlgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbHVlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBzZWdtZW50ID0gZW5jb2RlKHZhbHVlW2pdLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZSAmJiAhbWF0Y2hlc1tpXS50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGFsbCBcIiR7dG9rZW4ubmFtZX1cIiB0byBtYXRjaCBcIiR7dG9rZW4ucGF0dGVybn1cImApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXRoICs9IChqID09PSAwID8gdG9rZW4ucHJlZml4IDogdG9rZW4uZGVsaW1pdGVyKSArIHNlZ21lbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgc2VnbWVudCA9IGVuY29kZShTdHJpbmcodmFsdWUpLCB0b2tlbik7XG5cbiAgICAgICAgICBpZiAodmFsaWRhdGUgJiYgIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXCIke3Rva2VuLm5hbWV9XCIgdG8gbWF0Y2ggXCIke3Rva2VuLnBhdHRlcm59XCIsIGJ1dCBnb3QgXCIke3NlZ21lbnR9XCJgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRoICs9IHRva2VuLnByZWZpeCArIHNlZ21lbnQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFwiJHt0b2tlbi5uYW1lfVwiIHRvIGJlICR7dG9rZW4ucmVwZWF0ID8gJ2FuIGFycmF5JyA6ICdhIHN0cmluZyd9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH07XG4gIH1cblxuICBlc2NhcGVTdHJpbmcoc3RyOiBhbnkpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLisqPz1eIToke30oKVtcXF18L1xcXFxdKS9nLCAnXFxcXCQxJyk7XG4gIH1cblxuICBlc2NhcGVHcm91cChncm91cDogYW55KSB7XG4gICAgcmV0dXJuIGdyb3VwLnJlcGxhY2UoLyhbPSE6JC8oKV0pL2csICdcXFxcJDEnKTtcbiAgfVxuXG4gIGZsYWdzKG9wdGlvbnM6IGFueSkge1xuICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuc2Vuc2l0aXZlID8gJycgOiAnaSc7XG4gIH1cblxuICByZWdleHBUb1JlZ2V4cChwYXRoOiBhbnksIGtleXM6IGFueSkge1xuICAgIGlmICgha2V5cykge1xuICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgY29uc3QgZ3JvdXBzID0gcGF0aC5zb3VyY2UubWF0Y2goL1xcKCg/IVxcPykvZyk7XG5cbiAgICBpZiAoZ3JvdXBzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBrZXlzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGksXG4gICAgICAgICAgcHJlZml4OiBudWxsLFxuICAgICAgICAgIGRlbGltaXRlcjogbnVsbCxcbiAgICAgICAgICBvcHRpb25hbDogZmFsc2UsXG4gICAgICAgICAgcmVwZWF0OiBmYWxzZSxcbiAgICAgICAgICBwYXR0ZXJuOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgYXJyYXlUb1JlZ2V4cChwYXRoOiBhbnksIGtleXM6IGFueSwgb3B0aW9uczogYW55KTogUmVnRXhwIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYXJ0cy5wdXNoKHRoaXMucGF0aFRvUmVnZXhwKHBhdGhbaV0sIGtleXMsIG9wdGlvbnMpLnNvdXJjZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYCg/OiR7cGFydHMuam9pbignfCcpfSlgLCB0aGlzLmZsYWdzKG9wdGlvbnMpKTtcbiAgfVxuXG4gIHN0cmluZ1RvUmVnZXhwKHBhdGg6IGFueSwga2V5czogYW55LCBvcHRpb25zOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNUb1JlZ0V4cCh0aGlzLnBhcnNlKHBhdGgsIG9wdGlvbnMpLCBrZXlzLCBvcHRpb25zKTtcbiAgfVxuXG4gIHRva2Vuc1RvUmVnRXhwKHRva2VuczogYW55LCBrZXlzOiBhbnksIG9wdGlvbnM6IGFueSkge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgY29uc3Qgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3Q7XG4gICAgY29uc3Qgc3RhcnQgPSBvcHRpb25zLnN0YXJ0ICE9PSBmYWxzZTtcbiAgICBjb25zdCBlbmQgPSBvcHRpb25zLmVuZCAhPT0gZmFsc2U7XG4gICAgY29uc3QgZGVsaW1pdGVyID0gb3B0aW9ucy5kZWxpbWl0ZXIgfHwgdGhpcy5ERUZBVUxUX0RFTElNSVRFUjtcbiAgICBjb25zdCBlbmRzV2l0aCA9IFtdXG4gICAgICAuY29uY2F0KG9wdGlvbnMuZW5kc1dpdGggfHwgW10pXG4gICAgICAubWFwKHRoaXMuZXNjYXBlU3RyaW5nKVxuICAgICAgLmNvbmNhdCgnJCcpXG4gICAgICAuam9pbignfCcpO1xuICAgIGxldCByb3V0ZSA9IHN0YXJ0ID8gJ14nIDogJyc7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJvdXRlICs9IHRoaXMuZXNjYXBlU3RyaW5nKHRva2VuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNhcHR1cmUgPSB0b2tlbi5yZXBlYXRcbiAgICAgICAgICA/IGAoPzoke3Rva2VuLnBhdHRlcm59KSg/OiR7dGhpcy5lc2NhcGVTdHJpbmcodG9rZW4uZGVsaW1pdGVyKX0oPzoke3Rva2VuLnBhdHRlcm59KSkqYFxuICAgICAgICAgIDogdG9rZW4ucGF0dGVybjtcblxuICAgICAgICBpZiAoa2V5cykge1xuICAgICAgICAgIGtleXMucHVzaCh0b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgICBpZiAoIXRva2VuLnByZWZpeCkge1xuICAgICAgICAgICAgcm91dGUgKz0gYCgke2NhcHR1cmV9KT9gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3V0ZSArPSBgKD86JHt0aGlzLmVzY2FwZVN0cmluZyh0b2tlbi5wcmVmaXgpfSgke2NhcHR1cmV9KSk/YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm91dGUgKz0gYCR7dGhpcy5lc2NhcGVTdHJpbmcodG9rZW4ucHJlZml4KX0oJHtjYXB0dXJlfSlgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVuZCkge1xuICAgICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgcm91dGUgKz0gYCg/OiR7dGhpcy5lc2NhcGVTdHJpbmcoZGVsaW1pdGVyKX0pP2A7XG4gICAgICB9XG5cbiAgICAgIHJvdXRlICs9IGVuZHNXaXRoID09PSAnJCcgPyAnJCcgOiBgKD89JHtlbmRzV2l0aH0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZW5kVG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3QgaXNFbmREZWxpbWl0ZWQgPVxuICAgICAgICB0eXBlb2YgZW5kVG9rZW4gPT09ICdzdHJpbmcnID8gZW5kVG9rZW5bZW5kVG9rZW4ubGVuZ3RoIC0gMV0gPT09IGRlbGltaXRlciA6IGVuZFRva2VuID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICghc3RyaWN0KSB7XG4gICAgICAgIHJvdXRlICs9IGAoPzoke3RoaXMuZXNjYXBlU3RyaW5nKGRlbGltaXRlcil9KD89JHtlbmRzV2l0aH0pKT9gO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0VuZERlbGltaXRlZCkge1xuICAgICAgICByb3V0ZSArPSBgKD89JHt0aGlzLmVzY2FwZVN0cmluZyhkZWxpbWl0ZXIpfXwke2VuZHNXaXRofSlgO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVnRXhwKHJvdXRlLCB0aGlzLmZsYWdzKG9wdGlvbnMpKTtcbiAgfVxuXG4gIHBhdGhUb1JlZ2V4cChwYXRoOiBhbnksIGtleXM6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgaWYgKHBhdGggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiB0aGlzLnJlZ2V4cFRvUmVnZXhwKHBhdGgsIGtleXMpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcnJheVRvUmVnZXhwKC8qKiBAdHlwZSB7IUFycmF5fSAqLyBwYXRoLCBrZXlzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpbmdUb1JlZ2V4cCgvKiogQHR5cGUge3N0cmluZ30gKi8gcGF0aCwga2V5cywgb3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==