@lenne.tech/ng-base 0.0.11 → 0.2.2

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 (26) hide show
  1. package/bundles/lenne.tech-ng-base-src-lib-base.umd.js +338 -32
  2. package/bundles/lenne.tech-ng-base-src-lib-base.umd.js.map +1 -1
  3. package/bundles/lenne.tech-ng-base.umd.js +338 -32
  4. package/bundles/lenne.tech-ng-base.umd.js.map +1 -1
  5. package/esm2015/lib/base/factories/apollo-options.factory.js +43 -4
  6. package/esm2015/lib/base/interfaces/base-module-config.interface.js +1 -1
  7. package/esm2015/lib/base/services/graphql-plus.service.js +5 -2
  8. package/esm2015/lib/base/services/graphql.service.js +37 -6
  9. package/esm2015/lib/base/services/scroll.service.js +201 -16
  10. package/esm2015/src/lib/base/factories/apollo-options.factory.js +43 -4
  11. package/esm2015/src/lib/base/interfaces/base-module-config.interface.js +1 -1
  12. package/esm2015/src/lib/base/services/graphql-plus.service.js +5 -2
  13. package/esm2015/src/lib/base/services/graphql.service.js +37 -6
  14. package/esm2015/src/lib/base/services/scroll.service.js +201 -16
  15. package/fesm2015/lenne.tech-ng-base-src-lib-base.js +281 -24
  16. package/fesm2015/lenne.tech-ng-base-src-lib-base.js.map +1 -1
  17. package/fesm2015/lenne.tech-ng-base.js +281 -24
  18. package/fesm2015/lenne.tech-ng-base.js.map +1 -1
  19. package/lib/base/interfaces/base-module-config.interface.d.ts +9 -0
  20. package/lib/base/services/graphql.service.d.ts +1 -1
  21. package/lib/base/services/scroll.service.d.ts +66 -3
  22. package/package.json +1 -1
  23. package/src/lib/base/interfaces/base-module-config.interface.d.ts +9 -0
  24. package/src/lib/base/lenne.tech-ng-base-src-lib-base.metadata.json +1 -1
  25. package/src/lib/base/services/graphql.service.d.ts +1 -1
  26. package/src/lib/base/services/scroll.service.d.ts +66 -3
@@ -1,10 +1,13 @@
1
- import { ApolloLink } from '@apollo/client/core';
1
+ import { ApolloLink, concat, split } from '@apollo/client/core';
2
2
  import { InMemoryCache } from '@apollo/client/cache';
3
+ import { WebSocketLink } from '@apollo/client/link/ws';
4
+ import { getMainDefinition } from '@apollo/client/utilities';
3
5
  /**
4
6
  * Factory for apollo-angular options
5
7
  */
6
8
  export function apolloOptionsFactory(baseModuleConfig, httpLink, authService) {
7
- const link = httpLink.create({
9
+ const links = [];
10
+ const http = httpLink.create({
8
11
  uri: baseModuleConfig.apiUrl,
9
12
  });
10
13
  const authMiddleware = new ApolloLink((operation, forward) => {
@@ -18,8 +21,44 @@ export function apolloOptionsFactory(baseModuleConfig, httpLink, authService) {
18
21
  }
19
22
  return forward(operation);
20
23
  });
24
+ if (baseModuleConfig.wsUrl) {
25
+ let wsClient;
26
+ if (localStorage) {
27
+ const token = authService.token || null;
28
+ wsClient = new WebSocketLink({
29
+ uri: baseModuleConfig.wsUrl,
30
+ options: {
31
+ reconnect: true,
32
+ connectionParams: {
33
+ authToken: token,
34
+ },
35
+ },
36
+ });
37
+ }
38
+ else {
39
+ wsClient = new WebSocketLink({
40
+ uri: baseModuleConfig.wsUrl,
41
+ options: {
42
+ reconnect: true,
43
+ },
44
+ });
45
+ }
46
+ // using the ability to split links, you can send data to each link
47
+ // depending on what kind of operation is being sent
48
+ links.push(split(
49
+ // split based on operation type
50
+ ({ query }) => {
51
+ // @ts-ignore
52
+ const { kind, operation } = getMainDefinition(query);
53
+ return kind === 'OperationDefinition' && operation === 'subscription';
54
+ }, wsClient, concat(authMiddleware, http)));
55
+ }
56
+ else {
57
+ links.push(http);
58
+ links.push(authMiddleware);
59
+ }
21
60
  return {
22
- link: ApolloLink.from([authMiddleware, link]),
61
+ link: ApolloLink.from(links),
23
62
  cache: new InMemoryCache(),
24
63
  defaultOptions: {
25
64
  query: {
@@ -28,4 +67,4 @@ export function apolloOptionsFactory(baseModuleConfig, httpLink, authService) {
28
67
  },
29
68
  };
30
69
  }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBvbGxvLW9wdGlvbnMuZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc3JjL2xpYi9iYXNlL2ZhY3Rvcmllcy9hcG9sbG8tb3B0aW9ucy5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsZ0JBQWtDLEVBQUUsUUFBa0IsRUFBRSxXQUF3QjtJQUNuSCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzNCLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNO0tBQzdCLENBQUMsQ0FBQztJQUVILE1BQU0sY0FBYyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQzNELE1BQU0sT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUN4QixJQUFJLFlBQVksRUFBRTtZQUNoQixNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztZQUN4QyxJQUFJLEtBQUssRUFBRTtnQkFDVCxPQUFPLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxLQUFLLENBQUM7YUFDM0M7WUFDRCxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDM0M7UUFDRCxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3QyxLQUFLLEVBQUUsSUFBSSxhQUFhLEVBQUU7UUFDMUIsY0FBYyxFQUFFO1lBQ2QsS0FBSyxFQUFFO2dCQUNMLFdBQVcsRUFBRSxjQUFjO2FBQzVCO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBMaW5rIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXIvaHR0cCc7XG5pbXBvcnQgeyBCYXNlTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9iYXNlLW1vZHVsZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEFwb2xsb0xpbmsgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7IEluTWVtb3J5Q2FjaGUgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jYWNoZSc7XG5cbi8qKlxuICogRmFjdG9yeSBmb3IgYXBvbGxvLWFuZ3VsYXIgb3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBvbGxvT3B0aW9uc0ZhY3RvcnkoYmFzZU1vZHVsZUNvbmZpZzogQmFzZU1vZHVsZUNvbmZpZywgaHR0cExpbms6IEh0dHBMaW5rLCBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHtcbiAgY29uc3QgbGluayA9IGh0dHBMaW5rLmNyZWF0ZSh7XG4gICAgdXJpOiBiYXNlTW9kdWxlQ29uZmlnLmFwaVVybCxcbiAgfSk7XG5cbiAgY29uc3QgYXV0aE1pZGRsZXdhcmUgPSBuZXcgQXBvbGxvTGluaygob3BlcmF0aW9uLCBmb3J3YXJkKSA9PiB7XG4gICAgY29uc3QgaGVhZGVyczogYW55ID0ge307XG4gICAgaWYgKGxvY2FsU3RvcmFnZSkge1xuICAgICAgY29uc3QgdG9rZW4gPSBhdXRoU2VydmljZS50b2tlbiB8fCBudWxsO1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIGhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCZWFyZXIgJyArIHRva2VuO1xuICAgICAgfVxuICAgICAgb3BlcmF0aW9uLnNldENvbnRleHQoKCkgPT4gKHsgaGVhZGVycyB9KSk7XG4gICAgfVxuICAgIHJldHVybiBmb3J3YXJkKG9wZXJhdGlvbik7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgbGluazogQXBvbGxvTGluay5mcm9tKFthdXRoTWlkZGxld2FyZSwgbGlua10pLFxuICAgIGNhY2hlOiBuZXcgSW5NZW1vcnlDYWNoZSgpLFxuICAgIGRlZmF1bHRPcHRpb25zOiB7XG4gICAgICBxdWVyeToge1xuICAgICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG4iXX0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBvbGxvLW9wdGlvbnMuZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc3JjL2xpYi9iYXNlL2ZhY3Rvcmllcy9hcG9sbG8tb3B0aW9ucy5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0Q7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsZ0JBQWtDLEVBQUUsUUFBa0IsRUFBRSxXQUF3QjtJQUNuSCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7SUFFakIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUMzQixHQUFHLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtLQUM3QixDQUFDLENBQUM7SUFFSCxNQUFNLGNBQWMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUMzRCxNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDeEIsSUFBSSxZQUFZLEVBQUU7WUFDaEIsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7WUFDeEMsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsT0FBTyxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsS0FBSyxDQUFDO2FBQzNDO1lBQ0QsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRTtRQUMxQixJQUFJLFFBQVEsQ0FBQztRQUViLElBQUksWUFBWSxFQUFFO1lBQ2hCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO1lBQ3hDLFFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBQztnQkFDM0IsR0FBRyxFQUFFLGdCQUFnQixDQUFDLEtBQUs7Z0JBQzNCLE9BQU8sRUFBRTtvQkFDUCxTQUFTLEVBQUUsSUFBSTtvQkFDZixnQkFBZ0IsRUFBRTt3QkFDaEIsU0FBUyxFQUFFLEtBQUs7cUJBQ2pCO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLFFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBQztnQkFDM0IsR0FBRyxFQUFFLGdCQUFnQixDQUFDLEtBQUs7Z0JBQzNCLE9BQU8sRUFBRTtvQkFDUCxTQUFTLEVBQUUsSUFBSTtpQkFDaEI7YUFDRixDQUFDLENBQUM7U0FDSjtRQUVELG1FQUFtRTtRQUNuRSxvREFBb0Q7UUFDcEQsS0FBSyxDQUFDLElBQUksQ0FDUixLQUFLO1FBQ0gsZ0NBQWdDO1FBQ2hDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ1osYUFBYTtZQUNiLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsT0FBTyxJQUFJLEtBQUsscUJBQXFCLElBQUksU0FBUyxLQUFLLGNBQWMsQ0FBQztRQUN4RSxDQUFDLEVBQ0QsUUFBUSxFQUNSLE1BQU0sQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQzdCLENBQ0YsQ0FBQztLQUNIO1NBQU07UUFDTCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDNUI7SUFFRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzVCLEtBQUssRUFBRSxJQUFJLGFBQWEsRUFBRTtRQUMxQixjQUFjLEVBQUU7WUFDZCxLQUFLLEVBQUU7Z0JBQ0wsV0FBVyxFQUFFLGNBQWM7YUFDNUI7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cExpbmsgfSBmcm9tICdhcG9sbG8tYW5ndWxhci9odHRwJztcbmltcG9ydCB7IEJhc2VNb2R1bGVDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Jhc2UtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBvbGxvTGluaywgY29uY2F0LCBzcGxpdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgSW5NZW1vcnlDYWNoZSB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NhY2hlJztcbmltcG9ydCB7IFdlYlNvY2tldExpbmsgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9saW5rL3dzJztcbmltcG9ydCB7IGdldE1haW5EZWZpbml0aW9uIH0gZnJvbSAnQGFwb2xsby9jbGllbnQvdXRpbGl0aWVzJztcblxuLyoqXG4gKiBGYWN0b3J5IGZvciBhcG9sbG8tYW5ndWxhciBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcG9sbG9PcHRpb25zRmFjdG9yeShiYXNlTW9kdWxlQ29uZmlnOiBCYXNlTW9kdWxlQ29uZmlnLCBodHRwTGluazogSHR0cExpbmssIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkge1xuICBjb25zdCBsaW5rcyA9IFtdO1xuXG4gIGNvbnN0IGh0dHAgPSBodHRwTGluay5jcmVhdGUoe1xuICAgIHVyaTogYmFzZU1vZHVsZUNvbmZpZy5hcGlVcmwsXG4gIH0pO1xuXG4gIGNvbnN0IGF1dGhNaWRkbGV3YXJlID0gbmV3IEFwb2xsb0xpbmsoKG9wZXJhdGlvbiwgZm9yd2FyZCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IGFueSA9IHt9O1xuICAgIGlmIChsb2NhbFN0b3JhZ2UpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gYXV0aFNlcnZpY2UudG9rZW4gfHwgbnVsbDtcbiAgICAgIGlmICh0b2tlbikge1xuICAgICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmVhcmVyICcgKyB0b2tlbjtcbiAgICAgIH1cbiAgICAgIG9wZXJhdGlvbi5zZXRDb250ZXh0KCgpID0+ICh7IGhlYWRlcnMgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gZm9yd2FyZChvcGVyYXRpb24pO1xuICB9KTtcblxuICBpZiAoYmFzZU1vZHVsZUNvbmZpZy53c1VybCkge1xuICAgIGxldCB3c0NsaWVudDtcblxuICAgIGlmIChsb2NhbFN0b3JhZ2UpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gYXV0aFNlcnZpY2UudG9rZW4gfHwgbnVsbDtcbiAgICAgIHdzQ2xpZW50ID0gbmV3IFdlYlNvY2tldExpbmsoe1xuICAgICAgICB1cmk6IGJhc2VNb2R1bGVDb25maWcud3NVcmwsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICByZWNvbm5lY3Q6IHRydWUsXG4gICAgICAgICAgY29ubmVjdGlvblBhcmFtczoge1xuICAgICAgICAgICAgYXV0aFRva2VuOiB0b2tlbixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdzQ2xpZW50ID0gbmV3IFdlYlNvY2tldExpbmsoe1xuICAgICAgICB1cmk6IGJhc2VNb2R1bGVDb25maWcud3NVcmwsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICByZWNvbm5lY3Q6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB1c2luZyB0aGUgYWJpbGl0eSB0byBzcGxpdCBsaW5rcywgeW91IGNhbiBzZW5kIGRhdGEgdG8gZWFjaCBsaW5rXG4gICAgLy8gZGVwZW5kaW5nIG9uIHdoYXQga2luZCBvZiBvcGVyYXRpb24gaXMgYmVpbmcgc2VudFxuICAgIGxpbmtzLnB1c2goXG4gICAgICBzcGxpdChcbiAgICAgICAgLy8gc3BsaXQgYmFzZWQgb24gb3BlcmF0aW9uIHR5cGVcbiAgICAgICAgKHsgcXVlcnkgfSkgPT4ge1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBjb25zdCB7IGtpbmQsIG9wZXJhdGlvbiB9ID0gZ2V0TWFpbkRlZmluaXRpb24ocXVlcnkpO1xuICAgICAgICAgIHJldHVybiBraW5kID09PSAnT3BlcmF0aW9uRGVmaW5pdGlvbicgJiYgb3BlcmF0aW9uID09PSAnc3Vic2NyaXB0aW9uJztcbiAgICAgICAgfSxcbiAgICAgICAgd3NDbGllbnQsXG4gICAgICAgIGNvbmNhdChhdXRoTWlkZGxld2FyZSwgaHR0cClcbiAgICAgIClcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGxpbmtzLnB1c2goaHR0cCk7XG4gICAgbGlua3MucHVzaChhdXRoTWlkZGxld2FyZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxpbms6IEFwb2xsb0xpbmsuZnJvbShsaW5rcyksXG4gICAgY2FjaGU6IG5ldyBJbk1lbW9yeUNhY2hlKCksXG4gICAgZGVmYXVsdE9wdGlvbnM6IHtcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
@@ -1,3 +1,3 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const BASE_MODULE_CONFIG = new InjectionToken('BASE_MODULE_CONFIG');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tb2R1bGUtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc3JjL2xpYi9iYXNlL2ludGVyZmFjZXMvYmFzZS1tb2R1bGUtY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBd0QvQyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2VUeXBlIH0gZnJvbSAnLi4vdHlwZXMvc3RvcmFnZS50eXBlJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBiYXNlIG1vZHVsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VNb2R1bGVDb25maWcge1xuICAvKipcbiAgICogVVJMIHRvIHNlcnZlciBBUElcbiAgICogRGVmYXVsdDogJ2xvY2FsaG9zdDozMDAwJ1xuICAgKi9cbiAgYXBpVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJlZGlyZWN0IFVSTCBmb3IgQXV0aEd1YXJkXG4gICAqIERlZmF1bHQ6ICcvYXV0aCdcbiAgICovXG4gIGF1dGhHdWFyZFJlZGlyZWN0VXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGxvZ2dpbmcgaXMgZW5hYmxlZCBvciBub3RcbiAgICovXG4gIGxvZ2dpbmc/OiBmYWxzZTtcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiB0aGUgQXBwIChmb3Igc3RvcmFnZSBoYW5kbGluZylcbiAgICogRGVmYXVsdDogbnVsbFxuICAgKi9cbiAgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUHJlZml4IG9mIHRoZSBBcHAgKGZvciBzdG9yYWdlIGhhbmRsaW5nKVxuICAgKiBEZWZhdWx0OiBudWxsXG4gICAqL1xuICBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNjcm9sbCBkZXRlY3Rpb24gb2Zmc2V0IGZvciBTY3JvbGxTZXJ2aWNlXG4gICAqIFNob3VsZCBiZSA+PSBzY3JvbGxPZmZzZXRcbiAgICogRGVmYXVsdDogMjAwXG4gICAqL1xuICBzY3JvbGxEZXRlY3Rpb25PZmZzZXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNjcm9sbCBvZmZzZXQgZm9yIFNjcm9sbFNlcnZpY2VcbiAgICogRGVmYXVsdDogMTAwXG4gICAqL1xuICBzY3JvbGxPZmZzZXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2Ygc3RvcmFnZTogJ3Nlc3Npb24nIG9yICdsb2NhbCdcbiAgICogRGVmYXVsdDogJ2xvY2FsJ1xuICAgKi9cbiAgc3RvcmFnZVR5cGU/OiBTdG9yYWdlVHlwZTtcbn1cblxuZXhwb3J0IGNvbnN0IEJBU0VfTU9EVUxFX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbignQkFTRV9NT0RVTEVfQ09ORklHJyk7XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tb2R1bGUtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc3JjL2xpYi9iYXNlL2ludGVyZmFjZXMvYmFzZS1tb2R1bGUtY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBbUUvQyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2VUeXBlIH0gZnJvbSAnLi4vdHlwZXMvc3RvcmFnZS50eXBlJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBiYXNlIG1vZHVsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VNb2R1bGVDb25maWcge1xuICAvKipcbiAgICogVVJMIHRvIHNlcnZlciBBUElcbiAgICogRGVmYXVsdDogJ2xvY2FsaG9zdDozMDAwJ1xuICAgKi9cbiAgYXBpVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXZWJzb2NrZXQgVVJMIHRvIHNlcnZlciBBUElcbiAgICovXG4gIHdzVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJlZGlyZWN0IFVSTCBmb3IgQXV0aEd1YXJkXG4gICAqIERlZmF1bHQ6ICcvYXV0aCdcbiAgICovXG4gIGF1dGhHdWFyZFJlZGlyZWN0VXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGxvZ2dpbmcgaXMgZW5hYmxlZCBvciBub3RcbiAgICovXG4gIGxvZ2dpbmc/OiBmYWxzZTtcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiB0aGUgQXBwIChmb3Igc3RvcmFnZSBoYW5kbGluZylcbiAgICogRGVmYXVsdDogbnVsbFxuICAgKi9cbiAgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUHJlZml4IG9mIHRoZSBBcHAgKGZvciBzdG9yYWdlIGhhbmRsaW5nKVxuICAgKiBEZWZhdWx0OiBudWxsXG4gICAqL1xuICBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNjcm9sbCBkZXRlY3Rpb24gb2Zmc2V0IGZvciBTY3JvbGxTZXJ2aWNlXG4gICAqIFNob3VsZCBiZSA+PSBzY3JvbGxPZmZzZXRcbiAgICogRGVmYXVsdDogMjAwXG4gICAqL1xuICBzY3JvbGxEZXRlY3Rpb25PZmZzZXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNjcm9sbCBvZmZzZXQgZm9yIFNjcm9sbFNlcnZpY2VcbiAgICogRGVmYXVsdDogMTAwXG4gICAqL1xuICBzY3JvbGxPZmZzZXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNhbXBsaW5nIHJhdGUgZm9yIHNjcm9sbCBkb25lIGRldGVjdGlvblxuICAgKiBEZWZhdWx0OiAxMDBcbiAgICovXG4gIHNjcm9sbFNhbXBsaW5nUmF0ZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVHlwZSBvZiBzdG9yYWdlOiAnc2Vzc2lvbicgb3IgJ2xvY2FsJ1xuICAgKiBEZWZhdWx0OiAnbG9jYWwnXG4gICAqL1xuICBzdG9yYWdlVHlwZT86IFN0b3JhZ2VUeXBlO1xufVxuXG5leHBvcnQgY29uc3QgQkFTRV9NT0RVTEVfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuKCdCQVNFX01PRFVMRV9DT05GSUcnKTtcbiJdfQ==
@@ -4,6 +4,7 @@ import { Observable } from 'rxjs';
4
4
  import { GraphQLService } from './graphql.service';
5
5
  import { GraphQLMetaService } from './graphql-meta.service';
6
6
  import { LoaderService } from './loader.service';
7
+ import { GraphQLRequestType } from '../enums/graphql-request-type.enum';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "apollo-angular";
9
10
  import * as i2 from "./graphql-meta.service";
@@ -33,7 +34,9 @@ export class GraphQLPlusService extends GraphQLService {
33
34
  }
34
35
  subscriber.next(response);
35
36
  this.handleLoader('stop', options);
36
- subscriber.complete();
37
+ if (options.type !== GraphQLRequestType.SUBSCRIPTION) {
38
+ subscriber.complete();
39
+ }
37
40
  }, (error) => {
38
41
  if (!options.ignoreErrors) {
39
42
  this.handleError(error, options.excludedErrors);
@@ -84,4 +87,4 @@ GraphQLPlusService.ctorParameters = () => [
84
87
  { type: GraphQLMetaService },
85
88
  { type: LoaderService }
86
89
  ];
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC1wbHVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NyYy9saWIvYmFzZS9zZXJ2aWNlcy9ncmFwaHFsLXBsdXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBRWpEOztHQUVHO0FBSUgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQWM7SUFDcEQ7O09BRUc7SUFDSCxZQUNZLE1BQWMsRUFDZCxrQkFBc0MsRUFDdEMsYUFBNEI7UUFFdEMsS0FBSyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBSnhCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBR3hDLENBQUM7SUFFTSxPQUFPLENBQUMsT0FBZSxFQUFFLFVBQStCLEVBQUU7UUFDL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFcEMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ25DLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FDdkMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDWCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO29CQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUMxRCxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDbkMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUN2QjtnQkFFRCxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbkMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO29CQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ2pEO2dCQUNELFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBdUIsRUFBRSxPQUE0QjtRQUNoRSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsSUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFO2dCQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzVCO2lCQUFNLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtnQkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUMzQjtTQUNGO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFZLEVBQUUsaUJBQXNCLElBQUk7UUFDbEQsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNqQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7b0JBQ3ZDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7d0JBQ3ZELE9BQU87cUJBQ1I7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFO2dCQUM5RSxPQUFPO2FBQ1I7U0FDRjtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVO1FBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7OztZQXhFRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQWJRLE1BQU07WUFJTixrQkFBa0I7WUFFbEIsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwb2xsbyB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdyYXBoUUxTZXJ2aWNlIH0gZnJvbSAnLi9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JhcGhRTE1ldGFTZXJ2aWNlIH0gZnJvbSAnLi9ncmFwaHFsLW1ldGEuc2VydmljZSc7XG5pbXBvcnQgeyBJR3JhcGhRTFBsdXNPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ncmFwaHFsLXBsdXMtb3B0aW9ucy5pbnRlcmZhY2VuJztcbmltcG9ydCB7IExvYWRlclNlcnZpY2UgfSBmcm9tICcuL2xvYWRlci5zZXJ2aWNlJztcblxuLyoqXG4gKiBHcmFwaFFMIHBsdXMgc2VydmljZSwgZm9yIGV4dHJhIGVycm9yIGhhbmRsaW5nIGFuZCBsb2FkaW5nIGluZGljYXRpb25cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdyYXBoUUxQbHVzU2VydmljZSBleHRlbmRzIEdyYXBoUUxTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEluY2x1ZGUgc2VydmljZXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBhcG9sbG86IEFwb2xsbyxcbiAgICBwcm90ZWN0ZWQgZ3JhcGhxbE1ldGFTZXJ2aWNlOiBHcmFwaFFMTWV0YVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGxvYWRlclNlcnZpY2U6IExvYWRlclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoYXBvbGxvLCBncmFwaHFsTWV0YVNlcnZpY2UpO1xuICB9XG5cbiAgcHVibGljIGdyYXBoUWwoZ3JhcGhxbDogc3RyaW5nLCBvcHRpb25zOiBJR3JhcGhRTFBsdXNPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMuaGFuZGxlTG9hZGVyKCdzdGFydCcsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBzdXBlci5ncmFwaFFsKGdyYXBocWwsIG9wdGlvbnMpLnN1YnNjcmliZShcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmVycm9ycykge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihyZXNwb25zZS5lcnJvcnMsIG9wdGlvbnMuZXhjbHVkZWRFcnJvcnMpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihyZXNwb25zZSk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUxvYWRlcignc3RvcCcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN1YnNjcmliZXIubmV4dChyZXNwb25zZSk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVMb2FkZXIoJ3N0b3AnLCBvcHRpb25zKTtcbiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsIG9wdGlvbnMuZXhjbHVkZWRFcnJvcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUxvYWRlcignc3RvcCcsIG9wdGlvbnMpO1xuICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUxvYWRlcihzdGF0ZTogJ3N0YXJ0JyB8ICdzdG9wJywgb3B0aW9uczogSUdyYXBoUUxQbHVzT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zLmxvYWRpbmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICB0aGlzLmxvYWRlclNlcnZpY2Uuc3RhcnQoKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09ICdzdG9wJykge1xuICAgICAgICB0aGlzLmxvYWRlclNlcnZpY2Uuc3RvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUVycm9yKGVycm9yOiBFcnJvciwgZXhjbHVkZWRFcnJvcnM6IGFueSA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoZXhjbHVkZWRFcnJvcnMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4Y2x1ZGVkRXJyb3JzKSkge1xuICAgICAgICBleGNsdWRlZEVycm9ycy5mb3JFYWNoKChleGNsdWRlZEVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoZXhjbHVkZWRFcnJvci50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhleGNsdWRlZEVycm9ycz8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheUVycm9yKGVycm9yKTtcbiAgfVxuXG4gIGRpc3BsYXlFcnJvcihlcnJvcjogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gIH1cbn1cbiJdfQ==
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC1wbHVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NyYy9saWIvYmFzZS9zZXJ2aWNlcy9ncmFwaHFsLXBsdXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7O0FBRXhFOztHQUVHO0FBSUgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQWM7SUFDcEQ7O09BRUc7SUFDSCxZQUNZLE1BQWMsRUFDZCxrQkFBc0MsRUFDdEMsYUFBNEI7UUFFdEMsS0FBSyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBSnhCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBR3hDLENBQUM7SUFFTSxPQUFPLENBQUMsT0FBZSxFQUFFLFVBQStCLEVBQUU7UUFDL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFcEMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ25DLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FDdkMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDWCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO29CQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUMxRCxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDbkMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUN2QjtnQkFFRCxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLFlBQVksRUFBRTtvQkFDcEQsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUN2QjtZQUNILENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO29CQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ2pEO2dCQUNELFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBdUIsRUFBRSxPQUE0QjtRQUNoRSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsSUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFO2dCQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzVCO2lCQUFNLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtnQkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUMzQjtTQUNGO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFZLEVBQUUsaUJBQXNCLElBQUk7UUFDbEQsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNqQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7b0JBQ3ZDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7d0JBQ3ZELE9BQU87cUJBQ1I7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFO2dCQUM5RSxPQUFPO2FBQ1I7U0FDRjtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVO1FBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7OztZQTFFRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQWRRLE1BQU07WUFJTixrQkFBa0I7WUFFbEIsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwb2xsbyB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdyYXBoUUxTZXJ2aWNlIH0gZnJvbSAnLi9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JhcGhRTE1ldGFTZXJ2aWNlIH0gZnJvbSAnLi9ncmFwaHFsLW1ldGEuc2VydmljZSc7XG5pbXBvcnQgeyBJR3JhcGhRTFBsdXNPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ncmFwaHFsLXBsdXMtb3B0aW9ucy5pbnRlcmZhY2VuJztcbmltcG9ydCB7IExvYWRlclNlcnZpY2UgfSBmcm9tICcuL2xvYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEdyYXBoUUxSZXF1ZXN0VHlwZSB9IGZyb20gJy4uL2VudW1zL2dyYXBocWwtcmVxdWVzdC10eXBlLmVudW0nO1xuXG4vKipcbiAqIEdyYXBoUUwgcGx1cyBzZXJ2aWNlLCBmb3IgZXh0cmEgZXJyb3IgaGFuZGxpbmcgYW5kIGxvYWRpbmcgaW5kaWNhdGlvblxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgR3JhcGhRTFBsdXNTZXJ2aWNlIGV4dGVuZHMgR3JhcGhRTFNlcnZpY2Uge1xuICAvKipcbiAgICogSW5jbHVkZSBzZXJ2aWNlc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGFwb2xsbzogQXBvbGxvLFxuICAgIHByb3RlY3RlZCBncmFwaHFsTWV0YVNlcnZpY2U6IEdyYXBoUUxNZXRhU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbG9hZGVyU2VydmljZTogTG9hZGVyU2VydmljZVxuICApIHtcbiAgICBzdXBlcihhcG9sbG8sIGdyYXBocWxNZXRhU2VydmljZSk7XG4gIH1cblxuICBwdWJsaWMgZ3JhcGhRbChncmFwaHFsOiBzdHJpbmcsIG9wdGlvbnM6IElHcmFwaFFMUGx1c09wdGlvbnMgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgdGhpcy5oYW5kbGVMb2FkZXIoJ3N0YXJ0Jywgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIHN1cGVyLmdyYXBoUWwoZ3JhcGhxbCwgb3B0aW9ucykuc3Vic2NyaWJlKFxuICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZXJyb3JzKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKHJlc3BvbnNlLmVycm9ycywgb3B0aW9ucy5leGNsdWRlZEVycm9ycyk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTG9hZGVyKCdzdG9wJywgb3B0aW9ucyk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlc3BvbnNlKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUxvYWRlcignc3RvcCcsIG9wdGlvbnMpO1xuICAgICAgICAgIGlmIChvcHRpb25zLnR5cGUgIT09IEdyYXBoUUxSZXF1ZXN0VHlwZS5TVUJTQ1JJUFRJT04pIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsIG9wdGlvbnMuZXhjbHVkZWRFcnJvcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUxvYWRlcignc3RvcCcsIG9wdGlvbnMpO1xuICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUxvYWRlcihzdGF0ZTogJ3N0YXJ0JyB8ICdzdG9wJywgb3B0aW9uczogSUdyYXBoUUxQbHVzT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zLmxvYWRpbmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICB0aGlzLmxvYWRlclNlcnZpY2Uuc3RhcnQoKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09ICdzdG9wJykge1xuICAgICAgICB0aGlzLmxvYWRlclNlcnZpY2Uuc3RvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUVycm9yKGVycm9yOiBFcnJvciwgZXhjbHVkZWRFcnJvcnM6IGFueSA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoZXhjbHVkZWRFcnJvcnMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4Y2x1ZGVkRXJyb3JzKSkge1xuICAgICAgICBleGNsdWRlZEVycm9ycy5mb3JFYWNoKChleGNsdWRlZEVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoZXhjbHVkZWRFcnJvci50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhleGNsdWRlZEVycm9ycz8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheUVycm9yKGVycm9yKTtcbiAgfVxuXG4gIGRpc3BsYXlFcnJvcihlcnJvcjogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gIH1cbn1cbiJdfQ==
@@ -106,13 +106,29 @@ export class GraphQLService {
106
106
  const documentNode = fields
107
107
  ? gql(config.type + '{\n' + graphql + args + fields + '\n}')
108
108
  : gql(config.type + '{\n' + graphql + args + '\n}');
109
+ // Log
110
+ if (config.log) {
111
+ console.log({ documentNode });
112
+ }
109
113
  const request = {};
110
114
  request[config.type] = documentNode;
111
115
  // Log
112
116
  if (config.log) {
113
117
  console.log({ request });
114
118
  }
115
- const func = config.type === GraphQLRequestType.MUTATION ? 'mutate' : config.type;
119
+ let func;
120
+ if (config.type === GraphQLRequestType.MUTATION) {
121
+ func = 'mutate';
122
+ request[config.type] = documentNode;
123
+ }
124
+ else if (config.type === GraphQLRequestType.SUBSCRIPTION) {
125
+ func = 'subscribe';
126
+ request.query = documentNode;
127
+ }
128
+ else {
129
+ func = config.type;
130
+ request[config.type] = documentNode;
131
+ }
116
132
  this.apollo[func](request).subscribe((result) => {
117
133
  var _a;
118
134
  const data = ((_a = result === null || result === void 0 ? void 0 : result.data) === null || _a === void 0 ? void 0 : _a[graphql]) !== undefined ? result.data[graphql] : result;
@@ -130,8 +146,10 @@ export class GraphQLService {
130
146
  else {
131
147
  subscriber.next(config.model.map(data));
132
148
  }
133
- // Done
134
- subscriber.complete();
149
+ if (config.type !== GraphQLRequestType.SUBSCRIPTION) {
150
+ // Done
151
+ subscriber.complete();
152
+ }
135
153
  }, (error) => {
136
154
  subscriber.error(error);
137
155
  subscriber.complete();
@@ -142,14 +160,23 @@ export class GraphQLService {
142
160
  /**
143
161
  * Get fields / args from IGraphQLTypeCollection
144
162
  */
145
- graphQLTypeCollectionToStringArray(collection, current = '', result = []) {
163
+ graphQLTypeCollectionToStringArray(collection, current = '', result = [], cacheNode = []) {
146
164
  if (collection) {
147
165
  if (collection instanceof GraphQLType) {
148
166
  result.push(current);
149
167
  }
150
168
  else {
169
+ if (current === null || current === void 0 ? void 0 : current.includes('.')) {
170
+ cacheNode.push(current.split('.')[1]);
171
+ }
172
+ else if (current) {
173
+ cacheNode.push(current);
174
+ }
151
175
  for (const key of Object.keys(collection)) {
152
- this.graphQLTypeCollectionToStringArray(collection[key], current ? current + '.' + key : key, result);
176
+ if (current === key || cacheNode.includes(key)) {
177
+ continue;
178
+ }
179
+ this.graphQLTypeCollectionToStringArray(collection[key], current ? current + '.' + key : key, result, cacheNode);
153
180
  }
154
181
  }
155
182
  }
@@ -201,6 +228,10 @@ export class GraphQLService {
201
228
  }
202
229
  // Process object
203
230
  else if (typeof args === 'object') {
231
+ // Check object is empty
232
+ if (args && Object.keys(args).length === 0 && Object.getPrototypeOf(args) === Object.prototype) {
233
+ return { argsString: '{}', schemaArgs, usedArgs };
234
+ }
204
235
  // Process all object entries
205
236
  for (const [key, value] of Object.entries(args)) {
206
237
  // Init data for current entry
@@ -389,4 +420,4 @@ GraphQLService.ctorParameters = () => [
389
420
  { type: Apollo },
390
421
  { type: GraphQLMetaService }
391
422
  ];
392
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zcmMvbGliL2Jhc2Uvc2VydmljZXMvZ3JhcGhxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7O0FBRzVEOztHQUVHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFDekI7O09BRUc7SUFDSCxZQUFzQixNQUFjLEVBQVksa0JBQXNDO1FBQWhFLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBWSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0lBQUcsQ0FBQztJQUUxRjs7T0FFRztJQUNJLE9BQU8sQ0FBQyxPQUFlLEVBQUUsVUFBMkIsRUFBRTtRQUMzRCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsYUFBYTtRQUNiLE1BQU0sTUFBTSxtQkFDVixTQUFTLEVBQUUsSUFBSSxFQUNmLE1BQU0sRUFBRSxJQUFJLEVBQ1osR0FBRyxFQUFFLEtBQUssRUFDVixLQUFLLEVBQUUsSUFBSSxFQUNYLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLElBQzNC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SCxHQUFHOzRCQUNILEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUU7Z0NBQ3RCLE9BQU8sRUFDTCxPQUFPLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFHLEdBQUcsQ0FBQyxDQUFBLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRyxHQUFHLENBQUMsYUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO2dDQUN2RyxNQUFNLEVBQUUsV0FBVyxHQUFHLEdBQUc7Z0NBQ3pCLE1BQU07Z0NBQ04sWUFBWTtnQ0FDWixHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7Z0NBQ1osVUFBVTs2QkFDWCxDQUFDLENBQUMsWUFBWTs0QkFDZixJQUFJOzRCQUNKLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzs0QkFDOUIsR0FBRyxDQUFDO2lCQUNQO2FBQ0Y7U0FDRjtRQUVELGdCQUFnQjtRQUNoQixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNwRCxDQUFDOzs7O1lBcmVGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBZlEsTUFBTTtZQUtOLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwb2xsbywgZ3FsIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUdyYXBoUUxPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ncmFwaHFsLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyYXBoUUxSZXF1ZXN0VHlwZSB9IGZyb20gJy4uL2VudW1zL2dyYXBocWwtcmVxdWVzdC10eXBlLmVudW0nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR3JhcGhRTE1ldGFTZXJ2aWNlIH0gZnJvbSAnLi9ncmFwaHFsLW1ldGEuc2VydmljZSc7XG5pbXBvcnQgeyBHcmFwaFFMRW51bSB9IGZyb20gJy4uL2NsYXNzZXMvZ3JhcGhxbC1lbnVtLmNsYXNzJztcbmltcG9ydCB7IEdyYXBoUUxUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9ncmFwaHFsLXR5cGUuY2xhc3MnO1xuaW1wb3J0IHsgSUdyYXBoUUxUeXBlQ29sbGVjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ3JhcGhxbC10eXBlLWNvbGxlY3Rpb24uaW50ZXJmYWNlJztcblxuLyoqXG4gKiBHcmFwaFFMIHNlcnZpY2VcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdyYXBoUUxTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEluY2x1ZGUgc2VydmljZXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBhcG9sbG86IEFwb2xsbywgcHJvdGVjdGVkIGdyYXBoUUxNZXRhU2VydmljZTogR3JhcGhRTE1ldGFTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBHcmFwaFFMIHJlcXVlc3RcbiAgICovXG4gIHB1YmxpYyBncmFwaFFsKGdyYXBocWw6IHN0cmluZywgb3B0aW9uczogSUdyYXBoUUxPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIC8vIENoZWNrIGFyZ3VtZW50c1xuICAgIGlmICghZ3JhcGhxbCkge1xuICAgICAgdGhyb3dFcnJvcignTWlzc2luZyBncmFwaHFsIGFyZ3VtZW50Jyk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGNvbmZpZ1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGFyZ3VtZW50czogbnVsbCxcbiAgICAgIGZpZWxkczogbnVsbCxcbiAgICAgIGxvZzogZmFsc2UsXG4gICAgICBtb2RlbDogbnVsbCxcbiAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5RVUVSWSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIENvbnZlcnQgY2xhc3MgdG8gT2JqZWN0IGZvciBhcmd1bWVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5hcmd1bWVudHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbmZpZy5hcmd1bWVudHMgPSBuZXcgY29uZmlnLmFyZ3VtZW50cygpO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgY2xhc3MgdG8gT2JqZWN0IGZvciBmaWVsZHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5maWVsZHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbmZpZy5maWVsZHMgPSBuZXcgY29uZmlnLmZpZWxkcygpO1xuICAgIH1cblxuICAgIC8vIExvZ1xuICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICBjb25zb2xlLmxvZyh7IGNvbmZpZyB9KTtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHJlcXVlc3RcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIC8vIEdldCBtZXRhXG4gICAgICB0aGlzLmdyYXBoUUxNZXRhU2VydmljZS5nZXRNZXRhKHsgbG9nOiBjb25maWcubG9nIH0pLnN1YnNjcmliZSgobWV0YSkgPT4ge1xuICAgICAgICAvLyBQcmVwYXJlIGZpZWxkc1xuICAgICAgICBsZXQgZmllbGRzO1xuICAgICAgICBsZXQgYWxsb3dlZEZpZWxkcztcblxuICAgICAgICAvLyBMb2cgbWV0YVxuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgbWV0YSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuZmllbGRzKSB7XG4gICAgICAgICAgYWxsb3dlZEZpZWxkcyA9IG1ldGEuZ2V0RmllbGRzKGdyYXBocWwsIHsgdHlwZTogY29uZmlnLnR5cGUgfSk7XG5cbiAgICAgICAgICAvLyBMb2cgbWV0YVxuICAgICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh7IGFsbG93ZWRGaWVsZHMgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZmllbGRzRGF0YSA9IHRoaXMucHJlcGFyZUZpZWxkcyhjb25maWcuZmllbGRzLCB7XG4gICAgICAgICAgICBhbGxvd2VkOiBhbGxvd2VkRmllbGRzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gTG9nIGZpZWxkcyBkYXRhXG4gICAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICAgIGZpZWxkc0RhdGEudXNlZEZpZWxkcy5zb3J0KCk7XG4gICAgICAgICAgICBmaWVsZHNEYXRhLnNjaGVtYUZpZWxkcy5zb3J0KCk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGZpZWxkc0RhdGEuc2NoZW1hRmllbGRzLmZpbHRlcigoZmllbGQpID0+ICFmaWVsZHNEYXRhLnVzZWRGaWVsZHMuaW5jbHVkZXMoZmllbGQpKTtcbiAgICAgICAgICAgIGNvbnN0IHVudXNlZCA9IHRoaXMuZ3JhcGhRTFR5cGVDb2xsZWN0aW9uVG9TdHJpbmdBcnJheShhbGxvd2VkRmllbGRzKS5maWx0ZXIoXG4gICAgICAgICAgICAgIChmaWVsZCkgPT4gIWZpZWxkc0RhdGEudXNlZEZpZWxkcy5pbmNsdWRlcyhmaWVsZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh7IGZpZWxkc0RhdGEsIGZpbHRlcmVkLCB1bnVzZWQgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmllbGRzID0gZmllbGRzRGF0YS5maWVsZHNTdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGRzICYmICFmaWVsZHMuc3RhcnRzV2l0aCgneycpKSB7XG4gICAgICAgICAgZmllbGRzID0gJ3snICsgZmllbGRzICsgJ1xcbn0nO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTG9nIGZpZWxkc1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgZmllbGRzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGFsbG93ZWQgYXJnc1xuICAgICAgICBjb25zdCBhbGxvd2VkQXJncyA9IG1ldGEuZ2V0QXJncyhncmFwaHFsLCB7IHR5cGU6IGNvbmZpZy50eXBlIH0pO1xuXG4gICAgICAgIC8vIExvZyBhbGxvd2VkIGFyZ3NcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IGFsbG93ZWRBcmdzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJnc0RhdGEgPSB0aGlzLnByZXBhcmVBcmd1bWVudHMoY29uZmlnLmFyZ3VtZW50cywge1xuICAgICAgICAgIGFsbG93ZWQ6IGFsbG93ZWRBcmdzLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBMb2cgYXJncyBkYXRhXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgYXJnc0RhdGEudXNlZEFyZ3Muc29ydCgpO1xuICAgICAgICAgIGFyZ3NEYXRhLnNjaGVtYUFyZ3Muc29ydCgpO1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gYXJnc0RhdGEuc2NoZW1hQXJncy5maWx0ZXIoKGZpZWxkKSA9PiAhYXJnc0RhdGEudXNlZEFyZ3MuaW5jbHVkZXMoZmllbGQpKTtcbiAgICAgICAgICBjb25zdCB1bnVzZWQgPSB0aGlzLmdyYXBoUUxUeXBlQ29sbGVjdGlvblRvU3RyaW5nQXJyYXkoYWxsb3dlZEFyZ3MpXG4gICAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgICAuZmlsdGVyKChmaWVsZCkgPT4gIWFyZ3NEYXRhLnVzZWRBcmdzLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBhcmdzRGF0YSwgZmlsdGVyZWQsIHVudXNlZCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSBhcmdzRGF0YS5hcmdzU3RyaW5nIHx8ICcnO1xuXG4gICAgICAgIC8vIExvZ1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgZ3JhcGhRTDogZ3JhcGhxbCwgYXJncywgZmllbGRzLCB0eXBlOiBjb25maWcudHlwZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXBhcmUgcmVxdWVzdFxuICAgICAgICBjb25zdCBkb2N1bWVudE5vZGUgPSBmaWVsZHNcbiAgICAgICAgICA/IGdxbChjb25maWcudHlwZSArICd7XFxuJyArIGdyYXBocWwgKyBhcmdzICsgZmllbGRzICsgJ1xcbn0nKVxuICAgICAgICAgIDogZ3FsKGNvbmZpZy50eXBlICsgJ3tcXG4nICsgZ3JhcGhxbCArIGFyZ3MgKyAnXFxufScpO1xuXG4gICAgICAgIGNvbnN0IHJlcXVlc3Q6IGFueSA9IHt9O1xuICAgICAgICByZXF1ZXN0W2NvbmZpZy50eXBlXSA9IGRvY3VtZW50Tm9kZTtcblxuICAgICAgICAvLyBMb2dcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IHJlcXVlc3QgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmdW5jID0gY29uZmlnLnR5cGUgPT09IEdyYXBoUUxSZXF1ZXN0VHlwZS5NVVRBVElPTiA/ICdtdXRhdGUnIDogY29uZmlnLnR5cGU7XG4gICAgICAgICh0aGlzLmFwb2xsbyBhcyBhbnkpW2Z1bmNdKHJlcXVlc3QpLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXN1bHQ/LmRhdGE/LltncmFwaHFsXSAhPT0gdW5kZWZpbmVkID8gcmVzdWx0LmRhdGFbZ3JhcGhxbF0gOiByZXN1bHQ7XG5cbiAgICAgICAgICAgIC8vIERpcmVjdCBkYXRhXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5tb2RlbCkge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1hcCBkYXRhIGFzIGFycmF5XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChcbiAgICAgICAgICAgICAgICBkYXRhLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5tb2RlbC5tYXAoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWFwIGRhdGFcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY29uZmlnLm1vZGVsLm1hcChkYXRhKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERvbmVcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmllbGRzIC8gYXJncyBmcm9tIElHcmFwaFFMVHlwZUNvbGxlY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBncmFwaFFMVHlwZUNvbGxlY3Rpb25Ub1N0cmluZ0FycmF5KGNvbGxlY3Rpb246IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24sIGN1cnJlbnQgPSAnJywgcmVzdWx0ID0gW10pIHtcbiAgICBpZiAoY29sbGVjdGlvbikge1xuICAgICAgaWYgKGNvbGxlY3Rpb24gaW5zdGFuY2VvZiBHcmFwaFFMVHlwZSkge1xuICAgICAgICByZXN1bHQucHVzaChjdXJyZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgdGhpcy5ncmFwaFFMVHlwZUNvbGxlY3Rpb25Ub1N0cmluZ0FycmF5KFxuICAgICAgICAgICAgY29sbGVjdGlvbltrZXldIGFzIElHcmFwaFFMVHlwZUNvbGxlY3Rpb24sXG4gICAgICAgICAgICBjdXJyZW50ID8gY3VycmVudCArICcuJyArIGtleSA6IGtleSxcbiAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIGFyZ3VtZW50cyBmb3IgR3JhcGhRTCByZXF1ZXN0XG4gICAqL1xuICBwcm90ZWN0ZWQgcHJlcGFyZUFyZ3VtZW50cyhcbiAgICBhcmdzOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgYWxsb3dlZD86IGFueTtcbiAgICAgIGxldmVsPzogbnVtYmVyO1xuICAgICAgcGFyZW50Pzogc3RyaW5nO1xuICAgICAgc2NoZW1hQXJncz86IHN0cmluZ1tdO1xuICAgICAgdXNlZEFyZ3M/OiBzdHJpbmdbXTtcbiAgICB9ID0ge31cbiAgKTogeyBhcmdzU3RyaW5nOiBzdHJpbmc7IHNjaGVtYUFyZ3M6IHN0cmluZ1tdOyB1c2VkQXJnczogc3RyaW5nW10gfSB7XG4gICAgLy8gSW5pdCBjb25maWcgdmFyaWFibGVzXG4gICAgY29uc3QgeyBhbGxvd2VkLCBsZXZlbCwgcGFyZW50LCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9ID0ge1xuICAgICAgYWxsb3dlZDogbnVsbCxcbiAgICAgIGxldmVsOiAxLFxuICAgICAgcGFyZW50OiAnJyxcbiAgICAgIHNjaGVtYUFyZ3M6IFtdLFxuICAgICAgdXNlZEFyZ3M6IFtdLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuXG4gICAgLy8gQ2hlY2sgYXJnc1xuICAgIGlmIChhcmdzID09PSB1bmRlZmluZWQgfHwgYXJncyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogJycsIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH07XG4gICAgfVxuXG4gICAgLy8gSW5pdCBhcmdzXG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAvLyBQcm9jZXNzIGFycmF5XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJncykpIHtcbiAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gYWxsb3dlZCA/IE9iamVjdC5rZXlzKGFsbG93ZWQpIDogbnVsbDtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcmdzKSB7XG4gICAgICAgIGxldCBrZXkgPSBudWxsO1xuICAgICAgICBpZiAoYWxsb3dlZCkge1xuICAgICAgICAgIGlmIChhbGxvd2VkLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBrZXkgPSBhbGxvd2VkS2V5cz8uc2hpZnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgdmFsdWVcbiAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgdGhpcy5wcmVwYXJlQXJndW1lbnRzKGl0ZW0sIHtcbiAgICAgICAgICAgIGFsbG93ZWQ6IGtleSA/IGFsbG93ZWRba2V5XSA6IG51bGwsXG4gICAgICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnQgKyBrZXkgKyAnLicsXG4gICAgICAgICAgICBzY2hlbWFBcmdzLFxuICAgICAgICAgICAgdXNlZEFyZ3MsXG4gICAgICAgICAgfSkuYXJnc1N0cmluZ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBFbmNhcHN1bGF0aW9uIG9mIHRoZSBhcnJheSByZXN1bHRcbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgIC8vIENvbXBsZXRlIHJlc3VsdCwgZW5jYXBzdWxhdGVkIHZpYSByb3VuZCBicmFja2V0c1xuICAgICAgICBpZiAobGV2ZWwgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAnKCcgKyByZXN1bHQuam9pbignLCAnKSArICcpJywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZXBlciByZXN1bHQgcGFydCwgZW5jYXBzdWxhdGVkIHZpYSBzcXVhcmUgYnJhY2tldHNcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogJ1snICsgcmVzdWx0LmpvaW4oJywgJykgKyAnXScsIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIG9iamVjdFxuICAgIGVsc2UgaWYgKHR5cGVvZiBhcmdzID09PSAnb2JqZWN0Jykge1xuICAgICAgLy8gUHJvY2VzcyBhbGwgb2JqZWN0IGVudHJpZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3MpKSB7XG4gICAgICAgIC8vIEluaXQgZGF0YSBmb3IgY3VycmVudCBlbnRyeVxuICAgICAgICBjb25zdCBjdXJyZW50S2V5ID0gcGFyZW50ICsga2V5O1xuICAgICAgICBzY2hlbWFBcmdzLnB1c2goY3VycmVudEtleSk7XG5cbiAgICAgICAgLy8gSWYgdGhlIGFsbG93ZWQga2V5IGhhbmRsaW5nIGlzIGVuYWJsZWQgYW5kIHRoZSBjdXJyZW50IGtleSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZCBrZXlzLFxuICAgICAgICAvLyB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSBza2lwcGVkXG4gICAgICAgIGlmIChhbGxvd2VkICYmICFhbGxvd2VkW2tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNraXAgdmFsdWUgaWYgbm90IGV4aXN0c1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGN1cnJlbnQga2V5IHRvIG1ldGFkYXRhXG4gICAgICAgIHVzZWRBcmdzLnB1c2goY3VycmVudEtleSk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyBHcmFwaFFMRW51bVxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBHcmFwaFFMRW51bSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSArICc6JyArIHZhbHVlLnZhbHVlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgYXJyYXlcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgIGtleSArXG4gICAgICAgICAgICAgICc6IFsnICtcbiAgICAgICAgICAgICAgdmFsdWUubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlQXJndW1lbnRzKGl0ZW0sIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZFtrZXldLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN1cnJlbnRLZXkgKyAnLicsXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYUFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIHVzZWRBcmdzLFxuICAgICAgICAgICAgICAgICAgfSkuYXJnc1N0cmluZ1xuICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgJ10nXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXBhcmUgYWRkaXRpb25hbCByZXN1bHQgc3RyaW5nXG4gICAgICAgIGxldCBhZGRpdGlvbmFsUmVzdWx0ID0ga2V5ICsgJzogJztcblxuICAgICAgICAvLyBWYWx1ZSBpcyBhIGRhdGUgb2JqZWN0XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgICAgICAgIGFkZGl0aW9uYWxSZXN1bHQgKz0gYFwiXCJcIiR7KHZhbHVlIGFzIERhdGUpLnRvU3RyaW5nKCl9XCJcIlwiYDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbHVlIGlzIGEgc3RyaW5nXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAvLyBFbnVtIChkb2Vzbid0IG5lZWQgcXVvdGF0aW9uIG1hcmtzKVxuICAgICAgICAgIGlmIChhbGxvd2VkW2tleV0uaXNFbnVtKSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IHZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFN0cmluZ1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWRkaXRpb25hbFJlc3VsdCArPSBgXCJcIlwiJHt2YWx1ZS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyl9XCJcIlwiYDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWx1ZSBpcyBhIHNpbXBsZSBib29sZWFuIG9yIGEgbnVtYmVyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJzXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGFkZGl0aW9uYWxSZXN1bHQgKz0gdGhpcy5wcmVwYXJlQXJndW1lbnRzKHZhbHVlLCB7XG4gICAgICAgICAgICBhbGxvd2VkOiBhbGxvd2VkW2tleV0sXG4gICAgICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICAgICAgcGFyZW50OiBjdXJyZW50S2V5ICsgJy4nLFxuICAgICAgICAgICAgc2NoZW1hQXJncyxcbiAgICAgICAgICAgIHVzZWRBcmdzLFxuICAgICAgICAgIH0pLmFyZ3NTdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQdXNoIGRlZXBlciBwYXJ0IGludG8gcmVzdWx0IGFycmF5XG4gICAgICAgIHJlc3VsdC5wdXNoKGFkZGl0aW9uYWxSZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBFbmNhcHN1bGF0aW9uIG9mIHRoZSBvYmplY3QgcmVzdWx0XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAvLyBDb21wbGV0ZSByZXN1bHQsIGVuY2Fwc3VsYXRlZCB2aWEgcm91bmQgYnJhY2tldHNcbiAgICAgICAgaWYgKGxldmVsID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogJygnICsgcmVzdWx0LmpvaW4oJywgJykgKyAnKScsIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWVwZXIgcmVzdWx0IHBhcnQsIGVuY2Fwc3VsYXRlZCB2aWEgY3VybHkgYnJhY2tldHNcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogJ3snICsgcmVzdWx0LmpvaW4oJywgJykgKyAnfScsIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGFuZCBwcm9jZXNzIG90aGVyIC8gdW5rbm93biB2YWx1ZXMgYXMgSlNPTlxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogSlNPTi5zdHJpbmdpZnkoYXJncyksIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgZmllbGRzIGZvciBHcmFwaFFMIHJlcXVlc3RcbiAgICovXG4gIHByb3RlY3RlZCBwcmVwYXJlRmllbGRzKFxuICAgIGZpZWxkczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGFsbG93ZWQ/OiBhbnk7XG4gICAgICBzY2hlbWFGaWVsZHM/OiBzdHJpbmdbXTtcbiAgICAgIHVzZWRGaWVsZHM/OiBzdHJpbmdbXTtcbiAgICAgIHBhcmVudD86IHN0cmluZztcbiAgICAgIHNwYWNlcz86IG51bWJlcjtcbiAgICAgIHRhYj86IG51bWJlcjtcbiAgICB9ID0ge31cbiAgKTogeyBzY2hlbWFGaWVsZHM6IHN0cmluZ1tdOyBmaWVsZHNTdHJpbmc6IHN0cmluZzsgdXNlZEZpZWxkczogc3RyaW5nW10gfSB7XG4gICAgLy8gQ29uZmlnXG4gICAgY29uc3QgeyBhbGxvd2VkLCBwYXJlbnQsIHNjaGVtYUZpZWxkcywgc3BhY2VzLCB0YWIsIHVzZWRGaWVsZHMgfSA9IHtcbiAgICAgIGFsbG93ZWQ6IG51bGwsXG4gICAgICBwYXJlbnQ6ICcnLFxuICAgICAgc2NoZW1hRmllbGRzOiBbXSxcbiAgICAgIHNwYWNlczogMixcbiAgICAgIHRhYjogMSxcbiAgICAgIHVzZWRGaWVsZHM6IFtdLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuXG4gICAgLy8gSW5pdCBmaWVsZHMgc3RyaW5nXG4gICAgbGV0IGZpZWxkc1N0cmluZyA9ICcnO1xuXG4gICAgLy8gQ2hlY2sgZmllbGRzXG4gICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgIHJldHVybiB7IGZpZWxkc1N0cmluZywgc2NoZW1hRmllbGRzLCB1c2VkRmllbGRzIH07XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGZpZWxkcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChcbiAgICAgICAgYWxsb3dlZCAmJlxuICAgICAgICAoKHR5cGVvZiBhbGxvd2VkID09PSAnc3RyaW5nJyAmJiBhbGxvd2VkICE9PSBmaWVsZHMpIHx8ICh0eXBlb2YgYWxsb3dlZCA9PT0gJ29iamVjdCcgJiYgIWFsbG93ZWRbZmllbGRzXSkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHsgZmllbGRzU3RyaW5nLCBzY2hlbWFGaWVsZHMsIHVzZWRGaWVsZHMgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGZpZWxkc1N0cmluZzogJ1xcbicgKyAnICcucmVwZWF0KHNwYWNlcykucmVwZWF0KHRhYikgKyBmaWVsZHMsIHNjaGVtYUZpZWxkcywgdXNlZEZpZWxkcyB9O1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgYXJyYXlcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZpZWxkcykpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWVsZHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGZpZWxkc1N0cmluZyA9XG4gICAgICAgICAgICBmaWVsZHNTdHJpbmcgK1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlRmllbGRzKGl0ZW0sIHtcbiAgICAgICAgICAgICAgYWxsb3dlZCxcbiAgICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgICBzcGFjZXMsXG4gICAgICAgICAgICAgIHNjaGVtYUZpZWxkcyxcbiAgICAgICAgICAgICAgdGFiOiB0YWIgKyAxLFxuICAgICAgICAgICAgICB1c2VkRmllbGRzLFxuICAgICAgICAgICAgfSkuZmllbGRzU3RyaW5nO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gcGFyZW50ICsgaXRlbTtcbiAgICAgICAgc2NoZW1hRmllbGRzLnB1c2goY3VycmVudFBhdGgpO1xuICAgICAgICBpZiAoYWxsb3dlZCAmJiAhYWxsb3dlZD8uW2l0ZW1dKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdXNlZEZpZWxkcy5wdXNoKGN1cnJlbnRQYXRoKTtcbiAgICAgICAgZmllbGRzU3RyaW5nID1cbiAgICAgICAgICBmaWVsZHNTdHJpbmcgK1xuICAgICAgICAgIHRoaXMucHJlcGFyZUZpZWxkcyhpdGVtLCB7XG4gICAgICAgICAgICBhbGxvd2VkOlxuICAgICAgICAgICAgICB0eXBlb2YgYWxsb3dlZD8uW2l0ZW1dID09PSAnb2JqZWN0JyAmJiAhKGFsbG93ZWQ/LltpdGVtXSBpbnN0YW5jZW9mIEdyYXBoUUxUeXBlKSA/IGFsbG93ZWQ/LltpdGVtXSA6IGl0ZW0sXG4gICAgICAgICAgICBwYXJlbnQ6IGN1cnJlbnRQYXRoICsgJy4nLFxuICAgICAgICAgICAgc3BhY2VzLFxuICAgICAgICAgICAgc2NoZW1hRmllbGRzLFxuICAgICAgICAgICAgdGFiOiB0YWIgKyAxLFxuICAgICAgICAgICAgdXNlZEZpZWxkcyxcbiAgICAgICAgICB9KS5maWVsZHNTdHJpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBvYmplY3RcbiAgICBlbHNlIGlmICh0eXBlb2YgZmllbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkcykpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhdGggPSBwYXJlbnQgKyBrZXk7XG4gICAgICAgIHNjaGVtYUZpZWxkcy5wdXNoKGN1cnJlbnRQYXRoKTtcbiAgICAgICAgaWYgKGFsbG93ZWQgJiYgIWFsbG93ZWRba2V5XSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHVzZWRGaWVsZHMucHVzaChjdXJyZW50UGF0aCk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnb2JqZWN0JyB8fCAhT2JqZWN0LmtleXModmFsKS5sZW5ndGgpIHtcbiAgICAgICAgICBmaWVsZHNTdHJpbmcgPSBmaWVsZHNTdHJpbmcgKyAnXFxuJyArICcgJy5yZXBlYXQoc3BhY2VzKS5yZXBlYXQodGFiKSArIGtleTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWVsZHNTdHJpbmcgPVxuICAgICAgICAgICAgZmllbGRzU3RyaW5nICtcbiAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICcgJy5yZXBlYXQoc3BhY2VzKS5yZXBlYXQodGFiKSArXG4gICAgICAgICAgICBrZXkgK1xuICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICd7JyArXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVGaWVsZHModmFsLCB7XG4gICAgICAgICAgICAgIGFsbG93ZWQ6XG4gICAgICAgICAgICAgICAgdHlwZW9mIGFsbG93ZWQ/LltrZXldID09PSAnb2JqZWN0JyAmJiAhKGFsbG93ZWQ/LltrZXldIGluc3RhbmNlb2YgR3JhcGhRTFR5cGUpID8gYWxsb3dlZD8uW2tleV0gOiBrZXksXG4gICAgICAgICAgICAgIHBhcmVudDogY3VycmVudFBhdGggKyAnLicsXG4gICAgICAgICAgICAgIHNwYWNlcyxcbiAgICAgICAgICAgICAgc2NoZW1hRmllbGRzLFxuICAgICAgICAgICAgICB0YWI6IHRhYiArIDEsXG4gICAgICAgICAgICAgIHVzZWRGaWVsZHMsXG4gICAgICAgICAgICB9KS5maWVsZHNTdHJpbmcgK1xuICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgJyAnLnJlcGVhdChzcGFjZXMpLnJlcGVhdCh0YWIpICtcbiAgICAgICAgICAgICd9JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiByZXN1bHRcbiAgICByZXR1cm4geyBmaWVsZHNTdHJpbmcsIHNjaGVtYUZpZWxkcywgdXNlZEZpZWxkcyB9O1xuICB9XG59XG4iXX0=
423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zcmMvbGliL2Jhc2Uvc2VydmljZXMvZ3JhcGhxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7O0FBRzVEOztHQUVHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFDekI7O09BRUc7SUFDSCxZQUFzQixNQUFjLEVBQVksa0JBQXNDO1FBQWhFLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBWSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0lBQUcsQ0FBQztJQUUxRjs7T0FFRztJQUNJLE9BQU8sQ0FBQyxPQUFlLEVBQUUsVUFBMkIsRUFBRTtRQUMzRCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsYUFBYTtRQUNiLE1BQU0sTUFBTSxtQkFDVixTQUFTLEVBQUUsSUFBSSxFQUNmLE1BQU0sRUFBRSxJQUFJLEVBQ1osR0FBRyxFQUFFLEtBQUssRUFDVixLQUFLLEVBQUUsSUFBSSxFQUNYLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLElBQzNC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LElBQUk7NEJBQ0osR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDOzRCQUM5QixHQUFHOzRCQUNILEdBQUc7NEJBQ0gsR0FBRzs0QkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRTtnQ0FDdEIsT0FBTyxFQUNMLE9BQU8sQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUcsR0FBRyxDQUFDLENBQUEsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFHLEdBQUcsQ0FBQyxhQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc7Z0NBQ3ZHLE1BQU0sRUFBRSxXQUFXLEdBQUcsR0FBRztnQ0FDekIsTUFBTTtnQ0FDTixZQUFZO2dDQUNaLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztnQ0FDWixVQUFVOzZCQUNYLENBQUMsQ0FBQyxZQUFZOzRCQUNmLElBQUk7NEJBQ0osR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDOzRCQUM5QixHQUFHLENBQUM7aUJBQ1A7YUFDRjtTQUNGO1FBRUQsZ0JBQWdCO1FBQ2hCLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3BELENBQUM7Ozs7WUF6Z0JGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBZlEsTUFBTTtZQUtOLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwb2xsbywgZ3FsIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUdyYXBoUUxPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ncmFwaHFsLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyYXBoUUxSZXF1ZXN0VHlwZSB9IGZyb20gJy4uL2VudW1zL2dyYXBocWwtcmVxdWVzdC10eXBlLmVudW0nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR3JhcGhRTE1ldGFTZXJ2aWNlIH0gZnJvbSAnLi9ncmFwaHFsLW1ldGEuc2VydmljZSc7XG5pbXBvcnQgeyBHcmFwaFFMRW51bSB9IGZyb20gJy4uL2NsYXNzZXMvZ3JhcGhxbC1lbnVtLmNsYXNzJztcbmltcG9ydCB7IEdyYXBoUUxUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9ncmFwaHFsLXR5cGUuY2xhc3MnO1xuaW1wb3J0IHsgSUdyYXBoUUxUeXBlQ29sbGVjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ3JhcGhxbC10eXBlLWNvbGxlY3Rpb24uaW50ZXJmYWNlJztcblxuLyoqXG4gKiBHcmFwaFFMIHNlcnZpY2VcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdyYXBoUUxTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEluY2x1ZGUgc2VydmljZXNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBhcG9sbG86IEFwb2xsbywgcHJvdGVjdGVkIGdyYXBoUUxNZXRhU2VydmljZTogR3JhcGhRTE1ldGFTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBHcmFwaFFMIHJlcXVlc3RcbiAgICovXG4gIHB1YmxpYyBncmFwaFFsKGdyYXBocWw6IHN0cmluZywgb3B0aW9uczogSUdyYXBoUUxPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIC8vIENoZWNrIGFyZ3VtZW50c1xuICAgIGlmICghZ3JhcGhxbCkge1xuICAgICAgdGhyb3dFcnJvcignTWlzc2luZyBncmFwaHFsIGFyZ3VtZW50Jyk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGNvbmZpZ1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGFyZ3VtZW50czogbnVsbCxcbiAgICAgIGZpZWxkczogbnVsbCxcbiAgICAgIGxvZzogZmFsc2UsXG4gICAgICBtb2RlbDogbnVsbCxcbiAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5RVUVSWSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIENvbnZlcnQgY2xhc3MgdG8gT2JqZWN0IGZvciBhcmd1bWVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5hcmd1bWVudHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbmZpZy5hcmd1bWVudHMgPSBuZXcgY29uZmlnLmFyZ3VtZW50cygpO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgY2xhc3MgdG8gT2JqZWN0IGZvciBmaWVsZHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5maWVsZHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbmZpZy5maWVsZHMgPSBuZXcgY29uZmlnLmZpZWxkcygpO1xuICAgIH1cblxuICAgIC8vIExvZ1xuICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICBjb25zb2xlLmxvZyh7IGNvbmZpZyB9KTtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHJlcXVlc3RcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIC8vIEdldCBtZXRhXG4gICAgICB0aGlzLmdyYXBoUUxNZXRhU2VydmljZS5nZXRNZXRhKHsgbG9nOiBjb25maWcubG9nIH0pLnN1YnNjcmliZSgobWV0YSkgPT4ge1xuICAgICAgICAvLyBQcmVwYXJlIGZpZWxkc1xuICAgICAgICBsZXQgZmllbGRzO1xuICAgICAgICBsZXQgYWxsb3dlZEZpZWxkcztcblxuICAgICAgICAvLyBMb2cgbWV0YVxuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgbWV0YSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuZmllbGRzKSB7XG4gICAgICAgICAgYWxsb3dlZEZpZWxkcyA9IG1ldGEuZ2V0RmllbGRzKGdyYXBocWwsIHsgdHlwZTogY29uZmlnLnR5cGUgfSk7XG5cbiAgICAgICAgICAvLyBMb2cgbWV0YVxuICAgICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh7IGFsbG93ZWRGaWVsZHMgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZmllbGRzRGF0YSA9IHRoaXMucHJlcGFyZUZpZWxkcyhjb25maWcuZmllbGRzLCB7XG4gICAgICAgICAgICBhbGxvd2VkOiBhbGxvd2VkRmllbGRzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gTG9nIGZpZWxkcyBkYXRhXG4gICAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICAgIGZpZWxkc0RhdGEudXNlZEZpZWxkcy5zb3J0KCk7XG4gICAgICAgICAgICBmaWVsZHNEYXRhLnNjaGVtYUZpZWxkcy5zb3J0KCk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGZpZWxkc0RhdGEuc2NoZW1hRmllbGRzLmZpbHRlcigoZmllbGQpID0+ICFmaWVsZHNEYXRhLnVzZWRGaWVsZHMuaW5jbHVkZXMoZmllbGQpKTtcbiAgICAgICAgICAgIGNvbnN0IHVudXNlZCA9IHRoaXMuZ3JhcGhRTFR5cGVDb2xsZWN0aW9uVG9TdHJpbmdBcnJheShhbGxvd2VkRmllbGRzKS5maWx0ZXIoXG4gICAgICAgICAgICAgIChmaWVsZCkgPT4gIWZpZWxkc0RhdGEudXNlZEZpZWxkcy5pbmNsdWRlcyhmaWVsZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh7IGZpZWxkc0RhdGEsIGZpbHRlcmVkLCB1bnVzZWQgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmllbGRzID0gZmllbGRzRGF0YS5maWVsZHNTdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGRzICYmICFmaWVsZHMuc3RhcnRzV2l0aCgneycpKSB7XG4gICAgICAgICAgZmllbGRzID0gJ3snICsgZmllbGRzICsgJ1xcbn0nO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTG9nIGZpZWxkc1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgZmllbGRzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGFsbG93ZWQgYXJnc1xuICAgICAgICBjb25zdCBhbGxvd2VkQXJncyA9IG1ldGEuZ2V0QXJncyhncmFwaHFsLCB7IHR5cGU6IGNvbmZpZy50eXBlIH0pO1xuXG4gICAgICAgIC8vIExvZyBhbGxvd2VkIGFyZ3NcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IGFsbG93ZWRBcmdzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJnc0RhdGEgPSB0aGlzLnByZXBhcmVBcmd1bWVudHMoY29uZmlnLmFyZ3VtZW50cywge1xuICAgICAgICAgIGFsbG93ZWQ6IGFsbG93ZWRBcmdzLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBMb2cgYXJncyBkYXRhXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgYXJnc0RhdGEudXNlZEFyZ3Muc29ydCgpO1xuICAgICAgICAgIGFyZ3NEYXRhLnNjaGVtYUFyZ3Muc29ydCgpO1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gYXJnc0RhdGEuc2NoZW1hQXJncy5maWx0ZXIoKGZpZWxkKSA9PiAhYXJnc0RhdGEudXNlZEFyZ3MuaW5jbHVkZXMoZmllbGQpKTtcbiAgICAgICAgICBjb25zdCB1bnVzZWQgPSB0aGlzLmdyYXBoUUxUeXBlQ29sbGVjdGlvblRvU3RyaW5nQXJyYXkoYWxsb3dlZEFyZ3MpXG4gICAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgICAuZmlsdGVyKChmaWVsZCkgPT4gIWFyZ3NEYXRhLnVzZWRBcmdzLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBhcmdzRGF0YSwgZmlsdGVyZWQsIHVudXNlZCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSBhcmdzRGF0YS5hcmdzU3RyaW5nIHx8ICcnO1xuXG4gICAgICAgIC8vIExvZ1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgZ3JhcGhRTDogZ3JhcGhxbCwgYXJncywgZmllbGRzLCB0eXBlOiBjb25maWcudHlwZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXBhcmUgcmVxdWVzdFxuICAgICAgICBjb25zdCBkb2N1bWVudE5vZGUgPSBmaWVsZHNcbiAgICAgICAgICA/IGdxbChjb25maWcudHlwZSArICd7XFxuJyArIGdyYXBocWwgKyBhcmdzICsgZmllbGRzICsgJ1xcbn0nKVxuICAgICAgICAgIDogZ3FsKGNvbmZpZy50eXBlICsgJ3tcXG4nICsgZ3JhcGhxbCArIGFyZ3MgKyAnXFxufScpO1xuXG4gICAgICAgIC8vIExvZ1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgZG9jdW1lbnROb2RlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdDogYW55ID0ge307XG4gICAgICAgIHJlcXVlc3RbY29uZmlnLnR5cGVdID0gZG9jdW1lbnROb2RlO1xuXG4gICAgICAgIC8vIExvZ1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgcmVxdWVzdCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmdW5jO1xuICAgICAgICBpZiAoY29uZmlnLnR5cGUgPT09IEdyYXBoUUxSZXF1ZXN0VHlwZS5NVVRBVElPTikge1xuICAgICAgICAgIGZ1bmMgPSAnbXV0YXRlJztcbiAgICAgICAgICByZXF1ZXN0W2NvbmZpZy50eXBlXSA9IGRvY3VtZW50Tm9kZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25maWcudHlwZSA9PT0gR3JhcGhRTFJlcXVlc3RUeXBlLlNVQlNDUklQVElPTikge1xuICAgICAgICAgIGZ1bmMgPSAnc3Vic2NyaWJlJztcbiAgICAgICAgICByZXF1ZXN0LnF1ZXJ5ID0gZG9jdW1lbnROb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZ1bmMgPSBjb25maWcudHlwZTtcbiAgICAgICAgICByZXF1ZXN0W2NvbmZpZy50eXBlXSA9IGRvY3VtZW50Tm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgICh0aGlzLmFwb2xsbyBhcyBhbnkpW2Z1bmNdKHJlcXVlc3QpLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXN1bHQ/LmRhdGE/LltncmFwaHFsXSAhPT0gdW5kZWZpbmVkID8gcmVzdWx0LmRhdGFbZ3JhcGhxbF0gOiByZXN1bHQ7XG5cbiAgICAgICAgICAgIC8vIERpcmVjdCBkYXRhXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5tb2RlbCkge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1hcCBkYXRhIGFzIGFycmF5XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChcbiAgICAgICAgICAgICAgICBkYXRhLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5tb2RlbC5tYXAoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWFwIGRhdGFcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY29uZmlnLm1vZGVsLm1hcChkYXRhKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maWcudHlwZSAhPT0gR3JhcGhRTFJlcXVlc3RUeXBlLlNVQlNDUklQVElPTikge1xuICAgICAgICAgICAgICAvLyBEb25lXG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmllbGRzIC8gYXJncyBmcm9tIElHcmFwaFFMVHlwZUNvbGxlY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBncmFwaFFMVHlwZUNvbGxlY3Rpb25Ub1N0cmluZ0FycmF5KFxuICAgIGNvbGxlY3Rpb246IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24sXG4gICAgY3VycmVudCA9ICcnLFxuICAgIHJlc3VsdCA9IFtdLFxuICAgIGNhY2hlTm9kZSA9IFtdXG4gICkge1xuICAgIGlmIChjb2xsZWN0aW9uKSB7XG4gICAgICBpZiAoY29sbGVjdGlvbiBpbnN0YW5jZW9mIEdyYXBoUUxUeXBlKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGN1cnJlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGN1cnJlbnQ/LmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgICBjYWNoZU5vZGUucHVzaChjdXJyZW50LnNwbGl0KCcuJylbMV0pO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICBjYWNoZU5vZGUucHVzaChjdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKSkge1xuICAgICAgICAgIGlmIChjdXJyZW50ID09PSBrZXkgfHwgY2FjaGVOb2RlLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmdyYXBoUUxUeXBlQ29sbGVjdGlvblRvU3RyaW5nQXJyYXkoXG4gICAgICAgICAgICBjb2xsZWN0aW9uW2tleV0gYXMgSUdyYXBoUUxUeXBlQ29sbGVjdGlvbixcbiAgICAgICAgICAgIGN1cnJlbnQgPyBjdXJyZW50ICsgJy4nICsga2V5IDoga2V5LFxuICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgY2FjaGVOb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgYXJndW1lbnRzIGZvciBHcmFwaFFMIHJlcXVlc3RcbiAgICovXG4gIHByb3RlY3RlZCBwcmVwYXJlQXJndW1lbnRzKFxuICAgIGFyZ3M6IGFueSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBhbGxvd2VkPzogYW55O1xuICAgICAgbGV2ZWw/OiBudW1iZXI7XG4gICAgICBwYXJlbnQ/OiBzdHJpbmc7XG4gICAgICBzY2hlbWFBcmdzPzogc3RyaW5nW107XG4gICAgICB1c2VkQXJncz86IHN0cmluZ1tdO1xuICAgIH0gPSB7fVxuICApOiB7IGFyZ3NTdHJpbmc6IHN0cmluZzsgc2NoZW1hQXJnczogc3RyaW5nW107IHVzZWRBcmdzOiBzdHJpbmdbXSB9IHtcbiAgICAvLyBJbml0IGNvbmZpZyB2YXJpYWJsZXNcbiAgICBjb25zdCB7IGFsbG93ZWQsIGxldmVsLCBwYXJlbnQsIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH0gPSB7XG4gICAgICBhbGxvd2VkOiBudWxsLFxuICAgICAgbGV2ZWw6IDEsXG4gICAgICBwYXJlbnQ6ICcnLFxuICAgICAgc2NoZW1hQXJnczogW10sXG4gICAgICB1c2VkQXJnczogW10sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBDaGVjayBhcmdzXG4gICAgaWYgKGFyZ3MgPT09IHVuZGVmaW5lZCB8fCBhcmdzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAnJywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICB9XG5cbiAgICAvLyBJbml0IGFyZ3NcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgIC8vIFByb2Nlc3MgYXJyYXlcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzKSkge1xuICAgICAgY29uc3QgYWxsb3dlZEtleXMgPSBhbGxvd2VkID8gT2JqZWN0LmtleXMoYWxsb3dlZCkgOiBudWxsO1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFyZ3MpIHtcbiAgICAgICAgbGV0IGtleSA9IG51bGw7XG4gICAgICAgIGlmIChhbGxvd2VkKSB7XG4gICAgICAgICAgaWYgKGFsbG93ZWQubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtleSA9IGFsbG93ZWRLZXlzPy5zaGlmdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyB2YWx1ZVxuICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICB0aGlzLnByZXBhcmVBcmd1bWVudHMoaXRlbSwge1xuICAgICAgICAgICAgYWxsb3dlZDoga2V5ID8gYWxsb3dlZFtrZXldIDogbnVsbCxcbiAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDEsXG4gICAgICAgICAgICBwYXJlbnQ6IHBhcmVudCArIGtleSArICcuJyxcbiAgICAgICAgICAgIHNjaGVtYUFyZ3MsXG4gICAgICAgICAgICB1c2VkQXJncyxcbiAgICAgICAgICB9KS5hcmdzU3RyaW5nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuY2Fwc3VsYXRpb24gb2YgdGhlIGFycmF5IHJlc3VsdFxuICAgICAgaWYgKHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgLy8gQ29tcGxldGUgcmVzdWx0LCBlbmNhcHN1bGF0ZWQgdmlhIHJvdW5kIGJyYWNrZXRzXG4gICAgICAgIGlmIChsZXZlbCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICcoJyArIHJlc3VsdC5qb2luKCcsICcpICsgJyknLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVlcGVyIHJlc3VsdCBwYXJ0LCBlbmNhcHN1bGF0ZWQgdmlhIHNxdWFyZSBicmFja2V0c1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAnWycgKyByZXN1bHQuam9pbignLCAnKSArICddJywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgb2JqZWN0XG4gICAgZWxzZSBpZiAodHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnKSB7XG4gICAgICAvLyBDaGVjayBvYmplY3QgaXMgZW1wdHlcbiAgICAgIGlmIChhcmdzICYmIE9iamVjdC5rZXlzKGFyZ3MpLmxlbmd0aCA9PT0gMCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXJncykgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogJ3t9Jywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICAgIH1cbiAgICAgIC8vIFByb2Nlc3MgYWxsIG9iamVjdCBlbnRyaWVzXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhcmdzKSkge1xuICAgICAgICAvLyBJbml0IGRhdGEgZm9yIGN1cnJlbnQgZW50cnlcbiAgICAgICAgY29uc3QgY3VycmVudEtleSA9IHBhcmVudCArIGtleTtcbiAgICAgICAgc2NoZW1hQXJncy5wdXNoKGN1cnJlbnRLZXkpO1xuXG4gICAgICAgIC8vIElmIHRoZSBhbGxvd2VkIGtleSBoYW5kbGluZyBpcyBlbmFibGVkIGFuZCB0aGUgY3VycmVudCBrZXkgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBsaXN0IG9mIGFsbG93ZWQga2V5cyxcbiAgICAgICAgLy8gdGhlIGN1cnJlbnQga2V5IHdpbGwgYmUgc2tpcHBlZFxuICAgICAgICBpZiAoYWxsb3dlZCAmJiAhYWxsb3dlZFtrZXldKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTa2lwIHZhbHVlIGlmIG5vdCBleGlzdHNcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBjdXJyZW50IGtleSB0byBtZXRhZGF0YVxuICAgICAgICB1c2VkQXJncy5wdXNoKGN1cnJlbnRLZXkpO1xuXG4gICAgICAgIC8vIFByb2Nlc3MgR3JhcGhRTEVudW1cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgR3JhcGhRTEVudW0pIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkgKyAnOicgKyB2YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGFycmF5XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICBrZXkgK1xuICAgICAgICAgICAgICAnOiBbJyArXG4gICAgICAgICAgICAgIHZhbHVlLm1hcChcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZUFyZ3VtZW50cyhpdGVtLCB7XG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGFsbG93ZWRba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdXJyZW50S2V5ICsgJy4nLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWFBcmdzLFxuICAgICAgICAgICAgICAgICAgICB1c2VkQXJncyxcbiAgICAgICAgICAgICAgICAgIH0pLmFyZ3NTdHJpbmdcbiAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICddJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmVwYXJlIGFkZGl0aW9uYWwgcmVzdWx0IHN0cmluZ1xuICAgICAgICBsZXQgYWRkaXRpb25hbFJlc3VsdCA9IGtleSArICc6ICc7XG5cbiAgICAgICAgLy8gVmFsdWUgaXMgYSBkYXRlIG9iamVjdFxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IGBcIlwiXCIkeyh2YWx1ZSBhcyBEYXRlKS50b1N0cmluZygpfVwiXCJcImA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWx1ZSBpcyBhIHN0cmluZ1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgLy8gRW51bSAoZG9lc24ndCBuZWVkIHF1b3RhdGlvbiBtYXJrcylcbiAgICAgICAgICBpZiAoYWxsb3dlZFtrZXldLmlzRW51bSkge1xuICAgICAgICAgICAgYWRkaXRpb25hbFJlc3VsdCArPSB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTdHJpbmdcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxSZXN1bHQgKz0gYFwiXCJcIiR7dmFsdWUucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpfVwiXCJcImA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsdWUgaXMgYSBzaW1wbGUgYm9vbGVhbiBvciBhIG51bWJlclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgYWRkaXRpb25hbFJlc3VsdCArPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyc1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IHRoaXMucHJlcGFyZUFyZ3VtZW50cyh2YWx1ZSwge1xuICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZFtrZXldLFxuICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMSxcbiAgICAgICAgICAgIHBhcmVudDogY3VycmVudEtleSArICcuJyxcbiAgICAgICAgICAgIHNjaGVtYUFyZ3MsXG4gICAgICAgICAgICB1c2VkQXJncyxcbiAgICAgICAgICB9KS5hcmdzU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHVzaCBkZWVwZXIgcGFydCBpbnRvIHJlc3VsdCBhcnJheVxuICAgICAgICByZXN1bHQucHVzaChhZGRpdGlvbmFsUmVzdWx0KTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5jYXBzdWxhdGlvbiBvZiB0aGUgb2JqZWN0IHJlc3VsdFxuICAgICAgaWYgKHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgLy8gQ29tcGxldGUgcmVzdWx0LCBlbmNhcHN1bGF0ZWQgdmlhIHJvdW5kIGJyYWNrZXRzXG4gICAgICAgIGlmIChsZXZlbCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICcoJyArIHJlc3VsdC5qb2luKCcsICcpICsgJyknLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVlcGVyIHJlc3VsdCBwYXJ0LCBlbmNhcHN1bGF0ZWQgdmlhIGN1cmx5IGJyYWNrZXRzXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICd7JyArIHJlc3VsdC5qb2luKCcsICcpICsgJ30nLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhbmQgcHJvY2VzcyBvdGhlciAvIHVua25vd24gdmFsdWVzIGFzIEpTT05cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6IEpTT04uc3RyaW5naWZ5KGFyZ3MpLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIGZpZWxkcyBmb3IgR3JhcGhRTCByZXF1ZXN0XG4gICAqL1xuICBwcm90ZWN0ZWQgcHJlcGFyZUZpZWxkcyhcbiAgICBmaWVsZHM6IGFueSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBhbGxvd2VkPzogYW55O1xuICAgICAgc2NoZW1hRmllbGRzPzogc3RyaW5nW107XG4gICAgICB1c2VkRmllbGRzPzogc3RyaW5nW107XG4gICAgICBwYXJlbnQ/OiBzdHJpbmc7XG4gICAgICBzcGFjZXM/OiBudW1iZXI7XG4gICAgICB0YWI/OiBudW1iZXI7XG4gICAgfSA9IHt9XG4gICk6IHsgc2NoZW1hRmllbGRzOiBzdHJpbmdbXTsgZmllbGRzU3RyaW5nOiBzdHJpbmc7IHVzZWRGaWVsZHM6IHN0cmluZ1tdIH0ge1xuICAgIC8vIENvbmZpZ1xuICAgIGNvbnN0IHsgYWxsb3dlZCwgcGFyZW50LCBzY2hlbWFGaWVsZHMsIHNwYWNlcywgdGFiLCB1c2VkRmllbGRzIH0gPSB7XG4gICAgICBhbGxvd2VkOiBudWxsLFxuICAgICAgcGFyZW50OiAnJyxcbiAgICAgIHNjaGVtYUZpZWxkczogW10sXG4gICAgICBzcGFjZXM6IDIsXG4gICAgICB0YWI6IDEsXG4gICAgICB1c2VkRmllbGRzOiBbXSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIEluaXQgZmllbGRzIHN0cmluZ1xuICAgIGxldCBmaWVsZHNTdHJpbmcgPSAnJztcblxuICAgIC8vIENoZWNrIGZpZWxkc1xuICAgIGlmICghZmllbGRzKSB7XG4gICAgICByZXR1cm4geyBmaWVsZHNTdHJpbmcsIHNjaGVtYUZpZWxkcywgdXNlZEZpZWxkcyB9O1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBmaWVsZHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGFsbG93ZWQgJiZcbiAgICAgICAgKCh0eXBlb2YgYWxsb3dlZCA9PT0gJ3N0cmluZycgJiYgYWxsb3dlZCAhPT0gZmllbGRzKSB8fCAodHlwZW9mIGFsbG93ZWQgPT09ICdvYmplY3QnICYmICFhbGxvd2VkW2ZpZWxkc10pKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7IGZpZWxkc1N0cmluZywgc2NoZW1hRmllbGRzLCB1c2VkRmllbGRzIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBmaWVsZHNTdHJpbmc6ICdcXG4nICsgJyAnLnJlcGVhdChzcGFjZXMpLnJlcGVhdCh0YWIpICsgZmllbGRzLCBzY2hlbWFGaWVsZHMsIHVzZWRGaWVsZHMgfTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGFycmF5XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWVsZHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmllbGRzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmaWVsZHNTdHJpbmcgPVxuICAgICAgICAgICAgZmllbGRzU3RyaW5nICtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZUZpZWxkcyhpdGVtLCB7XG4gICAgICAgICAgICAgIGFsbG93ZWQsXG4gICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgc3BhY2VzLFxuICAgICAgICAgICAgICBzY2hlbWFGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYjogdGFiICsgMSxcbiAgICAgICAgICAgICAgdXNlZEZpZWxkcyxcbiAgICAgICAgICAgIH0pLmZpZWxkc1N0cmluZztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhcmVudCArIGl0ZW07XG4gICAgICAgIHNjaGVtYUZpZWxkcy5wdXNoKGN1cnJlbnRQYXRoKTtcbiAgICAgICAgaWYgKGFsbG93ZWQgJiYgIWFsbG93ZWQ/LltpdGVtXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHVzZWRGaWVsZHMucHVzaChjdXJyZW50UGF0aCk7XG4gICAgICAgIGZpZWxkc1N0cmluZyA9XG4gICAgICAgICAgZmllbGRzU3RyaW5nICtcbiAgICAgICAgICB0aGlzLnByZXBhcmVGaWVsZHMoaXRlbSwge1xuICAgICAgICAgICAgYWxsb3dlZDpcbiAgICAgICAgICAgICAgdHlwZW9mIGFsbG93ZWQ/LltpdGVtXSA9PT0gJ29iamVjdCcgJiYgIShhbGxvd2VkPy5baXRlbV0gaW5zdGFuY2VvZiBHcmFwaFFMVHlwZSkgPyBhbGxvd2VkPy5baXRlbV0gOiBpdGVtLFxuICAgICAgICAgICAgcGFyZW50OiBjdXJyZW50UGF0aCArICcuJyxcbiAgICAgICAgICAgIHNwYWNlcyxcbiAgICAgICAgICAgIHNjaGVtYUZpZWxkcyxcbiAgICAgICAgICAgIHRhYjogdGFiICsgMSxcbiAgICAgICAgICAgIHVzZWRGaWVsZHMsXG4gICAgICAgICAgfSkuZmllbGRzU3RyaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgb2JqZWN0XG4gICAgZWxzZSBpZiAodHlwZW9mIGZpZWxkcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZHMpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gcGFyZW50ICsga2V5O1xuICAgICAgICBzY2hlbWFGaWVsZHMucHVzaChjdXJyZW50UGF0aCk7XG4gICAgICAgIGlmIChhbGxvd2VkICYmICFhbGxvd2VkW2tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB1c2VkRmllbGRzLnB1c2goY3VycmVudFBhdGgpO1xuICAgICAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5rZXlzKHZhbCkubGVuZ3RoKSB7XG4gICAgICAgICAgZmllbGRzU3RyaW5nID0gZmllbGRzU3RyaW5nICsgJ1xcbicgKyAnICcucmVwZWF0KHNwYWNlcykucmVwZWF0KHRhYikgKyBrZXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRzU3RyaW5nID1cbiAgICAgICAgICAgIGZpZWxkc1N0cmluZyArXG4gICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAnICcucmVwZWF0KHNwYWNlcykucmVwZWF0KHRhYikgK1xuICAgICAgICAgICAga2V5ICtcbiAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAneycgK1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlRmllbGRzKHZhbCwge1xuICAgICAgICAgICAgICBhbGxvd2VkOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBhbGxvd2VkPy5ba2V5XSA9PT0gJ29iamVjdCcgJiYgIShhbGxvd2VkPy5ba2V5XSBpbnN0YW5jZW9mIEdyYXBoUUxUeXBlKSA/IGFsbG93ZWQ/LltrZXldIDoga2V5LFxuICAgICAgICAgICAgICBwYXJlbnQ6IGN1cnJlbnRQYXRoICsgJy4nLFxuICAgICAgICAgICAgICBzcGFjZXMsXG4gICAgICAgICAgICAgIHNjaGVtYUZpZWxkcyxcbiAgICAgICAgICAgICAgdGFiOiB0YWIgKyAxLFxuICAgICAgICAgICAgICB1c2VkRmllbGRzLFxuICAgICAgICAgICAgfSkuZmllbGRzU3RyaW5nICtcbiAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICcgJy5yZXBlYXQoc3BhY2VzKS5yZXBlYXQodGFiKSArXG4gICAgICAgICAgICAnfSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gcmVzdWx0XG4gICAgcmV0dXJuIHsgZmllbGRzU3RyaW5nLCBzY2hlbWFGaWVsZHMsIHVzZWRGaWVsZHMgfTtcbiAgfVxufVxuIl19